{"version":3,"sources":["global/theme.js","features/UI/darkMode/darkModeSlice.js","views/splash/index.js","firebase/firebaseConfig.js","firebase/firebasePalettes.js","features/DATA/currentUserSlice.js","features/DATA/savedPalettesSlice.js","features/UI/modals/userModal/userModalSlice.js","firebase/firebaseAuth.js","features/UI/swipe/swipeSlice.js","features/UI/composer/editorSliderSlice.js","features/UI/menu/menuSlider/menuSliderSlice.js","assets/static/init-color.js","features/UI/composer/color/editor/slider/channelEditorSlice.js","features/DATA/apiSlice.js","features/UI/top-bar/topBarSlice.js","features/UI/composer/color/index.js","utility-functions/index.js","features/UI/composer/color/editor/index.js","features/UI/composer/color/editor/slider/index.js","features/UI/composer/index.js","features/UI/modals/palettesModal/palettesSlice.js","features/UI/modals/saveModal/saveSlice.js","components/custom-button/index.js","assets/icons/help.icon.js","assets/icons/open.icon.js","assets/icons/save.icon.js","assets/icons/theme.icon.js","assets/icons/user.icon.js","features/UI/menu/index.js","components/SVG/dots.js","components/formInput/index.js","features/UI/modals/palettesModal/palette/index.js","features/UI/modals/palettesModal/index.js","features/UI/modals/saveModal/index.js","firebase/firebaseUser.js","features/UI/modals/userModal/accountSettings/changeEmail.js","features/UI/modals/userModal/accountSettings/changePass.js","features/UI/modals/userModal/accountSettings/changeUser.js","features/UI/modals/userModal/accountSettings/accountSettings.js","assets/icons/google.icon.js","features/UI/modals/userModal/signIn/signIn.js","features/UI/modals/userModal/signUp/signUp.js","features/UI/modals/userModal/index.js","features/UI/menu/menuSlider/index.js","assets/icons/search.icon.js","components/SVG/spinner.js","features/UI/top-bar/searchField/index.js","features/UI/top-bar/index.js","views/tarot/index.js","App.js","features/UI/composer/composerReducer.js","features/UI/modals/modalsReducer.js","features/UI/UIReducer.js","features/DATA/DATAReducer.js","redux/store.js","serviceWorker.js","themeWrapper.js","index.js"],"names":["lightTheme","darkTheme","darkModeSlice","createSlice","name","initialState","toggled","theme","reducers","setDarkMode","state","darkModeSelector","ui","darkMode","actions","Splash","className","to","require","config","path","firebase","initializeApp","apiKey","process","authDomain","projectId","storageBucket","messagingSenderId","appId","measurementId","auth","firestore","savePalette","id","palette","a","nameCheck","collection","where","get","snapShot","size","add","alert","deletePalette","paletteName","userId","docRef","docs","docToDelete","doc","delete","renamePalette","newPaletteName","docToUpdate","set","merge","updatePalettes","newSavedPalettes","palettes","forEach","push","data","console","error","currentUser","setCurrentUser","action","payload","currentUserSelector","savedPalettes","setSavedPalettes","savedPalettesSelector","userModalSlice","userToggled","user","thirdParty","userModalToggle","userName","setThirdParty","userModalSelector","modals","userModal","userNameSelector","thirdPartySelector","googleProvider","GoogleAuthProvider","setCustomParameters","prompt","signInWithGoogle","signInWithPopup","signInEmail","email","password","signInWithEmailAndPassword","createUserProfileDocument","userAuth","additionalData","userRef","uid","exists","displayName","createdAt","Date","userReAuth","currentPassword","credential","EmailAuthProvider","reauthenticateWithCredential","resetPassEmail","sendPasswordResetEmail","swipeSlice","activeResult","currentPage","resultLength","setActiveResult","decrementActive","incrementActive","setCurrentPage","setResultLength","activeResultSelector","swipe","currentPageSelector","resultLengthSelector","editorSliderSlice","editorOpen","slideEditor","editorSelector","composer","editor","menuSliderSlice","menuToggled","menuToggle","menuSelector","initColor","red","green","blue","channelEditorSlice","colorData","setColor","colorDataSelector","channelEditor","apiSlice","isLoading","noResults","query","queryPages","queryResult","setIsLoading","setNoResults","setQuery","setQueryPages","setQueryResult","isLoadingSelector","api","querySelector","queryPagesSelector","queryResultSelector","topBarSlice","searchFieldToggled","setSearchField","searchSelector","topBar","Color","children","swipeLeft","swipeRight","dispatch","useDispatch","useSelector","searchToggled","foreColor","color","ColorLib","rgb","parseInt","isLight","luminosityTest","bgColor","backgroundColor","hex","colors","channelHex","Number","toString","length","toUpperCase","makeHex","handlers","useSwipeable","onSwipedRight","onSwipedLeft","onClick","toggleEditor","style","Editor","e","stopPropagation","Slider","channelName","channelValue","newColorData","JSON","parse","stringify","type","min","max","onChange","target","value","colorid","Composer","composerInitialClass","editorInitialClass","colorInitialClass","useEffect","fetchNewPage","useCallback","currentResult","encodedQuery","encodeURIComponent","replace","nextPage","fetch","mode","result","json","augmentedQueryResult","concat","keyNav","key","window","addEventListener","removeEventListener","onKeyDown","map","savedPalettesSlice","palettesToggled","palettesToggle","palettesToggledSelector","palettesModal","saveModalSlice","saveToggled","toggleSave","saveToggledSelector","saveModal","CustomButton","props","HelpIcon","fillColor","xmlns","viewBox","fill","width","height","d","OpenIcon","SaveIcon","ThemeIcon","fillRule","UserIcon","Menu","menuInitialClass","disabled","Dots","FormInput","React","forwardRef","ref","placeholder","label","autoComplete","Fragment","fontSize","htmlFor","border","defaultProps","values","Palette","useState","showButtons","setShowButtons","showRename","setShowRename","showDelete","setShowDelete","newName","setNewName","renameResponse","setRenameResponse","deleteResponse","setDeleteResponse","buttonClass","deleteClass","renameClass","handleRename","renameStatus","then","handleDelete","deleteStatus","timeout","setTimeout","clearTimeout","loadPalette","PalettesModal","search","setSearch","modalInitialClass","filteredPalettes","filter","toLowerCase","includes","i","SaveModal","setPaletteName","saveResponse","setSaveResponse","handleSubmit","preventDefault","save","updateUser","newEmail","newPassword","updateProfile","status","message","reAuth","updateEmail","updatePassword","ChangeEmail","handleChange","userInfo","clicked","setClicked","btnDisabled","setBtnDisabled","currentEmail","EmailValidator","undefined","ChangePass","confirmPassword","btnClass","passMatch","ChangeUser","AccountSettings","firebaseMessage","setFirebaseMessage","passwordError","setUserInfo","acctInitState","home","acctPage","setAcctPage","firebaseReturn","GoogleIcon","transform","SignIn","errorMessage","setErrorMessage","reset","setReset","code","SignUp","createUserWithEmailAndPassword","UserModal","isThirdParty","account","setAccount","signUp","setSignUp","signOut","MenuSlider","palettesOpen","userOpen","toggle","Search","Spinner","data-name","SearchField","fetchQuery","current","blur","TopBar","searchRef","useRef","focus","Tarot","unsubscribe","onAuthStateChanged","onSnapshot","providerData","providerId","useFirebaseAuth","vh","innerHeight","document","documentElement","setProperty","App","basename","exact","component","combineReducers","colorSliderReducer","middleware","store","configureStore","reducer","UIReducer","DATAReducer","Boolean","location","hostname","match","ThemeWrapper","updateTheme","newTheme","cssKeys","Object","keys","cssValues","ReactDOM","render","StrictMode","getElementById","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.b53566cb.chunk.js","sourcesContent":["// Objects for declaring CSS Theme Variables\n\nexport const lightTheme = {\n '--bg-color-main': '#FAFAFA',\n '--bg-color-form': '#FFF',\n '--text-color-main': '#212121',\n '--text-color-form': '#212121',\n '--button-text-color': '#212121',\n '--button-disabled-text-color': '#999',\n '--button-border-color': '#616161',\n '--button-disabled-border-color': '#999',\n '--button-hover-color': '#EAEAEA',\n '--form-bg-color': '#FFF',\n '--form-border-color': '#DADADA',\n '--form-text-color': '#212121',\n '--form-focus-border-color': '#212121',\n '--help-bg-color': 'rgba(250, 250, 250, .7)',\n '--palette-border': '#757575',\n '--search-field-bg': '#fff',\n '--search-field-border': '#ddd'\n}\n\nexport const darkTheme = {\n '--bg-color-main': '#212121',\n '--bg-color-form': '#000',\n '--text-color-main': '#FAFAFA',\n '--text-color-form': '#FFF',\n '--button-text-color': '#FAFAFA',\n '--button-disabled-text-color': '#777',\n '--button-border-color': '#9E9E9E',\n '--button-disabled-border-color': '#666',\n '--button-hover-color': '#121212',\n '--form-bg-color': '#404040',\n '--form-border-color': '#404040',\n '--form-text-color': '#FAFAFA',\n '--form-focus-border-color': '#FAFAFA',\n '--help-bg-color': 'rgba(33, 33, 33, .7)',\n '--palette-border': '#8A8A8A',\n '--search-field-bg': '#000',\n '--search-field-border': '#333'\n}","import { createSlice } from '@reduxjs/toolkit'\nimport { lightTheme } from '../../../global/theme'\n\nexport const darkModeSlice = createSlice({\n name: 'setDarkMode',\n initialState: { \n toggled: false,\n theme: lightTheme \n },\n reducers: {\n setDarkMode: (state) => {\n state.toggled = !state.toggled\n },\n // setTheme: (state, action) => {\n // state.theme = action.payload\n // }\n },\n})\n\nexport const darkModeSelector = state => state.ui.darkMode.toggled\nexport const { setDarkMode } = darkModeSlice.actions\nexport default darkModeSlice.reducer","import React from 'react'\nimport { Link } from 'react-router-dom'\n\nimport './splash.scss'\n\nconst Splash = () => {\n return (\n
\n

Welcome to Tarot

\n

the lexical color palette generator

\n

Enter a search word or short phrase and hit enter to generate an infinite number of palettes.

\n

Swipe left to right or use the arrow keys to browse through the results.

\n

Tap or click an individual color to adjust its RGB values.

\n

Create an account to save palettes and access them later.

\n {/*

-

*/}\n

Click here to get started!

\n
\n )\n}\n\nexport default Splash","import firebase from 'firebase/app'\nimport 'firebase/firestore'\nimport 'firebase/auth'\n\nrequire('dotenv').config({\n path: '../../.env.local'\n})\n\nconst config = {\n apiKey: process.env.REACT_APP_API_KEY,\n authDomain: process.env.REACT_APP_AUTH_DOMAIN,\n projectId: process.env.REACT_APP_PROJECT_ID,\n storageBucket: process.env.REACT_APP_STORAGE_BUCKET,\n messagingSenderId: process.env.REACT_APP_MESSAGING_SENDER_ID,\n appId: process.env.REACT_APP_APP_ID,\n measurementId: process.env.REACT_APP_MEASUREMENT_ID\n}\n\nfirebase.initializeApp(config)\nexport const auth = firebase.auth()\nexport const firestore = firebase.firestore()\n\nexport default firebase","// import { useDispatch } from \"react-redux\";\nimport { firestore } from \"./firebaseConfig\";\n\n// Save Palette\nexport const savePalette = async (id, palette, name) => {\n const nameCheck = firestore.collection(`users/${id}/palettes`).where('name', '==', name)\n const snapShot = await nameCheck.get()\n if (snapShot.size === 1) {\n return 'There is already a palette by that name :('\n } else if (!snapShot.size) {\n try {\n await firestore.collection(`users/${id}/palettes`).add({\n name: name,\n palette: palette\n })\n return 'Success!'\n } catch (error) {\n alert('Error saving palette, please try again later.', error)\n return error\n }\n }\n}\n\n// Delete Palette\nexport const deletePalette = async (paletteName, userId) => {\n const docRef = firestore.collection(`users/${userId}/palettes/`).where('name', '==', paletteName)\n const snapShot = await docRef.get()\n const id = snapShot.docs[0].id\n const docToDelete = firestore.doc(`users/${userId}/palettes/${id}`)\n try {\n await docToDelete.delete()\n return 'Success!'\n } catch (error) {\n return error\n }\n}\n\n// Rename Palette\nexport const renamePalette = async (paletteName, userId, newPaletteName) => {\n const docRef = firestore.collection(`users/${userId}/palettes/`).where('name', '==', paletteName)\n const snapShot = await docRef.get()\n const id = snapShot.docs[0].id\n const docToUpdate = firestore.doc(`users/${userId}/palettes/${id}`)\n\n try {\n await docToUpdate.set({\n name: newPaletteName\n }, { merge: true })\n return 'Success!'\n } catch (error) {\n return error\n }\n}\n\n// Update Palette State Object from FireStore collection\n// Called when: User login/out, Save, Delete, Rename\nexport const updatePalettes = async (id) => {\n let newSavedPalettes = []\n if (id) {\n try {\n const palettes = firestore.collection(`users/${id}/palettes/`)\n const snapShot = await palettes.get()\n snapShot.docs.forEach((doc) => {\n newSavedPalettes.push(doc.data())\n })\n } catch (error) {\n console.error(error)\n return error\n }\n } else {\n return null\n }\n return newSavedPalettes\n}\n","import { createSlice } from \"@reduxjs/toolkit\";\n\nexport const currentUser = createSlice({\n name: 'currentUser',\n initialState: null,\n reducers: {\n setCurrentUser: (state, action) => {\n return state = action.payload\n }\n }\n})\n\nexport const currentUserSelector = state => state.data.currentUser\nexport const { setCurrentUser } = currentUser.actions\nexport default currentUser.reducer\n\n","import { createSlice } from \"@reduxjs/toolkit\";\n\nexport const savedPalettes = createSlice({\n name: 'savedPalettes',\n initialState: null,\n reducers: {\n setSavedPalettes: (state, action) => {\n return state = action.payload\n }\n }\n})\n\nexport const savedPalettesSelector = state => state.data.savedPalettes\nexport const { setSavedPalettes } = savedPalettes.actions\nexport default savedPalettes.reducer\n\n","import { createSlice } from '@reduxjs/toolkit'\n\nexport const userModalSlice = createSlice({\n name: 'userModalToggle',\n initialState: {\n userToggled: null,\n user: null,\n thirdParty: false\n },\n reducers: {\n userModalToggle: (state) => {\n state.userToggled = !state.userToggled\n },\n // userObject\n userName: (state, action) => {\n state.user = action.payload\n },\n // thirdParty\n setThirdParty: (state, action) => {\n state.thirdParty = action.payload\n }\n },\n})\n\nexport const userModalSelector = state => state.ui.modals.userModal.userToggled\nexport const userNameSelector = state => state.ui.modals.userModal.user\nexport const thirdPartySelector = state => state.ui.modals.userModal.thirdParty\n\nexport const { userModalToggle, userName, setThirdParty } = userModalSlice.actions\nexport default userModalSlice.reducer","import { useEffect } from 'react'\nimport { useDispatch, useSelector } from 'react-redux';\nimport firebase, { auth, firestore } from \"./firebaseConfig\";\nimport { updatePalettes } from './firebasePalettes';\n\nimport { currentUserSelector, setCurrentUser } from '../features/DATA/currentUserSlice';\nimport { setSavedPalettes } from '../features/DATA/savedPalettesSlice';\nimport { setThirdParty } from '../features/UI/modals/userModal/userModalSlice';\n\n// Google Sign In \nconst googleProvider = new firebase.auth.GoogleAuthProvider()\ngoogleProvider.setCustomParameters({ prompt: 'select_account' })\nexport const signInWithGoogle = () => auth.signInWithPopup(googleProvider)\n\n\n// Email/Password Sign In\nexport const signInEmail = async (email, password) => {\n try {\n await auth.signInWithEmailAndPassword(email, password)\n } catch (error) {\n return error\n }\n}\n\n\n// Add User Doc to DB on Auth\nexport const createUserProfileDocument = async (userAuth, additionalData) => {\n if (!userAuth) return\n const userRef = firestore.doc(`users/${userAuth.uid}`)\n const snapShot = await userRef.get()\n if (!snapShot.exists) {\n const { displayName, email } = userAuth\n const createdAt = new Date()\n try {\n await userRef.set({\n displayName,\n email,\n createdAt,\n ...additionalData\n })\n } catch (error) {\n return error\n }\n }\n return userRef\n}\n\n\n// Re-Authenticate User\nexport const userReAuth = async (currentPassword) => {\n const user = auth.currentUser\n const credential = firebase.auth.EmailAuthProvider.credential(\n user.email,\n currentPassword\n )\n try {\n await user.reauthenticateWithCredential(credential)\n } catch (error) {\n return error\n }\n}\n\n\n// Send Password Reset Email\nexport const resetPassEmail = async (email) => {\n await auth.sendPasswordResetEmail(email)\n}\n\n\n// * // Hook for onAuthStateChanged. Currently calling in Tarot but can probably move \n// * // back to userModal. Dependent on number of rerenders and FB queries.\n\nexport const useFirebaseAuth = (auth) => {\n const dispatch = useDispatch()\n const currentUser = useSelector(currentUserSelector)\n\n useEffect(() => {\n const unsubscribe = auth.onAuthStateChanged(async user => {\n if (user) {\n const userRef = await createUserProfileDocument(user)\n userRef.onSnapshot(snapShot => {\n const id = snapShot.id\n const { displayName, email } = snapShot.data()\n dispatch(setCurrentUser({\n id: id,\n displayName: displayName,\n email: email\n }))\n // Retrieving Saved Palettes and adding to store\n updatePalettes(id).then(palettes => dispatch(setSavedPalettes(palettes)))\n })\n // sets state for google/github login to hide account settings menu\n if (user.providerData[0].providerId === 'password') {\n dispatch(setThirdParty(false))\n } else {\n dispatch(setThirdParty(user.providerData[0].providerId))\n }\n } else {\n dispatch(setCurrentUser(null))\n }\n })\n return () => {\n unsubscribe()\n }\n }, [auth, dispatch])\n return currentUser\n}","import { createSlice } from '@reduxjs/toolkit'\n\nexport const swipeSlice = createSlice({\n name: 'swipeSlice',\n initialState: {\n activeResult: 0,\n currentPage: 1,\n resultLength: null\n },\n reducers: {\n setActiveResult: (state, action) => {\n state.activeResult = action.payload\n },\n decrementActive: (state) => {\n state.activeResult -= 1\n },\n incrementActive: (state) => {\n state.activeResult += 1\n },\n setCurrentPage: (state, action) => {\n state.currentPage = action.payload\n },\n setResultLength: (state, action) => {\n state.resultLength = action.payload\n }\n },\n})\n\nexport const activeResultSelector = state => state.ui.swipe.activeResult\nexport const currentPageSelector = state => state.ui.swipe.currentPage\nexport const resultLengthSelector = state => state.ui.swipe.resultLength\n\nexport const { decrementActive, incrementActive, setActiveResult, setCurrentPage, setResultLength } = swipeSlice.actions\nexport default swipeSlice.reducer","import { createSlice } from '@reduxjs/toolkit'\n\nexport const editorSliderSlice = createSlice({\n name: 'slideEditor',\n initialState: { editorOpen: null },\n reducers: {\n slideEditor: (state, action) => {\n state.editorOpen = action.payload\n }\n },\n})\n\nexport const editorSelector = (state) => state.ui.composer.editor.editorOpen\nexport const { slideEditor } = editorSliderSlice.actions\nexport default editorSliderSlice.reducer","import { createSlice } from \"@reduxjs/toolkit\";\n\nexport const menuSliderSlice = createSlice({\n name: 'menuToggle',\n initialState: { menuToggled: null },\n reducers: {\n menuToggle: (state) => {\n state.menuToggled = !state.menuToggled\n }\n }\n})\n\nexport const menuSelector = state => state.ui.menuToggle.menuToggled\nexport const { menuToggle } = menuSliderSlice.actions\nexport default menuSliderSlice.reducer","const initColor = [\n {\n id: 0, \n red: 235,\n green: 241,\n blue: 205\n }, \n {\n id: 1,\n red: 50,\n green: 133,\n blue: 123\n }, \n {\n id: 2,\n red: 93,\n green: 180,\n blue: 164\n }, \n {\n id: 3,\n red: 220,\n green: 202,\n blue: 128\n }, \n {\n id: 4,\n red: 220,\n green: 154,\n blue: 70\n }\n]\n\nexport default initColor;","import { createSlice } from \"@reduxjs/toolkit\";\nimport initColor from '../../../../../../assets/static/init-color'\n\nexport const channelEditorSlice = createSlice({\n name: 'setColor',\n initialState: { colorData: initColor},\n reducers: {\n setColor: (state, action) => {\n state.colorData = action.payload\n }\n },\n})\n\nexport const colorDataSelector = state => state.ui.composer.channelEditor.colorData\nexport const { setColor } = channelEditorSlice.actions\nexport default channelEditorSlice.reducer","import { createSlice } from \"@reduxjs/toolkit\";\n\nexport const apiSlice = createSlice({\n name: 'apiSlice',\n initialState: {\n isLoading: false,\n noResults: false,\n query: null,\n queryPages: null,\n queryResult: []\n },\n reducers: {\n setIsLoading: (state, action) => {\n state.isLoading = action.payload\n },\n setNoResults: (state, action) => {\n state.noResults = action.payload\n },\n setQuery: (state, action) => {\n state.query = action.payload\n },\n setQueryPages: (state, action) => {\n state.queryPages = action.payload\n },\n setQueryResult: (state, action) => {\n state.queryResult = action.payload\n },\n }\n})\n\n// export const activeColorSelector = state => state.data.activeColor\nexport const currentPageSelector = state => state.data.api.currentPage\nexport const isLoadingSelector = state => state.data.api.isLoading\nexport const querySelector = state => state.data.api.query\nexport const queryPagesSelector = state => state.data.api.queryPages\nexport const queryResultSelector = state => state.data.api.queryResult\n\nexport const {\n setIsLoading,\n setNoResults,\n setQuery,\n setQueryPages,\n setQueryResult } = apiSlice.actions\n\nexport default apiSlice.reducer\n\n","import { createSlice } from '@reduxjs/toolkit'\n\nexport const topBarSlice = createSlice({\n name: 'topBarSlice',\n initialState: { searchFieldToggled: null },\n reducers: {\n setSearchField: (state) => {\n state.searchFieldToggled = !state.searchFieldToggled\n }\n },\n})\n\nexport const searchSelector = state => state.ui.topBar.searchFieldToggled\nexport const { setSearchField } = topBarSlice.actions\nexport default topBarSlice.reducer","import React from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { useSwipeable } from 'react-swipeable'\n\nimport { colorDataSelector } from './editor/slider/channelEditorSlice'\nimport { editorSelector, slideEditor } from '../editorSliderSlice'\nimport { menuSelector, menuToggle } from '../../menu/menuSlider/menuSliderSlice'\nimport { searchSelector, setSearchField } from '../../top-bar/topBarSlice'\n\nimport { luminosityTest, makeHex } from '../../../../utility-functions'\n\nimport './color.scss'\nimport './color-animate.css'\n\nconst Color = ({ className, children, id, swipeLeft, swipeRight }) => {\n const dispatch = useDispatch()\n const colorData = useSelector(colorDataSelector)\n const editorOpen = useSelector(editorSelector)\n const menuToggled = useSelector(menuSelector)\n const searchToggled = useSelector(searchSelector)\n const { red, green, blue } = colorData[id]\n const foreColor = luminosityTest(colorData[id])\n const bgColor = { backgroundColor: `rgb(${red}, ${green}, ${blue})` }\n const hex = makeHex([red, green, blue])\n\n const handlers = useSwipeable({\n onSwipedRight: () => swipeRight(),\n onSwipedLeft: () => swipeLeft()\n })\n\n const toggleEditor = (id) => {\n if (editorOpen !== null && editorOpen === id) {\n dispatch(slideEditor(false))\n } else {\n dispatch(slideEditor(id))\n if (menuToggled) dispatch(menuToggle(false))\n if (searchToggled) dispatch(setSearchField())\n }\n }\n\n return (\n toggleEditor(id)}\n className={className} style={bgColor}\n >\n {\n editorOpen === id ?\n
\n {hex}\n
\n
\n :\n
\n }\n {children}\n
\n )\n}\n\nexport default Color","import ColorLib from 'color'\n\n\n// * Detects the luminosity of the passed color and returns the correct foreground color. Takes an array ['r', 'g', 'b']\nexport const luminosityTest = color => {\n const { red, green, blue} = color\n const formatColor = ColorLib.rgb(parseInt(red), parseInt(green), parseInt(blue))\n return formatColor.isLight() ? 'rgba(0,0,0,.5)' : 'rgba(255,255,255,.5)'\n}\n\n\n// * Converts RGB values to Hexadecimal. Takes an array ['r', 'g', 'b']\nexport const makeHex = colors => {\n let hex = '#'\n colors.forEach(color => {\n let channelHex = Number.parseInt(color).toString(16)\n if (channelHex.length === 1) channelHex = ('0' + channelHex)\n hex = (hex + channelHex).toUpperCase()\n });\n return hex\n}","import React from 'react'\n\nimport { useSelector } from 'react-redux'\n\nimport { colorDataSelector } from './slider/channelEditorSlice'\n\nimport './editor.scss'\nimport './editor-animate.css'\n\nconst Editor = ({ children, className, id }) => {\n const colorData = useSelector(colorDataSelector)\n const { red, green, blue } = colorData[id]\n const bgColor = { backgroundColor: `rgb(${red}, ${green}, ${blue})` }\n return (\n
e.stopPropagation()}\n className={className} style={bgColor}>\n {children}\n
\n )\n}\n\nexport default Editor","import React from 'react'\nimport ColorLib from 'color'\nimport { useDispatch } from 'react-redux'\nimport { useSelector } from 'react-redux'\n\nimport { colorDataSelector, setColor } from './channelEditorSlice'\n\nimport './slider.scss'\n\n\nconst Slider = ({ id, channelName, color }) => {\n const dispatch = useDispatch()\n const colorData = useSelector(colorDataSelector)\n const channelValue = color[channelName]\n const newColorData = JSON.parse(JSON.stringify(colorData))\n const { red, green, blue } = color\n const colorForProc = ColorLib.rgb(parseInt(red), parseInt(green), parseInt(blue))\n const foreColor = colorForProc.isLight() ? 'rgba(0,0,0,.5)' : 'rgba(255,255,255,.5)'\n\n const onSlider = (e) => {\n newColorData[id][channelName] = parseInt(e.target.value)\n dispatch(setColor(newColorData))\n }\n\n return (\n
\n

{`${channelName[0]}: ${channelValue}`}

\n \n
\n )\n}\n\nexport default Slider","import React, { useEffect, useCallback } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\n\nimport {\n activeResultSelector,\n currentPageSelector,\n setCurrentPage,\n resultLengthSelector,\n setResultLength,\n setActiveResult,\n decrementActive,\n incrementActive\n} from \"../../../features/UI/swipe/swipeSlice\";\nimport { editorSelector } from \"./editorSliderSlice\";\nimport { menuSelector } from \"../menu/menuSlider/menuSliderSlice\";\nimport {\n setColor,\n colorDataSelector\n} from \"./color/editor/slider/channelEditorSlice\";\nimport {\n queryPagesSelector,\n queryResultSelector,\n setQueryResult,\n querySelector\n} from \"../../../features/DATA/apiSlice\";\n\nimport Color from \"./color\";\nimport Editor from \"./color/editor\";\nimport Slider from \"./color/editor/slider\";\n\nimport \"./composer-animate.css\";\nimport \"./composer.scss\";\n\nconst Composer = () => {\n const dispatch = useDispatch();\n const activeResult = useSelector(activeResultSelector);\n const colorData = useSelector(colorDataSelector);\n const currentPage = useSelector(currentPageSelector);\n const editorOpen = useSelector(editorSelector);\n const menuToggled = useSelector(menuSelector);\n const query = useSelector(querySelector);\n const queryPages = useSelector(queryPagesSelector);\n const queryResult = useSelector(queryResultSelector);\n const resultLength = useSelector(resultLengthSelector);\n\n // TODO: Unnecessary init classes, refactor\n const composerInitialClass =\n menuToggled == null ? \"composer-animate-off\" : \"composer-animate-return\";\n const editorInitialClass =\n editorOpen == null ? \"editor-animate-off\" : \"editor-animate-return\";\n const colorInitialClass =\n editorOpen == null ? \"color-animate-off\" : \"color-animate-return\";\n\n useEffect(\n () => {\n if (queryResult.length) {\n dispatch(setColor(queryResult[activeResult]));\n }\n },\n [activeResult, dispatch, queryResult]\n );\n\n const fetchNewPage = useCallback(\n async () => {\n const currentResult = queryResult;\n const encodedQuery = encodeURIComponent(query).replace(/%20/g, \"+\");\n const nextPage = currentPage + 1;\n if (currentPage === queryPages) {\n dispatch(setCurrentPage(1));\n } else {\n dispatch(setCurrentPage(nextPage));\n const result = await fetch(\n `http://localhost:8000/?query=${encodedQuery}&page=${nextPage}`,\n {\n mode: \"cors\"\n }\n );\n const data = await result.json();\n let augmentedQueryResult = currentResult.concat(data[2]);\n dispatch(setQueryResult(augmentedQueryResult));\n dispatch(setResultLength(augmentedQueryResult.length));\n }\n },\n [currentPage, dispatch, query, queryPages, queryResult]\n );\n\n const swipeLeft = useCallback(\n () => {\n if (resultLength) {\n // looping to beginning when at the end\n if (activeResult === resultLength - 1) {\n dispatch(setActiveResult(0));\n } else if (\n currentPage < queryPages &&\n activeResult === resultLength - 10\n ) {\n // pre-fetching next page\n fetchNewPage();\n dispatch(incrementActive());\n } else {\n dispatch(incrementActive());\n }\n }\n },\n [\n activeResult,\n resultLength,\n currentPage,\n queryPages,\n dispatch,\n fetchNewPage\n ]\n );\n\n const swipeRight = useCallback(\n () => {\n if (resultLength) {\n if (activeResult === 0) {\n dispatch(setActiveResult(resultLength - 1));\n } else {\n dispatch(decrementActive());\n }\n }\n },\n [resultLength, activeResult, dispatch]\n );\n\n const keyNav = useCallback(\n e => {\n if (resultLength) {\n if (e.key === \"ArrowRight\") swipeLeft();\n if (e.key === \"ArrowLeft\") swipeRight();\n }\n },\n [resultLength, swipeRight, swipeLeft]\n );\n\n useEffect(\n e => {\n window.addEventListener(\"keydown\", keyNav);\n return () => {\n window.removeEventListener(\"keydown\", keyNav);\n };\n },\n [keyNav]\n );\n\n return (\n \n {colorData.map(color =>\n \n \n \n \n \n \n \n )}\n
\n );\n};\n\nexport default Composer;\n","import { createSlice } from '@reduxjs/toolkit'\n\nexport const savedPalettesSlice = createSlice({\n name: 'savedPalettes',\n initialState: {\n palettesToggled: null\n },\n reducers: {\n palettesToggle: (state) => {\n state.palettesToggled = !state.palettesToggled\n }\n },\n})\n\nexport const palettesToggledSelector = state => state.ui.modals.palettesModal.palettesToggled\nexport const { palettesToggle } = savedPalettesSlice.actions\nexport default savedPalettesSlice.reducer","import { createSlice } from '@reduxjs/toolkit'\n\nexport const saveModalSlice = createSlice({\n name: 'saveModal',\n initialState: { saveToggled: null },\n reducers: {\n toggleSave: (state) => {\n state.saveToggled = !state.saveToggled\n }\n },\n})\n\nexport const saveToggledSelector = state => state.ui.modals.saveModal.saveToggled\nexport const { toggleSave } = saveModalSlice.actions\nexport default saveModalSlice.reducer","import React from 'react';\n\nimport './custom-button.scss'\n\nconst CustomButton = ({ children, ...props }) => {\n\n return (\n \n )\n}\n\nexport default CustomButton","import React from 'react';\n\nimport './icon.scss'\n\nconst HelpIcon = ({className, fillColor}) => {\n return (\n \n \n \n \n )\n}\n\nexport default HelpIcon","import React from 'react';\n\nimport './icon.scss'\n\nconst OpenIcon = ({ className, fillColor}) => {\n return (\n \n \n \n \n )\n}\n\nexport default OpenIcon","import React from 'react';\n\nimport './icon.scss'\n\nconst SaveIcon = ({className, fillColor}) => {\n return (\n \n \n \n \n )\n}\n\nexport default SaveIcon","import React from 'react';\n\nimport './icon.scss'\n\nconst ThemeIcon = ({ className, fillColor }) => {\n return (\n \n \n \n \n )\n}\n\nexport default ThemeIcon","import React from 'react';\n\nimport './icon.scss'\n\nconst UserIcon = ({ className, fillColor }) => {\n return (\n \n \n \n \n )\n}\n\nexport default UserIcon","import React from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\n\nimport { currentUserSelector } from '../../DATA/currentUserSlice'\nimport { darkModeSelector, setDarkMode } from '../darkMode/darkModeSlice'\nimport { menuSelector } from '../menu/menuSlider/menuSliderSlice'\nimport { palettesToggledSelector, palettesToggle } from '../modals/palettesModal/palettesSlice'\nimport { saveToggledSelector, toggleSave } from '../modals/saveModal/saveSlice'\nimport { userModalSelector, userModalToggle } from '../modals/userModal/userModalSlice'\n\nimport CustomButton from '../../../components/custom-button'\n\nimport HelpIcon from '../../../assets/icons/help.icon'\nimport OpenIcon from '../../../assets/icons/open.icon'\nimport SaveIcon from '../../../assets/icons/save.icon'\nimport ThemeIcon from '../../../assets/icons/theme.icon'\nimport UserIcon from '../../../assets/icons/user.icon'\n\nimport './menu.scss'\nimport './menu-animate.css'\n\nconst Menu = () => {\n const dispatch = useDispatch()\n const currentUser = useSelector(currentUserSelector)\n const darkMode = useSelector(darkModeSelector)\n const menuToggled = useSelector(menuSelector)\n const palettesToggled = useSelector(palettesToggledSelector)\n const saveToggled = useSelector(saveToggledSelector)\n const userToggled = useSelector(userModalSelector)\n const menuInitialClass = menuToggled == null ? 'menu-animate-off' : 'menu-animate-return' \n const fillColor = darkMode ? 'rgba(255,255,255,.5)' : 'rgba(0,0,0,.5)'\n\n // Menu button actions\n const toggleUser = () => {\n dispatch(userModalToggle())\n if (palettesToggled) dispatch(palettesToggle())\n if (saveToggled) dispatch(toggleSave())\n }\n \n const togglePalettes = () => {\n dispatch(palettesToggle())\n if (userToggled) dispatch(userModalToggle())\n if (saveToggled) dispatch(toggleSave())\n }\n \n const toggleSaveModal = () => {\n dispatch(toggleSave())\n if (palettesToggled) dispatch(palettesToggle())\n if (userToggled) dispatch(userModalToggle())\n }\n\n const toggleDarkMode = () => {\n dispatch(setDarkMode())\n }\n\n return (\n \n )\n}\n\nexport default Menu","import React from 'react'\n\nconst Dots = ({ className, fill }) => {\n return (\n \n \n \n \n )\n}\n\nexport default Dots","import React from 'react'\nimport PropTypes from 'prop-types'\n\nimport './form-input.scss'\n\nconst FormInput = React.forwardRef(({\n name,\n type,\n placeholder,\n className,\n value,\n error,\n label,\n onChange,\n autoComplete,\n ...props\n}, ref) => {\n\n return (\n \n \n \n {error &&

{error}

}\n
\n )\n})\n\nFormInput.defaultProps = {\n type: 'text',\n className: ''\n}\n\nFormInput.propTypes = {\n placeholder: PropTypes.string.isRequired,\n type: PropTypes.oneOf(['text', 'number', 'password', 'email']),\n className: PropTypes.string,\n value: PropTypes.any\n}\n\nexport default FormInput","import React, { useEffect, useState } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\n\nimport { setColor } from '../../../composer/color/editor/slider/channelEditorSlice'\nimport { currentUserSelector } from '../../../../DATA/currentUserSlice'\nimport { setSavedPalettes } from '../../../../DATA/savedPalettesSlice'\nimport { darkModeSelector } from '../../../darkMode/darkModeSlice'\nimport { menuToggle } from '../../../menu/menuSlider/menuSliderSlice'\nimport { palettesToggle } from '../palettesSlice'\nimport { deletePalette, renamePalette, updatePalettes } from '../../../../../firebase/firebasePalettes'\n\nimport CustomButton from '../../../../../components/custom-button'\nimport Dots from '../../../../../components/SVG/dots'\nimport FormInput from '../../../../../components/formInput'\n\n// Individual color component\nconst Color = (values) => {\n const { red, green, blue } = values.values\n const bgColor = { backgroundColor: `rgb(${red}, ${green}, ${blue})` }\n return
\n}\n\nconst Palette = ({ data }) => {\n const [showButtons, setShowButtons] = useState(false)\n const [showRename, setShowRename] = useState(false)\n const [showDelete, setShowDelete] = useState(false)\n const [newName, setNewName] = useState('')\n const [renameResponse, setRenameResponse] = useState(null)\n const [deleteResponse, setDeleteResponse] = useState(null)\n const buttonClass = showButtons ? '' : 'buttons-hidden'\n const deleteClass = showDelete ? '' : 'delete-hidden'\n const renameClass = showRename ? '' : 'rename-hidden'\n const dispatch = useDispatch()\n const darkMode = useSelector(darkModeSelector)\n const currentUser = useSelector(currentUserSelector)\n const fill = darkMode ? '#FAFAFA' : '#212121'\n const { name, palette } = data\n\n // opens selected palette in the composer\n const loadPalette = (palette) => {\n dispatch(setColor(palette))\n dispatch(menuToggle())\n dispatch(palettesToggle())\n }\n\n // opens up rename and delete modals\n const renameButton = () => {\n setShowRename(true)\n setShowButtons(false)\n }\n\n const deleteButton = () => {\n setShowDelete(true)\n setShowButtons(false)\n }\n\n // listener for new name field\n const handleChange = (e) => {\n setNewName(e.target.value)\n }\n\n // handles renaming and deletion of palettes and their responses\n const handleRename = async (e) => {\n const renameStatus = await renamePalette(name, currentUser.id, newName)\n setRenameResponse(renameStatus)\n updatePalettes(currentUser.id).then(palettes => dispatch(setSavedPalettes(palettes)))\n }\n\n const handleDelete = async () => {\n const deleteStatus = await deletePalette(name, currentUser.id)\n setDeleteResponse(deleteStatus)\n }\n\n // resets rename and delete visibility after successful responses and timeout\n useEffect(() => {\n const timeout = setTimeout(() => {\n setRenameResponse(null)\n setShowRename(false)\n }, 3000)\n return () => {\n clearTimeout(timeout)\n }\n }, [renameResponse])\n\n useEffect(() => {\n const timeout = setTimeout(() => {\n setDeleteResponse(null)\n setShowDelete(false)\n }, 3000)\n return () => {\n clearTimeout(timeout)\n }\n }, [deleteResponse])\n\n return (\n
\n \n

{newName || name}

\n setShowButtons(!showButtons)}>\n \n \n
\n \n {\n palette.map((color) => (\n \n ))\n }\n
\n {\n loadPalette(palette)\n setShowButtons(false)\n }}>Open\n Rename\n Delete\n
\n
\n {\n renameResponse !== \"Success!\" &&\n <>\n \n
\n Rename\n setShowRename(false)}>Cancel\n
\n \n }\n

