{"version":3,"file":"static/js/3484.4a889ad4.chunk.js","mappings":"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","sources":["components/meta/Helmet.tsx","components/misc/NewsletterBanner.tsx","statics/Homepage/NewsletterEmailSignup.tsx","statics/reader-blogs/Show.tsx","utils/casing.ts","../node_modules/@mui/icons-material/ArrowForward.js","../node_modules/@mui/material/Card/cardClasses.js","../node_modules/@mui/material/Card/Card.js","../node_modules/@mui/material/CardActionArea/cardActionAreaClasses.js","../node_modules/@mui/material/CardActionArea/CardActionArea.js","../node_modules/@mui/material/CardContent/cardContentClasses.js","../node_modules/@mui/material/CardContent/CardContent.js","../node_modules/@mui/material/CardMedia/cardMediaClasses.js","../node_modules/@mui/material/CardMedia/CardMedia.js"],"sourcesContent":["import React from 'react';\nimport { Helmet as ReactHelmet } from 'react-helmet';\n\ninterface HelmetInput {\n  title: string;\n  url: string;\n  description?: string;\n  // Provide if there's a better image than the default\n  ogImage?: string;\n}\n\nexport default function Helmet({ metaContent, schema }: { metaContent: HelmetInput, schema?: Array<Object> }) {\n  const { title, url, description, ogImage } = metaContent;\n  const defaultOgImage =\n    'https://website-assets-public.s3.us-west-2.amazonaws.com/opengraph/girl-in-hammock.jpg';\n  const currentOgImage = ogImage || defaultOgImage;\n  // Recent OG Images generated from Canva are 1200 x 600\n  // So if one was set from Helmet, we use the smaller 600 size.\n  // These will have to be redone and this discrepancy removed.\n  const height = ogImage ? '600' : '630';\n  return (\n    <ReactHelmet>\n      <title>{title}</title>\n      <meta property=\"og:title\" content={title} />\n      <link rel=\"canonical\" href={url} />\n      <meta property=\"og:url\" content={url} />\n      <meta property=\"og:description\" content={description} />\n      <meta property=\"og:image\" content={currentOgImage} />\n      <meta property=\"og:image:url\" content={currentOgImage} />\n      <meta property=\"og:image:width\" content=\"1200\" />\n      <meta property=\"og:image:height\" content={height} />\n\n      <script type=\"application/ld+json\">\n        {JSON.stringify({\n          \"@context\": \"https://schema.org\",\n          \"@type\": \"Organization\",\n          \"url\": \"https://bookraid.com\",\n          \"logo\": \"https://bookraid.com/logo.png\",\n          \"description\": \"BookRaid is a website and newsletter that lets you download free & bestselling discount eBooks for your Kindle, Nook, Kobo, or other eReader\"\n        })}\n      </script>\n      {schema && (\n        schema.map(sch => <script type=\"application/ld+json\">{JSON.stringify(sch)}</script>)\n      )}\n    </ReactHelmet>\n  );\n}\n\nHelmet.defaultProps = {\n  schema: [],\n};\n","import { Box, Grid, Typography } from '@mui/material';\nimport React from 'react';\nimport NewsletterEmailSignup from '../../statics/Homepage/NewsletterEmailSignup';\n\nconst NewsletterBanner = function () {\n  return (\n    <Box sx={{\n      display: 'flex',\n      justifyContent: 'center',\n      alignItems: 'center',\n      width: '100%',\n      p: { xs: 2, md: 3, xl: 4 },\n      backgroundColor: '#fff3ea',\n    }}>\n      <Grid container spacing={2} sx={{ maxWidth: 1400 }}>\n        <Grid item xs={12} sm={7}>\n          <Box sx={{ display: 'flex', justifyContent: 'center', flexDirection: 'column', height: '100%' }}>\n            <Typography variant=\"h5\" sx={{ mb: 2, fontWeight: 'bold' }}>Join now to get limited time, exclusive deals on free and discounted eBooks</Typography>\n            <Typography>We&apos;ll find amazing new authors and books for you to get excited about. You just have to worry about finding the time to read them all.</Typography>\n          </Box>\n        </Grid>\n        <Grid item xs={0} sm={1} />\n        <Grid item xs={12} sm={4}>\n          <Box sx={{ display: 'flex', justifyContent: { xs: 'center', md: 'flex-end' }, alignItems: 'center', height: '100%' }}>\n            <Box sx={{ backgroundColor: 'white', px: 3, pb: 3, pt: 1 }}>\n              <NewsletterEmailSignup hideText />\n            </Box>\n          </Box>\n        </Grid>\n      </Grid>\n    </Box>\n  )\n}\n\nexport default NewsletterBanner;\n","import React from 'react';\nimport { Box, TextField, Typography } from '@mui/material';\nimport FacebookPixel from 'react-facebook-pixel';\nimport RedditPixel from 'react-reddit-pixel';\nimport ReactGA from 'react-ga4';\nimport ReactPinterestTag from 'react-pinterest-tag';\nimport { push } from 'connected-react-router';\nimport { LoadingButton } from '@mui/lab';\nimport { createReader } from '../../store/readers/readersSlice';\nimport { useAppDispatch } from '../../app/hooks';\nimport { addSnack } from '../../store/snacks/snacksSlice';\n\nconst NewsletterEmailSignup = function ({\n  signupEmailFieldRef,\n  hideText,\n  extraParams,\n  btnText,\n  follow,\n  handleSuccess,\n}: {\n  signupEmailFieldRef?: any;\n  hideText?: boolean;\n  extraParams?: Object;\n  btnText?: string;\n  follow?: string;\n  handleSuccess?: Function;\n}) {\n  const [email, setEmail] = React.useState('');\n  const [creating, setCreating] = React.useState(false);\n  const dispatch = useAppDispatch();\n\n  async function handleCreate(event: React.FormEvent<HTMLFormElement>) {\n    event.preventDefault();\n    setCreating(true);\n\n    dispatch(createReader({ email, ...extraParams }))\n      .unwrap()\n      .then((e: any) => {\n        FacebookPixel.trackCustom('ReaderSubscribed');\n        RedditPixel.track('SignUp');\n        ReactGA.event({\n          category: 'Readers',\n          action: 'ReadersSignUp',\n        });\n        ReactPinterestTag.track('checkout', {\n          value: 100,\n          order_quantity: 1,\n          currency: 'USD',\n          line_items: [\n            {\n              product_name: 'Newsletter subscription',\n              product_id: '1',\n              product_price: 1.0,\n              product_quantity: 1,\n            },\n          ],\n        });\n        // reader conversion\n        ReactGA.gtag('event', 'conversion', {\n          send_to: process.env.REACT_APP_GTAG_READER_SIGNUP as string,\n        });\n\n        if (e.skip_categories) {\n          dispatch(addSnack({ message: `Follow on ${follow} successfully created.`, variant: 'success' }))\n        } else {\n          let pushUrl = `/readers/${e.uuid}/edit`;\n          if (follow) { pushUrl += `?follow=${follow}`; }\n          dispatch(push(pushUrl));\n        }\n        if (handleSuccess) { handleSuccess(); }\n      })\n      .finally(() => {\n        setCreating(false);\n      })\n      .catch(() => {\n        // throw e;\n      });\n\n    return () => setCreating(false);\n  }\n\n  return (\n    <Box sx={{ maxWidth: '350px', margin: '0 auto' }}>\n      {!hideText && <Typography variant=\"h4\" component=\"h1\" color=\"secondary.main\" align=\"center\">\n        Discounted &amp; Free Bestselling Ebooks\n      </Typography>}\n\n      <form onSubmit={handleCreate}>\n        <TextField\n          onChange={(e) => setEmail(e.target.value)}\n          ref={signupEmailFieldRef || null}\n          variant=\"outlined\"\n          margin=\"normal\"\n          required\n          fullWidth\n          name=\"email\"\n          label=\"Email\"\n          value={email}\n        />\n        <LoadingButton\n          loading={creating}\n          variant=\"contained\"\n          color=\"secondary\"\n          type=\"submit\"\n          fullWidth\n        >\n          {btnText}\n        </LoadingButton>\n      </form>\n    </Box>\n  );\n};\n\nNewsletterEmailSignup.defaultProps = {\n  signupEmailFieldRef: null,\n  hideText: false,\n  extraParams: {},\n  btnText: `Start Reading - It's Free`,\n  follow: null,\n  handleSuccess: null,\n};\n\nexport default NewsletterEmailSignup;\n","import React from 'react';\nimport { useParams, Link as RouterLink } from 'react-router-dom';\nimport {\n  Box,\n  Button,\n  Card,\n  CardActionArea,\n  CardContent,\n  CardMedia,\n  Container,\n  Divider,\n  Grid,\n  Paper,\n  Typography,\n} from '@mui/material';\nimport ArrowForwardIcon from '@mui/icons-material/ArrowForward';\nimport { useAppDispatch, useAppSelector } from '../../app/hooks';\nimport LoadingSpinner from '../../components/misc/LoadingSpinner';\nimport Helmet from '../../components/meta/Helmet';\nimport { parameterize } from '../../utils/casing';\nimport { ReaderBlog, getReaderBlog, selectReaderBlog } from '../../store/reader-blogs/readerBlogsSlice';\nimport NewsletterBanner from '../../components/misc/NewsletterBanner';\nimport Logo from '../../images/logo.png'\nimport theme from '../../theme/theme';\n\nconst ReaderBlogShow = function () {\n  const id = parseInt(useParams<{ id: string }>().id, 10);\n  const dispatch = useAppDispatch();\n  const [blogLoading, setBlogLoading] = React.useState(true);\n  const blog = useAppSelector((state) => selectReaderBlog(state, id)) as ReaderBlog;\n  const defaultCoverImg = 'https://website-assets-public.s3.us-west-2.amazonaws.com/book-cover-placeholder.png'\n\n  React.useEffect(() => {\n    if (!id) {\n      return;\n    }\n    dispatch(\n      getReaderBlog({\n        id,\n        resourceType: 'partner',\n        joins: [ 'similar_blogs', 'blog_categories' ],\n      })\n    ).finally(() => {\n      setBlogLoading(false);\n    });\n\n    // Note that without this cleanup method in the return function,\n    // we get memory leak warnings from react\n    // https://stackoverflow.com/a/60907638\n    // no return method gives a memory leak\n    // return () => { }; // empty return gives a memory leak\n    // return () => setBlogLoading(true); // this gives a memory leak\n    // eslint-disable-next-line consistent-return\n    return () => setBlogLoading(false); // this works\n  }, [dispatch, id]);\n\n  if (blogLoading) {\n    return <Box sx={{ display: 'flex', justifyContent: 'center', alignItems: 'center', mt: 10 }}>\n      <LoadingSpinner />\n    </Box>\n  }\n\n  return (\n    <Box>\n      <NewsletterBanner />\n      <Container component=\"main\" sx={{ mb: 12, mt: 2 }}>\n        <Grid container spacing={4}>\n          <Grid item xs={12} md={8} lg={9}>\n            <Box sx={{ display: 'flex', alignItems: 'center', mb: 2 }}>\n              <Typography variant=\"h3\" component=\"h1\">{blog.parsed_title}</Typography>\n            </Box>\n            <ReaderBlogDetails blog={blog} />\n\n            <Box sx={{ mt: 2, mb: 4 }}>\n              {blog.base_generated_content?.intro.split('\\n\\n').map((paragraph: string) => (\n                <Typography variant=\"body1\" sx={{ mb: 2 }}>{paragraph}</Typography>\n              ))}\n            </Box>\n\n            {blog.base_generated_content?.books.map((book: any) => (\n              <Box sx={{ display: 'flex', mb: 10 }}>\n                <Box sx={{ mr: 2 }}>\n                  <a href={`http://www.amazon.com/dp/${book.asin}?tag=bookraider-20`} target=\"_blank\" rel=\"noreferrer\">\n                    <Box component=\"img\" src={book.image_url || defaultCoverImg} alt={`${book.title} by ${book.author}`} sx={{ width: '150px' }} />\n                  </a>\n                </Box>\n                <Box sx={{ flexGrow: 1 }}>\n                  <Typography variant=\"h4\" sx={{ mb: 1 }}>{book.title}</Typography>\n                  <Box sx={{ borderLeft: '2px solid', borderColor: '#7fd7ff', pl: 1 }}>\n                    <Typography variant=\"body2\" sx={{ mb: 1 }}>by {book.author}</Typography>\n                  </Box>\n                  <Typography variant=\"body1\" sx={{ mb: 2 }}><i><b>Why {book.title} is on this list:</b> {book.why_this_book_fits}</i></Typography>\n                  <Typography variant=\"body1\" sx={{ mb: 2 }}>{book.book_description}</Typography>\n                  <Typography variant=\"body1\" sx={{ mb: 2 }}><b>What readers like:</b> {book.what_readers_like}</Typography>\n\n                  <Button\n                    variant=\"contained\"\n                    color=\"secondary\"\n                    href={\n                      book.asin\n                        ? `http://www.amazon.com/dp/${book.asin}?tag=bookraider-20`\n                        : `https://www.amazon.com/s?k=${book.title.split(' ').join('+')}+by+${book.author.split(' ').join('+')}&i=digital-text&tag=bookraider-20`\n                    }\n                    target=\"_blank\"\n                    rel=\"noreferrer\"\n                  >\n                   Check Price at Amazon\n                  </Button>\n                </Box>\n              </Box>\n            ))}\n\n            <Helmet\n              metaContent={{\n                title: `${blog.parsed_title} - BookRaid`,\n                url: `https://bookraid.com/reader-blog/${blog.id}/${parameterize(blog.canonical_url_title)}`,\n                description: blog.content_sanitized!.substring(0, 150),\n                ogImage: blog.image_urls?.[0],\n              }}\n              schema={[\n                {\n                  \"@context\": \"https://schema.org\",\n                  \"@type\": \"BlogPosting\",\n                  \"datePublished\": blog.published_at,\n                  \"dateModified\": blog.updated_at,\n                  \"headline\": blog.parsed_title,\n                  \"image\": blog.image_urls,\n                  \"articleBody\": blog.content_sanitized,\n                  \"wordCount\": blog.word_count,\n                  \"author\": {\n                    \"@type\": \"Person\",\n                    \"name\": blog.author_name,\n                  },\n                },\n              ]}\n            />\n          </Grid>\n          \n          {/* Similar Blogs Section - Desktop */}\n          {blog.similar_blogs && blog.similar_blogs.length > 0 && (\n            <Grid \n              item \n              md={4}\n              lg={3} \n              sx={{ \n                display: { xs: 'none', md: 'block' } \n              }}\n            >\n              <SimilarBlogsSidebar blogs={blog.similar_blogs} />\n            </Grid>\n          )}\n          \n          {/* Similar Blogs Section - Mobile */}\n          {blog.similar_blogs && blog.similar_blogs.length > 0 && (\n            <Grid \n              item \n              xs={12}\n              sx={{ \n                display: { xs: 'block', md: 'none' },\n                mt: 4\n              }}\n            >\n              <SimilarBlogsMobile blogs={blog.similar_blogs} />\n            </Grid>\n          )}\n        </Grid>\n      </Container>\n    </Box>\n  );\n};\n\nexport default ReaderBlogShow;\n\n// Component for similar blogs sidebar (desktop)\nconst SimilarBlogsSidebar = function ({ blogs }: { blogs: ReaderBlog[] }) {\n  return (\n    <Paper \n      elevation={0}\n      sx={{ \n        p: 2, \n        borderRadius: 2,\n        border: '1px solid',\n        borderColor: 'divider',\n      }}\n    >\n      <Typography \n        variant=\"h5\" \n        component=\"h2\" \n        sx={{ \n          mb: 2, \n          fontWeight: 'bold',\n        }}\n      >\n        Related Reading\n      </Typography>\n      \n      <Box sx={{ display: 'flex', flexDirection: 'column', gap: 2 }}>\n        {blogs.map((relatedBlog) => (\n          <Card \n            key={relatedBlog.id} \n            elevation={0}\n            sx={{ \n              display: 'flex', \n              flexDirection: 'column',\n              transition: 'all 0.2s ease-in-out',\n              '&:hover': {\n                transform: 'translateY(-4px)',\n                boxShadow: 2,\n              },\n              border: '1px solid',\n              borderColor: 'divider',\n            }}\n          >\n            <CardActionArea \n              component={RouterLink} \n              to={`/reader-blog/${relatedBlog.id}/${parameterize(relatedBlog.canonical_url_title)}`}\n            >\n              {relatedBlog.image_urls && relatedBlog.image_urls[0] && (\n                <CardMedia\n                  component=\"img\"\n                  image={relatedBlog.image_urls[0]}\n                  alt={relatedBlog.parsed_title}\n                  sx={{ \n                    width: '100%', \n                    height: 'auto',\n                    // aspectRatio: '16/9',\n                    objectFit: 'cover' \n                  }}\n                />\n              )}\n              <CardContent sx={{ p: 1.5 }}>\n                <Typography \n                  variant=\"subtitle1\" \n                  component=\"h3\" \n                  sx={{ \n                    fontWeight: 'medium',\n                    mb: 0.5,\n                    display: '-webkit-box',\n                    overflow: 'hidden',\n                    WebkitBoxOrient: 'vertical',\n                    WebkitLineClamp: 2,\n                    lineHeight: 1.2,\n                  }}\n                >\n                  {relatedBlog.parsed_title}\n                </Typography>\n                <Typography \n                  variant=\"body2\" \n                  color=\"text.secondary\"\n                  sx={{\n                    display: '-webkit-box',\n                    overflow: 'hidden',\n                    WebkitBoxOrient: 'vertical',\n                    WebkitLineClamp: 2,\n                  }}\n                >\n                  {relatedBlog.truncated_content?.replace(/<[^>]*>/g, '').substring(0, 80)}...\n                </Typography>\n              </CardContent>\n            </CardActionArea>\n          </Card>\n        ))}\n        \n        <Box \n          sx={{ \n            display: 'flex', \n            justifyContent: 'flex-end', \n            alignItems: 'center',\n            mt: 1 \n          }}\n        >\n          <Typography \n            variant=\"body2\" \n            component={RouterLink} \n            to=\"/reader-blog\"\n            sx={{ \n              color: 'primary.main', \n              textDecoration: 'none',\n              fontWeight: 'medium',\n              display: 'flex',\n              alignItems: 'center',\n              '&:hover': {\n                textDecoration: 'underline',\n              }\n            }}\n          >\n            More reading lists <ArrowForwardIcon fontSize=\"small\" sx={{ ml: 0.5 }} />\n          </Typography>\n        </Box>\n      </Box>\n    </Paper>\n  );\n};\n\n// Component for similar blogs mobile view\nconst SimilarBlogsMobile = function ({ blogs }: { blogs: ReaderBlog[] }) {\n  return (\n    <Box sx={{ mt: 2 }}>\n      <Divider sx={{ mb: 3 }} />\n      <Typography \n        variant=\"h5\" \n        component=\"h2\" \n        sx={{ \n          mb: 3, \n          fontWeight: 'bold',\n          textAlign: 'center',\n        }}\n      >\n        You May Also Like\n      </Typography>\n      \n      <Grid container spacing={2}>\n        {blogs.map((relatedBlog) => (\n          <Grid item xs={12} sm={6} key={relatedBlog.id}>\n            <Card \n              elevation={1}\n              sx={{ \n                height: '100%',\n                display: 'flex',\n                flexDirection: 'column',\n                transition: 'all 0.2s ease-in-out',\n                '&:hover': {\n                  transform: 'translateY(-4px)',\n                  boxShadow: 3,\n                },\n              }}\n            >\n              <CardActionArea \n                component={RouterLink} \n                to={`/reader-blog/${relatedBlog.id}/${parameterize(relatedBlog.canonical_url_title)}`}\n                sx={{ height: '100%', display: 'flex', flexDirection: 'column' }}\n              >\n                {relatedBlog.image_urls && relatedBlog.image_urls[0] && (\n                  <CardMedia\n                    component=\"img\"\n                    image={relatedBlog.image_urls[0]}\n                    alt={relatedBlog.parsed_title}\n                    sx={{ \n                      width: '100%', \n                      height: 'auto',\n                      // aspectRatio: '16/9',\n                      objectFit: 'cover' \n                    }}\n                  />\n                )}\n                <CardContent sx={{ flexGrow: 1 }}>\n                  <Typography \n                    variant=\"h6\" \n                    component=\"h3\" \n                    sx={{ \n                      fontWeight: 'medium',\n                      mb: 1,\n                      display: '-webkit-box',\n                      overflow: 'hidden',\n                      WebkitBoxOrient: 'vertical',\n                      WebkitLineClamp: 2,\n                      lineHeight: 1.2,\n                    }}\n                  >\n                    {relatedBlog.parsed_title}\n                  </Typography>\n                  <Typography \n                    variant=\"body2\" \n                    color=\"text.secondary\"\n                    sx={{\n                      display: '-webkit-box',\n                      overflow: 'hidden',\n                      WebkitBoxOrient: 'vertical',\n                      WebkitLineClamp: 3,\n                    }}\n                  >\n                    {relatedBlog.truncated_content?.replace(/<[^>]*>/g, '').substring(0, 120)}...\n                  </Typography>\n                </CardContent>\n              </CardActionArea>\n            </Card>\n          </Grid>\n        ))}\n      </Grid>\n      \n      <Box \n        sx={{ \n          display: 'flex', \n          justifyContent: 'center', \n          mt: 3 \n        }}\n      >\n        <Button \n          variant=\"outlined\" \n          color=\"primary\" \n          component={RouterLink} \n          to=\"/reader-blog\"\n          endIcon={<ArrowForwardIcon />}\n        >\n          Browse More Reading Lists\n        </Button>\n      </Box>\n    </Box>\n  );\n};\n\nexport const ReaderBlogDetails = function ({ blog }: { blog: ReaderBlog }) {\n  return (\n    <Box sx={{ borderLeft: '2px solid', borderColor: '#7fd7ff', pl: 2 }}>\n      <Typography variant='body2'>{new Date(blog.published_at!).toDateString()}</Typography>\n      <Typography variant='body2' sx={{ display: 'flex', alignItems: 'center' }}>\n        {`by `}\n        <Box component=\"img\" src={Logo} sx={{ height: '20px', ml: 1, mr: 0.5 }} />\n        <Box component=\"b\" sx={{ color: 'primary.main' }}>{blog.author_name}</Box>\n      </Typography>\n      {blog.blog_categories && blog.blog_categories.length > 0 && (\n        <Box sx={{ mt: 1, display: 'flex', flexWrap: 'wrap', gap: 1 }}>\n          {blog.blog_categories.map((category) => (\n            <RouterLink \n              key={category.id}\n              to={`/reader-blog-categories/${category.id}/${parameterize(category.label)}`}\n              style={{ \n                textDecoration: 'none',\n                color: theme.palette.primary[600],\n                fontSize: '0.875rem',\n                backgroundColor: theme.palette.primary[100],\n                padding: '3px 8px',\n                borderRadius: '4px',\n                display: 'inline-block'\n              }}\n            >\n              {category.label}\n            </RouterLink>\n          ))}\n        </Box>\n      )}\n    </Box>\n  )\n}\n","/**\n * Turns some \"Non Slug Case String\" to a \"slug-case-string\"\n *\n * Strips html entities out completely in the first `replace`.\n */\nexport const slugCase = function (token: string): string {\n  return trimNonWhitespaceCharacters(token)\n    .replace(/&[^;]*;/g, '')\n    .replace(/&/g, '')\n    .replace(/\\s+/g, '-')\n    .toLowerCase();\n};\n\n// convert to camelCase\nexport const camelize = function (str: string) {\n  const moddedStr = trimNonWhitespaceCharacters(str)\n    .replace(/-/g, ' ')\n    .toLowerCase();\n  return moddedStr\n    .replace(/(?:^\\w|[A-Z]|\\b\\w)/g, (word, index) =>\n      index === 0 ? word.toLowerCase() : word.toUpperCase()\n    )\n    .replace(/\\s+/g, '');\n};\n\n/**\n * Turns some \"Non Slug Case String\" to a \"snake_case_string\"\n */\nexport const snakeCase = function (token: string): string {\n  return trimNonWhitespaceCharacters(token)\n    .replace(/\\s/g, '_')\n    .replace(/-/g, '_')\n    .toLowerCase();\n};\n\n/**\n * Remove some junk characters to reduce everything to letters only\n * @param textToTrim\n * @returns\n */\nconst trimNonWhitespaceCharacters = function (textToTrim: string): string {\n  return textToTrim\n    .trim()\n    .replace(/'/g, '')\n    .replace(/,/g, '')\n    .replace(/_/g, ' ');\n};\n\nexport const parameterize = function (text: string): string {\n  return text\n    .toLowerCase()\n    .trim()\n    .replace(/ /g, '-')\n    .replace(/[^\\w-]+/g, '');\n};\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _jsxRuntime = require(\"react/jsx-runtime\");\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n  d: \"m12 4-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z\"\n}), 'ArrowForward');\n\nexports.default = _default;","import { generateUtilityClass, generateUtilityClasses } from '@mui/base';\nexport function getCardUtilityClass(slot) {\n  return generateUtilityClass('MuiCard', slot);\n}\nconst cardClasses = generateUtilityClasses('MuiCard', ['root']);\nexport default cardClasses;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"className\", \"raised\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { chainPropTypes } from '@mui/utils';\nimport { unstable_composeClasses as composeClasses } from '@mui/base';\nimport styled from '../styles/styled';\nimport useThemeProps from '../styles/useThemeProps';\nimport Paper from '../Paper';\nimport { getCardUtilityClass } from './cardClasses';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n\nconst useUtilityClasses = ownerState => {\n  const {\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['root']\n  };\n  return composeClasses(slots, getCardUtilityClass, classes);\n};\n\nconst CardRoot = styled(Paper, {\n  name: 'MuiCard',\n  slot: 'Root',\n  overridesResolver: (props, styles) => styles.root\n})(() => {\n  return {\n    overflow: 'hidden'\n  };\n});\nconst Card = /*#__PURE__*/React.forwardRef(function Card(inProps, ref) {\n  const props = useThemeProps({\n    props: inProps,\n    name: 'MuiCard'\n  });\n\n  const {\n    className,\n    raised = false\n  } = props,\n        other = _objectWithoutPropertiesLoose(props, _excluded);\n\n  const ownerState = _extends({}, props, {\n    raised\n  });\n\n  const classes = useUtilityClasses(ownerState);\n  return /*#__PURE__*/_jsx(CardRoot, _extends({\n    className: clsx(classes.root, className),\n    elevation: raised ? 8 : undefined,\n    ref: ref,\n    ownerState: ownerState\n  }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? Card.propTypes\n/* remove-proptypes */\n= {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * If `true`, the card will use raised styling.\n   * @default false\n   */\n  raised: chainPropTypes(PropTypes.bool, props => {\n    if (props.raised && props.variant === 'outlined') {\n      return new Error('MUI: Combining `raised={true}` with `variant=\"outlined\"` has no effect.');\n    }\n\n    return null;\n  }),\n\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport default Card;","import { generateUtilityClass, generateUtilityClasses } from '@mui/base';\nexport function getCardActionAreaUtilityClass(slot) {\n  return generateUtilityClass('MuiCardActionArea', slot);\n}\nconst cardActionAreaClasses = generateUtilityClasses('MuiCardActionArea', ['root', 'focusVisible', 'focusHighlight']);\nexport default cardActionAreaClasses;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"children\", \"className\", \"focusVisibleClassName\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { unstable_composeClasses as composeClasses } from '@mui/base';\nimport useThemeProps from '../styles/useThemeProps';\nimport styled from '../styles/styled';\nimport cardActionAreaClasses, { getCardActionAreaUtilityClass } from './cardActionAreaClasses';\nimport ButtonBase from '../ButtonBase';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\n\nconst useUtilityClasses = ownerState => {\n  const {\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['root'],\n    focusHighlight: ['focusHighlight']\n  };\n  return composeClasses(slots, getCardActionAreaUtilityClass, classes);\n};\n\nconst CardActionAreaRoot = styled(ButtonBase, {\n  name: 'MuiCardActionArea',\n  slot: 'Root',\n  overridesResolver: (props, styles) => styles.root\n})(({\n  theme\n}) => ({\n  display: 'block',\n  textAlign: 'inherit',\n  width: '100%',\n  [`&:hover .${cardActionAreaClasses.focusHighlight}`]: {\n    opacity: (theme.vars || theme).palette.action.hoverOpacity,\n    '@media (hover: none)': {\n      opacity: 0\n    }\n  },\n  [`&.${cardActionAreaClasses.focusVisible} .${cardActionAreaClasses.focusHighlight}`]: {\n    opacity: (theme.vars || theme).palette.action.focusOpacity\n  }\n}));\nconst CardActionAreaFocusHighlight = styled('span', {\n  name: 'MuiCardActionArea',\n  slot: 'FocusHighlight',\n  overridesResolver: (props, styles) => styles.focusHighlight\n})(({\n  theme\n}) => ({\n  overflow: 'hidden',\n  pointerEvents: 'none',\n  position: 'absolute',\n  top: 0,\n  right: 0,\n  bottom: 0,\n  left: 0,\n  borderRadius: 'inherit',\n  opacity: 0,\n  backgroundColor: 'currentcolor',\n  transition: theme.transitions.create('opacity', {\n    duration: theme.transitions.duration.short\n  })\n}));\nconst CardActionArea = /*#__PURE__*/React.forwardRef(function CardActionArea(inProps, ref) {\n  const props = useThemeProps({\n    props: inProps,\n    name: 'MuiCardActionArea'\n  });\n\n  const {\n    children,\n    className,\n    focusVisibleClassName\n  } = props,\n        other = _objectWithoutPropertiesLoose(props, _excluded);\n\n  const ownerState = props;\n  const classes = useUtilityClasses(ownerState);\n  return /*#__PURE__*/_jsxs(CardActionAreaRoot, _extends({\n    className: clsx(classes.root, className),\n    focusVisibleClassName: clsx(focusVisibleClassName, classes.focusVisible),\n    ref: ref,\n    ownerState: ownerState\n  }, other, {\n    children: [children, /*#__PURE__*/_jsx(CardActionAreaFocusHighlight, {\n      className: classes.focusHighlight,\n      ownerState: ownerState\n    })]\n  }));\n});\nprocess.env.NODE_ENV !== \"production\" ? CardActionArea.propTypes\n/* remove-proptypes */\n= {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * @ignore\n   */\n  focusVisibleClassName: PropTypes.string,\n\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport default CardActionArea;","import { generateUtilityClass, generateUtilityClasses } from '@mui/base';\nexport function getCardContentUtilityClass(slot) {\n  return generateUtilityClass('MuiCardContent', slot);\n}\nconst cardContentClasses = generateUtilityClasses('MuiCardContent', ['root']);\nexport default cardContentClasses;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"className\", \"component\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { unstable_composeClasses as composeClasses } from '@mui/base';\nimport styled from '../styles/styled';\nimport useThemeProps from '../styles/useThemeProps';\nimport { getCardContentUtilityClass } from './cardContentClasses';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n\nconst useUtilityClasses = ownerState => {\n  const {\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['root']\n  };\n  return composeClasses(slots, getCardContentUtilityClass, classes);\n};\n\nconst CardContentRoot = styled('div', {\n  name: 'MuiCardContent',\n  slot: 'Root',\n  overridesResolver: (props, styles) => styles.root\n})(() => {\n  return {\n    padding: 16,\n    '&:last-child': {\n      paddingBottom: 24\n    }\n  };\n});\nconst CardContent = /*#__PURE__*/React.forwardRef(function CardContent(inProps, ref) {\n  const props = useThemeProps({\n    props: inProps,\n    name: 'MuiCardContent'\n  });\n\n  const {\n    className,\n    component = 'div'\n  } = props,\n        other = _objectWithoutPropertiesLoose(props, _excluded);\n\n  const ownerState = _extends({}, props, {\n    component\n  });\n\n  const classes = useUtilityClasses(ownerState);\n  return /*#__PURE__*/_jsx(CardContentRoot, _extends({\n    as: component,\n    className: clsx(classes.root, className),\n    ownerState: ownerState,\n    ref: ref\n  }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? CardContent.propTypes\n/* remove-proptypes */\n= {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: PropTypes.elementType,\n\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport default CardContent;","import { generateUtilityClass, generateUtilityClasses } from '@mui/base';\nexport function getCardMediaUtilityClass(slot) {\n  return generateUtilityClass('MuiCardMedia', slot);\n}\nconst cardMediaClasses = generateUtilityClasses('MuiCardMedia', ['root', 'media', 'img']);\nexport default cardMediaClasses;","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"children\", \"className\", \"component\", \"image\", \"src\", \"style\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { chainPropTypes } from '@mui/utils';\nimport { unstable_composeClasses as composeClasses } from '@mui/base';\nimport useThemeProps from '../styles/useThemeProps';\nimport styled from '../styles/styled';\nimport { getCardMediaUtilityClass } from './cardMediaClasses';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    isMediaComponent,\n    isImageComponent\n  } = ownerState;\n  const slots = {\n    root: ['root', isMediaComponent && 'media', isImageComponent && 'img']\n  };\n  return composeClasses(slots, getCardMediaUtilityClass, classes);\n};\n\nconst CardMediaRoot = styled('div', {\n  name: 'MuiCardMedia',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    const {\n      isMediaComponent,\n      isImageComponent\n    } = ownerState;\n    return [styles.root, isMediaComponent && styles.media, isImageComponent && styles.img];\n  }\n})(({\n  ownerState\n}) => _extends({\n  display: 'block',\n  backgroundSize: 'cover',\n  backgroundRepeat: 'no-repeat',\n  backgroundPosition: 'center'\n}, ownerState.isMediaComponent && {\n  width: '100%'\n}, ownerState.isImageComponent && {\n  // ⚠️ object-fit is not supported by IE11.\n  objectFit: 'cover'\n}));\nconst MEDIA_COMPONENTS = ['video', 'audio', 'picture', 'iframe', 'img'];\nconst IMAGE_COMPONENTS = ['picture', 'img'];\nconst CardMedia = /*#__PURE__*/React.forwardRef(function CardMedia(inProps, ref) {\n  const props = useThemeProps({\n    props: inProps,\n    name: 'MuiCardMedia'\n  });\n\n  const {\n    children,\n    className,\n    component = 'div',\n    image,\n    src,\n    style\n  } = props,\n        other = _objectWithoutPropertiesLoose(props, _excluded);\n\n  const isMediaComponent = MEDIA_COMPONENTS.indexOf(component) !== -1;\n  const composedStyle = !isMediaComponent && image ? _extends({\n    backgroundImage: `url(\"${image}\")`\n  }, style) : style;\n\n  const ownerState = _extends({}, props, {\n    component,\n    isMediaComponent,\n    isImageComponent: IMAGE_COMPONENTS.indexOf(component) !== -1\n  });\n\n  const classes = useUtilityClasses(ownerState);\n  return /*#__PURE__*/_jsx(CardMediaRoot, _extends({\n    className: clsx(classes.root, className),\n    as: component,\n    role: !isMediaComponent && image ? 'img' : undefined,\n    ref: ref,\n    style: composedStyle,\n    ownerState: ownerState,\n    src: isMediaComponent ? image || src : undefined\n  }, other, {\n    children: children\n  }));\n});\nprocess.env.NODE_ENV !== \"production\" ? CardMedia.propTypes\n/* remove-proptypes */\n= {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * The content of the component.\n   */\n  children: chainPropTypes(PropTypes.node, props => {\n    if (!props.children && !props.image && !props.src && !props.component) {\n      return new Error('MUI: Either `children`, `image`, `src` or `component` prop must be specified.');\n    }\n\n    return null;\n  }),\n\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: PropTypes.elementType,\n\n  /**\n   * Image to be displayed as a background image.\n   * Either `image` or `src` prop must be specified.\n   * Note that caller must specify height otherwise the image will not be visible.\n   */\n  image: PropTypes.string,\n\n  /**\n   * An alias for `image` property.\n   * Available only with media components.\n   * Media components: `video`, `audio`, `picture`, `iframe`, `img`.\n   */\n  src: PropTypes.string,\n\n  /**\n   * @ignore\n   */\n  style: PropTypes.object,\n\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport default CardMedia;"],"names":["Helmet","metaContent","schema","title","url","description","ogImage","currentOgImage","height","property","content","rel","href","type","JSON","stringify","map","sch","defaultProps","sx","display","justifyContent","alignItems","width","p","xs","md","xl","backgroundColor","container","spacing","maxWidth","item","sm","flexDirection","variant","mb","fontWeight","px","pb","pt","hideText","NewsletterEmailSignup","signupEmailFieldRef","extraParams","btnText","follow","handleSuccess","React","email","setEmail","creating","setCreating","dispatch","useAppDispatch","event","preventDefault","createReader","unwrap","then","e","FacebookPixel","RedditPixel","ReactGA","category","action","ReactPinterestTag","value","order_quantity","currency","line_items","product_name","product_id","product_price","product_quantity","send_to","process","skip_categories","addSnack","message","pushUrl","uuid","push","finally","catch","margin","component","color","align","onSubmit","onChange","target","ref","required","fullWidth","name","label","loading","id","parseInt","useParams","blogLoading","setBlogLoading","blog","useAppSelector","state","selectReaderBlog","getReaderBlog","resourceType","joins","Box","mt","LoadingSpinner","NewsletterBanner","Container","Grid","lg","Typography","parsed_title","ReaderBlogDetails","base_generated_content","intro","split","paragraph","books","book","mr","asin","src","image_url","alt","author","flexGrow","borderLeft","borderColor","pl","why_this_book_fits","book_description","what_readers_like","Button","join","parameterize","canonical_url_title","content_sanitized","substring","image_urls","published_at","updated_at","word_count","author_name","similar_blogs","length","SimilarBlogsSidebar","blogs","SimilarBlogsMobile","Paper","elevation","borderRadius","border","gap","relatedBlog","Card","transition","transform","boxShadow","CardActionArea","RouterLink","to","CardMedia","image","objectFit","CardContent","overflow","WebkitBoxOrient","WebkitLineClamp","lineHeight","truncated_content","replace","textDecoration","ArrowForward","fontSize","ml","Divider","textAlign","endIcon","Date","toDateString","Logo","blog_categories","flexWrap","style","theme","padding","slugCase","token","trimNonWhitespaceCharacters","toLowerCase","camelize","str","word","index","toUpperCase","textToTrim","trim","text","_interopRequireDefault","require","exports","_createSvgIcon","_jsxRuntime","_default","default","jsx","d","getCardUtilityClass","slot","generateUtilityClass","generateUtilityClasses","_excluded","CardRoot","styled","overridesResolver","props","styles","root","inProps","useThemeProps","className","raised","other","_objectWithoutPropertiesLoose","ownerState","_extends","classes","composeClasses","useUtilityClasses","_jsx","clsx","undefined","getCardActionAreaUtilityClass","CardActionAreaRoot","ButtonBase","cardActionAreaClasses","opacity","vars","palette","hoverOpacity","focusOpacity","CardActionAreaFocusHighlight","focusHighlight","pointerEvents","position","top","right","bottom","left","transitions","create","duration","short","children","focusVisibleClassName","_jsxs","focusVisible","getCardContentUtilityClass","CardContentRoot","paddingBottom","as","getCardMediaUtilityClass","CardMediaRoot","isMediaComponent","isImageComponent","media","img","backgroundSize","backgroundRepeat","backgroundPosition","MEDIA_COMPONENTS","IMAGE_COMPONENTS","indexOf","composedStyle","backgroundImage","slots","role"],"sourceRoot":""}