{"version":3,"sources":["configs/index.js","i18n.js","apis/textSegmentation.js","actions/index.js","actions/actionTypes.js","utils/index.js","modal/index.js","modal/new-analysis-modal/index.js","shared/popover/index.js","content/index.js","content/helper.js","sidebar/components/topics/components/collapsible-tree/treeUtils.js","sidebar/components/topics/components/collapsible-tree/components/node/index.js","sidebar/components/topics/components/collapsible-tree/index.js","sidebar/components/topics/components/topic-details/index.js","sidebar/components/topics/index.js","sidebar/index.js","modal/agreement-modal/index.js","user-input-area/index.js","sidebar/components/settings/index.js","modal/settings-modal/index.js","modal/about-modal/index.js","top-menu-navbar/index.js","App.js","serviceWorker.js","reducers/agreement.js","reducers/settings.js","reducers/topicInfo.js","reducers/collapsibleTree.js","reducers/index.js","reducers/documentType.js","reducers/documentTypes.js","reducers/defaultDocumentType.js","reducers/notification.js","reducers/topicColors.js","reducers/topicMappings.js","index.js","shared/popover/styles.module.css","top-menu-navbar/styles.module.css","user-input-area/styles.module.css"],"names":["env","key","type","defaultValue","process","value","lower","toLowerCase","includes","Error","parsed","parseInt","isNaN","BASE_URL","PREFIX","COMPONENTS","settingsVisible","changeTypeButtonVisible","aboutButtonVisible","licenseVisible","notificationsEnabled","moveButtonsEnabled","LANG","DOC_TYPE_ENABLED","COLORS","i18n","init","lng","configs","resources","en","translations","ButtonAbout","ButtonAccept","ButtonReject","ButtonOk","ButtonCancel","ButtonChangeType","ButtonFindTopics","ButtonUpdate","ButtonClassifyText","ButtonCompareTexts","ButtonMakeNewAnalysis","ButtonSaveChanges","LabelMaxSplits","LabelTypeText","LabelLoadByUrl","LabelThreshold","LabelFrequency","LabelTypeOfSegmentation","LabelSegmentationLength","LabelContextWindow","LabelContextGap","LabelEnterText","LabelSettings","LabelSelectAll","LabelChangeDocumentType","LinkLicenseAgreement","LicenseAgreement","LicenseAgreementLink","PlaceholderEnterURL","SelectParagraph","SelectContextGreedy","SelectContextOptimal","SelectContextByWords","SelectSentence","SelectWhole","TabSelectText","TabSettings","Topics","TabCompare","TabClassify","TextAreaPlaceholder","TitleChangeDocumentType","TitleNotification","MsgAllEssentialConditionsFulfilled","MsgAllEssentialConditionsNotFulfilled","MsgAcceptLicense","Result","NoTopics","EmptySidebarMsg","MovePrev","MoveNext","MoveDisabled","ru","fallbackLng","debug","ns","defaultNS","keySeparator","interpolation","escapeValue","formatSeparator","react","wait","axios","defaults","withCredentials","create","baseURL","setDocumentType","docType","topicify","url","text","dispatch","getState","a","settings","textSegmentation","post","documentType","response","payload","isShown","data","document_type","collapsibleTree","link_mapping","checkDarkColor","hexColor","rgbColor","substring","arrayIntersect","arr1","arr2","filter","el","generateKey","clip","letters","uuid","Array","from","length","Math","floor","random","reduce","prev","curr","Date","getTime","Modal","close","iconStyles","title","children","className","style","outline","onClick","NewAnalysisModal","state","selectedDocumentType","props","handleAgree","event","preventDefault","agreeCallback","handleReject","rejectCallback","handleSelect","setState","target","htmlFor","i18next","t","onChange","this","name","documentTypes","map","React","Component","connect","Popover","isVisible","childrenRef","createRef","popoverMessageRef","styles","ref","popover","pop","config","Content","topic2color","newAnalysisModalOpened","hideNewAnalysisModal","moveToNextAllowed","bind","moveToPrevAllowed","topicRefs","generateTopic2ColorMapping","setTopicColors","topics","selectTopic","prevProps","prevState","snapshot","i","arraysEqual","mostCommonTopics","notificationShown","initiallySelectedTopics","store","addNotification","message","insert","container","animationIn","animationOut","dismiss","duration","onScreen","notSelectedTopics","notSelectedTopicsNames","idx","topicMapping","letter","conditions","join","toUpperCase","showNotification","colorNumber","forEach","topicInfo","topicInd2Sim","Object","keys","ind","index","Number","getNewColor","arg","filterSelectedTopicColors","maxSimInd","isArray","r","NEGATIVE_INFINITY","obj","predicate","byKey","result","hasOwnProperty","selectedTopics","indexOf","topic_ind","topic_weights","parseFloat","toFixed","topic_words","sort","b","currentTopicIndex","currentMark","topicRef","tooltip","generateTooltip","isSelected","selectedTopic","backgroundColor","getTopicColor","toggleSelectedTopic","content","lines","accumulatedLength","start","end","mapLinesToOriginalTextPositions","split","line","paragraphLength","prevStartInParagraph","startInParagraph","endInParagraph","push","createTopicRef","renderTopic","topicIdx","deselectTopic","prevTopic","scrollToView","nextTopic","current","scrollIntoView","block","behavior","marginTop","background","left","right","zIndex","moveToPrevTopic","moveToNextTopic","clear","id","whiteSpace","position","top","generateHighlightedHTML","handleDocumentTypeChange","generateRandomColor","avoidDark","topicColors","defaultDocType","items","currentlySelected","newItems","undefined","selected","showChildren","parentid","parent","Node","getClassName","classNames","handleClick","onSelection","renderChild","childId","listStyleType","ConnectedNode","indent","topicId","link","parentNode","role","leafNode","href","rel","paddingLeft","ownProps","Tree","selection","toggleChildren","nextProps","topIds","updateStore","topId","ConnectedTree","nodeId","TopicDetails","linksOpen","treeUtils","checked","readOnly","width","minHeight","textAlign","handleToggleLinks","borderColor","PureComponent","clickedTopic","removeSelectedTopic","addSelectedTopic","currentTopic","selectAllTopics","deselectAllTopics","topicName","allTopicsSelected","handleSelectAll","getButtonColor","topic","topicNumber","Sidebar","overflow","height","noTopics","AgreementModal","UserInputArea","agreementModalVisible","handleSubmitManual","isAgreementAccepted","handleChange","closeAgreementModal","localStorage","setItem","acceptAgreement","onSubmit","placeholder","fontSize","handleAcceptAgreement","handleRejectAgreement","setTopicMappings","Settings","changeSettings","threshold","fragmentsSize","segmentType","segmentLength","contextWindow","contextGap","maxSplits","onSelect","SettingsModal","handleSubmit","setSettings","AboutModal","dangerouslySetInnerHTML","__html","about","TopMenuNavbar","useState","settingsOpened","setSettingsOpened","aboutOpened","setAboutOpened","App","document","createElement","innerText","description","head","appendChild","retrieveDocumentTypes","get","then","names","defaultIdx","defaultDocTypeIdx","setDocumentTypes","setDefaultDocumentType","Boolean","window","location","hostname","match","initialState","getItem","initialSettings","userInputArea","node","action","combineReducers","topic_mapping","original_text","initially_selected_topics","most_common_topics","concat","newState","oldSelectedNodeId","TagManager","initialize","gtmId","devTools","dummy","createStore","setText","compose","applyMiddleware","thunk","ReactDOM","render","getElementById","navigator","serviceWorker","ready","registration","unregister","module","exports"],"mappings":"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","file":"static/js/main.9df92a60.chunk.js","sourcesContent":["const env = (key, type, defaultValue) => {\n if (!process.env[key]) return defaultValue;\n\n const value = process.env[key];\n switch (type) {\n case \"string\":\n return value;\n case \"boolean\":\n const lower = value.toLowerCase();\n if ([\"1\", \"true\", \"yes\", \"y\", \"ok\", \"on\"].includes(lower)) return true;\n if ([\"0\", \"false\", \"no\", \"n\", \"nok\", \"off\"].includes(lower)) return false;\n throw new Error(`Invalid env variable ${key}. Expected a boolean: ${value}`);\n case \"number\":\n const parsed = parseInt(value);\n if (isNaN(parsed)) throw new Error(`Invalid env variable ${key}. Expected a number: ${value}`);\n return parsed;\n default:\n throw new Error(`Unsupported type ${type} for env variable ${key}. Should be 'string', 'boolean' or 'number'`);\n }\n}\n\n\nexport default {\n BASE_URL: env('REACT_APP_BASE_URL', 'string'),\n PREFIX: env('REACT_APP_PREFIX', 'string', ''),\n COMPONENTS: {\n settingsVisible: env('REACT_APP_SETTINGS_BUTTON', 'boolean', true),\n changeTypeButtonVisible: env('REACT_APP_CHANGE_TYPE_BUTTON', 'boolean', true),\n aboutButtonVisible: env('REACT_APP_ABOUT_BUTTON', 'boolean', true),\n licenseVisible: env('REACT_APP_LICENSE_VISIBLE', 'boolean', true),\n notificationsEnabled: env('REACT_APP_NOTIFICATIONS', 'boolean' ,true),\n moveButtonsEnabled: env('REACT_APP_MOVE_BUTTONS', 'boolean', false)\n },\n LANG: env('REACT_APP_LANG', 'string', 'ru'),\n DOC_TYPE_ENABLED: env('REACT_APP_DOC_TYPE_ENABLED', 'boolean', true),\n COLORS: [\"#1f77b4\", \"#aec7e8\", \"#ff7f0e\", \"#ffbb78\",\n \"#2ca02c\", \"#98df8a\", \"#d62728\", \"#ff9896\",\n \"#9467bd\", \"#c5b0d5\", \"#8c564b\", \"#c49c94\",\n \"#e377c2\", \"#f7b6d2\", \"#7f7f7f\", \"#c7c7c7\",\n \"#bcbd22\", \"#dbdb8d\", \"#17becf\", \"#9edae5\"]\n}\n","import i18n from 'i18next';\nimport configs from './configs';\n\ni18n.init({\n // we init with resources\n lng: configs.LANG,\n resources: {\n en: {\n translations: {\n ButtonAbout: \"About\",\n ButtonAccept: \"Accept\",\n ButtonReject: \"Reject\",\n ButtonOk: \"OK\",\n ButtonCancel: \"Cancel\",\n ButtonChangeType: \"Change type\",\n ButtonFindTopics: \"Find contract clauses\",\n ButtonUpdate: \"Update\",\n ButtonClassifyText: \"Classify text\",\n ButtonCompareTexts: \"Compare texts\",\n ButtonMakeNewAnalysis: \"Make new analysis\",\n ButtonSaveChanges: \"Save changes\",\n\n LabelMaxSplits: \"Max splits\",\n LabelTypeText: \"Type text\",\n LabelLoadByUrl: \"Load by URL\",\n LabelThreshold: \"Threshold\",\n LabelFrequency: \"Frequency\",\n LabelTypeOfSegmentation: \"Type of segmentation\",\n LabelSegmentationLength: \"Segmentation length\",\n LabelContextWindow: \"Context window\",\n LabelContextGap: \"Context gap\",\n LabelEnterText: \"Enter text\",\n LabelSettings: \"Settings\",\n LabelSelectAll: \"Select all clauses\",\n LabelChangeDocumentType: \"To refine the search for document's conditions, specify the type of document manually\",\n\n LinkLicenseAgreement: \"To process the document you need to accept the conditions of \",\n LicenseAgreement: \"License agreement\",\n LicenseAgreementLink: \"License agreement\",\n\n PlaceholderEnterURL: \"Enter URL...\",\n\n SelectParagraph: \"Paragraph\",\n SelectContextGreedy: \"Context greedy\",\n SelectContextOptimal: \"Context optimal\",\n SelectContextByWords: \"Context by words\",\n SelectSentence: \"Sentence\",\n SelectWhole: \"Whole\",\n\n TabSelectText: \"Select text\",\n TabSettings: \"Settings\",\n Topics: \"Contract clauses\",\n TabCompare: \"Compare\",\n TabClassify: \"Classify\",\n\n TextAreaPlaceholder: \"To analyze contract please paste its text here and click FIND CONTRACT CLAUSES\",\n\n TitleChangeDocumentType: \"Select document type\",\n TitleNotification: \"Notification\",\n\n MsgAllEssentialConditionsFulfilled: \"All essential provisions are found in this document\",\n MsgAllEssentialConditionsNotFulfilled: \"Essential provisions {{conditions}} are not found in this document\",\n MsgAcceptLicense: \"You must accept license agreement before analysis of contract\",\n\n Result: \"Result\",\n NoTopics: \"No provisions found\",\n EmptySidebarMsg: \"Please paste contract text.\",\n MovePrev: \"Move to previous clause\",\n MoveNext: \"Move to next clause\",\n MoveDisabled: \"Disabled until clause is selected\"\n }\n },\n\n ru: {\n translations: {\n ButtonAbout: \"О программе\",\n ButtonAccept: \"Принимаю\",\n ButtonReject: \"Не принимаю\",\n ButtonOk: \"ОК\",\n ButtonCancel: \"Отмена\",\n ButtonChangeType: \"Изменить тип\",\n ButtonFindTopics: \"Найти условия договора\",\n ButtonUpdate: \"Обновить\",\n ButtonClassifyText: \"Классифицировать текст\",\n ButtonCompareTexts: \"Сравнить тексты\",\n ButtonMakeNewAnalysis: \"Новый анализ\",\n ButtonSaveChanges: \"Сохранить изменения\",\n\n LabelMaxSplits: \"Максимальное число разбиений\",\n LabelTypeText: \"Ввести текст\",\n LabelLoadByUrl: \"Загрузить по ссылке\",\n LabelThreshold: \"Пороговое значение\",\n LabelFrequency: \"Частота\",\n LabelTypeOfSegmentation: \"Тип сегментации\",\n LabelSegmentationLength: \"Длина сегмента\",\n LabelContextWindow: \"Констекстное окно\",\n LabelContextGap: \"Контекстный сдвиг\",\n LabelEnterText: \"Введите текст\",\n LabelSettings: \"Настройки\",\n LabelSelectAll: \"Выбрать все условия\",\n LabelChangeDocumentType: \"Для уточнения поиска условий договора укажите тип договора вручную\",\n\n LinkLicenseAgreement: \"Для обработки документа Вам нужно принять условия \",\n LicenseAgreement: \"Пользовательского соглашения\",\n LicenseAgreementLink: \"Пользовательское соглашение\",\n\n PlaceholderEnterURL: \"Введите ссылку...\",\n\n SelectParagraph: \"Абзац\",\n SelectContextGreedy: \"Контекст жадный\",\n SelectContextOptimal: \"Контекст оптимальный\",\n SelectContextByWords: \"Контекст по словам\",\n SelectSentence: \"Предложение\",\n SelectWhole: \"Целый\",\n\n TabSelectText: \"Выбрать текст\",\n TabSettings: \"Настройки\",\n Topics: \"Условия договора\",\n TabCompare: \"Сравнить\",\n TabClassify: \"Классифицировать\",\n\n TextAreaPlaceholder: \"Для того, чтобы проанализировать договор - вставьте его текст и нажмите кнопку НАЙТИ УСЛОВИЯ ДОГОВОРА.\",\n\n TitleChangeDocumentType: \"Выбрать тип договора\",\n TitleNotification: \"Уведомление\",\n\n MsgAllEssentialConditionsFulfilled: \"В договоре предусмотрены все существенные условия\",\n MsgAllEssentialConditionsNotFulfilled: \"В договоре отсутству{{letter}}т {{conditions}}\",\n MsgAcceptLicense: \"Обработка договора невозможна без принятия пользовательского соглашения\",\n\n Result: \"Результат\",\n NoTopics: \"Нет выделенных условий.\",\n EmptySidebarMsg: \"Пожалуйста, введите текст договора.\",\n MovePrev: \"Предыдущее условие\",\n MoveNext: \"Следующее условие\",\n MoveDisabled: \"Отключено пока не выбрано условие\"\n }\n }\n },\n fallbackLng: \"en\",\n debug: true,\n\n // have a common namespace used around the full app\n ns: [\"translations\"],\n defaultNS: \"translations\",\n\n keySeparator: false, // we use content as keys\n\n interpolation: {\n escapeValue: false, // not needed for react!!\n formatSeparator: \",\"\n },\n\n react: {\n wait: true\n }\n});\n\nexport default i18n;\n","import axios from 'axios';\nimport configs from '../configs';\nconst { BASE_URL } = configs;\n\naxios.defaults.withCredentials = process.env.NODE_ENV !== 'development';\n\nexport default axios.create({\n baseURL: BASE_URL\n});\n","import textSegmentation from '../apis/textSegmentation';\nimport {\n SET_TOPIC_MAPPINGS,\n SET_TOPIC_COLORS,\n SET_SETTINGS,\n ADD_SELECTED_TOPIC,\n REMOVE_SELECTED_TOPIC,\n SELECT_TOPIC,\n DESELECT_TOPIC,\n ACCEPT_AGREEMENT,\n SET_DOCUMENT_TYPE,\n SET_DOCUMENT_TYPES,\n TOPICIFY,\n SHOW_NOTIFICATION,\n CLEAR,\n SELECT_ALL_TOPICS,\n DESELECT_ALL_TOPICS,\n SET_DEFAULT_DOCUMENT_TYPE,\n TREE_TOGGLE_CHILDREN,\n TREE_SELECT_NODE,\n TREE_UPDATE_STORE,\n TREE_INITIALIZE\n} from './actionTypes';\n\nexport const setTopicMappings = (topicMapping) => ({\n type: SET_TOPIC_MAPPINGS,\n topicMapping\n});\n\nexport const setTopicColors = (topicColors) => ({\n type: SET_TOPIC_COLORS,\n topicColors\n});\n\nexport const setSettings = (settings) => ({\n type: SET_SETTINGS,\n settings\n});\n\nexport const addSelectedTopic = (topic) => ({\n type: ADD_SELECTED_TOPIC,\n topic\n});\n\nexport const removeSelectedTopic = (topic) => ({\n type: REMOVE_SELECTED_TOPIC,\n topic\n});\n\nexport const selectAllTopics = () => ({\n type: SELECT_ALL_TOPICS\n});\n\nexport const deselectAllTopics = () => ({\n type: DESELECT_ALL_TOPICS\n});\n\nexport const selectTopic = (topicIdx) => ({\n type: SELECT_TOPIC,\n selectedTopic: topicIdx\n});\n\nexport const deselectTopic = () => ({\n type: DESELECT_TOPIC\n})\n\nexport const acceptAgreement = () => ({\n type: ACCEPT_AGREEMENT\n});\n\nexport const setDocumentTypes = (documentTypes) => ({\n type: SET_DOCUMENT_TYPES,\n documentTypes\n});\n\nexport const setDocumentType = (docType) => ({\n type: SET_DOCUMENT_TYPE,\n docType\n});\n\nexport const setDefaultDocumentType = (defaultDocType) => ({\n type: SET_DEFAULT_DOCUMENT_TYPE,\n defaultDocType\n});\n\nexport const topicify = (url, text) => async (dispatch, getState) => {\n const { settings, docType } = getState();\n const response = await textSegmentation.post(url, {\n text,\n ...settings,\n documentType: docType\n });\n dispatch({\n type: TOPICIFY,\n payload: response\n });\n dispatch({\n type: SHOW_NOTIFICATION,\n isShown: true\n });\n dispatch({\n type: SET_DOCUMENT_TYPE,\n docType: response.data.document_type\n });\n dispatch({\n type: TREE_INITIALIZE,\n collapsibleTree: response.data.link_mapping\n })\n};\n\nexport const showNotification = (isShown) => ({\n type: SHOW_NOTIFICATION,\n isShown\n});\n\nexport const clear = () => (dispatch, getState) => {\n const { defaultDocType } = getState();\n dispatch({\n type: SET_DOCUMENT_TYPE,\n docType: defaultDocType\n });\n dispatch({\n type: CLEAR\n });\n};\n\n// ///////////////////////////\n// Collapsible tree actions //\n// ///////////////////////////\nexport const toggleChildren = (topicId, nodeId) => ({\n type: TREE_TOGGLE_CHILDREN,\n topicId,\n nodeId\n});\n\nexport const selectNode = (topicId, nodeId) => ({\n type: TREE_SELECT_NODE,\n topicId,\n nodeId\n});\n\nexport const updateStore = (topicId, store) => ({\n type: TREE_UPDATE_STORE,\n topicId,\n store\n});\n","export const SET_TOPIC_MAPPINGS = 'SET_TOPIC_MAPPINGS';\nexport const SET_TOPIC_COLORS = 'SET_TOPIC_COLORS';\nexport const SET_SETTINGS = 'SET_SETTINGS';\n\nexport const ADD_SELECTED_TOPIC = 'ADD_SELECTED_TOPIC';\nexport const REMOVE_SELECTED_TOPIC = 'REMOVE_SELECTED_TOPIC';\nexport const SELECT_ALL_TOPICS = 'SELECT_ALL_TOPICS';\nexport const DESELECT_ALL_TOPICS = 'DESELECT_ALL_TOPICS';\nexport const SELECT_TOPIC = 'SELECT_TOPIC';\nexport const DESELECT_TOPIC = 'DESELECT_TOPIC';\n\nexport const ACCEPT_AGREEMENT = 'ACCEPT_AGREEMENT';\n\nexport const SET_DOCUMENT_TYPES = 'SET_DOCUMENT_TYPES';\nexport const SET_DOCUMENT_TYPE = 'SET_DOCUMENT_TYPE';\nexport const SET_DEFAULT_DOCUMENT_TYPE = 'SET_DEFAULT_DOCUMENT_TYPE';\n\nexport const TOPICIFY = 'TOPICIFY';\nexport const SHOW_NOTIFICATION = 'SHOW_NOTIFICATION'; // shows notification after topics extraction\nexport const CLEAR = 'CLEAR'; // clears data in store before new analysis\n\n// Collapsible tree actions\nexport const TREE_INITIALIZE = 'TREE_INITIALIZE';\nexport const TREE_TOGGLE_CHILDREN = 'TREE_TOGGLE_CHILDREN';\nexport const TREE_UPDATE_STORE = 'TREE_UPDATE_STORE';\nexport const TREE_SELECT_NODE = 'TREE_SELECT_NODE';\nexport const TREE_UNSELECT = 'TREE_UNSELECT';\n","//////////////////////////////////\n// Color utils\n//////////////////////////////////\n\nfunction generateRandomColor(avoidDark=true) {\n const letters = '0123456789ABCDEF';\n const hexColor = Array.from({ length: 6}, () => letters[Math.floor(Math.random()*16)])\n .reduce((prev, curr) => (prev + curr), '#');\n if (avoidDark && checkDarkColor(hexColor)) return generateRandomColor(); // try once more if color is too dark\n return hexColor;\n}\n\n// see https://stackoverflow.com/questions/12043187/how-to-check-if-hex-color-is-too-black\nfunction checkDarkColor(hexColor) {\n const rgbColor = parseInt(hexColor.substring(1), 16);\n const [r, g, b] = [(rgbColor >> 16) & 0xff, (rgbColor >> 8) & 0xff, (rgbColor >> 0) & 0xff];\n const luma = 0.2126 * r + 0.7152 * g + 0.0722 * b;\n return luma < 60;\n}\n\nexport { generateRandomColor, checkDarkColor }\n\n\n//////////////////////////////////\n// Numerical and functional utils\n//////////////////////////////////\n\nfunction argmax(arg) {\n // arg is expected to be either an array or an object\n if (Array.isArray(arg)) {\n return arg.map((el, i) => [el, i]).reduce((r, a) => (a[0] > r[0] ? a : r), [Number.NEGATIVE_INFINITY, -1])[1];\n }\n\n // returns key of the biggest value in object. All values must be numbers\n return Object.keys(arg)\n .map(key => [Number(arg[key]), key]).reduce((r, a) => (a[0] > r[0] ? a : r), [Number.NEGATIVE_INFINITY, -1])[1];\n}\n\n// filters object's {key:value} pairs leaving only those that passed the predicate function condition\nfunction filter(obj, predicate, byKey=false) {\n const result = {};\n for (const key in obj) {\n if (obj.hasOwnProperty(key) && predicate(byKey ? key : obj[key])) {\n result[key] = obj[key];\n }\n }\n return result;\n}\n\nfunction merge(obj1, obj2) {\n return {...obj1, ...obj2};\n}\n\n// Note: may be not working as expected on arrays with duplicates\nfunction arrayIntersect(arr1, arr2) {\n if (!arr1) return [];\n if (!arr2) return [];\n return arr1.filter(el => arr2.includes(el));\n}\n\n// This should be faster than JSON.stringify(arr1) === JSON.stringify(arr2)\nfunction arraysEqual(arr1, arr2) {\n if(arr1.length !== arr2.length) return false;\n for(let i = arr1.length; i--;) {\n if(arr1[i] !== arr2[i]) return false;\n }\n return true;\n}\n\nfunction arrayCopy(arr) {\n return arr.slice(0);\n}\n\nexport { argmax, filter, merge, arrayIntersect, arraysEqual, arrayCopy }\n\n//////////////////////////////////\n// String utils\n//////////////////////////////////\n\nfunction replaceAt(str, begin, end, replacement) {\n return str.substring(0, begin) + replacement + str.substring(end, str.length);\n}\n\nexport { replaceAt }\n\n//////////////////////////////////\n// React helpers\n//////////////////////////////////\n\nfunction generateKey(data, clip=10) {\n const letters = '0123456789ABCDEF';\n const uuid = Array.from({ length: 6}, () => letters[Math.floor(Math.random()*16)])\n .reduce((prev, curr) => (prev + curr), '');\n return `${data ? data.substring(0, clip) : ''}_${uuid}_${new Date().getTime()}`\n}\n\nexport { generateKey }\n","import React from 'react';\nimport './styles.css';\n\n\nfunction Modal({ close, iconStyles, title, children }) {\n return (\n
\n
\n
\n
\n \n
{ title }
\n \n ×\n \n
\n {children}\n
\n
\n
\n
\n );\n}\n\nexport default Modal;\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport i18next from 'i18next';\n\nconst mapStateToProps = state => ({\n settings: state.settings,\n documentTypes: state.documentTypes,\n documentType: state.docType\n});\n\nclass NewAnalysisModal extends React.Component {\n state = {\n selectedDocumentType: this.props.documentType\n };\n\n handleAgree = (event) => {\n event.preventDefault();\n this.props.agreeCallback(this.state.selectedDocumentType);\n this.props.close();\n };\n\n handleReject = (event) => {\n event.preventDefault();\n this.props.rejectCallback();\n this.props.close();\n };\n\n handleSelect = (event) => {\n this.setState({ selectedDocumentType: event.target.value });\n };\n\n render() {\n return (\n <>\n
\n \n {i18next.t('LabelChangeDocumentType')}\n \n
\n
\n
\n \n
\n
\n
\n\n
\n \n {i18next.t('ButtonOk')}\n \n \n {i18next.t('ButtonCancel')}\n \n
\n
\n );\n }\n}\n\nexport default connect(mapStateToProps)(NewAnalysisModal);\n","import React from 'react';\nimport styles from './styles.module.css';\n\nconst Popover = ({ children, isVisible, text }) => {\n const childrenRef = React.createRef();\n const popoverMessageRef = React.createRef();\n\n return (\n \n {children}\n \n {text}\n \n \n );\n};\n\nexport default Popover;\n","import React from 'react';\nimport {connect} from 'react-redux';\nimport {\n setTopicColors,\n setDocumentType,\n clear,\n topicify,\n showNotification,\n selectTopic,\n deselectTopic\n} from '../actions';\nimport {argmax, arrayIntersect, arraysEqual, filter, generateKey, generateRandomColor} from '../utils';\nimport { mapLinesToOriginalTextPositions } from './helper';\nimport Modal from '../modal';\nimport NewAnalysisModal from '../modal/new-analysis-modal';\nimport { store } from 'react-notifications-component';\nimport i18next from 'i18next';\nimport './styles.css';\n\nimport config from '../configs';\nimport Popover from '../shared/popover';\nconst { COLORS, COMPONENTS, DOC_TYPE_ENABLED } = config;\n\nclass Content extends React.Component {\n state = {\n topic2color: {},\n newAnalysisModalOpened: false,\n };\n\n static getNewColor(colorNumber) {\n return (colorNumber < COLORS.length) ? COLORS[colorNumber] : generateRandomColor();\n }\n\n constructor(props) {\n super(props);\n this.moveToNextAllowed = this.moveToNextAllowed.bind(this);\n this.moveToPrevAllowed = this.moveToPrevAllowed.bind(this);\n this.topicRefs = []; // this array stores all selected topics Refs so we can easily scroll to them\n }\n\n\n componentDidMount() {\n // establish topic-color mapping\n this.setState({ topic2color: this.generateTopic2ColorMapping() }, () => {\n this.props.setTopicColors(this.state.topic2color);\n if (this.props.topics?.length) {\n this.props.selectTopic(0);\n }\n });\n }\n\n componentDidUpdate(prevProps, prevState, snapshot) {\n if (!arraysEqual(prevProps.mostCommonTopics, this.props.mostCommonTopics)) {\n this.setState({ topic2color: this.generateTopic2ColorMapping() }, () => {\n this.props.setTopicColors(this.state.topic2color);\n });\n }\n\n if (!COMPONENTS.notificationsEnabled) return;\n\n if (this.props.notificationShown && this.props.initiallySelectedTopics.length) {\n const initiallySelectedTopics = arrayIntersect(this.props.initiallySelectedTopics, this.props.mostCommonTopics);\n\n if (this.props.initiallySelectedTopics && initiallySelectedTopics.length === this.props.initiallySelectedTopics.length) {\n store.addNotification({\n title: i18next.t('TitleNotification'),\n message: i18next.t('MsgAllEssentialConditionsFulfilled'),\n type: \"success\",\n insert: \"bottom\",\n container: \"bottom-right\",\n animationIn: [\"animated\", \"fadeIn\"],\n animationOut: [\"animated\", \"fadeOut\"],\n dismiss: {\n duration: 60*1000,\n onScreen: true\n }\n });\n } else if (this.props.initiallySelectedTopics) {\n const notSelectedTopics = this.props.initiallySelectedTopics.filter(el => !this.props.mostCommonTopics.includes(el));\n const notSelectedTopicsNames = notSelectedTopics.map(idx => this.props.topicMapping[idx]);\n store.addNotification({\n title: i18next.t('TitleNotification'),\n message: i18next.t('MsgAllEssentialConditionsNotFulfilled', { letter: notSelectedTopics.length > 1 ? 'ю' : 'е', conditions: notSelectedTopicsNames.join(', ').toUpperCase()}),\n type: \"warning\",\n insert: \"bottom\",\n container: \"bottom-right\",\n animationIn: [\"animated\", \"fadeIn\"],\n animationOut: [\"animated\", \"fadeOut\"],\n dismiss: {\n duration: 60*1000,\n onScreen: true\n }\n });\n }\n }\n // we haven't shown the notification because there were no initially selected topics (document was classified as \"Others\")\n if (this.props.notificationShown) {\n this.props.showNotification(false);\n }\n }\n\n generateTopic2ColorMapping() {\n const topic2color = {};\n let colorNumber = 0;\n this.props.topics && this.props.topics.forEach(topicInfo => {\n const topicInd2Sim = topicInfo[1];\n Object.keys(topicInd2Sim).forEach(ind => {\n const index = Number.parseInt(ind);\n if (!(index in topic2color)) {\n topic2color[index] = Content.getNewColor(colorNumber);\n colorNumber += 1;\n }\n });\n });\n return topic2color;\n }\n\n getTopicColor(topicInfo) {\n const topicInd2Sim = this.filterSelectedTopicColors(topicInfo);\n const maxSimInd = argmax(topicInd2Sim);\n return this.state.topic2color[maxSimInd];\n }\n\n filterSelectedTopicColors(topicInfo) {\n const topicInd2Sim = topicInfo[1];\n return filter(topicInd2Sim, ind => this.props.selectedTopics.indexOf(Number.parseInt(ind)) > -1, true);\n }\n\n generateTooltip(data) {\n const topic_ind = Object.keys(data[1]).map(el => Number(el));\n const topic_weights = topic_ind.map(ind => parseFloat(data[1][ind]).toFixed(3));\n const topic_words = topic_ind.map(ind => this.props.topicMapping[ind]);\n const info = topic_ind.map((ind, i) => [ind, topic_weights[i], topic_words[i]]).sort((a, b) => b[1] - a[1]);\n\n return info\n .map(el => `${el[1]} - ${el[2].substring(0, el[2].length)}`)\n .join('\\n');\n }\n\n createTopicRef(currentTopicIndex) {\n const ref = React.createRef();\n this.topicRefs[currentTopicIndex] = ref;\n return ref;\n }\n\n // to be precise, it's actually called a clause\n renderTopic(currentMark, currentTopicIndex, topicRef) {\n const tooltip = this.generateTooltip(this.props.topics[currentTopicIndex]);\n const isSelected = this.props.selectedTopic === currentTopicIndex;\n return (\n \n this.toggleSelectedTopic(currentTopicIndex) : null}\n ref={topicRef}\n >\n {currentMark}\n \n \n );\n }\n\n // todo refactor it to make it testable\n // to be more precise, it's actually a JSX\n generateHighlightedHTML() {\n if (!this.props.content) return null;\n\n let currentTopicIndex = 0;\n let currentMark;\n\n const lines = this.props.content.split('\\n');\n const enhancedLines = mapLinesToOriginalTextPositions(lines);\n\n return enhancedLines.map(line => {\n const paragraphLength = line.content.length;\n let children = [];\n let prevStartInParagraph = 0;\n\n let { start, end } = currentTopicIndex < this.props.topics.length ?\n this.props.topics[currentTopicIndex][0] : { start: line.start, end: line.end };\n\n while (end <= line.end && start >= line.start && currentTopicIndex < this.props.topics.length) {\n\n const startInParagraph = start - line.start;\n const endInParagraph = end - line.start;\n\n if (startInParagraph > prevStartInParagraph) {\n children.push(line.content.substring(prevStartInParagraph, startInParagraph));\n }\n currentMark = line.content.substring(startInParagraph, endInParagraph);\n const topicRef = this.createTopicRef(currentTopicIndex);\n\n children.push(this.renderTopic(currentMark, currentTopicIndex, topicRef));\n\n prevStartInParagraph = endInParagraph;\n currentTopicIndex += 1;\n if (currentTopicIndex < this.props.topics.length) {\n start = this.props.topics[currentTopicIndex][0].start;\n end = this.props.topics[currentTopicIndex][0].end;\n }\n }\n // todo 25.11.19 this is not a complete fix, just a workaround\n // we have a segment with \\n inside. we need to split it\n if (start >= line.start && start <= line.end && end > line.end) {\n currentMark = line.content.substring(start - line.start);\n const topicRef = this.createTopicRef(currentTopicIndex);\n\n children.push(this.renderTopic(currentMark, currentTopicIndex, topicRef));\n\n start += line.end;\n currentTopicIndex += 1;\n }\n\n if (end !== line.end && prevStartInParagraph < paragraphLength) {\n children.push(line.content.substring(prevStartInParagraph, paragraphLength));\n }\n\n if (end === line.end && start === line.start && currentTopicIndex < this.props.topics.length) {\n children.push(line.content);\n }\n\n return

{children.length ? children : line.content}

;\n });\n }\n\n handleDocumentTypeChange(docType) {\n this.props.setDocumentType(docType);\n this.props.topicify('/extractTopicsInText', this.props.content);\n }\n\n hideNewAnalysisModal = () => {\n this.setState({newAnalysisModalOpened: false})\n };\n\n toggleSelectedTopic(topicIdx) {\n if (this.props.selectedTopic !== topicIdx) {\n this.props.selectTopic(topicIdx);\n } else {\n this.props.deselectTopic();\n }\n }\n\n moveToPrevAllowed() {\n return this.props.selectedTopic != null && this.props.selectedTopic !== 0;\n }\n\n moveToNextAllowed() {\n return this.props.selectedTopic != null && this.props.selectedTopic !== this.props.topics.length - 1;\n }\n\n moveToPrevTopic() {\n const prevTopic = this.props.selectedTopic - 1;\n if (prevTopic < 0) return;\n this.props.selectTopic(prevTopic);\n this.scrollToView(this.topicRefs[prevTopic]);\n }\n\n moveToNextTopic() {\n const nextTopic = this.props.selectedTopic + 1;\n if (nextTopic >= this.props.topics.length) return;\n this.props.selectTopic(nextTopic);\n this.scrollToView(this.topicRefs[nextTopic]);\n }\n\n scrollToView(ref) {\n ref.current.scrollIntoView({ block: \"center\", behavior: \"smooth\" });\n }\n\n render() {\n return (\n <>\n
\n
\n\n
\n

{ `${i18next.t('Result')}: ` }

{ DOC_TYPE_ENABLED && this.props.docType }\n
\n {COMPONENTS.moveButtonsEnabled &&\n <>\n this.moveToPrevTopic() : () => {}}\n />\n this.moveToNextTopic() : () => {}}\n />\n \n }\n {COMPONENTS.changeTypeButtonVisible &&\n this.setState({ newAnalysisModalOpened: true })}\n >\n {i18next.t('ButtonChangeType')}\n \n }\n this.props.clear()}>\n {i18next.t('ButtonMakeNewAnalysis')}\n \n
\n
\n
\n
\n
\n { this.props.topics.length === 0 ? this.props.content : this.generateHighlightedHTML() }\n
\n {\n this.state.newAnalysisModalOpened &&\n \n this.handleDocumentTypeChange(docType)}\n rejectCallback={this.hideNewAnalysisModal}\n close={this.hideNewAnalysisModal}\n />\n \n }\n \n );\n }\n}\n\nconst mapStateToProps = (state) => ({\n settings: state.settings,\n topicMapping: state.topicInfo.topicMapping,\n content: state.topicInfo.text,\n topics: state.topicInfo.topics,\n docType: state.docType,\n mostCommonTopics: state.topicInfo.mostCommonTopics,\n initiallySelectedTopics: state.topicInfo.initiallySelectedTopics,\n selectedTopics: state.topicInfo.selectedTopics,\n selectedTopic: state.topicInfo.selectedTopic,\n notificationShown: state.showNotification\n});\n\nexport default connect(mapStateToProps, { setTopicColors,\n clear,\n setDocumentType,\n topicify,\n showNotification,\n selectTopic, deselectTopic })(Content)\n","// Contains helper functions specific for the index.js in this directory.\n// Usually functions are pure and testable.\n// This module is created in order to be able to cover all the stuff (ideally) with the unit tests.\n\nconst mapLinesToOriginalTextPositions = lines => {\n let accumulatedLength = 0;\n return lines.map(el => {\n const result = {\n start: accumulatedLength,\n end: accumulatedLength + el.length,\n content: el\n };\n accumulatedLength += (el.length + 1); // 1 for \\n symbol\n return result;\n })\n};\n\nexport { mapLinesToOriginalTextPositions }\n","const toggleItemsToId = (items, id, currentlySelected) => {\n let newItems;\n if (currentlySelected === null || currentlySelected === undefined) {\n newItems = {\n ...items,\n [id]: {\n ...items[id],\n selected: true,\n showChildren: !items[id].showChildren\n }\n };\n } else {\n newItems = {\n ...items,\n [currentlySelected]: {\n ...items[currentlySelected],\n selected: false\n },\n [id]: {\n ...items[id],\n selected: true,\n showChildren: !items[id].showChildren\n }\n };\n }\n\n let { parentid } = items[id];\n while (parentid) {\n const parent = newItems[parentid];\n newItems = {\n ...newItems,\n [parentid]: {\n ...parent,\n showChildren: true\n }\n };\n // eslint-disable-next-line\n parentid = parent.parentid;\n }\n\n return newItems;\n};\n\nexport default {\n toggleItemsToId\n};\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport classNames from 'classnames';\nimport './styles.css';\n\nclass Node extends React.Component {\n getClassName = () =>\n classNames(\n 'react-collapsible-tree-node',\n { 'react-collapsible-tree-node-selected': this.props.selected },\n 'react-collapsible-tree-node-parent',\n this.props.className\n );\n\n handleClick = () => {\n const { id, onSelection } = this.props;\n onSelection(id);\n };\n\n // ConnectedNode is normally not allowed to be used before being declared\n // eslint:disable\n renderChild = childId => (\n
  • \n \n
  • \n );\n // eslint:enable\n\n render() {\n const { children, showChildren, name, link } = this.props;\n const parentNode = ();\n\n const leafNode = (\n \n {name}\n );\n\n return (\n \n
    \n { showChildren && children && }\n { !showChildren && children && }\n { children ? parentNode : leafNode}\n
    \n {showChildren && children &&
      {children.map(this.renderChild)}
    }\n
    \n );\n }\n}\n\nconst mapStateToProps = (state, ownProps) => typeof state.collapsibleTree[ownProps.topicId] !== 'undefined' ? state.collapsibleTree[ownProps.topicId][ownProps.id] : state.collapsibleTree;\n\nconst ConnectedNode = connect(mapStateToProps)(Node);\nexport default ConnectedNode;\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport Node from './components/node';\nimport { toggleChildren, updateStore } from '../../../../../actions';\n\nimport './styles.css';\n\nclass Tree extends React.Component {\n componentDidMount() {\n if (this.props.selection) {\n this.props.toggleChildren(this.props.topicId ,this.props.selection);\n }\n }\n\n shouldComponentUpdate(nextProps) {\n if (this.props.items !== nextProps.items) {\n return true;\n }\n return this.props.topIds !== nextProps.topIds;\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.items !== prevProps.items) {\n this.props.updateStore(this.props.topicId, this.props.items);\n }\n }\n\n render() {\n return (\n
    \n {this.props.topIds.map(topId => (\n \n ))}\n
    \n );\n }\n}\n\nconst mapStateToProps = state => ({\n ...state.collapsibleTree\n})\n\nconst ConnectedTree = connect(mapStateToProps, { toggleChildren, updateStore })(Tree);\nexport default ConnectedTree;\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport treeUtils from '../collapsible-tree/treeUtils';\nimport CollapsibleTree from '../collapsible-tree';\nimport './styles.css';\n\nclass TopicDetails extends React.PureComponent {\n state = {\n linksOpen: false,\n selected: null,\n items: null\n }\n\n componentDidUpdate(prevProps, prevState, snapshot) {\n if (this.props.collapsibleTree !== prevProps.collapsibleTree) {\n this.setState({\n items: this.props.collapsibleTree[this.props.topicId]\n })\n }\n }\n\n onSelection = id => {\n this.setState(state => ({\n selected: id,\n items: treeUtils.toggleItemsToId(state.items, id, state.selected)\n }));\n }\n\n handleToggleLinks() {\n this.setState({ linksOpen: !this.state.linksOpen });\n }\n\n render() {\n return (\n <>\n
    \n \n\n
    \n {this.props.children}\n
    \n
    \n\n {\n this.state.items &&\n <>\n \n {this.state.linksOpen &&\n !el.includes('-'))} // array containing all top level item ids\n selection={\"0\"} // selection\n topicId={this.props.topicId}\n onSelection={this.onSelection}\n indent={5}\n />\n }\n \n }\n \n );\n }\n}\n\nconst mapStateToProps = state => ({\n collapsibleTree: state.collapsibleTree\n});\n\nexport default connect(mapStateToProps)(TopicDetails);\n","import React from 'react';\nimport {connect} from 'react-redux';\nimport {addSelectedTopic, deselectAllTopics, removeSelectedTopic, selectAllTopics} from '../../../actions';\nimport { arrayIntersect } from '../../../utils';\nimport i18next from 'i18next';\nimport './styles.css';\n\nimport TopicDetails from \"./components/topic-details\";\n\nconst mapStateToProps = (state) => ({\n text: state.topicInfo.text,\n topicMapping: state.topicInfo.topicMapping,\n topics: state.topicInfo.topics,\n initiallySelectedTopics: state.topicInfo.initiallySelectedTopics,\n mostCommonTopics: state.topicInfo.mostCommonTopics,\n selectedTopics: state.topicInfo.selectedTopics,\n topicColors: state.topicColors\n});\n\n\nclass Topics extends React.Component {\n\n handleClick(clickedTopic) {\n if (this.props.selectedTopics.includes(clickedTopic)) {\n this.props.removeSelectedTopic(clickedTopic);\n } else {\n this.props.addSelectedTopic(clickedTopic);\n }\n };\n\n getButtonColor(currentTopic) {\n if (this.props.selectedTopics.indexOf(currentTopic) === -1) return null;\n if (this.props.topicColors) {\n return this.props.topicColors[currentTopic];\n }\n return 'gray';\n };\n\n\n handleSelectAll(event) {\n if (event.target.checked) {\n this.props.selectAllTopics();\n } else {\n this.props.deselectAllTopics();\n }\n };\n\n render() {\n const initiallySelectedTopics = arrayIntersect(this.props.mostCommonTopics, this.props.initiallySelectedTopics);\n const topicName = topicId => {this.props.topicMapping[topicId].split()};\n const allTopicsSelected = this.props.mostCommonTopics.length === this.props.selectedTopics.length;\n\n return (\n <>\n {this.props.mostCommonTopics &&\n
    \n\n {/* TODO: Actually reuse this. Better to move custom checkbox to separate component. */}\n\n
    \n
      \n
      \n \n
      \n { i18next.t('LabelSelectAll') }\n
      \n
      \n\n { initiallySelectedTopics && initiallySelectedTopics.map(el => (\n this.handleClick(el)}\n backgroundColor={this.getButtonColor(el)}\n >\n {topicName(el)}\n \n ))}\n\n {this.props.mostCommonTopics\n .filter(topic => !this.props.initiallySelectedTopics.includes(topic))\n .map(el => (\n this.handleClick(el)}\n backgroundColor={this.getButtonColor(el)}\n topicNumber={el}\n >\n {topicName(el)}\n \n ))}\n
    \n
    \n
    \n }\n \n );\n }\n}\n\nexport default connect(mapStateToProps, { addSelectedTopic, removeSelectedTopic, selectAllTopics, deselectAllTopics })(Topics)\n","import React from 'react'\nimport { connect } from 'react-redux';\nimport Topics from './components/topics';\nimport i18next from 'i18next';\nimport './styles.css';\n\n\nconst mapStateToProps = (state) => ({\n topics: state.topicInfo.topics,\n});\n\nclass Sidebar extends React.Component {\n render() {\n const topics = (\n
    \n
    \n \n
    \n
    \n );\n\n const noTopics = (\n
    \n
    \n
    \n { i18next.t('NoTopics') }\n
    \n
    \n { i18next.t('EmptySidebarMsg') }\n
    \n
    \n
    \n );\n\n return (\n \n );\n }\n}\n\nexport default connect(mapStateToProps, null)(Sidebar);\n","import React from 'react';\nimport configs from '../../configs';\nimport i18next from \"i18next\";\nconst { PREFIX } = configs;\n\nclass AgreementModal extends React.Component {\n handleAgree = event => {\n event.preventDefault();\n this.props.agreeCallback();\n this.props.close();\n };\n\n handleReject = event => {\n event.preventDefault();\n this.props.rejectCallback();\n this.props.close();\n };\n\n\n render() {\n return (\n <>\n
    \n {i18next.t('LinkLicenseAgreement')} {i18next.t('LicenseAgreement')}\n
    \n
    \n \n {i18next.t('ButtonAccept')}\n \n \n {i18next.t('ButtonReject')}\n \n
    \n \n );\n }\n}\n\nexport default AgreementModal;\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport i18next from 'i18next';\nimport Modal from '../modal';\nimport AgreementModal from '../modal/agreement-modal';\nimport { acceptAgreement, setTopicMappings, topicify } from '../actions';\nimport { store } from 'react-notifications-component';\nimport styles from './styles.module.css';\n\nimport configs from '../configs';\nconst { COMPONENTS, PREFIX } = configs;\n\n\nclass UserInputArea extends React.Component {\n\n state = {\n content: '',\n agreementModalVisible: false\n };\n\n handleSubmitManual = (event) => {\n event.preventDefault();\n if (!this.props.isAgreementAccepted && COMPONENTS.licenseVisible) {\n this.setState({ agreementModalVisible: true });\n } else {\n this.props.topicify('/extractTopicsInText', this.state.content);\n }\n };\n\n handleChange = (event) => {\n this.setState({ content: event.target.value });\n };\n\n closeAgreementModal = () => {\n this.setState({ agreementModalVisible: false });\n };\n\n handleAcceptAgreement() {\n localStorage.setItem('SilkContractsAcceptAgreement', 'true');\n this.props.acceptAgreement();\n this.props.topicify('/extractTopicsInText', this.state.content);\n }\n\n handleRejectAgreement() {\n store.addNotification({\n title: i18next.t('TitleNotification'),\n message: i18next.t('MsgAcceptLicense'),\n type: \"warning\",\n insert: \"bottom\",\n container: \"bottom-right\",\n animationIn: [\"animated\", \"fadeIn\"],\n animationOut: [\"animated\", \"fadeOut\"],\n dismiss: {\n duration: 5*1000*1000*1000,\n onScreen: true\n }\n });\n }\n\n render() {\n return (\n
    \n

    {i18next.t('LabelEnterText')}

    \n \n\n
    \n \n {COMPONENTS.licenseVisible &&\n \n {i18next.t('LicenseAgreementLink')}\n }\n
    \n\n { this.state.agreementModalVisible && (\n \n this.handleAcceptAgreement()}\n rejectCallback={() => this.handleRejectAgreement()}\n />\n )}\n \n );\n }\n\n}\n\nconst mapStateToProps = (state) => ({\n settings: state.settings,\n isAgreementAccepted: state.isAgreementAccepted,\n initiallySelectedTopics: state.topicInfo.initiallySelectedTopics,\n mostCommonTopics: state.topicInfo.mostCommonTopics,\n topicMapping: state.topicInfo.topicMapping,\n notificationShown: state.showNotification\n});\n\nexport default connect(mapStateToProps, { acceptAgreement, setTopicMappings, topicify })(UserInputArea);\n","import React from 'react';\nimport i18next from 'i18next';\nimport './styles.css';\n\nconst Settings = ({ settings, changeSettings }) => {\n return (\n
    \n
    \n
    \n
    \n \n {changeSettings({...settings, threshold: event.target.value})}}\n defaultValue={settings.threshold}\n type=\"number\"\n className=\"form-control\"\n id=\"threshold\"\n />\n
    \n
    \n\n
    \n
    \n \n {changeSettings({...settings, fragmentsSize: event.target.value})}}\n defaultValue={settings.fragmentsSize}\n type=\"number\"\n className=\"form-control\"\n id=\"fragments\"\n />\n
    \n
    \n
    \n\n\n {\n settings.segmentType === 'Context optimal' &&\n
    \n
    \n
    \n \n {changeSettings({...settings, segmentLength: event.target.value})}}\n defaultValue={settings.segmentLength}\n type=\"number\"\n className=\"form-control\"\n id=\"segment-len\"/>\n
    \n
    \n
    \n }\n\n {\n settings.segmentType === 'Context by words' &&\n
    \n
    \n
    \n \n {changeSettings({...settings, contextWindow: event.target.value})}}\n defaultValue={settings.contextWindow}\n type=\"number\"\n className=\"form-control\"\n id=\"context-window\"/>\n
    \n
    \n\n
    \n
    \n \n {changeSettings({...settings, contextGap: event.target.value})}}\n defaultValue={settings.contextGap}\n type=\"number\"\n className=\"form-control\"\n name=\"segment-len\"/>\n
    \n
    \n
    \n }\n\n {\n settings.segmentType === 'Context greedy' &&\n
    \n
    \n
    \n \n {changeSettings({...settings, maxSplits: event.target.value})}}\n defaultValue={settings.segmentLength}\n type=\"number\"\n className=\"form-control\"\n id=\"max-splits\"/>\n
    \n
    \n
    \n }\n\n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n );\n};\n\nexport default Settings;\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport {setSettings, topicify} from '../../actions';\nimport Settings from \"../../sidebar/components/settings\";\nimport i18next from \"i18next\";\n\n\nconst mapStateToProps = (state) => ({\n text: state.topicInfo.text,\n settings: state.settings\n});\n\nclass SettingsModal extends React.Component {\n state = {\n settings: this.props.settings\n };\n\n handleSubmit = (event) => {\n this.props.close();\n event.preventDefault();\n this.props.setSettings({\n threshold: Number(this.state.settings.threshold),\n fragmentsSize: Number(this.state.settings.fragmentsSize),\n segmentLength: Number(this.state.settings.segmentLength),\n maxSplits: Number(this.state.settings.maxSplits),\n segmentType: this.state.settings.segmentType,\n contextWindow: Number(this.state.settings.contextWindow),\n contextGap: Number(this.state.settings.contextGap)\n });\n\n this.props.topicify('extractTopicsInText', this.props.text);\n };\n\n render() {\n return (\n <>\n
    \n this.setState({ settings })}\n />\n
    \n
    \n \n { i18next.t('ButtonSaveChanges') }\n \n
    \n );\n }\n}\n\nexport default connect(mapStateToProps, { setSettings, topicify })(SettingsModal);\n","import React from 'react';\nimport config from '../../configs/config';\n\nclass AboutModal extends React.Component {\n\n render() {\n return (\n <>\n
    \n
    \n this.props.close()}>\n OK\n \n
    \n );\n }\n}\n\nexport default AboutModal;\n","import React, { useState } from 'react';\nimport Modal from '../modal';\nimport SettingsModal from '../modal/settings-modal';\nimport AboutModal from '../modal/about-modal';\nimport i18next from 'i18next';\nimport styles from './styles.module.css';\n\nimport configs from '../configs';\nimport config from '../configs/config';\nconst { COMPONENTS } = configs;\n\nfunction TopMenuNavbar() {\n const [settingsOpened, setSettingsOpened] = useState(false);\n const [aboutOpened, setAboutOpened] = useState(false);\n\n return (\n
    \n \n\n { settingsOpened &&\n setSettingsOpened(false)}\n iconStyles=\"fa fa-2x fa-cog\"\n title={i18next.t('LabelSettings')}\n >\n setSettingsOpened(false)}\n />\n }\n\n { aboutOpened &&\n setAboutOpened(false)}\n title={config.title}\n >\n setAboutOpened(false)}\n />\n }\n
    \n );\n}\n\n\nexport default TopMenuNavbar;\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport textSegmentation from './apis/textSegmentation';\nimport Content from './content';\nimport Sidebar from './sidebar';\nimport UserInputArea from './user-input-area';\nimport TopMenuNavbar from './top-menu-navbar';\nimport ReactNotification from 'react-notifications-component';\nimport 'react-notifications-component/dist/theme.css';\nimport config from './configs/config';\n\nimport { setDefaultDocumentType, setDocumentType, setDocumentTypes } from './actions';\n\n\nconst mapStateToProps = (state) => ({\n topics: state.topicInfo.topics\n});\n\nclass App extends React.Component {\n\n componentDidMount () {\n const title = document.createElement(\"title\");\n title.innerText = config.title;\n\n const description = document.createElement(\"meta\");\n description.name = 'description';\n description.content = config.description;\n\n document.head.appendChild(title);\n document.head.appendChild(description);\n\n this.retrieveDocumentTypes();\n }\n\n retrieveDocumentTypes() {\n textSegmentation.get('/getDocumentTypes')\n .then(response => {\n const names = response.data.names;\n const defaultIdx = response.data.defaultDocTypeIdx;\n\n this.props.setDocumentTypes(names || []);\n this.props.setDefaultDocumentType(names[defaultIdx] || '');\n this.props.setDocumentType(names[defaultIdx] || '');\n });\n }\n\n render () {\n return (\n <>\n \n
    \n \n
    \n { this.props.topics && }\n { !this.props.topics && }\n
    \n
    \n \n \n )\n }\n}\n\nexport default connect(mapStateToProps, { setDocumentTypes, setDocumentType, setDefaultDocumentType })(App);\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","/**\n * This reducer is responsible for isAgreementAccepted part of the store\n */\n\nimport {ACCEPT_AGREEMENT} from \"../actions/actionTypes\";\n\nconst initialState = localStorage.getItem('SilkContractsAcceptAgreement') === 'true';\n\nexport default (state=initialState, action) => {\n if (action.type === ACCEPT_AGREEMENT) {\n return true;\n }\n return state;\n}\n","import {SET_SETTINGS} from '../actions/actionTypes';\n\nconst initialSettings = {\n threshold: 0.2,\n fragmentsSize: 1,\n segmentLength: 5,\n segmentType: 'Sentence',\n maxSplits: 15,\n contextWindow: 24,\n contextGap: 12\n};\n\nexport default (state=initialSettings, action) => {\n if (action.type === SET_SETTINGS) {\n return action.settings;\n }\n return state;\n}\n","import {\n ADD_SELECTED_TOPIC,\n CLEAR,\n DESELECT_ALL_TOPICS, DESELECT_TOPIC,\n REMOVE_SELECTED_TOPIC,\n SELECT_ALL_TOPICS, SELECT_TOPIC,\n TOPICIFY\n} from '../actions/actionTypes';\n\n\nconst initialState = {\n text: '',\n topics: null,\n initiallySelectedTopics: [],\n mostCommonTopics: [],\n selectedTopics: [],\n selectedTopic: null,\n docType: '',\n userInputArea: 'upload'\n};\n\nexport default (state=initialState, action) => {\n switch (action.type) {\n case TOPICIFY:\n const data = action.payload.data;\n return {\n topicMapping: data.topic_mapping,\n text: data.original_text,\n topics: data.topics,\n initiallySelectedTopics: data.initially_selected_topics,\n mostCommonTopics: data.most_common_topics,\n selectedTopics: data.most_common_topics.filter(el => data.initially_selected_topics.includes(el)),\n userInputArea: null\n };\n case CLEAR:\n return initialState;\n case ADD_SELECTED_TOPIC:\n return {\n ...state,\n selectedTopics: state.selectedTopics.concat([action.topic])\n };\n\n case REMOVE_SELECTED_TOPIC:\n return {\n ...state,\n selectedTopics: state.selectedTopics.filter(el => el !== action.topic)\n };\n\n case SELECT_ALL_TOPICS:\n return {\n ...state,\n selectedTopics: state.mostCommonTopics.map(el => el)\n };\n\n case DESELECT_ALL_TOPICS:\n return {\n ...state,\n selectedTopics: []\n };\n case SELECT_TOPIC:\n const { selectedTopic } = action;\n return {\n ...state,\n selectedTopic\n }\n case DESELECT_TOPIC:\n return {\n ...state,\n selectedTopic: null\n }\n default:\n return state;\n }\n}\n","import {\n TREE_INITIALIZE,\n TREE_SELECT_NODE,\n TREE_TOGGLE_CHILDREN,\n TREE_UNSELECT,\n TREE_UPDATE_STORE\n} from '../actions/actionTypes';\n\nconst node = (state, action) => {\n switch (action.type) {\n case TREE_TOGGLE_CHILDREN:\n return {\n ...state,\n showChildren: !state.showChildren,\n selected: true\n };\n case TREE_SELECT_NODE:\n return {\n ...state,\n selected: true\n };\n case TREE_UNSELECT:\n return {\n ...state,\n selected: false\n };\n default:\n return state;\n }\n};\n\nexport default (state = {}, action) => {\n const { topicId, nodeId } = action;\n\n if (action.type === TREE_INITIALIZE) {\n return action.collapsibleTree;\n }\n\n if (action.type === TREE_UPDATE_STORE) {\n return {\n ...state,\n [topicId]: action.store\n }\n }\n\n if (typeof nodeId === 'undefined') {\n return state;\n }\n\n const newState = topicId ? {\n ...state,\n [topicId]: {\n ...state[topicId],\n [nodeId]: node(state[topicId][nodeId], action),\n selected: nodeId\n }\n } : {\n ...state,\n [nodeId]: node(state[nodeId], { nodeId: action.nodeId }),\n selected: nodeId\n };\n\n if (typeof topicId !== 'undefined' && state[topicId].selected !== nodeId && (action.type === TREE_TOGGLE_CHILDREN || action.type === TREE_SELECT_NODE)) {\n const oldSelectedNodeId = state[topicId].selected;\n return {\n ...newState,\n [topicId]: {\n ...state[topicId],\n [oldSelectedNodeId]: node(state[oldSelectedNodeId], {type: TREE_UNSELECT})\n }\n };\n }\n\n if (typeof topicId === 'undefined' && state.selected !== nodeId && (action.type === TREE_TOGGLE_CHILDREN || action.type === TREE_SELECT_NODE)) {\n const oldSelectedNodeId = state.selected;\n return {\n ...newState,\n [oldSelectedNodeId]: node(state[oldSelectedNodeId], {type: TREE_UNSELECT})\n };\n }\n\n return newState;\n};\n","import {combineReducers} from 'redux';\nimport agreement from './agreement';\nimport documentType from './documentType';\nimport documentTypes from './documentTypes';\nimport defaultDocumentType from './defaultDocumentType';\nimport notification from './notification';\nimport settings from './settings';\nimport topicColors from './topicColors';\nimport topicInfo from './topicInfo';\nimport topicMappings from './topicMappings';\nimport collapsibleTree from './collapsibleTree';\n\nexport default combineReducers({\n isAgreementAccepted: agreement,\n docType: documentType,\n documentTypes,\n defaultDocType: defaultDocumentType,\n showNotification: notification,\n settings,\n topicColors,\n topicInfo,\n topicMapping: topicMappings,\n collapsibleTree\n});\n","/**\n * This reducer is responsible for the docType part of store.\n * docType is a returned from the server document type\n */\n\nimport {SET_DOCUMENT_TYPE} from '../actions/actionTypes';\n\nexport default (state='', action) => {\n if (action.type === SET_DOCUMENT_TYPE) {\n return action.docType;\n }\n return state;\n}\n","/**\n * This reducer is responsible for the documentTypes part of store.\n * Do not confuse it with docType!\n * Document types are returned from the server.\n * Nothing can be returned as well (in this case there is an empty array in the store).\n */\n\nimport {SET_DOCUMENT_TYPES} from '../actions/actionTypes';\n\nexport default (state=[], action) => {\n if (action.type === SET_DOCUMENT_TYPES) {\n return action.documentTypes;\n }\n return state;\n}\n","/**\n * This reducer is responsible for the defaultDocType part of the store.\n * Default doc type is returned from the server.\n */\n\nimport {SET_DEFAULT_DOCUMENT_TYPE} from '../actions/actionTypes';\n\nexport default (state='', action) => {\n if (action.type === SET_DEFAULT_DOCUMENT_TYPE) {\n return action.defaultDocType;\n }\n return state;\n};\n","import {SHOW_NOTIFICATION} from \"../actions/actionTypes\";\n\nexport default (state=false, action) => {\n if (action.type === SHOW_NOTIFICATION) {\n return action.isShown;\n }\n return false;\n};\n","import {SET_TOPIC_COLORS} from '../actions/actionTypes';\n\nexport default (state={}, action) => {\n if (action.type === SET_TOPIC_COLORS) {\n return action.topicColors;\n }\n return state;\n}\n","import {SET_TOPIC_MAPPINGS} from '../actions/actionTypes';\n\nexport default (state={}, action) => {\n if (action.type === SET_TOPIC_MAPPINGS) {\n return action.topicMapping;\n }\n return state;\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport thunk from 'redux-thunk';\nimport TagManager from 'react-gtm-module';\nimport { createStore, applyMiddleware, compose } from 'redux';\nimport { Provider } from 'react-redux';\n\nimport { I18nextProvider } from 'react-i18next';\nimport i18n from './i18n';\n\nimport './index.css';\nimport App from './App';\nimport * as serviceWorker from './serviceWorker';\nimport 'bootstrap/dist/css/bootstrap.css';\nimport 'font-awesome/css/font-awesome.css';\n\nimport setText from './reducers';\n\n\nif (process.env.NODE_ENV === 'production' && process.env.REACT_APP_GA_TAG) {\n const tagManagerArgs = {\n gtmId: process.env.REACT_APP_GA_TAG\n };\n TagManager.initialize(tagManagerArgs);\n}\n\n\nconst devTools = process.env.NODE_ENV === 'development' ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__() : dummy => dummy;\nconst store = createStore(setText, compose(applyMiddleware(thunk), devTools));\n\nReactDOM.render(\n \n \n \n \n ,\n 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: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"popover-component\":\"styles_popover-component__EX-Le\",\"popover\":\"styles_popover__17c_q\",\"pop\":\"styles_pop__3DXJU\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"top-menu\":\"styles_top-menu__gfztv\",\"settings-button\":\"styles_settings-button__2oH6k\",\"top-menu-navbar\":\"styles_top-menu-navbar__3Opn4\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"form-upload-style\":\"styles_form-upload-style__1vDtu\",\"textarea-upload-style\":\"styles_textarea-upload-style__AzxqA\"};"],"sourceRoot":""}