{renameResponse}

\n
\n
\n {\n deleteResponse !== 'Success!' &&\n <>\n

You are about to delete this palette.

\n
\n Delete\n setShowDelete(false)}>Cancel\n
\n \n }\n

{deleteResponse}

\n
\n
\n
\n )\n}\n\nexport default Palette","import React, { useState } from 'react'\nimport { useSelector } from 'react-redux'\n\nimport { palettesToggledSelector } from './palettesSlice'\nimport { savedPalettesSelector } from '../../../DATA/savedPalettesSlice'\n// import {\n// savedPalettesSelector\n// } from '../../../DATA/DATAReducer'\n\nimport Palette from './palette'\nimport FormInput from '../../../../components/formInput'\n\nimport './palettesModal.scss'\n\nconst PalettesModal = () => {\n const palettesToggled = useSelector(palettesToggledSelector)\n const savedPalettes = useSelector(savedPalettesSelector)\n const [search, setSearch] = useState('')\n const modalInitialClass = palettesToggled == null ? 'modal-animate-off' : 'modal-animate-return'\n\n // search field \n const handleChange = e => {\n setSearch(e.target.value)\n }\n\n // Filtering saved palettes by 'search' field\n const filteredPalettes = savedPalettes && savedPalettes.filter(palette =>\n palette.name.toLowerCase().includes(search.toLowerCase()))\n\n return (\n
\n
\n

