{"version":3,"mappings":"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,EAAc,iBAAiB,GACXynB,ICfrB,MAAMC,GAAY,CAChB,GAAI,CACF,QAAS,cACT,OAAQ,CACN,QACA,UACA,QACA,QACA,OACA,QACA,QACA,SACA,aACA,UACA,YACA,WACF,EACA,SAAU,CACR,UACA,QACA,SACA,eACA,SACA,UACA,WACF,EACA,YAAa,CACX,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACF,EACA,kBAAmB,WACnB,iBAAkB,WAClB,kBAAmB,QACnB,gBAAiB,QACjB,kBAAmB,aACnB,YAAa,uBACb,aAAc,wBACd,YAAa,uBACb,YAAa,uBACb,WAAY,WACZ,UAAW,iBACX,eAAgB,iBAChB,aAAc,IACd,aAAc,GAChB,EACA,GAAI,CACF,QAAS,aACT,OAAQ,CACN,UACA,YACA,WACA,QACA,OACA,QACA,QACA,SACA,WACA,UACA,WACA,UACF,EACA,SAAU,CACR,UACA,UACA,WACA,SACA,SACA,QACA,WACF,EACA,YAAa,CACX,MACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,KACF,EACA,kBAAmB,WACnB,iBAAkB,WAClB,kBAAmB,KACnB,gBAAiB,SACjB,kBAAmB,UACnB,YAAa,sBACb,aAAc,uBACd,YAAa,yBACb,YAAa,qBAKf,EACA,GAAI,CACF,QAAS,sDACT,OAAQ,CACN,uCACA,6CACA,2BACA,uCACA,qBACA,2BACA,2BACA,uCACA,mDACA,6CACA,uCACA,4CACF,EACA,SAAU,CACR,qEACA,qEACA,6CACA,iCACA,6CACA,6CACA,4CACF,EACA,YAAa,CACX,qBACA,qBACA,2BACA,qBACA,qBACA,2BACA,2BACA,qBACA,2BACA,qBACA,2BACA,oBACF,EACA,kBAAmB,6CACnB,iBAAkB,uCAClB,kBAAmB,SACnB,gBAAiB,eACjB,kBAAmB,uCACnB,YAAa,iDACb,aAAc,kDACd,YAAa,iDACb,YAAa,iDACb,WAAY,mGACd,EACA,GAAI,CACF,aAAc,IACd,aAAc,IACd,QAAS,0BACT,OAAQ,CACN,SACA,UACA,UACA,QACA,MACA,OACA,OACA,SACA,YACA,UACA,WACA,UACF,EACA,SAAU,CACR,UACA,SACA,WACA,WACA,aACA,UACA,SACF,EACA,YAAa,CACX,MACA,MACA,SACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACF,EACA,kBAAmB,cACnB,iBAAkB,UAClB,kBAAmB,MACnB,gBAAiB,MACjB,kBAAmB,WACnB,YAAa,wBACb,aAAc,yBACd,YAAa,4BACb,YAAa,wBACb,UAAW,uBACX,eAAgB,uBAChB,OAAQ,8DACV,EACA,GAAI,CACF,QAAS,mBACT,OAAQ,CACN,UACA,WACA,QACA,QACA,MACA,OACA,OACA,WACA,YACA,UACA,WACA,UACF,EACA,SAAU,CACR,SACA,UACA,UACA,WACA,YACA,UACA,UACF,EACA,YAAa,CACX,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACF,EACA,kBAAmB,aACnB,iBAAkB,UAClB,kBAAmB,QACnB,gBAAiB,MACjB,kBAAmB,UACnB,YAAa,mBACb,aAAc,oBACd,YAAa,mBACb,YAAa,mBACb,UAAW,QACX,eAAgB,QAChB,aAAc,IACd,aAAc,IACd,eAAgB,kBAChB,eAAgB,0BAClB,EACA,GAAI,CACF,QAAS,mBACT,OAAQ,CACN,OACA,aACA,OACA,QACA,aACA,UACA,SACA,eACA,WACA,OACA,aACA,aACF,EACA,SAAU,CACR,QACA,YACA,YACA,mBACA,gBACA,OACA,WACF,EACA,YAAa,CACX,OACA,aACA,OACA,QACA,aACA,UACA,SACA,eACA,WACA,OACA,aACA,aACF,EACA,kBAAmB,8BACnB,iBAAkB,cAClB,kBAAmB,2BACnB,gBAAiB,aACjB,kBAAmB,UACnB,YAAa,mBACb,aAAc,oBACd,YAAa,mBACb,YAAa,mBACb,UAAW,CAAC,+CAAsB,EAClC,eAAgB,CAAC,+CAAsB,EACvC,WAAY,CAAC,aAAQ,EACrB,aAAc,IACd,aAAc,GAChB,EACA,GAAI,CACF,QAAS,mBACT,OAAQ,CACN,UACA,WACA,QACA,SACA,SACA,SACA,SACA,SACA,YACA,UACA,WACA,UACF,EACA,SAAU,CACR,WACA,YACA,aACA,eACA,aACA,SACA,UACF,EACA,YAAa,CACX,MACA,MACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,MACA,KACF,EACA,kBAAmB,UACnB,iBAAkB,UAClB,kBAAmB,KACnB,gBAAiB,IACjB,kBAAmB,UACnB,YAAa,wBACb,aAAc,yBACd,YAAa,yBACb,YAAa,wBACb,WAAY,iBACZ,aAAc,IACd,aAAc,GAChB,EACA,GAAI,CACF,QAAS,gBACT,OAAQ,CACN,UACA,aACA,OACA,QACA,MACA,OACA,UACA,UACA,YACA,UACA,WACA,aACF,EACA,SAAU,CACR,WACA,QACA,QACA,WACA,QACA,WACA,QACF,EACA,YAAa,CACX,MACA,SACA,MACA,MACA,MACA,OACA,OACA,SACA,MACA,MACA,MACA,QACF,EACA,kBAAmB,WACnB,iBAAkB,WAClB,WAAY,WACZ,kBAAmB,KACnB,gBAAiB,KACjB,kBAAmB,aACnB,YAAa,2BACb,aAAc,4BACd,YAAa,2BACb,YAAa,2BACb,UAAW,2BACX,eAAgB,2BAChB,aAAc,IACd,aAAc,IACd,mBAAoB,OACpB,eAAgB,qCAChB,eAAgB,2BAChB,OAAQ,sEACV,EACA,QAAS,CACP,QAAS,gBACT,OAAQ,CACN,UACA,aACA,OACA,QACA,MACA,OACA,UACA,UACA,YACA,UACA,WACA,aACF,EACA,SAAU,CACR,WACA,QACA,QACA,WACA,QACA,WACA,QACF,EACA,YAAa,CACX,MACA,SACA,MACA,MACA,MACA,OACA,OACA,SACA,MACA,MACA,MACA,QACF,EACA,kBAAmB,WACnB,iBAAkB,WAClB,WAAY,WACZ,kBAAmB,KACnB,gBAAiB,KACjB,kBAAmB,aACnB,YAAa,2BACb,aAAc,4BACd,YAAa,2BACb,YAAa,2BACb,UAAW,2BACX,eAAgB,2BAChB,aAAc,IACd,aAAc,IACd,mBAAoB,OACpB,eAAgB,qCAChB,eAAgB,0BAClB,EAC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","names":["p","relList","link","processPreload","mutations","mutation","node","getFetchOpts","script","fetchOpts","dayjs","duration","customParseFormat","advancedFormat","localizedFormat","relativeTime","utc","timezone","i18next","lng","i18nInstance","nls","language","rs","namespace","r","initFn","languageDetector","err","extendCls","superclass","addNls","i18n","i18nMixin","nls$1","en","fr","de","target","selector","all","getIconPath","iconName","libName","KiIcon","LitElement","icons","ic","iconPath","unsafeSVG","html","until","css","__decorateClass","property","customElement","KiIconBtn","fnName","wrapper","originFn","SM","MD","LG","LANDSCAPE","emitter","EventEmitter","XSM_BREAKPOINT","MD_BREAKPOINT","ViewPort","detect","hasChaged","w","h","_newSize","_newLandscape","debounce","connectedCallbackForTarget","disconnectedCallbackForTarget","clz","f","claz","_a","name","key","_options","anonymity","k","initial","Mix","clzs","c1","c2","c3","defaultUrl","_searchString","_lastParamsString","_urlParams","_getUrlParams","_rewriteHashedSearchParams","newString","path","searchString","searchParamsChangedSubject","BehaviorSubject","HashRouter","Router","search","pathname","pathWithSearchParam","newRoute","oldRoute","context","globalHashChangeHandler","event","HASHCHANGE","router","getSearchParams","initRouter","baseUrl","setRoutes","routes","commands","newPath","attachRouter","outlet","getCurrentLocation","getCurrentPath","getSearchParamString","getSearchParam","param","getAllSearchParams","setSearchParam","value","urlParams","rest","val","paramString","getRouteOptionsAndParams","location","paramNames","ret","paramName","params","navigateTo","conserveSearchParams","navTo","searchParamString","addString","unregisterRouter","KiLink","KiBreadcrumbs","PropertyDefaultValue","item","l","_loaderMixin","loaderTargetFn","prototype","aspect","loaderMixin","config","initialized","_assertInitialized","getRoutesFromConfig","configRoutes","importActions","route","actions","act","initConfig","configPath","getConfig","getRoutes","getNavItemLabel","navItem","subNavItem","getNavItems","getLogoOptions","getCsvDelimiter","getPreviousSiblings","child","a","b","siblings","getFullPath","getCrumb","fullPath","label","recursivelyGetCrumbs","siblingsCrumbs","sibling","parentCrumbs","calculateBreadCrumbs","KiAppBreadcrumbs","KiApp","responsiveMixin","_initDarkMode","__vitePreload","themeService","KiAppBootstrapper","KiNav","t","ReplaySubject","darkTheme","updateTheme","currentTheme","setDarkTheme","newTheme","dontUpdate","init","isDarkTheme","toggleTheme","newValue","activateLightTheme","activateDarkTheme","Loader","LoaderMixin","MsgMixin","msg","data","_match","p1","get","RGBAToHex","rgba","inParts","g","outParts","part","i","padZero","str","len","colorVal","bw","hex","rStr","gStr","bStr","fallbackCopyTextToClipboard","text","textArea","copyTextToClipboard","handle","touchstartX","touchstartY","touchendX","touchendY","timerstart","setWithExpiry","ttl","session","now","itemStr","deUmlaut","string","filename","defaultLayer","API","reportsPath","basePath","configSubPath","staticConfigPath","dataPath","find","classes","query","stations","site_no","station_no","ahref","base","stationNo","stationId","siteNo","_b","reports","sortBy","filter","s","parameterName","tsName","groupBy","stobj","station","entry","token","cleanShortName","nocache","response","merge","keyBy","alias","parFilter","par","condition","has","resp","ids","id","prev","current","additionaldata","externalData","index","datattr","_c","map","obj","_e","prop","first","filteredstations","stat","dataLayer","maxVal","maxBy","list","st","reportGroup","fileName","images","img","x","doFetch","currentApi","args","getCurrentApi","maxIterations","object","propertyName","iteration","proto","targetDescriptor","getterChain","computeUUID","_preProcessWatchers","watchers","v","getComputedGetter","originGetter","options","targetname","cacheKey","cacheParamsKey","values","isEqual","re","q","e","computedMixin","targetProperty","getPropertyDescriptor","wrapperFn","delay","_target","_key","descriptor","fn","ldb","debounceMixin","propertyDescriptor","globalLocalStorage","getId","getGetter","local","initialGetter","_id","defaultConverter","typeParam","initializer","getSetter","localStorageMixin","getterFn","setterFn","type","defaultValue","searchParamValue","oldSetter","queryParamMixin","KiWwpSwitcherBottom","preselected","opt","option","badge","BaseTable","repeat","col","unsafeHTML","keyFn","_item","prefix","template","suffix","style","PromiseData","error","cloneDeep","_inlectLazyRendering","n","idProperty","findIndex","row","counter","LazyRendering","SortAble","removeOrder","sortIndex","sort","sortIcon","_sort","changeOrder","result","compareProperty","bValue","aValue","format","parsedB","parsedA","_s","KiPopup","ownerRoot","parentNode","closeAfterMilliSeconds","parentRect","targetRect","popupLeft","popupTop","popupRight","popupBottom","position","positionVal","isPercentage","endsWith","targetPosition","positionNum","sizeNode","popup","KiListItem","UpdatingElement","next","level","KiListItemGroup","KiList","KiCheckBox","square","ColumnHider","visible","op","c","ColumnFormatter","formatters","formatter","dayjsFormat","_opt","precisiontable","precision","formatted","numberFormatter","Selection","d","escapeCsv","delimiter","Export","exportcolumns","columns","displayValue","renderedCell","KiTable","KiSwitcher","KiStack","changedProperties","selectedChild","KiSearchbox","input","SearchSytaxQueryParser","peg$subclass","parent","ctor","peg$SyntaxError","message","expected","found","DESCRIBE_EXPECTATION_FNS","expectation","literalEscape","escapedParts","classEscape","ch","describeExpectation","describeExpected","descriptions","j","describeFound","peg$parse","peg$FAILED","peg$startRuleFunctions","peg$parseStart","peg$startRuleFunction","peg$c0","expr","peg$c1","peg$c2","peg$literalExpectation","peg$c3","peg$c4","peg$c5","head","tail","buildLogicalExpression","peg$c6","operator","peg$c7","peg$otherExpectation","peg$c8","peg$c9","peg$classExpectation","peg$c10","peg$currPos","peg$c11","peg$c12","peg$c13","peg$c14","peg$c15","peg$c16","peg$c17","peg$c18","peg$c19","peg$c20","peg$c21","buildArray","peg$c22","peg$c23","peg$c24","peg$c25","peg$c26","peg$c27","peg$c28","peg$c29","peg$c30","peg$c31","peg$c32","peg$c33","peg$c34","peg$c35","peg$c36","peg$c37","peg$c38","peg$c39","peg$c40","peg$c41","peg$c42","peg$c43","peg$c44","peg$c45","peg$c46","peg$c47","peg$c48","peg$c49","chars","peg$c50","peg$c51","peg$c52","peg$c53","sequence","peg$c54","peg$c55","peg$c56","peg$c57","peg$c58","peg$c59","digits","peg$c60","peg$c61","peg$c62","peg$c63","peg$c64","peg$anyExpectation","peg$c65","peg$c66","peg$c67","peg$c68","peg$c69","peg$c70","peg$c71","peg$c72","peg$c73","peg$c74","peg$c75","peg$c76","peg$c77","peg$c78","peg$c79","peg$c80","peg$c81","peg$c82","peg$c83","peg$c84","peg$c85","peg$c86","peg$c87","peg$c88","peg$savedPos","peg$posDetailsCache","peg$maxFailPos","peg$maxFailExpected","peg$silentFails","peg$result","ignoreCase","parts","inverted","peg$endExpectation","description","peg$computePosDetails","pos","details","peg$computeLocation","startPos","endPos","startPosDetails","endPosDetails","peg$fail","peg$buildStructuredError","s0","s1","peg$parseLogicExpr","peg$parseExpr","s2","s3","s4","s5","peg$parsesp","s6","s7","peg$parseFieldExpr","peg$parse_","peg$parseLopr","peg$parseKey","peg$parseCopr","peg$parseValue","s8","s9","peg$parseStringLiteral","peg$parseDoubleStringCharacter","peg$parseSourceCharacter","peg$parseEscapeSequence","peg$parseCharacterEscapeSequence","peg$parseDecimalDigit","peg$parseHexEscapeSequence","peg$parseUnicodeEscapeSequence","peg$parseHexDigit","peg$parseSingleEscapeCharacter","peg$parseNonEscapeCharacter","peg$parseEscapeCharacter","peg$parseLineTerminator","element","KiSearchQueryAction","mode","KiQueryableSearchbox","KiTreeNode","labelClickedEvent","itemSelectedEvent","SCROLL_STEP","KiTree","scroller","paddingLeft","grandChild","currentValue","length","KiWcpVersionTag","res","pkg","KiModal","step","touch","addSwipeEvents","last","previousEl","modal","previous","KiToast","toast","content","KiAccordion","deCommon","enCommon","frCommon","isCommon","zhCommon","KiWwpTsTable","hclocales","GraphHelper","files","rangeConfig","ts","KiWwpGraph","serieslabel","Highcharts","exporting","offlineexporting","nodata","more","boost","resize","chart","legendOptions","credits","cfg","minDate","maxDate","tsIndex","tsshortname","tsdata","dp","tsms","tempts","dCommentIndex","tslist","tscfg","maxTs","minIdx","minTs","max","min","tzoffset","timeseries","tsData","qCodeIndex","ts_list","firstDataPoint","t0","xAxis","colArray","progTs","trendAb","progDur","prognoseBisTs","trendAbTs","prognoseBranches","indexMin","indexMax","indexMittel","indexTUMin","indexTUMax","indexTUMittel","dataTrend","dataTrendVB","dataProg","dataProgVB","actualMax","actualMean","actualMin","tsValue","dur","period","ser","pl","_pl","series","tabledata","orderBy","vals","_val","retObj","title","year","years","prevYear","nextYear","_files","dataToFetch","range","addts","href","_path","selected","yearcfg","addf","tsfile","currentMax","currentMin","artificalTs","ploptions","lastValue","graphOptions","al","color","alarmFile","alarmFileName","compact","flatten","file","spare","_d","alarms","active","defaultPlOptions","fielditem","_file","_thresholds","thres","attr","stationDetailComp","configItem","KiWwpGraphExt","PopupUtil","tshref","ranges","whitelist","union","patternFill","KiWwpGraphPrecip","_min","_max","valueIndex","accIndex","accData","tableData","table","timeformat","_acc","_p","resetSumAt","sum","self","_data","newPoint","KiWwpGraphPrecipExt"],"sources":["../../vite/modulepreload-polyfill","../../../../libs/wcp-base/src/common/dayjsext.ts","../../../../libs/wcp-base/src/decorators/i18n.ts","../../../../libs/wcp-base/src/locales/index.ts","../../../../libs/wcp-base/src/decorators/query.ts","../../../../libs/wcp-base/src/components/ki-icon/ki-icon.ts","../../../../libs/wcp-base/src/components/ki-icon/ki-icon-btn.ts","../../../../libs/wcp-base/src/common/aspect.ts","../../../../libs/wcp-base/src/decorators/responsive.ts","../../../../libs/wcp-base/src/common/PropertyDefaultValue.ts","../../../../libs/wcp-base/src/common/Mix.ts","../../../../libs/wcp-base/src/components/ki-app/routing/ki-router.ts","../../../../libs/wcp-base/src/components/ki-app/ki-link.ts","../../../../libs/wcp-base/src/components/ki-app/ki-breadcrumbs.ts","../../../../libs/wcp-base/src/decorators/loader.ts","../../../../libs/wcp-base/src/components/ki-app/services/ki-app-config-service.ts","../../../../libs/wcp-base/src/components/ki-app/ki-app-breadcrumbs.ts","../../../../libs/wcp-base/src/components/ki-app/ki-app.ts","../../../../libs/wcp-base/src/components/ki-app/ki-app-bootstrapper.ts","../../../../libs/wcp-base/src/components/ki-app/ki-nav.ts","../../../../libs/wcp-base/src/components/ki-app/services/ki-theme-service.ts","../../../../libs/wcp-base/src/common/Loader.ts","../../../../libs/wcp-base/src/common/LoaderMixin.ts","../../../../libs/wcp-base/src/common/MsgMixin.ts","../../../../libs/wcp-base/src/common/util.ts","../../../../libs/wiski-web/src/api/jsonpi.ts","../../../../libs/wiski-web/src/api/API.ts","../../../../libs/wcp-base/src/decorators/helper/getPropertyDescriptor.ts","../../../../libs/wcp-base/src/decorators/computed.ts","../../../../libs/wcp-base/src/decorators/debounce.ts","../../../../libs/wcp-base/src/decorators/localStorage.ts","../../../../libs/wcp-base/src/decorators/queryParam.ts","../../../../libs/wiski-web/src/components/ki-wwp-graph/ki-wwp-switcher-bottom.ts","../../../../libs/wcp-base/src/components/ki-table/base-table.css.js?used","../../../../libs/wcp-base/src/components/ki-table/BaseTable.ts","../../../../libs/wcp-base/src/components/ki-table/PromiseData.ts","../../../../libs/wcp-base/src/components/ki-table/LazyRendering.ts","../../../../libs/wcp-base/src/components/ki-table/SortAble.ts","../../../../libs/wcp-base/src/components/ki-popup/ki-popup.ts","../../../../libs/wcp-base/src/components/ki-list/ki-list-item.ts","../../../../libs/wcp-base/src/components/ki-list/ki-list-item-group.ts","../../../../libs/wcp-base/src/components/ki-list/ki-list.ts","../../../../libs/wcp-base/src/components/ki-checkbox/ki-checkbox.ts","../../../../libs/wcp-base/src/components/ki-table/ColumnHider.ts","../../../../libs/wcp-base/src/components/ki-table/ColumnFormatter.ts","../../../../libs/wcp-base/src/components/ki-table/Selection.ts","../../../../libs/wcp-base/src/components/ki-table/Export.ts","../../../../libs/wcp-base/src/components/ki-table/ki-table.ts","../../../../libs/wcp-base/src/components/ki-switcher/ki-switcher.ts","../../../../libs/wcp-base/src/components/ki-stack/ki-stack.ts","../../../../libs/wcp-base/src/components/ki-searchbox/ki-searchbox.ts","../../../../libs/wcp-base/tools/SearchSytaxQueryParser_ES6.js","../../../../libs/wcp-base/src/components/ki-searchbox/ki-search-query-action.ts","../../../../libs/wcp-base/src/components/ki-searchbox/ki-queryable-searchbox.ts","../../../../libs/wcp-base/src/components/ki-tree/ki-tree-node.ts","../../../../libs/wcp-base/src/components/ki-tree/ki-tree.ts","../../../../libs/wcp-base/src/components/ki-wcp-version-tag/ki-wcp-version-tag.ts","../../../../libs/wcp-base/src/components/ki-modal/ki-modal.ts","../../../../libs/wcp-base/src/components/ki-toast/ki-toast.ts","../../../../libs/wcp-base/src/components/ki-accordion/ki-accordion.ts","../../../../libs/wcp-base/src/components/ki-table/ColumnResizing.ts","../../../../libs/wiski-web/src/locales/index.ts","../../../../libs/wiski-web/src/components/ki-wwp-graph/ki-wwp-ts-table.ts","../../../../libs/wcp-water/src/common/highcharts-locales.ts","../../../../libs/wiski-web/src/components/ki-wwp-graph/ki-wwp-graph.css.ts?used","../../../../libs/wiski-web/src/components/ki-wwp-graph/GraphHelper.ts","../../../../libs/wiski-web/src/components/ki-wwp-graph/ki-wwp-graph.ts","../../../../libs/wiski-web/src/components/ki-wwp-graph/ki-wwp-graph-ext.ts","../../../../libs/wiski-web/src/components/ki-wwp-graph/ki-wwp-graph-precip.css.ts?used","../../../../libs/wiski-web/src/components/ki-wwp-graph/ki-wwp-graph-helper.ts","../../../../libs/wiski-web/src/components/ki-wwp-graph/ki-wwp-graph-precip.ts","../../../../libs/wiski-web/src/components/ki-wwp-graph/ki-wwp-graph-precip-ext.ts"],"sourcesContent":["const p = function polyfill() {\n const relList = document.createElement('link').relList;\n if (relList && relList.supports && relList.supports('modulepreload')) {\n return;\n }\n for (const link of document.querySelectorAll('link[rel=\"modulepreload\"]')) {\n processPreload(link);\n }\n new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (mutation.type !== 'childList') {\n continue;\n }\n for (const node of mutation.addedNodes) {\n if (node.tagName === 'LINK' && node.rel === 'modulepreload')\n processPreload(node);\n }\n }\n }).observe(document, { childList: true, subtree: true });\n function getFetchOpts(script) {\n const fetchOpts = {};\n if (script.integrity)\n fetchOpts.integrity = script.integrity;\n if (script.referrerpolicy)\n fetchOpts.referrerPolicy = script.referrerpolicy;\n if (script.crossorigin === 'use-credentials')\n fetchOpts.credentials = 'include';\n else if (script.crossorigin === 'anonymous')\n fetchOpts.credentials = 'omit';\n else\n fetchOpts.credentials = 'same-origin';\n return fetchOpts;\n }\n function processPreload(link) {\n if (link.ep)\n // ep marker = processed\n return;\n link.ep = true;\n // prepopulate the load record\n const fetchOpts = getFetchOpts(link);\n fetch(link.href, fetchOpts);\n }\n};__VITE_IS_MODERN__&&p();","import dayjs from 'dayjs';\nimport duration from 'dayjs/plugin/duration';\nimport localizedFormat from 'dayjs/plugin/localizedFormat';\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\nimport utc from 'dayjs/plugin/utc';\nimport timezone from 'dayjs/plugin/timezone';\nimport relativeTime from 'dayjs/plugin/relativeTime';\nimport advancedFormat from 'dayjs/plugin/advancedFormat';\n\nimport 'dayjs/locale/de'; // Germany\nimport 'dayjs/locale/en-ie'; // Ireland\nimport 'dayjs/locale/is'; // ICeland\nimport 'dayjs/locale/fr'; // France\nimport 'dayjs/locale/en-gb';\n\ndayjs.extend(duration);\ndayjs.extend(customParseFormat);\ndayjs.extend(advancedFormat);\ndayjs.extend(localizedFormat);\ndayjs.extend(relativeTime);\ndayjs.extend(utc);\ndayjs.extend(timezone);\n\nexport default dayjs;\n","/* eslint-disable func-names */\nimport i18next from 'i18next';\nimport languageDetector from 'i18next-browser-languagedetector';\nimport dayjs from '../common/dayjsext';\n\nif (!i18next.isInitialized) {\n i18next.init();\n i18next.on('languageChanged', lng => {\n dayjs.locale(lng);\n });\n}\n\nexport function addNls(i18nInstance, nls) {\n Object.entries(nls).forEach(([language, rs]) => {\n // @ts-expect-error\n Object.entries(rs).forEach(([namespace, r]) => {\n i18nInstance.addResourceBundle(language, namespace, r, true, true);\n });\n });\n}\n\nfunction initFn() {\n // @ts-expect-error\n this.i18n = i18next.createInstance();\n // @ts-expect-error\n this.i18n.use(languageDetector);\n // @ts-expect-error\n this.i18n.init(\n {\n detection: {\n order: [\n 'sessionStorage',\n 'querystring',\n 'cookie',\n 'navigator',\n 'htmlTag',\n 'path',\n 'subdomain',\n 'localStorage',\n ],\n },\n defaultNS: 'common',\n debug: false,\n resources: {},\n },\n err => {\n if (err) {\n // eslint-disable-next-line no-console\n console.log('something went wrong loading', err);\n }\n },\n );\n // @ts-expect-error\n this.i18n.on('initialized', () => {\n // @ts-expect-error\n this.requestUpdate();\n });\n // @ts-expect-error\n this.i18n.on('languageChanged', () => {\n // @ts-expect-error\n this.requestUpdate();\n });\n // @ts-expect-error\n this.i18n.store.on('added', () => this.requestUpdate());\n // @ts-expect-error\n this.i18n.store.on('removed', () => this.requestUpdate());\n}\n\nconst extendCls = function (superclass, nls) {\n return class extends superclass {\n constructor() {\n super();\n this.i18n || initFn.call(this);\n addNls(this.i18n, nls);\n }\n };\n};\n\n// TODO find better method to do aspect\nexport const i18n = function (nls) {\n return function decorator(superclass) {\n return extendCls(superclass, nls);\n };\n};\n\nexport const i18nMixin = (superclass, { nls = {} }) =>\n extendCls(superclass, nls);\n","import en from './en/common.json';\nimport fr from './fr/common.json';\nimport de from './de/common.json';\n\nexport default {\n en: {\n common: en,\n },\n fr: {\n common: fr,\n },\n de: {\n common: de,\n },\n};\n","/* eslint-disable func-names */\n\nexport const getQueryObject = (target, selector, { all = false } = {}) => {\n if (all) {\n return target.renderRoot.querySelectorAll(selector);\n }\n return target.renderRoot.querySelector(selector);\n};\n\nexport const query = function (selector, { all = false } = {}) {\n return (target, _key, descriptor) => {\n delete descriptor.writable;\n delete descriptor.initializer;\n descriptor.get = getQueryObject(target, selector, { all });\n return descriptor;\n };\n};\n","/* eslint-disable max-classes-per-file */\nimport { css, html, LitElement } from 'lit';\nimport icons from '@kisters/watericons';\n/* eslint-disable import/extensions */\nimport { until } from 'lit/directives/until.js';\nimport { customElement, property } from 'lit/decorators.js';\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js';\n/* eslint-enable import/extensions */\nimport { getQueryObject } from '../../decorators/query';\n\nconst getIconPath = iconName => {\n const libName = iconName.split(' ')[0];\n\n return `./icons/${libName}/${iconName.substring(libName.length * 2 + 2)}.svg`;\n};\n\n@customElement('ki-icon')\nexport default class KiIcon extends LitElement {\n static styles = [\n css`\n :host {\n display: inline-block;\n width: 1em;\n }\n svg {\n vertical-align: middle;\n max-width: 1em;\n max-height: 1em;\n }\n `,\n ];\n\n @property({ type: String })\n icon: string = '';\n\n @property({ type: String })\n color: string = 'black';\n\n async fetchIcon() {\n if (this.icon) {\n if (this.icon.startsWith('...`)}`;\n }\n}\n","/* eslint-disable wc/no-self-class */\nimport { css } from 'lit';\n// eslint-disable-next-line import/extensions\nimport { customElement, property } from 'lit/decorators.js';\nimport KiIcon from './ki-icon';\n\n@customElement('ki-icon-btn')\nexport default class KiIconBtn extends KiIcon {\n // language=CSS\n static styles = [\n ...KiIcon.styles,\n css`\n :host {\n display: block;\n color: gray;\n fill: gray;\n background: white;\n box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14),\n 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -2px rgba(0, 0, 0, 0.2);\n width: 40px;\n height: 40px;\n text-align: center;\n line-height: 40px;\n border-radius: 40px;\n cursor: pointer;\n position: relative;\n }\n :host(:hover) ki-icon::part(icon) {\n fill: #4a4a49;\n }\n\n :host([active]) {\n color: white;\n fill: white;\n background: var(--theme-color-secondary, #0056a0);\n }\n\n :host(.ripple) {\n background-position: center;\n transition: background 0.8s;\n }\n :host(.ripple:hover) {\n background: #47a7f5 radial-gradient(circle, transparent 1%, #47a7f5 1%)\n center/15000%;\n }\n :host(.ripple:active) {\n background-color: var(--theme-color-secondary, #0056a0);\n background-size: 100%;\n transition: background 0s;\n }\n\n :host(.disabled) {\n pointer-events: none;\n opacity: 0.5;\n }\n\n svg {\n max-width: 5em;\n }\n `,\n ];\n\n @property({ type: Boolean, reflect: true })\n active = false;\n\n @property({ type: String })\n tooltip: string = '';\n\n @property({ type: Boolean })\n disabled: boolean = false;\n\n selected: boolean = false;\n\n @property({ type: Boolean })\n toggle: boolean = false;\n\n clickHandler;\n\n connectedCallback() {\n // @ts-expect-error\n if (super.connectedCallback) super.connectedCallback();\n this.clickHandler = () => {\n if (this.toggle) this.active = !this.active;\n };\n this.addEventListener('click', this.clickHandler);\n if (this.selected) this.classList.add('selected');\n }\n\n disconnectedCallback() {\n // @ts-expect-error\n if (super.disconnectedCallback) super.disconnectedCallback();\n this.removeEventListener('click', this.clickHandler);\n }\n}\n","// aspect fn with before\n/*\nexample:\n\n const a = {\n name: 'q',\n say(){\n console.log(1);\n }\n }\n\n aspect(a,'say',(origin)=>{\n return function(args){\n console.log(this.name);\n origin.apply(this);\n console.log(2);\n }\n })\n\n a.say();\n\n* */\nexport default function aspect(target, fnName, wrapper) {\n const originFn = target[fnName];\n // eslint-disable-next-line no-param-reassign\n target[fnName] = wrapper(originFn);\n}\n","/* eslint-disable func-names */\nimport { debounce } from 'lodash-es/function';\nimport { EventEmitter } from 'events';\nimport aspect from '../common/aspect';\n\nexport const SM = 'sm-screen';\nexport const MD = 'md-screen';\nexport const LG = 'lg-screen';\nexport const LANDSCAPE = 'landscape';\n\nconst emitter = new EventEmitter();\nconst XSM_BREAKPOINT = 800;\nconst MD_BREAKPOINT = 1280;\nexport const ViewPort = {\n size: LG,\n landscape: true,\n};\n\nlet detect = function () {\n // console.log(\"responsive detection\")\n let _newSize;\n let hasChaged = false;\n const w = window.innerWidth;\n const h = window.innerHeight;\n if (\n w <= XSM_BREAKPOINT ||\n /Android|webOS|iPhone|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n navigator.userAgent,\n )\n ) {\n _newSize = SM;\n } else if (w <= MD_BREAKPOINT) {\n _newSize = MD;\n } else {\n _newSize = LG;\n }\n const _newLandscape = w > h;\n\n if (_newSize !== ViewPort.size) {\n document.body.classList.remove(SM, MD, LG);\n document.body.classList.add(_newSize);\n ViewPort.size = _newSize;\n hasChaged = true;\n }\n if (ViewPort.landscape !== _newLandscape) {\n document.body.classList.toggle(LANDSCAPE, _newLandscape);\n ViewPort.landscape = _newLandscape;\n hasChaged = true;\n }\n if (hasChaged) {\n emitter.emit('changed');\n }\n};\n\ndetect = debounce(detect, 50);\n\nwindow.addEventListener('resize', detect);\nwindow.addEventListener('orientationchange', detect);\nwindow.addEventListener('DOMContentLoaded', detect);\n\nfunction connectedCallbackForTarget(target) {\n target.$resizeHandler = () => {\n if (target.isConnected) {\n // console.log(\"responsive change sizemode\", target)\n target.classList.remove(SM, MD, LG);\n target.classList.add(ViewPort.size);\n target.classList.toggle('LANDSCAPE', ViewPort.landscape);\n target.requestUpdate();\n } else {\n // console.log(\"responsive change sizemod for disconnceted\", target)\n }\n };\n emitter.on('changed', target.$resizeHandler);\n target.$resizeHandler();\n}\n\nfunction disconnectedCallbackForTarget(target) {\n emitter.removeListener('changed', target.$resizeHandler);\n}\n\nexport const responsive = function (target) {\n // console.log(\"responsive decorator for\", target)\n // console.log(\"responsive wrapped connectedCallback\")\n aspect(\n target.prototype,\n 'connectedCallback',\n origin =>\n function () {\n // @ts-expect-error\n connectedCallbackForTarget(this);\n // @ts-expect-error\n origin.apply(this);\n },\n );\n\n aspect(\n target.prototype,\n 'disconnectedCallback',\n origin =>\n function () {\n // @ts-expect-error\n disconnectedCallbackForTarget(this);\n // @ts-expect-error\n origin.apply(this);\n },\n );\n};\n\nexport const responsiveMixin = function (clz) {\n return class extends clz {\n connectedCallback() {\n connectedCallbackForTarget(this);\n if (super.connectedCallback) super.connectedCallback();\n }\n\n disconnectedCallback() {\n disconnectedCallbackForTarget(this);\n if (super.disconnectedCallback) super.disconnectedCallback();\n }\n };\n};\n","// TODO move to base\nexport default function f(claz) {\n const anonymity = class extends claz {\n static __$propertyDefaultValues = {};\n\n static getPropertyDescriptor(name, key, _options) {\n if (Object.hasOwnProperty.call(_options, 'initial')) {\n this.__$propertyDefaultValues[key] = _options.initial;\n }\n\n if (Object.hasOwnProperty.call(_options, 'default')) {\n this.__$propertyDefaultValues[key] = () => _options.default;\n }\n\n return super.getPropertyDescriptor(name, key, _options);\n }\n\n constructor() {\n super();\n Object.entries(anonymity.__$propertyDefaultValues).forEach(\n ([k, initial]) => {\n // @ts-expect-error\n this[k] = initial();\n },\n );\n }\n };\n\n return anonymity;\n}\n","export default function Mix(...clzs) {\n // TODO temp, try to do same as properties.\n return clzs.reduce((c1, c2) => {\n let c3;\n if (Array.isArray(c2)) {\n c3 = c2[0](c1, c2[1]);\n } else {\n c3 = c2(c1);\n }\n c3.styles = [].concat(c1.styles || []).concat(c3.styles || []);\n return c3;\n });\n}\n","import { Router } from '@vaadin/router';\nimport { BehaviorSubject } from 'rxjs';\n\nconst defaultUrl = '/';\n\nlet _searchString = '';\n\nlet _lastParamsString = '';\n\nlet _urlParams = new URLSearchParams(_searchString);\n\nconst _getUrlParams = (): URLSearchParams => {\n if (_lastParamsString !== _searchString) {\n _urlParams = new URLSearchParams(_searchString);\n _lastParamsString = _searchString;\n }\n\n return _urlParams;\n};\n\nconst _rewriteHashedSearchParams = (newString: string): void => {\n const path = window.location.hash.split('?')[0];\n const searchString = `${\n newString && newString.length > 0 ? `?${newString}` : ''\n }`;\n window.location.hash = `${path}${searchString}`;\n};\n\nexport const searchParamsChangedSubject = new BehaviorSubject(true);\n\nclass HashRouter extends Router {\n /* eslint-disable class-methods-use-this */\n /* eslint-disable no-unused-vars */\n __updateBrowserHistory({ pathname, search }) {\n _searchString = search || '';\n const pathWithSearchParam = `${pathname}${_searchString}`;\n if (window.location.hash.length === 0) {\n window.location.hash = `#${defaultUrl}`;\n } else if (window.location.hash.substring(1) !== pathWithSearchParam) {\n window.location.hash = `#${pathWithSearchParam}`;\n }\n searchParamsChangedSubject.next(true);\n }\n\n navigationChange(newRoute, oldRoute) {\n console.log(newRoute, oldRoute);\n }\n\n /* eslint-enable class-methods-use-this */\n /* eslint-enable no-unused-vars */\n async __resolveRoute(context) {\n if (context.hash && context.hash.length > 0) {\n Router.go(context.hash.substring(1));\n return null;\n }\n // @ts-expect-error\n return super.__resolveRoute(context);\n }\n}\n\nfunction globalHashChangeHandler(event: any): void {\n if (event.newURL.split('?')[0] !== event.oldURL.split('?')[0]) {\n const pathname =\n event.newURL.indexOf('#') > -1\n ? event.newURL.substring(event.newURL.indexOf('#') + 1)\n : '/';\n\n Router.go(pathname);\n }\n}\n\nconst HASHCHANGE = {\n activate() {\n window.addEventListener('hashchange', globalHashChangeHandler, false);\n },\n\n inactivate() {\n window.removeEventListener('hashchange', globalHashChangeHandler, false);\n },\n};\n\n// @ts-expect-error\nRouter.NavigationTrigger = [HASHCHANGE];\n\nlet router;\n\nconst getSearchParams = (): URLSearchParams => {\n if (router?.location.searchParams) {\n return router?.location.searchParams;\n }\n return _getUrlParams();\n};\n\n/**\n * Initializes the router and subscribes to window events. Call unsubscribe when router is no longer needed.\n * @param {string} baseUrl baseurl. Can be the base url of the application (\"import.meta.env.BASE_URL\" for a vite app) or the base url + url for a sub view if this router is a nested one.\n */\nexport const initRouter = (baseUrl: string): void => {\n router = new HashRouter(null, { baseUrl });\n router.subscribe();\n};\n\n/**\n * @param {Array} routes The vaid routes for this router. See https://vaadin.github.io/router/vaadin-router/#/classes/Router#method-setRoutes\n */\nexport const setRoutes = (routes: Array): void => {\n router.setRoutes([\n // Redirect to URL without trailing slash\n {\n path: '(.+)/',\n action: (context, commands) => {\n const newPath = context.pathname.slice(0, -1);\n return commands.redirect(newPath);\n },\n },\n ...routes,\n // Remove the following section to deactivate defaultUrl\n {\n path: '(.*)',\n action: (context, commands) =>\n commands.redirect(context.path.split('/').slice(0, -1).join('/')),\n },\n ]);\n};\n\n/**\n * Attaches router to a DOM Element in which the view gets rendered\n * @param {?Node} outlet The (DOM) Element where the components will be rendered to\n */\nexport const attachRouter = (outlet: Element): void => {\n router.setOutlet(outlet);\n};\n\n/**\n * @returns The current location Object of the Vaadin Router.\n */\nexport const getCurrentLocation = (): any => router.location;\n\n/**\n * @param {string} name The name of the route you want to get\n * @param {Object} params Params. See https://vaadin.github.io/router/vaadin-router/#/classes/Router\n * @returns The url leading to the specified component\n */\nexport const urlForName = (name: string, params: any): string =>\n router.urlForName(name, params);\n\n/**\n * @returns Returns the String of all Search Params from the URL\n */\nexport const getCurrentPath = (): string => router.location.pathname;\n\n/**\n * @returns Returns the String of all Search Params from the URL\n */\nexport const getSearchParamString = (): string => _searchString;\n\n/**\n * Gets a single value of the given param.\n * @param {string} param The parameter you're looking for.\n * @returns Returns the value of the prameter\n */\nexport const getSearchParam = (param: string): string | null =>\n getSearchParams().get(param);\n\n/**\n * Gets an array with all values of the given param.\n * @param {string} param The parameter you're looking for.\n * @returns Returns the value of the prameter\n */\nexport const getAllSearchParams = (param: string): Array =>\n getSearchParams().getAll(param);\n\n/**\n * @param {string} param The parameter you want to set.\n * @param {string} value The value to set.\n */\nexport const setSearchParam = (param: string, value: string): void => {\n const urlParams = _getUrlParams();\n if (!value || (Array.isArray(value) && value.length === 0)) {\n urlParams.delete(param);\n } else if (Array.isArray(value)) {\n urlParams.set(param, value[0]);\n const [, ...rest] = value;\n rest.forEach(val => urlParams.append(param, val));\n } else {\n urlParams.set(param, value);\n }\n\n const paramString = urlParams.toString();\n\n if (paramString !== _searchString) {\n _searchString = paramString;\n _lastParamsString = paramString;\n\n _rewriteHashedSearchParams(paramString);\n }\n};\n\n/**\n * Gets the options and route params for the location.\n * You can call this method inside 'onAfterEnter' in your component.\n * @param {Object} location Current location Object of Vaadin Router.\n * @param {Array} paramNames Array of parameters to load.\n * @returns Returns the value of the prameter\n */\nexport const getRouteOptionsAndParams = (\n location: any,\n paramNames: Array,\n): any => {\n const { options } = location.route;\n const { params } = location;\n\n const ret = { options };\n\n paramNames.forEach(paramName => {\n ret[paramName] = params[paramName];\n });\n\n return ret;\n};\n\n/**\n * @param {string} path The path you want to route to\n * @param {boolean} conserveSearchParams Whether to preserve the search parameters.\n * @returns Returns a boolean without waiting until the navigation is complete. Returns true if at least one Router has handled the navigation (was subscribed and had baseUrl matching the path argument), otherwise returns false.\n */\nexport const navigateTo = (\n path: string,\n conserveSearchParams: boolean = false,\n): boolean => {\n let navTo = path;\n if (conserveSearchParams) {\n const searchParamString = getSearchParamString();\n const addString = `${\n searchParamString.length > 0 && !searchParamString.startsWith('?')\n ? '?'\n : ''\n }${searchParamString}`;\n navTo = `${navTo}${addString}`;\n }\n router.navigationChange(\n navTo.split('?')[0],\n router.location.pathname.split('?')[0],\n );\n return Router.go(navTo);\n};\n\n/**\n * Unregisters the router from window events\n */\nexport const unregisterRouter = (): void => {\n router.unsubscribe();\n};\n","import { LitElement, html } from 'lit';\n// eslint-disable-next-line import/extensions\nimport { customElement, property } from 'lit/decorators.js';\nimport { navigateTo } from './routing/ki-router';\n\n@customElement('ki-link')\nexport default class KiLink extends LitElement {\n @property({ type: String })\n href: string = '';\n\n @property({ type: String })\n label: string = '';\n\n constructor() {\n super();\n this.addEventListener('click', () => {\n navigateTo(this.href);\n });\n }\n\n render() {\n // language=html\n return html`${this.label}`;\n }\n}\n","// view stack\nimport { css, html, LitElement } from 'lit';\nimport { customElement } from 'lit/decorators.js';\n\nimport Mix from '../../common/Mix';\nimport PropertyDefaultValue from '../../common/PropertyDefaultValue';\n\nimport './ki-link';\n\n// @ts-expect-error\n@customElement('ki-breadcrumbs')\nexport default class KiBreadcrumbs extends Mix(\n LitElement,\n PropertyDefaultValue,\n) {\n // language=CSS\n static styles = css`\n :host {\n display: block;\n padding: var(--ki-breadcrumbs-padding, 0px);\n background: var(--ki-breadcrumbs-background, white);\n border-bottom: var(\n --ki-breadcrumbs-border-bottom,\n var(--ki-breadcrumbs-border, none)\n );\n border-top: var(\n --ki-breadcrumbs-border-top,\n var(--ki-breadcrumbs-border, none)\n );\n border-radius: var(--ki-breadcrumbs-border-radius, 0px);\n box-shadow: var(--ki-breadcrumbs-box-shadow, none);\n font-size: var(--ki-breadcrumbs-font-size, 0.8em);\n line-height: var(--ki-breadcrumbs-line-height, 16px);\n white-space: var(--ki-breadcrumbs-white-space, nowrap);\n overflow: auto hidden;\n }\n\n .breadcrumb {\n display: inline-flex;\n position: relative;\n }\n .breadcrumb:hover {\n cursor: pointer;\n }\n .breadcrumb .label {\n padding: var(--ki-breadcrumbs-label-padding, 8px);\n display: inline-block;\n color: var(--ki-breadcrumbs-textcolor, black);\n }\n .breadcrumb:hover .label {\n background: var(--theme-color-secondary, white);\n color: var(\n --ki-breadcrumbs-textcolor-hover,\n --ki-breadcrumbs-textcolor,\n darkgray\n );\n }\n\n .breadcrumb::after {\n content: '\\\\f018';\n display: inline-block;\n text-align: center;\n font-family: Kisterswater;\n font-size: 16px;\n font-stretch: 100%;\n font-style: normal;\n font-weight: 400;\n text-rendering: auto;\n align-self: center;\n width: var(--ki-breadcrumbs-after-width, 24px);\n -webkit-font-smoothing: antialiased;\n color: var(--ki-breadcrumbs-textcolor, black);\n transform: var(--ki-breadcrumbs-after-transform, none);\n }\n\n .last::after {\n content: unset !important;\n }\n\n @media only screen and (min-width: 800px) {\n .breadcrumb.last .label {\n pointer-events: none;\n }\n }\n\n .breadcrumb.last .label {\n color: var(--ki-breadcrumbs-last-textcolor, black);\n }\n `;\n\n static get properties() {\n return {\n items: { type: Array, initial: () => [] },\n };\n }\n\n render() {\n // language=html\n const l = this.items.length;\n return this.items.map(\n (item, i: number) =>\n // Detect last item and do not render arrow\n // Required for Firefox as CSS-Selector solution did not work in Shadow-DOM\n html`
= l ? `last` : ``}\">\n \n
`,\n );\n }\n}\n","/* eslint-disable func-names */\nimport { html } from 'lit';\nimport aspect from '../common/aspect';\n\nconst _loaderMixin = {\n __$loaderCount: 0,\n\n get loading() {\n return this.__$loaderCount > 0;\n },\n\n promiseLoader(p) {\n this.__$loaderCount += 1;\n // @ts-expect-error\n this.requestUpdate();\n return p.finally(() => {\n this.__$loaderCount -= 1;\n // @ts-expect-error\n this.requestUpdate();\n });\n },\n\n // default loader\n _renderLoader() {\n if (this.loading) {\n return html`\n \n
\n `;\n }\n return '';\n },\n};\n\nconst loaderTargetFn = function (prototype) {\n Object.assign(prototype, _loaderMixin);\n aspect(\n prototype,\n 'render',\n origin =>\n function () {\n // @ts-expect-error\n return html`${this._renderLoader()}${origin.apply(this)}`;\n },\n );\n};\n\nexport const loaderFn = function (target) {\n loaderTargetFn(target.prototype);\n};\n\nexport const loader = function () {\n return function decorator(target) {\n loaderFn(target);\n };\n};\n\nexport const loaderMixin = function (clz) {\n return class extends clz {\n constructor() {\n super();\n loaderTargetFn(this);\n }\n };\n};\n","let config: any = {};\nlet routes: Array = [];\n\nlet initialized = false;\n\nconst _assertInitialized = () => {\n if (!initialized) {\n throw new Error(\"Config hasn't been loaded yet!\");\n }\n};\n\nconst getRoutesFromConfig = (configRoutes, importActions) =>\n configRoutes.map(route => {\n const newRoute = { ...route };\n\n const actions = importActions.filter(\n act => act.component === route.component,\n );\n\n if (actions.length > 0) {\n // should be only one\n newRoute.action = actions[0].importAction;\n }\n\n if (route.children && route.children.length > 0) {\n newRoute.children = getRoutesFromConfig(route.children, importActions);\n }\n\n return newRoute;\n });\n\nexport const initConfig = async (configPath, importActions) => {\n const resp = await fetch(configPath);\n config = await resp.json();\n routes = getRoutesFromConfig(config.route, importActions);\n\n initialized = true;\n return config;\n};\n\nexport const getConfig = () => config;\n\nexport const getRoutes = () => {\n _assertInitialized();\n return routes;\n};\n\nexport const getNavItemLabel = path => {\n _assertInitialized();\n let ret = '';\n config.navList.forEach(navItem => {\n if (navItem.link === path) {\n ret = navItem.breadcrumb ?? navItem.label;\n }\n if (navItem.items) {\n navItem.items.forEach(subNavItem => {\n if (subNavItem.link === path) {\n ret = subNavItem.breadcrumb ?? subNavItem.label;\n }\n });\n }\n });\n\n return ret;\n};\n\nexport const getNavItems = () => {\n _assertInitialized();\n return config.navList;\n};\n\nexport const getApiPath = () => {\n _assertInitialized();\n return config.apiPath;\n};\n\nexport const getLeftLogoLink = () => {\n _assertInitialized();\n return config.leftLogoLink;\n};\n\nexport const getRightLogoLink = () => {\n _assertInitialized();\n return config.rightLogoLink;\n};\n\nexport const getLogoOptions = () => {\n _assertInitialized();\n return config.logo;\n};\n\nexport const getCsvDelimiter = () => {\n _assertInitialized();\n return config.csvDelimiter ?? ';';\n};\n","/* eslint-disable max-classes-per-file */\n// view stack\nimport { css, html, LitElement } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport Mix from '../../common/Mix';\nimport PropertyDefaultValue from '../../common/PropertyDefaultValue';\nimport './ki-breadcrumbs';\nimport { loaderMixin } from '../../decorators/loader';\nimport nls from '../../locales/index';\nimport { i18nMixin } from '../../decorators/i18n';\nimport { getCurrentLocation } from './routing/ki-router';\nimport { getNavItemLabel } from './services/ki-app-config-service';\n\nconst getPreviousSiblings = route => {\n if (!route.parent || !route.parent.children) {\n return [];\n }\n const siblings = route.parent.children.filter(\n child =>\n child.path.length < route.path.length &&\n route.path.startsWith(child.path),\n );\n siblings.sort((a, b) => a.path.length > b.path.length);\n return siblings;\n};\n\nconst getFullPath = route => {\n if (!route || !route.path || route.path === '' || route.path === '/') {\n return '';\n }\n return `${getFullPath(route.parent)}${route.path}`;\n};\n\nconst getCrumb = (route, params, search) => {\n let fullPath = getFullPath(route);\n let { label } = route;\n Object.entries(params).forEach(([key, value]) => {\n fullPath = fullPath.replace(`:${key}`, value);\n label = getNavItemLabel(fullPath) || label.replace(`\\${${key}}`, value);\n });\n return {\n path: `${fullPath}${search || ''}`,\n label,\n };\n};\n\nconst recursivelyGetCrumbs = (route, params, search) => {\n if (route.path === '') {\n return [];\n }\n const siblingsCrumbs = getPreviousSiblings(route)\n .filter(sibling => sibling.label)\n .map(sibling => getCrumb(sibling, params, search));\n const parentCrumbs = recursivelyGetCrumbs(route.parent, params, search);\n\n if (route.label) {\n return [\n ...parentCrumbs,\n ...siblingsCrumbs,\n getCrumb(route, params, search),\n ];\n }\n return [...parentCrumbs, ...siblingsCrumbs];\n};\n\nconst calculateBreadCrumbs = location => {\n const { route, params, search } = location;\n\n return recursivelyGetCrumbs(route, params, search);\n};\n\n// @ts-expect-error\n@customElement('ki-app-breadcrumbs')\nexport default class KiAppBreadcrumbs extends Mix(\n LitElement,\n PropertyDefaultValue,\n [i18nMixin, { nls }],\n loaderMixin,\n) {\n // language=CSS\n static styles = css`\n :host {\n display: block;\n }\n `;\n\n @property({ type: Number })\n maxitems = Infinity;\n\n constructor() {\n super();\n this.breadCrumbs = [];\n }\n\n connectedCallback() {\n if (super.connectedCallback) super.connectedCallback();\n window.addEventListener(\n 'vaadin-router-location-changed',\n this.handleVaadinRouterEvent,\n );\n }\n\n disconnectedCallback() {\n if (super.disconnectedCallback) super.disconnectedCallback();\n window.removeEventListener(\n 'vaadin-router-location-changed',\n this.handleVaadinRouterEvent,\n );\n }\n\n handleVaadinRouterEvent = event => {\n this._setBreadCrumbs(event.detail.location);\n };\n\n _setBreadCrumbs(location) {\n this.breadCrumbs = calculateBreadCrumbs(location).slice(0, this.maxitems);\n this.requestUpdate();\n }\n\n render() {\n // language=html\n return (\n this._renderLoader() ||\n html` `\n );\n }\n\n firstUpdated() {\n this._setBreadCrumbs(getCurrentLocation());\n }\n}\n","/* eslint-disable max-classes-per-file */\nimport { css, html, LitElement } from 'lit';\n// eslint-disable-next-line import/extensions\nimport { customElement } from 'lit/decorators.js';\nimport { i18nMixin, addNls } from '../../decorators/i18n';\nimport nls from '../../locales/index';\nimport '../ki-icon/ki-icon';\nimport '../ki-icon/ki-icon-btn';\nimport { responsiveMixin, SM, ViewPort } from '../../decorators/responsive';\nimport PropertyDefaultValue from '../../common/PropertyDefaultValue';\nimport Mix from '../../common/Mix';\n\nimport './ki-app-breadcrumbs';\n\n// @ts-expect-error\n@customElement('ki-app')\nexport default class KiApp extends Mix(\n LitElement,\n PropertyDefaultValue,\n [i18nMixin, { nls }],\n responsiveMixin,\n) {\n // var headerHeight\n\n // language=CSS\n static styles = css`\n :host {\n height: 100%;\n width: 100%;\n }\n\n .ki-app-container {\n height: 100%;\n width: 100%;\n display: flex;\n flex-direction: column;\n }\n\n .header {\n display: flex;\n height: 60px;\n background: var(--theme-color-tertiary, 'white');\n overflow: visible;\n }\n\n ki-icon-btn {\n display: none;\n }\n\n :host .logo {\n flex: 0;\n }\n\n .spacer {\n flex: 1;\n height: 100%;\n }\n\n .nav {\n z-index: 99;\n width: 100%;\n overflow: visible;\n }\n\n .main {\n flex: 1;\n overflow: auto;\n display: flex;\n flex-direction: column;\n }\n\n .main-slot {\n flex: 1;\n overflow: auto;\n }\n\n .drawer-container {\n display: block;\n left: -100%;\n width: 100%;\n height: calc(100% - 80px);\n top: 60px;\n position: absolute;\n z-index: 9999;\n transition: left 0s 0.5s;\n }\n\n .drawer-container.visible {\n left: 0;\n transition: left 0s 0s;\n }\n\n .overlay {\n background: rgba(0, 0, 0, 0.5);\n width: 100%;\n height: 100%;\n display: none;\n position: fixed;\n opacity: 0;\n top: 0;\n transition: all 0.5s;\n }\n\n .drawer {\n display: block;\n max-width: 95%;\n position: absolute;\n background: var(--theme-text-color, white);\n z-index: 1;\n height: 100%;\n left: -100%;\n transition: left 0.5s;\n }\n\n .drawer-container.visible .drawer {\n left: 0;\n }\n\n .drawer-container.visible .overlay {\n display: block;\n opacity: 1;\n }\n\n :host(.sm-screen) [active] {\n display: block;\n background: transparent;\n box-shadow: none;\n fill: var(--theme-color-primary, white);\n margin: 10px;\n }\n\n :host(.sm-screen) .logo {\n flex: 1;\n text-align: center;\n }\n\n :host(.sm-screen) .spacer {\n flex: 0 0 50px;\n }\n\n :host(.sm-screen) .nav {\n display: none;\n }\n :host(.sm-screen.LANDSCAPE) .drawer-container {\n top: 0px;\n height: 100%;\n }\n :host(.sm-screen.LANDSCAPE) .drawer {\n left: 60px;\n }\n `;\n\n static get properties() {\n return {\n drawerWidth: {\n type: String,\n default: '95%',\n },\n _sideBarVisible: {\n type: Boolean,\n default: false,\n },\n nls: {\n type: String,\n },\n };\n }\n\n constructor() {\n // TODO\n super();\n\n // Close menu (e.g. Pressing \"Start\" while being in \"Start\")\n window.addEventListener('selected', () => {\n this._sideBarVisible = false;\n });\n\n window.addEventListener('hashchange', () => {\n this._sideBarVisible = false;\n });\n }\n\n _setNls() {\n this.i18n && this.nls && addNls(this.i18n, this.nls);\n }\n\n _renderDrawer() {\n return html` \n
\n
\n \n
\n `;\n }\n\n _renderHeader() {\n return html`\n
\n \n
\n \n
\n
\n
\n ${ViewPort.size === SM ? '' : html``}\n
\n
\n `;\n }\n\n // eslint-disable-next-line class-methods-use-this\n _renderMain() {\n return html`
\n \n \n
`;\n }\n\n // eslint-disable-next-line class-methods-use-this\n _renderFooter() {\n return html``;\n }\n\n render() {\n // language=html\n return html`\n
\n ${ViewPort.size === SM ? this._renderDrawer() : ''}\n ${this._renderHeader()} ${this._renderMain()} ${this._renderFooter()}\n
\n `;\n }\n\n toggleSideBar() {\n this._sideBarVisible = !this._sideBarVisible;\n }\n}\n","import { css, html, LitElement } from 'lit';\n// eslint-disable-next-line import/extensions\nimport { customElement, property } from 'lit/decorators.js';\nimport { getQueryObject } from '../../decorators/query';\nimport {\n initRouter,\n setRoutes,\n attachRouter,\n unregisterRouter,\n} from './routing/ki-router';\n\nconst _initDarkMode = () => {\n import('./services/ki-theme-service').then(themeService => {\n themeService.init();\n });\n};\n\n@customElement('ki-app-index')\nexport default class KiAppBootstrapper extends LitElement {\n get _mainElement() {\n return getQueryObject(this, '.app-container');\n }\n\n // language=CSS\n static styles = css`\n :host {\n height: 100%;\n width: 100%;\n }\n\n .app-container {\n height: 100%;\n width: 100%;\n }\n `;\n\n @property({ type: String })\n baseUrl: string = '/';\n\n @property({ type: Object })\n route: any;\n\n @property({ type: Boolean })\n themable: boolean = false;\n\n render() {\n // language=html\n return html`
`;\n }\n\n firstUpdated() {\n if (this.themable) {\n _initDarkMode();\n }\n if (this.route && this._mainElement) {\n initRouter(this.baseUrl);\n // register routes in vaadin router\n setRoutes(this.route);\n attachRouter(this._mainElement);\n } else {\n console.error(\n `couldn't initialize router! baseUrl: ${this.baseUrl} route: ${this.route} mainElement: ${this._mainElement}`,\n );\n }\n }\n\n disconnectedCallback() {\n // @ts-expect-error\n if (super.disconnectedCallback) super.disconnectedCallback();\n unregisterRouter();\n }\n}\n","/* eslint-disable wc/no-self-class */\nimport { html, css, LitElement } from 'lit';\n// eslint-disable-next-line import/extensions\nimport { customElement } from 'lit/decorators.js';\nimport '../ki-icon/ki-icon';\nimport PropertyDefaultValue from '../../common/PropertyDefaultValue';\nimport Mix from '../../common/Mix';\n\n// @ts-expect-error\n@customElement('ki-nav')\nexport default class KiNav extends Mix(LitElement, PropertyDefaultValue) {\n // language=css\n static styles = css`\n :host(.vertical) {\n display: flex;\n flex-direction: column;\n padding: 5px 0px;\n height: 100%;\n }\n\n :host(.horizontal) ki-list {\n display: flex;\n color: var(--theme-text-color);\n fill: var(--theme-text-color);\n }\n :host(.horizontal) ki-list > ki-list-item,\n :host(.horizontal) ki-list > ki-list-item-group {\n display: inline-block;\n }\n :host(.horizontal) ki-list > ki-list-item-group .children {\n position: absolute;\n top: 100%;\n right: 0;\n background: white;\n color: var(--theme-color);\n fill: var(--theme-color);\n padding-top: 5px;\n box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14),\n 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -2px rgba(0, 0, 0, 0.2);\n }\n\n :host(.horizontal) .nav-item {\n padding: 8px;\n }\n\n ki-list-item-group .children.folded {\n display: none;\n }\n\n .nav-item {\n display: flex;\n flex-direction: row;\n align-items: center;\n cursor: pointer;\n padding: 4px;\n }\n .nav-icon {\n min-width: 30px;\n text-align: center;\n }\n\n .nav-label {\n padding: 0px 15px 0px 10px;\n flex: 1;\n }\n `;\n\n static get properties() {\n return {\n direction: { type: String, default: 'vertical' }, // vertical, horizontal\n items: { type: Array, initial: () => [] },\n value: { type: String },\n selectedItem: { type: Object },\n };\n }\n\n // TODO move to global object\n // eslint-disable-next-line class-methods-use-this\n get _selectedView() {\n return `#${window.location.hash.slice(1).split('?')[0] || ''}`;\n }\n\n // eslint-disable-next-line class-methods-use-this\n set _selectedView(link) {\n window.location.hash = link;\n }\n\n renderItem(item) {\n if (item.items?.length > 0) {\n // language=html\n return html` \n {\n item.folded = !item.folded;\n this.requestUpdate();\n }}\"\n >\n
\n
\n
${item.label}
\n
\n \n
\n
\n \n
\n ${item.items.map(t => this.renderItem(t))}\n
\n
`;\n }\n // language=html\n return html` this.handleClick(item)}\"\n >\n
\n
\n
${item.label}
\n
\n `;\n }\n\n render() {\n this.classList.toggle('vertical', this.direction === 'vertical');\n this.classList.toggle('horizontal', this.direction === 'horizontal');\n // language=html\n return html`\n ${this.items.map(item => this.renderItem(item))}\n `;\n }\n\n handleClick(item) {\n if (this.selectedItem === item) {\n return;\n }\n this.dispatchEvent(\n new CustomEvent('selected', {\n detail: {\n item,\n },\n }),\n );\n this._selectedView = item.link;\n }\n}\n","import { ReplaySubject } from 'rxjs';\n\nexport const currentTheme = new ReplaySubject(1);\n\nlet darkTheme: boolean | undefined;\n\nexport const updateTheme = () => {\n if (darkTheme !== undefined) {\n currentTheme.next(darkTheme);\n }\n};\n\nconst setDarkTheme = (newTheme: boolean, dontUpdate: boolean = false) => {\n darkTheme = newTheme;\n if (!dontUpdate) {\n updateTheme();\n }\n};\n\nexport const init = () => {\n setDarkTheme(window.matchMedia('(prefers-color-scheme: dark)').matches);\n};\n\nexport const isDarkTheme = (): boolean => {\n if (darkTheme === undefined) {\n throw new Error('Theme Service needs to be initialized first.');\n }\n\n return darkTheme;\n};\n\nexport const toggleTheme = (dontUpdate: boolean = false): boolean => {\n const newValue = !darkTheme;\n setDarkTheme(newValue, dontUpdate);\n return newValue;\n};\n\nexport const activateLightTheme = () => {\n setDarkTheme(false);\n};\n\nexport const activateDarkTheme = () => {\n setDarkTheme(true);\n};\n","import { html } from 'lit';\n\nexport class Loader extends EventTarget {\n get loading() {\n return this._$loaderCount > 0;\n }\n\n _loaderCountChanged = new Event('loaderCountChanged');\n\n _$loaderCount = 0;\n\n promiseLoader(p) {\n this._$loaderCount += 1;\n this.dispatchEvent(this._loaderCountChanged);\n return p.finally(() => {\n this._$loaderCount -= 1;\n this.dispatchEvent(this._loaderCountChanged);\n });\n }\n\n // default loader\n _renderLoader() {\n if (this.loading) {\n return html`\n \n
\n
\n
\n
\n
\n
\n
\n `;\n }\n return '';\n }\n}\n","import { Loader } from './Loader';\n// deprecated\n/*\n *\n * provide loader counting functionality\n *\n * class A extend LoaderMixin(parentClass){\n *\n * someFn(){\n * ...\n * promiseLoader(new Promise())\n * ...\n *\n * console.log(this.loading); //show loading status\n * }\n *\n * }\n *\n * */\nexport default function LoaderMixin(clz) {\n return class extends clz {\n _loader = new Loader();\n\n loaderUpdate() {\n this.requestUpdate();\n }\n\n constructor() {\n super();\n this._loader.addEventListener('loaderCountChanged', () =>\n this.loaderUpdate(),\n );\n }\n\n get loading() {\n return this._loader.loading;\n }\n\n promiseLoader(p) {\n return this._loader.promiseLoader(p);\n }\n\n // default loader\n _renderLoader() {\n return this._loader._renderLoader();\n }\n };\n}\n","import { css, html } from 'lit';\n\nexport default function MsgMixin(clz) {\n return class extends clz {\n static styles = css`\n .msg {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n\n .msg .error {\n color: red;\n }\n `;\n\n constructor() {\n super();\n this._msg = '';\n }\n\n _renderMsg() {\n if (this._msg) {\n return html`
${this._msg}
`;\n }\n return '';\n }\n\n set msg(msg) {\n this._msg = msg;\n this.requestUpdate();\n }\n };\n}\n","// TODO move to i18n\n\nimport { mapValues, get } from 'lodash-es/object';\n\nexport function translate(obj, i18n) {\n if (obj) {\n if (typeof obj === 'string') {\n return obj.replace(/\\$i18n{([\\s\\S]+?)}/g, (_match, p1) => i18n.t(p1));\n }\n\n if (Array.isArray(obj)) {\n return obj.map(s => translate(s, i18n));\n }\n\n if (typeof obj === 'object') {\n return mapValues(obj, s => translate(s, i18n));\n }\n }\n return obj;\n}\n\nexport function readCookie(name) {\n const nameEQ = `${name}=`;\n const ca = document.cookie.split(';');\n for (let i = 0; i < ca.length; i += 1) {\n let c = ca[i];\n while (c.charAt(0) === ' ') c = c.substring(1, c.length);\n if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length);\n }\n return null;\n}\n\nexport function template(t, data) {\n if (typeof t === 'string') {\n return t.replace(/\\${([\\s\\S]+?)}/g, (_match, p1) => get(data, p1));\n }\n return t;\n}\n\nexport function RGBAToHex(rgba) {\n const inParts = rgba.substring(rgba.indexOf('(')).split(',');\n const r = Number(inParts[0].substring(1).trim());\n const g = Number(inParts[1].trim());\n const b = Number(inParts[2].trim());\n // const a = parseFloat(inParts[3].substring(0, inParts[3].length - 1).trim()).toFixed(2);\n const outParts = [r.toString(16), g.toString(16), b.toString(16)];\n\n // Pad single-digit output values\n outParts.forEach((part, i) => {\n if (part.length === 1) {\n outParts[i] = `0${part}`;\n }\n });\n\n return `#${outParts.join('')}`;\n}\n\nfunction padZero(str, len = 2) {\n const zeros = new Array(len).join('0');\n return (zeros + str).slice(-len);\n}\n\nexport function contrastColor(colorVal, bw) {\n let hex = colorVal;\n if (colorVal.includes('rgba')) {\n hex = RGBAToHex(hex);\n }\n if (hex.indexOf('#') === 0) {\n hex = hex.slice(1);\n }\n // convert 3-digit hex to 6-digits.\n if (hex.length === 3) {\n hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\n }\n if (hex.length !== 6) {\n throw new Error('Invalid HEX color.');\n }\n const r = parseInt(hex.slice(0, 2), 16);\n const g = parseInt(hex.slice(2, 4), 16);\n const b = parseInt(hex.slice(4, 6), 16);\n if (bw) {\n return r * 0.299 + g * 0.587 + b * 0.114 > 186 ? '#000000' : '#FFFFFF';\n }\n // invert color components\n const rStr = (255 - r).toString(16);\n const gStr = (255 - g).toString(16);\n const bStr = (255 - b).toString(16);\n // pad each with zeros and return\n return `#${padZero(rStr)}${padZero(gStr)}${padZero(bStr)}`;\n}\n\nfunction fallbackCopyTextToClipboard(text) {\n const textArea = document.createElement('textarea');\n textArea.value = text;\n\n // Avoid scrolling to bottom\n textArea.style.top = '0';\n textArea.style.left = '0';\n textArea.style.position = 'fixed';\n\n document.body.appendChild(textArea);\n textArea.focus();\n textArea.select();\n\n try {\n const successful = document.execCommand('copy');\n const msg = successful ? 'successful' : 'unsuccessful';\n // eslint-disable-next-line no-console\n console.info(`Fallback: Copying text command was ${msg}`);\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error('Fallback: Oops, unable to copy', err);\n }\n\n document.body.removeChild(textArea);\n}\n\nexport function copyTextToClipboard(text) {\n if (!navigator.clipboard) {\n fallbackCopyTextToClipboard(text);\n return;\n }\n navigator.clipboard.writeText(text).then(\n () => {\n // eslint-disable-next-line no-console\n console.info('Async: Copying to clipboard was successful!');\n },\n err => {\n // eslint-disable-next-line no-console\n console.error('Async: Could not copy text: ', err);\n },\n );\n}\n\nexport function addSwipeEvents(target, handle) {\n let touchstartX = 0;\n let touchstartY = 0;\n let touchendX = 0;\n let touchendY = 0;\n let timerstart = new Date().getTime();\n target.addEventListener(\n 'touchstart',\n event => {\n timerstart = new Date().getTime();\n touchstartX = event.changedTouches[0].screenX;\n touchstartY = event.changedTouches[0].screenY;\n },\n false,\n );\n\n target.addEventListener(\n 'touchend',\n event => {\n if (new Date().getTime() - timerstart < 250) {\n touchendX = event.changedTouches[0].screenX;\n touchendY = event.changedTouches[0].screenY;\n handle(touchstartX, touchendX, touchstartY, touchendY);\n }\n },\n false,\n );\n}\n\nexport function delay(ms) {\n return new Promise(resolve => {\n setTimeout(resolve, ms);\n });\n}\n\nexport function setWithExpiry(key, value, ttl, session = false) {\n const now = new Date();\n\n // `item` is an object which contains the original value\n // as well as the time when it's supposed to expire\n const item = {\n value,\n expiry: now.getTime() + ttl * 1000,\n };\n const storage = session && sessionStorage ? sessionStorage : localStorage;\n storage.setItem(key, JSON.stringify(item));\n}\n\nexport function getWithExpiry(key, session) {\n const storage = session && sessionStorage ? sessionStorage : localStorage;\n const itemStr = storage.getItem(key);\n // if the item doesn't exist, return null\n if (!itemStr) {\n return null;\n }\n const item = JSON.parse(itemStr);\n const now = new Date();\n // compare the expiry time of the item with the current time\n if (now.getTime() > item.expiry) {\n // If the item is expired, delete the item from storage\n // and return null\n localStorage.removeItem(key);\n return null;\n }\n return item.value;\n}\n\nexport function deUmlaut(value) {\n /* eslint-disable no-param-reassign */\n value = value.toLowerCase();\n value = value.replace(/ä/g, 'ae');\n value = value.replace(/ö/g, 'oe');\n value = value.replace(/ü/g, 'ue');\n value = value.replace(/ß/g, 'ss');\n value = value.replace(/ /g, '-');\n value = value.replace(/\\./g, '');\n value = value.replace(/,/g, '');\n value = value.replace(/\\(/g, '');\n value = value.replace(/\\)/g, '');\n /* eslint-enable no-param-reassign */\n return value;\n}\n\nexport function downloadFile(string, filename) {\n const link = document.createElement('a');\n link.style.display = 'none';\n link.setAttribute('target', '_blank');\n link.setAttribute(\n 'href',\n `data:text/csv;charset=utf-8,${encodeURIComponent(string)}`,\n );\n link.setAttribute('download', filename);\n document.body.appendChild(link);\n link.click();\n}\n\nexport function downloadTableAsCsv(\n table,\n seperator = ',',\n filename = 'data.csv',\n header = '',\n) {\n const csv: Array = [];\n for (const row of table.rows) {\n const tmpCell: Array = [];\n for (const cell of row.cells) {\n if (cell.colSpan === 1) {\n const field = cell.innerText\n .replace(/(\\r\\n|\\n|\\r)/gm, '')\n .replace(/(\\s\\s)/gm, ' ')\n .replace(/\"/g, '\"\"');\n tmpCell.push(`\"${field}\"`);\n }\n }\n csv.push(tmpCell.join(seperator));\n }\n downloadFile(`${header}${csv.join('\\n')}`, filename);\n}\n","import {\n has,\n get,\n find,\n filter,\n sortBy,\n merge,\n keyBy,\n groupBy,\n maxBy,\n values,\n first,\n} from 'lodash-es';\nimport { Dictionary } from 'lodash';\nimport dayjs from '@kisters/wcp-base/common/dayjsext';\nimport { TsDataResponse, TsDataPoint } from '../common/timeseries';\nimport { Layer, RequestLayersResponse } from '../common/layers';\n// api for file generator\n\nconst defaultLayer = {\n tablePopup: true,\n popupControl: true,\n popup: 'ww-map-popup-dynamic',\n filter: [],\n classification: {\n default: {\n marker: {\n backgroundColor: 'rgb(7, 97, 199)',\n shape: 'circle',\n color: 'rgba(255,255,255, 1)',\n icon: '',\n fontSize: 0.8,\n radius: 8,\n border: {\n color: 'rgba(29,29,27, 1)',\n width: 1,\n },\n },\n },\n tags: [\n {\n name: 'wert',\n label: 'aktuelle Werte',\n filter: {\n timestamp: {\n duration: 'PT48H',\n },\n },\n marker: {\n backgroundColor: 'rgb(7, 97, 199)',\n shape: 'circle',\n },\n },\n {\n name: 'keinwert',\n priority: 1,\n label: 'keine aktuellen Werte',\n filter: {\n timestamp: {\n not: {\n duration: 'PT48H',\n },\n },\n },\n marker: {\n backgroundColor: 'rgba(255, 255, 255, 1)',\n },\n },\n ],\n },\n sortedBy: [{ field: 'station_longname', ascending: true }],\n columns: [\n {\n css: 'width:95px;',\n field: '__tag',\n label: 'Status',\n format: 'status',\n sortable: true,\n },\n {\n field: 'station_name',\n label: 'Station',\n sortable: true,\n },\n\n {\n field: 'timestamp',\n label: 'Zeitpunkt [MEZ]',\n format: 'dateTime',\n sortable: true,\n hideAble: true,\n },\n {\n field: 'ts_value',\n label: 'Wert',\n sortable: true,\n hideAble: true,\n format: {\n type: 'number',\n options: {\n minimumFractionDigits: 2,\n },\n },\n },\n ],\n};\n\nexport class API {\n reportsPath: string;\n\n basePath: string;\n\n configSubPath: string;\n\n configPath: string;\n\n staticConfigPath: string;\n\n dataPath: string;\n\n reportList: any;\n\n _cache: any;\n\n imagesList: any;\n\n constructor({\n basePath,\n dataPath,\n configSubPath,\n reportsPath,\n staticConfigPath,\n }) {\n this.reportsPath = reportsPath || null;\n this.basePath = basePath || '.';\n this.configSubPath = configSubPath || 'config';\n this.staticConfigPath = staticConfigPath || 'static_config';\n this.configPath = `${this.basePath}/${this.configSubPath}`;\n this.dataPath = dataPath || './data';\n this._cache = new Map();\n this._requestcache = new Map();\n this.reportList = null;\n this.imagesList = null;\n }\n\n async getClassification(name) {\n const classes = await this.getClassifications();\n return find(classes, { name });\n }\n\n async getClassifications() {\n return this._requestJson('/internet/raster/classifications.json');\n }\n\n async getMapConfig() {\n return this._requestJson('/map.json', this.configPath);\n }\n\n async getSites() {\n return this._requestJson('/stations/sites.json');\n }\n\n async getStations(query = {}) {\n const stations = await this._requestJson(\n '/internet/stations/stations.json',\n );\n return filter(stations, query);\n }\n\n /**\n * Get external/static stations from file\n *\n * @param filename - Path to file in public - directory containing local stations, e.g. 'projects.json' or 'waterlevel.json'\n * @param query - Filter query on found static stations; See lodash filter method\n *\n * @returns Array of External/static Stations from a provided JSON File, optionally to be filterred by query\n *\n * @remarks\n * This function is also used in ww-worldmap to fetch the provided projects, handled as stations\n */\n async getExternalStations(filename, query = {}): Promise {\n const stations = await this._requestJson(filename, './');\n return filter(stations, query);\n }\n\n async getStationIndex(site_no, station_no) {\n const station = await this._requestJson(\n `/internet/stations/${site_no}/${station_no}/index.json`,\n );\n return station;\n }\n\n async getRasterList() {\n const rasterlist = await this._requestJson('/internet/raster/index.json');\n return rasterlist._links.filter(item => item.type === 'resource');\n }\n\n async getRessource(ahref, base) {\n return this._requestJson(ahref, base);\n }\n\n async getStationByNo(stationNo) {\n const station = await this.getStations({ station_no: stationNo })[0];\n return station;\n }\n\n async getStation(stationId: string): Promise {\n let siteNo = '';\n let stationNo = '';\n if (siteNo.length === 0 || stationNo.length === 0) {\n const station = (await this.getStations({ station_id: stationId }))[0];\n siteNo = station?.site_no ?? '';\n stationNo = station?.station_no ?? '';\n }\n\n if (siteNo.length === 0 || stationNo.length === 0) {\n return null;\n }\n\n const data = await this._requestJson(\n `/internet/stations/${[siteNo, stationNo].join('/')}/index.json`,\n );\n const reports = await this.getReport(stationNo);\n return {\n ...data,\n reports,\n zips: sortBy(\n filter(data._links, s => s.mime_type === 'application/zip'),\n 'station_parameter',\n ),\n downloads: sortBy(\n filter(data._links, s => s.mime_type === 'application/msexcel'),\n 'station_parameter',\n ),\n timeseries: sortBy(\n filter(\n data._links,\n s => s.station_parameter && s.mime_type === 'application/json',\n ),\n 'station_parameter',\n ),\n };\n }\n\n // todo tsName for file name ?\n async getTs({ siteNo, stationNo, parameterName, tsName }) {\n return this._requestJson(\n `/internet/stations/${[siteNo, stationNo, parameterName, tsName].join(\n '/',\n )}.json`,\n );\n }\n\n getLink(ahref: string): string {\n return this.dataPath + ahref;\n }\n\n // eslint-disable-next-line class-methods-use-this\n _transformLayerData(data: never[], config) {\n if (!config) console.warn('No layer config provided!');\n data = data.map(item => {\n Object.keys(item).forEach(key => {\n if (key.startsWith('metadata_')) {\n item[key.replace('metadata_', '')] = item[key];\n delete item[key];\n }\n });\n return item;\n });\n const stations = groupBy(data, 'station_id');\n\n const ret = [];\n for (const [, station] of Object.entries(stations)) {\n const stobj = {\n mainParameter: config?.mainParameter,\n ts_values: {},\n ...station[0],\n };\n station.forEach(entry => {\n // eslint-disable-next-line no-restricted-syntax\n for (const key in entry) {\n if (Object.prototype.hasOwnProperty.call(entry, key)) {\n const value = entry[key];\n const param = entry.stationparameter_name;\n /** Multi-value icons/piecharts in map (e.g. LANUV Geberzeitreihen) */\n if (config?.tsreplace) {\n config.tsreplace.forEach(token => {\n entry.ts_shortname = entry.ts_shortname.replace(token, '');\n });\n }\n if (config?.multiTs) {\n const cleanShortName = entry.ts_shortname.replace(/\\./g, '');\n if (!stobj.ts_values[param]) {\n stobj.ts_values[param] = {};\n }\n if (!stobj.ts_values[param][cleanShortName]) {\n stobj.ts_values[param][cleanShortName] = {};\n }\n\n if (\n key.includes('tsinfo_') ||\n key.includes('ts_') ||\n key.includes('param') ||\n key.includes('timestamp')\n ) {\n stobj.ts_values[param][cleanShortName][key] = value;\n } else if (key !== 'ts_values') {\n stobj[key] = value;\n }\n } else {\n if (!stobj.ts_values[param]) {\n stobj.ts_values[param] = {};\n }\n if (\n key.startsWith('tsinfo_') ||\n key.startsWith('ts_') ||\n key.includes('param') ||\n key.startsWith('timestamp')\n ) {\n stobj.ts_values[param][key] = value;\n } else {\n stobj[key] = value;\n }\n }\n }\n }\n });\n ret.push(stobj);\n }\n // console.timeEnd('transform');\n // console.log(ret);\n return ret;\n }\n\n async getTsData(ahref: string, nocache = true) {\n return this._requestJson(`/${ahref}`, this.dataPath, nocache);\n }\n\n async getLayers(): Promise> {\n const response: RequestLayersResponse = await this._requestJson(\n '/internet/layers/index.json',\n undefined,\n true,\n );\n\n response._links.push({\n type: 'resource',\n layer_type: 'STATION_LAYER',\n alias: 'stations',\n id: 'stations',\n } as Layer);\n const config = await this._requestJson('/layercfg.json', this.configPath);\n if (!response || !config) {\n throw Error('error loading config or data');\n }\n response._links.forEach(item => {\n item.creationDateInMillis = response.creationDateInMillis;\n });\n return merge(\n keyBy(filter(response._links, { type: 'resource' }), 'alias'),\n keyBy(config, 'alias'),\n );\n }\n\n async getLayer(alias): Promise {\n const l = filter(await this.getLayers(), { alias })[0];\n if (!l.config) {\n l.config = { ...defaultLayer };\n l.config.id = l.id;\n l.config.alias = l.alias;\n l.config.classification.label = l.alias;\n l.config.columns = l.config.columns.map(item => {\n if (item.field === 'ts_value') {\n item.label = `${l.label}`;\n }\n return item;\n });\n }\n if (l?.id) {\n let data = await this.getLayerData(l);\n\n if (l.config.parameterFilterAttribute) {\n try {\n data.forEach(station => {\n if (station[l.config.parameterFilterAttribute]) {\n const parFilter = JSON.parse(\n station[l.config.parameterFilterAttribute],\n );\n if (Array.isArray(parFilter) && parFilter.length !== 0) {\n Object.keys(station.ts_values).forEach(par => {\n if (!parFilter.includes(par)) {\n delete station.ts_values[par];\n }\n });\n }\n }\n });\n data = data.filter(item => Object.keys(item.ts_values).length);\n } catch (e) {\n console.error('invalid parameterFilterAttribute');\n }\n }\n\n if (l.config.stationsFilter) {\n data = data.filter(station =>\n Object.keys(l.config.stationsFilter).every(key => {\n const condition = l.config.stationsFilter[key];\n if (condition === '*') {\n return has(station, key);\n }\n if (condition.startsWith('!')) {\n return (\n get(station, key) !== l.config.stationsFilter[key].substr(1)\n );\n }\n return get(station, key) === l.config.stationsFilter[key];\n }),\n );\n }\n return {\n data,\n config: l.config,\n creationDateInMillis: l.creationDateInMillis,\n } as TsDataResponse;\n }\n\n throw new Error(`layer ${alias} does not exist`);\n }\n\n async getLayerData(l: Layer): Promise {\n if (l.layer_type === 'TS_VALUES') {\n return this.getTsValuesLayerData(l);\n }\n if (l.layer_type === 'STATION_LAYER') {\n return this.getStationLayerData(l);\n }\n if (l.layer_type === 'MULTI_LAYER') {\n return this.getMultiLayerData(l);\n }\n if (l.layer_type === 'TS_MAX_VALUES') {\n return this.getMaxLayerData(l);\n }\n return this.getDefaultLayerData(l);\n }\n\n async getMaxLayerData(l: Layer): Promise {\n const ids = typeof l.id === 'string' ? [l.id] : l.id;\n let resp = [];\n await Promise.all(\n ids.map(async id => {\n try {\n const data = await this._requestJson(\n `/internet/layers/${id}/index.json`,\n this.dataPath,\n true,\n );\n resp = resp.concat(data);\n } catch {\n console.warn(\n `error loading data for layer ${l.alias}, dataId: ${id}`,\n );\n }\n }),\n );\n if (!l.parameter) {\n console.error('no parameter provided for comparison');\n return [];\n }\n\n const ret = Object.values(groupBy(resp, 'station_id')).map(item =>\n item.reduce((prev, current) =>\n prev.ts_values[l.parameter]?.ts_value >\n current.ts_values[l.parameter]?.ts_value\n ? prev\n : current,\n ),\n );\n return ret;\n }\n\n async getDefaultLayerData(l: Layer): Promise {\n const ids = typeof l.id === 'string' ? [l.id] : l.id;\n let resp = [];\n await Promise.all(\n ids.map(async id => {\n try {\n let data = await this._requestJson(\n `/internet/layers/${id}/index.json`,\n this.dataPath,\n true,\n );\n if (data[0]?.metadata_station_id) {\n data = data.map(item => {\n Object.keys(item).forEach(key => {\n if (key.startsWith('metadata_')) {\n item[key.replace('metadata_', '')] = item[key];\n delete item[key];\n }\n });\n return item;\n });\n }\n resp = resp.concat(data);\n } catch {\n console.warn(\n `error loading data for layer ${l.alias}, dataId: ${id}`,\n );\n }\n }),\n );\n\n if (l?.config?.additionalData) {\n const additionaldata = await this._requestJson(\n l?.config?.additionalData,\n '.',\n );\n resp = values(\n merge(keyBy(resp, 'station_id'), keyBy(additionaldata, 'station_id')),\n ).filter(item => item.station_name);\n }\n\n if (l?.config?.external) {\n const externalData = await this.getExternalStations(l.config.external);\n resp = resp.concat(\n externalData.map((item, index) => ({\n ...item,\n external: true,\n station_id: item.station_id ? item.station_id : `ext_${index}`,\n })),\n );\n }\n\n if (l?.config?.timeActive) {\n resp = resp.map(station => {\n Object.values(station.ts_values).forEach(value => {\n if (station.ts_values[value.stationparameter_name]?.high_tides) {\n station.ts_values[value.stationparameter_name].historic =\n station.ts_values[value.stationparameter_name]?.high_tides;\n }\n const datattr =\n station.ts_values[value.stationparameter_name]?.historic;\n if (datattr) {\n datattr.data = datattr.data.reduce((map, obj) => {\n map[new Date(obj[0]).getTime()] = obj;\n return map;\n }, {});\n }\n });\n return station;\n });\n }\n\n return !resp[0]?.ts_values\n ? this._transformLayerData(resp, l.config)\n : Object.values(groupBy(resp, 'station_id')).map(item => {\n const ret = Object.assign({}, ...item);\n Object.values(ret.ts_values).forEach(val => {\n val.time = dayjs(val.timestamp).format('LT');\n });\n return ret;\n });\n }\n\n async getMultiLayerData(l: Layer): Promise {\n const data = await this._requestJson(\n `/internet/layers/${l.id}/index.json`,\n this.dataPath,\n true,\n );\n return data.map(item => {\n Object.keys(item).forEach(key => {\n if (key.startsWith('metadata_')) {\n item[key.replace('metadata_', '')] = item[key];\n delete item[key];\n }\n if (key.startsWith('L1_')) {\n item[key.replace('L1_', '')] = item[key];\n delete item[key];\n }\n });\n return item;\n });\n }\n\n async getStationLayerData(l: Layer): Promise {\n const stations = await this._requestJson(\n `/internet/stations/stations.json`,\n );\n // Filter on station level\n if (l.filter) {\n // eslint-disable-next-line consistent-return\n l.filter.forEach(f => {\n const prop = first(Object.keys(f));\n const filteredstations = stations.filter(stat =>\n stat[prop].includes(f[prop]),\n );\n // Return filtered remaining stations; Return all otherwise\n if (filteredstations.length > 0) return filteredstations;\n console.warn(\n 'Station filter did not match - return all stations instead',\n );\n });\n }\n return stations;\n }\n\n async getTsValuesLayerData(l: Layer): Promise {\n let dataLayer = await this._requestJson(\n `/internet/layers/${l.id}/index.dajson`,\n this.dataPath,\n true,\n );\n if (l?.config?.additionalData) {\n const additionaldata = await this._requestJson(\n l?.config?.additionalData,\n '.',\n );\n dataLayer = values(\n merge(\n keyBy(dataLayer, 'station_id'),\n keyBy(additionaldata, 'station_id'),\n ),\n ).filter(item => item.station_name);\n }\n dataLayer.forEach(item => {\n const maxVal = maxBy(item.data, 1);\n item.timestamp = maxVal?.[0];\n item.ts_value = maxVal?.[1];\n });\n return dataLayer;\n }\n\n async getImages() {\n if (this.imagesList) {\n return this.imagesList;\n }\n\n const list = await this._requestJson('/images/index.json');\n this.imagesList =\n list && list.all_listing\n ? list.all_listing.filter(st => st.mimeType.includes('image/'))\n : [];\n return this.imagesList;\n }\n\n async getReport(stationNo) {\n const list = await this.getReports();\n return list[stationNo];\n }\n\n async getReports() {\n if (!this.reportsPath) {\n return [];\n }\n if (this.reportList) {\n return this.reportList;\n }\n const list = await this._requestJson(`/${this.reportsPath}/index.json`);\n this.reportList =\n list && list.all_listing\n ? groupBy(\n list.all_listing.map(st => {\n const [, stationNo, reportGroup, fileName] = st.name.split('/');\n return {\n path: st.name,\n stationNo,\n reportGroup,\n fileName,\n mimeType: st.mimeType,\n };\n }),\n 'stationNo',\n )\n : {};\n return this.reportList;\n }\n\n async getImage(stationNo) {\n const list = await this.getImages();\n const images = list.filter(st => st.name.includes(`/${stationNo}/`));\n if (images.length) {\n return images.map(img => `${this.dataPath}/${img.name}`);\n }\n return [];\n }\n\n async getReportInfo() {\n // TODO need better file structure.\n return this._requestJson(`/documents/index.json`, undefined, true); // todo\n }\n\n async requestText(path, base = this.dataPath) {\n return fetch(`${base}${path}`).then(x => x.text());\n }\n\n /* eslint-disable class-methods-use-this */\n /* eslint-disable no-unused-vars */\n\n /*\n * cache all request;\n * */\n async _requestJson(path, base = this.dataPath, nocache?) {\n let data;\n if (!nocache && this._requestcache.get(path)) {\n const cachedrequest = await this._requestcache.get(path);\n const cachedrequestdata = await cachedrequest.clone().json();\n return cachedrequestdata;\n }\n\n if (!nocache && this._cache.get(path)) {\n return this._cache.get(path);\n }\n try {\n const doFetch = fetch(`${base}${path}`);\n this._requestcache.set(path, doFetch);\n const resp = await doFetch;\n data = await resp.clone().json();\n this._cache.set(path, data);\n this._requestcache.delete(path);\n } catch (err) {\n // catches errors both in fetch and response.json\n throw path;\n }\n\n return data;\n }\n}","import { API } from './jsonpi';\nimport { Zarrpi } from './zarrpi';\n\nlet currentApi: API | Zarrpi;\n\nexport const init = (args: { basePath: any; dataPath: any; configSubPath: any; reportsPath: any; staticConfigPath: any; }) => {\n if (!currentApi) {\n currentApi = new API(args);\n }\n return currentApi;\n};\n\nexport const initZarrApi = (args: { basePath: any; dataPath: any; configSubPath: any; reportsPath: any; staticConfigPath: any; }) => {\n if (!currentApi) {\n currentApi = new Zarrpi(args);\n }\n return currentApi;\n}\n\nexport const getCurrentApi = (): API | Zarrpi => {\n if (!currentApi) {\n // eslint-disable-next-line no-throw-literal\n throw 'api not initialized';\n }\n return currentApi;\n};\n","const maxIterations = 150;\n\nexport default function getPropertyDescriptor(object, propertyName) {\n let iteration = 0;\n let proto = Object.getPrototypeOf(object);\n let targetDescriptor;\n do {\n targetDescriptor = Object.getOwnPropertyDescriptor(proto, propertyName);\n iteration += 1;\n if (targetDescriptor === undefined) {\n proto = Object.getPrototypeOf(proto);\n }\n } while (\n proto !== undefined &&\n proto !== null &&\n targetDescriptor === undefined &&\n iteration <= maxIterations\n );\n\n if (iteration === maxIterations) {\n console.warn(`Max iterations reached.`);\n }\n\n if (targetDescriptor === undefined) {\n console.error(`couldn't find property \"${propertyName}\".`);\n }\n\n return [proto, targetDescriptor];\n}\n","/* eslint-disable func-names */\n// discussion: update when get or update when set, update via getting is better for data logic\n// why not apply to this, pass this can reduce code size with t=>t.name instead function(){return this.name}\n// and void miss typing with ()=>this.name which is wrong\n/*\n value be cached util props in watch fired.\n all watcher only check when updating element, so make it's called.\n example:\n class Demo {\n\n @computed([t => t.lastName, t => t.firstName,])\n get fullName() {\n return `${this.firstName} ${this.lastName}`;\n }\n\n @computed([t => t.fullName, t => t.classRoom])\n get info() {\n return `${this.classRoom } ${this.fullName}`;;\n }\n\n @autoRun([t => t.fullName])\n fetchInfo() {\n return fetch('http://server.com/user?fullName=${this.fullName}').then((u)=>{console.log(u)})\n }\n\n // async\n @computed('fullName' , { default: {a:1} })\n get asyncData(){\n return fetch('http://server.com/user?fullName=${this.fullName}')\n }\n\n\n }\n\n\n*/\n\nimport { isEqual } from 'lodash-es';\nimport getPropertyDescriptor from './helper/getPropertyDescriptor';\n\nconst getterChain: Array = [];\n\nlet computeUUID = 0;\n\nexport function _preProcessWatchers(watchers) {\n if (!watchers) {\n throw new Error('must set watchers');\n }\n\n if (!Array.isArray(watchers)) {\n watchers = [watchers];\n }\n return watchers.map(w => {\n if (typeof w === 'string') {\n return function getter(v) {\n return v[w];\n };\n }\n return w;\n });\n}\n\nconst getComputedGetter = (\n originGetter,\n key,\n watchers,\n options,\n id,\n target,\n targetname,\n) =>\n function getter() {\n const fnName = `${id}_${targetname}.${key}`;\n\n if (getterChain.indexOf(fnName) >= 0) {\n console.debug(getterChain);\n throw new Error(`recursive getter chain with :${fnName}`);\n }\n getterChain.push(fnName);\n // console.debug(getterChain);\n try {\n const cacheKey = `__cached_${key}`;\n const cacheParamsKey = `__cached_params_${key}`;\n\n const values = watchers.map(w => w(target));\n // simple equal;\n if (\n !target[cacheParamsKey] ||\n !values.every((v, i) => isEqual(v, target[cacheParamsKey][i]))\n ) {\n // if watcher changes\n target[cacheParamsKey] = values;\n // recall\n\n const re = originGetter.call(target);\n\n if (re && re.then) {\n const q = re.then(v => {\n target[cacheKey] = v;\n });\n // async\n // need have loader mixin,so can call request update\n if (target.promiseLoader) {\n // avoid update loader in same loop\n setImmediate(() => {\n target.promiseLoader(q);\n });\n } else {\n q.then(() => target.requestUpdate());\n }\n if (target[cacheKey] === undefined) {\n target[cacheKey] = options.default;\n }\n } else {\n target[cacheKey] = re;\n }\n }\n getterChain.pop();\n return target[cacheKey];\n } catch (e) {\n getterChain.pop();\n console.error(e);\n throw e;\n }\n };\n\nexport const computed = function (watchers, options = {}) {\n watchers = _preProcessWatchers(watchers);\n const id = computeUUID;\n computeUUID += 1;\n\n return function decorator(target, key, descriptor) {\n if (descriptor.get) {\n // for getter\n const originGetter = descriptor.get;\n descriptor.get = getComputedGetter(\n originGetter,\n key,\n watchers,\n options,\n id,\n target,\n target.constructor.name,\n );\n }\n\n return descriptor;\n };\n};\n\nexport const computedMixin = function (\n targetProperty,\n watchers,\n options = {},\n clz,\n) {\n watchers = _preProcessWatchers(watchers);\n const id = computeUUID;\n computeUUID += 1;\n return class extends clz {\n constructor() {\n super();\n\n const [proto, targetDescriptor] = getPropertyDescriptor(\n this,\n targetProperty,\n );\n\n const wrapperFn = getComputedGetter(\n targetDescriptor.get,\n targetProperty,\n watchers,\n options,\n id,\n this,\n proto.constructor.name,\n );\n Object.defineProperty(this, targetProperty, {\n get: wrapperFn,\n configurable: true,\n });\n }\n };\n};\n","/* eslint-disable func-names */\nimport { debounce as ldb } from 'lodash-es';\nimport getPropertyDescriptor from './helper/getPropertyDescriptor';\n\n// TODO should bind with this;\n\nexport const debounce = function (delay = 0) {\n return (_target, _key, descriptor) => {\n const fn = descriptor.value;\n descriptor.value = ldb(fn, delay);\n return descriptor;\n };\n};\n\nexport const debounceMixin = function (targetProperty, delay = 0, clz) {\n return class extends clz {\n constructor() {\n super();\n\n const [, propertyDescriptor] = getPropertyDescriptor(\n this,\n targetProperty,\n );\n debounce(delay)(this, targetProperty, propertyDescriptor);\n }\n };\n};\n","/* eslint-disable func-names */\nimport { defaultConverter } from 'lit';\nimport getPropertyDescriptor from './helper/getPropertyDescriptor';\n\nconst globalLocalStorage = window.localStorage;\n\nconst getId = (target, key, id = undefined) => {\n id = id || target.localStorageId || target.getAttribute('local-storage-id');\n if (!id) {\n return undefined;\n }\n if (typeof id === 'string') {\n return `${id}-${key}`;\n }\n if (typeof id === 'function') {\n // @ts-expect-error\n return `${id(target)}-${key}`;\n }\n throw new Error('idFn should only be string or function');\n};\n\nconst getGetter = (\n target,\n local,\n key,\n initialGetter,\n // @ts-expect-error\n { id, typeParam = String, initializer } = {},\n) =>\n function getter() {\n const _id = getId(target, key, id);\n let val;\n if (_id) {\n // @ts-expect-error\n val = defaultConverter.fromAttribute(\n globalLocalStorage.getItem(_id),\n typeParam,\n );\n } else {\n val = local;\n }\n if (val === undefined || val === null) {\n val = (initializer && initializer()) || initialGetter.call(target);\n }\n return val;\n };\n\n// @ts-expect-error\nconst getSetter = (target, local, key, { id, typeParam = String } = {}) =>\n function setter(val) {\n const _id = getId(target, key, id);\n local = val;\n if (_id) {\n // @ts-expect-error\n val = defaultConverter.toAttribute(val, typeParam); // convert string to specified type\n globalLocalStorage.setItem(_id, val);\n }\n // @ts-expect-error\n this.requestUpdate && this.requestUpdate(); // for updating-element\n };\n\n// todo auto compute id with parent path and id ?\n/*\n * @param {(String | Function)} options.id: string or fn for generating id. use instance's localStorageId+fieldName or disabled when all not set.\n *\n * performance tested: reading 1million/s, similar to object access. so it's ok to read directly from storage.\n * for big data might be problem when rerender very often, can try cache it.\n * */\n// @ts-expect-error\nexport const localStorage = function ({ id, typeParam = String } = {}) {\n return function decorator(target, key, descriptor) {\n const { initializer } = descriptor;\n delete descriptor.initializer;\n delete descriptor.writable;\n let local; // fallback when not set local-storage-id\n\n descriptor.get = getGetter(target, local, key, descriptor.get, {\n id,\n typeParam,\n initializer,\n });\n\n descriptor.set = getSetter(target, local, key, { id, typeParam });\n\n return descriptor;\n };\n};\n\nexport const localStorageMixin = function (\n clz,\n { targetProperty, id, typeParam = String },\n) {\n return class extends clz {\n constructor() {\n super();\n let local; // fallback when local-storage-id is not set\n const [, propertyDescriptor] = getPropertyDescriptor(\n this,\n targetProperty,\n );\n delete propertyDescriptor.initializer;\n delete propertyDescriptor.writable;\n const getterFn = getGetter(\n this,\n local,\n targetProperty,\n propertyDescriptor.get,\n // @ts-expect-error\n {\n id,\n typeParam,\n },\n );\n const setterFn = getSetter(this, local, targetProperty, {\n id,\n typeParam,\n });\n Object.defineProperty(this, targetProperty, {\n get: getterFn,\n set: setterFn,\n configurable: true,\n });\n }\n };\n};\n","/* eslint-disable func-names */\nimport getPropertyDescriptor from './helper/getPropertyDescriptor';\nimport {\n setSearchParam,\n getSearchParam,\n getAllSearchParams,\n} from '../components/ki-app/routing/ki-router';\n\nconst getGetter = (param, type, defaultValue) =>\n function getter() {\n const searchParamValue = getSearchParam(param);\n if (\n (defaultValue && searchParamValue === undefined) ||\n searchParamValue === null\n ) {\n return defaultValue;\n }\n if (type === 'array') {\n return getAllSearchParams(param);\n }\n return searchParamValue;\n };\n\nconst getSetter = (target, param, oldSetter) =>\n function setter(val) {\n setSearchParam(param, val);\n if (oldSetter) {\n oldSetter.call(target, val);\n }\n };\n\n// @ts-expect-error\nexport const queryParam = function (param, { type, defaultValue } = {}) {\n return function decorator(target, _key, descriptor) {\n delete descriptor.initializer;\n delete descriptor.writable;\n descriptor.set = getSetter(target, param, descriptor.set);\n descriptor.get = getGetter(param, type, defaultValue);\n return descriptor;\n };\n};\n\nexport const queryParamMixin = function (\n clz,\n { targetProperty, selector, type = String, defaultValue },\n) {\n return class extends clz {\n constructor() {\n super();\n const [, propertyDescriptor] = getPropertyDescriptor(\n this,\n targetProperty,\n );\n delete propertyDescriptor.initializer;\n delete propertyDescriptor.writable;\n\n const setterFn = getSetter(this, selector, propertyDescriptor.set);\n const getterFn = getGetter(selector, type, defaultValue);\n\n Object.defineProperty(this, targetProperty, {\n get: getterFn,\n set: setterFn,\n configurable: true,\n });\n }\n };\n};\n","/* eslint-disable max-classes-per-file */\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { css, html, LitElement } from 'lit';\nimport { customElement } from 'lit/decorators.js';\nimport { Mix } from '@kisters/wcp-base/common';\nimport { responsiveMixin } from '@kisters/wcp-base/decorators';\n\n// @ts-expect-error\n@customElement('ki-wwp-switcher-bottom')\nexport default class KiWwpSwitcherBottom extends Mix(\n LitElement,\n responsiveMixin,\n) {\n static styles = css`\n :host {\n display: flex;\n box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14),\n 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -2px rgba(0, 0, 0, 0.2);\n border-radius: 30px;\n font-size: 0;\n overflow: visible;\n }\n .tab {\n background: white;\n color: var(--theme-color-primary, #1d1d1b);\n display: flex;\n padding: 8px 10px;\n min-width: 40px;\n text-align: center;\n cursor: pointer;\n user-select: none;\n position: relative;\n font-size: 14px;\n line-height: 24px;\n align-items: center;\n justify-content: center;\n }\n\n ki-icon {\n margin-right: 5px;\n font-size: 1.3em;\n }\n div.tab.selected {\n color: var(--theme-text-color, #ffffff);\n background: linear-gradient(\n 360deg,\n var(--theme-color-primary) 5px,\n rgb(255, 255, 255) 0%\n );\n font-weight: bold;\n transition: all 1s fade;\n }\n div.tab:hover {\n background-position: 10px;\n color: var(--theme-text-color, #ffffff);\n font-weight: bold;\n }\n\n .tab .label {\n font-size: 1.5em;\n }\n :host(.sm-screen) ki-icon {\n font-size: 1.5em;\n margin-right: 0;\n }\n :host(.sm-screen) .tab {\n min-width: initial;\n padding: 9px 10px;\n }\n :host(.sm-screen) .tab span.label {\n display: initial;\n font-size: 1.2em;\n }\n `;\n\n static get properties() {\n return {\n options: { type: Array },\n value: { type: String },\n };\n }\n\n get selected() {\n const preselected = this.options.filter(opt => opt.selected);\n return preselected.length ? preselected[0].value : this.options[0].value;\n }\n\n render() {\n if (!this.options.length) {\n return html``;\n }\n this.value = this.value || this.selected;\n // language=html\n return html`\n ${this.options.map(\n (option, i) => html`\n {\n e.key === 'Enter' && this.switchTo(option);\n }}\"\n @click=\"${() => {\n this.switchTo(option);\n }}\"\n >\n
\n ${option?.badges?.map(\n badge =>\n html`\n ${badge.count}\n
`,\n )}\n \n ${option.icon\n ? ``\n : ``}\n ${option.label}\n \n `,\n )}\n `;\n }\n\n switchTo(option) {\n if (this.value !== option.value) {\n this.value = option.value;\n this.dispatchEvent(\n new CustomEvent('changed', {\n detail: { value: option.value, element: option },\n }),\n );\n }\n }\n}\n","import { css } from 'lit';\n// language=CSS\nexport default css`\n :host {\n display: block;\n position: relative;\n overflow: auto;\n }\n\n .table {\n border-collapse: collapse;\n border-spacing: 0;\n width: 100%;\n display: table;\n table-layout: fixed;\n }\n\n br {\n display: none;\n }\n\n .header {\n display: table-header-group;\n text-align: left;\n }\n\n .body {\n display: table-row-group;\n height: 100%;\n overflow: auto;\n }\n\n .row {\n display: table-row;\n border-width: 1px 0;\n border-color: #ececec;\n border-style: solid;\n cursor: pointer;\n }\n\n .row:hover {\n background: lightgray !important;\n }\n\n .cell {\n padding: 5px 10px;\n display: table-cell;\n vertical-align: middle;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .cell.number,\n .cell.date {\n text-align: right;\n }\n\n .header .row {\n border-top-width: 0;\n background-color: white;\n border-bottom: 1px solid darkgray;\n }\n\n .header .cell {\n position: sticky;\n top: 0;\n background: inherit;\n z-index: 2;\n padding: 0;\n }\n\n .header-content {\n padding: 10px;\n overflow: hidden !important;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .header-content .col-label {\n }\n`;\n","/* eslint-disable lit-a11y/click-events-have-key-events */\n/* eslint-disable max-classes-per-file */\nimport { html, LitElement } from 'lit';\n/* eslint-disable import/extensions */\nimport { repeat } from 'lit/directives/repeat.js';\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js';\nimport { get } from 'lodash-es';\n/* eslint-enable import/extensions */\nimport style from './base-table.css';\nimport '../ki-icon/ki-icon';\nimport { template } from '../../common/util';\nimport Mix from '../../common/Mix';\nimport PropertyDefaultValue from '../../common/PropertyDefaultValue';\n\nexport default class BaseTable extends Mix(LitElement, PropertyDefaultValue) {\n // language=CSS\n static styles = style;\n\n constructor() {\n super();\n this.data = [];\n }\n\n get renderingData() {\n return this.data;\n }\n\n get renderingColumns() {\n // for customize\n return (\n this.columns ||\n Object.keys(this.renderingData[0] || {}).map(key => ({\n field: key,\n label: key,\n sortable: true,\n }))\n );\n }\n\n static get properties() {\n return {\n idproperty: {\n type: String,\n },\n data: {\n type: Array,\n },\n /*\n * [\n * {\n * field: String,\n * label: String,\n * renderHeaderCell: function.\n * renderCell: function\n * }\n * ]\n *\n * */\n columns: {\n type: Array,\n },\n renderRow: {\n type: Function,\n },\n };\n }\n\n _renderHeader() {\n return html`\n
\n
\n ${repeat(\n this.renderingColumns,\n (col: { field: any }) => col.field,\n col => this._renderHeaderCell(col),\n )}\n
\n
\n `;\n }\n\n // The ignore is important because prettier inserts whitespace which the table renders\n // prettier-ignore\n // eslint-disable-next-line class-methods-use-this\n _renderHeaderCell(col) {\n return col.renderHeaderCell\n ? col.renderHeaderCell()\n : html`\n \n ${unsafeHTML(col.label)}\n \n \n `;\n }\n\n _renderData() {\n // language=html\n const keyFn = this.idproperty && (item => item[this.idproperty]);\n return html`\n
\n ${repeat(this.renderingData || [], keyFn, this.renderRow.bind(this))}\n
\n `;\n }\n\n // eslint-disable-next-line class-methods-use-this, @typescript-eslint/no-unused-vars\n mouseenter(_e?, _item?) {\n // implement in parent class if needed\n }\n\n // eslint-disable-next-line class-methods-use-this, @typescript-eslint/no-unused-vars\n mouseleave(_e?, _item?) {\n // implement in parent class if needed\n }\n\n renderRow(item) {\n // can be override;\n // language=html\n return html`\n this.mouseenter(e, item)}\"\n @mouseleave=\"${e => this.mouseleave(e, item)}\"\n @click=\"${() => {\n this._onRowClick(item);\n }}\"\n >\n ${this.renderingColumns.map(col => this._renderCell(col, item))}\n \n `;\n }\n\n // eslint-disable-next-line class-methods-use-this\n _renderCell(col, item) {\n const val = get(item, col.field);\n const prefix = col.prefix && val ? template(col.prefix, item) : '';\n const suffix = col.suffix && val ? template(col.suffix, item) : '';\n\n return col.renderCell\n ? col.renderCell(item)\n : html`\n
\n ${prefix}${val}${suffix}\n
\n `;\n }\n\n render() {\n // language=html\n return html`\n
\n ${this._renderHeader()} ${this._renderData()}\n
\n `;\n }\n\n _onRowClick(item) {\n this.dispatchEvent(\n new CustomEvent('row-click', {\n detail: {\n data: item,\n },\n }),\n );\n }\n}\n","import { html } from 'lit';\nimport cloneDeep from 'lodash-es/cloneDeep';\nimport MsgMixin from '../../common/MsgMixin';\nimport LoaderMixin from '../../common/LoaderMixin';\nimport Mix from '../../common/Mix';\n\nexport default function PromiseData(clz) {\n return class extends Mix(clz, LoaderMixin, MsgMixin) {\n set data(val) {\n this.msg = '';\n if (val && val.then) {\n // promise\n this.promiseLoader(\n val\n .then(data => {\n this.data = data;\n })\n .catch(error => {\n this.msg = html` ${error} `;\n }),\n );\n } else {\n super.data = cloneDeep(val) || [];\n if (super.data.length === 0) {\n this.msg = this.noDataMessage || 'No Data';\n }\n }\n }\n\n get data() {\n return super.data;\n }\n\n render() {\n return this._renderLoader() || this._renderMsg() || super.render();\n }\n };\n}\n","/* eslint-disable max-classes-per-file */\nimport { css, html } from 'lit';\nimport { findIndex } from 'lodash-es';\nimport { getQueryObject } from '../../decorators/query';\nimport { debounceMixin } from '../../decorators/debounce';\nimport { computedMixin } from '../../decorators/computed';\n\nfunction _inlectLazyRendering(clz) {\n return class extends clz {\n // language=CSS\n static styles = css`\n .scroller {\n overflow: auto;\n height: 100%;\n }\n\n .cell {\n white-space: nowrap;\n }\n\n .scroller-content {\n box-sizing: border-box;\n }\n\n .scroller-content::after {\n display: block;\n padding: 10px;\n color: gray;\n text-align: center;\n }\n `;\n\n static get properties() {\n return {\n startIndex: {\n type: Number,\n default: 0,\n },\n };\n }\n\n rowHeight = 30;\n\n get renderingData() {\n return this.data.slice(\n this.startIndex,\n Math.min(this.data.length, this.__lastIndex),\n );\n }\n\n get __scroller() {\n return getQueryObject(this, '.scroller');\n }\n\n render() {\n // TODO\n // try to just render visible part.\n // language=html\n return html`\n
\n \n ${super.render()}\n
\n \n `;\n }\n\n get __lastIndex() {\n return (\n this.startIndex +\n Math.max(50, Math.round(this.offsetHeight / this.rowHeight))\n );\n }\n\n _onScroll() {\n const n = Math.round(this.__scroller.scrollTop / this.rowHeight);\n if (Math.abs(n - this.startIndex - 5) > 5) {\n this.startIndex = Math.min(n, this.data.length - 50);\n this.startIndex = Math.max(this.startIndex, 0);\n }\n }\n\n _resetScroll() {\n if (this.__scroller) {\n this.__scroller.scrollTop = 0;\n }\n }\n\n // scroll to the specific row with idproperty\n scrollTo(idProperty = '') {\n const counter =\n this.data.length &&\n findIndex(this.data, row => row[this.idproperty] === idProperty);\n if (counter !== -1 && this.__scroller) {\n this.__scroller.scrollTop = counter * this.rowHeight;\n }\n }\n };\n}\n\nexport default function LazyRendering(clz) {\n return class extends debounceMixin(\n '_onScroll',\n 100,\n computedMixin('__lastIndex', 'startIndex', {}, _inlectLazyRendering(clz)),\n ) {};\n}\n","/* eslint-disable class-methods-use-this */\nimport '../ki-icon/ki-icon';\nimport { html, css } from 'lit';\nimport first from 'lodash-es/first';\nimport get from 'lodash-es/get';\n\nexport default function SortAble(clz) {\n return class extends clz {\n // language=CSS\n static styles = css`\n .sortable {\n cursor: pointer;\n }\n\n .header-content .icons,\n .header-content .sort-index {\n display: none;\n }\n\n .header-content .sort-index {\n font-size: 8px;\n line-height: 8px;\n transform: translateY(-10px);\n color: var(--theme-color, #0056a0);\n }\n\n .header-content.sortable .icons {\n padding-left: 10px;\n display: inline-block;\n }\n\n .header-content.sortable .icons,\n .header-content.sortable .sort-index {\n display: inline-block;\n }\n\n .header-content.sortable ki-icon {\n display: block;\n color: lightgray;\n }\n\n .header-content.sortable ki-icon {\n visibility: hidden;\n }\n\n .header-content.sortable:hover ki-icon {\n visibility: visible;\n }\n\n .header-content.sortable ki-icon[icon~='ki-sort-up'],\n .header-content.sortable ki-icon[icon~='ki-sort-down'] {\n color: var(--theme-color, #0056a0);\n visibility: visible;\n }\n `;\n\n static get properties() {\n return {\n sort: {\n type: Array,\n },\n multisort: {\n type: Boolean,\n },\n // Transform Ä,Ö,Ü to A,O,U to be conform with DIN5007\n normalizeSpecialCharacters: {\n type: Boolean,\n },\n };\n }\n\n constructor() {\n super();\n this.sort = [];\n this.normalizeSpecialCharacters = false;\n }\n\n render() {\n this._sortData();\n return super.render();\n }\n\n _renderHeaderCell(col) {\n // put text in td\n let changeOrder;\n let removeOrder;\n let sortIndex = '';\n let sort;\n let sortIcon = 'ki-sort-v';\n if (col.sortable) {\n sort = this.sort.find(_sort => _sort.field === col.field);\n if (sort) {\n sortIndex = this.multisort ? this.sort.indexOf(sort) + 1 : '';\n sortIcon = sort.ascending ? 'ki-sort-up' : 'ki-sort-down';\n changeOrder = () => {\n sort.ascending = !sort.ascending;\n // move to first\n this.sort = [sort, ...this.sort.filter(a => a !== sort)];\n };\n removeOrder = () => {\n this.sort = [...this.sort.filter(a => a !== sort)];\n };\n } else {\n changeOrder = () => {\n this.sort = [\n {\n field: col.field,\n sortBy: col.sortBy,\n ascending: false,\n format: col.format,\n useDIN5007: col.useDIN5007,\n },\n ...this.sort,\n ];\n };\n }\n }\n\n return col.renderHeaderCell\n ? col.renderHeaderCell()\n : // The ignore is important because prettier inserts whitespace which the table renders\n // prettier-ignore\n html`\n ${col.label}\n \n \n \n
${sortIndex}
\n \n \n `;\n }\n\n _sortData() {\n // Check if we should apply DIN5007 / defined in layercfg -> col\n if (first(this.sort)?.useDIN5007) this.normalizeSpecialCharacters = true;\n\n if (this.sort.length > 0) {\n if (!this.multisort) {\n this.sort = this.sort.slice(0, 1);\n }\n\n this.data.sort((a, b) => {\n const sort = [...this.sort];\n let result = 0;\n do {\n const _sort = sort.shift();\n const compareProperty = _sort.sortBy || _sort.field;\n let aValue = get(a, compareProperty);\n let bValue = get(b, compareProperty);\n if (typeof aValue === 'string') {\n aValue = aValue.toLowerCase();\n if (this.normalizeSpecialCharacters)\n aValue = this._normalizeSpecChars(aValue);\n }\n if (typeof bValue === 'string') {\n bValue = bValue.toLowerCase();\n if (this.normalizeSpecialCharacters)\n bValue = this._normalizeSpecChars(bValue);\n }\n const format =\n typeof _sort.format === 'string'\n ? _sort.format\n : _sort.format?.type;\n if (['textnumber', 'number', 'wiskinumber'].indexOf(format) >= 0) {\n const parsedA =\n typeof aValue === 'string'\n ? parseFloat(aValue.replace(',', ''))\n : aValue;\n const parsedB =\n typeof bValue === 'string'\n ? parseFloat(bValue.replace(',', ''))\n : bValue;\n if (Number.isNaN(parsedA) && Number.isNaN(parsedB)) {\n aValue = 0;\n bValue = 0;\n } else if (Number.isNaN(parsedA)) {\n bValue = parsedB;\n aValue = bValue - 1;\n } else if (Number.isNaN(parsedB)) {\n aValue = parsedA;\n bValue = aValue - 1;\n } else {\n aValue = parsedA;\n bValue = parsedB;\n }\n }\n if (aValue === bValue) {\n result = 0;\n } else {\n result = (aValue > bValue ? 1 : -1) * (_sort.ascending ? 1 : -1);\n }\n } while (result === 0 && sort.length > 0);\n return result;\n });\n }\n }\n\n // Enforce DIN5007 sorting order\n _normalizeSpecChars(str: string): string {\n let _s: string = str;\n _s = _s.replace('ä', 'a');\n _s = _s.replace('ö', 'o');\n _s = _s.replace('ü', 'u');\n return _s;\n }\n };\n}\n","import { css, html, LitElement } from 'lit';\n// eslint-disable-next-line import/extensions\nimport { customElement, property } from 'lit/decorators.js';\nimport { endsWith } from 'lodash-es/string';\n\n/*\n * position related to it's parent with (position: relative;)\n *\n * */\n@customElement('ki-popup')\nexport default class KiPopup extends LitElement {\n // language=CSS\n static styles = css`\n :host {\n display: block;\n position: fixed;\n outline: none;\n z-index: 999;\n cursor: default;\n box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14),\n 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -2px rgba(0, 0, 0, 0.2);\n background: white;\n\n transition: visibility linear 0s 0s, all ease-in-out 0.6s 0.1s;\n\n visibility: hidden;\n pointer-events: none;\n opacity: 0;\n }\n\n :host(.visible) {\n visibility: visible;\n pointer-events: visible;\n opacity: 1;\n }\n #focus-node:focus {\n outline: none;\n }\n `;\n\n @property({ type: Boolean, reflect: true })\n visible: boolean = false;\n\n @property({ type: String })\n for: string | undefined;\n\n @property({ type: String })\n top: string | undefined;\n\n @property({ type: String })\n left: string | undefined;\n\n @property({ type: String })\n right: string | undefined;\n\n @property({ type: String })\n bottom: string | undefined;\n\n @property({ type: String })\n sizeref: string | undefined;\n\n @property({ type: Boolean })\n autofit: boolean = false;\n\n // if for is not set , use parent node\n get target() {\n const { parentNode } = this;\n const ownerRoot = this.getRootNode();\n let target;\n if (this.for) {\n // @ts-expect-error\n target = ownerRoot.querySelector(`#${this.for}`);\n } else {\n // use host if parent is root of shadow dom\n target =\n parentNode?.nodeType === Node.DOCUMENT_FRAGMENT_NODE\n ? // @ts-expect-error\n ownerRoot.host\n : parentNode;\n }\n return target;\n }\n\n render() {\n // @ts-expect-error\n this.renderRoot.host.classList.toggle('visible', this.visible);\n // language=html\n return html`\n {\n e.stopPropagation();\n }}\"\n >\n \n \n `;\n }\n\n firstUpdated() {\n this._addEventListener();\n }\n\n updated() {\n if (this.visible) {\n this.updatePosition();\n // this.updateComplete.then(() => {\n // const focusNode = this.renderRoot.getElementById('focus-node');\n // focusNode.focus();\n // });\n // console.log(focusNode); // TODO dom node change make the focus not working.\n // setTimeout(() => focusNode.focus(), 500); // workaround: focus not working in runtime\n }\n }\n\n // closeAfterMilliSeconds: auto close popup after N milliseconds\n show({ closeAfterMilliSeconds }) {\n if (closeAfterMilliSeconds) {\n setTimeout(() => this.hide(), closeAfterMilliSeconds);\n }\n this.visible = true;\n }\n\n hide() {\n this.visible = false;\n this.dispatchEvent(new CustomEvent('popup-hiding', {}));\n }\n\n updatePosition() {\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetParent\n // need set display not 'none'\n const { target } = this;\n const parentRect = {\n left: 0,\n top: 0,\n };\n const targetRect = target.getBoundingClientRect();\n\n const popupLeft =\n this.left && this._calculate(parentRect, targetRect, 'left');\n const popupTop = this.top && this._calculate(parentRect, targetRect, 'top');\n const popupRight =\n this.right && this._calculate(parentRect, targetRect, 'right');\n const popupBottom =\n this.bottom && this._calculate(parentRect, targetRect, 'bottom');\n\n this.style.left = popupLeft && `${popupLeft}px`;\n this.style.top = popupTop && `${popupTop}px`;\n\n this.style.right = popupRight && `${popupRight}px`;\n this.style.bottom = popupBottom && `${popupBottom}px`;\n }\n\n _calculate(parentRect, targetRect, position) {\n // position: left, right, top, bottom\n const positionVal = this[position]; // positionVal: 0, 1px, 22px /100%\n const isPercentage = endsWith(positionVal, '%');\n\n let targetPosition = targetRect[position] - parentRect[position];\n if (position === 'bottom' || position === 'right') {\n targetPosition *= -1;\n }\n\n let positionNum;\n if (isPercentage) {\n positionNum = Number(positionVal.slice(0, positionVal.length - 1));\n } else {\n positionNum = endsWith(positionVal, 'px')\n ? Number(positionVal.slice(0, positionVal.length - 2))\n : Number(positionVal);\n }\n const sizeNode =\n this.sizeref === 'popup' ? this.getBoundingClientRect() : targetRect;\n let popup;\n if (isPercentage) {\n popup =\n targetPosition +\n ((position === 'top' || position === 'bottom'\n ? sizeNode.height\n : sizeNode.width) *\n positionNum) /\n 100;\n } else {\n popup = targetPosition + positionNum;\n }\n\n return popup;\n }\n\n _addEventListener() {\n // click: this.events = {\n // visible: 'mousedown',\n // invisible: 'mouseup'\n // }\n\n // todo hover: this.events = {\n // visible: 'mouseover',\n // invisible: 'mouseout'\n // }\n\n window.addEventListener('resize', () => {\n this.requestUpdate();\n });\n\n window.addEventListener('mouseup', () => {\n this._clickOutsideHanlder();\n });\n }\n\n _clickOutsideHanlder() {\n this.visible && this.hide();\n }\n}\n","/* eslint-disable wc/no-self-class */\n/* eslint-disable max-classes-per-file */\nimport { UpdatingElement, html, css } from 'lit';\n// eslint-disable-next-line import/extensions\nimport { customElement, property } from 'lit/decorators.js';\n\n@customElement('ki-list-item')\nexport default class KiListItem extends UpdatingElement {\n // language=CSS\n static styles = css`\n ki-list-item {\n display: block;\n position: relative;\n padding: 12px;\n }\n\n ki-list-item:hover,\n ki-list-item:focus {\n color: var(--theme-color, #0056a0);\n background-color: #eeeeee;\n }\n\n ki-list-item.selected {\n background-color: var(--theme-color, #0056a0);\n color: var(--theme-text-color, white);\n }\n `;\n\n @property({ type: Boolean })\n selected: boolean = false;\n\n @property({ type: String })\n _indent: string | undefined;\n\n constructor() {\n super();\n this.addEventListener('keydown', e => {\n switch (e.key) {\n case 'Enter':\n this.dispatchEvent(new CustomEvent('click'));\n break;\n case 'ArrowUp':\n case 'ArrowLeft':\n // @ts-expect-error\n this._getPrev()?.focus();\n break;\n case 'ArrowDown':\n case 'ArrowRight':\n // @ts-expect-error\n this._getNext()?.focus();\n break;\n default:\n }\n });\n }\n\n get itemNode(): HTMLElement {\n return this;\n }\n\n _getNext() {\n let next = this.nextSibling;\n // @ts-expect-error\n while (!/^KI-LIST-ITEM/.test(next?.tagName)) {\n next = next?.nextSibling ?? null;\n }\n return next;\n }\n\n _getPrev() {\n let next = this.previousSibling;\n\n // @ts-expect-error\n while (!/^KI-LIST-ITEM/.test(next?.tagName)) {\n next = next?.previousSibling ?? null;\n }\n return next;\n }\n\n _updateSelectedState() {\n this.setAttribute('tabindex', this.selected ? '0' : '-1');\n this.classList.toggle('selected', !!this.selected);\n }\n\n connectedCallback() {\n // @ts-expect-error\n if (super.connectedCallback) super.connectedCallback();\n let level = 0;\n let node: HTMLElement | null = this;\n while (node && node.tagName !== 'KI-LIST') {\n if (/^KI-LIST/.test(node.tagName)) level += 1;\n node = node.parentElement;\n }\n this.itemNode.style[\n 'padding-left'\n ] = `calc( var(--ki-list-indent) * ${level})`;\n }\n\n createRenderRoot() {\n return this;\n }\n\n render() {\n return html` `;\n }\n}\n","/* eslint-disable wc/no-constructor-attributes */\n/* eslint-disable wc/no-self-class */\n/* eslint-disable max-classes-per-file */\nimport { html, css } from 'lit';\n// eslint-disable-next-line import/extensions\nimport { customElement, property } from 'lit/decorators.js';\nimport KiListItem from './ki-list-item';\n\n@customElement('ki-list-item-group')\nexport default class KiListItemGroup extends KiListItem {\n // language=CSS\n static styles = css`\n ki-list-item-group {\n display: block;\n position: relative;\n }\n ki-list-item-group .label {\n padding: 12px 0;\n }\n\n ki-list-item-group .label:hover,\n ki-list-item-group .label:focus {\n color: var(--theme-color, #0056a0);\n background-color: #eeeeee;\n }\n\n ki-list-item-group .children {\n display: block;\n overflow: hidden;\n height: auto;\n }\n\n ki-list-item-group.folded .children {\n max-height: 0px;\n }\n `;\n\n @property({ type: Boolean })\n folded: boolean = false;\n\n // @ts-expect-error\n get itemNode() {\n return this.querySelector('.label'); // TODO\n }\n\n constructor() {\n super();\n this.setAttribute('tabindex', '-1');\n }\n\n _updateSelectedState() {\n this.classList.toggle('folded', !!this.folded);\n }\n\n createRenderRoot() {\n return this;\n }\n\n render() {\n return html` `;\n }\n}\n","import { html, css, UpdatingElement } from 'lit';\n// eslint-disable-next-line import/extensions\nimport { customElement } from 'lit/decorators.js';\nimport './ki-list-item';\nimport './ki-list-item-group';\nimport PropertyDefaultValue from '../../common/PropertyDefaultValue';\nimport Mix from '../../common/Mix';\n\n// @ts-expect-error\n@customElement('ki-list')\nexport default class KiList extends Mix(UpdatingElement, PropertyDefaultValue) {\n // language=CSS\n static styles = css`\n ki-list {\n display: block;\n --ki-list-indent: 12px;\n }\n `;\n\n createRenderRoot() {\n return this;\n }\n\n render() {\n return html` `;\n }\n}\n","import { css, html, LitElement, TemplateResult } from 'lit';\n// eslint-disable-next-line import/extensions\nimport { customElement, property } from 'lit/decorators.js';\n\n@customElement('ki-checkbox')\nexport default class KiCheckBox extends LitElement {\n // language=CSS\n static styles = css`\n :host {\n outline: none;\n display: inline-block;\n position: relative;\n }\n\n .ki-checkbox {\n display: block;\n cursor: pointer;\n user-select: none;\n color: rgba(128, 128, 128, 1);\n }\n\n .ki-checkbox input {\n position: absolute;\n opacity: 0;\n cursor: pointer;\n }\n\n .ki-checkbox input:checked ~ svg {\n font-size: inherit;\n }\n\n .ki-checkbox input:checked ~ svg {\n fill: var(--theme-color, #0056a0);\n }\n .ki-checkbox input:indeterminate ~ svg {\n fill: var(--theme-color, #0056a0);\n }\n\n .ki-checkbox input:disabled ~ svg {\n color: lightgray;\n cursor: not-allowed;\n }\n svg.icon {\n width: 18px;\n fill: var(--ki-checkbox-box-color, gray);\n cursor: pointer;\n }\n `;\n\n @property({ type: Boolean })\n checked = false;\n\n @property({ type: Boolean })\n disabled = false;\n\n @property({ type: Boolean })\n indeterminate = false;\n\n @property({ type: String })\n value = '';\n\n interediateImage: TemplateResult = html`\n \n `;\n\n checkedImage: TemplateResult = html`\n \n `;\n\n uncheckedImage: TemplateResult = html`\n \n `;\n\n render() {\n let square = this.checked ? this.checkedImage : this.uncheckedImage;\n square = this.indeterminate ? this.interediateImage : square;\n\n return html` `;\n }\n\n _handleClick() {\n this.checked = !this.checked;\n this.indeterminate = false;\n }\n\n _handleChange() {\n this.dispatchEvent(\n new CustomEvent('change', {\n detail: {\n value: this.value,\n checked: this.checked,\n },\n }),\n );\n }\n}\n","/* eslint-disable max-classes-per-file */\nimport '../ki-icon/ki-icon';\nimport { html, css } from 'lit';\nimport '../ki-popup/ki-popup';\nimport '../ki-list/ki-list';\nimport '../ki-checkbox/ki-checkbox';\n/* eslint-disable-next-line import/extensions */\nimport { repeat } from 'lit/directives/repeat.js';\nimport debounce from 'lodash-es/debounce';\n\n/*\n * col:{\n * hideAble: Boolean,\n * hide: Boolean\n * }\n *\n *\n * */\nexport default function ColumnHider(clz) {\n return class extends clz {\n // language=CSS\n static styles = css`\n .header-cell-hider {\n width: 50px;\n text-align: center;\n cursor: pointer;\n color: gray;\n }\n .header-cell-hider:hover {\n color: #4a4a49;\n }\n\n .hider.active {\n padding: 2px;\n background-color: var(--theme-color, #0056a0);\n color: white;\n fill: white;\n border-radius: 15px;\n }\n\n ki-popup {\n right: 10px;\n text-align: left;\n bottom: 0;\n /*temp solution*/\n }\n\n .header-cell-hider ki-popup {\n padding: 0;\n overflow: clip;\n display: flex;\n }\n .header-cell-hider ki-popup::part(focus-node) {\n display: flex;\n flex: 1;\n }\n\n ki-list {\n flex: 1;\n overflow: auto;\n min-width: 200px;\n /* adjusting for scroll bar */\n padding-right: 15px;\n }\n ki-list-item {\n padding: 5px;\n display: flex;\n align-items: center;\n }\n ki-checkbox {\n padding: 10px;\n }\n `;\n\n constructor() {\n super();\n this.__hiderOptionVisible = false;\n this._hiddenColumns = null;\n }\n\n static get properties() {\n return {\n hiddenColumns: { type: Array },\n __hiderOptionVisible: {\n type: Boolean,\n },\n };\n }\n\n get hiddenColumns() {\n return (\n this._hiddenColumns ||\n this.columns\n ?.filter(item => item.hideAble && item.hide)\n .map(i => i.field) ||\n []\n );\n }\n\n // TODO: More generic solution? e.g. set target element from outside\n _togglePopupColumnHider() {\n this.dispatchEvent(\n new CustomEvent('toggledPopupColumnHider', {\n detail: {\n visible: this.__hiderOptionVisible,\n },\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n // Callum Ramage:\n // This avoids a race condition between the ki-popup hiding from an outside click and the header icon being clicked.\n // Both trigger at the same time with the ki-popup triggering first.\n setHiderVisible = debounce(visible => {\n this.__hiderOptionVisible = visible;\n }, 100);\n\n get renderingColumns() {\n if (super.renderingColumns.filter(item => item.hideAble).length > 0) {\n return super.renderingColumns\n .filter(col => this.hiddenColumns.indexOf(col.field) < 0)\n .concat([\n {\n field: '__options',\n renderHeaderCell: () => {\n const togglePopup = () => {\n this.setHiderVisible(!this.__hiderOptionVisible);\n this._togglePopupColumnHider();\n };\n\n return html`\n
\n
\n \n
\n {\n this.setHiderVisible(false);\n this._togglePopupColumnHider();\n }}\n >\n ${this.__renderHiderColumnOptions()}\n \n
\n `;\n },\n },\n ]);\n }\n return super.renderingColumns;\n }\n\n __renderHiderColumnOption(item) {\n return html`\n \n \n ${item.title || item.label}\n \n `;\n }\n\n __renderHiderColumnOptions() {\n const options = this.columns.filter(item => item.hideAble);\n const keyFn = op => op.field;\n return html`\n ${repeat(\n options,\n keyFn,\n this.__renderHiderColumnOption.bind(this),\n )}\n `;\n }\n\n get __hiderOptionCheckBox() {\n return this.renderRoot.querySelectorAll('ki-checkbox.hiderBox');\n }\n\n _toggleHiderOption() {\n const list: Array = [];\n this.__hiderOptionCheckBox.forEach(c => {\n c.checked || list.push(c.name);\n });\n this._hiddenColumns = list;\n this.requestUpdate();\n }\n };\n}\n","/* eslint-disable max-classes-per-file */\nimport { html } from 'lit';\nimport { get } from 'lodash-es';\n/* eslint-disable-next-line import/extensions */\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js';\nimport dayjs from '../../common/dayjsext';\nimport { template } from '../../common/util';\n\n// TODO temp\n// https://jira-development.kisters.de/browse/WEBCP-48\n// https://jira-development.kisters.de/browse/WEBCP-65\n// const numberFormatter = new Intl.NumberFormat();\n\nexport default function ColumnFormatter(clz) {\n return class extends clz {\n // build in formatters , also can extend with subclass.\n static formatters = {\n // TODO remove cell wrapper, after find proper way to style columns?\n dateTime(val, opt = { options: { dayjsFormat: 'L LT' } }, col) {\n const dayjsFormat = opt?.options?.dayjsFormat || 'L LT';\n return html`\n
\n ${val ? dayjs(val).format(dayjsFormat) : ''}\n
\n `;\n },\n\n html(val, _opt, col) {\n return html`\n
\n ${val ? unsafeHTML(val.replace('./html', './public/html')) : ''}\n
\n `;\n },\n date(val, opt: { css: string | undefined } = { css: undefined }) {\n return html`\n
\n ${val ? dayjs(val).tz().format('L') : ''}\n
\n `;\n },\n wiskinumber(\n val,\n opt: {\n options: any;\n locale: string | undefined;\n } = { options: undefined, locale: undefined },\n col,\n item,\n ) {\n const precisiontable = {\n 'Deci,0,0,0': { minimumFractionDigits: 0, maximumFractionDigits: 0 },\n 'Deci,1,0,0': { minimumFractionDigits: 1, maximumFractionDigits: 1 },\n 'Deci,2,0,0': { minimumFractionDigits: 2, maximumFractionDigits: 2 },\n 'Deci,3,0,0': { minimumFractionDigits: 3, maximumFractionDigits: 3 },\n };\n const precision = item.ts_precision || 'Deci,2,0,0';\n const options: any = precisiontable[precision] || opt.options;\n\n if (typeof val === 'string') {\n val = val.replace(',', '.').replace(/[^\\d.-]/g, '');\n }\n\n const numberFormatter = new Intl.NumberFormat(opt.locale || 'en', {\n ...options,\n });\n const formatted = numberFormatter.format(val);\n return html`\n
\n ${col.prefix ? template(col.prefix, item) : ''}\n ${val === undefined ||\n val === null ||\n val === '' ||\n Number.isNaN(val)\n ? ''\n : formatted}\n ${val && col.suffix ? template(col.suffix, item) : ''}\n
\n `;\n },\n number(\n val,\n opt: {\n options: any;\n locale: string | undefined;\n } = { options: undefined, locale: undefined },\n col,\n item,\n ) {\n const numberFormatter = new Intl.NumberFormat(opt.locale || 'en', {\n ...opt.options,\n });\n const formatted = val === 0 ? val : numberFormatter.format(val);\n return html`\n
\n ${col.prefix ? template(col.prefix, item) : ''}\n ${val === undefined ||\n val === null ||\n val === '' ||\n Number.isNaN(val)\n ? ''\n : formatted}\n ${val && col.suffix ? template(col.suffix, item) : ''}\n
\n `;\n },\n textnumber(\n val,\n opt: {\n options: any;\n locale: string | undefined;\n } = { options: undefined, locale: undefined },\n col,\n item,\n ) {\n val = parseFloat(val && val.toString().replace(',', '.'));\n const numberFormatter = new Intl.NumberFormat(opt.locale || 'en', {\n ...opt.options,\n });\n const formatted = val === 0 ? val : numberFormatter.format(val);\n return html`\n
\n ${col.prefix ? template(col.prefix, item) : ''}\n ${val === undefined ||\n val === null ||\n val === '' ||\n Number.isNaN(val)\n ? ''\n : formatted}\n ${val && col.suffix ? template(col.suffix, item) : ''}\n
\n `;\n },\n };\n\n static get properties() {\n return {\n formatters: { type: Object },\n };\n }\n\n get renderingColumns() {\n // @ts-expect-error\n const formatters = { ...this.constructor.formatters, ...this.formatters };\n return super.renderingColumns?.map(c => {\n const col = { ...c };\n if (!col.renderCell) {\n if (col.format) {\n let { format } = col;\n if (typeof format === 'string') {\n format = {\n type: format,\n };\n }\n const formatter = formatters[format.type];\n if (formatter) {\n col.renderCell = item =>\n formatter(\n get(item, col.field),\n { ...format, ...{ locale: this.i18n.language } },\n col,\n item,\n );\n }\n }\n }\n return col;\n });\n }\n };\n}\n","// extension for ki-table\nimport { html, css } from 'lit';\n/* eslint-disable-next-line import/extensions */\nimport { repeat } from 'lit/directives/repeat.js';\nimport { getQueryObject } from '../../decorators/query';\nimport '../ki-checkbox/ki-checkbox';\n\nexport default function Selection(clz) {\n // TODO multi / single ?\n\n return class extends clz {\n static styles = css`\n .body .row.selected,\n .body .row.selected:hover {\n background: var(--theme-color, #0056a0);\n color: var(--theme-text-color, white);\n }\n .selection-col {\n font-size: 22px;\n vertical-align: middle;\n width: 40px;\n }\n .header .row {\n line-height: 25px;\n }\n `;\n\n static get properties() {\n return {\n multiselection: {\n type: Boolean,\n },\n selection: {\n type: Array,\n },\n };\n }\n\n set selection(val) {\n this.__selectionSet = new Set(val);\n this.requestUpdate();\n }\n\n constructor() {\n super();\n this.selectionActive = true;\n this.__selectionSet = new Set();\n }\n\n get __selectAllCheckbox() {\n return getQueryObject(this, '#select-all-checkbox');\n }\n\n _isSelected(row) {\n return this.__selectionSet.has(row[this.idproperty]);\n }\n\n _addSelection(row) {\n this.__selectionSet.add(row[this.idproperty]);\n this.requestUpdate();\n this.__fireSelection();\n }\n\n _toggleSelection(row) {\n if (this.__selectionSet.has(row[this.idproperty])) {\n this.__selectionSet.delete(row[this.idproperty]);\n } else {\n if (!this.multiselection) {\n this.__selectionSet.clear();\n }\n this.__selectionSet.add(row[this.idproperty]);\n }\n this.requestUpdate();\n this.__fireSelection();\n }\n\n _clearSelection() {\n this.__selectionSet.clear();\n this.requestUpdate();\n this.__fireSelection();\n }\n\n __fireSelection() {\n this.dispatchEvent(\n new CustomEvent('selection', {\n bubbles: true,\n composed: true,\n detail: { selection: Array.from(this.__selectionSet.values()) },\n }),\n );\n }\n\n _selectAll() {\n const flag = this.__selectAllCheckbox.checked;\n if (flag) {\n this.selection = this.data.map(d => d[this.idproperty]);\n } else {\n this.selection = [];\n }\n this.__fireSelection();\n }\n\n // TODO use get renderingColumns;\n\n _renderHeader() {\n if (!this.selectionActive) return super._renderHeader();\n\n return html`\n
\n
\n
\n
\n 0}\"\n @change=\"${() => {\n this._selectAll();\n }}\"\n >\n
\n
\n ${repeat(\n this.renderingColumns,\n (col: { field: any }) => col.field,\n col => this._renderHeaderCell(col),\n )}\n
\n
\n `;\n }\n\n renderRow(item) {\n if (!this.selectionActive) return super.renderRow(item);\n // TODO consider\n // language=html\n return html`\n this.mouseenter(e, item)}\"\n @mouseleave=\"${e => this.mouseleave(e, item)}\"\n @click=\"${() => {\n this._onRowClick(item);\n }}\"\n >\n
e.stopPropagation()}\">\n {\n this._toggleSelection(item);\n }}\"\n >\n
\n ${this.renderingColumns.map(col => this._renderCell(col, item))}\n \n `;\n }\n };\n}\n","import get from 'lodash-es/get';\n\nconst escapeCsv = (delimiter, text) => {\n if (text) {\n return `${text}`.includes(delimiter) ? `\"${text}\"` : text;\n }\n return '';\n};\n\nexport default function Export(clz) {\n return class extends clz {\n toCSV(delimiter = ';', all = true, exportcolumns) {\n let result = '#';\n let columns = all ? this.columns : this.renderingColumns;\n\n if (exportcolumns) {\n columns = columns.filter(col => exportcolumns.includes(col.field));\n }\n\n columns.forEach((col, i) => {\n result += `${i === 0 ? '' : delimiter}${escapeCsv(\n delimiter,\n col.label,\n )}`;\n });\n result += '\\r\\n';\n this.data.forEach(item => {\n columns.forEach((col, i) => {\n result += i === 0 ? '' : delimiter;\n let displayValue = '';\n if (col.renderCell) {\n const renderedCell = col.renderCell(item);\n const index = col.renderCellIndex ?? 0;\n if (\n renderedCell.values &&\n (renderedCell.values.length ?? 0) > index\n ) {\n // eslint-disable-next-line prefer-destructuring\n displayValue = renderedCell.values[index];\n } else {\n displayValue = renderedCell;\n }\n } else if (col.field === '__tag') {\n displayValue = get(item, '__tag_label');\n } else {\n displayValue = get(item, col.field);\n }\n result += escapeCsv(delimiter, displayValue);\n });\n result += '\\r\\n';\n });\n return result;\n }\n };\n}\n","import { customElement } from 'lit/decorators.js';\nimport { i18nMixin } from '../../decorators/i18n';\nimport nls from '../../locales/index';\nimport BaseTable from './BaseTable';\nimport PromiseData from './PromiseData';\nimport LazyRendering from './LazyRendering';\nimport SortAble from './SortAble';\nimport Mix from '../../common/Mix';\nimport ColumnHider from './ColumnHider';\nimport ColumnFormatter from './ColumnFormatter';\nimport Selection from './Selection';\nimport Export from './Export';\n\n// for inherit setter getter need define both\n// @ts-expect-error\n@customElement('ki-table')\nexport default class KiTable extends Mix(\n BaseTable,\n [i18nMixin, { nls }],\n LazyRendering,\n Selection,\n PromiseData,\n SortAble,\n ColumnHider,\n ColumnFormatter,\n Export,\n) {}\n","import { css, html, LitElement } from 'lit';\n// eslint-disable-next-line import/extensions\nimport { customElement } from 'lit/decorators.js';\n\nimport Mix from '../../common/Mix';\nimport { responsiveMixin } from '../../decorators/responsive';\n// TODO consider use sub element?\n\n// @ts-expect-error\n@customElement('ki-switcher')\nexport default class KiSwitcher extends Mix(LitElement, responsiveMixin) {\n static styles = [\n css`\n :host {\n display: flex;\n box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14),\n 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -2px rgba(0, 0, 0, 0.2);\n border-radius: 30px;\n font-size: 0;\n overflow: visible;\n }\n .tab {\n background: white;\n color: var(--theme-text-color-primary, #1d1d1b);\n fill: var(--theme-text-color-primary, #1d1d1b);\n display: flex;\n padding: 8px 10px;\n min-width: 40px;\n text-align: center;\n cursor: pointer;\n user-select: none;\n position: relative;\n font-size: 14px;\n line-height: 24px;\n align-items: center;\n justify-content: center;\n }\n\n ki-icon {\n margin-right: 5px;\n font-size: 1.3em;\n }\n .tab.selected {\n color: #ffffff;\n fill: #ffffff;\n background: var(--theme-color-primary, #0056a0);\n }\n\n :host.round .tab.last {\n border-bottom-right-radius: 30px;\n border-top-right-radius: 30px;\n }\n :host(.round).tab.first {\n border-bottom-left-radius: 30px;\n border-top-left-radius: 30px;\n }\n :host(.sm-screen) span.label {\n display: none;\n }\n :host(.sm-screen) ki-icon {\n font-size: 1.5em;\n margin-right: 0;\n }\n :host(.sm-screen).tab {\n min-width: initial;\n padding: 9px 10px;\n }\n .badgesContainer {\n position: absolute;\n top: 0;\n display: flex;\n transform: translateY(130%);\n right: 0;\n }\n .badge {\n display: block;\n position: relative;\n outline: none;\n z-index: 999;\n box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14),\n 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -2px rgba(0, 0, 0, 0.2);\n color: white;\n padding: 0 10px;\n border-radius: 30px;\n font-size: 0.8em;\n }\n `,\n ];\n\n static get properties() {\n return {\n options: { type: Array },\n value: { type: String },\n };\n }\n\n get selected() {\n const preselected = this.options.filter(opt => opt.selected);\n return preselected.length ? preselected[0].value : this.options[0].value;\n }\n\n render() {\n this.value = this.value || this.selected;\n // language=html\n return html`\n ${this.options.map(\n (option, i) => html`\n {\n e.key === 'Enter' && this.switchTo(option.value);\n }}\"\n @click=\"${() => {\n this.switchTo(option.value);\n }}\"\n >\n
\n ${option?.badges?.map(\n badge =>\n html`\n ${badge.count}\n
`,\n )}\n \n ${option.icon\n ? html``\n : ''}\n ${option.label}\n \n `,\n )}\n `;\n }\n\n switchTo(value) {\n if (this.value !== value) {\n this.value = value;\n this.dispatchEvent(new CustomEvent('changed', { detail: { value } }));\n }\n }\n}\n","import { LitElement, html, css } from 'lit';\n// eslint-disable-next-line import/extensions\nimport { customElement, property } from 'lit/decorators.js';\n\n@customElement('ki-stack')\nexport default class KiStack extends LitElement {\n // language=CSS\n static styles = css`\n :host {\n display: block;\n position: relative;\n overflow: hidden;\n height: 100%;\n width: 100%;\n }\n\n .stack-container {\n height: 100%;\n width: 100%;\n display: block;\n overflow: hidden;\n }\n\n .stack-container > ::slotted(*[key]) {\n position: absolute;\n top: 0;\n left: 0;\n display: none;\n height: 100%;\n width: 100%;\n }\n\n .stack-container > ::slotted(.selected) {\n display: block;\n }\n `;\n\n @property({ type: String })\n selected: string | null | undefined = this.children[0].getAttribute('key');\n\n history: Array = [];\n\n update(changedProperties) {\n super.update(changedProperties);\n if (changedProperties.has('selected')) {\n this._select(this.selected);\n }\n }\n\n render() {\n return html`
`;\n }\n\n /* @private\n * */\n _select(key) {\n let selectedChild;\n for (const c of this.children) {\n const s = c.getAttribute('key') === key;\n c.classList.toggle('selected', s);\n if (s) {\n selectedChild = c;\n }\n }\n if (!selectedChild) {\n return;\n }\n if (!selectedChild.getAttribute('skipHistory')) {\n this.history.push(key);\n }\n if (selectedChild.onShow) {\n selectedChild.onShow(); // TODO need consider\n }\n }\n\n back() {\n this.selected = this.history.pop();\n }\n}\n","import { css, html, LitElement } from 'lit';\n// eslint-disable-next-line import/extensions\nimport { customElement } from 'lit/decorators.js';\nimport debounce from 'lodash-es/debounce';\nimport Mix from '../../common/Mix';\nimport '../ki-icon/ki-icon';\nimport nls from '../../locales/index';\nimport { i18nMixin } from '../../decorators/i18n';\n\n// @ts-expect-error\n@customElement('ki-searchbox')\nexport default class KiSearchbox extends Mix(LitElement, [i18nMixin, { nls }]) {\n static styles = [\n css`\n :host {\n width: 100%;\n border: 1px solid transparent;\n transition: all linear 0.7s;\n box-sizing: border-box;\n padding: 6px;\n height: 40px;\n color: grey;\n fill: grey;\n border-radius: 30px;\n line-height: 26px;\n background: white;\n box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14),\n 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -2px rgba(0, 0, 0, 0.2);\n display: flex;\n flex-wrap: nowrap;\n flex-direction: row;\n }\n\n .input-wrapper {\n flex: 1;\n position: relative;\n line-height: 26px;\n height: 26px;\n font-size: 14px;\n }\n\n input::placeholder {\n font-style: italic;\n }\n\n input,\n input::placeholder {\n width: 100%;\n font-size: inherit;\n margin-top: 5px;\n border: none;\n box-shadow: none;\n outline: none;\n padding: 0;\n line-height: 21px;\n color: inherit;\n background: inherit;\n font-family: inherit;\n --_lumo-text-field-overflow-mask-image: linear-gradient(\n to left,\n transparent,\n #000 1.25em\n );\n -webkit-mask-image: var(--_lumo-text-field-overflow-mask-image);\n mask-image: var(--_lumo-text-field-overflow-mask-image);\n }\n\n ki-icon {\n text-align: center;\n padding: 2px;\n width: 26px;\n height: 26px;\n border-radius: 20px;\n flex: 0 0 26px;\n }\n\n .clear-btn {\n fill: rgb(126, 126, 126);\n position: absolute;\n right: 0;\n top: -6px;\n cursor: pointer;\n width: 12px;\n }\n\n ki-icon.btn {\n cursor: pointer;\n }\n\n ki-icon.btn:hover {\n fill: #4a4a49;\n }\n\n ki-icon.btn.actived {\n fill: white;\n background: var(--theme-color, #0056a0);\n }\n\n .hide {\n display: none;\n }\n `,\n ];\n\n constructor() {\n super();\n this.fieldList = [];\n this.value = '';\n this.emitSearch = debounce(() => {\n this.dispatchEvent(\n new CustomEvent('search', { detail: { value: this.value } }),\n );\n }, 200);\n }\n\n static get properties() {\n return {\n value: { type: String },\n placeholder: { type: String },\n fieldList: { type: Array },\n };\n }\n\n render() {\n // language=html\n return html`\n \n
\n \n \n
\n \n `;\n }\n\n _handleChanged() {\n const input = this.renderRoot.querySelector('#input');\n this.value = input.value;\n this.dispatchEvent(\n new CustomEvent('change', { detail: { value: this.value } }),\n );\n this.emitSearch(); // debounced\n }\n\n resetValue() {\n this.value = '';\n this.renderRoot.querySelector('#input').value = '';\n this._handleChanged();\n }\n}\n","const SearchSytaxQueryParser =\n/*\n * Generated by PEG.js 0.10.0.\n *\n * http://pegjs.org/\n */\n\n(function() {\n\nfunction peg$subclass(child, parent) {\n function ctor() { this.constructor = child; }\n ctor.prototype = parent.prototype;\n child.prototype = new ctor();\n}\n\nfunction peg$SyntaxError(message, expected, found, location) {\n this.message = message;\n this.expected = expected;\n this.found = found;\n this.location = location;\n this.name = \"SyntaxError\";\n\n if (typeof Error.captureStackTrace === \"function\") {\n Error.captureStackTrace(this, peg$SyntaxError);\n }\n}\n\npeg$subclass(peg$SyntaxError, Error);\n\npeg$SyntaxError.buildMessage = function(expected, found) {\n const DESCRIBE_EXPECTATION_FNS = {\n literal(expectation) {\n return `\"${ literalEscape(expectation.text) }\"`;\n },\n\n \"class\": function(expectation) {\n let escapedParts = \"\";\n let i;\n\n for (i = 0; i < expectation.parts.length; i++) {\n escapedParts += expectation.parts[i] instanceof Array\n ? `${classEscape(expectation.parts[i][0]) }-${ classEscape(expectation.parts[i][1])}`\n : classEscape(expectation.parts[i]);\n }\n\n return `[${ expectation.inverted ? \"^\" : \"\" }${escapedParts }]`;\n },\n\n any(expectation) {\n return \"any character\";\n },\n\n end(expectation) {\n return \"end of input\";\n },\n\n other(expectation) {\n return expectation.description;\n }\n };\n\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n\n function literalEscape(s) {\n return s\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\"/g, '\\\\\"')\n .replace(/\\0/g, '\\\\0')\n .replace(/\\t/g, '\\\\t')\n .replace(/\\n/g, '\\\\n')\n .replace(/\\r/g, '\\\\r')\n .replace(/[\\x00-\\x0F]/g, function(ch) { return `\\\\x0${ hex(ch)}`; })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return `\\\\x${ hex(ch)}`; });\n }\n\n function classEscape(s) {\n return s\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\\]/g, '\\\\]')\n .replace(/\\^/g, '\\\\^')\n .replace(/-/g, '\\\\-')\n .replace(/\\0/g, '\\\\0')\n .replace(/\\t/g, '\\\\t')\n .replace(/\\n/g, '\\\\n')\n .replace(/\\r/g, '\\\\r')\n .replace(/[\\x00-\\x0F]/g, function(ch) { return `\\\\x0${ hex(ch)}`; })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return `\\\\x${ hex(ch)}`; });\n }\n\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n\n function describeExpected(expected) {\n const descriptions = new Array(expected.length);\n let i; let j;\n\n for (i = 0; i < expected.length; i++) {\n descriptions[i] = describeExpectation(expected[i]);\n }\n\n descriptions.sort();\n\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n\n case 2:\n return `${descriptions[0] } or ${ descriptions[1]}`;\n\n default:\n return `${descriptions.slice(0, -1).join(\", \")\n }, or ${\n descriptions[descriptions.length - 1]}`;\n }\n }\n\n function describeFound(found) {\n return found ? `\"${ literalEscape(found) }\"` : \"end of input\";\n }\n\n return `Expected ${ describeExpected(expected) } but ${ describeFound(found) } found.`;\n};\n\nfunction peg$parse(input, options) {\n options = options !== void 0 ? options : {};\n\n const peg$FAILED = {};\n\n const peg$startRuleFunctions = { Start: peg$parseStart };\n let peg$startRuleFunction = peg$parseStart;\n\n const peg$c0 = function(expr) {return expr};\n const peg$c1 = \"(\";\n const peg$c2 = peg$literalExpectation(\"(\", false);\n const peg$c3 = \")\";\n const peg$c4 = peg$literalExpectation(\")\", false);\n const peg$c5 = function(head, tail) {return buildLogicalExpression (head, tail)};\n const peg$c6 = function(key, operator, value) { return { type: 'field' ,operator, key, value } };\n const peg$c7 = peg$otherExpectation(\"field name\");\n const peg$c8 = /^[A-Za-z1-9_$]/;\n const peg$c9 = peg$classExpectation([[\"A\", \"Z\"], [\"a\", \"z\"], [\"1\", \"9\"], \"_\", \"$\"], false, false);\n const peg$c10 = function(w) {\n \tconst key=w.join('');\n if(!options.fields || options.fields.indexOf(key) >= 0){\n \treturn key;\n }\n peg$currPos -= key.length\n \treturn peg$FAILED // TODO hacking way, try use plugin\n \t\n };\n const peg$c11 = /^[A-Za-z0-9_$]/;\n const peg$c12 = peg$classExpectation([[\"A\", \"Z\"], [\"a\", \"z\"], [\"0\", \"9\"], \"_\", \"$\"], false, false);\n const peg$c13 = function(w) {return w.join('')};\n const peg$c14 = function(w) {return w.value };\n const peg$c15 = \"[\";\n const peg$c16 = peg$literalExpectation(\"[\", false);\n const peg$c17 = \",\";\n const peg$c18 = peg$literalExpectation(\",\", false);\n const peg$c19 = \"]\";\n const peg$c20 = peg$literalExpectation(\"]\", false);\n const peg$c21 = function(head, tail) { return buildArray(head,tail) };\n const peg$c22 = peg$otherExpectation(\"whitespace\");\n const peg$c23 = /^[ \\t\\n\\r]/;\n const peg$c24 = peg$classExpectation([\" \", \"\\t\", \"\\n\", \"\\r\"], false, false);\n const peg$c25 = peg$otherExpectation(\"space\");\n const peg$c26 = /^[ ]/;\n const peg$c27 = peg$classExpectation([\" \"], false, false);\n const peg$c28 = \"=\";\n const peg$c29 = peg$literalExpectation(\"=\", false);\n const peg$c30 = \"!=\";\n const peg$c31 = peg$literalExpectation(\"!=\", false);\n const peg$c32 = \">=\";\n const peg$c33 = peg$literalExpectation(\">=\", false);\n const peg$c34 = \"<=\";\n const peg$c35 = peg$literalExpectation(\"<=\", false);\n const peg$c36 = \"<\";\n const peg$c37 = peg$literalExpectation(\"<\", false);\n const peg$c38 = \">\";\n const peg$c39 = peg$literalExpectation(\">\", false);\n const peg$c40 = \"IN\";\n const peg$c41 = peg$literalExpectation(\"IN\", false);\n const peg$c42 = \"AND\";\n const peg$c43 = peg$literalExpectation(\"AND\", false);\n const peg$c44 = \"OR\";\n const peg$c45 = peg$literalExpectation(\"OR\", false);\n const peg$c46 = peg$otherExpectation(\"string\");\n const peg$c47 = \"\\\"\";\n const peg$c48 = peg$literalExpectation(\"\\\"\", false);\n const peg$c49 = function(chars) {\n return { type: \"Literal\", value: chars.join(\"\") };\n };\n const peg$c50 = \"\\\\\";\n const peg$c51 = peg$literalExpectation(\"\\\\\", false);\n const peg$c52 = function() { return text(); };\n const peg$c53 = function(sequence) { return sequence; };\n const peg$c54 = \"0\";\n const peg$c55 = peg$literalExpectation(\"0\", false);\n const peg$c56 = function() { return \"\\0\"; };\n const peg$c57 = \"x\";\n const peg$c58 = peg$literalExpectation(\"x\", false);\n const peg$c59 = function(digits) {\n return String.fromCharCode(parseInt(digits, 16));\n };\n const peg$c60 = \"u\";\n const peg$c61 = peg$literalExpectation(\"u\", false);\n const peg$c62 = /^[0-9]/;\n const peg$c63 = peg$classExpectation([[\"0\", \"9\"]], false, false);\n const peg$c64 = peg$anyExpectation();\n const peg$c65 = /^[0-9a-f]/i;\n const peg$c66 = peg$classExpectation([[\"0\", \"9\"], [\"a\", \"f\"]], false, true);\n const peg$c67 = \"'\";\n const peg$c68 = peg$literalExpectation(\"'\", false);\n const peg$c69 = \"b\";\n const peg$c70 = peg$literalExpectation(\"b\", false);\n const peg$c71 = function() { return \"\\b\"; };\n const peg$c72 = \"f\";\n const peg$c73 = peg$literalExpectation(\"f\", false);\n const peg$c74 = function() { return \"\\f\"; };\n const peg$c75 = \"n\";\n const peg$c76 = peg$literalExpectation(\"n\", false);\n const peg$c77 = function() { return \"\\n\"; };\n const peg$c78 = \"r\";\n const peg$c79 = peg$literalExpectation(\"r\", false);\n const peg$c80 = function() { return \"\\r\"; };\n const peg$c81 = \"t\";\n const peg$c82 = peg$literalExpectation(\"t\", false);\n const peg$c83 = function() { return \"\\t\"; };\n const peg$c84 = \"v\";\n const peg$c85 = peg$literalExpectation(\"v\", false);\n const peg$c86 = function() { return \"\\v\"; };\n const peg$c87 = /^[\\n\\r\\u2028\\u2029]/;\n const peg$c88 = peg$classExpectation([\"\\n\", \"\\r\", \"\\u2028\", \"\\u2029\"], false, false);\n\n var peg$currPos = 0;\n let peg$savedPos = 0;\n const peg$posDetailsCache = [{ line: 1, column: 1 }];\n let peg$maxFailPos = 0;\n let peg$maxFailExpected = [];\n let peg$silentFails = 0;\n\n let peg$result;\n\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(`Can't start parsing from rule \"${ options.startRule }\".`);\n }\n\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n\n function expected(description, location) {\n location = location !== void 0 ? location : peg$computeLocation(peg$savedPos, peg$currPos)\n\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location\n );\n }\n\n function error(message, location) {\n location = location !== void 0 ? location : peg$computeLocation(peg$savedPos, peg$currPos)\n\n throw peg$buildSimpleError(message, location);\n }\n\n function peg$literalExpectation(text, ignoreCase) {\n return { type: \"literal\", text, ignoreCase };\n }\n\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts, inverted, ignoreCase };\n }\n\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n\n function peg$otherExpectation(description) {\n return { type: \"other\", description };\n }\n\n function peg$computePosDetails(pos) {\n let details = peg$posDetailsCache[pos]; let p;\n\n if (details) {\n return details;\n } \n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n\n p++;\n }\n\n peg$posDetailsCache[pos] = details;\n return details;\n \n }\n\n function peg$computeLocation(startPos, endPos) {\n const startPosDetails = peg$computePosDetails(startPos);\n const endPosDetails = peg$computePosDetails(endPos);\n\n return {\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n }\n\n function peg$fail(expected) {\n if (peg$currPos < peg$maxFailPos) { return; }\n\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n\n peg$maxFailExpected.push(expected);\n }\n\n function peg$buildSimpleError(message, location) {\n return new peg$SyntaxError(message, null, null, location);\n }\n\n function peg$buildStructuredError(expected, found, location) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected, found),\n expected,\n found,\n location\n );\n }\n\n function peg$parseStart() {\n let s0; let s1;\n\n s0 = peg$currPos;\n s1 = peg$parseLogicExpr();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c0(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseExpr() {\n let s0; let s1; let s2; let s3; let s4; let s5;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 40) {\n s1 = peg$c1;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c2); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsesp();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseLogicExpr();\n if (s3 !== peg$FAILED) {\n s4 = peg$parsesp();\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 41) {\n s5 = peg$c3;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c4); }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c0(s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parseLogicExpr();\n }\n\n return s0;\n }\n\n function peg$parseLogicExpr() {\n let s0; let s1; let s2; let s3; let s4; let s5; let s6; let s7;\n\n s0 = peg$currPos;\n s1 = peg$parseFieldExpr();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = peg$parseLopr();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseFieldExpr();\n if (s7 === peg$FAILED) {\n s7 = peg$parseExpr();\n }\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = peg$parseLopr();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseFieldExpr();\n if (s7 === peg$FAILED) {\n s7 = peg$parseExpr();\n }\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c5(s1, s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseFieldExpr() {\n let s0; let s1; let s2; let s3; let s4; let s5;\n\n s0 = peg$currPos;\n s1 = peg$parseKey();\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseCopr();\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = peg$parseValue();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c6(s1, s3, s5);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseKey() {\n let s0; let s1; let s2;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n if (peg$c8.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c9); }\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n if (peg$c8.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c9); }\n }\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c10(s1);\n }\n s0 = s1;\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c7); }\n }\n\n return s0;\n }\n\n function peg$parseValue() {\n let s0; let s1; let s2; let s3; let s4; let s5; let s6; let s7; let s8; let s9;\n\n s0 = peg$currPos;\n s1 = [];\n if (peg$c11.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c12); }\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n if (peg$c11.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c12); }\n }\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c13(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseStringLiteral();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c14(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 91) {\n s1 = peg$c15;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c16); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsesp();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseValue();\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$currPos;\n s6 = peg$parsesp();\n if (s6 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s7 = peg$c17;\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c18); }\n }\n if (s7 !== peg$FAILED) {\n s8 = peg$parsesp();\n if (s8 !== peg$FAILED) {\n s9 = peg$parseValue();\n if (s9 !== peg$FAILED) {\n s6 = [s6, s7, s8, s9];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$currPos;\n s6 = peg$parsesp();\n if (s6 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s7 = peg$c17;\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c18); }\n }\n if (s7 !== peg$FAILED) {\n s8 = peg$parsesp();\n if (s8 !== peg$FAILED) {\n s9 = peg$parseValue();\n if (s9 !== peg$FAILED) {\n s6 = [s6, s7, s8, s9];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsesp();\n if (s5 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 93) {\n s6 = peg$c19;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c20); }\n }\n if (s6 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c21(s3, s4);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n }\n\n return s0;\n }\n\n function peg$parse_() {\n let s0; let s1;\n\n peg$silentFails++;\n s0 = [];\n if (peg$c23.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c24); }\n }\n if (s1 !== peg$FAILED) {\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n if (peg$c23.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c24); }\n }\n }\n } else {\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c22); }\n }\n\n return s0;\n }\n\n function peg$parsesp() {\n let s0; let s1;\n\n peg$silentFails++;\n s0 = [];\n if (peg$c26.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c27); }\n }\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n if (peg$c26.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c27); }\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c25); }\n }\n\n return s0;\n }\n\n function peg$parseCopr() {\n let s0;\n\n if (input.charCodeAt(peg$currPos) === 61) {\n s0 = peg$c28;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c29); }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c30) {\n s0 = peg$c30;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c31); }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c32) {\n s0 = peg$c32;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c33); }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c34) {\n s0 = peg$c34;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c35); }\n }\n if (s0 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 60) {\n s0 = peg$c36;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c37); }\n }\n if (s0 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 62) {\n s0 = peg$c38;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c39); }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c40) {\n s0 = peg$c40;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c41); }\n }\n }\n }\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseLopr() {\n let s0;\n\n if (input.substr(peg$currPos, 3) === peg$c42) {\n s0 = peg$c42;\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c43); }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c44) {\n s0 = peg$c44;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c45); }\n }\n }\n\n return s0;\n }\n\n function peg$parseStringLiteral() {\n let s0; let s1; let s2; let s3;\n\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 34) {\n s1 = peg$c47;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c48); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parseDoubleStringCharacter();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parseDoubleStringCharacter();\n }\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 34) {\n s3 = peg$c47;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c48); }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c49(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c46); }\n }\n\n return s0;\n }\n\n function peg$parseDoubleStringCharacter() {\n let s0; let s1; let s2;\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n if (input.charCodeAt(peg$currPos) === 34) {\n s2 = peg$c47;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c48); }\n }\n if (s2 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 92) {\n s2 = peg$c50;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c51); }\n }\n }\n peg$silentFails--;\n if (s2 === peg$FAILED) {\n s1 = void 0;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseSourceCharacter();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c52();\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s1 = peg$c50;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c51); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseEscapeSequence();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c53(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n\n return s0;\n }\n\n function peg$parseEscapeSequence() {\n let s0; let s1; let s2; let s3;\n\n s0 = peg$parseCharacterEscapeSequence();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 48) {\n s1 = peg$c54;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c55); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n peg$silentFails++;\n s3 = peg$parseDecimalDigit();\n peg$silentFails--;\n if (s3 === peg$FAILED) {\n s2 = void 0;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c56();\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parseHexEscapeSequence();\n if (s0 === peg$FAILED) {\n s0 = peg$parseUnicodeEscapeSequence();\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseHexEscapeSequence() {\n let s0; let s1; let s2; let s3; let s4; let s5;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 120) {\n s1 = peg$c57;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c58); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n s3 = peg$currPos;\n s4 = peg$parseHexDigit();\n if (s4 !== peg$FAILED) {\n s5 = peg$parseHexDigit();\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n s2 = input.substring(s2, peg$currPos);\n } else {\n s2 = s3;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c59(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseCharacterEscapeSequence() {\n let s0;\n\n s0 = peg$parseSingleEscapeCharacter();\n if (s0 === peg$FAILED) {\n s0 = peg$parseNonEscapeCharacter();\n }\n\n return s0;\n }\n\n function peg$parseUnicodeEscapeSequence() {\n let s0; let s1; let s2; let s3; let s4; let s5; let s6; let s7;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 117) {\n s1 = peg$c60;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c61); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n s3 = peg$currPos;\n s4 = peg$parseHexDigit();\n if (s4 !== peg$FAILED) {\n s5 = peg$parseHexDigit();\n if (s5 !== peg$FAILED) {\n s6 = peg$parseHexDigit();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseHexDigit();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n s2 = input.substring(s2, peg$currPos);\n } else {\n s2 = s3;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c59(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseDecimalDigit() {\n let s0;\n\n if (peg$c62.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c63); }\n }\n\n return s0;\n }\n\n function peg$parseSourceCharacter() {\n let s0;\n\n if (input.length > peg$currPos) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c64); }\n }\n\n return s0;\n }\n\n function peg$parseHexDigit() {\n let s0;\n\n if (peg$c65.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c66); }\n }\n\n return s0;\n }\n\n function peg$parseSingleEscapeCharacter() {\n let s0; let s1;\n\n if (input.charCodeAt(peg$currPos) === 39) {\n s0 = peg$c67;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c68); }\n }\n if (s0 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 34) {\n s0 = peg$c47;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c48); }\n }\n if (s0 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 92) {\n s0 = peg$c50;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c51); }\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 98) {\n s1 = peg$c69;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c70); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c71();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 102) {\n s1 = peg$c72;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c73); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c74();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 110) {\n s1 = peg$c75;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c76); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c77();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 114) {\n s1 = peg$c78;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c79); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c80();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 116) {\n s1 = peg$c81;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c82); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c83();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 118) {\n s1 = peg$c84;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c85); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c86();\n }\n s0 = s1;\n }\n }\n }\n }\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseEscapeCharacter() {\n let s0;\n\n s0 = peg$parseSingleEscapeCharacter();\n if (s0 === peg$FAILED) {\n s0 = peg$parseDecimalDigit();\n if (s0 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 120) {\n s0 = peg$c57;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c58); }\n }\n if (s0 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 117) {\n s0 = peg$c60;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c61); }\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseNonEscapeCharacter() {\n let s0; let s1; let s2;\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n s2 = peg$parseEscapeCharacter();\n if (s2 === peg$FAILED) {\n s2 = peg$parseLineTerminator();\n }\n peg$silentFails--;\n if (s2 === peg$FAILED) {\n s1 = void 0;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseSourceCharacter();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c52();\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseLineTerminator() {\n let s0;\n\n if (peg$c87.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c88); }\n }\n\n return s0;\n }\n\n\n \t function buildLogicalExpression(head, tail) {\n return tail.reduce(function(result, element) {\n return {\n type: 'logic',\n operator: element[1],\n left: result,\n right: element[3]\n };\n }, head);\n }\n\n function buildArray(head, tail) {\n const re = [head]\n tail.forEach(function(element){\n re.push(element[3])\n })\n return re;\n }\n\n\n peg$result = peg$startRuleFunction();\n\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } \n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length\n ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1)\n : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n \n}\n\nreturn {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse\n};\n})();\n\n\nexport default SearchSytaxQueryParser;","import { css, html, LitElement } from 'lit';\n// eslint-disable-next-line import/extensions\nimport { customElement, property } from 'lit/decorators.js';\nimport SearchSytaxQueryParser from '../../../tools/SearchSytaxQueryParser_ES6';\nimport '../ki-popup/ki-popup';\n\n@customElement('ki-search-query-action')\nexport default class KiSearchQueryAction extends LitElement {\n // language=CSS\n static styles = css`\n .hide {\n display: none !important;\n }\n\n ki-icon {\n cursor: pointer;\n }\n\n ki-icon.ok {\n fill: #00c300;\n }\n\n ki-icon.ok:hover {\n fill: green;\n }\n\n ki-icon.error {\n fill: red;\n }\n\n ki-icon.error:hover {\n fill: #cf0000;\n }\n `;\n\n @property({ type: String })\n content: string | undefined;\n\n @property({ type: Array })\n fieldList: Array = [];\n\n @property({ type: String })\n error: string = '';\n\n @property({ type: String })\n suggestion: any;\n\n @property({ type: Object })\n inputElement: any;\n\n @property({ type: Object })\n query: any;\n\n render() {\n let mode = '';\n if (!this.content) {\n mode = 'info';\n } else if (this.error === '') {\n mode = 'ok';\n } else {\n mode = 'error';\n }\n // language=html\n return html`\n
\n \n \n
\n ${this.error}\n `;\n }\n\n updated(changedProperties) {\n if (changedProperties.has('content')) {\n this._checkContent();\n }\n }\n\n _checkContent() {\n this.error = '';\n try {\n if (this.content) {\n this.query = SearchSytaxQueryParser.parse(this.content, {\n fields: this.fieldList,\n });\n this.dispatchEvent(\n new CustomEvent('query', {\n detail: {\n query: this.query,\n },\n }),\n );\n }\n this.dispatchEvent(\n new CustomEvent('suggestion', {\n detail: {\n suggestion: null,\n },\n }),\n );\n } catch (e: any) {\n this.error = e.message;\n this.suggestion = this.getSuggestions(e);\n this.dispatchEvent(\n new CustomEvent('suggestion', {\n detail: {\n suggestion: {\n options: this.suggestion,\n location: e.location,\n },\n },\n }),\n );\n }\n }\n\n getSuggestions(event) {\n let data: Array = [];\n event.expected.forEach(item => {\n if (item.description === 'field name') {\n data = data.concat(this.fieldList);\n }\n if (item.type === 'literal' && item.text) {\n if (['('].indexOf(item.text) < 0) {\n data.indexOf(item.text) < 0 && data.push(item.text);\n }\n }\n });\n data = [...new Set(data)];\n return data;\n }\n}\n","import { css, html, LitElement } from 'lit';\n// eslint-disable-next-line import/extensions\nimport { customElement, property } from 'lit/decorators.js';\nimport './ki-searchbox';\nimport './ki-search-query-action';\nimport '../ki-list/ki-list';\nimport '../ki-list/ki-list-item';\n\n@customElement('ki-queryable-searchbox')\nexport default class KiQueryableSearchbox extends LitElement {\n // language=CSS\n static styles = css`\n :host {\n display: block;\n position: relative;\n }\n #suggestion-popup {\n top: 100%;\n left: 0;\n width: 100%;\n }\n `;\n\n @property({ type: String })\n content = '';\n\n @property({ type: Array })\n fieldList: Array = [];\n\n @property({ type: Array })\n suggestion: any;\n\n render() {\n // language=html\n return html`\n {\n this.content = e.detail.value;\n }}\"\n >\n
\n \n
\n \n \n ${this.suggestion &&\n this.suggestion.options.map(\n h =>\n html`\n \n this._applySuggestion(this.suggestion.location, h)}\"\n >${h}\n `,\n )}\n \n `;\n }\n\n _onSuggestion(e) {\n this.suggestion = e.detail.suggestion;\n }\n\n _applySuggestion(location, text) {\n this.content = this.content.substr(0, location.start.offset) + text;\n }\n\n onSearch(e) {\n this.dispatchEvent(\n new CustomEvent('search', { detail: { query: e.detail.query } }),\n );\n }\n}\n","/* eslint-disable max-classes-per-file */\nimport { html, css, LitElement } from 'lit';\n// eslint-disable-next-line import/extensions\nimport { customElement, property } from 'lit/decorators.js';\nimport '../ki-icon/ki-icon';\nimport { getQueryObject } from '../../decorators/query';\n\n@customElement('ki-tree-node')\nexport default class KiTreeNode extends LitElement {\n static styles = css`\n .tree-item {\n cursor: pointer;\n display: flex;\n flex-direction: column;\n line-height: 2.5em;\n color: grey;\n width: 100%;\n }\n\n :host(.hideRoot) .tree-item .tree-node-content {\n display: none;\n }\n :host(.hideRoot) .tree-item .tree-node-children {\n padding-left: 0;\n }\n\n .tree-node-content.leaf-content {\n background-color: white;\n }\n\n .tree-item.selected .tree-node-content {\n color: white;\n background: var(--theme-color, #0056a0);\n }\n\n .tree-node-content {\n display: flex;\n flex-direction: row;\n padding: 0px 20px;\n height: 40px;\n overflow: hidden;\n }\n\n .tree-node-label {\n flex: 1;\n }\n .tree-node-label:hover {\n color: var(--theme-color, #0056a0);\n cursor: pointer;\n }\n .tree-item.selected .tree-node-label:hover {\n color: white;\n opacity: 0.8;\n }\n .tree-node-label .node-content-label {\n white-space: nowrap;\n max-width: 300px;\n display: inline-block;\n text-overflow: ellipsis;\n overflow: hidden;\n }\n\n .node-content-label {\n flex: 1;\n line-height: 40px;\n }\n\n .node-content-icon {\n vertical-align: top;\n padding: 10px;\n font-size: 18px;\n cursor: pointer;\n }\n\n span::selection {\n background: white;\n }\n\n .expand-icon {\n padding: 10px;\n width: 36px;\n text-align: center;\n }\n\n .expand-icon.hide {\n display: none;\n }\n .expand-icon:hover {\n fill: var(--theme-color, #0056a0);\n cursor: pointer;\n border-radius: 50%;\n }\n\n .tree-node-children.hide {\n display: none;\n }\n `;\n\n @property({ type: String })\n icon: string | undefined;\n\n @property({ type: String })\n label: string = '';\n\n @property({ type: Object })\n value;\n\n @property({ type: Boolean })\n isLeaf: boolean = false;\n\n @property({ type: Array })\n selectedItem: Array | undefined;\n\n @property({ type: Boolean })\n expand: boolean = false;\n\n @property({ type: Number })\n paddingLeft: number = 0;\n\n get __labelElement() {\n return getQueryObject(this, '#label');\n }\n\n render() {\n return html`\n \n \n
\n ${this.icon\n ? html``\n : ''}\n \n
\n \n \n
\n \n
\n \n `;\n }\n\n _createPapertooltip() {\n if (this.__labelElement.offsetWidth < this.__labelElement.scrollWidth) {\n const node = document.createElement('paper-tooltip');\n // @ts-expect-error\n node.for = 'label';\n node.innerHTML = this.label;\n this.__labelElement.appendChild(node);\n }\n }\n\n handleContentClick() {\n const labelClickedEvent = new CustomEvent('labelClicked', {\n detail: { value: this.value },\n bubbles: true,\n composed: true,\n });\n if (!this.isLeaf) {\n this.dispatchEvent(labelClickedEvent);\n this.expand = !this.expand;\n } else {\n this.dispatchEvent(\n new CustomEvent('itemSelected', {\n detail: { value: this.value },\n bubbles: true,\n composed: true,\n }),\n );\n }\n }\n\n handleClick() {\n // this.value = this.value;\n const itemSelectedEvent = new CustomEvent('itemSelected', {\n detail: { value: this.value },\n bubbles: true,\n composed: true,\n });\n\n if (this.isLeaf) {\n this.expand = false;\n this.dispatchEvent(itemSelectedEvent);\n } else {\n this.expand = !this.expand;\n }\n\n // @ts-expect-error\n this.requestUpdate(this.expand, !this.expand);\n }\n}\n","import { html, css, LitElement } from 'lit';\n// eslint-disable-next-line import/extensions\nimport { customElement, property } from 'lit/decorators.js';\nimport './ki-tree-node';\n\nconst SCROLL_STEP = 50; // for performance\n\n@customElement('ki-tree')\nexport default class KiTree extends LitElement {\n static styles = css`\n :host {\n height: 100%;\n width: 100%;\n display: block;\n overflow: auto;\n }\n .group {\n overflow: hidden;\n }\n `;\n\n _data: any = [];\n\n @property({ type: Object })\n get data() {\n return this._data;\n }\n\n set data(val) {\n this._data = val;\n this.requestUpdate();\n }\n\n @property({ type: Number })\n _tailIndex = SCROLL_STEP;\n\n @property({ type: Boolean })\n multiple;\n\n @property({ type: Number })\n indent = 20; // default 20px;\n\n @property({ type: Boolean })\n hideRoot;\n\n value: Array = [];\n\n expand = true;\n\n handleLabelClick;\n\n render() {\n return html`\n \n \n ${this.data.children &&\n this.data.children\n .slice(0, Math.min(this._tailIndex, this.data.children.length))\n .map(child => this._renderChild(child, this.indent * 2))}\n \n \n `;\n }\n\n _loadMore() {\n const scroller = this.renderRoot.querySelector('.tree');\n if (scroller && scroller.scrollTop > scroller.scrollHeight / 2) {\n if (this._tailIndex < this.data.children.length) {\n this._tailIndex = Math.min(\n this._tailIndex + SCROLL_STEP,\n this.data.children.length,\n );\n }\n }\n }\n\n _renderChild(child, paddingLeft) {\n if (child && child.children && child.children.length > 0) {\n return html`\n
\n this.value.indexOf(c.value) >= 0)}\"\n .paddingLeft=\"${paddingLeft}\"\n >\n ${child.children.map(grandChild =>\n this._renderChild(grandChild, paddingLeft + this.indent),\n )}\n \n
\n `;\n }\n\n return html`\n \n `;\n }\n\n handleItemSelected(event) {\n // console.log(event);\n const currentValue = event.detail.value;\n event.stopPropagation();\n const index = this.value && this.value.indexOf(currentValue);\n if (this.multiple) {\n if (index !== -1) {\n this.value = [\n ...this.value.slice(0, index),\n ...this.value.slice(index + 1),\n ];\n } else {\n this.value = [...this.value, currentValue];\n }\n } else {\n const { length } = this.value;\n if (length === 0 || index === -1) {\n this.value = [currentValue];\n } else {\n this.value = [];\n }\n }\n console.log('selected items:', this.value);\n this.requestUpdate();\n\n this.dispatchEvent(\n new CustomEvent('itemSelected', {\n detail: { value: this.value },\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n // TODO deprecated\n reset() {\n this.value = [];\n this.requestUpdate();\n }\n}\n","import { css, html, LitElement } from 'lit';\n// eslint-disable-next-line import/extensions\nimport { customElement, property } from 'lit/decorators.js';\nimport '../ki-popup/ki-popup';\n\n// TODO collapse, popup with change log.\n@customElement('ki-wcp-version-tag')\nexport default class KiWcpVersionTag extends LitElement {\n // language=CSS\n static styles = css`\n :host {\n display: block;\n box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14),\n 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -2px rgba(0, 0, 0, 0.2);\n position: absolute;\n }\n\n .version {\n display: block;\n padding: 10px 20px;\n cursor: pointer;\n color: var(--theme-color);\n }\n `;\n\n @property({ type: Object })\n pkg: any = {};\n\n @property({ type: Boolean })\n showPopup: boolean = false;\n\n _packageJsonPath = './package.json';\n\n @property({ type: String })\n get packageJsonPath(): string {\n return this._packageJsonPath;\n }\n\n set packageJsonPath(val: string) {\n this._packageJsonPath = val;\n if (val) {\n fetch(val)\n .then(res => res.json())\n .then(pkg => {\n this.pkg = pkg;\n });\n }\n }\n\n constructor() {\n super();\n this.packageJsonPath = './package.json';\n }\n\n render() {\n // language=html\n return html`\n {\n this.showPopup = !this.showPopup;\n }}\"\n >\n ${this.pkg.name}#${this.pkg.version} at ${this.pkg.versionDate}\n \n place holder for change log\n `;\n }\n}\n","/* eslint-disable wc/no-constructor-attributes */\n/* eslint-disable wc/no-self-class */\nimport { LitElement, html, css } from 'lit';\n// eslint-disable-next-line import/extensions\nimport { customElement, property } from 'lit/decorators.js';\nimport '../ki-icon/ki-icon';\nimport { last } from 'lodash-es/array';\nimport { some } from 'lodash-es/collection';\nimport { addSwipeEvents } from '../../common/util';\n// import style from './ki-modal.css';\n\n@customElement('ki-modal')\nexport default class KiModal extends LitElement {\n // language=CSS\n static styles = css`\n :host {\n background-color: #fefefe;\n width: 100%;\n height: auto;\n max-height: 100%;\n border-top: 1px solid lightgray;\n position: fixed;\n z-index: 100;\n overflow: auto;\n left: 0;\n bottom: -100%;\n transition: bottom 0.5s;\n }\n\n :host(.visible) {\n z-index: 101;\n bottom: 0;\n max-height: 100%;\n filter: drop-shadow(1px 4px 7px grey);\n }\n\n :host(.visible.full-screen) {\n bottom: 0;\n }\n :host(.draggable) .ki-modal-drag {\n display: block;\n }\n\n .ki-modal-drag {\n display: none;\n width: 20%;\n height: 3px;\n margin: 5px auto 0px;\n border-radius: 32px;\n border: 1px solid transparent;\n background: gray;\n }\n\n .ki-modal-header {\n display: flex;\n flex-direction: row;\n padding: 0px 10px;\n font-size: 1.2em;\n line-height: 1.8em;\n }\n .ki-modal-header.bottom-border {\n border-bottom: 1px solid lightgray;\n }\n .ki-modal-header.bottom-border .ki-modal-label {\n height: 1.8em;\n }\n .ki-modal-label {\n flex: 1;\n display: inline-block;\n }\n .close {\n fill: gray;\n line-height: 1.8em;\n }\n .close.hide {\n display: none;\n }\n .close:hover {\n cursor: pointer;\n }\n .close:focus {\n cursor: pointer;\n }\n `;\n\n static history: Array = []; // use to track order of popup modals\n\n @property({ type: Boolean })\n visible = false;\n\n @property({ type: Boolean })\n draggable = false;\n\n @property({ type: Boolean })\n closeable = false;\n\n @property({ type: Boolean })\n closeOnSwipeDown = false;\n\n __fullscreen = false; // __fullscreen is one state of draggable\n\n @property({ type: Boolean })\n trackable = false;\n\n @property({ type: String })\n label: string = '';\n\n @property({ type: Number })\n minContentHeight: number | undefined;\n\n _originTop: number = 0;\n\n render() {\n this.classList.toggle('visible', this.visible);\n this.classList.toggle('full-screen', this.__fullscreen);\n this.classList.toggle('draggable', this.draggable);\n return html`\n
\n
\n \n ${this.label}\n \n \n \n \n `;\n }\n\n handleTouchMove(e) {\n if (this.draggable) {\n const touch = e.targetTouches[0];\n const step = this._originTop - touch.clientY;\n this.__fullscreen = step > 0;\n this.requestUpdate();\n this._originTop = touch.clientY;\n }\n }\n\n handleTouchStart(e) {\n if (this.draggable) {\n const touch = e.targetTouches[0];\n this._originTop = touch.clientY;\n }\n }\n\n handleClick(e) {\n e.stopPropagation();\n if (this.draggable) {\n this.__fullscreen = !this.__fullscreen;\n this.dispatchEvent(\n new CustomEvent('togglefullscreen', {\n bubbles: true,\n composed: true,\n detail: {\n fullscreen: this.__fullscreen,\n },\n }),\n );\n this.requestUpdate();\n }\n }\n\n connectedCallback() {\n // @ts-expect-error\n if (super.connectedCallback) super.connectedCallback();\n // this.draggable && this._addEventListener();\n // @ts-expect-error\n addSwipeEvents(this.renderRoot, (...args) => this.handleGesure(...args));\n }\n\n updated() {\n if (this.visible && this.trackable) {\n !some(KiModal.history, this) && KiModal.history.push(this);\n }\n if (this.__fullscreen || !this.visible) {\n this.__height = null;\n } else {\n this.__height = this.minContentHeight;\n }\n }\n\n set __height(val) {\n if (val) {\n this.style.bottom = `calc(${val}px - 100%)`;\n } else {\n // @ts-expect-error\n this.style.bottom = null;\n }\n }\n\n show() {\n this.visible = true;\n if (this.trackable) {\n const previousEl = last(KiModal.history);\n if (previousEl) {\n previousEl.visible = false;\n }\n } else {\n // make sure only one modal popup, case sernario: legends&layers vs station-list\n /* eslint-disable no-return-assign */\n KiModal.history.forEach(modal => (modal.visible = false));\n /* eslint-enable no-return-assign */\n }\n }\n\n close() {\n this.visible = false;\n if (this.trackable) {\n KiModal.history.pop(); // popup last element\n const previous = last(KiModal.history);\n if (previous) {\n previous.visible = true;\n }\n } else {\n /* eslint-disable no-return-assign */\n KiModal.history.forEach(modal => (modal.visible = true));\n /* eslint-enable no-return-assign */\n }\n }\n\n handleGesure(touchstartX, touchendX, touchstartY, touchendY) {\n // Swiped left\n if (touchendX < touchstartX + 50) {\n console.log('Swiped left');\n }\n // Swiped right\n if (touchendX > touchstartX + 50) {\n console.log('Swiped right');\n }\n // Swiped up\n if (touchendY < touchstartY + 50) {\n console.log('Swiped up');\n }\n // Swiped down\n if (touchendY > touchstartY + 50) {\n this.closeOnSwipeDown && this.close();\n }\n // tap\n if (touchendY === touchstartY + 50) {\n console.log('Tap');\n }\n }\n}\n","import { css, html, LitElement } from 'lit';\n// eslint-disable-next-line import/extensions\nimport { customElement, property } from 'lit/decorators.js';\n\n@customElement('ki-toast')\nexport default class KiToast extends LitElement {\n // language=CSS\n static styles = css`\n :host {\n display: flex;\n flex-direction: row;\n position: fixed;\n background-color: white;\n color: black;\n fill: black;\n border: 1px solid var(--ki-toast-color, black);\n min-height: 48px;\n max-width: 400px;\n /*max-width: 80%; !*for mobile*!*/\n min-width: 288px;\n padding: 12px 0;\n box-sizing: border-box;\n border-radius: 2px;\n font-size: 14px;\n cursor: default;\n opacity: 0;\n transform: translateX(200px);\n transition: transform linear 0.3s, opacity linear 0.3s;\n z-index: 10;\n }\n\n :host(.visible) {\n opacity: 1;\n transform: translateX(0px);\n }\n\n /*right-bottom*/\n :host {\n position: fixed;\n right: 20px;\n bottom: 20px;\n }\n\n .icon-container {\n color: var(--ki-toast-color, black);\n flex: 0 0 70px;\n text-align: center;\n font-size: 24px;\n margin: auto;\n }\n\n .content-container {\n flex: 1;\n }\n\n .action-container {\n flex: 0 40px;\n text-align: center;\n }\n\n .close-btn {\n fill: lightgray;\n cursor: pointer;\n }\n .close-btn:hover {\n fill: gray;\n }\n\n :host(.success) {\n --ki-toast-color: var(--ki-success-color, #1eaf1e);\n }\n\n :host(.error) {\n --ki-toast-color: var(--ki-error-color, #d30535);\n }\n\n :host(.warning) {\n --ki-toast-color: var(--ki-warning-color, #fe7402);\n }\n\n :host(.info) {\n --ki-toast-color: var(--ki-info-color, #3f86cd);\n }\n `;\n\n @property({ type: String })\n content: string | undefined;\n\n @property({ type: String })\n type: string = '';\n\n visible: boolean = false;\n\n static types = {\n success: {\n className: 'success',\n icon: 'ki ki-check',\n },\n error: {\n className: 'error',\n icon: 'ki ki-exclamation',\n },\n warning: {\n className: 'warning',\n icon: 'ki ki-question',\n },\n info: {\n className: 'info',\n icon: 'ki ki-info',\n },\n };\n\n static showToast({ type = 'success', content = 'msg content' } = {}) {\n const toast = document.createElement('ki-toast');\n // @ts-expect-error\n toast.type = type;\n // @ts-expect-error\n toast.content = content;\n document.body.appendChild(toast);\n setTimeout(() => {\n // @ts-expect-error\n toast.open();\n });\n }\n\n renderMsg() {\n return this.content ? html` ${this.content} ` : html` `;\n }\n\n render() {\n // @ts-expect-error\n this.renderRoot.host.classList.toggle('visible', this.visible);\n // @ts-expect-error\n this.renderRoot.host.classList.remove(Object.keys(KiToast.types));\n\n const type = KiToast.types[this.type];\n if (type) {\n // @ts-expect-error\n this.renderRoot.host.classList.add(KiToast.types[this.type].className);\n }\n\n // language=html\n return html`\n
\n \n
\n
${this.renderMsg()}
\n
\n \n
\n `;\n }\n\n open({ duration = 200000 } = {}) {\n this.visible = true;\n this.requestUpdate();\n setTimeout(() => {\n this.close();\n }, duration);\n }\n\n close() {\n this.visible = false;\n this.requestUpdate();\n\n // or maybe use msg stack , reuse the element.\n // wait after animation\n // setTimeout(() => {\n // this.remove();\n // }, 1000)\n }\n}\n\n// TODO stack for multi toast\n","import { css, html, LitElement } from 'lit';\n// eslint-disable-next-line import/extensions\nimport { customElement } from 'lit/decorators.js';\nimport nls from '../../locales/index';\nimport Mix from '../../common/Mix';\nimport { i18nMixin } from '../../decorators/i18n';\n\n// @ts-expect-error\n@customElement('ki-accordion')\nexport default class KiAccordion extends Mix(LitElement, [i18nMixin, { nls }]) {\n // language=CSS\n static styles = css`\n :host {\n display: block;\n }\n `;\n\n constructor() {\n super();\n this.content = 'default content';\n }\n\n static get properties() {\n return {\n multiple: { type: Boolean },\n };\n }\n\n render() {\n // language=html\n return html``;\n }\n}\n","import { css, html } from 'lit';\n\n/**\n * Uses canvas.measureText to compute and return the width of the given text of given font in pixels.\n *\n * @param {String} text The text to be rendered.\n * @param {String} font The css font descriptor that text is to be rendered with (e.g. \"bold 14px verdana\").\n *\n * @see https://stackoverflow.com/questions/118241/calculate-text-width-with-javascript/21015393#21015393\n */\nconst canvas = document.createElement('canvas');\n\nfunction getTextWidth(text, font) {\n const context = canvas.getContext('2d');\n if (context) {\n context.font = font;\n const metrics = context.measureText(text);\n return metrics.width;\n }\n return 1;\n}\n\nfunction getCssStyle(element, prop) {\n return window.getComputedStyle(element, null).getPropertyValue(prop);\n}\n\nfunction getCanvasFont(el = document.body) {\n const fontWeight = getCssStyle(el, 'font-weight') || 'normal';\n const fontSize = getCssStyle(el, 'font-size') || '16px';\n const fontFamily = getCssStyle(el, 'font-family') || 'Times New Roman';\n\n return `${fontWeight} ${fontSize} ${fontFamily}`;\n}\n\nexport default function ColumnResizing(clz) {\n return class extends clz {\n // language=CSS\n static styles = css`\n .header .resize {\n overflow: visible;\n }\n\n .row:hover {\n --resizer-display: flex;\n }\n\n .header .resize .resizer {\n top: 0px;\n width: 10px;\n height: 100%;\n cursor: e-resize;\n position: absolute;\n z-index: 2;\n justify-content: center;\n display: var(--resizer-display, none);\n align-items: center;\n user-select: none;\n background: inherit; /* Hides any text behind this element */\n }\n\n .header .resize .resizer.left {\n left: -10px;\n }\n\n /* This allows column headers to be centered with text-align set in the css property of the column in layercfg */\n .resize .cell {\n width: 100% !important;\n display: block;\n }\n\n /* allows columns added to the table after a resizing to have more than 0 width */\n /* also allows for custom css to set a relative width for columns instead of a fixed width */\n .cell {\n width: 100%;\n }\n `;\n\n renderStarted = true;\n\n _columnSizeStyle: any = {};\n\n minimumWidth: number = 120;\n\n // the padding on cells in table rows, used when auto resizing to content width (double click)\n cellPadding: number = 20;\n\n get renderingColumns() {\n return super.renderingColumns?.map(c => {\n const col = { ...c };\n const style = this._columnSizeStyle[col.field];\n if (style) {\n Object.keys(style).forEach(key => {\n if (!col.css) col.css = '';\n // Try not to mangle custom css too much\n // This made more sense to me than overriding renderCell, you are free to disagree\n // This also stop you from having css conflicting with the custom css\n if (col.css.indexOf(`${key}:`) >= 0) {\n const regex = new RegExp(`${key}:[^;]+;?`, `i`);\n col.css = col.css.replace(regex, `${key}: ${style[key]};`);\n } else {\n col.css += `${key}: ${style[key]};`;\n }\n });\n }\n return col;\n });\n }\n\n findPreviousColumn(field) {\n let previousColumn = this.renderingColumns[0];\n this.renderingColumns.forEach((column, index) => {\n if (column.field === field && index > 0) {\n previousColumn = this.renderingColumns[index - 1];\n }\n });\n return previousColumn;\n }\n\n // Sort columns by current width\n // middle column after sorting becomes 100% standard (100% because then if someone hides all other columns the table will still be full)\n // apply width calculation to all columns based on width after resize\n\n // Used to calculate column width percentages later, call this before changing the width of a column\n setStandardWidth() {\n const allColumns: Array = Array.from(\n this.shadowRoot.querySelectorAll('.resize.cell'),\n );\n allColumns.sort((a, b) => a.offsetWidth - b.offsetWidth);\n this.standardWidth =\n allColumns[Math.trunc(allColumns.length / 2)].offsetWidth;\n }\n\n initResize(event, col) {\n this.removeListeners();\n this.previousColumn = this.findPreviousColumn(col.field);\n this.previousColumnElement = this.shadowRoot.getElementById(\n `resize-col-${this.previousColumn.field}`,\n );\n this.postColumn = col;\n this.postColumnElement = this.shadowRoot.getElementById(\n `resize-col-${col.field}`,\n );\n\n this.previousColumnElement.style.left = `${this.previousColumnElement.offsetLeft}px`;\n this.previousColumnWidth = this.previousColumnElement.offsetWidth;\n this.postColumnWidth = this.postColumnElement.offsetWidth;\n this.startMouseX = event.clientX;\n\n this.setStandardWidth();\n\n this.resizeEvent = e => this.Resize(e);\n this.stopResizeEvent = () => this.stopResize();\n window.addEventListener('mousemove', this.resizeEvent, false);\n window.addEventListener('mouseup', this.stopResizeEvent, false);\n }\n\n Resize(e) {\n const newPrevColumnWidth =\n this.previousColumnWidth - (this.startMouseX - e.clientX);\n const newPostColumnWidth =\n this.postColumnWidth - (e.clientX - this.startMouseX);\n if (\n newPrevColumnWidth < this.minimumWidth ||\n newPostColumnWidth < this.minimumWidth\n ) {\n return;\n }\n this.previousColumnElement.style.width = `${newPrevColumnWidth}px`;\n this.postColumnElement.style.width = `${newPostColumnWidth}px`;\n }\n\n removeListeners() {\n window.removeEventListener('mousemove', this.resizeEvent, false);\n window.removeEventListener('mouseup', this.stopResizeEvent, false);\n }\n\n // This requires you set the width of the column before calling it\n resizeColumns() {\n const allColumns: Array = Array.from(\n this.shadowRoot.querySelectorAll('.resize.cell'),\n );\n allColumns.forEach(column => {\n const field = column.getAttribute('field');\n if (field) {\n this._columnSizeStyle[field] = {\n width: `${(column.offsetWidth / this.standardWidth) * 100}%`,\n };\n }\n });\n }\n\n stopResize() {\n this.previousColumnElement.style.left = `unset`;\n this.removeListeners();\n this.resizeColumns();\n\n this.requestUpdate();\n }\n\n // This can't work for cells with custom content (not field value text)\n fitContent(field) {\n const existingCell = this.shadowRoot.querySelector(\n `.scroller .cell.col-${field}`,\n );\n const font = getCanvasFont(existingCell);\n\n let maxWidth = 0;\n\n this.data.forEach(item => {\n if (Object.prototype.hasOwnProperty.call(item, field)) {\n const width = getTextWidth(item[field], font) || 1;\n if (width > maxWidth) {\n maxWidth = width;\n }\n }\n });\n maxWidth = Math.ceil(maxWidth);\n\n if (maxWidth < 0) {\n return;\n }\n\n if (maxWidth < this.minimumWidth) {\n maxWidth = this.minimumWidth;\n }\n\n this.setStandardWidth();\n const headerElement = this.shadowRoot.getElementById(\n `resize-col-${field}`,\n );\n headerElement.style.width = `${maxWidth + this.cellPadding + 1}px`;\n this.resizeColumns();\n\n this.requestUpdate();\n }\n\n // I'm putting the resizer in the following column and aligning it to the left because I can't know which column is the last\n // The last column needs to not have a resizer on the right.\n // This way I can remove it from the first one and the last appears not to have one.\n _renderHeaderCell(col) {\n if (col.field === '__options') {\n this.renderStarted = true;\n return super._renderHeaderCell(col);\n }\n const resizer = this.renderStarted\n ? ''\n : html` {\n this.initResize(e, col);\n }}\n @dblclick=${() =>\n this.fitContent(this.findPreviousColumn(col.field).field)}\n >\n ║\n `;\n const fisrt = this.renderStarted ? 'firstResizable' : ``;\n this.renderStarted = false;\n return html`\n \n ${super._renderHeaderCell(col)} ${resizer}\n \n `;\n }\n };\n}\n","import deCommon from './de/common.json';\nimport enCommon from './en/common.json';\nimport frCommon from './fr/common.json';\nimport isCommon from './is/common.json';\nimport zhCommon from './zh/common.json';\n\nexport default {\n de: {\n common: deCommon,\n },\n en: {\n common: enCommon,\n },\n fr: {\n common: frCommon,\n },\n is: {\n common: isCommon,\n },\n zh: {\n common: zhCommon,\n },\n};\n","/* eslint-disable max-classes-per-file */\nimport { customElement } from 'lit/decorators.js';\nimport { i18nMixin } from '@kisters/wcp-base/decorators';\nimport {\n BaseTable,\n Export,\n ColumnFormatter,\n LazyRendering,\n ColumnHider,\n} from '@kisters/wcp-base/components';\nimport { Mix } from '@kisters/wcp-base/common';\nimport { css } from 'lit';\nimport nls from '../../locales/index';\n\n@customElement('ki-wwp-ts-table')\nexport default class KiWwpTsTable extends Mix(\n BaseTable,\n ColumnHider,\n LazyRendering,\n ColumnFormatter,\n Export,\n [i18nMixin, { nls }],\n) {\n static get styles() {\n return [\n super.styles,\n css`\n .col-value {\n text-align: right;\n }\n\n .header-cell-hider,\n .col-__options {\n display: none;\n }\n\n .header div.row {\n border-bottom: 1px solid darkgray;\n }\n\n .header .header-content {\n padding: 10px 5px;\n max-width: 140px;\n hyphens: auto;\n word-break: break-word;\n text-align: left;\n white-space: normal;\n border-bottom: none;\n }\n .table {\n font-size: 14px;\n }\n .table .header div.row {\n border-bottom: 2px solid darkgray;\n }\n .table .body .cell {\n padding: 5px 5px;\n }\n .row {\n cursor: default;\n }\n `,\n ];\n }\n}\n","const hclocales = {\n es: {\n loading: 'Cargando...',\n months: [\n 'Enero',\n 'Febrero',\n 'Marzo',\n 'Abril',\n 'Mayo',\n 'Junio',\n 'Julio',\n 'Agosto',\n 'Septiembre',\n 'Octubre',\n 'Noviembre',\n 'Diciembre',\n ],\n weekdays: [\n 'Domingo',\n 'Lunes',\n 'Martes',\n 'Miércoles',\n 'Jueves',\n 'Viernes',\n 'Sábado',\n ],\n shortMonths: [\n 'Ene',\n 'Feb',\n 'Mar',\n 'Abr',\n 'May',\n 'Jun',\n 'Jul',\n 'Ago',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dic',\n ],\n exportButtonTitle: 'Exportar',\n printButtonTitle: 'Importar',\n rangeSelectorFrom: 'Desde',\n rangeSelectorTo: 'Hasta',\n rangeSelectorZoom: 'Período',\n downloadPNG: 'Descargar imagen PNG',\n downloadJPEG: 'Descargar imagen JPEG',\n downloadPDF: 'Descargar imagen PDF',\n downloadSVG: 'Descargar imagen SVG',\n printChart: 'Imprimir',\n resetZoom: 'Reiniciar zoom',\n resetZoomTitle: 'Reiniciar zoom',\n thousandsSep: ',',\n decimalPoint: '.',\n },\n pt: {\n loading: 'Aguarde...',\n months: [\n 'Janeiro',\n 'Fevereiro',\n 'Março',\n 'Abril',\n 'Maio',\n 'Junho',\n 'Julho',\n 'Agosto',\n 'Setembro',\n 'Outubro',\n 'Novembro',\n 'Dezembro',\n ],\n weekdays: [\n 'Domingo',\n 'Segunda',\n 'Terça',\n 'Quarta',\n 'Quinta',\n 'Sexta',\n 'Sábado',\n ],\n shortMonths: [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Abr',\n 'Maio',\n 'Jun',\n 'Jul',\n 'Ago',\n 'Set',\n 'Out',\n 'Nov',\n 'Dez',\n ],\n exportButtonTitle: 'Exportar',\n printButtonTitle: 'Imprimir',\n rangeSelectorFrom: 'De',\n rangeSelectorTo: 'Até',\n rangeSelectorZoom: 'Periodo',\n downloadPNG: 'Download imagem PNG',\n downloadJPEG: 'Download imagem JPEG',\n downloadPDF: 'Download documento PDF',\n downloadSVG: 'Download imagem SVG',\n // resetZoom: \"Reset\",\n // resetZoomTitle: \"Reset,\n // thousandsSep: \".\",\n // decimalPoint: ','\n },\n ru: {\n loading: 'Загрузка...',\n months: [\n 'Январь',\n 'Февраль',\n 'Март',\n 'Апрель',\n 'Май',\n 'Июнь',\n 'Июль',\n 'Август',\n 'Сентябрь',\n 'Октябрь',\n 'Ноябрь',\n 'Декабрь',\n ],\n weekdays: [\n 'Воскресенье',\n 'Понедельник',\n 'Вторник',\n 'Среда',\n 'Четверг',\n 'Пятница',\n 'Суббота',\n ],\n shortMonths: [\n 'Янв',\n 'Фев',\n 'Март',\n 'Апр',\n 'Май',\n 'Июнь',\n 'Июль',\n 'Авг',\n 'Сент',\n 'Окт',\n 'Нояб',\n 'Дек',\n ],\n exportButtonTitle: 'Экспорт',\n printButtonTitle: 'Печать',\n rangeSelectorFrom: 'С',\n rangeSelectorTo: 'По',\n rangeSelectorZoom: 'Период',\n downloadPNG: 'Скачать PNG',\n downloadJPEG: 'Скачать JPEG',\n downloadPDF: 'Скачать PDF',\n downloadSVG: 'Скачать SVG',\n printChart: 'Напечатать график',\n },\n de: {\n decimalPoint: ',',\n thousandsSep: '.',\n loading: 'Daten werden geladen...',\n months: [\n 'Januar',\n 'Februar',\n 'März',\n 'April',\n 'Mai',\n 'Juni',\n 'Juli',\n 'August',\n 'September',\n 'Oktober',\n 'November',\n 'Dezember',\n ],\n weekdays: [\n 'Sonntag',\n 'Montag',\n 'Dienstag',\n 'Mittwoch',\n 'Donnerstag',\n 'Freitag',\n 'Samstag',\n ],\n shortMonths: [\n 'Jan',\n 'Feb',\n 'Mär',\n 'Apr',\n 'Mai',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Okt',\n 'Nov',\n 'Dez',\n ],\n exportButtonTitle: 'Exportieren',\n printButtonTitle: 'Drucken',\n rangeSelectorFrom: 'Von',\n rangeSelectorTo: 'Bis',\n rangeSelectorZoom: 'Zeitraum',\n downloadPNG: 'Download als PNG-Bild',\n downloadJPEG: 'Download als JPEG-Bild',\n downloadPDF: 'Download als PDF-Dokument',\n downloadSVG: 'Download als SVG-Bild',\n resetZoom: 'Zoom zurücksetzen',\n resetZoomTitle: 'Zoom zurücksetzen',\n noData: 'keine Daten vorhanden für den ausgewählten Zeitbereich',\n },\n nl: {\n loading: 'Wordt geladen...',\n months: [\n 'januari',\n 'februari',\n 'maart',\n 'april',\n 'mei',\n 'juni',\n 'juli',\n 'augustus',\n 'september',\n 'oktober',\n 'november',\n 'december',\n ],\n weekdays: [\n 'zondag',\n 'maandag',\n 'dinsdag',\n 'woensdag',\n 'donderdag',\n 'vrijdag',\n 'zaterdag',\n ],\n shortMonths: [\n 'jan',\n 'feb',\n 'maa',\n 'apr',\n 'mei',\n 'jun',\n 'jul',\n 'aug',\n 'sep',\n 'okt',\n 'nov',\n 'dec',\n ],\n exportButtonTitle: 'Exporteren',\n printButtonTitle: 'Printen',\n rangeSelectorFrom: 'Vanaf',\n rangeSelectorTo: 'Tot',\n rangeSelectorZoom: 'Periode',\n downloadPNG: 'Download als PNG',\n downloadJPEG: 'Download als JPEG',\n downloadPDF: 'Download als PDF',\n downloadSVG: 'Download als SVG',\n resetZoom: 'Reset',\n resetZoomTitle: 'Reset',\n thousandsSep: '.',\n decimalPoint: ',',\n exitFullscreen: 'Vollbild Modues',\n viewFullscreen: 'Vollbild Modus verlassen',\n },\n tr: {\n loading: 'Yükleniyor...',\n months: [\n 'Ocak',\n 'Şubat',\n 'Mart',\n 'Nisan',\n 'Mayıs',\n 'Haziran',\n 'Temmuz',\n 'Ağustos',\n 'Eylül',\n 'Ekim',\n 'Kasım',\n 'Aralık',\n ],\n weekdays: [\n 'Pazar',\n 'Pazartesi',\n 'Salı',\n 'Çarşamba',\n 'Perşembe',\n 'Cuma',\n 'Cumartesi',\n ],\n shortMonths: [\n 'Ocak',\n 'Şubat',\n 'Mart',\n 'Nisan',\n 'Mayıs',\n 'Haziran',\n 'Temmuz',\n 'Ağustos',\n 'Eylül',\n 'Ekim',\n 'Kasım',\n 'Aralık',\n ],\n exportButtonTitle: 'Dışarı Aktar',\n printButtonTitle: 'Yazdır',\n rangeSelectorFrom: 'Başlangış',\n rangeSelectorTo: 'Bitiş',\n rangeSelectorZoom: 'Periyot',\n downloadPNG: 'PNG Olarak indir',\n downloadJPEG: 'JPEG olarak indir',\n downloadPDF: 'PDF olarak indir',\n downloadSVG: 'SVG olarak indir',\n resetZoom: ['Yakınlaşmayı Sıfırla'],\n resetZoomTitle: ['Yakınlaşmayı Sıfırla'],\n printChart: ['Yazdır'],\n thousandsSep: '.',\n decimalPoint: ',',\n },\n it: {\n loading: 'Sto caricando...',\n months: [\n 'Gennaio',\n 'Febbraio',\n 'Marzo',\n 'Aprile',\n 'Maggio',\n 'Giugno',\n 'Luglio',\n 'Agosto',\n 'Settembre',\n 'Ottobre',\n 'Novembre',\n 'Dicembre',\n ],\n weekdays: [\n 'Domenica',\n 'Lunedì',\n 'Martedì',\n 'Mercoledì',\n 'Venerdì',\n 'Sabato',\n 'Domenica',\n ],\n shortMonths: [\n 'Gen',\n 'Feb',\n 'Mar',\n 'Apr',\n 'Mag',\n 'Giu',\n 'Lugl',\n 'Ago',\n 'Set',\n 'Ott',\n 'Nov',\n 'Dic',\n ],\n exportButtonTitle: 'Esporta',\n printButtonTitle: 'Importa',\n rangeSelectorFrom: 'Da',\n rangeSelectorTo: 'A',\n rangeSelectorZoom: 'Periodo',\n downloadPNG: 'Download immagine PNG',\n downloadJPEG: 'Download immagine JPEG',\n downloadPDF: 'Download documento PDF',\n downloadSVG: 'Download immagine SVG',\n printChart: 'Stampa grafico',\n thousandsSep: '.',\n decimalPoint: ',',\n },\n fr: {\n loading: 'Chargement...',\n months: [\n 'janvier',\n 'février',\n 'mars',\n 'avril',\n 'mai',\n 'juin',\n 'juillet',\n 'août',\n 'septembre',\n 'octobre',\n 'novembre',\n 'décembre',\n ],\n weekdays: [\n 'dimanche',\n 'lundi',\n 'mardi',\n 'mercredi',\n 'jeudi',\n 'vendredi',\n 'samedi',\n ],\n shortMonths: [\n 'jan',\n 'fév',\n 'mar',\n 'avr',\n 'mai',\n 'juin',\n 'juil',\n 'aoû',\n 'sep',\n 'oct',\n 'nov',\n 'déc',\n ],\n exportButtonTitle: 'Exporter',\n printButtonTitle: 'Imprimer',\n printChart: 'Imprimer',\n rangeSelectorFrom: 'Du',\n rangeSelectorTo: 'au',\n rangeSelectorZoom: 'Période',\n downloadPNG: 'Télécharger en PNG',\n downloadJPEG: 'Télécharger en JPEG',\n downloadPDF: 'Télécharger en PDF',\n downloadSVG: 'Télécharger en SVG',\n resetZoom: 'Réinitialiser le zoom',\n resetZoomTitle: 'Réinitialiser le zoom',\n thousandsSep: ' ',\n decimalPoint: ',',\n contextButtonTitle: 'Menu',\n exitFullscreen: \"Quitter l'affichage plein écran\",\n viewFullscreen: 'Affichage plein écran',\n noData: 'Aucune donnée disponible pour la plage horaire sélectionnée',\n },\n 'fr-BE': {\n loading: 'Chargement...',\n months: [\n 'janvier',\n 'février',\n 'mars',\n 'avril',\n 'mai',\n 'juin',\n 'juillet',\n 'août',\n 'septembre',\n 'octobre',\n 'novembre',\n 'décembre',\n ],\n weekdays: [\n 'dimanche',\n 'lundi',\n 'mardi',\n 'mercredi',\n 'jeudi',\n 'vendredi',\n 'samedi',\n ],\n shortMonths: [\n 'jan',\n 'fév',\n 'mar',\n 'avr',\n 'mai',\n 'juin',\n 'juil',\n 'aoû',\n 'sep',\n 'oct',\n 'nov',\n 'déc',\n ],\n exportButtonTitle: 'Exporter',\n printButtonTitle: 'Imprimer',\n printChart: 'Imprimer',\n rangeSelectorFrom: 'Du',\n rangeSelectorTo: 'au',\n rangeSelectorZoom: 'Période',\n downloadPNG: 'Télécharger en PNG',\n downloadJPEG: 'Télécharger en JPEG',\n downloadPDF: 'Télécharger en PDF',\n downloadSVG: 'Télécharger en SVG',\n resetZoom: 'Réinitialiser le zoom',\n resetZoomTitle: 'Réinitialiser le zoom',\n thousandsSep: ' ',\n decimalPoint: ',',\n contextButtonTitle: 'Menu',\n exitFullscreen: \"Quitter l'affichage plein écran\",\n viewFullscreen: 'Affichage plein écran',\n },\n pl: {\n loading: 'Ładowanie...',\n months: [\n 'Styczeń',\n 'Luty',\n 'Marzec',\n 'Kwiecień',\n 'Maj',\n 'Czerwiec',\n 'Lipiec',\n 'Sierpień',\n 'Wrzesień',\n 'Październik',\n 'Listopad',\n 'Grudzień',\n ],\n weekdays: [\n 'Niedziela',\n 'Poniedziałek',\n 'Wtorek',\n 'Środa',\n 'Czwartek',\n 'Piątek',\n 'Sobota',\n ],\n shortMonths: [\n 'Sty',\n 'Lut',\n 'Mar',\n 'Kwi',\n 'Maj',\n 'Cze',\n 'Lip',\n 'Sie',\n 'Wrz',\n 'Paź',\n 'Lis',\n 'Gru',\n ],\n exportButtonTitle: 'Export',\n printButtonTitle: 'Drukowanie',\n rangeSelectorFrom: 'Od',\n rangeSelectorTo: 'Do',\n rangeSelectorZoom: 'Przybliżenie',\n downloadPNG: 'Pobierz obraz PNG',\n downloadJPEG: 'Pobierz obraz JPEG',\n downloadPDF: 'Pobierz dokument PDF',\n downloadSVG: 'Pobierz obraz SVG',\n thousandsSep: ' ',\n decimalPoint: ',',\n // resetZoom: \"Reset\",\n // resetZoomTitle: \"Reset,\n },\n zh: {\n loading: '加载中...',\n months: [\n '1月',\n '2月',\n '3月',\n '4月',\n '5月',\n '6月',\n '7月',\n '8月',\n '9月',\n '10月',\n '11月',\n '12月',\n ],\n shortMonths: [\n '1月',\n '2月',\n '3月',\n '4月',\n '5月',\n '6月',\n '7月',\n '8月',\n '9月',\n '10月',\n '11月',\n '12月',\n ],\n weekdays: [\n '星期日',\n '星期一',\n '星期二',\n '星期三',\n '星期四',\n '星期五',\n '星期六',\n ],\n exportButtonTitle: '导出',\n printButtonTitle: '打印',\n rangeSelectorFrom: '从',\n rangeSelectorTo: '到',\n rangeSelectorZoom: '缩放',\n downloadPNG: '下载PNG格式',\n downloadJPEG: '下载JPEG格式',\n downloadPDF: '下载PDF格式',\n downloadSVG: '下载SVG格式',\n },\n};\nexport default hclocales;\n","import { css } from 'lit';\n\nexport default css`\n :host {\n height: 100%;\n width: 100%;\n display: flex;\n flex-direction: column;\n }\n\n ui5-button {\n cursor: pointer;\n margin: 0 0 5px 10px;\n }\n\n .fav-btn {\n font-size: 1.3em;\n }\n\n #yearselector {\n width: 150px;\n min-width: 150px;\n }\n\n #nav-node {\n padding: 5px 10px 0 5px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n border-bottom: 1px solid gray;\n overflow: auto;\n }\n\n #nav-node .label {\n font-size: 1.5em;\n }\n\n ki-wwp-switcher-bottom {\n border-radius: 0;\n box-shadow: none;\n align-self: normal;\n }\n\n :host(.sm-screen) ki-wwp-switcher-bottom {\n margin-left: 35pt;\n }\n\n :host(.sm-screen) .clipboard-btn {\n display: none;\n }\n\n .actions {\n display: flex;\n }\n\n ki-icon-btn {\n margin: 5px;\n box-shadow: none;\n }\n\n :host(.sm-screen) ki-icon-btn {\n margin: 2px;\n }\n\n .hideButton {\n display: none;\n }\n\n #chart-node {\n box-sizing: border-box;\n padding-top: 10px;\n display: table-cell;\n position: absolute;\n width: 100%;\n height: 100%;\n }\n\n .contentnode {\n display: flex;\n flex: 1;\n }\n\n #table-wrapper {\n position: relative;\n overflow: auto;\n flex: 0 0 320px;\n }\n\n #nav-node.hidden {\n display: none;\n }\n\n .hidden {\n display: none;\n }\n\n #table-wrapper.hidden {\n position: relative;\n overflow: auto;\n flex: 0 0 0;\n }\n\n ki-wwp-ts-table {\n position: absolute;\n height: 100%;\n width: 100%;\n }\n\n #chart-wrapper {\n position: relative;\n flex: 1;\n }\n\n :host(.sm-screen) .label {\n display: none;\n }\n\n :host(.sm-screen) #table-wrapper {\n flex: 1 1 100%;\n background: white;\n }\n\n :host(.sm-screen) #table-clipboard-btn {\n display: none;\n }\n :host(.sm-screen) #table-wrapper.hidden {\n position: relative;\n overflow: auto;\n flex: 0 0 0;\n }\n\n .highcharts-legend-checkbox {\n transform: translate(-30px, -1px);\n }\n\n :host(.sm-screen) .highcharts-legend-checkbox {\n transform: translateX(-5px);\n }\n\n ui5-select {\n background: #eee;\n position: absolute;\n left: 50px;\n top: 10px;\n border: 0;\n z-index: 1;\n }\n\n ki-popup#download-popup {\n width: 250px;\n }\n`;\n","import dayjs from '@kisters/wcp-base/common/dayjsext';\nimport { filter, first } from 'lodash-es';\n\nexport class GraphHelper {\n public static transformForecast(\n data: Array<[string, number]>,\n ): Array<[string, number]> {\n return data.map(i => [dayjs(i[0]).valueOf(), i[1]]);\n }\n\n /** Check if ranges contains at least one matching element */\n public static rangeObjectContains(files: Object, filename: string): boolean {\n if (files[filename] || (Object.keys(files), k => k.includes(filename)))\n return true;\n return false;\n }\n\n /** Return a matching range element\n * @remark Always the returns the first matching element\n * Clarifiy the filename as much as possible, e.g. \"level/year.json\" instead of \"year.json\" to avoid unwanted matches\n */\n public static getFile(files: Object, rangeConfig: Object): Array {\n let result =\n files[rangeConfig.data] ||\n files[\n first(filter(Object.keys(files), k => k.includes(rangeConfig.data)))\n ];\n\n /** Filter for provided setting in rangeConfig */\n if (rangeConfig.ts_shortname) {\n result = filter(result, ts =>\n rangeConfig.ts_shortname.includes(ts.ts_shortname),\n );\n }\n return result;\n }\n}\n","/* eslint-disable no-unused-expressions */\n/* eslint-disable no-nested-ternary */\n/* eslint-disable max-classes-per-file */\nimport { html, LitElement } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport {\n last,\n merge,\n find,\n head,\n groupBy,\n flatten,\n orderBy,\n compact,\n first,\n} from 'lodash-es';\nimport {\n SM,\n ViewPort,\n responsiveMixin,\n i18nMixin,\n queryParamMixin,\n localStorageMixin,\n} from '@kisters/wcp-base/decorators';\nimport './ki-wwp-switcher-bottom';\nimport {\n LoaderMixin,\n template,\n copyTextToClipboard,\n Mix,\n} from '@kisters/wcp-base/common';\n\nimport { getRouteOptionsAndParams } from '@kisters/wcp-base/components';\nimport dayjs from '@kisters/wcp-base/common/dayjsext';\nimport './ki-wwp-ts-table';\nimport hclocales from '@kisters/wcp-water/common/highcharts-locales';\nimport Highcharts from 'highcharts/highstock';\nimport nodata from 'highcharts/modules/no-data-to-display';\nimport exporting from 'highcharts/modules/exporting';\nimport boost from 'highcharts/modules/boost';\nimport more from 'highcharts/highcharts-more';\nimport offlineexporting from 'highcharts/modules/offline-exporting';\n\nimport serieslabel from 'highcharts/modules/series-label';\nimport { getCsvDelimiter } from '@kisters/wcp-base/components/ki-app/services/ki-app-config-service';\nimport { getCurrentApi } from '../../api/API';\nimport nls from '../../locales/index';\n\nimport style from './ki-wwp-graph.css';\n\nimport '@ui5/webcomponents/dist/Button';\nimport '@ui5/webcomponents/dist/Select';\nimport '@ui5/webcomponents/dist/Option';\nimport { GraphHelper } from './GraphHelper';\n\n@customElement('ki-wwp-graph')\nexport default class KiWwpGraph extends Mix(\n LitElement,\n LoaderMixin,\n [i18nMixin, { nls }],\n [\n localStorageMixin,\n { targetProperty: '__favouriteStationIds', typeParam: Array },\n ],\n [\n queryParamMixin,\n {\n targetProperty: '_selectedPeriod',\n selector: 'period',\n defaultValue: '',\n },\n ],\n responsiveMixin,\n) {\n // language=CSS\n\n @property({ type: Object })\n station;\n\n @property({ type: Object })\n options = {};\n\n @property({ type: Boolean })\n miniGraph = false;\n\n /** Reduce loading time for popups; only fetch specified ranges\n * @remark Usually just 'week.json'\n */\n @property({ type: Boolean })\n onlyFetchSpecifiedRanges = false;\n\n @property({ type: Boolean })\n favButton = false;\n\n @property({ type: String })\n stationId;\n\n forcePeriodRange = true;\n\n maincolor = '#0056a0';\n\n qCodeExclude = [];\n\n showUntilEndOfDay = true;\n\n imageShareAutoOpen = false;\n\n zoomType = 'x';\n\n boost = true;\n\n __selectedPeriod;\n\n hydroYearStart = '01-01';\n\n hydroYearEnd = '01-01';\n\n // eslint-disable-next-line class-methods-use-this\n get localStorageId() {\n return `wwp-favorites-ids`;\n }\n\n ___favouriteStationIds = [];\n\n get __favouriteStationIds() {\n return this.___favouriteStationIds;\n }\n\n set __favouriteStationIds(value) {\n this.___favouriteStationIds = value;\n this.requestUpdate();\n }\n\n get _selectedPeriod() {\n return this.__selectedPeriod;\n }\n\n set _selectedPeriod(value) {\n this.__selectedPeriod = value;\n this.requestUpdate();\n }\n\n static get styles() {\n return [style];\n }\n\n constructor() {\n super();\n serieslabel(Highcharts);\n exporting(Highcharts);\n offlineexporting(Highcharts);\n nodata(Highcharts);\n more(Highcharts);\n boost(Highcharts);\n }\n\n connectedCallback() {\n if (super.connectedCallback) super.connectedCallback();\n let resize;\n window.addEventListener('resize', () => {\n window.clearTimeout(resize);\n resize = setTimeout(() => {\n if (this.chart) {\n this.chart.update({\n legend: this.legendOptions,\n credits: this.creditOptions,\n });\n this.chart.reflow();\n }\n }, 220);\n });\n }\n\n firstUpdated() {\n if (!this.miniGraph) {\n this.refreshInterval = setInterval(() => {\n this.fetchData();\n }, 300000);\n }\n Object.assign(this, this.options);\n if (\n this.renderRoot.host.classList.contains('sm-screen') ||\n this.miniGraph\n ) {\n this.tableOpen = false;\n }\n this.api = getCurrentApi();\n this.numberFormatter = new Intl.NumberFormat(\n this.i18n.language,\n this.numberFormat || {},\n );\n if (this.api) {\n this.fetchData();\n }\n }\n\n async onAfterEnter(location) {\n const params = getRouteOptionsAndParams(location, [\n 'layerName',\n 'stationId',\n 'stationLabel',\n ]);\n Object.assign(this, JSON.parse(JSON.stringify(params.options)));\n this.layerName = params.layerName;\n this.apppath = location.route;\n this.stationId = params.stationId;\n }\n\n isFavorite() {\n return this.__favouriteStationIds.indexOf(this.station?.station_id) >= 0;\n }\n\n _toggleFavourite() {\n if (this.__favouriteStationIds.indexOf(this.station.station_id) === -1) {\n this.__favouriteStationIds = [\n ...this.__favouriteStationIds,\n this.station.station_id,\n ];\n } else {\n this.__favouriteStationIds = this.__favouriteStationIds.filter(\n id => id !== this.station.station_id,\n );\n }\n }\n\n createChart() {\n if (!this.chart) {\n if (hclocales[this.i18n.language.substring(0, 2)]) {\n Highcharts.setOptions({\n lang: hclocales[this.i18n.language.substring(0, 2)],\n });\n }\n this.chart = new Highcharts.StockChart(\n this.renderRoot.querySelector('#chart-node'),\n this.defaultOptions(),\n this.chartCreated.bind(this),\n );\n }\n }\n\n chartCreated(chart) {\n const e = new CustomEvent('load', {\n detail: chart,\n });\n this.dispatchEvent(e);\n }\n\n updated(changedProperties) {\n if (changedProperties.get('stationId')) {\n // console.log(this.stationId, changedProperties.get('stationId'))\n this.station = null;\n this.fetchData();\n }\n if (this.chart) {\n // console.log(\"resize bfeore\", this.renderRoot.querySelector('#contentnode').clientHeight, this.chart.chartHeight)\n this.chart.reflow();\n // console.log(\"resize\", this.renderRoot.querySelector('#contentnode').clientHeight, this.chart.chartHeight)\n }\n }\n\n disconnectedCallback() {\n if (super.disconnectedCallback) super.disconnectedCallback();\n if (this.chart) {\n this.chart.destroy();\n this.chart = null;\n }\n clearInterval(this.refreshInterval);\n }\n\n // eslint-disable-next-line class-methods-use-this\n get legendOptions() {\n let legendOptions = {\n layout: 'horizontal',\n align: 'left',\n verticalAlign: 'bottom',\n alignColumns: false,\n symbolPadding: 5,\n itemMarginBottom: 10,\n itemDistance: ViewPort.size === SM ? 15 : 35,\n width: '90%',\n symbolRadius: 0,\n squareSymbol: false,\n enabled: !this.miniGraph,\n };\n\n if (ViewPort.size === SM && ViewPort.landscape) {\n legendOptions = {\n layout: 'vertical',\n align: 'left',\n verticalAlign: 'top',\n alignColumns: false,\n itemMarginBottom: 5,\n enabled: !this.miniGraph,\n symbolPadding: 5,\n itemDistance: ViewPort.size === SM ? 15 : 35,\n width: ViewPort.size === SM ? '20%' : '80%',\n symbolRadius: 0,\n squareSymbol: false,\n };\n }\n return legendOptions;\n }\n\n get creditOptions() {\n const credits = this.credits ? { ...this.credits } : { enabled: false };\n if (credits?.text) {\n credits.text = template(credits.text, this.station);\n }\n if (this.credits && ViewPort.size === SM) {\n credits.position = credits.positionMobile || credits.position;\n }\n credits.enabled = !this.miniGraph;\n return credits;\n }\n\n // eslint-disable-next-line class-methods-use-this\n getTableValuesFromTemplate(cfg, data, minDate, maxDate = Infinity) {\n const tsIndex = {};\n cfg.tableTemplate.forEach(tsshortname => {\n const ts = find(data, { ts_shortname: tsshortname });\n const tsdata = groupBy(ts.data, head);\n tsIndex[ts.ts_shortname] = tsdata;\n });\n\n const firstts = find(data, { ts_shortname: cfg.tableTemplate[0] });\n const tsdata = [];\n firstts.data.forEach(dp => {\n const ts = dp[0];\n const tsms = new Date(ts).getTime();\n if (tsms >= minDate && tsms <= maxDate) {\n const row = [tsms];\n cfg.tableTemplate.forEach(item => {\n const tempts = tsIndex[item];\n const val = tempts[ts] ? tempts[ts][0][1] : null;\n row.push(val);\n });\n tsdata.push(row);\n }\n });\n return { data: tsdata };\n }\n\n // eslint-disable-next-line consistent-return\n _getSeries(cfg, data, minDate, maxDate = Infinity) {\n const tzoffset =\n (dayjs().utcOffset() - dayjs().tz().utcOffset()) * 60 * 1000;\n const dCommentIndex = data[0].columns\n ? data[0]?.columns.split(',').indexOf('Data Comment')\n : null;\n if (cfg.timeseries) {\n const tslist: any[] = [];\n cfg.timeseries.forEach((tscfg, i) => {\n if (tscfg.ts_shortname_min && tscfg.ts_shortname_max) {\n tscfg.type = 'range';\n const minTs = find(data, {\n ts_shortname: tscfg.ts_shortname_min,\n });\n const maxTs = find(data, {\n ts_shortname: tscfg.ts_shortname_max,\n });\n const minIdx = groupBy(minTs.data, head);\n const tsdata = [];\n\n maxTs.data.forEach(dp => {\n const ts = dp[0];\n const tsms = new Date(ts).getTime() - tzoffset;\n const max = dp[1];\n const min = minIdx[ts] ? minIdx[ts][0][1] : null;\n if (tsms >= minDate && tsms <= maxDate) {\n tsdata.push([tsms, min, max]);\n }\n });\n\n tslist.push(\n merge(\n {\n data: tsdata,\n id: `data_${i}`,\n name: this.parameter_label,\n color: 'rgba(0, 86, 160, 0.3)',\n type: 'arearange',\n fillOpacity: 0.3,\n xAxis: 'mainXAxis',\n\n // gapSize: 2,\n selected: true,\n marker: {\n enabled: false,\n },\n tooltip: {\n valueSuffix: ` ${\n minTs.ts_unitsymbol !== '---' ? minTs.ts_unitsymbol : ''\n }`,\n xDateFormat: '%d.%m.%Y',\n },\n },\n tscfg.options,\n ),\n );\n } else {\n /** Compare available data with requested data in ranges-option; e.g. CWC with multiple parameters */\n const ts = tscfg.stationparameter_name\n ? find(data, {\n ts_shortname: tscfg.ts_shortname,\n stationparameter_name: tscfg.stationparameter_name,\n })\n : find(data, { ts_shortname: tscfg.ts_shortname });\n if (ts) {\n if (tscfg.minDate) {\n minDate =\n dayjs().tz().subtract(dayjs.duration(tscfg.minDate)).valueOf() -\n tzoffset;\n }\n tslist.push(\n merge(\n {\n columns: ts.columns,\n data: this._formatGraphData(ts.data, minDate, maxDate, ts),\n id: `data_${i}`,\n name: this.parameter_label,\n color: this.maincolor,\n xAxis: 'mainXAxis',\n selected: true,\n marker: {\n radius: 1,\n enabled: true,\n },\n tooltip: {\n pointFormatter() {\n return `${this.series.name}: ${this.y} ${\n ts.ts_unitsymbol !== '---' ? ts.ts_unitsymbol : ''\n }
${\n dCommentIndex && ts.data[this.index][dCommentIndex]\n ? `Data Comment: ${\n ts.data[this.index][dCommentIndex]\n }`\n : ''\n }`;\n },\n },\n },\n tscfg.options,\n ),\n );\n }\n }\n });\n return tslist;\n }\n if (data[0]) {\n const options = cfg.options || {};\n const ts = data[0];\n return [\n merge(\n {\n data: this._formatGraphData(ts.data, minDate, maxDate, ts),\n id: 'data',\n color: '#0056a0',\n name: this.parameter_label,\n xAxis: 'mainXAxis',\n selected: true,\n marker: {\n radius: 1,\n enabled: true,\n },\n tooltip: {\n pointFormatter() {\n return `${this.series.name}: ${this.y} ${\n ts.ts_unitsymbol !== '---' ? ts.ts_unitsymbol : ''\n }
${\n dCommentIndex && ts.data[this.index][dCommentIndex]\n ? `Data Comment: ${\n ts.data[this.index][dCommentIndex]\n }`\n : ''\n }`;\n },\n xDateFormat: '%d.%m.%Y %H:%M',\n },\n },\n options,\n ),\n ];\n }\n }\n\n // eslint-disable-next-line class-methods-use-this\n _formatGraphData(\n data = [],\n minDate = -Infinity,\n maxDate = Infinity,\n timeseries = {},\n ) {\n const tsData = [];\n // const start = dayjs().valueOf()\n const tzoffset =\n (dayjs().utcOffset() - dayjs().tz().utcOffset()) * 60 * 1000;\n\n const qCodeIndex = timeseries.columns\n ? timeseries?.columns.split(',').indexOf('Quality Code')\n : null;\n\n data.forEach(dp => {\n const ts = new Date(dp[0]).getTime() - tzoffset;\n if (this.qCodeExclude.length) {\n if (\n ts >= minDate &&\n ts <= maxDate &&\n !this.qCodeExclude.includes(dp[qCodeIndex])\n ) {\n tsData.push([ts, ...dp.slice(1)]);\n }\n } else if (ts >= minDate && ts <= maxDate) {\n tsData.push([ts, ...dp.slice(1)]);\n }\n });\n // console.log(\"duration\", tsData.length, dayjs().valueOf()-start)\n return tsData;\n // return data.map(dp => [new Date(dp[0]).getTime(), dp[1]]);\n }\n\n _formatNumber(val) {\n return val === undefined || val === null || val === '' || Number.isNaN(val)\n ? ''\n : this.numberFormatter.format(val);\n }\n\n drawForecastDeterministic() {\n const ts_list = this.files[this.forecast];\n\n if (!ts_list) {\n return;\n }\n\n const { data } = last(ts_list);\n const firstDataPoint = data[0];\n if (!firstDataPoint) {\n return;\n }\n const t0 = dayjs(firstDataPoint[0]).tz().valueOf(); // this.station[this.progTs] ? dayjs(this.station[this.progTs]+\"Z\").valueOf() : dayjs().valueOf();\n\n const xAxis = this.chart.get('mainXAxis');\n xAxis.addPlotLine({\n id: 'pz',\n zIndex: 2,\n color: 'gray',\n width: 2,\n value: t0,\n label: {\n // rotation:270,\n x: 5,\n y: this.miniGraph ? 80 : 120,\n verticalAlign: 'top',\n text: 't0',\n },\n });\n\n /** Add Vorhersage */\n this.chart.addSeries({\n name: this.i18n.t('FORECAST'),\n selected: true,\n color: 'green',\n id: 'data_forecast',\n data: GraphHelper.transformForecast(data),\n events: {\n hide: () => {\n xAxis.removePlotLine('pz');\n },\n show: () => {\n xAxis.addPlotLine({\n id: 'pz',\n zIndex: 2,\n color: 'gray',\n width: 2,\n value: t0,\n label: {\n // rotation:270,\n x: 5,\n y: this.miniGraph ? 80 : 120,\n verticalAlign: 'top',\n text: 't0',\n },\n });\n },\n },\n });\n }\n\n drawForecast() {\n const ts = this.files[this.forecast];\n if (!ts) {\n return;\n }\n\n this.chart.get('mainXAxis').setExtremes(null, null, false, false);\n\n const { data, columns } = ts[0];\n const colArray = columns.split(',');\n const firstDataPoint = data[0];\n if (!firstDataPoint) {\n return;\n }\n const progTs = dayjs(firstDataPoint[0]).tz().valueOf(); // this.station[this.progTs] ? dayjs(this.station[this.progTs]+\"Z\").valueOf() : dayjs().valueOf();\n\n const trendAb = this.station[this.trendAb]\n ? Number(this.station[this.trendAb])\n : null;\n const progDur = this.station[this.progDuration]\n ? Number(this.station[this.progDuration])\n : null;\n\n const prognoseBisTs = dayjs(progTs).tz().add(progDur, 'minutes').valueOf();\n const trendAbTs = dayjs(progTs).tz().add(trendAb, 'hours').valueOf();\n\n const prognoseBranches = this.station.web_prognose_branches;\n const indexMin = colArray.indexOf('Min');\n const indexMax = colArray.indexOf('Max');\n const indexMittel = colArray.indexOf('Mittel');\n const indexTUMin = colArray.indexOf('TUMin');\n const indexTUMax = colArray.indexOf('TUMax');\n const indexTUMittel = colArray.indexOf('TUMittel');\n\n const dataTrend = [];\n const dataTrendVB = [];\n const dataProg = [];\n const dataProgVB = [];\n\n let actualMin;\n let actualMax;\n let actualMean;\n\n if (prognoseBranches === 'Alle-Ext' || prognoseBranches === 'Min/Max-Ext') {\n actualMin = indexMin;\n actualMax = indexMax;\n } else if (\n prognoseBranches === 'Alle-Int' ||\n prognoseBranches === 'Min/Max-Int'\n ) {\n actualMin = indexTUMin;\n actualMax = indexTUMax;\n }\n if (\n prognoseBranches === 'Alle-Ext' ||\n prognoseBranches === 'Prognose-Ext'\n ) {\n actualMean = indexMittel;\n } else if (\n prognoseBranches === 'Alle-Int' ||\n prognoseBranches === 'Prognose-Int'\n ) {\n actualMean = indexTUMittel;\n }\n\n data.forEach(row => {\n const tsValue = dayjs(row[0]).tz().valueOf();\n if (tsValue < prognoseBisTs) {\n if (trendAb && tsValue >= trendAbTs) {\n dataTrend.push([tsValue, row[actualMean]]);\n dataTrendVB.push([tsValue, row[actualMin], row[actualMax]]);\n } else {\n dataProg.push([tsValue, row[actualMean]]);\n dataProgVB.push([tsValue, row[actualMin], row[actualMax]]);\n }\n }\n });\n\n const xAxis = this.chart.get('mainXAxis');\n if (this.station.web_prognose_publish !== 'no') {\n xAxis.addPlotLine({\n id: 'pz',\n zIndex: 2,\n color: 'gray',\n width: 2,\n value: progTs,\n label: {\n // rotation:270,\n x: 5,\n y: this.miniGraph ? 80 : 120,\n verticalAlign: 'top',\n text: this.miniGraph ? `VHS` : 'Prognosezeitpunkt',\n },\n });\n }\n\n if (\n trendAb &&\n this.station.web_prognose_trendanzeige !== 'no' &&\n this.station.web_prognose_publish !== 'no'\n ) {\n xAxis.addPlotLine({\n id: 'trend',\n zIndex: 2,\n color: 'gray',\n width: 2,\n value: trendAbTs,\n label: {\n // rotation:270,\n x: 5,\n y: this.miniGraph ? 80 : 120,\n verticalAlign: 'top',\n text: this.miniGraph ? `Trend` : `ab >${trendAb}h = Trend`,\n },\n });\n this.chart.addSeries(\n {\n name: 'Trend',\n selected: true,\n color: 'green',\n id: 'data_trend',\n dashStyle: 'dot',\n data: dataTrend,\n events: {\n hide: () => {\n xAxis.removePlotLine('trend');\n },\n show: () => {\n xAxis.addPlotLine({\n id: 'trend',\n zIndex: 2,\n color: 'gray',\n width: 2,\n value: trendAbTs,\n label: {\n // rotation:270,\n x: 5,\n y: this.miniGraph ? 80 : 120,\n verticalAlign: 'top',\n text: this.miniGraph ? `Trend` : `ab >${trendAb}h = Trend`,\n },\n });\n },\n },\n },\n false,\n );\n this.chart.addSeries(\n {\n name: 'Vertrauensbereich Trend',\n type: 'arearange',\n fillOpacity: 0.5,\n linkedTo: 'data_trend',\n id: 'data_trendarea',\n showInLegend: false,\n selected: true,\n dashStyle: 'dot',\n fillColor: 'rgba(124,181,236,0.3)',\n data: dataTrendVB,\n },\n false,\n );\n }\n\n if (this.station.web_prognose_publish !== 'no') {\n this.chart.addSeries(\n {\n name: 'Vertrauensbereich',\n type: 'arearange',\n fillOpacity: 0.5,\n id: 'data_forecastarea',\n selected: true,\n color: 'rgba(124,181,236,1)',\n showInLegend: false,\n fillColor: 'rgba(124,181,236,0.5)',\n data: dataProgVB,\n linkedTo: 'data_forecast',\n },\n false,\n );\n\n this.chart.addSeries({\n name: 'Vorhersage',\n selected: true,\n color: 'green',\n id: 'data_forecast',\n data: dataProg,\n events: {\n hide: () => {\n xAxis.removePlotLine('pz');\n },\n show: () => {\n xAxis.addPlotLine({\n id: 'pz',\n zIndex: 2,\n color: 'gray',\n width: 2,\n value: progTs,\n label: {\n // rotation:270,\n x: 5,\n y: this.miniGraph ? 80 : 120,\n verticalAlign: 'top',\n text: this.miniGraph ? `VHS` : 'Prognosezeitpunkt',\n },\n });\n },\n },\n });\n }\n }\n\n _getTimestampFromDuration(dur) {\n const tzoffset =\n (dayjs().utcOffset() - dayjs().tz().utcOffset()) * 60 * 1000;\n if (!dur) {\n return dayjs().tz().valueOf() - tzoffset;\n }\n if (dur === 'PoR') {\n return dayjs(this.coverage.min).tz().valueOf() - tzoffset;\n }\n if (dur.charAt(0) === '+') {\n return dayjs().add(dayjs.duration(dur)).valueOf() - tzoffset;\n }\n if (dur === 'PT24H') {\n return dayjs().tz().subtract(dayjs.duration(dur)).valueOf() - tzoffset;\n }\n const until = this.showUntilEndOfDay\n ? dayjs().endOf('day').tz()\n : dayjs().tz();\n return until.subtract(dayjs.duration(dur)).valueOf() - tzoffset;\n }\n\n drawSeries(period, min, max) {\n const cfg = find(this.ranges, { value: period }) || this.ranges[0];\n if (cfg.yearSelector) {\n this.renderRoot\n .querySelector('#yearselector')\n .classList.remove('hideButton');\n } else {\n this.renderRoot\n .querySelector('#yearselector')\n .classList.add('hideButton');\n }\n if (\n this.station.BODY_RESPONSIBLE &&\n this.station.BODY_RESPONSIBLE === 'WSV' // TODO: Remove LANUV?! artifact\n ) {\n this.renderRoot\n .querySelector('#yearselector')\n .classList.add('hideButton');\n }\n this.chart.series\n .filter(ser => ser.userOptions.id && ser.userOptions.id.includes('data'))\n .forEach(ser => ser.remove(false));\n const minDate = min || this._getTimestampFromDuration(period);\n let maxDate = max || this._getTimestampFromDuration();\n const xAxis = this.chart.get('mainXAxis');\n this.chart.zoomOut();\n if (cfg.yAxisLabel) {\n this.yAxisLabel = cfg.yAxisLabel;\n this.shadowRoot.getElementById('dataTable').columns = this.tablecolumns;\n }\n cfg.timeseries &&\n cfg.timeseries.forEach(ts => {\n if (ts.maxDate) {\n maxDate = this._getTimestampFromDuration(ts.maxDate);\n }\n });\n\n if (cfg.plotLines) {\n cfg.plotLines.forEach(pl => {\n const _pl = { ...pl };\n _pl.id = `dynamic_${pl.id}`;\n _pl.value = this._getTimestampFromDuration(pl.value);\n xAxis.removePlotBandOrLine(_pl.id);\n if (pl.filter) {\n cfg.timeseries.some(item => item.ts_shortname === pl.filter) &&\n xAxis.addPlotLine(_pl);\n } else {\n xAxis.addPlotLine(_pl);\n }\n });\n } else {\n xAxis.plotLinesAndBands.forEach(\n pl => pl.id.includes('dynamic_') && xAxis.removePlotLine(pl.id),\n );\n }\n\n xAxis.removePlotLine('pz');\n xAxis.removePlotLine('trend');\n if(period === 'PT24H'){\n xAxis.setExtremes(minDate, dayjs(maxDate), false, false)\n }else if(this.forcePeriodRange){\n xAxis.setExtremes(\n minDate,\n this.showUntilEndOfDay ? dayjs(maxDate).endOf('day') : dayjs(maxDate),\n false,\n false,\n );\n }\n\n /** Legacy variant with confidence interval + trend\n * Keep the \"typo\" in config this for backward compatibility\n * @TODO Choose forecast visualization in config file; e.g. type: \"deterministic\", \"conf_interval\"\n */\n if (cfg.showforcast) {\n this.drawForecast();\n }\n\n /** Deterministic: Single line with t0 */\n if (cfg.showForecastDeterministic) {\n this.drawForecastDeterministic();\n }\n\n this.chart.get('data') && this.chart.get('data').remove(false);\n\n if (GraphHelper.rangeObjectContains(this.files, cfg.data)) {\n const series = this._getSeries(\n cfg,\n GraphHelper.getFile(this.files, cfg),\n minDate,\n maxDate,\n );\n this.tableColumns = cfg.tableColumns ?? this.tableColumns;\n const tabledata = cfg.tableTemplate\n ? this.getTableValuesFromTemplate(\n cfg,\n this.files[cfg.data],\n minDate,\n maxDate,\n )\n : Array.isArray(series)\n ? series[0]\n : series;\n if (tabledata) {\n // Sort and format\n // console.time('start');\n this.orderedTableData = orderBy(tabledata.data, [0], ['desc']).map(\n item => {\n const vals = [];\n item.forEach((_val, i) => {\n if (i > 0 && typeof _val === 'number') {\n vals.push(this._formatNumber(_val));\n }\n });\n // Use separate col for each value\n if (this.separateCol) {\n return {\n timestamp: dayjs(item[0]).format(cfg.dateformat || 'L LT'),\n value: vals, // Return array\n };\n }\n // Show in common value col with \" - \"\n if (vals.length === 3) {\n vals[1] = `${vals[1]}`;\n }\n const val = vals.join(' - ');\n\n if (tabledata.columns) {\n const retObj = {\n timestamp: dayjs(item[0]).format(cfg.dateformat || 'L LT'),\n value: val, // Return single value\n };\n tabledata.columns.split(',').forEach((col, i) => {\n if (i > 1 && item[i] !== undefined) {\n retObj[col] = item[i];\n }\n });\n return retObj;\n }\n\n return {\n timestamp: dayjs(item[0]).format(cfg.dateformat || 'L LT'),\n value: val, // Return single value\n };\n },\n );\n // console.timeEnd('start');\n this.shadowRoot.getElementById('dataTable').data =\n this.orderedTableData;\n }\n series.forEach((ts, i) => {\n this.chart.addSeries(ts, i === series.length - 1);\n });\n }\n }\n\n getRangeOptions() {\n return this.ranges || [];\n }\n\n showDescription() {\n this.descriptionVisible = !this.descriptionVisible;\n this.chart.series.forEach(ser => {\n if (ser.options.description) {\n ser.update(\n {\n name:\n this.descriptionVisible && ser.options.description\n ? `${ser.options.shortName}: ${ser.options.description}`\n : ser.options.shortName,\n },\n false,\n );\n }\n });\n this.chart.redraw();\n }\n\n getImageShare() {\n return this.api\n ? `${window.location.origin}${window.location.pathname.replace(\n /[^/]*$/,\n '',\n )}graph.html?stationId=${\n this.station.station_id\n }&component=ki-wwp-graph-ext&key=${encodeURIComponent(\n this.apppath?.path,\n )}&period=${this._selectedPeriod}`\n : '';\n }\n\n render() {\n // language=html\n const title =\n this.graphTitle && this.station\n ? template(this.graphTitle, this.station)\n : '';\n return html`
\n
${title}
\n {\n if (this.chart) {\n this.drawSeries(e.detail.value);\n }\n this._selectedPeriod = e.detail.value;\n }}\"\n .options=\"${this.getRangeOptions()}\"\n class=\"buttons\"\n .value=${this._selectedPeriod}\n >\n \n
\n {\n this.renderRoot.querySelector(\n '#embeddedgraph',\n ).value = `\"`;\n const popup = this.renderRoot.querySelector('#download-popup');\n if (this.imageShareAutoOpen) {\n window.open(this.getImageShare(), '_blank');\n }\n popup.visible ? popup.hide({}) : popup.show({});\n }}\n >\n \n \n ${this.i18n.t('embedGraph')} {\n this.renderRoot.querySelector('#download-popup').hide({});\n }}\"\n style=\"margin:0;height: 20px;width: 20px;line-height: 20px;\"\n icon=\"ki ki-times\"\n >\n
\n \n \n {\n window.open(this.getImageShare(), '_blank');\n }}\"\n title=\"${this.i18n.t('previewTitle')}\"\n >${this.i18n.t('preview')}\n {\n copyTextToClipboard(\n this.renderRoot.querySelector('#embeddedgraph').value,\n );\n }}\"\n title=\"${this.i18n.t('copyToClipboard')}\"\n >${this.i18n.t('copy')}\n \n \n \n \n {\n copyTextToClipboard(\n this.renderRoot\n .querySelector('#dataTable')\n .toCSV(getCsvDelimiter())\n .replace(/(<([^>]+)>)/gi, ''),\n );\n }}\n >\n \n
\n \n
\n
\n \n ${this._years.map(\n year =>\n html`${year.label}`,\n )}\n \n
\n
\n
\n \n \n
\n
`;\n }\n\n get _yAxisLabel() {\n return template(this.yAxisLabel, this.station);\n }\n\n get _years() {\n if (this.coverage) {\n let max = dayjs(this.coverage.max).tz().get('year');\n const min = dayjs(this.coverage.min).tz().get('year');\n if (this.hydroYearStart !== '01-01') {\n max -= 1;\n }\n const years = [{ value: 'YTD', label: this.i18n.t('currentYear') }];\n while (max >= min) {\n years.push({ value: max, label: max.toString() });\n max -= 1;\n }\n return years;\n }\n return [{ value: 'YTD', label: this.i18n.t('currentYear') }];\n }\n\n get tablecolumns() {\n return (\n this.tableColumns ?? [\n {\n field: 'timestamp',\n label: this.timestampLabel || this.i18n.t('timestamp'),\n sortable: true,\n hideAble: false,\n },\n {\n field: 'value',\n label: this._yAxisLabel || this.i18n.t('waterlevelcm'),\n sortable: false,\n format: 'html',\n css: 'text-align:right;padding-right:10px;',\n },\n ]\n );\n }\n\n _handleYearChange(e) {\n const { value } = e.target.selectedOption;\n const prevYear = value;\n const nextYear = (parseInt(value, 10) + 1).toString();\n\n const min =\n value && value !== 'YTD'\n ? dayjs(`${prevYear}${this.hydroYearStart}`, `YYYYMM-DD`).tz()\n : dayjs().tz().startOf('year');\n\n const max =\n value && value !== 'YTD'\n ? dayjs(`${nextYear}${this.hydroYearEnd}`, `YYYYMM-DD`).tz()\n : dayjs().tz();\n this.drawSeries('P1Y', min.valueOf(), max.valueOf());\n }\n\n showTable() {\n this.renderRoot.querySelector('#table-wrapper').classList.toggle('hidden');\n this.renderRoot\n .querySelector('#table-clipboard-btn')\n .classList.toggle('hideButton');\n this.tableOpen = !this.tableOpen;\n this.chart && this.chart.reflow();\n }\n\n downloadGraph() {\n this.chart.update(\n {\n exporting: {\n chartOptions: {\n title: {\n text: this.graphTitle\n ? template(this.graphTitle, this.station)\n : '',\n },\n subtitle: {\n text: `${this.i18n.t('station_no')}: ${\n this.station.station_no\n } | ${this.i18n.t('request_at')} ${dayjs().format('LLLL')}
\n ${dayjs(this.chart.xAxis[0].min + 10000)\n .tz()\n .format('L')} - ${dayjs(this.chart.xAxis[0].max + 10000)\n .tz()\n .format('L')}`,\n },\n },\n filename: `${this.parameter_label}_${this.station.station_name}_${\n this.station.station_no\n }_${dayjs().tz().format('YYYYMMDD')}`,\n fallbackToExportServer: false,\n buttons: {\n contextButton: {\n enabled: false,\n },\n },\n sourceWidth: 1600,\n sourceHeight: 800,\n scale: 1,\n },\n },\n false,\n );\n this.chart.exportChartLocal();\n }\n\n async fetchData() {\n this.chart?.destroy();\n this.chart = null;\n const _files = {};\n this.station = this.station || (await this.api.getStation(this.stationId));\n const dataToFetch = [];\n\n this.station.timeseries.forEach(ts => {\n /**\n * Check if parameters match\n * In case of popup is requesting data: Check if @param href is specified in range */\n if (\n ts.station_parameter === this.station_parameter &&\n this.ranges.some(range => ts.href.includes(range.data))\n ) {\n dataToFetch.push(ts.href);\n }\n if (this.additionalTsFiles) {\n this.additionalTsFiles.forEach(addts => {\n if (ts.href.includes(addts)) {\n dataToFetch.push(ts.href);\n }\n });\n }\n if (this?.alarms?.file) {\n this.alarms.file.forEach(addts => {\n if (ts.href.includes(addts)) {\n dataToFetch.push(ts.href);\n }\n });\n }\n });\n\n await Promise.all(\n dataToFetch.map(async href => {\n const _path = href.split('/').reverse();\n const _id = `${_path[1]}/${_path[0]}`;\n _files[_id] = await this.api.getTsData(href);\n }),\n );\n\n this.files = _files;\n let selected = find(this.ranges, { selected: true });\n const yearcfg = find(this.ranges, range =>\n ['P1Y', 'PoR'].includes(range.value),\n );\n if (yearcfg && GraphHelper.rangeObjectContains(this.files, yearcfg.data)) {\n const tsdata = first(GraphHelper.getFile(this.files, yearcfg))?.data;\n if (tsdata && tsdata[0]) {\n this.coverage = {\n min: first(tsdata)[0],\n max: last(tsdata)[0],\n };\n } else console.warn('Coverage not set!');\n }\n selected = this._selectedPeriod || selected.value || this.ranges[0].value;\n if (!find(this.ranges, { value: selected })) {\n selected = this.ranges[0].value;\n }\n this._selectedPeriod = selected;\n this._setMaxValue(selected);\n if (this.station) {\n this.createChart();\n this.ranges.forEach(range => {\n if (range.timeseries) {\n if (this.additionalTsFiles) {\n this.additionalTsFiles.forEach(addf => {\n if (this.files[range.data]) {\n if (this.files[addf]) {\n this.files[range.data] = this.files[range.data].concat(\n this.files[addf],\n );\n }\n }\n });\n }\n\n /** Filter unwanted timeseries */\n range.timeseries = range.timeseries.filter(\n ts =>\n !ts.ts_shortname ||\n GraphHelper.getFile(this.files, range).some(\n tsfile => ts.ts_shortname === tsfile.ts_shortname,\n ),\n );\n }\n });\n\n this.drawSeries(selected);\n this.requestUpdate();\n }\n return this.files;\n }\n\n _setMaxValue(period) {\n const cfg = find(this.ranges, { value: period });\n if (GraphHelper.rangeObjectContains(this.files, cfg.data)) {\n let currentMax = -Infinity;\n let currentMin = Infinity;\n GraphHelper.getFile(this.files, cfg).forEach(ts => {\n ts.data.forEach(dp => {\n currentMax = Math.max(dp[1], currentMax);\n currentMin = Math.min(dp[1], currentMin);\n });\n });\n this.maxInitalValue = currentMax;\n this.minInitalValue = currentMin;\n }\n }\n\n // eslint-disable-next-line class-methods-use-this\n _getLastValue(data) {\n return data && data[0] ? last(last(data)) : null;\n }\n\n // eslint-disable-next-line class-methods-use-this\n _splitEventValues(data) {\n const artificalTs = [];\n data.forEach(ts => {\n ts.data.forEach(dp =>\n artificalTs.push({\n ts_name: dayjs(dp[0]).tz().format('L'),\n data: [dp],\n }),\n );\n });\n return artificalTs;\n }\n\n _getThreshold(ts, i, key, ploptions) {\n return merge(\n merge(\n {\n id: `${key}_${i}PL`,\n value: this._getLastValue(ts.data),\n width: 2,\n color: 'rgba(19, 19, 19, 1)',\n dashStyle: 'dash',\n zIndex: 111,\n label: {\n text: ts.ts_shortname\n ? ts.ts_shortname.replace('Cmd.', '')\n : ts.ts_name,\n align: 'right',\n y: 12,\n x: 0,\n },\n },\n ploptions,\n ),\n (this.threshholdMappings && this.threshholdMappings[ts.ts_shortname]) ||\n {},\n );\n }\n\n // eslint-disable-next-line class-methods-use-this\n _getLevelData(data) {\n const lastValue = last(data);\n return data.length\n ? [\n [1, lastValue[1]],\n [2, lastValue[1]],\n ]\n : [];\n }\n\n _getThreshholds(\n graphOptions,\n list,\n key,\n label,\n ploptions = null,\n visible = true,\n ) {\n if (visible !== 'auto' && typeof visible === 'string') {\n visible = this.layerName === visible;\n }\n\n let color;\n list.forEach((ts, i) => {\n const al = this._getThreshold(ts, i, key, ploptions);\n color = al.color || 'rgba(255,255,255,0)';\n graphOptions.series.push({\n label: {\n enabled: true,\n connectorAllowed: true,\n style: {\n color: 'rgb(19,19,19)',\n fontWeight: 'normal',\n },\n },\n dashStyle: al.dashStyle,\n width: al.width,\n xAxis: 'alarmAxis',\n marker: { enabled: false },\n enableMouseTracking: false,\n linkedTo: key,\n showInLegend: false,\n data: this._getLevelData(ts.data),\n description: al.label.description,\n shortName: al.label.text,\n name:\n this.descriptionVisible && al.label.description\n ? al.label.description\n : al.label.text,\n color,\n });\n });\n graphOptions.series.push({\n name: label,\n color: list.length === 1 ? color : 'rgba(255,255,255,0)',\n id: key,\n visible,\n selected: visible,\n });\n }\n\n createGraphOptions() {\n const alarmFileName = this.alarms?.file;\n let alarmFile = alarmFileName\n ? compact(flatten(alarmFileName.map(file => this.files[file])))\n : null;\n const graphOptions = {\n chart: {\n // zoomType: \"x\",\n animation: false,\n type: this.chartType,\n pinchType: undefined,\n zoomType: this.zoomType,\n panning: {\n enabled: false,\n },\n },\n boost: {\n enabled: this.boost,\n useGPUTranslations: false,\n allowForce: false,\n },\n series: [],\n plotOptions: {\n area: {\n threshold: -Infinity,\n },\n column: {\n groupPadding: 0,\n },\n series: {\n // boostThreshold:0,\n // turboThreshold:0,\n animation: false,\n gapSize: this.gapSize !== undefined ? this.gapSize : 1,\n label: {\n enabled: false,\n },\n states: {\n inactive: {\n opacity: 1,\n },\n },\n },\n },\n yAxis: merge(\n {\n id: 'mainYAxis',\n plotLines: [],\n },\n this.yAxis,\n ),\n xAxis: [\n {\n id: 'mainXAxis',\n type: 'datetime',\n ordinal: false,\n labels: {\n formatter() {\n return this.dateTimeLabelFormat === '%e. %b' &&\n this.tickPositionInfo.unitName === 'hour'\n ? `${this.axis.defaultLabelFormatter.call(this)}`\n : this.axis.defaultLabelFormatter.call(this);\n },\n },\n },\n {\n visible: false,\n min: 1,\n max: 2,\n id: 'alarmAxis',\n },\n ],\n };\n this.hasAlarms = false;\n\n // Read alarms/thresholds provided as station/timeseries attributes (e.g. Station, week.json, year.json)\n if (this.attributeThresholds) {\n this._addAttributeThresholds(graphOptions);\n }\n\n if (this.alarms?.stationAttributes) {\n alarmFile = [];\n this.alarms.items.forEach(item => {\n item.tsList.forEach(ts => {\n if (this.station[ts]) {\n alarmFile.push({\n ts_shortname: ts,\n data: [[new Date().getTime(), parseFloat(this.station[ts])]],\n });\n }\n });\n });\n }\n\n if (alarmFile && alarmFile.some(ts => ts.data.length > 0)) {\n let spare = true;\n this.alarms?.items?.forEach((item, i) => {\n const alarms = alarmFile.filter(ts =>\n item.tsList.includes(ts.ts_shortname),\n );\n if (alarms.some(ts => ts.data.length)) {\n let { active } = item;\n if (item.active === 'auto') {\n if (alarms[0].data[0][1] > this.maxInitalValue) {\n active = false;\n } else {\n active = true;\n }\n\n if (!active && spare) {\n active = true;\n spare = false;\n }\n } else if (item.active === 'automin') {\n if (alarms[0].data[0][1] < this.minInitalValue) {\n active = false;\n } else {\n active = true;\n }\n\n if (!active && spare) {\n active = true;\n spare = false;\n }\n }\n this._getThreshholds(\n graphOptions,\n alarms,\n `alerts${i}_`,\n item.label || this.i18n.t('alarmlevels'),\n null,\n active,\n );\n this.hasAlarms = true;\n }\n });\n }\n\n if (this.files[this.events]) {\n const defaultPlOptions = {\n width: 2,\n color: 'rgba(0, 86, 160, 1)',\n dashStyle: 'DashDot',\n label: {\n align: 'left',\n y: 12,\n x: 0,\n },\n };\n this._getThreshholds(\n graphOptions,\n this._splitEventValues(this.files[this.events]),\n 'events_',\n 'HW-Ereignisse',\n defaultPlOptions,\n false,\n );\n }\n return graphOptions;\n }\n\n // Searches through available data structures for attributes\n _findFile(fielditem) {\n // Check for station attributes (e.g. ww-me)\n if (this.station[fielditem.field]) return this.station;\n // Check for timeseries attributes (e.g. ww-brw))\n // Specify files to look at in app.json -> options -> thresholdFiles[]\n const res = this.thresholdFiles.map(_file => {\n if (this.files && this.files[_file]) return _file;\n return null;\n });\n if (res) return first(this.files[first(res)]);\n // Nothing found\n return undefined;\n }\n\n _addAttributeThresholds(graphOptions) {\n const _thresholds = [];\n this.attributeThresholds.forEach(item => {\n // Find desired field in files\n const _file = this._findFile(item);\n if (\n _file &&\n _file[item.field] &&\n _file[item.field] !== '' &&\n !Number.isNaN(_file[item.field])\n ) {\n _thresholds.push({\n ts_shortname: item.field,\n data: [[new Date().toISOString(), parseFloat(_file[item.field])]],\n label: item.label,\n color: item.color,\n visible: item.visible,\n description: item.description,\n shortName: item.label,\n });\n }\n });\n if (_thresholds) {\n _thresholds.forEach((thres, i) => {\n graphOptions.series.push({\n xAxis: 'alarmAxis',\n marker: { enabled: false },\n enableMouseTracking: false,\n name: thres.label,\n label: {\n text: thres.label,\n enabled: true,\n },\n color: thres.color || 'rgba(255,255,255,0)',\n dashStyle: 'dash',\n id: `thres_${i}`,\n visible: thres.visible || true,\n selected: thres.visible || true,\n data: this._getLevelData(thres.data),\n description: thres.description,\n shortName: thres.label,\n });\n });\n this.hasAlarms = true;\n }\n }\n\n _getExtremes(attr) {\n if (typeof this[attr] === 'number') {\n return this[attr];\n }\n if (this[attr] && this.station[this[attr]]) {\n return this.station[this[attr]] ? Number(this.station[this[attr]]) : null;\n }\n return null;\n }\n\n defaultOptions() {\n const timezoneOffset = -dayjs\n .tz(\n dayjs().tz(),\n dayjs.defaultZone ? dayjs.defaultZone.name : dayjs.tz.guess(),\n )\n .utcOffset();\n\n const conf = merge(\n {\n title: {\n text: '',\n },\n subtitle: {\n text: this.subTitle || '',\n floating: true,\n },\n credits: this.creditOptions,\n events: {},\n exporting: {\n chartOptions: {\n title: {\n text: this.graphTitle\n ? template(this.graphTitle, this.station)\n : '',\n },\n subtitle: {\n text: `${this.i18n.t('station_no')}: ${\n this.station.station_no\n } | ${this.i18n.t('request_at')} ${dayjs().tz().format('LLLL')}`,\n },\n },\n filename: `${this.parameter_label}_${this.station.station_name}_${\n this.station.station_no\n }_${dayjs().tz().format('YYYYMMDD_kkmmss')}`,\n fallbackToExportServer: false,\n buttons: {\n contextButton: {\n enabled: false,\n },\n },\n sourceWidth: 1600,\n sourceHeight: 800,\n scale: 1,\n },\n navigator: {\n enabled: false,\n },\n rangeSelector: {\n enabled: false,\n },\n scrollbar: {\n enabled: false,\n },\n navigation: {\n enabled: false,\n },\n plotOptions: {\n series: {\n // gapSize: 1,\n // boostThreshold:0,\n // turboThreshold:0,\n dataGrouping: {\n enabled: false,\n },\n showCheckbox: ViewPort.size !== SM,\n events: {\n checkboxClick(event) {\n event.preventDefault();\n if (event.checked) {\n this.show();\n } else {\n this.hide();\n }\n },\n legendItemClick(event) {\n event.preventDefault();\n if (this.visible) {\n if (this.checkbox) {\n this.checkbox.checked = false;\n }\n this.hide();\n } else {\n if (this.checkbox) {\n this.checkbox.checked = true;\n }\n this.show();\n }\n },\n },\n },\n },\n legend: this.legendOptions,\n tooltip: {\n shared: true,\n split: false,\n },\n time: {\n // eslint-disable-next-line no-unused-vars\n getTimezoneOffset() {\n return timezoneOffset;\n },\n // dayjs: dayjs,\n // timezone: dayjs.defaultZone ? dayjs.defaultZone.name : dayjs.guess(),\n // useUTC: false\n },\n yAxis: {\n allowDecimals: !this.yAxisHideDecimals,\n reversed: this.yAxisReverse || false,\n minRange: this._getExtremes('yAxisMinRange'),\n softMax: this._getExtremes('yAxisMax'),\n softMin: this._getExtremes('yAxisMin'),\n opposite: false,\n title: {\n text: this._yAxisLabel || this.i18n.t('waterlevelcm'),\n },\n },\n series: [],\n },\n this.createGraphOptions(),\n );\n return conf;\n }\n}\n","// eslint-disable-next-line max-classes-per-file\nimport { customElement, property } from 'lit/decorators.js';\nimport { find } from 'lodash-es';\nimport dayjs from '@kisters/wcp-base/common/dayjsext';\nimport { init, getCurrentApi } from '@kisters/wiski-web/api';\nimport { initConfig } from '@kisters/wcp-base/app';\nimport KiWwpGraph from './ki-wwp-graph';\n\n@customElement('ki-wwp-graph-ext')\nexport class KiWwpGraphExt extends KiWwpGraph {\n @property({ type: String })\n key;\n\n @property({ type: String })\n stationId;\n\n @property({ type: String })\n dataPath;\n\n favButton = false;\n\n firstUpdated() {\n this.numberFormatter = new Intl.NumberFormat(\n this.i18n.language,\n this.numberFormat || {},\n );\n this.initAppConfig();\n this.refreshInterval = setInterval(() => {\n this.fetchData();\n }, 300000);\n }\n\n async initAppConfig() {\n this.appcfg = await initConfig('./config/app.json', []);\n init({ dataPath: this.appcfg.apiPath });\n this.api = getCurrentApi();\n this.fetchData();\n }\n\n async fetchData() {\n dayjs.locale(this.i18n.language);\n const stationDetailComp = find(this.appcfg.route[0].children, {\n component: 'wwp-station-detail',\n });\n const configItem = find(stationDetailComp.children, { path: this.key });\n if (configItem) {\n Object.assign(this, configItem.options);\n }\n this._selectedPeriod = this.period;\n this.imageShare = false;\n this.tableOpen = false;\n super.fetchData();\n }\n}\n","import { css } from 'lit';\n\nexport default css`\n :host {\n height: 100%;\n width: 100%;\n display: flex;\n flex-direction: column;\n }\n\n ui5-button {\n cursor: pointer;\n margin: 0 0 5px 10px;\n }\n\n #nav-node {\n overflow: auto;\n padding: 5px 10px 0 5px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n border-bottom: 1px solid gray;\n }\n\n #nav-node.hidden {\n display: none;\n }\n\n .hidden {\n display: none;\n }\n\n #nav-node .label {\n font-size: 1.5em;\n }\n\n ki-wwp-switcher-bottom {\n border-radius: 0;\n box-shadow: none;\n align-self: normal;\n }\n\n .actions {\n display: flex;\n }\n\n ki-icon-btn {\n margin: 5px;\n box-shadow: none;\n }\n\n .hideButton {\n display: none;\n }\n\n #chart-node {\n display: table-cell;\n position: absolute;\n width: 100%;\n height: 100%;\n }\n\n .contentnode {\n display: flex;\n flex: 1;\n }\n\n #table-wrapper {\n position: relative;\n overflow: auto;\n flex: 0 0 330px;\n }\n\n #table-wrapper.hidden {\n position: relative;\n overflow: auto;\n flex: 0 0 0;\n }\n\n ki-wwp-ts-table {\n position: absolute;\n height: 100%;\n width: 100%;\n }\n\n #chart-wrapper {\n position: relative;\n flex: 1;\n }\n\n :host(.sm-screen) .label {\n display: none;\n }\n\n :host(.sm-screen) ki-wwp-switcher-bottom {\n margin-left: 35pt;\n }\n\n :host(.sm-screen) .clipboard-btn {\n display: none;\n }\n\n :host(.sm-screen) #table-wrapper {\n flex: 1 1 100%;\n background: white;\n }\n\n :host(.sm-screen) #table-wrapper.hidden {\n position: relative;\n overflow: auto;\n flex: 0 0 0;\n }\n\n .highcharts-legend-checkbox {\n transform: translateY(-2px);\n }\n\n ui5-select {\n background: #eee;\n position: absolute;\n left: 50px;\n top: 10px;\n z-index: 1;\n }\n`;\n","import { last, union } from 'lodash-es';\n\nexport class PopupUtil {\n public static fileMatchesRange(tshref, ranges, alarms): boolean {\n const whitelist = union(\n ranges.map(r => r.data),\n alarms?.file,\n );\n const filename = last(tshref.split('/'));\n return whitelist.includes(filename);\n }\n}\n","import { html, LitElement } from 'lit';\nimport { customElement } from 'lit/decorators.js';\nimport { last, merge, find, orderBy } from 'lodash-es';\nimport {\n i18nMixin,\n responsiveMixin,\n ViewPort,\n SM,\n queryParamMixin,\n localStorageMixin,\n} from '@kisters/wcp-base/decorators';\nimport './ki-wwp-switcher-bottom';\nimport {\n LoaderMixin,\n template,\n copyTextToClipboard,\n Mix,\n} from '@kisters/wcp-base/common';\nimport { getRouteOptionsAndParams } from '@kisters/wcp-base/components';\nimport dayjs from '@kisters/wcp-base/common/dayjsext';\nimport './ki-wwp-ts-table.js';\nimport hclocales from '@kisters/wcp-water/common/highcharts-locales.js';\nimport Highcharts from 'highcharts/highstock';\nimport exporting from 'highcharts/modules/exporting';\nimport patternFill from 'highcharts/modules/pattern-fill';\nimport offlineexporting from 'highcharts/modules/offline-exporting';\nimport nodata from 'highcharts/modules/no-data-to-display';\n\nimport { getCsvDelimiter } from '@kisters/wcp-base/components/ki-app/services/ki-app-config-service';\nimport { getCurrentApi } from '../../api/API';\n\nimport nls from '../../locales/index';\nimport style from './ki-wwp-graph-precip.css';\n\nimport '@ui5/webcomponents/dist/Button';\nimport '@ui5/webcomponents/dist/Select';\nimport '@ui5/webcomponents/dist/Option';\nimport { PopupUtil } from './ki-wwp-graph-helper';\n\nexporting(Highcharts);\npatternFill(Highcharts);\nofflineexporting(Highcharts);\nnodata(Highcharts);\n\n@customElement('ki-wwp-graph-precip')\nexport default class KiWwpGraphPrecip extends Mix(\n LitElement,\n LoaderMixin,\n responsiveMixin,\n [i18nMixin, { nls }],\n [\n localStorageMixin,\n { targetProperty: '__favouriteStationIds', typeParam: Array },\n ],\n [\n queryParamMixin,\n {\n targetProperty: '_selectedPeriod',\n selector: 'period',\n defaultValue: '',\n },\n ],\n) {\n highcharts = Highcharts;\n\n miniGraph = false;\n\n imageShareAutoOpen = false;\n\n filterAccuracy = 66;\n\n sharedTooltip = true;\n\n zoomType = 'x';\n\n // eslint-disable-next-line class-methods-use-this\n get localStorageId() {\n return `wwp-favorites-ids`;\n }\n\n ___favouriteStationIds = [];\n\n get __favouriteStationIds() {\n return this.___favouriteStationIds;\n }\n\n set __favouriteStationIds(value) {\n this.___favouriteStationIds = value;\n this.requestUpdate();\n }\n\n __selectedPeriod;\n\n get _selectedPeriod() {\n return this.__selectedPeriod;\n }\n\n set _selectedPeriod(value) {\n this.__selectedPeriod = value;\n this.requestUpdate();\n }\n\n favButton = false;\n\n static styles = style;\n\n firstUpdated() {\n if (!this.miniGraph) {\n this.refreshInterval = setInterval(() => {\n this.fetchData();\n }, 300000);\n }\n Object.assign(this, this.options);\n if (\n this.renderRoot.host.classList.contains('sm-screen') ||\n this.miniGraph\n ) {\n this.tableOpen = false;\n }\n this.numberFormatter = new Intl.NumberFormat(\n this.i18n.language,\n this.numberFormat || {},\n );\n this.api = getCurrentApi();\n this.fetchData();\n }\n\n async onAfterEnter(location) {\n const params = getRouteOptionsAndParams(location, [\n 'layerName',\n 'stationId',\n 'stationLabel',\n ]);\n\n Object.assign(this, JSON.parse(JSON.stringify(params.options)));\n this.layerName = params.layerName;\n this.apppath = location.route;\n this.stationId = params.stationId;\n }\n\n isFavorite() {\n return this.__favouriteStationIds.indexOf(this.station?.station_id) >= 0;\n }\n\n _toggleFavourite() {\n if (this.__favouriteStationIds.indexOf(this.station.station_id) === -1) {\n this.__favouriteStationIds = [\n ...this.__favouriteStationIds,\n this.station.station_id,\n ];\n } else {\n this.__favouriteStationIds = this.__favouriteStationIds.filter(\n id => id !== this.station.station_id,\n );\n }\n }\n\n getImageShare() {\n return this.api\n ? `${window.location.origin}${window.location.pathname.replace(\n /[^/]*$/,\n '',\n )}graph.html?stationId=${\n this.station.station_id\n }&component=ki-wwp-graph-precip-ext&key=${encodeURIComponent(\n this.apppath?.path,\n )}&period=${this._selectedPeriod}`\n : '';\n }\n\n connectedCallback() {\n if (super.connectedCallback) super.connectedCallback();\n\n let resize;\n window.addEventListener('resize', () => {\n window.clearTimeout(resize);\n resize = setTimeout(() => {\n this.chart && this.chart.reflow();\n }, 220);\n });\n }\n\n formatnum(val) {\n return val === undefined || val === null || val === '' || Number.isNaN(val)\n ? ''\n : this.numberFormatter.format(val);\n }\n\n get tablecolumns() {\n return [\n {\n field: 'timestamp',\n label: this.timestampLabel || this.i18n.t('timestamp'),\n sortable: true,\n hideAble: false,\n },\n {\n field: 'value',\n label: this.yAxisLabel || this.i18n.t('precipmm'),\n sortable: false,\n },\n ];\n }\n\n createChart() {\n if (hclocales[this.i18n.language.substring(0, 2)]) {\n this.highcharts.setOptions({\n lang: hclocales[this.i18n.language.substring(0, 2)],\n });\n }\n this.chart = this.highcharts.chart(\n this.renderRoot.querySelector('#chart-node'),\n this.defaultOptions(),\n this.chartCreated.bind(this),\n );\n }\n\n chartCreated(chart) {\n const e = new CustomEvent('load', {\n detail: chart,\n });\n this.dispatchEvent(e);\n }\n\n updated(changedProperties) {\n if (changedProperties.get('stationId')) {\n this.station = null;\n this.fetchData();\n }\n if (this.chart) {\n this.chart.reflow();\n }\n }\n\n disconnectedCallback() {\n if (this.chart) {\n this.chart.destroy();\n this.chart = null;\n }\n }\n\n static get properties() {\n return {\n favButton: { type: Boolean },\n miniGraph: { type: Boolean },\n stationId: { type: String },\n options: { type: Object },\n };\n }\n\n drawSeries(period, min, max) {\n const cfg = find(this.ranges, { value: period });\n let _min = min;\n let _max = max;\n if (cfg.yearSelector) {\n _min = _min || dayjs().tz().startOf('year').valueOf();\n _max = _max || dayjs(this.coverage.max).tz().valueOf();\n this.renderRoot\n .querySelector('#yearselector')\n .classList.remove('hideButton');\n } else {\n this.renderRoot\n .querySelector('#yearselector')\n .classList.add('hideButton');\n }\n while (this.chart.series.length > 0) {\n this.chart.series[0].remove(false);\n }\n\n if (this.files[cfg.data]) {\n if (period === 'PoR') {\n _min = dayjs(this.files[cfg.data][0].data[0][0]).valueOf();\n _max = dayjs(last(this.files[cfg.data][0].data)[0]).valueOf();\n }\n const minDate =\n _min || dayjs(_max).subtract(dayjs.duration(period)).valueOf();\n const maxDate = _max || dayjs().tz().valueOf();\n const xAxis = this.chart.get('mainXAxis');\n this.chart.zoomOut();\n\n /* // Workaround for year view (avoid plotting of empty next month)\n if (cfg.value === 'P1Y')\n xAxis.setExtremes(\n minDate,\n max || dayjs().startOf('month'),\n false,\n false,\n ); \n else */\n\n xAxis.setExtremes(minDate, maxDate, false, false);\n\n if (cfg.yAxisLabel) {\n this.yAxisLabel = cfg.yAxisLabel;\n this.chart.get('mainYAxis').setTitle({ text: cfg.yAxisLabel }, false);\n }\n\n this.chart.get('sumYAxis').update({ visible: !cfg.sumOnMainAxis }, false);\n\n const timeformat = cfg.dateFormat || '%d.%m.%Y %H:%M';\n let ts = find(this.files[cfg.data], { ts_shortname: cfg.ts });\n ts = ts || this.files[cfg.data][0];\n\n if (\n this.filterAccuracy &&\n ts.columns.indexOf('Aggregation Accuracy %') > -1\n ) {\n const { columns } = ts;\n const valueIndex = columns.indexOf('Value');\n const accIndex = columns.indexOf('Aggregation Accuracy %');\n ts.data.forEach(item => {\n if (item[accIndex] < this.filterAccuracy) {\n item[valueIndex] = null;\n }\n });\n }\n const tsdata = this._formatGraphData(ts.data, minDate, maxDate);\n const accData = tsdata;\n const tableData = orderBy(tsdata, 'x', ['desc']).map(item => ({\n timestamp: dayjs(item.x)\n .tz()\n .format(cfg.dateFormatTable || 'L LT'),\n value: this.formatnum(item.y),\n }));\n const table = this.shadowRoot.getElementById('dataTable');\n table.columns = this.tablecolumns;\n // eslint-disable-next-line no-multi-assign\n this.orderedTableData = table.data = tableData;\n table.data = this.orderedTableData;\n\n // Show Accuracy in tooltip\n if (this.filterAccuracy) {\n this._addAccuracy(accData, timeformat);\n }\n\n // Add bars\n this.chart.addSeries(\n {\n data: tsdata,\n name: cfg.tslabel || this.parameter_label,\n id: 'data',\n color: '#0056a0',\n selected: true,\n marker: { enabled: false },\n tooltip: merge(\n {\n valueDecimals: 1,\n valueSuffix: ` ${ts.ts_unitsymbol}`,\n xDateFormat: timeformat,\n },\n this.tooltipBar,\n ),\n },\n false,\n );\n\n // Add sum line\n if (!cfg.hideSumLine) {\n this.chart.addSeries(\n {\n data: this._formatGraphDataSum(\n ts.data,\n minDate,\n maxDate,\n cfg.resetSumAt,\n ),\n name: cfg.sumLabel || this.sumLabel || this.i18n.t('Sum line'),\n yAxis: cfg.sumOnMainAxis ? 'mainYAxis' : 'sumYAxis',\n type: 'line',\n step: 'left',\n marker: { enabled: false },\n color: 'rgb(170,70,67)',\n selected: true,\n tooltip: merge(\n {\n valueDecimals: 1,\n valueSuffix: ` ${ts.ts_unitsymbol}`,\n xDateFormat: timeformat,\n },\n this.tooltipSum,\n ),\n },\n false,\n );\n }\n this.chart.redraw();\n }\n }\n\n getRangeOptions() {\n return this.ranges || [];\n }\n\n render() {\n const title =\n this.graphTitle && this.station\n ? template(this.graphTitle, this.station)\n : '';\n return html`
\n
${title}
\n {\n this.drawSeries(e.detail.value);\n this._selectedPeriod = e.detail.value;\n }}\"\n .options=\"${this.getRangeOptions()}\"\n .value=${this._selectedPeriod}\n class=\"buttons\"\n >\n \n
\n {\n const popup = this.renderRoot.querySelector('#download-popup');\n this.renderRoot.querySelector(\n '#embeddedgraph',\n ).value = ``;\n if (this.imageShareAutoOpen) {\n window.open(this.getImageShare(), '_blank');\n }\n popup.visible ? popup.hide({}) : popup.show({});\n }}\n >\n \n \n \n ${this.i18n.t('embedGraph')} {\n this.renderRoot.querySelector('#download-popup').hide({});\n }}\"\n style=\"margin:0;height: 20px;width: 20px;line-height: 20px;\"\n icon=\"ki ki-times\"\n >\n
\n \n {\n window.open(this.getImageShare(), '_blank');\n }}\"\n title=\"${this.i18n.t('previewTitle')}\"\n >${this.i18n.t('preview')}\n {\n copyTextToClipboard(\n this.renderRoot.querySelector('#embeddedgraph').value,\n );\n }}\"\n title=\"${this.i18n.t('copyToClipboard')}\"\n >${this.i18n.t('copy')}\n \n \n {\n copyTextToClipboard(\n this.renderRoot\n .querySelector('#dataTable')\n .toCSV(getCsvDelimiter())\n .replace(/(<([^>]+)>)/gi, ''),\n );\n }}\n >\n \n
\n \n
\n
\n \n ${this._years.map(\n year =>\n html`${year.label}`,\n )}\n \n
\n
\n
\n \n \n
\n
`;\n }\n\n // eslint-disable-next-line class-methods-use-this\n\n get _years() {\n if (this.coverage) {\n let max = dayjs(this.coverage.max).tz().get('year');\n const min = dayjs(this.coverage.min).tz().get('year');\n const years = [{ value: 'YTD', label: this.i18n.t('currentYear') }];\n while (max >= min) {\n years.push({ value: max, label: max.toString() });\n max -= 1;\n }\n return years;\n }\n return [{ value: 'YTD', label: this.i18n.t('currentYear') }];\n }\n\n _handleYearChange(e) {\n const { value } = e.target.selectedOption;\n const min =\n value && value !== 'YTD'\n ? dayjs(value, 'YYYY').tz().startOf('year')\n : dayjs().tz().startOf('year');\n const max =\n value && value !== 'YTD'\n ? dayjs(value, 'YYYY').tz().endOf('year')\n : dayjs().tz();\n this.drawSeries('P1Y', min.valueOf(), max.valueOf());\n }\n\n showTable() {\n this.renderRoot.querySelector('#table-wrapper').classList.toggle('hidden');\n this.renderRoot\n .querySelector('#table-clipboard-btn')\n .classList.toggle('hideButton');\n this.tableOpen = !this.tableOpen;\n this.chart && this.chart.reflow();\n }\n\n downloadGraph() {\n this.chart.update(\n {\n exporting: {\n chartOptions: {\n title: {\n text: this.graphTitle\n ? template(this.graphTitle, this.station)\n : '',\n },\n subtitle: {\n text: `${this.i18n.t('station_no')}: ${\n this.station.station_no\n } | ${this.i18n.t('request_at')} ${dayjs()\n .tz()\n .format('LLLL')}
\n ${dayjs(this.chart.xAxis[0].min).format('L')} - ${dayjs(\n this.chart.xAxis[0].max,\n )\n .tz()\n .format('L')}`,\n },\n },\n filename: `${this.parameter_label}_${this.station.station_name}_${\n this.station.station_no\n }_${dayjs().tz().format('YYYYMMDD')}`,\n fallbackToExportServer: false,\n buttons: {\n contextButton: {\n enabled: false,\n },\n },\n sourceWidth: 1600,\n sourceHeight: 800,\n scale: 1,\n },\n },\n false,\n );\n this.chart.exportChartLocal();\n }\n\n async fetchData() {\n this.chart?.destroy();\n this.chart = null;\n const _files = {};\n this.station = this.station || (await this.api.getStation(this.stationId));\n await Promise.all(\n this.station.timeseries\n .filter(\n ts =>\n ts.station_parameter === this.station_parameter &&\n (!this.onlyFetchSpecifiedRanges ||\n PopupUtil.fileMatchesRange(ts.href, this.ranges, this.alarms)),\n )\n .map(async ts => {\n _files[last(ts.href.split('/'))] = await this.api.getTsData(ts.href);\n }),\n );\n this.files = _files;\n const yearcfg = find(this.ranges, { value: 'P1Y' });\n if (yearcfg && this.files[yearcfg.data]) {\n const tsdata = this.files[yearcfg.data][0].data;\n if (tsdata && tsdata[0]) {\n this.coverage = {\n max: last(tsdata)[0],\n min: tsdata[0][0],\n };\n }\n }\n if (this.station) {\n this.createChart();\n let selected =\n find(this.ranges, { layerAlias: this.layerName }) ??\n find(this.ranges, { selected: true });\n selected = this._selectedPeriod || selected.value || this.ranges[0].value;\n\n if (!find(this.ranges, { period: selected })) {\n selected = this.ranges[0].value;\n }\n\n if (!selected) {\n selected = this.ranges[0].value;\n }\n this._selectedPeriod = selected;\n this.drawSeries(selected);\n\n this.requestUpdate();\n }\n return this.files;\n }\n\n // eslint-disable-next-line class-methods-use-this\n _formatGraphData(data, minDate, maxDate) {\n const tsData = [];\n data.forEach(dp => {\n const ts = new Date(dp[0]).getTime();\n if (ts > minDate && ts < maxDate) {\n const _acc = dp[2] ? Math.floor(dp[2]) : undefined;\n const _p = {\n x: ts,\n y: dp[1],\n acc: _acc,\n };\n const _path = 'M-1,1 l2,-2 M0,4 l4,-4 M3,5 l2,-2';\n _p.acc < 100\n ? (_p.color = {\n pattern: {\n path: _path,\n color: '#0056a0',\n width: 4,\n height: 4,\n },\n })\n : (_p.color = '#0056a0');\n if (_p.acc < 100) _p.borderColor = '#0056a0';\n tsData.push(_p);\n }\n });\n return tsData;\n }\n\n // eslint-disable-next-line class-methods-use-this\n _formatGraphDataSum(data, minDate, maxDate, resetSumAt) {\n let sum = 0;\n const tsData = [];\n data.forEach(dp => {\n const ts = dayjs(dp[0]);\n const tsms = ts.valueOf();\n if (tsms >= minDate && tsms <= maxDate) {\n if (resetSumAt && resetSumAt === ts.format('HH:mm')) {\n sum = 0;\n }\n tsData.push([tsms, dp[1] === null ? null : (sum += dp[1])]);\n }\n });\n return tsData;\n }\n\n createGraphOptions() {\n const self = this;\n const graphOptions = {\n chart: {\n animation: false,\n type: 'column',\n pinchType: undefined,\n zoomType: this.zoomType,\n panning: {\n enabled: false,\n },\n },\n\n series: [],\n plotOptions: {\n column: {\n groupPadding: 0,\n dataLabels: {\n enabled: true,\n formatter() {\n // Show data coverage\n const color = this.point.acc < 100 ? 'red' : 'rgba(29,29,29)';\n const val =\n // eslint-disable-next-line no-nested-ternary\n this.point.acc === 0.01\n ? 'k.a.'\n : this.point.acc\n ? `${this.point.acc}%`\n : '';\n return self.showAccuracy\n ? `${val}`\n : '';\n },\n },\n },\n series: {\n animation: false,\n showCheckbox: ViewPort.size !== SM && !this.miniGraph,\n states: {\n inactive: {\n opacity: 1,\n },\n },\n },\n },\n yAxis: [\n merge(\n {\n softMax: 2,\n min: 0,\n allowDecimals: false,\n id: 'mainYAxis',\n minorTicks: !this.miniGraph,\n tickAmount: 8,\n title: {\n text: this.yAxisLabel || `${this.i18n.t('precip')} [mm]`,\n },\n },\n this.yAxisBar,\n ),\n merge(\n {\n softMax: 2,\n min: 0,\n allowDecimals: false,\n id: 'sumYAxis',\n minorTicks: !this.miniGraph,\n tickAmount: 8,\n opposite: true,\n title: {\n text: this.yAxisLabelSum || `${this.i18n.t('Sum line')} [mm]`,\n },\n },\n this.yAxisSum,\n ),\n {\n id: 'accAxis',\n labels: {\n enabled: false,\n },\n title: {\n enabled: false,\n },\n gridLineWidth: 0,\n },\n ],\n xAxis: [\n {\n id: 'mainXAxis',\n type: 'datetime',\n ordinal: false,\n labels: {\n formatter() {\n return this.dateTimeLabelFormat === '%e. %b' &&\n this.tickPositionInfo.unitName === 'hour'\n ? `${this.axis.defaultLabelFormatter.call(this)}`\n : this.axis.defaultLabelFormatter.call(this);\n },\n },\n max: new Date().getTime(),\n },\n {\n visible: false,\n id: 'alarmAxis',\n },\n ],\n };\n return graphOptions;\n }\n\n _addAccuracy(tsdata, timeformat) {\n // Transform Accuracy to Value\n const _data: Array = [];\n tsdata.forEach(d => {\n const newPoint = {};\n newPoint.x = d.x;\n newPoint.y = d.acc;\n if (d.acc) _data.push(newPoint); // Catch periods without accuracy\n });\n\n // Add Accuracy as series to show accuracy in tooltip\n // Hide series in graph and legend\n if (_data.length > 0)\n this.chart.addSeries(\n {\n data: _data,\n yAxis: 'accAxis',\n name: this.i18n.t('accuracy'),\n id: 'acc',\n color: 'black',\n selected: true,\n marker: { enabled: false },\n tooltip: {\n valueDecimals: 0,\n valueSuffix: `%`,\n xDateFormat: timeformat,\n },\n showInLegend: false,\n opacity: 0,\n grouping: false,\n },\n false,\n );\n }\n\n get creditOptions() {\n const credits = this.credits ? { ...this.credits } : { enabled: false };\n if (credits?.text) {\n credits.text = template(credits.text, this.station);\n }\n if (this.credits && ViewPort.size === SM) {\n credits.position = credits.positionMobile || credits.position;\n }\n credits.enabled = !this.miniGraph;\n return credits;\n }\n\n defaultOptions() {\n const timezoneOffset = -dayjs\n .tz(\n dayjs().tz(),\n dayjs.defaultZone ? dayjs.defaultZone.name : dayjs.tz.guess(),\n )\n .utcOffset();\n const conf = merge(\n {\n title: {\n text: '',\n },\n subtitle: {\n text: this.subTitle || '',\n floating: true,\n },\n credits: this.creditOptions,\n exporting: {\n chartOptions: {\n title: {\n text: this.graphTitle\n ? template(this.graphTitle, this.station)\n : '',\n },\n subtitle: {\n text: `${this.i18n.t('station_no')}: ${\n this.station.station_no\n } | ${this.i18n.t('request_at')} ${dayjs().tz().format('LLLL')}`,\n },\n },\n filename: `${this.parameter_label}_${this.station.station_name}_${\n this.station.station_no\n }_${dayjs().tz().format('YYYYMMDD_kkmmss')}`,\n fallbackToExportServer: false,\n sourceWidth: 1600,\n sourceHeight: 800,\n scale: 1,\n buttons: {\n contextButton: {\n enabled: false,\n },\n },\n },\n plotOptions: {\n series: {\n label: {\n enabled: false,\n },\n turboThreshold: 2000,\n showCheckbox: true,\n events: {\n checkboxClick(event) {\n if (event.checked) {\n this.show();\n // this.legendSymbol.hide();\n } else {\n this.hide();\n // this.legendSymbol.hide();\n }\n },\n legendItemClick() {\n if (this.checkbox) {\n this.checkbox.checked = !this.visible;\n }\n },\n hide() {\n this.yAxis.update({\n visible: false,\n });\n },\n show() {\n this.yAxis.update({\n visible: true,\n });\n },\n },\n },\n },\n legend: {\n enabled: this.forceLegend || !this.miniGraph,\n align: 'left',\n symbolPadding: 5,\n symbolRadius: 0,\n itemDistance: 40,\n squareSymbol: true,\n itemCheckboxStyle: {\n marginLeft: '-30px',\n },\n },\n tooltip: {\n shared: this.sharedTooltip,\n split: false,\n },\n time: {\n // eslint-disable-next-line no-unused-vars\n getTimezoneOffset() {\n return timezoneOffset;\n },\n },\n yAxis: {\n id: 'mainYAxis',\n minRange: 3,\n title: {\n text: this.yAxisLabel || this.i18n.t('precipmm'),\n },\n },\n series: [],\n },\n this.createGraphOptions(),\n );\n return conf;\n }\n}\n","// eslint-disable-next-line max-classes-per-file\nimport { customElement, property } from 'lit/decorators.js';\nimport { find } from 'lodash-es';\nimport dayjs from '@kisters/wcp-base/common/dayjsext';\nimport { init, getCurrentApi } from '@kisters/wiski-web/api';\nimport { initConfig } from '@kisters/wcp-base/app';\nimport KiWwpGraphPrecip from './ki-wwp-graph-precip';\n\n@customElement('ki-wwp-graph-precip-ext')\nexport class KiWwpGraphPrecipExt extends KiWwpGraphPrecip {\n @property({ type: String })\n key;\n\n @property({ type: String })\n stationId;\n\n @property({ type: String })\n dataPath;\n\n favButton = false;\n\n firstUpdated() {\n this.numberFormatter = new Intl.NumberFormat(\n this.i18n.language,\n this.numberFormat || {},\n );\n this.initAppConfig();\n this.refreshInterval = setInterval(() => {\n this.fetchData();\n }, 300000);\n }\n\n async initAppConfig() {\n this.appcfg = await initConfig('./config/app.json', []);\n init({ dataPath: this.appcfg.apiPath });\n this.api = getCurrentApi();\n this.fetchData();\n }\n\n async fetchData() {\n dayjs.locale(this.i18n.language);\n const stationDetailComp = find(this.appcfg.route[0].children, {\n component: 'wwp-station-detail',\n });\n const configItem = find(stationDetailComp.children, { path: this.key });\n if (configItem) {\n Object.assign(this, configItem.options);\n }\n this._selectedPeriod = this.period;\n this.imageShare = false;\n this.tableOpen = false;\n super.fetchData();\n }\n}\n"],"file":"assets/ki-wwp-graph-precip-ext.dbe428b9.js"}