tocco-devcon 1.0.3 → 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/changelog.md +20 -0
  2. package/dist/0b923a43967ff893ec63b92dc4f19017.js +1 -0
  3. package/dist/25894751679e07fd95b21d0d3f6c8c8b.js +1 -0
  4. package/dist/54560f13b36626237959e93b7771a484.js +1 -0
  5. package/dist/58c35e5c73bbc1664bbd67c570342aa0.js +1 -0
  6. package/dist/637e363c105dce85c12fb99d7ef2fa7d.js +1 -0
  7. package/dist/8423f61a6b43ebee39273fd08e332d47.js +1 -0
  8. package/dist/8f5997c65fc8937aa89d15d9a7237f63.js +1 -0
  9. package/dist/a2d3450d9a39c72312a0afa486269a02.js +1 -0
  10. package/dist/a4d638b976f02f35740be031f996e088.js +1 -0
  11. package/dist/aa0619cbb003e1dd873d027494aa84c4.js +1 -0
  12. package/dist/cf26dd07f19bcb5b7efbf057a6cfeb8f.js +1 -0
  13. package/dist/cf9c7cbfc2b609b9ae59daeab82719c4.js +1 -0
  14. package/dist/chunk-314.e86335551ef008332d0b.js +1 -0
  15. package/dist/chunk-333.6e2b4bd987bb0a389434.js +1 -0
  16. package/dist/chunk-696.6412df2b10fa072eaf80.js +13 -0
  17. package/dist/chunk-82.d8e2f9fc408d506ceb28.js +13 -0
  18. package/dist/chunk-code-editor.d24ffee05722047a1a7d.js +1 -0
  19. package/dist/chunk-vendor-fontawesome.511607848878b714a005.js +7 -0
  20. package/dist/chunk-vendor-libphonenumber-js.d1823895c9e1013739f8.js +1 -0
  21. package/dist/e56fe7e8042772742953d0daa47cd621.js +1 -0
  22. package/dist/f9891d13237b59ce53f07874ab7a711b.js +1 -0
  23. package/dist/fc00657a30e4c8d53e47374ba0b1e8bf.js +1 -0
  24. package/dist/index.js +9 -10
  25. package/package.json +1 -1
  26. package/dist/18e63e724098792b95b076412a860636.js +0 -1
  27. package/dist/6fe3f0823e345813c2084b243cb6650b.js +0 -1
  28. package/dist/77dd68f6396b8ab4ce2c238d6ddb5354.js +0 -1
  29. package/dist/chunk-277.0af81c9b7e1548b99110.js +0 -2
  30. package/dist/chunk-277.0af81c9b7e1548b99110.js.map +0 -1
  31. package/dist/chunk-378.5ad4b80176f57ab52eed.js +0 -2
  32. package/dist/chunk-378.5ad4b80176f57ab52eed.js.map +0 -1
  33. package/dist/chunk-669.8a80f3127dd26f6aa3cc.js +0 -18
  34. package/dist/chunk-669.8a80f3127dd26f6aa3cc.js.map +0 -1
  35. package/dist/chunk-687.51f51a01b7ab160061d4.js +0 -2
  36. package/dist/chunk-687.51f51a01b7ab160061d4.js.map +0 -1
  37. package/dist/chunk-696.14f872b12be45b6b73b6.js +0 -2
  38. package/dist/chunk-696.14f872b12be45b6b73b6.js.map +0 -1
  39. package/dist/chunk-82.c072846d20587bb0bb2a.js +0 -2
  40. package/dist/chunk-82.c072846d20587bb0bb2a.js.map +0 -1
  41. package/dist/chunk-code-editor.a05c61137cf171c6945b.js +0 -2
  42. package/dist/chunk-code-editor.a05c61137cf171c6945b.js.map +0 -1
  43. package/dist/chunk-vendor-fontawesome.ba189cb93222b9d56bac.js +0 -6
  44. package/dist/chunk-vendor-libphonenumber-js.37b12356c360c7f4fa63.js +0 -1
  45. package/dist/index.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["webpack:///./packages/devcon/src/routes/dbrefactoring/modules/actions.js","webpack:///./packages/devcon/src/routes/dbrefactoring/components/StyledInput/StyledInput.js","webpack:///./packages/devcon/src/routes/dbrefactoring/components/DbRefactoringForm/Fragments.js","webpack:///./packages/devcon/src/routes/dbrefactoring/components/DbRefactoringForm/DbRefactoringForm.js","webpack:///./packages/devcon/src/routes/dbrefactoring/components/DbRefactoringForm/DbRefactoringFormContainer.js","webpack:///./packages/devcon/src/routes/dbrefactoring/components/UpgradeLanguageForm/UpgradeLanguageForm.js","webpack:///./packages/devcon/src/routes/dbrefactoring/components/UpgradeLanguageForm/UpgradeLanguageFormContainer.js","webpack:///./packages/devcon/src/routes/dbrefactoring/components/DbRefactoring/DbRefactoring.js","webpack:///./packages/devcon/src/routes/dbrefactoring/modules/reducer.js","webpack:///./packages/devcon/src/routes/dbrefactoring/modules/sagas.js","webpack:///./packages/devcon/src/routes/dbrefactoring/route.js","webpack:///./node_modules/react-router-dom/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack:///./node_modules/react-router-dom/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack:///./node_modules/react-router-dom/node_modules/@babel/runtime/helpers/esm/extends.js","webpack:///./node_modules/react-router-dom/node_modules/resolve-pathname/esm/resolve-pathname.js","webpack:///./node_modules/react-router-dom/node_modules/history/esm/history.js","webpack:///./node_modules/react-router-dom/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","webpack:///./node_modules/react-router-dom/esm/react-router-dom.js","webpack:///./packages/tocco-ui/src/Link/RouterLink.js","webpack:///./packages/devcon/src/routes/devcon/components/DevCon/StyledDevCon.js","webpack:///./packages/devcon/src/routes/devcon/components/DevCon/DevCon.js","webpack:///./packages/devcon/src/routes/devcon/route.js","webpack:///./packages/devcon/src/routes/log/components/LogTable/StyledLogEntry.js","webpack:///./packages/devcon/src/routes/log/components/LogTable/ExceptionDetails.js","webpack:///./packages/devcon/src/routes/log/components/LogTable/LogEntry.js","webpack:///./packages/devcon/src/routes/log/components/LogTable/LogTable.js","webpack:///./packages/devcon/src/routes/log/components/LogTable/LogTableContainer.js","webpack:///./packages/devcon/src/routes/log/components/LogView/LogView.js","webpack:///./packages/devcon/src/routes/log/modules/actions.js","webpack:///./packages/devcon/src/routes/log/modules/reducer.js","webpack:///./packages/devcon/src/routes/log/modules/sagas.js","webpack:///./packages/devcon/src/routes/log/route.js","webpack:///./packages/devcon/src/routes/modelvalidation/modules/actions.js","webpack:///./packages/devcon/src/routes/modelvalidation/components/CheckEvents/StyledCheckEvents.js","webpack:///./packages/devcon/src/routes/modelvalidation/components/CheckEvents/CheckEventGroup.js","webpack:///./packages/devcon/src/routes/modelvalidation/components/CheckEvents/CheckEvents.js","webpack:///./packages/devcon/src/routes/modelvalidation/components/CheckEvents/CheckEventsContainer.js","webpack:///./packages/devcon/src/routes/modelvalidation/components/ValidationProgress/StyledProgressBar.js","webpack:///./packages/devcon/src/routes/modelvalidation/components/ValidationProgress/ProgressBar.js","webpack:///./packages/devcon/src/routes/modelvalidation/components/ValidationProgress/ValidationProgress.js","webpack:///./packages/devcon/src/routes/modelvalidation/components/ValidationProgress/ValidationProgressContainer.js","webpack:///./packages/devcon/src/routes/modelvalidation/components/ModelValidationView/ModelValidationView.js","webpack:///./packages/devcon/src/routes/modelvalidation/modules/reducer.js","webpack:///./packages/devcon/src/routes/modelvalidation/components/ChangelogDialog/ChangelogDialog.js","webpack:///./packages/devcon/src/routes/modelvalidation/components/ChangelogDialog/ChangelogDialogContainer.js","webpack:///./packages/devcon/src/routes/modelvalidation/components/SqlDialog/SqlDialog.js","webpack:///./packages/devcon/src/routes/modelvalidation/components/SqlDialog/SqlDialogContainer.js","webpack:///./packages/devcon/src/routes/modelvalidation/modules/sagas.js","webpack:///./packages/devcon/src/routes/modelvalidation/route.js","webpack:///./packages/devcon/src/routes/sqllog/modules/actions.js","webpack:///./packages/tocco-ui/src/Range/rangeTypeMappings.js","webpack:///./packages/tocco-ui/src/Range/StyledRange.js","webpack:///./packages/tocco-ui/src/Range/Range.js","webpack:///./packages/devcon/src/routes/sqllog/components/LogForm/LogForm.js","webpack:///./packages/devcon/src/routes/sqllog/components/LogForm/LogFormContainer.js","webpack:///./packages/devcon/src/routes/sqllog/components/LogTable/StyledLogEntry.js","webpack:///./packages/devcon/src/routes/sqllog/components/LogTable/LogEntry.js","webpack:///./packages/devcon/src/routes/sqllog/components/LogTable/LogTable.js","webpack:///./packages/devcon/src/routes/sqllog/components/LogTable/LogTableContainer.js","webpack:///./packages/devcon/src/routes/sqllog/components/LogView/LogView.js","webpack:///./packages/devcon/src/routes/sqllog/modules/reducer.js","webpack:///./packages/devcon/src/routes/sqllog/modules/sagas.js","webpack:///./packages/devcon/src/routes/sqllog/route.js","webpack:///./packages/tocco-ui/src/CodeEditor/requestHelper.js","webpack:///./packages/tocco-ui/src/CodeEditor/TqlConstants.js","webpack:///./packages/tocco-ui/src/CodeEditor/TqlHighlighter.js","webpack:///./packages/tocco-ui/src/CodeEditor/FtlHighlighter.js","webpack:///./packages/tocco-ui/src/CodeEditor/TqlAutoCompleter.js","webpack:///./packages/tocco-ui/src/CodeEditor/ToccoFtlMode.js","webpack:///./packages/tocco-ui/src/CodeEditor/TqlMode.js","webpack:///./packages/tocco-ui/src/CodeEditor/AceEditor.js","webpack:///./packages/tocco-ui/src/EditableValue/StyledEditableValue.js","webpack:///./packages/tocco-ui/src/DatePicker/useDatePickr.js","webpack:///./packages/tocco-ui/src/EditableValue/typeEditors/StyledDatePicker.js","webpack:///./packages/tocco-ui/src/EditableValue/typeEditors/DatePicker.js","webpack:///./packages/tocco-ui/src/Icon/StyledComponents.js","webpack:///./packages/tocco-ui/src/Icon/FontAwesomeAdapter.js","webpack:///./packages/tocco-ui/src/Icon/ToccoIcons.js","webpack:///./packages/tocco-ui/src/Icon/Icon.js","webpack:///./packages/tocco-ui/src/LoadingSpinner/LoadingSpinner.js","webpack:///./packages/tocco-ui/src/Select/ClearIndicator.js","webpack:///./packages/tocco-ui/src/Select/DropdownIndicator.js","webpack:///./packages/tocco-ui/src/Select/IndicatorsContainer.js","webpack:///./packages/tocco-ui/src/Select/LoadingIndicator.js","webpack:///./packages/tocco-ui/src/Select/Menu.js","webpack:///./packages/tocco-ui/src/Select/MenuList.js","webpack:///./packages/tocco-ui/src/Select/ClickableWrapper.js","webpack:///./packages/tocco-ui/src/Select/MultiValueLabel.js","webpack:///./packages/tocco-ui/src/Select/SingleValue.js","webpack:///./packages/tocco-ui/src/Select/Select.js","webpack:///./packages/tocco-ui/src/SignalList/StyledSignalList.js","webpack:///./packages/tocco-ui/src/SignalList/SignalList.js","webpack:///./packages/tocco-ui/src/SignalList/StyledSignalListItem.js","webpack:///./packages/tocco-ui/src/SignalList/SignalListItem.js","webpack:///./packages/tocco-ui/src/SignalList/index.js","webpack:///./packages/tocco-ui/src/StatedValue/ErrorList.js","webpack:///./packages/tocco-ui/src/StatedValue/StyledStatedValue.js","webpack:///./packages/tocco-ui/src/StatedValue/StatedValue.js","webpack:///./packages/tocco-ui/src/utilStyles/colorMap.js"],"names":["unsetRunning","path","type","payload","StyledInput","styled","StyledInputCss","StyledInputWrapper","StyledEditableWrapperCss","fragments","selectedFragments","disabled","setFragmentSelected","map","fragment","key","id","checked","includes","onChange","e","target","Typography","for","label","version","modules","selectedModules","ignoreErrors","running","executeDbRefactoring","loadModules","loadFragments","setSelectedModules","setVersion","setIgnoreErrors","useEffect","length","onSubmit","preventDefault","StatedValue","hasValue","Select","options","value","isMulti","immutable","fixLabel","versionStr","replaceAll","Button","look","pending","mapActionCreators","selected","connect","state","dbRefactoring","languageUpgrade","DbRefactoringForm","language","executeLanguageUpgrade","setLanguage","UpgradeLanguageForm","setRunning","action","ACTION_HANDLERS","reducerUtil","filter","_","i","indexOf","initialState","mainSagas","requestExecution","pollExecution","dbRefactoringSelector","languageUpgradeSelector","all","takeLatest","call","rest","response","put","body","module","display","select","requestBody","statePath","method","spawn","headers","get","consoleLogger","notification","title","location","delay","toLowerCase","actions","container","DbRefactoring","reducers","handler","sagas","_setPrototypeOf","o","p","Object","setPrototypeOf","__proto__","_inheritsLoose","subClass","superClass","prototype","create","constructor","assign","arguments","source","hasOwnProperty","apply","this","isAbsolute","pathname","charAt","spliceOne","list","index","k","n","pop","to","from","undefined","hasTrailingSlash","toParts","split","fromParts","isToAbs","isFromAbs","mustEndAbs","concat","last","up","part","unshift","result","join","substr","addLeadingSlash","stripLeadingSlash","stripBasename","prefix","hasBasename","stripTrailingSlash","slice","createPath","search","hash","createLocation","currentLocation","hashIndex","searchIndex","parsePath","decodeURI","URIError","createTransitionManager","prompt","listeners","setPrompt","nextPrompt","confirmTransitionTo","getUserConfirmation","callback","appendListener","fn","isActive","listener","push","item","notifyListeners","_len","args","Array","_key","forEach","canUseDOM","window","document","createElement","getConfirmation","message","confirm","getHistoryState","history","createBrowserHistory","props","ua","globalHistory","canUseHistory","navigator","userAgent","needsHashChangeListener","_props","_props$forceRefresh","forceRefresh","_props$getUserConfirm","_props$keyLength","keyLength","basename","getDOMLocation","historyState","_ref","_window$location","createKey","Math","random","toString","transitionManager","setState","nextState","handlePopState","event","isExtraneousPopstateEvent","handlePop","handleHashChange","forceNextPop","ok","fromLocation","toLocation","toIndex","allKeys","fromIndex","delta","go","revertPop","initialLocation","createHref","listenerCount","checkDOMListeners","addEventListener","removeEventListener","isBlocked","href","pushState","prevIndex","nextKeys","replace","replaceState","goBack","goForward","block","unblock","listen","unlisten","HashPathCoders","hashbang","encodePath","decodePath","noslash","slash","stripHash","url","getHashPath","substring","replaceHashPath","createHashHistory","_props$hashType","hashType","_HashPathCoders$hashT","ignorePath","a","b","encodedPath","prevLocation","allPaths","lastIndexOf","baseTag","querySelector","getAttribute","pushHashPath","nextPaths","_objectWithoutPropertiesLoose","excluded","sourceKeys","keys","resolveToLocation","normalizeToLocation","forwardRefShim","C","forwardRef","LinkAnchor","forwardedRef","innerRef","navigate","_onClick","onClick","ex","defaultPrevented","button","metaKey","altKey","ctrlKey","shiftKey","isModifiedEvent","ref","Link","_ref2","_ref2$component","component","context","isDuplicateNavigation","forwardRefShim$1","forwardRef$1","_ref$ariaCurrent","ariaCurrent","_ref$activeClassName","activeClassName","activeStyle","classNameProp","className","exact","isActiveProp","locationProp","sensitive","strict","styleProp","style","escapedPath","match","classnames","joinClassnames","declareFont","theme","neutral","shadeColor","_get","StyledDevCon","scale","StyledNavigation","StyledRouterLink","RouterLink","routes","route","BORDER_COLOR","ERROR","StyledLogTable","StyledLogEntry","level","StyledMessage","expandable","StyledTime","StyledExceptionDetails","StyledDetailMessage","StyledStackTrace","exception","detailMessage","stackTrace","line","declaringClass","methodName","lineNumber","formatLine","entry","useState","expanded","setExpanded","Date","timestamp","toLocaleString","entries","log","LogTable","receiveEntry","data","uuid","initSocket","params","name","messageReceivedAction","socket","LogView","START_VALIDATION","SET_SQL","receiveMessage","setCurrent","total","currentIndex","currentName","setSql","sql","StyledCheckEventGroup","StyledGroupHeading","events","selection","setSelected","groupChecked","has","allSelected","checkEvents","generateSql","generateChangelog","size","sort","eventType","ids","modelValidation","CheckEvents","StyledProgressBar","StyledInnerProgress","percentage","StyledProgressText","getPercentage","round","getProgressText","startValidation","ValidationProgress","typeEvents","newTypeEvents","newCheckEvents","newSelection","Set","add","changelog","setChangelog","executeChangelog","close","EditableValue","readOnly","ChangelogDialog","executeSql","SqlDialog","selectionSelector","sqlSelector","takeEvery","num","model","uuids","statements","statement","status","ModelValidationView","datetimeFormat","datetime","toRange","moment","utc","format","isRangeValue","fromRange","local","getToOptions","fromValue","flatpickrOptions","minDate","getFromOptions","toValue","maxDate","date","StyledInputItemWrapper","StyledIconWrapper","StyledRange","StyledExtender","icon","hasRangeValue","exactEvents","useMemo","toEvents","fromEvents","typeMapping","rangeTypeMappings","baseType","_omit","Ball","getFromOrTo","getRangeValue","active","elapsed","setActive","setElapsed","fromText","toText","postPointDigits","fixedDecimalScale","sqlLog","LogForm","StyledStatementHeader","StyledStatement","StyledElapsedContainer","StyledElapsed","truncate","header","iMillis","filteredEntries","filterEntries","sendRequest","endpoint","request","extractBody","json","operators","atoms","types","placeholders","functions","implicitModel","commonWhere","token","regex","caseInsensitive","customRules","start","next","rootwhere","comparison","exists","existswhere","count","countwhere","order","$rules","_mergeWith","objValue","srcValue","_isArray","normalizeRules","ace","TextHighlightRules","ToccoFtlLangHighlightRules","qstring","defaultToken","ToccoFtlHighlightRules","tqlDirectives","startRules","embedRules","addRules","tqlEndRules","TqlHighlighter","mergingRules","HtmlHighlightRules","TokenIterator","getTokenType","isCurrentTokenOfType","iterator","getCurrentToken","findLastPathStep","stepBackward","modelToken","trim","stepBackUntilToken","handleParentheses","parenCount","findLastModelScope","findCurrentPath","stepForward","backtrack","stepBack","steps","lastStep","isArray","step","findCurrentModelScope","determineAvailablePaths","createIterator","baseModel","modelScope","determineModelScope","currentPath","relationSteps","sourceModel","resolvePart","buildResolveUrl","then","fields","relations","f","fieldName","r","relation","relationName","targetEntity","resolvePath","paths","pathCompletions","caption","meta","score","errors","loadAllAvailableModels","entities","models","modelCompletions","getAvailableFunctions","toUpperCase","defaultScore","getCompletions","editor","session","pos","createIteratorAtCurrentPosition","row","column","currentToken","previousToken","placeholder","ToccoFtlMode","HighlightRules","completer","TqlAutoCompleter","Mode","TqlMode","implicitModelName","snippedIdField","StyledEditor","modeMappings","groovy","GroovyMode","html","HtmlMode","xml","XmlMode","properties","PropertiesMode","JsonMode","htmlmixed","freemarkermixed","ftl","tql","less","LessMode","drools","DroolsMode","text","TextMode","setEditorConfiguration","mode","showGutter","editorOptions","_isString","Promise","resolve","_isObject","entityModel","field","moduleEntity","loadImplicitModel","getMode","editorMode","getSession","setMode","setTheme","v","setOption","renderer","setShowGutter","resize","containerReference","useRef","editorReference","editorConfig","aceEditor","current","setValue","on","getValue","destroy","css","StyledEditableWrapper","color","StyledEditableControlCss","StyledEditableControl","StyledEditableValue","localeMap","German","de","fr","French","it","Italian","handleOnChange","selectedDates","toISOString","useDatePickr","element","config","locale","flatpickr","prevFlatpickrOptions","react","setDate","redraw","JSON","stringify","calendarLocale","l10ns","en","localize","set","optionsDiff","js","shouldAppend","fontFamily","wrap","altInput","enableTime","defaultDate","appendTo","flatpickrInstance","calendarContainer","initializeFlatPickr","StyledDatePickerInput","StyledDatePickerValue","StyledDatePickerOuterWrapper","StyledDatePickerWrapper","focusFlatpickrInput","wrapper","inputElement","focus","withTheme","injectIntl","parseDate","formatDate","intl","initialized","setInitialized","altInputClass","clickOpens","val","handleOnBlur","parsed","focusInput","classList","handleConfirmKey","setTimeout","contains","stopPropagation","every","tabIndex","onFocus","open","onKeyDown","data-wrap","onBlur","data-input","placeholderText","aria-label","formatMessage","msg","onMouseDown","StyledFontAwesomeAdapterWrapper","library","faChevronDoubleLeft","faChevronDoubleRight","faChevronRight","faChevronLeft","faChevronUp","faChevronDown","faGlobe","faPlus","faFolder","faFolders","faStar","faStarSolid","faTimes","faArrowRight","faArrowLeft","faFile","faFileAlt","faFileCode","faFileCsv","faFileExcel","faFileExport","faFileImport","faFilePdf","faFileSpreadsheet","faIdBadge","faCheck","faExclamation","faCircle","faCheckCircle","faGoogle","faFacebook","faFacebookF","faDropbox","faMicrosoft","faJira","faApple","faBars","faExternalLink","faPhone","faMapMarked","faSearch","faCog","faInfo","faHorizontalRule","faSync","faSquareFull","faCompress","faBook","faSortUp","faSortDown","faQuestionCircle","faEllipsisV","faMinus","faTimesCircle","faInfoCircle","faExclamationCircle","faTrash","faList","faSquare","faBell","faArrowToBottom","faArrowToTop","faSquareSolid","faBox","faBoxOpen","faNewspaper","faComment","faSave","faPen","faPaperclip","faAddressCard","faMailBulk","faSitemap","faBarcodeAlt","faAbacus","faCalendarCheck","faPhoneLaptop","faTasks","faChalkboardTeacher","faUsers","faChevronDoubleDown","faChevronDoubleUp","faCube","faChartNetwork","faBolt","faLaptopCode","faUpload","faLock","faCode","faFilter","fixedWidth","fill","d","icons","logo","height","aria-hidden","role","xmlns","viewBox","office","enableBackground","ToccoIcons","propTypes","PropTypes","iconLibsFactories","fa","iconMap","toc","Icon","mapping","iconFactory","lib","fontSize","spin","faCircleNotch","innerProps","selectProps","isDisabled","menuIsOpen","c","visible","handleAdvancedSearch","openAdvancedSearch","handleCreate","openCreate","handlePropagation","openRemoteCreate","createPermission","wrapperHeight","isBottomAligned","children","onTouchEnd","onMouseUp","TetherPosition","attachment","targetAttachment","constraints","wrapperWidth","moreOptionsAvailable","moreOptionsAvailableText","reactSelectTheme","tooltips","loadTooltip","DetailLink","tooltip","content","ClickableWrapper","entityKey","Popover","dangerouslySetInnerHTML","__html","onMouseOver","ignoredAttributes","areEqual","prevProps","nextProps","diff","clean","_omitBy","Content","memo","linkComp","fetchOptions","isLoading","noResultsText","searchOptions","selectComponent","selectWrapper","throttledSearchOptions","useCallback","_throttle","trailing","clientWidth","clientHeight","getOptionLabel","option","getOptionValue","components","ClearIndicator","LoadingIndicator","DropdownIndicator","IndicatorsContainer","IndicatorSeparator","Menu","MenuList","MultiValueLabel","SingleValue","noOptionsMessage","closeMenuOnSelect","isSearchable","filterOption","isClearable","loadingMessage","menuShouldScrollIntoView","autoFocus","onInputChange","searchTerm","onMenuOpen","styles","reactSelectStyles","themeSelect","blurInputOnSelect","defaultProps","StyledUl","as","React","child","COLORS","design","StyledSignalListItem","StyledLi","condition","getColor","ICONS","SignalListItem","position","getIcon","List","Item","error","errorValues","idx","declareCursor","isDisplay","StyledLabelWrapper","StyledStatedValueLabel","fontWeight","dirty","lineHeight","colorizeText","secondaryPosition","signal","getTextColor","StyledStatedValueBox","colorizeBorder","isDirty","declareFocus","StyledHtmlFormatter","StyledStatedValueDescription","StyledStatedValueError","StyledStatedValueWrapper","description","mandatory","mandatoryTitle","touched","signalProp","showError","labelAlt","hasError","detectSignal","focused","getRef","htmlFor","shade0","shade1","shade2","transparent"],"mappings":"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","file":"chunk-code-editor.a05c61137cf171c6945b.js","sourcesContent":["export const LOAD_MODULES = 'dbrefactoring/LOAD_MODULES'\nexport const LOAD_FRAGMENTS = 'dbrefactoring/LOAD_FRAGMENTS'\nexport const SET_VERSION = 'dbrefactoring/SET_VERSION'\nexport const SET_FRAGMENTS = 'dbrefactoring/SET_FRAGMENTS'\nexport const SET_MODULES = 'dbrefactoring/SET_MODULES'\nexport const SET_SELECTED_MODULES = 'dbrefactoring/SET_SELECTED_MODULES'\nexport const SET_FRAGMENT_SELECTED = 'dbrefactoring/SET_FRAGMENT_SELECTED'\nexport const SET_IGNORE_ERRORS = 'dbrefactoring/SET_IGNORE_ERRORS'\nexport const EXECUTE_DB_REFACTORING = 'dbrefactoring/EXECUTE_DB_REFACTORING'\nexport const SET_LANGUAGE = 'dbrefactoring/SET_LANGUAGE'\nexport const EXECUTE_LANGUAGE_UPGRADE = 'dbrefactoring/EXECUTE_LANGUAGE_UPGRADE'\nexport const UNSET_RUNNING = 'dbrefactoring/UNSET_RUNNING'\n\nexport const loadModules = () => ({\n type: LOAD_MODULES\n})\nexport const loadFragments = () => ({\n type: LOAD_FRAGMENTS\n})\n\nexport const setVersion = version => ({\n type: SET_VERSION,\n payload: {\n version\n }\n})\n\nexport const setFragments = fragments => ({\n type: SET_FRAGMENTS,\n payload: {\n fragments\n }\n})\n\nexport const setModules = modules => ({\n type: SET_MODULES,\n payload: {\n modules\n }\n})\n\nexport const setSelectedModules = selectedModules => ({\n type: SET_SELECTED_MODULES,\n payload: {\n selectedModules\n }\n})\n\nexport const setFragmentSelected = (fragment, selected) => ({\n type: SET_FRAGMENT_SELECTED,\n payload: {\n fragment,\n selected\n }\n})\n\nexport const setIgnoreErrors = ignoreErrors => ({\n type: SET_IGNORE_ERRORS,\n payload: {\n ignoreErrors\n }\n})\n\nexport const executeDbRefactoring = () => ({\n type: EXECUTE_DB_REFACTORING\n})\n\nexport const setLanguage = language => ({\n type: SET_LANGUAGE,\n payload: {\n language\n }\n})\n\nexport const executeLanguageUpgrade = () => ({\n type: EXECUTE_LANGUAGE_UPGRADE\n})\n\nexport const unsetRunning = path => ({\n type: UNSET_RUNNING,\n payload: {\n path\n }\n})\n","import styled from 'styled-components'\nimport {StyledInputCss, StyledEditableWrapperCss} from 'tocco-ui'\n\nexport const StyledInput = styled.input`\n && {\n ${StyledInputCss}\n }\n`\n\nexport const StyledInputWrapper = styled.div`\n && {\n ${StyledEditableWrapperCss}\n }\n`\n","import PropTypes from 'prop-types'\nimport React from 'react'\nimport {Typography} from 'tocco-ui'\n\nconst Fragments = ({fragments, selectedFragments, disabled, setFragmentSelected}) => {\n const handleChange = id => e => {\n setFragmentSelected(id, e.target.checked)\n }\n\n return (\n <>\n {fragments.map(fragment => (\n <div key={fragment.id}>\n <input\n type=\"checkbox\"\n id={fragment.id}\n checked={selectedFragments.includes(fragment.id)}\n onChange={handleChange(fragment.id)}\n disabled={disabled}\n />\n <Typography.Label for={fragment.id}>{fragment.label}</Typography.Label>\n </div>\n ))}\n </>\n )\n}\n\nFragments.propTypes = {\n fragments: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string,\n label: PropTypes.string\n })\n ).isRequired,\n selectedFragments: PropTypes.arrayOf(PropTypes.string).isRequired,\n disabled: PropTypes.bool,\n setFragmentSelected: PropTypes.func.isRequired\n}\n\nexport default Fragments\n","import PropTypes from 'prop-types'\nimport React, {useEffect} from 'react'\nimport {StatedValue, Select, Button} from 'tocco-ui'\n\nimport {StyledInput, StyledInputWrapper} from '../StyledInput'\nimport Fragments from './Fragments'\n\nconst DbRefactoringForm = ({\n version,\n modules,\n selectedModules,\n fragments,\n selectedFragments,\n ignoreErrors,\n running,\n disabled,\n executeDbRefactoring,\n loadModules,\n loadFragments,\n setSelectedModules,\n setFragmentSelected,\n setVersion,\n setIgnoreErrors\n}) => {\n // call only on mount\n useEffect(() => {\n if (modules.length === 0) {\n loadModules()\n }\n if (fragments.length === 0) {\n loadFragments()\n }\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n const handleVersionChange = e => {\n const versionStr = e.target.value.replaceAll(/[^\\d\\\\.]/g, '')\n setVersion(versionStr)\n }\n\n const handleIgnoreErrorsChange = e => {\n setIgnoreErrors(e.target.checked)\n }\n\n const handleSubmit = e => {\n e.preventDefault()\n executeDbRefactoring()\n }\n\n return (\n <form onSubmit={handleSubmit}>\n <StatedValue label=\"Modules (none selected => all)\" hasValue={selectedModules.length > 0}>\n <Select options={modules} value={selectedModules} onChange={setSelectedModules} isMulti immutable={disabled} />\n </StatedValue>\n <StatedValue label=\"Fragments\" fixLabel>\n <Fragments\n fragments={fragments}\n selectedFragments={selectedFragments}\n disabled={disabled}\n setFragmentSelected={setFragmentSelected}\n />\n </StatedValue>\n <StatedValue label=\"Version\" hasValue={version.length > 0}>\n <StyledInputWrapper>\n <StyledInput value={version} onChange={handleVersionChange} disabled={disabled} />\n </StyledInputWrapper>\n </StatedValue>\n <StatedValue label=\"Ignore errors\" fixLabel>\n <input type=\"checkbox\" checked={ignoreErrors} onChange={handleIgnoreErrorsChange} disabled={disabled} />\n </StatedValue>\n <Button type=\"submit\" label=\"Execute\" look=\"raised\" pending={running} disabled={disabled} />\n </form>\n )\n}\n\nDbRefactoringForm.propTypes = {\n version: PropTypes.string.isRequired,\n modules: PropTypes.arrayOf(\n PropTypes.shape({\n key: PropTypes.string,\n display: PropTypes.string\n })\n ).isRequired,\n selectedModules: PropTypes.arrayOf(\n PropTypes.shape({\n key: PropTypes.string,\n display: PropTypes.string\n })\n ).isRequired,\n fragments: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string,\n label: PropTypes.string\n })\n ).isRequired,\n selectedFragments: PropTypes.arrayOf(PropTypes.string).isRequired,\n ignoreErrors: PropTypes.bool.isRequired,\n running: PropTypes.bool.isRequired,\n disabled: PropTypes.bool.isRequired,\n executeDbRefactoring: PropTypes.func.isRequired,\n loadModules: PropTypes.func.isRequired,\n loadFragments: PropTypes.func.isRequired,\n setSelectedModules: PropTypes.func.isRequired,\n setFragmentSelected: PropTypes.func.isRequired,\n setVersion: PropTypes.func.isRequired,\n setIgnoreErrors: PropTypes.func.isRequired\n}\n\nexport default DbRefactoringForm\n","import {connect} from 'react-redux'\n\nimport {\n loadModules,\n loadFragments,\n setSelectedModules,\n setFragmentSelected,\n setVersion,\n setIgnoreErrors,\n executeDbRefactoring\n} from '../../modules/actions'\nimport DbRefactoringForm from './DbRefactoringForm'\n\nconst mapStateToProps = state => {\n const {dbRefactoring, languageUpgrade} = state.dbRefactoring\n\n return {\n version: dbRefactoring.version,\n modules: dbRefactoring.modules,\n selectedModules: dbRefactoring.selectedModules,\n fragments: dbRefactoring.fragments,\n selectedFragments: dbRefactoring.selectedFragments,\n ignoreErrors: dbRefactoring.ignoreErrors,\n running: dbRefactoring.running,\n disabled: dbRefactoring.running || languageUpgrade.running\n }\n}\n\nconst mapActionCreators = {\n loadModules,\n loadFragments,\n setSelectedModules,\n setFragmentSelected,\n setVersion,\n setIgnoreErrors,\n executeDbRefactoring\n}\n\nexport default connect(mapStateToProps, mapActionCreators)(DbRefactoringForm)\n","import PropTypes from 'prop-types'\nimport React from 'react'\nimport {StatedValue, Button} from 'tocco-ui'\n\nimport {StyledInput, StyledInputWrapper} from '../StyledInput'\n\nconst UpgradeLanguageForm = ({language, running, disabled, executeLanguageUpgrade, setLanguage}) => {\n const handleLanguageChange = e => {\n setLanguage(e.target.value)\n }\n\n const handleSubmit = e => {\n e.preventDefault()\n executeLanguageUpgrade()\n }\n\n return (\n <form onSubmit={handleSubmit}>\n <StatedValue label=\"Language\" hasValue={language.length > 0}>\n <StyledInputWrapper>\n <StyledInput value={language} onChange={handleLanguageChange} disabled={disabled} />\n </StyledInputWrapper>\n </StatedValue>\n <Button type=\"submit\" label=\"Execute language upgrade\" look=\"raised\" pending={running} disabled={disabled} />\n </form>\n )\n}\n\nUpgradeLanguageForm.propTypes = {\n language: PropTypes.string.isRequired,\n running: PropTypes.bool.isRequired,\n disabled: PropTypes.bool.isRequired,\n executeLanguageUpgrade: PropTypes.func.isRequired,\n setLanguage: PropTypes.func.isRequired\n}\n\nexport default UpgradeLanguageForm\n","import {connect} from 'react-redux'\n\nimport {setLanguage, executeLanguageUpgrade} from '../../modules/actions'\nimport UpgradeLanguageForm from './UpgradeLanguageForm'\n\nconst mapStateToProps = state => {\n const {dbRefactoring, languageUpgrade} = state.dbRefactoring\n\n return {\n language: languageUpgrade.language,\n running: languageUpgrade.running,\n disabled: languageUpgrade.running || dbRefactoring.running\n }\n}\n\nconst mapActionCreators = {\n setLanguage,\n executeLanguageUpgrade\n}\n\nexport default connect(mapStateToProps, mapActionCreators)(UpgradeLanguageForm)\n","import React from 'react'\nimport {Typography} from 'tocco-ui'\n\nimport DbRefactoringForm from '../DbRefactoringForm'\nimport UpgradeLanguageForm from '../UpgradeLanguageForm'\n\nconst DbRefactoring = () => (\n <>\n <Typography.H1>Database Refactoring</Typography.H1>\n <DbRefactoringForm />\n <Typography.H1>Language Upgrade</Typography.H1>\n <UpgradeLanguageForm />\n </>\n)\n\nexport default DbRefactoring\n","import {reducer as reducerUtil} from 'tocco-util'\n\nimport * as actions from './actions'\n\nconst handleSetFragments = (state, action) => ({\n ...state,\n dbRefactoring: {\n ...state.dbRefactoring,\n fragments: action.payload.fragments,\n selectedFragments: action.payload.fragments\n .filter(fragment => fragment.selected === true)\n .map(fragment => fragment.id)\n }\n})\n\nconst handleSetFragmentSelected = (state, action) => ({\n ...state,\n dbRefactoring: {\n ...state.dbRefactoring,\n selectedFragments:\n action.payload.selected === true\n ? [...state.dbRefactoring.selectedFragments, action.payload.fragment]\n : state.dbRefactoring.selectedFragments.filter(\n (_, i) => i !== state.dbRefactoring.selectedFragments.indexOf(action.payload.fragment)\n )\n }\n})\n\nconst setRunning = (running, path) => (state, action) => ({\n ...state,\n [path || action.payload.path]: {\n ...state[path || action.payload.path],\n running\n }\n})\n\nconst ACTION_HANDLERS = {\n [actions.SET_VERSION]: reducerUtil.singleTransferReducer('version', 'dbRefactoring'),\n [actions.SET_MODULES]: reducerUtil.singleTransferReducer('modules', 'dbRefactoring'),\n [actions.SET_SELECTED_MODULES]: reducerUtil.singleTransferReducer('selectedModules', 'dbRefactoring'),\n [actions.SET_IGNORE_ERRORS]: reducerUtil.singleTransferReducer('ignoreErrors', 'dbRefactoring'),\n [actions.SET_FRAGMENTS]: handleSetFragments,\n [actions.SET_FRAGMENT_SELECTED]: handleSetFragmentSelected,\n [actions.EXECUTE_DB_REFACTORING]: setRunning(true, 'dbRefactoring'),\n [actions.UNSET_RUNNING]: setRunning(false),\n [actions.SET_LANGUAGE]: reducerUtil.singleTransferReducer('language', 'languageUpgrade'),\n [actions.EXECUTE_LANGUAGE_UPGRADE]: setRunning(true, 'languageUpgrade')\n}\n\nconst initialState = {\n dbRefactoring: {\n version: '',\n modules: [],\n selectedModules: [],\n fragments: [],\n selectedFragments: [],\n ignoreErrors: false,\n running: false\n },\n languageUpgrade: {\n language: '',\n running: false\n }\n}\n\nexport default function reducer(state = initialState, action) {\n const handler = ACTION_HANDLERS[action.type]\n return handler ? handler(state, action) : state\n}\n","import {takeLatest, all, call, put, select, delay, spawn} from 'redux-saga/effects'\nimport {rest, notification} from 'tocco-app-extensions'\nimport {consoleLogger} from 'tocco-util'\n\nimport * as actions from './actions'\n\nconst dbRefactoringSelector = state => state.dbRefactoring.dbRefactoring\nconst languageUpgradeSelector = state => state.dbRefactoring.languageUpgrade\n\nexport default function* mainSagas() {\n yield all([\n takeLatest(actions.LOAD_MODULES, loadModules),\n takeLatest(actions.LOAD_FRAGMENTS, loadFragments),\n takeLatest(actions.EXECUTE_DB_REFACTORING, executeDbRefactoring),\n takeLatest(actions.EXECUTE_LANGUAGE_UPGRADE, executeLanguageUpgrade)\n ])\n}\n\nexport function* loadModules() {\n const response = yield call(rest.requestSaga, 'devcon/dbrefactoring/modules')\n yield put(\n actions.setModules(\n response.body.map(module => ({\n key: module,\n display: module\n }))\n )\n )\n}\n\nexport function* loadFragments() {\n const response = yield call(rest.requestSaga, 'devcon/dbrefactoring/fragments')\n yield put(actions.setFragments(response.body))\n}\n\nexport function* executeDbRefactoring() {\n const {selectedModules, selectedFragments, version, ignoreErrors} = yield select(dbRefactoringSelector)\n\n const requestBody = {\n modules: selectedModules.map(module => module.key),\n fragments: selectedFragments,\n version,\n ignoreErrors\n }\n\n yield call(requestExecution, requestBody, 'dbRefactoring')\n}\n\nexport function* executeLanguageUpgrade() {\n const {language} = yield select(languageUpgradeSelector)\n\n const requestBody = {\n language\n }\n\n yield call(requestExecution, requestBody, 'languageUpgrade')\n}\n\nexport function* requestExecution(requestBody, statePath) {\n const options = {\n method: 'POST',\n body: requestBody\n }\n\n try {\n const response = yield call(rest.requestSaga, 'devcon/dbrefactoring/executions', options)\n yield spawn(pollExecution, response.headers.get('Location'), statePath)\n } catch (e) {\n consoleLogger.logError('DB refactoring execution failed', e)\n yield put(\n notification.toaster({\n type: 'error',\n title: 'DB refactoring execution failed'\n })\n )\n }\n}\n\nexport function* pollExecution(location, statePath) {\n yield delay(3000)\n const response = yield call(rest.requestSaga, location)\n const state = response.body.state.toLowerCase()\n if (state === 'completed') {\n yield put(actions.unsetRunning(statePath))\n yield put(\n notification.toaster({\n type: 'success',\n title: 'DB refactoring execution completed'\n })\n )\n } else if (state === 'failed') {\n yield put(actions.unsetRunning(statePath))\n yield put(\n notification.toaster({\n type: 'error',\n title: 'DB refactoring execution failed'\n })\n )\n } else {\n yield call(pollExecution, location)\n }\n}\n","import DbRefactoring from './components/DbRefactoring'\nimport dbRefactoring from './modules'\nimport sagas from './modules/sagas'\n\nexport default {\n container: DbRefactoring,\n reducers: {\n dbRefactoring\n },\n sagas: [sagas]\n}\n","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}","export default function _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}","function isAbsolute(pathname) {\n return pathname.charAt(0) === '/';\n}\n\n// About 1.5x faster than the two-arg version of Array#splice()\nfunction spliceOne(list, index) {\n for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1) {\n list[i] = list[k];\n }\n\n list.pop();\n}\n\n// This implementation is based heavily on node's url.parse\nfunction resolvePathname(to, from) {\n if (from === undefined) from = '';\n\n var toParts = (to && to.split('/')) || [];\n var fromParts = (from && from.split('/')) || [];\n\n var isToAbs = to && isAbsolute(to);\n var isFromAbs = from && isAbsolute(from);\n var mustEndAbs = isToAbs || isFromAbs;\n\n if (to && isAbsolute(to)) {\n // to is absolute\n fromParts = toParts;\n } else if (toParts.length) {\n // to is relative, drop the filename\n fromParts.pop();\n fromParts = fromParts.concat(toParts);\n }\n\n if (!fromParts.length) return '/';\n\n var hasTrailingSlash;\n if (fromParts.length) {\n var last = fromParts[fromParts.length - 1];\n hasTrailingSlash = last === '.' || last === '..' || last === '';\n } else {\n hasTrailingSlash = false;\n }\n\n var up = 0;\n for (var i = fromParts.length; i >= 0; i--) {\n var part = fromParts[i];\n\n if (part === '.') {\n spliceOne(fromParts, i);\n } else if (part === '..') {\n spliceOne(fromParts, i);\n up++;\n } else if (up) {\n spliceOne(fromParts, i);\n up--;\n }\n }\n\n if (!mustEndAbs) for (; up--; up) fromParts.unshift('..');\n\n if (\n mustEndAbs &&\n fromParts[0] !== '' &&\n (!fromParts[0] || !isAbsolute(fromParts[0]))\n )\n fromParts.unshift('');\n\n var result = fromParts.join('/');\n\n if (hasTrailingSlash && result.substr(-1) !== '/') result += '/';\n\n return result;\n}\n\nexport default resolvePathname;\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport resolvePathname from 'resolve-pathname';\nimport valueEqual from 'value-equal';\nimport warning from 'tiny-warning';\nimport invariant from 'tiny-invariant';\n\nfunction addLeadingSlash(path) {\n return path.charAt(0) === '/' ? path : '/' + path;\n}\nfunction stripLeadingSlash(path) {\n return path.charAt(0) === '/' ? path.substr(1) : path;\n}\nfunction hasBasename(path, prefix) {\n return path.toLowerCase().indexOf(prefix.toLowerCase()) === 0 && '/?#'.indexOf(path.charAt(prefix.length)) !== -1;\n}\nfunction stripBasename(path, prefix) {\n return hasBasename(path, prefix) ? path.substr(prefix.length) : path;\n}\nfunction stripTrailingSlash(path) {\n return path.charAt(path.length - 1) === '/' ? path.slice(0, -1) : path;\n}\nfunction parsePath(path) {\n var pathname = path || '/';\n var search = '';\n var hash = '';\n var hashIndex = pathname.indexOf('#');\n\n if (hashIndex !== -1) {\n hash = pathname.substr(hashIndex);\n pathname = pathname.substr(0, hashIndex);\n }\n\n var searchIndex = pathname.indexOf('?');\n\n if (searchIndex !== -1) {\n search = pathname.substr(searchIndex);\n pathname = pathname.substr(0, searchIndex);\n }\n\n return {\n pathname: pathname,\n search: search === '?' ? '' : search,\n hash: hash === '#' ? '' : hash\n };\n}\nfunction createPath(location) {\n var pathname = location.pathname,\n search = location.search,\n hash = location.hash;\n var path = pathname || '/';\n if (search && search !== '?') path += search.charAt(0) === '?' ? search : \"?\" + search;\n if (hash && hash !== '#') path += hash.charAt(0) === '#' ? hash : \"#\" + hash;\n return path;\n}\n\nfunction createLocation(path, state, key, currentLocation) {\n var location;\n\n if (typeof path === 'string') {\n // Two-arg form: push(path, state)\n location = parsePath(path);\n location.state = state;\n } else {\n // One-arg form: push(location)\n location = _extends({}, path);\n if (location.pathname === undefined) location.pathname = '';\n\n if (location.search) {\n if (location.search.charAt(0) !== '?') location.search = '?' + location.search;\n } else {\n location.search = '';\n }\n\n if (location.hash) {\n if (location.hash.charAt(0) !== '#') location.hash = '#' + location.hash;\n } else {\n location.hash = '';\n }\n\n if (state !== undefined && location.state === undefined) location.state = state;\n }\n\n try {\n location.pathname = decodeURI(location.pathname);\n } catch (e) {\n if (e instanceof URIError) {\n throw new URIError('Pathname \"' + location.pathname + '\" could not be decoded. ' + 'This is likely caused by an invalid percent-encoding.');\n } else {\n throw e;\n }\n }\n\n if (key) location.key = key;\n\n if (currentLocation) {\n // Resolve incomplete/relative pathname relative to current location.\n if (!location.pathname) {\n location.pathname = currentLocation.pathname;\n } else if (location.pathname.charAt(0) !== '/') {\n location.pathname = resolvePathname(location.pathname, currentLocation.pathname);\n }\n } else {\n // When there is no prior location and pathname is empty, set it to /\n if (!location.pathname) {\n location.pathname = '/';\n }\n }\n\n return location;\n}\nfunction locationsAreEqual(a, b) {\n return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash && a.key === b.key && valueEqual(a.state, b.state);\n}\n\nfunction createTransitionManager() {\n var prompt = null;\n\n function setPrompt(nextPrompt) {\n process.env.NODE_ENV !== \"production\" ? warning(prompt == null, 'A history supports only one prompt at a time') : void 0;\n prompt = nextPrompt;\n return function () {\n if (prompt === nextPrompt) prompt = null;\n };\n }\n\n function confirmTransitionTo(location, action, getUserConfirmation, callback) {\n // TODO: If another transition starts while we're still confirming\n // the previous one, we may end up in a weird state. Figure out the\n // best way to handle this.\n if (prompt != null) {\n var result = typeof prompt === 'function' ? prompt(location, action) : prompt;\n\n if (typeof result === 'string') {\n if (typeof getUserConfirmation === 'function') {\n getUserConfirmation(result, callback);\n } else {\n process.env.NODE_ENV !== \"production\" ? warning(false, 'A history needs a getUserConfirmation function in order to use a prompt message') : void 0;\n callback(true);\n }\n } else {\n // Return false from a transition hook to cancel the transition.\n callback(result !== false);\n }\n } else {\n callback(true);\n }\n }\n\n var listeners = [];\n\n function appendListener(fn) {\n var isActive = true;\n\n function listener() {\n if (isActive) fn.apply(void 0, arguments);\n }\n\n listeners.push(listener);\n return function () {\n isActive = false;\n listeners = listeners.filter(function (item) {\n return item !== listener;\n });\n };\n }\n\n function notifyListeners() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n listeners.forEach(function (listener) {\n return listener.apply(void 0, args);\n });\n }\n\n return {\n setPrompt: setPrompt,\n confirmTransitionTo: confirmTransitionTo,\n appendListener: appendListener,\n notifyListeners: notifyListeners\n };\n}\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\nfunction getConfirmation(message, callback) {\n callback(window.confirm(message)); // eslint-disable-line no-alert\n}\n/**\n * Returns true if the HTML5 history API is supported. Taken from Modernizr.\n *\n * https://github.com/Modernizr/Modernizr/blob/master/LICENSE\n * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js\n * changed to avoid false negatives for Windows Phones: https://github.com/reactjs/react-router/issues/586\n */\n\nfunction supportsHistory() {\n var ua = window.navigator.userAgent;\n if ((ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && ua.indexOf('Mobile Safari') !== -1 && ua.indexOf('Chrome') === -1 && ua.indexOf('Windows Phone') === -1) return false;\n return window.history && 'pushState' in window.history;\n}\n/**\n * Returns true if browser fires popstate on hash change.\n * IE10 and IE11 do not.\n */\n\nfunction supportsPopStateOnHashChange() {\n return window.navigator.userAgent.indexOf('Trident') === -1;\n}\n/**\n * Returns false if using go(n) with hash history causes a full page reload.\n */\n\nfunction supportsGoWithoutReloadUsingHash() {\n return window.navigator.userAgent.indexOf('Firefox') === -1;\n}\n/**\n * Returns true if a given popstate event is an extraneous WebKit event.\n * Accounts for the fact that Chrome on iOS fires real popstate events\n * containing undefined state when pressing the back button.\n */\n\nfunction isExtraneousPopstateEvent(event) {\n return event.state === undefined && navigator.userAgent.indexOf('CriOS') === -1;\n}\n\nvar PopStateEvent = 'popstate';\nvar HashChangeEvent = 'hashchange';\n\nfunction getHistoryState() {\n try {\n return window.history.state || {};\n } catch (e) {\n // IE 11 sometimes throws when accessing window.history.state\n // See https://github.com/ReactTraining/history/pull/289\n return {};\n }\n}\n/**\n * Creates a history object that uses the HTML5 history API including\n * pushState, replaceState, and the popstate event.\n */\n\n\nfunction createBrowserHistory(props) {\n if (props === void 0) {\n props = {};\n }\n\n !canUseDOM ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Browser history needs a DOM') : invariant(false) : void 0;\n var globalHistory = window.history;\n var canUseHistory = supportsHistory();\n var needsHashChangeListener = !supportsPopStateOnHashChange();\n var _props = props,\n _props$forceRefresh = _props.forceRefresh,\n forceRefresh = _props$forceRefresh === void 0 ? false : _props$forceRefresh,\n _props$getUserConfirm = _props.getUserConfirmation,\n getUserConfirmation = _props$getUserConfirm === void 0 ? getConfirmation : _props$getUserConfirm,\n _props$keyLength = _props.keyLength,\n keyLength = _props$keyLength === void 0 ? 6 : _props$keyLength;\n var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : '';\n\n function getDOMLocation(historyState) {\n var _ref = historyState || {},\n key = _ref.key,\n state = _ref.state;\n\n var _window$location = window.location,\n pathname = _window$location.pathname,\n search = _window$location.search,\n hash = _window$location.hash;\n var path = pathname + search + hash;\n process.env.NODE_ENV !== \"production\" ? warning(!basename || hasBasename(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path \"' + path + '\" to begin with \"' + basename + '\".') : void 0;\n if (basename) path = stripBasename(path, basename);\n return createLocation(path, state, key);\n }\n\n function createKey() {\n return Math.random().toString(36).substr(2, keyLength);\n }\n\n var transitionManager = createTransitionManager();\n\n function setState(nextState) {\n _extends(history, nextState);\n\n history.length = globalHistory.length;\n transitionManager.notifyListeners(history.location, history.action);\n }\n\n function handlePopState(event) {\n // Ignore extraneous popstate events in WebKit.\n if (isExtraneousPopstateEvent(event)) return;\n handlePop(getDOMLocation(event.state));\n }\n\n function handleHashChange() {\n handlePop(getDOMLocation(getHistoryState()));\n }\n\n var forceNextPop = false;\n\n function handlePop(location) {\n if (forceNextPop) {\n forceNextPop = false;\n setState();\n } else {\n var action = 'POP';\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({\n action: action,\n location: location\n });\n } else {\n revertPop(location);\n }\n });\n }\n }\n\n function revertPop(fromLocation) {\n var toLocation = history.location; // TODO: We could probably make this more reliable by\n // keeping a list of keys we've seen in sessionStorage.\n // Instead, we just default to 0 for keys we don't know.\n\n var toIndex = allKeys.indexOf(toLocation.key);\n if (toIndex === -1) toIndex = 0;\n var fromIndex = allKeys.indexOf(fromLocation.key);\n if (fromIndex === -1) fromIndex = 0;\n var delta = toIndex - fromIndex;\n\n if (delta) {\n forceNextPop = true;\n go(delta);\n }\n }\n\n var initialLocation = getDOMLocation(getHistoryState());\n var allKeys = [initialLocation.key]; // Public interface\n\n function createHref(location) {\n return basename + createPath(location);\n }\n\n function push(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n var action = 'PUSH';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var href = createHref(location);\n var key = location.key,\n state = location.state;\n\n if (canUseHistory) {\n globalHistory.pushState({\n key: key,\n state: state\n }, null, href);\n\n if (forceRefresh) {\n window.location.href = href;\n } else {\n var prevIndex = allKeys.indexOf(history.location.key);\n var nextKeys = allKeys.slice(0, prevIndex + 1);\n nextKeys.push(location.key);\n allKeys = nextKeys;\n setState({\n action: action,\n location: location\n });\n }\n } else {\n process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Browser history cannot push state in browsers that do not support HTML5 history') : void 0;\n window.location.href = href;\n }\n });\n }\n\n function replace(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n var action = 'REPLACE';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var href = createHref(location);\n var key = location.key,\n state = location.state;\n\n if (canUseHistory) {\n globalHistory.replaceState({\n key: key,\n state: state\n }, null, href);\n\n if (forceRefresh) {\n window.location.replace(href);\n } else {\n var prevIndex = allKeys.indexOf(history.location.key);\n if (prevIndex !== -1) allKeys[prevIndex] = location.key;\n setState({\n action: action,\n location: location\n });\n }\n } else {\n process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Browser history cannot replace state in browsers that do not support HTML5 history') : void 0;\n window.location.replace(href);\n }\n });\n }\n\n function go(n) {\n globalHistory.go(n);\n }\n\n function goBack() {\n go(-1);\n }\n\n function goForward() {\n go(1);\n }\n\n var listenerCount = 0;\n\n function checkDOMListeners(delta) {\n listenerCount += delta;\n\n if (listenerCount === 1 && delta === 1) {\n window.addEventListener(PopStateEvent, handlePopState);\n if (needsHashChangeListener) window.addEventListener(HashChangeEvent, handleHashChange);\n } else if (listenerCount === 0) {\n window.removeEventListener(PopStateEvent, handlePopState);\n if (needsHashChangeListener) window.removeEventListener(HashChangeEvent, handleHashChange);\n }\n }\n\n var isBlocked = false;\n\n function block(prompt) {\n if (prompt === void 0) {\n prompt = false;\n }\n\n var unblock = transitionManager.setPrompt(prompt);\n\n if (!isBlocked) {\n checkDOMListeners(1);\n isBlocked = true;\n }\n\n return function () {\n if (isBlocked) {\n isBlocked = false;\n checkDOMListeners(-1);\n }\n\n return unblock();\n };\n }\n\n function listen(listener) {\n var unlisten = transitionManager.appendListener(listener);\n checkDOMListeners(1);\n return function () {\n checkDOMListeners(-1);\n unlisten();\n };\n }\n\n var history = {\n length: globalHistory.length,\n action: 'POP',\n location: initialLocation,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n block: block,\n listen: listen\n };\n return history;\n}\n\nvar HashChangeEvent$1 = 'hashchange';\nvar HashPathCoders = {\n hashbang: {\n encodePath: function encodePath(path) {\n return path.charAt(0) === '!' ? path : '!/' + stripLeadingSlash(path);\n },\n decodePath: function decodePath(path) {\n return path.charAt(0) === '!' ? path.substr(1) : path;\n }\n },\n noslash: {\n encodePath: stripLeadingSlash,\n decodePath: addLeadingSlash\n },\n slash: {\n encodePath: addLeadingSlash,\n decodePath: addLeadingSlash\n }\n};\n\nfunction stripHash(url) {\n var hashIndex = url.indexOf('#');\n return hashIndex === -1 ? url : url.slice(0, hashIndex);\n}\n\nfunction getHashPath() {\n // We can't use window.location.hash here because it's not\n // consistent across browsers - Firefox will pre-decode it!\n var href = window.location.href;\n var hashIndex = href.indexOf('#');\n return hashIndex === -1 ? '' : href.substring(hashIndex + 1);\n}\n\nfunction pushHashPath(path) {\n window.location.hash = path;\n}\n\nfunction replaceHashPath(path) {\n window.location.replace(stripHash(window.location.href) + '#' + path);\n}\n\nfunction createHashHistory(props) {\n if (props === void 0) {\n props = {};\n }\n\n !canUseDOM ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Hash history needs a DOM') : invariant(false) : void 0;\n var globalHistory = window.history;\n var canGoWithoutReload = supportsGoWithoutReloadUsingHash();\n var _props = props,\n _props$getUserConfirm = _props.getUserConfirmation,\n getUserConfirmation = _props$getUserConfirm === void 0 ? getConfirmation : _props$getUserConfirm,\n _props$hashType = _props.hashType,\n hashType = _props$hashType === void 0 ? 'slash' : _props$hashType;\n var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : '';\n var _HashPathCoders$hashT = HashPathCoders[hashType],\n encodePath = _HashPathCoders$hashT.encodePath,\n decodePath = _HashPathCoders$hashT.decodePath;\n\n function getDOMLocation() {\n var path = decodePath(getHashPath());\n process.env.NODE_ENV !== \"production\" ? warning(!basename || hasBasename(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path \"' + path + '\" to begin with \"' + basename + '\".') : void 0;\n if (basename) path = stripBasename(path, basename);\n return createLocation(path);\n }\n\n var transitionManager = createTransitionManager();\n\n function setState(nextState) {\n _extends(history, nextState);\n\n history.length = globalHistory.length;\n transitionManager.notifyListeners(history.location, history.action);\n }\n\n var forceNextPop = false;\n var ignorePath = null;\n\n function locationsAreEqual$$1(a, b) {\n return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash;\n }\n\n function handleHashChange() {\n var path = getHashPath();\n var encodedPath = encodePath(path);\n\n if (path !== encodedPath) {\n // Ensure we always have a properly-encoded hash.\n replaceHashPath(encodedPath);\n } else {\n var location = getDOMLocation();\n var prevLocation = history.location;\n if (!forceNextPop && locationsAreEqual$$1(prevLocation, location)) return; // A hashchange doesn't always == location change.\n\n if (ignorePath === createPath(location)) return; // Ignore this change; we already setState in push/replace.\n\n ignorePath = null;\n handlePop(location);\n }\n }\n\n function handlePop(location) {\n if (forceNextPop) {\n forceNextPop = false;\n setState();\n } else {\n var action = 'POP';\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({\n action: action,\n location: location\n });\n } else {\n revertPop(location);\n }\n });\n }\n }\n\n function revertPop(fromLocation) {\n var toLocation = history.location; // TODO: We could probably make this more reliable by\n // keeping a list of paths we've seen in sessionStorage.\n // Instead, we just default to 0 for paths we don't know.\n\n var toIndex = allPaths.lastIndexOf(createPath(toLocation));\n if (toIndex === -1) toIndex = 0;\n var fromIndex = allPaths.lastIndexOf(createPath(fromLocation));\n if (fromIndex === -1) fromIndex = 0;\n var delta = toIndex - fromIndex;\n\n if (delta) {\n forceNextPop = true;\n go(delta);\n }\n } // Ensure the hash is encoded properly before doing anything else.\n\n\n var path = getHashPath();\n var encodedPath = encodePath(path);\n if (path !== encodedPath) replaceHashPath(encodedPath);\n var initialLocation = getDOMLocation();\n var allPaths = [createPath(initialLocation)]; // Public interface\n\n function createHref(location) {\n var baseTag = document.querySelector('base');\n var href = '';\n\n if (baseTag && baseTag.getAttribute('href')) {\n href = stripHash(window.location.href);\n }\n\n return href + '#' + encodePath(basename + createPath(location));\n }\n\n function push(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Hash history cannot push state; it is ignored') : void 0;\n var action = 'PUSH';\n var location = createLocation(path, undefined, undefined, history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var path = createPath(location);\n var encodedPath = encodePath(basename + path);\n var hashChanged = getHashPath() !== encodedPath;\n\n if (hashChanged) {\n // We cannot tell if a hashchange was caused by a PUSH, so we'd\n // rather setState here and ignore the hashchange. The caveat here\n // is that other hash histories in the page will consider it a POP.\n ignorePath = path;\n pushHashPath(encodedPath);\n var prevIndex = allPaths.lastIndexOf(createPath(history.location));\n var nextPaths = allPaths.slice(0, prevIndex + 1);\n nextPaths.push(path);\n allPaths = nextPaths;\n setState({\n action: action,\n location: location\n });\n } else {\n process.env.NODE_ENV !== \"production\" ? warning(false, 'Hash history cannot PUSH the same path; a new entry will not be added to the history stack') : void 0;\n setState();\n }\n });\n }\n\n function replace(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Hash history cannot replace state; it is ignored') : void 0;\n var action = 'REPLACE';\n var location = createLocation(path, undefined, undefined, history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var path = createPath(location);\n var encodedPath = encodePath(basename + path);\n var hashChanged = getHashPath() !== encodedPath;\n\n if (hashChanged) {\n // We cannot tell if a hashchange was caused by a REPLACE, so we'd\n // rather setState here and ignore the hashchange. The caveat here\n // is that other hash histories in the page will consider it a POP.\n ignorePath = path;\n replaceHashPath(encodedPath);\n }\n\n var prevIndex = allPaths.indexOf(createPath(history.location));\n if (prevIndex !== -1) allPaths[prevIndex] = path;\n setState({\n action: action,\n location: location\n });\n });\n }\n\n function go(n) {\n process.env.NODE_ENV !== \"production\" ? warning(canGoWithoutReload, 'Hash history go(n) causes a full page reload in this browser') : void 0;\n globalHistory.go(n);\n }\n\n function goBack() {\n go(-1);\n }\n\n function goForward() {\n go(1);\n }\n\n var listenerCount = 0;\n\n function checkDOMListeners(delta) {\n listenerCount += delta;\n\n if (listenerCount === 1 && delta === 1) {\n window.addEventListener(HashChangeEvent$1, handleHashChange);\n } else if (listenerCount === 0) {\n window.removeEventListener(HashChangeEvent$1, handleHashChange);\n }\n }\n\n var isBlocked = false;\n\n function block(prompt) {\n if (prompt === void 0) {\n prompt = false;\n }\n\n var unblock = transitionManager.setPrompt(prompt);\n\n if (!isBlocked) {\n checkDOMListeners(1);\n isBlocked = true;\n }\n\n return function () {\n if (isBlocked) {\n isBlocked = false;\n checkDOMListeners(-1);\n }\n\n return unblock();\n };\n }\n\n function listen(listener) {\n var unlisten = transitionManager.appendListener(listener);\n checkDOMListeners(1);\n return function () {\n checkDOMListeners(-1);\n unlisten();\n };\n }\n\n var history = {\n length: globalHistory.length,\n action: 'POP',\n location: initialLocation,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n block: block,\n listen: listen\n };\n return history;\n}\n\nfunction clamp(n, lowerBound, upperBound) {\n return Math.min(Math.max(n, lowerBound), upperBound);\n}\n/**\n * Creates a history object that stores locations in memory.\n */\n\n\nfunction createMemoryHistory(props) {\n if (props === void 0) {\n props = {};\n }\n\n var _props = props,\n getUserConfirmation = _props.getUserConfirmation,\n _props$initialEntries = _props.initialEntries,\n initialEntries = _props$initialEntries === void 0 ? ['/'] : _props$initialEntries,\n _props$initialIndex = _props.initialIndex,\n initialIndex = _props$initialIndex === void 0 ? 0 : _props$initialIndex,\n _props$keyLength = _props.keyLength,\n keyLength = _props$keyLength === void 0 ? 6 : _props$keyLength;\n var transitionManager = createTransitionManager();\n\n function setState(nextState) {\n _extends(history, nextState);\n\n history.length = history.entries.length;\n transitionManager.notifyListeners(history.location, history.action);\n }\n\n function createKey() {\n return Math.random().toString(36).substr(2, keyLength);\n }\n\n var index = clamp(initialIndex, 0, initialEntries.length - 1);\n var entries = initialEntries.map(function (entry) {\n return typeof entry === 'string' ? createLocation(entry, undefined, createKey()) : createLocation(entry, undefined, entry.key || createKey());\n }); // Public interface\n\n var createHref = createPath;\n\n function push(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n var action = 'PUSH';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var prevIndex = history.index;\n var nextIndex = prevIndex + 1;\n var nextEntries = history.entries.slice(0);\n\n if (nextEntries.length > nextIndex) {\n nextEntries.splice(nextIndex, nextEntries.length - nextIndex, location);\n } else {\n nextEntries.push(location);\n }\n\n setState({\n action: action,\n location: location,\n index: nextIndex,\n entries: nextEntries\n });\n });\n }\n\n function replace(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n var action = 'REPLACE';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n history.entries[history.index] = location;\n setState({\n action: action,\n location: location\n });\n });\n }\n\n function go(n) {\n var nextIndex = clamp(history.index + n, 0, history.entries.length - 1);\n var action = 'POP';\n var location = history.entries[nextIndex];\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({\n action: action,\n location: location,\n index: nextIndex\n });\n } else {\n // Mimic the behavior of DOM histories by\n // causing a render after a cancelled POP.\n setState();\n }\n });\n }\n\n function goBack() {\n go(-1);\n }\n\n function goForward() {\n go(1);\n }\n\n function canGo(n) {\n var nextIndex = history.index + n;\n return nextIndex >= 0 && nextIndex < history.entries.length;\n }\n\n function block(prompt) {\n if (prompt === void 0) {\n prompt = false;\n }\n\n return transitionManager.setPrompt(prompt);\n }\n\n function listen(listener) {\n return transitionManager.appendListener(listener);\n }\n\n var history = {\n length: entries.length,\n action: 'POP',\n location: entries[index],\n index: index,\n entries: entries,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n canGo: canGo,\n block: block,\n listen: listen\n };\n return history;\n}\n\nexport { createBrowserHistory, createHashHistory, createMemoryHistory, createLocation, locationsAreEqual, parsePath, createPath };\n","export default function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}","import { Router, __RouterContext, matchPath } from 'react-router';\nexport { MemoryRouter, Prompt, Redirect, Route, Router, StaticRouter, Switch, generatePath, matchPath, useHistory, useLocation, useParams, useRouteMatch, withRouter } from 'react-router';\nimport _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport React from 'react';\nimport { createBrowserHistory, createHashHistory, createLocation, createPath } from 'history';\nimport PropTypes from 'prop-types';\nimport warning from 'tiny-warning';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport _objectWithoutPropertiesLoose from '@babel/runtime/helpers/esm/objectWithoutPropertiesLoose';\nimport invariant from 'tiny-invariant';\n\n/**\n * The public API for a <Router> that uses HTML5 history.\n */\n\nvar BrowserRouter = /*#__PURE__*/function (_React$Component) {\n _inheritsLoose(BrowserRouter, _React$Component);\n\n function BrowserRouter() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n _this.history = createBrowserHistory(_this.props);\n return _this;\n }\n\n var _proto = BrowserRouter.prototype;\n\n _proto.render = function render() {\n return /*#__PURE__*/React.createElement(Router, {\n history: this.history,\n children: this.props.children\n });\n };\n\n return BrowserRouter;\n}(React.Component);\n\nif (process.env.NODE_ENV !== \"production\") {\n BrowserRouter.propTypes = {\n basename: PropTypes.string,\n children: PropTypes.node,\n forceRefresh: PropTypes.bool,\n getUserConfirmation: PropTypes.func,\n keyLength: PropTypes.number\n };\n\n BrowserRouter.prototype.componentDidMount = function () {\n process.env.NODE_ENV !== \"production\" ? warning(!this.props.history, \"<BrowserRouter> ignores the history prop. To use a custom history, \" + \"use `import { Router }` instead of `import { BrowserRouter as Router }`.\") : void 0;\n };\n}\n\n/**\n * The public API for a <Router> that uses window.location.hash.\n */\n\nvar HashRouter = /*#__PURE__*/function (_React$Component) {\n _inheritsLoose(HashRouter, _React$Component);\n\n function HashRouter() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n _this.history = createHashHistory(_this.props);\n return _this;\n }\n\n var _proto = HashRouter.prototype;\n\n _proto.render = function render() {\n return /*#__PURE__*/React.createElement(Router, {\n history: this.history,\n children: this.props.children\n });\n };\n\n return HashRouter;\n}(React.Component);\n\nif (process.env.NODE_ENV !== \"production\") {\n HashRouter.propTypes = {\n basename: PropTypes.string,\n children: PropTypes.node,\n getUserConfirmation: PropTypes.func,\n hashType: PropTypes.oneOf([\"hashbang\", \"noslash\", \"slash\"])\n };\n\n HashRouter.prototype.componentDidMount = function () {\n process.env.NODE_ENV !== \"production\" ? warning(!this.props.history, \"<HashRouter> ignores the history prop. To use a custom history, \" + \"use `import { Router }` instead of `import { HashRouter as Router }`.\") : void 0;\n };\n}\n\nvar resolveToLocation = function resolveToLocation(to, currentLocation) {\n return typeof to === \"function\" ? to(currentLocation) : to;\n};\nvar normalizeToLocation = function normalizeToLocation(to, currentLocation) {\n return typeof to === \"string\" ? createLocation(to, null, null, currentLocation) : to;\n};\n\nvar forwardRefShim = function forwardRefShim(C) {\n return C;\n};\n\nvar forwardRef = React.forwardRef;\n\nif (typeof forwardRef === \"undefined\") {\n forwardRef = forwardRefShim;\n}\n\nfunction isModifiedEvent(event) {\n return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}\n\nvar LinkAnchor = forwardRef(function (_ref, forwardedRef) {\n var innerRef = _ref.innerRef,\n navigate = _ref.navigate,\n _onClick = _ref.onClick,\n rest = _objectWithoutPropertiesLoose(_ref, [\"innerRef\", \"navigate\", \"onClick\"]);\n\n var target = rest.target;\n\n var props = _extends({}, rest, {\n onClick: function onClick(event) {\n try {\n if (_onClick) _onClick(event);\n } catch (ex) {\n event.preventDefault();\n throw ex;\n }\n\n if (!event.defaultPrevented && // onClick prevented default\n event.button === 0 && ( // ignore everything but left clicks\n !target || target === \"_self\") && // let browser handle \"target=_blank\" etc.\n !isModifiedEvent(event) // ignore clicks with modifier keys\n ) {\n event.preventDefault();\n navigate();\n }\n }\n }); // React 15 compat\n\n\n if (forwardRefShim !== forwardRef) {\n props.ref = forwardedRef || innerRef;\n } else {\n props.ref = innerRef;\n }\n /* eslint-disable-next-line jsx-a11y/anchor-has-content */\n\n\n return /*#__PURE__*/React.createElement(\"a\", props);\n});\n\nif (process.env.NODE_ENV !== \"production\") {\n LinkAnchor.displayName = \"LinkAnchor\";\n}\n/**\n * The public API for rendering a history-aware <a>.\n */\n\n\nvar Link = forwardRef(function (_ref2, forwardedRef) {\n var _ref2$component = _ref2.component,\n component = _ref2$component === void 0 ? LinkAnchor : _ref2$component,\n replace = _ref2.replace,\n to = _ref2.to,\n innerRef = _ref2.innerRef,\n rest = _objectWithoutPropertiesLoose(_ref2, [\"component\", \"replace\", \"to\", \"innerRef\"]);\n\n return /*#__PURE__*/React.createElement(__RouterContext.Consumer, null, function (context) {\n !context ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"You should not use <Link> outside a <Router>\") : invariant(false) : void 0;\n var history = context.history;\n var location = normalizeToLocation(resolveToLocation(to, context.location), context.location);\n var href = location ? history.createHref(location) : \"\";\n\n var props = _extends({}, rest, {\n href: href,\n navigate: function navigate() {\n var location = resolveToLocation(to, context.location);\n var isDuplicateNavigation = createPath(context.location) === createPath(normalizeToLocation(location));\n var method = replace || isDuplicateNavigation ? history.replace : history.push;\n method(location);\n }\n }); // React 15 compat\n\n\n if (forwardRefShim !== forwardRef) {\n props.ref = forwardedRef || innerRef;\n } else {\n props.innerRef = innerRef;\n }\n\n return /*#__PURE__*/React.createElement(component, props);\n });\n});\n\nif (process.env.NODE_ENV !== \"production\") {\n var toType = PropTypes.oneOfType([PropTypes.string, PropTypes.object, PropTypes.func]);\n var refType = PropTypes.oneOfType([PropTypes.string, PropTypes.func, PropTypes.shape({\n current: PropTypes.any\n })]);\n Link.displayName = \"Link\";\n Link.propTypes = {\n innerRef: refType,\n onClick: PropTypes.func,\n replace: PropTypes.bool,\n target: PropTypes.string,\n to: toType.isRequired\n };\n}\n\nvar forwardRefShim$1 = function forwardRefShim(C) {\n return C;\n};\n\nvar forwardRef$1 = React.forwardRef;\n\nif (typeof forwardRef$1 === \"undefined\") {\n forwardRef$1 = forwardRefShim$1;\n}\n\nfunction joinClassnames() {\n for (var _len = arguments.length, classnames = new Array(_len), _key = 0; _key < _len; _key++) {\n classnames[_key] = arguments[_key];\n }\n\n return classnames.filter(function (i) {\n return i;\n }).join(\" \");\n}\n/**\n * A <Link> wrapper that knows if it's \"active\" or not.\n */\n\n\nvar NavLink = forwardRef$1(function (_ref, forwardedRef) {\n var _ref$ariaCurrent = _ref[\"aria-current\"],\n ariaCurrent = _ref$ariaCurrent === void 0 ? \"page\" : _ref$ariaCurrent,\n _ref$activeClassName = _ref.activeClassName,\n activeClassName = _ref$activeClassName === void 0 ? \"active\" : _ref$activeClassName,\n activeStyle = _ref.activeStyle,\n classNameProp = _ref.className,\n exact = _ref.exact,\n isActiveProp = _ref.isActive,\n locationProp = _ref.location,\n sensitive = _ref.sensitive,\n strict = _ref.strict,\n styleProp = _ref.style,\n to = _ref.to,\n innerRef = _ref.innerRef,\n rest = _objectWithoutPropertiesLoose(_ref, [\"aria-current\", \"activeClassName\", \"activeStyle\", \"className\", \"exact\", \"isActive\", \"location\", \"sensitive\", \"strict\", \"style\", \"to\", \"innerRef\"]);\n\n return /*#__PURE__*/React.createElement(__RouterContext.Consumer, null, function (context) {\n !context ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"You should not use <NavLink> outside a <Router>\") : invariant(false) : void 0;\n var currentLocation = locationProp || context.location;\n var toLocation = normalizeToLocation(resolveToLocation(to, currentLocation), currentLocation);\n var path = toLocation.pathname; // Regex taken from: https://github.com/pillarjs/path-to-regexp/blob/master/index.js#L202\n\n var escapedPath = path && path.replace(/([.+*?=^!:${}()[\\]|/\\\\])/g, \"\\\\$1\");\n var match = escapedPath ? matchPath(currentLocation.pathname, {\n path: escapedPath,\n exact: exact,\n sensitive: sensitive,\n strict: strict\n }) : null;\n var isActive = !!(isActiveProp ? isActiveProp(match, currentLocation) : match);\n var className = typeof classNameProp === \"function\" ? classNameProp(isActive) : classNameProp;\n var style = typeof styleProp === \"function\" ? styleProp(isActive) : styleProp;\n\n if (isActive) {\n className = joinClassnames(className, activeClassName);\n style = _extends({}, style, activeStyle);\n }\n\n var props = _extends({\n \"aria-current\": isActive && ariaCurrent || null,\n className: className,\n style: style,\n to: toLocation\n }, rest); // React 15 compat\n\n\n if (forwardRefShim$1 !== forwardRef$1) {\n props.ref = forwardedRef || innerRef;\n } else {\n props.innerRef = innerRef;\n }\n\n return /*#__PURE__*/React.createElement(Link, props);\n });\n});\n\nif (process.env.NODE_ENV !== \"production\") {\n NavLink.displayName = \"NavLink\";\n var ariaCurrentType = PropTypes.oneOf([\"page\", \"step\", \"location\", \"date\", \"time\", \"true\", \"false\"]);\n NavLink.propTypes = _extends({}, Link.propTypes, {\n \"aria-current\": ariaCurrentType,\n activeClassName: PropTypes.string,\n activeStyle: PropTypes.object,\n className: PropTypes.oneOfType([PropTypes.string, PropTypes.func]),\n exact: PropTypes.bool,\n isActive: PropTypes.func,\n location: PropTypes.object,\n sensitive: PropTypes.bool,\n strict: PropTypes.bool,\n style: PropTypes.oneOfType([PropTypes.object, PropTypes.func])\n });\n}\n\nexport { BrowserRouter, HashRouter, Link, NavLink };\n//# sourceMappingURL=react-router-dom.js.map\n","import _get from 'lodash/get'\nimport {Link} from 'react-router-dom'\nimport styled from 'styled-components'\n\nimport {declareFont, shadeColor, theme} from '../utilStyles'\n\n/**\n * A styled version of https://reactrouter.com/web/api/Link\n */\nexport default styled(Link)`\n ${declareFont()}\n text-decoration: none;\n color: ${theme.color('secondary')};\n\n * {\n color: ${theme.color('text')};\n text-decoration: none;\n }\n\n &:hover,\n &:hover *,\n &:focus,\n &:focus * {\n color: ${theme.color('secondaryLight')};\n text-decoration: ${({neutral}) => (neutral ? 'none' : 'underline')};\n }\n\n &:active,\n &:active * {\n color: ${({neutral, theme}) =>\n neutral ? shadeColor(_get(theme, 'colors.text'), 2) : shadeColor(_get(theme, 'colors.secondary'), 2)};\n text-decoration: ${({neutral}) => (neutral ? 'none' : 'underline')};\n }\n`\n","import styled from 'styled-components'\nimport {theme, scale, RouterLink} from 'tocco-ui'\n\nexport const StyledDevCon = styled.div`\n && {\n background-color: ${theme.color('paper')};\n padding: ${scale.space(0)};\n display: flex;\n flex-direction: column;\n flex: 1;\n overflow: auto;\n }\n`\n\nexport const StyledNavigation = styled.div`\n display: flex;\n`\n\nexport const StyledRouterLink = styled(RouterLink)`\n padding: 1em;\n background-color: #ddd;\n border-radius: 5px;\n margin: 5px;\n`\n","import PropTypes from 'prop-types'\nimport React from 'react'\nimport {notification} from 'tocco-app-extensions'\nimport {Typography} from 'tocco-ui'\nimport {route as routeUtil} from 'tocco-util'\n\nimport {StyledDevCon, StyledNavigation, StyledRouterLink} from './StyledDevCon'\n\nconst DevCon = ({routes}) => (\n <StyledDevCon>\n <notification.Notifications />\n <Typography.Span>Tocco Developer Console</Typography.Span>\n <StyledNavigation>\n <StyledRouterLink to=\"/log\">Log</StyledRouterLink>\n <StyledRouterLink to=\"/modelvalidation\">Model Validation</StyledRouterLink>\n <StyledRouterLink to=\"/dbrefactoring\">DB Refactoring</StyledRouterLink>\n <StyledRouterLink to=\"/sqllog\">SQL Log</StyledRouterLink>\n </StyledNavigation>\n {routes.map((route, i) => (\n <routeUtil.RouteWithSubRoutes key={i} {...route} />\n ))}\n </StyledDevCon>\n)\n\nDevCon.propTypes = {\n routes: PropTypes.array.isRequired\n}\n\nexport default DevCon\n","import DevCon from './components/DevCon'\n\nexport default {\n container: DevCon\n}\n","import styled from 'styled-components'\nimport {declareFont} from 'tocco-ui'\n\nconst BORDER_COLOR = {\n ERROR: '#a00'\n}\n\nexport const StyledLogTable = styled.div`\n display: grid;\n gap: 1px;\n`\n\nexport const StyledLogEntry = styled.div`\n display: grid;\n height: fit-content;\n grid-template-columns: repeat(3, 1fr);\n padding: 1em;\n ${props => `border: 1px solid ${BORDER_COLOR[props.level] || '#ddd'};`}\n`\n\nexport const StyledMessage = styled.span`\n grid-column: 1 / 3;\n ${props => props.expandable && 'cursor: pointer;'}\n\n && {\n ${declareFont()}\n }\n`\n\nexport const StyledTime = styled.span`\n grid-column-start: 3;\n text-align: right;\n\n && {\n ${declareFont()}\n }\n`\n\nexport const StyledExceptionDetails = styled.div`\n margin-top: 1em;\n`\n\nexport const StyledDetailMessage = styled.div`\n margin-bottom: 1em;\n\n && {\n ${declareFont()}\n }\n`\n\nexport const StyledStackTrace = styled.div`\n && {\n ${declareFont()}\n }\n`\n","import PropTypes from 'prop-types'\nimport React from 'react'\n\nimport {StyledExceptionDetails, StyledDetailMessage, StyledStackTrace} from './StyledLogEntry'\n\nconst formatLine = line => `${line.declaringClass}.${line.methodName}:${line.lineNumber}`\n\nconst ExceptionDetails = ({exception}) => (\n <StyledExceptionDetails>\n <StyledDetailMessage>{exception.detailMessage}</StyledDetailMessage>\n <StyledStackTrace>\n {exception.stackTrace.map((line, index) => (\n <div key={index}>{formatLine(line)}</div>\n ))}\n </StyledStackTrace>\n </StyledExceptionDetails>\n)\n\nExceptionDetails.propTypes = {\n exception: PropTypes.shape({\n detailMessage: PropTypes.string.isRequired,\n stackTrace: PropTypes.arrayOf(\n PropTypes.shape({\n declaringClass: PropTypes.string.isRequired,\n methodName: PropTypes.string.isRequired,\n lineNumber: PropTypes.number.isRequired\n })\n ).isRequired\n }).isRequired\n}\n\nexport default ExceptionDetails\n","import PropTypes from 'prop-types'\nimport React, {useState} from 'react'\n\nimport ExceptionDetails from './ExceptionDetails'\nimport {StyledLogEntry, StyledMessage, StyledTime} from './StyledLogEntry'\n\nconst LogEntry = ({entry}) => {\n const [expanded, setExpanded] = useState(false)\n\n const handleClick = () => {\n if (entry.exception) {\n setExpanded(!expanded)\n }\n }\n\n return (\n <StyledLogEntry level={entry.level}>\n <StyledMessage onClick={handleClick} expandable={!!entry.exception}>\n {entry.message}\n </StyledMessage>\n <StyledTime>{new Date(entry.timestamp).toLocaleString()}</StyledTime>\n {expanded && <ExceptionDetails exception={entry.exception} />}\n </StyledLogEntry>\n )\n}\n\nLogEntry.propTypes = {\n entry: PropTypes.shape({\n message: PropTypes.string.isRequired,\n timestamp: PropTypes.number.isRequired,\n level: PropTypes.string.isRequired,\n exception: PropTypes.shape({\n detailMessage: PropTypes.string.isRequired,\n stackTrace: PropTypes.arrayOf(\n PropTypes.shape({\n declaringClass: PropTypes.string.isRequired,\n methodName: PropTypes.string.isRequired,\n lineNumber: PropTypes.number.isRequired\n })\n ).isRequired\n })\n }).isRequired\n}\n\nexport default LogEntry\n","import PropTypes from 'prop-types'\nimport React from 'react'\nimport {Typography} from 'tocco-ui'\n\nimport LogEntry from './LogEntry'\nimport {StyledLogTable} from './StyledLogEntry'\n\nconst LogTable = ({entries}) => (\n <StyledLogTable>\n {entries.length > 0 ? (\n entries.map(entry => <LogEntry key={entry.key} entry={entry} />)\n ) : (\n <Typography.Span>No entries so far.</Typography.Span>\n )}\n </StyledLogTable>\n)\n\nLogTable.propTypes = {\n entries: PropTypes.arrayOf(\n PropTypes.shape({\n message: PropTypes.string.isRequired,\n timestamp: PropTypes.number.isRequired,\n level: PropTypes.string.isRequired,\n exception: PropTypes.shape({\n detailMessage: PropTypes.string.isRequired,\n stackTrace: PropTypes.arrayOf(\n PropTypes.shape({\n declaringClass: PropTypes.string.isRequired,\n methodName: PropTypes.string.isRequired,\n lineNumber: PropTypes.number.isRequired\n })\n ).isRequired\n })\n })\n ).isRequired\n}\n\nexport default LogTable\n","import {connect} from 'react-redux'\n\nimport LogTable from './LogTable'\n\nconst mapStateToProps = state => ({\n entries: state.log.entries\n})\n\nconst mapActionCreators = {}\n\nexport default connect(mapStateToProps, mapActionCreators)(LogTable)\n","import React from 'react'\nimport {Typography} from 'tocco-ui'\n\nimport LogTable from '../LogTable'\n\nconst LogView = () => (\n <>\n <Typography.H1>Log</Typography.H1>\n <LogTable />\n </>\n)\n\nexport default LogView\n","export const RECEIVE_ENTRY = 'log/RECEIVE_ENTRY'\n\nexport const receiveEntry = data => ({\n type: RECEIVE_ENTRY,\n payload: {\n data\n }\n})\n","import {v4 as uuid} from 'uuid'\n\nimport * as actions from './actions'\n\nconst handleReceiveEntry = (state, {payload}) => ({\n ...state,\n entries: [\n {\n ...payload.data,\n key: uuid()\n },\n ...state.entries\n ]\n})\n\nconst ACTION_HANDLERS = {\n [actions.RECEIVE_ENTRY]: handleReceiveEntry\n}\n\nconst initialState = {\n entries: []\n}\n\nexport default function reducer(state = initialState, action) {\n const handler = ACTION_HANDLERS[action.type]\n return handler ? handler(state, action) : state\n}\n","import {all, call} from 'redux-saga/effects'\nimport {socket} from 'tocco-app-extensions'\n\nimport * as actions from './actions'\n\nexport default function* mainSagas() {\n yield all([call(initSocket)])\n}\n\nexport function* initSocket() {\n const params = {\n name: 'logging',\n messageReceivedAction: actions.receiveEntry\n }\n yield call(socket.connectSocket, params)\n}\n","import LogView from './components/LogView'\nimport log from './modules'\nimport sagas from './modules/sagas'\n\nexport default {\n container: LogView,\n reducers: {\n log\n },\n sagas: [sagas]\n}\n","export const START_VALIDATION = 'modelvalidation/START_VALIDATION'\nexport const RECEIVE_MESSAGE = 'modelvalidation/RECEIVE_MESSAGE'\nexport const SET_TOTAL = 'modelvalidation/SET_TOTAL'\nexport const SET_CURRENT = 'modelvalidation/SET_CURRENT'\nexport const ADD_CHECK_EVENT = 'modelvalidation/ADD_CHECK_EVENT'\nexport const SET_RESULT = 'modelvalidation/SET_RESULT'\nexport const SET_SELECTED = 'modelvalidation/SET_SELECTED'\nexport const GENERATE_SQL = 'modelvalidation/GENERATE_SQL'\nexport const SET_SQL = 'modelvalidation/SET_SQL'\nexport const EXECUTE_SQL = 'modelvalidation/EXECUTE_SQL'\nexport const GENERATE_CHANGELOG = 'modelvalidation/GENERATE_CHANGELOG'\nexport const SET_CHANGELOG = 'modelvalidation/SET_CHANGELOG'\n\nexport const startValidation = () => ({\n type: START_VALIDATION\n})\n\nexport const receiveMessage = message => ({\n type: RECEIVE_MESSAGE,\n payload: {\n message\n }\n})\n\nexport const setResult = result => ({\n type: SET_RESULT,\n payload: {\n result\n }\n})\n\nexport const setTotal = total => ({\n type: SET_TOTAL,\n payload: {\n total\n }\n})\n\nexport const setCurrent = (total, currentIndex, currentName) => ({\n type: SET_CURRENT,\n payload: {\n total,\n currentIndex,\n currentName\n }\n})\n\nexport const addCheckEvent = (id, type, label) => ({\n type: ADD_CHECK_EVENT,\n payload: {\n id,\n type,\n label\n }\n})\n\nexport const setSelected = (ids, selected) => ({\n type: SET_SELECTED,\n payload: {\n ids,\n selected\n }\n})\n\nexport const generateSql = () => ({\n type: GENERATE_SQL\n})\n\nexport const setSql = sql => ({\n type: SET_SQL,\n payload: {\n sql\n }\n})\n\nexport const executeSql = close => ({\n type: EXECUTE_SQL,\n payload: {\n close\n }\n})\n\nexport const generateChangelog = () => ({\n type: GENERATE_CHANGELOG\n})\n\nexport const setChangelog = changelog => ({\n type: SET_CHANGELOG,\n payload: {\n changelog\n }\n})\n","import styled from 'styled-components'\n\nexport const StyledCheckEventGroup = styled.div`\n margin: 1em 0;\n border: 1px solid #ddd;\n border-radius: 5px;\n padding: 1em;\n`\n\nexport const StyledGroupHeading = styled.div`\n margin-bottom: 1em;\n`\n","import PropTypes from 'prop-types'\nimport React from 'react'\nimport {Typography} from 'tocco-ui'\n\nimport {StyledCheckEventGroup, StyledGroupHeading} from './StyledCheckEvents'\n\nconst allSelected = (events, selection) => {\n for (const event of events) {\n if (!selection.has(event.id)) {\n return false\n }\n }\n return true\n}\n\nconst CheckEventGroup = ({type, events, selection, setSelected}) => {\n const groupChecked = allSelected(events, selection)\n\n const handleHeaderSelectionChange = e => {\n setSelected(\n events.map(event => event.id),\n e.target.checked\n )\n }\n\n const handleSelectionChange = id => e => {\n setSelected([id], e.target.checked)\n }\n\n return (\n <StyledCheckEventGroup>\n <StyledGroupHeading>\n <input type=\"checkbox\" id={'checkbox-' + type} checked={groupChecked} onChange={handleHeaderSelectionChange} />\n <Typography.Label for={'checkbox-' + type}>\n <Typography.B>\n {type} ({events.length})\n </Typography.B>\n </Typography.Label>\n </StyledGroupHeading>\n {events.map(event => (\n <div key={event.id}>\n <input\n type=\"checkbox\"\n id={'checkbox-' + event.id}\n checked={selection.has(event.id)}\n onChange={handleSelectionChange(event.id)}\n />\n <Typography.Label for={'checkbox-' + event.id}>{event.label}</Typography.Label>\n </div>\n ))}\n </StyledCheckEventGroup>\n )\n}\n\nCheckEventGroup.propTypes = {\n type: PropTypes.string.isRequired,\n events: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string.isRequired,\n type: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired\n })\n ).isRequired,\n selection: PropTypes.object.isRequired,\n setSelected: PropTypes.func.isRequired\n}\n\nexport default CheckEventGroup\n","import PropTypes from 'prop-types'\nimport React from 'react'\nimport {Button} from 'tocco-ui'\n\nimport CheckEventGroup from './CheckEventGroup'\n\nconst CheckEvents = ({checkEvents, selection, setSelected, generateSql, generateChangelog}) => (\n <div>\n {Object.keys(checkEvents).length > 0 && (\n <>\n <Button look=\"raised\" onClick={generateSql} disabled={selection.size === 0}>\n Generate SQL {selection.size > 0 && `(${selection.size})`}\n </Button>\n <Button look=\"raised\" onClick={generateChangelog} disabled={selection.size === 0}>\n Generate Changelog {selection.size > 0 && `(${selection.size})`}\n </Button>\n </>\n )}\n <div>\n {Object.keys(checkEvents)\n .sort()\n .map(eventType => (\n <CheckEventGroup\n key={eventType}\n type={eventType}\n events={checkEvents[eventType]}\n selection={selection}\n setSelected={setSelected}\n />\n ))}\n </div>\n </div>\n)\n\nCheckEvents.propTypes = {\n checkEvents: PropTypes.objectOf(\n PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired,\n type: PropTypes.string.isRequired\n })\n ).isRequired\n ).isRequired,\n selection: PropTypes.object.isRequired,\n setSelected: PropTypes.func.isRequired,\n generateSql: PropTypes.func.isRequired,\n generateChangelog: PropTypes.func.isRequired\n}\n\nexport default CheckEvents\n","import {connect} from 'react-redux'\n\nimport {setSelected, generateSql, generateChangelog} from '../../modules/actions'\nimport CheckEvents from './CheckEvents'\n\nconst mapStateToProps = state => ({\n checkEvents: state.modelValidation.checkEvents,\n selection: state.modelValidation.selection\n})\n\nconst mapActionCreators = {\n setSelected,\n generateSql,\n generateChangelog\n}\n\nexport default connect(mapStateToProps, mapActionCreators)(CheckEvents)\n","import styled from 'styled-components'\nimport {declareFont} from 'tocco-ui'\n\nexport const StyledProgressBar = styled.div`\n width: 100%;\n border: 1px solid #ddd;\n height: 20px;\n position: relative;\n margin: 1em 0;\n`\n\nexport const StyledInnerProgress = styled.div`\n position: absolute;\n background-color: #ddd;\n height: 100%;\n width: ${props => props.percentage}%;\n`\n\nexport const StyledProgressText = styled.div`\n position: absolute;\n top: 0;\n width: 100%;\n text-align: center;\n\n && {\n ${declareFont()}\n }\n`\n","import PropTypes from 'prop-types'\nimport React from 'react'\n\nimport {StyledProgressBar, StyledInnerProgress, StyledProgressText} from './StyledProgressBar'\n\nconst getProgressText = state => {\n if (state.result) {\n return state.result\n }\n if (!state.running) {\n return 'Not started'\n }\n if (!state.total) {\n return 'Preparing...'\n }\n return `${getPercentage(state)}%`\n}\n\nconst getPercentage = state => (state.running && state.total ? Math.round((state.currentIndex / state.total) * 100) : 0)\n\nconst ProgressBar = ({state}) => (\n <StyledProgressBar>\n <StyledInnerProgress percentage={getPercentage(state)} />\n <StyledProgressText>{getProgressText(state)}</StyledProgressText>\n </StyledProgressBar>\n)\n\nProgressBar.propTypes = {\n state: PropTypes.shape({\n running: PropTypes.bool.isRequired,\n currentIndex: PropTypes.number,\n currentName: PropTypes.string,\n total: PropTypes.number\n }).isRequired\n}\n\nexport default ProgressBar\n","import PropTypes from 'prop-types'\nimport React from 'react'\nimport {Button} from 'tocco-ui'\n\nimport ProgressBar from './ProgressBar'\n\nconst ValidationProgress = ({state, startValidation}) => {\n return (\n <div>\n <Button look=\"raised\" pending={state.running} disabled={state.running} onClick={startValidation}>\n Execute\n </Button>\n <ProgressBar state={state} />\n </div>\n )\n}\n\nValidationProgress.propTypes = {\n state: PropTypes.shape({\n running: PropTypes.bool.isRequired,\n currentIndex: PropTypes.number,\n currentName: PropTypes.string,\n total: PropTypes.number\n }).isRequired,\n startValidation: PropTypes.func.isRequired\n}\n\nexport default ValidationProgress\n","import {connect} from 'react-redux'\n\nimport {startValidation} from '../../modules/actions'\nimport ValidationProgress from './ValidationProgress'\n\nconst mapStateToProps = state => ({\n state: state.modelValidation.state\n})\n\nconst mapActionCreators = {\n startValidation\n}\n\nexport default connect(mapStateToProps, mapActionCreators)(ValidationProgress)\n","import React from 'react'\nimport {Typography} from 'tocco-ui'\n\nimport CheckEvents from '../CheckEvents'\nimport ValidationProgress from '../ValidationProgress'\n\nconst ModelValidationView = () => (\n <>\n <Typography.H1>Model Validation</Typography.H1>\n <ValidationProgress />\n <CheckEvents />\n </>\n)\n\nexport default ModelValidationView\n","import {reducer as reducerUtil} from 'tocco-util'\n\nimport * as actions from './actions'\n\nconst handleStartValidation = () => ({\n ...initialState,\n state: {\n ...initialState.state,\n running: true\n }\n})\n\nconst handleSetTotal = (state, {payload}) => ({\n ...state,\n state: {\n ...state.state,\n total: payload.total\n }\n})\n\nconst handleSetCurrent = (state, {payload}) => ({\n ...state,\n state: {\n ...state.state,\n running: true,\n total: payload.total,\n currentIndex: payload.currentIndex,\n currentName: payload.currentName\n }\n})\n\nconst handleSetResult = (state, {payload}) => ({\n ...state,\n state: {\n ...state.state,\n running: false,\n result: payload.result\n }\n})\n\nconst addCheckEvent = (state, {payload}) => {\n const {id, type, label} = payload\n const typeEvents = state.checkEvents[type] || []\n const newTypeEvents = [\n ...typeEvents,\n {\n id,\n type,\n label\n }\n ]\n const newCheckEvents = {\n ...state.checkEvents,\n [type]: newTypeEvents\n }\n\n return {\n ...state,\n checkEvents: newCheckEvents\n }\n}\n\nconst handleSetSelected = (state, {payload}) => {\n const {ids, selected} = payload\n\n let newSelection\n if (selected) {\n newSelection = new Set(state.selection)\n ids.forEach(newSelection.add, newSelection)\n } else {\n newSelection = new Set()\n state.selection.forEach(id => {\n if (!ids.includes(id)) {\n newSelection.add(id)\n }\n })\n }\n\n return {\n ...state,\n selection: newSelection\n }\n}\n\nconst ACTION_HANDLERS = {\n [actions.START_VALIDATION]: handleStartValidation,\n [actions.SET_TOTAL]: handleSetTotal,\n [actions.SET_CURRENT]: handleSetCurrent,\n [actions.ADD_CHECK_EVENT]: addCheckEvent,\n [actions.SET_RESULT]: handleSetResult,\n [actions.SET_SELECTED]: handleSetSelected,\n [actions.SET_SQL]: reducerUtil.singleTransferReducer('sql'),\n [actions.SET_CHANGELOG]: reducerUtil.singleTransferReducer('changelog')\n}\n\nconst initialState = {\n checkEvents: {},\n state: {\n running: false,\n currentIndex: null,\n currentName: null,\n total: null,\n result: null\n },\n selection: new Set(),\n sql: null,\n changelog: null\n}\n\nexport default function reducer(state = initialState, action) {\n const handler = ACTION_HANDLERS[action.type]\n return handler ? handler(state, action) : state\n}\n","import PropTypes from 'prop-types'\nimport React from 'react'\nimport {EditableValue, Button} from 'tocco-ui'\n\nconst ChangelogDialog = ({changelog, setChangelog, executeChangelog, close}) => {\n const handleExecute = () => {\n if (executeChangelog) {\n executeChangelog(close)\n }\n }\n\n return (\n <div>\n <EditableValue type=\"text\" value={changelog} events={{onChange: setChangelog}} readOnly={!executeChangelog} />\n {executeChangelog && <Button look=\"raised\" onClick={handleExecute} label=\"Execute Changelog\" />}\n </div>\n )\n}\n\nChangelogDialog.propTypes = {\n changelog: PropTypes.string,\n setChangelog: PropTypes.func,\n executeChangelog: PropTypes.func,\n close: PropTypes.func.isRequired\n}\n\nexport default ChangelogDialog\n","import {connect} from 'react-redux'\n\nimport ChangelogDialog from './ChangelogDialog'\n\nconst mapStateToProps = state => ({\n changelog: state.modelValidation.changelog\n})\n\nconst mapActionCreators = {}\n\nexport default connect(mapStateToProps, mapActionCreators)(ChangelogDialog)\n","import PropTypes from 'prop-types'\nimport React from 'react'\nimport {EditableValue, Button} from 'tocco-ui'\n\nconst SqlDialog = ({sql, setSql, executeSql, close}) => {\n const handleExecute = () => {\n executeSql(close)\n }\n\n return (\n <div>\n <EditableValue type=\"text\" value={sql} events={{onChange: setSql}} />\n <Button look=\"raised\" onClick={handleExecute} label=\"Run Statements\" />\n </div>\n )\n}\n\nSqlDialog.propTypes = {\n sql: PropTypes.string,\n setSql: PropTypes.func.isRequired,\n executeSql: PropTypes.func.isRequired,\n close: PropTypes.func.isRequired\n}\n\nexport default SqlDialog\n","import {connect} from 'react-redux'\n\nimport {setSql, executeSql} from '../../modules/actions'\nimport SqlDialog from './SqlDialog'\n\nconst mapStateToProps = state => ({\n sql: state.modelValidation.sql\n})\n\nconst mapActionCreators = {\n setSql,\n executeSql\n}\n\nexport default connect(mapStateToProps, mapActionCreators)(SqlDialog)\n","import {all, call, put, takeEvery, select} from 'redux-saga/effects'\nimport {socket, rest, notification} from 'tocco-app-extensions'\nimport {consoleLogger} from 'tocco-util'\n\nimport ChangelogDialog from '../components/ChangelogDialog'\nimport SqlDialog from '../components/SqlDialog'\nimport * as actions from './actions'\n\nconst selectionSelector = state => state.modelValidation.selection\nconst sqlSelector = state => state.modelValidation.sql\n\nexport default function* mainSagas() {\n yield all([\n call(initSocket),\n takeEvery(actions.START_VALIDATION, startValidation),\n takeEvery(actions.RECEIVE_MESSAGE, receiveMessage),\n takeEvery(actions.GENERATE_SQL, generateSql),\n takeEvery(actions.EXECUTE_SQL, executeSql),\n takeEvery(actions.GENERATE_CHANGELOG, generateChangelog)\n ])\n}\n\nexport function* initSocket() {\n const params = {\n name: 'modelvalidation',\n messageReceivedAction: actions.receiveMessage\n }\n yield call(socket.connectSocket, params)\n}\n\nexport function* startValidation() {\n try {\n yield call(rest.requestSaga, 'devcon/modelvalidation/validation', {method: 'POST'})\n } catch (e) {\n consoleLogger.logError('Failed to start model validation', e)\n yield put(\n notification.toaster({\n type: 'error',\n title: 'Failed to start model validation'\n })\n )\n }\n}\n\nexport function* receiveMessage({payload}) {\n switch (payload.message.type) {\n case 'validation_ended':\n yield put(actions.setResult(payload.message.params.result))\n break\n case 'entering_checks':\n yield put(actions.setTotal(payload.message.params.total))\n break\n case 'entering_check':\n yield put(\n actions.setCurrent(payload.message.params.total, payload.message.params.num, payload.message.params.model)\n )\n break\n case 'check_event':\n yield put(\n actions.addCheckEvent(payload.message.params.id, payload.message.params.type, payload.message.params.label)\n )\n break\n }\n}\n\nexport function* generateSql() {\n const selection = yield select(selectionSelector)\n const options = {\n method: 'POST',\n body: {\n uuids: Array.from(selection)\n }\n }\n try {\n const response = yield call(rest.requestSaga, 'devcon/modelvalidation/sql', options)\n yield put(actions.setSql(response.body.statements.map(statement => statement + ';').join('\\n')))\n yield put(notification.modal('sql', 'SQL', null, SqlDialog, true))\n } catch (e) {\n consoleLogger.logError('Failed to generate SQL', e)\n yield put(\n notification.toaster({\n type: 'error',\n title: 'Failed to generate SQL'\n })\n )\n }\n}\n\nexport function* executeSql({payload}) {\n const sql = yield select(sqlSelector)\n const options = {\n method: 'POST',\n body: {\n statements: sql.split(';')\n }\n }\n try {\n const response = yield call(rest.requestSaga, 'devcon/modelvalidation/execute/sql', options)\n if (response.status === 200) {\n yield call(payload.close)\n }\n } catch (e) {\n consoleLogger.logError('Failed to execute SQL', e)\n yield put(\n notification.toaster({\n type: 'error',\n title: 'Failed to execute SQL'\n })\n )\n }\n}\n\nexport function* generateChangelog() {\n const selection = yield select(selectionSelector)\n const options = {\n method: 'POST',\n body: {\n uuids: Array.from(selection)\n }\n }\n try {\n const response = yield call(rest.requestSaga, 'devcon/modelvalidation/changelog', options)\n yield put(actions.setChangelog(response.body.statements[0]))\n yield put(notification.modal('changelog', 'Changelog', null, ChangelogDialog, true))\n } catch (e) {\n consoleLogger.logError('Failed to generate Changelog', e)\n yield put(\n notification.toaster({\n type: 'error',\n title: 'Failed to generate changelog'\n })\n )\n }\n}\n","import ModelValidationView from './components/ModelValidationView'\nimport modelValidation from './modules'\nimport sagas from './modules/sagas'\n\nexport default {\n container: ModelValidationView,\n reducers: {\n modelValidation\n },\n sagas: [sagas]\n}\n","export const RECEIVE_ENTRY = 'sqllog/RECEIVE_ENTRY'\nexport const SET_ACTIVE = 'sqllog/SET_ACTIVE'\nexport const SET_ELAPSED = 'sqllog/SET_ELAPSED'\n\nexport const receiveEntry = data => ({\n type: RECEIVE_ENTRY,\n payload: {\n data\n }\n})\n\nexport const setActive = active => ({\n type: SET_ACTIVE,\n payload: {\n active\n }\n})\n\nexport const setElapsed = elapsed => ({\n type: SET_ELAPSED,\n payload: {\n elapsed\n }\n})\n","import moment from 'moment'\n\nconst datetimeFormat = 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]'\nconst dateFormat = 'YYYY-MM-DD'\n\nconst rangeTypeMappings = {\n datetime: {\n type: 'date',\n toRange: value => {\n const fromValue = value ? moment(value).utc().format(datetimeFormat) : null\n const toValue = value ? moment(value).utc().add(1, 'd').format(datetimeFormat) : null\n return {from: fromValue, to: toValue, isRangeValue: true}\n },\n fromRange: value => {\n if (value && value.from) {\n return moment.utc(value.from, datetimeFormat).local().format(dateFormat)\n }\n if (value && value.to) {\n return moment.utc(value.to, datetimeFormat).local().format(dateFormat)\n }\n return null\n },\n getToOptions: (options, fromValue) => ({...options, flatpickrOptions: {minDate: fromValue}}),\n getFromOptions: (options, toValue) => ({...options, flatpickrOptions: {maxDate: toValue}})\n },\n date: {\n getToOptions: (options, fromValue) => ({...options, flatpickrOptions: {minDate: fromValue}}),\n getFromOptions: (options, toValue) => ({...options, flatpickrOptions: {maxDate: toValue}})\n }\n}\n\nexport default rangeTypeMappings\n","import styled from 'styled-components'\n\nimport {scale} from '../utilStyles'\n\nexport const StyledInputWrapper = styled.div`\n width: calc(100% - 20px); // subtract extender width\n`\nexport const StyledInputItemWrapper = styled.div`\n display: inline-block;\n width: 50%;\n\n * {\n line-height: unset !important;\n text-align: center;\n }\n`\n\nexport const StyledIconWrapper = styled.div`\n font-size: ${scale.font(-2.7)};\n display: flex;\n align-items: center;\n`\n\nexport const StyledRange = styled.div`\n display: flex;\n`\n\nexport const StyledInput = styled.div`\n flex: 1;\n display: flex;\n justify-content: space-between;\n align-items: baseline;\n width: inherit;\n`\n\nexport const StyledExtender = styled.div`\n display: flex;\n align-items: center;\n position: relative;\n left: 2px;\n z-index: 1;\n`\n","import _omit from 'lodash/omit'\nimport PropTypes from 'prop-types'\nimport React, {useMemo} from 'react'\n\nimport Ball from '../Ball'\nimport EditableValue from '../EditableValue'\nimport Icon from '../Icon'\nimport rangeTypeMappings from './rangeTypeMappings'\nimport {\n StyledExtender,\n StyledIconWrapper,\n StyledInput,\n StyledInputItemWrapper,\n StyledInputWrapper,\n StyledRange\n} from './StyledRange'\n\n/**\n * Allows to render EditableValues as a range. The value can be switched between a range or single value.\n */\nconst Range = props => {\n const {value, events, readOnly, type, options} = props\n const hasRangeValue = typeof value === 'object' && value && value.isRangeValue\n\n const exactEvents = useMemo(\n () => ({\n ...events,\n onChange: value => {\n events.onChange(value)\n }\n }),\n [events]\n )\n\n const toEvents = useMemo(\n () => ({\n onChange: toValue => {\n events.onChange({\n ...value,\n to: toValue\n })\n }\n }),\n [events, value]\n )\n\n const fromEvents = useMemo(\n () => ({\n onChange: fromValue => {\n events.onChange({\n ...value,\n from: fromValue\n })\n }\n }),\n [events, value]\n )\n\n const typeMapping = rangeTypeMappings[type]\n\n const getToOptions = (options, fromValue) =>\n typeMapping && typeMapping.getToOptions ? typeMapping.getToOptions(options, fromValue) : options\n\n const getFromOptions = (options, toValue) =>\n typeMapping && typeMapping.getFromOptions ? typeMapping.getFromOptions(options, toValue) : options\n\n const getFromOrTo = value =>\n typeMapping && typeMapping.fromRange\n ? typeMapping.fromRange(value)\n : value && value.from\n ? value.from\n : value && value.to\n ? value.to\n : null\n\n const getRangeValue = value =>\n typeMapping && typeMapping.toRange ? typeMapping.toRange(value) : {from: value, to: value, isRangeValue: true}\n\n const baseType = typeMapping && typeMapping.type ? typeMapping.type : type\n\n return (\n <StyledRange>\n <StyledInputWrapper>\n {!hasRangeValue ? (\n <EditableValue type={baseType} {..._omit(props, ['type'])} events={exactEvents} />\n ) : (\n <StyledInput>\n <StyledInputItemWrapper>\n <EditableValue\n {...props}\n options={getFromOptions(options, value.to)}\n value={value && value.from ? value.from : null}\n events={fromEvents}\n />\n </StyledInputItemWrapper>\n <StyledIconWrapper>\n <Icon icon=\"horizontal-rule\" />\n </StyledIconWrapper>\n <StyledInputItemWrapper>\n <EditableValue\n {...props}\n options={getToOptions(options, value.from)}\n value={value && value.to ? value.to : null}\n events={toEvents}\n />\n </StyledInputItemWrapper>\n </StyledInput>\n )}\n </StyledInputWrapper>\n <StyledExtender>\n <Ball\n disabled={readOnly}\n icon={hasRangeValue ? 'chevron-left' : 'chevron-down'}\n onClick={() => {\n if (hasRangeValue) {\n events.onChange(getFromOrTo(value))\n } else {\n events.onChange(getRangeValue(value))\n }\n }}\n ></Ball>\n </StyledExtender>\n </StyledRange>\n )\n}\n\nRange.propTypes = {\n /**\n * EditableValue type\n */\n type: PropTypes.string,\n /**\n * The Range Component can either handle a single value or and object with the following three\n * attributes: isRangeValue (true), from, to. The later two are single values.\n * example:\n * {\n * isRangeValue: true,\n * from: 1,\n * to: 2\n * }\n */\n value: PropTypes.any,\n /**\n * See EditableValue\n */\n events: PropTypes.shape({\n onChange: PropTypes.func\n }).isRequired,\n /**\n * See EditableValue\n */\n readOnly: PropTypes.bool,\n /**\n * See EditableValue\n */\n options: PropTypes.object,\n /**\n * Shown above \"from\" input\n */\n fromText: PropTypes.string,\n /**\n * Shown above \"to\" input\n */\n toText: PropTypes.string\n}\n\nexport default Range\n","import PropTypes from 'prop-types'\nimport React from 'react'\nimport {StatedValue, Range} from 'tocco-ui'\n\nconst LogForm = ({active, elapsed, setActive, setElapsed}) => {\n const handleActiveChange = e => {\n setActive(e.target.checked)\n }\n\n const handleElapsedChange = value => {\n setElapsed(value)\n }\n\n return (\n <div>\n <StatedValue label=\"Active\" fixLabel>\n <input type=\"checkbox\" checked={active} onChange={handleActiveChange} />\n </StatedValue>\n <StatedValue label=\"Elapsed\" hasValue={!!elapsed}>\n <Range\n fromText=\"from\"\n toText=\"to\"\n type=\"number\"\n value={elapsed}\n options={{\n postPointDigits: 0,\n fixedDecimalScale: true\n }}\n events={{\n onChange: handleElapsedChange\n }}\n />\n </StatedValue>\n </div>\n )\n}\n\nLogForm.propTypes = {\n active: PropTypes.bool.isRequired,\n elapsed: PropTypes.oneOfType([\n PropTypes.number,\n PropTypes.shape({\n from: PropTypes.number,\n to: PropTypes.number\n })\n ]),\n setActive: PropTypes.func.isRequired,\n setElapsed: PropTypes.func.isRequired\n}\n\nexport default LogForm\n","import {connect} from 'react-redux'\n\nimport {setActive, setElapsed} from '../../modules/actions'\nimport LogForm from './LogForm'\n\nconst mapStateToProps = state => ({\n active: state.sqlLog.active,\n elapsed: state.sqlLog.elapsed\n})\n\nconst mapActionCreators = {\n setActive,\n setElapsed\n}\n\nexport default connect(mapStateToProps, mapActionCreators)(LogForm)\n","import styled from 'styled-components'\nimport {declareFont} from 'tocco-ui'\n\nconst BORDER_COLOR = {\n ERROR: '#a00'\n}\n\nexport const StyledLogTable = styled.div`\n display: grid;\n gap: 1px;\n`\n\nexport const StyledLogEntry = styled.div`\n display: grid;\n height: fit-content;\n grid-template-columns: repeat(3, 1fr);\n padding: 1em;\n ${props => `border: 1px solid ${BORDER_COLOR[props.level] || '#ddd'};`}\n`\n\nexport const StyledStatementHeader = styled.span`\n grid-column: 1 / 3;\n ${props => props.expandable && 'cursor: pointer;'}\n\n && {\n ${declareFont()}\n }\n`\n\nexport const StyledStatement = styled.span`\n grid-column: 1 / 3;\n margin-top: 1em;\n\n && {\n ${declareFont()}\n }\n`\n\nexport const StyledTime = styled.span`\n grid-row-start: 1;\n grid-column-start: 3;\n text-align: right;\n\n && {\n ${declareFont()}\n }\n`\n\nexport const StyledElapsedContainer = styled.span`\n grid-column-start: 3;\n text-align: right;\n margin-top: 1em;\n\n && {\n ${declareFont()}\n }\n`\n\nconst getBackgroundColor = elapsed => {\n if (elapsed >= 1000) {\n return '#f00'\n }\n if (elapsed >= 500) {\n return '#ff8c00'\n }\n if (elapsed >= 100) {\n return '#ff0'\n }\n return '#dedede'\n}\n\nexport const StyledElapsed = styled.span`\n background-color: ${props => getBackgroundColor(props.elapsed)};\n border-radius: 5px;\n padding: 0.5em;\n`\n","import PropTypes from 'prop-types'\nimport React, {useState} from 'react'\n\nimport {\n StyledLogEntry,\n StyledStatementHeader,\n StyledStatement,\n StyledTime,\n StyledElapsedContainer,\n StyledElapsed\n} from './StyledLogEntry'\n\nconst LogEntry = ({entry}) => {\n const [expanded, setExpanded] = useState(false)\n\n const truncate = entry.sql.length > 100\n\n const handleClick = () => {\n if (truncate) {\n setExpanded(!expanded)\n }\n }\n\n const header = truncate ? entry.sql.substr(0, 100) + '...' : entry.sql\n\n return (\n <StyledLogEntry>\n <StyledStatementHeader expandable={truncate} onClick={handleClick}>\n {header}\n </StyledStatementHeader>\n {expanded && <StyledStatement>{entry.sql}</StyledStatement>}\n <StyledTime>{new Date(entry.timestamp.iMillis).toLocaleString()}</StyledTime>\n <StyledElapsedContainer>\n <StyledElapsed elapsed={entry.elapsed}>{entry.elapsed} ms</StyledElapsed>\n </StyledElapsedContainer>\n </StyledLogEntry>\n )\n}\n\nLogEntry.propTypes = {\n entry: PropTypes.shape({\n sql: PropTypes.string.isRequired,\n timestamp: PropTypes.shape({\n iMillis: PropTypes.number.isRequired\n }).isRequired,\n elapsed: PropTypes.number.isRequired\n }).isRequired\n}\n\nexport default LogEntry\n","import PropTypes from 'prop-types'\nimport React from 'react'\nimport {Typography} from 'tocco-ui'\n\nimport LogEntry from './LogEntry'\nimport {StyledLogTable} from './StyledLogEntry'\n\nconst filterEntries = (entries, elapsed) => {\n if (!elapsed) {\n return entries\n }\n return entries.filter(entry => {\n if (elapsed.isRangeValue === true) {\n return entry.elapsed >= elapsed.from && entry.elapsed <= elapsed.to\n }\n return entry.elapsed >= elapsed\n })\n}\n\nconst LogTable = ({entries, elapsed}) => {\n const filteredEntries = filterEntries(entries, elapsed)\n return (\n <StyledLogTable>\n {filteredEntries.length > 0 ? (\n filteredEntries.map(entry => <LogEntry key={entry.key} entry={entry} />)\n ) : (\n <Typography.Span>No entries so far.</Typography.Span>\n )}\n </StyledLogTable>\n )\n}\n\nLogTable.propTypes = {\n entries: PropTypes.arrayOf(\n PropTypes.shape({\n sql: PropTypes.string.isRequired,\n elapsed: PropTypes.number.isRequired,\n timestamp: PropTypes.shape({\n iMillis: PropTypes.number.isRequired\n }).isRequired\n })\n ).isRequired,\n elapsed: PropTypes.oneOfType([\n PropTypes.number,\n PropTypes.shape({\n from: PropTypes.number,\n to: PropTypes.number\n })\n ])\n}\n\nexport default LogTable\n","import {connect} from 'react-redux'\n\nimport LogTable from './LogTable'\n\nconst mapStateToProps = state => ({\n entries: state.sqlLog.entries,\n elapsed: state.sqlLog.elapsed\n})\n\nconst mapActionCreators = {}\n\nexport default connect(mapStateToProps, mapActionCreators)(LogTable)\n","import React from 'react'\nimport {Typography} from 'tocco-ui'\n\nimport LogForm from '../LogForm'\nimport LogTable from '../LogTable'\n\nconst LogView = () => (\n <>\n <Typography.H1>SQL Log</Typography.H1>\n <LogForm />\n <LogTable />\n </>\n)\n\nexport default LogView\n","import {reducer as reducerUtil} from 'tocco-util'\nimport {v4 as uuid} from 'uuid'\n\nimport * as actions from './actions'\n\nconst handleReceiveEntry = (state, {payload}) =>\n state.active\n ? {\n ...state,\n entries: [\n {\n ...payload.data,\n key: uuid()\n },\n ...state.entries\n ]\n }\n : state\n\nconst ACTION_HANDLERS = {\n [actions.RECEIVE_ENTRY]: handleReceiveEntry,\n [actions.SET_ACTIVE]: reducerUtil.singleTransferReducer('active'),\n [actions.SET_ELAPSED]: reducerUtil.singleTransferReducer('elapsed')\n}\n\nconst initialState = {\n entries: [],\n active: false,\n elapsed: null\n}\n\nexport default function reducer(state = initialState, action) {\n const handler = ACTION_HANDLERS[action.type]\n return handler ? handler(state, action) : state\n}\n","import {all, call} from 'redux-saga/effects'\nimport {socket} from 'tocco-app-extensions'\n\nimport * as actions from './actions'\n\nexport default function* mainSagas() {\n yield all([call(initSocket)])\n}\n\nexport function* initSocket() {\n const params = {\n name: 'sqllogging',\n messageReceivedAction: actions.receiveEntry\n }\n yield call(socket.connectSocket, params)\n}\n","import LogView from './components/LogView'\nimport sqlLog from './modules'\nimport sagas from './modules/sagas'\n\nexport default {\n container: LogView,\n reducers: {\n sqlLog\n },\n sagas: [sagas]\n}\n","import {request} from 'tocco-util'\n\nexport const sendRequest = endpoint => request.executeRequest(`rest/${endpoint}`)\n\nexport const extractBody = response => (response.status === 200 ? response.json() : null)\n","export const operators = ['==', '!=', '<=', '>=', '<', '>', '~=']\nexport const atoms = ['true', 'false', 'null']\nexport const types = [\n 'string',\n 'long',\n 'serial',\n 'bool',\n 'boolean',\n 'double',\n 'float',\n 'time',\n 'timestamp',\n 'char',\n 'varchar',\n 'date',\n 'datetime'\n]\nexport const placeholders = [\n 'now_date',\n 'yesterday_date',\n 'tomorrow_date',\n 'today_date',\n 'now_start',\n 'yesterday_start',\n 'tomorrow_start',\n 'today_start',\n 'now',\n 'yesterday',\n 'tomorrow',\n 'today',\n 'currentUsername',\n 'currentUser',\n 'currentBu'\n]\nexport const functions = [\n 'in',\n 'dateadd',\n 'datetimeadd',\n 'duedate',\n 'birthdayin',\n 'fulltext',\n 'likeall',\n 'distance',\n 'inboundingbox'\n]\n","import ace from 'ace-builds/src-min-noconflict/ace'\nimport 'ace-builds/src-min-noconflict/mode-text'\nimport _isArray from 'lodash/isArray'\nimport _mergeWith from 'lodash/mergeWith'\n\nimport {atoms, functions, operators, placeholders, types} from './TqlConstants'\n\nexport default implicitModel =>\n class TqlHighlightRules extends ace.require('ace/mode/text_highlight_rules').TextHighlightRules {\n constructor() {\n super()\n\n const commonWhere = [\n {\n token: 'keyword.operator.conjunction',\n regex: /(\\s*)(and|or|not)($|\\s+)/,\n caseInsensitive: true\n },\n {\n token: 'support.class.relation',\n regex: /rel/,\n push: 'model'\n },\n {\n token: 'keyword.exists',\n regex: /exists\\s*/,\n push: 'exists',\n caseInsensitive: true\n },\n {\n token: 'keyword.count',\n regex: /count\\s*/,\n push: 'count',\n caseInsensitive: true\n },\n {\n token: [\n 'keyword.function.nice_function',\n 'paren.lparen.function_arguments',\n 'text.function_arguments',\n 'paren.rparen',\n 'text.whitespace'\n ],\n regex: `((?:${functions.join('|')})\\\\s*)(\\\\()(.*?)(\\\\))($|\\\\s+)`,\n caseInsensitive: true\n },\n {\n token: 'keyword.other.chaining',\n regex: /\\./\n },\n {\n token: 'support.function.field',\n regex: /([a-z_]+)($|\\s+)/,\n push: 'comparison'\n }\n ]\n\n const customRules = {\n start: implicitModel\n ? [\n {\n token: 'keyword.where',\n regex: /\\s*/,\n next: 'rootwhere',\n caseInsensitive: true\n }\n ]\n : [\n {\n token: 'keyword.find',\n regex: /find($|\\s+)/,\n push: 'model',\n caseInsensitive: true\n },\n {\n token: 'keyword.where',\n regex: /where($|\\s+)/,\n next: 'rootwhere',\n caseInsensitive: true\n }\n ],\n model: [\n {\n token: 'support.class.model',\n regex: /[A-Z][a-z_0-9]*\\s*/,\n next: 'pop'\n }\n ],\n rootwhere: [\n {\n token: 'keyword.order_by',\n regex: /order by($|\\s+)/,\n next: 'order',\n caseInsensitive: true\n },\n ...commonWhere\n ],\n comparison: [\n {\n token: 'keyword.operator.comparison',\n regex: `(${operators.join('|')})\\\\s*`,\n next: 'value'\n }\n ],\n value: [\n {\n token: 'string',\n regex: /\".*?\"\\s*/,\n next: 'pop'\n },\n {\n token: 'constant.numeric',\n regex: /\\d+(.\\d+)?\\s*/,\n next: 'pop'\n },\n {\n token: 'constant.language.tocco_placeholder',\n regex: `\\\\:(${placeholders.join('|')})\\\\s*`,\n next: 'pop',\n caseInsensitive: true\n },\n {\n token: 'constant.language',\n regex: `(${atoms.join('|')})\\\\s*`,\n next: 'pop',\n caseInsensitive: true\n },\n {\n token: 'support.type',\n regex: `(${types.join('|')}):\\\\s*`,\n caseInsensitive: true\n }\n ],\n exists: [\n {\n token: 'paren.lparen',\n regex: /\\(\\s*/\n },\n {\n token: 'support.class.relation',\n regex: /rel/,\n push: 'model'\n },\n {\n token: 'keyword.other.chaining',\n regex: /\\./\n },\n {\n token: 'keyword.where',\n regex: /where($|\\s+)/,\n next: 'existswhere',\n caseInsensitive: true\n },\n {\n token: 'paren.rparen',\n regex: /\\)\\s*/,\n next: 'pop'\n }\n ],\n existswhere: [\n ...commonWhere,\n {\n token: 'paren.rparen',\n regex: /\\)\\s*/,\n next: 'pop'\n }\n ],\n count: [\n {\n token: 'paren.lparen',\n regex: /\\(\\s*/\n },\n {\n token: 'support.class.relation',\n regex: /rel/,\n push: 'model'\n },\n {\n token: 'keyword.other.chaining',\n regex: /\\./\n },\n {\n token: 'keyword.where',\n regex: /where($|\\s+)/,\n next: 'countwhere',\n caseInsensitive: true\n },\n {\n token: 'paren.rparen',\n regex: /\\)\\s*/,\n next: 'comparison'\n }\n ],\n countwhere: [\n ...commonWhere,\n {\n token: 'paren.rparen',\n regex: /\\)\\s*/,\n next: 'comparison'\n }\n ],\n order: [\n {\n token: 'support.class.relation',\n regex: /rel/,\n push: 'model'\n },\n {\n token: 'keyword.other.chaining',\n regex: /\\./\n },\n {\n token: ['support.function.field', 'keyword.direction', 'separator'],\n regex: /([a-z_]+\\s*)(asc|desc)?($|,|\\s+)/\n }\n ]\n }\n this.$rules = _mergeWith(this.$rules, customRules, (objValue, srcValue) =>\n _isArray(objValue) ? objValue.concat(srcValue) : undefined\n )\n\n this.normalizeRules()\n }\n }\n","import ace from 'ace-builds/src-min-noconflict/ace'\nimport 'ace-builds/src-min-noconflict/mode-text'\nimport 'ace-builds/src-min-noconflict/mode-html'\nimport _isArray from 'lodash/isArray'\nimport _mergeWith from 'lodash/mergeWith'\n\nimport TqlHighlighter from './TqlHighlighter'\n\n/** this is a copy from https://github.com/ajaxorg/ace/blob/master/lib/ace/mode/ftl_highlight_rules.js but with angled\n * brackets replaced with square brackets as described in\n * https://freemarker.apache.org/docs/dgui_misc_alternativesyntax.html\n *\n * TODO add auto-complete? only for tocco functions? TOCDEV-4496\n * TODO implement possibility to switch between the two and open PR with ACE repository? TOCDEV-4495\n **/\nexport class ToccoFtlLangHighlightRules extends ace.require('ace/mode/text_highlight_rules').TextHighlightRules {\n constructor() {\n super()\n\n const stringBuiltIns =\n '\\\\?|substring|cap_first|uncap_first|capitalize|chop_linebreak|date|time|datetime|' +\n 'ends_with|html|groups|index_of|j_string|js_string|json_string|last_index_of|length|lower_case|' +\n 'left_pad|right_pad|contains|matches|number|replace|rtf|url|split|starts_with|string|trim|' +\n 'upper_case|word_list|xhtml|xml'\n const numberBuiltIns = 'c|round|floor|ceiling'\n const dateBuiltIns = 'iso_[a-z_]+'\n const seqBuiltIns = 'first|last|seq_contains|seq_index_of|seq_last_index_of|reverse|size|sort|sort_by|chunk'\n const hashBuiltIns = 'keys|values'\n const xmlBuiltIns = 'children|parent|root|ancestors|node_name|node_type|node_namespace'\n const expertBuiltIns =\n 'byte|double|float|int|long|short|number_to_date|number_to_time|number_to_datetime|' +\n 'eval|has_content|interpret|is_[a-z_]+|namespacenew'\n const allBuiltIns =\n stringBuiltIns + numberBuiltIns + dateBuiltIns + seqBuiltIns + hashBuiltIns + xmlBuiltIns + expertBuiltIns\n\n const deprecatedBuiltIns = 'default|exists|if_exists|web_safe'\n\n const variables =\n 'data_model|error|globals|lang|locale|locals|main|namespace|node|current_node|' +\n 'now|output_encoding|template_name|url_escaping_charset|vars|version'\n\n const operators = 'gt|gte|lt|lte|as|in|using'\n\n const reserved = 'true|false'\n\n const attributes =\n 'encoding|parse|locale|number_format|date_format|time_format|datetime_format|time_zone|' +\n 'url_escaping_charset|classic_compatible|strip_whitespace|strip_text|strict_syntax|ns_prefixes|' +\n 'attributes'\n\n this.$rules = {\n start: [\n {\n token: 'constant.character.entity',\n regex: /&[^;]+;/\n },\n {\n token: 'support.function',\n regex: '\\\\?(' + allBuiltIns + ')'\n },\n {\n token: 'support.function.deprecated',\n regex: '\\\\?(' + deprecatedBuiltIns + ')'\n },\n {\n token: 'language.variable',\n regex: '\\\\.(?:' + variables + ')'\n },\n {\n token: 'constant.language',\n regex: '\\\\b(' + reserved + ')\\\\b'\n },\n {\n token: 'keyword.operator',\n regex: '\\\\b(?:' + operators + ')\\\\b'\n },\n {\n token: 'entity.other.attribute-name',\n regex: attributes\n },\n {\n token: 'string', //\n regex: /['\"]/,\n next: 'qstring'\n },\n {\n // Deal with variable names that contains number\n // e.g. <#if var42 == 42 >\n token: function (value) {\n if (value.match('^[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?$')) {\n return 'constant.numeric'\n } else {\n return 'variable'\n }\n },\n regex: /[\\w.+-]+/\n },\n {\n token: 'keyword.operator',\n regex:\n '!|\\\\.|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|&&|\\\\|\\\\||\\\\?\\\\:' +\n '|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^='\n },\n {\n token: 'paren.lparen',\n regex: '[[({]'\n },\n {\n token: 'paren.rparen',\n regex: '[\\\\])}]'\n },\n {\n token: 'text',\n regex: '\\\\s+'\n }\n ],\n\n qstring: [\n {\n token: 'constant.character.escape',\n regex: '\\\\\\\\[nrtvef\\\\\\\\\"$]'\n },\n {\n token: 'string',\n regex: /['\"]/,\n next: 'start'\n },\n {\n defaultToken: 'string'\n }\n ]\n }\n }\n}\n\nexport default class ToccoFtlHighlightRules extends ace.require('ace/mode/html_highlight_rules').HtmlHighlightRules {\n constructor() {\n super()\n\n const directives =\n 'assign|attempt|break|case|compress|default|elseif|else|escape|fallback|function|flush|' +\n 'ftl|global|if|import|include|list|local|lt|macro|nested|noescape|noparse|nt|recover|recurse|return|rt|' +\n 'setting|stop|switch|t|visit'\n\n const tqlDirectives = ['query', 'queryCount']\n\n const startRules = [\n {\n token: 'keyword.function',\n regex: `\\\\[@(${tqlDirectives.join('|')}).*?]`,\n push: 'tql-start'\n },\n {\n token: 'comment',\n regex: '\\\\[#--',\n next: 'ftl-dcomment'\n },\n {\n token: 'string.interpolated',\n regex: '\\\\${',\n push: 'ftl-start'\n },\n {\n token: 'keyword.function',\n regex: '\\\\[/?#(' + directives + ')',\n push: 'ftl-start'\n },\n {\n token: 'keyword.other',\n regex: '\\\\[/?@[a-zA-Z\\\\.]+',\n push: 'ftl-start'\n }\n ]\n\n const endRules = [\n {\n token: 'keyword',\n regex: '/?\\\\]',\n next: 'pop'\n },\n {\n token: 'string.interpolated',\n regex: '}',\n next: 'pop'\n }\n ]\n\n for (const key in this.$rules) {\n this.$rules[key].unshift.apply(this.$rules[key], startRules)\n }\n\n this.embedRules(ToccoFtlLangHighlightRules, 'ftl-', endRules, ['start'])\n\n this.addRules({\n 'ftl-dcomment': [\n {\n token: 'comment',\n regex: '--\\\\]',\n next: 'pop'\n },\n {\n defaultToken: 'comment'\n }\n ]\n })\n\n const tqlEndRules = [\n {\n token: 'keyword.function',\n regex: `\\\\[/@(${tqlDirectives.join('|')})]`,\n next: 'pop'\n }\n ]\n\n this.embedRules(TqlHighlighter(), 'tql-', tqlEndRules, ['start'])\n\n const mergingRules = {\n 'tql-rootwhere': [\n {\n token: 'keyword.function',\n regex: `\\\\[/@(${tqlDirectives.join('|')})]`,\n next: 'pop'\n }\n ],\n 'tql-order': [\n {\n token: 'keyword.function',\n regex: `\\\\[/@(${tqlDirectives.join('|')})]`,\n next: 'pop'\n }\n ]\n }\n this.$rules = _mergeWith(this.$rules, mergingRules, (objValue, srcValue) =>\n _isArray(objValue) ? objValue.concat(srcValue) : undefined\n )\n\n this.normalizeRules()\n }\n}\n","import ace from 'ace-builds/src-min-noconflict/ace'\n\nimport {extractBody, sendRequest} from './requestHelper'\nimport {functions, placeholders, types} from './TqlConstants'\n\nconst TokenIterator = ace.require('ace/token_iterator').TokenIterator\nconst getTokenType = token => (token ? token.type.substring(token.type.lastIndexOf('.') + 1) : null)\n\nconst isCurrentTokenOfType = (iterator, type) => getTokenType(iterator.getCurrentToken()) === type\n\nconst findLastPathStep = iterator => {\n if (isCurrentTokenOfType(iterator, 'model')) {\n iterator.stepBackward()\n }\n if (isCurrentTokenOfType(iterator, 'field') || isCurrentTokenOfType(iterator, 'relation')) {\n iterator.stepBackward()\n }\n if (isCurrentTokenOfType(iterator, 'chaining')) {\n iterator.stepBackward()\n } else {\n return null\n }\n\n if (isCurrentTokenOfType(iterator, 'model')) {\n const modelToken = iterator.getCurrentToken()\n iterator.stepBackward()\n iterator.stepBackward()\n return modelToken ? modelToken.value.trim() : null\n } else {\n return null\n }\n}\n\nconst stepBackUntilToken = (iterator, type) => {\n while (!isCurrentTokenOfType(iterator, type)) {\n if (!iterator.stepBackward()) {\n return false\n }\n }\n return true\n}\n\nconst handleParentheses = (iterator, parenCount) => {\n if (isCurrentTokenOfType(iterator, 'rparen')) {\n return 1\n } else if (parenCount > 0 && isCurrentTokenOfType(iterator, 'lparen')) {\n iterator.stepBackward()\n return -1\n } else {\n return 0\n }\n}\n\nconst findLastModelScope = iterator => {\n let parenCount = 0\n while (iterator.getCurrentToken()) {\n if (parenCount === 0 && isCurrentTokenOfType(iterator, 'where')) {\n const modelToken = iterator.stepBackward()\n return modelToken ? [modelToken.value.trim(), ...findCurrentPath(iterator)] : []\n }\n if (isCurrentTokenOfType(iterator, 'order_by')) {\n if (stepBackUntilToken(iterator, 'find')) {\n const modelToken = iterator.stepForward()\n return modelToken ? modelToken.value.trim() : []\n } else {\n return []\n }\n }\n parenCount += handleParentheses(iterator, parenCount)\n if (!iterator.stepBackward()) {\n return null\n }\n }\n return null\n}\n\nconst backtrack = (iterator, stepBack) => {\n const steps = []\n let lastStep = stepBack(iterator)\n while (lastStep) {\n if (Array.isArray(lastStep)) {\n lastStep.forEach(step => steps.unshift(step))\n } else {\n steps.unshift(lastStep)\n }\n lastStep = stepBack(iterator)\n }\n return steps\n}\n\nexport const findCurrentPath = iterator => backtrack(iterator, findLastPathStep)\nexport const findCurrentModelScope = iterator => backtrack(iterator, findLastModelScope)\n\n/**\n * built-in language completions use 1000000, which also seems to just be some magic number\n * keyword and local completions seem to be somewhere around 100 based on some experiments with ordering\n **/\nconst defaultScore = 1000\n\nconst loadModels = () =>\n sendRequest('entities')\n .then(extractBody)\n .then(body => (body ? body.entities : {}))\n .then(entities => (entities ? Object.keys(entities) : []))\n\nconst buildRelationLabel = relation =>\n relation.relationName.substring(3) !== relation.targetEntity\n ? `${relation.relationName} (${relation.targetEntity})`\n : relation.relationName\n\nconst buildResolveUrl = (sourceModel, relationSteps) => {\n const resolvePart = relationSteps.length > 0 ? '/resolve?path=' + relationSteps.join('.') : ''\n return `entities/${sourceModel}/model${resolvePart}`\n}\n\nconst resolvePath = ([sourceModel, ...relationSteps]) =>\n sendRequest(buildResolveUrl(sourceModel, relationSteps))\n .then(extractBody)\n .then(body => {\n if (!body) {\n return []\n }\n const fields = body.fields || []\n const relations = body.relations || []\n return [\n ...fields.map(f => ({\n label: `${f.fieldName} (${f.type})`,\n value: f.fieldName,\n type: 'field'\n })),\n ...relations.map(r => ({\n label: buildRelationLabel(r),\n value: r.relationName,\n type: 'relation'\n }))\n ]\n })\n\nconst determineModelScope = (createIterator, implicitModel) => {\n if (implicitModel) {\n const [...modelScope] = findCurrentModelScope(createIterator())\n return {baseModel: implicitModel, modelScope}\n } else {\n const [baseModel, ...modelScope] = findCurrentModelScope(createIterator())\n return {baseModel, modelScope}\n }\n}\n\nconst determineAvailablePaths = (createIterator, callback, implicitModel) => {\n const {baseModel, modelScope} = determineModelScope(createIterator, implicitModel)\n if (!baseModel) {\n return\n }\n const currentPath = findCurrentPath(createIterator())\n const relationSteps = [...modelScope, ...currentPath].map(model => `rel${model}`)\n const fullPath = [baseModel, ...relationSteps]\n resolvePath(fullPath)\n .then(paths => {\n const pathCompletions = paths.map(path => ({\n caption: path.label,\n value: path.value,\n meta: path.type,\n score: defaultScore\n }))\n callback(null, pathCompletions)\n })\n .catch(errors => callback(errors))\n}\n\nconst loadAllAvailableModels = callback =>\n loadModels()\n .then(models => {\n const modelCompletions = models.map(model => ({\n caption: model,\n value: model,\n meta: 'model',\n score: defaultScore\n }))\n callback(null, modelCompletions)\n })\n .catch(errors => callback(errors))\n\nconst getAvailableFunctions = () =>\n functions\n .map(f => f.toUpperCase())\n .map(f => ({\n caption: f,\n value: `${f}()`,\n meta: 'function',\n score: defaultScore - 30\n }))\n\nconst getAvailableTypes = () =>\n types.map(type => ({\n caption: type,\n value: `${type}:`,\n meta: 'type',\n score: defaultScore - 20\n }))\n\nconst getAvailablePlaceholders = () =>\n placeholders.map(placeholder => ({\n caption: placeholder,\n value: `:${placeholder}`,\n meta: 'placeholder',\n score: defaultScore - 10\n }))\n\nexport default implicitModel => ({\n getCompletions: (editor, session, pos, prefix, callback) => {\n const createIteratorAtCurrentPosition = () => new TokenIterator(session, pos.row, pos.column)\n\n const iterator = createIteratorAtCurrentPosition()\n const currentToken = iterator.getCurrentToken()\n const previousToken = iterator.stepBackward() ? iterator.getCurrentToken() : null\n switch (getTokenType(currentToken)) {\n case 'chaining':\n case 'relation':\n case 'separator':\n case 'order_by':\n case 'count':\n case 'exists':\n case 'field':\n case 'function_arguments':\n determineAvailablePaths(createIteratorAtCurrentPosition, callback, implicitModel)\n break\n case 'where':\n case 'conjunction':\n determineAvailablePaths(createIteratorAtCurrentPosition, callback, implicitModel)\n callback(null, getAvailableFunctions())\n break\n case 'nice_function':\n callback(null, getAvailableFunctions())\n break\n case 'find':\n loadAllAvailableModels(callback)\n break\n case 'type':\n case 'tocco_placeholder':\n case 'comparison':\n callback(null, getAvailableTypes())\n callback(null, getAvailablePlaceholders())\n break\n case 'model':\n determineAvailablePaths(createIteratorAtCurrentPosition, callback, implicitModel)\n if (previousToken && getTokenType(previousToken) !== 'relation') {\n loadAllAvailableModels(callback)\n }\n break\n case null:\n // this happens when nothing has been entered, which is a valid start with an implicit model, treat like where\n if (implicitModel) {\n determineAvailablePaths(createIteratorAtCurrentPosition, callback, implicitModel)\n }\n callback(null, getAvailableFunctions())\n break\n }\n }\n})\n","import ace from 'ace-builds/src-min-noconflict/ace'\nimport 'ace-builds/src-min-noconflict/mode-ftl'\n\nimport ToccoFtlHighlightRules from './FtlHighlighter'\nimport TqlAutoCompleter from './TqlAutoCompleter'\n\nexport default class ToccoFtlMode extends ace.require('ace/mode/ftl').Mode {\n constructor() {\n super()\n this.HighlightRules = ToccoFtlHighlightRules\n this.completer = TqlAutoCompleter()\n }\n}\n","import ace from 'ace-builds/src-min-noconflict/ace'\nimport 'ace-builds/src-min-noconflict/mode-text'\n\nimport TqlAutoCompleter from './TqlAutoCompleter'\nimport TqlHighlighter from './TqlHighlighter'\n\nexport default class TqlMode extends ace.require('ace/mode/text').Mode {\n constructor({implicitModelName}) {\n super()\n this.HighlightRules = TqlHighlighter(implicitModelName)\n this.completer = TqlAutoCompleter(implicitModelName)\n this.snippedIdField = null // TODO implement? TOCDEV-4499\n }\n}\n","import ace from 'ace-builds/src-min-noconflict/ace'\nimport 'ace-builds/webpack-resolver'\nimport {Mode as DroolsMode} from 'ace-builds/src-min-noconflict/mode-drools'\nimport {Mode as GroovyMode} from 'ace-builds/src-min-noconflict/mode-groovy'\nimport {Mode as HtmlMode} from 'ace-builds/src-min-noconflict/mode-html'\nimport {Mode as JsonMode} from 'ace-builds/src-min-noconflict/mode-json'\nimport {Mode as LessMode} from 'ace-builds/src-min-noconflict/mode-less'\nimport {Mode as PropertiesMode} from 'ace-builds/src-min-noconflict/mode-properties'\nimport {Mode as TextMode} from 'ace-builds/src-min-noconflict/mode-text'\nimport {Mode as XmlMode} from 'ace-builds/src-min-noconflict/mode-xml'\nimport _get from 'lodash/get'\nimport _isObject from 'lodash/isObject'\nimport _isString from 'lodash/isString'\nimport React, {useEffect, useMemo, useRef} from 'react'\nimport styled from 'styled-components'\n\nimport AceEditorPropTypes from './AceEditorPropTypes'\nimport 'ace-builds/src-min-noconflict/snippets/ftl'\nimport 'ace-builds/src-min-noconflict/snippets/groovy'\nimport 'ace-builds/src-min-noconflict/snippets/html'\nimport 'ace-builds/src-min-noconflict/snippets/less'\nimport 'ace-builds/src-min-noconflict/snippets/xml'\nimport 'ace-builds/src-min-noconflict/snippets/properties'\nimport 'ace-builds/src-min-noconflict/snippets/json'\nimport 'ace-builds/src-min-noconflict/snippets/drools'\nimport 'ace-builds/src-min-noconflict/theme-textmate'\nimport 'ace-builds/src-min-noconflict/ext-language_tools'\nimport {extractBody, sendRequest} from './requestHelper'\nimport ToccoFtlMode from './ToccoFtlMode'\nimport TqlMode from './TqlMode'\n\nconst StyledEditor = styled.div`\n width: 100%;\n z-index: 0; /* gutter lays over menu otherwise */\n`\n\nconst modeMappings = {\n groovy: () => new GroovyMode(),\n html: () => new HtmlMode(),\n xml: () => new XmlMode(),\n properties: () => new PropertiesMode(),\n json: () => new JsonMode(),\n htmlmixed: () => new ToccoFtlMode(),\n freemarkermixed: () => new ToccoFtlMode(),\n ftl: () => new ToccoFtlMode(),\n tql: props => new TqlMode(props),\n less: () => new LessMode(),\n drools: () => new DroolsMode(),\n text: () => new TextMode()\n}\n\nconst getMode = (mode, props) => _get(modeMappings, mode, mode)(props)\n\nconst loadImplicitModel = implicitModel => {\n if (_isString(implicitModel)) {\n return Promise.resolve(implicitModel)\n } else if (_isObject(implicitModel)) {\n return sendRequest(`entities/2.0/${implicitModel.entityModel}/${implicitModel.key}?_paths=${implicitModel.field}`)\n .then(extractBody)\n .then(moduleEntity => _get(moduleEntity, ['paths', 'entity_name', 'value'], null))\n } else {\n return Promise.resolve(null)\n }\n}\n\nconst setEditorConfiguration = (editor, {mode, theme, showGutter, editorOptions = {}, implicitModel}) => {\n loadImplicitModel(implicitModel)\n .then(implicitModelName => getMode(mode, {implicitModelName}))\n .then(editorMode => editor.getSession().setMode(editorMode))\n editor.setTheme(`ace/theme/${theme}`)\n Object.entries(editorOptions).forEach(([k, v]) => {\n editor.setOption(k, v)\n })\n editor.renderer.setShowGutter(showGutter)\n editor.resize()\n}\n\nconst AceEditor = props => {\n const {mode, theme = 'textmate', value, onChange, showGutter = true, editorOptions = {}, implicitModel} = props\n const containerReference = useRef(null)\n const editorReference = useRef(null)\n\n const editorConfig = useMemo(\n () => ({mode, theme, showGutter, editorOptions, implicitModel}),\n [mode, theme, showGutter, editorOptions, implicitModel]\n )\n\n // only on mount\n useEffect(() => {\n const aceEditor = ace.edit(containerReference.current)\n aceEditor.getSession().setValue(value || '')\n aceEditor.on('change', () => onChange(aceEditor.getValue()))\n setEditorConfiguration(aceEditor, editorConfig)\n editorReference.current = aceEditor\n\n return () => aceEditor.destroy()\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n if (editorReference.current) {\n setEditorConfiguration(editorReference.current, editorConfig)\n }\n }, [editorConfig])\n useEffect(() => {\n /* ace handles its state internally, always resetting the value confuses it.\n * this way we only set the value when it is different from the current state, i.e. when it is overwritten through\n * code. feel free to rewrite this with better ideas.\n */\n if (editorReference.current && value && value !== editorReference.current.getValue()) {\n editorReference.current.getSession().setValue(value)\n }\n }, [value])\n\n return <StyledEditor ref={containerReference} />\n}\n\nAceEditor.propTypes = AceEditorPropTypes\n\nexport default AceEditor\n","import styled, {css} from 'styled-components'\n\nimport {declareFont, theme} from '../utilStyles'\n\nconst StyledEditableWrapperCss = css`\n align-items: center;\n cursor: ${({immutable}) => (immutable ? 'not-allowed' : 'default')};\n display: flex;\n`\n\nconst StyledEditableWrapper = styled.label`\n overflow-x: auto;\n\n &&& {\n margin: 0; /* reset Bootstrap and Ext JS */\n padding: 0; /* reset Ext JS */\n ${StyledEditableWrapperCss}\n }\n`\n\nconst StyledInputCss = css`\n background-color: transparent;\n border: 0;\n cursor: ${({immutable}) => (immutable ? 'not-allowed' : 'default')};\n flex-grow: 1;\n min-height: 2.6rem;\n min-width: 0;\n outline: 0;\n padding: 0;\n ${() =>\n declareFont({\n color: theme.color('text')\n })}\n &::-ms-clear {\n display: none;\n }\n\n &::-webkit-clear-button {\n display: none;\n }\n\n &::-webkit-inner-spin-button {\n display: none;\n }\n\n &[type='number'] {\n appearance: textfield;\n }\n\n &[type='search'] {\n appearance: none;\n }\n\n &:disabled {\n -webkit-text-fill-color: ${theme.color('text')}; // Safari fix\n opacity: 1; // iOS fix\n }\n\n /* remove indicators */\n &[type='date'],\n &[type='datetime-local'],\n &[type='month'],\n &[type='time'],\n &[type='week'] {\n appearance: none;\n display: flex;\n\n /* reset margin on smaller screens */\n ::-webkit-date-and-time-value {\n ${({immutable}) => immutable && 'margin: unset;'}\n }\n }\n\n // allow pointer event only on touch devices\n @media (pointer: coarse) {\n pointer-events: ${({immutable}) => (immutable ? 'none' : 'auto')};\n }\n`\n\nconst StyledEditableControlCss = css`\n display: flex;\n align-items: center;\n`\n\nconst StyledEditableControl = styled.div`\n &&& {\n ${StyledEditableControlCss}\n }\n`\n\nexport const StyledEditableValue = styled.span`\n width: 100%;\n\n && {\n //url\n [type='url'] + .input-group-addon > a {\n color: inherit; // reset bootstrap default\n }\n\n //url\n [type='tel'] + .input-group-addon > a {\n color: inherit; // reset bootstrap default\n }\n\n //html edit\n .quill {\n .ql-toolbar {\n border-top-left-radius: 0.27rem;\n border-top-right-radius: 0.27rem;\n }\n\n .ql-container {\n border-bottom-left-radius: 0.27rem;\n border-bottom-right-radius: 0.27rem;\n background-color: #fff;\n }\n\n .ql-container.ql-disabled {\n border-top-left-radius: 0.27rem;\n border-top-right-radius: 0.27rem;\n\n .ql-editor {\n cursor: not-allowed;\n }\n }\n }\n\n //date\n .date-edit {\n .input-group-addon {\n cursor: pointer;\n }\n\n input {\n z-index: 0;\n }\n\n &.disabled {\n input {\n cursor: not-allowed;\n }\n }\n\n .right-addon {\n position: relative;\n }\n\n .right-addon input {\n padding-right: 30px;\n }\n\n .reset {\n position: absolute;\n padding-right: 10px;\n padding-top: 5px;\n right: 0;\n color: #999;\n font-size: 18px;\n font-style: normal;\n cursor: pointer;\n }\n\n .reset:hover {\n color: ${theme.color('signal.danger.text')};\n }\n }\n }\n`\n\nexport {\n StyledEditableControl,\n StyledEditableControlCss,\n StyledEditableValue as default,\n StyledEditableWrapper,\n StyledEditableWrapperCss,\n StyledInputCss\n}\n","import '!style-loader!css-loader!flatpickr/dist/themes/light.css'\nimport flatpickr from 'flatpickr'\nimport {German} from 'flatpickr/dist/l10n/de.js'\nimport {French} from 'flatpickr/dist/l10n/fr.js'\nimport {Italian} from 'flatpickr/dist/l10n/it.js'\nimport {useEffect, useRef} from 'react'\nimport {react, js} from 'tocco-util'\n\nconst localeMap = {\n 'de-CH': German,\n de: German,\n fr: French,\n it: Italian\n}\n\nconst handleOnChange = onChange => selectedDates => {\n if (selectedDates && selectedDates.length > 0) {\n onChange(selectedDates[0].toISOString())\n } else {\n onChange(null)\n }\n}\n\nconst initializeFlatPickr = (element, {shouldAppend, onChange, value, fontFamily, locale, flatpickrOptions}) => {\n const calendarLocale = localeMap[locale]\n\n const options = {\n wrap: true,\n onChange: handleOnChange(onChange),\n altInput: false,\n enableTime: false,\n defaultDate: value,\n\n ...(shouldAppend ? {appendTo: element.current} : {}),\n ...(calendarLocale ? {locale: calendarLocale} : {}),\n ...flatpickrOptions\n }\n\n const flatpickrInstance = flatpickr(element.current, options)\n\n if (fontFamily) {\n flatpickrInstance.calendarContainer.style.fontFamily = fontFamily\n }\n\n return flatpickrInstance\n}\n\nexport const useDatePickr = (element, config) => {\n const {value, locale, flatpickrOptions} = config\n const flatpickr = useRef(null)\n\n const prevFlatpickrOptions = react.usePrevious(flatpickrOptions)\n\n const init = () => {\n flatpickr.current = initializeFlatPickr(element, config)\n return flatpickr.current\n }\n\n useEffect(() => {\n return () => {\n if (flatpickr.current) {\n flatpickr.current.destroy()\n }\n }\n }, []) // only on unmount\n\n // only trigger useEffect when value array changed (deep comparison workaround)\n useEffect(() => {\n if (flatpickr.current) {\n flatpickr.current.setDate(value, false)\n flatpickr.current.redraw()\n }\n }, [JSON.stringify(value)]) // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n const calendarLocale = localeMap[locale] || flatpickr.current?.l10ns?.en // fallback to english\n if (flatpickr.current && calendarLocale) {\n flatpickr.current.localize(calendarLocale)\n flatpickr.current.set('locale', calendarLocale)\n flatpickr.current.redraw()\n }\n }, [locale])\n\n // prevFlatpickrOptions can be ignored\n useEffect(() => {\n if (flatpickr.current) {\n const optionsDiff = js.difference(flatpickrOptions, prevFlatpickrOptions)\n if (Object.keys(optionsDiff).length > 0) {\n Object.entries(optionsDiff).forEach(([key, value]) => {\n flatpickr.current.set(key, value)\n })\n flatpickr.current.redraw()\n }\n }\n }, [flatpickrOptions]) // eslint-disable-line react-hooks/exhaustive-deps\n\n return init\n}\n","import styled from 'styled-components'\n\nimport {StyledEditableWrapperCss, StyledInputCss} from '../StyledEditableValue'\n\nexport const StyledDatePickerInput = styled.input`\n &&& {\n ${StyledInputCss}\n margin: 0;\n }\n`\n\nexport const StyledDatePickerValue = styled.div`\n && {\n ${StyledInputCss}\n display: flex;\n align-items: center;\n }\n`\n\nexport const StyledDatePickerOuterWrapper = styled.div`\n outline: ${({immutable}) => (immutable ? 0 : 'initial')};\n`\n\nexport const StyledDatePickerWrapper = styled.div`\n && {\n ${StyledEditableWrapperCss}\n\n input {\n display: ${({immutable}) => (immutable ? 'none' : 'block')};\n\n &:last-of-type {\n display: ${({immutable}) => (immutable ? 'block' : 'none')};\n }\n }\n }\n`\n","import PropTypes from 'prop-types'\nimport React, {useRef, useState} from 'react'\nimport {injectIntl} from 'react-intl'\nimport {withTheme} from 'styled-components'\n\nimport Ball from '../../Ball'\nimport {useDatePickr} from '../../DatePicker/useDatePickr'\nimport {theme} from '../../utilStyles'\nimport {\n StyledDatePickerInput,\n StyledDatePickerWrapper,\n StyledDatePickerOuterWrapper,\n StyledDatePickerValue\n} from './StyledDatePicker'\n\nconst focusFlatpickrInput = wrapper => {\n // flatpickr add two input in the DOM. One for the actual value (hidden) and one for the altInput\n const inputElement = wrapper.querySelector('input.flatpickr-input:not([type=\"hidden\"])')\n if (inputElement) {\n inputElement.focus()\n }\n}\n\nconst DatePicker = props => {\n const {immutable, id, options, value, onChange, parseDate, formatDate, intl} = props\n const [initialized, setInitialized] = useState(false)\n const flatpickr = useRef(null)\n const wrapper = useRef(null)\n const locale = intl.locale\n const msg = id => intl.formatMessage({id})\n\n const fontFamily = theme.fontFamily('regular')(props)\n\n const handleOnChange = val => {\n if (val) {\n onChange([val])\n }\n }\n\n const flatpickrOptions = {\n altInput: true,\n altInputClass: '',\n clickOpens: !immutable,\n ...(options ? options.flatpickrOptions : {})\n }\n const initializeFlatPickr = useDatePickr(wrapper, {\n value,\n onChange: handleOnChange,\n fontFamily,\n locale,\n flatpickrOptions\n })\n\n const init = () => {\n flatpickr.current = initializeFlatPickr()\n\n flatpickr.current.calendarContainer.classList.add('tocco-ui-theme')\n flatpickr.current.calendarContainer.addEventListener('keydown', handleConfirmKey)\n setInitialized(true)\n }\n\n const altInput = flatpickr.current?.altInput?.value || ''\n\n const handleOnBlur = () => {\n const parsed = parseDate(flatpickr.current.altInput.value)\n flatpickr.current.setDate(parsed, true)\n }\n\n const focusInput = () => {\n if (!initialized) {\n init()\n\n /**\n * Workaround:\n * To be sure that the initialized state has been updated\n * before we change the focus we delay this to the next tick.\n */\n setTimeout(() => {\n focusFlatpickrInput(wrapper.current)\n })\n } else {\n focusFlatpickrInput(wrapper.current)\n }\n }\n\n const handleConfirmKey = e => {\n if ((!e.target.classList.contains('flatpickr-hour') && e.key === 'Tab' && !e.shiftKey) || e.key === 'Enter') {\n handleOnBlur()\n setTimeout(() => {\n flatpickr.current.close()\n })\n }\n if (e.key === 'Enter') {\n e.preventDefault()\n e.stopPropagation()\n }\n }\n\n const hasValue = value && value.length > 0 && value.every(v => v)\n\n return (\n <>\n <StyledDatePickerOuterWrapper\n immutable={immutable}\n id={id}\n tabIndex=\"-1\"\n onFocus={() => {\n focusInput()\n\n if (flatpickr.current) {\n flatpickr.current.open()\n }\n }}\n onKeyDown={handleConfirmKey}\n >\n <StyledDatePickerWrapper data-wrap onBlur={handleOnBlur} immutable={immutable} ref={wrapper}>\n <StyledDatePickerInput\n {...(immutable ? {disabled: 'disabled'} : {})}\n type=\"hidden\"\n data-input\n immutable={immutable}\n {...(options ? {placeholder: options.placeholderText} : {})}\n />\n {!initialized && (\n <StyledDatePickerValue tabIndex={0}>{hasValue ? formatDate(value[0]) : ''}</StyledDatePickerValue>\n )}\n <StyledDatePickerInput disabled immutable={immutable} value={altInput} />\n {!immutable && hasValue && (\n <Ball\n icon=\"times\"\n tabIndex={-1}\n aria-label={msg('client.component.dateAbstract.clearDateLabel')}\n onMouseDown={e => {\n e.preventDefault()\n onChange(null)\n }}\n />\n )}\n </StyledDatePickerWrapper>\n </StyledDatePickerOuterWrapper>\n </>\n )\n}\n\nDatePicker.propTypes = {\n id: PropTypes.string,\n intl: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n value: PropTypes.arrayOf(PropTypes.string),\n options: PropTypes.shape({\n placeholderText: PropTypes.string,\n flatpickrOptions: PropTypes.object\n }),\n parseDate: PropTypes.func,\n formatDate: PropTypes.func,\n immutable: PropTypes.bool,\n initialized: PropTypes.func,\n events: PropTypes.shape({\n onFocus: PropTypes.func\n })\n}\n\nexport default withTheme(injectIntl(DatePicker))\n","import styled from 'styled-components'\n\nexport const StyledFontAwesomeAdapterWrapper = styled.span``\n","import {library} from '@fortawesome/fontawesome-svg-core'\nimport {\n faApple,\n faDropbox,\n faFacebook,\n faFacebookF,\n faGoogle,\n faJira,\n faMicrosoft\n} from '@fortawesome/free-brands-svg-icons'\nimport {\n faAbacus,\n faAddressCard,\n faArrowLeft,\n faArrowRight,\n faArrowToBottom,\n faArrowToTop,\n faBarcodeAlt,\n faBars,\n faBell,\n faBolt,\n faBook,\n faBox,\n faBoxOpen,\n faCalendarCheck,\n faChalkboardTeacher,\n faChartNetwork,\n faCheck,\n faCheckCircle,\n faChevronDoubleDown,\n faChevronDoubleLeft,\n faChevronDoubleRight,\n faChevronDoubleUp,\n faChevronDown,\n faChevronLeft,\n faChevronRight,\n faChevronUp,\n faCircle,\n faCode,\n faCog,\n faComment,\n faCompress,\n faCube,\n faEllipsisV,\n faExclamation,\n faExclamationCircle,\n faExternalLink,\n faFile,\n faFileAlt,\n faFileCode,\n faFileCsv,\n faFileExcel,\n faFileExport,\n faFileImport,\n faFilePdf,\n faFileSpreadsheet,\n faFilter,\n faFolder,\n faFolders,\n faGlobe,\n faHorizontalRule,\n faIdBadge,\n faInfo,\n faInfoCircle,\n faLaptopCode,\n faList,\n faLock,\n faMailBulk,\n faMapMarked,\n faMinus,\n faNewspaper,\n faPen,\n faPhone,\n faPhoneLaptop,\n faPlus,\n faQuestionCircle,\n faSave,\n faSearch,\n faSitemap,\n faSortDown,\n faSortUp,\n faSquare,\n faStar,\n faSync,\n faTasks,\n faTimes,\n faTimesCircle,\n faTrash,\n faUpload,\n faUsers\n} from '@fortawesome/pro-light-svg-icons'\nimport {\n faPaperclip,\n faSquare as faSquareSolid,\n faSquareFull,\n faStar as faStarSolid\n} from '@fortawesome/pro-solid-svg-icons'\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome'\nimport _get from 'lodash/get'\nimport PropTypes from 'prop-types'\nimport React from 'react'\n\nimport {StyledFontAwesomeAdapterWrapper} from './StyledComponents'\n;(() => {\n library.add(\n faChevronDoubleLeft,\n faChevronDoubleRight,\n faChevronRight,\n faChevronLeft,\n faChevronUp,\n faChevronDown,\n faGlobe,\n faPlus,\n faFolder,\n faFolders,\n faStar,\n faStarSolid,\n faTimes,\n faArrowRight,\n faArrowLeft,\n faFile,\n faFileAlt,\n faFileCode,\n faFileCsv,\n faFileExcel,\n faFileExport,\n faFileImport,\n faFilePdf,\n faFileSpreadsheet,\n faIdBadge,\n faCheck,\n faExclamation,\n faCircle,\n faCheckCircle,\n faGoogle,\n faFacebook,\n faFacebookF,\n faDropbox,\n faMicrosoft,\n faJira,\n faApple,\n faBars,\n faExternalLink,\n faPhone,\n faMapMarked,\n faSearch,\n faCog,\n faInfo,\n faHorizontalRule,\n faSync,\n faSquareFull,\n faCompress,\n faBook,\n faSortUp,\n faSortDown,\n faQuestionCircle,\n faEllipsisV,\n faMinus,\n faTimesCircle,\n faInfoCircle,\n faExclamationCircle,\n faTrash,\n faList,\n faSquare,\n faBell,\n faArrowToBottom,\n faArrowToTop,\n faSquareSolid,\n faBox,\n faBoxOpen,\n faNewspaper,\n faComment,\n faSave,\n faPen,\n faPaperclip,\n faAddressCard,\n faMailBulk,\n faSitemap,\n faBarcodeAlt,\n faAbacus,\n faCalendarCheck,\n faPhoneLaptop,\n faTasks,\n faChalkboardTeacher,\n faUsers,\n faChevronDoubleDown,\n faChevronDoubleUp,\n faCube,\n faChartNetwork,\n faBolt,\n faLaptopCode,\n faUpload,\n faLock,\n faCode,\n faFilter\n )\n})()\n\n/**\n * The following icons are solely used to support custom display expressions and should not be removed: faSquareSolid\n */\n\nconst FontAwesomeAdapter = ({icon, style}) => (\n <StyledFontAwesomeAdapterWrapper>\n <FontAwesomeIcon\n icon={icon.includes(',') ? icon.replace(/\\s+/, '').split(',') : icon}\n style={style}\n {...(_get(style, 'color') && {color: style.color})}\n fixedWidth\n />\n </StyledFontAwesomeAdapterWrapper>\n)\n\nFontAwesomeAdapter.propTypes = {\n icon: PropTypes.string.isRequired,\n style: PropTypes.object\n}\n\nexport default FontAwesomeAdapter\n","import _get from 'lodash/get'\nimport PropTypes from 'prop-types'\nimport React from 'react'\n\nconst icons = {\n logo: style => (\n <svg\n height={_get(style, 'fontSize', 20)}\n {...style}\n aria-hidden=\"true\"\n role=\"img\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 512 512\"\n >\n <path\n fill=\"currentColor\"\n d={`M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 \n 8zm80 248c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80z`}\n />\n </svg>\n ),\n office: style => {\n return (\n <svg\n height={_get(style, 'fontSize', 20)}\n {...style}\n aria-hidden=\"true\"\n role=\"img\"\n enableBackground=\"new 0 0 2075 2499.8\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 2075 2499.8\"\n >\n <path\n fill=\"currentColor\"\n d={`m0 2016.6v-1519.8l1344.4-496.8 730.6 233.7v2045.9l-730.6 220.3-1344.4-483.3 1344.4 \n 161.8v-1769.2l-876.8 204.6v1198.3z`}\n />\n </svg>\n )\n }\n}\n\nconst ToccoIcons = ({icon, style}) => icons[icon](style)\n\nToccoIcons.propTypes = {\n icon: PropTypes.string.isRequired,\n style: PropTypes.object\n}\n\nexport default ToccoIcons\n","import PropTypes from 'prop-types'\nimport React from 'react'\n\nimport FontAwesomeAdapter from './FontAwesomeAdapter'\nimport mapping from './mapping'\nimport ToccoIcons from './ToccoIcons'\n\nconst iconLibsFactories = {\n fa: (iconMap, props) => <FontAwesomeAdapter {...props} icon={iconMap.id} />,\n toc: (iconMap, props) => <ToccoIcons {...props} icon={iconMap.id} />\n}\n\nexport const Icon = props => {\n const iconMap = mapping[props.icon]\n\n if (!iconMap) {\n return null\n }\n\n const iconFactory = iconLibsFactories[iconMap.lib]\n return iconFactory ? iconFactory(iconMap, props) : null\n}\n\nIcon.propTypes = {\n /**\n * id of icon. Full list can be found in mapping.json file or showcase deployment.\n */\n icon: PropTypes.string.isRequired,\n /**\n * CSS Styles object. Color property can be used to colorize the icon and fontSize for the size.\n */\n style: PropTypes.objectOf(PropTypes.string)\n}\n\nexport default Icon\n","import {faCircleNotch} from '@fortawesome/pro-solid-svg-icons'\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome'\nimport PropTypes from 'prop-types'\nimport React from 'react'\n\n/**\n * Spinner that indicates a loading process\n */\nconst LoadingSpinner = ({size, style}) => (\n <FontAwesomeIcon {...style} style={{fontSize: size}} spin icon={faCircleNotch} />\n)\n\nLoadingSpinner.propTypes = {\n /**\n * Specify width and height.\n */\n size: PropTypes.string,\n /**\n * css properties object. color can be used to set the color of the spinner\n */\n style: PropTypes.object\n}\n\nexport default LoadingSpinner\n","import PropTypes from 'prop-types'\nimport React from 'react'\nimport {injectIntl} from 'react-intl'\n\nimport Ball from '../Ball'\n\nconst ClearIndicator = props => {\n const msg = id => props.intl.formatMessage({id})\n\n return (\n <span {...props.innerProps}>\n <Ball icon=\"times\" tabIndex={-1} aria-label={msg('client.component.select.clearFieldLabel')} />\n </span>\n )\n}\n\nClearIndicator.propTypes = {\n innerProps: PropTypes.object,\n intl: PropTypes.object.isRequired\n}\n\nexport default injectIntl(ClearIndicator)\n","import PropTypes from 'prop-types'\nimport React from 'react'\nimport {components} from 'react-select'\n\nimport {StyledDropdownIndicatorBall, StyledDropdownIndicatorWrapper} from './StyledComponents'\n\nconst DropdownIndicator = props => {\n const {\n selectProps: {isDisabled, menuIsOpen}\n } = props\n if (isDisabled) {\n return null\n }\n\n return (\n <components.DropdownIndicator {...props}>\n <StyledDropdownIndicatorWrapper>\n <StyledDropdownIndicatorBall icon={'chevron-down'} visible={!menuIsOpen} tabIndex={-1} />\n <StyledDropdownIndicatorBall icon={'chevron-up'} visible={menuIsOpen} tabIndex={-1} />\n </StyledDropdownIndicatorWrapper>\n </components.DropdownIndicator>\n )\n}\n\nDropdownIndicator.propTypes = {\n immutable: PropTypes.bool,\n selectProps: PropTypes.shape({\n menuIsOpen: PropTypes.bool,\n isDisabled: PropTypes.bool\n })\n}\n\nexport default DropdownIndicator\n","import PropTypes from 'prop-types'\nimport React from 'react'\nimport {components} from 'react-select'\n\nimport Ball from '../Ball'\nimport {StyledIndicatorsContainerWrapper} from './StyledComponents'\n\nconst handleAdvancedSearch = (openAdvancedSearch, value) => e => {\n openAdvancedSearch(value)\n e.stopPropagation()\n}\n\nconst handleCreate = (openCreate, value) => e => {\n openCreate(value)\n e.stopPropagation()\n}\n\nconst handlePropagation = e => {\n e.stopPropagation()\n}\n\nconst IndicatorsContainer = props => {\n const {openAdvancedSearch, openRemoteCreate, isDisabled, createPermission, value, isMulti, wrapperHeight} =\n props.selectProps\n const rowHeight = 30 // roughly the height of a single row in px\n const isBottomAligned = isMulti && value?.length && wrapperHeight > rowHeight\n\n return (\n <StyledIndicatorsContainerWrapper isBottomAligned={isBottomAligned}>\n <components.IndicatorsContainer {...props}>\n {props.children}\n {openAdvancedSearch && !isDisabled && (\n <span\n onTouchEnd={handlePropagation}\n onMouseDown={handlePropagation}\n onMouseUp={handleAdvancedSearch(openAdvancedSearch, value)}\n >\n <Ball icon=\"search\" tabIndex={-1} />\n </span>\n )}\n {createPermission && !isDisabled && (\n <span\n onTouchEnd={handlePropagation}\n onMouseDown={handlePropagation}\n onMouseUp={handleCreate(openRemoteCreate, value)}\n >\n <Ball icon=\"plus\" tabIndex={-1} />\n </span>\n )}\n </components.IndicatorsContainer>\n </StyledIndicatorsContainerWrapper>\n )\n}\n\nconst ItemPropType = PropTypes.shape({\n key: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\n display: PropTypes.string\n})\n\nIndicatorsContainer.propTypes = {\n children: PropTypes.node,\n selectProps: PropTypes.shape({\n openAdvancedSearch: PropTypes.func,\n openRemoteCreate: PropTypes.func,\n isDisabled: PropTypes.bool,\n isMulti: PropTypes.bool,\n wrapperHeight: PropTypes.number,\n createPermission: PropTypes.bool,\n value: PropTypes.oneOfType([ItemPropType, PropTypes.arrayOf(ItemPropType)])\n }),\n value: PropTypes.oneOfType([ItemPropType, PropTypes.arrayOf(ItemPropType)])\n}\n\nexport default IndicatorsContainer\n","import React from 'react'\n\nimport LoadingSpinner from '../LoadingSpinner'\n\nconst LoadingIndicator = () => (\n <span>\n <LoadingSpinner size=\"1.8rem\" />\n </span>\n)\n\nexport default LoadingIndicator\n","import _omit from 'lodash/omit'\nimport PropTypes from 'prop-types'\nimport React from 'react'\n\nimport {StyledTether, StyledMenu} from './StyledComponents'\n\nconst TetherPosition = () => <div />\n\nconst Menu = props => (\n <StyledTether\n attachment=\"top left\"\n targetAttachment=\"bottom left\"\n constraints={[\n {\n to: 'window',\n attachment: 'together'\n }\n ]}\n >\n <TetherPosition />\n <div>\n <StyledMenu\n {..._omit(props, ['innerRef'])}\n wrapperWidth={props.selectProps.wrapperWidth}\n wrapperHeight={props.selectProps.wrapperHeight}\n >\n {props.children}\n </StyledMenu>\n </div>\n </StyledTether>\n)\n\nMenu.propTypes = {\n children: PropTypes.node,\n selectProps: PropTypes.shape({\n wrapperHeight: PropTypes.number,\n wrapperWidth: PropTypes.number\n })\n}\n\nexport default Menu\n","import PropTypes from 'prop-types'\nimport React from 'react'\nimport {components} from 'react-select'\n\nimport {StyledMoreOptionsAvailable} from './StyledComponents'\n\nconst MenuList = props => {\n const {selectProps, children, theme} = props\n const {moreOptionsAvailable, moreOptionsAvailableText} = selectProps\n return (\n <components.MenuList {...props}>\n {children}\n {moreOptionsAvailable && (\n <StyledMoreOptionsAvailable reactSelectTheme={theme}>{moreOptionsAvailableText}</StyledMoreOptionsAvailable>\n )}\n </components.MenuList>\n )\n}\n\nMenuList.propTypes = {\n children: PropTypes.node,\n selectProps: PropTypes.shape({\n moreOptionsAvailable: PropTypes.bool,\n moreOptionsAvailableText: PropTypes.string\n }),\n theme: PropTypes.object\n}\n\nexport default MenuList\n","import styled from 'styled-components'\n\nexport default styled.span`\n pointer-events: auto;\n cursor: pointer;\n`\n","import _get from 'lodash/get'\nimport PropTypes from 'prop-types'\nimport React from 'react'\nimport {components} from 'react-select'\nimport {html} from 'tocco-util'\n\nimport Popover from '../Popover'\nimport ClickableWrapper from './ClickableWrapper'\n\nexport const MultiValueLabel = props => {\n const {data} = props\n const {tooltips, loadTooltip, DetailLink} = props.selectProps\n const tooltip = _get(tooltips, data.key, null)\n\n const content = DetailLink ? (\n <ClickableWrapper\n onMouseDown={e => {\n e.stopPropagation()\n e.preventDefault()\n }}\n >\n <DetailLink entityKey={data.key}>\n <components.MultiValueLabel {...props} />\n </DetailLink>\n </ClickableWrapper>\n ) : (\n <components.MultiValueLabel {...props} />\n )\n\n return (\n <Popover content={tooltip ? <div dangerouslySetInnerHTML={{__html: html.sanitizeHtml(tooltip)}} /> : null}>\n <span onMouseOver={() => loadTooltip && !tooltip && loadTooltip(data.key)}>{content}</span>\n </Popover>\n )\n}\n\nMultiValueLabel.propTypes = {\n data: PropTypes.object,\n selectProps: PropTypes.shape({\n tooltips: PropTypes.objectOf(PropTypes.string),\n loadTooltip: PropTypes.func,\n DetailLink: PropTypes.elementType\n })\n}\n\nexport default MultiValueLabel\n","import _get from 'lodash/get'\nimport _omit from 'lodash/omit'\nimport _omitBy from 'lodash/omitBy'\nimport PropTypes from 'prop-types'\nimport React, {memo} from 'react'\nimport {components} from 'react-select'\nimport {html, js} from 'tocco-util'\n\nimport Popover from '../Popover'\nimport ClickableWrapper from './ClickableWrapper'\nimport {StyledSingleValueWrapper} from './StyledComponents'\n\n/**\n * For better performance in tabbing through\n * React-Select fields on Safari the SingleValue should not\n * re-render onFocus and onBlur.\n * Re-render is triggered by the `DetailLink` component which could be ignored\n */\nconst ignoredAttributes = ['linkComp']\nconst areEqual = (prevProps, nextProps) => {\n const diff = js.difference(prevProps, nextProps)\n const clean = _omitBy(_omit(diff, ignoredAttributes), v => Object.keys(v).length === 0)\n return Object.entries(clean).length === 0\n}\n\nconst Content = memo(\n ({linkComp: DetailLink, entityKey, children}) =>\n DetailLink ? (\n <ClickableWrapper\n onMouseDown={e => {\n e.stopPropagation()\n e.preventDefault()\n }}\n >\n <DetailLink entityKey={entityKey}>{children}</DetailLink>\n </ClickableWrapper>\n ) : (\n children\n ),\n areEqual\n)\n\nContent.propTypes = {\n children: PropTypes.node,\n entityKey: PropTypes.string,\n linkComp: PropTypes.func\n}\n\nexport const SingleValue = props => {\n const {data, selectProps, isDisabled, children} = props\n const {tooltips, loadTooltip, DetailLink} = selectProps\n const tooltip = _get(tooltips, data.key, null)\n\n return (\n <components.SingleValue {...props}>\n <StyledSingleValueWrapper\n onMouseOver={() => loadTooltip && !tooltip && loadTooltip(data.key)}\n isDisabled={isDisabled}\n >\n <Popover content={tooltip ? <div dangerouslySetInnerHTML={{__html: html.sanitizeHtml(tooltip)}} /> : null}>\n <Content linkComp={DetailLink} entityKey={data.key}>\n {children}\n </Content>\n </Popover>\n </StyledSingleValueWrapper>\n </components.SingleValue>\n )\n}\n\nSingleValue.propTypes = {\n children: PropTypes.node,\n data: PropTypes.object,\n isDisabled: PropTypes.bool,\n selectProps: PropTypes.shape({\n tooltips: PropTypes.objectOf(PropTypes.string),\n loadTooltip: PropTypes.func,\n DetailLink: PropTypes.func\n })\n}\n\nexport default SingleValue\n","import _throttle from 'lodash/throttle'\nimport PropTypes from 'prop-types'\nimport React, {useRef, useCallback} from 'react'\nimport ReactSelect from 'react-select'\nimport {withTheme} from 'styled-components'\n\nimport ClearIndicator from './ClearIndicator'\nimport DropdownIndicator from './DropdownIndicator'\nimport IndicatorsContainer from './IndicatorsContainer'\nimport LoadingIndicator from './LoadingIndicator'\nimport Menu from './Menu'\nimport MenuList from './MenuList'\nimport MultiValueLabel from './MultiValueLabel'\nimport SingleValue from './SingleValue'\nimport {\n reactSelectStyles,\n reactSelectTheme,\n StyledReactSelectOuterWrapper,\n StyledReactSelectInnerWrapper\n} from './StyledComponents'\n\n/**\n * To select between multiple options. Loading of options and so on are remotely controlled.\n */\nconst Select = ({\n fetchOptions,\n id,\n immutable,\n isLoading,\n isMulti,\n loadTooltip,\n moreOptionsAvailable,\n moreOptionsAvailableText,\n noResultsText,\n onChange,\n openAdvancedSearch,\n options,\n searchOptions,\n theme,\n tooltips,\n value,\n DetailLink,\n createPermission,\n openRemoteCreate\n}) => {\n const selectComponent = useRef(null)\n const selectWrapper = useRef(null)\n\n const getOptions = () => [...(options || [])]\n\n const handleInputChange = (searchTerm, event) => {\n if (searchOptions && searchTerm) {\n throttledSearchOptions(searchTerm)\n }\n if (searchTerm === '' && event.action === 'input-change') {\n fetchOptions()\n }\n }\n\n const handleMenuOpen = () => {\n if (fetchOptions) {\n fetchOptions()\n }\n }\n\n const handleFocus = () => {\n selectComponent.current.focus()\n }\n\n // _throttle is not working with inline function\n // searchOptions shouldn't be included in deps array as _throttle only needs to be run initially\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const throttledSearchOptions = useCallback(_throttle(searchOptions, 800, {trailing: true}), [])\n\n const wrapperWidth = selectWrapper.current?.clientWidth || 300\n const wrapperHeight = selectWrapper.current?.clientHeight || 35\n\n return (\n <StyledReactSelectOuterWrapper tabIndex=\"-1\" id={id} onFocus={handleFocus}>\n <StyledReactSelectInnerWrapper ref={selectWrapper}>\n <ReactSelect\n getOptionLabel={option => option.display}\n getOptionValue={option => option.key}\n wrapperWidth={wrapperWidth}\n wrapperHeight={wrapperHeight}\n components={{\n ClearIndicator,\n LoadingIndicator,\n DropdownIndicator: DropdownIndicator,\n IndicatorsContainer: IndicatorsContainer,\n IndicatorSeparator: null,\n Menu: Menu,\n MenuList: MenuList,\n MultiValueLabel,\n SingleValue\n }}\n noOptionsMessage={() => noResultsText || ' - '}\n isMulti={isMulti}\n closeMenuOnSelect={!isMulti}\n isSearchable\n {...(searchOptions ? {filterOption: () => true} : {})}\n isClearable\n loadingMessage={() => null}\n placeholder=\"\"\n menuShouldScrollIntoView={false}\n autoFocus={false}\n value={value || null}\n onChange={onChange}\n onInputChange={handleInputChange}\n options={getOptions()}\n isLoading={isLoading}\n isDisabled={immutable}\n ref={selectComponent}\n onMenuOpen={handleMenuOpen}\n styles={reactSelectStyles(theme)}\n theme={themeSelect => reactSelectTheme(themeSelect, theme)}\n loadTooltip={loadTooltip}\n tooltips={tooltips}\n DetailLink={DetailLink}\n openAdvancedSearch={openAdvancedSearch}\n moreOptionsAvailable={moreOptionsAvailable}\n moreOptionsAvailableText={moreOptionsAvailableText}\n blurInputOnSelect={false}\n createPermission={createPermission}\n openRemoteCreate={openRemoteCreate}\n />\n </StyledReactSelectInnerWrapper>\n </StyledReactSelectOuterWrapper>\n )\n}\n\nconst ItemPropType = PropTypes.shape({\n key: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\n display: PropTypes.string\n})\n\nSelect.defaultProps = {\n searchOptions: () => {}\n}\n\nSelect.propTypes = {\n /**\n * If one more multiple values can be selected\n */\n isMulti: PropTypes.bool,\n /**\n * Callback function on change event. Passes the new value as first parameter.\n */\n onChange: PropTypes.func,\n /**\n * Expects an array or single object containing a display and key attribute.\n */\n value: PropTypes.oneOfType([ItemPropType, PropTypes.arrayOf(ItemPropType)]),\n /**\n * Possible options that the user can select\n */\n options: PropTypes.arrayOf(ItemPropType),\n /**\n * Callback to load options (is invoked on focus)\n */\n fetchOptions: PropTypes.func,\n /**\n * Callback to load options if the user types into to select. The search value is passed as first parameter.\n */\n searchOptions: PropTypes.func,\n /**\n * Can be set to true while loading the options. Shows a loading indicator.\n */\n isLoading: PropTypes.bool,\n /**\n * Wil be displayed if no options are left to choose from.\n */\n noResultsText: PropTypes.string,\n /**\n * If true, a disabled option is appended that says that not all options are shown.\n */\n moreOptionsAvailable: PropTypes.bool,\n /**\n * Text that is shown if moreOptionsAvailable is true.\n */\n moreOptionsAvailableText: PropTypes.string,\n /**\n * If defined a button is shown next to the select box that invokes this callback.\n */\n openAdvancedSearch: PropTypes.func,\n /**\n * Component that allows to render a <Link> around the value label for navigation purposes.\n * First parameter is the key of the value, the second parameter is the value node itself / child.\n *\n * e.g.\n * ({entityKey, children}) => <a href={`/${key}`} target=\"_blank\" rel=\"noopener noreferrer\">{children}</a>\n */\n DetailLink: PropTypes.func,\n /**\n * Theme provided by styled-components ThemeProvider.\n */\n theme: PropTypes.object,\n /**\n * Object containing tooltips with the key as attribute name.\n */\n tooltips: PropTypes.objectOf(PropTypes.string),\n /**\n * Callback to enhance tooltip object with new tooltips.\n */\n loadTooltip: PropTypes.func,\n /**\n * Whether the user can edit the value or not.\n */\n immutable: PropTypes.bool,\n /**\n * Id of outer element\n */\n id: PropTypes.string,\n /**\n * Open menu with click on input field\n */\n openMenuOnClick: PropTypes.bool,\n /**\n * Whether a new option may be created\n */\n createPermission: PropTypes.bool,\n /**\n * Opens a modal with a create form\n */\n openRemoteCreate: PropTypes.func\n}\n\nexport default withTheme(Select)\n","import styled from 'styled-components'\n\nimport {StyledUl} from '../Typography'\n\nconst StyledSignalList = styled(StyledUl)`\n && {\n list-style-type: none;\n }\n`\n\nexport default StyledSignalList\n","import PropTypes from 'prop-types'\nimport React from 'react'\n\nimport StyledSignalList from './StyledSignalList'\n\n/**\n * Signalize conditions by icon and color in a list.\n */\nexport const SignalList = props => (\n <StyledSignalList as=\"ul\">{React.Children.map(props.children, child => React.cloneElement(child))}</StyledSignalList>\n)\n\nSignalList.propTypes = {\n children: PropTypes.node\n}\n\nexport default SignalList\n","import _get from 'lodash/get'\nimport styled from 'styled-components'\n\nimport {StyledLi} from '../Typography'\nimport {design, shadeColor, theme} from '../utilStyles'\n\nconst COLORS = {\n [design.condition.BASE]: 'inherit',\n [design.condition.DANGER]: theme.color('signal.danger.text'),\n [design.condition.PRIMARY]: props => shadeColor(_get(props.theme, 'colors.primary'), 1),\n [design.condition.SUCCESS]: theme.color('signal.success.text'),\n [design.condition.WARNING]: theme.color('signal.warning.text'),\n [design.condition.INFO]: theme.color('signal.info.text')\n}\n\nconst getColor = props => {\n const color = COLORS[props.condition]\n return color || 'inherit'\n}\n\nconst StyledSignalListItem = styled(StyledLi)`\n && {\n color: ${props => getColor(props)};\n position: relative;\n\n > i,\n > svg {\n position: absolute;\n left: -1.6rem;\n text-align: left;\n }\n\n > svg {\n top: 0.2em;\n }\n }\n`\n\nStyledSignalListItem.propTypes = {\n condition: design.conditionPropTypes(COLORS)\n}\n\nexport default StyledSignalListItem\n","import PropTypes from 'prop-types'\nimport React from 'react'\n\nimport Icon from '../Icon'\nimport {design} from '../utilStyles'\nimport StyledSignalListItem from './StyledSignalListItem'\n\nconst ICONS = {\n [design.condition.BASE]: false,\n [design.condition.PRIMARY]: false,\n [design.condition.DANGER]: 'times',\n [design.condition.SUCCESS]: 'check',\n [design.condition.WARNING]: 'exclamation-triangle',\n [design.condition.INFO]: 'info'\n}\n\nconst getIcon = props => {\n const icon = ICONS[props.condition]\n if (icon) {\n return <Icon icon={icon} position={design.position.SOLE} />\n } else {\n return <i>{'\\u2022'}</i>\n }\n}\n\n/**\n * Signalize single condition by icon and color. It must be wrapped by <SignalList/>\n */\nconst SignalListItem = props => (\n <StyledSignalListItem condition={props.condition}>\n {getIcon(props)}\n {props.label}\n {React.Children.map(props.children, child => React.cloneElement(child))}\n </StyledSignalListItem>\n)\n\nSignalListItem.defaultProps = {\n condition: design.condition.BASE\n}\n\nSignalListItem.propTypes = {\n /**\n * Visible text. Default is an empty string.\n */\n label: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\n children: PropTypes.node,\n /**\n * Color and icon is set according condition. Default value is 'base'.\n * Possible values: base|danger|primary|success|warning\n */\n condition: design.conditionPropTypes(ICONS)\n}\n\nexport default SignalListItem\n","import List from './SignalList'\nimport Item from './SignalListItem'\nimport StyledSignalList from './StyledSignalList'\nimport StyledSignalListItem from './StyledSignalListItem'\n\nexport {StyledSignalList, StyledSignalListItem}\n\nexport default {\n List,\n Item\n}\n","import PropTypes from 'prop-types'\nimport React from 'react'\n\nimport SignalList from '../SignalList'\n\nconst ErrorList = props => {\n if (!props.error) {\n return null\n }\n\n const errorValues = []\n Object.keys(props.error).forEach(key => {\n errorValues.push(...props.error[key])\n })\n\n return (\n <SignalList.List>\n {errorValues.map((value, idx) => (\n <SignalList.Item condition=\"danger\" key={idx} label={value} />\n ))}\n </SignalList.List>\n )\n}\n\nErrorList.propTypes = {\n error: PropTypes.objectOf(PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.node, PropTypes.string])))\n}\n\nexport default ErrorList\n","import styled, {css} from 'styled-components'\n\nimport {StyledHtmlFormatter} from '../FormattedValue/typeFormatters/HtmlFormatter'\nimport {colorizeBorder, colorizeText, declareFocus, declareFont, scale, theme} from '../utilStyles'\n\nconst borderWidth = '1.1px' // deliberately uneven to force correct rendering in chrome\n\nexport const getTextColor = ({isDisplay, secondaryPosition, immutable, signal, hasValue}) => {\n return signal\n ? 'signal'\n : hasValue\n ? 'hasValue'\n : isDisplay && secondaryPosition && immutable && !signal\n ? 'shade1'\n : isDisplay\n ? secondaryPosition\n ? 'shade0'\n : 'shade1'\n : secondaryPosition\n ? 'shade1'\n : immutable\n ? 'shade0'\n : signal\n ? 'signal'\n : 'shade1'\n}\n\nexport const getBorderColor = ({immutable, isDisplay, signal, isDirty}) => {\n return isDirty ? 'isDirty' : isDisplay || immutable ? 'transparent' : signal ? 'signal' : 'shade1'\n}\n\nconst transformLabel = ({secondaryPosition}) => css`\n &&& {\n ${secondaryPosition &&\n css`\n top: 0;\n font-size: ${scale.font(-0.8)};\n margin: calc(${scale.font(-0.5)} / -2) 0 0;\n `}\n }\n`\n\nconst declareCursor = ({isDisplay, immutable}) => `cursor: ${!isDisplay && immutable ? 'not-allowed' : 'auto'};`\n\nexport const StyledLabelWrapper = styled.div`\n width: calc(100% - ${scale.space(0.5)});\n`\n\nexport const StyledStatedValueLabel = styled.label`\n &&& {\n ${declareFont({\n fontSize: scale.font(0),\n fontWeight: ({dirty}) => (dirty ? theme.fontWeight('bold') : theme.fontWeight('regular')),\n lineHeight: 1\n })}\n background-color: ${theme.color('paper')};\n color: ${props => colorizeText[getTextColor(props)](props)};\n left: ${scale.space(-2)};\n margin: calc(${scale.font(0)} / -2) 0 0;\n padding: 1px ${scale.space(-2)}; // 1px to prevent label bottom from being cut\n position: absolute;\n top: 50%;\n width: ${({secondaryPosition}) => (secondaryPosition ? 'auto' : 'inherit')};\n height: calc(${scale.font(0)} + 1px);\n overflow: hidden;\n ${props => transformLabel(props)}\n ${props => declareCursor(props)}\n pointer-events: ${({secondaryPosition}) => (secondaryPosition ? 'auto' : 'none')};\n padding-left: ${({immutable}) => immutable && '0'};\n\n span {\n white-space: nowrap;\n }\n }\n`\n\nexport const StyledStatedValueBox = styled.div`\n &&& {\n border: ${borderWidth} solid ${props => colorizeBorder[getBorderColor(props)](props)};\n padding: ${scale.space(-1)} ${scale.space(-1)} ${scale.space(-2)} ${scale.space(-1)};\n position: relative;\n ${props => !props.immutable && declareFocus(props)}\n ${props => declareCursor(props)}\n margin-top: ${({isDisplay}) => isDisplay && scale.space(-1)};\n padding-left: ${({immutable}) => immutable && scale.space(-2)};\n padding-top: ${({isDisplay, immutable}) => isDisplay && immutable && scale.space(-1)};\n\n * {\n padding-left: ${({isDisplay}) => isDisplay && '0'};\n margin-bottom: 0;\n }\n\n > ${StyledHtmlFormatter} {\n padding-top: ${({isDisplay}) => isDisplay && scale.space(-1)};\n position: relative;\n top: 5px;\n\n p:first-of-type {\n margin-top: 0;\n }\n }\n }\n`\n\nexport const StyledStatedValueDescription = styled.p`\n &&& {\n ${declareFont({\n fontSize: scale.font(-1)\n })}\n }\n`\n\nexport const StyledStatedValueError = styled.div``\n\nexport const StyledStatedValueWrapper = styled.div`\n &&& {\n margin-bottom: ${scale.space(-1)};\n padding-top: ${scale.space(-2)};\n\n ${/* sc-selector */ StyledStatedValueBox},\n ${/* sc-selector */ StyledStatedValueDescription},\n ${/* sc-selector */ StyledStatedValueError} {\n margin-bottom: ${scale.space(-2)};\n\n &:last-child {\n margin-bottom: 0;\n }\n }\n\n ${/* sc-selector */ StyledStatedValueDescription},\n ${/* sc-selector */ StyledStatedValueError} {\n margin-left: calc(${scale.space(-1)} + ${borderWidth});\n }\n }\n`\n","import PropTypes from 'prop-types'\nimport React from 'react'\nimport FocusWithin from 'react-simple-focus-within'\nimport {js, html} from 'tocco-util'\n\nimport {design} from '../utilStyles'\nimport ErrorList from './ErrorList'\nimport {\n StyledStatedValueBox,\n StyledStatedValueDescription,\n StyledStatedValueError,\n StyledStatedValueLabel,\n StyledStatedValueWrapper,\n StyledLabelWrapper\n} from './StyledStatedValue'\n\nconst detectSignal = (dirty, hasError, mandatory, hasValue) => {\n if (hasError) {\n return design.condition.DANGER\n } else if (dirty) {\n return design.condition.INFO\n } else if (mandatory && !hasValue) {\n return design.condition.WARNING\n }\n}\n\n/**\n * Wrap <EditableValue> and <FormattedValUe> in <StatedValue> to describe it\n * and signal conditions.\n */\nconst StatedValue = props => {\n const {\n children,\n description,\n dirty,\n fixLabel,\n isDisplay,\n error,\n hasValue,\n id,\n label,\n mandatory,\n mandatoryTitle,\n immutable,\n touched,\n signal: signalProp\n } = props\n\n const showError = !immutable && touched && error && Object.keys(error).length > 0\n const labelAlt = `${js.adjustedHTMLString(label)}${mandatory && mandatoryTitle ? `, ${mandatoryTitle}` : ''}`\n const signal = signalProp || detectSignal(dirty, showError, mandatory, hasValue)\n\n return (\n <FocusWithin>\n {({focused, getRef}) => {\n const secondaryPosition = (!immutable && focused) || hasValue || isDisplay || fixLabel\n return (\n <StyledStatedValueWrapper ref={getRef} secondaryPosition={secondaryPosition}>\n <StyledStatedValueBox\n className=\"StyledStatedValueBox\"\n hasValue={hasValue}\n immutable={immutable}\n isDisplay={isDisplay}\n signal={signal}\n >\n {children}\n {label && (\n <StyledLabelWrapper>\n <StyledStatedValueLabel\n {...(!isDisplay && !immutable && {htmlFor: id})}\n hasValue={hasValue}\n dirty={dirty}\n title={labelAlt}\n secondaryPosition={secondaryPosition}\n immutable={immutable}\n isDisplay={isDisplay}\n signal={signal}\n >\n <span dangerouslySetInnerHTML={{__html: `${html.sanitizeHtml(label)}${mandatory ? ' *' : ''}`}} />\n </StyledStatedValueLabel>\n </StyledLabelWrapper>\n )}\n </StyledStatedValueBox>\n {description && <StyledStatedValueDescription>{description}</StyledStatedValueDescription>}\n {showError && (\n <StyledStatedValueError>\n <ErrorList error={error} />\n </StyledStatedValueError>\n )}\n </StyledStatedValueWrapper>\n )\n }}\n </FocusWithin>\n )\n}\n\nStatedValue.propTypes = {\n /**\n * A component to enter or display data.\n */\n children: PropTypes.node,\n /**\n * Visualize as display and not as field.\n */\n isDisplay: PropTypes.bool,\n /**\n * A helper text to instruct users.\n */\n description: PropTypes.string,\n /**\n * If true field is marked as changed.\n */\n dirty: PropTypes.bool,\n /**\n * Error object.\n */\n error: PropTypes.objectOf(PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.node, PropTypes.string]))),\n /**\n * Force label on secondaryPosition.\n */\n fixLabel: PropTypes.bool,\n /**\n * If true label is moved to uncover value.\n */\n hasValue: PropTypes.bool,\n /**\n * Focus target id by clicking on label.\n */\n id: PropTypes.string,\n /**\n * Describe editable value briefly.\n */\n label: PropTypes.string,\n /**\n * If true an asterisk is appended to the label.\n */\n mandatory: PropTypes.bool,\n /**\n * Append to label's alternative text.\n */\n mandatoryTitle: PropTypes.string,\n /**\n * Determines if value is editable\n */\n immutable: PropTypes.bool,\n /**\n * Pass a valid signal condition to omit auto detection\n */\n signal: PropTypes.string,\n /**\n * If true field was in focus.\n */\n touched: PropTypes.bool\n}\n\nexport default StatedValue\n","import _get from 'lodash/get'\n\nimport {shadeColor} from '../utilStyles'\n\nconst colorizeText = {\n shade0: ({theme}) => _get(theme, 'colors.text'),\n shade1: ({theme}) => shadeColor(_get(theme, 'colors.text'), 3.5),\n shade2: ({theme}) => shadeColor(_get(theme, 'colors.text'), 5.5),\n signal: ({theme, signal}) => _get(theme, `colors.signal.${signal}.text`),\n hasValue: ({theme}) => _get(theme, 'colors.signal.info.text')\n}\n\nconst colorizeBorder = {\n shade0: ({theme}) => _get(theme, 'colors.paper'),\n shade1: ({theme}) => shadeColor(_get(theme, 'colors.paper'), 2),\n shade2: ({theme}) => shadeColor(_get(theme, 'colors.paper'), 4),\n signal: ({theme, signal}) => _get(theme, `colors.signal.${signal}.text`),\n isDirty: ({theme}) => _get(theme, 'colors.secondaryLight'),\n transparent: () => 'transparent'\n}\n\nexport {colorizeBorder, colorizeText}\n"],"sourceRoot":""}