{"version":3,"file":"static/chunks/pages/notes-and-reflections-5e5a24f5144d7f77.js","mappings":"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","sources":["webpack://_N_E/./public/icons/chat.svg","webpack://_N_E/./public/icons/collection.svg","webpack://_N_E/./public/icons/developers.svg","webpack://_N_E/./public/icons/love.svg","webpack://_N_E/./public/icons/plus.svg","webpack://_N_E/?11ad","webpack://_N_E/./src/components/Auth/RedirectToLoginPage.tsx","webpack://_N_E/./src/components/Auth/withAuth.tsx","webpack://_N_E/./src/utils/quranReflect/bodyParser.ts","webpack://_N_E/./src/components/QuranReflect/hooks/useReflectionBodyParser.ts","webpack://_N_E/./src/components/Verse/VerseAndTranslation.tsx","webpack://_N_E/./src/components/dls/ContentModal/ContentModal.tsx","webpack://_N_E/./src/components/dls/Popover/HoverablePopover/index.tsx","webpack://_N_E/./src/components/dls/Popover/index.tsx","webpack://_N_E/./src/hooks/useAddQueryParamsToUrl.ts","webpack://_N_E/./types/NotesSortOptions.ts","webpack://_N_E/./src/components/Notes/NotesPage/Tabs/MyPrivateNotesTab/NotesList/NotesListItem/index.tsx","webpack://_N_E/./src/components/Notes/NotesPage/Tabs/MyPrivateNotesTab/NotesList/index.tsx","webpack://_N_E/./src/components/Notes/NotesPage/Tabs/MyPrivateNotesTab/NotesSorter/NotesSorter.tsx","webpack://_N_E/./src/components/Notes/NotesPage/Tabs/index.tsx","webpack://_N_E/./src/components/Notes/NotesPage/Tabs/MyPrivateNotesTab/index.tsx","webpack://_N_E/./src/components/Notes/NotesPage/Tabs/MyPublicReflectionsTab/UserPublicReflectionsList/ReflectionsTabIntroduction/index.tsx","webpack://_N_E/./src/components/QuranReflect/ReflectionModal/ReflectionSocialInteractions/index.tsx","webpack://_N_E/./src/components/QuranReflect/ReflectionReferenceIndicator/index.tsx","webpack://_N_E/./src/components/Notes/NotesPage/Tabs/MyPublicReflectionsTab/UserPublicReflectionsList/UserPublicReflectionsListItem/index.tsx","webpack://_N_E/./src/components/QuranReflect/ReflectionReferences/index.tsx","webpack://_N_E/./src/components/QuranReflect/ReflectionModal/index.tsx","webpack://_N_E/./src/components/Notes/NotesPage/Tabs/MyPublicReflectionsTab/UserPublicReflectionsList/index.tsx","webpack://_N_E/./src/components/Notes/NotesPage/Tabs/MyPublicReflectionsTab/index.tsx","webpack://_N_E/./src/components/Notes/NotesPage/Tabs/TabSwitcherItem/index.tsx","webpack://_N_E/./src/pages/notes-and-reflections/index.tsx","webpack://_N_E/./src/utils/auth/qf/apiPaths.ts","webpack://_N_E/./src/utils/html-truncate.ts","webpack://_N_E/./src/components/Notes/NotesPage/Tabs/MyPrivateNotesTab/MyPrivateNotesTab.module.scss","webpack://_N_E/./src/components/Notes/NotesPage/Tabs/MyPrivateNotesTab/NotesList/NotesList.module.scss","webpack://_N_E/./src/components/Notes/NotesPage/Tabs/MyPrivateNotesTab/NotesList/NotesListItem/NotesListItem.module.scss","webpack://_N_E/./src/components/Notes/NotesPage/Tabs/MyPrivateNotesTab/NotesSorter/NotesSorter.module.scss","webpack://_N_E/./src/components/Notes/NotesPage/Tabs/MyPublicReflectionsTab/MyPublicReflectionsTab.module.scss","webpack://_N_E/./src/components/Notes/NotesPage/Tabs/MyPublicReflectionsTab/UserPublicReflectionsList/ReflectionsTabIntroduction/ReflectionsTabIntroduction.module.scss","webpack://_N_E/./src/components/Notes/NotesPage/Tabs/MyPublicReflectionsTab/UserPublicReflectionsList/UserPublicReflectionsList.module.scss","webpack://_N_E/./src/components/Notes/NotesPage/Tabs/MyPublicReflectionsTab/UserPublicReflectionsList/UserPublicReflectionsListItem/UserPublicReflectionsListItem.module.scss","webpack://_N_E/./src/components/Notes/NotesPage/Tabs/TabSwitcherItem/TabSwitcherItem.module.scss","webpack://_N_E/./src/components/Notes/NotesPage/Tabs/Tabs.module.scss","webpack://_N_E/./src/components/QuranReflect/ReflectionModal/ReflectionModal.module.scss","webpack://_N_E/./src/components/QuranReflect/ReflectionModal/ReflectionSocialInteractions/ReflectionSocialInteractions.module.scss","webpack://_N_E/./src/components/QuranReflect/ReflectionReferences/ReflectionReferences.module.scss","webpack://_N_E/./src/components/Verse/VerseAndTranslation.module.scss","webpack://_N_E/./src/components/dls/ContentModal/ContentModal.module.scss","webpack://_N_E/./src/components/dls/Popover/Popover.module.scss"],"sourcesContent":["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 SvgChat = function SvgChat(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: \"M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.379 8.379 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5Z\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })));\n};\nexport default SvgChat;","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 SvgCollection = function SvgCollection(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: \"M20.89 0H3.454C2.581 0 2 .581 2 1.453v20.344c0 .872.581 1.453 1.453 1.453h17.438c.872 0 1.453-.581 1.453-1.453V1.453C22.344.581 21.762 0 20.89 0ZM6.36 18.89c-.873 0-1.454-.58-1.454-1.453 0-.871.582-1.453 1.453-1.453.872 0 1.454.582 1.454 1.454 0 .871-.582 1.453-1.454 1.453Zm0-5.812c-.873 0-1.454-.581-1.454-1.453 0-.872.582-1.453 1.453-1.453.872 0 1.454.581 1.454 1.453 0 .872-.582 1.453-1.454 1.453Zm0-5.812c-.873 0-1.454-.582-1.454-1.454 0-.871.582-1.453 1.453-1.453.872 0 1.454.582 1.454 1.454 0 .871-.582 1.453-1.454 1.453Zm13.078 2.906h-8.72v-4.36h8.72v4.36Z\",\n fill: \"currentColor\"\n })));\n};\nexport default SvgCollection;","var _g, _defs;\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 SvgDevelopers = function SvgDevelopers(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), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n clipPath: \"url(#a)\",\n fill: \"currentColor\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M4.844 1H.969A.97.97 0 0 0 0 1.969v19.375a.97.97 0 0 0 .969.968h3.875V1ZM6.781 1v21.313h15.5a.97.97 0 0 0 .969-.97V1.97A.97.97 0 0 0 22.281 1h-15.5Zm3.875 3.875h2.906v1.938h-2.906V4.875Zm2.906 13.563h-2.906V16.5h2.906v1.938Zm2.907-3.875h-3.875v-1.938h3.875v1.938Zm2.906-3.876h-5.813V8.75h5.813v1.938Z\"\n }))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n id: \"a\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"currentColor\",\n d: \"M0 0h23.25v23.25H0z\"\n })))));\n};\nexport default SvgDevelopers;","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 SvgLove = function SvgLove(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-heart\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z\"\n })));\n};\nexport default SvgLove;","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 SvgPlus = function SvgPlus(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: \"M8 2.75a.5.5 0 0 0-1 0V7H2.75a.5.5 0 0 0 0 1H7v4.25a.5.5 0 0 0 1 0V8h4.25a.5.5 0 0 0 0-1H8V2.75Z\",\n fill: \"currentColor\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\"\n })));\n};\nexport default SvgPlus;","\n (window.__NEXT_P = window.__NEXT_P || []).push([\n \"/notes-and-reflections\",\n function () {\n return require(\"private-next-pages/notes-and-reflections/index.tsx\");\n }\n ]);\n if(module.hot) {\n module.hot.dispose(function () {\n window.__NEXT_P.push([\"/notes-and-reflections\"])\n });\n }\n ","import React, { useEffect } from 'react';\n\nimport { useRouter } from 'next/router';\n\nimport { getLoginNavigationUrl } from '@/utils/navigation';\n\nconst RedirectToLoginPage = () => {\n const router = useRouter();\n useEffect(() => {\n const { asPath } = router;\n router.replace(getLoginNavigationUrl(asPath));\n }, [router]);\n\n return <>;\n};\n\nexport default RedirectToLoginPage;\n","import { JSX, useEffect, useState } from 'react';\n\nimport RedirectToLoginPage from './RedirectToLoginPage';\n\nimport { isLoggedIn } from '@/utils/auth/login';\n/**\n * withAuth is a Higher-Order Component (HOC) that wraps a component and checks if the user is authenticated.\n * If the user is authenticated, it renders the wrapped component.\n * If the user is not authenticated, it redirects the user to the login page.\n *\n * @param {React.ComponentType} WrappedComponent - The component to wrap and protect with authentication check.\n *\n * @returns {React.ComponentType} If the user is authenticated, returns the WrappedComponent.\n * If not, returns RedirectToLoginPage component.\n *\n * @example\n * const ProtectedComponent = withAuth(MyComponent);\n */\nconst withAuth = (WrappedComponent: React.ComponentType): React.ComponentType => {\n const WithAuth = (props: JSX.IntrinsicAttributes) => {\n const [isReady, setIsReady] = useState(false);\n\n /**\n * we need to wait for the initial render to check if the user is authenticated\n * because when it's server-side rendered, the user is not authenticated yet\n */\n useEffect(() => {\n setIsReady(true);\n }, []);\n\n if (!isReady) {\n return null; // or return a loading spinner\n }\n\n return isLoggedIn() ? : ;\n };\n\n return WithAuth;\n};\n\nexport default withAuth;\n","/* eslint-disable @typescript-eslint/naming-convention */\n/* eslint-disable import/prefer-default-export */\nimport { getQuranReflectTagUrl } from './navigation';\n\n/**\n * Wraps hashtags in links: It finds all hashtags starting with # followed\n * by one or more word characters (\\w+). The captured hashtag is then\n * used to create a link.\n *\n * @param {string} tag\n * @param {string} hashtagStyle\n * @returns {string}\n */\nconst tagToLink = (tag: string, hashtagStyle: string): string => {\n const tagWithHashTag = `#${tag}`;\n return `${tagWithHashTag}`;\n};\n\n/**\n * Replaces URLs in a given text with HTML anchor tags.\n *\n * @param {string} text - The input text containing URLs.\n * @returns {string} The text with URLs replaced by anchor tags.\n */\nconst replaceUrlsWithLinks = (text: string): string => {\n const regex = /(\\b(https?|ftp|file):\\/\\/[-A-Z0-9+&@#/%?=~_|!:,.;]*[-A-Z0-9+&@#/%=~_|])/gi;\n return text.replace(regex, (url) => {\n // Check if URL is already linked\n const surroundingLength = 100; // Number of characters around the URL to check for tag\n const index = text.indexOf(url);\n\n const beforeText = text.slice(Math.max(0, index - surroundingLength), index);\n const afterText = text.slice(index + url.length, index + url.length + surroundingLength);\n\n if (beforeText.includes('')) {\n // URL is already inside an anchor tag, return as is\n return url;\n }\n\n // Convert URL to a link\n return `${url}`;\n });\n};\n\nexport const parseReflectionBody = (reflectionBody: string, hashtagStyle: string): string => {\n return (\n // 1. Wraps URLs in links: Find all URLs starting with http or https. The captured URL is then used to create a link.\n replaceUrlsWithLinks(reflectionBody)\n // 2. Replaces new lines: match all occurrences of new lines (\\n) and carriage returns (\\r) and replaces them with the
tag.\n .replace(/\\r?\\n/g, '
')\n // 3. Wraps hashtags in links: Find all hashtags starting with # followed by one or more word characters (\\w+). The captured hashtag is then used to create a link.\n .replace(/#(\\w+)/g, (_, tag) => tagToLink(tag, hashtagStyle))\n );\n};\n","import { useMemo } from 'react';\n\nimport { parseReflectionBody } from '@/utils/quranReflect/bodyParser';\n\n/**\n * A hook to parse the reflection body and replace the hashtags with links.\n *\n * TODO: make all usages of this hook DRY.\n *\n * @param {string} reflectionText\n * @param {string} hashtagStyle\n * @returns {string}\n */\nconst useReflectionBodyParser = (reflectionText: string, hashtagStyle: string): string => {\n const parsedBody = useMemo(\n () => parseReflectionBody(reflectionText, hashtagStyle),\n [hashtagStyle, reflectionText],\n );\n\n return parsedBody;\n};\n\nexport default useReflectionBodyParser;\n","import useTranslation from 'next-translate/useTranslation';\nimport { shallowEqual, useSelector } from 'react-redux';\nimport useSWR from 'swr/immutable';\n\nimport Spinner from '../dls/Spinner/Spinner';\nimport TranslationText from '../QuranReader/TranslationView/TranslationText';\n\nimport PlainVerseText from './PlainVerseText';\nimport styles from './VerseAndTranslation.module.scss';\n\nimport Error from '@/components/Error';\nimport useQcfFont from '@/hooks/useQcfFont';\nimport { selectQuranReaderStyles } from '@/redux/slices/QuranReader/styles';\nimport { selectSelectedTranslations } from '@/redux/slices/QuranReader/translations';\nimport { getDefaultWordFields, getMushafId } from '@/utils/api';\nimport { makeVersesUrl } from '@/utils/apiPaths';\nimport { areArraysEqual } from '@/utils/array';\nimport { getVerseWords } from '@/utils/verse';\nimport { fetcher } from 'src/api';\nimport { VersesResponse } from 'types/ApiResponses';\n\n/**\n * Given a verse range\n * - Fetch the verse + translations data\n * - and return it\n *\n * The use case of this component is mainly for Verse and Translation that needs to be fetched on client\n * dynamically (not SSR). For example, for the reflection's feature verse reference\n *\n */\ninterface Props {\n chapter: number;\n from: number;\n to: number;\n}\n\nconst VerseAndTranslation: React.FC = ({ chapter, from, to }) => {\n const { lang } = useTranslation();\n const translations = useSelector(selectSelectedTranslations, areArraysEqual);\n const { quranFont, mushafLines, translationFontScale } = useSelector(\n selectQuranReaderStyles,\n shallowEqual,\n );\n\n const mushafId = getMushafId(quranFont, mushafLines).mushaf;\n const apiParams = {\n ...getDefaultWordFields(quranFont),\n translationFields: 'resource_name,language_id',\n translations: translations.join(','),\n mushaf: mushafId,\n from: `${chapter}:${from}`,\n to: `${chapter}:${to}`,\n };\n\n const shouldFetchData = !!from;\n\n const { data, error, mutate } = useSWR(\n shouldFetchData ? makeVersesUrl(chapter, lang, apiParams) : null,\n fetcher,\n );\n\n useQcfFont(quranFont, data?.verses ? data.verses : []);\n\n if (error) return ;\n\n if (!data) return ;\n\n return (\n
\n {data?.verses.map((verse) => (\n
\n
\n \n
\n
\n {verse.translations?.map((translation) => (\n
\n \n
\n ))}\n
\n
\n ))}\n
\n );\n};\n\nexport default VerseAndTranslation;\n","import { useRef, useImperativeHandle, ForwardedRef } from 'react';\n\nimport * as Dialog from '@radix-ui/react-dialog';\nimport classNames from 'classnames';\nimport { useRouter } from 'next/router';\n\nimport Button, { ButtonShape, ButtonVariant } from '../Button/Button';\n\nimport styles from './ContentModal.module.scss';\n\nimport ContentModalHandles from '@/dls/ContentModal/types/ContentModalHandles';\nimport CloseIcon from '@/icons/close.svg';\nimport { isRTLLocale } from '@/utils/locale';\n\nexport enum ContentModalSize {\n SMALL = 'small',\n MEDIUM = 'medium',\n}\n\ntype ContentModalProps = {\n isOpen?: boolean;\n onClose?: () => void;\n onEscapeKeyDown?: () => void;\n children: React.ReactNode;\n hasCloseButton?: boolean;\n hasHeader?: boolean;\n header?: React.ReactNode;\n innerRef?: ForwardedRef;\n // using innerRef instead of using function forwardRef so we can dynamically load this component https://github.com/vercel/next.js/issues/4957#issuecomment-413841689\n contentClassName?: string;\n size?: ContentModalSize;\n isFixedHeight?: boolean;\n};\n\nconst SCROLLBAR_WIDTH = 15;\n\nconst ContentModal = ({\n isOpen,\n onClose,\n onEscapeKeyDown,\n hasCloseButton,\n children,\n header,\n innerRef,\n contentClassName,\n size = ContentModalSize.MEDIUM,\n isFixedHeight,\n hasHeader = true,\n}: ContentModalProps) => {\n const overlayRef = useRef();\n const { locale } = useRouter();\n\n useImperativeHandle(innerRef, () => ({\n scrollToTop: () => {\n if (overlayRef.current) overlayRef.current.scrollTop = 0;\n },\n }));\n\n /**\n * We need to manually check what the user is targeting. If it lies at the\n * area where the scroll bar is (assuming the scrollbar width is equivalent\n * to SCROLLBAR_WIDTH), then we don't close the Modal, otherwise we do.\n * We also need to check if the current locale is RTL or LTR because the side\n * where the scrollbar is will be different and therefor the value of\n * {e.detail.originalEvent.offsetX} will be different.\n *\n * inspired by {@see https://github.com/radix-ui/primitives/issues/1280#issuecomment-1198248523}\n *\n * @param {any} e\n */\n const onPointerDownOutside = (e: any) => {\n const currentTarget = e.currentTarget as HTMLElement;\n\n const shouldPreventOnClose = isRTLLocale(locale)\n ? e.detail.originalEvent.offsetX < SCROLLBAR_WIDTH // left side of the screen clicked\n : e.detail.originalEvent.offsetX > currentTarget.clientWidth - SCROLLBAR_WIDTH; // right side of the screen clicked\n\n if (shouldPreventOnClose) {\n e.preventDefault();\n return;\n }\n if (onClose) {\n onClose();\n }\n };\n\n return (\n \n \n \n \n {hasHeader && (\n
\n {hasCloseButton && (\n \n \n \n \n \n )}\n {header}\n
\n )}\n\n
{children}
\n \n
\n
\n
\n );\n};\nexport default ContentModal;\n","import React, { ReactNode } from 'react';\n\nimport Popover, { ContentSide } from '@/dls/Popover';\nimport Tooltip from '@/dls/Tooltip';\n\ninterface Props {\n content: ReactNode;\n children: ReactNode | ReactNode[];\n contentSide?: ContentSide;\n tip?: boolean;\n tooltipDelay?: number;\n onOpenChange?: (open: boolean) => void;\n defaultStyling?: boolean;\n isOpen?: boolean;\n triggerStyles?: string;\n isContainerSpan?: boolean;\n}\n\n/**\n * A component that combines the functionality of a Popover and a Tooltip together.\n * This is needed to handle the case when we want to show a Tooltip on mobile but\n * since Tooltip is only hoverable and there is no hovering on mobile devices,\n * we provide the same functionality by using a Popover which handles clicking.\n *\n * @param {Props} props\n * @returns {JSX.Element}\n */\nconst HoverablePopover: React.FC = ({\n content,\n children,\n onOpenChange,\n contentSide = ContentSide.TOP,\n tip = true,\n tooltipDelay = 0,\n defaultStyling = true,\n isOpen,\n triggerStyles,\n isContainerSpan = false,\n}: Props): JSX.Element => (\n \n {children}\n \n }\n tip={tip}\n >\n {content}\n \n);\n\nexport default HoverablePopover;\n","import React, { ReactNode } from 'react';\n\nimport * as RadixPopover from '@radix-ui/react-popover';\nimport classNames from 'classnames';\n\nimport styles from './Popover.module.scss';\n\nexport enum ContentSide {\n TOP = 'top',\n RIGHT = 'right',\n BOTTOM = 'bottom',\n LEFT = 'left',\n}\n\nexport enum ContentAlign {\n START = 'start',\n CENTER = 'center',\n END = 'end',\n}\n\ninterface Props {\n trigger: ReactNode;\n children: ReactNode | ReactNode[];\n onOpenChange?: (open: boolean) => void;\n open?: boolean;\n isModal?: boolean;\n contentSide?: ContentSide;\n contentAlign?: ContentAlign;\n tip?: boolean;\n avoidCollisions?: boolean;\n useTooltipStyles?: boolean;\n defaultStyling?: boolean;\n isPortalled?: boolean;\n triggerStyles?: string;\n contentStyles?: string;\n contentSideOffset?: number;\n isContainerSpan?: boolean;\n}\n\nconst Popover: React.FC = ({\n children,\n trigger,\n onOpenChange,\n open,\n isModal = false,\n contentSide = ContentSide.BOTTOM,\n contentAlign = ContentAlign.CENTER,\n avoidCollisions = true,\n tip = false,\n useTooltipStyles = false,\n defaultStyling = true,\n isPortalled = true,\n contentSideOffset = 2,\n triggerStyles,\n contentStyles,\n isContainerSpan = false,\n}) => {\n const content = (\n \n {children}\n {tip && }\n \n );\n\n const containerChild = (\n \n \n \n {trigger}\n \n \n {isPortalled ? {content} : content}\n \n );\n\n if (isContainerSpan) {\n return (\n {containerChild}\n );\n }\n\n return
{containerChild}
;\n};\n\nexport default Popover;\n","import { useEffect } from 'react';\n\n/**\n * A hook that appends query parameters to the url. We could've used shallow routing for Next.js\n * but it causes re-rendering to the whole app @see https://github.com/vercel/next.js/discussions/18072\n *\n * @param {string} relativeUrl the relative url e.g. '/search' for the search page.\n * @param {Record} params a map of each parameter and its value that we will listen to and in the event of changing any of them, we will re-generate the url.\n */\nconst useAddQueryParamsToUrl = (relativeUrl: string, params: Record) => {\n useEffect(() => {\n if (typeof window !== 'undefined') {\n let url = relativeUrl;\n let isFirstParameter = true;\n Object.keys(params).forEach((parameter) => {\n const parameterValue = params[parameter];\n // if the value of the parameter exists\n if (parameterValue) {\n url = `${url}${isFirstParameter ? '?' : '&'}${parameter}=${parameterValue}`;\n isFirstParameter = false;\n }\n });\n window.history.replaceState({ ...window.history.state, as: url, url }, '', url);\n }\n }, [relativeUrl, params]);\n};\n\nexport default useAddQueryParamsToUrl;\n","enum NotesSortOption {\n Newest = 'newest',\n Oldest = 'oldest',\n}\n\nexport default NotesSortOption;\n","import React from 'react';\n\nimport useTranslation from 'next-translate/useTranslation';\n\nimport styles from './NotesListItem.module.scss';\n\nimport NoteRangesIndicator from '@/components/Notes/NoteModal/NoteRangesIndicator';\nimport { Note } from '@/types/auth/Note';\nimport { dateToReadableFormat } from '@/utils/datetime';\nimport { logButtonClick } from '@/utils/eventLogger';\nimport { truncateString } from '@/utils/string';\n\ninterface NotesListItemProps {\n note: Note;\n setSelectedNoteId: (noteId: string) => void;\n}\n\nconst MAX_BODY_SIZE = 250;\n\nconst NotesListItem: React.FC = ({ note, setSelectedNoteId }) => {\n const { lang, t } = useTranslation('notes');\n\n const onNoteClicked = (noteId: string) => {\n logButtonClick('note_list_item', {\n noteId,\n });\n setSelectedNoteId(noteId);\n };\n\n return (\n onNoteClicked(note.id)}\n onKeyDown={() => onNoteClicked(note.id)}\n >\n \n

\n {truncateString(note.body, MAX_BODY_SIZE, '...')}\n {note.body.length > MAX_BODY_SIZE && (\n {` ${t('click-to-see-more')}`}\n )}\n

\n \n \n );\n};\n\nexport default NotesListItem;\n","import { useMemo, useState } from 'react';\n\nimport useTranslation from 'next-translate/useTranslation';\nimport { Virtuoso } from 'react-virtuoso';\n\nimport styles from './NotesList.module.scss';\nimport NotesListItem from './NotesListItem';\n\nimport NoteModal from '@/components/Notes/NoteModal';\nimport Spinner, { SpinnerSize } from '@/dls/Spinner/Spinner';\nimport { GetAllNotesResponse } from '@/types/auth/Note';\n\ninterface NotesListProps {\n data: GetAllNotesResponse[];\n isValidating: boolean;\n size: number;\n setSize: (size: number) => void;\n mutateCache: (data: any) => void;\n}\n\nconst NotesList = ({ data, isValidating, size, setSize, mutateCache }: NotesListProps) => {\n const { t } = useTranslation();\n const [selectedNoteId, setSelectedNoteId] = useState(null); // for the note modal\n\n const lastPageData = data[data.length - 1];\n const { hasNextPage } = lastPageData.pagination;\n\n const notes = useMemo(() => {\n return data ? data.map((response) => response.data).flat() : [];\n }, [data]);\n\n const isLoading = !data && isValidating;\n const isLoadingMoreData = notes?.length > 0 && size > 1 && isValidating;\n const isEmpty = !isLoading && notes.length === 0;\n\n const loadMore = () => {\n if (!hasNextPage || isValidating) return;\n setSize(size + 1);\n };\n\n const renderNote = (index: number, note: (typeof notes)[number]) => {\n return ;\n };\n\n const onNoteDeleted = () => {\n const noteId = selectedNoteId;\n // remove the note from the cache\n mutateCache((cachedPages: GetAllNotesResponse[]) => {\n const newPages = cachedPages;\n\n for (let i = 0; i < newPages.length; i += 1) {\n const page = newPages[i];\n const newData = page.data.filter((note) => note.id !== noteId);\n\n if (newData.length !== page.data.length) {\n newPages[i] = {\n ...page,\n data: newData,\n };\n break;\n }\n }\n\n return newPages;\n });\n };\n\n const onNoteUpdated = (updatedNote) => {\n const noteId = selectedNoteId;\n\n // update the note in the cache\n mutateCache((cachedPages: GetAllNotesResponse[]) => {\n const newPages = cachedPages;\n\n for (let i = 0; i < newPages.length; i += 1) {\n const page = newPages[i];\n const noteIdx = page.data.findIndex((note) => note.id === noteId);\n\n if (noteIdx !== -1) {\n const newData = [...page.data];\n newData[noteIdx] = updatedNote;\n\n newPages[i] = {\n ...page,\n data: newData,\n };\n break;\n }\n }\n\n return newPages;\n });\n };\n\n let content = null;\n if (isLoadingMoreData || isLoading) {\n content = ;\n } else if (isEmpty) {\n content = (\n
\n {t('notes:empty-notes')}\n
\n );\n }\n\n return (\n <>\n {selectedNoteId && (\n setSelectedNoteId(null)}\n noteId={selectedNoteId}\n onNoteDeleted={onNoteDeleted}\n onNoteUpdated={onNoteUpdated}\n />\n )}\n\n \n\n {content}\n \n );\n};\n\nexport default NotesList;\n","import styles from './NotesSorter.module.scss';\n\nimport PopoverMenu from '@/dls/PopoverMenu/PopoverMenu';\nimport ChevronDownIcon from '@/icons/chevron-down.svg';\nimport { logEvent } from '@/utils/eventLogger';\n\nconst NotesSorter = ({ options, selectedOptionId, onChange }) => {\n const selectedOption = options.find((option) => option.id === selectedOptionId);\n\n const onOpenChange = (isOpen: boolean) => {\n if (isOpen) {\n logEvent('notes_sorter_opened');\n } else {\n logEvent('notes_sorter_closed');\n }\n };\n\n return (\n
\n \n {selectedOption.label}\n \n \n \n \n }\n onOpenChange={onOpenChange}\n >\n {options.map((option) => (\n onChange(option.id)}\n >\n {option.label}\n \n ))}\n \n
\n );\n};\n\nexport default NotesSorter;\n","import React, { useEffect, useMemo, useState } from 'react';\n\nimport { useRouter } from 'next/router';\nimport useTranslation from 'next-translate/useTranslation';\n\nimport styles from './Tabs.module.scss';\n\nimport PrivateNotesTab from '@/components/Notes/NotesPage/Tabs/MyPrivateNotesTab';\nimport PublicReflectionsTab from '@/components/Notes/NotesPage/Tabs/MyPublicReflectionsTab';\nimport TabSwitcherItem from '@/components/Notes/NotesPage/Tabs/TabSwitcherItem';\nimport Switch from '@/dls/Switch/Switch';\nimport useAddQueryParamsToUrl from '@/hooks/useAddQueryParamsToUrl';\nimport DetailsIcon from '@/icons/collection.svg';\nimport SyllabusIcon from '@/icons/developers.svg';\nimport { logEvent } from '@/utils/eventLogger';\nimport { getNotesNavigationUrl } from '@/utils/navigation';\n\nenum Tab {\n PRIVATE_NOTES = 'notes',\n PUBLIC_REFLECTIONS = 'reflections',\n}\n\nconst NotesTabs = () => {\n const { t } = useTranslation('notes');\n const router = useRouter();\n const [selectedTab, setSelectedTab] = useState(Tab.PRIVATE_NOTES);\n\n const queryParams = useMemo(\n () => ({\n tab: selectedTab,\n }),\n [selectedTab],\n );\n useAddQueryParamsToUrl(getNotesNavigationUrl(), queryParams);\n\n // listen to the query param to update the selected tab\n useEffect(() => {\n const queryTab = router.query.tab as Tab;\n // validate the query param is a valid tab value\n if (queryTab && Object.values(Tab).includes(queryTab)) {\n setSelectedTab(queryTab);\n }\n }, [router.query.tab]);\n\n const onTabChange = (value: Tab) => {\n logEvent('notes_page_tab_change', { value });\n setSelectedTab(value);\n };\n\n const tabs = useMemo(\n () => [\n {\n name: } value={t('private-notes')} />,\n value: Tab.PRIVATE_NOTES,\n },\n {\n name: } value={t('posted-reflections')} />,\n value: Tab.PUBLIC_REFLECTIONS,\n },\n ],\n [t],\n );\n\n const tabComponents = useMemo(\n () => ({\n [Tab.PRIVATE_NOTES]: ,\n [Tab.PUBLIC_REFLECTIONS]: ,\n }),\n [],\n );\n\n if (!router.isReady) {\n return <>;\n }\n\n return (\n
\n
\n
\n

{t('common:notes.title')}

\n
\n
\n \n {tabComponents[selectedTab]}\n
\n );\n};\n\nexport default NotesTabs;\n","import { useState } from 'react';\n\nimport classNames from 'classnames';\nimport useTranslation from 'next-translate/useTranslation';\nimport useSWRInfinite from 'swr/infinite';\n\nimport styles from './MyPrivateNotesTab.module.scss';\n\nimport NotesList from '@/components/Notes/NotesPage/Tabs/MyPrivateNotesTab/NotesList';\nimport NotesSorter from '@/components/Notes/NotesPage/Tabs/MyPrivateNotesTab/NotesSorter/NotesSorter';\nimport Spinner, { SpinnerSize } from '@/dls/Spinner/Spinner';\nimport Error from '@/pages/_error';\nimport { GetAllNotesResponse } from '@/types/auth/Note';\nimport NotesSortOption from '@/types/NotesSortOptions';\nimport { privateFetcher } from '@/utils/auth/api';\nimport { makeNotesUrl } from '@/utils/auth/apiPaths';\nimport { isLoggedIn } from '@/utils/auth/login';\nimport { logValueChange } from '@/utils/eventLogger';\n\nconst PrivateNotes = () => {\n const [sortBy, setSortBy] = useState(NotesSortOption.Newest);\n\n const { t } = useTranslation();\n\n const sortOptions = [\n { id: NotesSortOption.Newest, label: t('common:newest') },\n { id: NotesSortOption.Oldest, label: t('common:oldest') },\n ];\n\n const onSortByChange = (newSortByVal) => {\n logValueChange('notes_page_sort_by', sortBy, newSortByVal);\n setSortBy(newSortByVal);\n };\n\n /**\n * Get the SWR key for cursor based pagination\n * - when the page index is still 0 (first fetch). get the bookmarkByCollection url without `cursor` param\n * - on the next fetch, add `cursor` to the parameters\n *\n * corner case\n * - when previous fetch contains empty data, stop fetching\n * - when the user is logged out, don't fetch the data\n *\n * Reference: https://swr.vercel.app/docs/pagination#useswrinfinite\n *\n * @returns {string} swr key\n */\n const getKey = (pageIndex: number, previousPageData: GetAllNotesResponse) => {\n if (!isLoggedIn() || (previousPageData && !previousPageData.data)) return null;\n if (pageIndex === 0) {\n return makeNotesUrl({\n sortBy,\n limit: 10,\n });\n }\n\n const { endCursor, hasNextPage } = previousPageData.pagination;\n\n if (!endCursor || !hasNextPage) return null;\n\n return makeNotesUrl({\n sortBy,\n cursor: endCursor,\n limit: 10,\n });\n };\n\n const { data, size, setSize, isValidating, error, mutate } = useSWRInfinite(\n getKey,\n (key) => {\n // append key to the response\n return privateFetcher(key).then((response) => {\n return {\n ...(response as any),\n key,\n };\n });\n },\n {\n revalidateOnFocus: false,\n revalidateFirstPage: false,\n revalidateOnMount: true,\n },\n );\n\n if (error) {\n return ;\n }\n\n if (!data) {\n return (\n
\n \n
\n );\n }\n\n return (\n <>\n
\n
\n

{`${t('common:sort.by')}: `}

\n \n
\n
\n \n \n );\n};\n\nexport default PrivateNotes;\n","import React from 'react';\n\nimport Trans from 'next-translate/Trans';\nimport useTranslation from 'next-translate/useTranslation';\n\nimport styles from './ReflectionsTabIntroduction.module.scss';\n\nimport Link, { LinkVariant } from '@/dls/Link/Link';\n\nconst ReflectionsTabIntroduction = () => {\n const { t } = useTranslation('notes');\n\n return (\n
\n
{t('reflections-intro.title')}
\n
    \n
  • \n ,\n link: (\n \n ),\n }}\n i18nKey=\"notes:reflections-intro.line-1\"\n />\n
  • \n
  • {t('reflections-intro.line-2')}
  • \n
  • {t('reflections-intro.line-3')}
  • \n
