{"version":3,"sources":["serviceWorker.js","components/i18n.js","globalState.js","api.js","components/Header.js","stateHelpers.js","components/TextValidator.js","snackbar.js","confirmationDialog.js","components/FileUpload.js","components/GenericInputField.js","components/FailedLoading.js","components/CircularLoader.js","components/RequestsPage.js","withRoot.js","components/Login.js","components/ContentBox.js","components/AccountSettings.js","components/UserPage.js","components/PaperSheet.js","components/IndexPage.js","components/ConsecutiveSnackbars.js","components/AlertDialog.js","components/ConfirmationDialogs.js","components/Avatars.js","components/IdentitiesPage.js","components/LogoutPage.js","components/AccessTokensPage.js","components/DrawerInfo.js","components/ResponsiveDialog.js","components/SignaturePad.js","components/SignaturePadDialog.js","colors.js","components/request/utils.js","components/request/WriteCommentBox.js","components/request/WriteComment.js","components/request/ArrowGuide.js","components/request/PagePlaceholder.js","components/request/PageImage.js","components/request/ConfirmAndSend.js","components/request/DeclineBox.js","components/request/SignRequestNotFound.js","components/request/DownloadDocument.js","components/request/RequestPage.js","index.js"],"names":["Boolean","window","location","hostname","match","i18n","use","Backend","LanguageDetector","initReactI18next","init","fallbackLng","debug","interpolation","escapeValue","DEFAULT_THEME","primary","main","secondary","initialState","user","theme","confirmationDialogs","currentDialogAppBarWidth","drawer_info","toolbar","title","createGlobalState","GlobalStateProvider","useCurrentState","useGlobalState","ENDPOINT","host","indexOf","token","url","uri","configure","config","headers","Authorization","apiPost","data","a","axios","post","apiPut","put","get","apiDelete","delete","apiSetAccessToken","newTok","apiURL","LinkButtoned","withRouter","props","history","to","staticContext","onClick","rest","Button","event","push","withStyles","root","flexGrow","grow","menuButton","marginLeft","marginRight","classes","setUser","useEffect","localStorage","getItem","apiGet","then","res","loggedIn","id","Fragment","color","name","className","AppBar","position","Toolbar","Typography","variant","CancelToken","useAPI","useState","response","undefined","error","isLoading","state","setState","retry","doRetry","configHash","hash","source","cancelToken","catch","isCancel","console","log","message","cancel","setData","newData","newResponse","TextValidator","this","helperText","errorMessages","validators","requiredError","validatorListener","withRequiredValidator","isValid","TextField","getErrorMessage","ValidatorComponent","snackbar","msg","action","setMessage","lodash","require","spawnConfirmation","spec","Date","now","close","prom","Promise","resolve","reject","promise","setDialogs","finally","getDialogs","filter","xspec","current","existing","find","Basic","useDropzone","acceptedFiles","getRootProps","getInputProps","useTranslation","t","files","map","file","key","path","size","onFiles","length","component","style","paddingTop","disabled","GenerateInput","defaultValue","value","setValue","setError","setDisabled","customStyles","setCustomStyles","other","fullWidth","field","type","FormControl","minWidth","label","InputLabel","Select","onChange","ev","target","required","MenuItem","selection","item","index","help","FormHelperText","FileUpload","multi","src","maxWidth","height","alt","Object","assign","staticStyles","FormControlLabel","control","Checkbox","checked","FormLabel","RadioGroup","Radio","textarea","multiline","rows","inputProps","margin","GenerateInputs","specs","out","keys","toData","nout","toFormData","formData","FormData","append","disableAll","progress","spacing","unit","Grid","container","direction","justify","alignItems","CircularProgress","setTitle","senders","inputRef","useRef","inputs","callback_url","sender","email","emails","CircularLoader","loading","deleteRequest","unique_id","itm","e","submit","signers","split","trim","document_url","document_name","padding","Card","CardContent","ref","onSubmit","noValidate","autoComplete","CardActions","List","ListItem","button","ListItemText","status","created_at","ListItemSecondaryAction","IconButton","themes","createMuiTheme","palette","light","deepOrange","dark","blueGray","typography","useNextVariants","withRoot","Component","thm","k","substr","ThemeProvider","CssBaseline","clearer","LoginForm","setUserAccessToken","setEmail","password","setPassword","errorText","setErrorText","setLoading","device_id","uuid4","access_token","setItem","href","clearTimeout","setTimeout","LoginPage","ContentBox","children","actions","AccountSettings","current_password","UserPage","mixins","gutters","paddingBottom","Paper","elevation","IndexPage","ConsecutiveSnackbars","queue","open","messageInfo","processQueue","shift","handleClose","reason","handleExited","getTime","aria-label","unshift","actionText","Snackbar","anchorOrigin","vertical","horizontal","autoHideDuration","onClose","onExited","ContentProps","React","AlertDialog","okDisabled","cancelDisabled","contentText","doClose","decision","finalize","maybePromise","ok","newState","content","Dialog","DialogTitle","DialogContent","DialogContentText","DialogActions","cancelText","okText","autoFocus","withTranslation","ConfirmationDialogs","dialogs","styles","avatar","bigAvatar","width","SmallAvatar","Avatar","BigAvatar","toString","phone","theme_secondary","logo","deleteIdentity","reset","setEdit","ListItemAvatar","LogoutPage","deleteAccessToken","dt","session","list","fullList","drawerInfo","setDrawerInfo","SwipeableDrawer","anchor","keepMounted","onOpen","ResponsiveDialog","handleClickOpen","handleCancel","onCancel","api","fullScreen","go","actionButtonDisabled","PaperProps","innerWidth","withMobileDialog","SignaturePad","canvasWidth","canvasHeight","_callResizeHandler","debounce","debounceInterval","handleResize","bind","_canvas","scaleCanvas","addEventListener","_signaturePad","SigPad","options","onEnd","removeEventListener","off","isEmpty","clear","base64String","fromDataURL","pad","pointGroups","_data","ratio","Math","max","devicePixelRatio","svg","canvas","document","createElementNS","setAttribute","_fromData","curve","createElement","isNaN","control1","x","y","control2","attr","concat","startPoint","toFixed","endPoint","endWidth","appendChild","point","circle","dotSize","header","body","innerHTML","dummy","nodes","childNodes","i","cloneNode","btoa","mime","toDataURL","fromData","on","offsetWidth","offsetHeight","redrawOnResize","getContext","canvasProps","throttle","backgroundColor","penColor","weight","velocityFilterWeight","fn","Error","onBegin","PureComponent","displayName","defaultProps","penColors","SimpleTabs","currentRef","setRef","useIdb","stored","setStored","signature","setSignature","fontsJSON","initialSetup","setInitialSetup","useLocalStorage","setPenColor","setDotSize","fontChoice","setFontChoice","appBarRef","setAppBarRef","getSenders","writer","fontSize","fonts","fam","fontFamily","font","fontColor","formDirty","setActionButtonDisabled","text","neww","recorded","base_64","svgx","tab","useCallback","val","onDrawed","total","forEach","v","points","cleared","getAppbarHeight","clientHeight","getImage","info","getInfo","placeholder","_text","_text_font","text_font","_text_color","text_color","ww","padww","padhh","windowWidth","innerHeight","parseFloat","cc","setSignatureRef","minHeight","innerRef","top","Tabs","centered","nv","Tab","display","toSVG","save","stor","borderTop","borderBottom","alignContent","ButtonBase","border","background","paper","SignaturePadDialog","computeStyleFor","page","dimensions","dimns","ihp","ivp","iiw","iih","ciw","cih","chp","cvp","floor","computePosition","position_x","position_y","detail","page_width","page_height","percentBiggerX","percentBiggerY","hh","left","hexToRgbA","hex","opacity","c","test","substring","join","getColorByIndex","colors","arrowPositions","up","Icon","down","right","isInViewport","elem","bounding","getBoundingClientRect","bottom","documentElement","clientWidth","WriteCommentBox","globalComment","messageWrapper","setGlobalComment","dialog","WriteComment","diff","request","signerID","getSigner","f","callBox","signer","declined","signed","sign_request","comment_help_text","confirmationDialog","isAddCommentVisible","d","hide_write_comment_button","sig","ArrowGuide","pos","setPos","defaultStyles","setStyles","lastReference","setLastReference","lastPlaceholder","setLastPlaceholder","lastSpec","setLastSpec","arrowEl","jumpToLastReference","el","$","next","offset","outerHeight","tp","scrollingElement","scrollTop","openSignInput","animate","trigger","reposition","providePage","provideElement","lastStyles","lastAllSigned","force","found","where","last","allSigned","at","element","setVisible","_image","image","tel","parentNode","tEl","arrowElCurr","nextStyles","scroll","handle","setInterval","clearInterval","scale","PagePlaceholder","openSignaturePad","computed","loaded","signerMode","canSign","pelement","setProvideElement","setImage","imageEl","visibility","openSig","set","PageImage","setLoaded","visible","minH","mw","mainWidth","completed","setSrc","pp","setProvidePage","factor","throttled","newMainWidth","leading","trailing","loader","imageHtml","onLoad","onError","placeholders","sindex","signer_id","textAlign","pageRef","ConfirmAndSend","_","send_a_copy","signatures","pages","html_image","datax","reloadData","DeclineBox","setText","focus","SignRequestNotFound","DownloadDocument","sign_different","comment","send","getData","params","ctheme","setTheme","setMw","handler","cw","sw","useFractalWidth","back","useTitle","images","setImages","isShowingDecline","setDecline","sigpad","setSigpad","downloadMenu","setDownloadMenu","mainMenu","setMainMenu","setScale","setToolbar","useToolbar","getActionText","finished","anyDeclined","sign","withMenu","cb","withMainMenu","changeLanguage","language","documentDownload","download_for_alternative_sign","logDownload","currentTarget","click","decline","currentSetImage","currentImage","currentInfo","currentSetInfo","negative","dscale","abs","scaled","identity","embed","search","extra","disabledAction","embeded","Chip","readOnly","inq","protocol","signapi","setImageBase64","ceil","details","Menu","anchorEl","ListItemIcon","cursor","disableRipple","prototype","shim","originalEvent","returnValue","Themeable","TranslateableIndex","Header","exact","RequestsPage","RequestPage","IdentitiesPage","AccessTokensPage","Load","fallback","ReactDOM","render","getElementById","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.4bcf2013.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 http://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.1/8 is considered localhost for IPv4.\n window.location.hostname.match(/^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/),\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 http://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 http://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 .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('No internet connection found. App is running in offline mode.');\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 i18n from 'i18next';\nimport Backend from 'i18next-xhr-backend';\nimport LanguageDetector from 'i18next-browser-languagedetector';\nimport { initReactI18next } from 'react-i18next';\n\ni18n\n// load translation using xhr -> see /public/locales\n// learn more: https://github.com/i18next/i18next-xhr-backend\n .use(Backend)\n // detect user language\n // learn more: https://github.com/i18next/i18next-browser-languageDetector\n .use(LanguageDetector)\n // pass the i18n instance to react-i18next.\n .use(initReactI18next)\n // init i18next\n // for all options read: https://www.i18next.com/overview/configuration-options\n .init({\n fallbackLng: 'en',\n debug: false,\n interpolation: {\n escapeValue: false, // not needed for react as it escapes by default\n },\n });\n\nexport default i18n;","import {createGlobalState} from 'react-hooks-global-state';\nconst DEFAULT_THEME = {\n primary: {\n main: '#ff5722'\n },\n secondary: {\n main: '#ff5722'\n }\n};\nconst initialState = {\n user: {}, theme: DEFAULT_THEME, confirmationDialogs: [], currentDialogAppBarWidth: 0, drawer_info: false, toolbar: true, title: \"Sign Tool\"\n};\nlet {GlobalStateProvider, useGlobalState} = createGlobalState(initialState);\n\nlet useCurrentState = useGlobalState;\nexport {GlobalStateProvider, DEFAULT_THEME, useCurrentState};","import axios from \"axios\";\n\nlet debug = window.location.host.indexOf(\"localhost\") !== -1;\nconst ENDPOINT = debug ? \"http://localhost:5029\" : \"https://signme.io\";\nlet token = null;\n\nfunction url(uri) {\n return ENDPOINT + \"/api/v1/\" + uri;\n}\n\nfunction configure(config) {\n if (!config) config = {headers: {}};\n if (!config.headers) {\n config.headers = {};\n }\n if (token) {\n config.headers.Authorization = token;\n }\n return config;\n}\n\n\nasync function apiPost(uri, data, config) {\n config = configure(config);\n return await axios.post(url(uri), data, config);\n}\n\nasync function apiPut(uri, data, config) {\n config = configure(config);\n return await axios.put(url(uri), data, config);\n}\n\nasync function apiGet(uri, config) {\n config = configure(config);\n return await axios.get(url(uri), config);\n}\n\nasync function apiDelete(uri, config) {\n config = configure(config);\n return await axios.delete(url(uri), config);\n}\n\nfunction apiSetAccessToken(newTok) {\n token = newTok;\n}\n\nlet apiURL = url;\n\nexport {apiPost, apiDelete, apiPut, apiURL, apiGet, url, configure, apiSetAccessToken};","import React, {useEffect} from 'react';\nimport PropTypes from 'prop-types';\nimport {withStyles} from '@material-ui/core/styles';\nimport AppBar from '@material-ui/core/AppBar';\nimport Toolbar from '@material-ui/core/Toolbar';\nimport Typography from '@material-ui/core/Typography';\nimport Button from '@material-ui/core/Button';\nimport IconButton from '@material-ui/core/IconButton';\nimport MenuIcon from '@material-ui/icons/Menu';\nimport {withRouter} from \"react-router-dom\";\nimport {useCurrentState} from \"../globalState\";\nimport {apiGet, apiSetAccessToken} from \"../api\";\n\nconst styles = {\n root: {\n flexGrow: 1,\n },\n grow: {\n flexGrow: 1,\n },\n menuButton: {\n marginLeft: -12,\n marginRight: 20,\n },\n};\n\nconst LinkButton = (props) => {\n const {\n history,\n location,\n match,\n staticContext,\n to,\n onClick,\n ...rest\n } = props;\n return (\n {\n onClick && onClick(event);\n history.push(to);\n }}\n />\n )\n};\n\nLinkButton.propTypes = {\n to: PropTypes.string.isRequired,\n children: PropTypes.node.isRequired\n};\n\nlet LinkButtoned = withRouter(LinkButton);\n\nfunction ButtonAppBar(props) {\n const {classes} = props;\n let [user, setUser] = useCurrentState(\"user\");\n let [title, _] = useCurrentState(\"title\");\n let [toolbar, setToolbar] = useCurrentState(\"toolbar\");\n useEffect(() => {\n let tok = window.localStorage.getItem(\"user_access_token\");\n apiSetAccessToken(tok);\n apiGet(\"user/0\").then((res) => {\n setUser(res.data.user);\n });\n }, [classes.root]);\n\n\n let loggedIn = Login;\n\n if (user.id) {\n loggedIn = \n Hello, {user.name}\n Requests\n Identities\n Access tokens\n Logout\n ;\n }\n\n return (\n
\n {toolbar ?\n \n \n \n {title}\n \n {loggedIn}\n \n : null}\n
\n );\n}\n\nButtonAppBar.propTypes = {\n classes: PropTypes.object.isRequired,\n};\n\nexport default withStyles(styles)(ButtonAppBar);","import {configure, url} from \"./api\";\nimport {useCurrentState} from \"./globalState\";\nimport {useEffect, useState} from 'react';\nimport axios from 'axios';\nimport hash from 'hash-object';\n\nconst {CancelToken} = axios;\n\n/**\n * The object returned by the useAPI hook.\n * @typedef {Object} useAPIOutput\n * @property {Object|undefined} data - The data attribute from the axios response.\n * @property {Object|undefined} response - The axios response.\n * @property {Object|undefined} error - The axios error object if an error occurs.\n * @property {boolean} isLoading - Indicates if their is a pending API call.\n * @property {setDataFunc} setData - Set the response data object.\n */\n\n/**\n * `setData` property of `useAPIOutput`\n * @typedef {function} setDataFunc\n * @param {Object[]} newData - New data array that overwrites current data.\n */\n\n/**\n * React hook used to make a an API call using axios.\n *\n * Allows you to pass an [axios config object](https://github.com/axios/axios#request-config), for complete control of the request being sent.\n *\n * @param {string} uri - URL that the API call is made to.\n * @param {Object} config={} - Axios config object passed to the axios.request method.\n * @returns {useAPIOutput} output\n */\nfunction useAPI(uri, config = {}) {\n uri = url(uri);\n if (!config.headers) {\n config.headers = {};\n }\n config = configure(config);\n const [state, setState] = useState({\n response: undefined,\n error: undefined,\n isLoading: true\n });\n const [retry, doRetry] = useState(1);\n\n const configHash = hash(config);\n\n useEffect(() => {\n setState({...state, isLoading: true});\n\n const source = CancelToken.source();\n axios(uri, {\n ...config,\n cancelToken: source.token\n })\n .then(response => {\n setState({error: undefined, response, isLoading: false});\n })\n .catch(error => {\n if (axios.isCancel(error)) {\n console.log('Request canceled by cleanup', error.message);\n } else {\n setState({error, response: undefined, isLoading: false});\n }\n });\n\n return () => {\n source.cancel('useEffect cleanup.');\n };\n }, [url, configHash, retry]);\n\n const {response, error, isLoading} = state;\n\n function setData(newData) {\n // Used to update state from component\n const newResponse = {...response, data: newData};\n setState({...state, response: newResponse});\n }\n\n const data = response ? response.data : undefined;\n return {data, response, error, isLoading, setData, doRetry};\n}\n\nfunction useToolbar(back) {\n if (back === undefined) {\n back = true;\n }\n let [toolbar, setToolbar] = useCurrentState(\"toolbar\");\n useEffect(() => {\n return () => {\n setToolbar(back)\n };\n }, []);\n return [toolbar, setToolbar];\n}\n\nfunction useTitle(back) {\n if (back === undefined) {\n back = \"\";\n }\n let [title, setTitle] = useCurrentState(\"title\");\n useEffect(() => {\n return () => {\n setTitle(back)\n };\n }, []);\n return [title, setTitle];\n}\n\nexport {useAPI, useToolbar, useTitle};","import React from 'react';\nimport TextField from '@material-ui/core/TextField';\n/* eslint-enable */\nimport {ValidatorComponent} from 'react-form-validator-core';\n\nexport default class TextValidator extends ValidatorComponent {\n\n render() {\n /* eslint-disable no-unused-vars */\n const {\n error,\n errorMessages,\n validators,\n requiredError,\n helperText,\n validatorListener,\n withRequiredValidator,\n ...rest\n } = this.props;\n const {isValid} = this.state;\n return (\n \n );\n }\n}","\nfunction snackbar(msg, action) {\n if (snackbar.setMessage) {\n snackbar.setMessage(msg, action);\n }\n}\n\nexport default snackbar;","let lodash = require(\"lodash\");\n\nfunction spawnConfirmation(spec) {\n if (!spec) {\n spec = {};\n }\n spec.id = spec.id || Date.now();\n spec.setState = () => {\n };\n spec.close = () => {\n };\n let prom = new Promise((resolve, reject) => {\n spec.resolve = resolve;\n spec.reject = reject;\n });\n spec.promise = prom;\n\n if (!spawnConfirmation.setDialogs) {\n spec.reject();\n return prom;\n }\n\n prom.finally(() => {\n spawnConfirmation.setDialogs(spawnConfirmation.getDialogs().filter((xspec) => xspec.id !== spec.id));\n });\n let current = spawnConfirmation.getDialogs();\n let existing = lodash.find(current, {id: spec.id});\n if (!existing) {\n spawnConfirmation.setDialogs([spec, ...current]);\n } else {\n prom = existing.promise;\n }\n return prom;\n}\n\nexport default spawnConfirmation;","import React, {useEffect} from 'react';\nimport {useDropzone} from 'react-dropzone';\nimport {Typography} from \"@material-ui/core\";\nimport {useTranslation} from \"react-i18next\";\n\nfunction Basic(props) {\n const {acceptedFiles, getRootProps, getInputProps} = useDropzone();\n const {t, i18n} = useTranslation();\n\n const files = acceptedFiles.map(file => (\n
  • \n {file.path} - {file.size} bytes\n
  • \n ));\n\n useEffect(() => {\n props.onFiles(acceptedFiles);\n }, [acceptedFiles.length]);\n\n return (\n
    \n
    \n \n

    {t(\"ui_pad_drag_drop\")}

    \n
    \n \n
    \n
    \n );\n}\n\nexport default Basic;","import React, {useState} from \"react\";\nimport TextValidator from \"./TextValidator\";\nimport FormControl from \"@material-ui/core/FormControl\";\nimport InputLabel from \"@material-ui/core/InputLabel\";\nimport Select from \"@material-ui/core/Select\";\nimport MenuItem from \"@material-ui/core/MenuItem\";\nimport FormHelperText from \"@material-ui/core/FormHelperText\";\nimport FileUpload from \"./FileUpload\";\nimport {apiURL} from \"../api\";\nimport TextField from \"@material-ui/core/es/TextField/TextField\";\nimport Checkbox from \"@material-ui/core/Checkbox\";\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\nimport FormLabel from \"@material-ui/core/FormLabel\";\nimport RadioGroup from \"@material-ui/core/RadioGroup\";\nimport Radio from \"@material-ui/core/Radio\";\n\nfunction GenerateInput(props) {\n let [value, setValue] = useState(props.defaultValue || \"\");\n let [error, setError] = useState(\"\");\n let [disabled, setDisabled] = useState(false);\n let [customStyles, setCustomStyles] = useState({});\n\n let {...other} = props;\n if (other.fullWidth === undefined) {\n other.fullWidth = true;\n }\n let field = null;\n if (props.type === \"select\") {\n field =
    \n {props.label ? {props.label} : null}\n setValue(ev.target.value)}\n >\n {!props.required ? \n None\n : null}\n {props.selection.map((item, index) => {item.label})}\n \n {error !== \"\" || props.help ? {error === \"\" ? props.help : error} : null}\n
    ;\n } else if (props.type === \"file\") {\n field =
    \n \n {props.label ? {props.label} : null}\n
    \n setValue(props.multi ? files : files[0])}/>\n
    \n
    \n {value && typeof value === \"string\" ?\n {\"\"}/ : null}\n
    \n {error !== \"\" || props.help ?\n {error === \"\" ? props.help : error} : null}\n
    \n
    \n } else if (props.type === \"hidden\") {\n field = setValue(event.target.value)}/>\n } else if (props.type === \"plain_textarea\") {\n field = \n } else if (props.type === \"checkbox\") {\n\n field = setValue(event.target.checked)}\n value={true}\n />\n }\n label={props.label}\n />;\n } else if (props.type === \"radio\") {\n\n field = \n {props.label ? {props.label} : null}\n setValue(event.target.value)}>\n {props.selection.map((item, index) => } label={item.label}/>)}\n \n ;\n } else {\n\n let textarea = props.type === \"textarea\";\n field = setValue(event.target.value)}\n margin=\"normal\"\n variant=\"outlined\"\n {...other}\n />;\n }\n\n return {\n value,\n error,\n setError,\n setDisabled,\n disabled,\n setValue,\n field,\n setCustomStyles\n };\n}\n\nfunction GenerateInputs(specs) {\n let out = {};\n for (let spec of Object.keys(specs)) {\n out[spec] = GenerateInput(specs[spec]);\n out[spec].name = spec;\n }\n out.toData = () => {\n let nout = {};\n for (let spec of Object.keys(specs)) {\n nout[spec] = out[spec].value;\n }\n return nout;\n };\n\n out.toFormData = () => {\n const formData = new FormData();\n for (let spec of Object.keys(specs)) {\n formData.append(spec, out[spec].value);\n }\n return formData;\n };\n\n out.disableAll = (state) => {\n for (let spec of Object.keys(specs)) {\n out[spec].setDisabled(state);\n }\n };\n return out;\n}\n\nexport {GenerateInput, GenerateInputs};","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {withStyles} from '@material-ui/core/styles';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport Grid from \"@material-ui/core/Grid\";\nimport {Typography} from \"@material-ui/core\";\nimport Button from \"@material-ui/core/Button\";\n\nconst styles = theme => ({\n progress: {\n margin: theme.spacing.unit * 2,\n },\n});\n\nfunction FailedLoading(props) {\n const {classes} = props;\n return (\n
    \n \n \n Failed loading\n
    \n \n
    \n
    \n \n
    \n );\n}\n\nFailedLoading.propTypes = {\n classes: PropTypes.object.isRequired,\n};\n\nexport default withStyles(styles)(FailedLoading);","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {withStyles} from '@material-ui/core/styles';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport Grid from \"@material-ui/core/Grid\";\n\nconst styles = theme => ({\n progress: {\n margin: theme.spacing.unit * 2,\n },\n});\n\nfunction CircularIndeterminate(props) {\n const {classes} = props;\n return (\n
    \n \n \n \n \n \n
    \n );\n}\n\nCircularIndeterminate.propTypes = {\n classes: PropTypes.object.isRequired,\n};\n\nexport default withStyles(styles)(CircularIndeterminate);","import {useCurrentState} from \"../globalState\";\nimport {useAPI} from \"../stateHelpers\";\nimport ListItemText from \"@material-ui/core/ListItemText\";\nimport List from \"@material-ui/core/List\";\nimport ListItem from \"@material-ui/core/ListItem\";\nimport React, {useRef, useState} from \"react\";\nimport {withRouter} from \"react-router-dom\";\nimport {IconButton, ListItemSecondaryAction, Typography} from \"@material-ui/core\";\nimport {ValidatorForm} from \"react-form-validator-core\";\nimport TextValidator from \"./TextValidator\";\nimport Card from \"@material-ui/core/Card\";\nimport CardContent from \"@material-ui/core/CardContent\";\nimport CardActions from \"@material-ui/core/CardActions\";\nimport Button from \"@material-ui/core/Button\";\nimport Delete from \"@material-ui/icons/Delete\";\nimport {apiDelete, apiPost} from \"../api\";\nimport snackbar from \"../snackbar\";\nimport spawnConfirmation from \"../confirmationDialog\";\nimport {GenerateInputs} from \"./GenericInputField\";\nimport FailedLoading from \"./FailedLoading\";\nimport CircularLoader from \"./CircularLoader\";\nimport {useTranslation} from \"react-i18next\";\n\nfunction RequestsPage(props) {\n\n let [title, setTitle] = useCurrentState(\"title\");\n\n /*\n The defaultValue is only accepted once - from that point on the state is handled by inner callbacks of react\n */\n\n let senders = useAPI(\"identity\");\n const {data = [], error, isLoading, setData, doRetry} = useAPI(\"sign_request\");\n const inputRef = useRef(null);\n const {t, i18n} = useTranslation();\n\n\n let getSenders = () => {\n return (senders.data || []).map((item) => {\n return {label: item.name + ' (' + item.email + ')', key: item.email};\n });\n };\n\n let inputs = GenerateInputs({\n url: {\n label: 'URL',\n type: 'url',\n help: 'enter a valid url the document is located',\n validators: ['required'],\n errorMessages: ['this field is required', 'url is not valid']\n },\n callback_url: {\n label: 'Callback url',\n help: 'url where the events will be posted to',\n type: 'url'\n },\n sender: {\n required: true,\n label: 'Sender',\n type: 'select',\n selection: getSenders(),\n help: 'select which sender to use for sending',\n validators: ['required'],\n errorMessages: ['this field is required']\n },\n title: {\n label: 'Title',\n help: 'document title'\n },\n emails: {\n label: 'E-mails',\n type: 'text',\n help: 'comma separated value list of e-mails that will sign this',\n validators: ['required']\n }\n });\n\n if (!senders.isLoading && !inputs.sender.value && senders.data) {\n inputs.sender.setValue(senders.data[0].email);\n }\n\n setTitle(\"Requests\");\n\n const {\n history,\n ...rest\n } = props;\n\n if (error) {\n return \n }\n\n if (isLoading) {\n return \n }\n\n let loading = inputs.emails.disabled;\n\n let deleteRequest = async (item) => {\n spawnConfirmation().then(() => apiDelete(\"sign_request/\" + item.unique_id).then(() => {\n setData(data.filter((itm) => itm.id !== item.id));\n snackbar(\"Deleted.\");\n }, (e) => {\n console.error(e);\n snackbar(\"Failed deleting. Please try again!\");\n }));\n };\n\n let submit = () => {\n let signers = inputs.emails.value.split(\",\").map((item) => {\n return {email: item.trim()};\n });\n inputs.disableAll(true);\n apiPost(\"sign_request\", {\n document_url: inputs.url.value,\n document_name: inputs.title.value,\n callback_url: inputs.callback_url.value,\n sender: {\n email: inputs.sender.value\n },\n signers: signers\n }).then(res => {\n snackbar(\"Added!\");\n doRetry();\n }, res => {\n snackbar(\"Error: \" + res.response.data.message);\n }).finally(() => inputs.disableAll(false));\n };\n\n return (\n
    \n
    \n
    \n \n \n Quick sign request add\n
    \n \n
    \n {inputs.title.field}\n
    \n
    \n {inputs.url.field}\n
    \n
    \n {inputs.emails.field}\n
    \n
    \n {inputs.sender.field}\n
    \n
    \n {inputs.callback_url.field}\n
    \n
    \n
    \n
    \n \n \n \n
    \n
    \n
    \n \n {(data || []).map((item) => history.push(\"/sign-request/\" + item.unique_id)}\n key={item.id} alignItems=\"flex-start\">\n \n \n deleteRequest(item)}>\n \n \n \n )}\n \n
    \n )\n}\n\nexport default withRouter(RequestsPage);","import React from 'react';\nimport { createMuiTheme } from '@material-ui/core/styles';\nimport blueGray from '@material-ui/core/colors/blueGrey';\nimport CssBaseline from '@material-ui/core/CssBaseline';\nimport deepOrange from \"@material-ui/core/colors/deepOrange\";\nimport {useCurrentState} from \"./globalState\";\nimport ThemeProvider from \"@material-ui/styles/ThemeProvider\";\nimport useTheme from \"@material-ui/core/styles/useTheme\";\n\n// A theme with custom primary and secondary color.\n// It's optional.\nconst theme = createMuiTheme({\n palette: {\n primary: {\n light: deepOrange[300],\n main: deepOrange[500],\n dark: deepOrange[700],\n },\n secondary: {\n light: blueGray[300],\n main: blueGray[500],\n dark: blueGray[700],\n },\n },\n typography: {\n useNextVariants: true,\n },\n});\n\nconst themes = {};\n\nfunction withRoot(Component) {\n function WithRoot(props) {\n // MuiThemeProvider makes the theme available down the React tree\n // thanks to React context.\n let [thm, setThm] = useCurrentState(\"theme\");\n\n let k = thm.primary.main.substr(1);\n if (!themes[k]) {\n themes[k] = createMuiTheme({\n palette: {\n primary: {\n main: thm.primary.main\n },\n secondary: {\n main: thm.primary.main\n },\n },\n typography: {\n useNextVariants: true,\n },\n });\n\n }\n\n return (\n \n {/* CssBaseline kickstart an elegant, consistent, and simple baseline to build upon. */}\n \n \n \n );\n }\n\n return WithRoot;\n}\n\nexport default withRoot;\n","import React, {useRef, useState} from \"react\";\nimport {apiPost, apiSetAccessToken} from \"../api\";\nimport TextValidator from \"./TextValidator\";\nimport {ValidatorForm} from \"react-form-validator-core\";\nimport CardContent from \"@material-ui/core/CardContent\";\nimport Card from \"@material-ui/core/Card\";\nimport CardActions from \"@material-ui/core/CardActions\";\nimport Button from \"@material-ui/core/Button\";\nimport uuid4 from \"uuid4\";\nimport {useCurrentState} from \"../globalState\";\n\nlet clearer = null;\n\nfunction LoginForm(props) {\n let [user, setUser] = useCurrentState(\"user\");\n let [title, setTitle] = useCurrentState(\"title\");\n let [userAccessToken, setUserAccessToken] = useCurrentState(\"userAccessToken\");\n let [email, setEmail] = useState(\"\");\n let [password, setPassword] = useState(\"\");\n let [error, setError] = useState(false);\n let [errorText, setErrorText] = useState(\"\");\n let [loading, setLoading] = useState(false);\n const inputRef = useRef(null);\n\n setTitle(\"Login\");\n\n let submit = async () => {\n setLoading(true);\n setError(false);\n let res = null;\n try {\n res = await apiPost(\"login\", {\n email: email,\n password: password,\n device_id: uuid4()\n });\n apiSetAccessToken(res.data.access_token);\n setUserAccessToken(res.data.access_token);\n window.localStorage.setItem(\"user_access_token\", res.data.access_token);\n setUser(res.data.user);\n window.location.href = \"/\";\n } catch (e) {\n setError(true);\n setErrorText(\"incorrect password!\");\n clearTimeout(clearer);\n clearer = setTimeout(() => {\n setErrorText(\"\");\n }, 5000);\n } finally {\n setLoading(false);\n }\n };\n\n\n return
    \n \n
    \n \n
    \n setEmail(event.target.value)}\n margin=\"normal\"\n variant=\"outlined\"\n />\n
    \n
    \n setPassword(event.target.value)}\n margin=\"normal\"\n variant=\"outlined\"\n />\n
    \n
    \n
    \n
    \n \n \n\n \n \n
    ;\n}\n\nfunction LoginPage(props) {\n return
    \n}\n\nexport {LoginForm, LoginPage};","import React from \"react\";\nimport CardContent from \"@material-ui/core/CardContent\";\nimport Card from \"@material-ui/core/Card\";\nimport CardActions from \"@material-ui/core/CardActions\";\n\nfunction ContentBox(props) {\n return
    \n \n
    \n {props.children}\n
    \n
    \n {props.actions ?\n \n {props.actions}\n : null}\n
    ;\n}\n\nexport default ContentBox;","import React, {useRef} from \"react\";\nimport {ValidatorForm} from \"react-form-validator-core\";\nimport ContentBox from \"./ContentBox\";\nimport Button from \"@material-ui/core/Button\";\nimport {GenerateInputs} from \"./GenericInputField\";\nimport {apiPost} from \"../api\";\nimport snackbar from \"../snackbar\";\nimport {Typography} from \"@material-ui/core\";\nimport {useCurrentState} from \"../globalState\";\n\nfunction AccountSettings(props) {\n\n const inputRef = useRef(null);\n let [user, setUser] = useCurrentState(\"user\");\n\n let inputs = GenerateInputs({\n email: {\n label: 'E-mail',\n type: 'email',\n help: 'you will have to confirm your account again if you change the e-mail.',\n defaultValue: user.email,\n validators: ['required', 'isEmail'],\n errorMessages: ['this field is required', 'email is not valid']\n },\n name: {\n defaultValue: user.name,\n label: 'Name'\n },\n password: {\n label: 'Password',\n type: 'password'\n },\n current_password: {\n label: 'Current Password',\n type: 'password'\n }\n });\n\n let submit = async () => {\n if (inputs.password.value && !inputs.current_password.value) {\n inputs.current_password.setError(\"please enter your current password\");\n return;\n }\n inputs.disableAll(true);\n try {\n let res = await apiPost(\"update_user\", inputs.toData());\n snackbar(\"Saved.\");\n setUser(res.data);\n inputs.password.setValue(\"\");\n inputs.current_password.setValue(\"\");\n } catch (e) {\n snackbar(e.response.data.message);\n } finally {\n inputs.disableAll(false)\n }\n };\n\n return
    \n \n Save}>\n
    \n Details\n
    \n {inputs.name.field}\n
    \n
    \n {inputs.email.field}\n
    \n
    \n Change Password\n
    \n {inputs.current_password.field}\n
    \n
    \n {inputs.password.field}\n
    \n
    \n \n
    \n
    ;\n\n}\n\n\nexport default AccountSettings;","import {useCurrentState} from \"../globalState\";\nimport React from \"react\";\nimport AccountSettings from \"./AccountSettings\";\n\nfunction UserPage(props) {\n let [user, _] = useCurrentState(\"user\");\n let [title, setTitle] = useCurrentState(\"title\");\n setTitle(\"User Settings\");\n return \n {user.email ? : null}\n ;\n}\n\nexport default UserPage;","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {withStyles} from '@material-ui/core/styles';\nimport Paper from '@material-ui/core/Paper';\n\nconst styles = theme => ({\n root: {\n ...theme.mixins.gutters(),\n paddingTop: theme.spacing.unit * 2,\n paddingBottom: theme.spacing.unit * 2,\n },\n});\n\nfunction PaperSheet(props) {\n const {classes} = props;\n\n return (\n
    \n \n {props.children}\n \n
    \n );\n}\n\nPaperSheet.propTypes = {\n classes: PropTypes.object.isRequired,\n};\n\nexport default withStyles(styles)(PaperSheet);","import React from \"react\";\nimport PaperSheet from \"./PaperSheet\";\nimport {Typography} from \"@material-ui/core\";\nimport {useCurrentState} from \"../globalState\";\n\nfunction IndexPage() {\n let [_, setTitle] = useCurrentState(\"title\");\n\n setTitle(\"Dashboard\");\n return
    \n \n Mini dashboard here\n \n
    \n}\n\nexport default IndexPage;","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {withStyles} from '@material-ui/core/styles';\nimport Button from '@material-ui/core/Button';\nimport Snackbar from '@material-ui/core/Snackbar';\nimport IconButton from '@material-ui/core/IconButton';\nimport snackbar from \"../snackbar\";\nimport CloseIcon from '@material-ui/icons/Close';\n\nconst styles = theme => ({\n close: {\n padding: theme.spacing.unit / 2,\n },\n});\n\nclass ConsecutiveSnackbars extends React.Component {\n queue = [];\n\n state = {\n open: false,\n messageInfo: {},\n };\n\n componentWillMount() {\n snackbar.setMessage = (message, config) => {\n config = config || {};\n this.queue.push({\n message,\n config,\n key: new Date().getTime(),\n });\n\n if (this.state.open) {\n // immediately begin dismissing current message\n // to start showing new one\n this.setState({open: false});\n } else {\n this.processQueue();\n }\n };\n }\n\n\n processQueue = () => {\n if (this.queue.length > 0) {\n this.setState({\n messageInfo: this.queue.shift(),\n open: true,\n });\n }\n };\n\n handleClose = (event, reason) => {\n if (reason === 'clickaway') {\n return;\n }\n this.setState({open: false});\n };\n\n handleExited = () => {\n this.processQueue();\n };\n\n render() {\n const {classes} = this.props;\n const {messageInfo} = this.state;\n let actions = [\n \n \n ,\n ];\n\n if (messageInfo && messageInfo.config && messageInfo.config.action) {\n actions.unshift(\n )\n }\n\n return (\n
    \n {messageInfo.message}}\n action={actions}\n />\n
    \n );\n }\n}\n\nConsecutiveSnackbars.propTypes = {\n classes: PropTypes.object.isRequired,\n};\n\nexport default withStyles(styles)(ConsecutiveSnackbars);","import React from 'react';\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport { withTranslation } from 'react-i18next';\n\nclass AlertDialog extends React.Component {\n state = {\n open: false,\n okDisabled: false,\n cancelDisabled: false,\n contentText: \"\"\n };\n\n doClose = (decision) => {\n this.decision = decision;\n this.setState({open: false});\n };\n\n finalize = () => {\n let decision = this.decision;\n this.props.spec[decision ? 'resolve' : 'reject'](decision);\n };\n\n componentDidMount() {\n let spec = this.props.spec;\n let t = this.props.t;\n spec.close = () => {\n this.doClose(false);\n };\n spec.setState = (newState) => {\n Object.assign(spec, newState);\n this.setState(newState);\n };\n this.setState({open: true, content: spec.content, contentText: spec.contentText, title: spec.title || t(\"dialog_confirm\")});\n }\n\n handleClose = (decision) => () => {\n let maybePromise = null;\n if (decision) {\n if (this.props.spec.ok) {\n maybePromise = this.props.spec.ok();\n }\n\n if (this.props.spec.ok === false || maybePromise === false) {\n return;\n }\n\n } else {\n if (this.props.spec.cancel) {\n maybePromise = this.props.spec.cancel();\n }\n }\n\n\n if (maybePromise) {\n maybePromise.then(() => this.doClose(decision));\n } else {\n this.doClose(decision);\n }\n };\n\n render() {\n let spec = this.props.spec;\n let state = this.state;\n let t = this.props.t;\n return (\n
    \n this.doClose(false)}\n >\n {state.title}\n \n {state.content ? state.content : \n {state.contentText || t(\"dialog_proceed\")}\n }\n \n \n {spec.cancelText !== false ? : null}\n {spec.okText !== false ? : null}\n \n \n
    \n );\n }\n}\n\nAlertDialog = withTranslation()(AlertDialog);\nexport default AlertDialog;","import {useCurrentState} from \"../globalState\";\nimport AlertDialog from \"./AlertDialog\";\nimport React from \"react\";\nimport spawnConfirmation from \"../confirmationDialog\";\n\nfunction ConfirmationDialogs() {\n let [dialogs, setDialogs] = useCurrentState(\"confirmationDialogs\");\n\n spawnConfirmation.setDialogs = setDialogs;\n spawnConfirmation.getDialogs = () => dialogs;\n\n return
    \n {dialogs.map((spec, index) => )}\n
    \n}\n\n\nexport default ConfirmationDialogs;","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {withStyles} from '@material-ui/core/styles';\nimport Avatar from '@material-ui/core/Avatar';\nimport Grid from '@material-ui/core/Grid';\n\nconst styles = {\n avatar: {\n margin: 10,\n },\n bigAvatar: {\n width: 48,\n height: 48,\n },\n};\n\nfunction SmallAvatar(props) {\n const {classes, ...other} = props;\n return ();\n}\n\nfunction BigAvatar(props) {\n const {classes, ...other} = props;\n return ();\n}\n\n\nSmallAvatar = withStyles(styles)(SmallAvatar);\nBigAvatar = withStyles(styles)(BigAvatar);\n\nexport {SmallAvatar, BigAvatar};","import {useCurrentState} from \"../globalState\";\nimport {useAPI} from \"../stateHelpers\";\nimport ListItemText from \"@material-ui/core/ListItemText\";\nimport List from \"@material-ui/core/List\";\nimport ListItem from \"@material-ui/core/ListItem\";\nimport React, {useRef, useState} from \"react\";\nimport {withRouter} from \"react-router-dom\";\nimport {IconButton, ListItemSecondaryAction, Typography} from \"@material-ui/core\";\nimport {ValidatorForm} from \"react-form-validator-core\";\nimport Card from \"@material-ui/core/Card\";\nimport CardContent from \"@material-ui/core/CardContent\";\nimport CardActions from \"@material-ui/core/CardActions\";\nimport Button from \"@material-ui/core/Button\";\nimport Delete from \"@material-ui/icons/Delete\";\nimport {apiDelete, apiPost, apiPut, apiURL} from \"../api\";\nimport snackbar from \"../snackbar\";\nimport spawnConfirmation from \"../confirmationDialog\";\nimport {GenerateInputs} from \"./GenericInputField\";\nimport FailedLoading from \"./FailedLoading\";\nimport CircularLoader from \"./CircularLoader\";\nimport Avatar from \"@material-ui/core/Avatar\";\nimport {BigAvatar} from \"./Avatars\";\nimport ListItemAvatar from \"@material-ui/core/ListItemAvatar\";\n\nconst themes = [\"red\", \"pink\", \"purple\", \"deepPurple\", \"indigo\", \"blue\", \"lightBlue\", \"cyan\", \"teal\", \"green\", \"lightGreen\", \"lime\", \"yellow\", \"amber\", \"orange\", \"deepOrange\", \"brown\", \"grey\", \"blueGrey\"].map((t) => {\n return {key: t, label: t};\n});\n\nconst themesShades = [\n 50,\n 100,\n 200,\n 300,\n 400,\n 500,\n 600,\n 700,\n 800,\n 900,\n \"A100\",\n \"A200\",\n \"A400\",\n \"A700\",\n].map((t) => {\n return {key: t.toString(), label: t.toString()}\n});\n\nfunction Identities(props) {\n\n let [title, setTitle] = useCurrentState(\"title\");\n const {data = [], error, isLoading, setData, doRetry} = useAPI(\"identity\");\n const inputRef = useRef(null);\n\n let inputs = GenerateInputs({\n id: {\n type: 'hidden'\n },\n name: {\n label: 'Name',\n validators: ['required'],\n errorMessages: ['this field is required']\n },\n email: {\n label: 'E-mail',\n type: 'email',\n help: 'you will have to confirm this e-mail account.',\n validators: ['required', 'isEmail'],\n errorMessages: ['this field is required', 'email is not valid']\n },\n phone: {\n label: 'Phone'\n },\n theme: {\n required: true,\n label: 'Theme',\n type: 'color',\n defaultValue: '#f4511e',\n validators: ['required'],\n errorMessages: ['this field is required']\n },\n theme_secondary: {\n required: true,\n label: 'Secondary Theme',\n type: 'color',\n defaultValue: '#546e7a',\n validators: ['required'],\n errorMessages: ['this field is required']\n },\n logo: {\n label: 'Logo',\n defaultValue: null,\n multi: false,\n type: 'file',\n help: 'Upload a file of at least 1024x1024 pixels in size'\n }\n });\n\n\n setTitle(\"Identities\");\n\n const {\n history,\n ...rest\n } = props;\n\n if (error) {\n return \n }\n\n if (isLoading) {\n return \n }\n\n let loading = inputs.name.disabled;\n\n let deleteIdentity = async (item) => {\n spawnConfirmation().then(() => apiDelete(\"identity/\" + item.id).then(() => {\n setData(data.filter((itm) => itm.id !== item.id));\n snackbar(\"Deleted.\");\n }, () => {\n snackbar(\"Failed deleting. Please try again!\");\n }));\n };\n\n let submit = () => {\n inputs.disableAll(true);\n let save;\n if (inputs.id.value) {\n save = apiPut(\"identity/\" + inputs.id.value, inputs.toFormData());\n } else {\n save = apiPost(\"identity\", inputs.toFormData());\n }\n save.then(res => {\n snackbar(\"Saved.\");\n doRetry();\n }, res => {\n snackbar(\"Error: \" + res.response.data.message);\n }).finally(() => inputs.disableAll(false));\n };\n\n let setEdit = (item) => {\n for (let key of Object.keys(inputs)) {\n let field = inputs[key];\n if (field.setValue) {\n field.setValue(item[key]);\n }\n }\n };\n\n let reset = () => {\n for (let key of Object.keys(inputs)) {\n let field = inputs[key];\n if (field.setValue) {\n field.setValue(\"\");\n }\n }\n };\n\n return (\n
    \n
    \n
    \n \n \n
    \n Add new identity\n
    \n \n
    \n {inputs.id.field}\n {inputs.name.field}\n
    \n
    \n {inputs.email.field}\n
    \n
    \n {inputs.phone.field}\n
    \n\n
    \n {inputs.theme.field}\n
    \n\n\n
    \n {inputs.theme_secondary.field}\n
    \n\n\n\n
    \n {inputs.logo.field}\n
    \n
    \n
    \n
    \n
    \n \n \n \n \n
    \n
    \n
    \n \n {(data || []).map((item) => setEdit(item)}\n key={item.id} alignItems=\"flex-start\">\n\n \n {item.logo ? :\n {item.name[0]}}\n \n \n \n deleteIdentity(item)}>\n \n \n \n )}\n \n
    \n )\n}\n\nexport default withRouter(Identities);","import React, {useEffect} from \"react\";\nimport {withRouter} from \"react-router-dom\";\nimport {apiPost} from \"../api\";\nimport snackbar from \"../snackbar\";\nimport {useCurrentState} from \"../globalState\";\n\nfunction LogoutPage(props) {\n\n let [user, setUser] = useCurrentState(\"user\");\n\n useEffect(() => {\n apiPost(\"logout\").then((res) => {\n snackbar(\"Logged out!\");\n setUser(res.data);\n props.history.push(\"/\");\n });\n }, []);\n return
    Logging you out...
    \n}\n\nLogoutPage = withRouter(LogoutPage);\n\nexport default LogoutPage;","import {useCurrentState} from \"../globalState\";\nimport {useAPI} from \"../stateHelpers\";\nimport ListItemText from \"@material-ui/core/ListItemText\";\nimport List from \"@material-ui/core/List\";\nimport ListItem from \"@material-ui/core/ListItem\";\nimport React, {useRef, useState} from \"react\";\nimport {withRouter} from \"react-router-dom\";\nimport {IconButton, ListItemSecondaryAction, Typography} from \"@material-ui/core\";\nimport {ValidatorForm} from \"react-form-validator-core\";\nimport Card from \"@material-ui/core/Card\";\nimport CardContent from \"@material-ui/core/CardContent\";\nimport CardActions from \"@material-ui/core/CardActions\";\nimport Button from \"@material-ui/core/Button\";\nimport Delete from \"@material-ui/icons/Delete\";\nimport {apiDelete, apiPost, apiPut, apiURL} from \"../api\";\nimport snackbar from \"../snackbar\";\nimport spawnConfirmation from \"../confirmationDialog\";\nimport {GenerateInputs} from \"./GenericInputField\";\nimport FailedLoading from \"./FailedLoading\";\nimport CircularLoader from \"./CircularLoader\";\nimport uuid4 from \"uuid4\";\n\n\nfunction AccessTokensPage(props) {\n\n let [title, setTitle] = useCurrentState(\"title\");\n const {data = [], error, isLoading, setData, doRetry} = useAPI(\"user/0/access_token\");\n let [user, setUser] = useCurrentState(\"user\");\n const inputRef = useRef(null);\n\n let inputs = GenerateInputs({\n password: {\n label: 'Your password',\n validators: ['required'],\n type: 'password',\n errorMessages: ['this field is required']\n }\n });\n\n\n setTitle(\"Access Tokens\");\n\n const {\n history,\n ...rest\n } = props;\n\n if (error) {\n return \n }\n\n if (isLoading) {\n return \n }\n\n let loading = inputs.password.disabled;\n\n let deleteAccessToken = async (item) => {\n spawnConfirmation().then(() => apiDelete(\"user/0/access_token/\" + item.id).then(() => {\n setData(data.filter((itm) => itm.id !== item.id));\n snackbar(\"Deleted.\");\n }, () => {\n snackbar(\"Failed deleting. Please try again!\");\n }));\n };\n\n let submit = () => {\n inputs.disableAll(true);\n var dt = inputs.toData();\n dt.email = user.email;\n dt.device_id = uuid4();\n let save = apiPost(\"login\", dt);\n save.then(res => {\n snackbar(\"Saved.\");\n doRetry();\n }, res => {\n snackbar(\"Error: \" + res.response.data.message);\n }).finally(() => inputs.disableAll(false));\n };\n\n\n let reset = () => {\n for (let key of Object.keys(inputs)) {\n let field = inputs[key];\n if (field.setValue) {\n field.setValue(\"\");\n }\n }\n };\n\n return (\n
    \n
    \n
    \n \n \n
    \n Add new access token\n
    \n \n
    \n {inputs.password.field}\n
    \n\n
    \n
    \n
    \n
    \n \n \n \n \n
    \n
    \n
    \n \n {(data || []).map((item) => \n \n \n deleteAccessToken(item)}>\n \n \n \n )}\n \n
    \n )\n}\n\nexport default withRouter(AccessTokensPage);","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {withStyles} from '@material-ui/core/styles';\nimport SwipeableDrawer from '@material-ui/core/SwipeableDrawer';\nimport {useCurrentState} from \"../globalState\";\n\nconst styles = {\n list: {\n width: 250,\n },\n fullList: {\n width: 'auto',\n },\n};\n\nfunction DrawerInfo(props) {\n\n let [drawerInfo, setDrawerInfo] = useCurrentState(\"drawer_info\");\n\n return (\n
    \n setDrawerInfo(false)}\n onOpen={() => setDrawerInfo(true)}\n >{props.children}\n \n
    \n );\n}\n\nDrawerInfo.propTypes = {\n classes: PropTypes.object.isRequired,\n};\n\nexport default withStyles(styles)(DrawerInfo);","import React, {useEffect, useRef, useState} from 'react';\nimport PropTypes from 'prop-types';\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport withMobileDialog from '@material-ui/core/withMobileDialog';\nimport AppBar from \"@material-ui/core/AppBar\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport Toolbar from \"@material-ui/core/Toolbar\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Icon from \"@material-ui/core/Icon\";\nimport {useCurrentState} from \"../globalState\";\n\nfunction TopAppBar(props) {\n let [ref, setRef] = useState(null);\n let [_, setCurrentDialogAppBarWidth] = useCurrentState(\"currentDialogAppBarWidth\");\n useEffect(() => {\n if (ref) {\n setCurrentDialogAppBarWidth(ref.clientHeight);\n }\n }, [ref]);\n return \n \n \n close\n \n \n {props.title}\n \n {props.go}\n \n ;\n}\n\n\nclass ResponsiveDialog extends React.Component {\n state = {\n open: false,\n };\n\n handleClickOpen = () => {\n this.setState({open: true});\n };\n\n handleClose = () => {\n if (this.props.onClose) {\n this.props.onClose();\n }\n this.setState({open: false});\n };\n\n componentDidMount() {\n this.props.api(this.handleClickOpen, this.handleClose);\n }\n\n handleCancel = () => {\n if (this.props.onCancel) {\n this.props.onCancel();\n }\n this.handleClose();\n };\n\n render() {\n const {fullScreen} = this.props;\n\n let go = ;\n\n return (\n
    \n \n {window.innerWidth <= 1024 && false ?\n : null}\n\n {this.props.title ? {this.props.title} : null}\n
    \n {this.props.children}\n
    \n {true ? \n \n {go}\n : null}\n \n
    \n );\n }\n}\n\nResponsiveDialog.propTypes = {\n fullScreen: PropTypes.bool.isRequired,\n};\n\nexport default withMobileDialog()(ResponsiveDialog);\n","import React, {PureComponent} from 'react';\nimport PropTypes from 'prop-types';\nimport SigPad from 'signature_pad';\nimport {debounce} from 'throttle-debounce';\n\nclass SignaturePad extends PureComponent {\n\n static displayName = 'react-signature-pad-wrapper';\n\n static propTypes = {\n width: PropTypes.number,\n height: PropTypes.number,\n options: PropTypes.object,\n redrawOnResize: PropTypes.bool.isRequired,\n debounceInterval: PropTypes.number.isRequired,\n canvasProps: PropTypes.object\n }\n\n static defaultProps = {\n redrawOnResize: false,\n debounceInterval: 150\n }\n\n constructor(props) {\n super(props);\n\n this.state = {canvasWidth: 0, canvasHeight: 0};\n\n this._callResizeHandler = debounce(\n this.props.debounceInterval,\n this.handleResize.bind(this)\n );\n }\n\n componentDidMount() {\n if (this._canvas) {\n if (!this.props.width || !this.props.height) {\n this._canvas.style.width = '100%';\n }\n this.scaleCanvas();\n\n if (!this.props.width || !this.props.height) {\n window.addEventListener('resize', this._callResizeHandler);\n }\n\n this._signaturePad = new SigPad(this._canvas, this.props.options);\n if (this.props.onEnd) {\n this._signaturePad.onEnd = () => {\n this.props.onEnd(this._signaturePad);\n };\n }\n }\n }\n\n componentWillUnmount() {\n if (!this.props.width || !this.props.height) {\n window.removeEventListener('resize', this._callResizeHandler);\n }\n\n this._signaturePad.off();\n }\n\n /**\n * Get the original signature_pad instance.\n */\n get instance() {\n return this._signaturePad;\n }\n\n get canvas() {\n return this._canvas;\n }\n\n set dotSize(dotSize) {\n this._signaturePad.dotSize = dotSize;\n }\n\n get dotSize() {\n return this._signaturePad.dotSize;\n }\n\n set minWidth(minWidth) {\n this._signaturePad.minWidth = minWidth;\n }\n\n get minWidth() {\n return this._signaturePad.minWidth;\n }\n\n set maxWidth(maxWidth) {\n this._signaturePad.maxWidth = maxWidth;\n }\n\n get maxWidth() {\n return this._signaturePad.maxWidth;\n }\n\n set throttle(throttle) {\n this._signaturePad.throttle = throttle;\n }\n\n get throttle() {\n return this._signaturePad.throttle;\n }\n\n set backgroundColor(color) {\n this._signaturePad.backgroundColor = color;\n }\n\n get backgroundColor() {\n return this._signaturePad.backgroundColor;\n }\n\n set penColor(color) {\n this._signaturePad.penColor = color;\n }\n\n get penColor() {\n return this._signaturePad.penColor;\n }\n\n set velocityFilterWeight(weight) {\n this._signaturePad.velocityFilterWeight = weight;\n }\n\n get velocityFilterWeight() {\n return this._signaturePad.velocityFilterWeight;\n }\n\n set onBegin(fn) {\n if (!(fn && typeof fn === 'function')) {\n throw new Error('Invalid argument passed to onBegin()');\n }\n\n this._signaturePad.onBegin = fn;\n }\n\n set onEnd(fn) {\n if (!(fn && typeof fn === 'function')) {\n throw new Error('Invalid argument passed to onEnd()');\n }\n\n this._signaturePad.onEnd = fn;\n }\n\n isEmpty() {\n return this._signaturePad.isEmpty();\n }\n\n clear() {\n this._signaturePad.clear();\n }\n\n fromDataURL(base64String, options) {\n this._signaturePad.fromDataURL(base64String, options);\n }\n\n\n toSVG() {\n let pad = this._signaturePad;\n const pointGroups = pad._data;\n const ratio = Math.max(window.devicePixelRatio || 1, 1);\n const minX = 0;\n const minY = 0;\n const maxX = pad.canvas.width / ratio;\n const maxY = pad.canvas.height / ratio;\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.setAttribute('width', pad.canvas.width.toString());\n svg.setAttribute('height', pad.canvas.height.toString());\n\n pad._fromData(pointGroups, ({\n color,\n curve\n }) => {\n const path = document.createElement('path');\n\n if (!isNaN(curve.control1.x) && !isNaN(curve.control1.y) && !isNaN(curve.control2.x) && !isNaN(curve.control2.y)) {\n const attr = \"M \".concat(curve.startPoint.x.toFixed(3), \",\").concat(curve.startPoint.y.toFixed(3), \" \") + \"C \".concat(curve.control1.x.toFixed(3), \",\").concat(curve.control1.y.toFixed(3), \" \") + \"\".concat(curve.control2.x.toFixed(3), \",\").concat(curve.control2.y.toFixed(3), \" \") + \"\".concat(curve.endPoint.x.toFixed(3), \",\").concat(curve.endPoint.y.toFixed(3));\n path.setAttribute('d', attr);\n path.setAttribute('stroke-width', (curve.endWidth * 2.25).toFixed(3));\n path.setAttribute('stroke', color);\n path.setAttribute('fill', 'none');\n path.setAttribute('stroke-linecap', 'round');\n svg.appendChild(path);\n }\n }, ({\n color,\n point\n }) => {\n const circle = document.createElement('circle');\n const dotSize = typeof pad.dotSize === 'function' ? pad.dotSize() : pad.dotSize;\n circle.setAttribute('r', dotSize.toString());\n circle.setAttribute('cx', point.x.toString());\n circle.setAttribute('cy', point.y.toString());\n circle.setAttribute('fill', color);\n svg.appendChild(circle);\n });\n\n const prefix = 'data:image/svg+xml;base64,';\n const header = '';\n let body = svg.innerHTML;\n\n if (body === undefined) {\n const dummy = document.createElement('dummy');\n const nodes = svg.childNodes;\n dummy.innerHTML = '';\n\n for (let i = 0; i < nodes.length; i += 1) {\n dummy.appendChild(nodes[i].cloneNode(true));\n }\n\n body = dummy.innerHTML;\n }\n\n const footer = '';\n const data = header + body + footer;\n return prefix + btoa(data);\n }\n\n toDataURL(mime) {\n return this._signaturePad.toDataURL(mime);\n }\n\n fromData(data) {\n this._signaturePad.fromData(data);\n }\n\n toData() {\n return this._signaturePad.toData();\n }\n\n off() {\n this._signaturePad.off();\n }\n\n on() {\n this._signaturePad.on();\n }\n\n handleResize() {\n this.scaleCanvas();\n }\n\n scaleCanvas() {\n const ratio = Math.max(window.devicePixelRatio || 1, 1);\n const width = (this.props.width || this._canvas.offsetWidth);\n const height = (this.props.height || this._canvas.offsetHeight);\n\n // Avoid needlessly setting height/width if dimensions haven't changed\n const {canvasWidth, canvasHeight} = this.state;\n if (width === canvasWidth && height === canvasHeight) return;\n\n let data;\n if (this.props.redrawOnResize && this._signaturePad) {\n data = this._signaturePad.toDataURL();\n }\n\n this._canvas.width = width;\n this._canvas.height = height;\n\n this.setState({canvasWidth: width, canvasHeight: height});\n\n const ctx = this._canvas.getContext('2d');\n //ctx.scale(ratio, ratio);\n\n if (this.props.redrawOnResize && this._signaturePad) {\n this._signaturePad.fromDataURL(data);\n } else if (this._signaturePad) {\n this._signaturePad.clear();\n }\n }\n\n render() {\n const {canvasProps} = this.props;\n\n return (\n this._canvas = ref}\n {...canvasProps} />\n );\n }\n\n}\n\nexport default SignaturePad;","import React, {useCallback, useEffect, useRef, useState} from 'react';\nimport PropTypes from 'prop-types';\nimport {withStyles} from '@material-ui/core/styles';\nimport AppBar from '@material-ui/core/AppBar';\nimport Tabs from '@material-ui/core/Tabs';\nimport Tab from '@material-ui/core/Tab';\nimport Typography from '@material-ui/core/Typography';\nimport ResponsiveDialog from \"./ResponsiveDialog\";\nimport {Button, ButtonBase, IconButton} from \"@material-ui/core\";\nimport {useIdb} from 'react-use-idb'\nimport Grid from \"@material-ui/core/Grid\";\nimport snackbar from \"../snackbar\";\nimport Edit from \"@material-ui/icons/Edit\";\nimport useLocalStorage from \"@rehooks/local-storage\";\nimport SignaturePad from \"./SignaturePad\";\nimport Slider from '@material-ui/core/Slider';\nimport {useTranslation} from \"react-i18next\";\nimport {GenerateInputs} from \"./GenericInputField\";\nimport {apiPost} from \"../api\";\nimport {useAPI} from \"../stateHelpers\";\nimport {ValidatorForm} from \"react-form-validator-core\";\nimport * as lodash from \"lodash\";\nimport {useCurrentState} from \"../globalState\";\n\nfunction TabContainer(props) {\n return (\n \n {props.children}\n \n );\n}\n\nTabContainer.propTypes = {\n children: PropTypes.node.isRequired,\n};\n\nconst styles = theme => ({\n root: {\n flexGrow: 1,\n backgroundColor: theme.palette.background.paper,\n },\n});\n\nconst penColors = [\n \"#000000\",\n \"#d8181f\",\n \"#5b5baf\"\n];\n\nfunction SimpleTabs(props) {\n\n let [currentRef, setRef] = useState(null);\n let [value, setValue] = useState(0);\n let [stored, setStored] = useIdb(\"signatures\", []);\n const {classes} = props;\n let [signature, setSignature] = useState({});\n let fontsJSON = useAPI(\"fonts\");\n let [initialSetup, setInitialSetup] = useState(false);\n let [penColor, setPenColor] = useLocalStorage(\"penColor\");\n penColor = \"#000000\";\n let [dotSize, setDotSize] = useLocalStorage(\"dotSize\");\n dotSize = 1;\n let [fontChoice, setFontChoice] = useLocalStorage(\"fontChoice\");\n const {t, i18n} = useTranslation();\n const inputRef = useRef(null);\n const [appBarRef, setAppBarRef] = useState(null);\n const [currentDialogAppBarWidth, _] = useCurrentState(\"currentDialogAppBarWidth\");\n\n\n let getSenders = () => {\n return (fontsJSON.data || []).map((item) => {\n return {label: item.name, key: item.key};\n });\n };\n\n let inputs = GenerateInputs({\n writer: {\n type: 'plain_textarea',\n required: true,\n defaultValue: \"\",\n staticStyles: {\n fontSize: 50\n }\n },\n fonts: {\n label: t(\"Font\"),\n type: 'select',\n selection: getSenders(),\n required: true,\n validators: ['required'],\n errorMessages: ['this field is required']\n },\n signature: {\n label: false,\n defaultValue: null,\n multi: false,\n type: 'file',\n help: t(\"upload_signature_help\")\n }\n });\n\n if (!fontsJSON.isLoading && !inputs.fonts.value && fontsJSON.data) {\n inputs.fonts.setValue(fontsJSON.data[0].key);\n }\n\n useEffect(() => {\n if (inputs.fonts.value) {\n if (fontChoice !== inputs.fonts.value) {\n setFontChoice(inputs.fonts.value);\n }\n let fam = lodash.find(getSenders(), {key: inputs.fonts.value});\n if (!fam) {\n fam = \"\";\n } else {\n fam = fam.label;\n }\n inputs.writer.setCustomStyles({\n color: penColor,\n fontFamily: \"'\" + fam + \"'\"\n });\n }\n\n if (currentRef) {\n currentRef.font = inputs.fonts.value;\n currentRef.fontColor = penColor;\n }\n\n }, [inputs.fonts.value, penColor, currentRef, getSenders().length]);\n\n useEffect(() => {\n if (inputs.writer.value && inputs.writer.value.trim().length) {\n window.formDirty = t(\"leave_without_saving\");\n props.setActionButtonDisabled(false);\n } else {\n props.setActionButtonDisabled(true);\n window.formDirty = null;\n }\n if (currentRef) {\n currentRef.text = inputs.writer.value;\n }\n\n }, [inputs.writer.value, currentRef, props.setActionButtonDisabled]);\n\n useEffect(() => {\n if (inputs.signature.value) {\n apiPost(\"signature_to_base64\", inputs.toFormData()).then((data) => {\n let neww = {\n recorded: Date.now(),\n path: 'data:' + data.data.type + ';base64,' + data.data.base_64\n };\n setSignature(neww);\n setValue(0);\n props.setActionButtonDisabled(false);\n snackbar(t(\"ui_pad_msg_saved\"));\n inputs.signature.setValue(null);\n }, () => {\n snackbar(t(\"ui_pad_unable_to_upload\"));\n inputs.signature.setValue(null);\n });\n }\n }, [props.setActionButtonDisabled, inputs.signature.value]);\n\n if (!penColor) {\n penColor = penColors[0];\n }\n\n useEffect(() => {\n if (signature.path && currentRef) {\n currentRef.clear();\n if (signature.svgx) {\n apiPost(\"convert_svg_to_png\", {svg: signature.svg}).then((res) => {\n currentRef.fromDataURL('data:' + res.data.type + ';base64,' + res.data.base_64, {\n width: currentRef.canvas.width,\n height: currentRef.canvas.height\n });\n }, () => {\n snackbar(t(\"failed_loading_saved_signature\"));\n });\n } else {\n currentRef.fromDataURL(signature.path, {\n width: currentRef.canvas.width,\n height: currentRef.canvas.height\n });\n }\n }\n }, [signature, currentRef]);\n\n useEffect(() => {\n if (currentRef) {\n currentRef.penColor = penColor;\n if (currentRef) {\n currentRef.minWidth = dotSize;\n currentRef.maxWidth = dotSize * 5;\n }\n }\n\n }, [penColor, currentRef]);\n\n\n useEffect(() => {\n if (currentRef) {\n currentRef.tab = value;\n }\n }, [value, currentRef]);\n\n let handleDotSize = useCallback((event, val) => {\n setDotSize(val);\n\n if (currentRef) {\n currentRef.minWidth = val;\n currentRef.maxWidth = val * 5;\n }\n\n }, [currentRef, setDotSize]);\n\n let onDrawed = useCallback((pad) => {\n window.formDirty = t(\"leave_without_saving\");\n\n if (pad) {\n let sizeof = pad.toDataURL().length;\n let total = 0;\n pad._data.forEach((v) => {\n total += v.points.length;\n });\n props.setActionButtonDisabled(total < 15);\n }\n }, [props.setActionButtonDisabled]);\n\n let save = () => {\n let neww = {\n recorded: Date.now(),\n svg: currentRef.toSVG(),\n path: currentRef.toDataURL()\n };\n setStored([neww, ...stored]);\n\n setSignature(neww);\n\n snackbar(t(\"ui_pad_msg_saved\"));\n };\n\n let deleteSignature = () => {\n setStored(stored.filter((stor) => stor.recorded !== signature.recorded));\n clear();\n };\n\n let clear = () => {\n currentRef.clear();\n setSignature({cleared: true});\n props.setActionButtonDisabled(true);\n };\n\n let getAppbarHeight = useCallback(() => {\n if (window.innerWidth >= 1024) {\n return undefined;\n }\n return appBarRef ? appBarRef.clientHeight + currentDialogAppBarWidth : 0;\n }, [appBarRef, currentDialogAppBarWidth]);\n\n useEffect(() => {\n\n if (initialSetup) {\n return;\n }\n\n if (fontChoice && !inputs.fonts.value) {\n inputs.fonts.setValue(fontChoice);\n }\n\n if (!(signature.path || signature.cleared) && props.getImage()) {\n let info = props.getInfo();\n if (info && info.placeholder) {\n let placeholder = info.placeholder;\n let text = placeholder._text || placeholder.text;\n if (text && text !== \"\") {\n inputs.fonts.setValue(placeholder._text_font || placeholder.text_font);\n setPenColor(placeholder._text_color || placeholder.text_color);\n inputs.writer.setValue(placeholder._text || placeholder.text);\n setInitialSetup();\n setValue(1);\n return;\n }\n }\n\n setSignature({\n path: props.getImage()\n });\n setInitialSetup();\n }\n\n }, [initialSetup]);\n\n let ww = 800;\n let padww = 798;\n let padhh = 330;\n let height = 340;\n\n if (window.innerWidth <= 1024) {\n let windowWidth = window.innerWidth;\n let windowHeight = window.innerHeight;\n ww = windowWidth - 2;\n height = windowHeight - 2;\n height = undefined;\n padww = windowWidth - 4;\n padhh = (windowWidth / 2.3) - 4;\n }\n if (!dotSize) {\n dotSize = 1;\n }\n dotSize = parseFloat(dotSize);\n\n let colorPicker =
    \n \n {penColors.map((cc, index) => \n
    setPenColor(cc)}\n className={\"color-circle \" + (cc === penColor ? 'active' : '')}\n style={{backgroundColor: cc}}/>\n )}\n \n
    ;\n\n let setSignatureRef = useCallback((ref) => {\n props.setData(ref);\n if (ref) {\n setRef(ref);\n }\n }, [props]);\n\n let submit = useCallback(() => {\n }, []);\n\n return (\n \n
    \n setAppBarRef(t)} style={{top: currentDialogAppBarWidth}}\n position={window.innerWidth >= 1024 ? 'static' : 'fixed'}>\n setValue(nv)}>\n \n \n \n \n \n \n
    \n
    \n \n \n {t(\"draw_your_signature_here\")}\n \n \n \n\n \n \n \n \n \n \n\n {signature.recorded ? \n \n : null}\n \n \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n\n
    \n \n \n {inputs.fonts.field}\n \n \n
    \n\n
    \n
    \n {t(\"type_your_signature_here\")}\n
    \n {inputs.writer.field}\n
    \n\n
    \n
    \n
    \n
    \n
    \n \n\n \n {inputs.signature.field}\n \n \n
    \n
    \n
    \n
    \n
    \n {stored.map((item, index) => {\n return {\n setValue(0);\n setSignature(item);\n props.setActionButtonDisabled(false);\n }}>\n {\"\"}/\n \n })}\n
    \n
    \n
    \n
    \n );\n}\n\nSimpleTabs.propTypes = {\n classes: PropTypes.object.isRequired,\n};\n\nSimpleTabs = withStyles(styles)(SimpleTabs);\n\nfunction SignaturePadDialog(props) {\n let {action, ...other} = props;\n let [data, setData] = useState(null);\n let [actionButtonDisabled, setActionButtonDisabled] = useState(true);\n return {\n setActionButtonDisabled(true);\n }} action={() => {\n let t = action(data);\n setActionButtonDisabled(true);\n return t;\n }}\n fullScreen={window.innerWidth <= 1024} {...other}>\n \n \n}\n\nexport default SignaturePadDialog;\n\n","export default [\n \"#438708\",\n \"#ff939b\",\n \"#0a3566\",\n \"#00397f\",\n \"#ff8c7c\",\n \"#b4e85c\",\n \"#f9009a\",\n \"#0fc17a\",\n \"#ef819b\",\n \"#e25892\",\n \"#d3b5f2\",\n \"#b8ef8b\",\n \"#068400\",\n \"#7edd11\",\n \"#f98bcc\",\n \"#96c6dd\",\n \"#6d19b7\",\n \"#f2f76a\",\n \"#7ef762\",\n \"#c9ed90\",\n \"#e87dd9\",\n \"#f4a166\",\n \"#25c499\",\n \"#e49eef\",\n \"#dd7d6e\",\n \"#d86154\",\n \"#1c5d9e\",\n \"#f7dd4a\",\n \"#c6dd52\",\n \"#ceab10\",\n \"#f4cc5d\",\n \"#ce0ebb\",\n \"#b1ef77\",\n \"#28549b\",\n \"#f74c0e\",\n \"#b9e88b\",\n \"#d64644\",\n \"#7cbdf9\",\n \"#61d3d1\",\n \"#abe2fc\",\n \"#ef0229\",\n \"#bda3f7\",\n \"#fccc2f\",\n \"#67db9b\",\n \"#562ea0\",\n \"#4ac63f\",\n \"#32d30a\",\n \"#d36ef4\",\n \"#9fa7f4\",\n \"#c2e055\",\n \"#f9f616\",\n \"#80ea60\",\n \"#87b0e5\",\n \"#ff9e59\",\n \"#3588c4\",\n \"#b9f9a7\",\n \"#e21d2d\",\n \"#70bce5\",\n \"#e5c38b\",\n \"#b7772a\",\n \"#e7fc46\",\n \"#1f85d3\",\n \"#ff32d9\",\n \"#e89458\",\n \"#c4a142\",\n \"#1f4689\",\n \"#139932\",\n \"#0093b5\",\n \"#c66bea\",\n \"#04d6b6\",\n \"#db4859\",\n \"#27b4c4\",\n \"#dd39b7\",\n \"#d63ec4\",\n \"#c699ff\",\n \"#8bf97c\",\n \"#2ad332\",\n \"#f9c59a\",\n \"#c0ed38\",\n \"#edbb34\",\n \"#e894b4\",\n \"#c2ddfc\",\n \"#f9cdc2\",\n \"#75e575\",\n \"#eda59a\",\n \"#f4cbab\",\n \"#92ff63\",\n \"#7575ea\",\n \"#dd6172\",\n \"#50ed8a\",\n \"#80ff75\",\n \"#ea5b56\",\n \"#c914c0\",\n \"#6bb4ef\",\n \"#ef5c2b\",\n \"#5ce0e0\",\n \"#84032c\"\n];","import colors from \"../../colors\";\nimport React, {useEffect, useState} from \"react\";\nimport Icon from \"@material-ui/core/Icon\";\n\n\nfunction computePosition(ihp, ivp, iiw, iih, ciw, cih) {\n /*\n ihp - Initial Horizontal Position\n ivp - Initial Vertical Position\n iiw - Initial Image Width\n iih - Initial Image Height\n ciw - Current Image Width\n cih - Current Image Height\n\n returns:\n chp - Current Horizontal Position\n cvp - Current Vertical Position\n */\n let chp = (ihp / iiw) * ciw,\n cvp = (ivp / iih) * cih;\n return [Math.floor(chp), Math.floor(cvp)];\n}\n\nfunction computeStyleFor(page, spec, dimensions) {\n if (!dimensions.width) {\n return {display: 'none'};\n }\n let x = spec.position_x;\n let y = spec.position_y;\n\n let dimns = computePosition(x, y, page.detail.page_width, page.detail.page_height, dimensions.width, dimensions.height);\n let percentBiggerX = dimensions.width / page.detail.page_width;\n let percentBiggerY = dimensions.height / page.detail.page_height;\n let hh = spec.height * percentBiggerY;\n if (isNaN(percentBiggerX)) {\n percentBiggerX = 1;\n }\n if (isNaN(percentBiggerY)) {\n percentBiggerY = 1;\n }\n let top = dimns[1] - (hh / 2);\n if (spec.type === \"manual_position\") {\n hh = spec.height * percentBiggerY;\n top = dimns[1] - (hh);\n }\n // console.log(dimns[0], dimns[1], x, y, percentBiggerY, percentBiggerX, page.detail.page_width, page.detail.page_height, dimensions.width, dimensions.height);\n\n return {\n left: dimns[0],\n top: top,\n width: spec.width * percentBiggerX,\n height: hh\n };\n}\n\n\nfunction hexToRgbA(hex, opacity) {\n var c;\n if (/^#([A-Fa-f0-9]{3}){1,2}$/.test(hex)) {\n c = hex.substring(1).split('');\n if (c.length === 3) {\n c = [c[0], c[0], c[1], c[1], c[2], c[2]];\n }\n c = '0x' + c.join('');\n return 'rgba(' + [(c >> 16) & 255, (c >> 8) & 255, c & 255].join(',') + ', ' + opacity + ')';\n }\n throw new Error('Bad Hex');\n}\n\nfunction getColorByIndex(index, opacity = 0.4) {\n return hexToRgbA(colors[index], opacity);\n}\n\n\nconst styles = {\n root: {\n flexGrow: 1,\n },\n grow: {\n flexGrow: 1,\n },\n menuButton: {\n marginLeft: -12,\n marginRight: 20,\n },\n};\n\nfunction useFractalWidth() {\n let [mw, setMw] = useState(0);\n\n useEffect(() => {\n let handler = () => {\n let cw = window.innerWidth;\n let d = cw * 0.3;\n let sw = cw - d;\n if (cw < 600) {\n sw = cw;\n }\n setMw(sw);\n };\n handler();\n window.addEventListener(\"resize\", handler);\n return () => {\n window.removeEventListener(\"resize\", handler);\n };\n }, []);\n\n return [mw, setMw];\n}\n\nlet arrowPositions = {\n up: keyboard_arrow_up,\n down: keyboard_arrow_down,\n left: keyboard_arrow_left,\n right: keyboard_arrow_right\n};\n\nlet isInViewport = (elem) => {\n let bounding = elem.getBoundingClientRect();\n let has = (\n bounding.top >= 0 &&\n bounding.left >= 0 &&\n bounding.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n bounding.right <= (window.innerWidth || document.documentElement.clientWidth)\n );\n if (!has) {\n return false;\n }\n return bounding;\n};\n\nexport {\n styles, isInViewport, arrowPositions, useFractalWidth, getColorByIndex, hexToRgbA, computeStyleFor, computePosition,\n}","import {useTranslation} from \"react-i18next\";\nimport {GenerateInputs} from \"../GenericInputField\";\nimport React, {useRef} from \"react\";\nimport Typography from \"@material-ui/core/Typography\";\nimport {ValidatorForm} from \"react-form-validator-core\";\n\nfunction WriteCommentBox(props) {\n const {t, i18n} = useTranslation();\n let inputs = GenerateInputs({\n message: {\n required: true,\n defaultValue: props.globalComment,\n label: t(\"dialog_write_comment\"),\n type: \"textarea\"\n }\n });\n\n let inputRef = useRef(null);\n let messageWrapper = useRef(null);\n\n let submit = () => {\n props.setGlobalComment(inputs.message.value);\n };\n\n props.dialog.ok = () => {\n return submit();\n };\n\n return
    \n {props.help || t(\"dialog_write_comment_help\")}\n
    \n \n
    \n {inputs.message.field}\n
    \n
    \n
    \n
    ;\n}\n\nexport default WriteCommentBox;","import {useTranslation} from \"react-i18next\";\nimport React, {useCallback} from \"react\";\nimport lodash from \"lodash\";\nimport confirmationDialog from \"../../confirmationDialog\";\nimport Button from \"@material-ui/core/Button\";\nimport WriteCommentBox from \"./WriteCommentBox\";\n\nfunction WriteComment(props) {\n const {t, i18n} = useTranslation();\n\n let diff = [props.globalComment, props.request, props.signerID];\n let getSigner = useCallback(function () {\n let f = lodash.find(props.request.signers, {\n unique_id: props.signerID,\n });\n\n return f ? f : {};\n }, diff);\n\n let callBox = useCallback(() => {\n let dialog = {\n title: t(\"dialog_write_comment_title\"),\n ok: false\n };\n let data = props.request;\n let signer = getSigner();\n if (signer && (signer.declined || signer.signed)) {\n dialog.title = t(\"your_comment_title\");\n dialog.cancelText = false;\n dialog.okText = t(\"ok\");\n dialog.ok = () => {\n dialog.close();\n };\n dialog.content =
    \n
    \n
    \n {signer.message}\n
    \n
    \n
    ;\n } else {\n dialog.content = ;\n }\n confirmationDialog(dialog)\n }, diff);\n\n let isAddCommentVisible = useCallback(() => {\n let signer = getSigner();\n let d = props.request;\n return ((signer.declined || signer.signed) && signer.message) || ((!signer.signed && !signer.declined) && d && d.sign_request && !d.sign_request.hide_write_comment_button);\n }, diff);\n\n\n let sig = getSigner();\n return
    \n {isAddCommentVisible() ? : null}\n
    \n}\n\nexport default WriteComment;","import React, {useCallback, useEffect, useRef, useState} from \"react\";\nimport $ from \"jquery\";\nimport {IconButton} from \"@material-ui/core\";\nimport {arrowPositions, isInViewport} from \"./utils\";\n\nfunction ArrowGuide(props) {\n\n let [pos, setPos] = useState(\"down\");\n let defaultPaddingBottom = 30;\n let defaultStyles = {\n bottom: defaultPaddingBottom,\n top: undefined,\n left: 'calc(50% - 60px)'\n };\n let [styles, setStyles] = useState(defaultStyles);\n let [lastReference, setLastReference] = useState(null);\n let [lastPlaceholder, setLastPlaceholder] = useState(null);\n let [lastSpec, setLastSpec] = useState([{}, false]);\n let arrowEl = useRef(null);\n\n\n let jumpToLastReference = useCallback(() => {\n if (!lastReference) {\n return;\n }\n let el = $(lastReference);\n let next = el.offset().top - el.outerHeight();\n let tp = $('.top-toolbar').outerHeight();\n if (!tp || isNaN(tp)) {\n tp = 0;\n }\n let more = $(window).height() - (el.outerHeight() * 2) - tp;\n next = next - more;\n if (next < 0) {\n next = 0;\n }\n var diff = next - document.scrollingElement.scrollTop;\n if (diff < 0 || diff < 15) {\n if (lastPlaceholder) {\n lastPlaceholder.openSignInput();\n }\n }\n $([document.documentElement, document.body]).animate({\n scrollTop: next\n }, 1000, undefined, function () {\n $(window).trigger('scroll');\n });\n }, [lastReference, lastPlaceholder]);\n\n\n let reposition = useCallback((providePage, provideElement, lastStyles, lastAllSigned, force) => {\n\n let found = false;\n let where = \"down\";\n let last = null;\n let allSigned = true;\n\n\n for (let item of Object.keys(providePage)) {\n let el = providePage[item];\n if (!el) {\n continue;\n }\n let top = $(window).scrollTop();\n let at = $(el.element).offset().top;\n if (top + window.innerHeight > at) {\n el.setVisible(true);\n }\n }\n\n for (let item of Object.keys(provideElement)) {\n let el = provideElement[item];\n if (!el || !el.element || !props.signerID) {\n continue;\n }\n if (!el.placeholder._image && !el.placeholder.image) { // position self only on first un-signed placeholder\n let scrollTop = $(window).scrollTop();\n allSigned = false;\n let tel = el.element.parentNode;\n last = tel;\n let tEl = $(tel);\n let off = tEl.offset();\n let ports = isInViewport(tel);\n if (ports) {\n setLastReference(tel);\n setLastPlaceholder(el.placeholder);\n found = true;\n if (lastStyles.position === \"fixed\" || force) {\n let arrowElCurr = $(arrowEl.current);\n let nextStyles = {\n ...styles,\n bottom: undefined,\n position: 'absolute',\n top: off.top + ((tEl.height() / 2) - (arrowElCurr.outerHeight() / 2)),\n left: off.left - (arrowElCurr.width() * 1.5)\n };\n lastStyles = nextStyles;\n setStyles(nextStyles);\n setPos(\"right\");\n\n }\n } else {\n // where is the element up or down?\n if (off.top < scrollTop) {\n where = \"up\";\n }\n }\n break;\n }\n }\n\n if (props.signerID && !found && (lastStyles.position !== \"fixed\" || allSigned !== lastAllSigned)) {\n setLastReference(last);\n let left = 'calc(50% - ' + (arrowEl && arrowEl.current ? ($(arrowEl.current).width() / 2) : '60') + 'px)';\n lastAllSigned = allSigned;\n if (allSigned) {\n where = \"up\";\n left = $('#finalizeButton').offset().left;\n }\n\n let next = {\n position: 'fixed',\n bottom: where === \"down\" ? defaultPaddingBottom : undefined,\n top: where === \"up\" ? 65 : undefined,\n left: left\n };\n setPos(where);\n lastStyles = next;\n setStyles(next);\n }\n return [lastStyles, lastAllSigned];\n }, []);\n\n useEffect(() => {\n let lastStyles = {...defaultStyles};\n let lastAllSigned = false;\n let scroll = () => {\n [lastStyles, lastAllSigned] = reposition(props.providePage, props.provideElement, lastStyles, lastAllSigned);\n setLastSpec([lastStyles, lastAllSigned]);\n };\n scroll();\n\n\n $(window).on(\"scroll\", scroll);\n $(window).on(\"imageChanged\", () => {\n setTimeout(scroll, 600);\n });\n\n return () => {\n $(window).off(\"scroll\", scroll);\n $(window).off(\"imageChanged\", scroll)\n };\n }, [props.provideElement, props.providePage]);\n\n useEffect(() => {\n let handle = setInterval(() => {\n //$(window).trigger('imageChanged');\n }, 1000);\n return () => clearInterval(handle);\n }, []);\n\n\n useEffect(() => {\n reposition(props.providePage, props.provideElement, lastSpec[0], lastSpec[1], true);\n }, [props.scale]);\n\n if (!props.signerID) {\n return null;\n }\n\n return
    \n {arrowPositions[pos]}\n
    \n}\n\n\nexport default ArrowGuide;","import React, {useEffect, useRef, useState} from \"react\";\nimport {apiURL} from \"../../api\";\nimport ButtonBase from \"@material-ui/core/ButtonBase\";\n\nfunction PagePlaceholder(props) {\n let {page, placeholder, openSignaturePad, computed, loaded, signerMode, canSign, provideElement} = props;\n let [pelement, setProvideElement] = provideElement;\n let [image, setImage] = useState(null);\n\n let ref = useRef(null);\n\n useEffect(() => {\n if (ref) {\n pelement[placeholder.id] = {\n element: ref.current,\n placeholder: placeholder\n };\n setProvideElement({\n ...pelement\n });\n }\n }, [ref, ref ? ref.current : null, loaded]);\n\n let getImage = () => {\n if (placeholder.image) {\n return apiURL('serve/' + placeholder.image);\n }\n return image;\n };\n let imageEl = getImage() ?\n {\"\"}/ : null;\n\n\n if (!signerMode || !canSign) {\n return
    {imageEl}
    \n }\n\n let openSig = () => {\n openSignaturePad(page, {\n computed: computed,\n placeholder: placeholder,\n set: (newState) => {\n placeholder._text = newState.text;\n placeholder._text_color = newState.text_color;\n placeholder._text_font = newState.text_font;\n }\n }, (image) => {\n placeholder._image = image;\n setImage(image);\n }, image);\n };\n\n placeholder.openSignInput = openSig;\n\n return {imageEl}\n ;\n}\n\n\nexport default PagePlaceholder;","import React, {useCallback, useEffect, useRef, useState} from \"react\";\nimport {apiURL} from \"../../api\";\nimport lodash from \"lodash\";\nimport {CircularProgress} from \"@material-ui/core\";\nimport PagePlaceholder from \"./PagePlaceholder\";\nimport {computeStyleFor, getColorByIndex} from \"./utils\";\n\nfunction PageImage(props) {\n let {page, scale, data, signerMode, providePage, provideElement} = props;\n //let [dimensions, setDimensions] = useState({width: 0, height: 0});\n\n let [loading, setLoading] = useState(true);\n let [error, setError] = useState(false);\n let [loaded, setLoaded] = useState(false);\n let [visible, setVisible] = useState(false);\n let minH = 300;\n let mw = Math.floor(props.mainWidth);\n let [src, setSrc] = useState(props.mainWidth ? apiURL('serve/' + page.image + \"?completed=\" + page.detail.completed + \"&width=\" + (mw * window.devicePixelRatio)) : undefined);\n let ref = useRef(null);\n\n useEffect(() => {\n if (ref) {\n let [pp, setProvidePage] = providePage;\n pp['page-' + page.detail.id] = {\n element: ref.current,\n page: true,\n setVisible: setVisible\n };\n setProvidePage({\n ...pp\n });\n }\n }, [ref, ref ? ref.current : null]);\n\n\n let dimensions = {width: 0, height: 0};\n if (page.detail.page_height) {\n let factor = mw / page.detail.page_width;\n minH = Math.floor(page.detail.page_height * factor);\n dimensions.height = minH;\n dimensions.width = Math.floor(page.detail.page_width * factor);\n }\n let onLoad = (event) => {\n setLoading(false);\n setLoaded(true);\n };\n\n let onError = () => {\n setError(true);\n };\n\n const throttled = useCallback(lodash.throttle((newMainWidth) => {\n if (!page.detail.completed) {\n return;\n }\n\n setSrc(newMainWidth ? apiURL('serve/' + page.image + \"?completed=\" + page.detail.completed + \"&width=\" + (newMainWidth * window.devicePixelRatio)) : undefined);\n }, 1000, {leading: false, trailing: true}), []);\n\n\n useEffect(() => {\n throttled(mw);\n }, [props.mainWidth, mw, scale, throttled]);\n\n let loader = loading ?
    : null;\n\n\n let imageHtml = visible || loaded ? {data.document.name}\n : null;\n\n let declined = false;\n for (let sg of data.signers) {\n if (sg.declined) {\n declined = true;\n }\n }\n\n return
    \n {loader}\n {imageHtml}\n {page.placeholders ? page.placeholders.map((placeholder, index) => {\n\n let sindex = lodash.find(data.signers, {\n id: placeholder.signer_id\n });\n\n let computed = computeStyleFor(page, placeholder, dimensions);\n\n if (!declined && sindex && sindex.unique_id === props.signerID && (!placeholder.signed)) {\n computed.backgroundColor = getColorByIndex(data.signers.indexOf(sindex));\n } else {\n computed.backgroundColor = \"transparent\";\n\n }\n computed.position = \"absolute\";\n computed.display = \"block\";\n computed.textAlign = \"left\";\n computed.visibility = !loaded ? 'hidden' : undefined;\n\n return ;\n }) : null}\n
    ;\n}\n\nexport default PageImage;","import {useTranslation} from \"react-i18next\";\nimport {GenerateInputs} from \"../GenericInputField\";\nimport React, {useRef} from \"react\";\nimport lodash from \"lodash\";\nimport snackbar from \"../../snackbar\";\nimport {apiPut} from \"../../api\";\nimport confirmationDialog from \"../../confirmationDialog\";\nimport Typography from \"@material-ui/core/Typography\";\nimport {ValidatorForm} from \"react-form-validator-core\";\n\n\nfunction ConfirmAndSend(props) {\n\n const {t, _} = useTranslation();\n let inputs = GenerateInputs({\n send_a_copy: {\n defaultValue: false,\n label: t(\"ui_dialog_send_a_copy\"),\n type: 'checkbox'\n },\n message: {\n defaultValue: props.globalComment,\n label: t(\"dialog_plh_confirm\"),\n type: \"textarea\"\n }\n });\n\n let inputRef = useRef(null);\n\n let submit = () => {\n let signatures = [];\n let allSigned = true;\n for (let page of props.data.document.pages) {\n if (!page.placeholders) {\n continue;\n }\n for (let placeholder of page.placeholders) {\n let sindex = lodash.find(props.data.signers, {\n id: placeholder.signer_id\n });\n\n if (!(placeholder.image || placeholder._image || placeholder.signed)) {\n allSigned = false;\n }\n\n if (props.signerID && sindex && sindex.unique_id === props.signerID && placeholder._image) {\n signatures.push({\n id: placeholder.id,\n html_image: placeholder._image,\n text: placeholder._text,\n text_color: placeholder._text_color,\n text_font: placeholder._text_font\n })\n }\n }\n\n }\n\n if (!signatures.length) {\n snackbar(t(\"signatures_missing\"));\n return false;\n }\n props.dialog.setState({\n okDisabled: true,\n cancelDisabled: true\n });\n let datax = {\n signatures: signatures,\n message: inputs.message.value,\n signed: true,\n send_a_copy: false,\n };\n if (inputs.send_a_copy.value) {\n datax.send_a_copy = true;\n }\n return apiPut(\"sign_request_for_signer/\" + props.signerID, datax).then((res) => {\n window.formDirty = false;\n props.reloadData();\n let okText, title, ok, body, dialog, cancelText;\n if (allSigned) {\n body = t(\"signed_doc_download\");\n title = t(\"signed_doc_download_title\");\n cancelText = t(\"Ok\");\n okText = false;\n ok = false;\n // () => {\n // props.documentDownload();\n // }\n } else {\n body = t(\"signed_doc_wait\");\n title = t(\"signed_doc_wait_title\");\n cancelText = false;\n okText = t(\"Ok\");\n ok = () => {\n dialog.close();\n };\n }\n\n setTimeout(() => {\n dialog = {\n title: title,\n ok: ok,\n cancelText: cancelText,\n cancel: () => {\n dialog.close();\n },\n okText: okText,\n };\n dialog.content =
    {body}
    ;\n confirmationDialog(dialog);\n }, 500);\n\n }, function () {\n props.dialog.setState({\n okDisabled: false,\n cancelDisabled: false\n });\n });\n };\n\n props.dialog.ok = () => {\n return submit();\n };\n\n\n return
    \n {props.data && props.data.sign_request.comment_help_text ? props.data.sign_request.comment_help_text : t(\"signed_comment\")}\n
    \n \n
    \n {inputs.message.field}\n
    \n
    \n {inputs.send_a_copy.field}\n
    \n
    \n
    \n
    \n}\n\nexport default ConfirmAndSend;","import {useTranslation} from \"react-i18next\";\nimport {GenerateInputs} from \"../GenericInputField\";\nimport React, {useRef, useState} from \"react\";\nimport snackbar from \"../../snackbar\";\nimport $ from \"jquery\";\nimport {apiPut} from \"../../api\";\nimport Typography from \"@material-ui/core/Typography\";\nimport {ValidatorForm} from \"react-form-validator-core\";\n\nfunction DeclineBox(props) {\n const {t, i18n} = useTranslation();\n let inputs = GenerateInputs({\n message: {\n defaultValue: props.globalComment,\n required: true,\n label: t(\"dialog_plh_decline\"),\n type: \"textarea\"\n }\n });\n\n let [text, setText] = useState(t(\"decline_comment\"));\n\n let inputRef = useRef(null);\n let messageWrapper = useRef(null);\n\n let submit = () => {\n\n if (!inputs.message.value) {\n snackbar(t(\"decline_reason\"));\n if (messageWrapper && messageWrapper.current) {\n $(messageWrapper.current).find('textarea').focus();\n }\n return false;\n }\n\n props.dialog.setState({\n okDisabled: true,\n cancelDisabled: true\n });\n return apiPut(\"sign_request_for_signer/\" + props.signerID, {\n declined: true,\n message: inputs.message.value\n }).then((res) => {\n window.formDirty = false;\n props.reloadData();\n snackbar(t(\"declined\"));\n setText(t(\"declined_message\"));\n inputs.disableAll(true);\n props.dialog.setState({\n okDisabled: true,\n cancelDisabled: true\n });\n }, function () {\n props.dialog.setState({\n okDisabled: false,\n cancelDisabled: false\n });\n });\n };\n\n props.dialog.ok = () => {\n return submit();\n };\n\n return
    \n {text}\n
    \n \n
    \n {inputs.message.field}\n
    \n
    \n
    \n
    \n}\n\nexport default DeclineBox;","import {useTranslation} from \"react-i18next\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Typography from \"@material-ui/core/Typography\";\nimport React from \"react\";\n\nfunction SignRequestNotFound(props) {\n const {t, _} = useTranslation();\n return (\n
    \n \n \n
    \n {t(\"not_found_sign_request_title\")}\n \n {t(\"not_found_sign_request_description\")}\n \n
    \n \n
    \n );\n}\n\nexport default SignRequestNotFound;","import {GenerateInputs} from \"../GenericInputField\";\nimport Typography from \"@material-ui/core/Typography\";\nimport React, {useCallback, useEffect, useRef} from \"react\";\nimport {useTranslation} from \"react-i18next\";\nimport {ValidatorForm} from \"react-form-validator-core\";\nimport {apiPut} from \"../../api\";\nimport snackbar from \"../../snackbar\";\n\nfunction DownloadDocument(props) {\n const {t, i18n} = useTranslation();\n let inputs = GenerateInputs({\n sign_different: {\n defaultValue: \"\",\n label: false,\n selection: [{\n key: \"yes\",\n label: t(\"dialog_download_document_checkbox\"),\n }, {\n key: \"no\",\n label: t(\"dialog_download_document_checkbox2\"),\n }],\n type: 'radio'\n },\n comment: {\n defaultValue: '',\n label: t(\"dialog_plh_confirm\"),\n type: \"textarea\"\n }\n });\n let inputRef = useRef(null);\n let submit = useCallback(() => {\n props.dialog.send(inputs.sign_different.value, inputs.comment.value);\n }, [inputs.sign_different.value, inputs.comment.value]);\n props.dialog.getData = () => [inputs.sign_different.value, inputs.comment.value];\n\n useEffect(() => {\n props.dialog.setState({\n okDisabled: !inputs.sign_different.value,\n });\n }, [inputs.sign_different.value]);\n\n return \n
    \n {t(\"dialog_download_document_help\")}\n
    \n {inputs.sign_different.field}\n
    \n {inputs.sign_different.value === \"yes\" ?
    \n {inputs.comment.field}\n
    : null}\n
    \n
    ;\n}\n\nexport default DownloadDocument;","import {DEFAULT_THEME, useCurrentState} from \"../../globalState\";\nimport React, {useCallback, useEffect, useState} from \"react\";\nimport {useAPI, useTitle, useToolbar} from \"../../stateHelpers\";\nimport {useTranslation} from \"react-i18next\";\nimport lodash from \"lodash\";\nimport {apiPost, apiPut, apiURL} from \"../../api\";\nimport confirmationDialog from \"../../confirmationDialog\";\nimport $ from \"jquery\";\nimport FailedLoading from \"../FailedLoading\";\nimport CircularLoader from \"../CircularLoader\";\nimport snackbar from \"../../snackbar\";\nimport {IconButton} from \"@material-ui/core\";\nimport Icon from \"@material-ui/core/Icon\";\nimport Button from \"@material-ui/core/Button\";\nimport DrawerInfo from \"../DrawerInfo\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Chip from \"@material-ui/core/Chip\";\nimport SignaturePadDialog from \"../SignaturePadDialog\";\nimport AppBar from \"@material-ui/core/AppBar\";\nimport Toolbar from \"@material-ui/core/Toolbar\";\nimport Menu from \"@material-ui/core/Menu\";\nimport MenuItem from \"@material-ui/core/MenuItem\";\nimport ListItemIcon from \"@material-ui/core/ListItemIcon\";\nimport ListItemText from \"@material-ui/core/ListItemText\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Add from \"@material-ui/icons/Add\";\nimport Remove from \"@material-ui/icons/Remove\";\nimport {withRouter} from \"react-router-dom\";\nimport {getColorByIndex, styles, useFractalWidth} from \"./utils\";\nimport withStyles from \"@material-ui/core/styles/withStyles\";\nimport WriteComment from \"./WriteComment\";\nimport ArrowGuide from \"./ArrowGuide\";\nimport PageImage from \"./PageImage\";\nimport ConfirmAndSend from \"./ConfirmAndSend\";\nimport DeclineBox from \"./DeclineBox\";\nimport SignRequestNotFound from \"./SignRequestNotFound\";\nimport TextField from \"@material-ui/core/TextField\";\nimport DownloadDocument from \"./DownloadDocument\";\n\n\nfunction RequestPage(props) {\n let params = props.match.params;\n let classes = props.classes;\n let [ctheme, setTheme] = useCurrentState(\"theme\");\n let [drawerInfo, setDrawerInfo] = useCurrentState(\"drawer_info\");\n let [provideElement, setProvideElement] = useState({});\n let [providePage, setProvidePage] = useState({});\n let [mw, setMw] = useFractalWidth();\n let [_, setTitle] = useTitle();\n let [images, setImages] = useState([]);\n let [isShowingDecline, setDecline] = useState(false);\n let [sigpad, setSigpad] = useState({});\n let [globalComment, setGlobalComment] = useState(\"\");\n let [downloadMenu, setDownloadMenu] = useState(null);\n let [mainMenu, setMainMenu] = useState(null);\n let [scale, setScale] = useState(window.innerWidth >= 1024 ? -30 : 0);\n const {t, i18n} = useTranslation();\n\n useEffect(() => {\n return () => {\n setTheme(DEFAULT_THEME);\n };\n }, []);\n\n let {data = {}, error, isLoading, doRetry} = useAPI((params.signer_id ? 'sign_request_for_signer' : 'sign_request') + \"/\" + (params.signer_id ? params.signer_id : params.id) + '?action=view');\n\n let [toolbar, setToolbar] = useToolbar();\n if (toolbar) {\n setToolbar(false);\n }\n\n let getActionText = () => {\n let finished = true;\n if (!data.document) {\n return \"Sign\";\n }\n let anyDeclined = false;\n for (let page of data.document.pages) {\n if (!page.placeholders) {\n continue;\n }\n for (let placeholder of page.placeholders) {\n let sindex = lodash.find(data.signers, {\n id: placeholder.signer_id\n });\n\n if (sindex && sindex.declined) {\n anyDeclined = true;\n }\n\n if (signerID && sindex && sindex.unique_id === signerID && !placeholder.signed && !(placeholder._image || placeholder.image)) {\n finished = false;\n }\n }\n }\n\n if (anyDeclined) {\n return \"Declined\";\n }\n\n let sindex = lodash.find(data.signers, {\n unique_id: params.signer_id\n });\n\n if (!lodash.filter(data.signers, (sign) => sign.signed === null).length) {\n return \"Download\";\n }\n\n if (sindex) {\n if (sindex.signed) {\n return \"Signed\";\n }\n\n if (sindex.declined) {\n return \"Declined\";\n }\n }\n\n if (finished) {\n return \"Finalize\";\n }\n\n\n return \"Sign\";\n };\n\n let signerID = params.signer_id;\n\n let withMenu = useCallback((cb) => {\n return () => {\n setDownloadMenu(null);\n cb();\n };\n }, []);\n\n let withMainMenu = useCallback((cb) => {\n return () => {\n setMainMenu(null);\n cb();\n };\n }, [signerID]);\n\n\n useEffect(() => {\n if (i18n && data && data.sign_request) {\n i18n.changeLanguage(data.sign_request.language);\n }\n }, [data, i18n]);\n\n\n let documentDownload = useCallback(() => {\n let allSigned = true;\n for (let signer of data.signers) {\n if (!signer.signed) {\n allSigned = false;\n }\n }\n\n if (allSigned) {\n window.open(apiURL(\"sign_request_for_signer/\" + signerID + '?action=download_document'), '_blank');\n return;\n }\n\n let dialog = {\n title: t(\"dialog_download_document\"),\n okText: t(\"dialog_btn_download_document\"),\n send: () => {\n let [send, message] = dialog.getData();\n if (!send) {\n snackbar(t(\"dialog_download_confirm_action\"));\n return false;\n }\n if (send === \"yes\") {\n apiPut(\"sign_request_for_signer/\" + signerID, {\n download_for_alternative_sign: true,\n message: message\n });\n }\n window.open(apiURL(\"sign_request_for_signer/\" + signerID + '?action=download_document'), '_blank');\n },\n ok: () => {\n return dialog.send();\n },\n id: 'download',\n };\n dialog.content = ;\n confirmationDialog(dialog);\n\n }, [data]);\n\n let logDownload = useCallback(() => {\n window.open(apiURL(\"sign_request_for_signer/\" + signerID + '?action=download_log'), '_blank');\n }, []);\n\n\n let finalize = useCallback((event) => {\n let state = getActionText();\n if (state === \"Finalize\") {\n let dialog = {\n title: t(\"dialog_signed_title\"),\n okText: t(\"dialog_signed_ok_button\"),\n ok: false,\n id: 'finalize',\n };\n dialog.content =\n ;\n confirmationDialog(dialog);\n } else if (state === \"Download\") {\n setDownloadMenu(event.currentTarget);\n } else {\n $('#arrowHead').click();\n }\n }, [data, globalComment, signerID]);\n\n let decline = useCallback(() => {\n let dialog = {\n title: t(\"dialog_decline_title\"),\n ok: false\n };\n dialog.content =\n ;\n confirmationDialog(dialog)\n }, [signerID, globalComment]);\n\n const {\n history,\n ...rest\n } = props;\n\n if (error) {\n if (error.response && error.response.status === 404) {\n return \n }\n return \n }\n\n if (isLoading) {\n return \n }\n\n setTitle(\"Signature request\");\n let currentSetImage = null;\n let currentImage = null;\n let currentInfo = {width: 0, height: 0};\n let currentSetInfo = null;\n let openSignaturePad = (page, info, setImage, image) => {\n currentInfo = info;\n currentSetImage = setImage;\n currentSetInfo = info.set;\n currentImage = image;\n if (!sigpad.open) {\n return;\n }\n sigpad.open(info);\n };\n\n if (scale !== 0) {\n let negative = false;\n let dscale = scale;\n if (scale < 0) {\n negative = true;\n dscale = Math.abs(scale);\n }\n let scaled = dscale * mw / 100;\n if (negative) {\n mw -= scaled;\n } else {\n mw += scaled;\n }\n }\n\n let setSignature = (signapi) => {\n\n let setImageBase64 = function (data, extra) {\n currentSetImage(data);\n currentSetInfo(extra || {});\n $(window).trigger(\"imageChanged\");\n setImages([1, ...images]);\n };\n\n if (signapi.tab === 1) {\n return apiPost(\"signature_text_font_color_to_base64\", {\n text: signapi.text,\n width: Math.ceil(currentInfo.computed.width),\n height: Math.ceil(currentInfo.computed.height),\n font: signapi.font,\n color: signapi.fontColor\n }).then((res) => {\n setImageBase64(\"data:image/png;base64,\" + res.data.base_64, {\n text: signapi.text,\n text_font: signapi.font,\n text_color: signapi.fontColor\n });\n }, () => {\n snackbar(t(\"Unable to save signature, please try again!\"));\n });\n } else {\n setImageBase64(signapi.toDataURL());\n }\n setTimeout(function () {\n if (getActionText() === \"Finalize\") {\n finalize();\n } else {\n $('#arrowHead').click();\n }\n }, 1500);\n };\n\n\n let currentAddr = (inq) => {\n return window.location.protocol + '//' + window.location.host + '/request/view/' + inq;\n };\n\n let signed = false;\n let declined = false;\n if (!isLoading && data) {\n let sindex = lodash.find(data.signers, {\n unique_id: signerID\n });\n if (sindex) {\n declined = sindex.declined;\n signed = sindex.signed;\n }\n if (ctheme.primary.main !== data.identity.theme) {\n setTheme({\n primary: {\n main: data.identity.theme\n },\n secondary: {\n main: data.identity.theme_secondary\n }\n });\n }\n }\n if (!isLoading && !isShowingDecline && params.action === \"decline\" && !declined) {\n setDecline(true);\n decline();\n }\n\n let embed = window.location.search.indexOf(\"embed=1\") !== -1;\n\n let extra = null;\n\n if (!signerID) {\n extra = setDrawerInfo(!drawerInfo)}>\n info\n ;\n }\n\n let disabledAction = getActionText() === \"Signed\" || getActionText() === \"Declined\";\n\n let actions = \n {signerID ?\n : null}\n setMainMenu(event.currentTarget)}>\n keyboard_arrow_down\n \n {extra}\n ;\n\n\n let embeded =
    {actions}
    ;\n\n return
    \n \n
    \n Information about this request\n Signers\n
    \n {data.signers.map((signer, index) => {\n return
    \n
    \n \n
    \n {!signerID ?\n
    \n
    : null}\n
    \n
    \n })}\n
    \n {signerID && (!declined && !signed) ?\n
    \n \n
    : null}\n
    \n
    \n {\n setSigpad({\n open: open,\n close: close\n });\n }}\n actionText={t(\"Sign\")}\n cancelText={t(\"dialog_cancel\")}\n getImage={() => currentImage}\n getInfo={() => currentInfo}\n action={setSignature}/>\n\n\n {!embed ?\n
    \n \n \n \n {data.document.details.name}\n \n {actions}\n \n \n
    : embeded}\n\n setMainMenu(null)}\n >\n {signerID && (!declined && !signed) ?\n \n \n cancel\n \n \n : null}\n\n \n \n cloud_download\n \n \n \n\n \n\n\n setDownloadMenu(null)}\n >\n \n \n cloud_download\n \n \n \n\n \n \n history\n \n \n \n\n \n\n
    \n \n\n \n \n {(100 + scale)}%\n \n \n \n setScale(scale + 10)}>\n \n \n setScale(scale - 10)}>\n \n \n
    \n\n\n
    \n
    \n
    = 1024 ? 64 : 30}}>\n\n
    {data.document.pages.map((page, index) => {\n return ;\n })}
    \n \n \n
    \n
    ;\n}\n\nexport default withRouter(withStyles(styles)(RequestPage));\n","import React, {Suspense} from 'react';\nimport ReactDOM from 'react-dom';\nimport * as serviceWorker from './serviceWorker';\nimport './components/i18n';\nimport {Route, HashRouter, BrowserRouter} from \"react-router-dom\";\nimport Header from \"./components/Header\";\nimport RequestsPage from \"./components/RequestsPage\";\nimport withRoot from \"./withRoot\";\nimport {LoginPage} from \"./components/Login\";\nimport {GlobalStateProvider, useCurrentState} from \"./globalState\";\nimport UserPage from \"./components/UserPage\";\nimport IndexPage from \"./components/IndexPage\";\nimport \"./style.css\";\nimport ConsecutiveSnackbars from \"./components/ConsecutiveSnackbars\";\nimport ConfirmationDialogs from \"./components/ConfirmationDialogs\";\nimport IdentitiesPage from \"./components/IdentitiesPage\";\nimport LogoutPage from \"./components/LogoutPage\";\nimport {withTranslation} from \"react-i18next\";\nimport CircularIndeterminate from \"./components/CircularLoader\";\nimport AccessTokensPage from \"./components/AccessTokensPage\";\nimport $ from \"jquery\";\nimport RequestPage from \"./components/request/RequestPage\";\n\nif (window.Promise && !window.Promise.prototype.finally) {\n let promiseFinally = require('promise.prototype.finally');\n promiseFinally.shim();\n}\n\nfunction IndexWrapper(props) {\n return {props.children}\n}\n\n\n$(window).on(\"beforeunload\", function (e) {\n // Your message won't get displayed by modern browsers; the browser's built-in\n // one will be instead. But for older browsers, best to include an actual\n // message instead of just \"x\" or similar.\n if (window.formDirty && window.location.href.indexOf('http://localhost') === -1) {\n e.originalEvent.returnValue = window.formDirty;\n }\n});\n\nlet Themeable = withRoot(IndexWrapper);\n\nfunction Index() {\n return \n \n
    \n
    \n
    \n
    \n \n \n \n \n \n \n \n \n \n
    \n
    \n \n \n
    \n
    \n
    ;\n}\n\nlet TranslateableIndex = withTranslation()(Index);\n\n\nfunction Load() {\n return }>\n \n ;\n}\n\nReactDOM.render(, document.getElementById('root'));\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: http://bit.ly/CRA-PWA\nserviceWorker.unregister();\n"],"sourceRoot":""}