1 |
- {"version":3,"file":"39508.js","mappings":";;;;;;;;;;;;;AAAA;AACA,sBAAsB,wEAAwE,gBAAgB,sBAAsB,OAAO,sBAAsB,oBAAoB,gDAAgD,WAAW;AACjN;AAC/B;AACA,sBAAsB,gDAAmB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG,yCAAyC,gDAAmB;AAC/D;AACA,GAAG,qCAAqC,gDAAmB;AAC3D;AACA,GAAG;AACH;AACA,iEAAe,OAAO;;;;;;;;;;;;;ACrBtB;AACA,sBAAsB,wEAAwE,gBAAgB,sBAAsB,OAAO,sBAAsB,oBAAoB,gDAAgD,WAAW;AACjN;AAC/B;AACA,sBAAsB,gDAAmB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG,yCAAyC,gDAAmB;AAC/D;AACA,GAAG;AACH;AACA,iEAAe,WAAW;;;;;;;;;;;;;ACnB1B;AACA,sBAAsB,wEAAwE,gBAAgB,sBAAsB,OAAO,sBAAsB,oBAAoB,gDAAgD,WAAW;AACjN;AAC/B;AACA,sBAAsB,gDAAmB;AACzC;AACA;AACA;AACA;AACA;AACA,GAAG,yCAAyC,gDAAmB;AAC/D;AACA;AACA,GAAG;AACH;AACA,iEAAe,OAAO;;;;;;;;;;;;;ACftB;AACA,sBAAsB,wEAAwE,gBAAgB,sBAAsB,OAAO,sBAAsB,oBAAoB,gDAAgD,WAAW;AACjN;AAC/B;AACA,sBAAsB,gDAAmB;AACzC;AACA;AACA;AACA;AACA;AACA,GAAG,yCAAyC,gDAAmB;AAC/D;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,iEAAe,aAAa;;;;;;;;;;;;;ACjB5B;AACA,sBAAsB,wEAAwE,gBAAgB,sBAAsB,OAAO,sBAAsB,oBAAoB,gDAAgD,WAAW;AACjN;AAC/B;AACA,sBAAsB,gDAAmB;AACzC;AACA;AACA;AACA;AACA,GAAG,yCAAyC,gDAAmB;AAC/D;AACA;AACA;AACA;AACA,GAAG,qCAAqC,gDAAmB;AAC3D;AACA;AACA;AACA,GAAG;AACH;AACA,iEAAe,cAAc;;;;;;;;;;;;;ACpB7B;AACA,sBAAsB,wEAAwE,gBAAgB,sBAAsB,OAAO,sBAAsB,oBAAoB,gDAAgD,WAAW;AACjN;AAC/B;AACA,sBAAsB,gDAAmB;AACzC;AACA;AACA;AACA;AACA;AACA,GAAG,yCAAyC,gDAAmB;AAC/D;AACA;AACA,GAAG;AACH;AACA,iEAAe,QAAQ;;;;;;;;;;;;;ACfvB;AACA,sBAAsB,wEAAwE,gBAAgB,sBAAsB,OAAO,sBAAsB,oBAAoB,gDAAgD,WAAW;AACjN;AAC/B;AACA,sBAAsB,gDAAmB;AACzC;AACA;AACA;AACA;AACA;AACA,GAAG,yCAAyC,gDAAmB;AAC/D;AACA;AACA,GAAG;AACH;AACA,iEAAe,YAAY;;;;;;;;;;;;;ACf3B;AACA,sBAAsB,wEAAwE,gBAAgB,sBAAsB,OAAO,sBAAsB,oBAAoB,gDAAgD,WAAW;AACjN;AAC/B;AACA,sBAAsB,gDAAmB;AACzC;AACA;AACA;AACA;AACA;AACA,GAAG,yCAAyC,gDAAmB;AAC/D;AACA,GAAG;AACH;AACA,iEAAe,SAAS;;;;;;;ACdxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACvBA;AACA;AACA;AACA;AACA;;;;;;;;ACJA;AACA;AACA;AACA;AACA;;;;;;;;ACJA;AACA;AACA;AACA;;;;;;;;ACHA;AACA;AACA;AACA;AACA;;;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACrBA;AACA;AACA;AACA;AACA;;;;;;;;ACJA;AACA;AACA;AACA;AACA;;;;;;;;ACJA;AACA;AACA;AACA;AAC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","sources":["webpack://quran.com/./public/icons/book.svg","webpack://quran.com/./public/icons/bookmark.svg","webpack://quran.com/./public/icons/info.svg","webpack://quran.com/./public/icons/notes-empty.svg","webpack://quran.com/./public/icons/notes-filled.svg","webpack://quran.com/./public/icons/pause.svg","webpack://quran.com/./public/icons/play-arrow.svg","webpack://quran.com/./public/icons/reader.svg","webpack://quran.com/./src/components/QuranReader/ContextMenu.module.scss","webpack://quran.com/./src/components/QuranReader/DebuggingObserverWindow/ObserverWindow.module.scss","webpack://quran.com/./src/components/QuranReader/Notes/Notes.module.scss","webpack://quran.com/./src/components/QuranReader/PlayButton.module.scss","webpack://quran.com/./src/components/QuranReader/QueryParamMessage/QueryParamMessage.module.scss","webpack://quran.com/./src/components/QuranReader/QuranReader.module.scss","webpack://quran.com/./src/components/QuranReader/ReadingPreferenceSwitcher/ReadingPreference.module.scss","webpack://quran.com/./src/components/QuranReader/ReadingPreferenceSwitcher/ReadingPreferenceSwitcher.module.scss","webpack://quran.com/./src/components/QuranReader/RevelationOrderNavigationNotice.module.scss","webpack://quran.com/./src/components/QuranReader/SidebarNavigation/SidebarNavigation.module.scss","webpack://quran.com/./src/components/QuranReader/SidebarNavigation/SidebarSelectionSkeleton.module.scss","webpack://quran.com/./src/components/QuranReader/TranslationView/TranslationView.module.scss","webpack://quran.com/./src/components/Verse/Notes/Notes.module.scss","webpack://quran.com/./src/components/Verse/VerseLink/VerseLink.module.scss","webpack://quran.com/./src/components/chapters/ChapterHeader/ChapterHeader.module.scss","webpack://quran.com/./src/components/chapters/ChapterIcon/ChapterIconContainer.module.scss","webpack://quran.com/./src/components/dls/Badge/Badge.module.scss","webpack://quran.com/./src/components/dls/Badge/NewLabel/NewLabel.module.scss","webpack://quran.com/./src/components/dls/KeyboardInput/KeyboardInput.module.scss","webpack://quran.com/./src/components/Fonts/FontPreLoader.tsx","webpack://quran.com/./src/components/QuranReader/ContextMenu.tsx","webpack://quran.com/./src/components/QuranReader/DebuggingObserverWindow/index.tsx","webpack://quran.com/./src/components/QuranReader/Notes/Notes.tsx","webpack://quran.com/./src/components/QuranReader/PlayChapterAudioButton.tsx","webpack://quran.com/./src/components/QuranReader/QueryParamMessage/index.tsx","webpack://quran.com/./src/components/QuranReader/QuranReaderView.tsx","webpack://quran.com/./src/components/QuranReader/ReadingPreferenceSwitcher/ReadingPreferenceOption.tsx","webpack://quran.com/./src/components/QuranReader/ReadingPreferenceSwitcher/index.tsx","webpack://quran.com/./src/components/QuranReader/RevelationOrderNavigationNotice.tsx","webpack://quran.com/./src/components/QuranReader/SidebarNavigation/SidebarNavigation.tsx","webpack://quran.com/./src/components/QuranReader/SidebarNavigation/SidebarSelectionSkeleton.tsx","webpack://quran.com/./src/components/QuranReader/SidebarNavigation/SidebarNavigationSelections.tsx","webpack://quran.com/./src/components/QuranReader/TranslationView/BookmarkIcon.tsx","webpack://quran.com/./src/components/QuranReader/TranslationView/TranslationViewCell.tsx","webpack://quran.com/./src/components/QuranReader/TranslationView/TranslationViewVerse/TranslationPageVerse.tsx","webpack://quran.com/./src/components/QuranReader/TranslationView/TranslationViewVerse/hooks/useDedupedFetchVerse.ts","webpack://quran.com/./src/components/QuranReader/TranslationView/TranslationViewVerse/index.tsx","webpack://quran.com/./src/components/QuranReader/TranslationView/hooks/useGetVersesCount.ts","webpack://quran.com/./src/components/QuranReader/TranslationView/hooks/useScrollToVirtualizedVerse.ts","webpack://quran.com/./src/components/QuranReader/TranslationView/index.tsx","webpack://quran.com/./src/components/QuranReader/api.ts","webpack://quran.com/./src/components/QuranReader/contexts/VerseTrackerContext.tsx","webpack://quran.com/./src/components/QuranReader/hooks/useFetchPagesLookup.ts","webpack://quran.com/./src/components/QuranReader/hooks/useSyncReadingProgress.ts","webpack://quran.com/./src/components/QuranReader/index.tsx","webpack://quran.com/./src/components/QuranReader/onCopyQuranWords.ts","webpack://quran.com/./src/components/QuranReader/utils/memoization.ts","webpack://quran.com/./src/components/Verse/Notes/index.tsx","webpack://quran.com/./src/components/Verse/VerseLink/index.tsx","webpack://quran.com/./src/components/Verse/VerseText.tsx","webpack://quran.com/./src/components/Verse/pageUtils.ts","webpack://quran.com/./src/components/chapters/ChapterHeader/index.tsx","webpack://quran.com/./src/components/chapters/ChapterIcon/index.tsx","webpack://quran.com/./src/components/chapters/ChapterIcon/ChapterIconContainer.tsx","webpack://quran.com/./src/components/dls/Badge/Badge.tsx","webpack://quran.com/./src/components/dls/Badge/NewLabel/index.tsx","webpack://quran.com/./public/bismillah.svg","webpack://quran.com/./src/components/dls/Bismillah/Bismillah.tsx","webpack://quran.com/./src/components/dls/KeyboardInput/index.tsx","webpack://quran.com/./src/hooks/auth/useCountRangeNotes.ts","webpack://quran.com/./src/hooks/useGlobalIntersectionObserver.ts","webpack://quran.com/./src/hooks/useIsUsingDefaultSettings.tsx","webpack://quran.com/./src/hooks/useObserveElement.ts","webpack://quran.com/./src/hooks/useOutsideClickDetector.ts","webpack://quran.com/./src/hooks/useScrollToElement.ts","webpack://quran.com/./src/lib/og.ts","webpack://quran.com/./src/redux/slices/QuranReader/bookmarks.ts","webpack://quran.com/./src/redux/slices/QuranReader/contextMenu.ts","webpack://quran.com/./src/redux/slices/QuranReader/notes.ts","webpack://quran.com/./src/redux/slices/QuranReader/readingTracker.ts","webpack://quran.com/./src/redux/slices/QuranReader/sidebarNavigation.ts","webpack://quran.com/./src/redux/slices/revelationOrder.ts","webpack://quran.com/./src/utils/activity-day.ts","webpack://quran.com/./src/utils/juz.ts","webpack://quran.com/./src/utils/mergeVerseKeys.ts","webpack://quran.com/./src/utils/staticPageGeneration.ts","webpack://quran.com/./src/utils/word.ts","webpack://quran.com/./types/BookmarkType.ts","webpack://quran.com/./types/ScrollAlign.ts"],"sourcesContent":["var _path, _path2;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nvar SvgBook = function SvgBook(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n className: \"feather feather-book\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M4 19.5A2.5 2.5 0 0 1 6.5 17H20\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z\"\n })));\n};\nexport default SvgBook;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nvar SvgBookmark = function SvgBookmark(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n className: \"feather feather-bookmark\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m19 21-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z\"\n })));\n};\nexport default SvgBookmark;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nvar SvgInfo = function SvgInfo(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M11.625 0C5.208 0 0 5.208 0 11.625S5.208 23.25 11.625 23.25 23.25 18.042 23.25 11.625 18.042 0 11.625 0Zm1.162 17.438h-2.325v-6.975h2.325v6.975Zm0-9.3h-2.325V5.812h2.325v2.324Z\",\n fill: \"currentColor\"\n })));\n};\nexport default SvgInfo;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nvar SvgNotesEmpty = function SvgNotesEmpty(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 15,\n height: 15,\n viewBox: \"0 0 15 15\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M3 2.5a.5.5 0 0 1 .5-.5h5.586a.5.5 0 0 1 .353.146l2.415 2.415a.5.5 0 0 1 .146.353V12.5a.5.5 0 0 1-.5.5h-8a.5.5 0 0 1-.5-.5v-10ZM3.5 1A1.5 1.5 0 0 0 2 2.5v10A1.5 1.5 0 0 0 3.5 14h8a1.5 1.5 0 0 0 1.5-1.5V4.914a1.5 1.5 0 0 0-.44-1.06l-2.414-2.415A1.5 1.5 0 0 0 9.086 1H3.5Zm1 3a.5.5 0 0 0 0 1h3a.5.5 0 0 0 0-1h-3Zm0 3a.5.5 0 0 0 0 1h6a.5.5 0 0 0 0-1h-6Zm0 3a.5.5 0 0 0 0 1h6a.5.5 0 0 0 0-1h-6Z\",\n fill: \"currentColor\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\"\n })));\n};\nexport default SvgNotesEmpty;","var _path, _path2;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nvar SvgNotesFilled = function SvgNotesFilled(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"1.928 0.875 11.023 13.01\",\n width: 11.023,\n height: 13.01,\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M3.451.875a1.5 1.5 0 0 0-1.5 1.5v10a1.5 1.5 0 0 0 1.5 1.5h8a1.5 1.5 0 0 0 1.5-1.5V4.789c0-.398-.158-.779-.439-1.061l-2.414-2.414A1.5 1.5 0 0 0 9.037.875H3.451Z\",\n fill: \"#00abff\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M2.928 2.385a.5.5 0 0 1 .5-.5h5.586a.5.5 0 0 1 .354.146l2.414 2.414a.5.5 0 0 1 .146.354v7.586a.5.5 0 0 1-.5.5h-8a.5.5 0 0 1-.5-.5v-10Zm.5-1.5a1.5 1.5 0 0 0-1.5 1.5v10a1.5 1.5 0 0 0 1.5 1.5h8a1.5 1.5 0 0 0 1.5-1.5V4.799c0-.398-.158-.779-.439-1.061l-2.414-2.414A1.5 1.5 0 0 0 9.014.885H3.428Zm1 3a.5.5 0 0 0 0 1h3a.5.5 0 1 0 0-1h-3Zm0 3a.5.5 0 0 0 0 1h6a.5.5 0 0 0 0-1h-6Zm0 3a.5.5 0 0 0 0 1h6a.5.5 0 0 0 0-1h-6Z\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\"\n })));\n};\nexport default SvgNotesFilled;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nvar SvgPause = function SvgPause(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M5 20h4.571V4H5v16Zm9.143-16v16h4.571V4h-4.571Z\",\n fill: \"currentColor\"\n })));\n};\nexport default SvgPause;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nvar SvgPlayArrow = function SvgPlayArrow(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M4 2v20.364l16-10.182L4 2Z\",\n fill: \"currentColor\"\n })));\n};\nexport default SvgPlayArrow;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nvar SvgReader = function SvgReader(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M3 .623v22.004c0 .165.067.324.186.44a.64.64 0 0 0 .448.183h17.332a.64.64 0 0 0 .448-.182.617.617 0 0 0 .186-.44V.622a.617.617 0 0 0-.186-.44.64.64 0 0 0-.448-.183H3.634a.64.64 0 0 0-.448.182.617.617 0 0 0-.186.44Zm10.146 13.493H7.227v-1.66h5.918v1.66Zm4.227-4.152H7.227v-1.66h10.146v1.66Zm0-4.152H7.227v-1.66h10.146v1.66Z\"\n })));\n};\nexport default SvgReader;","// Exports\nmodule.exports = {\n\t\"container\": \"ContextMenu_container__M7_N3\",\n\t\"hide\": \"ContextMenu_hide__l1kVd\",\n\t\"visibleContainer\": \"ContextMenu_visibleContainer__KnWDa\",\n\t\"withVisibleBanner\": \"ContextMenu_withVisibleBanner__0U0w_\",\n\t\"expandedContainer\": \"ContextMenu_expandedContainer__W_YZP\",\n\t\"withVisibleSideBar\": \"ContextMenu_withVisibleSideBar__8iHQu\",\n\t\"chapter\": \"ContextMenu_chapter__VKK2w\",\n\t\"bold\": \"ContextMenu_bold__jqCU4\",\n\t\"sectionsContainer\": \"ContextMenu_sectionsContainer__x91pr\",\n\t\"halfSection\": \"ContextMenu_halfSection__vu5Iq\",\n\t\"section\": \"ContextMenu_section__hi_wD\",\n\t\"alignStart\": \"ContextMenu_alignStart__D4EZD\",\n\t\"alignEnd\": \"ContextMenu_alignEnd__4YQyB\",\n\t\"row\": \"ContextMenu_row__3Hf3R\",\n\t\"primaryInfo\": \"ContextMenu_primaryInfo__QL1fr\",\n\t\"secondaryInfo\": \"ContextMenu_secondaryInfo__FEnWx\",\n\t\"surahName\": \"ContextMenu_surahName__9ovH0\",\n\t\"chevronIconContainer\": \"ContextMenu_chevronIconContainer__Bfc57\",\n\t\"rotate180\": \"ContextMenu_rotate180__ar3NZ\",\n\t\"rotateAuto\": \"ContextMenu_rotateAuto__xUm9n\",\n\t\"disabledOnMobile\": \"ContextMenu_disabledOnMobile__Pjaj9\"\n};\n","// Exports\nmodule.exports = {\n\t\"container\": \"ObserverWindow_container__yPD6c\",\n\t\"readingMode\": \"ObserverWindow_readingMode__fiRzr\"\n};\n","// Exports\nmodule.exports = {\n\t\"container\": \"Notes_container__P4U6p\",\n\t\"visibleContainer\": \"Notes_visibleContainer__8hC3J\"\n};\n","// Exports\nmodule.exports = {\n\t\"container\": \"PlayButton_container__CTTxf\"\n};\n","// Exports\nmodule.exports = {\n\t\"container\": \"QueryParamMessage_container__qZWgn\",\n\t\"link\": \"QueryParamMessage_link__apDAP\"\n};\n","// Exports\nmodule.exports = {\n\t\"infiniteScroll\": \"QuranReader_infiniteScroll__IAfrZ\",\n\t\"readingView\": \"QuranReader_readingView__gmING\",\n\t\"loading\": \"QuranReader_loading__Wo_w6\",\n\t\"container\": \"QuranReader_container__8c0FU\",\n\t\"withVisibleSideBar\": \"QuranReader_withVisibleSideBar__STTiz\",\n\t\"withSidebarNavigationOpenOrAuto\": \"QuranReader_withSidebarNavigationOpenOrAuto__s2YDZ\",\n\t\"playButton\": \"QuranReader_playButton__dVd11\"\n};\n","// Exports\nmodule.exports = {\n\t\"container\": \"ReadingPreference_container__bK6Hm\",\n\t\"spinner\": \"ReadingPreference_spinner__DAbUN\",\n\t\"preferenceTextContainer\": \"ReadingPreference_preferenceTextContainer___J7Dx\",\n\t\"iconContainer\": \"ReadingPreference_iconContainer__Jk5Rm\"\n};\n","// Exports\nmodule.exports = {\n\t\"container\": \"ReadingPreferenceSwitcher_container__0Dzn6\",\n\t\"surahHeaderContainer\": \"ReadingPreferenceSwitcher_surahHeaderContainer__L6XJx\",\n\t\"contextMenuContainer\": \"ReadingPreferenceSwitcher_contextMenuContainer__RALtU\"\n};\n","// Exports\nmodule.exports = {\n\t\"sideDrawerViewContainer\": \"RevelationOrderNavigationNotice_sideDrawerViewContainer__R0aka\",\n\t\"endOfScrollingViewContainer\": \"RevelationOrderNavigationNotice_endOfScrollingViewContainer__moJQq\",\n\t\"link\": \"RevelationOrderNavigationNotice_link__NY714\"\n};\n","// Exports\nmodule.exports = {\n\t\"container\": \"SidebarNavigation_container__IooCv\",\n\t\"visibleContainer\": \"SidebarNavigation_visibleContainer__Y6E1c\",\n\t\"containerAuto\": \"SidebarNavigation_containerAuto__WRE2m\",\n\t\"header\": \"SidebarNavigation_header__fqOtn\",\n\t\"switchContainer\": \"SidebarNavigation_switchContainer__DU_JH\",\n\t\"contentContainer\": \"SidebarNavigation_contentContainer__FeDCs\",\n\t\"surahBodyContainer\": \"SidebarNavigation_surahBodyContainer__bZs9R\",\n\t\"verseListContainer\": \"SidebarNavigation_verseListContainer__tE5ut\",\n\t\"scrollableSectionContainer\": \"SidebarNavigation_scrollableSectionContainer__DEA47\",\n\t\"listContainer\": \"SidebarNavigation_listContainer__Z4xaB\",\n\t\"list\": \"SidebarNavigation_list__5GJEm\",\n\t\"listItem\": \"SidebarNavigation_listItem__geBUW\",\n\t\"selectedItem\": \"SidebarNavigation_selectedItem__swGQH\",\n\t\"surahListContainer\": \"SidebarNavigation_surahListContainer__IYouq\",\n\t\"searchInput\": \"SidebarNavigation_searchInput__vhw5Z\",\n\t\"spaceOnTop\": \"SidebarNavigation_spaceOnTop__VHaMe\",\n\t\"chapterNumber\": \"SidebarNavigation_chapterNumber__39NUY\",\n\t\"tip\": \"SidebarNavigation_tip__g4nzj\",\n\t\"revelationOrderHeader\": \"SidebarNavigation_revelationOrderHeader___cG5Q\"\n};\n","// Exports\nmodule.exports = {\n\t\"skeletonContainer\": \"SidebarSelectionSkeleton_skeletonContainer__Pl7tL\",\n\t\"row\": \"SidebarSelectionSkeleton_row__AF4Qi\"\n};\n","// Exports\nmodule.exports = {\n\t\"container\": \"TranslationView_container__M0fhJ\",\n\t\"wrapper\": \"TranslationView_wrapper__C8vfW\"\n};\n","// Exports\nmodule.exports = {\n\t\"container\": \"Notes_container__IGuVA\",\n\t\"newLabel\": \"Notes_newLabel__mLbXd\",\n\t\"newLabelContainer\": \"Notes_newLabelContainer__kHpCe\"\n};\n","// Exports\nmodule.exports = {\n\t\"verseLink\": \"VerseLink_verseLink__m_uNh\"\n};\n","// Exports\nmodule.exports = {\n\t\"container\": \"ChapterHeader_container__UANyL\",\n\t\"left\": \"ChapterHeader_left__9GlxX\",\n\t\"right\": \"ChapterHeader_right__IcBU9\",\n\t\"chapterId\": \"ChapterHeader_chapterId__Z_Pey\",\n\t\"bismillahContainer\": \"ChapterHeader_bismillahContainer__EXMlw\",\n\t\"translatedName\": \"ChapterHeader_translatedName__2sqjR\",\n\t\"arabicSurahNameContainer\": \"ChapterHeader_arabicSurahNameContainer__xn14U\",\n\t\"transliteratedName\": \"ChapterHeader_transliteratedName__V9dup\",\n\t\"actionContainer\": \"ChapterHeader_actionContainer__tbdf_\",\n\t\"translation\": \"ChapterHeader_translation__ERRFK\",\n\t\"translationBy\": \"ChapterHeader_translationBy__DDZAE\",\n\t\"changeTranslation\": \"ChapterHeader_changeTranslation__UlDJ5\",\n\t\"header\": \"ChapterHeader_header__kguEh\",\n\t\"chapterIconContainer\": \"ChapterHeader_chapterIconContainer__CJN7h\"\n};\n","// Exports\nmodule.exports = {\n\t\"iconContainer\": \"ChapterIconContainer_iconContainer__5umYV\",\n\t\"iconContainerSmall\": \"ChapterIconContainer_iconContainerSmall__gvmyy\",\n\t\"iconContainerLarge\": \"ChapterIconContainer_iconContainerLarge__z49r_\",\n\t\"iconContainerMega\": \"ChapterIconContainer_iconContainerMega__rKWtt\"\n};\n","// Exports\nmodule.exports = {\n\t\"container\": \"Badge_container__GXfIf\",\n\t\"content\": \"Badge_content__Ue8Y7\",\n\t\"positionBottomRight\": \"Badge_positionBottomRight__1JJDw\"\n};\n","// Exports\nmodule.exports = {\n\t\"label\": \"NewLabel_label__azDvj\"\n};\n","// Exports\nmodule.exports = {\n\t\"container\": \"KeyboardInput_container__Zwe4F\",\n\t\"invertedColors\": \"KeyboardInput_invertedColors__2s3F3\"\n};\n","import React from 'react';\n\nimport Head from 'next/head';\n\nconst DEFAULT_LOCALE = 'en';\n\nconst SURAH_NAMES_FONT = {\n type: 'font/woff2',\n location: '/fonts/quran/surah-names/v1/sura_names.woff2',\n};\n\nconst LOCALE_PRELOADED_FONTS = {\n [DEFAULT_LOCALE]: [\n { type: 'font/woff2', location: '/fonts/lang/ProximaVara/ProximaVara.woff2' },\n { ...SURAH_NAMES_FONT },\n ],\n ar: [\n { type: 'font/woff2', location: '/fonts/lang/arabic/NotoNaskhArabic-Regular.woff2' },\n { ...SURAH_NAMES_FONT },\n ],\n bn: [\n { type: 'font/woff2', location: '/fonts/lang/bengali/NotoSerifBengali-Regular.woff2' },\n { ...SURAH_NAMES_FONT },\n ],\n ur: [\n { type: 'font/woff2', location: '/fonts/lang/urdu/MehrNastaliqWeb.woff2' },\n { ...SURAH_NAMES_FONT },\n ],\n} as Record<string, { type: string; location: string }[]>;\n\nconst INDOPAK = {\n type: 'font/woff2',\n location: '/fonts/quran/hafs/nastaleeq/indopak/indopak-nastaleeq-waqf-lazim-v4.2.1.woff2',\n};\n\nconst QURAN_READER_LOCALE_PRELOADED_FONTS = {\n [DEFAULT_LOCALE]: [\n { type: 'font/woff2', location: '/fonts/quran/hafs/uthmanic_hafs/UthmanicHafs1Ver18.woff2' },\n ],\n bn: [INDOPAK],\n ur: [INDOPAK],\n id: [INDOPAK],\n} as Record<string, { type: string; location: string }[]>;\n\ninterface Props {\n locale: string;\n isQuranReader?: boolean;\n}\n\nconst getToBePreLoadedFonts = (locale: string, isQuranReader: boolean) => {\n if (!isQuranReader) {\n return LOCALE_PRELOADED_FONTS[locale] || LOCALE_PRELOADED_FONTS[DEFAULT_LOCALE];\n }\n return (\n QURAN_READER_LOCALE_PRELOADED_FONTS[locale] ||\n QURAN_READER_LOCALE_PRELOADED_FONTS[DEFAULT_LOCALE]\n );\n};\n\nconst FontPreLoader: React.FC<Props> = ({ locale, isQuranReader = false }) => {\n const toBePreLoadedFonts = getToBePreLoadedFonts(locale, isQuranReader);\n\n return (\n <Head>\n {toBePreLoadedFonts.map((fontDetails) => (\n <link\n key={fontDetails.location}\n rel=\"preload\"\n as=\"font\"\n type={fontDetails.type}\n href={fontDetails.location}\n crossOrigin=\"anonymous\"\n />\n ))}\n </Head>\n );\n};\n\nexport default FontPreLoader;\n","/* eslint-disable jsx-a11y/no-noninteractive-element-interactions */\n/* eslint-disable jsx-a11y/click-events-have-key-events */\nimport React, { useContext, useMemo } from 'react';\n\nimport classNames from 'classnames';\nimport useTranslation from 'next-translate/useTranslation';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport styles from './ContextMenu.module.scss';\nimport ReadingPreferenceSwitcher, {\n ReadingPreferenceSwitcherType,\n} from './ReadingPreferenceSwitcher';\n\nimport { useOnboarding } from '@/components/Onboarding/OnboardingProvider';\nimport { SwitchSize } from '@/dls/Switch/Switch';\nimport ChevronDownIcon from '@/icons/chevron-down.svg';\nimport { selectNavbar } from '@/redux/slices/navbar';\nimport { selectContextMenu } from '@/redux/slices/QuranReader/contextMenu';\nimport { selectNotes } from '@/redux/slices/QuranReader/notes';\nimport { selectLastReadVerseKey } from '@/redux/slices/QuranReader/readingTracker';\nimport {\n selectIsSidebarNavigationVisible,\n setIsVisible,\n} from '@/redux/slices/QuranReader/sidebarNavigation';\nimport { getChapterData, getChapterReadingProgress } from '@/utils/chapter';\nimport { logEvent } from '@/utils/eventLogger';\nimport { getJuzNumberByHizb } from '@/utils/juz';\nimport { toLocalizedNumber } from '@/utils/locale';\nimport { isMobile } from '@/utils/responsive';\nimport { getVerseNumberFromKey } from '@/utils/verse';\nimport DataContext from 'src/contexts/DataContext';\n\nconst ContextMenu = () => {\n const dispatch = useDispatch();\n const chaptersData = useContext(DataContext);\n const isSidebarNavigationVisible = useSelector(selectIsSidebarNavigationVisible);\n const { t, lang } = useTranslation('common');\n const isSideBarVisible = useSelector(selectNotes, shallowEqual).isVisible;\n const { isExpanded, showReadingPreferenceSwitcher: isReadingPreferenceSwitcherVisible } =\n useSelector(selectContextMenu, shallowEqual);\n\n const { isActive } = useOnboarding();\n const { isVisible: isNavbarVisible } = useSelector(selectNavbar, shallowEqual);\n const showNavbar = isNavbarVisible || isActive;\n const showReadingPreferenceSwitcher = isReadingPreferenceSwitcherVisible && !isActive;\n\n const { verseKey, chapterId, page, hizb } = useSelector(selectLastReadVerseKey, shallowEqual);\n const chapterData = useMemo(() => {\n return chapterId ? getChapterData(chaptersData, chapterId) : null;\n }, [chapterId, chaptersData]);\n const juzNumber = useMemo(() => {\n return hizb ? toLocalizedNumber(getJuzNumberByHizb(Number(hizb)), lang) : null;\n }, [hizb, lang]);\n const localizedHizb = useMemo(() => {\n return toLocalizedNumber(Number(hizb), lang);\n }, [hizb, lang]);\n const localizedPageNumber = useMemo(() => {\n return toLocalizedNumber(Number(page), lang);\n }, [page, lang]);\n\n // if it's SSR or the first time we render this\n if (!verseKey) {\n return <></>;\n }\n const verse = getVerseNumberFromKey(verseKey);\n const progress = getChapterReadingProgress(verse, chapterData.versesCount);\n\n return (\n <div\n className={classNames(styles.container, {\n [styles.visibleContainer]: showNavbar,\n [styles.expandedContainer]: isExpanded,\n [styles.withVisibleSideBar]: isSideBarVisible,\n })}\n // @ts-ignore\n // eslint-disable-next-line @typescript-eslint/naming-convention\n style={{ '--progress': `${progress}%` }} // this is to pass the value to css so it can be used to show the progress bar.\n >\n <div className={styles.sectionsContainer}>\n <div className={showReadingPreferenceSwitcher ? styles.section : styles.halfSection}>\n <div className={classNames(styles.row)}>\n <p\n className={classNames(styles.bold, styles.alignStart, styles.surahName, {\n [styles.disabledOnMobile]: isSidebarNavigationVisible,\n // on mobile, the click event is conflicting with `onClickOutside`,\n // causing the sidebar to be closed and opened again when this clicked. So we disable one of them for now\n })}\n onClick={(e) => {\n logEvent(\n `sidebar_navigation_${isSidebarNavigationVisible ? 'close' : 'open'}_trigger`,\n );\n e.stopPropagation();\n if (isSidebarNavigationVisible === 'auto') {\n // eslint-disable-next-line no-unneeded-ternary\n const shouldBeVisible = isMobile() ? true : false;\n dispatch(setIsVisible(shouldBeVisible));\n } else {\n dispatch(setIsVisible(!isSidebarNavigationVisible));\n }\n }}\n >\n {chapterData.transliteratedName}\n <span\n className={classNames(styles.chevronIconContainer, {\n [styles.rotate180]: isSidebarNavigationVisible === true,\n [styles.rotateAuto]: isSidebarNavigationVisible === 'auto',\n })}\n >\n <ChevronDownIcon />\n </span>\n </p>\n </div>\n </div>\n {showReadingPreferenceSwitcher && (\n <div className={styles.halfSection}>\n <ReadingPreferenceSwitcher\n size={SwitchSize.XSmall}\n isIconsOnly\n type={ReadingPreferenceSwitcherType.ContextMenu}\n />\n </div>\n )}\n <div className={showReadingPreferenceSwitcher ? styles.section : styles.halfSection}>\n <div className={classNames(styles.row)}>\n <p\n className={classNames(styles.alignEnd, {\n [styles.hide]: !isExpanded,\n })}\n />\n <p className={classNames(styles.alignEnd)}>\n {isExpanded && (\n <span className={styles.secondaryInfo}>\n {/* eslint-disable-next-line i18next/no-literal-string */}\n {t('juz')} {juzNumber} / {t('hizb')} {localizedHizb} -{' '}\n </span>\n )}\n <span className={styles.primaryInfo}>\n {t('page')} {localizedPageNumber}\n </span>\n </p>\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default ContextMenu;\n","import React from 'react';\n\nimport classNames from 'classnames';\n\nimport styles from './ObserverWindow.module.scss';\n\ninterface Props {\n isReadingMode: boolean;\n}\n\nconst DebuggingObserverWindow: React.FC<Props> = ({ isReadingMode }) => {\n if (process.env.NEXT_PUBLIC_DEBUG_OBSERVER_WINDOW !== 'true') {\n return <></>;\n }\n return (\n <div\n className={classNames(styles.container, {\n [styles.readingMode]: isReadingMode,\n })}\n />\n );\n};\n\nexport default DebuggingObserverWindow;\n","/* eslint-disable i18next/no-literal-string */\nimport React from 'react';\n\nimport classNames from 'classnames';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport styles from './Notes.module.scss';\n\nimport { setIsVisible, selectNotes } from '@/redux/slices/QuranReader/notes';\n\nconst Notes = () => {\n const dispatch = useDispatch();\n const { isVisible } = useSelector(selectNotes, shallowEqual);\n\n return (\n <div className={classNames(styles.container, { [styles.visibleContainer]: isVisible })}>\n Notes placeholders\n <br />\n <button type=\"button\" onClick={() => dispatch({ type: setIsVisible.type, payload: false })}>\n close\n </button>\n </div>\n );\n};\n\nexport default Notes;\n","import { useContext } from 'react';\n\nimport { useSelector } from '@xstate/react';\nimport useTranslation from 'next-translate/useTranslation';\n\nimport Spinner from '../dls/Spinner/Spinner';\n\nimport styles from './PlayButton.module.scss';\n\nimport Button, { ButtonSize, ButtonType, ButtonVariant } from '@/dls/Button/Button';\nimport useGetQueryParamOrXstateValue from '@/hooks/useGetQueryParamOrXstateValue';\nimport PauseIcon from '@/icons/pause.svg';\nimport PlayIcon from '@/icons/play-arrow.svg';\nimport QueryParam from '@/types/QueryParam';\nimport { getChapterData } from '@/utils/chapter';\nimport { logButtonClick } from '@/utils/eventLogger';\nimport DataContext from 'src/contexts/DataContext';\nimport {\n selectIsLoadingCurrentChapter,\n selectIsPlayingCurrentChapter,\n} from 'src/xstate/actors/audioPlayer/selectors';\nimport { AudioPlayerMachineContext } from 'src/xstate/AudioPlayerMachineContext';\n\ninterface Props {\n chapterId: number;\n}\nconst PlayChapterAudioButton: React.FC<Props> = ({ chapterId }) => {\n const { t } = useTranslation('common');\n const chaptersData = useContext(DataContext);\n const chapterData = getChapterData(chaptersData, chapterId.toString());\n\n const audioService = useContext(AudioPlayerMachineContext);\n const isLoadingCurrentChapter = useSelector(audioService, (state) =>\n selectIsLoadingCurrentChapter(state, chapterId),\n );\n const isPlayingCurrentChapter = useSelector(audioService, (state) =>\n selectIsPlayingCurrentChapter(state, chapterId),\n );\n\n const {\n value: reciterId,\n isQueryParamDifferent: reciterQueryParamDifferent,\n }: { value: number; isQueryParamDifferent: boolean } = useGetQueryParamOrXstateValue(\n QueryParam.Reciter,\n );\n\n const play = () => {\n logButtonClick('chapter_header_play_audio');\n audioService.send({\n type: 'PLAY_SURAH',\n surah: chapterId,\n reciterId: reciterQueryParamDifferent ? reciterId : undefined,\n });\n };\n\n const pause = () => {\n logButtonClick('chapter_header_pause_audio');\n audioService.send({\n type: 'TOGGLE',\n });\n };\n\n if (isLoadingCurrentChapter) {\n return (\n <div className={styles.container}>\n <Button\n variant={ButtonVariant.Ghost}\n type={ButtonType.Success}\n size={ButtonSize.Small}\n prefix={<Spinner />}\n hasSidePadding={false}\n shouldFlipOnRTL={false}\n isDisabled\n >\n {t('loading')}\n </Button>\n </div>\n );\n }\n\n return (\n <div className={styles.container}>\n {isPlayingCurrentChapter ? (\n <Button\n variant={ButtonVariant.Ghost}\n type={ButtonType.Success}\n size={ButtonSize.Small}\n prefix={<PauseIcon />}\n onClick={pause}\n hasSidePadding={false}\n shouldFlipOnRTL={false}\n >\n {t('audio.player.pause-audio')}\n </Button>\n ) : (\n <Button\n variant={ButtonVariant.Ghost}\n type={ButtonType.Success}\n size={ButtonSize.Small}\n prefix={<PlayIcon />}\n onClick={play}\n hasSidePadding={false}\n shouldFlipOnRTL={false}\n ariaLabel={t('aria.play-surah', { surahName: chapterData.transliteratedName })}\n >\n {t('audio.play')}\n </Button>\n )}\n </div>\n );\n};\n\nexport default PlayChapterAudioButton;\n","/* eslint-disable react-func/max-lines-per-function */\n/* eslint-disable jsx-a11y/click-events-have-key-events */\n/* eslint-disable jsx-a11y/no-static-element-interactions */\nimport React, { useContext } from 'react';\n\nimport { useSelector as useXstateSelector } from '@xstate/react';\nimport { useRouter } from 'next/router';\nimport Trans from 'next-translate/Trans';\nimport useTranslation from 'next-translate/useTranslation';\nimport { shallowEqual, useSelector } from 'react-redux';\n\nimport styles from './QueryParamMessage.module.scss';\n\nimport usePersistPreferenceGroup from '@/hooks/auth/usePersistPreferenceGroup';\nimport {\n selectWordByWordLocale,\n setSelectedWordByWordLocale,\n} from '@/redux/slices/QuranReader/readingPreferences';\nimport {\n selectSelectedTranslations,\n setSelectedTranslations,\n} from '@/redux/slices/QuranReader/translations';\nimport PreferenceGroup from '@/types/auth/PreferenceGroup';\nimport { QuranReaderFlow } from '@/types/QuranReader';\nimport { areArraysEqual } from '@/utils/array';\nimport { isValidTranslationsQueryParamValue } from '@/utils/queryParamValidator';\nimport { AudioPlayerMachineContext } from 'src/xstate/AudioPlayerMachineContext';\nimport QueryParam from 'types/QueryParam';\n\ninterface Props {\n translationsQueryParamDifferent: boolean;\n reciterQueryParamDifferent: boolean;\n wordByWordLocaleQueryParamDifferent: boolean;\n}\n\nconst QueryParamMessage: React.FC<Props> = ({\n translationsQueryParamDifferent,\n reciterQueryParamDifferent,\n wordByWordLocaleQueryParamDifferent,\n}) => {\n const { lang } = useTranslation('common');\n const router = useRouter();\n const audioService = useContext(AudioPlayerMachineContext);\n const selectedTranslations = useSelector(selectSelectedTranslations, areArraysEqual);\n const selectedReciterId = useXstateSelector(audioService, (state) => state.context.reciterId);\n const selectedWordByWordLocale = useSelector(selectWordByWordLocale, shallowEqual);\n const {\n actions: { onSettingsChange, onXstateSettingsChange },\n } = usePersistPreferenceGroup();\n\n /**\n * When the use clicks on use Redux, we will import the values from redux and\n * push them into the url params so that the useGetQueryParamOrReduxValue hook\n * picks and applies them.\n */\n const onResetToReduxStateClicked = () => {\n if (translationsQueryParamDifferent) {\n router.query[QueryParam.Translations] = selectedTranslations.join(',');\n }\n if (reciterQueryParamDifferent) {\n router.query[QueryParam.Reciter] = String(selectedReciterId);\n }\n if (wordByWordLocaleQueryParamDifferent) {\n router.query[QueryParam.WBW_LOCALE] = selectedWordByWordLocale;\n }\n // if is in Quranic Calendar flow, remove the flow query param\n if (router.query[QueryParam.FLOW] === QuranReaderFlow.QURANIC_CALENDER) {\n delete router.query[QueryParam.FLOW];\n // if hide arabic is true, remove it so that the arabic text get shown again\n if (router.query[QueryParam.HIDE_ARABIC] === 'true') {\n delete router.query[QueryParam.HIDE_ARABIC];\n }\n }\n\n router.push(router, undefined, { shallow: true });\n };\n\n /**\n * When the use clicks on persist query params, we will persist the values\n * from the query params into Redux.\n */\n const onPersistQueryParamsClicked = () => {\n if (\n translationsQueryParamDifferent &&\n isValidTranslationsQueryParamValue(router.query[QueryParam.Translations] as string)\n ) {\n const nextTranslations = (router.query[QueryParam.Translations] as string)\n .split(',')\n .map((stringValue) => Number(stringValue));\n\n onSettingsChange(\n 'selectedTranslations',\n nextTranslations,\n setSelectedTranslations({ translations: nextTranslations, locale: lang }),\n setSelectedTranslations({ translations: selectedTranslations, locale: lang }),\n PreferenceGroup.TRANSLATIONS,\n );\n }\n\n if (wordByWordLocaleQueryParamDifferent) {\n const nextWordByWord = router.query[QueryParam.WBW_LOCALE] as string;\n onSettingsChange(\n 'selectedWordByWordLocale',\n nextWordByWord,\n setSelectedWordByWordLocale({ value: nextWordByWord, locale: lang }),\n setSelectedWordByWordLocale({ value: selectedWordByWordLocale, locale: lang }),\n PreferenceGroup.READING,\n );\n }\n\n if (reciterQueryParamDifferent) {\n const nextReciterId = Number(router.query[QueryParam.Reciter]);\n onXstateSettingsChange(\n 'reciter',\n nextReciterId,\n () => audioService.send({ type: 'CHANGE_RECITER', reciterId: nextReciterId }),\n () => audioService.send({ type: 'CHANGE_RECITER', reciterId: selectedReciterId }),\n PreferenceGroup.AUDIO,\n );\n }\n };\n\n return (\n <div className={styles.container}>\n <Trans\n i18nKey=\"quran-reader:query-param-message\"\n components={[\n <span key={0} onClick={onResetToReduxStateClicked} className={styles.link} />,\n <span key={1} onClick={onPersistQueryParamsClicked} className={styles.link} />,\n ]}\n />\n </div>\n );\n};\n\nexport default QueryParamMessage;\n","/* eslint-disable react/no-multi-comp */\nimport React from 'react';\n\nimport dynamic from 'next/dynamic';\n\nimport useSyncReadingProgress from './hooks/useSyncReadingProgress';\nimport ReadingPreferenceSwitcher from './ReadingPreferenceSwitcher';\nimport TranslationView from './TranslationView';\n\nimport QuranReaderStyles from '@/redux/types/QuranReaderStyles';\nimport { VersesResponse } from 'types/ApiResponses';\nimport { QuranReaderDataType } from 'types/QuranReader';\n\nconst ReadingView = dynamic(() => import('./ReadingView'));\n\ninterface Props {\n isReadingPreference: boolean;\n quranReaderStyles: QuranReaderStyles;\n quranReaderDataType: QuranReaderDataType;\n initialData: VersesResponse;\n resourceId: number | string;\n}\n\nconst QuranReaderView: React.FC<Props> = ({\n isReadingPreference,\n quranReaderStyles,\n quranReaderDataType,\n initialData,\n resourceId,\n}) => {\n useSyncReadingProgress({\n isReadingPreference,\n });\n\n if (isReadingPreference) {\n return (\n <>\n <ReadingPreferenceSwitcher />\n <ReadingView\n quranReaderStyles={quranReaderStyles}\n quranReaderDataType={quranReaderDataType}\n initialData={initialData}\n resourceId={resourceId}\n />\n </>\n );\n }\n\n return (\n <>\n <ReadingPreferenceSwitcher />\n <TranslationView\n quranReaderStyles={quranReaderStyles}\n quranReaderDataType={quranReaderDataType}\n initialData={initialData}\n resourceId={resourceId}\n />\n </>\n );\n};\n\nexport default QuranReaderView;\n","import React from 'react';\n\nimport classNames from 'classnames';\nimport useTranslation from 'next-translate/useTranslation';\n\nimport styles from '@/components/QuranReader/ReadingPreferenceSwitcher/ReadingPreference.module.scss';\nimport Spinner from '@/dls/Spinner/Spinner';\nimport BookIcon from '@/icons/book.svg';\nimport ReaderIcon from '@/icons/reader.svg';\nimport { ReadingPreference } from 'types/QuranReader';\n\ntype Props = {\n readingPreference: ReadingPreference;\n selectedReadingPreference: ReadingPreference;\n isIconsOnly?: boolean;\n isLoading: boolean;\n};\n\nexport const readingPreferenceIcons = {\n [ReadingPreference.Reading]: <ReaderIcon />,\n [ReadingPreference.Translation]: <BookIcon />,\n};\n\nconst LoadingSwitcher: React.FC<Props> = ({\n readingPreference,\n selectedReadingPreference,\n isIconsOnly = false,\n isLoading,\n}) => {\n const { t } = useTranslation('common');\n return isLoading && readingPreference === selectedReadingPreference ? (\n <div className={styles.container}>\n <span>\n <Spinner className={styles.spinner} />\n </span>\n {!isIconsOnly && (\n <span className={styles.preferenceTextContainer}>\n {t(`reading-preference.${selectedReadingPreference}`)}\n </span>\n )}\n </div>\n ) : (\n <div className={styles.container}>\n <span className={classNames(styles.iconContainer, isIconsOnly && styles.iconsCenter)}>\n {readingPreferenceIcons[selectedReadingPreference]}\n </span>\n {!isIconsOnly && (\n <span className={styles.preferenceTextContainer}>\n {t(`reading-preference.${selectedReadingPreference}`)}\n </span>\n )}\n </div>\n );\n};\n\nexport default LoadingSwitcher;\n","import classNames from 'classnames';\nimport { useRouter } from 'next/router';\nimport { useSelector } from 'react-redux';\n\nimport LoadingSwitcher from './ReadingPreferenceOption';\nimport styles from './ReadingPreferenceSwitcher.module.scss';\n\nimport Switch, { SwitchSize } from '@/dls/Switch/Switch';\nimport usePersistPreferenceGroup from '@/hooks/auth/usePersistPreferenceGroup';\nimport {\n selectReadingPreferences,\n setReadingPreference,\n} from '@/redux/slices/QuranReader/readingPreferences';\nimport { selectLastReadVerseKey } from '@/redux/slices/QuranReader/readingTracker';\nimport { logValueChange } from '@/utils/eventLogger';\nimport PreferenceGroup from 'types/auth/PreferenceGroup';\nimport { ReadingPreference } from 'types/QuranReader';\n\nexport enum ReadingPreferenceSwitcherType {\n SurahHeader = 'surah_header',\n ContextMenu = 'context_menu',\n}\n\ninterface Props {\n size?: SwitchSize;\n isIconsOnly?: boolean;\n type?: ReadingPreferenceSwitcherType;\n}\n\nconst ReadingPreferenceSwitcher: React.FC<Props> = ({\n size,\n isIconsOnly = false,\n type = ReadingPreferenceSwitcherType.SurahHeader,\n}) => {\n const readingPreferences = useSelector(selectReadingPreferences);\n const lastReadVerseKey = useSelector(selectLastReadVerseKey);\n const lastReadVerse = lastReadVerseKey.verseKey?.split(':')[1];\n const { readingPreference } = readingPreferences;\n const {\n actions: { onSettingsChange },\n isLoading,\n } = usePersistPreferenceGroup();\n const router = useRouter();\n\n const readingPreferencesOptions = [\n {\n name: (\n <LoadingSwitcher\n readingPreference={readingPreference}\n selectedReadingPreference={ReadingPreference.Translation}\n isLoading={isLoading}\n isIconsOnly={isIconsOnly}\n />\n ),\n value: ReadingPreference.Translation,\n },\n {\n name: (\n <LoadingSwitcher\n readingPreference={readingPreference}\n selectedReadingPreference={ReadingPreference.Reading}\n isLoading={isLoading}\n isIconsOnly={isIconsOnly}\n />\n ),\n value: ReadingPreference.Reading,\n },\n ];\n\n const onViewSwitched = (view: ReadingPreference) => {\n logValueChange(`${type}_reading_preference`, readingPreference, view);\n\n const newQueryParams = { ...router.query };\n\n // Track `startingVerse` once we're past the start of the page so we can\n // continue from the same ayah when switching views. Without the > 1 check,\n // switching views at the start of the page causes unnecessary scrolls\n\n if (type === ReadingPreferenceSwitcherType.SurahHeader) {\n delete newQueryParams.startingVerse;\n } else if (parseInt(lastReadVerse, 10) > 1) {\n newQueryParams.startingVerse = lastReadVerse;\n }\n\n const newUrlObject = {\n pathname: router.pathname,\n query: newQueryParams,\n };\n\n router.replace(newUrlObject, null, { shallow: true }).then(() => {\n onSettingsChange(\n 'readingPreference',\n view,\n setReadingPreference(view),\n setReadingPreference(readingPreference),\n PreferenceGroup.READING,\n );\n });\n };\n\n return (\n <div\n className={classNames(styles.container, {\n [styles.surahHeaderContainer]: type === ReadingPreferenceSwitcherType.SurahHeader,\n [styles.contextMenuContainer]: type === ReadingPreferenceSwitcherType.ContextMenu,\n })}\n id=\"reading-preference-switcher\"\n >\n <Switch\n items={readingPreferencesOptions}\n selected={readingPreference}\n onSelect={onViewSwitched}\n size={size}\n />\n </div>\n );\n};\nexport default ReadingPreferenceSwitcher;\n","import classNames from 'classnames';\nimport Trans from 'next-translate/Trans';\n\nimport styles from './RevelationOrderNavigationNotice.module.scss';\n\nimport Spinner from '@/dls/Spinner/Spinner';\nimport usePersistPreferenceGroup from '@/hooks/auth/usePersistPreferenceGroup';\nimport { setIsReadingByRevelationOrder } from '@/redux/slices/revelationOrder';\nimport PreferenceGroup from '@/types/auth/PreferenceGroup';\nimport { logButtonClick } from '@/utils/eventLogger';\n\nexport enum RevelationOrderNavigationNoticeView {\n SideDrawer = 'side-drawer',\n EndOfScrollingControls = 'end-of-scrolling-controls',\n}\n\ntype Props = {\n view?: RevelationOrderNavigationNoticeView;\n};\n\n// A notice that lets users know that the ordering and navigation are not the default ones.\nconst RevelationOrderNavigationNotice = ({ view }: Props) => {\n const {\n actions: { onSettingsChange },\n isLoading,\n } = usePersistPreferenceGroup();\n\n const revertToDefaultOrdering = () => {\n onSettingsChange(\n 'isReadingByRevelationOrder',\n false,\n setIsReadingByRevelationOrder(false),\n setIsReadingByRevelationOrder(true),\n PreferenceGroup.READING,\n );\n logButtonClick(`revert_to_default_ordering_${view}`);\n };\n\n return (\n <div\n className={classNames({\n [styles.sideDrawerViewContainer]: view === RevelationOrderNavigationNoticeView.SideDrawer,\n [styles.endOfScrollingViewContainer]:\n view === RevelationOrderNavigationNoticeView.EndOfScrollingControls,\n })}\n >\n {isLoading && <Spinner />}\n <Trans\n components={{\n link: (\n <span className={styles.link} onClick={revertToDefaultOrdering} aria-hidden=\"true\" />\n ),\n }}\n i18nKey=\"quran-reader:revelation-order-notice\"\n />\n </div>\n );\n};\n\nexport default RevelationOrderNavigationNotice;\n","/* eslint-disable react/no-multi-comp */\nimport { useRef } from 'react';\n\nimport classNames from 'classnames';\nimport useTranslation from 'next-translate/useTranslation';\nimport { useDispatch, useSelector, shallowEqual } from 'react-redux';\n\nimport styles from './SidebarNavigation.module.scss';\nimport SidebarNavigationSelections from './SidebarNavigationSelections';\n\nimport RevelationOrderNavigationNotice, {\n RevelationOrderNavigationNoticeView,\n} from '@/components/QuranReader/RevelationOrderNavigationNotice';\nimport Button, { ButtonShape, ButtonSize, ButtonVariant } from '@/dls/Button/Button';\nimport KeyboardInput from '@/dls/KeyboardInput';\nimport Switch from '@/dls/Switch/Switch';\nimport useOutsideClickDetector from '@/hooks/useOutsideClickDetector';\nimport IconClose from '@/icons/close.svg';\nimport { selectContextMenu } from '@/redux/slices/QuranReader/contextMenu';\nimport {\n selectIsSidebarNavigationVisible,\n selectNavigationItem,\n selectSelectedNavigationItem,\n NavigationItem,\n setIsVisible,\n} from '@/redux/slices/QuranReader/sidebarNavigation';\nimport { selectIsReadingByRevelationOrder } from '@/redux/slices/revelationOrder';\nimport { logButtonClick, logEvent, logValueChange } from '@/utils/eventLogger';\nimport { isMobile } from '@/utils/responsive';\n\nconst SidebarNavigation = () => {\n const { isExpanded: isContextMenuExpanded } = useSelector(selectContextMenu, shallowEqual);\n const isVisible = useSelector(selectIsSidebarNavigationVisible);\n const selectedNavigationItem = useSelector(selectSelectedNavigationItem);\n const isReadingByRevelationOrder = useSelector(selectIsReadingByRevelationOrder);\n\n const dispatch = useDispatch();\n const { t } = useTranslation('common');\n const sidebarRef = useRef();\n\n useOutsideClickDetector(\n sidebarRef,\n () => {\n logEvent('sidebar_navigation_close_outside_click');\n dispatch(setIsVisible(false));\n },\n isVisible && isMobile(),\n );\n\n const navigationItems = [\n {\n name: t('surah'),\n value: NavigationItem.Surah,\n },\n {\n name: t('juz'),\n value: NavigationItem.Juz,\n },\n // {\n // name: t('hizb'),\n // value: NavigationItem.Hizb,\n // },\n {\n name: t('page'),\n value: NavigationItem.Page,\n },\n ];\n\n return (\n <div\n ref={sidebarRef}\n className={classNames(styles.container, {\n [styles.visibleContainer]: isVisible === true,\n [styles.containerAuto]: isVisible === 'auto',\n [styles.spaceOnTop]: isContextMenuExpanded,\n })}\n >\n {!isReadingByRevelationOrder ? (\n // Default ordering\n <>\n <div className={styles.header}>\n <div className={styles.switchContainer}>\n <Switch\n items={navigationItems}\n selected={selectedNavigationItem}\n onSelect={(value) => {\n logValueChange('sidebar_navigation_view', selectedNavigationItem, value);\n dispatch(selectNavigationItem(value as NavigationItem));\n }}\n />\n </div>\n <Button\n tooltip={t('close')}\n shape={ButtonShape.Circle}\n size={ButtonSize.Small}\n variant={ButtonVariant.Ghost}\n onClick={() => {\n logButtonClick('sidebar_navigation_close');\n dispatch(setIsVisible(false));\n }}\n ariaLabel={t('aria.sidebar-nav-close')}\n >\n <IconClose />\n </Button>\n </div>\n <p className={styles.tip}>\n <span>{t('sidebar.try-navigating-with')}</span>\n <KeyboardInput meta keyboardKey=\"K\" />\n </p>\n\n <div className={styles.contentContainer}>\n <SidebarNavigationSelections\n isVisible={isVisible}\n selectedNavigationItem={selectedNavigationItem}\n />\n </div>\n </>\n ) : (\n // Revelation ordering\n <>\n <div className={styles.revelationOrderHeader}>\n <Button\n tooltip={t('close')}\n shape={ButtonShape.Circle}\n size={ButtonSize.Small}\n variant={ButtonVariant.Ghost}\n onClick={() => {\n logButtonClick('sidebar_navigation_close');\n dispatch(setIsVisible(false));\n }}\n ariaLabel={t('aria.sidebar-nav-close')}\n >\n <IconClose />\n </Button>\n </div>\n <RevelationOrderNavigationNotice view={RevelationOrderNavigationNoticeView.SideDrawer} />\n <SidebarNavigationSelections\n isVisible={isVisible}\n selectedNavigationItem={NavigationItem.Surah}\n />{' '}\n </>\n )}\n </div>\n );\n};\n\nexport default SidebarNavigation;\n","import styles from './SidebarSelectionSkeleton.module.scss';\n\nimport Skeleton from '@/dls/Skeleton/Skeleton';\n\nconst ROWS_COUNT = 12;\nconst rowsArr = Array(ROWS_COUNT).fill(null);\n\nconst SidebarSelectionSkeleton = () => {\n return (\n <div className={styles.skeletonContainer}>\n {rowsArr.map((k, i) => (\n // eslint-disable-next-line react/no-array-index-key\n <Skeleton key={`skeleton_${i}`} isActive isSquared className={styles.row} />\n ))}\n </div>\n );\n};\n\nexport default SidebarSelectionSkeleton;\n","import React from 'react';\n\nimport dynamic from 'next/dynamic';\n\nimport SidebarSelectionSkeleton from './SidebarSelectionSkeleton';\n\nimport {\n IsSidebarNavigationVisible,\n NavigationItem,\n} from '@/redux/slices/QuranReader/sidebarNavigation';\n\nconst PageSelection = dynamic(() => import('./PageSelection'), {\n loading: SidebarSelectionSkeleton,\n});\nconst SurahSelection = dynamic(() => import('./SurahSelection'), {\n loading: SidebarSelectionSkeleton,\n});\nconst JuzSelection = dynamic(() => import('./JuzSelection'), {\n loading: SidebarSelectionSkeleton,\n});\n// const HizbSelection = dynamic(() => import('./HizbSelection'), {\n// loading: SidebarSelectionSkeleton,\n// });\n\ntype Props = {\n isVisible: IsSidebarNavigationVisible;\n selectedNavigationItem: string;\n};\n\nconst SidebarNavigationSelections: React.FC<Props> = ({ isVisible, selectedNavigationItem }) => {\n // we skip requesting any selection list if the drawer is not open.\n if (!isVisible) return <></>;\n\n if (selectedNavigationItem === NavigationItem.Surah) return <SurahSelection />;\n if (selectedNavigationItem === NavigationItem.Juz) return <JuzSelection />;\n // if (selectedNavigationItem === NavigationItem.Hizb) return <HizbSelection />;\n\n return <PageSelection />;\n};\n\nexport default SidebarNavigationSelections;\n","/* eslint-disable react-func/max-lines-per-function */\nimport { useMemo } from 'react';\n\nimport classNames from 'classnames';\nimport useTranslation from 'next-translate/useTranslation';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\nimport { useSWRConfig } from 'swr';\n\nimport styles from './TranslationViewCell.module.scss';\n\nimport Button, { ButtonSize, ButtonVariant } from '@/dls/Button/Button';\nimport { ToastStatus, useToast } from '@/dls/Toast/Toast';\nimport BookmarkedIcon from '@/icons/bookmark.svg';\nimport { selectBookmarks, toggleVerseBookmark } from '@/redux/slices/QuranReader/bookmarks';\nimport { selectQuranReaderStyles } from '@/redux/slices/QuranReader/styles';\nimport { getMushafId } from '@/utils/api';\nimport { deleteBookmarkById } from '@/utils/auth/api';\nimport { makeBookmarkUrl } from '@/utils/auth/apiPaths';\nimport { isLoggedIn } from '@/utils/auth/login';\nimport { logButtonClick } from '@/utils/eventLogger';\nimport BookmarksMap from 'types/BookmarksMap';\nimport BookmarkType from 'types/BookmarkType';\nimport Verse from 'types/Verse';\n\ntype Props = {\n verse: Verse;\n pageBookmarks: BookmarksMap | undefined;\n bookmarksRangeUrl: string;\n};\n\nconst BookmarkIcon: React.FC<Props> = ({ verse, pageBookmarks, bookmarksRangeUrl }) => {\n const { t } = useTranslation('quran-reader');\n const quranReaderStyles = useSelector(selectQuranReaderStyles, shallowEqual);\n const bookmarkedVerses = useSelector(selectBookmarks, shallowEqual);\n const { cache, mutate } = useSWRConfig();\n const toast = useToast();\n const dispatch = useDispatch();\n\n const isVerseBookmarked = useMemo(() => {\n const isUserLoggedIn = isLoggedIn();\n if (isUserLoggedIn && pageBookmarks) {\n return !!pageBookmarks[verse.verseKey];\n }\n return !!bookmarkedVerses[verse.verseKey];\n }, [bookmarkedVerses, pageBookmarks, verse.verseKey]);\n\n if (!isVerseBookmarked) return null;\n\n const mushafId = getMushafId(quranReaderStyles.quranFont, quranReaderStyles.mushafLines).mushaf;\n\n const onClick = () => {\n logButtonClick('translation_view_un_bookmark_verse');\n\n if (isLoggedIn()) {\n const bookmarkedVersesRange = cache.get(bookmarksRangeUrl);\n const nextBookmarkedVersesRange = {\n ...bookmarkedVersesRange,\n [verse.verseKey]: !isVerseBookmarked,\n };\n mutate(bookmarksRangeUrl, nextBookmarkedVersesRange, {\n revalidate: false,\n });\n\n cache.delete(\n makeBookmarkUrl(\n mushafId,\n Number(verse.chapterId),\n BookmarkType.Ayah,\n Number(verse.verseNumber),\n ),\n );\n\n const bookmarkId = pageBookmarks[verse.verseKey].id;\n if (bookmarkId) {\n deleteBookmarkById(bookmarkId).catch((err) => {\n if (err.status === 400) {\n toast(t('common:error.bookmark-sync'), {\n status: ToastStatus.Error,\n });\n return;\n }\n toast(t('common:error.general'), {\n status: ToastStatus.Error,\n });\n });\n }\n } else {\n dispatch(toggleVerseBookmark(verse.verseKey));\n }\n };\n\n return (\n <Button\n className={classNames(styles.iconContainer, styles.verseAction)}\n onClick={onClick}\n tooltip={t('remove-bookmark')}\n variant={ButtonVariant.Ghost}\n size={ButtonSize.Small}\n >\n <BookmarkedIcon />\n </Button>\n );\n};\n\nexport default BookmarkIcon;\n","import React, { RefObject, memo, useContext, useEffect } from 'react';\n\nimport { useSelector as useSelectorXstate } from '@xstate/react';\nimport classNames from 'classnames';\nimport { useRouter } from 'next/router';\nimport { useSelector } from 'react-redux';\n\nimport {\n verseFontChanged,\n verseTranslationChanged,\n verseTranslationFontChanged,\n} from '../utils/memoization';\n\nimport BookmarkIcon from './BookmarkIcon';\nimport TranslationText from './TranslationText';\nimport styles from './TranslationViewCell.module.scss';\n\nimport { useOnboarding } from '@/components/Onboarding/OnboardingProvider';\nimport QuranReflectButton from '@/components/QuranReader/QuranReflectButton';\nimport TafsirButton from '@/components/QuranReader/TafsirButton';\nimport VerseNotes from '@/components/Verse/Notes';\nimport OverflowVerseActionsMenu from '@/components/Verse/OverflowVerseActionsMenu';\nimport PlayVerseAudioButton from '@/components/Verse/PlayVerseAudioButton';\nimport VerseLink from '@/components/Verse/VerseLink';\nimport VerseText from '@/components/Verse/VerseText';\nimport Separator from '@/dls/Separator/Separator';\nimport useScroll, { SMOOTH_SCROLL_TO_TOP } from '@/hooks/useScrollToElement';\nimport { selectEnableAutoScrolling } from '@/redux/slices/AudioPlayer/state';\nimport QuranReaderStyles from '@/redux/types/QuranReaderStyles';\nimport { getVerseWords, makeVerseKey } from '@/utils/verse';\nimport { AudioPlayerMachineContext } from 'src/xstate/AudioPlayerMachineContext';\nimport BookmarksMap from 'types/BookmarksMap';\nimport Translation from 'types/Translation';\nimport Verse from 'types/Verse';\n\ntype TranslationViewCellProps = {\n verse: Verse;\n quranReaderStyles: QuranReaderStyles;\n verseIndex: number;\n pageBookmarks: BookmarksMap | undefined;\n bookmarksRangeUrl: string;\n hasNotes?: boolean;\n};\n\nconst TranslationViewCell: React.FC<TranslationViewCellProps> = ({\n verse,\n quranReaderStyles,\n verseIndex,\n pageBookmarks,\n bookmarksRangeUrl,\n hasNotes,\n}) => {\n const router = useRouter();\n const { startingVerse } = router.query;\n\n const audioService = useContext(AudioPlayerMachineContext);\n\n const isHighlighted = useSelectorXstate(audioService, (state) => {\n const { ayahNumber, surah } = state.context;\n return makeVerseKey(surah, ayahNumber) === verse.verseKey;\n });\n\n const { isActive } = useOnboarding();\n // disable auto scrolling when the user is onboarding\n const enableAutoScrolling = useSelector(selectEnableAutoScrolling) && !isActive;\n\n const [scrollToSelectedItem, selectedItemRef]: [() => void, RefObject<HTMLDivElement>] =\n useScroll(SMOOTH_SCROLL_TO_TOP);\n\n useEffect(() => {\n if ((isHighlighted && enableAutoScrolling) || Number(startingVerse) === verseIndex + 1) {\n scrollToSelectedItem();\n }\n }, [isHighlighted, scrollToSelectedItem, enableAutoScrolling, startingVerse, verseIndex]);\n\n return (\n <div ref={selectedItemRef}>\n <div\n className={classNames(styles.cellContainer, {\n [styles.highlightedContainer]: isHighlighted,\n })}\n >\n <div className={styles.actionContainer}>\n <div className={styles.actionContainerLeft}>\n <div className={styles.actionItem}>\n <VerseLink verseKey={verse.verseKey} />\n </div>\n <div className={styles.actionItem}>\n <BookmarkIcon\n verse={verse}\n pageBookmarks={pageBookmarks}\n bookmarksRangeUrl={bookmarksRangeUrl}\n />\n </div>\n <div className={styles.actionItem}>\n <VerseNotes verseKey={verse.verseKey} isTranslationView hasNotes={hasNotes} />\n </div>\n <div className={classNames(styles.actionItem, styles.priorityAction)}>\n <PlayVerseAudioButton verseKey={verse.verseKey} />\n </div>\n <div className={classNames(styles.actionItem)}>\n <TafsirButton verseKey={verse.verseKey} />\n </div>\n <div className={classNames(styles.actionItem)}>\n <QuranReflectButton verseKey={verse.verseKey} />\n </div>\n </div>\n <div className={styles.actionContainerRight}>\n <div className={styles.actionItem}>\n <OverflowVerseActionsMenu bookmarksRangeUrl={bookmarksRangeUrl} verse={verse} />\n </div>\n </div>\n </div>\n\n <div className={classNames(styles.contentContainer)}>\n <div className={styles.arabicVerseContainer}>\n <VerseText words={getVerseWords(verse)} shouldShowH1ForSEO={verseIndex === 0} />\n </div>\n <div className={styles.verseTranslationsContainer}>\n {verse.translations?.map((translation: Translation) => (\n <div key={translation.id} className={styles.verseTranslationContainer}>\n <TranslationText\n translationFontScale={quranReaderStyles.translationFontScale}\n text={translation.text}\n languageId={translation.languageId}\n resourceName={verse.translations?.length > 1 ? translation.resourceName : null}\n />\n </div>\n ))}\n </div>\n </div>\n </div>\n <Separator />\n </div>\n );\n};\n\n/**\n * Since we are passing verse and it's an object\n * even if the same verse is passed, its reference will change\n * on fetching a new page and since Memo only does shallow comparison,\n * we need to use custom comparing logic:\n *\n * 1. Check if the verse id is the same.\n * 2. Check if the font changed.\n * 3. Check if number of translations are the same since on translation change, it should change.\n *\n * If the above condition is met, it's safe to assume that the result\n * of both renders are the same.\n *\n * @param {TranslationViewCellProps} prevProps\n * @param {TranslationViewCellProps} nextProps\n * @returns {boolean}\n */\nconst areVersesEqual = (\n prevProps: TranslationViewCellProps,\n nextProps: TranslationViewCellProps,\n): boolean =>\n prevProps.verse.id === nextProps.verse.id &&\n prevProps.hasNotes === nextProps.hasNotes &&\n !verseFontChanged(\n prevProps.quranReaderStyles,\n nextProps.quranReaderStyles,\n prevProps.verse.words,\n nextProps.verse.words,\n ) &&\n !verseTranslationChanged(prevProps.verse, nextProps.verse) &&\n !verseTranslationFontChanged(prevProps.quranReaderStyles, nextProps.quranReaderStyles) &&\n JSON.stringify(prevProps.pageBookmarks) === JSON.stringify(nextProps.pageBookmarks) &&\n prevProps.bookmarksRangeUrl === nextProps.bookmarksRangeUrl;\n\nexport default memo(TranslationViewCell, areVersesEqual);\n","import { useEffect, useRef } from 'react';\n\nimport useTranslation from 'next-translate/useTranslation';\nimport useSWRImmutable from 'swr/immutable';\n\nimport { useVerseTrackerContext } from '../../contexts/VerseTrackerContext';\nimport TranslationViewCell from '../TranslationViewCell';\n\nimport ChapterHeader from '@/components/chapters/ChapterHeader';\nimport useCountRangeNotes from '@/hooks/auth/useCountRangeNotes';\nimport QuranReaderStyles from '@/redux/types/QuranReaderStyles';\nimport { VersesResponse } from '@/types/ApiResponses';\nimport Translation from '@/types/Translation';\nimport Verse from '@/types/Verse';\nimport { getPageBookmarks } from '@/utils/auth/api';\nimport { toLocalizedNumber } from '@/utils/locale';\n\ninterface TranslationPageVerse {\n verse: Verse;\n selectedTranslations?: number[];\n bookmarksRangeUrl: string | null;\n mushafId: number;\n verseIdx: number;\n quranReaderStyles: QuranReaderStyles;\n initialData: VersesResponse;\n firstVerseInPage: Verse;\n isLastVerseInView: boolean;\n notesRange: {\n from: string;\n to: string;\n } | null;\n}\n\nconst TranslationPageVerse: React.FC<TranslationPageVerse> = ({\n verse,\n selectedTranslations,\n bookmarksRangeUrl,\n mushafId,\n verseIdx,\n quranReaderStyles,\n initialData,\n firstVerseInPage,\n isLastVerseInView,\n notesRange,\n}) => {\n const { t, lang } = useTranslation('common');\n const containerRef = useRef<HTMLDivElement>(null);\n const { verseKeysQueue } = useVerseTrackerContext();\n\n const { data: pageBookmarks } = useSWRImmutable(bookmarksRangeUrl, async () => {\n const response = await getPageBookmarks(\n mushafId,\n Number(firstVerseInPage.chapterId),\n Number(firstVerseInPage.verseNumber),\n initialData.pagination.perPage,\n );\n return response;\n });\n\n const { data: notesCount } = useCountRangeNotes(notesRange);\n\n const getTranslationNameString = (translations?: Translation[]) => {\n let translationName = t('settings.no-translation-selected');\n if (translations?.length === 1) translationName = translations?.[0].resourceName;\n if (translations?.length === 2) {\n translationName = t('settings.value-and-other', {\n value: translations?.[0].resourceName,\n othersCount: toLocalizedNumber(translations.length - 1, lang),\n });\n }\n if (translations?.length > 2) {\n translationName = t('settings.value-and-others', {\n value: translations?.[0].resourceName,\n othersCount: toLocalizedNumber(translations.length - 1, lang),\n });\n }\n\n return translationName;\n };\n\n useEffect(() => {\n let observer: IntersectionObserver = null;\n\n if (containerRef.current) {\n observer = new IntersectionObserver(\n (entries) => {\n if (entries[0].isIntersecting) {\n verseKeysQueue.current.add(verse.verseKey);\n }\n },\n {\n root: null,\n rootMargin: '0px',\n threshold: 0.5,\n },\n );\n observer.observe(containerRef.current);\n }\n\n return () => {\n observer?.disconnect();\n };\n }, [isLastVerseInView, verse, verseKeysQueue]);\n\n return (\n <div\n ref={isLastVerseInView ? containerRef : undefined}\n // key={currentVerseIndex}\n // if isLastPage, we want to detect when this element will be in the user's viewport\n // so we can add the last verse key to the queue\n >\n {verse.verseNumber === 1 && (\n <ChapterHeader\n translationName={getTranslationNameString(verse.translations)}\n chapterId={String(verse.chapterId)}\n pageNumber={verse.pageNumber}\n hizbNumber={verse.hizbNumber}\n isTranslationSelected={selectedTranslations?.length > 0}\n />\n )}\n\n <TranslationViewCell\n verseIndex={verseIdx}\n verse={verse}\n key={verse.id}\n quranReaderStyles={quranReaderStyles}\n pageBookmarks={pageBookmarks}\n bookmarksRangeUrl={bookmarksRangeUrl}\n hasNotes={notesCount && notesCount[verse.verseKey] > 0}\n />\n </div>\n );\n};\n\nexport default TranslationPageVerse;\n","import { useEffect, useMemo } from 'react';\n\nimport { useRouter } from 'next/router';\nimport useTranslation from 'next-translate/useTranslation';\nimport useSWRImmutable from 'swr/immutable';\n\nimport { getTranslationViewRequestKey, verseFetcher } from '@/components/QuranReader/api';\nimport useIsUsingDefaultSettings from '@/hooks/useIsUsingDefaultSettings';\nimport QuranReaderStyles from '@/redux/types/QuranReaderStyles';\nimport { VersesResponse } from '@/types/ApiResponses';\nimport { Mushaf, QuranReaderDataType } from '@/types/QuranReader';\nimport Verse from '@/types/Verse';\nimport { makeBookmarksRangeUrl } from '@/utils/auth/apiPaths';\nimport { isLoggedIn } from '@/utils/auth/login';\nimport { getPageNumberFromIndexAndPerPage } from '@/utils/number';\n\ninterface QuranReaderParams {\n quranReaderDataType: QuranReaderDataType;\n wordByWordLocale: string;\n reciterId: number;\n resourceId: number | string;\n initialData: VersesResponse;\n quranReaderStyles: QuranReaderStyles;\n mushafId: Mushaf;\n selectedTranslations: number[];\n setApiPageToVersesMap: (data: Record<number, Verse[]>) => void;\n verseIdx: number;\n}\n\ninterface UseDedupedFetchVerseResult {\n verse: Verse | null;\n firstVerseInPage: Verse | null;\n bookmarksRangeUrl: string | null;\n notesRange: {\n from: string;\n to: string;\n } | null;\n}\n\n/**\n * This hook fetches the verse of the given `verseIdx` and dedupes the data based on their page number.\n *\n * For an example, passing `verseIdx` of `0 | 1 | 2 | 3 | 4` should only trigger one API request because they are all in the same page.\n *\n * @param {QuranReaderParams} params\n * @returns {UseDedupedFetchVerseResult}\n */\nconst useDedupedFetchVerse = ({\n quranReaderDataType,\n quranReaderStyles,\n wordByWordLocale,\n reciterId,\n resourceId,\n selectedTranslations,\n initialData,\n setApiPageToVersesMap,\n mushafId,\n verseIdx,\n}: QuranReaderParams): UseDedupedFetchVerseResult => {\n const router = useRouter();\n\n const { lang } = useTranslation();\n\n const translationParams = useMemo(\n () =>\n (router.query.translations as string)?.split(',')?.map((translation) => Number(translation)),\n [router.query.translations],\n );\n\n const pageNumber = getPageNumberFromIndexAndPerPage(verseIdx, initialData.pagination.perPage);\n\n const idxInPage = verseIdx % initialData.pagination.perPage;\n\n const isUsingDefaultSettings = useIsUsingDefaultSettings({\n translationParams,\n selectedTranslations,\n });\n const shouldUseInitialData = pageNumber === 1 && isUsingDefaultSettings;\n const { data: verses } = useSWRImmutable(\n getTranslationViewRequestKey({\n quranReaderDataType,\n pageNumber,\n initialData,\n quranReaderStyles,\n selectedTranslations,\n isVerseData: quranReaderDataType === QuranReaderDataType.Verse,\n id: resourceId,\n reciter: reciterId,\n locale: lang,\n wordByWordLocale,\n }),\n verseFetcher,\n {\n fallbackData: shouldUseInitialData ? initialData.verses : undefined,\n },\n );\n\n useEffect(() => {\n if (verses) {\n // @ts-ignore\n setApiPageToVersesMap((prevMushafPageToVersesMap: Record<number, Verse[]>) => ({\n ...prevMushafPageToVersesMap,\n [pageNumber]: verses,\n }));\n }\n }, [pageNumber, setApiPageToVersesMap, verses]);\n\n const bookmarksRangeUrl =\n verses && verses.length && isLoggedIn()\n ? makeBookmarksRangeUrl(\n mushafId,\n Number(verses?.[0].chapterId),\n Number(verses?.[0].verseNumber),\n initialData.pagination.perPage,\n )\n : null;\n\n const verse = verses ? verses[idxInPage] : null;\n\n // This part handles an edge case where the user has no selected translations but the `initialData` sent from server-side rendering has a default translation.\n // So, we need to remove the translations from the verse if the user has no selected translations.\n if (verse && selectedTranslations.length === 0) {\n verse.translations = [];\n }\n\n return {\n verse,\n firstVerseInPage: verses ? verses[0] : null,\n bookmarksRangeUrl,\n notesRange:\n verses && verses.length > 0\n ? {\n from: verses?.[0].verseKey,\n to: verses?.[verses.length - 1].verseKey,\n }\n : null,\n };\n};\n\nexport default useDedupedFetchVerse;\n","/* eslint-disable max-lines */\nimport React from 'react';\n\nimport styles from '../TranslationView.module.scss';\nimport TranslationViewCellSkeleton from '../TranslationViewCellSkeleton';\n\nimport useDedupedFetchVerse from './hooks/useDedupedFetchVerse';\nimport TranslationPageVerse from './TranslationPageVerse';\n\nimport QuranReaderStyles from '@/redux/types/QuranReaderStyles';\nimport { getMushafId } from '@/utils/api';\nimport { VersesResponse } from 'types/ApiResponses';\nimport { QuranReaderDataType } from 'types/QuranReader';\nimport Verse from 'types/Verse';\n\ninterface Props {\n quranReaderStyles: QuranReaderStyles;\n selectedTranslations: number[];\n setApiPageToVersesMap: (data: Record<number, Verse[]>) => void;\n quranReaderDataType: QuranReaderDataType;\n wordByWordLocale: string;\n reciterId: number;\n resourceId: number | string;\n initialData: VersesResponse;\n verseIdx: number;\n totalVerses: number;\n}\n\nconst TranslationViewVerse: React.FC<Props> = ({\n quranReaderDataType,\n wordByWordLocale,\n reciterId,\n resourceId,\n setApiPageToVersesMap,\n initialData,\n quranReaderStyles,\n selectedTranslations,\n verseIdx,\n totalVerses,\n}) => {\n const mushafId = getMushafId(quranReaderStyles.quranFont, quranReaderStyles.mushafLines).mushaf;\n\n const { verse, firstVerseInPage, bookmarksRangeUrl, notesRange } = useDedupedFetchVerse({\n verseIdx,\n quranReaderDataType,\n quranReaderStyles,\n wordByWordLocale,\n reciterId,\n resourceId,\n selectedTranslations,\n initialData,\n setApiPageToVersesMap,\n mushafId,\n });\n\n if (!verse) {\n return (\n <div className={styles.container}>\n <TranslationViewCellSkeleton />\n </div>\n );\n }\n\n return (\n <div className={styles.container}>\n <TranslationPageVerse\n isLastVerseInView={verseIdx + 1 === totalVerses}\n verse={verse}\n verseIdx={verseIdx}\n mushafId={mushafId}\n quranReaderStyles={quranReaderStyles}\n selectedTranslations={selectedTranslations}\n bookmarksRangeUrl={bookmarksRangeUrl}\n initialData={initialData}\n firstVerseInPage={firstVerseInPage}\n notesRange={notesRange}\n />\n </div>\n );\n};\n\nexport default TranslationViewVerse;\n","import { useContext, useMemo } from 'react';\n\nimport { useSelector } from 'react-redux';\n\nimport useFetchPagesLookup from '@/components/QuranReader/hooks/useFetchPagesLookup';\nimport DataContext from '@/contexts/DataContext';\nimport { selectIsUsingDefaultFont } from '@/redux/slices/QuranReader/styles';\nimport { generateVerseKeysBetweenTwoVerseKeys } from '@/utils/verseKeys';\n\n/**\n * This hooks calculates the total number of verses based on the verses range\n * and the current Mushaf settings\n *\n * @param {number|string} resourceId\n * @param {QuranReaderDataType} quranReaderDataType\n * @param {VersesResponse} initialData\n * @param {QuranReaderStyles} quranReaderStyles\n *\n * @returns {number} versesCount\n */\n\nconst useGetVersesCount = ({\n resourceId,\n quranReaderDataType,\n initialData,\n quranReaderStyles,\n}): number => {\n const isUsingDefaultFont = useSelector(selectIsUsingDefaultFont);\n const { lookupRange } = useFetchPagesLookup(\n resourceId,\n quranReaderDataType,\n initialData,\n quranReaderStyles,\n isUsingDefaultFont,\n );\n\n const chaptersData = useContext(DataContext);\n\n const versesCount = useMemo(() => {\n return generateVerseKeysBetweenTwoVerseKeys(chaptersData, lookupRange.from, lookupRange.to)\n .length;\n }, [chaptersData, lookupRange.from, lookupRange.to]);\n\n return versesCount;\n};\n\nexport default useGetVersesCount;\n","import { useCallback, useEffect, useState, useContext, useRef } from 'react';\n\nimport { useRouter } from 'next/router';\nimport { VirtuosoHandle } from 'react-virtuoso';\n\nimport { useVerseTrackerContext } from '../../contexts/VerseTrackerContext';\n\nimport DataContext from '@/contexts/DataContext';\nimport Verse from '@/types/Verse';\nimport { getPageNumberFromIndexAndPerPage } from '@/utils/number';\nimport { isValidVerseId } from '@/utils/validator';\nimport { makeVerseKey } from '@/utils/verse';\nimport { QuranReaderDataType } from 'types/QuranReader';\nimport ScrollAlign from 'types/ScrollAlign';\n\n/**\n * This hook listens to startingVerse query param and navigate to\n * the location where the verse is in the virtualized list.\n *\n * [NOTE]: This is meant to be used for TranslationView only.\n *\n * @param {QuranReaderDataType} quranReaderDataType\n * @param {React.MutableRefObject<VirtuosoHandle>} virtuosoRef\n * @param {Record<number, Verse[]>} apiPageToVersesMap\n * @param {string} chapterId\n * @param {number} versesPerPage\n */\nconst useScrollToVirtualizedTranslationView = (\n quranReaderDataType: QuranReaderDataType,\n virtuosoRef: React.MutableRefObject<VirtuosoHandle>,\n apiPageToVersesMap: Record<number, Verse[]>,\n chapterId: string,\n versesPerPage: number,\n) => {\n const router = useRouter();\n const chaptersData = useContext(DataContext);\n const [shouldReadjustScroll, setShouldReadjustScroll] = useState(false);\n const timeoutId = useRef<ReturnType<typeof setTimeout>>(null);\n const { verseKeysQueue, shouldTrackObservedVerses } = useVerseTrackerContext();\n\n const { startingVerse } = router.query;\n const startingVerseNumber = Number(startingVerse);\n const isValidStartingVerse =\n startingVerse && isValidVerseId(chaptersData, chapterId, String(startingVerse));\n\n const scrollToBeginningOfVerseCell = useCallback(\n (verseNumber: number) => {\n const verseIndex = verseNumber - 1;\n virtuosoRef.current.scrollToIndex({\n index: verseIndex,\n align: ScrollAlign.Start,\n // this offset is to push the scroll a little bit down so that the context menu doesn't cover the verse\n offset: -70,\n });\n },\n [virtuosoRef],\n );\n\n // this effect runs when there is initially a `startingVerse` in the url or when the user navigates to a new verse\n // it scrolls to the beginning of the verse cell and we set `shouldReadjustScroll` to true so that the other effect\n // adjusts the scroll to the correct position\n useEffect(() => {\n if (quranReaderDataType === QuranReaderDataType.Chapter && isValidStartingVerse) {\n scrollToBeginningOfVerseCell(startingVerseNumber);\n setShouldReadjustScroll(true);\n }\n }, [\n quranReaderDataType,\n startingVerseNumber,\n isValidStartingVerse,\n scrollToBeginningOfVerseCell,\n ]);\n\n // this effect handles the case when the user navigates to a verse that is not yet loaded\n // we need to wait for the verse to be loaded and then scroll to it\n useEffect(() => {\n if (\n quranReaderDataType === QuranReaderDataType.Chapter &&\n isValidStartingVerse &&\n // we only want to run this effect when the user navigates to a new verse\n // and not when the user is scrolling through the verses while apiPageToVersesMap is being populated\n shouldReadjustScroll\n ) {\n shouldTrackObservedVerses.current = false;\n const pageNumber = getPageNumberFromIndexAndPerPage(startingVerseNumber - 1, versesPerPage);\n const isFirstVerseInPage = startingVerseNumber % versesPerPage === 1;\n\n const isBeforeDoneLoading =\n pageNumber > 1 && isFirstVerseInPage ? !!apiPageToVersesMap[pageNumber - 1] : true;\n const isDoneLoading = !!apiPageToVersesMap[pageNumber] && isBeforeDoneLoading;\n\n // if the verse finished loading, or the one right before, we `setTimeout` and scroll to the beginning of the verse cell (this is a hacky solution so that the verse renders before we scroll to it)\n // and set `shouldReadjustScroll` to false so that this effect doesn't run again\n //\n // otherwise, we use `scrollToBeginningOfVerseCell` to scroll near the beginning of the verse cell without setting `shouldReadjustScroll` to false so that this effect runs again when the data loads\n if (isDoneLoading) {\n if (timeoutId.current !== null) {\n clearTimeout(timeoutId.current);\n }\n\n timeoutId.current = setTimeout(() => {\n scrollToBeginningOfVerseCell(startingVerseNumber);\n shouldTrackObservedVerses.current = true;\n\n // we need to add the verse we scrolled to to the queue\n verseKeysQueue.current.add(makeVerseKey(chapterId, startingVerseNumber));\n }, 1000);\n\n setShouldReadjustScroll(false);\n } else {\n scrollToBeginningOfVerseCell(startingVerseNumber);\n }\n }\n }, [\n shouldReadjustScroll,\n startingVerseNumber,\n isValidStartingVerse,\n apiPageToVersesMap,\n quranReaderDataType,\n versesPerPage,\n scrollToBeginningOfVerseCell,\n virtuosoRef,\n shouldTrackObservedVerses,\n verseKeysQueue,\n chapterId,\n ]);\n\n // this effect clears the timeout when the component unmounts\n useEffect(() => {\n return () => {\n if (timeoutId.current !== null) {\n clearTimeout(timeoutId.current);\n }\n };\n }, []);\n};\n\nexport default useScrollToVirtualizedTranslationView;\n","/* eslint-disable max-lines */\n/* eslint-disable react/no-multi-comp */\nimport { useMemo, useRef, useState } from 'react';\n\nimport dynamic from 'next/dynamic';\nimport { Virtuoso, VirtuosoHandle } from 'react-virtuoso';\n\nimport onCopyQuranWords from '../onCopyQuranWords';\nimport QueryParamMessage from '../QueryParamMessage';\n\nimport useGetVersesCount from './hooks/useGetVersesCount';\nimport useScrollToVirtualizedVerse from './hooks/useScrollToVirtualizedVerse';\nimport styles from './TranslationView.module.scss';\nimport TranslationViewVerse from './TranslationViewVerse';\n\nimport Spinner from '@/dls/Spinner/Spinner';\nimport useGetQueryParamOrReduxValue from '@/hooks/useGetQueryParamOrReduxValue';\nimport useGetQueryParamOrXstateValue from '@/hooks/useGetQueryParamOrXstateValue';\nimport useQcfFont from '@/hooks/useQcfFont';\nimport QuranReaderStyles from '@/redux/types/QuranReaderStyles';\nimport { VersesResponse } from 'types/ApiResponses';\nimport QueryParam from 'types/QueryParam';\nimport { QuranReaderDataType } from 'types/QuranReader';\nimport Verse from 'types/Verse';\n\ntype TranslationViewProps = {\n quranReaderStyles: QuranReaderStyles;\n quranReaderDataType: QuranReaderDataType;\n initialData: VersesResponse;\n resourceId: number | string; // can be the chapter, verse, tafsir, hizb, juz, rub or page's ID.\n};\n\nconst EndOfScrollingControls = dynamic(() => import('../EndOfScrollingControls'), {\n ssr: false,\n loading: () => <Spinner />,\n});\n\nconst INCREASE_VIEWPORT_BY_PIXELS = 1000;\n\nconst TranslationView = ({\n quranReaderStyles,\n quranReaderDataType,\n initialData,\n resourceId,\n}: TranslationViewProps) => {\n const [apiPageToVersesMap, setApiPageToVersesMap] = useState<Record<number, Verse[]>>({\n 1: initialData.verses,\n });\n const {\n value: reciterId,\n isQueryParamDifferent: reciterQueryParamDifferent,\n }: { value: number; isQueryParamDifferent: boolean } = useGetQueryParamOrXstateValue(\n QueryParam.Reciter,\n );\n const {\n value: selectedTranslations,\n isQueryParamDifferent: translationsQueryParamDifferent,\n }: { value: number[]; isQueryParamDifferent: boolean } = useGetQueryParamOrReduxValue(\n QueryParam.Translations,\n );\n const {\n value: wordByWordLocale,\n isQueryParamDifferent: wordByWordLocaleQueryParamDifferent,\n }: { value: string; isQueryParamDifferent: boolean } = useGetQueryParamOrReduxValue(\n QueryParam.WBW_LOCALE,\n );\n\n const versesCount = useGetVersesCount({\n resourceId,\n quranReaderDataType,\n initialData,\n quranReaderStyles,\n });\n\n const virtuosoRef = useRef<VirtuosoHandle>(null);\n useScrollToVirtualizedVerse(\n quranReaderDataType,\n virtuosoRef,\n apiPageToVersesMap,\n String(resourceId),\n initialData.pagination.perPage,\n );\n const verses = useMemo(() => Object.values(apiPageToVersesMap).flat(), [apiPageToVersesMap]);\n useQcfFont(quranReaderStyles.quranFont, verses);\n\n const itemContentRenderer = (verseIdx: number) => {\n if (verseIdx === versesCount) {\n return (\n <EndOfScrollingControls\n quranReaderDataType={quranReaderDataType}\n lastVerse={verses[verses.length - 1]}\n initialData={initialData}\n />\n );\n }\n\n return (\n <TranslationViewVerse\n verseIdx={verseIdx}\n totalVerses={versesCount}\n quranReaderDataType={quranReaderDataType}\n quranReaderStyles={quranReaderStyles}\n setApiPageToVersesMap={setApiPageToVersesMap}\n selectedTranslations={selectedTranslations}\n wordByWordLocale={wordByWordLocale}\n reciterId={reciterId}\n initialData={initialData}\n resourceId={resourceId}\n />\n );\n };\n\n const shouldShowQueryParamMessage =\n translationsQueryParamDifferent ||\n reciterQueryParamDifferent ||\n wordByWordLocaleQueryParamDifferent;\n\n return (\n <>\n {shouldShowQueryParamMessage && (\n <QueryParamMessage\n translationsQueryParamDifferent={translationsQueryParamDifferent}\n reciterQueryParamDifferent={reciterQueryParamDifferent}\n wordByWordLocaleQueryParamDifferent={wordByWordLocaleQueryParamDifferent}\n />\n )}\n\n <div\n className={styles.wrapper}\n onCopy={(event) => onCopyQuranWords(event, verses, quranReaderStyles.quranFont)}\n >\n <Virtuoso\n ref={virtuosoRef}\n useWindowScroll\n totalCount={versesCount + 1}\n increaseViewportBy={INCREASE_VIEWPORT_BY_PIXELS}\n initialItemCount={1} // needed for SSR.\n itemContent={itemContentRenderer}\n />\n </div>\n </>\n );\n};\n\nexport default TranslationView;\n","/* eslint-disable max-lines */\n/* eslint-disable react-func/max-lines-per-function */\nimport QuranReaderStyles from '@/redux/types/QuranReaderStyles';\nimport { getDefaultWordFields, getMushafId } from '@/utils/api';\nimport {\n makeHizbVersesUrl,\n makeJuzVersesUrl,\n makePageVersesUrl,\n makeVersesUrl,\n makeRubVersesUrl,\n makeByRangeVersesUrl,\n} from '@/utils/apiPaths';\nimport { fetcher } from 'src/api';\nimport { PagesLookUpRequest } from 'types/ApiRequests';\nimport { VersesResponse } from 'types/ApiResponses';\nimport LookupRecord from 'types/LookupRecord';\nimport { QuranReaderDataType } from 'types/QuranReader';\nimport Verse from 'types/Verse';\n\ninterface TranslationViewRequestKeyInput {\n quranReaderDataType: QuranReaderDataType;\n pageNumber: number;\n initialData: VersesResponse;\n quranReaderStyles: QuranReaderStyles;\n selectedTranslations: number[];\n isVerseData: boolean;\n id: string | number;\n reciter: number;\n locale: string;\n wordByWordLocale: string;\n}\n\ninterface ReadingViewRequestKeyInput {\n pageNumber: number;\n quranReaderStyles: QuranReaderStyles;\n reciter: number;\n locale: string;\n wordByWordLocale: string;\n pageVersesRange?: LookupRecord;\n}\n\n/**\n * Generate the request key (the API url based on the params)\n * which will be used by useSwr to determine whether to call BE\n * again or return the cached response.\n *\n * @returns {string}\n */\nexport const getTranslationViewRequestKey = ({\n id,\n isVerseData,\n initialData,\n pageNumber,\n quranReaderStyles,\n quranReaderDataType,\n selectedTranslations,\n reciter,\n locale,\n wordByWordLocale,\n}: TranslationViewRequestKeyInput): string => {\n // if the response has only 1 verse it means we should set the page to that verse this will be combined with perPage which will be set to only 1.\n const page = isVerseData ? initialData.verses[0].verseNumber : pageNumber;\n const commonParams = {\n page,\n reciter,\n wordTranslationLanguage: wordByWordLocale,\n translations: selectedTranslations.join(','),\n ...getDefaultWordFields(quranReaderStyles.quranFont),\n ...getMushafId(quranReaderStyles.quranFont, quranReaderStyles.mushafLines),\n };\n if (quranReaderDataType === QuranReaderDataType.Juz) {\n return makeJuzVersesUrl(id, locale, {\n ...commonParams,\n perPage: initialData.pagination.perPage,\n });\n }\n if (quranReaderDataType === QuranReaderDataType.Hizb) {\n return makeHizbVersesUrl(id, locale, {\n ...commonParams,\n perPage: initialData.pagination.perPage,\n });\n }\n if (quranReaderDataType === QuranReaderDataType.Page) {\n return makePageVersesUrl(id, locale, {\n perPage: 'all',\n ...commonParams,\n });\n }\n if (quranReaderDataType === QuranReaderDataType.Rub) {\n return makeRubVersesUrl(id, locale, {\n from: initialData.metaData.from,\n perPage: initialData.pagination.perPage,\n to: initialData.metaData.to,\n ...commonParams,\n });\n }\n if (quranReaderDataType === QuranReaderDataType.ChapterVerseRanges) {\n return makeVersesUrl(id, locale, {\n from: initialData.metaData.from,\n perPage: initialData.pagination.perPage,\n to: initialData.metaData.to,\n ...commonParams,\n });\n }\n if (quranReaderDataType === QuranReaderDataType.Ranges) {\n return makeByRangeVersesUrl(locale, {\n from: initialData.pagesLookup.lookupRange.from,\n perPage: initialData.pagination.perPage,\n to: initialData.pagesLookup.lookupRange.to,\n ...commonParams,\n });\n }\n\n return makeVersesUrl(id, locale, {\n perPage: isVerseData ? 1 : initialData.pagination.perPage, // the idea is that when it's a verse view, we want to fetch only 1 verse starting from the verse's number and we can do that by passing per_page option to the API.\n ...commonParams,\n });\n};\n\nexport const getReaderViewRequestKey = ({\n pageNumber,\n locale,\n quranReaderStyles,\n reciter,\n wordByWordLocale,\n pageVersesRange,\n}: ReadingViewRequestKeyInput): string => {\n return makePageVersesUrl(\n pageNumber,\n locale,\n {\n ...getDefaultWordFields(quranReaderStyles.quranFont),\n ...getMushafId(quranReaderStyles.quranFont, quranReaderStyles.mushafLines),\n reciter,\n perPage: 'all',\n wordTranslationLanguage: wordByWordLocale,\n filterPageWords: true,\n ...(pageVersesRange && { ...pageVersesRange }), // add the from and to verse range of the current page\n },\n false,\n );\n};\n\nexport const getPagesLookupParams = (\n resourceId: number | string,\n quranReaderDataType: QuranReaderDataType,\n mushafId: number,\n initialData: VersesResponse,\n) => {\n const params: PagesLookUpRequest = { mushaf: mushafId };\n const resourceIdNumber = Number(resourceId);\n switch (quranReaderDataType) {\n case QuranReaderDataType.Chapter:\n params.chapterNumber = resourceIdNumber;\n break;\n case QuranReaderDataType.Hizb:\n params.hizbNumber = resourceIdNumber;\n break;\n case QuranReaderDataType.Juz:\n params.juzNumber = resourceIdNumber;\n break;\n case QuranReaderDataType.Page:\n params.pageNumber = resourceIdNumber;\n break;\n case QuranReaderDataType.Rub:\n params.rubElHizbNumber = resourceIdNumber;\n break;\n case QuranReaderDataType.Verse:\n params.chapterNumber = resourceIdNumber;\n params.from = initialData.verses[0].verseKey;\n params.to = initialData.verses[0].verseKey;\n break;\n case QuranReaderDataType.ChapterVerseRanges:\n params.chapterNumber = resourceIdNumber;\n params.from = initialData.metaData.from;\n params.to = initialData.metaData.to;\n break;\n case QuranReaderDataType.Ranges:\n params.from = initialData.pagesLookup.lookupRange.from;\n params.to = initialData.pagesLookup.lookupRange.to;\n break;\n default:\n break;\n }\n return params;\n};\n\n/**\n * A custom fetcher that returns the verses array from the api result.\n * We need this workaround as useSWRInfinite requires the data from the api\n * to be an array, while the result we get is formatted as {meta: {}, verses: Verse[]}\n *\n * @returns {Promise<Verse[]>}\n */\nexport const verseFetcher = async (input: RequestInfo, init?: RequestInit): Promise<Verse[]> => {\n const res = await fetcher<VersesResponse>(input, init);\n // @ts-ignore ignore this typing for now, we'll get back into this when we fix the \"initial data not being used\" issue\n return res.verses;\n};\n","import { createContext, useContext, useMemo, useRef } from 'react';\n\ninterface VerseTrackerContextType {\n // this will store a queue of verse keys that have been read by the user\n verseKeysQueue: React.MutableRefObject<Set<string>>;\n\n shouldTrackObservedVerses: React.MutableRefObject<boolean>;\n}\n\nconst VerseTrackerContext = createContext<VerseTrackerContextType>(null);\n\nexport const VerseTrackerContextProvider: React.FC<{\n children: React.ReactNode;\n}> = ({ children }) => {\n const verseKeysQueue = useRef<Set<string>>(new Set());\n const shouldTrackObservedVerses = useRef(true);\n const value = useMemo(() => ({ verseKeysQueue, shouldTrackObservedVerses }), []);\n\n return <VerseTrackerContext.Provider value={value}>{children}</VerseTrackerContext.Provider>;\n};\n\nexport const useVerseTrackerContext = () => useContext(VerseTrackerContext);\n","import useSWRImmutable from 'swr/immutable';\n\nimport { getPagesLookupParams } from '@/components/QuranReader/api';\nimport QuranReaderStyles from '@/redux/types/QuranReaderStyles';\nimport { getMushafId } from '@/utils/api';\nimport { makePagesLookupUrl } from '@/utils/apiPaths';\nimport { fetcher } from 'src/api';\nimport { PagesLookUpResponse, VersesResponse } from 'types/ApiResponses';\nimport LookupRange from 'types/LookupRange';\nimport LookupRecord from 'types/LookupRecord';\nimport { QuranReaderDataType } from 'types/QuranReader';\n\n/**\n * This hooks fetches the total number of pages of a specific Mushaf of\n * a resource e.g. a page/juz/verse/range/hiz etc.\n *\n * @param {number|string} resourceId\n * @param {QuranReaderDataType} quranReaderDataType\n * @param {VersesResponse} initialData\n * @param {QuranReaderStyles} quranReaderStyles\n *\n * @returns {{ pagesCount: number; hasError: boolean }}\n */\nconst useFetchPagesLookup = (\n resourceId: number | string,\n quranReaderDataType: QuranReaderDataType,\n initialData: VersesResponse,\n quranReaderStyles: QuranReaderStyles,\n isUsingDefaultFont: boolean,\n): {\n data: PagesLookUpResponse;\n pagesCount: number;\n hasError: boolean;\n pagesVersesRange: Record<number, LookupRecord>;\n lookupRange: LookupRange;\n isLoading: boolean;\n} => {\n const { data, error, isValidating } = useSWRImmutable<PagesLookUpResponse>(\n makePagesLookupUrl(\n getPagesLookupParams(\n resourceId,\n quranReaderDataType,\n getMushafId(quranReaderStyles.quranFont, quranReaderStyles.mushafLines).mushaf,\n initialData,\n ),\n ),\n fetcher,\n {\n fallbackData: initialData.pagesLookup,\n revalidateOnMount: !isUsingDefaultFont,\n },\n );\n\n return {\n data,\n pagesCount: data.totalPage,\n pagesVersesRange: data.pages,\n lookupRange: data.lookupRange,\n hasError: !!error,\n isLoading: isValidating && !data,\n };\n};\n\nexport default useFetchPagesLookup;\n","/* eslint-disable react-func/max-lines-per-function */\nimport { useCallback, useContext, useEffect, useRef, useMemo } from 'react';\n\nimport debounce from 'lodash/debounce';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\nimport { useSWRConfig } from 'swr';\n\nimport { useVerseTrackerContext } from '../contexts/VerseTrackerContext';\nimport { getObservedVersePayload, getOptions, QURAN_READER_OBSERVER_ID } from '../observer';\n\nimport DataContext from '@/contexts/DataContext';\nimport useGlobalIntersectionObserver from '@/hooks/useGlobalIntersectionObserver';\nimport { setLastReadVerse } from '@/redux/slices/QuranReader/readingTracker';\nimport { selectQuranFont, selectQuranMushafLines } from '@/redux/slices/QuranReader/styles';\nimport {\n ActivityDayType,\n UpdateActivityDayBody,\n UpdateQuranActivityDayBody,\n} from '@/types/auth/ActivityDay';\nimport { getFilterActivityDaysParamsOfCurrentMonth } from '@/utils/activity-day';\nimport { getMushafId } from '@/utils/api';\nimport { addReadingSession, updateActivityDay } from '@/utils/auth/api';\nimport {\n makeFilterActivityDaysUrl,\n makeReadingSessionsUrl,\n makeStreakUrl,\n} from '@/utils/auth/apiPaths';\nimport { isLoggedIn } from '@/utils/auth/login';\nimport mergeVerseKeys from '@/utils/mergeVerseKeys';\nimport { getVerseAndChapterNumbersFromKey } from '@/utils/verse';\n\nconst READING_DAY_SYNC_TIME_MS = 5000; // 5 seconds\nconst READING_SESSION_DEBOUNCE_WAIT_TIME = 2000; // 5 seconds\n\ninterface UseSyncReadingProgressProps {\n isReadingPreference: boolean;\n}\n\n/**\n * This hook is responsible for syncing the user's reading progress with the backend.\n *\n * @param {UseSyncReadingProgressProps} options\n */\nconst useSyncReadingProgress = ({ isReadingPreference }: UseSyncReadingProgressProps) => {\n const chaptersData = useContext(DataContext);\n\n const quranFont = useSelector(selectQuranFont, shallowEqual);\n const mushafLines = useSelector(selectQuranMushafLines, shallowEqual);\n const { mushaf } = getMushafId(quranFont, mushafLines);\n\n /**\n * `verseKeysQueue` is a queue of verse keys that we need to send to the backend\n * we will clear the queue every {READING_DAY_SYNC_TIME} milliseconds after sending the data to the backend\n * it is also a Set not an array to avoid duplicate verse keys\n */\n const { verseKeysQueue, shouldTrackObservedVerses } = useVerseTrackerContext();\n\n const elapsedReadingTimeInSeconds = useRef(0);\n const dispatch = useDispatch();\n const { cache, mutate } = useSWRConfig();\n\n const addReadingSessionAndClearCache = useCallback(\n (chapterNumber, verseNumber) => {\n addReadingSession(chapterNumber, verseNumber).then(() => {\n cache.delete(makeReadingSessionsUrl());\n });\n },\n [cache],\n );\n\n const debouncedAddReadingSession = useMemo(\n () => debounce(addReadingSessionAndClearCache, READING_SESSION_DEBOUNCE_WAIT_TIME),\n [addReadingSessionAndClearCache],\n );\n\n // send the data to the backend and clear the SWR cache\n const updateReadingDayAndClearCache = useCallback(\n (body: UpdateActivityDayBody<UpdateQuranActivityDayBody>) => {\n updateActivityDay(body).then(() => {\n // invalidate the current month's history cache to refetch the data if we navigated to it\n const currentMonthHistoryUrl = makeFilterActivityDaysUrl(\n getFilterActivityDaysParamsOfCurrentMonth(),\n );\n cache.delete(currentMonthHistoryUrl);\n\n mutate(makeStreakUrl());\n });\n },\n [mutate, cache],\n );\n\n // this function will be called when an element is triggered by the intersection observer\n const onElementVisible = useCallback(\n (element: Element) => {\n const lastReadVerse = getObservedVersePayload(element);\n\n dispatch(\n setLastReadVerse({\n lastReadVerse,\n chaptersData,\n }),\n );\n\n if (isLoggedIn() && shouldTrackObservedVerses.current) {\n /**\n * Add the verse key to the queue.\n * We make sure the user is logged-in first so that we don't add it to the queue and never clear it (which causes a memory leak).\n */\n verseKeysQueue.current.add(lastReadVerse.verseKey);\n\n const [chapterNumber, verseNumber] = getVerseAndChapterNumbersFromKey(\n lastReadVerse.verseKey,\n );\n debouncedAddReadingSession(Number(chapterNumber), Number(verseNumber));\n }\n },\n [chaptersData, debouncedAddReadingSession, dispatch, verseKeysQueue, shouldTrackObservedVerses],\n );\n\n // eslint-disable-next-line consistent-return\n useEffect(() => {\n // if the user is not logged in, we don't need to sync the reading day\n // TODO: maybe we can save this in the local storage and sync it when the user logs in?\n if (!isLoggedIn()) {\n return () => null;\n }\n\n const interval = setInterval(() => {\n // nothing to send\n if (verseKeysQueue.current.size === 0 && elapsedReadingTimeInSeconds.current === 0) {\n return;\n }\n\n // an array of verse ranges that we will send to the backend\n // we will get them by merging the verse keys in the queue\n let verseRanges: string[] = null;\n if (verseKeysQueue.current.size > 0) {\n // merge the verse keys and clear the queue\n verseRanges = Array.from(mergeVerseKeys(verseKeysQueue.current));\n verseKeysQueue.current.clear();\n }\n\n let seconds: number = null;\n if (elapsedReadingTimeInSeconds.current > 0) {\n seconds = elapsedReadingTimeInSeconds.current;\n elapsedReadingTimeInSeconds.current = 0;\n }\n\n const body: UpdateActivityDayBody<UpdateQuranActivityDayBody> = {\n mushafId: mushaf,\n type: ActivityDayType.QURAN,\n };\n\n if (verseRanges) {\n body.ranges = verseRanges;\n }\n\n if (seconds) {\n body.seconds = seconds;\n }\n\n updateReadingDayAndClearCache(body);\n }, READING_DAY_SYNC_TIME_MS);\n\n return () => {\n clearInterval(interval);\n };\n }, [chaptersData, updateReadingDayAndClearCache, verseKeysQueue, mushaf]);\n\n // this will track user's reading time\n // also, if the user is not on the same tab, we will pause the timer\n useEffect(() => {\n if (!isLoggedIn()) {\n return () => null;\n }\n\n let interval: NodeJS.Timeout = null;\n\n const handleFocus = () => {\n if (interval) clearInterval(interval);\n\n interval = setInterval(() => {\n elapsedReadingTimeInSeconds.current += 1;\n }, 1000);\n };\n\n const handleBlur = () => {\n clearInterval(interval);\n };\n\n window.addEventListener('focus', handleFocus);\n window.addEventListener('blur', handleBlur);\n\n handleFocus();\n\n return () => {\n window.removeEventListener('focus', handleFocus);\n window.removeEventListener('blur', handleBlur);\n };\n }, []);\n\n useGlobalIntersectionObserver(\n getOptions(isReadingPreference),\n onElementVisible,\n QURAN_READER_OBSERVER_ID,\n );\n};\n\nexport default useSyncReadingProgress;\n","/* eslint-disable react/no-multi-comp */\nimport React from 'react';\n\nimport classNames from 'classnames';\nimport useTranslation from 'next-translate/useTranslation';\nimport { shallowEqual, useSelector } from 'react-redux';\n\nimport ContextMenu from './ContextMenu';\nimport { VerseTrackerContextProvider } from './contexts/VerseTrackerContext';\nimport DebuggingObserverWindow from './DebuggingObserverWindow';\nimport Notes from './Notes/Notes';\nimport styles from './QuranReader.module.scss';\nimport QuranReaderView from './QuranReaderView';\nimport SidebarNavigation from './SidebarNavigation/SidebarNavigation';\n\nimport FontPreLoader from '@/components/Fonts/FontPreLoader';\nimport { selectNotes } from '@/redux/slices/QuranReader/notes';\nimport { selectReadingPreference } from '@/redux/slices/QuranReader/readingPreferences';\nimport { selectIsSidebarNavigationVisible } from '@/redux/slices/QuranReader/sidebarNavigation';\nimport { selectQuranReaderStyles } from '@/redux/slices/QuranReader/styles';\nimport { VersesResponse } from 'types/ApiResponses';\nimport { QuranReaderDataType, ReadingPreference } from 'types/QuranReader';\n\ntype QuranReaderProps = {\n initialData: VersesResponse;\n id: number | string; // can be the chapter, verse, tafsir, hizb, juz, rub or page's ID.\n quranReaderDataType?: QuranReaderDataType;\n};\n\nconst QuranReader = ({\n initialData,\n id,\n quranReaderDataType = QuranReaderDataType.Chapter,\n}: QuranReaderProps) => {\n const { lang } = useTranslation();\n const isSideBarVisible = useSelector(selectNotes, shallowEqual).isVisible;\n const quranReaderStyles = useSelector(selectQuranReaderStyles, shallowEqual);\n const isSidebarNavigationVisible = useSelector(selectIsSidebarNavigationVisible);\n const readingPreference = useSelector(selectReadingPreference) as ReadingPreference;\n const isReadingPreference = readingPreference === ReadingPreference.Reading;\n\n return (\n <>\n <FontPreLoader isQuranReader locale={lang} />\n <ContextMenu />\n <DebuggingObserverWindow isReadingMode={isReadingPreference} />\n <div\n className={classNames(styles.container, {\n [styles.withVisibleSideBar]: isSideBarVisible,\n [styles.withSidebarNavigationOpenOrAuto]: isSidebarNavigationVisible,\n })}\n >\n <div\n className={classNames(styles.infiniteScroll, {\n [styles.readingView]: isReadingPreference,\n })}\n >\n <VerseTrackerContextProvider>\n <QuranReaderView\n isReadingPreference={isReadingPreference}\n quranReaderStyles={quranReaderStyles}\n initialData={initialData}\n quranReaderDataType={quranReaderDataType}\n resourceId={id}\n />\n </VerseTrackerContextProvider>\n </div>\n </div>\n <SidebarNavigation />\n <Notes />\n </>\n );\n};\n\nexport default QuranReader;\n","import clipboardCopy from 'clipboard-copy';\n\nimport { DATA_ATTRIBUTE_WORD_LOCATION } from '@/dls/QuranWord/QuranWord';\nimport { getWordDataByLocation } from '@/utils/verse';\nimport { getWordTextFieldNameByFont } from '@/utils/word';\nimport { QuranFont } from 'types/QuranReader';\nimport Verse from 'types/Verse';\n\n/**\n * 1) select all DOM nodes that contain data attribute `data-word-location`\n * 2) see if those nodes are within `selection`\n * 3) extract uthmani_text for those nodes\n * 4) copy those uthmani_text to clipboard\n *\n * We need to use uthmani_text instead of the rendered text to support unicode based fonts like v1 and v2.\n *\n * @param {React.ClipboardEvent<HTMLDivElement>} event\n * @param {Verse[]} verses all verses to scan for `data-word-location`\n * @param {QuranFont} quranFont font to copy, if not `text_indopak` or `text_uthmani` then will use `text_uthmani` to support unicode based fonts\n */\nconst onCopyQuranWords = (\n event: React.ClipboardEvent<HTMLDivElement>,\n verses: Verse[],\n quranFont: QuranFont,\n) => {\n const selection = document.getSelection();\n const quranWordsToCopy = Array.from(\n document.querySelectorAll(`[${DATA_ATTRIBUTE_WORD_LOCATION}]`),\n )\n .filter((node) => selection.containsNode(node, true))\n .map((node) => {\n const wordLocation = node.getAttribute(DATA_ATTRIBUTE_WORD_LOCATION);\n return extractText(wordLocation, verses, quranFont);\n });\n\n if (quranWordsToCopy.length > 0) {\n // only do prevent default & call clipboardCopy when there are quran words to copy\n // otherwise, user can't copy the translation text\n event.preventDefault();\n clipboardCopy(quranWordsToCopy.join(' '));\n }\n};\n\n/**\n *\n * @param {string} wordLocation example: \"1:1:1\" (chapter 1, verse 1, word position 1)\n * @param {Verse[]} verses list of verses to search for wordLocation\n * @param {QuranFont} quranFont font to copy, if not `text_indopak` or `text_uthmani` then will use `text_uthmani` to support unicode based fonts\n * @returns {string} text of the wordLocation. example \"ٱلْحَمْدُ\"\n */\nconst extractText = (wordLocation: string, verses: Verse[], quranFont: QuranFont) => {\n const [chapter, verse, location] = getWordDataByLocation(wordLocation);\n\n // find the verse\n const selectedVerse = verses.find((v) => v.verseKey === `${chapter}:${verse}`);\n if (!selectedVerse) {\n return '';\n }\n\n // find the word\n const selectedWord = selectedVerse.words.find(\n (word) => Number(word.position) === Number(location),\n );\n if (!selectedWord) {\n return '';\n }\n return selectedWord[getWordTextFieldNameByFont(quranFont)];\n};\n\nexport default onCopyQuranWords;\n","import QuranReaderStyles from '@/redux/types/QuranReaderStyles';\nimport Verse from 'types/Verse';\nimport Word from 'types/Word';\n\n/**\n * If the number of translations has changed between 2 renders it's due to the\n * user choosing/un-choosing a translation.\n *\n * @param {Verse} prevVerse\n * @param {Verse} nextVerse\n * @returns {boolean}\n */\nexport const verseTranslationChanged = (prevVerse: Verse, nextVerse: Verse): boolean =>\n prevVerse?.translations?.length !== nextVerse?.translations?.length;\n\n/**\n * Checks whether the translation font styles has changed between the re-renders\n *\n * @param {QuranReaderStyles} prevQuranStyles\n * @param {QuranReaderStyles} nextQuranStyles\n * @returns {boolean}\n */\nexport const verseTranslationFontChanged = (\n prevQuranStyles: QuranReaderStyles,\n nextQuranStyles: QuranReaderStyles,\n): boolean => prevQuranStyles.translationFontScale !== nextQuranStyles.translationFontScale;\n\n/**\n * Check whether the font has changed or not between 2 renders. We consider the font\n * has changed also when the number of lines in indopak has changed or when the word\n * by word tooltip locale has changed.\n *\n * @param {QuranReaderStyles} prevQuranStyles\n * @param {QuranReaderStyles} nextQuranStyles\n * @param {Word[]} prevWords\n * @param {Word[]} nextWords\n * @returns {boolean}\n */\nexport const verseFontChanged = (\n prevQuranStyles: QuranReaderStyles,\n nextQuranStyles: QuranReaderStyles,\n prevWords: Word[],\n nextWords: Word[],\n): boolean =>\n prevQuranStyles.mushafLines !== nextQuranStyles.mushafLines ||\n prevWords.length !== nextWords.length ||\n prevWords[0].text !== nextWords[0].text ||\n prevWords[0].translation.languageName !== nextWords[0].translation.languageName;\n","import { useState } from 'react';\n\nimport classNames from 'classnames';\nimport { useRouter } from 'next/router';\nimport useTranslation from 'next-translate/useTranslation';\nimport useSWRImmutable from 'swr/immutable';\n\nimport internalStyles from './Notes.module.scss';\n\nimport NoteModal from '@/components/Notes/NoteModal';\nimport styles from '@/components/QuranReader/TranslationView/TranslationViewCell.module.scss';\nimport Wrapper from '@/components/Wrapper/Wrapper';\nimport Badge from '@/dls/Badge/Badge';\nimport NewLabel from '@/dls/Badge/NewLabel';\nimport Button, { ButtonShape, ButtonSize, ButtonType, ButtonVariant } from '@/dls/Button/Button';\nimport EmptyNotesIcon from '@/icons/notes-empty.svg';\nimport NotesIcon from '@/icons/notes-filled.svg';\nimport ConsentType from '@/types/auth/ConsentType';\nimport { getUserProfile } from '@/utils/auth/api';\nimport { makeUserProfileUrl } from '@/utils/auth/apiPaths';\nimport { isLoggedIn } from '@/utils/auth/login';\nimport { logButtonClick } from '@/utils/eventLogger';\nimport { getChapterWithStartingVerseUrl, getLoginNavigationUrl } from '@/utils/navigation';\n\nexport enum VerseNotesTrigger {\n IconButton = 'button',\n PopoverItem = 'popoverItem',\n}\n\ntype VerseNotesProps = {\n verseKey: string;\n isTranslationView: boolean;\n hasNotes?: boolean;\n};\n\nconst VerseNotes = ({ verseKey, isTranslationView, hasNotes }: VerseNotesProps) => {\n const [isModalOpen, setIsModalOpen] = useState(false);\n const { t } = useTranslation('common');\n const router = useRouter();\n\n const { data: userData } = useSWRImmutable(\n isLoggedIn() ? makeUserProfileUrl() : null,\n getUserProfile,\n );\n\n const onItemClicked = () => {\n const isUserLoggedIn = isLoggedIn();\n logButtonClick('verse_actions_menu_note', {\n isTranslationView,\n isLoggedIn,\n });\n if (!isUserLoggedIn) {\n router.push(getLoginNavigationUrl(getChapterWithStartingVerseUrl(verseKey)));\n } else {\n setIsModalOpen(true);\n }\n };\n\n const onClose = () => {\n setIsModalOpen(false);\n };\n\n // TODO: consents is used as a temporary solution until we have a proper way to check if the user has notes\n const shouldShowNewLabel = !userData?.consents?.[ConsentType.HAS_NOTES];\n\n return (\n <>\n <NoteModal isOpen={isModalOpen} onClose={onClose} verseKey={verseKey} />\n <Button\n className={classNames(styles.iconContainer, styles.verseAction, styles.fadedVerseAction)}\n onClick={onItemClicked}\n tooltip={t('notes.title')}\n type={ButtonType.Primary}\n shape={ButtonShape.Circle}\n variant={ButtonVariant.Ghost}\n size={ButtonSize.Small}\n >\n <span className={styles.icon}>\n {hasNotes ? (\n <NotesIcon />\n ) : (\n <Wrapper\n shouldWrap={shouldShowNewLabel}\n wrapper={(children) => (\n <Badge\n className={internalStyles.newLabelContainer}\n contentClassName={internalStyles.newLabel}\n content={shouldShowNewLabel && <NewLabel />}\n >\n {children}\n </Badge>\n )}\n >\n <EmptyNotesIcon />\n </Wrapper>\n )}\n </span>\n </Button>\n </>\n );\n};\n\nexport default VerseNotes;\n","import React from 'react';\n\nimport useTranslation from 'next-translate/useTranslation';\n\nimport styles from './VerseLink.module.scss';\n\nimport Button, { ButtonShape, ButtonSize, ButtonVariant } from '@/dls/Button/Button';\nimport { logButtonClick } from '@/utils/eventLogger';\nimport { toLocalizedVerseKey } from '@/utils/locale';\nimport { getChapterWithStartingVerseUrl } from '@/utils/navigation';\n\ninterface Props {\n verseKey: string;\n}\n\nconst VerseLink: React.FC<Props> = ({ verseKey }) => {\n const { lang } = useTranslation('');\n return (\n <Button\n className={styles.verseLink}\n size={ButtonSize.Small}\n shape={ButtonShape.Circle}\n href={getChapterWithStartingVerseUrl(verseKey)}\n shouldShallowRoute\n variant={ButtonVariant.Ghost}\n shouldPrefetch={false}\n onClick={() => {\n logButtonClick('translation_view_verse_link');\n }}\n >\n {toLocalizedVerseKey(verseKey, lang)}\n </Button>\n );\n};\n\nexport default VerseLink;\n","import React, { useMemo, useRef } from 'react';\n\nimport classNames from 'classnames';\nimport { useRouter } from 'next/router';\nimport { shallowEqual, useSelector } from 'react-redux';\n\nimport { QURAN_READER_OBSERVER_ID } from '../QuranReader/observer';\n\nimport isCenterAlignedPage from './pageUtils';\nimport styles from './VerseText.module.scss';\n\nimport useIsFontLoaded from '@/components/QuranReader/hooks/useIsFontLoaded';\nimport QuranWord from '@/dls/QuranWord/QuranWord';\nimport useIntersectionObserver from '@/hooks/useObserveElement';\nimport { selectInlineDisplayWordByWordPreferences } from '@/redux/slices/QuranReader/readingPreferences';\nimport {\n selectReadingViewSelectedVerseKey,\n selectReadingViewHoveredVerseKey,\n} from '@/redux/slices/QuranReader/readingViewVerse';\nimport { selectQuranReaderStyles } from '@/redux/slices/QuranReader/styles';\nimport QueryParam from '@/types/QueryParam';\nimport { getFontClassName } from '@/utils/fontFaceHelper';\nimport { getFirstWordOfSurah } from '@/utils/verse';\nimport { FALLBACK_FONT, QuranFont } from 'types/QuranReader';\nimport Word from 'types/Word';\n\ntype VerseTextProps = {\n words: Word[];\n isReadingMode?: boolean;\n isHighlighted?: boolean;\n shouldShowH1ForSEO?: boolean;\n};\n\nconst VerseText = ({\n words,\n isReadingMode = false,\n isHighlighted,\n shouldShowH1ForSEO = false,\n}: VerseTextProps) => {\n const router = useRouter();\n const textRef = useRef(null);\n useIntersectionObserver(textRef, QURAN_READER_OBSERVER_ID);\n const { quranFont, quranTextFontScale, mushafLines } = useSelector(\n selectQuranReaderStyles,\n shallowEqual,\n );\n const [firstWord] = words;\n const { lineNumber, pageNumber, location, verseKey, hizbNumber } = firstWord;\n const isFontLoaded = useIsFontLoaded(firstWord.pageNumber, quranFont);\n const { showWordByWordTranslation, showWordByWordTransliteration } = useSelector(\n selectInlineDisplayWordByWordPreferences,\n shallowEqual,\n );\n const selectedVerseKey = useSelector(selectReadingViewSelectedVerseKey, shallowEqual);\n const hoveredVerseKey = useSelector(selectReadingViewHoveredVerseKey, shallowEqual);\n const centerAlignPage = useMemo(\n () => isCenterAlignedPage(pageNumber, lineNumber, quranFont),\n [pageNumber, lineNumber, quranFont],\n );\n // if it's translation mode and hideArabic query param is true, don't show the verse text\n if (isReadingMode === false && router?.query?.[QueryParam.HIDE_ARABIC] === 'true') {\n return null;\n }\n const firstWordData = getFirstWordOfSurah(location);\n const isTajweedFont = quranFont === QuranFont.Tajweed;\n const isBigTextLayout =\n (isReadingMode &&\n (quranTextFontScale > 3 || showWordByWordTranslation || showWordByWordTransliteration)) ||\n isTajweedFont;\n\n const { chapterId } = firstWordData;\n\n const VerseTextContainer = shouldShowH1ForSEO ? 'h1' : 'div';\n const fontClassName = isFontLoaded\n ? getFontClassName(quranFont, quranTextFontScale, mushafLines)\n : getFontClassName(FALLBACK_FONT, quranTextFontScale, mushafLines, true);\n return (\n <>\n <VerseTextContainer\n ref={textRef}\n data-verse-key={verseKey}\n data-page={pageNumber}\n data-chapter-id={chapterId}\n data-hizb={hizbNumber}\n className={classNames(styles.verseTextContainer, {\n [styles.largeQuranTextLayoutContainer]: isBigTextLayout,\n [styles.highlighted]: isHighlighted,\n [styles[fontClassName]]: !isTajweedFont,\n [styles.tafsirOrTranslationMode]: !isReadingMode,\n })}\n >\n <div\n translate=\"no\"\n className={classNames(styles.verseText, {\n [styles.verseTextWrap]: !isReadingMode,\n [styles.largeQuranTextLayout]: isBigTextLayout,\n [styles.verseTextCenterAlign]: isReadingMode && centerAlignPage,\n [styles.verseTextSpaceBetween]: isReadingMode && !centerAlignPage,\n })}\n >\n {words?.map((word) => (\n <QuranWord\n key={word.location}\n word={word}\n font={quranFont}\n isFontLoaded={isFontLoaded}\n isHighlighted={word.verseKey === selectedVerseKey}\n shouldShowSecondaryHighlight={word.verseKey === hoveredVerseKey}\n />\n ))}\n </div>\n </VerseTextContainer>\n </>\n );\n};\n\nexport default React.memo(VerseText);\n","import { QuranFont } from 'types/QuranReader';\n\n// Pages where we want to have center align text to resemble the Madani Mushaf\nconst CENTER_ALIGNED_PAGES = [1, 2];\n\n// Lines that need to be center aligned\nconst CENTER_ALIGNED_PAGE_LINES = {\n 255: [2], // 13(Ar-Ra'd), last ayah\n 528: [9], // 67 (Al Qalam) last ayah\n 534: [6], // 55(Ar-Rahman) last ayah\n 545: [6], // 58(Al-Mujadila) last ayah\n 586: [1], // 80('Abasa) last ayah\n 593: [2], // 88(Al-Ghashiyah) last 2 ayah\n 594: [5], // 89(Al-Fajr) last 2 ayah\n 600: [10], // 100(Al-'Adiyat) last 2 ayah\n 602: [5, 15], // 106(Quraysh) last ayah, 108(Al-Kawthar) last ayah\n 603: [10, 15], // 110(An-Nasr) last ayah, 111(Al-Masad) last ayah\n 604: [4, 9, 14, 15], // 112(Al-Ikhlas) last ayah, 113(Al-Falaq) last ayah, 114(An-Nas) last 2 ayah\n};\n\n/**\n * Util function to check if page or specific line should be center aligned to\n * resemble the printed Madani Mushaf.\n *\n * @param {number} pageNumber\n * @param {number} lineNumber\n * @param {QuranFont} quranFont\n * @returns {boolean}\n */\nconst isCenterAlignedPage = (\n pageNumber: number,\n lineNumber: number,\n quranFont: QuranFont,\n): boolean => {\n if (quranFont === QuranFont.IndoPak) {\n return false;\n }\n const centerAlignedLines = CENTER_ALIGNED_PAGE_LINES[pageNumber] || [];\n return CENTER_ALIGNED_PAGES.includes(pageNumber) || centerAlignedLines.includes(lineNumber);\n};\n\nexport default isCenterAlignedPage;\n","/* eslint-disable i18next/no-literal-string */\nimport React, { useRef } from 'react';\n\nimport useTranslation from 'next-translate/useTranslation';\nimport { useDispatch } from 'react-redux';\n\nimport styles from './ChapterHeader.module.scss';\n\nimport ChapterIconContainer, {\n ChapterIconsSize,\n} from '@/components/chapters/ChapterIcon/ChapterIconContainer';\nimport { QURAN_READER_OBSERVER_ID } from '@/components/QuranReader/observer';\nimport PlayChapterAudioButton from '@/components/QuranReader/PlayChapterAudioButton';\nimport Bismillah from '@/dls/Bismillah/Bismillah';\nimport Button, { ButtonSize, ButtonVariant } from '@/dls/Button/Button';\nimport useIntersectionObserver from '@/hooks/useObserveElement';\nimport InfoIcon from '@/icons/info.svg';\nimport { setIsSettingsDrawerOpen, setSettingsView, SettingsView } from '@/redux/slices/navbar';\nimport { logButtonClick } from '@/utils/eventLogger';\nimport { getSurahInfoNavigationUrl } from '@/utils/navigation';\n\ninterface Props {\n chapterId: string;\n pageNumber: number;\n hizbNumber: number;\n translationName?: string;\n isTranslationSelected?: boolean;\n}\n\nconst CHAPTERS_WITHOUT_BISMILLAH = ['1', '9'];\n\nconst ChapterHeader: React.FC<Props> = ({\n chapterId,\n pageNumber,\n hizbNumber,\n translationName,\n isTranslationSelected,\n}) => {\n const dispatch = useDispatch();\n const { t } = useTranslation('common');\n const headerRef = useRef(null);\n /**\n * the intersection observer is needed so that we know that the first verse\n * of the current chapter is being read when the ChapterHeader appears within\n * the intersection observer root's borders.\n */\n useIntersectionObserver(headerRef, QURAN_READER_OBSERVER_ID);\n\n const onChangeTranslationClicked = () => {\n dispatch(setIsSettingsDrawerOpen(true));\n dispatch(setSettingsView(SettingsView.Translation));\n logButtonClick('change_translation');\n };\n\n return (\n <div\n ref={headerRef}\n data-verse-key={`${chapterId}:1`}\n data-page={pageNumber}\n data-chapter-id={chapterId}\n data-hizb={hizbNumber}\n >\n <div className={styles.header}>\n <div className={styles.chapterIconContainer}>\n <ChapterIconContainer chapterId={chapterId} size={ChapterIconsSize.Mega} />\n </div>\n </div>\n <div className={styles.bismillahContainer}>\n {!CHAPTERS_WITHOUT_BISMILLAH.includes(chapterId) && <Bismillah />}\n </div>\n <div className={styles.container}>\n <div className={styles.left}>\n <div className={styles.infoContainer}>\n {translationName ? (\n <div className={styles.translation}>\n {isTranslationSelected && (\n <div className={styles.translationBy}>{t('quran-reader:translation-by')}</div>\n )}\n <span>{translationName}</span>{' '}\n <span\n onKeyPress={onChangeTranslationClicked}\n tabIndex={0}\n role=\"button\"\n onClick={onChangeTranslationClicked}\n className={styles.changeTranslation}\n >\n ({t('quran-reader:trans-change')})\n </span>\n <span className={styles.changeTranslation} />\n </div>\n ) : (\n <Button\n size={ButtonSize.Small}\n variant={ButtonVariant.Ghost}\n prefix={<InfoIcon />}\n href={getSurahInfoNavigationUrl(chapterId)}\n shouldPrefetch={false}\n hasSidePadding={false}\n onClick={() => {\n logButtonClick('chapter_header_info');\n }}\n id=\"surah-info-button\"\n >\n {t('quran-reader:surah-info')}\n </Button>\n )}\n </div>\n </div>\n <div className={styles.right}>\n {translationName && (\n <Button\n size={ButtonSize.Small}\n variant={ButtonVariant.Ghost}\n prefix={<InfoIcon />}\n href={getSurahInfoNavigationUrl(chapterId)}\n shouldPrefetch={false}\n hasSidePadding={false}\n onClick={() => {\n logButtonClick('chapter_header_info');\n }}\n id=\"surah-info-button\"\n >\n {t('quran-reader:surah-info')}\n </Button>\n )}\n <div className={styles.actionContainer}>\n <PlayChapterAudioButton chapterId={Number(chapterId)} />\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default ChapterHeader;\n","import React from 'react';\n\ninterface Props {\n id?: string;\n}\n\nconst ChapterIcon: React.FC<Props> = ({ id }) => <span translate=\"no\">{id.padStart(3, '0')}</span>;\n\nexport default ChapterIcon;\n","import React from 'react';\n\nimport classNames from 'classnames';\n\nimport styles from './ChapterIconContainer.module.scss';\n\nimport ChapterIcon from '@/components/chapters/ChapterIcon';\n\nexport enum ChapterIconsSize {\n Small = 'small',\n Medium = 'medium',\n Large = 'large',\n Mega = 'mega',\n}\n\n// TODO: maybe replace `hasSurahPrefix` with `variant` and use it to show v1 or v2 surah name font\ninterface Props {\n chapterId: string;\n size?: ChapterIconsSize;\n hasSurahPrefix?: boolean;\n}\n\nconst IconContainer: React.FC<Props> = ({\n chapterId,\n size = ChapterIconsSize.Medium,\n hasSurahPrefix = true,\n}) => (\n <span\n className={classNames(styles.iconContainer, {\n [styles.iconContainerSmall]: size === ChapterIconsSize.Small,\n [styles.iconContainerLarge]: size === ChapterIconsSize.Large,\n [styles.iconContainerMega]: size === ChapterIconsSize.Mega,\n })}\n >\n <ChapterIcon id={chapterId} />\n {hasSurahPrefix && <ChapterIcon id=\"surah\" />}\n </span>\n);\n\nexport default IconContainer;\n","import classNames from 'classnames';\n\nimport styles from './Badge.module.scss';\n\ntype BadeProps = {\n content: React.ReactNode;\n children: React.ReactNode;\n contentClassName?: string;\n className?: string;\n};\n\nconst Badge = ({ content, children, contentClassName, className }: BadeProps) => {\n return (\n <div className={classNames(styles.container, className)}>\n {children}\n <div className={classNames(contentClassName, styles.content, styles.positionBottomRight)}>\n {content}\n </div>\n </div>\n );\n};\n\nexport default Badge;\n","import React from 'react';\n\nimport useTranslation from 'next-translate/useTranslation';\n\nimport styles from './NewLabel.module.scss';\n\nconst NewLabel = () => {\n const { t } = useTranslation('common');\n return <p className={styles.label}>{t('new')}</p>;\n};\n\nexport default NewLabel;\n","var _switch;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nvar SvgBismillah = function SvgBismillah(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n baseProfile: \"tiny\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 220,\n height: 45,\n viewBox: \"0 0 176 36\",\n overflow: \"inherit\",\n xmlSpace: \"preserve\"\n }, props), _switch || (_switch = /*#__PURE__*/React.createElement(\"switch\", null, /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"currentColor\",\n d: \"M165.716 11.67c-.586-.089-1.021-.134-1.306-.134-.277 0-.644.273-1.099.818-.391.472-.586.781-.586.928a.217.217 0 0 0 .03.061c.012.016.03.024.055.024.008 0 .09-.063.244-.189s.301-.189.439-.189c.969 0 1.64.094 2.014.281-.357.26-.943.521-1.757.781-.659.211-.981.354-.965.427.024.081.366.094 1.025.037.651-.057 1.099-.143 1.343-.256.31-.146.667-.464 1.074-.952.439-.521.659-.932.659-1.233.002-.148-.389-.282-1.17-.404zm1.953 6.835c-.024 0-.092.13-.201.391-.11.26-.279.391-.507.391-.334 0-.501-.203-.501-.611 0-.179.051-.429.153-.75.102-.321.152-.535.152-.641 0-.065-.021-.105-.062-.122-.138-.073-.321.191-.549.793-.22.57-.329.989-.329 1.257 0 .277.081.546.243.807.188.284.411.427.672.427.342 0 .614-.179.817-.537.171-.301.257-.639.257-1.013.001-.277-.047-.408-.145-.392zm4.571 9.026c-.533-.271-.856-.408-.971-.408-.057 0-.207.258-.451.775-.244.516-.366.836-.366.958 0 .057.262.235.787.537.524.301.84.451.946.451.089 0 .254-.269.494-.806.239-.537.359-.879.359-1.025.001-.048-.266-.208-.798-.482zm2.203 3.449c-.058-.025-.92.346-2.588 1.11-1.701.781-2.648 1.257-2.844 1.429-.163.138-.362.361-.599.671-.284.366-.427.614-.427.745 0 .016.008.027.024.036-.073 0 .765-.411 2.515-1.233.919-.432 1.814-.846 2.685-1.244.163-.106.407-.338.732-.696.351-.391.525-.651.525-.781.002-.017-.007-.029-.023-.037zm-1.025-13.061c-1.074-2.034-1.733-3.051-1.978-3.051-.236 0-.354.504-.354 1.514 0 .35.04.785.122 1.306.089.545.166.818.231.818.122 0 .184-.403.184-1.208.398.529.956 1.489 1.672 2.881.789 1.529 1.184 2.502 1.184 2.917 0 .285-.211.428-.635.428-.301 0-.667-.062-1.099-.184-.488-.13-.817-.28-.988-.451.073-.488.041-.749-.098-.781-.114-.024-.293.265-.537.866-.244.603-.443.903-.598.903-.586 0-1.07-.142-1.453-.427.154-.521.244-.83.269-.928 0-.098-.028-.167-.085-.208-.106-.032-.257.114-.452.44-.261.438-.513.752-.757.939-.333.26-.813.391-1.44.391-.724 0-1.114-.057-1.171-.172.122-.072.237-.235.348-.488.109-.252.164-.459.164-.622 0-.098-.028-.15-.085-.158-.073-.017-.188.069-.342.256a2.502 2.502 0 0 1-.684.586c-.911.521-4.374 1.11-10.388 1.771-2.913.316-6.615.598-11.107.842-4.825.26-9.085.391-12.779.391-7.683 0-14.961-.342-21.837-1.025-2.971-.293-4.932-.537-5.884-.732-2.449-.496-4.142-1.266-5.078-2.307-.431-.48-.748-.717-.951-.708-.424.017-.854.415-1.294 1.196-.407.707-.61 1.298-.61 1.77 0 .326.187.659.562 1.001-2.222 1.603-3.942 2.815-5.163 3.638-.334.22-.484.357-.452.415.008.024.037.036.086.036.366 0 1.172-.252 2.416-.756 1.245-.506 2.011-.888 2.295-1.148.488-.447.903-1.082 1.245-1.904.269.18.738.362 1.41.55.671.187 1.166.272 1.482.257.098-.009.229-.257.391-.745 2.312.554 5.619 1.038 9.924 1.452 2.922.285 6.689.525 11.303.721 4.158.179 7.52.269 10.083.269 3.011 0 7.12-.163 12.328-.488 4.979-.31 9-.64 12.06-.989 4.833-.553 7.999-1.191 9.496-1.916a1.735 1.735 0 0 0-.085.439c0 .326.618.488 1.854.488.854 0 1.575-.342 2.161-1.025.586.473 1.232.708 1.94.708.398 0 .798-.603 1.196-1.807.212.188.582.432 1.11.732.627.358 1.059.537 1.294.537.236 0 .493-.179.77-.537.357-.472.537-1.082.537-1.831 0-1.052-.578-2.673-1.733-4.862zM96.61 4.59c-.109-.122-.229-.183-.359-.183-.847 0-1.567.635-2.161 1.904-.139-.008-.313-.063-.524-.165-.212-.102-.366-.152-.464-.152-.317 0-.647.22-.988.659-.31.399-.465.72-.465.964 0 .082.033.122.098.122.033 0 .161-.132.385-.397.224-.264.417-.396.58-.396.13 0 .34.071.629.213.288.143.563.214.823.214.684 0 1.29-.232 1.819-.696.528-.464.793-1.033.793-1.709a.566.566 0 0 0-.166-.378zm-1.788 10.669a1763.66 1763.66 0 0 0-.977-4.492c-.252-1.253-.406-1.879-.464-1.879-.235 0-.354.85-.354 2.551l.744 3.271c.529 2.278.858 3.812.989 4.601l.293 2.063c.105.7.183 1.05.231 1.05.236 0 .354-.766.354-2.295.003-.708-.271-2.332-.816-4.87zM85.998 6.91a7.41 7.41 0 0 0-.391 1.135c.879.968 1.363 2.079 1.453 3.332.024.366.061.549.109.549.18 0 .269-.435.269-1.306 0-1.383-.48-2.62-1.44-3.71zm2.514 6.298c-.081-.504-.188-.752-.317-.745-.105 0-.146.138-.122.415.032.326.024.529-.024.61a.632.632 0 0 1-.366.159c-.162.017-.276-.024-.342-.122-.032-.057-.057-.228-.073-.513-.008-.228-.053-.342-.134-.342-.082.017-.139.159-.171.427-.041.35-.077.562-.11.635-.105.236-.321.378-.646.427-.244 0-.395-.143-.452-.427 0-.089.028-.222.085-.397.057-.175.085-.303.085-.384 0-.065-.024-.11-.073-.134-.008-.008-.021-.012-.037-.012-.098 0-.236.24-.415.72-.13.342-.179.635-.146.879.073.578.391.838.952.781.293-.024.59-.228.891-.61.122.114.293.171.513.171.627 0 .94-.375.94-1.123a2.7 2.7 0 0 0-.038-.415zm-10.4-8.911c-.854 0-1.583.635-2.185 1.904-.114-.016-.279-.08-.494-.189-.216-.11-.38-.165-.495-.165-.301 0-.626.228-.977.684-.317.415-.476.741-.476.977 0 .089.032.134.098.134.041 0 .175-.134.402-.403.228-.269.427-.403.598-.403.123 0 .33.065.623.195s.559.196.794.196c.684 0 1.282-.22 1.794-.659.545-.472.818-1.042.818-1.709.001-.374-.166-.562-.5-.562zm13.793 16.82-1.953-5.053c-.057-.139-.114-.208-.171-.208-.017.008-.041.114-.073.317-.098.602-.146.976-.146 1.123 0 .391.336 1.402 1.007 3.033.672 1.632 1.008 2.565 1.008 2.802 0 .163-.139.244-.415.244a2 2 0 0 1-.317.024 1.862 1.862 0 0 1-1.526-.732c-.285-.358-.603-1.258-.952-2.697a485.636 485.636 0 0 1-.671-2.918c-.122-.521-.229-.781-.317-.781-.285.537-.428 1.046-.428 1.526 0 .114.062.407.184.879.423 1.644.635 2.707.635 3.186 0 .603-.24 1.074-.721 1.415-.423.302-.948.452-1.574.452-.977 0-1.53-.472-1.66-1.416-.049-.35-.073-1.126-.073-2.331 0-.659-.024-.989-.073-.989-.139 0-.269.273-.391.818a2.77 2.77 0 0 0-.073.599c0 .049-.354.24-1.062.573-.854.407-1.513.851-1.977 1.33-.277.285-.533.725-.769 1.318-.155.374-.057.655.293.843.26.139.598.207 1.013.207.903 0 1.501-.199 1.794-.598.024-.025.122-.191.293-.501.114-.212.232-.35.354-.415.033.773.183 1.339.452 1.697.439.586 1.042.879 1.807.879.806 0 1.465-.33 1.978-.989.276-.35.483-.769.622-1.257.098-.326.171-.518.22-.574.024.017.077.188.159.513.105.415.244.761.415 1.038.146.236.402.445.769.629.366.183.696.273.989.273.626 0 1.078-.346 1.354-1.037.138-.342.208-.875.208-1.599-.004-.715-.074-1.256-.212-1.623zm-10.247-7.665c-.542-.496-1.121-.745-1.739-.745-.261 0-.391.167-.391.5 0 .301.093.513.281.635-.09.236-.134.553-.134.952 0 .472.269.752.806.842-.285.407-.753.842-1.404 1.306a86.19 86.19 0 0 1-1.367.928c-.497.334-.724.545-.684.635.016.041.061.061.134.061.22 0 .626-.163 1.221-.488.562-.309 1.005-.59 1.331-.842.513-.398.984-.919 1.416-1.562.106 0 .271.047.495.14.224.094.376.14.458.14.261 0 .391-.28.391-.842-.002-.61-.273-1.163-.814-1.66zm15.679 16.075c-.203 0-.899.285-2.087.854-1.156.554-1.859.928-2.112 1.123-.398.399-.646.659-.744.781-.261.325-.366.524-.317.599.008.008.024.012.049.012a69.57 69.57 0 0 0 1.465-.793 95.53 95.53 0 0 1 2.941-1.404c.105-.081.269-.271.488-.567.22-.298.33-.494.33-.592 0-.009-.005-.013-.013-.013zM75.781 12.952c-.415-2.278-.639-3.548-.671-3.808-.073-.57-.154-.854-.244-.854-.041 0-.14.476-.299 1.428-.159.952-.222 1.514-.189 1.685.643 3.678 1.099 6.27 1.367 7.775.179 1.05.346 2.579.5 4.589.016.213.073.318.171.318.122 0 .183-.069.183-.208.154-.813.204-1.993.146-3.54-.057-1.701-.378-4.163-.964-7.385zm-5.859-7.556c-.049-.016-1.086.439-3.112 1.367-2.059.944-3.21 1.509-3.455 1.697-.146.114-.342.333-.586.659-.269.35-.403.59-.403.72 0 .024.008.037.024.037-.114 0 .712-.411 2.478-1.233 1.505-.7 2.775-1.278 3.808-1.733.163-.098.413-.336.751-.714.337-.378.506-.636.506-.775.001-.008-.003-.017-.011-.025zm-1.38 5.761c-.106-.569-.236-.842-.39-.818-.082.017-.123.085-.123.208 0 .082.012.202.037.36.024.159.037.279.037.36 0 .407-.171.61-.513.61a.33.33 0 0 1-.317-.195c-.024-.049-.062-.248-.11-.598-.041-.276-.102-.407-.183-.391-.09.017-.151.171-.183.464a8.914 8.914 0 0 1-.098.708c-.082.261-.305.411-.671.452-.261.065-.423-.077-.488-.427a1.056 1.056 0 0 1 .037-.403 2.17 2.17 0 0 0 .073-.415c0-.089-.024-.146-.073-.171-.017 0-.029-.004-.037-.012-.09 0-.232.265-.427.793-.09.391-.114.708-.073.952a.936.936 0 0 0 .366.623.842.842 0 0 0 .696.159c.447-.082.752-.305.916-.671a.788.788 0 0 0 .634.293c.635 0 .952-.427.952-1.282 0-.179-.021-.379-.062-.599zm11.536 16.4c-1.18.573-1.88.958-2.1 1.153-.448.398-.708.647-.781.744-.26.334-.354.537-.281.61a.052.052 0 0 0 .037.013c.049 0 .224-.09.525-.269.423-.252.732-.428.928-.525a216.721 216.721 0 0 1 2.966-1.416c.26-.195.5-.427.72-.695.269-.317.297-.477.085-.477-.22 0-.92.287-2.099.862zM59.547 7.3c-.586-.089-1.025-.134-1.318-.134-.277 0-.643.276-1.099.83-.399.48-.598.785-.598.916a.194.194 0 0 0 .037.048.08.08 0 0 0 .061.024c.016 0 .1-.062.25-.189.15-.126.291-.189.421-.189.195 0 .545.037 1.05.11.545.081.867.15.964.208-.358.244-.94.496-1.746.757-.659.211-.985.35-.977.415.024.057.167.085.427.085.83 0 1.477-.102 1.941-.305.301-.13.663-.444 1.086-.94.456-.521.684-.924.684-1.208.001-.164-.394-.306-1.183-.428zM72.4 16.271c-.57-3.222-.854-4.858-.854-4.907.26-.781.391-1.204.391-1.27-.008-.032-.082-.098-.22-.195-.383-.269-.598-.7-.647-1.294-.024-.261-.065-.391-.122-.391-.114 0-.252.293-.415.879-.146.529-.22.907-.22 1.135 0 .342.094.639.281.891l1.001 5.419c.651 3.516.977 5.525.977 6.03 0 .553-.464.83-1.392.83-.212 0-.362-.021-.452-.062a6.783 6.783 0 0 1-.769-.769c-.211.61-.403 1.232-.574 1.867.497.334.745.725.745 1.172 0 .285-.309.732-.928 1.343-1.286 1.27-2.754 1.904-4.406 1.904-.26 0-.647-.036-1.16-.11a8.954 8.954 0 0 0-1.147-.109c-.122 0-.183.032-.183.098 0 .146.277.361.83.646a8.06 8.06 0 0 0 1.233.537c.952.326 1.624.488 2.014.488.683 0 1.518-.464 2.502-1.391 1.123-1.059 1.798-2.242 2.026-3.553.781 0 1.375-.357 1.782-1.074.342-.586.513-1.298.513-2.136 0-.948-.269-2.942-.806-5.978zm-19.261-8.47c-.155.35-.285.724-.391 1.123.545.594.932 1.229 1.159 1.904.13.399.22.875.269 1.428.032.375.073.562.122.562.188 0 .281-.435.281-1.306 0-1.384-.48-2.621-1.44-3.711zM50.38 4.334c-.822 0-1.542.635-2.16 1.904-.146-.008-.324-.069-.531-.183-.208-.114-.36-.171-.458-.171-.317 0-.647.224-.989.671-.31.399-.464.729-.464.989 0 .089.037.134.11.134.041 0 .171-.134.391-.403s.407-.403.562-.403c.138 0 .352.065.641.195.289.13.56.195.812.195.692 0 1.3-.226 1.825-.678.525-.451.787-1.015.787-1.69-.001-.373-.177-.56-.526-.56zm2.325 10.791c-.525-.293-.84-.439-.946-.439-.082 0-.208.24-.378.72-.171.48-.256.793-.256.939 0 .122.23.33.69.623.459.292.758.439.897.439.081 0 .232-.264.452-.793s.33-.854.33-.976c-.001-.05-.264-.221-.789-.513zm-4.095-2.1c-.383-1.847-.631-3.121-.745-3.821-.089-.537-.183-.805-.281-.805-.041 0-.13.478-.268 1.434-.139.956-.191 1.516-.159 1.678a860.271 860.271 0 0 0 1.379 7.031c.211 1.14.403 2.669.574 4.59.049.212.118.317.208.317.065 0 .122-.082.171-.244.13-.847.155-2.014.073-3.504-.098-1.83-.415-4.056-.952-6.676zm-8.129-1.55c-.106-.569-.236-.842-.391-.818-.082.017-.122.085-.122.208 0 .082.014.202.042.36s.043.279.043.36c0 .407-.175.61-.525.61-.139 0-.244-.065-.317-.195a12.877 12.877 0 0 1-.085-.476l-.012-.122c-.041-.269-.102-.398-.183-.391-.098.017-.163.171-.195.464-.041.432-.069.667-.085.708-.082.261-.305.411-.671.452-.261.065-.427-.073-.5-.415-.017-.081-.002-.226.043-.433.044-.208.067-.344.067-.409 0-.089-.024-.15-.073-.183-.09-.049-.244.22-.464.806-.09.35-.11.667-.061.952.081.529.362.793.842.793.529 0 .907-.228 1.135-.684a.753.753 0 0 0 .623.293c.635 0 .952-.427.952-1.282a3.583 3.583 0 0 0-.063-.598zm15.422 17.552c-1.176.562-1.874.939-2.093 1.135a7.49 7.49 0 0 0-.745.781c-.277.334-.383.533-.317.598.008 0 .513-.26 1.514-.781a94.169 94.169 0 0 1 2.941-1.402c.285-.229.525-.461.72-.696.26-.317.289-.476.085-.476-.227 0-.929.28-2.105.841zM44.667 13.708c-.659-3.613-1.079-5.383-1.257-5.31-.22.089-.395.691-.525 1.806a17.57 17.57 0 0 0-.146 2.039c0 1.359.065 2.576.195 3.65.114.96.228 1.44.342 1.44.057 0 .085-.24.085-.72l-.073-2.587c-.024-1.196-.004-2.095.061-2.698l.891 4.651c.513 2.685.769 4.281.769 4.785 0 .252-.261.428-.781.525-.472.089-.802.094-.989.012-.309-.229-.533-.419-.671-.574-.269-.179-.48.033-.635.635-.163.595-.126 1.01.11 1.246.537.422.806.821.806 1.195 0 .619-.496 1.335-1.489 2.148-1.042.854-2.018 1.281-2.929 1.281-.912 0-1.546-.293-1.904-.879-.179-.293-.297-.756-.354-1.391-.049-.537-.106-.807-.171-.807-.171 0-.256.334-.256 1.002 0 .635.118 1.221.354 1.758.594 1.342 1.57 2.014 2.93 2.014 1.123 0 2.177-.68 3.161-2.039.928-1.277 1.371-2.461 1.331-3.552.83-.073 1.412-.407 1.746-1.001.252-.455.378-1.143.378-2.062-.002-.83-.328-3.019-.979-6.567zm-14.452-6.2c-6.274 1.57-10.225 2.75-11.852 3.54-.79.383-1.433.863-1.929 1.44-.399.464-.598.814-.598 1.05 0 .049.021.073.061.073-.016-.008.171-.142.562-.403.545-.366 1.298-.732 2.258-1.099 2.596-.993 5.989-1.994 10.18-3.002 4.28-1.034 8.78-2.071 13.5-3.113.529-.545.985-1.042 1.367-1.489-3.214.545-7.73 1.546-13.549 3.003zm35.325 8.593c-.407-.163-1.249-.578-2.527-1.245-.675-.35-1.293-.525-1.855-.525-1.058 0-1.791.5-2.197 1.501-.049.171-.094.342-.134.512a23.147 23.147 0 0 1 1.575-.061c.586 0 1.062.032 1.428.098.439.122 1.038.333 1.794.634-2.628.35-4.357.916-5.188 1.697-.204.188-.497.586-.879 1.196-.366.569-.627.915-.781 1.038-.358.284-.903.427-1.636.427-.333 0-.563-.047-.689-.141-.126-.093-.285-.308-.476-.641s-.352-.558-.482-.671c-.065-.058-.214.199-.446.769s-.262.973-.091 1.208c.496.66.745 1.294.745 1.904 0 1.855-2.673 3.801-8.02 5.835-4.378 1.668-9.313 2.502-14.806 2.502-5.477 0-10.306-1.106-14.489-3.319a18.333 18.333 0 0 1-3.039-2.027 24.436 24.436 0 0 1-1.831-1.696c-.448-.456-.7-.663-.757-.622-.008.008-.012.028-.012.061 0 .342.452 1.188 1.355 2.539 1.001 1.497 1.908 2.539 2.722 3.125 1.53 1.098 3.593 2.01 6.188 2.734 2.995.838 6.189 1.257 9.582 1.257 5.696 0 11.197-1.119 16.503-3.356 4.605-1.938 7.087-4.48 7.445-7.629.122.008.236.012.342.012 1.05 0 1.843-.557 2.38-1.672.789.96 1.782 1.44 2.979 1.44.333 0 .63-.302.891-.903.228-.521.341-.973.341-1.355 0-.602-.297-1.154-.891-1.66.391-.17 1.074-.354 2.05-.549 1.09-.22 2.01-.33 2.759-.33 1.204 0 2.547.249 4.028.745.822-.968 1.212-1.453 1.172-1.453-2.254-.472-3.938-.932-5.053-1.379zm-49.618-9.02c-.578-.089-1.013-.134-1.306-.134-.285 0-.655.276-1.11.83-.383.472-.574.777-.574.916 0 .057.024.085.073.085.016 0 .1-.063.25-.189s.287-.189.409-.189c.212 0 .566.032 1.062.098.537.081.867.155.989.22-.358.244-.944.496-1.757.756-.667.212-.989.346-.964.403.006.064.153.096.438.096.822 0 1.465-.089 1.929-.268.301-.155.659-.48 1.074-.977.439-.529.659-.936.659-1.221 0-.162-.391-.304-1.172-.426zm6.042 8.495a11.1 11.1 0 0 0-.11.549c-.073.334-.248.501-.525.501-.512 0-.769-.399-.769-1.196 0-.073.004-.183.012-.33.008-.146.012-.256.012-.33 0-.163-.024-.248-.073-.256-.106-.016-.204.228-.293.732a5.963 5.963 0 0 0-.122 1.025c0 .383.089.737.269 1.062.211.383.496.574.854.574.325 0 .582-.175.769-.525.146-.285.22-.606.22-.964 0-.626-.081-.907-.244-.842zm7.25 7.738c-.016-.016-.083.137-.201.458-.118.321-.177.519-.177.592 0 .024.008.049.024.073.838.92 1.314 2.03 1.428 3.332.032.375.073.562.122.562.163 0 .244-.428.244-1.282.001-1.399-.479-2.644-1.44-3.735zm8.899-6.078c-.797-.203-1.77-.525-2.917-.964-.854-.325-1.367-.488-1.538-.488-.7 0-1.257.313-1.672.939-.301.456-.452.854-.452 1.196 0 .024.004.041.012.049.358-.032.716-.049 1.074-.049 1.44 0 2.791.252 4.052.757-1.603.855-2.832 1.282-3.686 1.282-.48 0-.863-.118-1.147-.354-.195-.162-.293-.305-.293-.427 0 .058.02-.053.061-.33.024-.154-.008-.244-.098-.269-.057-.016-.188.09-.391.317-.277.317-.643.574-1.099.769-.968.415-2.437.785-4.406 1.11-2.238.367-4.492.55-6.762.55-4.134 0-6.958-.834-8.471-2.502-.439-.48-.749-.716-.928-.708-.448.017-.887.411-1.318 1.184-.39.7-.585 1.294-.585 1.782 0 .325.187.655.561.989-2.14 1.545-3.857 2.75-5.151 3.612-.342.228-.497.378-.464.452.008.023.041.036.098.036.358 0 1.166-.254 2.423-.763 1.257-.509 2.021-.889 2.289-1.142.48-.439.891-1.078 1.233-1.916.277.171.753.354 1.428.549s1.164.285 1.465.269c.203-.064.358-.338.464-.817 1.131.569 3.121.854 5.969.854 2.954 0 5.7-.261 8.239-.781 2.832-.578 4.447-1.33 4.846-2.258.496.968 1.038 1.452 1.624 1.452.415 0 1.615-.407 3.601-1.221s3.41-1.221 4.272-1.221c.667 0 1.293.081 1.879.244.065.017.256-.265.574-.842.26-.48.391-.757.391-.83 0-.016-.004-.024-.012-.024-2.183.002-3.904-.16-5.165-.486zm-15.118 7.116c-.565-.268-.885-.391-.958-.365-.26.455-.472.891-.635 1.306l-1.05-.464c-.431-.188-.683-.269-.756-.244-.082.024-.214.301-.397.83s-.262.842-.238.939c.016.065.293.223.83.471.537.248.863.372.977.372.098 0 .31-.436.635-1.306.977.545 1.554.793 1.733.744.073-.024.224-.303.452-.836s.325-.844.293-.934c-.025-.074-.32-.244-.886-.513zm-14.72 4.822c-1.176.562-1.882.943-2.118 1.147-.896.765-1.245 1.208-1.05 1.33.008.009.024.013.049.013.122-.09.614-.354 1.477-.794a180.24 180.24 0 0 1 2.93-1.416c.244-.146.488-.362.732-.646.269-.317.297-.476.085-.476-.228 0-.929.28-2.105.842zM95.494 6.238c-.375.122-.7.171-.977.146.431-.781.842-1.172 1.232-1.172.285 0 .428.143.428.427.001.245-.228.445-.683.599zm.61 17.284c0-.106.081-.251.244-.434.162-.183.293-.274.391-.274.081-.008.231.188.451.586.276.504.517.85.721 1.037-1.205-.251-1.807-.556-1.807-.915zM77.331 6.128c-.375.122-.7.171-.977.146.415-.797.826-1.196 1.233-1.196.285 0 .427.151.427.452.001.244-.227.444-.683.598zm4.663 8.935c-.13 0-.35-.053-.66-.159.041-.171.062-.322.062-.452a.74.74 0 0 0-.062-.33c.114.016.285.146.513.391.187.204.28.35.28.439a.114.114 0 0 1-.012.049c-.008.042-.048.062-.121.062zm-1.196-.231c-.448 0-.671-.085-.671-.256 0-.374.13-.562.391-.562.236 0 .354.143.354.427a1.287 1.287 0 0 1-.074.391zm2.306 7.628a3.531 3.531 0 0 1-1.916.366c-.375-.032-.562-.085-.562-.158 0-.154.838-.659 2.514-1.514-.023.211-.036.647-.036 1.306zM49.623 6.153c-.382.13-.708.183-.977.159.432-.781.842-1.172 1.233-1.172.285 0 .427.143.427.427.001.236-.227.432-.683.586zm10.705 15.05c-.358 0-.777-.135-1.257-.402a2.052 2.052 0 0 1-.5-.391c-.195-.204-.252-.367-.171-.488.057-.074.208-.102.452-.086.269.024.496.086.684.184.643.342.964.699.964 1.074-.001.072-.058.109-.172.109zM8.745 19.922c0-.105.082-.252.244-.439s.297-.289.403-.306c.073 0 .22.204.439.61.269.505.509.854.72 1.05-1.204-.252-1.806-.558-1.806-.915z\"\n })))));\n};\nexport default SvgBismillah;","import React from 'react';\n\nimport BismillahSVG from '@/public/bismillah.svg';\n\nconst Bismillah = () => <BismillahSVG />;\n\nexport default Bismillah;\n","/* eslint-disable i18next/no-literal-string */\nimport React from 'react';\n\nimport classNames from 'classnames';\n\nimport styles from './KeyboardInput.module.scss';\n\ninterface Props {\n keyboardKey?: string;\n invertColors?: boolean;\n meta?: boolean;\n shift?: boolean;\n alt?: boolean;\n ctrl?: boolean;\n}\n\nconst KeyboardInput: React.FC<Props> = ({\n keyboardKey,\n meta,\n shift,\n alt,\n ctrl,\n invertColors = false,\n}) => {\n const isMacOs = typeof window !== 'undefined' && window.navigator.userAgent.search('Mac') !== -1;\n return (\n <kbd className={classNames(styles.container, { [styles.invertedColors]: invertColors })}>\n {meta && <span>{isMacOs ? '⌘' : 'ctrl'}</span>}\n {shift && <span>⇧</span>}\n {alt && <span>⌥</span>}\n {ctrl && <span>⌃</span>}\n {keyboardKey && <span>{keyboardKey}</span>}\n </kbd>\n );\n};\n\nexport default KeyboardInput;\n","import useSWRImmutable from 'swr/immutable';\n\nimport { countNotesWithinRange } from '@/utils/auth/api';\nimport { isLoggedIn } from '@/utils/auth/login';\n\ntype Range = {\n from: string;\n to: string;\n};\n\nconst useCountRangeNotes = (notesRange: Range) => {\n const { data, isValidating, error } = useSWRImmutable(\n notesRange && isLoggedIn() ? `countNotes/${notesRange.from}-${notesRange.to}` : null,\n async () => {\n return countNotesWithinRange(notesRange.from, notesRange.to);\n },\n );\n\n return {\n data,\n isLoading: isValidating && !data,\n error,\n };\n};\n\nexport default useCountRangeNotes;\n","import { useCallback } from 'react';\n\nimport useBrowserLayoutEffect from '@/hooks/useBrowserLayoutEffect';\n\n/**\n * A hook that will create a global observer and inject it into window so that it's\n * globally available. Once it's created, it can be used by any element that would like\n * to be observed using that observer using {@see useObserverElement} hook.\n *\n * @param {IntersectionObserverInit} options\n * @param {(element:Element)=>void} onElementVisible\n * @param {string} observerId the name of the observer\n */\nconst useGlobalIntersectionObserver = (\n { threshold = 1, root = null, rootMargin = '0%' }: IntersectionObserverInit,\n onElementVisible: (element: Element) => void,\n observerId: string,\n) => {\n const updateEntry = useCallback(\n (entries: IntersectionObserverEntry[]): void => {\n entries\n .filter((entry) => entry.isIntersecting)\n .forEach((visibleEntry) => {\n onElementVisible(visibleEntry.target);\n });\n },\n [onElementVisible],\n );\n\n /**\n * We need to assign to window before render is done since we want to the observer to be available by the time rendering is done so that the elements to be observed can use it.\n * {@see https://kentcdodds.com/blog/useeffect-vs-uselayouteffect}\n */\n useBrowserLayoutEffect(() => {\n const hasIOSupport = !!window.IntersectionObserver;\n if (!hasIOSupport) return undefined;\n\n // no need to create a new observer if it already exists.\n if (!window[observerId]) {\n window[observerId] = new IntersectionObserver(updateEntry, {\n threshold,\n root,\n rootMargin,\n });\n }\n return () => {\n window[observerId].disconnect();\n window[observerId] = undefined;\n };\n }, [root, rootMargin, threshold, updateEntry, observerId]);\n};\n\nexport default useGlobalIntersectionObserver;\n","import { useContext, useMemo } from 'react';\n\nimport { useSelector as useXstateSelector } from '@xstate/react';\nimport useTranslation from 'next-translate/useTranslation';\nimport { useSelector } from 'react-redux';\n\nimport {\n getQuranReaderStylesInitialState,\n getTranslationsInitialState,\n} from '@/redux/defaultSettings/util';\nimport { selectIsUsingDefaultWordByWordLocale } from '@/redux/slices/QuranReader/readingPreferences';\nimport { selectQuranFont, selectQuranMushafLines } from '@/redux/slices/QuranReader/styles';\nimport { selectIsUsingDefaultTranslations } from '@/redux/slices/QuranReader/translations';\nimport { areArraysEqual, mergeTwoArraysUniquely } from '@/utils/array';\nimport { selectIsUsingDefaultReciter } from '@/xstate/actors/audioPlayer/selectors';\nimport { AudioPlayerMachineContext } from '@/xstate/AudioPlayerMachineContext';\n\nconst useIsUsingDefaultSettings = ({\n translationParams,\n selectedTranslations,\n}: {\n translationParams?: number[];\n selectedTranslations?: number[];\n} = {}) => {\n const { lang } = useTranslation();\n const audioService = useContext(AudioPlayerMachineContext);\n const isUsingDefaultReciter = useXstateSelector(audioService, (state) =>\n selectIsUsingDefaultReciter(state),\n );\n const isUsingDefaultWordByWordLocale = useSelector(selectIsUsingDefaultWordByWordLocale);\n const isUsingDefaultTranslations = useSelector(selectIsUsingDefaultTranslations);\n\n const quranFont = useSelector(selectQuranFont);\n const mushafLines = useSelector(selectQuranMushafLines);\n\n const defaultState = useMemo(() => {\n return {\n quranReaderStyles: getQuranReaderStylesInitialState(lang),\n translations: getTranslationsInitialState(lang),\n };\n }, [lang]);\n\n const isUsingDefaultFont =\n defaultState.quranReaderStyles.quranFont === quranFont &&\n defaultState.quranReaderStyles.mushafLines === mushafLines;\n\n const areTranslationsEqual = useMemo(() => {\n if (!translationParams && !selectedTranslations) {\n return false;\n }\n\n const translations = mergeTwoArraysUniquely(\n translationParams ?? [],\n selectedTranslations ?? [],\n );\n\n return areArraysEqual(defaultState.translations.selectedTranslations, translations);\n }, [translationParams, selectedTranslations, defaultState.translations.selectedTranslations]);\n\n const isUsingDefaultSettings =\n isUsingDefaultFont && isUsingDefaultReciter && isUsingDefaultWordByWordLocale;\n\n if (translationParams || selectedTranslations) {\n return isUsingDefaultSettings && isUsingDefaultTranslations && areTranslationsEqual;\n }\n\n return isUsingDefaultSettings;\n};\n\nexport default useIsUsingDefaultSettings;\n","import { RefObject, useEffect } from 'react';\n\n/**\n * This is a hook that is mean to be used in combination with {@see useGlobalIntersectionObserver}\n * that will use the global observer that had been created by the above hook to observe an element.\n *\n * @param {RefObject<Element>} elementRef the ref of the object that will be observed.\n * @param {string} observerId the name of the global observer that the element wants to use.\n */\nconst useObserveElement = (elementRef: RefObject<Element>, observerId: string) => {\n useEffect(() => {\n const node = elementRef?.current; // DOM Ref\n const hasIOSupport = !!window.IntersectionObserver;\n if (!hasIOSupport || !node) return undefined;\n\n // in-case useGlobalIntersectionObserver hasn't been used.\n if (window[observerId]) {\n window[observerId].observe(node);\n }\n return () => {\n if (window[observerId]) {\n window[observerId].unobserve(node);\n }\n };\n }, [elementRef, observerId]);\n};\n\nexport default useObserveElement;\n","import React, { useEffect } from 'react';\n\n/**\n * A hook that detects clicking outside an element.\n *\n * @param {React.RefObject<HTMLElement>} ref\n * @param {()=> void} onClickOutsideDetected\n * @param {boolean} enableDetection\n */\nconst useOutsideClickDetector = (\n ref: React.RefObject<HTMLElement>,\n onClickOutsideDetected: () => void,\n enableDetection: boolean,\n) => {\n useEffect(() => {\n const handleClickOutside = (event) => {\n // if we click on an element inside the document that is not an inclusive descendant of the ref node.\n if (ref.current && !ref.current.contains(event.target)) {\n onClickOutsideDetected();\n }\n };\n // no need to attach the listener if the parent component's visibility is controlled.\n if (enableDetection) {\n // Bind the event listener\n document.addEventListener('mousedown', handleClickOutside);\n }\n return () => {\n // Unbind the event listener on clean up\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [ref, onClickOutsideDetected, enableDetection]);\n};\n\nexport default useOutsideClickDetector;\n","import { useRef, RefObject } from 'react';\n\n/**\n * A hook that scrolls to a specific element in the DOM.\n * The scrolling will only happen when executeScroll function\n * is invoked.\n *\n * @param {ScrollIntoViewOptions} options\n * @returns {[() => void, RefObject<T>]}\n */\nexport const useScrollToElement = <T extends HTMLElement>(\n options?: ScrollIntoViewOptions,\n): [() => void, RefObject<T>] => {\n const elementRef = useRef<T>(null);\n // a function that will be invoked by the component using this hook to scroll to the element being referenced (if found).\n const executeScroll = (): void => {\n // only scroll when the ref has a value\n if (elementRef.current) {\n elementRef.current.scrollIntoView(options);\n }\n };\n\n return [executeScroll, elementRef];\n};\n\nexport const SMOOTH_SCROLL_TO_CENTER = {\n block: 'center', // 'block' relates to vertical alignment. see: https://stackoverflow.com/a/48635751/1931451 for nearest.\n behavior: 'smooth',\n} as ScrollIntoViewOptions;\n\nexport const SMOOTH_SCROLL_TO_TOP = {\n block: 'start',\n behavior: 'smooth',\n} as ScrollIntoViewOptions;\n\nexport const SCROLL_TO_NEAREST_ELEMENT = {\n block: 'nearest',\n} as ScrollIntoViewOptions;\n\nexport default useScrollToElement;\n","const BASE_OG_URL = 'https://og.qurancdn.com';\n\ninterface BaseOgOptions {\n locale: string;\n}\n\nexport const getDefaultOgImageUrl = ({ locale }: BaseOgOptions) =>\n `${BASE_OG_URL}/api/og?lang=${locale}`;\n\nexport const getAboutTheQuranImageUrl = ({ locale }: BaseOgOptions) =>\n `${BASE_OG_URL}/api/og/about-the-quran?lang=${locale}`;\n\nexport const getLearningPlansImageUrl = ({ locale }: BaseOgOptions) =>\n `${BASE_OG_URL}/api/og/learning-plans?lang=${locale}`;\n\nexport const getChapterOgImageUrl = ({\n chapterId,\n locale,\n verseNumber,\n}: BaseOgOptions & {\n chapterId: string | number;\n verseNumber?: string | number;\n}) => {\n const url = `${BASE_OG_URL}/api/og/chapter/${chapterId}?lang=${locale}`;\n\n if (!verseNumber) return url;\n return `${url}&verse=${verseNumber}`;\n};\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\n\nimport { RootState } from '@/redux/RootState';\n\nexport type Bookmarks = {\n bookmarkedVerses: Record<string, number>;\n};\n\nconst initialState: Bookmarks = {\n bookmarkedVerses: {},\n};\n\nexport const bookmarksSlice = createSlice({\n name: 'bookmarks',\n initialState,\n reducers: {\n toggleVerseBookmark: (state, action: PayloadAction<string>) => {\n const verseKey = action.payload;\n // if the verseKey exists, we should remove it.\n if (state.bookmarkedVerses[verseKey]) {\n const newBookmarkedVerses = { ...state.bookmarkedVerses };\n delete newBookmarkedVerses[verseKey];\n return {\n ...state,\n bookmarkedVerses: newBookmarkedVerses,\n };\n }\n return {\n ...state,\n // inserting the new pair at beginning of the object will make it sorted by the date verses were bookmarked\n // +new Date() gets the timestamp that we bookmarked the verse at.\n bookmarkedVerses: { [verseKey]: +new Date(), ...state.bookmarkedVerses },\n };\n },\n },\n});\n\nexport const { toggleVerseBookmark } = bookmarksSlice.actions;\n\nexport const selectBookmarks = (state: RootState) => state.bookmarks.bookmarkedVerses;\nexport const selectOrderedBookmarkedVerses = (state: RootState) =>\n // sort the bookmarked verses by the order they appear in the Mushaf.\n Object.fromEntries(Object.entries(state.bookmarks.bookmarkedVerses).sort());\n\nexport default bookmarksSlice.reducer;\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\n\nimport { RootState } from '@/redux/RootState';\nimport SliceName from '@/redux/types/SliceName';\n\nexport type ContextMenu = {\n isExpanded: boolean;\n showReadingPreferenceSwitcher: boolean;\n};\n\nconst initialState: ContextMenu = { isExpanded: true, showReadingPreferenceSwitcher: false };\n\nexport const contextMenuSlice = createSlice({\n name: SliceName.CONTEXT_MENU,\n initialState,\n reducers: {\n setIsExpanded: (state: ContextMenu, action: PayloadAction<boolean>) => ({\n ...state,\n isExpanded: action.payload,\n }),\n setShowReadingPreferenceSwitcher: (state: ContextMenu, action: PayloadAction<boolean>) => ({\n ...state,\n showReadingPreferenceSwitcher: action.payload,\n }),\n },\n});\n\nexport const { setIsExpanded, setShowReadingPreferenceSwitcher } = contextMenuSlice.actions;\n\nexport const selectContextMenu = (state: RootState) => state.contextMenu;\n\nexport default contextMenuSlice.reducer;\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\n\nimport { RootState } from '@/redux/RootState';\nimport SliceName from '@/redux/types/SliceName';\n\nexport type Notes = {\n isVisible: boolean;\n};\n\nconst initialState: Notes = { isVisible: false };\n\nexport const notesSlice = createSlice({\n name: SliceName.NOTES,\n initialState,\n reducers: {\n setIsVisible: (state: Notes, action: PayloadAction<boolean>) => ({\n ...state,\n isVisible: action.payload,\n }),\n },\n});\n\nexport const { setIsVisible } = notesSlice.actions;\n\nexport const selectNotes = (state: RootState) => state.notes;\n\nexport default notesSlice.reducer;\n","/* eslint-disable react-func/max-lines-per-function */\nimport { createSlice, PayloadAction } from '@reduxjs/toolkit';\n\nimport { RootState } from '@/redux/RootState';\nimport SliceName from '@/redux/types/SliceName';\nimport { getDistanceBetweenVerses } from '@/utils/verse';\nimport ChaptersData from 'types/ChaptersData';\n\ninterface LastReadVerse {\n verseKey: string;\n chapterId: string;\n page: string;\n hizb: string;\n}\n\nexport type RecentReadingSessions = Record<string, number>;\n\nexport type ReadingTracker = {\n lastReadVerse: LastReadVerse;\n recentReadingSessions: RecentReadingSessions;\n};\n\nconst initialState: ReadingTracker = {\n lastReadVerse: { verseKey: null, chapterId: null, page: null, hizb: null },\n recentReadingSessions: {},\n};\n\nconst NEW_SESSION_BOUNDARY = 20;\nconst MAXIMUM_NUMBER_OF_SESSIONS = 10;\n\nexport const readingTrackerSlice = createSlice({\n name: SliceName.READING_TRACKER,\n initialState,\n reducers: {\n setLastReadVerse: (\n state: ReadingTracker,\n action: PayloadAction<{\n lastReadVerse: LastReadVerse;\n chaptersData: ChaptersData;\n }>,\n ) => {\n const { lastReadVerse, chaptersData } = action.payload;\n let newRecentReadingSessions = { ...state.recentReadingSessions };\n // if the verse key already exists, and he re-visited it again, we need to mark it as the latest session.\n if (newRecentReadingSessions[lastReadVerse.verseKey]) {\n // delete the old entry\n delete newRecentReadingSessions[lastReadVerse.verseKey];\n // insert the same entry again but at the beginning\n newRecentReadingSessions = {\n [lastReadVerse.verseKey]: +new Date(),\n ...newRecentReadingSessions,\n };\n return generateNewState(state, lastReadVerse, newRecentReadingSessions);\n }\n const sessionsVerseKeys = Object.keys(newRecentReadingSessions);\n const numberOfSessions = sessionsVerseKeys.length;\n const [lastReadingSessionVerseKey] = sessionsVerseKeys;\n // if there are some last read sessions already and the new verse key is not far enough to be considered a new session\n if (\n numberOfSessions &&\n getDistanceBetweenVerses(\n chaptersData,\n lastReadingSessionVerseKey,\n lastReadVerse.verseKey,\n ) <= NEW_SESSION_BOUNDARY\n ) {\n delete newRecentReadingSessions[lastReadingSessionVerseKey];\n newRecentReadingSessions = {\n [lastReadVerse.verseKey]: +new Date(),\n ...newRecentReadingSessions,\n };\n return generateNewState(state, lastReadVerse, newRecentReadingSessions);\n }\n const earliestSession = sessionsVerseKeys[numberOfSessions - 1];\n // insert a new entry at the beginning\n newRecentReadingSessions = {\n [lastReadVerse.verseKey]: +new Date(),\n ...newRecentReadingSessions,\n };\n // if the number of sessions already exceeded the maximum, delete the latest session\n if (numberOfSessions + 1 > MAXIMUM_NUMBER_OF_SESSIONS) {\n delete newRecentReadingSessions[earliestSession];\n }\n return generateNewState(state, lastReadVerse, newRecentReadingSessions);\n },\n },\n});\n\n/**\n * Generate the new state.\n *\n * @param {ReadingTracker} state\n * @param {LastReadVerse} lastReadVerse\n * @param {Record<string, boolean>} newRecentReadingSessions\n * @returns {ReadingTracker}\n */\nconst generateNewState = (\n state: ReadingTracker,\n lastReadVerse: LastReadVerse,\n newRecentReadingSessions: Record<string, number>,\n): ReadingTracker => {\n return {\n ...state,\n lastReadVerse,\n recentReadingSessions: newRecentReadingSessions,\n };\n};\n\nexport const { setLastReadVerse } = readingTrackerSlice.actions;\n\nexport const selectLastReadVerseKey = (state: RootState) => state.readingTracker.lastReadVerse;\nexport const selectRecentReadingSessions = (state: RootState) =>\n state.readingTracker.recentReadingSessions;\nexport const selectedLastReadPage = (state: RootState) => state.readingTracker.lastReadVerse.page;\nexport const selectIsVerseKeySelected = (verseKey: string) => (state: RootState) => {\n const lastReadVerseKey = selectLastReadVerseKey(state);\n return verseKey === lastReadVerseKey.verseKey;\n};\n\nexport default readingTrackerSlice.reducer;\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\n\nimport { RootState } from '@/redux/RootState';\nimport SliceName from '@/redux/types/SliceName';\n\nexport type IsSidebarNavigationVisible = boolean | 'auto';\nexport type SidebarNavigation = {\n isVisible: IsSidebarNavigationVisible;\n selectedNavigationItem: string;\n};\n\nexport enum NavigationItem {\n Surah = 'surah',\n Juz = 'juz',\n Page = 'page',\n RubElHizb = 'rub_el_hizb',\n Hizb = 'hizb',\n}\n\nexport const initialSidebarIsVisible = 'auto'; // sidebar will be open on desktop and closed on mobile\nconst initialState: SidebarNavigation = {\n isVisible: initialSidebarIsVisible,\n selectedNavigationItem: NavigationItem.Surah,\n};\n\nexport const sidebarNavigationSlice = createSlice({\n name: SliceName.SIDEBAR_NAVIGATION,\n initialState,\n reducers: {\n setIsVisible: (state: SidebarNavigation, action: PayloadAction<boolean>) => ({\n ...state,\n isVisible: action.payload,\n }),\n selectNavigationItem: (state: SidebarNavigation, action: PayloadAction<NavigationItem>) => ({\n ...state,\n selectedNavigationItem: action.payload,\n }),\n },\n});\n\nexport const { setIsVisible, selectNavigationItem } = sidebarNavigationSlice.actions;\n\nexport const selectIsSidebarNavigationVisible = (state: RootState) =>\n state.sidebarNavigation.isVisible;\n\nexport const selectSelectedNavigationItem = (state: RootState) =>\n state.sidebarNavigation.selectedNavigationItem;\n\nexport default sidebarNavigationSlice.reducer;\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\n\nimport syncUserPreferences from '../actions/sync-user-preferences';\nimport { RootState } from '../RootState';\n\nimport SliceName from '@/redux/types/SliceName';\nimport PreferenceGroup from '@/types/auth/PreferenceGroup';\n\ntype RevelationOrderState = {\n isReadingByRevelationOrder: boolean;\n};\n\nexport const initialState: RevelationOrderState = {\n isReadingByRevelationOrder: false,\n};\n\nexport const revelationOrderSlice = createSlice({\n name: SliceName.REVELATION_ORDER,\n initialState,\n reducers: {\n setIsReadingByRevelationOrder: (state, action: PayloadAction<boolean>) => ({\n ...state,\n isReadingByRevelationOrder: action.payload,\n }),\n },\n extraReducers: (builder) => {\n builder.addCase(syncUserPreferences, (state, action) => {\n const {\n payload: { userPreferences },\n } = action;\n const remoteReadingPreferences = userPreferences[\n PreferenceGroup.READING\n ] as RevelationOrderState;\n // if there are any reading preferences stored in the DB.\n if (remoteReadingPreferences) {\n return {\n ...state,\n isReadingByRevelationOrder: !!remoteReadingPreferences.isReadingByRevelationOrder,\n };\n }\n return state;\n });\n },\n});\n\nexport const selectIsReadingByRevelationOrder = (state: RootState): boolean =>\n state.revelationOrder.isReadingByRevelationOrder;\n\nexport const { setIsReadingByRevelationOrder } = revelationOrderSlice.actions;\n\nexport default revelationOrderSlice.reducer;\n","import { getCurrentMonth, makeDateRangeFromMonth } from './datetime';\n\nimport { ActivityDayType, FilterActivityDaysParams } from '@/types/auth/ActivityDay';\n\nexport const getFilterActivityDaysParamsOfCurrentMonth = (): FilterActivityDaysParams => {\n const currentMonth = getCurrentMonth();\n const currentYear = new Date().getFullYear();\n\n return getFilterActivityDaysParams(currentMonth, currentYear);\n};\n\nexport const getFilterActivityDaysParams = (\n month: number,\n year: number,\n): FilterActivityDaysParams => {\n const { from, to } = makeDateRangeFromMonth(month, year);\n\n const params: FilterActivityDaysParams = {\n from,\n to,\n limit: 31,\n type: ActivityDayType.QURAN,\n };\n\n return params;\n};\n","import { toLocalizedNumber } from './locale';\n\n/**\n * Get the juz number by the hiz number. One hizb is half a Juz.\n *\n * @param {number} hizb\n * @returns {number}\n */\nexport const getJuzNumberByHizb = (hizb: number): number => Math.ceil(hizb / 2);\n\n/**\n * Whether the current juz is the first surah.\n *\n * @param {number} juzNumber\n * @returns {boolean}\n */\nexport const isFirstJuz = (juzNumber: number): boolean => juzNumber === 1;\n\n/**\n * Whether the current juz is the last surah.\n *\n * @param {number} juzNumber\n * @returns {boolean}\n */\nexport const isLastJuz = (juzNumber: number): boolean => juzNumber === 30;\n\nconst TOTAL_QURAN_JUZ = 30;\nexport const getJuzIds = (lang: string) => {\n return [...Array(TOTAL_QURAN_JUZ)].map((n, index) => {\n const juz = index + 1;\n return {\n value: juz,\n label: toLocalizedNumber(juz, lang),\n };\n });\n};\n","import { getVerseAndChapterNumbersFromKey } from '@/utils/verse';\n\n// given an array of verse keys, merge back to back verses into a single range like this:\n// ['1:1', '1:2', '1:3', '1:7'] will be ['1:1-1:3', '1:7-1:7']\nfunction mergeVerseKeys(\n verses: Set<string>,\n // chaptersData: ChaptersData\n) {\n const combinedVerses = new Set<string>();\n const verseMap: { [key: string]: number[] } = {};\n\n // Create a map of chapter to verse numbers\n verses.forEach((verseKey) => {\n const [chapter, verseNumber] = getVerseAndChapterNumbersFromKey(verseKey);\n if (!verseMap[chapter]) verseMap[chapter] = [];\n verseMap[chapter].push(Number(verseNumber));\n });\n\n // Merge the verse numbers for each chapter\n const entries = Object.entries(verseMap);\n for (let i = 0; i < entries.length; i += 1) {\n // eslint-disable-next-line prefer-const\n const [chapter, verseNumbers] = entries[i];\n verseNumbers.sort((a, b) => a - b);\n\n let start = verseNumbers[0];\n let end = start;\n\n for (let j = 1; j < verseNumbers.length; j += 1) {\n // merge back to back verses into a single range\n // OR\n // merge verses into a single range if they are not back to back but the distance is 1\n // e.g. 1:1, 1:2, 1:3, 1:5 will be merged into 1:1-1:5\n if (verseNumbers[j] - end > 0 && verseNumbers[j] - end <= 5) {\n end = verseNumbers[j];\n } else {\n combinedVerses.add(`${chapter}:${start}-${chapter}:${end}`);\n start = verseNumbers[j];\n end = start;\n }\n }\n combinedVerses.add(`${chapter}:${start}-${chapter}:${end}`);\n }\n\n return combinedVerses;\n}\n\nexport default mergeVerseKeys;\n","export const REVALIDATION_PERIOD_ON_ERROR_SECONDS = 604800; // 7 days. TODO: @osama update the naming + value when we revert this back\nexport const ONE_DAY_REVALIDATION_PERIOD_SECONDS = 86400; // 1 day\nexport const ONE_WEEK_REVALIDATION_PERIOD_SECONDS = 604800; // 7 days\nexport const ONE_MONTH_REVALIDATION_PERIOD_SECONDS = 2592000; // 30 days\n","/* eslint-disable import/prefer-default-export */\nimport { QuranFont } from 'types/QuranReader';\nimport Verse from 'types/Verse';\nimport { CharType } from 'types/Word';\n\n/**\n * Construct the verse text given an array of words.\n *\n * @param {Verse} verse\n * @returns {string}\n */\nexport const getVerseTextByWords = (verse: Verse): string => {\n let verseText = '';\n verse.words.forEach((word) => {\n if (word.charTypeName !== CharType.End) {\n verseText = `${verseText} ${word.text}`;\n }\n });\n return verseText;\n};\n\n/**\n * Get the text field name based on the currently\n * selected quranFont.\n *\n * @param {QuranFont} quranFont\n * @returns {string}\n */\nexport const getWordTextFieldNameByFont = (quranFont: QuranFont): string => {\n switch (quranFont) {\n case QuranFont.IndoPak:\n return 'textIndopak';\n\n default:\n return 'textUthmani';\n }\n};\n","enum BookmarkType {\n Page = 'page',\n Juz = 'juz',\n Surah = 'surah',\n Ayah = 'ayah',\n}\nexport default BookmarkType;\n","enum ScrollAlign {\n Start = 'start',\n Center = 'center',\n End = 'end',\n}\nexport default ScrollAlign;\n"],"names":["React","Head","DEFAULT_LOCALE","SURAH_NAMES_FONT","type","location","LOCALE_PRELOADED_FONTS","ar","bn","ur","INDOPAK","QURAN_READER_LOCALE_PRELOADED_FONTS","id","getToBePreLoadedFonts","locale","isQuranReader","FontPreLoader","toBePreLoadedFonts","map","fontDetails","link","rel","as","href","crossOrigin","useContext","useMemo","classNames","useTranslation","shallowEqual","useDispatch","useSelector","styles","ReadingPreferenceSwitcher","ReadingPreferenceSwitcherType","useOnboarding","SwitchSize","ChevronDownIcon","selectNavbar","selectContextMenu","selectNotes","selectLastReadVerseKey","selectIsSidebarNavigationVisible","setIsVisible","getChapterData","getChapterReadingProgress","logEvent","getJuzNumberByHizb","toLocalizedNumber","isMobile","getVerseNumberFromKey","DataContext","ContextMenu","dispatch","chaptersData","isSidebarNavigationVisible","t","lang","isSideBarVisible","isVisible","isExpanded","showReadingPreferenceSwitcher","isReadingPreferenceSwitcherVisible","isActive","isNavbarVisible","showNavbar","verseKey","chapterId","page","hizb","chapterData","juzNumber","Number","localizedHizb","localizedPageNumber","verse","progress","versesCount","div","className","container","visibleContainer","expandedContainer","withVisibleSideBar","style","sectionsContainer","section","halfSection","row","p","bold","alignStart","surahName","disabledOnMobile","onClick","e","stopPropagation","shouldBeVisible","transliteratedName","span","chevronIconContainer","rotate180","rotateAuto","size","XSmall","isIconsOnly","alignEnd","hide","secondaryInfo","primaryInfo","DebuggingObserverWindow","isReadingMode","process","env","NEXT_PUBLIC_DEBUG_OBSERVER_WINDOW","readingMode","Notes","br","button","payload","Spinner","Button","ButtonSize","ButtonType","ButtonVariant","useGetQueryParamOrXstateValue","PauseIcon","PlayIcon","QueryParam","logButtonClick","selectIsLoadingCurrentChapter","selectIsPlayingCurrentChapter","AudioPlayerMachineContext","PlayChapterAudioButton","toString","audioService","isLoadingCurrentChapter","state","isPlayingCurrentChapter","value","reciterId","isQueryParamDifferent","reciterQueryParamDifferent","Reciter","play","send","surah","undefined","pause","variant","Ghost","Success","Small","prefix","hasSidePadding","shouldFlipOnRTL","isDisabled","ariaLabel","useXstateSelector","useRouter","Trans","usePersistPreferenceGroup","selectWordByWordLocale","setSelectedWordByWordLocale","selectSelectedTranslations","setSelectedTranslations","PreferenceGroup","QuranReaderFlow","areArraysEqual","isValidTranslationsQueryParamValue","QueryParamMessage","translationsQueryParamDifferent","wordByWordLocaleQueryParamDifferent","router","selectedTranslations","selectedReciterId","context","selectedWordByWordLocale","actions","onSettingsChange","onXstateSettingsChange","onResetToReduxStateClicked","query","Translations","join","String","WBW_LOCALE","FLOW","QURANIC_CALENDER","HIDE_ARABIC","push","shallow","onPersistQueryParamsClicked","nextTranslations","split","stringValue","translations","TRANSLATIONS","nextWordByWord","READING","nextReciterId","AUDIO","i18nKey","components","dynamic","useSyncReadingProgress","TranslationView","ReadingView","QuranReaderView","isReadingPreference","quranReaderStyles","quranReaderDataType","initialData","resourceId","BookIcon","ReaderIcon","ReadingPreference","readingPreferenceIcons","Reading","Translation","LoadingSwitcher","readingPreference","selectedReadingPreference","isLoading","spinner","preferenceTextContainer","iconContainer","iconsCenter","Switch","selectReadingPreferences","setReadingPreference","logValueChange","SurahHeader","readingPreferences","lastReadVerseKey","lastReadVerse","readingPreferencesOptions","name","onViewSwitched","view","newQueryParams","startingVerse","parseInt","newUrlObject","pathname","replace","then","surahHeaderContainer","contextMenuContainer","items","selected","onSelect","setIsReadingByRevelationOrder","RevelationOrderNavigationNoticeView","SideDrawer","EndOfScrollingControls","RevelationOrderNavigationNotice","revertToDefaultOrdering","sideDrawerViewContainer","endOfScrollingViewContainer","aria-hidden","useRef","SidebarNavigationSelections","ButtonShape","KeyboardInput","useOutsideClickDetector","IconClose","selectNavigationItem","selectSelectedNavigationItem","NavigationItem","selectIsReadingByRevelationOrder","SidebarNavigation","isContextMenuExpanded","selectedNavigationItem","isReadingByRevelationOrder","sidebarRef","navigationItems","Surah","Juz","Page","ref","containerAuto","spaceOnTop","header","switchContainer","tooltip","shape","Circle","tip","meta","keyboardKey","contentContainer","revelationOrderHeader","Skeleton","ROWS_COUNT","rowsArr","Array","fill","SidebarSelectionSkeleton","skeletonContainer","k","i","isSquared","PageSelection","loading","SurahSelection","JuzSelection","useSWRConfig","ToastStatus","useToast","BookmarkedIcon","selectBookmarks","toggleVerseBookmark","selectQuranReaderStyles","getMushafId","deleteBookmarkById","makeBookmarkUrl","isLoggedIn","BookmarkType","BookmarkIcon","pageBookmarks","bookmarksRangeUrl","bookmarkedVerses","cache","mutate","toast","isVerseBookmarked","isUserLoggedIn","mushafId","quranFont","mushafLines","mushaf","bookmarkedVersesRange","get","nextBookmarkedVersesRange","revalidate","delete","Ayah","verseNumber","bookmarkId","catch","err","status","Error","verseAction","memo","useEffect","useSelectorXstate","verseFontChanged","verseTranslationChanged","verseTranslationFontChanged","TranslationText","QuranReflectButton","TafsirButton","VerseNotes","OverflowVerseActionsMenu","PlayVerseAudioButton","VerseLink","VerseText","Separator","useScroll","SMOOTH_SCROLL_TO_TOP","selectEnableAutoScrolling","getVerseWords","makeVerseKey","TranslationViewCell","verseIndex","hasNotes","isHighlighted","ayahNumber","enableAutoScrolling","scrollToSelectedItem","selectedItemRef","cellContainer","highlightedContainer","actionContainer","actionContainerLeft","actionItem","isTranslationView","priorityAction","actionContainerRight","arabicVerseContainer","words","shouldShowH1ForSEO","verseTranslationsContainer","translation","verseTranslationContainer","translationFontScale","text","languageId","resourceName","length","areVersesEqual","prevProps","nextProps","JSON","stringify","useSWRImmutable","useVerseTrackerContext","ChapterHeader","useCountRangeNotes","getPageBookmarks","TranslationPageVerse","verseIdx","firstVerseInPage","isLastVerseInView","notesRange","containerRef","verseKeysQueue","data","response","pagination","perPage","notesCount","getTranslationNameString","translationName","othersCount","observer","current","IntersectionObserver","entries","isIntersecting","add","root","rootMargin","threshold","observe","disconnect","pageNumber","hizbNumber","isTranslationSelected","getTranslationViewRequestKey","verseFetcher","useIsUsingDefaultSettings","QuranReaderDataType","makeBookmarksRangeUrl","getPageNumberFromIndexAndPerPage","useDedupedFetchVerse","wordByWordLocale","setApiPageToVersesMap","translationParams","idxInPage","isUsingDefaultSettings","shouldUseInitialData","verses","isVerseData","Verse","reciter","fallbackData","prevMushafPageToVersesMap","from","to","TranslationViewCellSkeleton","TranslationViewVerse","totalVerses","useFetchPagesLookup","selectIsUsingDefaultFont","generateVerseKeysBetweenTwoVerseKeys","useGetVersesCount","isUsingDefaultFont","lookupRange","useCallback","useState","isValidVerseId","ScrollAlign","useScrollToVirtualizedTranslationView","virtuosoRef","apiPageToVersesMap","versesPerPage","shouldReadjustScroll","setShouldReadjustScroll","timeoutId","shouldTrackObservedVerses","startingVerseNumber","isValidStartingVerse","scrollToBeginningOfVerseCell","scrollToIndex","index","align","Start","offset","Chapter","isFirstVerseInPage","isBeforeDoneLoading","isDoneLoading","clearTimeout","setTimeout","Virtuoso","onCopyQuranWords","useScrollToVirtualizedVerse","useGetQueryParamOrReduxValue","useQcfFont","ssr","INCREASE_VIEWPORT_BY_PIXELS","Object","values","flat","itemContentRenderer","lastVerse","shouldShowQueryParamMessage","wrapper","onCopy","event","useWindowScroll","totalCount","increaseViewportBy","initialItemCount","itemContent","getDefaultWordFields","makeHizbVersesUrl","makeJuzVersesUrl","makePageVersesUrl","makeVersesUrl","makeRubVersesUrl","makeByRangeVersesUrl","fetcher","commonParams","wordTranslationLanguage","Hizb","Rub","metaData","ChapterVerseRanges","Ranges","pagesLookup","getReaderViewRequestKey","pageVersesRange","filterPageWords","getPagesLookupParams","params","resourceIdNumber","chapterNumber","rubElHizbNumber","input","init","res","createContext","VerseTrackerContext","VerseTrackerContextProvider","children","Set","Provider","makePagesLookupUrl","error","isValidating","revalidateOnMount","pagesCount","totalPage","pagesVersesRange","pages","hasError","debounce","getObservedVersePayload","getOptions","QURAN_READER_OBSERVER_ID","useGlobalIntersectionObserver","setLastReadVerse","selectQuranFont","selectQuranMushafLines","ActivityDayType","getFilterActivityDaysParamsOfCurrentMonth","addReadingSession","updateActivityDay","makeFilterActivityDaysUrl","makeReadingSessionsUrl","makeStreakUrl","mergeVerseKeys","getVerseAndChapterNumbersFromKey","READING_DAY_SYNC_TIME_MS","READING_SESSION_DEBOUNCE_WAIT_TIME","elapsedReadingTimeInSeconds","addReadingSessionAndClearCache","debouncedAddReadingSession","updateReadingDayAndClearCache","body","currentMonthHistoryUrl","onElementVisible","element","interval","setInterval","verseRanges","clear","seconds","QURAN","ranges","clearInterval","handleFocus","handleBlur","window","addEventListener","removeEventListener","selectReadingPreference","QuranReader","withSidebarNavigationOpenOrAuto","infiniteScroll","readingView","clipboardCopy","DATA_ATTRIBUTE_WORD_LOCATION","getWordDataByLocation","getWordTextFieldNameByFont","selection","document","getSelection","quranWordsToCopy","querySelectorAll","filter","node","containsNode","wordLocation","getAttribute","extractText","preventDefault","chapter","selectedVerse","find","v","selectedWord","word","position","prevVerse","nextVerse","prevQuranStyles","nextQuranStyles","prevWords","nextWords","languageName","internalStyles","NoteModal","Wrapper","Badge","NewLabel","EmptyNotesIcon","NotesIcon","ConsentType","getUserProfile","makeUserProfileUrl","getChapterWithStartingVerseUrl","getLoginNavigationUrl","VerseNotesTrigger","IconButton","PopoverItem","isModalOpen","setIsModalOpen","userData","onItemClicked","onClose","shouldShowNewLabel","consents","HAS_NOTES","isOpen","fadedVerseAction","Primary","icon","shouldWrap","newLabelContainer","contentClassName","newLabel","content","toLocalizedVerseKey","verseLink","shouldShallowRoute","shouldPrefetch","isCenterAlignedPage","useIsFontLoaded","QuranWord","useIntersectionObserver","selectInlineDisplayWordByWordPreferences","selectReadingViewSelectedVerseKey","selectReadingViewHoveredVerseKey","getFontClassName","getFirstWordOfSurah","FALLBACK_FONT","QuranFont","textRef","quranTextFontScale","firstWord","lineNumber","isFontLoaded","showWordByWordTranslation","showWordByWordTransliteration","selectedVerseKey","hoveredVerseKey","centerAlignPage","firstWordData","isTajweedFont","Tajweed","isBigTextLayout","VerseTextContainer","fontClassName","data-verse-key","data-page","data-chapter-id","data-hizb","verseTextContainer","largeQuranTextLayoutContainer","highlighted","tafsirOrTranslationMode","translate","verseText","verseTextWrap","largeQuranTextLayout","verseTextCenterAlign","verseTextSpaceBetween","font","shouldShowSecondaryHighlight","CENTER_ALIGNED_PAGES","CENTER_ALIGNED_PAGE_LINES","IndoPak","centerAlignedLines","includes","ChapterIconContainer","ChapterIconsSize","Bismillah","InfoIcon","setIsSettingsDrawerOpen","setSettingsView","SettingsView","getSurahInfoNavigationUrl","CHAPTERS_WITHOUT_BISMILLAH","headerRef","onChangeTranslationClicked","chapterIconContainer","Mega","bismillahContainer","left","infoContainer","translationBy","onKeyPress","tabIndex","role","changeTranslation","right","ChapterIcon","padStart","Medium","Large","IconContainer","hasSurahPrefix","iconContainerSmall","iconContainerLarge","iconContainerMega","positionBottomRight","label","BismillahSVG","shift","alt","ctrl","invertColors","isMacOs","navigator","userAgent","search","kbd","invertedColors","countNotesWithinRange","useBrowserLayoutEffect","observerId","updateEntry","entry","forEach","visibleEntry","target","hasIOSupport","getQuranReaderStylesInitialState","getTranslationsInitialState","selectIsUsingDefaultWordByWordLocale","selectIsUsingDefaultTranslations","mergeTwoArraysUniquely","selectIsUsingDefaultReciter","isUsingDefaultReciter","isUsingDefaultWordByWordLocale","isUsingDefaultTranslations","defaultState","areTranslationsEqual","useObserveElement","elementRef","unobserve","onClickOutsideDetected","enableDetection","handleClickOutside","contains","useScrollToElement","options","executeScroll","scrollIntoView","SMOOTH_SCROLL_TO_CENTER","block","behavior","SCROLL_TO_NEAREST_ELEMENT","BASE_OG_URL","getDefaultOgImageUrl","getAboutTheQuranImageUrl","getLearningPlansImageUrl","getChapterOgImageUrl","url","createSlice","initialState","bookmarksSlice","reducers","action","newBookmarkedVerses","Date","bookmarks","selectOrderedBookmarkedVerses","fromEntries","sort","reducer","SliceName","contextMenuSlice","CONTEXT_MENU","setIsExpanded","setShowReadingPreferenceSwitcher","contextMenu","notesSlice","NOTES","notes","getDistanceBetweenVerses","recentReadingSessions","NEW_SESSION_BOUNDARY","MAXIMUM_NUMBER_OF_SESSIONS","readingTrackerSlice","READING_TRACKER","newRecentReadingSessions","generateNewState","sessionsVerseKeys","keys","numberOfSessions","lastReadingSessionVerseKey","earliestSession","readingTracker","selectRecentReadingSessions","selectedLastReadPage","selectIsVerseKeySelected","RubElHizb","initialSidebarIsVisible","sidebarNavigationSlice","SIDEBAR_NAVIGATION","sidebarNavigation","syncUserPreferences","revelationOrderSlice","REVELATION_ORDER","extraReducers","builder","addCase","userPreferences","remoteReadingPreferences","revelationOrder","getCurrentMonth","makeDateRangeFromMonth","currentMonth","currentYear","getFullYear","getFilterActivityDaysParams","month","year","limit","Math","ceil","isFirstJuz","isLastJuz","TOTAL_QURAN_JUZ","getJuzIds","n","juz","combinedVerses","verseMap","verseNumbers","a","b","start","end","j","REVALIDATION_PERIOD_ON_ERROR_SECONDS","ONE_DAY_REVALIDATION_PERIOD_SECONDS","ONE_WEEK_REVALIDATION_PERIOD_SECONDS","ONE_MONTH_REVALIDATION_PERIOD_SECONDS","CharType","getVerseTextByWords","charTypeName","End","Center"],"sourceRoot":""}
|