\n
\n );\n};\n\nexport default ReflectionsTabIntroduction;\n","import React from 'react';\n\nimport useTranslation from 'next-translate/useTranslation';\n\nimport styles from './ReflectionSocialInteractions.module.scss';\n\nimport Button, { ButtonSize, ButtonVariant } from '@/dls/Button/Button';\nimport ChatIcon from '@/icons/chat.svg';\nimport LoveIcon from '@/icons/love.svg';\nimport AyahReflection from '@/types/QuranReflect/AyahReflection';\nimport { logButtonClick } from '@/utils/eventLogger';\nimport { toLocalizedNumber } from '@/utils/locale';\nimport { getQuranReflectPostUrl } from '@/utils/quranReflect/navigation';\n\ntype Props = {\n reflection: AyahReflection;\n};\n\nconst ReflectionSocialInteractions: React.FC = ({ reflection }) => {\n const { lang, t } = useTranslation('notes');\n\n const onLikesCountClicked = (e) => {\n e.stopPropagation();\n logButtonClick('reflection_likes', {\n postId: reflection.id,\n });\n };\n\n const onCommentsCountClicked = (e) => {\n e.stopPropagation();\n logButtonClick('reflection_comments', {\n postId: reflection.id,\n });\n };\n\n const onViewOnQrClicked = (e) => {\n e.stopPropagation();\n logButtonClick('posted_ref_view_on_qr', {\n postId: reflection.id,\n });\n };\n\n return (\n
\n
\n }\n size={ButtonSize.Small}\n onClick={onLikesCountClicked}\n shouldFlipOnRTL={false}\n >\n {toLocalizedNumber(reflection.likes, lang)}\n \n }\n href={getQuranReflectPostUrl(reflection.id, true)}\n isNewTab\n size={ButtonSize.Small}\n onClick={onCommentsCountClicked}\n shouldFlipOnRTL={false}\n >\n {toLocalizedNumber(reflection.commentsCount, lang)}\n \n
\n \n {t('notes:view-on-qr')}\n \n
\n );\n};\n\nexport default ReflectionSocialInteractions;\n","import React, { useContext } from 'react';\n\nimport useTranslation from 'next-translate/useTranslation';\n\nimport styles from '@/components/Notes/NoteModal/NoteRangesIndicator/NoteRangesIndicator.module.scss';\nimport DataContext from '@/contexts/DataContext';\nimport ReflectionReference from '@/types/QuranReflect/ReflectionReference';\nimport { getChapterData } from '@/utils/chapter';\nimport { toLocalizedVerseKey } from '@/utils/locale';\n\ntype Props = {\n reference: ReflectionReference;\n};\n\nconst ReflectionReferenceIndicator: React.FC = ({ reference }) => {\n const { lang, t } = useTranslation('common');\n const chaptersData = useContext(DataContext);\n if (!reference) {\n return <>;\n }\n\n const { surahId, fromAyah, toAyah, isSurah } = reference;\n const chapterData = getChapterData(chaptersData, surahId.toString());\n let referenceKey = `${t('surah')} ${chapterData.transliteratedName}`;\n // if it's not a full surah\n if (!isSurah) {\n const localizedStartVerseKey = `${referenceKey} ${toLocalizedVerseKey(\n surahId.toString(),\n lang,\n )}:${toLocalizedVerseKey(fromAyah.toString(), lang)}`;\n if (fromAyah === toAyah) {\n // e.g. 11:1\n referenceKey = localizedStartVerseKey;\n } else {\n // e.g. 11:1-6\n referenceKey = `${localizedStartVerseKey}-${toLocalizedVerseKey(toAyah.toString(), lang)}`;\n }\n }\n return
{referenceKey}
;\n};\n\nexport default ReflectionReferenceIndicator;\n","import React from 'react';\n\nimport useTranslation from 'next-translate/useTranslation';\n\nimport styles from './UserPublicReflectionsListItem.module.scss';\n\nimport useReflectionBodyParser from '@/components/QuranReflect/hooks/useReflectionBodyParser';\nimport ReflectionSocialInteractions from '@/components/QuranReflect/ReflectionModal/ReflectionSocialInteractions';\nimport ReflectionReferenceIndicator from '@/components/QuranReflect/ReflectionReferenceIndicator';\nimport AyahReflection from '@/types/QuranReflect/AyahReflection';\nimport { dateToReadableFormat } from '@/utils/datetime';\nimport { logButtonClick } from '@/utils/eventLogger';\nimport truncate from '@/utils/html-truncate';\n\ninterface UserPublicReflectionsListItemProps {\n reflection: AyahReflection;\n setSelectedReflection: (reflection: AyahReflection) => void;\n}\n\nconst MAX_BODY_SIZE = 250;\n\nconst UserPublicReflectionsListItem: React.FC = ({\n reflection,\n setSelectedReflection,\n}) => {\n const { lang, t } = useTranslation('notes');\n const formattedText = useReflectionBodyParser(reflection.body, styles.hashtag);\n\n const onReflectionClicked = (selectedReflection: AyahReflection) => {\n logButtonClick('public_reflection_list_item', {\n postId: selectedReflection.id,\n });\n setSelectedReflection(selectedReflection);\n };\n\n return (\n onReflectionClicked(reflection)}\n onKeyDown={() => onReflectionClicked(reflection)}\n >\n {reflection.references && (\n
\n {reflection.references.map((reference) => {\n return ;\n })}\n
\n )}\n

\n \n {reflection.body.length > MAX_BODY_SIZE && (\n {` ${t('click-to-see-more')}`}\n )}\n

\n \n \n \n );\n};\n\nexport default UserPublicReflectionsListItem;\n","import React from 'react';\n\nimport styles from './ReflectionReferences.module.scss';\n\nimport ReflectionReferenceIndicator from '@/components/QuranReflect/ReflectionReferenceIndicator';\nimport VerseAndTranslation from '@/components/Verse/VerseAndTranslation';\nimport Link from '@/dls/Link/Link';\nimport ChevronDownIcon from '@/icons/chevron-down.svg';\nimport ReflectionReferenceType from '@/types/QuranReflect/ReflectionReference';\nimport { logButtonClick, logEvent } from '@/utils/eventLogger';\nimport Collapsible from 'src/components/dls/Collapsible/Collapsible';\n\ntype Props = {\n references: ReflectionReferenceType[];\n};\n\n/**\n * A component that will be used to display the ranges of a reflection.\n * And also a ranges selector in the future.\n *\n * @param {React.FC} param\n * @returns {React.ReactElement}\n */\nconst ReflectionReferences: React.FC = ({ references }: Props) => {\n const onOpenChange = (isCollapseOpen: boolean) => {\n if (isCollapseOpen) {\n logEvent('reflection_reference_collapse_opened');\n } else {\n logEvent('reflection_reference_collapse_closed');\n }\n };\n\n const onNoteSurahReferenceClicked = () => {\n logButtonClick('reflection_surah_reference');\n };\n\n return (\n <>\n {references.map((reference) => {\n const { surahId, fromAyah, toAyah, isSurah } = reference;\n if (isSurah) {\n return (\n \n
\n \n
\n \n );\n }\n return (\n \n \n \n }\n prefix={}\n shouldRotatePrefixOnToggle\n onOpenChange={onOpenChange}\n >\n {({ isOpen: isOpenRenderProp }) => {\n if (!isOpenRenderProp) return null;\n return ;\n }}\n \n );\n })}\n \n );\n};\n\nexport default ReflectionReferences;\n","import { useRef } from 'react';\n\nimport useTranslation from 'next-translate/useTranslation';\n\nimport styles from './ReflectionModal.module.scss';\n\nimport useReflectionBodyParser from '@/components/QuranReflect/hooks/useReflectionBodyParser';\nimport ReflectionReferences from '@/components/QuranReflect/ReflectionReferences';\nimport ContentModal, { ContentModalSize } from '@/dls/ContentModal/ContentModal';\nimport ContentModalHandles from '@/dls/ContentModal/types/ContentModalHandles';\nimport AyahReflection from '@/types/QuranReflect/AyahReflection';\nimport { dateToReadableFormat } from '@/utils/datetime';\n\ninterface ReflectionModalProps {\n isOpen: boolean;\n onClose: () => void;\n reflection: AyahReflection;\n}\n\nconst ReflectionModal: React.FC = ({ onClose, isOpen, reflection }) => {\n const contentModalRef = useRef();\n const formattedText = useReflectionBodyParser(reflection.body, styles.hashtag);\n const { lang } = useTranslation();\n\n return (\n }\n hasCloseButton\n onClose={onClose}\n onEscapeKeyDown={onClose}\n size={ContentModalSize.MEDIUM}\n >\n {reflection.references && }\n
\n \n
\n \n \n );\n};\n\nexport default ReflectionModal;\n","import { useMemo, useState } from 'react';\n\nimport useTranslation from 'next-translate/useTranslation';\nimport { Virtuoso } from 'react-virtuoso';\n\nimport ReflectionsTabIntroduction from './ReflectionsTabIntroduction';\nimport styles from './UserPublicReflectionsList.module.scss';\nimport UserPublicReflectionsListItem from './UserPublicReflectionsListItem';\n\nimport ReflectionModal from '@/components/QuranReflect/ReflectionModal';\nimport Spinner, { SpinnerSize } from '@/dls/Spinner/Spinner';\nimport GetUserReflectionsResponse from '@/types/auth/GetUserReflectionsResponse';\nimport AyahReflection from '@/types/QuranReflect/AyahReflection';\n\ninterface UserPublicReflectionsListProps {\n data: GetUserReflectionsResponse[];\n isValidating: boolean;\n size: number;\n setSize: (size: number) => void;\n}\n\nconst UserPublicReflectionsList = ({\n data,\n isValidating,\n size,\n setSize,\n}: UserPublicReflectionsListProps) => {\n const { t } = useTranslation('notes');\n const [selectedReflection, setSelectedReflection] = useState(null); // for the note modal\n\n const lastPageData = data[data.length - 1];\n const { hasNextPage } = lastPageData.pagination;\n\n const reflections = useMemo(() => {\n return data ? data.map((response) => response.data).flat() : [];\n }, [data]);\n\n const isLoading = !data && isValidating;\n const isLoadingMoreData = reflections?.length > 0 && size > 1 && isValidating;\n const isEmpty = !isLoading && reflections.length === 0;\n\n const loadMore = () => {\n if (!hasNextPage || isValidating) return;\n setSize(size + 1);\n };\n\n const renderReflection = (index: number, reflection: (typeof reflections)[number]) => {\n return (\n \n );\n };\n\n let content = null;\n if (isLoadingMoreData || isLoading) {\n content = ;\n } else if (isEmpty) {\n content = (\n
\n {t('empty-reflections')}\n
\n );\n }\n\n return (\n <>\n {selectedReflection && (\n setSelectedReflection(null)}\n reflection={selectedReflection}\n />\n )}\n\n \n \n\n {content}\n \n );\n};\n\nexport default UserPublicReflectionsList;\n","import classNames from 'classnames';\nimport useSWRInfinite from 'swr/infinite';\n\nimport styles from './MyPublicReflectionsTab.module.scss';\n\nimport UserPublicReflectionsList from '@/components/Notes/NotesPage/Tabs/MyPublicReflectionsTab/UserPublicReflectionsList';\nimport Spinner, { SpinnerSize } from '@/dls/Spinner/Spinner';\nimport Error from '@/pages/_error';\nimport GetUserReflectionsResponse from '@/types/auth/GetUserReflectionsResponse';\nimport { privateFetcher } from '@/utils/auth/api';\nimport { isLoggedIn } from '@/utils/auth/login';\nimport { makeGetUserReflectionsUrl } from '@/utils/auth/qf/apiPaths';\n\nconst PublicReflections = () => {\n /**\n * Get the SWR key for cursor based pagination\n * - when the page index is still 0 (first fetch). get the bookmarkByCollection url without `cursor` param\n * - on the next fetch, add `cursor` to the parameters\n *\n * corner case\n * - when previous fetch contains empty data, stop fetching\n * - when the user is logged out, don't fetch the data\n *\n * Reference: https://swr.vercel.app/docs/pagination#useswrinfinite\n *\n * @returns {string} swr key\n */\n const getKey = (pageIndex: number, previousPageData: GetUserReflectionsResponse) => {\n if (!isLoggedIn() || (previousPageData && !previousPageData.data)) return null;\n const page = pageIndex + 1;\n if (pageIndex === 0) {\n return makeGetUserReflectionsUrl({\n page,\n });\n }\n\n const { hasNextPage } = previousPageData.pagination;\n\n if (!hasNextPage) return null;\n\n return makeGetUserReflectionsUrl({\n page,\n });\n };\n\n const { data, size, setSize, isValidating, error } = useSWRInfinite(\n getKey,\n (key) => {\n // append key to the response\n return privateFetcher(key).then((response) => {\n return {\n ...(response as any),\n key,\n };\n });\n },\n {\n revalidateOnFocus: false,\n revalidateFirstPage: false,\n revalidateOnMount: true,\n },\n );\n\n if (error) {\n return ;\n }\n\n if (!data) {\n return (\n
\n \n
\n );\n }\n\n return (\n \n );\n};\n\nexport default PublicReflections;\n","import React from 'react';\n\nimport styles from './TabSwitcherItem.module.scss';\n\ntype Props = {\n icon: JSX.Element;\n value: string;\n};\n\n// TODO: move this to a standalone component called Tabs\nconst TabSwitcherItem: React.FC = ({ icon, value }) => {\n return (\n
\n {icon}

