{"version":3,"sources":["serviceWorker.js","util/transfer/TransferUtil.js","component/transfer/TransferBox.js","store/action/Root.js","component/releasenotes/Releases.js","component/releasenotes/ReleaseNotes.js","store/action/ReleaseNotes.js","component/darkmode/DarkMode.js","appshell/AppShell.js","store/action/DarkMode.js","util/notelist/NoteListUtil.js","page/home/Home.js","store/action/NoteList.js","component/note/Note.js","component/notelist/NoteList.js","page/list/List.js","page/about/About.js","page/statistics/Statistics.js","page/mindfulness/Mindfulness.js","App.js","store/Reducers.js","store/reducer/NoteList.js","store/reducer/ReleaseNotes.js","store/reducer/DarkMode.js","store/Store.js","theme/MuiTheme.js","theme/index.js","index.js"],"names":["isLocalhost","Boolean","window","location","hostname","match","registerValidSW","swUrl","config","navigator","serviceWorker","register","then","registration","onupdatefound","installingWorker","installing","onstatechange","state","controller","console","log","onUpdate","onSuccess","catch","error","NoEncryptionKeyError","name","Error","NoEncryptedStringError","NoObjectToEncryptError","TransferParseError","TransferModalState","useStyles","makeStyles","theme","paper","position","width","backgroundColor","palette","background","border","boxShadow","shadows","padding","spacing","top","left","transform","breakpoints","up","buttonGridContainer","textAlign","SaveLoadQuestion","handleLoad","handleSave","classes","Grid","container","item","xs","alignContent","alignItems","Typography","className","Button","onClick","TransferModal","open","handleClose","useSelector","dispatch","useDispatch","useState","saveOrLoadState","setSaveOrLoadState","Modal","onClose","TransferExportBox","undefined","providedKey","setProvidedKey","exportedState","setExportedState","exportError","setExportError","Input","type","onChange","e","target","value","style","disabled","exported","obj","encryptionKey","AES","encrypt","JSON","stringify","toString","encryptObject","message","TextField","defaultValue","multiline","rows","TransferImportBox","importValue","setImportValue","success","setSuccess","importState","encryptedString","bytes","decrypt","parse","enc","Utf8","decryptObject","newState","Releases","variant","modalContent","ReleaseNotesModal","openBypass","releaseNotesViewed","process","setOpen","version","disableAutoFocus","disableEnforceFocus","switchHolder","display","DarkModeSwitcher","icon","faSun","Switch","defaultChecked","faMoon","root","drawer","flexShrink","appBar","marginLeft","primary","dark","main","menuButton","marginRight","toolbar","mixins","drawerPaper","backgroundImage","content","flexGrow","height","link","textDecoration","color","transfer","cursor","children","React","mobileOpen","setMobileOpen","transferSaveOpen","setTransferSaveOpen","darkModeEnabled","darkMode","handleDrawerToggle","to","ListItem","button","ListItemText","DarkMode","enabled","faFileUpload","CssBaseline","AppBar","Toolbar","IconButton","aria-label","edge","noWrap","Hidden","smUp","implementation","Drawer","anchor","ModalProps","keepMounted","xsDown","convertToDateList","noteList","referenceDate","Date","map","note","date","findWordCounts","length","wordCounts","it","text","toLowerCase","forEach","split","word","replace","filter","reduce","acc","cur","currentCount","Object","keys","key","intro","margin","hide","inputPaper","input","marginBottom","down","fontSize","save","divider","notification","transition","opacity","willChange","notificationShow","dateHeader","marginTop","dateTimeFormatter","Intl","DateTimeFormat","Home","currentNote","format","maybeNote","find","noteText","setNoteText","showSave","setShowSaved","currentStreak","dates","numConsecutive","isToday","isYesterday","i","d1","d2","differenceInDays","findCurrentStreak","showWelcome","setShowWelcome","Paper","elevation","gutterBottom","faChevronCircleUp","faChevronCircleDown","id","label","rowsMax","onInput","newList","unshift","SaveNoteList","saveNote","setTimeout","minWidth","title","pos","Note","Card","CardContent","component","listItem","NoteListItem","NoteList","FilledList","List","Box","subheader","About","href","maxWidth","header","NotelistWordMap","canvasRef","useRef","useEffect","WordCloud","document","getElementById","list","rotateRatio","weightFactor","ref","Statistics","bestStreak","maxNumConsecutive","Math","max","findMostConsecutiveDays","averageWordCount","round","trim","findAverageWordCount","findAverageWordCountRounded","longestNote","findLongestNote","Mindfulness","AppShell","path","appReducer","combineReducers","base","action","rootReducer","persistConfig","storage","persistedReducer","persistReducer","RootReducer","createMuiTheme","light","secondary","warning","info","values","sm","md","lg","xl","props","ThemeProvider","Theme","store","createStore","persistor","persistStore","Store","ReactDOM","render","loading","App","URL","origin","addEventListener","fetch","headers","response","contentType","get","status","indexOf","ready","unregister","reload","checkValidServiceWorker"],"mappings":"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","file":"static/js/main.b3c7cdef.chunk.js","sourcesContent":["// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n)\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href)\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config)\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n )\n })\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config)\n }\n })\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then((registration) => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing\n if (installingWorker == null) {\n return\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n )\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration)\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.')\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration)\n }\n }\n }\n }\n }\n })\n .catch((error) => {\n console.error('Error during service worker registration:', error)\n })\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { 'Service-Worker': 'script' },\n })\n .then((response) => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type')\n if (\n response.status === 404 ||\n (contentType != null &&\n contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then((registration) => {\n registration.unregister().then(() => {\n window.location.reload()\n })\n })\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config)\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n )\n })\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready\n .then((registration) => {\n registration.unregister()\n })\n .catch((error) => {\n console.error(error.message)\n })\n }\n}\n","import AES from 'crypto-js'\n\nclass NoEncryptionKeyError extends Error {\n constructor() {\n super('No encryption key provided')\n this.name = 'NoEncryptionKeyError'\n }\n}\n\nclass NoEncryptedStringError extends Error {\n constructor() {\n super('No encrypted string provided')\n this.name = 'NoEncryptionKeyError'\n }\n}\n\nclass NoObjectToEncryptError extends Error {\n constructor() {\n super('No object to encrypt')\n this.name = 'NoObjectToEncryptError'\n }\n}\n\nclass TransferParseError extends Error {\n constructor() {\n super('Object failed to parse')\n this.name = 'TransferParseError'\n }\n}\n\nconst encryptObject = ({ obj, encryptionKey }) => {\n if (!encryptionKey) {\n throw new NoEncryptionKeyError()\n } else if (!obj) {\n throw new NoObjectToEncryptError()\n }\n return AES.AES.encrypt(JSON.stringify(obj), encryptionKey).toString()\n}\n\nconst decryptObject = ({ encryptedString, encryptionKey }) => {\n if (!encryptionKey) {\n throw new NoEncryptionKeyError()\n } else if (!encryptedString) {\n throw new NoEncryptedStringError()\n }\n const bytes = AES.AES.decrypt(encryptedString, encryptionKey)\n try {\n return JSON.parse(bytes.toString(AES.enc.Utf8))\n } catch (e) {\n throw new TransferParseError()\n }\n}\n\nexport {\n encryptObject,\n decryptObject,\n NoEncryptedStringError,\n NoEncryptionKeyError,\n NoObjectToEncryptError,\n TransferParseError,\n}\n","import React, { useState } from 'react'\nimport { useSelector, useDispatch } from 'react-redux'\nimport {\n Modal,\n Grid,\n Button,\n makeStyles,\n Typography,\n Input,\n TextField,\n} from '@material-ui/core'\nimport { encryptObject, decryptObject } from 'util/transfer/TransferUtil'\nimport { ReplaceRoot } from 'store/action/Root'\n\nconst TransferModalState = {\n DECIDE: 0,\n SAVE: 1,\n LOAD: 2,\n}\n\nconst useStyles = makeStyles((theme) => ({\n paper: {\n position: 'absolute',\n width: '20em',\n backgroundColor: theme.palette.background.paper,\n border: '2px solid #000',\n boxShadow: theme.shadows[5],\n padding: theme.spacing(2, 4, 3),\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n [theme.breakpoints.up('md')]: {\n width: '28em',\n },\n },\n buttonGridContainer: {\n textAlign: 'center',\n },\n}))\n\nconst SaveLoadQuestion = ({ handleLoad, handleSave, classes }) => {\n return (\n \n \n \n \n Create an export of your notes so you can import them on\n another device.\n \n \n \n \n \n \n \n \n \n \n )\n}\n\nconst TransferModal = ({ open, handleClose }) => {\n // Pull state to transfer\n const state = useSelector((state) => state)\n const dispatch = useDispatch()\n\n // Present 2 buttons (Load/Save)\n // Load Save Box or Load Box\n const classes = useStyles()\n const [saveOrLoadState, setSaveOrLoadState] = useState(\n TransferModalState.DECIDE\n )\n\n const buildContent = () => {\n if (saveOrLoadState === TransferModalState.DECIDE) {\n return (\n \n setSaveOrLoadState(TransferModalState.LOAD)\n }\n handleSave={() =>\n setSaveOrLoadState(TransferModalState.SAVE)\n }\n classes={classes}\n />\n )\n } else if (saveOrLoadState === TransferModalState.SAVE) {\n return \n } else if (saveOrLoadState === TransferModalState.LOAD) {\n return \n } else {\n setSaveOrLoadState(TransferModalState.DECIDE)\n }\n }\n\n return (\n {\n setSaveOrLoadState(TransferModalState.DECIDE)\n handleClose()\n }}\n >\n
{buildContent()}
\n \n )\n}\n\nconst TransferExportBox = ({ state }) => {\n // Ask for encryption key / password\n // Encrypt state via TransferUtil\n // Display encrypted state in a copiable box\n const [providedKey, setProvidedKey] = useState(undefined)\n const [exportedState, setExportedState] = useState(undefined)\n const [exportError, setExportError] = useState(undefined)\n\n const exportState = () => {\n try {\n const exported = encryptObject({\n obj: state,\n encryptionKey: providedKey,\n })\n setExportedState(exported)\n setExportError(undefined)\n } catch (e) {\n setExportedState(undefined)\n setExportError(e.message)\n }\n }\n\n return (\n \n \n Please provide a key\n setProvidedKey(e.target.value)}\n style={{ width: '100%' }}\n />\n \n \n \n \n {exportError && (\n \n {exportError}\n \n )}\n {exportedState && (\n <>\n \n \n Use this export with your key to import to another\n device!\n \n \n \n \n \n >\n )}\n \n )\n}\n\nconst TransferImportBox = ({ dispatch }) => {\n // Ask for encryption key / password\n const [providedKey, setProvidedKey] = useState(undefined)\n const [importValue, setImportValue] = useState(undefined)\n const [exportError, setExportError] = useState(undefined)\n const [success, setSuccess] = useState(undefined)\n // Decrypt state via TransferUtil\n // Replace existing state\n const importState = () => {\n try {\n const importState = decryptObject({\n encryptedString: importValue,\n encryptionKey: providedKey,\n })\n setExportError(undefined)\n // setApplicationState(importState)\n dispatch(ReplaceRoot(importState))\n setSuccess(true)\n } catch (e) {\n setSuccess(false)\n setExportError(e.message)\n }\n }\n\n return (\n \n \n Please provide your key\n setProvidedKey(e.target.value)}\n style={{ width: '100%' }}\n />\n \n \n Please provide the transfer data\n setImportValue(e.target.value)}\n style={{ width: '100%' }}\n />\n \n \n \n \n {exportError && (\n \n {exportError}\n \n )}\n {success && (\n \n Import sucessful!\n \n )}\n \n )\n}\n\nexport { TransferModal }\n","export const REPLACE_ROOT = 'REPLACE_ROOT'\n\nexport const ReplaceRoot = (newState) => ({\n type: REPLACE_ROOT,\n newState,\n})\n","import React from 'react'\nimport { Typography } from '@material-ui/core'\n\nexport const Releases = {\n 'v1.2.0': (\n \n With release 1.2.0 we're adding the ability to (manually)\n export/import your data. This can be done by clicking the icon in\n the menu next to the version number. In an effort to keep things as\n secure as possible you will have to provide a password to encrypt\n your data for the export, and to later provide the password again to\n import it. This is laying the groundwork for a planned later\n automated (and secure) automated cross-device sync process.\n \n ),\n 'v1.3.0': (\n \n With release 1.3.0 we've added a new statistic: a word cloud! Now you \n can see a visualization what words you use and how frequently you make \n use of them! Enjoy this fun feature, inspired by a suggestion email! \n As a reminder, if you have any suggestions, bugs, or general thoughts \n about One Nice Thing please feel free to send an email from the About \n or Statistics page!\n \n ),\n 'v1.3.1': (\n \n With release 1.3.1 we've made just a few changes to the UI to make\n One Nice Thing more usable on mobile devices, as well as adding a dark mode!\n \n )\n}\n","import React, { useState } from 'react'\nimport { Modal, Grid, Typography, makeStyles } from '@material-ui/core'\nimport { useSelector, useDispatch } from 'react-redux'\nimport { SaveReleaseNoteView } from 'store/action/ReleaseNotes'\nimport { Releases } from './Releases'\n\nconst useStyles = makeStyles((theme) => ({\n modalContent: {\n position: 'absolute',\n width: '20em',\n backgroundColor: theme.palette.background.paper,\n border: '2px solid #000',\n boxShadow: theme.shadows[5],\n padding: theme.spacing(2, 4, 3),\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n [theme.breakpoints.up('md')]: {\n width: '28em',\n },\n },\n}))\n\nconst ReleaseNotesModal = ({ openBypass }) => {\n const releaseNotesViewed = useSelector((state) => state.releaseNotesViewed) // Get this from Redux\n const dispatch = useDispatch()\n // Move release version into global config\n const versionNumber = process.env.REACT_APP_CURRENT_VERSION\n\n const [open, setOpen] = useState(releaseNotesViewed !== versionNumber)\n\n const handleClose = () => {\n dispatch(SaveReleaseNoteView(versionNumber))\n setOpen(false)\n }\n const classes = useStyles()\n return (\n \n
\r\n )\r\n}\r\n","export const SAVE_DARK_MODE = 'SAVE_DARK_MODE'\n\nexport const SaveDarkMode = (enabled) => ({\n type: SAVE_DARK_MODE,\n enabled,\n})\n","import { parse, differenceInDays, isToday, isYesterday } from 'date-fns'\r\n\r\nconst convertToDateList = (noteList) => {\r\n const referenceDate = new Date()\r\n return noteList.map((note) => parse(note.date, 'MM/dd/yyyy', referenceDate))\r\n}\r\n\r\n/**\r\n * Finds the highest number of consecutive days a note has been submitted\r\n * @param {*} noteList\r\n */\r\nexport const findMostConsecutiveDays = (noteList) => {\r\n const dates = convertToDateList(noteList)\r\n let maxNumConsecutive = 0\r\n let numConsecutive = 0\r\n for (let i = 0; i < dates.length; i++) {\r\n if (i + 1 >= dates.length) {\r\n break\r\n }\r\n const d1 = dates[i]\r\n const d2 = dates[i + 1]\r\n if (differenceInDays(d1, d2) === 1) {\r\n numConsecutive += 1\r\n maxNumConsecutive = Math.max(maxNumConsecutive, numConsecutive)\r\n } else {\r\n numConsecutive = 0\r\n }\r\n }\r\n return maxNumConsecutive\r\n}\r\n\r\n/**\r\n * Finds the current streak of consecutive days, counting the current day as 1\r\n * @param {*} noteList\r\n */\r\nexport const findCurrentStreak = (noteList) => {\r\n const dates = convertToDateList(noteList)\r\n\r\n let numConsecutive =\r\n dates.length > 0 && (isToday(dates[0]) || isYesterday(dates[0])) ? 1 : 0\r\n\r\n for (let i = 0; i < dates.length; i++) {\r\n if (i + 1 >= dates.length) {\r\n break\r\n }\r\n const d1 = dates[i]\r\n const d2 = dates[i + 1]\r\n if (differenceInDays(d1, d2) === 1) {\r\n numConsecutive += 1\r\n } else {\r\n break\r\n }\r\n }\r\n\r\n return numConsecutive\r\n}\r\n\r\n/**\r\n * Returns the average word count for your list of notes\r\n * @param {*} noteList\r\n */\r\nexport const findAverageWordCount = (noteList) => {\r\n if (!noteList || noteList.length === 0) {\r\n return 0\r\n }\r\n return (\r\n noteList\r\n .map((it) => it.text)\r\n .map((it) => it.trim().split(/\\s+/).length)\r\n .reduce((acc, it) => acc + it, 0) / noteList.length\r\n )\r\n}\r\n\r\nexport const findAverageWordCountRounded = (noteList) => \r\n Math.round(findAverageWordCount(noteList))\r\n\r\nexport const findLongestNote = (noteList) => {\r\n if (!noteList || noteList.length === 0) {\r\n return 0\r\n }\r\n\r\n return noteList\r\n .map((it) => it.text)\r\n .map((it) => it.trim().split(/\\s+/).length)\r\n .reduce((acc, it) => (acc > it ? acc : it), 0)\r\n}\r\n\r\nexport const findWordCounts = (noteList) => {\r\n if (!noteList || noteList.length === 0) {\r\n return []\r\n }\r\n\r\n const wordCounts = {}\r\n noteList\r\n .map(it => it.text)\r\n .map(it => it.toLowerCase())\r\n .forEach(it => {\r\n it.split(' ')\r\n .map(word => word.replace(/\\W/g, ''))\r\n .filter(word => word.length > 0)\r\n .reduce((acc, cur) => {\r\n const currentCount = acc[cur]\r\n if (currentCount === null || currentCount === undefined) {\r\n acc[cur] = 1\r\n } else {\r\n acc[cur] = currentCount + 1\r\n }\r\n return acc\r\n }, wordCounts)\r\n })\r\n\r\n console.log(wordCounts)\r\n \r\n return Object.keys(wordCounts)\r\n .map(key => [key, wordCounts[key]])\r\n \r\n}\r\n","import React, { useState } from 'react'\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport Typography from '@material-ui/core/Typography'\r\nimport TextField from '@material-ui/core/TextField'\r\nimport Button from '@material-ui/core/Button'\r\nimport Paper from '@material-ui/core/Paper'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport { SaveNoteList } from 'store/action/NoteList'\r\nimport { findCurrentStreak } from 'util/notelist/NoteListUtil'\r\nimport {FontAwesomeIcon} from \"@fortawesome/react-fontawesome\";\r\nimport {faChevronCircleUp, faChevronCircleDown} from \"@fortawesome/free-solid-svg-icons\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n intro: {\r\n padding: '1.5rem 1rem',\r\n margin: '0 auto',\r\n textAlign: 'center',\r\n },\r\n hide: {\r\n display: 'none',\r\n },\r\n inputPaper: {\r\n padding: '.5rem',\r\n margin: '2rem auto',\r\n textAlign: 'center',\r\n },\r\n input: {\r\n width: '85%',\r\n marginBottom: '1rem',\r\n '& .MuiFormLabel-root': {\r\n [theme.breakpoints.down('sm')]: {\r\n fontSize: '.75rem',\r\n },\r\n },\r\n },\r\n save: {\r\n marginBottom: '1rem',\r\n display: 'block',\r\n margin: '0 auto',\r\n },\r\n divider: {\r\n margin: '1rem 0',\r\n },\r\n notification: {\r\n transition: '300ms all ease',\r\n opacity: '0',\r\n willChange: 'opacity',\r\n },\r\n notificationShow: {\r\n opacity: '1',\r\n },\r\n dateHeader: {\r\n marginTop: '1.5rem',\r\n },\r\n}))\r\n\r\nconst dateTimeFormatter = new Intl.DateTimeFormat('en-US')\r\n\r\nconst saveNote = (date, text, noteList) => {\r\n const newList = noteList.filter((it) => it.date !== date)\r\n newList.unshift({\r\n date,\r\n text,\r\n })\r\n return SaveNoteList(newList)\r\n}\r\n\r\nconst Home = () => {\r\n const classes = useStyles()\r\n\r\n //Set up note, either as from the existing list, or as a new note entirely\r\n const noteList = useSelector((state) => state.noteList, [])\r\n let currentNote\r\n if (noteList.length === 0) {\r\n currentNote = { text: null, date: dateTimeFormatter.format(new Date()) }\r\n } else {\r\n const maybeNote = noteList.find(\r\n (it) => it.date === dateTimeFormatter.format(new Date())\r\n )\r\n currentNote = maybeNote || {\r\n text: null,\r\n date: dateTimeFormatter.format(new Date()),\r\n }\r\n }\r\n //We save the noteText value from component state when we save the note\r\n const [noteText, setNoteText] = useState(currentNote.text)\r\n //We need this for our onClick below\r\n const dispatch = useDispatch()\r\n\r\n //This chooses if are or aren't currently displaying a save message\r\n const [showSave, setShowSaved] = useState(false)\r\n\r\n const currentStreak = findCurrentStreak(noteList)\r\n\r\n //Display/Hide Welcome box\r\n const [showWelcome, setShowWelcome] = useState(false)\r\n\r\n return (\r\n
\r\n \r\n \r\n Welcome to One Nice Thing\r\n \r\n setShowWelcome(!showWelcome)}/>\r\n \r\n Here are the rules: Every day stop in and put one good thing\r\n that happened to you here. You can change it up until\r\n midnight, after which it's locked in the past, immutable.\r\n You can view your list of prior good things at any time, so\r\n if you ever need a pick-me-up or just want to revist\r\n positive moments they're always there for you. The more you\r\n do this, the more you'll find that you remember the\r\n positives instead of the negatives, and hopefully this will\r\n lead to a happier, more fulfilled you!\r\n \r\n \r\n\r\n {/* Things in the present are ever changing, and we want to be able to keep it up to date */}\r\n \r\n \r\n On {currentNote.date}. . .\r\n \r\n setNoteText(e.target.value)}\r\n />\r\n \r\n \r\n Great!!!\r\n \r\n \r\n Your current streak:{' '}\r\n {currentStreak === 1\r\n ? `${currentStreak} day`\r\n : `${currentStreak} days`}\r\n \r\n \r\n
\r\n )\r\n}\r\n\r\nexport default Home\r\n","export const SAVE_NOTE_LIST_ACTION = 'SAVE_NOTE'\n\nexport const SaveNoteList = (noteList) => ({\n type: SAVE_NOTE_LIST_ACTION,\n noteList,\n})\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport Card from '@material-ui/core/Card'\r\nimport CardContent from '@material-ui/core/CardContent'\r\nimport Typography from '@material-ui/core/Typography'\r\n\r\nconst useStyles = makeStyles({\r\n root: {\r\n width: '100%',\r\n minWidth: 275,\r\n },\r\n title: {\r\n fontSize: 14,\r\n },\r\n pos: {\r\n marginBottom: 12,\r\n },\r\n})\r\n\r\nconst Note = ({ text, date }) => {\r\n const classes = useStyles()\r\n return (\r\n \r\n \r\n \r\n On {date}. . .\r\n \r\n {/* Things in the past are immutable. Reflect, but move forward! */}\r\n \r\n {text}\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nNote.propTypes = {\r\n text: PropTypes.string,\r\n date: PropTypes.string,\r\n}\r\n\r\nexport default Note\r\n","import React from 'react'\r\nimport { Note } from 'component/note'\r\nimport List from '@material-ui/core/List'\r\nimport ListItem from '@material-ui/core/ListItem'\r\nimport Typography from '@material-ui/core/Typography'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\n\r\nconst useStyles = makeStyles({\r\n listItem: {\r\n marginBottom: '1rem',\r\n },\r\n})\r\n\r\nconst FilledList = (noteList, classes) => (\r\n
\r\n)\r\n\r\nconst EmptyList = () => (\r\n \r\n You haven't enshrined a good memory yet!\r\n \r\n)\r\n\r\nconst NoteListItem = (note, classes) => (\r\n \r\n \r\n \r\n)\r\n\r\nconst NoteList = ({ noteList }) => {\r\n const classes = useStyles()\r\n return noteList.length === 0 ? EmptyList() : FilledList(noteList, classes)\r\n}\r\n\r\nexport default NoteList\r\n","import React from 'react'\r\nimport { NoteList } from 'component/notelist'\r\nimport Typography from '@material-ui/core/Typography'\r\nimport Box from '@material-ui/core/Box'\r\nimport { useSelector } from 'react-redux'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\n\r\nconst useStyles = makeStyles({\r\n root: {\r\n padding: '.5rem',\r\n margin: '0 auto',\r\n textAlign: 'center',\r\n },\r\n})\r\n\r\nconst List = () => {\r\n const noteList = useSelector((state) => state.noteList)\r\n const classes = useStyles()\r\n return (\r\n \r\n \r\n Your nice things\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default List\r\n","import React from 'react'\r\nimport Paper from '@material-ui/core/Paper'\r\nimport Typography from '@material-ui/core/Typography'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\n\r\nconst useStyles = makeStyles({\r\n root: {\r\n padding: '1.5rem .5rem',\r\n margin: '0 auto 2rem 0',\r\n textAlign: 'center',\r\n },\r\n subheader: {\r\n marginTop: '2.5rem',\r\n },\r\n})\r\n\r\nconst About = () => {\r\n const classes = useStyles()\r\n return (\r\n \r\n \r\n About One Nice Thing\r\n \r\n \r\n One Nice Thing is a project by{' '}\r\n Devin McIntyre aimed at\r\n providing a simple and effective mental health tool to anyone\r\n who needs it. Inspired by doing this exercise with a friend,\r\n along with the rising stress in our modern world, he created\r\n this tool to hopefully provide a way for people to see their\r\n world in a better light. If you're feeling especially giving you\r\n can also{' '}\r\n buy him a coffee\r\n .\r\n \r\n \r\n On the topic of data collection\r\n \r\n \r\n One Nice Thing does not collect any information entered into the\r\n application. There is no back end server collecting data, no\r\n email or other personal information collection, and no ads. The\r\n data is all stored locally on your device.\r\n \r\n \r\n What can you do to help?\r\n \r\n \r\n One Nice Thing is an OSS project, and can be found on{' '}\r\n Github.\r\n Contributions are always welcome! If you have thoughts for\r\n things you'd like to see, you can also{' '}\r\n send a suggestion\r\n .\r\n \r\n \r\n )\r\n}\r\n\r\nexport default About\r\n","import React, { useEffect, useRef } from 'react'\r\nimport Typography from '@material-ui/core/Typography'\r\nimport Paper from '@material-ui/core/Paper'\r\nimport { useSelector } from 'react-redux'\r\nimport {\r\n findMostConsecutiveDays,\r\n findAverageWordCountRounded,\r\n findLongestNote,\r\n} from 'util/notelist'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport WordCloud from 'wordcloud'\r\nimport { findWordCounts } from 'util/notelist/NoteListUtil'\r\n\r\nconst useStyles = makeStyles({\r\n paper: {\r\n padding: '1.5rem .5rem',\r\n margin: '0 auto 2rem auto',\r\n textAlign: 'center',\r\n maxWidth: '50rem',\r\n },\r\n header: {\r\n textAlign: 'center',\r\n },\r\n})\r\n\r\nconst NotelistWordMap = ({id, noteList}) => { \r\n const canvasRef = useRef(null)\r\n useEffect(() => {\r\n WordCloud(document.getElementById(id), {\r\n list: findWordCounts(noteList),\r\n rotateRatio: 0,\r\n weightFactor: 10,\r\n color: () => '#1261A0'\r\n })\r\n }, [id, noteList]);\r\n\r\n return (<>\r\n \r\n Your Word Cloud\r\n \r\n \r\n >)\r\n}\r\n\r\nexport const Statistics = () => {\r\n const classes = useStyles()\r\n const noteList = useSelector((state) => state.noteList)\r\n const bestStreak = findMostConsecutiveDays(noteList)\r\n const averageWordCount = findAverageWordCountRounded(noteList)\r\n const longestNote = findLongestNote(noteList)\r\n return (\r\n
\r\n \r\n \r\n Statistics\r\n \r\n \r\n Here's a bit of fun information about your nice things!\r\n \r\n \r\n Total number of nice things: {noteList.length}\r\n \r\n \r\n Most consecutive days:{' '}\r\n {`${bestStreak} ${bestStreak === 1 ? 'day' : 'days'}`}\r\n \r\n \r\n Average word count: {' '}\r\n {`${averageWordCount} ${averageWordCount === 1 ? 'word' : 'words'}`}\r\n \r\n \r\n Longest Note:{' '}\r\n {`${longestNote} ${longestNote === 1 ? 'word' : 'words'}`}\r\n \r\n \r\n \r\n \r\n Have an idea for other statistics? Shoot over an email with your suggestions!\r\n \r\n \r\n
\r\n )\r\n}\r\n","import React from 'react'\r\nimport { Paper, Typography, Box } from '@material-ui/core'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\n\r\nconst useStyles = makeStyles({\r\n root: {\r\n padding: '.5rem',\r\n margin: '0 auto',\r\n textAlign: 'center',\r\n },\r\n paper: {\r\n padding: '1.5rem .5rem',\r\n maxWidth: '50rem',\r\n margin: '0 auto 2rem auto',\r\n },\r\n})\r\n\r\nexport const Mindfulness = () => {\r\n const classes = useStyles()\r\n return (\r\n \r\n \r\n \r\n Mindfulness Exercises\r\n \r\n \r\n Taking a few moments to focus on yourself in an important\r\n part of managing your stress. Here are a few mindfulness\r\n exercises to help you do just that!\r\n \r\n \r\n \r\n )\r\n}\r\n","import React from 'react'\nimport { Route, Switch } from 'react-router-dom'\nimport { AppShell } from 'appshell'\nimport { Home } from 'page/home'\nimport { List } from 'page/list'\nimport { About } from 'page/about'\nimport { Statistics } from 'page/statistics'\nimport { Mindfulness } from 'page/mindfulness'\n\nexport default () => (\n \n \n \n \n \n \n \n \n \n)\n","import { combineReducers } from 'redux'\nimport NoteListReducer from 'store/reducer/NoteList'\nimport { ReleaseNotesViewedReducer } from 'store/reducer/ReleaseNotes'\nimport { DarkModeReducer } from 'store/reducer/DarkMode'\nimport { REPLACE_ROOT } from 'store/action/Root'\n\nconst appReducer = combineReducers({\n base: () => ({}),\n noteList: NoteListReducer,\n releaseNotesViewed: ReleaseNotesViewedReducer,\n darkMode: DarkModeReducer\n})\n\nconst rootReducer = (state, action) => {\n if (action.type === REPLACE_ROOT) {\n state = action.newState\n }\n\n return appReducer(state, action)\n}\n\nexport default rootReducer\n","import { SAVE_NOTE_LIST_ACTION } from 'store/action/NoteList'\n\nexport default (state = [], action) => {\n switch (action.type) {\n case SAVE_NOTE_LIST_ACTION:\n return action.noteList\n default:\n return state\n }\n}\n","import { SAVE_RELEASE_NOTE_VIEW } from 'store/action/ReleaseNotes'\n\nexport const ReleaseNotesViewedReducer = (state = '', action) => {\n switch (action.type) {\n case SAVE_RELEASE_NOTE_VIEW:\n return action.version\n default:\n return state\n }\n}\n","import { SAVE_DARK_MODE } from 'store/action/DarkMode'\n\nexport const DarkModeReducer = (state = true, action) => {\n switch (action.type) {\n case SAVE_DARK_MODE:\n return action.enabled\n default:\n return state\n }\n}","import { createStore } from 'redux'\nimport RootReducer from 'store/Reducers'\nimport { persistStore, persistReducer } from 'redux-persist'\nimport storage from 'redux-persist/lib/storage' // defaults to localStorage for web\n\nconst persistConfig = {\n key: 'root',\n storage,\n}\n\nconst persistedReducer = persistReducer(persistConfig, RootReducer)\n\nexport default () => {\n let store = createStore(persistedReducer)\n let persistor = persistStore(store)\n return { store, persistor }\n}\n","import { createMuiTheme } from '@material-ui/core/styles'\n\nexport default (darkMode) => createMuiTheme({\n palette: {\n type: darkMode ? 'dark' : 'light',\n primary: { main: '#1261A0', light: '#3895D3', dark: '#072F5F' },\n secondary: { main: '#F6F8F9', light: '#F6F8F9', dark: '#424242' },\n success: { main: '#95CE47' },\n error: { main: '#9F2711' },\n warning: { main: '#F5BE69' },\n info: { main: '#3D678D' },\n },\n breakpoints: {\n values: {\n xs: 0,\n sm: 770,\n md: 950,\n lg: 1300,\n xl: 1600\n }\n }\n})\n","import Theme from './MuiTheme'\r\nimport React from 'react'\r\nimport {ThemeProvider} from \"@material-ui/core/styles\";\r\nimport {useSelector} from \"react-redux\";\r\n\r\nexport default (props) => {\r\n const darkMode = useSelector(state => state.darkMode)\r\n return \r\n}\r\n","import React from 'react'\nimport ReactDOM from 'react-dom'\nimport './index.css'\nimport * as serviceWorker from './serviceWorker'\nimport { BrowserRouter } from 'react-router-dom'\nimport { Provider } from 'react-redux'\nimport { PersistGate } from 'redux-persist/integration/react'\nimport App from 'App'\nimport Store from 'store/Store'\nimport CustomThemeProvider from 'theme'\n\nconst { store, persistor } = Store()\n\nReactDOM.render(\n \n \n \n \n \n \n \n \n ,\n document.getElementById('root')\n)\n\nserviceWorker.register()\n"],"sourceRoot":""}