{"version":3,"file":"js/709-e165a8dba796e79495c6.js","mappings":"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AO,QACPxP,MAAO,sECrOb,SACE,CACEwP,MAAO,WACPxP,MAAO,YAET,CACEwP,MAAO,cACPxP,MAAO,eAET,CACEwP,MAAO,SACPxP,MAAO,UAET,CACEwP,MAAO,8BACPxP,MAAO,iCAET,CACEwP,MAAO,SACPxP,MAAO,UAET,CACEwP,MAAO,QACPxP,MAAO,SAET,CACEwP,MAAO,sBACPxP,MAAO,uBAET,CACEwP,MAAO,SACPxP,MAAO,UAET,CACEwP,MAAO,oBACPxP,MAAO,qBAET,CACEwP,MAAO,mBACPxP,MAAO,sBAET,CACEwP,MAAO,QACPxP,MAAO,SAET,CACEwP,MAAO,qBACPxP,MAAO,sBAET,CACEwP,MAAO,YACPxP,MAAO,aAET,CACEwP,MAAO,UACPxP,MAAO,WAET,CACEwP,MAAO,YACPxP,MAAO,aAET,CACEwP,MAAO,QACPxP,MAAO,SAET,CACEwP,MAAO,OACPxP,MAAO,QAET,CACEwP,MAAO,UACPxP,MAAO,WAET,CACEwP,MAAO,aACPxP,MAAO,cAET,CACEwP,MAAO,UACPxP,MAAO,WAET,CACEwP,MAAO,eACPxP,MAAO,gBAET,CACEwP,MAAO,UACPxP,MAAO,WAET,CACEwP,MAAO,QACPxP,MAAO,SAET,CACEwP,MAAO,UACPxP,MAAO,WAET,CACEwP,MAAO,SACPxP,MAAO,UAET,CACEwP,MAAO,qBACPxP,MAAO,sBAET,CACEwP,MAAO,gCACPxP,MAAO,mCAET,CACEwP,MAAO,SACPxP,MAAO,UAET,CACEwP,MAAO,OACPxP,MAAO,QAET,CACEwP,MAAO,QACPxP,MAAO,SAET,CACEwP,MAAO,gBACPxP,MAAO,iBAET,CACEwP,MAAO,SACPxP,MAAO,UAET,CACEwP,MAAO,cACPxP,MAAO,eAET,CACEwP,MAAO,YACPxP,MAAO,aAET,CACEwP,MAAO,2BACPxP,MAAO,4BAET,CACEwP,MAAO,UACPxP,MAAO,WAET,CACEwP,MAAO,+BACPxP,MAAO,gCAET,CACEwP,MAAO,iBACPxP,MAAO,kBAET,CACEwP,MAAO,mBACPxP,MAAO,oBAET,CACEwP,MAAO,MACPxP,MAAO,OAET,CACEwP,MAAO,QACPxP,MAAO,SAET,CACEwP,MAAO,QACPxP,MAAO,SAET,CACEwP,MAAO,WACPxP,MAAO,YAET,CACEwP,MAAO,YACPxP,MAAO,aAET,CACEwP,MAAO,SACPxP,MAAO,UAET,CACEwP,MAAO,WACPxP,MAAO,YAET,CACEwP,MAAO,wBACPxP,MAAO,yBAET,CACEwP,MAAO,aACPxP,MAAO,cAET,CACEwP,MAAO,eACPxP,MAAO,gBAET,CACEwP,MAAO,QACPxP,MAAO,SAET,CACEwP,MAAO,QACPxP,MAAO,SAET,CACEwP,MAAO,oBACPxP,MAAO,qBAET,CACEwP,MAAO,kBACPxP,MAAO,mBAET,CACEwP,MAAO,SACPxP,MAAO,UAET,CACEwP,MAAO,UACPxP,MAAO,WAET,CACEwP,MAAO,SACPxP,MAAO,UAET,CACEwP,MAAO,kBACPxP,MAAO,mBAET,CACEwP,MAAO,kBACPxP,MAAO,mBAET,CACEwP,MAAO,oBACPxP,MAAO,qBAET,CACEwP,MAAO,kBACPxP,MAAO,mBAET,CACEwP,MAAO,oBACPxP,MAAO,qBAET,CACEwP,MAAO,kBACPxP,MAAO,mBAET,CACEwP,MAAO,oBACPxP,MAAO,uBAET,CACEwP,MAAO,UACPxP,MAAO,WAET,CACEwP,MAAO,cACPxP,MAAO,eAET,CACEwP,MAAO,UACPxP,MAAO,WAET,CACEwP,MAAO,gBACPxP,MAAO,iBAET,CACEwP,MAAO,cACPxP,MAAO,eAET,CACEwP,MAAO,mBACPxP,MAAO,sECnRX,SACE,CACEwP,MAAO,MACPxP,MAAO,KAET,CACEwP,MAAO,MACPxP,MAAO,KAET,CACEwP,MAAO,MACPxP,MAAO,KAET,CACEwP,MAAO,MACPxP,MAAO,KAET,CACEwP,MAAO,MACPxP,MAAO,KAET,CACEwP,MAAO,MACPxP,MAAO,KAET,CACEwP,MAAO,OACPxP,MAAO,MAET,CACEwP,MAAO,OACPxP,MAAO,MAET,CACEwP,MAAO,OACPxP,MAAO,MAET,CACEwP,MAAO,mBACPxP,MAAO,oECvCX,SACE,CACEwP,MAAO,aACPxP,MAAO,aAET,CACEwP,MAAO,gBACPxP,MAAO,gBAET,CACEwP,MAAO,eACPxP,MAAO,gBAET,CACEwP,MAAO,YACPxP,MAAO,4DCfX,SACE,CACEwP,MAAO,YACPxP,MAAO,aAET,CACEwP,MAAO,eACPxP,MAAO,gBAET,CACEwP,MAAO,kBACPxP,MAAO,mBAET,CACEwP,MAAO,sBACPxP,MAAO,uBAET,CACEwP,MAAO,iBACPxP,MAAO,kBAET,CACEwP,MAAO,mBACPxP,MAAO,oBAET,CACEwP,MAAO,UACPxP,MAAO,WAET,CACEwP,MAAO,iBACPxP,MAAO,kBAET,CACEwP,MAAO,gBACPxP,MAAO,iBAET,CACEwP,MAAO,WACPxP,MAAO,YAET,CACEwP,MAAO,UACPxP,MAAO,WAET,CACEwP,MAAO,kBACPxP,MAAO,mBAET,CACEwP,MAAO,qBACPxP,MAAO,sBAET,CACEwP,MAAO,YACPxP,MAAO,aAET,CACEwP,MAAO,gBACPxP,MAAO,iBAET,CACEwP,MAAO,aACPxP,MAAO,cAET,CACEwP,MAAO,kBACPxP,MAAO,mBAET,CACEwP,MAAO,kBACPxP,MAAO,mBAET,CACEwP,MAAO,gBACPxP,MAAO,iBAET,CACEwP,MAAO,kBACPxP,MAAO,mBAET,CACEwP,MAAO,UACPxP,MAAO,WAET,CACEwP,MAAO,cACPxP,MAAO,eAET,CACEwP,MAAO,sBACPxP,MAAO,uBAET,CACEwP,MAAO,aACPxP,MAAO,cAET,CACEwP,MAAO,YACPxP,MAAO,aAET,CACEwP,MAAO,oBACPxP,MAAO,qECvGX,SACE,CACEwP,MAAO,uDACPxP,MAAO,mDAET,CACEwP,MAAO,uDACPxP,MAAO,mDAET,CACEwP,MAAO,0DACPxP,MAAO,sDAET,CACEwP,MAAO,yCACPxP,MAAO,0CAET,CACEwP,MAAO,4CACPxP,MAAO,6CAET,CACEwP,MAAO,mDACPxP,MAAO,oDAET,CACEwP,MAAO,qCACPxP,MAAO,iCAET,CACEwP,MAAO,2CACPxP,MAAO,uCAET,CACEwP,MAAO,wCACPxP,MAAO,oCAET,CACEwP,MAAO,yCACPxP,MAA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","sources":["webpack://lc3/./app/javascript/components/ai_tools/AIForm.jsx","webpack://lc3/./app/javascript/components/ai_tools/AskLitchartsAI.jsx","webpack://lc3/./app/javascript/components/ai_tools/DiscussionQuestions.jsx","webpack://lc3/./app/javascript/components/ai_tools/EssayPrompts.jsx","webpack://lc3/./app/javascript/components/ai_tools/InContentAIForm.jsx","webpack://lc3/./app/javascript/components/ai_tools/InContentAskLitchartsAI.jsx","webpack://lc3/./app/javascript/components/ai_tools/QuizQuestions.jsx","webpack://lc3/./app/javascript/components/ai_tools/constants/index.js","webpack://lc3/./app/javascript/components/ai_tools/hooks/useChatMessages.jsx","webpack://lc3/./app/javascript/components/ai_tools/hooks/useFormDisableFields.jsx","webpack://lc3/./app/javascript/components/ai_tools/hooks/useFormText.jsx","webpack://lc3/./app/javascript/components/ai_tools/hooks/useSessionStorage.jsx","webpack://lc3/./app/javascript/components/ai_tools/hooks/useWindowResizeAndFormCollapse.jsx","webpack://lc3/./app/javascript/components/ai_tools/layout/AIToolsLayout.jsx","webpack://lc3/./app/javascript/components/ai_tools/shared/AIForm/AIFormLayout.jsx","webpack://lc3/./app/javascript/components/ai_tools/shared/AIForm/AIFormSubheading.jsx","webpack://lc3/./app/javascript/components/ai_tools/shared/AIForm/AIFormTitle.jsx","webpack://lc3/./app/javascript/components/ai_tools/shared/AIForm/DisclaimerText.jsx","webpack://lc3/./app/javascript/components/ai_tools/shared/AIForm/LockedInformationBanner.jsx","webpack://lc3/./app/javascript/components/ai_tools/shared/ChatArea/CopyAndSaveReminder.jsx","webpack://lc3/./app/javascript/components/ai_tools/shared/ChatArea/InitialMessage.jsx","webpack://lc3/./app/javascript/components/ai_tools/shared/ChatArea/InitialMessageBullets.jsx","webpack://lc3/./app/javascript/components/ai_tools/shared/ChatArea/InitialMessageDescription.jsx","webpack://lc3/./app/javascript/components/ai_tools/shared/ChatArea/InitialMessageExample.jsx","webpack://lc3/./app/javascript/components/bookmarks/BookmarkList.jsx","webpack://lc3/./app/javascript/components/books/RelatedThemes.jsx","webpack://lc3/./app/javascript/components/books/SummaryAnalysisAPlusDialog.jsx","webpack://lc3/./app/javascript/components/groups/info/GroupsInfoExpandableFaqRow.jsx","webpack://lc3/./app/javascript/components/groups/info/GroupsInfoFaqRow.jsx","webpack://lc3/./app/javascript/components/lit_devices/ChaptersRow.jsx","webpack://lc3/./app/javascript/components/lit_devices/ChaptersView.jsx","webpack://lc3/./app/javascript/components/lit_devices/Content.jsx","webpack://lc3/./app/javascript/components/lit_devices/DevicesRow.jsx","webpack://lc3/./app/javascript/components/lit_devices/DevicesView.jsx","webpack://lc3/./app/javascript/components/lit_devices/Filters.jsx","webpack://lc3/./app/javascript/components/lit_devices/LandingPage.jsx","webpack://lc3/./app/javascript/components/lit_devices/PageDescription.jsx","webpack://lc3/./app/javascript/components/lit_devices/QueryParamsControls.jsx","webpack://lc3/./app/javascript/components/navigation/Menu.jsx","webpack://lc3/./app/javascript/components/navigation/MenuItem.jsx","webpack://lc3/./app/javascript/components/navigation/MenuParent.jsx","webpack://lc3/./app/javascript/components/poetry/poems/show/AiToolToggle.jsx","webpack://lc3/./app/javascript/components/poetry/poems/show/ComponentItemSelect.jsx","webpack://lc3/./app/javascript/components/poetry/poems/show/UncachedAITool.jsx","webpack://lc3/./app/javascript/components/quizzes/QuizBanner.jsx","webpack://lc3/./app/javascript/components/quizzes/QuizCard/QuizAnswerChoice.jsx","webpack://lc3/./app/javascript/components/quizzes/QuizCard/QuizAnswerChoiceIcon.jsx","webpack://lc3/./app/javascript/components/quizzes/QuizCard/QuizCard.jsx","webpack://lc3/./app/javascript/components/quizzes/QuizCard/QuizCardResult.jsx","webpack://lc3/./app/javascript/components/quizzes/QuizCard/QuizCardResultText.jsx","webpack://lc3/./app/javascript/components/quizzes/QuizCard/ReviewButton.jsx","webpack://lc3/./app/javascript/components/quizzes/QuizResult.jsx","webpack://lc3/./app/javascript/components/quizzes/QuizSubmission.jsx","webpack://lc3/./app/javascript/components/quizzes/ResultsPanel.jsx","webpack://lc3/./app/javascript/components/quizzes/constants.js","webpack://lc3/./app/javascript/components/search/AuthorEthnicityMultiSelect.jsx","webpack://lc3/./app/javascript/components/search/AuthorGenderMultiSelect.jsx","webpack://lc3/./app/javascript/components/search/AuthorNationalityMultiSelect.jsx","webpack://lc3/./app/javascript/components/search/GenreMultiSelect.jsx","webpack://lc3/./app/javascript/components/search/GradeLevelRefinementList.jsx","webpack://lc3/./app/javascript/components/search/GuideRefinementList.jsx","webpack://lc3/./app/javascript/components/search/LiteraryMovementRefinementList.jsx","webpack://lc3/./app/javascript/components/search/LiteraryPeriodRefinementList.jsx","webpack://lc3/./app/javascript/components/search/TimePeriodRefinementList.jsx","webpack://lc3/./app/javascript/components/search/TypeRefinementList.jsx","webpack://lc3/./app/javascript/components/search/base/CurrentRefinements.jsx","webpack://lc3/./app/javascript/components/search/base/Flyout.jsx","webpack://lc3/./app/javascript/components/search/base/HierarchicalRefinementList.jsx","webpack://lc3/./app/javascript/components/search/base/HierarchicalRefinementListElement.jsx","webpack://lc3/./app/javascript/components/search/base/Hit.jsx","webpack://lc3/./app/javascript/components/search/base/Hits.jsx","webpack://lc3/./app/javascript/components/search/base/MultiSelectRefinementList.jsx","webpack://lc3/./app/javascript/components/search/base/NoResults.jsx","webpack://lc3/./app/javascript/components/search/base/RefineElement.jsx","webpack://lc3/./app/javascript/components/search/base/RefinementList.jsx","webpack://lc3/./app/javascript/components/search/context/FilterPromoContext.js","webpack://lc3/./app/javascript/components/search/index.js","webpack://lc3/./app/javascript/components/search/references/authorCategories.js","webpack://lc3/./app/javascript/components/search/references/flyoutReference.js","webpack://lc3/./app/javascript/components/search/references/genreCategories.js","webpack://lc3/./app/javascript/components/search/references/gradeLevelCategories.js","webpack://lc3/./app/javascript/components/search/references/guideCategories.js","webpack://lc3/./app/javascript/components/search/references/literaryMovementCategories.js","webpack://lc3/./app/javascript/components/search/references/literaryPeriodCategories.js","webpack://lc3/./app/javascript/components/search/references/promoAttributeReference.js","webpack://lc3/./app/javascript/components/search/references/timePeriodCategories.js","webpack://lc3/./app/javascript/components/search/references/typeCategories.js","webpack://lc3/./app/javascript/components/users/downloads/UserDownloadsSortControl.jsx","webpack://lc3/./app/javascript/components/users/highlights/UserHighlightsFilterControl.jsx","webpack://lc3/./app/javascript/components/views/static/GdprRequestForm.jsx","webpack://lc3/./app/javascript/constants/literary_devices/index.js","webpack://lc3/./app/javascript/initializers/base.js","webpack://lc3/./app/javascript/initializers/globalViews.js","webpack://lc3/./app/javascript/initializers/toast.js"],"sourcesContent":["import React, { useEffect, useLayoutEffect, useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport classnames from \"classnames\";\nimport pluralize from \"pluralize\";\nimport { Formik, yupToFormErrors } from \"formik\";\nimport * as Yup from \"yup\";\nimport { SM_PIXEL_MIN, XS_PIXEL_MAX } from \"constants/breakpoints\";\nimport InputTextCounter from \"components/shared/InputTextCounter\";\nimport Select from \"components/shared/Select\";\nimport IconButton from \"components/shared/IconButton\";\nimport { AI_ANSWERS_QUOTA } from \"components/ai_tools/constants\";\nimport DisclaimerText from \"components/ai_tools/shared/AIForm/DisclaimerText\";\n\nconst sessionStorageKey = \"askLitchartsAi\";\n\nconst validationSchema = Yup.object().shape({\n  title: Yup.string().required(\"Please select your title\"),\n  question: Yup.string()\n    .required(\"25 characters required\")\n    .min(25, \"25 characters required\")\n    .max(300, \"Over max character limit\"),\n});\n\nconst AIForm = (props) => {\n  const {\n    loading,\n    locked,\n    onSubmit,\n    options = [],\n    questionMinimum,\n    quotaRemaining,\n    resetDate,\n    signupPath,\n    values,\n  } = props;\n  const [isLessThanSmallBreakpoint, setIsLessThanSmallBreakpoint] =\n    useState(true);\n  const [collapsed, setCollapsed] = useState(true);\n  const disableFields = !locked && quotaRemaining === 0;\n\n  const resizeHandler = () => {\n    if (window.matchMedia(`(min-width: ${SM_PIXEL_MIN}px)`).matches) {\n      setIsLessThanSmallBreakpoint(false);\n    } else if (window.matchMedia(`(max-width: ${XS_PIXEL_MAX}px)`).matches) {\n      setIsLessThanSmallBreakpoint(true);\n    }\n  };\n\n  useLayoutEffect(() => {\n    resizeHandler();\n    window.addEventListener(\"resize\", resizeHandler);\n    return () => {\n      window.removeEventListener(\"resize\", resizeHandler);\n    };\n  }, []);\n\n  useLayoutEffect(() => {\n    setCollapsed(isLessThanSmallBreakpoint);\n  }, [isLessThanSmallBreakpoint]);\n\n  useEffect(() => {\n    // Prevent the body from scrolling underneath the form field when on small screen\n    // and expanded\n    if (!collapsed && isLessThanSmallBreakpoint) {\n      document.body.style.overflow = \"hidden\";\n    } else {\n      document.body.style.overflow = \"auto\";\n    }\n  }, [collapsed]);\n\n  const buttonRemainingText =\n    !locked && quotaRemaining > 0 ? ` (${quotaRemaining} left)` : \"\";\n  let buttonCTA = \"Ask LitCharts AI\";\n  if (quotaRemaining > 0 && !collapsed && isLessThanSmallBreakpoint) {\n    buttonCTA = \"Submit\";\n  } else if (quotaRemaining > 0 && quotaRemaining < 25) {\n    buttonCTA = \"Ask New Question\";\n  }\n  const buttonText = buttonCTA + buttonRemainingText;\n  const resetText = `${pluralize(\n    \"answers\",\n    quotaRemaining,\n    true\n  )} left (resets on ${resetDate})`;\n  const showDisclaimerText = !collapsed || (collapsed && quotaRemaining === 0);\n\n  const unpackValueFromStorage = (key) => {\n    const storageKey = `${sessionStorageKey}:${key}`;\n    const storedValue = sessionStorage.getItem(storageKey) || \"\";\n\n    sessionStorage.removeItem(storageKey);\n\n    return storedValue;\n  };\n\n  const initialValues = {\n    question: !disableFields\n      ? unpackValueFromStorage(\"question\") || values.question\n      : \"\",\n    title: !disableFields\n      ? unpackValueFromStorage(\"title\") || values.title\n      : \"\",\n  };\n\n  const storeFieldForReload = (key, value) => {\n    if (locked && !disableFields) {\n      const storageKey = `${sessionStorageKey}:${key}`;\n      sessionStorage.setItem(storageKey, value);\n    }\n  };\n\n  const handleSubmit = (formValues) => {\n    // Locked, redirect to sales page\n    if (locked && !disableFields) {\n      window.location.href = signupPath;\n      return;\n    }\n\n    // We're in a collapsed state (smaller breakpoints)\n    // Expand the form\n    if (collapsed) {\n      setCollapsed(false);\n      return;\n    }\n\n    // pass the values up to the parent to handle submission\n    onSubmit(formValues);\n\n    // If we're in smaller breakpoints, collapse the form\n    if (isLessThanSmallBreakpoint) {\n      setCollapsed(true);\n    }\n  };\n\n  const validateForm = async (formValues) => {\n    let yupFormErrors = {};\n\n    if (collapsed && isLessThanSmallBreakpoint) {\n      return yupFormErrors;\n    }\n\n    if (locked) {\n      return yupFormErrors;\n    }\n\n    try {\n      await validationSchema.validate(formValues, { abortEarly: false });\n    } catch (e) {\n      yupFormErrors = yupToFormErrors(e);\n    }\n\n    return yupFormErrors;\n  };\n\n  const handleClose = () => {\n    setCollapsed(true);\n  };\n\n  const amplitudeSignupAttr = () => {\n    let attr;\n    if (locked && !disableFields) {\n      attr = \"aiSignupForm\"; // we're free tier and signing up\n    } else {\n      attr = \"aiQuestionAsked\"; // we're subbed and asking a question\n    }\n    attr += isLessThanSmallBreakpoint ? \"Small\" : \"Large\";\n    if (collapsed && isLessThanSmallBreakpoint) {\n      attr += \"Collapsed\";\n    }\n    return attr;\n  };\n\n  return (\n    <Formik\n      initialValues={initialValues}\n      validateOnBlur={false}\n      validateOnChange={false}\n      validateOnMount={false}\n      validate={validateForm}\n      onSubmit={handleSubmit}\n    >\n      {(formik) => (\n        <form\n          onSubmit={formik.handleSubmit}\n          className={classnames(\"ai-form--container\", { collapsed })}\n        >\n          <div className=\"ai-form--header\">\n            <div className=\"title-5\">Ask LitCharts AI</div>\n            <div className=\"subtitle-1\">\n              The only tool that combines the world&apos;s best literary\n              analysis with the power of AI.\n            </div>\n            <IconButton\n              iconClass=\"lc-icon-close lc-icon-xs\"\n              btnClass=\"btn-lg btn-borderless-alt\"\n              onClick={handleClose}\n            />\n          </div>\n          <div className=\"ai-form--content\">\n            <div className=\"ai-form--body\">\n              <div\n                className=\"ai-form--banner lc-banner lc-banner-information\"\n                data-testid=\"ai-form-banner\"\n              >\n                {locked ? (\n                  <a href={signupPath} data-amplitude=\"aiSignupBanner\">\n                    Get {AI_ANSWERS_QUOTA} answers per month\n                  </a>\n                ) : (\n                  resetText\n                )}\n              </div>\n              <div className=\"ai-form--fields\">\n                <Select\n                  errorMessage={formik.errors.title}\n                  id=\"title\"\n                  isDisabled={loading || disableFields}\n                  isSearchable\n                  labelText=\"Title\"\n                  name=\"title\"\n                  options={options}\n                  placeholder={\n                    !disableFields ? \"e.g. Hamlet (Shakespeare)\" : \"\"\n                  }\n                  onChange={(e) => {\n                    const fieldKey = \"title\";\n                    storeFieldForReload(fieldKey, e.value);\n                    formik.setFieldValue(fieldKey, e.value);\n                  }}\n                  value={formik.values.title}\n                />\n                <InputTextCounter\n                  disabled={loading || disableFields}\n                  hideSubtext={disableFields}\n                  errorMessage={formik.errors.question}\n                  labelText=\"Question\"\n                  key={`collapsed-${collapsed}`}\n                  name=\"question\"\n                  min={questionMinimum}\n                  max={300}\n                  onChange={(e) => {\n                    const fieldKey = \"question\";\n                    formik.setFieldError(fieldKey, null);\n                    storeFieldForReload(fieldKey, e.target.value);\n                    formik.setFieldValue(fieldKey, e.target.value);\n                  }}\n                  // eslint-disable-next-line max-len\n                  placeholder={\n                    !disableFields\n                      ? \"e.g. In Act 3, scene 3, why does Hamlet decide not to kill Claudius while Claudius is praying?\"\n                      : \"\"\n                  }\n                  value={formik.values.question}\n                />\n              </div>\n            </div>\n            <div className=\"ai-form--footer\">\n              <button\n                className={`ai-form--submit btn btn-a-plus button-1 ${\n                  isLessThanSmallBreakpoint ? \"btn-lg\" : \"btn-block\"\n                }`}\n                data-testid=\"ai-form-submit\"\n                data-amplitude={amplitudeSignupAttr()}\n                disabled={disableFields || loading}\n                type=\"submit\"\n              >\n                {locked && (\n                  <i\n                    className=\"lc-icon lc-icon-lock-filled lc-icon-sm\"\n                    data-testid=\"lock-icon\"\n                  />\n                )}\n                {loading ? \"Answering...\" : buttonText}\n              </button>\n              {!locked && showDisclaimerText && (\n                <div className=\"subtitle-1 tw-flex tw-pt-2 tw-text-gray-tint-40\">\n                  {collapsed && quotaRemaining === 0 && resetText}\n                  {!collapsed && (\n                    <DisclaimerText className=\"tw-self-center tw-text-center tw-flex-grow\" />\n                  )}\n                </div>\n              )}\n            </div>\n          </div>\n        </form>\n      )}\n    </Formik>\n  );\n};\n\nAIForm.propTypes = {\n  loading: PropTypes.bool,\n  locked: PropTypes.bool,\n  onSubmit: PropTypes.func,\n  options: PropTypes.arrayOf(\n    PropTypes.shape({\n      name: PropTypes.string,\n      value: PropTypes.string,\n    })\n  ),\n  questionMinimum: PropTypes.number,\n  quotaRemaining: PropTypes.number.isRequired,\n  resetDate: PropTypes.string,\n  signupPath: PropTypes.string,\n  values: PropTypes.object,\n};\n\nAIForm.defaultProps = {\n  loading: false,\n  locked: false,\n  onSubmit: () => {},\n  options: [],\n  questionMinimum: 25,\n  resetDate: \"\",\n  signupPath: \"/sign-up?focus=teacher\",\n  values: {},\n};\n\nexport default AIForm;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport AIForm from \"components/ai_tools/AIForm\";\nimport ChatArea from \"components/ai_tools/ChatArea\";\n\nimport AIToolsLayout from \"./layout/AIToolsLayout\";\nimport {\n  AI_TOOL_CHANNELS,\n  AI_TOOL_NAMES,\n  QUESTION_MINIMUM_LENGTH,\n} from \"./constants\";\nimport useChatMessages from \"./hooks/useChatMessages\";\n\nconst AskLitchartsAI = (props) => {\n  const {\n    quotaRemaining: quotaFromProps,\n    locked,\n    signupPath,\n    submissionPath,\n    aiAnswersCompletePath,\n  } = props;\n  const { loading, quotaRemaining, messages, prevSlug, handleAskAIFormSubmit } =\n    useChatMessages({\n      submissionPath,\n      aiAnswersCompletePath,\n      locked,\n      upgradeable: false,\n      signupPath,\n      quotaFromProps,\n      eventCategory: \"Ask LitCharts AI\",\n      channel: AI_TOOL_CHANNELS.ASK_AI,\n      toolName: AI_TOOL_NAMES.ASK_AI,\n    });\n\n  return (\n    <AIToolsLayout>\n      <AIForm\n        {...props}\n        loading={loading}\n        onSubmit={handleAskAIFormSubmit}\n        // Note, please read before removing.  This line causes a re-render that clears\n        // out the \"Question\" field while preserving the \"Title\" field upon a\n        // successful Ask Litcharts AI response.\n        key={`quota-remaining-${quotaRemaining}`}\n        quotaRemaining={quotaRemaining}\n        questionMinimum={QUESTION_MINIMUM_LENGTH}\n        values={{ title: prevSlug }}\n      />\n      <ChatArea messages={messages} />\n    </AIToolsLayout>\n  );\n};\n\nAskLitchartsAI.propTypes = {\n  submissionPath: PropTypes.string,\n  aiAnswersCompletePath: PropTypes.string,\n  locked: PropTypes.bool,\n  options: PropTypes.arrayOf(\n    PropTypes.shape({\n      name: PropTypes.string,\n      value: PropTypes.string,\n    })\n  ),\n  questionMinimum: PropTypes.number,\n  quotaRemaining: PropTypes.number.isRequired,\n  resetDate: PropTypes.string,\n  signupPath: PropTypes.string,\n};\n\nAskLitchartsAI.defaultProps = {\n  submissionPath: \"/ai/ask-litcharts-ai\",\n  aiAnswersCompletePath: \"/ai_answers/complete\",\n  locked: false,\n  options: [],\n  questionMinimum: 25,\n  resetDate: \"\",\n  signupPath: \"/sign-up?focus=teacher\",\n};\n\nexport default AskLitchartsAI;\n","import React, { useState, useEffect } from \"react\";\nimport PropTypes from \"prop-types\";\nimport Select from \"components/shared/Select\";\nimport ChatArea from \"components/ai_tools/ChatArea\";\nimport { useFormik } from \"formik\";\nimport * as Yup from \"yup\";\nimport pluralize from \"pluralize\";\nimport AIToolsLayout from \"./layout/AIToolsLayout\";\nimport {\n  AI_TOOL_CHANNELS,\n  AI_TOOL_NAMES,\n  AI_TOOLS_LABEL_MAP,\n  AI_TOOLS_LOADING_DEFAULTS,\n  REUSABLES,\n} from \"./constants\";\nimport useChatMessages from \"./hooks/useChatMessages\";\nimport AIFormLayout from \"./shared/AIForm/AIFormLayout\";\nimport useFormDisableFields from \"./hooks/useFormDisableFields\";\nimport useWindowResizeAndFormCollapse from \"./hooks/useWindowResizeAndFormCollapse\";\n\nconst DiscussionQuestions = (props) => {\n  const {\n    quotaRemaining: quotaFromProps,\n    locked,\n    upgradeable,\n    signupPath,\n    submissionPath,\n    aiAnswersCompletePath,\n    options,\n  } = props;\n\n  const validationSchema = Yup.object().shape({\n    title: Yup.string().required(\"Please select your title\"),\n    topic: Yup.string().when(\"title\", (title) => {\n      if (title) {\n        return Yup.string().required(\"Please select your topic\");\n      }\n    }),\n    subtopic: Yup.string().when(\"topic\", (_) => {\n      if (selectedTopic?.data) {\n        return Yup.string().required(\n          `Please select your ${\n            AI_TOOLS_LABEL_MAP[selectedTopic.label] ??\n            selectedTopic.labelText?.toLowerCase()\n          }`\n        );\n      }\n    }),\n  });\n\n  const [loadingTopics, setLoadingTopics] = useState(false);\n  const [topics, setTopics] = useState();\n  const [selectedTopic, setSelectedTopic] = useState();\n  const [selectedSubtopic, setSelectedSubtopic] = useState();\n  const { isLessThanSmallBreakpoint, collapsed, setCollapsed } =\n    useWindowResizeAndFormCollapse();\n\n  const formik = useFormik({\n    initialValues: {\n      title: prevSlug || \"\",\n      topic: \"\",\n      subtopic: \"\",\n    },\n    validateOnChange: false,\n    validateOnBlur: false,\n    validationSchema,\n    onSubmit: (values) => {\n      validationSchema\n        .validate(values, { abortEarly: false })\n        .then(() => {\n          handleQuizDiscussionEssayPrompt(values);\n          if (isLessThanSmallBreakpoint) {\n            setCollapsed(true);\n          }\n        })\n        .catch((errors) => {\n          formik.setErrors(errors);\n        });\n    },\n  });\n\n  const {\n    loading,\n    quotaRemaining,\n    messages,\n    prevSlug,\n    handleQuizDiscussionEssayPrompt,\n  } = useChatMessages({\n    submissionPath,\n    aiAnswersCompletePath,\n    locked,\n    upgradeable,\n    signupPath,\n    quotaFromProps,\n    toolName: AI_TOOL_NAMES.DISCUSSION_QUESTIONS,\n    eventCategory: \"Discussion Questions Generator\",\n    channel: AI_TOOL_CHANNELS.DISCUSSION_QUESTIONS,\n    messageText: selectedSubtopic?.messageText ?? selectedTopic?.messageText,\n    formik,\n  });\n\n  const { disableFields } = useFormDisableFields(locked, quotaRemaining);\n\n  const handleError = (timeoutRef) => {\n    clearTimeout(timeoutRef);\n    setLoadingTopics(false);\n    setTopics([]);\n    formik.setFieldError(\"topic\", \"Data request failed. Please try again.\");\n  };\n\n  const fetchDropdownContent = (guidePath) => {\n    setTopics();\n    setSelectedTopic(null);\n    setSelectedSubtopic(null);\n    const loadingTimeout = setTimeout(() => {\n      setTopics([]);\n      setLoadingTopics(true);\n    }, 1000);\n\n    fetch(guidePath, {\n      method: \"GET\",\n    })\n      .then((response) => {\n        if (!response.ok) {\n          handleError(loadingTimeout);\n        } else {\n          return response.json();\n        }\n      })\n      .then((data) => {\n        clearTimeout(loadingTimeout);\n        setTopics(data.topics);\n        setLoadingTopics(false);\n      })\n      .catch((error) => {\n        handleError(loadingTimeout);\n        console.error(\"Error fetching dropdown content:\", error);\n      });\n  };\n\n  useEffect(() => {\n    formik.setFieldValue(\"title\", prevSlug);\n  }, [prevSlug]);\n\n  return (\n    <AIToolsLayout>\n      <AIFormLayout\n        {...props}\n        collapsed={collapsed}\n        isLessThanSmallBreakpoint={isLessThanSmallBreakpoint}\n        setCollapsed={setCollapsed}\n        toolName={AI_TOOL_NAMES.DISCUSSION_QUESTIONS}\n        loading={loading}\n        storageKey=\"discussionQuestions\"\n        quotaRemaining={quotaRemaining}\n        formik={formik}\n      >\n        <Select\n          errorMessage={formik.errors.title}\n          id={REUSABLES.TITLE}\n          isDisabled={loading || disableFields}\n          isSearchable\n          labelText=\"Title\"\n          name={REUSABLES.TITLE}\n          options={options}\n          placeholder={!disableFields ? \"e.g. Hamlet (Shakespeare)\" : \"\"}\n          onChange={(e) => {\n            formik.setFieldValue(REUSABLES.TITLE, e.value);\n            formik.setFieldValue(REUSABLES.TOPIC, undefined);\n            formik.setFieldValue(REUSABLES.SUBTOPIC, undefined);\n            formik.setFieldError(REUSABLES.TOPIC, undefined);\n            formik.setFieldError(REUSABLES.SUBTOPIC, undefined);\n            fetchDropdownContent(e.guide_path);\n          }}\n          value={formik.values.title}\n        />\n        {topics && !disableFields && (\n          <Select\n            errorMessage={\n              loadingTopics && formik.errors.topic\n                ? \"Loading, select one when complete\"\n                : formik.errors.topic\n            }\n            id={REUSABLES.TOPIC}\n            isDisabled={loadingTopics || loading || disableFields}\n            isSearchable\n            isControlled\n            isLoading={loadingTopics}\n            labelText=\"Topic\"\n            name={REUSABLES.TOPIC}\n            options={loadingTopics ? [AI_TOOLS_LOADING_DEFAULTS] : topics}\n            placeholder={!disableFields ? \"e.g. Themes\" : \"\"}\n            onChange={(e) => {\n              formik.setFieldValue(REUSABLES.TOPIC, e.value);\n              formik.setFieldValue(REUSABLES.SUBTOPIC, undefined);\n              formik.setFieldError(REUSABLES.SUBTOPIC, undefined);\n\n              setSelectedTopic(topics.find((topic) => topic.value === e.value));\n              setSelectedSubtopic(null);\n            }}\n            value={\n              loadingTopics\n                ? AI_TOOLS_LOADING_DEFAULTS.value\n                : formik.values.topic\n            }\n          />\n        )}\n        {selectedTopic?.data && !disableFields && (\n          <Select\n            errorMessage={formik.errors.subtopic}\n            id={REUSABLES.SUBTOPIC}\n            isDisabled={loading || disableFields}\n            isSearchable\n            isControlled\n            labelText={\n              selectedTopic.labelText ??\n              pluralize(formik.values.topic, 1, false)\n            }\n            name={REUSABLES.SUBTOPIC}\n            options={selectedTopic.data}\n            placeholder={!disableFields ? \"Select one\" : \"\"}\n            onChange={(e) => {\n              formik.setFieldValue(REUSABLES.SUBTOPIC, e.value);\n              setSelectedSubtopic(\n                selectedTopic.data.find((topic) => topic.value === e.value)\n              );\n            }}\n            value={formik.values.subtopic}\n          />\n        )}\n      </AIFormLayout>\n      <ChatArea messages={messages} />\n    </AIToolsLayout>\n  );\n};\n\nDiscussionQuestions.propTypes = {\n  submissionPath: PropTypes.string,\n  aiAnswersCompletePath: PropTypes.string,\n  locked: PropTypes.bool,\n  upgradeable: PropTypes.bool,\n  options: PropTypes.arrayOf(\n    PropTypes.shape({\n      name: PropTypes.string,\n      value: PropTypes.string,\n    })\n  ),\n  questionMinimum: PropTypes.number,\n  quotaRemaining: PropTypes.number.isRequired,\n  resetDate: PropTypes.string,\n  signupPath: PropTypes.string,\n};\n\nDiscussionQuestions.defaultProps = {\n  submissionPath: \"/ai/discussion-question-generator\",\n  aiAnswersCompletePath: \"/ai_answers/complete\",\n  locked: false,\n  upgradeable: false,\n  options: [],\n  questionMinimum: 25,\n  resetDate: \"\",\n  signupPath: \"/sign-up?focus=teacher\",\n};\n\nexport default DiscussionQuestions;\n","import React, { useState, useEffect } from \"react\";\nimport PropTypes from \"prop-types\";\nimport Select from \"components/shared/Select\";\nimport ChatArea from \"components/ai_tools/ChatArea\";\nimport { useFormik } from \"formik\";\nimport * as Yup from \"yup\";\nimport AIToolsLayout from \"./layout/AIToolsLayout\";\nimport {\n  AI_TOOL_CHANNELS,\n  AI_TOOL_NAMES,\n  AI_TOOLS_LOADING_DEFAULTS,\n  REUSABLES,\n} from \"./constants\";\nimport useChatMessages from \"./hooks/useChatMessages\";\nimport AIFormLayout from \"./shared/AIForm/AIFormLayout\";\nimport useFormDisableFields from \"./hooks/useFormDisableFields\";\nimport useWindowResizeAndFormCollapse from \"./hooks/useWindowResizeAndFormCollapse\";\n\nconst EssayPrompts = (props) => {\n  const {\n    quotaRemaining: quotaFromProps,\n    locked,\n    upgradeable,\n    signupPath,\n    submissionPath,\n    aiAnswersCompletePath,\n    options,\n  } = props;\n\n  const validationSchema = Yup.object().shape({\n    title: Yup.string().required(\"Please select your title\"),\n    topic: Yup.string().when(\"title\", (title) => {\n      if (title) {\n        return Yup.string().required(\"Please select your topic\");\n      }\n    }),\n  });\n\n  const [loadingTopics, setLoadingTopics] = useState(false);\n  const [topics, setTopics] = useState();\n  const [selectedTopic, setSelectedTopic] = useState();\n  const { isLessThanSmallBreakpoint, collapsed, setCollapsed } =\n    useWindowResizeAndFormCollapse();\n\n  const formik = useFormik({\n    initialValues: {\n      title: prevSlug || \"\",\n      topic: \"\",\n    },\n    validateOnChange: false,\n    validateOnBlur: false,\n    validationSchema,\n    onSubmit: (values) => {\n      validationSchema\n        .validate(values, { abortEarly: false })\n        .then(() => {\n          handleQuizDiscussionEssayPrompt(values);\n          if (isLessThanSmallBreakpoint) {\n            setCollapsed(true);\n          }\n        })\n        .catch((errors) => {\n          formik.setErrors(errors);\n        });\n    },\n  });\n\n  const {\n    loading,\n    quotaRemaining,\n    messages,\n    prevSlug,\n    handleQuizDiscussionEssayPrompt,\n  } = useChatMessages({\n    submissionPath,\n    aiAnswersCompletePath,\n    locked,\n    upgradeable,\n    signupPath,\n    quotaFromProps,\n    toolName: AI_TOOL_NAMES.ESSAY_PROMPTS,\n    eventCategory: \"Essay Prompts Generator\",\n    channel: AI_TOOL_CHANNELS.ESSAY_PROMPTS,\n    messageText: selectedTopic?.messageText,\n    formik,\n  });\n\n  const { disableFields } = useFormDisableFields(locked, quotaRemaining);\n\n  const handleError = (timeoutRef) => {\n    clearTimeout(timeoutRef);\n    setLoadingTopics(false);\n    setTopics([]);\n    formik.setFieldError(\"topic\", \"Data request failed. Please try again.\");\n  };\n\n  const fetchDropdownContent = (guidePath) => {\n    setTopics();\n    setSelectedTopic(null);\n    const loadingTimeout = setTimeout(() => {\n      setTopics([]);\n      setLoadingTopics(true);\n    }, 1000);\n\n    fetch(guidePath, {\n      method: \"GET\",\n    })\n      .then((response) => {\n        if (!response.ok) {\n          handleError(loadingTimeout);\n        } else {\n          return response.json();\n        }\n      })\n      .then((data) => {\n        clearTimeout(loadingTimeout);\n        setTopics(data.topics);\n        setLoadingTopics(false);\n      })\n      .catch((error) => {\n        handleError(loadingTimeout);\n        console.error(\"Error fetching dropdown content:\", error);\n      });\n  };\n\n  useEffect(() => {\n    formik.setFieldValue(\"title\", prevSlug);\n  }, [prevSlug]);\n\n  return (\n    <AIToolsLayout>\n      <AIFormLayout\n        {...props}\n        collapsed={collapsed}\n        isLessThanSmallBreakpoint={isLessThanSmallBreakpoint}\n        setCollapsed={setCollapsed}\n        toolName={AI_TOOL_NAMES.ESSAY_PROMPTS}\n        loading={loading}\n        storageKey=\"essayPrompts\"\n        quotaRemaining={quotaRemaining}\n        formik={formik}\n      >\n        <Select\n          errorMessage={formik.errors.title}\n          id={REUSABLES.TITLE}\n          isDisabled={loading || disableFields}\n          isSearchable\n          labelText=\"Title\"\n          name={REUSABLES.TITLE}\n          options={options}\n          placeholder={!disableFields ? \"e.g. Hamlet (Shakespeare)\" : \"\"}\n          onChange={(e) => {\n            formik.setFieldValue(REUSABLES.TITLE, e.value);\n            formik.setFieldValue(REUSABLES.TOPIC, undefined);\n            formik.setFieldError(REUSABLES.TOPIC, undefined);\n            fetchDropdownContent(e.guide_path);\n          }}\n          value={formik.values.title}\n        />\n        {topics && !disableFields && (\n          <Select\n            errorMessage={\n              loadingTopics && formik.errors.topic\n                ? \"Loading, select one when complete\"\n                : formik.errors.topic\n            }\n            id={REUSABLES.TOPIC}\n            isDisabled={loadingTopics || loading || disableFields}\n            isSearchable\n            isControlled\n            isLoading={loadingTopics}\n            labelText=\"Topic\"\n            name={REUSABLES.TOPIC}\n            options={loadingTopics ? [AI_TOOLS_LOADING_DEFAULTS] : topics}\n            placeholder={!disableFields ? \"e.g. Themes\" : \"\"}\n            onChange={(e) => {\n              formik.setFieldValue(REUSABLES.TOPIC, e.value);\n\n              setSelectedTopic(topics.find((topic) => topic.value === e.value));\n            }}\n            value={\n              loadingTopics\n                ? AI_TOOLS_LOADING_DEFAULTS.value\n                : formik.values.topic\n            }\n          />\n        )}\n      </AIFormLayout>\n      <ChatArea messages={messages} />\n    </AIToolsLayout>\n  );\n};\n\nEssayPrompts.propTypes = {\n  submissionPath: PropTypes.string,\n  aiAnswersCompletePath: PropTypes.string,\n  locked: PropTypes.bool,\n  upgradeable: PropTypes.bool,\n  options: PropTypes.arrayOf(\n    PropTypes.shape({\n      name: PropTypes.string,\n      value: PropTypes.string,\n    })\n  ),\n  questionMinimum: PropTypes.number,\n  quotaRemaining: PropTypes.number.isRequired,\n  resetDate: PropTypes.string,\n  signupPath: PropTypes.string,\n};\n\nEssayPrompts.defaultProps = {\n  submissionPath: \"/ai/essay-prompt-generator\",\n  aiAnswersCompletePath: \"/ai_answers/complete\",\n  locked: false,\n  upgradeable: false,\n  options: [],\n  questionMinimum: 25,\n  resetDate: \"\",\n  signupPath: \"/sign-up?focus=teacher\",\n};\n\nexport default EssayPrompts;\n","import React, { useRef } from \"react\";\nimport PropTypes from \"prop-types\";\nimport { Formik, yupToFormErrors } from \"formik\";\nimport * as Yup from \"yup\";\nimport InputTextCounter from \"components/shared/InputTextCounter\";\nimport helpers from \"helpers/base\";\n\nconst sessionStorageKey = \"inContentAskLitchartsAi\";\n\nconst validationSchema = Yup.object().shape({\n  question: Yup.string()\n    .required(\"25 characters required\")\n    .min(25, \"25 characters required\")\n    .max(300, \"Over max character limit\"),\n  resource: Yup.string(),\n});\n\nconst InContentAIForm = (props) => {\n  const {\n    loading,\n    locked,\n    onSubmit,\n    questionMinimum,\n    quotaRemaining,\n    resetText,\n    resource,\n    signupPath,\n    values,\n  } = props;\n\n  const formRef = useRef(null);\n\n  const scrollAboveMobileKeyboard = () => {\n    // Keeps iPhone keyboard from covering textarea.\n    if (isSmallWindow() && helpers.isMobileAgent()) {\n      const form = formRef.current;\n\n      // Footer height minus a bit so we're not right up against the edge\n      const footerHeight = document.querySelector(\".footer\").clientHeight - 10;\n      window.scrollTo({\n        top: form.offsetTop + form.offsetHeight - footerHeight,\n        behavior: \"smooth\",\n      });\n    }\n  };\n\n  const isSmallWindow = () => {\n    return $(\".context-switch-banner:visible\").length;\n  };\n\n  const disableFields = !locked && quotaRemaining === 0;\n\n  const unpackValueFromStorage = (key) => {\n    const storageKey = `${sessionStorageKey}:${key}`;\n    const storedValue = sessionStorage.getItem(storageKey) || \"\";\n\n    sessionStorage.removeItem(storageKey);\n\n    return storedValue;\n  };\n\n  const initialValues = {\n    question: !disableFields\n      ? unpackValueFromStorage(\"question\") || values.question\n      : \"\",\n    title: !disableFields ? unpackValueFromStorage(\"title\") || resource : \"\",\n  };\n\n  const storeFieldForReload = (key, value) => {\n    if (locked && !disableFields) {\n      const storageKey = `${sessionStorageKey}:${key}`;\n      sessionStorage.setItem(storageKey, value);\n    }\n  };\n\n  const handleSubmit = (formValues) => {\n    // Locked, redirect to sales page\n    if (locked && !disableFields) {\n      window.location.href = signupPath;\n      return;\n    }\n\n    // pass the values up to the parent to handle submission\n    onSubmit(formValues);\n  };\n\n  const validateForm = async (formValues) => {\n    let yupFormErrors = {};\n\n    if (locked) {\n      return yupFormErrors;\n    }\n\n    try {\n      await validationSchema.validate(formValues, { abortEarly: false });\n    } catch (e) {\n      yupFormErrors = yupToFormErrors(e);\n    }\n\n    return yupFormErrors;\n  };\n\n  // const amplitudeSignupAttr = () => {\n  //   let attr;\n  //   if (locked && !disableFields) {\n  //     attr = \"aiSignupForm\"; // we're free tier and signing up\n  //   } else {\n  //     attr = \"aiQuestionAsked\"; // we're subbed and asking a question\n  //   }\n  //   attr += isLessThanSmallBreakpoint ? \"Small\" : \"Large\";\n  //   return attr;\n  // };\n\n  return (\n    <Formik\n      initialValues={initialValues}\n      validateOnBlur={false}\n      validateOnChange={false}\n      validateOnMount={false}\n      validate={validateForm}\n      onSubmit={handleSubmit}\n    >\n      {(formik) => (\n        <form\n          ref={formRef}\n          onSubmit={formik.handleSubmit}\n          onFocus={scrollAboveMobileKeyboard}\n          className=\"ai-form--container in-content\"\n        >\n          <div className=\"ai-form--content\">\n            <div className=\"ai-form--body\">\n              {!locked && (\n                <div\n                  className=\"ai-form--banner lc-banner lc-banner-information\"\n                  data-testid=\"ai-form-banner\"\n                >\n                  {resetText}\n                </div>\n              )}\n              <div className=\"ai-form--fields\">\n                <InputTextCounter\n                  disabled={loading || disableFields}\n                  locked={locked}\n                  amplitudeKey={\n                    locked\n                      ? \"AIContentToolSignUpSubmitAttempt\"\n                      : \"AIContentToolSubmit\"\n                  }\n                  hideSubtext={disableFields}\n                  errorMessage={formik.errors.question}\n                  buttonVariant\n                  onSubmit={formik.handleSubmit}\n                  name=\"question\"\n                  min={questionMinimum}\n                  max={300}\n                  onChange={(e) => {\n                    const fieldKey = \"question\";\n                    formik.setFieldError(fieldKey, null);\n                    storeFieldForReload(fieldKey, e.target.value);\n                    formik.setFieldValue(fieldKey, e.target.value);\n                  }}\n                  // eslint-disable-next-line max-len\n                  placeholder={!disableFields ? \"Write your question...\" : \"\"}\n                  value={formik.values.question}\n                />\n              </div>\n            </div>\n          </div>\n        </form>\n      )}\n    </Formik>\n  );\n};\n\nInContentAIForm.propTypes = {\n  loading: PropTypes.bool,\n  locked: PropTypes.bool,\n  onSubmit: PropTypes.func,\n  questionMinimum: PropTypes.number,\n  quotaRemaining: PropTypes.number.isRequired,\n  resetText: PropTypes.string,\n  resource: PropTypes.string,\n  signupPath: PropTypes.string,\n  values: PropTypes.object,\n};\n\nInContentAIForm.defaultProps = {\n  loading: false,\n  locked: false,\n  onSubmit: () => {},\n  questionMinimum: 25,\n  resetText: \"\",\n  resource: null,\n  signupPath: \"/sign-up?focus=teacher\",\n  values: {},\n};\n\nexport default InContentAIForm;\n","import React, { useEffect } from \"react\";\nimport PropTypes from \"prop-types\";\nimport InContentAIForm from \"components/ai_tools/InContentAIForm\";\nimport ChatArea from \"components/ai_tools/ChatArea\";\nimport pluralize from \"pluralize\";\n\nimport {\n  AI_TOOL_CHANNELS,\n  AI_TOOL_NAMES,\n  QUESTION_MINIMUM_LENGTH,\n} from \"./constants\";\nimport useChatMessages from \"./hooks/useChatMessages\";\n\nconst InContentAskLitchartsAI = (props) => {\n  const {\n    quotaRemaining: quotaFromProps,\n    locked,\n    resetDate,\n    resource,\n    resourceTitle,\n    signupPath,\n    submissionPath,\n    aiAnswersCompletePath,\n    inPoetry,\n  } = props;\n  const { loading, quotaRemaining, messages, prevSlug, handleAskAIFormSubmit } =\n    useChatMessages({\n      submissionPath,\n      aiAnswersCompletePath,\n      inContent: true,\n      inPoetry,\n      resourceTitle,\n      locked,\n      upgradeable: false,\n      signupPath,\n      quotaFromProps,\n      eventCategory: \"Ask LitCharts AI on Content Pages\",\n      channel: AI_TOOL_CHANNELS.ASK_AI,\n      toolName: AI_TOOL_NAMES.ASK_AI,\n    });\n\n  useEffect(() => {\n    scrollToolIntoViewOnTap();\n  }, []);\n\n  const scrollToolIntoViewOnTap = () => {\n    // Scrolls AI tool into view when header or body are tapped.\n    const $scrollTarget = $(\".ask-litcharts-ai--in-content-container\");\n    const $tapTarget = $(\".ai-form--header, .chat-area--container\");\n    let offset;\n\n    function scrollToTop(event) {\n      if ($(event.target).is(\"a\")) {\n        return true;\n      }\n\n      let windowOffset = 120;\n      if (inPoetry) {\n        const $toolContainer = $(\"#poems-show__guide__ai-tool__container\");\n        windowOffset = $toolContainer.data().topOffset;\n      }\n\n      if (isSmallWindow()) {\n        offset = $(\".context-switch-banner:visible\").offset().top;\n      } else {\n        offset = $scrollTarget.offset().top - windowOffset;\n      }\n\n      window.scrollTo({\n        top: offset,\n        behavior: \"smooth\",\n      });\n    }\n\n    $tapTarget.on(\"click\", scrollToTop);\n  };\n\n  const isSmallWindow = () => {\n    return $(\".context-switch-banner:visible\").length;\n  };\n\n  const resetText = `${pluralize(\n    \"answers\",\n    quotaRemaining,\n    true\n  )} left (resets on ${resetDate})`;\n\n  return (\n    <div className=\"ask-litcharts-ai--in-content-container\">\n      <div className=\"ai-form--header body-1\">Ask LitCharts AI</div>\n      <ChatArea messages={messages} />\n      {resetDate && quotaRemaining === 0 ? (\n        <div className=\"ask-litcharts-ai--quota-remaining subtitle-2\">\n          <span>{resetText}</span>\n        </div>\n      ) : (\n        <InContentAIForm\n          {...props}\n          loading={loading}\n          onSubmit={handleAskAIFormSubmit}\n          // Note, please read before removing:\n          // This line causes a re-render that clears out the \"Question\" field.\n          key={`quota-remaining-${quotaRemaining}`}\n          resource={resource}\n          resetText={resetText}\n          quotaRemaining={quotaRemaining}\n          questionMinimum={QUESTION_MINIMUM_LENGTH}\n          values={{ title: prevSlug }}\n        />\n      )}\n    </div>\n  );\n};\n\nInContentAskLitchartsAI.propTypes = {\n  submissionPath: PropTypes.string,\n  aiAnswersCompletePath: PropTypes.string,\n  locked: PropTypes.bool,\n  options: PropTypes.arrayOf(\n    PropTypes.shape({\n      name: PropTypes.string,\n      value: PropTypes.string,\n    })\n  ),\n  questionMinimum: PropTypes.number,\n  quotaRemaining: PropTypes.number.isRequired,\n  resetDate: PropTypes.string,\n  resource: PropTypes.string,\n  resourceTitle: PropTypes.string,\n  signupPath: PropTypes.string,\n  inPoetry: PropTypes.bool,\n};\n\nInContentAskLitchartsAI.defaultProps = {\n  submissionPath: \"/ai/ask-litcharts-ai\",\n  aiAnswersCompletePath: \"/ai_answers/complete\",\n  locked: false,\n  options: [],\n  questionMinimum: 25,\n  resetDate: \"\",\n  resource: null,\n  resourceTitle: null,\n  signupPath: \"/sign-up?focus=teacher\",\n  inPoetry: false,\n};\n\nexport default InContentAskLitchartsAI;\n","import React, { useState, useEffect } from \"react\";\nimport PropTypes from \"prop-types\";\nimport Select from \"components/shared/Select\";\nimport ChatArea from \"components/ai_tools/ChatArea\";\nimport { useFormik } from \"formik\";\nimport * as Yup from \"yup\";\nimport pluralize from \"pluralize\";\nimport AIToolsLayout from \"./layout/AIToolsLayout\";\nimport {\n  AI_TOOL_CHANNELS,\n  AI_TOOL_NAMES,\n  AI_TOOLS_LABEL_MAP,\n  AI_TOOLS_LOADING_DEFAULTS,\n  REUSABLES,\n} from \"./constants\";\nimport useChatMessages from \"./hooks/useChatMessages\";\nimport AIFormLayout from \"./shared/AIForm/AIFormLayout\";\nimport useFormDisableFields from \"./hooks/useFormDisableFields\";\nimport useWindowResizeAndFormCollapse from \"./hooks/useWindowResizeAndFormCollapse\";\n\nconst QuizQuestions = (props) => {\n  const {\n    quotaRemaining: quotaFromProps,\n    locked,\n    upgradeable,\n    signupPath,\n    submissionPath,\n    aiAnswersCompletePath,\n    options,\n  } = props;\n\n  const validationSchema = Yup.object().shape({\n    title: Yup.string().required(\"Please select your title\"),\n    topic: Yup.string().when(\"title\", (title) => {\n      if (title) {\n        return Yup.string().required(\"Please select your topic\");\n      }\n    }),\n    subtopic: Yup.string().when(\"topic\", (_) => {\n      if (selectedTopic?.data) {\n        return Yup.string().required(\n          `Please select your ${\n            AI_TOOLS_LABEL_MAP[selectedTopic.label] ??\n            selectedTopic.labelText?.toLowerCase()\n          }`\n        );\n      }\n    }),\n  });\n\n  const [loadingTopics, setLoadingTopics] = useState(false);\n  const [topics, setTopics] = useState();\n  const [selectedTopic, setSelectedTopic] = useState();\n  const [selectedSubtopic, setSelectedSubtopic] = useState();\n  const { isLessThanSmallBreakpoint, collapsed, setCollapsed } =\n    useWindowResizeAndFormCollapse();\n\n  const formik = useFormik({\n    initialValues: {\n      title: prevSlug || \"\",\n      topic: \"\",\n      subtopic: \"\",\n    },\n    validateOnChange: false,\n    validateOnBlur: false,\n    validationSchema,\n    onSubmit: (values) => {\n      validationSchema\n        .validate(values, { abortEarly: false })\n        .then(() => {\n          handleQuizDiscussionEssayPrompt(values);\n          if (isLessThanSmallBreakpoint) {\n            setCollapsed(true);\n          }\n        })\n        .catch((errors) => {\n          formik.setErrors(errors);\n        });\n    },\n  });\n\n  const {\n    loading,\n    quotaRemaining,\n    messages,\n    prevSlug,\n    handleQuizDiscussionEssayPrompt,\n  } = useChatMessages({\n    submissionPath,\n    aiAnswersCompletePath,\n    locked,\n    upgradeable,\n    signupPath,\n    quotaFromProps,\n    toolName: AI_TOOL_NAMES.QUIZ_QUESTIONS,\n    eventCategory: \"Quiz Questions Generator\",\n    channel: AI_TOOL_CHANNELS.QUIZ_QUESTIONS,\n    messageText: selectedSubtopic?.messageText ?? selectedTopic?.messageText,\n    formik,\n  });\n\n  const { disableFields } = useFormDisableFields(locked, quotaRemaining);\n\n  const handleError = (timeoutRef) => {\n    clearTimeout(timeoutRef);\n    setLoadingTopics(false);\n    setTopics([]);\n    formik.setFieldError(\"topic\", \"Data request failed. Please try again.\");\n  };\n\n  const fetchDropdownContent = (guidePath) => {\n    setTopics();\n    setSelectedTopic(null);\n    setSelectedSubtopic(null);\n    const loadingTimeout = setTimeout(() => {\n      setTopics([]);\n      setLoadingTopics(true);\n    }, 1000);\n\n    fetch(guidePath, {\n      method: \"GET\",\n    })\n      .then((response) => {\n        if (!response.ok) {\n          handleError(loadingTimeout);\n        } else {\n          return response.json();\n        }\n      })\n      .then((data) => {\n        clearTimeout(loadingTimeout);\n        setTopics(data.topics);\n        setLoadingTopics(false);\n      })\n      .catch((error) => {\n        handleError(loadingTimeout);\n        console.error(\"Error fetching dropdown content:\", error);\n      });\n  };\n\n  useEffect(() => {\n    formik.setFieldValue(\"title\", prevSlug);\n  }, [prevSlug]);\n\n  return (\n    <AIToolsLayout>\n      <AIFormLayout\n        {...props}\n        collapsed={collapsed}\n        isLessThanSmallBreakpoint={isLessThanSmallBreakpoint}\n        setCollapsed={setCollapsed}\n        toolName={AI_TOOL_NAMES.QUIZ_QUESTIONS}\n        loading={loading}\n        storageKey=\"quizQuestions\"\n        quotaRemaining={quotaRemaining}\n        formik={formik}\n      >\n        <Select\n          errorMessage={formik.errors.title}\n          id={REUSABLES.TITLE}\n          isDisabled={loading || disableFields}\n          isSearchable\n          labelText=\"Title\"\n          name={REUSABLES.TITLE}\n          options={options}\n          placeholder={!disableFields ? \"e.g. Hamlet (Shakespeare)\" : \"\"}\n          onChange={(e) => {\n            formik.setFieldValue(REUSABLES.TITLE, e.value);\n            formik.setFieldValue(REUSABLES.TOPIC, undefined);\n            formik.setFieldValue(REUSABLES.SUBTOPIC, undefined);\n            formik.setFieldError(REUSABLES.TOPIC, undefined);\n            formik.setFieldError(REUSABLES.SUBTOPIC, undefined);\n            fetchDropdownContent(e.guide_path);\n          }}\n          value={formik.values.title}\n        />\n        {topics && !disableFields && (\n          <Select\n            errorMessage={\n              loadingTopics && formik.errors.topic\n                ? \"Loading, select one when complete\"\n                : formik.errors.topic\n            }\n            id={REUSABLES.TOPIC}\n            isDisabled={loadingTopics || loading || disableFields}\n            isSearchable\n            isControlled\n            isLoading={loadingTopics}\n            labelText=\"Topic\"\n            name={REUSABLES.TOPIC}\n            options={loadingTopics ? [AI_TOOLS_LOADING_DEFAULTS] : topics}\n            placeholder={!disableFields ? \"e.g. Themes\" : \"\"}\n            onChange={(e) => {\n              formik.setFieldValue(REUSABLES.TOPIC, e.value);\n              formik.setFieldValue(REUSABLES.SUBTOPIC, undefined);\n              formik.setFieldError(REUSABLES.SUBTOPIC, undefined);\n\n              setSelectedTopic(topics.find((topic) => topic.value === e.value));\n              setSelectedSubtopic(null);\n            }}\n            value={\n              loadingTopics\n                ? AI_TOOLS_LOADING_DEFAULTS.value\n                : formik.values.topic\n            }\n          />\n        )}\n        {selectedTopic?.data && !disableFields && (\n          <Select\n            errorMessage={formik.errors.subtopic}\n            id={REUSABLES.SUBTOPIC}\n            isDisabled={loading || disableFields}\n            isSearchable\n            isControlled\n            labelText={\n              selectedTopic.labelText ??\n              pluralize(formik.values.topic, 1, false)\n            }\n            name={REUSABLES.SUBTOPIC}\n            options={selectedTopic.data}\n            placeholder={!disableFields ? \"Select one\" : \"\"}\n            onChange={(e) => {\n              formik.setFieldValue(REUSABLES.SUBTOPIC, e.value);\n              setSelectedSubtopic(\n                selectedTopic.data.find((topic) => topic.value === e.value)\n              );\n            }}\n            value={formik.values.subtopic}\n          />\n        )}\n      </AIFormLayout>\n      <ChatArea messages={messages} />\n    </AIToolsLayout>\n  );\n};\n\nQuizQuestions.propTypes = {\n  submissionPath: PropTypes.string,\n  aiAnswersCompletePath: PropTypes.string,\n  locked: PropTypes.bool,\n  upgradeable: PropTypes.bool,\n  options: PropTypes.arrayOf(\n    PropTypes.shape({\n      name: PropTypes.string,\n      value: PropTypes.string,\n    })\n  ),\n  questionMinimum: PropTypes.number,\n  quotaRemaining: PropTypes.number.isRequired,\n  resetDate: PropTypes.string,\n  signupPath: PropTypes.string,\n};\n\nQuizQuestions.defaultProps = {\n  submissionPath: \"/ai/quiz-question-generator\",\n  aiAnswersCompletePath: \"/ai_answers/complete\",\n  locked: false,\n  upgradeable: false,\n  options: [],\n  questionMinimum: 25,\n  resetDate: \"\",\n  signupPath: \"/sign-up?focus=teacher\",\n};\n\nexport default QuizQuestions;\n","export const AI_ANSWERS_QUOTA = 250;\nexport const QUESTION_MINIMUM_LENGTH = 25;\nexport const AI_TOOLS_ERROR_MESSAGES = {\n  ESSAY_PROMPTS:\n    \"Oops. Something went wrong. This response wasn't counted. Feel free to try again.\",\n  QUIZ_QUESTIONS:\n    \"Oops. Something went wrong. This response wasn't counted. Feel free to try again.\",\n  DISCUSSION_QUESTIONS:\n    \"Oops. Something went wrong. This response wasn't counted. Feel free to try again.\",\n  ASK_AI:\n    \"Oops. Something went wrong. Your remaining number of answers has not been reduced. Feel free to try again.\",\n};\n\nexport const AI_TOOL_CHANNELS = {\n  ESSAY_PROMPTS: \"EssayPromptsChannel\",\n  DISCUSSION_QUESTIONS: \"DiscussionQuestionsChannel\",\n  QUIZ_QUESTIONS: \"QuizQuestionsChannel\",\n  ASK_AI: \"AskAiChannel\",\n};\n\nexport const AI_TOOL_NAMES = {\n  ESSAY_PROMPTS: \"ESSAY_PROMPTS\",\n  DISCUSSION_QUESTIONS: \"DISCUSSION_QUESTIONS\",\n  QUIZ_QUESTIONS: \"QUIZ_QUESTIONS\",\n  ASK_AI: \"ASK_AI\",\n};\n\nexport const REUSABLES = {\n  TITLE: \"title\",\n  TOPIC: \"topic\",\n  SUBTOPIC: \"subtopic\",\n};\n\nexport const AI_TOOLS_LABEL_MAP = {\n  Characters: \"character\",\n  Symbols: \"symbol\",\n  Themes: \"theme\",\n  \"Line-by-Line Analysis\": \"lines\",\n  \"Poetic Devices\": \"poetic device\",\n};\n\nexport const AMPLITUDE_BANNER_DATA_ATTRIBUTES = {\n  [AI_TOOL_NAMES.DISCUSSION_QUESTIONS]: \"discussionQuestionGeneratorBanner\",\n  [AI_TOOL_NAMES.QUIZ_QUESTIONS]: \"quizQuestionGeneratorBanner\",\n  [AI_TOOL_NAMES.ESSAY_PROMPTS]: \"essayPromptGeneratorBanner\",\n  [AI_TOOL_NAMES.ASK_AI]: \"aiSignupBanner\",\n};\n\nexport const AMPLITUDE_QUESTION_ASKED_LARGE_ATTRIBUTES = {\n  [AI_TOOL_NAMES.DISCUSSION_QUESTIONS]: \"discussionQuestionAskedLarge\",\n  [AI_TOOL_NAMES.QUIZ_QUESTIONS]: \"quizQuestionAskedLarge\",\n  [AI_TOOL_NAMES.ESSAY_PROMPTS]: \"essayPromptAskedLarge\",\n  [AI_TOOL_NAMES.ASK_AI]: \"aiQuestionAskedLarge\",\n};\n\nexport const AMPLITUDE_QUESTION_ASKED_SMALL_ATTRIBUTES = {\n  [AI_TOOL_NAMES.DISCUSSION_QUESTIONS]: \"discussionQuestionAskedSmall\",\n  [AI_TOOL_NAMES.QUIZ_QUESTIONS]: \"quizQuestionAskedSmall\",\n  [AI_TOOL_NAMES.ESSAY_PROMPTS]: \"essayPromptAskedSmall\",\n  [AI_TOOL_NAMES.ASK_AI]: \"aiQuestionAskedSmall\",\n};\n\nexport const AMPLITUDE_QUESTION_ASKED_SMALL_COLLAPSED_ATTRIBUTES = {\n  [AI_TOOL_NAMES.DISCUSSION_QUESTIONS]: \"discussionQuestionAskedSmallCollapsed\",\n  [AI_TOOL_NAMES.QUIZ_QUESTIONS]: \"quizQuestionAskedSmallCollapsed\",\n  [AI_TOOL_NAMES.ESSAY_PROMPTS]: \"essayPromptAskedSmallCollapsed\",\n  [AI_TOOL_NAMES.ASK_AI]: \"aiQuestionAskedSmallCollapsed\",\n};\n\nexport const AMPLITUDE_SIGNUP_INTRO_CHAT_ATTRIBUTES = {\n  [AI_TOOL_NAMES.DISCUSSION_QUESTIONS]: \"discussionQuestionSignupIntroChat\",\n  [AI_TOOL_NAMES.QUIZ_QUESTIONS]: \"quizQuestionSignupIntroChat\",\n  [AI_TOOL_NAMES.ESSAY_PROMPTS]: \"essayPromptSignupIntroChat\",\n  [AI_TOOL_NAMES.ASK_AI]: \"aiSignupIntroChat\",\n};\n\nexport const AMPLITUDE_SIGNUP_FORM_LARGE_ATTRIBUTES = {\n  [AI_TOOL_NAMES.DISCUSSION_QUESTIONS]: \"discussionQuestionSignupFormLarge\",\n  [AI_TOOL_NAMES.QUIZ_QUESTIONS]: \"quizQuestionSignupFormLarge\",\n  [AI_TOOL_NAMES.ESSAY_PROMPTS]: \"essayPromptSignupFormLarge\",\n  [AI_TOOL_NAMES.ASK_AI]: \"aiSignupFormLarge\",\n};\n\nexport const AMPLITUDE_SIGNUP_FORM_SMALL_COLLAPSED_ATTRIBUTES = {\n  [AI_TOOL_NAMES.DISCUSSION_QUESTIONS]:\n    \"discussionQuestionSignupFormSmallCollapsed\",\n  [AI_TOOL_NAMES.QUIZ_QUESTIONS]: \"quizQuestionSignupFormSmallCollapsed\",\n  [AI_TOOL_NAMES.ESSAY_PROMPTS]: \"essayPromptSignupFormSmallCollapsed\",\n  [AI_TOOL_NAMES.ASK_AI]: \"aiSignupFormSmallCollapsed\",\n};\n\nexport const AI_TOOLS_LOADING_DEFAULTS = { label: \"Loading...\", value: \"1\" };\n","import React, { useState, useEffect, useRef } from \"react\";\nimport consumer from \"channels/consumer\";\nimport ReactHtmlParser from \"react-html-parser\";\nimport {\n  serverBubbleConfig,\n  userBubbleConfig,\n  DEFAULT_STATE,\n  LOADING_STATE,\n  STREAMING_STATE,\n} from \"components/ai_tools/ChatBubble\";\nimport fetch from \"lib/shared/fetch\";\nimport { logAiEvent } from \"lib/shared/events\";\nimport { findIndex } from \"lodash\";\nimport { AI_TOOLS_ERROR_MESSAGES } from \"../constants\";\nimport CopyAndSaveReminder from \"../shared/ChatArea/CopyAndSaveReminder\";\nimport InitialMessage from \"../shared/ChatArea/InitialMessage\";\n\nconst useChatMessages = ({\n  submissionPath,\n  aiAnswersCompletePath,\n  locked,\n  upgradeable,\n  inContent,\n  resourceTitle,\n  signupPath,\n  quotaFromProps,\n  channel,\n  eventCategory,\n  toolName,\n  messageText,\n}) => {\n  // The order matters for these state initializers\n  const [loading, setLoading] = useState(false);\n  const [quotaRemaining, setQuotaRemaining] = useState(quotaFromProps);\n\n  const initialMessage = serverBubbleConfig({\n    children: (\n      <InitialMessage\n        toolName={toolName}\n        locked={locked}\n        inContent={inContent}\n        resourceTitle={resourceTitle}\n        upgradeable={upgradeable}\n        quotaRemaining={quotaRemaining}\n        signupPath={signupPath}\n      />\n    ),\n    slideUp: false,\n  });\n\n  const [messages, setMessages] = useState([initialMessage]);\n  const [prevSlug, setPrevSlug] = useState();\n  const messagesCallbacks = useRef([]);\n\n  const handleError = () => {\n    setMessages((prevMessages) => {\n      const copyArray = [...prevMessages];\n      const previousMessage = copyArray.pop();\n      const updatedMessage = {\n        ...previousMessage,\n        children: AI_TOOLS_ERROR_MESSAGES[toolName],\n        streamState: DEFAULT_STATE,\n      };\n\n      return [...copyArray, updatedMessage];\n    });\n    setLoading(false);\n  };\n\n  const handleRedirect = (json) => {\n    if (json?.redirect_to) {\n      window.location.replace(json.redirect_to);\n    }\n  };\n\n  const handleAskAIFormSubmit = ({ question, title: slug }) => {\n    setLoading(true);\n    messagesCallbacks.current.push(() => {\n      setMessages((prevMessages) => {\n        const newServerMessage = serverBubbleConfig({\n          streamState: LOADING_STATE,\n        });\n\n        return [...prevMessages, newServerMessage];\n      });\n    });\n\n    messagesCallbacks.current.push(() => {\n      fetch(submissionPath, {\n        method: \"POST\",\n        body: JSON.stringify({\n          resource: slug,\n          question,\n        }),\n      })\n        .then((response) => {\n          if (!response.ok) {\n            handleError();\n          } else {\n            return response.json();\n          }\n        })\n        .then(handleRedirect)\n        .catch(handleFetchError);\n    });\n\n    setPrevSlug(slug);\n    setMessages((prevMessages) => {\n      const newUserMessage = userBubbleConfig({ children: question });\n      return [...prevMessages, newUserMessage];\n    });\n  };\n\n  const handleQuizDiscussionEssayPrompt = ({\n    topic,\n    subtopic,\n    title: slug,\n  }) => {\n    setLoading(true);\n    messagesCallbacks.current.push(() => {\n      setMessages((prevMessages) => {\n        const newServerMessage = serverBubbleConfig({\n          streamState: LOADING_STATE,\n        });\n\n        return [...prevMessages, newServerMessage];\n      });\n    });\n\n    messagesCallbacks.current.push(() => {\n      fetch(submissionPath, {\n        method: \"POST\",\n        body: JSON.stringify({\n          resource: slug,\n          topic,\n          subtopic,\n        }),\n      })\n        .then((response) => {\n          // we're logged out somehow, like in another tab\n          if (response.status === 401) {\n            window.location.href = signupPath;\n            return;\n          }\n\n          if (!response.ok) {\n            handleError();\n          } else {\n            return response.json();\n          }\n        })\n        .then(handleRedirect)\n        .catch(handleFetchError);\n    });\n\n    setPrevSlug(slug);\n    setMessages((prevMessages) => {\n      const newUserMessage = userBubbleConfig({\n        children: ReactHtmlParser(messageText),\n      });\n      return [...prevMessages, newUserMessage];\n    });\n  };\n\n  const handleBroadcastReceived = (data) => {\n    if (data.stop) {\n      setLoading(false);\n      setMessages((prevMessages) => {\n        const copyArray = [...prevMessages];\n        const previousMessageIndex = findIndex(copyArray, {\n          aiAnswerId: data.ai_answer_id,\n        });\n\n        // We need this here to prevent the case of a user having two browsers/windows open with the same tool\n        // and having the data stream to both windows.  Previously, we were adding the <CopyAndSaveReminder />\n        // to both windows even though only one sent the message.  This makes sure to only handle the window in\n        // which the message came from.\n        if (previousMessageIndex !== -1) {\n          copyArray[previousMessageIndex].children = ReactHtmlParser(data.body);\n          copyArray[previousMessageIndex].streamState = DEFAULT_STATE;\n          messagesCallbacks.current.push(() => {\n            const reminderMessage = serverBubbleConfig({\n              children: <CopyAndSaveReminder />,\n            });\n\n            setMessages((prevMsgs) => [...prevMsgs, reminderMessage]);\n          });\n        }\n\n        return copyArray;\n      });\n      setQuotaRemaining((prev) => prev - 1);\n\n      if (data.ai_answer_id) {\n        fetch(aiAnswersCompletePath, {\n          method: \"POST\",\n          body: JSON.stringify({\n            ai_answer_id: data.ai_answer_id,\n          }),\n        })\n          .then((response) => {\n            if (!response.ok) {\n              handleError();\n            }\n          })\n          .catch(handleFetchError);\n      }\n      logAiEvent(\"AI Response Completed\", eventCategory);\n    } else if (data.error) {\n      handleError();\n    } else {\n      setMessages((prevMessages) => {\n        const copyArray = [...prevMessages];\n\n        let previousMessageIndex = findIndex(copyArray, {\n          aiAnswerId: data.ai_answer_id,\n        });\n\n        if (previousMessageIndex === -1) {\n          previousMessageIndex = copyArray.length - 1;\n        }\n\n        const previousMessage = copyArray[previousMessageIndex];\n\n        // Previous answer already completed with stop signal, do nothing\n        if (\n          previousMessageIndex !== -1 &&\n          previousMessage.streamState === DEFAULT_STATE\n        ) {\n          return prevMessages;\n        }\n\n        if (previousMessage.streamState === LOADING_STATE) {\n          logAiEvent(\"AI Response Started\", eventCategory);\n        }\n\n        const updatedMessage = {\n          ...previousMessage,\n          streamState: STREAMING_STATE,\n          aiAnswerId: data.ai_answer_id,\n          children: ReactHtmlParser(data.body),\n          slideUp: false,\n        };\n\n        copyArray.splice(previousMessageIndex, 1, updatedMessage);\n\n        return copyArray;\n      });\n    }\n  };\n\n  useEffect(() => {\n    if (locked) return;\n    // Connect to the channel\n    consumer.subscriptions.create(\n      {\n        channel,\n      },\n      {\n        connected: () => console.log(\"connected\"),\n        disconnected: () => console.log(\"disconnected\"),\n        received: handleBroadcastReceived,\n      }\n    );\n\n    return () => {\n      consumer.disconnect();\n    };\n  }, []);\n\n  useEffect(() => {\n    messagesCallbacks.current.forEach((callback) => {\n      setTimeout(callback, 500);\n    });\n    messagesCallbacks.current = [];\n  }, [messages]);\n\n  const handleFetchError = () => {\n    // This block is executed if there is a network error or if the request fails\n    // The catch block captures exceptions thrown during the fetch operation,\n    // which could occur if the client is offline or if there are network connectivity issues.\n    handleError();\n  };\n\n  return {\n    loading,\n    quotaRemaining,\n    messages,\n    prevSlug,\n    handleAskAIFormSubmit,\n    handleQuizDiscussionEssayPrompt,\n  };\n};\n\nexport default useChatMessages;\n","const useFormDisableFields = (locked, quotaRemaining) => {\n  const disableFields = !locked && quotaRemaining === 0;\n  return { disableFields };\n};\n\nexport default useFormDisableFields;\n","import { useState, useEffect } from \"react\";\nimport pluralize from \"pluralize\";\nimport { AI_TOOL_NAMES } from \"../constants\";\n\nconst useFormText = (\n  toolName,\n  locked,\n  quotaRemaining,\n  collapsed,\n  isLessThanSmallBreakpoint,\n  resetDate\n) => {\n  const [buttonText, setButtonText] = useState(\"\");\n  const [resetText, setResetText] = useState(\"\");\n  const [submittingButtonText, setsubmittingButtonText] = useState(\"\");\n\n  let buttonRemainingText = \"\";\n  let buttonCTA = \"\";\n\n  useEffect(() => {\n    switch (toolName) {\n      case AI_TOOL_NAMES.QUIZ_QUESTIONS:\n      case AI_TOOL_NAMES.DISCUSSION_QUESTIONS:\n        buttonRemainingText =\n          !locked && quotaRemaining > 0\n            ? ` (${pluralize(\"use\", quotaRemaining, true)} left)`\n            : \"\";\n        buttonCTA = \"Generate Questions\";\n        if (quotaRemaining > 0 && !collapsed && isLessThanSmallBreakpoint) {\n          buttonCTA = \"Submit\";\n        }\n        setResetText(\n          `${pluralize(\n            \"use\",\n            quotaRemaining,\n            true\n          )} of this tool left (resets on ${resetDate})`\n        );\n        setsubmittingButtonText(\"Generating...\");\n\n        break;\n      case AI_TOOL_NAMES.ESSAY_PROMPTS:\n        buttonRemainingText =\n          !locked && quotaRemaining > 0\n            ? ` (${pluralize(\"use\", quotaRemaining, true)} left)`\n            : \"\";\n        buttonCTA = \"Generate Prompts\";\n        if (quotaRemaining > 0 && !collapsed && isLessThanSmallBreakpoint) {\n          buttonCTA = \"Submit\";\n        }\n        setResetText(\n          `${pluralize(\n            \"use\",\n            quotaRemaining,\n            true\n          )} of this tool left (resets on ${resetDate})`\n        );\n        setsubmittingButtonText(\"Generating...\");\n\n        break;\n      case AI_TOOL_NAMES.ASK_AI:\n        buttonRemainingText =\n          !locked && quotaRemaining > 0 ? ` (${quotaRemaining} left)` : \"\";\n        buttonCTA = \"Ask LitCharts AI\";\n        if (quotaRemaining > 0 && !collapsed && isLessThanSmallBreakpoint) {\n          buttonCTA = \"Submit\";\n        } else if (quotaRemaining > 0 && quotaRemaining < 25) {\n          buttonCTA = \"Ask New Question\";\n        }\n        setResetText(\n          `${pluralize(\n            \"answer\",\n            quotaRemaining,\n            true\n          )} left (resets on ${resetDate})`\n        );\n        setsubmittingButtonText(\"Answering...\");\n        break;\n      default:\n        setButtonText(\"\");\n        setResetText(\"\");\n        return;\n    }\n\n    setButtonText(buttonCTA + buttonRemainingText);\n  }, [\n    toolName,\n    locked,\n    quotaRemaining,\n    collapsed,\n    isLessThanSmallBreakpoint,\n    resetDate,\n  ]);\n\n  return { submittingButtonText, buttonText, resetText };\n};\n\nexport default useFormText;\n","const useSessionStorage = (sessionStorageKey, locked, disableFields) => {\n  const unpackValueFromStorage = (key) => {\n    const storageKey = `${sessionStorageKey}:${key}`;\n    const storedValue = sessionStorage.getItem(storageKey) || \"\";\n    sessionStorage.removeItem(storageKey);\n    return storedValue;\n  };\n\n  const storeFieldForReload = (key, value) => {\n    if (locked && !disableFields) {\n      const storageKey = `${sessionStorageKey}:${key}`;\n      sessionStorage.setItem(storageKey, value);\n    }\n  };\n\n  return [unpackValueFromStorage, storeFieldForReload];\n};\n\nexport default useSessionStorage;\n","import { useState, useEffect, useLayoutEffect } from \"react\";\nimport { SM_PIXEL_MIN, XS_PIXEL_MAX } from \"constants/breakpoints\";\n\nconst useWindowResizeAndFormCollapse = () => {\n  const [isLessThanSmallBreakpoint, setIsLessThanSmallBreakpoint] =\n    useState(true);\n  const [collapsed, setCollapsed] = useState(true);\n\n  const resizeHandler = () => {\n    if (window.matchMedia(`(min-width: ${SM_PIXEL_MIN}px)`).matches) {\n      setIsLessThanSmallBreakpoint(false);\n    } else if (window.matchMedia(`(max-width: ${XS_PIXEL_MAX}px)`).matches) {\n      setIsLessThanSmallBreakpoint(true);\n    }\n  };\n\n  useEffect(() => {\n    resizeHandler();\n    window.addEventListener(\"resize\", resizeHandler);\n    return () => {\n      window.removeEventListener(\"resize\", resizeHandler);\n    };\n  }, []);\n\n  useEffect(() => {\n    // Prevent the body from scrolling underneath the form field when on small screen\n    // and expanded\n    if (!collapsed && isLessThanSmallBreakpoint) {\n      document.body.style.overflow = \"hidden\";\n    } else {\n      document.body.style.overflow = \"auto\";\n    }\n  }, [collapsed, isLessThanSmallBreakpoint]);\n\n  useLayoutEffect(() => {\n    setCollapsed(isLessThanSmallBreakpoint);\n  }, [isLessThanSmallBreakpoint]);\n\n  return { isLessThanSmallBreakpoint, setCollapsed, collapsed };\n};\n\nexport default useWindowResizeAndFormCollapse;\n","import React, { useLayoutEffect, useRef } from \"react\";\n\n// Note: The props should consist of 2 children\n// Left Pane Child: This will be the form\n// Right Pane Child: This is the chat area\n// See AskLitchartsAI.jsx to see this in use.\n\nconst AIToolsLayout = (props) => {\n  const layoutRef = useRef();\n  const resizeHandler = () => {\n    const layoutBanner = document.querySelector(\"body > .lc-banner\");\n    const panelBanner = document.querySelector(\"#panel > .lc-banner\");\n    const promoBanner = document.querySelector(\"#sticky-mobile-header-promo\");\n    const header = document.querySelector(\".header\");\n    const layoutBannerHeight = layoutBanner?.offsetHeight || 0;\n    const panelBannerHeight = panelBanner?.offsetHeight || 0;\n    const promoBannerHeight = promoBanner?.offsetHeight || 0;\n    const headerHeight = header.offsetHeight;\n\n    const offset =\n      headerHeight + layoutBannerHeight + panelBannerHeight + promoBannerHeight;\n\n    layoutRef.current.style.height = `calc(100dvh -  ${offset}px)`;\n  };\n  useLayoutEffect(() => {\n    resizeHandler();\n\n    window.addEventListener(\"resize\", resizeHandler);\n    return () => {\n      window.removeEventListener(\"resize\", resizeHandler);\n    };\n  }, []);\n  return (\n    <div className=\"ai-tools--layout\" ref={layoutRef}>\n      <div className=\"ask-litcharts-ai--container\">\n        <div className=\"ask-litcharts-ai--form\">{props.children[0]}</div>\n        <div className=\"ask-litcharts-ai--chat_area\">{props.children[1]}</div>\n      </div>\n    </div>\n  );\n};\n\nexport default AIToolsLayout;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport classnames from \"classnames\";\nimport IconButton from \"components/shared/IconButton\";\nimport useFormDisableFields from \"../../hooks/useFormDisableFields\";\nimport useFormText from \"../../hooks/useFormText\";\nimport {\n  AI_TOOL_NAMES,\n  AMPLITUDE_QUESTION_ASKED_LARGE_ATTRIBUTES,\n  AMPLITUDE_QUESTION_ASKED_SMALL_ATTRIBUTES,\n  AMPLITUDE_QUESTION_ASKED_SMALL_COLLAPSED_ATTRIBUTES,\n  AMPLITUDE_SIGNUP_FORM_LARGE_ATTRIBUTES,\n  AMPLITUDE_SIGNUP_FORM_SMALL_COLLAPSED_ATTRIBUTES,\n} from \"../../constants\";\nimport AIFormTitle from \"./AIFormTitle\";\nimport LockedInformationBanner from \"./LockedInformationBanner\";\nimport AIFormSubheading from \"./AIFormSubheading\";\nimport DisclaimerText from \"./DisclaimerText\";\n\nconst AIFormLayout = (props) => {\n  const {\n    loading,\n    locked,\n    quotaRemaining,\n    resetDate,\n    signupPath,\n    toolName,\n    formik,\n    isLessThanSmallBreakpoint,\n    collapsed,\n    setCollapsed,\n    children,\n  } = props;\n\n  const { disableFields } = useFormDisableFields(locked, quotaRemaining);\n  const { buttonText, resetText, submittingButtonText } = useFormText(\n    toolName,\n    locked,\n    quotaRemaining,\n    collapsed,\n    isLessThanSmallBreakpoint,\n    resetDate\n  );\n  const showDisclaimerText = !collapsed || (collapsed && quotaRemaining === 0);\n\n  const handleSubmit = (e) => {\n    e.preventDefault();\n    // Locked, redirect to sales page\n    if (locked && !disableFields) {\n      window.location.href = signupPath;\n      return;\n    }\n\n    // We're in a collapsed state (smaller breakpoints)\n    // Expand the form\n    if (collapsed) {\n      setCollapsed(false);\n      return;\n    }\n\n    formik.handleSubmit();\n  };\n\n  const amplitudeSignupAttr = () => {\n    if (locked && !disableFields) {\n      if (isLessThanSmallBreakpoint) {\n        return collapsed\n          ? AMPLITUDE_SIGNUP_FORM_SMALL_COLLAPSED_ATTRIBUTES[toolName]\n          : AMPLITUDE_SIGNUP_FORM_LARGE_ATTRIBUTES[toolName];\n      }\n      return AMPLITUDE_SIGNUP_FORM_LARGE_ATTRIBUTES[toolName];\n    }\n    if (isLessThanSmallBreakpoint) {\n      return collapsed\n        ? AMPLITUDE_QUESTION_ASKED_SMALL_COLLAPSED_ATTRIBUTES[toolName]\n        : AMPLITUDE_QUESTION_ASKED_SMALL_ATTRIBUTES[toolName];\n    }\n    return AMPLITUDE_QUESTION_ASKED_LARGE_ATTRIBUTES[toolName];\n  };\n\n  return (\n    <form\n      onSubmit={handleSubmit}\n      className={classnames(\"ai-form--container\", { collapsed })}\n    >\n      <div className=\"ai-form--header\">\n        <AIFormTitle toolName={toolName} />\n        <AIFormSubheading toolName={toolName} />\n        <IconButton\n          iconClass=\"lc-icon-close lc-icon-xs\"\n          btnClass=\"btn-lg btn-borderless-alt\"\n          onClick={() => setCollapsed(true)}\n        />\n      </div>\n      <div className=\"ai-form--content\">\n        <div className=\"ai-form--body\">\n          <div\n            className=\"ai-form--banner lc-banner lc-banner-information\"\n            data-testid=\"ai-form-banner\"\n          >\n            {locked ? (\n              <LockedInformationBanner\n                toolName={toolName}\n                signupPath={signupPath}\n              />\n            ) : (\n              resetText\n            )}\n          </div>\n          <div className=\"ai-form--fields\">{children}</div>\n        </div>\n        <div className=\"ai-form--footer\">\n          <button\n            className={`ai-form--submit btn btn-a-plus button-1 ${\n              isLessThanSmallBreakpoint ? \"btn-lg\" : \"btn-block\"\n            }`}\n            data-testid=\"ai-form-submit\"\n            data-amplitude={amplitudeSignupAttr()}\n            disabled={disableFields || loading}\n            type=\"submit\"\n          >\n            {locked && (\n              <i\n                className=\"lc-icon lc-icon-lock-filled lc-icon-sm\"\n                data-testid=\"lock-icon\"\n              />\n            )}\n            {loading ? submittingButtonText : buttonText}\n          </button>\n          {!locked && showDisclaimerText && (\n            <div className=\"subtitle-1 tw-flex tw-pt-2 tw-text-gray-tint-40\">\n              {collapsed && quotaRemaining === 0 && resetText}\n              {!collapsed && (\n                <DisclaimerText className=\"tw-self-center tw-text-center tw-flex-grow\" />\n              )}\n            </div>\n          )}\n        </div>\n      </div>\n    </form>\n  );\n};\n\nAIFormLayout.propTypes = {\n  formik: PropTypes.shape({\n    handleSubmit: PropTypes.func.isRequired,\n    values: PropTypes.object.isRequired,\n    errors: PropTypes.object,\n    touched: PropTypes.object,\n    handleChange: PropTypes.func.isRequired,\n    handleBlur: PropTypes.func.isRequired,\n    isSubmitting: PropTypes.bool,\n  }).isRequired,\n  toolName: PropTypes.oneOf(Object.values(AI_TOOL_NAMES)).isRequired,\n  loading: PropTypes.bool,\n  locked: PropTypes.bool,\n  quotaRemaining: PropTypes.number.isRequired,\n  resetDate: PropTypes.string,\n  signupPath: PropTypes.string,\n  isLessThanSmallBreakpoint: PropTypes.bool.isRequired,\n  collapsed: PropTypes.bool.isRequired,\n  setCollapsed: PropTypes.func.isRequired,\n  children: PropTypes.func.isRequired,\n};\n\nAIFormLayout.defaultProps = {\n  loading: false,\n  locked: false,\n  resetDate: \"\",\n  signupPath: \"/sign-up?focus=teacher\",\n};\n\nexport default AIFormLayout;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { AI_TOOL_NAMES } from \"../../constants\";\n\nconst AIFormSubheading = ({ toolName }) => {\n  switch (toolName) {\n    case AI_TOOL_NAMES.ASK_AI:\n      return (\n        <div className=\"subtitle-1\">\n          The only tool that combines the world&apos;s best literary analysis\n          with the power of AI.\n        </div>\n      );\n    case AI_TOOL_NAMES.DISCUSSION_QUESTIONS:\n      return (\n        <div className=\"subtitle-1\">\n          Instantly generate discussion questions by combining the world&apos;s\n          best literary analysis with the power of AI.\n        </div>\n      );\n    case AI_TOOL_NAMES.QUIZ_QUESTIONS:\n      return (\n        <div className=\"subtitle-1\">\n          Instantly generate quiz questions by combining the world&apos;s best\n          literary analysis with the power of AI.\n        </div>\n      );\n    case AI_TOOL_NAMES.ESSAY_PROMPTS:\n      return (\n        <div className=\"subtitle-1\">\n          Instantly generate essay prompts by combining the world&apos;s best\n          literary analysis with the power of AI.\n        </div>\n      );\n    default:\n      return null;\n  }\n};\n\nAIFormSubheading.propTypes = {\n  toolName: PropTypes.oneOf(Object.values(AI_TOOL_NAMES)).isRequired,\n};\n\nexport default AIFormSubheading;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { AI_TOOL_NAMES } from \"../../constants\";\n\nconst AIFormTitle = ({ toolName }) => {\n  switch (toolName) {\n    case AI_TOOL_NAMES.ASK_AI:\n      return <div className=\"title-5\">Ask LitCharts AI</div>;\n    case AI_TOOL_NAMES.DISCUSSION_QUESTIONS:\n      return <div className=\"title-5\">Discussion Question Generator</div>;\n    case AI_TOOL_NAMES.QUIZ_QUESTIONS:\n      return <div className=\"title-5\">Quiz Question Generator</div>;\n    case AI_TOOL_NAMES.ESSAY_PROMPTS:\n      return <div className=\"title-5\">Essay Prompt Generator</div>;\n    default:\n      return null;\n  }\n};\n\nAIFormTitle.propTypes = {\n  toolName: PropTypes.oneOf(Object.values(AI_TOOL_NAMES)).isRequired,\n};\n\nexport default AIFormTitle;\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { handleKeyPress } from \"components/shared/helpers/keyPressHelpers\";\nimport useClickOutsideElement from \"components/shared/hooks/useClickOutsideElement\";\n\nconst popoverText = \"AI responses may be inaccurate or inappropriate.\";\n\nconst popoverOptions = {\n  container: \"body\",\n  content: popoverText,\n  html: true,\n  placement: \"bottom\",\n  template: `\n    <div class=\"ai-disclaimer-popover popover tw-w-[198px] tw-bg-teal tw-border-0\" role=\"tooltip\">\n      <div class=\"arrow !tw-border-b-teal after:!tw-border-b-teal\"></div>\n      <div class=\"popover-body button-2 tw-text-white tw-py-1 tw-px-2\">\n        ${popoverText}\n      </div>\n    </div>\n  `,\n  toggle: \"popover\",\n  trigger: \"manual\",\n};\n\nexport default function DisclaimerText({ className = \"\" }) {\n  const [tooltipActive, setTooltipActive] = useState(false);\n  const tooltipRef = useRef();\n  const touchEventRef = useRef(false);\n\n  // For whatever reason, iOS is triggering both mouseenter and click events\n  // when tapping. This is used at the start of the event to determine if we\n  // need to skip the mouseenter event\n  const setTouchActive = () => {\n    touchEventRef.current = true;\n  };\n\n  const dismissPopover = () => {\n    $(tooltipRef.current).popover(\"hide\");\n  };\n\n  const showPopover = () => {\n    $(tooltipRef.current).popover(\"show\");\n  };\n  const handleKeyDown = (event) => {\n    handleKeyPress(event, () => setTooltipActive(!tooltipActive));\n  };\n\n  // Setup the popover\n  useEffect(() => {\n    $(tooltipRef.current).popover(popoverOptions);\n  }, []);\n\n  // Use state to control tooltip appearance\n  useEffect(() => {\n    if (tooltipActive) {\n      showPopover();\n    } else {\n      dismissPopover();\n    }\n  }, [tooltipActive]);\n\n  // Dismiss popover on window resize\n  useEffect(() => {\n    window.addEventListener(\"resize\", dismissPopover);\n\n    return () => {\n      window.removeEventListener(\"resize\", dismissPopover);\n    };\n  }, []);\n\n  useClickOutsideElement(tooltipRef, dismissPopover);\n\n  return (\n    <span className={className}>\n      Generated by{\" \"}\n      <span\n        className=\"tw-underline tw-cursor-pointer focus-visible:tw-outline-teal\"\n        onMouseEnter={() => setTooltipActive(!touchEventRef.current)}\n        onMouseLeave={() => setTooltipActive(false)}\n        onClick={() => setTooltipActive(!tooltipActive)}\n        onKeyDown={handleKeyDown}\n        onTouchStart={setTouchActive}\n        ref={tooltipRef}\n        role=\"button\"\n        tabIndex={0}\n      >\n        AI\n      </span>{\" \"}\n      using LitCharts content.\n    </span>\n  );\n}\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport {\n  AI_TOOL_NAMES,\n  AMPLITUDE_BANNER_DATA_ATTRIBUTES,\n  AI_ANSWERS_QUOTA,\n} from \"../../constants\";\n\nconst LockedInformationBanner = ({ toolName, signupPath }) => {\n  const amplitudeDataAttribute = AMPLITUDE_BANNER_DATA_ATTRIBUTES[toolName];\n\n  switch (toolName) {\n    case AI_TOOL_NAMES.ASK_AI:\n      return (\n        <a href={signupPath} data-amplitude={amplitudeDataAttribute}>\n          Get {AI_ANSWERS_QUOTA} answers per month\n        </a>\n      );\n    case AI_TOOL_NAMES.DISCUSSION_QUESTIONS:\n    case AI_TOOL_NAMES.QUIZ_QUESTIONS:\n    case AI_TOOL_NAMES.ESSAY_PROMPTS:\n      return (\n        <>\n          Get {AI_ANSWERS_QUOTA} uses of this tool per month with{\" \"}\n          <a href={signupPath} data-amplitude={amplitudeDataAttribute}>\n            A<sup>+</sup> Teacher\n          </a>\n        </>\n      );\n    default:\n      return null;\n  }\n};\n\nLockedInformationBanner.propTypes = {\n  signupPath: PropTypes.string.isRequired,\n  toolName: PropTypes.oneOf(Object.values(AI_TOOL_NAMES)).isRequired,\n};\n\nexport default LockedInformationBanner;\n","import React from \"react\";\n\nconst CopyAndSaveReminder = () => {\n  return (\n    <div className=\"ask-litcharts-ai--message\">\n      <div className=\"body-2 notice\">\n        <strong>Important: </strong>\n        Copy and save this response. It will disappear if you refresh or leave\n        this page.\n      </div>\n    </div>\n  );\n};\n\nexport default CopyAndSaveReminder;\n","import React from \"react\";\nimport InitialMessageDescription from \"./InitialMessageDescription\";\nimport InitialMessageBullets from \"./InitialMessageBullets\";\nimport InitialMessageExample from \"./InitialMessageExample\";\n\nconst InitialMessage = ({\n  inContent,\n  toolName,\n  locked,\n  upgradeable,\n  quotaRemaining,\n  resourceTitle,\n  signupPath,\n}) => {\n  return (\n    <>\n      <div className=\"ask-litcharts-ai--intro\">\n        <div className=\"hand-wave\" />\n        <div className=\"body-2 ask-litcharts-ai--hello\">\n          Hello! I&apos;m LitCharts AI\n        </div>\n        <InitialMessageDescription\n          toolName={toolName}\n          resourceTitle={resourceTitle}\n          inContent={inContent}\n        />\n      </div>\n      <InitialMessageBullets\n        quotaRemaining={quotaRemaining}\n        inContent={inContent}\n        toolName={toolName}\n        signupPath={signupPath}\n        locked={locked}\n        upgradeable={upgradeable}\n      />\n      <InitialMessageExample\n        toolName={toolName}\n        locked={locked}\n        inContent={inContent}\n      />\n    </>\n  );\n};\n\nexport default InitialMessage;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport DisclaimerText from \"components/ai_tools/shared/AIForm/DisclaimerText\";\nimport {\n  AI_TOOL_NAMES,\n  AMPLITUDE_SIGNUP_INTRO_CHAT_ATTRIBUTES,\n  AI_ANSWERS_QUOTA,\n} from \"../../constants\";\nimport useWindowResizeAndFormCollapse from \"../../hooks/useWindowResizeAndFormCollapse\";\n\nconst InitialMessageBullets = ({\n  inContent,\n  locked,\n  quotaRemaining,\n  signupPath,\n  toolName,\n  upgradeable,\n}) => {\n  const { isLessThanSmallBreakpoint } = useWindowResizeAndFormCollapse();\n  const amplitudeKey = AMPLITUDE_SIGNUP_INTRO_CHAT_ATTRIBUTES[toolName];\n\n  switch (toolName) {\n    case AI_TOOL_NAMES.ASK_AI:\n      if (inContent) {\n        if (locked) {\n          return (\n            <div>\n              <a\n                href={signupPath}\n                data-amplitude=\"AIContentToolSignUpChatBubble\"\n              >\n                Get {AI_ANSWERS_QUOTA} answers per month.\n              </a>\n            </div>\n          );\n        }\n        return (\n          <div className=\"ai-form--disclaimer\">\n            <DisclaimerText />\n          </div>\n        );\n      }\n\n      return (\n        <ol className=\"body-2 ask-litcharts-ai--list\">\n          {locked && (\n            <li>\n              <a href={signupPath} data-amplitude={amplitudeKey}>\n                Sign up for LitCharts A<sup>+</sup>\n              </a>\n            </li>\n          )}\n          {!locked && quotaRemaining > 0 && (\n            <li className=\"ask-litcharts-ai--list_ask-step\">\n              Tap the Ask button\n            </li>\n          )}\n          <li>Select a title in the dropdown</li>\n          <li>Submit your question about that title</li>\n        </ol>\n      );\n    case AI_TOOL_NAMES.DISCUSSION_QUESTIONS:\n      return (\n        <ol className=\"body-2 ask-litcharts-ai--list\">\n          {locked && upgradeable && (\n            <li>\n              <a href={signupPath} data-amplitude={amplitudeKey}>\n                Upgrade to LitCharts A<sup>+</sup> Teacher\n              </a>\n            </li>\n          )}\n          {locked && !upgradeable && (\n            <li>\n              <a href={signupPath} data-amplitude={amplitudeKey}>\n                Sign up for LitCharts A<sup>+</sup> Teacher\n              </a>\n            </li>\n          )}\n          {!locked && isLessThanSmallBreakpoint && (\n            <li>Tap the Generate Questions button</li>\n          )}\n          <li>Submit a title and discussion topic</li>\n          <li>Get your discussion questions</li>\n        </ol>\n      );\n    case AI_TOOL_NAMES.QUIZ_QUESTIONS:\n      return (\n        <ol className=\"body-2 ask-litcharts-ai--list\">\n          {locked && upgradeable && (\n            <li>\n              <a href={signupPath} data-amplitude={amplitudeKey}>\n                Upgrade to LitCharts A<sup>+</sup> Teacher\n              </a>\n            </li>\n          )}\n          {locked && !upgradeable && (\n            <li>\n              <a href={signupPath} data-amplitude={amplitudeKey}>\n                Sign up for LitCharts A<sup>+</sup> Teacher\n              </a>\n            </li>\n          )}\n          {!locked && isLessThanSmallBreakpoint && (\n            <li>Tap the Generate Questions button</li>\n          )}\n          <li>Submit a title and quiz topic</li>\n          <li>Get your quiz questions</li>\n        </ol>\n      );\n    case AI_TOOL_NAMES.ESSAY_PROMPTS:\n      return (\n        <ol className=\"body-2 ask-litcharts-ai--list\">\n          {locked && upgradeable && (\n            <li>\n              <a href={signupPath} data-amplitude={amplitudeKey}>\n                Upgrade to LitCharts A<sup>+</sup> Teacher\n              </a>\n            </li>\n          )}\n          {locked && !upgradeable && (\n            <li>\n              <a href={signupPath} data-amplitude={amplitudeKey}>\n                Sign up for LitCharts A<sup>+</sup> Teacher\n              </a>\n            </li>\n          )}\n          {!locked && isLessThanSmallBreakpoint && (\n            <li>Tap the Generate Prompts button</li>\n          )}\n          <li>Submit a title and essay topic</li>\n          <li>Get your essay prompts</li>\n        </ol>\n      );\n    default:\n      return null;\n  }\n};\n\nInitialMessageBullets.propTypes = {\n  quotaRemaining: PropTypes.number.isRequired,\n  signupPath: PropTypes.string.isRequired,\n  locked: PropTypes.bool.isRequired,\n  upgradeable: PropTypes.bool,\n  toolName: PropTypes.oneOf(Object.values(AI_TOOL_NAMES)).isRequired,\n};\n\nInitialMessageBullets.defaultProps = {\n  upgradeable: false,\n};\n\nexport default InitialMessageBullets;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { AI_TOOL_NAMES } from \"../../constants\";\n\nconst InitialMessageDescription = ({ toolName, resourceTitle, inContent }) => {\n  switch (toolName) {\n    case AI_TOOL_NAMES.ASK_AI:\n      return inContent ? (\n        <div className=\"body-2 ask-litcharts-ai--description\">\n          I can answer any question about <i>{resourceTitle}</i> instantly.\n        </div>\n      ) : (\n        <div className=\"body-2 ask-litcharts-ai--description\">\n          Need help with literature? Ask me anything. Combining the literary\n          wisdom of LitCharts and the power of AI, I&apos;m here to provide\n          instant answers and explanations. Complete these steps to get help in\n          seconds:\n        </div>\n      );\n    case AI_TOOL_NAMES.DISCUSSION_QUESTIONS:\n      return (\n        <div className=\"body-2 ask-litcharts-ai--description\">\n          Combining the literary wisdom of LitCharts and the power of AI, I can\n          help you instantly create discussion questions that will get people\n          talking. Just complete these steps:\n        </div>\n      );\n    case AI_TOOL_NAMES.QUIZ_QUESTIONS:\n      return (\n        <div className=\"body-2 ask-litcharts-ai--description\">\n          Combining the literary wisdom of LitCharts and the power of AI, I can\n          instantly create focused quiz questions that you can use or modify as\n          you desire. Just complete these steps:\n        </div>\n      );\n    case AI_TOOL_NAMES.ESSAY_PROMPTS:\n      return (\n        <div className=\"body-2 ask-litcharts-ai--description\">\n          Combining the literary wisdom of LitCharts and the power of AI, I can\n          instantly create thought-provoking essay prompts that you can use or\n          modify as you desire. Just complete these steps:\n        </div>\n      );\n    default:\n      return null;\n  }\n};\n\nInitialMessageDescription.propTypes = {\n  toolName: PropTypes.oneOf(Object.values(AI_TOOL_NAMES)).isRequired,\n};\n\nexport default InitialMessageDescription;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport AskAiImg from \"images/components/ai-tools/ask-ai-intro.gif\";\nimport EpgImg from \"images/components/ai-tools/epg-intro.gif\";\nimport DqgImg from \"images/components/ai-tools/dqg-intro.gif\";\nimport QqgImg from \"images/components/ai-tools/qqg-intro.gif\";\n\nimport { AI_TOOL_NAMES } from \"../../constants\";\n\nconst InitialMessageExample = ({ locked, toolName, inContent }) => {\n  switch (toolName) {\n    case AI_TOOL_NAMES.ASK_AI:\n      if (inContent) {\n        return null;\n      }\n\n      if (locked) {\n        return (\n          <div className=\"body-2\">\n            <span>See Ask LitCharts AI in action below:</span>\n            <img\n              className=\"ask-litcharts-ai--gif\"\n              src={AskAiImg}\n              alt=\"Ask LitCharts AI intro\"\n            />\n          </div>\n        );\n      }\n\n      return (\n        <div className=\"body-2 notice\">\n          For best results, make your questions as specific as possible.\n        </div>\n      );\n    case AI_TOOL_NAMES.DISCUSSION_QUESTIONS:\n      return locked ? (\n        <div className=\"body-2\">\n          <span>See the Discussion Question Generator in action below:</span>\n          <img\n            className=\"ask-litcharts-ai--gif\"\n            src={DqgImg}\n            alt=\"Ask LitCharts AI intro\"\n          />\n        </div>\n      ) : null;\n    case AI_TOOL_NAMES.QUIZ_QUESTIONS:\n      return locked ? (\n        <div className=\"body-2\">\n          <span>See the Quiz Question Generator in action below:</span>\n          <img\n            className=\"ask-litcharts-ai--gif\"\n            src={QqgImg}\n            alt=\"Ask LitCharts AI intro\"\n          />\n        </div>\n      ) : null;\n    case AI_TOOL_NAMES.ESSAY_PROMPTS:\n      return locked ? (\n        <div className=\"body-2\">\n          <span>See the Essay Prompt Generator in action below:</span>\n          <img\n            className=\"ask-litcharts-ai--gif\"\n            src={EpgImg}\n            alt=\"Ask LitCharts AI intro\"\n          />\n        </div>\n      ) : null;\n    default:\n      return null;\n  }\n};\n\nInitialMessageExample.propTypes = {\n  locked: PropTypes.bool.isRequired,\n  toolName: PropTypes.oneOf(Object.values(AI_TOOL_NAMES)).isRequired,\n  inContent: PropTypes.bool.isRequired,\n};\n\nexport default InitialMessageExample;\n","import React, { useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport { reject } from \"lodash\";\nimport LitCard from \"../shared/LitCard\";\n\nconst propTypes = {\n  bookmarks: PropTypes.array,\n};\n\n// This is basically a very trimmed down copy of the `GuideList` component\n// in order to reuse existing stylings for lit cards organization.\n\nfunction EmptyContainer({ browsePath, emptyImgSrc }) {\n  return (\n    <div className=\"bookmarks-container__empty\">\n      <img\n        alt=\"save guide illustration\"\n        className=\"bookmarks-empty__image\"\n        src={emptyImgSrc}\n      />\n      <div className=\"bookmarks-empty__description\">\n        <span className=\"body-1\">You haven&apos;t saved any guides yet.</span>\n        <span className=\"body-1\">Save your first guide!</span>\n      </div>\n      <a\n        className=\"btn btn-lg btn-default bookmarks-empty_browse-btn\"\n        href={browsePath}\n      >\n        Browse Guides\n      </a>\n    </div>\n  );\n}\n\nexport default function BookmarkList({\n  bookmarks: bookmarksFromProps,\n  browsePath,\n  emptyImgSrc,\n}) {\n  const [bookmarks, setBookmarks] = useState(bookmarksFromProps);\n  const subtitleText =\n    bookmarks.length > 1\n      ? `Here are the ${bookmarks.length} guides you've saved.`\n      : \"Here is the 1 guide you've saved.\";\n\n  const handleRemoveBookmark = (bookmarkId) => {\n    const newBookmarks = reject(\n      bookmarks,\n      (bookmark) => bookmark.bookmarkId === bookmarkId\n    );\n    setBookmarks(newBookmarks);\n  };\n\n  return (\n    <div>\n      {bookmarks.length > 0 ? (\n        <>\n          <div className=\"bookmarks__subtitle subtitle-1\">{subtitleText}</div>\n          <div className=\"guide-list\">\n            <div className=\"guide-list__groups-wrapper\">\n              <ul className=\"guide-list__groups guide-list__groups--grid\">\n                <li className=\"guide-list__group\">\n                  <ul className=\"guide-list__guides\">\n                    <div className=\"row\">\n                      {bookmarks.map((bookmark, index) => (\n                        <div\n                          className=\"col-xxs-12 col-xs-6 col-sm-6 col-md-4 col-lg-4\"\n                          key={bookmark.slug}\n                        >\n                          <li className=\"guide-list__guide\">\n                            <LitCard\n                              {...bookmark}\n                              hideSuccessCta\n                              index={index}\n                              onRemoval={handleRemoveBookmark}\n                              includeTags\n                              userSignedIn\n                            />\n                          </li>\n                        </div>\n                      ))}\n                    </div>\n                  </ul>\n                </li>\n              </ul>\n            </div>\n          </div>\n        </>\n      ) : (\n        <EmptyContainer browsePath={browsePath} emptyImgSrc={emptyImgSrc} />\n      )}\n    </div>\n  );\n}\n\nBookmarkList.propTypes = propTypes;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport Checkbox from \"../shared/Checkbox\";\nimport APlusDialog from \"../shared/dialogs/APlus\";\n\nclass RelatedThemesFilterBox extends React.Component {\n  static propTypes = {\n    filterables: PropTypes.array.isRequired,\n    header: PropTypes.string.isRequired,\n    isPromoVisible: PropTypes.bool.isRequired,\n    isSubscribed: PropTypes.bool.isRequired,\n    isFreeTier: PropTypes.bool.isRequired,\n    onChange: PropTypes.func,\n    showSidebarPromo: PropTypes.func.isRequired,\n    totalFilters: PropTypes.number.isRequired,\n  };\n\n  constructor(props) {\n    super(props);\n\n    this.onCheckboxChange = (e) => {\n      if (!props.isSubscribed) {\n        e.preventDefault();\n        props.showSidebarPromo();\n        return;\n      }\n\n      const { target } = e;\n\n      if (target.checked) {\n        this.setState({ selected: this.state.selected.concat([target.value]) });\n      } else {\n        this.setState({\n          selected: this.state.selected.filter((s) => s !== target.value),\n        });\n      }\n    };\n\n    this.onMoreToggleClick = (e) => {\n      if (!props.isSubscribed) {\n        props.showSidebarPromo();\n        return;\n      }\n\n      this.setState({ allVisible: !this.state.allVisible });\n    };\n\n    this.state = {\n      allVisible: false,\n      selected: [],\n    };\n  }\n\n  componentDidUpdate(prevProps, prevState) {\n    if (\n      this.state.selected.length !== prevState.selected.length &&\n      this.props.onChange\n    ) {\n      this.props.onChange(this.state.selected);\n    }\n  }\n\n  renderMoreToggleBtn() {\n    const { allVisible } = this.state;\n    const { header, totalFilters } = this.props;\n\n    if (totalFilters <= 5) {\n      return null;\n    }\n\n    return (\n      <button\n        className=\"btn btn-borderless btn-text btn-xs related-themes__show-more-less\"\n        onClick={this.onMoreToggleClick}\n      >\n        {`See ${allVisible ? \"less\" : \"more\"} ${header.toLowerCase()}s`}\n      </button>\n    );\n  }\n\n  render() {\n    const { allVisible } = this.state;\n    const { header, isPromoVisible, totalFilters } = this.props;\n    let { filterables } = this.props;\n\n    if (!allVisible) {\n      filterables = filterables.slice(0, 5);\n    }\n\n    return (\n      <div className=\"filter-box\" style={{ position: \"relative\" }}>\n        {isPromoVisible && <div className=\"overlay\" style={{ zIndex: \"1\" }} />}\n        <div className=\"header lit-guides\">\n          {header} ({totalFilters})\n        </div>\n        <ul className=\"list list_checkbox\">\n          {filterables.map((f) => (\n            <li className=\"list__item\" key={f.label}>\n              <Checkbox\n                label={`${f.label} (${f.count})`}\n                name={`filter_checkbox_${f.label\n                  .toLowerCase()\n                  .replace(/\\W/g, \"-\")}`}\n                onChange={this.onCheckboxChange}\n                value={f.label}\n              />\n            </li>\n          ))}\n        </ul>\n        {this.renderMoreToggleBtn()}\n      </div>\n    );\n  }\n}\n\nexport default class RelatedThemes extends React.Component {\n  static propTypes = {\n    aPlusDialogContent: PropTypes.string.isRequired,\n    aPlusDialogHref: PropTypes.string.isRequired,\n    aPlusDialogLogoSrc: PropTypes.string.isRequired,\n    blurredThemesImgSrc: PropTypes.string,\n    filterableAuthorCount: PropTypes.number.isRequired,\n    filteredAuthors: PropTypes.array.isRequired,\n    filterableBookCount: PropTypes.number.isRequired,\n    filteredBooks: PropTypes.array.isRequired,\n    isSubscribed: PropTypes.bool.isRequired,\n    isFreeTier: PropTypes.bool.isRequired,\n    mainTheme: PropTypes.object.isRequired,\n    relatedThemes: PropTypes.array.isRequired,\n    relatedThemesCount: PropTypes.number.isRequired,\n  };\n\n  constructor(props) {\n    super(props);\n\n    this.closeSidebarPromo = (e) => {\n      this.setState({ sidebarPromoVisible: false });\n    };\n\n    this.showSidebarPromo = () => {\n      this.setState({ sidebarPromoVisible: true });\n    };\n\n    this.state = {\n      filteredAuthors: [],\n      filteredBooks: [],\n      filteredThemes: props.relatedThemes,\n      sidebarPromoVisible: false,\n    };\n  }\n\n  componentDidUpdate(prevProps, prevState) {\n    const { filteredAuthors, filteredBooks } = this.state;\n    if (\n      filteredAuthors.length !== prevState.filteredAuthors.length ||\n      filteredBooks.length !== prevState.filteredBooks.length\n    ) {\n      let filteredThemes = [];\n      if (filteredAuthors.length || filteredBooks.length) {\n        const a = this.selectedFiltersToHash(filteredAuthors);\n        const b = this.selectedFiltersToHash(filteredBooks);\n        filteredThemes = this.props.relatedThemes.filter(\n          (t) => a[t.bookAuthorFullName] || b[t.bookTitle]\n        );\n      } else {\n        filteredThemes = this.props.relatedThemes;\n      }\n      this.setState({ filteredThemes });\n    }\n  }\n\n  selectedFiltersToHash(selected) {\n    return selected.reduce((h, k) => {\n      h[k] = true;\n      return h;\n    }, {});\n  }\n\n  renderFilterBox({ filterables, header, key, totalFilters }) {\n    const { aPlusDialogHref, aPlusDialogLogoSrc, isSubscribed } = this.props;\n\n    return (\n      <RelatedThemesFilterBox\n        aPlusDialogHref={aPlusDialogHref}\n        aPlusDialogLogoSrc={aPlusDialogLogoSrc}\n        filterables={filterables}\n        header={header}\n        isPromoVisible={this.state.sidebarPromoVisible}\n        isSubscribed={isSubscribed}\n        onChange={(selected) => this.setState({ [key]: selected })}\n        showSidebarPromo={this.showSidebarPromo}\n        totalFilters={totalFilters}\n      />\n    );\n  }\n\n  renderSidebarPromo() {\n    if (!this.state.sidebarPromoVisible) {\n      return null;\n    }\n\n    const { aPlusDialogHref, aPlusDialogLogoSrc, isFreeTier } = this.props;\n\n    return (\n      <div className=\"a-plus-dialog\" id=\"refinement-promo\">\n        <APlusDialog\n          isFreeTier={isFreeTier}\n          content=\"Update to refine your search.\"\n          href={aPlusDialogHref}\n          amplitudeKey=\"litRelatedThemesFilterSignUp\"\n          logoSrc={aPlusDialogLogoSrc}\n          handleClose={this.closeSidebarPromo}\n          shouldRenderCloseBtn\n        />\n      </div>\n    );\n  }\n\n  renderSidebar() {\n    const {\n      filterableAuthorCount,\n      filterableAuthors,\n      filterableBookCount,\n      filterableBooks,\n    } = this.props;\n    return (\n      <div className=\"sidebar\">\n        <div className=\"sidebar__header\">\n          <div className=\"sidebar__title\">Refine Your Search by...</div>\n        </div>\n        {this.renderFilterBox({\n          filterables: filterableBooks,\n          key: \"filteredBooks\",\n          header: \"Book Title\",\n          totalFilters: filterableBookCount,\n        })}\n        {this.renderFilterBox({\n          filterables: filterableAuthors,\n          key: \"filteredAuthors\",\n          header: \"Author\",\n          totalFilters: filterableAuthorCount,\n        })}\n        {this.renderSidebarPromo()}\n      </div>\n    );\n  }\n\n  renderThemeYouWereReading() {\n    const { mainTheme } = this.props;\n\n    return (\n      <div id=\"theme-you-were-reading\" className=\"theme-box\">\n        <div className=\"theme-box__header\">\n          <div className=\"theme-box__title\">Theme You Were Reading</div>\n        </div>\n        <div className=\"card card_theme\">\n          <div className=\"card-theme-col\">\n            <a href={mainTheme.path} className=\"card__icon\">\n              <span\n                className=\"visible-xs\"\n                dangerouslySetInnerHTML={{ __html: mainTheme.mediumIconHtml }}\n              />\n              <span\n                className=\"hidden-xs\"\n                dangerouslySetInnerHTML={{ __html: mainTheme.largeIconHtml }}\n              />\n            </a>\n          </div>\n          <div className=\"card-theme-col\">\n            <div className=\"card__title\">\n              <a href={mainTheme.path} className=\"theme-title link\">\n                {mainTheme.title}\n              </a>{\" \"}\n              in{\" \"}\n              <a href={mainTheme.bookPath} className=\"link\">\n                {mainTheme.bookTitle}\n              </a>{\" \"}\n              by {mainTheme.bookAuthorFullName}\n            </div>\n          </div>\n        </div>\n      </div>\n    );\n  }\n\n  renderRelatedThemeCards() {\n    if (!this.props.isSubscribed) {\n      return null;\n    }\n\n    const { filteredThemes } = this.state;\n\n    return filteredThemes.map((t) => (\n      <div className=\"theme-box\" key={t.path}>\n        <div className=\"card card_theme\">\n          <div className=\"card-theme-col\">\n            <a href={t.path} className=\"card__icon\">\n              <span\n                className=\"visible-xs\"\n                dangerouslySetInnerHTML={{ __html: t.mediumIconHtml }}\n              />\n              <span\n                className=\"hidden-xs\"\n                dangerouslySetInnerHTML={{ __html: t.largeIconHtml }}\n              />\n            </a>\n          </div>\n          <div className=\"card-theme-col\">\n            <div className=\"card__title\">\n              <a href={t.path} className=\"theme-title link\">\n                {t.title}\n              </a>{\" \"}\n              in{\" \"}\n              <a href={t.bookPath} className=\"link\">\n                {t.bookTitle}\n              </a>{\" \"}\n              by {t.bookAuthorFullName}\n            </div>\n            <p\n              className=\"card__description no-inline-characters no-inline-symbols no-inline-terms\"\n              dangerouslySetInnerHTML={{ __html: t.descriptionHtml }}\n            />\n            <div className=\"read-full\">\n              <a href={t.path} className=\"link\">\n                Read analysis of {t.title}\n              </a>\n            </div>\n          </div>\n        </div>\n      </div>\n    ));\n  }\n\n  renderRelatedThemesBlur() {\n    if (this.props.isSubscribed) {\n      return null;\n    }\n\n    const { blurredThemesImgSrc } = this.props;\n\n    return (\n      <div>\n        <img src={blurredThemesImgSrc} style={{ maxWidth: \"100%\" }} />\n        <img src={blurredThemesImgSrc} style={{ maxWidth: \"100%\" }} />\n      </div>\n    );\n  }\n\n  renderPromo() {\n    if (this.props.isSubscribed) {\n      return null;\n    }\n\n    const { aPlusDialogContent, aPlusDialogHref, aPlusDialogLogoSrc } =\n      this.props;\n\n    return (\n      <div>\n        <APlusDialog\n          content={aPlusDialogContent}\n          href={aPlusDialogHref}\n          amplitudeKey=\"litRelatedThemesCentralColumnSignUp\"\n          logoSrc={aPlusDialogLogoSrc}\n        />\n      </div>\n    );\n  }\n\n  getThemeCount() {\n    const { relatedThemes, relatedThemesCount } = this.props;\n    const { filteredThemes } = this.state;\n    // no relatedThemes are passed unless user is subscribed\n    return relatedThemes.length ? filteredThemes.length : relatedThemesCount;\n  }\n\n  renderRelatedThemes() {\n    return (\n      <div className=\"closed-box\">\n        <div className=\"closed-box__container\" id=\"related_themes\">\n          <div className=\"theme\">\n            <div className=\"theme-box__header\">\n              <div className=\"theme-box__title\">\n                <span id=\"related-theme-count\">{this.getThemeCount()}</span>{\" \"}\n                Related Themes from Other Texts\n              </div>\n              <div className=\"theme-box__subtitle\">\n                Themes are ordered from most to least related.\n              </div>\n            </div>\n            <div className=\"related-themes\">\n              {this.renderRelatedThemeCards()}\n              {this.renderRelatedThemesBlur()}\n              {this.renderPromo()}\n            </div>\n          </div>\n        </div>\n      </div>\n    );\n  }\n\n  render() {\n    return (\n      <div className=\"related\">\n        <div className=\"container\">\n          <div className=\"row\">\n            <div className=\"col-xs-12 col-sm-4\">{this.renderSidebar()}</div>\n            <div className=\"col-xs-12 col-sm-8\">\n              {this.renderThemeYouWereReading()}\n              {this.renderRelatedThemes()}\n            </div>\n          </div>\n        </div>\n      </div>\n    );\n  }\n}\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\n// eslint-disable-next-line react/prefer-stateless-function\nclass SummaryAnalysisAPlusDialog extends React.Component {\n  static propTypes = {\n    content: PropTypes.string,\n    href: PropTypes.string.isRequired,\n    linkClasses: PropTypes.string,\n    logoSrc: PropTypes.string,\n    logoSrcXs: PropTypes.string,\n    isFreeTier: PropTypes.bool.isRequired,\n  };\n\n  render() {\n    return (\n      <div>\n        <div className=\"a-plus-dialog__header text-center\">\n          <div className=\"hidden-xs\">\n            <img\n              alt=\"LitCharts Logo\"\n              className=\"brand\"\n              src={this.props.logoSrc}\n            />\n          </div>\n          <div className=\"visible-xs\">\n            <img\n              alt=\"LitCharts Logo\"\n              className=\"brand\"\n              src={this.props.logoSrcXs}\n            />\n          </div>\n        </div>\n        <div className=\"a-plus-dialog__body subtitle-1 text-center\">\n          <p\n            className=\"a-plus-dialog__content\"\n            dangerouslySetInnerHTML={{ __html: this.props.content }}\n          />\n          <a\n            className={`a-plus-dialog__subscribe btn btn-a-plus btn-md btn--icon-left ${\n              this.props.linkClasses || \"\"\n            }`}\n            href={this.props.href}\n            data-amplitude=\"litBlurredAnalysisPrimary\"\n          >\n            <i className=\"lc-icon lc-icon-sm lc-icon-lock-filled\" />\n            Get <span className=\"hidden-xs\">LitCharts </span>A<sup>+</sup>\n          </a>\n        </div>\n        {!this.props.isFreeTier && (\n          <div className=\"a-plus-dialog__footer subtitle-2 text-center\">\n            <div className=\"a-plus-dialog__sign-in\">\n              <span className=\"a-plus-dialog__sign-in--text\">or </span>\n              <a href=\"/sign-in\">sign in</a>\n            </div>\n          </div>\n        )}\n      </div>\n    );\n  }\n}\n\nexport default SummaryAnalysisAPlusDialog;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport Expandable from \"components/shared/Expandable\";\nimport GroupsInfoFaqRow from \"components/groups/info/GroupsInfoFaqRow\";\n\nexport default function GroupsInfoExpandableFaqRow({ question, answer }) {\n  return (\n    <Expandable expandableClassName=\"groups-info__expandable-row\">\n      <GroupsInfoFaqRow question={question} answer={answer} />\n    </Expandable>\n  );\n}\nGroupsInfoExpandableFaqRow.propTypes = {\n  question: PropTypes.string,\n  answer: PropTypes.string,\n};\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nexport default function GroupsInfoFaqRow(props) {\n  return (\n    <>\n      <div className=\"groups-info__question body-1\">\n        <div className=\"groups-info__question--text\">{props.question}</div>\n        <div\n          className={`groups-info__expandable-row--icon lc-icon lc-icon-sm ${\n            props.isExpanded ? \"lc-icon-up\" : \"lc-icon-down\"\n          }`}\n        />\n      </div>\n      <div\n        className=\"groups-info__answer body-2\"\n        dangerouslySetInnerHTML={{ __html: props.answer }}\n      />\n    </>\n  );\n}\nGroupsInfoFaqRow.propTypes = {\n  question: PropTypes.string.isRequired,\n  answer: PropTypes.string.isRequired,\n};\n","import React from \"react\";\nimport LocalTag from \"../shared/LocalTag\";\n\nconst ChaptersRow = ({ index, summarySection }) => (\n  <div className={`${index === 0 ? \"first\" : \"\"} row`}>\n    <span className=\"title-4 left-aligned\">{summarySection.title} </span>\n    <div className=\"literary-devices local-tags-container\">\n      {summarySection.litTerms.map((litTerm) => (\n        <LocalTag key={litTerm.id} litTerm={litTerm} />\n      ))}\n    </div>\n  </div>\n);\n\nexport default ChaptersRow;\n","import React from \"react\";\nimport ChaptersRow from \"./ChaptersRow\";\n\nconst ChaptersView = ({ summarySections }) => (\n  <div className=\"literary-devices chapters\">\n    {summarySections.length ? (\n      summarySections.map((ss, index) => (\n        <ChaptersRow index={index} key={ss.id} summarySection={ss} />\n      ))\n    ) : (\n      <em className=\"text-center no-matches\">No matches.</em>\n    )}\n  </div>\n);\nexport default ChaptersView;\n","import React, { useMemo } from \"react\";\nimport { CHAPTERS, DEVICES } from \"../../constants/literary_devices\";\nimport ChaptersView from \"./ChaptersView\";\nimport DevicesView from \"./DevicesView\";\n\nconst Content = ({\n  hideFilters,\n  filterOptions,\n  filterBy,\n  summarySections,\n  litTerms,\n  viewMode,\n}) => {\n  const sortedLitTerms = useMemo(\n    () =>\n      litTerms.filter(\n        (term) =>\n          term.slug === filterBy.value ||\n          filterBy.value === filterOptions[0].value\n      ),\n    [filterBy]\n  );\n  const sortedSummarySections = useMemo(\n    () =>\n      hideFilters\n        ? []\n        : summarySections\n            .filter((ss) =>\n              ss.litTerms.some(\n                (term) =>\n                  term.slug === filterBy.value ||\n                  filterBy.value === filterOptions[0].value\n              )\n            )\n            .map((ss) => ({\n              ...ss,\n              litTerms: ss.litTerms.filter(\n                (term) =>\n                  term.slug === filterBy.value ||\n                  filterBy?.value === filterOptions[0].value\n              ),\n            })),\n    [hideFilters, filterBy]\n  );\n\n  switch (viewMode) {\n    case CHAPTERS:\n      return <ChaptersView summarySections={sortedSummarySections} />;\n    case DEVICES:\n      return <DevicesView litTerms={sortedLitTerms} />;\n    default:\n      return null;\n  }\n};\n\nexport default Content;\n","import React from \"react\";\n\nconst DevicesRow = ({ index, litTerm }) => (\n  <a href={litTerm.showPath}>\n    <div className={`row ${index === 0 ? \"first\" : \"\"}`}>\n      <span className=\"title-4 term\">{litTerm.name} </span>\n      <span className=\"body-2\">\n        {litTerm.keyExamplesCount} key{\" \"}\n        {litTerm.keyExamplesCount > 1 ? \"examples\" : \"example\"}\n      </span>\n      <div className=\"visible-xs visible-sm pull-right arrow\">\n        <i className=\"lc-icon lc-icon-sm lc-icon-right\" />\n      </div>\n    </div>\n  </a>\n);\n\nexport default DevicesRow;\n","import React from \"react\";\nimport DevicesRow from \"./DevicesRow\";\n\nconst DevicesView = ({ litTerms }) => (\n  <div className=\"literary-devices devices\">\n    {litTerms.map((litTerm, index) => (\n      <DevicesRow index={index} key={litTerm.id} litTerm={litTerm} />\n    ))}\n  </div>\n);\n\nexport default DevicesView;\n","import React from \"react\";\nimport { CHAPTERS, DEVICES } from \"../../constants/literary_devices\";\nimport Select from \"../shared/Select\";\n\nconst Filters = ({\n  currentFilter,\n  setCurrentFilter,\n  filterOptions,\n  setViewMode,\n  hideFilters,\n  viewMode,\n  sectionType,\n}) => {\n  if (hideFilters) {\n    return null;\n  }\n\n  const setViewModeToChapters = () => {\n    setViewMode(CHAPTERS);\n  };\n\n  const setViewModeToDevices = () => {\n    setViewMode(DEVICES);\n  };\n\n  const onChangeFilter = (option) => {\n    setCurrentFilter(option);\n  };\n\n  return (\n    <div id=\"anchor\">\n      <div className=\"literary-devices filters\">\n        <div className=\"options-container\">\n          <span>Sort by: </span>\n          <button\n            className={`btn sort-by-option ${\n              viewMode === DEVICES ? \"sort-by-option--active\" : \"\"\n            }`}\n            onClick={setViewModeToDevices}\n            type=\"button\"\n          >\n            <span className=\"btn-text\">Devices A-Z</span>\n          </button>\n          <button\n            className={`btn sort-by-option ${\n              viewMode === CHAPTERS ? \"sort-by-option--active\" : \"\"\n            }`}\n            onClick={setViewModeToChapters}\n            type=\"button\"\n          >\n            <span className=\"btn-text\">{sectionType}</span>\n          </button>\n        </div>\n        <Select\n          isControlled\n          id=\"literary-devices-filter\"\n          name=\"literary-devices-filter\"\n          options={filterOptions}\n          onChange={onChangeFilter}\n          value={currentFilter.value}\n        />\n      </div>\n    </div>\n  );\n};\n\nexport default Filters;\n","/* eslint-disable react/prefer-stateless-function */\nimport React from \"react\";\nimport { DEVICES } from \"../../constants/literary_devices\";\nimport Content from \"./Content\";\nimport Filters from \"./Filters\";\nimport PageDescription from \"./PageDescription\";\nimport QueryParamsControls from \"./QueryParamsControls\";\n\nclass LandingPage extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      viewMode: DEVICES,\n      filterBy: this.props.filterOptions[0],\n    };\n  }\n\n  handleParamChange = (\n    viewMode = this.state.viewMode,\n    filterBy = this.state.filterBy,\n    updateHistory = true\n  ) => {\n    const url = new URL(window.location);\n    if (viewMode) {\n      url.searchParams.set(\"viewMode\", viewMode);\n    }\n    if (filterBy) {\n      url.searchParams.set(\"filterBy\", filterBy.value);\n    }\n    if (updateHistory) {\n      window.history.pushState({}, \"\", url.toString());\n    }\n  };\n\n  setViewMode = (value, updateHistory = true) => {\n    this.setState({ viewMode: value }, () =>\n      this.handleParamChange(value, undefined, updateHistory)\n    );\n  };\n\n  setCurrentFilter = (option, updateHistory = true) => {\n    this.setState({ filterBy: option }, () =>\n      this.handleParamChange(undefined, option, updateHistory)\n    );\n  };\n\n  lowerCaseOptions = this.props.filterOptions.map((option) => ({\n    ...option,\n    value: option.value.toLowerCase(),\n  }));\n\n  render() {\n    return (\n      <>\n        <PageDescription\n          authorName={this.props.authorName}\n          bookTitle={this.props.bookTitle}\n        />\n        <Filters\n          sectionType={this.props.sectionType}\n          setCurrentFilter={this.setCurrentFilter}\n          currentFilter={this.state.filterBy}\n          filterOptions={this.lowerCaseOptions}\n          setViewMode={this.setViewMode}\n          viewMode={this.state.viewMode?.toLowerCase()}\n          hideFilters={this.props.hideFilters}\n        />\n        <Content\n          hideFilters={this.props.hideFilters}\n          filterOptions={this.props.filterOptions}\n          filterBy={this.state.filterBy}\n          summarySections={this.props.summarySections}\n          viewMode={this.state.viewMode}\n          litTerms={this.props.litTerms}\n        />\n        <QueryParamsControls\n          filterOptions={this.props.filterOptions}\n          setViewMode={this.setViewMode}\n          setFilterBy={this.setCurrentFilter}\n        />\n      </>\n    );\n  }\n}\n\nexport default LandingPage;\n","import React from \"react\";\n\nconst PageDescription = ({ authorName, bookTitle }) => (\n  <p className=\"body-2 left-aligned\">\n    See key examples and analysis of the literary devices {authorName} uses in{\" \"}\n    <em>{bookTitle}</em>, along with the quotes, themes, symbols, and characters\n    related to each device.\n  </p>\n);\n\nexport default PageDescription;\n","import React, { useEffect } from \"react\";\nimport helpers from \"helpers/base\";\nimport { CHAPTERS, DEVICES } from \"../../constants/literary_devices\";\n\n// TODO: Move all this into the parent component since it's not really adding much\nconst QueryParamsControls = ({ filterOptions, setViewMode, setFilterBy }) => {\n  const findFilterByOption = (filterByOption) =>\n    filterOptions.find((option) => option.value === filterByOption);\n\n  const setParamFilters = (_) => {\n    const viewModeParam = helpers.getQueryParam(\"viewMode\")?.toLowerCase();\n    const filterByParam = helpers.getQueryParam(\"filterBy\")?.toLowerCase();\n\n    if (!viewModeParam && !filterByParam) {\n      setViewMode(DEVICES, false);\n      setFilterBy(filterOptions[0], false);\n    }\n    if (viewModeParam) {\n      setViewMode(viewModeParam, false);\n    }\n\n    if (findFilterByOption(filterByParam)) {\n      setFilterBy(findFilterByOption(filterByParam), false);\n    }\n  };\n\n  useEffect(() => {\n    window.addEventListener(\"popstate\", setParamFilters);\n    return () => window.removeEventListener(\"popstate\", setParamFilters);\n  }, []);\n\n  useEffect(() => {\n    const viewModeParam = helpers.getQueryParam(\"viewMode\")?.toLowerCase();\n    const filterByParam = helpers.getQueryParam(\"filterBy\")?.toLowerCase();\n    if (viewModeParam === (CHAPTERS || DEVICES)) {\n      setViewMode(viewModeParam);\n    }\n    if (filterByParam && findFilterByOption(filterByParam)) {\n      setFilterBy(findFilterByOption(filterByParam));\n    }\n  }, []);\n  // eslint-disable-next-line react/jsx-no-useless-fragment\n  return <></>;\n};\n\nexport default QueryParamsControls;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport MenuItem from \"./MenuItem\";\nimport MenuParent, { menuParentProps } from \"./MenuParent\";\n\nconst propTypes = {\n  items: PropTypes.arrayOf(PropTypes.shape(menuParentProps)),\n};\n\nconst Menu = ({ items }) => {\n  return (\n    <div className=\"nav-bar--container\">\n      {items.map((item) => {\n        return (\n          <div key={item.label} className=\"nav-bar--items\">\n            {item.children?.length > 0 ? (\n              <MenuParent {...item} />\n            ) : (\n              <MenuItem label={item.label} url={item.url} />\n            )}\n          </div>\n        );\n      })}\n    </div>\n  );\n};\n\nMenu.propTypes = propTypes;\n\nexport default Menu;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nexport const menuItemType = {\n  label: PropTypes.string.isRequired,\n  url: PropTypes.string.isRequired,\n};\n\nconst MenuItem = ({ label, url }) => {\n  return (\n    <a\n      className=\"nav-bar--child_item\"\n      href={url}\n      data-amplitude=\"universalHeaderNavLink\"\n      data-amplitude-text={label}\n    >\n      {label}\n    </a>\n  );\n};\n\nMenuItem.propTypes = menuItemType;\n\nexport default MenuItem;\n","import React, { useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport MenuItem, { menuItemType } from \"./MenuItem\";\nimport Icon from \"../shared/Icon\";\n\nexport const menuParentProps = {\n  shouldAutoExpand: PropTypes.bool,\n  children: PropTypes.arrayOf(PropTypes.shape(menuItemType)),\n  iconClass: PropTypes.string,\n  iconUrl: PropTypes.string,\n  label: PropTypes.string.isRequired,\n};\n\nconst defaultProps = {\n  shouldAutoExpand: false,\n  children: [],\n  iconUrl: \"\",\n  iconClass: \"\",\n};\n\nconst MenuParent = ({\n  shouldAutoExpand,\n  children,\n  iconUrl,\n  iconClass,\n  label,\n}) => {\n  const [showChildren, setShowChildren] = useState(shouldAutoExpand);\n\n  const toggleExpand = () => {\n    setShowChildren((show) => !show);\n  };\n\n  return (\n    <div className=\"nav-bar--parent\">\n      <div\n        className=\"nav-bar--parent_item\"\n        onClick={toggleExpand}\n        onKeyPress={toggleExpand}\n        role=\"menu\"\n        tabIndex={0}\n      >\n        {iconClass ? (\n          <Icon name={iconClass} size=\"sm\" className=\"nav-bar--parent_icon\" />\n        ) : (\n          <img src={iconUrl} alt={label} className=\"nav-bar--parent_icon-img\" />\n        )}\n        <span>{label}</span>\n        <Icon name={showChildren ? \"up\" : \"down\"} size=\"xs\" />\n      </div>\n      <div className=\"nav-bar--parent_children\">\n        {showChildren &&\n          children.map((child) => {\n            return <MenuItem key={label} label={child.label} url={child.url} />;\n          })}\n      </div>\n    </div>\n  );\n};\n\nMenuParent.propTypes = menuParentProps;\nMenuParent.defaultProps = defaultProps;\n\nexport default MenuParent;\n","import React from \"react\";\nimport TextToggle from \"../../../shared/TextToggle\";\n\nconst AiToolToggle = ({\n  publicDomain,\n  alignment,\n  leftContent,\n  rightContent,\n}) => {\n  const handleToggle = () => {\n    handleLargeScreenClick();\n    handleSmallScreenClick();\n  };\n\n  const handleLargeScreenClick = () => {\n    const aiTool = document.querySelector(\".poem-ai-tool\");\n    const content = document.querySelector(\".poem-guide-content\");\n    [\"hidden-lg\", \"hidden-md\"].forEach((cls) => {\n      aiTool.classList.toggle(cls);\n      content.classList.toggle(cls);\n    });\n  };\n\n  const handleSmallScreenClick = () => {\n    const aiTool = document.querySelector(\".poem-ai-tool\");\n    const content = document.querySelector(\".poem-guide-content\");\n    [\"hidden-sm\", \"hidden-xs\"].forEach((cls) => {\n      aiTool.classList.toggle(cls);\n      content.classList.toggle(cls);\n    });\n\n    const switchBanners = document.querySelectorAll(\n      \"#poem-switch-to-ai, #poem-switch-to-content\"\n    );\n\n    switchBanners.forEach((banner) => {\n      banner.classList.toggle(\"hidden\");\n    });\n  };\n\n  return publicDomain ? (\n    <div className=\"ai-tool-toggle-container\">\n      <TextToggle\n        alignment={alignment}\n        leftContent={leftContent}\n        rightContent={rightContent}\n        onToggle={handleToggle}\n      />\n    </div>\n  ) : (\n    <div\n      aria-hidden=\"true\"\n      className=\"lc-text-toggle empty\"\n      onClick={handleSmallScreenClick}\n    />\n  );\n};\n\nexport default AiToolToggle;\n","import React from \"react\";\nimport Select from \"components/shared/Select\";\nimport selectors from \"constants/poetry/poems/show/selectors\";\nimport helpers from \"helpers/base\";\n\nclass ComponentItemSelect extends React.Component {\n  selectComponentItem(item) {\n    const { id } = item;\n    const { title } = item;\n    const { modalTitle } = item;\n    const modalCategory = modalTitle + (title ? \": \" : \"\") + title;\n    const { category } = item;\n    const { componentValue } = item;\n    const { activeContext } = item;\n\n    const selector = `${selectors.COMPONENT}[data-category='${category}']`;\n    const $component = $(selector);\n    const $section = $component.closest(selectors.SECTION);\n\n    if (helpers.isMobile() || $section.hasClass(\"is-focused\")) {\n      const $title = $($component.find(selectors.COMPONENT_TITLE));\n      const $valueReplace = $(\n        $component.find(selectors.COMPONENT_VALUE_REPLACE)\n      );\n      const $activeContext = $($component.find(selectors.ACTIVE_CONTEXT_NOTE));\n      const $content = $(selectors.POEM_CONTENT);\n      const $modalCategory = $(selectors.TEXT_MODAL_CATEGORY);\n\n      $title.text(title);\n      this.setComponentContentViaAjax(id, $content);\n      $modalCategory.text(modalCategory);\n      $activeContext.html(activeContext);\n      $valueReplace.html(componentValue);\n    }\n  }\n\n  onChange(option) {\n    this.selectComponentItem(option);\n  }\n\n  setComponentContentViaAjax(componentId, el) {\n    $.ajax({\n      url: `/poetry/poem_components/${componentId}`,\n      type: \"GET\",\n      dataType: \"json\",\n      success(data) {\n        el.html(data.content);\n      },\n    });\n  }\n\n  render() {\n    return (\n      <Select\n        {...this.props}\n        id=\"poem-component-items__select\"\n        placeholder=\"Select vocabulary word\"\n        onChange={(value) => this.onChange(value)}\n      />\n    );\n  }\n}\n\nexport default ComponentItemSelect;\n","import React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport InContentAskLitchartsAI from \"../../../ai_tools/InContentAskLitchartsAI\";\n\nconst UncachedAITool = (props) => {\n  const content = <InContentAskLitchartsAI {...props} />;\n  const container = document.querySelector(\n    \"#poems-show__guide__ai-tool__container\"\n  );\n\n  return ReactDOM.createPortal(content, container);\n};\n\nexport default UncachedAITool;\n","import React from \"react\";\n\nconst QuizBanner = ({ bannerContent }) => {\n  return (\n    <div className=\"lc-banner lc-banner-information quiz-banner\">\n      <p\n        dangerouslySetInnerHTML={{ __html: bannerContent }}\n        className=\"banner-1 quiz-content\"\n      />\n    </div>\n  );\n};\n\nexport default QuizBanner;\n","import classNames from \"classnames\";\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { QUIZ_ANSWER_STATES } from \"../constants\";\nimport QuizAnswerChoiceIcon from \"./QuizAnswerChoiceIcon\";\nimport ReviewButton from \"./ReviewButton\";\n\nfunction QuizAnswerChoice({\n  answerLetter,\n  answerText,\n  isSelectedAnswer,\n  state,\n  setSelectedAnswer,\n  isAnonUser,\n  link,\n}) {\n  const isSelected = isSelectedAnswer && state === QUIZ_ANSWER_STATES.UNLOCKED;\n\n  const handleAnswerSelected = (event) => {\n    if (\n      (!isAnonUser && !event.key) ||\n      event.key === \"Enter\" ||\n      event.key === \" \"\n    ) {\n      setSelectedAnswer(answerLetter);\n    }\n  };\n\n  const canBeTabbed =\n    (state === QUIZ_ANSWER_STATES.UNLOCKED ||\n      state === QUIZ_ANSWER_STATES.LOCKED) &&\n    !isSelectedAnswer;\n\n  const amplitudeEvent =\n    state === QUIZ_ANSWER_STATES.LOCKED\n      ? \"quizLockedAnswerChoice\"\n      : \"quizUnlockedAnswerChoice\";\n\n  const amplitudeFunnel = () => {\n    if (state === QUIZ_ANSWER_STATES.UNLOCKED) {\n      return \"none\";\n    }\n    if (isAnonUser) {\n      return \"free\";\n    }\n    return \"paid\";\n  };\n\n  return (\n    <div\n      className={classNames(\"quiz-answer-choice\", state, {\n        selected: isSelected,\n      })}\n      data-amplitude={amplitudeEvent}\n      data-amplitude-funnel={amplitudeFunnel()}\n      data-test={`QuizCardAnswerChoice-${answerLetter}`}\n      onClick={handleAnswerSelected}\n      onKeyPress={handleAnswerSelected}\n      role=\"button\"\n      tabIndex={canBeTabbed ? 0 : undefined}\n      {...(isAnonUser\n        ? { \"data-toggle\": \"modal\", \"data-target\": \"#quiz-free-tier .modal\" }\n        : {})}\n    >\n      <QuizAnswerChoiceIcon answerLetter={answerLetter} state={state} />\n      <div className=\"text-content-container\">\n        <span\n          className=\"response-text\"\n          dangerouslySetInnerHTML={{ __html: answerText }}\n        />\n        <ReviewButton link={link} state={state} />\n      </div>\n    </div>\n  );\n}\n\nconst propTypes = {\n  link: PropTypes.string,\n  answerLetter: PropTypes.string.isRequired,\n  answerText: PropTypes.string.isRequired,\n  state: PropTypes.oneOf(Object.values(QUIZ_ANSWER_STATES)).isRequired,\n  setSelectedAnswer: PropTypes.func,\n  isSelectedAnswer: PropTypes.bool,\n  isAnonUser: PropTypes.bool.isRequired,\n};\n\nconst defaultProps = {\n  link: undefined,\n  setSelectedAnswer: () => {},\n  isSelectedAnswer: false,\n};\n\nQuizAnswerChoice.propTypes = propTypes;\nQuizAnswerChoice.defaultProps = defaultProps;\n\nexport default QuizAnswerChoice;\n","import React from \"react\";\nimport Icon from \"../../shared/Icon\";\nimport { QUIZ_ANSWER_STATES } from \"../constants\";\n\nconst iconName = (state) => {\n  switch (state) {\n    case QUIZ_ANSWER_STATES.SKIPPED:\n    case QUIZ_ANSWER_STATES.CORRECT:\n      return \"checkmark-64\";\n    case QUIZ_ANSWER_STATES.INCORRECT:\n      return \"close-48\";\n    case QUIZ_ANSWER_STATES.LOCKED:\n      return \"lock-filled-48\";\n    case QUIZ_ANSWER_STATES.DISABLED:\n    case QUIZ_ANSWER_STATES.UNLOCKED:\n    default:\n      return \"\";\n  }\n};\n\nfunction QuizAnswerChoiceIcon({ answerLetter, state }) {\n  const icon = iconName(state);\n  switch (state) {\n    case QUIZ_ANSWER_STATES.UNLOCKED:\n    case QUIZ_ANSWER_STATES.DISABLED:\n      return <div className=\"button-1 quiz-button\">{answerLetter}</div>;\n    case QUIZ_ANSWER_STATES.CORRECT:\n    case QUIZ_ANSWER_STATES.INCORRECT:\n    case QUIZ_ANSWER_STATES.SKIPPED:\n      return (\n        <div className=\"button-1 quiz-button\">\n          <Icon name={icon} size=\"xs\" />\n        </div>\n      );\n    case QUIZ_ANSWER_STATES.LOCKED:\n      return (\n        <div className=\"button-1 quiz-button\">\n          <Icon name={icon} size=\"sm\" />\n        </div>\n      );\n    default:\n      return null;\n  }\n}\n\nexport default QuizAnswerChoiceIcon;\n","import React, { useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport QuizAnswerChoice from \"./QuizAnswerChoice\";\nimport { QUIZ_ANSWER_STATES } from \"../constants\";\n\nconst propTypes = {\n  answerOptions: PropTypes.arrayOf(\n    PropTypes.shape({\n      answerLetter: PropTypes.string.isRequired,\n      answerText: PropTypes.string.isRequired,\n      link: PropTypes.string,\n      state: PropTypes.oneOf(Object.values(QUIZ_ANSWER_STATES)),\n    })\n  ).isRequired,\n  locked: PropTypes.bool.isRequired,\n  onAnswerSelect: PropTypes.func.isRequired,\n  questionId: PropTypes.number.isRequired,\n  questionIndex: PropTypes.number.isRequired,\n  questionText: PropTypes.string.isRequired,\n  questionTotal: PropTypes.number.isRequired,\n  isAnonUser: PropTypes.bool.isRequired,\n};\n\nfunction QuizCard({\n  answerOptions,\n  locked,\n  isAnonUser,\n  onAnswerSelect,\n  questionId,\n  questionIndex,\n  questionText,\n  questionTotal,\n}) {\n  const [selectedAnswer, setSelectedAnswer] = useState();\n\n  const handleAnswerSelect = (answerLetter) => {\n    if (!locked) {\n      setSelectedAnswer(answerLetter);\n    }\n\n    onAnswerSelect(answerLetter);\n  };\n\n  return (\n    <div className=\"quiz-card\" data-test={`QuizCard-${questionId}`}>\n      <div className=\"quiz-question\">\n        <h5\n          className=\"title-5\"\n          dangerouslySetInnerHTML={{ __html: questionText }}\n        />\n        <div>\n          <span className=\"question-range\">\n            {questionIndex} of {questionTotal}\n          </span>\n        </div>\n      </div>\n      <div className=\"answer-columns\">\n        {answerOptions.map((answerOption) => {\n          return (\n            <div key={answerOption.answerLetter} className=\"answer-column\">\n              <QuizAnswerChoice\n                isAnonUser={isAnonUser}\n                answerLetter={answerOption.answerLetter}\n                answerText={answerOption.answerText}\n                isSelectedAnswer={selectedAnswer === answerOption.answerLetter}\n                setSelectedAnswer={handleAnswerSelect}\n                state={locked ? QUIZ_ANSWER_STATES.LOCKED : answerOption.state}\n              />\n            </div>\n          );\n        })}\n      </div>\n    </div>\n  );\n}\n\nQuizCard.propTypes = propTypes;\n\nexport default QuizCard;\n","import React, { useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport Icon from \"../../shared/Icon\";\nimport QuizAnswerChoice from \"./QuizAnswerChoice\";\nimport QuizCardResultText from \"./QuizCardResultText\";\nimport { QUIZ_ANSWER_STATES, QUIZ_RESULT_STATES } from \"../constants\";\n\nconst propTypes = {\n  cardState: PropTypes.oneOf(Object.values(QUIZ_RESULT_STATES)).isRequired,\n  answerOptions: PropTypes.arrayOf(\n    PropTypes.shape({\n      link: PropTypes.string,\n      answerLetter: PropTypes.string,\n      answerText: PropTypes.string.isRequired,\n      state: PropTypes.oneOf(Object.values(QUIZ_ANSWER_STATES)).isRequired,\n    })\n  ).isRequired,\n  questionId: PropTypes.number.isRequired,\n  questionIndex: PropTypes.number.isRequired,\n  questionText: PropTypes.string.isRequired,\n};\n\nconst defaultProps = {};\nfunction QuizCardResult({\n  cardState,\n  answerOptions,\n  questionId,\n  questionIndex,\n  questionText,\n}) {\n  const [bannerExpanded, setBannerExpanded] = useState(true);\n\n  const toggleBanner = () => {\n    setBannerExpanded(!bannerExpanded);\n  };\n\n  return (\n    <div\n      className={`quiz-card-result ${cardState}`}\n      data-test={`QuizCardResult-${questionId}`}\n    >\n      {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions */}\n      <div\n        onClick={toggleBanner}\n        className={`banner ${\n          bannerExpanded ? \"expanded\" : \"collapsed\"\n        } ${cardState}`}\n      >\n        <h5 className=\"question-container\">\n          <span className=\"question-index\">{questionIndex}. </span>\n          <span dangerouslySetInnerHTML={{ __html: questionText }} />\n        </h5>\n        <div className=\"icon-container\">\n          <Icon size=\"sm\" name={bannerExpanded ? \"up\" : \"down-48\"} />\n        </div>\n      </div>\n      {bannerExpanded && (\n        <div className={`answer-container ${cardState}`}>\n          <QuizCardResultText cardState={cardState} />\n          <div className=\"answer-columns\">\n            {answerOptions.map((answerOption) => {\n              return (\n                <div key={answerOption.answerLetter} className=\"answer-column\">\n                  <QuizAnswerChoice\n                    link={answerOption.link}\n                    isSelectedAnswer={false}\n                    answerLetter={answerOption.answerLetter}\n                    answerText={answerOption.answerText}\n                    state={answerOption.state}\n                  />\n                </div>\n              );\n            })}\n          </div>\n        </div>\n      )}\n    </div>\n  );\n}\n\nQuizCardResult.propTypes = propTypes;\nQuizCardResult.defaultProps = defaultProps;\n\nexport default QuizCardResult;\n","import React from \"react\";\nimport { QUIZ_RESULT_STATES } from \"../constants\";\n\nfunction QuizCardResultText({ cardState }) {\n  switch (cardState) {\n    case QUIZ_RESULT_STATES.CORRECT:\n      return (\n        <p className=\"result-text\">\n          Good work! Click “Review” to further understand the correct answer.\n        </p>\n      );\n    case QUIZ_RESULT_STATES.INCORRECT:\n      return (\n        <p className=\"result-text\">\n          You’ll get it next time! Click “Review” to understand the correct\n          answer.\n        </p>\n      );\n    case QUIZ_RESULT_STATES.SKIPPED:\n      return (\n        <p className=\"result-text\">\n          You skipped this question. Click “Review” to understand the correct\n          answer.\n        </p>\n      );\n    default:\n      return null;\n  }\n}\n\nexport default QuizCardResultText;\n","import React from \"react\";\nimport { QUIZ_ANSWER_STATES } from \"../constants\";\n\nfunction ReviewButton({ state, link }) {\n  switch (state) {\n    case QUIZ_ANSWER_STATES.SKIPPED:\n    case QUIZ_ANSWER_STATES.CORRECT:\n      return (\n        <a href={link} className=\"review-button btn btn-default btn-sm\">\n          Review\n        </a>\n      );\n    case QUIZ_ANSWER_STATES.INCORRECT:\n    case QUIZ_ANSWER_STATES.LOCKED:\n    case QUIZ_ANSWER_STATES.DISABLED:\n    case QUIZ_ANSWER_STATES.UNLOCKED:\n    default:\n      return null;\n  }\n}\n\nexport default ReviewButton;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport QuizCardResult from \"./QuizCard/QuizCardResult\";\nimport {\n  ANSWER_OPTION_LETTERS,\n  QUIZ_ANSWER_STATES,\n  QUIZ_RESULT_STATES,\n} from \"./constants\";\nimport ResultsPanel from \"./ResultsPanel\";\n\nconst propTypes = {\n  attemptCount: PropTypes.number.isRequired,\n  locked: PropTypes.bool.isRequired,\n  lockedRedirectUrl: PropTypes.string,\n  previousPercentCorrect: PropTypes.number,\n  quizSubmission: PropTypes.shape({\n    correct: PropTypes.number,\n    incorrect: PropTypes.number,\n    skipped: PropTypes.number,\n    percentCorrect: PropTypes.number,\n    reviewLink: PropTypes.string,\n    quizQuestions: PropTypes.arrayOf(\n      PropTypes.shape({\n        answerOptions: PropTypes.arrayOf(\n          PropTypes.shape({\n            answerLetter: PropTypes.oneOf(ANSWER_OPTION_LETTERS).isRequired,\n            answerText: PropTypes.string.isRequired,\n            link: PropTypes.string,\n            state: PropTypes.oneOf(Object.values(QUIZ_ANSWER_STATES))\n              .isRequired,\n          })\n        ),\n        cardState: PropTypes.oneOf(Object.values(QUIZ_RESULT_STATES)),\n        correctAnswerKey: PropTypes.oneOf(ANSWER_OPTION_LETTERS),\n        id: PropTypes.number.isRequired,\n        question: PropTypes.string,\n      })\n    ),\n  }).isRequired,\n};\n\nconst defaultProps = {\n  lockedRedirectUrl: null,\n  previousPercentCorrect: null,\n};\n\nfunction QuizResult({\n  attemptCount,\n  quizSubmission,\n  locked,\n  lockedRedirectUrl,\n}) {\n  const { quizQuestions } = quizSubmission;\n\n  const handleRetake = () => {\n    if (locked) {\n      // TODO: Future story to launch paywall, for now, redirect\n      window.location.href = lockedRedirectUrl;\n    } else {\n      window.location.href = `${window.location.pathname}?retake=1`;\n    }\n  };\n\n  const amplitudeEvent = locked\n    ? \"quizLockedRetakeButton\"\n    : \"quizUnlockedRetakeButton\";\n  const amplitudeFunnel = locked ? \"paid\" : \"none\";\n\n  return (\n    <div>\n      <div className=\"summary-section-quiz--summary\">\n        <ResultsPanel\n          attemptCount={attemptCount}\n          correct={quizSubmission.correct}\n          incorrect={quizSubmission.incorrect}\n          locked={locked}\n          onRetakeClick={handleRetake}\n          previousPercentCorrect={quizSubmission.previousPercentCorrect}\n          reviewLink={quizSubmission.reviewLink}\n          skipped={quizSubmission.skipped}\n        />\n      </div>\n      <h4 className=\"quiz-questions-header title-6\">Your Answers</h4>\n      <div className=\"quiz-questions\">\n        {quizQuestions.map((quizQuestion, index) => {\n          return (\n            <QuizCardResult\n              key={quizQuestion.id}\n              answerOptions={quizQuestion.answerOptions}\n              cardState={quizQuestion.cardState}\n              questionId={quizQuestion.id}\n              questionIndex={index + 1}\n              questionText={quizQuestion.question}\n            />\n          );\n        })}\n      </div>\n      <div className=\"summary-section-quiz--submit\">\n        <button\n          className=\"btn btn-a-plus button-1 btn-lg\"\n          data-amplitude={amplitudeEvent}\n          data-amplitude-funnel={amplitudeFunnel}\n          data-test=\"QuizSubmitButton\"\n          onClick={handleRetake}\n          type=\"button\"\n        >\n          {locked && <i className=\"lc-icon lc-icon-lock-filled lc-icon-sm\" />}\n          Retake Quiz\n        </button>\n      </div>\n    </div>\n  );\n}\n\nQuizResult.propTypes = propTypes;\nQuizResult.defaultProps = defaultProps;\n\nexport default QuizResult;\n","import React, { useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport pluralize from \"pluralize\";\nimport QuizCard from \"./QuizCard/QuizCard\";\nimport { QUIZ_ANSWER_STATES } from \"./constants\";\n\nconst propTypes = {\n  attemptCount: PropTypes.number.isRequired,\n  lastQuizSubmissionSummary: PropTypes.shape({\n    correct: PropTypes.number,\n    incorrect: PropTypes.number,\n    skipped: PropTypes.number,\n    percentCorrect: PropTypes.number,\n    reviewLink: PropTypes.string,\n  }),\n  locked: PropTypes.bool.isRequired,\n  lockedRedirectUrl: PropTypes.string,\n  quizQuestions: PropTypes.arrayOf(\n    PropTypes.shape({\n      answerOptions: PropTypes.arrayOf(\n        PropTypes.shape({\n          answerLetter: PropTypes.string.isRequired,\n          answerText: PropTypes.string.isRequired,\n          state: PropTypes.oneOf([\n            QUIZ_ANSWER_STATES.UNLOCKED,\n            QUIZ_ANSWER_STATES.LOCKED,\n          ]),\n        })\n      ),\n      id: PropTypes.number.isRequired,\n      question: PropTypes.string.isRequired,\n    })\n  ).isRequired,\n  quizTitle: PropTypes.string.isRequired,\n  submissionUrl: PropTypes.string.isRequired,\n  isAnonUser: PropTypes.bool.isRequired,\n};\n\nconst defaultProps = {\n  lastQuizSubmissionSummary: null,\n  lockedRedirectUrl: null,\n};\n\nfunction QuizSubmission({\n  attemptCount,\n  lastQuizSubmissionSummary,\n  locked,\n  lockedRedirectUrl,\n  quizQuestions,\n  quizTitle,\n  isAnonUser,\n  submissionUrl,\n}) {\n  const [isLoading, setIsLoading] = useState(false);\n  const emptyQuestionsSubmission = quizQuestions.reduce(\n    (acc, cur) => Object.assign(acc, { [cur.id]: null }),\n    {}\n  );\n  const [quizQuestionsSubmission, setQuizQuestionsSubmission] = useState(\n    emptyQuestionsSubmission\n  );\n\n  const handleLockedState = () => {\n    window.location.href = lockedRedirectUrl;\n  };\n\n  const handleSubmit = () => {\n    if (locked) {\n      // TODO: Future story to paywall, for now, redirect\n      handleLockedState();\n      return;\n    }\n\n    const token = document.querySelector(\"meta[name='csrf-token']\").content;\n    const reloadPath = window.location.href.split(\"?\")[0];\n    const request = {\n      method: \"POST\",\n      headers: {\n        \"X-CSRF-Token\": token,\n        \"Content-Type\": \"application/json\",\n      },\n      body: JSON.stringify({\n        quiz_submission: {\n          quiz_question_submissions_attributes: Object.keys(\n            quizQuestionsSubmission\n          ).map((key) => {\n            return {\n              quiz_question_id: key,\n              chosen_answer: quizQuestionsSubmission[key],\n            };\n          }),\n        },\n      }),\n    };\n\n    setIsLoading(true);\n    // eslint-disable-next-line compat/compat\n    fetch(submissionUrl, request)\n      .then((_response) => {\n        window.location.href = reloadPath;\n      })\n      .catch((error) => {\n        // TODO: Use toast notifications to indicate failure when it's available.\n        console.error(\"Something went wrong.\", error);\n        setIsLoading(false);\n        alert(\"Something went wrong.\");\n      });\n  };\n\n  const handleAnswerSelect = (chosenAnswer, questionId) => {\n    if (locked) {\n      handleLockedState();\n      return;\n    }\n    const updatedSubmission = quizQuestionsSubmission;\n    updatedSubmission[questionId] = chosenAnswer;\n    setQuizQuestionsSubmission(updatedSubmission);\n  };\n\n  const amplitudeEvent = locked\n    ? \"quizLockedSubmitButton\"\n    : \"quizUnlockedSubmitButton\";\n\n  const amplitudeFunnel = () => {\n    if (!locked) {\n      return \"none\";\n    }\n    if (isAnonUser) {\n      return \"free\";\n    }\n    return \"paid\";\n  };\n\n  return (\n    <div>\n      <div className=\"summary-section-quiz--description body-2\">\n        {attemptCount > 0\n          ? `You took this quiz ${pluralize(\n              \"time\",\n              attemptCount,\n              true\n            )} before and got ${\n              lastQuizSubmissionSummary.percentCorrect\n            }% last time. Retake this quiz to see your new results.`\n          : `Test your knowledge of ${quizTitle}. Submit your answers to see your results and get feedback.`}\n      </div>\n      <div className=\"quiz-questions\">\n        {quizQuestions.map((quizQuestion, index) => {\n          return (\n            <QuizCard\n              onAnswerSelect={(answerLetter) =>\n                handleAnswerSelect(answerLetter, quizQuestion.id)\n              }\n              key={quizQuestion.id}\n              answerOptions={quizQuestion.answerOptions}\n              locked={locked}\n              isAnonUser={isAnonUser}\n              questionId={quizQuestion.id}\n              questionIndex={index + 1}\n              questionText={quizQuestion.question}\n              questionTotal={quizQuestions.length}\n            />\n          );\n        })}\n      </div>\n      <div className=\"summary-section-quiz--submit\">\n        <button\n          className=\"btn btn-a-plus button-1 btn-lg\"\n          data-amplitude={amplitudeEvent}\n          data-amplitude-funnel={amplitudeFunnel()}\n          data-test=\"QuizSubmitButton\"\n          disabled={isLoading}\n          onClick={isAnonUser ? null : handleSubmit}\n          type=\"button\"\n          {...(isAnonUser\n            ? {\n                \"data-toggle\": \"modal\",\n                \"data-target\": \"#quiz-free-tier .modal\",\n              }\n            : {})}\n        >\n          {locked && <i className=\"lc-icon lc-icon-lock-filled lc-icon-sm\" />}\n          Submit\n        </button>\n      </div>\n    </div>\n  );\n}\n\nQuizSubmission.propTypes = propTypes;\nQuizSubmission.defaultProps = defaultProps;\n\nexport default QuizSubmission;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nconst propTypes = {\n  attemptCount: PropTypes.number,\n  correct: PropTypes.number.isRequired,\n  incorrect: PropTypes.number.isRequired,\n  locked: PropTypes.bool,\n  onRetakeClick: PropTypes.func,\n  previousPercentCorrect: PropTypes.number,\n  reviewLink: PropTypes.string.isRequired,\n  skipped: PropTypes.number.isRequired,\n};\n\nconst defaultProps = {\n  attemptCount: 1,\n  locked: false,\n  onRetakeClick: () => {},\n  previousPercentCorrect: null,\n};\n\nfunction Counter({ label, count }) {\n  const className = label.toLowerCase();\n  return (\n    <div className=\"ResultsPanel--score\">\n      <div className={`ResultsPanel--score-number ${className}`}>{count}</div>\n      <span>{label}</span>\n    </div>\n  );\n}\n\nexport default function ResultsPanel({\n  attemptCount,\n  correct = 0,\n  incorrect = 0,\n  locked,\n  onRetakeClick,\n  previousPercentCorrect,\n  reviewLink,\n  skipped = 0,\n}) {\n  const total = correct + incorrect + skipped;\n  const percentCorrect = (correct / total) * 100;\n  const roundedPercentage = Math.round(percentCorrect) || 0;\n  const summaryText =\n    attemptCount > 1\n      ? `You got ${previousPercentCorrect}% correct last time.`\n      : `You got ${correct} of ${total} correct.`;\n\n  const amplitudeEvent = locked\n    ? \"quizLockedRetakeButton\"\n    : \"quizUnlockedRetakeButton\";\n  const amplitudeFunnel = locked ? \"paid\" : \"none\";\n\n  return (\n    <div className=\"ResultsPanel--container\" data-test=\"QuizResultsPanel\">\n      <div className=\"ResultsPanel--left-content\">\n        <div className=\"ResultsPanel--left-percentage\">\n          <span className=\"ResultsPanel--left-percentageText\">\n            {roundedPercentage}%\n          </span>\n        </div>\n        <div className=\"ResultsPanel--left-overview body-1\">\n          <Counter count={correct} label=\"Correct\" />\n          <Counter count={incorrect} label=\"Incorrect\" />\n          {skipped > 0 && <Counter count={skipped} label=\"Skipped\" />}\n        </div>\n      </div>\n      <div className=\"ResultsPanel--right-content\">\n        <div>\n          {summaryText} Keep going!{\" \"}\n          <a href={reviewLink}>Review the summary &amp; analysis</a>, retake\n          this quiz, or review your answers below.\n        </div>\n        <div>\n          <button\n            className=\"ResultsPanel--right-btn btn btn-a-plus button-1 btn-lg\"\n            data-amplitude={amplitudeEvent}\n            data-amplitude-funnel={amplitudeFunnel}\n            onClick={onRetakeClick}\n            id=\"retake-quiz-button\"\n            type=\"button\"\n          >\n            {locked && <i className=\"lc-icon lc-icon-lock-filled lc-icon-sm\" />}\n            <span>Retake Quiz</span>\n          </button>\n        </div>\n      </div>\n    </div>\n  );\n}\n\nResultsPanel.defaultProps = defaultProps;\nResultsPanel.propTypes = propTypes;\n","export const QUIZ_ANSWER_STATES = {\n  UNLOCKED: \"unlocked\",\n  LOCKED: \"locked\",\n  CORRECT: \"correct\",\n  INCORRECT: \"incorrect\",\n  SKIPPED: \"skipped\",\n  DISABLED: \"disabled\",\n};\n\nexport const QUIZ_RESULT_STATES = {\n  CORRECT: \"correct\",\n  INCORRECT: \"incorrect\",\n  SKIPPED: \"skipped\",\n};\n\nexport const REUSABLES = {\n  TITLE: \"title\",\n  TOPIC: \"topic\",\n  SUBTOPIC: \"subtopic\",\n};\n\nexport const ANSWER_OPTION_LETTERS = [\"a\", \"b\", \"c\", \"d\"];\n","import React from \"react\";\nimport MultiSelectRefinementList from \"components/search/base/MultiSelectRefinementList\";\nimport { authorEthnicities } from \"components/search/references/authorCategories\";\n\nconst AuthorEthnicityMultiSelect = () => {\n  return (\n    <MultiSelectRefinementList\n      attribute=\"authorEthnicity\"\n      categories={authorEthnicities}\n      className=\"refinement-list__author-ethnicity\"\n      id=\"refinement-list__author-ethnicity\"\n      limit={100}\n      name=\"refinement-list__author-ethnicity\"\n      title=\"Ethnicity\"\n    />\n  );\n};\n\nexport default AuthorEthnicityMultiSelect;\n","import React from \"react\";\nimport MultiSelectRefinementList from \"components/search/base/MultiSelectRefinementList\";\nimport { authorGenders } from \"components/search/references/authorCategories\";\n\nconst AuthorGenderMultiSelect = () => {\n  return (\n    <MultiSelectRefinementList\n      attribute=\"authorGender\"\n      categories={authorGenders}\n      className=\"refinement-list__author-gender\"\n      id=\"refinement-list__author-gender\"\n      limit={100}\n      name=\"refinement-list__author-gender\"\n      title=\"Gender\"\n    />\n  );\n};\n\nexport default AuthorGenderMultiSelect;\n","import React from \"react\";\nimport MultiSelectRefinementList from \"components/search/base/MultiSelectRefinementList\";\n\nconst AuthorNationalityMultiSelect = ({ countries }) => {\n  return (\n    <MultiSelectRefinementList\n      attribute=\"authorNationality\"\n      categories={countries}\n      className=\"refinement-list__author-nationality\"\n      id=\"refinement-list__author-nationality\"\n      limit={100}\n      name=\"refinement-list__author-nationality\"\n      title=\"Nationality\"\n    />\n  );\n};\n\nexport default AuthorNationalityMultiSelect;\n","import React from \"react\";\nimport MultiSelectRefinementList from \"components/search/base/MultiSelectRefinementList\";\nimport genreCategories from \"components/search/references/genreCategories\";\n\nconst GenreMultiSelect = () => {\n  return (\n    <MultiSelectRefinementList\n      attribute=\"genre\"\n      categories={genreCategories}\n      className=\"refinement-list__genre\"\n      id=\"refinement-list__genre\"\n      limit={100}\n      name=\"refinement-list__genre\"\n      title=\"Genre\"\n    />\n  );\n};\n\nexport default GenreMultiSelect;\n","import React from \"react\";\nimport RefinementList from \"components/search/base/RefinementList\";\nimport gradeLevelCategories from \"components/search/references/gradeLevelCategories\";\n\nconst GradeLevelRefinementList = () => {\n  return (\n    <RefinementList\n      attribute=\"gradeLevel\"\n      categories={gradeLevelCategories}\n      limit={100}\n      title=\"Grade Level\"\n    />\n  );\n};\n\nexport default GradeLevelRefinementList;\n","import React from \"react\";\nimport HierarchicalRefinementList from \"components/search/base/HierarchicalRefinementList\";\nimport guideCategories from \"components/search/references/guideCategories\";\n\nconst GuideRefinementList = () => {\n  return (\n    <HierarchicalRefinementList\n      attribute=\"category\"\n      categories={guideCategories}\n      limit={20}\n      title=\"Type of Guide\"\n    />\n  );\n};\n\nexport default GuideRefinementList;\n","import React from \"react\";\nimport RefinementList from \"components/search/base/RefinementList\";\nimport literaryMovementCategories from \"components/search/references/literaryMovementCategories\";\n\nconst LiteraryMovementRefinementList = () => {\n  return (\n    <RefinementList\n      attribute=\"literaryMovement\"\n      categories={literaryMovementCategories}\n      limit={100}\n      refinementLimit={3}\n      title=\"Literary Movement\"\n    />\n  );\n};\n\nexport default LiteraryMovementRefinementList;\n","import React from \"react\";\nimport RefinementList from \"components/search/base/RefinementList\";\nimport literaryPeriodCategories from \"components/search/references/literaryPeriodCategories\";\n\nconst LiteraryPeriodRefinementList = () => {\n  return (\n    <RefinementList\n      attribute=\"literaryPeriod\"\n      categories={literaryPeriodCategories}\n      limit={100}\n      refinementLimit={3}\n      title=\"Literary Period\"\n    />\n  );\n};\n\nexport default LiteraryPeriodRefinementList;\n","import React from \"react\";\nimport RefinementList from \"components/search/base/RefinementList\";\nimport timePeriodCategories from \"components/search/references/timePeriodCategories\";\n\nconst TimePeriodRefinementList = () => {\n  return (\n    <RefinementList\n      attribute=\"timePeriod\"\n      categories={timePeriodCategories}\n      limit={100}\n      refinementLimit={3}\n      title=\"Time Period (When Written)\"\n    />\n  );\n};\n\nexport default TimePeriodRefinementList;\n","import React from \"react\";\nimport HierarchicalRefinementList from \"components/search/base/HierarchicalRefinementList\";\nimport typeCategories from \"components/search/references/typeCategories\";\n\nconst TypeHierarchicalRefinementList = () => {\n  return (\n    <HierarchicalRefinementList\n      attribute=\"type\"\n      categories={typeCategories}\n      limit={50}\n      title=\"Type of Work & Genre\"\n    />\n  );\n};\n\nexport default TypeHierarchicalRefinementList;\n","// List of currently selected refinements across all filters, shown at the top\n// of the search results. It becomes sticky when scrolling down far enough\n// and it expands/collapses dynamically based on the number of selected filters\n// and what the user is doing\n\nimport React, { useState, useRef, useEffect } from \"react\";\nimport { connectCurrentRefinements } from \"react-instantsearch-dom\";\n\nimport string from \"helpers/string\";\n\n// TODO interim: consolidate this with a master list of categories\nconst MAPPING = {\n  \"Lit Guide > Lit Guide\": \"Lit Guides: Titles\",\n  \"Lit Guide > Theme\": \"Lit Guides: Themes\",\n  \"Lit Guide > Symbol\": \"Lit Guides: Symbols\",\n  \"Lit Guide > Character\": \"Lit Guides: Characters\",\n  \"Lit Guide > Term\": \"Lit Guides: Terms\",\n  \"Lit Guide > Quotes\": \"Lit Guides: Quotes\",\n  \"Lit Guide > Summary & Analysis\": \"Lit Guides: Summary & Analysis\",\n  \"Lit Guide > Other\": \"Lit Guides: Other\",\n  \"Lit Guide > Quiz\": \"Lit Guides: Quizzes\",\n  \"Lit Guide > Lit Device\": \"Lit Guides: Literary Devices\",\n  \"Poetry Guide > Poetry Guide\": \"Poetry Guides: Titles\",\n  \"Poetry Guide > Theme\": \"Poetry Guides: Themes\",\n  \"Poetry Guide > Symbol\": \"Poetry Guides: Symbols\",\n  \"Poetry Guide > Poetic Device\": \"Poetry Guides: Poetic Devices\",\n  \"Poetry Guide > Other\": \"Poetry Guides: Other\",\n  \"Shakescleare > Shakescleare\": \"Shakescleare: Titles\",\n  \"Shakescleare > Scene\": \"Shakescleare: Scenes\",\n  \"Shakescleare > Other\": \"Shakescleare: Other\",\n  \"Lit Term > Lit Term\": \"All Lit Terms\",\n  \"Lit Terms > Other\": \"Lit Terms: Other\",\n  \"Poetry > Lyric Poetry\": \"Lyric Poetry\",\n  \"Poetry > Narrative Poetry\": \"Narrative Poetry\",\n  \"Poetry > <n/a>\": \"Poetry: Other\",\n  \"Prose Nonfiction > Autobiography / Memoir\": \"Autobiographies/Memoirs\",\n  \"Prose Nonfiction > Biography\": \"Biographies\",\n  \"Prose Nonfiction > Diary or Journal\": \"Diaries or Journals\",\n  \"Prose Nonfiction > Document\": \"Documents\",\n  \"Prose Nonfiction > Essay\": \"Essays\",\n  \"Prose Nonfiction > Graphic Memoir / Biography\":\n    \"Graphic Memoirs/Biographies\",\n  \"Prose Nonfiction > History\": \"History\",\n  \"Prose Nonfiction > Philosophy & Political Philosophy\":\n    \"Philosophy & Political Philosophy\",\n  \"Prose Nonfiction > Sermon, Speech, or Lecture\":\n    \"Sermons, Speeches, or Lectures\",\n  \"Prose Nonfiction > Sociology & Social Science\": \"Sociology & Social Science\",\n  \"Prose Nonfiction > Theology\": \"Theology\",\n  \"Prose Nonfiction > <n/a>\": \"Prose Nonfiction: Other\",\n  \"Prose Fiction > Folktale, Fable, or Fairy Tale\":\n    \"Folktales, Fables, or Fairy Tales\",\n  \"Prose Fiction > Graphic Novel\": \"Graphic Novels\",\n  \"Prose Fiction > Novel\": \"Novels\",\n  \"Prose Fiction > Novella\": \"Novellas\",\n  \"Prose Fiction > Short Story / Story Collection\":\n    \"Short Stories/Story Collections\",\n  \"Prose Fiction > <n/a>\": \"Other\",\n  \"Play or Drama > Musical\": \"Musicals\",\n  \"Play or Drama > One-Act Play\": \"One-Act Plays\",\n  \"Play or Drama > Verse Drama\": \"Verse Dramas\",\n  \"Play or Drama > <n/a>\": \"Play or Drama: Other\",\n  \"Mythology > <n/a>\": \"Mythology: Other\",\n};\n\n// Each individual selected refinement\nconst CurrentRefinementPill = (props) => {\n  return (\n    // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions\n    <div\n      className=\"current-refinements__refinement\"\n      onClick={() => props.refine(props.value)}\n    >\n      {props.text}\n      <i className=\"lc-icon lc-icon-xs lc-icon-close\" />\n    </div>\n  );\n};\n\nconst getLabel = (label, item) => {\n  if (item.attribute === \"literaryPeriod\") {\n    return `${label.split(\" (\")[0]}...`;\n  }\n  if (item.attribute === \"gradeLevel\") {\n    if (label === \"Higher education\") return label;\n    return string.cardinalize(label);\n  }\n  if ([\"category\", \"type\"].indexOf(item.attribute) > -1) {\n    return string.truncate(MAPPING[label] || \"UNLABELED\", 31);\n  }\n\n  return string.truncate(label, 31);\n};\n\nconst BOOTSTRAP_COL_PADDING = 30;\n\n// The current refinements container becomes fixed when scrolling down so it needs\n// a fixed pixel width\nconst handleResize = () => {\n  $(\".current-refinements\").width(\n    $(\".current-refinements\").parent().outerWidth() - BOOTSTRAP_COL_PADDING\n  );\n};\n\nconst CurrentRefinements = (props) => {\n  // If the current refinement is fixed to the top of the page\n  const [isSticky, setIsSticky] = useState(false);\n\n  // If current refinement is expanded to show all refinements or collapsed\n  const [isExpanded, setIsExpanded] = useState(true);\n\n  // Number of hidden refinements\n  const [hiddenRefinements, setHiddenRefinements] = useState(0);\n\n  const containerRef = useRef(null);\n  const listRef = useRef(null);\n\n  useEffect(() => {\n    window.addEventListener(\"resize\", handleResize);\n\n    handleResize();\n\n    return function cleanup() {\n      window.removeEventListener(\"resize\", handleResize);\n    };\n  }, []);\n\n  useEffect(() => {\n    window.addEventListener(\"scroll\", handleScroll, { passive: true });\n\n    return function cleanup() {\n      window.removeEventListener(\"scroll\", handleScroll);\n    };\n  }, [isSticky]);\n\n  // Always expand list when an item is added/removed\n  useEffect(() => {\n    setIsExpanded(true);\n  }, [props.items]);\n\n  // When shrinking on scroll, set the hidden refinement count for the more button\n  useEffect(() => {\n    if (!isExpanded) {\n      let count = 0;\n\n      let top = -1;\n      // eslint-disable-next-line no-restricted-syntax\n      for (const child of listRef.current.children) {\n        if (top < 0) {\n          top = child.getBoundingClientRect().top;\n        } else if (child.getBoundingClientRect().top > top) {\n          count += 1;\n        }\n      }\n\n      setHiddenRefinements(count);\n    }\n  }, [isExpanded]);\n\n  // On scroll, handle sticky status of the refinement container\n  const handleScroll = () => {\n    if (containerRef.current) {\n      if (isSticky) {\n        setIsSticky($(\".search__searchbar\")[0].getBoundingClientRect().top < 0);\n      } else {\n        setIsSticky(containerRef.current.getBoundingClientRect().top <= 0);\n      }\n    }\n\n    setIsExpanded(false);\n  };\n\n  const expandList = () => {\n    setIsExpanded(true);\n  };\n\n  const itemsToRender = [];\n\n  // The items array may have different children depending on the type of filter\n  // and which filter is selected, this method covers each case\n  props.items.forEach((item) => {\n    let label;\n\n    if (item.items) {\n      item.items.forEach((refinement) => {\n        label = getLabel(refinement.label, item);\n        itemsToRender.push({ text: `${label}`, value: refinement.value });\n      });\n    } else if (Array.isArray(item.currentRefinement)) {\n      item.currentRefinement.forEach((refinement) => {\n        label = getLabel(refinement.label, item);\n        itemsToRender.push({ text: label, value: item.value });\n      });\n    } else {\n      label = getLabel(item.label, item);\n      itemsToRender.push({ text: label, value: item.value });\n    }\n  });\n\n  // Add extra CSS classes based on component state\n  let containerClassName = \"current-refinements\";\n  if (itemsToRender.length === 0) {\n    containerClassName += \" current-refinements--empty\";\n  } else if (isSticky) {\n    containerClassName += \" current-refinements--sticky\";\n  }\n\n  let listClassName = \"current-refinements__list\";\n  if (itemsToRender.length === 0) {\n    listClassName += \" current-refinements__list--empty\";\n  } else if (!isExpanded) {\n    listClassName += \" current-refinements__list--shrunk\";\n  }\n\n  return (\n    <div className={containerClassName} ref={containerRef}>\n      {itemsToRender.length > 0 && (\n        <div className=\"current-refinements__header\">Selected Filters</div>\n      )}\n      <div className=\"current-refinements__list-container\">\n        <div className={listClassName} ref={listRef}>\n          {itemsToRender.map((item) => {\n            return (\n              <CurrentRefinementPill\n                key={item.text + item.label}\n                refine={props.refine}\n                text={item.text}\n                value={item.value}\n              />\n            );\n          })}\n        </div>\n        {hiddenRefinements > 0 && !isExpanded && (\n          <div className=\"current-refinements__expand\">\n            <button\n              className=\"btn btn-text btn-sm\"\n              onClick={expandList}\n              type=\"button\"\n            >\n              <span className=\"hidden-xs\">{`+ ${hiddenRefinements} more`}</span>\n              <span className=\"visible-xs hidden-sm\">{`+ ${hiddenRefinements}`}</span>\n            </button>\n          </div>\n        )}\n      </div>\n    </div>\n  );\n};\n\nexport default connectCurrentRefinements(CurrentRefinements);\n","// The refinement list that is toggled dynamically from the HierarchicalRefinementList\n// On desktop, it is shown on hover, on touch devices it is shown on touch\n// On mobile, it doesn't flyout but replaces the filter in the filter slideout\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { RefinementList } from \"components/search/base/RefinementList\";\nimport IconButton from \"components/shared/IconButton\";\nimport flyoutReference from \"components/search/references/flyoutReference\";\n\nconst propTypes = {\n  attribute: PropTypes.string.isRequired,\n  category: PropTypes.string.isRequired,\n  hidden: PropTypes.bool,\n  hideFlyout: PropTypes.func.isRequired,\n  hideFlyoutHover: PropTypes.func.isRequired,\n  refine: PropTypes.func.isRequired,\n};\n\nconst defaultProps = {\n  hidden: true,\n};\n\nconst Flyout = (props) => {\n  const categories =\n    flyoutReference[flyoutReference.referenceMapping[props.category]];\n  let className = \"refinement-list__flyout\";\n  if (props.hidden) className += \" hidden\";\n\n  let title = props.category;\n  if ([\"Lit Guide\", \"Poetry Guide\", \"Lit Term\"].indexOf(title) > -1) {\n    title = `${title}s`;\n  }\n\n  return (\n    <div className={className} onMouseLeave={props.hideFlyoutHover}>\n      <div className=\"refinement-list__flyout-header\">\n        <IconButton\n          btnClass=\"btn-sm btn-text\"\n          iconClass=\"lc-icon-arrow-left lc-icon-xs\"\n          onClick={props.hideFlyout}\n          text=\"All filters\"\n        />\n        <h2>{props.category}</h2>\n      </div>\n      <RefinementList\n        attribute={props.attribute}\n        categories={categories}\n        controlled\n        currentRefinement={props.currentRefinement}\n        items={props.items}\n        refine={props.refine}\n      />\n    </div>\n  );\n};\n\nFlyout.propTypes = propTypes;\nFlyout.defaultProps = defaultProps;\n\nexport default Flyout;\n","// Renders a list of categories as HierarchicalRefinementListElement with\n// accessible subcategories as Flyouts. Controls the Flyout state for all Flyouts\n// rendered by this component as well as callbacks for controlling them on\n// desktop/mobile\n\nimport React, { useEffect, useState } from \"react\";\nimport { connectRefinementList } from \"react-instantsearch-dom\";\nimport PropTypes from \"prop-types\";\n\nimport { XS_PIXEL_MAX } from \"constants/breakpoints\";\nimport HierarchicalRefinementListElement from \"components/search/base/HierarchicalRefinementListElement\";\n\nconst propTypes = {\n  attribute: PropTypes.string.isRequired,\n  categories: PropTypes.arrayOf(\n    PropTypes.shape({\n      label: PropTypes.string.isRequired,\n      value: PropTypes.string.isRequired,\n    }).isRequired\n  ).isRequired,\n  items: PropTypes.array,\n  refine: PropTypes.func.isRequired,\n  title: PropTypes.string.isRequired,\n};\n\nconst defaultProps = {\n  items: [],\n};\n\nconst HierarchicalRefinementList = (props) => {\n  // Only one flyout can be visible at a time, this manages the state\n  const [flyState, setFlyState] = useState(null);\n\n  // Stores the internal state for all of the flyouts by category\n  const [refinedValues, updateRefinedValue] = useState({});\n\n  // Pass the internally stored refined values to Algolia\n  useEffect(() => {\n    props.refine([].concat(...Object.values(refinedValues)));\n  }, [refinedValues]);\n\n  const handleRefine = (values, category) => {\n    updateRefinedValue((prevState) => ({ ...prevState, [category]: values }));\n  };\n\n  // Add events to manage showing/hiding flyouts\n  useEffect(() => {\n    if (flyState === null) {\n      document.removeEventListener(\"click\", outsideFlyoutClickListener);\n      document.removeEventListener(\"touchend\", outsideFlyoutClickListener);\n    } else {\n      document.addEventListener(\"click\", outsideFlyoutClickListener);\n      document.addEventListener(\"touchend\", outsideFlyoutClickListener);\n    }\n\n    return function cleanup() {\n      document.removeEventListener(\"click\", outsideFlyoutClickListener);\n      document.removeEventListener(\"touchend\", outsideFlyoutClickListener);\n    };\n  }, [flyState]);\n\n  const toggleFlyout = (category) => {\n    if (category === null) {\n      $(\".search__filters\").removeClass(\"search__filters--with-flyout\");\n    } else {\n      $(\".search__filters\").addClass(\"search__filters--with-flyout\");\n    }\n\n    setFlyState(category);\n  };\n\n  // Closes flyout if clicked outside of it\n  const outsideFlyoutClickListener = (event) => {\n    const $target = $(event.target);\n    if (\n      !$target.closest($(\".refinement-list__flyout\")).length &&\n      $(\".refinement-list__flyout\").is(\":visible\")\n    ) {\n      toggleFlyout(null);\n    }\n  };\n\n  // Closes flyout if hovered outside of it\n  const outsideFlyoutHover = (event) => {\n    // Hovers only registered on large size\n    if (window.innerWidth <= XS_PIXEL_MAX) {\n      return;\n    }\n\n    const $target = $(event.target);\n    if (\n      !$target.closest($(\".refinement-list__flyout\")).length &&\n      $(\".refinement-list__flyout\").is(\":visible\")\n    ) {\n      toggleFlyout(null);\n    }\n  };\n\n  return (\n    <div className=\"refinement-list\" onMouseLeave={outsideFlyoutHover}>\n      <div className=\"refinement-list__header\">{props.title}</div>\n      <ul className=\"refinement-list__list refinement-list__list--hierarchical\">\n        {props.categories.map((category) => {\n          const items =\n            props.items.filter(\n              (i) => i.label.split(\" > \")[0] === category.value\n            ) || [];\n          const showFlyout = flyState === category.value;\n\n          return (\n            <HierarchicalRefinementListElement\n              attribute={props.attribute}\n              currentRefinement={props.currentRefinement}\n              handleClick={toggleFlyout}\n              handleRefine={handleRefine}\n              items={items}\n              key={category.value}\n              label={category.label}\n              showFlyout={showFlyout}\n              value={category.value}\n            />\n          );\n        })}\n      </ul>\n    </div>\n  );\n};\n\nHierarchicalRefinementList.propTypes = propTypes;\nHierarchicalRefinementList.defaultProps = defaultProps;\n\nexport default connectRefinementList(HierarchicalRefinementList);\n","// Category within a HierarchicalRefinementList, triggers the respective flyout\n// on click/hover interactions\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { XS_PIXEL_MAX } from \"constants/breakpoints\";\nimport number from \"helpers/number\";\nimport Flyout from \"components/search/base/Flyout\";\n\nconst propTypes = {\n  attribute: PropTypes.string.isRequired,\n  handleClick: PropTypes.func,\n  handleRefine: PropTypes.func.isRequired,\n  items: PropTypes.array,\n  label: PropTypes.string.isRequired,\n  showFlyout: PropTypes.bool,\n  value: PropTypes.string.isRequired,\n};\n\nconst defaultProps = {\n  handleClick: () => {},\n  items: [],\n  showFlyout: false,\n};\n\nconst HierarchicalRefinementListElement = (props) => {\n  // Set up count labels and respective CSS classes\n  let itemsToCount = props.items.filter((item) => item.isRefined);\n  const refinedCount = itemsToCount.length;\n\n  if (refinedCount === 0) itemsToCount = props.items;\n\n  const hitCount = itemsToCount.reduce(\n    (accumulator, currentVal) => accumulator + currentVal.count,\n    0\n  );\n  let liClassName =\n    \"refinement-list__element refinement-list__element--hierarchical\";\n\n  if (hitCount === 0) liClassName += \" refinement-list__element--disabled\";\n  if (props.showFlyout) liClassName += \" refinement-list__element--active\";\n\n  let elementCountClassName = \"refinement-list__element-count\";\n  if (refinedCount > 0)\n    elementCountClassName += \" refinement-list__element-count--refined\";\n\n  return (\n    <li key={props.value} className={liClassName}>\n      {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events */}\n      <div\n        className=\"refinement-list__element-subcontainer\"\n        onMouseEnter={() => {\n          if (window.innerWidth <= XS_PIXEL_MAX) {\n            return;\n          }\n          props.handleClick(props.value);\n        }}\n        onClick={() => {\n          props.handleClick(props.value);\n        }}\n        role=\"button\"\n        tabIndex=\"-1\"\n      >\n        {props.label}\n        <span className=\"refinement-list__element-right-side\">\n          {refinedCount > 0 && (\n            <span className=\"refinement-list__num-applied\">\n              {refinedCount} applied\n            </span>\n          )}\n          <span className={elementCountClassName}>\n            {number.commaSeparateNumber(hitCount)}\n          </span>\n          <i className=\"lc-icon lc-icon-right lc-icon-xs refimement-list__expand-icon\" />\n        </span>\n      </div>\n\n      <Flyout\n        attribute={props.attribute}\n        category={props.value}\n        currentRefinement={props.currentRefinement}\n        hidden={!props.showFlyout}\n        hideFlyout={() => props.handleClick(null)}\n        hideFlyoutHover={() => {\n          if (window.innerWidth <= XS_PIXEL_MAX) {\n            return;\n          }\n\n          props.handleClick(null);\n        }}\n        items={props.items}\n        refine={props.handleRefine}\n      />\n    </li>\n  );\n};\n\nHierarchicalRefinementListElement.propTypes = propTypes;\nHierarchicalRefinementListElement.defaultProps = defaultProps;\n\nexport default HierarchicalRefinementListElement;\n","// Individual search result\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport string from \"helpers/string\";\n\nconst propTypes = {\n  hit: PropTypes.shape({\n    category: PropTypes.string.isRequired,\n    primaryTitle: PropTypes.string.isRequired,\n    secondaryTitle: PropTypes.string,\n    path: PropTypes.string.isRequired,\n    blurb: PropTypes.string.isRequired,\n    author: PropTypes.string,\n  }).isRequired,\n  isAPlus: PropTypes.bool,\n};\n\nconst defaultProps = {\n  isAPlus: false,\n};\n\nconst Hit = ({ hit, isAPlus }) => {\n  const title = hit.secondaryTitle\n    ? `${hit.secondaryTitle} > ${hit.primaryTitle}`\n    : hit.primaryTitle;\n  const category = hit.category.split(\" > \")[1];\n\n  let hitClass = \"hit-item\";\n  let categoryClass = `category ${category\n    .toLowerCase()\n    .replace(\"&\", \"\")\n    .replace(/[ ]+/g, \"-\")}`;\n  let titleClass = \"title\";\n  let blurbClass = \"\";\n  let authorClass = \"search__hit-author\";\n\n  let isBlurred = false;\n  if (\n    !isAPlus &&\n    [\"Lit Guide\", \"Poetry Guide\", \"Shakescleare\", \"Lit Term\"].indexOf(\n      category\n    ) < 0\n  ) {\n    hitClass += \" blurred\";\n    categoryClass += \" blurred\";\n    titleClass += \" blurred-text\";\n    blurbClass += \" blurred-text\";\n    authorClass += \" blurred-text\";\n\n    isBlurred = true;\n  }\n\n  return (\n    <div className={hitClass}>\n      {isBlurred ? (\n        <div>\n          <span className={categoryClass}>{category}</span>\n          <span className={titleClass}>{title}</span>\n        </div>\n      ) : (\n        <div>\n          <a className={categoryClass} href={hit.path}>\n            {category}\n          </a>\n          <a className={titleClass} href={hit.path}>\n            {title}\n          </a>\n        </div>\n      )}\n      {category !== \"Lit Term\" && (\n        <div className={authorClass}>by {hit.author}</div>\n      )}\n      <div className={blurbClass}>{string.htmlDecode(hit.blurb)}</div>\n    </div>\n  );\n};\n\nHit.propTypes = propTypes;\nHit.defaultProps = defaultProps;\n\nexport default Hit;\n","// List of search results\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport {\n  connectHits,\n  connectStateResults,\n  Pagination,\n} from \"react-instantsearch-dom\";\n\nimport APlus from \"components/shared/dialogs/APlus\";\nimport Hit from \"components/search/base/Hit\";\nimport logo from \"images/reskin/small-logo-and-wordmark-a-plus.svg\";\nimport number from \"helpers/number\";\nimport NoResults from \"components/search/base/NoResults\";\n\nconst propTypes = {\n  aPlusPromoUrl: PropTypes.string.isRequired,\n  hits: PropTypes.array,\n  isAPlus: PropTypes.bool,\n  promoInfo: PropTypes.shape({\n    characterCount: PropTypes.number,\n    quoteCount: PropTypes.number,\n    symbolCount: PropTypes.number,\n    themeCount: PropTypes.number,\n    quizCount: PropTypes.number,\n    litDeviceCount: PropTypes.number,\n  }).isRequired,\n  userSignedIn: PropTypes.bool,\n};\n\nconst defaultProps = {\n  hits: [],\n  isAPlus: false,\n  userSignedIn: false,\n};\n\nconst Paginate = connectStateResults(({ searchResults }) => {\n  if (searchResults && searchResults.nbHits <= 20) return null;\n\n  return (\n    <div id=\"pagination\" className=\"lc-pagination\">\n      <Pagination showLast />\n    </div>\n  );\n});\n\nconst PromoContent = connectStateResults(\n  ({ promoInfo, searchResults, searchState }) => {\n    const relatedText =\n      (searchState.query || \"\").length > 0\n        ? `related to ${searchState.query}`\n        : \"related to your search\";\n    const resultData = searchResults.disjunctiveFacets[0].data;\n    return (\n      <div>\n        <div>\n          Unlock <strong>Advanced Search</strong>. Get the power to{\" \"}\n          <strong>refine</strong> your search and find <strong>related</strong>{\" \"}\n          themes, symbols, characters, or quotes:\n        </div>\n        <ul>\n          <li className=\"theme\">\n            <strong>{`${number.commaSeparateNumber(\n              promoInfo.themeCount\n            )} themes`}</strong>{\" \"}\n            ({number.commaSeparateNumber(resultData[\"Lit Guide > Theme\"] || 0)}{\" \"}\n            {relatedText})\n          </li>\n          <li className=\"symbol\">\n            <strong>{`${number.commaSeparateNumber(\n              promoInfo.symbolCount\n            )} symbols`}</strong>{\" \"}\n            ({number.commaSeparateNumber(resultData[\"Lit Guide > Symbol\"] || 0)}{\" \"}\n            {relatedText})\n          </li>\n          <li className=\"character\">\n            <strong>{`${number.commaSeparateNumber(\n              promoInfo.characterCount\n            )} characters`}</strong>{\" \"}\n            (\n            {number.commaSeparateNumber(\n              resultData[\"Lit Guide > Character\"] || 0\n            )}{\" \"}\n            {relatedText})\n          </li>\n          <li className=\"quotes\">\n            <strong>{`${number.commaSeparateNumber(\n              promoInfo.quoteCount\n            )} quotes`}</strong>{\" \"}\n            ({number.commaSeparateNumber(resultData[\"Lit Guide > Quotes\"] || 0)}{\" \"}\n            {relatedText})\n          </li>\n          <li className=\"quizzes\">\n            <strong>{`${number.commaSeparateNumber(\n              promoInfo.quizCount\n            )} quizzes`}</strong>{\" \"}\n            (\n            {number.commaSeparateNumber(resultData[\"Lit Guide > Quizzes\"] || 0)}{\" \"}\n            {relatedText})\n          </li>\n          <li className=\"lit-devices\">\n            <strong>{`${number.commaSeparateNumber(\n              promoInfo.litDeviceCount\n            )} literary devices`}</strong>{\" \"}\n            (\n            {number.commaSeparateNumber(\n              resultData[\"Lit Guide > Lit Device\"] || 0\n            )}{\" \"}\n            {relatedText})\n          </li>\n        </ul>\n      </div>\n    );\n  }\n);\n\nfunction Hits(props) {\n  if (props.hits.length === 0) {\n    return (\n      <NoResults\n        userSignedIn={props.userSignedIn}\n        showRequestContentAfterDelay={props.showRequestContentAfterDelay}\n      />\n    );\n  }\n\n  // Set so only 1 promo can be visible at a time\n  let shownPromo = false;\n  return (\n    <div id=\"hits\">\n      {props.hits.map((hit) => {\n        if (\n          !props.isAPlus &&\n          !shownPromo &&\n          [\"Lit Guide\", \"Poetry Guide\", \"Shakescleare\", \"Lit Term\"].indexOf(\n            hit.category.split(\" > \")[1]\n          ) < 0\n        ) {\n          shownPromo = true;\n          return (\n            <div key={hit.objectID} className=\"hits__a-plus-container\">\n              <div className=\"hits__a-plus-dialog\">\n                <APlus\n                  amplitudeKey=\"advancedSearchCentralColumn\"\n                  href={props.aPlusPromoUrl}\n                  logoSrc={logo}\n                  isFreeTier={props.userSignedIn}\n                >\n                  <PromoContent promoInfo={props.promoInfo} />\n                </APlus>\n              </div>\n              <Hit hit={hit} isAPlus={props.isAPlus} />\n            </div>\n          );\n        }\n\n        return <Hit key={hit.objectID} hit={hit} isAPlus={props.isAPlus} />;\n      })}\n      <Paginate />\n    </div>\n  );\n}\n\nHits.propTypes = propTypes;\nHits.defaultProps = defaultProps;\n\nexport default connectHits(Hits);\n","// Wrapper of the MultiSelect component with added functionality to refine search\n// results on option select\n\nimport React from \"react\";\nimport { connectRefinementList } from \"react-instantsearch-dom\";\nimport PropTypes from \"prop-types\";\n\nimport promoAttributeReference from \"components/search/references/promoAttributeReference\";\nimport FilterPromoContext from \"components/search/context/FilterPromoContext\";\nimport MultiSelect from \"components/shared/MultiSelect\";\n\nconst propTypes = {\n  attribute: PropTypes.string.isRequired,\n  categories: PropTypes.arrayOf(\n    PropTypes.shape({\n      label: PropTypes.string.isRequired,\n      value: PropTypes.string.isRequired,\n    }).isRequired\n  ).isRequired,\n  className: PropTypes.string,\n  currentRefinement: PropTypes.array,\n  id: PropTypes.string.isRequired,\n  items: PropTypes.array,\n  name: PropTypes.string.isRequired,\n  refine: PropTypes.func.isRequired,\n  title: PropTypes.string,\n\n  //\n  // Filter promo context props\n  isAPlus: PropTypes.bool,\n  setCurrentPromoAttribute: PropTypes.func.isRequired,\n};\n\nconst defaultProps = {\n  className: \"\",\n  isAPlus: false,\n  items: [],\n  title: null,\n};\n\nconst MultiSelectRefinementList = (props) => {\n  const handleRefine = (selectedValues) => {\n    if (!props.isAPlus) {\n      props.setCurrentPromoAttribute(promoAttributeReference[props.attribute]);\n      return;\n    }\n\n    props.refine((selectedValues || []).map(({ value }) => value));\n  };\n\n  const refinementClassName = `refinement-list ${props.className}`;\n\n  const countedCategories = props.categories.map((cat) => {\n    const { count } = props.items.find((i) => i.label === cat.value) || {\n      count: 0,\n    };\n    return { ...cat, numResults: count };\n  });\n\n  return (\n    <div className={refinementClassName}>\n      {props.title && <div>{props.title}</div>}\n      <MultiSelect\n        id={props.id}\n        isControlled\n        name={props.name}\n        onChange={handleRefine}\n        options={countedCategories}\n        preventSelect={!props.isAPlus}\n        value={props.currentRefinement}\n      />\n    </div>\n  );\n};\n\nconst MultiSelectRefinementListWithContext = (props) => {\n  return (\n    <FilterPromoContext.Consumer>\n      {(filterPromoContextProps) => (\n        <MultiSelectRefinementList {...props} {...filterPromoContextProps} />\n      )}\n    </FilterPromoContext.Consumer>\n  );\n};\n\nMultiSelectRefinementList.propTypes = propTypes;\nMultiSelectRefinementList.defaultProps = defaultProps;\n\nexport default connectRefinementList(MultiSelectRefinementListWithContext);\n","// Rendered when there are no results from the search query\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport logo from \"images/reskin/small-logo-and-wordmark.png\";\nimport RequestContentModal from \"components/shared/RequestContentModal\";\n\nconst propTypes = {\n  userSignedIn: PropTypes.bool,\n};\n\nconst defaultProps = {\n  userSignedIn: false,\n};\n\nconst showRequestContentModal = () => {\n  $(\"#request-content-modal\").modal(\"show\");\n};\n\nfunction NoResults(props) {\n  return (\n    <div className=\"no-results\">\n      <div className=\"no-results__title\">No results found.</div>\n      <div className=\"no-results__body text-center\">\n        Please try another search or{\" \"}\n        {props.userSignedIn ? (\n          // eslint-disable-next-line jsx-a11y/anchor-is-valid\n          <a\n            href=\"#\"\n            data-amplitude=\"searchNoResultsRequestGuide\"\n            onClick={showRequestContentModal}\n          >\n            request a guide\n          </a>\n        ) : (\n          // eslint-disable-next-line jsx-a11y/anchor-is-valid\n          <a\n            href=\"#\"\n            data-amplitude=\"searchNoResultsRequestGuide\"\n            data-toggle=\"modal\"\n            data-target=\".registration-modal\"\n          >\n            request a guide\n          </a>\n        )}{\" \"}\n        for us to cover.\n      </div>\n      <RequestContentModal\n        logoUrl={logo}\n        showAfterDelay={props.showRequestContentAfterDelay}\n      />\n    </div>\n  );\n}\n\nNoResults.propTypes = propTypes;\nNoResults.defaultProps = defaultProps;\n\nexport default NoResults;\n","// Rendered within a refinement list and contains the checkbox that triggers the\n// refinement\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport number from \"helpers/number\";\nimport ControlledCheckbox from \"components/shared/ControlledCheckbox\";\n\nconst propTypes = {\n  count: PropTypes.number,\n  handleRefine: PropTypes.func.isRequired,\n  isRefined: PropTypes.bool,\n  Label: PropTypes.node.isRequired,\n  refineable: PropTypes.bool,\n  value: PropTypes.string.isRequired,\n};\n\nconst defaultProps = {\n  count: 0,\n  isRefined: false,\n  refineable: false,\n};\n\nconst RefineElement = (props) => {\n  const isDisabled = props.count === 0;\n\n  let containerClassName = \"refine-element\";\n  if (isDisabled) containerClassName += \" refine-element--disabled\";\n  return (\n    <div className={containerClassName}>\n      <div className=\"refine-element__left\">\n        <ControlledCheckbox\n          checked={props.isRefined}\n          disabled={isDisabled}\n          name={props.value}\n          onChange={(e) => {\n            if (!props.refineable) {\n              e.preventDefault();\n            }\n            props.handleRefine(props.value);\n          }}\n        >\n          {props.Label}\n        </ControlledCheckbox>\n      </div>\n      <span\n        className={`refine-element__count${\n          props.isRefined ? \" refine-element__count--refined\" : \"\"\n        }`}\n      >\n        {number.commaSeparateNumber(props.count)}\n      </span>\n    </div>\n  );\n};\n\nRefineElement.propTypes = propTypes;\nRefineElement.defaultProps = defaultProps;\n\nexport default RefineElement;\n","// A filter with a list of refineable values\n//   The refine function is passed either from another local component\n//     (like when the list is managed by the HierarchicalRefinementList)\n//     - import { RefinementList } from \"RefinementList\"\n//   or is passed directly by algolia via connectRefinementList\n//     - import RefinementList from \"RefinementList\"\nimport React, { useEffect, useState } from \"react\";\nimport { connectRefinementList } from \"react-instantsearch-dom\";\nimport PropTypes from \"prop-types\";\nimport array from \"lodash/array\";\n\nimport promoAttributeReference from \"components/search/references/promoAttributeReference\";\nimport FilterPromoContext from \"components/search/context/FilterPromoContext\";\nimport RefineElement from \"components/search/base/RefineElement\";\n\nconst propTypes = {\n  attribute: PropTypes.string,\n  categories: PropTypes.arrayOf(\n    PropTypes.shape({\n      label: PropTypes.string.isRequired,\n      value: PropTypes.string.isRequired,\n    }).isRequired\n  ),\n  currentRefinement: PropTypes.array,\n  items: PropTypes.array,\n  refine: PropTypes.func.isRequired,\n  // Note that refinementLimit is specified internally while `limit` is specified by\n  // the algolia API, which we are not using here\n  refinementLimit: PropTypes.number,\n  title: PropTypes.string,\n\n  //\n  // Filter promo context props\n  //\n  isAPlus: PropTypes.bool,\n  setCurrentPromoAttribute: PropTypes.func.isRequired,\n};\n\nconst defaultProps = {\n  attribute: null,\n  categories: [],\n  currentRefinement: [],\n  isAPlus: false,\n  items: [],\n  refinementLimit: -1,\n  title: null,\n};\n\nconst Label = ({ label, attribute }) => {\n  if (attribute === \"literaryPeriod\") {\n    const [label1, label2] = label.split(\"(\");\n    return (\n      <>\n        {label1}\n        <br />\n        {`(${label2}`}\n      </>\n    );\n  }\n\n  return label;\n};\n\nconst isRefineable = (isAPlus, categoryValue) =>\n  isAPlus ||\n  [\n    \"!Lit Guide\",\n    \"!Poetry Guide\",\n    \"!Shakescleare\",\n    \"Lit Term > Lit Term\",\n  ].indexOf(categoryValue) > -1;\n\nconst RefinementList = (props) => {\n  // Used to show/hide long lists of refinements\n  const [showAllRefinements, setShowAllRefinements] = useState(\n    props.refinementLimit < 0\n  );\n\n  // Show only the number of categories specific by refinementLimit (or all if expanded)\n  const [shownCategories, setShownCategories] = useState([]);\n\n  // Refinements can be removed externally, like for instance if disabled when\n  // no results are present. This keeps track of any refinements that need removing\n  const [refinementsToRemove, setRefinementsToRemove] = useState([]);\n\n  // Keeps track of what elements should be rendered\n  const [renderElements, setRenderElements] = useState([]);\n\n  // Updates shown categories when list is expanded/shrunk\n  useEffect(() => {\n    if (props.refinementLimit < 0 || showAllRefinements) {\n      setShownCategories(props.categories);\n    } else {\n      setShownCategories(props.categories.slice(0, props.refinementLimit));\n    }\n  }, [showAllRefinements]);\n\n  // Updates the shown list of categories when the list of items changes\n  // items include things like if the category is refined and the number\n  // of available refinements for that category\n  useEffect(() => {\n    // If the list of items is empty, it means that we have 0 results from search\n    // so we should clear all selected refinements\n    if (props.items.length === 0 && props.currentRefinement.length !== 0) {\n      setRefinementsToRemove(props.categories.map(({ value }) => value));\n    }\n\n    setRenderElements(\n      shownCategories.map((category) => {\n        let resultCount = 0;\n        let isRefined = false;\n\n        if (category.value[0] === \"!\") {\n          const refineableCategories = props.items.filter(\n            (i) => i.label.split(\" > \")[0] === category.value.slice(1)\n          );\n\n          resultCount = refineableCategories.reduce(\n            (acc, curr) => acc + curr.count,\n            0\n          );\n\n          if (\n            refineableCategories.length > 0 &&\n            refineableCategories.every((i) => i.isRefined)\n          ) {\n            isRefined = true;\n          }\n        } else {\n          const result = props.items.filter(\n            (i) => i.label === category.value\n          )[0];\n          if (result) {\n            resultCount = result.count;\n            isRefined = result.isRefined;\n          }\n        }\n\n        if (isRefined && resultCount === 0 && category.value[0] !== \"!\") {\n          setRefinementsToRemove((prevState) => {\n            return array.uniq([...prevState, category.value]);\n          });\n        }\n\n        const refineable = isRefineable(props.isAPlus, category.value);\n\n        return (\n          <RefineElement\n            count={resultCount}\n            key={category.value}\n            Label={<Label label={category.label} attribute={props.attribute} />}\n            handleRefine={handleRefine}\n            isRefined={isRefined}\n            refineable={refineable}\n            value={category.value}\n          />\n        );\n      })\n    );\n  }, [JSON.stringify(props.items), shownCategories.length]);\n\n  // Clears any needed refinements\n  useEffect(() => {\n    if (refinementsToRemove.length === 0) return;\n    if (\n      array.intersection(refinementsToRemove, props.currentRefinement)\n        .length === 0\n    ) {\n      setRefinementsToRemove([]);\n      return;\n    }\n    props.refine(\n      array.without(props.currentRefinement, ...refinementsToRemove)\n    );\n    setRefinementsToRemove([]);\n  }, [JSON.stringify(refinementsToRemove)]);\n\n  const handleRefine = (value) => {\n    if (!isRefineable(props.isAPlus, value)) {\n      props.setCurrentPromoAttribute(promoAttributeReference[props.attribute]);\n      return;\n    }\n\n    // A value starting with ! indicates one of the \"All\" selections from the\n    // flyout, so that's handled differently\n    if (value[0] === \"!\") {\n      const allCategories = props.categories\n        .filter((ref) => ref.value !== value)\n        .map((ref) => ref.value);\n\n      if (allCategories.every((val) => props.currentRefinement.includes(val))) {\n        props.refine(array.without(props.currentRefinement, ...allCategories));\n      } else {\n        // Unique to dedupe categories in case any are already selected when we\n        // select all\n        props.refine(\n          array.uniq([...props.currentRefinement, ...allCategories])\n        );\n      }\n    } else if (props.currentRefinement.indexOf(value) < 0) {\n      props.refine([...props.currentRefinement, value]);\n    } else {\n      props.refine(props.currentRefinement.filter((c) => c !== value));\n    }\n  };\n\n  const toggleShowAllRefinements = () => {\n    setShowAllRefinements((showingRefiments) => !showingRefiments);\n  };\n\n  return (\n    <div className=\"refinement-list\">\n      {props.title && (\n        <div className=\"refinement-list__header\">{props.title}</div>\n      )}\n      <ul className=\"refinement-list__list\">{renderElements}</ul>\n      {props.refinementLimit > 0 && (\n        <div className=\"refinement-list__expand-container\">\n          <button\n            className=\"btn btn-text btn-sm refinement-list__expand\"\n            onClick={toggleShowAllRefinements}\n            type=\"button\"\n          >\n            {showAllRefinements ? \"- Less\" : \"+ More\"}\n          </button>\n        </div>\n      )}\n    </div>\n  );\n};\n\nRefinementList.propTypes = propTypes;\nRefinementList.defaultProps = defaultProps;\n\nconst RefinementListWithPromoContext = (props) => {\n  return (\n    <FilterPromoContext.Consumer>\n      {(filterPromoContextProps) => (\n        <RefinementList {...props} {...filterPromoContextProps} />\n      )}\n    </FilterPromoContext.Consumer>\n  );\n};\n\n// Base RefinementList - pass in a refine function\nexport { RefinementListWithPromoContext as RefinementList };\n\n// Connected RefinementList - algolia passes in the refine function\nexport default connectRefinementList(RefinementListWithPromoContext);\n","// Creates a react context for managing the state of which mini promo is shown\n// on the filters\nimport React from \"react\";\n\nexport default React.createContext({\n  currentPromoAttribute: null,\n  isAPlus: false,\n  setCurrentPromoAttribute: () => {},\n});\n","// Main component for the search page\n// Note that all algolia connected components using any of the connect methods\n// imported from \"react-instantsearch-dom\" must be rendered within the <InstantSearch />\n// component\n\nimport React, { useState } from \"react\";\nimport algoliasearch from \"algoliasearch\";\nimport {\n  connectSearchBox,\n  connectStateResults,\n  InstantSearch,\n  Stats,\n} from \"react-instantsearch-dom\";\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport PropTypes from \"prop-types\";\n\nimport logo from \"images/reskin/small-logo-a-plus.svg\";\nimport number from \"helpers/number\";\nimport AuthorEthnicityMultiSelect from \"components/search/AuthorEthnicityMultiSelect\";\nimport AuthorGenderMultiSelect from \"components/search/AuthorGenderMultiSelect\";\nimport AuthorNationalityMultiSelect from \"components/search/AuthorNationalityMultiSelect\";\nimport CurrentRefinements from \"components/search/base/CurrentRefinements\";\nimport FilterPromoContext from \"components/search/context/FilterPromoContext\";\nimport GenreMultiSelect from \"components/search/GenreMultiSelect\";\nimport GradeLevelRefinementList from \"components/search/GradeLevelRefinementList\";\nimport GuideRefinementList from \"components/search/GuideRefinementList\";\nimport Hits from \"components/search/base/Hits\";\nimport IconButton from \"components/shared/IconButton\";\nimport LiteraryMovementRefinementList from \"components/search/LiteraryMovementRefinementList\";\nimport LiteraryPeriodRefinementList from \"components/search/LiteraryPeriodRefinementList\";\nimport MiniAPlus from \"components/shared/dialogs/MiniAPlus\";\nimport TypeRefinementList from \"components/search/TypeRefinementList\";\nimport TimePeriodRefinementList from \"components/search/TimePeriodRefinementList\";\n\nconst SearchBox = connectSearchBox(({ currentRefinement, refine }) => {\n  function refineSearch(event) {\n    refine(event.currentTarget.value);\n  }\n\n  return (\n    <>\n      <i className=\"lc-icon lc-icon-search lc-icon-sm tw-text-gray tw-absolute tw-top-9 tw-ml-3 md:tw-top-12\" />\n      <input\n        className=\"input-lg search__searchbar !tw-pl-10\"\n        onChange={refineSearch}\n        placeholder=\"Search\"\n        type=\"search\"\n        value={currentRefinement}\n      />\n    </>\n  );\n});\n\nconst propTypes = {\n  algoliaAppId: PropTypes.string.isRequired,\n  algoliaApiKey: PropTypes.string.isRequired,\n  aPlusPromoUrl: PropTypes.string.isRequired,\n  isAPlus: PropTypes.bool,\n  metadataConstants: PropTypes.shape({\n    countries: PropTypes.arrayOf(\n      PropTypes.shape({ label: PropTypes.string, value: PropTypes.string })\n    ),\n  }).isRequired,\n  query: PropTypes.string,\n  userSignedIn: PropTypes.bool,\n  showRequestContentAfterDelay: PropTypes.number,\n};\n\nconst defaultProps = {\n  isAPlus: false,\n  query: \"\",\n  userSignedIn: false,\n  showRequestContentAfterDelay: false,\n};\n\nconst SearchResults = connectStateResults(\n  ({ isSearchStalled, props, showFilters }) => {\n    // Loading\n    if (isSearchStalled) {\n      return \"Searching for results...\";\n    }\n\n    // No results\n    return (\n      <>\n        <div className=\"search__mobile-filter-toggle search__results\">\n          <Stats\n            translations={{\n              stats(nbHits) {\n                return `${number.commaSeparateNumber(nbHits)} Results`;\n              },\n            }}\n          />\n          <IconButton\n            btnClass=\"btn-md btn-default hits__show-filters\"\n            iconClass=\"lc-icon-filters lc-icon-sm\"\n            onClick={showFilters}\n            text=\"Filter\"\n          />\n        </div>\n        <CurrentRefinements />\n        <div className=\"hidden-xs hidden-sm visible-md visible-lg visible-xl search__results\">\n          <Stats\n            translations={{\n              stats(nbHits) {\n                return `${number.commaSeparateNumber(nbHits)} Results`;\n              },\n            }}\n          />\n        </div>\n        <Hits\n          aPlusPromoUrl={props.aPlusPromoUrl}\n          isAPlus={props.isAPlus}\n          promoInfo={props.promoInfo}\n          userSignedIn={props.userSignedIn}\n          showRequestContentAfterDelay={props.showRequestContentAfterDelay}\n        />\n      </>\n    );\n  }\n);\n\nconst Search = (props) => {\n  const [showMobileFilters, setShowMobileFilters] = useState(false);\n  const [filterPromoContextState, setFilterPromoContextState] = useState({\n    currentPromoAttribute: null,\n    isAPlus: props.isAPlus,\n    setCurrentPromoAttribute: (newPromoAttr) =>\n      setFilterPromoContextState((prevState) => ({\n        ...prevState,\n        currentPromoAttribute: newPromoAttr,\n      })),\n  });\n\n  const searchClient = algoliasearch(props.algoliaAppId, props.algoliaApiKey);\n\n  function showFilters() {\n    setShowMobileFilters(true);\n    $(\"body\").append(\n      \"<div class='search__filter-backdrop modal-backdrop' style='opacity: 0.5'></div>\"\n    );\n    // Bind both click and touchend events so it works on both touch and mouse\n    document.addEventListener(\"click\", outsideFilterClickListener);\n    document.addEventListener(\"touchend\", outsideFilterClickListener);\n  }\n\n  function hideFilters() {\n    setShowMobileFilters(false);\n    $(\".search__filter-backdrop\").remove();\n    document.removeEventListener(\"click\", outsideFilterClickListener);\n    document.removeEventListener(\"touchend\", outsideFilterClickListener);\n  }\n\n  const outsideFilterClickListener = (event) => {\n    const $target = $(event.target);\n    if (\n      // Clicking on a select option or on the mini promo close button doesn't\n      // find search__filters in its ancestor list, probably because they are closed\n      // before this method can run, so we specifically exclude them from the check\n      !event.target.classList.contains(\"lc-select__option\") &&\n      !event.target.classList.contains(\"lc-select__option--inner\") &&\n      !event.target.classList.contains(\"lc-icon-close\") &&\n      !event.target.classList.contains(\"lc-select__multi-value\") &&\n      !event.target.classList.contains(\"lc-select__multi-value__label\") &&\n      !$target.closest($(\".search__filters\")).length &&\n      $(\".search__filters\").is(\":visible\")\n    ) {\n      hideFilters();\n    }\n  };\n\n  function closeMiniPromo() {\n    filterPromoContextState.setCurrentPromoAttribute(null);\n  }\n\n  // Renders the mini promo to be shown on top of each set of filters when a\n  // non a-plus user interacts with them\n  const showMiniAplusPromo = (attr) => {\n    const { isAPlus, currentPromoAttribute } = filterPromoContextState;\n    if (!currentPromoAttribute) return null;\n\n    const { value } = currentPromoAttribute;\n    if (isAPlus || value !== attr) return null;\n\n    return (\n      <MiniAPlus\n        handleClose={closeMiniPromo}\n        href={props.aPlusPromoUrl}\n        logoSrc={logo}\n        shouldRenderCloseBtn\n        userSignedIn={props.userSignedIn}\n      >\n        Upgrade to access these filters\n      </MiniAPlus>\n    );\n  };\n\n  return (\n    <div className=\"container\">\n      <div className=\"row\">\n        <InstantSearch searchClient={searchClient} indexName=\"litcharts_things\">\n          <div\n            className={`search__filters ${\n              showMobileFilters && \"search__filters--visible\"\n            } col-md-4 col-lg-3`}\n          >\n            <div className=\"search-filters__inner-container\">\n              <FilterPromoContext.Provider value={filterPromoContextState}>\n                <h2>Filter your search</h2>\n                <div className=\"search__filter-group\">\n                  {showMiniAplusPromo(\"category\")}\n                  <GuideRefinementList />\n                </div>\n                <div className=\"search__filter-group\">\n                  {showMiniAplusPromo(\"type\")}\n                  <TypeRefinementList />\n                  <GenreMultiSelect />\n                </div>\n                <div className=\"search__filter-group\">\n                  {showMiniAplusPromo(\"timePeriod\")}\n                  <TimePeriodRefinementList />\n                </div>\n                <div className=\"search__filter-group\">\n                  {showMiniAplusPromo(\"literaryPeriod\")}\n                  <LiteraryPeriodRefinementList />\n                </div>\n                <div className=\"search__filter-group\">\n                  {showMiniAplusPromo(\"literaryMovement\")}\n                  <LiteraryMovementRefinementList />\n                </div>\n                <div className=\"search__filter-group search__filter-group-author\">\n                  <div className=\"refinement-list__header\">Author Context</div>\n                  {showMiniAplusPromo(\"author\")}\n                  <AuthorNationalityMultiSelect\n                    countries={props.metadataConstants.countries}\n                  />\n                  <AuthorEthnicityMultiSelect />\n                  <AuthorGenderMultiSelect />\n                </div>\n                <div className=\"search__filter-group\">\n                  {showMiniAplusPromo(\"gradeLevel\")}\n                  <GradeLevelRefinementList />\n                </div>\n              </FilterPromoContext.Provider>\n            </div>\n          </div>\n          <div className=\"col-xs-12 col-sm-12 col-md-8 col-lg-offset-1 col-lg-8\">\n            <SearchBox defaultRefinement={props.query} />\n            <SearchResults {...props} showFilters={showFilters} />\n          </div>\n        </InstantSearch>\n      </div>\n    </div>\n  );\n};\n\nSearch.propTypes = propTypes;\nSearch.defaultProps = defaultProps;\n\nexport default Search;\n","export const authorGenders = [\n  {\n    label: \"Female\",\n    value: \"Female\",\n  },\n  {\n    label: \"Male\",\n    value: \"Male\",\n  },\n  {\n    label: \"Nonbinary\",\n    value: \"Nonbinary\",\n  },\n];\n\nexport const authorEthnicities = [\n  {\n    label: \"Asian\",\n    value: \"Asian\",\n  },\n  {\n    label: \"Black or African American\",\n    value: \"Black or African American\",\n  },\n  {\n    label: \"Hispanic or LatinX\",\n    value: \"Hispanic or LatinX\",\n  },\n  {\n    label: \"Indigenous Australian\",\n    value: \"Indigenous Australian\",\n  },\n  {\n    label: \"Middle Eastern\",\n    value: \"Middle Eastern\",\n  },\n  {\n    label: \"Native American or Alaska Native\",\n    value: \"Native American or Alaska Native\",\n  },\n  {\n    label: \"Native Hawaiian or other Pacific Islander\",\n    value: \"Native Hawaiian or other Pacific Islander\",\n  },\n  {\n    label: \"White\",\n    value: \"White\",\n  },\n];\n","// Main reference for the flyouts. A category value starting with \"!\" is not actually\n// refined but triggers a refinement for all the other related categories\nexport default {\n  referenceMapping: {\n    \"Lit Guide\": \"litGuideReference\",\n    \"Poetry Guide\": \"poetryGuideReference\",\n    Shakescleare: \"shakesReference\",\n    \"Lit Term\": \"litTermReference\",\n    \"Prose Fiction\": \"proseFictionReference\",\n    \"Prose Nonfiction\": \"proseNonfictionReference\",\n    Poetry: \"poetryReference\",\n    \"Play or Drama\": \"playDramaReference\",\n    Mythology: \"mythologyReference\",\n  },\n  litGuideReference: [\n    {\n      label: \"All Lit Guides\",\n      value: \"!Lit Guide\",\n    },\n    {\n      label: \"Titles\",\n      value: \"Lit Guide > Lit Guide\",\n    },\n    {\n      label: \"Themes\",\n      value: \"Lit Guide > Theme\",\n    },\n    {\n      label: \"Symbols\",\n      value: \"Lit Guide > Symbol\",\n    },\n    {\n      label: \"Characters\",\n      value: \"Lit Guide > Character\",\n    },\n    {\n      label: \"Terms\",\n      value: \"Lit Guide > Term\",\n    },\n    {\n      label: \"Quotes\",\n      value: \"Lit Guide > Quotes\",\n    },\n    {\n      label: \"Summary & Analysis\",\n      value: \"Lit Guide > Summary & Analysis\",\n    },\n    {\n      label: \"Quizzes\",\n      value: \"Lit Guide > Quiz\",\n    },\n    {\n      label: \"Literary Devices\",\n      value: \"Lit Guide > Lit Device\",\n    },\n  ],\n  poetryGuideReference: [\n    {\n      label: \"All Poetry Guides\",\n      value: \"!Poetry Guide\",\n    },\n    {\n      label: \"Titles\",\n      value: \"Poetry Guide > Poetry Guide\",\n    },\n    {\n      label: \"Themes\",\n      value: \"Poetry Guide > Theme\",\n    },\n    {\n      label: \"Symbols\",\n      value: \"Poetry Guide > Symbol\",\n    },\n    {\n      label: \"Poetic Devices\",\n      value: \"Poetry Guide > Poetic Device\",\n    },\n  ],\n  shakesReference: [\n    {\n      label: \"All Shakescleare\",\n      value: \"!Shakescleare\",\n    },\n    {\n      label: \"Titles\",\n      value: \"Shakescleare > Shakescleare\",\n    },\n    {\n      label: \"Scenes\",\n      value: \"Shakescleare > Scene\",\n    },\n  ],\n  litTermReference: [\n    {\n      label: \"All Lit Terms\",\n      value: \"Lit Term > Lit Term\",\n    },\n  ],\n  proseFictionReference: [\n    {\n      label: \"All Prose Fiction\",\n      value: \"!Prose Fiction\",\n    },\n    {\n      label: \"Folktales, Fables, or Fairy Tales\",\n      value: \"Prose Fiction > Folktale, Fable, or Fairy Tale\",\n    },\n    {\n      label: \"Graphic Novels\",\n      value: \"Prose Fiction > Graphic Novel\",\n    },\n    {\n      label: \"Novels\",\n      value: \"Prose Fiction > Novel\",\n    },\n    {\n      label: \"Novellas\",\n      value: \"Prose Fiction > Novella\",\n    },\n    {\n      label: \"Short Stories/Story Collections\",\n      value: \"Prose Fiction > Short Story / Story Collection\",\n    },\n    {\n      label: \"Other\",\n      value: \"Prose Fiction > <n/a>\",\n    },\n  ],\n  proseNonfictionReference: [\n    {\n      label: \"All Prose Nonfiction\",\n      value: \"!Prose Nonfiction\",\n    },\n    {\n      label: \"Autobiographies/Memoirs\",\n      value: \"Prose Nonfiction > Autobiography / Memoir\",\n    },\n    {\n      label: \"Biographies\",\n      value: \"Prose Nonfiction > Biography\",\n    },\n    {\n      label: \"Diaries or Journals\",\n      value: \"Prose Nonfiction > Diary or Journal\",\n    },\n    {\n      label: \"Documents\",\n      value: \"Prose Nonfiction > Document\",\n    },\n    {\n      label: \"Essays\",\n      value: \"Prose Nonfiction > Essay\",\n    },\n    {\n      label: \"Graphic Memoirs/Biographies\",\n      value: \"Prose Nonfiction > Graphic Memoir / Biography\",\n    },\n    {\n      label: \"History\",\n      value: \"Prose Nonfiction > History\",\n    },\n    {\n      label: \"Philosophy & Political Philosophy\",\n      value: \"Prose Nonfiction > Philosophy & Political Philosophy\",\n    },\n    {\n      label: \"Sermons, Speeches, or Lectures\",\n      value: \"Prose Nonfiction > Sermon, Speech, or Lecture\",\n    },\n    {\n      label: \"Sociology & Social Science\",\n      value: \"Prose Nonfiction > Sociology & Social Science\",\n    },\n    {\n      label: \"Theology\",\n      value: \"Prose Nonfiction > Theology\",\n    },\n    {\n      label: \"Other\",\n      value: \"Prose Nonfiction > <n/a>\",\n    },\n  ],\n  poetryReference: [\n    {\n      label: \"All Poetry\",\n      value: \"!Poetry\",\n    },\n    {\n      label: \"Lyric Poetry\",\n      value: \"Poetry > Lyric Poetry\",\n    },\n    {\n      label: \"Narrative Poetry\",\n      value: \"Poetry > Narrative Poetry\",\n    },\n    {\n      label: \"Other\",\n      value: \"Poetry > <n/a>\",\n    },\n  ],\n  playDramaReference: [\n    {\n      label: \"All Plays/Drama\",\n      value: \"!Play or Drama\",\n    },\n    {\n      label: \"Musicals\",\n      value: \"Play or Drama > Musical\",\n    },\n    {\n      label: \"One-Act Plays\",\n      value: \"Play or Drama > One-Act Play\",\n    },\n    {\n      label: \"Verse Dramas\",\n      value: \"Play or Drama > Verse Drama\",\n    },\n    {\n      label: \"Other\",\n      value: \"Play or Drama > <n/a>\",\n    },\n  ],\n  mythologyReference: [\n    {\n      label: \"All Mythology\",\n      value: \"!Mythology\",\n    },\n    {\n      label: \"Other\",\n      value: \"Mythology > <n/a>\",\n    },\n  ],\n};\n","export default [\n  {\n    label: \"Allegory\",\n    value: \"Allegory\",\n  },\n  {\n    label: \"Ars poetica\",\n    value: \"Ars poetica\",\n  },\n  {\n    label: \"Aubade\",\n    value: \"Aubade\",\n  },\n  {\n    label: \"Bildungsroman/Coming-of-Age\",\n    value: \"Bildungsroman / Coming-of-Age\",\n  },\n  {\n    label: \"Blason\",\n    value: \"Blason\",\n  },\n  {\n    label: \"Cento\",\n    value: \"Cento\",\n  },\n  {\n    label: \"Colonial Literature\",\n    value: \"Colonial Literature\",\n  },\n  {\n    label: \"Comedy\",\n    value: \"Comedy\",\n  },\n  {\n    label: \"Comedy of Manners\",\n    value: \"Comedy of Manners\",\n  },\n  {\n    label: \"Crime/True Crime\",\n    value: \"Crime / True Crime\",\n  },\n  {\n    label: \"Dirge\",\n    value: \"Dirge\",\n  },\n  {\n    label: \"Dramatic monologue\",\n    value: \"Dramatic monologue\",\n  },\n  {\n    label: \"Dystopian\",\n    value: \"Dystopian\",\n  },\n  {\n    label: \"Eclogue\",\n    value: \"Eclogue\",\n  },\n  {\n    label: \"Ekphrasis\",\n    value: \"Ekphrasis\",\n  },\n  {\n    label: \"Elegy\",\n    value: \"Elegy\",\n  },\n  {\n    label: \"Epic\",\n    value: \"Epic\",\n  },\n  {\n    label: \"Epigram\",\n    value: \"Epigram\",\n  },\n  {\n    label: \"Epistolary\",\n    value: \"Epistolary\",\n  },\n  {\n    label: \"Epitaph\",\n    value: \"Epitaph\",\n  },\n  {\n    label: \"Epithalamion\",\n    value: \"Epithalamion\",\n  },\n  {\n    label: \"Fantasy\",\n    value: \"Fantasy\",\n  },\n  {\n    label: \"Farce\",\n    value: \"Farce\",\n  },\n  {\n    label: \"Georgic\",\n    value: \"Georgic\",\n  },\n  {\n    label: \"Gothic\",\n    value: \"Gothic\",\n  },\n  {\n    label: \"Historical Fiction\",\n    value: \"Historical Fiction\",\n  },\n  {\n    label: \"History Play/Historical Drama\",\n    value: \"History Play / Historical Drama\",\n  },\n  {\n    label: \"Horror\",\n    value: \"Horror\",\n  },\n  {\n    label: \"Hymn\",\n    value: \"Hymn\",\n  },\n  {\n    label: \"Idyll\",\n    value: \"Idyll\",\n  },\n  {\n    label: \"Kunstlerroman\",\n    value: \"Kunstlerroman\",\n  },\n  {\n    label: \"Lament\",\n    value: \"Lament\",\n  },\n  {\n    label: \"Light verse\",\n    value: \"Light verse\",\n  },\n  {\n    label: \"Mock-Epic\",\n    value: \"Mock-Epic\",\n  },\n  {\n    label: \"Morality or Mystery Play\",\n    value: \"Morality or Mystery Play\",\n  },\n  {\n    label: \"Mystery\",\n    value: \"Mystery\",\n  },\n  {\n    label: \"Nature/Environmental Writing\",\n    value: \"Nature/Environmental Writing\",\n  },\n  {\n    label: \"Novel of Ideas\",\n    value: \"Novel of Ideas\",\n  },\n  {\n    label: \"Novel of Manners\",\n    value: \"Novel of Manners\",\n  },\n  {\n    label: \"Ode\",\n    value: \"Ode\",\n  },\n  {\n    label: \"Other\",\n    value: \"<n/a>\",\n  },\n  {\n    label: \"Paean\",\n    value: \"Paean\",\n  },\n  {\n    label: \"Palinode\",\n    value: \"Palinode\",\n  },\n  {\n    label: \"Panegyric\",\n    value: \"Panegyric\",\n  },\n  {\n    label: \"Parody\",\n    value: \"Parody\",\n  },\n  {\n    label: \"Pastoral\",\n    value: \"Pastoral\",\n  },\n  {\n    label: \"Philosophical Fiction\",\n    value: \"Philosophical Fiction\",\n  },\n  {\n    label: \"Picaresque\",\n    value: \"Picaresque\",\n  },\n  {\n    label: \"Problem Play\",\n    value: \"Problem Play\",\n  },\n  {\n    label: \"Psalm\",\n    value: \"Psalm\",\n  },\n  {\n    label: \"Quest\",\n    value: \"Quest\",\n  },\n  {\n    label: \"Religious Fiction\",\n    value: \"Religious Fiction\",\n  },\n  {\n    label: \"Revenge Tragedy\",\n    value: \"Revenge Tragedy\",\n  },\n  {\n    label: \"Riddle\",\n    value: \"Riddle\",\n  },\n  {\n    label: \"Romance\",\n    value: \"Romance\",\n  },\n  {\n    label: \"Satire\",\n    value: \"Satire\",\n  },\n  {\n    label: \"Science Fiction\",\n    value: \"Science Fiction\",\n  },\n  {\n    label: \"Science Writing\",\n    value: \"Science Writing\",\n  },\n  {\n    label: \"Sensation Fiction\",\n    value: \"Sensation Fiction\",\n  },\n  {\n    label: \"Slave Narrative\",\n    value: \"Slave Narrative\",\n  },\n  {\n    label: \"Socratic Dialogue\",\n    value: \"Socratic Dialogue\",\n  },\n  {\n    label: \"Southern Gothic\",\n    value: \"Southern Gothic\",\n  },\n  {\n    label: \"Suspense/Thriller\",\n    value: \"Suspense / Thriller\",\n  },\n  {\n    label: \"Tragedy\",\n    value: \"Tragedy\",\n  },\n  {\n    label: \"Tragicomedy\",\n    value: \"Tragicomedy\",\n  },\n  {\n    label: \"Utopian\",\n    value: \"Utopian\",\n  },\n  {\n    label: \"Verse Epistle\",\n    value: \"Verse Epistle\",\n  },\n  {\n    label: \"Verse Novel\",\n    value: \"Verse Novel\",\n  },\n  {\n    label: \"Western/Frontier\",\n    value: \"Western / Frontier\",\n  },\n];\n","export default [\n  {\n    label: \"4th\",\n    value: \"4\",\n  },\n  {\n    label: \"5th\",\n    value: \"5\",\n  },\n  {\n    label: \"6th\",\n    value: \"6\",\n  },\n  {\n    label: \"7th\",\n    value: \"7\",\n  },\n  {\n    label: \"8th\",\n    value: \"8\",\n  },\n  {\n    label: \"9th\",\n    value: \"9\",\n  },\n  {\n    label: \"10th\",\n    value: \"10\",\n  },\n  {\n    label: \"11th\",\n    value: \"11\",\n  },\n  {\n    label: \"12th\",\n    value: \"12\",\n  },\n  {\n    label: \"Higher education\",\n    value: \"Higher education\",\n  },\n];\n","export default [\n  {\n    label: \"Lit Guides\",\n    value: \"Lit Guide\",\n  },\n  {\n    label: \"Poetry Guides\",\n    value: \"Poetry Guide\",\n  },\n  {\n    label: \"Shakescleare\",\n    value: \"Shakescleare\",\n  },\n  {\n    label: \"Lit Terms\",\n    value: \"Lit Term\",\n  },\n];\n","export default [\n  {\n    label: \"Absurdism\",\n    value: \"Absurdism\",\n  },\n  {\n    label: \"Aestheticism\",\n    value: \"Aestheticism\",\n  },\n  {\n    label: \"Beat Generation\",\n    value: \"Beat Generation\",\n  },\n  {\n    label: \"Black Arts Movement\",\n    value: \"Black Arts Movement\",\n  },\n  {\n    label: \"Cavalier Poets\",\n    value: \"Cavalier Poets\",\n  },\n  {\n    label: \"Confessionalists\",\n    value: \"Confessionalists\",\n  },\n  {\n    label: \"Dadaism\",\n    value: \"Dadaism\",\n  },\n  {\n    label: \"Existentialism\",\n    value: \"Existentialism\",\n  },\n  {\n    label: \"Expressionism\",\n    value: \"Expressionism\",\n  },\n  {\n    label: \"Feminism\",\n    value: \"Feminism\",\n  },\n  {\n    label: \"Imagism\",\n    value: \"Imagism\",\n  },\n  {\n    label: \"Magical Realism\",\n    value: \"Magical Realism\",\n  },\n  {\n    label: \"Metaphysical Poets\",\n    value: \"Metaphysical Poets\",\n  },\n  {\n    label: \"Modernism\",\n    value: \"Modernism\",\n  },\n  {\n    label: \"Neoclassicism\",\n    value: \"Neoclassicism\",\n  },\n  {\n    label: \"Naturalism\",\n    value: \"Naturalism\",\n  },\n  {\n    label: \"New York School\",\n    value: \"New York School\",\n  },\n  {\n    label: \"Postcolonialism\",\n    value: \"Postcolonialism\",\n  },\n  {\n    label: \"Postmodernism\",\n    value: \"Postmodernism\",\n  },\n  {\n    label: \"Pre-Raphaelites\",\n    value: \"Pre-Raphaelites\",\n  },\n  {\n    label: \"Realism\",\n    value: \"Realism\",\n  },\n  {\n    label: \"Romanticism\",\n    value: \"Romanticism\",\n  },\n  {\n    label: \"Socialism / Marxism\",\n    value: \"Socialism / Marxism\",\n  },\n  {\n    label: \"Surrealism\",\n    value: \"Surrealism\",\n  },\n  {\n    label: \"Symbolism\",\n    value: \"Symbolism\",\n  },\n  {\n    label: \"Transcendentalism\",\n    value: \"Transcendentalism\",\n  },\n];\n","export default [\n  {\n    label: \"Ancient Near East Literature (2600 BCE–330 BCE)\",\n    value: \"Ancient Near East Literature (2600 BCE-330 BCE)\",\n  },\n  {\n    label: \"Ancient Greek and Roman Period (800 BCE–500 AD)\",\n    value: \"Ancient Greek and Roman Period (800 BCE-500 AD)\",\n  },\n  {\n    label: \"Chinese Spring and Autumn Period (771 BCE–476 BCE)\",\n    value: \"Chinese Spring and Autumn Period (771 BCE-476 BCE)\",\n  },\n  {\n    label: \"Ancient Indian Literature (Before 500)\",\n    value: \"Ancient Indian Literature (Before 500)\",\n  },\n  {\n    label: \"Pre-Colonial African Period (Before 1500)\",\n    value: \"Pre-Colonial African Period (Before 1500)\",\n  },\n  {\n    label: \"Pre-Conquest South American Period (Before 1492)\",\n    value: \"Pre-Conquest South American Period (Before 1492)\",\n  },\n  {\n    label: \"Old English Period (450–1066)\",\n    value: \"Old English Period (450-1066)\",\n  },\n  {\n    label: \"Medieval European period (500–1500)\",\n    value: \"Medieval European period (500-1500)\",\n  },\n  {\n    label: \"Japanese Heian Period (794–1185)\",\n    value: \"Japanese Heian Period (794-1185)\",\n  },\n  {\n    label: \"Middle English Period (1066–1500)\",\n    value: \"Middle English Period (1066-1500)\",\n  },\n  {\n    label: \"The Renaissance (1300–1660)\",\n    value: \"The Renaissance (1300-1660)\",\n  },\n  {\n    label: \"English Renaissance (1485–1660)\",\n    value: \"English Renaissance (1485-1660)\",\n  },\n  {\n    label: \"The Spanish Golden Age (1556–1659)\",\n    value: \"The Spanish Golden Age (1556-1659)\",\n  },\n  {\n    label: \"Elizabethan Period (1558–1603)\",\n    value: \"Elizabethan Period (1558-1603)\",\n  },\n  {\n    label: \"French Grand Siècle (1601–1715)\",\n    value: \"French Grand Siècle (1601-1715)\",\n  },\n  {\n    label: \"Jacobean Period (1603–1625)\",\n    value: \"Jacobean Period (1603-1625)\",\n  },\n  {\n    label: \"American Colonial Period (1607–1775)\",\n    value: \"American Colonial Period (1607-1775)\",\n  },\n  {\n    label: \"Caroline Period (1625–1649)\",\n    value: \"Caroline Period (1625-1649)\",\n  },\n  {\n    label: \"Commonwealth Period (1649–1660)\",\n    value: \"Commonwealth Period (1649-1660)\",\n  },\n  {\n    label: \"The Restoration (1660–1700)\",\n    value: \"The Restoration (1660-1700)\",\n  },\n  {\n    label: \"English Neoclassical Period (1660–1785)\",\n    value: \"English Neoclassical Period (1660-1785)\",\n  },\n  {\n    label: \"Augustan Period (1700–1745)\",\n    value: \"Augustan Period (1700-1745)\",\n  },\n  {\n    label: \"Age of Enlightenment (1650–1800)\",\n    value: \"Age of Enlightenment (1650-1800)\",\n  },\n  {\n    label: \"The Great Awakening (1730–1749)\",\n    value: \"The Great Awakening (1730-1749)\",\n  },\n  {\n    label: \"Age of Sensibility (1745–1785)\",\n    value: \"Age of Sensibility (1745-1785)\",\n  },\n  {\n    label: \"American Early National Period (1775–1830)\",\n    value: \"American Early National Period (1775-1830)\",\n  },\n  {\n    label: \"European Romantic Period (1775–1850)\",\n    value: \"European Romantic Period (1775-1850)\",\n  },\n  {\n    label: \"German Romantic Period (1775–1830)\",\n    value: \"German Romantic Period (1775-1830)\",\n  },\n  {\n    label: \"English Romantic Period (1785–1837)\",\n    value: \"English Romantic Period (1785-1837)\",\n  },\n  {\n    label: \"Russian Golden Age of Literature (1801–1900)\",\n    value: \"Russian Golden Age of Literature (1801-1900)\",\n  },\n  {\n    label: \"French Romantic Period (1815–1850)\",\n    value: \"French Romantic Period (1815-1850)\",\n  },\n  {\n    label: \"American Romantic Period (1828–1865)\",\n    value: \"American Romantic Period (1828-1865)\",\n  },\n  {\n    label: \"Victorian Period (1837–1901)\",\n    value: \"Victorian Period (1837-1901)\",\n  },\n  {\n    label: \"Realist and Naturalist Period (1840–1910)\",\n    value: \"Realist and Naturalist Period (1840-1910)\",\n  },\n  {\n    label: \"Irish Literary Revival (1880–1930)\",\n    value: \"Irish Literary Revival (1880-1930)\",\n  },\n  {\n    label: \"Modern Period (1901–1945)\",\n    value: \"Modern Period (1901-1945)\",\n  },\n  {\n    label: \"Harlem Renaissance (1918–1937)\",\n    value: \"Harlem Renaissance (1918-1937)\",\n  },\n  {\n    label: \"Postmodern and Contemporary Period (1946–Present)\",\n    value: \"Postmodern and Contemporary Period (1946-Present)\",\n  },\n];\n","// The a plus promo in the filters is shown for groups of refinements.\n// This is mapping of those refinement attributs to the group\nconst category = {\n  value: \"category\",\n};\n\nconst type = {\n  value: \"type\",\n};\n\nconst timePeriod = {\n  value: \"timePeriod\",\n};\n\nconst literaryPeriod = {\n  value: \"literaryPeriod\",\n};\n\nconst literaryMovement = {\n  value: \"literaryMovement\",\n};\n\nconst author = {\n  value: \"author\",\n};\n\nconst gradeLevel = {\n  value: \"gradeLevel\",\n};\n\nexport default {\n  category,\n  type,\n  genre: type,\n  timePeriod,\n  literaryPeriod,\n  literaryMovement,\n  authorEthnicity: author,\n  authorNationality: author,\n  authorGender: author,\n  gradeLevel,\n};\n","export default [\n  {\n    label: \"Before 500\",\n    value: \"Before 500\",\n  },\n  {\n    label: \"501-1400\",\n    value: \"501-1400\",\n  },\n  {\n    label: \"1401-1500\",\n    value: \"1401-1500\",\n  },\n  {\n    label: \"1501-1600\",\n    value: \"1501-1600\",\n  },\n  {\n    label: \"1601-1700\",\n    value: \"1601-1700\",\n  },\n  {\n    label: \"1701-1800\",\n    value: \"1701-1800\",\n  },\n  {\n    label: \"1801-1900\",\n    value: \"1801-1900\",\n  },\n  {\n    label: \"1901-1950\",\n    value: \"1901-1950\",\n  },\n  {\n    label: \"1951-2000\",\n    value: \"1951-2000\",\n  },\n  {\n    label: \"2001-Present\",\n    value: \"2001-Present\",\n  },\n];\n","export default [\n  {\n    label: \"Poetry\",\n    value: \"Poetry\",\n  },\n  {\n    label: \"Prose Nonfiction\",\n    value: \"Prose Nonfiction\",\n  },\n  {\n    label: \"Prose Fiction\",\n    value: \"Prose Fiction\",\n  },\n  {\n    label: \"Play or Drama\",\n    value: \"Play or Drama\",\n  },\n  {\n    label: \"Mythology\",\n    value: \"Mythology\",\n  },\n];\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport Select from \"components/shared/Select\";\n\nclass UserDownloadsSortControl extends React.Component {\n  static propTypes = {\n    containerSelector: PropTypes.string,\n    listSelector: PropTypes.string,\n    listItemSelector: PropTypes.string,\n  };\n\n  constructor(props) {\n    super(props);\n    this.options = [\n      { label: \"Recently Downloaded\", value: \"created-at\" },\n      { label: \"Alphabetical\", value: \"title\" },\n    ];\n  }\n\n  updateSort(sortBy) {\n    const $container = $(this.props.containerSelector);\n    const $list = $container.find(this.props.listSelector);\n    let $listItems = $list.find(this.props.listItemSelector);\n\n    $listItems.sort(function (a, b) {\n      const aVal = $(a).data(sortBy).toString();\n      const bVal = $(b).data(sortBy).toString();\n\n      if (aVal > bVal) {\n        return 1;\n      }\n      if (aVal < bVal) {\n        return -1;\n      }\n      return 0;\n    });\n\n    // desc vs asc\n    if (sortBy === \"created-at\") {\n      $listItems = $($listItems.get().reverse());\n    }\n\n    $listItems.detach().appendTo($list);\n  }\n\n  onChange(option) {\n    this.updateSort(option.value.toLowerCase());\n  }\n\n  render() {\n    return (\n      <Select\n        {...this.props}\n        baseClassName=\"lc-select-container--md\"\n        options={this.options}\n        value={this.options[0].value}\n        id=\"sort-control__select\"\n        placeholder=\"Filter by first letter\"\n        onChange={(value) => this.onChange(value)}\n      />\n    );\n  }\n}\n\nexport default UserDownloadsSortControl;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport Select from \"components/shared/Select\";\n\nclass UserHighlightsFilterControl extends React.Component {\n  static propTypes = {\n    containerSelector: PropTypes.string,\n    listSelector: PropTypes.string,\n    listItemSelector: PropTypes.string,\n  };\n\n  static defaultProps = {\n    containerSelector: \".container\",\n    listSelector: \".user-highlights\",\n    listItemSelector: \".user-highlight\",\n  };\n\n  updateFilter(filterBy) {\n    const $container = $(this.props.containerSelector);\n    const $list = $container.find(this.props.listSelector);\n    const $listItems = $list.find(this.props.listItemSelector);\n\n    if (filterBy) {\n      $listItems.each(function () {\n        $(this).toggle($(this).data(\"book\").toString() === filterBy.toString());\n      });\n    } else {\n      $listItems.show();\n    }\n  }\n\n  onChange(option) {\n    this.updateFilter(option.value);\n  }\n\n  render() {\n    return (\n      <Select\n        {...this.props}\n        baseClassName=\"lc-select-container--md\"\n        options={this.props.options}\n        value={this.props.options[0].value}\n        onChange={(value) => this.onChange(value)}\n      />\n    );\n  }\n}\n\nexport default UserHighlightsFilterControl;\n","import React, { useEffect, useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport Input from \"components/shared/Input\";\nimport Select from \"components/shared/Select\";\n\nconst propTypes = {\n  actionOptions: PropTypes.array.isRequired,\n  beForgottenOptions: PropTypes.array.isRequired,\n  data: PropTypes.object,\n  dataTransferOptions: PropTypes.array.isRequired,\n  errorMessages: PropTypes.object,\n  requestDataAccessOptions: PropTypes.array.isRequired,\n  stopProcessingDataOptions: PropTypes.array.isRequired,\n};\n\nconst defaultProps = {\n  data: {},\n  errorMessages: {},\n};\n\n// Actual <form> is in the rails view\nconst GdprRequestForm = (props) => {\n  const [action, setAction] = useState(null);\n\n  useEffect(() => {\n    setAction(props.data.action);\n  }, []);\n\n  function onActionChange(option) {\n    setAction(option.value);\n  }\n\n  let ActionComponent;\n\n  const {\n    beForgottenOptions,\n    dataTransferOptions,\n    requestDataAccessOptions,\n    stopProcessingDataOptions,\n  } = props;\n\n  switch (action) {\n    case \"be_forgotten\":\n      // eslint-disable-next-line react/no-unstable-nested-components\n      ActionComponent = () => (\n        <>\n          <Select\n            errorMessage={props.errorMessages.reason}\n            isRequired\n            labelText=\"Why do you want your data to be deleted?\"\n            id=\"gdpr-request-reason\"\n            name=\"gdpr_request[reason]\"\n            placeholder=\"Select an option\"\n            options={beForgottenOptions}\n            value={props.data.reason}\n          />\n          <Input\n            name=\"gdpr_request[additional_info]\"\n            inputId=\"gdpr-request-additional-info\"\n            placeholder=\"Additional info\"\n            labelText=\"Optionally, specify which data you want to make sure LitCharts will delete\"\n            InputComponent=\"textarea\"\n            value={props.data.additional_info}\n            errorMessage={props.errorMessages.additionalInfo}\n          />\n        </>\n      );\n      break;\n    case \"data_transfer\":\n      // eslint-disable-next-line react/no-unstable-nested-components\n      ActionComponent = () => (\n        <>\n          <Select\n            errorMessage={props.errorMessages.transferRecipient}\n            isRequired\n            labelText=\"To whom do you want LitCharts to transfer your data?\"\n            id=\"gdpr_request[transfer_recipient]\"\n            name=\"gdpr_request[transfer_recipient]\"\n            placeholder=\"Select an option\"\n            options={dataTransferOptions}\n            value={props.data.reason}\n          />\n          <Input\n            errorMessage={props.errorMessages.transfer3rdParty}\n            name=\"gdpr_request[transfer_3rd_party]\"\n            isRequired\n            placeholder=\"Third party\"\n            labelText=\"Specify the third party and how we should contact them\"\n            InputComponent=\"textarea\"\n            value={props.data.transfer_3rd_party}\n          />\n          <Input\n            name=\"gdpr_request[additional_info]\"\n            placeholder=\"Additional info\"\n            labelText=\"Optionally, describe your request in more detail. Which data should be transferred?\"\n            InputComponent=\"textarea\"\n            value={props.data.additional_info}\n            errorMessage={props.errorMessages.additionalInfo}\n          />\n        </>\n      );\n      break;\n    case \"data_access\":\n      // eslint-disable-next-line react/no-unstable-nested-components\n      ActionComponent = () => (\n        <>\n          <Select\n            errorMessage={props.errorMessages.reason}\n            isRequired\n            labelText=\"What information about your data would you like to access?\"\n            id=\"gdpr_request[reason]\"\n            name=\"gdpr_request[reason]\"\n            placeholder=\"Select an option\"\n            options={requestDataAccessOptions}\n            value={props.data.reason}\n          />\n          <Input\n            name=\"gdpr_request[additional_info]\"\n            placeholder=\"Additional info\"\n            labelText=\"Optionally, explain your question in more detail\"\n            InputComponent=\"textarea\"\n            value={props.data.additional_info}\n            errorMessage={props.errorMessages.additionalInfo}\n          />\n        </>\n      );\n      break;\n    case \"rectification\":\n      // eslint-disable-next-line react/no-unstable-nested-components\n      ActionComponent = () => (\n        <>\n          <Input\n            errorMessage={props.errorMessages.incorrectData}\n            name=\"gdpr_request[incorrect_data]\"\n            placeholder=\"Description\"\n            labelText=\"Describe the incorrect data that LitCharts has about you\"\n            InputComponent=\"textarea\"\n            value={props.data.incorrect_data}\n            isRequired\n          />\n          <Input\n            name=\"gdpr_request[correct_data]\"\n            placeholder=\"Description\"\n            labelText=\"Describe the correct version of the same data\"\n            InputComponent=\"textarea\"\n            value={props.data.correct_data}\n            errorMessage={props.errorMessages.correctData}\n            isRequired\n          />\n        </>\n      );\n      break;\n    case \"stop_marketing_profiling\":\n      // eslint-disable-next-line react/no-unstable-nested-components\n      ActionComponent = () => (\n        <Input\n          name=\"gdpr_request[additional_info]\"\n          placeholder=\"Additional info\"\n          labelText=\"Optionally, specify more details\"\n          InputComponent=\"textarea\"\n          value={props.data.additional_info}\n          errorMessage={props.errorMessages.additionalInfo}\n        />\n      );\n      break;\n    case \"stop_processing\":\n      // eslint-disable-next-line react/no-unstable-nested-components\n      ActionComponent = () => (\n        <>\n          <Select\n            errorMessage={props.errorMessages.reason}\n            isRequired\n            labelText=\"Why do you want LitCharts to stop processing your data?\"\n            id=\"gdpr_request[reason]\"\n            name=\"gdpr_request[reason]\"\n            placeholder=\"Select an option\"\n            options={stopProcessingDataOptions}\n            value={props.data.reason}\n          />\n          <Input\n            name=\"gdpr_request[additional_info]\"\n            placeholder=\"Additional info\"\n            labelText=\"Optionally, please describe your request in more detail\"\n            InputComponent=\"textarea\"\n            value={props.data.additional_info}\n            errorMessage={props.errorMessages.additionalInfo}\n          />\n        </>\n      );\n      break;\n    case \"objection\":\n      // eslint-disable-next-line react/no-unstable-nested-components\n      ActionComponent = () => (\n        <Input\n          name=\"gdpr_request[additional_info]\"\n          placeholder=\"Additional info\"\n          labelText=\"Please describe the nature of your objection to how LitCharts is using your personal information\"\n          InputComponent=\"textarea\"\n          value={props.data.additional_info}\n          errorMessage={props.errorMessages.additionalInfo}\n          isRequired\n        />\n      );\n      break;\n    default:\n      // eslint-disable-next-line react/no-unstable-nested-components\n      ActionComponent = () => null;\n  }\n\n  return (\n    <>\n      <Input\n        errorMessage={props.errorMessages.name}\n        name=\"gdpr_request[name]\"\n        inputId=\"gdpr-request-name\"\n        value={props.data.name}\n        isRequired\n        labelText=\"What's your name?\"\n        placeholder=\"Your name\"\n      />\n      <Input\n        errorMessage={props.errorMessages.email}\n        name=\"gdpr_request[email]\"\n        inputId=\"gdpr-request-email\"\n        value={props.data.email}\n        isRequired\n        labelText=\"Email address (we won't share your email address, ever)\"\n        placeholder=\"Your email\"\n      />\n      <Select\n        errorMessage={props.errorMessages.action}\n        id=\"gdpr-request-action\"\n        isRequired\n        name=\"gdpr_request[action]\"\n        onChange={onActionChange}\n        placeholder=\"Select an option\"\n        labelText=\"What is your specific privacy related request?\"\n        options={props.actionOptions}\n        value={props.data.action}\n      />\n      <ActionComponent />\n    </>\n  );\n};\n\nGdprRequestForm.propTypes = propTypes;\nGdprRequestForm.defaultProps = defaultProps;\n\nexport default GdprRequestForm;\n","export const DEVICES = \"devices\";\nexport const CHAPTERS = \"chapters\";\n","import events from \"initializers/events\";\nimport detectUserInput from \"initializers/detectUserInput\";\nimport globalViews from \"initializers/globalViews\";\nimport applyUtilityClasses from \"initializers/applyUtilityClasses\";\nimport view from \"initializers/view\";\nimport toast from \"initializers/toast\";\n\nexport default [\n  view,\n  detectUserInput,\n  globalViews,\n  applyUtilityClasses,\n  events,\n  toast,\n];\n","import header from \"views/shared/header/base\";\n\n// use this initializer for shared global views, i.e. sitewide header, footer, etc.\nexport default {\n  initialize: () => {\n    const views = [header];\n\n    $().ready(() => {\n      views.forEach((view) => {\n        view.ready.call(view);\n      });\n    });\n  },\n};\n","import { toastNotify } from \"helpers/toastNotify\";\nimport React from \"react\";\n\n// (paul) This allows us to set toast messages via Rails flash.\n// Generally I don't like using `dangerouslySetInnerHTML` but that\n// should only be set by us and not user input.\n\nexport default {\n  initialize: () => {\n    if (window.toastMessage) {\n      toastNotify(\n        window.toastMessage,\n        window.toastLink && (\n          <div dangerouslySetInnerHTML={{ __html: window.toastLink }} />\n        )\n      );\n    }\n  },\n};\n"],"names":["_regeneratorRuntime","e","t","r","Object","prototype","n","hasOwnProperty","o","defineProperty","value","i","Symbol","a","iterator","c","asyncIterator","u","toStringTag","define","enumerable","configurable","writable","wrap","Generator","create","Context","makeInvokeMethod","tryCatch","type","arg","call","h","l","f","s","y","GeneratorFunction","GeneratorFunctionPrototype","p","d","getPrototypeOf","v","values","g","defineIteratorMethods","forEach","_invoke","AsyncIterator","invoke","resolve","__await","then","callInvokeWithMethodAndArg","Error","done","method","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","TypeError","resultName","next","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","isNaN","length","displayName","isGeneratorFunction","constructor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","keys","reverse","pop","prev","charAt","slice","stop","rval","handle","complete","finish","delegateYield","asyncGeneratorStep","_slicedToArray","Array","isArray","_arrayWithHoles","_iterableToArrayLimit","_arrayLikeToArray","toString","from","test","_unsupportedIterableToArray","_nonIterableRest","sessionStorageKey","validationSchema","Yup","shape","title","required","question","min","max","AIForm","props","loading","locked","onSubmit","_props$options","options","questionMinimum","quotaRemaining","resetDate","signupPath","_useState2","useState","isLessThanSmallBreakpoint","setIsLessThanSmallBreakpoint","_useState4","collapsed","setCollapsed","disableFields","resizeHandler","window","matchMedia","concat","SM_PIXEL_MIN","matches","XS_PIXEL_MAX","useLayoutEffect","addEventListener","removeEventListener","useEffect","document","body","style","overflow","buttonRemainingText","buttonCTA","buttonText","resetText","pluralize","showDisclaimerText","unpackValueFromStorage","key","storageKey","storedValue","sessionStorage","getItem","removeItem","initialValues","storeFieldForReload","setItem","validateForm","_ref","_callee","formValues","yupFormErrors","_context","validate","abortEarly","t0","yupToFormErrors","arguments","apply","_next","_throw","_x","handleClose","React","Formik","validateOnBlur","validateOnChange","validateOnMount","location","href","formik","handleSubmit","className","classnames","IconButton","iconClass","btnClass","onClick","AI_ANSWERS_QUOTA","Select","errorMessage","errors","id","isDisabled","isSearchable","labelText","placeholder","onChange","fieldKey","setFieldValue","InputTextCounter","disabled","hideSubtext","setFieldError","target","attr","DisclaimerText","propTypes","PropTypes","isRequired","defaultProps","AskLitchartsAI","quotaFromProps","submissionPath","aiAnswersCompletePath","_useChatMessages","useChatMessages","upgradeable","eventCategory","channel","AI_TOOL_CHANNELS","ASK_AI","toolName","AI_TOOL_NAMES","messages","prevSlug","handleAskAIFormSubmit","AIToolsLayout","_extends","QUESTION_MINIMUM_LENGTH","ChatArea","DiscussionQuestions","_selectedSubtopic$mes","_selectedTopic$labelT2","topic","when","subtopic","_","_AI_TOOLS_LABEL_MAP$s","_selectedTopic$labelT","selectedTopic","data","AI_TOOLS_LABEL_MAP","label","toLowerCase","loadingTopics","setLoadingTopics","topics","setTopics","_useState6","setSelectedTopic","_useState8","selectedSubtopic","setSelectedSubtopic","_useWindowResizeAndFo","useWindowResizeAndFormCollapse","useFormik","handleQuizDiscussionEssayPrompt","setErrors","DISCUSSION_QUESTIONS","messageText","useFormDisableFields","handleError","timeoutRef","clearTimeout","AIFormLayout","REUSABLES","TITLE","TOPIC","undefined","SUBTOPIC","guidePath","loadingTimeout","setTimeout","fetch","response","ok","json","error","console","fetchDropdownContent","guide_path","isControlled","isLoading","AI_TOOLS_LOADING_DEFAULTS","find","EssayPrompts","ESSAY_PROMPTS","resource","InContentAIForm","formRef","useRef","scrollAboveMobileKeyboard","isSmallWindow","helpers","form","current","footerHeight","querySelector","clientHeight","scrollTo","top","offsetTop","offsetHeight","behavior","$","ref","onFocus","amplitudeKey","buttonVariant","InContentAskLitchartsAI","resourceTitle","inPoetry","inContent","scrollToolIntoViewOnTap","offset","$scrollTarget","on","event","is","windowOffset","topOffset","QuizQuestions","QUIZ_QUESTIONS","AI_TOOLS_ERROR_MESSAGES","Characters","Symbols","Themes","AMPLITUDE_BANNER_DATA_ATTRIBUTES","_defineProperty","AMPLITUDE_QUESTION_ASKED_LARGE_ATTRIBUTES","AMPLITUDE_QUESTION_ASKED_SMALL_ATTRIBUTES","AMPLITUDE_QUESTION_ASKED_SMALL_COLLAPSED_ATTRIBUTES","AMPLITUDE_SIGNUP_INTRO_CHAT_ATTRIBUTES","AMPLITUDE_SIGNUP_FORM_LARGE_ATTRIBUTES","AMPLITUDE_SIGNUP_FORM_SMALL_COLLAPSED_ATTRIBUTES","setLoading","setQuotaRemaining","initialMessage","serverBubbleConfig","children","InitialMessage","slideUp","setMessages","setPrevSlug","messagesCallbacks","prevMessages","copyArray","_toConsumableArray","updatedMessage","_objectSpread","streamState","DEFAULT_STATE","handleRedirect","redirect_to","replace","handleBroadcastReceived","previousMessageIndex","findIndex","aiAnswerId","ai_answer_id","ReactHtmlParser","reminderMessage","CopyAndSaveReminder","prevMsgs","JSON","stringify","handleFetchError","logAiEvent","previousMessage","LOADING_STATE","STREAMING_STATE","splice","consumer","subscriptions","connected","log","disconnected","received","disconnect","callback","_ref2","slug","newServerMessage","newUserMessage","userBubbleConfig","_ref3","status","setButtonText","setResetText","submittingButtonText","setsubmittingButtonText","layoutRef","layoutBanner","panelBanner","promoBanner","header","layoutBannerHeight","panelBannerHeight","promoBannerHeight","height","_useFormText","useFormText","preventDefault","AIFormTitle","AIFormSubheading","LockedInformationBanner","touched","handleChange","handleBlur","isSubmitting","popoverText","popoverOptions","container","content","html","placement","template","toggle","trigger","_ref$className","tooltipActive","setTooltipActive","tooltipRef","touchEventRef","dismissPopover","popover","useClickOutsideElement","onMouseEnter","onMouseLeave","onKeyDown","handleKeyPress","onTouchStart","role","tabIndex","amplitudeDataAttribute","InitialMessageDescription","InitialMessageBullets","InitialMessageExample","src","AskAiImg","alt","DqgImg","QqgImg","EpgImg","bookmarks","EmptyContainer","browsePath","emptyImgSrc","BookmarkList","bookmarksFromProps","setBookmarks","subtitleText","handleRemoveBookmark","bookmarkId","newBookmarks","reject","bookmark","map","index","LitCard","hideSuccessCta","onRemoval","includeTags","userSignedIn","RelatedThemesFilterBox","_React$Component","_this","_classCallCheck","_callSuper","onCheckboxChange","isSubscribed","showSidebarPromo","checked","setState","selected","state","filter","onMoreToggleClick","allVisible","_inherits","_createClass","prevProps","prevState","this","_this$props","totalFilters","_this2","_this$props2","isPromoVisible","filterables","position","zIndex","Checkbox","count","renderMoreToggleBtn","isFreeTier","RelatedThemes","_React$Component2","_this3","closeSidebarPromo","sidebarPromoVisible","filteredAuthors","filteredBooks","filteredThemes","relatedThemes","_this$state","selectedFiltersToHash","b","bookAuthorFullName","bookTitle","reduce","k","_this4","_this$props3","aPlusDialogHref","aPlusDialogLogoSrc","_this$props4","APlusDialog","logoSrc","shouldRenderCloseBtn","_this$props5","filterableAuthorCount","filterableAuthors","filterableBookCount","filterableBooks","renderFilterBox","renderSidebarPromo","mainTheme","path","dangerouslySetInnerHTML","__html","mediumIconHtml","largeIconHtml","bookPath","descriptionHtml","blurredThemesImgSrc","maxWidth","_this$props6","aPlusDialogContent","_this$props7","relatedThemesCount","getThemeCount","renderRelatedThemeCards","renderRelatedThemesBlur","renderPromo","renderSidebar","renderThemeYouWereReading","renderRelatedThemes","SummaryAnalysisAPlusDialog","logoSrcXs","linkClasses","GroupsInfoExpandableFaqRow","answer","Expandable","expandableClassName","GroupsInfoFaqRow","isExpanded","summarySection","litTerms","litTerm","LocalTag","summarySections","ss","ChaptersRow","hideFilters","filterOptions","filterBy","viewMode","sortedLitTerms","useMemo","term","sortedSummarySections","some","CHAPTERS","ChaptersView","DEVICES","DevicesView","showPath","keyExamplesCount","DevicesRow","currentFilter","setCurrentFilter","setViewMode","sectionType","option","LandingPage","handleParamChange","updateHistory","url","URL","searchParams","set","history","pushState","lowerCaseOptions","_this$state$viewMode","PageDescription","authorName","Filters","Content","QueryParamsControls","setFilterBy","findFilterByOption","filterByOption","setParamFilters","_helpers$getQueryPara","_helpers$getQueryPara2","viewModeParam","filterByParam","_helpers$getQueryPara3","_helpers$getQueryPara4","items","menuParentProps","Menu","item","_item$children","MenuParent","MenuItem","menuItemType","shouldAutoExpand","iconUrl","showChildren","setShowChildren","toggleExpand","show","onKeyPress","Icon","size","child","publicDomain","alignment","leftContent","rightContent","handleLargeScreenClick","aiTool","cls","classList","handleSmallScreenClick","querySelectorAll","banner","TextToggle","onToggle","ComponentItemSelect","modalCategory","modalTitle","category","componentValue","activeContext","selector","selectors","COMPONENT","$component","$section","closest","SECTION","hasClass","$title","COMPONENT_TITLE","$valueReplace","COMPONENT_VALUE_REPLACE","$activeContext","ACTIVE_CONTEXT_NOTE","$content","POEM_CONTENT","$modalCategory","TEXT_MODAL_CATEGORY","text","setComponentContentViaAjax","selectComponentItem","componentId","el","ajax","dataType","success","ReactDOM","bannerContent","QuizAnswerChoice","answerLetter","answerText","isSelectedAnswer","setSelectedAnswer","isAnonUser","link","isSelected","QUIZ_ANSWER_STATES","UNLOCKED","handleAnswerSelected","canBeTabbed","LOCKED","amplitudeEvent","classNames","QuizAnswerChoiceIcon","ReviewButton","icon","SKIPPED","CORRECT","INCORRECT","DISABLED","iconName","answerOptions","onAnswerSelect","questionId","questionIndex","questionText","questionTotal","QuizCard","selectedAnswer","handleAnswerSelect","answerOption","cardState","QUIZ_RESULT_STATES","QuizCardResult","bannerExpanded","setBannerExpanded","QuizCardResultText","attemptCount","lockedRedirectUrl","previousPercentCorrect","quizSubmission","correct","incorrect","skipped","percentCorrect","reviewLink","quizQuestions","ANSWER_OPTION_LETTERS","correctAnswerKey","QuizResult","handleRetake","pathname","amplitudeFunnel","ResultsPanel","onRetakeClick","quizQuestion","lastQuizSubmissionSummary","quizTitle","submissionUrl","QuizSubmission","setIsLoading","emptyQuestionsSubmission","acc","cur","assign","quizQuestionsSubmission","setQuizQuestionsSubmission","handleLockedState","chosenAnswer","updatedSubmission","token","reloadPath","split","request","headers","quiz_submission","quiz_question_submissions_attributes","quiz_question_id","chosen_answer","_response","alert","Counter","_ref2$correct","_ref2$incorrect","_ref2$skipped","total","roundedPercentage","Math","round","summaryText","MultiSelectRefinementList","attribute","categories","authorEthnicities","limit","authorGenders","countries","genreCategories","RefinementList","gradeLevelCategories","HierarchicalRefinementList","guideCategories","literaryMovementCategories","refinementLimit","literaryPeriodCategories","timePeriodCategories","typeCategories","MAPPING","CurrentRefinementPill","refine","getLabel","string","cardinalize","indexOf","truncate","handleResize","width","parent","outerWidth","connectCurrentRefinements","isSticky","setIsSticky","setIsExpanded","hiddenRefinements","setHiddenRefinements","containerRef","listRef","handleScroll","passive","_step","_iterator","_createForOfIteratorHelper","getBoundingClientRect","err","itemsToRender","refinement","currentRefinement","containerClassName","listClassName","hidden","hideFlyout","hideFlyoutHover","Flyout","flyoutReference","referenceMapping","controlled","flyState","setFlyState","refinedValues","updateRefinedValue","handleRefine","outsideFlyoutClickListener","toggleFlyout","removeClass","addClass","innerWidth","showFlyout","HierarchicalRefinementListElement","handleClick","connectRefinementList","itemsToCount","isRefined","refinedCount","hitCount","accumulator","currentVal","liClassName","elementCountClassName","number","commaSeparateNumber","hit","primaryTitle","secondaryTitle","blurb","author","isAPlus","Hit","hitClass","categoryClass","titleClass","blurbClass","authorClass","isBlurred","htmlDecode","aPlusPromoUrl","hits","promoInfo","characterCount","quoteCount","symbolCount","themeCount","quizCount","litDeviceCount","Paginate","connectStateResults","searchResults","nbHits","Pagination","showLast","PromoContent","searchState","relatedText","query","resultData","disjunctiveFacets","Hits","NoResults","showRequestContentAfterDelay","shownPromo","objectID","APlus","logo","connectHits","setCurrentPromoAttribute","refinementClassName","countedCategories","cat","numResults","MultiSelect","selectedValues","promoAttributeReference","preventSelect","FilterPromoContext","Consumer","filterPromoContextProps","showRequestContentModal","modal","RequestContentModal","logoUrl","showAfterDelay","Label","refineable","RefineElement","ControlledCheckbox","_label$split2","label1","label2","isRefineable","categoryValue","showAllRefinements","setShowAllRefinements","shownCategories","setShownCategories","refinementsToRemove","setRefinementsToRemove","renderElements","setRenderElements","resultCount","refineableCategories","curr","every","result","array","allCategories","val","includes","showingRefiments","RefinementListWithPromoContext","currentPromoAttribute","SearchBox","connectSearchBox","currentTarget","algoliaAppId","algoliaApiKey","metadataConstants","SearchResults","isSearchStalled","showFilters","Stats","translations","stats","CurrentRefinements","Search","showMobileFilters","setShowMobileFilters","newPromoAttr","setFilterPromoContextState","filterPromoContextState","searchClient","algoliasearch","remove","outsideFilterClickListener","$target","contains","closeMiniPromo","showMiniAplusPromo","MiniAPlus","InstantSearch","indexName","Provider","GuideRefinementList","TypeRefinementList","GenreMultiSelect","TimePeriodRefinementList","LiteraryPeriodRefinementList","LiteraryMovementRefinementList","AuthorNationalityMultiSelect","AuthorEthnicityMultiSelect","AuthorGenderMultiSelect","GradeLevelRefinementList","defaultRefinement","append","Shakescleare","Poetry","Mythology","litGuideReference","poetryGuideReference","shakesReference","litTermReference","proseFictionReference","proseNonfictionReference","poetryReference","playDramaReference","mythologyReference","genre","timePeriod","literaryPeriod","literaryMovement","authorEthnicity","authorNationality","authorGender","gradeLevel","UserDownloadsSortControl","sortBy","$list","containerSelector","listSelector","$listItems","listItemSelector","sort","aVal","bVal","get","detach","appendTo","updateSort","baseClassName","UserHighlightsFilterControl","each","updateFilter","actionOptions","beForgottenOptions","dataTransferOptions","errorMessages","requestDataAccessOptions","stopProcessingDataOptions","GdprRequestForm","ActionComponent","action","setAction","reason","Input","inputId","InputComponent","additional_info","additionalInfo","transferRecipient","transfer3rdParty","transfer_3rd_party","incorrectData","incorrect_data","correct_data","correctData","email","view","detectUserInput","globalViews","applyUtilityClasses","events","toast","initialize","views","ready","toastMessage","toastNotify","toastLink"],"sourceRoot":""}