{value}

\n
\n );\n};\n\nexport default TabSwitcherItem;\n","/* eslint-disable max-lines */\n\nimport { GetStaticProps } from 'next';\nimport useTranslation from 'next-translate/useTranslation';\n\nimport withAuth from '@/components/Auth/withAuth';\nimport NextSeoWrapper from '@/components/NextSeoWrapper';\nimport NotesTabs from '@/components/Notes/NotesPage/Tabs';\nimport layoutStyles from '@/pages/index.module.scss';\nimport { getAllChaptersData } from '@/utils/chapter';\nimport { getLanguageAlternates } from '@/utils/locale';\nimport { getCanonicalUrl, getNotesNavigationUrl } from '@/utils/navigation';\n\nconst NotesAndReflectionsPage = () => {\n const { t, lang } = useTranslation();\n const navigationUrl = getNotesNavigationUrl();\n\n return (\n <>\n \n
\n
\n
\n \n
\n
\n
\n \n );\n};\n\nexport const getStaticProps: GetStaticProps = async ({ locale }) => {\n const allChaptersData = await getAllChaptersData(locale);\n\n return {\n props: {\n chaptersData: allChaptersData,\n },\n };\n};\n\nexport default withAuth(NotesAndReflectionsPage);\n","import { makeUrl } from '@/utils/auth/apiPaths';\nimport GetAllUserReflectionsQueryParams from '@/utils/auth/types/GetAllUserReflectionsQueryParams';\n\nconst getPrefixedUrl = (url: string) => `qf/${url}`;\n\nexport const makePostReflectionViewsUrl = (postId: string) =>\n makeUrl(getPrefixedUrl(`posts/${postId}/views`));\n\nexport const makeFollowUserUrl = (userNameOrId: string) =>\n makeUrl(getPrefixedUrl(`users/${userNameOrId}/follow`));\n\nexport const makeIsUserFollowedUrl = (userNameOrId: string) =>\n makeUrl(getPrefixedUrl(`users/${userNameOrId}/is-followed`));\n\nexport const makeGetUserReflectionsUrl = (params?: GetAllUserReflectionsQueryParams) =>\n makeUrl(getPrefixedUrl('posts'), params as any);\n\nexport const makeQuranicCalendarPostOfWeekUrl = (weekNumber: number) =>\n makeUrl(getPrefixedUrl(`quranic-calendar/${weekNumber}`));\n","/* eslint-disable unicorn/no-abusive-eslint-disable */\n/* eslint-disable */\n// @ts-nocheck\n\n// Source: https://github.com/huang47/nodejs-html-truncate/blob/master/lib/truncate.js\n\nfunction truncate(string, maxLength, options?) {\n const EMPTY_OBJECT = {};\n const EMPTY_STRING = '';\n const DEFAULT_TRUNCATE_SYMBOL = '...';\n const DEFAULT_SLOP = maxLength < 10 ? maxLength : 10;\n const EXCLUDE_TAGS = ['img', 'br']; // non-closed tags\n const items = []; // stack for saving tags\n let total = 0; // record how many characters we traced so far\n let content = EMPTY_STRING; // truncated text storage\n const KEY_VALUE_REGEX = '([\\\\w|-]+\\\\s*=\\\\s*\"[^\"]*\"\\\\s*)*';\n const IS_CLOSE_REGEX = '\\\\s*\\\\/?\\\\s*';\n const CLOSE_REGEX = '\\\\s*\\\\/\\\\s*';\n const SELF_CLOSE_REGEX = new RegExp(`<\\\\/?\\\\w+\\\\s*${KEY_VALUE_REGEX}${CLOSE_REGEX}>`);\n const HTML_TAG_REGEX = new RegExp(`<\\\\/?\\\\w+\\\\s*${KEY_VALUE_REGEX}${IS_CLOSE_REGEX}>`);\n const URL_REGEX =\n /(((ftp|https?):\\/\\/)[\\-\\w@:%_\\+.~#?,&\\/\\/=]+)|((mailto:)?[_.\\w\\-]+@([\\w][\\w\\-]+\\.)+[a-zA-Z]{2,3})/g; // Simple regexp\n const IMAGE_TAG_REGEX = new RegExp(``);\n const WORD_BREAK_REGEX = new RegExp('\\\\W+', 'g');\n let matches = true;\n let result;\n let index;\n let tail;\n let tag;\n let selfClose;\n\n /**\n * Remove image tag\n *\n * @private\n * @function _removeImageTag\n * @param {string} string not-yet-processed string\n * @returns {string} string without image tags\n */\n function _removeImageTag(string) {\n const match = IMAGE_TAG_REGEX.exec(string);\n let index;\n let len;\n\n if (!match) {\n return string;\n }\n\n index = match.index;\n len = match[0].length;\n\n return string.substring(0, index) + string.substring(index + len);\n }\n\n /**\n * Dump all close tags and append to truncated content while reaching upperbound\n *\n * @private\n * @function _dumpCloseTag\n * @param {string[]} tags a list of tags which should be closed\n * @returns {string} well-formatted html\n */\n function _dumpCloseTag(tags) {\n let html = '';\n\n tags.reverse().forEach((tag, index) => {\n // dump non-excluded tags only\n if (EXCLUDE_TAGS.indexOf(tag) === -1) {\n html += ``;\n }\n });\n\n return html;\n }\n\n /**\n * Process tag string to get pure tag name\n *\n * @private\n * @function _getTag\n * @param {string} string original html\n * @returns {string} tag name\n */\n function _getTag(string) {\n let tail = string.indexOf(' ');\n\n // TODO:\n // we have to figure out how to handle non-well-formatted HTML case\n if (tail === -1) {\n tail = string.indexOf('>');\n if (tail === -1) {\n throw new Error(`HTML tag is not well-formed : ${string}`);\n }\n }\n\n return string.substring(1, tail);\n }\n\n /**\n * Get the end position for String#substring()\n *\n * If options.truncateLastWord is FALSE, we try to the end position up to\n * options.slop characters to avoid breaking in the middle of a word.\n *\n * @private\n * @function _getEndPosition\n * @param {string} string original html\n * @param {number} tailPos (optional) provided to avoid extending the slop into trailing HTML tag\n * @returns {number} maxLength\n */\n function _getEndPosition(string, tailPos) {\n const defaultPos = maxLength - total;\n let position = defaultPos;\n const isShort = defaultPos < options.slop;\n const slopPos = isShort ? defaultPos : options.slop - 1;\n let substr;\n const startSlice = isShort ? 0 : defaultPos - options.slop;\n const endSlice = tailPos || defaultPos + options.slop;\n let result;\n\n if (!options.truncateLastWord) {\n substr = string.slice(startSlice, endSlice);\n\n if (tailPos && substr.length <= tailPos) {\n position = substr.length;\n } else {\n while ((result = WORD_BREAK_REGEX.exec(substr)) !== null) {\n // a natural break position before the hard break position\n if (result.index < slopPos) {\n position = defaultPos - (slopPos - result.index);\n // keep seeking closer to the hard break position\n // unless a natural break is at position 0\n if (result.index === 0 && defaultPos <= 1) break;\n }\n // a natural break position exactly at the hard break position\n else if (result.index === slopPos) {\n position = defaultPos;\n break; // seek no more\n }\n // a natural break position after the hard break position\n else {\n position = defaultPos + (result.index - slopPos);\n break; // seek no more\n }\n }\n }\n if (string.charAt(position - 1).match(/\\s$/)) position--;\n }\n return position;\n }\n\n options = options || EMPTY_OBJECT;\n options.ellipsis = undefined !== options.ellipsis ? options.ellipsis : DEFAULT_TRUNCATE_SYMBOL;\n options.truncateLastWord =\n undefined !== options.truncateLastWord ? options.truncateLastWord : true;\n options.slop = undefined !== options.slop ? options.slop : DEFAULT_SLOP;\n\n while (matches) {\n matches = HTML_TAG_REGEX.exec(string);\n\n if (!matches) {\n if (total >= maxLength) {\n break;\n }\n\n matches = URL_REGEX.exec(string);\n if (!matches || matches.index >= maxLength) {\n content += string.substring(0, _getEndPosition(string));\n break;\n }\n\n while (matches) {\n result = matches[0];\n index = matches.index;\n content += string.substring(0, index + result.length - total);\n string = string.substring(index + result.length);\n matches = URL_REGEX.exec(string);\n }\n break;\n }\n\n result = matches[0];\n index = matches.index;\n\n if (total + index > maxLength) {\n // exceed given `maxLength`, dump everything to clear stack\n content += string.substring(0, _getEndPosition(string, index));\n break;\n } else {\n total += index;\n content += string.substring(0, index);\n }\n\n if (result[1] === '/') {\n // move out open tag\n items.pop();\n selfClose = null;\n } else {\n selfClose = SELF_CLOSE_REGEX.exec(result);\n if (!selfClose) {\n tag = _getTag(result);\n\n items.push(tag);\n }\n }\n\n if (selfClose) {\n content += selfClose[0];\n } else {\n content += result;\n }\n string = string.substring(index + result.length);\n }\n\n if (string.length > maxLength - total && options.ellipsis) {\n content += options.ellipsis;\n }\n content += _dumpCloseTag(items);\n\n if (!options.keepImageTag) {\n content = _removeImageTag(content);\n }\n\n return content;\n}\n\nexport default truncate;\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"loadingContainer\":\"MyPrivateNotesTab_loadingContainer__d6rhd\",\"sorterContainer\":\"MyPrivateNotesTab_sorterContainer__pYPAf\",\"sorterInnerContainer\":\"MyPrivateNotesTab_sorterInnerContainer__xPtII\",\"text\":\"MyPrivateNotesTab_text__UcT7z\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"notesListContainer\":\"NotesList_notesListContainer__HOvUN\",\"emptyNotesContainer\":\"NotesList_emptyNotesContainer__AVvkg\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"note\":\"NotesListItem_note__yXqiP\",\"noteDate\":\"NotesListItem_noteDate__Rc6YB\",\"seeMore\":\"NotesListItem_seeMore__yewWc\",\"itemBody\":\"NotesListItem_itemBody__XYxrq\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"sorter\":\"NotesSorter_sorter__WWWlL\",\"sortTrigger\":\"NotesSorter_sortTrigger__FH_V7\",\"itemIcon\":\"NotesSorter_itemIcon__R_TMP\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"loadingContainer\":\"MyPublicReflectionsTab_loadingContainer__n85HV\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"ReflectionsTabIntroduction_container__PbD_C\",\"title\":\"ReflectionsTabIntroduction_title__63Caq\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"notesListContainer\":\"UserPublicReflectionsList_notesListContainer__PeF9F\",\"emptyNotesContainer\":\"UserPublicReflectionsList_emptyNotesContainer__o30hX\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"note\":\"UserPublicReflectionsListItem_note__hYmh5\",\"noteDate\":\"UserPublicReflectionsListItem_noteDate__KiBtY\",\"indicatorsContainer\":\"UserPublicReflectionsListItem_indicatorsContainer__GIk0H\",\"seeMore\":\"UserPublicReflectionsListItem_seeMore__UzzF2\",\"hashtag\":\"UserPublicReflectionsListItem_hashtag__NlvWq\",\"noteBody\":\"UserPublicReflectionsListItem_noteBody__ASZDZ\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"TabSwitcherItem_container__b7XGP\",\"value\":\"TabSwitcherItem_value__NJnY9\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"Tabs_container__6h1oV\",\"header\":\"Tabs_header__IhpVl\",\"titleContainer\":\"Tabs_titleContainer__grrtY\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"headerContainer\":\"ReflectionModal_headerContainer__EJqwx\",\"noteHeaderContainer\":\"ReflectionModal_noteHeaderContainer__oE38x\",\"noteDate\":\"ReflectionModal_noteDate__gHr9a\",\"noteBody\":\"ReflectionModal_noteBody__qOQ3U\",\"hashtag\":\"ReflectionModal_hashtag__vo4NO\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"socialInteractionContainer\":\"ReflectionSocialInteractions_socialInteractionContainer__M8M7_\",\"container\":\"ReflectionSocialInteractions_container__OH3l4\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"headerContainer\":\"ReflectionReferences_headerContainer__gvcjY\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"translationsListContainer\":\"VerseAndTranslation_translationsListContainer__n3W8A\",\"translationContainer\":\"VerseAndTranslation_translationContainer__h0X3S\",\"arabicVerseContainer\":\"VerseAndTranslation_arabicVerseContainer__VfIE8\",\"verseContainer\":\"VerseAndTranslation_verseContainer__nvg9w\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"modalContainer\":\"ContentModal_modalContainer__i7bo0\",\"contentContainer\":\"ContentModal_contentContainer___ciX5\",\"overlay\":\"ContentModal_overlay__qZfQY\",\"contentWrapper\":\"ContentModal_contentWrapper__VaiRB\",\"autoHeight\":\"ContentModal_autoHeight__A3IW7\",\"medium\":\"ContentModal_medium__EKB5h\",\"small\":\"ContentModal_small__YBKtM\",\"fadeIn\":\"ContentModal_fadeIn__JGh_A\",\"fadeOut\":\"ContentModal_fadeOut__36m_B\",\"contentIn\":\"ContentModal_contentIn__EAwQw\",\"contentOut\":\"ContentModal_contentOut__2x8WN\",\"closeIcon\":\"ContentModal_closeIcon__xppin\",\"header\":\"ContentModal_header__384F2\",\"content\":\"ContentModal_content__9M2Iy\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"Popover_container__GOha0\",\"trigger\":\"Popover_trigger__qKXNN\",\"content\":\"Popover_content__gu5L4\",\"tooltipContent\":\"Popover_tooltipContent__AMPpT\"};"],"names":["_path","_extends","Object","assign","bind","n","e","arguments","length","t","r","hasOwnProperty","call","apply","props","width","height","viewBox","fill","xmlns","d","stroke","strokeWidth","strokeLinecap","strokeLinejoin","_g","_defs","clipPath","id","className","fillRule","clipRule","window","__NEXT_P","push","router","useRouter","useEffect","asPath","replace","getLoginNavigationUrl","WrappedComponent","useState","isReady","setIsReady","isLoggedIn","RedirectToLoginPage","parseReflectionBody","reflectionBody","hashtagStyle","text","url","index","indexOf","beforeText","slice","Math","max","afterText","includes","_","tag","tagWithHashTag","getQuranReflectTagUrl","tagToLink","reflectionText","useMemo","chapter","from","to","useTranslation","lang","translations","useSelector","selectSelectedTranslations","areArraysEqual","selectQuranReaderStyles","shallowEqual","quranFont","mushafLines","translationFontScale","mushafId","getMushafId","mushaf","apiParams","getDefaultWordFields","translationFields","join","shouldFetchData","useSWR","makeVersesUrl","fetcher","data","error","mutate","useQcfFont","verses","Error","onRetryClicked","div","styles","map","verse","PlainVerseText","words","getVerseWords","translation","TranslationText","languageId","resourceName","verseKey","Spinner","ContentModalSize","isOpen","onClose","onEscapeKeyDown","hasCloseButton","children","header","innerRef","contentClassName","size","MEDIUM","isFixedHeight","hasHeader","overlayRef","useRef","locale","useImperativeHandle","scrollToTop","current","scrollTop","Dialog","open","ref","classNames","SMALL","onPointerDownOutside","currentTarget","isRTLLocale","detail","originalEvent","offsetX","clientWidth","preventDefault","Button","variant","ButtonVariant","shape","ButtonShape","onClick","CloseIcon","content","onOpenChange","contentSide","ContentSide","tip","tooltipDelay","defaultStyling","triggerStyles","isContainerSpan","Popover","useTooltipStyles","trigger","Tooltip","delay","ContentAlign","isModal","BOTTOM","contentAlign","CENTER","avoidCollisions","isPortalled","contentSideOffset","contentStyles","RadixPopover","sideOffset","side","align","containerChild","modal","aria-label","asChild","span","relativeUrl","params","isFirstParameter","keys","forEach","parameter","parameterValue","history","replaceState","state","as","note","setSelectedNoteId","onNoteClicked","noteId","logButtonClick","role","tabIndex","onKeyDown","NoteRangesIndicator","ranges","p","truncateString","body","time","dateTime","createdAt","toString","dateToReadableFormat","year","isValidating","setSize","mutateCache","selectedNoteId","pagination","hasNextPage","notes","response","flat","isLoading","isLoadingMoreData","isEmpty","SpinnerSize","NoteModal","onNoteDeleted","cachedPages","newPages","i","page","newData","filter","onNoteUpdated","updatedNote","noteIdx","findIndex","Virtuoso","overscan","increaseViewportBy","top","bottom","endReached","itemContent","NotesListItem","useWindowScroll","options","selectedOptionId","onChange","selectedOption","find","option","PopoverMenu","label","ChevronDownIcon","logEvent","shouldCloseMenuAfterClick","NotesSortOption","sortBy","setSortBy","sortOptions","useSWRInfinite","pageIndex","previousPageData","makeNotesUrl","limit","endCursor","cursor","key","privateFetcher","then","revalidateOnFocus","revalidateFirstPage","revalidateOnMount","statusCode","hasFullWidth","NotesSorter","newSortByVal","logValueChange","NotesList","shouldDelayVisibility","ul","li","Trans","components","link","Link","href","LinkVariant","isNewTab","i18nKey","reflection","getQuranReflectPostUrl","prefix","LoveIcon","ButtonSize","stopPropagation","postId","shouldFlipOnRTL","toLocalizedNumber","likes","ChatIcon","commentsCount","reference","chaptersData","useContext","DataContext","surahId","fromAyah","toAyah","isSurah","chapterData","getChapterData","referenceKey","transliteratedName","localizedStartVerseKey","toLocalizedVerseKey","setSelectedReflection","formattedText","useReflectionBodyParser","onReflectionClicked","selectedReflection","references","ReflectionReferenceIndicator","dangerouslySetInnerHTML","__html","truncate","ReflectionSocialInteractions","isCollapseOpen","onNoteSurahReferenceClicked","Collapsible","title","shouldRotatePrefixOnToggle","VerseAndTranslation","Number","contentModalRef","ContentModal","ReflectionReferences","weekday","undefined","month","reflections","ReflectionModal","ReflectionsTabIntroduction","UserPublicReflectionsListItem","makeGetUserReflectionsUrl","UserPublicReflectionsList","icon","value","Tab","PRIVATE_NOTES","selectedTab","setSelectedTab","queryParams","tab","useAddQueryParamsToUrl","getNotesNavigationUrl","queryTab","query","values","tabs","name","TabSwitcherItem","DetailsIcon","SyllabusIcon","PUBLIC_REFLECTIONS","tabComponents","PrivateNotesTab","PublicReflectionsTab","h1","Switch","selected","items","onSelect","withAuth","navigationUrl","NextSeoWrapper","canonical","getCanonicalUrl","languageAlternates","getLanguageAlternates","nofollow","noindex","layoutStyles","NotesTabs","getPrefixedUrl","makePostReflectionViewsUrl","makeUrl","makeFollowUserUrl","userNameOrId","makeIsUserFollowedUrl","makeQuranicCalendarPostOfWeekUrl","weekNumber","string","maxLength","result","selfClose","_getTag","tail","substring","_getEndPosition","tailPos","substr","defaultPos","total","position","isShort","slop","slopPos","startSlice","endSlice","truncateLastWord","WORD_BREAK_REGEX","exec","charAt","match","DEFAULT_SLOP","EXCLUDE_TAGS","KEY_VALUE_REGEX","IS_CLOSE_REGEX","SELF_CLOSE_REGEX","RegExp","CLOSE_REGEX","HTML_TAG_REGEX","URL_REGEX","IMAGE_TAG_REGEX","matches","ellipsis","pop","tags","html","reverse","_dumpCloseTag","keepImageTag","len","_removeImageTag","module","exports"],"sourceRoot":""}