{"version":3,"names":["ew$1","$$1","luxon","DateTime$1","DateTime","Validators","__proto__","between","el","x","z","id","startsWith","document","getElementById","replace","endsWith","ew","hasValue","val","toUpperCase","language","phrase","captcha","creditCard","value","getValue","checkCreditCard","custom","fn","_len","arguments","length","args","Array","_key","datetime","format","checkDate","email","checkEmail","emails","cnt","err","checkEmails","fileRequired","fieldName","elFn","float","checkNumber","guid","checkGuid","integer","checkInteger","max","maxValue","parseNumber","HTMLElement","maxDate","maxDateTime","dataset","formatPattern","maxFormat","parseDate","Date","fromJSDate","zone","formatDateTime","DATE_FORMAT","TIME_FORMAT","min","minValue","minDate","minDateTime","minFormat","mismatchPassword","elPwd","password","raw","ENCRYPTED_PASSWORD","match","RegExp","escapeRegExChars","INVALID_PASSWORD_CHARACTERS","passwordStrength","$el","isMaskedPassword","hasClass","data","phone","checkPhone","range","checkRange","recaptcha","_grecaptcha","grecaptcha","getResponse","regex","pattern","checkByRegEx","required","_$el$data","$p","closest","substring","css","ssn","checkSsn","time","checkTime","url","checkUrl","userLevelId","parseInt","userLevelName","elId","name","trim","level","sameText","includes","toLowerCase","username","INVALID_USERNAME_CHARACTERS","zip","checkZip","_typeof","o","Symbol","iterator","constructor","prototype","toPropertyKey","t","i","r","e","toPrimitive","call","TypeError","String","Number","_defineProperties","enumerable","configurable","writable","Object","defineProperty","key","_createClass","_setPrototypeOf","setPrototypeOf","bind","_inheritsLoose","create","_defineProperty","batchSettings","type","contentType","processData","dataType","toJSON","JSON","stringify","parse","batchSetup","options","extend","Batch","batch","func","this","undefined","parent","ajaxSetup","_batch","requests","add","_func$name","clear","send","instance","success","parentSuccess","status","xhr","map","request","settings","childSuccess","statusText","_deliver","ajax","_addRequest","push","_responses$error","_responses$error2","responses","error","description","alert","each","response","_request$settings$com","_request$settings$suc","complete","$ajax","FormBase","pageId","self","$self","_initiated","element","$element","htmlForm","initSearchPanel","modified","emptyRow","multiPage","autoSuggests","lists","formKeyCountName","submitWithFetch","enableOnInit","filterList","disableForm","body","style","cursor","form","getForm","elements","filter","prop","addClass","trigger","enableForm","$elements","removeClass","not","appendHidden","$form","$dp","attr","find","ar","serializeArray","forEach","appendTo","canSubmit","async","_await$this$validate","_this$validate","updateTextArea","validate","$dps","dp","j","test","$els","tagName","result","evt","Event","originalEvent","isDefaultPrevented","isObject","submit","_e$originalEvent","formAction","submitter","parseUrl","pathname","setAttribute","getAttribute","method","serialize","fetch","finally","getList","_this$getElement","obj","field","getElement","compileTemplates","values","list","template","isString","templates","getOptionTemplate","_this$element","_this$element2","getElements","fixId","multiple","rowindex","split","prefix","isNumber","updateList","immediate","_Object$entries$find","entries","entry","parents","parentFields","slice","lookupOptions","updateOptions","getOptionValues","updateLists","_form$querySelector","isUndefined","querySelector","selector","_ref","join","_ref2","isArray","deferreds","batchSize","ajaxBatchSize","b","splice","getApiUrl","API_LOOKUP_ACTION","when","then","source","target","fail","console","log","always","createAutoSuggest","assign","limit","AUTO_SUGGEST_MAX_ENTRIES","autoSuggestSettings","AutoSuggest","initEditors","ed","active","save","destroyEditor","destroy","onError","msg","initUpload","index","later","AJAX_DELAY","upload","setupFilters","filters","$sf","toggleClass","$df","$delete","$save","saveFilters","CLIENT_SEARCH_FILTER","localStorage","setItem","PROJECT_NAME","SERVER_SEARCH_FILTER","currentPage","done","_result$","off","on","prompt","input","html","sanitize","prevAll","remove","next","$submenu","insertBefore","currentPageID","action","append","TOKEN_NAME_KEY","TOKEN_NAME","ANTIFORGERY_TOKEN_KEY","ANTIFORGERY_TOKEN","cmd","refresh","setLayout","one","init","hasFormData","text","hide","render","loadjs","ready","setTimeout","is","$tab","$panel","$container","width","CONFIRM_CANCEL","href","window","location","from","matches","forms","beforeSend","before","Field","fldvar","validators","invalid","validator","addValidator","_proto","addError","_this$_error","_error","clearErrors","clearValidators","_element","shouldValidate","updateFeedback","resetInvalid","_this$_element","_this$_element$closes","classList","contains","server","fieldContainerSelector","innerHTML","errorMessage","_this$_element$closes2","feedback","setInvalid","focus","setFocus","canFocus","_el$style","_el$classList","hidden","readonly","disabled","display","get","_checkbox","checked","set","_this$_element2","activeElement","Form","_FormBase","_this","tryFocus","addField","fields","getField","addFields","apply","addCustomError","rowIndex","setFieldElement","delay","makeVisible","focusDelay","preventScroll","autoFocusPreventScroll","_focused","_this$_error2","getFocusable","getFieldElements","autoFocus","detailpage","querySelectorAll","_ew$forms$get","TABLE_BASIC_SEARCH","gotoPageByElement","$pane","validateFields","getCurrentRowIndex","row","_form$querySelector2","_e$currentTarget","validateRequired","updateSelected","addcnt","inlineAdd","currentTarget","keycnt","keyCount","gridinsert","rowcnt","_await$this$customVal","_this$customValidate","customValidate","returnFocus","detailpages","_await$frm$validate","frm","_this$getForm$dataset","getFieldValue","_ew$forms$get2","some","_this$getForm$querySe","FormBuilder","setId","setPageId","setLists","setQueryBuilderLists","autoFillTargetFields","childFields","filterFieldVars","filterFields","addList","setFields","setValidate","setCustomValidate","setValidateRequired","setSubmit","setFormKeyCountName","setEmptyRow","setMultiPage","setSubmitWithFetch","setFilterList","setInitSearchPanel","setEnableOnInit","build","MultiPage","context","AjaxLookup","_this$list$parentFiel","_this$list$parentFiel2","elementId","formElement","m","pf","debounce","recordCount","formatResult","opt","isAutoSuggest","jsRenderHelpers","displayValue","generateRequest","page","LANGUAGE_ID","getUserParams","getOptionValue","getUrl","query","start","params","URLSearchParams","q","n","rnd","random","toString","prepare","transform","results","totalRecordCount","records","toSelect2Data","every","item","hasOwnProperty","Set","gf","group","children","lf","df","df2","df3","df4","_isAutoSuggest","_assertThisInitialized","ReferenceError","_AjaxLookup","$input","minWidth","maxHeight","highlight","hint","minLength","classNames","forceSelection","forceSelect","lineHeight","paddingY","lookupAllDisplayFields","d","setValue","ta","isOpen","menu","empty","$item","getActiveSelectable","typeahead","close","timer","loadingMore","tpl","suggestion","footer","syncResults","asyncResults","cancel","getSyncResults","Infinity","$menu","$node","$dataset","suggestionHeight","outerHeight","suggestions","rendered","count","h","scrollTop","toggle","loadingMoreTimer","_loadingMoreTimer","$footer","_loadingMoreTimer2","offset","top","getMore","v","findIndex","option","selected","SelectionListOption","datasets","_append","Forms","_ew$getForm","_forms","f","ids","keys","lang","Select2Language","errorLoading","inputTooLong","overChars","maximum","inputTooShort","remainingChars","minimum","maximumSelected","noResults","searching","removeAllItems","removeItem","search","Utils$3","select2","amd","require","_defined","Select2ResultsDecorator","decorated","$results","displayMessage","escapeMarkup","hideLoading","$message","message","className","sort","cols","len","$row","last","$option","pagination","more","createElement","c","attrs","role","Element","msMatchesSelector","webkitMatchesSelector","_resultId","title","StoreData","Utils$2","ModalResults","container","_container$listeners$","listeners","pop","$highlighted","getHighlightedResults","GetData","_mousedown","$this","ModalSearch","$search","removeAttr","KEYS","$","PRINT_SCREEN","DropdownSearchDecorator","handleSearch","which","TAB","SHIFT","CTRL","ALT","_keyUpPrevented","term","Select2AttachBody","_AttachBody","_attachPositioningHandler","events","handler","_positionDropdown","_resizeDropdown","_detachPositioningHandler","_showDropdown","$dropdownContainer","$dropdownParent","_popper","Popper","createPopper","placement","IS_RTL","modifiers","enabled","_this$_popper2","update","_this$_popper3","ModalAttachBody","_bindContainerResultHandlers","stopPropagation","position","$dropdown","_containerResultsHandlersBound","$modal","_self$$search$","_updateDropdown","_e$originalEvent2","detach","end","oldValue","modal","event","draggable","FilterAttachBody","_hideDropdown","_this$_popper","outerWidth","_dropdownButton$close","contents","clone","triggerHandler","selection","_handleClear","$filterDropdown","dropdownButton","reference","DropdownAttachBody","_defined$1","AllowClear$1","Utils$1","FilterAllowClear","_AllowClear","_","isDisabled","$clear","$selection","previousVal","placeholder","unselectData","prevented","Select2MultipleSelectionDecorator","Select2DataAdapterDecorator","_data$element","ResultsList","SingleSelection","MultipleSelection","Placeholder","AllowClear","SelectionSearch","EventRelay","Utils","Translation","SelectData","ArrayData","AjaxData","Tags","Tokenizer","MinimumInputLength","MaximumInputLength","MaximumSelectionLength","Dropdown","DropdownSearch","HidePlaceholder","InfiniteScroll","MinimumResultsForSearch","SelectOnClose","CloseOnSelect","DropdownCSS","TagsSearchHighlight","Defaults","defaults","dataAdapter","Decorate","minimumInputLength","maximumInputLength","maximumSelectionLength","tags","tokenSeparators","tokenizer","resultsAdapter","columns","customOption","iconClass","templateResult","selectOptions","_templateResult","loading","selectOnClose","dropdownAdapter","minimumResultsForSearch","closeOnSelect","dropdownCssClass","dropdown","selectionAdapter","allowClear","translations","dir","currentUrl","URL","$document$1","$body","initIcons","_e$target","tooltipOptions","IS_MOBILE","tooltip","_bootstrap$Tooltip$ge","bootstrap","Tooltip","getInstance","initPasswordOptions","_e$target2","pStrength","MIN_PASSWORD_STRENGTH","changeBackground","backgrounds","passwordValidFrom","onPasswordStrengthChanged","strength","percentage","$pst","$pb","pct","valid","setValid","pGenerator","passwordLength","GENERATE_PASSWORD_LENGTH","uppercase","GENERATE_PASSWORD_UPPERCASE","lowercase","GENERATE_PASSWORD_LOWERCASE","numbers","GENERATE_PASSWORD_NUMBER","specialChars","GENERATE_PASSWORD_SPECIALCHARS","onPasswordGenerated","pwd","PATH_BASE","API_URL","qs","route","encodeURIComponent","_pathname","_hash","hash","searchParams","createSearchParams","getSearchParams","setSearchParams","mergeSearchParams","buildUrl","_len2","_key2","has","setSearchParam","deleteSearchParam","_len3","names","_key3","delete","PAGE_LAYOUT","sanitizeUrl","decodeURIComponent","initExportLinks","_e$target3","fileDownload","getchartParams","preventDefault","initMultiSelectCheckboxes","_e$target4","$cbs","_update","getError","_result$error","_result$error2","failureMessage","isHtml","API_EXPORT_ACTION","swal","Swal","fire","sweetAlertSettings","showConfirmButton","allowOutsideClick","allowEscapeKey","willOpen","showLoading","_fetch","ct","headers","_getError","json","blob","createObjectURL","Blob","a","cd","download","appendChild","click","objectUrl","revokeObjectURL","catch","lazyLoad","_e$target5","LAZY_LOAD","img","LAZY_LOAD_DELAY","src","initLightboxes","_e$target6","USE_COLORBOX","lightboxSettings","current","previous","xhrError","imgError","colorbox","rel","initPdfObjects","_e$target7","EMBED_PDF","PDFObjectOptions","PDFObject","embed","fallbackLink","initTooltips","_e$target8","popover","popoverOptions","tippy","content","tippyOptions","parseJson","searchOperatorChange","parm","$fld","$fld2","hasY","$cond","hasCond","$and","opr","$opr2","opr2","isBetween","isEmptyOpr","isEmptyOpr2","hideOpr2","hideX","hideY","initForms","_e$target9","isFunction$2","_alert","cb","config","confirmButtonText","customClass","htmlContainer","show","isConfirmed","_prompt","cfg","_config","showCancelButton","cancelButtonText","inputValidator","toast","toastOptions","Toasts","first","showToast","class","autohide","autoHideSuccessMessage","autoHideSuccessMessageDelay","$f","parentId","change","_obj","_batch$send","els","getId","isTextbox","isFilter","$elf","typ","elf","_updateOptions","autoFill","fo","frmo","arp","$obj","clearOptions","addOpt","newOption","selectOption","_updateSibling","isBoolean","ds","isNativeSelectOne","isModalLookup","MULTIPLE_OPTION_SEPARATOR","jqXHR","textStatus","errorThrown","root","exportCustom","divId","exportType","tblVar","_div$children$","div","customexport","exportEmail","convertToBool","charts","exportCharts","chart","chartEngine","streamType","stream","toBase64Image","fileName","_export","export","exportSelected","emailForm","keySelected","postParams","_document$querySelect","$iframe","isHiddenTextArea","_el$dataset","modalLookup","_el$dataset2","isSelect2","isBooleanCheckbox","isHidden","reset","once","MOBILE_DETECT","version","scrollIntoView","selectAll","clearSelected","tbl","rowIndexes","rows","clearDelete","$tr","siblings","addBack","clickDelete","setupTable","force","HTMLTableElement","$tbl","$rows","isset","tBodies","$target","cells","parentsUntil","RESPONSIVE_TABLE_CLASS","cell","rowSpan","clientHeight","offsetHeight","attach","$r","setupGrid","grid","$grid","$cells","htmlDecode","$root","selectors","getFieldSelector","table","s1","s2","flatMap","tag","sel","eq","getAncestorBy","node","parentNode","_node","nodeType","o1","o2","headerCase","str","charAt","samePath","p1","p2","ar1","ar2","LIST_ACTION","VIEW_ACTION","EDIT_ACTION","isValue","getOptionTexts","lo","hasAttribute","removeAll","valueSeparator","sep","reduce","addOption","_obj$querySelector","optGroup","g","label","_obj$dataset","_forms$get$getList","_obj$options$","selectedIndex","opts","autoselect","_init$headers","Headers","API_JWT_TOKEN","API_JWT_AUTHORIZATION_HEADER","FormData","executeScript","replaceAll","matchAll","createRange","createContextualFragment","s","addScript","stripScript","scr","HTMLScriptElement","removeScript","getContent","keepScripts","_m$","$content","getOptions","modalDialogHide","$dlg","removeData","showing","reload","dest_array","destEl","v0","pid","p","post","$tt","trig","Popover","wd","_getTipElement","initSearchFilters","_e$target11","btn","IS_LOGGEDIN","IS_SYS_ADMIN","CURRENT_USER_NAME","_frm$filterList$filte","_frm$filterList","formId","getItem","_ref3","_ref4","copyToClipboard","_source","_source2","innerText","left","select","execCommand","removeChild","object_value","showMessage","arg","_arg$target","doc","$div","$alert","$heading","w","$toast","Math","floor","Pace","_forms$get","jqxhr","isApi","allowed","hostname","setRequestHeader","lastPageSubmit","Interval","dt","fromSQL","fromSeconds","toFormat","locale","numberingSystem","getNumberingSystem","parseDateTime","fromFormat","redirect","_ew$vars","newUrl","vars","login","protocol","host","isMediumScreen","matchMedia","screenMediaQuery","promise","dashboard","$overlay","overlayTemplate","Response","validation","CardRefresh","warningMessage","successMessage","$html","unshift","history","pushState","$old","$new","$tmpl","$searchType","TABLE_BASIC_SEARCH_TYPE","replaceWith","initPage","_bootstrap$Tooltip$ge7","_fixLayoutHeightTimer","functions","Select2Defaults","Select2Utils","addEventHandlers","fldVar","addGridRow","_bootstrap$Tooltip$ge2","$tpl","$lastrow","suffix","$keycnt","FORM_KEY_COUNT_NAME","FORM_ROW_ACTION_NAME","attributes","$btn","dispose","after","scrollHeight","addOptionDialogShow","_args$evt2","lnk","addOptionDialog","_submitSuccess","_results","objName","API_OBJECT_NAME","re","linkField","dfs","displayFields","ffs","pfs","lfv","ff","txt","obj2","_results2","_results3","_fail","_submit","API_ADD_ACTION","nodeName","callback","_convert","API_LIST_ACTION","API_VIEW_ACTION","API_DELETE_ACTION","responseJSON","applyTemplate","tmplId","classId","isModal","_parent$querySelector","subtmpl","rowspan","childNodes","cloneNode","views","textContent","hasTag","jsRenderAttributes","scripts","tmpl","creditcard_string","tempdigit","doubledigit","checkdigit","isValid","email_cnt","arEmails","DECIMAL_SEPARATOR","min_value","max_value","clearError","jquery","confirmDelete","modalDialogShow","createFilter","selectId","lookup","processResults","_data$records$length3","_data$records3","transport","failure","$select","_$$data$$dropdown$fin3","createModalLookup","_data$records$length2","_data$records2","_$$data$$dropdown$fin2","createSelect","_data$records$length","_data$records","_$$data$$dropdown$fin","deleteGridRow","infix","_bootstrap$Tooltip$ge3","rowidx","_delete","$keyact","disable2FA","preConfirm","API_2FA_ACTION","API_2FA_RESET","_result$error8","_result$error9","emailDialogShow","emailDialog","_e$target$querySelect","_$$closest$find$data","MAX_EMAIL_RECIPIENT","hdr","enable2FA","TWO_FACTOR_AUTHENTICATION_TYPE","API_2FA_SHOW","_result$error4","imageUrl","showLoaderOnConfirm","isLoading","getConfirmButton","disableInput","getImage","onload","enableInput","getInput","API_2FA_VERIFY","Error","showValidationMessage","_result$error3","_result$error7","inputValue","account","API_2FA_SEND_OTP","_result$error5","_result$error6","fixLayoutHeight","layout","formatCurrency","CURRENCY_FORMAT","formats","getLocaleFromPlatform","NUMBERING_SYSTEM","numeralSystem","delimiters","thousands","GROUPING_SEPARATOR","decimal","currency","CURRENCY_SYMBOL","formatNumber","NUMBER_FORMAT","formatPercent","PERCENT_FORMAT","formatTimeSpan","allDay","to","equals","startOf","minus","interval","days","isInteger","Intl","NumberFormat","resolvedOptions","getQueryBuilderFilterInput","rule","_document$getElementB","_span$innerHTML$repla","span","queryBuilderErrorClass","$0","$1","$2","getQueryBuilderFilterValidation","$value","errors","operator","nb_inputs","$invalid","getQueryBuilderValueSetter","getSearchParam","htmlEncode","importDialogShow","_args$evt6","_bootstrap$Tooltip$ge5","importDialog","sse","$dropzone","$bd","$data","$progress","classname","$msg","hideMessage","showProgress","pc","updateProgress","tcnt","totalCount","scnt","successCount","fcnt","failCount","filename","file","addRow","_index","_success","initialized","Tabulator","autoColumns","autoColumnsDefinitions","definitions","column","headerSort","resizable","visible","headerSortTristate","formatter","textOverflow","getRow","getData","importTabulatorOptions","importComplete","_sse","fileResults","files","fileResult","rollbacked","IMPORT_MAX_FAILURES","saveImport","importFail","_sse2","_table2","clearData","API_ACTION_NAME","API_IMPORT_ACTION","API_FILE_TOKEN_NAME","EventSource","addEventListener","importUploadOptions","acceptFileTypes","IMPORT_FILE_ALLOWED_EXTENSIONS","fileupload","API_UPLOAD_ACTION","autoUpload","singleFileUploads","dropZone","messages","maxFileSize","maxNumberOfFiles","minFileSize","SESSION_ID","_data$result","importfiles","filetoken","_table","importFiles","processfail","progressall","loaded","total","uploadProgress","_this$querySelector","_table3","_table4","removeAttribute","_e$target12","$tables","initPanels","renderJsTemplates","_localStorage$getItem","inputs","$rpt","mh","toggleGroup","USE_JAVASCRIPT_MESSAGE","inlineAction","_args$evt","$detached","ewAction","$record","curindex","_always","_deleted","_disableInlineButtons","_enableInlineButtons","_getTable","_updateRowIndexes","inline","rowtype","Promise","resolve","prepend","$main","ROWTYPE_VIEW","ROWTYPE_ADD","returnUrl","_$grid$data","isFunction","isMobile","_args$evt3","_bootstrap$Tooltip$ge4","_args$evt4","_args$evt5","_$dlg$data","_$dlg$data2","modalDialog","size","_caption","$lnk","caption","_hide","handleResult","_lnk$closest","_lnk$closest2","_tabPane$parentNode","btnId","tabPane","navItem","_current","view","_createButtons","_button","_return","_resp$headers$get","resp","isJson","hasErrors","lnkData","$dlglnk","stopImmediatePropagation","Modal","_focustrap","__handleFocusin","_handleFocusin","_e$target10","Accept","parseTime","removeSpaces","sameString","selectAllKeys","selectKey","chk","sendOTP","_result$error11","_result$error12","setActiveUser","setLanguage","setSearchType","searchType","phraseId","setSessionTimer","timeoutTime","keepAliveTimer","counter","keepAlive","API_SESSION_ACTION","token","setTimer","resetTimer","_timer","SESSION_TIMEOUT_COUNTDOWN","SESSION_TIMEOUT","doTimeout","TIMEOUT_URL","timeout","_keepAliveTimer","timerInterval","timerProgressBar","setInterval","getHtmlContainer","sec","timeleft","round","getTimerLeft","willClose","clearInterval","dismiss","DismissReason","_ew$vars$login","SESSION_KEEP_ALIVE_INTERVAL","IS_AUTOLOGIN","keepAliveInterval","MIN_SESSION_KEEP_ALIVE_INTERVAL","showBackupCodes","showDenyButton","showLoaderOnDeny","denyButtonText","denyButton","disableButtons","API_2FA_BACKUP_CODES","codes","enableButtons","preDeny","getDenyButton","API_2FA_NEW_BACKUP_CODES","showDrillDown","ctrlKey","spinnerTemplate","draggableOptions","boundary","cache","$tip","responseText","_result$error13","_result$error14","setContent","sortUrl","sortType","shiftKey","ctrl","submitAction","_window$msg","isPostBack","isMultiple","isDismissed","toggleChat","API_CHAT_ACTION","_result$error10","idx","toggleLayout","_bootstrap$Tooltip$ge6","togglePassword","$i","toggleSearchOperator","updateChart","$debug","updateDropdownPosition","prev","nid","$ft","$fn","$fa","$label","_confirmDelete","confirm","uploadUrl","API_JQUERY_UPLOAD_ACTION","_downloadTemplate","_uploadTemplate","formData","session","deepAssign","multipart","loadImageFileTypes","loadVideoFileTypes","loadAudioFileTypes","filesContainer","uploadTemplateId","downloadTemplateId","uploadTemplate","downloadTemplate","previewMaxWidth","UPLOAD_THUMBNAIL_WIDTH","previewMaxHeight","UPLOAD_THUMBNAIL_HEIGHT","uploadOptions","MULTIPLE_UPLOAD_SEPARATOR","fid","indexOf","_data$files","l","_data$files2","_data$result2","_data$files3","valueChanged","fobj","fld","bool","oldEl","fnEl","fullCalendar$1","fullCalendar","calendar","updateTable","eventFields","addUrl","viewUrl","editUrl","deleteUrl","copyUrl","fullCalendarOptions","eventPopoverOptions","processJson","convertValue","_calendar$getEventByI","getEventById","addEvent","curEvent","groupId","setStart","setEnd","setAllDay","setExtendedProp","setProp","processEvent","info","relatedEvents","apiAction","API_EDIT_ACTION","processRequest","revert","reject","toPlainObject","collapseExtendedProps","toISOString","apiUrl","getFldParm","currentTable","urlAddId","addEventDialogShow","startStr","endStr","startFld","endFld","viewEventDialogShow","customButtons","headerToolbar","bsDropdown","getOrCreatePopover","Default","getOrCreateInstance","seq","shift","_Array$from$find$repl","_Array$from$find","popoverClass","_templateFactory","generateGetBoundingClientRect","y","rect","getBoundingClientRect","jsEvent","offsetX","offsetY","height","right","bottom","virtualElement","useContextMenu","bsToggle","clearMenus","_menu","eventId","editEventDialogShow","deleteEvent","drop","draggedEl","eventReceive","eventDragStart","_bootstrap$Popover$ge","eventDrop","eventResize","eventClick","button","extendedProps","_bootstrap$Popover$ge2","open","usePopover","_getOrCreatePopover","showViewPageOnEventClick","eventMouseEnter","_bsDropdown","_getOrCreatePopover2","_isShown","popoverViews","eventMouseLeave","_bsDropdown2","_bootstrap$Popover$ge3","FullCalendar","Calendar","isPushNotificationSupported","navigator","urlBase64ToUint8Array","base64String","base64","repeat","rawData","atob","outputArray","Uint8Array","charCodeAt","sendSubscriptionToServer","subscription","getKey","contentEncoding","PushManager","supportedContentEncodings","endpoint","btoa","fromCharCode","createSubscription","API_PUSH_NOTIFICATION_ACTION","API_PUSH_NOTIFICATION_SUBSCRIBE","serviceWorkerReg","serviceWorker","pushManager","subscribe","userVisibleOnly","applicationServerKey","PUSH_SERVER_PUBLIC_KEY","getSubscription","setSubscription","inst","subscribeNotification","Notification","permission","_await$getSubscriptio","requestPermission","_document$getElementB2","checkSubscription","unsubscribeNotification","res","unsubscribe","API_PUSH_NOTIFICATION_DELETE","register","SERVICE_WORKER","scope","webpush","pushNotificationDialogShow","pushDialog","successes","acc","cur","failures","inited","latlng","useSingleMap","showAllMarkers","useMarkerClusterer","ext","maps","singleMapHeight","singleMapWidth","showMapOnTop","createMap","createBounds","createMarkerClusterer","marker","createMarker","fitBounds","promises","address","geocodingDelay","geocode","latitude","longitude","coordinate","parseFloat","isNaN","createLatLng","all","MobileDetect","userAgent","mobile","formid","formID","pageIndex","maxPageIndex","minPageIndex","pageIndexes","$pages","$collapses","isTab","isCollapse","hideDisabledButton","hideInactivePages","lockTabs","hideTabs","showPagerTop","showPagerBottom","pagerTemplate","_show","_properties","pageShow","gotoPage","$page","gotoPageByIndex","gotoPageByElementId","togglePage","$tabs","google","setCenter","$bodies","$document","_$$offset","debugMode","DEBUG","animate","panel","Collapse","actions","_this$form","pageSize","zIndex","blueimp","processQueue","fileTypes","cropperOptions","cropperCanvasOptions","widget","processActions","cropImage","dfd","Deferred","that","cropperDialog","Cropper","getCroppedCanvas","toBlob","File","resolveWith","rejectWith","isFinite","isDate","periodic","clearTimeout","rec","_this$data$substring","_this$data","_this$data2","_this$data$substring2","_this$data3","_this$data4","toNumber","toDate","_ew$vars$tables","tables","clientFormatPattern","toJsDate","toJSDate","mutationList","mutation","MutationObserver","observe","_parent","attributeFilter","attributeOldValue","subtree","$chatWrapper","$chatCheck","$chatBtn","$chatClose","$chatComment","$chatCard","$chatHeader","$chatCollapse","$chatBody","$chatIframe","_Pace","running","iframe","queue","dequeue","contentDocument","isNil$1","isFunction$1","isNaNNumber$1","isFiniteNumber$1","multiplyByPowerOfTen$1","number","powerOfTenExponent","NaN","numAsString","indexOfE","log10$1","numberThatIsPowerOfTen","LOG10E","toObject$1","arr","entriesResolver","object","escapeRegexString$1","string","memoize$1","cacheKey","powerOf10LookupObject","currentValue","additionalZeros","isPowerOfTen$1","toBase","valueUnit","unitScale","base","scale","toBaseMultiplier","convertUnit","originUnit","targetUnit","valueAsBase","resolvedScale","conversionFactorFromBase","unitScaleDefinition","unit","convert","toBest","exclude","cutOffNumber","best","scaleUnit","absoluteResult","abs","scaleDefinition","stringRepeat$1","createUnitScaleFromLocaleAbbreviations$1","scaleItem","scaleItemIndex","formattedStringToNumber$1","inputString","_a","stringOriginal","stringWithLatinDigits","numericStringWithExtraInfo","numeralSystemMap","numericStringLength","numeralSystemToLatinSystemMap","digit","digitIndex","output","numericStringIndex","char","replaceNumeralSystemWithLatinNumbers","zeroFormat","nullFormat","decimalDelimiterFromLocale","stringWithDotDecimalDelimiter","abbreviationScalingFactor","abbreviations","abbreviationsSortedByLengthDesc","abbreviation","scapedAbbreviationForRegex","regexp","getScalingFactorFromAbbreviations","negativeFactor","numberAsString","locale$1","code","ordinal","merge","newObject","argsLength","isObject$1","isString$1","truncateNumber$1","ceil","getPatternParts","patternMask","isInEscapedPart","currentEscapedWord","parts","escaped","patternIncludes","patternRemoveEscapedText","patternReplace","searchValue","replaceValue","stringIncludes$1","signRule$1","patternWithoutEscapedText","negativeParentheses","forceSign","outputPatternMask","abbreviationRule$1","compactUnit","compact","abbreviationRegExpResult","compactAuto","splitStringInTwoParts$1","separator","indexOfSearchChar","countChars","stringChar","decimalPlacesRule$1","patternPrecisionPart","minimumFractionDigits","maximumFractionDigits","trimmedPatternPrecisionPart","patternPrecisionPartWithoutClosingBracket","precisionSplitted","fractionDigits","optionalDecimalPlacesRule$1","optionalFractionDigits","parsePattern$1","inputPattern","resolvedInputPattern","patternMaskAfterSignRule","signRules","patternMaskAfterAbbreviationRule","abbreviationRules","patternMaskAfterOptionalDecimalPlacesRule","optionalDecimalPlacesRules","outputPatternMaskWithoutEscapedText","decimalPlacesRules","minimumIntegerDigits","patternMaskIntegerPart","minimumIntegerDigitsRule","grouping","patternMaskAfterHandlingNumberPosition","numberPositionRule","patternMaskWithEnsuredSignPosition","addSignPositionIfItDoesNotExists","removeSignIfExists$1","valueAsString","rescaleRoundedValue$1","currentAbbreviationScale","patternRules","newScaledValue","newScaledValueUnit","scaleValueWithAbbreviation$1","forcedAbbreviationUnit","abbreviationsFromLocale","targetPowerOfTenExponent","k","scaleDefinitionFromLocale","closestPowerOfTenWithAvailableAbbreviation","distanceFromTarget","resolveForcedAbbreviationUnit","scaledValue","localizedUnit","roundNumber$1","precision","roundingFunction","resolvedPrecision","roundedScaledValue","numberToNonExponentialString$1","significand","exponent","exponentAsNumber","integerPartOfSignificand","fractionalPartOfSignificand","numberOfZerosToAdd","formatPositiveExponentResult","significandAsString","negativeExponentAbsoluteValue","outputIntegerPartOfSignificand","outputFractionalPartOfSignificand","firstCharInIntegerPart","formatNegativeExponentResult","numberToFixed$1","finiteNumber","fractionalPartOfValueAsString","targetFractionDigitsAmount","roundedValue","integerPart","fractionalPart","addTrailingZerosInFractionalPart","roundValueAndAddTrailingZeros$1","rounding","resolvedRoundingFunction","replaceDigitsWithNumeralSystem$1","numericString","addOrRemoveLeadingZerosToValue$1","valueIntegerPartWithoutSign","addSignInfoToFullFormattedNumber$1","fullFormattedValueWithoutSign","isValueNegative","isValueZero","splitNumberIntegerAndDecimalParts$1","decimalPart","addThousandsSeparatorToValueIntegerPart$1","valueIntegerPartWithLeadingZerosAndWithoutSign","digitGroupingStyle","thousandsSeparator","restDigitGrouping","groupingSubIteration","applyAbbreviationLocalizedUnitToPatternMask$1","abbreviationLocalizedUnit","hasAbbreviationInPatternMask","numberToFormattedNumber$1","resolvedValue","localizedAbbreviationUnit","scaledValueLocalizedUnit","rescaledValue","rescaledValueLocalizedUnit","scaleAndRoundValue","signedZero","valueAsStringWithoutSign","valueIntegerPartWithLeadingZeros","valueIntegerPartWithThousandsSeparator","numeralSystemFromLocale","integerPartWithNumeralSystem","decimalPartWithNumeralSystem","fullNumberWithNumeralSystem","patternMaskWithNumber","cleanPatternMask","bpsFormatter$1","regexps","unformat","patternWithEscapedBPS","timeFormatter$1","absoluteValue","sign","hours","minutes","seconds","isNegative","timeArray","reverse","decimalSuffixes","binarySuffixes","unformatRegex","concat","bytesDecimalScale","unitIndex","pow","bytesBinaryScale","currencySymbolsMap","EUR","USD","XCD","AUD","INR","BRL","CAD","XAF","CNY","NZD","XPF","GBP","HKD","ILS","JPY","KRW","XOF","MXN","TWD","VND","BUILT_IN_FORMATTERS$1","hasNotScalePercentageSymbolInPattern","scalePercentage","patternWithEscapedPercentage","currencyFromOptions","localizedCurrencySymbol","patternWithEscapedCurrencySymbol","_b","localizedOrdinal","patternWithEscapedOrdinal","scaledValueUnit","patternWithEscapedBytes","exponential","toExponential","patternWithoutExponential","roundHalfAwayFromZero$1","resolveFormatOptions$1","formatOptions","_c","roundingOption","resolveRoundingOption","resolvedLocale","optionsLocale","defaultLocale","resolveOptionsLocale","resolvedFormatters","optionsFormatters","formatters","defaultPattern","nanFormat","nonBreakingSpace","parse$1$1","inputStringWithNormalSpaces","unformatFunctionFromFormatters","matcher","getUnformatFunctionIfMatch","parse$1","round$1","format$1$1","resolvedPattern","resolvedValueAsNumber","formatFunctionFromFormatters","getFormatFunctionIfMatch","_errorFormat","arg2","arg3","withOptions","baseOptions","optionsFromArguments","unique$1","rtlCharsRanges","rtlDirCheck","appendLeftToRightMarkIfIsRTL","isRTL","languagesWith4DigitsGroupingStyle","getAbbreviations","languageTag","digits","intlFormatOptions","notation","useGrouping","compactDisplay","digitOfZero","digitOfOne","digitOfTwo","abbreviationResultForOne","toLocaleString","abbreviationResultForTwo","abbreviationOne","abbreviationTwo","resultIndex","_err","getLocaleFromPlatform$1$1","resolvedLanguageTag","localizedNumber","lookupObject","repeatedChar","digitsAsArray","getNumeralSystemDigits","resolvedDigits","localizedNumberWithoutDigits","groupingDelimiter","fractionDelimiter","getGroupingAndFractionDelimiters","groupingStyle","subIterationIndex","digitOrGroupingDelimiter","getGroupingStyle","shortAbbreviations","_abbreviationsLong","numerable","jQuery"],"sources":["dist/js/ew.js"],"sourcesContent":["/*!\n * JavaScript for PHPMaker v24.16.0\n * Copyright (c) e.World Technology Limited. All rights reserved.\n */\n(function (ew$1, $$1, luxon) {\n 'use strict';\n\n function MultiPage(formid) {\r\n var self = this;\r\n this.$form = null;\r\n this.formID = formid;\r\n this.pageIndex = 1;\r\n this.maxPageIndex = 0;\r\n this.minPageIndex = 0;\r\n this.pageIndexes = [];\r\n this.$pages = null;\r\n this.$collapses = null;\r\n this.isTab = false; // Is tabs\r\n this.isCollapse = false; // Is collapses (accordion)\r\n this.lastPageSubmit = false; // Enable submit button for the last page only\r\n this.hideDisabledButton = false; // Hide disabled submit button\r\n this.hideInactivePages = false; // Hide inactive pages\r\n this.lockTabs = false; // Set inactive tabs as disabled\r\n this.hideTabs = false; // Hide all tabs\r\n this.showPagerTop = false; // Show pager at top\r\n this.showPagerBottom = false; // Show pager at bottom\r\n this.pagerTemplate = '<nav><ul class=\"pagination\"><li class=\"page-item previous ew-prev\"><a href=\"#\" class=\"page-link\"><i class=\"fa-solid fa-angle-left\"></i> {Prev}</a></li><li class=\"page-item next ew-next\"><a href=\"#\" class=\"page-link\">{Next} <i class=\"fa-solid fa-angle-right\"></i></a></li></ul></nav>'; // Pager template\r\n\r\n // \"show\" handler (for disabled tabs)\r\n var _show = function (e) {\r\n e.preventDefault();\r\n };\r\n\r\n // Set properties\r\n var _properties = [\"lastPageSubmit\", \"hideDisabledButton\", \"hideInactivePages\", \"lockTabs\", \"hideTabs\", \"showPagerTop\", \"showPagerBottom\", \"pagerTemplate\"];\r\n this.set = function () {\r\n if (arguments.length == 1 && $$1.isObject(arguments[0])) {\r\n var obj = arguments[0];\r\n for (var i in obj) {\r\n var p = i[0].toLowerCase() + i.substring(1); // Camel case\r\n if (_properties.includes(p)) this[p] = obj[i];\r\n }\r\n }\r\n };\r\n\r\n // DOM loaded\r\n this.init = function () {\r\n var tpl = this.pagerTemplate.replace(/\\{prev\\}/i, ew.language.phrase(\"Prev\")).replace(/\\{next\\}/i, ew.language.phrase(\"Next\"));\r\n if (this.isTab) {\r\n if (this.showPagerTop) this.$pages.closest(\".ew-nav\").before(tpl);\r\n if (this.showPagerBottom) this.$pages.closest(\".ew-nav\").after(tpl);\r\n this.$form.find(\".ew-prev\").click(function (e) {\r\n self.$pages.off(\"show.bs.tab\", _show).filter(\".active\").parent().prev(\":has([data-bs-toggle=tab]:not(.ew-hidden):not(.ew-disabled))\").find(\"[data-bs-toggle=tab]\").toggleClass(\"disabled d-none\", false).click();\r\n return false;\r\n });\r\n this.$form.find(\".ew-next\").click(function (e) {\r\n self.$pages.off(\"show.bs.tab\", _show).filter(\".active\").parent().next(\":has([data-bs-toggle=tab]:not(.ew-hidden):not(.ew-disabled))\").find(\"[data-bs-toggle=tab]\").toggleClass(\"disabled d-none\", false).click();\r\n return false;\r\n });\r\n if (this.hideTabs) this.$form.find(\".ew-multi-page > .ew-nav > .nav\").hide();\r\n } else if (this.isCollapse) {\r\n if (this.showPagerTop) this.$collapses.closest(\".ew-accordion\").before(tpl);\r\n if (this.showPagerBottom) this.$collapses.closest(\".ew-accordion\").after(tpl);\r\n this.$form.find(\".ew-prev\").click(function (e) {\r\n self.$pages.closest(\".accordion-item\").filter(\":has(.collapse.show)\").prev(\":has([data-bs-toggle=collapse]:not(.ew-hidden):not(.ew-disabled))\").toggleClass(\"disabled d-none\", false).find(\"[data-bs-toggle=collapse]\").click();\r\n return false;\r\n });\r\n this.$form.find(\".ew-next\").click(function (e) {\r\n self.$pages.closest(\".accordion-item\").filter(\":has(.collapse.show)\").next(\":has([data-bs-toggle=collapse]:not(.ew-hidden):not(.ew-disabled))\").toggleClass(\"disabled d-none\", false).find(\"[data-bs-toggle=collapse]\").click();\r\n return false;\r\n });\r\n }\r\n this.pageShow();\r\n };\r\n\r\n // Page show\r\n this.pageShow = function () {\r\n if (this.isTab) {\r\n if (this.lockTabs) this.$pages.on(\"show.bs.tab\", _show);\r\n this.$pages.each(function () {\r\n var $this = $$1(this);\r\n if (self.hideInactivePages) $this.toggleClass(\"d-none\", !$this.hasClass(\"active\"));\r\n if (self.lockTabs) $this.toggleClass(\"disabled\", !$this.hasClass(\"active\"));\r\n });\r\n } else if (this.isCollapse) {\r\n this.$pages.closest(\".accordion-item\").each(function () {\r\n var $this = $$1(this);\r\n if (self.hideInactivePages) $this.toggleClass(\"d-none\", !$this.find(\".collapse.show\")[0]);\r\n });\r\n }\r\n var disabled = this.lastPageSubmit && this.pageIndex != this.maxPageIndex;\r\n var $btn = this.$form.closest(\".content, .modal-content\").find(\"#btn-action, button.ew-submit\").prop(\"disabled\", disabled).toggle(!this.hideDisabledButton || !disabled);\r\n $$1(\".ew-captcha\").toggle($btn.is(\":visible:not(:disabled)\")); // Re-captcha uses class \"disabled\", not \"disabled\" property.\r\n disabled = this.pageIndex <= this.minPageIndex;\r\n this.$form.find(\".ew-prev\").toggleClass(\"disabled\", disabled);\r\n disabled = this.pageIndex >= this.maxPageIndex;\r\n this.$form.find(\".ew-next\").toggleClass(\"disabled\", disabled);\r\n };\r\n\r\n // Go to page by index\r\n this.gotoPage = function (i) {\r\n if (i <= 0 || i < this.minPageIndex || i > this.maxPageIndex) return;\r\n if (this.pageIndex != i) {\r\n var $page = this.$pages.eq(i - 1);\r\n if (this.isTab) {\r\n if ($page.is(\":not(.d-none):not(.disabled)\")) $page.click();else $page.parent().next(\":has([data-bs-toggle=tab]):not(.d-none):not(.disabled)\").find(\"[data-bs-toggle=tab]\").toggleClass(\"disabled\", false).click();\r\n } else if (this.isCollapse) {\r\n var $p = $page.closest(\".accordion-item\");\r\n if ($p.is(\":not(.d-none)\")) $page.click();else $p.next(\":has([data-bs-toggle=collapse]):not(.d-none)\").find(\"[data-bs-toggle=collapse]\").click();\r\n }\r\n this.pageIndex = i;\r\n }\r\n };\r\n this.gotoPageByIndex = this.gotoPage;\r\n\r\n // Go to page by element\r\n this.gotoPageByElement = function (el) {\r\n this.gotoPage(parseInt($$1(el).data(\"page\"), 10) || -1);\r\n };\r\n\r\n // Go to page by element's id or name or data-field attribute\r\n this.gotoPageByElementId = function (id) {\r\n var $el = this.$form.find(\"[data-page]\").filter(\"[id='\" + id + \"'],[name='\" + id + \"'],[data-field='\" + id + \"']\");\r\n this.gotoPageByElement($el);\r\n };\r\n\r\n // Toggle page\r\n this.togglePage = function (i, show) {\r\n if (this.isTab) {\r\n this.$pages.eq(i - 1).toggleClass(\"d-none\", !show);\r\n } else if (this.isCollapse) {\r\n this.$pages.eq(i - 1).closest(\".accordion-item\").toggle(\"d-none\", !show);\r\n }\r\n };\r\n\r\n // Render\r\n this.render = function () {\r\n this.$form = $$1(\"#\" + formid);\r\n this.pageIndexes = this.$form.find(\"[data-page]\").map(function () {\r\n var index = parseInt(this.dataset.page, 10);\r\n return index > 0 ? index : null;\r\n }).get();\r\n this.pageIndexes.sort(function (a, b) {\r\n return a - b;\r\n });\r\n this.minPageIndex = this.pageIndexes[0];\r\n this.maxPageIndex = this.pageIndexes[this.pageIndexes.length - 1];\r\n var $tabs = this.$form.find(\"[data-bs-toggle=tab]\");\r\n if ($tabs[0]) {\r\n this.$pages = $tabs;\r\n this.isTab = true;\r\n $tabs.on(\"shown.bs.tab\", function (e) {\r\n self.pageIndex = $tabs.index(e.target) + 1;\r\n self.pageShow();\r\n $$1($$1(this).attr(\"href\")).find(\".ew-map\").each(function () {\r\n var m = ew.maps[this.id];\r\n if (m != null && m[\"map\"]) {\r\n google.maps.event.trigger(m[\"map\"], \"resize\");\r\n m[\"map\"].setCenter(m[\"latlng\"]);\r\n }\r\n });\r\n });\r\n this.pageIndex = $tabs.index($tabs.parent(\".active\")) + 1;\r\n } else {\r\n this.$collapses = this.$form.find(\"[data-bs-toggle=collapse]\");\r\n if (this.$collapses[0]) {\r\n this.$pages = this.$collapses;\r\n this.isCollapse = true;\r\n var $bodies = this.$collapses;\r\n $bodies.on(\"shown.bs.collapse\", function (e) {\r\n self.pageIndex = $bodies.index(e.target) + 1;\r\n self.pageShow();\r\n $$1(this).find(\".ew-map\").each(function () {\r\n var m = ew.maps[this.id];\r\n if (m != null && m[\"map\"]) {\r\n google.maps.event.trigger(m[\"map\"], \"resize\");\r\n m[\"map\"].setCenter(m[\"latlng\"]);\r\n }\r\n });\r\n });\r\n this.pageIndex = $bodies.index($bodies.hasClass(\"show\")) + 1;\r\n }\r\n }\r\n $$1(function () {\r\n self.init();\r\n });\r\n };\r\n }\n\n let DateTime$1 = luxon.DateTime;\r\n\r\n /**\r\n * User level ID validator\r\n */\r\n function userLevelId(el) {\r\n if (el && !ew.checkInteger(el.value)) return {\r\n userLevelId: ew.language.phrase(\"UserLevelIDInteger\")\r\n };\r\n let level = parseInt(el.value, 10);\r\n if (level < 1) return {\r\n userLevelId: ew.language.phrase(\"UserLevelIDIncorrect\")\r\n };\r\n return false;\r\n }\r\n\r\n /**\r\n * User level name validator\r\n * @param {string} id User ID Field input element ID\r\n */\r\n function userLevelName(id) {\r\n return function (el) {\r\n let elId = document.getElementById(\"x_\" + id);\r\n if (elId && el) {\r\n let name = el.value.trim(),\r\n level = parseInt(elId.value.trim(), 10);\r\n if (level === 0 && !ew.sameText(name, \"Default\")) {\r\n return {\r\n userLevelName: ew.language.phrase(\"UserLevelDefaultName\")\r\n };\r\n } else if (level === -1 && !ew.sameText(name, \"Administrator\")) {\r\n return {\r\n userLevelName: ew.language.phrase(\"UserLevelAdministratorName\")\r\n };\r\n } else if (level === -2 && !ew.sameText(name, \"Anonymous\")) {\r\n return {\r\n userLevelName: ew.language.phrase(\"UserLevelAnonymousName\")\r\n };\r\n } else if (level > 0 && [\"anonymous\", \"administrator\", \"default\"].includes(name.toLowerCase())) {\r\n return {\r\n userLevelName: ew.language.phrase(\"UserLevelNameIncorrect\")\r\n };\r\n }\r\n }\r\n return false;\r\n };\r\n }\r\n\r\n /**\r\n * Required validator\r\n */\r\n function required(fieldName) {\r\n return function (el) {\r\n var _$el$data;\r\n let $el = $$1(el),\r\n $p = $el.closest(\"#r_\" + ((_$el$data = $el.data(\"field\")) == null ? void 0 : _$el$data.substring(2))); // Find the row\r\n if (!$p[0]) $p = $el.closest(\"[id^=el]\"); // Find the span\r\n if ($p.css(\"display\") == \"none\") {\r\n // Hidden by .visible()\r\n return false;\r\n }\r\n if (el && !ew.hasValue(el)) {\r\n return {\r\n required: ew.language.phrase(\"EnterRequiredField\").replace(\"%s\", fieldName)\r\n };\r\n }\r\n return false;\r\n };\r\n }\r\n\r\n /**\r\n * File required validator\r\n */\r\n function fileRequired(fieldName) {\r\n return function (el) {\r\n let elFn = document.getElementById(\"fn_\" + el.id);\r\n if (elFn && !ew.hasValue(elFn)) {\r\n return {\r\n fileRequired: ew.language.phrase(\"EnterRequiredField\").replace(\"%s\", fieldName)\r\n };\r\n }\r\n return false;\r\n };\r\n }\r\n\r\n /**\r\n * Mismatch password validator\r\n */\r\n function mismatchPassword(el) {\r\n let id;\r\n if (el.id.startsWith(\"c_\"))\r\n // Confirm Password field in Register page\r\n id = el.id.replace(/^c_/, \"x_\");else if (el.id == \"cpwd\")\r\n // Change Password page\r\n id = \"npwd\";\r\n let elPwd = document.getElementById(id);\r\n if (el.value !== elPwd.value) {\r\n return {\r\n mismatchPassword: ew.language.phrase(\"MismatchPassword\")\r\n };\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Between validator\r\n */\r\n function between(el) {\r\n let x, z;\r\n if (el.id.startsWith(\"y_\")) {\r\n x = document.getElementById(el.id.replace(/^y_/, \"x_\"));\r\n z = document.getElementById(el.id.replace(/^y_/, \"z_\"));\r\n } else if (el.id.endsWith(\"_value_1\")) {\r\n // QueryBuilder\r\n x = document.getElementById(el.id.replace(/_value_1$/, \"_value_0\"));\r\n z = document.getElementById(el.id.replace(/_value_1$/, \"_operator\"));\r\n }\r\n if (ew.hasValue(x) && $$1(z).val().toUpperCase() == \"BETWEEN\" && !ew.hasValue(el)) {\r\n return {\r\n between: ew.language.phrase(\"EnterValue2\")\r\n };\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Password strength validator\r\n */\r\n function passwordStrength(el) {\r\n let $el = $$1(el);\r\n if (!ew.isMaskedPassword(el) && $el.hasClass(\"ew-password-strength\") && !$el.data(\"validated\")) {\r\n return {\r\n passwordStrength: ew.language.phrase(\"PasswordTooSimple\")\r\n };\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * User name validator\r\n */\r\n function username(raw) {\r\n return function (el) {\r\n if (!raw && el.value.match(new RegExp('[' + ew.escapeRegExChars(ew.INVALID_USERNAME_CHARACTERS) + ']'))) return {\r\n username: ew.language.phrase(\"InvalidUsernameChars\")\r\n };\r\n return false;\r\n };\r\n }\r\n\r\n /**\r\n * Password validator\r\n */\r\n function password(raw) {\r\n return function (el) {\r\n if (!raw && !ew.ENCRYPTED_PASSWORD && el.value.match(new RegExp('[' + ew.escapeRegExChars(ew.INVALID_PASSWORD_CHARACTERS) + ']'))) return {\r\n password: ew.language.phrase(\"InvalidPasswordChars\")\r\n };\r\n return false;\r\n };\r\n }\r\n\r\n /**\r\n * Email validator\r\n */\r\n function email(el) {\r\n let value = ew.getValue(el);\r\n if (!ew.checkEmail(value)) {\r\n return {\r\n email: ew.language.phrase(\"IncorrectEmail\")\r\n };\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Emails validator\r\n */\r\n function emails(cnt, err) {\r\n return function (el) {\r\n let value = ew.getValue(el);\r\n if (!ew.checkEmails(value, cnt)) {\r\n return {\r\n emails: err\r\n };\r\n }\r\n return false;\r\n };\r\n }\r\n\r\n /**\r\n * DateTime validator\r\n * @param {string} format DateTime format\r\n */\r\n function datetime(format) {\r\n return function (el) {\r\n let value = ew.getValue(el);\r\n if (!ew.checkDate(value, format)) {\r\n return {\r\n datetime: ew.language.phrase(\"IncorrectDate\").replace(/%s/g, format)\r\n };\r\n }\r\n return false;\r\n };\r\n }\r\n\r\n /**\r\n * Time validator\r\n * @param {string} format Time format\r\n */\r\n function time(format) {\r\n return function (el) {\r\n let value = ew.getValue(el);\r\n if (!ew.checkTime(value, format)) {\r\n return {\r\n time: ew.language.phrase(\"IncorrectTime\").replace(/%s/g, format)\r\n };\r\n }\r\n return false;\r\n };\r\n }\r\n\r\n /**\r\n * Float validator\r\n */\r\n function float(el) {\r\n let value = ew.getValue(el);\r\n if (!ew.checkNumber(value)) {\r\n return {\r\n float: ew.language.phrase(\"IncorrectFloat\")\r\n };\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Range validator\r\n * @param {number} min Min value\r\n * @param {number} max Max value\r\n */\r\n function range(min, max) {\r\n return function (el) {\r\n let value = ew.getValue(el);\r\n if (!ew.checkRange(value, min, max)) {\r\n return {\r\n range: ew.language.phrase(\"IncorrectRange\").replace(\"%1\", min).replace(\"%2\", max)\r\n };\r\n }\r\n return false;\r\n };\r\n }\r\n\r\n /**\r\n * Integer validator\r\n */\r\n function integer(el) {\r\n let value = ew.getValue(el);\r\n if (!ew.checkInteger(value)) {\r\n return {\r\n integer: ew.language.phrase(\"IncorrectInteger\")\r\n };\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * US phone validator\r\n */\r\n function phone(el) {\r\n let value = ew.getValue(el);\r\n if (!ew.checkPhone(value)) {\r\n return {\r\n phone: ew.language.phrase(\"IncorrectPhone\")\r\n };\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * US ZIP validator\r\n */\r\n function zip(el) {\r\n let value = ew.getValue(el);\r\n if (!ew.checkZip(value)) {\r\n return {\r\n zip: ew.language.phrase(\"IncorrectZip\")\r\n };\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Credit card validator\r\n */\r\n function creditCard(el) {\r\n let value = ew.getValue(el);\r\n if (!ew.checkCreditCard(value)) {\r\n return {\r\n creditCard: ew.language.phrase(\"IncorrectCreditCard\")\r\n };\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * US SSN validator\r\n */\r\n function ssn(el) {\r\n let value = ew.getValue(el);\r\n if (!ew.checkSsn(value)) {\r\n return {\r\n ssn: ew.language.phrase(\"IncorrectSSN\")\r\n };\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * GUID validator\r\n */\r\n function guid(el) {\r\n let value = ew.getValue(el);\r\n if (!ew.checkGuid(value)) {\r\n return {\r\n guid: ew.language.phrase(\"IncorrectGUID\")\r\n };\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Regular expression validator\r\n * @param {string} pattern Regular expression pattern\r\n */\r\n function regex(pattern) {\r\n return function (el) {\r\n let value = ew.getValue(el);\r\n if (!ew.checkByRegEx(value, pattern)) {\r\n return {\r\n regex: ew.language.phrase(\"IncorrectRegExp\")\r\n };\r\n }\r\n return false;\r\n };\r\n }\r\n\r\n /**\r\n * URL validator\r\n */\r\n function url(el) {\r\n let value = ew.getValue(el);\r\n if (!ew.checkUrl(value)) {\r\n return {\r\n url: ew.language.phrase(\"IncorrectUrl\")\r\n };\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Custom validator\r\n * @param {Function} fn Function(value, ...args)\r\n * @param {...any} args Additional arguments for the function\r\n */\r\n function custom(fn) {\r\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\r\n args[_key - 1] = arguments[_key];\r\n }\r\n return function (el) {\r\n if (typeof fn == \"function\") {\r\n let value = ew.getValue(el);\r\n if (!fn(value, ...args)) return {\r\n custom: ew.language.phrase(\"IncorrectField\")\r\n };\r\n }\r\n return false;\r\n };\r\n }\r\n\r\n /**\r\n * Captcha validator\r\n */\r\n function captcha(el) {\r\n if (el && !ew.hasValue(el)) {\r\n return {\r\n captcha: ew.language.phrase(\"EnterValidateCode\")\r\n };\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * reCaptcha validator\r\n */\r\n function recaptcha(el) {\r\n var _grecaptcha;\r\n if (el && !ew.hasValue(el) && ((_grecaptcha = grecaptcha) == null ? void 0 : _grecaptcha.getResponse(el.dataset.id)) === \"\") {\r\n return {\r\n recaptcha: ew.language.phrase(\"ClickReCaptcha\")\r\n };\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Min date/time validator\r\n * @param {Function|HTMLElement|DateTime|Date} min Min date\r\n */\r\n function minDate(min) {\r\n return function (el) {\r\n let value = ew.getValue(el),\r\n format = el.dataset.formatPattern,\r\n minDateTime;\r\n min = typeof min == \"function\" ? min() : min;\r\n if (min instanceof HTMLElement) {\r\n let minValue = min.value,\r\n minFormat = min.dataset.formatPattern;\r\n if (min.value && min.dataset.formatPattern) minDateTime = ew.parseDate(minValue, minFormat);\r\n } else if (min instanceof Date) {\r\n minDateTime = DateTime$1.fromJSDate(min, {\r\n zone: \"utc\"\r\n });\r\n } else if (min instanceof DateTime$1) {\r\n minDateTime = min;\r\n }\r\n if (value && format && minDateTime) {\r\n let dateTime = ew.parseDate(value, format);\r\n if (dateTime < minDateTime) return {\r\n minDate: ew.language.phrase(\"IncorrectMinDate\").replace(\"%s\", ew.formatDateTime(minDateTime, ew.DATE_FORMAT + \" \" + ew.TIME_FORMAT))\r\n };\r\n }\r\n return false;\r\n };\r\n }\r\n\r\n /**\r\n * Max date/time validator\r\n * @param {Function|HTMLElement|DateTime|Date} max Max date\r\n */\r\n function maxDate(max) {\r\n return function (el) {\r\n let value = ew.getValue(el),\r\n format = el.dataset.formatPattern,\r\n maxDateTime;\r\n max = typeof max == \"function\" ? max() : max;\r\n if (max instanceof HTMLElement) {\r\n let maxValue = max.value,\r\n maxFormat = max.dataset.formatPattern;\r\n if (max.value && max.dataset.formatPattern) maxDateTime = ew.parseDate(maxValue, maxFormat);\r\n } else if (max instanceof Date) {\r\n maxDateTime = DateTime$1.fromJSDate(max, {\r\n zone: \"utc\"\r\n });\r\n } else if (max instanceof DateTime$1) {\r\n maxDateTime = max;\r\n }\r\n if (value && format && maxDateTime) {\r\n let dateTime = ew.parseDate(value, format);\r\n if (dateTime > maxDateTime) return {\r\n maxDate: ew.language.phrase(\"IncorrectMaxDate\").replace(\"%s\", ew.formatDateTime(maxDateTime, ew.DATE_FORMAT + \" \" + ew.TIME_FORMAT))\r\n };\r\n }\r\n return false;\r\n };\r\n }\r\n\r\n /**\r\n * Min validator\r\n * @param {Function|HTMLElement|String|Number} min Min value\r\n */\r\n function min(min) {\r\n return function (el) {\r\n let value = ew.parseNumber(ew.getValue(el)),\r\n minValue;\r\n min = typeof min == \"function\" ? min() : min;\r\n if (min instanceof HTMLElement) {\r\n minValue = ew.parseNumber(ew.getValue(min));\r\n } else if (typeof min == \"string\") {\r\n minValue = ew.parseNumber(min);\r\n } else if (typeof min == \"number\") {\r\n minValue = min;\r\n }\r\n if (typeof value == \"number\" && typeof minValue == \"number\") {\r\n if (value < minValue) return {\r\n min: ew.language.phrase(\"IncorrectMin\").replace(\"%s\", minValue)\r\n };\r\n }\r\n return false;\r\n };\r\n }\r\n\r\n /**\r\n * Max validator\r\n * @param {Function|HTMLElement|String|Number} max Max value\r\n */\r\n function max(max) {\r\n return function (el) {\r\n let value = ew.parseNumber(ew.getValue(el)),\r\n maxValue;\r\n max = typeof max == \"function\" ? max() : max;\r\n if (max instanceof HTMLElement) {\r\n maxValue = ew.parseNumber(ew.getValue(max));\r\n } else if (typeof max == \"string\") {\r\n maxValue = ew.parseNumber(max);\r\n } else if (typeof max == \"number\") {\r\n maxValue = max;\r\n }\r\n if (typeof value == \"number\" && typeof maxValue == \"number\") {\r\n if (value > maxValue) return {\r\n max: ew.language.phrase(\"IncorrectMax\").replace(\"%s\", maxValue)\r\n };\r\n }\r\n return false;\r\n };\r\n }\n\n var Validators = {\n __proto__: null,\n between,\n captcha,\n creditCard,\n custom,\n datetime,\n email,\n emails,\n fileRequired,\n float,\n guid,\n integer,\n max,\n maxDate,\n min,\n minDate,\n mismatchPassword,\n password,\n passwordStrength,\n phone,\n range,\n recaptcha,\n regex,\n required,\n ssn,\n time,\n url,\n userLevelId,\n userLevelName,\n username,\n zip\n };\n\n function _typeof(o) {\r\n \"@babel/helpers - typeof\";\r\n\r\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\r\n return typeof o;\r\n } : function (o) {\r\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\r\n }, _typeof(o);\r\n }\n\n function toPrimitive(t, r) {\r\n if (\"object\" != _typeof(t) || !t) return t;\r\n var e = t[Symbol.toPrimitive];\r\n if (void 0 !== e) {\r\n var i = e.call(t, r || \"default\");\r\n if (\"object\" != _typeof(i)) return i;\r\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\r\n }\r\n return (\"string\" === r ? String : Number)(t);\r\n }\n\n function toPropertyKey(t) {\r\n var i = toPrimitive(t, \"string\");\r\n return \"symbol\" == _typeof(i) ? i : i + \"\";\r\n }\n\n function _defineProperties(e, r) {\r\n for (var t = 0; t < r.length; t++) {\r\n var o = r[t];\r\n o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, toPropertyKey(o.key), o);\r\n }\r\n }\r\n function _createClass(e, r, t) {\r\n return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", {\r\n writable: !1\r\n }), e;\r\n }\n\n function _setPrototypeOf(t, e) {\r\n return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {\r\n return t.__proto__ = e, t;\r\n }, _setPrototypeOf(t, e);\r\n }\n\n function _inheritsLoose(t, o) {\r\n t.prototype = Object.create(o.prototype), t.prototype.constructor = t, _setPrototypeOf(t, o);\r\n }\n\n function _defineProperty(e, r, t) {\r\n return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\r\n value: t,\r\n enumerable: !0,\r\n configurable: !0,\r\n writable: !0\r\n }) : e[r] = t, e;\r\n }\n\n /*\r\n * Based on: jquery.batch v0.1.0\r\n * Copyright 2013, Matt Morgan (@mlmorg)\r\n * MIT license\r\n */\r\n\r\n // Global batch settings\r\n $$1.batchSettings = {\r\n type: 'POST',\r\n contentType: 'application/json',\r\n processData: false,\r\n dataType: 'json',\r\n toJSON: JSON.stringify,\r\n parse: data => data\r\n };\r\n\r\n // Setup method\r\n $$1.batchSetup = function (options) {\r\n return $$1.extend($$1.batchSettings, options);\r\n };\r\n\r\n // $.batch class\r\n // -------------\r\n\r\n var Batch = $$1.batch = function (func, options) {\r\n // Always instantiate a Batch class even if called without \"new\"\r\n if (!(this instanceof Batch)) {\r\n return new Batch(func, options);\r\n }\r\n\r\n // Shift arguments if func is an object\r\n if (typeof func === 'object') {\r\n options = func;\r\n func = undefined;\r\n }\r\n\r\n // Default options\r\n this.options = $$1.extend({}, $$1.batchSettings, options);\r\n\r\n // Find a parent batch object, if we're nested\r\n this.parent = $$1.ajaxSetup()._batch;\r\n\r\n // Requests storage\r\n this.requests = [];\r\n\r\n // Add any requests\r\n if (func) {\r\n this.add(func);\r\n }\r\n return this;\r\n };\r\n\r\n // Our methods\r\n $$1.extend(Batch.prototype, {\r\n // Method for adding requests to the batch\r\n add: function (func) {\r\n var _func$name;\r\n // Set global _batch variable in jQuery.ajaxSettings\r\n $$1.ajaxSetup({\r\n _batch: this.parent || this\r\n });\r\n\r\n // Call the user's function\r\n if ((_func$name = func.name) != null && _func$name.startsWith('bound ')) {\r\n // Bound function\r\n func();\r\n } else {\r\n func.call($$1.ajaxSetup()._batch);\r\n }\r\n\r\n // Remove the global _batch variable when we're not nested\r\n if (!this.parent) {\r\n $$1.ajaxSetup({\r\n _batch: null\r\n });\r\n }\r\n return this;\r\n },\r\n // Clear requests storage\r\n clear: function () {\r\n this.requests = [];\r\n },\r\n // Method for running the batch request\r\n send: function (options) {\r\n options = options || {};\r\n var instance = this;\r\n\r\n // When we're handling a child batch object, wrap any success functions\r\n // and add them to the parent batch success\r\n if (this.parent && options.success) {\r\n var parentSuccess = this.parent.options.success;\r\n this.parent.options.success = function (data, status, xhr) {\r\n options.success(data, status, xhr);\r\n if (parentSuccess) {\r\n parentSuccess(data, status, xhr);\r\n }\r\n };\r\n }\r\n\r\n // When we're handling the top-most batch, send the request\r\n else if (this.requests.length) {\r\n // Map an array of requests\r\n var requests = $$1.map(this.requests, function (request) {\r\n return request.settings.data;\r\n });\r\n\r\n // Override the success callback\r\n var success = options.success;\r\n var childSuccess = this.options.success;\r\n options.success = function (data, statusText, xhr) {\r\n // Call our _deliver method to handle each individual batch request response\r\n instance._deliver.call(instance, data, statusText);\r\n\r\n // Child batch success functions\r\n if (childSuccess) {\r\n childSuccess(data, statusText, xhr);\r\n }\r\n\r\n // User's success function\r\n if (success) {\r\n success(data, statusText, xhr);\r\n }\r\n };\r\n\r\n // Build the Ajax request options\r\n options = $$1.extend({}, this.options, options);\r\n\r\n // Create hash of requests to pass as the data in the Ajax request\r\n if (!options.data) {\r\n options.data = $$1.batchSettings.toJSON(requests);\r\n }\r\n\r\n // Call the request\r\n return $$1.ajax(options);\r\n }\r\n },\r\n // Private method to add a request to the batch requests array\r\n _addRequest: function (xhr, settings) {\r\n this.requests.push({\r\n xhr: xhr,\r\n settings: settings\r\n });\r\n },\r\n // Delivers each batch request response to its intended xhr success/complete function\r\n _deliver: function (data, statusText) {\r\n var _responses$error;\r\n var instance = this;\r\n\r\n // Pass the response off to the user to parse out the responses\r\n var responses = $$1.batchSettings.parse(data);\r\n if (responses != null && (_responses$error = responses.error) != null && _responses$error.description) {\r\n var _responses$error2;\r\n ew$1.alert(responses == null || (_responses$error2 = responses.error) == null ? void 0 : _responses$error2.description);\r\n return;\r\n }\r\n\r\n // Loop through the responses\r\n $$1.each(responses, function (i, response) {\r\n var _request$settings$com;\r\n // Only work with batch requests that we have stored\r\n if (!instance.requests[i]) {\r\n return;\r\n }\r\n\r\n // Grab the stored request data\r\n var request = instance.requests[i];\r\n\r\n // Build statusText a la jQuery based on status code\r\n request.xhr.statusText = statusText;\r\n\r\n // Call the user/success function, if it exists. Pass the response body, status text and xhr.\r\n if (statusText === 'success') {\r\n var _request$settings$suc;\r\n (_request$settings$suc = request.settings.success) == null || _request$settings$suc.call(request.xhr, response, statusText);\r\n }\r\n\r\n // Call complete\r\n (_request$settings$com = request.settings.complete) == null || _request$settings$com.call(request.xhr, statusText);\r\n });\r\n }\r\n });\r\n\r\n // $.ajax override\r\n // ---------------\r\n\r\n // Override jQuery.ajax to cancel any outgoing requests called within\r\n // a $.batch() function and add them to the batch requests array for\r\n // that batch instance\r\n var $ajax = $$1.ajax;\r\n $$1.ajax = function (url, options) {\r\n // Shift arguments when options are passed as first argument\r\n if (typeof url === 'object') {\r\n options = url;\r\n url = undefined;\r\n }\r\n\r\n // Set options object\r\n options = options || {};\r\n\r\n // Override the jQuery beforeSend method\r\n var beforeSend = options.beforeSend;\r\n options.beforeSend = function (xhr, settings) {\r\n // Call the user's beforeSend function, if passed\r\n if (beforeSend) {\r\n var before = beforeSend(xhr, settings);\r\n\r\n // Cancel request if user's beforeSend function returns false\r\n if (before === false) {\r\n return before;\r\n }\r\n }\r\n\r\n // We're only worried about requests made within a $.batch function\r\n // (aka they have a _batch object)\r\n if (settings._batch) {\r\n // Add request to batch\r\n settings._batch._addRequest(xhr, settings);\r\n\r\n // Cancel this request\r\n return false;\r\n }\r\n };\r\n\r\n // Run original $.ajax method for all other requests\r\n return $ajax.call(this, url, options);\r\n };\n\n // Form class\r\n function FormBase(id, pageId) {\r\n let self = this,\r\n $self = $$1(self);\r\n this._initiated = false;\r\n this.id = id; // Same ID as the form\r\n this.element = document.getElementById(id); // HTML form or div\r\n this.$element = $$1(this.element); // jQuery object of the form or div\r\n this.pageId = pageId;\r\n this.htmlForm = null; // HTML form element\r\n this.initSearchPanel = false; // Expanded by default\r\n this.modified = false;\r\n this.emptyRow = null; // Check empty row\r\n this.multiPage = null; // Multi-page\r\n this.autoSuggests = {}; // AutoSuggests\r\n this.lists = {}; // Dynamic selection lists\r\n this.batch = new Batch(); // For batch lookup\r\n this.formKeyCountName = \"\"; // For list/grid pages\r\n this.submitWithFetch = false; // Submit form with Fetch API and returns Promise\r\n this.enableOnInit = false; // Disable form during init\r\n this.filterList = null;\r\n\r\n // Disable form\r\n this.disableForm = function () {\r\n document.body.style.cursor = \"wait\";\r\n let form = this.getForm();\r\n $$1(form.elements).filter(\":submit:not(.dropdown-toggle), .ew-submit\").prop(\"disabled\", true).addClass(\"disabled\");\r\n this.trigger(\"disabled\");\r\n };\r\n\r\n // Enable form\r\n this.enableForm = function () {\r\n let form = this.getForm(),\r\n $elements = $$1(form.elements);\r\n $elements.filter(\".ew-disabled-element\").removeClass(\"ew-disabled-element\").prop(\"disabled\", false);\r\n $elements.filter(\".ew-enabled-element\").removeClass(\"ew-enabled-element\").prop(\"disabled\", true);\r\n $elements.filter(\":submit:not(.dropdown-toggle), .ew-submit\").not(\".ew-disabled\") // Exclude submit buttons with .ew-disabled (disabled purposely)\r\n .prop(\"disabled\", false).removeClass(\"disabled\");\r\n this.trigger(\"enabled\");\r\n document.body.style.cursor = \"default\";\r\n };\r\n\r\n // Append hidden element with form name\r\n this.appendHidden = function (el) {\r\n var form = this.getForm(),\r\n $form = $$1(form),\r\n $dp = $$1(el).closest(\".ew-form\"),\r\n name = $dp.attr(\"id\") + \"$\" + el.name;\r\n if ($form.find(\"input:hidden[name='\" + name + \"']\")[0])\r\n // Already appended\r\n return;\r\n var ar = $dp.find('[name=\"' + el.name + '\"]').serializeArray();\r\n if (ar.length) {\r\n ar.forEach(function (o, i) {\r\n $$1('<input type=\"hidden\" name=\"' + name + '\">').val(o.value).appendTo($form);\r\n });\r\n } else {\r\n $$1('<input type=\"hidden\" name=\"' + name + '\">').val(\"\").appendTo($form);\r\n }\r\n };\r\n\r\n // Can submit\r\n this.canSubmit = async function (e) {\r\n var _await$this$validate, _this$validate;\r\n var form = this.getForm(),\r\n $form = $$1(form);\r\n this.disableForm();\r\n this.updateTextArea();\r\n if (((_await$this$validate = await ((_this$validate = this.validate) == null ? void 0 : _this$validate.call(this, e))) != null ? _await$this$validate : true) && !$form.find(\".is-invalid\")[0]) {\r\n $form.find(\"input[name^=sv_], input[name^=p_], [name*=_query_builder_rule_], .ew-template input, .ew-custom-option\") // Do not submit these values\r\n .prop(\"disabled\", true).addClass(\"ew-disabled-element\");\r\n $form.find(\"[data-readonly=1][disabled]\").prop(\"disabled\", false).addClass(\"ew-enabled-element\"); // Submit readonly values\r\n var $dps = $form.find(\"input[name=detailpage]\").map(function (i, el) {\r\n return $form.find(\"#\" + el.value)[0];\r\n });\r\n if ($dps.length > 1) {\r\n // Multiple Master/Detail, check element names\r\n $dps.each(function (i, dp) {\r\n $$1(dp).find(\":input, selection-list\").each(function (j, el) {\r\n if (/^(fn_)?(x|o)\\d*_/.test(el.name)) {\r\n var $els = $dps.not(dp).find(el.tagName + \"[name='\" + el.name + \"']\");\r\n if ($els.length) {\r\n // Elements with same name found\r\n self.appendHidden(el); // Append element with form name\r\n $els.each(function () {\r\n self.appendHidden(this); // Append elements with same name and form name\r\n });\r\n }\r\n }\r\n });\r\n });\r\n }\r\n let args = {\r\n form: form,\r\n result: true\r\n },\r\n evt = $$1.Event(\"beforesubmit\", {\r\n originalEvent: e\r\n });\r\n $form.trigger(evt, [args]);\r\n let result = await args.result; // Support Promise<boolean|Object>\r\n if (!evt.isDefaultPrevented() && (result === true || $$1.isObject(result) && result.value))\r\n // Support Swal.fire()\r\n return true;\r\n } else {\r\n this.enableForm();\r\n }\r\n return false;\r\n };\r\n\r\n // Submit\r\n this.submit = async function (e) {\r\n var _e$originalEvent;\r\n let form = this.getForm(),\r\n formAction = e == null || (_e$originalEvent = e.originalEvent) == null || (_e$originalEvent = _e$originalEvent.submitter) == null ? void 0 : _e$originalEvent.formAction;\r\n if (formAction) {\r\n formAction = ew.parseUrl(formAction).pathname;\r\n form.setAttribute(\"action\", formAction);\r\n }\r\n if (await this.canSubmit(e)) {\r\n if (this.submitWithFetch) {\r\n let url = form.getAttribute(\"action\"),\r\n method = form.method.toUpperCase(),\r\n body = $$1(form).serialize();\r\n return ew.fetch(url, {\r\n method,\r\n body\r\n }).finally(() => this.enableForm()); // Return Promise\r\n } else {\r\n form.submit();\r\n }\r\n } else {\r\n this.enableForm();\r\n }\r\n };\r\n\r\n // Get dynamic selection list by element name or id\r\n this.getList = function (name) {\r\n var _this$getElement;\r\n if ($$1.isObject(name)) {\r\n // Object\r\n let obj = name;\r\n name = obj.name || obj.id || \"\";\r\n if (name.includes(\"query_builder_rule\")) name = obj.dataset.field;\r\n }\r\n name = name.replace(/^(sv_)?[xy](\\d*|\\$rowindex\\$)_|\\[\\]$/g, \"\"); // Remove element name prefix/suffix\r\n if (this.lists[name]) return this.lists[name];\r\n let field = (_this$getElement = this.getElement(name)) == null || (_this$getElement = _this$getElement.dataset.field) == null ? void 0 : _this$getElement.replace(/^x_|\\[\\]$/g, \"\"); // Remove element name prefix/suffix\r\n return field ? this.lists[field] : {};\r\n };\r\n\r\n // Compile templates\r\n this.compileTemplates = function () {\r\n let lists = Object.values(this.lists);\r\n for (let list of lists) {\r\n if (list.template && $$1.isString(list.template)) list.template = $$1.templates(list.template);\r\n }\r\n };\r\n\r\n // Get option template of dynamic selection list\r\n this.getOptionTemplate = function (list) {\r\n if (list.template && $$1.isString(list.template)) list.template = $$1.templates(list.template);\r\n return list.template;\r\n };\r\n\r\n // Get the HTML form element\r\n this.getForm = function () {\r\n if (!this.htmlForm) {\r\n var _this$element, _this$element2;\r\n if (((_this$element = this.element) == null ? void 0 : _this$element.tagName) == \"FORM\") {\r\n // HTML form\r\n this.htmlForm = this.element;\r\n } else if (((_this$element2 = this.element) == null ? void 0 : _this$element2.tagName) == \"DIV\") {\r\n // HTML div => Grid page\r\n this.htmlForm = this.element.closest(\"form\");\r\n }\r\n }\r\n return this.htmlForm;\r\n };\r\n\r\n // Get form element as single element\r\n this.getElement = function (name) {\r\n return name ? ew.getElement(name, this.$element) : this.$element[0];\r\n };\r\n\r\n // Get form element(s) as single element or array of radio/checkbox\r\n this.getElements = function (name) {\r\n return ew.getElements(name, this.$element);\r\n };\r\n\r\n // Fix ID\r\n this.fixId = function (id, multiple, rowindex) {\r\n let t = \"\",\r\n ar = id.split(\" \");\r\n if (ar.length > 1) {\r\n t = ar[0];\r\n rowindex = \"\";\r\n id = ar[1];\r\n }\r\n let prefix = $$1.isNumber(rowindex) ? \"x\" + rowindex + \"_\" : \"x_\"; // Add row index\r\n id = id.startsWith(\"x_\") ? id.replace(/^x_/, prefix) // Field element name\r\n : prefix + id; // Field var\r\n if (multiple && !id.endsWith(\"[]\"))\r\n // Add [] if select-multiple\r\n id += \"[]\";\r\n return t ? t + \" \" + id : id;\r\n };\r\n\r\n /**\r\n * Update a selection list\r\n * @param {string|HTMLElement} id - ID (Field param) or HTML element\r\n * @param {Object} list - List\r\n * @param {(null|undefined|number)} rowindex - Row index\r\n * @param {boolean} immediate - Send request immediately\r\n * @returns\r\n */\r\n this.updateList = function (id, list, rowindex, immediate) {\r\n var _list, _Object$entries$find;\r\n (_list = list) != null ? _list : list = $$1.isString(id) // Find the list if not provided\r\n ? (_Object$entries$find = Object.entries(this.lists).find(entry => entry[0] == id.replace(/^x_/, \"\"))) == null ? void 0 : _Object$entries$find[1] // String\r\n : this.getList(id); // HTMLElement\r\n if (list.template && $$1.isString(list.template))\r\n // Compile template in case updateLists() called before init()\r\n list.template = $$1.templates(list.template);\r\n let form = this.element,\r\n parents = list.parentFields.slice().map(parent => this.fixId(parent, false, rowindex)),\r\n // Clone and fix index\r\n ajax = list.ajax && !list.lookupOptions.length; // Has link table and no lookup cache\r\n id = $$1.isString(id) ? this.fixId(id, list.multiple, rowindex) : id;\r\n return !ajax || immediate ? ew.updateOptions.call(this, id, parents, ajax, false) // Non-Ajax (lookup cache or user values) or update immediately\r\n : [id, parents.map(parent => ew.getOptionValues(parent, form)), ajax, false]; // Ajax (async) => to be batch updated\r\n };\r\n\r\n /**\r\n * Update selection lists\r\n * @param {(null|undefined|number)} rowindex - Row index\r\n * @param {bool} [immediate] - Send request immediately\r\n * @returns\r\n */\r\n this.updateLists = function (rowindex, immediate) {\r\n var _form$querySelector;\r\n if (rowindex === null)\r\n // rowindex == $rowindex$ == null\r\n return;\r\n if (this.pageId == \"grid\" && !$$1.isNumber(rowindex) && !$$1.isUndefined(rowindex)) return;\r\n let form = this.getForm(); // Set up $element and htmlForm\r\n if ((form == null || (_form$querySelector = form.querySelector(\"input#confirm\")) == null ? void 0 : _form$querySelector.value) == \"confirm\")\r\n // Confirm page\r\n return;\r\n let selector = Object.entries(this.lists).map(_ref => {\r\n let [id, list] = _ref;\r\n return \"[name='\" + this.fixId(id, list.multiple, rowindex) + \"']\";\r\n }).join();\r\n if (selector && this.element.querySelector(selector))\r\n // List found\r\n Object.entries(this.lists).map(_ref2 => {\r\n let [id, list] = _ref2;\r\n return this.updateList(id, list, rowindex);\r\n }) // Update each list\r\n .filter(result => Array.isArray(result)) // Get ajax requests for batch update\r\n .forEach(request => this.batch.add(ew.updateOptions.bind(this, ...request))); // Batch update async requests\r\n // Update the Ajax lists\r\n if (this.batch.requests.length) {\r\n if (rowindex === undefined || immediate) {\r\n // Called by form or update immediately (add blank row)\r\n let deferreds = [],\r\n batchSize = ew.ajaxBatchSize > 0 ? ew.ajaxBatchSize : 1;\r\n while (this.batch.requests.length > batchSize) {\r\n let b = new Batch();\r\n b.requests = this.batch.requests.splice(0, batchSize);\r\n deferreds.push(b.send({\r\n url: ew.getApiUrl(ew.API_LOOKUP_ACTION)\r\n }));\r\n }\r\n if (this.batch.requests.length > 0) deferreds.push(this.batch.send({\r\n url: ew.getApiUrl(ew.API_LOOKUP_ACTION)\r\n }));\r\n $$1.when(...deferreds).then(() => $$1(document).trigger(\"updatedone\", [{\r\n source: self,\r\n target: form\r\n }])).fail(error => console.log(error)).always(() => this.batch.clear());\r\n }\r\n } else {\r\n $$1(document).trigger(\"updatedone\", [{\r\n source: self,\r\n target: form\r\n }]);\r\n }\r\n };\r\n\r\n // Create AutoSuggest\r\n this.createAutoSuggest = function (settings) {\r\n var options = Object.assign({\r\n limit: ew.AUTO_SUGGEST_MAX_ENTRIES,\r\n form: this\r\n }, ew.autoSuggestSettings, settings); // Global settings + field specific settings\r\n self.autoSuggests[settings.id] = new ew.AutoSuggest(options);\r\n };\r\n\r\n // Init editors\r\n this.initEditors = function () {\r\n var form = this.getForm();\r\n $$1(form.elements).filter(\"textarea.editor\").each(function (i, el) {\r\n var ed = $$1(el).data(\"editor\");\r\n if (ed && !ed.active && !ed.name.includes(\"$rowindex$\")) ed.create();\r\n });\r\n };\r\n\r\n // Update textareas\r\n this.updateTextArea = function (name) {\r\n var form = this.getForm();\r\n $$1(form.elements).filter(\"textarea.editor\").each(function (i, el) {\r\n var ed = $$1(el).data(\"editor\");\r\n if (!ed || name && ed.name != name) return true; // Continue\r\n ed.save();\r\n if (name) return false; // Break\r\n });\r\n };\r\n\r\n // Destroy editor(s)\r\n this.destroyEditor = function (name) {\r\n var form = this.getForm();\r\n $$1(form.elements).filter(\"textarea.editor\").each(function (i, el) {\r\n var ed = $$1(el).data(\"editor\");\r\n if (!ed || name && ed.name != name) return true; // Continue\r\n ed.destroy();\r\n if (name) return false; // Break\r\n });\r\n };\r\n\r\n // Show error message\r\n this.onError = function (el, msg) {\r\n return ew.onError(this, el, msg);\r\n };\r\n\r\n // Init file upload\r\n this.initUpload = function () {\r\n var form = this.getForm();\r\n $$1(form.elements).filter(\"input:file:not([name*='$rowindex$'])\").each(function (index) {\r\n $$1.later(ew.AJAX_DELAY * index, null, ew.upload, this); // Delay a little in case of large number of upload fields\r\n });\r\n };\r\n\r\n // Set up filters\r\n this.setupFilters = function (e, filters) {\r\n let id = this.id,\r\n data = this.filterList ? this.filterList.data : null,\r\n $sf = $$1(\".ew-save-filter[data-form=\" + id + \"]\").toggleClass(\"disabled\", !data),\r\n $df = $$1(\".ew-delete-filter[data-form=\" + id + \"]\").toggleClass(\"disabled\", !filters.length).toggleClass(\"dropdown-toggle\", !!filters.length),\r\n $delete = $df.parent(\"li\").toggleClass(\"dropdown-submenu dropdown-hover\", !!filters.length).toggleClass(\"disabled\", !filters.length),\r\n $save = $sf.parent(\"li\").toggleClass(\"disabled\", !data);\r\n let saveFilters = function (id, filters) {\r\n if (ew.CLIENT_SEARCH_FILTER) {\r\n localStorage.setItem(ew.PROJECT_NAME + \"_\" + id + \"_filters\", JSON.stringify(filters));\r\n } else if (ew.SERVER_SEARCH_FILTER) {\r\n document.body.style.cursor = \"wait\";\r\n $$1.ajax(ew.currentPage(), {\r\n type: \"POST\",\r\n dataType: \"json\",\r\n data: {\r\n \"ajax\": \"savefilters\",\r\n \"filters\": JSON.stringify(filters)\r\n }\r\n }).done(function (result) {\r\n var _result$;\r\n if ((_result$ = result[0]) != null && _result$.success) self.filterList.filters = filters; // Save filters\r\n }).always(function () {\r\n document.body.style.cursor = \"default\";\r\n });\r\n }\r\n };\r\n $save.off(\"click.ew\").on(\"click.ew\", function (e) {\r\n // Save filter\r\n if ($save.hasClass(\"disabled\")) return false;\r\n ew.prompt({\r\n input: \"text\",\r\n html: ew.language.phrase(\"EnterFilterName\")\r\n }, name => {\r\n name = ew.sanitize(name);\r\n if (name) {\r\n filters.push([name, data]);\r\n saveFilters(id, filters);\r\n }\r\n }, true);\r\n }).prevAll().remove();\r\n $df.next(\"ul.dropdown-menu\").remove();\r\n if (filters.length) {\r\n let $submenu = $$1('<ul class=\"dropdown-menu\"></ul>');\r\n filters.forEach((filter, i, ar) => {\r\n $$1('<li><a class=\"dropdown-item\" data-index=\"' + i + '\" data-ew-action=\"none\">' + filter[0] + '</a></li>').on(\"click\", function (e) {\r\n // Delete\r\n let index = this.querySelector(\"a[data-index]\").dataset.index;\r\n ew.prompt(ew.language.phrase(\"DeleteFilterConfirm\").replace(\"%s\", filter[0]), result => {\r\n if (result) {\r\n ar.splice(index, 1);\r\n saveFilters(id, filters);\r\n }\r\n });\r\n }).appendTo($submenu);\r\n $$1('<li><a class=\"dropdown-item ew-reset-filter-list\" data-index=\"' + i + '\" data-ew-action=\"none\">' + filter[0] + '</a></li>').insertBefore($save).on(\"click\", function (e) {\r\n if (currentPageID == \"calendar\") {\r\n // Post back\r\n $$1(\"<form>\").attr({\r\n method: \"post\",\r\n action: ew.currentPage()\r\n }).append($$1(\"<input type='hidden'>\").attr({\r\n name: \"cmd\",\r\n value: \"resetfilter\"\r\n }), $$1(\"<input type='hidden'>\").attr({\r\n name: ew.TOKEN_NAME_KEY,\r\n value: ew.TOKEN_NAME\r\n }),\r\n // PHP\r\n $$1(\"<input type='hidden'>\").attr({\r\n name: ew.ANTIFORGERY_TOKEN_KEY,\r\n value: ew.ANTIFORGERY_TOKEN\r\n }),\r\n // PHP\r\n $$1(\"<input type='hidden'>\").attr({\r\n name: \"filter\",\r\n value: JSON.stringify(filter[1])\r\n })).appendTo(\"body\").trigger(\"submit\");\r\n } else {\r\n // Refresh\r\n let body = {\r\n cmd: \"resetfilter\",\r\n filter: JSON.stringify(filter[1])\r\n };\r\n ew.refresh(ew.fetch(ew.setLayout(ew.currentPage(), false), {\r\n method: \"POST\",\r\n body\r\n }));\r\n }\r\n });\r\n });\r\n $$1('<li class=\"dropdown-divider\"></li>').insertBefore($save);\r\n $delete.append($submenu);\r\n }\r\n };\r\n\r\n // Add event handler\r\n this.on = function () {\r\n $self.on(...arguments);\r\n };\r\n\r\n // Add event handler\r\n this.one = function () {\r\n $self.one(...arguments);\r\n };\r\n\r\n // Remove event handler\r\n this.off = function () {\r\n $self.off(...arguments);\r\n };\r\n\r\n // Trigger event\r\n this.trigger = function () {\r\n $self.trigger(...arguments);\r\n };\r\n\r\n // Init form\r\n this.init = function () {\r\n if (this._initiated) return;\r\n\r\n // Check form\r\n var form = this.getForm();\r\n if (!form) return;\r\n var $form = $$1(form);\r\n\r\n // Compile templates\r\n this.compileTemplates();\r\n\r\n // Search form\r\n if (/s(ea)?rch$/.test(this.id)) {\r\n // Search panel\r\n if (this.initSearchPanel && !ew.hasFormData(form)) $$1(\"#\" + this.id + \"_search_panel\").removeClass(\"show\");\r\n\r\n // Hide search operator column\r\n if (!$$1(\".ew-table .ew-search-operator\").text().trim()) $$1(\".ew-table .ew-search-operator\").parent(\"td\").hide();\r\n\r\n // Search operators\r\n $form.find(\"select[id^=z_]\").each(function () {\r\n var $this = $$1(this).trigger(\"change\");\r\n if ($this.val() != \"BETWEEN\") $form.find(\"#w_\" + this.id.substring(2)).trigger(\"change\");\r\n });\r\n }\r\n\r\n // Multi-page\r\n if (this.multiPage) this.multiPage.render();\r\n\r\n // HTML editors\r\n loadjs.ready([\"editor\"], () => setTimeout(this.initEditors.bind(this), 0)); // Delay for custom template to apply first\r\n\r\n // Dynamic selection lists\r\n this.updateLists();\r\n\r\n // Init file upload\r\n this.initUpload();\r\n\r\n // Submit/Cancel\r\n if (this.$element.is(\"form\")) {\r\n // Not Grid page\r\n // Detail pages\r\n this.$element.find(\".ew-detail-pages .ew-nav a[data-bs-toggle=tab]\").on(\"shown.bs.tab\", function (e) {\r\n var $tab = $$1(e.target.getAttribute(\"href\")),\r\n $panel = $tab.find(\".table-responsive.ew-grid-middle-panel\"),\r\n $container = $tab.closest(\".container-fluid\");\r\n if ($panel.width() >= $container.width()) $panel.width($container.width() + \"px\");else $panel.width(\"auto\");\r\n });\r\n $form.off(\"submit.ew\").on(\"submit.ew\", function (e) {\r\n // Bind submit event\r\n let args = {\r\n form: form,\r\n result: self.submit(e)\r\n },\r\n evt = $$1.Event(\"aftersubmit\", {\r\n originalEvent: e\r\n });\r\n self.trigger(evt, [args]);\r\n return false; // Disable normal submission\r\n });\r\n $form.find(\"[data-field], .ew-priv\").on(\"change\", function () {\r\n if (ew.CONFIRM_CANCEL) self.modified = true;\r\n });\r\n $form.find(\"#btn-cancel[data-href]\").on(\"click\", function () {\r\n // Cancel\r\n self.updateTextArea();\r\n var href = this.dataset.href;\r\n if (self.modified && ew.hasFormData(form)) {\r\n ew.prompt(ew.language.phrase(\"ConfirmCancel\"), result => {\r\n if (result) {\r\n $form.find(\"#btn-action\").prop(\"disabled\", true); // Disable the save button\r\n window.location = href;\r\n }\r\n });\r\n } else {\r\n $form.find(\"#btn-action\").prop(\"disabled\", true); // Disable the save button\r\n window.location = href;\r\n }\r\n });\r\n }\r\n this._initiated = true;\r\n\r\n // Store form object as data\r\n this.$element.data(\"form\", this);\r\n\r\n // Enable form\r\n if (this.enableOnInit || Array.from(form.elements).find(el => el.matches(\"button.disabled.enable-on-init\"))) this.enableForm();\r\n\r\n // Trigger listeners\r\n this.trigger(\"initiated\");\r\n };\r\n\r\n // Add to the global forms object\r\n ew.forms.add(this);\r\n }\n\n /**\r\n * Class Field\r\n */\r\n let Field = /*#__PURE__*/function () {\r\n /**\r\n * Constructor\r\n * @param {string} fldvar Field variable name\r\n * @param {Function[]|Function} validators Validators\r\n * @param {bool} invalid Initial valid status (e.g. server side)\r\n */\r\n function Field(fldvar, validators, invalid) {\r\n _defineProperty(this, \"name\", \"\");\r\n _defineProperty(this, \"validators\", []);\r\n _defineProperty(this, \"_validate\", true);\r\n this.name = fldvar;\r\n if (Array.isArray(validators)) {\r\n for (let validator of validators) this.addValidator(validator);\r\n } else if (typeof validators === \"function\") {\r\n this.addValidator(validators);\r\n }\r\n this.invalid = invalid;\r\n }\r\n\r\n /**\r\n * Add validator\r\n * @param {Function} validator Validator function\r\n */\r\n var _proto = Field.prototype;\r\n _proto.addValidator = function addValidator(validator) {\r\n if (typeof validator === \"function\") this.validators.push(validator);\r\n }\r\n\r\n /**\r\n * Get error\r\n * @returns {Object}\r\n */;\r\n /**\r\n * Add error\r\n * @param {Object} err Error\r\n */\r\n _proto.addError = function addError(err) {\r\n if (err) {\r\n var _this$_error;\r\n let error = (_this$_error = this._error) != null ? _this$_error : {};\r\n this._error = {\r\n ...error,\r\n ...err\r\n };\r\n this.invalid = true;\r\n }\r\n }\r\n\r\n /**\r\n * Clear all errors\r\n */;\r\n _proto.clearErrors = function clearErrors() {\r\n this._error = null;\r\n this.invalid = false;\r\n }\r\n\r\n /**\r\n * Clear all validators\r\n */;\r\n _proto.clearValidators = function clearValidators() {\r\n this.validators = [];\r\n }\r\n\r\n /**\r\n * Get error message\r\n * @returns {string} HTML\r\n */;\r\n /**\r\n * Validate field value\r\n * @returns {boolean}\r\n */\r\n _proto.validate = function validate() {\r\n let result = true;\r\n this.clearErrors(); // Reset error\r\n if (this._element && this.shouldValidate) {\r\n if (Array.isArray(this.validators)) {\r\n for (let validator of this.validators) {\r\n let err = validator(this._element);\r\n if (err !== false) {\r\n this.addError(err);\r\n result = false;\r\n }\r\n }\r\n this.updateFeedback();\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Reset invalid property (on page load for Grid-Add/Edit)\r\n */;\r\n _proto.resetInvalid = function resetInvalid() {\r\n var _this$_element, _this$_element$closes;\r\n this.clearErrors();\r\n if ((_this$_element = this._element) != null && (_this$_element = _this$_element.classList) != null && _this$_element.contains(\"is-invalid\") && !this._error) this.addError({\r\n server: (_this$_element$closes = this._element.closest(ew.fieldContainerSelector)) == null || (_this$_element$closes = _this$_element$closes.querySelector(\".invalid-feedback\")) == null ? void 0 : _this$_element$closes.innerHTML\r\n }); // Server side error\r\n }\r\n\r\n /**\r\n * Update the error message to feedback element\r\n */;\r\n _proto.updateFeedback = function updateFeedback() {\r\n let err = this.errorMessage;\r\n if (this._element && err) {\r\n var _this$_element$closes2;\r\n let feedback = (_this$_element$closes2 = this._element.closest(ew.fieldContainerSelector)) == null ? void 0 : _this$_element$closes2.querySelector(\".invalid-feedback\");\r\n if (feedback) feedback.innerHTML = err;\r\n ew.setInvalid(this._element);\r\n }\r\n }\r\n\r\n /**\r\n * Set focus\r\n * @param {Object} options - Focus options\r\n */;\r\n _proto.focus = function focus(options) {\r\n if (this._element) ew.setFocus(this._element, options);\r\n }\r\n\r\n /**\r\n * Check if the field can be focused\r\n */;\r\n _proto.canFocus = function canFocus() {\r\n var _el$style, _el$classList;\r\n let el = this._element;\r\n return el && !(el.hidden && !el.tagName == \"SELECTION-LIST\" || el.readonly || el.disabled || el.type == \"hidden\" || ((_el$style = el.style) == null ? void 0 : _el$style.display) == \"none\" || (_el$classList = el.classList) != null && _el$classList.contains(\"d-none\"));\r\n }\r\n\r\n /**\r\n * Check if focused\r\n */;\r\n return _createClass(Field, [{\r\n key: \"error\",\r\n get: function () {\r\n return this._error;\r\n }\r\n }, {\r\n key: \"errorMessage\",\r\n get: function () {\r\n if (this._error) {\r\n return Array.from(Object.values(this._error)).join(\"<br>\");\r\n }\r\n return \"\";\r\n }\r\n\r\n /**\r\n * Check if the field should be validated\r\n */\r\n }, {\r\n key: \"shouldValidate\",\r\n get: function () {\r\n return !this._checkbox || this._checkbox.checked;\r\n }\r\n\r\n /**\r\n * Set form element\r\n */\r\n }, {\r\n key: \"element\",\r\n get:\r\n /**\r\n * Get form element\r\n * @returns {HTMLElement|HTMLElement[]}\r\n */\r\n function () {\r\n return this._element;\r\n }\r\n\r\n /**\r\n * Get field value from form element\r\n * @returns {string|Array}\r\n */,\r\n set: function (el) {\r\n var _this$_element2;\r\n this._element = el;\r\n this._checkbox = (_this$_element2 = this._element) != null && (_this$_element2 = _this$_element2.id) != null && _this$_element2.match(/^[xy]_/) ? document.getElementById(this._element.id.replace(/^[xy]_/, \"u_\").replace(/\\[\\]$/, \"\")) : null; // Find the checkbox for the field in Update page\r\n }\r\n }, {\r\n key: \"value\",\r\n get: function () {\r\n return this._element ? ew.getValue(this._element) : \"\";\r\n }\r\n }, {\r\n key: \"focused\",\r\n get: function () {\r\n return this._element && this._element == document.activeElement;\r\n }\r\n }]);\r\n }();\n\n /**\r\n * Class Form\r\n */\r\n let Form = /*#__PURE__*/function (_FormBase) {\r\n /**\r\n * Constructor\r\n * @param {string} id Form ID\r\n * @param {string} pageId Page ID\r\n */\r\n function Form(id, pageId) {\r\n var _this;\r\n _this = _FormBase.call(this, id, pageId) || this;\r\n _defineProperty(_this, \"row\", {});\r\n _defineProperty(_this, \"fields\", {});\r\n _defineProperty(_this, \"validateRequired\", true);\r\n _defineProperty(_this, \"autoFocus\", true);\r\n _defineProperty(_this, \"autoFocusPreventScroll\", true);\r\n _this.on(\"initiated\", function () {\r\n let form = this.getForm();\r\n if (form.classList.contains(\"ew-wait\")) {\r\n this.one(\"enabled\", function () {\r\n this.setInvalid();\r\n this.tryFocus();\r\n });\r\n return;\r\n }\r\n this.setInvalid();\r\n this.tryFocus();\r\n });\r\n return _this;\r\n }\r\n\r\n /**\r\n * Add field\r\n * @param {string} fldvar Field variable name\r\n * @param {Function[]} validators Validators\r\n * @param {bool} invalid Invalid\r\n */\r\n _inheritsLoose(Form, _FormBase);\r\n var _proto = Form.prototype;\r\n _proto.addField = function addField(fldvar, validators, invalid) {\r\n if (!(fldvar in this.fields)) this.fields[fldvar] = new Field(fldvar, validators, invalid);\r\n }\r\n\r\n /**\r\n * Get field\r\n * @param {string} fldvar Field variable name\r\n * @returns Field\r\n */;\r\n _proto.getField = function getField(fldvar) {\r\n return this.fields[fldvar];\r\n }\r\n\r\n /**\r\n * Add fields by field definitions\r\n * @param {Array} fields\r\n */;\r\n _proto.addFields = function addFields(fields) {\r\n if (Array.isArray(fields)) {\r\n for (let field of fields) {\r\n if (Array.isArray(field)) {\r\n this.addField.apply(this, field);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Add error\r\n * @param {string} fldvar Field variable name\r\n * @param {Object} err Error\r\n */;\r\n _proto.addError = function addError(fldvar, err) {\r\n if (err) {\r\n var _this$_error;\r\n this._error = (_this$_error = this._error) != null ? _this$_error : {};\r\n this._error[fldvar] = err;\r\n }\r\n }\r\n\r\n /**\r\n * Add custom error\r\n * @param {string} fldvar Field variable name\r\n * @param {string} msg Error message\r\n * @param {number} rowIndex - Row index\r\n */;\r\n _proto.addCustomError = function addCustomError(fldvar, msg, rowIndex) {\r\n if (fldvar in this.fields) {\r\n let field = this.fields[fldvar],\r\n err = {\r\n custom: msg\r\n };\r\n field.addError(err);\r\n this.setFieldElement(fldvar, rowIndex);\r\n field.updateFeedback();\r\n this.addError(fldvar, err);\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Get error\r\n */;\r\n /**\r\n * Set focus to a HTML element\r\n * @param {HTMLElement} el - HTML element to be focused\r\n */\r\n _proto.setFocus = function setFocus(el) {\r\n let delay = this.makeVisible(el) ? Form.focusDelay : 0;\r\n if (el && el != document.activeElement && el.focus) {\r\n let preventScroll = !el.closest(\".modal-body\") && Form.autoFocusPreventScroll && this.autoFocusPreventScroll;\r\n setTimeout(() => {\r\n el.focus({\r\n preventScroll\r\n });\r\n }, delay); // Focus after tab transition\r\n this._focused = true;\r\n this.trigger(\"focused\");\r\n }\r\n }\r\n\r\n /**\r\n * Set focus to the first field with error\r\n */;\r\n _proto.focus = function focus() {\r\n if (!this.canFocus()) return;\r\n for (let [fldvar, field] of Object.entries(this.fields)) {\r\n var _this$_error2;\r\n if (field.invalid || (_this$_error2 = this._error) != null && _this$_error2[fldvar]) {\r\n this.getFocusable(field);\r\n if (field.canFocus()) {\r\n this.setFocus(field.element);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Get focuable field element\r\n * @param {Field} field - Field object\r\n */;\r\n _proto.getFocusable = function getFocusable(field) {\r\n var _field$element;\r\n (_field$element = field.element) != null ? _field$element : field.element = this.getFieldElements(field.name);\r\n if (!field.canFocus()) field.element = this.getFieldElements(field.name, 0); // Inline-Add\r\n if (!field.canFocus()) field.element = this.getFieldElements(field.name, 1); // Inline-Edit or Grid-Add/Edit\r\n }\r\n\r\n /**\r\n * Try set focus to a field\r\n * @param {string|undefined|true} fieldName [undefined] - Field variable name. If undefined, find the first field. If true, always try to focus.\r\n */;\r\n _proto.tryFocus = function tryFocus(fieldName) {\r\n if (!this.canFocus()) return;\r\n if (!fieldName && (!Form.autoFocus || !this.autoFocus || this._focused)) return;\r\n if (!fieldName && this.invalid) {\r\n // Has error\r\n this.focus();\r\n return;\r\n }\r\n if ([\"add\", \"edit\"].includes(this.pageId)) {\r\n // Process detail forms\r\n let form = this.getForm(),\r\n detailpage = Array.from(form.querySelectorAll(\"input[name=detailpage]\")).find(dp => {\r\n var _ew$forms$get;\r\n return (_ew$forms$get = ew.forms.get(dp.value)) == null ? void 0 : _ew$forms$get.invalid;\r\n });\r\n if (detailpage) {\r\n detailpage.focus();\r\n return;\r\n }\r\n }\r\n for (let [fldvar, field] of Object.entries(this.fields)) {\r\n if (typeof fieldName == \"string\" && fieldName !== fldvar) continue;\r\n field.element = null; // Reset field element first so that it will get the first element\r\n this.getFocusable(field);\r\n if (field.canFocus()) {\r\n this.setFocus(field.element);\r\n return;\r\n }\r\n }\r\n let input = this.element[ew.TABLE_BASIC_SEARCH]; // Quick Search input\r\n if (this.id.endsWith(\"srch\") && input && input != document.activeElement) {\r\n // Extended Search\r\n input.focus({\r\n preventScroll: Form.autoFocusPreventScroll && this.autoFocusPreventScroll\r\n }); // Focus the Quick Search input\r\n this._focused = true;\r\n this.trigger(\"focused\");\r\n }\r\n }\r\n\r\n /**\r\n * Check if the form can be focused\r\n */;\r\n _proto.canFocus = function canFocus() {\r\n var _el$style, _el$classList;\r\n let el = this.element;\r\n return el && !(el.hidden || el.type == \"hidden\" || ((_el$style = el.style) == null ? void 0 : _el$style.display) == \"none\" || (_el$classList = el.classList) != null && _el$classList.contains(\"d-none\"));\r\n }\r\n\r\n /**\r\n * Make the form visible\r\n * @param {HTMLElement} el - Focused element\r\n */;\r\n _proto.makeVisible = function makeVisible(el) {\r\n if (this.multiPage) {\r\n // Multi-page\r\n this.multiPage.gotoPageByElement(el);\r\n return true;\r\n } else if (this.$element.is(\"div\")) {\r\n // Multiple Master/Detail\r\n let $pane = this.$element.closest(\".tab-pane\");\r\n if ($pane[0] && !$pane.hasClass(\"active\")) {\r\n $pane.closest(\".ew-nav\").find(\"a[data-bs-toggle=tab][href='#\" + $pane.attr(\"id\") + \"']\").trigger(\"click\");\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Validate all fields of the specified row\r\n * @param {number} rowIndex - Row index\r\n */;\r\n _proto.validateFields = function validateFields(rowIndex) {\r\n var _rowIndex;\r\n (_rowIndex = rowIndex) != null ? _rowIndex : rowIndex = this.getCurrentRowIndex();\r\n if (rowIndex < 2)\r\n // Regular pages (\"\"), Inline-Add (\"0\") or first row (\"1\")\r\n this.value = null; // Reset\r\n this.row = {};\r\n this._error = null; // Reset\r\n let result = true;\r\n for (let field of Object.values(this.fields)) {\r\n field.element = this.getFieldElements(field.name, rowIndex);\r\n this.row[field.name] = field.value; // Get field value\r\n if (field.element && !field.validate()) {\r\n // Invalid field value\r\n this.addError(field.name, field.error);\r\n result = false;\r\n }\r\n }\r\n // Save the field values of the row\r\n if (!this.value) {\r\n this.value = {\r\n ...this.row\r\n };\r\n } else {\r\n if (!Array.isArray(this.value)) this.value = [this.value];\r\n let index = parseInt(rowIndex, 10) || 0;\r\n index = index > 1 ? index - 1 : 0;\r\n this.value[index] = {\r\n ...this.row\r\n };\r\n }\r\n this.focus();\r\n return result;\r\n }\r\n\r\n /**\r\n * Key count (number|NaN)\r\n */;\r\n /**\r\n * Validate\r\n * @param {Event} e - Event\r\n * @returns {bool}\r\n */\r\n _proto.validate = async function validate(e) {\r\n var _form$querySelector, _form$querySelector2, _ref, _e$currentTarget;\r\n if (!this.validateRequired) return true; // Ignore validation\r\n\r\n let form = this.getForm();\r\n if (((_form$querySelector = form.querySelector(\"#confirm\")) == null ? void 0 : _form$querySelector.value) == \"confirm\") return true;\r\n if (this.pageId == \"update\" && !ew.updateSelected(form)) {\r\n ew.alert(ew.language.phrase(\"NoFieldSelected\"));\r\n return false;\r\n }\r\n let addcnt = 0,\r\n inlineAdd = form.querySelector(\".ew-inline-insert\"),\r\n // Inline-Add\r\n action = ((_form$querySelector2 = form.querySelector(\"#action\")) == null ? void 0 : _form$querySelector2.value) || ((_ref = (_e$currentTarget = e == null ? void 0 : e.currentTarget) != null ? _e$currentTarget : inlineAdd) == null ? void 0 : _ref.dataset.action),\r\n keycnt = inlineAdd ? 0 : this.keyCount,\r\n gridinsert = action == \"gridinsert\" || [\"insert\", \"confirm\"].includes(action) && keycnt,\r\n // Grid-Add or Master/Detail-Add\r\n startcnt = inlineAdd ? 0 : 1,\r\n rowcnt = inlineAdd ? 0 : keycnt || 1;\r\n for (let i = startcnt; i <= rowcnt; i++) {\r\n var _await$this$customVal, _this$customValidate;\r\n let rowIndex = keycnt >= 0 ? String(i) : \"\";\r\n form.dataset.rowindex = rowIndex;\r\n if ([\"list\", \"grid\"].includes(this.pageId)) {\r\n if (gridinsert ? !this.emptyRow(rowIndex) : true) addcnt++;else continue;\r\n }\r\n\r\n // Validate fields\r\n if (!this.validateFields(rowIndex)) return false;\r\n\r\n // Call customValidate event\r\n if (!((_await$this$customVal = await ((_this$customValidate = this.customValidate) == null ? void 0 : _this$customValidate.call(this, form))) != null ? _await$this$customVal : true)) {\r\n this.focus();\r\n return false;\r\n }\r\n }\r\n delete form.dataset.rowindex; // Reset\r\n\r\n if (this.pageId == \"list\" && gridinsert && addcnt == 0) {\r\n // No row added\r\n ew.alert({\r\n html: ew.language.phrase(\"NoAddRecord\"),\r\n returnFocus: false\r\n }); // Do not return focus\r\n this.tryFocus(true);\r\n return false;\r\n }\r\n\r\n // Process detail forms\r\n if ([\"add\", \"edit\"].includes(this.pageId)) {\r\n let detailpages = form.querySelectorAll(\"input[name=detailpage]\");\r\n for (let dp of detailpages) {\r\n var _await$frm$validate;\r\n let frm = ew.forms.get(dp.value);\r\n if (!((_await$frm$validate = await (frm == null || frm.validate == null ? void 0 : frm.validate(e))) != null ? _await$frm$validate : true)) return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Get current row index (during validation)\r\n * @returns {string} Row index\r\n */;\r\n _proto.getCurrentRowIndex = function getCurrentRowIndex() {\r\n var _this$getForm$dataset;\r\n return (_this$getForm$dataset = this.getForm().dataset.rowindex) != null ? _this$getForm$dataset : \"\";\r\n }\r\n\r\n /**\r\n * Get field values of the specified row\r\n * @param {number} rowIndex - Row index\r\n */;\r\n _proto.getValue = function getValue(rowIndex) {\r\n var _rowIndex2;\r\n (_rowIndex2 = rowIndex) != null ? _rowIndex2 : rowIndex = this.getCurrentRowIndex();\r\n let value = {};\r\n for (let field of Object.values(this.fields)) {\r\n var _field$element2;\r\n (_field$element2 = field.element) != null ? _field$element2 : field.element = this.getFieldElements(field.name, rowIndex);\r\n value[field.name] = field.value; // Get field value\r\n }\r\n return value;\r\n }\r\n\r\n /**\r\n * Get a field value of the specified row\r\n * @param {string} fldvar - Field variable name\r\n * @param {number} rowIndex - Row index\r\n */;\r\n _proto.getFieldValue = function getFieldValue(fldvar, rowIndex) {\r\n let field = this.getField(fldvar);\r\n if (field) {\r\n var _rowIndex3, _field$element3;\r\n (_rowIndex3 = rowIndex) != null ? _rowIndex3 : rowIndex = this.getCurrentRowIndex();\r\n (_field$element3 = field.element) != null ? _field$element3 : field.element = this.getFieldElements(field.name, rowIndex);\r\n return field.value;\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Get HTML elements for a field\r\n * @param {string} name - Field name\r\n * @param {number} rowIndex - Row index\r\n * @returns HTMLElement|HTMLElement[]|null\r\n */;\r\n _proto.getFieldElements = function getFieldElements(name, rowIndex) {\r\n var _rowIndex4;\r\n (_rowIndex4 = rowIndex) != null ? _rowIndex4 : rowIndex = this.getCurrentRowIndex();\r\n return this.getElements(\"x\" + rowIndex + \"_\" + name) ||\r\n // By name with prefix\r\n this.getElements(\"x\" + rowIndex + \"_\" + name + \"[]\") ||\r\n // By name with prefix and []\r\n this.getElements(name); // By name directly (e.g. email form)\r\n }\r\n\r\n /**\r\n * Set the element property of the field object and return the field elements\r\n * @param {string} fldvar - Field variable name\r\n * @param {number} rowIndex - Row index\r\n * @returns HTMLElement|HTMLElement[]|null\r\n */;\r\n _proto.setFieldElement = function setFieldElement(fldvar, rowIndex) {\r\n let field = this.getField(fldvar);\r\n if (field) field.element = this.getFieldElements(field.name, rowIndex);\r\n return field == null ? void 0 : field.element;\r\n }\r\n\r\n /**\r\n * Set invalid fields of the specified row\r\n * @param {number} rowIndex - Row index. If undefined, set for the whole form.\r\n */;\r\n _proto.setInvalid = function setInvalid(rowIndex) {\r\n let form = this.getForm(); // Get HTML form\r\n if (typeof rowIndex === \"undefined\" && this.formKeyCountName) {\r\n let inlineAdd = form.querySelector(\".ew-inline-insert\"),\r\n // Inline-Add\r\n keycnt = inlineAdd ? 0 : this.keyCount,\r\n startcnt = inlineAdd ? 0 : 1,\r\n rowcnt = inlineAdd ? 0 : keycnt || 1;\r\n for (let i = startcnt; i <= rowcnt; i++) {\r\n let rowIndex = keycnt >= 0 ? String(i) : \"\";\r\n this.setInvalid(rowIndex);\r\n }\r\n } else {\r\n var _rowIndex5;\r\n (_rowIndex5 = rowIndex) != null ? _rowIndex5 : rowIndex = \"\";\r\n for (let field of Object.values(this.fields)) {\r\n field.element = this.getFieldElements(field.name, rowIndex); // Always get element in case Grid-Add/Edit\r\n if (rowIndex) field.resetInvalid(); // For Grid-Add/Edit\r\n if (field.invalid) {\r\n this.addError(field.name, field.error);\r\n if (!this._focused) this.focus(); // Focus at the current row\r\n } else {\r\n continue;\r\n }\r\n ew.setInvalid(field.element);\r\n }\r\n // Process detail forms\r\n if ([\"add\", \"edit\"].includes(this.pageId)) form.querySelectorAll(\"input[name=detailpage]\").forEach(dp => {\r\n var _ew$forms$get2;\r\n return (_ew$forms$get2 = ew.forms.get(dp.value)) == null ? void 0 : _ew$forms$get2.setInvalid();\r\n });\r\n }\r\n };\r\n return _createClass(Form, [{\r\n key: \"error\",\r\n get: function () {\r\n return this._error;\r\n }\r\n\r\n /**\r\n * Check if invalid\r\n */\r\n }, {\r\n key: \"invalid\",\r\n get: function () {\r\n return this._error || Object.values(this.fields).some(field => field.invalid);\r\n }\r\n }, {\r\n key: \"keyCount\",\r\n get: function () {\r\n var _this$getForm$querySe;\r\n let keycnt = this.formKeyCountName ? (_this$getForm$querySe = this.getForm().querySelector(\"#\" + this.formKeyCountName)) == null ? void 0 : _this$getForm$querySe.value : undefined; // Get key_count\r\n return parseInt(keycnt, 10);\r\n }\r\n }]);\r\n }(FormBase);\r\n _defineProperty(Form, \"autoFocus\", true);\r\n _defineProperty(Form, \"autoFocusPreventScroll\", true);\r\n _defineProperty(Form, \"focusDelay\", 200);\n\n /**\r\n * Class FormBuilder\r\n */\r\n let FormBuilder = /*#__PURE__*/function () {\r\n function FormBuilder() {\r\n _defineProperty(this, \"lists\", {});\r\n _defineProperty(this, \"fields\", []);\r\n _defineProperty(this, \"validateRequired\", false);\r\n _defineProperty(this, \"multiPage\", false);\r\n _defineProperty(this, \"submitWithFetch\", false);\r\n _defineProperty(this, \"initSearchPanel\", false);\r\n _defineProperty(this, \"enableOnInit\", false);\r\n }\r\n var _proto = FormBuilder.prototype;\r\n // Set ID\r\n _proto.setId = function setId(value) {\r\n this.id = value;\r\n return this;\r\n }\r\n\r\n // Set page ID\r\n ;\r\n _proto.setPageId = function setPageId(value) {\r\n this.pageId = value;\r\n return this;\r\n }\r\n\r\n // Set lists\r\n ;\r\n _proto.setLists = function setLists(value) {\r\n if (value && typeof value == \"object\" && !Array.isArray(value)) this.lists = value;\r\n return this;\r\n }\r\n\r\n // Set lists for query builder (Dynamic Selection Lists and AutoFill not supported since there can be multiple inputs for the same field)\r\n ;\r\n _proto.setQueryBuilderLists = function setQueryBuilderLists(value) {\r\n if (value && typeof value == \"object\" && !Array.isArray(value)) {\r\n for (let [id, list] of Object.entries(value)) value[id] = {\r\n ...list,\r\n ...{\r\n autoFillTargetFields: [],\r\n childFields: [],\r\n filterFieldVars: [],\r\n filterFields: [],\r\n parentFields: []\r\n }\r\n };\r\n this.lists = value;\r\n }\r\n return this;\r\n }\r\n\r\n // Add list\r\n ;\r\n _proto.addList = function addList(name, value) {\r\n this.lists[name] = value;\r\n return this;\r\n }\r\n\r\n // Set fields\r\n ;\r\n _proto.setFields = function setFields(value) {\r\n if (Array.isArray(value)) this.fields = value;\r\n return this;\r\n }\r\n\r\n // Add field\r\n ;\r\n _proto.addField = function addField(fldvar, validators, invalid) {\r\n if (!this.fields.find(field => field[0] == fldvar)) this.fields.push([fldvar, validators, invalid]);\r\n return this;\r\n }\r\n\r\n // Add fields\r\n ;\r\n _proto.addFields = function addFields(value) {\r\n if (Array.isArray(value)) this.fields = [...this.fields, ...value];\r\n return this;\r\n }\r\n\r\n // Set validate\r\n ;\r\n _proto.setValidate = function setValidate(value) {\r\n this.validate = value;\r\n return this;\r\n }\r\n\r\n // Set custom validate\r\n ;\r\n _proto.setCustomValidate = function setCustomValidate(value) {\r\n this.customValidate = value;\r\n return this;\r\n }\r\n\r\n // Set validate required\r\n ;\r\n _proto.setValidateRequired = function setValidateRequired(value) {\r\n this.validateRequired = value;\r\n return this;\r\n }\r\n\r\n // Set submit\r\n ;\r\n _proto.setSubmit = function setSubmit(value) {\r\n this.submit = value;\r\n return this;\r\n }\r\n\r\n // Set form KeyCount name\r\n ;\r\n _proto.setFormKeyCountName = function setFormKeyCountName(value) {\r\n this.formKeyCountName = value;\r\n return this;\r\n }\r\n\r\n // Set empty row\r\n ;\r\n _proto.setEmptyRow = function setEmptyRow(value) {\r\n this.emptyRow = value;\r\n return this;\r\n }\r\n\r\n // Set multi page\r\n ;\r\n _proto.setMultiPage = function setMultiPage(value) {\r\n this.multiPage = value;\r\n return this;\r\n }\r\n\r\n // Set submit with Fetch API\r\n ;\r\n _proto.setSubmitWithFetch = function setSubmitWithFetch(value) {\r\n this.submitWithFetch = value;\r\n return this;\r\n }\r\n\r\n // Set filter list\r\n ;\r\n _proto.setFilterList = function setFilterList(value) {\r\n this.filterList = value;\r\n return this;\r\n }\r\n\r\n // Set initSearchPanel\r\n ;\r\n _proto.setInitSearchPanel = function setInitSearchPanel(value) {\r\n this.initSearchPanel = value;\r\n return this;\r\n }\r\n\r\n // Set enableOnInit\r\n ;\r\n _proto.setEnableOnInit = function setEnableOnInit(value) {\r\n this.enableOnInit = value;\r\n return this;\r\n }\r\n\r\n // Build\r\n ;\r\n _proto.build = function build() {\r\n let form = new ew.Form(this.id, this.pageId);\r\n if (Array.isArray(this.fields)) form.addFields(this.fields);\r\n if (typeof this.validate == 'function') form.validate = this.validate;\r\n if (typeof this.customValidate == 'function') form.customValidate = this.customValidate;\r\n if (typeof this.emptyRow == 'function') form.emptyRow = this.emptyRow;\r\n if (typeof this.submit == 'function') form.submit = this.submit;\r\n if (this.formKeyCountName) form.formKeyCountName = this.formKeyCountName;\r\n if (this.multiPage) form.multiPage = new ew.MultiPage(this.id);\r\n if (this.enableOnInit) form.enableOnInit = true;\r\n if (this.submitWithFetch) {\r\n form.submitWithFetch = true;\r\n form.on(\"aftersubmit\", (e, args) => ew.refresh(args == null ? void 0 : args.result, args == null ? void 0 : args.context));\r\n }\r\n if (this.filterList) form.filterList = this.filterList;\r\n if (this.lists) form.lists = this.lists;\r\n form.validateRequired = !!this.validateRequired;\r\n form.initSearchPanel = !!this.initSearchPanel;\r\n form.lists = this.lists;\r\n return form;\r\n };\r\n return FormBuilder;\r\n }();\n\n // AjaxLookup class\r\n let AjaxLookup = /*#__PURE__*/function () {\r\n /**\r\n * Constructor\r\n * @param {Object} settings Settings\r\n * @param {string} settings.id - Input element ID\r\n * @param {string|Form} settings.form - Form of the input element\r\n * @param {Number} settings.limit - Options per page\r\n * @param {Object} settings.data - Data submitted by Ajax\r\n * @param {string} settings.action - Ajax action: \"autosuggest\" or \"modal\"\r\n */\r\n function AjaxLookup(settings) {\r\n var _this$list$parentFiel, _this$list$parentFiel2;\r\n _defineProperty(this, \"_isAutoSuggest\", null);\r\n this.elementId = settings.id; // Id\r\n this.form = settings.form; // Form\r\n if ($$1.isString(this.form))\r\n // Form is string => Form id\r\n this.form = ew.forms.get(this.form);\r\n this.element = this.form.getElement(this.elementId); // Actual HTML element\r\n if (!this.element)\r\n // Element not found\r\n return;\r\n this.formElement = this.form.getElement(); // HTML form or DIV\r\n this.list = this.form.getList(this.element);\r\n let m = this.elementId.match(/^[xy](\\d*|\\$rowindex\\$)_/),\r\n rowindex = m ? m[1] : \"\";\r\n this.parentFields = (_this$list$parentFiel = (_this$list$parentFiel2 = this.list.parentFields) == null ? void 0 : _this$list$parentFiel2.slice() // Clone\r\n .map(pf => pf.split(\" \").length == 1 ? pf.replace(/^x_/, \"x\" + rowindex + \"_\") : pf)) != null ? _this$list$parentFiel : []; // Parent field in the same table, add row index\r\n this.limit = settings.limit;\r\n this.debounce = settings.debounce;\r\n this.data = settings.data;\r\n this.recordCount = 0;\r\n this.action = settings.action || \"autosuggest\";\r\n }\r\n\r\n /**\r\n * Is AutoSuggest\r\n */\r\n var _proto = AjaxLookup.prototype;\r\n /**\r\n * Format display value\r\n * @param {Array} opt Option\r\n */\r\n _proto.formatResult = function formatResult(opt) {\r\n this.form.compileTemplates();\r\n return this.list.template && !this.isAutoSuggest ? this.list.template.render(opt, ew.jsRenderHelpers) : ew.displayValue(opt, this.element) || opt[0];\r\n }\r\n\r\n /**\r\n * Generate request\r\n */;\r\n _proto.generateRequest = function generateRequest() {\r\n var _data$ajax;\r\n var data = Object.assign({}, this.data, {\r\n name: this.element.name,\r\n page: this.list.page,\r\n field: this.list.field,\r\n language: ew.LANGUAGE_ID\r\n }, ew.getUserParams(\"#p_\" + this.elementId, this.formElement));\r\n (_data$ajax = data.ajax) != null ? _data$ajax : data.ajax = this.action;\r\n if (this.parentFields.length > 0) this.parentFields.forEach((pf, i) => data[\"v\" + (i + 1)] = ew.getOptionValue(pf, this.formElement));\r\n return data;\r\n }\r\n\r\n /**\r\n * Get URL\r\n */;\r\n _proto.getUrl = function getUrl(query, start) {\r\n let params = new URLSearchParams({\r\n q: query || \"\",\r\n n: this.limit,\r\n rnd: ew.random(),\r\n start: $$1.isNumber(start) ? start : -1\r\n });\r\n return ew.getApiUrl(ew.API_LOOKUP_ACTION, params.toString());\r\n }\r\n\r\n /**\r\n * Prepare URL and data for sending request\r\n * @param {string} query Search term\r\n * @param {Number} start Start page\r\n */;\r\n _proto.prepare = function prepare(query, start) {\r\n return {\r\n url: this.getUrl(query, start),\r\n type: \"POST\",\r\n dataType: \"json\",\r\n data: this.generateRequest()\r\n };\r\n }\r\n\r\n /**\r\n * Transform options (virtual)\r\n * @param {Object[]} data Data from server\r\n */;\r\n _proto.transform = function transform(data) {\r\n let results = [];\r\n if ((data == null ? void 0 : data.result) == \"OK\") {\r\n this.recordCount = data.totalRecordCount;\r\n results = data.records;\r\n }\r\n return results;\r\n }\r\n\r\n /**\r\n * Convert options to Select2 data format\r\n * @param {Object[]} options Options\r\n * @returns {Object[]}\r\n */;\r\n _proto.toSelect2Data = function toSelect2Data(options) {\r\n if (Array.isArray(options)) {\r\n if (options.every(item => item.hasOwnProperty(\"gf\"))) {\r\n // Has group by field\r\n let groups = [...new Set(options.map(item => item.gf))];\r\n return groups.map(group => {\r\n return {\r\n text: group,\r\n children: options.filter(item => item.gf == group).map(item => {\r\n return {\r\n id: item.lf,\r\n text: this.formatResult({\r\n lf: item.lf,\r\n df: item.df,\r\n df2: item.df2,\r\n df3: item.df3,\r\n df4: item.df4\r\n })\r\n };\r\n })\r\n };\r\n });\r\n } else {\r\n return options.map(item => {\r\n return {\r\n id: item.lf,\r\n text: this.formatResult({\r\n lf: item.lf,\r\n df: item.df,\r\n df2: item.df2,\r\n df3: item.df3,\r\n df4: item.df4\r\n })\r\n };\r\n });\r\n }\r\n }\r\n return options;\r\n };\r\n return _createClass(AjaxLookup, [{\r\n key: \"isAutoSuggest\",\r\n get: function () {\r\n var _this$_isAutoSuggest;\r\n (_this$_isAutoSuggest = this._isAutoSuggest) != null ? _this$_isAutoSuggest : this._isAutoSuggest = ew.isAutoSuggest(this.element);\r\n return this._isAutoSuggest;\r\n }\r\n\r\n /**\r\n * Lookup options\r\n */\r\n }, {\r\n key: \"options\",\r\n get: function () {\r\n return this.list.lookupOptions;\r\n }\r\n }]);\r\n }();\n\n function _assertThisInitialized(e) {\r\n if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\r\n return e;\r\n }\n\n // AutoSuggest class\r\n let AutoSuggest = /*#__PURE__*/function (_AjaxLookup) {\r\n function AutoSuggest(settings) {\r\n var _this;\r\n _this = _AjaxLookup.call(this, settings) || this;\r\n if (!_this.element)\r\n // Element not found\r\n return _assertThisInitialized(_this);\r\n _this.input = _this.form.getElement(\"sv_\" + _this.elementId); // User input\r\n if (!_this.input || _this.elementId.includes(\"$rowindex$\")) return _assertThisInitialized(_this);\r\n let self = _this,\r\n $input = $$1(_this.input),\r\n $element = $$1(_this.element);\r\n\r\n // Properties\r\n _this.minWidth = settings.minWidth;\r\n _this.maxHeight = settings.maxHeight;\r\n _this.highlight = settings.highlight;\r\n _this.hint = settings.hint;\r\n _this.minLength = settings.minLength;\r\n _this.templates = Object.assign({}, settings.templates);\r\n _this.classNames = Object.assign({}, settings.classNames);\r\n _this.delay = settings.delay; // For loading more results\r\n _this.debounce = settings.debounce;\r\n _this.display = settings.display || \"text\";\r\n _this.forceSelection = settings.forceSelect;\r\n _this.lineHeight = settings.lineHeight;\r\n _this.paddingY = settings.paddingY;\r\n _this.lookupAllDisplayFields = settings.lookupAllDisplayFields;\r\n _this.$input = $input;\r\n _this.$element = $element;\r\n\r\n // Save instance\r\n $element.data(\"autosuggest\", _this);\r\n\r\n // Save initial option\r\n if ($input.val() && $element.val()) _this.element.add($element.val(), $input.val(), true);\r\n\r\n // Add events\r\n $input.on(\"typeahead:select\", (e, d) => {\r\n self.setValue(d[self.display]);\r\n }).on(\"change\", () => {\r\n let ta = $input.data(\"tt-typeahead\");\r\n if (ta != null && ta.isOpen() && !ta.menu.empty()) {\r\n let $item = ta.menu.getActiveSelectable();\r\n if ($item) {\r\n // A suggestion is highlighted\r\n let i = $item.index(),\r\n val = self.element.options[i].text;\r\n $input.typeahead(\"val\", val);\r\n }\r\n }\r\n self.setValue();\r\n }).on(\"blur\", () => {\r\n // \"change\" fires before blur\r\n let ta = $input.data(\"tt-typeahead\");\r\n if (ta != null && ta.isOpen()) ta.menu.close();\r\n }).on(\"focus\", () => {\r\n $input.attr(\"placeholder\", $input.data(\"placeholder\")).removeClass(\"is-invalid\");\r\n $element.removeClass(\"is-invalid\");\r\n });\r\n\r\n // Get suggestions\r\n let async = !_this.options.length,\r\n loadingMore = false,\r\n timer;\r\n\r\n // Option template (\"suggestion\" template)\r\n let tpl = self.list.template || self.templates.suggestion;\r\n if (tpl && $$1.isString(tpl)) tpl = $$1.templates(tpl);\r\n if (tpl) self.templates.suggestion = tpl.render.bind(tpl);\r\n if (async && !self.templates.footer) self.templates.footer = '<div class=\"tt-footer dropdown-item\"><div class=\"spinner-border spinner-border-sm text-primary\" role=\"status\"><span class=\"visually-hidden\">' + ew.language.phrase(\"LoadingMore\") + '</span></div></div>'; // \"footer\" template\r\n\r\n let source = (query, syncResults, asyncResults) => {\r\n if (async) {\r\n if (timer) timer.cancel();\r\n timer = $$1.later(_this.debounce, null, () => {\r\n _this.recordCount = 0; // Reset\r\n $$1.ajax(_this.prepare(query)).done(data => asyncResults(_this.transform(data)));\r\n });\r\n } else {\r\n let records = _this.getSyncResults(query);\r\n syncResults(_this.transform({\r\n result: \"OK\",\r\n totalRecordCount: records.length,\r\n records\r\n }));\r\n }\r\n };\r\n\r\n // Create Typeahead\r\n $$1(function () {\r\n // Typeahead options and dataset\r\n let options = {\r\n highlight: self.highlight,\r\n minLength: self.minLength,\r\n hint: self.hint,\r\n classNames: self.classNames\r\n };\r\n let dataset = {\r\n name: self.form.id + \"-\" + self.elementId,\r\n source,\r\n async,\r\n templates: self.templates,\r\n display: self.display,\r\n limit: async ? self.limit : Infinity\r\n };\r\n let args = [options, dataset];\r\n // Trigger \"typeahead\" event\r\n $element.trigger(\"typeahead\", [args]);\r\n // Create Typeahead\r\n self.typeahead = $input.typeahead.apply($input, args).off(\"blur.tt\").data(\"tt-typeahead\");\r\n let menu = self.typeahead.menu,\r\n $menu = menu.$node,\r\n $dataset = $menu.find(\".tt-dataset\"),\r\n suggestionHeight = () => $menu.find(\".tt-suggestion\").outerHeight(false);\r\n if (self.minWidth) $menu.css(\"min-width\", self.minWidth);\r\n $input.on(\"typeahead:rendered\", (e, suggestions) => {\r\n let rendered = suggestions.length,\r\n count = self.count;\r\n if (count >= self.limit) {\r\n let h = suggestionHeight();\r\n if (h) $dataset.css(\"max-height\", h * self.limit);\r\n }\r\n if (rendered > 0) $dataset.scrollTop(suggestionHeight() * (count - rendered)); // Scroll to the first suggestion\r\n if (async) $menu.find(\".tt-footer\").toggle(self.recordCount > count);\r\n });\r\n if (async) {\r\n let loadingMoreTimer;\r\n $dataset.on(\"scroll\", () => {\r\n var _loadingMoreTimer;\r\n (_loadingMoreTimer = loadingMoreTimer) == null || _loadingMoreTimer.cancel();\r\n loadingMoreTimer = $$1.later(self.delay, null, () => {\r\n let $footer = $menu.find(\".tt-footer\");\r\n if (!$footer.is(\":hidden\") && !loadingMore) {\r\n let currentOffset = $dataset.offset().top + $dataset.outerHeight(false),\r\n loadingMoreOffset = $footer.offset().top + $footer.outerHeight(false);\r\n if (currentOffset + 20 > loadingMoreOffset) {\r\n // $footer shows more than 20px\r\n loadingMore = true;\r\n self.getMore().always(() => loadingMore = false);\r\n } else {\r\n var _loadingMoreTimer2;\r\n (_loadingMoreTimer2 = loadingMoreTimer) == null || _loadingMoreTimer2.cancel();\r\n }\r\n }\r\n });\r\n });\r\n }\r\n });\r\n return _this;\r\n }\r\n\r\n // Set the selected item to the actual field\r\n _inheritsLoose(AutoSuggest, _AjaxLookup);\r\n var _proto = AutoSuggest.prototype;\r\n _proto.setValue = function setValue(v) {\r\n v || (v = this.$input.val());\r\n let index = this.element.options.findIndex(option => option.text == v);\r\n if (index < 0) {\r\n // Not found in results\r\n if (this.forceSelection && v) {\r\n // Force selection and query not empty => error\r\n this.$input.typeahead(\"val\", \"\").addClass(\"is-invalid\");\r\n this.$element.next(\".invalid-feedback\").html(ew.language.phrase(\"ValueNotExist\"));\r\n this.$element.addClass(\"is-invalid\").val(\"\").trigger(\"change\");\r\n return;\r\n }\r\n } else {\r\n // Found in results\r\n this.element.options[index].selected = true;\r\n if (!/s(ea)?rch$/.test(this.formElement.id) || this.forceSelection)\r\n // Force selection or not search form\r\n v = this.element.options[index].value; // Replace the display value by Link Field value\r\n }\r\n if (v !== this.$element.attr(\"value\")) this.$element.attr(\"value\", v).trigger(\"change\"); // Set value to the actual field\r\n }\r\n\r\n // Transform suggestion\r\n ;\r\n _proto.transform = function transform(data) {\r\n let results = _AjaxLookup.prototype.transform.call(this, data).map(item => Object.assign({}, item, {\r\n text: _AjaxLookup.prototype.formatResult.call(this, item)\r\n }));\r\n this.element.options = results.map(item => new ew.SelectionListOption(item.text, item.lf || item[0]));\r\n return results;\r\n }\r\n\r\n // Get current suggestion count\r\n ;\r\n // Get suggestions from lookup cache\r\n _proto.getSyncResults = function getSyncResults(query) {\r\n if (this.options.length) {\r\n let results = this.options.filter(item => {\r\n if (this.lookupAllDisplayFields) {\r\n let v = [item.df, item.df2, item.df3, item.df4].map(df => String(df).toLowerCase()).join(\" \");\r\n return query.toLowerCase().split(\" \").filter(q => q !== \"\").every(q => v.includes(q));\r\n } else {\r\n return String(item.df).toLowerCase().startsWith(query);\r\n }\r\n });\r\n this.recordCount = results.length;\r\n return results;\r\n }\r\n return [];\r\n }\r\n\r\n // Get more suggestions by Ajax\r\n ;\r\n _proto.getMore = function getMore() {\r\n let menu = this.typeahead.menu,\r\n start = this.count,\r\n settings = this.prepare(menu.query, start);\r\n return $$1.ajax(settings).done(data => menu.datasets[0]._append(menu.query, this.transform(data)));\r\n };\r\n return _createClass(AutoSuggest, [{\r\n key: \"count\",\r\n get: function () {\r\n return this.typeahead.menu.$node.find(\".tt-suggestion.tt-selectable\").length || 0;\r\n }\r\n }]);\r\n }(AjaxLookup);\n\n /**\r\n * Class Forms\r\n */\r\n let Forms = /*#__PURE__*/function () {\r\n function Forms() {\r\n _defineProperty(this, \"_forms\", {});\r\n }\r\n var _proto = Forms.prototype;\r\n /**\r\n * Get form by element or id\r\n * @param {HTMLElement|string} el Element or id\r\n */\r\n _proto.get = function get(el) {\r\n var _ew$getForm;\r\n if (!el) return null;\r\n let id = $$1.isString(el) ? el : (_ew$getForm = ew.getForm(el)) == null ? void 0 : _ew$getForm.id;\r\n return this._forms[id];\r\n }\r\n\r\n /**\r\n * Add form\r\n * @param {Form} f Form\r\n */;\r\n _proto.add = function add(f) {\r\n if (this._forms[f.id] && this._forms[f.id] !== f) delete this._forms[f.id];\r\n this._forms[f.id] = f;\r\n }\r\n\r\n /**\r\n * Get all ids\r\n * @returns {string[]}\r\n */;\r\n _proto.ids = function ids() {\r\n return Object.keys(this._forms);\r\n };\r\n return Forms;\r\n }();\n\n let lang = ew.language.phrase(\"select2\");\r\n var Select2Language = {\r\n errorLoading: function () {\r\n return lang.errorLoading;\r\n },\r\n inputTooLong: function (args) {\r\n var overChars = args.input.length - args.maximum;\r\n return lang.inputTooLong.replace(\"%s\", overChars);\r\n },\r\n inputTooShort: function (args) {\r\n var remainingChars = args.minimum - args.input.length;\r\n return lang.inputTooShort.replace(\"%s\", remainingChars);\r\n },\r\n loadingMore: function () {\r\n return '<div class=\"spinner-border spinner-border-sm text-primary\" role=\"status\"><span class=\"visually-hidden\">' + lang.loadingMore + '</span></div>';\r\n },\r\n maximumSelected: function (args) {\r\n return lang.maximumSelected.replace(\"%s\", args.maximum);\r\n },\r\n noResults: function () {\r\n return lang.noResults;\r\n },\r\n searching: function () {\r\n return '<div class=\"spinner-border spinner-border-sm text-primary\" role=\"status\"><span class=\"visually-hidden\">' + lang.searching + '</span></div>';\r\n },\r\n removeAllItems: function () {\r\n return lang.removeAllItems;\r\n },\r\n removeItem: function () {\r\n return lang.removeItem;\r\n },\r\n search: function () {\r\n return lang.search;\r\n }\r\n };\n\n let _defined$3 = $$1.fn.select2.amd.require._defined,\r\n Utils$3 = _defined$3['select2/utils'];\r\n\r\n /**\r\n * Select2 decorator for Results\r\n */\r\n let Select2ResultsDecorator = /*#__PURE__*/function () {\r\n function Select2ResultsDecorator() {}\r\n var _proto = Select2ResultsDecorator.prototype;\r\n _proto.render = function render(decorated) {\r\n var $results = $$1('<div class=\"select2-results__options ' + this.options.get('containerClass') + '\" role=\"listbox\"></div>'); //***\r\n\r\n if (this.options.get('multiple')) {\r\n $results.attr('aria-multiselectable', 'true');\r\n }\r\n this.$results = $results;\r\n return $results;\r\n };\r\n _proto.displayMessage = function displayMessage(decorated, params) {\r\n var escapeMarkup = this.options.get('escapeMarkup');\r\n this.clear();\r\n this.hideLoading();\r\n var $message = $$1('<div role=\"alert\" aria-live=\"assertive\"' + ' class=\"select2-results__option\"></div>'); //***\r\n\r\n if (params.message.includes(\"<\") && params.message.includes(\">\")) {\r\n // HTML //***\r\n $message.append(params.message);\r\n } else {\r\n var message = this.options.get('translations').get(params.message);\r\n $message.append(escapeMarkup(message(params.args)));\r\n }\r\n $message[0].className += ' select2-results__message';\r\n this.$results.append($message);\r\n };\r\n _proto.append = function append(decorated, data) {\r\n this.hideLoading();\r\n if (data.results == null || data.results.length === 0) {\r\n if (this.$results.children().length === 0) {\r\n if (this.$element.data(\"updating\") && data.pagination.more) {\r\n this.trigger('results:message', {\r\n message: '<div class=\"spinner-border spinner-border-sm text-primary ew-select-spinner\" role=\"status\"><span class=\"visually-hidden\">' + ew.language.phrase('Loading') + '</span></div> ' + ew.language.phrase('Loading')\r\n });\r\n this.$element.one(\"updated\", () => this.$element.select2(\"close\").select2(\"open\"));\r\n } else {\r\n this.trigger('results:message', {\r\n message: 'noResults'\r\n });\r\n }\r\n }\r\n return;\r\n }\r\n data.results = this.sort(data.results);\r\n\r\n //***\r\n var cols = this.options.get('columns'),\r\n len = data.results.length,\r\n $row = this.$results.find(\".\" + this.options.get('rowClass')).last();\r\n for (var d = 0; d < data.results.length; d++) {\r\n var item = data.results[d];\r\n var $option = this.option(item);\r\n if (!$row.length || $row.children().length == cols) {\r\n // Add new row\r\n $row = $$1('<div class=\"' + this.options.get('rowClass') + '\"></div>');\r\n this.$results.append($row);\r\n }\r\n $row.append($option);\r\n if (d == len - 1) {\r\n // Last\r\n var cnt = cols - $row.children().length;\r\n for (var i = 0; i < cnt; i++) $row.append('<div class=\"' + this.options.get('cellClass') + '\"></div>');\r\n }\r\n }\r\n };\r\n _proto.option = function option(decorated, data) {\r\n // var option = document.createElement('li');\r\n var option = document.createElement('div'); //***\r\n option.classList.add('select2-results__option');\r\n option.classList.add('select2-results__option--selectable');\r\n this.options.get('cellClass').split(\" \").forEach(c => option.classList.add(c)); //***\r\n\r\n var attrs = {\r\n 'role': 'option',\r\n 'aria-selected': 'false'\r\n };\r\n var matches = window.Element.prototype.matches || window.Element.prototype.msMatchesSelector || window.Element.prototype.webkitMatchesSelector;\r\n if (data.element != null && matches.call(data.element, ':disabled') || data.element == null && data.disabled) {\r\n attrs['aria-disabled'] = 'true';\r\n option.classList.remove('select2-results__option--selectable');\r\n option.classList.add('select2-results__option--disabled');\r\n }\r\n if (data.id == null) {\r\n option.classList.remove('select2-results__option--selectable');\r\n }\r\n if (data._resultId != null) {\r\n option.id = data._resultId;\r\n }\r\n if (data.title) {\r\n option.title = data.title;\r\n }\r\n\r\n // if (data.children) { //***\r\n // attrs.role = 'group';\r\n // attrs['aria-label'] = data.text;\r\n // option.classList.remove('select2-results__option--selectable');\r\n // option.classList.add('select2-results__option--group');\r\n // }\r\n\r\n for (var attr in attrs) {\r\n var val = attrs[attr];\r\n option.setAttribute(attr, val);\r\n }\r\n\r\n // if (data.children) { //***\r\n // var $option = $(option);\r\n\r\n // var label = document.createElement('strong');\r\n // label.className = 'select2-results__group';\r\n\r\n // this.template(data, label);\r\n\r\n // var $children = [];\r\n\r\n // for (var c = 0; c < data.children.length; c++) {\r\n // var child = data.children[c];\r\n\r\n // var $child = this.option(child);\r\n\r\n // $children.push($child);\r\n // }\r\n\r\n // var $childrenContainer = $('<ul></ul>', {\r\n // 'class': 'select2-results__options select2-results__options--nested',\r\n // 'role': 'none'\r\n // });\r\n\r\n // $childrenContainer.append($children);\r\n\r\n // $option.append(label);\r\n // $option.append($childrenContainer);\r\n // } else {\r\n this.template(data, option);\r\n // }\r\n\r\n Utils$3.StoreData(option, 'data', data);\r\n return option;\r\n };\r\n return Select2ResultsDecorator;\r\n }();\n\n let _defined$2 = $$1.fn.select2.amd.require._defined,\r\n Utils$2 = _defined$2['select2/utils'];\r\n\r\n /**\r\n * Results for modal lookup\r\n */\r\n let ModalResults = /*#__PURE__*/function () {\r\n function ModalResults() {}\r\n var _proto = ModalResults.prototype;\r\n _proto.bind = function bind(decorated, container, $container) {\r\n var _container$listeners$;\r\n var self = this;\r\n decorated.call(this, container, $container);\r\n\r\n // Remove handlers\r\n (_container$listeners$ = container.listeners['results:select']) == null || _container$listeners$.pop();\r\n this.$results.off('mouseup');\r\n container.on('results:select', function (evt) {\r\n var $highlighted = self.getHighlightedResults();\r\n if ($highlighted.length === 0) {\r\n return;\r\n }\r\n var data = Utils$2.GetData($highlighted[0], 'data');\r\n if ($highlighted.hasClass('select2-results__option--selected')) {\r\n self.trigger('unselect', {\r\n originalEvent: evt,\r\n data: data\r\n });\r\n } else {\r\n self.trigger('select', {\r\n originalEvent: evt,\r\n data: data\r\n });\r\n }\r\n });\r\n this.$results.on('mousedown', '.select2-results__option--selectable', function (evt) {\r\n this._mousedown = true;\r\n });\r\n this.$results.on('mouseup', '.select2-results__option--selectable', function (evt) {\r\n if (!this._mousedown) return;\r\n var $this = $$1(this);\r\n var data = Utils$2.GetData(this, 'data');\r\n if ($this.hasClass('select2-results__option--selected')) {\r\n self.trigger('unselect', {\r\n originalEvent: evt,\r\n data: data\r\n });\r\n return;\r\n }\r\n self.trigger('select', {\r\n originalEvent: evt,\r\n data: data\r\n });\r\n });\r\n };\r\n return ModalResults;\r\n }();\n\n /**\r\n * Search box for modal lookup\r\n */\r\n let ModalSearch = /*#__PURE__*/function () {\r\n function ModalSearch() {}\r\n var _proto = ModalSearch.prototype;\r\n _proto.bind = function bind(decorated, container, $container) {\r\n var _container$listeners$;\r\n var self = this;\r\n decorated.call(this, container, $container);\r\n (_container$listeners$ = container.listeners['close']) == null || _container$listeners$.pop(); // Remove handler from Search\r\n\r\n container.on('close', function () {\r\n self.$search.attr('tabindex', -1).removeAttr('aria-controls').removeAttr('aria-activedescendant');\r\n });\r\n };\r\n return ModalSearch;\r\n }();\n\n /**\r\n * Dropdown search decorator\r\n */\r\n let KEYS = $.fn.select2.amd.require._defined['select2/keys'];\r\n KEYS.PRINT_SCREEN = 44;\r\n let DropdownSearchDecorator = /*#__PURE__*/function () {\r\n function DropdownSearchDecorator() {}\r\n var _proto = DropdownSearchDecorator.prototype;\r\n _proto.handleSearch = function handleSearch(decorated, evt) {\r\n var key = evt.which;\r\n\r\n // Ignore events from modifier keys\r\n if ([KEYS.TAB, KEYS.SHIFT, KEYS.CTRL, KEYS.ALT, KEYS.PRINT_SCREEN].includes(key)) {\r\n return;\r\n }\r\n if (!this._keyUpPrevented) {\r\n var input = this.$search.val();\r\n this.trigger('query', {\r\n term: input\r\n });\r\n }\r\n this._keyUpPrevented = false;\r\n };\r\n return DropdownSearchDecorator;\r\n }();\n\n let AttachBody$2 = $$1.fn.select2.amd.require._defined['select2/dropdown/attachBody'];\r\n\r\n /**\r\n * Select2 AttachBody with popper\r\n */\r\n let Select2AttachBody = /*#__PURE__*/function (_AttachBody) {\r\n // Constructor\r\n function Select2AttachBody(decorated, $element, options) {\r\n return _AttachBody.call(this, decorated, $element, options) || this;\r\n }\r\n\r\n // Override _attachPositioningHandler\r\n _inheritsLoose(Select2AttachBody, _AttachBody);\r\n var _proto = Select2AttachBody.prototype;\r\n _proto._attachPositioningHandler = function _attachPositioningHandler(decorated, container) {\r\n var self = this;\r\n var events = ['scroll.select2.' + container.id, 'resize.select2.' + container.id, 'orientationchange.select2.' + container.id];\r\n var handler = () => {\r\n self._positionDropdown();\r\n self._resizeDropdown();\r\n };\r\n $$1(window).on(events.join(' '), handler);\r\n container.$element.closest('.modal').on('scroll.select2.' + container.id, handler);\r\n };\r\n // Override _detachPositioningHandler\r\n _proto._detachPositioningHandler = function _detachPositioningHandler(decorated, container) {\r\n var events = ['scroll.select2.' + container.id, 'resize.select2.' + container.id, 'orientationchange.select2.' + container.id];\r\n $$1(window).off(events.join(' '));\r\n container.$element.closest('.modal').off('scroll.select2.' + container.id);\r\n };\r\n // Override _showDropdown\r\n _proto._showDropdown = function _showDropdown(decorated) {\r\n var _this$_popper;\r\n this.$dropdownContainer.appendTo(this.$dropdownParent);\r\n (_this$_popper = this._popper) != null ? _this$_popper : this._popper = Popper.createPopper(this.$container[0], this.$dropdownContainer[0], {\r\n placement: ew.IS_RTL ? 'bottom-end' : 'bottom-start',\r\n modifiers: [{\r\n name: 'flip',\r\n enabled: true\r\n }, {\r\n name: 'preventOverflow',\r\n enabled: true\r\n }]\r\n });\r\n this._positionDropdown();\r\n this._resizeDropdown();\r\n };\r\n // Override _positionDropdown()\r\n _proto._positionDropdown = function _positionDropdown() {\r\n var _this$_popper2;\r\n (_this$_popper2 = this._popper) == null || _this$_popper2.update();\r\n }\r\n\r\n // Override destroy()\r\n ;\r\n _proto.destroy = function destroy(decorated) {\r\n var _this$_popper3;\r\n _AttachBody.prototype.destroy.call(this, decorated);\r\n (_this$_popper3 = this._popper) == null || _this$_popper3.destroy();\r\n this._popper = null;\r\n };\r\n return Select2AttachBody;\r\n }(AttachBody$2);\n\n /**\r\n * Select2 AttachBody decorator for modal lookup\r\n */\r\n let ModalAttachBody = /*#__PURE__*/function () {\r\n function ModalAttachBody(decorated, $element, options) {\r\n _defineProperty(this, \"$modal\", null);\r\n options.set('dropdownParent', $$1(document.body));\r\n decorated.call(this, $element, options);\r\n }\r\n var _proto = ModalAttachBody.prototype;\r\n _proto.bind = function bind(decorated, container, $container) {\r\n let self = this;\r\n decorated.call(this, container, $container);\r\n container.on('open', function () {\r\n self._showDropdown();\r\n\r\n // Must bind after the results handlers to ensure correct sizing\r\n self._bindContainerResultHandlers(container);\r\n });\r\n this.$dropdownContainer.on('mousedown', function (evt) {\r\n evt.stopPropagation();\r\n });\r\n };\r\n _proto.position = function position(decorated, $dropdown, $container) {\r\n // Clone all of the container classes\r\n $dropdown.attr('class', $container.attr('class'));\r\n $dropdown.removeClass('select2');\r\n this.$container = $container;\r\n };\r\n _proto.render = function render(decorated) {\r\n let $container = $$1('<span></span>');\r\n let $dropdown = decorated.call(this);\r\n $container.append($dropdown);\r\n this.$dropdownContainer = $container;\r\n return $container;\r\n };\r\n _proto._bindContainerResultHandlers = function _bindContainerResultHandlers(decorated, container) {\r\n // These should only be bound once\r\n if (this._containerResultsHandlersBound) {\r\n return;\r\n }\r\n let self = this;\r\n container.$modal = this.$modal;\r\n container.on('results:all', function () {\r\n var _self$$search$;\r\n self._updateDropdown();\r\n (_self$$search$ = self.$search[0]) == null || _self$$search$.focus();\r\n });\r\n container.on('results:append', function () {\r\n self._updateDropdown();\r\n });\r\n container.on('results:message', function () {\r\n self._updateDropdown();\r\n });\r\n container.on('select', function (e) {\r\n var _e$originalEvent;\r\n let target = (_e$originalEvent = e.originalEvent) == null ? void 0 : _e$originalEvent.currentTarget;\r\n target == null || target.classList.add('select2-results__option--selected');\r\n self._updateDropdown();\r\n });\r\n container.on('unselect', function (e) {\r\n var _e$originalEvent2;\r\n let target = (_e$originalEvent2 = e.originalEvent) == null ? void 0 : _e$originalEvent2.currentTarget;\r\n target == null || target.classList.remove('select2-results__option--selected');\r\n self._updateDropdown();\r\n });\r\n this._containerResultsHandlersBound = true;\r\n };\r\n _proto._updateDropdown = function _updateDropdown() {\r\n if (!this.$modal.find(this.$dropdownContainer)[0]) this.$modal.find('.modal-body').children().detach().end().append(this.$dropdownContainer);\r\n };\r\n _proto._showDropdown = function _showDropdown(decorated) {\r\n var _this$$modal;\r\n let self = this,\r\n oldValue = this.$element.val();\r\n this.$dropdownContainer.appendTo(this.options.get('dropdownParent'));\r\n (_this$$modal = this.$modal) != null ? _this$$modal : this.$modal = $$1('#ew-modal-lookup-dialog');\r\n this._updateDropdown();\r\n this.$modal.find('.modal-title').empty().append(ew.language.phrase('LookupTitle').replace('%s', this.$element.data('caption')));\r\n this.$modal.find('.modal-footer button[data-value]').off().on('click', function () {\r\n if (!$$1(this).data('value'))\r\n // Cancel\r\n self.$element.val(oldValue).trigger('change');\r\n });\r\n this.$modal.modal('show').on('hidden.bs.modal', function (event) {\r\n self.$container.removeClass('select2-container--open');\r\n }).draggable(this.options.get('draggableOptions'));\r\n };\r\n return ModalAttachBody;\r\n }();\n\n let AttachBody$1 = $$1.fn.select2.amd.require._defined['select2/dropdown/attachBody'];\r\n\r\n /**\r\n * Select2 AttachBody for table header filter\r\n */\r\n let FilterAttachBody = /*#__PURE__*/function (_AttachBody) {\r\n // Constructor\r\n function FilterAttachBody(decorated, $element, options) {\r\n return _AttachBody.call(this, decorated, $element, options) || this;\r\n }\r\n\r\n // Override bind()\r\n _inheritsLoose(FilterAttachBody, _AttachBody);\r\n var _proto = FilterAttachBody.prototype;\r\n _proto.bind = function bind(decorated, container, $container) {\r\n var self = this;\r\n decorated.call(this, container, $container);\r\n container.on('open', function () {\r\n self._showDropdown();\r\n\r\n // Must bind after the results handlers to ensure correct sizing\r\n self._bindContainerResultHandlers(container);\r\n });\r\n container.on('close', function () {\r\n self._hideDropdown();\r\n });\r\n this.$dropdownContainer.on('mousedown', function (evt) {\r\n evt.stopPropagation();\r\n });\r\n }\r\n\r\n // Override _positionDropdown()\r\n ;\r\n _proto._positionDropdown = function _positionDropdown() {\r\n var _this$_popper;\r\n (_this$_popper = this._popper) == null || _this$_popper.update();\r\n }\r\n\r\n // Override _resizeDropdown()\r\n ;\r\n _proto._resizeDropdown = function _resizeDropdown() {\r\n var css = {\r\n width: this.$container.outerWidth(false) + 'px'\r\n };\r\n if (this.options.get('dropdownAutoWidth')) {\r\n css.minWidth = css.width;\r\n css.position = 'relative';\r\n css.width = 'auto';\r\n }\r\n this.$dropdown.css(css);\r\n }\r\n\r\n // Override _showDropdown()\r\n ;\r\n _proto._showDropdown = function _showDropdown(decorated) {\r\n var _dropdownButton$close, _this$_popper2;\r\n this.$dropdownContainer.appendTo(this.$dropdownParent);\r\n\r\n // Footer\r\n let self = this,\r\n oldValue = this.$element.val(),\r\n $footer = $$1('#ew-filter-dropdown-footer').contents().clone();\r\n $footer.find('.ew-filter-btn[data-value]').off('click.ew').on('click.ew', function (e) {\r\n let value = $$1(this).data('value');\r\n if (value) {\r\n // OK\r\n $$1(self.$element[0].form).triggerHandler('submit');\r\n } else {\r\n // Cancel\r\n self.$element.val(oldValue).trigger('change');\r\n }\r\n self.$element.select2('close');\r\n });\r\n $footer.find('.ew-filter-clear').off('click.ew').on('click.ew', e => self.$element.data('select2').selection._handleClear(e));\r\n let $filterDropdown = this.$dropdownContainer.find('.ew-filter-dropdown');\r\n if (!$filterDropdown.find('.ew-filter-btn')[0]) $filterDropdown.append($footer);\r\n\r\n // Popper\r\n var dropdownButton = document.querySelector('.ew-filter-dropdown-btn[data-table=' + this.$element.data('table') + '][data-field=' + this.$element.data('field') + ']'),\r\n reference = (_dropdownButton$close = dropdownButton.closest(\".ew-table-header-cell\")) != null ? _dropdownButton$close : dropdownButton.closest(\".ew-table-header-btn\");\r\n (_this$_popper2 = this._popper) != null ? _this$_popper2 : this._popper = Popper.createPopper(reference, this.$dropdownContainer[0], {\r\n placement: ew.IS_RTL ? 'bottom-end' : 'bottom-start',\r\n modifiers: [{\r\n name: 'flip',\r\n enabled: true\r\n }, {\r\n name: 'preventOverflow',\r\n enabled: true\r\n }]\r\n });\r\n this._positionDropdown();\r\n this._resizeDropdown();\r\n }\r\n\r\n // Override position()\r\n ;\r\n _proto.position = function position(decorated, $dropdown, $container) {\r\n // Clone all of the container classes\r\n $dropdown.attr('class', $container.attr('class'));\r\n $dropdown[0].classList.remove('select2');\r\n $dropdown[0].classList.add('select2-container--open');\r\n this.$container = $container;\r\n };\r\n // Override destroy()\r\n _proto.destroy = function destroy(decorated) {\r\n var _this$_popper3;\r\n _AttachBody.prototype.destroy.call(this, decorated);\r\n (_this$_popper3 = this._popper) == null || _this$_popper3.destroy();\r\n this._popper = null;\r\n };\r\n return FilterAttachBody;\r\n }(AttachBody$1);\n\n let AttachBody = $$1.fn.select2.amd.require._defined['select2/dropdown/attachBody'];\r\n\r\n /**\r\n * Select2 AttachBody for dropdown\r\n */\r\n let DropdownAttachBody = /*#__PURE__*/function (_AttachBody) {\r\n // Constructor\r\n function DropdownAttachBody(decorated, $element, options) {\r\n return _AttachBody.call(this, decorated, $element, options) || this;\r\n }\r\n\r\n // Override bind()\r\n _inheritsLoose(DropdownAttachBody, _AttachBody);\r\n var _proto = DropdownAttachBody.prototype;\r\n _proto.bind = function bind(decorated, container, $container) {\r\n var self = this;\r\n decorated.call(this, container, $container);\r\n container.on('open', function () {\r\n self._showDropdown();\r\n\r\n // Must bind after the results handlers to ensure correct sizing\r\n self._bindContainerResultHandlers(container);\r\n });\r\n container.on('close', function () {\r\n self._hideDropdown();\r\n });\r\n this.$dropdownContainer.on('mousedown', function (evt) {\r\n evt.stopPropagation();\r\n });\r\n }\r\n\r\n // Override _showDropdown()\r\n ;\r\n _proto._showDropdown = function _showDropdown(decorated) {\r\n var _this$_popper;\r\n this.$dropdownContainer.appendTo(this.$dropdownParent);\r\n (_this$_popper = this._popper) != null ? _this$_popper : this._popper = Popper.createPopper(this.$element.parent().find('.select2-container')[0], this.$dropdownContainer[0], {\r\n placement: ew.IS_RTL ? 'bottom-end' : 'bottom-start',\r\n modifiers: [{\r\n name: 'flip',\r\n enabled: true\r\n }, {\r\n name: 'preventOverflow',\r\n enabled: true\r\n }]\r\n });\r\n this._positionDropdown();\r\n this._resizeDropdown();\r\n }\r\n\r\n // Override _positionDropdown()\r\n ;\r\n _proto._positionDropdown = function _positionDropdown() {\r\n var _this$_popper2;\r\n (_this$_popper2 = this._popper) == null || _this$_popper2.update();\r\n }\r\n\r\n // Override position()\r\n ;\r\n _proto.position = function position(decorated, $dropdown, $container) {\r\n // Clone all of the container classes\r\n $dropdown.attr('class', $container.attr('class'));\r\n $dropdown[0].classList.remove('select2');\r\n $dropdown[0].classList.add('select2-container--open');\r\n this.$container = $container;\r\n };\r\n // Override destroy()\r\n _proto.destroy = function destroy(decorated) {\r\n var _this$_popper3;\r\n _AttachBody.prototype.destroy.call(this, decorated);\r\n (_this$_popper3 = this._popper) == null || _this$_popper3.destroy();\r\n this._popper = null;\r\n };\r\n return DropdownAttachBody;\r\n }(AttachBody);\n\n let _defined$1 = $$1.fn.select2.amd.require._defined,\r\n AllowClear$1 = _defined$1['select2/selection/allowClear'],\r\n Utils$1 = _defined$1['select2/utils'];\r\n\r\n /**\r\n * Select2 AttachBody for table header filter\r\n */\r\n let FilterAllowClear = /*#__PURE__*/function (_AllowClear) {\r\n function FilterAllowClear() {\r\n return _AllowClear.apply(this, arguments) || this;\r\n }\r\n _inheritsLoose(FilterAllowClear, _AllowClear);\r\n var _proto = FilterAllowClear.prototype;\r\n // Override _handleClear\r\n _proto._handleClear = function _handleClear(_, evt) {\r\n // Ignore the event if it is disabled\r\n if (this.isDisabled()) {\r\n return;\r\n }\r\n var $clear = this.$selection.find('.select2-selection__clear');\r\n\r\n // Ignore the event if nothing has been selected\r\n if ($clear.length === 0) {\r\n return;\r\n }\r\n evt.stopPropagation();\r\n var data = Utils$1.GetData($clear[0], 'data');\r\n var previousVal = this.$element.val();\r\n this.$element.val(this.placeholder.id);\r\n var unselectData = {\r\n data: data\r\n };\r\n this.trigger('clear', unselectData);\r\n if (unselectData.prevented) {\r\n this.$element.val(previousVal);\r\n return;\r\n }\r\n for (var d = 0; d < data.length; d++) {\r\n unselectData = {\r\n data: data[d]\r\n };\r\n\r\n // Trigger the `unselect` event, so people can prevent it from being\r\n // cleared.\r\n this.trigger('unselect', unselectData);\r\n\r\n // If the event was prevented, don't clear it out.\r\n if (unselectData.prevented) {\r\n this.$element.val(previousVal);\r\n return;\r\n }\r\n }\r\n this.$element.trigger('input').trigger('change');\r\n };\r\n return FilterAllowClear;\r\n }(AllowClear$1);\n\n /**\r\n * Select2 decorator for MultipleSelection\r\n */\r\n let Select2MultipleSelectionDecorator = /*#__PURE__*/function () {\r\n function Select2MultipleSelectionDecorator() {}\r\n var _proto = Select2MultipleSelectionDecorator.prototype;\r\n _proto.bind = function bind(decorated, container, $container) {\r\n decorated.call(this, container, $container);\r\n this.$selection.on('click', '.select2-selection__choice__remove', function (evt) {\r\n evt.stopPropagation();\r\n });\r\n };\r\n return Select2MultipleSelectionDecorator;\r\n }();\n\n /**\r\n * Select2 decorator for SelectAdapter\r\n */\r\n let Select2DataAdapterDecorator = /*#__PURE__*/function () {\r\n function Select2DataAdapterDecorator() {}\r\n var _proto = Select2DataAdapterDecorator.prototype;\r\n _proto.option = function option(decorated, data) {\r\n var _data$element;\r\n var text = data.text,\r\n html = (_data$element = data.element) == null ? void 0 : _data$element.innerHTML,\r\n $option = decorated.call(this, data);\r\n\r\n // Check HTML\r\n if (text.startsWith('<') && text.endsWith('>')) $option.html(text);else if (html && html != text) $option.html(html);\r\n return $option;\r\n };\r\n return Select2DataAdapterDecorator;\r\n }();\n\n // Defined classes from select2\r\n let _defined = $.fn.select2.amd.require._defined,\r\n ResultsList = _defined['select2/results'],\r\n SingleSelection = _defined['select2/selection/single'],\r\n MultipleSelection = _defined['select2/selection/multiple'],\r\n Placeholder = _defined['select2/selection/placeholder'],\r\n AllowClear = _defined['select2/selection/allowClear'],\r\n SelectionSearch = _defined['select2/selection/search'],\r\n EventRelay = _defined['select2/selection/eventRelay'],\r\n Utils = _defined['select2/utils'],\r\n Translation = _defined['select2/translation'],\r\n SelectData = _defined['select2/data/select'],\r\n ArrayData = _defined['select2/data/array'],\r\n AjaxData = _defined['select2/data/ajax'],\r\n Tags = _defined['select2/data/tags'],\r\n Tokenizer = _defined['select2/data/tokenizer'],\r\n MinimumInputLength = _defined['select2/data/minimumInputLength'],\r\n MaximumInputLength = _defined['select2/data/maximumInputLength'],\r\n MaximumSelectionLength = _defined['select2/data/maximumSelectionLength'],\r\n Dropdown = _defined['select2/dropdown'],\r\n DropdownSearch = _defined['select2/dropdown/search'],\r\n HidePlaceholder = _defined['select2/dropdown/hidePlaceholder'],\r\n InfiniteScroll = _defined['select2/dropdown/infiniteScroll'],\r\n // AttachBody = _defined['select2/dropdown/attachBody'],\r\n MinimumResultsForSearch = _defined['select2/dropdown/minimumResultsForSearch'],\r\n SelectOnClose = _defined['select2/dropdown/selectOnClose'],\r\n CloseOnSelect = _defined['select2/dropdown/closeOnSelect'],\r\n DropdownCSS = _defined['select2/dropdown/dropdownCss'],\r\n TagsSearchHighlight = _defined['select2/dropdown/tagsSearchHighlight'],\r\n Defaults = _defined['select2/defaults'];\r\n\r\n // Override select2 Defaults\r\n Defaults.apply = function (options) {\r\n options = $.extend(true, {}, this.defaults, options);\r\n if (options.dataAdapter == null) {\r\n if (options.ajax != null) {\r\n options.dataAdapter = AjaxData;\r\n } else if (options.data != null) {\r\n options.dataAdapter = ArrayData;\r\n } else {\r\n options.dataAdapter = SelectData;\r\n }\r\n options.dataAdapter = Utils.Decorate(\r\n // Override\r\n options.dataAdapter, Select2DataAdapterDecorator);\r\n if (options.minimumInputLength > 0) {\r\n options.dataAdapter = Utils.Decorate(options.dataAdapter, MinimumInputLength);\r\n }\r\n if (options.maximumInputLength > 0) {\r\n options.dataAdapter = Utils.Decorate(options.dataAdapter, MaximumInputLength);\r\n }\r\n if (options.maximumSelectionLength > 0) {\r\n options.dataAdapter = Utils.Decorate(options.dataAdapter, MaximumSelectionLength);\r\n }\r\n if (options.tags) {\r\n options.dataAdapter = Utils.Decorate(options.dataAdapter, Tags);\r\n }\r\n if (options.tokenSeparators != null || options.tokenizer != null) {\r\n options.dataAdapter = Utils.Decorate(options.dataAdapter, Tokenizer);\r\n }\r\n }\r\n if (options.resultsAdapter == null) {\r\n options.resultsAdapter = ResultsList;\r\n\r\n // Override\r\n if (options.columns > 0 && options.customOption) {\r\n options.resultsAdapter = Utils.Decorate(options.resultsAdapter, Select2ResultsDecorator);\r\n if (options.iconClass && options.multiple && options.templateResult == ew.selectOptions.templateResult) {\r\n options._templateResult = options.templateResult;\r\n options.templateResult = result => result.loading ? result.text : '<div class=\"form-check-input ew-dropdown-check-input\"></div><label class=\"' + options.iconClass + ' ew-dropdown-check-label\">' + options._templateResult(result) + '</label>';\r\n }\r\n } else if (options.modal || options.filter) {\r\n options.resultsAdapter = Utils.Decorate(options.resultsAdapter, ModalResults);\r\n }\r\n if (options.ajax != null) {\r\n options.resultsAdapter = Utils.Decorate(options.resultsAdapter, InfiniteScroll);\r\n }\r\n if (options.placeholder != null) {\r\n options.resultsAdapter = Utils.Decorate(options.resultsAdapter, HidePlaceholder);\r\n }\r\n if (options.selectOnClose) {\r\n options.resultsAdapter = Utils.Decorate(options.resultsAdapter, SelectOnClose);\r\n }\r\n if (options.tags) {\r\n options.resultsAdapter = Utils.Decorate(options.resultsAdapter, TagsSearchHighlight);\r\n }\r\n }\r\n if (options.dropdownAdapter == null) {\r\n if (options.modal || options.filter) {\r\n options.dropdownAdapter = Utils.Decorate(Dropdown, DropdownSearch);\r\n options.dropdownAdapter = Utils.Decorate(options.dropdownAdapter, DropdownSearchDecorator);\r\n options.dropdownAdapter = Utils.Decorate(options.dropdownAdapter, ModalSearch);\r\n } else {\r\n options.dropdownAdapter = Dropdown;\r\n if (!options.multiple) {\r\n options.dropdownAdapter = Utils.Decorate(options.dropdownAdapter, DropdownSearch);\r\n options.dropdownAdapter = Utils.Decorate(options.dropdownAdapter, DropdownSearchDecorator);\r\n }\r\n }\r\n if (options.minimumResultsForSearch !== 0) {\r\n options.dropdownAdapter = Utils.Decorate(options.dropdownAdapter, MinimumResultsForSearch);\r\n }\r\n if (options.closeOnSelect) {\r\n options.dropdownAdapter = Utils.Decorate(options.dropdownAdapter, CloseOnSelect);\r\n }\r\n if (options.dropdownCssClass != null) {\r\n options.dropdownAdapter = Utils.Decorate(options.dropdownAdapter, DropdownCSS);\r\n }\r\n options.dropdownAdapter = Utils.Decorate(options.dropdownAdapter, options.modal ? ModalAttachBody : options.filter ? FilterAttachBody : options.dropdown ? DropdownAttachBody : Select2AttachBody // Override\r\n );\r\n }\r\n if (options.selectionAdapter == null) {\r\n if (options.multiple) {\r\n options.selectionAdapter = MultipleSelection;\r\n options.selectionAdapter = Utils.Decorate(\r\n // Override\r\n options.selectionAdapter, Select2MultipleSelectionDecorator);\r\n } else {\r\n options.selectionAdapter = SingleSelection;\r\n }\r\n\r\n // Add the placeholder mixin if a placeholder was specified\r\n if (options.placeholder != null) {\r\n options.selectionAdapter = Utils.Decorate(options.selectionAdapter, Placeholder);\r\n }\r\n if (options.allowClear) {\r\n options.selectionAdapter = Utils.Decorate(options.selectionAdapter, options.filter ? FilterAllowClear : AllowClear);\r\n }\r\n if (options.multiple) {\r\n options.selectionAdapter = Utils.Decorate(options.selectionAdapter, SelectionSearch);\r\n }\r\n options.selectionAdapter = Utils.Decorate(options.selectionAdapter, EventRelay);\r\n }\r\n options.translations = new Translation(Select2Language);\r\n options.dir = ew.IS_RTL ? \"rtl\" : \"ltr\";\r\n return options;\r\n };\n\n let currentUrl = new URL(window.location);\r\n let forms = new Forms();\r\n let $document$1 = $$1(document),\r\n $body = $$1(\"body\");\r\n let fieldContainerSelector = \".row, [id^=el_], [class^=el_]\";\r\n\r\n // Set focus\r\n Pace.on(\"done\", () => {\r\n var _forms$get;\r\n let form = document.querySelector(\".modal.show form.ew-form\") || document.querySelector(\"form.ew-form\");\r\n (_forms$get = forms.get(form == null ? void 0 : form.id)) == null || _forms$get.tryFocus();\r\n });\r\n\r\n // Create select2\r\n function createSelect(options) {\r\n if (options.selectId.includes(\"$rowindex$\")) return;\r\n if ($$1.isObject(options.data)) {\r\n let lookup = new ew.AjaxLookup(options.data);\r\n options.data = lookup.toSelect2Data(lookup.options);\r\n }\r\n if ($$1.isObject(options.ajax)) {\r\n let limit = options.ajax.limit,\r\n lookup = new ew.AjaxLookup({\r\n ...options.ajax,\r\n ...{\r\n action: \"modal\"\r\n }\r\n });\r\n options.ajax = {\r\n url: params => {\r\n let start = params.page ? (params.page - 1) * limit : -1;\r\n return lookup.getUrl(params.term, start);\r\n },\r\n type: \"POST\",\r\n dataType: \"json\",\r\n data: lookup.generateRequest.bind(lookup),\r\n delay: options.debounce,\r\n processResults: function (data) {\r\n var _data$records$length, _data$records;\r\n let self = this;\r\n return {\r\n results: lookup.toSelect2Data(lookup.transform(data)),\r\n pagination: {\r\n more: self.container.$results.find(\".select2-results__option:not(.select2-results__option--load-more)\").length + ((_data$records$length = (_data$records = data.records) == null ? void 0 : _data$records.length) != null ? _data$records$length : 0) < lookup.recordCount\r\n }\r\n };\r\n },\r\n transport: (params, success, failure) => $$1.ajax(params).then(data => {\r\n let error = getError(data);\r\n !error || _alert(error);\r\n success(data);\r\n }).fail(failure)\r\n };\r\n }\r\n let args = {\r\n name: options.name,\r\n options\r\n };\r\n $document$1.trigger(\"select2\", [args]);\r\n let $select = $$1(\"select[data-select2-id='\" + options.selectId + \"']\").select2(args.options);\r\n $select.on(\"select2:open\", function () {\r\n var _$$data$$dropdown$fin;\r\n (_$$data$$dropdown$fin = $$1(this).data(\"select2\").$dropdown.find(\".select2-search__field\")[0]) == null || _$$data$$dropdown$fin.focus();\r\n });\r\n if ($$1.isObject(options.ajax)) {\r\n $select.on(\"select2:opening\", function () {\r\n $$1(this).data(\"select2\").$results.find(\".select2-results__option:not(.loading-results)\").remove();\r\n });\r\n }\r\n if (options.minimumResultsForSearch === Infinity) {\r\n $select.on(\"select2:opening select2:closing\", function () {\r\n $$1(this).data(\"select2\").$dropdown.find(\".select2-search--dropdown\").addClass(\"select2-search--hide\");\r\n });\r\n }\r\n }\r\n\r\n // Create modal lookup\r\n function createModalLookup(options) {\r\n if (options.selectId.includes(\"$rowindex$\")) return;\r\n if ($$1.isObject(options.data)) {\r\n let lookup = new ew.AjaxLookup(options.data);\r\n options.data = lookup.options.map(item => {\r\n return {\r\n id: item.lf,\r\n text: lookup.formatResult({\r\n lf: item.lf,\r\n df: item.df,\r\n df2: item.df2,\r\n df3: item.df3,\r\n df4: item.df4\r\n })\r\n };\r\n });\r\n }\r\n if ($$1.isObject(options.ajax)) {\r\n let limit = options.ajax.limit,\r\n lookup = new ew.AjaxLookup({\r\n ...options.ajax,\r\n ...{\r\n action: \"modal\"\r\n }\r\n });\r\n options.ajax = {\r\n url: params => {\r\n let start = params.page ? (params.page - 1) * limit : -1;\r\n return lookup.getUrl(params.term, start);\r\n },\r\n type: \"POST\",\r\n dataType: \"json\",\r\n data: lookup.generateRequest.bind(lookup),\r\n delay: options.debounce,\r\n processResults: function (data) {\r\n var _data$records$length2, _data$records2;\r\n let self = this;\r\n return {\r\n results: lookup.transform(data).map(item => {\r\n return {\r\n id: item.lf,\r\n text: lookup.formatResult({\r\n lf: item.lf,\r\n df: item.df,\r\n df2: item.df2,\r\n df3: item.df3,\r\n df4: item.df4\r\n })\r\n };\r\n }),\r\n pagination: {\r\n more: self.container.$results.find(\".select2-results__option:not(.select2-results__option--load-more)\").length + ((_data$records$length2 = (_data$records2 = data.records) == null ? void 0 : _data$records2.length) != null ? _data$records$length2 : 0) < lookup.recordCount\r\n }\r\n };\r\n },\r\n transport: (params, success, failure) => $$1.ajax(params).then(data => {\r\n let error = getError(data);\r\n !error || _alert(error);\r\n success(data);\r\n }).fail(failure)\r\n };\r\n }\r\n let $select = $$1(\"select[data-select2-id='\" + options.selectId + \"']\").select2(options);\r\n $select.on(\"select2:open\", function () {\r\n var _$$data$$dropdown$fin2;\r\n (_$$data$$dropdown$fin2 = $$1(this).data(\"select2\").$dropdown.find(\".select2-search__field\").addClass(\"form-control\")[0]) == null || _$$data$$dropdown$fin2.focus();\r\n });\r\n if ($$1.isObject(options.ajax)) {\r\n $select.on(\"select2:opening\", function () {\r\n $$1(this).data(\"select2\").$results.find(\".select2-results__option:not(.loading-results)\").remove();\r\n });\r\n }\r\n }\r\n\r\n // Create table header filter\r\n function createFilter(options) {\r\n if (options.selectId.includes(\"$rowindex$\")) return;\r\n if ($$1.isObject(options.data)) {\r\n let lookup = new ew.AjaxLookup(options.data);\r\n options.data = lookup.options.map(item => {\r\n return {\r\n id: item.lf,\r\n text: lookup.formatResult({\r\n lf: item.lf,\r\n df: item.df,\r\n df2: item.df2,\r\n df3: item.df3,\r\n df4: item.df4\r\n })\r\n };\r\n });\r\n }\r\n if ($$1.isObject(options.ajax)) {\r\n let limit = options.ajax.limit,\r\n lookup = new ew.AjaxLookup({\r\n ...options.ajax,\r\n ...{\r\n action: \"modal\"\r\n }\r\n });\r\n options.ajax = {\r\n url: params => {\r\n let start = params.page ? (params.page - 1) * limit : -1;\r\n return lookup.getUrl(params.term, start);\r\n },\r\n type: \"POST\",\r\n dataType: \"json\",\r\n data: lookup.generateRequest.bind(lookup),\r\n delay: options.debounce,\r\n processResults: function (data) {\r\n var _data$records$length3, _data$records3;\r\n let self = this;\r\n return {\r\n results: lookup.transform(data).map(item => {\r\n return {\r\n id: item.lf,\r\n text: lookup.formatResult({\r\n lf: item.lf,\r\n df: item.df,\r\n df2: item.df2,\r\n df3: item.df3,\r\n df4: item.df4\r\n })\r\n };\r\n }),\r\n pagination: {\r\n more: self.container.$results.find(\".select2-results__option:not(.select2-results__option--load-more)\").length + ((_data$records$length3 = (_data$records3 = data.records) == null ? void 0 : _data$records3.length) != null ? _data$records$length3 : 0) < lookup.recordCount\r\n }\r\n };\r\n },\r\n transport: (params, success, failure) => $$1.ajax(params).then(data => {\r\n let error = getError(data);\r\n !error || _alert(error);\r\n success(data);\r\n }).fail(failure)\r\n };\r\n }\r\n let $select = $$1(\"select[data-select2-id='\" + options.selectId + \"']\").select2(options);\r\n $select.on(\"select2:open\", function () {\r\n var _$$data$$dropdown$fin3;\r\n (_$$data$$dropdown$fin3 = $$1(this).data(\"select2\").$dropdown.find(\".select2-search__field\").addClass(\"form-control\")[0]) == null || _$$data$$dropdown$fin3.focus({\r\n preventScroll: options.preventScroll\r\n }); // Do not scroll on focus by default\r\n });\r\n if ($$1.isObject(options.ajax)) {\r\n $select.on(\"select2:opening\", function () {\r\n $$1(this).data(\"select2\").$results.find(\".select2-results__option:not(.loading-results)\").remove();\r\n });\r\n }\r\n }\r\n\r\n // Init icon tooltip\r\n function initIcons(e) {\r\n var _e$target;\r\n let el = (_e$target = e == null ? void 0 : e.target) != null ? _e$target : document,\r\n tooltipOptions = {\r\n ...ew.tooltipOptions,\r\n container: \"body\",\r\n trigger: ew.IS_MOBILE ? \"manual\" : \"hover\"\r\n };\r\n $$1(el).find(\".ew-icon\").closest(\".btn, .ew-home, .ew-row-link:not(.dropdown-item)\").each(function () {\r\n let $this = $$1(this);\r\n if ($this.hasClass(\"dropdown-toggle\")) {\r\n let $p = $this.closest(\".btn-group\");\r\n if ($p.children(\".btn\").length == 1) {\r\n $p.tooltip({\r\n ...tooltipOptions,\r\n title: this.dataset.title || this.title\r\n }).on(\"mouseleave\", e => {\r\n var _bootstrap$Tooltip$ge;\r\n return (_bootstrap$Tooltip$ge = bootstrap.Tooltip.getInstance(e.currentTarget)) == null ? void 0 : _bootstrap$Tooltip$ge.hide();\r\n });\r\n $this.next(\".dropdown-menu\").on(\"mouseover\", e => e.stopPropagation());\r\n }\r\n } else {\r\n $this.tooltip(tooltipOptions);\r\n }\r\n });\r\n }\r\n\r\n // Init password options\r\n function initPasswordOptions(e) {\r\n var _e$target2;\r\n var el = (_e$target2 = e == null ? void 0 : e.target) != null ? _e$target2 : document;\r\n if ($$1.fn.pStrength && typeof ew.MIN_PASSWORD_STRENGTH != \"undefined\") {\r\n $$1(el).find(\".ew-password-strength\").each(function () {\r\n var $this = $$1(this);\r\n if (!$this.data(\"pStrength\")) $this.pStrength({\r\n \"changeBackground\": false,\r\n \"backgrounds\": [],\r\n \"passwordValidFrom\": ew.MIN_PASSWORD_STRENGTH,\r\n \"onPasswordStrengthChanged\": function (strength, percentage) {\r\n var $pst = $$1(\"[id='\" + this.attr(\"data-password-strength\") + \"']\"),\r\n // Do not use #\r\n $pb = $pst.find(\".progress-bar\");\r\n if (this.val() && !ew.isMaskedPassword(this)) {\r\n var pct = percentage + \"%\",\r\n min = ew.MIN_PASSWORD_STRENGTH,\r\n valid = percentage >= min;\r\n if (percentage < min * 0.25) {\r\n $pb.addClass(\"text-bg-danger\").removeClass(\"text-bg-warning text-bg-info text-bg-success\");\r\n } else if (percentage < min * 0.5) {\r\n $pb.addClass(\"text-bg-warning\").removeClass(\"text-bg-danger text-bg-info text-bg-success\");\r\n } else if (percentage < min * 0.75) {\r\n $pb.addClass(\"text-bg-primary\").removeClass(\"text-bg-danger text-bg-warning text-bg-success\");\r\n } else {\r\n $pb.addClass(\"text-bg-success\").removeClass(\"text-bg-danger text-bg-warning text-bg-info\");\r\n }\r\n $pb.css(\"width\", pct);\r\n if (percentage > min * 0.5) pct = ew.language.phrase(\"PasswordStrength\").replace(\"%p\", pct);\r\n $pb.html(pct);\r\n $pst.removeClass(\"d-none\");\r\n this.data(\"validated\", valid);\r\n if (valid) setValid(this[0]);\r\n } else {\r\n $pst.addClass(\"d-none\");\r\n this.data(\"validated\", null);\r\n }\r\n $pst.width(this.outerWidth());\r\n }\r\n });\r\n });\r\n }\r\n if ($$1.fn.pGenerator) {\r\n $$1(el).find(\".ew-password-generator\").each(function () {\r\n var $this = $$1(this);\r\n if (!$this.data(\"pGenerator\")) $this.pGenerator({\r\n \"passwordLength\": ew.GENERATE_PASSWORD_LENGTH,\r\n \"uppercase\": ew.GENERATE_PASSWORD_UPPERCASE,\r\n \"lowercase\": ew.GENERATE_PASSWORD_LOWERCASE,\r\n \"numbers\": ew.GENERATE_PASSWORD_NUMBER,\r\n \"specialChars\": ew.GENERATE_PASSWORD_SPECIALCHARS,\r\n \"onPasswordGenerated\": function (pwd) {\r\n $$1(\"#\" + this.attr(\"data-password-confirm\")).val(pwd);\r\n $$1(\"#\" + this.attr(\"data-password-field\")).val(pwd).trigger(\"change\").trigger(\"focus\").triggerHandler(\"click\"); // Trigger click to remove \"is-invalid\" class (Do not use $this.data)\r\n }\r\n });\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Get API action URL\r\n * @param {string|string[]} action - Route as string or array, e.g. \"foo\", [\"foo\", \"1\"]\r\n * @param {string|string[]|Object|URLSearchParams|FormData} query - Search params, e.g. \"foo=1&bar=2\", [[\"foo\", \"1\"], [\"bar\", \"2\"]], {\"foo\": \"1\", \"bar\": \"2\"}\r\n */\r\n function getApiUrl(action, query) {\r\n var url = ew.PATH_BASE + ew.API_URL,\r\n params = query instanceof URLSearchParams ? query : new URLSearchParams(query),\r\n qs = params.toString();\r\n if ($$1.isString(action)) {\r\n // Route as string\r\n url += action ? action : \"\";\r\n } else if (Array.isArray(action)) {\r\n // Route as array\r\n var route = action.map(function (v) {\r\n return encodeURIComponent(v);\r\n }).join(\"/\");\r\n url += route ? route : \"\";\r\n }\r\n return url + (qs ? \"?\" + qs : \"\");\r\n }\r\n\r\n /**\r\n * Parse URL\r\n * Note: .search is read only, always use .searchParams to change parameters\r\n * @param {string} url - URL\r\n * @returns {Object}\r\n */\r\n function parseUrl(url) {\r\n var _pathname, _hash;\r\n let pathname, search, hash;\r\n [pathname, hash] = url.split(\"#\");\r\n [pathname, search] = pathname.split(\"?\");\r\n if (!search && pathname.includes(\"=\")) [pathname, search] = [\"\", pathname];\r\n let obj = {\r\n url: url,\r\n pathname: (_pathname = pathname) != null ? _pathname : \"\",\r\n hash: (_hash = hash) != null ? _hash : \"\",\r\n searchParams: new URLSearchParams(search)\r\n };\r\n Object.defineProperty(obj, \"search\", {\r\n // Read only\r\n value: search,\r\n writable: false,\r\n enumerable: true\r\n });\r\n return obj;\r\n }\r\n\r\n /**\r\n * Create URLSearchParams\r\n * @param {*} params - search parameters\r\n * @returns {URLSearchParams}\r\n */\r\n function createSearchParams(params) {\r\n try {\r\n return new URLSearchParams(params);\r\n } catch (e) {\r\n console.log(e);\r\n return new URLSearchParams();\r\n }\r\n }\r\n\r\n /**\r\n * Get URL search parameters\r\n * @param {string} url - URL\r\n * @returns {URLSearchParams}\r\n */\r\n function getSearchParams(url) {\r\n return parseUrl(url).searchParams;\r\n }\r\n\r\n /**\r\n * Get a search parameter from URL\r\n * @param {string} url - URL\r\n * @param {string} name - Name\r\n * @returns {string} Value\r\n */\r\n function getSearchParam(url, name) {\r\n return getSearchParams(url).get(name);\r\n }\r\n\r\n /**\r\n * Set URL search parameters\r\n * @param {string} url - URL\r\n * @param {*} args - search parameters to be merged\r\n * @returns {string} URL\r\n */\r\n function setSearchParams(url) {\r\n let obj = parseUrl(url);\r\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\r\n args[_key - 1] = arguments[_key];\r\n }\r\n obj.searchParams = mergeSearchParams(obj.searchParams, ...args);\r\n return buildUrl(obj);\r\n }\r\n\r\n /**\r\n * Merge URL search parameters\r\n * @param {*} args - search parameters to be merged\r\n * @returns {URLSearchParams}\r\n */\r\n function mergeSearchParams() {\r\n let searchParams = new URLSearchParams();\r\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\r\n args[_key2] = arguments[_key2];\r\n }\r\n for (const params of args) {\r\n if ($$1.isObject(params) || $$1.isString(params) && params) {\r\n // Note: Array is also object\r\n let newParams = params instanceof URLSearchParams ? params : createSearchParams(params);\r\n newParams.forEach((value, key) => searchParams.has(key) ? key.endsWith(\"[]\") ? searchParams.append(key, value) : searchParams.set(key, value) : searchParams.set(key, value));\r\n }\r\n }\r\n return searchParams;\r\n }\r\n\r\n /**\r\n * Set URL search parameter\r\n * @param {string} url - URL\r\n * @param {string} name - Name\r\n * @param {string} value - Value\r\n * @returns {string} URL\r\n */\r\n function setSearchParam(url, name, value) {\r\n return setSearchParams(url, {\r\n [name]: value\r\n });\r\n }\r\n\r\n /**\r\n * Delete search parameters from URL\r\n * @param {string} url - URL\r\n * @param {string[]} names - Names\r\n * @returns {string} URL\r\n */\r\n function deleteSearchParam(url) {\r\n let obj = parseUrl(url);\r\n for (var _len3 = arguments.length, names = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\r\n names[_key3 - 1] = arguments[_key3];\r\n }\r\n names.forEach(name => obj.searchParams.delete(name));\r\n return buildUrl(obj);\r\n }\r\n\r\n /**\r\n * Build URL\r\n * @param {Object} obj Object { pathname, searchParams, hash }\r\n * @returns {string} URL\r\n */\r\n function buildUrl(obj) {\r\n let search = obj.searchParams.toString();\r\n return obj.pathname + (obj.pathname && search ? \"?\" : \"\") + search + (obj.hash ? \"#\" + obj.hash : \"\");\r\n }\r\n\r\n /**\r\n * Set layout parameter to URL\r\n * Disable layout by adding \"layout=false\"\r\n * @param {string} url - URL\r\n * @param {string} value - Layout\r\n * @returns {string} URL\r\n */\r\n function setLayout(url, value) {\r\n return url && url != \"#\" ? setSearchParams(url, {\r\n [ew.PAGE_LAYOUT]: String(value)\r\n }) : url;\r\n }\r\n\r\n // Sanitize URL\r\n function sanitizeUrl(url) {\r\n let obj = parseUrl(url),\r\n searchParams = obj.searchParams;\r\n searchParams.forEach((value, key) => {\r\n value = decodeURIComponent(value);\r\n if ([\"<>\", \"<=\", \">=\", \">\", \"<\"].includes(value)) searchParams.set(key, value);else searchParams.set(key, ew.sanitize(value));\r\n });\r\n return buildUrl(obj);\r\n }\r\n\r\n // Set session timer\r\n function setSessionTimer() {\r\n let timeoutTime, timer, keepAliveTimer, counter;\r\n // Keep alive\r\n let keepAlive = () => {\r\n $$1.get(getApiUrl(ew.API_SESSION_ACTION), {\r\n \"rnd\": random()\r\n }).then(token => {\r\n if (token && $$1.isObject(token)) {\r\n // PHP\r\n ew.TOKEN_NAME = token[ew.TOKEN_NAME_KEY];\r\n ew.ANTIFORGERY_TOKEN = token[ew.ANTIFORGERY_TOKEN_KEY];\r\n if (token[\"JWT\"]) ew.API_JWT_TOKEN = token[\"JWT\"];\r\n setTimer();\r\n }\r\n });\r\n };\r\n // Reset timer\r\n let resetTimer = () => {\r\n var _timer;\r\n counter = ew.SESSION_TIMEOUT_COUNTDOWN;\r\n timeoutTime = ew.SESSION_TIMEOUT - ew.SESSION_TIMEOUT_COUNTDOWN;\r\n if (timeoutTime < 0) {\r\n // Timeout now\r\n timeoutTime = 0;\r\n counter = 0;\r\n }\r\n (_timer = timer) == null || _timer.cancel(); // Clear timer\r\n };\r\n // Redirect to TIMEOUT_URL\r\n let doTimeout = () => {\r\n resetTimer();\r\n window.location = sanitizeUrl(ew.TIMEOUT_URL + \"?expired=1\");\r\n };\r\n // Timeout\r\n let timeout = () => {\r\n var _keepAliveTimer;\r\n (_keepAliveTimer = keepAliveTimer) == null || _keepAliveTimer.cancel(); // Stop keep alive\r\n if (counter > 0) {\r\n let timerInterval,\r\n message = '<p class=\"text-danger\">' + ew.language.phrase(\"SessionWillExpire\") + '</p>';\r\n if (message.includes(\"%m\") && message.includes(\"%s\")) {\r\n message = message.replace(\"%m\", '<span class=\"ew-session-counter-minute\">' + Math.floor(counter / 60) + '</span>').replace(\"%s\", '<span class=\"ew-session-counter-second\">' + counter % 60 + '</span>');\r\n } else if (message.includes(\"%s\")) {\r\n message = message.replace(\"%s\", '<span class=\"ew-session-counter-second\">' + counter + '</span>');\r\n }\r\n Swal.fire({\r\n ...ew.sweetAlertSettings,\r\n html: message,\r\n showConfirmButton: true,\r\n confirmButtonText: ew.language.phrase(\"OKBtn\"),\r\n timer: counter * 1000,\r\n timerProgressBar: true,\r\n allowOutsideClick: false,\r\n allowEscapeKey: false,\r\n willOpen: () => {\r\n timerInterval = setInterval(() => {\r\n let content = Swal.getHtmlContainer(),\r\n min = content.querySelector(\".ew-session-counter-minute\"),\r\n sec = content.querySelector(\".ew-session-counter-second\"),\r\n timeleft = Math.round(Swal.getTimerLeft() / 1000);\r\n if (min && sec) {\r\n min.textContent = Math.floor(timeleft / 60);\r\n sec.textContent = timeleft % 60;\r\n } else if (sec) {\r\n sec.textContent = timeleft;\r\n }\r\n }, 1000);\r\n },\r\n willClose: () => {\r\n clearInterval(timerInterval);\r\n }\r\n }).then(result => {\r\n if (result.value) {\r\n // OK button pressed\r\n keepAlive();\r\n } else if (result.dismiss === Swal.DismissReason.timer) {\r\n // Timeout\r\n doTimeout();\r\n }\r\n });\r\n } else {\r\n doTimeout();\r\n }\r\n };\r\n // Set timer\r\n let setTimer = () => {\r\n var _ew$vars$login;\r\n if (ew.SESSION_TIMEOUT > 0 && window.location.pathname != ((_ew$vars$login = ew.vars.login) == null || (_ew$vars$login = _ew$vars$login.login) == null ? void 0 : _ew$vars$login.url)) {\r\n // Set session timeout except for login page\r\n resetTimer(); // Reset timer first\r\n timer = $$1.later(timeoutTime * 1000, null, timeout);\r\n }\r\n };\r\n if (ew.SESSION_KEEP_ALIVE_INTERVAL > 0 || ew.IS_LOGGEDIN && ew.IS_AUTOLOGIN) {\r\n // Keep alive\r\n let keepAliveInterval = Math.max(ew.SESSION_KEEP_ALIVE_INTERVAL || ew.SESSION_TIMEOUT - ew.SESSION_TIMEOUT_COUNTDOWN, ew.MIN_SESSION_KEEP_ALIVE_INTERVAL);\r\n keepAliveTimer = $$1.later(keepAliveInterval * 1000, null, keepAlive, null, true); // Periodic\r\n } else {\r\n setTimer();\r\n }\r\n }\r\n\r\n // Init export links\r\n function initExportLinks(e) {\r\n var _e$target3;\r\n let $el = $$1((_e$target3 = e == null ? void 0 : e.target) != null ? _e$target3 : document);\r\n if (e != null && e.target && !$el.find(\"a.ew-export-link[href]\")[0])\r\n // Export links not found\r\n $el = $el.closest(\".content\"); // For refresh\r\n $el.find(\"a.ew-export-link[href]:not(.ew-email):not(.ew-print):not(.ew-xml)\").off(\"click\").on(\"click\", function (e) {\r\n let href = this.href;\r\n if (href && href != \"#\") fileDownload(href, getchartParams());\r\n e.preventDefault();\r\n });\r\n $el.find(\"a.ew-export-link[href].ew-print, a.ew-export-link[href].ew-xml\").each(function () {\r\n let url = new URL(this.href);\r\n url.searchParams.set(ew.TOKEN_NAME_KEY, ew.TOKEN_NAME);\r\n url.searchParams.set(ew.ANTIFORGERY_TOKEN_KEY, ew.ANTIFORGERY_TOKEN);\r\n this.href = url.pathname + url.search; // Add token name and antiforgery token // PHP\r\n });\r\n }\r\n\r\n // Init multi-select checkboxes\r\n function initMultiSelectCheckboxes(e) {\r\n var _e$target4;\r\n var el = (_e$target4 = e == null ? void 0 : e.target) != null ? _e$target4 : document,\r\n $el = $$1(el),\r\n $cbs = $el.find(\"input[type=checkbox].ew-multi-select\");\r\n var _update = function (id) {\r\n var $els = $cbs.filter(\"[name^='\" + id + \"_']\"),\r\n cnt = $els.length,\r\n len = $els.filter(\":checked\").length;\r\n $$1(\"input[type=checkbox]#\" + id).prop(\"checked\", len == cnt).prop(\"indeterminate\", len != cnt && len != 0);\r\n };\r\n $cbs.on(\"click\", e => _update(e.target.name.split(\"_\")[0]));\r\n $el.find(\"input[type=checkbox].ew-priv:not(.ew-multi-select)\").each((i, el) => _update(el.id)); // Init\r\n }\r\n\r\n // Get error from response\r\n function getError(result) {\r\n var _result$error, _result$error2;\r\n return result && (((_result$error = result.error) == null ? void 0 : _result$error.description) || ((_result$error2 = result.error) == null ? void 0 : _result$error2.message) || $$1.isString(result.error) && result.error || result.failureMessage ||\r\n // Check this first\r\n result.success === false && result.message || null);\r\n }\r\n\r\n // Download file\r\n function fileDownload(href, data) {\r\n let isHtml = href.includes(\"export=html\") || href.includes(getApiUrl([ew.API_EXPORT_ACTION, \"html\"])),\r\n swal = window.parent.Swal; // Use window.parent.Swal in case in iframe\r\n data = mergeSearchParams(data, [[ew.TOKEN_NAME_KEY, ew.TOKEN_NAME], [ew.ANTIFORGERY_TOKEN_KEY, ew.ANTIFORGERY_TOKEN]]);\r\n return swal.fire({\r\n ...ew.sweetAlertSettings,\r\n showConfirmButton: false,\r\n html: \"<p>\" + ew.language.phrase(\"Exporting\") + \"</p>\",\r\n allowOutsideClick: false,\r\n allowEscapeKey: false,\r\n willOpen: () => {\r\n swal.showLoading();\r\n _fetch(href, {\r\n method: data ? \"POST\" : \"GET\",\r\n body: data || null\r\n }).then(async response => {\r\n let ct = response.headers.get(\"Content-Type\");\r\n if (ct != null && ct.includes(\"json\")) {\r\n var _getError;\r\n let result = await response.json(),\r\n error = (_getError = getError(result)) != null ? _getError : ew.language.phrase(\"FailedToExport\");\r\n if (error) {\r\n swal.hideLoading();\r\n swal.update({\r\n html: \"<div class='text-danger'>\" + error + \"</div>\",\r\n showConfirmButton: true\r\n });\r\n $document$1.trigger(\"export\", [{\r\n type: \"fail\",\r\n url: href\r\n }]);\r\n }\r\n } else {\r\n let data = isHtml ? await response.text() : await response.blob(),\r\n url = URL.createObjectURL(isHtml ? new Blob([data], {\r\n type: \"text/html\"\r\n }) : data),\r\n a = document.createElement(\"a\"),\r\n cd = response.headers.get(\"Content-Disposition\"),\r\n m = cd == null ? void 0 : cd.match(/\\bfilename=((['\"])(.+)\\2|([^;]+))/i);\r\n a.style.display = \"none\";\r\n a.href = url;\r\n if (m) a.download = m[3] || m[4];\r\n document.body.appendChild(a);\r\n a.click();\r\n $document$1.trigger(\"export\", [{\r\n type: \"done\",\r\n url: href,\r\n objectUrl: url\r\n }]);\r\n URL.revokeObjectURL(url);\r\n swal.close();\r\n }\r\n }).catch(error => {\r\n swal.hideLoading();\r\n swal.update({\r\n html: \"<div class='text-danger'>\" + error + \"</div>\",\r\n showConfirmButton: true\r\n });\r\n $document$1.trigger(\"export\", [{\r\n type: \"fail\",\r\n url: href\r\n }]);\r\n }).finally(() => {\r\n $document$1.trigger(\"export\", [{\r\n type: \"always\",\r\n url: href\r\n }]);\r\n });\r\n }\r\n });\r\n }\r\n\r\n // Lazy load images\r\n function lazyLoad(e) {\r\n var _e$target5;\r\n if (!ew.LAZY_LOAD) return;\r\n var el = (_e$target5 = e == null ? void 0 : e.target) != null ? _e$target5 : document;\r\n el.querySelectorAll(\"img.ew-lazy\").forEach((img, i) => {\r\n if (ew.LAZY_LOAD_DELAY > 0) setTimeout(() => img.src = img.dataset.src, i * ew.LAZY_LOAD_DELAY);else img.src = img.dataset.src;\r\n });\r\n $document$1.trigger(\"lazyload\"); // All images loaded\r\n }\r\n\r\n // Update select2 dropdown position\r\n function updateDropdownPosition() {\r\n var select = $$1(\".select2-container--open\").prev(\".ew-select\").data(\"select2\");\r\n if (select) {\r\n select.dropdown._positionDropdown();\r\n select.dropdown._resizeDropdown();\r\n }\r\n }\r\n\r\n // Colorboxes\r\n function initLightboxes(e) {\r\n var _e$target6;\r\n if (!ew.USE_COLORBOX) return;\r\n var el = (_e$target6 = e == null ? void 0 : e.target) != null ? _e$target6 : document;\r\n var settings = Object.assign({}, ew.lightboxSettings, {\r\n title: ew.language.phrase(\"LightboxTitle\"),\r\n current: ew.language.phrase(\"LightboxCurrent\"),\r\n previous: ew.language.phrase(\"LightboxPrevious\"),\r\n next: ew.language.phrase(\"LightboxNext\"),\r\n close: ew.language.phrase(\"LightboxClose\"),\r\n xhrError: ew.language.phrase(\"LightboxXhrError\"),\r\n imgError: ew.language.phrase(\"LightboxImgError\")\r\n });\r\n $$1(el).find(\".ew-lightbox\").each(function () {\r\n var $this = $$1(this);\r\n $this.colorbox(Object.assign({\r\n rel: $this.data(\"rel\")\r\n }, settings));\r\n });\r\n }\r\n\r\n // PDFObjects\r\n function initPdfObjects(e) {\r\n var _e$target7;\r\n if (!ew.EMBED_PDF) return;\r\n let el = (_e$target7 = e == null ? void 0 : e.target) != null ? _e$target7 : document,\r\n options = Object.assign({}, ew.PDFObjectOptions);\r\n $$1(el).find(\".ew-pdfobject\").not(\":has(.pdfobject)\").each(function () {\r\n // Not already embedded\r\n let $this = $$1(this),\r\n url = $this.data(\"url\"),\r\n html = $this.html();\r\n if (url) PDFObject.embed(url, this, Object.assign(options, {\r\n fallbackLink: html\r\n }));\r\n });\r\n }\r\n\r\n // Tooltips and popovers\r\n function initTooltips(e) {\r\n var _e$target8;\r\n let el = (_e$target8 = e == null ? void 0 : e.target) != null ? _e$target8 : document,\r\n $el = $$1(el);\r\n $el.find(\"input[data-bs-toggle=tooltip], textarea[data-bs-toggle=tooltip], select[data-bs-toggle=tooltip]\").each(function () {\r\n let $this = $$1(this);\r\n $this.tooltip({\r\n ...ew.tooltipOptions,\r\n html: true,\r\n ...$this.data()\r\n });\r\n });\r\n $el.find(\"a.ew-tooltip-link\").each(tooltip); // Set up tooltip links as popovers\r\n $el.find(\".ew-tooltip\").tooltip(ew.tooltipOptions);\r\n $el.find(\".ew-popover\").popover(ew.popoverOptions);\r\n $el.find(\".ew-tippy[data-title]\").each(function () {\r\n tippy(this, {\r\n content: this.dataset.title,\r\n ...ew.tippyOptions\r\n });\r\n });\r\n }\r\n\r\n // Parse JSON\r\n function parseJson(data) {\r\n if ($$1.isString(data)) {\r\n try {\r\n return JSON.parse(data);\r\n } catch (e) {\r\n return undefined;\r\n }\r\n }\r\n return data;\r\n }\r\n\r\n // Change search operator\r\n function searchOperatorChange(el) {\r\n let $el = $$1(el),\r\n $p = $el.closest(\"[id^=r_], [id^=xs_]\"),\r\n parm = el.id.substring(2),\r\n $fld = $p.find(\".ew-search-field\"),\r\n $fld2 = $p.find(\".ew-search-field2\"),\r\n $y = $fld2.find(\"[name='y_\" + parm + \"'], [name='y_\" + parm + \"[]']\"),\r\n hasY = $y.length,\r\n $cond = $p.find(\".ew-search-cond\"),\r\n hasCond = $cond.length,\r\n // Has condition and operator 2\r\n $and = $p.find(\".ew-search-and\"),\r\n $opr = $p.find(\".ew-search-operator\"),\r\n opr = $opr.find(\"[name='z_\" + parm + \"']\").val(),\r\n $opr2 = $p.find(\".ew-search-operator2\"),\r\n opr2 = $opr2.find(\"[name='w_\" + parm + \"']\").val(),\r\n isBetween = opr.includes(\"BETWEEN\"),\r\n // Can only be operator 1\r\n isEmptyOpr = [\"IS NULL\", \"IS NOT NULL\", \"IS EMPTY\", \"IS NOT EMPTY\"].includes(opr),\r\n isEmptyOpr2 = [\"IS NULL\", \"IS NOT NULL\", \"IS EMPTY\", \"IS NOT EMPTY\"].includes(opr2),\r\n hideOpr2 = !hasY || isBetween,\r\n hideX = isEmptyOpr,\r\n hideY = !isBetween && (!hasCond || isEmptyOpr2);\r\n $cond.toggleClass(\"d-none\", hideOpr2).find(\":input\").prop(\"disabled\", hideOpr2);\r\n $and.toggleClass(\"d-none\", !isBetween);\r\n $opr2.toggleClass(\"d-none\", hideOpr2).find(\":input\").prop(\"disabled\", hideOpr2);\r\n $fld.toggleClass(\"d-none\", hideX).find(\":input\").prop(\"disabled\", hideX);\r\n $fld2.toggleClass(\"d-none\", hideY).find(\":input\").prop(\"disabled\", hideY);\r\n }\r\n\r\n // Init forms\r\n function initForms(e) {\r\n var _e$target9;\r\n let el = (_e$target9 = e == null ? void 0 : e.target) != null ? _e$target9 : document,\r\n ids = ew.forms.ids();\r\n for (let id of ids) {\r\n if (el.matches != null && el.matches(\"#\" + id) || el.querySelector(\"#\" + id)) forms.get(id).init();\r\n }\r\n }\r\n\r\n // Is function\r\n function isFunction$2(x) {\r\n return typeof x === \"function\";\r\n }\r\n\r\n /**\r\n * Alert (OK button only)\r\n *\r\n * @param {string|Object} msg - Message or config\r\n * @param {callback} [cb] - Callback function\r\n * @param {string} [type] - CSS class (see https://getbootstrap.com/docs/5.3/utilities/colors/)\r\n * @returns {Promise}\r\n */\r\n function _alert(msg, cb, type) {\r\n let config = $$1.isObject(msg) ? msg : {};\r\n msg = $$1.isString(msg) ? msg : \"\";\r\n type = $$1.isString(cb) ? cb : type;\r\n config = $$1.extend(true, {}, ew.sweetAlertSettings, {\r\n html: msg,\r\n confirmButtonText: ew.language.phrase(\"OKBtn\"),\r\n customClass: {\r\n htmlContainer: \"ew-swal2-html-container text-\" + (type || \"danger\")\r\n }\r\n }, config);\r\n let args = {\r\n config,\r\n type,\r\n show: true\r\n };\r\n $document$1.trigger(\"alert\", [args]);\r\n if (args.show) return Swal.fire(args.config).then(result => isFunction$2(cb) ? cb(result.isConfirmed) : result);\r\n }\r\n\r\n /**\r\n * Prompt/Confirm/Alert\r\n *\r\n * @param {string|Object} cfg - Message or config object\r\n * @param {callback} [cb] - Callback function\r\n * @returns {Promise}\r\n */\r\n function _prompt(cfg, cb) {\r\n var _config, _config$inputValidato;\r\n let config = $$1.isObject(cfg) ? cfg : {};\r\n config = $$1.extend(true, {}, ew.sweetAlertSettings, {\r\n html: $$1.isString(cfg) ? cfg : \"\",\r\n showCancelButton: true,\r\n confirmButtonText: ew.language.phrase(\"OKBtn\"),\r\n cancelButtonText: ew.language.phrase(\"CancelBtn\")\r\n }, config); // Confirm/Alert\r\n if (config.input)\r\n // Prompt\r\n (_config$inputValidato = (_config = config).inputValidator) != null ? _config$inputValidato : _config.inputValidator = value => {\r\n if (!value) return ew.language.phrase(\"EnterValue\");\r\n };\r\n return Swal.fire(config).then(result => isFunction$2(cb) ? cb(result.value) : result);\r\n }\r\n\r\n // Toast\r\n function toast(options) {\r\n options = Object.assign({}, ew.toastOptions, options);\r\n $document$1.Toasts(\"create\", options);\r\n var position = options.position,\r\n $container = $$1(\"#toastsContainer\" + position[0].toUpperCase() + position.substring(1));\r\n return $container.children().first();\r\n }\r\n\r\n /**\r\n * Show toast\r\n *\r\n * @param {string} message - Message\r\n * @param {string} type - CSS class: \"primary|secondary|success|info|warning|danger|light|dark\"\r\n * @param {string} title - Title\r\n */\r\n function showToast(message, type, title) {\r\n if (!message) return;\r\n type || (type = \"danger\");\r\n title || (title = ew.language.phrase(type));\r\n let args = {\r\n message,\r\n type,\r\n title,\r\n show: true\r\n };\r\n $document$1.trigger(\"toast\", [args]);\r\n if (!args.show) return;\r\n ({\r\n message,\r\n type,\r\n title\r\n } = args);\r\n return toast({\r\n class: \"ew-toast text-bg-\" + type,\r\n title,\r\n body: message,\r\n autohide: type == \"success\" ? ew.autoHideSuccessMessage : false,\r\n // Autohide for success message\r\n delay: type == \"success\" ? ew.autoHideSuccessMessageDelay : 500\r\n });\r\n }\r\n\r\n // Get form.ew-form or div.ew-form HTML element\r\n function getForm(el) {\r\n if (el instanceof Form) return el.$element[0];\r\n var $el = $$1(el),\r\n $f = $el.closest(\".ew-form\");\r\n if (!$f[0])\r\n // Element not inside form\r\n $f = $el.closest(\".ew-grid, .ew-multi-column-grid, .modal\").find(\".ew-form\");\r\n return $f[0];\r\n }\r\n\r\n // Check form data\r\n function hasFormData(form) {\r\n var selector = \"[name^=x_],[name^=y_],[name^=z_],[name^=w_],[name=\" + ew.TABLE_BASIC_SEARCH + \"]\",\r\n els = $$1(form).find(selector).filter(\":enabled\").get();\r\n for (var i = 0, len = els.length; i < len; i++) {\r\n var el = els[i];\r\n if (/^(z|w)_/.test(el.name)) {\r\n if (/^IS/.test($$1(el).val())) return true;\r\n } else if (el.type == \"checkbox\" || el.type == \"radio\") {\r\n if (el.checked) return true;\r\n } else if (el.type == \"select-one\" || el.type == \"select-multiple\") {\r\n if (!!$$1(el).val()) return true;\r\n } else if ([\"text\", \"textarea\", \"password\", \"search\", \"color\", \"date\", \"datetime-local\", \"datetime\", \"email\", \"hidden\", \"month\", \"number\", \"range\", \"tel\", \"time\", \"url\", \"week\"].includes(el.type)) {\r\n if (el.value) return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Set search type\r\n *\r\n * @param {HTMLElement} el - HTML element\r\n * @returns false\r\n */\r\n function setSearchType(el) {\r\n var val = el.dataset.searchType,\r\n phraseId = \"Auto\";\r\n if (val == \"=\") phraseId = \"Exact\";else if (val == \"AND\") phraseId = \"All\";else if (val == \"OR\") phraseId = \"Any\";\r\n el.closest(\".ew-basic-search\").querySelector(\"input.ew-basic-search-type\").value = val || \"\";\r\n el.closest(\".dropdown-menu\").querySelectorAll(\".dropdown-item\").forEach(item => item.classList.remove(\"active\"));\r\n el.closest(\".dropdown-item\").classList.add(\"active\");\r\n var searchType = el.closest(\".input-group\").querySelector(\"#searchtype\"),\r\n text = ew.language.phrase(\"QuickSearch\" + phraseId + \"Short\");\r\n searchType.innerHTML = text;\r\n searchType.classList.toggle(\"me-2\", !!text);\r\n return false;\r\n }\r\n\r\n /**\r\n * Update a dynamic selection list\r\n *\r\n * @this {Form|HTMLElement} Form or parent element\r\n * @param {(HTMLElement|HTMLElement[]|string|string[])} obj - Target HTML element(s) or the ID of the element(s)\r\n * @param {(string[]|array[])} parentId - Parent field element names or data\r\n * @param {(boolean|null)} async - async(true) or sync(false) or non-Ajax(null)\r\n * @param {boolean} change - Trigger onchange event\r\n * @returns {Promise}\r\n */\r\n function updateOptions(obj, parentId, async, change) {\r\n var _obj, _batch$send;\r\n var f = this.$element ? this.$element[0] : this.form || ((_obj = obj) == null ? void 0 : _obj.form); // Get form/div element from this/obj\r\n if (!f) return;\r\n var frm = this.htmlForm ? this : forms.get(f.id); // Get Form object\r\n if (!frm) return;\r\n if (this.form && $$1.isUndefined(obj))\r\n // Target unspecified => update child fields\r\n obj = forms.get(this).getList(this).childFields.slice(); // Clone\r\n else if ($$1.isString(obj)) obj = getElements(obj, f);\r\n if (!obj || Array.isArray(obj) && obj.length == 0) return;\r\n var self = this,\r\n batch = new Batch();\r\n if (Array.isArray(obj) && $$1.isString(obj[0])) {\r\n // Array of id\r\n var els = [];\r\n for (var i = 0, len = obj.length; i < len; i++) {\r\n var ar = obj[i].split(\" \");\r\n if (ar.length == 1 && self.form) {\r\n // Parent/Child fields in the same table\r\n var m = getId(self, false).match(/^([xy]\\d*_)/);\r\n if (m) obj[i] = obj[i].replace(/^([xy]\\d*_)/, m[1]);\r\n }\r\n var el = getElements(obj[i], f),\r\n names = [];\r\n if (isTextbox(el) || isFilter(el))\r\n // Search text box or filter\r\n continue;\r\n els.push(el);\r\n if (ar.length == 2 && Array.isArray(el)) {\r\n // Check if id is \"tblVar fldVar\" and multiple inputs\r\n var $el = $$1(el);\r\n $el.each(function () {\r\n if (!names.includes(this.name)) {\r\n names.push(this.name);\r\n var $elf = $el.filter(\"[name='\" + this.name + \"']\"),\r\n typ = $elf.attr(\"type\"),\r\n elf = [\"radio\", \"checkbox\"].includes(typ) ? $elf.get() : $elf[0];\r\n batch.add(_updateOptions.bind(self, elf, parentId, async, change));\r\n }\r\n });\r\n } else {\r\n batch.add(_updateOptions.bind(self, el, parentId, async, change));\r\n }\r\n }\r\n obj = els;\r\n var list = forms.get(self).getList(self);\r\n if (Array.isArray(list == null ? void 0 : list.autoFillTargetFields) && list.autoFillTargetFields[0])\r\n // AutoFill\r\n batch.add(autoFill.bind(null, self));\r\n } else {\r\n if (isTextbox(obj) || isFilter(obj))\r\n // Search text box or filter\r\n return;\r\n batch.add(_updateOptions.bind(self, obj, parentId, async, change));\r\n }\r\n return (_batch$send = batch.send({\r\n url: ew.getApiUrl(ew.API_LOOKUP_ACTION)\r\n })) == null ? void 0 : _batch$send.then(function () {\r\n $document$1.trigger(\"updatedone\", [{\r\n source: self,\r\n target: obj\r\n }]); // Document \"updatedone\" event fired after all the target elements are updated\r\n });\r\n }\r\n\r\n /**\r\n * Update a dynamic selection list\r\n *\r\n * @param {(HTMLElement|HTMLElement[]} obj - Target HTML element(s) or the ID of the element(s)\r\n * @param {(string[]|array[])} parentId - Parent field element names or data\r\n * @param {(boolean|null)} async - async(true) or sync(false) or non-Ajax(null)\r\n * @param {boolean} change - Trigger onchange event\r\n * @returns {Promise}\r\n */\r\n function _updateOptions(obj, parentId, async, change) {\r\n if (change === void 0) {\r\n change = true;\r\n }\r\n var id = getId(obj, false);\r\n if (!id) return;\r\n var fo = getForm(obj); // Get form/div element from obj\r\n if (!fo || !fo.id) return;\r\n var frmo = forms.get(fo.id);\r\n if (!frmo) return;\r\n var self = this,\r\n args = Array.from(arguments),\r\n ar = getOptionValues(obj),\r\n m = id.match(/^([xy])(\\d*)_/),\r\n prefix = m ? m[1] : \"\",\r\n rowindex = m ? m[2] : \"\",\r\n arp = [],\r\n list = frmo.getList(obj),\r\n $obj = $$1(obj).data(\"updating\", true);\r\n if ($obj.data(\"hidden\"))\r\n // Skip data-hidden field, e.g. detail key\r\n return;\r\n if ($$1.isUndefined(parentId)) {\r\n // Parent IDs not specified, use default\r\n parentId = list.parentFields.slice(); // Clone\r\n if (rowindex != \"\") {\r\n for (var i = 0, len = parentId.length; i < len; i++) {\r\n var arr = parentId[i].split(\" \");\r\n if (arr.length == 1)\r\n // Parent field in the same table, add row index\r\n parentId[i] = parentId[i].replace(/^x_/, \"x\" + rowindex + \"_\");\r\n }\r\n }\r\n }\r\n if (Array.isArray(parentId) && parentId.length > 0) {\r\n if (Array.isArray(parentId[0])) {\r\n // Array of array => data\r\n arp = parentId;\r\n } else if ($$1.isString(parentId[0])) {\r\n // Array of string => Parent IDs\r\n for (var i = 0, len = parentId.length; i < len; i++) arp.push(getOptionValues(parentId[i], fo));\r\n }\r\n }\r\n if (!isAutoSuggest(obj))\r\n // Do not clear Auto-Suggest\r\n clearOptions(obj);\r\n var addOpt = function (results) {\r\n var name = getId(obj);\r\n results.forEach(function (result) {\r\n let args = {\r\n \"data\": result,\r\n \"parents\": arp,\r\n \"valid\": true,\r\n \"name\": name,\r\n \"form\": fo\r\n };\r\n $document$1.trigger(\"addoption\", [args]);\r\n if (args.valid) newOption(obj, result, fo);\r\n });\r\n obj.render == null || obj.render(); // Selection list\r\n selectOption(obj, ar, change);\r\n if (change) {\r\n if (!obj.options && obj.length) $obj.first().triggerHandler(\"click\");\r\n // else\r\n // $obj.first().trigger(\"change\");\r\n }\r\n };\r\n if ($$1.isUndefined(async))\r\n // Async not specified, use default\r\n async = list.ajax;\r\n var _updateSibling = function () {\r\n // Update the y_* element\r\n if (/(srch|search|summary|crosstab)$/.test(fo.id) && prefix == \"x\" && !rowindex) {\r\n // Search form\r\n args[0] = id.replace(/^x_/, \"y_\");\r\n updateOptions.apply(self, args); // args[0] is string, use updateOptions()\r\n }\r\n };\r\n if (!$$1.isBoolean(async) || Array.isArray(list.lookupOptions) && list.lookupOptions.length > 0) {\r\n // Non-Ajax or Options loaded\r\n var ds = list.lookupOptions;\r\n addOpt(ds);\r\n _updateSibling();\r\n $obj.first().trigger(\"updated\", [{\r\n target: obj\r\n }]); // Object \"updated\" event fired after the object is updated\r\n return ds;\r\n } else {\r\n // Ajax\r\n var name = getId(obj),\r\n data = Object.assign({\r\n page: list.page,\r\n field: list.field,\r\n ajax: \"updateoption\",\r\n language: ew.LANGUAGE_ID,\r\n name: name // Name of the target element\r\n }, getUserParams(\"#p_\" + id, fo)); // Add user parameters\r\n if (isAutoSuggest(obj) && self.htmlForm)\r\n // Auto-Suggest (init form or auto-fill)\r\n data[\"v0\"] = ar[0] || random(); // Filter by the current value\r\n else if (obj.options && !obj.list && !isNativeSelectOne(obj) ||\r\n // Not <selection-list> or native <select>\r\n isModalLookup(obj))\r\n // Lookup\r\n data[\"v0\"] = ar[0] ? obj.multiple ? ar.join(ew.MULTIPLE_OPTION_SEPARATOR) : ar[0] : random(); // Filter by the current value\r\n for (var i = 0, cnt = arp.length; i < cnt; i++)\r\n // Filter by parent fields\r\n data[\"v\" + (i + 1)] = arp[i].join(ew.MULTIPLE_OPTION_SEPARATOR);\r\n obj.showLoading == null || obj.showLoading(); // selection-list\r\n return $$1.ajax(getApiUrl(ew.API_LOOKUP_ACTION), {\r\n method: \"POST\",\r\n dataType: \"json\",\r\n data: data,\r\n async: async,\r\n processData: false,\r\n success: result => {\r\n let error = getError(result);\r\n if (error) {\r\n _alert(error);\r\n return;\r\n }\r\n let ds = result.records || [];\r\n addOpt(ds);\r\n _updateSibling();\r\n $obj.first().trigger(\"updated\", [Object.assign({}, result, {\r\n target: obj\r\n })]); // Object \"updated\" event fired after the object is updated\r\n return ds;\r\n },\r\n error: (jqXHR, textStatus, errorThrown) => _alert(errorThrown),\r\n complete: () => $obj.data(\"updating\", false)\r\n });\r\n }\r\n }\r\n\r\n // Get user parameters from id\r\n function getUserParams(id, root) {\r\n var id = id.replace(/\\[\\]$/, \"\"),\r\n o = {};\r\n var root = !$$1.isString(root) ? root : /^#/.test(root) ? root : \"#\" + root;\r\n var $els = root ? $$1(root).find(id) : $$1(id);\r\n var val = $els.val();\r\n if (val) {\r\n var params = new URLSearchParams(val);\r\n params.forEach(function (value, key) {\r\n o[key] = value;\r\n });\r\n }\r\n return o;\r\n }\r\n\r\n // Get query builder filter input HTML\r\n function getQueryBuilderFilterInput() {\r\n return function (rule, name) {\r\n var _document$getElementB, _span$innerHTML$repla;\r\n let tblVar = this.status.id.replace(/_query_builder$/, \"\"),\r\n // \"this\" is QueryBuilder\r\n fldVar = rule.filter.id,\r\n tmplId = \"tpx_\" + tblVar + \"_\" + fldVar,\r\n span = (_document$getElementB = document.getElementById(tmplId)) == null || (_document$getElementB = _document$getElementB.content) == null ? void 0 : _document$getElementB.cloneNode(true).querySelector(\".ew-search-field\"),\r\n html = (_span$innerHTML$repla = span == null ? void 0 : span.innerHTML.replace(/\\binvalid-feedback\\b/, ew.queryBuilderErrorClass).replace(new RegExp(\"(data-field=\\\")?(\\\\b|_)x_\" + fldVar + \"(\\\\[\\\\]|\\\\b)\", \"g\"), ($0, $1, $2) => $1 ? $0 : $2 + name)) != null ? _span$innerHTML$repla : \"\"; // Keep \"data-field\" attribute\r\n return \"<div class=\\\"d-inline-flex position-relative\\\">\" + html + \"</div>\";\r\n };\r\n }\r\n\r\n // Get query builder value setter\r\n function getQueryBuilderValueSetter() {\r\n return function (rule, value) {\r\n let input = rule.$el.find(\".rule-value-container\").find(\"select, selection-list, input[name^=sv_], input[data-field]\")[0],\r\n values = Array.isArray(value) ? value : $$1.isValue(value) ? [value] : [];\r\n if (input != null && input.matches(\"select, selection-list\")) {\r\n // Selection list\r\n let form = forms.get(input);\r\n values.forEach(val => newOption(input, {\r\n lf: val\r\n }, form, true));\r\n form.updateList(input, undefined, undefined, true); // Update immediately\r\n } else {\r\n ew.selectOption(input, values);\r\n }\r\n return null;\r\n };\r\n }\r\n\r\n // Get query builder filter validation object\r\n function getQueryBuilderFilterValidation(validators) {\r\n return {\r\n callback: function (value, rule) {\r\n // value not used\r\n let $value = rule.$el.find(\".rule-value-container\"),\r\n errors = 0;\r\n for (let i = 0; i < rule.operator.nb_inputs; i++) {\r\n $value.find(\"[name='\" + rule.id + '_value_' + i + \"']\").each(function () {\r\n let $this = $$1(this),\r\n $invalid = $this.next(\".\" + ew.queryBuilderErrorClass).empty();\r\n validators == null || validators.forEach == null || validators.forEach(validator => {\r\n let err = validator(this);\r\n if ($$1.isObject(err)) {\r\n errors++;\r\n $invalid.append(\"<span>\" + Object.values(err)[0] + \"</span>\");\r\n }\r\n });\r\n if ($invalid.html()) $this.addClass(\"is-invalid\").one(\"click\", () => $this.removeClass(\"is-invalid\"));\r\n });\r\n }\r\n return errors ? \"\" : true; // Return error as empty string (errors already set in $invalid)\r\n }\r\n };\r\n }\r\n\r\n // Apply client side template to a DIV\r\n function applyTemplate(divId, tmplId, classId, exportType, tblVar, data, isModal) {\r\n let args = {\r\n data: data || {},\r\n id: divId,\r\n template: tmplId,\r\n class: classId,\r\n export: exportType,\r\n enabled: true\r\n };\r\n $document$1.trigger(\"rendertemplate\", [args]);\r\n if (args.enabled) {\r\n var _parent$querySelector;\r\n let parent = isModal ? document.querySelector(\"#ew-modal-dialog.show\") : document.body,\r\n // Parent (Modal dialog or document)\r\n template = parent == null || (_parent$querySelector = parent.querySelector(\"#\" + tmplId)) == null ? void 0 : _parent$querySelector.content;\r\n if (!template) return;\r\n template.querySelectorAll(\".ew-slot\").forEach(el => {\r\n let id = el.name || el.id,\r\n subtmpl = parent.querySelector(\"#\" + id); // Find in parent in case Custom Template in modal dialog\r\n if (subtmpl != null && subtmpl.content) {\r\n if (el.dataset.rowspan > 1) Array.prototype.slice.call(subtmpl.content.childNodes).forEach(node => node.rowSpan = el.dataset.rowspan);\r\n el.replaceWith(subtmpl.content.cloneNode(true));\r\n } else {\r\n el.remove();\r\n }\r\n });\r\n if ($$1.views) {\r\n let textContent = template.textContent,\r\n hasTag = textContent.includes(\"{{\") && textContent.includes(\"}}\");\r\n if (!hasTag) {\r\n let selector = ew.jsRenderAttributes.map(attr => \"[\" + attr + \"*='{{'][\" + attr + \"*='}}']\").join(\",\");\r\n hasTag = template.querySelector(selector);\r\n }\r\n if (hasTag) {\r\n // Includes JsRender template\r\n let scripts = Array.prototype.slice.call(template.querySelectorAll(\"script\")); // Extract scripts\r\n scripts.forEach(item => item.remove());\r\n let div = document.createElement(\"div\");\r\n div.appendChild(template);\r\n let html = div.innerHTML.replace(/{{([^}]+)}}/g, m => htmlDecode(m)),\r\n // HTML-decode comparison operators\r\n tmpl = $$1.templates(html);\r\n parent.querySelector(\"#\" + divId).innerHTML = tmpl.render(args.data, ew.jsRenderHelpers);\r\n scripts.forEach(item => document.body.appendChild(item)); // Add scripts\r\n } else {\r\n parent.querySelector(\"#\" + divId).appendChild(template);\r\n }\r\n } else {\r\n parent.querySelector(\"#\" + divId).appendChild(template);\r\n }\r\n }\r\n if (exportType && exportType != \"print\")\r\n // Export custom template with charts\r\n exportCustom(divId, exportType, tblVar); // Note: Use classId as fileName\r\n }\r\n\r\n // Export custom\r\n function exportCustom(divId, exportType, tblVar) {\r\n var _div$children$;\r\n let div = document.getElementById(divId);\r\n if ((_div$children$ = div.children[0]) != null && _div$children$.matches(\"div[id^=ct_]\"))\r\n // Custom template, remove first div tag\r\n div = div.children[0];\r\n let data = {\r\n customexport: exportType,\r\n data: div.innerHTML,\r\n [ew.TOKEN_NAME_KEY]: ew.TOKEN_NAME,\r\n [ew.ANTIFORGERY_TOKEN_KEY]: ew.ANTIFORGERY_TOKEN,\r\n ...getchartParams()\r\n };\r\n if (exportType == \"email\") exportEmail(tblVar, mergeSearchParams(currentUrl.searchParams, data)); // Merge data with email form data in current URL parameters\r\n else fileDownload(getApiUrl([ew.API_EXPORT_ACTION, exportType, tblVar]), data);\r\n }\r\n\r\n // Toggle group\r\n function toggleGroup(el) {\r\n let $el = $$1(el),\r\n $tr = $el.closest(\"tr\");\r\n if (!$tr.data(\"group\")) {\r\n // Toggle all\r\n $tr.closest(\"table\").find(\"tbody\").find(\".ew-rpt-grp-field-1 > .ew-group-toggle\").each(function () {\r\n toggleGroup(this);\r\n $el.toggleClass(\"ew-rpt-grp-hide\");\r\n });\r\n } else {\r\n let selector = \"tr\",\r\n level;\r\n for (let i = 1; i <= 6; i++) {\r\n let idx = i == 1 ? \"\" : \"-\" + i,\r\n data = $tr.data(\"group\" + idx);\r\n if ($$1.isValue(data)) {\r\n level = i;\r\n if (data != \"\") selector += \"[data-group\" + idx + \"='\" + String(data).replace(/'/g, \"\\\\'\") + \"']\";\r\n }\r\n }\r\n if ($el.hasClass(\"ew-rpt-grp-hide\")) {\r\n // Show\r\n $$1(selector).slice(1).removeClass(\"ew-rpt-grp-hide-\" + level);\r\n $el.removeClass(\"ew-rpt-grp-hide\");\r\n } else {\r\n // Hide\r\n $$1(selector).slice(1).addClass(\"ew-rpt-grp-hide-\" + level);\r\n $el.addClass(\"ew-rpt-grp-hide\");\r\n }\r\n }\r\n }\r\n\r\n // Check if boolean value is true\r\n function convertToBool(value) {\r\n return value && [\"1\", \"y\", \"t\", \"true\"].includes(String(value).toLowerCase());\r\n }\r\n\r\n // Check if element value changed\r\n function valueChanged(fobj, infix, fld, bool) {\r\n let el = getElement(\"x\" + infix + \"_\" + fld, fobj),\r\n oldEl = getElement(\"o\" + infix + \"_\" + fld, fobj),\r\n // Hidden element\r\n fnEl = getElement(\"fn_x\" + infix + \"_\" + fld, fobj); // Hidden element\r\n if ((el == null ? void 0 : el.type) == \"hidden\" && !oldEl)\r\n // For example, detail key\r\n return false;\r\n if (!oldEl && (!el || Array.isArray(el) && el.length == 0)) return false;\r\n if (oldEl && el) {\r\n if (bool) {\r\n if (convertToBool(getOptionValue(oldEl)) === convertToBool(getOptionValue(el))) return false;\r\n } else {\r\n let oldValue = getOptionValue(oldEl),\r\n newValue = fnEl ? getOptionValue(fnEl) : getOptionValue(el);\r\n if (oldValue == newValue) return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n // Set language\r\n function setLanguage(el) {\r\n let val = el.value || el.dataset.language;\r\n if (!val) return false;\r\n let currentUrl = new URL(window.location);\r\n currentUrl.searchParams.set(\"language\", val);\r\n window.location = sanitizeUrl(currentUrl.toString());\r\n return false;\r\n }\r\n\r\n // Set active user\r\n function setActiveUser(el) {\r\n let val = el.checked ? \"1\" : \"0\";\r\n let currentUrl = new URL(window.location);\r\n currentUrl.searchParams.set(\"activeuser\", val);\r\n window.location = sanitizeUrl(currentUrl.toString());\r\n return false;\r\n }\r\n\r\n /**\r\n * Submit action\r\n *\r\n * @param {MouseEvent} e - Mouse event\r\n * @param {Object} args - Arguments\r\n * @param {HTMLElement} args.f - HTML form (default is the form of the source element) (for backward compatibility only)\r\n * @param {string} args.url - URL to which the request is sent (default is current page) (for backward compatibility only)\r\n * @param {Object} args.key - Key as object (for single record only)\r\n * @param {string|Object} args.msg - Message or Swal config\r\n * @param {string} args.action - Custom action name\r\n * @param {string} args.select - \"single\"|\"s\" (single record) or \"multiple\"|\"m\" (multiple records, default)\r\n * @param {string} args.method - \"ajax\"|\"a\" (Ajax by HTTP POST) or \"post\"|\"p\" (HTTP POST by HTML form, default)\r\n * @param {Object} args.data - Object of user data that is sent to the server\r\n * @param {string|callback|Object} success - Function to be called if the request succeeds, or settings for jQuery.ajax() (for Ajax only)\r\n * @returns\r\n */\r\n function submitAction(e, args) {\r\n var _window$msg;\r\n let el = e.currentTarget,\r\n f = args.f || el.form || el.closest(\"form\"),\r\n $f = $$1(f),\r\n key = args.key,\r\n action = args.action,\r\n url = args.url || currentPage(),\r\n msg = args.msg,\r\n data = args.data,\r\n success = args.success,\r\n isPostBack = !args.method || sameText(args.method[0], \"p\"),\r\n isMultiple = !args.select && !args.key || args.select && sameText(args.select[0], \"m\");\r\n if ((isMultiple || isPostBack) && !f) {\r\n _alert(ew.language.phrase(\"NoHtmlForm\"));\r\n return false;\r\n }\r\n if (isMultiple && !keySelected(f)) {\r\n _alert(ew.language.phrase(\"NoRecordSelected\"));\r\n return false;\r\n }\r\n let _success = function (result) {\r\n if ($$1.isString(result)) {\r\n showMessage(result);\r\n } else if ($$1.isObject(result)) {\r\n // JSON\r\n let error = getError(result);\r\n if (error) _alert(error);else if ($$1.isString(result.successMessage)) _alert(result.successMessage, \"success\");\r\n if (result.disabled) el.disabled = true;\r\n }\r\n };\r\n let _append = function (name, value) {\r\n let $input = $f.find(\"input[type=hidden][name='\" + name + \"']\");\r\n if ($input[0])\r\n // Hidden tag exists\r\n $input.val(value); // Set value\r\n else\r\n // Hidden tag does not exist, add one\r\n $$1(\"<input>\").attr({\r\n type: \"hidden\",\r\n name,\r\n value\r\n }).appendTo($f);\r\n };\r\n let _submit = function (value) {\r\n if (isPostBack && f) {\r\n // Post back by form\r\n if (action) {\r\n // Action\r\n _append(\"action\", action); // Set action\r\n }\r\n if (!$$1.isUndefined(value)) _append(\"actionvalue\", value); // Set action value\r\n if ($$1.isObject(data)) {\r\n // User data\r\n for (const [name, value] of Object.entries(data)) _append(name, value);\r\n }\r\n if (!isMultiple && $$1.isObject(key)) {\r\n // Key\r\n for (const [name, value] of Object.entries(key)) _append(name, value);\r\n }\r\n if (parseUrl(url).pathname != currentUrl.pathname)\r\n // Do not use refresh if post to another page\r\n $f.off(\"submit.ew\");\r\n $f.prop({\r\n action: url,\r\n method: \"post\"\r\n }).trigger(\"submit\");\r\n } else {\r\n // Ajax\r\n data = new URLSearchParams(data); // User data\r\n if (action) {\r\n // Action\r\n data.set(\"action\", action);\r\n data.set(\"ajax\", action);\r\n $f.find(\"#action\").remove(); // Remove action in form\r\n }\r\n if (!$$1.isUndefined(value)) data.set(\"actionvalue\", value); // User input value\r\n data = mergeSearchParams(data, $f.serialize()); // Form data including key_m[]\r\n if (!isMultiple && $$1.isObject(key))\r\n // Key\r\n data = mergeSearchParams(data, key);\r\n if (success && $$1.isString(success)) success = window[success];\r\n let settings = $$1.isObject(success) ? success : {};\r\n settings.data = data.toString();\r\n settings.method || (settings.method = \"POST\");\r\n settings.success || (settings.success = isFunction$2(success) ? success : _success);\r\n $$1.ajax(url, settings);\r\n }\r\n };\r\n msg = $$1.isString(msg) ? (_window$msg = window[msg]) != null ? _window$msg : msg : msg; // Get config object if available\r\n msg ? _prompt(msg).then(result => result.isDismissed || _submit(result.value)) : _submit();\r\n return false;\r\n }\r\n\r\n /**\r\n * Get charts parameters as object\r\n *\r\n * @returns string\r\n */\r\n function getchartParams() {\r\n let charts = Array.from(Object.entries(window.exportCharts)).map(_ref => {\r\n let [id, chart] = _ref;\r\n return {\r\n chartEngine: \"Chart.js\",\r\n streamType: \"base64\",\r\n stream: chart.toBase64Image(),\r\n fileName: id + \".png\"\r\n };\r\n });\r\n return charts.length ? {\r\n charts: JSON.stringify(charts)\r\n } : null;\r\n }\r\n\r\n /**\r\n * Export with charts, selected records and/or Custom Template (non-API)\r\n *\r\n * @param {MouseEvent|HTMLFormElement} args.evt - Event or HTML form\r\n * @param {string} args.url - Form action\r\n * @param {string} args.export - Export type\r\n * @param {boolean} args.custom - Use Custom Template\r\n * @param {boolean} args.exportSelected - Selected records only\r\n * @param {HTMLFormElement} args.emailForm - email form object\r\n * @returns false\r\n */\r\n async function _export(args) {\r\n let {\r\n evt,\r\n url,\r\n export: type,\r\n custom,\r\n exportSelected,\r\n emailForm\r\n } = args,\r\n f = evt.currentTarget.form;\r\n exportSelected && (exportSelected = f && !!f.querySelector(\"input[type=checkbox][name='key_m[]']\"));\r\n if (exportSelected && !keySelected(f)) {\r\n _alert(ew.language.phrase(\"NoRecordSelected\"));\r\n return false;\r\n }\r\n let $f = f ? $$1(f) : $$1('<form class=\"ew-export-form\" method=\"post\"></form>').appendTo($body),\r\n target = $f.attr(\"target\"),\r\n action = $f.attr(\"action\"),\r\n postParams = [[ew.TOKEN_NAME_KEY, ew.TOKEN_NAME], [ew.ANTIFORGERY_TOKEN_KEY, ew.ANTIFORGERY_TOKEN]];\r\n\r\n // Export data\r\n try {\r\n if (custom) {\r\n var _document$querySelect;\r\n // Use Custom Template (chart data to be retrieved later in iframe)\r\n document.body.style.cursor = \"wait\";\r\n let name = \"ew-export-frame\";\r\n url = setSearchParams(url, {\r\n export: type,\r\n custom: 1\r\n }, $$1(emailForm).serialize()); // Make sure parameters include \"export=type&custom=1\"\r\n (_document$querySelect = document.querySelector(\"iframe[name='\" + name + \"']\")) == null || _document$querySelect.remove();\r\n let $iframe = $$1(\"<iframe>\").attr(\"name\", name).addClass(\"d-none\").appendTo($body);\r\n $f.attr({\r\n action: url,\r\n target: name\r\n }); // Pass all data including email form data from URL to the iframe by URL parameters\r\n postParams.forEach(_ref2 => {\r\n let [name, value] = _ref2;\r\n return $f.find(\"input[name=\\\"\" + name + \"\\\"]\").val(value)[0] || $$1(\"<input>\").attr({\r\n type: \"hidden\",\r\n name,\r\n value\r\n }).appendTo($f);\r\n });\r\n $iframe.one(\"load\", () => document.body.style.cursor = \"default\").one(\"load\", () => $f.attr({\r\n action,\r\n target\r\n })); // Reset\r\n $f.trigger(\"submit\");\r\n } else {\r\n // No Custom Template\r\n url = setSearchParam(url, \"export\", type); // Make sure URL parameters include \"export=type\"\r\n if (type == \"print\") $f.attr(\"action\", url).trigger(\"submit\"); // Submit the form directly\r\n else fileDownload(url, mergeSearchParams($f.serialize(), getchartParams()));\r\n }\r\n } finally {\r\n f || $f.remove();\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Remove spaces\r\n * @param {string} value - Value\r\n * @returns {string}\r\n */\r\n function removeSpaces(value) {\r\n return /^(<(p|br)\\/?>( )?(<\\/p>)?)?$/i.test(value.replace(/\\s/g, \"\")) ? \"\" : value;\r\n }\r\n\r\n /**\r\n * Check if hidden text area (HTML editor)\r\n * @param {HTMLElement|jQuery} el - HTML element or jQuery object\r\n * @returns {boolean}\r\n */\r\n function isHiddenTextArea(el) {\r\n var $el = $$1(el);\r\n return $el.is(\":hidden\") && $el.data(\"editor\");\r\n }\r\n\r\n /**\r\n * Check if modal lookup\r\n * @param {HTMLElement} el - HTML element\r\n * @returns {boolean}\r\n */\r\n function isModalLookup(el) {\r\n var _el$dataset;\r\n return el == null || (_el$dataset = el.dataset) == null ? void 0 : _el$dataset.modalLookup;\r\n }\r\n\r\n /**\r\n * Check if filter\r\n * @param {HTMLElement} el - HTML element\r\n * @returns {boolean}\r\n */\r\n function isFilter(el) {\r\n var _el$dataset2;\r\n return el == null || (_el$dataset2 = el.dataset) == null ? void 0 : _el$dataset2.filter;\r\n }\r\n\r\n /**\r\n * Check if hidden textbox (Auto-Suggest)\r\n * @param {HTMLElement|jQuery} el - HTML element or jQuery object\r\n * @returns {boolean}\r\n */\r\n function isAutoSuggest(el) {\r\n var $el = $$1(el);\r\n return $el.is(\":hidden\") && $el.data(\"autosuggest\");\r\n }\r\n\r\n /**\r\n * Check if Select2\r\n * @param {HTMLElement} el - HTML element\r\n * @returns {boolean}\r\n */\r\n function isSelect2(el) {\r\n return el == null || el.matches == null ? void 0 : el.matches(\"select.select2-hidden-accessible\");\r\n }\r\n\r\n /**\r\n * Check if native selection list (select-one)\r\n * @param {HTMLElement} el - HTML element\r\n * @returns {boolean}\r\n */\r\n function isNativeSelectOne(el) {\r\n return (el == null || el.matches == null ? void 0 : el.matches(\"select:not(.select2-hidden-accessible)\")) && el.type == \"select-one\";\r\n }\r\n\r\n /**\r\n * Check if textbox\r\n * @param {HTMLElement} el - HTML element\r\n * @returns {boolean}\r\n */\r\n function isTextbox(el) {\r\n return (el == null || el.matches == null ? void 0 : el.matches(\"input:not([type=checkbox]):not([type=radio])\")) && !isAutoSuggest(el);\r\n }\r\n\r\n /**\r\n * Check if boolean checkbox\r\n * @param {HTMLElement} el - HTML element\r\n * @returns {boolean}\r\n */\r\n function isBooleanCheckbox(el) {\r\n return el == null || el.matches == null ? void 0 : el.matches(\"input[type=checkbox][data-boolean]\");\r\n }\r\n\r\n /**\r\n * Clear error message\r\n * @param {HTMLElement|HTMLElement[]|jQuery} el - HTML element(s) or jQuery\r\n */\r\n function clearError(el) {\r\n if (el.jquery) {\r\n // el is jQuery object\r\n let typ = el.attr(\"type\");\r\n el = typ == \"checkbox\" || typ == \"radio\" ? el.get() : el[0];\r\n }\r\n $$1(el).closest(fieldContainerSelector).find(\".invalid-feedback\").html(\"\");\r\n }\r\n\r\n /**\r\n * Show error message\r\n * @param {Form} frm Form object\r\n * @param {HTMLElement|HTMLElement[]|jQuery} el - HTML element(s) or jQuery\r\n * @param {string} msg - Error message\r\n * @param {boolean} focus - Set focus\r\n */\r\n function onError(frm, el, msg, focus) {\r\n if (el.jquery) {\r\n // el is jQuery object\r\n let typ = el.attr(\"type\");\r\n el = typ == \"checkbox\" || typ == \"radio\" ? el.get() : el[0];\r\n } else if (el instanceof Field) {\r\n // el is Field object\r\n el = el.element;\r\n }\r\n $$1(el).closest(fieldContainerSelector).find(\".invalid-feedback\").append(\"<p>\" + msg + \"</p>\");\r\n if (focus) setFocus(el);\r\n frm == null || frm.makeVisible(el);\r\n return false;\r\n }\r\n\r\n /**\r\n * Set focus\r\n * @param {HTMLElement|HTMLElement[]} obj - HTML element(s)\r\n * @param {Object} options - Focus options\r\n */\r\n function setFocus(obj, options) {\r\n if (!obj) return;\r\n var $obj = $$1(obj);\r\n if (isHidden($obj)) return;\r\n if (isHiddenTextArea(obj)) {\r\n // HTML editor\r\n return $obj.data(\"editor\").focus();\r\n } else if (!obj.options && obj.length) {\r\n // Radio/Checkbox list\r\n obj = $obj[0];\r\n } else if (isAutoSuggest(obj)) {\r\n // Auto-Suggest\r\n obj = obj.input;\r\n }\r\n obj.focus(options);\r\n }\r\n\r\n /**\r\n * Set invalid\r\n * @param {HTMLElement|HTMLElement[]} obj - HTML element(s)\r\n */\r\n function setInvalid(obj) {\r\n if (!obj) return;\r\n let $obj = $$1(obj);\r\n if (isHidden($obj)) return;\r\n if (!obj.options && obj.length)\r\n // Radio/Checkbox list\r\n obj = $obj[0];\r\n let $p = $obj.closest(fieldContainerSelector),\r\n reset = () => $p.find(\".is-invalid\").removeClass(\"is-invalid\");\r\n if (isAutoSuggest(obj)) {\r\n $p.find(\".ew-auto-suggest\").removeClass(\"is-valid\").addClass(\"is-invalid\").one(\"click keydown paste\", reset);\r\n } else if (isHiddenTextArea(obj)) {\r\n $obj.removeClass(\"is-valid\").addClass(\"is-invalid\");\r\n $obj.data(\"editor\").instance.once(\"change\", reset);\r\n } else if (isModalLookup(obj)) {\r\n $obj.removeClass(\"is-valid\").addClass(\"is-invalid\").one(\"select2:open\", reset);\r\n } else {\r\n if ([\"checkbox\", \"radio\"].includes(obj.type)) {\r\n $obj.removeClass(\"is-valid\").addClass(\"is-invalid\").one(\"click keydown\", reset);\r\n } else {\r\n let events = ew.MOBILE_DETECT.version(\"Safari\") && !ew.MOBILE_DETECT.version(\"Chrome\") ? \"change keydown paste\" : \"click keydown paste\"; // Use \"change\" event for Safari\r\n $obj.parent().one(events, reset);\r\n $obj.add($obj.closest(\".input-group\")).removeClass(\"is-valid\").addClass(\"is-invalid\");\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Set valid\r\n * @param {HTMLElement|HTMLElement[]} obj - HTML element(s)\r\n */\r\n function setValid(obj) {\r\n if (!obj) return;\r\n let $obj = $$1(obj);\r\n if (isHidden($obj)) return;\r\n if (!obj.options && obj.length)\r\n // Radio/Checkbox list\r\n obj = $obj[0];\r\n let $p = $obj.closest(fieldContainerSelector),\r\n reset = () => $p.find(\".is-valid\").removeClass(\"is-valid\");\r\n if (isAutoSuggest(obj)) {\r\n $p.find(\".ew-auto-suggest\").removeClass(\"is-invalid\").addClass(\"is-valid\").one(\"click keydown paste\", reset);\r\n } else if (isHiddenTextArea(obj)) {\r\n $obj.removeClass(\"is-invalid\").addClass(\"is-valid\");\r\n $obj.data(\"editor\").instance.once(\"change\", reset);\r\n } else if (isModalLookup(obj)) {\r\n $obj.removeClass(\"is-invalid\").addClass(\"is-valid\").one(\"select2:open\", reset);\r\n } else {\r\n if ([\"checkbox\", \"radio\"].includes(obj.type)) {\r\n $obj.removeClass(\"is-invalid\").addClass(\"is-valid\").one(\"click keydown\", reset);\r\n } else {\r\n let events = ew.MOBILE_DETECT.version(\"Safari\") && !ew.MOBILE_DETECT.version(\"Chrome\") ? \"change keydown paste\" : \"click keydown paste\"; // Use \"change\" event for Safari\r\n $obj.parent().one(events, reset);\r\n $obj.add($obj.closest(\".input-group\")).removeClass(\"is-invalid\").addClass(\"is-valid\");\r\n }\r\n }\r\n }\r\n\r\n // Check if object has value\r\n function hasValue(obj) {\r\n return getOptionValue(obj) != \"\";\r\n }\r\n\r\n // Check if object value is a masked password\r\n function isMaskedPassword(obj) {\r\n var val = $$1(obj).val();\r\n return val == null ? void 0 : val.match(/^\\*+$/);\r\n }\r\n\r\n // Sort by field\r\n function sort(e, dataset) {\r\n let {\r\n sortUrl: url,\r\n sortType: type,\r\n context,\r\n ajax\r\n } = dataset;\r\n if (e.shiftKey && !e.ctrlKey) url = setSearchParams(url, {\r\n cmd: \"resetsort\"\r\n });else if (type == 2 && e.ctrlKey) url = setSearchParams(url, {\r\n ctrl: \"1\"\r\n });\r\n if (convertToBool(ajax)) refresh(fetch(setLayout(url, false)), context);else window.location = sanitizeUrl(url);\r\n return false;\r\n }\r\n\r\n // Open table header filter by field\r\n function filter(e) {\r\n let data = e.currentTarget.dataset;\r\n $$1(\"select[data-select2-id='f\" + data.table + \"srch_\" + data.field + \"']\").select2(\"open\");\r\n }\r\n\r\n /**\r\n * Scroll an element into view\r\n */\r\n function scrollIntoView(el) {\r\n el == null || el.scrollIntoView();\r\n }\r\n\r\n /**\r\n * Inline actions\r\n *\r\n * @param {Object} args - Arguments\r\n * @param {MouseEvent} args.evt - Event\r\n * @param {HTMLFormElement} args.f - Form of List page\r\n * @param {string} args.url - URL\r\n * @param {string} args.ewAction - Inline/Grid action (inline/grid)\r\n * @param {string} args.action - Inline/Grid action type (insert/cancel/update/add/edit/copy/delete)\r\n * @returns false\r\n */\r\n async function inlineAction(args) {\r\n var _args$evt;\r\n let $el = $$1((_args$evt = args.evt) == null ? void 0 : _args$evt.currentTarget),\r\n $grid = $el.closest(\".ew-grid, .ew-multi-column-grid\");\r\n $el.tooltip(\"hide\");\r\n if (!$grid[0] && $el.is(\".dropdown-item\")) {\r\n let $btn = $$1(\"#\" + $el.closest(\".dropdown-menu\").attr(\"aria-labelledby\"));\r\n if ($btn[0]) {\r\n $el = $btn;\r\n $grid = $el.closest(\".ew-grid, .ew-multi-column-grid\");\r\n }\r\n }\r\n if (!$el[0]) return;\r\n let {\r\n url,\r\n ewAction,\r\n action\r\n } = args,\r\n $f = $grid.find(\"form\"),\r\n f = $f[0],\r\n $record = $el.closest(\"tr[data-rowindex], div[data-rowindex]\"),\r\n key = $record.data(\"key\"),\r\n curindex = $record.data(\"rowindex\"),\r\n $detached;\r\n if (action != \"add\" && (!$grid[0] || !f))\r\n // Allow add with no records => no grid\r\n return;\r\n\r\n // Fail\r\n let _fail = function (o) {\r\n !o.status || showToast(\"Server Error \" + o.status + \": \" + o.statusText);\r\n };\r\n\r\n // Always\r\n let _always = function () {\r\n document.body.style.cursor = \"default\";\r\n };\r\n\r\n // Success handler for delete\r\n let _deleted = async function (response) {\r\n if (!(response instanceof Response))\r\n // Inline actions only\r\n return;\r\n let ct = response.headers.get(\"Content-Type\");\r\n if (ct != null && ct.includes(\"json\")) {\r\n let result = await response.json();\r\n if (result != null && result.success) {\r\n $record.remove();\r\n showToast(ew.language.phrase(\"DeleteSuccess\"), \"success\");\r\n } else {\r\n showToast(getError(result) || ew.language.phrase(\"DeleteFailed\"));\r\n }\r\n } else {\r\n _alert(await response.text());\r\n }\r\n };\r\n\r\n // Disable inline buttons\r\n let _disableInlineButtons = () => $$1(\".ew-list-options, .ew-list-option-body\").find(\"[data-ew-action='inline'][data-action='add'],[data-ew-action='inline'][data-action='copy'],[data-ew-action='inline'][data-action='edit']\").addClass(\"disabled\");\r\n\r\n // Enable inline buttons\r\n let _enableInlineButtons = () => $$1(\".ew-list-options, .ew-list-option-body\").find(\"[data-ew-action='inline'][data-action='add'],[data-ew-action='inline'][data-action='copy'],[data-ew-action='inline'][data-action='edit']\").removeClass(\"disabled\");\r\n\r\n // Get table\r\n let _getTable = () => $grid.find(\".ew-grid-middle-panel .ew-table\")[0];\r\n\r\n // Update row index\r\n let _updateRowIndexes = tbl => {\r\n let j = 0;\r\n Array.from(tbl.rows).forEach(row => row.dataset.rowindex = row.dataset.rowindex === \"0\" ? \"0\" : String(j++)); // Update row index if not Inline-Add/Copy row\r\n };\r\n\r\n // Success handler for inline actions\r\n let _success = async function (response) {\r\n if (!(response instanceof Response))\r\n // Inline actions only\r\n return;\r\n let text = await response.clone().text(),\r\n $data = $$1(\"<div>\" + text + \"</div>\"),\r\n $row = $data.find(\"tr[data-rowindex=0], div[data-rowindex=0]\" + (key ? \", tr[data-key='\" + key + \"'], div[data-key='\" + key + \"']\" : \"\")).filter(\"[data-rowtype=2], [data-rowtype=3]\"),\r\n // Find Inline-Add first\r\n inline = $row.data(\"inline\"),\r\n rowtype = $row.data(\"rowtype\"),\r\n rowindex = inline && rowtype == 2 /* Inline-Add */ ? 0 : inline && rowtype == 3 /* Inline-Edit */ ? 1 : $row.data(\"rowindex\"),\r\n $els = $row.add($data.find(\"script[data-rowindex=\" + rowindex + \"]\")); // Add script for the row\r\n if ([\"add\", \"copy\", \"edit\"].includes(action) && !$els[0])\r\n // Edit row not found => Error\r\n return showToast(text);\r\n if ([\"add\", \"copy\"].includes(action)) {\r\n // Inline-Add/Copy\r\n if (document.querySelector(\"main.ew-no-record\") && $data.find(\"main:not(.ew-no-record)\")[0]) {\r\n // No existing record, new Inline-Add/Copy row found\r\n await refresh(Promise.resolve(response));\r\n } else {\r\n if ($row.is(\"TR\")) {\r\n // Table\r\n let tbl = _getTable();\r\n if (tbl.matches(\".ew-infinite-scroll-table\")) $$1(tbl.tBodies).last().append($els);else $$1(tbl.tBodies).last().prepend($els);\r\n _updateRowIndexes(tbl); // Update row index\r\n setupTable(tbl, true);\r\n } else {\r\n $grid.find(\".ew-multi-column-row\").append($els);\r\n }\r\n _disableInlineButtons();\r\n }\r\n ew.initPage($$1.Event({\r\n type: \"load.ew\",\r\n target: $grid[0]\r\n }));\r\n forms.get(f.id).tryFocus();\r\n scrollIntoView($grid.find(\"[data-rowtype=2]\")[0]);\r\n } else if (action == \"edit\") {\r\n // Inline-Edit\r\n $detached = $record.replaceWith($els); // Replace current row\r\n $grid.data(\"detached\", $detached); // Save the detached row\r\n if ($row.is(\"TR\"))\r\n // Table\r\n setupTable(_getTable(), true);\r\n _disableInlineButtons();\r\n ew.initPage($$1.Event({\r\n type: \"load.ew\",\r\n target: $grid[0]\r\n }));\r\n forms.get(f.id).tryFocus();\r\n scrollIntoView($grid.find(\"[data-rowtype=3]\")[0]);\r\n }\r\n };\r\n\r\n // Submit success handler for inline actions\r\n let _submitSuccess = async function (response) {\r\n if (!(response instanceof Response)) return;\r\n let ct = response.headers.get(\"Content-Type\");\r\n if (ct != null && ct.includes(\"json\")) {\r\n let result = await response.json(),\r\n error = getError(result);\r\n if (error) {\r\n showToast(error);\r\n return;\r\n }\r\n }\r\n if (response.headers.get(\"Infinite-Scroll\")) {\r\n // Infinite scroll\r\n let text = await response.text(),\r\n $data = $$1(\"<div>\" + text + \"</div>\"),\r\n $main = $data.find(\".main\"),\r\n $row;\r\n if ([\"insert\", \"update\"].includes(action)) {\r\n $row = $data.find(\"tr[data-rowindex][data-rowtype=\" + ew.ROWTYPE_VIEW + \"], div[data-rowindex][data-rowtype=\" + ew.ROWTYPE_VIEW + \"]\"); // Row(s) with ROWTYPE_VIEW\r\n if (!$row[0]) return; // Affected row(s) not found\r\n if (action == \"insert\")\r\n // Inline-Add/Copy\r\n $grid.find(\"tr[data-rowtype=\" + ew.ROWTYPE_ADD + \"], div[data-rowtype=\" + ew.ROWTYPE_ADD + \"]\").replaceWith($row[0]); // Replace add row\r\n else if (action == \"update\")\r\n // Inline-Edit/Update\r\n $row.get().forEach(row => $grid.find(\"tr[data-key='\" + row.dataset.key + \"'], div[data-key='\" + row.dataset.key + \"']\").replaceWith(row)); // Replace row(s) edited/updated\r\n } else if ([\"add\", \"edit\", \"multiedit\"].includes(action)) {\r\n // Grid-Add/Grid-Edit/Multi-Edit\r\n $row = $data.find(\"tr[data-rowindex][data-rowtype=\" + ew.ROWTYPE_VIEW + \"], div[data-rowindex][data-rowtype=\" + ew.ROWTYPE_VIEW + \"]\"); // Row(s) with ROWTYPE_VIEW\r\n if ([\"edit\", \"multiedit\"].includes(action))\r\n // Grid-Edit/Multi-Edit\r\n $row.get().forEach(row => $grid.find(\"tr[data-key='\" + row.dataset.key + \"'], div[data-rowtype='\" + row.dataset.key + \"']\").replaceWith(row));else if (action == \"add\")\r\n // Grid-Add\r\n $grid.find(\".ew-grid-middle-panel .ew-table > tbody:last\").append($row); // Append to bottom\r\n }\r\n let tbl = _getTable();\r\n _updateRowIndexes(tbl); // Update row index\r\n setupTable(tbl, true);\r\n showMessage({\r\n target: $data\r\n }); // Show message, if any\r\n ew.initPage($$1.Event({\r\n type: \"load.ew\",\r\n target: $main[0]\r\n }));\r\n } else {\r\n // Use Ajax actions\r\n await refresh(Promise.resolve(response));\r\n }\r\n let returnUrl = response.headers.get(\"Return-Url\"); // Check if return URL exists\r\n if (returnUrl && [\"inline\", \"modal\"].includes(args.ewAction) && !samePath(parseUrl(returnUrl).pathname, currentUrl.pathname)) $grid.find(\"[data-ew-action=modal][data-url='\" + returnUrl + \"'], [data-ew-action=inline][data-url='\" + returnUrl + \"']\").trigger(\"click\");\r\n };\r\n if (ewAction == \"inline\") {\r\n if (action == \"cancel\") {\r\n if (curindex == \"0\") {\r\n // Cancel Inline-Add/Copy\r\n $record.remove();\r\n } else {\r\n var _$grid$data;\r\n // Cancel Inline-Edit\r\n (_$grid$data = $grid.data(\"detached\")) == null || _$grid$data.replaceAll($record);\r\n }\r\n _enableInlineButtons();\r\n } else if (f && [\"insert\", \"update\"].includes(action)) {\r\n // Post form\r\n let frm = forms.get(f.id);\r\n if (await frm.canSubmit(args.evt)) {\r\n // Validate\r\n document.body.style.cursor = \"wait\";\r\n let body = setSearchParams($f.serialize(), {\r\n action\r\n }),\r\n // Set up action\r\n p = _fetch(setSearchParams(url, {\r\n rnd: random()\r\n }), {\r\n method: \"POST\",\r\n body\r\n }).catch(_fail).finally(() => {\r\n frm.enableForm();\r\n _always();\r\n });\r\n if (frm.submitWithFetch) {\r\n let args = {\r\n form: f,\r\n result: p\r\n },\r\n evt = $$1.Event(\"aftersubmit\", {\r\n originalEvent: args.evt\r\n });\r\n frm.trigger(evt, [args]);\r\n } else {\r\n p.then(_submitSuccess).finally(_enableInlineButtons);\r\n }\r\n }\r\n } else if (action == \"delete\") {\r\n // Inline-Delete\r\n if (!key) {\r\n // No key from the clicked row => Multi-Delete\r\n $record = $grid.find(\"input[type=checkbox][name='key_m[]']:checked\").closest(\"tr[data-rowindex], div[data-rowindex]\"); // Update $record\r\n if (!$record[0]) {\r\n _alert(ew.language.phrase(\"NoRecordSelected\"));\r\n return false;\r\n }\r\n }\r\n _prompt(ew.language.phrase(\"DeleteConfirm\"), result => {\r\n if (result) {\r\n document.body.style.cursor = \"wait\";\r\n let method = key ? \"GET\" : \"POST\",\r\n body = deleteSearchParam($f.serialize(), \"action\"),\r\n frm = forms.get(f.id),\r\n p = _fetch(setSearchParams(url, {\r\n action: \"delete\",\r\n rnd: random()\r\n }), {\r\n method,\r\n body\r\n }).catch(_fail).finally(() => {\r\n frm.enableForm();\r\n _always();\r\n });\r\n if (frm.submitWithFetch) {\r\n let args = {\r\n form: f,\r\n result: p\r\n },\r\n evt = $$1.Event(\"aftersubmit\", {\r\n originalEvent: args.evt\r\n });\r\n frm.trigger(evt, [args]);\r\n } else {\r\n p.then(_deleted);\r\n }\r\n }\r\n });\r\n } else {\r\n document.body.style.cursor = \"wait\";\r\n _fetch(setSearchParams(url, {\r\n rnd: random()\r\n })).then(_success).catch(_fail).finally(_always);\r\n }\r\n } else if (ewAction == \"grid\" || ewAction == \"modal\") {\r\n // Grid-Add/Edit, Modal-Add/Copy/Edit/Update\r\n if ((ewAction == \"grid\" && action == \"edit\" || ewAction == \"modal\" && [\"multiedit\", \"update\"].includes(action)) && !keySelected(f)) {\r\n // Grid-Edit and Multi-Edit/Update\r\n _alert(ew.language.phrase(\"NoRecordSelected\"));\r\n return false;\r\n }\r\n ew.modalDialogShow({\r\n ...args,\r\n callback: _submitSuccess\r\n });\r\n }\r\n return false;\r\n }\r\n\r\n // Confirm inline-delete\r\n function confirmDelete(el) {\r\n clickDelete(el);\r\n _prompt(ew.language.phrase(\"DeleteConfirm\"), result => {\r\n if (result) {\r\n if (el.dataset.json && el.href)\r\n // Handle JSON response\r\n ew.modalDialogShow({\r\n url: setSearchParams(el.href, {\r\n action: \"delete\"\r\n }),\r\n lnk: el,\r\n json: true,\r\n callback: true\r\n });else if (el.href) window.location = sanitizeUrl(setSearchParams(el.href, {\r\n action: \"delete\"\r\n }));else clearDelete(el);\r\n }\r\n });\r\n return false;\r\n }\r\n\r\n // Check if any key selected // PHP\r\n function keySelected(f) {\r\n return !!(f != null && f.querySelector(\"input[type=checkbox][name='key_m[]']:checked\"));\r\n }\r\n\r\n // Select all keys\r\n function selectAllKeys(cb) {\r\n selectAll(cb);\r\n let tbl = cb == null ? void 0 : cb.closest(\".ew-table\");\r\n if (!tbl) return;\r\n $$1(tbl.tBodies).each(function () {\r\n $$1(this.rows).each(function () {\r\n let $r = $$1(this);\r\n if ($r.is(\":not(.ew-template):not(.ew-table-preview-row)\")) $r.toggleClass(\"table-active ew-table-selected-row\", cb.checked).triggerHandler(\"change\");\r\n });\r\n });\r\n }\r\n\r\n // Select all related checkboxes in the form\r\n function selectAll(cb) {\r\n if (!(cb != null && cb.form)) return;\r\n $$1(cb.form.elements).filter(\"input[type=checkbox][name^=\" + cb.name + \"_], [type=checkbox][name=\" + cb.name + \"]\").not(cb).not(\":disabled\").prop(\"checked\", cb.checked);\r\n }\r\n\r\n // Update selected checkbox\r\n function updateSelected(f) {\r\n return !!(f != null && f.querySelector(\"input[type=checkbox][name^=u_]:checked,input[type=hidden][name^=u_][value='1']\"));\r\n }\r\n\r\n // Clear selected rows color\r\n function clearSelected(tbl) {\r\n let rowIndexes = $$1(tbl).find(\"input[type=checkbox][name='key_m[]']:checked\").closest(\"[data-rowindex]\").map((i, r) => r.dataset.rowindex).get();\r\n $$1(tbl == null ? void 0 : tbl.rows).filter((i, r) => r.classList.contains(\"table-active\") && !rowIndexes.includes(r.dataset.rowindex)).removeClass(\"table-active ew-table-selected-row\").triggerHandler(\"change\");\r\n }\r\n\r\n // Clear all row delete status\r\n function clearDelete(el) {\r\n let tbl = el == null ? void 0 : el.closest(\".ew-table\");\r\n if (!tbl) return;\r\n let $tr = $$1(el).closest(\".ew-table > tbody > tr\");\r\n $tr.siblings(\"[data-rowindex='\" + $tr.data(\"rowindex\") + \"']\").addBack().removeClass(\"table-active\").triggerHandler(\"change\");\r\n }\r\n\r\n // Click single delete link\r\n function clickDelete(el) {\r\n let tbl = el == null ? void 0 : el.closest(\".ew-table\");\r\n if (!tbl) return;\r\n clearSelected(tbl);\r\n let $tr = $$1(el).closest(\".ew-table > tbody > tr\");\r\n $tr.siblings(\"[data-rowindex='\" + $tr.data(\"rowindex\") + \"']\").addBack().addClass(\"table-active\").triggerHandler(\"change\");\r\n }\r\n\r\n // Select a row\r\n function selectKey(e) {\r\n let chk = e.target,\r\n tbl = chk == null ? void 0 : chk.closest(\".ew-table\");\r\n if (!tbl) return;\r\n clearSelected(tbl);\r\n let $tr = $$1(chk).closest(\".ew-table > tbody > tr\");\r\n $tr.siblings(\"[data-rowindex='\" + $tr.data(\"rowindex\") + \"']\").addBack().each(function () {\r\n $$1(this).toggleClass(\"table-active ew-table-selected-row\", chk.checked).triggerHandler(\"change\");\r\n });\r\n e.stopPropagation();\r\n }\r\n\r\n /**\r\n * Setup table\r\n *\r\n * @param {number} [index=undefined] Index\r\n * @param {HTMLTableElement} tbl HTML table element\r\n * @param {boolean} [force=undefined] Force setup\r\n * @returns\r\n */\r\n function setupTable() {\r\n let tbl, force;\r\n if ($$1.isNumber(arguments[0])) {\r\n tbl = arguments[1];\r\n } else if (arguments[0] instanceof HTMLTableElement) {\r\n tbl = arguments[0];\r\n force = arguments[1];\r\n }\r\n let $tbl = $$1(tbl),\r\n $rows = $$1(tbl.rows);\r\n if (!tbl || !tbl.rows || !force && tbl.dataset.isset || tbl.tBodies.length == 0) return;\r\n // Set selected row color\r\n let click = function (e) {\r\n let $this = $$1(this),\r\n tbl = this.closest(\".ew-table\"),\r\n $target = $$1(e.target);\r\n if (!tbl || $target.hasClass(\"btn\") || $target.hasClass(\"ew-preview-btn\") || $target.is(\":input\")) return;\r\n clearSelected(tbl); // Clear all other selected rows\r\n $this.siblings(\"[data-rowindex='\" + $this.data(\"rowindex\") + \"']\").addBack().toggleClass(\"table-active\").triggerHandler(\"change\");\r\n };\r\n let n = $rows.filter(\"[data-rowindex=1]\").length || $rows.filter(\"[data-rowindex=0]\").length || 1,\r\n // Alternate color every n rows\r\n rows = $rows.filter(\":not(.ew-template)\").each(function () {\r\n $$1(this.cells).removeClass(\"ew-table-last-row\").last().addClass(\"ew-table-last-col\"); // Cell of last column\r\n }).get();\r\n if (rows.length >= n) {\r\n let div = $tbl.parentsUntil(\".ew-grid\", \".\" + ew.RESPONSIVE_TABLE_CLASS)[0];\r\n rows[rows.length - 1].classList.add(\"border-bottom-0\"); // Last row\r\n rows.splice(n * -1).forEach((row, i) => Array.from(row.cells).filter(cell => cell.rowSpan == i + 1) // Cell of last row\r\n .forEach(cell => {\r\n cell.classList.add(\"ew-table-last-row\");\r\n cell.classList.toggle(\"ew-table-border-bottom\", (div == null ? void 0 : div.clientHeight) > tbl.offsetHeight);\r\n }));\r\n }\r\n let form = tbl.closest(\"form\"),\r\n attach = form && $$1(form.elements).filter(\"input#action:not([value^=grid])\").length > 0;\r\n $$1(tbl.tBodies[tbl.tBodies.length - 1].rows) // Use last TBODY (avoid Opera bug)\r\n .filter(\":not(.ew-template):not(.ew-table-preview-row)\").each(function () {\r\n let $r = $$1(this);\r\n if (attach && !$r.data(\"isset\")) $r.on(\"click\", click).data(\"isset\", true);\r\n });\r\n setupGrid(tbl.closest(\".ew-grid\"), force);\r\n tbl.dataset.isset = \"true\";\r\n }\r\n\r\n // Setup grid\r\n function setupGrid(grid, force) {\r\n let $grid = $$1(grid);\r\n if (!grid || !force && grid.dataset.isset) return;\r\n let rowcnt = $grid.find(\"table.ew-table > tbody\").first().children(\"tr:not(.ew-table-preview-row, .ew-template)\").length;\r\n if (rowcnt == 0 && !grid.querySelector(\".ew-grid-upper-panel, .ew-grid-lower-panel\")) $grid.hide();\r\n if ($grid.find(\".ew-grid-middle-panel:visible\").hasClass(ew.RESPONSIVE_TABLE_CLASS) && $grid.width() > $$1(\".content\").width()) {\r\n $grid.addClass(\"d-flex\");\r\n $grid.closest(\".ew-detail-pages\").addClass(\"d-block\");\r\n $grid.closest(\".ew-form\").addClass(\"w-100\");\r\n }\r\n if ($grid.find(\".ew-grid-middle-panel:visible\") && (!grid.querySelector(\".ew-grid-upper-panel\") || $grid.find(\".ew-grid-upper-panel:hidden\")[0])) {\r\n let $panel = $grid.find(\".ew-grid-middle-panel:not(.overflow-y-auto):visible\").addClass(\"rounded-top\"),\r\n $cells = $panel.children(\".ew-table:not(.table-head-fixed):visible\").first().children(\"thead:visible\").first().children(\"tr:visible\").first().children(\"th:visible\");\r\n $cells.first().addClass(\"rounded-top-left\");\r\n $cells.last().addClass(\"rounded-top-right\");\r\n }\r\n if ($grid.find(\".ew-grid-middle-panel:visible\") && (!grid.querySelector(\".ew-grid-lower-panel\") || $grid.find(\".ew-grid-lower-panel:hidden\")[0])) {\r\n let $panel = $grid.find(\".ew-grid-middle-panel:not(.overflow-y-auto):visible\").addClass(\"rounded-bottom\"),\r\n $cells = $panel.children(\".ew-table:not(.table-head-fixed):visible\").last().children(\"tbody:visible\").last().children(\"tr:visible\").last().children(\"td:visible\");\r\n $cells.first().addClass(\"rounded-bottom-left\");\r\n $cells.last().addClass(\"rounded-bottom-right\");\r\n }\r\n grid.dataset.isset = \"true\";\r\n }\r\n\r\n // Add a row to grid\r\n function addGridRow(el) {\r\n var _bootstrap$Tooltip$ge2;\r\n let grid = el == null ? void 0 : el.closest(\".ew-grid\"),\r\n $grid = $$1(grid),\r\n $tbl = $grid.find(\"table.ew-table\").last(),\r\n $p = $tbl.parent(\"div\"),\r\n $tpl = $tbl.find(\"tr.ew-template\");\r\n if (!el || !grid || !$tbl[0] || !$tpl[0]) return false;\r\n let $lastrow = $$1($tbl[0].rows).last();\r\n $tbl.find(\"td.ew-table-last-row\").removeClass(\"ew-table-last-row\");\r\n let $row = $tpl.clone(true, true).removeClass(\"ew-template\"),\r\n form = grid.querySelector(\"div.ew-form[id^=f][id$=grid]\") || grid.querySelector(\"form.ew-form[id^=f][id$=list]\") || grid.querySelector(\"form.ew-form[id^=f][id$=grid]\"),\r\n $form = $$1(form),\r\n suffix = $form.is(\"div\") ? \"_\" + form.id : \"\",\r\n $keycnt = $form.find(\"#\" + ew.FORM_KEY_COUNT_NAME + suffix),\r\n keycnt = parseInt($keycnt.val(), 10) + 1,\r\n name = ew.FORM_ROW_ACTION_NAME.replace(/^k_/, \"k\" + keycnt + \"_\") + suffix,\r\n // name=\"k<n>_action\"\r\n $els = $tpl.find(\"script:contains('$rowindex$')\").add(\"tr.ew-template + script[data-rowindex='$rowindex$']\"); // Get scripts with rowindex\r\n $row.attr({\r\n \"id\": \"r\" + keycnt + $row.attr(\"id\").substring(2),\r\n \"data-rowindex\": keycnt\r\n });\r\n $row.children(\"td\").each(function () {\r\n $$1(this).find(\"*\").each(function () {\r\n $$1.each(this.attributes, function (i, attr) {\r\n attr.value = attr.value.replace(/\\$rowindex\\$/g, keycnt); // Replace row index\r\n });\r\n });\r\n });\r\n let $btn = $row.find(\".ew-icon\").closest(\"a, button\");\r\n (_bootstrap$Tooltip$ge2 = bootstrap.Tooltip.getInstance($btn[0])) == null || _bootstrap$Tooltip$ge2.dispose();\r\n $btn.tooltip({\r\n ...ew.tooltipOptions,\r\n container: \"body\",\r\n trigger: \"hover\"\r\n });\r\n $keycnt.val(keycnt).after($$1(\"<input>\").attr({\r\n type: \"hidden\",\r\n id: name,\r\n name: name,\r\n value: \"insert\"\r\n }));\r\n $lastrow.after($row);\r\n $els.get().forEach(el => addScript(el.text.replace(/\\$rowindex\\$/g, keycnt)));\r\n let frm = $form.data(\"form\");\r\n frm == null || frm.initEditors();\r\n frm == null || frm.initUpload();\r\n setupTable($tbl[0], true);\r\n $p.scrollTop($p[0].scrollHeight);\r\n $tbl.trigger(\"rowadded\", [keycnt]);\r\n return false;\r\n }\r\n\r\n // Delete a row from grid\r\n function deleteGridRow(el, infix) {\r\n var _bootstrap$Tooltip$ge3;\r\n (_bootstrap$Tooltip$ge3 = bootstrap.Tooltip.getInstance(el)) == null || _bootstrap$Tooltip$ge3.dispose();\r\n let grid = el.closest(\".ew-grid, .ew-multi-column-grid\"),\r\n row = el.closest(\"tr, div[data-rowindex]\"),\r\n tbl = row == null ? void 0 : row.closest(\".ew-table\"),\r\n rowidx = parseInt(row == null ? void 0 : row.dataset.rowindex, 10),\r\n form = (grid == null ? void 0 : grid.querySelector(\"div.ew-form[id^=f][id$=grid]\")) || (grid == null ? void 0 : grid.querySelector(\"form.ew-form[id^=f][id$=list], form.ew-form[id^=f][id$=grid]\")),\r\n $form = $$1(form),\r\n frm = $form.data(\"form\");\r\n if (!el || !grid || !row || !form || !frm)\r\n // tbl can be null if multi-column\r\n return false;\r\n let suffix = $form.is(\"div\") ? \"_\" + form.id : \"\",\r\n keycnt = \"#\" + ew.FORM_KEY_COUNT_NAME + suffix;\r\n let _delete = function () {\r\n row.remove();\r\n if (grid.classList.contains(\".ew-grid\")) setupTable(tbl, true);\r\n if (rowidx > 0) {\r\n let $keyact = $form.find(\"#k\" + rowidx + \"_action\" + suffix);\r\n if ($keyact[0]) {\r\n $keyact.val($keyact.val() == \"insert\" ? \"insertdelete\" : \"delete\");\r\n } else {\r\n $form.find(keycnt).after($$1(\"<input>\").attr({\r\n type: \"hidden\",\r\n id: \"k\" + rowidx + \"_action\" + suffix,\r\n name: \"k\" + rowidx + \"_action\" + suffix,\r\n value: \"delete\"\r\n }));\r\n }\r\n }\r\n $$1(tbl).trigger(\"rowdeleted\", [rowidx]);\r\n };\r\n if (isFunction$2(frm.emptyRow) && frm.emptyRow(infix)) {\r\n // Empty row\r\n _delete();\r\n } else {\r\n // Confirm\r\n _prompt(ew.language.phrase(\"DeleteConfirm\"), result => {\r\n if (result) _delete();\r\n });\r\n }\r\n return false;\r\n }\r\n\r\n // HTML encode text\r\n function htmlEncode(text) {\r\n return String(text).replace(/&/g, '&').replace(/\\\"/g, '"').replace(/</g, '<').replace(/>/g, '>');\r\n }\r\n\r\n // HTML decode text\r\n function htmlDecode(text) {\r\n return String(text).replace(/&/g, '&').replace(/"/g, '\"').replace(/</g, '<').replace(/>/g, '>');\r\n }\r\n\r\n // Get form element(s) as single element or array of radio/checkbox\r\n function getElements(el, root) {\r\n root = !$$1.isString(root) ? root : /^#/.test(root) ? root : \"#\" + root;\r\n let $root = root ? $$1(root) : $document$1,\r\n selectors = [],\r\n getFieldSelector = field => \"[data-field='\" + field + \"']:not(.ew-custom-option):not([name^=y_]):not([data-old])\";\r\n if (el instanceof HTMLElement && el.dataset.table && el.dataset.field) {\r\n // HTML element (e.g. radio/checkbox)\r\n if (isBooleanCheckbox(el)) return el;\r\n selectors = [\"[data-table='\" + el.dataset.table + \"']\" + getFieldSelector(el.dataset.field)];\r\n } else if ($$1.isString(el)) {\r\n let [s1, s2] = el.split(\" \"); // Check if \"<table> <name>\"\r\n selectors = s2 ? [\"[data-table='\" + s1 + \"']\" + getFieldSelector(getId(s2))] // \"<table> <name>\", remove []\r\n : [\"[name='\" + el + \"']:not(.ew-custom-option):not([data-old])\", getFieldSelector(getId(el))]; // \"<name>\" only\r\n }\r\n let selector = [\"input\", \"select\", \"textarea\", \"button\", \"selection-list\"].flatMap(tag => selectors.map(sel => tag + sel)).join(),\r\n $els = $root.find(selector);\r\n if ($root.is(\"form.ew-form\") && $root.find(\"div.ew-form\")[0])\r\n // Master/Detail form\r\n $els = $els.not(\"div.ew-form *\"); // Remove elements of detail tables\r\n if ($els.length == 1 && ($els.is(\":not([type=checkbox]):not([type=radio])\") || isBooleanCheckbox($els[0])) || $els.length == 2 && $els.eq(0).is(\"selection-list\") && $els.eq(1).is(\"input[type=hidden]\"))\r\n // Polyfill for the ElementInternals\r\n return $els[0];\r\n return $els[0] ? $els.get() : null;\r\n }\r\n\r\n // Get first element by id/name (not necessarily form element)\r\n function getElement(name, root) {\r\n root = !$$1.isString(root) ? root : /^#/.test(root) ? root : \"#\" + root;\r\n let selector = \"#\" + name.replace(/([\\$\\[\\]])/g, \"\\\\$1\") + \",[name='\" + name + \"']\";\r\n return root ? $$1(root).find(selector)[0] : $$1(selector).first()[0];\r\n }\r\n\r\n // Get ancestor by function\r\n function getAncestorBy(node, fn) {\r\n while (node = node.parentNode) {\r\n var _node;\r\n if (((_node = node) == null ? void 0 : _node.nodeType) == 1 && (!fn || fn(node))) return node;\r\n }\r\n return null;\r\n }\r\n\r\n // Check if an element is hidden\r\n function isHidden(el) {\r\n var $el = $$1(el);\r\n return $el.css(\"display\") == \"none\" && !$el.is(\"selection-list\") && !$el.closest(\".dropdown-menu\")[0] && !isModalLookup(el) && !isAutoSuggest(el) && !isHiddenTextArea(el) || getAncestorBy(el, node => node.style.display == \"none\" && !node.classList.contains(\"tab-pane\") && !node.classList.contains(\"collapse\")) != null;\r\n }\r\n\r\n // Check if same text\r\n function sameText(o1, o2) {\r\n return String(o1).toLowerCase() == String(o2).toLowerCase();\r\n }\r\n\r\n // Check if same string\r\n function sameString(o1, o2) {\r\n return String(o1) == String(o2);\r\n }\r\n\r\n // Convert to header case\r\n function headerCase(str) {\r\n return !str ? \"\" : String(str).replace(/^[^A-Za-z0-9]*|[^A-Za-z0-9]*$/g, \"\").replace(/([a-z])([A-Z])/g, (m, a, b) => a + \"_\" + b.toLowerCase()).replace(/[^A-Za-z0-9]+|_+/g, \"-\").toLowerCase().replace(/(-?)(\\w+)(-?)/g, (m, a, b, c) => a + b.charAt(0).toUpperCase() + b.slice(1) + c);\r\n }\r\n\r\n // Check if same path\r\n function samePath(p1, p2) {\r\n p1 = p1 instanceof URL ? p1.pathname : parseUrl(p1).pathname;\r\n p2 = p2 instanceof URL ? p2.pathname : parseUrl(p2).pathname;\r\n if (p1 != p2 && p1.startsWith(ew.PATH_BASE) && p2.startsWith(ew.PATH_BASE)) {\r\n p1 = p1.substring(ew.PATH_BASE.length);\r\n p2 = p2.substring(ew.PATH_BASE.length);\r\n let ar1 = p1.split(\"/\"),\r\n ar2 = p2.split(\"/\");\r\n if (ar1[0] == ar2[0] && ar1[0].match(/(list|view|edit)$/i) ||\r\n // *list == *list\r\n ar1[0] == ar2[0] && ar1[1] == ar2[1] && [ew.LIST_ACTION, ew.VIEW_ACTION, ew.EDIT_ACTION].includes(ar1[1]))\r\n // xxx/list == xxx/list\r\n return true;\r\n }\r\n return p1 == p2;\r\n }\r\n\r\n // Get element value as array for select-multiple field or else as string\r\n function getValue(el, form) {\r\n let obj = el;\r\n if ($$1.isString(el)) obj = el.split(\" \").length == 2 // Parent field in master table\r\n ? getElements(el) : getElements(el, form);else if ([\"checkbox\", \"radio\"].includes(el.type))\r\n // Single radio/checkbox\r\n obj = getElements(el); // Find radio buttons and checkboxes with the same name\r\n if (!obj) return undefined;\r\n if (obj.options) {\r\n // Selection list\r\n return obj.list ? obj.type == \"select-multiple\" ? obj.values : obj.value : $$1(obj).val();\r\n } else if (Array.isArray(obj)) {\r\n // Radio/Checkbox list or element not found\r\n return obj.length ? $$1(obj).filter(\":checked\").map((i, el) => el.value).get() : undefined;\r\n } else if (isBooleanCheckbox(obj)) {\r\n // Single checkbox\r\n return obj.checked ? obj.value : undefined;\r\n } else if (ew.isHiddenTextArea(obj)) {\r\n $$1(obj).data(\"editor\").save();\r\n return obj.value;\r\n } else {\r\n // text/hidden\r\n return obj.value;\r\n }\r\n }\r\n\r\n // Get existing selected values as an array\r\n function getOptionValues(el, form) {\r\n let obj = el;\r\n if ($$1.isString(el)) obj = el.split(\" \").length == 2 // Parent field in master table\r\n ? getElements(el) : getElements(el, form);else if ([\"checkbox\", \"radio\"].includes(el.type))\r\n // Single radio/checkbox\r\n obj = getElements(el); // Find radio buttons and checkboxes with the same name\r\n if (!obj) return [];\r\n if (obj.options) {\r\n // Selection list\r\n if (obj.list) {\r\n return obj.values;\r\n } else if (isSelect2(obj)) {\r\n let val = $$1(obj).val();\r\n return Array.isArray(val) ? val : $$1.isValue(val) ? [val] : [];\r\n } else {\r\n return Array.from(obj.options).filter(option => option.selected && option.value !== \"\").map(option => option.value);\r\n }\r\n } else if (Array.isArray(obj) || isBooleanCheckbox(obj)) {\r\n // Radio/Checkbox list, or single checkbox, or element not found ([])\r\n return $$1(obj).filter(\":checked\").map(function () {\r\n return this.value;\r\n }).get();\r\n } else if (ew.isHiddenTextArea(obj)) {\r\n $$1(obj).data(\"editor\").save();\r\n return [obj.value];\r\n } else {\r\n // text/hidden\r\n return [obj.value];\r\n }\r\n }\r\n\r\n // Get existing selected values as string\r\n function getOptionValue(el, form) {\r\n return getOptionValues(el, form).join(ew.MULTIPLE_OPTION_SEPARATOR);\r\n }\r\n\r\n // Get existing text of selected values as an array\r\n function getOptionTexts(el, form) {\r\n let obj = el;\r\n if ($$1.isString(el)) obj = el.split(\" \").length == 2 // Parent field in master table\r\n ? getElements(el) : getElements(el, form);else if ([\"checkbox\", \"radio\"].includes(el.type))\r\n // Single radio/checkbox\r\n obj = getElements(el); // Find radio buttons and checkboxes with the same name\r\n if (!obj) return [];\r\n if (isAutoSuggest(obj)) {\r\n // AutoSuggest (before obj.options)\r\n return [obj.input.value];\r\n } else if (obj.options) {\r\n // Selection list\r\n return isSelect2(obj) ? $$1(obj).find(\":selected\").map((i, el) => el.innerHTML).get() : Array.from(obj.options).filter(option => option.selected && option.value !== \"\").map(option => option.text);\r\n } else if (Array.isArray(obj) || isBooleanCheckbox(obj)) {\r\n // Radio/Checkbox list, or single checkbox, or element not found ([])\r\n return $$1(obj).filter(\":checked\").map(function () {\r\n return $$1(this).parent().text();\r\n }).get();\r\n } else if (ew.isHiddenTextArea(obj)) {\r\n $$1(obj).data(\"editor\").save();\r\n return [obj.value];\r\n } else {\r\n return [obj.value];\r\n }\r\n }\r\n\r\n // Clear existing options\r\n function clearOptions(obj) {\r\n if (obj.options) {\r\n // Selection list\r\n var lo = obj.type == \"select-multiple\" ||\r\n // multiple\r\n obj.hasAttribute(\"data-dropdown\") ||\r\n // dropdown\r\n obj.length > 0 && obj.options[0].value != \"\" // non-empty first element\r\n ? 0 : 1;\r\n if (obj.list) {\r\n obj.removeAll();\r\n obj.render();\r\n } else {\r\n for (var i = obj.length - 1; i >= lo; i--) obj.remove(i);\r\n }\r\n if (isAutoSuggest(obj)) {\r\n obj.input.value = \"\";\r\n obj.value = \"\";\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Get the name or id of an element\r\n *\r\n * @param {HTMLElement} el - HTML element\r\n * @param {boolean} [remove=true] - Remove square brackets\r\n * @returns\r\n */\r\n function getId(el, remove) {\r\n var id = $$1.isString(el) ? el : $$1(el).attr(\"name\") || $$1(el).attr(\"id\"); // Use name first (id may have suffix)\r\n return remove !== false ? id.replace(/\\[\\]$/, \"\") : id;\r\n }\r\n\r\n // Get display value separator\r\n function valueSeparator(index, obj) {\r\n var sep = $$1(obj).data(\"value-separator\");\r\n return Array.isArray(sep) ? sep[index - 1] : sep || \", \";\r\n }\r\n\r\n /**\r\n * Get display value\r\n *\r\n * @param {Object} opt - Option being displayed\r\n * @param {HTMLElment} obj - HTML element\r\n * @returns {string} Display value\r\n */\r\n function displayValue(opt, obj) {\r\n return [opt.df, opt.df2, opt.df3, opt.df4].reduce((text, value, i) => {\r\n let sep = i > 0 ? valueSeparator(i, obj) : \"\";\r\n return !$$1.isUndefined(sep) && $$1.isValue(value) && value != \"\" ? text + sep + value : text;\r\n }, \"\");\r\n }\r\n\r\n /**\r\n * Create new option\r\n *\r\n * @param {(HTMLElement|array)} obj - Selection list\r\n * @param {Object} data - Object for the new option\r\n * @param {form} f - form object of obj\r\n * @param {bool} selected - New option is selected\r\n * @returns\r\n */\r\n function newOption(obj, data, f, selected) {\r\n let frm = forms.get(f.id),\r\n id = getId(obj),\r\n list = frm.getList(obj),\r\n group = data.gf,\r\n value = data.lf,\r\n template = frm.getOptionTemplate(list),\r\n text = template != null && template.render && !isAutoSuggest(obj) ? template.render(data, ew.jsRenderHelpers) : displayValue(data, obj) || value;\r\n if (obj.options) {\r\n // Selection list\r\n let option;\r\n if (obj.list) {\r\n option = new ew.SelectionListOption(text, value, !!selected);\r\n } else {\r\n option = document.createElement(\"option\");\r\n option.value = value;\r\n option.innerHTML = text;\r\n option.selected = !!selected;\r\n }\r\n let args = {\r\n \"name\": id,\r\n \"form\": f.$element,\r\n data,\r\n group,\r\n option\r\n };\r\n $document$1.trigger(\"newoption\", [args]); // Fire \"newoption\" event for selection list\r\n if (obj.list) {\r\n obj.addOption(args.option);\r\n } else {\r\n if (args.group && !isSelect2(obj)) {\r\n var _obj$querySelector;\r\n let optGroup = Array.from((_obj$querySelector = obj.querySelector(\":scope > optgroup\")) != null ? _obj$querySelector : []).find(g => g.label == args.group);\r\n if (!optGroup) {\r\n optGroup = document.createElement(\"optgroup\");\r\n optGroup.label = args.group;\r\n obj.add(optGroup);\r\n }\r\n optGroup.appendChild(args.option);\r\n } else {\r\n obj.add(args.option);\r\n }\r\n }\r\n return args.option.text;\r\n }\r\n return text;\r\n }\r\n\r\n // Select combobox option\r\n function selectOption(obj, values, change) {\r\n var _obj$dataset, _forms$get$getList;\r\n if (change === void 0) {\r\n change = true;\r\n }\r\n if (!obj || !values) return;\r\n let $obj = $$1(obj);\r\n values = Array.isArray(values) ? values : [values];\r\n if (obj.options) {\r\n // Selection list\r\n if (obj.list) {\r\n obj.value = values;\r\n } else {\r\n var _obj$options$;\r\n $obj.val(values);\r\n if (change && isSelect2(obj)) $obj.triggerHandler(\"change\");\r\n if (obj.type == \"select-one\" && obj.selectedIndex == -1 && !((_obj$options$ = obj.options[0]) != null && _obj$options$.value)) obj.selectedIndex = 0; // Make sure an option is selected\r\n }\r\n if (isAutoSuggest(obj) && values.length == 1) {\r\n let opts = obj.options || [];\r\n for (let opt of opts) {\r\n if (opt.value == values[0]) {\r\n obj.value = opt.value;\r\n obj.input.value = opt.text;\r\n break;\r\n }\r\n }\r\n }\r\n } else if (isBooleanCheckbox(obj)) {\r\n obj.checked = convertToBool(values.join(ew.MULTIPLE_OPTION_SEPARATOR));\r\n } else if (obj.type && obj.type != \"file\") {\r\n $obj.val(values.join(ew.MULTIPLE_OPTION_SEPARATOR));\r\n if (isHiddenTextArea($obj)) $obj.data(\"editor\").set();\r\n }\r\n // Auto-select if only one option\r\n if (((_obj$dataset = obj.dataset) == null ? void 0 : _obj$dataset.autoselect) === \"false\")\r\n // data-autoselect=\"false\"\r\n return;\r\n let form = getForm(obj),\r\n autoSelect = form && !(form.id.endsWith(\"search\") || form.id.endsWith(\"srch\") || ((_forms$get$getList = forms.get(form.id).getList(obj)) == null || (_forms$get$getList = _forms$get$getList.parentFields) == null ? void 0 : _forms$get$getList.length) === 0); // Not search forms and has parent fields\r\n if (autoSelect && obj.options) {\r\n // Selection List\r\n if (!obj.list && obj.type == \"select-one\" && obj.options.length == 2 && !obj.options[1].selected) {\r\n obj.options[1].selected = true;\r\n !change || $obj.trigger(\"change\");\r\n } else if (obj.options.length == 1 && !obj.options[0].selected) {\r\n obj.options[0].selected = true;\r\n !change || $obj.trigger(\"change\");\r\n }\r\n if (isAutoSuggest(obj)) {\r\n let opts = obj.options || [];\r\n if (opts.length == 1) {\r\n obj.value = opts[0].value;\r\n obj.input.value = opts[0].text;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Fetch API\r\n function _fetch(url, init) {\r\n var _init, _init$headers;\r\n (_init = init) != null ? _init : init = {};\r\n init.headers = new Headers(init.headers || {});\r\n let isApi = url.startsWith(getApiUrl()); // Is API request\r\n if (isApi && ew.API_JWT_TOKEN) init.headers.set(ew.API_JWT_AUTHORIZATION_HEADER, \"Bearer \" + ew.API_JWT_TOKEN);\r\n if ((_init$headers = init.headers) != null && (_init$headers = _init$headers.get(\"Content-Type\")) != null && _init$headers.includes(\"application/json\")) {\r\n // Add token in headers if posting JSON data // PHP\r\n init.headers.set(headerCase(ew.TOKEN_NAME_KEY), ew.TOKEN_NAME); // Send token name in header // PHP\r\n init.headers.set(headerCase(ew.ANTIFORGERY_TOKEN_KEY), ew.ANTIFORGERY_TOKEN); // Send antiforgery token in header // PHP\r\n }\r\n if (!init.method || sameText(init.method, \"GET\")) {\r\n // GET\r\n url = setSearchParams(url, init.body);\r\n delete init.body;\r\n } else {\r\n // POST\r\n if (init.body instanceof FormData) {\r\n init.body.set(ew.TOKEN_NAME_KEY, ew.TOKEN_NAME);\r\n init.body.set(ew.ANTIFORGERY_TOKEN_KEY, ew.ANTIFORGERY_TOKEN);\r\n } else {\r\n init.body = mergeSearchParams(init.body, {\r\n [ew.TOKEN_NAME_KEY]: ew.TOKEN_NAME,\r\n [ew.ANTIFORGERY_TOKEN_KEY]: ew.ANTIFORGERY_TOKEN\r\n }); // Add token name and antiforgery token // PHP\r\n }\r\n }\r\n let args = {\r\n url,\r\n init\r\n };\r\n $document$1.trigger(\"fetch\", [args]);\r\n return fetch(args.url, args.init);\r\n }\r\n\r\n // Ajax send\r\n $document$1.on(\"ajaxSend\", function (event, jqxhr, settings) {\r\n let url = settings.url,\r\n isApi = url.startsWith(getApiUrl()),\r\n // Is API request\r\n allowed = isApi || url.startsWith(ew.PATH_BASE) || url.startsWith(currentPage());\r\n if (!allowed && url.match(/^http/i)) {\r\n let objUrl = new URL(url);\r\n allowed = objUrl.hostname == currentUrl.hostname; // Same host name\r\n }\r\n if (allowed) {\r\n if (isApi && ew.API_JWT_TOKEN) jqxhr.setRequestHeader(ew.API_JWT_AUTHORIZATION_HEADER, \"Bearer \" + ew.API_JWT_TOKEN); // Note: settings.headers won't work\r\n if ($$1.isString(settings.contentType) && settings.contentType.includes(\"application/json\")) {\r\n // Add token and antiforgery token in headers if posting JSON data // PHP\r\n jqxhr.setRequestHeader(headerCase(ew.TOKEN_NAME_KEY), ew.TOKEN_NAME);\r\n jqxhr.setRequestHeader(headerCase(ew.ANTIFORGERY_TOKEN_KEY), ew.ANTIFORGERY_TOKEN);\r\n } else if (sameText(settings.type, \"POST\")) {\r\n // POST\r\n if (settings.data instanceof FormData) {\r\n settings.data.set(ew.TOKEN_NAME_KEY, ew.TOKEN_NAME);\r\n settings.data.set(ew.ANTIFORGERY_TOKEN_KEY, ew.ANTIFORGERY_TOKEN);\r\n } else {\r\n let params = mergeSearchParams(new URLSearchParams(settings.data), {\r\n [ew.TOKEN_NAME_KEY]: ew.TOKEN_NAME,\r\n [ew.ANTIFORGERY_TOKEN_KEY]: ew.ANTIFORGERY_TOKEN\r\n }); // Add token name and antiforgery token // PHP\r\n settings.data = params.toString();\r\n }\r\n }\r\n }\r\n });\r\n\r\n // Ajax start\r\n $document$1.on(\"ajaxStart\", function () {\r\n $document$1.data(\"_ajax\", true);\r\n $$1(\"form.ew-form\").addClass(\"ew-wait\").each(function () {\r\n let frm = forms.get(this.id);\r\n if (frm) {\r\n if (!frm.multiPage || !frm.multiPage.lastPageSubmit) frm.disableForm();\r\n }\r\n });\r\n });\r\n\r\n // Ajax stop/error\r\n $document$1.on(\"ajaxStop ajaxError\", function () {\r\n $$1(\"form.ew-form.ew-wait\").removeClass(\"ew-wait\").each(function () {\r\n let frm = forms.get(this.id);\r\n if (frm) {\r\n if (!frm.multiPage || !frm.multiPage.lastPageSubmit) frm.enableForm();\r\n }\r\n });\r\n $document$1.data(\"_ajax\", false);\r\n });\r\n\r\n // Execute JavaScript in HTML loaded by Ajax\r\n function executeScript(html, id, modal) {\r\n let pattern = modal ? /<(head)[^>]*>[\\s\\S]*?<\\/\\1\\s*>/ig : /<(head|template)[^>]*>[\\s\\S]*?<\\/\\1\\s*>/ig,\r\n // If modal, scripts in template tags not executed by browser, execute manually\r\n matches = html.replaceAll(pattern, \"\").matchAll(/<script[^>]*>[\\s\\S]*?<\\/script\\s*>/ig); // Do not execute scripts in template tags, use non-greedy [\\s\\S]*?\r\n Array.from(document.createRange().createContextualFragment(Array.from(matches).map(m => m[0]).filter(s => !s.includes(\"$rowindex$\")).join(\"\")).querySelectorAll(\"script:not([type]), script[type='text/javascript']\")).sort((s1, s2) => s2.classList.contains(\"ew-apply-template\") ? 1 : s1.classList.contains(\"ew-apply-template\") ? -1 : 0) // Execute custom template first\r\n .forEach((s, i) => addScript(s, \"scr_\" + id + \"_\" + i));\r\n }\r\n\r\n // Strip JavaScript in HTML loaded by Ajax\r\n function stripScript(html) {\r\n let matches = html.replaceAll(/<(head|template)[^>]*>[\\s\\S]*?<\\/\\1\\s*>/ig, \"\").matchAll(/<script([^>]*)>([\\s\\S]*?)<\\/script\\s*>/ig); // Do not strip scripts in template tags, use non-greedy [\\s\\S]*?\r\n return Array.from(matches).filter(m => document.createRange().createContextualFragment(m[0]).querySelector(\"script:not([type]), script[type='text/javascript']\")).reduce((html, m) => html.replace(m[0], \"\"), html);\r\n }\r\n\r\n // Add SCRIPT tag\r\n function addScript(text, id) {\r\n let scr = text instanceof HTMLScriptElement ? text : document.createElement(\"SCRIPT\");\r\n if ($$1.isString(text)) scr.text = text;\r\n if (id) scr.id = id;\r\n return document.body.appendChild(scr); // Do not use jQuery so it can be removed\r\n }\r\n\r\n // Remove JavaScript added by Ajax\r\n function removeScript(id) {\r\n if (id) $$1(\"script[id^='scr_\" + id + \"_']\").remove();\r\n }\r\n\r\n /**\r\n * Clean HTML loaded by Ajax for modal dialog\r\n *\r\n * @param {string} html - HTML string\r\n * @param {bool} keepScripts - Keep script tags or not\r\n * @returns HTML string\r\n */\r\n function getContent(html, keepScripts) {\r\n var _m$;\r\n html = html.trim().replace(/<head>[\\s\\S]*<\\/head>/, \"\");\r\n let body = keepScripts ? html : stripScript(html),\r\n m = body.match(/<body[\\s\\S]*>[\\s\\S]*<\\/body>/i);\r\n body = (_m$ = m == null ? void 0 : m[0]) != null ? _m$ : body;\r\n let $content = $$1(body).find(\"section.content\");\r\n return $content[0] ? $content.html() : body;\r\n }\r\n\r\n // Get all options of Selection list or Radio/Checkbox list as array\r\n function getOptions(obj) {\r\n return obj != null && obj.options ? Array.prototype.map.call(obj.options, opt => [opt.value, opt.text]) : [];\r\n }\r\n\r\n /**\r\n * Show dialog for enabling two factor authentication\r\n */\r\n function enable2FA() {\r\n document.body.style.cursor = \"wait\";\r\n if (sameText(ew.TWO_FACTOR_AUTHENTICATION_TYPE, \"google\")) {\r\n // Show QR Code and Verify\r\n let url = getApiUrl([ew.API_2FA_ACTION, ew.API_2FA_SHOW]);\r\n $$1.get(url, result => {\r\n var _result$error4;\r\n if (result != null && result.url) {\r\n _prompt({\r\n imageUrl: result.url,\r\n html: ew.language.phrase(\"Scan2FAQrCode\"),\r\n input: \"text\",\r\n confirmButtonText: ew.language.phrase(\"Verify\"),\r\n showLoaderOnConfirm: true,\r\n allowEscapeKey: false,\r\n allowOutsideClick: () => !Swal.isLoading(),\r\n willOpen: () => {\r\n Swal.showLoading(Swal.getConfirmButton());\r\n Swal.disableInput();\r\n Swal.getImage().onload = () => {\r\n Swal.enableInput();\r\n Swal.hideLoading();\r\n Swal.getInput().focus();\r\n };\r\n },\r\n preConfirm: value => {\r\n return $$1.get(getApiUrl([ew.API_2FA_ACTION, ew.API_2FA_VERIFY, value])).then(result => {\r\n if ((result == null ? void 0 : result.success) !== true) throw new Error(ew.language.phrase(\"2FAVerificationFailed\"));\r\n return result;\r\n }).catch(error => Swal.showValidationMessage(error));\r\n }\r\n }, result => {\r\n var _result$error3;\r\n if (result != null && (_result$error3 = result.error) != null && _result$error3.description) {\r\n showToast(result.error.description);\r\n } else if (result != null && result.success) {\r\n showToast(ew.language.phrase(\"2FAEnabled\"), \"success\");\r\n $$1(\"#enable-2fa\").addClass(\"d-none\");\r\n $$1(\"#disable-2fa, #backup-codes\").removeClass(\"d-none\");\r\n }\r\n }).catch(err => showToast(err == null ? void 0 : err.message));\r\n } else if (result != null && (_result$error4 = result.error) != null && _result$error4.description) {\r\n _alert(result.error.description);\r\n }\r\n }).fail((jqXHR, textStatus, errorThrown) => showToast(errorThrown)).always(() => document.body.style.cursor = \"default\");\r\n } else {\r\n // Send OTP and Verify\r\n let url = getApiUrl([ew.API_2FA_ACTION, ew.API_2FA_SHOW]);\r\n let html = sameText(ew.TWO_FACTOR_AUTHENTICATION_TYPE, \"email\") ? ew.language.phrase(\"EnterOTPEmailAddress\") : ew.language.phrase(\"EnterOTPMobileNumber\");\r\n $$1.get(url, result => {\r\n var _result$error7;\r\n if (result.success) {\r\n _prompt({\r\n html: html,\r\n input: \"text\",\r\n inputValue: result.account,\r\n confirmButtonText: ew.language.phrase(\"SendOTP\"),\r\n showLoaderOnConfirm: true,\r\n allowEscapeKey: false,\r\n allowOutsideClick: () => !Swal.isLoading(),\r\n preConfirm: value => {\r\n return $$1.get(getApiUrl([ew.API_2FA_ACTION, ew.API_2FA_SEND_OTP, value])).then(result => {\r\n if ((result == null ? void 0 : result.success) !== true) throw new Error(ew.language.phrase(\"SendOTPFailed\").replace(\"%e\", getError(result)));\r\n return result;\r\n }).catch(error => Swal.showValidationMessage(error));\r\n }\r\n }, result => {\r\n var _result$error5;\r\n if (result != null && (_result$error5 = result.error) != null && _result$error5.description) {\r\n showToast(result.error.description);\r\n } else if (result != null && result.success) {\r\n // Verify OTP\r\n _prompt({\r\n html: ew.language.phrase(\"EnterSecurityCode\"),\r\n input: \"text\",\r\n confirmButtonText: ew.language.phrase(\"Verify\"),\r\n showLoaderOnConfirm: true,\r\n allowEscapeKey: false,\r\n allowOutsideClick: () => !Swal.isLoading(),\r\n preConfirm: value => {\r\n return $$1.get(getApiUrl([ew.API_2FA_ACTION, ew.API_2FA_VERIFY, value])).then(result => {\r\n if ((result == null ? void 0 : result.success) !== true) throw new Error(ew.language.phrase(\"2FAVerificationFailed\"));\r\n return result;\r\n }).catch(error => Swal.showValidationMessage(error));\r\n }\r\n }, result => {\r\n var _result$error6;\r\n if (result != null && (_result$error6 = result.error) != null && _result$error6.description) {\r\n showToast(result.error.description);\r\n } else if (result != null && result.success) {\r\n showToast(ew.language.phrase(\"2FAEnabled\"), \"success\");\r\n $$1(\"#enable-2fa\").addClass(\"d-none\");\r\n $$1(\"#disable-2fa, #backup-codes\").removeClass(\"d-none\");\r\n }\r\n }).catch(err => showToast(err == null ? void 0 : err.message));\r\n }\r\n }).catch(err => showToast(err == null ? void 0 : err.message));\r\n } else if (result != null && (_result$error7 = result.error) != null && _result$error7.description) {\r\n _alert(result.error.description);\r\n }\r\n }).fail((jqXHR, textStatus, errorThrown) => showToast(errorThrown)).always(() => document.body.style.cursor = \"default\");\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Show dialog for disabling two factor authentication\r\n */\r\n function disable2FA() {\r\n _prompt({\r\n html: ew.language.phrase(\"Disable2FAConfirm\"),\r\n preConfirm: value => {\r\n if (value) return $$1.get(getApiUrl([ew.API_2FA_ACTION, ew.API_2FA_RESET])).then(result => {\r\n var _result$error8;\r\n if (result != null && (_result$error8 = result.error) != null && _result$error8.description) showToast(result.error.description);else if ((result == null ? void 0 : result.success) !== true) showToast(ew.language.phrase(\"2FAResetFailed\"));\r\n return result;\r\n }).fail((jqXHR, textStatus, errorThrown) => showToast(errorThrown));\r\n }\r\n }, result => {\r\n var _result$error9;\r\n if (result != null && (_result$error9 = result.error) != null && _result$error9.description) {\r\n showToast(result.error.description);\r\n } else if (result != null && result.success) {\r\n showToast(ew.language.phrase(\"2FADisabled\"), \"success\");\r\n $$1(\"#enable-2fa\").removeClass(\"d-none\");\r\n $$1(\"#disable-2fa, #backup-codes\").addClass(\"d-none\");\r\n }\r\n }).catch(err => showToast(err == null ? void 0 : err.message));\r\n }\r\n\r\n /**\r\n * Toggle chat\r\n */\r\n function toggleChat(value) {\r\n document.body.style.cursor = \"wait\";\r\n $$1.get(getApiUrl([ew.API_CHAT_ACTION, value]), result => {\r\n var _result$error10;\r\n // value should be 1 or 0\r\n if (result != null && (_result$error10 = result.error) != null && _result$error10.description) {\r\n _alert(result.error.description);\r\n } else if (result != null && result.success) {\r\n $$1(\"#disable-chat\").toggleClass(\"d-none\", !value);\r\n $$1(\"#enable-chat\").toggleClass(\"d-none\", !!value);\r\n $$1(\".chat-wrapper\")[value ? \"fadeIn\" : \"fadeOut\"]();\r\n }\r\n }).fail((jqXHR, textStatus, errorThrown) => _alert(errorThrown)).always(() => document.body.style.cursor = \"default\");\r\n }\r\n\r\n /**\r\n * Show dialog for sending one time password\r\n */\r\n function sendOTP(account) {\r\n _prompt({\r\n html: ew.language.phrase(\"SendOTPConfirm\"),\r\n preConfirm: value => {\r\n let url = account ? getApiUrl([ew.API_2FA_ACTION, ew.API_2FA_SEND_OTP, account]) : getApiUrl([ew.API_2FA_ACTION, ew.API_2FA_SEND_OTP]);\r\n if (value) return $$1.get(url).then(result => {\r\n var _result$error11;\r\n if (result != null && (_result$error11 = result.error) != null && _result$error11.description) showToast(result.error.description);else if ((result == null ? void 0 : result.success) !== true) showToast(ew.language.phrase(\"SendOTPFailed\"));\r\n return result;\r\n }).fail((jqXHR, textStatus, errorThrown) => showToast(errorThrown));\r\n }\r\n }, result => {\r\n var _result$error12;\r\n if (result != null && (_result$error12 = result.error) != null && _result$error12.description) {\r\n showToast(result.error.description);\r\n } else if (result != null && result.success) {\r\n showToast(ew.language.phrase(\"SendOTPSuccess\"), \"success\");\r\n }\r\n }).catch(err => showToast(err == null ? void 0 : err.message));\r\n }\r\n\r\n /**\r\n * Show backup codes for two factor authentication\r\n */\r\n function showBackupCodes() {\r\n let html = \"<p>\" + ew.language.phrase(\"BackupCodesMsg\") + \"</p>\";\r\n return _alert({\r\n title: ew.language.phrase(\"BackupCodes\"),\r\n html: html,\r\n showDenyButton: true,\r\n showLoaderOnDeny: true,\r\n showCancelButton: true,\r\n confirmButtonText: ew.language.phrase(\"CopyToClipboard\"),\r\n denyButtonText: ew.language.phrase(\"GetNewCodes\"),\r\n customClass: {\r\n denyButton: \"btn btn-primary ew-swal2-deny-button\"\r\n },\r\n willOpen: () => {\r\n Swal.showLoading();\r\n Swal.disableButtons();\r\n $$1.get(getApiUrl([ew.API_2FA_ACTION, ew.API_2FA_BACKUP_CODES])).then(result => {\r\n if (result.success && Array.isArray(result.codes)) {\r\n Swal.update({\r\n html: html + \"<textarea class=\\\"form-control ew-backup-codes\\\" readonly>\" + result.codes.join(\"\\n\") + \"</textarea>\"\r\n });\r\n Swal.enableButtons();\r\n Swal.getConfirmButton().focus();\r\n }\r\n }).fail((jqXHR, textStatus, errorThrown) => showToast(errorThrown)).always(() => Swal.hideLoading());\r\n },\r\n preConfirm: () => {\r\n let codes = copyToClipboard(Swal.getHtmlContainer().querySelector(\"textarea\"));\r\n if (codes) showToast(ew.language.phrase(\"CopiedToClipboard\"), \"success\");\r\n return false; // Keep the alert open\r\n },\r\n preDeny: async () => {\r\n Swal.showLoading(Swal.getDenyButton());\r\n await $$1.get(getApiUrl([ew.API_2FA_ACTION, ew.API_2FA_NEW_BACKUP_CODES])).then(result => {\r\n if (result.success && Array.isArray(result.codes)) {\r\n Swal.update({\r\n html: html + \"<textarea class=\\\"form-control ew-backup-codes\\\" readonly>\" + result.codes.join(\"\\n\") + \"</textarea>\"\r\n });\r\n Swal.getConfirmButton().focus();\r\n }\r\n }).fail((jqXHR, textStatus, errorThrown) => showToast(errorThrown)).always(() => Swal.hideLoading());\r\n return false; // Keep the alert open\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Show Add Option dialog\r\n *\r\n * @param {Object} args - Arguments\r\n * @param {MouseEvent} args.evt - Event\r\n * @param {HTMLElement} args.lnk - Add option anchor element\r\n * @param {string} args.el - Form element name\r\n * @param {string} args.url - URL of the Add form\r\n * @returns\r\n */\r\n function addOptionDialogShow(args) {\r\n var _args$evt2;\r\n args.lnk = args.lnk || ((_args$evt2 = args.evt) == null ? void 0 : _args$evt2.currentTarget);\r\n\r\n // Hide dialog\r\n var _hide = function () {\r\n removeScript($dlg.data(\"args\").el);\r\n var frm = $dlg.removeData(\"args\").find(\".modal-body form\").data(\"form\");\r\n if (frm) frm.destroyEditor();\r\n $dlg.find(\".modal-body\").html(\"\");\r\n $dlg.find(\".modal-footer .btn-primary\").off();\r\n $dlg.data(\"showing\", false);\r\n };\r\n var $dlg = ew.addOptionDialog || $$1(\"#ew-add-opt-dialog\").on(\"hidden.bs.modal\", _hide);\r\n if (!$dlg[0]) {\r\n _alert(\"DIV #ew-add-opt-dialog not found.\");\r\n return;\r\n }\r\n if ($dlg.data(\"showing\")) return;\r\n $dlg.data(\"showing\", true);\r\n\r\n // Submission success\r\n var _submitSuccess = function (data) {\r\n var _results;\r\n var results = data,\r\n args = $dlg.data(\"args\"),\r\n frm = forms.get(args.lnk),\r\n // form object\r\n objName = $dlg.find(\".modal-body form input[name='\" + ew.API_OBJECT_NAME + \"']\").val(),\r\n // Get object name from form\r\n el = args.el,\r\n // HTML element name\r\n re = /^x(\\d+)_/,\r\n m = el.match(re),\r\n // Check row index\r\n prefix = m ? m[0] : \"x_\",\r\n index = m ? m[1] : -1,\r\n name = el.replace(re, \"x_\"),\r\n list = frm.getList(el);\r\n if ($$1.isString(data)) results = parseJson(data);\r\n if ((_results = results) != null && _results.success && results[objName]) {\r\n // Success\r\n $dlg.modal(\"hide\");\r\n var result = results[objName],\r\n form = frm.$element[0],\r\n // HTML form or DIV\r\n obj = getElements(el, form);\r\n if (obj) {\r\n var lf = list.linkField,\r\n dfs = list.displayFields.slice(),\r\n // Clone\r\n ffs = list.filterFields.slice(),\r\n // Clone\r\n pfs = list.parentFields.slice(); // Clone\r\n pfs.forEach((pf, i) => {\r\n if (pf.split(\" \").length == 1)\r\n // Parent field in the same table, add row index\r\n pfs[i] = pfs[i].replace(/^x_/, prefix);\r\n });\r\n var lfv = lf != \"\" ? result[lf] : \"\",\r\n row = {\r\n lf: lfv\r\n };\r\n dfs.forEach((df, i) => {\r\n if (df in result) row[\"df\" + (i > 0 ? i + 1 : \"\")] = result[df];\r\n });\r\n ffs.forEach((ff, i) => {\r\n if (ff in result) row[\"ff\" + (i > 0 ? i + 1 : \"\")] = result[ff];\r\n });\r\n if (lfv && dfs.length > 0 && row[\"df\"]) {\r\n if (list.ajax === null)\r\n // Non-Ajax\r\n list.lookupOptions.push(row);\r\n var arp = pfs.map(pf => getOptionValues(pf, form)),\r\n // Get the parent field values\r\n args = {\r\n \"data\": row,\r\n \"parents\": arp,\r\n \"valid\": true,\r\n \"name\": getId(obj),\r\n \"form\": form\r\n };\r\n $document$1.trigger(\"addoption\", [args]);\r\n if (args.valid) {\r\n // Add the new option\r\n var ar = getOptions(obj),\r\n txt = newOption(obj, row, form);\r\n if (obj.options) {\r\n obj.options[obj.options.length - 1].selected = true;\r\n if (obj.list) {\r\n // Radio/Checkbox list\r\n $$1(obj.target).find(\"input\").last().trigger(\"focus\");\r\n }\r\n if (isAutoSuggest(obj)) {\r\n $$1(obj).val(lfv).trigger(\"change\");\r\n $$1(obj.input).val(txt).trigger(\"focus\");\r\n } else {\r\n $$1(obj).trigger(\"change\").trigger(\"focus\");\r\n }\r\n }\r\n var $form = $$1(form),\r\n suffix = $form.is(\"div\") ? \"_\" + form.id : \"\",\r\n cnt = $form.find(\"#\" + ew.FORM_KEY_COUNT_NAME + suffix).val();\r\n if (cnt > 0) {\r\n // Grid-Add/Edit, update other rows\r\n for (var i = 1; i <= cnt; i++) {\r\n if (i == index) continue;\r\n var obj2 = getElements(name.replace(/^x/, \"x\" + i), form),\r\n ar2 = getOptions(obj2);\r\n if (JSON.stringify(ar) != JSON.stringify(ar2))\r\n // Not same options\r\n continue;\r\n newOption(obj2, row, form);\r\n obj2.render == null || obj2.render(); // Selection list\r\n }\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n var _results2;\r\n // Failure\r\n if ((_results2 = results) != null && _results2.error) {\r\n let error = getError(results);\r\n if (error) _alert(error);\r\n } else {\r\n var msg,\r\n $div = $$1(\"<div></div>\").html(data).find(\"div.ew-message-dialog\");\r\n if ($div[0]) {\r\n msg = $div.html();\r\n } else {\r\n var _results3;\r\n msg = ((_results3 = results) == null ? void 0 : _results3.failureMessage) || data;\r\n if (!msg || String(msg).trim() == \"\") msg = ew.language.phrase(\"InsertFailed\");\r\n }\r\n _alert(msg);\r\n }\r\n }\r\n };\r\n\r\n // Fail\r\n var _fail = function (o) {\r\n $dlg.modal(\"hide\");\r\n _alert(\"Server Error \" + o.status + \": \" + o.statusText);\r\n };\r\n\r\n // Submit\r\n var _submit = async function (e) {\r\n let $dlg = ew.addOptionDialog,\r\n form = $dlg.find(\".modal-body form\")[0],\r\n frm = forms.get(form.id),\r\n btn = e == null ? void 0 : e.target,\r\n $btn = $$1(btn);\r\n if (await frm.canSubmit(e)) {\r\n $btn.prop(\"disabled\", false).removeClass(\"disabled\");\r\n document.body.style.cursor = \"wait\";\r\n $$1.post(getApiUrl([ew.API_ADD_ACTION, form.elements[ew.API_OBJECT_NAME].value]), $$1(form).serialize(), _submitSuccess).fail(_fail).always(function () {\r\n frm.enableForm();\r\n $btn.prop(\"disabled\", false).removeClass(\"disabled\");\r\n document.body.style.cursor = \"default\";\r\n });\r\n }\r\n return false;\r\n };\r\n $dlg.modal(\"hide\");\r\n $dlg.data(\"args\", args);\r\n\r\n // Get form HTML\r\n var success = function (data) {\r\n var frm = forms.get(args.lnk),\r\n prefix = \"x_\",\r\n m = args.el.match(/^(x\\d+_)/);\r\n if (m)\r\n // Contains row index\r\n prefix = m[1];\r\n var list = frm.getList(args.el),\r\n pfs = list.parentFields.slice() // Clone\r\n .map(pf => pf.split(\" \").length == 1 ? pf.replace(/^x_/, prefix) : pf),\r\n // Parent field in the same table, add row index\r\n form = frm.htmlForm,\r\n ar = pfs.map(pf => getOptionValues(pf, form)),\r\n ar2 = pfs.map(pf => getOptionTexts(pf, form)),\r\n ffs = list.filterFieldVars.slice(); // Clone\r\n $dlg.find(\".modal-title\").html($$1(args.lnk).closest(\".ew-add-opt-btn\").data(\"title\"));\r\n $dlg.find(\".modal-body\").html(stripScript(data));\r\n var form = $dlg.find(\".modal-body form\")[0];\r\n if (form) {\r\n // Set the filter field value\r\n $$1(form).on(\"keydown\", function (e) {\r\n if (e.key == \"Enter\" && e.target.nodeName != \"TEXTAREA\") return _submit();\r\n });\r\n // $document.one(\"updatedone\", () => {\r\n // ar.forEach((v, i) => {\r\n // let obj = getElements(ffs[i], form);\r\n // if (obj) {\r\n // if (obj.options || obj.length) { // Selection list\r\n // $(obj).first().one(\"updated\", () => selectOption(obj, v));\r\n // } else {\r\n // selectOption(obj, v);\r\n // }\r\n // }\r\n // });\r\n // });\r\n }\r\n ew.addOptionDialog = $dlg.modal(\"show\");\r\n $dlg.find(\".modal-footer .btn-primary\").click(_submit).focus();\r\n if (form) {\r\n // Set the filter field value\r\n ar.forEach((v, i) => {\r\n var obj = getElements(ffs[i], form);\r\n if (obj && v[0]) {\r\n if (isAutoSuggest(obj)) {\r\n // AutoSuggest\r\n obj.value = v[0];\r\n obj.input.value = ar2[i][0];\r\n obj.add(v[0], ar2[i][0], true);\r\n } else if (obj.options || obj.length) {\r\n // Selection list\r\n newOption(obj, {\r\n lf: v[0]\r\n }, frm, true);\r\n // $(obj).first().one(\"updated\", () => selectOption(obj, v));\r\n } else {\r\n // Text\r\n obj.value = v[0];\r\n }\r\n }\r\n });\r\n }\r\n executeScript(data, args.el, true);\r\n $dlg.trigger(\"load.ew\"); // Trigger load event\r\n };\r\n $$1.get(args.url, success).fail(_fail);\r\n return false;\r\n }\r\n\r\n // Hide Modal dialog\r\n function modalDialogHide() {\r\n let $dlg = $$1(this),\r\n args = $dlg.data(\"args\"),\r\n frm = $dlg.removeData(\"args\").find(\".modal-body form\").data(\"form\");\r\n removeScript(\"modal_dialog\");\r\n frm == null || frm.destroyEditor();\r\n $dlg.find(\".modal-footer .btn-primary\").off();\r\n $dlg.find(\".modal-dialog\").removeClass((i, className) => {\r\n let m = className.match(/table\\-\\w+/);\r\n return m ? m[0] : \"\";\r\n });\r\n $dlg.data({\r\n showing: false,\r\n url: null\r\n });\r\n if (args != null && args.reload) window.location.reload();\r\n }\r\n\r\n /**\r\n * Show modal dialog\r\n *\r\n * @param {Object} args - Arguments\r\n * @param {MouseEvent} args.evt - Event\r\n * @param {HTMLFormElement} args.f - Form of List page\r\n * @param {HTMLElement} args.lnk - Anchor element\r\n * @param {string} args.url - URL of content\r\n * @param {string} args.html - HTML content\r\n * @param {string|null} args.btn - Button phrase ID\r\n * @param {boolean} args.footer - Show footer (default true)\r\n * @param {string} args.caption - Caption in dialog header\r\n * @param {boolean} args.reload - Reload page after hiding dialog or not\r\n * @param {string} args.size - Class name of modal dialog 'modal-sm'|'modal-md'|modal-lg'|'modal-xl' (default)\r\n * @param {Function} args.callback - Callback function (success function after submitting the form)\r\n * @returns false\r\n */\r\n function modalDialogShow(args) {\r\n var _args$evt3, _bootstrap$Tooltip$ge4, _args$evt4, _args$evt5, _$dlg$data, _$dlg$data2;\r\n args.lnk || (args.lnk = (_args$evt3 = args.evt) == null ? void 0 : _args$evt3.currentTarget);\r\n (_bootstrap$Tooltip$ge4 = bootstrap.Tooltip.getInstance(args.lnk)) == null || _bootstrap$Tooltip$ge4.hide();\r\n let {\r\n ewAction,\r\n action\r\n } = args,\r\n f = args.f || ((_args$evt4 = args.evt) == null || (_args$evt4 = _args$evt4.currentTarget) == null ? void 0 : _args$evt4.form);\r\n if ((ewAction == \"grid\" && action == \"edit\" || ewAction == \"modal\" && [\"multiedit\", \"update\"].includes(action)) && !keySelected(f)) {\r\n // Grid-Edit and Multi-Edit/Update\r\n _alert(ew.language.phrase(\"NoRecordSelected\"));\r\n return false;\r\n }\r\n let url = args.url || ((_args$evt5 = args.evt) == null || (_args$evt5 = _args$evt5.currentTarget) == null ? void 0 : _args$evt5.dataset.url),\r\n $dlg = ew.modalDialog || $$1(\"#ew-modal-dialog\").on(\"hidden.bs.modal\", modalDialogHide); // div#ew-modal-dialog always exists\r\n\r\n $dlg.on(\"hidden.bs.modal\", () => $dlg.data(\"showing\", false));\r\n if ($dlg.data(\"showing\") && url && $dlg.data(\"url\") == url) return false;\r\n $dlg.data({\r\n showing: true,\r\n url: url\r\n });\r\n args.reload = false;\r\n\r\n // Size\r\n $dlg.find(\".modal-dialog\").removeClass(\"modal-sm modal-md modal-lg modal-xl\").addClass(args.size || \"modal-xl\");\r\n\r\n // Caption\r\n let _caption = function () {\r\n let args = $dlg.data(\"args\"),\r\n $lnk = $$1(args.lnk);\r\n return args.caption || $lnk.data(\"caption\") || $lnk.data(\"original-title\") || \"\";\r\n };\r\n\r\n // Button text\r\n let _button = function () {\r\n let args = $dlg.data(\"args\");\r\n if (args.btn === null) return \"\";else if (args.btn && args.btn != \"\") return ew.language.phrase(args.btn);\r\n return _caption();\r\n };\r\n\r\n // Fail\r\n let _fail = function (o) {\r\n $dlg.modal(\"hide\");\r\n if (o.status) _alert(\"Server Error \" + o.status + \": \" + o.statusText);\r\n };\r\n\r\n // Always\r\n let _always = function () {\r\n document.body.style.cursor = \"default\";\r\n };\r\n\r\n // Check if current page\r\n let _current = function (url) {\r\n let a = document.createElement(\"a\");\r\n a.href = url;\r\n return window.location.pathname.endsWith(a.pathname);\r\n };\r\n\r\n // Close hidden dialog\r\n let _hide = function () {\r\n if ($dlg.data(\"showing\") && !$dlg.hasClass(\"show\")) $dlg.data(\"showing\", false).trigger(\"hidden.bs.modal\"); // Call modalDialogHide()\r\n };\r\n\r\n /**\r\n * Handle result\r\n *\r\n * @param {Object} result - Result object\r\n * @param {string|Object} result.error - Error message or object\r\n * @param {string} result.error.message - Error message\r\n * @param {string} result.error.description - Error message\r\n * @param {string} result.failureMessage - Failure message\r\n * @param {string} result.successMessage - Success message\r\n * @param {string} result.warningMessage - Warning message\r\n * @param {string} result.message - Message\r\n * @param {string} result.url - Redirection URL\r\n * @param {string} result.modal - Redirect to result.url in current modal dialog\r\n * @param {boolean} result.view - result.url is View page => No primary button\r\n * @param {string} result.caption - Caption of modal dialog for result.url\r\n * @param {boolean} result.reload - Reload current page\r\n * @param {boolean} result.success - Result => Call callback if function\r\n */\r\n let handleResult = function (result) {\r\n let error = getError(result);\r\n if (error) {\r\n _alert(error);\r\n _hide();\r\n } else if ($$1.isString(result.warningMessage)) {\r\n _alert(result.warningMessage, \"warning\");\r\n _hide();\r\n } else if ($$1.isString(result.message)) {\r\n _alert(result.message, \"body\");\r\n _hide();\r\n } else if (result.success && !isFunction$2(args == null ? void 0 : args.callback) || $$1.isString(result.successMessage)) {\r\n var _lnk$closest, _lnk$closest2, _tabPane$parentNode;\r\n let args = $dlg.data(\"args\"); // Get data before hiding\r\n $dlg.modal(\"hide\");\r\n if (result.successMessage) showToast(result.successMessage, \"success\");\r\n let lnk = args == null ? void 0 : args.lnk,\r\n btnId = lnk == null || (_lnk$closest = lnk.closest(\".dropdown-menu[aria-labelledby]\")) == null ? void 0 : _lnk$closest.getAttribute(\"aria-labelledby\"),\r\n btn = btnId ? document.getElementById(btnId) : null,\r\n tabPane = (_lnk$closest2 = lnk == null ? void 0 : lnk.closest(\".tab-pane\")) != null ? _lnk$closest2 : btn == null ? void 0 : btn.closest(\".tab-pane\"),\r\n navItem = tabPane == null || (_tabPane$parentNode = tabPane.parentNode) == null || (_tabPane$parentNode = _tabPane$parentNode.parentNode) == null ? void 0 : _tabPane$parentNode.querySelector(\"[data-bs-toggle='tab'][data-bs-target='#\" + tabPane.id + \"']:not([tabindex])\"); // The active button does not have tabindex=\"-1\r\n $dlg.trigger(\"success.ew.modal\", [{\r\n result,\r\n tabPane,\r\n navItem\r\n }]); // Reload tab content\r\n } else if (result.reload) {\r\n $dlg.modal(\"hide\");\r\n window.location.reload();\r\n } else if ($$1.isBoolean(result.success) && isFunction$2(args == null ? void 0 : args.callback)) {\r\n // If success or failure and callback is function, call the callback\r\n $dlg.modal(\"hide\");\r\n args.callback(result);\r\n } else if (result.url) {\r\n let url = result.url;\r\n if (result.modal) {\r\n if (_current(url)) {\r\n // Return to current page\r\n if (!result.error) {\r\n $dlg.modal(\"hide\");\r\n refresh(fetch(url));\r\n }\r\n } else {\r\n // Return to other page\r\n args.reload = true;\r\n args.url = url;\r\n if (result.caption) args.caption = result.caption;\r\n args.btn = result.view ? null : \"\";\r\n $dlg.data({\r\n args,\r\n url\r\n });\r\n url = setSearchParams(url, {\r\n modal: \"1\",\r\n rnd: random()\r\n });\r\n document.body.style.cursor = \"wait\";\r\n $$1.get(url).done(success).fail(_fail).always(_always);\r\n }\r\n } else {\r\n $dlg.modal(\"hide\");\r\n window.location = sanitizeUrl(url);\r\n }\r\n }\r\n };\r\n\r\n // Create buttons\r\n let _createButtons = function () {\r\n let $footer = $dlg.find(\".modal-footer\").last().empty(),\r\n // Empty the footer (Find the last footer in case users add their own in the dialog)\r\n $btn = $dlg.find(\".card-body button[type=submit]\").first().addClass(\"ew-submit\").on(\"click\", _submit); // Find submit button found in card body\r\n if (!$btn[0]) {\r\n // No submit button found in card body\r\n $dlg.find(\".modal-body .ew-modal-buttons\").contents().clone().find(\"button\").each(function () {\r\n // Find buttons in <template>\r\n if (this.type == \"submit\") {\r\n this.type = \"button\"; // Convert to normal button\r\n this.classList.add(\"ew-submit\");\r\n if (this.id == \"btn-cancel\") this.classList.add(\"ew-cancel\"); // Cancel button with type=\"submit\"\r\n let $this = $$1(this);\r\n $this.on(\"click\", function (e) {\r\n if (this.dataset.ewAction == \"set-action\")\r\n // Set value first\r\n this.form.elements[\"action\"].value = this.dataset.value;\r\n $this.data(\"ajax\") === false ? $$1(this.form).trigger(\"submit\") : _submit(e);\r\n });\r\n } else if (this.id == \"btn-cancel\") {\r\n if (this.dataset.href) {\r\n $$1(this).on(\"click\", function (e) {\r\n let form = $dlg.find(\".modal-body form\")[0],\r\n frm = forms.get(form.id);\r\n frm == null || frm.updateTextArea();\r\n if (frm != null && frm.modified && ew.hasFormData(this.form)) {\r\n ew.prompt(ew.language.phrase(\"ConfirmCancel\"), result => {\r\n if (result) {\r\n if (samePath(this.dataset.href, currentUrl.pathname)) $dlg.modal(\"hide\");else redirect(this.dataset.href);\r\n }\r\n });\r\n } else {\r\n if (samePath(this.dataset.href, currentUrl.pathname)) $dlg.modal(\"hide\");else redirect(this.dataset.href);\r\n }\r\n });\r\n } else {\r\n $$1(this).on(\"click\", () => $dlg.modal(\"hide\"));\r\n }\r\n }\r\n $footer[0].appendChild(this);\r\n }); // Clone buttons and append to footer\r\n if (!$dlg.find(\".card-body button[type=submit], .modal-footer .btn\")[0]) {\r\n // No buttons found\r\n let btn = _button();\r\n if (btn) {\r\n $$1('<button type=\"button\" class=\"btn btn-primary ew-btn\">' + btn + '</button>').on(\"click\", _submit).appendTo($footer);\r\n $footer.append('<button type=\"button\" class=\"btn btn-default ew-btn\" data-bs-dismiss=\"modal\">' + ew.language.phrase(\"CancelBtn\") + '</button>');\r\n } else {\r\n $footer.append('<button type=\"button\" class=\"btn btn-default ew-btn\" data-bs-dismiss=\"modal\">' + ew.language.phrase(\"CloseBtn\") + '</button>');\r\n }\r\n }\r\n $footer.find(\"button\").on(\"mousedown\", e => e.preventDefault()); // Do not focus button by mouse down\r\n $footer.find(\".btn-primary\").focus();\r\n }\r\n };\r\n\r\n // Check return URL\r\n let _return = response => {\r\n let returnUrl = response.headers.get(\"Return-Url\"); // Check if return URL exists\r\n if (returnUrl && args.table && [\"inline\", \"modal\"].includes(args.ewAction) && !samePath(parseUrl(returnUrl).pathname, currentUrl.pathname)) $$1(\".ew-grid.\" + args.table).find(\"[data-ew-action=modal][data-url='\" + returnUrl + \"'], [data-ew-action=inline][data-url='\" + returnUrl + \"']\").trigger(\"click\");\r\n };\r\n\r\n // Submit success\r\n let _submitSuccess = async function (response) {\r\n let args = $dlg.data(\"args\"); // Get arguments first or it will be removed by modalDialogHide()\r\n if (!(response instanceof Response)) return;\r\n let ct = response.headers.get(\"Content-Type\");\r\n if (ct != null && ct.includes(\"json\")) {\r\n let result = await response.json();\r\n if (isFunction$2(args == null ? void 0 : args.callback)) {\r\n // If callback is function, call the callback function then return\r\n let error = getError(result);\r\n if (error) showToast(error);else $dlg.modal(\"hide\");\r\n args.callback(result);\r\n return;\r\n }\r\n handleResult(result);\r\n } else {\r\n let data = await response.clone().text(),\r\n body = getContent(data).trim(); // Make sure no leading/trailing space\r\n if (body.startsWith(\"<\") && body.endsWith(\">\")) {\r\n // HTML\r\n if (args.ajax && args.action == \"add\" && document.querySelector(\"main.ew-no-record\") && $$1(body).find(\"main:not(.ew-no-record)\")[0]) {\r\n // No existing record, new record added\r\n $dlg.modal(\"hide\");\r\n await refresh(Promise.resolve(response));\r\n _return(response);\r\n return;\r\n }\r\n $dlg.find(\".modal-body\").html(body);\r\n $dlg.find(\".modal-body .ew-infinite-scroll-grid .ew-grid-middle-panel\").css(\"height\", \"auto\"); // Do not use infinite scrolling height for Grid-Add/Edit\r\n // If callback is function and no modal buttons, call the callback function then return\r\n if (!$dlg.find(\".modal-body .ew-modal-buttons\").length && isFunction$2(args == null ? void 0 : args.callback)) {\r\n $dlg.modal(\"hide\");\r\n args.callback(response);\r\n return;\r\n }\r\n _createButtons();\r\n executeScript(data, \"modal_dialog\", true);\r\n $dlg.trigger(\"load.ew\"); // Trigger load event\r\n } else if (data) {\r\n $dlg.modal(\"hide\");\r\n _alert(data);\r\n }\r\n }\r\n };\r\n\r\n // Submit\r\n let _submit = async function (e) {\r\n let form = $dlg.find(\".modal-body form\")[0],\r\n $form = $$1(form),\r\n frm = forms.get(form.id),\r\n btn = e == null ? void 0 : e.target;\r\n if (btn.classList.contains(\"disabled\")) return false;\r\n if (btn.classList.contains(\"ew-cancel\")) {\r\n // Cancel button with type=\"submit\"\r\n $$1.post($form.attr(\"action\"), $form.serialize(), success).fail(_fail).always(_always);\r\n } else if (await frm.canSubmit(e)) {\r\n document.body.style.cursor = \"wait\";\r\n let p = _fetch($form.attr(\"action\"), {\r\n method: \"POST\",\r\n body: $form.serialize()\r\n }).catch(_fail).finally(() => {\r\n frm.enableForm();\r\n _always();\r\n });\r\n if (frm.submitWithFetch) {\r\n p.then(async response => {\r\n var _resp$headers$get;\r\n // Check error before refresh\r\n let resp = response.clone(),\r\n isJson = (_resp$headers$get = resp.headers.get(\"Content-Type\")) == null ? void 0 : _resp$headers$get.includes(\"json\"),\r\n result = isJson ? await resp.json() : null,\r\n hasErrors = (result == null ? void 0 : result.validation) || getError(result);\r\n if (!isJson || !hasErrors)\r\n // HTML or JSON without error => close dialog\r\n $dlg.modal(\"hide\");\r\n let args = {\r\n form,\r\n result: Promise.resolve(response),\r\n context: hasErrors ? \"#ew-modal-dialog.show .modal-body\" : null\r\n },\r\n evt = $$1.Event(\"aftersubmit\", {\r\n originalEvent: e\r\n });\r\n frm.trigger(evt, [args]);\r\n });\r\n } else {\r\n p.then(_submitSuccess);\r\n }\r\n }\r\n return false;\r\n };\r\n let success = function (data) {\r\n let result = parseJson(data);\r\n if ($$1.isObject(result)) {\r\n handleResult(result);\r\n } else {\r\n let args = $dlg.data(\"args\"),\r\n $lnk = $$1(args.lnk),\r\n body = getContent(data);\r\n $dlg.find(\".modal-title\").html(_caption());\r\n $dlg.find(\".modal-body\").html(body);\r\n $dlg.find(\".modal-body .ew-infinite-scroll-grid .ew-grid-middle-panel\").css(\"height\", \"auto\"); // Do not use infinite scrolling height for Grid-Add/Edit\r\n _createButtons();\r\n $dlg.find(\".modal-footer\").toggle(args.footer !== false);\r\n let lnkData = $lnk.data() || {};\r\n if (lnkData.table) $dlg.find(\".modal-dialog\").addClass(\"table-\" + lnkData.table);\r\n $dlg.find(\".modal-body form\").on(\"keydown\", e => {\r\n if (e.key == \"Enter\" && e.target.nodeName != \"TEXTAREA\") {\r\n $dlg.find(\".modal-footer .btn.btn-primary\").trigger(\"click\");\r\n return false;\r\n }\r\n });\r\n if (lnkData.ajax && lnkData.table && lnkData.action == \"view\") {\r\n // Modal View page and use Ajax actions\r\n [\".ew-add\", \".ew-copy\", \".ew-edit\", \".ew-delete\"].forEach(className => {\r\n let $dlglnk = $dlg.find(\".modal-body \" + className + \"[data-ew-action=modal]\"),\r\n // Link inside modal dialog\r\n $lnk = $$1(\"[data-ew-action=modal][data-table='\" + lnkData.table + \"'][data-url='\" + $dlglnk.data(\"url\") + \"']\").not(\".modal-body *\").first(); // Link outside modal dialog\r\n $lnk[0] ? $dlglnk.on(\"click\", e => {\r\n e.preventDefault();\r\n e.stopImmediatePropagation();\r\n $lnk.trigger(\"click\"); // Click the link outside\r\n }) : $dlglnk.addClass(\"d-none\"); // Hide the link\r\n });\r\n }\r\n ew.modalDialog = $dlg.modal(\"show\");\r\n executeScript(data, \"modal_dialog\", true);\r\n // Fix for CKEditor\r\n let modal = bootstrap.Modal.getInstance($dlg[0]);\r\n if (!modal._focustrap.__handleFocusin) {\r\n modal._focustrap.__handleFocusin = modal._focustrap._handleFocusin;\r\n modal._focustrap._handleFocusin = function (e) {\r\n var _e$target10;\r\n // Use function for \"this\"\r\n if ((_e$target10 = e.target) != null && _e$target10.matches(\"[class^=cke_dialog_]\"))\r\n // Element from CKEditor dialog\r\n return; // Do not focus the modal\r\n this.__handleFocusin(e);\r\n };\r\n }\r\n $dlg.trigger(\"load.ew\"); // Trigger load event\r\n }\r\n };\r\n let show = function (html) {\r\n let args = $dlg.data(\"args\");\r\n $dlg.find(\".modal-title\").html(_caption());\r\n $dlg.find(\".modal-body\").html(html);\r\n _createButtons();\r\n $dlg.find(\".modal-footer\").toggle(args.footer !== false);\r\n ew.modalDialog = $dlg.modal(\"show\");\r\n };\r\n\r\n // Restore previous callback\r\n if (args.callback === true && (_$dlg$data = $dlg.data(\"args\")) != null && _$dlg$data.callback) args.callback = $dlg.data(\"args\").callback;\r\n if (url && (_$dlg$data2 = $dlg.data(\"args\")) != null && _$dlg$data2.reload) {\r\n // About to load URL but previous result required reload\r\n args.reload = true; // Carry the reload state to current args\r\n $dlg.data(\"args\").reload = false; // Remove reload so \"hidden\" event will not reload\r\n }\r\n $dlg.modal(\"hide\");\r\n $dlg.data(\"args\", args);\r\n if (url) {\r\n document.body.style.cursor = \"wait\";\r\n let params = ew.getSearchParams(url);\r\n params.set(\"rnd\", random());\r\n if (params.get(\"action\") != \"delete\") params.set(\"modal\", \"1\");\r\n $$1.ajax({\r\n url: setSearchParams(url, params),\r\n method: f ? \"POST\" : \"GET\",\r\n data: f ? $$1(f).serialize() : \"\",\r\n headers: args.json ? {\r\n Accept: \"application/json, */*; q=0.01\"\r\n } : {} // JSON response\r\n }).done(success).fail(_fail).always(_always);\r\n } else if (args.html) {\r\n show(args.html);\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Show dialog for import\r\n *\r\n * @param {Object} args - Arguments\r\n * @param {string} args.hdr - Dialog header\r\n * @param {HTMLElement} args.lnk - Anchor element\r\n * @returns\r\n */\r\n function importDialogShow(args) {\r\n var _args$evt6, _bootstrap$Tooltip$ge5;\r\n args.lnk = args.lnk || ((_args$evt6 = args.evt) == null ? void 0 : _args$evt6.currentTarget);\r\n (_bootstrap$Tooltip$ge5 = bootstrap.Tooltip.getInstance(args.lnk)) == null || _bootstrap$Tooltip$ge5.hide();\r\n let $dlg = ew.importDialog || $$1(\"#ew-import-dialog\");\r\n if (!$dlg[0]) {\r\n _alert(\"DIV #ew-import-dialog not found.\");\r\n return false;\r\n }\r\n let $input = $dlg.find(\"#importfiles\"),\r\n $dropzone = $input.closest(\".ew-file-drop-zone\"),\r\n $bd = $dlg.find(\".modal-body\"),\r\n $data = $bd.find(\":input[id!=importfiles]\"),\r\n $message = $bd.find(\".message\"),\r\n $progress = $bd.find(\".progress\"),\r\n table,\r\n sse;\r\n\r\n // Add row to table\r\n let addRow = function (result) {\r\n let {\r\n row,\r\n success,\r\n error,\r\n count\r\n } = result,\r\n callback = () => {\r\n table.addRow(row).then(r => r.getElement().classList.toggle(\"text-danger\", error));\r\n if (error) console.log(ew.language.phrase(\"ImportRowError\").replace(\"%i\", count + \" \" + JSON.stringify(row)).replace(\"%e\", error));\r\n };\r\n row = {\r\n \"_index\": count,\r\n \"_success\": success,\r\n \"_error\": error,\r\n ...row\r\n };\r\n if (!table) {\r\n table = new Tabulator(\"#ew-import-dialog .result\", $$1.extend({\r\n data: [row],\r\n index: \"_index\",\r\n autoColumns: true,\r\n autoColumnsDefinitions: definitions => {\r\n definitions.forEach(column => {\r\n column.headerSort = false;\r\n column.resizable = false;\r\n if ([\"_index\", \"_error\"].includes(column.field)) {\r\n column.visible = false;\r\n } else if (column.field == \"_success\") {\r\n column.title = \"#\";\r\n column.headerSort = true;\r\n column.headerSortTristate = true;\r\n column.formatter = cell => {\r\n cell.getElement().style.textOverflow = \"clip\";\r\n let row = cell.getRow(),\r\n data = row.getData();\r\n if (data._error) new bootstrap.Tooltip(row.getElement(), {\r\n placement: \"bottom\",\r\n title: data._error,\r\n container: \"#ew-import-dialog .result\"\r\n });\r\n return (data._success ? '<i class=\"fa-solid fa-check text-success\"></i>' : '<i class=\"fa-solid fa-xmark text-danger\"></i>') + \" #\" + data._index;\r\n };\r\n }\r\n });\r\n return definitions;\r\n }\r\n }, ew.importTabulatorOptions));\r\n table.on(\"tableBuilt\", () => table.element.querySelector(\".tabulator-row\").classList.toggle(\"text-danger\", error));\r\n } else {\r\n table.initialized ? callback() : table.on(\"tableBuilt\", callback);\r\n }\r\n };\r\n\r\n // Enable buttons\r\n let enableButtons = enabled => $dlg.find(\".modal-footer .btn\").prop(\"disabled\", !enabled);\r\n\r\n // Show message\r\n let showMessage = function (msg, classname) {\r\n let $msg = $$1(\"<div>\" + msg + \"</div>\");\r\n if (classname) $msg.addClass(classname);\r\n $message.removeClass(\"d-none\").html($msg);\r\n if (classname == \"text-danger\") enableButtons(true);\r\n };\r\n\r\n // Hide message\r\n let hideMessage = () => $message.addClass(\"d-none\").html(\"\");\r\n\r\n // Show progress\r\n let showProgress = (pc, classname) => $progress.removeClass(\"d-none\").find(\".progress-bar\").removeClass(\"text-bg-success text-bg-info\").addClass(classname || \"text-bg-success\").attr(\"aria-valuenow\", pc).css(\"width\", pc + \"%\").html(pc + \"%\");\r\n\r\n // Hide progress\r\n let hideProgress = () => $progress.addClass(\"d-none\").find(\".progress-bar\").attr(\"aria-valuenow\", 0).css(\"width\", \"0%\").html(\"0%\");\r\n\r\n // Upload progress\r\n let uploadProgress = function (data) {\r\n const pc = parseInt(100 * data.loaded / data.total, 10);\r\n showProgress(pc, \"text-bg-primary\");\r\n if (pc === 100) showMessage(ew.language.phrase(\"ImportUploadComplete\"), \"text-primary\");else showMessage(ew.language.phrase(\"ImportUploadProgress\").replace(\"%p\", pc), \"text-primary\");\r\n };\r\n\r\n // Update import progress\r\n let updateProgress = function (e) {\r\n const result = parseJson(e.data) || {};\r\n try {\r\n let tcnt = result.totalCount || 0,\r\n cnt = result.count || 0,\r\n scnt = result.successCount || 0,\r\n fcnt = result.failCount || 0,\r\n filename = result.file;\r\n if (tcnt > 0 && $dlg.find(\".modal-footer .ew-close-btn\").data(\"import-progress\")) {\r\n // Show progress\r\n if (result.row) addRow(result);\r\n let pc = parseInt(100 * cnt / tcnt, 10);\r\n showProgress(pc);\r\n showMessage(ew.language.phrase(\"ImportResult\").replace(\"%t\", tcnt).replace(\"%c\", cnt).replace(\"%f\", filename).replace(\"%s\", scnt).replace(\"%e\", fcnt), fcnt > 0 ? \"text-danger\" : \"text-primary\");\r\n }\r\n } catch (e) {}\r\n };\r\n\r\n // Import complete\r\n let importComplete = function (e) {\r\n var _sse;\r\n let msg = [],\r\n result = parseJson(e.data) || {},\r\n fileResults = result.files;\r\n showProgress(100);\r\n $dlg.find(\".modal-footer .ew-close-btn\").data(\"import-progress\", false); // Stop import progress\r\n if (Array.isArray(fileResults)) {\r\n fileResults.forEach(fileResult => {\r\n let tcnt = fileResult.totalCount || 0,\r\n cnt = fileResult.count || 0,\r\n scnt = fileResult.successCount || 0,\r\n fcnt = fileResult.failCount || 0;\r\n msg.push(ew.language.phrase(\"ImportResult\").replace(\"%t\", tcnt).replace(\"%c\", cnt).replace(\"%f\", fileResult.file).replace(\"%s\", scnt).replace(\"%e\", fcnt));\r\n });\r\n }\r\n if (result.success) {\r\n if (result.rollbacked) msg.push(ew.language.phrase(\"ImportSave\"));\r\n showMessage(msg.join(\"<br>\"), \"text-success\");\r\n $dlg.find(\".modal-footer .ew-close-btn\").data(\"imported\", true);\r\n } else {\r\n if (ew.IMPORT_MAX_FAILURES > 0 && result.failCount >= ew.IMPORT_MAX_FAILURES) msg.push(ew.language.phrase(\"ImportMaxFailuresExceeded\").replace(\"%s\", ew.IMPORT_MAX_FAILURES));\r\n showMessage(msg.join(\"<br>\"), \"text-danger\"); // Show error message\r\n }\r\n // hideProgress();\r\n document.body.style.cursor = \"default\";\r\n $dlg.find(\".modal-footer .ew-close-btn\").prop(\"disabled\", false); // Enable the close button\r\n let $btn = $dlg.find(\".modal-footer .ew-import-btn\").toggleClass(\"d-none\", !result.rollbacked || !result.success); // Show/Hide the import button\r\n if (result.rollbacked) $btn.off(\"click\").one(\"click\", saveImport);\r\n console.log(\"Closing EventSource...\");\r\n (_sse = sse) == null || _sse.close();\r\n };\r\n\r\n // Import fail\r\n let importFail = function (e) {\r\n var _sse2;\r\n document.body.style.cursor = \"default\";\r\n $dlg.find(\".modal-footer .ew-close-btn\").data(\"import-progress\", false); // Stop import progress\r\n let result = parseJson(e.data) || {};\r\n if (result.error) showMessage(result.error, \"text-danger\");\r\n console.log(\"Closing EventSource...\");\r\n (_sse2 = sse) == null || _sse2.close();\r\n };\r\n\r\n // Import file\r\n let importFiles = function (filetoken) {\r\n var _table;\r\n document.body.style.cursor = \"wait\";\r\n showProgress(0);\r\n (_table = table) == null || _table.clearData();\r\n $input.data(ew.API_FILE_TOKEN_NAME, filetoken);\r\n $dlg.find(\".modal-footer .ew-close-btn\").data(\"import-progress\", true); // Show import progress\r\n let params = new URLSearchParams($data.serialize());\r\n params.set(ew.API_ACTION_NAME, ew.API_IMPORT_ACTION);\r\n params.set(ew.API_FILE_TOKEN_NAME, filetoken);\r\n params.set(\"rollback\", \"1\");\r\n sse = new EventSource(currentPage() + \"?\" + params.toString());\r\n sse.addEventListener(\"message\", updateProgress);\r\n sse.addEventListener(\"error\", importFail);\r\n sse.addEventListener(\"complete\", importComplete);\r\n };\r\n\r\n // Save import\r\n let saveImport = function (e) {\r\n var _table2;\r\n document.body.style.cursor = \"wait\";\r\n showProgress(0);\r\n (_table2 = table) == null || _table2.clearData();\r\n $dlg.find(\".modal-footer .ew-close-btn\").data(\"import-progress\", true); // Show import progress\r\n let params = new URLSearchParams($data.serialize());\r\n params.set(ew.API_ACTION_NAME, ew.API_IMPORT_ACTION);\r\n params.set(ew.API_FILE_TOKEN_NAME, $input.data(ew.API_FILE_TOKEN_NAME));\r\n params.set(\"rollback\", \"0\");\r\n sse = new EventSource(currentPage() + \"?\" + params.toString());\r\n sse.addEventListener(\"message\", updateProgress);\r\n sse.addEventListener(\"error\", importFail);\r\n sse.addEventListener(\"complete\", importComplete);\r\n };\r\n let options = ew.importUploadOptions;\r\n if (!options.acceptFileTypes) options.acceptFileTypes = new RegExp('\\\\.(' + ew.IMPORT_FILE_ALLOWED_EXTENSIONS.replace(/,/g, '|') + ')$', 'i');\r\n if (!$input.data(\"blueimpFileupload\")) {\r\n $input.fileupload(Object.assign({\r\n url: getApiUrl(ew.API_UPLOAD_ACTION),\r\n dataType: \"json\",\r\n autoUpload: true,\r\n singleFileUploads: false,\r\n dropZone: $dropzone,\r\n messages: {\r\n acceptFileTypes: ew.language.phrase(\"UploadErrorAcceptFileTypes\"),\r\n maxFileSize: ew.language.phrase(\"UploadErrorMaxFileSize\"),\r\n maxNumberOfFiles: ew.language.phrase(\"UploadErrorMaxNumberOfFiles\"),\r\n minFileSize: ew.language.phrase(\"UploadErrorMinFileSize\")\r\n },\r\n beforeSend: function (jqxhr, settings) {\r\n settings.data.set(\"session\", ew.SESSION_ID);\r\n settings.data.set(ew.TOKEN_NAME_KEY, ew.TOKEN_NAME); // Add token name for $.ajax() sent by jQuery File Upload (not by ajaxSend) // PHP\r\n settings.data.set(ew.ANTIFORGERY_TOKEN_KEY, ew.ANTIFORGERY_TOKEN); // Add antiforgery token for $.ajax() sent by jQuery File Upload (not by ajaxSend) // PHP\r\n if (ew.API_JWT_TOKEN) jqxhr.setRequestHeader(ew.API_JWT_AUTHORIZATION_HEADER, \"Bearer \" + ew.API_JWT_TOKEN);\r\n },\r\n done: function (e, data) {\r\n var _data$result;\r\n if (Array.isArray(data == null || (_data$result = data.result) == null || (_data$result = _data$result.files) == null ? void 0 : _data$result.importfiles)) {\r\n let errors = [];\r\n data.result.files.importfiles.forEach(function (file, index) {\r\n if (file.error) errors.push(ew.language.phrase(\"ImportUploadError\").replace(\"%f\", file.name).replace(\"%s\", file.error));\r\n });\r\n if (errors.length) {\r\n showMessage(errors.join(\"\\n\"), \"text-danger\"); // Show upload errors for each file\r\n } else {\r\n table = null; // Reset\r\n importFiles(data.result[ew.API_FILE_TOKEN_NAME]); // Import uploaded files\r\n }\r\n }\r\n },\r\n change: function (e, data) {\r\n hideMessage();\r\n },\r\n processfail: function (e, data) {\r\n data.files.forEach(function (file, index) {\r\n if (file.error) showMessage(ew.language.phrase(\"ImportUploadError\").replace(\"%f\", file.name).replace(\"%s\", file.error), \"text-danger\");\r\n }); // Show process errors for each file\r\n },\r\n fail: function (e, data) {\r\n showMessage(ew.language.phrase(\"ImportServerError\").replace(\"%s\", data.textStatus).replace(\"%t\", data.errorThrown), \"text-danger\");\r\n },\r\n progressall: function (e, data) {\r\n uploadProgress(data);\r\n }\r\n }, options));\r\n }\r\n $dlg.modal(\"hide\").find(\".modal-title\").html(args.hdr);\r\n $dlg.find(\".modal-footer .ew-close-btn\").off(\"click.ew\").on(\"click.ew\", function () {\r\n let $this = $$1(this);\r\n if ($this.data(\"imported\")) {\r\n $this.data(\"imported\", false);\r\n window.location.reload();\r\n }\r\n });\r\n hideMessage();\r\n ew.importDialog = $dlg.on(\"show.bs.modal\", function () {\r\n var _this$querySelector, _table3, _table4;\r\n hideProgress();\r\n (_this$querySelector = this.querySelector(\".modal-footer .ew-import-btn\")) == null || _this$querySelector.classList.add(\"d-none\");\r\n (_table3 = table) == null || _table3.element.removeAttribute(\"style\");\r\n (_table4 = table) == null || _table4.destroy();\r\n table = null;\r\n }).modal(\"show\");\r\n return false;\r\n }\r\n\r\n // Auto-fill\r\n function autoFill(el) {\r\n let f = forms.get(el).$element[0];\r\n if (!f) return;\r\n let ar = getOptionValues(el),\r\n id = getId(el),\r\n m = id.match(/^([xy])(\\d*)_/),\r\n rowindex = m ? m[2] : \"\",\r\n list = forms.get(el).getList(id),\r\n dest_array = list.autoFillTargetFields;\r\n let success = function (data) {\r\n let results = data == null ? void 0 : data.records,\r\n result = Array.isArray(results) && results.length > 0 ? results[0] : [];\r\n for (let j = 0; j < dest_array.length; j++) {\r\n let destEl = getElements(dest_array[j].replace(/^x_/, \"x\" + rowindex + \"_\"), f);\r\n if (destEl) {\r\n let val = $$1.isValue(result[\"af\" + j]) ? String(result[\"af\" + j]) : \"\",\r\n args = {\r\n results,\r\n result,\r\n data: val,\r\n form: f,\r\n name: id,\r\n target: dest_array[j],\r\n cancel: false,\r\n trigger: true\r\n };\r\n $$1(el).trigger(\"autofill\", [args]); // Fire event\r\n if (args.cancel) continue;\r\n val = args.data; // Process the value\r\n if (destEl.options) {\r\n // Selection list\r\n selectOption(destEl, val.split(\",\"));\r\n if (isAutoSuggest(destEl)) {\r\n // Auto-Suggest\r\n destEl.input.value = val;\r\n updateOptions.call(forms.get(f.id), destEl);\r\n }\r\n } else if (isHiddenTextArea(destEl)) {\r\n // HTML editor\r\n destEl.value = val;\r\n $$1(destEl).data(\"editor\").set();\r\n } else if (destEl.type == \"checkbox\") {\r\n // Boolean checkbox\r\n destEl.checked = convertToBool(val);\r\n } else {\r\n destEl.value = val;\r\n }\r\n if (args.trigger) $$1(destEl).trigger(\"change\");\r\n }\r\n }\r\n return result;\r\n };\r\n if (ar.length > 0 && ar[0] != \"\") {\r\n let data = Object.assign({\r\n page: list.page,\r\n field: list.field,\r\n ajax: \"autofill\",\r\n v0: ar[0],\r\n language: ew.LANGUAGE_ID\r\n }, getUserParams('#p_' + id, f));\r\n // Add parent field values\r\n let parentId = list.parentFields.slice(); // Clone\r\n if (rowindex != \"\") {\r\n for (let i = 0, len = parentId.length; i < len; i++) {\r\n let ar = parentId[i].split(\" \");\r\n if (ar.length == 1)\r\n // Parent field in the same table, add row index\r\n parentId[i] = parentId[i].replace(/^x_/, \"x\" + rowindex + \"_\");\r\n }\r\n }\r\n let arp = parentId.map(pid => getOptionValue(pid, f)); // Get parent field values\r\n arp.forEach((p, i) => data[\"v\" + (i + 1)] = p); // Filter by parent fields\r\n return $$1.post(getApiUrl(ew.API_LOOKUP_ACTION), data, success, \"json\");\r\n }\r\n return success();\r\n }\r\n\r\n // Set up tooltip links as popovers\r\n function tooltip(i, el) {\r\n var $this = $$1(el),\r\n $tt = $$1(\"#\" + $this.data(\"tooltip-id\")),\r\n trig = $this.data(\"trigger\") || \"hover\",\r\n dir = $this.data(\"placement\") || \"auto\";\r\n if (!$tt[0] || $tt.text().trim() == \"\" && !$tt.find(\"img[src!='']\")[0]) return;\r\n if (!bootstrap.Popover.getInstance(el)) {\r\n $this.popover({\r\n ...ew.popoverOptions,\r\n placement: dir,\r\n trigger: trig,\r\n delay: 100,\r\n container: document.getElementById(\"ew-tooltip\"),\r\n content: $tt.html()\r\n }).on(\"show.bs.popover\", function () {\r\n var wd = $this.data(\"tooltip-width\");\r\n if (wd)\r\n // Set width before show\r\n $$1(bootstrap.Popover.getInstance(this)._getTipElement()).css(\"max-width\", parseInt(wd, 10) + \"px\");\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Init search filters\r\n */\r\n function initSearchFilters(e) {\r\n var _e$target11;\r\n let el = (_e$target11 = e == null ? void 0 : e.target) != null ? _e$target11 : document,\r\n btn = el == null ? void 0 : el.querySelector(\".ew-filter-option\");\r\n if (ew.CLIENT_SEARCH_FILTER || ew.SERVER_SEARCH_FILTER && ew.IS_LOGGEDIN && !ew.IS_SYS_ADMIN && ew.CURRENT_USER_NAME != \"\") {\r\n $$1(btn).removeClass(\"d-none\").find(\".ew-btn-dropdown\").on(\"show.bs.dropdown\", function (e) {\r\n var _frm$filterList$filte, _frm$filterList;\r\n let formId = $$1(this).find(\".ew-save-filter[data-form], .ew-delete-filter[data-form]\").data(\"form\"),\r\n frm = ew.forms.get(formId),\r\n filters = ew.CLIENT_SEARCH_FILTER ? ew.parseJson(localStorage.getItem(ew.PROJECT_NAME + \"_\" + frm.id + \"_filters\") || \"[]\") || [] : (_frm$filterList$filte = frm == null || (_frm$filterList = frm.filterList) == null ? void 0 : _frm$filterList.filters) != null ? _frm$filterList$filte : [];\r\n frm.setupFilters(e, filters.filter(val => Array.isArray(val) && val.length == 2));\r\n });\r\n } else {\r\n btn == null || btn.classList.add(\"d-none\");\r\n }\r\n }\r\n\r\n /**\r\n * Show dialog for email sending\r\n *\r\n * @param {Object} args - Arguments\r\n * @param {MouseEvent} args.evt - Event\r\n * @param {string} args.hdr - Dialog header\r\n * @param {Object} args.key - Key as object\r\n * @param {boolean} args.exportSelected - Exported selected only\r\n * @param {string} args.url - URL of content (for Custom Template)\r\n * @param {string} args.exportId - Export ID (for Custom Template)\r\n * @returns false\r\n */\r\n function emailDialogShow(args) {\r\n let $dlg = ew.emailDialog || $$1(\"#ew-email-dialog\").on(\"shown.bs.modal\", e => setTimeout(() => {\r\n var _e$target$querySelect;\r\n return (_e$target$querySelect = e.target.querySelector(\".modal-body .form-control\")) == null ? void 0 : _e$target$querySelect.focus();\r\n }, 200)).on(\"click\", \".modal-footer .btn-primary\", function (e) {\r\n var _$$closest$find$data;\r\n e.preventDefault();\r\n if ((_$$closest$find$data = $$1(this).closest(\".modal\").find(\".modal-body form\").data(\"form\")) != null && _$$closest$find$data.submit()) $dlg.modal(\"hide\");\r\n });\r\n if (!$dlg[0]) {\r\n _alert(\"DIV #ew-email-dialog not found.\");\r\n return false;\r\n }\r\n let form = args.evt.currentTarget.form;\r\n if (args.exportSelected && !keySelected(form)) {\r\n _alert(ew.language.phrase(\"NoRecordSelected\"));\r\n return false;\r\n }\r\n let $f = $dlg.find(\".modal-body form\"),\r\n frm = $f.data(\"form\");\r\n if (!frm) {\r\n frm = new FormBuilder().setId($f.attr(\"id\")).addFields([[\"sender\", [ew.Validators.required(ew.language.phrase(\"Sender\")), ew.Validators.email]], [\"recipient\", [ew.Validators.required(ew.language.phrase(\"Recipient\")), ew.Validators.emails(ew.MAX_EMAIL_RECIPIENT, ew.language.phrase(\"EnterProperRecipientEmail\"))]], [\"cc\", ew.Validators.emails(ew.MAX_EMAIL_RECIPIENT, ew.language.phrase(\"EnterProperCcEmail\"))], [\"bcc\", ew.Validators.emails(ew.MAX_EMAIL_RECIPIENT, ew.language.phrase(\"EnterProperBccEmail\"))], [\"subject\", ew.Validators.required(ew.language.phrase(\"Subject\"))]]).setValidate(function () {\r\n return this.validateFields();\r\n }).setSubmit(function () {\r\n if (!this.validate()) return false;\r\n let data = mergeSearchParams($f.serialize(), args.key, getchartParams(), form && args.exportSelected ? $$1(form).find(\"input[type=checkbox][name='key_m[]']:checked\").serialize() : null); // Export selected\r\n $dlg.modal(\"hide\");\r\n args.custom // Custom Template\r\n ? _export({\r\n ...args,\r\n ...{\r\n export: \"email\",\r\n custom: true,\r\n emailForm: $f[0]\r\n }\r\n }) : exportEmail($f.find(\"#tblvar\").val(), data);\r\n return false;\r\n }).build();\r\n $f.data(\"form\", frm);\r\n }\r\n ew.emailDialog = $dlg.modal(\"hide\").find(\".modal-title\").html(args.hdr).end().modal(\"show\");\r\n return false;\r\n }\r\n\r\n // Export to email\r\n function exportEmail(tblVar, data) {\r\n let swal = window.parent.Swal; // Use window.parent.Swal in case in iframe\r\n data = mergeSearchParams(data, [[ew.TOKEN_NAME_KEY, ew.TOKEN_NAME], [ew.ANTIFORGERY_TOKEN_KEY, ew.ANTIFORGERY_TOKEN]]);\r\n return swal.fire({\r\n ...ew.sweetAlertSettings,\r\n showConfirmButton: false,\r\n html: \"<p>\" + ew.language.phrase(\"Exporting\") + \"</p>\",\r\n allowOutsideClick: false,\r\n allowEscapeKey: false,\r\n willOpen: () => {\r\n swal.showLoading();\r\n _fetch(getApiUrl([ew.API_EXPORT_ACTION, \"email\", tblVar]) + \"?rnd=\" + random(), {\r\n // Post to Export API\r\n method: \"POST\",\r\n body: data\r\n }).then(async response => {\r\n swal.hideLoading();\r\n let result = await response.json();\r\n if (result != null && result.success) {\r\n swal.update({\r\n html: \"<div class='text-success'>\" + result.message + \"</div>\"\r\n });\r\n $document$1.trigger(\"export\", [{\r\n type: \"done\",\r\n tblVar,\r\n data,\r\n result\r\n }]);\r\n } else {\r\n var _ref3;\r\n swal.update({\r\n html: (_ref3 = \"<div class='text-danger'>\" + getError(result)) != null ? _ref3 : ew.language.phrase(\"FailedToExport\") + \"</div>\"\r\n });\r\n $document$1.trigger(\"export\", [{\r\n type: \"fail\",\r\n tblVar,\r\n data,\r\n result\r\n }]);\r\n }\r\n }).catch(error => {\r\n var _ref4;\r\n swal.hideLoading();\r\n swal.update({\r\n html: (_ref4 = \"<div class='text-danger'>\" + error) != null ? _ref4 : ew.language.phrase(\"FailedToExport\") + \"</div>\"\r\n });\r\n $document$1.trigger(\"export\", [{\r\n type: \"fail\",\r\n tblVar,\r\n data,\r\n error\r\n }]);\r\n }).finally(() => {\r\n swal.update({\r\n showConfirmButton: true\r\n });\r\n $document$1.trigger(\"export\", [{\r\n type: \"always\",\r\n tblVar,\r\n data\r\n }]);\r\n });\r\n }\r\n });\r\n }\r\n\r\n // Show drill down\r\n function showDrillDown(e, obj, url, id, hdr) {\r\n if (e != null && e.ctrlKey) {\r\n let newUrl = setSearchParams(url, {\r\n d: \"2\"\r\n }); // Change \"d\" parameter to 2\r\n return redirect(newUrl);\r\n }\r\n let $obj = $$1(obj),\r\n config = $obj.data(\"config\") || {},\r\n args = {\r\n obj: $obj[0],\r\n config: {\r\n title: hdr,\r\n placement: \"bottom\",\r\n ...config\r\n },\r\n id,\r\n url\r\n };\r\n $document$1.trigger(\"drilldown\", [args]);\r\n let ar = args.url.split(\"?\");\r\n args.file = ar[0] || \"\";\r\n args.data = ar[1] || \"\";\r\n config = args.config;\r\n if (!bootstrap.Popover.getInstance(obj)) {\r\n $obj.popover({\r\n ...ew.popoverOptions,\r\n ...config,\r\n trigger: \"manual\",\r\n template: '<div class=\"popover\" role=\"tooltip\"><h3 class=\"popover-header d-none\" style=\"cursor: move;\"></h3><div class=\"popover-body\"></div></div>',\r\n // No .popover-arrow\r\n content: ew.spinnerTemplate(),\r\n container: $$1(\"#ew-drilldown-panel\").draggable(ew.draggableOptions),\r\n boundary: \"viewport\"\r\n }).on(\"show.bs.popover\", function (e) {\r\n $obj.attr(\"data-bs-original-title\", \"\");\r\n }).on(\"shown.bs.popover\", function (e) {\r\n if (!$obj.data(\"args\")) return;\r\n let data = $obj.data(\"args\").data;\r\n $$1.ajax({\r\n cache: false,\r\n dataType: \"html\",\r\n type: \"POST\",\r\n data: data,\r\n url: $obj.data(\"args\").file,\r\n success: function (data) {\r\n let $tip = $$1(bootstrap.Popover.getInstance(obj)._getTipElement());\r\n if (config.title) $tip.find(\".popover-header\").empty().removeClass(\"d-none\").append('<button type=\"button\" class=\"btn-close\" aria-label=\"' + ew.language.phrase(\"CloseBtn\") + '\"></button>' + config.title).find(\".btn-close\").on(\"click\", function () {\r\n $obj.popover(\"hide\");\r\n });\r\n let m = data.match(/<body[^>]*>([\\s\\S]*?)<\\/body\\s*>/i); // Use HTML in document body only\r\n data = m ? m[0] : data;\r\n let html = ew.stripScript(data);\r\n $tip.find(\".popover-body\").html($$1(\"<div></div>\").html(html).find(\"#ew-report\")) // Insert the container table only\r\n .find(\".ew-table\").each(ew.setupTable);\r\n ew.executeScript(data, id, true);\r\n $obj.popover(\"update\");\r\n },\r\n error: function (o) {\r\n if (o.responseText) {\r\n let popover = bootstrap.Popover.getInstance(obj);\r\n if ($$1.isString(o.responseText) && o.responseText.startsWith(\"{\") && o.responseText.endsWith(\"}\")) {\r\n var _result$error13, _result$error14;\r\n let result = parseJson(o.responseText);\r\n if (result != null && (_result$error13 = result.error) != null && _result$error13.type && result != null && (_result$error14 = result.error) != null && _result$error14.description) {\r\n popover == null || popover.hide();\r\n return _alert({\r\n title: result.error.type,\r\n html: result.error.description,\r\n customClass: {\r\n title: \"ew-swal2-title text-danger\",\r\n htmlContainer: \"ew-swal2-html-container text-danger\"\r\n }\r\n });\r\n }\r\n }\r\n popover == null || popover.setContent({\r\n \".popover-body\": '<p class=\"text-danger\">' + o.responseText + '</p>'\r\n });\r\n }\r\n }\r\n });\r\n }).on(\"hidden.bs.popover\", function (e) {\r\n ew.removeScript(id);\r\n });\r\n }\r\n $obj.data(\"args\", args).popover(\"show\");\r\n }\r\n\r\n /**\r\n * Ajax query\r\n * @param {Object} data - Object to passed to API\r\n * @param {callback} callback - Callback function for async request (see http://api.jquery.com/jQuery.post/), empty for sync request\r\n * @returns {string|string[]}\r\n */\r\n function ajax(data, callback) {\r\n if (!$$1.isObject(data) || !data.url && !data.action) return undefined;\r\n var action;\r\n if (data.url) {\r\n if (data.url.startsWith(getApiUrl())) action = data.url.replace(getApiUrl(), \"\").split(\"/\")[0];else if (data.url.startsWith(ew.API_URL)) action = data.url.replace(ew.API_URL, \"\").split(\"/\")[0];\r\n } else {\r\n action = data.action;\r\n delete data.action;\r\n }\r\n var obj = Object.assign({}, data);\r\n var _convert = response => {\r\n if ($$1.isObject(response) && response.result == \"OK\") {\r\n var results = response.records;\r\n if (Array.isArray(results) && results.length == 1) {\r\n // Single row\r\n results = results[0];\r\n if (Array.isArray(results) && results.length == 1)\r\n // Single column\r\n return results[0]; // Return a value\r\n else return results; // Return a row\r\n }\r\n return results;\r\n }\r\n return response;\r\n };\r\n var url = obj.url || getApiUrl(action),\r\n // URL\r\n type = obj.type || ([ew.API_LIST_ACTION, ew.API_VIEW_ACTION, ew.API_DELETE_ACTION].includes(action) ? \"GET\" : \"POST\");\r\n delete obj.url;\r\n delete obj.type;\r\n obj.dataType = \"json\";\r\n if (isFunction$2(callback)) {\r\n // Async\r\n $$1.ajax({\r\n url: url,\r\n type: type,\r\n data: obj,\r\n success: function (response) {\r\n callback(_convert(response));\r\n }\r\n });\r\n } else {\r\n // Sync\r\n var response = $$1.ajax({\r\n url: url,\r\n async: false,\r\n type: type,\r\n data: obj\r\n });\r\n return _convert(response.responseJSON);\r\n }\r\n }\r\n\r\n // Get URL of current page\r\n function currentPage() {\r\n return location.href.split(\"#\")[0].split(\"?\")[0];\r\n }\r\n\r\n // Toggle search operator\r\n function toggleSearchOperator(e, id, value) {\r\n var el = e.currentTarget.form.elements[id];\r\n if (!el) return;\r\n el.value = el.value != value ? value : \"=\";\r\n }\r\n\r\n // Toggle multi-column layout\r\n function toggleLayout(el) {\r\n var _bootstrap$Tooltip$ge6;\r\n (_bootstrap$Tooltip$ge6 = bootstrap.Tooltip.getInstance(el)) == null || _bootstrap$Tooltip$ge6.hide();\r\n document.body.style.cursor = \"wait\";\r\n fetch(sanitizeUrl(setLayout(el.dataset.url, el.dataset.layout))).then(response => response.text()).then(html => {\r\n let $grid = $$1(\".ew-multi-column-grid\").html($$1(\"<div>\" + html + \"</div>\").find(\".ew-multi-column-grid\").html());\r\n ew.initPage({\r\n target: $grid[0]\r\n });\r\n $grid.trigger(\"load.ew\");\r\n }).catch(error => _alert(error)).finally(() => document.body.style.cursor = \"default\");\r\n }\r\n\r\n // Copy inner text to clipboard\r\n function copyToClipboard(source) {\r\n var _source, _source2;\r\n source = $$1.isString(source) ? document.querySelector(source) : source;\r\n const str = ((_source = source) == null ? void 0 : _source.value) || ((_source2 = source) == null ? void 0 : _source2.innerText);\r\n if (str) {\r\n const el = document.createElement(\"textarea\");\r\n el.value = str;\r\n el.setAttribute(\"readonly\", \"\");\r\n el.style.position = \"absolute\";\r\n el.style.left = \"-9999px\";\r\n document.body.appendChild(el);\r\n el.select();\r\n document.execCommand(\"copy\");\r\n document.body.removeChild(el);\r\n }\r\n return str;\r\n }\r\n\r\n /**\r\n * Validators\r\n */\r\n\r\n // Check integer\r\n function checkInteger(object_value) {\r\n if (!object_value || object_value.length == 0) return true;\r\n if (object_value.includes(ew.DECIMAL_SEPARATOR)) return false;\r\n return checkNumber(object_value);\r\n }\r\n\r\n // Check number\r\n function checkNumber(object_value) {\r\n object_value = String(object_value);\r\n if (!object_value || object_value.length == 0) return true;\r\n object_value = object_value.trim();\r\n // let re = new RegExp(\"^[+\\-\\d\\s%\" + escapeRegExChars(ew.DECIMAL_SEPARATOR) + escapeRegExChars(ew.GROUPING_SEPARATOR) + ew.CURRENCY_SYMBOL + \"]+$\");\r\n // return re.test(object_value) && ew.parseNumber(object_value) !== null;\r\n return ew.parseNumber(object_value) !== null;\r\n }\r\n\r\n // Escape regular expression chars\r\n function escapeRegExChars(str) {\r\n return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\");\r\n }\r\n\r\n // Check range\r\n function checkRange(object_value, min_value, max_value) {\r\n if (!object_value || object_value.length == 0) return true;\r\n if ($$1.isNumber(min_value) || $$1.isNumber(max_value)) {\r\n // Number\r\n if (checkNumber(object_value)) object_value = ew.parseNumber(object_value);\r\n }\r\n if (min_value !== null && object_value < min_value) return false;\r\n if (max_value !== null && object_value > max_value) return false;\r\n return true;\r\n }\r\n\r\n // Check phone\r\n function checkPhone(object_value) {\r\n if (!object_value || object_value.length == 0) return true;\r\n return /^\\(\\d{3}\\) ?\\d{3}( |-)?\\d{4}|^\\d{3}( |-)?\\d{3}( |-)?\\d{4}$/.test(object_value.trim());\r\n }\r\n\r\n // Check zip\r\n function checkZip(object_value) {\r\n if (!object_value || object_value.length == 0) return true;\r\n return /^\\d{5}$|^\\d{5}-\\d{4}$/.test(object_value.trim());\r\n }\r\n\r\n // Check credit card\r\n function checkCreditCard(object_value) {\r\n if (!object_value || object_value.length == 0) return true;\r\n var creditcard_string = object_value.replace(/\\D/g, \"\");\r\n if (creditcard_string.length == 0) return false;\r\n var doubledigit = creditcard_string.length % 2 == 1 ? false : true;\r\n var tempdigit,\r\n checkdigit = 0;\r\n for (var i = 0, len = creditcard_string.length; i < len; i++) {\r\n tempdigit = parseInt(creditcard_string.charAt(i), 10);\r\n if (doubledigit) {\r\n tempdigit *= 2;\r\n checkdigit += tempdigit % 10;\r\n if (tempdigit / 10 >= 1.0) checkdigit++;\r\n doubledigit = false;\r\n } else {\r\n checkdigit += tempdigit;\r\n doubledigit = true;\r\n }\r\n }\r\n return checkdigit % 10 == 0;\r\n }\r\n\r\n // Check social security number\r\n function checkSsn(object_value) {\r\n if (!object_value || object_value.length == 0) return true;\r\n return /^(?!000)([0-6]\\d{2}|7([0-6]\\d|7[012]))([ -]?)(?!00)\\d\\d\\3(?!0000)\\d{4}$/.test(object_value.trim());\r\n }\r\n\r\n // Check emails\r\n function checkEmails(object_value, email_cnt) {\r\n if (!object_value || object_value.length == 0) return true;\r\n var arEmails = object_value.replace(/,/g, \";\").split(\";\");\r\n for (var i = 0, len = arEmails.length; i < len; i++) {\r\n if (email_cnt > 0 && len > email_cnt) return false;\r\n if (!checkEmail(arEmails[i])) return false;\r\n }\r\n return true;\r\n }\r\n\r\n // Check email\r\n function checkEmail(object_value) {\r\n if (!object_value || object_value.length == 0) return true;\r\n return /^[\\w.%+-]+@[\\w.-]+\\.[A-Z]{2,18}$/i.test(object_value.trim());\r\n }\r\n\r\n // Check GUID {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}\r\n function checkGuid(object_value) {\r\n if (!object_value || object_value.length == 0) return true;\r\n return /^(\\{\\w{8}-\\w{4}-\\w{4}-\\w{4}-\\w{12}\\}|\\w{8}-\\w{4}-\\w{4}-\\w{4}-\\w{12})$/.test(object_value.trim());\r\n }\r\n\r\n // Check URL\r\n function checkUrl(object_value) {\r\n if (!object_value || object_value.length == 0) return true;\r\n try {\r\n new URL(object_value);\r\n } catch (e) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n // Check by regular expression\r\n function checkByRegEx(object_value, pattern) {\r\n if (!object_value || object_value.length == 0) return true;\r\n return !!object_value.match(pattern);\r\n }\r\n\r\n /**\r\n * Show message dialog\r\n *\r\n * @param {Event|string} arg - Event or message\r\n * @returns\r\n */\r\n function showMessage(arg) {\r\n var _arg$target;\r\n let doc, swal;\r\n try {\r\n // Note: If a window does not have a parent, its parent property is a reference to itself.\r\n [doc, swal] = [window.parent.document, window.parent.Swal];\r\n } catch (e) {\r\n // In case window.parent.document cannot be accessed\r\n [doc, swal] = [window.document, window.Swal];\r\n }\r\n let p = (_arg$target = arg == null ? void 0 : arg.target) != null ? _arg$target : doc,\r\n $div = $$1(p).find(\"div.ew-message-dialog.d-none\").first(),\r\n msg = $div.length ? $div.text() : \"\"; // Text only\r\n if ($$1.isString(arg)) msg = $$1(\"<div>\" + arg.trim() + \"</div>\").text();\r\n if (msg.trim() == \"\") return;\r\n if ($div.length) {\r\n [\"success\", \"info\", \"warning\", \"danger\"].forEach(function (type) {\r\n let $alert = $div.find(\".alert-\" + type).toggleClass(\"alert-\" + type),\r\n $heading = $alert.find(\".alert-heading\").detach(),\r\n $content = $alert.children(\":not(.icon)\");\r\n $alert.find(\".icon\").remove();\r\n if ($alert[0]) {\r\n let w = parseInt($content.css(\"width\"), 10); // Width specified\r\n if (w > 0) $content.first().css(\"width\", \"auto\");\r\n let $toast = showToast($alert.html(), type, $heading.html());\r\n if (w > 0) $toast.css(\"max-width\", w); // Override bootstrap .toast max-width\r\n return;\r\n }\r\n });\r\n }\r\n if ($$1.isString(arg)) {\r\n return swal.fire({\r\n ...ew.sweetAlertSettings,\r\n html: arg\r\n });\r\n }\r\n }\r\n\r\n // Random number\r\n function random() {\r\n return Math.floor(Math.random() * 100001) + 100000;\r\n }\r\n\r\n // File upload\r\n function upload(input) {\r\n let $input = $$1(input);\r\n if ($input.data(\"blueimpFileupload\")) return;\r\n let id = $input.attr(\"name\"),\r\n nid = id.replace(/\\$/g, \"\\\\$\"),\r\n tbl = $input.data(\"table\"),\r\n multiple = $input.is(\"[multiple]\"),\r\n $dropzone = $input.closest(\".ew-file-drop-zone\"),\r\n $p = $input.closest(fieldContainerSelector),\r\n $ft = $p.find(\"#ft_\" + nid),\r\n $fn = $p.find(\"#fn_\" + nid),\r\n $fa = $p.find(\"#fa_\" + nid),\r\n $label = $p.find(\".ew-file-label\"),\r\n label = $label.html();\r\n let _done = function (e, data) {\r\n if (data.result.files[0].error) return;\r\n let name = data.result.files[0].name,\r\n ar = multiple ? $fn.val() ? $fn.val().split(ew.MULTIPLE_UPLOAD_SEPARATOR) : [] : [];\r\n ar.push(name);\r\n $fn.val(ar.join(ew.MULTIPLE_UPLOAD_SEPARATOR));\r\n $fa.val(\"0\");\r\n if (!multiple)\r\n // Remove other entries if not multiple upload\r\n $ft.find(\"tbody > tr:not(:last-child)\").remove();\r\n };\r\n let _deleted = function (e, data) {\r\n let url = e.originalEvent.target.dataset.url,\r\n params = getSearchParams(url),\r\n fid = params.get(\"id\"),\r\n name = params.get(fid);\r\n if (name) {\r\n let ar = $fn.val() ? $fn.val().split(ew.MULTIPLE_UPLOAD_SEPARATOR) : [],\r\n index = ar.indexOf(name);\r\n if (index > -1) ar.splice(index, 1);\r\n $fn.val(ar.join(ew.MULTIPLE_UPLOAD_SEPARATOR));\r\n $fa.val(\"0\");\r\n }\r\n };\r\n let _change = function (e, data) {\r\n var _data$files;\r\n $ft.toggleClass(\"ew-has-rows\", ((_data$files = data.files) == null ? void 0 : _data$files.length) > 0);\r\n let ar = $fn.val() ? $fn.val().split(ew.MULTIPLE_UPLOAD_SEPARATOR) : [];\r\n data.files.forEach(file => ar.push(file.name));\r\n let cnt = $input.data(\"maxNumberOfFiles\");\r\n if ($$1.isNumber(cnt) && cnt > 0 && ar.length > cnt) {\r\n _alert(ew.language.phrase(\"UploadErrorMaxNumberOfFiles\"));\r\n return false;\r\n }\r\n let l = $input.data(\"size\");\r\n if ($$1.isNumber(l) && l > 0 && ar.join(ew.MULTIPLE_UPLOAD_SEPARATOR).length > l) {\r\n _alert(ew.language.phrase(\"UploadErrorMaxFileLength\"));\r\n return false;\r\n }\r\n };\r\n let _confirmDelete = function (e) {\r\n if (!multiple && $fn.val()) {\r\n if (!confirm(ew.language.phrase(\"UploadOverwrite\"))) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n }\r\n };\r\n let _changed = function (e, data) {\r\n var _data$files2, _data$result2;\r\n $ft.toggleClass(\"ew-has-rows\", ((_data$files2 = data.files) == null ? void 0 : _data$files2.length) > 0 || ((_data$result2 = data.result) == null || (_data$result2 = _data$result2.files) == null ? void 0 : _data$result2.length) > 0);\r\n let ar = $fn.val() ? $fn.val().split(ew.MULTIPLE_UPLOAD_SEPARATOR) : [];\r\n $label.html(ar.join(\", \") || label);\r\n };\r\n let _completed = function (e, data) {\r\n // After download template rendered\r\n let evt = {\r\n target: data.context\r\n };\r\n initLightboxes(evt);\r\n initPdfObjects(evt);\r\n ew.updateDropdownPosition();\r\n data.context.find(\"img\").on(\"load\", ew.updateDropdownPosition);\r\n };\r\n let _added = function (e, data) {\r\n var _data$files3;\r\n // After upload template rendered\r\n $ft.toggleClass(\"ew-has-rows\", ((_data$files3 = data.files) == null ? void 0 : _data$files3.length) > 0);\r\n data.context.find(\".start\").click(_confirmDelete);\r\n };\r\n // let _send = function(e, data) { // Before each file upload request\r\n // console.log(data);\r\n // };\r\n let uploadUrl = getApiUrl(ew.API_JQUERY_UPLOAD_ACTION),\r\n _downloadTemplate = $$1.templates(\"#template-download\"),\r\n _uploadTemplate = $$1.templates(\"#template-upload\"),\r\n form = getForm(input),\r\n $form = $$1(form),\r\n readonly = $form.find(\"#confirm\").val() == \"confirm\" || $input.attr(\"readonly\") || $input.prop(\"disabled\");\r\n if (readonly && !$input.prop(\"disabled\")) $input.prop(\"disabled\", true); // Disable input button if readonly\r\n const {\r\n acceptFileTypes,\r\n maxFileSize,\r\n maxNumberOfFiles\r\n } = $input.data();\r\n const formData = {\r\n id: id,\r\n table: tbl,\r\n session: ew.SESSION_ID,\r\n replace: multiple ? \"0\" : \"1\",\r\n acceptFileTypes,\r\n maxFileSize,\r\n maxNumberOfFiles\r\n };\r\n $input.fileupload(ew.deepAssign({\r\n url: uploadUrl,\r\n type: \"POST\",\r\n multipart: true,\r\n autoUpload: true,\r\n loadImageFileTypes: /^image\\/(gif|jpe?g|png)$/i,\r\n loadVideoFileTypes: /^video\\/mp4$/i,\r\n loadAudioFileTypes: /^audio\\/(mpeg|mp3)$/i,\r\n filesContainer: $ft,\r\n uploadTemplateId: null,\r\n downloadTemplateId: null,\r\n uploadTemplate: _uploadTemplate.render.bind(_uploadTemplate),\r\n downloadTemplate: _downloadTemplate.render.bind(_downloadTemplate),\r\n previewMaxWidth: ew.UPLOAD_THUMBNAIL_WIDTH,\r\n previewMaxHeight: ew.UPLOAD_THUMBNAIL_HEIGHT,\r\n dropZone: $dropzone,\r\n messages: {\r\n acceptFileTypes: ew.language.phrase(\"UploadErrorAcceptFileTypes\"),\r\n maxNumberOfFiles: ew.language.phrase(\"UploadErrorMaxNumberOfFiles\"),\r\n maxFileSize: ew.language.phrase(\"UploadErrorMaxFileSize\"),\r\n minFileSize: ew.language.phrase(\"UploadErrorMinFileSize\")\r\n },\r\n formData,\r\n readonly // Custom\r\n }, ew.uploadOptions))\r\n // .on(\"fileuploadsend\", _send)\r\n .on(\"fileuploaddone\", _done).on(\"fileuploaddestroy\", _deleted).on(\"fileuploadchange\", _change).on(\"fileuploadadded fileuploadfinished fileuploaddestroyed\", _changed).on('fileuploadadded', _added).on('fileuploadcompleted', _completed);\r\n if ($fn.val()) {\r\n $$1.ajax({\r\n url: uploadUrl,\r\n data: {\r\n id: id,\r\n table: tbl,\r\n session: ew.SESSION_ID\r\n },\r\n dataType: \"json\",\r\n context: this,\r\n success: function (result) {\r\n if (result != null && result[id]) {\r\n let done = $input.fileupload(\"option\", \"done\");\r\n if (done) done.call(input, $$1.Event(), {\r\n result: {\r\n files: result[id]\r\n }\r\n }); // Use \"files\"\r\n }\r\n if (readonly)\r\n // Hide delete button if readonly\r\n $ft.find(\"td.delete\").hide();\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Convert data to number\r\n *\r\n * @param {*} data - Data being converted\r\n * @returns {number}\r\n */\r\n function parseNumber(data) {\r\n let locale = ew.getLocaleFromPlatform(ew.LANGUAGE_ID);\r\n if (ew.NUMBERING_SYSTEM == \"latn\") locale.numeralSystem = undefined;\r\n if (locale.delimiters.thousands !== ew.GROUPING_SEPARATOR) locale.delimiters.thousands = ew.GROUPING_SEPARATOR;\r\n if (locale.delimiters.decimal !== ew.DECIMAL_SEPARATOR) locale.delimiters.decimal = ew.DECIMAL_SEPARATOR;\r\n return ew.parse(data, {\r\n locale\r\n });\r\n }\r\n\r\n /**\r\n * Get numbering system\r\n */\r\n function getNumberingSystem() {\r\n return ew.NUMBERING_SYSTEM || new Intl.NumberFormat(ew.LANGUAGE_ID).resolvedOptions().numberingSystem;\r\n }\r\n let DateTime = luxon.DateTime,\r\n Interval = luxon.Interval;\r\n\r\n /**\r\n * Format data by DateTime (see https://moment.github.io/luxon/docs/class/src/datetime.js~DateTime.html)\r\n *\r\n * @param {string|Number|Date} data - Date\r\n * @param {string|Array} format - Date format (see https://moment.github.io/luxon/docs/manual/formatting.html#toformat)\r\n * @returns {string}\r\n */\r\n function formatDateTime(data, format) {\r\n let dt;\r\n if ($$1.isString(data))\r\n // SQL dates, times, and datetimes\r\n dt = DateTime.fromSQL(data, {\r\n zone: \"utc\"\r\n }); // Do not change the time zone\r\n else if ($$1.isNumber(data))\r\n // Unix timestamps\r\n dt = DateTime.fromSeconds(data, {\r\n zone: \"utc\"\r\n });else if (data instanceof Date)\r\n // JS Date Object\r\n dt = DateTime.fromJSDate(data, {\r\n zone: \"utc\"\r\n });else if (data instanceof DateTime)\r\n // DateTime Object\r\n dt = data;\r\n return dt.toFormat(format, {\r\n locale: ew.LANGUAGE_ID,\r\n numberingSystem: ew.getNumberingSystem()\r\n });\r\n }\r\n\r\n /**\r\n * Format time span\r\n *\r\n * @param {Date} start - JS start date/time\r\n * @param {Date} end - JS end date/time\r\n * @param {bool} allDay - Whether event is all day\r\n * @returns {string}\r\n */\r\n function formatTimeSpan(start, end, allDay) {\r\n let from = DateTime.fromJSDate(start, {\r\n zone: \"utc\"\r\n }),\r\n to = DateTime.fromJSDate(end, {\r\n zone: \"utc\"\r\n });\r\n if (to.isValid && to.equals(to.startOf(\"day\")))\r\n // 12:00AM\r\n to = to.minus(1); // Minus one millisecond => back to previous day\r\n let interval = new Interval({\r\n start: from,\r\n end: to\r\n });\r\n if (interval.isValid) {\r\n // Check if all day\r\n let days = interval.count() / (24 * 60 * 60 * 1000);\r\n allDay || (allDay = Number.isInteger(days) && days >= 1);\r\n }\r\n if (allDay) {\r\n // All day => Show date only\r\n if (interval.isValid && interval.count(\"days\") > 1 || from.isValid && to.isValid && from.startOf(\"day\") < to.startOf(\"day\")) return formatDateTime(from, ew.DATE_FORMAT) + \" - \" + formatDateTime(to, ew.DATE_FORMAT);else if (from.isValid && !end)\r\n // No end date\r\n return formatDateTime(from, ew.DATE_FORMAT);\r\n return \"\";\r\n } else {\r\n // Not all day => Show date/time\r\n if (from.isValid && to.isValid) return from.startOf(\"day\") < to.startOf(\"day\") ? formatDateTime(from, ew.DATE_FORMAT + \" \" + ew.TIME_FORMAT) + \" - \" + formatDateTime(to, ew.DATE_FORMAT + \" \" + ew.TIME_FORMAT) : formatDateTime(from, ew.TIME_FORMAT) + \" - \" + formatDateTime(to, ew.TIME_FORMAT);else if (from.isValid) return formatDateTime(from, ew.TIME_FORMAT);\r\n }\r\n return \"\";\r\n }\r\n\r\n /**\r\n * Parse data to DateTime (see https://moment.github.io/luxon/api-docs/index.html#datetime)\r\n *\r\n * @param {string} data - Date/Time string supported by DateTime\r\n * @param {string|Array} format - Date format (see https://moment.github.io/luxon/#/formatting?id=table-of-tokens)\r\n * @returns {DateTime}\r\n */\r\n function parseDateTime(data, format) {\r\n return DateTime.fromFormat(data, format, {\r\n locale: ew.LANGUAGE_ID,\r\n numberingSystem: ew.getNumberingSystem()\r\n });\r\n }\r\n\r\n /**\r\n * Check if data can be parsed to DateTime (see https://moment.github.io/luxon/api-docs/index.html#datetime)\r\n *\r\n * @param {string} data - Date string supported by DateTime\r\n * @param {string|Array} format - Date format (see https://moment.github.io/luxon/#/formatting?id=table-of-tokens)\r\n * @returns {boolean}\r\n */\r\n function checkDate(data, format) {\r\n if (!data || data.length == 0) return true;\r\n return parseDateTime(data, format).isValid;\r\n }\r\n\r\n // Check time (alias of checkDate)\r\n function checkTime(data, format) {\r\n if (!data || data.length == 0) return true;\r\n return parseDateTime(data, format).isValid;\r\n }\r\n\r\n /**\r\n * Format currency\r\n *\r\n * @param {number} value - Value\r\n * @param {string} format - Formatter pattern\r\n */\r\n function formatCurrency(value, format) {\r\n format || (format = ew.CURRENCY_FORMAT);\r\n if (format.includes(\";\")) {\r\n let formats = format.split(\";\");\r\n format = value >= 0 ? formats[0] : formats[1];\r\n }\r\n format = format.replace(\"¤\", \"$\");\r\n let locale = ew.getLocaleFromPlatform(ew.LANGUAGE_ID);\r\n if (ew.NUMBERING_SYSTEM == \"latn\") locale.numeralSystem = undefined;\r\n if (locale.delimiters.thousands !== ew.GROUPING_SEPARATOR) locale.delimiters.thousands = ew.GROUPING_SEPARATOR;\r\n if (locale.delimiters.decimal !== ew.DECIMAL_SEPARATOR) locale.delimiters.decimal = ew.DECIMAL_SEPARATOR;\r\n return ew.format(value, format, {\r\n locale,\r\n currency: (ew.IS_RTL ? \"\\u200E\" : \"\") + ew.CURRENCY_SYMBOL\r\n }); // Make sure the currency symbol position is not moved.\r\n }\r\n\r\n /**\r\n * Format number\r\n *\r\n * @param {number} value - Value\r\n * @param {string} format - Formatter pattern\r\n */\r\n function formatNumber(value, format) {\r\n let locale = ew.getLocaleFromPlatform(ew.LANGUAGE_ID);\r\n if (ew.NUMBERING_SYSTEM == \"latn\") locale.numeralSystem = undefined;\r\n if (locale.delimiters.thousands !== ew.GROUPING_SEPARATOR) locale.delimiters.thousands = ew.GROUPING_SEPARATOR;\r\n if (locale.delimiters.decimal !== ew.DECIMAL_SEPARATOR) locale.delimiters.decimal = ew.DECIMAL_SEPARATOR;\r\n return ew.format(value, format || ew.NUMBER_FORMAT, {\r\n locale\r\n });\r\n }\r\n\r\n /**\r\n * Format percent\r\n *\r\n * @param {number} value - Value\r\n * @param {string} format - Formatter pattern\r\n */\r\n function formatPercent(value, format) {\r\n let locale = ew.getLocaleFromPlatform(ew.LANGUAGE_ID);\r\n if (ew.NUMBERING_SYSTEM == \"latn\") locale.numeralSystem = undefined;\r\n if (locale.delimiters.thousands !== ew.GROUPING_SEPARATOR) locale.delimiters.thousands = ew.GROUPING_SEPARATOR;\r\n if (locale.delimiters.decimal !== ew.DECIMAL_SEPARATOR) locale.delimiters.decimal = ew.DECIMAL_SEPARATOR;\r\n return ew.format(value, format || ew.PERCENT_FORMAT, {\r\n locale\r\n });\r\n }\r\n\r\n /**\r\n * Init page\r\n *\r\n * @param {Event|undefined} e - Event\r\n */\r\n function initPage(e) {\r\n var _e$target12;\r\n var el = (_e$target12 = e == null ? void 0 : e.target) != null ? _e$target12 : document,\r\n $el = $$1(el),\r\n $tables = $el.find(\"table.ew-table:not(.ew-export-table)\");\r\n ew.initPanels(el); // Init grid panels\r\n ew.renderJsTemplates(e);\r\n lazyLoad(e);\r\n initForms(e);\r\n initTooltips(e);\r\n initPasswordOptions(e);\r\n initIcons(e);\r\n initSearchFilters(e);\r\n initLightboxes(e);\r\n initPdfObjects(e);\r\n $tables.each(setupTable); // Init tables\r\n $el.find(\".ew-column-dropdown\").each(function () {\r\n var _localStorage$getItem;\r\n let table = this.dataset.table;\r\n (_localStorage$getItem = localStorage.getItem(ew.PROJECT_NAME + \"_\" + table + \"_invisible_fields\")) == null || _localStorage$getItem.split(\",\").forEach(field => $$1(\"#tbl_\" + table + \"list\").find(\"th[data-name='\" + field + \"'],td[data-name='\" + field + \"']\").toggleClass(\"d-none\", true));\r\n $$1(this).find(\".ew-dropdown-checkbox\").on(\"click\", function (e) {\r\n let input = this.querySelector(\".ew-dropdown-check-input[data-field]\"),\r\n field = input == null ? void 0 : input.dataset.field;\r\n if (table && field) {\r\n input.classList.toggle(\"ew-checked\");\r\n $$1(\"#tbl_\" + table + \"list\").find(\"th[data-name='\" + field + \"'],td[data-name='\" + field + \"']\").toggleClass(\"d-none\", !input.classList.contains(\"ew-checked\"));\r\n }\r\n localStorage.setItem(ew.PROJECT_NAME + \"_\" + table + \"_invisible_fields\", Array.from(e.currentTarget.closest(\".dropdown-menu\").querySelectorAll(\".ew-dropdown-check-input[data-field]:not(.ew-checked)\"), el => el.dataset.field));\r\n });\r\n }).on(\"show.bs.dropdown\", function (e) {\r\n let table = e.currentTarget.dataset.table,\r\n inputs = e.currentTarget.querySelectorAll(\".ew-dropdown-check-input[data-field]\");\r\n for (let input of inputs) {\r\n let field = input.dataset.field;\r\n input.classList.toggle(\"ew-checked\", !!$$1(\"#tbl_\" + table + \"list\").find(\"th[data-name='\" + field + \"']:not(.d-none)\")[0]);\r\n }\r\n });\r\n initExportLinks(e);\r\n initMultiSelectCheckboxes(e);\r\n\r\n // Report\r\n var $rpt = $el.find(\".ew-report\");\r\n if ($rpt[0]) {\r\n $rpt.find(\".card\").on(\"collapsed.lte.widget\", function () {\r\n // Fix min-height when .lte.widget is collapsed\r\n var $card = $$1(this),\r\n $div = $card.closest(\"[class^='col-']\"),\r\n mh = $div.css(\"min-height\");\r\n if (mh) $div.data(\"min-height\", mh);\r\n $div.css(\"min-height\", 0);\r\n }).on(\"expanded.lte.widget\", function () {\r\n // Fix min-height when .lte.widget is expanded\r\n var $card = $$1(this),\r\n $div = $card.closest(\"[class^='col-']\"),\r\n mh = $div.css(\"min-height\");\r\n if (mh) $div.css(\"min-height\", mh); // Restore min-height\r\n });\r\n // Group expand/collapse button\r\n $rpt.find(\".ew-group-toggle\").on(\"click\", function () {\r\n ew.toggleGroup(this);\r\n });\r\n }\r\n\r\n // Show message\r\n if (typeof ew.USE_JAVASCRIPT_MESSAGE != \"undefined\" && ew.USE_JAVASCRIPT_MESSAGE) showMessage(e);\r\n }\r\n\r\n // Redirect by HTTP GET or POST\r\n function redirect(url, f, method, data) {\r\n var _ew$vars;\r\n let urls = (_ew$vars = ew.vars) != null && _ew$vars.login ? Array.from(Object.entries(ew.vars.login)).filter(entry => entry[0].endsWith(\"Url\")).map(entry => entry[1]) : [];\r\n if (urls.includes(url)) {\r\n // Known URLs\r\n window.location = url;\r\n return false;\r\n }\r\n let newUrl;\r\n if (url.startsWith(\"http\")) {\r\n newUrl = new URL(url);\r\n } else if (url.startsWith(\"/\")) {\r\n newUrl = new URL(url, location.protocol + \"//\" + location.host);\r\n } else {\r\n _alert(ew.language.phrase(\"IncorrectUrl\"));\r\n return false;\r\n }\r\n let params = newUrl.searchParams;\r\n if (data) params = mergeSearchParams(params, data);\r\n if (sameText(method, \"post\")) {\r\n // POST\r\n const form = f || document.createElement(\"form\");\r\n form.method = \"post\";\r\n form.action = url.split(\"?\")[0];\r\n document.body.appendChild(form);\r\n params.set(ew.TOKEN_NAME_KEY, ew.TOKEN_NAME);\r\n params.set(ew.ANTIFORGERY_TOKEN_KEY, ew.ANTIFORGERY_TOKEN);\r\n params.forEach((value, key) => {\r\n const el = document.createElement(\"input\");\r\n el.type = \"hidden\";\r\n el.name = key;\r\n el.value = ew.sanitize(value);\r\n form.appendChild(el);\r\n });\r\n form.submit();\r\n } else {\r\n // GET\r\n window.location = sanitizeUrl(newUrl.toString());\r\n }\r\n return false;\r\n }\r\n\r\n // Show/Hide password\r\n function togglePassword(e) {\r\n let $btn = $$1(e.currentTarget),\r\n $input = $btn.closest(\".input-group\").find(\"input\"),\r\n $i = $btn.find(\"i\");\r\n if ($input.attr(\"type\") == \"text\") {\r\n $input.attr(\"type\", \"password\");\r\n $i.toggleClass(\"fa-eye-slash fa-eye\");\r\n } else if ($input.attr(\"type\") == \"password\") {\r\n $input.attr(\"type\", \"text\");\r\n $i.toggleClass(\"fa-eye-slash fa-eye\");\r\n }\r\n }\r\n\r\n // Re-order chart\r\n function updateChart(el) {\r\n let url = new URL(el.form.action),\r\n $container = $$1(el).closest(\".ew-chart-top, .ew-chart-bottom\"),\r\n $overlay = $$1(ew.overlayTemplate());\r\n url.search = $$1(el.form).serialize();\r\n $container.addClass(\"ew-loading\").append($overlay);\r\n fetch(url.toString()).then(async response => {\r\n let $html = $$1(\"<div>\" + (await response.text()) + \"</div>\"),\r\n $new = $html.find(\".ew-chart-top, .ew-chart-bottom\").filter(\"[data-chart='\" + $container.data(\"chart\") + \"']\"),\r\n $debug = $html.find(\".ew-debug\");\r\n if ($new[0]) $container.replaceWith($new);\r\n if ($debug[0]) $new.next(\".ew-debug\").replaceWith($debug);\r\n }).finally(() => $container.removeClass(\"ew-loading\").find($overlay).remove());\r\n }\r\n\r\n // Check if larger than mediumn screen width (not mobile)\r\n function isMediumScreen() {\r\n return window.matchMedia(ew.screenMediaQuery).matches;\r\n }\r\n\r\n // Check if mobile\r\n function isMobile() {\r\n return ew.IS_MOBILE || !isMediumScreen();\r\n }\r\n\r\n /**\r\n * Refresh page\r\n *\r\n * @param {Promise} promise Promise returned by fetch()\r\n * @param {string} context CSS class name of context\r\n * @returns {Promise}\r\n */\r\n function refresh(promise, context) {\r\n var _context;\r\n (_context = context) != null ? _context : context = \".ew-card.ew-grid\";\r\n context = context.startsWith(\".\") || context.startsWith(\"#\") ? context : \".\" + context;\r\n let target = document.querySelector(context + \", .ew-multi-column-grid, .ew-view-form, .ew-edit-form, .ew-calendar, .ew-dashboard, main.ew-no-record\"),\r\n dashboard = document.querySelector(\".ew-dashboard\");\r\n if (!target) return;\r\n let $overlay = $$1(ew.overlayTemplate()),\r\n $target = $$1(target).addClass(\"ew-loading\").toggleClass(\"overlay-wrapper\", !target.classList.contains(\"card\")).append($overlay);\r\n return promise.then(async response => {\r\n if (!(response instanceof Response)) return response;\r\n let ct = response.headers.get(\"Content-Type\");\r\n // Handle JSON\r\n if (ct != null && ct.includes(\"json\")) {\r\n let result = await response.json(),\r\n validation = result.validation,\r\n error = getError(result),\r\n form = target.querySelector(\".ew-form\"),\r\n f = ew.forms.get(form);\r\n if (dashboard) {\r\n // Refresh dashboard items\r\n for (let key in result) {\r\n $$1(\"#\" + key).find(\".card-body\").html(''); // Clear content first\r\n $$1(\"#\" + key).find(\"[data-card-widget='card-refresh']\").CardRefresh('load');\r\n }\r\n } else if (f && validation) {\r\n // Validation errors\r\n for (let [key, value] of Object.entries(validation)) {\r\n key = parseInt(key, 10);\r\n if ($$1.isNumber(key) && $$1.isObject(value)) {\r\n form.dataset.rowindex = key;\r\n for (let [fldvar, msg] of Object.entries(value)) f.addCustomError(fldvar, msg, key);\r\n } else if ($$1.isString(value)) {\r\n f.addCustomError(key, value);\r\n }\r\n }\r\n f.focus();\r\n }\r\n if (error) showToast(error);else if ($$1.isString(result.warningMessage)) showToast(result.warningMessage, \"warning\");else if ($$1.isString(result.message)) showToast(result.message, \"body\");else if ($$1.isString(result.successMessage)) showToast(result.successMessage, \"success\");\r\n return false; // Return false\r\n }\r\n // Handle HTML\r\n let html = await response.text(),\r\n url = new URL(response.url),\r\n selectors = [\".ew-message-dialog\", \".ew-chart-top\", \".ew-chart-bottom\", \".ew-debug .card-body\", \".ew-timer\", \".ew-dashboard\"];\r\n if (url.searchParams.get(\"layout\") == \"false\") {\r\n html = \"<div>\" + html + \"</div>\";\r\n url.searchParams.delete(\"layout\");\r\n }\r\n url.searchParams.delete(\"rnd\");\r\n url.searchParams.delete(\"action\");\r\n html = getContent(html, true); // Keep scripts\r\n let $html = $$1(\"<div>\" + html + \"</div>\"); // New HTML\r\n if (!target.closest(\".ew-dashboard\")) {\r\n // Not dashboard\r\n selectors.unshift(\".ew-toolbar\"); // Update toolbar also\r\n if (samePath(url, currentUrl) && currentUrl.toString() != url.toString())\r\n // Only update browser URL if same page or view/edit page\r\n window.history.pushState(null, \"\", url.toString()); // Update browser URL\r\n }\r\n if ($html.find(\"main.ew-no-record\")[0] || $target.is(\"main.ew-no-record\")) {\r\n // New or old HTML contains no records => update <main> element\r\n selectors = [\".ew-ext-search-form\", \"main\", ...selectors];\r\n } else if ($target.hasClass(\"ew-view-form\")) {\r\n // View page\r\n selectors = [\".ew-view-form\", \".ew-pager\", ...selectors];\r\n } else if ($target.hasClass(\"ew-edit-form\")) {\r\n // Edit page\r\n selectors = [\".ew-edit-form\", \".ew-pager\", ...selectors];\r\n } else if ($target.hasClass(\"ew-multi-column-grid\")) {\r\n // Multi-column page\r\n selectors = [\".ew-ext-search-form\", \".ew-multi-column-grid\", ...selectors];\r\n } else {\r\n // List/Report page\r\n selectors = [\"#ew-filter-list\", \".ew-ext-search-form\", context + \" .card-header\", context + \" .card-body\", context + \" .card-footer\", ...selectors];\r\n }\r\n selectors.forEach(selector => $$1(selector).each((i, el) => {\r\n let $old = $$1(el),\r\n $new = $html.find(selector).eq(i);\r\n if ($old[0] && $new[0]) {\r\n delete el.dataset.isset; // Reset\r\n $old.html($new.html()); // Replace inner HTML\r\n $old.attr(\"class\", $new.attr(\"class\")); // Update class name\r\n }\r\n if (selector == \".ew-toolbar\") {\r\n let e = {\r\n target: el\r\n };\r\n initIcons(e);\r\n initSearchFilters(e);\r\n } else if (selector == \".ew-ext-search-form\") {\r\n ew.initForms({\r\n target: $new[0]\r\n });\r\n let $tmpl = $new.find(\"#navbar-basic-search\");\r\n if ($tmpl[0]) {\r\n let html = $tmpl.render(null, ew.jsRenderHelpers),\r\n $html = $$1(html),\r\n $search = $html.find(\"#\" + ew.TABLE_BASIC_SEARCH),\r\n $searchType = $html.find(\"#\" + ew.TABLE_BASIC_SEARCH_TYPE);\r\n if ($search.val() != $$1(\"#\" + ew.TABLE_BASIC_SEARCH).val() || $searchType.val() != $$1(\"#\" + ew.TABLE_BASIC_SEARCH_TYPE).val()) $$1(\".nav-item.navbar-basic-search\").replaceWith($html);\r\n }\r\n $old.find(\".ew-search-operator .form-select.ew-operator-select\").each((i, el) => searchOperatorChange(el));\r\n } else if (selector == \".ew-message-dialog\") {\r\n if (!$new.hasClass(\"d-none\")) $old.html($new.html()); // Replace inline html\r\n }\r\n }));\r\n selectors.filter(selector => selector != \".ew-message-dialog\").forEach(selector => $html.find(selector).remove()); // Remove HTML used (except message)\r\n removeScript(\"refresh\"); // Remove old scripts\r\n executeScript($html.html(), \"refresh\"); // Execute scripts, e.g. custom template\r\n let e = $$1.Event({\r\n type: \"load.ew\",\r\n target\r\n });\r\n ew.initPage(e);\r\n target.querySelectorAll(\".btn-group\").forEach(el => {\r\n var _bootstrap$Tooltip$ge7;\r\n return (_bootstrap$Tooltip$ge7 = bootstrap.Tooltip.getInstance(el)) == null ? void 0 : _bootstrap$Tooltip$ge7.update();\r\n }); // Update tooltip position or it may obscure other buttons\r\n $$1(\".toast.show\").toast(\"dispose\"); // Hide toasts\r\n showMessage({\r\n target: $html\r\n }); // Show message, if any\r\n $document$1.trigger(e);\r\n $document$1.trigger($$1.Event({\r\n type: \"refresh.ew\",\r\n target\r\n }));\r\n }).finally(() => $target.removeClass(\"ew-loading\").find($overlay).remove());\r\n }\r\n\r\n // Layout\r\n var _fixLayoutHeightTimer;\r\n\r\n // Fix layout height\r\n function fixLayoutHeight() {\r\n if (_fixLayoutHeightTimer) _fixLayoutHeightTimer.cancel(); // Clear timer\r\n _fixLayoutHeightTimer = $$1.later(50, null, function () {\r\n var layout = $body.data(\"lte.layout\");\r\n if (layout) layout.fixLayoutHeight();\r\n });\r\n }\r\n\r\n // Add user event handlers\r\n function addEventHandlers(tblVar) {\r\n let fields = ew.events[tblVar];\r\n if (fields) {\r\n for (const [fldVar, events] of Object.entries(fields)) $$1('[data-table=' + tblVar + '][data-field=' + fldVar + ']').on(events);\r\n }\r\n }\n\n var functions = {\n __proto__: null,\n AjaxLookup,\n AutoSuggest,\n Field,\n Form,\n Select2Defaults: Defaults,\n Select2Utils: Utils,\n _export,\n addEventHandlers,\n addGridRow,\n addOptionDialogShow,\n addScript,\n ajax,\n alert: _alert,\n applyTemplate,\n autoFill,\n buildUrl,\n checkByRegEx,\n checkCreditCard,\n checkDate,\n checkEmail,\n checkEmails,\n checkGuid,\n checkInteger,\n checkNumber,\n checkPhone,\n checkRange,\n checkSsn,\n checkTime,\n checkUrl,\n checkZip,\n clearDelete,\n clearError,\n clearOptions,\n clearSelected,\n clickDelete,\n confirmDelete,\n convertToBool,\n copyToClipboard,\n createFilter,\n createModalLookup,\n createSearchParams,\n createSelect,\n currentPage,\n currentUrl,\n deleteGridRow,\n deleteSearchParam,\n disable2FA,\n displayValue,\n emailDialogShow,\n enable2FA,\n escapeRegExChars,\n executeScript,\n export: _export,\n exportCustom,\n exportEmail,\n fetch: _fetch,\n fieldContainerSelector,\n fileDownload,\n filter,\n fixLayoutHeight,\n formatCurrency,\n formatDateTime,\n formatNumber,\n formatPercent,\n formatTimeSpan,\n forms,\n getAncestorBy,\n getApiUrl,\n getContent,\n getElement,\n getElements,\n getError,\n getForm,\n getId,\n getNumberingSystem,\n getOptionTexts,\n getOptionValue,\n getOptionValues,\n getOptions,\n getQueryBuilderFilterInput,\n getQueryBuilderFilterValidation,\n getQueryBuilderValueSetter,\n getSearchParam,\n getSearchParams,\n getUserParams,\n getValue,\n getchartParams,\n hasFormData,\n hasValue,\n headerCase,\n htmlDecode,\n htmlEncode,\n importDialogShow,\n initExportLinks,\n initForms,\n initIcons,\n initLightboxes,\n initMultiSelectCheckboxes,\n initPage,\n initPasswordOptions,\n initPdfObjects,\n initSearchFilters,\n initTooltips,\n inlineAction,\n isAutoSuggest,\n isBooleanCheckbox,\n isFilter,\n isFunction: isFunction$2,\n isHidden,\n isHiddenTextArea,\n isMaskedPassword,\n isMediumScreen,\n isMobile,\n isModalLookup,\n isNativeSelectOne,\n isSelect2,\n isTextbox,\n keySelected,\n lazyLoad,\n mergeSearchParams,\n modalDialogHide,\n modalDialogShow,\n newOption,\n onError,\n parseDate: parseDateTime,\n parseDateTime,\n parseJson,\n parseNumber,\n parseTime: parseDateTime,\n parseUrl,\n prompt: _prompt,\n random,\n redirect,\n refresh,\n removeScript,\n removeSpaces,\n samePath,\n sameString,\n sameText,\n sanitizeUrl,\n scrollIntoView,\n searchOperatorChange,\n selectAll,\n selectAllKeys,\n selectKey,\n selectOption,\n sendOTP,\n setActiveUser,\n setFocus,\n setInvalid,\n setLanguage,\n setLayout,\n setSearchParam,\n setSearchParams,\n setSearchType,\n setSessionTimer,\n setValid,\n setupGrid,\n setupTable,\n showBackupCodes,\n showDrillDown,\n showMessage,\n showToast,\n sort,\n stripScript,\n submitAction,\n toast,\n toggleChat,\n toggleGroup,\n toggleLayout,\n togglePassword,\n toggleSearchOperator,\n tooltip,\n updateChart,\n updateDropdownPosition,\n updateOptions,\n updateSelected,\n upload,\n valueChanged,\n valueSeparator\n };\n\n /**\r\n * Create FullCalendar object\r\n *\r\n * @param {HTMLElement} el - HTML element\r\n * @param {Object} options - Calendar options\r\n * @param {Object} options.fullCalendarOptions - FullCalendar options\r\n * @param {Object} options.eventPopoverOptions - Event popover options\r\n * @param {HTMLElement} dropdown - HTML element\r\n * @returns calendar object\r\n */\r\n function fullCalendar(el, options, dropdown) {\r\n let {\r\n ajax,\r\n updateTable,\r\n eventFields,\r\n addUrl,\r\n viewUrl,\r\n editUrl,\r\n deleteUrl,\r\n copyUrl,\r\n fullCalendarOptions,\r\n eventPopoverOptions\r\n } = options,\r\n calendar;\r\n\r\n // Remove addUrl in options\r\n delete options.addUrl;\r\n\r\n // Update event from server side JSON response\r\n let processJson = data => {\r\n //console.log(result);\r\n let convertValue = (key, value) => {\r\n let match;\r\n if (typeof value == \"string\" && (match = value.match(/^(\\d{4}-\\d{2}-\\d{2}) (\\d{2}:\\d{2}:\\d{2})/)))\r\n // Make sure ISO date\r\n return match[1] + \"T\" + match[2];\r\n if (key == \"allDay\")\r\n // Make sure Boolean\r\n return ew.convertToBool(value);else if (key == \"url\" && !value) return \"\"; // Make sure not null\r\n else if (key == \"display\" && !value) return \"auto\"; // Make sure not null\r\n else if (key == \"classNames\" && value && $$1.isString(value))\r\n // Make sure return as array\r\n return value.replace(/\\s+/g, \" \").split(\" \");else if (key == \"classNames\" && !value)\r\n // Make sure return as array\r\n return [\"\"];else if (key == \"groupId\" && !value)\r\n // Make sure return as stringy\r\n return \"\";else if (key == \"description\" && !value) return \"\"; // Make sure not null\r\n else return value;\r\n };\r\n if (data.success) {\r\n let action = data.action,\r\n events = data[updateTable];\r\n if (!Array.isArray(events)) events = [events];\r\n for (let event of events) {\r\n for (let [key, name] of Object.entries(eventFields)) {\r\n // Normalize keys in event\r\n if (key != name && name !== null && name in event) {\r\n event[key] = event[name];\r\n delete event[name];\r\n }\r\n }\r\n if (action == ew.API_DELETE_ACTION) {\r\n var _calendar$getEventByI;\r\n // Remove deleted event\r\n (_calendar$getEventByI = calendar.getEventById(event.id)) == null || _calendar$getEventByI.remove();\r\n } else if (action == ew.API_ADD_ACTION) {\r\n // Add/Copy event\r\n for (let name in event) {\r\n // Check new properties\r\n let key = Object.keys(eventFields).find(key => key === name),\r\n value = event[name];\r\n if (key && value !== undefined)\r\n // Value can be null\r\n event[key] = convertValue(key, value); // Convert value\r\n }\r\n calendar.addEvent(event);\r\n } else {\r\n // Update event\r\n let curEvent = calendar.getEventById(event.id);\r\n let groupId = event.groupId;\r\n for (let name in event) {\r\n // Update properties\r\n let key = Object.keys(eventFields).find(key => key === name),\r\n value = convertValue(key, event[name]);\r\n if (key && value !== undefined) {\r\n // Value can be null\r\n value = convertValue(key, value); // Convert value\r\n if (key == \"start\") curEvent.setStart(value);else if (key == \"end\") curEvent.setEnd(value);else if (key == \"allDay\") curEvent.setAllDay(value);else if (key == \"description\") curEvent.setExtendedProp(key, value);else if (key != \"id\" && !groupId)\r\n // setProp will change all related events, https://fullcalendar.io/docs/Event-setProp\r\n curEvent.setProp(key, value);\r\n } else if (value) {\r\n curEvent.setExtendedProp(name, value);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n // Process event\r\n let processEvent = info => {\r\n let event = info.event,\r\n events = [event, ...info.relatedEvents],\r\n apiAction = event.id ? ew.API_EDIT_ACTION : ew.API_ADD_ACTION;\r\n events.forEach(event => processRequest(event, apiAction).then(data => {\r\n if (!data.success) {\r\n // Revert if not success\r\n info.revert();\r\n } else {\r\n // Update event\r\n processJson(data);\r\n }\r\n }).catch(err => {\r\n // Revert if error\r\n console.log(err);\r\n info.revert();\r\n }));\r\n };\r\n\r\n // Process request\r\n let processRequest = (event, apiAction) => new Promise((resolve, reject) => {\r\n // Set up post data\r\n let obj = event.toPlainObject({\r\n collapseExtendedProps: true\r\n }),\r\n data = {};\r\n // Event fields\r\n for (let [key, name] of Object.entries(eventFields)) {\r\n if (key in obj) {\r\n let val = obj[key];\r\n name || (name = key);\r\n if (val instanceof Date)\r\n // Handle date field, need to convert to ISO string\r\n val = val.toISOString().slice(0, -5).replace(/T/, \" \"); // Assume UTC\r\n else if (typeof val == \"string\" && val.match(/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}/)) val = val.substring(0, 19).replace(/T/, \" \");else if (typeof val === \"boolean\")\r\n // Handle boolean field\r\n val = val ? \"1\" : \"0\";else if (key == \"classNames\") val = Array.isArray(val) ? val.join(\" \") : val; // Convert array to string\r\n data[name] = val;\r\n delete obj[key];\r\n }\r\n }\r\n data = {\r\n ...data,\r\n ...obj\r\n };\r\n // Post to Event Table add/edit/delete API\r\n let apiUrl = apiAction == ew.API_ADD_ACTION ? ew.getApiUrl([apiAction, updateTable]) : ew.getApiUrl([apiAction, updateTable, event.id]);\r\n $$1.post(apiUrl, data, data => resolve(data)).fail(err => reject(err));\r\n });\r\n\r\n // Get field parameter\r\n let getFldParm = name => Object.keys(currentTable.fields).find(key => currentTable.fields[key].name == name);\r\n\r\n // Add menu ID to URL\r\n let urlAddId = (url, id) => {\r\n let ar = url.split(\"?\");\r\n ar[0] += id ? (!ar[0].endsWith(\"/\") ? \"/\" : \"\") + id : \"\";\r\n return ar.join(\"?\");\r\n };\r\n\r\n // Add/Copy event\r\n let addEventDialogShow = data => {\r\n let url = addUrl,\r\n params = new URLSearchParams();\r\n if ($$1.isObject(data) && (data.startStr || data.endStr /* || data.allDay */)) {\r\n let startFld = getFldParm(eventFields[\"start\"]),\r\n endFld = getFldParm(eventFields[\"end\"]) /*,\r\n allDayFld = getFldParm(eventFields[\"allDay\"])*/;\r\n if (startFld && data.startStr) params.set(startFld, data.startStr);\r\n if (endFld && data.endStr) params.set(endFld, data.endStr);\r\n // if (allDayFld && data.allDay)\r\n // params.set(allDayFld, \"1\");\r\n }\r\n if ($$1.isString(data) && data.match(/^\\d+$/))\r\n // Copy\r\n url = urlAddId(url, data);\r\n let qs = params.toString();\r\n url += qs ? \"?\" + qs : \"\";\r\n ew.modalDialogShow({\r\n url: url,\r\n callback: ajax ? processJson : null,\r\n json: ajax,\r\n btn: ew.language.phrase(\"AddBtn\"),\r\n caption: ew.language.phrase(\"AddLink\")\r\n });\r\n };\r\n\r\n // View event\r\n let viewEventDialogShow = id => ew.modalDialogShow({\r\n url: urlAddId(viewUrl, id),\r\n callback: ajax ? processJson : null,\r\n json: ajax,\r\n btn: null,\r\n caption: ew.language.phrase(\"ViewLink\")\r\n });\r\n\r\n // Edit event\r\n let editEventDialogShow = id => ew.modalDialogShow({\r\n url: urlAddId(editUrl, id),\r\n callback: ajax ? processJson : null,\r\n json: ajax,\r\n btn: null,\r\n caption: ew.language.phrase(\"EditLink\")\r\n });\r\n\r\n // Delete event\r\n let deleteEvent = id => ew.prompt(ew.language.phrase(\"DeleteEventConfirm\"), result => {\r\n if (result) ew.modalDialogShow({\r\n url: ew.setSearchParams(urlAddId(deleteUrl, id), {\r\n action: \"delete\"\r\n }),\r\n callback: ajax ? processJson : null,\r\n json: ajax\r\n });\r\n });\r\n\r\n // Add custom add button\r\n if (addUrl) {\r\n fullCalendarOptions.customButtons = Object.assign(fullCalendarOptions.customButtons || {}, {\r\n add: {\r\n text: ew.language.phrase(\"AddEvent\"),\r\n click: addEventDialogShow\r\n }\r\n });\r\n fullCalendarOptions.headerToolbar.start += \" add\";\r\n }\r\n\r\n // Get or create popover\r\n let getOrCreatePopover = info => {\r\n let config = {\r\n ...bootstrap.Popover.Default,\r\n ...eventPopoverOptions,\r\n trigger: \"manual\" // Set trigger to \"manual\"\r\n };\r\n let popover = bootstrap.Popover.getOrCreateInstance(info.el, config),\r\n template = Array.from(document.querySelectorAll(\"script[data-name='event-popover']\")).sort((a, b) => {\r\n a = parseInt(a.dataset.seq, 10) || 0;\r\n b = parseInt(b.dataset.seq, 10) || 0;\r\n return a - b;\r\n }).shift(),\r\n tmpl = $$1.templates(template.text);\r\n info.event.setExtendedProp(\"timeSpan\", ew.formatTimeSpan(info.event.start, info.event.end, info.event.allDay)); // Add extended property \"timeSpan\"\r\n let content = tmpl.render(info.event, ew.jsRenderHelpers).trim();\r\n if (content) {\r\n var _Array$from$find$repl, _Array$from$find;\r\n let popoverClass = (_Array$from$find$repl = (_Array$from$find = Array.from(info.el.classList.values()).find(name => name.match(/^event-([\\w+]+)\\b/))) == null ? void 0 : _Array$from$find.replace(/^event-/, \"popover-\")) != null ? _Array$from$find$repl : \"popover-default\";\r\n popover._templateFactory = null; // Make sure popover create tip again from _config\r\n popover._config.title = info.event.title;\r\n popover._config.content = content;\r\n popover._config.customClass += (popover._config.customClass ? \" \" : \"\") + \"ew-event-popover \" + popoverClass;\r\n return popover;\r\n }\r\n return null;\r\n };\r\n\r\n // Context menu\r\n let generateGetBoundingClientRect = info => {\r\n let x = 0,\r\n y = 0;\r\n if (info) {\r\n let rect = info.el.getBoundingClientRect(),\r\n evt = info.jsEvent;\r\n x = rect.left + evt.offsetX, y = rect.top + evt.offsetY;\r\n }\r\n return () => ({\r\n width: 0,\r\n height: 0,\r\n top: y,\r\n right: x,\r\n bottom: y,\r\n left: x\r\n });\r\n },\r\n virtualElement = {\r\n getBoundingClientRect: generateGetBoundingClientRect()\r\n },\r\n bsDropdown;\r\n if (dropdown && options.useContextMenu && (viewUrl || editUrl || addUrl && copyUrl || deleteUrl)) {\r\n dropdown.dataset.bsToggle = \"dropdown\"; // For clearing dropdown menu\r\n document.addEventListener(\"keydown\", event => event.key !== \"Escape\" || bootstrap.Dropdown.clearMenus());\r\n bsDropdown = bootstrap.Dropdown.getOrCreateInstance(dropdown, {\r\n reference: virtualElement\r\n });\r\n bsDropdown._menu.querySelectorAll(\".dropdown-item\").forEach(item => item.addEventListener(\"click\", e => {\r\n let dataset = e.currentTarget.dataset,\r\n action = dataset.action,\r\n id = dataset.eventId;\r\n if (action && id) {\r\n if (action == \"view\" && viewUrl) viewEventDialogShow(id);else if (action == \"edit\" && editUrl) editEventDialogShow(id);else if (action == \"copy\" && addUrl && copyUrl)\r\n // Copy\r\n addEventDialogShow(id);else if (action == \"delete\" && deleteUrl) deleteEvent(id);\r\n }\r\n }));\r\n }\r\n\r\n // Options\r\n let opts = ew.deepAssign(fullCalendarOptions, {\r\n // events\r\n //eventDragStart: info => console.log(info),\r\n //eventDragStop: info => console.log(info),\r\n drop: function (info) {\r\n // Remove element\r\n let checkbox = document.getElementById(\"remove-event\");\r\n if (checkbox.checked) info.draggedEl.parentNode.removeChild(info.draggedEl);\r\n },\r\n select: event => addUrl && addEventDialogShow(event),\r\n eventReceive: processEvent,\r\n // Event created\r\n eventDragStart: info => {\r\n var _bootstrap$Popover$ge;\r\n return (_bootstrap$Popover$ge = bootstrap.Popover.getInstance(info.el)) == null ? void 0 : _bootstrap$Popover$ge.hide();\r\n },\r\n eventDrop: processEvent,\r\n // Event changed (Drag / Drop)\r\n eventResize: processEvent,\r\n // Event changed (Resize)\r\n eventClick: info => {\r\n // Event click\r\n info.jsEvent.preventDefault();\r\n if (info.jsEvent.button == 2) {\r\n // Right click\r\n let allowed = info.event.extendedProps[\"_view\"] || info.event.extendedProps[\"_edit\"] || info.event.extendedProps[\"_copy\"] || info.event.extendedProps[\"_delete\"];\r\n if (bsDropdown && allowed) {\r\n var _bootstrap$Popover$ge2;\r\n (_bootstrap$Popover$ge2 = bootstrap.Popover.getInstance(info.el)) == null || _bootstrap$Popover$ge2.hide();\r\n bsDropdown.hide();\r\n bsDropdown._menu.querySelectorAll(\".dropdown-item\").forEach(item => {\r\n item.dataset.eventId = info.event.id;\r\n item.classList.toggle(\"d-none\", !options[item.dataset.action + \"Url\"] || !info.event.extendedProps[\"_\" + item.dataset.action]); // Check event permission\r\n });\r\n if (bsDropdown._menu.querySelectorAll(\".dropdown-item:not(.d-done)\").length) {\r\n virtualElement.getBoundingClientRect = generateGetBoundingClientRect(info);\r\n bsDropdown.show();\r\n }\r\n }\r\n } else if (info.event.url) {\r\n window.open(info.event.url);\r\n } else if (options.usePopover && eventPopoverOptions.trigger.match(/\\bclick\\b/)) {\r\n var _getOrCreatePopover;\r\n (_getOrCreatePopover = getOrCreatePopover(info)) == null || _getOrCreatePopover.toggle();\r\n } else if (options.showViewPageOnEventClick) {\r\n viewEventDialogShow(info.event.id);\r\n }\r\n },\r\n eventMouseEnter: info => {\r\n var _bsDropdown, _getOrCreatePopover2;\r\n if ((_bsDropdown = bsDropdown) != null && _bsDropdown._isShown(bsDropdown._menu) /* && bsDropdown._element.dataset.eventId == info.event.id*/) return;\r\n if (options.popoverViews.includes(info.view.type) && options.usePopover && eventPopoverOptions.trigger.match(/\\bhover\\b/)) (_getOrCreatePopover2 = getOrCreatePopover(info)) == null || _getOrCreatePopover2.show();\r\n },\r\n eventMouseLeave: info => {\r\n var _bsDropdown2, _bootstrap$Popover$ge3;\r\n if ((_bsDropdown2 = bsDropdown) != null && _bsDropdown2._isShown(bsDropdown._menu) /* && bsDropdown._element.dataset.eventId == info.event.id*/) return;\r\n if (options.popoverViews.includes(info.view.type) && options.usePopover && eventPopoverOptions.trigger.match(/\\bhover\\b/)) (_bootstrap$Popover$ge3 = bootstrap.Popover.getInstance(info.el)) == null || _bootstrap$Popover$ge3.hide();\r\n }\r\n });\r\n\r\n // Trigger \"calendar\" event\r\n let args = {\r\n element: el,\r\n options: opts\r\n };\r\n $$1(document).trigger(\"calendar\", [args]);\r\n\r\n // Create calendar\r\n calendar = new window.FullCalendar.Calendar(el, args.options);\r\n\r\n // Return calendar\r\n return calendar;\r\n }\n\n var fullCalendar$1 = {\n __proto__: null,\n fullCalendar\n };\n\n /**\r\n * Show dialog for push notification\r\n *\r\n * @param {Object} args - Arguments\r\n * @param {string} args.hdr - Dialog header\r\n * @param {string} args.url - URL of web push API\r\n * @param {MouseEvent} args.evt - Mouse event\r\n * @returns false\r\n */\r\n async function pushNotificationDialogShow(args) {\r\n let $dlg = ew$1.pushDialog || $$1(\"#ew-push-notification-dialog\").on(\"shown.bs.modal\", e => setTimeout(() => {\r\n var _e$target$querySelect;\r\n return (_e$target$querySelect = e.target.querySelector(\".modal-body .form-control\")) == null ? void 0 : _e$target$querySelect.focus();\r\n }, 200)).on(\"click\", \".modal-footer .btn-primary\", function (e) {\r\n var _$$closest$find$data;\r\n e.preventDefault();\r\n if ((_$$closest$find$data = $$1(this).closest(\".modal\").find(\".modal-body form\").data(\"form\")) != null && _$$closest$find$data.submit()) $dlg.modal(\"hide\");\r\n });\r\n if (!$dlg[0]) {\r\n console.log(\"DIV #ew-push-notificatoin-dialog not found\");\r\n return false;\r\n }\r\n if (!args.url) {\r\n // No API URL\r\n console.log(\"Missing URL of Web Push API\");\r\n return false;\r\n }\r\n let target = args.evt.currentTarget,\r\n // Button\r\n $form = $$1(target.form),\r\n $f = $dlg.find(\".modal-body form\"),\r\n frm = $f.data(\"form\");\r\n $f.data(\"all\", false); // Reset\r\n if (!$form.find(\"input[name='key_m[]']:checked\")[0]) {\r\n // No keys selected\r\n let result = await ew$1.prompt(ew$1.language.phrase(\"SendPushNotificationsToAll\"), bool => bool); // Callback returns result as boolean\r\n $f.data(\"all\", result);\r\n if (!result)\r\n // Cancelled\r\n return;\r\n }\r\n if (!frm) {\r\n frm = new ew$1.FormBuilder().setId($f.attr(\"id\")).addFields([[\"title\", ew$1.Validators.required(ew$1.language.phrase(\"PushNotificationFormTitle\"))], [\"body\", ew$1.Validators.required(ew$1.language.phrase(\"PushNotificationFormBody\"))]]).setValidate(function () {\r\n return this.validateFields();\r\n }).setSubmit(function () {\r\n if (!this.validate()) return false;\r\n let data = [$f.serialize(), $f.data(\"all\") ? \"\" : $form.find(\"input[name='key_m[]']:checked\").serialize()].join(\"&\");\r\n $$1.post(args.url, data, result => {\r\n var _result$error;\r\n if (Array.isArray(result)) {\r\n let successes = result.reduce((acc, cur) => acc + (cur.success ? 1 : 0), 0),\r\n failures = result.length - successes;\r\n if (successes > 0 && failures == 0) ew$1.alert(ew$1.language.phrase(\"PushNotificationSuccess\").replace(\"%s\", successes), \"success\");else if (successes == 0 && failures > 0) ew$1.alert(ew$1.language.phrase(\"PushNotificationFailure\").replace(\"%f\", failures));else if (successes == 0 && failures == 0) ew$1.alert(ew$1.language.phrase(\"NoSubscriptions\").replace(\"%f\", failures), \"primary\");else ew$1.alert(ew$1.language.phrase(\"PushNotificationSent\").replace(\"%s\", successes).replace(\"%f\", failures), \"primary\");\r\n } else if (result != null && (_result$error = result.error) != null && _result$error.description) {\r\n ew$1.alert(result.error.description);\r\n }\r\n });\r\n return true;\r\n }).build();\r\n $f.data(\"form\", frm);\r\n }\r\n ew$1.pushDialog = $dlg.modal(\"hide\").find(\".modal-title\").html(args.hdr || target.dataset.caption).end().modal(\"show\");\r\n return false;\r\n }\r\n\r\n /**\r\n * Check if push notification and service workers are supported by browser\r\n */\r\n function isPushNotificationSupported() {\r\n return \"serviceWorker\" in navigator && \"PushManager\" in window;\r\n }\r\n\r\n /**\r\n * Base 64 to Unit8Array\r\n */\r\n function urlBase64ToUint8Array(base64String) {\r\n const padding = \"=\".repeat((4 - base64String.length % 4) % 4),\r\n base64 = (base64String + padding).replace(/\\-/g, \"+\").replace(/_/g, \"/\"),\r\n rawData = window.atob(base64),\r\n outputArray = new Uint8Array(rawData.length);\r\n for (let i = 0; i < rawData.length; ++i) outputArray[i] = rawData.charCodeAt(i);\r\n return outputArray;\r\n }\r\n\r\n /**\r\n * Send subscription to server\r\n */\r\n async function sendSubscriptionToServer(subscription, url) {\r\n const key = subscription.getKey(\"p256dh\"),\r\n token = subscription.getKey(\"auth\"),\r\n contentEncoding = (PushManager.supportedContentEncodings || [\"aesgcm\"])[0];\r\n let formData = new FormData();\r\n formData.set(\"endpoint\", subscription.endpoint);\r\n formData.set(\"publicKey\", key ? btoa(String.fromCharCode.apply(null, new Uint8Array(key))) : null);\r\n formData.set(\"authToken\", token ? btoa(String.fromCharCode.apply(null, new Uint8Array(token))) : null);\r\n formData.set(\"contentEncoding\", contentEncoding);\r\n let response = await ew$1.fetch(url, {\r\n method: \"POST\",\r\n body: formData\r\n });\r\n return response.json();\r\n }\r\n\r\n /**\r\n * Create subscription and send to server\r\n * @returns Promise that resolves to a PushSubscription object\r\n */\r\n async function createSubscription() {\r\n var _result$error2;\r\n let url = ew$1.getApiUrl([ew$1.API_PUSH_NOTIFICATION_ACTION, ew$1.API_PUSH_NOTIFICATION_SUBSCRIBE]),\r\n serviceWorkerReg = await navigator.serviceWorker.ready,\r\n subscription = await serviceWorkerReg.pushManager.subscribe({\r\n userVisibleOnly: true,\r\n applicationServerKey: urlBase64ToUint8Array(ew$1.PUSH_SERVER_PUBLIC_KEY)\r\n }),\r\n result = await sendSubscriptionToServer(subscription, url);\r\n if (result != null && (_result$error2 = result.error) != null && _result$error2.description) ew$1.alert(result.error.description);\r\n return result.success ? subscription : null;\r\n }\r\n\r\n /**\r\n * Get subscription\r\n */\r\n async function getSubscription() {\r\n let serviceWorkerReg = await navigator.serviceWorker.ready;\r\n return serviceWorkerReg.pushManager.getSubscription();\r\n }\r\n\r\n /**\r\n * Set subscription\r\n * @param {PushSubscription} subscription\r\n */\r\n function setSubscription(subscription) {\r\n let $btn = $$1(\"#subscribe-notification\").toggleClass(\"ew-enable-notification\", !subscription).removeClass(\"disabled\");\r\n $btn.find(\"i\").toggleClass(\"fa-bell\", !subscription).toggleClass(\"fa-bell-slash\", !!subscription);\r\n let inst = bootstrap.Tooltip.getInstance($btn[0]);\r\n if (inst) inst._config.title = ew$1.language.phrase(subscription ? \"DisableNotifications\" : \"EnableNotifications\");\r\n }\r\n\r\n /**\r\n * Subscribe notifications\r\n *\r\n * @returns false\r\n */\r\n async function subscribeNotification() {\r\n if (Notification.permission !== \"denied\" && !ew$1.IS_SYS_ADMIN) {\r\n // Support non system administrator\r\n document.body.style.cursor = \"wait\";\r\n try {\r\n if (Notification.permission === \"granted\") {\r\n var _await$getSubscriptio, _document$getElementB;\r\n setSubscription((_await$getSubscriptio = await getSubscription()) != null ? _await$getSubscriptio : await createSubscription());\r\n if (!((_document$getElementB = document.getElementById(\"subscribe-notification\")) != null && _document$getElementB.classList.contains(\"ew-enable-notification\"))) ew$1.showToast(ew$1.language.phrase(\"NotificationsEnabled\"), \"success\");\r\n } else if (Notification.permission === \"default\" && (await Notification.requestPermission()) == \"granted\") {\r\n var _document$getElementB2;\r\n setSubscription(await createSubscription());\r\n if (!((_document$getElementB2 = document.getElementById(\"subscribe-notification\")) != null && _document$getElementB2.classList.contains(\"ew-enable-notification\"))) ew$1.showToast(ew$1.language.phrase(\"NotificationsEnabled\"), \"success\");\r\n }\r\n } catch (e) {\r\n ew$1.alert(e);\r\n } finally {\r\n document.body.style.cursor = \"default\";\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Check subscription\r\n *\r\n * @returns true\r\n */\r\n async function checkSubscription() {\r\n $$1(\"#subscribe-notification\").tooltip();\r\n if (Notification.permission == \"granted\") setSubscription(await getSubscription());else setSubscription(null);\r\n return true;\r\n }\r\n\r\n /**\r\n * Unsubscribe notifications\r\n *\r\n * @returns false\r\n */\r\n async function unsubscribeNotification() {\r\n ew$1.prompt({\r\n html: ew$1.language.phrase(\"DisableNotificationsConfirm\")\r\n }, async res => {\r\n if (!res) return;\r\n document.body.style.cursor = \"wait\";\r\n try {\r\n var _result$error3;\r\n let subscription = await getSubscription();\r\n await subscription.unsubscribe();\r\n let url = ew$1.getApiUrl([ew$1.API_PUSH_NOTIFICATION_ACTION, ew$1.API_PUSH_NOTIFICATION_DELETE]),\r\n result = await sendSubscriptionToServer(subscription, url); // Delete subscription\r\n if (result != null && (_result$error3 = result.error) != null && _result$error3.description) {\r\n ew$1.alert(result.error.description);\r\n return false;\r\n }\r\n if (result.success) {\r\n // No subscription or deleted successfully\r\n setSubscription(null);\r\n ew$1.showToast(ew$1.language.phrase(\"NotificationsDisabled\"), \"success\");\r\n }\r\n } catch (e) {\r\n ew$1.alert(e);\r\n } finally {\r\n document.body.style.cursor = \"default\";\r\n }\r\n });\r\n return false;\r\n }\r\n\r\n /**\r\n * Init web push notifications\r\n */\r\n loadjs.ready(\"foot\", () => {\r\n if (ew$1.PUSH_SERVER_PUBLIC_KEY && isPushNotificationSupported()) {\r\n navigator.serviceWorker.register(ew$1.PATH_BASE + ew$1.SERVICE_WORKER, {\r\n scope: ew$1.PATH_BASE\r\n }).then(() => {\r\n checkSubscription();\r\n $$1(\"#subscribe-notification\").on(\"click\", function () {\r\n this.classList.contains(\"ew-enable-notification\") ? subscribeNotification() : unsubscribeNotification();\r\n });\r\n }).catch(e => console.log(e));\r\n } else {\r\n $$1(\"#subscribe-notification\").addClass(\"d-none\");\r\n }\r\n });\n\n var webpush = {\n __proto__: null,\n checkSubscription,\n isPushNotificationSupported,\n pushNotificationDialogShow,\n subscribeNotification,\n unsubscribeNotification\n };\n\n /**\r\n * Map styles\r\n */\r\n\r\n /**\r\n * Show map\r\n * @param {Object} data Data of map\r\n */\r\n function show(data) {\r\n if (data.inited)\r\n // Already initiated\r\n return true;\r\n let latlng = data.latlng,\r\n useSingleMap = data.useSingleMap,\r\n showAllMarkers = data.showAllMarkers,\r\n useMarkerClusterer = data.useMarkerClusterer,\r\n $div = $$1(\"#\" + data.id + \".\" + (useSingleMap ? \"ew-single-map\" : \"ew-map\")),\r\n ext = ew.maps[data.ext];\r\n if (useSingleMap) {\r\n // Use single map\r\n let id = data.id.replace(/^mp\\d*_/, \"mp_\"); // Remove index from \"m<n>_\" prefix\r\n $div = $$1(\"#\" + id);\r\n if (!$div[0]) {\r\n $div = $$1(\"<div></div>\").attr(\"id\", id).addClass(\"ew-single-map\").height(data.singleMapHeight); // Create new $div for single map\r\n if (data.singleMapWidth) $div.width(data.singleMapWidth);\r\n $$1(\".ew-grid, .ew-multi-column-grid\").first()[data.showMapOnTop ? \"before\" : \"after\"]($div); // Insert before/after table\r\n data.map = ext.createMap($div[0], data);\r\n $div.data(\"map\", data.map);\r\n $div.data(\"ext\", data.ext);\r\n $div.data(\"bounds\", showAllMarkers ? ext.createBounds() : null);\r\n $div.data(\"markerClusterer\", useMarkerClusterer ? ext.createMarkerClusterer(data) : null);\r\n }\r\n data = Object.assign(data, $div.data()); // Merge data\r\n } else {\r\n if (!latlng) {\r\n // Location not found\r\n $div.addClass(\"d-none\").html(data.status);\r\n return true;\r\n }\r\n $div.next(\".ew-map-value\").addClass(\"d-none\"); // Hide view value\r\n if (!data.map) data.map = ext.createMap($div[0], data);\r\n }\r\n data.marker = ext.createMarker(data); // Create marker\r\n data.inited = true; // Initiated\r\n $$1(document).trigger(\"map\", [data]);\r\n return true;\r\n }\r\n\r\n /**\r\n * All maps initiated\r\n */\r\n function done() {\r\n $$1(\".ew-single-map\").each(function () {\r\n let data = $$1(this).data();\r\n ew.maps[data.ext].fitBounds(data); // Fit bounds\r\n });\r\n $$1(document).trigger(\"maps\");\r\n }\r\n\r\n /**\r\n * Init maps\r\n * @param {string} [ext] - Map type, e.g. 'googlemaps', 'leaflet'\r\n * @returns\r\n */\r\n function init(ext) {\r\n let promises = $$1(\".ew-map\").filter(function () {\r\n return !ext || $$1(this).data(\"ext\") == ext;\r\n }).map(function (i) {\r\n let data = $$1(this).data();\r\n if (data.inited)\r\n // Already initiated\r\n return show(data);\r\n data.id = this.id; // Get ID\r\n data.address = (data.address || \"\").trim();\r\n if (data.address) {\r\n let geocodingDelay = data.geocodingDelay;\r\n return new Promise(resolve => {\r\n $$1.later(i * geocodingDelay, null, () => {\r\n // Set a timer for better performance\r\n resolve(ew.maps[data.ext].geocode(data).then(latlng => {\r\n data.latlng = latlng;\r\n }).catch(status => {\r\n data.status = status;\r\n }).finally(() => show(data)));\r\n });\r\n });\r\n } else {\r\n let latitude = data.latitude,\r\n longitude = data.longitude,\r\n coordinate = data.coordinate;\r\n if (coordinate) {\r\n let m = coordinate.match(/[-.\\d]+/g);\r\n if (Array.isArray(m) && m.length == 2) {\r\n latitude = parseFloat(m[0]);\r\n longitude = parseFloat(m[1]);\r\n }\r\n }\r\n if (latitude && !isNaN(latitude) && longitude && !isNaN(longitude)) data.latlng = ew.maps[data.ext].createLatLng(latitude, longitude);\r\n return show(data);\r\n }\r\n }).get();\r\n return Promise.all(promises).then(done);\r\n }\r\n\r\n /**\r\n * Init\r\n */\r\n $$1(function () {\r\n $$1(\"#ew-modal-dialog\").on(\"load.ew\", () => init());\r\n $$1(document).on(\"preview.ew\", () => init());\r\n });\n\n var maps = {\n __proto__: null,\n done,\n init,\n show\n };\n\n ew.MOBILE_DETECT = new MobileDetect(window.navigator.userAgent);\r\n ew.IS_MOBILE = !!ew.MOBILE_DETECT.mobile();\r\n\r\n // Charts\r\n window.exportCharts = {}; // Per window\r\n\r\n // Extend\r\n Object.assign(ew, {\r\n MultiPage,\r\n Form,\r\n FormBuilder,\r\n Validators,\r\n maps\r\n }, functions, webpush, fullCalendar$1);\r\n var $document = $$1(document);\r\n\r\n // Init document\r\n loadjs.ready(\"load\", function () {\r\n var _$$offset;\r\n $$1.views.settings.debugMode(ew.DEBUG);\r\n ew.setSessionTimer();\r\n ew.initPage();\r\n $$1(\"#ew-modal-dialog\").on(\"load.ew\", ew.initPage);\r\n $$1(\"#ew-add-opt-dialog\").on(\"load.ew\", ew.initPage);\r\n let hash = ew.currentUrl.searchParams.get(\"hash\"),\r\n scrollTop = (_$$offset = $$1(\"#\" + hash).offset()) == null ? void 0 : _$$offset.top;\r\n if (scrollTop) $$1(\"html, body\").animate({\r\n scrollTop\r\n }, 800);\r\n $document.trigger(\"load.ew\");\r\n });\r\n\r\n // Default \"addoption\" event (fired before adding new option to selection list)\r\n $document.on(\"addoption\", function (e, args) {\r\n let row = args.data,\r\n // New row to be validated\r\n arp = args.parents; // Parent field values\r\n for (let i = 0, cnt = arp.length; i < cnt; i++) {\r\n // Iterate parent values\r\n let p = arp[i];\r\n if (!p.length)\r\n // Empty parent\r\n //continue; // Allow\r\n return args.valid = false; // Disallow\r\n let val = row[\"ff\" + (i > 0 ? i + 1 : \"\")]; // Filter fields start from the 6th field\r\n if (!$$1.isUndefined(val) && !p.includes(String(val)))\r\n // Filter field value not in parent field values\r\n return args.valid = false; // Returns false if invalid\r\n }\r\n });\r\n\r\n // Click handler for buttons\r\n $document.on(\"click\", \"[data-ew-action]:not([data-ew-action=''])\", function (e) {\r\n let data = Object.assign({}, $$1(this).data()),\r\n action = data.ewAction;\r\n if (!action) {\r\n return true;\r\n } else if (action == \"none\") {\r\n return false;\r\n } else if (action == \"redirect\") {\r\n return ew.redirect(data.url);\r\n } else if (action == \"reload\") {\r\n location.reload();\r\n return false;\r\n } else if (action == \"submit\") {\r\n delete data.ewAction;\r\n return ew.submitAction(e, data);\r\n } else if (action == \"modal\") {\r\n e.preventDefault();\r\n return data.ajax ? ew.inlineAction({\r\n evt: e,\r\n ...data\r\n }) : ew.modalDialogShow({\r\n evt: e,\r\n ...data\r\n });\r\n } else if (action == \"inline\" || action == \"grid\") {\r\n e.preventDefault();\r\n return ew.inlineAction({\r\n evt: e,\r\n ...data\r\n });\r\n } else if (action == \"export\") {\r\n return ew.export({\r\n evt: e,\r\n ...data\r\n });\r\n } else if (action == \"layout\") {\r\n return ew.toggleLayout(this);\r\n } else if (action == \"language\") {\r\n return ew.setLanguage(this);\r\n } else if (action == \"active-user\") {\r\n return ew.setActiveUser(this);\r\n } else if (action == \"filter\") {\r\n return ew.filter(e);\r\n } else if (action == \"sort\") {\r\n return ew.sort(e, this.dataset);\r\n } else if (action == \"refresh\") {\r\n let url = ew.setLayout(this.dataset.url, false);\r\n if (url && url != \"#\") ew.refresh(fetch(url), this.dataset.context);\r\n return false;\r\n } else if (action == \"email\") {\r\n delete data.ewAction;\r\n return ew.emailDialogShow({\r\n evt: e,\r\n ...data\r\n });\r\n } else if (action == \"set-action\") {\r\n this.form.elements[\"action\"].value = data.value;\r\n } else if (action == \"drilldown\") {\r\n return ew.showDrillDown(e, this, data.url, data.id, data.hdr);\r\n } else if (action == \"add-option\") {\r\n delete data.ewAction;\r\n return ew.addOptionDialogShow({\r\n evt: e,\r\n ...data\r\n });\r\n } else if (action == \"search-type\") {\r\n return ew.setSearchType(this);\r\n } else if (action == \"search-operator\") {\r\n ew.toggleSearchOperator(e, data.target, data.value);\r\n } else if (action == \"search-toggle\") {\r\n let panel = document.getElementById(this.dataset.form + \"_search_panel\");\r\n if (panel) {\r\n bootstrap.Collapse.getOrCreateInstance(panel).toggle();\r\n this.classList.toggle(\"active\");\r\n }\r\n } else if (action == \"highlight\") {\r\n $$1(\"mark.\" + this.dataset.name).toggleClass(\"mark\");\r\n this.classList.toggle(\"active\");\r\n } else if (action == \"inline-delete\") {\r\n return ew.confirmDelete(this);\r\n } else if (action == \"add-grid-row\") {\r\n return ew.addGridRow(this);\r\n } else if (action == \"delete-grid-row\") {\r\n return ew.deleteGridRow(this, this.dataset.rowindex);\r\n } else if (action == \"select-all\") {\r\n ew.selectAll(this);\r\n } else if (action == \"select-key\") {\r\n ew.selectKey(e);\r\n } else if (action == \"select-all-keys\") {\r\n ew.selectAllKeys(this);\r\n } else if (action == \"import\") {\r\n return ew.importDialogShow({\r\n evt: e,\r\n hdr: data.hdr\r\n });\r\n } else if (action == \"password\") {\r\n return ew.togglePassword(e);\r\n } else if (action == \"push\") {\r\n return ew.pushNotificationDialogShow({\r\n evt: e,\r\n url: data.apiUrl\r\n });\r\n } else if (action == \"enable-2fa\") {\r\n return ew.enable2FA();\r\n } else if (action == \"disable-2fa\") {\r\n return ew.disable2FA();\r\n } else if (action == \"toggle-chat\") {\r\n return ew.toggleChat(data.value);\r\n } else if (action == \"send-otp\") {\r\n var _document$getElementB;\r\n return ew.sendOTP((_document$getElementB = document.getElementById(data.account)) == null ? void 0 : _document$getElementB.value);\r\n } else if (action == \"backup-codes\") {\r\n return ew.showBackupCodes();\r\n } else if (action == \"scroll-top\") {\r\n $$1(document).scrollTop($$1('#top').offset().top);\r\n return false;\r\n }\r\n })\r\n // Change handler for selects\r\n .on(\"change\", \"[data-ew-action]:not([data-ew-action=''])\", function (e) {\r\n let data = Object.assign({}, $$1(this).data());\r\n if (!data.ewAction) return true;\r\n let actions = data.ewAction.split(\" \").filter(action => !!action);\r\n for (let action of actions) {\r\n if (action == \"submit-form\") {\r\n var _this$form;\r\n (_this$form = this.form) == null || _this$form.submit();\r\n } else if (action == \"change-page-size\") {\r\n let pageSize = ew.sameText(this.value, \"ALL\") ? \"ALL\" : ew.parseNumber(this.value);\r\n if (ew.convertToBool(data.ajax)) {\r\n let url = ew.setLayout(this.dataset.url, false) + \"&\" + this.name + \"=\" + pageSize;\r\n ew.refresh(fetch(url), this.dataset.context);\r\n } else {\r\n let url = ew.setSearchParam(this.dataset.url, this.name, pageSize);\r\n ew.redirect(url);\r\n }\r\n return false;\r\n } else if (action == \"update-options\") {\r\n ew.updateOptions.call(this);\r\n } else if (action == \"autofill\") {\r\n ew.autoFill(this);\r\n } else if (action == \"search-operator\") {\r\n return ew.searchOperatorChange(this);\r\n } else if (action == \"language\") {\r\n ew.setLanguage(this);\r\n } else if (action == \"chart-order\") {\r\n ew.updateChart(this);\r\n }\r\n }\r\n }).on(\"keydown\", \"[data-ew-action]:not([data-ew-action=''])\", function (e) {\r\n let data = Object.assign({}, $$1(this).data()),\r\n action = data.ewAction;\r\n if (action == \"change-page\") {\r\n // ew-page-number\r\n if (e.key == \"Enter\") {\r\n if (ew.convertToBool(data.ajax)) {\r\n let url = ew.setLayout(this.dataset.url, false) + \"&\" + this.name + \"=\" + ew.parseNumber(this.value);\r\n ew.refresh(fetch(url), this.dataset.context);\r\n } else {\r\n ew.currentUrl.searchParams.set(this.name, ew.parseNumber(this.value));\r\n window.location = ew.sanitizeUrl(ew.currentUrl.toString());\r\n }\r\n return false;\r\n }\r\n }\r\n });\r\n\r\n // Click handler for row links\r\n $document.on(\"click\", \".ew-row-link\", e => e.stopPropagation());\r\n\r\n // Fix z-index of multiple modals\r\n $document.on(\"show.bs.modal\", \".modal\", function () {\r\n var zIndex = 1050 + $$1(\".modal:visible\").length;\r\n $$1(this).css(\"z-index\", zIndex);\r\n setTimeout(function () {\r\n $$1(\".modal-backdrop\").not(\".modal-stack\").css(\"z-index\", zIndex - 1).addClass(\"modal-stack\");\r\n }, 0);\r\n });\r\n\r\n // Fix scrolling of multiple modals\r\n $document.on(\"hidden.bs.modal\", \".modal\", function () {\r\n $$1(\".modal:visible\").length && $$1(\"body\").addClass(\"modal-open\");\r\n });\r\n\r\n // Crop action for jQuery File Upload\r\n $$1.blueimp.fileupload.prototype.options.processQueue.unshift({\r\n action: \"cropImage\",\r\n // Action name\r\n fileTypes: \"@loadImageFileTypes\",\r\n // Reuse loadImageFileTypes\r\n maxFileSize: \"@loadImageMaxFileSize\",\r\n // Reuse loadImageMaxFileSize\r\n cropperOptions: \"@\",\r\n // Use global settings in ewcore.js, see https://github.com/fengyuanchen/cropperjs/blob/e969348d313dafe3416926125b21388cc67cefb1/README.md#options\r\n cropperCanvasOptions: \"@\",\r\n // Use global settings in ewcore.js, see https://github.com/fengyuanchen/cropperjs/blob/e969348d313dafe3416926125b21388cc67cefb1/README.md#getcroppedcanvasoptions\r\n disabled: \"@disableImageCrop\" // Use data-disable-image-crop attribute to enable/disable\r\n });\r\n $$1.widget(\"blueimp.fileupload\", $$1.blueimp.fileupload, {\r\n processActions: {\r\n cropImage: function (data, options) {\r\n let file = data.files[data.index];\r\n if (options.disabled || $$1.isNumber(options.maxFileSize) && file.size > options.maxFileSize || options.fileTypes && !options.fileTypes.test(file.type)) return data;\r\n let url = URL.createObjectURL(file),\r\n dfd = $$1.Deferred(),\r\n that = this;\r\n let $dlg = ew.cropperDialog || $$1(\"#ew-cropper-dialog\").on(\"shown.bs.modal\", function () {\r\n $dlg.data(\"cropper\", new Cropper(this.querySelector(\"#ew-crop-image\"), options.cropperOptions));\r\n }).on(\"hidden.bs.modal\", function () {\r\n var _$dlg$data;\r\n (_$dlg$data = $dlg.data(\"cropper\")) == null || _$dlg$data.destroy();\r\n $dlg.removeData(\"cropper\");\r\n $dlg.find(\"#ew-crop-image\").attr(\"src\", \"data:image/png;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=\");\r\n });\r\n ew.cropperDialog = $dlg;\r\n $dlg.find(\"#ew-crop-image\").attr(\"src\", url);\r\n $dlg.find(\".ew-crop-btn\").off(\"click\").on(\"click\", function () {\r\n if ($dlg.data(\"cropper\")) {\r\n try {\r\n let canvas = $dlg.data(\"cropper\").getCroppedCanvas(options.cropperCanvasOptions);\r\n canvas.toBlob(blob => {\r\n data.files[data.index] = new File([blob], file.name, {\r\n type: file.type\r\n });\r\n dfd.resolveWith(that, [data]);\r\n }, file.type);\r\n } catch (error) {\r\n ew.alert(error);\r\n dfd.rejectWith(that, [data]);\r\n } finally {\r\n $dlg.modal(\"hide\");\r\n }\r\n }\r\n });\r\n $dlg.find(\".ew-skip-btn\").off(\"click\").on(\"click\", function () {\r\n dfd.resolveWith(that, [data]);\r\n $dlg.modal(\"hide\");\r\n });\r\n $dlg.modal(\"show\");\r\n return dfd.promise();\r\n }\r\n }\r\n });\n\n // Extend jQuery\r\n $$1.extend({\r\n isBoolean: function (o) {\r\n return typeof o === 'boolean';\r\n },\r\n isNumber: function (o) {\r\n return typeof o === 'number' && isFinite(o);\r\n },\r\n isObject: function (o) {\r\n return o && (typeof o === 'object' || this.isFunction(o)) || false;\r\n },\r\n isString: function (o) {\r\n return typeof o === 'string';\r\n },\r\n isUndefined: function (o) {\r\n return typeof o === 'undefined';\r\n },\r\n isValue: function (o) {\r\n return this.isObject(o) || this.isString(o) || this.isNumber(o) || this.isBoolean(o);\r\n },\r\n isDate: function (o) {\r\n return this.type(o) === 'date' && o.toString() !== 'Invalid Date' && !isNaN(o);\r\n },\r\n later: function (when, o, fn, data, periodic) {\r\n when = when || 0;\r\n o = o || {};\r\n var m = fn,\r\n d = data,\r\n f,\r\n r;\r\n if (this.isString(fn)) m = o[fn];\r\n if (!m) return;\r\n if (!this.isUndefined(data) && !this.isArray(d)) d = [data];\r\n f = function () {\r\n m.apply(o, d || []);\r\n };\r\n r = periodic ? setInterval(f, when) : setTimeout(f, when);\r\n return {\r\n interval: periodic,\r\n cancel: function () {\r\n if (this.interval) {\r\n clearInterval(r);\r\n } else {\r\n clearTimeout(r);\r\n }\r\n }\r\n };\r\n }\r\n });\n\n /**\r\n * jQuery.fields() plugin\r\n *\r\n * @param {string|undefined} fldvar - Field variable name or undefined\r\n * If field variable name, returns jQuery object of the specified field element(s).\r\n * If unspecified, returns object of jQuery objects of all fields.\r\n * @returns jQuery object\r\n */\r\n $$1.fn.fields = function (fldvar) {\r\n // Note: fldvar has NO \"x_\" prefix\r\n let rec = {},\r\n id = this.attr(\"id\"),\r\n obj = this[0],\r\n m = id.match(/^[xy](\\d*)_/),\r\n f,\r\n tbl,\r\n infix;\r\n if (m) {\r\n // \"this\" is input element\r\n f = ew.getForm(obj); // form\r\n tbl = this.data(\"table\"); // table var\r\n infix = m[1]; // row index\r\n } else if (obj != null && obj.htmlForm) {\r\n // \"this\" is form\r\n f = obj.$element; // form\r\n tbl = obj.id.replace(new RegExp(\"^f|\" + obj.pageId + \"$\", \"g\"), \"\"); // table var\r\n infix = obj.htmlForm.dataset.rowindex; // row index\r\n }\r\n let selector = \"[data-table\" + (tbl ? \"=\" + tbl : \"\") + \"][data-field\" + (fldvar ? \"=x_\" + fldvar : \"\") + \"]\" + ($$1.isValue(infix) ? \"[name^=x\" + infix + \"]\" : \"\") + \":not(.ew-custom-option)\";\r\n if (f && selector) {\r\n $$1(f).find(selector).each(function () {\r\n let key = this.dataset.field.substring(2),\r\n // \"data-field\"\r\n name = this.getAttribute(\"name\");\r\n key = /^y_/.test(name) ? \"y_\" + key : key; // Use \"y_fldvar\" as key for 2nd search input\r\n rec[key] = rec[key] ? rec[key].add(this) : $$1(this); // Create jQuery object for each field\r\n });\r\n }\r\n return fldvar ? rec[fldvar] : rec;\r\n };\r\n $$1.fn.extend({\r\n // Get jQuery object of the row (<div> or <tr>)\r\n row: function () {\r\n var _this$data$substring, _this$data, _this$data2;\r\n let id = (_this$data$substring = (_this$data = this.data(\"field\")) == null ? void 0 : _this$data.substring(2)) != null ? _this$data$substring : \"\",\r\n tbl = (_this$data2 = this.data(\"table\")) != null ? _this$data2 : \"\",\r\n $row = this.closest(\"#r_\" + id + \", #xs_\" + id + \", .row.\" + tbl + \"_\" + id);\r\n if (!$row[0]) $row = this.closest(\".ew-table > tbody > tr\"); // Grid page\r\n return $row;\r\n },\r\n // Show/Hide field\r\n visible: function (v) {\r\n var _this$data$substring2, _this$data3, _this$data4;\r\n let id = (_this$data$substring2 = (_this$data3 = this.data(\"field\")) == null ? void 0 : _this$data3.substring(2)) != null ? _this$data$substring2 : \"\",\r\n tbl = (_this$data4 = this.data(\"table\")) != null ? _this$data4 : \"\",\r\n $p = this.closest(\"#r_\" + id + \", #xs_\" + id + \", .row.\" + tbl + \"_\" + id); // Find the row\r\n if (!$p[0]) $p = this.closest(\"[id^=el]\"); // Find the span\r\n if (typeof v != \"undefined\") {\r\n $p.toggleClass(\"d-none d-sm-none\", !v); // Note: d-sm-none overrides d-sm-flex\r\n return this;\r\n } else {\r\n return $el.is(\":visible\");\r\n }\r\n },\r\n // Get/Set field \"readonly\" attribute\r\n // Note: This attribute is ignored if the value of the type attribute is hidden, range, color, checkbox, radio, file, or a button type\r\n readonly: function (v) {\r\n if (typeof v != \"undefined\") {\r\n this.prop(\"readOnly\", v);\r\n return this;\r\n } else {\r\n return this.prop(\"readOnly\");\r\n }\r\n },\r\n // Get/Set field \"disabled\" attribute\r\n // Note: A disabled control's value isn't submitted with the form\r\n disabled: function (v) {\r\n if (typeof v != \"undefined\") {\r\n this.prop(\"disabled\", v);\r\n return this;\r\n } else {\r\n return this.prop(\"disabled\");\r\n }\r\n },\r\n // Get/Set field value(s)\r\n // Note: Return array if select-multiple\r\n value: function (v) {\r\n if (typeof v != \"undefined\") {\r\n ew.selectOption(this[0], v);\r\n return this;\r\n } else {\r\n return ew.getValue(this[0]);\r\n }\r\n },\r\n // Get field value as number\r\n toNumber: function () {\r\n return ew.parseNumber(this.value());\r\n },\r\n // Get field value as Luxon object\r\n toDate: function () {\r\n var _ew$vars$tables;\r\n let data = this.data(),\r\n table = data.table,\r\n field = data.field.replace(/^[xy]_/, \"\"),\r\n format = (_ew$vars$tables = ew.vars.tables) == null || (_ew$vars$tables = _ew$vars$tables[table]) == null || (_ew$vars$tables = _ew$vars$tables.fields) == null || (_ew$vars$tables = _ew$vars$tables[field]) == null ? void 0 : _ew$vars$tables.clientFormatPattern;\r\n return ew.parseDateTime(this.value(), format);\r\n },\r\n // Get field value as native Date object\r\n toJsDate: function () {\r\n return this.toDate().toJSDate();\r\n }\r\n });\n\n // Improve Bootstrap Dropdown\r\n bootstrap.Dropdown.prototype.toggle = function () {\r\n if (!this._element.classList.contains(\"ew-dropdown-toggle\")) {\r\n if (this._element.closest(\"[data-widget]\")) $$1(this._element).on(\"click.ew.dropdown\", e => {\r\n bootstrap.Dropdown.clearMenus(e.originalEvent); // Clear menus first because this click event will not propagate to the document\r\n e.stopPropagation(); // Stop propagate or the event will toggle row of expandable-table\r\n });\r\n // Move the menu to document body if menu inside responsive table\r\n if (this._menu.closest(\".table-responsive\")) {\r\n let container = this._menu.closest(\".popover-body, .modal-body, .offcanvas-body, body\");\r\n container.appendChild(this._menu);\r\n let menu = this._menu;\r\n if (!this._element.id) this._element.id = \"dropdownbtn\" + ew.random();\r\n menu.setAttribute('aria-labelledby', this._element.id);\r\n function callback(mutationList) {\r\n mutationList.forEach(mutation => {\r\n switch (mutation.type) {\r\n case \"attributes\":\r\n if (mutation.target.classList.contains(\"show\")) menu.classList.add(\"d-block\");else menu.classList.remove(\"d-block\");\r\n break;\r\n }\r\n });\r\n }\r\n let observer = new MutationObserver(callback);\r\n observer.observe(this._parent, {\r\n attributeFilter: [\"class\"],\r\n attributeOldValue: false,\r\n subtree: false\r\n });\r\n }\r\n this._element.classList.add(\"ew-dropdown-toggle\");\r\n }\r\n return this._isShown() ? this.hide() : this.show();\r\n };\n\n loadjs.ready([\"wrapper\", \"head\"], function () {\r\n let $chatWrapper = $$1(\".chat-wrapper\"),\r\n $chatCheck = $chatWrapper.find(\"#chat-check\"),\r\n $chatBtn = $chatWrapper.find(\".chat-btn\").addClass(\"show\"),\r\n $chatClose = $chatBtn.find(\".close\"),\r\n $chatComment = $chatBtn.find(\".comment\"),\r\n $chatCard = $chatWrapper.find(\".direct-chat\"),\r\n $chatHeader = $chatCard.find(\".card-header\"),\r\n $chatCollapse = $chatHeader.find(\".card-collapse\"),\r\n $chatBody = $chatCard.find(\".card-body\"),\r\n $chatIframe = $chatBody.find(\"iframe\");\r\n $chatCheck.on(\"click\", () => {\r\n var _Pace;\r\n if ((_Pace = Pace) != null && _Pace.running) return;\r\n const checked = $chatCheck.prop(\"checked\");\r\n $chatClose.toggle(checked);\r\n $chatComment.toggle(!checked);\r\n $chatCard.toggle(checked);\r\n let iframe = $chatIframe[0];\r\n if (checked && !iframe.src) iframe.src = iframe.dataset.src;\r\n });\r\n $chatCard.on(\"removed.lte.cardwidget\", () => $chatCheck.prop(\"checked\", false).triggerHandler(\"click\"));\r\n $chatCard.on(\"maximized.lte.cardwidget\", () => {\r\n $chatWrapper.after($chatCard);\r\n $chatCollapse.hide();\r\n $chatCard.delay(150).queue(function () {\r\n let h = $chatCard.height() - $chatHeader.outerHeight();\r\n $chatBody.height(h);\r\n $chatIframe.addClass(\"w-100\").height(h - parseInt($chatCard.css(\"border-radius\"), 10)); // Minus the radius of card\r\n $chatCard.dequeue();\r\n });\r\n $chatIframe[0].contentDocument.location.reload(true);\r\n }).on(\"minimized.lte.cardwidget\", () => {\r\n $chatWrapper.append($chatCard);\r\n $chatCollapse.show();\r\n $chatCard.toggle($chatCheck.prop(\"checked\"));\r\n $chatCard.queue(function () {\r\n $chatBody.height(\"auto\");\r\n $chatIframe.removeClass(\"w-100\").height(\"auto\");\r\n $chatCard.dequeue();\r\n });\r\n $chatIframe[0].contentDocument.location.reload(true);\r\n });\r\n });\n\n var isNil = (value) => {\r\n return value === null || value === undefined;\r\n };\r\n\r\n var isNil$1 = isNil;\n\n var isFunction = (value) => {\r\n return typeof value === 'function';\r\n };\r\n\r\n var isFunction$1 = isFunction;\n\n var isNaNNumber = (value) => {\r\n return typeof value === 'number' && isNaN(value);\r\n };\r\n\r\n var isNaNNumber$1 = isNaNNumber;\n\n var isFiniteNumber = (value) => {\r\n return typeof value == 'number' && isFinite(value);\r\n };\r\n\r\n var isFiniteNumber$1 = isFiniteNumber;\n\n /**\r\n * Optimized for performance\r\n */\r\n const multiplyByPowerOfTen = (number, powerOfTenExponent) => {\r\n if (!isFiniteNumber$1(number))\r\n return NaN;\r\n const numAsString = '' + number;\r\n const indexOfE = numAsString.indexOf('e');\r\n if (indexOfE === -1) {\r\n return +(numAsString + 'e' + powerOfTenExponent);\r\n }\r\n else {\r\n return +(numAsString.slice(0, indexOfE) + 'e' + (+numAsString.slice(indexOfE + 1) + powerOfTenExponent));\r\n }\r\n };\r\n\r\n var multiplyByPowerOfTen$1 = multiplyByPowerOfTen;\n\n /**\r\n * Only handles direct power of ten (only integer exponents)\r\n */\r\n const log10 = (numberThatIsPowerOfTen) => {\r\n return Math.round(Math.log(numberThatIsPowerOfTen) * Math.LOG10E);\r\n };\r\n\r\n var log10$1 = log10;\n\n const toObject = (arr, entriesResolver) => {\r\n const object = {};\r\n for (let i = 0; i < arr.length; ++i) {\r\n if (i in arr) {\r\n const [key, value] = entriesResolver(arr[i], i);\r\n object[key] = value;\r\n }\r\n }\r\n return object;\r\n };\r\n\r\n var toObject$1 = toObject;\n\n // <i> Extracted from https://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex\r\n const escapeRegexString = (string) => {\r\n return string.replace(/[.*+?^${}()|[\\]\\\\]/g, match => `\\\\${match}`);\r\n };\r\n\r\n var escapeRegexString$1 = escapeRegexString;\n\n /**\r\n * This function doesn't work with non-primitive arguments\r\n */\r\n const memoize = (fn) => {\r\n const cache = {};\r\n return function (...args) {\r\n const cacheKey = args.length > 1 ? args.join('-(:-:)-') : args[0];\r\n if (cacheKey in cache) {\r\n return cache[cacheKey];\r\n }\r\n const result = fn.apply(this, args);\r\n cache[cacheKey] = result;\r\n return result;\r\n };\r\n };\r\n\r\n var memoize$1 = memoize;\n\n const powerOf10LookupObject = (() => {\r\n const object = {};\r\n // 1 <= x <= Infinity (positive exponent)\r\n let additionalZeros = '';\r\n let currentValue;\r\n while (currentValue !== Infinity) {\r\n currentValue = +('1' + additionalZeros);\r\n object[currentValue] = true;\r\n additionalZeros += '0';\r\n }\r\n // 0 <= x < 1 (negative exponent)\r\n additionalZeros = '';\r\n currentValue = undefined;\r\n while (currentValue !== 0) {\r\n currentValue = +('0.' + additionalZeros + '1');\r\n object[currentValue] = true;\r\n additionalZeros += '0';\r\n }\r\n return object;\r\n })();\r\n const isPowerOfTen = (number) => {\r\n return !!powerOf10LookupObject[number];\r\n };\r\n\r\n var isPowerOfTen$1 = isPowerOfTen;\n\n const toBase = (value, valueUnit, unitScale) => {\r\n if (!isFiniteNumber$1(value) || valueUnit === unitScale.base)\r\n return value;\r\n if (!(valueUnit in unitScale.scale))\r\n return NaN;\r\n const toBaseMultiplier = unitScale.scale[valueUnit] || 1;\r\n return isPowerOfTen$1(toBaseMultiplier)\r\n ? multiplyByPowerOfTen$1(value, log10$1(toBaseMultiplier))\r\n : value * toBaseMultiplier;\r\n };\r\n const convertUnit = (value, originUnit, targetUnit, unitScale) => {\r\n if (!isFiniteNumber$1(value) || originUnit === targetUnit)\r\n return value;\r\n const valueAsBase = toBase(value, originUnit, unitScale);\r\n const resolvedScale = Object.assign(Object.assign({}, unitScale.scale), { [unitScale.base]: 1 });\r\n if (isNaN(valueAsBase) || !(originUnit in resolvedScale) || !(targetUnit in resolvedScale))\r\n return NaN;\r\n const conversionFactorFromBase = unitScale.scale[targetUnit] || 1;\r\n return isPowerOfTen$1(conversionFactorFromBase)\r\n ? multiplyByPowerOfTen$1(valueAsBase, -log10$1(conversionFactorFromBase))\r\n : valueAsBase / conversionFactorFromBase;\r\n };\r\n /**\r\n * Looks through every possibility for the 'best' available unit.\r\n * i.e. Where the value has the fewest numbers before the decimal point,\r\n * but is still higher than 1.\r\n */\r\n const toBest = (value, originUnit, unitScale, options) => {\r\n const resolvedOptions = Object.assign({ exclude: [], cutOffNumber: 1 }, options);\r\n let best = null;\r\n const scale = unitScale.scale;\r\n Object.keys(scale).sort((a, b) => scale[a] - scale[b]).forEach((scaleUnit) => {\r\n const isIncluded = resolvedOptions.exclude.indexOf(scaleUnit) === -1;\r\n if (!isIncluded)\r\n return;\r\n const result = convertUnit(value, originUnit, scaleUnit, unitScale);\r\n const absoluteResult = Math.abs(result);\r\n if (!best || (absoluteResult >= resolvedOptions.cutOffNumber && absoluteResult < Math.abs(best[0]))) {\r\n best = [result, scaleUnit];\r\n }\r\n });\r\n return best || [value, originUnit];\r\n };\r\n const unitScale = (unitScaleDefinition) => {\r\n return {\r\n toBase: (value, unit) => {\r\n return toBase(value, unit, unitScaleDefinition);\r\n },\r\n convert: (value, originUnit, targetUnit) => {\r\n return convertUnit(value, originUnit, targetUnit, unitScaleDefinition);\r\n },\r\n toBest: (value, originUnit, options) => {\r\n return toBest(value, originUnit, unitScaleDefinition, options);\r\n },\r\n scaleDefinition: unitScaleDefinition,\r\n };\r\n };\n\n /**\r\n * Short version of mozilla polyfill:\r\n * <i> See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat\r\n */\r\n const stringRepeat = (str, count) => {\r\n // return (str.repeat && str.repeat(count)) || new Array(count + 1).join(str);\r\n if (count < 1)\r\n return '';\r\n let result = '';\r\n let pattern = str;\r\n while (count > 1) {\r\n if (count & 1)\r\n result += pattern;\r\n count >>>= 1, pattern += pattern;\r\n }\r\n return result + pattern;\r\n };\r\n\r\n var stringRepeat$1 = stringRepeat;\n\n const baseCreateUnitScaleFromLocaleAbbreviations = (str) => {\r\n if (!str) {\r\n return unitScale({ base: '', scale: {} });\r\n }\r\n const scale = str.split('|');\r\n const scaleDefinition = { ['']: 1 };\r\n scale.forEach((scaleItem, scaleItemIndex) => {\r\n if (!scaleItem)\r\n return;\r\n scaleDefinition[scaleItem] = +(1 + stringRepeat$1('0', scaleItemIndex));\r\n });\r\n return unitScale({ base: '', scale: scaleDefinition });\r\n };\r\n const createUnitScaleFromLocaleAbbreviations = memoize$1(baseCreateUnitScaleFromLocaleAbbreviations);\r\n\r\n var createUnitScaleFromLocaleAbbreviations$1 = createUnitScaleFromLocaleAbbreviations;\n\n const replaceNumeralSystemWithLatinNumbers = (numericStringWithExtraInfo, numeralSystemMap) => {\r\n if (!numeralSystemMap || numeralSystemMap.length !== 10)\r\n return numericStringWithExtraInfo;\r\n const numericStringLength = numericStringWithExtraInfo.length;\r\n const numeralSystemToLatinSystemMap = toObject$1(numeralSystemMap, (digit, digitIndex) => [digit.replace(/\\u200e/g, ''), '' + digitIndex]);\r\n let output = '';\r\n for (let numericStringIndex = 0; numericStringIndex < numericStringLength; numericStringIndex++) {\r\n const char = numericStringWithExtraInfo[numericStringIndex];\r\n output += numeralSystemToLatinSystemMap[char] || char;\r\n }\r\n return output;\r\n };\r\n const getScalingFactorFromAbbreviations = (stringOriginal, options) => {\r\n var _a;\r\n const scale = createUnitScaleFromLocaleAbbreviations$1((_a = options.locale) === null || _a === void 0 ? void 0 : _a.abbreviations);\r\n const abbreviationsSortedByLengthDesc = Object.keys(scale.scaleDefinition.scale).sort((a, b) => b.length - a.length);\r\n let abbreviationScalingFactor = 1;\r\n for (const abbreviation of abbreviationsSortedByLengthDesc) {\r\n const scapedAbbreviationForRegex = escapeRegexString$1(abbreviation);\r\n const regexp = new RegExp('[^a-zA-Z]'\r\n + `(${scapedAbbreviationForRegex})|(${scapedAbbreviationForRegex.replace(/\\u200e/g, '')})`\r\n + '(?:\\\\)(?:\\\\))?)?$');\r\n if (stringOriginal.match(regexp)) {\r\n abbreviationScalingFactor = scale.toBase(abbreviationScalingFactor, abbreviation);\r\n break;\r\n }\r\n }\r\n return abbreviationScalingFactor;\r\n };\r\n // unformats numbers separators, decimals places, signs, abbreviations\r\n const formattedStringToNumber = (inputString, options) => {\r\n var _a;\r\n const locale = options.locale;\r\n const stringOriginal = inputString;\r\n let value;\r\n // Replace special digits with latin digits\r\n const stringWithLatinDigits = replaceNumeralSystemWithLatinNumbers(inputString, (_a = options.locale) === null || _a === void 0 ? void 0 : _a.numeralSystem);\r\n if (options.zeroFormat && stringWithLatinDigits === options.zeroFormat) {\r\n value = 0;\r\n }\r\n else if (options.nullFormat && stringWithLatinDigits === options.nullFormat || !stringWithLatinDigits.replace(/[^0-9]+/g, '').length) {\r\n value = null;\r\n }\r\n else {\r\n // Replaces the locale decimal delimiter with a dot (.)\r\n const decimalDelimiterFromLocale = locale.delimiters.decimal;\r\n const stringWithDotDecimalDelimiter = decimalDelimiterFromLocale === '.'\r\n ? stringWithLatinDigits\r\n : stringWithLatinDigits.replace(/\\./g, '').replace(decimalDelimiterFromLocale, '.');\r\n // Determines the scaling factor from the abbreviations (if has abbreviations)\r\n const abbreviationScalingFactor = getScalingFactorFromAbbreviations(stringOriginal, options);\r\n // Check for negative number\r\n const negativeFactor = (stringWithDotDecimalDelimiter.split('-').length\r\n + Math.min(stringWithDotDecimalDelimiter.split('(').length - 1, stringWithDotDecimalDelimiter.split(')').length - 1)) % 2 ? 1 : -1;\r\n // Remove non numbers\r\n const numberAsString = stringWithDotDecimalDelimiter.replace(/[^0-9.]+/g, '');\r\n value = negativeFactor * multiplyByPowerOfTen$1(+numberAsString, log10$1(abbreviationScalingFactor));\r\n }\r\n return value;\r\n };\r\n\r\n var formattedStringToNumber$1 = formattedStringToNumber;\n\n const locale = {\r\n code: 'en',\r\n delimiters: {\r\n thousands: ',',\r\n decimal: '.',\r\n },\r\n abbreviations: '|||K|||M|||B|||T',\r\n ordinal: number => {\r\n const b = number % 10;\r\n return (Math.floor(number % 100 / 10) === 1)\r\n ? 'th'\r\n : b === 1\r\n ? 'st'\r\n : b === 2\r\n ? 'nd'\r\n : b === 3\r\n ? 'rd'\r\n : 'th';\r\n },\r\n };\r\n\r\n var locale$1 = locale;\n\n function merge(...args) {\r\n const newObject = {};\r\n const argsLength = args.length;\r\n for (let i = 0; i < argsLength; i++) {\r\n for (const key in args[i])\r\n newObject[key] = args[i][key];\r\n }\r\n return newObject;\r\n }\n\n var isObject = (value) => {\r\n return typeof value === 'object' && value !== null;\r\n };\r\n\r\n var isObject$1 = isObject;\n\n var isString = (value) => {\r\n return typeof value === 'string';\r\n };\r\n\r\n var isString$1 = isString;\n\n const truncateNumber = (value) => {\r\n return value < 0 ? Math.ceil(value) : Math.floor(value);\r\n };\r\n\r\n var truncateNumber$1 = truncateNumber;\n\n const getPatternParts = (patternMask) => {\r\n let isInEscapedPart = false;\r\n let currentEscapedWord = '';\r\n const parts = [];\r\n for (let i = 0; i < patternMask.length; i++) {\r\n const char = patternMask.charAt(i);\r\n if (char === \"'\" && !isInEscapedPart) {\r\n isInEscapedPart = true;\r\n currentEscapedWord = '';\r\n }\r\n else if (char === \"'\" && isInEscapedPart && patternMask.charAt(i - 1) !== \"\\\\\") {\r\n isInEscapedPart = false;\r\n parts.push({ escaped: true, value: currentEscapedWord });\r\n }\r\n else if (isInEscapedPart) {\r\n currentEscapedWord += char;\r\n }\r\n else {\r\n if (parts.length && !parts[parts.length - 1].escaped) {\r\n parts[parts.length - 1].value += char;\r\n }\r\n else {\r\n parts.push({ escaped: false, value: char });\r\n }\r\n }\r\n }\r\n return parts;\r\n };\r\n /**\r\n * Checks only the pattern parts that are not escaped\r\n */\r\n const patternIncludes = (patternMask, search) => {\r\n return patternRemoveEscapedText(patternMask).indexOf(search) !== -1;\r\n };\r\n /**\r\n * Replaces only the pattern parts that are not escaped\r\n */\r\n const patternReplace = (patternMask, searchValue, replaceValue) => {\r\n return getPatternParts(patternMask)\r\n .map(e => e.escaped ? `'${e.value}'` : e.value.replace(searchValue, _ => replaceValue))\r\n .join('');\r\n };\r\n const patternRemoveEscapedText = (patternMask) => {\r\n return getPatternParts(patternMask)\r\n .filter(e => !e.escaped)\r\n .map(e => e.value)\r\n .join('');\r\n };\r\n const patternStripAndNormalizeEscapedText = (patternMask) => {\r\n return getPatternParts(patternMask)\r\n .map(e => e.escaped ? e.value.replace(/\\\\'/g, \"'\") : e.value)\r\n .join('');\r\n };\n\n const stringIncludes = (str, search) => {\r\n return str.indexOf(search) !== -1;\r\n };\r\n\r\n var stringIncludes$1 = stringIncludes;\n\n /**\r\n * What does it look for in the pattern?\r\n * '(' | '+' | '-'\r\n * What does it remove from the pattern?\r\n * '(' | ')' | '+' | '-'\r\n * What options does it provide?\r\n * - negativeParentheses (if negative value should be wrapped between parentheses)\r\n * - forceSign (is positive values should have a + sign)\r\n * How will it transform the output?\r\n * - Parentheses:\r\n * '-23.58' & '(0.00)' => '(23.58)'\r\n * '-23.58' & '( 0.00 )' => '( 23.58 )'\r\n * '-23.58' & '( 0.00 ) ' => ' ( 23.58 )'\r\n * - Sign:\r\n * '12.34' & '+0.0' => '+12.34'\r\n * '-12.34' & '+0.0' => '-12.34'\r\n *\r\n * <i> If '+' is somewhere in the pattern, it will set the '+' sign for positive numbers\r\n * and same for negative numbers.\r\n * <i> If '-' is somewhere in the pattern, it will place the negative sign in the defined position.\r\n * But it won't still set the sign for positive numbers.\r\n * <i> Checks if we should use parentheses for negative number or if we should prefix with a sign.\r\n * If both are present we default to parentheses.\r\n */\r\n const signRule = (pattern) => {\r\n const patternWithoutEscapedText = patternRemoveEscapedText(pattern);\r\n const negativeParentheses = stringIncludes$1(patternWithoutEscapedText, '(') && stringIncludes$1(patternWithoutEscapedText, ')');\r\n const forceSign = !negativeParentheses && stringIncludes$1(patternWithoutEscapedText, '+');\r\n let outputPatternMask = pattern;\r\n outputPatternMask = patternReplace(outputPatternMask, '(', `'ɵnps'`);\r\n outputPatternMask = patternReplace(outputPatternMask, ')', `'ɵnpe'`);\r\n outputPatternMask = patternReplace(outputPatternMask, /(-|\\+)/, `'ɵs'`);\r\n return [outputPatternMask, { negativeParentheses, forceSign }];\r\n };\r\n\r\n var signRule$1 = signRule;\n\n /**\r\n * Checks if abbreviation is wanted\r\n * <i> Applied only when 'a' is present.\r\n * <i> If 'a' is followed by 'k' | 'm' | 'b' | 't', then, it will force the abbreviation to be the specified\r\n * unit. (e.g. (123456.78, '0,0.00am') => '0.12M')\r\n */\r\n const abbreviationRule = (patternMask) => {\r\n let compactUnit = null; // force abbreviation\r\n let compact = false;\r\n // If it includes 'a' means it should be abbreviated (only if at least includes 'a')\r\n if (patternIncludes(patternMask, 'a')) {\r\n compact = true;\r\n const patternWithoutEscapedText = patternRemoveEscapedText(patternMask);\r\n const abbreviationRegExpResult = patternWithoutEscapedText.match(/a(k|m|b|t)?/);\r\n compactUnit = !!abbreviationRegExpResult ? abbreviationRegExpResult[1] : null;\r\n }\r\n let outputPatternMask = patternMask;\r\n outputPatternMask = patternReplace(outputPatternMask, /a(k|m|b|t)?/, `'ɵa'`);\r\n return [outputPatternMask, { compact, compactUnit, compactAuto: compact && !compactUnit }];\r\n };\r\n\r\n var abbreviationRule$1 = abbreviationRule;\n\n /**\r\n * Faster version of String.prototype.split that only handles splitting in two parts\r\n */\r\n const splitStringInTwoParts = (str, separator) => {\r\n if (!str)\r\n return ['', ''];\r\n const indexOfSearchChar = str.indexOf(separator);\r\n if (indexOfSearchChar === -1) {\r\n return [str, ''];\r\n }\r\n else {\r\n return [str.slice(0, indexOfSearchChar), str.slice(indexOfSearchChar + 1)];\r\n }\r\n };\r\n\r\n var splitStringInTwoParts$1 = splitStringInTwoParts;\n\n const countChars = (string, char) => {\r\n return !string ? 0 : string.split('').filter(stringChar => stringChar === char).length;\r\n };\r\n /**\r\n * Fraction digits (decimals) count rule (minimum and maximum fraction digits)\r\n * <i> Optional fraction digits would go always after the forced ones\r\n */\r\n const decimalPlacesRule = (patternMask) => {\r\n const patternWithoutEscapedText = patternRemoveEscapedText(patternMask);\r\n const patternPrecisionPart = splitStringInTwoParts$1(patternWithoutEscapedText, '.')[1];\r\n let minimumFractionDigits = 0;\r\n let maximumFractionDigits = 0;\r\n if (!!patternPrecisionPart) {\r\n const trimmedPatternPrecisionPart = patternPrecisionPart.trim();\r\n if (stringIncludes$1(trimmedPatternPrecisionPart, '[')) {\r\n // If it contains optional fraction digits\r\n const patternPrecisionPartWithoutClosingBracket = trimmedPatternPrecisionPart.replace(']', '');\r\n // Isolates forced (left) vs optional (right) decimals\r\n const precisionSplitted = splitStringInTwoParts$1(patternPrecisionPartWithoutClosingBracket, '[');\r\n minimumFractionDigits = countChars(precisionSplitted[0], '0');\r\n maximumFractionDigits = minimumFractionDigits + countChars(precisionSplitted[1], '0');\r\n }\r\n else if (stringIncludes$1(trimmedPatternPrecisionPart, '#')) {\r\n // If it contains optional fraction digits marked with '#'\r\n minimumFractionDigits = countChars(trimmedPatternPrecisionPart.split('#')[0], '0');\r\n maximumFractionDigits = trimmedPatternPrecisionPart.length;\r\n }\r\n else if (stringIncludes$1(trimmedPatternPrecisionPart, 'X')) {\r\n // If it contains no-maximum fraction digits marked with 'X'\r\n minimumFractionDigits = countChars(trimmedPatternPrecisionPart.split('X')[0], '0');\r\n maximumFractionDigits = 500;\r\n }\r\n else {\r\n const fractionDigits = countChars(trimmedPatternPrecisionPart.split(' ')[0], '0');\r\n minimumFractionDigits = fractionDigits;\r\n maximumFractionDigits = fractionDigits;\r\n }\r\n }\r\n return { minimumFractionDigits, maximumFractionDigits };\r\n };\r\n\r\n var decimalPlacesRule$1 = decimalPlacesRule;\n\n /**\r\n * Check for optional decimals.\r\n *\r\n * <i> 'optionalDecimals' This would mean that:\r\n * - In case the number (value) HAS decimals (e.g. 55.34), then it would display the fixed amount of defined\r\n * decimals (e.g. '0[.]000' => 3 fixed decimals), but, if the number is an straight integer, then it won't\r\n * display any decimals.\r\n * <i> It could also accept optional decimals afterwards. So for the case '0[.]00##':\r\n * - If it is an integer, displays only an integer: 23 => '23'\r\n * - If it has 1 decimal, displays 2 decimals: 23.4 => '23.40'\r\n * - If it has 3 decimals, displays 3 decimals: 23.456 => '23.456'\r\n */\r\n const optionalDecimalPlacesRule = (patternMask) => {\r\n let optionalFractionDigits = false;\r\n let outputPatternMask = patternMask;\r\n if (patternIncludes(patternMask, '[.]')) {\r\n optionalFractionDigits = true;\r\n outputPatternMask = patternReplace(outputPatternMask, '[.]', '.');\r\n }\r\n return [outputPatternMask, { optionalFractionDigits }];\r\n };\r\n\r\n var optionalDecimalPlacesRule$1 = optionalDecimalPlacesRule;\n\n /**\r\n * <i> The regExp tests for:\r\n * - 0.00##X\r\n * - 0,0.00##X\r\n * - #.00##X (without leading zeros)\r\n * - #,#.00##X (without leading zeros)\r\n */\r\n const numberPositionRule = (patternMask) => {\r\n const numberPartRegExp = /((((0|#)+,)?(0|#)+(\\.([0#X]|\\[0+\\])+)?){1})/;\r\n return patternReplace(patternMask, numberPartRegExp, `'ɵn'`);\r\n };\r\n /**\r\n * Minimum leading integer digits rule\r\n * This will define the minimum amount of digits on the integer part (left-most grouped zeroes).\r\n * - (12.34, '0000.0') => '0012.3'\r\n * - (12.34, '0000,0.0') => '0,012.3'\r\n * - (0.34, '#.0') => '.3'\r\n * - (1.34, '#.0') => '1.3'\r\n *\r\n * <i> It always pick the left-most amount of zeros, so:\r\n * - If pattern has NO thousands separator ('000.0'), then the amount at the left of the DOT is used.\r\n * - If pattern HAS thousands separator ('00,0.0'), then the amount at the left of the COMMA is used.\r\n * <i> This will remove the integer zero for numbers between 1 and -1 (e.g. 0.23 or -0.5)\r\n * - If pattern integer part is option (0.24, '#.00') => '.24'\r\n */\r\n const minimumIntegerDigitsRule = (patternMask) => {\r\n const patternMaskWithoutEscapedText = patternRemoveEscapedText(patternMask);\r\n const patternMaskIntegerPart = patternMaskWithoutEscapedText.split('.')[0].split(',')[0];\r\n // If it has '#' in the integer part, sets the minimumIntegerDigits to 0\r\n if (/#/g.test(patternMaskIntegerPart)) {\r\n return 0;\r\n }\r\n return (patternMaskIntegerPart.match(/0/g) || []).length;\r\n };\r\n // If sign is not included, put sign at the left of the number\r\n const addSignPositionIfItDoesNotExists = (patternMask) => {\r\n if (stringIncludes$1(patternMask, `'ɵs'`) || stringIncludes$1(patternMask, `'ɵnps'`))\r\n return patternMask;\r\n return patternMask.replace(`'ɵn'`, _ => `'ɵs''ɵn'`);\r\n };\r\n const baseParsePattern = (inputPattern) => {\r\n const resolvedInputPattern = isString$1(inputPattern) && inputPattern || '0,0.##########';\r\n const [patternMaskAfterSignRule, signRules] = signRule$1(resolvedInputPattern);\r\n const [patternMaskAfterAbbreviationRule, abbreviationRules] = abbreviationRule$1(patternMaskAfterSignRule);\r\n const [patternMaskAfterOptionalDecimalPlacesRule, optionalDecimalPlacesRules] = optionalDecimalPlacesRule$1(patternMaskAfterAbbreviationRule);\r\n const outputPatternMask = patternMaskAfterOptionalDecimalPlacesRule;\r\n const outputPatternMaskWithoutEscapedText = patternRemoveEscapedText(outputPatternMask);\r\n const decimalPlacesRules = decimalPlacesRule$1(outputPatternMask);\r\n const minimumIntegerDigits = minimumIntegerDigitsRule(outputPatternMask);\r\n const grouping = outputPatternMaskWithoutEscapedText.indexOf(',') > -1;\r\n const patternMaskAfterHandlingNumberPosition = numberPositionRule(outputPatternMask);\r\n const patternMaskWithEnsuredSignPosition = addSignPositionIfItDoesNotExists(patternMaskAfterHandlingNumberPosition);\r\n const patternMask = patternMaskWithEnsuredSignPosition;\r\n return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, signRules), abbreviationRules), optionalDecimalPlacesRules), decimalPlacesRules), { grouping,\r\n minimumIntegerDigits,\r\n patternMask });\r\n };\r\n const parsePattern = memoize$1(baseParsePattern);\r\n\r\n var parsePattern$1 = parsePattern;\n\n /**\r\n * <i> Checks if value is negative, and removes the sign in case it exists\r\n * Expects: a value as string, with or without the minus sign, AND NOTHING ELSE.\r\n * Returns: same as the input but without the minus sign in case it had.\r\n */\r\n const removeSignIfExists = (valueAsString) => {\r\n return valueAsString[0] === '-' ? valueAsString.slice(1) : valueAsString;\r\n };\r\n\r\n var removeSignIfExists$1 = removeSignIfExists;\n\n /**\r\n * This process only is applied for automatic abbreviation ('a'), and only in the rounding\r\n * bubbling cases where the scale has to be recomputed.\r\n * E.g.\r\n * formatNumber(999960, 0.0a') // Would return '1000.0k' instead of '1.0m' without this rescaling-fix\r\n *\r\n * It only applies rescaling if the absolute value of 'the already scaled and rounded value' (1.87, 'k') is greater or\r\n * equal to 1000, and the abbreviation is not greater or equal to trillion.\r\n *\r\n * <i> After initial scaling, value shouldn't be greater than 1000, unless it is a trillion.\r\n * <i> The resulting decimal part, will be always 0, as this will be executed only on the corner cases,\r\n * that results from rounding bubbling. This is why decimal part is ignored.\r\n */\r\n const rescaleRoundedValue = (value, currentAbbreviationScale, patternRules, options) => {\r\n const { compact, compactAuto } = patternRules;\r\n const { abbreviations } = options.locale;\r\n if (!compact || !compactAuto) {\r\n return [value, currentAbbreviationScale];\r\n }\r\n const scale = createUnitScaleFromLocaleAbbreviations$1(abbreviations);\r\n const [newScaledValue, newScaledValueUnit] = scale.toBest(value, currentAbbreviationScale || '');\r\n return [newScaledValue, newScaledValueUnit];\r\n };\r\n\r\n var rescaleRoundedValue$1 = rescaleRoundedValue;\n\n /**\r\n * If abbreviation is forced, looks for the closest (in terms of power of ten) abbreviation in the current locale\r\n * k === 10 ** 3\r\n * m === 10 ** 6\r\n * b === 10 ** 9\r\n * t === 10 ** 12\r\n */\r\n const resolveForcedAbbreviationUnit = (forcedAbbreviationUnit, abbreviationsFromLocale, value) => {\r\n // Record<AbbreviationSymbol, PowerOfTenExponent>\r\n const forcedScaleMap = { k: 3, m: 6, b: 9, t: 12 };\r\n const targetPowerOfTenExponent = forcedScaleMap[forcedAbbreviationUnit];\r\n const scaleDefinitionFromLocale = (abbreviationsFromLocale === null || abbreviationsFromLocale === void 0 ? void 0 : abbreviationsFromLocale.split('|')) || [];\r\n let closestPowerOfTenWithAvailableAbbreviation = null;\r\n for (let distanceFromTarget = 0; distanceFromTarget < scaleDefinitionFromLocale.length; distanceFromTarget++) {\r\n if (!scaleDefinitionFromLocale[targetPowerOfTenExponent - distanceFromTarget])\r\n continue;\r\n closestPowerOfTenWithAvailableAbbreviation = targetPowerOfTenExponent - distanceFromTarget;\r\n break;\r\n }\r\n if (closestPowerOfTenWithAvailableAbbreviation === null) {\r\n return [value, null];\r\n }\r\n return [\r\n multiplyByPowerOfTen$1(value, -closestPowerOfTenWithAvailableAbbreviation),\r\n scaleDefinitionFromLocale[closestPowerOfTenWithAvailableAbbreviation],\r\n ];\r\n };\r\n const scaleValueWithAbbreviation = (value, patternRules, options) => {\r\n const { compact, compactUnit } = patternRules;\r\n const { abbreviations } = options.locale;\r\n if (!compact)\r\n return [value, null];\r\n if (!!compactUnit) {\r\n return resolveForcedAbbreviationUnit(compactUnit, abbreviations, value);\r\n }\r\n /**\r\n * If abbreviation is automatic, resolves the abbreviation to the best (where the value has\r\n * the fewest numbers before the decimal point, but is still higher than 1).\r\n */\r\n const scale = createUnitScaleFromLocaleAbbreviations$1(abbreviations);\r\n const [scaledValue, localizedUnit] = scale.toBest(value, '');\r\n return [scaledValue, localizedUnit || null];\r\n };\r\n\r\n var scaleValueWithAbbreviation$1 = scaleValueWithAbbreviation;\n\n const roundNumber = (number, precision, roundingFunction) => {\r\n const resolvedPrecision = precision || 0;\r\n const resolvedRoundingFunction = roundingFunction || Math.round;\r\n const scaledValueForRounding = multiplyByPowerOfTen$1(number, resolvedPrecision);\r\n const roundedScaledValue = resolvedRoundingFunction(scaledValueForRounding);\r\n const roundedValue = multiplyByPowerOfTen$1(roundedScaledValue, -resolvedPrecision);\r\n return roundedValue;\r\n };\r\n\r\n var roundNumber$1 = roundNumber;\n\n /**\r\n * The result from toFixed can contain an exponent for big numbers (e.g. 1.12345671234567e+50).\r\n * <!> Only handles positive exponents.\r\n */\r\n const formatPositiveExponentResult = (valueAsString) => {\r\n const [significand, exponent] = splitStringInTwoParts$1(valueAsString, 'e');\r\n const exponentAsNumber = +exponent;\r\n if (exponentAsNumber < 0)\r\n return valueAsString;\r\n const [integerPartOfSignificand, fractionalPartOfSignificand] = splitStringInTwoParts$1(significand, '.');\r\n const numberOfZerosToAdd = exponentAsNumber - fractionalPartOfSignificand.length;\r\n return `${integerPartOfSignificand}${fractionalPartOfSignificand}${stringRepeat$1('0', numberOfZerosToAdd)}`;\r\n };\r\n /**\r\n * The result from toFixed can contain an exponent for small numbers (e.g. 1.123e-87).\r\n * <i> Only handles negative exponents\r\n */\r\n const formatNegativeExponentResult = (value, exponentAsNumber, significandAsString) => {\r\n const negativeExponentAbsoluteValue = Math.abs(exponentAsNumber);\r\n const [integerPartOfSignificand, fractionalPartOfSignificand] = splitStringInTwoParts$1(significandAsString, '.');\r\n const absoluteIntegerPartOfSignificand = integerPartOfSignificand[0] === '-' ? integerPartOfSignificand.slice(1) : integerPartOfSignificand;\r\n let outputIntegerPartOfSignificand = absoluteIntegerPartOfSignificand;\r\n let outputFractionalPartOfSignificand = fractionalPartOfSignificand;\r\n for (let i = 0; i < negativeExponentAbsoluteValue; i += 1) {\r\n // Consider using array.shift\r\n const firstCharInIntegerPart = outputIntegerPartOfSignificand[0] || '';\r\n outputIntegerPartOfSignificand = outputIntegerPartOfSignificand.slice(0, outputIntegerPartOfSignificand.length - 1);\r\n outputFractionalPartOfSignificand = (firstCharInIntegerPart || '0') + outputFractionalPartOfSignificand;\r\n }\r\n return `${value < 0 ? '-' : ''}${outputIntegerPartOfSignificand || 0}.${outputFractionalPartOfSignificand}`;\r\n };\r\n /**\r\n * Like Number.prototype.toString() but excluding the exponential info for small and big numbers.\r\n * e.g.\r\n * Small numbers:\r\n * value: 0.0000000000001234 (1.234e-13)\r\n * toString() => \"1.234e-13\"\r\n * numberToStringWithoutExponent() => \"0.0000000000001234\"\r\n * Big numbers:\r\n * value: 1234123412341230000000 (1.234123412341234e+21)\r\n * toString() => \"1.234123412341234e+21\"\r\n * numberToStringWithoutExponent() => \"1234123412341230000000\"\r\n */\r\n const numberToNonExponentialString = (value) => {\r\n const valueAsString = (value || 0).toString();\r\n const valueAsStringHasExponentialInfo = valueAsString.indexOf('e') >= 0;\r\n if (!valueAsStringHasExponentialInfo)\r\n return valueAsString;\r\n // If the toString returns an exponential number (e.g. 1.23e+28)\r\n const [significand, exponent] = splitStringInTwoParts$1(valueAsString, 'e');\r\n const exponentAsNumber = +exponent;\r\n return exponentAsNumber >= 0\r\n ? formatPositiveExponentResult(valueAsString)\r\n : formatNegativeExponentResult(value, exponentAsNumber, significand);\r\n };\r\n\r\n var numberToNonExponentialString$1 = numberToNonExponentialString;\n\n const addTrailingZerosInFractionalPart = (valueAsString, minimumFractionDigits) => {\r\n const [integerPart, fractionalPart] = splitStringInTwoParts$1(valueAsString, '.');\r\n return `${integerPart}.${fractionalPart + stringRepeat$1('0', minimumFractionDigits - fractionalPart.length)}`;\r\n };\r\n /**\r\n * Implementation of Number.prototype.toFixed() that treats floats more like decimals\r\n *\r\n * Fixes binary rounding issues (eg. (0.615).toFixed(2) === '0.61') that present\r\n * problems for accounting- and finance-related software.\r\n *\r\n * <!> This function should only receive a finite number, never NaN, Infinity or -Infinity\r\n * <i> This function should return always a JS string representation of a number, but without exponent.\r\n * <i> optionalFractionDigits means: from the fractionDigits amount, the ones that are optional.\r\n */\r\n const numberToFixed = (finiteNumber, fractionDigits, roundingFunction, optionalFractionDigits) => {\r\n const valueAsString = numberToNonExponentialString$1(finiteNumber);\r\n const minimumFractionDigits = fractionDigits - (optionalFractionDigits || 0);\r\n const fractionalPartOfValueAsString = splitStringInTwoParts$1(valueAsString, '.')[1];\r\n const targetFractionDigitsAmount = !!fractionalPartOfValueAsString\r\n ? Math.min(Math.max(fractionalPartOfValueAsString.length, minimumFractionDigits), fractionDigits)\r\n : minimumFractionDigits;\r\n const roundedValue = roundNumber$1(finiteNumber, targetFractionDigitsAmount, roundingFunction);\r\n let output = numberToNonExponentialString$1(roundedValue);\r\n // Add trailing zeros if needed\r\n if (!!minimumFractionDigits) {\r\n output = addTrailingZerosInFractionalPart(output, minimumFractionDigits);\r\n }\r\n return output;\r\n };\r\n\r\n var numberToFixed$1 = numberToFixed;\n\n const roundValueAndAddTrailingZeros = (value, patternRules, options) => {\r\n const { rounding } = options;\r\n const { minimumFractionDigits, maximumFractionDigits } = patternRules;\r\n const resolvedRoundingFunction = rounding || Math.round;\r\n const shouldIncludeDecimalPlaces = minimumFractionDigits > 0 || maximumFractionDigits > 0;\r\n if (shouldIncludeDecimalPlaces) {\r\n const optionalDecimalDigitsCount = maximumFractionDigits - minimumFractionDigits;\r\n return numberToFixed$1(value, maximumFractionDigits, resolvedRoundingFunction, optionalDecimalDigitsCount);\r\n }\r\n else {\r\n return numberToFixed$1(value, 0, resolvedRoundingFunction);\r\n }\r\n };\r\n\r\n var roundValueAndAddTrailingZeros$1 = roundValueAndAddTrailingZeros;\n\n const replaceDigitsWithNumeralSystem = (numericString, numeralSystemMap) => {\r\n if (!numeralSystemMap || numeralSystemMap.length !== 10)\r\n return numericString;\r\n const numericStringLength = numericString.length;\r\n let output = '';\r\n for (let numericStringIndex = 0; numericStringIndex < numericStringLength; numericStringIndex++) {\r\n const char = numericString[numericStringIndex];\r\n output += numeralSystemMap[char] || char;\r\n }\r\n return output;\r\n };\r\n\r\n var replaceDigitsWithNumeralSystem$1 = replaceDigitsWithNumeralSystem;\n\n /**\r\n * <i> Add or remove leading zeros\r\n * Expects: a value integer part as string, without the minus sign. And nothing else but a number at the start.\r\n * Returns:\r\n * - The value with the added or removed leading zeros\r\n */\r\n const addOrRemoveLeadingZerosToValue = (valueIntegerPartWithoutSign, patternRules) => {\r\n const { minimumIntegerDigits } = patternRules;\r\n if (minimumIntegerDigits === 0 && +valueIntegerPartWithoutSign < 1 && +valueIntegerPartWithoutSign > -1) {\r\n return '';\r\n }\r\n return valueIntegerPartWithoutSign.length >= minimumIntegerDigits\r\n ? valueIntegerPartWithoutSign\r\n : `${stringRepeat$1('0', minimumIntegerDigits - valueIntegerPartWithoutSign.length)}${valueIntegerPartWithoutSign}`;\r\n };\r\n\r\n var addOrRemoveLeadingZerosToValue$1 = addOrRemoveLeadingZerosToValue;\n\n const addSignInfoToFullFormattedNumber = (fullFormattedValueWithoutSign, isValueNegative, isValueZero, patternRules) => {\r\n const { negativeParentheses, forceSign } = patternRules;\r\n let output = fullFormattedValueWithoutSign;\r\n if (negativeParentheses && isValueNegative) {\r\n output = output.replace(/'ɵ(nps|npe)'/g, match => match === `'ɵnps'` ? '(' : ')');\r\n }\r\n else if (forceSign) {\r\n output = output.replace(`'ɵs'`, isValueNegative ? '-' : isValueZero ? '' : '+');\r\n }\r\n else if (isValueNegative) {\r\n output = output.replace(`'ɵs'`, '-');\r\n }\r\n return output;\r\n };\r\n\r\n var addSignInfoToFullFormattedNumber$1 = addSignInfoToFullFormattedNumber;\n\n /**\r\n * Splits the given number (as string) in the integer and decimal parts.\r\n * Returns:\r\n * [integerPart: string, decimalPart: string]\r\n * <i> The integer part can potentially contain the number sign (-) if it wasn't removed previously.\r\n * <i> It should always return [string, string]\r\n */\r\n const splitNumberIntegerAndDecimalParts = (valueAsString, patternRules) => {\r\n const { optionalFractionDigits } = patternRules;\r\n const [integerPart, decimalPart] = splitStringInTwoParts$1(valueAsString, '.');\r\n // Checks whether optionalDecimalPlaces [.] is enabled and the value is an integer (no decimals)\r\n if (optionalFractionDigits && Number(decimalPart) === 0) {\r\n return [integerPart, ''];\r\n }\r\n return [integerPart, decimalPart];\r\n };\r\n\r\n var splitNumberIntegerAndDecimalParts$1 = splitNumberIntegerAndDecimalParts;\n\n const addThousandsSeparatorToValueIntegerPart = (valueIntegerPartWithLeadingZerosAndWithoutSign, patternRules, options) => {\r\n const { delimiters, digitGroupingStyle } = options.locale;\r\n const { grouping } = patternRules;\r\n if (!grouping || !delimiters.thousands) {\r\n return valueIntegerPartWithLeadingZerosAndWithoutSign;\r\n }\r\n const valueAsString = valueIntegerPartWithLeadingZerosAndWithoutSign;\r\n const thousandsSeparator = delimiters.thousands;\r\n const digitGrouping = !!(digitGroupingStyle === null || digitGroupingStyle === void 0 ? void 0 : digitGroupingStyle.length) ? digitGroupingStyle : [3];\r\n const restDigitGrouping = [...digitGrouping];\r\n let output = '';\r\n let groupingSubIteration = 1;\r\n for (let i = valueAsString.length - 1; i >= 0; i--) {\r\n if (groupingSubIteration === restDigitGrouping[0] && i !== 0) {\r\n output = thousandsSeparator + valueAsString[i] + output;\r\n if (restDigitGrouping.length > 1)\r\n restDigitGrouping.shift();\r\n groupingSubIteration = 1;\r\n }\r\n else {\r\n output = valueAsString[i] + output;\r\n groupingSubIteration += 1;\r\n }\r\n }\r\n return output;\r\n };\r\n\r\n var addThousandsSeparatorToValueIntegerPart$1 = addThousandsSeparatorToValueIntegerPart;\n\n /**\r\n * Applies the localized abbreviation unit to the pattern mask\r\n * <i> If the localized unit is empty (''), it will remove the space between the number and the abbreviation.\r\n * <i> Replaces the single quotes from the abbreviation, to prevent collision with patternMask escaped text.\r\n */\r\n const applyAbbreviationLocalizedUnitToPatternMask = (patternMask, abbreviationLocalizedUnit, hasAbbreviationInPatternMask) => {\r\n if (!hasAbbreviationInPatternMask)\r\n return patternMask;\r\n if (abbreviationLocalizedUnit) {\r\n /**\r\n * If it has abbreviation in the rules, and has a valid unit (e.g. K | M | B | T, or\r\n * other localized one), escapes the single quotes in the localized abbreviation unit and appends to the mask.\r\n */\r\n return patternMask.replace(`'ɵa'`, _ => `'${abbreviationLocalizedUnit.replace(/'/g, _ => \"\\\\'\")}'`);\r\n }\r\n else {\r\n // If it has abbreviation in the rules, but it has no unit, removes the space between abbreviation and number\r\n return patternMask.match(/'ɵn'\\s*'ɵa'/)\r\n // If abbreviation is before\r\n ? patternMask.replace(/\\s*'ɵa'/, '')\r\n // If abbreviation is after\r\n : patternMask.replace(/'ɵa'\\s*/, '');\r\n }\r\n };\r\n\r\n var applyAbbreviationLocalizedUnitToPatternMask$1 = applyAbbreviationLocalizedUnitToPatternMask;\n\n const scaleAndRoundValue = (number, patternRules, options) => {\r\n // If it doesn't have abbreviation, just round the value and add trailing zeros\r\n if (!patternRules.compact) {\r\n const roundedValueAsString = roundValueAndAddTrailingZeros$1(number, patternRules, options);\r\n return [roundedValueAsString, null];\r\n }\r\n // If it has abbreviation, scales the value\r\n const [scaledValue, scaledValueLocalizedUnit] = scaleValueWithAbbreviation$1(number, patternRules, options);\r\n const roundedScaledValue = +roundValueAndAddTrailingZeros$1(scaledValue, patternRules, options);\r\n const [rescaledValue, rescaledValueLocalizedUnit] = rescaleRoundedValue$1(+roundedScaledValue, scaledValueLocalizedUnit, patternRules, options);\r\n const roundedRescaledValueAsStringWithTrailingZeros = roundValueAndAddTrailingZeros$1(rescaledValue, patternRules, options);\r\n return [roundedRescaledValueAsStringWithTrailingZeros, rescaledValueLocalizedUnit];\r\n };\r\n const numberToFormattedNumber = (number, pattern, options) => {\r\n var _a;\r\n const patternRules = parsePattern$1(pattern);\r\n // Ensure always uses a number or default number\r\n const resolvedValue = isFiniteNumber$1(number) ? number : 0;\r\n const [valueAsString, localizedAbbreviationUnit] = scaleAndRoundValue(resolvedValue, patternRules, options);\r\n // Prevents potentially wrong formatting coming from this function\r\n if (valueAsString === 'NaN')\r\n return '';\r\n const isValueNegative = options.signedZero ? number < 0 : +valueAsString < 0;\r\n const isValueZero = options.signedZero ? number === 0 : +valueAsString === 0;\r\n const valueAsStringWithoutSign = removeSignIfExists$1(valueAsString);\r\n const [integerPart, decimalPart] = splitNumberIntegerAndDecimalParts$1(valueAsStringWithoutSign, patternRules);\r\n const valueIntegerPartWithLeadingZeros = addOrRemoveLeadingZerosToValue$1(integerPart, patternRules);\r\n const valueIntegerPartWithThousandsSeparator = addThousandsSeparatorToValueIntegerPart$1(valueIntegerPartWithLeadingZeros, patternRules, options);\r\n const numeralSystemFromLocale = options.locale.numeralSystem;\r\n const integerPartWithNumeralSystem = replaceDigitsWithNumeralSystem$1(valueIntegerPartWithThousandsSeparator, numeralSystemFromLocale);\r\n const decimalPartWithNumeralSystem = replaceDigitsWithNumeralSystem$1(decimalPart, numeralSystemFromLocale);\r\n const fullNumberWithNumeralSystem = (integerPartWithNumeralSystem\r\n + (!!decimalPartWithNumeralSystem ? (((_a = options.locale.delimiters) === null || _a === void 0 ? void 0 : _a.decimal) || '.') + decimalPartWithNumeralSystem : ''));\r\n // Assembling\r\n const patternMaskWithAbbreviation = applyAbbreviationLocalizedUnitToPatternMask$1(patternRules.patternMask, localizedAbbreviationUnit, patternRules.compact);\r\n const patternMaskWithNumber = patternMaskWithAbbreviation.replace(`'ɵn'`, _ => `'${fullNumberWithNumeralSystem.replace(/'/g, \"\\\\'\")}'`);\r\n const patternMaskWithSignInfo = addSignInfoToFullFormattedNumber$1(patternMaskWithNumber, isValueNegative, isValueZero, patternRules);\r\n const cleanPatternMask = patternMaskWithSignInfo.replace(/'ɵ(nps|npe|s|a|n)'/g, '');\r\n const fullFormattedValueWithNormalizedText = patternStripAndNormalizeEscapedText(cleanPatternMask);\r\n return fullFormattedValueWithNormalizedText;\r\n };\r\n\r\n var numberToFormattedNumber$1 = numberToFormattedNumber;\n\n /**\r\n * Basis point format (BPS)\r\n * <i> See https://en.wikipedia.org/wiki/Basis_point\r\n */\r\n const bpsFormatter = {\r\n name: 'bps',\r\n regexps: {\r\n format: /BPS/,\r\n unformat: /BPS/,\r\n },\r\n format: (number, pattern, options) => {\r\n const scaledValue = multiplyByPowerOfTen$1(number, 4);\r\n const patternWithEscapedBPS = patternReplace(pattern, /BPS/, `'ɵBPSɵ'`);\r\n const formatResult = numberToFormattedNumber$1(scaledValue, patternWithEscapedBPS, options);\r\n return formatResult.replace('ɵBPSɵ', 'BPS');\r\n },\r\n unformat: (string, options) => {\r\n const number = formattedStringToNumber$1(string.replace(/\\s?BPS/, ''), options);\r\n return isFiniteNumber$1(number) ? multiplyByPowerOfTen$1(number, -4) : number;\r\n },\r\n };\r\n\r\n var bpsFormatter$1 = bpsFormatter;\n\n const timeFormatter = {\r\n name: 'time',\r\n regexps: {\r\n format: /([0-9]{1,2}:[0-9]{2}) *$/,\r\n unformat: /([0-9]{1,2}:[0-9]{2}) *$/,\r\n },\r\n format: (number) => {\r\n const absoluteValue = Math.abs(number);\r\n const sign = number < 0 ? '-' : '';\r\n const hours = truncateNumber$1(absoluteValue / 3600);\r\n const minutes = truncateNumber$1((absoluteValue - (hours * 3600)) / 60);\r\n const seconds = truncateNumber$1(absoluteValue - (hours * 3600) - (minutes * 60));\r\n return `${sign}${hours}:${(minutes < 10 ? '0' : '') + minutes}:${(seconds < 10 ? '0' : '') + seconds}`;\r\n },\r\n unformat: (string) => {\r\n const isNegative = /^ *-/.test(string);\r\n const stringWithoutSign = string.replace(/^ *-/, '');\r\n const timeArray = stringWithoutSign.split(':').reverse();\r\n let seconds = 0;\r\n seconds += +timeArray[0];\r\n seconds += +timeArray[1] * 60;\r\n seconds += (+timeArray[2] || 0) * 3600;\r\n return isNegative && seconds !== 0 ? -seconds : seconds;\r\n },\r\n };\r\n\r\n var timeFormatter$1 = timeFormatter;\n\n const decimalSuffixes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\r\n const binarySuffixes = ['B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB'];\r\n const allSuffixes = decimalSuffixes.concat(binarySuffixes.slice(1));\r\n /** Avoid collision with BPS format @see formats|bps.ts */\r\n const unformatRegex = `(${allSuffixes.join('|').replace(/B/g, 'B(?!PS)')})`;\r\n const bytesDecimalScale = unitScale({ base: 'B', scale: toObject$1(decimalSuffixes, (unit, unitIndex) => [unit, Math.pow(1000, unitIndex)]) });\r\n const bytesBinaryScale = unitScale({ base: 'B', scale: toObject$1(binarySuffixes, (unit, unitIndex) => [unit, Math.pow(1024, unitIndex)]) });\r\n const bytesFormatter = {\r\n name: 'bytes',\r\n regexps: {\r\n format: /([0\\s]b[bd])|(b[bd][0\\s])/,\r\n unformat: (string, options) => options.type === 'bytes' ? new RegExp(unformatRegex).test(string) : false,\r\n },\r\n format: (number, pattern, options) => {\r\n const scale = patternIncludes(pattern, 'bb') ? bytesBinaryScale : bytesDecimalScale;\r\n const [scaledValue, scaledValueUnit] = scale.toBest(number, 'B');\r\n const patternWithEscapedBytes = patternReplace(pattern, /b[bd]/, `'ɵbytesɵ'`);\r\n const formatResult = numberToFormattedNumber$1(scaledValue, patternWithEscapedBytes, options);\r\n return formatResult.replace('ɵbytesɵ', scaledValueUnit || '');\r\n },\r\n unformat: (string, options) => {\r\n var _a;\r\n const number = formattedStringToNumber$1(string.replace(new RegExp(unformatRegex), ''), options);\r\n const suffix = ((_a = string.match(unformatRegex)) === null || _a === void 0 ? void 0 : _a[0]) || '';\r\n const scale = !!bytesBinaryScale.scaleDefinition.scale[suffix] ? bytesBinaryScale : bytesDecimalScale;\r\n return number ? scale.toBase(number, suffix) : number;\r\n }\r\n };\r\n\r\n var bytesFormatter$1 = bytesFormatter;\n\n const ordinalFormatter = {\r\n name: 'ordinal',\r\n regexps: {\r\n format: /o/,\r\n },\r\n format: (number, pattern, options) => {\r\n var _a, _b;\r\n const localizedOrdinal = ((_b = (_a = options.locale).ordinal) === null || _b === void 0 ? void 0 : _b.call(_a, number)) || '';\r\n const patternWithEscapedOrdinal = patternReplace(pattern, /o/, `'ɵordɵ'`);\r\n const formatResult = numberToFormattedNumber$1(number, patternWithEscapedOrdinal, options);\r\n return formatResult.replace('ɵordɵ', _ => localizedOrdinal);\r\n }\r\n };\r\n\r\n var ordinalFormatter$1 = ordinalFormatter;\n\n const currencySymbolsMap = {\r\n EUR: '€',\r\n USD: '$',\r\n XCD: 'EC$',\r\n AUD: 'A$',\r\n INR: '₹',\r\n BRL: 'R$',\r\n CAD: 'CA$',\r\n XAF: 'FCFA',\r\n CNY: 'CN¥',\r\n NZD: 'NZ$',\r\n XPF: 'CFPF',\r\n GBP: '£',\r\n HKD: 'HK$',\r\n ILS: '₪',\r\n JPY: '¥',\r\n KRW: '₩',\r\n XOF: 'CFA',\r\n MXN: 'MX$',\r\n TWD: 'NT$',\r\n VND: '₫',\r\n };\r\n const currencyFormatter = {\r\n name: 'currency',\r\n regexps: {\r\n format: /(\\$)/,\r\n },\r\n format: (number, pattern, options) => {\r\n var _a;\r\n const currencyFromOptions = (_a = options.currency) === null || _a === void 0 ? void 0 : _a.toUpperCase();\r\n const localizedCurrencySymbol = currencySymbolsMap[currencyFromOptions] || currencyFromOptions || '';\r\n const patternWithEscapedCurrencySymbol = patternReplace(pattern, /\\$/, `'ɵcurrencyɵ'`);\r\n const formatResult = numberToFormattedNumber$1(number, patternWithEscapedCurrencySymbol, options);\r\n return formatResult.replace('ɵcurrencyɵ', _ => localizedCurrencySymbol);\r\n },\r\n };\r\n\r\n var currencyFormatter$1 = currencyFormatter;\n\n const percentageFormatter = {\r\n name: 'percentage',\r\n regexps: {\r\n format: /%!?/,\r\n unformat: /%/,\r\n },\r\n format: (number, pattern, options) => {\r\n const hasNotScalePercentageSymbolInPattern = patternIncludes(pattern, '%!');\r\n const scaledValue = options.scalePercentage && !hasNotScalePercentageSymbolInPattern ? multiplyByPowerOfTen$1(number, 2) : number;\r\n const patternWithEscapedPercentage = patternReplace(pattern, /%!?/, `'ɵ%ɵ'`);\r\n const formatResult = numberToFormattedNumber$1(scaledValue, patternWithEscapedPercentage, options);\r\n return formatResult.replace('ɵ%ɵ', '%');\r\n },\r\n unformat: (string, options) => {\r\n const number = formattedStringToNumber$1(string.replace(/\\s?%/, ''), options);\r\n return number && options.scalePercentage ? multiplyByPowerOfTen$1(number, -2) : number;\r\n },\r\n };\r\n\r\n var percentageFormatter$1 = percentageFormatter;\n\n const exponentialFormatter = {\r\n name: 'exponential',\r\n regexps: {\r\n format: /[eE][+-][0-9]+/,\r\n unformat: /[eE][+-][0-9]+/,\r\n },\r\n format: (number, pattern, options) => {\r\n const exponential = typeof number === 'number' && !isNaNNumber$1(number) ? number.toExponential() : '0e+0';\r\n const parts = splitStringInTwoParts$1(exponential, 'e');\r\n const patternWithoutExponential = patternReplace(pattern, /e[+|-]{1}0/i, '');\r\n const formatResult = numberToFormattedNumber$1(+parts[0], patternWithoutExponential, options);\r\n return formatResult + 'e' + parts[1];\r\n },\r\n unformat: (string, options) => {\r\n var _a;\r\n const value = formattedStringToNumber$1(string.replace(/e[+-]{1}[0-9]{1,3}/i, ''), options);\r\n const powerOfTenExponent = +(((_a = string.match(/e([+-]{1}[0-9]{1,3})/i)) === null || _a === void 0 ? void 0 : _a[1]) || '0');\r\n return isFiniteNumber$1(value) ? multiplyByPowerOfTen$1(value, powerOfTenExponent) : value;\r\n },\r\n };\r\n\r\n var exponentialFormatter$1 = exponentialFormatter;\n\n const BUILT_IN_FORMATTERS = [\r\n percentageFormatter$1,\r\n currencyFormatter$1,\r\n ordinalFormatter$1,\r\n timeFormatter$1,\r\n bytesFormatter$1,\r\n exponentialFormatter$1,\r\n bpsFormatter$1,\r\n ];\r\n\r\n var BUILT_IN_FORMATTERS$1 = BUILT_IN_FORMATTERS;\n\n const roundHalfAwayFromZero = (value) => {\r\n return value >= 0\r\n ? Math.round(value)\r\n : (value % 0.5 === 0) ? Math.floor(value) : Math.round(value);\r\n };\r\n\r\n var roundHalfAwayFromZero$1 = roundHalfAwayFromZero;\n\n const areDelimitersValid = (delimiters) => {\r\n return !!(delimiters === null || delimiters === void 0 ? void 0 : delimiters.decimal)\r\n && isString$1(delimiters === null || delimiters === void 0 ? void 0 : delimiters.thousands)\r\n && delimiters.decimal !== delimiters.thousands;\r\n };\r\n const resolveOptionsLocale = (optionsLocale) => {\r\n const defaultLocale = locale$1;\r\n if (!isObject$1(optionsLocale))\r\n return defaultLocale;\r\n return merge(optionsLocale, {\r\n delimiters: areDelimitersValid(optionsLocale.delimiters) ? optionsLocale.delimiters : defaultLocale.delimiters,\r\n abbreviations: optionsLocale.abbreviations || defaultLocale.abbreviations,\r\n ordinal: optionsLocale.ordinal || defaultLocale.ordinal,\r\n });\r\n };\r\n const resolveRoundingOption = (roundingOption) => {\r\n switch (roundingOption) {\r\n case 'ceil': return Math.ceil;\r\n case 'floor': return Math.floor;\r\n case 'truncate': return truncateNumber$1;\r\n case 'half-up': return Math.round;\r\n case 'half-away-from-zero': return roundHalfAwayFromZero$1;\r\n default: return isFunction$1(roundingOption) ? roundingOption : roundHalfAwayFromZero$1;\r\n }\r\n };\r\n const resolveOptionsFormatters = (optionsFormatters) => {\r\n if (!optionsFormatters)\r\n return BUILT_IN_FORMATTERS$1;\r\n return isFunction$1(optionsFormatters)\r\n ? optionsFormatters(BUILT_IN_FORMATTERS$1)\r\n : [...optionsFormatters, ...BUILT_IN_FORMATTERS$1];\r\n };\r\n const resolveFormatOptions = (formatOptions) => {\r\n var _a, _b, _c;\r\n const options = formatOptions || {};\r\n const resolvedRoundingFunction = resolveRoundingOption(options.rounding);\r\n const resolvedLocale = resolveOptionsLocale(options.locale);\r\n const resolvedFormatters = resolveOptionsFormatters(options.formatters);\r\n return {\r\n defaultPattern: options.defaultPattern || '0,0.##########',\r\n nullFormat: options.nullFormat || '',\r\n nanFormat: options.nanFormat,\r\n zeroFormat: options.zeroFormat,\r\n locale: resolvedLocale,\r\n rounding: resolvedRoundingFunction,\r\n type: options.type,\r\n scalePercentage: (_a = options.scalePercentage) !== null && _a !== void 0 ? _a : true,\r\n trim: (_b = options.trim) !== null && _b !== void 0 ? _b : true,\r\n formatters: resolvedFormatters,\r\n currency: options.currency,\r\n signedZero: !!options.signedZero,\r\n nonBreakingSpace: (_c = options.nonBreakingSpace) !== null && _c !== void 0 ? _c : false,\r\n };\r\n };\r\n\r\n var resolveFormatOptions$1 = resolveFormatOptions;\n\n const getUnformatFunctionIfMatch = (input, resolvedOptions) => {\r\n for (const formatter of resolvedOptions.formatters) {\r\n const matcher = formatter.regexps.unformat;\r\n if (!matcher)\r\n continue;\r\n const matcherResult = isFunction$1(matcher) ? matcher(input, resolvedOptions) : !!input.match(matcher);\r\n if (matcherResult)\r\n return formatter.unformat;\r\n }\r\n };\r\n const parse$2 = (input, options) => {\r\n const resolvedOptions = resolveFormatOptions$1(options);\r\n let value;\r\n if (isNil$1(input) || isNaNNumber$1(input)) {\r\n value = null;\r\n }\r\n else if (typeof input === 'number') {\r\n // Handles negative zero\r\n value = input === 0 ? 0 : input;\r\n }\r\n else if (typeof input === 'string') {\r\n if (resolvedOptions.zeroFormat && input === resolvedOptions.zeroFormat) {\r\n value = 0;\r\n }\r\n else if (resolvedOptions.nullFormat && input === resolvedOptions.nullFormat) {\r\n value = null;\r\n }\r\n else {\r\n // Removes non-breaking spaces if they exists\r\n const inputStringWithNormalSpaces = input.replace(/\\u00A0/, ' ');\r\n const unformatFunctionFromFormatters = getUnformatFunctionIfMatch(inputStringWithNormalSpaces, resolvedOptions);\r\n const unformatFunction = unformatFunctionFromFormatters || formattedStringToNumber$1;\r\n value = unformatFunction(inputStringWithNormalSpaces, resolvedOptions);\r\n }\r\n }\r\n else {\r\n const result = +input;\r\n value = result === 0 ? result : (result || null);\r\n }\r\n return value;\r\n };\r\n\r\n var parse$1$1 = parse$2;\n\n /**\r\n * @example\r\n * ```javascript\r\n * parse('1,250.48')\r\n * //=> 1250.48\r\n * parse('10 %')\r\n * //=> 0.1\r\n * parse('1 000,582', { locale: fr })\r\n * //=> 1000.582\r\n * ```\r\n * Parse the given numeric-string applying the provided options.\r\n *\r\n * options:\r\n * ```typescript\r\n * {\r\n * nullFormat?: string;\r\n * nanFormat?: string;\r\n * zeroFormat?: string;\r\n * defaultPattern?: string;\r\n * rounding?: 'truncate' | 'ceil' | 'floor' | 'round' | ((scaledValueForRounding: number) => number);\r\n * locale?: NumerableLocale;\r\n * type?: string;\r\n * scalePercentage?: boolean;\r\n * formatters?: NumerableFormatter[] | ((builtInFormatters: NumerableFormatter[]) => NumerableFormatter[]);\r\n * }\r\n * ```\r\n *\r\n * @param string string: The numeric-string to parse (e.g. **'10 %'**)\r\n * @param options options: The options used to parse the numeric-string\r\n * ```typescript\r\n * {\r\n * nullFormat?: string;\r\n * nanFormat?: string;\r\n * zeroFormat?: string;\r\n * defaultPattern?: string;\r\n * rounding?: 'truncate' | 'ceil' | 'floor' | 'round' | ((scaledValueForRounding: number) => number);\r\n * locale?: NumerableLocale;\r\n * type?: string;\r\n * scalePercentage?: boolean;\r\n * formatters?: NumerableFormatter[] | ((builtInFormatters: NumerableFormatter[]) => NumerableFormatter[]);\r\n * }\r\n * ```\r\n */\r\n const parse = (string, options) => {\r\n return parse$1$1(string, options);\r\n };\r\n\r\n var parse$1 = parse;\n\n /**\r\n * @example\r\n * ```javascript\r\n * round(12.687, 2)\r\n * //=> 12.69\r\n * round(12.687)\r\n * //=> 13\r\n * round(12.687, 2, Math.floor)\r\n * //=> 12.68\r\n * ```\r\n * Rounds the given number to the specified amount of decimal places.\r\n *\r\n * - The **default precision** is 0.\r\n * - The **default roundingFunction** is Math.round.\r\n *\r\n * @param number number: The number to round (e.g. **10.23**)\r\n * @param precision precision: The desired amount of decimal places (e.g. **2**)\r\n * @param roundingFunction roundingFunction: The function applied for rounding (e.g. **Math.floor**)\r\n * */\r\n const round = (number, precision, roundingFunction) => {\r\n return roundNumber$1(number, precision, roundingFunction);\r\n };\r\n\r\n var round$1 = round;\n\n const getFormatFunctionIfMatch = (pattern, resolvedOptions) => {\r\n const patternWithoutEscapedText = patternRemoveEscapedText(pattern);\r\n for (const formatter of resolvedOptions.formatters) {\r\n const matcher = formatter.regexps.format;\r\n if (!matcher)\r\n continue;\r\n const matcherResult = isFunction$1(matcher) ? matcher(pattern, resolvedOptions) : !!patternWithoutEscapedText.match(matcher);\r\n if (matcherResult)\r\n return formatter.format;\r\n }\r\n };\r\n const format$1 = (value, pattern, options) => {\r\n var _a;\r\n try {\r\n const resolvedValue = isString$1(value) ? parseFloat(value) : value;\r\n const resolvedOptions = resolveFormatOptions$1(options);\r\n const resolvedPattern = pattern || resolvedOptions.defaultPattern;\r\n let output;\r\n if (resolvedValue === Infinity || resolvedValue === -Infinity) {\r\n output = resolvedValue > 0 ? '∞' : '-∞';\r\n }\r\n else if (isNaNNumber$1(resolvedValue)) {\r\n return isString$1(resolvedOptions.nanFormat)\r\n ? resolvedOptions.nanFormat\r\n : (isString$1(resolvedOptions.nullFormat) ? resolvedOptions.nullFormat : '');\r\n }\r\n else if (isNil$1(resolvedValue)) {\r\n output = isString$1(resolvedOptions.nullFormat) ? resolvedOptions.nullFormat : '';\r\n }\r\n else if (resolvedValue === 0 && isString$1(resolvedOptions.zeroFormat)) {\r\n output = resolvedOptions.zeroFormat;\r\n }\r\n else {\r\n // <!> Here value should always be a number\r\n const resolvedValueAsNumber = resolvedValue || 0;\r\n const formatFunctionFromFormatters = getFormatFunctionIfMatch(resolvedPattern, resolvedOptions);\r\n const resolvedFormatFunction = formatFunctionFromFormatters || numberToFormattedNumber$1;\r\n output = resolvedFormatFunction(resolvedValueAsNumber, resolvedPattern, resolvedOptions);\r\n }\r\n // Ensures that it always returns an string\r\n output = isString$1(output) ? output : '';\r\n // Replaces spaces with non-breaking spaces if needed\r\n output = resolvedOptions.nonBreakingSpace\r\n ? output.replace(/ /g, _ => '\\u00A0')\r\n : output;\r\n // Trims the output if needed\r\n output = resolvedOptions.trim ? output.trim() : output;\r\n return output;\r\n }\r\n catch (_error) {\r\n return ((_a = options) === null || _a === void 0 ? void 0 : _a._errorFormat) || '';\r\n }\r\n };\r\n\r\n var format$1$1 = format$1;\n\n function format(number, arg2, arg3) {\r\n const pattern = isString$1(arg2) ? arg2 : null;\r\n const options = isObject$1(arg2) ? arg2 : (isObject$1(arg3) ? arg3 : {});\r\n return format$1$1(number, pattern, options);\r\n }\r\n const createFormatFunction = (options) => {\r\n const baseOptions = merge(options, {\r\n locale: isFunction$1(options.locale) ? options.locale() : options.locale,\r\n });\r\n return ((value, arg2, arg3) => {\r\n const pattern = isString$1(arg2) ? arg2 : null;\r\n const optionsFromArguments = isObject$1(arg2) ? arg2 : (isObject$1(arg3) ? arg3 : {});\r\n return format$1$1(value, pattern, merge(baseOptions, optionsFromArguments));\r\n });\r\n };\r\n format.withOptions = createFormatFunction;\n\n const unique = (arr) => {\r\n if (!arr)\r\n return [];\r\n return arr.filter((value, index, self) => self.indexOf(value) === index);\r\n };\r\n\r\n var unique$1 = unique;\n\n // <i> Extracted from https://stackoverflow.com/questions/12006095/javascript-how-to-check-if-character-is-rtl\r\n const leftToRightMark = '\\u200e';\r\n const rtlCharsRanges = '\\u0591-\\u07FF\\u200F\\u202B\\u202E\\uFB1D-\\uFDFD\\uFE70-\\uFEFC';\r\n const rtlDirCheck = new RegExp('^[^' + rtlCharsRanges + ']*?[' + rtlCharsRanges + ']');\r\n const isRTL = (string) => rtlDirCheck.test(string);\r\n const appendLeftToRightMarkIfIsRTL = (string) => isRTL(string) ? string + leftToRightMark : string;\r\n // const languagesWith4DigitsGroupingStyle = ['zh', 'yue', 'ko', 'ja'];\r\n const languagesWith4DigitsGroupingStyle = ['yue', 'ko', 'ja']; //***\r\n const toLocaleStringSupportsOptions = () => {\r\n return typeof Intl === 'object' && !!Intl && typeof Intl.NumberFormat === 'function';\r\n };\r\n const getNumeralSystemDigits = (languageTag) => {\r\n try {\r\n const localizedNumber = (1234567890).toLocaleString(languageTag, { useGrouping: false });\r\n const lookupObject = {};\r\n const repeatedChar = localizedNumber.split('').find((char) => {\r\n if (lookupObject[char])\r\n return true;\r\n lookupObject[char] = true;\r\n });\r\n const digitsWithoutGroupingDelimiters = repeatedChar\r\n ? localizedNumber.replace(new RegExp(escapeRegexString$1(repeatedChar || ''), 'g'), '')\r\n : localizedNumber;\r\n const digitsAsArray = digitsWithoutGroupingDelimiters.split('');\r\n const sortedDigits = [digitsAsArray[digitsAsArray.length - 1], ...digitsAsArray.slice(0, -1)];\r\n return sortedDigits.join('');\r\n }\r\n catch (_err) {\r\n return null;\r\n }\r\n };\r\n const getGroupingAndFractionDelimiters = (languageTag, digits) => {\r\n try {\r\n const localizedNumber = (12345678.123).toLocaleString(languageTag);\r\n const localizedNumberWithoutDigits = localizedNumber.replace(new RegExp(`[${escapeRegexString$1(digits)}]`, 'g'), '');\r\n const [groupingDelimiter = ',', fractionDelimiter = '.'] = unique$1(localizedNumberWithoutDigits.split(''));\r\n return [groupingDelimiter, fractionDelimiter];\r\n }\r\n catch (_err) {\r\n return null;\r\n }\r\n };\r\n const getGroupingStyle = (languageTag, groupingDelimiter) => {\r\n // <i> Handle '4 digits' grouping style for some asian countries (not CLDR)\r\n if (languagesWith4DigitsGroupingStyle.some(language => languageTag.indexOf(language) === 0))\r\n return [4];\r\n try {\r\n const result = [];\r\n let subIterationIndex = 0;\r\n (100000000000).toLocaleString(languageTag).split('').reverse().forEach((digitOrGroupingDelimiter) => {\r\n if (digitOrGroupingDelimiter === groupingDelimiter) {\r\n result.push(subIterationIndex);\r\n subIterationIndex = 0;\r\n }\r\n else {\r\n subIterationIndex += 1;\r\n }\r\n });\r\n let resultIndex = result.length;\r\n while (resultIndex--) {\r\n if (result[resultIndex] === result[resultIndex - 1])\r\n result.pop();\r\n else\r\n break;\r\n }\r\n return result;\r\n }\r\n catch (_err) {\r\n return null;\r\n }\r\n };\r\n const getAbbreviations = (languageTag, digits, type) => {\r\n try {\r\n if (!toLocaleStringSupportsOptions())\r\n return null;\r\n const intlFormatOptions = { notation: 'compact', useGrouping: false, compactDisplay: type };\r\n const [digitOfZero, digitOfOne, digitOfTwo] = digits.split('');\r\n let abbreviations = '';\r\n for (let i = 1; i < 50; i++) {\r\n const abbreviationResultForOne = (+(1 + stringRepeat$1('0', i))).toLocaleString(languageTag, intlFormatOptions);\r\n if (new RegExp(`^${digitOfOne}[^${digitOfZero}]+$`).test(abbreviationResultForOne)) {\r\n if (type === 'long') {\r\n const abbreviationResultForTwo = (+(2 + stringRepeat$1('0', i))).toLocaleString(languageTag, intlFormatOptions);\r\n const abbreviationOne = abbreviationResultForOne.replace(new RegExp(`${digitOfOne}`, 'g'), '').trim();\r\n const abbreviationTwo = abbreviationResultForTwo.replace(new RegExp(`${digitOfTwo}`, 'g'), '').trim();\r\n abbreviations += '|' + appendLeftToRightMarkIfIsRTL(abbreviationOne) + ':::' + appendLeftToRightMarkIfIsRTL(abbreviationTwo);\r\n }\r\n else {\r\n const abbreviation = abbreviationResultForOne.replace(new RegExp(`${digitOfOne}`, 'g'), '').trim();\r\n abbreviations += '|' + appendLeftToRightMarkIfIsRTL(abbreviation);\r\n }\r\n }\r\n else {\r\n abbreviations += '|';\r\n }\r\n }\r\n // Remove trailing pipes '|'\r\n let result = abbreviations;\r\n let resultIndex = result.length;\r\n while (resultIndex--) {\r\n if (result[resultIndex] === '|')\r\n result = result.slice(0, -1);\r\n else\r\n break;\r\n }\r\n return result;\r\n }\r\n catch (_err) {\r\n return null;\r\n }\r\n };\r\n const baseGetLocaleFromPlatform = (languageTag) => {\r\n const resolvedLanguageTag = languageTag || 'en';\r\n const digits = getNumeralSystemDigits(resolvedLanguageTag);\r\n const resolvedDigits = digits || '0123456789';\r\n const delimiters = getGroupingAndFractionDelimiters(resolvedLanguageTag, resolvedDigits);\r\n const [groupingDelimiter, fractionDelimiter] = !!delimiters && delimiters.length >= 2 ? delimiters : [',', '.'];\r\n const groupingStyle = getGroupingStyle(resolvedLanguageTag, groupingDelimiter);\r\n const shortAbbreviations = getAbbreviations(resolvedLanguageTag, resolvedDigits, 'short');\r\n const longAbbreviations = getAbbreviations(resolvedLanguageTag, resolvedDigits, 'long');\r\n return {\r\n _abbreviationsLong: longAbbreviations || locale$1.abbreviations,\r\n code: resolvedLanguageTag,\r\n delimiters: { thousands: groupingDelimiter, decimal: fractionDelimiter },\r\n abbreviations: shortAbbreviations || locale$1.abbreviations,\r\n digitGroupingStyle: !!(groupingStyle === null || groupingStyle === void 0 ? void 0 : groupingStyle.length) ? groupingStyle : undefined,\r\n numeralSystem: digits !== '0123456789' ? digits === null || digits === void 0 ? void 0 : digits.split('').map(appendLeftToRightMarkIfIsRTL) : undefined,\r\n ordinal: locale$1.ordinal,\r\n };\r\n };\r\n const getLocaleFromPlatform$2 = memoize$1(baseGetLocaleFromPlatform);\r\n\r\n var getLocaleFromPlatform$1$1 = getLocaleFromPlatform$2;\n\n /**\r\n * Given a language tag (e.g. '**zh**' | '**es**' | '**fr**' | '**en-IN**' | '**zh-Hans**'), returns a NumerableLocale\r\n * object extracted from the platform Intl.NumberFormat behavior.\r\n *\r\n * This locale object can be used in the numerable functions that support i18n (*format* and *parse*).\r\n * Example:\r\n * ```javascript\r\n * format(12345, '0,0.00', { locale: getLocaleFromPlatform('fr') })\r\n * ```\r\n *\r\n * <i> Take into account that the returned locale is not complete, and some features like\r\n * 'ordinal formatting' won't work. Use this feature only for simple applications that don't require\r\n * full support from numeral, and don't target legacy browsers.\r\n */\r\n const getLocaleFromPlatform = (languageTag) => {\r\n return getLocaleFromPlatform$1$1(languageTag);\r\n };\r\n\r\n var getLocaleFromPlatform$1 = getLocaleFromPlatform;\n\n var numerable = {\n __proto__: null,\n format,\n getLocaleFromPlatform: getLocaleFromPlatform$1,\n parse: parse$1,\n round: round$1\n };\n\n // Extend\r\n Object.assign(ew$1, numerable);\n\n})(ew, jQuery, luxon);\n"],"mappings":"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","ignoreList":[]}