{"version":3,"file":"static/js/7626.400965fd.chunk.js","mappings":"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","sources":["components/meta/Helmet.tsx","components/misc/AiPageRecommender.tsx","components/misc/Errors/InlineAlert.tsx","components/misc/SignUpDialog.tsx","components/partner/SignUpForm.tsx","statics/PenNameAi.tsx","utils/websocketConsumer.ts","../node_modules/@mui/material/ListSubheader/listSubheaderClasses.js","../node_modules/@mui/material/ListSubheader/ListSubheader.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 React from \"react\";\nimport { Box, Grid, ListItem, ListItemButton, ListItemText, Typography, lighten } from \"@mui/material\";\nimport { Link } from \"react-router-dom\";\n\nconst AiPageRecommender = function () {\n const currentPath = window.location.pathname;\n\n const recommendations = [\n { path: '/ai/book-title-generator', title: 'AI Book Title Generator', desc: 'Create a bestselling book title.' },\n { path: '/ai/book-plot-generator', title: 'AI Book Plot Generator', desc: 'Create a must-read book plot.' },\n { path: '/ai/pen-name-generator', title: 'AI Pen Name Generator', desc: 'Create a memorable pen name.' },\n { path: '/ai/book-character-generator', title: 'AI Book Character Generator', desc: 'Create a compelling protagonist.' },\n { path: '/ai/book-description-generator', title: 'AI Book Description Generator', desc: 'Create a book description that sells books.' },\n ]\n\n return (\n <Box>\n <Typography variant=\"h5\" gutterBottom>We've got other AI powered book tools that you might be interested in</Typography>\n <Grid container spacing={2}>\n {recommendations.filter(rec => rec.path !== currentPath).map(rec => (\n <Grid item xs={12} sm={6} key={rec.path}>\n <ListItem disablePadding sx={{ height: '100%' }}>\n <ListItemButton\n component={Link}\n to={rec.path}\n sx={{\n borderRadius: 4,\n border: '1px solid',\n borderColor: 'secondary.main',\n height: '100%',\n alignItems: 'flex-start',\n '&:hover': {\n borderColor: 'secondary.dark',\n backgroundColor: lighten('#b35ec2', 0.95),\n },\n }}\n >\n <ListItemText primary={rec.title} secondary={rec.desc} />\n </ListItemButton>\n </ListItem>\n </Grid>\n ))}\n </Grid>\n </Box>\n )\n};\n\nexport default AiPageRecommender;\n","/**\n * This component provides a basic wrapper around the native mui Alert\n * component.\n *\n * Extension is provided to allow easy modification, and enhancements.\n *\n * The component uses useEffect to listen for changes to `message`.\n * When a change is detected, the alert opens, or remains open for\n * another x seconds, set back to the fixed duration by each change.\n *\n * Two timers control whether the message will be hidden or its onDisappeared\n * callback called.\n *\n * Possible enhancements:\n * 1. Pass in the seconds for it to stay present/active.\n * 2. Allow prop passing to override default alert props.\n */\nimport React from 'react';\nimport Alert, { AlertColor } from '@mui/material/Alert';\nimport IconButton from '@mui/material/IconButton';\nimport CloseIcon from '@mui/icons-material/Close';\nimport Collapse from '@mui/material/Collapse';\n\nconst alertCollapseDurationMs = 300;\nconst defaultAlertOpenTimeMs = 10 * 1000;\n\nconst InlineAlert = function ({\n message,\n severity,\n onDisappear,\n}: {\n message: string;\n severity?: AlertColor;\n onDisappear?: () => void;\n}) {\n const [open, setOpen] = React.useState<boolean>();\n const autoCloseTimer: { current: NodeJS.Timeout | null } = React.useRef(null);\n const clearTextTimer: { current: NodeJS.Timeout | null } = React.useRef(null);\n\n React.useEffect(() => {\n if (autoCloseTimer.current !== null || clearTextTimer.current !== null) {\n clearInterval(autoCloseTimer.current as NodeJS.Timeout);\n clearInterval(clearTextTimer.current as NodeJS.Timeout);\n }\n\n if (!message) {\n setOpen(false);\n return () => {};\n }\n\n setOpen(true);\n autoCloseTimer.current = setTimeout(() => {\n setOpen(false);\n autoCloseTimer.current = null;\n }, defaultAlertOpenTimeMs);\n\n if (onDisappear) {\n clearTextTimer.current = setTimeout(\n onDisappear,\n defaultAlertOpenTimeMs + alertCollapseDurationMs\n );\n }\n\n return () => {\n if (autoCloseTimer.current !== null)\n clearInterval(autoCloseTimer.current as NodeJS.Timeout);\n if (clearTextTimer.current !== null)\n clearInterval(clearTextTimer.current as NodeJS.Timeout);\n setOpen(false);\n };\n }, [message]);\n\n return (\n <Collapse in={!!open}>\n <Alert\n severity={severity}\n action={\n <IconButton\n aria-label=\"close\"\n color=\"inherit\"\n size=\"small\"\n onClick={() => {\n setOpen(false);\n clearInterval(autoCloseTimer.current as NodeJS.Timeout);\n clearInterval(clearTextTimer.current as NodeJS.Timeout);\n setTimeout(() => {\n if (onDisappear) onDisappear();\n }, alertCollapseDurationMs);\n }}\n >\n <CloseIcon fontSize=\"inherit\" />\n </IconButton>\n }\n >\n {message}\n </Alert>\n </Collapse>\n );\n};\n\nInlineAlert.defaultProps = {\n severity: 'error',\n onDisappear: null,\n};\n\nexport default InlineAlert;\n","import React from 'react';\nimport { Dialog, DialogContent, DialogTitle, IconButton } from '@mui/material';\nimport { Close } from '@mui/icons-material';\nimport SignUpForm from '../partner/SignUpForm';\n\nconst SignUpDialog = function ({ openComponent }: { openComponent: JSX.Element }) {\n const [open, setOpen] = React.useState(false);\n\n const handleSuccess = () => {\n setOpen(false);\n };\n\n return (\n <>\n {React.cloneElement(openComponent, { onClick: () => setOpen(true) })}\n <Dialog onClose={() => setOpen(false)} open={open}>\n <DialogTitle>\n Create Account\n <IconButton\n aria-label=\"close\"\n onClick={() => setOpen(false)}\n sx={{\n position: 'absolute',\n right: 8,\n top: 8,\n color: 'secondary.main',\n }}\n >\n <Close />\n </IconButton>\n </DialogTitle>\n <DialogContent>\n <SignUpForm\n handleSuccess={handleSuccess}\n snackExtraData={{ variant: 'success', message: 'Your account was sucessfully created' }}\n noFormElement\n />\n </DialogContent>\n </Dialog>\n </>\n );\n};\n\nexport default SignUpDialog;\n","/* eslint-disable react/require-default-props */\nimport React, { useState } from 'react';\nimport ReactGA from 'react-ga4';\nimport LoadingButton from '@mui/lab/LoadingButton';\nimport LoginIcon from '@mui/icons-material/Login';\nimport FacebookPixel from 'react-facebook-pixel';\nimport RedditPixel from 'react-reddit-pixel';\nimport Cookies from 'universal-cookie';\nimport { Box, Grid, TextField, Typography } from '@mui/material';\nimport { push } from 'connected-react-router';\nimport { useAppDispatch } from '../../app/hooks';\nimport { signUpPartner } from '../../store/current-partner/currentPartnerSlice';\nimport MuiRouterLink from '../mui-wrappers/MuiRouterLink';\nimport theme from '../../theme/theme';\nimport { addSnack } from '../../store/snacks/snacksSlice';\n\nconst Copyright = function () {\n return (\n <Typography variant=\"body2\" color=\"textSecondary\" align=\"center\">\n {'Copyright © '}\n BookRaid {new Date().getFullYear()}\n </Typography>\n );\n};\n\nconst SignUpForm = function ({\n formExtrasData,\n handleSuccess,\n snackExtraData,\n extraSetFormErrors,\n extraBtnText,\n noFormElement, // <form> within a <form> is invalid HTML\n}: {\n formExtrasData?: any;\n handleSuccess?: () => void;\n snackExtraData?: any;\n extraSetFormErrors?: any;\n extraBtnText?: string;\n noFormElement?: boolean;\n}) {\n const dispatch = useAppDispatch();\n\n const [formErrors, setFormErrors] = useState({} as any);\n const [email, setEmail] = useState('');\n const [password, setPassword] = useState('');\n const [passwordConfirmation, setPasswordConfirmation] = useState('');\n const [submitting, setSubmitting] = useState(false);\n\n const handleSubmit = async (event: any) => {\n event.preventDefault();\n setSubmitting(true);\n const cookies = new Cookies();\n let signUpData = {\n email,\n password,\n password_confirmation: passwordConfirmation,\n referrer_id: cookies.get('referrer_id') || '',\n signup_source: cookies.get('utm_source') || '',\n };\n if (formExtrasData) {\n signUpData = { ...signUpData, ...formExtrasData };\n }\n dispatch(signUpPartner(signUpData))\n .unwrap()\n .then(() => {\n setSubmitting(false);\n // Partner completes registration\n FacebookPixel.track('CompleteRegistration');\n RedditPixel.track('Lead');\n // \"sign_up\" is somewhat a duplicate of the event below, but \"sign_up\" is a recommended event and probably has some implications for GA reporting\n ReactGA.event(\"sign_up\")\n ReactGA.event({\n category: 'Partners',\n action: 'PartnersSignUp',\n });\n ReactGA.gtag('event', 'conversion', {\n send_to: process.env.REACT_APP_GTAG_PARTNER_SIGNUP,\n });\n if (snackExtraData) {\n dispatch(addSnack(snackExtraData));\n }\n if (handleSuccess) {\n handleSuccess();\n } else {\n dispatch(push('/partners/books/new?acct=new'));\n }\n })\n .catch((error) => {\n setFormErrors({ ...formErrors, ...error.errors });\n if (extraSetFormErrors) {\n extraSetFormErrors({ ...formErrors, ...error.errors });\n }\n })\n .finally(() => {\n setSubmitting(false);\n });\n return () => setSubmitting(false);\n };\n\n return (\n <>\n <Box\n component={noFormElement ? 'div' : 'form'}\n noValidate\n onSubmit={handleSubmit}\n sx={{ width: '100%', marginTop: theme.spacing(1) }}\n >\n <TextField\n variant=\"outlined\"\n margin=\"normal\"\n required\n fullWidth\n label=\"Email Address\"\n name=\"email\"\n autoComplete=\"email\"\n error={formErrors?.email?.length > 0}\n helperText={formErrors?.email?.join(', ')}\n autoFocus\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n />\n\n <TextField\n variant=\"outlined\"\n margin=\"normal\"\n required\n fullWidth\n name=\"password\"\n label=\"Password\"\n type=\"password\"\n autoComplete=\"current-password\"\n error={formErrors?.password?.length > 0}\n helperText={formErrors?.password?.join(', ')}\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n />\n\n <TextField\n variant=\"outlined\"\n margin=\"normal\"\n required\n fullWidth\n name=\"password-confirmation\"\n label=\"Password Confirmation\"\n type=\"password\"\n autoComplete=\"current-password\"\n value={passwordConfirmation}\n error={formErrors?.password_confirmation?.length > 0}\n helperText={formErrors?.password_confirmation?.join(', ')}\n onChange={(e) => setPasswordConfirmation(e.target.value)}\n />\n\n <LoadingButton\n type=\"submit\"\n onClick={handleSubmit}\n fullWidth\n loading={submitting}\n endIcon={<LoginIcon />}\n loadingPosition=\"end\"\n variant=\"contained\"\n color=\"secondary\"\n style={{ margin: '10px 0' }}\n >\n Sign Up{extraBtnText ? ` ${extraBtnText}` : ''}\n </LoadingButton>\n\n <Grid container>\n <Grid item xs>\n <MuiRouterLink to=\"/partners/password/forgot\" variant=\"body2\">\n Forgot password?\n </MuiRouterLink>\n </Grid>\n <Grid item>\n <MuiRouterLink to=\"/partners/sign-in\" variant=\"body2\">\n Already have an account? Sign In\n </MuiRouterLink>\n </Grid>\n </Grid>\n </Box>\n <Typography my={4} align=\"center\" color=\"text.secondary\">\n We will never spam you or share your email address, but occasionally\n email helpful promotion tips and sales. <br />\n Unsubscribe anytime.\n </Typography>\n <Box mt={4}>\n <Copyright />\n </Box>\n </>\n );\n};\n\nexport default SignUpForm;\n","/* eslint-disable jsx-a11y/anchor-is-valid */\nimport React from 'react';\nimport {\n Container,\n Grid,\n FormControl,\n InputLabel,\n Select,\n MenuItem,\n Box,\n Typography,\n Alert,\n ListSubheader,\n Divider,\n Link,\n} from '@mui/material';\nimport { LoadingButton } from '@mui/lab';\nimport ReCAPTCHA from 'react-google-recaptcha';\n\nimport { useAppDispatch, useAppSelector } from '../app/hooks';\nimport {\n getAllSuperCategories,\n selectAllSuperCategories,\n} from '../store/super-categories/superCategoriesSlice';\nimport InlineAlert from '../components/misc/Errors/InlineAlert';\nimport MuiRouterLink from '../components/mui-wrappers/MuiRouterLink';\nimport Helmet from '../components/meta/Helmet';\nimport { isLoggedInPartner } from '../store/current-partner/currentPartnerSlice';\nimport SignUpDialog from '../components/misc/SignUpDialog';\nimport { isLoggedInUser } from '../store/current-user/currentUserSlice';\nimport websocketConsumer from '../utils/websocketConsumer';\nimport { findCredentials } from '../utils/axios/middleware';\nimport AiPageRecommender from '../components/misc/AiPageRecommender';\n\nconst PenNameAi = function () {\n const dispatch = useAppDispatch();\n const [language, setLanguage] = React.useState('');\n const [category, setCategory] = React.useState('');\n const [gender, setGender] = React.useState('');\n const [submitting, setSubmitting] = React.useState(false);\n const [apiResponse, setApiResponse] = React.useState('');\n // eslint-disable-next-line\n const [recaptcha, setRecaptcha] = React.useState<string | null>(null);\n const [errorText, setErrorText] = React.useState('');\n const languages = [\"Afrikaans\", \"Albanian\", \"Arabic\", \"Armenian\", \"Basque\", \"Bengali\", \"Bulgarian\", \"Catalan\", \"Cambodian\", \"Croatian\", \"Czech\", \"Danish\", \"Dutch\", \"Estonian\", \"Fiji\", \"Finnish\", \"French\", \"Georgian\", \"German\", \"Greek\", \"Gujarati\", \"Hebrew\", \"Hindi\", \"Hungarian\", \"Icelandic\", \"Indonesian\", \"Irish\", \"Italian\", \"Japanese\", \"Javanese\", \"Korean\", \"Latin\", \"Latvian\", \"Lithuanian\", \"Macedonian\", \"Malay\", \"Malayalam\", \"Maltese\", \"Mandarin\", \"Maori\", \"Marathi\", \"Mongolian\", \"Nepali\", \"Norwegian\", \"Persian\", \"Polish\", \"Portuguese\", \"Punjabi\", \"Quechua\", \"Romanian\", \"Russian\", \"Samoan\", \"Serbian\", \"Slovak\", \"Slovenian\", \"Spanish\", \"Swahili\", \"Swedish\", \"Tamil\", \"Tatar\", \"Telugu\", \"Thai\", \"Tibetan\", \"Tonga\", \"Turkish\", \"Ukrainian\", \"Urdu\", \"Uzbek\", \"Vietnamese\", \"Welsh\", \"Xhosa\"]\n const partnerLoggedIn = useAppSelector(isLoggedInPartner);\n const userLoggedIn = useAppSelector(isLoggedInUser);\n const [subscription, setSubscription] = React.useState<any>(null);\n const wsConnected = subscription && subscription.connected;\n const consumer = websocketConsumer();\n\n const superCategories = useAppSelector(selectAllSuperCategories);\n\n React.useEffect(() => {\n // if there are no super categories in the store,\n // or if the super categories in the store don't have associated categories, then refetch\n if (superCategories.length === 0 || !superCategories[0].categories) {\n dispatch(\n getAllSuperCategories({\n joins: ['categories'],\n resourceType: 'partner',\n })\n );\n }\n }, []);\n\n React.useEffect(() => {\n setSubscription(consumer.subscriptions.create('AiToolsChannel', {\n connected: () => {},\n disconnected: () => {},\n received: (data: any) => {\n // Handle the received data\n if (data.finish) {\n setSubmitting(false);\n } else if (data.error) {\n setErrorText(data.error);\n setSubmitting(false);\n } else {\n setApiResponse(old => old + data.data);\n }\n }\n }));\n\n return () => {\n consumer.subscriptions.remove(subscription);\n }\n }, []);\n\n async function handleSubmit(event: React.FormEvent<HTMLFormElement>) {\n event.preventDefault();\n setSubmitting(true);\n setErrorText('');\n setApiResponse('');\n\n let formData = {\n prompt: 'pen_name:generate',\n inputs: { language, gender, category },\n } as any;\n\n if (!partnerLoggedIn && !userLoggedIn) {\n formData.recaptcha = recaptcha;\n } else {\n const creds = findCredentials();\n formData = { ...formData, ...creds };\n }\n\n subscription.send(formData);\n }\n\n const generatedCategories = () => {\n const data = [] as any;\n\n superCategories.forEach((superCategory) => {\n data.push(\n <ListSubheader sx={{ fontWeight: 'bold', color: 'primary.main' }} key={superCategory.id}>{superCategory.name}</ListSubheader>,\n superCategory.categories.map((cat) => (\n <MenuItem key={cat.id} value={cat.name}>{cat.name}</MenuItem>\n ))\n )\n })\n\n return data;\n }\n\n return (\n <Container component=\"main\" disableGutters maxWidth=\"md\">\n <form onSubmit={handleSubmit}>\n <Grid container spacing={1}>\n <Grid item xs={12}>\n <Typography gutterBottom variant=\"h3\" sx={{ mb: 2 }}>\n AI Pen Name Generator\n </Typography>\n <Typography sx={{ mb: 4 }}>\n Looking for a great pen name? We've got you covered! Try out our AI pen name generator below.\n </Typography>\n </Grid>\n\n <Grid item xs={12} md={4}>\n <FormControl sx={{ width: '100%' }}>\n <InputLabel id=\"category-select-label\">Book Category</InputLabel>\n <Select\n labelId=\"category-select-label\"\n id=\"category-select\"\n value={category}\n label=\"Choose a Book Category\"\n onChange={(e) => setCategory(e.target.value)}\n >\n <MenuItem value=\"not specified\">\n <i>Any</i>\n </MenuItem>\n {generatedCategories()}\n </Select>\n </FormControl>\n </Grid>\n\n <Grid item xs={12} md={4}>\n <FormControl sx={{ width: '100%' }}>\n <InputLabel id=\"gender-select-label\">Author Gender</InputLabel>\n <Select\n labelId=\"gender-select-label\"\n id=\"gender-select\"\n value={gender}\n label=\"Author Gender\"\n onChange={(e) => setGender(e.target.value)}\n >\n <MenuItem value=\"not specified\">Neutral</MenuItem>\n <MenuItem value=\"male or female\">Male or Female</MenuItem>\n <MenuItem value=\"male\">Male</MenuItem>\n <MenuItem value=\"female\">Female</MenuItem>\n </Select>\n </FormControl>\n </Grid>\n\n <Grid item xs={12} md={4}>\n <FormControl sx={{ width: '100%' }}>\n <InputLabel id=\"language-select-label\">Language</InputLabel>\n <Select\n labelId=\"language-select-label\"\n id=\"language-select\"\n value={language}\n label=\"Language\"\n onChange={(e) => setLanguage(e.target.value)}\n >\n <MenuItem value=\"not specified\"><i>Any</i></MenuItem>\n <MenuItem value=\"English\">English</MenuItem>\n <Divider />\n {languages.map((lang) => (\n <MenuItem key={lang} value={lang}>{lang}</MenuItem>\n ))}\n </Select>\n </FormControl>\n </Grid>\n\n {apiResponse && (\n <Grid item xs={12}>\n <Box\n sx={{\n pl: 2,\n mb: 2,\n borderLeft: '1px solid',\n borderColor: 'primary.main',\n }}\n >\n <Typography variant=\"h6\" sx={{ mb: 1 }}>\n AI Response:\n </Typography>\n <Typography sx={{ whiteSpace: 'pre-wrap' }}>\n {apiResponse}\n </Typography>\n </Box>\n </Grid>\n )}\n {errorText && (\n <Grid item xs={12} sx={{ pb: 1 }}>\n <InlineAlert message={errorText} severity=\"error\" />\n </Grid>\n )}\n <Grid item xs={12}>\n {!partnerLoggedIn && !userLoggedIn &&\n <>\n <ReCAPTCHA\n sitekey={process.env.REACT_APP_RECAPTCHA_SITE_KEY || ''}\n onChange={(value) => setRecaptcha(value)}\n />\n <Typography variant=\"caption\" sx={{ mt: 1, mb: 2 }}>\n <SignUpDialog openComponent={<Link underline='none' sx={{ '&:hover': { cursor: 'pointer' } }}>Sign up</Link>} />{' '}\n (or <MuiRouterLink to=\"/partners/sign-in\">sign in</MuiRouterLink>) so that we know you're not a robot, and we won't bug you with this recaptcha box :)\n </Typography>\n </>\n }\n\n <LoadingButton\n type=\"submit\"\n size=\"small\"\n fullWidth\n variant=\"contained\"\n color=\"secondary\"\n loading={submitting}\n disabled={!wsConnected}\n sx={{ mt: 2 }}\n >\n Submit\n </LoadingButton>\n\n {!wsConnected &&\n <Alert severity=\"warning\" sx={{ my: 2 }}>\n We're having trouble connecting to our AI. If this message doesn't disappear, try refreshing the page.\n </Alert>\n }\n\n <Alert severity=\"info\" sx={{ my: 2 }}>\n Have you found the perfect pen name? We've got{' '}\n <b>50,000 readers</b> in our newsletter who would love to read your latest book.\n Get started <MuiRouterLink to=\"/partners\">here</MuiRouterLink>.\n </Alert>\n <AiPageRecommender />\n </Grid>\n\n <Grid item xs={12}>\n <Typography variant=\"h5\" sx={{ mt: 4, mb: 2 }}>Why Do I Need a Pen Name?</Typography>\n <Typography gutterBottom>As an avid reader, you may have come across some authors who use a pen name instead of their real name. But why do they do this? Why not just use their own name like any other writer? There are many reasons for using a pen name, and selecting a good one is important. </Typography>\n <Typography gutterBottom>Firstly, an author may use a pen name to protect their privacy. If they write controversial or sensitive material, they may want to remain anonymous to avoid any backlash or negative attention. For example, J.K. Rowling famously used the pen name Robert Galbraith for her crime novels. She did this to distance herself from the Harry Potter franchise and allow her books to stand on their own merits. The anonymity of her pen name allowed her to write without the pressure of being compared to her wildly successful previous works.</Typography>\n <Typography gutterBottom>Another reason an author may use a pen name is to separate their different genres or audiences. If an author typically writes romance novels but wants to try their hand at writing sci-fi, they may use a pen name to differentiate the new work from their existing fan base. Alternatively, if an author writes for multiple age groups, they may use a different pen name for each one to avoid confusion. For example, Stephen King writes horror and thriller novels under his own name, but uses the pen name Richard Bachman for his more dystopian works.</Typography>\n <Typography gutterBottom>Using a pen name can also give an author a new identity or persona. If an author wants to reinvent themselves or distance themselves from their previous works, a new pen name can provide a fresh start. For example, Nora Roberts is a popular romance author, but she also writes crime novels under the pen name J.D. Robb. The new name allows her to explore different genres and create a new persona for readers to connect with.</Typography>\n <Typography gutterBottom>Now that we know why an author might use a pen name, let's talk about the importance of selecting a good one. A pen name should be easy to remember, easy to spell, and easy to pronounce. It should also be unique and not too similar to any existing authors or popular characters. A good pen name can help an author stand out and be memorable to readers.</Typography>\n <Typography gutterBottom>A pen name can also help an author establish a brand or niche. If an author has a specific genre or style, their pen name should reflect that. For example, if an author writes historical fiction, their pen name could include historical elements or be reminiscent of a time period. This can help readers recognize their work and make it easier for them to find more books in their preferred genre.</Typography>\n <Typography gutterBottom>However, it's also important to make sure that a pen name isn't too gimmicky or too similar to an existing author. A pen name should be unique, but not to the point where it's difficult to pronounce or remember. It's also important to make sure that a pen name isn't offensive or insensitive in any way. A pen name should be something that an author is proud to use and doesn't regret later on.</Typography>\n </Grid>\n </Grid>\n </form>\n <Helmet\n metaContent={{\n title: 'AI Pen Name Generator',\n url: 'https://bookraid.com/ai/pen-name-generator',\n description:\n 'Discover your new writing identity with our AI Pen Name Generator. Unique and creative names in seconds!',\n ogImage:\n 'https://website-assets-public.s3.us-west-2.amazonaws.com/opengraph/gpt-description-tool.jpg',\n }}\n />\n </Container>\n );\n};\n\nexport default PenNameAi;\n","import { createConsumer } from \"@rails/actioncable\";\n\nconst websocketConsumer = function (): any {\n return createConsumer(process.env.REACT_APP_BOOKRAID_WS_URL)\n}\n\nexport default websocketConsumer\n","import { generateUtilityClass, generateUtilityClasses } from '@mui/base';\nexport function getListSubheaderUtilityClass(slot) {\n return generateUtilityClass('MuiListSubheader', slot);\n}\nconst listSubheaderClasses = generateUtilityClasses('MuiListSubheader', ['root', 'colorPrimary', 'colorInherit', 'gutters', 'inset', 'sticky']);\nexport default listSubheaderClasses;","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"className\", \"color\", \"component\", \"disableGutters\", \"disableSticky\", \"inset\"];\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 capitalize from '../utils/capitalize';\nimport { getListSubheaderUtilityClass } from './listSubheaderClasses';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n\nconst useUtilityClasses = ownerState => {\n const {\n classes,\n color,\n disableGutters,\n inset,\n disableSticky\n } = ownerState;\n const slots = {\n root: ['root', color !== 'default' && `color${capitalize(color)}`, !disableGutters && 'gutters', inset && 'inset', !disableSticky && 'sticky']\n };\n return composeClasses(slots, getListSubheaderUtilityClass, classes);\n};\n\nconst ListSubheaderRoot = styled('li', {\n name: 'MuiListSubheader',\n slot: 'Root',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.root, ownerState.color !== 'default' && styles[`color${capitalize(ownerState.color)}`], !ownerState.disableGutters && styles.gutters, ownerState.inset && styles.inset, !ownerState.disableSticky && styles.sticky];\n }\n})(({\n theme,\n ownerState\n}) => _extends({\n boxSizing: 'border-box',\n lineHeight: '48px',\n listStyle: 'none',\n color: (theme.vars || theme).palette.text.secondary,\n fontFamily: theme.typography.fontFamily,\n fontWeight: theme.typography.fontWeightMedium,\n fontSize: theme.typography.pxToRem(14)\n}, ownerState.color === 'primary' && {\n color: (theme.vars || theme).palette.primary.main\n}, ownerState.color === 'inherit' && {\n color: 'inherit'\n}, !ownerState.disableGutters && {\n paddingLeft: 16,\n paddingRight: 16\n}, ownerState.inset && {\n paddingLeft: 72\n}, !ownerState.disableSticky && {\n position: 'sticky',\n top: 0,\n zIndex: 1,\n backgroundColor: (theme.vars || theme).palette.background.paper\n}));\nconst ListSubheader = /*#__PURE__*/React.forwardRef(function ListSubheader(inProps, ref) {\n const props = useThemeProps({\n props: inProps,\n name: 'MuiListSubheader'\n });\n\n const {\n className,\n color = 'default',\n component = 'li',\n disableGutters = false,\n disableSticky = false,\n inset = false\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n\n const ownerState = _extends({}, props, {\n color,\n component,\n disableGutters,\n disableSticky,\n inset\n });\n\n const classes = useUtilityClasses(ownerState);\n return /*#__PURE__*/_jsx(ListSubheaderRoot, _extends({\n as: component,\n className: clsx(classes.root, className),\n ref: ref,\n ownerState: ownerState\n }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? ListSubheader.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 color of the component. It supports those theme colors that make sense for this component.\n * @default 'default'\n */\n color: PropTypes.oneOf(['default', 'inherit', 'primary']),\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 * If `true`, the List Subheader will not have gutters.\n * @default false\n */\n disableGutters: PropTypes.bool,\n\n /**\n * If `true`, the List Subheader will not stick to the top during scroll.\n * @default false\n */\n disableSticky: PropTypes.bool,\n\n /**\n * If `true`, the List Subheader is indented.\n * @default false\n */\n inset: PropTypes.bool,\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 ListSubheader;"],"names":["Helmet","metaContent","schema","title","url","description","ogImage","currentOgImage","height","property","content","rel","href","type","JSON","stringify","map","sch","defaultProps","currentPath","window","location","pathname","variant","gutterBottom","container","spacing","path","desc","filter","rec","item","xs","sm","disablePadding","sx","component","Link","to","borderRadius","border","borderColor","alignItems","backgroundColor","lighten","primary","secondary","InlineAlert","message","severity","onDisappear","React","open","setOpen","autoCloseTimer","clearTextTimer","current","clearInterval","setTimeout","defaultAlertOpenTimeMs","in","action","color","size","onClick","fontSize","openComponent","onClose","position","right","top","handleSuccess","snackExtraData","noFormElement","Copyright","align","Date","getFullYear","formExtrasData","extraSetFormErrors","extraBtnText","dispatch","useAppDispatch","useState","formErrors","setFormErrors","email","setEmail","password","setPassword","passwordConfirmation","setPasswordConfirmation","submitting","setSubmitting","handleSubmit","event","preventDefault","cookies","Cookies","signUpData","password_confirmation","referrer_id","get","signup_source","signUpPartner","unwrap","then","FacebookPixel","RedditPixel","ReactGA","category","send_to","process","addSnack","push","catch","error","errors","finally","noValidate","onSubmit","width","marginTop","theme","margin","required","fullWidth","label","name","autoComplete","length","helperText","join","autoFocus","value","onChange","e","target","loading","endIcon","loadingPosition","style","my","mt","language","setLanguage","setCategory","gender","setGender","apiResponse","setApiResponse","recaptcha","setRecaptcha","errorText","setErrorText","partnerLoggedIn","useAppSelector","isLoggedInPartner","userLoggedIn","isLoggedInUser","subscription","setSubscription","wsConnected","connected","consumer","websocketConsumer","superCategories","selectAllSuperCategories","formData","prompt","inputs","creds","findCredentials","send","categories","getAllSuperCategories","joins","resourceType","subscriptions","create","disconnected","received","data","finish","old","remove","disableGutters","maxWidth","mb","md","id","labelId","forEach","superCategory","fontWeight","cat","generatedCategories","lang","pl","borderLeft","whiteSpace","pb","sitekey","underline","cursor","disabled","createConsumer","getListSubheaderUtilityClass","slot","generateUtilityClass","generateUtilityClasses","_excluded","ListSubheaderRoot","styled","overridesResolver","props","styles","ownerState","root","capitalize","gutters","inset","disableSticky","sticky","_extends","boxSizing","lineHeight","listStyle","vars","palette","text","fontFamily","typography","fontWeightMedium","pxToRem","main","paddingLeft","paddingRight","zIndex","background","paper","inProps","ref","useThemeProps","className","other","_objectWithoutPropertiesLoose","classes","slots","composeClasses","useUtilityClasses","_jsx","as","clsx"],"sourceRoot":""}