Palettes Browser

\n \n
\n
\n {filteredPalettes && filteredPalettes.map((palette, i) => (\n \n ))}\n
\n
\n )\n}\n\nexport default PalettesModal\n","import React, { useEffect, useState } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { updatePalettes } from '../../../../firebase/firebasePalettes'\n\nimport { colorDataSelector } from '../../composer/color/editor/slider/channelEditorSlice'\nimport { currentUserSelector } from '../../../DATA/currentUserSlice'\nimport { setSavedPalettes } from '../../../DATA/savedPalettesSlice'\n// import { currentUserSelector, setSavedPalettes } from '../../../DATA/DATAReducer'\nimport { saveToggledSelector } from './saveSlice'\nimport { savePalette } from '../../../../firebase/firebasePalettes'\n\nimport FormInput from '../../../../components/formInput'\nimport CustomButton from '../../../../components/custom-button'\n\nimport './save-modal.scss'\n\nconst SaveModal = () => {\n const dispatch = useDispatch()\n const palette = useSelector(colorDataSelector)\n const currentUser = useSelector(currentUserSelector)\n const saveToggled = useSelector(saveToggledSelector)\n const [paletteName, setPaletteName] = useState('')\n const [saveResponse, setSaveResponse] = useState('')\n const modalInitialClass = saveToggled == null ? 'modal-animate-off' : 'modal-animate-return'\n\n const handleChange = e => {\n setPaletteName(e.target.value)\n }\n\n const handleSubmit = async (e) => {\n e.preventDefault()\n const save = await savePalette(currentUser.id, palette, paletteName)\n setSaveResponse(save)\n setPaletteName('')\n updatePalettes(currentUser.id).then(palettes => dispatch(setSavedPalettes(palettes)))\n }\n\n // clears input and resets response message after timeout\n useEffect(() => {\n const timeout = setTimeout(() => {\n setSaveResponse(null)\n }, 3000)\n return () => {\n clearTimeout(timeout)\n }\n }, [saveResponse])\n\n return (\n
\n
\n

