{"version":3,"sources":["store/types.tsx","taskpane/constants/types.tsx","taskpane/models/WordTypeCountMO.tsx","taskpane/models/WordTypeScoreMO.tsx","taskpane/models/ChunkDataMO.tsx","taskpane/models/ChunkDetailsMO.tsx","taskpane/models/ChunkNodeMO.tsx","taskpane/models/ChunkListMO.tsx","taskpane/models/ExclusionsMO.tsx","taskpane/models/ThemeMO.tsx","taskpane/models/GraphCheckListMO.tsx","taskpane/reducers/rootReducer.tsx","taskpane/reducers/chunkDetailsMOReducer.tsx","taskpane/reducers/chunkListMOReducer.tsx","taskpane/reducers/wordTypeScoreMOReducer.tsx","taskpane/reducers/exclusionsMOReducer.tsx","taskpane/reducers/themeMOReducer.tsx","taskpane/reducers/graphCheckListMOReducer.tsx","taskpane/reducers/isShowInfoPaneReducer.tsx","taskpane/reducers/isShowSettingsPaneReducer.tsx","store/reducers/rootReducer.tsx","store/reducers/textInputReducer.tsx","store/reducers/downloadAddinsReducer.tsx","store/store/store.tsx","taskpane/database/wordData.tsx","taskpane/constants/config.tsx","taskpane/Manager/LocalStorageManager.tsx","taskpane/Manager/ConfigManager.tsx","taskpane/models/WordMO.tsx","taskpane/Manager/WordManager.tsx","taskpane/models/ParagraphMO.tsx","taskpane/components/Analysis/Analysis.tsx","taskpane/components/ChunkDetails/ExcludeParagraph.tsx","taskpane/components/AppCallout/AppCallout.tsx","taskpane/components/ChunkDetails/ChunkDetails.tsx","taskpane/components/Graph/GraphPart.tsx","taskpane/components/Graph/GraphCallout.tsx","taskpane/components/Graph/Graph.tsx","taskpane/components/WdCommandBar/DownloadAddInsText.tsx","taskpane/components/WdCommandBar/WdCommandBar.tsx","taskpane/components/Diagnosis/Diagnosis.tsx","taskpane/components/SettingsPane/CustomExclusionText.tsx","taskpane/components/SettingsPane/SettingsPane.tsx","TextInput.tsx","taskpane/components/App.tsx","serviceWorker.ts","index.tsx"],"names":["types","WordTypeCountMO","verb","noun","prep","waste","ad_","this","wtc","WordTypeScoreMO","verbScore","nounScore","prepScore","wasteScore","ad_Score","average","verbRating","nounRating","prepRating","wasteRating","ad_Rating","verbGraphScore","nounGraphScore","prepGraphScore","wasteGraphScore","ad_GraphScore","ChunkDataMO","title","content","wordTypeCount","wordTypeScore","contentWordCount","ChunkDetailsMO","index","isShow","data","ChunkNodeMO","next","isUpdated","ChunkListMO","head","length","lastLoadedParagraphIndex","nodeProcessed","paragraphMOs","chunks","isFewWordCount","chunkDataMO","addFirst","push","temp","chunkListMO","ExclusionsMO","parens","singleQuotes","doubleQuotes","headings","indentedParagraphs","listItems","tables","wordCountLessThan","customExclusion","lowerCaseCustomExclusion","map","value","toLowerCase","ThemeMO","key","themeTitle","themeQuestion","ratings","customeThemeRatings","GraphCheckListMO","cVerb","cNoun","cPrep","cWaste","cAd_","type","taskPaneReducers","chunkDetailsMO","state","action","wordTypeScoreMO","exclusionsMO","themeMO","graphCheckListMO","isShowInfoPane","isShowSettingsPane","rootReducer","combineReducers","webTextInput","text","forceLoadToggle","refreshToggle","downloadAddins","showDownloadButton","show","store","createStore","window","__REDUX_DEVTOOLS_EXTENSION__","wordData","verbTokenRegex","verbTokenMatch","nounTokenRegex","nounExceptionMatch","adjTokenRegex","adjectiveAdverbExceptionMatch","prepositionTokenMatch","wasteWordTokenMatch","Config","base","buildNumber","require","version","punctuation","strippedOutExclusionPunctuations","metrics","Overall","order","borderColor","color","secondaryColor","hue","label","word","longDescription","Verbs","scoreCutoffs","Nouns","Prepositions","AdjectivesAdverbs","WasteWords","ratingLabelPresets","0","1","2","3","4","exclusions","themeDefault","themeCustomKey","chunkLength","nodePerProcess","delayPerProcess","LocalStorageManager","_themeName","_exclusionsName","tryCatchWrapper","functionCaller","getThemeMOFromLocalStorage","JSON","parse","localStorage","getItem","setThemeMOToLocalStorage","lsThemeMO","stringify","setItem","getExclusionsMOFromLocalStorage","setExclusionsMOToLocalStorage","lsExclusionMO","ConfigManager","getThemeByKey","idx","findIndex","item","_preset","_rating","themeMo","getCustomThemeKey","getDefaultTheme","getDefaultExclusions","ex","getRatingLabelPresets","getPunctuation","getStrippedOutExclusionPunctuations","RegExp","getMetrics","getChunkLength","getNodePerProcess","getDelayPerProcess","WordMO","exclude","WordManager","score","Math","min","floor","replace","c","undefined","match","words","wc","split","forEach","term","start","flag","isLetter","i","result","slice","chunkTitle","chunkIndex","count","paragraphs","string","test","chunkIdx","paragraphIdx","wordIdx","k","wordMO","containsWord","max","calculateAverage","verifyScore","getScore","Metrics","ParagraphMO","isHeading","isList","isTable","isLeftIndent","scoreContributionWeight","scoreAverageWeightCutoff","strippedOutExclusionPunctuationsRex","Analysis","previousLength","trim","followsPeriod","charAt","wordLowercase","endsWith","isFirstLetterCapitalize","find","x","identifVerbs","identifyNouns","identifyPrepositions","identifyAd_s","identifyWastes","startSingleQuote","startsWith","startDoubleQuote","startParens","includes","paragraph","remainingWordCount","_verb","_waste","_noun","_prep","_ad_","excludeParens","excludeSingleQuote","excludeDoubleQuote","lowerCaseWord","strippedWord","indexOf","separateWord","identifyWord","wordCount","rating","round","scoreContribution","graphScore","totalWord","calculateScore","totalWeight","averageScore","paragrapgh","getWords","chunkListMOLengthBeforeProcess","isNodesProcess","currenParagraph","paragraphMO","createParagraphMO","calculateWord","append","calculateChunkNodeScores","chunkListMOInput","clone","newChunk","createChunkDataMO","addLast","ExcludeParagraph","props","context","isOpen","setState","className","onClick","clickHandler","FontIcon","iconName","renderFull","renderBrief","React","AppCallout","appCallout","setTimeout","click","other","Callout","ariaLabelledBy","ariaDescribedBy","role","gapSpace","setInitialFocus","id","ref","input","children","ChunkDetails","_spanElements","_currentSpan","moveToWord","_paragraphIdx","_wordIdx","_word","console","log","renderCallout","onCalloutDismiss","isCalloutVisible","target","onDismiss","renderContent","isBlock","changeColor","listWord","searchWord","element","getWordType","analysis","addWord","combineGraphCheckList","connect","dispatch","setChunkDetailsMO","setWordTypeScoreMO","GraphPart","down","active","setGraphCheckListMO","_graphCheckListMO","setCheck","pct","theLabel","theBar","style","width","backgroundColor","checkBoxHandler","Checkbox","checked","getIsChecked","GraphCallout","showDiagnosisCallout","icons","faSmileBeam","faGrinHearts","faMeh","faFrown","faSadCry","directionalHint","DirectionalHint","bottomCenter","icon","Graph","theSections","theLines","theEmojis","flex","graph","DownloadAddInsText","data-tip","data-for","data-event","place","effect","wrapper","clickable","multiline","border","globalEventOff","href","rel","WdCommandBar","setShowSettingsPane","CommandBar","items","farItems","iconProps","ariaLabel","open","Diagnosis","closeButtonHandler","topCenter","getChunkDetailsRating","getChunkListRating","percent","toString","summaryCalloutText","getPercentage","faCopy","getIconColor","faFileAlt","getRating","IconButton","styles","root","getMessage","CustomExclusionText","_a2S","a","_s2A","s","prevProps","_prevState","renderLabelWithTooltip","setUnsaveExclusionsValue","TextField","onRenderLabel","onChange","ev","onBlur","_ev","strippedWords","SettingsPane","CUSTOM_KEY","getUnsaveExclusionsValue","name","unsaveExclusionsMO","newValue","settingEntry","updatedSettings","saveExclusionsMO","getUnsaveThemeValue","unsaveThemeMO","setUnsaveThemeValue","saveThemeMO","tooltipText","TooltipHost","renderExclusionsCheckbox","settingValue","renderThemeTab","onRenderLanguageChoiceLabel","labelId","options","preset","onRenderLanguageCurrentChoice","ChoiceGroup","option","_themeMO","isShowCustomTheme","selectedKey","required","ratingHandler","pos","onRenderCustomTheme","newTheme","useDefaultTheme","renderExclusionTab","removeSuffix","unitSuffix","substr","hasSuffix","Stack","tokens","childrenGap","Label","SpinButton","onValidate","Number","isNaN","String","onIncrement","onDecrement","incrementButtonAriaLabel","decrementButtonAriaLabel","_exclusionsMO","useDefaultSeting","cancelButtonHandler","setHideSettingsPane","refreshAction","setThemeMO","refreshWebTextInput","setExclusionsMO","Panel","hasCloseButton","PanelType","smallFixedFar","onRenderHeader","PrimaryButton","onRenderBody","Pivot","linkFormat","PivotLinkFormat","tabs","linkSize","PivotLinkSize","normal","PivotItem","headerText","isFooterAtBottom","webTypes","setWebTextInput","showDownloadAddinsButton","useState","setText","textRef","useRef","aria-label","e","_e","inputText","App","updateChunkDetails","chunk","getChunkAtIndex","getWordDocument","setChunkListMO","newChunkListMO","countEligibleWords","statusInfo","tempChucked","splitIntoChunks","setLoading","isLoad","setNextWordTypeScoreMO","nextProps","chunkNodeMO","renderAppLayout","Boolean","location","hostname","initializeIcons","ReactDOM","render","document","getElementById","navigator","serviceWorker","ready","then","registration","unregister","catch","error","message"],"mappings":"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C,eAAgB,CAAC,KAAM,KAAM,MAAO,MAAO,OAAQ,KAAM,QAGzDC,eAAgB,CACf,MACA,OACA,MACA,OACA,MACA,QACA,OACA,QACA,OACA,OACA,QACA,OACA,SAIDC,mBAAoB,CACnB,UACA,WACA,YACA,UACA,OACA,QACA,QACA,YACA,SACA,QACA,MACA,QACA,SACA,OACA,UACA,UACA,SACA,QACA,QACA,OACA,SACA,QACA,QACA,SACA,UACA,WACA,WACA,YACA,SACA,WACA,QAIDC,cAAe,CACd,KACA,KACA,MACA,MACA,OACA,MACA,OACA,OACA,KACA,MACA,KACA,OAIDC,8BAA+B,CAC9B,OACA,QACA,MACA,cACA,aACA,SACA,QACA,UACA,SACA,OACA,QACA,OACA,UACA,UACA,YACA,QACA,OACA,QACA,OACA,SACA,aACA,YACA,OACA,QACA,QACA,QACA,SACA,SACA,OACA,MACA,cACA,MACA,OACA,OACA,QACA,QACA,UACA,OACA,OACA,QACA,SACA,OACA,OACA,OACA,OACA,QACA,QACA,SACA,OACA,QACA,WACA,WACA,SACA,QACA,OACA,OACA,MACA,OACA,OACA,UACA,QACA,YACA,UACA,SACA,QACA,OACA,OACA,SACA,OACA,OACA,SACA,UACA,QACA,SACA,QACA,QACA,OACA,YACA,OACA,QACA,QACA,SACA,QACA,QACA,UACA,SACA,WACA,QACA,QACA,OACA,OACA,SACA,UACA,UACA,SACA,SACA,OACA,OACA,OACA,OACA,OACA,QAIDC,sBAAuB,CACtB,QACA,QACA,SACA,QACA,UACA,QACA,QACA,SACA,KACA,SACA,SACA,QACA,UACA,SACA,UACA,SACA,KACA,OACA,SACA,MACA,OACA,KACA,SACA,OACA,OACA,KACA,MACA,KACA,OACA,MACA,UACA,OACA,OACA,UACA,aACA,OACA,KACA,SACA,QACA,aACA,QACA,KACA,OACA,OACA,SACA,WAIDC,oBAAqB,CACpB,KACA,OACA,OACA,QACA,YACA,cACA,eACA,OACA,SACA,aChPWC,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","file":"static/js/main.5e8a1334.chunk.js","sourcesContent":["export const types = {\n\tWEB_TEXT_INPUT: 'WEB_TEXT_INPUT',\n\tREFRESH_TEXT_INPUT: 'REFRESH_TEXT_INPUT',\n\tDOWNLOAD_ADDINS_SHOW: 'DOWNLOAD_ADDINS_SHOW',\n};\n","export const types = {\n\t// MO\n\tSET_CHUNK_DETAILS: 'select chunk details',\n\tSET_CHUNK_LIST: 'select chunk list',\n\tSET_SCORE: 'set score',\n\tSET_EXCLUSIONS: 'SET_EXCLUSIONS',\n\tSET_THEME: 'SET_THEME',\n\tSET_GRAPH_CHECK_LIST: 'SET_GRAPH_CHECK_LIST',\n\n\t// TRUE / FALSE\n\tSHOW_INFO_PANE: 'show info pane',\n\tHIDE_INFO_PANE: 'hide info pane',\n\tSHOW_SETTINGS_PANE: 'SHOW_SETTINGS_PANE',\n\tHIDE_SETTINGS_PANE: 'HIDE_SETTINGS_PANE',\n\n\t// CHECKBOX\n\tCHECK_VERB: 'CHECK_VERB',\n\tCHECK_NOUN: 'CHECK_NOUN',\n\tCHECK_PREP: 'CHECK_PREP',\n\tCHECK_AD_: 'CHECK_AD_',\n\tCHECK_WASTE: 'CHECK_WASTE',\n};\n","export class WordTypeCountMO {\n\tpublic verb: number;\n\tpublic noun: number;\n\tpublic prep: number;\n\tpublic waste: number;\n\tpublic ad_: number;\n\n\tconstructor(verb = 0, noun = 0, prep = 0, waste = 0, ad_ = 0) {\n\t\tthis.noun = noun;\n\t\tthis.prep = prep;\n\t\tthis.verb = verb;\n\t\tthis.waste = waste;\n\t\tthis.ad_ = ad_;\n\t}\n\n\tpublic append(wtc: WordTypeCountMO) {\n\t\tthis.noun += wtc.noun;\n\t\tthis.prep += wtc.prep;\n\t\tthis.verb += wtc.verb;\n\t\tthis.waste += wtc.waste;\n\t\tthis.ad_ += wtc.ad_;\n\t}\n\n\tpublic reset() {\n\t\tthis.noun = 0;\n\t\tthis.prep = 0;\n\t\tthis.verb = 0;\n\t\tthis.waste = 0;\n\t\tthis.ad_ = 0;\n\t}\n}\n","export class WordTypeScoreMO {\n\tpublic verbScore: number;\n\tpublic nounScore: number;\n\tpublic prepScore: number;\n\tpublic wasteScore: number;\n\tpublic ad_Score: number;\n\tpublic verbGraphScore: number;\n\tpublic nounGraphScore: number;\n\tpublic prepGraphScore: number;\n\tpublic wasteGraphScore: number;\n\tpublic ad_GraphScore: number;\n\tpublic verbRating: number;\n\tpublic nounRating: number;\n\tpublic prepRating: number;\n\tpublic wasteRating: number;\n\tpublic ad_Rating: number;\n\tpublic average: number;\n\n\tconstructor(\n\t\tverbScore = 0,\n\t\tnounScore = 0,\n\t\tprepScore = 0,\n\t\twasteScore = 0,\n\t\tad_Score = 0,\n\t\taverage = 0,\n\t\tverbRating = 0,\n\t\tnounRating = 0,\n\t\tprepRating = 0,\n\t\twasteRating = 0,\n\t\tad_Rating = 0,\n\t\tverbGraphScore = 0,\n\t\tnounGraphScore = 0,\n\t\tprepGraphScore = 0,\n\t\twasteGraphScore = 0,\n\t\tad_GraphScore = 0,\n\t) {\n\t\tthis.nounScore = nounScore;\n\t\tthis.prepScore = prepScore;\n\t\tthis.verbScore = verbScore;\n\t\tthis.wasteScore = wasteScore;\n\t\tthis.ad_Score = ad_Score;\n\t\tthis.average = average;\n\t\tthis.verbRating = verbRating;\n\t\tthis.nounRating = nounRating;\n\t\tthis.prepRating = prepRating;\n\t\tthis.wasteRating = wasteRating;\n\t\tthis.ad_Rating = ad_Rating;\n\t\tthis.nounGraphScore = nounGraphScore;\n\t\tthis.prepGraphScore = prepGraphScore;\n\t\tthis.verbGraphScore = verbGraphScore;\n\t\tthis.wasteGraphScore = wasteGraphScore;\n\t\tthis.ad_GraphScore = ad_GraphScore;\n\t}\n\n\tpublic reset() {\n\t\tthis.nounScore = 0;\n\t\tthis.prepScore = 0;\n\t\tthis.verbScore = 0;\n\t\tthis.wasteScore = 0;\n\t\tthis.ad_Score = 0;\n\t\tthis.verbRating = 0;\n\t\tthis.nounRating = 0;\n\t\tthis.prepRating = 0;\n\t\tthis.wasteRating = 0;\n\t\tthis.ad_Rating = 0;\n\t\tthis.nounGraphScore = 0;\n\t\tthis.prepGraphScore = 0;\n\t\tthis.verbGraphScore = 0;\n\t\tthis.wasteGraphScore = 0;\n\t\tthis.ad_GraphScore = 0;\n\t}\n}\n","import { WordTypeCountMO } from './WordTypeCountMO';\nimport { WordTypeScoreMO } from './WordTypeScoreMO';\nimport { ParagraphMO } from './ParagraphMO';\n\nexport class ChunkDataMO {\n\tpublic title: string;\n\tpublic content: ParagraphMO[];\n\tpublic wordTypeCount: WordTypeCountMO;\n\tpublic wordTypeScore: WordTypeScoreMO;\n\tpublic contentWordCount: number;\n\n\tconstructor(\n\t\ttitle: string = '',\n\t\tcontent: ParagraphMO[] = [],\n\t\twordTypeCount: WordTypeCountMO = new WordTypeCountMO(),\n\t\twordTypeScore: WordTypeScoreMO = new WordTypeScoreMO(),\n\t\tcontentWordCount: number = 0,\n\t) {\n\t\tthis.title = title;\n\t\tthis.content = content;\n\t\tthis.wordTypeCount = wordTypeCount;\n\t\tthis.wordTypeScore = wordTypeScore;\n\t\tthis.contentWordCount = contentWordCount;\n\t}\n}\n","import { ChunkDataMO } from './ChunkDataMO';\n\nexport class ChunkDetailsMO {\n\tpublic isShow: boolean;\n\tpublic data: ChunkDataMO;\n\tpublic index: number;\n\n\tconstructor(\n\t\tindex: number = 0,\n\t\tisShow: boolean = false,\n\t\tdata: ChunkDataMO = new ChunkDataMO(),\n\t) {\n\t\tthis.index = index;\n\t\tthis.isShow = isShow;\n\t\tthis.data = data;\n\t}\n}\n","import { ChunkDataMO } from './ChunkDataMO';\n\nexport class ChunkNodeMO {\n\tpublic index: number;\n\tpublic data: ChunkDataMO;\n\tpublic next: ChunkNodeMO;\n\tpublic isUpdated: boolean;\n\n\tconstructor(\n\t\tindex: number = 0,\n\t\tdata: ChunkDataMO = null,\n\t\tnext: ChunkNodeMO = null,\n\t) {\n\t\tthis.index = index;\n\t\tthis.data = data;\n\t\tthis.next = next;\n\t}\n}\n","import { ChunkNodeMO } from './ChunkNodeMO';\nimport { ChunkDataMO } from './ChunkDataMO';\nimport { WordTypeCountMO } from './WordTypeCountMO';\nimport { WordTypeScoreMO } from './WordTypeScoreMO';\nimport { ParagraphMO } from './ParagraphMO';\n\nexport class ChunkListMO {\n\tpublic head: ChunkNodeMO;\n\tpublic length: number;\n\tpublic wordTypeCount: WordTypeCountMO;\n\tpublic wordTypeScore: WordTypeScoreMO;\n\tpublic contentWordCount: number;\n\tpublic lastLoadedParagraphIndex: number;\n\tpublic nodeProcessed: number;\n\tpublic paragraphMOs: ParagraphMO[];\n\tpublic chunks: ChunkNodeMO[];\n\tpublic isFewWordCount: boolean;\n\n\tconstructor() {\n\t\tthis.head = null;\n\t\tthis.length = 0;\n\t\tthis.wordTypeCount = new WordTypeCountMO();\n\t\tthis.wordTypeScore = new WordTypeScoreMO();\n\t\tthis.contentWordCount = 0;\n\t\tthis.lastLoadedParagraphIndex = 0;\n\t\tthis.paragraphMOs = [];\n\t\tthis.isFewWordCount = false;\n\t\tthis.chunks = [];\n\t}\n\n\taddFirst(chunkDataMO: ChunkDataMO) {\n\t\tthis.head = new ChunkNodeMO(0, chunkDataMO, this.head);\n\t}\n\n\taddLast(chunkDataMO: ChunkDataMO) {\n\t\tif (this.head === null) {\n\t\t\tthis.addFirst(chunkDataMO);\n\t\t\tthis.chunks.push(this.head);\n\t\t} else {\n\t\t\tlet temp: ChunkNodeMO = this.head;\n\t\t\twhile (temp.next !== null) {\n\t\t\t\ttemp = temp.next;\n\t\t\t}\n\n\t\t\ttemp.next = new ChunkNodeMO(temp.index + 1, chunkDataMO);\n\t\t\tthis.chunks.push(temp.next);\n\t\t}\n\t\tthis.length += 1;\n\t}\n\n\tupdateChunkAtIndex(index: number, chunkDataMO: ChunkDataMO) {\n\t\tlet temp: ChunkNodeMO = this.head;\n\n\t\twhile (temp !== null && index <= temp.index) {\n\t\t\tif (temp.index === index) {\n\t\t\t\ttemp.data = chunkDataMO;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\ttemp = temp.next;\n\t\t}\n\t}\n\n\tgetChunkAtIndex(index: number) {\n\t\tlet temp: ChunkNodeMO = this.head;\n\n\t\twhile (temp !== null) {\n\t\t\tif (temp.index === index) {\n\t\t\t\treturn temp;\n\t\t\t}\n\n\t\t\ttemp = temp.next;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tqueryChunks() {\n\t\tlet temp: ChunkNodeMO = this.head;\n\t\twhile (temp !== null) {\n\t\t\ttemp = temp.next;\n\t\t}\n\t}\n\n\tclone(chunkListMO: ChunkListMO) {\n\t\tthis.length = chunkListMO.length;\n\t\tthis.wordTypeCount = chunkListMO.wordTypeCount;\n\t\tthis.wordTypeScore = chunkListMO.wordTypeScore;\n\t\tthis.contentWordCount = chunkListMO.contentWordCount;\n\t\tthis.lastLoadedParagraphIndex = chunkListMO.lastLoadedParagraphIndex;\n\t\tthis.paragraphMOs = chunkListMO.paragraphMOs;\n\t\tthis.isFewWordCount = this.contentWordCount < 100;\n\t}\n}\n","export class ExclusionsMO {\n\tpublic parens: boolean;\n\tpublic singleQuotes: boolean;\n\tpublic doubleQuotes: boolean;\n\tpublic headings: boolean;\n\tpublic indentedParagraphs: boolean;\n\tpublic listItems: boolean;\n\tpublic tables: boolean;\n\tpublic wordCountLessThan: number;\n\tpublic customExclusion: string[];\n\tpublic lowerCaseCustomExclusion: string[];\n\n\tconstructor(\n\t\tparens: boolean = true,\n\t\tsingleQuotes: boolean = true,\n\t\tdoubleQuotes: boolean = true,\n\t\theadings: boolean = true,\n\t\tindentedParagraphs: boolean = true,\n\t\tlistItems: boolean = true,\n\t\ttables: boolean = true,\n\t\twordCountLessThan: number = 25,\n\t\tcustomExclusion: string[] = [],\n\t) {\n\t\tthis.parens = parens;\n\t\tthis.singleQuotes = singleQuotes;\n\t\tthis.doubleQuotes = doubleQuotes;\n\t\tthis.headings = headings;\n\t\tthis.indentedParagraphs = indentedParagraphs;\n\t\tthis.listItems = listItems;\n\t\tthis.tables = tables;\n\t\tthis.wordCountLessThan = wordCountLessThan;\n\t\tthis.customExclusion = customExclusion;\n\t\tthis.lowerCaseCustomExclusion = this.customExclusion.map((value) =>\n\t\t\tvalue.toLowerCase(),\n\t\t);\n\t}\n}\n","export class ThemeMO {\n\tkey: string;\n\tthemeTitle: string;\n\tthemeQuestion: string;\n\tratings: string[];\n\tcustomeThemeRatings: string[];\n\n\tconstructor(\n\t\tkey: string = '',\n\t\tthemeTitle: string = '',\n\t\tthemeQuestion: string = '',\n\t\tratings: string[] = [],\n\t\tcustomeThemeRatings: string[] | null = null,\n\t) {\n\t\tthis.key = key;\n\t\tthis.themeTitle = themeTitle;\n\t\tthis.themeQuestion = themeQuestion;\n\t\tthis.ratings = ratings;\n\t\tthis.customeThemeRatings = customeThemeRatings;\n\t}\n}\n","import { types } from '../constants/types';\n\nexport class GraphCheckListMO {\n\tpublic cVerb: boolean;\n\tpublic cNoun: boolean;\n\tpublic cPrep: boolean;\n\tpublic cWaste: boolean;\n\tpublic cAd_: boolean;\n\n\tconstructor(\n\t\tcVerb: boolean = false,\n\t\tcNoun: boolean = false,\n\t\tcPrep: boolean = false,\n\t\tcWaste = false,\n\t\tcAd_ = false,\n\t) {\n\t\tthis.cVerb = cVerb;\n\t\tthis.cNoun = cNoun;\n\t\tthis.cPrep = cPrep;\n\t\tthis.cWaste = cWaste;\n\t\tthis.cAd_ = cAd_;\n\t}\n\n\treset() {\n\t\tthis.cVerb = false;\n\t\tthis.cNoun = false;\n\t\tthis.cPrep = false;\n\t\tthis.cWaste = false;\n\t\tthis.cAd_ = false;\n\t}\n\n\tsetCheck(type: string) {\n\t\tswitch (type) {\n\t\t\tcase types.CHECK_VERB:\n\t\t\t\tthis.cVerb = !this.cVerb;\n\t\t\t\tthis.cNoun = false;\n\t\t\t\tthis.cPrep = false;\n\t\t\t\tthis.cWaste = false;\n\t\t\t\tthis.cAd_ = false;\n\t\t\t\tbreak;\n\t\t\tcase types.CHECK_NOUN:\n\t\t\t\tthis.cNoun = !this.cNoun;\n\t\t\t\tthis.cVerb = false;\n\t\t\t\tthis.cPrep = false;\n\t\t\t\tthis.cWaste = false;\n\t\t\t\tthis.cAd_ = false;\n\t\t\t\tbreak;\n\t\t\tcase types.CHECK_PREP:\n\t\t\t\tthis.cPrep = !this.cPrep;\n\t\t\t\tthis.cVerb = false;\n\t\t\t\tthis.cNoun = false;\n\t\t\t\tthis.cWaste = false;\n\t\t\t\tthis.cAd_ = false;\n\t\t\t\tbreak;\n\t\t\tcase types.CHECK_AD_:\n\t\t\t\tthis.cAd_ = !this.cAd_;\n\t\t\t\tthis.cVerb = false;\n\t\t\t\tthis.cNoun = false;\n\t\t\t\tthis.cPrep = false;\n\t\t\t\tthis.cWaste = false;\n\t\t\t\tbreak;\n\t\t\tcase types.CHECK_WASTE:\n\t\t\t\tthis.cWaste = !this.cWaste;\n\t\t\t\tthis.cVerb = false;\n\t\t\t\tthis.cNoun = false;\n\t\t\t\tthis.cPrep = false;\n\t\t\t\tthis.cAd_ = false;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n}\n","import { combineReducers } from 'redux';\nimport { chunkDetailsMOReducer } from './chunkDetailsMOReducer';\nimport { chunkListMOReducer } from './chunkListMOReducer';\nimport { wordTypeScoreMOReducer } from './wordTypeScoreMOReducer';\nimport { isShowInfoPaneReducer } from './isShowInfoPaneReducer';\nimport { isShowSettingsPaneReducer } from './isShowSettingsPaneReducer';\nimport { exclusionsMOReducer } from './exclusionsMOReducer';\nimport { themeMOReducer } from './themeMOReducer';\nimport { graphCheckListMOReducer } from './graphCheckListMOReducer';\nexport const taskPaneReducers = {\n\t// MO\n\tchunkDetailsMO: chunkDetailsMOReducer,\n\tchunkListMO: chunkListMOReducer,\n\twordTypeScoreMO: wordTypeScoreMOReducer,\n\texclusionsMO: exclusionsMOReducer,\n\tthemeMO: themeMOReducer,\n\tgraphCheckListMO: graphCheckListMOReducer,\n\n\t// TRUE - FALSE\n\tisShowInfoPane: isShowInfoPaneReducer,\n\tisShowSettingsPane: isShowSettingsPaneReducer,\n};\nexport const rootReducer = combineReducers(taskPaneReducers);\n","import { types } from '../constants/types';\nimport { ChunkDetailsMO } from '../models/ChunkDetailsMO';\n\nexport const chunkDetailsMOReducer = (state = new ChunkDetailsMO(), action) => {\n\tswitch (action.type) {\n\t\tcase types.SET_CHUNK_DETAILS:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t...action.chunkDetailsMO,\n\t\t\t\t// chunkDetailsMO: action.chunkDetailsMO\n\t\t\t};\n\n\t\tdefault:\n\t\t\treturn state;\n\t}\n};\n","import { types } from '../constants/types';\nimport { ChunkListMO } from '../models/ChunkListMO';\n\nexport const chunkListMOReducer = (state = new ChunkListMO(), action) => {\n\tswitch (action.type) {\n\t\tcase types.SET_CHUNK_LIST:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t...action.chunkListMO,\n\t\t\t};\n\n\t\tdefault:\n\t\t\treturn state;\n\t}\n};\n","import { types } from '../constants/types';\nimport { WordTypeScoreMO } from '../models/WordTypeScoreMO';\n\nexport const wordTypeScoreMOReducer = (\n\tstate = new WordTypeScoreMO(),\n\taction,\n) => {\n\tswitch (action.type) {\n\t\tcase types.SET_SCORE:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t...action.wordTypeScoreMO,\n\t\t\t};\n\n\t\tdefault:\n\t\t\treturn state;\n\t}\n};\n","import { types } from '../constants/types';\nimport { ExclusionsMO } from '../models/ExclusionsMO';\n\nexport const exclusionsMOReducer = (state = new ExclusionsMO(), action) => {\n\tswitch (action.type) {\n\t\tcase types.SET_EXCLUSIONS:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t...action.exclusionsMO,\n\t\t\t};\n\n\t\tdefault:\n\t\t\treturn state;\n\t}\n};\n","import { types } from '../constants/types';\nimport { ThemeMO } from '../models/ThemeMO';\n\nexport const themeMOReducer = (state = new ThemeMO(), action) => {\n\tswitch (action.type) {\n\t\tcase types.SET_THEME:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t...action.themeMO,\n\t\t\t};\n\n\t\tdefault:\n\t\t\treturn state;\n\t}\n};\n","import { types } from '../constants/types';\nimport { GraphCheckListMO } from '../models/GraphCheckListMO';\n\nexport const graphCheckListMOReducer = (\n\tstate = new GraphCheckListMO(),\n\taction,\n) => {\n\tswitch (action.type) {\n\t\tcase types.SET_GRAPH_CHECK_LIST:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t...action.graphCheckListMO,\n\t\t\t};\n\n\t\tdefault:\n\t\t\treturn state;\n\t}\n};\n","import { types } from '../constants/types';\n\nexport const isShowInfoPaneReducer = (state = false, action) => {\n\tswitch (action.type) {\n\t\tcase types.SHOW_INFO_PANE:\n\t\t\treturn true;\n\n\t\tcase types.HIDE_INFO_PANE:\n\t\t\treturn false;\n\n\t\tdefault:\n\t\t\treturn state;\n\t}\n};\n","import { types } from '../constants/types';\n\nexport const isShowSettingsPaneReducer = (state = false, action) => {\n\tswitch (action.type) {\n\t\tcase types.SHOW_SETTINGS_PANE:\n\t\t\treturn true;\n\n\t\tcase types.HIDE_SETTINGS_PANE:\n\t\t\treturn false;\n\n\t\tdefault:\n\t\t\treturn state;\n\t}\n};\n","import { combineReducers } from 'redux';\nimport { textInputReducer } from './textInputReducer';\nimport { downloadAddinsReducer } from './downloadAddinsReducer';\nimport { taskPaneReducers } from '../../taskpane/reducers/rootReducer';\nexport const rootReducer = combineReducers({\n\t// MO\n\twebTextInput: textInputReducer,\n\tdownloadAddins: downloadAddinsReducer,\n\t...taskPaneReducers,\n});\n","import { types } from '../types';\n\nexport const textInputReducer = (\n\tstate = {\n\t\ttext: '',\n\t\tforceLoadToggle: false,\n\t\trefreshToggle: false,\n\t},\n\taction: any,\n) => {\n\tswitch (action.type) {\n\t\tcase types.WEB_TEXT_INPUT:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\ttext: action.text,\n\t\t\t\tforceLoadToggle: !state.forceLoadToggle,\n\t\t\t};\n\t\tcase types.REFRESH_TEXT_INPUT:\n\t\t\treturn { ...state, refreshToggle: !state.refreshToggle };\n\t\tdefault:\n\t\t\treturn state;\n\t}\n};\n","import { types } from '../types';\n\nexport const downloadAddinsReducer = (\n\tstate = {\n\t\tshowDownloadButton: false,\n\t},\n\taction: any,\n) => {\n\tswitch (action.type) {\n\t\tcase types.DOWNLOAD_ADDINS_SHOW:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tshowDownloadButton: action.show,\n\t\t\t};\n\t\tdefault:\n\t\t\treturn state;\n\t}\n};\n","import { createStore } from 'redux';\nimport { rootReducer } from '../reducers/rootReducer';\nexport const store = createStore(\n\trootReducer /* preloadedState, */,\n\t(window as any).__REDUX_DEVTOOLS_EXTENSION__ &&\n\t\t(window as any).__REDUX_DEVTOOLS_EXTENSION__(),\n);\n","export const wordData = {\n\t// Be verbs ends with\n\tverbTokenRegex: [\"'m\", \"'re\", '’m', '’re'],\n\n\t// Be verbs exact match\n\tverbTokenMatch: ['am', 'is', 'are', 'was', 'were', 'be', 'been'],\n\n\t// Zombie nouns ends with\n\tnounTokenRegex: [\n\t\t'ion',\n\t\t'ions',\n\t\t'ism',\n\t\t'isms',\n\t\t'ity',\n\t\t'ities',\n\t\t'ment',\n\t\t'ments',\n\t\t'ness',\n\t\t'ance',\n\t\t'ances',\n\t\t'ence',\n\t\t'ences',\n\t],\n\n\t// Zombie nouns exclusions\n\tnounExceptionMatch: [\n\t\t'advance',\n\t\t'audience',\n\t\t'audiences',\n\t\t'billion',\n\t\t'city',\n\t\t'dance',\n\t\t'fence',\n\t\t'freelance',\n\t\t'glance',\n\t\t'hence',\n\t\t'ion',\n\t\t'lance',\n\t\t'lesion',\n\t\t'lion',\n\t\t'mention',\n\t\t'million',\n\t\t'nuance',\n\t\t'party',\n\t\t'pence',\n\t\t'pity',\n\t\t'prance',\n\t\t'prion',\n\t\t'prism',\n\t\t'schism',\n\t\t'science',\n\t\t'sciences',\n\t\t'sentence',\n\t\t'sentences',\n\t\t'stance',\n\t\t'trillion',\n\t\t'zion',\n\t],\n\n\t// Adverb ends with\n\tadjTokenRegex: [\n\t\t'ly',\n\t\t'al',\n\t\t'ive',\n\t\t'ful',\n\t\t'less',\n\t\t'ant',\n\t\t'ible',\n\t\t'able',\n\t\t'ic',\n\t\t'ary',\n\t\t'ac',\n\t\t'ous',\n\t],\n\n\t// Adverb exclusions\n\tadjectiveAdverbExceptionMatch: [\n\t\t'able',\n\t\t'agent',\n\t\t'ant',\n\t\t'aphrodisiac',\n\t\t'apothecary',\n\t\t'appeal',\n\t\t'apply',\n\t\t'arrival',\n\t\t'avowal',\n\t\t'bent',\n\t\t'cable',\n\t\t'cent',\n\t\t'congeal',\n\t\t'content',\n\t\t'continent',\n\t\t'dally',\n\t\t'deal',\n\t\t'decal',\n\t\t'dent',\n\t\t'derive',\n\t\t'dictionary',\n\t\t'disavowal',\n\t\t'dive',\n\t\t'drive',\n\t\t'early',\n\t\t'fable',\n\t\t'fabric',\n\t\t'family',\n\t\t'five',\n\t\t'fly',\n\t\t'functionary',\n\t\t'gal',\n\t\t'gent',\n\t\t'give',\n\t\t'grant',\n\t\t'halal',\n\t\t'handful',\n\t\t'heal',\n\t\t'hive',\n\t\t'imply',\n\t\t'intent',\n\t\t'jive',\n\t\t'lent',\n\t\t'less',\n\t\t'live',\n\t\t'logic',\n\t\t'magic',\n\t\t'maniac',\n\t\t'meal',\n\t\t'meant',\n\t\t'merchant',\n\t\t'monopoly',\n\t\t'mosaic',\n\t\t'music',\n\t\t'nary',\n\t\t'only',\n\t\t'pal',\n\t\t'pant',\n\t\t'pent',\n\t\t'percent',\n\t\t'plant',\n\t\t'potential',\n\t\t'prevent',\n\t\t'public',\n\t\t'rally',\n\t\t'rant',\n\t\t'real',\n\t\t'relent',\n\t\t'rely',\n\t\t'rent',\n\t\t'reveal',\n\t\t'revival',\n\t\t'rival',\n\t\t'rubric',\n\t\t'sable',\n\t\t'sally',\n\t\t'seal',\n\t\t'secretary',\n\t\t'sent',\n\t\t'south',\n\t\t'spent',\n\t\t'stable',\n\t\t'steal',\n\t\t'stent',\n\t\t'student',\n\t\t'supply',\n\t\t'survival',\n\t\t'table',\n\t\t'tally',\n\t\t'teal',\n\t\t'tent',\n\t\t'thrive',\n\t\t'topiary',\n\t\t'trident',\n\t\t'unless',\n\t\t'unruly',\n\t\t'vary',\n\t\t'veal',\n\t\t'vent',\n\t\t'want',\n\t\t'wary',\n\t\t'went',\n\t],\n\n\t// Preposition exact match\n\tprepositionTokenMatch: [\n\t\t'about',\n\t\t'above',\n\t\t'across',\n\t\t'after',\n\t\t'against',\n\t\t'along',\n\t\t'among',\n\t\t'around',\n\t\t'at',\n\t\t'before',\n\t\t'behind',\n\t\t'below',\n\t\t'beneath',\n\t\t'beside',\n\t\t'between',\n\t\t'beyond',\n\t\t'by',\n\t\t'down',\n\t\t'during',\n\t\t'for',\n\t\t'from',\n\t\t'in',\n\t\t'inside',\n\t\t'into',\n\t\t'near',\n\t\t'of',\n\t\t'off',\n\t\t'on',\n\t\t'onto',\n\t\t'out',\n\t\t'outside',\n\t\t'over',\n\t\t'past',\n\t\t'through',\n\t\t'throughout',\n\t\t'till',\n\t\t'to',\n\t\t'toward',\n\t\t'under',\n\t\t'underneath',\n\t\t'until',\n\t\t'up',\n\t\t'upon',\n\t\t'with',\n\t\t'within',\n\t\t'without',\n\t],\n\n\t// Waste Word Exact Match\n\twasteWordTokenMatch: [\n\t\t'it',\n\t\t'this',\n\t\t'that',\n\t\t'there',\n\t\t'it’s',\n\t\t'that’s',\n\t\t'there’s',\n\t\t\"it's\",\n\t\t\"that's\",\n\t\t\"there's\",\n\t],\n};\n","import * as React from 'react';\n\nexport const Config = {\n\tbase: {\n\t\tbuildNumber: require('../../../package.json').version, // https://semver.org/\n\t},\n\n\tpunctuation: `’'[](){}⟨⟩:,،、‒–—―…......⋯᠁ฯ!.‹›«»‐-?‘’“”''\"\";/⧸⁄·  &*@\\\\‱•^†‡⹋°”〃=¡¿※×#№÷ºª%‰¶+−±∓′″‴§~_|‖¦©🄯℗®℠™¤⁂❧☞‽⸮◊`,\n\tstrippedOutExclusionPunctuations: `,.'\"‘’“”:;(){}[\\\\]`,\n\tmetrics: {\n\t\tOverall: {\n\t\t\tkey: 'Overall',\n\t\t\torder: 0,\n\t\t\tborderColor: '#69696c',\n\t\t\tcolor: '#f4f4f4',\n\t\t\tsecondaryColor: '#6d6d6f',\n\t\t\thue: 0.1,\n\t\t\tlabel: 'Overall',\n\t\t\tword: 'overall',\n\t\t\tlongDescription: <span>The results of all tests combined.</span>,\n\t\t},\n\n\t\tVerbs: {\n\t\t\tkey: 'Be-verbs',\n\t\t\torder: 1,\n\t\t\tborderColor: '#dc8749',\n\t\t\tcolor: '#dc8749',\n\t\t\tsecondaryColor: '#333333',\n\t\t\thue: 0.1,\n\t\t\tlabel: 'be-verbs',\n\t\t\tword: 'be-verb',\n\t\t\tlongDescription: (\n\t\t\t\t<span>\n\t\t\t\t\tCounts be-verbs: <em>am, is, are, was, were, be,</em> and{' '}\n\t\t\t\t\t<em>been</em>.\n\t\t\t\t</span>\n\t\t\t),\n\t\t\tscoreCutoffs: [3, 4, 5, 6],\n\t\t},\n\t\tNouns: {\n\t\t\tkey: 'Zombie Nouns',\n\t\t\torder: 2,\n\t\t\tborderColor: '#97c6e9',\n\t\t\tcolor: '#97c6e9',\n\t\t\tsecondaryColor: '#333333',\n\t\t\thue: 0.3,\n\t\t\tlabel: 'zombie nouns',\n\t\t\tword: 'zombie noun',\n\t\t\tlongDescription: (\n\t\t\t\t<span>\n\t\t\t\t\tCounts nominalizations (abstract nouns) that end with the suffixes{' '}\n\t\t\t\t\t<em>ion, ism, ty, ment, ness, ance, ence.</em>\n\t\t\t\t</span>\n\t\t\t),\n\t\t\tscoreCutoffs: [4, 5, 6, 7],\n\t\t},\n\t\tPrepositions: {\n\t\t\tkey: 'Prepositions',\n\t\t\torder: 3,\n\t\t\tborderColor: '#aac044',\n\t\t\tcolor: '#aac044',\n\t\t\tsecondaryColor: '#333333',\n\t\t\thue: 0.5,\n\t\t\tlabel: 'prepositions',\n\t\t\tword: 'preposition',\n\t\t\tlongDescription: (\n\t\t\t\t<span>\n\t\t\t\t\tCounts common prepositions such as <em>in, by, for,</em> and{' '}\n\t\t\t\t\t<em>of</em>. The test also counts <em>to</em> when used in an\n\t\t\t\t\tinfinitive verb construction.\n\t\t\t\t</span>\n\t\t\t),\n\t\t\tscoreCutoffs: [14, 16, 18, 20],\n\t\t},\n\t\tAdjectivesAdverbs: {\n\t\t\tkey: 'Ad-words',\n\t\t\torder: 4,\n\t\t\tborderColor: '#f7e73f',\n\t\t\tcolor: '#f7e73f',\n\t\t\tsecondaryColor: '#333333',\n\t\t\thue: 0.7,\n\t\t\tlabel: 'ad-words',\n\t\t\tword: 'ad-word',\n\t\t\tlongDescription: (\n\t\t\t\t<span>\n\t\t\t\t\tCounts adjectives and adverbs that end with common suffixes such as{' '}\n\t\t\t\t\t<em>able, ac, al, ant, ary, ful, ible, ic, ive, less, ly, ous.</em>\n\t\t\t\t</span>\n\t\t\t),\n\t\t\tscoreCutoffs: [6, 8, 10, 12],\n\t\t},\n\t\tWasteWords: {\n\t\t\tkey: 'Waste Words',\n\t\t\torder: 5,\n\t\t\tborderColor: '#e6b5c4',\n\t\t\tcolor: '#e6b5c4',\n\t\t\tsecondaryColor: '#333333',\n\t\t\thue: 0.9,\n\t\t\tlabel: 'it, this, that, there',\n\t\t\tword: 'it, this, that, there',\n\t\t\tlongDescription: (\n\t\t\t\t<span>\n\t\t\t\t\tCounts the words <em>it, this, that,</em> and <em>there</em>.\n\t\t\t\t</span>\n\t\t\t),\n\t\t\tscoreCutoffs: [3, 4, 5, 6],\n\t\t},\n\t},\n\n\tratingLabelPresets: [\n\t\t{\n\t\t\tkey: 'diet-fitness',\n\t\t\tthemeTitle: 'Diet and Fitness',\n\t\t\tthemeQuestion: 'Flabby or Fit?',\n\t\t\tratings: {\n\t\t\t\t0: 'Lean',\n\t\t\t\t1: 'Fit & Trim',\n\t\t\t\t2: 'Needs Toning',\n\t\t\t\t3: 'Flabby',\n\t\t\t\t4: 'Heart Attack!',\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tkey: 'clear-skies',\n\t\t\tthemeTitle: 'Clear Skies',\n\t\t\tthemeQuestion: 'Cloudy or Clear?',\n\t\t\tratings: {\n\t\t\t\t0: 'Sunny',\n\t\t\t\t1: 'Clear Skies',\n\t\t\t\t2: 'Getting Misty',\n\t\t\t\t3: 'Cloudy',\n\t\t\t\t4: 'Foghorn!',\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tkey: 'solid-ground',\n\t\t\tthemeTitle: 'Solid Ground',\n\t\t\tthemeQuestion: 'Swampy or Solid?',\n\t\t\tratings: {\n\t\t\t\t0: 'Firm',\n\t\t\t\t1: 'Solid Ground',\n\t\t\t\t2: 'Getting Boggy',\n\t\t\t\t3: 'Swampy',\n\t\t\t\t4: 'Quicksand!',\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tkey: 'clean-house',\n\t\t\tthemeTitle: 'Clean House',\n\t\t\tthemeQuestion: 'Cluttered or Clean?',\n\t\t\tratings: {\n\t\t\t\t0: 'Pristine',\n\t\t\t\t1: 'Clean House',\n\t\t\t\t2: 'Needs Tidying',\n\t\t\t\t3: 'Cluttered',\n\t\t\t\t4: 'Bombsite!',\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tkey: 'sunny-weather',\n\t\t\tthemeTitle: 'Sunny Weather',\n\t\t\tthemeQuestion: 'Stormy or Sunny?',\n\t\t\tratings: {\n\t\t\t\t0: '☀',\n\t\t\t\t1: '🌞',\n\t\t\t\t2: '⛅️',\n\t\t\t\t3: '🌧',\n\t\t\t\t4: '⛈',\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tkey: 'custom',\n\t\t\tthemeTitle: 'Choose your own theme...',\n\t\t\tthemeQuestion: '',\n\t\t\tratings: {\n\t\t\t\t0: 'Lean',\n\t\t\t\t1: 'Fit & Trim',\n\t\t\t\t2: 'Needs Toning',\n\t\t\t\t3: 'Flabby',\n\t\t\t\t4: 'Heart Attack!',\n\t\t\t},\n\t\t},\n\t],\n\n\texclusions: {\n\t\tparens: true,\n\t\tsingleQuotes: false,\n\t\tdoubleQuotes: false,\n\t\theadings: true,\n\t\tindentedParagraphs: false,\n\t\tlistItems: true,\n\t\ttables: true,\n\t\twordCountLessThan: 25,\n\t\tcustomExclusion: [],\n\t},\n\n\tthemeDefault: 'diet-fitness',\n\tthemeCustomKey: 'custom',\n\n\tchunkLength: 200,\n\tnodePerProcess: 8,\n\tdelayPerProcess: 1,\n};\n","import { ThemeMO } from '../models/ThemeMO';\nimport { ExclusionsMO } from '../models/ExclusionsMO';\n\nexport class LocalStorageManager {\n\tprivate static _themeName = 'wd-Theme';\n\tprivate static _exclusionsName = 'wd-Exclusions';\n\n\tstatic tryCatchWrapper = (functionCaller: Function): any => {\n\t\ttry {\n\t\t\treturn functionCaller() as any;\n\t\t} catch {\n\t\t\treturn null;\n\t\t}\n\t};\n\tstatic getThemeMOFromLocalStorage = () => {\n\t\treturn LocalStorageManager.tryCatchWrapper(() => {\n\t\t\tlet _themeMO: ThemeMO = JSON.parse(\n\t\t\t\tlocalStorage.getItem(LocalStorageManager._themeName),\n\t\t\t);\n\t\t\treturn _themeMO;\n\t\t});\n\t};\n\n\tstatic setThemeMOToLocalStorage = (themeMO: ThemeMO) => {\n\t\tLocalStorageManager.tryCatchWrapper(() => {\n\t\t\tlet lsThemeMO = JSON.stringify(themeMO);\n\t\t\tlocalStorage.setItem(LocalStorageManager._themeName, lsThemeMO);\n\t\t});\n\t};\n\n\tstatic getExclusionsMOFromLocalStorage = () => {\n\t\treturn LocalStorageManager.tryCatchWrapper(() => {\n\t\t\tlet _exclusionsMO: ExclusionsMO = JSON.parse(\n\t\t\t\tlocalStorage.getItem(LocalStorageManager._exclusionsName),\n\t\t\t);\n\t\t\treturn _exclusionsMO;\n\t\t});\n\t};\n\n\tstatic setExclusionsMOToLocalStorage = (exclusionsMO: ExclusionsMO) => {\n\t\tLocalStorageManager.tryCatchWrapper(() => {\n\t\t\tlet lsExclusionMO = JSON.stringify(exclusionsMO);\n\t\t\tlocalStorage.setItem(LocalStorageManager._exclusionsName, lsExclusionMO);\n\t\t});\n\t};\n}\n","import { Config } from '../constants/config';\nimport { ThemeMO } from '../models/ThemeMO';\nimport { ExclusionsMO } from '../models/ExclusionsMO';\nimport { LocalStorageManager } from '../Manager/LocalStorageManager';\n\nexport class ConfigManager {\n\tstatic getThemeByKey = (key: string) => {\n\t\tlet idx = Config.ratingLabelPresets.findIndex((item) => item.key === key);\n\t\tlet _preset = Config.ratingLabelPresets[idx];\n\t\tlet _rating: string[] = [\n\t\t\t_preset.ratings[0],\n\t\t\t_preset.ratings[1],\n\t\t\t_preset.ratings[2],\n\t\t\t_preset.ratings[3],\n\t\t\t_preset.ratings[4],\n\t\t];\n\t\tlet themeMo = LocalStorageManager.getThemeMOFromLocalStorage();\n\t\tif (key === Config.themeCustomKey) {\n\t\t\tif (themeMo != null && themeMo.customeThemeRatings != null) {\n\t\t\t\t_rating = themeMo.customeThemeRatings;\n\t\t\t}\n\t\t}\n\t\treturn new ThemeMO(\n\t\t\tkey,\n\t\t\t_preset.themeTitle,\n\t\t\t_preset.themeQuestion,\n\t\t\t_rating,\n\t\t\tthemeMo && themeMo.customeThemeRatings,\n\t\t);\n\t};\n\n\tstatic getCustomThemeKey = () => {\n\t\treturn Config.themeCustomKey;\n\t};\n\n\tstatic getDefaultTheme = () => {\n\t\treturn ConfigManager.getThemeByKey(Config.themeDefault);\n\t};\n\n\tstatic getDefaultExclusions = () => {\n\t\tlet ex = Config.exclusions;\n\t\tlet _exclusionsMO = new ExclusionsMO(\n\t\t\tex.parens,\n\t\t\tex.singleQuotes,\n\t\t\tex.doubleQuotes,\n\t\t\tex.headings,\n\t\t\tex.indentedParagraphs,\n\t\t\tex.listItems,\n\t\t\tex.tables,\n\t\t\tex.wordCountLessThan,\n\t\t\tex.customExclusion,\n\t\t);\n\n\t\treturn _exclusionsMO;\n\t};\n\n\tstatic getRatingLabelPresets = () => {\n\t\treturn Config.ratingLabelPresets;\n\t};\n\n\tstatic getPunctuation = () => {\n\t\treturn Config.punctuation;\n\t};\n\n\tstatic getStrippedOutExclusionPunctuations = () => {\n\t\treturn new RegExp(`[${Config.strippedOutExclusionPunctuations}]`, 'g');\n\t};\n\n\tstatic getMetrics = () => {\n\t\treturn Config.metrics;\n\t};\n\n\tstatic getChunkLength = () => {\n\t\treturn Config.chunkLength;\n\t};\n\n\tstatic getNodePerProcess = () => {\n\t\treturn Config.nodePerProcess;\n\t};\n\n\tstatic getDelayPerProcess = () => {\n\t\treturn Config.delayPerProcess;\n\t};\n\n\t// static getThemeRating = (key: string, rate: number) => {};\n}\n","export class WordMO {\n\tword: string;\n\texclude: boolean;\n\n\tconstructor(word: string = '', exclude: boolean = false) {\n\t\tthis.word = word;\n\t\tthis.exclude = exclude;\n\t}\n}\n","import { WordTypeScoreMO } from '../models/WordTypeScoreMO';\nimport { ChunkListMO } from '../models/ChunkListMO';\nimport { ChunkNodeMO } from '../models/ChunkNodeMO';\nimport { WordMO } from '../models/WordMO';\n\nexport class WordManager {\n\tprivate static getScore(score: number) {\n\t\treturn Math.min(score || 0, 5);\n\t}\n\n\tstatic verifyScore(score) {\n\t\treturn Math.min(Math.floor(score), 4);\n\t}\n\n\tstatic calculateAverage = (wordTypeScore: WordTypeScoreMO) => {\n\t\tlet average = WordManager.verifyScore(\n\t\t\tMath.floor(\n\t\t\t\t(WordManager.getScore(wordTypeScore.nounScore) +\n\t\t\t\t\tWordManager.getScore(wordTypeScore.prepScore) +\n\t\t\t\t\tWordManager.getScore(wordTypeScore.verbScore) +\n\t\t\t\t\tWordManager.getScore(wordTypeScore.ad_Score) +\n\t\t\t\t\tWordManager.getScore(wordTypeScore.wasteScore)) /\n\t\t\t\t\t5,\n\t\t\t),\n\t\t);\n\n\t\treturn average;\n\t};\n\n\tstatic onlyLetter(word: string) {\n\t\treturn word.replace(/[^a-zA-Z]+/g, '');\n\t}\n\n\tstatic verifyWord(word: string) {\n\t\treturn word.replace(/[’‘]+/g, \"'\").replace(/[”“]/, '\"');\n\t}\n\n\tstatic isLetter(c: string) {\n\t\tif (c === null || c === undefined) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// match -> array\n\t\t// unmatch -> null\n\t\treturn c.match(/[a-zA-Z]+/g) ? true : false;\n\t}\n\n\tstatic getWords(text: string) {\n\t\t// let start = 0;\n\t\t// let flag: boolean;\n\t\tlet words: WordMO[] = [];\n\t\tlet wc: number = 0;\n\n\t\ttext.split(/\\s/).forEach((term) => {\n\t\t\tif (term.length > 0) {\n\t\t\t\twords.push(new WordMO(term, false));\n\t\t\t\twc++;\n\t\t\t}\n\t\t});\n\n\t\treturn { words, wc };\n\t}\n\n\tstatic separateWord(text: string) {\n\t\tlet start = 0;\n\t\tlet flag: boolean = false;\n\t\tlet words: string[] = [];\n\n\t\tif (text.length >= 0) {\n\t\t\tflag = WordManager.isLetter(text[0]);\n\t\t}\n\n\t\tfor (let i = 0; i < text.length; i++) {\n\t\t\tconst result = WordManager.isLetter(text[i]);\n\n\t\t\tif (flag !== result) {\n\t\t\t\tif (\n\t\t\t\t\twords.length >= 2 &&\n\t\t\t\t\t(words[words.length - 1] === \"'\" ||\n\t\t\t\t\t\twords[words.length - 1] === '’') &&\n\t\t\t\t\tthis.isLetter(words[words.length - 2]) === true\n\t\t\t\t) {\n\t\t\t\t\twords[words.length - 1] = \"'\" + text.slice(start, i);\n\t\t\t\t} else {\n\t\t\t\t\twords.push(text.slice(start, i));\n\t\t\t\t}\n\t\t\t\tstart = i;\n\t\t\t\tflag = result;\n\t\t\t}\n\t\t}\n\n\t\tif (start < text.length) {\n\t\t\tif (\n\t\t\t\twords.length >= 2 &&\n\t\t\t\t(words[words.length - 1] === \"'\" || words[words.length - 1] === '’') &&\n\t\t\t\tthis.isLetter(words[words.length - 2]) === true\n\t\t\t) {\n\t\t\t\twords[words.length - 1] = \"'\" + text.slice(start, text.length);\n\t\t\t} else {\n\t\t\t\twords.push(text.slice(start, text.length));\n\t\t\t}\n\t\t}\n\n\t\treturn words;\n\t}\n\n\tstatic seekChunk(\n\t\tchunkListMO: ChunkListMO,\n\t\tchunkTitle: string,\n\t\tchunkIndex: number,\n\t) {\n\t\tlet temp: ChunkNodeMO = chunkListMO.head;\n\t\tlet count = 0;\n\n\t\twhile (temp !== null && temp.index < chunkIndex) {\n\t\t\tlet paragraphs = temp.data.content;\n\n\t\t\tfor (let i = 0; i < paragraphs.length; i++) {\n\t\t\t\tcount += paragraphs[i].text.split(chunkTitle).length - 1;\n\t\t\t}\n\n\t\t\ttemp = temp.next;\n\t\t}\n\n\t\treturn count;\n\t}\n\n\tprivate static containsWord(string: string, word: string) {\n\t\treturn new RegExp(`(^|[^a-zA-Z])${word}([^a-zA-Z]|$)`).test(string);\n\t}\n\n\tstatic seekWord(\n\t\tchunkListMO: ChunkListMO,\n\t\tchunkIdx: number,\n\t\tparagraphIdx: number,\n\t\twordIdx: number,\n\t\tword: string,\n\t) {\n\t\t//\n\t\tlet temp: ChunkNodeMO = chunkListMO.head;\n\t\tlet count: number = 0;\n\n\t\twhile (temp !== null && temp.index <= chunkIdx) {\n\t\t\tlet paragraphs = temp.data.content;\n\n\t\t\tif (temp.index < chunkIdx) {\n\t\t\t\tfor (let i = 0; i < paragraphs.length; i++) {\n\t\t\t\t\tconst words = paragraphs[i].words;\n\t\t\t\t\tfor (let k = 0; k < words.length; k++) {\n\t\t\t\t\t\tconst wordMO = words[k];\n\t\t\t\t\t\tif (this.containsWord(wordMO.word, word)) {\n\t\t\t\t\t\t\tcount += 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (let i = 0; i <= paragraphIdx; i++) {\n\t\t\t\t\tconst words = paragraphs[i].words;\n\n\t\t\t\t\tlet max = -1;\n\t\t\t\t\tif (i < paragraphIdx) {\n\t\t\t\t\t\tmax = words.length;\n\t\t\t\t\t} else if (i === paragraphIdx) {\n\t\t\t\t\t\tmax = wordIdx + 1;\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (let k = 0; k < max; k++) {\n\t\t\t\t\t\tconst wordMO = words[k];\n\t\t\t\t\t\tif (this.containsWord(wordMO.word, word)) {\n\t\t\t\t\t\t\tcount += 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ttemp = temp.next;\n\t\t}\n\n\t\treturn count;\n\t}\n}\n","import { WordMO } from './WordMO';\nimport { WordTypeCountMO } from './WordTypeCountMO';\n\nexport class ParagraphMO {\n\ttext: string;\n\twords: WordMO[];\n\tisHeading: boolean;\n\tisList: boolean;\n\tisTable: boolean;\n\tisLeftIndent: boolean;\n\twc: number;\n\twordTypeCount: WordTypeCountMO;\n\n\tconstructor(\n\t\ttext: string = '',\n\t\twords: WordMO[] = [],\n\t\tisHeading: boolean = false,\n\t\tisList: boolean = false,\n\t\tisTable: boolean = false,\n\t\tisLeftIndent: boolean = false,\n\t\twc: number = 0,\n\t) {\n\t\tthis.text = text;\n\t\tthis.words = words;\n\t\tthis.isHeading = isHeading;\n\t\tthis.isList = isList;\n\t\tthis.isTable = isTable;\n\t\tthis.isLeftIndent = isLeftIndent;\n\t\tthis.wc = wc;\n\t}\n}\n","import { ChunkListMO } from '../../models/ChunkListMO';\nimport { ChunkDataMO } from '../../models/ChunkDataMO';\nimport { wordData } from '../../database/wordData';\nimport { WordTypeCountMO } from '../../models/WordTypeCountMO';\nimport { WordTypeScoreMO } from '../../models/WordTypeScoreMO';\nimport { ConfigManager } from '../../Manager/ConfigManager';\nimport { WordManager } from '../../Manager/WordManager';\nimport { ParagraphMO } from '../../models/ParagraphMO';\nimport { WordMO } from '../../models/WordMO';\nimport { ExclusionsMO } from '../../models/ExclusionsMO';\n\nexport enum Metrics {\n\tOverall,\n\tVerbs,\n\tNouns,\n\tPrepositions,\n\tAdjectivesAdverbs,\n\tWasteWords,\n}\nconst scoreContributionWeight = [1, 2, 4, 16, 32];\nconst scoreAverageWeightCutoff = [8, 12, 24, 64];\nconst strippedOutExclusionPunctuationsRex =\n\tConfigManager.getStrippedOutExclusionPunctuations();\n\nexport class Analysis {\n\tprivate previousLength: number;\n\n\tconstructor() {\n\t\tthis.previousLength = -1;\n\t}\n\n\tprivate createChunkDataMO(paragraphMOs: ParagraphMO[]): ChunkDataMO {\n\t\tlet title = '';\n\t\tfor (let i = 0; i < paragraphMOs.length; i++) {\n\t\t\tif (paragraphMOs[i].wc > 0) {\n\t\t\t\tfor (\n\t\t\t\t\tlet k = 0;\n\t\t\t\t\tk < Math.min(paragraphMOs[i].words.length, 6) && title.length < 35;\n\t\t\t\t\tk++\n\t\t\t\t) {\n\t\t\t\t\ttitle += paragraphMOs[i].words[k].word + ' ';\n\t\t\t\t}\n\t\t\t\ttitle = title.trim();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn new ChunkDataMO(title, paragraphMOs);\n\t}\n\n\tisTextChange(text: string) {\n\t\tif (text.length !== this.previousLength) {\n\t\t\tthis.previousLength = text.length;\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t// according to spec, proper nouns that are capitalised after full stops are treated\n\tisFirstLetterCapitalize(word: string, followsPeriod: boolean) {\n\t\treturn !followsPeriod && word.charAt(0) !== word.charAt(0).toLowerCase();\n\t}\n\t// verbs\n\tprivate identifVerbs(word: string, followsPeriod: boolean) {\n\t\tlet result: boolean = false;\n\t\tconst wordLowercase = word.toLowerCase();\n\n\t\tfor (let i = 0; i < wordData.verbTokenRegex.length; i++) {\n\t\t\tif (wordLowercase.endsWith(wordData.verbTokenRegex[i]) === true) {\n\t\t\t\tresult = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (result === false) {\n\t\t\tfor (let i = 0; i < wordData.verbTokenMatch.length; i++) {\n\t\t\t\tif (wordData.verbTokenMatch[i] === wordLowercase) {\n\t\t\t\t\tresult = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (result && this.isFirstLetterCapitalize(word, followsPeriod)) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t// nouns\n\tprivate identifyNouns(word: string, followsPeriod: boolean) {\n\t\tlet result: boolean = false;\n\t\tconst wordLowercase = word.toLowerCase();\n\n\t\tfor (let i = 0; i < wordData.nounTokenRegex.length; i++) {\n\t\t\tif (wordLowercase.endsWith(wordData.nounTokenRegex[i]) === true) {\n\t\t\t\tresult = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (!result) {\n\t\t\treturn false;\n\t\t} else {\n\t\t\tif (wordData.nounExceptionMatch.find((x) => x === wordLowercase)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (this.isFirstLetterCapitalize(word, followsPeriod)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t// prepositions\n\tprivate identifyPrepositions(word: string, followsPeriod: boolean) {\n\t\tlet result: boolean = false;\n\t\tconst wordLowercase = word.toLowerCase();\n\n\t\tfor (let i = 0; i < wordData.prepositionTokenMatch.length; i++) {\n\t\t\tif (wordData.prepositionTokenMatch[i] === wordLowercase) {\n\t\t\t\tresult = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (result && this.isFirstLetterCapitalize(word, followsPeriod)) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t// ad_\n\tprivate identifyAd_s(word: string, followsPeriod: boolean) {\n\t\tlet result: boolean = false;\n\t\tconst wordLowercase = word.toLowerCase();\n\n\t\tfor (let i = 0; i < wordData.adjTokenRegex.length; i++) {\n\t\t\tif (wordLowercase.endsWith(wordData.adjTokenRegex[i]) === true) {\n\t\t\t\tresult = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (result) {\n\t\t\tfor (let i = 0; i < wordData.adjectiveAdverbExceptionMatch.length; i++) {\n\t\t\t\tif (wordData.adjectiveAdverbExceptionMatch[i] === wordLowercase) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.isFirstLetterCapitalize(word, followsPeriod)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t// waste\n\tprivate identifyWastes(word: string, followsPeriod: boolean) {\n\t\tlet result: boolean = false;\n\t\tconst wordLowercase = word.toLowerCase();\n\n\t\tfor (let i = 0; i < wordData.wasteWordTokenMatch.length; i++) {\n\t\t\tif (wordData.wasteWordTokenMatch[i] === wordLowercase) {\n\t\t\t\tresult = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (result && this.isFirstLetterCapitalize(word, followsPeriod)) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tpublic identifyWord(word: string, followsPeriod: boolean) {\n\t\tif (this.identifVerbs(word, followsPeriod) === true) {\n\t\t\treturn 0;\n\t\t} else if (this.identifyNouns(word, followsPeriod) === true) {\n\t\t\treturn 1;\n\t\t} else if (this.identifyPrepositions(word, followsPeriod) === true) {\n\t\t\treturn 2;\n\t\t} else if (this.identifyAd_s(word, followsPeriod) === true) {\n\t\t\treturn 3;\n\t\t} else if (this.identifyWastes(word, followsPeriod) === true) {\n\t\t\treturn 4;\n\t\t}\n\t\treturn -1;\n\t}\n\n\tprivate excludeSingleQuote(words: WordMO[]) {\n\t\tlet startSingleQuote: boolean = false;\n\t\tfor (let i = 0; i < words.length; i++) {\n\t\t\tconst wordMO = words[i];\n\t\t\tif (\n\t\t\t\twordMO.word.startsWith('‘') ||\n\t\t\t\twordMO.word.startsWith(\"'\") ||\n\t\t\t\tstartSingleQuote\n\t\t\t) {\n\t\t\t\twordMO.exclude = true;\n\t\t\t\tstartSingleQuote = true;\n\t\t\t}\n\n\t\t\tif (wordMO.word.endsWith('’') || wordMO.word.endsWith(\"'\")) {\n\t\t\t\twordMO.exclude = true;\n\t\t\t\tstartSingleQuote = false;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate excludeDoubleQuote(words: WordMO[]) {\n\t\tlet startDoubleQuote: boolean = false;\n\t\tfor (let i = 0; i < words.length; i++) {\n\t\t\tconst wordMO = words[i];\n\t\t\tif (\n\t\t\t\twordMO.word.startsWith('“') ||\n\t\t\t\twordMO.word.startsWith('\"') ||\n\t\t\t\tstartDoubleQuote\n\t\t\t) {\n\t\t\t\twordMO.exclude = true;\n\t\t\t\tstartDoubleQuote = true;\n\t\t\t}\n\n\t\t\tif (wordMO.word.endsWith('”') || wordMO.word.endsWith('\"')) {\n\t\t\t\twordMO.exclude = true;\n\t\t\t\tstartDoubleQuote = false;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate excludeParens(words: WordMO[]) {\n\t\tlet startParens: boolean = false;\n\n\t\tfor (let i = 0; i < words.length; i++) {\n\t\t\tconst wordMO = words[i];\n\t\t\tif (wordMO.word.includes('(') || startParens) {\n\t\t\t\twordMO.exclude = true;\n\t\t\t\tstartParens = true;\n\t\t\t}\n\n\t\t\tif (wordMO.word.includes(')')) {\n\t\t\t\twordMO.exclude = true;\n\t\t\t\tstartParens = false;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate calculateWord(\n\t\tparagraph: ParagraphMO,\n\t\texclusionsMO: ExclusionsMO,\n\t\tremainingWordCount: number,\n\t) {\n\t\tlet _verb = 0;\n\t\tlet _waste = 0;\n\t\tlet _noun = 0;\n\t\tlet _prep = 0;\n\t\tlet _ad_ = 0;\n\t\tlet wc = 0;\n\t\tif (\n\t\t\t(exclusionsMO.headings && paragraph.isHeading) ||\n\t\t\t(exclusionsMO.tables && paragraph.isTable) ||\n\t\t\t(exclusionsMO.indentedParagraphs && paragraph.isLeftIndent) ||\n\t\t\t(exclusionsMO.listItems && paragraph.isList) ||\n\t\t\texclusionsMO.wordCountLessThan > paragraph.wc\n\t\t) {\n\t\t\tfor (let k = 0; k < paragraph.words.length; k++) {\n\t\t\t\tparagraph.words[k].exclude = true;\n\t\t\t}\n\t\t} else {\n\t\t\tif (exclusionsMO.parens) {\n\t\t\t\tthis.excludeParens(paragraph.words);\n\t\t\t}\n\t\t\tif (exclusionsMO.singleQuotes) {\n\t\t\t\tthis.excludeSingleQuote(paragraph.words);\n\t\t\t}\n\t\t\tif (exclusionsMO.doubleQuotes) {\n\t\t\t\tthis.excludeDoubleQuote(paragraph.words);\n\t\t\t}\n\t\t\tlet followsPeriod = true;\n\t\t\tfor (let k = 0; k < paragraph.words.length; k++) {\n\t\t\t\tconst wordMO: WordMO = paragraph.words[k];\n\t\t\t\tconst lowerCaseWord = wordMO.word.toLowerCase();\n\t\t\t\tconst strippedWord = lowerCaseWord.replace(\n\t\t\t\t\tstrippedOutExclusionPunctuationsRex,\n\t\t\t\t\t'',\n\t\t\t\t);\n\t\t\t\tif (exclusionsMO.lowerCaseCustomExclusion.indexOf(strippedWord) >= 0) {\n\t\t\t\t\twordMO.exclude = true;\n\t\t\t\t}\n\n\t\t\t\t// ignore excluding word\n\t\t\t\tif (!wordMO.exclude) {\n\t\t\t\t\twc++;\n\n\t\t\t\t\t// eslint-disable-next-line\n\t\t\t\t\tWordManager.separateWord(wordMO.word).forEach((term) => {\n\t\t\t\t\t\tswitch (this.identifyWord(term, followsPeriod)) {\n\t\t\t\t\t\t\tcase 0:\n\t\t\t\t\t\t\t\t_verb++;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 1:\n\t\t\t\t\t\t\t\t_noun++;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 2:\n\t\t\t\t\t\t\t\t_prep++;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 3:\n\t\t\t\t\t\t\t\t_ad_++;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 4:\n\t\t\t\t\t\t\t\t_waste++;\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tfollowsPeriod =\n\t\t\t\t\tlowerCaseWord.endsWith('.') && !lowerCaseWord.endsWith('..');\n\t\t\t\tif (wc === remainingWordCount) {\n\t\t\t\t\tparagraph.words = paragraph.words.slice(0, k + 1);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (exclusionsMO.wordCountLessThan > wc && wc < remainingWordCount) {\n\t\t\tparagraph.wordTypeCount = new WordTypeCountMO();\n\t\t\tparagraph.wc = 0;\n\t\t} else {\n\t\t\tparagraph.wordTypeCount = new WordTypeCountMO(\n\t\t\t\t_verb,\n\t\t\t\t_noun,\n\t\t\t\t_prep,\n\t\t\t\t_waste,\n\t\t\t\t_ad_,\n\t\t\t);\n\t\t\tparagraph.wc = wc;\n\t\t}\n\t\treturn paragraph;\n\t}\n\n\tprivate calculateScore(\n\t\tcount: number,\n\t\twordCount: number,\n\t\tscoreCutoffs: number[],\n\t) {\n\t\t// get to fixed 2 decimals to make consistent values shown in dianogsis\n\t\tconst rating = Math.round((count * 100) / wordCount) || 0;\n\t\tlet score = 0;\n\t\twhile (score < scoreCutoffs.length && rating >= scoreCutoffs[score]) {\n\t\t\tscore++;\n\t\t}\n\n\t\tconst scoreContribution = scoreContributionWeight[score];\n\t\treturn {\n\t\t\tscoreContribution,\n\t\t\tscore,\n\t\t\t// show fully column upto the given rating\n\t\t\tgraphScore: count === 0 ? 0 : score + 1,\n\t\t\trating,\n\t\t};\n\t}\n\n\tprivate calculateChunkNodeScores(\n\t\twordTypeCount: WordTypeCountMO,\n\t\ttotalWord: number,\n\t) {\n\t\tlet metrics = ConfigManager.getMetrics();\n\t\t// verbs\n\t\tvar verbScore = this.calculateScore(\n\t\t\twordTypeCount.verb,\n\t\t\ttotalWord,\n\t\t\tmetrics.Verbs.scoreCutoffs,\n\t\t);\n\n\t\t// nouns\n\t\tvar nounScore = this.calculateScore(\n\t\t\twordTypeCount.noun,\n\t\t\ttotalWord,\n\t\t\tmetrics.Nouns.scoreCutoffs,\n\t\t);\n\n\t\t// prep\n\t\tvar prepScore = this.calculateScore(\n\t\t\twordTypeCount.prep,\n\t\t\ttotalWord,\n\t\t\tmetrics.Prepositions.scoreCutoffs,\n\t\t);\n\n\t\t// ad_word\n\t\tvar ad_Score = this.calculateScore(\n\t\t\twordTypeCount.ad_,\n\t\t\ttotalWord,\n\t\t\tmetrics.AdjectivesAdverbs.scoreCutoffs,\n\t\t);\n\n\t\t// waste\n\t\tvar wasteScore = this.calculateScore(\n\t\t\twordTypeCount.waste,\n\t\t\ttotalWord,\n\t\t\tmetrics.WasteWords.scoreCutoffs,\n\t\t);\n\n\t\t// average\n\t\tlet totalWeight =\n\t\t\tverbScore.scoreContribution +\n\t\t\tnounScore.scoreContribution +\n\t\t\tprepScore.scoreContribution +\n\t\t\tad_Score.scoreContribution +\n\t\t\twasteScore.scoreContribution;\n\n\t\tlet averageScore = 0;\n\t\twhile (\n\t\t\taverageScore < scoreAverageWeightCutoff.length &&\n\t\t\ttotalWeight >= scoreAverageWeightCutoff[averageScore]\n\t\t) {\n\t\t\taverageScore++;\n\t\t}\n\t\treturn new WordTypeScoreMO(\n\t\t\tverbScore.score,\n\t\t\tnounScore.score,\n\t\t\tprepScore.score,\n\t\t\twasteScore.score,\n\t\t\tad_Score.score,\n\t\t\taverageScore,\n\t\t\tverbScore.rating,\n\t\t\tnounScore.rating,\n\t\t\tprepScore.rating,\n\t\t\twasteScore.rating,\n\t\t\tad_Score.rating,\n\t\t\tverbScore.graphScore,\n\t\t\tnounScore.graphScore,\n\t\t\tprepScore.graphScore,\n\t\t\twasteScore.graphScore,\n\t\t\tad_Score.graphScore,\n\t\t);\n\t}\n\n\tprivate createParagraphMO(paragrapgh: string) {\n\t\tlet result = WordManager.getWords(paragrapgh);\n\n\t\treturn new ParagraphMO(\n\t\t\tparagrapgh,\n\t\t\tresult.words,\n\t\t\tfalse,\n\t\t\tfalse,\n\t\t\tfalse,\n\t\t\tfalse,\n\t\t\tresult.wc,\n\t\t);\n\t}\n\n\tpublic countEligibleWords(\n\t\tchunkListMO: ChunkListMO,\n\t\tparagraphs: string[],\n\t\texclusionsMO: ExclusionsMO,\n\t\tnodePerProcess: number,\n\t) {\n\t\tlet chunkListMOLengthBeforeProcess = chunkListMO.lastLoadedParagraphIndex;\n\t\tlet isNodesProcess = false;\n\t\tconst maxWordCount = 1000;\n\t\tdo {\n\t\t\tvar currenParagraph = paragraphs[chunkListMO.lastLoadedParagraphIndex++];\n\t\t\tif (currenParagraph.trim().length === 0) continue;\n\t\t\tconst paragraphMO = this.createParagraphMO(currenParagraph);\n\t\t\tthis.calculateWord(\n\t\t\t\tparagraphMO,\n\t\t\t\texclusionsMO,\n\t\t\t\tmaxWordCount - chunkListMO.contentWordCount,\n\t\t\t);\n\t\t\tchunkListMO.contentWordCount += paragraphMO.wc;\n\t\t\tif (chunkListMO.contentWordCount === maxWordCount) {\n\t\t\t\tchunkListMO.lastLoadedParagraphIndex = paragraphs.length;\n\t\t\t}\n\t\t\tchunkListMO.paragraphMOs.push(paragraphMO);\n\t\t\tchunkListMO.wordTypeCount.append(paragraphMO.wordTypeCount);\n\t\t\tisNodesProcess =\n\t\t\t\tchunkListMO.lastLoadedParagraphIndex -\n\t\t\t\t\tchunkListMOLengthBeforeProcess ===\n\t\t\t\tnodePerProcess;\n\t\t} while (\n\t\t\t!isNodesProcess &&\n\t\t\tparagraphs.length > chunkListMO.lastLoadedParagraphIndex\n\t\t);\n\t\tchunkListMO.wordTypeScore = this.calculateChunkNodeScores(\n\t\t\tchunkListMO.wordTypeCount,\n\t\t\tchunkListMO.contentWordCount,\n\t\t);\n\t\treturn chunkListMO;\n\t}\n\tpublic splitIntoChunks(chunkListMOInput: ChunkListMO) {\n\t\t// have to recreate because input has no function even it's ChunkListMO\n\t\tlet chunkListMO: ChunkListMO = new ChunkListMO();\n\t\tchunkListMO.clone(chunkListMOInput);\n\t\tif (chunkListMO.isFewWordCount) {\n\t\t\tchunkListMO.wordTypeCount = new WordTypeCountMO();\n\t\t\tchunkListMO.wordTypeScore = new WordTypeScoreMO();\n\t\t} else {\n\t\t\tlet newChunk = this.createChunkDataMO(chunkListMO.paragraphMOs);\n\t\t\tnewChunk.wordTypeCount = chunkListMO.wordTypeCount;\n\t\t\tnewChunk.contentWordCount = chunkListMO.contentWordCount;\n\t\t\tnewChunk.wordTypeScore = chunkListMO.wordTypeScore;\n\t\t\tchunkListMO.addLast(newChunk);\n\t\t}\n\t\treturn chunkListMO;\n\t}\n}\n","import * as React from 'react';\nimport './ExcludeParagraph.css';\nimport { ParagraphMO } from '../../models/ParagraphMO';\nimport { FontIcon } from '@fluentui/react/lib/Icon';\n\nexport interface AppProps {\n\t//\n\t// title: string;\n\t// score;\n\n\tparagraphs: ParagraphMO[];\n}\n\nexport interface AppState {\n\t//\n\tisOpen: boolean;\n}\n\nclass ExcludeParagraph extends React.Component<AppProps, AppState> {\n\tconstructor(props, context) {\n\t\tsuper(props, context);\n\n\t\tthis.state = { isOpen: false };\n\t}\n\n\tcomponentDidMount() {\n\t\t//\n\t}\n\n\tcomponentWillUnmount() {\n\t\t//\n\t}\n\n\tclickHandler() {\n\t\tthis.setState({\n\t\t\tisOpen: !this.state.isOpen,\n\t\t});\n\t}\n\n\trenderBrief() {\n\t\t//\n\t\tconst { paragraphs } = this.props;\n\t\tlet title: string = '';\n\n\t\tfor (let i = 0; i < Math.min(paragraphs[0].words.length, 5); i++) {\n\t\t\ttitle += paragraphs[0].words[i].word + ' ';\n\t\t}\n\n\t\treturn <div>{title.trim()}</div>;\n\t}\n\n\trenderFull() {\n\t\tconst { paragraphs } = this.props;\n\t\tlet listItems: JSX.Element[] = [];\n\n\t\tfor (let i = 0; i < paragraphs.length; i++) {\n\t\t\tlistItems.push(<div>{paragraphs[i].text}</div>);\n\t\t}\n\t\treturn listItems;\n\t}\n\n\trender() {\n\t\tconst { isOpen } = this.state;\n\t\treturn (\n\t\t\t<div className=\"ex-content\" onClick={() => this.clickHandler()}>\n\t\t\t\t<div className=\"expander-btn\">\n\t\t\t\t\t<FontIcon\n\t\t\t\t\t\ticonName=\"ChevronDown\"\n\t\t\t\t\t\tclassName={isOpen ? 'open' : 'close'}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t{isOpen ? this.renderFull() : this.renderBrief()}\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nexport default ExcludeParagraph;\n","import * as React from 'react';\nimport './AppCallout.css';\nimport { Callout } from '@fluentui/react';\n\nexport interface AppProps {}\n\nexport interface AppState {\n\t//\n}\n\nclass AppCallout extends React.Component<any, AppState> {\n\tprivate appCallout = null;\n\tcomponentDidMount() {\n\t\tsetTimeout(() => {\n\t\t\tthis.appCallout && this.appCallout.click();\n\t\t}, 5000);\n\t}\n\tcomponentWillUnmount() {}\n\trender() {\n\t\tlet { text, title, ...other } = this.props;\n\t\treturn (\n\t\t\t<Callout\n\t\t\t\tclassName=\"wd-callout\"\n\t\t\t\tariaLabelledBy={'_calloutLabel'}\n\t\t\t\tariaDescribedBy={'_calloutDescription'}\n\t\t\t\trole={'alertdialog'}\n\t\t\t\tgapSpace={0}\n\t\t\t\tsetInitialFocus={true}\n\t\t\t\t{...other}>\n\t\t\t\t{title != null && (\n\t\t\t\t\t<div className=\"ms-CalloutExample-header\">\n\t\t\t\t\t\t<h3 className=\"ms-CalloutExample-title\" id={'_calloutLabel'}>\n\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t</h3>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"ms-CalloutExample-inner\"\n\t\t\t\t\tref={(input) => (this.appCallout = input)}>\n\t\t\t\t\t<div className=\"ms-CalloutExample-content\">\n\t\t\t\t\t\t<p className=\"ms-CalloutExample-subText\" id={'_calloutDescription'}>\n\t\t\t\t\t\t\t{text}\n\t\t\t\t\t\t\t{this.props.children}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</Callout>\n\t\t);\n\t}\n}\n\nexport default AppCallout;\n","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport { types } from '../../constants/types';\nimport { ChunkDetailsMO } from '../../models/ChunkDetailsMO';\nimport './ChunkDetails.css';\nimport { Analysis } from '../Analysis/Analysis';\nimport { ChunkListMO } from '../../models/ChunkListMO';\nimport { WordManager } from '../../Manager/WordManager';\nimport { GraphCheckListMO } from '../../models/GraphCheckListMO';\n// import { HashWord } from \"../../Utils/HashWord\";\nimport { ExclusionsMO } from '../../models/ExclusionsMO';\nimport { ParagraphMO } from '../../models/ParagraphMO';\nimport { WordMO } from '../../models/WordMO';\nimport ExcludeParagraph from './ExcludeParagraph';\nimport { ConfigManager } from '../../Manager/ConfigManager';\nimport AppCallout from '../AppCallout/AppCallout';\n\nexport interface AppProps {\n\t//\n\tchunkDetailsMO: ChunkDetailsMO;\n\tsetChunkDetailsMO;\n\tsetWordTypeScoreMO;\n\tchunkListMO: ChunkListMO;\n\tgraphCheckListMO: GraphCheckListMO;\n\n\texclusionsMO: ExclusionsMO;\n}\n\nexport interface AppState {\n\t//\n\tisCalloutVisible: boolean;\n}\n\nclass ChunkDetails extends React.Component<AppProps, AppState> {\n\tprivate _spanElements = {};\n\tprivate _currentSpan: { key: string; type: string };\n\n\tconstructor(props, context) {\n\t\tsuper(props, context);\n\n\t\tthis.state = { isCalloutVisible: false };\n\t}\n\n\tcomponentDidMount() {}\n\n\tcomponentWillUnmount() {}\n\n\tmoveToWord = (_paragraphIdx: number, _wordIdx: number, _word: string) => {\n\t\tconsole.log(_word, _paragraphIdx, _wordIdx);\n\t};\n\n\tprivate getWordType(className: string) {\n\t\tlet result: string = '';\n\t\tswitch (className) {\n\t\t\tcase 'verb':\n\t\t\t\tresult = 'Verbs';\n\t\t\t\tbreak;\n\t\t\tcase 'noun':\n\t\t\t\tresult = 'Nouns';\n\t\t\t\tbreak;\n\t\t\tcase 'preposition':\n\t\t\t\tresult = 'Prepositions';\n\t\t\t\tbreak;\n\t\t\tcase 'ad_':\n\t\t\t\tresult = 'AdjectivesAdverbs';\n\t\t\t\tbreak;\n\t\t\tcase 'waste':\n\t\t\t\tresult = 'WasteWords';\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tprivate addWord(\n\t\tlistWord: JSX.Element[],\n\t\tword: string,\n\t\tparagraphIdx: number,\n\t\twordIdx: number,\n\t\tsearchWord: string = null,\n\t\tkey: string,\n\t\tclassName: string = 'normal',\n\t) {\n\t\tlistWord.push(\n\t\t\t<span\n\t\t\t\tref={(element) => {\n\t\t\t\t\tthis._spanElements[key] = element;\n\t\t\t\t}}\n\t\t\t\tkey={key}\n\t\t\t\tclassName={className}\n\t\t\t\tonClick={() => {\n\t\t\t\t\tif (searchWord !== null) {\n\t\t\t\t\t\tthis._currentSpan = { key: key, type: this.getWordType(className) };\n\n\t\t\t\t\t\tthis.setState({ isCalloutVisible: !this.state.isCalloutVisible });\n\t\t\t\t\t\tthis.moveToWord(paragraphIdx, wordIdx, searchWord);\n\t\t\t\t\t}\n\t\t\t\t}}>\n\t\t\t\t{word}\n\t\t\t</span>,\n\t\t);\n\t}\n\n\tprivate combineGraphCheckList() {\n\t\tconst { graphCheckListMO } = this.props;\n\t\tif (\n\t\t\tgraphCheckListMO.cVerb === false &&\n\t\t\tgraphCheckListMO.cNoun === false &&\n\t\t\tgraphCheckListMO.cPrep === false &&\n\t\t\tgraphCheckListMO.cWaste === false &&\n\t\t\tgraphCheckListMO.cAd_ === false\n\t\t) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tprivate changeColor(words: WordMO[], paragraphIdx: number) {\n\t\tconst { graphCheckListMO } = this.props;\n\t\tlet analysis: Analysis = new Analysis();\n\t\tlet listItems: JSX.Element[] = [];\n\t\tlet followsPeriod = true;\n\t\tif (words.length > 0) {\n\t\t\twords.forEach((wordMO, idx) => {\n\t\t\t\tlet word = wordMO.word;\n\n\t\t\t\tif (wordMO.exclude) {\n\t\t\t\t\tthis.addWord(\n\t\t\t\t\t\tlistItems,\n\t\t\t\t\t\tword,\n\t\t\t\t\t\tparagraphIdx,\n\t\t\t\t\t\tidx,\n\t\t\t\t\t\tnull,\n\t\t\t\t\t\t'ex' + idx,\n\t\t\t\t\t\t'exclude',\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tWordManager.separateWord(word).forEach((term, i) => {\n\t\t\t\t\t\tswitch (analysis.identifyWord(term, followsPeriod)) {\n\t\t\t\t\t\t\tcase 0:\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\tgraphCheckListMO.cVerb === true ||\n\t\t\t\t\t\t\t\t\tthis.combineGraphCheckList() === true\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\tthis.addWord(\n\t\t\t\t\t\t\t\t\t\tlistItems,\n\t\t\t\t\t\t\t\t\t\tterm,\n\t\t\t\t\t\t\t\t\t\tparagraphIdx,\n\t\t\t\t\t\t\t\t\t\tidx,\n\t\t\t\t\t\t\t\t\t\tword,\n\t\t\t\t\t\t\t\t\t\t`v_${paragraphIdx}_${idx}_${i}`,\n\t\t\t\t\t\t\t\t\t\t'verb',\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.addWord(\n\t\t\t\t\t\t\t\t\t\tlistItems,\n\t\t\t\t\t\t\t\t\t\tterm,\n\t\t\t\t\t\t\t\t\t\tparagraphIdx,\n\t\t\t\t\t\t\t\t\t\tidx,\n\t\t\t\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t\t\t\t`v_${paragraphIdx}_${idx}_${i}`,\n\t\t\t\t\t\t\t\t\t\t'normal',\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 1:\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\tgraphCheckListMO.cNoun === true ||\n\t\t\t\t\t\t\t\t\tthis.combineGraphCheckList() === true\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\tthis.addWord(\n\t\t\t\t\t\t\t\t\t\tlistItems,\n\t\t\t\t\t\t\t\t\t\tterm,\n\t\t\t\t\t\t\t\t\t\tparagraphIdx,\n\t\t\t\t\t\t\t\t\t\tidx,\n\t\t\t\t\t\t\t\t\t\tword,\n\t\t\t\t\t\t\t\t\t\t`n_${paragraphIdx}_${idx}_${i}`,\n\t\t\t\t\t\t\t\t\t\t'noun',\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.addWord(\n\t\t\t\t\t\t\t\t\t\tlistItems,\n\t\t\t\t\t\t\t\t\t\tterm,\n\t\t\t\t\t\t\t\t\t\tparagraphIdx,\n\t\t\t\t\t\t\t\t\t\tidx,\n\t\t\t\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t\t\t\t`n_${paragraphIdx}_${idx}_${i}`,\n\t\t\t\t\t\t\t\t\t\t'normal',\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 2:\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\tgraphCheckListMO.cPrep === true ||\n\t\t\t\t\t\t\t\t\tthis.combineGraphCheckList() === true\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\tthis.addWord(\n\t\t\t\t\t\t\t\t\t\tlistItems,\n\t\t\t\t\t\t\t\t\t\tterm,\n\t\t\t\t\t\t\t\t\t\tparagraphIdx,\n\t\t\t\t\t\t\t\t\t\tidx,\n\t\t\t\t\t\t\t\t\t\tword,\n\t\t\t\t\t\t\t\t\t\t`p_${paragraphIdx}_${idx}_${i}`,\n\t\t\t\t\t\t\t\t\t\t'preposition',\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.addWord(\n\t\t\t\t\t\t\t\t\t\tlistItems,\n\t\t\t\t\t\t\t\t\t\tterm,\n\t\t\t\t\t\t\t\t\t\tparagraphIdx,\n\t\t\t\t\t\t\t\t\t\tidx,\n\t\t\t\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t\t\t\t`p_${paragraphIdx}_${idx}_${i}`,\n\t\t\t\t\t\t\t\t\t\t'normal',\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 3:\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\tgraphCheckListMO.cAd_ === true ||\n\t\t\t\t\t\t\t\t\tthis.combineGraphCheckList() === true\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\tthis.addWord(\n\t\t\t\t\t\t\t\t\t\tlistItems,\n\t\t\t\t\t\t\t\t\t\tterm,\n\t\t\t\t\t\t\t\t\t\tparagraphIdx,\n\t\t\t\t\t\t\t\t\t\tidx,\n\t\t\t\t\t\t\t\t\t\tword,\n\t\t\t\t\t\t\t\t\t\t`ad__${paragraphIdx}_${idx}_${i}`,\n\t\t\t\t\t\t\t\t\t\t'ad_',\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.addWord(\n\t\t\t\t\t\t\t\t\t\tlistItems,\n\t\t\t\t\t\t\t\t\t\tterm,\n\t\t\t\t\t\t\t\t\t\tparagraphIdx,\n\t\t\t\t\t\t\t\t\t\tidx,\n\t\t\t\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t\t\t\t`ad__${paragraphIdx}_${idx}_${i}`,\n\t\t\t\t\t\t\t\t\t\t'normal',\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 4:\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\tgraphCheckListMO.cWaste === true ||\n\t\t\t\t\t\t\t\t\tthis.combineGraphCheckList() === true\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\tthis.addWord(\n\t\t\t\t\t\t\t\t\t\tlistItems,\n\t\t\t\t\t\t\t\t\t\tterm,\n\t\t\t\t\t\t\t\t\t\tparagraphIdx,\n\t\t\t\t\t\t\t\t\t\tidx,\n\t\t\t\t\t\t\t\t\t\tword,\n\t\t\t\t\t\t\t\t\t\t`w_${paragraphIdx}_${paragraphIdx}_${idx}_${i}`,\n\t\t\t\t\t\t\t\t\t\t'waste',\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.addWord(\n\t\t\t\t\t\t\t\t\t\tlistItems,\n\t\t\t\t\t\t\t\t\t\tterm,\n\t\t\t\t\t\t\t\t\t\tparagraphIdx,\n\t\t\t\t\t\t\t\t\t\tidx,\n\t\t\t\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t\t\t\t`w_${paragraphIdx}_${paragraphIdx}_${idx}_${i}`,\n\t\t\t\t\t\t\t\t\t\t'normal',\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tthis.addWord(\n\t\t\t\t\t\t\t\t\tlistItems,\n\t\t\t\t\t\t\t\t\tterm,\n\t\t\t\t\t\t\t\t\tparagraphIdx,\n\t\t\t\t\t\t\t\t\tidx,\n\t\t\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t\t\t`d_${paragraphIdx}_${idx}_${i}`,\n\t\t\t\t\t\t\t\t\t'normal',\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tfollowsPeriod = word.endsWith('.') && !word.endsWith('..');\n\n\t\t\t\tthis.addWord(\n\t\t\t\t\tlistItems,\n\t\t\t\t\t' ',\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t`s_${paragraphIdx}_${idx}_`,\n\t\t\t\t\t'normal',\n\t\t\t\t);\n\t\t\t});\n\t\t}\n\n\t\treturn listItems;\n\t}\n\n\tisBlock(paragraph: ParagraphMO) {\n\t\tconst { exclusionsMO } = this.props;\n\t\tif (\n\t\t\t(exclusionsMO.headings && paragraph.isHeading) ||\n\t\t\t(exclusionsMO.tables && paragraph.isTable) ||\n\t\t\t(exclusionsMO.indentedParagraphs && paragraph.isLeftIndent) ||\n\t\t\t(exclusionsMO.listItems && paragraph.isList) ||\n\t\t\tparagraph.wc === 0\n\t\t) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\trenderCallout = () => {\n\t\tconst onCalloutDismiss = () => {\n\t\t\tthis.setState({ isCalloutVisible: false });\n\t\t};\n\n\t\treturn (\n\t\t\t<AppCallout\n\t\t\t\tkey={'_callout' + this._currentSpan.key}\n\t\t\t\ttarget={this._spanElements[this._currentSpan.key]}\n\t\t\t\tonDismiss={() => {\n\t\t\t\t\tonCalloutDismiss();\n\t\t\t\t}}\n\t\t\t\tonClick={() => {\n\t\t\t\t\tonCalloutDismiss();\n\t\t\t\t}}\n\t\t\t\ttitle={ConfigManager.getMetrics()[this._currentSpan.type].key}\n\t\t\t\ttext={\n\t\t\t\t\tConfigManager.getMetrics()[this._currentSpan.type].longDescription\n\t\t\t\t}>\n\t\t\t\t<div className=\"ms-CalloutExample-header\">\n\t\t\t\t\t<h3 className=\"ms-CalloutExample-title\" id={'_calloutLabel'}>\n\t\t\t\t\t\t{' '}\n\t\t\t\t\t</h3>\n\t\t\t\t</div>\n\t\t\t\t<div className=\"ms-CalloutExample-inner\">\n\t\t\t\t\t<div className=\"ms-CalloutExample-content\">\n\t\t\t\t\t\t<p className=\"ms-CalloutExample-subText\" id={'_calloutDescription'}>\n\t\t\t\t\t\t\t<br />\n\t\t\t\t\t\t</p>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</AppCallout>\n\t\t);\n\t};\n\n\trenderContent = (content: ParagraphMO[]) => {\n\t\tlet listItems: JSX.Element[] = [];\n\t\tlet paragraphs: ParagraphMO[] = [];\n\n\t\tfor (let i = 0; i < content.length; i++) {\n\t\t\tconst paragraph = content[i];\n\n\t\t\tif (this.isBlock(paragraph)) {\n\t\t\t\tif (paragraph.text.length > 0) {\n\t\t\t\t\tparagraphs.push(paragraph);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (paragraphs.length > 0) {\n\t\t\t\t\tlistItems.push(\n\t\t\t\t\t\t<ExcludeParagraph\n\t\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\t\tparagraphs={paragraphs}></ExcludeParagraph>,\n\t\t\t\t\t);\n\t\t\t\t\tparagraphs = [];\n\t\t\t\t}\n\n\t\t\t\tlet result = this.changeColor(paragraph.words, i);\n\t\t\t\tlistItems.push(<div key={`p_${i}`}>{result}</div>);\n\t\t\t}\n\t\t}\n\n\t\tif (paragraphs.length > 0) {\n\t\t\tlistItems.push(\n\t\t\t\t<ExcludeParagraph\n\t\t\t\t\tkey={content.length}\n\t\t\t\t\tparagraphs={paragraphs}></ExcludeParagraph>,\n\t\t\t);\n\t\t\tparagraphs = [];\n\t\t}\n\t\treturn listItems;\n\t};\n\n\trender() {\n\t\treturn (\n\t\t\t<div className=\"chunk-details-content\">\n\t\t\t\t{this.state.isCalloutVisible ? this.renderCallout() : ''}\n\n\t\t\t\t{this.renderContent(this.props.chunkDetailsMO.data.content)}\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nconst mapDispatchToProps = (dispatch) => ({\n\tsetChunkDetailsMO: (chunkDetailsMO) => {\n\t\tdispatch({\n\t\t\ttype: types.SET_CHUNK_DETAILS,\n\t\t\tchunkDetailsMO: chunkDetailsMO,\n\t\t});\n\t},\n\tsetWordTypeScoreMO: (wordTypeScoreMO) => {\n\t\tdispatch({\n\t\t\ttype: types.SET_SCORE,\n\t\t\twordTypeScoreMO: wordTypeScoreMO,\n\t\t});\n\t},\n});\n\nconst mapStateToProps = ({\n\tchunkDetailsMO,\n\tchunkListMO,\n\tgraphCheckListMO,\n\texclusionsMO,\n}) => ({\n\tchunkDetailsMO,\n\tchunkListMO,\n\tgraphCheckListMO,\n\texclusionsMO,\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ChunkDetails);\n","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport { Checkbox } from '@fluentui/react';\nimport { types } from '../../constants/types';\nimport { GraphCheckListMO } from '../../models/GraphCheckListMO';\n\nexport interface AppProps {\n\t//\n\tlabel: string;\n\tcolor: string;\n\tscore: number;\n\ttype: string;\n\n\tgraphCheckListMO: GraphCheckListMO;\n\tsetGraphCheckListMO;\n}\n\nexport interface AppState {\n\t//\n\tstart: boolean;\n\tdown: boolean;\n\tactive: boolean;\n}\n\nclass GraphPart extends React.Component<AppProps, AppState> {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.state = {\n\t\t\tstart: true,\n\t\t\tdown: false,\n\t\t\tactive: false,\n\t\t};\n\t}\n\n\tcomponentDidMount() {\n\t\tsetTimeout(() => {\n\t\t\tthis.setState({ ...this.state, start: false });\n\t\t}, 0);\n\t}\n\n\tcheckBoxHandler() {\n\t\tconst { graphCheckListMO, setGraphCheckListMO, type } = this.props;\n\n\t\tlet _graphCheckListMO = new GraphCheckListMO(\n\t\t\tgraphCheckListMO.cVerb,\n\t\t\tgraphCheckListMO.cNoun,\n\t\t\tgraphCheckListMO.cPrep,\n\t\t\tgraphCheckListMO.cWaste,\n\t\t\tgraphCheckListMO.cAd_,\n\t\t);\n\t\tswitch (type) {\n\t\t\tcase types.CHECK_VERB:\n\t\t\t\t_graphCheckListMO.setCheck(types.CHECK_VERB);\n\t\t\t\tsetGraphCheckListMO(_graphCheckListMO);\n\t\t\t\tbreak;\n\t\t\tcase types.CHECK_NOUN:\n\t\t\t\t_graphCheckListMO.setCheck(types.CHECK_NOUN);\n\t\t\t\tsetGraphCheckListMO(_graphCheckListMO);\n\t\t\t\tbreak;\n\t\t\tcase types.CHECK_PREP:\n\t\t\t\t_graphCheckListMO.setCheck(types.CHECK_PREP);\n\t\t\t\tsetGraphCheckListMO(_graphCheckListMO);\n\t\t\t\tbreak;\n\t\t\tcase types.CHECK_AD_:\n\t\t\t\t_graphCheckListMO.setCheck(types.CHECK_AD_);\n\t\t\t\tsetGraphCheckListMO(_graphCheckListMO);\n\t\t\t\tbreak;\n\t\t\tcase types.CHECK_WASTE:\n\t\t\t\t_graphCheckListMO.setCheck(types.CHECK_WASTE);\n\t\t\t\tsetGraphCheckListMO(_graphCheckListMO);\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tgetIsChecked() {\n\t\tconst { graphCheckListMO, type } = this.props;\n\n\t\tlet result: boolean = false;\n\t\tswitch (type) {\n\t\t\tcase types.CHECK_VERB:\n\t\t\t\tresult = graphCheckListMO.cVerb;\n\t\t\t\tbreak;\n\t\t\tcase types.CHECK_NOUN:\n\t\t\t\tresult = graphCheckListMO.cNoun;\n\t\t\t\tbreak;\n\t\t\tcase types.CHECK_PREP:\n\t\t\t\tresult = graphCheckListMO.cPrep;\n\t\t\t\tbreak;\n\t\t\tcase types.CHECK_AD_:\n\t\t\t\tresult = graphCheckListMO.cAd_;\n\t\t\t\tbreak;\n\t\t\tcase types.CHECK_WASTE:\n\t\t\t\tresult = graphCheckListMO.cWaste;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\trender() {\n\t\tconst { label, color, score } = this.props;\n\t\tconst { start, down } = this.state;\n\t\tconst pct = (score / 5) * 100;\n\t\tconst theLabel = <span className={`graph-part-label`}>{label}</span>;\n\n\t\tconst theBar = (\n\t\t\t<div\n\t\t\t\tclassName={`graph-part-bar ${down ? 'graph-part-bar--down' : ''} `}\n\t\t\t\tstyle={{\n\t\t\t\t\twidth: `${start ? 0 : pct}%`,\n\t\t\t\t\tbackgroundColor: color,\n\t\t\t\t}}></div>\n\t\t);\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={`graph-part graph-part--active`}\n\t\t\t\tonClick={() => {\n\t\t\t\t\tthis.checkBoxHandler();\n\t\t\t\t}}>\n\t\t\t\t<Checkbox checked={this.getIsChecked()} />\n\t\t\t\t{theLabel}\n\t\t\t\t{theBar}\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nconst mapDispatchToProps = (dispatch) => ({\n\tsetGraphCheckListMO: (graphCheckListMO) => {\n\t\tdispatch({\n\t\t\ttype: types.SET_GRAPH_CHECK_LIST,\n\t\t\tgraphCheckListMO: graphCheckListMO,\n\t\t});\n\t},\n});\n\nconst mapStateToProps = ({ graphCheckListMO }) => ({\n\tgraphCheckListMO,\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(GraphPart);\n","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport './GraphCallout.css';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n\tfaGrinHearts,\n\tfaSmileBeam,\n\tfaMeh,\n\tfaFrown,\n\tfaSadCry,\n} from '@fortawesome/free-regular-svg-icons';\nimport AppCallout from '../AppCallout/AppCallout';\nimport { DirectionalHint } from '@fluentui/react';\nimport { ThemeMO } from '../../models/ThemeMO';\n\nexport interface AppProps {\n\tthemeMO: ThemeMO;\n}\n\nexport interface AppState {\n\tisCalloutVisible: boolean;\n}\n\nclass GraphCallout extends React.Component<AppProps, AppState> {\n\tconstructor(props, context) {\n\t\tsuper(props, context);\n\n\t\tthis.state = { isCalloutVisible: false };\n\t}\n\tcomponentDidMount() {\n\t\t//\n\t}\n\tcomponentWillUnmount() {\n\t\t//\n\t}\n\tprivate showDiagnosisCallout = () => {\n\t\tthis.setState({ isCalloutVisible: !this.state.isCalloutVisible });\n\t};\n\trenderCallout = () => {\n\t\tconst onCalloutDismiss = () => {\n\t\t\tthis.setState({ isCalloutVisible: false });\n\t\t};\n\t\tlet { themeMO } = this.props;\n\t\tlet icons = [faSmileBeam, faGrinHearts, faMeh, faFrown, faSadCry];\n\t\treturn (\n\t\t\t<AppCallout\n\t\t\t\tkey={'_callout_emojis'}\n\t\t\t\ttarget={'.graph-part-emojis-callout'}\n\t\t\t\tdirectionalHint={DirectionalHint.bottomCenter}\n\t\t\t\tonDismiss={() => {\n\t\t\t\t\tonCalloutDismiss();\n\t\t\t\t}}\n\t\t\t\tonClick={() => {\n\t\t\t\t\tonCalloutDismiss();\n\t\t\t\t}}>\n\t\t\t\t<h3 className=\"theme-title\">Theme: {themeMO.themeTitle}</h3>\n\t\t\t\t<table>\n\t\t\t\t\t{icons.map((icon, i) => (\n\t\t\t\t\t\t<tr key={i}>\n\t\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t\t<FontAwesomeIcon icon={icon} /> {'   '}\n\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t\t{themeMO.key !== 'sunny-weather' ? (\n\t\t\t\t\t\t\t\t\tthemeMO.ratings[i]\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<span className=\"emoji-font\">{themeMO.ratings[i]}</span>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t))}\n\t\t\t\t</table>\n\t\t\t</AppCallout>\n\t\t);\n\t};\n\n\trender() {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={'graph-part-emojis-callout'}\n\t\t\t\tonClick={this.showDiagnosisCallout}>\n\t\t\t\t{this.state.isCalloutVisible ? this.renderCallout() : ''}\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nconst mapStateToProps = ({ themeMO }) => ({\n\tthemeMO,\n});\n\nexport default connect(mapStateToProps, null)(GraphCallout);\n","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport './Graph.css';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n\tfaGrinHearts,\n\tfaSmileBeam,\n\tfaMeh,\n\tfaFrown,\n\tfaSadCry,\n} from '@fortawesome/free-regular-svg-icons';\nimport GraphPart from './GraphPart';\nimport { WordTypeScoreMO } from '../../models/WordTypeScoreMO';\nimport { ConfigManager } from '../../Manager/ConfigManager';\nimport { types } from '../../constants/types';\nimport GraphCallout from './GraphCallout';\n\nexport interface AppProps {\n\t//\n\twordTypeScoreMO: WordTypeScoreMO;\n}\n\nexport interface AppState {}\n\nclass Graph extends React.Component<AppProps, AppState> {\n\tcomponentDidMount() {\n\t\t//\n\t}\n\tcomponentWillUnmount() {\n\t\t//\n\t}\n\n\trender() {\n\t\tconst theSections = (\n\t\t\t<div className={'graph-part-sections'}>\n\t\t\t\t<div\n\t\t\t\t\tclassName={\n\t\t\t\t\t\t'graph-part-section-slice graph-part-section-slice--1'\n\t\t\t\t\t}></div>\n\t\t\t\t<div\n\t\t\t\t\tclassName={\n\t\t\t\t\t\t'graph-part-section-slice graph-part-section-slice--2'\n\t\t\t\t\t}></div>\n\t\t\t\t<div\n\t\t\t\t\tclassName={\n\t\t\t\t\t\t'graph-part-section-slice graph-part-section-slice--3'\n\t\t\t\t\t}></div>\n\t\t\t\t<div\n\t\t\t\t\tclassName={\n\t\t\t\t\t\t'graph-part-section-slice graph-part-section-slice--4'\n\t\t\t\t\t}></div>\n\t\t\t\t<div\n\t\t\t\t\tclassName={\n\t\t\t\t\t\t'graph-part-section-slice graph-part-section-slice--5'\n\t\t\t\t\t}></div>\n\t\t\t</div>\n\t\t);\n\n\t\tconst theLines = (\n\t\t\t<div className={'graph-part-sections graph-part-lines'}>\n\t\t\t\t<div className={'graph-part-section-line'}></div>\n\t\t\t\t<div className={'graph-part-section-line'}></div>\n\t\t\t\t<div className={'graph-part-section-line'}></div>\n\t\t\t\t<div className={'graph-part-section-line'}></div>\n\t\t\t\t<div className={'graph-part-section-line'}></div>\n\t\t\t</div>\n\t\t);\n\n\t\tconst theEmojis = (\n\t\t\t<div className={'graph-part graph-part-emojis'}>\n\t\t\t\t<GraphCallout />\n\t\t\t\t<FontAwesomeIcon icon={faSmileBeam} style={{ flex: 1 }} />\n\t\t\t\t<FontAwesomeIcon icon={faGrinHearts} style={{ flex: 1 }} />\n\t\t\t\t<FontAwesomeIcon icon={faMeh} style={{ flex: 1 }} />\n\t\t\t\t<FontAwesomeIcon icon={faFrown} style={{ flex: 1 }} />\n\t\t\t\t<FontAwesomeIcon icon={faSadCry} style={{ flex: 1 }} />\n\t\t\t</div>\n\t\t);\n\t\tconst { wordTypeScoreMO } = this.props;\n\t\tconst metrics = ConfigManager.getMetrics();\n\t\tconst graph = (\n\t\t\t<div className={'graph-container'}>\n\t\t\t\t{theSections}\n\t\t\t\t{theLines}\n\t\t\t\t{theEmojis}\n\t\t\t\t<GraphPart\n\t\t\t\t\tlabel={metrics.Verbs.label}\n\t\t\t\t\tscore={wordTypeScoreMO.verbGraphScore}\n\t\t\t\t\tcolor={metrics.Verbs.color}\n\t\t\t\t\ttype={types.CHECK_VERB}></GraphPart>\n\t\t\t\t<GraphPart\n\t\t\t\t\tlabel={metrics.Nouns.label}\n\t\t\t\t\tscore={wordTypeScoreMO.nounGraphScore}\n\t\t\t\t\tcolor={metrics.Nouns.color}\n\t\t\t\t\ttype={types.CHECK_NOUN}></GraphPart>\n\t\t\t\t<GraphPart\n\t\t\t\t\tlabel={metrics.Prepositions.label}\n\t\t\t\t\tscore={wordTypeScoreMO.prepGraphScore}\n\t\t\t\t\tcolor={metrics.Prepositions.color}\n\t\t\t\t\ttype={types.CHECK_PREP}></GraphPart>\n\t\t\t\t<GraphPart\n\t\t\t\t\tlabel={metrics.AdjectivesAdverbs.label}\n\t\t\t\t\tscore={wordTypeScoreMO.ad_GraphScore}\n\t\t\t\t\tcolor={metrics.AdjectivesAdverbs.color}\n\t\t\t\t\ttype={types.CHECK_AD_}></GraphPart>\n\t\t\t\t<GraphPart\n\t\t\t\t\tlabel={metrics.WasteWords.label}\n\t\t\t\t\tscore={wordTypeScoreMO.wasteGraphScore}\n\t\t\t\t\tcolor={metrics.WasteWords.color}\n\t\t\t\t\ttype={types.CHECK_WASTE}></GraphPart>\n\t\t\t</div>\n\t\t);\n\n\t\treturn <div>{graph}</div>;\n\t}\n}\n\nconst mapStateToProps = ({ wordTypeScoreMO }) => ({\n\twordTypeScoreMO,\n});\n\nexport default connect(mapStateToProps, null)(Graph);\n","import * as React from 'react';\nimport ReactTooltip from 'react-tooltip';\nimport './DownloadAddInsText.css';\n\nexport interface AppProps {}\n\nexport interface AppState {\n\t//\n}\n\nclass DownloadAddInsText extends React.Component<AppProps, AppState> {\n\trender() {\n\t\treturn (\n\t\t\t<div className=\"download-wrapper\">\n\t\t\t\t<div className=\"download-text\"></div>\n\t\t\t\t<div className=\"bottom-start-workout\">\n\t\t\t\t\t<button\n\t\t\t\t\t\tclassName=\"page-button\"\n\t\t\t\t\t\tdata-tip\n\t\t\t\t\t\tdata-for=\"actionPlanTooltip\"\n\t\t\t\t\t\tdata-event=\"click\">\n\t\t\t\t\t\tget action plan\n\t\t\t\t\t</button>\n\t\t\t\t\t<ReactTooltip\n\t\t\t\t\t\tid=\"actionPlanTooltip\"\n\t\t\t\t\t\tplace=\"bottom\"\n\t\t\t\t\t\teffect=\"solid\"\n\t\t\t\t\t\ttype=\"light\"\n\t\t\t\t\t\twrapper=\"span\"\n\t\t\t\t\t\tclickable={true}\n\t\t\t\t\t\tmultiline={true}\n\t\t\t\t\t\tborder={true}\n\t\t\t\t\t\tborderColor=\"#000\"\n\t\t\t\t\t\tglobalEventOff=\"click\">\n\t\t\t\t\t\tTo access this premium feature, join the{' '}\n\t\t\t\t\t\t<a\n\t\t\t\t\t\t\thref=\"https://www.helensword.com/writespace\"\n\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\trel=\"noopener noreferrer\">\n\t\t\t\t\t\t\tWriteSPACE\n\t\t\t\t\t\t</a>{' '}\n\t\t\t\t\t\t<br />\n\t\t\t\t\t\ttoday! For a free 30-day trial membership, select the\n\t\t\t\t\t\t<br />\n\t\t\t\t\t\tmonthly membership option and enter the discount code\n\t\t\t\t\t\t<br />\n\t\t\t\t\t\tWRITERSDIET at checkout.\n\t\t\t\t\t</ReactTooltip>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nexport default DownloadAddInsText;\n","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport { CommandBar } from '@fluentui/react';\nimport { types } from '../../constants/types';\nimport DownloadAddInsText from './DownloadAddInsText';\nimport './WdCommandBar.css';\n\nexport interface AppProps {\n\tsetShowSettingsPane: Function;\n\tdownloadAddins: {\n\t\tshowDownloadButton: boolean;\n\t};\n}\n\nexport interface AppState {\n\t//\n}\n\nclass WdCommandBar extends React.Component<AppProps, AppState> {\n\trender() {\n\t\tconst { setShowSettingsPane } = this.props;\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={\n\t\t\t\t\t'command-bar-wrapper ' +\n\t\t\t\t\t(this.props.downloadAddins.showDownloadButton\n\t\t\t\t\t\t? 'command-bar-wrapper-button-show'\n\t\t\t\t\t\t: 'command-bar-wrapper-button-hidden')\n\t\t\t\t}>\n\t\t\t\t<CommandBar\n\t\t\t\t\titems={[]}\n\t\t\t\t\tfarItems={[\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tkey: 'buyBook',\n\t\t\t\t\t\t\ticonProps: {\n\t\t\t\t\t\t\t\ticonName: 'ReadingMode',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tariaLabel: 'Buy the book',\n\t\t\t\t\t\t\tonClick: () => {\n\t\t\t\t\t\t\t\twindow.open(\n\t\t\t\t\t\t\t\t\t'https://www.amazon.com/dp/022635198X/ref=nosim?tag=helensword0d-20',\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tkey: 'getApp',\n\t\t\t\t\t\t\ticonProps: {\n\t\t\t\t\t\t\t\ticonName: 'WordLogo',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tariaLabel: 'Get Word App',\n\t\t\t\t\t\t\tonClick: () => {\n\t\t\t\t\t\t\t\twindow.open(\n\t\t\t\t\t\t\t\t\t'https://appsource.microsoft.com/en-us/product/office/WA200002125?src=office',\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tkey: 'help',\n\t\t\t\t\t\t\ticonProps: {\n\t\t\t\t\t\t\t\ticonName: 'Help',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tariaLabel: 'Help',\n\t\t\t\t\t\t\tonClick: () => {\n\t\t\t\t\t\t\t\twindow.open('https://writersdiet.com/writers-diet-help');\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tkey: 'settings',\n\t\t\t\t\t\t\ticonProps: {\n\t\t\t\t\t\t\t\ticonName: 'Settings',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tariaLabel: 'Settings',\n\t\t\t\t\t\t\tonClick: () => {\n\t\t\t\t\t\t\t\tsetShowSettingsPane();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t]}\n\t\t\t\t/>\n\t\t\t\t{this.props.downloadAddins.showDownloadButton && <DownloadAddInsText />}\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nconst mapStateToProps = ({ downloadAddins }: any) => ({\n\tdownloadAddins,\n});\nconst mapDispatchToProps = (dispatch) => ({\n\tsetShowSettingsPane: () => {\n\t\tdispatch({ type: types.SHOW_SETTINGS_PANE });\n\t},\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(WdCommandBar);\n","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport './Diagnosis.css';\nimport { types } from '../../constants/types';\nimport { ChunkDetailsMO } from '../../models/ChunkDetailsMO';\nimport { IconButton, DirectionalHint } from '@fluentui/react';\nimport { ChunkListMO } from '../../models/ChunkListMO';\nimport { ThemeMO } from '../../models/ThemeMO';\nimport { GraphCheckListMO } from '../../models/GraphCheckListMO';\nimport { WordManager } from '../../Manager/WordManager';\nimport { ConfigManager } from '../../Manager/ConfigManager';\nimport AppCallout from '../AppCallout/AppCallout';\n\nimport { faFileAlt, faCopy } from '@fortawesome/free-regular-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\n\nexport interface AppProps {\n\t//\n\tchunkDetailsMO: ChunkDetailsMO;\n\tsetChunkDetailsMO;\n\n\tchunkListMO: ChunkListMO;\n\tsetWordTypeScoreMO;\n\n\tthemeMO: ThemeMO;\n\n\tgraphCheckListMO: GraphCheckListMO;\n}\n\nexport interface AppState {\n\tisCalloutVisible: boolean;\n}\n\n// detect chunkList size\nclass Diagnosis extends React.Component<AppProps, AppState> {\n\tconstructor(props, context) {\n\t\tsuper(props, context);\n\n\t\tthis.state = { isCalloutVisible: false };\n\t}\n\tcloseButtonHandler = () => {\n\t\tconst {\n\t\t\tsetChunkDetailsMO,\n\t\t\tchunkDetailsMO,\n\t\t\tchunkListMO,\n\t\t\tsetWordTypeScoreMO,\n\t\t} = this.props;\n\n\t\tif (chunkListMO.length > 1) {\n\t\t\tchunkDetailsMO.isShow = false;\n\t\t\tsetChunkDetailsMO(chunkDetailsMO);\n\t\t\tsetWordTypeScoreMO(chunkListMO.wordTypeScore);\n\t\t}\n\t};\n\n\tgetChunkDetailsRating() {\n\t\t//\n\t\tconst { chunkDetailsMO, graphCheckListMO } = this.props;\n\t\tlet result: number;\n\n\t\tif (graphCheckListMO.cVerb === true) {\n\t\t\tresult = WordManager.verifyScore(\n\t\t\t\tchunkDetailsMO.data.wordTypeScore.verbScore,\n\t\t\t);\n\t\t} else if (graphCheckListMO.cNoun === true) {\n\t\t\tresult = WordManager.verifyScore(\n\t\t\t\tchunkDetailsMO.data.wordTypeScore.nounScore,\n\t\t\t);\n\t\t} else if (graphCheckListMO.cPrep === true) {\n\t\t\tresult = WordManager.verifyScore(\n\t\t\t\tchunkDetailsMO.data.wordTypeScore.prepScore,\n\t\t\t);\n\t\t} else if (graphCheckListMO.cAd_ === true) {\n\t\t\tresult = WordManager.verifyScore(\n\t\t\t\tchunkDetailsMO.data.wordTypeScore.ad_Score,\n\t\t\t);\n\t\t} else if (graphCheckListMO.cWaste === true) {\n\t\t\tresult = WordManager.verifyScore(\n\t\t\t\tchunkDetailsMO.data.wordTypeScore.wasteScore,\n\t\t\t);\n\t\t} else {\n\t\t\tresult = WordManager.verifyScore(\n\t\t\t\tchunkDetailsMO.data.wordTypeScore.average,\n\t\t\t);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tgetChunkListRating() {\n\t\t//\n\t\tconst { chunkListMO, graphCheckListMO } = this.props;\n\t\tlet result: number;\n\t\tif (graphCheckListMO.cVerb === true) {\n\t\t\tresult = WordManager.verifyScore(chunkListMO.wordTypeScore.verbScore);\n\t\t} else if (graphCheckListMO.cNoun === true) {\n\t\t\tresult = WordManager.verifyScore(chunkListMO.wordTypeScore.nounScore);\n\t\t} else if (graphCheckListMO.cPrep === true) {\n\t\t\tresult = WordManager.verifyScore(chunkListMO.wordTypeScore.prepScore);\n\t\t} else if (graphCheckListMO.cAd_ === true) {\n\t\t\tresult = WordManager.verifyScore(chunkListMO.wordTypeScore.ad_Score);\n\t\t} else if (graphCheckListMO.cWaste === true) {\n\t\t\tresult = WordManager.verifyScore(chunkListMO.wordTypeScore.wasteScore);\n\t\t} else {\n\t\t\tresult = WordManager.verifyScore(chunkListMO.wordTypeScore.average);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tgetRating() {\n\t\tconst { chunkListMO, chunkDetailsMO, themeMO } = this.props;\n\t\tif (chunkListMO.isFewWordCount) {\n\t\t\treturn '';\n\t\t}\n\t\tlet rating =\n\t\t\tchunkDetailsMO.isShow === true\n\t\t\t\t? themeMO.ratings[this.getChunkDetailsRating()]\n\t\t\t\t: themeMO.ratings[this.getChunkListRating()];\n\t\treturn themeMO.key !== 'sunny-weather' ? (\n\t\t\trating\n\t\t) : (\n\t\t\t<span className=\"emoji-font\">{rating}</span>\n\t\t);\n\t}\n\tgetPercentage(percent: number, count: number) {\n\t\tif (percent === 0 && count > 0) {\n\t\t\treturn '<1';\n\t\t}\n\t\treturn percent.toString();\n\t}\n\tgetMessage() {\n\t\tconst { chunkDetailsMO, chunkListMO, graphCheckListMO } = this.props;\n\t\tlet result: any = '';\n\t\tlet summaryCalloutText = null;\n\t\tif (chunkListMO.isFewWordCount) {\n\t\t\tresult = (\n\t\t\t\t<div>\n\t\t\t\t\tThis sample has {chunkListMO.contentWordCount} eligible words. The\n\t\t\t\t\tWriter’s Diet test is not calibrated for writing samples under 100\n\t\t\t\t\twords.\n\t\t\t\t</div>\n\t\t\t);\n\t\t} else if (graphCheckListMO.cVerb === true) {\n\t\t\tlet label = ConfigManager.getMetrics().Verbs.label;\n\t\t\tif (chunkDetailsMO.isShow && chunkListMO.length > 1) {\n\t\t\t\tsummaryCalloutText = `Region diagnosis (${label})`;\n\t\t\t\tresult = `${label}: ${this.getPercentage(\n\t\t\t\t\tchunkDetailsMO.data.wordTypeScore.verbRating,\n\t\t\t\t\tchunkDetailsMO.data.wordTypeCount.verb,\n\t\t\t\t)}% of region.`;\n\t\t\t} else {\n\t\t\t\tsummaryCalloutText = `Document diagnosis (${label})`;\n\t\t\t\tresult = `${label}: ${this.getPercentage(\n\t\t\t\t\tchunkListMO.wordTypeScore.verbRating,\n\t\t\t\t\tchunkListMO.wordTypeCount.verb,\n\t\t\t\t)}% of sample.`;\n\t\t\t}\n\t\t} else if (graphCheckListMO.cNoun === true) {\n\t\t\tlet label = ConfigManager.getMetrics().Nouns.label;\n\t\t\tif (chunkDetailsMO.isShow && chunkListMO.length > 1) {\n\t\t\t\tsummaryCalloutText = `Region diagnosis (${label})`;\n\t\t\t\tresult = `${label}: ${this.getPercentage(\n\t\t\t\t\tchunkDetailsMO.data.wordTypeScore.nounRating,\n\t\t\t\t\tchunkDetailsMO.data.wordTypeCount.noun,\n\t\t\t\t)}% of region.`;\n\t\t\t} else {\n\t\t\t\tsummaryCalloutText = `Document diagnosis (${label})`;\n\t\t\t\tresult = `${label}: ${this.getPercentage(\n\t\t\t\t\tchunkListMO.wordTypeScore.nounRating,\n\t\t\t\t\tchunkListMO.wordTypeCount.noun,\n\t\t\t\t)}% of sample.`;\n\t\t\t}\n\t\t} else if (graphCheckListMO.cPrep === true) {\n\t\t\tlet label = ConfigManager.getMetrics().Prepositions.label;\n\t\t\tif (chunkDetailsMO.isShow && chunkListMO.length > 1) {\n\t\t\t\tsummaryCalloutText = `Region diagnosis (${label})`;\n\t\t\t\tresult = `${label}: ${this.getPercentage(\n\t\t\t\t\tchunkDetailsMO.data.wordTypeScore.prepRating,\n\t\t\t\t\tchunkDetailsMO.data.wordTypeCount.prep,\n\t\t\t\t)}% of region.`;\n\t\t\t} else {\n\t\t\t\tsummaryCalloutText = `Document diagnosis (${label})`;\n\t\t\t\tresult = `${label}: ${this.getPercentage(\n\t\t\t\t\tchunkListMO.wordTypeScore.prepRating,\n\t\t\t\t\tchunkListMO.wordTypeCount.prep,\n\t\t\t\t)}% of sample.`;\n\t\t\t}\n\t\t} else if (graphCheckListMO.cAd_ === true) {\n\t\t\tlet label = ConfigManager.getMetrics().AdjectivesAdverbs.label;\n\t\t\tif (chunkDetailsMO.isShow && chunkListMO.length > 1) {\n\t\t\t\tsummaryCalloutText = `Region diagnosis (${label})`;\n\t\t\t\tresult = `${label}: ${this.getPercentage(\n\t\t\t\t\tchunkDetailsMO.data.wordTypeScore.ad_Rating,\n\t\t\t\t\tchunkDetailsMO.data.wordTypeCount.ad_,\n\t\t\t\t)}% of region.`;\n\t\t\t} else {\n\t\t\t\tsummaryCalloutText = `Document diagnosis (${label})`;\n\t\t\t\tresult = `${label}: ${this.getPercentage(\n\t\t\t\t\tchunkListMO.wordTypeScore.ad_Rating,\n\t\t\t\t\tchunkListMO.wordTypeCount.ad_,\n\t\t\t\t)}% of sample.`;\n\t\t\t}\n\t\t} else if (graphCheckListMO.cWaste === true) {\n\t\t\tlet label = ConfigManager.getMetrics().WasteWords.label;\n\t\t\tif (chunkDetailsMO.isShow && chunkListMO.length > 1) {\n\t\t\t\tsummaryCalloutText = `Region diagnosis (${label})`;\n\t\t\t\tresult = `${label}: ${this.getPercentage(\n\t\t\t\t\tchunkDetailsMO.data.wordTypeScore.wasteRating,\n\t\t\t\t\tchunkDetailsMO.data.wordTypeCount.waste,\n\t\t\t\t)}% of region.`;\n\t\t\t} else {\n\t\t\t\tsummaryCalloutText = `Document diagnosis (${label})`;\n\t\t\t\tresult = `${label}: ${this.getPercentage(\n\t\t\t\t\tchunkListMO.wordTypeScore.wasteRating,\n\t\t\t\t\tchunkListMO.wordTypeCount.waste,\n\t\t\t\t)}% of sample.`;\n\t\t\t}\n\t\t} else {\n\t\t\tif (chunkDetailsMO.isShow && chunkListMO.length > 1) {\n\t\t\t\tsummaryCalloutText = `Region diagnosis (all categories)`;\n\t\t\t\tresult = `This region has ${chunkDetailsMO.data.contentWordCount} eligible words.`;\n\t\t\t} else {\n\t\t\t\tsummaryCalloutText = `Document diagnosis (all categories)`;\n\t\t\t\tif (chunkListMO.contentWordCount === 1000) {\n\t\t\t\t\tresult =\n\t\t\t\t\t\t'This sample has 1000 eligible words.  To test a longer sample, download the MS Word app.';\n\t\t\t\t} else {\n\t\t\t\t\tresult = `This sample has ${chunkListMO.contentWordCount} eligible words.`;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn (\n\t\t\t<div onClick={this.showDiagnosisCallout}>\n\t\t\t\t{this.state.isCalloutVisible\n\t\t\t\t\t? this.renderCallout(summaryCalloutText)\n\t\t\t\t\t: ''}\n\t\t\t\t<div className=\"diagnosis-container-footer\">{result} </div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tgetIconColor() {\n\t\tconst { graphCheckListMO } = this.props;\n\n\t\tlet result = '';\n\n\t\tif (graphCheckListMO.cVerb === true) {\n\t\t\tresult = ConfigManager.getMetrics().Verbs.color;\n\t\t} else if (graphCheckListMO.cNoun === true) {\n\t\t\tresult = ConfigManager.getMetrics().Nouns.color;\n\t\t} else if (graphCheckListMO.cPrep === true) {\n\t\t\tresult = ConfigManager.getMetrics().Prepositions.color;\n\t\t} else if (graphCheckListMO.cAd_ === true) {\n\t\t\tresult = ConfigManager.getMetrics().AdjectivesAdverbs.color;\n\t\t} else if (graphCheckListMO.cWaste === true) {\n\t\t\tresult = ConfigManager.getMetrics().WasteWords.color;\n\t\t} else {\n\t\t\tresult = '#fff';\n\t\t}\n\n\t\treturn result;\n\t}\n\trenderCallout = (text) => {\n\t\tif (text == null || text === '') {\n\t\t\tthis.setState({ isCalloutVisible: false });\n\t\t\treturn '';\n\t\t}\n\t\tconst onCalloutDismiss = () => {\n\t\t\tthis.setState({ isCalloutVisible: false });\n\t\t};\n\n\t\treturn (\n\t\t\t<AppCallout\n\t\t\t\tkey={'_callout_dianosis'}\n\t\t\t\ttarget={'.diagnosis-container'}\n\t\t\t\tdirectionalHint={DirectionalHint.topCenter}\n\t\t\t\tonDismiss={() => {\n\t\t\t\t\tonCalloutDismiss();\n\t\t\t\t}}\n\t\t\t\ttext={text}\n\t\t\t\tonClick={() => {\n\t\t\t\t\tonCalloutDismiss();\n\t\t\t\t}}></AppCallout>\n\t\t);\n\t};\n\tprivate showDiagnosisCallout = () => {\n\t\tthis.setState({ isCalloutVisible: !this.state.isCalloutVisible });\n\t};\n\trender() {\n\t\tconst { chunkDetailsMO, chunkListMO } = this.props;\n\t\tconst regionBackgroundColor = '#5f5ba4'; // dark purple\n\t\tconst documentBackgroundColor = '#69696c'; // dark grey\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName=\"diagnosis-container\"\n\t\t\t\tstyle={{\n\t\t\t\t\t...{\n\t\t\t\t\t\tbackgroundColor:\n\t\t\t\t\t\t\tchunkDetailsMO.isShow && chunkListMO.length > 1\n\t\t\t\t\t\t\t\t? regionBackgroundColor\n\t\t\t\t\t\t\t\t: documentBackgroundColor,\n\t\t\t\t\t},\n\n\t\t\t\t\tcolor: 'white',\n\t\t\t\t}}>\n\t\t\t\t<div className=\"diagnosis-container-top\">\n\t\t\t\t\t<div className=\"diagnosis-header\" onClick={this.showDiagnosisCallout}>\n\t\t\t\t\t\t{chunkDetailsMO.isShow === true && chunkListMO.length > 1 ? (\n\t\t\t\t\t\t\t<FontAwesomeIcon\n\t\t\t\t\t\t\t\ticon={faCopy}\n\t\t\t\t\t\t\t\tclassName=\"diagnosis-icon\"\n\t\t\t\t\t\t\t\tstyle={{ color: this.getIconColor() }}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<FontAwesomeIcon\n\t\t\t\t\t\t\t\ticon={faFileAlt}\n\t\t\t\t\t\t\t\tclassName=\"diagnosis-icon\"\n\t\t\t\t\t\t\t\tstyle={{ color: this.getIconColor() }}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{this.getRating()}\n\t\t\t\t\t</div>\n\t\t\t\t\t<div className={'diagnosis-icon-container'}>\n\t\t\t\t\t\t{chunkDetailsMO.isShow && chunkListMO.length > 1 ? (\n\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\ticonProps={{\n\t\t\t\t\t\t\t\t\ticonName: 'ChromeClose',\n\t\t\t\t\t\t\t\t\tstyles: { root: { color: 'white' } },\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tonClick={this.closeButtonHandler}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t''\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t{this.getMessage()}\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nconst mapDispatchToProps = (dispatch) => ({\n\tsetChunkDetailsMO: (chunkDetailsMO) => {\n\t\tdispatch({\n\t\t\ttype: types.SET_CHUNK_DETAILS,\n\t\t\tchunkDetailsMO: chunkDetailsMO,\n\t\t});\n\t},\n\tsetWordTypeScoreMO: (wordTypeScoreMO) => {\n\t\tdispatch({\n\t\t\ttype: types.SET_SCORE,\n\t\t\twordTypeScoreMO: wordTypeScoreMO,\n\t\t});\n\t},\n});\n\nconst mapStateToProps = ({\n\tchunkDetailsMO,\n\tchunkListMO,\n\tthemeMO,\n\tgraphCheckListMO,\n}) => ({\n\tchunkDetailsMO,\n\tchunkListMO,\n\tthemeMO,\n\tgraphCheckListMO,\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Diagnosis);\n","import * as React from 'react';\nimport { TextField } from '@fluentui/react';\nimport { ConfigManager } from '../../Manager/ConfigManager';\nconst strippedOutExclusionPunctuationsRex =\n\tConfigManager.getStrippedOutExclusionPunctuations();\n\ninterface AppProps {\n\trenderLabelWithTooltip;\n\tsetUnsaveExclusionsValue;\n\tcustomExclusion: string[];\n}\n\ninterface AppState {\n\t//\n\ttext: string;\n}\n\nclass CustomExclusionText extends React.Component<AppProps, AppState> {\n\tconstructor(props, context) {\n\t\tsuper(props, context);\n\t\tthis.state = { text: this._a2S(props.customExclusion) };\n\t}\n\n\tcomponentDidUpdate(prevProps: AppProps, _prevState) {\n\t\tif (prevProps.customExclusion !== this.props.customExclusion) {\n\t\t\tthis.setState({ text: this._a2S(this.props.customExclusion) });\n\t\t}\n\t}\n\n\tprivate _a2S = (a: string[]): string => {\n\t\tlet result: string = '';\n\n\t\ta &&\n\t\t\ta.forEach((item) => {\n\t\t\t\tresult += result !== '' ? '\\n' + item : item;\n\t\t\t});\n\n\t\treturn result;\n\t};\n\n\tprivate _s2A = (s: string): string[] => {\n\t\tlet result: string[];\n\t\tresult = s.split('\\n');\n\t\treturn result;\n\t};\n\n\trender() {\n\t\tlet { renderLabelWithTooltip, setUnsaveExclusionsValue } = this.props;\n\t\treturn (\n\t\t\t<TextField\n\t\t\t\tlabel=\"Custom word exclusions\"\n\t\t\t\tonRenderLabel={() =>\n\t\t\t\t\trenderLabelWithTooltip(\n\t\t\t\t\t\t'Custom word exclusions',\n\t\t\t\t\t\t'If you use certain keywords frequently (e.g. “education”) and feel that they are skewing your diagnosis, you can exclude them from the word count by typing them into the text box.',\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\tmultiline\n\t\t\t\tvalue={this.state.text}\n\t\t\t\tonChange={(ev: React.ChangeEvent<HTMLTextAreaElement>) => {\n\t\t\t\t\tthis.setState({ text: ev.target.value });\n\t\t\t\t}}\n\t\t\t\tonBlur={(_ev: React.FocusEvent<HTMLTextAreaElement>) => {\n\t\t\t\t\tlet textArray = this._s2A(this.state.text);\n\t\t\t\t\tconst strippedWords = textArray.map((word) =>\n\t\t\t\t\t\tword.toLowerCase().replace(strippedOutExclusionPunctuationsRex, ''),\n\t\t\t\t\t);\n\t\t\t\t\tthis.setState({ text: this._a2S(strippedWords) });\n\t\t\t\t\tsetUnsaveExclusionsValue('customExclusion', strippedWords);\n\t\t\t\t}}></TextField>\n\t\t);\n\t}\n}\n\nexport default CustomExclusionText;\n","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport './SettingsPane.css';\nimport {\n\tPanel,\n\tPanelType,\n\tPivot,\n\tPivotItem,\n\tPivotLinkSize,\n\tPivotLinkFormat,\n\tIconButton,\n\tPrimaryButton,\n\tChoiceGroup,\n\tTextField,\n\tCheckbox,\n\tStack,\n\tSpinButton,\n\tTooltipHost,\n\tLabel,\n} from '@fluentui/react';\nimport { types } from '../../constants/types';\nimport { types as webTypes } from '../../../store/types';\nimport { ExclusionsMO } from '../../models/ExclusionsMO';\nimport { ThemeMO } from '../../models/ThemeMO';\nimport { ConfigManager } from '../../Manager/ConfigManager';\nimport { LocalStorageManager } from '../../Manager/LocalStorageManager';\nimport CustomExclusionText from './CustomExclusionText';\n\ninterface AppProps {\n\t//\n\trefreshAction;\n\n\t//\n\tisShowSettingsPane;\n\tsetHideSettingsPane;\n\n\tsetExclusionsMO;\n\trefreshWebTextInput: Function;\n\texclusionsMO: ExclusionsMO;\n\n\tsetThemeMO;\n\tthemeMO: ThemeMO;\n}\n\ninterface AppState {\n\t//\n\tisShowCustomTheme: boolean;\n\tunsaveExclusionsMO: ExclusionsMO;\n\tunsaveThemeMO: ThemeMO;\n}\n\nclass SettingsPane extends React.Component<AppProps, AppState> {\n\tCUSTOM_KEY = ConfigManager.getCustomThemeKey();\n\n\tconstructor(props, context) {\n\t\tsuper(props, context);\n\n\t\t// init data\n\t\tthis.state = {\n\t\t\tisShowCustomTheme: this.props.themeMO.key === this.CUSTOM_KEY,\n\t\t\tunsaveExclusionsMO: this.props.exclusionsMO,\n\t\t\tunsaveThemeMO: this.props.themeMO,\n\t\t};\n\t}\n\n\tprivate getUnsaveExclusionsValue = (name) => {\n\t\tconst { unsaveExclusionsMO } = this.state;\n\t\treturn unsaveExclusionsMO[name];\n\t};\n\n\tprivate setUnsaveExclusionsValue = (name, newValue) => {\n\t\tconst { unsaveExclusionsMO } = this.state;\n\t\tvar settingEntry: any = {};\n\t\tsettingEntry[name] = newValue;\n\n\t\tif (name === 'customExclusion') {\n\t\t\tsettingEntry.lowerCaseCustomExclusion = newValue.map((value) =>\n\t\t\t\tvalue.toLowerCase(),\n\t\t\t);\n\t\t}\n\t\tconst updatedSettings = {\n\t\t\t...unsaveExclusionsMO,\n\t\t\t...settingEntry,\n\t\t};\n\n\t\tthis.setState({\n\t\t\t...this.state,\n\t\t\tunsaveExclusionsMO: updatedSettings,\n\t\t});\n\t\tthis.saveExclusionsMO(updatedSettings);\n\t};\n\n\tprivate getUnsaveThemeValue = (name) => {\n\t\tconst { unsaveThemeMO } = this.state;\n\t\treturn unsaveThemeMO[name];\n\t};\n\n\tprivate setUnsaveThemeValue = (name, newValue) => {\n\t\tconst { unsaveThemeMO } = this.state;\n\n\t\tvar settingEntry = {};\n\n\t\tsettingEntry[name] = newValue;\n\n\t\tconst updatedSettings = {\n\t\t\t...unsaveThemeMO,\n\t\t\t...settingEntry,\n\t\t};\n\t\tupdatedSettings.customeThemeRatings = updatedSettings.ratings;\n\t\tthis.saveThemeMO(updatedSettings);\n\t};\n\n\trenderLabelWithTooltip = (label, tooltipText): any => {\n\t\treturn (\n\t\t\t<span>\n\t\t\t\t<span>{label} </span>\n\t\t\t\t<TooltipHost content={tooltipText}>\n\t\t\t\t\t<IconButton\n\t\t\t\t\t\tclassName=\"question-btn\"\n\t\t\t\t\t\ticonProps={{\n\t\t\t\t\t\t\ticonName: 'Info',\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t</TooltipHost>\n\t\t\t</span>\n\t\t);\n\t};\n\tprivate renderExclusionsCheckbox = (name, label, tooltipText) => {\n\t\tconst settingValue = this.getUnsaveExclusionsValue(name);\n\t\treturn (\n\t\t\t<Checkbox\n\t\t\t\tlabel={label}\n\t\t\t\tonRenderLabel={() => this.renderLabelWithTooltip(label, tooltipText)}\n\t\t\t\tonChange={(ev: React.ChangeEvent<HTMLInputElement>) => {\n\t\t\t\t\tthis.setUnsaveExclusionsValue(name, ev.target.checked);\n\t\t\t\t}}\n\t\t\t\tchecked={settingValue}\n\t\t\t/>\n\t\t);\n\t};\n\n\trenderThemeTab = () => {\n\t\tconst ratingLabelPresets = ConfigManager.getRatingLabelPresets();\n\n\t\tconst _onChange = (_ev, option) => {\n\t\t\tlet _themeMO = ConfigManager.getThemeByKey(option.key);\n\t\t\tthis.saveThemeMO(_themeMO);\n\n\t\t\tif (option.key === this.CUSTOM_KEY) {\n\t\t\t\tthis.setState({ isShowCustomTheme: true });\n\t\t\t} else {\n\t\t\t\tthis.setState({ isShowCustomTheme: false });\n\t\t\t}\n\t\t};\n\n\t\tconst onRenderCustomTheme = () => {\n\t\t\tconst settingValue = this.getUnsaveThemeValue('ratings');\n\t\t\tconst ratingHandler = (ev: React.ChangeEvent<HTMLInputElement>, pos) => {\n\t\t\t\tlet newValue = [...settingValue];\n\t\t\t\tnewValue[pos] = ev.target.value;\n\t\t\t\tthis.setUnsaveThemeValue('ratings', newValue);\n\t\t\t};\n\n\t\t\treturn (\n\t\t\t\t<div>\n\t\t\t\t\t<TextField\n\t\t\t\t\t\tclassName=\"ms-fontWeight-light theme-label-caption\"\n\t\t\t\t\t\tlabel=\"1 (Best)\"\n\t\t\t\t\t\tvalue={settingValue[0]}\n\t\t\t\t\t\tonChange={(ev: React.ChangeEvent<HTMLInputElement>) => {\n\t\t\t\t\t\t\tratingHandler(ev, 0);\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t\t<TextField\n\t\t\t\t\t\tclassName=\"ms-fontWeight-light theme-label-caption\"\n\t\t\t\t\t\tlabel=\"2\"\n\t\t\t\t\t\tvalue={settingValue[1]}\n\t\t\t\t\t\tonChange={(ev: React.ChangeEvent<HTMLInputElement>) => {\n\t\t\t\t\t\t\tratingHandler(ev, 1);\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t\t<TextField\n\t\t\t\t\t\tclassName=\"ms-fontWeight-light theme-label-caption\"\n\t\t\t\t\t\tlabel=\"3\"\n\t\t\t\t\t\tvalue={settingValue[2]}\n\t\t\t\t\t\tonChange={(ev: React.ChangeEvent<HTMLInputElement>) => {\n\t\t\t\t\t\t\tratingHandler(ev, 2);\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t\t<TextField\n\t\t\t\t\t\tclassName=\"ms-fontWeight-light theme-label-caption\"\n\t\t\t\t\t\tlabel=\"4\"\n\t\t\t\t\t\tvalue={settingValue[3]}\n\t\t\t\t\t\tonChange={(ev: React.ChangeEvent<HTMLInputElement>) => {\n\t\t\t\t\t\t\tratingHandler(ev, 3);\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t\t<TextField\n\t\t\t\t\t\tclassName=\"ms-fontWeight-light theme-label-caption\"\n\t\t\t\t\t\tlabel=\"5 (Worst)\"\n\t\t\t\t\t\tvalue={settingValue[4]}\n\t\t\t\t\t\tonChange={(ev: React.ChangeEvent<HTMLInputElement>) => {\n\t\t\t\t\t\t\tratingHandler(ev, 4);\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t);\n\t\t};\n\n\t\tconst onRenderLanguageChoiceLabel = (props) => {\n\t\t\treturn (\n\t\t\t\t<span id={props.labelId} className=\"ms-ChoiceFieldLabel\">\n\t\t\t\t\t<span>{props.text}</span>\n\t\t\t\t\t<span className=\"ms-fontWeight-light theme-label-caption\">\n\t\t\t\t\t\t{props.themeQuestion !== '' ? `: ${props.themeQuestion}` : null}\n\t\t\t\t\t</span>\n\t\t\t\t</span>\n\t\t\t);\n\t\t};\n\n\t\tconst options = ratingLabelPresets.map((preset) => {\n\t\t\treturn {\n\t\t\t\t...preset,\n\t\t\t\ttext: preset.themeTitle,\n\t\t\t\tonRenderLabel: onRenderLanguageChoiceLabel,\n\t\t\t};\n\t\t});\n\n\t\tconst onRenderLanguageCurrentChoice = () => {\n\t\t\tconst { unsaveThemeMO } = this.state;\n\t\t\treturn (\n\t\t\t\t<div className=\"currentscores  ms-font-s ms-fontWeight-bold\">\n\t\t\t\t\t<p>\n\t\t\t\t\t\t{unsaveThemeMO.key !== 'sunny-weather' ? (\n\t\t\t\t\t\t\t`${unsaveThemeMO.ratings[0]} - ${unsaveThemeMO.ratings[1]} - ${unsaveThemeMO.ratings[2]} - ${unsaveThemeMO.ratings[3]} - ${unsaveThemeMO.ratings[4]}`\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t<span className=\"emoji-font\">{unsaveThemeMO.ratings[0]}</span>\n\t\t\t\t\t\t\t\t{' - '}\n\t\t\t\t\t\t\t\t<span className=\"emoji-font\">{unsaveThemeMO.ratings[1]}</span>\n\t\t\t\t\t\t\t\t{' - '}\n\t\t\t\t\t\t\t\t<span className=\"emoji-font\">{unsaveThemeMO.ratings[2]}</span>\n\t\t\t\t\t\t\t\t{' - '}\n\t\t\t\t\t\t\t\t<span className=\"emoji-font\">{unsaveThemeMO.ratings[3]}</span>\n\t\t\t\t\t\t\t\t{' - '}\n\t\t\t\t\t\t\t\t<span className=\"emoji-font\">{unsaveThemeMO.ratings[4]}</span>\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</p>\n\t\t\t\t</div>\n\t\t\t);\n\t\t};\n\t\tconst useDefaultTheme = () => {\n\t\t\tlet newTheme = ConfigManager.getDefaultTheme();\n\t\t\tthis.saveThemeMO(newTheme);\n\t\t\tthis.setState({ isShowCustomTheme: false });\n\t\t};\n\n\t\treturn (\n\t\t\t<div>\n\t\t\t\t{onRenderLanguageCurrentChoice()}\n\t\t\t\t<ChoiceGroup\n\t\t\t\t\toptions={options}\n\t\t\t\t\tonChange={_onChange}\n\t\t\t\t\tselectedKey={this.state.unsaveThemeMO.key}\n\t\t\t\t\trequired={true}\n\t\t\t\t/>\n\t\t\t\t{this.state.isShowCustomTheme === true ? onRenderCustomTheme() : null}\n\t\t\t\t<br />\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"defaultSettingLink\"\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tuseDefaultTheme();\n\t\t\t\t\t}}>\n\t\t\t\t\tUse default theme\n\t\t\t\t</div>\n\t\t\t\t<br />\n\t\t\t\t<br />\n\t\t\t</div>\n\t\t);\n\t};\n\n\trenderExclusionTab = () => {\n\t\tconst stackTokens = { childrenGap: 10 };\n\t\tconst { unsaveExclusionsMO } = this.state;\n\t\tconst suffix = ' words';\n\t\tconst maxWord = 1000000;\n\n\t\tconst hasSuffix = (value: string, unitSuffix: string): Boolean => {\n\t\t\tconst subString = value.substr(value.length - unitSuffix.length);\n\t\t\treturn subString === unitSuffix;\n\t\t};\n\n\t\tconst removeSuffix = (value: string, unitSuffix: string): string => {\n\t\t\tif (!hasSuffix(value, unitSuffix)) {\n\t\t\t\treturn value;\n\t\t\t}\n\t\t\treturn value.substr(0, value.length - suffix.length);\n\t\t};\n\n\t\tconst onSpinButtonIncrement = (value: string) => {\n\t\t\tvalue = removeSuffix(value, suffix);\n\t\t\tlet result: number = maxWord;\n\t\t\tif (Number(value) + 1 > maxWord) {\n\t\t\t} else {\n\t\t\t\tresult = Number(value) + 1;\n\t\t\t}\n\n\t\t\tthis.setUnsaveExclusionsValue('wordCountLessThan', result);\n\n\t\t\treturn String(result) + suffix;\n\t\t};\n\n\t\tconst onSpinButtonDecrement = (value: string) => {\n\t\t\tvalue = removeSuffix(value, suffix);\n\t\t\tlet result: number = 0;\n\t\t\tif (Number(value) - 1 < 0) {\n\t\t\t} else {\n\t\t\t\tresult = Number(value) - 1;\n\t\t\t}\n\n\t\t\tthis.setUnsaveExclusionsValue('wordCountLessThan', result);\n\n\t\t\treturn String(result) + suffix;\n\t\t};\n\n\t\tconst onSpinButtonValidate = (value: string) => {\n\t\t\tvalue = removeSuffix(value, suffix);\n\n\t\t\tif (\n\t\t\t\tNumber(value) > maxWord ||\n\t\t\t\tNumber(value) < 0 ||\n\t\t\t\tvalue.trim().length === 0 ||\n\t\t\t\tisNaN(+value)\n\t\t\t) {\n\t\t\t\tvalue = '0';\n\t\t\t}\n\n\t\t\tthis.setUnsaveExclusionsValue('wordCountLessThan', value);\n\n\t\t\treturn String(value) + suffix;\n\t\t};\n\n\t\t// update unsaveExclusionsMO from default settings.\n\t\tconst useDefaultSeting = () => {\n\t\t\tlet _exclusionsMO = ConfigManager.getDefaultExclusions();\n\t\t\tthis.setState({\n\t\t\t\tunsaveExclusionsMO: _exclusionsMO,\n\t\t\t});\n\t\t\tthis.saveExclusionsMO(_exclusionsMO);\n\t\t};\n\n\t\treturn (\n\t\t\t<div>\n\t\t\t\t<br />\n\t\t\t\t<p className=\"ms-fontWeight-light ms-font-s\">\n\t\t\t\t\tTypes of text to be excluded from test results.\n\t\t\t\t</p>\n\t\t\t\t<Stack tokens={stackTokens}>\n\t\t\t\t\t{this.renderExclusionsCheckbox(\n\t\t\t\t\t\t'parens',\n\t\t\t\t\t\t'Text within parentheses',\n\t\t\t\t\t\t'Excludes all text inside parentheses from the word count, a useful option if your document employs a parenthetical citation style such as APA or MLA.',\n\t\t\t\t\t)}\n\t\t\t\t\t{this.renderExclusionsCheckbox(\n\t\t\t\t\t\t'singleQuotes',\n\t\t\t\t\t\t'Text within single quotes',\n\t\t\t\t\t\t'Excludes all text within single quotation marks from the word count; please note that ticking this option may lead to large chunks of text being accidentally excluded if your sample contains misplaced single quotation marks or apostrophes.',\n\t\t\t\t\t)}\n\t\t\t\t\t{this.renderExclusionsCheckbox(\n\t\t\t\t\t\t'doubleQuotes',\n\t\t\t\t\t\t'Text within double quotes',\n\t\t\t\t\t\t'Excludes all text within double quotation marks from the word count; please note that ticking this option may lead to large chunks of text being excluded if your sample contains misplaced or missing double quotation marks.',\n\t\t\t\t\t)}\n\t\t\t\t</Stack>\n\t\t\t\t<br />\n\n\t\t\t\t<Label>\n\t\t\t\t\t{this.renderLabelWithTooltip(\n\t\t\t\t\t\t'Paragraphs with a word count less than:',\n\t\t\t\t\t\t'Very short paragraphs (<25 words) are excluded by default as they are likely to represent headers or list items rather than main text.  If desired, you can increase or decrease the default exclusion quantity.',\n\t\t\t\t\t)}\n\t\t\t\t</Label>\n\t\t\t\t<SpinButton\n\t\t\t\t\tmin={0}\n\t\t\t\t\tmax={maxWord}\n\t\t\t\t\tvalue={unsaveExclusionsMO.wordCountLessThan + suffix}\n\t\t\t\t\tonValidate={onSpinButtonValidate}\n\t\t\t\t\tonIncrement={onSpinButtonIncrement}\n\t\t\t\t\tonDecrement={onSpinButtonDecrement}\n\t\t\t\t\tincrementButtonAriaLabel={'Increase value by 1'}\n\t\t\t\t\tdecrementButtonAriaLabel={'Decrease value by 1'}\n\t\t\t\t/>\n\t\t\t\t<br />\n\t\t\t\t<CustomExclusionText\n\t\t\t\t\trenderLabelWithTooltip={this.renderLabelWithTooltip}\n\t\t\t\t\tsetUnsaveExclusionsValue={this.setUnsaveExclusionsValue}\n\t\t\t\t\tcustomExclusion={unsaveExclusionsMO.customExclusion}\n\t\t\t\t/>\n\t\t\t\t<p className=\"ms-fontWeight-light ms-font-s\">\n\t\t\t\t\tAdd words separated by a new line.\n\t\t\t\t</p>\n\t\t\t\t<br />\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"defaultSettingLink\"\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tuseDefaultSeting();\n\t\t\t\t\t}}>\n\t\t\t\t\tUse default settings\n\t\t\t\t</div>\n\n\t\t\t\t<br />\n\t\t\t\t<br />\n\t\t\t</div>\n\t\t);\n\t};\n\n\tcancelButtonHandler = () => {\n\t\tconst { setHideSettingsPane, refreshAction } = this.props;\n\t\tsetHideSettingsPane();\n\t\trefreshAction();\n\t};\n\n\tsaveThemeMO = (themeMO: ThemeMO) => {\n\t\tconst { setThemeMO, refreshWebTextInput } = this.props;\n\t\tthis.setState({\n\t\t\t...this.state,\n\t\t\tunsaveThemeMO: themeMO,\n\t\t});\n\t\tsetThemeMO(themeMO);\n\t\tLocalStorageManager.setThemeMOToLocalStorage(themeMO);\n\t\tsetTimeout(refreshWebTextInput, 100);\n\t};\n\tsaveExclusionsMO = (exclusionsMO: ExclusionsMO) => {\n\t\tconst { setExclusionsMO, refreshWebTextInput } = this.props;\n\t\tthis.setState({\n\t\t\tunsaveExclusionsMO: exclusionsMO,\n\t\t});\n\t\tsetExclusionsMO(exclusionsMO);\n\t\tLocalStorageManager.setExclusionsMOToLocalStorage(exclusionsMO);\n\t\tsetTimeout(refreshWebTextInput, 100);\n\t};\n\n\trender() {\n\t\tconst { isShowSettingsPane } = this.props;\n\n\t\tconst onRenderHeaderContent = () => {\n\t\t\treturn (\n\t\t\t\t<div className=\"s-header\">\n\t\t\t\t\t<div className=\"text\">Settings</div>\n\n\t\t\t\t\t<PrimaryButton\n\t\t\t\t\t\tclassName=\"close-btn\"\n\t\t\t\t\t\tonClick={this.cancelButtonHandler}>\n\t\t\t\t\t\tSave\n\t\t\t\t\t</PrimaryButton>\n\t\t\t\t</div>\n\t\t\t);\n\t\t};\n\n\t\tconst onRenderBodyContent = () => {\n\t\t\treturn (\n\t\t\t\t<div className=\"s-body\">\n\t\t\t\t\t<Pivot\n\t\t\t\t\t\tlinkFormat={PivotLinkFormat.tabs}\n\t\t\t\t\t\tlinkSize={PivotLinkSize.normal}>\n\t\t\t\t\t\t<PivotItem headerText=\"Theme\">\n\t\t\t\t\t\t\t<br />\n\t\t\t\t\t\t\t<p className=\"ms-fontWeight-light ms-font-s\">\n\t\t\t\t\t\t\t\tCustomize the theme.\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t{this.renderThemeTab()}\n\t\t\t\t\t\t</PivotItem>\n\t\t\t\t\t\t<PivotItem headerText=\"Exclusions\">\n\t\t\t\t\t\t\t{this.renderExclusionTab()}\n\t\t\t\t\t\t</PivotItem>\n\t\t\t\t\t</Pivot>\n\t\t\t\t</div>\n\t\t\t);\n\t\t};\n\n\t\treturn (\n\t\t\t<Panel\n\t\t\t\thasCloseButton={false}\n\t\t\t\ttype={PanelType.smallFixedFar}\n\t\t\t\tonRenderHeader={onRenderHeaderContent}\n\t\t\t\tonRenderBody={onRenderBodyContent}\n\t\t\t\tisOpen={isShowSettingsPane}\n\t\t\t\tisFooterAtBottom={true}\n\t\t\t\tonDismiss={() => {\n\t\t\t\t\tthis.cancelButtonHandler();\n\t\t\t\t}}></Panel>\n\t\t);\n\t}\n}\n\nconst mapDispatchToProps = (dispatch) => ({\n\tsetHideSettingsPane: () => {\n\t\tdispatch({ type: types.HIDE_SETTINGS_PANE });\n\t},\n\tsetExclusionsMO: (exclusionsMO) => {\n\t\tdispatch({\n\t\t\ttype: types.SET_EXCLUSIONS,\n\t\t\texclusionsMO: exclusionsMO,\n\t\t});\n\t},\n\tsetThemeMO: (themeMO) => {\n\t\tdispatch({\n\t\t\ttype: types.SET_THEME,\n\t\t\tthemeMO: themeMO,\n\t\t});\n\t},\n\trefreshWebTextInput: () => {\n\t\tdispatch({ type: webTypes.REFRESH_TEXT_INPUT });\n\t},\n});\n\nconst mapStateToProps = ({ isShowSettingsPane, exclusionsMO, themeMO }) => ({\n\tisShowSettingsPane,\n\texclusionsMO,\n\tthemeMO,\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(SettingsPane);\n","import React, { useState, useRef } from 'react';\nimport { connect } from 'react-redux';\nimport './TextInput.css';\nimport { types } from './store/types';\n\nconst defaultText =\n\t'Full participation, however, stands in contrast to only one aspect of the concept of peripherality as we see it: It places the emphasis on what partial participation is not, or not yet. In our usage, peripherality is also a positive term, whose most salient conceptual antonyms are unrelatedness or irrelevance to ongoing activity. The partial participation of newcomers is by no means \"disconnected\" from the practice of interest. Furthermore, it is also a dynamic concept. In this sense, peripherality, when it is enabled, suggests an opening, a way of gaining access to sources for understanding through growing involvement. The ambiguity inherent in peripheral participation must then be connected to issues of legitimacy, of the social organization of and control over resources, if it is to gain its full analytical potential.';\n\ninterface InputProps {\n\tsetWebTextInput: Function;\n\tshowDownloadAddinsButton: Function;\n}\nconst TextInput: React.FC<InputProps> = ({\n\tsetWebTextInput,\n\tshowDownloadAddinsButton,\n}: InputProps) => {\n\tconst [text, setText] = useState<string>('');\n\tconst textRef = useRef<HTMLTextAreaElement>(null);\n\tconst onInputChange = (_e: React.MouseEvent<HTMLButtonElement>) => {\n\t\tconst inputText = text.trim();\n\t\tconst result = inputText === '' ? defaultText : inputText;\n\t\tsetWebTextInput(result);\n\t\tshowDownloadAddinsButton();\n\t\tsetText(result);\n\t};\n\tconst onTextChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n\t\tsetText(e.target.value);\n\t};\n\treturn (\n\t\t<div>\n\t\t\t<h1 className=\"test-header\">The Test</h1>\n\t\t\t<p className=\"top\">\n\t\t\t\tEnter a text sample of between 100 to 1000 words, then click &#34;run\n\t\t\t\tthe test&#34; to see your result. (To test a longer length document,\n\t\t\t\tdownload the free Writer&#39;s Diet app for MS Word&nbsp;\n\t\t\t\t<a\n\t\t\t\t\thref=\"https://appsource.microsoft.com/en-us/product/office/WA200002125?src=office\"\n\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\trel=\"noopener noreferrer\">\n\t\t\t\t\there\n\t\t\t\t</a>\n\t\t\t\t.)\n\t\t\t</p>\n\t\t\t<div className=\"tex-input-container\">\n\t\t\t\t<textarea\n\t\t\t\t\tclassName=\"text-input\"\n\t\t\t\t\taria-label=\"enter text sample\"\n\t\t\t\t\tref={textRef}\n\t\t\t\t\tonChange={onTextChange}\n\t\t\t\t\tvalue={text}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div className=\"bottom-text\">\n\t\t\t\t<button className=\"page-button\" onClick={onInputChange}>\n\t\t\t\t\trun the test\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\nconst mapDispatchToProps = (dispatch: Function) => ({\n\tsetWebTextInput: (text: string) => {\n\t\tdispatch({ type: types.WEB_TEXT_INPUT, text });\n\t},\n\tshowDownloadAddinsButton: () => {\n\t\tdispatch({ type: types.DOWNLOAD_ADDINS_SHOW, show: true });\n\t},\n});\n\nconst mapStateToProps = ({ webTextInput }: any) => ({\n\twebTextInput,\n});\nexport default connect(mapStateToProps, mapDispatchToProps)(TextInput);\n","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport './App.css';\nimport { Analysis } from './Analysis/Analysis';\nimport { ChunkListMO } from '../models/ChunkListMO';\nimport { types } from '../constants/types';\nimport { ChunkDetailsMO } from '../models/ChunkDetailsMO';\nimport ChunkDetails from './ChunkDetails/ChunkDetails';\nimport { ChunkNodeMO } from '../models/ChunkNodeMO';\nimport Graph from './Graph/Graph';\nimport { WordTypeScoreMO } from '../models/WordTypeScoreMO';\nimport WdCommandBar from './WdCommandBar/WdCommandBar';\n\nimport Diagnosis from './Diagnosis/Diagnosis';\nimport SettingsPane from './SettingsPane/SettingsPane';\nimport { ExclusionsMO } from '../models/ExclusionsMO';\nimport { ThemeMO } from '../models/ThemeMO';\nimport { ConfigManager } from '../Manager/ConfigManager';\nimport { LocalStorageManager } from '../Manager/LocalStorageManager';\nimport { GraphCheckListMO } from '../models/GraphCheckListMO';\nimport { ChunkDataMO } from '../models/ChunkDataMO';\nimport TextInput from '../../TextInput';\n\nexport interface AppProps {\n\t// redux\n\tchunkDetailsMO: ChunkDetailsMO;\n\tsetChunkDetailsMO: Function;\n\n\tchunkListMO: ChunkListMO;\n\tsetChunkListMO: Function;\n\n\twordTypeScoreMO: WordTypeScoreMO;\n\tsetWordTypeScoreMO: Function;\n\n\texclusionsMO: ExclusionsMO;\n\tsetExclusionsMO: Function;\n\n\tthemeMO: ThemeMO;\n\tsetThemeMO: Function;\n\n\tsetGraphCheckListMO: Function;\n\tisShowInfoPane: boolean;\n\tisShowSettingsPane: boolean;\n\twebTextInput: {\n\t\ttext: string;\n\t\trefreshToggle: boolean;\n\t\tforceLoadToggle: false;\n\t};\n\tdownloadAddins: {\n\t\tshowDownloadButton: boolean;\n\t};\n}\n\nexport interface AppState {\n\tisLoad: boolean;\n\tstatusInfo: string;\n}\n\nclass App extends React.Component<AppProps, AppState> {\n\tprivate analysis: Analysis;\n\tconstructor(props: any, context: any) {\n\t\tsuper(props, context);\n\n\t\tthis.analysis = new Analysis();\n\n\t\tlet _graphCheckListMO = new GraphCheckListMO();\n\t\tthis.props.setGraphCheckListMO(_graphCheckListMO);\n\n\t\tlet _exclusionsMO =\n\t\t\tLocalStorageManager.getExclusionsMOFromLocalStorage() ||\n\t\t\tConfigManager.getDefaultExclusions();\n\t\tthis.props.setExclusionsMO(_exclusionsMO);\n\n\t\tlet _themeMO =\n\t\t\tLocalStorageManager.getThemeMOFromLocalStorage() ||\n\t\t\tConfigManager.getDefaultTheme();\n\t\tthis.props.setThemeMO(_themeMO);\n\t}\n\n\tcomponentDidMount() {\n\t\tthis.getWordDocument(this.props.webTextInput.text);\n\t}\n\n\tcomponentWillReceiveProps(nextProps: AppProps) {\n\t\tif (this.props.webTextInput && nextProps.webTextInput) {\n\t\t\tif (\n\t\t\t\tthis.props.webTextInput.forceLoadToggle !==\n\t\t\t\tnextProps.webTextInput.forceLoadToggle\n\t\t\t) {\n\t\t\t\tthis.props.setGraphCheckListMO(new GraphCheckListMO());\n\t\t\t\tthis.getWordDocument(nextProps.webTextInput.text);\n\t\t\t} else if (\n\t\t\t\tthis.props.webTextInput.refreshToggle !==\n\t\t\t\tnextProps.webTextInput.refreshToggle\n\t\t\t) {\n\t\t\t\tthis.getWordDocument(nextProps.webTextInput.text);\n\t\t\t}\n\t\t}\n\t}\n\n\tupdateChunkDetails = (chunkListMO: ChunkListMO) => {\n\t\tconst { chunkDetailsMO, setChunkDetailsMO } = this.props;\n\t\tif (chunkListMO.length === 1) {\n\t\t\tchunkDetailsMO.index = 0;\n\t\t\tchunkDetailsMO.isShow = true;\n\t\t}\n\t\tif (\n\t\t\tchunkListMO.isFewWordCount ||\n\t\t\tchunkListMO.length <= chunkDetailsMO.index\n\t\t) {\n\t\t\tchunkDetailsMO.isShow = false;\n\t\t\tchunkDetailsMO.data = new ChunkDataMO();\n\t\t\tsetChunkDetailsMO(chunkDetailsMO);\n\t\t} else if (chunkDetailsMO.isShow === true) {\n\t\t\tlet chunk: ChunkNodeMO | null = chunkListMO.getChunkAtIndex(\n\t\t\t\tchunkDetailsMO.index,\n\t\t\t);\n\t\t\tchunkDetailsMO.data = chunk !== null ? chunk.data : new ChunkDataMO();\n\t\t\tsetChunkDetailsMO(chunkDetailsMO);\n\t\t}\n\t\treturn chunkDetailsMO;\n\t};\n\n\tgetWordDocument = async (text: string) => {\n\t\tconst { setChunkListMO, setWordTypeScoreMO, exclusionsMO } = this.props;\n\t\ttext = text.replace(/\\r\\n|\\r/g, '\\n');\n\t\tlet paragraphs = text.split('\\n');\n\t\tlet nodePerProcess = ConfigManager.getNodePerProcess();\n\n\t\tlet newChunkListMO: ChunkListMO = new ChunkListMO();\n\t\tlet temp = null;\n\t\tdo {\n\t\t\ttemp = this.analysis.countEligibleWords(\n\t\t\t\tnewChunkListMO,\n\t\t\t\tparagraphs,\n\t\t\t\texclusionsMO,\n\t\t\t\tnodePerProcess,\n\t\t\t);\n\t\t\tsetChunkListMO(temp);\n\t\t\tthis.setState({\n\t\t\t\t...this.state,\n\t\t\t\tstatusInfo: `(${temp.nodeProcessed}/${temp.length})`,\n\t\t\t});\n\t\t} while (newChunkListMO.lastLoadedParagraphIndex !== paragraphs.length);\n\t\tlet tempChucked = this.analysis.splitIntoChunks(temp);\n\t\tlet chunkDetailsMO = this.updateChunkDetails(tempChucked);\n\t\tsetChunkListMO(tempChucked);\n\t\tsetWordTypeScoreMO(\n\t\t\tchunkDetailsMO.isShow && chunkDetailsMO.data != null\n\t\t\t\t? chunkDetailsMO.data.wordTypeScore\n\t\t\t\t: tempChucked.wordTypeScore,\n\t\t);\n\t};\n\n\tsetLoading = () => {\n\t\tthis.setState({ ...this.state, isLoad: true }, () => {\n\t\t\t//\n\t\t});\n\t};\n\n\tsetNextWordTypeScoreMO = (chunkDetailsMO: ChunkDetailsMO) => {\n\t\tif (chunkDetailsMO.isShow) {\n\t\t\tconst { setWordTypeScoreMO } = this.props;\n\t\t\tsetWordTypeScoreMO(chunkDetailsMO.data.wordTypeScore);\n\t\t}\n\t};\n\n\tmoveChunkHandler(index: number, chunkNodeMO: ChunkNodeMO) {\n\t\tconst { setChunkDetailsMO, chunkDetailsMO } = this.props;\n\t\tif (chunkDetailsMO.index === index) return;\n\t\tchunkDetailsMO.index = index;\n\n\t\t// making blank data to force scroll up to top to show chunk details at the beginning\n\t\tif (chunkDetailsMO.isShow) {\n\t\t\tchunkDetailsMO.data = new ChunkDataMO();\n\t\t\tsetChunkDetailsMO(chunkDetailsMO);\n\t\t\tsetTimeout(() => {\n\t\t\t\tchunkDetailsMO.data = chunkNodeMO.data;\n\t\t\t\tsetChunkDetailsMO(chunkDetailsMO);\n\t\t\t\tthis.setNextWordTypeScoreMO(chunkDetailsMO);\n\t\t\t}, 1);\n\t\t} else {\n\t\t\tchunkDetailsMO.data = chunkNodeMO.data;\n\t\t\tsetChunkDetailsMO(chunkDetailsMO);\n\t\t\tthis.setNextWordTypeScoreMO(chunkDetailsMO);\n\t\t}\n\t}\n\n\trenderDetails() {\n\t\treturn (\n\t\t\t<div>\n\t\t\t\t<ChunkDetails></ChunkDetails>\n\t\t\t</div>\n\t\t);\n\t}\n\n\trenderAppLayout() {\n\t\tconst {\n\t\t\tdownloadAddins: { showDownloadButton },\n\t\t} = this.props;\n\t\treturn (\n\t\t\t<div className=\"page-container no-print\">\n\t\t\t\t<div className=\"page-left\">\n\t\t\t\t\t<TextInput />\n\t\t\t\t</div>\n\t\t\t\t<div className=\"right-app-container\">\n\t\t\t\t\t<h1 className=\"test-header\">\n\t\t\t\t\t\t{showDownloadButton ? 'Your Result' : <span>&nbsp;</span>}\n\t\t\t\t\t</h1>\n\t\t\t\t\t<div className=\"right-app\">\n\t\t\t\t\t\t<div className=\"app-container\">\n\t\t\t\t\t\t\t<SettingsPane refreshAction={() => {}}></SettingsPane>\n\t\t\t\t\t\t\t<div className=\"app-header\">\n\t\t\t\t\t\t\t\t<WdCommandBar></WdCommandBar>\n\t\t\t\t\t\t\t\t<Graph></Graph>\n\t\t\t\t\t\t\t\t<Diagnosis></Diagnosis>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div className=\"app-content\">\n\t\t\t\t\t\t\t\t<ChunkDetails></ChunkDetails>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\trender() {\n\t\treturn this.renderAppLayout();\n\t}\n}\n\nconst mapDispatchToProps = (dispatch: any) => ({\n\tsetChunkDetailsMO: (chunkDetailsMO: any) => {\n\t\tdispatch({\n\t\t\ttype: types.SET_CHUNK_DETAILS,\n\t\t\tchunkDetailsMO: chunkDetailsMO,\n\t\t});\n\t},\n\tsetChunkListMO: (chunkListMO: any) => {\n\t\tdispatch({\n\t\t\ttype: types.SET_CHUNK_LIST,\n\t\t\tchunkListMO: chunkListMO,\n\t\t});\n\t},\n\tsetWordTypeScoreMO: (wordTypeScoreMO: any) => {\n\t\tdispatch({\n\t\t\ttype: types.SET_SCORE,\n\t\t\twordTypeScoreMO: wordTypeScoreMO,\n\t\t});\n\t},\n\tsetExclusionsMO: (exclusionsMO: any) => {\n\t\tdispatch({\n\t\t\ttype: types.SET_EXCLUSIONS,\n\t\t\texclusionsMO: exclusionsMO,\n\t\t});\n\t},\n\tsetThemeMO: (themeMO: any) => {\n\t\tdispatch({\n\t\t\ttype: types.SET_THEME,\n\t\t\tthemeMO: themeMO,\n\t\t});\n\t},\n\tsetGraphCheckListMO: (graphCheckListMO: any) => {\n\t\tdispatch({\n\t\t\ttype: types.SET_GRAPH_CHECK_LIST,\n\t\t\tgraphCheckListMO: graphCheckListMO,\n\t\t});\n\t},\n});\n\nconst mapStateToProps = ({\n\tchunkDetailsMO,\n\tchunkListMO,\n\twordTypeScoreMO,\n\texclusionsMO,\n\tthemeMO,\n\tisShowInfoPane,\n\tisShowSettingsPane,\n\twebTextInput,\n\tdownloadAddins,\n}: any) => ({\n\tchunkDetailsMO,\n\tchunkListMO,\n\twordTypeScoreMO,\n\texclusionsMO,\n\tthemeMO,\n\tisShowInfoPane,\n\tisShowSettingsPane,\n\twebTextInput,\n\tdownloadAddins,\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(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\twindow.location.hostname === 'localhost' ||\n\t\t// [::1] is the IPv6 localhost address.\n\t\twindow.location.hostname === '[::1]' ||\n\t\t// 127.0.0.0/8 are considered localhost for IPv4.\n\t\twindow.location.hostname.match(\n\t\t\t/^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/,\n\t\t),\n);\n\ntype Config = {\n\tonSuccess?: (registration: ServiceWorkerRegistration) => void;\n\tonUpdate?: (registration: ServiceWorkerRegistration) => void;\n};\n\nexport function register(config?: Config) {\n\tif (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n\t\t// The URL constructor is available in all browsers that support SW.\n\t\tconst publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n\t\tif (publicUrl.origin !== window.location.origin) {\n\t\t\t// Our service worker won't work if PUBLIC_URL is on a different origin\n\t\t\t// from what our page is served on. This might happen if a CDN is used to\n\t\t\t// serve assets; see https://github.com/facebook/create-react-app/issues/2374\n\t\t\treturn;\n\t\t}\n\n\t\twindow.addEventListener('load', () => {\n\t\t\tconst swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n\t\t\tif (isLocalhost) {\n\t\t\t\t// This is running on localhost. Let's check if a service worker still exists or not.\n\t\t\t\tcheckValidServiceWorker(swUrl, config);\n\n\t\t\t\t// Add some additional logging to localhost, pointing developers to the\n\t\t\t\t// service worker/PWA documentation.\n\t\t\t\tnavigator.serviceWorker.ready.then(() => {\n\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t'This web app is being served cache-first by a service ' +\n\t\t\t\t\t\t\t'worker. To learn more, visit https://bit.ly/CRA-PWA',\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// Is not localhost. Just register service worker\n\t\t\t\tregisterValidSW(swUrl, config);\n\t\t\t}\n\t\t});\n\t}\n}\n\nfunction registerValidSW(swUrl: string, config?: Config) {\n\tnavigator.serviceWorker\n\t\t.register(swUrl)\n\t\t.then((registration) => {\n\t\t\tregistration.onupdatefound = () => {\n\t\t\t\tconst installingWorker = registration.installing;\n\t\t\t\tif (installingWorker == null) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tinstallingWorker.onstatechange = () => {\n\t\t\t\t\tif (installingWorker.state === 'installed') {\n\t\t\t\t\t\tif (navigator.serviceWorker.controller) {\n\t\t\t\t\t\t\t// At this point, the updated precached content has been fetched,\n\t\t\t\t\t\t\t// but the previous service worker will still serve the older\n\t\t\t\t\t\t\t// content until all client tabs are closed.\n\t\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t\t'New content is available and will be used when all ' +\n\t\t\t\t\t\t\t\t\t'tabs for this page are closed. See https://bit.ly/CRA-PWA.',\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t// Execute callback\n\t\t\t\t\t\t\tif (config && config.onUpdate) {\n\t\t\t\t\t\t\t\tconfig.onUpdate(registration);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// At this point, everything has been precached.\n\t\t\t\t\t\t\t// It's the perfect time to display a\n\t\t\t\t\t\t\t// \"Content is cached for offline use.\" message.\n\t\t\t\t\t\t\tconsole.log('Content is cached for offline use.');\n\n\t\t\t\t\t\t\t// Execute callback\n\t\t\t\t\t\t\tif (config && config.onSuccess) {\n\t\t\t\t\t\t\t\tconfig.onSuccess(registration);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\t\t})\n\t\t.catch((error) => {\n\t\t\tconsole.error('Error during service worker registration:', error);\n\t\t});\n}\n\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\n\t// Check if the service worker can be found. If it can't reload the page.\n\tfetch(swUrl, {\n\t\theaders: { 'Service-Worker': 'script' },\n\t})\n\t\t.then((response) => {\n\t\t\t// Ensure service worker exists, and that we really are getting a JS file.\n\t\t\tconst contentType = response.headers.get('content-type');\n\t\t\tif (\n\t\t\t\tresponse.status === 404 ||\n\t\t\t\t(contentType != null && contentType.indexOf('javascript') === -1)\n\t\t\t) {\n\t\t\t\t// No service worker found. Probably a different app. Reload the page.\n\t\t\t\tnavigator.serviceWorker.ready.then((registration) => {\n\t\t\t\t\tregistration.unregister().then(() => {\n\t\t\t\t\t\twindow.location.reload();\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// Service worker found. Proceed as normal.\n\t\t\t\tregisterValidSW(swUrl, config);\n\t\t\t}\n\t\t})\n\t\t.catch(() => {\n\t\t\tconsole.log(\n\t\t\t\t'No internet connection found. App is running in offline mode.',\n\t\t\t);\n\t\t});\n}\n\nexport function unregister() {\n\tif ('serviceWorker' in navigator) {\n\t\tnavigator.serviceWorker.ready\n\t\t\t.then((registration) => {\n\t\t\t\tregistration.unregister();\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tconsole.error(error.message);\n\t\t\t});\n\t}\n}\n","import 'react-app-polyfill/ie9';\nimport 'react-app-polyfill/stable';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Provider } from 'react-redux';\nimport { store } from './store/store/store';\nimport './index.css';\nimport App from './taskpane/components/App';\nimport * as serviceWorker from './serviceWorker';\nimport { initializeIcons } from '@uifabric/icons';\ninitializeIcons();\nReactDOM.render(\n\t<Provider store={store}>\n\t\t<App />\n\t</Provider>,\n\tdocument.getElementById('root'),\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n"],"sourceRoot":""}