Save Palette

\n
\n {\n saveResponse !== \"Success!\" &&\n
\n \n \n Save\n \n \n }\n

{saveResponse}

\n
\n )\n}\n\nexport default SaveModal","import { userReAuth } from \"./firebaseAuth\";\nimport { auth } from \"./firebaseConfig\";\n\n// const user = auth.currentUser\n\n// // Update Username\n// export const updateUserName = async (newName) => {\n// try {\n// await user.updateProfile({\n// displayName: newName\n// })\n// return 'Updated User Name Successfully'\n// } catch (error) {\n// return error\n// }\n// }\n\n// // Update Email\n// export const updateEmail = async (newEmail, currentPassword) => {\n// try {\n// await userReAuth(currentPassword)\n// await user.updateEmail(newEmail)\n// return 'Email Updated Successfully'\n// } catch (error) {\n// return error\n// }\n// }\n\n// // Update Password\n// export const updatePass = async (currentPassword, newPassword) => {\n// try {\n// await userReAuth(currentPassword)\n// await user.updatePassword(newPassword)\n// } catch (error) {\n// return error\n// }\n// }\n\n//TODO: Test this and remove unnecessary functions\n// Update User // Handles updating of display name, password and email\nexport const updateUser = async (newName, newEmail, newPassword, currentPassword) => {\n const user = auth.currentUser\n if (newName) {\n try {\n await user.updateProfile({\n displayName: newName\n })\n return {\n status: 'success',\n message: 'Updated User Name Successfully'\n }\n } catch (error) {\n return error\n }\n }\n\n if (newEmail) {\n try {\n // assigning reAuth response to variable for handling\n const reAuth = await userReAuth(currentPassword)\n // if there is an error: \n if (reAuth) {\n return {\n status: 'error',\n message: reAuth.message\n }\n } else {\n await user.updateEmail(newEmail)\n return {\n status: 'success',\n message: 'Email Updated Successfully'\n }\n }\n } catch (error) {\n return (error)\n }\n }\n\n if (newPassword) {\n try {\n await userReAuth(currentPassword)\n const reAuth = await userReAuth(currentPassword)\n if (reAuth) {\n return {\n status: 'error',\n message: reAuth.message\n }\n } else {\n await user.updatePassword(newPassword)\n return {\n status: 'success',\n message: 'Password Updated Successfully'\n }\n }\n } catch (error) {\n return error\n }\n }\n}","import React, { useState, useEffect } from 'react'\nimport { auth } from '../../../../../firebase/firebaseConfig'\nimport * as EmailValidator from 'email-validator'\n\nimport CustomButton from '../../../../../components/custom-button'\nimport FormInput from '../../../../../components/formInput'\n\nimport '../user-modal.scss'\n\nconst ChangeEmail = ({ handleChange, handleSubmit, userInfo }) => {\n const { newEmail, currentPassword } = userInfo\n const [clicked, setClicked] = useState(false)\n const [btnDisabled, setBtnDisabled] = useState(true)\n const currentEmail = auth ? auth.currentUser.email : ''\n\n useEffect(() => {\n if (currentPassword && EmailValidator.validate(newEmail)) {\n setBtnDisabled(false)\n } else {\n setBtnDisabled(true)\n }\n }, [currentPassword, newEmail])\n\n return (\n
\n {\n currentEmail &&

Current Email: {currentEmail}

\n }\n \n \n handleSubmit() : () => setClicked(true)}>\n Submit\n \n {\n clicked && btnDisabled &&\n

Please fill out the form correctly.

\n }\n
\n )\n}\n\nexport default ChangeEmail","import React, { useEffect, useState } from 'react'\n\nimport CustomButton from '../../../../../components/custom-button'\nimport FormInput from '../../../../../components/formInput'\n\nimport '../user-modal.scss'\n\nconst ChangePass = ({ handleChange, handleSubmit, userInfo }) => {\n const { currentPassword, newPassword, confirmPassword } = userInfo\n const [clicked, setClicked] = useState(false)\n const [btnDisabled, setBtnDisabled] = useState(true)\n const btnClass = btnDisabled ? 'disabled-button' : ''\n const passMatch = newPassword === confirmPassword\n\n useEffect(() => {\n if (currentPassword && passMatch && newPassword.length >= 8 && confirmPassword.length >= 8) {\n setBtnDisabled(false)\n } else {\n setBtnDisabled(true)\n }\n }, [confirmPassword, currentPassword, newPassword, passMatch])\n\n return (\n
\n

Change Password

\n \n \n \n handleSubmit() : () => setClicked(true)}>\n Submit\n \n {\n !passMatch ?

Passwords do not match.

:\n clicked && btnDisabled &&\n

Please fill out the form correctly.

\n }\n
\n )\n}\n\nexport default ChangePass","import React, { useState } from 'react'\n\nimport CustomButton from '../../../../../components/custom-button'\nimport FormInput from '../../../../../components/formInput'\n\nimport '../user-modal.scss'\n\nconst ChangeUser = ({ handleChange, handleSubmit, userInfo }) => {\n const [clicked, setClicked] = useState(false)\n const btnDisabled = userInfo.newName.length < 6\n const btnClass = btnDisabled ? 'disabled-button' : ''\n\n return (\n
\n

Change Username

\n \n handleSubmit() : () => setClicked(true)}>\n Submit\n \n {\n clicked && btnDisabled &&\n

Username must be at least 6 characters

\n }\n
\n )\n}\n\nexport default ChangeUser","import React, { useEffect, useState } from 'react'\nimport { useDispatch } from 'react-redux'\nimport { updateUser } from '../../../../../firebase/firebaseUser'\n\nimport { userName } from '../userModalSlice'\n\nimport ChangeEmail from './changeEmail'\nimport ChangePass from './changePass'\nimport ChangeUser from './changeUser'\nimport CustomButton from '../../../../../components/custom-button'\n\nimport '../user-modal.scss'\n\nconst AccountSettings = () => {\n const dispatch = useDispatch()\n const [firebaseMessage, setFirebaseMessage] = useState(null)\n const [userInfo, setUserInfo] = useState({\n newName: '',\n newEmail: '',\n currentPassword: '',\n newPassword: '',\n confirmPassword: '',\n passwordError: null\n })\n\n const handleChange = (e) => {\n const { name, value } = e.target\n setUserInfo({\n ...userInfo,\n [name]: value\n })\n }\n\n const clearUserInfo = () => {\n setUserInfo({\n newName: '',\n newEmail: '',\n currentPassword: '',\n newPassword: '',\n confirmPassword: ''\n })\n }\n\n // Initial state for acct page. Using this to easily reset state on update completion, resetting to 'home' account page.\n const acctInitState = {\n home: true,\n user: false,\n email: false,\n password: false\n }\n // State object for conditionally rendering correct Account Setting page.\n const [acctPage, setAcctPage] = useState({\n home: true,\n user: false,\n email: false,\n password: false\n })\n\n // Updater for displayed username\n const setNewName = (newName) => {\n dispatch(userName(newName))\n }\n\n // timer for display of success message\n useEffect(() => {\n const timeout = setTimeout(() => {\n setFirebaseMessage(null)\n }, 3000)\n return () => {\n clearTimeout(timeout)\n }\n }, [firebaseMessage])\n\n // Submits to multi-firebase function at 'firebaseUser.js'. \n // The content passed dictates what operation to attempt (update, user, email, or pass, respectively)\n // Then handles necessary UI updates and message/error display. \n const handleSubmit = async () => {\n const { newName, newEmail, newPassword, currentPassword } = userInfo\n const firebaseReturn = await updateUser(newName, newEmail, newPassword, currentPassword)\n setNewName(newName)\n setFirebaseMessage(firebaseReturn)\n clearUserInfo()\n setAcctPage({ ...acctInitState })\n }\n\n return (\n
\n {\n acctPage.home &&\n
\n {\n setAcctPage({\n home: false,\n user: true\n })\n }}>\n Change User Name\n \n {\n setAcctPage({\n home: false,\n email: true\n })\n }}>\n Change Email\n \n {\n setAcctPage({\n home: false,\n password: true\n })\n }}>\n Change Password\n \n
\n }\n {\n acctPage.user &&\n \n }\n {\n acctPage.email &&\n \n }\n {\n acctPage.password &&\n \n }\n {\n firebaseMessage && {firebaseMessage.message}\n }\n
\n )\n}\n\nexport default AccountSettings","import React from 'react'\n\nimport './icon.scss'\n\nconst GoogleIcon = ({ className }) => {\n return (\n \n \n \n \n \n \n \n \n )\n}\n\nexport default GoogleIcon","import React, { useEffect, useState } from 'react'\nimport * as EmailValidator from 'email-validator'\n\nimport { signInEmail, signInWithGoogle, resetPassEmail } from '../../../../../firebase/firebaseAuth'\n\nimport CustomButton from '../../../../../components/custom-button'\nimport FormInput from '../../../../../components/formInput'\nimport GoogleIcon from '../../../../../assets/icons/google.icon'\n\nimport '../user-modal.scss'\n\nconst SignIn = () => {\n const [userInfo, setUserInfo] = useState({\n email: '',\n password: ''\n })\n const { email, password } = userInfo\n const [clicked, setClicked] = useState(false)\n const [btnDisabled, setBtnDisabled] = useState(true)\n const [errorMessage, setErrorMessage] = useState(false)\n const [reset, setReset] = useState(false)\n\n const handleChange = e => {\n const { name, value } = e.target\n setUserInfo({\n ...userInfo, [name]: value\n })\n }\n\n const handleSubmit = () => {\n const { email, password } = userInfo\n signInEmail(email, password)\n setUserInfo({\n email: '',\n password: ''\n })\n }\n\n useEffect(() => {\n if (password.length > 7 && EmailValidator.validate(email)) {\n setBtnDisabled(false)\n } else {\n setBtnDisabled(true)\n }\n }, [email, password])\n\n return (\n
\n

Hello!

\n
\n \n \n {\n errorMessage &&\n {errorMessage.message}\n }\n \n {\n clicked && btnDisabled &&\n

Please fill out the form correctly.

\n }\n handleSubmit() : () => setClicked(true)}\n type='submit'\n className={btnDisabled ? 'disabled-button' : undefined}>Sign In\n \n Sign In with\n {\n errorMessage.code === 'auth/too-many-requests' &&\n {\n resetPassEmail(userInfo.email)\n setReset(true)\n setErrorMessage(false)\n setUserInfo({\n email: '',\n password: ''\n })\n }}\n className='afm-button'>Reset Password\n }\n {\n reset &&

Check your email for a link to reset your password.

\n }\n
\n )\n}\n\nexport default SignIn","import React, { useState, useEffect } from 'react'\nimport { auth } from '../../../../../firebase/firebaseConfig'\nimport * as EmailValidator from 'email-validator'\n\nimport FormInput from '../../../../../components/formInput'\nimport CustomButton from '../../../../../components/custom-button'\n\nimport '../user-modal.scss'\nimport { createUserProfileDocument } from '../../../../../firebase/firebaseAuth'\n\nconst SignUp = () => {\n const [userInfo, setUserInfo] = useState({\n displayName: '',\n email: '',\n password: '',\n confirmPassword: ''\n })\n const { displayName, email, password, confirmPassword } = userInfo\n const [clicked, setClicked] = useState(false)\n const [btnDisabled, setBtnDisabled] = useState(true)\n const [errorMessage, setErrorMessage] = useState(false)\n const passMatch = password === confirmPassword\n\n const handleChange = e => {\n const { name, value } = e.target\n setUserInfo({\n ...userInfo, [name]: value\n })\n }\n\n const handleSubmit = async e => {\n const { email, password } = userInfo\n\n try {\n const { user } = await auth.createUserWithEmailAndPassword(email, password)\n await createUserProfileDocument(user, { displayName })\n setUserInfo({\n displayName: '',\n email: '',\n password: '',\n confirmPassword: ''\n })\n } catch (error) {\n if (error.code === 'auth/email-already-in-use') {\n setErrorMessage('email in use')\n } else {\n setErrorMessage(error.code)\n }\n }\n }\n\n useEffect(() => {\n if (password.length > 7 && passMatch && EmailValidator.validate(email)) {\n setBtnDisabled(false)\n } else {\n setBtnDisabled(true)\n }\n }, [email, confirmPassword, password, passMatch])\n\n return (\n
\n

Sign Up

\n
\n \n \n \n \n {\n errorMessage &&\n {errorMessage.message}\n }\n \n handleSubmit() : () => setClicked(true)}>\n Submit\n \n {\n !passMatch ?

Passwords do not match.

:\n clicked && btnDisabled &&\n

Please fill out the form correctly.

\n }\n
\n )\n}\n\nexport default SignUp","import React, { useState } from 'react'\nimport { auth } from '../../../../firebase/firebaseConfig'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { currentUserSelector } from '../../../DATA/currentUserSlice'\nimport { menuToggle } from '../../menu/menuSlider/menuSliderSlice'\nimport {\n userNameSelector,\n userModalSelector,\n userModalToggle,\n thirdPartySelector\n} from './userModalSlice'\n\nimport AccountSettings from './accountSettings/accountSettings'\nimport SignIn from './signIn/signIn'\nimport SignUp from './signUp/signUp'\n\nimport CustomButton from '../../../../components/custom-button'\n\nimport '../modal.scss'\nimport '../modal-animate.css'\n\nconst UserModal = () => {\n // redux / current user and login type state/dispatch\n const dispatch = useDispatch()\n const currentUser = useSelector(currentUserSelector)\n const isThirdParty = useSelector(thirdPartySelector)\n const userName = useSelector(userNameSelector)\n const userToggled = useSelector(userModalSelector)\n // form & page control \n const [account, setAccount] = useState(false) // account page toggle\n const [signUp, setSignUp] = useState(false) // signup page toggle\n // UI state\n const modalInitialClass = userToggled == null ? 'modal-animate-off' : 'modal-animate-return'\n\n return (\n \n
\n {\n !currentUser && signUp ?\n :\n !currentUser ?\n
\n \n setSignUp(true)}>Create New Account\n
:\n
\n

{currentUser ? userName || currentUser.displayName : 'error'}

\n
\n auth.signOut()}\n className='account-button'>Sign Out\n {\n isThirdParty ?\n
You are signed in with {isThirdParty}
:\n setAccount(!account)}\n className='account-button'>Account Settings\n }\n
\n
\n }\n
\n {\n account &&\n \n }\n
\n {\n dispatch(userModalToggle(false))\n dispatch(menuToggle(false))\n setAccount(false)\n setSignUp(false)\n }}\n className='basic-button close-button'>Close\n
\n
\n )\n}\n\nexport default UserModal","import React from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport Hamburger from 'hamburger-react'\n\nimport { darkModeSelector } from '../../darkMode/darkModeSlice'\nimport { editorSelector, slideEditor } from '../../composer/editorSliderSlice'\nimport { menuSelector, menuToggle } from './menuSliderSlice'\nimport { palettesToggledSelector, palettesToggle } from '../../modals/palettesModal/palettesSlice'\nimport { saveToggledSelector, toggleSave } from '../../modals/saveModal/saveSlice'\nimport { userModalSelector, userModalToggle } from '../../modals/userModal/userModalSlice'\n\nimport './menu-slider.scss'\n\nconst MenuSlider = () => {\n const dispatch = useDispatch()\n const darkMode = useSelector(darkModeSelector)\n const editorOpen = useSelector(editorSelector)\n const menuToggled = useSelector(menuSelector)\n const palettesOpen = useSelector(palettesToggledSelector)\n const saveToggled = useSelector(saveToggledSelector)\n const userOpen = useSelector(userModalSelector)\n\n const fillColor = darkMode ? 'rgba(255,255,255,.5)' : 'rgba(0,0,0,.5)'\n\n const setMenuToggle = () => {\n dispatch(menuToggle())\n if (editorOpen !== null) { dispatch(slideEditor(false)) }\n if (userOpen) { dispatch(userModalToggle()) }\n if (palettesOpen) { dispatch(palettesToggle()) }\n if (saveToggled) { dispatch(toggleSave())}\n }\n\n return (\n
\n \n
\n )\n}\n\nexport default MenuSlider\n","import React from 'react';\n\nimport './icon.scss'\n\nconst Search = ({ fillColor, className }) => {\n return (\n \n \n \n )\n}\n\nexport default Search\n\n","import React from 'react'\n\nimport './spinner.scss'\n\nconst Spinner = ({ className }) => {\n return (\n \n \n {/* */}\n \n \n \n )\n}\n\nexport default Spinner","import React from 'react'\n\nimport { useDispatch, useSelector } from 'react-redux'\nimport { setColor } from '../../composer/color/editor/slider/channelEditorSlice'\nimport {\n setIsLoading,\n setNoResults,\n setQuery,\n querySelector,\n setQueryResult,\n setQueryPages,\n} from '../../../DATA/apiSlice'\nimport {\n setActiveResult,\n setCurrentPage,\n setResultLength\n} from '../../swipe/swipeSlice'\n\nimport FormInput from '../../../../components/formInput'\n\nconst baseURLdev = process.env.REACT_APP_FETCH_URL_DEV\nconst baseURLprod = process.env.REACT_APP_FETCH_URL_PROD\nconst env = process.env.REACT_APP_ENV\n\nconst baseURL = env === \"development\" ? baseURLdev : baseURLprod\n\nconst SearchField = React.forwardRef(({ setSearchField, searchToggled }, ref) => {\n const dispatch = useDispatch()\n const query = useSelector(querySelector)\n // const [query, setQuery] = useState('')\n\n const onEnter = e => {\n if (e.key === 'Enter') {\n fetchQuery()\n dispatch(setSearchField())\n ref.current.blur()\n }\n }\n\n const fetchQuery = async () => {\n try {\n const encodedQuery = encodeURIComponent(query).replace(/%20/g, \"+\")\n dispatch(setIsLoading(true))\n dispatch(setCurrentPage(1))\n const result = await fetch(`${baseURL}/?query=${encodedQuery}&page=1`, {\n mode: \"cors\"\n })\n const data = await result.json()\n if (!data[2].length) {\n dispatch(setIsLoading(false))\n dispatch(setNoResults(true))\n } else {\n dispatch(setQueryResult(data[2]))\n dispatch(setQueryPages(data[1]))\n dispatch(setCurrentPage(data[0]))\n dispatch(setActiveResult(0))\n dispatch(setResultLength(data[2].length))\n dispatch(setColor(data[2][0]))\n dispatch(setIsLoading(false))\n }\n } catch (error) {\n return error\n }\n }\n\n const handleChange = e => {\n dispatch(setQuery(e.target.value))\n }\n\n return (\n <>\n \n \n )\n})\n\nexport default SearchField","import React, { useRef } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\n\nimport { isLoadingSelector } from '../../DATA/apiSlice'\nimport { darkModeSelector } from '../darkMode/darkModeSlice'\nimport { menuSelector, menuToggle } from '../menu/menuSlider/menuSliderSlice'\nimport { palettesToggledSelector, palettesToggle } from '../modals/palettesModal/palettesSlice'\nimport { saveToggledSelector, toggleSave } from '../modals/saveModal/saveSlice'\nimport { searchSelector, setSearchField } from './topBarSlice'\nimport { userModalSelector, userModalToggle } from '../modals/userModal/userModalSlice'\n\nimport CustomButton from '../../../components/custom-button'\nimport MenuSlider from '../menu/menuSlider'\nimport Search from '../../../assets/icons/search.icon'\nimport Spinner from '../../../components/SVG/spinner'\n\nimport './top-bar.scss'\nimport SearchField from './searchField'\n\nconst TopBar = () => {\n const dispatch = useDispatch()\n const isLoading = useSelector(isLoadingSelector)\n const darkMode = useSelector(darkModeSelector)\n const menuToggled = useSelector(menuSelector)\n const palettesToggled = useSelector(palettesToggledSelector)\n const saveToggled = useSelector(saveToggledSelector)\n const searchToggled = useSelector(searchSelector)\n const userToggled = useSelector(userModalSelector)\n const searchRef = useRef()\n const fillColor = darkMode ? 'rgba(255,255,255,.5)' : 'rgba(0,0,0,.5)'\n\n\n const showSearch = () => {\n dispatch(setSearchField())\n searchRef.current.focus()\n if (menuToggled) dispatch(menuToggle())\n if (userToggled) dispatch(userModalToggle())\n if (palettesToggled) dispatch(palettesToggle())\n if (saveToggled) dispatch(toggleSave())\n }\n\n return (\n
\n {\n isLoading ? :\n \n \n \n }\n \n

Tarot

\n \n
\n )\n}\n\nexport default TopBar","import React from 'react'\n\nimport { auth } from '../../firebase/firebaseConfig'\nimport { useFirebaseAuth } from '../../firebase/firebaseAuth'\n\n\nimport Composer from '../../features/UI/composer'\nimport Menu from '../../features/UI/menu'\nimport PalettesModal from '../../features/UI/modals/palettesModal'\nimport SaveModal from '../../features/UI/modals/saveModal'\nimport UserModal from '../../features/UI/modals/userModal'\nimport TopBar from '../../features/UI/top-bar'\n\nimport './tarot.scss'\n// * local monitoring/testing widget:\n// import Overlay from './overlay'\n\nconst Tarot = () => {\n useFirebaseAuth(auth)\n\n return (\n
\n \n
\n \n \n
\n \n \n \n {/* */}\n
\n )\n}\n\nexport default Tarot","import React from 'react';\nimport { Route, BrowserRouter } from 'react-router-dom'\nimport { useSelector } from 'react-redux';\n\nimport { darkModeSelector } from './features/UI/darkMode/darkModeSlice';\n\nimport Splash from './views/splash';\nimport Tarot from './views/tarot';\n\nimport './App.css';\nimport './global/global-styles.css'\n\nconst vh = window.innerHeight * .01;\ndocument.documentElement.style.setProperty('--vh', `${vh}px`)\n\nrequire('dotenv').config({\n path: '../.env'\n})\n\nfunction App() {\n const darkMode = useSelector(darkModeSelector)\n const bgColor = darkMode ? { backgroundColor: '#212121' } : { backgroundColor: '#FAFAFA' }\n \n return (\n \n \n \n \n \n \n );\n}\n\nexport default App;\n","import { combineReducers } from \"redux\";\n\nimport channelEditor from './color/editor/slider/channelEditorSlice'\nimport colorSliderReducer from './color/colorSliderSlice'\nimport editor from './editorSliderSlice'\n\nexport default combineReducers({\n channelEditor,\n colorSliderReducer,\n editor\n})","import { combineReducers } from \"redux\";\n\nimport userModal from './userModal/userModalSlice'\nimport palettesModal from './palettesModal/palettesSlice'\nimport saveModal from './saveModal/saveSlice'\n\nexport default combineReducers({\n userModal,\n palettesModal,\n saveModal,\n // helpModal\n})","import { combineReducers } from \"redux\";\n\nimport composer from './composer/composerReducer'\nimport darkMode from './darkMode/darkModeSlice'\nimport menuToggle from './menu/menuSlider/menuSliderSlice'\nimport modals from './modals/modalsReducer'\nimport swipe from \"./swipe/swipeSlice\";\nimport topBar from './top-bar/topBarSlice'\n\nexport default combineReducers({\n composer,\n darkMode,\n menuToggle,\n modals,\n swipe,\n topBar\n})","import { combineReducers } from \"redux\";\n\nimport currentUser from './currentUserSlice'\nimport savedPalettes from './savedPalettesSlice'\nimport api from \"./apiSlice\";\n\nexport default combineReducers({\n api,\n currentUser,\n savedPalettes\n})\n","import { configureStore } from '@reduxjs/toolkit'\nimport logger from 'redux-logger'\n\nimport UIReducer from '../features/UI/UIReducer'\nimport DATAReducer from '../features/DATA/DATAReducer'\n\nconst env = process.env.REACT_APP_ENV\n\nconst middleware = [];\nif (env === \"development\") {\n middleware.push(logger)\n}\n\nexport const store = configureStore({\n reducer: {\n ui: UIReducer,\n data: DATAReducer,\n },\n middleware: middleware,\n});","// 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 && 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.then((registration) => {\n registration.unregister();\n });\n }\n}\n","import React, { useEffect } from 'react'\nimport { useSelector } from 'react-redux'\nimport { darkModeSelector } from './features/UI/darkMode/darkModeSlice'\nimport { lightTheme, darkTheme } from './global/theme'\n\nconst ThemeWrapper = ({ children }) => {\n const darkMode = useSelector(darkModeSelector)\n\n const updateTheme = (newTheme) => {\n const cssKeys = Object.keys(newTheme)\n const cssValues = Object.values(newTheme)\n\n cssKeys.forEach((key, i) => {\n document.documentElement.style.setProperty(\n key,\n cssValues[i]\n )\n })\n }\n\n\n useEffect(() => {\n if (darkMode) updateTheme(darkTheme)\n else updateTheme(lightTheme)\n }, [darkMode])\n\n return <>{children}\n}\n\nexport default ThemeWrapper","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\nimport { store } from './redux/store';\nimport { Provider } from 'react-redux';\nimport * as serviceWorker from './serviceWorker';\nimport ThemeWrapper from './themeWrapper'\n\nReactDOM.render(\n \n \n \n \n \n \n ,\n document.getElementById('root')\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n"],"sourceRoot":""}