@resolveio/client-lib-core 21.0.38 → 21.0.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
import*as i0 from"@angular/core";import{Injectable,HostListener,Input,Component,ViewChild,Directive,ChangeDetectionStrategy,EventEmitter,Output,ViewChildren,Pipe,ElementRef,NgModule,Optional,ViewEncapsulation,InjectionToken,Inject,HostBinding}from"@angular/core";import{BehaviorSubject,Subject,fromEvent,merge,Observable,of}from"rxjs";import*as i1$3 from"ngx-device-detector";import{DeviceDetectorService}from"ngx-device-detector";import*as i2 from"@angular/forms";import{UntypedFormControl,Validators,FormsModule,ReactiveFormsModule}from"@angular/forms";import*as i1 from"ngx-toastr";import{ToastrModule}from"ngx-toastr";import moment from"moment-timezone";import{unpack,pack}from"msgpackr";import{finalize,map}from"rxjs/operators";import{detailedDiff}from"deep-object-diff";import moment$1 from"moment";import*as CryptoJS from"crypto-js";import*as i1$1 from"@angular/router";import{RouterModule}from"@angular/router";import*as i4 from"@angular/common/http";import{provideHttpClient,withInterceptorsFromDi}from"@angular/common/http";import*as i1$2 from"@ng-bootstrap/ng-bootstrap";import{NgbTooltipModule,NgbModule,NgbAccordionModule}from"@ng-bootstrap/ng-bootstrap";import*as i7 from"@angular/common";import{CommonModule}from"@angular/common";import*as i5 from"@resolveio/client-lib-ng-select";import{NgSelectModule,NG_SELECT_STICKY_ADAPTER}from"@resolveio/client-lib-ng-select";import*as i6 from"@resolveio/client-lib-date-picker";import{RioDatePickerModule,RIO_DATE_PICKER_CONFIG}from"@resolveio/client-lib-date-picker";import{UserAgentApplication}from"msal";import{BrowserAnimationsModule}from"@angular/platform-browser/animations";import*as i1$4 from"@angular/platform-browser";import*as i7$1 from"ngx-file-drop";import{NgxFileDropModule}from"ngx-file-drop";import*as i8 from"@resolveio/client-lib-pdf-viewer";import{PdfViewerModule}from"@resolveio/client-lib-pdf-viewer";class CoreService{isDevice=new BehaviorSubject(!1);fullScreen=new BehaviorSubject(!1);fsActivated=new BehaviorSubject(!1);hasConnected=new BehaviorSubject(!1);navbarModuleData=new BehaviorSubject({title:"",module:"",description:"",description_name:"",tabs:[]});hasStatusMessage=new BehaviorSubject(!1);alertData=new BehaviorSubject({type:"",message:"",timer:0,showing:!1});isInvalidSW=new BehaviorSubject(!1);environment=new BehaviorSubject(null);client=new BehaviorSubject("");standardProgram=new BehaviorSubject(!1);navTabs=new BehaviorSubject([]);tourStops=new BehaviorSubject([]);tourStarted=new BehaviorSubject(!1);isDemo=new BehaviorSubject(!1);isLoggingOut=new BehaviorSubject(!1);constructor(){}setFullScreen(t){this.fullScreen.next(t)}setFsActivated(t){this.fsActivated.next(t)}setHasConnected(t){this.hasConnected.next(t)}setNavbarModuleData(t){const e=t.tabs.filter(t=>null===t.params).concat(t.tabs.filter(t=>null!==t.params)),n={...t,tabs:e};Promise.resolve().then(()=>this.navbarModuleData.next(n))}setHasStatusMessage(t){this.hasStatusMessage.next(t)}setIsDevice(t){this.isDevice.next(t)}setIsInvalidSW(t){this.isInvalidSW.next(t)}setEnvironment(t){this.environment.next(t)}setClient(t){this.client.next(t)}setStandardProgram(t){this.standardProgram.next(t)}setNavTabs(t){const e=Array.isArray(t)?t.slice():t;Promise.resolve().then(()=>this.navTabs.next(e))}setTourStops(t){this.tourStops.next(t)}setTourStarted(t){this.tourStarted.next(t)}setDemo(t){this.isDemo.next(t)}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:CoreService,deps:[],target:i0.ɵɵFactoryTarget.Injectable});static"ɵprov"=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:CoreService,providedIn:"root"})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:CoreService,decorators:[{type:Injectable,args:[{providedIn:"root"}]}],ctorParameters:()=>[]});class ResizeService{get onResize$(){return this.resizeSubject.asObservable()}resizeSubject;subscription;constructor(){this.resizeSubject=new Subject,"undefined"!=typeof window&&(this.subscription=fromEvent(window,"resize").subscribe(t=>this.onResize(t)))}onResize(t){this.resizeSubject.next(t.target)}ngOnDestroy(){this.subscription&&this.subscription.unsubscribe()}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:ResizeService,deps:[],target:i0.ɵɵFactoryTarget.Injectable});static"ɵprov"=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:ResizeService})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:ResizeService,decorators:[{type:Injectable}],ctorParameters:()=>[]});class AlertService{_toastr;constructor(t){this._toastr=t}clearAlert(t){t?this._toastr.clear(t):this._toastr.clear()}registerTapToClear(t){return t&&t.onTap&&t.onTap.subscribe(()=>this._toastr.clear(t.toastId)),t}setAlert(t,e,n=5e3){return"success"===t?n?this.registerTapToClear(this._toastr.success(e,"Success",{timeOut:n,tapToDismiss:!0})):this.registerTapToClear(this._toastr.success(e,"Success",{disableTimeOut:!0,tapToDismiss:!0})):"info"===t?n?this.registerTapToClear(this._toastr.info(e,"Info",{timeOut:n,tapToDismiss:!0})):this.registerTapToClear(this._toastr.info(e,"Info",{disableTimeOut:!0,tapToDismiss:!0})):"warning"===t?n?this.registerTapToClear(this._toastr.warning(e,"Warning",{timeOut:n,tapToDismiss:!0})):this.registerTapToClear(this._toastr.warning(e,"Warning",{disableTimeOut:!0,tapToDismiss:!0})):"error"===t?n?this.registerTapToClear(this._toastr.error(e,"Error",{timeOut:n,tapToDismiss:!0})):this.registerTapToClear(this._toastr.error(e,"Error",{disableTimeOut:!0,tapToDismiss:!0})):"update"===t?this.registerTapToClear(this._toastr.warning(e,"Update",{disableTimeOut:!0,tapToDismiss:!0})):void 0}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:AlertService,deps:[{token:i1.ToastrService}],target:i0.ɵɵFactoryTarget.Injectable});static"ɵprov"=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:AlertService})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:AlertService,decorators:[{type:Injectable}],ctorParameters:()=>[{type:i1.ToastrService}]});class LocalStorageService{get(t){return"undefined"==typeof localStorage?null:localStorage.getItem(t)}set(t,e){"undefined"!=typeof localStorage&&localStorage.setItem(t,e)}remove(t){"undefined"!=typeof localStorage&&localStorage.removeItem(t)}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:LocalStorageService,deps:[],target:i0.ɵɵFactoryTarget.Injectable});static"ɵprov"=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:LocalStorageService,providedIn:"root"})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:LocalStorageService,decorators:[{type:Injectable,args:[{providedIn:"root"}]}]});class SocketService{_storage;debug=!1;reconnectInterval=1e3;timeoutInterval=5e3;timeout=null;readyState;readyState$=new BehaviorSubject(0);protocols=[];ws=null;url;timezone;pingInterval=null;pongTimeout=null;pingIntervalTime=15e3;pongTimeoutTime=12e3;lastActivity=Date.now();missedPongs=0;maxMissedPongs=3;wakeReconnectThreshold=3e5;focusReconnectDebounce=null;onopen=t=>{};onclose=t=>{};onconnecting=()=>{};onmessage=t=>{};onerror=t=>{};constructor(t){this._storage=t,"undefined"!=typeof document&&document.addEventListener("visibilitychange",this.handleVisibilityChange),"undefined"!=typeof window&&window.addEventListener("focus",this.handleWindowFocus)}openSocket(t,e){this.url=t.WS_URL,this.protocols=e,this.timezone=t.TZ_CLIENT,this.connect()}onOpenHandler=t=>{this.timeout&&(clearTimeout(this.timeout),this.timeout=null),this.log(new Date,"WS","onopen",this.url),this.readyState=WebSocket.OPEN,this.readyState$.next(this.readyState),this.recordActivity(),this.onopen(t),this.startPinging()};onCloseHandler=t=>{this.ws&&this.readyState!==WebSocket.CLOSED&&(this.timeout&&(clearTimeout(this.timeout),this.timeout=null),this.ws.removeEventListener("open",this.onOpenHandler),this.ws.removeEventListener("close",this.onCloseHandler),this.ws.removeEventListener("message",this.onMessageHandler),this.ws.removeEventListener("error",this.onErrorHandler),this.ws=null,this.readyState=WebSocket.CLOSED,this.readyState$.next(this.readyState),this.log(new Date,"WS","onclose",this.url),this.onclose(t),setTimeout(()=>this.connect(),this.reconnectInterval),this.stopPinging())};onMessageHandler=t=>{if(this.recordActivity(),"pong"===t.data)return void this.log(new Date,"WS","pong received");if("ping"===t.data)return this.log(new Date,"WS","ping received"),void this.send("pong");const e=(t,e=0,n)=>{const o=void 0!==n?new Uint8Array(t,e,n):new Uint8Array(t,e);try{let t=unpack(o);t=this.convertUTCDateToLocalDate(t),this.onmessage(t)}catch(t){this.log(new Date,"WS","failed to unpack payload",t);try{const t=(new TextDecoder).decode(o),e=JSON.parse(t),n=this.convertUTCDateToLocalDate(e);this.onmessage(n)}catch(t){this.log(new Date,"WS","unable to fallback decode payload",t)}}};if(t.data instanceof ArrayBuffer)e(t.data);else if(ArrayBuffer.isView(t.data)){const n=t.data;e(n.buffer,n.byteOffset,n.byteLength)}else if(t.data instanceof Blob)t.data.arrayBuffer().then(t=>e(t)).catch(t=>this.log(new Date,"WS","failed to decode blob payload",t));else if("string"==typeof t.data)try{const e=JSON.parse(t.data),n=this.convertUTCDateToLocalDate(e);this.onmessage(n)}catch(e){this.log(new Date,"WS","failed to parse text payload",e),this.onmessage(this.convertUTCDateToLocalDate(t.data))}else this.log(new Date,"WS","unsupported message type",typeof t.data,t.data)};onErrorHandler=t=>{this.log(new Date,"WS","onerror",this,t),this.onerror(t),this.reconnect()};connect(){!this.ws&&this.readyState!==WebSocket.CONNECTING&&this._storage.get("accessToken")&&(this.readyState=WebSocket.CONNECTING,this.readyState$.next(this.readyState),this.timeout&&clearTimeout(this.timeout),this.ws=new WebSocket(this.url,this.protocols),this.ws.binaryType="arraybuffer",this.onconnecting(),this.log(new Date,"WS","attempt-connect",this.url),this.timeout=setTimeout(()=>{this.log(new Date,"WS","connection-timeout",this.url),this.close()},this.timeoutInterval),this.ws.onopen=this.onOpenHandler,this.ws.onclose=this.onCloseHandler,this.ws.onmessage=this.onMessageHandler,this.ws.onerror=this.onErrorHandler)}convertUTCDateToLocalDate(t){if(Array.isArray(t))return t.map(t=>this.convertUTCDateToLocalDate(t));if(t&&"object"==typeof t)return Object.keys(t).reduce((e,n)=>(e[n]=this.convertUTCDateToLocalDate(t[n]),e),t);if("string"==typeof t){if(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?Z$/.test(t))return new Date(t)}return t}clearPongTimeout(){this.pongTimeout&&(clearTimeout(this.pongTimeout),this.pongTimeout=null)}recordActivity(){this.lastActivity=Date.now(),this.missedPongs=0,this.clearPongTimeout()}schedulePongTimeout(){this.clearPongTimeout(),this.pongTimeout=setTimeout(()=>{this.handleMissedPong()},this.pongTimeoutTime)}handleMissedPong(){this.pongTimeout=null,this.missedPongs++,this.log(new Date,"WS","pong not received",this.missedPongs,"/",this.maxMissedPongs),this.missedPongs>=this.maxMissedPongs&&(this.log(new Date,"WS","max missed pongs reached, closing connection"),this.reconnect())}startPinging(){this.stopPinging(),this.pingInterval=setInterval(()=>{if(!this.isWebSocketActive())return void this.reconnect();Date.now()-this.lastActivity<this.pingIntervalTime||this.pongTimeout||this.send("ping")&&this.schedulePongTimeout()},this.pingIntervalTime)}stopPinging(){this.pingInterval&&(clearInterval(this.pingInterval),this.pingInterval=null),this.clearPongTimeout(),this.missedPongs=0}convertDatesToUTC(t,e=new WeakSet){"object"!=typeof t||null===t||e.has(t)||(e.add(t),Object.keys(t).forEach(n=>{t[n]instanceof Date?t[n]=moment(t[n]).utc().toDate():"object"==typeof t[n]&&null!==t[n]&&this.convertDatesToUTC(t[n],e)}))}send(...t){if(!this.isWebSocketActive())return this.log(new Date,"WS","send error",this.readyState),this.reconnect(),!1;t.forEach(t=>this.convertDatesToUTC(t));const e=1===t.length?t[0]:t;if("string"==typeof e)this.ws.send(e);else{const t=pack(e);this.ws.send(t)}return!0}close(){return!!this.ws&&(this.log(new Date,"WS","closing socket"),this.readyState=WebSocket.CLOSING,this.readyState$.next(this.readyState),this.ws.close(),!0)}reconnect(){this.log(new Date,"WS","reconnect",this.readyState),this.readyState!==WebSocket.CONNECTING&&this.close()}getBufferAmount(){return this.ws?this.ws.bufferedAmount:20480}log(...t){this.debug&&console.log(...t)}handleVisibilityChange=()=>{"visible"===document.visibilityState&&this.handleWindowFocus()};handleWindowFocus=()=>{this.focusReconnectDebounce&&clearTimeout(this.focusReconnectDebounce),this.focusReconnectDebounce=setTimeout(()=>{if(this.focusReconnectDebounce=null,!this.isWebSocketActive())return void this.reconnect();Date.now()-this.lastActivity>this.wakeReconnectThreshold?this.reconnect():this.send("ping")},200)};isWebSocketActive(){return!!this.ws&&this.ws.readyState===WebSocket.OPEN}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SocketService,deps:[{token:LocalStorageService}],target:i0.ɵɵFactoryTarget.Injectable});static"ɵprov"=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SocketService})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SocketService,decorators:[{type:Injectable}],ctorParameters:()=>[{type:LocalStorageService}]});const isObject$1=t=>t instanceof Object&&"Object"===t.constructor.name;function round(t,e=0){const n=Math.pow(10,e);return Math.round(t*n+1e-6)/n}function toTitleCase(t){return t.replace(/\w\S*/g,function(t){return t.charAt(0).toUpperCase()+t.substr(1).toLowerCase()})}function isUpperCase(t){return/^[A-Z]*$/.test(t)}function pad(t,e){let n=t+"";for(;n.length<e;)n="0"+n;return n}function deepCopy(t){return JSON.parse(JSON.stringify(t),dateReviver)}function dateReviver(t,e){if("string"==typeof e){let t=/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(e);if(t)return new Date(Date.UTC(+t[1],+t[2]-1,+t[3],+t[4],+t[5],+t[6].split(".")[0],+t[6].split(".")[1]))}return e}function b64toBlobURL(t,e,n){t=t.replace("data:application/pdf;base64,",""),e=e||"",n=n||512;let o=atob(t),r=[];for(let t=0;t<o.length;t+=n){let e=o.slice(t,t+n),i=new Array(e.length);for(let t=0;t<e.length;t++)i[t]=e.charCodeAt(t);let a=new Uint8Array(i);r.push(a)}let i=new Blob(r,{type:e});return URL.createObjectURL(i)}function blobToFile(t,e){return t.lastModifiedDate=new Date,t.name=e,t}function toDataURL(t,e){let n=new XMLHttpRequest;n.onload=function(){let t=new FileReader;t.onloadend=function(){e(t.result)},t.readAsDataURL(n.response)},n.open("GET",t),n.responseType="blob",n.send()}function deepDiffDetails(t,e){let n=deepCopy(t),o=deepCopy(e),r=detailedDiff(n,o),i="";const a=t=>t instanceof Date?moment$1(t).format("llll"):"object"==typeof t&&null!==t?(Object.keys(t).filter(t=>t.startsWith("_id")||t.startsWith("id_")).forEach(e=>{delete t[e]}),JSON.stringify(t)):"string"==typeof t?`"${t}"`:String(t),s=(t,e)=>null===t||null===e||"object"!=typeof t||"object"!=typeof e?`from: ${a(t)} to: ${a(e)}`:Array.isArray(t)||Array.isArray(e)?((t,e)=>{let n=[];const o=Math.max(t.length,e.length);for(let r=0;r<o;r++)t[r]&&!e[r]?n.push(`Removed at index ${r}: ${a(t[r])}`):!t[r]&&e[r]?n.push(`Added at index ${r}: ${a(e[r])}`):t[r]&&e[r]&&JSON.stringify(t[r])!==JSON.stringify(e[r])&&n.push(`Changed at index ${r}: {${s(t[r],e[r])}}`);return n.join(", ")})(Array.isArray(t)?t:[],Array.isArray(e)?e:[]):Object.keys({...t,...e}).filter(t=>!t.startsWith("_id")&&!t.startsWith("id_")).map(n=>{const o=t?t[n]:void 0,r=e?e[n]:void 0;return`${toTitleCase(n)}: ${s(o,r)}`}).join(", ");return["added","deleted","updated"].forEach(t=>{if(Object.keys(r[t]).length>0){const e=Object.keys(r[t]).filter(e=>"added"===t||("deleted"===t?!r.added[e]:!r.added[e]&&!r.deleted[e])).filter(t=>!t.startsWith("_id")&&!t.startsWith("id_")).map(t=>`\n${toTitleCase(t)}: ${s(n[t],o[t])}`).join(",");i+=e?`${e}`:""}}),i}function generateCronStringFromDate(t){return t.getSeconds()+" "+t.getMinutes()+" "+t.getHours()+" "+t.getDate()+" "+(t.getMonth()+1)+" "+t.getDay()}function s2ab(t){let e=new ArrayBuffer(t.length),n=new Uint8Array(e);for(let e=0;e!==t.length;++e)n[e]=255&t.charCodeAt(e);return e}function mergeDeep(t,...e){if(!e.length)return t;const n=e.shift();if(isObject$1(t)&&isObject$1(n))for(const e in n)isObject$1(n[e])?(t[e]||Object.assign(t,{[e]:{}}),mergeDeep(t[e],n[e])):Object.assign(t,{[e]:n[e]});return mergeDeep(t,...e)}function applyMongoUpdate(t,e){const n=deepCopy(t);return e&&(e.$rename&&handleRename(t,e.$rename),e.$set&&handleSet(t,e.$set),e.$inc&&handleInc(t,e.$inc),e.$unset&&handleUnset(t,e.$unset),e.$pull&&handlePull(t,n,e.$pull),e.$push&&handlePush(t,e.$push)),t}function handleRename(t,e){for(const n in e){const o=e[n],[r,i]=resolve(t,n),[a,s]=resolve(t,o);r&&1===i.length?a&&1===s.length?(a[s[0]]=r[i[0]],delete r[i[0]]):logError(a,s,t,o):logError(r,i,t,n)}}function handleSet(t,e){for(const n in e){const o=e[n],[r,i]=resolve(t,n,{force:!0});r&&1===i.length?r[i[0]]=o:logError(r,i,t,n)}}function handleInc(t,e){for(const n in e){const o=e[n],[r,i]=resolve(t,n,{force:!0});r&&1===i.length?r[i[0]]=(r[i[0]]||0)+o:logError(r,i,t,n)}}function handleUnset(t,e){for(const n in e){const[e,o]=resolve(t,n);e&&1===o.length?delete e[o[0]]:logError(e,o,t,n)}}function handlePull(t,e,n){for(const o in n){const r=n[o];for(let n of r){const[r,i]=resolve(t,o),[a,s]=resolve(e,o);r&&1===i.length?r[i[0]].splice(a[s[0]].findIndex(t=>JSON.stringify(t)===JSON.stringify(n)),1):logError(r,i,t,o)}}}function handlePush(t,e){for(const n in e){const o=e[n];for(let e of o){const[o,r]=resolve(t,n);o&&1===r.length?o[r[0]].push(e):logError(o,r,t,n)}}}function logError(t,e,n,o){console.log("Error",t+"/"+e+" - couldn't resolve for "+JSON.stringify(n)+" "+o)}function resolve(t,e,n={}){const o=arrize(e);let r=[];o.length>0&&r.unshift(o.pop());let i=t;for(;o.length>0;){const t=o.shift();if(void 0!==i[t])i=i[t];else{if(!n.force){r.unshift(t),r=o.concat(r);break}const e="number"==typeof o[0],a=0===o.length&&"number"==typeof r[0];i[t]=e||a?[]:{},i=i[t]}}return[i,r]}function arrize(t,e="."){return Array.isArray(t)?t.slice():null==t||!1===t||""===t?[]:t.toString().split(e).map(t=>[void 0,null,!1,""].includes(t)?null:t.toString()).filter(t=>null!==t)}class StorageDB{storage=null;database=null;primaryKey=null;secretKey=null;sep="";constructor(t){t=t||{},this.storage=t.storage||window&&window.localStorage,this.database=t.database||"db",this.primaryKey=t.primaryKey||"_id",this.sep=t.sep||":",this.secretKey=t.secretKey||"",isSupported(this.storage)||(this.storage=null)}encryptData(t){const e=JSON.stringify(t);return CryptoJS.AES.encrypt(e,this.secretKey).toString()}decryptData(t){const e=CryptoJS.AES.decrypt(t,this.secretKey);try{const t=e.toString(CryptoJS.enc.Utf8);return JSON.parse(t,dateReviver)}catch(t){return null}}get(t,e){return new Collection(this,t,e)}getCollections(){let t=[];return Object.keys(this.storage).filter(t=>t.split(":").length>2).forEach(e=>{t.some(t=>t===e.split(":")[1])||t.push(e.split(":")[1])}),t}collection(t,e){return this.get(t,e)}}class Collection{name="";storage=null;path="";primaryKey="";cache={};cacheable=!1;db=null;constructor(t,e,n){n=n||{},this.name=e,this.storage=t.storage||new MockStorage,this.path=t.database+t.sep+e+t.sep,this.primaryKey=n.primaryKey||t.primaryKey,this.cache={},this.cacheable=!t.storage,this.db=t}_initCache(){let t={},e=new RegExp("^"+this.path);for(let n of Object.keys(this.storage))if(e.test(n)){const e=this.storage.getItem(n);t[n]=this.db.decryptData(e)}this.cache=t,this.cacheable=!0}_filter(t,e){e.type=e.type||"data",e.multi=e.multi||!1,this.cacheable||this._initCache();let n,o=[],r="id"===e.type;if("string"==typeof t)t=new RegExp(t);else if("function"==typeof t)n=!0;else if(!t){let t=r?Object.keys(this.cache):Object.values(this.cache);return e.multi?t:t[0]||null}for(let i of Object.keys(this.cache)){let a=this.cache[i];if(n){if(t(i,a.data)){let t=r?i:a;if(!e.multi)return t;o.push(t)}}else if(t.test(i)){let t=r?i:a;if(!e.multi)return t;o.push(t)}}return e.multi?o:null}insert(t,e,n){let o=t instanceof Array;if(o){if(0===t.length)return[]}else t=[t];let r=this.primaryKey,i=this.cacheable;for(let n of t){if(!isObject(n))throw new Error("TypeError: insert data must be an object or an object array");void 0===n[r]&&(n[r]=(new ID).toString());let t=new Date,o={offlineDate:t,offlineDateExpires:e||new Date(t.getTime()+6048e5),data:n};const a=this.db.encryptData(o);i&&(this.cache[this.path+n[r]]=o),this.storage.setItem(this.path+n[r],a)}return o?t.map(t=>t._id):t[0]._id}find(t,e,n){let o;t=t||{},(e=e||{}).skip=e.skip||0,e.limit=e.limit,e.sort=e.sort;let r=isObject(t)?null:t instanceof Array?t:[t],i={type:e._filterType||"data",multi:!0};if(r){let t=new RegExp("^"+this.path+"("+r.join("|")+")$");o=this._filter(t,i)}else o=Object.keys(t).length?this._filter((e,n)=>queryMatch(t,n),i):this._filter(null,i);return n||(o=o.map(t=>t.data)),e.sort&&o.sort((t,n)=>sortCompare(e.sort,t,n)),e.limit?o=o.slice(e.skip,e.skip+e.limit):e.skip&&(o=o.slice(e.skip)),o}findOne(t,e){let n;e=e||{};let o=isObject(t=t||{})?null:t,r=isObject(t)?Object.keys(t):[],i=!1,a=!!e.sort,s={type:e._filterType||"data",multi:!1};if(r.length&&r.includes(this.primaryKey)&&(o=t[this.primaryKey],i=!0),o){if(n=this.storage.getItem(this.path+o),n=n?this.db.decryptData(n).data:null,n&&i&&!queryMatch(t,n))return null}else r.length?a?n=this.find(t,e):(n=this._filter((e,n)=>queryMatch(t,n),s),Array.isArray(n)?n=n.map(t=>t.data):n&&(n=n.data)):n=a?this.find(t,e):this._filter(null,s);return!o&&a&&n&&(n=n[0].data||null),n&&"id"===s.type&&(n=this.path+n[this.primaryKey]),n}remove(t,e){if(!t)throw new Error("remove needs a query");(e=e||{}).multi=void 0===e.multi||e.multi;let n=e.multi?"find":"findOne",o=null;o="find"===n?this[n](t,{_filterType:"id"},!0):this[n](t,{_filterType:"id"});let r=this.cacheable;if(e.multi&&!o.length||!e.multi&&!o)return 0;e.multi||(o=[o]);for(let t of o)r&&delete this.cache[t],this.storage.removeItem(t);return o.length}update(t,e,n){if(!t)throw new Error("update needs a query");if(!e||!isObject(e))throw new Error("update needs an object");(n=n||{}).multi=void 0!==n.multi&&n.multi;let o=this[n.multi?"find":"findOne"](t,{_filterType:"id"}),r=this.primaryKey,i=this.cacheable;if(n.multi&&!o.length||!n.multi&&!o)return 0;if(n.multi){if(delete e[r],!Object.keys(e).length)return 0;for(let t of o){let n=i?this.cache[t]:this.db.decryptData(this.storage.getItem(t)),o=Object.assign({},n.data,e);i&&(this.cache[t]={offlineDate:n.offlineDate,offlineDateExpires:n.offlineDateExpires,data:o});const r=this.db.encryptData({offlineDate:n.offlineDate,offlineDateExpires:n.offlineDateExpires,data:o});this.storage.setItem(t,r)}return o.length}{let t=o,n=i?this.cache[t]:this.db.decryptData(this.storage.getItem(t)),a=e[r]&&e[r]!==n.data[r],s=a?this.path+e[r]:t;if(a&&this.findOne(e[r]))throw new Error("Duplicate value '"+e[r]+"' for unique field '"+r+"'");let l=Object.assign({},n.data,e);i&&(this.cache[s]={offlineDate:n.offlineDate,offlineDateExpires:n.offlineDateExpires,data:l},a&&delete this.cache[t]);const c=this.db.encryptData({offlineDate:n.offlineDate,offlineDateExpires:n.offlineDateExpires,data:l});return this.storage.setItem(s,c),a&&this.storage.removeItem(t),l}}drop(){return this.remove({}),!0}}class ID{constructor(){}toString(){return((new Date).getTime()/1e3).toString(16).substr(-4)+Math.random().toString(16).substr(2,12)}}class MockStorage{length=0;constructor(){this.length=0}key(){}setItem(){}getItem(){}removeItem(){}}const isSupported=t=>{if(!(t&&t instanceof Object))return!1;try{return t.setItem("_supported","1"),t.removeItem("_supported"),!0}catch(t){return!1}},isObject=t=>t instanceof Object&&"Object"===t.constructor.name,queryMatch=(t,e)=>{if(!t||!Object.keys(t).length)return!0;for(let n of Object.keys(t)){let o=t[n];if("$or"===n&&Array.isArray(o))return o.some(t=>queryMatch(t,e));if("$and"===n&&Array.isArray(o))return o.every(t=>queryMatch(t,e));if("$in"===n&&Array.isArray(o))return o.includes(e);if("$nin"===n&&Array.isArray(o))return!o.includes(e);if("$exists"===n&&"boolean"==typeof o)return o?void 0!==e:void 0===e;let r=e[n];if(r||n.split(".").forEach(t=>{r=r?r[t]:e[t]}),o instanceof RegExp){if(!o.test(r))return!1}else if(isObject(o)){for(let t of Object.keys(o))if(Operator._checkExist(t)&&!Operator[t](o[t],r))return!1}else if(o!==r)return!1}return!0},sortCompare=(t,e,n,o,r)=>{o=o||0;let i=(r=r||Object.keys(t))[o];return i?e[i]===n[i]?(o++,sortCompare(t,e,n,o,r)):1===t[i]?e[i]-n[i]:-1===t[i]?n[i]-e[i]:void 0:0},ops=["$eq","$gt","$gte","$in","$lt","$lte","$ne","$nin"],isNotNumber=t=>"number"!=typeof t;class Operator{static $eq(t,e){return e===t}static $gt(t,e){if(isNotNumber(t))throw new Error("'$gt' value must be a number");return e>t}static $gte(t,e){if(isNotNumber(t))throw new Error("'$gte' value must be a number");return e>=t}static $lt(t,e){if(isNotNumber(t))throw new Error("'$lt' value must be a number");return e<t}static $lte(t,e){if(isNotNumber(t))throw new Error("'$lte' value must be a number");return e<=t}static $ne(t,e){return e!==t}static $in(t,e){if(!(t instanceof Array))throw new Error("'$in' value must be an array");return t.includes(e)}static $nin(t,e){if(!(t instanceof Array))throw new Error("'$nin' value must be an array");return!t.includes(e)}static $exists(t,e){return t?void 0!==e:void 0===e}static $regex(t,e){if(!(t instanceof RegExp))throw new Error("'$regex' value must be a RegExp");return t.test(e)}static _checkExist(t){if(["$eq","$gt","$gte","$in","$lt","$lte","$ne","$nin","$exists","$regex"].includes(t))return!0;throw new Error("unknown operator: '"+t+"'")}}class OfflineManagerService{_storage;storageInitialized=new BehaviorSubject(!1);offlineMode=new BehaviorSubject(!0);_offlineDB;constructor(t){this._storage=t}initStorage(t){this._offlineDB=new StorageDB({storage:window.localStorage,database:"offlineDB",primaryKey:"_id",secretKey:t}),this._offlineDB.getCollections().forEach(t=>{let e=this.find(t,{},{},!0);e.some(t=>!t)?this.dropCollection(t):e.forEach(e=>{e&&e.offlineDateExpires&&"function"==typeof e.offlineDateExpires.getTime&&Date.now()>=e.offlineDateExpires.getTime()&&this.removeDocument(t,e.data._id)})});let e=this._storage.get("user");if(e){if(null===this._offlineDB.decryptData(e)){const t=this._offlineDB.encryptData(e);this._storage.set("user",t)}}let n=this._storage.get("lastURL");if(n){if(null===this._offlineDB.decryptData(n)){const t=this._offlineDB.encryptData(n);this._storage.set("lastURL",t)}}let o=this._storage.get("accessToken");if(o){if(null===this._offlineDB.decryptData(o)){const t=this._offlineDB.encryptData(o);this._storage.set("accessToken",t)}}let r=this._storage.get("refreshToken");if(r){if(null===this._offlineDB.decryptData(r)){const t=this._offlineDB.encryptData(r);this._storage.set("refreshToken",t)}}this.storageInitialized.next(!0)}getStorage(){return this._offlineDB}setOffline(t){this.offlineMode.next(t)}saveUser(t){return this._storage.set("user",this._offlineDB.encryptData(t))}getUser(){return this._storage.get("user")?this._offlineDB.decryptData(this._storage.get("user")):null}removeUser(){this._storage.remove("user")}find(t,e,n={},o=!1){const r=this._offlineDB.get(t);return r?r.find(e,n,o):[]}findOne(t,e){const n=this._offlineDB.get(t);return n?n.findOne(e):null}insertDocument(t,e,n){const o=this._offlineDB.get(t);let r="";return o&&e&&(!Array.isArray(e)||e.length)&&(r=o.insert(e,n)),r}updateDocument(t,e){const n=this._offlineDB.get(t);if(n){if(n.findOne({_id:e._id}))return e.__v+=1,n.update(e._id,e),1}return 0}updateDocumentProps(t,e,n,o){const r=this._offlineDB.get(t);if(r){let t=r.findOne({_id:e});if(t)return n.forEach(e=>{t[e.prop]=e.data}),t.__v+=1,r.update({_id:e},t),1}return 0}removeDocument(t,e){const n=this._offlineDB.get(t);n&&n.remove(e)}dropCollection(t){this._offlineDB.get(t).drop()}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:OfflineManagerService,deps:[{token:LocalStorageService}],target:i0.ɵɵFactoryTarget.Injectable});static"ɵprov"=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:OfflineManagerService})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:OfflineManagerService,decorators:[{type:Injectable}],ctorParameters:()=>[{type:LocalStorageService}]});class TokenManagerService{_storage;_offline;constructor(t,e){this._storage=t,this._offline=e}getToken(t){let e=this._storage.get(t);return e?this._offline.getStorage().decryptData(e):null}setToken(t,e){this._storage.set(t,this._offline.getStorage().encryptData(e))}removeToken(t){null!==this.getToken(t)&&this._storage.remove(t)}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:TokenManagerService,deps:[{token:LocalStorageService},{token:OfflineManagerService}],target:i0.ɵɵFactoryTarget.Injectable});static"ɵprov"=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:TokenManagerService})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:TokenManagerService,decorators:[{type:Injectable}],ctorParameters:()=>[{type:LocalStorageService},{type:OfflineManagerService}]});class SocketManagerService{_socket;_offline;_alert;_router;_token;socketStatus;messageId=0;_cbArray=[];_subArray=[];_offlineUpdates=[];_pendingMessages=[];_sendTimeout=null;_currentLockId="";_chunkAssemblies=new Map;_chunkProgressThresholdBytes=1048576;_chunkTextDecoder=new TextDecoder;_connectionDelayTimeout=null;onerror=function(){};constructor(t,e,n,o,r){this._socket=t,this._offline=e,this._alert=n,this._router=o,this._token=r}getSubArray(){return this._subArray}initSocketManager(){this._socket.readyState$.subscribe(t=>{this.socketStatus=t}),this._socket.onmessage=t=>{this.handleMessage(t)},this._socket.onopen=t=>{this._connectionDelayTimeout=setTimeout(async()=>{if(this._connectionDelayTimeout=null,this._offline.setOffline(!1),this._subArray.forEach(t=>{this.send(t.messageRoute,new Date,t.messageId,"subscription","sub",t.subscription,...t.parameters)}),!await this.acquireLock("processingOfflineUpdates"))return;let t=this._offline.find("collectionOffline",{}).sort((t,e)=>t.date.getTime()-e.date.getTime()),e=this._offline.find("methodOffline",{}).sort((t,e)=>t.date.getTime()-e.date.getTime());t.length||e.length?(t.forEach(t=>{let e=this.messageId++;this._offlineUpdates.push({id_offline_doc:t._id,messageId:e,type:"collectionOffline"}),t.data[2]=e,"updateDocument"===t.type?(t.data[4]="updateDocumentOffline",t.data[0]="Offline - "+t.data[0]):"updateDocumentProps"===t.type?(t.data[4]="updateDocumentPropsOffline",t.data[0]="Offline - "+t.data[0]):t.data[0]="Offline - "+t.data[0]}),e.forEach(t=>{let e=this.messageId++;this._offlineUpdates.push({id_offline_doc:t._id,messageId:e,type:"methodOffline"}),t.data[2]=e,t.data[0]="Offline - "+t.data[0]}),this.send("Offline Updates",new Date,this.messageId++,"offline",t.concat(e).sort((t,e)=>t.date.getTime()-e.date.getTime()))):this.releaseLock("processingOfflineUpdates")},100)},this._socket.onerror=t=>{this._connectionDelayTimeout&&clearTimeout(this._connectionDelayTimeout),console.log(new Date,"SOCKET ERROR",t),this.onerror()},this._socket.onclose=t=>{this._connectionDelayTimeout&&clearTimeout(this._connectionDelayTimeout),this._chunkAssemblies.forEach(t=>this.dismissChunkAlert(t)),this._chunkAssemblies.clear()}}handleMessage(t){for(let e of t)this.processReceivedMessage(e)}async acquireLock(t,e=6e4,n=100){let o=Date.now(),r=this.generateUniqueId(),i=JSON.stringify({lockId:r,timestamp:o}),a=this._token.getToken(t);if(a){let{lockId:n,timestamp:r}=JSON.parse(a);if(!(o>r+e))return!1;this._token.setToken(t,i)}else this._token.setToken(t,i);await this.sleep(n);let s=this._token.getToken(t);if(s){let{lockId:t,timestamp:n}=JSON.parse(s);if(t===r&&o<=n+e)return this._currentLockId=r,!0}return!1}sleep(t){return new Promise(e=>setTimeout(e,t))}releaseLock(t){let e=this._token.getToken(t);if(e){let{lockId:n}=JSON.parse(e);n===this._currentLockId&&this._token.removeToken(t)}}generateUniqueId(){return`${Date.now()}-${Math.random().toString(36).substr(2,9)}`}processReceivedMessage(t){if(this.handleChunkedPayload(t))return;let e=this._offlineUpdates.findIndex(e=>e.messageId===t.messageId);if(e>=0&&(this._offline.removeDocument(this._offlineUpdates[e].type,this._offlineUpdates[e].id_offline_doc),this._offlineUpdates.splice(e,1),this._offlineUpdates.length||this.releaseLock("processingOfflineUpdates")),"ACK"!==t.data&&"NACK"!==t.data)if(this._cbArray.map(t=>t.messageId).includes(t.messageId)){let e=this._cbArray.findIndex(e=>e.messageId===t.messageId);e>=0&&(this._cbArray[e].cb?(this._cbArray[e].cb(t.hasError?t.data:null,t.hasError?null:t.data),this._cbArray[e].resolveFn(t.hasError?t.data:null)):t.hasError?this._cbArray[e].rejectFn(t.data):this._cbArray[e].resolveFn(t.data),this._cbArray.splice(e,1))}else if(this._subArray.map(t=>t.messageId).includes(t.messageId)){let e=this._subArray.findIndex(e=>e.messageId===t.messageId);e>=0&&this._subArray[e].subject.next(t.data)}}handleChunkedPayload(t){const e=t&&t.data;if(!e||"object"!=typeof e||!e.__chunked)return!1;const n=e.chunkId;if(!n)return!0;if("start"===e.chunkStatus)return this._chunkAssemblies.set(n,this.createChunkAssembly(n,t,e)),!0;const o=this._chunkAssemblies.get(n);if(!o)return!0;if("chunk"===e.chunkStatus)return this.appendChunkPayload(o,e),this.emitChunkProgress(o),!0;if("end"===e.chunkStatus){if(o.totalChunks&&o.receivedChunks!==o.totalChunks)return this.handleChunkFailure(o,"Incomplete chunk sequence"),this._chunkAssemblies.delete(n),!0;const e=this.tryDecodeChunkBuffer(o,!0);return void 0===e?(this.handleChunkFailure(o,"Failed to decode chunk payload"),this._chunkAssemblies.delete(n),!0):(t.data=e,this.dismissChunkAlert(o),this._chunkAssemblies.delete(n),!1)}return!0}createChunkAssembly(t,e,n){const o=n.totalBytes||0,r={chunkId:t,messageId:e.messageId,hasError:!!e.hasError,encoding:"msgpack"===n.encoding?"msgpack":"json",totalChunks:n.totalChunks||0,totalBytes:o,buffer:o?new Uint8Array(o):new Uint8Array(0),filledBytes:0,receivedChunks:0,targetType:null,showProgress:!1,lastPercent:-1},i=this._subArray.find(t=>t.messageId===e.messageId);if(i)r.targetType="subscription",r.subscription=i;else{const t=this._cbArray.find(t=>t.messageId===e.messageId);t&&(r.targetType="callback",r.callback=t)}return this.initializeChunkProgress(r),r}initializeChunkProgress(t){this.shouldShowChunkProgress(t)&&(t.showProgress=!0,t.lastPercent=-1,this.updateChunkProgress(t,!0))}shouldShowChunkProgress(t){return!!(t.totalBytes&&t.totalBytes>=this._chunkProgressThresholdBytes)||t.totalChunks>1}appendChunkPayload(t,e){const n=this.extractChunkBytes(e,t.encoding);if(n&&n.byteLength){if(t.buffer&&t.buffer.byteLength>=t.filledBytes+n.byteLength)t.buffer.set(n,t.filledBytes);else if(t.buffer&&t.buffer.byteLength){const e=new Uint8Array(t.filledBytes+n.byteLength);e.set(t.buffer.subarray(0,t.filledBytes),0),e.set(n,t.filledBytes),t.buffer=e,t.totalBytes=t.buffer.byteLength}else t.buffer=new Uint8Array(n),t.totalBytes=t.buffer.byteLength;t.filledBytes+=n.byteLength,t.receivedChunks++,this.updateChunkProgress(t)}}updateChunkProgress(t,e=!1){if(!t.showProgress&&!e)return;if(!t.showProgress&&this.shouldShowChunkProgress(t))t.showProgress=!0;else if(!t.showProgress)return;const n=this.getChunkProgressPercent(t);if(null===n)return;if(!e){if(t.lastPercent>=n)return;if(t.lastPercent>=0&&n<100&&n-t.lastPercent<5)return}t.lastPercent=n;const o=this.buildChunkProgressMessage(t,n);t.alertToast?this.updateChunkAlertMessage(t.alertToast,o):(t.alertToast=this._alert.setAlert("update",o,0),this.configureChunkAlert(t.alertToast))}emitChunkProgress(t){if("subscription"!==t.targetType||!t.subscription)return;if(t.totalChunks&&t.receivedChunks>=t.totalChunks)return;const e=this.tryDecodeChunkBuffer(t,!1);void 0!==e&&t.subscription.subject.next(e)}handleChunkFailure(t,e){const n={chunkId:t.chunkId,message:e};if(console.error(new Date,"WEBSOCKET CHUNK",e,t.chunkId),this.dismissChunkAlert(t),"subscription"===t.targetType&&t.subscription)return void t.subscription.subject.error(n);const o=this._cbArray.findIndex(e=>e.messageId===t.messageId);if(o>=0){const t=this._cbArray[o];t.cb&&t.cb(n,null),t.rejectFn?t.rejectFn(n):t.resolveFn&&t.resolveFn(n),this._cbArray.splice(o,1)}}tryDecodeChunkBuffer(t,e){if(t.buffer&&t.filledBytes)try{const e=t.filledBytes===t.buffer.byteLength?t.buffer:t.buffer.subarray(0,t.filledBytes);if("msgpack"===t.encoding)return unpack(e);const n=this._chunkTextDecoder.decode(e);return JSON.parse(n,dateReviver)}catch(n){return void(e&&console.error(new Date,"WEBSOCKET CHUNK","Failed to decode chunk payload",t.chunkId,n))}}extractChunkBytes(t,e){return"msgpack"===e?this.ensureUint8Array(t.payload):"string"==typeof t.payload?this.base64ToUint8Array(t.payload):null}ensureUint8Array(t){return t?t instanceof Uint8Array?t:t instanceof ArrayBuffer?new Uint8Array(t):ArrayBuffer.isView(t)?new Uint8Array(t.buffer,t.byteOffset,t.byteLength):Array.isArray(t)?new Uint8Array(t):"string"==typeof t?this.base64ToUint8Array(t):null:null}base64ToUint8Array(t){const e=atob(t),n=new Uint8Array(e.length);for(let t=0;t<e.length;t++)n[t]=e.charCodeAt(t);return n}dismissChunkAlert(t){t.alertToast&&(this._alert.clearAlert(t.alertToast.toastId),t.alertToast=void 0),t.showProgress=!1,t.lastPercent=-1}getChunkProgressPercent(t){if(t.totalBytes){const e=Math.min(t.filledBytes,t.totalBytes);return Math.min(100,Math.floor(e/t.totalBytes*100))}if(t.totalChunks){const e=Math.min(t.receivedChunks,t.totalChunks);return Math.min(100,Math.floor(e/t.totalChunks*100))}return null}buildChunkProgressMessage(t,e){const n=t.totalBytes,o=n?Math.min(t.filledBytes,n):0;if(n)return`Downloading data (${e}% • ${this.formatBytes(o)} of ${this.formatBytes(n)})`;if(t.totalChunks){return`Downloading data (${e}% • chunk ${Math.min(t.receivedChunks,t.totalChunks)} of ${t.totalChunks})`}return`Downloading data (${e}%)`}formatBytes(t){if(!t)return"0 B";const e=["B","KB","MB","GB","TB"],n=Math.min(e.length-1,Math.floor(Math.log(t)/Math.log(1024))),o=t/Math.pow(1024,n);return`${o>=10?o.toFixed(0):o.toFixed(1)} ${e[n]}`}configureChunkAlert(t){t&&(t.message=t.message||"",t.portal?.instance&&(t.portal.instance.options.disableTimeOut=!0,t.portal.instance.options.tapToDismiss=!0,t.portal.instance.options.closeButton=!1,t.portal.instance.message=t.message),t.toastRef?.componentInstance&&(t.toastRef.componentInstance.options.disableTimeOut=!0,t.toastRef.componentInstance.options.tapToDismiss=!0,t.toastRef.componentInstance.options.closeButton=!1,t.toastRef.componentInstance.message=t.message))}updateChunkAlertMessage(t,e){t.message=e,t.portal?.instance&&(t.portal.instance.message=e),t.toastRef?.componentInstance&&(t.toastRef.componentInstance.message=e)}openSocket(t,e){this._socket.openSocket(t,e)}closeSocket(){this._token.removeToken("accessToken"),this._socket.close()}call(t,...e){let n=null,o=null,r=new Promise((t,e)=>{n=t,o=e}),i=this.messageId++;e[e.length-1]&&"function"==typeof e[e.length-1]?this._cbArray.push({messageId:i,cb:e.pop(),resolveFn:n,rejectFn:o,retryCnt:0}):this._cbArray.push({messageId:i,cb:null,resolveFn:n,rejectFn:o,retryCnt:0});let a=e.length;for(;(void 0===e[e.length-1]||null===e[e.length-1])&&a>0;)e.pop(),a=e.length;return this.send(this._router.url.includes("?")?this._router.url.substring(0,this._router.url.indexOf("?")):this._router.url,new Date,i,"method",t,...e),r}subscribe(t,...e){const n=deepCopy(e),o=new Subject;let r=this.messageId++;this._subArray.push({messageId:r,messageRoute:this._router.url.includes("?")?this._router.url.substring(0,this._router.url.indexOf("?")):this._router.url,subscription:t,parameters:n,subject:o});const i=o.pipe(finalize(()=>{this.unsubscribe(r,t,...n),this._subArray.splice(this._subArray.map(t=>t.messageId).indexOf(r),1)}));return this.send(this._router.url.includes("?")?this._router.url.substring(0,this._router.url.indexOf("?")):this._router.url,new Date,r,"subscription","sub",t,...n),i}subscribeBypassRoute(t,...e){const n=deepCopy(e),o=new Subject;let r=this.messageId++;this._subArray.push({messageId:r,messageRoute:"Bypass",subscription:t,parameters:n,subject:o});const i=o.pipe(finalize(()=>{this.unsubscribe(r,t,...n),this._subArray.splice(this._subArray.map(t=>t.messageId).indexOf(r),1)}));return this.send("Bypass",new Date,r,"subscription","sub",t,...n),i}unsubscribe(t,e,...n){this.send(this._router.url.includes("?")?this._router.url.substring(0,this._router.url.indexOf("?")):this._router.url,new Date,t,"subscription","unsub",e,...n)}send(...t){this.socketStatus===WebSocket.OPEN?(this._pendingMessages.push(t),this._sendTimeout||(this._sendTimeout=setTimeout(()=>{this._sendTimeout=null;const t=[...this._pendingMessages];this._pendingMessages=[],this._socket.send(t)},25))):"method"===t[3]&&this.handleOfflineMethod(t)}handleOfflineMethod(t){if("insertDocument"===t[4]){if("driver-gps"===t[5])return;this._alert.setAlert("warning","This insert command has not taken place on the server yet because you are offline. It will automatically sync up next time you are online as long as you do not clear your cache!"),this._offline.insertDocument("collectionOffline",{type:"insert",data:t,date:new Date});let e=this._offline.insertDocument(t[5],t[6]),n=this._cbArray.filter(e=>e.messageId===t[2])[0];n&&n.cb&&(n.cb(null,e),this._cbArray.splice(this._cbArray.findIndex(e=>e.messageId===t[2]),1))}else if("updateDocument"===t[4]){this._alert.setAlert("warning","This update command has not taken place on the server yet because you are offline. It will automatically sync up next time you are online as long as you do not clear your cache!"),this._offline.insertDocument("collectionOffline",{type:"updateDocument",data:t,date:new Date}),this._offline.findOne(t[5],{_id:t[6]._id})?this._offline.updateDocument(t[5],t[6]):console.log("Could not find Offline data",t[5],t[6]);let e=this._cbArray.filter(e=>e.messageId===t[2])[0];e&&e.cb&&(e.cb(null,1),this._cbArray.splice(this._cbArray.findIndex(e=>e.messageId===t[2]),1))}else if("updateDocumentProps"===t[4]){this._alert.setAlert("warning","This update command has not taken place on the server yet because you are offline. It will automatically sync up next time you are online as long as you do not clear your cache!"),this._offline.insertDocument("collectionOffline",{type:"updateDocumentProps",data:t,date:new Date}),this._offline.findOne(t[5],{_id:t[6]})?this._offline.updateDocumentProps(t[5],t[6],t[7],t[8]):console.log("Could not find Offline data",t[5],t[6]);let e=this._cbArray.filter(e=>e.messageId===t[2])[0];e&&e.cb&&(e.cb(null,1),this._cbArray.splice(this._cbArray.findIndex(e=>e.messageId===t[2]),1))}else if("removeDocument"===t[4]){this._alert.setAlert("warning","This remove command has not taken place on the server yet because you are offline. It will automatically sync up next time you are online as long as you do not clear your cache!"),this._offline.insertDocument("collectionOffline",{type:"removeDocument",data:t,date:new Date}),this._offline.findOne(t[5],{_id:t[6]})?this._offline.removeDocument(t[5],t[6]):console.log("Could not find Offline data",t[5],t[6]);let e=this._cbArray.filter(e=>e.messageId===t[2])[0];e&&e.cb&&(e.cb(null,1),this._cbArray.splice(this._cbArray.findIndex(e=>e.messageId===t[2]),1))}else t[0].includes("/dashboard/driver/")&&this._offline.insertDocument("methodOffline",{type:t[4],data:t,date:new Date})}getStatus(){return this._socket.readyState$}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SocketManagerService,deps:[{token:SocketService},{token:OfflineManagerService},{token:AlertService},{token:i1$1.Router},{token:TokenManagerService}],target:i0.ɵɵFactoryTarget.Injectable});static"ɵprov"=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SocketManagerService})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SocketManagerService,decorators:[{type:Injectable}],ctorParameters:()=>[{type:SocketService},{type:OfflineManagerService},{type:AlertService},{type:i1$1.Router},{type:TokenManagerService}]});class AccountManagerService{_router;_socket;_token;_http;_alert;_offline;user=new BehaviorSubject(null);initCompleted=new BehaviorSubject(!1);loginCompleted=new BehaviorSubject(!1);user$;environment=null;constructor(t,e,n,o,r,i){this._router=t,this._socket=e,this._token=n,this._http=o,this._alert=r,this._offline=i}initLoginManager(t){this.environment=t,this._offline.storageInitialized.subscribe(t=>{this._socket.initSocketManager();let e=this._token.getToken("refreshToken");e?(this.initLogin(e),setInterval(()=>{e=this._token.getToken("refreshToken"),this.initLogin(e)},3e3)):this.initCompleted.next(!0)})}initLogin(t){if(navigator.onLine)this._offline.offlineMode.getValue()&&(this._offline.setOffline(!1),this.getAccessToken(t));else if(!this._offline.offlineMode.getValue()||!this.initCompleted.getValue()){this.closeSocket(),this._offline.setOffline(!0);let t=this._offline.getUser();t&&this.user.next(t),this.initCompleted.getValue()||this.initCompleted.next(!0)}}getAccessToken(t){t&&this._http.post(this.environment.SERVER_URL+"/accessToken",{refreshToken:t}).toPromise().then(t=>{t.error?this.initCompleted.next(!0):(this._token.setToken("accessToken",t.result.token),this.user.next(t.result.user),this.openSocket(t.result.token),this.user$&&this.user$.unsubscribe(),this.user$=this._socket.subscribeBypassRoute("userWithId",t.result.user._id).subscribe(t=>{t&&(this.user.getValue()&&this.user.getValue()._id!==t._id?this._socket.call("incorrectUser",this.user.getValue(),t,this._socket.getSubArray()):(this.user.next(t),this.loginCompleted.next(!0),this.initCompleted.next(!0),this._offline.saveUser(t)))}))},t=>{this.initCompleted.next(!0)})}logIn(t,e){return new Promise((n,o)=>{this._http.post(this.environment.SERVER_URL+"/login",{username:t,password:e}).toPromise().then(t=>{t.error?(this._alert.setAlert("error",t.result),o(t.result)):(this._token.setToken("refreshToken",t.result.token),this.getAccessToken(t.result.token),n(t.result.token))},t=>{})})}logIn365(t){return new Promise((e,n)=>{this._http.post(this.environment.SERVER_URL+"/login365",{id_token:t}).toPromise().then(t=>{t.error?(this._alert.setAlert("error",t.result),n(t.result)):(this._token.setToken("refreshToken",t.result.token),this.getAccessToken(t.result.token),e(t.result.token))},t=>{})})}resetUserPassword(t){return new Promise((e,n)=>{this._http.post(this.environment.SERVER_URL+"/resetPassword",{username:t}).toPromise().then(t=>{e(!0)},t=>{})})}logOut(){return new Promise((t,e)=>{this._router.navigateByUrl("/home"),setTimeout(()=>{this.user.next(null),this._token.removeToken("refreshToken"),this._offline.removeUser(),this.closeSocket(),t(!0)},500)})}openSocket(t){this._socket.openSocket(this.environment,[t])}closeSocket(){this._socket.closeSocket()}setUser(t){this.user.next(t)}getUser(){return this.user.getValue()}getSocketStatus(){return this._socket.getStatus()}isUserInView(t){let e=!1;if(this.isUserSuperAdmin())return!0;let n=this.user.getValue();return n&&(n.roles.groups.forEach(n=>{n.views.filter(e=>e.startsWith(t)).length&&(e=!0)}),n.roles.miscs.filter(e=>e.startsWith(t)).length&&(e=!0),n.roles.groups.filter(e=>e.name===t).length&&(e=!0)),e}isUserSuperAdmin(){return this.user.getValue()&&this.user.getValue().roles.super_admin}isInitCompleted(){return new Promise((t,e)=>{if(this.initCompleted.value)t(!0);else{let e=this.initCompleted.subscribe(n=>{n&&(e.unsubscribe(),t(!0))},()=>{})}})}isLoginCompleted(){return new Promise((t,e)=>{if(this.loginCompleted.value)t(!0);else{let e=this.loginCompleted.subscribe(n=>{n&&(e.unsubscribe(),t(!0))})}})}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:AccountManagerService,deps:[{token:i1$1.Router},{token:SocketManagerService},{token:TokenManagerService},{token:i4.HttpClient},{token:AlertService},{token:OfflineManagerService}],target:i0.ɵɵFactoryTarget.Injectable});static"ɵprov"=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:AccountManagerService})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:AccountManagerService,decorators:[{type:Injectable}],ctorParameters:()=>[{type:i1$1.Router},{type:SocketManagerService},{type:TokenManagerService},{type:i4.HttpClient},{type:AlertService},{type:OfflineManagerService}]});class ValidationService{constructor(){}wholeNumbersAllowNegative(t){return""===t.value||null===t.value||/^[\-]?\d+$/.test(t.value)?null:{wholeNumbersAllowNegative:{valid:!1}}}wholeNumbersWithZero(t){return""===t.value||null===t.value||/^[0-9]*$/.test(t.value)?null:{wholeNumbersWithZero:{valid:!1}}}wholeNumbersGreaterThanZero(t){return""===t.value||null===t.value||/^[1-9]+[0-9]*$/.test(t.value)?null:{wholeNumbersGreaterThanZero:{valid:!1}}}decimalWithZero(t){return""===t.value||null===t.value||/^\d*\.?\d*$/.test(t.value)?null:{decimalWithZero:{valid:!1}}}decimalGreaterThanZero(t){return""===t.value||null===t.value||/^\s*(?=.*[1-9])\d*(?:\.\d{1,10})?\s*$/.test(t.value)?null:{decimalGreaterThanZero:{valid:!1}}}currency(t){return""===t.value||null===t.value||/^[0-9]\d*(\.\d+)?$/.test(t.value)?null:{currency:{valid:!1}}}currencyGreaterThanZero(t){return""===t.value||null===t.value||/^[0-9]\d*(\.\d+)?$/.test(t.value)&&t.value>0?null:{currency:{valid:!1}}}currencyAllowNegative(t){return""===t.value||null===t.value||/^[\-]?[0-9]\d*(\.\d+)?$/.test(t.value)?null:{currency:{valid:!1}}}phoneNumber(t){return""===t.value||null===t.value||/^1?([2-9])(\d{9})/.test(t.value)?null:{phoneNumber:{valid:!1}}}email(t){return""===t.value||null===t.value||/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(t.value)?null:{email:{valid:!1}}}matchPassword(t){let e=t.controls.password,n=t.controls.confirm_password;return e.value&&n.value?e.value===n.value?null:{matchPassword:{isValid:!1}}:null}density(t){return""===t.value||null===t.value||/^[\-]?\d*\.?\d*$/.test(t.value)?null:{density:{valid:!1}}}maxValue(t){return e=>("string"==typeof e.value?parseFloat(e.value):e.value)>t?{maxValue:{max:t}}:null}minValue(t){return e=>("string"==typeof e.value?parseFloat(e.value):e.value)<t?{minValue:{min:t}}:null}multipleOf(t){return e=>("string"==typeof e.value?parseFloat(e.value):e.value)%t!==0?{multipleOf:{value:t}}:null}minLengthArray(t){return e=>e.value&&e.value.length>=t?null:{minLengthArray:{valid:!1}}}maxLengthArray(t){return e=>e.value&&e.value.length<=t?null:{maxLengthArray:{valid:!1}}}validIPAddress(t){return""===t.value||null===t.value||/^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/.test(t.value)?null:{validIPAddress:{valid:!1}}}alphaNumericWithDashes(t){return""===t.value||null===t.value||/^[a-zA-Z0-9-_]+$/.test(t.value)?null:{alphaNumericWithDashes:{valid:!1}}}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:ValidationService,deps:[],target:i0.ɵɵFactoryTarget.Injectable});static"ɵprov"=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:ValidationService})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:ValidationService,decorators:[{type:Injectable}],ctorParameters:()=>[]});class AwsService{_socket;constructor(t){this._socket=t}dataURItoFile(t,e){let n=atob(t.split(",")[1]),o=t.split(",")[0].split(":")[1].split(";")[0],r=new ArrayBuffer(n.length),i=new Uint8Array(r);for(let t=0;t<n.length;t++)i[t]=n.charCodeAt(t);let a=new Blob([r],{type:o});return a.lastModifiedDate=new Date,a.name=e,a}uploadFile(t,e,n,o){return new Promise((r,i)=>{t.size?this.getBase64(t).then(a=>{this._socket.call("uploadFileAndSave",o||t.name,a,t.size,n||-1,e,!0,(t,e)=>{e?r(e):i(t)})}):i("Invalid File")})}getFileWithKey(t,e){this._socket.call("getFile",t,e)}getFileWithId(t,e){this._socket.call("findOne","files",{_id:t},(t,n)=>{this.getFileWithKey(n.key,e)})}deleteFile(t,e){this._socket.call("deleteFile",t,e)}deleteFileWithId(t,e){this._socket.call("findOne","files",{_id:t},(t,n)=>{this.deleteFile(n.key,e)})}deleteFilesWithKeys(t,e){this._socket.call("deleteFiles",t,e)}getBase64(t){return new Promise((e,n)=>{const o=new FileReader;o.readAsDataURL(t),o.onload=()=>e(o.result),o.onerror=t=>n(t)})}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:AwsService,deps:[{token:SocketManagerService}],target:i0.ɵɵFactoryTarget.Injectable});static"ɵprov"=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:AwsService})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:AwsService,decorators:[{type:Injectable}],ctorParameters:()=>[{type:SocketManagerService}]});class BaseComponent{providerService;constructor(t){this.providerService=t}}class ProviderService{_app;_router;_socket;_account;_alert;_vs;_aws;_fb;constructor(t,e,n,o,r,i,a,s){this._app=t,this._router=e,this._socket=n,this._account=o,this._alert=r,this._vs=i,this._aws=a,this._fb=s}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:ProviderService,deps:[{token:CoreService},{token:i1$1.Router},{token:SocketManagerService},{token:AccountManagerService},{token:AlertService},{token:ValidationService},{token:AwsService},{token:i2.FormBuilder}],target:i0.ɵɵFactoryTarget.Injectable});static"ɵprov"=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:ProviderService})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:ProviderService,decorators:[{type:Injectable}],ctorParameters:()=>[{type:CoreService},{type:i1$1.Router},{type:SocketManagerService},{type:AccountManagerService},{type:AlertService},{type:ValidationService},{type:AwsService},{type:i2.FormBuilder}]});class DialogNotifyContent{activeModal;title;body;handleKeyboardEvent(t){13===t.keyCode&&this.activeModal.close()}constructor(t){this.activeModal=t}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DialogNotifyContent,deps:[{token:i1$2.NgbActiveModal}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"21.0.1",type:DialogNotifyContent,isStandalone:!1,selector:"resolveio-dialog.notify",inputs:{title:"title",body:"body"},host:{listeners:{"document:keypress":"handleKeyboardEvent($event)"}},ngImport:i0,template:'\n\t\t<div class="modal-header">\n\t\t\t<h4 class="modal-title"><i class="fa fa-info-circle" style="color: blue; font-size: 0.85em" aria-hidden="true"></i> {{ title }}</h4>\n\t \t\t<button type="button" class="btn-close ms-auto" aria-label="Close" (click)="activeModal.dismiss(\'Cross click\')"></button>\n\t\t</div>\n\t\t<div class="modal-body">\n\t \t \t<p>{{ body }}</p>\n\t\t</div>\n\t\t<div class="modal-footer">\n\t \t\t<button type="button" class="btn btn-secondary" (click)="activeModal.close(\'Close click\')">Ok</button>\n\t\t</div>\n ',isInline:!0})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DialogNotifyContent,decorators:[{type:Component,args:[{selector:"resolveio-dialog.notify",template:'\n\t\t<div class="modal-header">\n\t\t\t<h4 class="modal-title"><i class="fa fa-info-circle" style="color: blue; font-size: 0.85em" aria-hidden="true"></i> {{ title }}</h4>\n\t \t\t<button type="button" class="btn-close ms-auto" aria-label="Close" (click)="activeModal.dismiss(\'Cross click\')"></button>\n\t\t</div>\n\t\t<div class="modal-body">\n\t \t \t<p>{{ body }}</p>\n\t\t</div>\n\t\t<div class="modal-footer">\n\t \t\t<button type="button" class="btn btn-secondary" (click)="activeModal.close(\'Close click\')">Ok</button>\n\t\t</div>\n ',standalone:!1}]}],ctorParameters:()=>[{type:i1$2.NgbActiveModal}],propDecorators:{title:[{type:Input}],body:[{type:Input}],handleKeyboardEvent:[{type:HostListener,args:["document:keypress",["$event"]]}]}});class FormButtonComponent extends BaseComponent{_services;form;disabled=!1;type="submit";formButton;constructor(t){super(t),this._services=t}getTipErrors(){let t=[];if(this.form&&this.form.invalid&&"object"==typeof this.form.controls){Object.keys(this.form.controls).forEach(e=>{let n=this.form.controls[e];if(n.invalid&&(t.push(e.replace("_id","").replace("id_","").replace("_"," ").replace(/\b\S/g,function(t){return t.toUpperCase()})+" is invalid"),"object"==typeof n.value&&Array.isArray(n.value)&&n.controls))for(let e=0;e<n.controls.length;e++){let o=n.controls[e];if(o.controls){Object.keys(o.controls).forEach(n=>{o.controls[n].invalid&&t.push("["+e+"] -> "+n.replace("_id","").replace("id_","").replace("_"," ").replace(/\b\S/g,function(t){return t.toUpperCase()})+" is invalid")})}}})}return t}isSuperAdmin(){return!(!this._services._account.getUser()||!this._services._account.getUser().roles.super_admin)}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:FormButtonComponent,deps:[{token:ProviderService}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"21.0.1",type:FormButtonComponent,isStandalone:!1,selector:"form-button",inputs:{form:"form",disabled:"disabled",type:"type"},providers:[ProviderService],viewQueries:[{propertyName:"formButton",first:!0,predicate:["formButton"],descendants:!0}],usesInheritance:!0,ngImport:i0,template:'\n\t\t<div style="position: relative; text-align: left; width: 100%">\n\t\t <ng-template #tipContent>\n\t\t <span style="font-weight: bold">Errors:<br></span>\n\t\t <ul>\n\t\t @for (error of getTipErrors(); track error) {\n\t\t <li>{{error}}</li>\n\t\t }\n\t\t </ul>\n\t\t </ng-template>\n\t\t <div [ngbTooltip]="(getTipErrors().length ? tipContent : \'\')" placement="top-left" #t>\n\t\t <button [type]="type" [ngClass]="[\'btn\', form && form.valid ? \'btn-success\' : \'btn-danger\']" [disabled]="!form || !form.valid || disabled" style="width: 200px" [autofocus]="true" #formButton>Submit</button>\n\t\t </div>\n\t\t</div>\n\t\t',isInline:!0,dependencies:[{kind:"directive",type:i7.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]},{kind:"directive",type:i1$2.NgbTooltip,selector:"[ngbTooltip]",inputs:["animation","autoClose","placement","popperOptions","triggers","positionTarget","container","disableTooltip","tooltipClass","tooltipContext","openDelay","closeDelay","ngbTooltip"],outputs:["shown","hidden"],exportAs:["ngbTooltip"]}]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:FormButtonComponent,decorators:[{type:Component,args:[{providers:[ProviderService],selector:"form-button",template:'\n\t\t<div style="position: relative; text-align: left; width: 100%">\n\t\t <ng-template #tipContent>\n\t\t <span style="font-weight: bold">Errors:<br></span>\n\t\t <ul>\n\t\t @for (error of getTipErrors(); track error) {\n\t\t <li>{{error}}</li>\n\t\t }\n\t\t </ul>\n\t\t </ng-template>\n\t\t <div [ngbTooltip]="(getTipErrors().length ? tipContent : \'\')" placement="top-left" #t>\n\t\t <button [type]="type" [ngClass]="[\'btn\', form && form.valid ? \'btn-success\' : \'btn-danger\']" [disabled]="!form || !form.valid || disabled" style="width: 200px" [autofocus]="true" #formButton>Submit</button>\n\t\t </div>\n\t\t</div>\n\t\t',standalone:!1}]}],ctorParameters:()=>[{type:ProviderService}],propDecorators:{form:[{type:Input}],disabled:[{type:Input}],type:[{type:Input}],formButton:[{type:ViewChild,args:["formButton",{static:!1}]}]}});class FocusDirective{element;focus;constructor(t){this.element=t}ngOnChanges(){this.focus&&this.element.nativeElement.focus()}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:FocusDirective,deps:[{token:i0.ElementRef}],target:i0.ɵɵFactoryTarget.Directive});static"ɵdir"=i0.ɵɵngDeclareDirective({minVersion:"14.0.0",version:"21.0.1",type:FocusDirective,isStandalone:!1,selector:"[focus]",inputs:{focus:"focus"},usesOnChanges:!0,ngImport:i0})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:FocusDirective,decorators:[{type:Directive,args:[{selector:"[focus]",standalone:!1}]}],ctorParameters:()=>[{type:i0.ElementRef}],propDecorators:{focus:[{type:Input}]}});class DialogInputContent{_activeModal;_fb;title="";inputFields=[];formInput;states=["Alabama","Alaska","Arizona","Arkansas","California","Colorado","Connecticut","Delaware","Florida","Georgia","Hawaii","Idaho","Illinois","Indiana","Iowa","Kansas","Kentucky","Louisiana","Maine","Maryland","Massachusetts","Michigan","Minnesota","Mississippi","Missouri","Montana","Nebraska","Nevada","New Hampshire","New Jersey","New Mexico","New York","North Carolina","North Dakota","Ohio","Oklahoma","Oregon","Pennsylvania","Rhode Island","South Carolina","South Dakota","Tennessee","Texas","Utah","Vermont","Virginia","Washington","West Virginia","Wisconsin","Wyoming"];constructor(t,e){this._activeModal=t,this._fb=e}ngOnInit(){this.formInput=this._fb.group({});for(let t=0;t<this.inputFields.length;t++){let e=this.inputFields[t].data;"datetime"===this.inputFields[t].type&&(e=this.normalizeDateTimeValue(this.inputFields[t].data)),null===this.inputFields[t].validators?this.formInput.addControl(this.inputFields[t].form,new UntypedFormControl({value:e,disabled:this.inputFields[t].disabled})):this.formInput.addControl(this.inputFields[t].form,new UntypedFormControl({value:e,disabled:this.inputFields[t].disabled},this.inputFields[t].validators))}}normalizeDateTimeValue(t){if(!t)return null;if(Array.isArray(t))return this.mergeDateTimeParts(t[0],t[1]);if(t instanceof Date)return this.mergeDateTimeParts(t,t);if(t.date||t.time||this.isDateStruct(t)||this.isTimeStruct(t)){const e=this.toDateStruct(t.date?t.date:t),n=this.toTimeStruct(t.time?t.time:t);return this.mergeDateTimeParts(e,n||null,t.mode)}return t}mergeDateTimeParts(t,e,n="datetime"){const o={mode:n},r=this.toDateStruct(t),i=this.toTimeStruct(e);return r&&(o.date=r),i&&(o.time=i),o}isDateStruct(t){return t&&void 0!==t.year&&void 0!==t.month&&void 0!==t.day}isTimeStruct(t){return t&&void 0!==t.hour&&void 0!==t.minute}toDateStruct(t){return t?t instanceof Date?{year:t.getFullYear(),month:t.getMonth()+1,day:t.getDate()}:this.isDateStruct(t)?{year:t.year,month:t.month,day:t.day}:t.date?this.toDateStruct(t.date):null:null}toTimeStruct(t){return t?t instanceof Date?{hour:t.getHours(),minute:t.getMinutes(),second:t.getSeconds(),ms:t.getMilliseconds()}:this.isTimeStruct(t)?{hour:t.hour,minute:t.minute,second:t.second||0,ms:t.ms||0}:t.time?this.toTimeStruct(t.time):null:null}validateInput(t,e){if(t.disabled)return"";let n=!0;for(let o=0;o<t.validators.length;o++)e.controls[t.form].hasError([t.validatorErrors[o]])&&(n=!1);return n&&null!==e.controls[t.form].value?"is-valid":!t.validators.length||!t.required&&n?"":"is-invalid"}getErrorMessages(t,e){let n=[];for(let o=0;o<t.validators.length;o++)e.controls[t.form].hasError([t.validatorErrors[o]])&&n.push(t.validatorMsg[o]);return n}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DialogInputContent,deps:[{token:i1$2.NgbActiveModal},{token:i2.FormBuilder}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"21.0.1",type:DialogInputContent,isStandalone:!1,selector:"resolveio-dialog.input",inputs:{title:"title",inputFields:"inputFields"},ngImport:i0,template:'\n\t\t<form [formGroup]="formInput" novalidate (ngSubmit)="_activeModal.close(this.formInput.controls)">\n\t\t <div class="modal-header">\n\t\t <h4 class="modal-title"><i class="fa fa-plus-circle" style="color: green; font-size: 0.85em" aria-hidden="true"></i> {{ title }}</h4>\n\t\t <button type="button" class="btn-close ms-auto" aria-label="Close" (click)="_activeModal.dismiss()"></button>\n\t\t </div>\n\t\t <div class="modal-body">\n\t\t @for (inputField of inputFields; track inputField.label; let i = $index) {\n\t\t <div class="form-group">\n\t\t <label class="form-control-label">{{inputField.label}}</label>\n\t\t @if (formInput.controls[inputField.form].hasError(\'required\') && inputField.required) {\n\t\t <em>- Required</em>\n\t\t }\n\t\t @if (!formInput.controls[inputField.form].hasError(\'required\') && formInput.controls[inputField.form].invalid) {\n\t\t <em>- Invalid</em>\n\t\t }\n\t\t @if (inputField.type !== \'date\' && inputField.type !== \'datetime\' && inputField.type !== \'state\' && inputField.type !== \'textarea\' && inputField.type !== \'number\' && inputField.type !== \'select\' && inputField.type !== \'boolean\') {\n\t\t <input [autofocus]="i === 0 ? true : false" [focus]="i === 0 ? true : false" [formControlName]="inputField.form" [ngClass]="[\'form-control\', validateInput(inputField, formInput)]" [type]="(inputField.type ? inputField.type : \'text\')">\n\t\t @for (errorMsg of getErrorMessages(inputField, formInput); track errorMsg) {\n\t\t <div class="invalid-feedback">{{errorMsg}}</div>\n\t\t }\n\t\t }\n\t\t @if (inputField.type === \'select\') {\n\t\t <ng-select [formControlName]="inputField.form" [ngClass]="[validateInput(inputField, formInput)]" [placeholder]="inputField.placeholder" [options]="inputField.options" optionValueKey="value" optionLabelKey="text"></ng-select>\n\t\t @for (errorMsg of getErrorMessages(inputField, formInput); track errorMsg) {\n\t\t <div class="invalid-feedback">{{errorMsg}}</div>\n\t\t }\n\t\t }\n\t\t @if (inputField.type === \'state\') {\n\t\t <select [formControlName]="inputField.form" [ngClass]="[\'form-control\', validateInput(inputField, formInput)]">\n\t\t <option value="">Select State</option>\n\t\t @for (state of states; track state) {\n\t\t <option [value]="state">{{state}}</option>\n\t\t }\n\t\t </select>\n\t\t @for (errorMsg of getErrorMessages(inputField, formInput); track errorMsg) {\n\t\t <div class="invalid-feedback">{{errorMsg}}</div>\n\t\t }\n\t\t }\n\t\t @if (inputField.type === \'textarea\') {\n\t\t <textarea rows="4" [formControlName]="inputField.form" [ngClass]="[\'form-control\', validateInput(inputField, formInput)]"></textarea>\n\t\t @for (errorMsg of getErrorMessages(inputField, formInput); track errorMsg) {\n\t\t <div class="invalid-feedback">{{errorMsg}}</div>\n\t\t }\n\t\t }\n\t\t @if (inputField.type === \'number\') {\n\t\t <input [formControlName]="inputField.form" type="number" [ngClass]="[\'form-control\', validateInput(inputField, formInput)]">\n\t\t @for (errorMsg of getErrorMessages(inputField, formInput); track errorMsg) {\n\t\t <div class="invalid-feedback">{{errorMsg}}</div>\n\t\t }\n\t\t }\n\t\t @if (inputField.type === \'date\') {\n\t\t <div class="input-group">\n\t\t <rio-date-picker [formControlName]="inputField.form" placeholder="yyyy-mm-dd" [ngClass]="[\'form-control\', validateInput(inputField, formInput)]" selectionMode="date" [enableTime]="false"></rio-date-picker>\n\t\t </div>\n\t\t }\n\t\t @if (inputField.type === \'datetime\') {\n\t\t <div class="input-group">\n\t\t <rio-date-picker [formControlName]="inputField.form" [ngClass]="[\'form-control\', validateInput(inputField, formInput)]" selectionMode="datetime"></rio-date-picker>\n\t\t </div>\n\t\t }\n\t\t @if (inputField.type === \'boolean\') {\n\t\t <div (click)="formInput.controls[inputField.form].setValue(!formInput.controls[inputField.form].value)">\n\t\t @if (formInput.controls[inputField.form].value) {\n\t\t <i class="fa fa-check" style="color: green; font-size: 24px;" aria-hidden="true"></i>\n\t\t }\n\t\t @if (!formInput.controls[inputField.form].value) {\n\t\t <i class="fa fa-times" style="color: red; font-size: 24px;" aria-hidden="true"></i>\n\t\t }\n\t\t </div>\n\t\t }\n\t\t </div>\n\t\t }\n\t\t </div>\n\t\t <div class="modal-footer">\n\t\t <form-button [form]="formInput"></form-button>\n\t\t <button type="button" class="btn btn-secondary" (click)="_activeModal.dismiss()">Cancel</button>\n\t\t </div>\n\t\t</form>\n\t\t',isInline:!0,dependencies:[{kind:"directive",type:i2.ɵNgNoValidate,selector:"form:not([ngNoForm]):not([ngNativeValidate])"},{kind:"directive",type:i2.NgSelectOption,selector:"option",inputs:["ngValue","value"]},{kind:"directive",type:i2.ɵNgSelectMultipleOption,selector:"option",inputs:["ngValue","value"]},{kind:"directive",type:i2.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:i2.NumberValueAccessor,selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]"},{kind:"directive",type:i2.SelectControlValueAccessor,selector:"select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]",inputs:["compareWith"]},{kind:"directive",type:i2.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:i2.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:i2.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:i2.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"component",type:FormButtonComponent,selector:"form-button",inputs:["form","disabled","type"]},{kind:"component",type:i5.NgSelectComponent,selector:"ng-select",inputs:["placeholder","multiple","panelMaxHeight","panelMaxViewportRatio","optionHeight","virtualBuffer","overlayZIndex","autoSizePanel","panelPosition","autoCenterPanel","viewportMargin","panelWidth","panelFullscreenWidth","clearable","templateLabelFromView","searchable","searchMatchMode","textWrap","compareWith","options","optionLabelKey","optionLabelFn","optionValueKey","optionDisabledKey","optionIdKey","optionGroupKey","disabled","emitOptionObject","debugLog","stickyKey","stickyAutoSave"],outputs:["change"]},{kind:"directive",type:i7.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]},{kind:"component",type:i6.RioDatePickerComponent,selector:"rio-date-picker",inputs:["enableDate","enableTime","selectionMode","firstDayOfWeek","toggleWeekFirstDay","minDate","maxDate","disabled","label","allowSeconds","minuteStep","panelWidth"],outputs:["change"]},{kind:"directive",type:FocusDirective,selector:"[focus]",inputs:["focus"]}]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DialogInputContent,decorators:[{type:Component,args:[{selector:"resolveio-dialog.input",template:'\n\t\t<form [formGroup]="formInput" novalidate (ngSubmit)="_activeModal.close(this.formInput.controls)">\n\t\t <div class="modal-header">\n\t\t <h4 class="modal-title"><i class="fa fa-plus-circle" style="color: green; font-size: 0.85em" aria-hidden="true"></i> {{ title }}</h4>\n\t\t <button type="button" class="btn-close ms-auto" aria-label="Close" (click)="_activeModal.dismiss()"></button>\n\t\t </div>\n\t\t <div class="modal-body">\n\t\t @for (inputField of inputFields; track inputField.label; let i = $index) {\n\t\t <div class="form-group">\n\t\t <label class="form-control-label">{{inputField.label}}</label>\n\t\t @if (formInput.controls[inputField.form].hasError(\'required\') && inputField.required) {\n\t\t <em>- Required</em>\n\t\t }\n\t\t @if (!formInput.controls[inputField.form].hasError(\'required\') && formInput.controls[inputField.form].invalid) {\n\t\t <em>- Invalid</em>\n\t\t }\n\t\t @if (inputField.type !== \'date\' && inputField.type !== \'datetime\' && inputField.type !== \'state\' && inputField.type !== \'textarea\' && inputField.type !== \'number\' && inputField.type !== \'select\' && inputField.type !== \'boolean\') {\n\t\t <input [autofocus]="i === 0 ? true : false" [focus]="i === 0 ? true : false" [formControlName]="inputField.form" [ngClass]="[\'form-control\', validateInput(inputField, formInput)]" [type]="(inputField.type ? inputField.type : \'text\')">\n\t\t @for (errorMsg of getErrorMessages(inputField, formInput); track errorMsg) {\n\t\t <div class="invalid-feedback">{{errorMsg}}</div>\n\t\t }\n\t\t }\n\t\t @if (inputField.type === \'select\') {\n\t\t <ng-select [formControlName]="inputField.form" [ngClass]="[validateInput(inputField, formInput)]" [placeholder]="inputField.placeholder" [options]="inputField.options" optionValueKey="value" optionLabelKey="text"></ng-select>\n\t\t @for (errorMsg of getErrorMessages(inputField, formInput); track errorMsg) {\n\t\t <div class="invalid-feedback">{{errorMsg}}</div>\n\t\t }\n\t\t }\n\t\t @if (inputField.type === \'state\') {\n\t\t <select [formControlName]="inputField.form" [ngClass]="[\'form-control\', validateInput(inputField, formInput)]">\n\t\t <option value="">Select State</option>\n\t\t @for (state of states; track state) {\n\t\t <option [value]="state">{{state}}</option>\n\t\t }\n\t\t </select>\n\t\t @for (errorMsg of getErrorMessages(inputField, formInput); track errorMsg) {\n\t\t <div class="invalid-feedback">{{errorMsg}}</div>\n\t\t }\n\t\t }\n\t\t @if (inputField.type === \'textarea\') {\n\t\t <textarea rows="4" [formControlName]="inputField.form" [ngClass]="[\'form-control\', validateInput(inputField, formInput)]"></textarea>\n\t\t @for (errorMsg of getErrorMessages(inputField, formInput); track errorMsg) {\n\t\t <div class="invalid-feedback">{{errorMsg}}</div>\n\t\t }\n\t\t }\n\t\t @if (inputField.type === \'number\') {\n\t\t <input [formControlName]="inputField.form" type="number" [ngClass]="[\'form-control\', validateInput(inputField, formInput)]">\n\t\t @for (errorMsg of getErrorMessages(inputField, formInput); track errorMsg) {\n\t\t <div class="invalid-feedback">{{errorMsg}}</div>\n\t\t }\n\t\t }\n\t\t @if (inputField.type === \'date\') {\n\t\t <div class="input-group">\n\t\t <rio-date-picker [formControlName]="inputField.form" placeholder="yyyy-mm-dd" [ngClass]="[\'form-control\', validateInput(inputField, formInput)]" selectionMode="date" [enableTime]="false"></rio-date-picker>\n\t\t </div>\n\t\t }\n\t\t @if (inputField.type === \'datetime\') {\n\t\t <div class="input-group">\n\t\t <rio-date-picker [formControlName]="inputField.form" [ngClass]="[\'form-control\', validateInput(inputField, formInput)]" selectionMode="datetime"></rio-date-picker>\n\t\t </div>\n\t\t }\n\t\t @if (inputField.type === \'boolean\') {\n\t\t <div (click)="formInput.controls[inputField.form].setValue(!formInput.controls[inputField.form].value)">\n\t\t @if (formInput.controls[inputField.form].value) {\n\t\t <i class="fa fa-check" style="color: green; font-size: 24px;" aria-hidden="true"></i>\n\t\t }\n\t\t @if (!formInput.controls[inputField.form].value) {\n\t\t <i class="fa fa-times" style="color: red; font-size: 24px;" aria-hidden="true"></i>\n\t\t }\n\t\t </div>\n\t\t }\n\t\t </div>\n\t\t }\n\t\t </div>\n\t\t <div class="modal-footer">\n\t\t <form-button [form]="formInput"></form-button>\n\t\t <button type="button" class="btn btn-secondary" (click)="_activeModal.dismiss()">Cancel</button>\n\t\t </div>\n\t\t</form>\n\t\t',standalone:!1}]}],ctorParameters:()=>[{type:i1$2.NgbActiveModal},{type:i2.FormBuilder}],propDecorators:{title:[{type:Input}],inputFields:[{type:Input}]}});class DialogErrorContent{activeModal;title;body;handleKeyboardEvent(t){13===t.keyCode&&this.activeModal.close()}constructor(t){this.activeModal=t}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DialogErrorContent,deps:[{token:i1$2.NgbActiveModal}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"21.0.1",type:DialogErrorContent,isStandalone:!1,selector:"resolveio-dialog.error",inputs:{title:"title",body:"body"},host:{listeners:{"document:keypress":"handleKeyboardEvent($event)"}},ngImport:i0,template:'\n\t\t<div class="modal-header">\n\t\t\t<h4 class="modal-title"><i class="fa fa-times-circle" style="color: red; font-size: 0.85em" aria-hidden="true"></i> {{ title }}</h4>\n\t\t\t<button type="button" class="btn-close ms-auto" aria-label="Close" (click)="activeModal.dismiss(\'Cross click\')"></button>\n\t\t</div>\n\t\t<div class="modal-body">\n\t\t\t<p>{{ body }}</p>\n\t\t</div>\n\t\t<div class="modal-footer">\n\t\t\t<button type="button" class="btn btn-secondary" (click)="activeModal.close(\'Close click\')">Ok</button>\n\t\t</div>\n \t',isInline:!0})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DialogErrorContent,decorators:[{type:Component,args:[{selector:"resolveio-dialog.error",template:'\n\t\t<div class="modal-header">\n\t\t\t<h4 class="modal-title"><i class="fa fa-times-circle" style="color: red; font-size: 0.85em" aria-hidden="true"></i> {{ title }}</h4>\n\t\t\t<button type="button" class="btn-close ms-auto" aria-label="Close" (click)="activeModal.dismiss(\'Cross click\')"></button>\n\t\t</div>\n\t\t<div class="modal-body">\n\t\t\t<p>{{ body }}</p>\n\t\t</div>\n\t\t<div class="modal-footer">\n\t\t\t<button type="button" class="btn btn-secondary" (click)="activeModal.close(\'Close click\')">Ok</button>\n\t\t</div>\n \t',standalone:!1}]}],ctorParameters:()=>[{type:i1$2.NgbActiveModal}],propDecorators:{title:[{type:Input}],body:[{type:Input}],handleKeyboardEvent:[{type:HostListener,args:["document:keypress",["$event"]]}]}});class DialogConfirmContent{activeModal;title;body;html;handleKeyboardEvent(t){13===t.keyCode&&this.activeModal.close()}constructor(t){this.activeModal=t}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DialogConfirmContent,deps:[{token:i1$2.NgbActiveModal}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"21.0.1",type:DialogConfirmContent,isStandalone:!1,selector:"resolveio-dialog.confirm",inputs:{title:"title",body:"body",html:"html"},host:{listeners:{"document:keypress":"handleKeyboardEvent($event)"}},ngImport:i0,template:'\n\t\t<div class="modal-header">\n\t\t\t<h4 class="modal-title"><i class="fa fa-question-circle" style="color: blue; font-size: 0.85em" aria-hidden="true"></i> {{ title }}</h4>\n\t\t\t<button type="button" class="btn-close ms-auto" aria-label="Close" (click)="activeModal.dismiss(\'Cross click\')"></button>\n\t\t</div>\n\t\t<div class="modal-body">\n\t\t\t<p>{{ body }}</p>\n\t\t\t<div [innerHTML]="html"></div>\n\t\t</div>\n\t\t<div class="modal-footer">\n\t\t\t<button type="button" class="btn btn-success" (click)="activeModal.close()">Yes</button>\n\t\t\t<button type="button" class="btn btn-danger" (click)="activeModal.dismiss()">No</button>\n\t\t</div>\n \t',isInline:!0})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DialogConfirmContent,decorators:[{type:Component,args:[{selector:"resolveio-dialog.confirm",template:'\n\t\t<div class="modal-header">\n\t\t\t<h4 class="modal-title"><i class="fa fa-question-circle" style="color: blue; font-size: 0.85em" aria-hidden="true"></i> {{ title }}</h4>\n\t\t\t<button type="button" class="btn-close ms-auto" aria-label="Close" (click)="activeModal.dismiss(\'Cross click\')"></button>\n\t\t</div>\n\t\t<div class="modal-body">\n\t\t\t<p>{{ body }}</p>\n\t\t\t<div [innerHTML]="html"></div>\n\t\t</div>\n\t\t<div class="modal-footer">\n\t\t\t<button type="button" class="btn btn-success" (click)="activeModal.close()">Yes</button>\n\t\t\t<button type="button" class="btn btn-danger" (click)="activeModal.dismiss()">No</button>\n\t\t</div>\n \t',standalone:!1}]}],ctorParameters:()=>[{type:i1$2.NgbActiveModal}],propDecorators:{title:[{type:Input}],body:[{type:Input}],html:[{type:Input}],handleKeyboardEvent:[{type:HostListener,args:["document:keypress",["$event"]]}]}});class DialogSelectDateTimeContent{_activeModal;_fb;title="";date;showTime=!0;close;allElements;form;constructor(t,e){this._activeModal=t,this._fb=e}ngOnInit(){this.date||(this.date=new Date),this.form=this._fb.group({time:[{hour:this.date.getHours(),minute:this.date.getMinutes(),second:0},[Validators.required]],date:[{year:this.date.getFullYear(),month:this.date.getMonth()+1,day:this.date.getDate()},[Validators.required]]})}ngAfterViewInit(){setTimeout(()=>{let t=this.recursiveFindFirstElement(this.allElements.nativeElement);t?t.focus():(this.close.nativeElement.focus(),this.close.nativeElement.blur())},100)}recursiveFindFirstElement(t){let e=null,n=t.children;for(let t=0;t<Object.keys(n).length;t++){let o=n[Object.keys(n)[t]];if(o.children&&o.children.length)e=this.recursiveFindFirstElement(o);else{if("BUTTON"===o.tagName&&o.classList.contains("close"))return null;if(!("BUTTON"!==o.tagName&&"INPUT"!==o.tagName&&"SELECT"!==o.tagName&&"TEXTAREA"!==o.tagName||o.hidden||o.disabled))return o}if(e)break}return e}submitForm(){this._activeModal.close(new Date(this.form.value.date.year,parseInt(this.form.value.date.month)-1,this.form.value.date.day,this.form.value.time.hour,this.form.value.time.minute,this.form.value.time.second,0))}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DialogSelectDateTimeContent,deps:[{token:i1$2.NgbActiveModal},{token:i2.FormBuilder}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"21.0.1",type:DialogSelectDateTimeContent,isStandalone:!1,selector:"resolveio-dialog.select-datetime",inputs:{title:"title",date:"date",showTime:"showTime"},viewQueries:[{propertyName:"close",first:!0,predicate:["close"],descendants:!0},{propertyName:"allElements",first:!0,predicate:["allElements"],descendants:!0}],ngImport:i0,template:'\n\t \t<style>\n\t \t table {\n\t \t width: 100%;\n\t \t table-layout: fixed;\n\t \t}\n\t \t\n\t \ttr {\n\t \twidth: 100%;\n\t \t}\n\t \t\n\t \ttd {\n\t \twidth: 100%;\n\t \ttext-align: center;\n\t \t}\n\t \t</style>\n\t \t<div #allElements>\n\t \t <form [formGroup]="form" novalidate (ngSubmit)="submitForm()">\n\t \t <div class="modal-header">\n\t \t <h4 class="modal-title"><i class="fa fa-question-circle" style="color: blue; font-size: 0.85em" aria-hidden="true"></i> {{ title }}</h4>\n\t \t <button type="button" class="btn-close ms-auto" aria-label="Close" (click)="_activeModal.dismiss()" #close></button>\n\t \t </div>\n\t \t <div class="modal-body">\n\t \t <table>\n\t \t <tr>\n\t \t <td style="border: none;">\n\t \t <div class="input-group">\n\t \t <rio-date-picker class="form-control" placeholder="yyyy-mm-dd" name="dp" formControlName="date" selectionMode="date" [enableTime]="false"></rio-date-picker>\n\t \t </div>\n\t \t </td>\n\t \t @if (showTime) {\n\t \t <td style="border: none;">\n\t \t <div class="offset-3">\n\t \t <rio-date-picker formControlName="time" selectionMode="time" [enableDate]="false"></rio-date-picker>\n\t \t </div>\n\t \t </td>\n\t \t }\n\t \t </tr>\n\t \t </table>\n\t \t </div>\n\t \t <div class="modal-footer">\n\t \t <form-button [form]="form"></form-button>\n\t \t <button type="button" class="btn btn-secondary" (click)="_activeModal.dismiss()">Cancel</button>\n\t \t </div>\n\t \t </form>\n\t \t</div>\n\t \t',isInline:!0,styles:["table{width:100%;table-layout:fixed}tr{width:100%}td{width:100%;text-align:center}\n"],dependencies:[{kind:"directive",type:i2.ɵNgNoValidate,selector:"form:not([ngNoForm]):not([ngNativeValidate])"},{kind:"directive",type:i2.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:i2.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:i2.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:i2.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"component",type:FormButtonComponent,selector:"form-button",inputs:["form","disabled","type"]},{kind:"component",type:i6.RioDatePickerComponent,selector:"rio-date-picker",inputs:["enableDate","enableTime","selectionMode","firstDayOfWeek","toggleWeekFirstDay","minDate","maxDate","disabled","label","allowSeconds","minuteStep","panelWidth"],outputs:["change"]}]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DialogSelectDateTimeContent,decorators:[{type:Component,args:[{selector:"resolveio-dialog.select-datetime",template:'\n\t \t<style>\n\t \t table {\n\t \t width: 100%;\n\t \t table-layout: fixed;\n\t \t}\n\t \t\n\t \ttr {\n\t \twidth: 100%;\n\t \t}\n\t \t\n\t \ttd {\n\t \twidth: 100%;\n\t \ttext-align: center;\n\t \t}\n\t \t</style>\n\t \t<div #allElements>\n\t \t <form [formGroup]="form" novalidate (ngSubmit)="submitForm()">\n\t \t <div class="modal-header">\n\t \t <h4 class="modal-title"><i class="fa fa-question-circle" style="color: blue; font-size: 0.85em" aria-hidden="true"></i> {{ title }}</h4>\n\t \t <button type="button" class="btn-close ms-auto" aria-label="Close" (click)="_activeModal.dismiss()" #close></button>\n\t \t </div>\n\t \t <div class="modal-body">\n\t \t <table>\n\t \t <tr>\n\t \t <td style="border: none;">\n\t \t <div class="input-group">\n\t \t <rio-date-picker class="form-control" placeholder="yyyy-mm-dd" name="dp" formControlName="date" selectionMode="date" [enableTime]="false"></rio-date-picker>\n\t \t </div>\n\t \t </td>\n\t \t @if (showTime) {\n\t \t <td style="border: none;">\n\t \t <div class="offset-3">\n\t \t <rio-date-picker formControlName="time" selectionMode="time" [enableDate]="false"></rio-date-picker>\n\t \t </div>\n\t \t </td>\n\t \t }\n\t \t </tr>\n\t \t </table>\n\t \t </div>\n\t \t <div class="modal-footer">\n\t \t <form-button [form]="form"></form-button>\n\t \t <button type="button" class="btn btn-secondary" (click)="_activeModal.dismiss()">Cancel</button>\n\t \t </div>\n\t \t </form>\n\t \t</div>\n\t \t',standalone:!1}]}],ctorParameters:()=>[{type:i1$2.NgbActiveModal},{type:i2.FormBuilder}],propDecorators:{title:[{type:Input}],date:[{type:Input}],showTime:[{type:Input}],close:[{type:ViewChild,args:["close",{static:!1}]}],allElements:[{type:ViewChild,args:["allElements",{static:!1}]}]}});class DialogSelectDataLabelsContent{_activeModal;_fb;title="";subtitle="";data;showArraySubData;form;dialogData=[];constructor(t,e){this._activeModal=t,this._fb=e}ngOnInit(){this.getKeys()}getKeys(){let t=Object.keys(this.data),e="";t.filter(t=>"_id"!==t&&!t.startsWith("id_")&&"__v"!==t&&"createdAt"!==t&&"updatedAt"!==t).forEach(t=>{if(e=typeof this.data[t],"object"===e)if(Array.isArray(this.data[t])){if(e="array",this.dialogData.push({label:t.replace(new RegExp("_","g")," ").replace("string","").replace(/\w\S*/g,function(t){return t.charAt(0).toUpperCase()+t.substr(1).toLowerCase()}),data:t,selected:!0,type:e,subLabel:null,subData:null,subtype:null}),!0===this.showArraySubData){Object.keys(this.data[t][0]).filter(t=>"_id"!==t&&!t.startsWith("id_")).forEach(n=>{this.dialogData.push({label:t.replace(new RegExp("_","g")," ").replace("string","").replace(/\w\S*/g,function(t){return t.charAt(0).toUpperCase()+t.substr(1).toLowerCase()}),subLabel:n.replace(new RegExp("_","g")," ").replace("string","").replace(/\w\S*/g,function(t){return t.charAt(0).toUpperCase()+t.substr(1).toLowerCase()}),data:t,type:e,subData:n,selected:!0,subtype:typeof n})})}}else{let n=Object.keys(this.data[t]);n.length?n.filter(t=>"_id"!==t&&!t.startsWith("id_")).forEach(n=>{this.dialogData.push({label:t.replace(new RegExp("_","g")," ").replace("string","").replace(/\w\S*/g,function(t){return t.charAt(0).toUpperCase()+t.substr(1).toLowerCase()}),subLabel:n.replace(new RegExp("_","g")," ").replace("string","").replace(/\w\S*/g,function(t){return t.charAt(0).toUpperCase()+t.substr(1).toLowerCase()}),data:t,subData:n,subtype:null,selected:!0,type:e})}):this.dialogData.push({label:t.replace(new RegExp("_","g")," ").replace("string","").replace(/\w\S*/g,function(t){return t.charAt(0).toUpperCase()+t.substr(1).toLowerCase()}),data:t,selected:!0,type:e,subData:null,subLabel:null,subtype:null})}else this.dialogData.push({label:t.replace(new RegExp("_","g")," ").replace("string","").replace(/\w\S*/g,function(t){return t.charAt(0).toUpperCase()+t.substr(1).toLowerCase()}),data:t,selected:!0,type:e,subData:null,subLabel:null,subtype:null})})}changeSelected(t){t.selected=!t.selected,"array"===t.type&&null===t.subtype&&this.dialogData.filter(e=>e.label===t.label).forEach(e=>{e.selected=t.selected})}submit(){return this.dialogData}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DialogSelectDataLabelsContent,deps:[{token:i1$2.NgbActiveModal},{token:i2.FormBuilder}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"21.0.1",type:DialogSelectDataLabelsContent,isStandalone:!1,selector:"resolveio-dialog.select-data-labels",inputs:{title:"title",subtitle:"subtitle",data:"data",showArraySubData:"showArraySubData"},ngImport:i0,template:'\n\t\t<div class="modal-header">\n\t\t <h4 class="modal-title"><i class="fa fa-question-circle" style="color: blue; font-size: 0.75em" aria-hidden="true"></i> {{ title }} - {{ subtitle }}</h4>\n\t\t <button type="button" class="btn-close ms-auto" aria-label="Close" (click)="_activeModal.dismiss()"></button>\n\t\t</div>\n\t\t<div class="modal-body">\n\t\t <div class="col-lg-12">\n\t\t <div class="row">\n\t\t <div class="col-lg-12">\n\t\t @for (label of dialogData; track label.label) {\n\t\t <div class="row">\n\t\t @if (label.subtype === null && label.type !== \'object\') {\n\t\t <div style="font-size: 12px;">\n\t\t <input type="checkbox" [checked]="label.selected" (click)="changeSelected(label)" style="height: 20px; width: auto;"> {{ label.label }}\n\t\t </div>\n\t\t }\n\t\t @if (label.subtype === null && label.type === \'object\' && label.subLabel !== null) {\n\t\t <div style="font-size: 12px;">\n\t\t <input type="checkbox" [checked]="label.selected" (click)="changeSelected(label)" style="height: 20px; width: auto;"> {{ label.subLabel }}\n\t\t </div>\n\t\t }\n\t\t @if (label.subtype === null && label.type === \'object\' && label.subLabel === null) {\n\t\t <div style="font-size: 12px;">\n\t\t <input type="checkbox" [checked]="label.selected" (click)="changeSelected(label)" style="height: 20px; width: auto;"> {{ label.label }}\n\t\t </div>\n\t\t }\n\t\t @if (label.subtype !== null) {\n\t\t <div style="font-size: 12px;">\n\t\t <input type="checkbox" [checked]="label.selected" (click)="changeSelected(label)" style="height: 20px; width: auto;"> {{ label.subLabel }}\n\t\t </div>\n\t\t }\n\t\t </div>\n\t\t }\n\t\t </div>\n\t\t </div>\n\t\t </div>\n\t\t</div>\n\t\t<div class="modal-footer">\n\t\t <button type="button" class="btn btn-success" (click)="_activeModal.close(dialogData)">Submit</button>\n\t\t <button type="button" class="btn btn-secondary" (click)="_activeModal.dismiss()">Cancel</button>\n\t\t</div>\n\t\t',isInline:!0})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DialogSelectDataLabelsContent,decorators:[{type:Component,args:[{selector:"resolveio-dialog.select-data-labels",template:'\n\t\t<div class="modal-header">\n\t\t <h4 class="modal-title"><i class="fa fa-question-circle" style="color: blue; font-size: 0.75em" aria-hidden="true"></i> {{ title }} - {{ subtitle }}</h4>\n\t\t <button type="button" class="btn-close ms-auto" aria-label="Close" (click)="_activeModal.dismiss()"></button>\n\t\t</div>\n\t\t<div class="modal-body">\n\t\t <div class="col-lg-12">\n\t\t <div class="row">\n\t\t <div class="col-lg-12">\n\t\t @for (label of dialogData; track label.label) {\n\t\t <div class="row">\n\t\t @if (label.subtype === null && label.type !== \'object\') {\n\t\t <div style="font-size: 12px;">\n\t\t <input type="checkbox" [checked]="label.selected" (click)="changeSelected(label)" style="height: 20px; width: auto;"> {{ label.label }}\n\t\t </div>\n\t\t }\n\t\t @if (label.subtype === null && label.type === \'object\' && label.subLabel !== null) {\n\t\t <div style="font-size: 12px;">\n\t\t <input type="checkbox" [checked]="label.selected" (click)="changeSelected(label)" style="height: 20px; width: auto;"> {{ label.subLabel }}\n\t\t </div>\n\t\t }\n\t\t @if (label.subtype === null && label.type === \'object\' && label.subLabel === null) {\n\t\t <div style="font-size: 12px;">\n\t\t <input type="checkbox" [checked]="label.selected" (click)="changeSelected(label)" style="height: 20px; width: auto;"> {{ label.label }}\n\t\t </div>\n\t\t }\n\t\t @if (label.subtype !== null) {\n\t\t <div style="font-size: 12px;">\n\t\t <input type="checkbox" [checked]="label.selected" (click)="changeSelected(label)" style="height: 20px; width: auto;"> {{ label.subLabel }}\n\t\t </div>\n\t\t }\n\t\t </div>\n\t\t }\n\t\t </div>\n\t\t </div>\n\t\t </div>\n\t\t</div>\n\t\t<div class="modal-footer">\n\t\t <button type="button" class="btn btn-success" (click)="_activeModal.close(dialogData)">Submit</button>\n\t\t <button type="button" class="btn btn-secondary" (click)="_activeModal.dismiss()">Cancel</button>\n\t\t</div>\n\t\t',standalone:!1}]}],ctorParameters:()=>[{type:i1$2.NgbActiveModal},{type:i2.FormBuilder}],propDecorators:{title:[{type:Input}],subtitle:[{type:Input}],data:[{type:Input}],showArraySubData:[{type:Input}]}});class ResponsiveButtonGroupComponent extends BaseComponent{_cdRef;_resizeService;_services;collapseSize=900;windowSize=window.innerWidth;windowSizeSubscription=null;constructor(t,e,n){super(n),this._cdRef=t,this._resizeService=e,this._services=n}ngOnInit(){this.windowSizeSubscription=this._resizeService.onResize$.subscribe(t=>{t&&(this.windowSize=t.innerWidth,this._cdRef.detectChanges())})}ngOnDestroy(){this.windowSizeSubscription.unsubscribe()}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:ResponsiveButtonGroupComponent,deps:[{token:i0.ChangeDetectorRef},{token:ResizeService},{token:ProviderService}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"21.0.1",type:ResponsiveButtonGroupComponent,isStandalone:!1,selector:"responsive-button-group",inputs:{collapseSize:"collapseSize"},providers:[ProviderService],usesInheritance:!0,ngImport:i0,template:"<style>\n\t@media screen and (min-width: 900px) {\n\t\t:host ::ng-deep .xsBtnGroup {\n\t\t\tdisplay: none !important;\n\t\t}\n\n\t\t:host ::ng-deep .lgBtnGroup {\n\t\t\tdisplay: inline-flex !important;\n\t\t}\n\n\t\t:host ::ng-deep .lgBtnGroup button {\n\t\t\tmargin-left: 5px !important;\n\t\t}\n\n\t\t:host ::ng-deep .lgBtnGroup a {\n\t\t\tmargin-left: 5px !important;\n\t\t}\n\t}\n\n\t@media screen and (max-width: 900px) {\n\t\t:host ::ng-deep .xsBtnGroup {\n\t\t\tdisplay: inherit !important;\n\t\t}\n\n\t\t:host ::ng-deep .xsBtnGroup button {\n\t\t\tmargin-top: 5px !important;\n\t\t\twidth: 100% !important;\n\t\t}\n\n\t\t:host ::ng-deep .xsBtnGroup a {\n\t\t\tmargin-top: 5px !important;\n\t\t}\n\n\t\t:host ::ng-deep .lgBtnGroup {\n\t\t\tdisplay: none !important;\n\t\t}\n\t}\n</style>\n\n<div [ngClass]=\"windowSize <= collapseSize ? ['btn-group-vertical', 'xsBtnGroup'] : ['btn-group', 'lgBtnGroup']\">\n\t<ng-content></ng-content>\n</div>\n",styles:["@media screen and (min-width:900px){:host ::ng-deep .xsBtnGroup{display:none!important}:host ::ng-deep .lgBtnGroup{display:inline-flex!important}:host ::ng-deep .lgBtnGroup button{margin-left:5px!important}:host ::ng-deep .lgBtnGroup a{margin-left:5px!important}}@media screen and (max-width:900px){:host ::ng-deep .xsBtnGroup{display:inherit!important}:host ::ng-deep .xsBtnGroup button{margin-top:5px!important;width:100%!important}:host ::ng-deep .xsBtnGroup a{margin-top:5px!important}:host ::ng-deep .lgBtnGroup{display:none!important}}\n"],dependencies:[{kind:"directive",type:i7.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]}]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:ResponsiveButtonGroupComponent,decorators:[{type:Component,args:[{providers:[ProviderService],selector:"responsive-button-group",standalone:!1,template:"<style>\n\t@media screen and (min-width: 900px) {\n\t\t:host ::ng-deep .xsBtnGroup {\n\t\t\tdisplay: none !important;\n\t\t}\n\n\t\t:host ::ng-deep .lgBtnGroup {\n\t\t\tdisplay: inline-flex !important;\n\t\t}\n\n\t\t:host ::ng-deep .lgBtnGroup button {\n\t\t\tmargin-left: 5px !important;\n\t\t}\n\n\t\t:host ::ng-deep .lgBtnGroup a {\n\t\t\tmargin-left: 5px !important;\n\t\t}\n\t}\n\n\t@media screen and (max-width: 900px) {\n\t\t:host ::ng-deep .xsBtnGroup {\n\t\t\tdisplay: inherit !important;\n\t\t}\n\n\t\t:host ::ng-deep .xsBtnGroup button {\n\t\t\tmargin-top: 5px !important;\n\t\t\twidth: 100% !important;\n\t\t}\n\n\t\t:host ::ng-deep .xsBtnGroup a {\n\t\t\tmargin-top: 5px !important;\n\t\t}\n\n\t\t:host ::ng-deep .lgBtnGroup {\n\t\t\tdisplay: none !important;\n\t\t}\n\t}\n</style>\n\n<div [ngClass]=\"windowSize <= collapseSize ? ['btn-group-vertical', 'xsBtnGroup'] : ['btn-group', 'lgBtnGroup']\">\n\t<ng-content></ng-content>\n</div>\n"}]}],ctorParameters:()=>[{type:i0.ChangeDetectorRef},{type:ResizeService},{type:ProviderService}],propDecorators:{collapseSize:[{type:Input}]}});class DialogLoginContent{_activeModal;_fb;msAllowed=!1;showLoginText=!0;form;constructor(t,e){this._activeModal=t,this._fb=e}ngOnInit(){this.form=this._fb.group({username:["",[Validators.required]],password:["",[Validators.required]],forgotPassword:[!1]})}toggleForgotPassword(){this.form.controls.forgotPassword.setValue(!this.form.controls.forgotPassword.value),this.form.controls.forgotPassword.value?(this.form.controls.password.setValue(""),this.form.controls.password.clearValidators(),this.form.controls.password.disable()):(this.form.controls.password.setValidators([Validators.required]),this.form.controls.password.enable()),this.form.controls.password.updateValueAndValidity()}close(t){this._activeModal.close({form:this.form,type:t})}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DialogLoginContent,deps:[{token:i1$2.NgbActiveModal},{token:i2.FormBuilder}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"21.0.1",type:DialogLoginContent,isStandalone:!1,selector:"resolveio-dialog.login",inputs:{msAllowed:"msAllowed",showLoginText:"showLoginText"},ngImport:i0,template:'\n\t\t<style>\n\t\t collapse-table {\n\t\t width: 100%;\n\t\t}\n\t\t\n\t\t.navbar-light .navbar-nav .active>.nav-link, .navbar-light .navbar-nav .nav-link.active, .navbar-light .navbar-nav .nav-link.show, .navbar-light .navbar-nav .show>.nav-link {\n\t\tcolor: #0b4499;\n\t\t}\n\t\t.navbar-light .navbar-nav .nav-link {\n\t\tcolor:#333;\n\t\t}\n\t\ta.nav-link.loginreg {\n\t\tbackground-color: #0b4499;\n\t\tcolor: #fff !important;\n\t\tborder-radius: 40px;\n\t\t}\n\t\ta.nav-link.loginreg:hover {\n\t\tbackground: #1668e2;\n\t\t}\n\t\t.nav-link {\n\t\tcolor: #333333;\n\t\tfont-size: 150%\n\t\t}\n\t\t.nav-item a.nav-link.active {\n\t\tcolor: #0b4499;\n\t\t}\n\t\t.contactimg>img{\n\t\twidth: 100%;\n\t\t}\n\t\t\n\t\t.log-box {\n\t\tpadding-top: 0px;\n\t\tpadding-bottom: 26px;\n\t\t}\n\t\t.loginform .form-control, .register-form .form-control {\n\t\tcolor: #000;\n\t\theight: 52px;\n\t\t}\n\t\t.loginform {\n\t\tmargin-top: 35px;\n\t\t}\n\t\t.loginform label {\n\t\tfont-size: 18px;\n\t\tfont-weight: 600;\n\t\t}\n\t\t\n\t\t.loginbtn {\n\t\tbackground: #0b4499;\n\t\twidth: 100%;\n\t\tmargin-top: 44px;\n\t\theight: 52px;\n\t\tfont-size: 22px;\n\t\tborder-radius: 2px;\n\t\tcolor: #fff !important;\n\t\t}\n\t\t\n\t\t.login365btn {\n\t\tbackground: orange;\n\t\twidth: 100%;\n\t\tmargin-top: 44px;\n\t\theight: 52px;\n\t\tfont-size: 22px;\n\t\tborder-radius: 2px;\n\t\tcolor: #fff !important;\n\t\t}\n\t\t\n\t\t.contactimg {\n\t\tposition: relative;\n\t\t}\n\t\t.login-logo {\n\t\tmargin-bottom: 20px;\n\t\t}\n\t\t\n\t\t.textbox {\n\t\tposition: absolute;\n\t\ttop: 50%;\n\t\tcolor: #fff;\n\t\tpadding: 40px;\n\t\ttransform: translate(0%, -50%);\n\t\ttext-align: center;\n\t\t}\n\t\t.sign-btn {\n\t\tbackground: #0b4499;\n\t\twidth: 100%;\n\t\tmargin-top: 14px;\n\t\theight: 52px;\n\t\tfont-size: 22px;\n\t\tborder-radius: 2px;\n\t\tcolor: #fff !important;\n\t\t}\n\t\t\n\t\tbutton.btn.sign-btn:hover {\n\t\tbackground: #1668e2;\n\t\t}\n\t\t\n\t\t.login-card {\n\t\tmargin-bottom: 20px;\n\t\tpadding: 20px;\n\t\tpadding-top: 10px;\n\t\tborder-radius: 8px;\n\t\tbox-shadow: 0 4px 8px rgba(0,0,0,0.2), 0 6px 20px rgba(0,0,0,0.19); /* Enhanced shadow */\n\t\tbackground-color: #FFFFFF;\n\t\t}\n\t\t\n\t\t.login-header {\n\t\tfont-size: 20px;\n\t\tfont-weight: bold;\n\t\tcolor: #333;\n\t\tmargin-bottom: 15px;\n\t\ttext-align: center;\n\t\t}\n\t\t\n\t\t.employee-login-btn {\n\t\tbackground-color: #0078D4; /* Microsoft Blue */\n\t\tcolor: white;\n\t\tpadding: 10px 20px; /* Larger size */\n\t\tfont-size: 16px; /* Larger text */\n\t\tborder-radius: 5px; /* Rounded corners */\n\t\twidth: 100%; /* Full width */\n\t\tbox-sizing: border-box; /* Include padding and border in the element\'s width and height */\n\t\t}\n\t\t\n\t\t.third-party-login-btn {\n\t\tbackground-color: #28a745; /* Bootstrap success green */\n\t\tcolor: white;\n\t\tborder-radius: 5px; /* Rounded corners */\n\t\twidth: 100%; /* Full width */\n\t\tbox-sizing: border-box; /* Include padding and border in the element\'s width and height */\n\t\tmargin-top: 10px;\n\t\t}\n\t\t\n\t\t.third-party-login-section {\n\t\tbackground-color: #F3F4F6; /* Optional: Light grey background for contrast */\n\t\tborder-radius: 8px; /* Optional: Rounded corners for the input form */\n\t\t}\n\t\t\n\t\t.employee-login-section, .third-party-login-section {\n\t\ttext-align: center;\n\t\t}\n\t\t\n\t\t\n\t\t</style>\n\t\t<form [formGroup]="form" novalidate>\n\t\t <div class="modal-header">\n\t\t <h4 class="modal-title"><b>Login</b></h4>\n\t\t <button type="button" class="btn-close ms-auto" aria-label="Close" (click)="_activeModal.dismiss()"></button>\n\t\t </div>\n\t\t @if (form) {\n\t\t <div class="modal-body">\n\t\t <div class="row justify-content-md-center">\n\t\t <div class="col-lg-12">\n\t\t <div class="row bg-white">\n\t\t <div class="col-lg-6">\n\t\t <div class="contactimg">\n\t\t <img src="/assets/images/loginsignup/formimg.jpg" alt="images" class="img-fluid">\n\t\t @if (showLoginText) {\n\t\t <div class="textbox">\n\t\t <div class="login-logo"><img src="/assets/images/loginsignup/login-logo.png" alt="images"></div>\n\t\t </div>\n\t\t }\n\t\t </div>\n\t\t </div>\n\t\t <div class="col-lg-6">\n\t\t <div class="log-box">\n\t\t <div class="loginform" style="margin: 0px;">\n\t\t @if (!msAllowed) {\n\t\t <div class="login-card">\n\t\t <h3 class="login-header">Employee/Customer Login</h3>\n\t\t <div class="third-party-login-section">\n\t\t <div class="form-group">\n\t\t <label>Username/Email</label>\n\t\t @if (form.controls.username.hasError(\'required\')) {\n\t\t <em>- Required</em>\n\t\t }\n\t\t <input type="email" [ngClass]="[\'form-control\', form.controls.username.valid ? \'is-valid\' : \'is-invalid\']" formControlName="username" [autofocus]="true" [focus]="true" aria-describedby="emailHelp" placeholder="Your Username/Email" autocomplete="username">\n\t\t </div>\n\t\t <div class="form-group">\n\t\t <label>Password</label>\n\t\t @if (form.controls.password.hasError(\'required\')) {\n\t\t <em>- Required</em>\n\t\t }\n\t\t <input type="password" [ngClass]="[\'form-control\', form.controls.password.enabled ? (form.controls.password.valid ? \'is-valid\' : \'is-invalid\') : \'\']" formControlName="password" placeholder="Your Password" autocomplete="current-password">\n\t\t </div>\n\t\t <div class="form-check text-right">\n\t\t <label class="form-check-label"><a href="javascript:void(0)" (click)="toggleForgotPassword()"> {{!form.controls.forgotPassword.value ? \'Forgot Password?\' : \'Enter Password\'}} </a></label>\n\t\t </div>\n\t\t <button type="submit" class="btn third-party-login-btn" (click)="close(\'ResolveIO\')">{{!form.controls.forgotPassword.value ? \'Login\' : \'Submit\'}}</button>\n\t\t </div>\n\t\t </div>\n\t\t }\n\t\t @if (msAllowed) {\n\t\t \x3c!-- Employee Login Section --\x3e\n\t\t <div class="login-card">\n\t\t <h3 class="login-header">Employee Login</h3>\n\t\t <div class="employee-login-section">\n\t\t <button type="submit" class="btn employee-login-btn" (click)="close(\'MS\')">Employee Login</button>\n\t\t </div>\n\t\t </div>\n\t\t \x3c!-- Third Party Login Section --\x3e\n\t\t <div class="login-card">\n\t\t <h3 class="login-header">Third Party Login</h3>\n\t\t <div class="third-party-login-section">\n\t\t <div class="form-group">\n\t\t <label>Username/Email</label>\n\t\t @if (form.controls.username.hasError(\'required\')) {\n\t\t <em>- Required</em>\n\t\t }\n\t\t <input type="email" [ngClass]="[\'form-control\', form.controls.username.valid ? \'is-valid\' : \'is-invalid\']" formControlName="username" [autofocus]="true" [focus]="true" aria-describedby="emailHelp" placeholder="Your Username/Email" autocomplete="username">\n\t\t </div>\n\t\t <div class="form-group">\n\t\t <label>Password</label>\n\t\t @if (form.controls.password.hasError(\'required\')) {\n\t\t <em>- Required</em>\n\t\t }\n\t\t <input type="password" [ngClass]="[\'form-control\', form.controls.password.enabled ? (form.controls.password.valid ? \'is-valid\' : \'is-invalid\') : \'\']" formControlName="password" placeholder="Your Password" autocomplete="current-password">\n\t\t </div>\n\t\t <div class="form-check text-right">\n\t\t <label class="form-check-label"><a href="javascript:void(0)" (click)="toggleForgotPassword()"> {{!form.controls.forgotPassword.value ? \'Forgot Password?\' : \'Enter Password\'}} </a></label>\n\t\t </div>\n\t\t <button type="submit" class="btn third-party-login-btn" (click)="close(\'ResolveIO\')">{{!form.controls.forgotPassword.value ? \'Login\' : \'Submit\'}}</button>\n\t\t </div>\n\t\t </div>\n\t\t }\n\t\t </div>\n\t\t </div>\n\t\t </div>\n\t\t </div>\n\t\t </div>\n\t\t </div>\n\t\t </div>\n\t\t }\n\t\t <div class="modal-footer">\n\t\t <responsive-button-group>\n\t\t <button type="button" class="btn btn-secondary" (click)="_activeModal.dismiss()">Cancel</button>\n\t\t </responsive-button-group>\n\t\t </div>\n\t\t</form>\n\t\t',isInline:!0,styles:["collapse-table{width:100%}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:#0b4499}.navbar-light .navbar-nav .nav-link{color:#333}a.nav-link.loginreg{background-color:#0b4499;color:#fff!important;border-radius:40px}a.nav-link.loginreg:hover{background:#1668e2}.nav-link{color:#333;font-size:150%}.nav-item a.nav-link.active{color:#0b4499}.contactimg>img{width:100%}.log-box{padding-top:0;padding-bottom:26px}.loginform .form-control,.register-form .form-control{color:#000;height:52px}.loginform{margin-top:35px}.loginform label{font-size:18px;font-weight:600}.loginbtn{background:#0b4499;width:100%;margin-top:44px;height:52px;font-size:22px;border-radius:2px;color:#fff!important}.login365btn{background:orange;width:100%;margin-top:44px;height:52px;font-size:22px;border-radius:2px;color:#fff!important}.contactimg{position:relative}.login-logo{margin-bottom:20px}.textbox{position:absolute;top:50%;color:#fff;padding:40px;transform:translateY(-50%);text-align:center}.sign-btn{background:#0b4499;width:100%;margin-top:14px;height:52px;font-size:22px;border-radius:2px;color:#fff!important}button.btn.sign-btn:hover{background:#1668e2}.login-card{margin-bottom:20px;padding:10px 20px 20px;border-radius:8px;box-shadow:0 4px 8px #0003,0 6px 20px #00000030;background-color:#fff}.login-header{font-size:20px;font-weight:700;color:#333;margin-bottom:15px;text-align:center}.employee-login-btn{background-color:#0078d4;color:#fff;padding:10px 20px;font-size:16px;border-radius:5px;width:100%;box-sizing:border-box}.third-party-login-btn{background-color:#28a745;color:#fff;border-radius:5px;width:100%;box-sizing:border-box;margin-top:10px}.third-party-login-section{background-color:#f3f4f6;border-radius:8px}.employee-login-section,.third-party-login-section{text-align:center}\n"],dependencies:[{kind:"directive",type:i2.ɵNgNoValidate,selector:"form:not([ngNoForm]):not([ngNativeValidate])"},{kind:"directive",type:i2.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:i2.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:i2.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:i2.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:i2.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"component",type:ResponsiveButtonGroupComponent,selector:"responsive-button-group",inputs:["collapseSize"]},{kind:"directive",type:i7.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]},{kind:"directive",type:FocusDirective,selector:"[focus]",inputs:["focus"]}]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DialogLoginContent,decorators:[{type:Component,args:[{selector:"resolveio-dialog.login",template:'\n\t\t<style>\n\t\t collapse-table {\n\t\t width: 100%;\n\t\t}\n\t\t\n\t\t.navbar-light .navbar-nav .active>.nav-link, .navbar-light .navbar-nav .nav-link.active, .navbar-light .navbar-nav .nav-link.show, .navbar-light .navbar-nav .show>.nav-link {\n\t\tcolor: #0b4499;\n\t\t}\n\t\t.navbar-light .navbar-nav .nav-link {\n\t\tcolor:#333;\n\t\t}\n\t\ta.nav-link.loginreg {\n\t\tbackground-color: #0b4499;\n\t\tcolor: #fff !important;\n\t\tborder-radius: 40px;\n\t\t}\n\t\ta.nav-link.loginreg:hover {\n\t\tbackground: #1668e2;\n\t\t}\n\t\t.nav-link {\n\t\tcolor: #333333;\n\t\tfont-size: 150%\n\t\t}\n\t\t.nav-item a.nav-link.active {\n\t\tcolor: #0b4499;\n\t\t}\n\t\t.contactimg>img{\n\t\twidth: 100%;\n\t\t}\n\t\t\n\t\t.log-box {\n\t\tpadding-top: 0px;\n\t\tpadding-bottom: 26px;\n\t\t}\n\t\t.loginform .form-control, .register-form .form-control {\n\t\tcolor: #000;\n\t\theight: 52px;\n\t\t}\n\t\t.loginform {\n\t\tmargin-top: 35px;\n\t\t}\n\t\t.loginform label {\n\t\tfont-size: 18px;\n\t\tfont-weight: 600;\n\t\t}\n\t\t\n\t\t.loginbtn {\n\t\tbackground: #0b4499;\n\t\twidth: 100%;\n\t\tmargin-top: 44px;\n\t\theight: 52px;\n\t\tfont-size: 22px;\n\t\tborder-radius: 2px;\n\t\tcolor: #fff !important;\n\t\t}\n\t\t\n\t\t.login365btn {\n\t\tbackground: orange;\n\t\twidth: 100%;\n\t\tmargin-top: 44px;\n\t\theight: 52px;\n\t\tfont-size: 22px;\n\t\tborder-radius: 2px;\n\t\tcolor: #fff !important;\n\t\t}\n\t\t\n\t\t.contactimg {\n\t\tposition: relative;\n\t\t}\n\t\t.login-logo {\n\t\tmargin-bottom: 20px;\n\t\t}\n\t\t\n\t\t.textbox {\n\t\tposition: absolute;\n\t\ttop: 50%;\n\t\tcolor: #fff;\n\t\tpadding: 40px;\n\t\ttransform: translate(0%, -50%);\n\t\ttext-align: center;\n\t\t}\n\t\t.sign-btn {\n\t\tbackground: #0b4499;\n\t\twidth: 100%;\n\t\tmargin-top: 14px;\n\t\theight: 52px;\n\t\tfont-size: 22px;\n\t\tborder-radius: 2px;\n\t\tcolor: #fff !important;\n\t\t}\n\t\t\n\t\tbutton.btn.sign-btn:hover {\n\t\tbackground: #1668e2;\n\t\t}\n\t\t\n\t\t.login-card {\n\t\tmargin-bottom: 20px;\n\t\tpadding: 20px;\n\t\tpadding-top: 10px;\n\t\tborder-radius: 8px;\n\t\tbox-shadow: 0 4px 8px rgba(0,0,0,0.2), 0 6px 20px rgba(0,0,0,0.19); /* Enhanced shadow */\n\t\tbackground-color: #FFFFFF;\n\t\t}\n\t\t\n\t\t.login-header {\n\t\tfont-size: 20px;\n\t\tfont-weight: bold;\n\t\tcolor: #333;\n\t\tmargin-bottom: 15px;\n\t\ttext-align: center;\n\t\t}\n\t\t\n\t\t.employee-login-btn {\n\t\tbackground-color: #0078D4; /* Microsoft Blue */\n\t\tcolor: white;\n\t\tpadding: 10px 20px; /* Larger size */\n\t\tfont-size: 16px; /* Larger text */\n\t\tborder-radius: 5px; /* Rounded corners */\n\t\twidth: 100%; /* Full width */\n\t\tbox-sizing: border-box; /* Include padding and border in the element\'s width and height */\n\t\t}\n\t\t\n\t\t.third-party-login-btn {\n\t\tbackground-color: #28a745; /* Bootstrap success green */\n\t\tcolor: white;\n\t\tborder-radius: 5px; /* Rounded corners */\n\t\twidth: 100%; /* Full width */\n\t\tbox-sizing: border-box; /* Include padding and border in the element\'s width and height */\n\t\tmargin-top: 10px;\n\t\t}\n\t\t\n\t\t.third-party-login-section {\n\t\tbackground-color: #F3F4F6; /* Optional: Light grey background for contrast */\n\t\tborder-radius: 8px; /* Optional: Rounded corners for the input form */\n\t\t}\n\t\t\n\t\t.employee-login-section, .third-party-login-section {\n\t\ttext-align: center;\n\t\t}\n\t\t\n\t\t\n\t\t</style>\n\t\t<form [formGroup]="form" novalidate>\n\t\t <div class="modal-header">\n\t\t <h4 class="modal-title"><b>Login</b></h4>\n\t\t <button type="button" class="btn-close ms-auto" aria-label="Close" (click)="_activeModal.dismiss()"></button>\n\t\t </div>\n\t\t @if (form) {\n\t\t <div class="modal-body">\n\t\t <div class="row justify-content-md-center">\n\t\t <div class="col-lg-12">\n\t\t <div class="row bg-white">\n\t\t <div class="col-lg-6">\n\t\t <div class="contactimg">\n\t\t <img src="/assets/images/loginsignup/formimg.jpg" alt="images" class="img-fluid">\n\t\t @if (showLoginText) {\n\t\t <div class="textbox">\n\t\t <div class="login-logo"><img src="/assets/images/loginsignup/login-logo.png" alt="images"></div>\n\t\t </div>\n\t\t }\n\t\t </div>\n\t\t </div>\n\t\t <div class="col-lg-6">\n\t\t <div class="log-box">\n\t\t <div class="loginform" style="margin: 0px;">\n\t\t @if (!msAllowed) {\n\t\t <div class="login-card">\n\t\t <h3 class="login-header">Employee/Customer Login</h3>\n\t\t <div class="third-party-login-section">\n\t\t <div class="form-group">\n\t\t <label>Username/Email</label>\n\t\t @if (form.controls.username.hasError(\'required\')) {\n\t\t <em>- Required</em>\n\t\t }\n\t\t <input type="email" [ngClass]="[\'form-control\', form.controls.username.valid ? \'is-valid\' : \'is-invalid\']" formControlName="username" [autofocus]="true" [focus]="true" aria-describedby="emailHelp" placeholder="Your Username/Email" autocomplete="username">\n\t\t </div>\n\t\t <div class="form-group">\n\t\t <label>Password</label>\n\t\t @if (form.controls.password.hasError(\'required\')) {\n\t\t <em>- Required</em>\n\t\t }\n\t\t <input type="password" [ngClass]="[\'form-control\', form.controls.password.enabled ? (form.controls.password.valid ? \'is-valid\' : \'is-invalid\') : \'\']" formControlName="password" placeholder="Your Password" autocomplete="current-password">\n\t\t </div>\n\t\t <div class="form-check text-right">\n\t\t <label class="form-check-label"><a href="javascript:void(0)" (click)="toggleForgotPassword()"> {{!form.controls.forgotPassword.value ? \'Forgot Password?\' : \'Enter Password\'}} </a></label>\n\t\t </div>\n\t\t <button type="submit" class="btn third-party-login-btn" (click)="close(\'ResolveIO\')">{{!form.controls.forgotPassword.value ? \'Login\' : \'Submit\'}}</button>\n\t\t </div>\n\t\t </div>\n\t\t }\n\t\t @if (msAllowed) {\n\t\t \x3c!-- Employee Login Section --\x3e\n\t\t <div class="login-card">\n\t\t <h3 class="login-header">Employee Login</h3>\n\t\t <div class="employee-login-section">\n\t\t <button type="submit" class="btn employee-login-btn" (click)="close(\'MS\')">Employee Login</button>\n\t\t </div>\n\t\t </div>\n\t\t \x3c!-- Third Party Login Section --\x3e\n\t\t <div class="login-card">\n\t\t <h3 class="login-header">Third Party Login</h3>\n\t\t <div class="third-party-login-section">\n\t\t <div class="form-group">\n\t\t <label>Username/Email</label>\n\t\t @if (form.controls.username.hasError(\'required\')) {\n\t\t <em>- Required</em>\n\t\t }\n\t\t <input type="email" [ngClass]="[\'form-control\', form.controls.username.valid ? \'is-valid\' : \'is-invalid\']" formControlName="username" [autofocus]="true" [focus]="true" aria-describedby="emailHelp" placeholder="Your Username/Email" autocomplete="username">\n\t\t </div>\n\t\t <div class="form-group">\n\t\t <label>Password</label>\n\t\t @if (form.controls.password.hasError(\'required\')) {\n\t\t <em>- Required</em>\n\t\t }\n\t\t <input type="password" [ngClass]="[\'form-control\', form.controls.password.enabled ? (form.controls.password.valid ? \'is-valid\' : \'is-invalid\') : \'\']" formControlName="password" placeholder="Your Password" autocomplete="current-password">\n\t\t </div>\n\t\t <div class="form-check text-right">\n\t\t <label class="form-check-label"><a href="javascript:void(0)" (click)="toggleForgotPassword()"> {{!form.controls.forgotPassword.value ? \'Forgot Password?\' : \'Enter Password\'}} </a></label>\n\t\t </div>\n\t\t <button type="submit" class="btn third-party-login-btn" (click)="close(\'ResolveIO\')">{{!form.controls.forgotPassword.value ? \'Login\' : \'Submit\'}}</button>\n\t\t </div>\n\t\t </div>\n\t\t }\n\t\t </div>\n\t\t </div>\n\t\t </div>\n\t\t </div>\n\t\t </div>\n\t\t </div>\n\t\t </div>\n\t\t }\n\t\t <div class="modal-footer">\n\t\t <responsive-button-group>\n\t\t <button type="button" class="btn btn-secondary" (click)="_activeModal.dismiss()">Cancel</button>\n\t\t </responsive-button-group>\n\t\t </div>\n\t\t</form>\n\t\t',standalone:!1}]}],ctorParameters:()=>[{type:i1$2.NgbActiveModal},{type:i2.FormBuilder}],propDecorators:{msAllowed:[{type:Input}],showLoginText:[{type:Input}]}});class DialogRegisterContent{_activeModal;_fb;form;constructor(t,e){this._activeModal=t,this._fb=e}ngOnInit(){this.form=this._fb.group({username:["",[Validators.required]],name:["",[Validators.required]],phone:["",[Validators.required]],company:["",[Validators.required]],email:["",[Validators.required]]})}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DialogRegisterContent,deps:[{token:i1$2.NgbActiveModal},{token:i2.FormBuilder}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"21.0.1",type:DialogRegisterContent,isStandalone:!1,selector:"resolveio-dialog.register",ngImport:i0,template:'\n\t\t<style>\n\t\t collapse-table {\n\t\t width: 100%;\n\t\t}\n\t\t\n\t\t.navbar-light .navbar-nav .active>.nav-link, .navbar-light .navbar-nav .nav-link.active, .navbar-light .navbar-nav .nav-link.show, .navbar-light .navbar-nav .show>.nav-link {\n\t\tcolor: #0b4499;\n\t\t}\n\t\t.navbar-light .navbar-nav .nav-link {\n\t\tcolor:#333;\n\t\t}\n\t\ta.nav-link.loginreg {\n\t\tbackground-color: #0b4499;\n\t\tcolor: #fff !important;\n\t\tborder-radius: 40px;\n\t\t}\n\t\ta.nav-link.loginreg:hover {\n\t\tbackground: #1668e2;\n\t\t}\n\t\t.nav-link {\n\t\tcolor: #333333;\n\t\tfont-size: 150%\n\t\t}\n\t\t.nav-item a.nav-link.active {\n\t\tcolor: #0b4499;\n\t\t}\n\t\t.contactimg>img{\n\t\twidth: 100%;\n\t\t}\n\t\t\n\t\t.log-box {\n\t\tpadding-top: 26px;\n\t\tpadding-bottom: 26px;\n\t\t}\n\t\t.loginform .form-control, .register-form .form-control {\n\t\tcolor: #000;\n\t\theight: 52px;\n\t\t}\n\t\t.loginform {\n\t\tmargin-top: 35px;\n\t\t}\n\t\t.loginform label {\n\t\tfont-size: 18px;\n\t\tfont-weight: 600;\n\t\t}\n\t\t\n\t\t.loginbtn {\n\t\tbackground: #0b4499;\n\t\twidth: 100%;\n\t\tmargin-top: 44px;\n\t\theight: 52px;\n\t\tfont-size: 22px;\n\t\tborder-radius: 2px;\n\t\tcolor: #fff !important;\n\t\t}\n\t\t\n\t\t.contactimg {\n\t\tposition: relative;\n\t\t}\n\t\t.login-logo {\n\t\tmargin-bottom: 20px;\n\t\t}\n\t\t\n\t\t.textbox {\n\t\tposition: absolute;\n\t\ttop: 50%;\n\t\tcolor: #fff;\n\t\tpadding: 40px;\n\t\ttransform: translate(0%, -50%);\n\t\ttext-align: center;\n\t\t}\n\t\t.sign-btn {\n\t\tbackground: #0b4499;\n\t\twidth: 100%;\n\t\tmargin-top: 14px;\n\t\theight: 52px;\n\t\tfont-size: 22px;\n\t\tborder-radius: 2px;\n\t\tcolor: #fff !important;\n\t\t}\n\t\t\n\t\tbutton.btn.sign-btn:hover {\n\t\tbackground: #1668e2;\n\t\t}\n\t\t</style>\n\t\t<form [formGroup]="form" novalidate (ngSubmit)="_activeModal.close(form)">\n\t\t <div class="modal-header">\n\t\t <h4 class="modal-title"><i class="fa fa-question-circle" style="color: blue; font-size: 0.85em" aria-hidden="true"></i> Register</h4>\n\t\t <button type="button" class="btn-close ms-auto" aria-label="Close" (click)="_activeModal.dismiss()"></button>\n\t\t </div>\n\t\t @if (form) {\n\t\t <div class="modal-body">\n\t\t <div class="row justify-content-md-center">\n\t\t <div class="col-lg-12">\n\t\t <div class="row bg-white">\n\t\t <div class="col-lg-6">\n\t\t <div class="contactimg">\n\t\t <img src="/assets/images/loginsignup/formimg.jpg" alt="images" class="img-fluid">\n\t\t <div class="textbox">\n\t\t <div class="login-logo"><img src="/assets/images/loginsignup/login-logo.png" alt="images"></div>\n\t\t </div>\n\t\t </div>\n\t\t </div>\n\t\t <div class="col-lg-6">\n\t\t <div class="log-box">\n\t\t <div class="register-form">\n\t\t <div class="form-group">\n\t\t <label>User Name</label>\n\t\t @if (form.controls.username.hasError(\'required\')) {\n\t\t <em>- Required</em>\n\t\t }\n\t\t <input type="text" class="form-control" [ngClass]="[\'form-control\', form.controls.username.valid ? \'is-valid\' : \'is-invalid\']" formControlName="username" [autofocus]="true" [focus]="true" aria-describedby="emailHelp" placeholder="User Name">\n\t\t </div>\n\t\t <div class="form-group">\n\t\t <label>Full Name</label>\n\t\t @if (form.controls.name.hasError(\'required\')) {\n\t\t <em>- Required</em>\n\t\t }\n\t\t <input type="text" class="form-control" [ngClass]="[\'form-control\', form.controls.name.valid ? \'is-valid\' : \'is-invalid\']" formControlName="name" aria-describedby="emailHelp" placeholder="Name">\n\t\t </div>\n\t\t <div class="form-group">\n\t\t <label>Phone Number</label>\n\t\t @if (form.controls.phone.hasError(\'required\')) {\n\t\t <em>- Required</em>\n\t\t }\n\t\t <input type="text" class="form-control" [ngClass]="[\'form-control\', form.controls.phone.valid ? \'is-valid\' : \'is-invalid\']" formControlName="phone" placeholder="Phone Number">\n\t\t </div>\n\t\t <div class="form-group">\n\t\t <label>Company</label>\n\t\t @if (form.controls.company.hasError(\'required\')) {\n\t\t <em>- Required</em>\n\t\t }\n\t\t <input type="text" class="form-control" [ngClass]="[\'form-control\', form.controls.company.valid ? \'is-valid\' : \'is-invalid\']" formControlName="company" placeholder="Company Name">\n\t\t </div>\n\t\t <div class="form-group">\n\t\t <label>Email</label>\n\t\t @if (form.controls.email.hasError(\'required\')) {\n\t\t <em>- Required</em>\n\t\t }\n\t\t <input type="email" class="form-control" [ngClass]="[\'form-control\', form.controls.email.valid ? \'is-valid\' : \'is-invalid\']" formControlName="email" placeholder="Email">\n\t\t </div>\n\t\t <button type="submit" class="btn sign-btn">Signup</button>\n\t\t </div>\n\t\t </div>\n\t\t </div>\n\t\t </div>\n\t\t </div>\n\t\t </div>\n\t\t </div>\n\t\t }\n\t\t <div class="modal-footer">\n\t\t <responsive-button-group>\n\t\t <button type="button" class="btn btn-secondary" (click)="_activeModal.dismiss()">Cancel</button>\n\t\t </responsive-button-group>\n\t\t </div>\n\t\t</form>\n\t\t',isInline:!0,styles:["collapse-table{width:100%}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:#0b4499}.navbar-light .navbar-nav .nav-link{color:#333}a.nav-link.loginreg{background-color:#0b4499;color:#fff!important;border-radius:40px}a.nav-link.loginreg:hover{background:#1668e2}.nav-link{color:#333;font-size:150%}.nav-item a.nav-link.active{color:#0b4499}.contactimg>img{width:100%}.log-box{padding-top:26px;padding-bottom:26px}.loginform .form-control,.register-form .form-control{color:#000;height:52px}.loginform{margin-top:35px}.loginform label{font-size:18px;font-weight:600}.loginbtn{background:#0b4499;width:100%;margin-top:44px;height:52px;font-size:22px;border-radius:2px;color:#fff!important}.contactimg{position:relative}.login-logo{margin-bottom:20px}.textbox{position:absolute;top:50%;color:#fff;padding:40px;transform:translateY(-50%);text-align:center}.sign-btn{background:#0b4499;width:100%;margin-top:14px;height:52px;font-size:22px;border-radius:2px;color:#fff!important}button.btn.sign-btn:hover{background:#1668e2}\n"],dependencies:[{kind:"directive",type:i2.ɵNgNoValidate,selector:"form:not([ngNoForm]):not([ngNativeValidate])"},{kind:"directive",type:i2.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:i2.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:i2.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:i2.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:i2.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"component",type:ResponsiveButtonGroupComponent,selector:"responsive-button-group",inputs:["collapseSize"]},{kind:"directive",type:i7.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]},{kind:"directive",type:FocusDirective,selector:"[focus]",inputs:["focus"]}]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DialogRegisterContent,decorators:[{type:Component,args:[{selector:"resolveio-dialog.register",template:'\n\t\t<style>\n\t\t collapse-table {\n\t\t width: 100%;\n\t\t}\n\t\t\n\t\t.navbar-light .navbar-nav .active>.nav-link, .navbar-light .navbar-nav .nav-link.active, .navbar-light .navbar-nav .nav-link.show, .navbar-light .navbar-nav .show>.nav-link {\n\t\tcolor: #0b4499;\n\t\t}\n\t\t.navbar-light .navbar-nav .nav-link {\n\t\tcolor:#333;\n\t\t}\n\t\ta.nav-link.loginreg {\n\t\tbackground-color: #0b4499;\n\t\tcolor: #fff !important;\n\t\tborder-radius: 40px;\n\t\t}\n\t\ta.nav-link.loginreg:hover {\n\t\tbackground: #1668e2;\n\t\t}\n\t\t.nav-link {\n\t\tcolor: #333333;\n\t\tfont-size: 150%\n\t\t}\n\t\t.nav-item a.nav-link.active {\n\t\tcolor: #0b4499;\n\t\t}\n\t\t.contactimg>img{\n\t\twidth: 100%;\n\t\t}\n\t\t\n\t\t.log-box {\n\t\tpadding-top: 26px;\n\t\tpadding-bottom: 26px;\n\t\t}\n\t\t.loginform .form-control, .register-form .form-control {\n\t\tcolor: #000;\n\t\theight: 52px;\n\t\t}\n\t\t.loginform {\n\t\tmargin-top: 35px;\n\t\t}\n\t\t.loginform label {\n\t\tfont-size: 18px;\n\t\tfont-weight: 600;\n\t\t}\n\t\t\n\t\t.loginbtn {\n\t\tbackground: #0b4499;\n\t\twidth: 100%;\n\t\tmargin-top: 44px;\n\t\theight: 52px;\n\t\tfont-size: 22px;\n\t\tborder-radius: 2px;\n\t\tcolor: #fff !important;\n\t\t}\n\t\t\n\t\t.contactimg {\n\t\tposition: relative;\n\t\t}\n\t\t.login-logo {\n\t\tmargin-bottom: 20px;\n\t\t}\n\t\t\n\t\t.textbox {\n\t\tposition: absolute;\n\t\ttop: 50%;\n\t\tcolor: #fff;\n\t\tpadding: 40px;\n\t\ttransform: translate(0%, -50%);\n\t\ttext-align: center;\n\t\t}\n\t\t.sign-btn {\n\t\tbackground: #0b4499;\n\t\twidth: 100%;\n\t\tmargin-top: 14px;\n\t\theight: 52px;\n\t\tfont-size: 22px;\n\t\tborder-radius: 2px;\n\t\tcolor: #fff !important;\n\t\t}\n\t\t\n\t\tbutton.btn.sign-btn:hover {\n\t\tbackground: #1668e2;\n\t\t}\n\t\t</style>\n\t\t<form [formGroup]="form" novalidate (ngSubmit)="_activeModal.close(form)">\n\t\t <div class="modal-header">\n\t\t <h4 class="modal-title"><i class="fa fa-question-circle" style="color: blue; font-size: 0.85em" aria-hidden="true"></i> Register</h4>\n\t\t <button type="button" class="btn-close ms-auto" aria-label="Close" (click)="_activeModal.dismiss()"></button>\n\t\t </div>\n\t\t @if (form) {\n\t\t <div class="modal-body">\n\t\t <div class="row justify-content-md-center">\n\t\t <div class="col-lg-12">\n\t\t <div class="row bg-white">\n\t\t <div class="col-lg-6">\n\t\t <div class="contactimg">\n\t\t <img src="/assets/images/loginsignup/formimg.jpg" alt="images" class="img-fluid">\n\t\t <div class="textbox">\n\t\t <div class="login-logo"><img src="/assets/images/loginsignup/login-logo.png" alt="images"></div>\n\t\t </div>\n\t\t </div>\n\t\t </div>\n\t\t <div class="col-lg-6">\n\t\t <div class="log-box">\n\t\t <div class="register-form">\n\t\t <div class="form-group">\n\t\t <label>User Name</label>\n\t\t @if (form.controls.username.hasError(\'required\')) {\n\t\t <em>- Required</em>\n\t\t }\n\t\t <input type="text" class="form-control" [ngClass]="[\'form-control\', form.controls.username.valid ? \'is-valid\' : \'is-invalid\']" formControlName="username" [autofocus]="true" [focus]="true" aria-describedby="emailHelp" placeholder="User Name">\n\t\t </div>\n\t\t <div class="form-group">\n\t\t <label>Full Name</label>\n\t\t @if (form.controls.name.hasError(\'required\')) {\n\t\t <em>- Required</em>\n\t\t }\n\t\t <input type="text" class="form-control" [ngClass]="[\'form-control\', form.controls.name.valid ? \'is-valid\' : \'is-invalid\']" formControlName="name" aria-describedby="emailHelp" placeholder="Name">\n\t\t </div>\n\t\t <div class="form-group">\n\t\t <label>Phone Number</label>\n\t\t @if (form.controls.phone.hasError(\'required\')) {\n\t\t <em>- Required</em>\n\t\t }\n\t\t <input type="text" class="form-control" [ngClass]="[\'form-control\', form.controls.phone.valid ? \'is-valid\' : \'is-invalid\']" formControlName="phone" placeholder="Phone Number">\n\t\t </div>\n\t\t <div class="form-group">\n\t\t <label>Company</label>\n\t\t @if (form.controls.company.hasError(\'required\')) {\n\t\t <em>- Required</em>\n\t\t }\n\t\t <input type="text" class="form-control" [ngClass]="[\'form-control\', form.controls.company.valid ? \'is-valid\' : \'is-invalid\']" formControlName="company" placeholder="Company Name">\n\t\t </div>\n\t\t <div class="form-group">\n\t\t <label>Email</label>\n\t\t @if (form.controls.email.hasError(\'required\')) {\n\t\t <em>- Required</em>\n\t\t }\n\t\t <input type="email" class="form-control" [ngClass]="[\'form-control\', form.controls.email.valid ? \'is-valid\' : \'is-invalid\']" formControlName="email" placeholder="Email">\n\t\t </div>\n\t\t <button type="submit" class="btn sign-btn">Signup</button>\n\t\t </div>\n\t\t </div>\n\t\t </div>\n\t\t </div>\n\t\t </div>\n\t\t </div>\n\t\t </div>\n\t\t }\n\t\t <div class="modal-footer">\n\t\t <responsive-button-group>\n\t\t <button type="button" class="btn btn-secondary" (click)="_activeModal.dismiss()">Cancel</button>\n\t\t </responsive-button-group>\n\t\t </div>\n\t\t</form>\n\t\t',standalone:!1}]}],ctorParameters:()=>[{type:i1$2.NgbActiveModal},{type:i2.FormBuilder}]});class DialogSelectWithButtonsURLContent{_activeModal;_account;url="";close;allElements;title="Select Window Type";selectedType="";options=[{value:"same_tab",text:"Same Tab"},{value:"new_tab",text:"New Tab"},{value:"new_window",text:"New Window"}];constructor(t,e){this._activeModal=t,this._account=e}ngOnInit(){this._account.getUser().settings.routing_preference&&"alwaysAsk"!==this._account.getUser().settings.routing_preference&&("sameTab"===this._account.getUser().settings.routing_preference&&window.open(this.url,"_self"),"newTab"===this._account.getUser().settings.routing_preference&&window.open(this.url,"_blank"),"newWindow"===this._account.getUser().settings.routing_preference&&window.open(this.url,"_blank","toolbar=1,location=1,menubar=1"),this._activeModal.close())}ngAfterViewInit(){setTimeout(()=>{let t=this.recursiveFindFirstElement(this.allElements.nativeElement);t?t.focus():(this.close.nativeElement.focus(),this.close.nativeElement.blur())},100)}recursiveFindFirstElement(t){let e=null,n=t.children;for(let t=0;t<Object.keys(n).length;t++){let o=n[Object.keys(n)[t]];if(o.children&&o.children.length)e=this.recursiveFindFirstElement(o);else{if("BUTTON"===o.tagName&&o.classList.contains("close"))return null;if(!("BUTTON"!==o.tagName&&"INPUT"!==o.tagName&&"SELECT"!==o.tagName&&"TEXTAREA"!==o.tagName||o.hidden||o.disabled))return o}if(e)break}return e}onSelectType(t){this.selectedType=t,this.submit()}submit(){"same_tab"===this.selectedType&&window.open(this.url,"_self"),"new_tab"===this.selectedType&&window.open(this.url,"_blank"),"new_window"===this.selectedType&&window.open(this.url,"_blank","toolbar=1,location=1,menubar=1"),this._activeModal.close()}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DialogSelectWithButtonsURLContent,deps:[{token:i1$2.NgbActiveModal},{token:AccountManagerService}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"21.0.1",type:DialogSelectWithButtonsURLContent,isStandalone:!1,selector:"resolveio-dialog.select-with-buttons-url",inputs:{url:"url"},viewQueries:[{propertyName:"close",first:!0,predicate:["close"],descendants:!0},{propertyName:"allElements",first:!0,predicate:["allElements"],descendants:!0}],ngImport:i0,template:'\n\t\t<style>\n\t\t collapse-table tr:hover {\n\t\t background-color: lightblue;\n\t\t cursor: pointer;\n\t\t}\n\t\t\n\t\t.selected {\n\t\tbackground-color: lightblue;\n\t\t}\n\t\t\n\t\tcollapse-table {\n\t\twidth: 100%;\n\t\t}\n\t\t</style>\n\t\t<div #allElements>\n\t\t <div class="modal-header">\n\t\t <h4 class="modal-title"><i class="fa fa-question-circle" style="color: blue; font-size: 0.85em" aria-hidden="true"></i> {{ title }}</h4>\n\t\t <button type="button" class="btn-close ms-auto" aria-label="Close" (click)="_activeModal.dismiss()" #close></button>\n\t\t </div>\n\t\t <div class="modal-body">\n\t\t <div class="row">\n\t\t @for (option of options; track option.value) {\n\t\t <div class="col">\n\t\t <button style="width: 100%" type="button" [ngClass]="[\'btn\', selectedType === option.value ? \'btn-success\' : \'btn-warning\']" (click)="onSelectType(option.value)">{{option.text}}</button>\n\t\t </div>\n\t\t }\n\t\t </div>\n\t\t </div>\n\t\t</div>\n\t\t',isInline:!0,styles:["collapse-table tr:hover{background-color:#add8e6;cursor:pointer}.selected{background-color:#add8e6}collapse-table{width:100%}\n"],dependencies:[{kind:"directive",type:i7.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]}]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DialogSelectWithButtonsURLContent,decorators:[{type:Component,args:[{selector:"resolveio-dialog.select-with-buttons-url",template:'\n\t\t<style>\n\t\t collapse-table tr:hover {\n\t\t background-color: lightblue;\n\t\t cursor: pointer;\n\t\t}\n\t\t\n\t\t.selected {\n\t\tbackground-color: lightblue;\n\t\t}\n\t\t\n\t\tcollapse-table {\n\t\twidth: 100%;\n\t\t}\n\t\t</style>\n\t\t<div #allElements>\n\t\t <div class="modal-header">\n\t\t <h4 class="modal-title"><i class="fa fa-question-circle" style="color: blue; font-size: 0.85em" aria-hidden="true"></i> {{ title }}</h4>\n\t\t <button type="button" class="btn-close ms-auto" aria-label="Close" (click)="_activeModal.dismiss()" #close></button>\n\t\t </div>\n\t\t <div class="modal-body">\n\t\t <div class="row">\n\t\t @for (option of options; track option.value) {\n\t\t <div class="col">\n\t\t <button style="width: 100%" type="button" [ngClass]="[\'btn\', selectedType === option.value ? \'btn-success\' : \'btn-warning\']" (click)="onSelectType(option.value)">{{option.text}}</button>\n\t\t </div>\n\t\t }\n\t\t </div>\n\t\t </div>\n\t\t</div>\n\t\t',standalone:!1}]}],ctorParameters:()=>[{type:i1$2.NgbActiveModal},{type:AccountManagerService}],propDecorators:{url:[{type:Input}],close:[{type:ViewChild,args:["close",{static:!1}]}],allElements:[{type:ViewChild,args:["allElements",{static:!1}]}]}});class CollapseTableComponent{_resizeService;_account;collapseSize;tableFixed=!1;headerFixed=!1;secondaryColor=!1;tertiaryColor=!1;windowSize=window.innerWidth;windowSizeSubscription=null;constructor(t,e){this._resizeService=t,this._account=e}ngOnInit(){this.windowSizeSubscription=this._resizeService.onResize$.subscribe(t=>{this.windowSize=t.innerWidth}),this._account.getUser()&&this._account.getUser().settings&&(document.documentElement.style.setProperty("--primary-table-color",this._account.getUser().settings.table_color),document.documentElement.style.setProperty("--primary-table-font-color",this._account.getUser().settings.table_font_color),document.documentElement.style.setProperty("--font-size",this._account.getUser().settings.font_size+"px"),document.documentElement.style.setProperty("--secondary-table-color",this._account.getUser().settings.secondary_table_color),document.documentElement.style.setProperty("--secondary-table-font-color",this._account.getUser().settings.secondary_table_font_color),document.documentElement.style.setProperty("--tertiary-table-color",this._account.getUser().settings.tertiary_table_color),document.documentElement.style.setProperty("--tertiary-table-font-color",this._account.getUser().settings.tertiary_table_font_color))}ngOnDestroy(){this.windowSizeSubscription.unsubscribe()}onClick(t){}getCollapseClass(){let t=["table"];return this.secondaryColor?t.push("collapseTable-sec"):this.tertiaryColor?t.push("collapseTable-tert"):t.push("collapseTable"),t}getPrimaryColor(){return this._account.getUser()?this._account.getUser().settings.table_color:"#3b3ee3"}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:CollapseTableComponent,deps:[{token:ResizeService},{token:AccountManagerService}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"21.0.1",type:CollapseTableComponent,isStandalone:!1,selector:"collapse-table",inputs:{collapseSize:"collapseSize",tableFixed:"tableFixed",headerFixed:"headerFixed",secondaryColor:"secondaryColor",tertiaryColor:"tertiaryColor"},ngImport:i0,template:'<style>\n\t:host ::ng-deep :root {\n\t\t--primary-table-color: #3b3ee3;\n\t\t--primary-table-font-color: white;\n\t\t--font-size: 12px;\n\t\t--secondary-table-color: #87ceeb;\n\t\t--secondary-table-font-color: #000000;\n\t\t--tertiary-table-color: #ff4500;\n\t\t--tertiary-table-font-color: #000000;\n\t}\n\n\t:host {\n\t\tdisplay: block;\n\t\twidth: 100%;\n\t}\n\n\t.table-responsive-xl {\n\t\toverflow-y: visible;\n\t\toverflow-x: auto;\n\t\tposition: relative;\n\t}\n\n\t:host ::ng-deep .collapseTable {\n\t\tborder: 1px solid #ccc;\n\t\tmargin: 0;\n\t\tpadding: 0;\n\t\twidth: 100%;\n\t\toverflow: visible;\n\t\tposition: relative;\n\t\t/*table-layout: fixed;*/\n\t}\n\t:host ::ng-deep .collapseTable tr {\n\t\tborder: 1px solid #ddd;\n\t\tpadding: 0.35em;\n\t}\n\t:host ::ng-deep .collapseTable th,\n\t:host ::ng-deep .collapseTable td {\n\t\tpadding: 0.625em;\n\t\ttext-align: center;\n\t\tvertical-align: middle;\n\t}\n\t:host ::ng-deep .collapseTable th {\n\t\tletter-spacing: 0.1em;\n\t\ttext-transform: uppercase;\n\t\tbackground-color: var(--primary-table-color);\n\t\tcolor: var(--primary-table-font-color);\n\t\tfont-size: var(--font-size);\n\t\tposition: sticky;\n\t\tz-index: 10;\n\t\ttop: 0;\n\t}\n\t:host ::ng-deep .collapseTable-sec {\n\t\tborder: 1px solid #ccc;\n\t\tmargin: 0;\n\t\tpadding: 0;\n\t\twidth: 100%;\n\t\toverflow: visible;\n\t\tposition: relative;\n\t}\n\t:host ::ng-deep .collapseTable-sec tr {\n\t\tborder: 1px solid #ddd;\n\t\tpadding: 0.35em;\n\t}\n\t:host ::ng-deep .collapseTable-sec th,\n\t:host ::ng-deep .collapseTable-sec td {\n\t\tpadding: 0.625em;\n\t\ttext-align: center;\n\t}\n\t:host ::ng-deep .collapseTable-sec th {\n\t\tletter-spacing: 0.1em;\n\t\ttext-transform: uppercase;\n\t\tbackground-color: var(--secondary-table-color);\n\t\tcolor: var(--secondary-table-font-color);\n\t\tfont-size: var(--font-size);\n\t\tposition: sticky;\n\t\tz-index: 10;\n\t\ttop: 0;\n\t}\n\t:host ::ng-deep .collapseTable-tert {\n\t\tborder: 1px solid #ccc;\n\t\tmargin: 0;\n\t\tpadding: 0;\n\t\twidth: 100%;\n\t\toverflow: visible;\n\t\tposition: relative;\n\t}\n\t:host ::ng-deep .collapseTable-tert tr {\n\t\tborder: 1px solid #ddd;\n\t\tpadding: 0.35em;\n\t}\n\t:host ::ng-deep .collapseTable-tert th,\n\t:host ::ng-deep .collapseTable-tert td {\n\t\tpadding: 0.625em;\n\t\ttext-align: center;\n\t}\n\t:host ::ng-deep .collapseTable-tert th {\n\t\tletter-spacing: 0.1em;\n\t\ttext-transform: uppercase;\n\t\tbackground-color: var(--tertiary-table-color);\n\t\tcolor: var(--tertiary-table-font-color);\n\t\tfont-size: var(--font-size);\n\t\tposition: sticky;\n\t\tz-index: 10;\n\t\ttop: 0;\n\t}\n\n\t.fixed {\n\t\ttable-layout: fixed;\n\t}\n\n\t:host ::ng-deep .headerFixed thead,\n\t:host ::ng-deep .headerFixed tbody tr {\n\t\tdisplay: table;\n\t\twidth: 100%;\n\t\ttable-layout: fixed;\n\t}\n\n\t:host ::ng-deep .collapseTable,\n\t:host ::ng-deep .collapseTable-sec,\n\t:host ::ng-deep .collapseTable-tert {\n\t\tbox-shadow: 0 0 15px rgba(0, 0, 0, 0.25);\n\t}\n\n\t:host ::ng-deep .collapseTable > thead:first-of-type > tr:first-child > th:first-child,\n\t:host ::ng-deep .collapseTable-sec > thead:first-of-type > tr:first-child > th:first-child,\n\t:host ::ng-deep .collapseTable-tert > thead:first-of-type > tr:first-child > th:first-child {\n\t\tborder-top-left-radius: 10px;\n\t}\n\n\t:host ::ng-deep .collapseTable > thead:first-of-type > tr:first-child > th:last-child,\n\t:host ::ng-deep .collapseTable-sec > thead:first-of-type > tr:first-child > th:last-child,\n\t:host ::ng-deep .collapseTable-tert > thead:first-of-type > tr:first-child > th:last-child {\n\t\tborder-top-right-radius: 10px;\n\t}\n\n\t:host ::ng-deep .collapseTable > tbody:last-of-type > tr:last-child > td:first-child,\n\t:host ::ng-deep .collapseTable-sec > tbody:last-of-type > tr:last-child > td:first-child,\n\t:host ::ng-deep .collapseTable-tert > tbody:last-of-type > tr:last-child > td:first-child {\n\t\tborder-bottom-left-radius: 10px;\n\t}\n\n\t:host ::ng-deep .collapseTable > tbody:last-of-type > tr:last-child > td:last-child,\n\t:host ::ng-deep .collapseTable-sec > tbody:last-of-type > tr:last-child > td:last-child,\n\t:host ::ng-deep .collapseTable-tert > tbody:last-of-type > tr:last-child > td:last-child {\n\t\tborder-bottom-right-radius: 10px;\n\t}\n\n\t.hide {\n\t\tdisplay: none;\n\t}\n\n\t.table-responsive-xl {\n\t\toverflow: visible !important;\n\t\tposition: relative;\n\t}\n</style>\n\n<div class="table-responsive-xl">\n\t<table [ngClass]="getCollapseClass()" style="border: none" cellspacing="0" cellpadding="0">\n\t\t<ng-content></ng-content>\n\t</table>\n</div>\n',styles:[":host ::ng-deep :root{--primary-table-color: #3b3ee3;--primary-table-font-color: white;--font-size: 12px;--secondary-table-color: #87ceeb;--secondary-table-font-color: #000000;--tertiary-table-color: #ff4500;--tertiary-table-font-color: #000000}:host{display:block;width:100%}.table-responsive-xl{overflow-y:visible;overflow-x:auto;position:relative}:host ::ng-deep .collapseTable{border:1px solid #ccc;margin:0;padding:0;width:100%;overflow:visible;position:relative}:host ::ng-deep .collapseTable tr{border:1px solid #ddd;padding:.35em}:host ::ng-deep .collapseTable th,:host ::ng-deep .collapseTable td{padding:.625em;text-align:center;vertical-align:middle}:host ::ng-deep .collapseTable th{letter-spacing:.1em;text-transform:uppercase;background-color:var(--primary-table-color);color:var(--primary-table-font-color);font-size:var(--font-size);position:sticky;z-index:10;top:0}:host ::ng-deep .collapseTable-sec{border:1px solid #ccc;margin:0;padding:0;width:100%;overflow:visible;position:relative}:host ::ng-deep .collapseTable-sec tr{border:1px solid #ddd;padding:.35em}:host ::ng-deep .collapseTable-sec th,:host ::ng-deep .collapseTable-sec td{padding:.625em;text-align:center}:host ::ng-deep .collapseTable-sec th{letter-spacing:.1em;text-transform:uppercase;background-color:var(--secondary-table-color);color:var(--secondary-table-font-color);font-size:var(--font-size);position:sticky;z-index:10;top:0}:host ::ng-deep .collapseTable-tert{border:1px solid #ccc;margin:0;padding:0;width:100%;overflow:visible;position:relative}:host ::ng-deep .collapseTable-tert tr{border:1px solid #ddd;padding:.35em}:host ::ng-deep .collapseTable-tert th,:host ::ng-deep .collapseTable-tert td{padding:.625em;text-align:center}:host ::ng-deep .collapseTable-tert th{letter-spacing:.1em;text-transform:uppercase;background-color:var(--tertiary-table-color);color:var(--tertiary-table-font-color);font-size:var(--font-size);position:sticky;z-index:10;top:0}.fixed{table-layout:fixed}:host ::ng-deep .headerFixed thead,:host ::ng-deep .headerFixed tbody tr{display:table;width:100%;table-layout:fixed}:host ::ng-deep .collapseTable,:host ::ng-deep .collapseTable-sec,:host ::ng-deep .collapseTable-tert{box-shadow:0 0 15px #00000040}:host ::ng-deep .collapseTable>thead:first-of-type>tr:first-child>th:first-child,:host ::ng-deep .collapseTable-sec>thead:first-of-type>tr:first-child>th:first-child,:host ::ng-deep .collapseTable-tert>thead:first-of-type>tr:first-child>th:first-child{border-top-left-radius:10px}:host ::ng-deep .collapseTable>thead:first-of-type>tr:first-child>th:last-child,:host ::ng-deep .collapseTable-sec>thead:first-of-type>tr:first-child>th:last-child,:host ::ng-deep .collapseTable-tert>thead:first-of-type>tr:first-child>th:last-child{border-top-right-radius:10px}:host ::ng-deep .collapseTable>tbody:last-of-type>tr:last-child>td:first-child,:host ::ng-deep .collapseTable-sec>tbody:last-of-type>tr:last-child>td:first-child,:host ::ng-deep .collapseTable-tert>tbody:last-of-type>tr:last-child>td:first-child{border-bottom-left-radius:10px}:host ::ng-deep .collapseTable>tbody:last-of-type>tr:last-child>td:last-child,:host ::ng-deep .collapseTable-sec>tbody:last-of-type>tr:last-child>td:last-child,:host ::ng-deep .collapseTable-tert>tbody:last-of-type>tr:last-child>td:last-child{border-bottom-right-radius:10px}.hide{display:none}.table-responsive-xl{overflow:visible!important;position:relative}\n"],dependencies:[{kind:"directive",type:i7.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]}]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:CollapseTableComponent,decorators:[{type:Component,args:[{selector:"collapse-table",standalone:!1,template:'<style>\n\t:host ::ng-deep :root {\n\t\t--primary-table-color: #3b3ee3;\n\t\t--primary-table-font-color: white;\n\t\t--font-size: 12px;\n\t\t--secondary-table-color: #87ceeb;\n\t\t--secondary-table-font-color: #000000;\n\t\t--tertiary-table-color: #ff4500;\n\t\t--tertiary-table-font-color: #000000;\n\t}\n\n\t:host {\n\t\tdisplay: block;\n\t\twidth: 100%;\n\t}\n\n\t.table-responsive-xl {\n\t\toverflow-y: visible;\n\t\toverflow-x: auto;\n\t\tposition: relative;\n\t}\n\n\t:host ::ng-deep .collapseTable {\n\t\tborder: 1px solid #ccc;\n\t\tmargin: 0;\n\t\tpadding: 0;\n\t\twidth: 100%;\n\t\toverflow: visible;\n\t\tposition: relative;\n\t\t/*table-layout: fixed;*/\n\t}\n\t:host ::ng-deep .collapseTable tr {\n\t\tborder: 1px solid #ddd;\n\t\tpadding: 0.35em;\n\t}\n\t:host ::ng-deep .collapseTable th,\n\t:host ::ng-deep .collapseTable td {\n\t\tpadding: 0.625em;\n\t\ttext-align: center;\n\t\tvertical-align: middle;\n\t}\n\t:host ::ng-deep .collapseTable th {\n\t\tletter-spacing: 0.1em;\n\t\ttext-transform: uppercase;\n\t\tbackground-color: var(--primary-table-color);\n\t\tcolor: var(--primary-table-font-color);\n\t\tfont-size: var(--font-size);\n\t\tposition: sticky;\n\t\tz-index: 10;\n\t\ttop: 0;\n\t}\n\t:host ::ng-deep .collapseTable-sec {\n\t\tborder: 1px solid #ccc;\n\t\tmargin: 0;\n\t\tpadding: 0;\n\t\twidth: 100%;\n\t\toverflow: visible;\n\t\tposition: relative;\n\t}\n\t:host ::ng-deep .collapseTable-sec tr {\n\t\tborder: 1px solid #ddd;\n\t\tpadding: 0.35em;\n\t}\n\t:host ::ng-deep .collapseTable-sec th,\n\t:host ::ng-deep .collapseTable-sec td {\n\t\tpadding: 0.625em;\n\t\ttext-align: center;\n\t}\n\t:host ::ng-deep .collapseTable-sec th {\n\t\tletter-spacing: 0.1em;\n\t\ttext-transform: uppercase;\n\t\tbackground-color: var(--secondary-table-color);\n\t\tcolor: var(--secondary-table-font-color);\n\t\tfont-size: var(--font-size);\n\t\tposition: sticky;\n\t\tz-index: 10;\n\t\ttop: 0;\n\t}\n\t:host ::ng-deep .collapseTable-tert {\n\t\tborder: 1px solid #ccc;\n\t\tmargin: 0;\n\t\tpadding: 0;\n\t\twidth: 100%;\n\t\toverflow: visible;\n\t\tposition: relative;\n\t}\n\t:host ::ng-deep .collapseTable-tert tr {\n\t\tborder: 1px solid #ddd;\n\t\tpadding: 0.35em;\n\t}\n\t:host ::ng-deep .collapseTable-tert th,\n\t:host ::ng-deep .collapseTable-tert td {\n\t\tpadding: 0.625em;\n\t\ttext-align: center;\n\t}\n\t:host ::ng-deep .collapseTable-tert th {\n\t\tletter-spacing: 0.1em;\n\t\ttext-transform: uppercase;\n\t\tbackground-color: var(--tertiary-table-color);\n\t\tcolor: var(--tertiary-table-font-color);\n\t\tfont-size: var(--font-size);\n\t\tposition: sticky;\n\t\tz-index: 10;\n\t\ttop: 0;\n\t}\n\n\t.fixed {\n\t\ttable-layout: fixed;\n\t}\n\n\t:host ::ng-deep .headerFixed thead,\n\t:host ::ng-deep .headerFixed tbody tr {\n\t\tdisplay: table;\n\t\twidth: 100%;\n\t\ttable-layout: fixed;\n\t}\n\n\t:host ::ng-deep .collapseTable,\n\t:host ::ng-deep .collapseTable-sec,\n\t:host ::ng-deep .collapseTable-tert {\n\t\tbox-shadow: 0 0 15px rgba(0, 0, 0, 0.25);\n\t}\n\n\t:host ::ng-deep .collapseTable > thead:first-of-type > tr:first-child > th:first-child,\n\t:host ::ng-deep .collapseTable-sec > thead:first-of-type > tr:first-child > th:first-child,\n\t:host ::ng-deep .collapseTable-tert > thead:first-of-type > tr:first-child > th:first-child {\n\t\tborder-top-left-radius: 10px;\n\t}\n\n\t:host ::ng-deep .collapseTable > thead:first-of-type > tr:first-child > th:last-child,\n\t:host ::ng-deep .collapseTable-sec > thead:first-of-type > tr:first-child > th:last-child,\n\t:host ::ng-deep .collapseTable-tert > thead:first-of-type > tr:first-child > th:last-child {\n\t\tborder-top-right-radius: 10px;\n\t}\n\n\t:host ::ng-deep .collapseTable > tbody:last-of-type > tr:last-child > td:first-child,\n\t:host ::ng-deep .collapseTable-sec > tbody:last-of-type > tr:last-child > td:first-child,\n\t:host ::ng-deep .collapseTable-tert > tbody:last-of-type > tr:last-child > td:first-child {\n\t\tborder-bottom-left-radius: 10px;\n\t}\n\n\t:host ::ng-deep .collapseTable > tbody:last-of-type > tr:last-child > td:last-child,\n\t:host ::ng-deep .collapseTable-sec > tbody:last-of-type > tr:last-child > td:last-child,\n\t:host ::ng-deep .collapseTable-tert > tbody:last-of-type > tr:last-child > td:last-child {\n\t\tborder-bottom-right-radius: 10px;\n\t}\n\n\t.hide {\n\t\tdisplay: none;\n\t}\n\n\t.table-responsive-xl {\n\t\toverflow: visible !important;\n\t\tposition: relative;\n\t}\n</style>\n\n<div class="table-responsive-xl">\n\t<table [ngClass]="getCollapseClass()" style="border: none" cellspacing="0" cellpadding="0">\n\t\t<ng-content></ng-content>\n\t</table>\n</div>\n'}]}],ctorParameters:()=>[{type:ResizeService},{type:AccountManagerService}],propDecorators:{collapseSize:[{type:Input}],tableFixed:[{type:Input}],headerFixed:[{type:Input}],secondaryColor:[{type:Input}],tertiaryColor:[{type:Input}]}});class DialogSelectArrayObjsContent{_activeModal;title="";objects=[];multiple=!1;allowNone=!1;close;allElements;selectedIndex=null;selectedItem=null;selectedIndexes=[];selectedItems=[];constructor(t){this._activeModal=t}ngAfterViewInit(){setTimeout(()=>{let t=this.recursiveFindFirstElement(this.allElements.nativeElement);t?t.focus():(this.close.nativeElement.focus(),this.close.nativeElement.blur())},100),this.objects.forEach((t,e)=>{t.selected&&(this.selectedIndexes.push(e),this.selectedItems.push(t))})}recursiveFindFirstElement(t){let e=null,n=t.children;for(let t=0;t<Object.keys(n).length;t++){let o=n[Object.keys(n)[t]];if(o.children&&o.children.length)e=this.recursiveFindFirstElement(o);else{if("BUTTON"===o.tagName&&o.classList.contains("close"))return null;if(!("BUTTON"!==o.tagName&&"INPUT"!==o.tagName&&"SELECT"!==o.tagName&&"TEXTAREA"!==o.tagName||o.hidden||o.disabled))return o}if(e)break}return e}onSelectItem(t){this.multiple?this.selectedItems.some(e=>e.value===this.objects[t].value)?(this.selectedIndexes.splice(this.selectedIndexes.indexOf(t),1),this.selectedItems.splice(this.selectedItems.map(t=>t.value).indexOf(this.objects[t].value),1)):(this.selectedIndexes.push(t),this.selectedItems.push(this.objects[t])):this.objects[t]===this.selectedItem?(this.selectedItem=null,this.selectedIndex=null):(this.selectedItem=this.objects[t],this.selectedIndex=t)}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DialogSelectArrayObjsContent,deps:[{token:i1$2.NgbActiveModal}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"21.0.1",type:DialogSelectArrayObjsContent,isStandalone:!1,selector:"resolveio-dialog.select-array-objs",inputs:{title:"title",objects:"objects",multiple:"multiple",allowNone:"allowNone"},viewQueries:[{propertyName:"close",first:!0,predicate:["close"],descendants:!0},{propertyName:"allElements",first:!0,predicate:["allElements"],descendants:!0}],ngImport:i0,template:'\n\t\t<style>\n\t\t collapse-table tr:hover {\n\t\t background-color: lightblue;\n\t\t cursor: pointer;\n\t\t}\n\t\t\n\t\t.selected {\n\t\tbackground-color: lightblue;\n\t\t}\n\t\t\n\t\tcollapse-table {\n\t\twidth: 100%;\n\t\t}\n\t\t</style>\n\t\t<div #allElements>\n\t\t <div class="modal-header">\n\t\t <h4 class="modal-title"><i class="fa fa-question-circle" style="color: blue; font-size: 0.85em" aria-hidden="true"></i> {{ title }}</h4>\n\t\t <button type="button" class="btn-close ms-auto" aria-label="Close" (click)="_activeModal.dismiss()" #close></button>\n\t\t </div>\n\t\t <div class="modal-body">\n\t\t <div style="height: 60vh; overflow-y: auto">\n\t\t <collapse-table collapseSize="900">\n\t\t <thead>\n\t\t <tr>\n\t\t <th>List</th>\n\t\t </tr>\n\t\t </thead>\n\t\t <tbody>\n\t\t @for (object of objects; track object.text; let i = $index) {\n\t\t <tr (click)="onSelectItem(i)" [ngClass]="{\'selected\' : i === selectedIndex || selectedIndexes.includes(i)}">\n\t\t <td>{{object.text}}</td>\n\t\t </tr>\n\t\t }\n\t\t </tbody>\n\t\t </collapse-table>\n\t\t </div>\n\t\t</div>\n\t\t<div class="modal-footer">\n\t\t @if (!allowNone) {\n\t\t <button type="button" [ngClass]="[\'btn\', (selectedItem || selectedItems.length) ? \'btn-success\' : \'btn-danger\']" [disabled]="!selectedItem && !selectedItems.length" (click)="_activeModal.close(selectedItem || selectedItems)">Submit</button>\n\t\t }\n\t\t @if (allowNone) {\n\t\t <button type="button" class="btn btn-success" (click)="_activeModal.close(selectedItem || selectedItems)">Submit</button>\n\t\t }\n\t\t <button type="button" class="btn btn-secondary" (click)="_activeModal.dismiss()">Cancel</button>\n\t\t</div>\n\t\t</div>\n\t\t',isInline:!0,styles:["collapse-table tr:hover{background-color:#add8e6;cursor:pointer}.selected{background-color:#add8e6}collapse-table{width:100%}\n"],dependencies:[{kind:"component",type:CollapseTableComponent,selector:"collapse-table",inputs:["collapseSize","tableFixed","headerFixed","secondaryColor","tertiaryColor"]},{kind:"directive",type:i7.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]}]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DialogSelectArrayObjsContent,decorators:[{type:Component,args:[{selector:"resolveio-dialog.select-array-objs",template:'\n\t\t<style>\n\t\t collapse-table tr:hover {\n\t\t background-color: lightblue;\n\t\t cursor: pointer;\n\t\t}\n\t\t\n\t\t.selected {\n\t\tbackground-color: lightblue;\n\t\t}\n\t\t\n\t\tcollapse-table {\n\t\twidth: 100%;\n\t\t}\n\t\t</style>\n\t\t<div #allElements>\n\t\t <div class="modal-header">\n\t\t <h4 class="modal-title"><i class="fa fa-question-circle" style="color: blue; font-size: 0.85em" aria-hidden="true"></i> {{ title }}</h4>\n\t\t <button type="button" class="btn-close ms-auto" aria-label="Close" (click)="_activeModal.dismiss()" #close></button>\n\t\t </div>\n\t\t <div class="modal-body">\n\t\t <div style="height: 60vh; overflow-y: auto">\n\t\t <collapse-table collapseSize="900">\n\t\t <thead>\n\t\t <tr>\n\t\t <th>List</th>\n\t\t </tr>\n\t\t </thead>\n\t\t <tbody>\n\t\t @for (object of objects; track object.text; let i = $index) {\n\t\t <tr (click)="onSelectItem(i)" [ngClass]="{\'selected\' : i === selectedIndex || selectedIndexes.includes(i)}">\n\t\t <td>{{object.text}}</td>\n\t\t </tr>\n\t\t }\n\t\t </tbody>\n\t\t </collapse-table>\n\t\t </div>\n\t\t</div>\n\t\t<div class="modal-footer">\n\t\t @if (!allowNone) {\n\t\t <button type="button" [ngClass]="[\'btn\', (selectedItem || selectedItems.length) ? \'btn-success\' : \'btn-danger\']" [disabled]="!selectedItem && !selectedItems.length" (click)="_activeModal.close(selectedItem || selectedItems)">Submit</button>\n\t\t }\n\t\t @if (allowNone) {\n\t\t <button type="button" class="btn btn-success" (click)="_activeModal.close(selectedItem || selectedItems)">Submit</button>\n\t\t }\n\t\t <button type="button" class="btn btn-secondary" (click)="_activeModal.dismiss()">Cancel</button>\n\t\t</div>\n\t\t</div>\n\t\t',standalone:!1}]}],ctorParameters:()=>[{type:i1$2.NgbActiveModal}],propDecorators:{title:[{type:Input}],objects:[{type:Input}],multiple:[{type:Input}],allowNone:[{type:Input}],close:[{type:ViewChild,args:["close",{static:!1}]}],allElements:[{type:ViewChild,args:["allElements",{static:!1}]}]}});class DialogSelectArrayContent{_activeModal;_cdRef;title="";array=[];multiple;selectedIndexes=[];close;allElements;method="list";mappedArray=[];selectIndexes=[];constructor(t,e){this._activeModal=t,this._cdRef=e}ngOnInit(){this.mappedArray=this.array.map((t,e)=>({value:e,text:t})),this.selectedIndexes.forEach(t=>{this.selectIndexes.push(t)})}ngAfterViewInit(){setTimeout(()=>{let t=this.recursiveFindFirstElement(this.allElements.nativeElement);t?t.focus():(this.close.nativeElement.focus(),this.close.nativeElement.blur())},100)}recursiveFindFirstElement(t){let e=null,n=t.children;for(let t=0;t<Object.keys(n).length;t++){let o=n[Object.keys(n)[t]];if(o.children&&o.children.length)e=this.recursiveFindFirstElement(o);else{if("BUTTON"===o.tagName&&o.classList.contains("close"))return null;if(!("BUTTON"!==o.tagName&&"INPUT"!==o.tagName&&"SELECT"!==o.tagName&&"TEXTAREA"!==o.tagName||o.hidden||o.disabled))return o}if(e)break}return e}addDropDown(){let t=this.array.filter((t,e)=>!this.selectedIndexes.includes(e))[0],e=this.array.findIndex(e=>e===t);this.selectedIndexes.push(e),this.selectIndexes.push(e)}onSelectDropdown(t,e){this.onSelectItem(this.selectedIndexes[e]),this.onSelectItem(t)}availableAdd(){return!!this.array.filter((t,e)=>!this.selectedIndexes.includes(e))[0]}getFilteredArray(t){return this.mappedArray.filter(e=>e.value===t||!this.selectedIndexes.includes(e.value))}isInSelectedIndex(t){return!!this.selectedIndexes.includes(t)}onSelectItem(t){this.multiple?this.selectedIndexes.includes(t)?(this.selectedIndexes.splice(this.selectedIndexes.indexOf(t),1),this.selectIndexes.splice(this.selectIndexes.indexOf(t),1)):(this.selectedIndexes.push(t),this.selectIndexes.push(t)):this.selectedIndexes.includes(t)?(this.selectedIndexes=[],this.selectIndexes=[]):(this.selectedIndexes=[t],this.selectIndexes=[t])}getArray(){let t=[];return this.selectedIndexes.forEach(e=>{t.push(this.array[e])}),t}selectAll(){this.selectedIndexes=[],this.selectIndexes=[],this.array.forEach((t,e)=>{this.selectedIndexes.push(e),this.selectIndexes.push(e)})}removeAll(){this.selectedIndexes=[],this.selectIndexes=[]}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DialogSelectArrayContent,deps:[{token:i1$2.NgbActiveModal},{token:i0.ChangeDetectorRef}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"21.0.1",type:DialogSelectArrayContent,isStandalone:!1,selector:"resolveio-dialog.select-array",inputs:{title:"title",array:"array",multiple:"multiple",selectedIndexes:"selectedIndexes"},viewQueries:[{propertyName:"close",first:!0,predicate:["close"],descendants:!0},{propertyName:"allElements",first:!0,predicate:["allElements"],descendants:!0}],ngImport:i0,template:'\n\t\t<style>\n\t\t collapse-table tr:hover {\n\t\t background-color: lightblue;\n\t\t cursor: pointer;\n\t\t}\n\t\t\n\t\t.selected {\n\t\tbackground-color: lightblue;\n\t\t}\n\t\t\n\t\tcollapse-table {\n\t\twidth: 100%;\n\t\t}\n\t\t</style>\n\t\t<div #allElements>\n\t\t <div class="modal-header">\n\t\t <h4 class="modal-title"><i class="fa fa-question-circle" style="color: blue; font-size: 0.85em" aria-hidden="true"></i> {{ title }}</h4>\n\t\t <button type="button" class="btn-close ms-auto" aria-label="Close" (click)="_activeModal.dismiss()" #close></button>\n\t\t </div>\n\t\t <div class="modal-body" style="height: 60vh;">\n\t\t <responsive-button-group>\n\t\t @if (multiple) {\n\t\t <button type="button" class="btn btn-primary" (click)="selectAll()">Select All</button>\n\t\t <button type="button" class="btn btn-danger" (click)="removeAll()">Remove All</button>\n\t\t }\n\t\t <button type="button" [ngClass]="[\'btn\', method === \'list\' ? \'btn-success\' : \'btn-warning\']" (click)="method = \'list\'">Use List</button>\n\t\t <button type="button" [ngClass]="[\'btn\', method === \'dropdown\' ? \'btn-success\' : \'btn-warning\']" (click)="method = \'dropdown\'">Use Dropdown</button>\n\t\t </responsive-button-group>\n\t\t <div style="height: 50vh; overflow-y: auto; margin-top: 10px">\n\t\t @if (method === \'list\') {\n\t\t <collapse-table collapseSize="900">\n\t\t <thead>\n\t\t <tr>\n\t\t <th>List</th>\n\t\t </tr>\n\t\t </thead>\n\t\t <tbody>\n\t\t @for (data of array; track data; let i = $index) {\n\t\t <tr (click)="onSelectItem(i)" [ngClass]="{\'selected\' : isInSelectedIndex(i)}">\n\t\t <td>{{data}}</td>\n\t\t </tr>\n\t\t }\n\t\t </tbody>\n\t\t </collapse-table>\n\t\t }\n\t\t @if (method === \'dropdown\') {\n\t\t <collapse-table collapseSize="900">\n\t\t <thead>\n\t\t <tr>\n\t\t <th>Item</th>\n\t\t <th>Remove</th>\n\t\t </tr>\n\t\t </thead>\n\t\t <tbody>\n\t\t @for (item of selectIndexes; track item; let i = $index) {\n\t\t <tr>\n\t\t <td>\n\t\t <ng-select placeholder="Select Item" [ngModel]="item" (change)="onSelectDropdown($event, i)">\n\t\t @for (data of getFilteredArray(item); track data.value) {\n\t\t <ng-option [value]="data.value">{{data.text}}</ng-option>\n\t\t }\n\t\t </ng-select>\n\t\t </td>\n\t\t <td>\n\t\t <button type="button" class="btn btn-danger" (click)="onSelectItem(item)">Remove</button>\n\t\t </td>\n\t\t </tr>\n\t\t }\n\t\t </tbody>\n\t\t </collapse-table>\n\t\t @if (multiple || !selectIndexes.length) {\n\t\t <button type="button" class="btn btn-success" (click)="addDropDown()" [disabled]="!availableAdd()">Add</button>\n\t\t }\n\t\t }\n\t\t</div>\n\t\t</div>\n\t\t<div class="modal-footer">\n\t\t <button type="button" [ngClass]="[\'btn\', selectedIndexes.length ? \'btn-success\' : \'btn-danger\']" [disabled]="!selectedIndexes.length || this.selectedIndexes.includes(null)" (click)="_activeModal.close(this.multiple ? getArray() : array[selectedIndexes[0]])">Submit</button>\n\t\t <button type="button" class="btn btn-secondary" (click)="_activeModal.dismiss()">Cancel</button>\n\t\t</div>\n\t\t</div>\n\t\t',isInline:!0,styles:["collapse-table tr:hover{background-color:#add8e6;cursor:pointer}.selected{background-color:#add8e6}collapse-table{width:100%}\n"],dependencies:[{kind:"directive",type:i2.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:i2.NgModel,selector:"[ngModel]:not([formControlName]):not([formControl])",inputs:["name","disabled","ngModel","ngModelOptions"],outputs:["ngModelChange"],exportAs:["ngModel"]},{kind:"component",type:CollapseTableComponent,selector:"collapse-table",inputs:["collapseSize","tableFixed","headerFixed","secondaryColor","tertiaryColor"]},{kind:"component",type:ResponsiveButtonGroupComponent,selector:"responsive-button-group",inputs:["collapseSize"]},{kind:"component",type:i5.NgSelectComponent,selector:"ng-select",inputs:["placeholder","multiple","panelMaxHeight","panelMaxViewportRatio","optionHeight","virtualBuffer","overlayZIndex","autoSizePanel","panelPosition","autoCenterPanel","viewportMargin","panelWidth","panelFullscreenWidth","clearable","templateLabelFromView","searchable","searchMatchMode","textWrap","compareWith","options","optionLabelKey","optionLabelFn","optionValueKey","optionDisabledKey","optionIdKey","optionGroupKey","disabled","emitOptionObject","debugLog","stickyKey","stickyAutoSave"],outputs:["change"]},{kind:"component",type:i5.NgOptionComponent,selector:"ng-option",inputs:["value","disabled","label","id"]},{kind:"directive",type:i7.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]}],changeDetection:i0.ChangeDetectionStrategy.OnPush})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DialogSelectArrayContent,decorators:[{type:Component,args:[{selector:"resolveio-dialog.select-array",template:'\n\t\t<style>\n\t\t collapse-table tr:hover {\n\t\t background-color: lightblue;\n\t\t cursor: pointer;\n\t\t}\n\t\t\n\t\t.selected {\n\t\tbackground-color: lightblue;\n\t\t}\n\t\t\n\t\tcollapse-table {\n\t\twidth: 100%;\n\t\t}\n\t\t</style>\n\t\t<div #allElements>\n\t\t <div class="modal-header">\n\t\t <h4 class="modal-title"><i class="fa fa-question-circle" style="color: blue; font-size: 0.85em" aria-hidden="true"></i> {{ title }}</h4>\n\t\t <button type="button" class="btn-close ms-auto" aria-label="Close" (click)="_activeModal.dismiss()" #close></button>\n\t\t </div>\n\t\t <div class="modal-body" style="height: 60vh;">\n\t\t <responsive-button-group>\n\t\t @if (multiple) {\n\t\t <button type="button" class="btn btn-primary" (click)="selectAll()">Select All</button>\n\t\t <button type="button" class="btn btn-danger" (click)="removeAll()">Remove All</button>\n\t\t }\n\t\t <button type="button" [ngClass]="[\'btn\', method === \'list\' ? \'btn-success\' : \'btn-warning\']" (click)="method = \'list\'">Use List</button>\n\t\t <button type="button" [ngClass]="[\'btn\', method === \'dropdown\' ? \'btn-success\' : \'btn-warning\']" (click)="method = \'dropdown\'">Use Dropdown</button>\n\t\t </responsive-button-group>\n\t\t <div style="height: 50vh; overflow-y: auto; margin-top: 10px">\n\t\t @if (method === \'list\') {\n\t\t <collapse-table collapseSize="900">\n\t\t <thead>\n\t\t <tr>\n\t\t <th>List</th>\n\t\t </tr>\n\t\t </thead>\n\t\t <tbody>\n\t\t @for (data of array; track data; let i = $index) {\n\t\t <tr (click)="onSelectItem(i)" [ngClass]="{\'selected\' : isInSelectedIndex(i)}">\n\t\t <td>{{data}}</td>\n\t\t </tr>\n\t\t }\n\t\t </tbody>\n\t\t </collapse-table>\n\t\t }\n\t\t @if (method === \'dropdown\') {\n\t\t <collapse-table collapseSize="900">\n\t\t <thead>\n\t\t <tr>\n\t\t <th>Item</th>\n\t\t <th>Remove</th>\n\t\t </tr>\n\t\t </thead>\n\t\t <tbody>\n\t\t @for (item of selectIndexes; track item; let i = $index) {\n\t\t <tr>\n\t\t <td>\n\t\t <ng-select placeholder="Select Item" [ngModel]="item" (change)="onSelectDropdown($event, i)">\n\t\t @for (data of getFilteredArray(item); track data.value) {\n\t\t <ng-option [value]="data.value">{{data.text}}</ng-option>\n\t\t }\n\t\t </ng-select>\n\t\t </td>\n\t\t <td>\n\t\t <button type="button" class="btn btn-danger" (click)="onSelectItem(item)">Remove</button>\n\t\t </td>\n\t\t </tr>\n\t\t }\n\t\t </tbody>\n\t\t </collapse-table>\n\t\t @if (multiple || !selectIndexes.length) {\n\t\t <button type="button" class="btn btn-success" (click)="addDropDown()" [disabled]="!availableAdd()">Add</button>\n\t\t }\n\t\t }\n\t\t</div>\n\t\t</div>\n\t\t<div class="modal-footer">\n\t\t <button type="button" [ngClass]="[\'btn\', selectedIndexes.length ? \'btn-success\' : \'btn-danger\']" [disabled]="!selectedIndexes.length || this.selectedIndexes.includes(null)" (click)="_activeModal.close(this.multiple ? getArray() : array[selectedIndexes[0]])">Submit</button>\n\t\t <button type="button" class="btn btn-secondary" (click)="_activeModal.dismiss()">Cancel</button>\n\t\t</div>\n\t\t</div>\n\t\t',changeDetection:ChangeDetectionStrategy.OnPush,standalone:!1}]}],ctorParameters:()=>[{type:i1$2.NgbActiveModal},{type:i0.ChangeDetectorRef}],propDecorators:{title:[{type:Input}],array:[{type:Input}],multiple:[{type:Input}],selectedIndexes:[{type:Input}],close:[{type:ViewChild,args:["close",{static:!1}]}],allElements:[{type:ViewChild,args:["allElements",{static:!1}]}]}});class DialogService{modalService;constructor(t){this.modalService=t}openDialog(t,e={size:"lg",backdrop:"static"}){return this.modalService.open(t,e)}notify(t){const e=this.openDialog(DialogNotifyContent);e.componentInstance.title="Notify",e.componentInstance.body=t}input(t,e){const n=this.openDialog(DialogInputContent);return n.componentInstance.title=t,n.componentInstance.inputFields=e,n.result}error(t){const e=this.openDialog(DialogErrorContent);e.componentInstance.title="Error",e.componentInstance.body=t}confirm(t,e){const n=this.openDialog(DialogConfirmContent);return n.componentInstance.title="Confirm",n.componentInstance.body=t,n.componentInstance.html=e,n.result}selectDateTime(t,e=!0){const n=this.openDialog(DialogSelectDateTimeContent);return n.componentInstance.title="Select Date"+(e?" and Time":""),n.componentInstance.date=t,n.componentInstance.showTime=e,n.result}selectDataLabel(t,e=!0){const n=this.openDialog(DialogSelectDataLabelsContent,{size:"sm",backdrop:"static"});return n.componentInstance.title="Select Data Labels",n.componentInstance.data=t,n.componentInstance.showArraySubData=e,n.result}login(t,e=!0){const n=this.openDialog(DialogLoginContent);return n.componentInstance.msAllowed=t,n.componentInstance.showLoginText=e,n.result}register(){return this.openDialog(DialogRegisterContent).result}selectWithButtonsURL(t){const e=this.openDialog(DialogSelectWithButtonsURLContent);return e.componentInstance.url=t,e.result}selectWithArrayObjs(t,e,n=!1,o=!1){const r=this.openDialog(DialogSelectArrayObjsContent);return r.componentInstance.title=t,r.componentInstance.objects=e,r.componentInstance.multiple=n,r.componentInstance.allowNone=o,r.result}selectArray(t,e,n=!1,o=[]){const r=this.openDialog(DialogSelectArrayContent);return r.componentInstance.title=t,r.componentInstance.array=e,r.componentInstance.multiple=n,r.componentInstance.selectedIndexes=o,r.result}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DialogService,deps:[{token:i1$2.NgbModal}],target:i0.ɵɵFactoryTarget.Injectable});static"ɵprov"=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DialogService})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DialogService,decorators:[{type:Injectable}],ctorParameters:()=>[{type:i1$2.NgbModal}]});class AuthService{_ds;_vs;_alert;_account;_socket;environment=null;userHasPhoneNumber=!1;userData;userAgentApplication;constructor(t,e,n,o,r){this._ds=t,this._vs=e,this._alert=n,this._account=o,this._socket=r}setupMSSingleSignOn(t){this.environment=t,"/auth365"===window.location.pathname&&window.location.hash&&window.location.hash.startsWith("#id_token=")&&(this.environment.MS_id_token=window.location.hash.replace("#","")),this.userAgentApplication=new UserAgentApplication({auth:{clientId:this.environment.MS_clientId,authority:this.environment.MS_authority,redirectUri:this.environment.MS_redirectUri,validateAuthority:!1,navigateToLoginRequestUrl:!1},framework:{isAngular:!0}})}setEnvironment(t){this.environment=t}setUserHasPhoneNumber(t){this.userHasPhoneNumber=t}registerUser(t,e=!0){return new Promise((n,o)=>{let r=[{label:"User Name",form:"username",data:"",validators:[Validators.required],validatorErrors:["required"],validatorMsg:["Username is required"],required:!0},{label:"Full Name",form:"fullname",data:"",validators:[Validators.required],validatorErrors:["required"],validatorMsg:["Full name is required"],required:!0},{label:"Email",form:"email",data:"",validators:[Validators.required,this._vs.email],validatorErrors:["required","email"],validatorMsg:["Email is required","Email is invalid"],required:!0}];this.userHasPhoneNumber&&r.push({label:"Phone",form:"phonenumber",data:"",validators:[this._vs.phoneNumber],validatorErrors:["phoneNumber"],validatorMsg:["Phone number is invalid"],type:"text"}),this._ds.input("Register New User",r).then(r=>{let i={username:r.username.value.trim().toLowerCase(),email:r.email.value.trim().toLowerCase(),fullname:r.fullname.value.trim(),roles:{super_admin:!1,approvals:[],groups:[],notifications:[],miscs:[]},active:!0,readonly:!1,phonenumber:r.phonenumber?r.phonenumber.value:"",other:t,attempts:0,salt:"",hash:""};this._socket.call("createUserAndEmailEnrollment",i,e,(t,e)=>{t?o(t):n(e)})},t=>o())})}editUser(t){let e=[{label:"User Name",form:"username",data:t.username,validators:[Validators.required],validatorErrors:["required"],validatorMsg:["Username is required"],required:!0},{label:"Full Name",form:"fullname",data:t.fullname,validators:[Validators.required],validatorErrors:["required"],validatorMsg:["Full name is required"],required:!0},{label:"Email",form:"email",data:t.email,validators:[Validators.required,this._vs.email],validatorErrors:["required","email"],validatorMsg:["Email is required","Email is invalid"],required:!0}];return this.userHasPhoneNumber&&e.push({label:"Phone",form:"phonenumber",data:t.phonenumber||"",validators:[this._vs.phoneNumber],validatorErrors:["phoneNumber"],validatorMsg:["Phone number is invalid"],type:"text"}),new Promise((n,o)=>{this._ds.input("Edit User",e).then(e=>{e.phonenumber&&e.phonenumber.value?t.phonenumber=e.phonenumber.value:t.phonenumber="",t.email=e.email.value.trim(),this._socket.call("editUser",t._id,e.username.value.trim().toLowerCase(),e.fullname.value.trim(),e.email.value.trim().toLowerCase(),t.phonenumber,(r,i)=>{if(r)this._socket.call("insertErrorLog","AuthService - edituser",[t,r]),o(r);else{let t={username:e.username.value.trim(),fullname:e.fullname.value.trim(),email:e.email.value.trim()};this._alert.setAlert("success","User has been edited"),n(t)}})},t=>{n(!0)})})}loginUser(){return new Promise((t,e)=>{this.loginModal().then(n=>{"MS"===n.type?this.microsoftSignOn():n.form.value.forgotPassword?this._account.resetUserPassword(n.form.value.username):this._account.logIn(n.form.value.username,n.form.value.password).then(e=>{t(e)},t=>e("Invalid login"))},t=>e())})}microsoftSignOn(){this.userAgentApplication.loginRedirect(["user.read","mail.send"])}loginModal(){return this._ds.login(!(!this.environment||!this.environment.MS_ALLOWED),!this.environment||!this.environment.HIDE_LOGIN_TEXT)}removeUser(t){return new Promise((e,n)=>{this._socket.call("removeDocument","users",t,(o,r)=>{o?(this._ds.error("Could not remove user"),this._socket.call("insertErrorLog","AuthService - removeUser",[t,o]),n(o)):e(!0)})})}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:AuthService,deps:[{token:DialogService},{token:ValidationService},{token:AlertService},{token:AccountManagerService},{token:SocketManagerService}],target:i0.ɵɵFactoryTarget.Injectable});static"ɵprov"=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:AuthService})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:AuthService,decorators:[{type:Injectable}],ctorParameters:()=>[{type:DialogService},{type:ValidationService},{type:AlertService},{type:AccountManagerService},{type:SocketManagerService}]});class AuthPermissionService{modules=[];constructor(){}registerModule(t){this.modules.push(t),this.modules.sort((t,e)=>{let n=t.name,o=e.name;return n<o?-1:n>o?1:0})}getAllModulePermissions(){return this.modules}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:AuthPermissionService,deps:[],target:i0.ɵɵFactoryTarget.Injectable});static"ɵprov"=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:AuthPermissionService})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:AuthPermissionService,decorators:[{type:Injectable}],ctorParameters:()=>[]});class ScrollDirective{onScroll=new EventEmitter;bottomOffset=100;topOffset=100;constructor(){}scrolled(t){this.elementScrollEvent(t)}windowScrolled(t){this.windowScrollEvent(t)}windowScrollEvent(t){const e=t.target,n=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,o=n<this.topOffset,r={isReachingBottom:e.body.offsetHeight-(window.innerHeight+n)<this.bottomOffset,isReachingTop:o,originalEvent:t,isWindowEvent:!0};this.onScroll.emit(r)}elementScrollEvent(t){const e=t.target,n=e.scrollHeight-e.scrollTop,o=e.offsetHeight,r=e.scrollTop<this.topOffset,i={isReachingBottom:n-o<this.bottomOffset,isReachingTop:r,originalEvent:t,isWindowEvent:!1};this.onScroll.emit(i)}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:ScrollDirective,deps:[],target:i0.ɵɵFactoryTarget.Directive});static"ɵdir"=i0.ɵɵngDeclareDirective({minVersion:"14.0.0",version:"21.0.1",type:ScrollDirective,isStandalone:!1,selector:"[detect-scroll]",inputs:{bottomOffset:"bottomOffset",topOffset:"topOffset"},outputs:{onScroll:"onScroll"},host:{listeners:{scroll:"scrolled($event)","window:scroll":"windowScrolled($event)"}},ngImport:i0})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:ScrollDirective,decorators:[{type:Directive,args:[{selector:"[detect-scroll]",standalone:!1}]}],ctorParameters:()=>[],propDecorators:{onScroll:[{type:Output}],bottomOffset:[{type:Input}],topOffset:[{type:Input}],scrolled:[{type:HostListener,args:["scroll",["$event"]]}],windowScrolled:[{type:HostListener,args:["window:scroll",["$event"]]}]}});class NavbarMainComponent extends BaseComponent{_services;auth;_ds;_app;dropdowns;scrollable;logo="";navTabs=[];fontSize=12;publicProgram=!1;digitalSign=!1;showSupport=!0;user=null;collapseShowing=!1;client="";isResolveIO=!1;standardProgram=!1;tourStarted=!1;dropdownLeftTimer=null;scrollRightInterval=null;scrollLeftInterval=null;isDemo=!1;constructor(t,e,n,o){super(t),this._services=t,this.auth=e,this._ds=n,this._app=o}ngOnInit(){this._services._account.user.subscribe(t=>{this.user=t}),this.client=this._app.client.getValue(),this.standardProgram=this._app.standardProgram.getValue(),this.tourStarted=this._services._app.tourStarted.getValue(),this.client||(this.isResolveIO=!0),this._services._app.tourStarted.subscribe(t=>{this.tourStarted=t}),this._services._app.isDemo.subscribe(t=>{this.isDemo=t})}ngAfterViewInit(){this.dropdownLeftTimer=setInterval(()=>{this.calculateDropdownsLeft()},500),document.documentElement.style.setProperty("--font-size",this.fontSize+"px")}ngOnDestroy(){this.dropdownLeftTimer&&(clearInterval(this.dropdownLeftTimer),this.dropdownLeftTimer=null)}async logout(){this._app.isLoggingOut.next(!0),await this._services._account.logOut(),this._app.isLoggingOut.next(!1)}login(){this.auth.loginUser().then(()=>{},t=>{})}hasScrolled(){return this.scrollable.nativeElement.scrollLeft<=0&&this.stopScrollRight(),this.scrollable.nativeElement.scrollLeft>0}hasMoreScroll(){return this.scrollable.nativeElement.scrollWidth<=this.scrollable.nativeElement.clientWidth+this.scrollable.nativeElement.scrollLeft&&this.stopScrollLeft(),this.scrollable.nativeElement.scrollWidth>this.scrollable.nativeElement.clientWidth+this.scrollable.nativeElement.scrollLeft}startScrollRight(){this.scrollRightInterval=setInterval(()=>{this.scrollable.nativeElement.scrollLeft-=2},1)}stopScrollRight(){clearInterval(this.scrollRightInterval)}scrollRightOnce(){this.scrollable.nativeElement.scrollLeft-=50}startScrollLeft(){this.scrollLeftInterval=setInterval(()=>{this.scrollable.nativeElement.scrollLeft+=2},1)}stopScrollLeft(){clearInterval(this.scrollLeftInterval)}scrollLeftOnce(){this.scrollable.nativeElement.scrollLeft+=50}handleNavLinkClick(t){if(t&&(t.metaKey||t.ctrlKey)){const e=t.currentTarget;e&&e.href&&(window.open(e.href,"_blank"),t.preventDefault(),t.stopPropagation())}}calculateDropdownsLeft(){if(this.dropdowns&&this.dropdowns.toArray()&&this.dropdowns.toArray().length&&this.scrollable){const t=[];return this.navTabs.filter(t=>"dropdown"===t.type).forEach(e=>{const n=e.label||"",o=this.dropdowns.toArray().filter(t=>t.nativeElement.innerText.split("\n")[0].replace(/[^A-Za-z0-9]/g,"")===n.replace(/[^A-Za-z0-9]/g,""))[0],r=o?o.nativeElement.querySelector(".dropdown-menu"):null,i=o?Math.max(o.nativeElement.offsetLeft-this.scrollable.nativeElement.scrollLeft,this.scrollable.nativeElement.offsetLeft):0;if(r){parseInt(r.style.left||"0",10)!==i&&t.push({dropDownMenu:r,nextLeft:i})}}),t.length&&t.forEach(t=>{t.dropDownMenu.style.left=t.nextLeft+"px"}),!0}return!1}isInRole(t){if(!t)return!0;if(this.isSuperAdmin())return!0;if(this.user&&this.user.roles.groups)for(let e=0;e<this.user.roles.groups.length;e++){let n=this.user.roles.groups[e];for(let e=0;e<n.views.length;e++){let o=n.views[e];if(o===t||o.startsWith(t+"/"))return!0}}return!1}isSuperAdmin(){return!(!this.user||!this.user.roles)&&this.user.roles.super_admin}isInOneRole(t){if(this.isSuperAdmin())return!0;for(let e=0;e<t.length;e++){let n=t[e];if(!n)return!0;if(this._services._account.isUserInView(n))return!0}return!1}navigateTo(t){this._services._router.navigateByUrl(t)}help(){this._ds.input("What do you need help with?",[{label:"Title of Problem",form:"problem_title",data:"",validators:[Validators.required],validatorErrors:["required"],validatorMsg:["Problem title is required."],required:!0},{label:"Description of Problem",form:"problem_desc",data:"",validators:[Validators.required],validatorErrors:["required"],validatorMsg:["Problem description is required."],required:!0,type:"textarea"}]).then(t=>{this._services._socket.call("getHelpNotification",this._services._account.getUser().fullname,t.problem_title.value,t.problem_desc.value)},()=>{})}isCustomer(){return!(!this._services._account.getUser().other.customers||!this._services._account.getUser().other.customers.length)}getWindowWidth(){return window.innerWidth}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:NavbarMainComponent,deps:[{token:ProviderService},{token:AuthService},{token:DialogService},{token:CoreService}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"21.0.1",type:NavbarMainComponent,isStandalone:!1,selector:"navbar-main",inputs:{logo:"logo",navTabs:"navTabs",fontSize:"fontSize",publicProgram:"publicProgram",digitalSign:"digitalSign",showSupport:"showSupport"},providers:[ProviderService],viewQueries:[{propertyName:"scrollable",first:!0,predicate:["scrollable"],descendants:!0,static:!0},{propertyName:"dropdowns",predicate:["dropdowns"],descendants:!0}],usesInheritance:!0,ngImport:i0,template:'<style>\n\t:root {\n\t\t--font-size: 12;\n\t}\n\n\t:host ::ng-deep * {\n\t\tfont-size: var(--font-size);\n\t}\n\n\t@media (max-width: 1200px) {\n\t\t.navbarMain a {\n\t\t\tfont-size: 18px !important;\n\t\t}\n\t\t.navbarMain .dropdown-menu {\n\t\t\tmargin-left: 10px;\n\t\t}\n\t\t.navbar-divider-pipe {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.navbar-divider-hr {\n\t\t\tdisplay: block;\n\t\t\twidth: 100%;\n\t\t\theight: 1px;\n\t\t\tborder: 0;\n\t\t\tborder-top: 1px solid white;\n\t\t\tbackground-color: white;\n\t\t\tcolor: white;\n\t\t\topacity: 1;\n\t\t\tmargin: 0.25rem 0;\n\t\t}\n\t}\n\t@media (min-width: 1200px) {\n\t\t.scrollable-x {\n\t\t\tmax-width: 60vw;\n\t\t\toverflow-x: auto;\n\t\t\toverflow-y: visible;\n\t\t\talign-items: center;\n\t\t}\n\n\t\t::-webkit-scrollbar {\n\t\t\tdisplay: none;\n\t\t}\n\n\t\t.verticalAlign {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t}\n\n\t\t.dropdown {\n\t\t\tposition: static;\n\t\t}\n\t}\n\n\t.navbar li {\n\t\tcursor: pointer;\n\t\ttext-align: center;\n\t}\n\n\t.navbar-divider-pipe {\n\t\tdisplay: inline-block;\n\t\talign-self: stretch;\n\t\twidth: 1px;\n\t\tbackground-color: white;\n\t\topacity: 0.8;\n\t\tmargin: 0 0.75rem;\n\t}\n\n\t.navbar-dark .navbar-nav .nav-link:hover,\n\t.navbar-dark .navbar-nav .nav-link:focus {\n\t\tcolor: gray;\n\t}\n\t.navbar-divider-item {\n\t\tdisplay: flex;\n\t\talign-items: stretch;\n\t}\n</style>\n\n<div class="row">\n\t<nav class="navbar navbar-expand-xl navbar-dark bg-dark navbarMain" style="width: 100%">\n\t\t<a class="navbar-brand" href="#">\n\t\t\t@if (!isDemo) {\n\t\t\t\t<img [src]="logo" style="width: auto; height: 36px" />\n\t\t\t}\n\t\t</a>\n\t\t<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMainNav" aria-controls="navbarMainNav" aria-expanded="false" aria-label="Toggle navigation">\n\t\t\t<span class="navbar-toggler-icon"></span>\n\t\t</button>\n\t\t<div class="navbar-collapse collapse" id="navbarMainNav">\n\t\t\t<ul class="navbar-nav">\n\t\t\t\t@if (!standardProgram && !digitalSign) {\n\t\t\t\t\t<li class="nav-item" data-bs-toggle="collapse" data-bs-target="#navbarMainNav" [style.border-right]="getWindowWidth() > 1200 ? \'1px solid white\' : \'\'">\n\t\t\t\t\t\t<a class="nav-link" routerLink="home" (click)="handleNavLinkClick($event)" [class.disabled]="tourStarted ? true : null" routerLinkActive="active">Home</a>\n\t\t\t\t\t</li>\n\t\t\t\t}\n\t\t\t</ul>\n\t\t\t@if (hasScrolled()) {\n\t\t\t\t<div (mouseover)="startScrollRight()" (mouseout)="stopScrollRight()" (click)="scrollRightOnce()">\n\t\t\t\t\t<i class="fa fa-arrow-left" style="color: white; font-size: 20px"></i>\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t<ul [ngClass]="[\'navbar-nav\', \'scrollable-x\']" #scrollable detect-scroll (onScroll)="calculateDropdownsLeft()">\n\t\t\t\t@for (tab of navTabs; track tab.label || tab.links?.[0]?.routerLink || i; let i = $index) {\n\t\t\t\t\t@if (tab.type === \'link\') {\n\t\t\t\t\t\t@if ((publicProgram || user) && !digitalSign && isInRole(tab.links[0].role)) {\n\t\t\t\t\t\t\t<li class="nav-item" data-bs-toggle="collapse" [tourAnchor]="tab.tourAnchor" data-bs-target="#navbarMainNav">\n\t\t\t\t\t\t\t\t<a class="nav-link" (click)="handleNavLinkClick($event)" [class.disabled]="tourStarted ? true : null" [routerLink]="tab.links[0].routerLink" routerLinkActive="active">{{ tab.links[0].label }}</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t@if (tab.type === \'dropdown\') {\n\t\t\t\t\t\t@if ((publicProgram || user) && isInOneRole(tab.roles)) {\n\t\t\t\t\t\t\t<li #dropdowns class="nav-item dropdown">\n\t\t\t\t\t\t\t\t<a class="nav-link dropdown-toggle" [class.disabled]="tourStarted ? true : null" id="navbarDropdownAsset" role="button" [tourAnchor]="tab.tourAnchor" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">\n\t\t\t\t\t\t\t\t\t{{ tab.label }}\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t<div class="dropdown-menu bg-dark" aria-labelledby="navbarDropdownAsset" data-bs-toggle="collapse" data-bs-target="#navbarMainNav">\n\t\t\t\t\t\t\t\t\t@for (link of tab.links; track link.routerLink || link.label) {\n\t\t\t\t\t\t\t\t\t\t@if ((publicProgram || user) && isInRole(link.role)) {\n\t\t\t\t\t\t\t\t\t\t\t<a class="dropdown-item nav-link" (click)="handleNavLinkClick($event)" [routerLink]="link.routerLink">{{ link.label }}</a>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t</ul>\n\t\t\t@if (hasMoreScroll()) {\n\t\t\t\t<div (mouseover)="startScrollLeft()" (mouseout)="stopScrollLeft()" (click)="scrollLeftOnce()">\n\t\t\t\t\t<i class="fa fa-arrow-right" style="color: white; font-size: 20px"></i>\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@if (getWindowWidth() < 1200) {\n\t\t\t\t<hr class="navbar-divider-hr" />\n\t\t\t}\n\t\t\t@if (!publicProgram) {\n\t\t\t\t<ul [ngClass]="[\'navbar-nav\', \'ms-auto\']">\n\t\t\t\t\t@if (user && client && (showSupport || isSuperAdmin())) {\n\t\t\t\t\t\t<li class="nav-item" data-bs-toggle="collapse" data-bs-target="#navbarMainNav" style="height: 30px" tourAnchor="supportSection">\n\t\t\t\t\t\t\t<a class="nav-link" (click)="handleNavLinkClick($event)" [class.disabled]="tourStarted ? true : null" routerLink="support-ticket" routerLinkActive="active">Support</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t}\n\t\t\t\t\t@if (user && isInRole(\'super-admin\')) {\n\t\t\t\t\t\t<li class="nav-item" data-bs-toggle="collapse" data-bs-target="#navbarMainNav">\n\t\t\t\t\t\t\t<a class="nav-link" (click)="handleNavLinkClick($event)" routerLink="logs" routerLinkActive="active">Logs</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t}\n\t\t\t\t\t@if (user && isInRole(\'super-admin\')) {\n\t\t\t\t\t\t<li class="nav-item" data-bs-toggle="collapse" data-bs-target="#navbarMainNav">\n\t\t\t\t\t\t\t<a class="nav-link" (click)="handleNavLinkClick($event)" routerLink="super-admin" routerLinkActive="active">Super Admin</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t}\n\t\t\t\t\t@if (user) {\n\t\t\t\t\t\t<li class="nav-item navbar-divider-item">\n\t\t\t\t\t\t\t@if (getWindowWidth() > 1200) {\n\t\t\t\t\t\t\t\t<span class="navbar-divider-pipe" aria-hidden="true"></span>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@else {\n\t\t\t\t\t\t\t\t<hr class="navbar-divider-hr" />\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</li>\n\t\t\t\t\t}\n\t\t\t\t\t@if (!user) {\n\t\t\t\t\t\t<li class="nav-item" data-bs-toggle="collapse" data-bs-target="#navbarMainNav">\n\t\t\t\t\t\t\t<a class="nav-link" (click)="login()" style="cursor: pointer" routerLinkActive="active">Login</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t}\n\t\t\t\t\t@if (user) {\n\t\t\t\t\t\t<li class="nav-item" tourAnchor="userSettings">\n\t\t\t\t\t\t\t<a class="nav-link" (click)="handleNavLinkClick($event)" [class.disabled]="tourStarted ? true : null" routerLink="user-settings">Hello {{ user.fullname }}!</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t}\n\t\t\t\t\t@if (user) {\n\t\t\t\t\t\t<li class="nav-item" style="cursor: pointer" (click)="logout()" data-bs-toggle="collapse" data-bs-target="#navbarMainNav">\n\t\t\t\t\t\t\t<a class="nav-link" [class.disabled]="tourStarted ? true : null">Logout</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t}\n\t\t\t\t</ul>\n\t\t\t}\n\t\t</div>\n\t</nav>\n</div>\n',styles:[":root{--font-size: 12}:host ::ng-deep *{font-size:var(--font-size)}@media(max-width:1200px){.navbarMain a{font-size:18px!important}.navbarMain .dropdown-menu{margin-left:10px}.navbar-divider-pipe{display:none}.navbar-divider-hr{display:block;width:100%;height:1px;border:0;border-top:1px solid white;background-color:#fff;color:#fff;opacity:1;margin:.25rem 0}}@media(min-width:1200px){.scrollable-x{max-width:60vw;overflow-x:auto;overflow-y:visible;align-items:center}::-webkit-scrollbar{display:none}.verticalAlign{display:flex;align-items:center}.dropdown{position:static}}.navbar li{cursor:pointer;text-align:center}.navbar-divider-pipe{display:inline-block;align-self:stretch;width:1px;background-color:#fff;opacity:.8;margin:0 .75rem}.navbar-dark .navbar-nav .nav-link:hover,.navbar-dark .navbar-nav .nav-link:focus{color:gray}.navbar-divider-item{display:flex;align-items:stretch}\n"],dependencies:[{kind:"directive",type:i1$1.RouterLink,selector:"[routerLink]",inputs:["target","queryParams","fragment","queryParamsHandling","state","info","relativeTo","preserveFragment","skipLocationChange","replaceUrl","routerLink"]},{kind:"directive",type:i1$1.RouterLinkActive,selector:"[routerLinkActive]",inputs:["routerLinkActiveOptions","ariaCurrentWhenActive","routerLinkActive"],outputs:["isActiveChange"],exportAs:["routerLinkActive"]},{kind:"directive",type:i7.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]},{kind:"directive",type:ScrollDirective,selector:"[detect-scroll]",inputs:["bottomOffset","topOffset"],outputs:["onScroll"]}]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:NavbarMainComponent,decorators:[{type:Component,args:[{selector:"navbar-main",providers:[ProviderService],standalone:!1,template:'<style>\n\t:root {\n\t\t--font-size: 12;\n\t}\n\n\t:host ::ng-deep * {\n\t\tfont-size: var(--font-size);\n\t}\n\n\t@media (max-width: 1200px) {\n\t\t.navbarMain a {\n\t\t\tfont-size: 18px !important;\n\t\t}\n\t\t.navbarMain .dropdown-menu {\n\t\t\tmargin-left: 10px;\n\t\t}\n\t\t.navbar-divider-pipe {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.navbar-divider-hr {\n\t\t\tdisplay: block;\n\t\t\twidth: 100%;\n\t\t\theight: 1px;\n\t\t\tborder: 0;\n\t\t\tborder-top: 1px solid white;\n\t\t\tbackground-color: white;\n\t\t\tcolor: white;\n\t\t\topacity: 1;\n\t\t\tmargin: 0.25rem 0;\n\t\t}\n\t}\n\t@media (min-width: 1200px) {\n\t\t.scrollable-x {\n\t\t\tmax-width: 60vw;\n\t\t\toverflow-x: auto;\n\t\t\toverflow-y: visible;\n\t\t\talign-items: center;\n\t\t}\n\n\t\t::-webkit-scrollbar {\n\t\t\tdisplay: none;\n\t\t}\n\n\t\t.verticalAlign {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t}\n\n\t\t.dropdown {\n\t\t\tposition: static;\n\t\t}\n\t}\n\n\t.navbar li {\n\t\tcursor: pointer;\n\t\ttext-align: center;\n\t}\n\n\t.navbar-divider-pipe {\n\t\tdisplay: inline-block;\n\t\talign-self: stretch;\n\t\twidth: 1px;\n\t\tbackground-color: white;\n\t\topacity: 0.8;\n\t\tmargin: 0 0.75rem;\n\t}\n\n\t.navbar-dark .navbar-nav .nav-link:hover,\n\t.navbar-dark .navbar-nav .nav-link:focus {\n\t\tcolor: gray;\n\t}\n\t.navbar-divider-item {\n\t\tdisplay: flex;\n\t\talign-items: stretch;\n\t}\n</style>\n\n<div class="row">\n\t<nav class="navbar navbar-expand-xl navbar-dark bg-dark navbarMain" style="width: 100%">\n\t\t<a class="navbar-brand" href="#">\n\t\t\t@if (!isDemo) {\n\t\t\t\t<img [src]="logo" style="width: auto; height: 36px" />\n\t\t\t}\n\t\t</a>\n\t\t<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMainNav" aria-controls="navbarMainNav" aria-expanded="false" aria-label="Toggle navigation">\n\t\t\t<span class="navbar-toggler-icon"></span>\n\t\t</button>\n\t\t<div class="navbar-collapse collapse" id="navbarMainNav">\n\t\t\t<ul class="navbar-nav">\n\t\t\t\t@if (!standardProgram && !digitalSign) {\n\t\t\t\t\t<li class="nav-item" data-bs-toggle="collapse" data-bs-target="#navbarMainNav" [style.border-right]="getWindowWidth() > 1200 ? \'1px solid white\' : \'\'">\n\t\t\t\t\t\t<a class="nav-link" routerLink="home" (click)="handleNavLinkClick($event)" [class.disabled]="tourStarted ? true : null" routerLinkActive="active">Home</a>\n\t\t\t\t\t</li>\n\t\t\t\t}\n\t\t\t</ul>\n\t\t\t@if (hasScrolled()) {\n\t\t\t\t<div (mouseover)="startScrollRight()" (mouseout)="stopScrollRight()" (click)="scrollRightOnce()">\n\t\t\t\t\t<i class="fa fa-arrow-left" style="color: white; font-size: 20px"></i>\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t<ul [ngClass]="[\'navbar-nav\', \'scrollable-x\']" #scrollable detect-scroll (onScroll)="calculateDropdownsLeft()">\n\t\t\t\t@for (tab of navTabs; track tab.label || tab.links?.[0]?.routerLink || i; let i = $index) {\n\t\t\t\t\t@if (tab.type === \'link\') {\n\t\t\t\t\t\t@if ((publicProgram || user) && !digitalSign && isInRole(tab.links[0].role)) {\n\t\t\t\t\t\t\t<li class="nav-item" data-bs-toggle="collapse" [tourAnchor]="tab.tourAnchor" data-bs-target="#navbarMainNav">\n\t\t\t\t\t\t\t\t<a class="nav-link" (click)="handleNavLinkClick($event)" [class.disabled]="tourStarted ? true : null" [routerLink]="tab.links[0].routerLink" routerLinkActive="active">{{ tab.links[0].label }}</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t@if (tab.type === \'dropdown\') {\n\t\t\t\t\t\t@if ((publicProgram || user) && isInOneRole(tab.roles)) {\n\t\t\t\t\t\t\t<li #dropdowns class="nav-item dropdown">\n\t\t\t\t\t\t\t\t<a class="nav-link dropdown-toggle" [class.disabled]="tourStarted ? true : null" id="navbarDropdownAsset" role="button" [tourAnchor]="tab.tourAnchor" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">\n\t\t\t\t\t\t\t\t\t{{ tab.label }}\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t<div class="dropdown-menu bg-dark" aria-labelledby="navbarDropdownAsset" data-bs-toggle="collapse" data-bs-target="#navbarMainNav">\n\t\t\t\t\t\t\t\t\t@for (link of tab.links; track link.routerLink || link.label) {\n\t\t\t\t\t\t\t\t\t\t@if ((publicProgram || user) && isInRole(link.role)) {\n\t\t\t\t\t\t\t\t\t\t\t<a class="dropdown-item nav-link" (click)="handleNavLinkClick($event)" [routerLink]="link.routerLink">{{ link.label }}</a>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t</ul>\n\t\t\t@if (hasMoreScroll()) {\n\t\t\t\t<div (mouseover)="startScrollLeft()" (mouseout)="stopScrollLeft()" (click)="scrollLeftOnce()">\n\t\t\t\t\t<i class="fa fa-arrow-right" style="color: white; font-size: 20px"></i>\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@if (getWindowWidth() < 1200) {\n\t\t\t\t<hr class="navbar-divider-hr" />\n\t\t\t}\n\t\t\t@if (!publicProgram) {\n\t\t\t\t<ul [ngClass]="[\'navbar-nav\', \'ms-auto\']">\n\t\t\t\t\t@if (user && client && (showSupport || isSuperAdmin())) {\n\t\t\t\t\t\t<li class="nav-item" data-bs-toggle="collapse" data-bs-target="#navbarMainNav" style="height: 30px" tourAnchor="supportSection">\n\t\t\t\t\t\t\t<a class="nav-link" (click)="handleNavLinkClick($event)" [class.disabled]="tourStarted ? true : null" routerLink="support-ticket" routerLinkActive="active">Support</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t}\n\t\t\t\t\t@if (user && isInRole(\'super-admin\')) {\n\t\t\t\t\t\t<li class="nav-item" data-bs-toggle="collapse" data-bs-target="#navbarMainNav">\n\t\t\t\t\t\t\t<a class="nav-link" (click)="handleNavLinkClick($event)" routerLink="logs" routerLinkActive="active">Logs</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t}\n\t\t\t\t\t@if (user && isInRole(\'super-admin\')) {\n\t\t\t\t\t\t<li class="nav-item" data-bs-toggle="collapse" data-bs-target="#navbarMainNav">\n\t\t\t\t\t\t\t<a class="nav-link" (click)="handleNavLinkClick($event)" routerLink="super-admin" routerLinkActive="active">Super Admin</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t}\n\t\t\t\t\t@if (user) {\n\t\t\t\t\t\t<li class="nav-item navbar-divider-item">\n\t\t\t\t\t\t\t@if (getWindowWidth() > 1200) {\n\t\t\t\t\t\t\t\t<span class="navbar-divider-pipe" aria-hidden="true"></span>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@else {\n\t\t\t\t\t\t\t\t<hr class="navbar-divider-hr" />\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</li>\n\t\t\t\t\t}\n\t\t\t\t\t@if (!user) {\n\t\t\t\t\t\t<li class="nav-item" data-bs-toggle="collapse" data-bs-target="#navbarMainNav">\n\t\t\t\t\t\t\t<a class="nav-link" (click)="login()" style="cursor: pointer" routerLinkActive="active">Login</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t}\n\t\t\t\t\t@if (user) {\n\t\t\t\t\t\t<li class="nav-item" tourAnchor="userSettings">\n\t\t\t\t\t\t\t<a class="nav-link" (click)="handleNavLinkClick($event)" [class.disabled]="tourStarted ? true : null" routerLink="user-settings">Hello {{ user.fullname }}!</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t}\n\t\t\t\t\t@if (user) {\n\t\t\t\t\t\t<li class="nav-item" style="cursor: pointer" (click)="logout()" data-bs-toggle="collapse" data-bs-target="#navbarMainNav">\n\t\t\t\t\t\t\t<a class="nav-link" [class.disabled]="tourStarted ? true : null">Logout</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t}\n\t\t\t\t</ul>\n\t\t\t}\n\t\t</div>\n\t</nav>\n</div>\n'}]}],ctorParameters:()=>[{type:ProviderService},{type:AuthService},{type:DialogService},{type:CoreService}],propDecorators:{dropdowns:[{type:ViewChildren,args:["dropdowns"]}],scrollable:[{type:ViewChild,args:["scrollable",{static:!0}]}],logo:[{type:Input,args:["logo"]}],navTabs:[{type:Input,args:["navTabs"]}],fontSize:[{type:Input,args:["fontSize"]}],publicProgram:[{type:Input,args:["publicProgram"]}],digitalSign:[{type:Input,args:["digitalSign"]}],showSupport:[{type:Input,args:["showSupport"]}]}});class FilterEqualPipe{transform(t,e,n){return t?t.filter(t=>t[e]===n):[]}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:FilterEqualPipe,deps:[],target:i0.ɵɵFactoryTarget.Pipe});static"ɵpipe"=i0.ɵɵngDeclarePipe({minVersion:"14.0.0",version:"21.0.1",ngImport:i0,type:FilterEqualPipe,isStandalone:!1,name:"filterEqual",pure:!1})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:FilterEqualPipe,decorators:[{type:Pipe,args:[{name:"filterEqual",pure:!1,standalone:!1}]}]});class FilterNotEqualPipe{transform(t,e,n){return t?t.filter(t=>t[e]!==n):[]}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:FilterNotEqualPipe,deps:[],target:i0.ɵɵFactoryTarget.Pipe});static"ɵpipe"=i0.ɵɵngDeclarePipe({minVersion:"14.0.0",version:"21.0.1",ngImport:i0,type:FilterNotEqualPipe,isStandalone:!1,name:"filterNotEqual"})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:FilterNotEqualPipe,decorators:[{type:Pipe,args:[{name:"filterNotEqual",standalone:!1}]}]});class NavbarModuleComponent extends BaseComponent{_cdRef;_services;sideNavHeight;sideNavWidth;menuData={title:"",module:null,description:null,description_name:"Description",tabs:[]};selectedTab=null;currentRoute="";routerEvents$=[];tourStarted=!1;drawerOpen=!1;isDeviceWidth=window.innerWidth<=1200;constructor(t,e){super(e),this._cdRef=t,this._services=e}ngOnInit(){this.tourStarted=this._services._app.tourStarted.getValue(),this.routerEvents$.push(this._services._router.events.subscribe(t=>{this._services._router.url.replace(/\/[a-f0-9]{24}$/,"").replace(/\?.+$/,"")===this.currentRoute&&this.selectedTab||this.selectTabFromRouter()})),this.routerEvents$.push(this._services._app.navbarModuleData.subscribe(t=>{this.menuData=t,this._services._router.url.replace(/\/[a-f0-9]{24}$/,"").replace(/\?.+$/,"")===this.currentRoute&&this.selectedTab||this.selectTabFromRouter()})),this.routerEvents$.push(this._services._app.tourStarted.subscribe(t=>{this.tourStarted=t}))}onResize(){this.isDeviceWidth=window.innerWidth<=1200}ngOnDestroy(){this.routerEvents$.forEach(t=>{t.unsubscribe()})}selectTabFromRouter(){if(this.menuData)if("/"===this._services._router.url)this.selectedTab=this.menuData.tabs[0];else{for(this.currentRoute=this._services._router.url.replace(/\/[a-f0-9]{24}$/,"").replace(/\?.+$/,""),this.selectedTab=null;!this.selectedTab&&this.currentRoute.split("/").length>2;){for(let t=0;t<this.menuData.tabs.length;t++){let e=this.menuData.tabs[t];if(e.link===this.currentRoute){this.selectedTab=e;break}}this.currentRoute=this.currentRoute.replace(/(\/[^\/]+$)/,"")}this.selectedTab||(this.selectedTab=this.menuData.tabs[0])}}tabClass(t){return this.selectedTab&&this.selectedTab.label===t.label?"active":""}handleNavLinkClick(t){if(t&&(t.metaKey||t.ctrlKey)){const e=t.currentTarget;e&&e.href&&(window.open(e.href,"_blank"),t.preventDefault(),t.stopPropagation())}}onNavLinkClick(t){this.handleNavLinkClick(t),!t.defaultPrevented&&window.innerWidth<=1200&&(this.drawerOpen=!1)}toggleDrawer(){this.drawerOpen=!this.drawerOpen}navigateTo(t){this.selectedTab!==t&&(this.selectedTab=t,null===t.params?this._services._router.navigateByUrl(t.link):this._services._router.navigateByUrl(t.link+"/"+t.params),window.innerWidth<=1200&&(this.drawerOpen=!1))}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:NavbarModuleComponent,deps:[{token:i0.ChangeDetectorRef},{token:ProviderService}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"21.0.1",type:NavbarModuleComponent,isStandalone:!1,selector:"navbar-module",inputs:{sideNavHeight:"sideNavHeight",sideNavWidth:"sideNavWidth"},host:{listeners:{"window:resize":"onResize()"}},providers:[ProviderService],usesInheritance:!0,ngImport:i0,template:'<style>\n\t.navbarModule li {\n\t\tcursor: pointer;\n\t}\n\t.navbarModule li.active {\n\t\tborder-left: 3px solid #d19b3d;\n\t}\n\t.navbarModule nav {\n\t\twidth: 100%;\n\t}\n\t.navbar-module-container {\n\t\tmargin-left: calc(var(--bs-gutter-x, 1.5rem) / -2);\n\t\tmargin-right: calc(var(--bs-gutter-x, 1.5rem) / -2);\n\t}\n\n\t.navbarModule .nav-link {\n\t\tmargin-left: 10px;\n\t}\n\n\t@media (min-width: 1200px) {\n\t\t.navbarModule {\n\t\t\theight: 95vh;\n\t\t\tmargin-left: -10px;\n\t\t}\n\n\t\thr {\n\t\t\tborder-top: white 1px solid;\n\t\t}\n\t}\n\n\t@media (max-width: 1200px) {\n\t\t.device-drawer-margin {\n\t\t\tmargin-left: 10px !important;\n\t\t}\n\n\t\thr {\n\t\t\tdisplay: none;\n\t\t}\n\n\t\t.navbarModule a {\n\t\t\tfont-size: 18px !important;\n\t\t}\n\t}\n</style>\n\n<div class="navbar-module-container">\n\t<nav class="navbar navbar-expand-xl navbar-dark bg-dark flex-xl-column navbarModule" [style.height]="sideNavHeight ? sideNavHeight + \'px\' : \'\'" [style.width]="sideNavWidth ? sideNavWidth : \'\'">\n\t\t<div href="#" style="color: white; font-size: 16px; margin-left: 10px;">\n\t\t\t{{ menuData.title }}\n\t\t</div>\n\t\t<button class="navbar-toggler" type="button" [attr.aria-controls]="\'navbarModuleNav\'" [attr.aria-expanded]="drawerOpen" aria-label="Toggle navigation" (click)="toggleDrawer()">\n\t\t\t<span class="navbar-toggler-icon"></span>\n\t\t</button>\n\t\t<div class="navbar-collapse collapse" [class.show]="drawerOpen" [ngClass]="{ \'device-drawer-margin\': isDeviceWidth }" id="navbarModuleNav" style="align-items: baseline; width: 100%; overflow-y: auto; overflow-x: hidden">\n\t\t\t<ul class="navbar-nav" style="display: block; float: left; width: 100%">\n\t\t\t\t@for (tab of menuData.tabs | filterNotEqual: \'params\' : \'0\'; track tab.label; let i = $index) {\n\t\t\t\t\t@if (tab.params !== null && menuData.tabs[i - 1] && menuData.tabs[i - 1].params === null) {\n\t\t\t\t\t\t<hr />\n\t\t\t\t\t\t<div href="#" style="color: white; font-size: 16px">Selected {{ menuData.module }}</div>\n\t\t\t\t\t\t<hr />\n\t\t\t\t\t\t<div style="color: white; margin-left: 5px; text-decoration: underline; font-size: 14px">{{ menuData.description_name }}:</div>\n\t\t\t\t\t\t<div style="color: white; margin-left: 8px; font-size: 12px">{{ menuData.description }}</div>\n\t\t\t\t\t\t<br />\n\t\t\t\t\t}\n\t\t\t\t\t<li [ngClass]="[\'nav-item\', tabClass(tab)]" [tourAnchor]="tab.tourAnchor">\n\t\t\t\t\t\t<a class="nav-link" [class.disabled]="tourStarted ? true : null" (click)="onNavLinkClick($event)" [routerLink]="[tab.params ? tab.link + \'/\' + tab.params : tab.link]" routerLinkActive="active">{{ tab.label }}</a>\n\t\t\t\t\t</li>\n\t\t\t\t}\n\t\t\t</ul>\n\t\t</div>\n\t</nav>\n</div>\n',styles:[".navbarModule li{cursor:pointer}.navbarModule li.active{border-left:3px solid #d19b3d}.navbarModule nav{width:100%}.navbar-module-container{margin-left:calc(var(--bs-gutter-x, 1.5rem) / -2);margin-right:calc(var(--bs-gutter-x, 1.5rem) / -2)}.navbarModule .nav-link{margin-left:10px}@media(min-width:1200px){.navbarModule{height:95vh;margin-left:-10px}hr{border-top:white 1px solid}}@media(max-width:1200px){.device-drawer-margin{margin-left:10px!important}hr{display:none}.navbarModule a{font-size:18px!important}}\n"],dependencies:[{kind:"directive",type:i1$1.RouterLink,selector:"[routerLink]",inputs:["target","queryParams","fragment","queryParamsHandling","state","info","relativeTo","preserveFragment","skipLocationChange","replaceUrl","routerLink"]},{kind:"directive",type:i1$1.RouterLinkActive,selector:"[routerLinkActive]",inputs:["routerLinkActiveOptions","ariaCurrentWhenActive","routerLinkActive"],outputs:["isActiveChange"],exportAs:["routerLinkActive"]},{kind:"directive",type:i7.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]},{kind:"pipe",type:FilterNotEqualPipe,name:"filterNotEqual"}]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:NavbarModuleComponent,decorators:[{type:Component,args:[{providers:[ProviderService],selector:"navbar-module",standalone:!1,template:'<style>\n\t.navbarModule li {\n\t\tcursor: pointer;\n\t}\n\t.navbarModule li.active {\n\t\tborder-left: 3px solid #d19b3d;\n\t}\n\t.navbarModule nav {\n\t\twidth: 100%;\n\t}\n\t.navbar-module-container {\n\t\tmargin-left: calc(var(--bs-gutter-x, 1.5rem) / -2);\n\t\tmargin-right: calc(var(--bs-gutter-x, 1.5rem) / -2);\n\t}\n\n\t.navbarModule .nav-link {\n\t\tmargin-left: 10px;\n\t}\n\n\t@media (min-width: 1200px) {\n\t\t.navbarModule {\n\t\t\theight: 95vh;\n\t\t\tmargin-left: -10px;\n\t\t}\n\n\t\thr {\n\t\t\tborder-top: white 1px solid;\n\t\t}\n\t}\n\n\t@media (max-width: 1200px) {\n\t\t.device-drawer-margin {\n\t\t\tmargin-left: 10px !important;\n\t\t}\n\n\t\thr {\n\t\t\tdisplay: none;\n\t\t}\n\n\t\t.navbarModule a {\n\t\t\tfont-size: 18px !important;\n\t\t}\n\t}\n</style>\n\n<div class="navbar-module-container">\n\t<nav class="navbar navbar-expand-xl navbar-dark bg-dark flex-xl-column navbarModule" [style.height]="sideNavHeight ? sideNavHeight + \'px\' : \'\'" [style.width]="sideNavWidth ? sideNavWidth : \'\'">\n\t\t<div href="#" style="color: white; font-size: 16px; margin-left: 10px;">\n\t\t\t{{ menuData.title }}\n\t\t</div>\n\t\t<button class="navbar-toggler" type="button" [attr.aria-controls]="\'navbarModuleNav\'" [attr.aria-expanded]="drawerOpen" aria-label="Toggle navigation" (click)="toggleDrawer()">\n\t\t\t<span class="navbar-toggler-icon"></span>\n\t\t</button>\n\t\t<div class="navbar-collapse collapse" [class.show]="drawerOpen" [ngClass]="{ \'device-drawer-margin\': isDeviceWidth }" id="navbarModuleNav" style="align-items: baseline; width: 100%; overflow-y: auto; overflow-x: hidden">\n\t\t\t<ul class="navbar-nav" style="display: block; float: left; width: 100%">\n\t\t\t\t@for (tab of menuData.tabs | filterNotEqual: \'params\' : \'0\'; track tab.label; let i = $index) {\n\t\t\t\t\t@if (tab.params !== null && menuData.tabs[i - 1] && menuData.tabs[i - 1].params === null) {\n\t\t\t\t\t\t<hr />\n\t\t\t\t\t\t<div href="#" style="color: white; font-size: 16px">Selected {{ menuData.module }}</div>\n\t\t\t\t\t\t<hr />\n\t\t\t\t\t\t<div style="color: white; margin-left: 5px; text-decoration: underline; font-size: 14px">{{ menuData.description_name }}:</div>\n\t\t\t\t\t\t<div style="color: white; margin-left: 8px; font-size: 12px">{{ menuData.description }}</div>\n\t\t\t\t\t\t<br />\n\t\t\t\t\t}\n\t\t\t\t\t<li [ngClass]="[\'nav-item\', tabClass(tab)]" [tourAnchor]="tab.tourAnchor">\n\t\t\t\t\t\t<a class="nav-link" [class.disabled]="tourStarted ? true : null" (click)="onNavLinkClick($event)" [routerLink]="[tab.params ? tab.link + \'/\' + tab.params : tab.link]" routerLinkActive="active">{{ tab.label }}</a>\n\t\t\t\t\t</li>\n\t\t\t\t}\n\t\t\t</ul>\n\t\t</div>\n\t</nav>\n</div>\n'}]}],ctorParameters:()=>[{type:i0.ChangeDetectorRef},{type:ProviderService}],propDecorators:{sideNavHeight:[{type:Input}],sideNavWidth:[{type:Input}],onResize:[{type:HostListener,args:["window:resize"]}]}});class CoreComponent extends BaseComponent{_deviceDet;_ds;_resizeService;_services;_offline;_storage;_auth;_aps;environment;logo="";navTabs="";userHasPhoneNumber=!1;client="";showNavbarModule=!0;publicProgram=!1;showSupport=!0;el_navBarMain;el_navBarModule;year=(new Date).getFullYear().toString();fullScreen=!1;windowSizeHeight=window.innerHeight;windowSizeWidth=window.innerWidth;navbarMainHeight=0;statusHeight=0;connectedHeight=0;isDevice=!1;showNavigationMenu=!1;swFlagAlert=null;isConnected=!1;isConnecting=!1;socketStatus;user;status;collapsableMenu=!0;fontSize=12;openedWindow=!1;isOffline=!1;foundUpdate=!1;orientation="portrait";digitalSign=!1;constructor(t,e,n,o,r,i,a,s){super(o),this._deviceDet=t,this._ds=e,this._resizeService=n,this._services=o,this._offline=r,this._storage=i,this._auth=a,this._aps=s}ngOnInit(){this._services._app.setEnvironment(this.environment),this._offline.initStorage(this.environment.OFFLINE_DB_SECRET_KEY),this._services._app.setClient(this.client),this._services._app.setNavTabs(this.navTabs),this._services._account.initLoginManager(this.environment),this.environment&&this.environment.MS_ALLOWED?this._auth.setupMSSingleSignOn(this.environment):this.environment&&this._auth.setEnvironment(this.environment),this._auth.setUserHasPhoneNumber(this.userHasPhoneNumber),this._resizeService.onResize$.subscribe(t=>{setTimeout(()=>{this.windowSizeHeight=t.innerHeight,this.windowSizeWidth=t.innerWidth},100)}),this._services._app.fullScreen.subscribe(t=>{this.fullScreen=t}),this._services._account.user.subscribe(t=>{t&&t.settings?(this.collapsableMenu=t.settings.collapsable_menu,this.fontSize=t.settings.font_size,document.documentElement.style.setProperty("--warning-color",t.settings.warning_color),document.documentElement.style.setProperty("--warning-font-color",t.settings.warning_font_color),document.documentElement.style.setProperty("--warning-shadow-color","0 0 0 0.2rem "+hexToRGB$1(t.settings.warning_color,.5)),document.documentElement.style.setProperty("--warning-hover-color",t.settings.warning_hover_color),document.documentElement.style.setProperty("--success-color",t.settings.success_color),document.documentElement.style.setProperty("--success-font-color",t.settings.success_font_color),document.documentElement.style.setProperty("--success-shadow-color","0 0 0 0.2rem "+hexToRGB$1(t.settings.success_color,.5)),document.documentElement.style.setProperty("--success-hover-color",t.settings.success_hover_color),document.documentElement.style.setProperty("--danger-color",t.settings.danger_color),document.documentElement.style.setProperty("--danger-font-color",t.settings.danger_font_color),document.documentElement.style.setProperty("--danger-shadow-color","0 0 0 0.2rem "+hexToRGB$1(t.settings.danger_color,.5)),document.documentElement.style.setProperty("--danger-hover-color",t.settings.danger_hover_color),document.documentElement.style.setProperty("--info-color",t.settings.info_color),document.documentElement.style.setProperty("--info-font-color",t.settings.info_font_color),document.documentElement.style.setProperty("--info-shadow-color","0 0 0 0.2rem "+hexToRGB$1(t.settings.info_color,.5)),document.documentElement.style.setProperty("--info-hover-color",t.settings.info_hover_color),document.documentElement.style.setProperty("--primary-color",t.settings.primary_color),document.documentElement.style.setProperty("--primary-font-color",t.settings.primary_font_color),document.documentElement.style.setProperty("--primary-shadow-color","0 0 0 0.2rem "+hexToRGB$1(t.settings.primary_color,.5)),document.documentElement.style.setProperty("--primary-hover-color",t.settings.primary_hover_color),document.documentElement.style.setProperty("--secondary-color",t.settings.secondary_color),document.documentElement.style.setProperty("--secondary-font-color",t.settings.secondary_font_color),document.documentElement.style.setProperty("--secondary-shadow-color","0 0 0 0.2rem "+hexToRGB$1(t.settings.secondary_color,.5)),document.documentElement.style.setProperty("--secondary-hover-color",t.settings.secondary_hover_color)):!t||t.other.customers&&t.other.customers.length||t.other.id_customer||t.settings||this.openedWindow?(document.documentElement.style.setProperty("--warning-color","#ffc107"),document.documentElement.style.setProperty("--warning-font-color","#000000"),document.documentElement.style.setProperty("--warning-shadow-color","0 0 0 0.2rem rgba(222, 170, 12, 0.5)"),document.documentElement.style.setProperty("--warning-hover-color","#e0a800"),document.documentElement.style.setProperty("--success-color","#28a745"),document.documentElement.style.setProperty("--success-font-color","#ffffff"),document.documentElement.style.setProperty("--success-shadow-color","0 0 0 0.2rem rgba(72, 180, 97, 0.5)"),document.documentElement.style.setProperty("--success-hover-color","#218838"),document.documentElement.style.setProperty("--danger-color","#dc3545"),document.documentElement.style.setProperty("--danger-font-color","#ffffff"),document.documentElement.style.setProperty("--danger-shadow-color","0 0 0 0.2rem rgba(225, 83, 97, 0.5)"),document.documentElement.style.setProperty("--danger-hover-color","#c82333"),document.documentElement.style.setProperty("--info-color","#17a2b8"),document.documentElement.style.setProperty("--info-font-color","#ffffff"),document.documentElement.style.setProperty("--info-shadow-color","0 0 0 0.2rem rgba(58, 176, 195, 0.5)"),document.documentElement.style.setProperty("--info-hover-color","#138496"),document.documentElement.style.setProperty("--primary-color","#007bff"),document.documentElement.style.setProperty("--primary-font-color","#ffffff"),document.documentElement.style.setProperty("--primary-shadow-color","0 0 0 0.2rem rgba(38, 143, 255, 0.5)"),document.documentElement.style.setProperty("--primary-hover-color","#0069d9"),document.documentElement.style.setProperty("--secondary-color","#868e96"),document.documentElement.style.setProperty("--secondary-font-color","#ffffff"),document.documentElement.style.setProperty("--secondary-shadow-color","0 0 0 0.2rem rgba(130, 138, 145, 0.5)"),document.documentElement.style.setProperty("--secondary-hover-color","#5a6268"),this.fontSize=12):(this.openedWindow=!0,document.documentElement.style.setProperty("--warning-color","#ffc107"),document.documentElement.style.setProperty("--warning-font-color","#000000"),document.documentElement.style.setProperty("--warning-shadow-color","0 0 0 0.2rem rgba(222, 170, 12, 0.5)"),document.documentElement.style.setProperty("--warning-hover-color","#e0a800"),document.documentElement.style.setProperty("--success-color","#28a745"),document.documentElement.style.setProperty("--success-font-color","#ffffff"),document.documentElement.style.setProperty("--success-shadow-color","0 0 0 0.2rem rgba(72, 180, 97, 0.5)"),document.documentElement.style.setProperty("--success-hover-color","#218838"),document.documentElement.style.setProperty("--danger-color","#dc3545"),document.documentElement.style.setProperty("--danger-font-color","#ffffff"),document.documentElement.style.setProperty("--danger-shadow-color","0 0 0 0.2rem rgba(225, 83, 97, 0.5)"),document.documentElement.style.setProperty("--danger-hover-color","#c82333"),document.documentElement.style.setProperty("--info-color","#17a2b8"),document.documentElement.style.setProperty("--info-font-color","#ffffff"),document.documentElement.style.setProperty("--info-shadow-color","0 0 0 0.2rem rgba(58, 176, 195, 0.5)"),document.documentElement.style.setProperty("--info-hover-color","#138496"),document.documentElement.style.setProperty("--primary-color","#007bff"),document.documentElement.style.setProperty("--primary-font-color","#ffffff"),document.documentElement.style.setProperty("--primary-shadow-color","0 0 0 0.2rem rgba(38, 143, 255, 0.5)"),document.documentElement.style.setProperty("--primary-hover-color","#0069d9"),document.documentElement.style.setProperty("--secondary-color","#868e96"),document.documentElement.style.setProperty("--secondary-font-color","#ffffff"),document.documentElement.style.setProperty("--secondary-shadow-color","0 0 0 0.2rem rgba(130, 138, 145, 0.5)"),document.documentElement.style.setProperty("--secondary-hover-color","#5a6268"),this.fontSize=12,this._ds.notify("Hello, "+t.fullname+" it looks like there are no user settings saved for you. To adjust your user settings click your name at the top of the page next to the logout button, adjust any settings you want, then click submit to apply them."),this._services._router.navigateByUrl(this._services._router.url.split("/")[0]+"/user-settings/settings")),this.user=t}),this._deviceDet.isMobile()||this._deviceDet.isTablet()?(this._services._app.setIsDevice(!0),this.isDevice=!0):(this._services._app.setIsDevice(!1),this.isDevice=!1),this.environment.IS_PRODUCTION&&this._services._socket.subscribeBypassRoute("flagUpdateWithType","newSW").subscribe(t=>{t?(this.swFlagAlert=this._services._alert.setAlert("info","This page will reload once new version has been downloaded",0),this._services._app.setIsInvalidSW(!0),navigator.serviceWorker?navigator.serviceWorker.getRegistrations().then(t=>{t&&t.length||setTimeout(()=>{window.location.reload()},3e3)},t=>{setTimeout(()=>{window.location.reload()},3e3)}):setTimeout(()=>{window.location.reload()},3e3)):this.swFlagAlert&&(this._services._app.setIsInvalidSW(!1),this._services._alert.clearAlert(this.swFlagAlert.toastId),this.swFlagAlert=null)}),this._offline.offlineMode.subscribe(t=>{this.isOffline=t}),this._services._account.getSocketStatus().subscribe(t=>{this.socketStatus=t,this.user?(this.socketStatus===WebSocket.OPEN?(this.isConnected=!0,this.isConnecting=!1):(this.isConnected=!1,this.socketStatus===WebSocket.CONNECTING?this.isConnecting=!0:this.isConnecting=!1),this.isConnected?this.connectedHeight=0:this.connectedHeight=40):(this.isConnected=!1,this.isConnecting=!1,this.connectedHeight=40)}),this._services._socket.subscribeBypassRoute("appstatus").subscribe(t=>{this.status=t,this._services._app.setHasStatusMessage(!!this.status),this.statusHeight=this.status?40:0}),setTimeout(()=>{this.navbarMainHeight=this.el_navBarMain.nativeElement.children[0].clientHeight},100),setTimeout(()=>{this.navbarMainHeight=this.el_navBarMain.nativeElement.children[0].clientHeight},1e3),setTimeout(()=>{this.navbarMainHeight=this.el_navBarMain.nativeElement.children[0].clientHeight},5e3);let t,e=!1,n=this._storage.get("lastURL");this._services._router.events.subscribe(t=>{t.url&&t.url.startsWith("/digital-sign?")&&(this.digitalSign=!0),this.isDevice&&(n&&"/"!==n&&!e&&(""!==t.url&&"/"!==t.url||this._services._router.navigateByUrl(n)),e=!0,t.url?this._storage.set("lastURL",t.url):t.urlAfterRedirects&&this._storage.set("lastURL",t.urlAfterRedirects))}),["iPad","iPhone","iPod"].indexOf(navigator.platform)>=0&&"standalone"in window.navigator&&window.navigator.standalone&&(this.showNavigationMenu=!0),window.addEventListener("orientationchange",()=>{-90===window.orientation&&(this.orientation="landscape"),90===window.orientation&&(this.orientation="landscape"),0===window.orientation&&(this.orientation="portrait")},!0),document.addEventListener("focus",function(){document.activeElement instanceof HTMLElement&&"INPUT"===document.activeElement.nodeName&&"number"===document.activeElement.type&&(t=!0,document.addEventListener("mousewheel",handleMousewheelEvent,{passive:!0}))},!0),document.addEventListener("blur",function(){t&&(t=!1,document.removeEventListener("mousewheel",handleMousewheelEvent))},!0),window.addEventListener("dragover",t=>{(t||event).preventDefault()},!1),window.addEventListener("drop",t=>{(t||event).preventDefault()},!1)}getNavbarModuleHeight(){return this.el_navBarModule?this.el_navBarModule.nativeElement.children[0].clientHeight:0}onPushBackButton(){window.history.back()}onPushReloadButton(){window.location.reload()}onPushForwardButton(){window.history.forward()}openNav(){let t=document.getElementById("navSid"),e=document.getElementById("main_cont");t&&e&&("40px"===t.style.width&&"45px"===e.style.paddingLeft?(t.style.width="195px",e.style.paddingLeft="210px"):(t.style.width="40px",e.style.paddingLeft="45px"))}closeNav(){let t=document.getElementById("navSid"),e=document.getElementById("main_cont");t&&e&&(t.style.width="40px",e.style.paddingLeft="45px")}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:CoreComponent,deps:[{token:i1$3.DeviceDetectorService},{token:DialogService},{token:ResizeService},{token:ProviderService},{token:OfflineManagerService},{token:LocalStorageService},{token:AuthService},{token:AuthPermissionService}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"21.0.1",type:CoreComponent,isStandalone:!1,selector:"resolveio-client-lib-core",inputs:{environment:"environment",logo:"logo",navTabs:"navTabs",userHasPhoneNumber:"userHasPhoneNumber",client:"client",showNavbarModule:"showNavbarModule",publicProgram:"publicProgram",showSupport:"showSupport"},providers:[ProviderService],viewQueries:[{propertyName:"el_navBarMain",first:!0,predicate:["navBarMain"],descendants:!0,read:ElementRef,static:!0},{propertyName:"el_navBarModule",first:!0,predicate:["navBarModule"],descendants:!0,read:ElementRef,static:!0}],usesInheritance:!0,ngImport:i0,template:'<style>\n\t:root {\n\t\t--warning-color: #ffc107;\n\t\t--warning-font-color: #000000;\n\t\t--warning-hover-color: #e0a800;\n\t\t--warning-shadow-color: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n\t\t--success-color: #28a745;\n\t\t--success-font-color: #ffffff;\n\t\t--success-hover-color: #218838;\n\t\t--success-shadow-color: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n\t\t--danger-color: #dc3545;\n\t\t--danger-font-color: #ffffff;\n\t\t--danger-hover-color: #c82333;\n\t\t--danger-shadow-color: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n\t\t--info-color: #17a2b8;\n\t\t--info-font-color: #ffffff;\n\t\t--info-hover-color: #138496;\n\t\t--info-shadow-color: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n\t\t--primary-color: #007bff;\n\t\t--primary-font-color: #ffffff;\n\t\t--primary-hover-color: #0069d9;\n\t\t--primary-shadow-color: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n\t\t--secondary-color: #868e96;\n\t\t--secondary-font-color: #ffffff;\n\t\t--secondary-hover-color: #5a6268;\n\t\t--secondary-shadow-color: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n\t}\n\n\t:host ::ng-deep .btn-warning {\n\t\tcolor: var(--warning-font-color);\n\t\tbackground-color: var(--warning-color);\n\t\tborder-color: var(--warning-color);\n\t}\n\t:host ::ng-deep .btn-warning:focus,\n\t.btn-warning.focus {\n\t\tbox-shadow: var(--warning-shadow-color);\n\t}\n\t:host ::ng-deep .btn-warning:hover {\n\t\tcolor: var(--warning-font-color);\n\t\tbackground-color: var(--warning-hover-color);\n\t\tborder-color: var(--warning-hover-color);\n\t}\n\n\t:host ::ng-deep .btn-success {\n\t\tcolor: var(--success-font-color);\n\t\tbackground-color: var(--success-color);\n\t\tborder-color: var(--success-color);\n\t}\n\t:host ::ng-deep .btn-success:focus,\n\t.btn-success.focus {\n\t\tbox-shadow: var(--success-shadow-color);\n\t}\n\t:host ::ng-deep .btn-success:hover {\n\t\tcolor: var(--success-font-color);\n\t\tbackground-color: var(--success-hover-color);\n\t\tborder-color: var(--success-hover-color);\n\t}\n\n\t:host ::ng-deep .btn-danger {\n\t\tcolor: var(--danger-font-color);\n\t\tbackground-color: var(--danger-color);\n\t\tborder-color: var(--danger-color);\n\t}\n\t:host ::ng-deep .btn-danger:focus,\n\t.btn-danger.focus {\n\t\tbox-shadow: var(--danger-shadow-color);\n\t}\n\t:host ::ng-deep .btn-danger:hover {\n\t\tcolor: var(--danger-font-color);\n\t\tbackground-color: var(--danger-hover-color);\n\t\tborder-color: var(--danger-hover-color);\n\t}\n\n\t:host ::ng-deep .btn-info {\n\t\tcolor: var(--info-font-color);\n\t\tbackground-color: var(--info-color);\n\t\tborder-color: var(--info-color);\n\t}\n\t:host ::ng-deep .btn-info:focus,\n\t.btn-info.focus {\n\t\tbox-shadow: var(--info-shadow-color);\n\t}\n\t:host ::ng-deep .btn-info:hover {\n\t\tcolor: var(--info-font-color);\n\t\tbackground-color: var(--info-hover-color);\n\t\tborder-color: var(--info-hover-color);\n\t}\n\n\t:host ::ng-deep .btn-primary {\n\t\tcolor: var(--primary-font-color);\n\t\tbackground-color: var(--primary-color);\n\t\tborder-color: var(--primary-color);\n\t}\n\t:host ::ng-deep .btn-primary:focus,\n\t.btn-primary.focus {\n\t\tbox-shadow: var(--primary-shadow-color);\n\t}\n\t:host ::ng-deep .btn-primary:hover {\n\t\tcolor: var(--primary-font-color);\n\t\tbackground-color: var(--primary-hover-color);\n\t\tborder-color: var(--primary-hover-color);\n\t}\n\n\t:host ::ng-deep .btn-secondary {\n\t\tcolor: var(--secondary-font-color);\n\t\tbackground-color: var(--secondary-color);\n\t\tborder-color: var(--secondary-color);\n\t}\n\t:host ::ng-deep .btn-secondary:focus,\n\t.btn-secondary.focus {\n\t\tbox-shadow: var(--secondary-shadow-color);\n\t}\n\t:host ::ng-deep .btn-secondary:hover {\n\t\tcolor: var(--secondary-font-color);\n\t\tbackground-color: var(--secondary-hover-color);\n\t\tborder-color: var(--secondary-hover-color);\n\t}\n\n\t@media print {\n\t\t.dontPrint * {\n\t\t\tdisplay: none !important;\n\t\t}\n\n\t\t.myDivToPrintCs {\n\t\t\tbackground-color: white;\n\t\t\theight: 100%;\n\t\t\twidth: 100%;\n\t\t\tfont-size: 12px;\n\t\t\tline-height: 12px;\n\t\t\tpage-break-after: avoid;\n\t\t\tdisplay: initial;\n\t\t}\n\n\t\t.removeOverflow {\n\t\t\toverflow-y: hidden !important;\n\t\t\theight: 100% !important;\n\t\t}\n\t}\n\n\t.hideThis {\n\t\tdisplay: none !important;\n\t}\n\n\t.navSidbar {\n\t\twidth: 0px;\n\t\tposition: fixed;\n\t\tz-index: 1;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\tbackground-color: var(--navbar-bg-color, rgba(var(--bs-dark-rgb, 33, 37, 41), 1)) !important;\n\t\toverflow: hidden;\n\t\ttransition: 0.5s;\n\t\tpadding-top: 0px;\n\t}\n\n\t.navSidbar a {\n\t\tpadding: 8px 8px 8px 32px;\n\t\ttext-decoration: none;\n\t\tfont-size: 25px;\n\t\tcolor: #818181;\n\t\tdisplay: block;\n\t\ttransition: 0.3s;\n\t}\n\n\t.navSidbar a:hover {\n\t\tcolor: #f1f1f1;\n\t}\n\n\t.openbtn {\n\t\tbackground-color: var(--navbar-bg-color, rgba(var(--bs-dark-rgb, 33, 37, 41), 1)) !important;\n\t\tborder: none;\n\t\tcolor: #fff;\n\t\tpadding: 5px 20px;\n\t\tfont-size: 18px;\n\t\tright: 0;\n\t\ttop: 0px;\n\t\tposition: absolute;\n\t\tz-index: 999999;\n\t\tcursor: pointer;\n\t\tfloat: right;\n\t\theight: 100%;\n\t}\n\n\t.openbtn span {\n\t\tfont-size: 20px;\n\t\tdisplay: block;\n\t\theight: auto;\n\t\twidth: auto;\n\t\ttext-align: center;\n\t\tposition: absolute;\n\t\tleft: 50%;\n\t\ttop: 50%;\n\t\ttransform: translate(-50%, -50%) rotate(-90deg);\n\t\tmargin-top: -55px;\n\t\tletter-spacing: 30px;\n\t}\n\t#main_cont {\n\t\ttransition: padding-left 0.5s;\n\t}\n\n\t.sid_inr {\n\t\tpadding-left: 25px;\n\t}\n\n\t@keyframes shimmer {\n\t\t0%,\n\t\t50% {\n\t\t\tbackground-position: 120% 0;\n\t\t}\n\t\t100% {\n\t\t\tbackground-position: -80% 0;\n\t\t}\n\t}\n\n\t.shimmer::before {\n\t\tcontent: \'\';\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tright: 0;\n\t\tbottom: 0;\n\t\tleft: 0;\n\t\tbackground: linear-gradient(-75deg, rgba(255, 255, 255, 0) 40%, rgba(255, 255, 255, 0.7) 50%, rgba(255, 255, 255, 0) 60%);\n\t\tbackground-size: 200% 100%;\n\t\tanimation: shimmer 5s linear infinite;\n\t\tanimation-fill-mode: forwards;\n\t\tz-index: 11;\n\t}\n</style>\n@if (isDevice) {\n\t<link rel="stylesheet" type="text/css" href="/assets/css/tablet.css" />\n}\n<div #shell>\n\t@if (user && (!isConnected || isOffline) && !publicProgram && !digitalSign) {\n\t\t<div style="height: 40px; text-align: center; vertical-align: middle; background-color: red; color: white">\n\t\t\t<div style="padding-top: 9px; padding-bottom: 9px" class="shimmer">*** OFFLINE MODE ***</div>\n\t\t</div>\n\t}\n\t@if (!user && (!isConnected || isOffline) && !publicProgram && !digitalSign) {\n\t\t<div style="height: 40px; text-align: center; vertical-align: middle; background-color: red; color: white">\n\t\t\t<div style="padding-top: 9px; padding-bottom: 9px" class="shimmer">*** PLEASE LOGIN ***</div>\n\t\t</div>\n\t}\n\t@if (status) {\n\t\t<div style="height: 40px; text-align: center; vertical-align: middle; background-color: red; color: white">\n\t\t\t<div style="padding-top: 9px; padding-bottom: 9px" class="shimmer">*** {{ status.message }} ***</div>\n\t\t</div>\n\t}\n\t@if (fullScreen) {\n\t\t<router-outlet name="jobboardfsoutlet"></router-outlet>\n\t}\n\t<div [ngClass]="[\'container-fluid\', fullScreen ? \'hideThis\' : \'\']" [style.font-size.px]="fontSize">\n\t\t<div class="dontPrint">\n\t\t\t<navbar-main style="width: 100%" tourAnchor="navBarMain" #navBarMain [logo]="logo" [showSupport]="showSupport" [navTabs]="navTabs" [fontSize]="fontSize" [publicProgram]="publicProgram || digitalSign" [digitalSign]="digitalSign"></navbar-main>\n\t\t</div>\n\t\t<ng-template ngbModalContainer></ng-template>\n\t\t<div class="row">\n\t\t\t@if (showNavbarModule && !digitalSign) {\n\t\t\t\t<div id="navSid" [ngClass]="[\'dontPrint\', windowSizeWidth > 1200 && collapsableMenu ? \'navSidbar\' : \'col-xl-1\']" [style.width]="windowSizeWidth > 1200 && collapsableMenu ? \'40px\' : windowSizeWidth > 1200 ? \'\' : \'100%\'" [style.margin-top.px]="windowSizeWidth > 1200 && collapsableMenu ? navbarMainHeight + statusHeight + connectedHeight : 0">\n\t\t\t\t\t@if (windowSizeWidth > 1200 && collapsableMenu) {\n\t\t\t\t\t\t<div class="openbtn" (mouseenter)="openNav()"><span>MENU</span></div>\n\t\t\t\t\t}\n\t\t\t\t\t<div [ngClass]="windowSizeWidth > 1200 && collapsableMenu ? \'sid_inr\' : \'\'">\n\t\t\t\t\t\t<navbar-module #navBarModule tourAnchor="navBarModule" [sideNavWidth]="windowSizeWidth > 1200 && collapsableMenu ? \'90%\' : \'auto\'" [sideNavHeight]="windowSizeWidth > 1200 ? windowSizeHeight - navbarMainHeight - statusHeight - connectedHeight - (showNavigationMenu ? 54 + getNavbarModuleHeight() : 0) - (!isDevice || (isDevice && showNavigationMenu) ? 20 : 0) - 5 : \'\'"></navbar-module>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t<div [id]="windowSizeWidth > 1200 ? \'main_cont\' : \'main_cont_mobile\'" [ngClass]="[windowSizeWidth > 1200 && collapsableMenu ? \'col-xl-12\' : \'col-xl-11\']" [style.padding-left]="windowSizeWidth > 1200 && collapsableMenu && showNavbarModule ? 45 + \'px\' : null" (mouseenter)="windowSizeWidth > 1200 && collapsableMenu && showNavbarModule ? closeNav() : null" style="padding-top: 5px">\n\t\t\t\t<div style="-webkit-overflow-scrolling: touch" [style.overflow-y]="isDevice && !showNavigationMenu ? \'initial\' : \'scroll\'" [style.height.px]="windowSizeHeight - (isDevice && windowSizeWidth <= 1200 && !showNavigationMenu ? (getNavbarModuleHeight() > 100 ? 0 : getNavbarModuleHeight()) : 0) - navbarMainHeight - (!publicProgram && !digitalSign ? statusHeight : 0) - (!publicProgram && !digitalSign ? connectedHeight : 0) - (isDevice && showNavigationMenu ? 54 + (getNavbarModuleHeight() > 100 ? 0 : getNavbarModuleHeight()) : 0) - (!isDevice || (isDevice && showNavigationMenu) ? 20 : 0) - 5" class="removeOverflow">\n\t\t\t\t\t<router-outlet></router-outlet>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t@if (isDevice && showNavigationMenu) {\n\t\t\t<div style="height: 54px; background-color: lightgray; margin-left: -15px; margin-right: -15px" class="dontPrint">\n\t\t\t\t<table style="width: 100%">\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td style="text-align: center">\n\t\t\t\t\t\t\t<button type="button" class="btn" style="background-color: lightgray" (click)="onPushBackButton()"><i class="fa fa-arrow-left" style="color: black; font-size: 20px"></i></button>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t\t<td style="text-align: center">\n\t\t\t\t\t\t\t<button type="button" class="btn" style="background-color: lightgray" (click)="onPushReloadButton()"><i class="fa fa-refresh" style="color: black; font-size: 20px"></i></button>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t\t<td style="text-align: center">\n\t\t\t\t\t\t\t<button type="button" class="btn" style="background-color: lightgray" (click)="onPushForwardButton()"><i class="fa fa-arrow-right" style="color: black; font-size: 20px"></i></button>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</table>\n\t\t\t</div>\n\t\t}\n\t\t@if (!isDevice) {\n\t\t\t<div style="text-align: center; height: 20px; font-style: italic; font-weight: bold; background-color: lightgray; margin-left: -15px; margin-right: -15px">© {{ year }} RESOLVEIO ALL RIGHTS RESERVED</div>\n\t\t}\n\t</div>\n</div>\n',styles:[':root{--warning-color: #ffc107;--warning-font-color: #000000;--warning-hover-color: #e0a800;--warning-shadow-color: 0 0 0 .2rem rgba(222, 170, 12, .5);--success-color: #28a745;--success-font-color: #ffffff;--success-hover-color: #218838;--success-shadow-color: 0 0 0 .2rem rgba(72, 180, 97, .5);--danger-color: #dc3545;--danger-font-color: #ffffff;--danger-hover-color: #c82333;--danger-shadow-color: 0 0 0 .2rem rgba(225, 83, 97, .5);--info-color: #17a2b8;--info-font-color: #ffffff;--info-hover-color: #138496;--info-shadow-color: 0 0 0 .2rem rgba(58, 176, 195, .5);--primary-color: #007bff;--primary-font-color: #ffffff;--primary-hover-color: #0069d9;--primary-shadow-color: 0 0 0 .2rem rgba(38, 143, 255, .5);--secondary-color: #868e96;--secondary-font-color: #ffffff;--secondary-hover-color: #5a6268;--secondary-shadow-color: 0 0 0 .2rem rgba(130, 138, 145, .5)}:host ::ng-deep .btn-warning{color:var(--warning-font-color);background-color:var(--warning-color);border-color:var(--warning-color)}:host ::ng-deep .btn-warning:focus,.btn-warning.focus{box-shadow:var(--warning-shadow-color)}:host ::ng-deep .btn-warning:hover{color:var(--warning-font-color);background-color:var(--warning-hover-color);border-color:var(--warning-hover-color)}:host ::ng-deep .btn-success{color:var(--success-font-color);background-color:var(--success-color);border-color:var(--success-color)}:host ::ng-deep .btn-success:focus,.btn-success.focus{box-shadow:var(--success-shadow-color)}:host ::ng-deep .btn-success:hover{color:var(--success-font-color);background-color:var(--success-hover-color);border-color:var(--success-hover-color)}:host ::ng-deep .btn-danger{color:var(--danger-font-color);background-color:var(--danger-color);border-color:var(--danger-color)}:host ::ng-deep .btn-danger:focus,.btn-danger.focus{box-shadow:var(--danger-shadow-color)}:host ::ng-deep .btn-danger:hover{color:var(--danger-font-color);background-color:var(--danger-hover-color);border-color:var(--danger-hover-color)}:host ::ng-deep .btn-info{color:var(--info-font-color);background-color:var(--info-color);border-color:var(--info-color)}:host ::ng-deep .btn-info:focus,.btn-info.focus{box-shadow:var(--info-shadow-color)}:host ::ng-deep .btn-info:hover{color:var(--info-font-color);background-color:var(--info-hover-color);border-color:var(--info-hover-color)}:host ::ng-deep .btn-primary{color:var(--primary-font-color);background-color:var(--primary-color);border-color:var(--primary-color)}:host ::ng-deep .btn-primary:focus,.btn-primary.focus{box-shadow:var(--primary-shadow-color)}:host ::ng-deep .btn-primary:hover{color:var(--primary-font-color);background-color:var(--primary-hover-color);border-color:var(--primary-hover-color)}:host ::ng-deep .btn-secondary{color:var(--secondary-font-color);background-color:var(--secondary-color);border-color:var(--secondary-color)}:host ::ng-deep .btn-secondary:focus,.btn-secondary.focus{box-shadow:var(--secondary-shadow-color)}:host ::ng-deep .btn-secondary:hover{color:var(--secondary-font-color);background-color:var(--secondary-hover-color);border-color:var(--secondary-hover-color)}@media print{.dontPrint *{display:none!important}.myDivToPrintCs{background-color:#fff;height:100%;width:100%;font-size:12px;line-height:12px;page-break-after:avoid;display:initial}.removeOverflow{overflow-y:hidden!important;height:100%!important}}.hideThis{display:none!important}.navSidbar{width:0px;position:fixed;z-index:1;top:0;left:0;background-color:var(--navbar-bg-color, rgba(var(--bs-dark-rgb, 33, 37, 41), 1))!important;overflow:hidden;transition:.5s;padding-top:0}.navSidbar a{padding:8px 8px 8px 32px;text-decoration:none;font-size:25px;color:#818181;display:block;transition:.3s}.navSidbar a:hover{color:#f1f1f1}.openbtn{background-color:var(--navbar-bg-color, rgba(var(--bs-dark-rgb, 33, 37, 41), 1))!important;border:none;color:#fff;padding:5px 20px;font-size:18px;right:0;top:0;position:absolute;z-index:999999;cursor:pointer;float:right;height:100%}.openbtn span{font-size:20px;display:block;height:auto;width:auto;text-align:center;position:absolute;left:50%;top:50%;transform:translate(-50%,-50%) rotate(-90deg);margin-top:-55px;letter-spacing:30px}#main_cont{transition:padding-left .5s}.sid_inr{padding-left:25px}@keyframes shimmer{0%,50%{background-position:120% 0}to{background-position:-80% 0}}.shimmer:before{content:"";position:absolute;inset:0;background:linear-gradient(-75deg,#fff0 40%,#ffffffb3,#fff0 60%);background-size:200% 100%;animation:shimmer 5s linear infinite;animation-fill-mode:forwards;z-index:11}\n'],dependencies:[{kind:"directive",type:i1$1.RouterOutlet,selector:"router-outlet",inputs:["name","routerOutletData"],outputs:["activate","deactivate","attach","detach"],exportAs:["outlet"]},{kind:"directive",type:i7.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]},{kind:"component",type:NavbarMainComponent,selector:"navbar-main",inputs:["logo","navTabs","fontSize","publicProgram","digitalSign","showSupport"]},{kind:"component",type:NavbarModuleComponent,selector:"navbar-module",inputs:["sideNavHeight","sideNavWidth"]}]})}function handleMousewheelEvent(){document.activeElement.blur()}function hexToRGB$1(t,e){let n=parseInt(t.slice(1,3),16),o=parseInt(t.slice(3,5),16),r=parseInt(t.slice(5,7),16);return e?"rgba("+n+", "+o+", "+r+", "+e+")":"rgb("+n+", "+o+", "+r+")"}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:CoreComponent,decorators:[{type:Component,args:[{providers:[ProviderService],selector:"resolveio-client-lib-core",standalone:!1,template:'<style>\n\t:root {\n\t\t--warning-color: #ffc107;\n\t\t--warning-font-color: #000000;\n\t\t--warning-hover-color: #e0a800;\n\t\t--warning-shadow-color: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n\t\t--success-color: #28a745;\n\t\t--success-font-color: #ffffff;\n\t\t--success-hover-color: #218838;\n\t\t--success-shadow-color: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n\t\t--danger-color: #dc3545;\n\t\t--danger-font-color: #ffffff;\n\t\t--danger-hover-color: #c82333;\n\t\t--danger-shadow-color: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n\t\t--info-color: #17a2b8;\n\t\t--info-font-color: #ffffff;\n\t\t--info-hover-color: #138496;\n\t\t--info-shadow-color: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n\t\t--primary-color: #007bff;\n\t\t--primary-font-color: #ffffff;\n\t\t--primary-hover-color: #0069d9;\n\t\t--primary-shadow-color: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n\t\t--secondary-color: #868e96;\n\t\t--secondary-font-color: #ffffff;\n\t\t--secondary-hover-color: #5a6268;\n\t\t--secondary-shadow-color: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n\t}\n\n\t:host ::ng-deep .btn-warning {\n\t\tcolor: var(--warning-font-color);\n\t\tbackground-color: var(--warning-color);\n\t\tborder-color: var(--warning-color);\n\t}\n\t:host ::ng-deep .btn-warning:focus,\n\t.btn-warning.focus {\n\t\tbox-shadow: var(--warning-shadow-color);\n\t}\n\t:host ::ng-deep .btn-warning:hover {\n\t\tcolor: var(--warning-font-color);\n\t\tbackground-color: var(--warning-hover-color);\n\t\tborder-color: var(--warning-hover-color);\n\t}\n\n\t:host ::ng-deep .btn-success {\n\t\tcolor: var(--success-font-color);\n\t\tbackground-color: var(--success-color);\n\t\tborder-color: var(--success-color);\n\t}\n\t:host ::ng-deep .btn-success:focus,\n\t.btn-success.focus {\n\t\tbox-shadow: var(--success-shadow-color);\n\t}\n\t:host ::ng-deep .btn-success:hover {\n\t\tcolor: var(--success-font-color);\n\t\tbackground-color: var(--success-hover-color);\n\t\tborder-color: var(--success-hover-color);\n\t}\n\n\t:host ::ng-deep .btn-danger {\n\t\tcolor: var(--danger-font-color);\n\t\tbackground-color: var(--danger-color);\n\t\tborder-color: var(--danger-color);\n\t}\n\t:host ::ng-deep .btn-danger:focus,\n\t.btn-danger.focus {\n\t\tbox-shadow: var(--danger-shadow-color);\n\t}\n\t:host ::ng-deep .btn-danger:hover {\n\t\tcolor: var(--danger-font-color);\n\t\tbackground-color: var(--danger-hover-color);\n\t\tborder-color: var(--danger-hover-color);\n\t}\n\n\t:host ::ng-deep .btn-info {\n\t\tcolor: var(--info-font-color);\n\t\tbackground-color: var(--info-color);\n\t\tborder-color: var(--info-color);\n\t}\n\t:host ::ng-deep .btn-info:focus,\n\t.btn-info.focus {\n\t\tbox-shadow: var(--info-shadow-color);\n\t}\n\t:host ::ng-deep .btn-info:hover {\n\t\tcolor: var(--info-font-color);\n\t\tbackground-color: var(--info-hover-color);\n\t\tborder-color: var(--info-hover-color);\n\t}\n\n\t:host ::ng-deep .btn-primary {\n\t\tcolor: var(--primary-font-color);\n\t\tbackground-color: var(--primary-color);\n\t\tborder-color: var(--primary-color);\n\t}\n\t:host ::ng-deep .btn-primary:focus,\n\t.btn-primary.focus {\n\t\tbox-shadow: var(--primary-shadow-color);\n\t}\n\t:host ::ng-deep .btn-primary:hover {\n\t\tcolor: var(--primary-font-color);\n\t\tbackground-color: var(--primary-hover-color);\n\t\tborder-color: var(--primary-hover-color);\n\t}\n\n\t:host ::ng-deep .btn-secondary {\n\t\tcolor: var(--secondary-font-color);\n\t\tbackground-color: var(--secondary-color);\n\t\tborder-color: var(--secondary-color);\n\t}\n\t:host ::ng-deep .btn-secondary:focus,\n\t.btn-secondary.focus {\n\t\tbox-shadow: var(--secondary-shadow-color);\n\t}\n\t:host ::ng-deep .btn-secondary:hover {\n\t\tcolor: var(--secondary-font-color);\n\t\tbackground-color: var(--secondary-hover-color);\n\t\tborder-color: var(--secondary-hover-color);\n\t}\n\n\t@media print {\n\t\t.dontPrint * {\n\t\t\tdisplay: none !important;\n\t\t}\n\n\t\t.myDivToPrintCs {\n\t\t\tbackground-color: white;\n\t\t\theight: 100%;\n\t\t\twidth: 100%;\n\t\t\tfont-size: 12px;\n\t\t\tline-height: 12px;\n\t\t\tpage-break-after: avoid;\n\t\t\tdisplay: initial;\n\t\t}\n\n\t\t.removeOverflow {\n\t\t\toverflow-y: hidden !important;\n\t\t\theight: 100% !important;\n\t\t}\n\t}\n\n\t.hideThis {\n\t\tdisplay: none !important;\n\t}\n\n\t.navSidbar {\n\t\twidth: 0px;\n\t\tposition: fixed;\n\t\tz-index: 1;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\tbackground-color: var(--navbar-bg-color, rgba(var(--bs-dark-rgb, 33, 37, 41), 1)) !important;\n\t\toverflow: hidden;\n\t\ttransition: 0.5s;\n\t\tpadding-top: 0px;\n\t}\n\n\t.navSidbar a {\n\t\tpadding: 8px 8px 8px 32px;\n\t\ttext-decoration: none;\n\t\tfont-size: 25px;\n\t\tcolor: #818181;\n\t\tdisplay: block;\n\t\ttransition: 0.3s;\n\t}\n\n\t.navSidbar a:hover {\n\t\tcolor: #f1f1f1;\n\t}\n\n\t.openbtn {\n\t\tbackground-color: var(--navbar-bg-color, rgba(var(--bs-dark-rgb, 33, 37, 41), 1)) !important;\n\t\tborder: none;\n\t\tcolor: #fff;\n\t\tpadding: 5px 20px;\n\t\tfont-size: 18px;\n\t\tright: 0;\n\t\ttop: 0px;\n\t\tposition: absolute;\n\t\tz-index: 999999;\n\t\tcursor: pointer;\n\t\tfloat: right;\n\t\theight: 100%;\n\t}\n\n\t.openbtn span {\n\t\tfont-size: 20px;\n\t\tdisplay: block;\n\t\theight: auto;\n\t\twidth: auto;\n\t\ttext-align: center;\n\t\tposition: absolute;\n\t\tleft: 50%;\n\t\ttop: 50%;\n\t\ttransform: translate(-50%, -50%) rotate(-90deg);\n\t\tmargin-top: -55px;\n\t\tletter-spacing: 30px;\n\t}\n\t#main_cont {\n\t\ttransition: padding-left 0.5s;\n\t}\n\n\t.sid_inr {\n\t\tpadding-left: 25px;\n\t}\n\n\t@keyframes shimmer {\n\t\t0%,\n\t\t50% {\n\t\t\tbackground-position: 120% 0;\n\t\t}\n\t\t100% {\n\t\t\tbackground-position: -80% 0;\n\t\t}\n\t}\n\n\t.shimmer::before {\n\t\tcontent: \'\';\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tright: 0;\n\t\tbottom: 0;\n\t\tleft: 0;\n\t\tbackground: linear-gradient(-75deg, rgba(255, 255, 255, 0) 40%, rgba(255, 255, 255, 0.7) 50%, rgba(255, 255, 255, 0) 60%);\n\t\tbackground-size: 200% 100%;\n\t\tanimation: shimmer 5s linear infinite;\n\t\tanimation-fill-mode: forwards;\n\t\tz-index: 11;\n\t}\n</style>\n@if (isDevice) {\n\t<link rel="stylesheet" type="text/css" href="/assets/css/tablet.css" />\n}\n<div #shell>\n\t@if (user && (!isConnected || isOffline) && !publicProgram && !digitalSign) {\n\t\t<div style="height: 40px; text-align: center; vertical-align: middle; background-color: red; color: white">\n\t\t\t<div style="padding-top: 9px; padding-bottom: 9px" class="shimmer">*** OFFLINE MODE ***</div>\n\t\t</div>\n\t}\n\t@if (!user && (!isConnected || isOffline) && !publicProgram && !digitalSign) {\n\t\t<div style="height: 40px; text-align: center; vertical-align: middle; background-color: red; color: white">\n\t\t\t<div style="padding-top: 9px; padding-bottom: 9px" class="shimmer">*** PLEASE LOGIN ***</div>\n\t\t</div>\n\t}\n\t@if (status) {\n\t\t<div style="height: 40px; text-align: center; vertical-align: middle; background-color: red; color: white">\n\t\t\t<div style="padding-top: 9px; padding-bottom: 9px" class="shimmer">*** {{ status.message }} ***</div>\n\t\t</div>\n\t}\n\t@if (fullScreen) {\n\t\t<router-outlet name="jobboardfsoutlet"></router-outlet>\n\t}\n\t<div [ngClass]="[\'container-fluid\', fullScreen ? \'hideThis\' : \'\']" [style.font-size.px]="fontSize">\n\t\t<div class="dontPrint">\n\t\t\t<navbar-main style="width: 100%" tourAnchor="navBarMain" #navBarMain [logo]="logo" [showSupport]="showSupport" [navTabs]="navTabs" [fontSize]="fontSize" [publicProgram]="publicProgram || digitalSign" [digitalSign]="digitalSign"></navbar-main>\n\t\t</div>\n\t\t<ng-template ngbModalContainer></ng-template>\n\t\t<div class="row">\n\t\t\t@if (showNavbarModule && !digitalSign) {\n\t\t\t\t<div id="navSid" [ngClass]="[\'dontPrint\', windowSizeWidth > 1200 && collapsableMenu ? \'navSidbar\' : \'col-xl-1\']" [style.width]="windowSizeWidth > 1200 && collapsableMenu ? \'40px\' : windowSizeWidth > 1200 ? \'\' : \'100%\'" [style.margin-top.px]="windowSizeWidth > 1200 && collapsableMenu ? navbarMainHeight + statusHeight + connectedHeight : 0">\n\t\t\t\t\t@if (windowSizeWidth > 1200 && collapsableMenu) {\n\t\t\t\t\t\t<div class="openbtn" (mouseenter)="openNav()"><span>MENU</span></div>\n\t\t\t\t\t}\n\t\t\t\t\t<div [ngClass]="windowSizeWidth > 1200 && collapsableMenu ? \'sid_inr\' : \'\'">\n\t\t\t\t\t\t<navbar-module #navBarModule tourAnchor="navBarModule" [sideNavWidth]="windowSizeWidth > 1200 && collapsableMenu ? \'90%\' : \'auto\'" [sideNavHeight]="windowSizeWidth > 1200 ? windowSizeHeight - navbarMainHeight - statusHeight - connectedHeight - (showNavigationMenu ? 54 + getNavbarModuleHeight() : 0) - (!isDevice || (isDevice && showNavigationMenu) ? 20 : 0) - 5 : \'\'"></navbar-module>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t<div [id]="windowSizeWidth > 1200 ? \'main_cont\' : \'main_cont_mobile\'" [ngClass]="[windowSizeWidth > 1200 && collapsableMenu ? \'col-xl-12\' : \'col-xl-11\']" [style.padding-left]="windowSizeWidth > 1200 && collapsableMenu && showNavbarModule ? 45 + \'px\' : null" (mouseenter)="windowSizeWidth > 1200 && collapsableMenu && showNavbarModule ? closeNav() : null" style="padding-top: 5px">\n\t\t\t\t<div style="-webkit-overflow-scrolling: touch" [style.overflow-y]="isDevice && !showNavigationMenu ? \'initial\' : \'scroll\'" [style.height.px]="windowSizeHeight - (isDevice && windowSizeWidth <= 1200 && !showNavigationMenu ? (getNavbarModuleHeight() > 100 ? 0 : getNavbarModuleHeight()) : 0) - navbarMainHeight - (!publicProgram && !digitalSign ? statusHeight : 0) - (!publicProgram && !digitalSign ? connectedHeight : 0) - (isDevice && showNavigationMenu ? 54 + (getNavbarModuleHeight() > 100 ? 0 : getNavbarModuleHeight()) : 0) - (!isDevice || (isDevice && showNavigationMenu) ? 20 : 0) - 5" class="removeOverflow">\n\t\t\t\t\t<router-outlet></router-outlet>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t@if (isDevice && showNavigationMenu) {\n\t\t\t<div style="height: 54px; background-color: lightgray; margin-left: -15px; margin-right: -15px" class="dontPrint">\n\t\t\t\t<table style="width: 100%">\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td style="text-align: center">\n\t\t\t\t\t\t\t<button type="button" class="btn" style="background-color: lightgray" (click)="onPushBackButton()"><i class="fa fa-arrow-left" style="color: black; font-size: 20px"></i></button>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t\t<td style="text-align: center">\n\t\t\t\t\t\t\t<button type="button" class="btn" style="background-color: lightgray" (click)="onPushReloadButton()"><i class="fa fa-refresh" style="color: black; font-size: 20px"></i></button>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t\t<td style="text-align: center">\n\t\t\t\t\t\t\t<button type="button" class="btn" style="background-color: lightgray" (click)="onPushForwardButton()"><i class="fa fa-arrow-right" style="color: black; font-size: 20px"></i></button>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</table>\n\t\t\t</div>\n\t\t}\n\t\t@if (!isDevice) {\n\t\t\t<div style="text-align: center; height: 20px; font-style: italic; font-weight: bold; background-color: lightgray; margin-left: -15px; margin-right: -15px">© {{ year }} RESOLVEIO ALL RIGHTS RESERVED</div>\n\t\t}\n\t</div>\n</div>\n'}]}],ctorParameters:()=>[{type:i1$3.DeviceDetectorService},{type:DialogService},{type:ResizeService},{type:ProviderService},{type:OfflineManagerService},{type:LocalStorageService},{type:AuthService},{type:AuthPermissionService}],propDecorators:{environment:[{type:Input,args:["environment"]}],logo:[{type:Input,args:["logo"]}],navTabs:[{type:Input,args:["navTabs"]}],userHasPhoneNumber:[{type:Input,args:["userHasPhoneNumber"]}],client:[{type:Input,args:["client"]}],showNavbarModule:[{type:Input,args:["showNavbarModule"]}],publicProgram:[{type:Input,args:["publicProgram"]}],showSupport:[{type:Input,args:["showSupport"]}],el_navBarMain:[{type:ViewChild,args:["navBarMain",{read:ElementRef,static:!0}]}],el_navBarModule:[{type:ViewChild,args:["navBarModule",{read:ElementRef,static:!0}]}]}});class HtmlDiffViewerComponent{payloadStr="";leftTextarea;rightTextarea;diffContent;leftContent="";rightContent="";diffLines=[];visibleDiffLines=[];showFullDiff=!1;constructor(){}ngAfterViewInit(){if(this.payloadStr){let t=JSON.parse(this.payloadStr,dateReviver);t[0]&&t[2]&&(this.leftContent=JSON.stringify(t[0],null,2),this.rightContent=JSON.stringify(t[2],null,2),this.rightContent.includes("$")&&(this.rightContent=JSON.stringify(applyMongoUpdate(t[0],t[2]),null,2)),this.generateDiff())}}toggleDiffView(){this.showFullDiff=!this.showFullDiff,this.updateVisibleLines()}updateVisibleLines(){if(this.showFullDiff)return void(this.visibleDiffLines=[...this.diffLines.map((t,e)=>(t.leftNumber=e+1,t))]);const t=new Set,e=new Set;this.diffLines.forEach((e,n)=>{"added"!==e.type&&"removed"!==e.type&&"changed"!==e.type||t.add(n)});const n=new Set;t.forEach(t=>{let e=t,o=0;const r=[];for(;e>=0;){const t=this.diffLines[e],i=t.leftContent||t.rightContent||"";i.trim().endsWith("}")||i.trim().endsWith("]")?o++:(i.trim().endsWith("{")||i.trim().endsWith("["))&&(o>0?o--:(n.add(e),r.push(e))),e--}r.forEach(t=>{let e=t,o=1;for(;e<this.diffLines.length&&o>0;){e++;const t=this.diffLines[e];if(!t)break;const r=t.leftContent||t.rightContent||"";r.trim().endsWith("{")||r.trim().endsWith("[")?o++:(r.trim().endsWith("}")||r.trim().endsWith("]"))&&(o--,0===o&&n.add(e))}})});const o=new Set([...t,...n]);o.forEach(t=>{for(let n=Math.max(0,t-1);n<=Math.min(this.diffLines.length-1,t+1);n++)e.add(n)}),this.visibleDiffLines=this.diffLines.map((t,n)=>({...t,isContext:e.has(n)&&!o.has(n),hidden:!(o.has(n)||e.has(n))}))}generateDiff(){try{const t=JSON.parse(this.leftContent),e=JSON.parse(this.rightContent),n=this.normalizeValue(t),o=this.normalizeValue(e),r=this.compareValues(null,n,o,0);this.diffLines=this.assignLineNumbers(r),this.updateVisibleLines(),this.setupScrollSync()}catch(t){console.error("Error generating diff:",t),this.diffLines=[],this.visibleDiffLines=[]}}normalizeValue(t){if(Array.isArray(t)){if(0===t.length)return t;if("object"==typeof t[0]&&null!==t[0])return t.map(t=>this.normalizeValue(t));if("string"==typeof t[0]||"number"==typeof t[0]||"boolean"==typeof t[0]){const e=[...t];return e.sort((t,e)=>t<e?-1:t>e?1:0),e}return t}if(t&&"object"==typeof t){const e={};return Object.keys(t).sort().forEach(n=>{e[n]=this.normalizeValue(t[n])}),e}return t}compareValues(t,e,n,o){const r=[],i=this.getType(e),a=this.getType(n);if(void 0===e&&void 0!==n)return this.isComplexType(a)?(r.push(this.makeLine("added","",this.openingBrace(t,a,o))),r.push(...this.renderComplex(n,"added",o+1,!0)),r.push(this.makeLine("added","",this.closingBrace(a,o)))):r.push(this.makeLine("added","",this.renderPrimitive(t,n,o))),r;if(void 0!==e&&void 0===n)return this.isComplexType(i)?(r.push(this.makeLine("removed",this.openingBrace(t,i,o),"")),r.push(...this.renderComplex(e,"removed",o+1,!1)),r.push(this.makeLine("removed",this.closingBrace(i,o),""))):r.push(this.makeLine("removed",this.renderPrimitive(t,e,o),"")),r;if(i!==a||"object"!==i&&"array"!==i)this.isEqual(e,n)?r.push(this.makeLine("unchanged",this.renderPrimitive(t,e,o),this.renderPrimitive(t,n,o))):r.push(this.makeLine("changed",this.renderPrimitive(t,e,o),this.renderPrimitive(t,n,o)));else{if(r.push(this.makeLine("unchanged",this.openingBrace(t,i,o),this.openingBrace(t,a,o))),"object"===i){const t=new Set([...Object.keys(e),...Object.keys(n)]),i=Array.from(t).sort();for(const t of i){const i=e[t],a=n[t];r.push(...this.compareValues(t,i,a,o+1))}}else{const t=Math.max(e.length,n.length);let i=!1;for(let o=0;o<t;o++){const t=e[o],r=n[o];if(!this.isEqual(t,r)){i=!0;break}}if(i)for(let i=0;i<t;i++){const t=e[i],a=n[i];this.isEqual(t,a)||(void 0===t&&void 0!==a?this.isComplexType(this.getType(a))?(r.push(this.makeLine("added","",this.openingBrace(`[${i}]`,this.getType(a),o+1))),r.push(...this.renderComplex(a,"added",o+2,!0)),r.push(this.makeLine("added","",this.closingBrace(this.getType(a),o+1)))):r.push(this.makeLine("added","",this.renderPrimitive(`[${i}]`,a,o+1))):void 0!==t&&void 0===a?this.isComplexType(this.getType(t))?(r.push(this.makeLine("removed",this.openingBrace(`[${i}]`,this.getType(t),o+1),"")),r.push(...this.renderComplex(t,"removed",o+2,!1)),r.push(this.makeLine("removed",this.closingBrace(this.getType(t),o+1),""))):r.push(this.makeLine("removed",this.renderPrimitive(`[${i}]`,t,o+1),"")):r.push(...this.compareValues(`[${i}]`,t,a,o+1)))}else for(let t=0;t<e.length;t++)r.push(...this.compareValues(`[${t}]`,e[t],n[t],o+1))}r.push(this.makeLine("unchanged",this.closingBrace(i,o),this.closingBrace(a,o)))}return r}isComplexType(t){return"object"===t||"array"===t}renderComplex(t,e,n,o){const r=[],i=this.getType(t);if("object"===i){Object.keys(t).sort().forEach(i=>{const a=t[i],s=this.getType(a);this.isComplexType(s)?(r.push(this.makeLine(e,o?"":this.openingBrace(i,s,n),o?this.openingBrace(i,s,n):"")),r.push(...this.renderComplex(a,e,n+1,o)),r.push(this.makeLine(e,o?"":this.closingBrace(s,n),o?this.closingBrace(s,n):""))):r.push(this.makeLine(e,o?"":this.renderPrimitive(i,a,n),o?this.renderPrimitive(i,a,n):""))})}else if("array"===i)for(let i=0;i<t.length;i++){const a=t[i],s=this.getType(a);this.isComplexType(s)?(r.push(this.makeLine(e,o?"":this.openingBrace(`[${i}]`,s,n),o?this.openingBrace(`[${i}]`,s,n):"")),r.push(...this.renderComplex(a,e,n+1,o)),r.push(this.makeLine(e,o?"":this.closingBrace(s,n),o?this.closingBrace(s,n):""))):r.push(this.makeLine(e,o?"":this.renderPrimitive(`[${i}]`,a,n),o?this.renderPrimitive(`[${i}]`,a,n):""))}else r.push(this.makeLine(e,o?"":this.renderPrimitive(null,t,n),o?this.renderPrimitive(null,t,n):""));return r}getType(t){return null===t?"null":Array.isArray(t)?"array":"object"==typeof t?"object":"primitive"}isEqual(t,e){return JSON.stringify(t)===JSON.stringify(e)}makeLine(t,e,n){return{type:t,leftContent:e,rightContent:n}}openingBrace(t,e,n){const o=this.getIndentString(n),r="array"===e?"[":"{";return t?t.startsWith("[")?`${o}${t}: ${r}`:`${o}"${t}": ${r}`:`${o}${r}`}closingBrace(t,e){return`${this.getIndentString(e)}${"array"===t?"]":"}"}`}renderPrimitive(t,e,n){const o=this.getIndentString(n),r=JSON.stringify(e);return t?t.startsWith("[")?`${o}${t}: ${r}`:`${o}"${t}": ${r}`:`${o}${r}`}getIndentString(t){let e="";for(let n=0;n<t;n++)e+="\t";return e}assignLineNumbers(t){let e=1,n=1;return t.map(t=>{let o="",r="";return"removed"===t.type?(o=(e++).toString(),r=""):"added"===t.type?(o="",r=(n++).toString()):(o=(e++).toString(),r=(n++).toString()),{...t,leftNumber:o,rightNumber:r}})}setupScrollSync(){setTimeout(()=>{const t=this.diffContent.nativeElement,e=t.querySelectorAll(".left"),n=t.querySelectorAll(".right");if(e.length&&n.length){const t=e[0],o=n[0];t.addEventListener("scroll",()=>{o.scrollTop=t.scrollTop,o.scrollLeft=t.scrollLeft}),o.addEventListener("scroll",()=>{t.scrollTop=o.scrollTop,t.scrollLeft=o.scrollLeft})}})}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:HtmlDiffViewerComponent,deps:[],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"21.0.1",type:HtmlDiffViewerComponent,isStandalone:!1,selector:"html-diff-viewer",inputs:{payloadStr:"payloadStr"},viewQueries:[{propertyName:"leftTextarea",first:!0,predicate:["leftTextarea"],descendants:!0},{propertyName:"rightTextarea",first:!0,predicate:["rightTextarea"],descendants:!0},{propertyName:"diffContent",first:!0,predicate:["diffContent"],descendants:!0}],ngImport:i0,template:'\n\t\t<div class="diff-container">\n\t\t <div class="diff-controls">\n\t\t <button type="button" class="btn"\n\t\t [class.btn-primary]="!showFullDiff"\n\t\t [class.btn-secondary]="showFullDiff"\n\t\t (click)="toggleDiffView()">\n\t\t {{ showFullDiff ? \'Show Full Content\' : \'Show Changes Only\' }}\n\t\t </button>\n\t\t </div>\n\t\t <div class="diff-header">\n\t\t <div class="diff-header-left">Original</div>\n\t\t <div class="diff-header-right">Modified</div>\n\t\t </div>\n\t\t <div class="diff-content" #diffContent>\n\t\t <div class="diff-lines">\n\t\t @for (line of visibleDiffLines; track line) {\n\t\t <div class="diff-line"\n\t\t [class.context-line]="line.isContext"\n\t\t [class.hidden-line]="line.hidden">\n\t\t <div class="line-number left">{{ line.leftNumber }}</div>\n\t\t <div class="line-content left"\n\t\t [class.deleted]="line.type === \'removed\'"\n\t\t [class.changed-left]="line.type === \'changed\'">\n\t\t <span>{{ line.leftContent }}</span>\n\t\t </div>\n\t\t <div class="line-number right">{{ line.rightNumber }}</div>\n\t\t <div class="line-content right"\n\t\t [class.added]="line.type === \'added\'"\n\t\t [class.changed-right]="line.type === \'changed\'">\n\t\t <span>{{ line.rightContent }}</span>\n\t\t </div>\n\t\t </div>\n\t\t }\n\t\t </div>\n\t\t </div>\n\t\t <div class="input-container">\n\t\t <textarea #leftTextarea [(ngModel)]="leftContent" placeholder="Left side content" rows="10"></textarea>\n\t\t <textarea #rightTextarea [(ngModel)]="rightContent" placeholder="Right side content" rows="10"></textarea>\n\t\t </div>\n\t\t</div>\n\t\t',isInline:!0,styles:[".diff-container{display:flex;flex-direction:column;font-family:monospace;font-size:12px;line-height:1.5}.diff-controls{margin-bottom:10px}.btn{padding:5px 10px;border-radius:4px;cursor:pointer;border:1px solid #ddd}.btn-primary{background-color:#0366d6;color:#fff}.btn-secondary{background-color:#f6f8fa;color:#24292e}.diff-header{display:flex;background:#f6f8fa;border:1px solid #e1e4e8;border-bottom:none;padding:8px 16px;font-weight:700}.diff-header-left,.diff-header-right{width:50%;box-sizing:border-box}.diff-content{border:1px solid #e1e4e8;overflow:auto;max-height:500px}.diff-lines{display:flex;flex-direction:column;width:100%}.diff-line{display:flex;width:100%}.context-line{background-color:#f1f8ff}.hidden-line{display:none}.line-number{width:40px!important;min-width:40px!important;padding:0 10px;text-align:right;color:#1b1f234d;background-color:#f6f8fa;border-right:1px solid #e1e4e8;-webkit-user-select:none;user-select:none}.line-content{flex:1;padding:0 10px;white-space:pre;min-width:0;overflow-x:auto}.left{width:50%;border-right:1px solid #e1e4e8}.right{width:50%}.added{background-color:#e6ffed}.deleted{background-color:#ffebe9}.changed-left{background-color:#fff3bf;text-decoration:line-through}.changed-right{background-color:#d4edda}.input-container{display:flex;margin-top:20px;gap:10px}textarea{width:50%;height:200px;font-family:monospace;padding:10px;border:1px solid #ddd;border-radius:4px;box-sizing:border-box}*{word-wrap:normal!important}\n"],dependencies:[{kind:"directive",type:i2.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:i2.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:i2.NgModel,selector:"[ngModel]:not([formControlName]):not([formControl])",inputs:["name","disabled","ngModel","ngModelOptions"],outputs:["ngModelChange"],exportAs:["ngModel"]}]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:HtmlDiffViewerComponent,decorators:[{type:Component,args:[{selector:"html-diff-viewer",template:'\n\t\t<div class="diff-container">\n\t\t <div class="diff-controls">\n\t\t <button type="button" class="btn"\n\t\t [class.btn-primary]="!showFullDiff"\n\t\t [class.btn-secondary]="showFullDiff"\n\t\t (click)="toggleDiffView()">\n\t\t {{ showFullDiff ? \'Show Full Content\' : \'Show Changes Only\' }}\n\t\t </button>\n\t\t </div>\n\t\t <div class="diff-header">\n\t\t <div class="diff-header-left">Original</div>\n\t\t <div class="diff-header-right">Modified</div>\n\t\t </div>\n\t\t <div class="diff-content" #diffContent>\n\t\t <div class="diff-lines">\n\t\t @for (line of visibleDiffLines; track line) {\n\t\t <div class="diff-line"\n\t\t [class.context-line]="line.isContext"\n\t\t [class.hidden-line]="line.hidden">\n\t\t <div class="line-number left">{{ line.leftNumber }}</div>\n\t\t <div class="line-content left"\n\t\t [class.deleted]="line.type === \'removed\'"\n\t\t [class.changed-left]="line.type === \'changed\'">\n\t\t <span>{{ line.leftContent }}</span>\n\t\t </div>\n\t\t <div class="line-number right">{{ line.rightNumber }}</div>\n\t\t <div class="line-content right"\n\t\t [class.added]="line.type === \'added\'"\n\t\t [class.changed-right]="line.type === \'changed\'">\n\t\t <span>{{ line.rightContent }}</span>\n\t\t </div>\n\t\t </div>\n\t\t }\n\t\t </div>\n\t\t </div>\n\t\t <div class="input-container">\n\t\t <textarea #leftTextarea [(ngModel)]="leftContent" placeholder="Left side content" rows="10"></textarea>\n\t\t <textarea #rightTextarea [(ngModel)]="rightContent" placeholder="Right side content" rows="10"></textarea>\n\t\t </div>\n\t\t</div>\n\t\t',standalone:!1,styles:[".diff-container{display:flex;flex-direction:column;font-family:monospace;font-size:12px;line-height:1.5}.diff-controls{margin-bottom:10px}.btn{padding:5px 10px;border-radius:4px;cursor:pointer;border:1px solid #ddd}.btn-primary{background-color:#0366d6;color:#fff}.btn-secondary{background-color:#f6f8fa;color:#24292e}.diff-header{display:flex;background:#f6f8fa;border:1px solid #e1e4e8;border-bottom:none;padding:8px 16px;font-weight:700}.diff-header-left,.diff-header-right{width:50%;box-sizing:border-box}.diff-content{border:1px solid #e1e4e8;overflow:auto;max-height:500px}.diff-lines{display:flex;flex-direction:column;width:100%}.diff-line{display:flex;width:100%}.context-line{background-color:#f1f8ff}.hidden-line{display:none}.line-number{width:40px!important;min-width:40px!important;padding:0 10px;text-align:right;color:#1b1f234d;background-color:#f6f8fa;border-right:1px solid #e1e4e8;-webkit-user-select:none;user-select:none}.line-content{flex:1;padding:0 10px;white-space:pre;min-width:0;overflow-x:auto}.left{width:50%;border-right:1px solid #e1e4e8}.right{width:50%}.added{background-color:#e6ffed}.deleted{background-color:#ffebe9}.changed-left{background-color:#fff3bf;text-decoration:line-through}.changed-right{background-color:#d4edda}.input-container{display:flex;margin-top:20px;gap:10px}textarea{width:50%;height:200px;font-family:monospace;padding:10px;border:1px solid #ddd;border-radius:4px;box-sizing:border-box}*{word-wrap:normal!important}\n"]}]}],ctorParameters:()=>[],propDecorators:{payloadStr:[{type:Input}],leftTextarea:[{type:ViewChild,args:["leftTextarea"]}],rightTextarea:[{type:ViewChild,args:["rightTextarea"]}],diffContent:[{type:ViewChild,args:["diffContent"]}]}});class JsonParsePipe{transform(t){let e=null,n=!1;try{e=JSON.parse(t,dateReviver)}catch(t){n=!0}return n?t:JSON.stringify(e,null,2)}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:JsonParsePipe,deps:[],target:i0.ɵɵFactoryTarget.Pipe});static"ɵpipe"=i0.ɵɵngDeclarePipe({minVersion:"14.0.0",version:"21.0.1",ngImport:i0,type:JsonParsePipe,isStandalone:!1,name:"jsonParse",pure:!1})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:JsonParsePipe,decorators:[{type:Pipe,args:[{name:"jsonParse",pure:!1,standalone:!1}]}]});class LoggerComponent extends BaseComponent{_services;_ds;_cd;subscription$=[];logs=[];entries_per_page=25;page_num=1;log_cnt=0;user=null;users=[];startDateTime;endDateTime;dateStart;dateEnd;selectedTypes=[];client=null;clients=[];collection="";method="";route="";id_document="";constructor(t,e,n){super(t),this._services=t,this._ds=e,this._cd=n}ngOnInit(){this._services._account.getUser().roles.super_admin||this._services._router.navigateByUrl("/home"),this.subscription$.push(this._services._socket.subscribe("activeClients").subscribe(t=>{this.clients=t,this._cd.detectChanges()})),this.subscription$.push(this._services._socket.subscribe("allUsers").subscribe(t=>{this.users=t,this._cd.detectChanges()}));let t=new Date;t.setHours(0,0,0,0);let e=new Date(moment$1(t).subtract(10,"days").toDate());this.startDateTime=this.createPickerValue(e,0);let n=new Date;n.setHours(23,59,59,999),this.endDateTime=this.createPickerValue(n,59),this.getLogData()}ngOnDestroy(){this.subscription$.forEach(t=>{t.unsubscribe()})}getLogData(){this.dateStart=this.toDate(this.startDateTime),this.dateEnd=this.toDate(this.endDateTime,!0);let t={$and:[{createdAt:{$gte:this.dateStart}},{createdAt:{$lte:this.dateEnd}}]};if(this.client)if(this.client.includes(",")){let e=this.client.split(",").map(t=>t.trim()).filter(t=>!t.startsWith("!"));e.length&&t.$and.push({client:{$in:e}}),this.client.split(",").map(t=>t.trim()).filter(t=>t.startsWith("!")).forEach(e=>{t.$and.push({client:{$ne:e.replace("!","")}})})}else this.client.startsWith("!")?t.$and.push({client:{$ne:this.client.replace("!","").trim()}}):t.$and.push({client:this.client.trim()});else t.$and.push({client:"ResolveIO"});if(this.selectedTypes.length){if(t.$and.push({type:{$in:this.selectedTypes}}),this.collection)if(this.collection.includes(",")){let e=this.collection.split(",").map(t=>t.trim()).filter(t=>!t.startsWith("!"));e.length&&t.$and.push({collection:{$in:e}}),this.collection.split(",").map(t=>t.trim()).filter(t=>t.startsWith("!")).forEach(e=>{t.$and.push({collection:{$ne:e.replace("!","")}})})}else this.collection.startsWith("!")?t.$and.push({collection:{$ne:this.collection.replace("!","").trim()}}):t.$and.push({collection:this.collection.trim()});if(this.method)if(this.method.includes(",")){let e=this.method.split(",").map(t=>t.trim()).filter(t=>!t.startsWith("!"));e.length&&t.$and.push({method:{$in:e}}),this.method.split(",").map(t=>t.trim()).filter(t=>t.startsWith("!")).forEach(e=>{t.$and.push({method:{$ne:e.replace("!","")}})})}else this.method.startsWith("!")?t.$and.push({method:{$ne:this.method.replace("!","").trim()}}):t.$and.push({method:this.method.trim()});if(this.route)if(this.route.includes(",")){let e=this.route.split(",").map(t=>t.trim()).filter(t=>!t.startsWith("!"));e.length&&t.$and.push({route:{$in:e}}),this.route.split(",").map(t=>t.trim()).filter(t=>t.startsWith("!")).forEach(e=>{t.$and.push({route:{$ne:e.replace("!","")}})})}else this.route.startsWith("!")?t.$and.push({route:{$ne:this.route.replace("!","").trim()}}):t.$and.push({route:this.route.trim()});if(this.id_document)if(this.id_document.includes(",")){let e=this.id_document.split(",").map(t=>t.trim()).filter(t=>!t.startsWith("!"));e.length&&t.$and.push({id_document:{$in:e}}),this.id_document.split(",").map(t=>t.trim()).filter(t=>t.startsWith("!")).forEach(e=>{t.$and.push({id_document:{$ne:e.replace("!","")}})})}else this.id_document.startsWith("!")?t.$and.push({id_document:{$ne:this.id_document.replace("!","").trim()}}):t.$and.push({id_document:this.id_document.trim()});this.user&&t.$and.push({user:this.user}),"string"==typeof this.entries_per_page&&(this.entries_per_page=parseInt(this.entries_per_page)),this._services._socket.call("findWithOptions","logs",t,{sort:{createdAt:-1},limit:this.entries_per_page,skip:this.entries_per_page*(this.page_num-1)},(t,e)=>{this.logs=e,this._cd.detectChanges()}),this._services._socket.call("countCollectionWithQuery","logs",t,(t,e)=>{this.log_cnt=e,this._cd.detectChanges()}),this._cd.detectChanges()}}selectType(t){"all"!==t?this.selectedTypes.includes(t)?this.selectedTypes.splice(this.selectedTypes.indexOf(t),1):this.selectedTypes.push(t):7===this.selectedTypes.length?this.selectedTypes=[]:this.selectedTypes=["error","document","query","queryResponse","client-request","client-response","callMethod"],this.logs=[],this.selectedTypes.length&&this.getLogData()}icon(t){return"error"===t?"danger":"document"===t?"info":"client-response"===t?"success":"client-request"===t?"primary":"secondary"}removeAllLogs(){this._ds.confirm("Are you sure you want to delete all logs?").then(()=>{this._services._socket.call("removeAllDocuments","logs")},()=>{})}toDate(t,e=!1){if(!t||!t.date)return new Date;let n=t.time||{hour:0,minute:0,second:0,ms:0},o=e?999:n.ms||0;return new Date(t.date.year,t.date.month-1,t.date.day,n.hour||0,n.minute||0,n.second||0,o)}createPickerValue(t,e=null){return{mode:"datetime",date:{year:t.getFullYear(),month:t.getMonth()+1,day:t.getDate()},time:{hour:t.getHours(),minute:t.getMinutes(),second:null!==e?e:t.getSeconds(),ms:t.getMilliseconds()}}}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:LoggerComponent,deps:[{token:ProviderService},{token:DialogService},{token:i0.ChangeDetectorRef}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"21.0.1",type:LoggerComponent,isStandalone:!1,selector:"resolveio-logger",providers:[ProviderService],usesInheritance:!0,ngImport:i0,template:'<div class="row">\n\t<div class="col-lg-12">\n\t\t<div class="card">\n\t\t\t<div class="card-header"><b>Filters</b></div>\n\t\t\t<div class="card-body">\n\t\t\t\t<div class="row">\n\t\t\t\t\t<div class="col-lg-12">\n\t\t\t\t\t\t<responsive-button-group collapseSize="900">\n\t\t\t\t\t\t\t<button type="button" [ngClass]="[\'btn\', selectedTypes.includes(\'error\') && selectedTypes.includes(\'document\') && selectedTypes.includes(\'query\') && selectedTypes.includes(\'client-request\') && selectedTypes.includes(\'client-response\') ? \'btn-success\' : \'btn-warning\']" (click)="selectType(\'all\')">All</button>\n\t\t\t\t\t\t\t<button type="button" [ngClass]="[\'btn\', selectedTypes.includes(\'error\') ? \'btn-success\' : \'btn-warning\']" (click)="selectType(\'error\')">Errors</button>\n\t\t\t\t\t\t\t<button type="button" [ngClass]="[\'btn\', selectedTypes.includes(\'document\') ? \'btn-success\' : \'btn-warning\']" (click)="selectType(\'document\')">Document</button>\n\t\t\t\t\t\t\t\x3c!-- <button type="button" [ngClass]="[\'btn\', selectedTypes.includes(\'query\') ? \'btn-success\' : \'btn-warning\']" (click)="selectType(\'query\')">Query</button> --\x3e\n\t\t\t\t\t\t\t\x3c!-- <button type="button" [ngClass]="[\'btn\', selectedTypes.includes(\'queryResponse\') ? \'btn-success\' : \'btn-warning\']" (click)="selectType(\'queryResponse\')">Query Response</button> --\x3e\n\t\t\t\t\t\t\t<button type="button" [ngClass]="[\'btn\', selectedTypes.includes(\'client-request\') ? \'btn-success\' : \'btn-warning\']" (click)="selectType(\'client-request\')">Client Requests</button>\n\t\t\t\t\t\t\t<button type="button" [ngClass]="[\'btn\', selectedTypes.includes(\'client-response\') ? \'btn-success\' : \'btn-warning\']" (click)="selectType(\'client-response\')">Client Responses</button>\n\t\t\t\t\t\t\t<button type="button" [ngClass]="[\'btn\', selectedTypes.includes(\'callMethod\') ? \'btn-success\' : \'btn-warning\']" (click)="selectType(\'callMethod\')">Call Method</button>\n\t\t\t\t\t\t\t<button type="button" class="btn btn-danger" (click)="removeAllLogs()">REMOVE ALL LOGS</button>\n\t\t\t\t\t\t</responsive-button-group>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class="row" style="margin-top: 10px">\n\t\t\t\t\t<div class="col-lg-2">\n\t\t\t\t\t\t<label class="form-control-label">Client</label>\n\t\t\t\t\t\t<ng-select [(ngModel)]="client" (change)="getLogData()" placeholder="Select Client" [options]="clients" optionValueKey="name" optionLabelKey="name"></ng-select>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="col-lg-2">\n\t\t\t\t\t\t<label class="form-control-label">User</label>\n\t\t\t\t\t\t<ng-select [(ngModel)]="user" (change)="getLogData()" placeholder="Select User" [options]="users" optionValueKey="fullname" optionLabelKey="fullname"></ng-select>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="col-lg-2">\n\t\t\t\t\t\t<label class="form-control-label">Collection</label>\n\t\t\t\t\t\t<input class="form-control" [(ngModel)]="collection" (change)="getLogData()" placeholder="Input Colls Sep By , & ! for !Not" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="col-lg-2">\n\t\t\t\t\t\t<label class="form-control-label">Method</label>\n\t\t\t\t\t\t<input class="form-control" [(ngModel)]="method" (change)="getLogData()" placeholder="Input Methods Sep By , & ! for !Not" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="col-lg-2">\n\t\t\t\t\t\t<label class="form-control-label">Route</label>\n\t\t\t\t\t\t<input class="form-control" [(ngModel)]="route" (change)="getLogData()" placeholder="Input Routes Sep By , & ! for !Not" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="col-lg-2">\n\t\t\t\t\t\t<label class="form-control-label">Document</label>\n\t\t\t\t\t\t<input class="form-control" [(ngModel)]="id_document" (change)="getLogData()" placeholder="Input Ids Sep By , & ! for !Not" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class="row" style="margin-top: 10px">\n\t\t\t\t\t<div class="col-lg-2 offset-lg-4">\n\t\t\t\t\t\t<label class="form-control-label">Date/Time Start</label>\n\t\t\t\t\t\t<div class="input-group">\n\t\t\t\t\t\t\t<rio-date-picker [(ngModel)]="startDateTime" (ngModelChange)="getLogData()" selectionMode="datetime" [allowSeconds]="true"></rio-date-picker>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="col-lg-2">\n\t\t\t\t\t\t<label class="form-control-label">Date/Time End</label>\n\t\t\t\t\t\t<div class="input-group">\n\t\t\t\t\t\t\t<rio-date-picker [(ngModel)]="endDateTime" (ngModelChange)="getLogData()" selectionMode="datetime" [allowSeconds]="true"></rio-date-picker>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class="row" style="margin-top: 10px">\n\t\t\t\t\t<div ngbAccordion #acc="ngbAccordion" activeIds="">\n\t\t\t\t\t\t@for (log of logs; track log._id; let i = $index) {\n\t\t\t\t\t\t\t<div ngbAccordionItem [id]="\'log_\' + i">\n\t\t\t\t\t\t\t\t<div ngbAccordionHeader>\n\t\t\t\t\t\t\t\t\t<button ngbAccordionButton type="button">\n\t\t\t\t\t\t\t\t\t\t<label class="label-accordion" style="width: 90%; height: 22px">\n\t\t\t\t\t\t\t\t\t\t\t<strong class="float-start">Type: {{ log.type }}{{ log.method ? \' - Method: \' + log.method : \'\' }}{{ log.collection ? \' - Collection: \' + log.collection : \'\' }}{{ log.user ? \' - User: \' + log.user : \'\' }}{{ log.route ? \' - Route: \' + log.route : \'\' }}{{ log.id_document ? \' - id_document: \' + log.id_document : \'\' }}{{ log.messageId ? \' - messageId: \' + log.messageId : \'\' }}{{ log.instance ? \' - instance: \' + log.instance : \'\' }}</strong>\n\t\t\t\t\t\t\t\t\t\t\t<p class="float-end mb-0">{{ log.createdAt | date: \'medium\' }}</p>\n\t\t\t\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div ngbAccordionCollapse>\n\t\t\t\t\t\t\t\t\t<div ngbAccordionBody>\n\t\t\t\t\t\t\t\t\t\t<ng-template>\n\t\t\t\t\t\t\t\t\t\t\t@if (log.payload) {\n\t\t\t\t\t\t\t\t\t\t\t\t@if (log.method === \'replaceOne\' || log.method === \'updateOne\') {\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div ngbAccordion #acc2="ngbAccordion" activeIds="diff">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div ngbAccordionItem id="diff">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div ngbAccordionHeader>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<button ngbAccordionButton type="button">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class="label-accordion" style="width: 90%; height: 22px">Diff</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div ngbAccordionCollapse>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div ngbAccordionBody>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ng-template>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<html-diff-viewer [payloadStr]="log.payload"></html-diff-viewer>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div ngbAccordionItem id="raw">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div ngbAccordionHeader>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<button ngbAccordionButton type="button">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class="label-accordion" style="width: 90%; height: 22px">Raw</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div ngbAccordionCollapse>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div ngbAccordionBody>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ng-template>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<pre>{{ log.payload | jsonParse }}</pre>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t@if (log.method !== \'replaceOne\' && log.method !== \'updateOne\') {\n\t\t\t\t\t\t\t\t\t\t\t\t\t<pre>{{ log.payload | jsonParse }}</pre>\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t@if (!log.payload) {\n\t\t\t\t\t\t\t\t\t\t\t\tNo Data\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="row" style="margin-top: 10px">\n\t\t\t\t\t\t<div class="col-lg-4">\n\t\t\t\t\t\t\t<div class="row">\n\t\t\t\t\t\t\t\t<div class="col-lg-8">\n\t\t\t\t\t\t\t\t\t<label class="form-control-label">Entries Per Page</label>\n\t\t\t\t\t\t\t\t\t<select class="form-control" [(ngModel)]="entries_per_page" (change)="getLogData()">\n\t\t\t\t\t\t\t\t\t\t<option value="10">10</option>\n\t\t\t\t\t\t\t\t\t\t<option value="25">25</option>\n\t\t\t\t\t\t\t\t\t\t<option value="50">50</option>\n\t\t\t\t\t\t\t\t\t\t<option value="100">100</option>\n\t\t\t\t\t\t\t\t\t\t<option value="250">250</option>\n\t\t\t\t\t\t\t\t\t\t<option value="500">500</option>\n\t\t\t\t\t\t\t\t\t\t<option value="1000">1000</option>\n\t\t\t\t\t\t\t\t\t\t<option value="5000">5000</option>\n\t\t\t\t\t\t\t\t\t</select>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class="col-lg-8">\n\t\t\t\t\t\t\t<ngb-pagination class="float-end" boundaryLinks="true" [collectionSize]="log_cnt" directionLinks="true" ellipses="false" [(page)]="page_num" maxSize="6" [pageSize]="entries_per_page" rotate="true" (pageChange)="getLogData()"></ngb-pagination>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>\n',dependencies:[{kind:"directive",type:i2.NgSelectOption,selector:"option",inputs:["ngValue","value"]},{kind:"directive",type:i2.ɵNgSelectMultipleOption,selector:"option",inputs:["ngValue","value"]},{kind:"directive",type:i2.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:i2.SelectControlValueAccessor,selector:"select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]",inputs:["compareWith"]},{kind:"directive",type:i2.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:i2.NgModel,selector:"[ngModel]:not([formControlName]):not([formControl])",inputs:["name","disabled","ngModel","ngModelOptions"],outputs:["ngModelChange"],exportAs:["ngModel"]},{kind:"directive",type:i1$2.NgbAccordionButton,selector:"button[ngbAccordionButton]"},{kind:"directive",type:i1$2.NgbAccordionDirective,selector:"[ngbAccordion]",inputs:["animation","closeOthers","destroyOnHide"],outputs:["show","shown","hide","hidden"],exportAs:["ngbAccordion"]},{kind:"directive",type:i1$2.NgbAccordionItem,selector:"[ngbAccordionItem]",inputs:["ngbAccordionItem","destroyOnHide","disabled","collapsed"],outputs:["show","shown","hide","hidden"],exportAs:["ngbAccordionItem"]},{kind:"directive",type:i1$2.NgbAccordionHeader,selector:"[ngbAccordionHeader]"},{kind:"component",type:i1$2.NgbAccordionBody,selector:"[ngbAccordionBody]"},{kind:"directive",type:i1$2.NgbAccordionCollapse,selector:"[ngbAccordionCollapse]",exportAs:["ngbAccordionCollapse"]},{kind:"component",type:i1$2.NgbPagination,selector:"ngb-pagination",inputs:["disabled","boundaryLinks","directionLinks","ellipses","rotate","collectionSize","maxSize","page","pageSize","size"],outputs:["pageChange"]},{kind:"component",type:ResponsiveButtonGroupComponent,selector:"responsive-button-group",inputs:["collapseSize"]},{kind:"component",type:i5.NgSelectComponent,selector:"ng-select",inputs:["placeholder","multiple","panelMaxHeight","panelMaxViewportRatio","optionHeight","virtualBuffer","overlayZIndex","autoSizePanel","panelPosition","autoCenterPanel","viewportMargin","panelWidth","panelFullscreenWidth","clearable","templateLabelFromView","searchable","searchMatchMode","textWrap","compareWith","options","optionLabelKey","optionLabelFn","optionValueKey","optionDisabledKey","optionIdKey","optionGroupKey","disabled","emitOptionObject","debugLog","stickyKey","stickyAutoSave"],outputs:["change"]},{kind:"directive",type:i7.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]},{kind:"component",type:i6.RioDatePickerComponent,selector:"rio-date-picker",inputs:["enableDate","enableTime","selectionMode","firstDayOfWeek","toggleWeekFirstDay","minDate","maxDate","disabled","label","allowSeconds","minuteStep","panelWidth"],outputs:["change"]},{kind:"component",type:HtmlDiffViewerComponent,selector:"html-diff-viewer",inputs:["payloadStr"]},{kind:"pipe",type:JsonParsePipe,name:"jsonParse"},{kind:"pipe",type:i7.DatePipe,name:"date"}],changeDetection:i0.ChangeDetectionStrategy.OnPush})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:LoggerComponent,decorators:[{type:Component,args:[{selector:"resolveio-logger",providers:[ProviderService],changeDetection:ChangeDetectionStrategy.OnPush,standalone:!1,template:'<div class="row">\n\t<div class="col-lg-12">\n\t\t<div class="card">\n\t\t\t<div class="card-header"><b>Filters</b></div>\n\t\t\t<div class="card-body">\n\t\t\t\t<div class="row">\n\t\t\t\t\t<div class="col-lg-12">\n\t\t\t\t\t\t<responsive-button-group collapseSize="900">\n\t\t\t\t\t\t\t<button type="button" [ngClass]="[\'btn\', selectedTypes.includes(\'error\') && selectedTypes.includes(\'document\') && selectedTypes.includes(\'query\') && selectedTypes.includes(\'client-request\') && selectedTypes.includes(\'client-response\') ? \'btn-success\' : \'btn-warning\']" (click)="selectType(\'all\')">All</button>\n\t\t\t\t\t\t\t<button type="button" [ngClass]="[\'btn\', selectedTypes.includes(\'error\') ? \'btn-success\' : \'btn-warning\']" (click)="selectType(\'error\')">Errors</button>\n\t\t\t\t\t\t\t<button type="button" [ngClass]="[\'btn\', selectedTypes.includes(\'document\') ? \'btn-success\' : \'btn-warning\']" (click)="selectType(\'document\')">Document</button>\n\t\t\t\t\t\t\t\x3c!-- <button type="button" [ngClass]="[\'btn\', selectedTypes.includes(\'query\') ? \'btn-success\' : \'btn-warning\']" (click)="selectType(\'query\')">Query</button> --\x3e\n\t\t\t\t\t\t\t\x3c!-- <button type="button" [ngClass]="[\'btn\', selectedTypes.includes(\'queryResponse\') ? \'btn-success\' : \'btn-warning\']" (click)="selectType(\'queryResponse\')">Query Response</button> --\x3e\n\t\t\t\t\t\t\t<button type="button" [ngClass]="[\'btn\', selectedTypes.includes(\'client-request\') ? \'btn-success\' : \'btn-warning\']" (click)="selectType(\'client-request\')">Client Requests</button>\n\t\t\t\t\t\t\t<button type="button" [ngClass]="[\'btn\', selectedTypes.includes(\'client-response\') ? \'btn-success\' : \'btn-warning\']" (click)="selectType(\'client-response\')">Client Responses</button>\n\t\t\t\t\t\t\t<button type="button" [ngClass]="[\'btn\', selectedTypes.includes(\'callMethod\') ? \'btn-success\' : \'btn-warning\']" (click)="selectType(\'callMethod\')">Call Method</button>\n\t\t\t\t\t\t\t<button type="button" class="btn btn-danger" (click)="removeAllLogs()">REMOVE ALL LOGS</button>\n\t\t\t\t\t\t</responsive-button-group>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class="row" style="margin-top: 10px">\n\t\t\t\t\t<div class="col-lg-2">\n\t\t\t\t\t\t<label class="form-control-label">Client</label>\n\t\t\t\t\t\t<ng-select [(ngModel)]="client" (change)="getLogData()" placeholder="Select Client" [options]="clients" optionValueKey="name" optionLabelKey="name"></ng-select>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="col-lg-2">\n\t\t\t\t\t\t<label class="form-control-label">User</label>\n\t\t\t\t\t\t<ng-select [(ngModel)]="user" (change)="getLogData()" placeholder="Select User" [options]="users" optionValueKey="fullname" optionLabelKey="fullname"></ng-select>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="col-lg-2">\n\t\t\t\t\t\t<label class="form-control-label">Collection</label>\n\t\t\t\t\t\t<input class="form-control" [(ngModel)]="collection" (change)="getLogData()" placeholder="Input Colls Sep By , & ! for !Not" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="col-lg-2">\n\t\t\t\t\t\t<label class="form-control-label">Method</label>\n\t\t\t\t\t\t<input class="form-control" [(ngModel)]="method" (change)="getLogData()" placeholder="Input Methods Sep By , & ! for !Not" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="col-lg-2">\n\t\t\t\t\t\t<label class="form-control-label">Route</label>\n\t\t\t\t\t\t<input class="form-control" [(ngModel)]="route" (change)="getLogData()" placeholder="Input Routes Sep By , & ! for !Not" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="col-lg-2">\n\t\t\t\t\t\t<label class="form-control-label">Document</label>\n\t\t\t\t\t\t<input class="form-control" [(ngModel)]="id_document" (change)="getLogData()" placeholder="Input Ids Sep By , & ! for !Not" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class="row" style="margin-top: 10px">\n\t\t\t\t\t<div class="col-lg-2 offset-lg-4">\n\t\t\t\t\t\t<label class="form-control-label">Date/Time Start</label>\n\t\t\t\t\t\t<div class="input-group">\n\t\t\t\t\t\t\t<rio-date-picker [(ngModel)]="startDateTime" (ngModelChange)="getLogData()" selectionMode="datetime" [allowSeconds]="true"></rio-date-picker>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="col-lg-2">\n\t\t\t\t\t\t<label class="form-control-label">Date/Time End</label>\n\t\t\t\t\t\t<div class="input-group">\n\t\t\t\t\t\t\t<rio-date-picker [(ngModel)]="endDateTime" (ngModelChange)="getLogData()" selectionMode="datetime" [allowSeconds]="true"></rio-date-picker>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class="row" style="margin-top: 10px">\n\t\t\t\t\t<div ngbAccordion #acc="ngbAccordion" activeIds="">\n\t\t\t\t\t\t@for (log of logs; track log._id; let i = $index) {\n\t\t\t\t\t\t\t<div ngbAccordionItem [id]="\'log_\' + i">\n\t\t\t\t\t\t\t\t<div ngbAccordionHeader>\n\t\t\t\t\t\t\t\t\t<button ngbAccordionButton type="button">\n\t\t\t\t\t\t\t\t\t\t<label class="label-accordion" style="width: 90%; height: 22px">\n\t\t\t\t\t\t\t\t\t\t\t<strong class="float-start">Type: {{ log.type }}{{ log.method ? \' - Method: \' + log.method : \'\' }}{{ log.collection ? \' - Collection: \' + log.collection : \'\' }}{{ log.user ? \' - User: \' + log.user : \'\' }}{{ log.route ? \' - Route: \' + log.route : \'\' }}{{ log.id_document ? \' - id_document: \' + log.id_document : \'\' }}{{ log.messageId ? \' - messageId: \' + log.messageId : \'\' }}{{ log.instance ? \' - instance: \' + log.instance : \'\' }}</strong>\n\t\t\t\t\t\t\t\t\t\t\t<p class="float-end mb-0">{{ log.createdAt | date: \'medium\' }}</p>\n\t\t\t\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div ngbAccordionCollapse>\n\t\t\t\t\t\t\t\t\t<div ngbAccordionBody>\n\t\t\t\t\t\t\t\t\t\t<ng-template>\n\t\t\t\t\t\t\t\t\t\t\t@if (log.payload) {\n\t\t\t\t\t\t\t\t\t\t\t\t@if (log.method === \'replaceOne\' || log.method === \'updateOne\') {\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div ngbAccordion #acc2="ngbAccordion" activeIds="diff">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div ngbAccordionItem id="diff">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div ngbAccordionHeader>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<button ngbAccordionButton type="button">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class="label-accordion" style="width: 90%; height: 22px">Diff</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div ngbAccordionCollapse>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div ngbAccordionBody>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ng-template>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<html-diff-viewer [payloadStr]="log.payload"></html-diff-viewer>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div ngbAccordionItem id="raw">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div ngbAccordionHeader>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<button ngbAccordionButton type="button">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class="label-accordion" style="width: 90%; height: 22px">Raw</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div ngbAccordionCollapse>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div ngbAccordionBody>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ng-template>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<pre>{{ log.payload | jsonParse }}</pre>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t@if (log.method !== \'replaceOne\' && log.method !== \'updateOne\') {\n\t\t\t\t\t\t\t\t\t\t\t\t\t<pre>{{ log.payload | jsonParse }}</pre>\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t@if (!log.payload) {\n\t\t\t\t\t\t\t\t\t\t\t\tNo Data\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="row" style="margin-top: 10px">\n\t\t\t\t\t\t<div class="col-lg-4">\n\t\t\t\t\t\t\t<div class="row">\n\t\t\t\t\t\t\t\t<div class="col-lg-8">\n\t\t\t\t\t\t\t\t\t<label class="form-control-label">Entries Per Page</label>\n\t\t\t\t\t\t\t\t\t<select class="form-control" [(ngModel)]="entries_per_page" (change)="getLogData()">\n\t\t\t\t\t\t\t\t\t\t<option value="10">10</option>\n\t\t\t\t\t\t\t\t\t\t<option value="25">25</option>\n\t\t\t\t\t\t\t\t\t\t<option value="50">50</option>\n\t\t\t\t\t\t\t\t\t\t<option value="100">100</option>\n\t\t\t\t\t\t\t\t\t\t<option value="250">250</option>\n\t\t\t\t\t\t\t\t\t\t<option value="500">500</option>\n\t\t\t\t\t\t\t\t\t\t<option value="1000">1000</option>\n\t\t\t\t\t\t\t\t\t\t<option value="5000">5000</option>\n\t\t\t\t\t\t\t\t\t</select>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class="col-lg-8">\n\t\t\t\t\t\t\t<ngb-pagination class="float-end" boundaryLinks="true" [collectionSize]="log_cnt" directionLinks="true" ellipses="false" [(page)]="page_num" maxSize="6" [pageSize]="entries_per_page" rotate="true" (pageChange)="getLogData()"></ngb-pagination>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>\n'}]}],ctorParameters:()=>[{type:ProviderService},{type:DialogService},{type:i0.ChangeDetectorRef}]});class AuthGuard{_router;_auth;_ds;_account;_app;_offline;_aps;_alert;redirectUrl;constructor(t,e,n,o,r,i,a,s){this._router=t,this._auth=e,this._ds=n,this._account=o,this._app=r,this._offline=i,this._aps=a,this._alert=s}canActivate(t,e){return new Promise(t=>{this._account.isInitCompleted().then(()=>{let n=this._account.getUser();if(n||(n=this._offline.getUser(),n&&this._account.setUser(n)),n)if(n.active){let o=e.url.replace(/\/[a-f0-9]{24}$/,"").replace(/\?.+$/,""),r=o.replace(/([^\/]+\/?$)/,"");if(n.roles.super_admin)t(!0);else{let e=!1;for(;!e&&o.split("/").length>2;){if(!this.isLinkFakeRoute(o))if(n.roles.groups.some(t=>t.views.some(t=>t===o)))e=!0,t(!0);else if(n.roles.groups.some(t=>t.views.some(t=>t.startsWith(r)&&!this.doesLinkHaveParameter(t)&&!this.isLinkFakeRoute(t)))){let o=n.roles.groups.filter(t=>t.views.some(t=>t.startsWith(r)&&!this.doesLinkHaveParameter(t)&&!this.isLinkFakeRoute(t)))[0].views.filter(t=>t.startsWith(r)&&!this.doesLinkHaveParameter(t)&&!this.isLinkFakeRoute(t))[0];e=!0,this._router.navigateByUrl(o),t(!1)}r=r.replace(/([^\/]+\/?$)/,""),o=o.replace(/(\/[^\/]+$)/,"")}e||(this._router.navigateByUrl("/home"),t(!1))}}else this._router.navigateByUrl("/home"),t(!1);else navigator.onLine?this._auth.loginUser().then(o=>{this._account.isLoginCompleted().then(()=>{if(n=this._account.getUser(),n.active){let o=e.url.replace(/\/[a-f0-9]{24}$/,"").replace(/\?.+$/,""),r=o.replace(/([^\/]+\/?$)/,"");if(n.roles.super_admin)t(!0);else{let e=!1;for(;!e&&o.split("/").length>2;){if(!this.isLinkFakeRoute(o))if(n.roles.groups.some(t=>t.views.some(t=>t===o)))e=!0,t(!0);else if(n.roles.groups.some(t=>t.views.some(t=>t.startsWith(r)&&!this.doesLinkHaveParameter(t)&&!this.isLinkFakeRoute(t)))){let o=n.roles.groups.filter(t=>t.views.some(t=>t.startsWith(r)&&!this.doesLinkHaveParameter(t)&&!this.isLinkFakeRoute(t)))[0].views.filter(t=>t.startsWith(r)&&!this.doesLinkHaveParameter(t)&&!this.isLinkFakeRoute(t))[0];e=!0,this._router.navigateByUrl(o),t(!1)}r=r.replace(/([^\/]+\/?$)/,""),o=o.replace(/(\/[^\/]+$)/,"")}e||(this._router.navigateByUrl("/home"),t(!1))}}else this._router.navigateByUrl("/home"),t(!1)})},()=>{this._router.navigateByUrl("/home"),t(!1)}):t(!0)},()=>{})})}doesLinkHaveParameter(t){let e=this._aps.getAllModulePermissions();for(let n=0;n<e.length;n++){let o=e[n];for(let e=0;e<o.views.length;e++){let n=o.views[e];if(n.link===t)return!!n.has_parameter}}return!1}isLinkFakeRoute(t){let e=this._aps.getAllModulePermissions();for(let n=0;n<e.length;n++){let o=e[n];for(let e=0;e<o.views.length;e++){let n=o.views[e];if(n.link===t)return!!n.fake_route}}return!0}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:AuthGuard,deps:[{token:i1$1.Router},{token:AuthService},{token:DialogService},{token:AccountManagerService},{token:CoreService},{token:OfflineManagerService},{token:AuthPermissionService},{token:AlertService}],target:i0.ɵɵFactoryTarget.Injectable});static"ɵprov"=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:AuthGuard})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:AuthGuard,decorators:[{type:Injectable}],ctorParameters:()=>[{type:i1$1.Router},{type:AuthService},{type:DialogService},{type:AccountManagerService},{type:CoreService},{type:OfflineManagerService},{type:AuthPermissionService},{type:AlertService}]});class CanDeactivateGuard{canDeactivate(t){return!t.canDeactivate||t.canDeactivate()}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:CanDeactivateGuard,deps:[],target:i0.ɵɵFactoryTarget.Injectable});static"ɵprov"=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:CanDeactivateGuard})}function getWindow(){return window}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:CanDeactivateGuard,decorators:[{type:Injectable}]});class WindowRefService{get nativeWindow(){return getWindow()}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:WindowRefService,deps:[],target:i0.ɵɵFactoryTarget.Injectable});static"ɵprov"=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:WindowRefService})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:WindowRefService,decorators:[{type:Injectable}]});class UserRoleComponent extends BaseComponent{_services;role;constructor(t){super(t),this._services=t}userInRole(){return this._services._account.isUserInView(this.role)}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:UserRoleComponent,deps:[{token:ProviderService}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"21.0.1",type:UserRoleComponent,isStandalone:!1,selector:"user-role",inputs:{role:"role"},providers:[ProviderService],usesInheritance:!0,ngImport:i0,template:"@if (userInRole()) {<ng-content></ng-content>}",isInline:!0})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:UserRoleComponent,decorators:[{type:Component,args:[{providers:[ProviderService],selector:"user-role",template:"@if (userInRole()) {<ng-content></ng-content>}",standalone:!1}]}],ctorParameters:()=>[{type:ProviderService}],propDecorators:{role:[{type:Input}]}});class UserRoleModule{static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:UserRoleModule,deps:[],target:i0.ɵɵFactoryTarget.NgModule});static"ɵmod"=i0.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"21.0.1",ngImport:i0,type:UserRoleModule,declarations:[UserRoleComponent],imports:[CommonModule],exports:[UserRoleComponent]});static"ɵinj"=i0.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:UserRoleModule,imports:[CommonModule]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:UserRoleModule,decorators:[{type:NgModule,args:[{imports:[CommonModule],exports:[UserRoleComponent],declarations:[UserRoleComponent]}]}]});class FormButtonModule{static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:FormButtonModule,deps:[],target:i0.ɵɵFactoryTarget.NgModule});static"ɵmod"=i0.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"21.0.1",ngImport:i0,type:FormButtonModule,declarations:[FormButtonComponent],imports:[CommonModule,NgbTooltipModule],exports:[FormButtonComponent]});static"ɵinj"=i0.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:FormButtonModule,imports:[CommonModule,NgbTooltipModule]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:FormButtonModule,decorators:[{type:NgModule,args:[{imports:[CommonModule,NgbTooltipModule],exports:[FormButtonComponent],declarations:[FormButtonComponent]}]}]});class ResponsiveButtonGroupModule{static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:ResponsiveButtonGroupModule,deps:[],target:i0.ɵɵFactoryTarget.NgModule});static"ɵmod"=i0.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"21.0.1",ngImport:i0,type:ResponsiveButtonGroupModule,declarations:[ResponsiveButtonGroupComponent],imports:[CommonModule],exports:[ResponsiveButtonGroupComponent]});static"ɵinj"=i0.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:ResponsiveButtonGroupModule,imports:[CommonModule]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:ResponsiveButtonGroupModule,decorators:[{type:NgModule,args:[{imports:[CommonModule],declarations:[ResponsiveButtonGroupComponent],exports:[ResponsiveButtonGroupComponent]}]}]});class CollapseTableModule{static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:CollapseTableModule,deps:[],target:i0.ɵɵFactoryTarget.NgModule});static"ɵmod"=i0.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"21.0.1",ngImport:i0,type:CollapseTableModule,declarations:[CollapseTableComponent],imports:[FormsModule,CommonModule],exports:[CollapseTableComponent]});static"ɵinj"=i0.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:CollapseTableModule,providers:[ResizeService],imports:[FormsModule,CommonModule]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:CollapseTableModule,decorators:[{type:NgModule,args:[{imports:[FormsModule,CommonModule],exports:[CollapseTableComponent],declarations:[CollapseTableComponent],providers:[ResizeService]}]}]});class PhonePipe{transform(t){if(!t)return"";let e,n,o;switch((t=(t=(t=(t=t.replace(new RegExp("-","g"),"")).replace(new RegExp(" ","g"),"")).replace("(","")).replace(")","")).length){case 10:e=1,n=t.slice(0,3),o=t.slice(3);break;case 11:e=t[0],n=t.slice(1,4),o=t.slice(4);break;case 12:e=t.slice(0,3),n=t.slice(3,5),o=t.slice(5);break;default:return t}return 1===e&&(e=""),o=o.slice(0,3)+"-"+o.slice(3),(e+" ("+n+") "+o).trim()}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:PhonePipe,deps:[],target:i0.ɵɵFactoryTarget.Pipe});static"ɵpipe"=i0.ɵɵngDeclarePipe({minVersion:"14.0.0",version:"21.0.1",ngImport:i0,type:PhonePipe,isStandalone:!1,name:"phone"})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:PhonePipe,decorators:[{type:Pipe,args:[{name:"phone",standalone:!1}]}]});class ReversePipe{transform(t){return t.slice(0).reverse()}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:ReversePipe,deps:[],target:i0.ɵɵFactoryTarget.Pipe});static"ɵpipe"=i0.ɵɵngDeclarePipe({minVersion:"14.0.0",version:"21.0.1",ngImport:i0,type:ReversePipe,isStandalone:!1,name:"reverse"})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:ReversePipe,decorators:[{type:Pipe,args:[{name:"reverse",standalone:!1}]}]});class MinusCurrencyPipe{transform(t,e){return"-"===t.charAt(0)?"("+t.substring(1,t.length)+")":t}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:MinusCurrencyPipe,deps:[],target:i0.ɵɵFactoryTarget.Pipe});static"ɵpipe"=i0.ɵɵngDeclarePipe({minVersion:"14.0.0",version:"21.0.1",ngImport:i0,type:MinusCurrencyPipe,isStandalone:!1,name:"minusCurrency"})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:MinusCurrencyPipe,decorators:[{type:Pipe,args:[{name:"minusCurrency",standalone:!1}]}]});class DomSanitizorPipe{_sanitizer;constructor(t){this._sanitizer=t}transform(t,e="html"){switch(e){case"html":return this._sanitizer.bypassSecurityTrustHtml(t);case"style":return this._sanitizer.bypassSecurityTrustStyle(t);case"script":return this._sanitizer.bypassSecurityTrustScript(t);case"url":return this._sanitizer.bypassSecurityTrustUrl(t);case"resourceUrl":return this._sanitizer.bypassSecurityTrustResourceUrl(t);default:throw new Error(`Invalid safe type specified: ${e}`)}}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DomSanitizorPipe,deps:[{token:i1$4.DomSanitizer}],target:i0.ɵɵFactoryTarget.Pipe});static"ɵpipe"=i0.ɵɵngDeclarePipe({minVersion:"14.0.0",version:"21.0.1",ngImport:i0,type:DomSanitizorPipe,isStandalone:!1,name:"safe"})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DomSanitizorPipe,decorators:[{type:Pipe,args:[{name:"safe",standalone:!1}]}],ctorParameters:()=>[{type:i1$4.DomSanitizer}]});class TitleCaseAndUnderscorePipe{transform(t){let e=t.replace("_"," ").toLowerCase().split(" ");for(let t=0;t<e.length;t++)e[t]=e[t].charAt(0).toUpperCase()+e[t].slice(1);return e.join(" ")}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:TitleCaseAndUnderscorePipe,deps:[],target:i0.ɵɵFactoryTarget.Pipe});static"ɵpipe"=i0.ɵɵngDeclarePipe({minVersion:"14.0.0",version:"21.0.1",ngImport:i0,type:TitleCaseAndUnderscorePipe,isStandalone:!1,name:"titleCase",pure:!1})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:TitleCaseAndUnderscorePipe,decorators:[{type:Pipe,args:[{name:"titleCase",pure:!1,standalone:!1}]}]});class PipeModule{static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:PipeModule,deps:[],target:i0.ɵɵFactoryTarget.NgModule});static"ɵmod"=i0.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"21.0.1",ngImport:i0,type:PipeModule,declarations:[FilterEqualPipe,FilterNotEqualPipe,PhonePipe,ReversePipe,MinusCurrencyPipe,DomSanitizorPipe,TitleCaseAndUnderscorePipe,JsonParsePipe],exports:[FilterEqualPipe,FilterNotEqualPipe,PhonePipe,ReversePipe,MinusCurrencyPipe,DomSanitizorPipe,TitleCaseAndUnderscorePipe,JsonParsePipe]});static"ɵinj"=i0.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:PipeModule})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:PipeModule,decorators:[{type:NgModule,args:[{declarations:[FilterEqualPipe,FilterNotEqualPipe,PhonePipe,ReversePipe,MinusCurrencyPipe,DomSanitizorPipe,TitleCaseAndUnderscorePipe,JsonParsePipe],exports:[FilterEqualPipe,FilterNotEqualPipe,PhonePipe,ReversePipe,MinusCurrencyPipe,DomSanitizorPipe,TitleCaseAndUnderscorePipe,JsonParsePipe]}]}]});class SortTableDirective{element;sortables=new Map;_stateChanges=new Subject;active;start=1;disabled=!1;tableFixed=!1;headerFixed=!1;secondaryColor=!1;tertiaryColor=!1;get direction(){return this._direction}set direction(t){if(t&&-1!==t&&1!==t)throw Error(t+" is not a valid sort direction (0 or 1).");this._direction=t}_direction=0;_data=new BehaviorSubject([]);sortChange=new EventEmitter;constructor(t){this.element=t}register(t){if(!t.id)throw Error("CTSortHeader must be provided with a unique id");if(this.sortables.has(t.id))throw Error("Cannot have two CTSortables with the same id "+t.id);this.sortables.set(t.id,t)}deregister(t){this.sortables.delete(t.id)}sort(t){if(this.active!=t.id?(this.active=t.id,this.direction=t.start?t.start:this.start):this.direction*=-1,this.sortChange.emit({active:this.active,direction:this.direction}),this._data.value.length){let e=null;for(let n=0;n<this._data.value.length;n++)if(t.id.split(".").reduce((t,e)=>t[e],this._data.value[n])){e=t.id.split(".").reduce((t,e)=>t[e],this._data.value[n]);break}if(null!=e)if("string"==typeof e){let e=new RegExp(/^[\d.,$]+$/);this._data.value.filter(e=>t.id.split(".").reduce((t,e)=>t[e],e)).some(n=>!e.test(t.id.split(".").reduce((t,e)=>t[e],n)))?1===this.direction?this._data.next(this._data.value.sort((e,n)=>(t.id.split(".").reduce((t,e)=>t[e],e)||"zzzzzz").localeCompare(t.id.split(".").reduce((t,e)=>t[e],n)||"zzzzzz"))):this._data.next(this._data.value.sort((e,n)=>(t.id.split(".").reduce((t,e)=>t[e],n)||"AAAAAAA").localeCompare(t.id.split(".").reduce((t,e)=>t[e],e)||"AAAAAAA"))):1===this.direction?this._data.next(this._data.value.sort((e,n)=>(null!==t.id.split(".").reduce((t,e)=>t[e],e)?parseFloat(t.id.split(".").reduce((t,e)=>t[e],e).replace(/\$/g,"").replace(",","")):999999999999)-(null!==t.id.split(".").reduce((t,e)=>t[e],n)?parseFloat(t.id.split(".").reduce((t,e)=>t[e],n).replace(/\$/g,"").replace(",","")):999999999999))):this._data.next(this._data.value.sort((e,n)=>(null!==t.id.split(".").reduce((t,e)=>t[e],n)?parseFloat(t.id.split(".").reduce((t,e)=>t[e],n).replace(/\$/g,"").replace(",","")):-999999999999)-(null!==t.id.split(".").reduce((t,e)=>t[e],e)?parseFloat(t.id.split(".").reduce((t,e)=>t[e],e).replace(/\$/g,"").replace(",","")):-999999999999)))}else"number"==typeof e?1===this.direction?this._data.next(this._data.value.sort((e,n)=>(null!==t.id.split(".").reduce((t,e)=>t[e],e)?t.id.split(".").reduce((t,e)=>t[e],e):999999999999)-(null!==t.id.split(".").reduce((t,e)=>t[e],n)?t.id.split(".").reduce((t,e)=>t[e],n):999999999999))):this._data.next(this._data.value.sort((e,n)=>(null!==t.id.split(".").reduce((t,e)=>t[e],n)?t.id.split(".").reduce((t,e)=>t[e],n):-999999999999)-(null!==t.id.split(".").reduce((t,e)=>t[e],e)?t.id.split(".").reduce((t,e)=>t[e],e):-999999999999))):e instanceof Date?1===this.direction?this._data.next(this._data.value.sort((e,n)=>(t.id.split(".").reduce((t,e)=>t[e],e)?t.id.split(".").reduce((t,e)=>t[e],e).getTime():0)-(t.id.split(".").reduce((t,e)=>t[e],n)?t.id.split(".").reduce((t,e)=>t[e],n).getTime():0))):this._data.next(this._data.value.sort((e,n)=>(t.id.split(".").reduce((t,e)=>t[e],n)?t.id.split(".").reduce((t,e)=>t[e],n).getTime():0)-(t.id.split(".").reduce((t,e)=>t[e],e)?t.id.split(".").reduce((t,e)=>t[e],e).getTime():0))):"boolean"==typeof e?this._data.next(this._data.value.sort((e,n)=>t.id.split(".").reduce((t,e)=>t[e],e)===t.id.split(".").reduce((t,e)=>t[e],n)?0:t.id.split(".").reduce((t,e)=>t[e],e)?1===this.direction?-1:1:1===this.direction?1:-1)):this._data.next(this._data.value.sort((e,n)=>t.id.split(".").reduce((t,e)=>t[e],e)===t.id.split(".").reduce((t,e)=>t[e],n)?0:t.id.split(".").reduce((t,e)=>t[e],e)>t.id.split(".").reduce((t,e)=>t[e],n)?-1:1))}}getData(){return this._data.asObservable()}setData(t){this._data.next(t)}ngOnInit(){}ngOnChanges(){this._stateChanges.next()}ngOnDestroy(){this._stateChanges.complete()}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SortTableDirective,deps:[{token:i0.ElementRef}],target:i0.ɵɵFactoryTarget.Directive});static"ɵdir"=i0.ɵɵngDeclareDirective({minVersion:"14.0.0",version:"21.0.1",type:SortTableDirective,isStandalone:!1,selector:"[sortable]",inputs:{active:["sortActive","active"],start:["sortStart","start"],disabled:["sortDisabled","disabled"],tableFixed:"tableFixed",headerFixed:"headerFixed",secondaryColor:"secondaryColor",tertiaryColor:"tertiaryColor"},outputs:{sortChange:"sortChange"},usesOnChanges:!0,ngImport:i0})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SortTableDirective,decorators:[{type:Directive,args:[{selector:"[sortable]",standalone:!1}]}],ctorParameters:()=>[{type:i0.ElementRef}],propDecorators:{active:[{type:Input,args:["sortActive"]}],start:[{type:Input,args:["sortStart"]}],disabled:[{type:Input,args:["sortDisabled"]}],tableFixed:[{type:Input}],headerFixed:[{type:Input}],secondaryColor:[{type:Input}],tertiaryColor:[{type:Input}],sortChange:[{type:Output,args:["sortChange"]}]}});class SortTableHeaderComponent{_sort;_arrowDirection=0;id;arrowPosition="after";start;_rerenderSubscription;disabled;constructor(t,e){if(this._sort=e,!e)throw Error("SortTableSortHeader must be placed within a parent element with the CTSortable directive.");this._rerenderSubscription=merge(e.sortChange,e._stateChanges).subscribe(()=>{this._isSorted()&&this._updateArrowDirection(),t.markForCheck()})}ngOnInit(){this._sort.register(this)}ngOnDestroy(){this._sort.deregister(this),this._rerenderSubscription.unsubscribe()}_isSorted(){return this._sort.active===this.id}_getSortDirection(){return this._sort.direction}_updateArrowDirection(){this._arrowDirection=this._isSorted()?this._sort.direction:this.start||this._sort.start}_isDisabled(){return this._sort.disabled||this.disabled}onClick(t){this._isDisabled()||this._sort.sort(this)}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SortTableHeaderComponent,deps:[{token:i0.ChangeDetectorRef},{token:SortTableDirective,optional:!0}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"21.0.1",type:SortTableHeaderComponent,isStandalone:!1,selector:"[sort-table-header]",inputs:{disabled:"disabled",id:["sort-table-header","id"],arrowPosition:"arrowPosition",start:"start"},ngImport:i0,template:'<div (click)="onClick($event)">\n\t<ng-content></ng-content>\n\t@if (_isSorted() && _getSortDirection() === -1) {\n\t\t<i class="fa fa-arrow-down" style="margin-left: 10px; font-size: 14px"></i>\n\t}\n\t@if (_isSorted() && _getSortDirection() === 1) {\n\t\t<i class="fa fa-arrow-up" style="margin-left: 10px; font-size: 14px"></i>\n\t}\n</div>\n',changeDetection:i0.ChangeDetectionStrategy.OnPush,encapsulation:i0.ViewEncapsulation.None})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SortTableHeaderComponent,decorators:[{type:Component,args:[{selector:"[sort-table-header]",encapsulation:ViewEncapsulation.None,changeDetection:ChangeDetectionStrategy.OnPush,inputs:["disabled"],standalone:!1,template:'<div (click)="onClick($event)">\n\t<ng-content></ng-content>\n\t@if (_isSorted() && _getSortDirection() === -1) {\n\t\t<i class="fa fa-arrow-down" style="margin-left: 10px; font-size: 14px"></i>\n\t}\n\t@if (_isSorted() && _getSortDirection() === 1) {\n\t\t<i class="fa fa-arrow-up" style="margin-left: 10px; font-size: 14px"></i>\n\t}\n</div>\n'}]}],ctorParameters:()=>[{type:i0.ChangeDetectorRef},{type:SortTableDirective,decorators:[{type:Optional}]}],propDecorators:{id:[{type:Input,args:["sort-table-header"]}],arrowPosition:[{type:Input}],start:[{type:Input}],disabled:[{type:Input}]}});class SortTableNgForComponent{_sort;data=[];dataChanged=new EventEmitter;sortSub$=null;sortedData=[];constructor(t){if(this._sort=t,!t)throw Error("SortTableNgFor must be placed within a parent element with the CTSortable directive.")}ngOnInit(){this.sortSub$=this._sort.getData().subscribe(t=>{this.sortedData=t,this.dataChanged.emit(this.sortedData)})}ngOnChanges(){this._sort.setData(this.data)}ngOnDestroy(){this.sortSub$.unsubscribe()}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SortTableNgForComponent,deps:[{token:SortTableDirective,optional:!0}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"21.0.1",type:SortTableNgForComponent,isStandalone:!1,selector:"[sort-table-ngfor]",inputs:{data:["sort-table-ngfor","data"]},outputs:{dataChanged:"dataChanged"},usesOnChanges:!0,ngImport:i0,template:"<ng-content></ng-content>",isInline:!0})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SortTableNgForComponent,decorators:[{type:Component,args:[{selector:"[sort-table-ngfor]",template:"<ng-content></ng-content>",standalone:!1}]}],ctorParameters:()=>[{type:SortTableDirective,decorators:[{type:Optional}]}],propDecorators:{data:[{type:Input,args:["sort-table-ngfor"]}],dataChanged:[{type:Output}]}});class SortTableModule{static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SortTableModule,deps:[],target:i0.ɵɵFactoryTarget.NgModule});static"ɵmod"=i0.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"21.0.1",ngImport:i0,type:SortTableModule,declarations:[SortTableDirective,SortTableHeaderComponent,SortTableNgForComponent],imports:[FormsModule,CommonModule],exports:[SortTableDirective,SortTableHeaderComponent,SortTableNgForComponent]});static"ɵinj"=i0.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SortTableModule,imports:[FormsModule,CommonModule]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SortTableModule,decorators:[{type:NgModule,args:[{imports:[FormsModule,CommonModule],exports:[SortTableDirective,SortTableHeaderComponent,SortTableNgForComponent],declarations:[SortTableDirective,SortTableHeaderComponent,SortTableNgForComponent]}]}]});class Sortable{container;options;dragItem;startIndex;listeners=[];direction;swapThreshold;constructor(t,e={}){this.container=t,this.options=e,this.direction=this.resolveDirection(),this.swapThreshold=this.resolveSwapThreshold(),this.bindListeners(),this.ensureDraggable()}static create(t,e={}){return new Sortable(t,e)}destroy(){this.listeners.forEach(t=>t()),this.listeners=[],this.dragItem=void 0,this.startIndex=void 0}bindListeners(){const t=(t,e)=>{this.container.addEventListener(t,e),this.listeners.push(()=>this.container.removeEventListener(t,e))};t("dragstart",this.handleDragStart),t("dragover",this.handleDragOver),t("drop",this.handleDrop),t("dragend",this.handleDragEnd)}handleDragStart=t=>{const e=this.getSortableElement(t.target);if(e&&this.hasValidHandle(t.target,e)&&(this.ensureDraggable(),this.dragItem=e,this.startIndex=this.getElementIndex(e),t.dataTransfer)){t.dataTransfer.effectAllowed="move";try{t.dataTransfer.setData("text/plain","")}catch{}}};handleDragOver=t=>{if(!this.dragItem)return;const e=this.getSortableElement(t.target);if(!e||e===this.dragItem)return;t.preventDefault();const n=e.getBoundingClientRect(),o=("horizontal"===this.direction?t.clientX-n.left>n.width*this.swapThreshold:t.clientY-n.top>n.height*this.swapThreshold)?e.nextElementSibling:e;o!==this.dragItem&&this.container.insertBefore(this.dragItem,o)};handleDrop=t=>{this.dragItem&&(t.preventDefault(),this.finish(t))};handleDragEnd=t=>{this.dragItem&&(t.preventDefault(),this.finish(t))};finish(t){if(!this.dragItem)return;const e=this.getElementIndex(this.dragItem),n={oldIndex:this.startIndex,newIndex:e,item:this.dragItem,from:this.container,to:this.container};this.options.onEnd&&this.options.onEnd(n),this.options.onUpdate&&void 0!==this.startIndex&&e!==this.startIndex&&this.options.onUpdate(n),this.dragItem=void 0,this.startIndex=void 0}ensureDraggable(){this.getItems().forEach(t=>{t.getAttribute("draggable")||t.setAttribute("draggable","true")})}getItems(){return(this.options.draggable?Array.from(this.container.querySelectorAll(this.options.draggable)):Array.from(this.container.children)).filter(t=>t.parentElement===this.container)}getSortableElement(t){if(!t)return null;let e=t;for(;e&&e!==this.container;){if(this.isSortableItem(e))return e;e=e.parentElement}return null}isSortableItem(t){return this.options.draggable?t.matches(this.options.draggable)&&t.parentElement===this.container:t.parentElement===this.container}hasValidHandle(t,e){if(!this.options.handle||!t)return!0;const n=t.closest(this.options.handle);return!!n&&e.contains(n)}getElementIndex(t){return this.getItems().indexOf(t)}resolveDirection(){if("horizontal"===this.options.direction||"vertical"===this.options.direction)return this.options.direction;const t=this.container.tagName.toLowerCase();if("tr"===t)return"horizontal";if("tbody"===t||"ul"===t||"ol"===t)return"vertical";const e=window.getComputedStyle(this.container),n="flex"===e.display&&e.flexDirection.startsWith("row"),o="grid"===e.display&&e.gridAutoFlow.includes("column");return n||o?"horizontal":"vertical"}resolveSwapThreshold(){const t="number"==typeof this.options.swapThreshold?this.options.swapThreshold:.45;return t>0&&t<1?t:.45}}const SORTABLEJS_DEFAULT_OPTIONS=new InjectionToken("SORTABLEJS_DEFAULT_OPTIONS");class SortablejsDirective{_el;defaultOptions;items;options;sortableInstance;constructor(t,e){this._el=t,this.defaultOptions=e}ngOnInit(){const t={animation:150,onEnd:t=>{this.updateOrder(t),this.options&&"function"==typeof this.options.onEnd&&this.options.onEnd(t),this.options&&"function"==typeof this.options.onUpdate&&t.oldIndex!==t.newIndex&&this.options.onUpdate(t)}},e=Object.assign({},t,this.defaultOptions||{},this.options||{});this.sortableInstance=Sortable.create(this._el.nativeElement,e)}ngOnDestroy(){this.sortableInstance&&this.sortableInstance.destroy()}updateOrder(t){if(this.items&&void 0!==t.oldIndex&&void 0!==t.newIndex&&t.oldIndex!==t.newIndex)if(this.isFormArray(this.items)){const e=this.items.at(t.oldIndex);this.items.removeAt(t.oldIndex),this.items.insert(t.newIndex,e)}else if(Array.isArray(this.items)){const e=this.items.splice(t.oldIndex,1)[0];this.items.splice(t.newIndex,0,e)}}isFormArray(t){return t&&"function"==typeof t.at&&"function"==typeof t.removeAt&&"function"==typeof t.insert}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SortablejsDirective,deps:[{token:i0.ElementRef},{token:SORTABLEJS_DEFAULT_OPTIONS,optional:!0}],target:i0.ɵɵFactoryTarget.Directive});static"ɵdir"=i0.ɵɵngDeclareDirective({minVersion:"14.0.0",version:"21.0.1",type:SortablejsDirective,isStandalone:!1,selector:"[sortablejs]",inputs:{items:["sortablejs","items"],options:["sortablejsOptions","options"]},ngImport:i0})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SortablejsDirective,decorators:[{type:Directive,args:[{selector:"[sortablejs]",standalone:!1}]}],ctorParameters:()=>[{type:i0.ElementRef},{type:void 0,decorators:[{type:Optional},{type:Inject,args:[SORTABLEJS_DEFAULT_OPTIONS]}]}],propDecorators:{items:[{type:Input,args:["sortablejs"]}],options:[{type:Input,args:["sortablejsOptions"]}]}});class SortablejsModule{static forRoot(t){return{ngModule:SortablejsModule,providers:t?[{provide:SORTABLEJS_DEFAULT_OPTIONS,useValue:t}]:[]}}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SortablejsModule,deps:[],target:i0.ɵɵFactoryTarget.NgModule});static"ɵmod"=i0.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"21.0.1",ngImport:i0,type:SortablejsModule,declarations:[SortablejsDirective],exports:[SortablejsDirective]});static"ɵinj"=i0.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SortablejsModule})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SortablejsModule,decorators:[{type:NgModule,args:[{declarations:[SortablejsDirective],exports:[SortablejsDirective]}]}]});class NgDragDropService{dragData;dragEffect=null;scope=null;onDragStart=new Subject;onDragEnd=new Subject;static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:NgDragDropService,deps:[],target:i0.ɵɵFactoryTarget.Injectable});static"ɵprov"=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:NgDragDropService,providedIn:"root"})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:NgDragDropService,decorators:[{type:Injectable,args:[{providedIn:"root"}]}]});class DomHelper{static addClass(t,e){const n=this.resolveElement(t);n&&(n.classList.contains(e)||n.classList.add(e))}static removeClass(t,e){const n=this.resolveElement(t);n&&n.classList.remove(e)}static matches(t,e){if(!t)return!1;const n=t.matches||t.msMatchesSelector||t.mozMatchesSelector||t.webkitMatchesSelector;return!!n&&n.call(t,e)}static resolveElement(t){return t?t.nativeElement?t.nativeElement:t:null}}class Draggable{el;renderer;ng2DragDropService;zone;dragData;dragHandle;dragEffect="move";dragScope="default";dragHandleClass="drag-handle";dragClass="drag-border";dragTransitClass="drag-transit";onDragStart=new EventEmitter;onDrag=new EventEmitter;onDragEnd=new EventEmitter;mouseDownElement;_dragEnabled=!0;_dragImage;dragImageElement;unbindDragListener;constructor(t,e,n,o){this.el=t,this.renderer=e,this.ng2DragDropService=n,this.zone=o}get dragEnabled(){return this._dragEnabled}set dragEnabled(t){this._dragEnabled=t,this.applyDragHandleClass()}get dragImage(){return this._dragImage}set dragImage(t){this._dragImage=t,this.dragImageElement=new Image,this.dragImageElement.src=this._dragImage}ngOnInit(){this.applyDragHandleClass()}ngOnDestroy(){this.unbindDragListeners()}dragStart(t){if(this.allowDrag()){DomHelper.addClass(this.el,this.dragTransitClass),setTimeout(()=>{DomHelper.addClass(this.el,this.dragClass),DomHelper.removeClass(this.el,this.dragTransitClass)},10),this.ng2DragDropService.dragData=this.dragData,this.ng2DragDropService.scope=this.dragScope,this.ng2DragDropService.dragEffect=this.dragEffect;const e=this.getDragHandleElement();e&&this.updateCursor(e,"grabbing"),null!=t.dataTransfer&&(t.dataTransfer.effectAllowed=this.dragEffect,t.dataTransfer.dropEffect=this.dragEffect,t.dataTransfer.setData("text","")),this.dragImage&&t.dataTransfer&&t.dataTransfer.setDragImage(this.dragImageElement,0,0),t.stopPropagation(),this.onDragStart.emit(t),this.ng2DragDropService.onDragStart.next(),this.zone.runOutsideAngular(()=>{this.unbindDragListener=this.renderer.listen(this.el.nativeElement,"drag",t=>{this.drag(t)})})}else t.preventDefault()}drag(t){this.onDrag.emit(t)}dragEnd(t){this.unbindDragListeners(),DomHelper.removeClass(this.el,this.dragClass),this.ng2DragDropService.dragData=null,this.ng2DragDropService.dragEffect=null,this.ng2DragDropService.scope=null;const e=this.getDragHandleElement();e&&this.updateCursor(e,this.dragEnabled?"grab":null),this.ng2DragDropService.onDragEnd.next(),this.onDragEnd.emit(t),t.stopPropagation(),t.preventDefault()}mousedown(t){this.mouseDownElement=t.target}allowDrag(){return this.dragHandle?DomHelper.matches(this.mouseDownElement,this.dragHandle)&&this.dragEnabled:this.dragEnabled}applyDragHandleClass(){const t=this.getDragHandleElement();t&&(this.dragEnabled?DomHelper.addClass(t,this.dragHandleClass):DomHelper.removeClass(t,this.dragHandleClass),this.updateCursor(t,this.dragEnabled?"grab":null))}getDragHandleElement(){let t=this.el.nativeElement;return this.dragHandle&&(t=this.el.nativeElement.querySelector(this.dragHandle)),t}unbindDragListeners(){this.unbindDragListener&&this.unbindDragListener()}updateCursor(t,e){e?this.renderer.setStyle(t,"cursor",e):this.renderer.removeStyle(t,"cursor")}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:Draggable,deps:[{token:i0.ElementRef},{token:i0.Renderer2},{token:NgDragDropService},{token:i0.NgZone}],target:i0.ɵɵFactoryTarget.Directive});static"ɵdir"=i0.ɵɵngDeclareDirective({minVersion:"14.0.0",version:"21.0.1",type:Draggable,isStandalone:!1,selector:"[draggable]",inputs:{dragData:"dragData",dragHandle:"dragHandle",dragEffect:"dragEffect",dragScope:"dragScope",dragHandleClass:"dragHandleClass",dragClass:"dragClass",dragTransitClass:"dragTransitClass",dragEnabled:"dragEnabled",dragImage:"dragImage"},outputs:{onDragStart:"onDragStart",onDrag:"onDrag",onDragEnd:"onDragEnd"},host:{listeners:{dragstart:"dragStart($event)",dragend:"dragEnd($event)",mousedown:"mousedown($event)",touchstart:"mousedown($event)"},properties:{draggable:"this.dragEnabled"}},ngImport:i0})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:Draggable,decorators:[{type:Directive,args:[{selector:"[draggable]",standalone:!1}]}],ctorParameters:()=>[{type:i0.ElementRef},{type:i0.Renderer2},{type:NgDragDropService},{type:i0.NgZone}],propDecorators:{dragData:[{type:Input}],dragHandle:[{type:Input}],dragEffect:[{type:Input}],dragScope:[{type:Input}],dragHandleClass:[{type:Input}],dragClass:[{type:Input}],dragTransitClass:[{type:Input}],onDragStart:[{type:Output}],onDrag:[{type:Output}],onDragEnd:[{type:Output}],dragEnabled:[{type:Input},{type:HostBinding,args:["draggable"]}],dragImage:[{type:Input}],dragStart:[{type:HostListener,args:["dragstart",["$event"]]}],dragEnd:[{type:HostListener,args:["dragend",["$event"]]}],mousedown:[{type:HostListener,args:["mousedown",["$event"]]},{type:HostListener,args:["touchstart",["$event"]]}]}});class DropEvent{nativeEvent;dragData;constructor(t,e){this.nativeEvent=t,this.dragData=e}}class Droppable{el;renderer;ng2DragDropService;zone;onDragEnter=new EventEmitter;onDragOver=new EventEmitter;onDragLeave=new EventEmitter;onDrop=new EventEmitter;dragOverClass="drag-over-border";dragHintClass="drag-hint-border";dropScope="default";_dropEnabled=!0;_isDragActive=!1;_isServiceActive=!1;dragStartSubscription;dragEndSubscription;unbindDragEnterListener;unbindDragOverListener;unbindDragLeaveListener;constructor(t,e,n,o){this.el=t,this.renderer=e,this.ng2DragDropService=n,this.zone=o}get dropEnabled(){return this._dropEnabled}set dropEnabled(t){this._dropEnabled=t,!0===this._dropEnabled?this.subscribeService():this.unsubscribeService()}ngOnInit(){!0===this.dropEnabled&&this.subscribeService()}ngOnDestroy(){this.unsubscribeService(),this.unbindDragListeners()}drop(t){this.allowDrop().subscribe(e=>{e&&this._isDragActive&&(DomHelper.removeClass(this.el,this.dragOverClass),t.preventDefault(),t.stopPropagation(),this.ng2DragDropService.onDragEnd.next(),this.onDrop.emit(new DropEvent(t,this.ng2DragDropService.dragData)),this.ng2DragDropService.dragData=null,this.ng2DragDropService.dragEffect=null,this.ng2DragDropService.scope=null)})}dragEnter(t){t.preventDefault(),t.stopPropagation(),this.onDragEnter.emit(t)}dragOver(t,e){if(e){if(DomHelper.addClass(this.el,this.dragOverClass),t.dataTransfer){const e=this.ng2DragDropService.dragEffect??"move";t.dataTransfer.dropEffect=e}t.preventDefault(),this.onDragOver.emit(t)}}dragLeave(t){DomHelper.removeClass(this.el,this.dragOverClass),t.preventDefault(),this.onDragLeave.emit(t)}allowDrop(){let t=!1;if("string"==typeof this.dropScope)"string"==typeof this.ng2DragDropService.scope?t=this.ng2DragDropService.scope===this.dropScope:this.ng2DragDropService.scope instanceof Array&&(t=this.ng2DragDropService.scope.indexOf(this.dropScope)>-1);else if(this.dropScope instanceof Array)"string"==typeof this.ng2DragDropService.scope?t=this.dropScope.indexOf(this.ng2DragDropService.scope)>-1:this.ng2DragDropService.scope instanceof Array&&(t=this.dropScope.filter(t=>-1!==this.ng2DragDropService.scope.indexOf(t)).length>0);else if("function"==typeof this.dropScope&&(t=this.dropScope(this.ng2DragDropService.dragData),t instanceof Observable))return t.pipe(map(t=>t&&this.dropEnabled));return of(t&&this.dropEnabled)}subscribeService(){!0!==this._isServiceActive&&(this._isServiceActive=!0,this.dragStartSubscription=this.ng2DragDropService.onDragStart.subscribe(()=>{this._isDragActive=!0,this.allowDrop().subscribe(t=>{t&&this._isDragActive&&(DomHelper.addClass(this.el,this.dragHintClass),this.zone.runOutsideAngular(()=>{this.unbindDragEnterListener=this.renderer.listen(this.el.nativeElement,"dragenter",t=>{this.dragEnter(t)}),this.unbindDragOverListener=this.renderer.listen(this.el.nativeElement,"dragover",e=>{this.dragOver(e,t)}),this.unbindDragLeaveListener=this.renderer.listen(this.el.nativeElement,"dragleave",t=>{this.dragLeave(t)})}))})}),this.dragEndSubscription=this.ng2DragDropService.onDragEnd.subscribe(()=>{this._isDragActive=!1,DomHelper.removeClass(this.el,this.dragHintClass),this.unbindDragListeners()}))}unsubscribeService(){this._isServiceActive=!1,this.dragStartSubscription&&this.dragStartSubscription.unsubscribe(),this.dragEndSubscription&&this.dragEndSubscription.unsubscribe()}unbindDragListeners(){this.unbindDragEnterListener&&this.unbindDragEnterListener(),this.unbindDragOverListener&&this.unbindDragOverListener(),this.unbindDragLeaveListener&&this.unbindDragLeaveListener()}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:Droppable,deps:[{token:i0.ElementRef},{token:i0.Renderer2},{token:NgDragDropService},{token:i0.NgZone}],target:i0.ɵɵFactoryTarget.Directive});static"ɵdir"=i0.ɵɵngDeclareDirective({minVersion:"14.0.0",version:"21.0.1",type:Droppable,isStandalone:!1,selector:"[droppable]",inputs:{dragOverClass:"dragOverClass",dragHintClass:"dragHintClass",dropScope:"dropScope",dropEnabled:"dropEnabled"},outputs:{onDragEnter:"onDragEnter",onDragOver:"onDragOver",onDragLeave:"onDragLeave",onDrop:"onDrop"},host:{listeners:{drop:"drop($event)"}},ngImport:i0})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:Droppable,decorators:[{type:Directive,args:[{selector:"[droppable]",standalone:!1}]}],ctorParameters:()=>[{type:i0.ElementRef},{type:i0.Renderer2},{type:NgDragDropService},{type:i0.NgZone}],propDecorators:{onDragEnter:[{type:Output}],onDragOver:[{type:Output}],onDragLeave:[{type:Output}],onDrop:[{type:Output}],dragOverClass:[{type:Input}],dragHintClass:[{type:Input}],dropScope:[{type:Input}],dropEnabled:[{type:Input}],drop:[{type:HostListener,args:["drop",["$event"]]}]}});class NgDragDropModule{static forRoot(){return{ngModule:NgDragDropModule,providers:[NgDragDropService]}}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:NgDragDropModule,deps:[],target:i0.ɵɵFactoryTarget.NgModule});static"ɵmod"=i0.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"21.0.1",ngImport:i0,type:NgDragDropModule,declarations:[Draggable,Droppable],exports:[Draggable,Droppable]});static"ɵinj"=i0.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:NgDragDropModule})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:NgDragDropModule,decorators:[{type:NgModule,args:[{declarations:[Draggable,Droppable],exports:[Draggable,Droppable]}]}]});class SharedModule{static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SharedModule,deps:[],target:i0.ɵɵFactoryTarget.NgModule});static"ɵmod"=i0.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"21.0.1",ngImport:i0,type:SharedModule,imports:[ReactiveFormsModule,FormsModule,CollapseTableModule,RouterModule,NgbModule,NgbAccordionModule,FormButtonModule,ResponsiveButtonGroupModule,PipeModule,UserRoleModule,NgSelectModule,SortTableModule,CommonModule,SortablejsModule,NgDragDropModule,RioDatePickerModule],exports:[ReactiveFormsModule,FormsModule,CollapseTableModule,RouterModule,NgbModule,NgbAccordionModule,FormButtonModule,ResponsiveButtonGroupModule,PipeModule,UserRoleModule,NgSelectModule,SortTableModule,CommonModule,SortablejsModule,NgDragDropModule,RioDatePickerModule]});static"ɵinj"=i0.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SharedModule,imports:[ReactiveFormsModule,FormsModule,CollapseTableModule,RouterModule,NgbModule,NgbAccordionModule,FormButtonModule,ResponsiveButtonGroupModule,PipeModule,UserRoleModule,NgSelectModule,SortTableModule,CommonModule,SortablejsModule,NgDragDropModule,RioDatePickerModule,ReactiveFormsModule,FormsModule,CollapseTableModule,RouterModule,NgbModule,NgbAccordionModule,FormButtonModule,ResponsiveButtonGroupModule,PipeModule,UserRoleModule,NgSelectModule,SortTableModule,CommonModule,SortablejsModule,NgDragDropModule,RioDatePickerModule]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SharedModule,decorators:[{type:NgModule,args:[{imports:[ReactiveFormsModule,FormsModule,CollapseTableModule,RouterModule,NgbModule,NgbAccordionModule,FormButtonModule,ResponsiveButtonGroupModule,PipeModule,UserRoleModule,NgSelectModule,SortTableModule,CommonModule,SortablejsModule,NgDragDropModule,RioDatePickerModule],exports:[ReactiveFormsModule,FormsModule,CollapseTableModule,RouterModule,NgbModule,NgbAccordionModule,FormButtonModule,ResponsiveButtonGroupModule,PipeModule,UserRoleModule,NgSelectModule,SortTableModule,CommonModule,SortablejsModule,NgDragDropModule,RioDatePickerModule]}]}]});class ForgotPasswordComponent extends BaseComponent{_route;_services;_http;_ds;serverURL="";form;user;subscription$=[];token;disableFormButton=!1;constructor(t,e,n,o){super(e),this._route=t,this._services=e,this._http=n,this._ds=o}ngOnInit(){2!==this._route.snapshot.queryParamMap.keys.length?(this._ds.error("Invalid params"),this._services._router.navigateByUrl("/home")):(this.serverURL=this._route.snapshot.queryParamMap.keys[0],this.token=this._route.snapshot.queryParamMap.keys[1]),this.form=this._services._fb.group({password:["",[Validators.compose([Validators.required,Validators.minLength(6)])]],confirm_password:["",[Validators.compose([Validators.required,Validators.minLength(6)])]]},{validator:this._services._vs.matchPassword}),this._http.post(this.serverURL+"/userWithForgotPasswordToken",{forgotPasswordToken:this.token}).toPromise().then(t=>{t.error?(this._ds.error("Invalid token"),this._services._router.navigateByUrl("/home")):this.user=t.result.user},t=>{this._ds.error("Invalid token"),this._services._router.navigateByUrl("/home")})}ngOnDestroy(){this.subscription$.forEach(t=>{t.unsubscribe()})}submit(){this.disableFormButton=!0,this._http.post(this.serverURL+"/setUserWithForgotPasswordToken",{forgotPasswordToken:this.token,password:this.form.value.password}).toPromise().then(t=>{t.error?(this._ds.error("Could not update user"),this._services._router.navigateByUrl("/home")):(this._services._alert.setAlert("success","User has been updated, please log in"),this._services._router.navigateByUrl("/home"))},t=>{this._ds.error("Invalid token"),this._services._router.navigateByUrl("/home")}),this._services._router.navigateByUrl("/home")}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:ForgotPasswordComponent,deps:[{token:i1$1.ActivatedRoute},{token:ProviderService},{token:i4.HttpClient},{token:DialogService}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"21.0.1",type:ForgotPasswordComponent,isStandalone:!1,selector:"resolveio-forgot-password",providers:[ProviderService],usesInheritance:!0,ngImport:i0,template:'<style>\n\tinput {\n\t\twidth: 100%;\n\t}\n</style>\n\n@if (user) {\n\t<h4>\n\t\tWelcome to ResolveIO.\n\t\t<br />\n\t\t<br />\n\t\tYour username will be {{ user.username }}. Please create a password for your account.\n\t</h4>\n\t<form [formGroup]="form" novalidate (ngSubmit)="submit()">\n\t\t<div class="row">\n\t\t\t<div class="col-lg-12">\n\t\t\t\t<div class="form-group">\n\t\t\t\t\t<label class="form-control-label">Username</label>\n\t\t\t\t\t{{ user.username }}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class="row">\n\t\t\t<div class="col-lg-12">\n\t\t\t\t<div class="form-group">\n\t\t\t\t\t<label class="form-control-label">Password</label>\n\t\t\t\t\t@if (form.controls.password.hasError(\'required\')) {\n\t\t\t\t\t\t<em>- Required</em>\n\t\t\t\t\t}\n\t\t\t\t\t@if (form.controls.password.hasError(\'minlength\') || form.hasError(\'matchPassword\')) {\n\t\t\t\t\t\t<em>- Invalid</em>\n\t\t\t\t\t}\n\t\t\t\t\t<input type="text" [ngClass]="[\'form-control\', form.controls.password.valid && form.valid ? \'is-valid\' : \'is-invalid\']" formControlName="password" type="password" autocomplete="new-password" />\n\t\t\t\t\t@if (form.controls.password.hasError(\'required\')) {\n\t\t\t\t\t\t<div class="invalid-feedback">Password is required</div>\n\t\t\t\t\t}\n\t\t\t\t\t@if (form.controls.password.hasError(\'minlength\')) {\n\t\t\t\t\t\t<div class="invalid-feedback">Password must be 6 or more characters</div>\n\t\t\t\t\t}\n\t\t\t\t\t@if (!form.controls.password.hasError(\'minlength\') && form.hasError(\'matchPassword\')) {\n\t\t\t\t\t\t<div class="invalid-feedback" align="start">Passwords do not match</div>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class="row">\n\t\t\t<div class="col-lg-12">\n\t\t\t\t<div class="form-group">\n\t\t\t\t\t<label class="form-control-label">Confirm Password</label>\n\t\t\t\t\t@if (form.controls.confirm_password.hasError(\'required\')) {\n\t\t\t\t\t\t<em>- Required</em>\n\t\t\t\t\t}\n\t\t\t\t\t@if (form.hasError(\'matchPassword\')) {\n\t\t\t\t\t\t<em>- Invalid</em>\n\t\t\t\t\t}\n\t\t\t\t\t<input type="text" [ngClass]="[\'form-control\', form.controls.confirm_password.valid ? \'is-valid\' : \'is-invalid\']" formControlName="confirm_password" type="password" autocomplete="new-password" />\n\t\t\t\t\t@if (form.controls.confirm_password.hasError(\'required\')) {\n\t\t\t\t\t\t<div class="invalid-feedback">Password is required</div>\n\t\t\t\t\t}\n\t\t\t\t\t@if (form.hasError(\'matchPassword\')) {\n\t\t\t\t\t\t<div class="invalid-feedback" align="start">Passwords do not match</div>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class="row" style="margin-top: 30px">\n\t\t\t<div class="col-lg-12">\n\t\t\t\t<form-button [form]="form" [disabled]="disableFormButton"></form-button>\n\t\t\t</div>\n\t\t</div>\n\t</form>\n}\n',styles:["input{width:100%}\n"],dependencies:[{kind:"directive",type:i2.ɵNgNoValidate,selector:"form:not([ngNoForm]):not([ngNativeValidate])"},{kind:"directive",type:i2.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:i2.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:i2.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:i2.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:i2.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"component",type:FormButtonComponent,selector:"form-button",inputs:["form","disabled","type"]},{kind:"directive",type:i7.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]}]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:ForgotPasswordComponent,decorators:[{type:Component,args:[{selector:"resolveio-forgot-password",providers:[ProviderService],standalone:!1,template:'<style>\n\tinput {\n\t\twidth: 100%;\n\t}\n</style>\n\n@if (user) {\n\t<h4>\n\t\tWelcome to ResolveIO.\n\t\t<br />\n\t\t<br />\n\t\tYour username will be {{ user.username }}. Please create a password for your account.\n\t</h4>\n\t<form [formGroup]="form" novalidate (ngSubmit)="submit()">\n\t\t<div class="row">\n\t\t\t<div class="col-lg-12">\n\t\t\t\t<div class="form-group">\n\t\t\t\t\t<label class="form-control-label">Username</label>\n\t\t\t\t\t{{ user.username }}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class="row">\n\t\t\t<div class="col-lg-12">\n\t\t\t\t<div class="form-group">\n\t\t\t\t\t<label class="form-control-label">Password</label>\n\t\t\t\t\t@if (form.controls.password.hasError(\'required\')) {\n\t\t\t\t\t\t<em>- Required</em>\n\t\t\t\t\t}\n\t\t\t\t\t@if (form.controls.password.hasError(\'minlength\') || form.hasError(\'matchPassword\')) {\n\t\t\t\t\t\t<em>- Invalid</em>\n\t\t\t\t\t}\n\t\t\t\t\t<input type="text" [ngClass]="[\'form-control\', form.controls.password.valid && form.valid ? \'is-valid\' : \'is-invalid\']" formControlName="password" type="password" autocomplete="new-password" />\n\t\t\t\t\t@if (form.controls.password.hasError(\'required\')) {\n\t\t\t\t\t\t<div class="invalid-feedback">Password is required</div>\n\t\t\t\t\t}\n\t\t\t\t\t@if (form.controls.password.hasError(\'minlength\')) {\n\t\t\t\t\t\t<div class="invalid-feedback">Password must be 6 or more characters</div>\n\t\t\t\t\t}\n\t\t\t\t\t@if (!form.controls.password.hasError(\'minlength\') && form.hasError(\'matchPassword\')) {\n\t\t\t\t\t\t<div class="invalid-feedback" align="start">Passwords do not match</div>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class="row">\n\t\t\t<div class="col-lg-12">\n\t\t\t\t<div class="form-group">\n\t\t\t\t\t<label class="form-control-label">Confirm Password</label>\n\t\t\t\t\t@if (form.controls.confirm_password.hasError(\'required\')) {\n\t\t\t\t\t\t<em>- Required</em>\n\t\t\t\t\t}\n\t\t\t\t\t@if (form.hasError(\'matchPassword\')) {\n\t\t\t\t\t\t<em>- Invalid</em>\n\t\t\t\t\t}\n\t\t\t\t\t<input type="text" [ngClass]="[\'form-control\', form.controls.confirm_password.valid ? \'is-valid\' : \'is-invalid\']" formControlName="confirm_password" type="password" autocomplete="new-password" />\n\t\t\t\t\t@if (form.controls.confirm_password.hasError(\'required\')) {\n\t\t\t\t\t\t<div class="invalid-feedback">Password is required</div>\n\t\t\t\t\t}\n\t\t\t\t\t@if (form.hasError(\'matchPassword\')) {\n\t\t\t\t\t\t<div class="invalid-feedback" align="start">Passwords do not match</div>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class="row" style="margin-top: 30px">\n\t\t\t<div class="col-lg-12">\n\t\t\t\t<form-button [form]="form" [disabled]="disableFormButton"></form-button>\n\t\t\t</div>\n\t\t</div>\n\t</form>\n}\n'}]}],ctorParameters:()=>[{type:i1$1.ActivatedRoute},{type:ProviderService},{type:i4.HttpClient},{type:DialogService}]});class EnrollComponent extends BaseComponent{_route;_services;_http;_ds;serverURL="";form;user;subscription$=[];token;disableFormButton=!1;constructor(t,e,n,o){super(e),this._route=t,this._services=e,this._http=n,this._ds=o}ngOnInit(){2!==this._route.snapshot.queryParamMap.keys.length?(this._ds.error("Invalid params"),this._services._router.navigateByUrl("/home")):(this.serverURL=this._route.snapshot.queryParamMap.keys[0],this.token=this._route.snapshot.queryParamMap.keys[1]),this.form=this._services._fb.group({password:["",[Validators.compose([Validators.required,Validators.minLength(6)])]],confirm_password:["",[Validators.compose([Validators.required,Validators.minLength(6)])]]},{validator:this._services._vs.matchPassword}),this._http.post(this.serverURL+"/userWithEnrollmentToken",{enrollmentToken:this.token}).toPromise().then(t=>{t.error?(this._ds.error("Invalid token"),this._services._router.navigateByUrl("/home")):this.user=t.result.user},t=>{this._ds.error("Invalid token"),this._services._router.navigateByUrl("/home")})}ngOnDestroy(){this.subscription$.forEach(t=>{t.unsubscribe()})}submit(){this.disableFormButton=!0,this._http.post(this.serverURL+"/setUserWithEnrollmentToken",{enrollmentToken:this.token,password:this.form.value.password}).toPromise().then(t=>{t.error?(this._ds.error("Could not update user"),this._services._router.navigateByUrl("/home")):(this._services._alert.setAlert("success","User has been updated, please log in"),this._services._router.navigateByUrl("/home"))},t=>{this._ds.error("Invalid token"),this._services._router.navigateByUrl("/home")})}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:EnrollComponent,deps:[{token:i1$1.ActivatedRoute},{token:ProviderService},{token:i4.HttpClient},{token:DialogService}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"21.0.1",type:EnrollComponent,isStandalone:!1,selector:"resolveio-enroll",providers:[ProviderService],usesInheritance:!0,ngImport:i0,template:'<style>\n\tinput {\n\t\twidth: 100%;\n\t}\n</style>\n\n@if (user) {\n\t<h4>\n\t\tWelcome to ResolveIO.\n\t\t<br />\n\t\t<br />\n\t\tYour username will be {{ user.username }}. Please create a password for your account.\n\t</h4>\n\t<form [formGroup]="form" novalidate (ngSubmit)="submit()">\n\t\t<div class="row">\n\t\t\t<div class="col-lg-12">\n\t\t\t\t<div class="form-group">\n\t\t\t\t\t<label class="form-control-label">Username</label>\n\t\t\t\t\t{{ user.username }}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class="row">\n\t\t\t<div class="col-lg-12">\n\t\t\t\t<div class="form-group">\n\t\t\t\t\t<label class="form-control-label">Password</label>\n\t\t\t\t\t@if (form.controls.password.hasError(\'required\')) {\n\t\t\t\t\t\t<em>- Required</em>\n\t\t\t\t\t}\n\t\t\t\t\t@if (form.controls.password.hasError(\'minlength\') || form.hasError(\'matchPassword\')) {\n\t\t\t\t\t\t<em>- Invalid</em>\n\t\t\t\t\t}\n\t\t\t\t\t<input type="text" [ngClass]="[\'form-control\', form.controls.password.valid && !form.hasError(\'matchPassword\') ? \'is-valid\' : \'is-invalid\']" formControlName="password" type="password" autocomplete="new-password" />\n\t\t\t\t\t@if (form.controls.password.hasError(\'required\')) {\n\t\t\t\t\t\t<div class="invalid-feedback">Password is required</div>\n\t\t\t\t\t}\n\t\t\t\t\t@if (form.controls.password.hasError(\'minlength\')) {\n\t\t\t\t\t\t<div class="invalid-feedback">Password must be 6 or more characters</div>\n\t\t\t\t\t}\n\t\t\t\t\t@if (!form.controls.password.hasError(\'minlength\') && form.hasError(\'matchPassword\')) {\n\t\t\t\t\t\t<div class="invalid-feedback" align="start">Passwords do not match</div>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class="row">\n\t\t\t<div class="col-lg-12">\n\t\t\t\t<div class="form-group">\n\t\t\t\t\t<label class="form-control-label">Confirm Password</label>\n\t\t\t\t\t@if (form.controls.confirm_password.hasError(\'required\')) {\n\t\t\t\t\t\t<em>- Required</em>\n\t\t\t\t\t}\n\t\t\t\t\t@if (form.hasError(\'matchPassword\')) {\n\t\t\t\t\t\t<em>- Invalid</em>\n\t\t\t\t\t}\n\t\t\t\t\t<input type="text" [ngClass]="[\'form-control\', form.controls.confirm_password.valid && !form.hasError(\'matchPassword\') ? \'is-valid\' : \'is-invalid\']" formControlName="confirm_password" type="password" autocomplete="new-password" />\n\t\t\t\t\t@if (form.controls.confirm_password.hasError(\'required\')) {\n\t\t\t\t\t\t<div class="invalid-feedback">Password is required</div>\n\t\t\t\t\t}\n\t\t\t\t\t@if (form.hasError(\'matchPassword\')) {\n\t\t\t\t\t\t<div class="invalid-feedback" align="start">Passwords do not match</div>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class="row" style="margin-top: 30px">\n\t\t\t<div class="col-lg-12">\n\t\t\t\t<form-button [form]="form" [disabled]="disableFormButton"></form-button>\n\t\t\t</div>\n\t\t</div>\n\t</form>\n}\n',styles:["input{width:100%}\n"],dependencies:[{kind:"directive",type:i2.ɵNgNoValidate,selector:"form:not([ngNoForm]):not([ngNativeValidate])"},{kind:"directive",type:i2.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:i2.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:i2.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:i2.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:i2.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"component",type:FormButtonComponent,selector:"form-button",inputs:["form","disabled","type"]},{kind:"directive",type:i7.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]}]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:EnrollComponent,decorators:[{type:Component,args:[{selector:"resolveio-enroll",providers:[ProviderService],standalone:!1,template:'<style>\n\tinput {\n\t\twidth: 100%;\n\t}\n</style>\n\n@if (user) {\n\t<h4>\n\t\tWelcome to ResolveIO.\n\t\t<br />\n\t\t<br />\n\t\tYour username will be {{ user.username }}. Please create a password for your account.\n\t</h4>\n\t<form [formGroup]="form" novalidate (ngSubmit)="submit()">\n\t\t<div class="row">\n\t\t\t<div class="col-lg-12">\n\t\t\t\t<div class="form-group">\n\t\t\t\t\t<label class="form-control-label">Username</label>\n\t\t\t\t\t{{ user.username }}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class="row">\n\t\t\t<div class="col-lg-12">\n\t\t\t\t<div class="form-group">\n\t\t\t\t\t<label class="form-control-label">Password</label>\n\t\t\t\t\t@if (form.controls.password.hasError(\'required\')) {\n\t\t\t\t\t\t<em>- Required</em>\n\t\t\t\t\t}\n\t\t\t\t\t@if (form.controls.password.hasError(\'minlength\') || form.hasError(\'matchPassword\')) {\n\t\t\t\t\t\t<em>- Invalid</em>\n\t\t\t\t\t}\n\t\t\t\t\t<input type="text" [ngClass]="[\'form-control\', form.controls.password.valid && !form.hasError(\'matchPassword\') ? \'is-valid\' : \'is-invalid\']" formControlName="password" type="password" autocomplete="new-password" />\n\t\t\t\t\t@if (form.controls.password.hasError(\'required\')) {\n\t\t\t\t\t\t<div class="invalid-feedback">Password is required</div>\n\t\t\t\t\t}\n\t\t\t\t\t@if (form.controls.password.hasError(\'minlength\')) {\n\t\t\t\t\t\t<div class="invalid-feedback">Password must be 6 or more characters</div>\n\t\t\t\t\t}\n\t\t\t\t\t@if (!form.controls.password.hasError(\'minlength\') && form.hasError(\'matchPassword\')) {\n\t\t\t\t\t\t<div class="invalid-feedback" align="start">Passwords do not match</div>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class="row">\n\t\t\t<div class="col-lg-12">\n\t\t\t\t<div class="form-group">\n\t\t\t\t\t<label class="form-control-label">Confirm Password</label>\n\t\t\t\t\t@if (form.controls.confirm_password.hasError(\'required\')) {\n\t\t\t\t\t\t<em>- Required</em>\n\t\t\t\t\t}\n\t\t\t\t\t@if (form.hasError(\'matchPassword\')) {\n\t\t\t\t\t\t<em>- Invalid</em>\n\t\t\t\t\t}\n\t\t\t\t\t<input type="text" [ngClass]="[\'form-control\', form.controls.confirm_password.valid && !form.hasError(\'matchPassword\') ? \'is-valid\' : \'is-invalid\']" formControlName="confirm_password" type="password" autocomplete="new-password" />\n\t\t\t\t\t@if (form.controls.confirm_password.hasError(\'required\')) {\n\t\t\t\t\t\t<div class="invalid-feedback">Password is required</div>\n\t\t\t\t\t}\n\t\t\t\t\t@if (form.hasError(\'matchPassword\')) {\n\t\t\t\t\t\t<div class="invalid-feedback" align="start">Passwords do not match</div>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class="row" style="margin-top: 30px">\n\t\t\t<div class="col-lg-12">\n\t\t\t\t<form-button [form]="form" [disabled]="disableFormButton"></form-button>\n\t\t\t</div>\n\t\t</div>\n\t</form>\n}\n'}]}],ctorParameters:()=>[{type:i1$1.ActivatedRoute},{type:ProviderService},{type:i4.HttpClient},{type:DialogService}]});class Auth365Component extends BaseComponent{_app;_route;_services;_http;_ds;_socket;token;constructor(t,e,n,o,r,i){super(n),this._app=t,this._route=e,this._services=n,this._http=o,this._ds=r,this._socket=i,this._app.environment.value.MS_id_token?this._services._account.logIn365(this._app.environment.value.MS_id_token).then(()=>{this._services._router.navigateByUrl("/home")},()=>{}):this._services._router.navigateByUrl("/home")}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:Auth365Component,deps:[{token:CoreService},{token:i1$1.ActivatedRoute},{token:ProviderService},{token:i4.HttpClient},{token:DialogService},{token:SocketManagerService}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"21.0.1",type:Auth365Component,isStandalone:!1,selector:"resolveio-auth365",providers:[ProviderService],usesInheritance:!0,ngImport:i0,template:"<router-outlet></router-outlet>",isInline:!0,dependencies:[{kind:"directive",type:i1$1.RouterOutlet,selector:"router-outlet",inputs:["name","routerOutletData"],outputs:["activate","deactivate","attach","detach"],exportAs:["outlet"]}]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:Auth365Component,decorators:[{type:Component,args:[{selector:"resolveio-auth365",providers:[ProviderService],template:"<router-outlet></router-outlet>",standalone:!1}]}],ctorParameters:()=>[{type:CoreService},{type:i1$1.ActivatedRoute},{type:ProviderService},{type:i4.HttpClient},{type:DialogService},{type:SocketManagerService}]});class UserSettingsService{selectedUser=new BehaviorSubject("0");constructor(){}setSelectedUser(t){this.selectedUser.next(t)}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:UserSettingsService,deps:[],target:i0.ɵɵFactoryTarget.Injectable});static"ɵprov"=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:UserSettingsService})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:UserSettingsService,decorators:[{type:Injectable}],ctorParameters:()=>[]});const UserSettingsModulePermission={name:"user-settings",views:[{link:"/user-settings/settings",label:"Settings"}],approval:{type:"user-settings"}};class UserSettingsComponent extends BaseComponent{_us;_services;selectedUserSettings$;menuData;constructor(t,e){super(e),this._us=t,this._services=e}ngOnInit(){this.selectedUserSettings$=this._us.selectedUser.subscribe(t=>this.selectedUserSettingsChanged(t))}ngOnDestroy(){this._us.setSelectedUser("0"),this.selectedUserSettings$.unsubscribe()}selectedUserSettingsChanged(t){this.setUserSettingsMenuData()}setUserSettingsMenuData(t,e){let n=[];UserSettingsModulePermission.views.forEach(t=>{if((this._services._account.isUserInView(t.link)||this._services._account.isUserSuperAdmin())&&"/user-settings/settings"===t.link)n.push({link:"/user-settings/settings",params:null,label:"Settings"})}),this.menuData={title:"User Settings",module:"User Settings",description_name:"User: ",description:e?e.fullname:"",tabs:n},this._services._app.setNavbarModuleData(this.menuData)}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:UserSettingsComponent,deps:[{token:UserSettingsService},{token:ProviderService}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"21.0.1",type:UserSettingsComponent,isStandalone:!1,selector:"resolveio-user-settings",providers:[ProviderService],usesInheritance:!0,ngImport:i0,template:"<router-outlet></router-outlet>",isInline:!0,dependencies:[{kind:"directive",type:i1$1.RouterOutlet,selector:"router-outlet",inputs:["name","routerOutletData"],outputs:["activate","deactivate","attach","detach"],exportAs:["outlet"]}]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:UserSettingsComponent,decorators:[{type:Component,args:[{selector:"resolveio-user-settings",providers:[ProviderService],template:"<router-outlet></router-outlet>",standalone:!1}]}],ctorParameters:()=>[{type:UserSettingsService},{type:ProviderService}]});class UsersSettingsComponent extends BaseComponent{_aps;_us;_services;_ds;_stickyAdapter;subscription$=[];form;disableFormButton=!1;user;client="";views=[];stickySelects=[];stickySelections={};constructor(t,e,n,o,r){super(n),this._aps=t,this._us=e,this._services=n,this._ds=o,this._stickyAdapter=r}ngOnInit(){this._us.setSelectedUser("0"),this.client=this._services._app.client.getValue(),this.form=this._services._fb.group({table_color:["#3b3ee3",[Validators.required]],table_font_color:["#ffffff",[Validators.required]],font_size:[12,[Validators.required,this._services._vs.wholeNumbersGreaterThanZero,this._services._vs.maxValue(18),this._services._vs.minValue(8)]],secondary_table_color:["#87ceeb",[Validators.required]],secondary_table_font_color:["#000000",[Validators.required]],tertiary_table_color:["#ff4500",[Validators.required]],tertiary_table_font_color:["#000000",[Validators.required]],collapsable_menu:[!0],entries_per_page:["25",[Validators.required]],warning_color:["#ffc107",[Validators.required]],warning_font_color:["#000000",[Validators.required]],warning_hover_color:["#e0a800",[Validators.required]],success_color:["#28a745",[Validators.required]],success_font_color:["#ffffff",[Validators.required]],success_hover_color:["#218838",[Validators.required]],danger_color:["#dc3545",[Validators.required]],danger_font_color:["#ffffff",[Validators.required]],danger_hover_color:["#c82333",[Validators.required]],info_color:["#17a2b8",[Validators.required]],info_font_color:["#ffffff",[Validators.required]],info_hover_color:["#138496",[Validators.required]],primary_color:["#007bff",[Validators.required]],primary_font_color:["#ffffff",[Validators.required]],primary_hover_color:["#0069d9",[Validators.required]],secondary_color:["#868e96",[Validators.required]],secondary_font_color:["#ffffff",[Validators.required]],secondary_hover_color:["#5a6268",[Validators.required]],date_picker_day_start:["S",[Validators.required]],routing_preference:["alwaysAsk"],opening_route:["/home"],ng_select_search_mode:["fuzzy",[Validators.required]]});const t=this._services._account.getUser();t&&t.settings&&(this.form.patchValue(t.settings),t.roles.groups.forEach(t=>{t.views.forEach(t=>{this.views.some(e=>e.value===t)||this.views.push({value:t,display:toTitleCase(t.replace("/","").replace(new RegExp("/","g")," - "))})})}));const e=this._normalizeDatePickerDayStart(t?.other?.date_picker_day_start);this.form.controls.date_picker_day_start.setValue(e),this._loadStickySelects(this._services._account.getUser()),document.documentElement.style.setProperty("--primary-table-color",this.form.controls.table_color.value),document.documentElement.style.setProperty("--primary-table-font-color",this.form.controls.table_font_color.value),document.documentElement.style.setProperty("--font-size",this.form.controls.font_size.value+"px"),document.documentElement.style.setProperty("--secondary-table-color",this.form.controls.secondary_table_color.value),document.documentElement.style.setProperty("--secondary-table-font-color",this.form.controls.secondary_table_font_color.value),document.documentElement.style.setProperty("--tertiary-table-color",this.form.controls.tertiary_table_color.value),document.documentElement.style.setProperty("--tertiary-table-font-color",this.form.controls.tertiary_table_font_color.value),document.documentElement.style.setProperty("--warning-color",this.form.controls.warning_color.value),document.documentElement.style.setProperty("--warning-font-color",this.form.controls.warning_font_color.value),document.documentElement.style.setProperty("--warning-shadow-color","0 0 0 0.2rem "+hexToRGB(this.form.controls.warning_color.value,.5)),document.documentElement.style.setProperty("--warning-hover-color",this.form.controls.warning_hover_color.value),document.documentElement.style.setProperty("--success-color",this.form.controls.success_color.value),document.documentElement.style.setProperty("--success-font-color",this.form.controls.success_font_color.value),document.documentElement.style.setProperty("--success-shadow-color","0 0 0 0.2rem "+hexToRGB(this.form.controls.success_color.value,.5)),document.documentElement.style.setProperty("--success-hover-color",this.form.controls.success_hover_color.value),document.documentElement.style.setProperty("--danger-color",this.form.controls.danger_color.value),document.documentElement.style.setProperty("--danger-font-color",this.form.controls.danger_font_color.value),document.documentElement.style.setProperty("--danger-shadow-color","0 0 0 0.2rem "+hexToRGB(this.form.controls.danger_color.value,.5)),document.documentElement.style.setProperty("--danger-hover-color",this.form.controls.danger_hover_color.value),document.documentElement.style.setProperty("--info-color",this.form.controls.info_color.value),document.documentElement.style.setProperty("--info-font-color",this.form.controls.info_font_color.value),document.documentElement.style.setProperty("--info-shadow-color","0 0 0 0.2rem "+hexToRGB(this.form.controls.info_color.value,.5)),document.documentElement.style.setProperty("--info-hover-color",this.form.controls.info_hover_color.value),document.documentElement.style.setProperty("--primary-color",this.form.controls.primary_color.value),document.documentElement.style.setProperty("--primary-font-color",this.form.controls.primary_font_color.value),document.documentElement.style.setProperty("--primary-shadow-color","0 0 0 0.2rem "+hexToRGB(this.form.controls.primary_color.value,.5)),document.documentElement.style.setProperty("--primary-hover-color",this.form.controls.primary_hover_color.value),document.documentElement.style.setProperty("--secondary-color",this.form.controls.secondary_color.value),document.documentElement.style.setProperty("--secondary-font-color",this.form.controls.secondary_font_color.value),document.documentElement.style.setProperty("--secondary-shadow-color","0 0 0 0.2rem "+hexToRGB(this.form.controls.secondary_color.value,.5)),document.documentElement.style.setProperty("--secondary-hover-color",this.form.controls.secondary_hover_color.value),this.subscription$.push(this._services._account.user.subscribe(t=>{this.user=t,this._loadStickySelects(t)}))}ngOnDestroy(){this.subscription$.forEach(t=>{t.unsubscribe()})}changePrimaryColor(){document.documentElement.style.setProperty("--primary-table-color",this.form.controls.table_color.value)}changePrimaryFontColor(){document.documentElement.style.setProperty("--primary-table-font-color",this.form.controls.table_font_color.value)}changePrimaryFontSize(){document.documentElement.style.setProperty("--font-size",this.form.controls.font_size.value+"px")}changeSecondaryColor(){document.documentElement.style.setProperty("--secondary-table-color",this.form.controls.secondary_table_color.value)}changeSecondaryFontColor(){document.documentElement.style.setProperty("--secondary-table-font-color",this.form.controls.secondary_table_font_color.value)}changeTertiaryColor(){document.documentElement.style.setProperty("--tertiary-table-color",this.form.controls.tertiary_table_color.value)}changeTertiaryFontColor(){document.documentElement.style.setProperty("--tertiary-table-font-color",this.form.controls.tertiary_table_font_color.value)}changeWarningColor(){document.documentElement.style.setProperty("--warning-color",this.form.controls.warning_color.value),document.documentElement.style.setProperty("--warning-shadow-color","0 0 0 0.2rem "+hexToRGB(this.form.controls.warning_color.value,.5))}changeWarningHoverColor(){document.documentElement.style.setProperty("--warning-hover-color",this.form.controls.warning_hover_color.value)}changeWarningFontColor(){document.documentElement.style.setProperty("--warning-font-color",this.form.controls.warning_font_color.value)}changeSuccessColor(){document.documentElement.style.setProperty("--success-color",this.form.controls.success_color.value),document.documentElement.style.setProperty("--success-shadow-color","0 0 0 0.2rem "+hexToRGB(this.form.controls.success_color.value,.5))}changeSuccessHoverColor(){document.documentElement.style.setProperty("--success-hover-color",this.form.controls.success_hover_color.value)}changeSuccessFontColor(){document.documentElement.style.setProperty("--success-font-color",this.form.controls.success_font_color.value)}changeDangerColor(){document.documentElement.style.setProperty("--danger-color",this.form.controls.danger_color.value),document.documentElement.style.setProperty("--danger-shadow-color","0 0 0 0.2rem "+hexToRGB(this.form.controls.danger_color.value,.5))}changeDangerHoverColor(){document.documentElement.style.setProperty("--danger-hover-color",this.form.controls.danger_hover_color.value)}changeDangerFontColor(){document.documentElement.style.setProperty("--danger-font-color",this.form.controls.danger_font_color.value)}changeInfoColor(){document.documentElement.style.setProperty("--info-color",this.form.controls.info_color.value),document.documentElement.style.setProperty("--info-shadow-color","0 0 0 0.2rem "+hexToRGB(this.form.controls.info_color.value,.5))}changeInfoHoverColor(){document.documentElement.style.setProperty("--info-hover-color",this.form.controls.info_hover_color.value)}changeInfoFontColor(){document.documentElement.style.setProperty("--info-font-color",this.form.controls.info_font_color.value)}changePrimaryButtonColor(){document.documentElement.style.setProperty("--primary-color",this.form.controls.primary_color.value),document.documentElement.style.setProperty("--primary-shadow-color","0 0 0 0.2rem "+hexToRGB(this.form.controls.primary_color.value,.5))}changePrimaryButtonHoverColor(){document.documentElement.style.setProperty("--primary-hover-color",this.form.controls.primary_hover_color.value)}changePrimaryButtonFontColor(){document.documentElement.style.setProperty("--primary-font-color",this.form.controls.primary_font_color.value)}changeSecondaryButtonColor(){document.documentElement.style.setProperty("--secondary-color",this.form.controls.secondary_color.value),document.documentElement.style.setProperty("--secondary-shadow-color","0 0 0 0.2rem "+hexToRGB(this.form.controls.secondary_color.value,.5))}changeSecondaryHoverColor(){document.documentElement.style.setProperty("--secondary-hover-color",this.form.controls.secondary_hover_color.value)}changeSecondaryButtonFontColor(){document.documentElement.style.setProperty("--secondary-font-color",this.form.controls.secondary_font_color.value)}reset(){this.form.controls.table_color.setValue("#3b3ee3"),this.form.controls.table_font_color.setValue("#ffffff"),this.form.controls.font_size.setValue(12),this.form.controls.secondary_table_color.setValue("#87ceeb"),this.form.controls.secondary_table_font_color.setValue("#000000"),this.form.controls.tertiary_table_color.setValue("#ff4500"),this.form.controls.tertiary_table_font_color.setValue("#000000"),this.form.controls.collapsable_menu.setValue(!0),this.form.controls.entries_per_page.setValue("25"),this.form.controls.warning_color.setValue("#ffc107"),this.form.controls.warning_font_color.setValue("#000000"),this.form.controls.warning_hover_color.setValue("#e0a800"),this.form.controls.success_color.setValue("#28a745"),this.form.controls.success_font_color.setValue("#ffffff"),this.form.controls.success_hover_color.setValue("#218838"),this.form.controls.danger_color.setValue("#dc3545"),this.form.controls.danger_font_color.setValue("#ffffff"),this.form.controls.danger_hover_color.setValue("#c82333"),this.form.controls.info_color.setValue("#17a2b8"),this.form.controls.info_font_color.setValue("#ffffff"),this.form.controls.info_hover_color.setValue("#138496"),this.form.controls.primary_color.setValue("#007bff"),this.form.controls.primary_font_color.setValue("#ffffff"),this.form.controls.primary_hover_color.setValue("#0069d9"),this.form.controls.secondary_color.setValue("#868e96"),this.form.controls.secondary_font_color.setValue("#ffffff"),this.form.controls.secondary_hover_color.setValue("#5a6268"),this.form.controls.date_picker_day_start.setValue("S"),this.form.controls.ng_select_search_mode.setValue("fuzzy"),document.documentElement.style.setProperty("--primary-table-color",this.form.controls.table_color.value),document.documentElement.style.setProperty("--primary-table-font-color",this.form.controls.table_font_color.value),document.documentElement.style.setProperty("--font-size",this.form.controls.font_size.value+"px"),document.documentElement.style.setProperty("--secondary-table-color",this.form.controls.secondary_table_color.value),document.documentElement.style.setProperty("--secondary-table-font-color",this.form.controls.secondary_table_font_color.value),document.documentElement.style.setProperty("--tertiary-table-color",this.form.controls.tertiary_table_color.value),document.documentElement.style.setProperty("--tertiary-table-font-color",this.form.controls.tertiary_table_font_color.value),document.documentElement.style.setProperty("--warning-color",this.form.controls.warning_color.value),document.documentElement.style.setProperty("--warning-font-color",this.form.controls.warning_font_color.value),document.documentElement.style.setProperty("--warning-shadow-color","0 0 0 0.2rem "+hexToRGB(this.form.controls.warning_color.value,.5)),document.documentElement.style.setProperty("--warning-hover-color",this.form.controls.warning_hover_color.value),document.documentElement.style.setProperty("--success-color",this.form.controls.success_color.value),document.documentElement.style.setProperty("--success-font-color",this.form.controls.success_font_color.value),document.documentElement.style.setProperty("--success-shadow-color","0 0 0 0.2rem "+hexToRGB(this.form.controls.success_color.value,.5)),document.documentElement.style.setProperty("--success-hover-color",this.form.controls.success_hover_color.value),document.documentElement.style.setProperty("--danger-color",this.form.controls.danger_color.value),document.documentElement.style.setProperty("--danger-font-color",this.form.controls.danger_font_color.value),document.documentElement.style.setProperty("--danger-shadow-color","0 0 0 0.2rem "+hexToRGB(this.form.controls.danger_color.value,.5)),document.documentElement.style.setProperty("--danger-hover-color",this.form.controls.danger_hover_color.value),document.documentElement.style.setProperty("--info-color",this.form.controls.info_color.value),document.documentElement.style.setProperty("--info-font-color",this.form.controls.info_font_color.value),document.documentElement.style.setProperty("--info-shadow-color","0 0 0 0.2rem "+hexToRGB(this.form.controls.info_color.value,.5)),document.documentElement.style.setProperty("--info-hover-color",this.form.controls.info_hover_color.value),document.documentElement.style.setProperty("--primary-color",this.form.controls.primary_color.value),document.documentElement.style.setProperty("--primary-font-color",this.form.controls.primary_font_color.value),document.documentElement.style.setProperty("--primary-shadow-color","0 0 0 0.2rem "+hexToRGB(this.form.controls.primary_color.value,.5)),document.documentElement.style.setProperty("--primary-hover-color",this.form.controls.primary_hover_color.value),document.documentElement.style.setProperty("--secondary-color",this.form.controls.secondary_color.value),document.documentElement.style.setProperty("--secondary-font-color",this.form.controls.secondary_font_color.value),document.documentElement.style.setProperty("--secondary-shadow-color","0 0 0 0.2rem "+hexToRGB(this.form.controls.secondary_color.value,.5)),document.documentElement.style.setProperty("--secondary-hover-color",this.form.controls.secondary_hover_color.value)}updateStickyDefault(t,e){const n=this.stickySelects.findIndex(e=>e.key===t);if(-1===n)return;const o=this.stickySelects.map(t=>({...t,options:t.options||[]})),r={...o[n]};r.defaultValue=void 0===e?null:e,r.defaultLabel=this._resolveStickyLabel(r,e),r.updatedAt=(new Date).toISOString(),o[n]=r,this.stickySelects=o,this.stickySelections[t]=e,this._stickyAdapter&&this._stickyAdapter.saveStickySelects(o,"user-settings")}_loadStickySelects(t){const e=t||this._services._account.getUser();if(e&&e.other&&Array.isArray(e.other.stickySelects)){const t=[],n=new Set;e.other.stickySelects.forEach(e=>{e&&e.key&&!n.has(e.key)&&(n.add(e.key),t.push({...e,options:e.options||[]}))}),this.stickySelects=t}else this.stickySelects=[];this.stickySelections={},this.stickySelects.forEach(t=>{this.stickySelections[t.key]=void 0!==t.defaultValue?t.defaultValue:null})}_resolveStickyLabel(t,e){if(null==e)return"";const n=(t.options||[]).find(t=>JSON.stringify(t.value)===JSON.stringify(e));return n&&n.label?n.label:"string"==typeof e?e:JSON.stringify(e)}submitForm(t){const e=this._services._account.getUser(),n=this.form.value,o=this._normalizeDatePickerDayStart(n.date_picker_day_start),{date_picker_day_start:r,...i}=n,a={...e?.other||{},date_picker_day_start:o};this._services._socket.call("updateDocumentProps","users",e._id,[{prop:"settings",data:i},{prop:"other",data:a}],e.__v,(t,n)=>{if(n){if(this._services._alert.setAlert("success","Settings have been updated"),e){const t={...e,__v:n&&n.__v?n.__v:e.__v,settings:i,other:a};this._services._account.setUser(t)}}else this._ds.error("Could not update settings"),this._services._socket.call("insertErrorLog","user settings - update user",[this._services._account.getUser(),t])})}_normalizeDatePickerDayStart(t){return"M"===t||"m"===t||1===t||"1"===t?"M":"S"}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:UsersSettingsComponent,deps:[{token:AuthPermissionService},{token:UserSettingsService},{token:ProviderService},{token:DialogService},{token:NG_SELECT_STICKY_ADAPTER,optional:!0}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"21.0.1",type:UsersSettingsComponent,isStandalone:!1,selector:"resolveio-users-settings",providers:[ProviderService],usesInheritance:!0,ngImport:i0,template:'<style>\n\t.sticky-section-card,\n\t.sticky-section-card * {\n\t\ttransform: none !important;\n\t}\n\n\t:host {\n\t\tdisplay: block;\n\t}\n\n\t::ng-deep :root {\n\t\t--primary-table-color: #3b3ee3;\n\t\t--primary-table-font-color: #ffffff;\n\t\t--font-size: 12px;\n\t\t--secondary-table-color: #87ceeb;\n\t\t--secondary-table-font-color: #000000;\n\t\t--tertiary-table-color: #ff4500;\n\t\t--tertiary-table-font-color: #000000;\n\t\t--warning-color: #ffc107;\n\t\t--warning-font-color: #000000;\n\t\t--warning-hover-color: #e0a800;\n\t\t--warning-shadow-color: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n\t\t--success-color: #28a745;\n\t\t--success-font-color: #ffffff;\n\t\t--success-hover-color: #218838;\n\t\t--success-shadow-color: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n\t\t--danger-color: #dc3545;\n\t\t--danger-font-color: #ffffff;\n\t\t--danger-hover-color: #c82333;\n\t\t--danger-shadow-color: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n\t\t--info-color: #17a2b8;\n\t\t--info-font-color: #ffffff;\n\t\t--info-hover-color: #138496;\n\t\t--info-shadow-color: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n\t\t--primary-color: #007bff;\n\t\t--primary-font-color: #ffffff;\n\t\t--primary-hover-color: #0069d9;\n\t\t--primary-shadow-color: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n\t\t--secondary-color: #868e96;\n\t\t--secondary-font-color: #ffffff;\n\t\t--secondary-hover-color: #5a6268;\n\t\t--secondary-shadow-color: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n\t}\n\n\t.settings-shell {\n\t\tposition: relative;\n\t\toverflow: visible;\n\t\tpadding: 12px 8px 32px;\n\t\tbackground: radial-gradient(circle at 15% 20%, rgba(111, 136, 255, 0.12), transparent 35%),\n\t\t\tradial-gradient(circle at 80% 0%, rgba(255, 130, 92, 0.12), transparent 32%),\n\t\t\tlinear-gradient(135deg, #f7f9ff 0%, #ffffff 60%, #f5f7fb 100%);\n\t}\n\n\t.aurora {\n\t\tposition: absolute;\n\t\twidth: 420px;\n\t\theight: 420px;\n\t\tborder-radius: 50%;\n\t\tfilter: blur(70px);\n\t\topacity: .55;\n\t\tmix-blend-mode: screen;\n\t\tanimation: drift 18s ease-in-out infinite alternate;\n\t\tz-index: 0;\n\t}\n\n\t.aurora.aurora-one {\n\t\tbackground: radial-gradient(circle, rgba(82, 163, 255, .7), rgba(134, 120, 255, .25));\n\t\ttop: -120px;\n\t\tleft: -70px;\n\t}\n\n\t.aurora.aurora-two {\n\t\tbackground: radial-gradient(circle, rgba(255, 147, 92, .6), rgba(255, 227, 187, .35));\n\t\tbottom: -140px;\n\t\tright: -40px;\n\t\tanimation-duration: 22s;\n\t}\n\n\t.settings-hero {\n\t\tposition: relative;\n\t\tz-index: 1;\n\t\tdisplay: grid;\n\t\tgrid-template-columns: repeat(auto-fit, minmax(320px, 1fr));\n\t\tgap: 16px;\n\t\talign-items: center;\n\t\tmargin-bottom: 18px;\n\t}\n\n\t.glass-card {\n\t\tbackground: rgba(255, 255, 255, .78);\n\t\tborder: 1px solid rgba(255, 255, 255, .55);\n\t\tbox-shadow: 0 10px 40px rgba(54, 74, 120, .14), inset 0 0 0 1px rgba(255, 255, 255, .32);\n\t\tborder-radius: 18px;\n\t\tpadding: 18px;\n\t\tbackdrop-filter: blur(8px);\n\t\t-webkit-backdrop-filter: blur(8px);\n\t}\n\n\t.hero-main h2 {\n\t\tfont-weight: 800;\n\t\tfont-size: 26px;\n\t\tmargin-bottom: 8px;\n\t\tcolor: #0f172a;\n\t}\n\n\t.hero-main p {\n\t\tcolor: #4b5563;\n\t\tmargin-bottom: 12px;\n\t}\n\n\t.hero-chip {\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tgap: 6px;\n\t\tpadding: 6px 12px;\n\t\tborder-radius: 999px;\n\t\tfont-weight: 700;\n\t\tcolor: #1f2937;\n\t\tbackground: linear-gradient(120deg, rgba(99, 102, 241, .1), rgba(16, 185, 129, .1), rgba(59, 130, 246, .12));\n\t\tborder: 1px solid rgba(99, 102, 241, .25);\n\t\tmargin-bottom: 10px;\n\t\ttext-transform: uppercase;\n\t\tletter-spacing: .04em;\n\t\tfont-size: 12px;\n\t}\n\n\t.hero-actions {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\tgap: 12px;\n\t\talign-items: center;\n\t\tmargin-top: 12px;\n\t}\n\n\t.neon-btn {\n\t\tposition: relative;\n\t\tborder: 1px solid rgba(15, 23, 42, .1);\n\t\tbackground: linear-gradient(120deg, rgba(99, 102, 241, .15), rgba(59, 130, 246, .08));\n\t\tcolor: #0f172a;\n\t\tfont-weight: 700;\n\t\tpadding: 10px 16px;\n\t\tborder-radius: 12px;\n\t\tbox-shadow: 0 10px 24px rgba(99, 102, 241, .15);\n\t\ttransition: transform .2s ease, box-shadow .2s ease, border-color .2s ease;\n\t}\n\n\t.neon-btn:hover {\n\t\ttransform: translateY(-2px);\n\t\tborder-color: rgba(99, 102, 241, .45);\n\t\tbox-shadow: 0 14px 26px rgba(99, 102, 241, .22);\n\t}\n\n\t.save-button form-button ::ng-deep button {\n\t\tborder-radius: 12px;\n\t\tfont-weight: 800;\n\t\tletter-spacing: .01em;\n\t\tpadding: 11px 18px;\n\t\tbox-shadow: 0 10px 26px rgba(16, 185, 129, .24);\n\t}\n\n\t.hero-preview {\n\t\tposition: relative;\n\t}\n\n\t.preview-card {\n\t\tborder-radius: 16px;\n\t\tpadding: 16px;\n\t\tbackground: radial-gradient(circle at 20% 20%, rgba(255, 255, 255, .7), rgba(255, 255, 255, .52));\n\t\tbox-shadow: inset 0 1px 0 rgba(255, 255, 255, .8), 0 12px 30px rgba(80, 110, 185, .16);\n\t\tborder: 1px solid rgba(255, 255, 255, .6);\n\t}\n\n\t.preview-title {\n\t\tfont-weight: 800;\n\t\tmargin-bottom: 8px;\n\t\tcolor: #111827;\n\t}\n\n\t.swatch-row {\n\t\tdisplay: grid;\n\t\tgrid-template-columns: repeat(auto-fit, minmax(140px, 1fr));\n\t\tgap: 10px;\n\t}\n\n\t.swatch {\n\t\tborder-radius: 12px;\n\t\tpadding: 10px;\n\t\tcolor: #0f172a;\n\t\tfont-weight: 700;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: space-between;\n\t\tbox-shadow: inset 0 1px 0 rgba(255, 255, 255, .45);\n\t\topacity: .98;\n\t}\n\n\t.swatch span {\n\t\tfont-size: 12px;\n\t\tfont-weight: 600;\n\t\tcolor: rgba(15, 23, 42, .85);\n\t}\n\n\t.preview-pulse {\n\t\tposition: absolute;\n\t\twidth: 120px;\n\t\theight: 120px;\n\t\tborder-radius: 50%;\n\t\tbackground: radial-gradient(circle, rgba(16, 185, 129, .3), transparent 60%);\n\t\tbottom: -18px;\n\t\tright: -14px;\n\t\tfilter: blur(12px);\n\t\tanimation: pulse 2.4s ease-in-out infinite;\n\t}\n\n\t.hero-metrics {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\tgap: 8px;\n\t\tmargin-top: 14px;\n\t}\n\n\t.metric-pill {\n\t\tbackground: rgba(15, 23, 42, .06);\n\t\tborder: 1px solid rgba(15, 23, 42, .08);\n\t\tborder-radius: 999px;\n\t\tpadding: 8px 12px;\n\t\tfont-weight: 700;\n\t\tcolor: #0f172a;\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tgap: 6px;\n\t}\n\n\t.section-grid {\n\t\tdisplay: grid;\n\t\tgrid-template-columns: repeat(auto-fit, minmax(320px, 1fr));\n\t\tgap: 14px;\n\t\tposition: relative;\n\t\tz-index: 1;\n\t}\n\n\t.section-card {\n\t\tposition: relative;\n\t\toverflow: visible;\n\t}\n\n\t.section-heading {\n\t\tmargin-bottom: 12px;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: space-between;\n\t\tgap: 10px;\n\t\tflex-wrap: wrap;\n\t}\n\n\t.section-heading h3 {\n\t\tmargin: 0;\n\t\tfont-weight: 800;\n\t\tcolor: #0f172a;\n\t}\n\n\t.section-heading p {\n\t\tmargin: 0;\n\t\tcolor: #4b5563;\n\t}\n\n\t.field-grid {\n\t\tdisplay: grid;\n\t\tgrid-template-columns: repeat(auto-fit, minmax(240px, 1fr));\n\t\tgap: 12px;\n\t}\n\n\t.field-card {\n\t\tpadding: 12px;\n\t\tborder-radius: 14px;\n\t\tborder: 1px solid rgba(15, 23, 42, .06);\n\t\tbackground: rgba(255, 255, 255, .85);\n\t\tbox-shadow: inset 0 1px 0 rgba(255, 255, 255, .7);\n\t\ttransition: transform .2s ease, box-shadow .2s ease;\n\t}\n\n\t.field-card:hover {\n\t\tbox-shadow: 0 8px 22px rgba(99, 102, 241, .12);\n\t}\n\n\t/* Avoid transforming the sticky select card so the fixed overlay positions correctly. */\n\t.sticky-select-card:hover {\n\t\ttransform: none;\n\t}\n\n\t.sticky-section-card {\n\t\tanimation: none;\n\t\ttransform: none;\n\t}\n\n\t.field-label {\n\t\tfont-weight: 700;\n\t\tcolor: #111827;\n\t\tmargin-bottom: 4px;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: space-between;\n\t\tgap: 6px;\n\t}\n\n\t.field-hint {\n\t\tfont-size: 12px;\n\t\tcolor: #6b7280;\n\t\tmargin: 0;\n\t}\n\n\t.input-bevel {\n\t\tborder-radius: 12px;\n\t\tborder: 1px solid rgba(15, 23, 42, .1);\n\t\tbackground: rgba(255, 255, 255, .92);\n\t\tbox-shadow: inset 0 1px 0 rgba(255, 255, 255, .8);\n\t\tpadding: 10px 12px;\n\t\twidth: 100%;\n\t}\n\n\t.toggle {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 8px;\n\t}\n\n\t.toggle-input {\n\t\tdisplay: none;\n\t}\n\n\t.toggle-track {\n\t\twidth: 54px;\n\t\theight: 30px;\n\t\tborder-radius: 999px;\n\t\tbackground: linear-gradient(120deg, rgba(15, 23, 42, .08), rgba(15, 23, 42, .15));\n\t\tposition: relative;\n\t\tbox-shadow: inset 0 1px 0 rgba(255, 255, 255, .6);\n\t\tborder: 1px solid rgba(15, 23, 42, .12);\n\t\ttransition: background .2s ease;\n\t}\n\n\t.toggle-thumb {\n\t\tposition: absolute;\n\t\ttop: 3px;\n\t\tleft: 3px;\n\t\twidth: 24px;\n\t\theight: 24px;\n\t\tborder-radius: 50%;\n\t\tbackground: linear-gradient(135deg, #63a4ff, #83eaf1);\n\t\tbox-shadow: 0 8px 16px rgba(99, 102, 241, .35);\n\t\ttransition: transform .2s ease;\n\t}\n\n\t.toggle-input:checked + .toggle-track {\n\t\tbackground: linear-gradient(120deg, rgba(16, 185, 129, .15), rgba(52, 211, 153, .25));\n\t\tborder-color: rgba(16, 185, 129, .45);\n\t}\n\n\t.toggle-input:checked + .toggle-track .toggle-thumb {\n\t\ttransform: translateX(24px);\n\t\tbackground: linear-gradient(135deg, #10b981, #22d3ee);\n\t\tbox-shadow: 0 10px 18px rgba(16, 185, 129, .32);\n\t}\n\n\t.toggle-state {\n\t\tfont-weight: 700;\n\t\tcolor: #0f172a;\n\t}\n\n\t.color-grid {\n\t\tdisplay: grid;\n\t\tgrid-template-columns: repeat(auto-fit, minmax(260px, 1fr));\n\t\tgap: 10px;\n\t\tmargin-top: 10px;\n\t}\n\n\t.color-card {\n\t\tborder-radius: 14px;\n\t\tpadding: 12px;\n\t\tborder: 1px solid rgba(15, 23, 42, .06);\n\t\tbackground: rgba(255, 255, 255, .9);\n\t\tdisplay: grid;\n\t\tgrid-template-columns: 1fr 120px;\n\t\tgap: 10px;\n\t\talign-items: center;\n\t}\n\n\t.color-chip {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 4px;\n\t}\n\n\t.color-name {\n\t\tfont-weight: 700;\n\t\tcolor: #0f172a;\n\t}\n\n\t.color-preview {\n\t\tborder-radius: 12px;\n\t\theight: 48px;\n\t\tborder: 1px solid rgba(15, 23, 42, .08);\n\t\tbox-shadow: inset 0 1px 0 rgba(255, 255, 255, .7);\n\t}\n\n\t.color-input {\n\t\theight: 48px;\n\t\tborder: 1px solid rgba(15, 23, 42, .08);\n\t\tborder-radius: 12px;\n\t\tbox-shadow: inset 0 1px 0 rgba(255, 255, 255, .75);\n\t\twidth: 100%;\n\t\tcursor: pointer;\n\t}\n\n\t.palette-preview {\n\t\tdisplay: grid;\n\t\tgrid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n\t\tgap: 10px;\n\t\tmargin-bottom: 8px;\n\t}\n\n\t.preview-table {\n\t\tborder-radius: 12px;\n\t\tpadding: 10px;\n\t\tbackground: linear-gradient(160deg, rgba(255, 255, 255, .85), rgba(255, 255, 255, .7));\n\t\tborder: 1px solid rgba(15, 23, 42, .08);\n\t\tbox-shadow: inset 0 1px 0 rgba(255, 255, 255, .8);\n\t}\n\n\t.preview-table .row-swatch {\n\t\tborder-radius: 10px;\n\t\tpadding: 10px;\n\t\tfont-weight: 700;\n\t\tmargin-bottom: 6px;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: space-between;\n\t\tbox-shadow: inset 0 1px 0 rgba(255, 255, 255, .6);\n\t}\n\n\t.preview-table .row-swatch:last-child {\n\t\tmargin-bottom: 0;\n\t}\n\n\t.button-demo {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\tgap: 8px;\n\t\tmargin-bottom: 10px;\n\t}\n\n\t.btn-warning {\n\t\tcolor: var(--warning-font-color);\n\t\tbackground-color: var(--warning-color);\n\t\tborder-color: var(--warning-color);\n\t}\n\n\t.btn-warning:focus,\n\t.btn-warning.focus {\n\t\tbox-shadow: var(--warning-shadow-color);\n\t}\n\n\t.btn-warning:hover {\n\t\tcolor: var(--warning-font-color);\n\t\tbackground-color: var(--warning-hover-color);\n\t\tborder-color: var(--warning-hover-color);\n\t}\n\n\t.btn-success {\n\t\tcolor: var(--success-font-color);\n\t\tbackground-color: var(--success-color);\n\t\tborder-color: var(--success-color);\n\t}\n\n\t.btn-success:focus,\n\t.btn-success.focus {\n\t\tbox-shadow: var(--success-shadow-color);\n\t}\n\n\t.btn-success:hover {\n\t\tcolor: var(--success-font-color);\n\t\tbackground-color: var(--success-hover-color);\n\t\tborder-color: var(--success-hover-color);\n\t}\n\n\t.btn-danger {\n\t\tcolor: var(--danger-font-color);\n\t\tbackground-color: var(--danger-color);\n\t\tborder-color: var(--danger-color);\n\t}\n\n\t.btn-danger:focus,\n\t.btn-danger.focus {\n\t\tbox-shadow: var(--danger-shadow-color);\n\t}\n\n\t.btn-danger:hover {\n\t\tcolor: var(--danger-font-color);\n\t\tbackground-color: var(--danger-hover-color);\n\t\tborder-color: var(--danger-hover-color);\n\t}\n\n\t.btn-info {\n\t\tcolor: var(--info-font-color);\n\t\tbackground-color: var(--info-color);\n\t\tborder-color: var(--info-color);\n\t}\n\n\t.btn-info:focus,\n\t.btn-info.focus {\n\t\tbox-shadow: var(--info-shadow-color);\n\t}\n\n\t.btn-info:hover {\n\t\tcolor: var(--info-font-color);\n\t\tbackground-color: var(--info-hover-color);\n\t\tborder-color: var(--info-hover-color);\n\t}\n\n\t.btn-primary {\n\t\tcolor: var(--primary-font-color);\n\t\tbackground-color: var(--primary-color);\n\t\tborder-color: var(--primary-color);\n\t}\n\n\t.btn-primary:focus,\n\t.btn-primary.focus {\n\t\tbox-shadow: var(--primary-shadow-color);\n\t}\n\n\t.btn-primary:hover {\n\t\tcolor: var(--primary-font-color);\n\t\tbackground-color: var(--primary-hover-color);\n\t\tborder-color: var(--primary-hover-color);\n\t}\n\n\t.btn-secondary {\n\t\tcolor: var(--secondary-font-color);\n\t\tbackground-color: var(--secondary-color);\n\t\tborder-color: var(--secondary-color);\n\t}\n\n\t.btn-secondary:focus,\n\t.btn-secondary.focus {\n\t\tbox-shadow: var(--secondary-shadow-color);\n\t}\n\n\t.btn-secondary:hover {\n\t\tcolor: var(--secondary-font-color);\n\t\tbackground-color: var(--secondary-hover-color);\n\t\tborder-color: var(--secondary-hover-color);\n\t}\n\n\t.ng-select .ng-select-container {\n\t\tborder-radius: 12px !important;\n\t\tmin-height: 42px !important;\n\t\tborder-color: rgba(15, 23, 42, .1) !important;\n\t\tbox-shadow: inset 0 1px 0 rgba(255, 255, 255, .7);\n\t}\n\n\t.sticky-empty {\n\t\tbackground: rgba(23, 162, 184, .12);\n\t\tcolor: #0f4c75;\n\t\tborder: 1px solid rgba(23, 162, 184, .2);\n\t\tborder-radius: 12px;\n\t\tpadding: 12px;\n\t}\n\n\t.animate-rise {\n\t\tanimation: rise .5s ease;\n\t}\n\n\t@keyframes drift {\n\t\tfrom {\n\t\t\ttransform: translateY(0) translateX(0);\n\t\t}\n\t\tto {\n\t\t\ttransform: translateY(-30px) translateX(20px);\n\t\t}\n\t}\n\n\t@keyframes pulse {\n\t\t0% {\n\t\t\ttransform: scale(1);\n\t\t\topacity: .6;\n\t\t}\n\t\t50% {\n\t\t\ttransform: scale(1.08);\n\t\t\topacity: .9;\n\t\t}\n\t\t100% {\n\t\t\ttransform: scale(1);\n\t\t\topacity: .6;\n\t\t}\n\t}\n\n\t@keyframes rise {\n\t\tfrom {\n\t\t\topacity: 0;\n\t\t\ttransform: translateY(12px);\n\t\t}\n\t\tto {\n\t\t\topacity: 1;\n\t\t\ttransform: translateY(0);\n\t\t}\n\t}\n</style>\n\n<div class="settings-shell">\n\t<div class="aurora aurora-one"></div>\n\t<div class="aurora aurora-two"></div>\n\t<form [formGroup]="form" novalidate (ngSubmit)="submitForm(form)">\n\t\t<div class="settings-hero glass-card animate-rise">\n\t\t\t<div class="hero-main">\n\t\t\t\t<div class="hero-chip">User Settings</div>\n\t\t\t\t<h2>Welcome {{ user?.fullname || user?.username || user?.email || \'back\' }}!</h2>\n\t\t\t\t<p>Shape {{ client || \'your workspace\' }} into something joyful, colorful and uniquely you.</p>\n\t\t\t\t<div class="hero-actions">\n\t\t\t\t\t<button type="button" class="neon-btn" (click)="reset()">Reset to defaults</button>\n\t\t\t\t\t<div class="save-button">\n\t\t\t\t\t\t<form-button [form]="form" [disabled]="disableFormButton"></form-button>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class="hero-metrics">\n\t\t\t\t\t<div class="metric-pill">\n\t\t\t\t\t\t<span>Entries / page</span>\n\t\t\t\t\t\t<strong>{{ form.controls.entries_per_page.value }}</strong>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="metric-pill">\n\t\t\t\t\t\t<span>Font size</span>\n\t\t\t\t\t\t<strong>{{ form.controls.font_size.value }}px</strong>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="metric-pill">\n\t\t\t\t\t\t<span>Week starts</span>\n\t\t\t\t\t\t<strong>{{ form.controls.date_picker_day_start.value === \'M\' ? \'Monday\' : \'Sunday\' }}</strong>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class="hero-preview">\n\t\t\t\t<div class="preview-card">\n\t\t\t\t\t<div class="preview-title">Live palette peek</div>\n\t\t\t\t\t<div class="swatch-row">\n\t\t\t\t\t\t<div class="swatch" [style.background]="form.controls.primary_color.value" [style.color]="form.controls.primary_font_color.value">\n\t\t\t\t\t\t\t<span>Primary buttons</span>\n\t\t\t\t\t\t\t{{ form.controls.primary_color.value }}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class="swatch" [style.background]="form.controls.success_color.value" [style.color]="form.controls.success_font_color.value">\n\t\t\t\t\t\t\t<span>Success tone</span>\n\t\t\t\t\t\t\t{{ form.controls.success_color.value }}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class="swatch" [style.background]="form.controls.table_color.value" [style.color]="form.controls.table_font_color.value">\n\t\t\t\t\t\t\t<span>Primary table</span>\n\t\t\t\t\t\t\t{{ form.controls.table_color.value }}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class="preview-pulse"></div>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div class="section-grid">\n\t\t\t<div class="section-card glass-card animate-rise">\n\t\t\t\t<div class="section-heading">\n\t\t\t\t\t<h3>Experience preferences</h3>\n\t\t\t\t\t<p>Tune how the app greets you each day.</p>\n\t\t\t\t</div>\n\t\t\t\t<div class="field-grid">\n\t\t\t\t\t<label class="field-card">\n\t\t\t\t\t\t<div class="field-label">Collapsable menu</div>\n\t\t\t\t\t\t<p class="field-hint">Keep navigation cozy when you want focus.</p>\n\t\t\t\t\t\t<div class="toggle">\n\t\t\t\t\t\t\t<input class="toggle-input" type="checkbox" formControlName="collapsable_menu" />\n\t\t\t\t\t\t\t<span class="toggle-track">\n\t\t\t\t\t\t\t\t<span class="toggle-thumb"></span>\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t<div class="toggle-state">\n\t\t\t\t\t\t\t\t@if (form.controls.collapsable_menu.value) {\n\t\t\t\t\t\t\t\t\tCompact\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t@else {\n\t\t\t\t\t\t\t\t\tOpen\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</label>\n\t\t\t\t\t<div class="field-card">\n\t\t\t\t\t\t<div class="field-label">Default entries per page</div>\n\t\t\t\t\t\t<p class="field-hint">Pick your sweet spot for list density.</p>\n\t\t\t\t\t\t\t\t<ng-select class="input-bevel" [ngClass]="[form.controls.entries_per_page.valid ? \'is-valid\' : \'is-invalid\']" formControlName="entries_per_page" [clearable]="false" [searchable]="false">\n\t\t\t\t\t\t\t\t\t<ng-option value="25">25</ng-option>\n\t\t\t\t\t\t\t\t\t<ng-option value="50">50</ng-option>\n\t\t\t\t\t\t\t\t\t<ng-option value="100">100</ng-option>\n\t\t\t\t\t\t\t\t\t<ng-option value="250">250</ng-option>\n\t\t\t\t\t\t\t\t</ng-select>\n\t\t\t\t\t\t@if (!form.controls.entries_per_page.valid) {\n\t\t\t\t\t\t\t<div class="text-danger mt-1">Entries per page is required</div>\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="field-card">\n\t\t\t\t\t\t<div class="field-label">Select search style</div>\n\t\t\t\t\t\t<p class="field-hint">Decide if typing should be fuzzy or exact.</p>\n\t\t\t\t\t\t<ng-select class="input-bevel" [ngClass]="[form.controls.ng_select_search_mode.valid ? \'is-valid\' : \'is-invalid\']" formControlName="ng_select_search_mode" [clearable]="false" [searchable]="false">\n\t\t\t\t\t\t\t<ng-option value="fuzzy">Fuzzy (flexible matching)</ng-option>\n\t\t\t\t\t\t\t<ng-option value="exact">Exact (must contain the term)</ng-option>\n\t\t\t\t\t\t</ng-select>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="field-card">\n\t\t\t\t\t\t<div class="field-label">Font size</div>\n\t\t\t\t\t\t<p class="field-hint">We recommend between 11–14px for quick scanning.</p>\n\t\t\t\t\t\t<input class="input-bevel" [ngClass]="[form.controls.font_size.valid ? \'is-valid\' : \'is-invalid\']" type="number" formControlName="font_size" (keyup)="changePrimaryFontSize()" />\n\t\t\t\t\t\t@if (form.controls.font_size.hasError(\'required\')) {\n\t\t\t\t\t\t\t<div class="text-danger mt-1">Font size is required</div>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (form.controls.font_size.hasError(\'wholeNumbersGreaterThanZero\')) {\n\t\t\t\t\t\t\t<div class="text-danger mt-1">Font size is invalid</div>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (form.controls.font_size.hasError(\'maxValue\')) {\n\t\t\t\t\t\t\t<div class="text-danger mt-1">Font size can not exceed 18</div>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (form.controls.font_size.hasError(\'minValue\')) {\n\t\t\t\t\t\t\t<div class="text-danger mt-1">Font size can not be less than 8</div>\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="field-card">\n\t\t\t\t\t\t<div class="field-label">Week start (date picker)</div>\n\t\t\t\t\t\t<p class="field-hint">Pick where your planner begins.</p>\n\t\t\t\t\t\t<ng-select class="input-bevel" [ngClass]="[form.controls.date_picker_day_start.valid ? \'is-valid\' : \'is-invalid\']" formControlName="date_picker_day_start" [clearable]="false" [searchable]="false">\n\t\t\t\t\t\t\t<ng-option [value]="\'S\'">Sunday</ng-option>\n\t\t\t\t\t\t\t<ng-option [value]="\'M\'">Monday</ng-option>\n\t\t\t\t\t\t</ng-select>\n\t\t\t\t\t\t@if (form.controls.date_picker_day_start.hasError(\'required\')) {\n\t\t\t\t\t\t\t<div class="text-danger mt-1">Week start is required</div>\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="field-card">\n\t\t\t\t\t\t<div class="field-label">Starting page</div>\n\t\t\t\t\t\t<p class="field-hint">Jump right into the view you love most.</p>\n\t\t\t\t\t\t<ng-select class="input-bevel" [ngClass]="[form.controls.opening_route.valid ? \'is-valid\' : \'\']" formControlName="opening_route" [clearable]="false" [searchable]="false">\n\t\t\t\t\t\t\t<ng-option value="/home">Home</ng-option>\n\t\t\t\t\t\t\t@for (view of views; track view.display) {\n\t\t\t\t\t\t\t\t<ng-option [value]="view.value">{{ view.display | titleCase }}</ng-option>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ng-select>\n\t\t\t\t\t</div>\n\t\t\t\t\t@if (client === \'Ace Completions\') {\n\t\t\t\t\t\t<div class="field-card">\n\t\t\t\t\t\t\t<div class="field-label">Routing preference</div>\n\t\t\t\t\t\t\t<p class="field-hint">Decide how links open while you multitask.</p>\n\t\t\t\t\t\t\t<ng-select class="input-bevel" [ngClass]="[form.controls.routing_preference.valid ? \'is-valid\' : \'\']" formControlName="routing_preference" [clearable]="false" [searchable]="false">\n\t\t\t\t\t\t\t\t<ng-option value="alwaysAsk">Always Ask</ng-option>\n\t\t\t\t\t\t\t\t<ng-option value="sameTab">Same Tab</ng-option>\n\t\t\t\t\t\t\t\t<ng-option value="newTab">New Tab</ng-option>\n\t\t\t\t\t\t\t\t<ng-option value="newWindow">New Window</ng-option>\n\t\t\t\t\t\t\t</ng-select>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<div class="section-card glass-card animate-rise">\n\t\t\t\t<div class="section-heading">\n\t\t\t\t\t<h3>Table palette</h3>\n\t\t\t\t\t<p>Pick vibrant layers for your data rows.</p>\n\t\t\t\t</div>\n\t\t\t\t<div class="palette-preview">\n\t\t\t\t\t<div class="preview-table">\n\t\t\t\t\t\t<div class="row-swatch" [style.background]="form.controls.table_color.value" [style.color]="form.controls.table_font_color.value">\n\t\t\t\t\t\t\tPrimary header\n\t\t\t\t\t\t\t<span>{{ form.controls.table_font_color.value }}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class="row-swatch" [style.background]="form.controls.secondary_table_color.value" [style.color]="form.controls.secondary_table_font_color.value">\n\t\t\t\t\t\t\tSecondary header\n\t\t\t\t\t\t\t<span>{{ form.controls.secondary_table_font_color.value }}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class="row-swatch" [style.background]="form.controls.tertiary_table_color.value" [style.color]="form.controls.tertiary_table_font_color.value">\n\t\t\t\t\t\t\tTertiary header\n\t\t\t\t\t\t\t<span>{{ form.controls.tertiary_table_font_color.value }}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="preview-table">\n\t\t\t\t\t\t<div class="row-swatch" [style.background]="form.controls.warning_color.value" [style.color]="form.controls.warning_font_color.value">\n\t\t\t\t\t\t\tWarnings\n\t\t\t\t\t\t\t<span>{{ form.controls.warning_hover_color.value }}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class="row-swatch" [style.background]="form.controls.success_color.value" [style.color]="form.controls.success_font_color.value">\n\t\t\t\t\t\t\tSuccess\n\t\t\t\t\t\t\t<span>{{ form.controls.success_hover_color.value }}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class="row-swatch" [style.background]="form.controls.info_color.value" [style.color]="form.controls.info_font_color.value">\n\t\t\t\t\t\t\tInfo\n\t\t\t\t\t\t\t<span>{{ form.controls.info_hover_color.value }}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class="color-grid">\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Primary table background</div>\n\t\t\t\t\t\t\t<div class="field-hint">The hero row that anchors your data.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.table_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="table_color" (ngModelChange)="changePrimaryColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Primary table font</div>\n\t\t\t\t\t\t\t<div class="field-hint">Keep it crisp and readable.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.table_font_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="table_font_color" (ngModelChange)="changePrimaryFontColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Secondary table background</div>\n\t\t\t\t\t\t\t<div class="field-hint">Great for supporting sections.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.secondary_table_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="secondary_table_color" (ngModelChange)="changeSecondaryColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Secondary table font</div>\n\t\t\t\t\t\t\t<div class="field-hint">Match contrast with the new hue.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.secondary_table_font_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="secondary_table_font_color" (ngModelChange)="changeSecondaryFontColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Tertiary table background</div>\n\t\t\t\t\t\t\t<div class="field-hint">For extra callouts.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.tertiary_table_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="tertiary_table_color" (ngModelChange)="changeTertiaryColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Tertiary table font</div>\n\t\t\t\t\t\t\t<div class="field-hint">Balance brightness for legibility.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.tertiary_table_font_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="tertiary_table_font_color" (ngModelChange)="changeTertiaryFontColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<div class="section-card glass-card animate-rise">\n\t\t\t\t<div class="section-heading">\n\t\t\t\t\t<h3>Button glow-up</h3>\n\t\t\t\t\t<p>Make clicks feel friendly and intentional.</p>\n\t\t\t\t</div>\n\t\t\t\t<div class="button-demo">\n\t\t\t\t\t<button type="button" class="btn btn-success">Success</button>\n\t\t\t\t\t<button type="button" class="btn btn-warning">Warning</button>\n\t\t\t\t\t<button type="button" class="btn btn-danger">Danger</button>\n\t\t\t\t\t<button type="button" class="btn btn-info">Info</button>\n\t\t\t\t\t<button type="button" class="btn btn-primary">Primary</button>\n\t\t\t\t\t<button type="button" class="btn btn-secondary">Secondary</button>\n\t\t\t\t</div>\n\t\t\t\t<div class="color-grid">\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Success background</div>\n\t\t\t\t\t\t\t<div class="field-hint">Celebrate wins.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.success_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="success_color" (ngModelChange)="changeSuccessColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Success font</div>\n\t\t\t\t\t\t\t<div class="field-hint">Keep it sharp.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.success_font_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="success_font_color" (ngModelChange)="changeSuccessFontColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Success hover</div>\n\t\t\t\t\t\t\t<div class="field-hint">How the button greets hover.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.success_hover_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="success_hover_color" (ngModelChange)="changeSuccessHoverColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Warning background</div>\n\t\t\t\t\t\t\t<div class="field-hint">Gentle but visible.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.warning_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="warning_color" (ngModelChange)="changeWarningColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Warning font</div>\n\t\t\t\t\t\t\t<div class="field-hint">High contrast copy.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.warning_font_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="warning_font_color" (ngModelChange)="changeWarningFontColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Warning hover</div>\n\t\t\t\t\t\t\t<div class="field-hint">Add motion to caution.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.warning_hover_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="warning_hover_color" (ngModelChange)="changeWarningHoverColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Danger background</div>\n\t\t\t\t\t\t\t<div class="field-hint">Clear stop signal.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.danger_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="danger_color" (ngModelChange)="changeDangerColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Danger font</div>\n\t\t\t\t\t\t\t<div class="field-hint">Stay readable on alert.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.danger_font_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="danger_font_color" (ngModelChange)="changeDangerFontColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Danger hover</div>\n\t\t\t\t\t\t\t<div class="field-hint">Softer on hover.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.danger_hover_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="danger_hover_color" (ngModelChange)="changeDangerHoverColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Info background</div>\n\t\t\t\t\t\t\t<div class="field-hint">Highlight helpful hints.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.info_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="info_color" (ngModelChange)="changeInfoColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Info font</div>\n\t\t\t\t\t\t\t<div class="field-hint">Keep tips legible.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.info_font_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="info_font_color" (ngModelChange)="changeInfoFontColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Info hover</div>\n\t\t\t\t\t\t\t<div class="field-hint">Gentle motion on hover.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.info_hover_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="info_hover_color" (ngModelChange)="changeInfoHoverColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Primary background</div>\n\t\t\t\t\t\t\t<div class="field-hint">The hero action.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.primary_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="primary_color" (ngModelChange)="changePrimaryButtonColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Primary font</div>\n\t\t\t\t\t\t\t<div class="field-hint">Strong contrast for CTA.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.primary_font_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="primary_font_color" (ngModelChange)="changePrimaryButtonFontColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Primary hover</div>\n\t\t\t\t\t\t\t<div class="field-hint">A playful shift on hover.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.primary_hover_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="primary_hover_color" (ngModelChange)="changePrimaryButtonHoverColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Secondary background</div>\n\t\t\t\t\t\t\t<div class="field-hint">Great for subtle actions.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.secondary_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="secondary_color" (ngModelChange)="changeSecondaryButtonColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Secondary font</div>\n\t\t\t\t\t\t\t<div class="field-hint">Keep it balanced.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.secondary_font_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="secondary_font_color" (ngModelChange)="changeSecondaryButtonFontColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Secondary hover</div>\n\t\t\t\t\t\t\t<div class="field-hint">Add a soft glow.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.secondary_hover_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="secondary_hover_color" (ngModelChange)="changeSecondaryHoverColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<div class="section-card glass-card animate-rise sticky-section-card">\n\t\t\t\t<div class="section-heading">\n\t\t\t\t\t<h3>Sticky select defaults</h3>\n\t\t\t\t\t<p>Teach ResolveIO which choices you love.</p>\n\t\t\t\t</div>\n\t\t\t\t@if (!stickySelects.length) {\n\t\t\t\t\t<div class="sticky-empty">\n\t\t\t\t\t\tNo sticky selects saved yet. Add a stickyKey on a select to remember your favorite defaults.\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t\t@else {\n\t\t\t\t\t@for (sticky of stickySelects; track sticky.key) {\n\t\t\t\t\t\t<div class="field-card sticky-select-card">\n\t\t\t\t\t\t\t<div class="field-label">{{ sticky.key }}</div>\n\t\t\t\t\t\t\t@if (sticky.options && sticky.options.length) {\n\t\t\t\t\t\t\t\t<ng-select\n\t\t\t\t\t\t\t\t\t[(ngModel)]="stickySelections[sticky.key]"\n\t\t\t\t\t\t\t\t\t[ngModelOptions]="{standalone: true}"\n\t\t\t\t\t\t\t\t\t[options]="sticky.options"\n\t\t\t\t\t\t\t\t\toptionValueKey="value"\n\t\t\t\t\t\t\t\t\toptionLabelKey="label"\n\t\t\t\t\t\t\t\t\t[searchable]="false"\n\t\t\t\t\t\t\t\t\tappendTo="body"\n\t\t\t\t\t\t\t\t\t[stickyAutoSave]="true"\n\t\t\t\t\t\t\t\t\t(ngModelChange)="updateStickyDefault(sticky.key, $event)">\n\t\t\t\t\t\t\t\t</ng-select>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@if (!sticky.options || !sticky.options.length) {\n\t\t\t\t\t\t\t\t<div class="text-muted">No saved options yet.</div>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t</div>\n\t\t</div>\n\t</form>\n</div>\n',styles:[".sticky-section-card,.sticky-section-card *{transform:none!important}:host{display:block}::ng-deep :root{--primary-table-color: #3b3ee3;--primary-table-font-color: #ffffff;--font-size: 12px;--secondary-table-color: #87ceeb;--secondary-table-font-color: #000000;--tertiary-table-color: #ff4500;--tertiary-table-font-color: #000000;--warning-color: #ffc107;--warning-font-color: #000000;--warning-hover-color: #e0a800;--warning-shadow-color: 0 0 0 .2rem rgba(222, 170, 12, .5);--success-color: #28a745;--success-font-color: #ffffff;--success-hover-color: #218838;--success-shadow-color: 0 0 0 .2rem rgba(72, 180, 97, .5);--danger-color: #dc3545;--danger-font-color: #ffffff;--danger-hover-color: #c82333;--danger-shadow-color: 0 0 0 .2rem rgba(225, 83, 97, .5);--info-color: #17a2b8;--info-font-color: #ffffff;--info-hover-color: #138496;--info-shadow-color: 0 0 0 .2rem rgba(58, 176, 195, .5);--primary-color: #007bff;--primary-font-color: #ffffff;--primary-hover-color: #0069d9;--primary-shadow-color: 0 0 0 .2rem rgba(38, 143, 255, .5);--secondary-color: #868e96;--secondary-font-color: #ffffff;--secondary-hover-color: #5a6268;--secondary-shadow-color: 0 0 0 .2rem rgba(130, 138, 145, .5)}.settings-shell{position:relative;overflow:visible;padding:12px 8px 32px;background:radial-gradient(circle at 15% 20%,rgba(111,136,255,.12),transparent 35%),radial-gradient(circle at 80% 0%,rgba(255,130,92,.12),transparent 32%),linear-gradient(135deg,#f7f9ff,#fff 60%,#f5f7fb)}.aurora{position:absolute;width:420px;height:420px;border-radius:50%;filter:blur(70px);opacity:.55;mix-blend-mode:screen;animation:drift 18s ease-in-out infinite alternate;z-index:0}.aurora.aurora-one{background:radial-gradient(circle,#52a3ffb3,#8678ff40);top:-120px;left:-70px}.aurora.aurora-two{background:radial-gradient(circle,#ff935c99,#ffe3bb59);bottom:-140px;right:-40px;animation-duration:22s}.settings-hero{position:relative;z-index:1;display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:16px;align-items:center;margin-bottom:18px}.glass-card{background:#ffffffc7;border:1px solid rgba(255,255,255,.55);box-shadow:0 10px 40px #364a7824,inset 0 0 0 1px #ffffff52;border-radius:18px;padding:18px;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}.hero-main h2{font-weight:800;font-size:26px;margin-bottom:8px;color:#0f172a}.hero-main p{color:#4b5563;margin-bottom:12px}.hero-chip{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border-radius:999px;font-weight:700;color:#1f2937;background:linear-gradient(120deg,#6366f11a,#10b9811a,#3b82f61f);border:1px solid rgba(99,102,241,.25);margin-bottom:10px;text-transform:uppercase;letter-spacing:.04em;font-size:12px}.hero-actions{display:flex;flex-wrap:wrap;gap:12px;align-items:center;margin-top:12px}.neon-btn{position:relative;border:1px solid rgba(15,23,42,.1);background:linear-gradient(120deg,#6366f126,#3b82f614);color:#0f172a;font-weight:700;padding:10px 16px;border-radius:12px;box-shadow:0 10px 24px #6366f126;transition:transform .2s ease,box-shadow .2s ease,border-color .2s ease}.neon-btn:hover{transform:translateY(-2px);border-color:#6366f173;box-shadow:0 14px 26px #6366f138}.save-button form-button ::ng-deep button{border-radius:12px;font-weight:800;letter-spacing:.01em;padding:11px 18px;box-shadow:0 10px 26px #10b9813d}.hero-preview{position:relative}.preview-card{border-radius:16px;padding:16px;background:radial-gradient(circle at 20% 20%,#ffffffb3,#ffffff85);box-shadow:inset 0 1px #fffc,0 12px 30px #506eb929;border:1px solid rgba(255,255,255,.6)}.preview-title{font-weight:800;margin-bottom:8px;color:#111827}.swatch-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:10px}.swatch{border-radius:12px;padding:10px;color:#0f172a;font-weight:700;display:flex;align-items:center;justify-content:space-between;box-shadow:inset 0 1px #ffffff73;opacity:.98}.swatch span{font-size:12px;font-weight:600;color:#0f172ad9}.preview-pulse{position:absolute;width:120px;height:120px;border-radius:50%;background:radial-gradient(circle,rgba(16,185,129,.3),transparent 60%);bottom:-18px;right:-14px;filter:blur(12px);animation:pulse 2.4s ease-in-out infinite}.hero-metrics{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px}.metric-pill{background:#0f172a0f;border:1px solid rgba(15,23,42,.08);border-radius:999px;padding:8px 12px;font-weight:700;color:#0f172a;display:inline-flex;align-items:center;gap:6px}.section-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:14px;position:relative;z-index:1}.section-card{position:relative;overflow:visible}.section-heading{margin-bottom:12px;display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}.section-heading h3{margin:0;font-weight:800;color:#0f172a}.section-heading p{margin:0;color:#4b5563}.field-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px}.field-card{padding:12px;border-radius:14px;border:1px solid rgba(15,23,42,.06);background:#ffffffd9;box-shadow:inset 0 1px #ffffffb3;transition:transform .2s ease,box-shadow .2s ease}.field-card:hover{box-shadow:0 8px 22px #6366f11f}.sticky-select-card:hover{transform:none}.sticky-section-card{animation:none;transform:none}.field-label{font-weight:700;color:#111827;margin-bottom:4px;display:flex;align-items:center;justify-content:space-between;gap:6px}.field-hint{font-size:12px;color:#6b7280;margin:0}.input-bevel{border-radius:12px;border:1px solid rgba(15,23,42,.1);background:#ffffffeb;box-shadow:inset 0 1px #fffc;padding:10px 12px;width:100%}.toggle{display:flex;align-items:center;gap:8px}.toggle-input{display:none}.toggle-track{width:54px;height:30px;border-radius:999px;background:linear-gradient(120deg,#0f172a14,#0f172a26);position:relative;box-shadow:inset 0 1px #fff9;border:1px solid rgba(15,23,42,.12);transition:background .2s ease}.toggle-thumb{position:absolute;top:3px;left:3px;width:24px;height:24px;border-radius:50%;background:linear-gradient(135deg,#63a4ff,#83eaf1);box-shadow:0 8px 16px #6366f159;transition:transform .2s ease}.toggle-input:checked+.toggle-track{background:linear-gradient(120deg,#10b98126,#34d39940);border-color:#10b98173}.toggle-input:checked+.toggle-track .toggle-thumb{transform:translate(24px);background:linear-gradient(135deg,#10b981,#22d3ee);box-shadow:0 10px 18px #10b98152}.toggle-state{font-weight:700;color:#0f172a}.color-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:10px;margin-top:10px}.color-card{border-radius:14px;padding:12px;border:1px solid rgba(15,23,42,.06);background:#ffffffe6;display:grid;grid-template-columns:1fr 120px;gap:10px;align-items:center}.color-chip{display:flex;flex-direction:column;gap:4px}.color-name{font-weight:700;color:#0f172a}.color-preview{border-radius:12px;height:48px;border:1px solid rgba(15,23,42,.08);box-shadow:inset 0 1px #ffffffb3}.color-input{height:48px;border:1px solid rgba(15,23,42,.08);border-radius:12px;box-shadow:inset 0 1px #ffffffbf;width:100%;cursor:pointer}.palette-preview{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:10px;margin-bottom:8px}.preview-table{border-radius:12px;padding:10px;background:linear-gradient(160deg,#ffffffd9,#ffffffb3);border:1px solid rgba(15,23,42,.08);box-shadow:inset 0 1px #fffc}.preview-table .row-swatch{border-radius:10px;padding:10px;font-weight:700;margin-bottom:6px;display:flex;align-items:center;justify-content:space-between;box-shadow:inset 0 1px #fff9}.preview-table .row-swatch:last-child{margin-bottom:0}.button-demo{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:10px}.btn-warning{color:var(--warning-font-color);background-color:var(--warning-color);border-color:var(--warning-color)}.btn-warning:focus,.btn-warning.focus{box-shadow:var(--warning-shadow-color)}.btn-warning:hover{color:var(--warning-font-color);background-color:var(--warning-hover-color);border-color:var(--warning-hover-color)}.btn-success{color:var(--success-font-color);background-color:var(--success-color);border-color:var(--success-color)}.btn-success:focus,.btn-success.focus{box-shadow:var(--success-shadow-color)}.btn-success:hover{color:var(--success-font-color);background-color:var(--success-hover-color);border-color:var(--success-hover-color)}.btn-danger{color:var(--danger-font-color);background-color:var(--danger-color);border-color:var(--danger-color)}.btn-danger:focus,.btn-danger.focus{box-shadow:var(--danger-shadow-color)}.btn-danger:hover{color:var(--danger-font-color);background-color:var(--danger-hover-color);border-color:var(--danger-hover-color)}.btn-info{color:var(--info-font-color);background-color:var(--info-color);border-color:var(--info-color)}.btn-info:focus,.btn-info.focus{box-shadow:var(--info-shadow-color)}.btn-info:hover{color:var(--info-font-color);background-color:var(--info-hover-color);border-color:var(--info-hover-color)}.btn-primary{color:var(--primary-font-color);background-color:var(--primary-color);border-color:var(--primary-color)}.btn-primary:focus,.btn-primary.focus{box-shadow:var(--primary-shadow-color)}.btn-primary:hover{color:var(--primary-font-color);background-color:var(--primary-hover-color);border-color:var(--primary-hover-color)}.btn-secondary{color:var(--secondary-font-color);background-color:var(--secondary-color);border-color:var(--secondary-color)}.btn-secondary:focus,.btn-secondary.focus{box-shadow:var(--secondary-shadow-color)}.btn-secondary:hover{color:var(--secondary-font-color);background-color:var(--secondary-hover-color);border-color:var(--secondary-hover-color)}.ng-select .ng-select-container{border-radius:12px!important;min-height:42px!important;border-color:#0f172a1a!important;box-shadow:inset 0 1px #ffffffb3}.sticky-empty{background:#17a2b81f;color:#0f4c75;border:1px solid rgba(23,162,184,.2);border-radius:12px;padding:12px}.animate-rise{animation:rise .5s ease}@keyframes drift{0%{transform:translateY(0) translate(0)}to{transform:translateY(-30px) translate(20px)}}@keyframes pulse{0%{transform:scale(1);opacity:.6}50%{transform:scale(1.08);opacity:.9}to{transform:scale(1);opacity:.6}}@keyframes rise{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}\n"],dependencies:[{kind:"directive",type:i2.ɵNgNoValidate,selector:"form:not([ngNoForm]):not([ngNativeValidate])"},{kind:"directive",type:i2.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:i2.NumberValueAccessor,selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]"},{kind:"directive",type:i2.CheckboxControlValueAccessor,selector:"input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]"},{kind:"directive",type:i2.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:i2.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:i2.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:i2.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:i2.NgModel,selector:"[ngModel]:not([formControlName]):not([formControl])",inputs:["name","disabled","ngModel","ngModelOptions"],outputs:["ngModelChange"],exportAs:["ngModel"]},{kind:"component",type:FormButtonComponent,selector:"form-button",inputs:["form","disabled","type"]},{kind:"component",type:i5.NgSelectComponent,selector:"ng-select",inputs:["placeholder","multiple","panelMaxHeight","panelMaxViewportRatio","optionHeight","virtualBuffer","overlayZIndex","autoSizePanel","panelPosition","autoCenterPanel","viewportMargin","panelWidth","panelFullscreenWidth","clearable","templateLabelFromView","searchable","searchMatchMode","textWrap","compareWith","options","optionLabelKey","optionLabelFn","optionValueKey","optionDisabledKey","optionIdKey","optionGroupKey","disabled","emitOptionObject","debugLog","stickyKey","stickyAutoSave"],outputs:["change"]},{kind:"component",type:i5.NgOptionComponent,selector:"ng-option",inputs:["value","disabled","label","id"]},{kind:"directive",type:i7.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]},{kind:"pipe",type:TitleCaseAndUnderscorePipe,name:"titleCase"}]})}function hexToRGB(t,e){let n=parseInt(t.slice(1,3),16),o=parseInt(t.slice(3,5),16),r=parseInt(t.slice(5,7),16);return e?"rgba("+n+", "+o+", "+r+", "+e+")":"rgb("+n+", "+o+", "+r+")"}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:UsersSettingsComponent,decorators:[{type:Component,args:[{selector:"resolveio-users-settings",providers:[ProviderService],standalone:!1,template:'<style>\n\t.sticky-section-card,\n\t.sticky-section-card * {\n\t\ttransform: none !important;\n\t}\n\n\t:host {\n\t\tdisplay: block;\n\t}\n\n\t::ng-deep :root {\n\t\t--primary-table-color: #3b3ee3;\n\t\t--primary-table-font-color: #ffffff;\n\t\t--font-size: 12px;\n\t\t--secondary-table-color: #87ceeb;\n\t\t--secondary-table-font-color: #000000;\n\t\t--tertiary-table-color: #ff4500;\n\t\t--tertiary-table-font-color: #000000;\n\t\t--warning-color: #ffc107;\n\t\t--warning-font-color: #000000;\n\t\t--warning-hover-color: #e0a800;\n\t\t--warning-shadow-color: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n\t\t--success-color: #28a745;\n\t\t--success-font-color: #ffffff;\n\t\t--success-hover-color: #218838;\n\t\t--success-shadow-color: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n\t\t--danger-color: #dc3545;\n\t\t--danger-font-color: #ffffff;\n\t\t--danger-hover-color: #c82333;\n\t\t--danger-shadow-color: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n\t\t--info-color: #17a2b8;\n\t\t--info-font-color: #ffffff;\n\t\t--info-hover-color: #138496;\n\t\t--info-shadow-color: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n\t\t--primary-color: #007bff;\n\t\t--primary-font-color: #ffffff;\n\t\t--primary-hover-color: #0069d9;\n\t\t--primary-shadow-color: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n\t\t--secondary-color: #868e96;\n\t\t--secondary-font-color: #ffffff;\n\t\t--secondary-hover-color: #5a6268;\n\t\t--secondary-shadow-color: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n\t}\n\n\t.settings-shell {\n\t\tposition: relative;\n\t\toverflow: visible;\n\t\tpadding: 12px 8px 32px;\n\t\tbackground: radial-gradient(circle at 15% 20%, rgba(111, 136, 255, 0.12), transparent 35%),\n\t\t\tradial-gradient(circle at 80% 0%, rgba(255, 130, 92, 0.12), transparent 32%),\n\t\t\tlinear-gradient(135deg, #f7f9ff 0%, #ffffff 60%, #f5f7fb 100%);\n\t}\n\n\t.aurora {\n\t\tposition: absolute;\n\t\twidth: 420px;\n\t\theight: 420px;\n\t\tborder-radius: 50%;\n\t\tfilter: blur(70px);\n\t\topacity: .55;\n\t\tmix-blend-mode: screen;\n\t\tanimation: drift 18s ease-in-out infinite alternate;\n\t\tz-index: 0;\n\t}\n\n\t.aurora.aurora-one {\n\t\tbackground: radial-gradient(circle, rgba(82, 163, 255, .7), rgba(134, 120, 255, .25));\n\t\ttop: -120px;\n\t\tleft: -70px;\n\t}\n\n\t.aurora.aurora-two {\n\t\tbackground: radial-gradient(circle, rgba(255, 147, 92, .6), rgba(255, 227, 187, .35));\n\t\tbottom: -140px;\n\t\tright: -40px;\n\t\tanimation-duration: 22s;\n\t}\n\n\t.settings-hero {\n\t\tposition: relative;\n\t\tz-index: 1;\n\t\tdisplay: grid;\n\t\tgrid-template-columns: repeat(auto-fit, minmax(320px, 1fr));\n\t\tgap: 16px;\n\t\talign-items: center;\n\t\tmargin-bottom: 18px;\n\t}\n\n\t.glass-card {\n\t\tbackground: rgba(255, 255, 255, .78);\n\t\tborder: 1px solid rgba(255, 255, 255, .55);\n\t\tbox-shadow: 0 10px 40px rgba(54, 74, 120, .14), inset 0 0 0 1px rgba(255, 255, 255, .32);\n\t\tborder-radius: 18px;\n\t\tpadding: 18px;\n\t\tbackdrop-filter: blur(8px);\n\t\t-webkit-backdrop-filter: blur(8px);\n\t}\n\n\t.hero-main h2 {\n\t\tfont-weight: 800;\n\t\tfont-size: 26px;\n\t\tmargin-bottom: 8px;\n\t\tcolor: #0f172a;\n\t}\n\n\t.hero-main p {\n\t\tcolor: #4b5563;\n\t\tmargin-bottom: 12px;\n\t}\n\n\t.hero-chip {\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tgap: 6px;\n\t\tpadding: 6px 12px;\n\t\tborder-radius: 999px;\n\t\tfont-weight: 700;\n\t\tcolor: #1f2937;\n\t\tbackground: linear-gradient(120deg, rgba(99, 102, 241, .1), rgba(16, 185, 129, .1), rgba(59, 130, 246, .12));\n\t\tborder: 1px solid rgba(99, 102, 241, .25);\n\t\tmargin-bottom: 10px;\n\t\ttext-transform: uppercase;\n\t\tletter-spacing: .04em;\n\t\tfont-size: 12px;\n\t}\n\n\t.hero-actions {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\tgap: 12px;\n\t\talign-items: center;\n\t\tmargin-top: 12px;\n\t}\n\n\t.neon-btn {\n\t\tposition: relative;\n\t\tborder: 1px solid rgba(15, 23, 42, .1);\n\t\tbackground: linear-gradient(120deg, rgba(99, 102, 241, .15), rgba(59, 130, 246, .08));\n\t\tcolor: #0f172a;\n\t\tfont-weight: 700;\n\t\tpadding: 10px 16px;\n\t\tborder-radius: 12px;\n\t\tbox-shadow: 0 10px 24px rgba(99, 102, 241, .15);\n\t\ttransition: transform .2s ease, box-shadow .2s ease, border-color .2s ease;\n\t}\n\n\t.neon-btn:hover {\n\t\ttransform: translateY(-2px);\n\t\tborder-color: rgba(99, 102, 241, .45);\n\t\tbox-shadow: 0 14px 26px rgba(99, 102, 241, .22);\n\t}\n\n\t.save-button form-button ::ng-deep button {\n\t\tborder-radius: 12px;\n\t\tfont-weight: 800;\n\t\tletter-spacing: .01em;\n\t\tpadding: 11px 18px;\n\t\tbox-shadow: 0 10px 26px rgba(16, 185, 129, .24);\n\t}\n\n\t.hero-preview {\n\t\tposition: relative;\n\t}\n\n\t.preview-card {\n\t\tborder-radius: 16px;\n\t\tpadding: 16px;\n\t\tbackground: radial-gradient(circle at 20% 20%, rgba(255, 255, 255, .7), rgba(255, 255, 255, .52));\n\t\tbox-shadow: inset 0 1px 0 rgba(255, 255, 255, .8), 0 12px 30px rgba(80, 110, 185, .16);\n\t\tborder: 1px solid rgba(255, 255, 255, .6);\n\t}\n\n\t.preview-title {\n\t\tfont-weight: 800;\n\t\tmargin-bottom: 8px;\n\t\tcolor: #111827;\n\t}\n\n\t.swatch-row {\n\t\tdisplay: grid;\n\t\tgrid-template-columns: repeat(auto-fit, minmax(140px, 1fr));\n\t\tgap: 10px;\n\t}\n\n\t.swatch {\n\t\tborder-radius: 12px;\n\t\tpadding: 10px;\n\t\tcolor: #0f172a;\n\t\tfont-weight: 700;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: space-between;\n\t\tbox-shadow: inset 0 1px 0 rgba(255, 255, 255, .45);\n\t\topacity: .98;\n\t}\n\n\t.swatch span {\n\t\tfont-size: 12px;\n\t\tfont-weight: 600;\n\t\tcolor: rgba(15, 23, 42, .85);\n\t}\n\n\t.preview-pulse {\n\t\tposition: absolute;\n\t\twidth: 120px;\n\t\theight: 120px;\n\t\tborder-radius: 50%;\n\t\tbackground: radial-gradient(circle, rgba(16, 185, 129, .3), transparent 60%);\n\t\tbottom: -18px;\n\t\tright: -14px;\n\t\tfilter: blur(12px);\n\t\tanimation: pulse 2.4s ease-in-out infinite;\n\t}\n\n\t.hero-metrics {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\tgap: 8px;\n\t\tmargin-top: 14px;\n\t}\n\n\t.metric-pill {\n\t\tbackground: rgba(15, 23, 42, .06);\n\t\tborder: 1px solid rgba(15, 23, 42, .08);\n\t\tborder-radius: 999px;\n\t\tpadding: 8px 12px;\n\t\tfont-weight: 700;\n\t\tcolor: #0f172a;\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tgap: 6px;\n\t}\n\n\t.section-grid {\n\t\tdisplay: grid;\n\t\tgrid-template-columns: repeat(auto-fit, minmax(320px, 1fr));\n\t\tgap: 14px;\n\t\tposition: relative;\n\t\tz-index: 1;\n\t}\n\n\t.section-card {\n\t\tposition: relative;\n\t\toverflow: visible;\n\t}\n\n\t.section-heading {\n\t\tmargin-bottom: 12px;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: space-between;\n\t\tgap: 10px;\n\t\tflex-wrap: wrap;\n\t}\n\n\t.section-heading h3 {\n\t\tmargin: 0;\n\t\tfont-weight: 800;\n\t\tcolor: #0f172a;\n\t}\n\n\t.section-heading p {\n\t\tmargin: 0;\n\t\tcolor: #4b5563;\n\t}\n\n\t.field-grid {\n\t\tdisplay: grid;\n\t\tgrid-template-columns: repeat(auto-fit, minmax(240px, 1fr));\n\t\tgap: 12px;\n\t}\n\n\t.field-card {\n\t\tpadding: 12px;\n\t\tborder-radius: 14px;\n\t\tborder: 1px solid rgba(15, 23, 42, .06);\n\t\tbackground: rgba(255, 255, 255, .85);\n\t\tbox-shadow: inset 0 1px 0 rgba(255, 255, 255, .7);\n\t\ttransition: transform .2s ease, box-shadow .2s ease;\n\t}\n\n\t.field-card:hover {\n\t\tbox-shadow: 0 8px 22px rgba(99, 102, 241, .12);\n\t}\n\n\t/* Avoid transforming the sticky select card so the fixed overlay positions correctly. */\n\t.sticky-select-card:hover {\n\t\ttransform: none;\n\t}\n\n\t.sticky-section-card {\n\t\tanimation: none;\n\t\ttransform: none;\n\t}\n\n\t.field-label {\n\t\tfont-weight: 700;\n\t\tcolor: #111827;\n\t\tmargin-bottom: 4px;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: space-between;\n\t\tgap: 6px;\n\t}\n\n\t.field-hint {\n\t\tfont-size: 12px;\n\t\tcolor: #6b7280;\n\t\tmargin: 0;\n\t}\n\n\t.input-bevel {\n\t\tborder-radius: 12px;\n\t\tborder: 1px solid rgba(15, 23, 42, .1);\n\t\tbackground: rgba(255, 255, 255, .92);\n\t\tbox-shadow: inset 0 1px 0 rgba(255, 255, 255, .8);\n\t\tpadding: 10px 12px;\n\t\twidth: 100%;\n\t}\n\n\t.toggle {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 8px;\n\t}\n\n\t.toggle-input {\n\t\tdisplay: none;\n\t}\n\n\t.toggle-track {\n\t\twidth: 54px;\n\t\theight: 30px;\n\t\tborder-radius: 999px;\n\t\tbackground: linear-gradient(120deg, rgba(15, 23, 42, .08), rgba(15, 23, 42, .15));\n\t\tposition: relative;\n\t\tbox-shadow: inset 0 1px 0 rgba(255, 255, 255, .6);\n\t\tborder: 1px solid rgba(15, 23, 42, .12);\n\t\ttransition: background .2s ease;\n\t}\n\n\t.toggle-thumb {\n\t\tposition: absolute;\n\t\ttop: 3px;\n\t\tleft: 3px;\n\t\twidth: 24px;\n\t\theight: 24px;\n\t\tborder-radius: 50%;\n\t\tbackground: linear-gradient(135deg, #63a4ff, #83eaf1);\n\t\tbox-shadow: 0 8px 16px rgba(99, 102, 241, .35);\n\t\ttransition: transform .2s ease;\n\t}\n\n\t.toggle-input:checked + .toggle-track {\n\t\tbackground: linear-gradient(120deg, rgba(16, 185, 129, .15), rgba(52, 211, 153, .25));\n\t\tborder-color: rgba(16, 185, 129, .45);\n\t}\n\n\t.toggle-input:checked + .toggle-track .toggle-thumb {\n\t\ttransform: translateX(24px);\n\t\tbackground: linear-gradient(135deg, #10b981, #22d3ee);\n\t\tbox-shadow: 0 10px 18px rgba(16, 185, 129, .32);\n\t}\n\n\t.toggle-state {\n\t\tfont-weight: 700;\n\t\tcolor: #0f172a;\n\t}\n\n\t.color-grid {\n\t\tdisplay: grid;\n\t\tgrid-template-columns: repeat(auto-fit, minmax(260px, 1fr));\n\t\tgap: 10px;\n\t\tmargin-top: 10px;\n\t}\n\n\t.color-card {\n\t\tborder-radius: 14px;\n\t\tpadding: 12px;\n\t\tborder: 1px solid rgba(15, 23, 42, .06);\n\t\tbackground: rgba(255, 255, 255, .9);\n\t\tdisplay: grid;\n\t\tgrid-template-columns: 1fr 120px;\n\t\tgap: 10px;\n\t\talign-items: center;\n\t}\n\n\t.color-chip {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 4px;\n\t}\n\n\t.color-name {\n\t\tfont-weight: 700;\n\t\tcolor: #0f172a;\n\t}\n\n\t.color-preview {\n\t\tborder-radius: 12px;\n\t\theight: 48px;\n\t\tborder: 1px solid rgba(15, 23, 42, .08);\n\t\tbox-shadow: inset 0 1px 0 rgba(255, 255, 255, .7);\n\t}\n\n\t.color-input {\n\t\theight: 48px;\n\t\tborder: 1px solid rgba(15, 23, 42, .08);\n\t\tborder-radius: 12px;\n\t\tbox-shadow: inset 0 1px 0 rgba(255, 255, 255, .75);\n\t\twidth: 100%;\n\t\tcursor: pointer;\n\t}\n\n\t.palette-preview {\n\t\tdisplay: grid;\n\t\tgrid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n\t\tgap: 10px;\n\t\tmargin-bottom: 8px;\n\t}\n\n\t.preview-table {\n\t\tborder-radius: 12px;\n\t\tpadding: 10px;\n\t\tbackground: linear-gradient(160deg, rgba(255, 255, 255, .85), rgba(255, 255, 255, .7));\n\t\tborder: 1px solid rgba(15, 23, 42, .08);\n\t\tbox-shadow: inset 0 1px 0 rgba(255, 255, 255, .8);\n\t}\n\n\t.preview-table .row-swatch {\n\t\tborder-radius: 10px;\n\t\tpadding: 10px;\n\t\tfont-weight: 700;\n\t\tmargin-bottom: 6px;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: space-between;\n\t\tbox-shadow: inset 0 1px 0 rgba(255, 255, 255, .6);\n\t}\n\n\t.preview-table .row-swatch:last-child {\n\t\tmargin-bottom: 0;\n\t}\n\n\t.button-demo {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\tgap: 8px;\n\t\tmargin-bottom: 10px;\n\t}\n\n\t.btn-warning {\n\t\tcolor: var(--warning-font-color);\n\t\tbackground-color: var(--warning-color);\n\t\tborder-color: var(--warning-color);\n\t}\n\n\t.btn-warning:focus,\n\t.btn-warning.focus {\n\t\tbox-shadow: var(--warning-shadow-color);\n\t}\n\n\t.btn-warning:hover {\n\t\tcolor: var(--warning-font-color);\n\t\tbackground-color: var(--warning-hover-color);\n\t\tborder-color: var(--warning-hover-color);\n\t}\n\n\t.btn-success {\n\t\tcolor: var(--success-font-color);\n\t\tbackground-color: var(--success-color);\n\t\tborder-color: var(--success-color);\n\t}\n\n\t.btn-success:focus,\n\t.btn-success.focus {\n\t\tbox-shadow: var(--success-shadow-color);\n\t}\n\n\t.btn-success:hover {\n\t\tcolor: var(--success-font-color);\n\t\tbackground-color: var(--success-hover-color);\n\t\tborder-color: var(--success-hover-color);\n\t}\n\n\t.btn-danger {\n\t\tcolor: var(--danger-font-color);\n\t\tbackground-color: var(--danger-color);\n\t\tborder-color: var(--danger-color);\n\t}\n\n\t.btn-danger:focus,\n\t.btn-danger.focus {\n\t\tbox-shadow: var(--danger-shadow-color);\n\t}\n\n\t.btn-danger:hover {\n\t\tcolor: var(--danger-font-color);\n\t\tbackground-color: var(--danger-hover-color);\n\t\tborder-color: var(--danger-hover-color);\n\t}\n\n\t.btn-info {\n\t\tcolor: var(--info-font-color);\n\t\tbackground-color: var(--info-color);\n\t\tborder-color: var(--info-color);\n\t}\n\n\t.btn-info:focus,\n\t.btn-info.focus {\n\t\tbox-shadow: var(--info-shadow-color);\n\t}\n\n\t.btn-info:hover {\n\t\tcolor: var(--info-font-color);\n\t\tbackground-color: var(--info-hover-color);\n\t\tborder-color: var(--info-hover-color);\n\t}\n\n\t.btn-primary {\n\t\tcolor: var(--primary-font-color);\n\t\tbackground-color: var(--primary-color);\n\t\tborder-color: var(--primary-color);\n\t}\n\n\t.btn-primary:focus,\n\t.btn-primary.focus {\n\t\tbox-shadow: var(--primary-shadow-color);\n\t}\n\n\t.btn-primary:hover {\n\t\tcolor: var(--primary-font-color);\n\t\tbackground-color: var(--primary-hover-color);\n\t\tborder-color: var(--primary-hover-color);\n\t}\n\n\t.btn-secondary {\n\t\tcolor: var(--secondary-font-color);\n\t\tbackground-color: var(--secondary-color);\n\t\tborder-color: var(--secondary-color);\n\t}\n\n\t.btn-secondary:focus,\n\t.btn-secondary.focus {\n\t\tbox-shadow: var(--secondary-shadow-color);\n\t}\n\n\t.btn-secondary:hover {\n\t\tcolor: var(--secondary-font-color);\n\t\tbackground-color: var(--secondary-hover-color);\n\t\tborder-color: var(--secondary-hover-color);\n\t}\n\n\t.ng-select .ng-select-container {\n\t\tborder-radius: 12px !important;\n\t\tmin-height: 42px !important;\n\t\tborder-color: rgba(15, 23, 42, .1) !important;\n\t\tbox-shadow: inset 0 1px 0 rgba(255, 255, 255, .7);\n\t}\n\n\t.sticky-empty {\n\t\tbackground: rgba(23, 162, 184, .12);\n\t\tcolor: #0f4c75;\n\t\tborder: 1px solid rgba(23, 162, 184, .2);\n\t\tborder-radius: 12px;\n\t\tpadding: 12px;\n\t}\n\n\t.animate-rise {\n\t\tanimation: rise .5s ease;\n\t}\n\n\t@keyframes drift {\n\t\tfrom {\n\t\t\ttransform: translateY(0) translateX(0);\n\t\t}\n\t\tto {\n\t\t\ttransform: translateY(-30px) translateX(20px);\n\t\t}\n\t}\n\n\t@keyframes pulse {\n\t\t0% {\n\t\t\ttransform: scale(1);\n\t\t\topacity: .6;\n\t\t}\n\t\t50% {\n\t\t\ttransform: scale(1.08);\n\t\t\topacity: .9;\n\t\t}\n\t\t100% {\n\t\t\ttransform: scale(1);\n\t\t\topacity: .6;\n\t\t}\n\t}\n\n\t@keyframes rise {\n\t\tfrom {\n\t\t\topacity: 0;\n\t\t\ttransform: translateY(12px);\n\t\t}\n\t\tto {\n\t\t\topacity: 1;\n\t\t\ttransform: translateY(0);\n\t\t}\n\t}\n</style>\n\n<div class="settings-shell">\n\t<div class="aurora aurora-one"></div>\n\t<div class="aurora aurora-two"></div>\n\t<form [formGroup]="form" novalidate (ngSubmit)="submitForm(form)">\n\t\t<div class="settings-hero glass-card animate-rise">\n\t\t\t<div class="hero-main">\n\t\t\t\t<div class="hero-chip">User Settings</div>\n\t\t\t\t<h2>Welcome {{ user?.fullname || user?.username || user?.email || \'back\' }}!</h2>\n\t\t\t\t<p>Shape {{ client || \'your workspace\' }} into something joyful, colorful and uniquely you.</p>\n\t\t\t\t<div class="hero-actions">\n\t\t\t\t\t<button type="button" class="neon-btn" (click)="reset()">Reset to defaults</button>\n\t\t\t\t\t<div class="save-button">\n\t\t\t\t\t\t<form-button [form]="form" [disabled]="disableFormButton"></form-button>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class="hero-metrics">\n\t\t\t\t\t<div class="metric-pill">\n\t\t\t\t\t\t<span>Entries / page</span>\n\t\t\t\t\t\t<strong>{{ form.controls.entries_per_page.value }}</strong>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="metric-pill">\n\t\t\t\t\t\t<span>Font size</span>\n\t\t\t\t\t\t<strong>{{ form.controls.font_size.value }}px</strong>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="metric-pill">\n\t\t\t\t\t\t<span>Week starts</span>\n\t\t\t\t\t\t<strong>{{ form.controls.date_picker_day_start.value === \'M\' ? \'Monday\' : \'Sunday\' }}</strong>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class="hero-preview">\n\t\t\t\t<div class="preview-card">\n\t\t\t\t\t<div class="preview-title">Live palette peek</div>\n\t\t\t\t\t<div class="swatch-row">\n\t\t\t\t\t\t<div class="swatch" [style.background]="form.controls.primary_color.value" [style.color]="form.controls.primary_font_color.value">\n\t\t\t\t\t\t\t<span>Primary buttons</span>\n\t\t\t\t\t\t\t{{ form.controls.primary_color.value }}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class="swatch" [style.background]="form.controls.success_color.value" [style.color]="form.controls.success_font_color.value">\n\t\t\t\t\t\t\t<span>Success tone</span>\n\t\t\t\t\t\t\t{{ form.controls.success_color.value }}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class="swatch" [style.background]="form.controls.table_color.value" [style.color]="form.controls.table_font_color.value">\n\t\t\t\t\t\t\t<span>Primary table</span>\n\t\t\t\t\t\t\t{{ form.controls.table_color.value }}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class="preview-pulse"></div>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div class="section-grid">\n\t\t\t<div class="section-card glass-card animate-rise">\n\t\t\t\t<div class="section-heading">\n\t\t\t\t\t<h3>Experience preferences</h3>\n\t\t\t\t\t<p>Tune how the app greets you each day.</p>\n\t\t\t\t</div>\n\t\t\t\t<div class="field-grid">\n\t\t\t\t\t<label class="field-card">\n\t\t\t\t\t\t<div class="field-label">Collapsable menu</div>\n\t\t\t\t\t\t<p class="field-hint">Keep navigation cozy when you want focus.</p>\n\t\t\t\t\t\t<div class="toggle">\n\t\t\t\t\t\t\t<input class="toggle-input" type="checkbox" formControlName="collapsable_menu" />\n\t\t\t\t\t\t\t<span class="toggle-track">\n\t\t\t\t\t\t\t\t<span class="toggle-thumb"></span>\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t<div class="toggle-state">\n\t\t\t\t\t\t\t\t@if (form.controls.collapsable_menu.value) {\n\t\t\t\t\t\t\t\t\tCompact\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t@else {\n\t\t\t\t\t\t\t\t\tOpen\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</label>\n\t\t\t\t\t<div class="field-card">\n\t\t\t\t\t\t<div class="field-label">Default entries per page</div>\n\t\t\t\t\t\t<p class="field-hint">Pick your sweet spot for list density.</p>\n\t\t\t\t\t\t\t\t<ng-select class="input-bevel" [ngClass]="[form.controls.entries_per_page.valid ? \'is-valid\' : \'is-invalid\']" formControlName="entries_per_page" [clearable]="false" [searchable]="false">\n\t\t\t\t\t\t\t\t\t<ng-option value="25">25</ng-option>\n\t\t\t\t\t\t\t\t\t<ng-option value="50">50</ng-option>\n\t\t\t\t\t\t\t\t\t<ng-option value="100">100</ng-option>\n\t\t\t\t\t\t\t\t\t<ng-option value="250">250</ng-option>\n\t\t\t\t\t\t\t\t</ng-select>\n\t\t\t\t\t\t@if (!form.controls.entries_per_page.valid) {\n\t\t\t\t\t\t\t<div class="text-danger mt-1">Entries per page is required</div>\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="field-card">\n\t\t\t\t\t\t<div class="field-label">Select search style</div>\n\t\t\t\t\t\t<p class="field-hint">Decide if typing should be fuzzy or exact.</p>\n\t\t\t\t\t\t<ng-select class="input-bevel" [ngClass]="[form.controls.ng_select_search_mode.valid ? \'is-valid\' : \'is-invalid\']" formControlName="ng_select_search_mode" [clearable]="false" [searchable]="false">\n\t\t\t\t\t\t\t<ng-option value="fuzzy">Fuzzy (flexible matching)</ng-option>\n\t\t\t\t\t\t\t<ng-option value="exact">Exact (must contain the term)</ng-option>\n\t\t\t\t\t\t</ng-select>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="field-card">\n\t\t\t\t\t\t<div class="field-label">Font size</div>\n\t\t\t\t\t\t<p class="field-hint">We recommend between 11–14px for quick scanning.</p>\n\t\t\t\t\t\t<input class="input-bevel" [ngClass]="[form.controls.font_size.valid ? \'is-valid\' : \'is-invalid\']" type="number" formControlName="font_size" (keyup)="changePrimaryFontSize()" />\n\t\t\t\t\t\t@if (form.controls.font_size.hasError(\'required\')) {\n\t\t\t\t\t\t\t<div class="text-danger mt-1">Font size is required</div>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (form.controls.font_size.hasError(\'wholeNumbersGreaterThanZero\')) {\n\t\t\t\t\t\t\t<div class="text-danger mt-1">Font size is invalid</div>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (form.controls.font_size.hasError(\'maxValue\')) {\n\t\t\t\t\t\t\t<div class="text-danger mt-1">Font size can not exceed 18</div>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (form.controls.font_size.hasError(\'minValue\')) {\n\t\t\t\t\t\t\t<div class="text-danger mt-1">Font size can not be less than 8</div>\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="field-card">\n\t\t\t\t\t\t<div class="field-label">Week start (date picker)</div>\n\t\t\t\t\t\t<p class="field-hint">Pick where your planner begins.</p>\n\t\t\t\t\t\t<ng-select class="input-bevel" [ngClass]="[form.controls.date_picker_day_start.valid ? \'is-valid\' : \'is-invalid\']" formControlName="date_picker_day_start" [clearable]="false" [searchable]="false">\n\t\t\t\t\t\t\t<ng-option [value]="\'S\'">Sunday</ng-option>\n\t\t\t\t\t\t\t<ng-option [value]="\'M\'">Monday</ng-option>\n\t\t\t\t\t\t</ng-select>\n\t\t\t\t\t\t@if (form.controls.date_picker_day_start.hasError(\'required\')) {\n\t\t\t\t\t\t\t<div class="text-danger mt-1">Week start is required</div>\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="field-card">\n\t\t\t\t\t\t<div class="field-label">Starting page</div>\n\t\t\t\t\t\t<p class="field-hint">Jump right into the view you love most.</p>\n\t\t\t\t\t\t<ng-select class="input-bevel" [ngClass]="[form.controls.opening_route.valid ? \'is-valid\' : \'\']" formControlName="opening_route" [clearable]="false" [searchable]="false">\n\t\t\t\t\t\t\t<ng-option value="/home">Home</ng-option>\n\t\t\t\t\t\t\t@for (view of views; track view.display) {\n\t\t\t\t\t\t\t\t<ng-option [value]="view.value">{{ view.display | titleCase }}</ng-option>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ng-select>\n\t\t\t\t\t</div>\n\t\t\t\t\t@if (client === \'Ace Completions\') {\n\t\t\t\t\t\t<div class="field-card">\n\t\t\t\t\t\t\t<div class="field-label">Routing preference</div>\n\t\t\t\t\t\t\t<p class="field-hint">Decide how links open while you multitask.</p>\n\t\t\t\t\t\t\t<ng-select class="input-bevel" [ngClass]="[form.controls.routing_preference.valid ? \'is-valid\' : \'\']" formControlName="routing_preference" [clearable]="false" [searchable]="false">\n\t\t\t\t\t\t\t\t<ng-option value="alwaysAsk">Always Ask</ng-option>\n\t\t\t\t\t\t\t\t<ng-option value="sameTab">Same Tab</ng-option>\n\t\t\t\t\t\t\t\t<ng-option value="newTab">New Tab</ng-option>\n\t\t\t\t\t\t\t\t<ng-option value="newWindow">New Window</ng-option>\n\t\t\t\t\t\t\t</ng-select>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<div class="section-card glass-card animate-rise">\n\t\t\t\t<div class="section-heading">\n\t\t\t\t\t<h3>Table palette</h3>\n\t\t\t\t\t<p>Pick vibrant layers for your data rows.</p>\n\t\t\t\t</div>\n\t\t\t\t<div class="palette-preview">\n\t\t\t\t\t<div class="preview-table">\n\t\t\t\t\t\t<div class="row-swatch" [style.background]="form.controls.table_color.value" [style.color]="form.controls.table_font_color.value">\n\t\t\t\t\t\t\tPrimary header\n\t\t\t\t\t\t\t<span>{{ form.controls.table_font_color.value }}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class="row-swatch" [style.background]="form.controls.secondary_table_color.value" [style.color]="form.controls.secondary_table_font_color.value">\n\t\t\t\t\t\t\tSecondary header\n\t\t\t\t\t\t\t<span>{{ form.controls.secondary_table_font_color.value }}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class="row-swatch" [style.background]="form.controls.tertiary_table_color.value" [style.color]="form.controls.tertiary_table_font_color.value">\n\t\t\t\t\t\t\tTertiary header\n\t\t\t\t\t\t\t<span>{{ form.controls.tertiary_table_font_color.value }}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="preview-table">\n\t\t\t\t\t\t<div class="row-swatch" [style.background]="form.controls.warning_color.value" [style.color]="form.controls.warning_font_color.value">\n\t\t\t\t\t\t\tWarnings\n\t\t\t\t\t\t\t<span>{{ form.controls.warning_hover_color.value }}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class="row-swatch" [style.background]="form.controls.success_color.value" [style.color]="form.controls.success_font_color.value">\n\t\t\t\t\t\t\tSuccess\n\t\t\t\t\t\t\t<span>{{ form.controls.success_hover_color.value }}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class="row-swatch" [style.background]="form.controls.info_color.value" [style.color]="form.controls.info_font_color.value">\n\t\t\t\t\t\t\tInfo\n\t\t\t\t\t\t\t<span>{{ form.controls.info_hover_color.value }}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class="color-grid">\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Primary table background</div>\n\t\t\t\t\t\t\t<div class="field-hint">The hero row that anchors your data.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.table_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="table_color" (ngModelChange)="changePrimaryColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Primary table font</div>\n\t\t\t\t\t\t\t<div class="field-hint">Keep it crisp and readable.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.table_font_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="table_font_color" (ngModelChange)="changePrimaryFontColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Secondary table background</div>\n\t\t\t\t\t\t\t<div class="field-hint">Great for supporting sections.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.secondary_table_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="secondary_table_color" (ngModelChange)="changeSecondaryColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Secondary table font</div>\n\t\t\t\t\t\t\t<div class="field-hint">Match contrast with the new hue.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.secondary_table_font_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="secondary_table_font_color" (ngModelChange)="changeSecondaryFontColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Tertiary table background</div>\n\t\t\t\t\t\t\t<div class="field-hint">For extra callouts.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.tertiary_table_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="tertiary_table_color" (ngModelChange)="changeTertiaryColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Tertiary table font</div>\n\t\t\t\t\t\t\t<div class="field-hint">Balance brightness for legibility.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.tertiary_table_font_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="tertiary_table_font_color" (ngModelChange)="changeTertiaryFontColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<div class="section-card glass-card animate-rise">\n\t\t\t\t<div class="section-heading">\n\t\t\t\t\t<h3>Button glow-up</h3>\n\t\t\t\t\t<p>Make clicks feel friendly and intentional.</p>\n\t\t\t\t</div>\n\t\t\t\t<div class="button-demo">\n\t\t\t\t\t<button type="button" class="btn btn-success">Success</button>\n\t\t\t\t\t<button type="button" class="btn btn-warning">Warning</button>\n\t\t\t\t\t<button type="button" class="btn btn-danger">Danger</button>\n\t\t\t\t\t<button type="button" class="btn btn-info">Info</button>\n\t\t\t\t\t<button type="button" class="btn btn-primary">Primary</button>\n\t\t\t\t\t<button type="button" class="btn btn-secondary">Secondary</button>\n\t\t\t\t</div>\n\t\t\t\t<div class="color-grid">\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Success background</div>\n\t\t\t\t\t\t\t<div class="field-hint">Celebrate wins.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.success_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="success_color" (ngModelChange)="changeSuccessColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Success font</div>\n\t\t\t\t\t\t\t<div class="field-hint">Keep it sharp.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.success_font_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="success_font_color" (ngModelChange)="changeSuccessFontColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Success hover</div>\n\t\t\t\t\t\t\t<div class="field-hint">How the button greets hover.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.success_hover_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="success_hover_color" (ngModelChange)="changeSuccessHoverColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Warning background</div>\n\t\t\t\t\t\t\t<div class="field-hint">Gentle but visible.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.warning_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="warning_color" (ngModelChange)="changeWarningColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Warning font</div>\n\t\t\t\t\t\t\t<div class="field-hint">High contrast copy.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.warning_font_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="warning_font_color" (ngModelChange)="changeWarningFontColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Warning hover</div>\n\t\t\t\t\t\t\t<div class="field-hint">Add motion to caution.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.warning_hover_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="warning_hover_color" (ngModelChange)="changeWarningHoverColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Danger background</div>\n\t\t\t\t\t\t\t<div class="field-hint">Clear stop signal.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.danger_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="danger_color" (ngModelChange)="changeDangerColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Danger font</div>\n\t\t\t\t\t\t\t<div class="field-hint">Stay readable on alert.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.danger_font_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="danger_font_color" (ngModelChange)="changeDangerFontColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Danger hover</div>\n\t\t\t\t\t\t\t<div class="field-hint">Softer on hover.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.danger_hover_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="danger_hover_color" (ngModelChange)="changeDangerHoverColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Info background</div>\n\t\t\t\t\t\t\t<div class="field-hint">Highlight helpful hints.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.info_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="info_color" (ngModelChange)="changeInfoColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Info font</div>\n\t\t\t\t\t\t\t<div class="field-hint">Keep tips legible.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.info_font_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="info_font_color" (ngModelChange)="changeInfoFontColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Info hover</div>\n\t\t\t\t\t\t\t<div class="field-hint">Gentle motion on hover.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.info_hover_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="info_hover_color" (ngModelChange)="changeInfoHoverColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Primary background</div>\n\t\t\t\t\t\t\t<div class="field-hint">The hero action.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.primary_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="primary_color" (ngModelChange)="changePrimaryButtonColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Primary font</div>\n\t\t\t\t\t\t\t<div class="field-hint">Strong contrast for CTA.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.primary_font_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="primary_font_color" (ngModelChange)="changePrimaryButtonFontColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Primary hover</div>\n\t\t\t\t\t\t\t<div class="field-hint">A playful shift on hover.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.primary_hover_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="primary_hover_color" (ngModelChange)="changePrimaryButtonHoverColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Secondary background</div>\n\t\t\t\t\t\t\t<div class="field-hint">Great for subtle actions.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.secondary_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="secondary_color" (ngModelChange)="changeSecondaryButtonColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Secondary font</div>\n\t\t\t\t\t\t\t<div class="field-hint">Keep it balanced.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.secondary_font_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="secondary_font_color" (ngModelChange)="changeSecondaryButtonFontColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Secondary hover</div>\n\t\t\t\t\t\t\t<div class="field-hint">Add a soft glow.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.secondary_hover_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="secondary_hover_color" (ngModelChange)="changeSecondaryHoverColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<div class="section-card glass-card animate-rise sticky-section-card">\n\t\t\t\t<div class="section-heading">\n\t\t\t\t\t<h3>Sticky select defaults</h3>\n\t\t\t\t\t<p>Teach ResolveIO which choices you love.</p>\n\t\t\t\t</div>\n\t\t\t\t@if (!stickySelects.length) {\n\t\t\t\t\t<div class="sticky-empty">\n\t\t\t\t\t\tNo sticky selects saved yet. Add a stickyKey on a select to remember your favorite defaults.\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t\t@else {\n\t\t\t\t\t@for (sticky of stickySelects; track sticky.key) {\n\t\t\t\t\t\t<div class="field-card sticky-select-card">\n\t\t\t\t\t\t\t<div class="field-label">{{ sticky.key }}</div>\n\t\t\t\t\t\t\t@if (sticky.options && sticky.options.length) {\n\t\t\t\t\t\t\t\t<ng-select\n\t\t\t\t\t\t\t\t\t[(ngModel)]="stickySelections[sticky.key]"\n\t\t\t\t\t\t\t\t\t[ngModelOptions]="{standalone: true}"\n\t\t\t\t\t\t\t\t\t[options]="sticky.options"\n\t\t\t\t\t\t\t\t\toptionValueKey="value"\n\t\t\t\t\t\t\t\t\toptionLabelKey="label"\n\t\t\t\t\t\t\t\t\t[searchable]="false"\n\t\t\t\t\t\t\t\t\tappendTo="body"\n\t\t\t\t\t\t\t\t\t[stickyAutoSave]="true"\n\t\t\t\t\t\t\t\t\t(ngModelChange)="updateStickyDefault(sticky.key, $event)">\n\t\t\t\t\t\t\t\t</ng-select>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@if (!sticky.options || !sticky.options.length) {\n\t\t\t\t\t\t\t\t<div class="text-muted">No saved options yet.</div>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t</div>\n\t\t</div>\n\t</form>\n</div>\n'}]}],ctorParameters:()=>[{type:AuthPermissionService},{type:UserSettingsService},{type:ProviderService},{type:DialogService},{type:void 0,decorators:[{type:Optional},{type:Inject,args:[NG_SELECT_STICKY_ADAPTER]}]}]});const routes$1=[{path:"user-settings",component:UserSettingsComponent,children:[{path:"settings",component:UsersSettingsComponent},{path:"**",redirectTo:"settings"}]}],UserSettingsRouting=RouterModule.forChild(routes$1);class DatatableComponent extends BaseComponent{_services;urlClick;columns;data;collapseSize;searchTitle;totalItems=1e3;onChangeTableData=new EventEmitter;tableData;constructor(t){super(t),this._services=t}changeTableData(){this.onChangeTableData.emit()}sortColumn(t){this.tableData.sortColumn===t?"desc"===this.tableData.sortOrder?this.tableData.sortOrder="asc":this.tableData.sortOrder="desc":(this.tableData.sortOrder="asc",this.tableData.sortColumn=t),this.changeTableData()}navigateTo(t,e){"file_key"!==e&&t&&this.urlClick&&this._services._router.navigateByUrl(this.urlClick+t)}openFile(t){this._services._socket.call("getSignedUrl",t,900,(e,n)=>{n?window.open(n):this._services._socket.call("insertErrorLog","Widgets-datatable - getsignedurl",[t,e])})}typeOf(t){return typeof t}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DatatableComponent,deps:[{token:ProviderService}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"21.0.1",type:DatatableComponent,isStandalone:!1,selector:"data-table",inputs:{urlClick:"urlClick",columns:"columns",data:"data",collapseSize:"collapseSize",searchTitle:"searchTitle",totalItems:"totalItems",tableData:"tableData"},outputs:{onChangeTableData:"onChangeTableData"},providers:[ProviderService],usesInheritance:!0,ngImport:i0,template:'<style>\n\t.orangeRow {\n\t\tbackground-color: orangered;\n\t}\n\n\tcollapse-table tr:hover {\n\t\tbackground-color: lightblue;\n\t\tcursor: pointer;\n\t}\n\n\tcollapse-table {\n\t\twidth: 100%;\n\t}\n</style>\n\n<div class="row">\n\t<div class="input-group">\n\t\t<span class="input-group-btn">\n\t\t\t<button class="btn btn-primary" type="button" (click)="changeTableData()">Search!</button>\n\t\t</span>\n\t\t<input type="text" class="form-control" placeholder="{{ searchTitle }}" [(ngModel)]="tableData.searchString" (keyup.enter)="changeTableData()" style="z-index: 0" />\n\t</div>\n</div>\n<div class="row" style="padding-top: 20px">\n\t<collapse-table [collapseSize]="collapseSize" headerFixed="true">\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t@for (column of columns; track column) {\n\t\t\t\t\t<th (click)="sortColumn(column.data)" style="cursor: pointer">\n\t\t\t\t\t\t{{ column.name }}\n\t\t\t\t\t\t@if (tableData.sortColumn == column.data && tableData.sortOrder === \'desc\') {\n\t\t\t\t\t\t\t<i class="fa fa-caret-down"></i>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (tableData.sortColumn == column.data && tableData.sortOrder === \'asc\') {\n\t\t\t\t\t\t\t<i class="fa fa-caret-up"></i>\n\t\t\t\t\t\t}\n\t\t\t\t\t</th>\n\t\t\t\t}\n\t\t\t</tr>\n\t\t</thead>\n\t\t<tbody>\n\t\t\t@for (item of data; track item[\'_id\']) {\n\t\t\t\t<tr [ngClass]="{ orangeRow: item[\'color_red\'] }">\n\t\t\t\t\t@for (column of columns; track column.name) {\n\t\t\t\t\t\t<td (click)="navigateTo(item[\'_id\'], column.data)" [attr.data-label]="column.name">\n\t\t\t\t\t\t\t@if (typeOf(item[column.data]) !== \'boolean\' && column.data !== \'cost\' && column.data !== \'wells\' && column.data !== \'cost_total\' && column.data !== \'price\' && column.data !== \'date\' && column.data !== \'date_created\' && column.data !== \'date_delivered\' && column.data !== \'quantity\' && column.data !== \'quantity_string\' && column.data !== \'min_stock\' && column.data !== \'max_stock\' && column.data !== \'file_key\' && column.data !== \'date_in\') {\n\t\t\t\t\t\t\t\t<span>{{ column.subData ? item[column.data][column.subData] : item[column.data] }}</span>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@if (column.data === \'cost\' || column.data === \'price\' || column.data === \'cost_total\') {\n\t\t\t\t\t\t\t\t<span>{{ item[column.data] | currency: \'USD\' : \'symbol\' : \'1.2-2\' }}</span>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@if (column.data === \'date\' || column.data === \'date_created\' || column.data === \'date_delivered\') {\n\t\t\t\t\t\t\t\t<span>{{ item[column.data] | date: \'short\' }}</span>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@if (column.data === \'quantity\' || column.data === \'min_stock\' || column.data === \'max_stock\') {\n\t\t\t\t\t\t\t\t<span>{{ item[column.data] | number }}</span>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@if (column.data === \'quantity_string\') {\n\t\t\t\t\t\t\t\t<span>{{ item[column.data] | number }}</span>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@if (column.data === \'wells\') {\n\t\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t\t<pre>{{ item[column.data] }}</pre>\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@if (column.data === \'file_key\') {\n\t\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t\t<button type="button" (click)="openFile(item[column.data])" class="btn btn-secondary">Open File</button>\n\t\t\t\t\t\t\t\t\t\x3c!-- <button type="button" class="btn btn-warning" (click)="viewDeletedReason(item)" *ngIf="item.deleted.is_deleted">View Deleted Reason</button> --\x3e\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@if (typeOf(item[column.data]) === \'boolean\') {\n\t\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t\t@if (item[column.data]) {\n\t\t\t\t\t\t\t\t\t\t<i class="fa fa-check" style="color: green; font-size: 18px" aria-hidden="true"></i>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t@if (!item[column.data]) {\n\t\t\t\t\t\t\t\t\t\t<i class="fa fa-times" style="color: red; font-size: 18px" aria-hidden="true"></i>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</td>\n\t\t\t\t\t}\n\t\t\t\t</tr>\n\t\t\t}\n\t\t</tbody>\n\t</collapse-table>\n</div>\n<hr />\n<div class="row">\n\t<div class="col-lg-4">\n\t\t<div class="row">\n\t\t\t<div class="col-lg-8">\n\t\t\t\t<label class="form-control-label">Entries Per Page</label>\n\t\t\t\t<select class="form-control" [(ngModel)]="tableData.entriesPerPage" (ngModelChange)="changeTableData()">\n\t\t\t\t\t<option value="25">25</option>\n\t\t\t\t\t<option value="50">50</option>\n\t\t\t\t\t<option value="100">100</option>\n\t\t\t\t\t<option value="250">250</option>\n\t\t\t\t</select>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div class="col-lg-8" style="margin-top: 16px">\n\t\t<ngb-pagination class="float-end" boundaryLinks="true" [collectionSize]="totalItems" directionLinks="true" ellipses="false" [(page)]="tableData.pageNum" maxSize="6" [pageSize]="tableData.entriesPerPage" rotate="true" (pageChange)="changeTableData()"></ngb-pagination>\n\t</div>\n</div>\n',styles:[".orangeRow{background-color:#ff4500}collapse-table tr:hover{background-color:#add8e6;cursor:pointer}collapse-table{width:100%}\n"],dependencies:[{kind:"component",type:i1$2.NgbPagination,selector:"ngb-pagination",inputs:["disabled","boundaryLinks","directionLinks","ellipses","rotate","collectionSize","maxSize","page","pageSize","size"],outputs:["pageChange"]},{kind:"directive",type:i2.NgSelectOption,selector:"option",inputs:["ngValue","value"]},{kind:"directive",type:i2.ɵNgSelectMultipleOption,selector:"option",inputs:["ngValue","value"]},{kind:"directive",type:i2.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:i2.SelectControlValueAccessor,selector:"select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]",inputs:["compareWith"]},{kind:"directive",type:i2.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:i2.NgModel,selector:"[ngModel]:not([formControlName]):not([formControl])",inputs:["name","disabled","ngModel","ngModelOptions"],outputs:["ngModelChange"],exportAs:["ngModel"]},{kind:"directive",type:i7.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]},{kind:"component",type:CollapseTableComponent,selector:"collapse-table",inputs:["collapseSize","tableFixed","headerFixed","secondaryColor","tertiaryColor"]},{kind:"pipe",type:i7.DecimalPipe,name:"number"},{kind:"pipe",type:i7.CurrencyPipe,name:"currency"},{kind:"pipe",type:i7.DatePipe,name:"date"}]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DatatableComponent,decorators:[{type:Component,args:[{providers:[ProviderService],selector:"data-table",standalone:!1,template:'<style>\n\t.orangeRow {\n\t\tbackground-color: orangered;\n\t}\n\n\tcollapse-table tr:hover {\n\t\tbackground-color: lightblue;\n\t\tcursor: pointer;\n\t}\n\n\tcollapse-table {\n\t\twidth: 100%;\n\t}\n</style>\n\n<div class="row">\n\t<div class="input-group">\n\t\t<span class="input-group-btn">\n\t\t\t<button class="btn btn-primary" type="button" (click)="changeTableData()">Search!</button>\n\t\t</span>\n\t\t<input type="text" class="form-control" placeholder="{{ searchTitle }}" [(ngModel)]="tableData.searchString" (keyup.enter)="changeTableData()" style="z-index: 0" />\n\t</div>\n</div>\n<div class="row" style="padding-top: 20px">\n\t<collapse-table [collapseSize]="collapseSize" headerFixed="true">\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t@for (column of columns; track column) {\n\t\t\t\t\t<th (click)="sortColumn(column.data)" style="cursor: pointer">\n\t\t\t\t\t\t{{ column.name }}\n\t\t\t\t\t\t@if (tableData.sortColumn == column.data && tableData.sortOrder === \'desc\') {\n\t\t\t\t\t\t\t<i class="fa fa-caret-down"></i>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (tableData.sortColumn == column.data && tableData.sortOrder === \'asc\') {\n\t\t\t\t\t\t\t<i class="fa fa-caret-up"></i>\n\t\t\t\t\t\t}\n\t\t\t\t\t</th>\n\t\t\t\t}\n\t\t\t</tr>\n\t\t</thead>\n\t\t<tbody>\n\t\t\t@for (item of data; track item[\'_id\']) {\n\t\t\t\t<tr [ngClass]="{ orangeRow: item[\'color_red\'] }">\n\t\t\t\t\t@for (column of columns; track column.name) {\n\t\t\t\t\t\t<td (click)="navigateTo(item[\'_id\'], column.data)" [attr.data-label]="column.name">\n\t\t\t\t\t\t\t@if (typeOf(item[column.data]) !== \'boolean\' && column.data !== \'cost\' && column.data !== \'wells\' && column.data !== \'cost_total\' && column.data !== \'price\' && column.data !== \'date\' && column.data !== \'date_created\' && column.data !== \'date_delivered\' && column.data !== \'quantity\' && column.data !== \'quantity_string\' && column.data !== \'min_stock\' && column.data !== \'max_stock\' && column.data !== \'file_key\' && column.data !== \'date_in\') {\n\t\t\t\t\t\t\t\t<span>{{ column.subData ? item[column.data][column.subData] : item[column.data] }}</span>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@if (column.data === \'cost\' || column.data === \'price\' || column.data === \'cost_total\') {\n\t\t\t\t\t\t\t\t<span>{{ item[column.data] | currency: \'USD\' : \'symbol\' : \'1.2-2\' }}</span>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@if (column.data === \'date\' || column.data === \'date_created\' || column.data === \'date_delivered\') {\n\t\t\t\t\t\t\t\t<span>{{ item[column.data] | date: \'short\' }}</span>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@if (column.data === \'quantity\' || column.data === \'min_stock\' || column.data === \'max_stock\') {\n\t\t\t\t\t\t\t\t<span>{{ item[column.data] | number }}</span>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@if (column.data === \'quantity_string\') {\n\t\t\t\t\t\t\t\t<span>{{ item[column.data] | number }}</span>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@if (column.data === \'wells\') {\n\t\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t\t<pre>{{ item[column.data] }}</pre>\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@if (column.data === \'file_key\') {\n\t\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t\t<button type="button" (click)="openFile(item[column.data])" class="btn btn-secondary">Open File</button>\n\t\t\t\t\t\t\t\t\t\x3c!-- <button type="button" class="btn btn-warning" (click)="viewDeletedReason(item)" *ngIf="item.deleted.is_deleted">View Deleted Reason</button> --\x3e\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@if (typeOf(item[column.data]) === \'boolean\') {\n\t\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t\t@if (item[column.data]) {\n\t\t\t\t\t\t\t\t\t\t<i class="fa fa-check" style="color: green; font-size: 18px" aria-hidden="true"></i>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t@if (!item[column.data]) {\n\t\t\t\t\t\t\t\t\t\t<i class="fa fa-times" style="color: red; font-size: 18px" aria-hidden="true"></i>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</td>\n\t\t\t\t\t}\n\t\t\t\t</tr>\n\t\t\t}\n\t\t</tbody>\n\t</collapse-table>\n</div>\n<hr />\n<div class="row">\n\t<div class="col-lg-4">\n\t\t<div class="row">\n\t\t\t<div class="col-lg-8">\n\t\t\t\t<label class="form-control-label">Entries Per Page</label>\n\t\t\t\t<select class="form-control" [(ngModel)]="tableData.entriesPerPage" (ngModelChange)="changeTableData()">\n\t\t\t\t\t<option value="25">25</option>\n\t\t\t\t\t<option value="50">50</option>\n\t\t\t\t\t<option value="100">100</option>\n\t\t\t\t\t<option value="250">250</option>\n\t\t\t\t</select>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div class="col-lg-8" style="margin-top: 16px">\n\t\t<ngb-pagination class="float-end" boundaryLinks="true" [collectionSize]="totalItems" directionLinks="true" ellipses="false" [(page)]="tableData.pageNum" maxSize="6" [pageSize]="tableData.entriesPerPage" rotate="true" (pageChange)="changeTableData()"></ngb-pagination>\n\t</div>\n</div>\n'}]}],ctorParameters:()=>[{type:ProviderService}],propDecorators:{urlClick:[{type:Input}],columns:[{type:Input}],data:[{type:Input}],collapseSize:[{type:Input}],searchTitle:[{type:Input}],totalItems:[{type:Input}],onChangeTableData:[{type:Output}],tableData:[{type:Input}]}});class DatatableModule{static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DatatableModule,deps:[],target:i0.ɵɵFactoryTarget.NgModule});static"ɵmod"=i0.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"21.0.1",ngImport:i0,type:DatatableModule,declarations:[DatatableComponent],imports:[NgbModule,FormsModule,CommonModule,RouterModule,CollapseTableModule],exports:[DatatableComponent]});static"ɵinj"=i0.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DatatableModule,imports:[NgbModule,FormsModule,CommonModule,RouterModule,CollapseTableModule]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DatatableModule,decorators:[{type:NgModule,args:[{imports:[NgbModule,FormsModule,CommonModule,RouterModule,CollapseTableModule],exports:[DatatableComponent],declarations:[DatatableComponent],providers:[]}]}]});class FileUploadComponent extends BaseComponent{_resize;_services;_ds;_http;constructor(t,e,n,o){super(e),this._resize=t,this._services=e,this._ds=n,this._http=o}files=[];allowDelete=!1;allowReplace=!1;showFileUpload=!0;filesChanged=new EventEmitter;fileAdded=new EventEmitter;fileRemoved=new EventEmitter;fileType;download_link;supportedFileTypes=["application/pdf","text/plain","image/gif","image/png","image/jpeg","image/bmp"];pdfSrc="";replaceFileIndex=0;isUploading=!1;progressMsg="";windowSize$;windowSize=0;ngOnInit(){this.windowSize$=this._resize.onResize$.subscribe(t=>{this.windowSize=t?t.innerWidth:window.innerWidth})}ngOnDestroy(){this.windowSize$.unsubscribe()}dragFileAccepted(t){this.supportedFileTypes.indexOf(t.type)>=0?this.uploadWithEmit(t,"misc").then(()=>{},t=>{this._ds.error("Could not upload file, incorrect type")}):this._ds.error("Invalid format, the supported file types are: "+this.supportedFileTypes)}upload(t,e,n,o,r){return new Promise((i,a)=>{this.progressMsg="Uploading "+(o||t.name),this._services._aws.uploadFile(t,e,n,o).then(a=>{const s={_id:a._id,name:o||t.name,size:t.size,status:r||"Uploaded",key:a.key,order:n||-1,type:e};this.isUploading=!1,this.files.push(s),this.files=this.files.sort((t,e)=>t.order-e.order),i(s)},t=>{this._ds.error("Could not upload file. "+t),a(t)}),this.isUploading=!0})}uploadWithEmit(t,e,n,o,r){return new Promise((i,a)=>{this.progressMsg="Uploading "+(o||t.name),this._services._aws.uploadFile(t,e,n,o).then(a=>{const s={_id:a._id,name:o||t.name,size:t.size,status:r||"Uploaded",key:a.key,order:n||-1,type:e};this.isUploading=!1,this.files=this.files.sort((t,e)=>t.order-e.order),this.fileAdded.emit(s),i(s)},t=>{this._ds.error("Could not upload file. "+t),a(t)}),this.isUploading=!0})}delete(t,e=!0){this.pdfSrc="",e?this._ds.confirm("Are you sure you want to delete this file?").then(e=>{this._services._aws.deleteFile(this.files[t].key,(e,n)=>{e&&(this._ds.error("Could not delete file"),this._services._socket.call("insertErrorLog","Widgets.File-Upload - Delete File",[this.files[t].key,e]))}),this.files.splice(t,1)},t=>{}):(this._services._aws.deleteFile(this.files[t].key,(e,n)=>{e&&this._services._socket.call("insertErrorLog","Widgets.File-Upload - Delete File",[this.files[t].key,e])}),this.files.splice(t,1))}deleteWithEmit(t,e=!0){this.pdfSrc="";let n=Object.assign({},this.files[t]);e?this._ds.confirm("Are you sure you want to delete this file?").then(e=>{this._services._aws.deleteFile(this.files[t].key,(e,o)=>{e&&(this._ds.error("Could not delete file"),this._services._socket.call("insertErrorLog","Widgets.File-Upload - Delete File",[this.files[t].key,e])),this.fileRemoved.emit(n)})},t=>{}):this._services._aws.deleteFile(this.files[t].key,(e,o)=>{e&&this._services._socket.call("insertErrorLog","Widgets.File-Upload - Delete File",[this.files[t].key,e]),this.fileRemoved.emit(n)})}deleteFileWithId(t){this.delete(this.files.map(t=>t._id).indexOf(t),!1)}open(t){this._services._socket.call("getSignedUrl",t.key,900,(e,n)=>{n?window.open(n):this._services._socket.call("insertErrorLog","Widgets-file - getsignedurl",[t.key,e])})}setPDFViewerSrc(t){this._services._socket.call("getSignedUrl",t.key,900,(e,n)=>{n?this.pdfSrc=n:(this._ds.error("Could not get signed url for file"),this._services._socket.call("insertErrorLog","Widgets-file - getsignedurl pdfviewer",[t.key,e]))})}onFileSelect(t){this.uploadWithEmit(t.target.files[0],this.fileType?this.fileType:"misc").then(()=>{},()=>{}),t.srcElement.value=""}onFileSelectReplace(t){if(t.target.files[0]){this.files[this.replaceFileIndex]._id;let e=this.files[this.replaceFileIndex].type,n=this.files[this.replaceFileIndex].order,o=this.files[this.replaceFileIndex].name.replace(/\.[^\.]+$/,"")+"."+t.target.files[0].name.split(".")[t.target.files[0].name.split(".").length-1],r=this.files[this.replaceFileIndex].status;this.deleteWithEmit(this.replaceFileIndex,!1),"Unsigned"===r?this._ds.confirm("Are you replacing this file with a signed copy?").then(r=>{this.uploadWithEmit(t.target.files[0],e,n,o,"Signed").then(t=>{t.key,t._id},t=>{})},r=>{this.uploadWithEmit(t.target.files[0],e,n,o).then(t=>{t.key,t._id},t=>{})}):this.uploadWithEmit(t.target.files[0],e,n,o).then(t=>{t.key,t._id},t=>{})}}userIsInRole(t){return this._services._account.isUserInView(t)}isMobile(){}downloadResource(t){return this._http.get(t,{responseType:"blob"}).toPromise()}download(t){this._services._socket.call("getSignedUrl",t.key,900,async(e,n)=>{if(n){const e=await this.downloadResource(n),o=window.URL.createObjectURL(e),r=this.download_link.nativeElement;r.href=o,r.download=t.name,r.click(),window.URL.revokeObjectURL(o)}else this._services._socket.call("insertErrorLog","Widgets-file - update bol",[e])})}email(t){this._ds.input("Email file to which address?",[{label:"Email Address",form:"email",data:"",validators:[Validators.required,this._services._vs.email],validatorErrors:["required","email"],validatorMsg:["Email is required","Email is invalid"],required:!0}]).then(e=>{this._services._socket.call("emailFile",t._id,e.email.value,(t,e)=>{t?this._ds.error("Could not send email: "+t):this._services._alert.setAlert("success","Email has been sent")})},t=>{})}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:FileUploadComponent,deps:[{token:ResizeService},{token:ProviderService},{token:DialogService},{token:i4.HttpClient}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"21.0.1",type:FileUploadComponent,isStandalone:!1,selector:"file-upload",inputs:{files:"files",allowDelete:"allowDelete",allowReplace:"allowReplace",showFileUpload:"showFileUpload",fileType:"fileType"},outputs:{filesChanged:"filesChanged",fileAdded:"fileAdded",fileRemoved:"fileRemoved"},viewQueries:[{propertyName:"download_link",first:!0,predicate:["download_link"],descendants:!0,static:!0}],usesInheritance:!0,ngImport:i0,template:'<style>\n\thtml,\n\tbody {\n\t\theight: 100%;\n\t}\n\n\tcollapse-table tr:hover {\n\t\tbackground-color: lightblue;\n\t\tcursor: pointer;\n\t}\n\n\tcollapse-table {\n\t\twidth: 100%;\n\t}\n\n\t/* Label container: */\n\t.file {\n\t\tdisplay: inline-block;\n\t\tpadding: 0 0 0 0.5em;\n\t\tcursor: pointer;\n\t\tposition: relative;\n\t\tborder: 0.075rem solid #ddd;\n\t\tborder-radius: 0.25rem;\n\t}\n\n\t/* The pseudo input field: */\n\t.file::before {\n\t\tcontent: \'\';\n\t\tdisplay: block;\n\t\tposition: absolute;\n\t\tleft: 0;\n\t\tright: 0;\n\t\ttop: 0;\n\t\tbottom: 0;\n\t\tz-index: -1;\n\n\t\t/* Bootstrap appearance: */\n\t\tbackground-color: #fff;\n\t\tborder: 0.075rem solid #ddd;\n\t\tborder-radius: 0.25rem;\n\t\t-webkit-box-shadow: inset 0 0.2rem 0.4rem rgba(0, 0, 0, 0.05);\n\t\tbox-shadow: inset 0 0.2rem 0.4rem rgba(0, 0, 0, 0.05);\n\t}\n\n\t/* The pseudo button: */\n\t.file::after {\n\t\tcontent: \'Browse\';\n\t\tdisplay: inline-block;\n\n\t\t/* Bootstrap appearance: */\n\t\tbackground-color: #eee;\n\t\tborder: 0.075rem solid #ddd;\n\t\tborder-radius: 0 0.25rem 0.25rem 0;\n\t\tpadding: 0.5rem 1rem;\n\t\tline-height: 1.5;\n\t\tcolor: #555;\n\t}\n\n\t.file input[type=\'file\'] {\n\t\tcursor: pointer;\n\t\tborder: 0 none;\n\t\twidth: 12em;\n\t}\n\n\t/* -webkit hide the button: */\n\t.file input[type=\'file\']::-webkit-file-upload-button {\n\t\tborder: 0;\n\t\tpadding: 0;\n\t\tmargin: 0;\n\t\twidth: 0;\n\t\tbackground: transparent;\n\t}\n\n\t/* IE10+ hide the button: */\n\t.file input[type=\'file\']::-ms-browse {\n\t\tpadding: 0;\n\t\tmargin: -1px;\n\t\twidth: 0;\n\t\tborder: 0;\n\t\tbackground: transparent;\n\t}\n\n\t.file input[type=\'file\']::-ms-value {\n\t\tbackground: #fff;\n\t\tborder: 0;\n\t}\n\n\tcard {\n\t\twidth: 100%;\n\t}\n</style>\n\n<a style="display: none" #download_link></a>\n<input hidden type="file" #fileInputReplace (change)="onFileSelectReplace($event)" />\n\n<div class="card">\n\t<div class="card-header">\n\t\t<strong class="pull-left">Files</strong>\n\t</div>\n\t<div class="card-block">\n\t\t<div class="row">\n\t\t\t<div class="col-lg-6">\n\t\t\t\t@if (showFileUpload) {\n\t\t\t\t\t<div class="row">\n\t\t\t\t\t\t<div class="col-lg-6">\n\t\t\t\t\t\t\t<div class="container">\n\t\t\t\t\t\t\t\t<div style="margin: 10px 0px; font-weight: bold">Upload File</div>\n\t\t\t\t\t\t\t\t<label class="file">\n\t\t\t\t\t\t\t\t\t<input type="file" #fileInput (change)="onFileSelect($event)" />\n\t\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t\t<br />\n\t\t\t\t\t\t\t\t<ngx-file-drop dropZoneLabel="Drop files here" style="width: 223px; height: 112px; border: 1px black dashed; border-radius: 5px; justify-content: center" class="vertical-align" (onFileDrop)="dragFileAccepted($event)"></ngx-file-drop>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class="col-lg-6">\n\t\t\t\t\t\t\t@if (isUploading) {\n\t\t\t\t\t\t\t\t<b>{{ progressMsg || \'N/A\' }}</b>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t\t<div class="row" style="margin-top: 10px">\n\t\t\t\t\t@if (windowSize > 980) {\n\t\t\t\t\t\t<div class="col-lg-12">\n\t\t\t\t\t\t\t@if (pdfSrc) {\n\t\t\t\t\t\t\t\t<div style="text-align: center">\n\t\t\t\t\t\t\t\t\t<resolveio-client-lib-pdf-viewer [pdfSrc]="pdfSrc"></resolveio-client-lib-pdf-viewer>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class="col-lg-6">\n\t\t\t\t@if (files && files.length) {\n\t\t\t\t\t<b>Uploaded Files</b>\n\t\t\t\t\t<div [style.max-height]="windowSize > 900 ? \'300px\' : \'\'" [style.overflow-y]="windowSize > 900 ? \'auto\' : \'\'">\n\t\t\t\t\t\t<collapse-table collapseSize="900">\n\t\t\t\t\t\t\t<thead>\n\t\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t\t<th>File Name</th>\n\t\t\t\t\t\t\t\t\t<th>Size</th>\n\t\t\t\t\t\t\t\t\t<th>Type</th>\n\t\t\t\t\t\t\t\t\t<th>Actions</th>\n\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t</thead>\n\t\t\t\t\t\t\t<tbody>\n\t\t\t\t\t\t\t\t@for (file of files; track file._id; let i = $index) {\n\t\t\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t\t\t<td data-label="File Name" (click)="setPDFViewerSrc(file)">{{ file.name }}</td>\n\t\t\t\t\t\t\t\t\t\t<td data-label="Size" (click)="setPDFViewerSrc(file)">{{ file.size / 1024 / 1024 | number: \'.2\' }} MB</td>\n\t\t\t\t\t\t\t\t\t\t<td data-label="Type" (click)="setPDFViewerSrc(file)">{{ file.type }}</td>\n\t\t\t\t\t\t\t\t\t\t<td data-label="Actions">\n\t\t\t\t\t\t\t\t\t\t\t<responsive-button-group collapseSize="900">\n\t\t\t\t\t\t\t\t\t\t\t\t<button type="button" class="btn btn-success" (click)="open(file)">Open</button>\n\t\t\t\t\t\t\t\t\t\t\t\t<button type="button" class="btn btn-primary" (click)="download(file)">Download</button>\n\t\t\t\t\t\t\t\t\t\t\t\t<button [hidden]="!allowDelete || (file.type !== \'misc\' && !userIsInRole(\'super-admin\'))" type="button" class="btn btn-danger" (click)="deleteWithEmit(i)">Delete</button>\n\t\t\t\t\t\t\t\t\t\t\t\t<button [hidden]="!allowDelete || (file.type !== \'misc\' && !userIsInRole(\'super-admin\'))" type="button" class="btn btn-danger" (click)="fileInputReplace.click(); replaceFileIndex = i">Replace</button>\n\t\t\t\t\t\t\t\t\t\t\t\t<button type="button" class="btn btn-warning" (click)="email(file)">Email</button>\n\t\t\t\t\t\t\t\t\t\t\t</responsive-button-group>\n\t\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</tbody>\n\t\t\t\t\t\t</collapse-table>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t\t@if (!files || !files.length) {\n\t\t\t\t\t<b>No Uploaded Files</b>\n\t\t\t\t}\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>\n',styles:['html,body{height:100%}collapse-table tr:hover{background-color:#add8e6;cursor:pointer}collapse-table{width:100%}.file{display:inline-block;padding:0 0 0 .5em;cursor:pointer;position:relative;border:.075rem solid #ddd;border-radius:.25rem}.file:before{content:"";display:block;position:absolute;inset:0;z-index:-1;background-color:#fff;border:.075rem solid #ddd;border-radius:.25rem;-webkit-box-shadow:inset 0 .2rem .4rem rgba(0,0,0,.05);box-shadow:inset 0 .2rem .4rem #0000000d}.file:after{content:"Browse";display:inline-block;background-color:#eee;border:.075rem solid #ddd;border-radius:0 .25rem .25rem 0;padding:.5rem 1rem;line-height:1.5;color:#555}.file input[type=file]{cursor:pointer;border:0 none;width:12em}.file input[type=file]::-webkit-file-upload-button{border:0;padding:0;margin:0;width:0;background:transparent}.file input[type=file]::-ms-browse{padding:0;margin:-1px;width:0;border:0;background:transparent}.file input[type=file]::-ms-value{background:#fff;border:0}card{width:100%}\n'],dependencies:[{kind:"component",type:CollapseTableComponent,selector:"collapse-table",inputs:["collapseSize","tableFixed","headerFixed","secondaryColor","tertiaryColor"]},{kind:"component",type:ResponsiveButtonGroupComponent,selector:"responsive-button-group",inputs:["collapseSize"]},{kind:"component",type:i7$1.NgxFileDropComponent,selector:"ngx-file-drop",inputs:["accept","directory","multiple","dropZoneLabel","dropZoneClassName","useDragEnter","contentClassName","showBrowseBtn","browseBtnClassName","browseBtnLabel","disabled"],outputs:["onFileDrop","onFileOver","onFileLeave"]},{kind:"component",type:i8.PdfViewerComponent,selector:"resolveio-client-lib-pdf-viewer",inputs:["pdfSrc","fileName"]},{kind:"pipe",type:i7.DecimalPipe,name:"number"}]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:FileUploadComponent,decorators:[{type:Component,args:[{selector:"file-upload",standalone:!1,template:'<style>\n\thtml,\n\tbody {\n\t\theight: 100%;\n\t}\n\n\tcollapse-table tr:hover {\n\t\tbackground-color: lightblue;\n\t\tcursor: pointer;\n\t}\n\n\tcollapse-table {\n\t\twidth: 100%;\n\t}\n\n\t/* Label container: */\n\t.file {\n\t\tdisplay: inline-block;\n\t\tpadding: 0 0 0 0.5em;\n\t\tcursor: pointer;\n\t\tposition: relative;\n\t\tborder: 0.075rem solid #ddd;\n\t\tborder-radius: 0.25rem;\n\t}\n\n\t/* The pseudo input field: */\n\t.file::before {\n\t\tcontent: \'\';\n\t\tdisplay: block;\n\t\tposition: absolute;\n\t\tleft: 0;\n\t\tright: 0;\n\t\ttop: 0;\n\t\tbottom: 0;\n\t\tz-index: -1;\n\n\t\t/* Bootstrap appearance: */\n\t\tbackground-color: #fff;\n\t\tborder: 0.075rem solid #ddd;\n\t\tborder-radius: 0.25rem;\n\t\t-webkit-box-shadow: inset 0 0.2rem 0.4rem rgba(0, 0, 0, 0.05);\n\t\tbox-shadow: inset 0 0.2rem 0.4rem rgba(0, 0, 0, 0.05);\n\t}\n\n\t/* The pseudo button: */\n\t.file::after {\n\t\tcontent: \'Browse\';\n\t\tdisplay: inline-block;\n\n\t\t/* Bootstrap appearance: */\n\t\tbackground-color: #eee;\n\t\tborder: 0.075rem solid #ddd;\n\t\tborder-radius: 0 0.25rem 0.25rem 0;\n\t\tpadding: 0.5rem 1rem;\n\t\tline-height: 1.5;\n\t\tcolor: #555;\n\t}\n\n\t.file input[type=\'file\'] {\n\t\tcursor: pointer;\n\t\tborder: 0 none;\n\t\twidth: 12em;\n\t}\n\n\t/* -webkit hide the button: */\n\t.file input[type=\'file\']::-webkit-file-upload-button {\n\t\tborder: 0;\n\t\tpadding: 0;\n\t\tmargin: 0;\n\t\twidth: 0;\n\t\tbackground: transparent;\n\t}\n\n\t/* IE10+ hide the button: */\n\t.file input[type=\'file\']::-ms-browse {\n\t\tpadding: 0;\n\t\tmargin: -1px;\n\t\twidth: 0;\n\t\tborder: 0;\n\t\tbackground: transparent;\n\t}\n\n\t.file input[type=\'file\']::-ms-value {\n\t\tbackground: #fff;\n\t\tborder: 0;\n\t}\n\n\tcard {\n\t\twidth: 100%;\n\t}\n</style>\n\n<a style="display: none" #download_link></a>\n<input hidden type="file" #fileInputReplace (change)="onFileSelectReplace($event)" />\n\n<div class="card">\n\t<div class="card-header">\n\t\t<strong class="pull-left">Files</strong>\n\t</div>\n\t<div class="card-block">\n\t\t<div class="row">\n\t\t\t<div class="col-lg-6">\n\t\t\t\t@if (showFileUpload) {\n\t\t\t\t\t<div class="row">\n\t\t\t\t\t\t<div class="col-lg-6">\n\t\t\t\t\t\t\t<div class="container">\n\t\t\t\t\t\t\t\t<div style="margin: 10px 0px; font-weight: bold">Upload File</div>\n\t\t\t\t\t\t\t\t<label class="file">\n\t\t\t\t\t\t\t\t\t<input type="file" #fileInput (change)="onFileSelect($event)" />\n\t\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t\t<br />\n\t\t\t\t\t\t\t\t<ngx-file-drop dropZoneLabel="Drop files here" style="width: 223px; height: 112px; border: 1px black dashed; border-radius: 5px; justify-content: center" class="vertical-align" (onFileDrop)="dragFileAccepted($event)"></ngx-file-drop>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class="col-lg-6">\n\t\t\t\t\t\t\t@if (isUploading) {\n\t\t\t\t\t\t\t\t<b>{{ progressMsg || \'N/A\' }}</b>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t\t<div class="row" style="margin-top: 10px">\n\t\t\t\t\t@if (windowSize > 980) {\n\t\t\t\t\t\t<div class="col-lg-12">\n\t\t\t\t\t\t\t@if (pdfSrc) {\n\t\t\t\t\t\t\t\t<div style="text-align: center">\n\t\t\t\t\t\t\t\t\t<resolveio-client-lib-pdf-viewer [pdfSrc]="pdfSrc"></resolveio-client-lib-pdf-viewer>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class="col-lg-6">\n\t\t\t\t@if (files && files.length) {\n\t\t\t\t\t<b>Uploaded Files</b>\n\t\t\t\t\t<div [style.max-height]="windowSize > 900 ? \'300px\' : \'\'" [style.overflow-y]="windowSize > 900 ? \'auto\' : \'\'">\n\t\t\t\t\t\t<collapse-table collapseSize="900">\n\t\t\t\t\t\t\t<thead>\n\t\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t\t<th>File Name</th>\n\t\t\t\t\t\t\t\t\t<th>Size</th>\n\t\t\t\t\t\t\t\t\t<th>Type</th>\n\t\t\t\t\t\t\t\t\t<th>Actions</th>\n\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t</thead>\n\t\t\t\t\t\t\t<tbody>\n\t\t\t\t\t\t\t\t@for (file of files; track file._id; let i = $index) {\n\t\t\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t\t\t<td data-label="File Name" (click)="setPDFViewerSrc(file)">{{ file.name }}</td>\n\t\t\t\t\t\t\t\t\t\t<td data-label="Size" (click)="setPDFViewerSrc(file)">{{ file.size / 1024 / 1024 | number: \'.2\' }} MB</td>\n\t\t\t\t\t\t\t\t\t\t<td data-label="Type" (click)="setPDFViewerSrc(file)">{{ file.type }}</td>\n\t\t\t\t\t\t\t\t\t\t<td data-label="Actions">\n\t\t\t\t\t\t\t\t\t\t\t<responsive-button-group collapseSize="900">\n\t\t\t\t\t\t\t\t\t\t\t\t<button type="button" class="btn btn-success" (click)="open(file)">Open</button>\n\t\t\t\t\t\t\t\t\t\t\t\t<button type="button" class="btn btn-primary" (click)="download(file)">Download</button>\n\t\t\t\t\t\t\t\t\t\t\t\t<button [hidden]="!allowDelete || (file.type !== \'misc\' && !userIsInRole(\'super-admin\'))" type="button" class="btn btn-danger" (click)="deleteWithEmit(i)">Delete</button>\n\t\t\t\t\t\t\t\t\t\t\t\t<button [hidden]="!allowDelete || (file.type !== \'misc\' && !userIsInRole(\'super-admin\'))" type="button" class="btn btn-danger" (click)="fileInputReplace.click(); replaceFileIndex = i">Replace</button>\n\t\t\t\t\t\t\t\t\t\t\t\t<button type="button" class="btn btn-warning" (click)="email(file)">Email</button>\n\t\t\t\t\t\t\t\t\t\t\t</responsive-button-group>\n\t\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</tbody>\n\t\t\t\t\t\t</collapse-table>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t\t@if (!files || !files.length) {\n\t\t\t\t\t<b>No Uploaded Files</b>\n\t\t\t\t}\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>\n'}]}],ctorParameters:()=>[{type:ResizeService},{type:ProviderService},{type:DialogService},{type:i4.HttpClient}],propDecorators:{files:[{type:Input}],allowDelete:[{type:Input}],allowReplace:[{type:Input}],showFileUpload:[{type:Input}],filesChanged:[{type:Output}],fileAdded:[{type:Output}],fileRemoved:[{type:Output}],fileType:[{type:Input}],download_link:[{type:ViewChild,args:["download_link",{static:!0}]}]}});class FileModule{static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:FileModule,deps:[],target:i0.ɵɵFactoryTarget.NgModule});static"ɵmod"=i0.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"21.0.1",ngImport:i0,type:FileModule,declarations:[FileUploadComponent],imports:[CommonModule,FormsModule,CollapseTableModule,NgbModule,ResponsiveButtonGroupModule,NgxFileDropModule,PdfViewerModule],exports:[FileUploadComponent]});static"ɵinj"=i0.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:FileModule,imports:[CommonModule,FormsModule,CollapseTableModule,NgbModule,ResponsiveButtonGroupModule,NgxFileDropModule,PdfViewerModule]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:FileModule,decorators:[{type:NgModule,args:[{imports:[CommonModule,FormsModule,CollapseTableModule,NgbModule,ResponsiveButtonGroupModule,NgxFileDropModule,PdfViewerModule],declarations:[FileUploadComponent],exports:[FileUploadComponent]}]}]});class UserSettingsModule{static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:UserSettingsModule,deps:[],target:i0.ɵɵFactoryTarget.NgModule});static"ɵmod"=i0.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"21.0.1",ngImport:i0,type:UserSettingsModule,declarations:[UserSettingsComponent,UsersSettingsComponent],imports:[SharedModule,i1$1.RouterModule,DatatableModule,FileModule,NgbAccordionModule,NgbModule]});static"ɵinj"=i0.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:UserSettingsModule,providers:[UserSettingsService],imports:[SharedModule,UserSettingsRouting,DatatableModule,FileModule,NgbAccordionModule,NgbModule]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:UserSettingsModule,decorators:[{type:NgModule,args:[{imports:[SharedModule,UserSettingsRouting,DatatableModule,FileModule,NgbAccordionModule,NgbModule],declarations:[UserSettingsComponent,UsersSettingsComponent],providers:[UserSettingsService]}]}]});class HomeComponent extends BaseComponent{_route;auth;_services;_http;_app;menuData={title:"Home",module:null,description:null,description_name:null,tabs:[{link:"home",params:null,label:"Home"}]};selectedSolution="Asset";loggingOut$=null;subscription$=null;isLoggedIn;form;constructor(t,e,n,o,r){super(n),this._route=t,this.auth=e,this._services=n,this._http=o,this._app=r}ngOnInit(){this._services._app.setNavbarModuleData(this.menuData),this.loggingOut$=this._app.isLoggingOut.subscribe(t=>{t||(this._services._account.getUser()?this._services._account.getUser().settings&&this._services._account.getUser().settings.opening_route&&"/home"!==this._services._account.getUser().settings.opening_route?this._services._router.navigateByUrl(this._services._account.getUser().settings.opening_route):"/home"!==this._services._router.url&&this._services._router.navigateByUrl("/home"):(this.subscription$&&this.subscription$.unsubscribe(),this.subscription$=this._services._account.user.subscribe(t=>{t&&t.settings&&t.settings.opening_route&&"/home"!==t.settings.opening_route?this._services._router.navigateByUrl(t.settings.opening_route):"/home"!==this._services._router.url&&this._services._router.navigateByUrl("/home")},()=>{})))})}ngOnDestroy(){this.subscription$&&this.subscription$.unsubscribe(),this.loggingOut$&&this.loggingOut$.unsubscribe()}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:HomeComponent,deps:[{token:i1$1.ActivatedRoute},{token:AuthService},{token:ProviderService},{token:i4.HttpClient},{token:CoreService}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"21.0.1",type:HomeComponent,isStandalone:!1,selector:"resolveio-home",providers:[ProviderService],usesInheritance:!0,ngImport:i0,template:'<div class="home-hero h-100">\n\t<div class="row h-100 m-0">\n\t\t<div class="col-lg-12 h-100">\n\t\t\t<div class="jumbotron jumbotron-fluid h-100 home-hero__jumbotron">\n\t\t\t\t<div class="container text-center h-100 home-hero__container">\n\t\t\t\t\t<img src="/assets/images/ResolveIO.png" class="img-fluid home-hero__logo" alt="ResolveIO logo" />\n\t\t\t\t\t<p class="home-hero__tagline">The All-in-One Solution for Tracking Inventory, Ordering, POs, Management, and Much More!</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>\n',styles:[".home-hero{height:100%;overflow-x:hidden}.home-hero__jumbotron{padding-bottom:0}.home-hero__container{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;padding-left:1.5rem;padding-right:1.5rem}.home-hero__logo{width:100%;max-width:750px;height:auto;object-fit:contain}.home-hero__tagline{font-size:24px;font-style:italic}@media(max-width:767.98px){.home-hero__container{padding-left:1.25rem;padding-right:1.25rem}.home-hero__tagline{font-size:18px}}\n"]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:HomeComponent,decorators:[{type:Component,args:[{selector:"resolveio-home",providers:[ProviderService],standalone:!1,template:'<div class="home-hero h-100">\n\t<div class="row h-100 m-0">\n\t\t<div class="col-lg-12 h-100">\n\t\t\t<div class="jumbotron jumbotron-fluid h-100 home-hero__jumbotron">\n\t\t\t\t<div class="container text-center h-100 home-hero__container">\n\t\t\t\t\t<img src="/assets/images/ResolveIO.png" class="img-fluid home-hero__logo" alt="ResolveIO logo" />\n\t\t\t\t\t<p class="home-hero__tagline">The All-in-One Solution for Tracking Inventory, Ordering, POs, Management, and Much More!</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>\n',styles:[".home-hero{height:100%;overflow-x:hidden}.home-hero__jumbotron{padding-bottom:0}.home-hero__container{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;padding-left:1.5rem;padding-right:1.5rem}.home-hero__logo{width:100%;max-width:750px;height:auto;object-fit:contain}.home-hero__tagline{font-size:24px;font-style:italic}@media(max-width:767.98px){.home-hero__container{padding-left:1.25rem;padding-right:1.25rem}.home-hero__tagline{font-size:18px}}\n"]}]}],ctorParameters:()=>[{type:i1$1.ActivatedRoute},{type:AuthService},{type:ProviderService},{type:i4.HttpClient},{type:CoreService}]});class NgSelectStickyAdapterService{_account;_socket;constructor(t,e){this._account=t,this._socket=e}get userChanges(){return this._account.user.asObservable()}getUser(){return this._account.getUser()}saveStickySelects(t,e="ng-select"){const n=this._account.getUser();if(!n)return;const o={...n.other||{},stickySelects:t},r={...n,other:o};return this._account.setUser(r),this._socket.call("saveUserStickySelects",t,n._id).then(e=>{const o=this._account.getUser();if(!o||o._id!==n._id)return;const r=e?.stickySelects||t,i={...o,__v:e?.__v??o.__v,other:{...o.other||{},stickySelects:r}};this._account.setUser(i)}).catch(()=>{})}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:NgSelectStickyAdapterService,deps:[{token:AccountManagerService},{token:SocketManagerService}],target:i0.ɵɵFactoryTarget.Injectable});static"ɵprov"=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:NgSelectStickyAdapterService})}function rioDatePickerConfigFactory(t){return{resolveFirstDayOfWeek:()=>{const e=t.getUser()?.other?.date_picker_day_start;if("M"===e||"S"===e)return e;if("string"==typeof e){const t=e.toUpperCase();if("M"===t||"S"===t)return t}return 1===e?"M":7===e||0===e?"S":null}}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:NgSelectStickyAdapterService,decorators:[{type:Injectable}],ctorParameters:()=>[{type:AccountManagerService},{type:SocketManagerService}]});class CoreModule{static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:CoreModule,deps:[],target:i0.ɵɵFactoryTarget.NgModule});static"ɵmod"=i0.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"21.0.1",ngImport:i0,type:CoreModule,declarations:[CoreComponent,HomeComponent,LoggerComponent,HtmlDiffViewerComponent,NavbarMainComponent,NavbarModuleComponent,ForgotPasswordComponent,EnrollComponent,Auth365Component,FocusDirective,ScrollDirective,DialogConfirmContent,DialogErrorContent,DialogInputContent,DialogNotifyContent,DialogSelectDateTimeContent,DialogSelectDataLabelsContent,DialogLoginContent,DialogRegisterContent,DialogSelectWithButtonsURLContent,DialogSelectArrayObjsContent,DialogSelectArrayContent],imports:[SharedModule,NgbModule,i1.ToastrModule,UserSettingsModule,BrowserAnimationsModule,CollapseTableModule],exports:[CoreComponent,HomeComponent,LoggerComponent,NavbarMainComponent,NavbarModuleComponent,ForgotPasswordComponent,EnrollComponent,Auth365Component,FocusDirective,ScrollDirective]});static"ɵinj"=i0.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:CoreModule,providers:[CoreService,AuthService,AuthGuard,CanDeactivateGuard,DialogService,ValidationService,AwsService,AuthPermissionService,WindowRefService,AlertService,SocketService,SocketManagerService,TokenManagerService,AccountManagerService,OfflineManagerService,DeviceDetectorService,LocalStorageService,NgSelectStickyAdapterService,{provide:NG_SELECT_STICKY_ADAPTER,useExisting:NgSelectStickyAdapterService},{provide:RIO_DATE_PICKER_CONFIG,useFactory:rioDatePickerConfigFactory,deps:[AccountManagerService]},provideHttpClient(withInterceptorsFromDi())],imports:[SharedModule,NgbModule,ToastrModule.forRoot(),UserSettingsModule,BrowserAnimationsModule,CollapseTableModule]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:CoreModule,decorators:[{type:NgModule,args:[{declarations:[CoreComponent,HomeComponent,LoggerComponent,HtmlDiffViewerComponent,NavbarMainComponent,NavbarModuleComponent,ForgotPasswordComponent,EnrollComponent,Auth365Component,FocusDirective,ScrollDirective,DialogConfirmContent,DialogErrorContent,DialogInputContent,DialogNotifyContent,DialogSelectDateTimeContent,DialogSelectDataLabelsContent,DialogLoginContent,DialogRegisterContent,DialogSelectWithButtonsURLContent,DialogSelectArrayObjsContent,DialogSelectArrayContent],exports:[CoreComponent,HomeComponent,LoggerComponent,NavbarMainComponent,NavbarModuleComponent,ForgotPasswordComponent,EnrollComponent,Auth365Component,FocusDirective,ScrollDirective],imports:[SharedModule,NgbModule,ToastrModule.forRoot(),UserSettingsModule,BrowserAnimationsModule,CollapseTableModule],providers:[CoreService,AuthService,AuthGuard,CanDeactivateGuard,DialogService,ValidationService,AwsService,AuthPermissionService,WindowRefService,AlertService,SocketService,SocketManagerService,TokenManagerService,AccountManagerService,OfflineManagerService,DeviceDetectorService,LocalStorageService,NgSelectStickyAdapterService,{provide:NG_SELECT_STICKY_ADAPTER,useExisting:NgSelectStickyAdapterService},{provide:RIO_DATE_PICKER_CONFIG,useFactory:rioDatePickerConfigFactory,deps:[AccountManagerService]},provideHttpClient(withInterceptorsFromDi())]}]}]});class SupportTicketService{selectedSupportTicket=new BehaviorSubject("0");constructor(){}setSelectedSupportTicket(t){this.selectedSupportTicket.next(t)}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SupportTicketService,deps:[],target:i0.ɵɵFactoryTarget.Injectable});static"ɵprov"=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SupportTicketService})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SupportTicketService,decorators:[{type:Injectable}],ctorParameters:()=>[]});class SupportTicketComponent extends BaseComponent{_sts;_services;selectedResolveIOSupport$;menuData;constructor(t,e){super(e),this._sts=t,this._services=e}ngOnInit(){this.selectedResolveIOSupport$=this._sts.selectedSupportTicket.subscribe(t=>this.selectedResolveIOSupportChanged(t))}ngOnDestroy(){this._sts.setSelectedSupportTicket("0"),this.selectedResolveIOSupport$.unsubscribe()}selectedResolveIOSupportChanged(t){"0"!==t?this._services._socket.call("supportGetSupportTicketWithId",t,(e,n)=>{n?this.setResolveIOSupportModuleMenuData(t,n):this.setResolveIOSupportModuleMenuData()}):this.setResolveIOSupportModuleMenuData()}setResolveIOSupportModuleMenuData(t,e){let n=[];n.push({link:"/support-ticket/list",params:null,label:"List",tourAnchor:"navBarModuleSupportList"}),n.push({link:"/support-ticket/new",params:null,label:"New",tourAnchor:"navBarModuleSupportNew"}),n.push({link:"/support-ticket/detail",params:t||"0",label:"Details"}),(this._services._account.isUserSuperAdmin()||e&&e.id_user_created===this._services._account.getUser()._id)&&n.push({link:"/support-ticket/edit",params:t||"0",label:"Edit"}),this.menuData={title:"Support Center",module:"Support Ticket",description_name:"Support Ticket #",description:e?e.support_ticket_number_string:"",tabs:n},this._services._app.setNavbarModuleData(this.menuData)}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SupportTicketComponent,deps:[{token:SupportTicketService},{token:ProviderService}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"21.0.1",type:SupportTicketComponent,isStandalone:!1,selector:"resolveio-support-ticket",providers:[ProviderService],usesInheritance:!0,ngImport:i0,template:"<router-outlet></router-outlet>",isInline:!0,dependencies:[{kind:"directive",type:i1$1.RouterOutlet,selector:"router-outlet",inputs:["name","routerOutletData"],outputs:["activate","deactivate","attach","detach"],exportAs:["outlet"]}]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SupportTicketComponent,decorators:[{type:Component,args:[{selector:"resolveio-support-ticket",providers:[ProviderService],template:"<router-outlet></router-outlet>",standalone:!1}]}],ctorParameters:()=>[{type:SupportTicketService},{type:ProviderService}]});class SupportTicketListComponent extends BaseComponent{_sts;_route;_services;route$;support_tickets;subscription$=[];columns=[{name:"Support Ticket #",data:"support_ticket_number"},{name:"Date Created",data:"date_created"},{name:"Type",data:"type"},{name:"Issue",data:"issue"},{name:"Status",data:"status"},{name:"Created By",data:"user_created"}];tableData={searchString:"",entriesPerPage:"25",pageNum:1,sortColumn:"",sortOrder:"desc",filters:{status:"Opened",substatus:"All"}};totalItems=1e3;constructor(t,e,n){super(n),this._sts=t,this._route=e,this._services=n}ngOnInit(){this._sts.setSelectedSupportTicket("0"),this.route$=this._route.queryParams.subscribe(()=>{let t=Object.keys(this.tableData),e=Object.keys(this.tableData.filters);this._route.snapshot.queryParamMap.keys.length?(t.splice(t.indexOf("filters",1)),e.forEach(e=>{t.push("filters."+e)}),t.filter(t=>t in this._route.snapshot.queryParams).forEach(t=>{if(t.includes("filters.")){let e=t;e=e.replace("filters.",""),this.tableData.filters[e]=this._route.snapshot.queryParams[t]}else this.tableData[t]=this._route.snapshot.queryParams[t]})):this.tableData={searchString:"",entriesPerPage:"25",pageNum:1,sortColumn:"",sortOrder:"desc",filters:{status:"Opened",substatus:"All"}},this.queryData()})}ngOnDestroy(){this.subscription$.forEach(t=>{t.unsubscribe()}),this.route$.unsubscribe()}onQueryDataChanged(){let t={},e=Object.keys(this.tableData),n=Object.keys(this.tableData.filters);e.forEach(e=>{"filters"===e?n.forEach(e=>{t["filters."+e]=this.tableData.filters[e]}):t[e]=this.tableData[e]}),this._services._router.navigate(["/support-ticket/list"],{queryParams:t})}queryData(){let t={};this.columns.forEach(e=>{t[e.data]=1});const e={limit:parseInt(this.tableData.entriesPerPage),skip:(this.tableData.pageNum-1)*parseInt(this.tableData.entriesPerPage),sort:this.tableData.sortColumn?{[this.tableData.sortColumn]:"asc"===this.tableData.sortOrder?1:-1}:{name:1},fields:t};let n=[{prop:"client",data:this._services._app.client.getValue()}];"All"!==this.tableData.filters.status&&n.push({prop:"status",data:this.tableData.filters.status}),"All"!==this.tableData.filters.substatus&&n.push({prop:"substatus",data:this.tableData.filters.substatus}),this._services._socket.call("supportticketsWithOptions",e,this.tableData.searchString,n,(t,e)=>{this.support_tickets=e}),this._services._socket.call("supportticketCount",this.tableData.searchString,n,(t,e)=>{t?this._services._socket.call("insertErrorLog","countQuery - resolveioSupportList",[t]):this.totalItems=e})}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SupportTicketListComponent,deps:[{token:SupportTicketService},{token:i1$1.ActivatedRoute},{token:ProviderService}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"21.0.1",type:SupportTicketListComponent,isStandalone:!1,selector:"resolveio-support-ticket-list",providers:[ProviderService],usesInheritance:!0,ngImport:i0,template:'<div class="row">\n\t<div class="col-sm-6">\n\t\t<b>Filter Support Ticket By Status</b>\n\t\t<br />\n\t\t<select class="form-control" [(ngModel)]="tableData.filters[\'status\']" (change)="onQueryDataChanged()" tourAnchor="supportListFilter">\n\t\t\t<option value="All">All</option>\n\t\t\t<option value="Opened">Opened</option>\n\t\t\t<option value="Resolved">Resolved</option>\n\t\t</select>\n\t</div>\n\t<div class="col-sm-6">\n\t\t<b>Filter Support Ticket By Sub-Status</b>\n\t\t<br />\n\t\t<select class="form-control" [(ngModel)]="tableData.filters[\'substatus\']" (change)="onQueryDataChanged()">\n\t\t\t<option value="All">All</option>\n\t\t\t<option value="Investigating">Investigating</option>\n\t\t\t<option value="Awaiting Customer Interaction">Awaiting Customer Interaction</option>\n\t\t\t<option value="Resolved">Resolved</option>\n\t\t</select>\n\t</div>\n</div>\n<div class="row">\n\t<div class="col-md-12">\n\t\t<div style="padding-left: 15px; padding-right: 15px; padding-top: 15px">\n\t\t\t<data-table #dataTable [urlClick]="\'/support-ticket/detail/\'" [columns]="columns" [data]="support_tickets" [collapseSize]="990" [searchTitle]="\'Search For Support Ticket...\'" [totalItems]="totalItems" (onChangeTableData)="onQueryDataChanged()" [tableData]="tableData" tourAnchor="supportListDatatable"></data-table>\n\t\t</div>\n\t</div>\n</div>\n',dependencies:[{kind:"directive",type:i2.NgSelectOption,selector:"option",inputs:["ngValue","value"]},{kind:"directive",type:i2.ɵNgSelectMultipleOption,selector:"option",inputs:["ngValue","value"]},{kind:"directive",type:i2.SelectControlValueAccessor,selector:"select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]",inputs:["compareWith"]},{kind:"directive",type:i2.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:i2.NgModel,selector:"[ngModel]:not([formControlName]):not([formControl])",inputs:["name","disabled","ngModel","ngModelOptions"],outputs:["ngModelChange"],exportAs:["ngModel"]},{kind:"component",type:DatatableComponent,selector:"data-table",inputs:["urlClick","columns","data","collapseSize","searchTitle","totalItems","tableData"],outputs:["onChangeTableData"]}]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SupportTicketListComponent,decorators:[{type:Component,args:[{selector:"resolveio-support-ticket-list",providers:[ProviderService],standalone:!1,template:'<div class="row">\n\t<div class="col-sm-6">\n\t\t<b>Filter Support Ticket By Status</b>\n\t\t<br />\n\t\t<select class="form-control" [(ngModel)]="tableData.filters[\'status\']" (change)="onQueryDataChanged()" tourAnchor="supportListFilter">\n\t\t\t<option value="All">All</option>\n\t\t\t<option value="Opened">Opened</option>\n\t\t\t<option value="Resolved">Resolved</option>\n\t\t</select>\n\t</div>\n\t<div class="col-sm-6">\n\t\t<b>Filter Support Ticket By Sub-Status</b>\n\t\t<br />\n\t\t<select class="form-control" [(ngModel)]="tableData.filters[\'substatus\']" (change)="onQueryDataChanged()">\n\t\t\t<option value="All">All</option>\n\t\t\t<option value="Investigating">Investigating</option>\n\t\t\t<option value="Awaiting Customer Interaction">Awaiting Customer Interaction</option>\n\t\t\t<option value="Resolved">Resolved</option>\n\t\t</select>\n\t</div>\n</div>\n<div class="row">\n\t<div class="col-md-12">\n\t\t<div style="padding-left: 15px; padding-right: 15px; padding-top: 15px">\n\t\t\t<data-table #dataTable [urlClick]="\'/support-ticket/detail/\'" [columns]="columns" [data]="support_tickets" [collapseSize]="990" [searchTitle]="\'Search For Support Ticket...\'" [totalItems]="totalItems" (onChangeTableData)="onQueryDataChanged()" [tableData]="tableData" tourAnchor="supportListDatatable"></data-table>\n\t\t</div>\n\t</div>\n</div>\n'}]}],ctorParameters:()=>[{type:SupportTicketService},{type:i1$1.ActivatedRoute},{type:ProviderService}]});class SupportTicketNewComponent extends BaseComponent{_sts;_cd;_services;_ds;fileUpload;subscription$=[];form;disableFormButton=!1;submit=!1;constructor(t,e,n,o){super(n),this._sts=t,this._cd=e,this._services=n,this._ds=o}ngOnInit(){this._sts.setSelectedSupportTicket("0"),this.form=this._services._fb.group({__v:[0],type:["",[Validators.required]],priority:["",[Validators.required]],issue:["",[Validators.required]],support_ticket_number:[0],support_ticket_number_string:["0"],status:["Opened"],substatus:["New"],client:[this._services._app.client.getValue()],id_client:[this._services._app.client.getValue()],messages:[[]],date_created:[null],date_created_string:[""],id_user_created:[this._services._account.getUser()._id],user_created:[this._services._account.getUser().fullname],billable:[!1,[Validators.required]],date_investigation:[null],date_closed:[null],files:[[]],current_watchers:[[]],client_user:[{id_user:this._services._account.getUser()._id,user:this._services._account.getUser().fullname,email:this._services._account.getUser().email?this._services._account.getUser().email:""}],tasks:[[]],notes:[[]],users_assigned:[[]],bill_description:[""],difficulty:[1]})}ngOnDestroy(){this.subscription$.forEach(t=>{t.unsubscribe()})}canDeactivate(){return!0}onTypeChange(){"System Impairment"===this.form.controls.type.value?(this.form.controls.priority.setValue("High"),this.form.controls.billable.setValue(!1)):"Request New Feature"===this.form.controls.type.value||"General Inquery"===this.form.controls.type.value?(this.form.controls.priority.setValue("Low"),this.form.controls.billable.setValue(!0)):(this.form.controls.priority.setValue(""),this.form.controls.billable.setValue(!1))}submitForm(t){this.submit=!0,this.disableFormButton=!0;let e=new Date;this.form.controls.date_created.setValue(e),this.form.controls.date_created_string.setValue(e.getFullYear()+"/"+(e.getMonth()+1)+"/"+e.getDate()),this._services._socket.call("supportInsertSupportTicket",this.form.value,(t,e)=>{e?(this._services._alert.setAlert("success","Support ticket has been created"),this._services._router.navigateByUrl("/support-ticket/detail/"+e)):(this._ds.error("Could not create new support ticket."),this._services._socket.call("insertErrorLog","Support Ticket New - insert support ticket",[this.form.value,t]))})}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SupportTicketNewComponent,deps:[{token:SupportTicketService},{token:i0.ChangeDetectorRef},{token:ProviderService},{token:DialogService}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"21.0.1",type:SupportTicketNewComponent,isStandalone:!1,selector:"resolveio-support-ticket-new",providers:[ProviderService],viewQueries:[{propertyName:"fileUpload",first:!0,predicate:["fileUpload"],descendants:!0,static:!0}],usesInheritance:!0,ngImport:i0,template:'<style>\n\t.label-accordion {\n\t\tfont-weight: bold;\n\t\tcolor: black;\n\t\tmargin-bottom: 0px;\n\t}\n</style>\n\n<div class="col-lg-12">\n\t<form [formGroup]="form" novalidate (ngSubmit)="submitForm(form)">\n\t\t<div class="row">\n\t\t\t<div ngbAccordion #acc="ngbAccordion" activeIds="supportTicketInfo">\n\t\t\t\t<div ngbAccordionItem id="supportTicketInfo">\n\t\t\t\t\t<div ngbAccordionHeader>\n\t\t\t\t\t\t<button ngbAccordionButton type="button">\n\t\t\t\t\t\t\t<label class="label-accordion">Support Ticket Info</label>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div ngbAccordionCollapse>\n\t\t\t\t\t\t<div ngbAccordionBody>\n\t\t\t\t\t\t\t<ng-template>\n\t\t\t\t\t\t\t\t<div class="row">\n\t\t\t\t\t\t\t\t\t<div class="col-12">\n\t\t\t\t\t\t\t\t\t\t<div class="form-group">\n\t\t\t\t\t\t\t\t\t\t\t<label class="form-control-label">Support Ticket Type</label>\n\t\t\t\t\t\t\t\t\t\t\t@if (!form.controls.type.valid) {\n\t\t\t\t\t\t\t\t\t\t\t\t<em>- Required</em>\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t<select [ngClass]="[\'form-control\', form.controls.type.valid ? \'is-valid\' : \'is-invalid\']" formControlName="type" (change)="onTypeChange()" tourAnchor="supportNewSelect">\n\t\t\t\t\t\t\t\t\t\t\t\t<option value="">Select Type</option>\n\t\t\t\t\t\t\t\t\t\t\t\t<option value="General Inquery">General Inquery</option>\n\t\t\t\t\t\t\t\t\t\t\t\t<option value="System Impairment">System Impairment</option>\n\t\t\t\t\t\t\t\t\t\t\t\t<option value="Request New Feature">Request New Feature</option>\n\t\t\t\t\t\t\t\t\t\t\t</select>\n\t\t\t\t\t\t\t\t\t\t\t@if (!form.controls.type.valid) {\n\t\t\t\t\t\t\t\t\t\t\t\t<div class="invalid-feedback">Type is required</div>\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class="row">\n\t\t\t\t\t\t\t<div class="col-lg-12">\n\t\t\t\t\t\t\t\t<div class="form-group">\n\t\t\t\t\t\t\t\t\t<label class="form-control-label">Problem/Feature Description</label>\n\t\t\t\t\t\t\t\t\t@if (!form.controls.issue.valid) {\n\t\t\t\t\t\t\t\t\t\t<em>- Required</em>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t<textarea formControlName="issue" [ngClass]="[\'form-control\', form.controls.issue.valid ? \'is-valid\' : \'is-invalid\']" [rows]="5" style="overflow-x: hidden" tourAnchor="supportNewInput"></textarea>\n\t\t\t\t\t\t\t\t\t@if (!form.controls.issue.valid) {\n\t\t\t\t\t\t\t\t\t\t<div class="invalid-feedback">Description is required</div>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class="row" style="padding-top: 15px">\n\t\t\t<form-button [form]="form" [disabled]="disableFormButton" tourAnchor="supportNewSubmit"></form-button>\n\t\t</div>\n\t</form>\n</div>\n',styles:[".label-accordion{font-weight:700;color:#000;margin-bottom:0}\n"],dependencies:[{kind:"directive",type:i2.ɵNgNoValidate,selector:"form:not([ngNoForm]):not([ngNativeValidate])"},{kind:"directive",type:i2.NgSelectOption,selector:"option",inputs:["ngValue","value"]},{kind:"directive",type:i2.ɵNgSelectMultipleOption,selector:"option",inputs:["ngValue","value"]},{kind:"directive",type:i2.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:i2.SelectControlValueAccessor,selector:"select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]",inputs:["compareWith"]},{kind:"directive",type:i2.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:i2.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:i2.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:i2.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:i1$2.NgbAccordionButton,selector:"button[ngbAccordionButton]"},{kind:"directive",type:i1$2.NgbAccordionDirective,selector:"[ngbAccordion]",inputs:["animation","closeOthers","destroyOnHide"],outputs:["show","shown","hide","hidden"],exportAs:["ngbAccordion"]},{kind:"directive",type:i1$2.NgbAccordionItem,selector:"[ngbAccordionItem]",inputs:["ngbAccordionItem","destroyOnHide","disabled","collapsed"],outputs:["show","shown","hide","hidden"],exportAs:["ngbAccordionItem"]},{kind:"directive",type:i1$2.NgbAccordionHeader,selector:"[ngbAccordionHeader]"},{kind:"component",type:i1$2.NgbAccordionBody,selector:"[ngbAccordionBody]"},{kind:"directive",type:i1$2.NgbAccordionCollapse,selector:"[ngbAccordionCollapse]",exportAs:["ngbAccordionCollapse"]},{kind:"component",type:FormButtonComponent,selector:"form-button",inputs:["form","disabled","type"]},{kind:"directive",type:i7.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]}]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SupportTicketNewComponent,decorators:[{type:Component,args:[{selector:"resolveio-support-ticket-new",providers:[ProviderService],standalone:!1,template:'<style>\n\t.label-accordion {\n\t\tfont-weight: bold;\n\t\tcolor: black;\n\t\tmargin-bottom: 0px;\n\t}\n</style>\n\n<div class="col-lg-12">\n\t<form [formGroup]="form" novalidate (ngSubmit)="submitForm(form)">\n\t\t<div class="row">\n\t\t\t<div ngbAccordion #acc="ngbAccordion" activeIds="supportTicketInfo">\n\t\t\t\t<div ngbAccordionItem id="supportTicketInfo">\n\t\t\t\t\t<div ngbAccordionHeader>\n\t\t\t\t\t\t<button ngbAccordionButton type="button">\n\t\t\t\t\t\t\t<label class="label-accordion">Support Ticket Info</label>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div ngbAccordionCollapse>\n\t\t\t\t\t\t<div ngbAccordionBody>\n\t\t\t\t\t\t\t<ng-template>\n\t\t\t\t\t\t\t\t<div class="row">\n\t\t\t\t\t\t\t\t\t<div class="col-12">\n\t\t\t\t\t\t\t\t\t\t<div class="form-group">\n\t\t\t\t\t\t\t\t\t\t\t<label class="form-control-label">Support Ticket Type</label>\n\t\t\t\t\t\t\t\t\t\t\t@if (!form.controls.type.valid) {\n\t\t\t\t\t\t\t\t\t\t\t\t<em>- Required</em>\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t<select [ngClass]="[\'form-control\', form.controls.type.valid ? \'is-valid\' : \'is-invalid\']" formControlName="type" (change)="onTypeChange()" tourAnchor="supportNewSelect">\n\t\t\t\t\t\t\t\t\t\t\t\t<option value="">Select Type</option>\n\t\t\t\t\t\t\t\t\t\t\t\t<option value="General Inquery">General Inquery</option>\n\t\t\t\t\t\t\t\t\t\t\t\t<option value="System Impairment">System Impairment</option>\n\t\t\t\t\t\t\t\t\t\t\t\t<option value="Request New Feature">Request New Feature</option>\n\t\t\t\t\t\t\t\t\t\t\t</select>\n\t\t\t\t\t\t\t\t\t\t\t@if (!form.controls.type.valid) {\n\t\t\t\t\t\t\t\t\t\t\t\t<div class="invalid-feedback">Type is required</div>\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class="row">\n\t\t\t\t\t\t\t<div class="col-lg-12">\n\t\t\t\t\t\t\t\t<div class="form-group">\n\t\t\t\t\t\t\t\t\t<label class="form-control-label">Problem/Feature Description</label>\n\t\t\t\t\t\t\t\t\t@if (!form.controls.issue.valid) {\n\t\t\t\t\t\t\t\t\t\t<em>- Required</em>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t<textarea formControlName="issue" [ngClass]="[\'form-control\', form.controls.issue.valid ? \'is-valid\' : \'is-invalid\']" [rows]="5" style="overflow-x: hidden" tourAnchor="supportNewInput"></textarea>\n\t\t\t\t\t\t\t\t\t@if (!form.controls.issue.valid) {\n\t\t\t\t\t\t\t\t\t\t<div class="invalid-feedback">Description is required</div>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class="row" style="padding-top: 15px">\n\t\t\t<form-button [form]="form" [disabled]="disableFormButton" tourAnchor="supportNewSubmit"></form-button>\n\t\t</div>\n\t</form>\n</div>\n'}]}],ctorParameters:()=>[{type:SupportTicketService},{type:i0.ChangeDetectorRef},{type:ProviderService},{type:DialogService}],propDecorators:{fileUpload:[{type:ViewChild,args:["fileUpload",{static:!0}]}]}});class SupportTicketDetailComponent extends BaseComponent{_route;_sts;_services;_ds;fileUpload;subscription$=[];id;data;files=[];constructor(t,e,n,o){super(n),this._route=t,this._sts=e,this._services=n,this._ds=o}ngOnInit(){this.id=this._route.snapshot.params.id,this._sts.setSelectedSupportTicket(this.id),this._services._socket.call("supportGetSupportTicketWithId",this.id,(t,e)=>{if(!e)return this._services._router.navigateByUrl("/support-ticket/list"),void this._ds.error("Could not find support ticket");this.data=e})}ngOnDestroy(){this.subscription$.forEach(t=>{t.unsubscribe()})}onFileAdded(t){this.data.files.push(t._id),this._services._socket.call("supportUpdateSupportTicket",this.data,(t,e)=>{!t&&e||(this._ds.error("Could not update support ticket files"),this._services._socket.call("insertErrorLog","support-ticket-detail - update support-ticket files add",[this.data.files,t]))})}onFilesRemoved(t){this._ds.confirm("Are you sure you want to remove a file? This will email all current watchers?").then(e=>{-1!==this.data.files.indexOf(t._id)&&(this.data.files.splice(this.data.files.indexOf(t._id),1),this._services._socket.call("supportUpdateSupportTicket",this.data,(t,e)=>{!t&&e||(this._ds.error("Could not update support-ticket files"),this._services._socket.call("insertErrorLog","support-ticket-detail - update files remove",[{prop:"files",data:this.data.files},t]))}))},()=>{})}edit(){this._services._router.navigateByUrl("/support-ticket/edit/"+this.id)}newMessage(){this._ds.input("Input Message",[{label:"Message",form:"message",data:"",validators:[Validators.required],validatorErrors:["required"],validatorMsg:["Message is required"],required:!0,type:"textarea"}]).then(t=>{this.data.messages.push({message:t.message.value,id_user:this._services._account.getUser()._id,user:this._services._account.getUser().fullname,date:new Date,type:"Client"}),this._services._socket.call("supportUpdateSupportTicket",this.data,(t,e)=>{e||(this._services._socket.call("insertErrorLog","Support Ticket Detail - Add Message"),this._ds.error("Support ticket could not update"))})},()=>{})}editMessage(t){let e=this.data.messages[t];this._ds.input("Input Message",[{label:"Message",form:"message",data:e.message,validators:[Validators.required],validatorErrors:["required"],validatorMsg:["Message is required"],required:!0,type:"textarea"}]).then(t=>{e.message=t.message.value,this._services._socket.call("supportUpdateSupportTicket",this.data,(t,e)=>{e||(this._services._socket.call("insertErrorLog","Support Ticket Detail - Add Message"),this._ds.error("Support ticket could not update"))})},()=>{})}deleteMessage(t){this._ds.confirm("Are you sure you want to remove this message?").then(()=>{this.data.messages.splice(t,1),this._services._socket.call("supportUpdateSupportTicket",this.data,(t,e)=>{e||(this._services._socket.call("insertErrorLog","Support Ticket Detail - Add Message"),this._ds.error("Support ticket could not update"))})},()=>{})}isMyMessage(t){return this._services._account.getUser()._id===t.id_user}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SupportTicketDetailComponent,deps:[{token:i1$1.ActivatedRoute},{token:SupportTicketService},{token:ProviderService},{token:DialogService}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"21.0.1",type:SupportTicketDetailComponent,isStandalone:!1,selector:"resolveio-support-ticket-detail",providers:[ProviderService],viewQueries:[{propertyName:"fileUpload",first:!0,predicate:["fileUpload"],descendants:!0,static:!0}],usesInheritance:!0,ngImport:i0,template:'<style>\n\t.label-accordion {\n\t\tfont-weight: bold;\n\t\tcolor: black;\n\t\tmargin-bottom: 0px;\n\t}\n\n\t.accordion {\n\t\twidth: 100%;\n\t}\n\n\tdl {\n\t\tmargin-bottom: 0px;\n\t}\n\n\t.selected {\n\t\tbackground-color: lightblue;\n\t}\n</style>\n\n@if (data) {\n\t<div class="col-lg-12">\n\t\t<div class="row">\n\t\t\t<div ngbAccordion #acc="ngbAccordion" activeIds="supportTicketInfo, supportTicketMessages, files">\n\t\t\t\t<div ngbAccordionItem id="supportTicketInfo">\n\t\t\t\t\t<div ngbAccordionHeader>\n\t\t\t\t\t\t<button ngbAccordionButton type="button"><span class="label-accordion">Support Ticket Info</span></button>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div ngbAccordionCollapse>\n\t\t\t\t\t\t<div ngbAccordionBody>\n\t\t\t\t\t\t\t<ng-template>\n\t\t\t\t\t\t\t\t<div class="card">\n\t\t\t\t\t\t\t\t\t<div class="card-header"><b>General Info</b></div>\n\t\t\t\t\t\t\t\t\t<div class="card-body">\n\t\t\t\t\t\t\t\t\t\t<div class="row">\n\t\t\t\t\t\t\t\t\t\t\t<div class="col-lg-4">\n\t\t\t\t\t\t\t\t\t\t\t\t<dl>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<dt>Support Ticket #</dt>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<dd>{{ data.support_ticket_number | number }}</dd>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<dt>Date Created</dt>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<dd>{{ data.date_created | date: \'short\' }}</dd>\n\t\t\t\t\t\t\t\t\t\t\t\t</dl>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t<div class="col-lg-4">\n\t\t\t\t\t\t\t\t\t\t\t\t<dl>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<dt>Type</dt>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<dd>{{ data.type }}</dd>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<dt>User</dt>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<dd>{{ data.user_created }}</dd>\n\t\t\t\t\t\t\t\t\t\t\t\t</dl>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t<div class="col-lg-4">\n\t\t\t\t\t\t\t\t\t\t\t\t<dl>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<dt>Status</dt>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<dd>{{ data.status }}</dd>\n\t\t\t\t\t\t\t\t\t\t\t\t</dl>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class="card">\n\t\t\t\t\t\t\t\t\t<div class="card-header"><b>Problem Description</b></div>\n\t\t\t\t\t\t\t\t\t<div class="card-body">\n\t\t\t\t\t\t\t\t\t\t<pre>{{ data.issue }}</pre>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t@if (data) {\n\t\t\t\t\t<div ngbAccordionItem id="supportTicketMessages">\n\t\t\t\t\t\t<div ngbAccordionHeader>\n\t\t\t\t\t\t\t<button ngbAccordionButton type="button"><span class="label-accordion">Messages</span></button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div ngbAccordionCollapse>\n\t\t\t\t\t\t\t<div ngbAccordionBody>\n\t\t\t\t\t\t\t\t<ng-template>\n\t\t\t\t\t\t\t\t\t<div class="row">\n\t\t\t\t\t\t\t\t\t\t<div class="col-lg-12">\n\t\t\t\t\t\t\t\t\t\t\t@for (message of data.messages; track message.message; let i = $index) {\n\t\t\t\t\t\t\t\t\t\t\t\t<div class="card">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div class="card-header">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<b>User: {{ message.user }} - Date: {{ message.date | date: \'short\' }}</b>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div class="card-body" [ngClass]="[message.type === \'ResolveIO\' ? \'selected\' : \'\']">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class="row" style="width: 100%">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class="col-lg-10">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<pre>{{ message.message }}</pre>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class="col-lg-2">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<responsive-button-group collapseSize="900">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t@if (isMyMessage(message)) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<button type="button" class="btn btn-warning" (click)="editMessage(i)">Edit</button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t@if (isMyMessage(message)) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<button type="button" class="btn btn-danger" (click)="deleteMessage(i)">Delete</button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</responsive-button-group>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<div class="row" style="margin-top: 10px">\n\t\t\t\t\t\t\t\t\t\t<div class="col-lg-12">\n\t\t\t\t\t\t\t\t\t\t\t<button type="button" class="btn btn-success" (click)="newMessage()">New Message</button>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t\t<div ngbAccordionItem id="files">\n\t\t\t\t\t<div ngbAccordionHeader>\n\t\t\t\t\t\t<button ngbAccordionButton type="button"><span class="label-accordion">Support Ticket Files</span></button>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div ngbAccordionCollapse>\n\t\t\t\t\t\t<div ngbAccordionBody>\n\t\t\t\t\t\t\t<ng-template>\n\t\t\t\t\t\t\t\t<file-upload #fileUpload (fileAdded)="onFileAdded($event)" (fileRemoved)="onFilesRemoved($event)" [files]="files" [allowDelete]="true" [allowReplace]="true"></file-upload>\n\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class="row" style="padding-top: 15px">\n\t\t\t<responsive-button-group collapseSize="900">\n\t\t\t\t<button class="btn btn-warning" type="button" (click)="edit()">Edit Support Ticket</button>\n\t\t\t</responsive-button-group>\n\t\t</div>\n\t</div>\n}\n',styles:[".label-accordion{font-weight:700;color:#000;margin-bottom:0}.accordion{width:100%}dl{margin-bottom:0}.selected{background-color:#add8e6}\n"],dependencies:[{kind:"directive",type:i1$2.NgbAccordionButton,selector:"button[ngbAccordionButton]"},{kind:"directive",type:i1$2.NgbAccordionDirective,selector:"[ngbAccordion]",inputs:["animation","closeOthers","destroyOnHide"],outputs:["show","shown","hide","hidden"],exportAs:["ngbAccordion"]},{kind:"directive",type:i1$2.NgbAccordionItem,selector:"[ngbAccordionItem]",inputs:["ngbAccordionItem","destroyOnHide","disabled","collapsed"],outputs:["show","shown","hide","hidden"],exportAs:["ngbAccordionItem"]},{kind:"directive",type:i1$2.NgbAccordionHeader,selector:"[ngbAccordionHeader]"},{kind:"component",type:i1$2.NgbAccordionBody,selector:"[ngbAccordionBody]"},{kind:"directive",type:i1$2.NgbAccordionCollapse,selector:"[ngbAccordionCollapse]",exportAs:["ngbAccordionCollapse"]},{kind:"component",type:ResponsiveButtonGroupComponent,selector:"responsive-button-group",inputs:["collapseSize"]},{kind:"directive",type:i7.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]},{kind:"component",type:FileUploadComponent,selector:"file-upload",inputs:["files","allowDelete","allowReplace","showFileUpload","fileType"],outputs:["filesChanged","fileAdded","fileRemoved"]},{kind:"pipe",type:i7.DecimalPipe,name:"number"},{kind:"pipe",type:i7.DatePipe,name:"date"}]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SupportTicketDetailComponent,decorators:[{type:Component,args:[{selector:"resolveio-support-ticket-detail",providers:[ProviderService],standalone:!1,template:'<style>\n\t.label-accordion {\n\t\tfont-weight: bold;\n\t\tcolor: black;\n\t\tmargin-bottom: 0px;\n\t}\n\n\t.accordion {\n\t\twidth: 100%;\n\t}\n\n\tdl {\n\t\tmargin-bottom: 0px;\n\t}\n\n\t.selected {\n\t\tbackground-color: lightblue;\n\t}\n</style>\n\n@if (data) {\n\t<div class="col-lg-12">\n\t\t<div class="row">\n\t\t\t<div ngbAccordion #acc="ngbAccordion" activeIds="supportTicketInfo, supportTicketMessages, files">\n\t\t\t\t<div ngbAccordionItem id="supportTicketInfo">\n\t\t\t\t\t<div ngbAccordionHeader>\n\t\t\t\t\t\t<button ngbAccordionButton type="button"><span class="label-accordion">Support Ticket Info</span></button>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div ngbAccordionCollapse>\n\t\t\t\t\t\t<div ngbAccordionBody>\n\t\t\t\t\t\t\t<ng-template>\n\t\t\t\t\t\t\t\t<div class="card">\n\t\t\t\t\t\t\t\t\t<div class="card-header"><b>General Info</b></div>\n\t\t\t\t\t\t\t\t\t<div class="card-body">\n\t\t\t\t\t\t\t\t\t\t<div class="row">\n\t\t\t\t\t\t\t\t\t\t\t<div class="col-lg-4">\n\t\t\t\t\t\t\t\t\t\t\t\t<dl>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<dt>Support Ticket #</dt>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<dd>{{ data.support_ticket_number | number }}</dd>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<dt>Date Created</dt>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<dd>{{ data.date_created | date: \'short\' }}</dd>\n\t\t\t\t\t\t\t\t\t\t\t\t</dl>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t<div class="col-lg-4">\n\t\t\t\t\t\t\t\t\t\t\t\t<dl>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<dt>Type</dt>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<dd>{{ data.type }}</dd>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<dt>User</dt>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<dd>{{ data.user_created }}</dd>\n\t\t\t\t\t\t\t\t\t\t\t\t</dl>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t<div class="col-lg-4">\n\t\t\t\t\t\t\t\t\t\t\t\t<dl>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<dt>Status</dt>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<dd>{{ data.status }}</dd>\n\t\t\t\t\t\t\t\t\t\t\t\t</dl>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class="card">\n\t\t\t\t\t\t\t\t\t<div class="card-header"><b>Problem Description</b></div>\n\t\t\t\t\t\t\t\t\t<div class="card-body">\n\t\t\t\t\t\t\t\t\t\t<pre>{{ data.issue }}</pre>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t@if (data) {\n\t\t\t\t\t<div ngbAccordionItem id="supportTicketMessages">\n\t\t\t\t\t\t<div ngbAccordionHeader>\n\t\t\t\t\t\t\t<button ngbAccordionButton type="button"><span class="label-accordion">Messages</span></button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div ngbAccordionCollapse>\n\t\t\t\t\t\t\t<div ngbAccordionBody>\n\t\t\t\t\t\t\t\t<ng-template>\n\t\t\t\t\t\t\t\t\t<div class="row">\n\t\t\t\t\t\t\t\t\t\t<div class="col-lg-12">\n\t\t\t\t\t\t\t\t\t\t\t@for (message of data.messages; track message.message; let i = $index) {\n\t\t\t\t\t\t\t\t\t\t\t\t<div class="card">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div class="card-header">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<b>User: {{ message.user }} - Date: {{ message.date | date: \'short\' }}</b>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div class="card-body" [ngClass]="[message.type === \'ResolveIO\' ? \'selected\' : \'\']">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class="row" style="width: 100%">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class="col-lg-10">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<pre>{{ message.message }}</pre>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class="col-lg-2">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<responsive-button-group collapseSize="900">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t@if (isMyMessage(message)) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<button type="button" class="btn btn-warning" (click)="editMessage(i)">Edit</button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t@if (isMyMessage(message)) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<button type="button" class="btn btn-danger" (click)="deleteMessage(i)">Delete</button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</responsive-button-group>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<div class="row" style="margin-top: 10px">\n\t\t\t\t\t\t\t\t\t\t<div class="col-lg-12">\n\t\t\t\t\t\t\t\t\t\t\t<button type="button" class="btn btn-success" (click)="newMessage()">New Message</button>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t\t<div ngbAccordionItem id="files">\n\t\t\t\t\t<div ngbAccordionHeader>\n\t\t\t\t\t\t<button ngbAccordionButton type="button"><span class="label-accordion">Support Ticket Files</span></button>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div ngbAccordionCollapse>\n\t\t\t\t\t\t<div ngbAccordionBody>\n\t\t\t\t\t\t\t<ng-template>\n\t\t\t\t\t\t\t\t<file-upload #fileUpload (fileAdded)="onFileAdded($event)" (fileRemoved)="onFilesRemoved($event)" [files]="files" [allowDelete]="true" [allowReplace]="true"></file-upload>\n\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class="row" style="padding-top: 15px">\n\t\t\t<responsive-button-group collapseSize="900">\n\t\t\t\t<button class="btn btn-warning" type="button" (click)="edit()">Edit Support Ticket</button>\n\t\t\t</responsive-button-group>\n\t\t</div>\n\t</div>\n}\n'}]}],ctorParameters:()=>[{type:i1$1.ActivatedRoute},{type:SupportTicketService},{type:ProviderService},{type:DialogService}],propDecorators:{fileUpload:[{type:ViewChild,args:["fileUpload",{static:!0}]}]}});class SupportTicketEditComponent extends BaseComponent{_route;_sts;_services;_ds;fileUpload;selectType;id;data;subscription$=[];form;disableFormButton=!1;constructor(t,e,n,o){super(n),this._route=t,this._sts=e,this._services=n,this._ds=o}ngOnInit(){this.id=this._route.snapshot.params.id,this._sts.setSelectedSupportTicket(this.id.toString()),this.form=this._services._fb.group({_id:[""],__v:[0],type:["",[Validators.required]],priority:["",[Validators.required]],issue:["",[Validators.required]],support_ticket_number:[null],support_ticket_number_string:[null],status:["Opened"],substatus:["New"],client:[""],id_client:["",[Validators.required]],messages:[[]],date_created:[null],date_created_string:[""],id_user_created:[this._services._account.getUser()._id],user_created:[this._services._account.getUser().fullname],billable:[!1,[Validators.required]],date_investigation:[null],date_closed:[null],files:[[]],current_watchers:[[]],client_user:[null],users_assigned:[[]],bill_description:[""],tasks:[[]],notes:[[]],difficulty:[1]}),this._services._socket.call("supportGetSupportTicketWithId",this.id,(t,e)=>{if(!e)return this._services._router.navigateByUrl("/support-ticket/list"),void this._ds.error("Could not find support ticket");this.data=e,this.loadForm()})}ngOnDestroy(){this.subscription$.forEach(t=>{t.unsubscribe()})}loadForm(){this.form.patchValue(this.data)}onTypeChange(){"System Impairment"===this.form.controls.type.value?(this.form.controls.priority.setValue("High"),this.form.controls.billable.setValue(!1)):"Request New Feature"===this.form.controls.type.value||"General Inquery"===this.form.controls.type.value?(this.form.controls.priority.setValue("Low"),this.form.controls.billable.setValue(!0)):(this.form.controls.priority.setValue(""),this.form.controls.billable.setValue(!1))}submitForm(t){this.disableFormButton=!0,this._services._socket.call("supportUpdateSupportTicket",this.form.value,(t,e)=>{e?(this._services._alert.setAlert("info","Editing support ticket, please wait"),this._services._router.navigateByUrl("/support-ticket/detail/"+this.id)):(this._ds.error("Could not edit support ticket"),this._services._socket.call("insertErrorLog","Support-ticket-edit - update support ticket",[this.form.value,t]))})}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SupportTicketEditComponent,deps:[{token:i1$1.ActivatedRoute},{token:SupportTicketService},{token:ProviderService},{token:DialogService}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"21.0.1",type:SupportTicketEditComponent,isStandalone:!1,selector:"resolveio-support-ticket-edit",providers:[ProviderService],viewQueries:[{propertyName:"fileUpload",first:!0,predicate:["fileUpload"],descendants:!0,static:!0},{propertyName:"selectType",first:!0,predicate:["selectType"],descendants:!0,static:!0}],usesInheritance:!0,ngImport:i0,template:'<style>\n\t.label-accordion {\n\t\tfont-weight: bold;\n\t\tcolor: black;\n\t\tmargin-bottom: 0px;\n\t}\n</style>\n\n<div class="col-lg-12">\n\t<form [formGroup]="form" novalidate (ngSubmit)="submitForm(form)">\n\t\t<div class="row">\n\t\t\t<div ngbAccordion #acc="ngbAccordion" activeIds="supportTicketInfo">\n\t\t\t\t<div ngbAccordionItem id="supportTicketInfo">\n\t\t\t\t\t<div ngbAccordionHeader>\n\t\t\t\t\t\t<button ngbAccordionButton type="button"><span class="label-accordion">Support Ticket Info</span></button>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div ngbAccordionCollapse>\n\t\t\t\t\t\t<div ngbAccordionBody>\n\t\t\t\t\t\t\t<ng-template>\n\t\t\t\t\t\t\t\t<div class="row">\n\t\t\t\t\t\t\t\t\t<div class="col-12">\n\t\t\t\t\t\t\t\t\t\t<div class="form-group">\n\t\t\t\t\t\t\t\t\t\t\t<label class="form-control-label">Support Ticket Type</label>\n\t\t\t\t\t\t\t\t\t\t\t@if (!form.controls.type.valid) {\n\t\t\t\t\t\t\t\t\t\t\t\t<em>- Required</em>\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t<select [ngClass]="[\'form-control\', form.controls.type.valid ? \'is-valid\' : \'is-invalid\']" formControlName="type" (change)="onTypeChange()">\n\t\t\t\t\t\t\t\t\t\t\t\t<option value="">Select Type</option>\n\t\t\t\t\t\t\t\t\t\t\t\t<option value="General Inquery">General Inquery</option>\n\t\t\t\t\t\t\t\t\t\t\t\t<option value="System Impairment">System Impairment</option>\n\t\t\t\t\t\t\t\t\t\t\t\t<option value="Request New Feature">Request New Feature</option>\n\t\t\t\t\t\t\t\t\t\t\t</select>\n\t\t\t\t\t\t\t\t\t\t\t@if (!form.controls.type.valid) {\n\t\t\t\t\t\t\t\t\t\t\t\t<div class="invalid-feedback">Type is required</div>\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class="row">\n\t\t\t\t\t\t\t\t\t<div class="col-lg-12">\n\t\t\t\t\t\t\t\t\t\t<div class="form-group">\n\t\t\t\t\t\t\t\t\t\t\t<label class="form-control-label">Problem Description</label>\n\t\t\t\t\t\t\t\t\t\t\t@if (!form.controls.issue.valid) {\n\t\t\t\t\t\t\t\t\t\t\t\t<em>- Required</em>\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t<textarea formControlName="issue" [ngClass]="[\'form-control\', form.controls.issue.valid ? \'is-valid\' : \'is-invalid\']" [rows]="5" style="overflow-x: hidden"></textarea>\n\t\t\t\t\t\t\t\t\t\t\t@if (!form.controls.issue.valid) {\n\t\t\t\t\t\t\t\t\t\t\t\t<div class="invalid-feedback">Problem Description is required</div>\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class="row" style="padding-top: 15px">\n\t\t\t<form-button [form]="form" [disabled]="disableFormButton"></form-button>\n\t\t</div>\n\t</form>\n</div>\n',styles:[".label-accordion{font-weight:700;color:#000;margin-bottom:0}\n"],dependencies:[{kind:"directive",type:i2.ɵNgNoValidate,selector:"form:not([ngNoForm]):not([ngNativeValidate])"},{kind:"directive",type:i2.NgSelectOption,selector:"option",inputs:["ngValue","value"]},{kind:"directive",type:i2.ɵNgSelectMultipleOption,selector:"option",inputs:["ngValue","value"]},{kind:"directive",type:i2.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:i2.SelectControlValueAccessor,selector:"select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]",inputs:["compareWith"]},{kind:"directive",type:i2.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:i2.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:i2.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:i2.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:i1$2.NgbAccordionButton,selector:"button[ngbAccordionButton]"},{kind:"directive",type:i1$2.NgbAccordionDirective,selector:"[ngbAccordion]",inputs:["animation","closeOthers","destroyOnHide"],outputs:["show","shown","hide","hidden"],exportAs:["ngbAccordion"]},{kind:"directive",type:i1$2.NgbAccordionItem,selector:"[ngbAccordionItem]",inputs:["ngbAccordionItem","destroyOnHide","disabled","collapsed"],outputs:["show","shown","hide","hidden"],exportAs:["ngbAccordionItem"]},{kind:"directive",type:i1$2.NgbAccordionHeader,selector:"[ngbAccordionHeader]"},{kind:"component",type:i1$2.NgbAccordionBody,selector:"[ngbAccordionBody]"},{kind:"directive",type:i1$2.NgbAccordionCollapse,selector:"[ngbAccordionCollapse]",exportAs:["ngbAccordionCollapse"]},{kind:"component",type:FormButtonComponent,selector:"form-button",inputs:["form","disabled","type"]},{kind:"directive",type:i7.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]}]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SupportTicketEditComponent,decorators:[{type:Component,args:[{selector:"resolveio-support-ticket-edit",providers:[ProviderService],standalone:!1,template:'<style>\n\t.label-accordion {\n\t\tfont-weight: bold;\n\t\tcolor: black;\n\t\tmargin-bottom: 0px;\n\t}\n</style>\n\n<div class="col-lg-12">\n\t<form [formGroup]="form" novalidate (ngSubmit)="submitForm(form)">\n\t\t<div class="row">\n\t\t\t<div ngbAccordion #acc="ngbAccordion" activeIds="supportTicketInfo">\n\t\t\t\t<div ngbAccordionItem id="supportTicketInfo">\n\t\t\t\t\t<div ngbAccordionHeader>\n\t\t\t\t\t\t<button ngbAccordionButton type="button"><span class="label-accordion">Support Ticket Info</span></button>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div ngbAccordionCollapse>\n\t\t\t\t\t\t<div ngbAccordionBody>\n\t\t\t\t\t\t\t<ng-template>\n\t\t\t\t\t\t\t\t<div class="row">\n\t\t\t\t\t\t\t\t\t<div class="col-12">\n\t\t\t\t\t\t\t\t\t\t<div class="form-group">\n\t\t\t\t\t\t\t\t\t\t\t<label class="form-control-label">Support Ticket Type</label>\n\t\t\t\t\t\t\t\t\t\t\t@if (!form.controls.type.valid) {\n\t\t\t\t\t\t\t\t\t\t\t\t<em>- Required</em>\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t<select [ngClass]="[\'form-control\', form.controls.type.valid ? \'is-valid\' : \'is-invalid\']" formControlName="type" (change)="onTypeChange()">\n\t\t\t\t\t\t\t\t\t\t\t\t<option value="">Select Type</option>\n\t\t\t\t\t\t\t\t\t\t\t\t<option value="General Inquery">General Inquery</option>\n\t\t\t\t\t\t\t\t\t\t\t\t<option value="System Impairment">System Impairment</option>\n\t\t\t\t\t\t\t\t\t\t\t\t<option value="Request New Feature">Request New Feature</option>\n\t\t\t\t\t\t\t\t\t\t\t</select>\n\t\t\t\t\t\t\t\t\t\t\t@if (!form.controls.type.valid) {\n\t\t\t\t\t\t\t\t\t\t\t\t<div class="invalid-feedback">Type is required</div>\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class="row">\n\t\t\t\t\t\t\t\t\t<div class="col-lg-12">\n\t\t\t\t\t\t\t\t\t\t<div class="form-group">\n\t\t\t\t\t\t\t\t\t\t\t<label class="form-control-label">Problem Description</label>\n\t\t\t\t\t\t\t\t\t\t\t@if (!form.controls.issue.valid) {\n\t\t\t\t\t\t\t\t\t\t\t\t<em>- Required</em>\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t<textarea formControlName="issue" [ngClass]="[\'form-control\', form.controls.issue.valid ? \'is-valid\' : \'is-invalid\']" [rows]="5" style="overflow-x: hidden"></textarea>\n\t\t\t\t\t\t\t\t\t\t\t@if (!form.controls.issue.valid) {\n\t\t\t\t\t\t\t\t\t\t\t\t<div class="invalid-feedback">Problem Description is required</div>\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class="row" style="padding-top: 15px">\n\t\t\t<form-button [form]="form" [disabled]="disableFormButton"></form-button>\n\t\t</div>\n\t</form>\n</div>\n'}]}],ctorParameters:()=>[{type:i1$1.ActivatedRoute},{type:SupportTicketService},{type:ProviderService},{type:DialogService}],propDecorators:{fileUpload:[{type:ViewChild,args:["fileUpload",{static:!0}]}],selectType:[{type:ViewChild,args:["selectType",{static:!0}]}]}});const routes=[{path:"",component:SupportTicketComponent,children:[{path:"list",component:SupportTicketListComponent},{path:"new",component:SupportTicketNewComponent},{path:"detail/:id",component:SupportTicketDetailComponent},{path:"edit/:id",component:SupportTicketEditComponent},{path:"**",redirectTo:"list"}]}],SupportTicketRouting=RouterModule.forChild(routes);class SupportTicketModule{static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SupportTicketModule,deps:[],target:i0.ɵɵFactoryTarget.NgModule});static"ɵmod"=i0.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"21.0.1",ngImport:i0,type:SupportTicketModule,declarations:[SupportTicketComponent,SupportTicketListComponent,SupportTicketNewComponent,SupportTicketDetailComponent,SupportTicketEditComponent],imports:[SharedModule,i1$1.RouterModule,DatatableModule,FileModule,NgbAccordionModule]});static"ɵinj"=i0.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SupportTicketModule,providers:[SupportTicketService],imports:[SharedModule,SupportTicketRouting,DatatableModule,FileModule,NgbAccordionModule]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SupportTicketModule,decorators:[{type:NgModule,args:[{imports:[SharedModule,SupportTicketRouting,DatatableModule,FileModule,NgbAccordionModule],declarations:[SupportTicketComponent,SupportTicketListComponent,SupportTicketNewComponent,SupportTicketDetailComponent,SupportTicketEditComponent],providers:[SupportTicketService]}]}]});let typeCache={};function type(t){if(typeCache[t])throw new Error(`Action type "${t}" is not unqiue"`);return typeCache[t]=!0,t}const CSV_EOL="\r\n",CSV_BOM="\ufeff",CSV_DEFAULTS={filename:"export",fieldSeparator:",",quoteStrings:'"',decimalseparator:".",showLabels:!1,showTitle:!1,title:"My Report",useBom:!0,headers:[]};function exportCsv(t,e,n){const o=Array.isArray(t)?t:tryParse(t);if(!Array.isArray(o)||!o.length)return void console.log("Invalid data");const r={...CSV_DEFAULTS,...n};e&&(r.filename=e);const i=normalizeData(o,r);i.title&&!r.showTitle&&(r.showTitle=!0,r.title||(r.title=i.title));let a="";r.useBom&&(a+="\ufeff"),r.showTitle&&r.title&&(a+=`${r.title}\r\n\r\n`);const s=resolveHeaders(r,i.data),l=stripHeaderRow(i.data,s,r),c=resolveRowKeys(l,s);s.length&&(a+=`${s.join(r.fieldSeparator)}\r\n`),l.forEach(t=>{a+=`${resolveRow(t,c,r)}\r\n`});const d=new Blob([a],{type:"text/csv;charset=utf-8;"}),p=`${(r.filename||CSV_DEFAULTS.filename).replace(/ /g,"_")}.csv`;if(navigator.msSaveBlob)navigator.msSaveBlob(d,p);else{const t=document.createElement("a");t.href=URL.createObjectURL(d),t.setAttribute("visibility","hidden"),t.download=p,document.body.appendChild(t),t.click(),document.body.removeChild(t)}}function resolveHeaders(t,e){return t.headers&&t.headers.length?t.headers:t.showLabels&&e.length&&!Array.isArray(e[0])&&"object"==typeof e[0]?collectKeysInOrder(e):[]}function resolveRowKeys(t,e){return e.length?e:!t.length||Array.isArray(t[0])||"object"!=typeof t[0]?[]:Object.keys(t[0])}function resolveRow(t,e,n){return Array.isArray(t)?t.map(t=>formatValue(t,n)).join(n.fieldSeparator):e.length?e.map(e=>formatValue(t[e],n)).join(n.fieldSeparator):Object.keys(t).map(e=>formatValue(t[e],n)).join(n.fieldSeparator)}function formatValue(t,e){if("locale"===e.decimalseparator&&isFloat(t))return t.toLocaleString();if("."!==e.decimalseparator&&isFloat(t))return t.toString().replace(".",e.decimalseparator);if("string"==typeof t){let n=t.replace(/"/g,'""');return(e.quoteStrings||t.indexOf(",")>-1||t.indexOf("\n")>-1||t.indexOf("\r")>-1)&&(n=`${e.quoteStrings}${n}${e.quoteStrings}`),n}return"boolean"==typeof t?t?"TRUE":"FALSE":null==t?"":t}function normalizeData(t,e){if(!e.showLabels||!t.length||Array.isArray(t[0])||"object"!=typeof t[0])return{data:t};const[n,...o]=t;if(isTitleRow(n)){const t=Object.keys(n);return{data:o,title:String(n[t[0]])}}return{data:t}}function stripHeaderRow(t,e,n){if(!n.showLabels||!e.length||!t.length)return t;const[o,...r]=t;return isHeaderValueRow(o,e)?r:t}function collectKeysInOrder(t){const e=[];return t.forEach(t=>{Array.isArray(t)||"object"!=typeof t||Object.keys(t).forEach(t=>{-1===e.indexOf(t)&&e.push(t)})}),e}function isHeaderValueRow(t,e){return!(Array.isArray(t)||"object"!=typeof t||!e.length)&&e.every(e=>t[e]===e)}function isTitleRow(t){if(Array.isArray(t)||"object"!=typeof t||null===t)return!1;const e=Object.keys(t);if(1!==e.length)return!1;const n=t[e[0]];return"string"==typeof n&&n===e[0]}function tryParse(t){try{return JSON.parse(t)}catch(t){return console.log("Invalid CSV data",t),[]}}function isFloat(t){return+t===t&&(!isFinite(t)||Boolean(t%1))}class DateShortcutComponent extends BaseComponent{_services;_cd;startDateObj;endDateObj;startDateObjForm;endDateObjForm;startDateObjChange=new EventEmitter;endDateObjChange=new EventEmitter;startDateObjFormChange=new EventEmitter;endDateObjFormChange=new EventEmitter;datesChanged=new EventEmitter;shortcutValue=null;shortcutValueChange=new EventEmitter;constructor(t,e){super(t),this._services=t,this._cd=e}ngOnInit(){this.onSelectShortcut()}reset(){this.shortcutValue=null,this.shortcutValueChange.emit(this.shortcutValue),this._cd.detectChanges()}onSelectShortcut(){if(this.shortcutValue){if(this.startDateObj&&this.endDateObj){let t=moment$1(new Date(this.startDateObj.year,this.startDateObj.month-1,this.startDateObj.day)).toDate(),e=moment$1(new Date(this.endDateObj.year,this.endDateObj.month-1,this.endDateObj.day)).toDate();"Q1"===this.shortcutValue?(t=moment$1().startOf("year").toDate(),e=moment$1().startOf("year").quarter(2).subtract(1,"days").toDate()):"Q2"===this.shortcutValue?(t=moment$1().startOf("year").quarter(2).toDate(),e=moment$1().startOf("year").quarter(3).subtract(1,"days").toDate()):"Q3"===this.shortcutValue?(t=moment$1().startOf("year").quarter(3).toDate(),e=moment$1().startOf("year").quarter(4).subtract(1,"days").toDate()):"Q4"===this.shortcutValue?(t=moment$1().startOf("year").quarter(4).toDate(),e=moment$1().endOf("year").toDate()):"Last Q1"===this.shortcutValue?(t=moment$1().startOf("year").subtract(1,"year").toDate(),e=moment$1().startOf("year").subtract(1,"year").quarter(2).subtract(1,"days").toDate()):"Last Q2"===this.shortcutValue?(t=moment$1().startOf("year").subtract(1,"year").quarter(2).toDate(),e=moment$1().startOf("year").subtract(1,"year").quarter(3).subtract(1,"days").toDate()):"Last Q3"===this.shortcutValue?(t=moment$1().startOf("year").subtract(1,"year").quarter(3).toDate(),e=moment$1().startOf("year").subtract(1,"year").quarter(4).subtract(1,"days").toDate()):"Last Q4"===this.shortcutValue?(t=moment$1().startOf("year").subtract(1,"year").quarter(4).toDate(),e=moment$1().endOf("year").subtract(1,"year").toDate()):"Today"===this.shortcutValue?(t=moment$1().startOf("day").toDate(),e=new Date):"Yesterday"===this.shortcutValue?(t=moment$1().subtract(1,"days").startOf("day").toDate(),e=moment$1().subtract(1,"days").endOf("day").toDate()):"Week"===this.shortcutValue?(t=moment$1().startOf("isoWeek").toDate(),e=new Date):"Last Week"===this.shortcutValue?(e=moment$1().startOf("isoWeek").subtract(1,"days").toDate(),t=moment$1(e).startOf("isoWeek").toDate()):"Month"===this.shortcutValue?(t=moment$1().startOf("month").toDate(),e=new Date):"Last Month"===this.shortcutValue?(e=moment$1().startOf("month").subtract(1,"days").endOf("day").toDate(),t=moment$1(e).startOf("month").toDate()):"Last 30 Days"===this.shortcutValue?(e=new Date,t=moment$1().subtract(30,"days").startOf("day").toDate()):"Quarter"===this.shortcutValue?(t=moment$1().startOf("year").quarter(moment$1().quarter()).toDate(),e=new Date):"Last Quarter"===this.shortcutValue?(e=moment$1().startOf("year").quarter(moment$1().quarter()).subtract(1,"days").endOf("day").toDate(),t=moment$1(e).startOf("quarter").toDate()):"Year"===this.shortcutValue?(t=moment$1().startOf("year").toDate(),e=new Date):"Last Year"===this.shortcutValue?(e=moment$1().startOf("year").subtract(1,"days").endOf("day").toDate(),t=moment$1(e).startOf("year").toDate()):"All"===this.shortcutValue&&(t=new Date(2017,0,1,0,0,0,0),e=new Date),this.startDateObj={year:t.getFullYear(),month:t.getMonth()+1,day:t.getDate()},this.endDateObj={year:e.getFullYear(),month:e.getMonth()+1,day:e.getDate()},this.startDateObjChange.emit(this.startDateObj),this.endDateObjChange.emit(this.endDateObj),this.datesChanged.emit([this.startDateObj,this.endDateObj])}else if(this.startDateObjForm&&this.endDateObjForm){let t=moment$1(new Date(this.startDateObjForm.value.year,this.startDateObjForm.value.month-1,this.startDateObjForm.value.day)).toDate(),e=moment$1(new Date(this.endDateObjForm.value.year,this.endDateObjForm.value.month-1,this.endDateObjForm.value.day)).toDate();"Q1"===this.shortcutValue?(t=moment$1().startOf("year").toDate(),e=moment$1().startOf("year").quarter(2).subtract(1,"days").toDate()):"Q2"===this.shortcutValue?(t=moment$1().startOf("year").quarter(2).toDate(),e=moment$1().startOf("year").quarter(3).subtract(1,"days").toDate()):"Q3"===this.shortcutValue?(t=moment$1().startOf("year").quarter(3).toDate(),e=moment$1().startOf("year").quarter(4).subtract(1,"days").toDate()):"Q4"===this.shortcutValue?(t=moment$1().startOf("year").quarter(4).toDate(),e=moment$1().endOf("year").toDate()):"Last Q1"===this.shortcutValue?(t=moment$1().startOf("year").subtract(1,"year").toDate(),e=moment$1().startOf("year").subtract(1,"year").quarter(2).subtract(1,"days").toDate()):"Last Q2"===this.shortcutValue?(t=moment$1().startOf("year").subtract(1,"year").quarter(2).toDate(),e=moment$1().startOf("year").subtract(1,"year").quarter(3).subtract(1,"days").toDate()):"Last Q3"===this.shortcutValue?(t=moment$1().startOf("year").subtract(1,"year").quarter(3).toDate(),e=moment$1().startOf("year").subtract(1,"year").quarter(4).subtract(1,"days").toDate()):"Last Q4"===this.shortcutValue?(t=moment$1().startOf("year").subtract(1,"year").quarter(4).toDate(),e=moment$1().endOf("year").subtract(1,"year").toDate()):"Today"===this.shortcutValue?(t=moment$1().startOf("day").toDate(),e=new Date):"Yesterday"===this.shortcutValue?(t=moment$1().subtract(1,"days").startOf("day").toDate(),e=moment$1().subtract(1,"days").endOf("day").toDate()):"Week"===this.shortcutValue?(t=moment$1().startOf("isoWeek").toDate(),e=new Date):"Last Week"===this.shortcutValue?(e=moment$1().startOf("isoWeek").subtract(1,"days").toDate(),t=moment$1(e).startOf("isoWeek").toDate()):"Month"===this.shortcutValue?(t=moment$1().startOf("month").toDate(),e=new Date):"Last Month"===this.shortcutValue?(e=moment$1().startOf("month").subtract(1,"days").endOf("day").toDate(),t=moment$1(e).startOf("month").toDate()):"Last 30 Days"===this.shortcutValue?(e=new Date,t=moment$1().subtract(30,"days").startOf("day").toDate()):"Quarter"===this.shortcutValue?(t=moment$1().startOf("year").quarter(moment$1().quarter()).toDate(),e=new Date):"Last Quarter"===this.shortcutValue?(e=moment$1().startOf("year").quarter(moment$1().quarter()).subtract(1,"days").endOf("day").toDate(),t=moment$1(e).startOf("quarter").toDate()):"Year"===this.shortcutValue?(t=moment$1().startOf("year").toDate(),e=new Date):"Last Year"===this.shortcutValue?(e=moment$1().startOf("year").subtract(1,"days").endOf("day").toDate(),t=moment$1(e).startOf("year").toDate()):"All"===this.shortcutValue&&(t=new Date(2017,0,1,0,0,0,0),e=new Date),this.startDateObjForm.setValue({year:t.getFullYear(),month:t.getMonth()+1,day:t.getDate()}),this.endDateObjForm.setValue({year:e.getFullYear(),month:e.getMonth()+1,day:e.getDate()}),this.startDateObjFormChange.emit(this.startDateObjForm),this.endDateObjFormChange.emit(this.endDateObjForm),this.datesChanged.emit([this.startDateObjForm,this.endDateObjForm])}this.shortcutValueChange.emit(this.shortcutValue)}this._cd.detectChanges()}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DateShortcutComponent,deps:[{token:ProviderService},{token:i0.ChangeDetectorRef}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"21.0.1",type:DateShortcutComponent,isStandalone:!1,selector:"date-shortcut",inputs:{startDateObj:"startDateObj",endDateObj:"endDateObj",startDateObjForm:"startDateObjForm",endDateObjForm:"endDateObjForm",shortcutValue:"shortcutValue"},outputs:{startDateObjChange:"startDateObjChange",endDateObjChange:"endDateObjChange",startDateObjFormChange:"startDateObjFormChange",endDateObjFormChange:"endDateObjFormChange",datesChanged:"datesChanged",shortcutValueChange:"shortcutValueChange"},providers:[ProviderService],usesInheritance:!0,ngImport:i0,template:'\n\t\t<label class="form-control-label">Date Shortcuts</label>\n\t\t<ng-select [(ngModel)]="shortcutValue" (change)="onSelectShortcut()" placeholder="Select Shortcut" [clearable]="false">\n\t\t\t<ng-option value="Today">Today</ng-option>\n\t\t\t<ng-option value="Yesterday">Yesterday</ng-option>\n\t\t\t<ng-option value="Week">This Week</ng-option>\n\t\t\t<ng-option value="Last Week">Last Week</ng-option>\n\t\t\t<ng-option value="Month">This Month</ng-option>\n\t\t\t<ng-option value="Last Month">Last Month</ng-option>\n\t\t\t<ng-option value="Last 30 Days">Last 30 Days</ng-option>\n\t\t\t<ng-option value="Quarter">This Quarter</ng-option>\n\t\t\t<ng-option value="Last Quarter">Last Quarter</ng-option>\n\t\t\t<ng-option value="Year">This Year</ng-option>\n\t\t\t<ng-option value="Last Year">Last Year</ng-option>\n\t\t\t<ng-option value="Q1">Q1</ng-option>\n\t\t\t<ng-option value="Q2">Q2</ng-option>\n\t\t\t<ng-option value="Q3">Q3</ng-option>\n\t\t\t<ng-option value="Q4">Q4</ng-option>\n\t\t\t<ng-option value="Last Q1">Last Q1</ng-option>\n\t\t\t<ng-option value="Last Q2">Last Q2</ng-option>\n\t\t\t<ng-option value="Last Q3">Last Q3</ng-option>\n\t\t\t<ng-option value="Last Q4">Last Q4</ng-option>\n\t\t\t<ng-option value="All">All</ng-option>\n\t\t</ng-select>\n\t',isInline:!0,dependencies:[{kind:"directive",type:i2.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:i2.NgModel,selector:"[ngModel]:not([formControlName]):not([formControl])",inputs:["name","disabled","ngModel","ngModelOptions"],outputs:["ngModelChange"],exportAs:["ngModel"]},{kind:"component",type:i5.NgSelectComponent,selector:"ng-select",inputs:["placeholder","multiple","panelMaxHeight","panelMaxViewportRatio","optionHeight","virtualBuffer","overlayZIndex","autoSizePanel","panelPosition","autoCenterPanel","viewportMargin","panelWidth","panelFullscreenWidth","clearable","templateLabelFromView","searchable","searchMatchMode","textWrap","compareWith","options","optionLabelKey","optionLabelFn","optionValueKey","optionDisabledKey","optionIdKey","optionGroupKey","disabled","emitOptionObject","debugLog","stickyKey","stickyAutoSave"],outputs:["change"]},{kind:"component",type:i5.NgOptionComponent,selector:"ng-option",inputs:["value","disabled","label","id"]}],changeDetection:i0.ChangeDetectionStrategy.OnPush})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DateShortcutComponent,decorators:[{type:Component,args:[{providers:[ProviderService],selector:"date-shortcut",template:'\n\t\t<label class="form-control-label">Date Shortcuts</label>\n\t\t<ng-select [(ngModel)]="shortcutValue" (change)="onSelectShortcut()" placeholder="Select Shortcut" [clearable]="false">\n\t\t\t<ng-option value="Today">Today</ng-option>\n\t\t\t<ng-option value="Yesterday">Yesterday</ng-option>\n\t\t\t<ng-option value="Week">This Week</ng-option>\n\t\t\t<ng-option value="Last Week">Last Week</ng-option>\n\t\t\t<ng-option value="Month">This Month</ng-option>\n\t\t\t<ng-option value="Last Month">Last Month</ng-option>\n\t\t\t<ng-option value="Last 30 Days">Last 30 Days</ng-option>\n\t\t\t<ng-option value="Quarter">This Quarter</ng-option>\n\t\t\t<ng-option value="Last Quarter">Last Quarter</ng-option>\n\t\t\t<ng-option value="Year">This Year</ng-option>\n\t\t\t<ng-option value="Last Year">Last Year</ng-option>\n\t\t\t<ng-option value="Q1">Q1</ng-option>\n\t\t\t<ng-option value="Q2">Q2</ng-option>\n\t\t\t<ng-option value="Q3">Q3</ng-option>\n\t\t\t<ng-option value="Q4">Q4</ng-option>\n\t\t\t<ng-option value="Last Q1">Last Q1</ng-option>\n\t\t\t<ng-option value="Last Q2">Last Q2</ng-option>\n\t\t\t<ng-option value="Last Q3">Last Q3</ng-option>\n\t\t\t<ng-option value="Last Q4">Last Q4</ng-option>\n\t\t\t<ng-option value="All">All</ng-option>\n\t\t</ng-select>\n\t',changeDetection:ChangeDetectionStrategy.OnPush,standalone:!1}]}],ctorParameters:()=>[{type:ProviderService},{type:i0.ChangeDetectorRef}],propDecorators:{startDateObj:[{type:Input}],endDateObj:[{type:Input}],startDateObjForm:[{type:Input}],endDateObjForm:[{type:Input}],startDateObjChange:[{type:Output}],endDateObjChange:[{type:Output}],startDateObjFormChange:[{type:Output}],endDateObjFormChange:[{type:Output}],datesChanged:[{type:Output}],shortcutValue:[{type:Input}],shortcutValueChange:[{type:Output}]}});class DateShortcutModule{static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DateShortcutModule,deps:[],target:i0.ɵɵFactoryTarget.NgModule});static"ɵmod"=i0.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"21.0.1",ngImport:i0,type:DateShortcutModule,declarations:[DateShortcutComponent],imports:[FormsModule,CommonModule,NgSelectModule],exports:[DateShortcutComponent]});static"ɵinj"=i0.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DateShortcutModule,imports:[FormsModule,CommonModule,NgSelectModule]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DateShortcutModule,decorators:[{type:NgModule,args:[{imports:[FormsModule,CommonModule,NgSelectModule],exports:[DateShortcutComponent],declarations:[DateShortcutComponent]}]}]});class SchedulerComponent extends BaseComponent{_services;today=new Date;over_forward=!1;over_backwards=!1;mouseDown=!1;mouseLastEvent=null;timer_sub=null;months=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];size_svg={width:0,height:0};size_cell={width:30,height:30};svgChart;constructor(t){super(t),this._services=t}ngAfterViewInit(){this.size_svg.width=this.svgChart.nativeElement.clientWidth,this.size_svg.height=this.svgChart.nativeElement.clientHeight}ngOnDestroy(){this.timer_sub&&clearInterval(this.timer_sub)}onMouseup(){this.mouseDown=!1}onMousedown(t){this.mouseDown=!0,this.mouseLastEvent=t}onMousemove(t){if(this.mouseDown){let e=0;this.mouseLastEvent.clientX-t.clientX>1?e=Math.floor((this.mouseLastEvent.clientX-t.clientX)/15)>0?Math.floor((this.mouseLastEvent.clientX-t.clientX+5*(30-this.size_cell.width))/20):1:this.mouseLastEvent.clientX-t.clientX<-1&&(e=Math.floor((this.mouseLastEvent.clientX-t.clientX)/15)<0?Math.floor((this.mouseLastEvent.clientX-t.clientX-5*(30-this.size_cell.width))/20):-1),this.today=moment$1(this.today).add(e,"days").toDate(),this.mouseLastEvent=t}}onMouseLeave(t){this.mouseDown&&(this.mouseDown=!1)}buildDays(){let t=[];for(let e=0;e<Math.floor(this.size_svg.width/this.size_cell.width);e++)t.push({index:e,day:moment$1(this.today).add(e,"days").toDate().getDate()});return t}buildMonths(){let t=[{index_start:0,index_end:null,month:this.months[this.today.getMonth()]}];for(let e=1;e<Math.floor(this.size_svg.width/this.size_cell.width);e++)moment$1(this.today).add(e,"days").toDate().getMonth()!==moment$1(this.today).add(e-1,"days").toDate().getMonth()&&(t[t.length-1].index_end=e,t.push({index_start:e,index_end:null,month:this.months[moment$1(this.today).add(e,"days").toDate().getMonth()]}));return t[t.length-1].index_end=Math.floor(this.size_svg.width/this.size_cell.width),t}buildYears(){let t=[{index_start:0,index_end:null,year:this.today.getFullYear()}];for(let e=1;e<Math.floor(this.size_svg.width/this.size_cell.width);e++)moment$1(this.today).add(e,"days").toDate().getFullYear()!==moment$1(this.today).add(e-1,"days").toDate().getFullYear()&&(t[t.length-1].index_end=e,t.push({index_start:e,index_end:null,year:moment$1(this.today).add(e,"days").toDate().getFullYear()}));return t[t.length-1].index_end=Math.floor(this.size_svg.width/this.size_cell.width),t}decrementToday(){this.today=moment$1(this.today).subtract(1,"days").toDate()}incrementToday(){this.today=moment$1(this.today).add(1,"days").toDate()}overForward(){this.timer_sub=setInterval(()=>{this.incrementToday()},50)}leftForward(){clearInterval(this.timer_sub)}overBackwards(){this.timer_sub=setInterval(()=>{this.decrementToday()},50)}leftBackwards(){clearInterval(this.timer_sub)}zoomOut(){this.size_cell.width>10&&(this.size_cell.width-=10)}zoomIn(){this.size_cell.width+=10}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SchedulerComponent,deps:[{token:ProviderService}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"21.0.1",type:SchedulerComponent,isStandalone:!1,selector:"scheduler",host:{listeners:{mouseup:"onMouseup()",mousedown:"onMousedown($event)",mousemove:"onMousemove($event)",mouseleave:"onMouseLeave($event)"}},providers:[ProviderService],viewQueries:[{propertyName:"svgChart",first:!0,predicate:["svgChart"],descendants:!0,static:!0}],usesInheritance:!0,ngImport:i0,template:'<style>\n\t.bar {\n\t\tfill: red; /* changes the background */\n\t\theight: 21px;\n\t\ttransition: fill 0.3s ease;\n\t\tcursor: pointer;\n\t\tfont-family: Helvetica, sans-serif;\n\t}\n\n\t.bar text {\n\t\tcolor: black;\n\t}\n\n\t.bar:hover,\n\t.bar:focus {\n\t\tfill: black;\n\t}\n\n\t.bar:hover text,\n\t.bar:focus text {\n\t\tfill: red;\n\t}\n\n\t.year {\n\t\tstroke: black;\n\t\tfill: white;\n\t}\n\n\t.month {\n\t\tstroke: black;\n\t\tfill: white;\n\t}\n\n\t.day {\n\t\tstroke: black;\n\t\tfill: white;\n\t}\n\n\t.smallText {\n\t\tfont-size: 4px;\n\t}\n</style>\n\n<div class="scheduler">\n\t<button class="btn btn-warning" type="button" (mouseenter)="overBackwards()" (mouseleave)="leftBackwards()">Go Backwards</button>\n\t<button class="btn btn-success" type="button" (mouseenter)="overForward()" (mouseleave)="leftForward()">Go Forward</button>\n\n\t<button style="margin-left: 20px" class="btn btn-warning" type="button" (click)="zoomOut()">Zoom Out</button>\n\t<button class="btn btn-success" type="button" (click)="zoomIn()">Zoom In</button>\n\n\t<svg class="chart" width="100%" height="100%" aria-labelledby="title desc" role="img" #svgChart>\n\t\t<title id="title">Scheduler</title>\n\t\t<desc id="desc">Scheduler</desc>\n\n\t\t<g class="year">\n\t\t\t@for (year of buildYears(); track year;) {\n\t\t\t\t<ng-container>\n\t\t\t\t\t<rect [attr.width]="(year.index_end - year.index_start) * size_cell.width" [attr.height]="size_cell.height" [attr.x]="year.index_start * size_cell.width"></rect>\n\t\t\t\t\t<svg [attr.width]="(year.index_end - year.index_start) * size_cell.width" [attr.height]="size_cell.height" [attr.x]="year.index_start * size_cell.width">\n\t\t\t\t\t\t<text x="50%" y="50%" alignment-baseline="middle" text-anchor="middle">{{ year.year }}</text>\n\t\t\t\t\t</svg>\n\t\t\t\t</ng-container>\n\t\t\t}\n\t\t</g>\n\t\t<g class="month">\n\t\t\t@for (month of buildMonths(); track month;) {\n\t\t\t\t<ng-container>\n\t\t\t\t\t<rect [attr.width]="(month.index_end - month.index_start) * size_cell.width" [attr.height]="size_cell.height" [attr.x]="month.index_start * size_cell.width" [attr.y]="size_cell.height"></rect>\n\t\t\t\t\t<svg [attr.width]="(month.index_end - month.index_start) * size_cell.width" [attr.height]="size_cell.height" [attr.x]="month.index_start * size_cell.width" [attr.y]="size_cell.height">\n\t\t\t\t\t\t<text x="50%" y="50%" alignment-baseline="middle" text-anchor="middle">{{ month.month }}</text>\n\t\t\t\t\t</svg>\n\t\t\t\t</ng-container>\n\t\t\t}\n\t\t</g>\n\t\t<g class="day">\n\t\t\t@for (day of buildDays(); track day;) {\n\t\t\t\t<ng-container>\n\t\t\t\t\t<rect [attr.width]="size_cell.width" [attr.height]="size_cell.height" [attr.x]="day.index * size_cell.width" [attr.y]="size_cell.height * 2"></rect>\n\t\t\t\t\t<svg [attr.width]="size_cell.width" [attr.height]="size_cell.height" [attr.x]="day.index * size_cell.width" [attr.y]="size_cell.height * 2">\n\t\t\t\t\t\t<text x="50%" y="50%" alignment-baseline="middle" text-anchor="middle" [style.font-size.px]="[size_cell.width > 10 ? 12 : 6]">{{ day.day }}</text>\n\t\t\t\t\t</svg>\n\t\t\t\t</ng-container>\n\t\t\t}\n\t\t</g>\n\n\t\t\x3c!-- <g class="bar">\n\t<rect width="40" height="19"></rect>\n\t<text x="45" y="9.5" dy=".35em">4 apples</text>\n\t</g>\n\t<g class="bar">\n\t<rect width="80" height="19" y="20"></rect>\n\t<text x="85" y="28" dy=".35em">8 bananas</text>\n\t</g>\n\t<g class="bar">\n\t<rect width="150" height="19" y="40"></rect>\n\t<text x="150" y="48" dy=".35em">15 kiwis</text>\n\t</g>\n\t<g class="bar">\n\t<rect width="160" height="19" y="60"></rect>\n\t<text x="161" y="68" dy=".35em">16 oranges</text>\n\t</g>\n\t<g class="bar">\n\t<rect width="230" height="19" y="80"></rect>\n\t<text x="235" y="88" dy=".35em">23 lemons</text>\n\t</g> --\x3e\n\t</svg>\n</div>\n',styles:[".bar{fill:red;height:21px;transition:fill .3s ease;cursor:pointer;font-family:Helvetica,sans-serif}.bar text{color:#000}.bar:hover,.bar:focus{fill:#000}.bar:hover text,.bar:focus text{fill:red}.year,.month,.day{stroke:#000;fill:#fff}.smallText{font-size:4px}\n"]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SchedulerComponent,decorators:[{type:Component,args:[{providers:[ProviderService],selector:"scheduler",standalone:!1,template:'<style>\n\t.bar {\n\t\tfill: red; /* changes the background */\n\t\theight: 21px;\n\t\ttransition: fill 0.3s ease;\n\t\tcursor: pointer;\n\t\tfont-family: Helvetica, sans-serif;\n\t}\n\n\t.bar text {\n\t\tcolor: black;\n\t}\n\n\t.bar:hover,\n\t.bar:focus {\n\t\tfill: black;\n\t}\n\n\t.bar:hover text,\n\t.bar:focus text {\n\t\tfill: red;\n\t}\n\n\t.year {\n\t\tstroke: black;\n\t\tfill: white;\n\t}\n\n\t.month {\n\t\tstroke: black;\n\t\tfill: white;\n\t}\n\n\t.day {\n\t\tstroke: black;\n\t\tfill: white;\n\t}\n\n\t.smallText {\n\t\tfont-size: 4px;\n\t}\n</style>\n\n<div class="scheduler">\n\t<button class="btn btn-warning" type="button" (mouseenter)="overBackwards()" (mouseleave)="leftBackwards()">Go Backwards</button>\n\t<button class="btn btn-success" type="button" (mouseenter)="overForward()" (mouseleave)="leftForward()">Go Forward</button>\n\n\t<button style="margin-left: 20px" class="btn btn-warning" type="button" (click)="zoomOut()">Zoom Out</button>\n\t<button class="btn btn-success" type="button" (click)="zoomIn()">Zoom In</button>\n\n\t<svg class="chart" width="100%" height="100%" aria-labelledby="title desc" role="img" #svgChart>\n\t\t<title id="title">Scheduler</title>\n\t\t<desc id="desc">Scheduler</desc>\n\n\t\t<g class="year">\n\t\t\t@for (year of buildYears(); track year;) {\n\t\t\t\t<ng-container>\n\t\t\t\t\t<rect [attr.width]="(year.index_end - year.index_start) * size_cell.width" [attr.height]="size_cell.height" [attr.x]="year.index_start * size_cell.width"></rect>\n\t\t\t\t\t<svg [attr.width]="(year.index_end - year.index_start) * size_cell.width" [attr.height]="size_cell.height" [attr.x]="year.index_start * size_cell.width">\n\t\t\t\t\t\t<text x="50%" y="50%" alignment-baseline="middle" text-anchor="middle">{{ year.year }}</text>\n\t\t\t\t\t</svg>\n\t\t\t\t</ng-container>\n\t\t\t}\n\t\t</g>\n\t\t<g class="month">\n\t\t\t@for (month of buildMonths(); track month;) {\n\t\t\t\t<ng-container>\n\t\t\t\t\t<rect [attr.width]="(month.index_end - month.index_start) * size_cell.width" [attr.height]="size_cell.height" [attr.x]="month.index_start * size_cell.width" [attr.y]="size_cell.height"></rect>\n\t\t\t\t\t<svg [attr.width]="(month.index_end - month.index_start) * size_cell.width" [attr.height]="size_cell.height" [attr.x]="month.index_start * size_cell.width" [attr.y]="size_cell.height">\n\t\t\t\t\t\t<text x="50%" y="50%" alignment-baseline="middle" text-anchor="middle">{{ month.month }}</text>\n\t\t\t\t\t</svg>\n\t\t\t\t</ng-container>\n\t\t\t}\n\t\t</g>\n\t\t<g class="day">\n\t\t\t@for (day of buildDays(); track day;) {\n\t\t\t\t<ng-container>\n\t\t\t\t\t<rect [attr.width]="size_cell.width" [attr.height]="size_cell.height" [attr.x]="day.index * size_cell.width" [attr.y]="size_cell.height * 2"></rect>\n\t\t\t\t\t<svg [attr.width]="size_cell.width" [attr.height]="size_cell.height" [attr.x]="day.index * size_cell.width" [attr.y]="size_cell.height * 2">\n\t\t\t\t\t\t<text x="50%" y="50%" alignment-baseline="middle" text-anchor="middle" [style.font-size.px]="[size_cell.width > 10 ? 12 : 6]">{{ day.day }}</text>\n\t\t\t\t\t</svg>\n\t\t\t\t</ng-container>\n\t\t\t}\n\t\t</g>\n\n\t\t\x3c!-- <g class="bar">\n\t<rect width="40" height="19"></rect>\n\t<text x="45" y="9.5" dy=".35em">4 apples</text>\n\t</g>\n\t<g class="bar">\n\t<rect width="80" height="19" y="20"></rect>\n\t<text x="85" y="28" dy=".35em">8 bananas</text>\n\t</g>\n\t<g class="bar">\n\t<rect width="150" height="19" y="40"></rect>\n\t<text x="150" y="48" dy=".35em">15 kiwis</text>\n\t</g>\n\t<g class="bar">\n\t<rect width="160" height="19" y="60"></rect>\n\t<text x="161" y="68" dy=".35em">16 oranges</text>\n\t</g>\n\t<g class="bar">\n\t<rect width="230" height="19" y="80"></rect>\n\t<text x="235" y="88" dy=".35em">23 lemons</text>\n\t</g> --\x3e\n\t</svg>\n</div>\n'}]}],ctorParameters:()=>[{type:ProviderService}],propDecorators:{svgChart:[{type:ViewChild,args:["svgChart",{static:!0}]}],onMouseup:[{type:HostListener,args:["mouseup"]}],onMousedown:[{type:HostListener,args:["mousedown",["$event"]]}],onMousemove:[{type:HostListener,args:["mousemove",["$event"]]}],onMouseLeave:[{type:HostListener,args:["mouseleave",["$event"]]}]}});class SchedulerModule{static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SchedulerModule,deps:[],target:i0.ɵɵFactoryTarget.NgModule});static"ɵmod"=i0.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"21.0.1",ngImport:i0,type:SchedulerModule,declarations:[SchedulerComponent],imports:[NgbModule,FormsModule,CommonModule,RouterModule],exports:[SchedulerComponent]});static"ɵinj"=i0.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SchedulerModule,imports:[NgbModule,FormsModule,CommonModule,RouterModule]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SchedulerModule,decorators:[{type:NgModule,args:[{imports:[NgbModule,FormsModule,CommonModule,RouterModule],exports:[SchedulerComponent],declarations:[SchedulerComponent],providers:[]}]}]});const ReportBuilderModulePermission={name:"report-builder",views:[{link:"/report-builder/list",label:"List"},{link:"/report-builder/new",label:"New"},{link:"/report-builder/scheduled-job",label:"Scheduled Job"},{link:"/report-builder/dashboard-builder",label:"Dashboard Builder"},{link:"/report-builder/detail",label:"Detail",has_parameter:!0},{link:"/report-builder/edit",label:"Edit",has_parameter:!0},{link:"/report-builder/delete",label:"Delete",has_parameter:!0}]},SuperAdminModulePermission={name:"super-admin",views:[{link:"/super-admin/dashboard",label:"Dashboard"},{link:"/super-admin/apm",label:"APM"},{link:"/super-admin/monitor",label:"Monitor"}]};export{AccountManagerService,AlertService,Auth365Component,AuthGuard,AuthPermissionService,AuthService,AwsService,BaseComponent,CanDeactivateGuard,CollapseTableComponent,CollapseTableModule,CoreComponent,CoreModule,CoreService,DatatableComponent,DatatableModule,DateShortcutComponent,DateShortcutModule,DialogService,DomSanitizorPipe,Draggable,DropEvent,Droppable,EnrollComponent,FileModule,FileUploadComponent,FilterEqualPipe,FilterNotEqualPipe,FocusDirective,ForgotPasswordComponent,FormButtonComponent,FormButtonModule,HomeComponent,JsonParsePipe,LoggerComponent,MinusCurrencyPipe,NavbarMainComponent,NavbarModuleComponent,NgDragDropModule,NgDragDropService,OfflineManagerService,PhonePipe,PipeModule,ProviderService,ReportBuilderModulePermission,ResizeService,ResponsiveButtonGroupComponent,ResponsiveButtonGroupModule,ReversePipe,SchedulerComponent,SchedulerModule,ScrollDirective,SharedModule,SocketManagerService,SocketService,SortTableDirective,SortTableHeaderComponent,SortTableModule,SortTableNgForComponent,Sortable as SortableJs,SortablejsDirective,SortablejsModule,StorageDB,SuperAdminModulePermission,SupportTicketComponent,SupportTicketDetailComponent,SupportTicketEditComponent,SupportTicketListComponent,SupportTicketModule,SupportTicketNewComponent,SupportTicketRouting,SupportTicketService,TitleCaseAndUnderscorePipe,TokenManagerService,UserRoleComponent,UserRoleModule,ValidationService,WindowRefService,applyMongoUpdate,b64toBlobURL,blobToFile,dateReviver,deepCopy,deepDiffDetails,exportCsv,generateCronStringFromDate,isUpperCase,mergeDeep,pad,rioDatePickerConfigFactory,round,s2ab,toDataURL,toTitleCase,type};
|
|
1
|
+
import*as i0 from"@angular/core";import{Injectable,HostListener,Input,Component,ViewChild,Directive,ChangeDetectionStrategy,EventEmitter,Output,ViewChildren,Pipe,ElementRef,NgModule,Optional,ViewEncapsulation,InjectionToken,Inject,HostBinding}from"@angular/core";import{BehaviorSubject,Subject,fromEvent,merge,Observable,of}from"rxjs";import*as i1$3 from"ngx-device-detector";import{DeviceDetectorService}from"ngx-device-detector";import*as i2 from"@angular/forms";import{UntypedFormControl,Validators,FormsModule,ReactiveFormsModule}from"@angular/forms";import*as i1 from"ngx-toastr";import{ToastrModule}from"ngx-toastr";import moment from"moment-timezone";import{unpack,pack}from"msgpackr";import{finalize,map}from"rxjs/operators";import{detailedDiff}from"deep-object-diff";import*as CryptoJS from"crypto-js";import*as i1$1 from"@angular/router";import{RouterModule}from"@angular/router";import*as i4 from"@angular/common/http";import{provideHttpClient,withInterceptorsFromDi}from"@angular/common/http";import*as i1$2 from"@ng-bootstrap/ng-bootstrap";import{NgbTooltipModule,NgbModule,NgbAccordionModule}from"@ng-bootstrap/ng-bootstrap";import*as i7 from"@angular/common";import{CommonModule}from"@angular/common";import*as i5 from"@resolveio/client-lib-ng-select";import{NgSelectModule,NG_SELECT_STICKY_ADAPTER}from"@resolveio/client-lib-ng-select";import*as i6 from"@resolveio/client-lib-date-picker";import{RioDatePickerModule,RIO_DATE_PICKER_CONFIG}from"@resolveio/client-lib-date-picker";import{UserAgentApplication}from"msal";import{BrowserAnimationsModule}from"@angular/platform-browser/animations";import moment$1 from"moment";import*as i1$4 from"@angular/platform-browser";import*as i7$1 from"ngx-file-drop";import{NgxFileDropModule}from"ngx-file-drop";import*as i8 from"@resolveio/client-lib-pdf-viewer";import{PdfViewerModule}from"@resolveio/client-lib-pdf-viewer";class CoreService{isDevice=new BehaviorSubject(!1);fullScreen=new BehaviorSubject(!1);fsActivated=new BehaviorSubject(!1);hasConnected=new BehaviorSubject(!1);navbarModuleData=new BehaviorSubject({title:"",module:"",description:"",description_name:"",tabs:[]});hasStatusMessage=new BehaviorSubject(!1);alertData=new BehaviorSubject({type:"",message:"",timer:0,showing:!1});isInvalidSW=new BehaviorSubject(!1);environment=new BehaviorSubject(null);client=new BehaviorSubject("");standardProgram=new BehaviorSubject(!1);navTabs=new BehaviorSubject([]);tourStops=new BehaviorSubject([]);tourStarted=new BehaviorSubject(!1);isDemo=new BehaviorSubject(!1);isLoggingOut=new BehaviorSubject(!1);constructor(){}setFullScreen(t){this.fullScreen.next(t)}setFsActivated(t){this.fsActivated.next(t)}setHasConnected(t){this.hasConnected.next(t)}setNavbarModuleData(t){const e=t.tabs.filter(t=>null===t.params).concat(t.tabs.filter(t=>null!==t.params)),n={...t,tabs:e};Promise.resolve().then(()=>this.navbarModuleData.next(n))}setHasStatusMessage(t){this.hasStatusMessage.next(t)}setIsDevice(t){this.isDevice.next(t)}setIsInvalidSW(t){this.isInvalidSW.next(t)}setEnvironment(t){this.environment.next(t)}setClient(t){this.client.next(t)}setStandardProgram(t){this.standardProgram.next(t)}setNavTabs(t){const e=Array.isArray(t)?t.slice():t;Promise.resolve().then(()=>this.navTabs.next(e))}setTourStops(t){this.tourStops.next(t)}setTourStarted(t){this.tourStarted.next(t)}setDemo(t){this.isDemo.next(t)}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:CoreService,deps:[],target:i0.ɵɵFactoryTarget.Injectable});static"ɵprov"=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:CoreService,providedIn:"root"})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:CoreService,decorators:[{type:Injectable,args:[{providedIn:"root"}]}],ctorParameters:()=>[]});class ResizeService{get onResize$(){return this.resizeSubject.asObservable()}resizeSubject;subscription;constructor(){this.resizeSubject=new Subject,"undefined"!=typeof window&&(this.subscription=fromEvent(window,"resize").subscribe(t=>this.onResize(t)))}onResize(t){this.resizeSubject.next(t.target)}ngOnDestroy(){this.subscription&&this.subscription.unsubscribe()}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:ResizeService,deps:[],target:i0.ɵɵFactoryTarget.Injectable});static"ɵprov"=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:ResizeService})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:ResizeService,decorators:[{type:Injectable}],ctorParameters:()=>[]});class AlertService{_toastr;constructor(t){this._toastr=t}clearAlert(t){t?this._toastr.clear(t):this._toastr.clear()}registerTapToClear(t){return t&&t.onTap&&t.onTap.subscribe(()=>this._toastr.clear(t.toastId)),t}setAlert(t,e,n=5e3){return"success"===t?n?this.registerTapToClear(this._toastr.success(e,"Success",{timeOut:n,tapToDismiss:!0})):this.registerTapToClear(this._toastr.success(e,"Success",{disableTimeOut:!0,tapToDismiss:!0})):"info"===t?n?this.registerTapToClear(this._toastr.info(e,"Info",{timeOut:n,tapToDismiss:!0})):this.registerTapToClear(this._toastr.info(e,"Info",{disableTimeOut:!0,tapToDismiss:!0})):"warning"===t?n?this.registerTapToClear(this._toastr.warning(e,"Warning",{timeOut:n,tapToDismiss:!0})):this.registerTapToClear(this._toastr.warning(e,"Warning",{disableTimeOut:!0,tapToDismiss:!0})):"error"===t?n?this.registerTapToClear(this._toastr.error(e,"Error",{timeOut:n,tapToDismiss:!0})):this.registerTapToClear(this._toastr.error(e,"Error",{disableTimeOut:!0,tapToDismiss:!0})):"update"===t?this.registerTapToClear(this._toastr.warning(e,"Update",{disableTimeOut:!0,tapToDismiss:!0})):void 0}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:AlertService,deps:[{token:i1.ToastrService}],target:i0.ɵɵFactoryTarget.Injectable});static"ɵprov"=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:AlertService})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:AlertService,decorators:[{type:Injectable}],ctorParameters:()=>[{type:i1.ToastrService}]});class LocalStorageService{get(t){return"undefined"==typeof localStorage?null:localStorage.getItem(t)}set(t,e){"undefined"!=typeof localStorage&&localStorage.setItem(t,e)}remove(t){"undefined"!=typeof localStorage&&localStorage.removeItem(t)}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:LocalStorageService,deps:[],target:i0.ɵɵFactoryTarget.Injectable});static"ɵprov"=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:LocalStorageService,providedIn:"root"})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:LocalStorageService,decorators:[{type:Injectable,args:[{providedIn:"root"}]}]});class SocketService{_storage;debug=!1;reconnectInterval=1e3;timeoutInterval=5e3;timeout=null;readyState;readyState$=new BehaviorSubject(0);protocols=[];ws=null;url;timezone;pingInterval=null;pongTimeout=null;pingIntervalTime=15e3;pongTimeoutTime=12e3;lastActivity=Date.now();missedPongs=0;maxMissedPongs=3;wakeReconnectThreshold=3e5;focusReconnectDebounce=null;onopen=t=>{};onclose=t=>{};onconnecting=()=>{};onmessage=t=>{};onerror=t=>{};constructor(t){this._storage=t,"undefined"!=typeof document&&document.addEventListener("visibilitychange",this.handleVisibilityChange),"undefined"!=typeof window&&window.addEventListener("focus",this.handleWindowFocus)}openSocket(t,e){this.url=t.WS_URL,this.protocols=e,this.timezone=t.TZ_CLIENT,this.connect()}onOpenHandler=t=>{this.timeout&&(clearTimeout(this.timeout),this.timeout=null),this.log(new Date,"WS","onopen",this.url),this.readyState=WebSocket.OPEN,this.readyState$.next(this.readyState),this.recordActivity(),this.onopen(t),this.startPinging()};onCloseHandler=t=>{this.ws&&this.readyState!==WebSocket.CLOSED&&(this.timeout&&(clearTimeout(this.timeout),this.timeout=null),this.ws.removeEventListener("open",this.onOpenHandler),this.ws.removeEventListener("close",this.onCloseHandler),this.ws.removeEventListener("message",this.onMessageHandler),this.ws.removeEventListener("error",this.onErrorHandler),this.ws=null,this.readyState=WebSocket.CLOSED,this.readyState$.next(this.readyState),this.log(new Date,"WS","onclose",this.url),this.onclose(t),setTimeout(()=>this.connect(),this.reconnectInterval),this.stopPinging())};onMessageHandler=t=>{if(this.recordActivity(),"pong"===t.data)return void this.log(new Date,"WS","pong received");if("ping"===t.data)return this.log(new Date,"WS","ping received"),void this.send("pong");const e=(t,e=0,n)=>{const o=void 0!==n?new Uint8Array(t,e,n):new Uint8Array(t,e);try{let t=unpack(o);t=this.convertUTCDateToLocalDate(t),this.onmessage(t)}catch(t){this.log(new Date,"WS","failed to unpack payload",t);try{const t=(new TextDecoder).decode(o),e=JSON.parse(t),n=this.convertUTCDateToLocalDate(e);this.onmessage(n)}catch(t){this.log(new Date,"WS","unable to fallback decode payload",t)}}};if(t.data instanceof ArrayBuffer)e(t.data);else if(ArrayBuffer.isView(t.data)){const n=t.data;e(n.buffer,n.byteOffset,n.byteLength)}else if(t.data instanceof Blob)t.data.arrayBuffer().then(t=>e(t)).catch(t=>this.log(new Date,"WS","failed to decode blob payload",t));else if("string"==typeof t.data)try{const e=JSON.parse(t.data),n=this.convertUTCDateToLocalDate(e);this.onmessage(n)}catch(e){this.log(new Date,"WS","failed to parse text payload",e),this.onmessage(this.convertUTCDateToLocalDate(t.data))}else this.log(new Date,"WS","unsupported message type",typeof t.data,t.data)};onErrorHandler=t=>{this.log(new Date,"WS","onerror",this,t),this.onerror(t),this.reconnect()};connect(){!this.ws&&this.readyState!==WebSocket.CONNECTING&&this._storage.get("accessToken")&&(this.readyState=WebSocket.CONNECTING,this.readyState$.next(this.readyState),this.timeout&&clearTimeout(this.timeout),this.ws=new WebSocket(this.url,this.protocols),this.ws.binaryType="arraybuffer",this.onconnecting(),this.log(new Date,"WS","attempt-connect",this.url),this.timeout=setTimeout(()=>{this.log(new Date,"WS","connection-timeout",this.url),this.close()},this.timeoutInterval),this.ws.onopen=this.onOpenHandler,this.ws.onclose=this.onCloseHandler,this.ws.onmessage=this.onMessageHandler,this.ws.onerror=this.onErrorHandler)}convertUTCDateToLocalDate(t){if(Array.isArray(t))return t.map(t=>this.convertUTCDateToLocalDate(t));if(t&&"object"==typeof t)return Object.keys(t).reduce((e,n)=>(e[n]=this.convertUTCDateToLocalDate(t[n]),e),t);if("string"==typeof t){if(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?Z$/.test(t))return new Date(t)}return t}clearPongTimeout(){this.pongTimeout&&(clearTimeout(this.pongTimeout),this.pongTimeout=null)}recordActivity(){this.lastActivity=Date.now(),this.missedPongs=0,this.clearPongTimeout()}schedulePongTimeout(){this.clearPongTimeout(),this.pongTimeout=setTimeout(()=>{this.handleMissedPong()},this.pongTimeoutTime)}handleMissedPong(){this.pongTimeout=null,this.missedPongs++,this.log(new Date,"WS","pong not received",this.missedPongs,"/",this.maxMissedPongs),this.missedPongs>=this.maxMissedPongs&&(this.log(new Date,"WS","max missed pongs reached, closing connection"),this.reconnect())}startPinging(){this.stopPinging(),this.pingInterval=setInterval(()=>{if(!this.isWebSocketActive())return void this.reconnect();Date.now()-this.lastActivity<this.pingIntervalTime||this.pongTimeout||this.send("ping")&&this.schedulePongTimeout()},this.pingIntervalTime)}stopPinging(){this.pingInterval&&(clearInterval(this.pingInterval),this.pingInterval=null),this.clearPongTimeout(),this.missedPongs=0}convertDatesToUTC(t,e=new WeakSet){"object"!=typeof t||null===t||e.has(t)||(e.add(t),Object.keys(t).forEach(n=>{t[n]instanceof Date?t[n]=moment(t[n]).utc().toDate():"object"==typeof t[n]&&null!==t[n]&&this.convertDatesToUTC(t[n],e)}))}send(...t){if(!this.isWebSocketActive())return this.log(new Date,"WS","send error",this.readyState),this.reconnect(),!1;t.forEach(t=>this.convertDatesToUTC(t));const e=1===t.length?t[0]:t;if("string"==typeof e)this.ws.send(e);else{const t=pack(e);this.ws.send(t)}return!0}close(){return!!this.ws&&(this.log(new Date,"WS","closing socket"),this.readyState=WebSocket.CLOSING,this.readyState$.next(this.readyState),this.ws.close(),!0)}reconnect(){this.log(new Date,"WS","reconnect",this.readyState),this.readyState!==WebSocket.CONNECTING&&this.close()}getBufferAmount(){return this.ws?this.ws.bufferedAmount:20480}log(...t){this.debug&&console.log(...t)}handleVisibilityChange=()=>{"visible"===document.visibilityState&&this.handleWindowFocus()};handleWindowFocus=()=>{this.focusReconnectDebounce&&clearTimeout(this.focusReconnectDebounce),this.focusReconnectDebounce=setTimeout(()=>{if(this.focusReconnectDebounce=null,!this.isWebSocketActive())return void this.reconnect();Date.now()-this.lastActivity>this.wakeReconnectThreshold?this.reconnect():this.send("ping")},200)};isWebSocketActive(){return!!this.ws&&this.ws.readyState===WebSocket.OPEN}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SocketService,deps:[{token:LocalStorageService}],target:i0.ɵɵFactoryTarget.Injectable});static"ɵprov"=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SocketService})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SocketService,decorators:[{type:Injectable}],ctorParameters:()=>[{type:LocalStorageService}]});const isObject$1=t=>t instanceof Object&&"Object"===t.constructor.name;function round(t,e=0){const n=Math.pow(10,e);return Math.round(t*n+1e-6)/n}function toTitleCase(t){return t.replace(/\w\S*/g,function(t){return t.charAt(0).toUpperCase()+t.substr(1).toLowerCase()})}function isUpperCase(t){return/^[A-Z]*$/.test(t)}function pad(t,e){let n=t+"";for(;n.length<e;)n="0"+n;return n}function deepCopy(t){return JSON.parse(JSON.stringify(t),dateReviver)}function dateReviver(t,e){if("string"==typeof e){let t=/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(e);if(t)return new Date(Date.UTC(+t[1],+t[2]-1,+t[3],+t[4],+t[5],+t[6].split(".")[0],+t[6].split(".")[1]))}return e}function momentTz(t,e){return t?null!=e?moment(e).tz(t):moment.tz(t):null!=e?moment(e):moment()}function dateOnlyStartOfDayTz(t,e){return t?e?t instanceof Date?moment.tz({year:t.getFullYear(),month:t.getMonth(),date:t.getDate()},e).startOf("day").toDate():"object"==typeof t&&t.year&&t.month&&t.day?moment.tz({year:t.year,month:t.month-1,date:t.day},e).startOf("day").toDate():momentTz(e,t).startOf("day").toDate():moment(t).startOf("day").toDate():null}function b64toBlobURL(t,e,n){t=t.replace("data:application/pdf;base64,",""),e=e||"",n=n||512;let o=atob(t),r=[];for(let t=0;t<o.length;t+=n){let e=o.slice(t,t+n),i=new Array(e.length);for(let t=0;t<e.length;t++)i[t]=e.charCodeAt(t);let a=new Uint8Array(i);r.push(a)}let i=new Blob(r,{type:e});return URL.createObjectURL(i)}function blobToFile(t,e){return t.lastModifiedDate=new Date,t.name=e,t}function toDataURL(t,e){let n=new XMLHttpRequest;n.onload=function(){let t=new FileReader;t.onloadend=function(){e(t.result)},t.readAsDataURL(n.response)},n.open("GET",t),n.responseType="blob",n.send()}function deepDiffDetails(t,e){let n=deepCopy(t),o=deepCopy(e),r=detailedDiff(n,o),i="";const a=t=>t instanceof Date?moment(t).format("llll"):"object"==typeof t&&null!==t?(Object.keys(t).filter(t=>t.startsWith("_id")||t.startsWith("id_")).forEach(e=>{delete t[e]}),JSON.stringify(t)):"string"==typeof t?`"${t}"`:String(t),s=(t,e)=>null===t||null===e||"object"!=typeof t||"object"!=typeof e?`from: ${a(t)} to: ${a(e)}`:Array.isArray(t)||Array.isArray(e)?((t,e)=>{let n=[];const o=Math.max(t.length,e.length);for(let r=0;r<o;r++)t[r]&&!e[r]?n.push(`Removed at index ${r}: ${a(t[r])}`):!t[r]&&e[r]?n.push(`Added at index ${r}: ${a(e[r])}`):t[r]&&e[r]&&JSON.stringify(t[r])!==JSON.stringify(e[r])&&n.push(`Changed at index ${r}: {${s(t[r],e[r])}}`);return n.join(", ")})(Array.isArray(t)?t:[],Array.isArray(e)?e:[]):Object.keys({...t,...e}).filter(t=>!t.startsWith("_id")&&!t.startsWith("id_")).map(n=>{const o=t?t[n]:void 0,r=e?e[n]:void 0;return`${toTitleCase(n)}: ${s(o,r)}`}).join(", ");return["added","deleted","updated"].forEach(t=>{if(Object.keys(r[t]).length>0){const e=Object.keys(r[t]).filter(e=>"added"===t||("deleted"===t?!r.added[e]:!r.added[e]&&!r.deleted[e])).filter(t=>!t.startsWith("_id")&&!t.startsWith("id_")).map(t=>`\n${toTitleCase(t)}: ${s(n[t],o[t])}`).join(",");i+=e?`${e}`:""}}),i}function generateCronStringFromDate(t){return t.getSeconds()+" "+t.getMinutes()+" "+t.getHours()+" "+t.getDate()+" "+(t.getMonth()+1)+" "+t.getDay()}function s2ab(t){let e=new ArrayBuffer(t.length),n=new Uint8Array(e);for(let e=0;e!==t.length;++e)n[e]=255&t.charCodeAt(e);return e}function mergeDeep(t,...e){if(!e.length)return t;const n=e.shift();if(isObject$1(t)&&isObject$1(n))for(const e in n)isObject$1(n[e])?(t[e]||Object.assign(t,{[e]:{}}),mergeDeep(t[e],n[e])):Object.assign(t,{[e]:n[e]});return mergeDeep(t,...e)}function applyMongoUpdate(t,e){const n=deepCopy(t);return e&&(e.$rename&&handleRename(t,e.$rename),e.$set&&handleSet(t,e.$set),e.$inc&&handleInc(t,e.$inc),e.$unset&&handleUnset(t,e.$unset),e.$pull&&handlePull(t,n,e.$pull),e.$push&&handlePush(t,e.$push)),t}function handleRename(t,e){for(const n in e){const o=e[n],[r,i]=resolve(t,n),[a,s]=resolve(t,o);r&&1===i.length?a&&1===s.length?(a[s[0]]=r[i[0]],delete r[i[0]]):logError(a,s,t,o):logError(r,i,t,n)}}function handleSet(t,e){for(const n in e){const o=e[n],[r,i]=resolve(t,n,{force:!0});r&&1===i.length?r[i[0]]=o:logError(r,i,t,n)}}function handleInc(t,e){for(const n in e){const o=e[n],[r,i]=resolve(t,n,{force:!0});r&&1===i.length?r[i[0]]=(r[i[0]]||0)+o:logError(r,i,t,n)}}function handleUnset(t,e){for(const n in e){const[e,o]=resolve(t,n);e&&1===o.length?delete e[o[0]]:logError(e,o,t,n)}}function handlePull(t,e,n){for(const o in n){const r=n[o];for(let n of r){const[r,i]=resolve(t,o),[a,s]=resolve(e,o);r&&1===i.length?r[i[0]].splice(a[s[0]].findIndex(t=>JSON.stringify(t)===JSON.stringify(n)),1):logError(r,i,t,o)}}}function handlePush(t,e){for(const n in e){const o=e[n];for(let e of o){const[o,r]=resolve(t,n);o&&1===r.length?o[r[0]].push(e):logError(o,r,t,n)}}}function logError(t,e,n,o){console.log("Error",t+"/"+e+" - couldn't resolve for "+JSON.stringify(n)+" "+o)}function resolve(t,e,n={}){const o=arrize(e);let r=[];o.length>0&&r.unshift(o.pop());let i=t;for(;o.length>0;){const t=o.shift();if(void 0!==i[t])i=i[t];else{if(!n.force){r.unshift(t),r=o.concat(r);break}const e="number"==typeof o[0],a=0===o.length&&"number"==typeof r[0];i[t]=e||a?[]:{},i=i[t]}}return[i,r]}function arrize(t,e="."){return Array.isArray(t)?t.slice():null==t||!1===t||""===t?[]:t.toString().split(e).map(t=>[void 0,null,!1,""].includes(t)?null:t.toString()).filter(t=>null!==t)}class StorageDB{storage=null;database=null;primaryKey=null;secretKey=null;sep="";constructor(t){t=t||{},this.storage=t.storage||window&&window.localStorage,this.database=t.database||"db",this.primaryKey=t.primaryKey||"_id",this.sep=t.sep||":",this.secretKey=t.secretKey||"",isSupported(this.storage)||(this.storage=null)}encryptData(t){const e=JSON.stringify(t);return CryptoJS.AES.encrypt(e,this.secretKey).toString()}decryptData(t){const e=CryptoJS.AES.decrypt(t,this.secretKey);try{const t=e.toString(CryptoJS.enc.Utf8);return JSON.parse(t,dateReviver)}catch(t){return null}}get(t,e){return new Collection(this,t,e)}getCollections(){let t=[];return Object.keys(this.storage).filter(t=>t.split(":").length>2).forEach(e=>{t.some(t=>t===e.split(":")[1])||t.push(e.split(":")[1])}),t}collection(t,e){return this.get(t,e)}}class Collection{name="";storage=null;path="";primaryKey="";cache={};cacheable=!1;db=null;constructor(t,e,n){n=n||{},this.name=e,this.storage=t.storage||new MockStorage,this.path=t.database+t.sep+e+t.sep,this.primaryKey=n.primaryKey||t.primaryKey,this.cache={},this.cacheable=!t.storage,this.db=t}_initCache(){let t={},e=new RegExp("^"+this.path);for(let n of Object.keys(this.storage))if(e.test(n)){const e=this.storage.getItem(n);t[n]=this.db.decryptData(e)}this.cache=t,this.cacheable=!0}_filter(t,e){e.type=e.type||"data",e.multi=e.multi||!1,this.cacheable||this._initCache();let n,o=[],r="id"===e.type;if("string"==typeof t)t=new RegExp(t);else if("function"==typeof t)n=!0;else if(!t){let t=r?Object.keys(this.cache):Object.values(this.cache);return e.multi?t:t[0]||null}for(let i of Object.keys(this.cache)){let a=this.cache[i];if(n){if(t(i,a.data)){let t=r?i:a;if(!e.multi)return t;o.push(t)}}else if(t.test(i)){let t=r?i:a;if(!e.multi)return t;o.push(t)}}return e.multi?o:null}insert(t,e,n){let o=t instanceof Array;if(o){if(0===t.length)return[]}else t=[t];let r=this.primaryKey,i=this.cacheable;for(let n of t){if(!isObject(n))throw new Error("TypeError: insert data must be an object or an object array");void 0===n[r]&&(n[r]=(new ID).toString());let t=new Date,o={offlineDate:t,offlineDateExpires:e||new Date(t.getTime()+6048e5),data:n};const a=this.db.encryptData(o);i&&(this.cache[this.path+n[r]]=o),this.storage.setItem(this.path+n[r],a)}return o?t.map(t=>t._id):t[0]._id}find(t,e,n){let o;t=t||{},(e=e||{}).skip=e.skip||0,e.limit=e.limit,e.sort=e.sort;let r=isObject(t)?null:t instanceof Array?t:[t],i={type:e._filterType||"data",multi:!0};if(r){let t=new RegExp("^"+this.path+"("+r.join("|")+")$");o=this._filter(t,i)}else o=Object.keys(t).length?this._filter((e,n)=>queryMatch(t,n),i):this._filter(null,i);return n||(o=o.map(t=>t.data)),e.sort&&o.sort((t,n)=>sortCompare(e.sort,t,n)),e.limit?o=o.slice(e.skip,e.skip+e.limit):e.skip&&(o=o.slice(e.skip)),o}findOne(t,e){let n;e=e||{};let o=isObject(t=t||{})?null:t,r=isObject(t)?Object.keys(t):[],i=!1,a=!!e.sort,s={type:e._filterType||"data",multi:!1};if(r.length&&r.includes(this.primaryKey)&&(o=t[this.primaryKey],i=!0),o){if(n=this.storage.getItem(this.path+o),n=n?this.db.decryptData(n).data:null,n&&i&&!queryMatch(t,n))return null}else r.length?a?n=this.find(t,e):(n=this._filter((e,n)=>queryMatch(t,n),s),Array.isArray(n)?n=n.map(t=>t.data):n&&(n=n.data)):n=a?this.find(t,e):this._filter(null,s);return!o&&a&&n&&(n=n[0].data||null),n&&"id"===s.type&&(n=this.path+n[this.primaryKey]),n}remove(t,e){if(!t)throw new Error("remove needs a query");(e=e||{}).multi=void 0===e.multi||e.multi;let n=e.multi?"find":"findOne",o=null;o="find"===n?this[n](t,{_filterType:"id"},!0):this[n](t,{_filterType:"id"});let r=this.cacheable;if(e.multi&&!o.length||!e.multi&&!o)return 0;e.multi||(o=[o]);for(let t of o)r&&delete this.cache[t],this.storage.removeItem(t);return o.length}update(t,e,n){if(!t)throw new Error("update needs a query");if(!e||!isObject(e))throw new Error("update needs an object");(n=n||{}).multi=void 0!==n.multi&&n.multi;let o=this[n.multi?"find":"findOne"](t,{_filterType:"id"}),r=this.primaryKey,i=this.cacheable;if(n.multi&&!o.length||!n.multi&&!o)return 0;if(n.multi){if(delete e[r],!Object.keys(e).length)return 0;for(let t of o){let n=i?this.cache[t]:this.db.decryptData(this.storage.getItem(t)),o=Object.assign({},n.data,e);i&&(this.cache[t]={offlineDate:n.offlineDate,offlineDateExpires:n.offlineDateExpires,data:o});const r=this.db.encryptData({offlineDate:n.offlineDate,offlineDateExpires:n.offlineDateExpires,data:o});this.storage.setItem(t,r)}return o.length}{let t=o,n=i?this.cache[t]:this.db.decryptData(this.storage.getItem(t)),a=e[r]&&e[r]!==n.data[r],s=a?this.path+e[r]:t;if(a&&this.findOne(e[r]))throw new Error("Duplicate value '"+e[r]+"' for unique field '"+r+"'");let l=Object.assign({},n.data,e);i&&(this.cache[s]={offlineDate:n.offlineDate,offlineDateExpires:n.offlineDateExpires,data:l},a&&delete this.cache[t]);const c=this.db.encryptData({offlineDate:n.offlineDate,offlineDateExpires:n.offlineDateExpires,data:l});return this.storage.setItem(s,c),a&&this.storage.removeItem(t),l}}drop(){return this.remove({}),!0}}class ID{constructor(){}toString(){return((new Date).getTime()/1e3).toString(16).substr(-4)+Math.random().toString(16).substr(2,12)}}class MockStorage{length=0;constructor(){this.length=0}key(){}setItem(){}getItem(){}removeItem(){}}const isSupported=t=>{if(!(t&&t instanceof Object))return!1;try{return t.setItem("_supported","1"),t.removeItem("_supported"),!0}catch(t){return!1}},isObject=t=>t instanceof Object&&"Object"===t.constructor.name,queryMatch=(t,e)=>{if(!t||!Object.keys(t).length)return!0;for(let n of Object.keys(t)){let o=t[n];if("$or"===n&&Array.isArray(o))return o.some(t=>queryMatch(t,e));if("$and"===n&&Array.isArray(o))return o.every(t=>queryMatch(t,e));if("$in"===n&&Array.isArray(o))return o.includes(e);if("$nin"===n&&Array.isArray(o))return!o.includes(e);if("$exists"===n&&"boolean"==typeof o)return o?void 0!==e:void 0===e;let r=e[n];if(r||n.split(".").forEach(t=>{r=r?r[t]:e[t]}),o instanceof RegExp){if(!o.test(r))return!1}else if(isObject(o)){for(let t of Object.keys(o))if(Operator._checkExist(t)&&!Operator[t](o[t],r))return!1}else if(o!==r)return!1}return!0},sortCompare=(t,e,n,o,r)=>{o=o||0;let i=(r=r||Object.keys(t))[o];return i?e[i]===n[i]?(o++,sortCompare(t,e,n,o,r)):1===t[i]?e[i]-n[i]:-1===t[i]?n[i]-e[i]:void 0:0},ops=["$eq","$gt","$gte","$in","$lt","$lte","$ne","$nin"],isNotNumber=t=>"number"!=typeof t;class Operator{static $eq(t,e){return e===t}static $gt(t,e){if(isNotNumber(t))throw new Error("'$gt' value must be a number");return e>t}static $gte(t,e){if(isNotNumber(t))throw new Error("'$gte' value must be a number");return e>=t}static $lt(t,e){if(isNotNumber(t))throw new Error("'$lt' value must be a number");return e<t}static $lte(t,e){if(isNotNumber(t))throw new Error("'$lte' value must be a number");return e<=t}static $ne(t,e){return e!==t}static $in(t,e){if(!(t instanceof Array))throw new Error("'$in' value must be an array");return t.includes(e)}static $nin(t,e){if(!(t instanceof Array))throw new Error("'$nin' value must be an array");return!t.includes(e)}static $exists(t,e){return t?void 0!==e:void 0===e}static $regex(t,e){if(!(t instanceof RegExp))throw new Error("'$regex' value must be a RegExp");return t.test(e)}static _checkExist(t){if(["$eq","$gt","$gte","$in","$lt","$lte","$ne","$nin","$exists","$regex"].includes(t))return!0;throw new Error("unknown operator: '"+t+"'")}}class OfflineManagerService{_storage;storageInitialized=new BehaviorSubject(!1);offlineMode=new BehaviorSubject(!0);_offlineDB;constructor(t){this._storage=t}initStorage(t){this._offlineDB=new StorageDB({storage:window.localStorage,database:"offlineDB",primaryKey:"_id",secretKey:t}),this._offlineDB.getCollections().forEach(t=>{let e=this.find(t,{},{},!0);e.some(t=>!t)?this.dropCollection(t):e.forEach(e=>{e&&e.offlineDateExpires&&"function"==typeof e.offlineDateExpires.getTime&&Date.now()>=e.offlineDateExpires.getTime()&&this.removeDocument(t,e.data._id)})});let e=this._storage.get("user");if(e){if(null===this._offlineDB.decryptData(e)){const t=this._offlineDB.encryptData(e);this._storage.set("user",t)}}let n=this._storage.get("lastURL");if(n){if(null===this._offlineDB.decryptData(n)){const t=this._offlineDB.encryptData(n);this._storage.set("lastURL",t)}}let o=this._storage.get("accessToken");if(o){if(null===this._offlineDB.decryptData(o)){const t=this._offlineDB.encryptData(o);this._storage.set("accessToken",t)}}let r=this._storage.get("refreshToken");if(r){if(null===this._offlineDB.decryptData(r)){const t=this._offlineDB.encryptData(r);this._storage.set("refreshToken",t)}}this.storageInitialized.next(!0)}getStorage(){return this._offlineDB}setOffline(t){this.offlineMode.next(t)}saveUser(t){return this._storage.set("user",this._offlineDB.encryptData(t))}getUser(){return this._storage.get("user")?this._offlineDB.decryptData(this._storage.get("user")):null}removeUser(){this._storage.remove("user")}find(t,e,n={},o=!1){const r=this._offlineDB.get(t);return r?r.find(e,n,o):[]}findOne(t,e){const n=this._offlineDB.get(t);return n?n.findOne(e):null}insertDocument(t,e,n){const o=this._offlineDB.get(t);let r="";return o&&e&&(!Array.isArray(e)||e.length)&&(r=o.insert(e,n)),r}updateDocument(t,e){const n=this._offlineDB.get(t);if(n){if(n.findOne({_id:e._id}))return e.__v+=1,n.update(e._id,e),1}return 0}updateDocumentProps(t,e,n,o){const r=this._offlineDB.get(t);if(r){let t=r.findOne({_id:e});if(t)return n.forEach(e=>{t[e.prop]=e.data}),t.__v+=1,r.update({_id:e},t),1}return 0}removeDocument(t,e){const n=this._offlineDB.get(t);n&&n.remove(e)}dropCollection(t){this._offlineDB.get(t).drop()}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:OfflineManagerService,deps:[{token:LocalStorageService}],target:i0.ɵɵFactoryTarget.Injectable});static"ɵprov"=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:OfflineManagerService})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:OfflineManagerService,decorators:[{type:Injectable}],ctorParameters:()=>[{type:LocalStorageService}]});class TokenManagerService{_storage;_offline;constructor(t,e){this._storage=t,this._offline=e}getToken(t){let e=this._storage.get(t);return e?this._offline.getStorage().decryptData(e):null}setToken(t,e){this._storage.set(t,this._offline.getStorage().encryptData(e))}removeToken(t){null!==this.getToken(t)&&this._storage.remove(t)}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:TokenManagerService,deps:[{token:LocalStorageService},{token:OfflineManagerService}],target:i0.ɵɵFactoryTarget.Injectable});static"ɵprov"=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:TokenManagerService})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:TokenManagerService,decorators:[{type:Injectable}],ctorParameters:()=>[{type:LocalStorageService},{type:OfflineManagerService}]});class SocketManagerService{_socket;_offline;_alert;_router;_token;socketStatus;messageId=0;_cbArray=[];_subArray=[];_offlineUpdates=[];_pendingMessages=[];_sendTimeout=null;_currentLockId="";_chunkAssemblies=new Map;_chunkProgressThresholdBytes=1048576;_chunkTextDecoder=new TextDecoder;_connectionDelayTimeout=null;onerror=function(){};constructor(t,e,n,o,r){this._socket=t,this._offline=e,this._alert=n,this._router=o,this._token=r}getSubArray(){return this._subArray}initSocketManager(){this._socket.readyState$.subscribe(t=>{this.socketStatus=t}),this._socket.onmessage=t=>{this.handleMessage(t)},this._socket.onopen=t=>{this._connectionDelayTimeout=setTimeout(async()=>{if(this._connectionDelayTimeout=null,this._offline.setOffline(!1),this._subArray.forEach(t=>{this.send(t.messageRoute,new Date,t.messageId,"subscription","sub",t.subscription,...t.parameters)}),!await this.acquireLock("processingOfflineUpdates"))return;let t=this._offline.find("collectionOffline",{}).sort((t,e)=>t.date.getTime()-e.date.getTime()),e=this._offline.find("methodOffline",{}).sort((t,e)=>t.date.getTime()-e.date.getTime());t.length||e.length?(t.forEach(t=>{let e=this.messageId++;this._offlineUpdates.push({id_offline_doc:t._id,messageId:e,type:"collectionOffline"}),t.data[2]=e,"updateDocument"===t.type?(t.data[4]="updateDocumentOffline",t.data[0]="Offline - "+t.data[0]):"updateDocumentProps"===t.type?(t.data[4]="updateDocumentPropsOffline",t.data[0]="Offline - "+t.data[0]):t.data[0]="Offline - "+t.data[0]}),e.forEach(t=>{let e=this.messageId++;this._offlineUpdates.push({id_offline_doc:t._id,messageId:e,type:"methodOffline"}),t.data[2]=e,t.data[0]="Offline - "+t.data[0]}),this.send("Offline Updates",new Date,this.messageId++,"offline",t.concat(e).sort((t,e)=>t.date.getTime()-e.date.getTime()))):this.releaseLock("processingOfflineUpdates")},100)},this._socket.onerror=t=>{this._connectionDelayTimeout&&clearTimeout(this._connectionDelayTimeout),console.log(new Date,"SOCKET ERROR",t),this.onerror()},this._socket.onclose=t=>{this._connectionDelayTimeout&&clearTimeout(this._connectionDelayTimeout),this._chunkAssemblies.forEach(t=>this.dismissChunkAlert(t)),this._chunkAssemblies.clear()}}handleMessage(t){for(let e of t)this.processReceivedMessage(e)}async acquireLock(t,e=6e4,n=100){let o=Date.now(),r=this.generateUniqueId(),i=JSON.stringify({lockId:r,timestamp:o}),a=this._token.getToken(t);if(a){let{lockId:n,timestamp:r}=JSON.parse(a);if(!(o>r+e))return!1;this._token.setToken(t,i)}else this._token.setToken(t,i);await this.sleep(n);let s=this._token.getToken(t);if(s){let{lockId:t,timestamp:n}=JSON.parse(s);if(t===r&&o<=n+e)return this._currentLockId=r,!0}return!1}sleep(t){return new Promise(e=>setTimeout(e,t))}releaseLock(t){let e=this._token.getToken(t);if(e){let{lockId:n}=JSON.parse(e);n===this._currentLockId&&this._token.removeToken(t)}}generateUniqueId(){return`${Date.now()}-${Math.random().toString(36).substr(2,9)}`}processReceivedMessage(t){if(this.handleChunkedPayload(t))return;let e=this._offlineUpdates.findIndex(e=>e.messageId===t.messageId);if(e>=0&&(this._offline.removeDocument(this._offlineUpdates[e].type,this._offlineUpdates[e].id_offline_doc),this._offlineUpdates.splice(e,1),this._offlineUpdates.length||this.releaseLock("processingOfflineUpdates")),"ACK"!==t.data&&"NACK"!==t.data)if(this._cbArray.map(t=>t.messageId).includes(t.messageId)){let e=this._cbArray.findIndex(e=>e.messageId===t.messageId);e>=0&&(this._cbArray[e].cb?(this._cbArray[e].cb(t.hasError?t.data:null,t.hasError?null:t.data),this._cbArray[e].resolveFn(t.hasError?t.data:null)):t.hasError?this._cbArray[e].rejectFn(t.data):this._cbArray[e].resolveFn(t.data),this._cbArray.splice(e,1))}else if(this._subArray.map(t=>t.messageId).includes(t.messageId)){let e=this._subArray.findIndex(e=>e.messageId===t.messageId);e>=0&&this._subArray[e].subject.next(t.data)}}handleChunkedPayload(t){const e=t&&t.data;if(!e||"object"!=typeof e||!e.__chunked)return!1;const n=e.chunkId;if(!n)return!0;if("start"===e.chunkStatus)return this._chunkAssemblies.set(n,this.createChunkAssembly(n,t,e)),!0;const o=this._chunkAssemblies.get(n);if(!o)return!0;if("chunk"===e.chunkStatus)return this.appendChunkPayload(o,e),this.emitChunkProgress(o),!0;if("end"===e.chunkStatus){if(o.totalChunks&&o.receivedChunks!==o.totalChunks)return this.handleChunkFailure(o,"Incomplete chunk sequence"),this._chunkAssemblies.delete(n),!0;const e=this.tryDecodeChunkBuffer(o,!0);return void 0===e?(this.handleChunkFailure(o,"Failed to decode chunk payload"),this._chunkAssemblies.delete(n),!0):(t.data=e,this.dismissChunkAlert(o),this._chunkAssemblies.delete(n),!1)}return!0}createChunkAssembly(t,e,n){const o=n.totalBytes||0,r={chunkId:t,messageId:e.messageId,hasError:!!e.hasError,encoding:"msgpack"===n.encoding?"msgpack":"json",totalChunks:n.totalChunks||0,totalBytes:o,buffer:o?new Uint8Array(o):new Uint8Array(0),filledBytes:0,receivedChunks:0,targetType:null,showProgress:!1,lastPercent:-1},i=this._subArray.find(t=>t.messageId===e.messageId);if(i)r.targetType="subscription",r.subscription=i;else{const t=this._cbArray.find(t=>t.messageId===e.messageId);t&&(r.targetType="callback",r.callback=t)}return this.initializeChunkProgress(r),r}initializeChunkProgress(t){this.shouldShowChunkProgress(t)&&(t.showProgress=!0,t.lastPercent=-1,this.updateChunkProgress(t,!0))}shouldShowChunkProgress(t){return!!(t.totalBytes&&t.totalBytes>=this._chunkProgressThresholdBytes)||t.totalChunks>1}appendChunkPayload(t,e){const n=this.extractChunkBytes(e,t.encoding);if(n&&n.byteLength){if(t.buffer&&t.buffer.byteLength>=t.filledBytes+n.byteLength)t.buffer.set(n,t.filledBytes);else if(t.buffer&&t.buffer.byteLength){const e=new Uint8Array(t.filledBytes+n.byteLength);e.set(t.buffer.subarray(0,t.filledBytes),0),e.set(n,t.filledBytes),t.buffer=e,t.totalBytes=t.buffer.byteLength}else t.buffer=new Uint8Array(n),t.totalBytes=t.buffer.byteLength;t.filledBytes+=n.byteLength,t.receivedChunks++,this.updateChunkProgress(t)}}updateChunkProgress(t,e=!1){if(!t.showProgress&&!e)return;if(!t.showProgress&&this.shouldShowChunkProgress(t))t.showProgress=!0;else if(!t.showProgress)return;const n=this.getChunkProgressPercent(t);if(null===n)return;if(!e){if(t.lastPercent>=n)return;if(t.lastPercent>=0&&n<100&&n-t.lastPercent<5)return}t.lastPercent=n;const o=this.buildChunkProgressMessage(t,n);t.alertToast?this.updateChunkAlertMessage(t.alertToast,o):(t.alertToast=this._alert.setAlert("update",o,0),this.configureChunkAlert(t.alertToast))}emitChunkProgress(t){if("subscription"!==t.targetType||!t.subscription)return;if(t.totalChunks&&t.receivedChunks>=t.totalChunks)return;const e=this.tryDecodeChunkBuffer(t,!1);void 0!==e&&t.subscription.subject.next(e)}handleChunkFailure(t,e){const n={chunkId:t.chunkId,message:e};if(console.error(new Date,"WEBSOCKET CHUNK",e,t.chunkId),this.dismissChunkAlert(t),"subscription"===t.targetType&&t.subscription)return void t.subscription.subject.error(n);const o=this._cbArray.findIndex(e=>e.messageId===t.messageId);if(o>=0){const t=this._cbArray[o];t.cb&&t.cb(n,null),t.rejectFn?t.rejectFn(n):t.resolveFn&&t.resolveFn(n),this._cbArray.splice(o,1)}}tryDecodeChunkBuffer(t,e){if(t.buffer&&t.filledBytes)try{const e=t.filledBytes===t.buffer.byteLength?t.buffer:t.buffer.subarray(0,t.filledBytes);if("msgpack"===t.encoding)return unpack(e);const n=this._chunkTextDecoder.decode(e);return JSON.parse(n,dateReviver)}catch(n){return void(e&&console.error(new Date,"WEBSOCKET CHUNK","Failed to decode chunk payload",t.chunkId,n))}}extractChunkBytes(t,e){return"msgpack"===e?this.ensureUint8Array(t.payload):"string"==typeof t.payload?this.base64ToUint8Array(t.payload):null}ensureUint8Array(t){return t?t instanceof Uint8Array?t:t instanceof ArrayBuffer?new Uint8Array(t):ArrayBuffer.isView(t)?new Uint8Array(t.buffer,t.byteOffset,t.byteLength):Array.isArray(t)?new Uint8Array(t):"string"==typeof t?this.base64ToUint8Array(t):null:null}base64ToUint8Array(t){const e=atob(t),n=new Uint8Array(e.length);for(let t=0;t<e.length;t++)n[t]=e.charCodeAt(t);return n}dismissChunkAlert(t){t.alertToast&&(this._alert.clearAlert(t.alertToast.toastId),t.alertToast=void 0),t.showProgress=!1,t.lastPercent=-1}getChunkProgressPercent(t){if(t.totalBytes){const e=Math.min(t.filledBytes,t.totalBytes);return Math.min(100,Math.floor(e/t.totalBytes*100))}if(t.totalChunks){const e=Math.min(t.receivedChunks,t.totalChunks);return Math.min(100,Math.floor(e/t.totalChunks*100))}return null}buildChunkProgressMessage(t,e){const n=t.totalBytes,o=n?Math.min(t.filledBytes,n):0;if(n)return`Downloading data (${e}% • ${this.formatBytes(o)} of ${this.formatBytes(n)})`;if(t.totalChunks){return`Downloading data (${e}% • chunk ${Math.min(t.receivedChunks,t.totalChunks)} of ${t.totalChunks})`}return`Downloading data (${e}%)`}formatBytes(t){if(!t)return"0 B";const e=["B","KB","MB","GB","TB"],n=Math.min(e.length-1,Math.floor(Math.log(t)/Math.log(1024))),o=t/Math.pow(1024,n);return`${o>=10?o.toFixed(0):o.toFixed(1)} ${e[n]}`}configureChunkAlert(t){t&&(t.message=t.message||"",t.portal?.instance&&(t.portal.instance.options.disableTimeOut=!0,t.portal.instance.options.tapToDismiss=!0,t.portal.instance.options.closeButton=!1,t.portal.instance.message=t.message),t.toastRef?.componentInstance&&(t.toastRef.componentInstance.options.disableTimeOut=!0,t.toastRef.componentInstance.options.tapToDismiss=!0,t.toastRef.componentInstance.options.closeButton=!1,t.toastRef.componentInstance.message=t.message))}updateChunkAlertMessage(t,e){t.message=e,t.portal?.instance&&(t.portal.instance.message=e),t.toastRef?.componentInstance&&(t.toastRef.componentInstance.message=e)}openSocket(t,e){this._socket.openSocket(t,e)}closeSocket(){this._token.removeToken("accessToken"),this._socket.close()}call(t,...e){let n=null,o=null,r=new Promise((t,e)=>{n=t,o=e}),i=this.messageId++;e[e.length-1]&&"function"==typeof e[e.length-1]?this._cbArray.push({messageId:i,cb:e.pop(),resolveFn:n,rejectFn:o,retryCnt:0}):this._cbArray.push({messageId:i,cb:null,resolveFn:n,rejectFn:o,retryCnt:0});let a=e.length;for(;(void 0===e[e.length-1]||null===e[e.length-1])&&a>0;)e.pop(),a=e.length;return this.send(this._router.url.includes("?")?this._router.url.substring(0,this._router.url.indexOf("?")):this._router.url,new Date,i,"method",t,...e),r}subscribe(t,...e){const n=deepCopy(e),o=new Subject;let r=this.messageId++;this._subArray.push({messageId:r,messageRoute:this._router.url.includes("?")?this._router.url.substring(0,this._router.url.indexOf("?")):this._router.url,subscription:t,parameters:n,subject:o});const i=o.pipe(finalize(()=>{this.unsubscribe(r,t,...n),this._subArray.splice(this._subArray.map(t=>t.messageId).indexOf(r),1)}));return this.send(this._router.url.includes("?")?this._router.url.substring(0,this._router.url.indexOf("?")):this._router.url,new Date,r,"subscription","sub",t,...n),i}subscribeBypassRoute(t,...e){const n=deepCopy(e),o=new Subject;let r=this.messageId++;this._subArray.push({messageId:r,messageRoute:"Bypass",subscription:t,parameters:n,subject:o});const i=o.pipe(finalize(()=>{this.unsubscribe(r,t,...n),this._subArray.splice(this._subArray.map(t=>t.messageId).indexOf(r),1)}));return this.send("Bypass",new Date,r,"subscription","sub",t,...n),i}unsubscribe(t,e,...n){this.send(this._router.url.includes("?")?this._router.url.substring(0,this._router.url.indexOf("?")):this._router.url,new Date,t,"subscription","unsub",e,...n)}send(...t){this.socketStatus===WebSocket.OPEN?(this._pendingMessages.push(t),this._sendTimeout||(this._sendTimeout=setTimeout(()=>{this._sendTimeout=null;const t=[...this._pendingMessages];this._pendingMessages=[],this._socket.send(t)},25))):"method"===t[3]&&this.handleOfflineMethod(t)}handleOfflineMethod(t){if("insertDocument"===t[4]){if("driver-gps"===t[5])return;this._alert.setAlert("warning","This insert command has not taken place on the server yet because you are offline. It will automatically sync up next time you are online as long as you do not clear your cache!"),this._offline.insertDocument("collectionOffline",{type:"insert",data:t,date:new Date});let e=this._offline.insertDocument(t[5],t[6]),n=this._cbArray.filter(e=>e.messageId===t[2])[0];n&&n.cb&&(n.cb(null,e),this._cbArray.splice(this._cbArray.findIndex(e=>e.messageId===t[2]),1))}else if("updateDocument"===t[4]){this._alert.setAlert("warning","This update command has not taken place on the server yet because you are offline. It will automatically sync up next time you are online as long as you do not clear your cache!"),this._offline.insertDocument("collectionOffline",{type:"updateDocument",data:t,date:new Date}),this._offline.findOne(t[5],{_id:t[6]._id})?this._offline.updateDocument(t[5],t[6]):console.log("Could not find Offline data",t[5],t[6]);let e=this._cbArray.filter(e=>e.messageId===t[2])[0];e&&e.cb&&(e.cb(null,1),this._cbArray.splice(this._cbArray.findIndex(e=>e.messageId===t[2]),1))}else if("updateDocumentProps"===t[4]){this._alert.setAlert("warning","This update command has not taken place on the server yet because you are offline. It will automatically sync up next time you are online as long as you do not clear your cache!"),this._offline.insertDocument("collectionOffline",{type:"updateDocumentProps",data:t,date:new Date}),this._offline.findOne(t[5],{_id:t[6]})?this._offline.updateDocumentProps(t[5],t[6],t[7],t[8]):console.log("Could not find Offline data",t[5],t[6]);let e=this._cbArray.filter(e=>e.messageId===t[2])[0];e&&e.cb&&(e.cb(null,1),this._cbArray.splice(this._cbArray.findIndex(e=>e.messageId===t[2]),1))}else if("removeDocument"===t[4]){this._alert.setAlert("warning","This remove command has not taken place on the server yet because you are offline. It will automatically sync up next time you are online as long as you do not clear your cache!"),this._offline.insertDocument("collectionOffline",{type:"removeDocument",data:t,date:new Date}),this._offline.findOne(t[5],{_id:t[6]})?this._offline.removeDocument(t[5],t[6]):console.log("Could not find Offline data",t[5],t[6]);let e=this._cbArray.filter(e=>e.messageId===t[2])[0];e&&e.cb&&(e.cb(null,1),this._cbArray.splice(this._cbArray.findIndex(e=>e.messageId===t[2]),1))}else t[0].includes("/dashboard/driver/")&&this._offline.insertDocument("methodOffline",{type:t[4],data:t,date:new Date})}getStatus(){return this._socket.readyState$}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SocketManagerService,deps:[{token:SocketService},{token:OfflineManagerService},{token:AlertService},{token:i1$1.Router},{token:TokenManagerService}],target:i0.ɵɵFactoryTarget.Injectable});static"ɵprov"=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SocketManagerService})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SocketManagerService,decorators:[{type:Injectable}],ctorParameters:()=>[{type:SocketService},{type:OfflineManagerService},{type:AlertService},{type:i1$1.Router},{type:TokenManagerService}]});class AccountManagerService{_router;_socket;_token;_http;_alert;_offline;user=new BehaviorSubject(null);initCompleted=new BehaviorSubject(!1);loginCompleted=new BehaviorSubject(!1);user$;environment=null;constructor(t,e,n,o,r,i){this._router=t,this._socket=e,this._token=n,this._http=o,this._alert=r,this._offline=i}initLoginManager(t){this.environment=t,this._offline.storageInitialized.subscribe(t=>{this._socket.initSocketManager();let e=this._token.getToken("refreshToken");e?(this.initLogin(e),setInterval(()=>{e=this._token.getToken("refreshToken"),this.initLogin(e)},3e3)):this.initCompleted.next(!0)})}initLogin(t){if(navigator.onLine)this._offline.offlineMode.getValue()&&(this._offline.setOffline(!1),this.getAccessToken(t));else if(!this._offline.offlineMode.getValue()||!this.initCompleted.getValue()){this.closeSocket(),this._offline.setOffline(!0);let t=this._offline.getUser();t&&this.user.next(t),this.initCompleted.getValue()||this.initCompleted.next(!0)}}getAccessToken(t){t&&this._http.post(this.environment.SERVER_URL+"/accessToken",{refreshToken:t}).toPromise().then(t=>{t.error?this.initCompleted.next(!0):(this._token.setToken("accessToken",t.result.token),this.user.next(t.result.user),this.openSocket(t.result.token),this.user$&&this.user$.unsubscribe(),this.user$=this._socket.subscribeBypassRoute("userWithId",t.result.user._id).subscribe(t=>{t&&(this.user.getValue()&&this.user.getValue()._id!==t._id?this._socket.call("incorrectUser",this.user.getValue(),t,this._socket.getSubArray()):(this.user.next(t),this.loginCompleted.next(!0),this.initCompleted.next(!0),this._offline.saveUser(t)))}))},t=>{this.initCompleted.next(!0)})}logIn(t,e){return new Promise((n,o)=>{this._http.post(this.environment.SERVER_URL+"/login",{username:t,password:e}).toPromise().then(t=>{t.error?(this._alert.setAlert("error",t.result),o(t.result)):(this._token.setToken("refreshToken",t.result.token),this.getAccessToken(t.result.token),n(t.result.token))},t=>{})})}logIn365(t){return new Promise((e,n)=>{this._http.post(this.environment.SERVER_URL+"/login365",{id_token:t}).toPromise().then(t=>{t.error?(this._alert.setAlert("error",t.result),n(t.result)):(this._token.setToken("refreshToken",t.result.token),this.getAccessToken(t.result.token),e(t.result.token))},t=>{})})}resetUserPassword(t){return new Promise((e,n)=>{this._http.post(this.environment.SERVER_URL+"/resetPassword",{username:t}).toPromise().then(t=>{e(!0)},t=>{})})}logOut(){return new Promise((t,e)=>{this._router.navigateByUrl("/home"),setTimeout(()=>{this.user.next(null),this._token.removeToken("refreshToken"),this._offline.removeUser(),this.closeSocket(),t(!0)},500)})}openSocket(t){this._socket.openSocket(this.environment,[t])}closeSocket(){this._socket.closeSocket()}setUser(t){this.user.next(t)}getUser(){return this.user.getValue()}getSocketStatus(){return this._socket.getStatus()}isUserInView(t){let e=!1;if(this.isUserSuperAdmin())return!0;let n=this.user.getValue();return n&&(n.roles.groups.forEach(n=>{n.views.filter(e=>e.startsWith(t)).length&&(e=!0)}),n.roles.miscs.filter(e=>e.startsWith(t)).length&&(e=!0),n.roles.groups.filter(e=>e.name===t).length&&(e=!0)),e}isUserSuperAdmin(){return this.user.getValue()&&this.user.getValue().roles.super_admin}isInitCompleted(){return new Promise((t,e)=>{if(this.initCompleted.value)t(!0);else{let e=this.initCompleted.subscribe(n=>{n&&(e.unsubscribe(),t(!0))},()=>{})}})}isLoginCompleted(){return new Promise((t,e)=>{if(this.loginCompleted.value)t(!0);else{let e=this.loginCompleted.subscribe(n=>{n&&(e.unsubscribe(),t(!0))})}})}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:AccountManagerService,deps:[{token:i1$1.Router},{token:SocketManagerService},{token:TokenManagerService},{token:i4.HttpClient},{token:AlertService},{token:OfflineManagerService}],target:i0.ɵɵFactoryTarget.Injectable});static"ɵprov"=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:AccountManagerService})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:AccountManagerService,decorators:[{type:Injectable}],ctorParameters:()=>[{type:i1$1.Router},{type:SocketManagerService},{type:TokenManagerService},{type:i4.HttpClient},{type:AlertService},{type:OfflineManagerService}]});class ValidationService{constructor(){}wholeNumbersAllowNegative(t){return""===t.value||null===t.value||/^[\-]?\d+$/.test(t.value)?null:{wholeNumbersAllowNegative:{valid:!1}}}wholeNumbersWithZero(t){return""===t.value||null===t.value||/^[0-9]*$/.test(t.value)?null:{wholeNumbersWithZero:{valid:!1}}}wholeNumbersGreaterThanZero(t){return""===t.value||null===t.value||/^[1-9]+[0-9]*$/.test(t.value)?null:{wholeNumbersGreaterThanZero:{valid:!1}}}decimalWithZero(t){return""===t.value||null===t.value||/^\d*\.?\d*$/.test(t.value)?null:{decimalWithZero:{valid:!1}}}decimalGreaterThanZero(t){return""===t.value||null===t.value||/^\s*(?=.*[1-9])\d*(?:\.\d{1,10})?\s*$/.test(t.value)?null:{decimalGreaterThanZero:{valid:!1}}}currency(t){return""===t.value||null===t.value||/^[0-9]\d*(\.\d+)?$/.test(t.value)?null:{currency:{valid:!1}}}currencyGreaterThanZero(t){return""===t.value||null===t.value||/^[0-9]\d*(\.\d+)?$/.test(t.value)&&t.value>0?null:{currency:{valid:!1}}}currencyAllowNegative(t){return""===t.value||null===t.value||/^[\-]?[0-9]\d*(\.\d+)?$/.test(t.value)?null:{currency:{valid:!1}}}phoneNumber(t){return""===t.value||null===t.value||/^1?([2-9])(\d{9})/.test(t.value)?null:{phoneNumber:{valid:!1}}}email(t){return""===t.value||null===t.value||/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(t.value)?null:{email:{valid:!1}}}matchPassword(t){let e=t.controls.password,n=t.controls.confirm_password;return e.value&&n.value?e.value===n.value?null:{matchPassword:{isValid:!1}}:null}density(t){return""===t.value||null===t.value||/^[\-]?\d*\.?\d*$/.test(t.value)?null:{density:{valid:!1}}}maxValue(t){return e=>("string"==typeof e.value?parseFloat(e.value):e.value)>t?{maxValue:{max:t}}:null}minValue(t){return e=>("string"==typeof e.value?parseFloat(e.value):e.value)<t?{minValue:{min:t}}:null}multipleOf(t){return e=>("string"==typeof e.value?parseFloat(e.value):e.value)%t!==0?{multipleOf:{value:t}}:null}minLengthArray(t){return e=>e.value&&e.value.length>=t?null:{minLengthArray:{valid:!1}}}maxLengthArray(t){return e=>e.value&&e.value.length<=t?null:{maxLengthArray:{valid:!1}}}validIPAddress(t){return""===t.value||null===t.value||/^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/.test(t.value)?null:{validIPAddress:{valid:!1}}}alphaNumericWithDashes(t){return""===t.value||null===t.value||/^[a-zA-Z0-9-_]+$/.test(t.value)?null:{alphaNumericWithDashes:{valid:!1}}}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:ValidationService,deps:[],target:i0.ɵɵFactoryTarget.Injectable});static"ɵprov"=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:ValidationService})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:ValidationService,decorators:[{type:Injectable}],ctorParameters:()=>[]});class AwsService{_socket;constructor(t){this._socket=t}dataURItoFile(t,e){let n=atob(t.split(",")[1]),o=t.split(",")[0].split(":")[1].split(";")[0],r=new ArrayBuffer(n.length),i=new Uint8Array(r);for(let t=0;t<n.length;t++)i[t]=n.charCodeAt(t);let a=new Blob([r],{type:o});return a.lastModifiedDate=new Date,a.name=e,a}uploadFile(t,e,n,o){return new Promise((r,i)=>{t.size?this.getBase64(t).then(a=>{this._socket.call("uploadFileAndSave",o||t.name,a,t.size,n||-1,e,!0,(t,e)=>{e?r(e):i(t)})}):i("Invalid File")})}getFileWithKey(t,e){this._socket.call("getFile",t,e)}getFileWithId(t,e){this._socket.call("findOne","files",{_id:t},(t,n)=>{this.getFileWithKey(n.key,e)})}deleteFile(t,e){this._socket.call("deleteFile",t,e)}deleteFileWithId(t,e){this._socket.call("findOne","files",{_id:t},(t,n)=>{this.deleteFile(n.key,e)})}deleteFilesWithKeys(t,e){this._socket.call("deleteFiles",t,e)}getBase64(t){return new Promise((e,n)=>{const o=new FileReader;o.readAsDataURL(t),o.onload=()=>e(o.result),o.onerror=t=>n(t)})}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:AwsService,deps:[{token:SocketManagerService}],target:i0.ɵɵFactoryTarget.Injectable});static"ɵprov"=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:AwsService})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:AwsService,decorators:[{type:Injectable}],ctorParameters:()=>[{type:SocketManagerService}]});class BaseComponent{providerService;constructor(t){this.providerService=t}}class ProviderService{_app;_router;_socket;_account;_alert;_vs;_aws;_fb;constructor(t,e,n,o,r,i,a,s){this._app=t,this._router=e,this._socket=n,this._account=o,this._alert=r,this._vs=i,this._aws=a,this._fb=s}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:ProviderService,deps:[{token:CoreService},{token:i1$1.Router},{token:SocketManagerService},{token:AccountManagerService},{token:AlertService},{token:ValidationService},{token:AwsService},{token:i2.FormBuilder}],target:i0.ɵɵFactoryTarget.Injectable});static"ɵprov"=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:ProviderService})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:ProviderService,decorators:[{type:Injectable}],ctorParameters:()=>[{type:CoreService},{type:i1$1.Router},{type:SocketManagerService},{type:AccountManagerService},{type:AlertService},{type:ValidationService},{type:AwsService},{type:i2.FormBuilder}]});class DialogNotifyContent{activeModal;title;body;handleKeyboardEvent(t){13===t.keyCode&&this.activeModal.close()}constructor(t){this.activeModal=t}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DialogNotifyContent,deps:[{token:i1$2.NgbActiveModal}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"21.0.1",type:DialogNotifyContent,isStandalone:!1,selector:"resolveio-dialog.notify",inputs:{title:"title",body:"body"},host:{listeners:{"document:keypress":"handleKeyboardEvent($event)"}},ngImport:i0,template:'\n\t\t<div class="modal-header">\n\t\t\t<h4 class="modal-title"><i class="fa fa-info-circle" style="color: blue; font-size: 0.85em" aria-hidden="true"></i> {{ title }}</h4>\n\t \t\t<button type="button" class="btn-close ms-auto" aria-label="Close" (click)="activeModal.dismiss(\'Cross click\')"></button>\n\t\t</div>\n\t\t<div class="modal-body">\n\t \t \t<p>{{ body }}</p>\n\t\t</div>\n\t\t<div class="modal-footer">\n\t \t\t<button type="button" class="btn btn-secondary" (click)="activeModal.close(\'Close click\')">Ok</button>\n\t\t</div>\n ',isInline:!0})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DialogNotifyContent,decorators:[{type:Component,args:[{selector:"resolveio-dialog.notify",template:'\n\t\t<div class="modal-header">\n\t\t\t<h4 class="modal-title"><i class="fa fa-info-circle" style="color: blue; font-size: 0.85em" aria-hidden="true"></i> {{ title }}</h4>\n\t \t\t<button type="button" class="btn-close ms-auto" aria-label="Close" (click)="activeModal.dismiss(\'Cross click\')"></button>\n\t\t</div>\n\t\t<div class="modal-body">\n\t \t \t<p>{{ body }}</p>\n\t\t</div>\n\t\t<div class="modal-footer">\n\t \t\t<button type="button" class="btn btn-secondary" (click)="activeModal.close(\'Close click\')">Ok</button>\n\t\t</div>\n ',standalone:!1}]}],ctorParameters:()=>[{type:i1$2.NgbActiveModal}],propDecorators:{title:[{type:Input}],body:[{type:Input}],handleKeyboardEvent:[{type:HostListener,args:["document:keypress",["$event"]]}]}});class FormButtonComponent extends BaseComponent{_services;form;disabled=!1;type="submit";formButton;constructor(t){super(t),this._services=t}getTipErrors(){let t=[];if(this.form&&this.form.invalid&&"object"==typeof this.form.controls){Object.keys(this.form.controls).forEach(e=>{let n=this.form.controls[e];if(n.invalid&&(t.push(e.replace("_id","").replace("id_","").replace("_"," ").replace(/\b\S/g,function(t){return t.toUpperCase()})+" is invalid"),"object"==typeof n.value&&Array.isArray(n.value)&&n.controls))for(let e=0;e<n.controls.length;e++){let o=n.controls[e];if(o.controls){Object.keys(o.controls).forEach(n=>{o.controls[n].invalid&&t.push("["+e+"] -> "+n.replace("_id","").replace("id_","").replace("_"," ").replace(/\b\S/g,function(t){return t.toUpperCase()})+" is invalid")})}}})}return t}isSuperAdmin(){return!(!this._services._account.getUser()||!this._services._account.getUser().roles.super_admin)}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:FormButtonComponent,deps:[{token:ProviderService}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"21.0.1",type:FormButtonComponent,isStandalone:!1,selector:"form-button",inputs:{form:"form",disabled:"disabled",type:"type"},providers:[ProviderService],viewQueries:[{propertyName:"formButton",first:!0,predicate:["formButton"],descendants:!0}],usesInheritance:!0,ngImport:i0,template:'\n\t\t<div style="position: relative; text-align: left; width: 100%">\n\t\t <ng-template #tipContent>\n\t\t <span style="font-weight: bold">Errors:<br></span>\n\t\t <ul>\n\t\t @for (error of getTipErrors(); track error) {\n\t\t <li>{{error}}</li>\n\t\t }\n\t\t </ul>\n\t\t </ng-template>\n\t\t <div [ngbTooltip]="(getTipErrors().length ? tipContent : \'\')" placement="top-left" #t>\n\t\t <button [type]="type" [ngClass]="[\'btn\', form && form.valid ? \'btn-success\' : \'btn-danger\']" [disabled]="!form || !form.valid || disabled" style="width: 200px" [autofocus]="true" #formButton>Submit</button>\n\t\t </div>\n\t\t</div>\n\t\t',isInline:!0,dependencies:[{kind:"directive",type:i7.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]},{kind:"directive",type:i1$2.NgbTooltip,selector:"[ngbTooltip]",inputs:["animation","autoClose","placement","popperOptions","triggers","positionTarget","container","disableTooltip","tooltipClass","tooltipContext","openDelay","closeDelay","ngbTooltip"],outputs:["shown","hidden"],exportAs:["ngbTooltip"]}]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:FormButtonComponent,decorators:[{type:Component,args:[{providers:[ProviderService],selector:"form-button",template:'\n\t\t<div style="position: relative; text-align: left; width: 100%">\n\t\t <ng-template #tipContent>\n\t\t <span style="font-weight: bold">Errors:<br></span>\n\t\t <ul>\n\t\t @for (error of getTipErrors(); track error) {\n\t\t <li>{{error}}</li>\n\t\t }\n\t\t </ul>\n\t\t </ng-template>\n\t\t <div [ngbTooltip]="(getTipErrors().length ? tipContent : \'\')" placement="top-left" #t>\n\t\t <button [type]="type" [ngClass]="[\'btn\', form && form.valid ? \'btn-success\' : \'btn-danger\']" [disabled]="!form || !form.valid || disabled" style="width: 200px" [autofocus]="true" #formButton>Submit</button>\n\t\t </div>\n\t\t</div>\n\t\t',standalone:!1}]}],ctorParameters:()=>[{type:ProviderService}],propDecorators:{form:[{type:Input}],disabled:[{type:Input}],type:[{type:Input}],formButton:[{type:ViewChild,args:["formButton",{static:!1}]}]}});class FocusDirective{element;focus;constructor(t){this.element=t}ngOnChanges(){this.focus&&this.element.nativeElement.focus()}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:FocusDirective,deps:[{token:i0.ElementRef}],target:i0.ɵɵFactoryTarget.Directive});static"ɵdir"=i0.ɵɵngDeclareDirective({minVersion:"14.0.0",version:"21.0.1",type:FocusDirective,isStandalone:!1,selector:"[focus]",inputs:{focus:"focus"},usesOnChanges:!0,ngImport:i0})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:FocusDirective,decorators:[{type:Directive,args:[{selector:"[focus]",standalone:!1}]}],ctorParameters:()=>[{type:i0.ElementRef}],propDecorators:{focus:[{type:Input}]}});class DialogInputContent{_activeModal;_fb;title="";inputFields=[];formInput;states=["Alabama","Alaska","Arizona","Arkansas","California","Colorado","Connecticut","Delaware","Florida","Georgia","Hawaii","Idaho","Illinois","Indiana","Iowa","Kansas","Kentucky","Louisiana","Maine","Maryland","Massachusetts","Michigan","Minnesota","Mississippi","Missouri","Montana","Nebraska","Nevada","New Hampshire","New Jersey","New Mexico","New York","North Carolina","North Dakota","Ohio","Oklahoma","Oregon","Pennsylvania","Rhode Island","South Carolina","South Dakota","Tennessee","Texas","Utah","Vermont","Virginia","Washington","West Virginia","Wisconsin","Wyoming"];constructor(t,e){this._activeModal=t,this._fb=e}ngOnInit(){this.formInput=this._fb.group({});for(let t=0;t<this.inputFields.length;t++){let e=this.inputFields[t].data;"datetime"===this.inputFields[t].type&&(e=this.normalizeDateTimeValue(this.inputFields[t].data)),null===this.inputFields[t].validators?this.formInput.addControl(this.inputFields[t].form,new UntypedFormControl({value:e,disabled:this.inputFields[t].disabled})):this.formInput.addControl(this.inputFields[t].form,new UntypedFormControl({value:e,disabled:this.inputFields[t].disabled},this.inputFields[t].validators))}}normalizeDateTimeValue(t){if(!t)return null;if(Array.isArray(t))return this.mergeDateTimeParts(t[0],t[1]);if(t instanceof Date)return this.mergeDateTimeParts(t,t);if(t.date||t.time||this.isDateStruct(t)||this.isTimeStruct(t)){const e=this.toDateStruct(t.date?t.date:t),n=this.toTimeStruct(t.time?t.time:t);return this.mergeDateTimeParts(e,n||null,t.mode)}return t}mergeDateTimeParts(t,e,n="datetime"){const o={mode:n},r=this.toDateStruct(t),i=this.toTimeStruct(e);return r&&(o.date=r),i&&(o.time=i),o}isDateStruct(t){return t&&void 0!==t.year&&void 0!==t.month&&void 0!==t.day}isTimeStruct(t){return t&&void 0!==t.hour&&void 0!==t.minute}toDateStruct(t){return t?t instanceof Date?{year:t.getFullYear(),month:t.getMonth()+1,day:t.getDate()}:this.isDateStruct(t)?{year:t.year,month:t.month,day:t.day}:t.date?this.toDateStruct(t.date):null:null}toTimeStruct(t){return t?t instanceof Date?{hour:t.getHours(),minute:t.getMinutes(),second:t.getSeconds(),ms:t.getMilliseconds()}:this.isTimeStruct(t)?{hour:t.hour,minute:t.minute,second:t.second||0,ms:t.ms||0}:t.time?this.toTimeStruct(t.time):null:null}validateInput(t,e){if(t.disabled)return"";let n=!0;for(let o=0;o<t.validators.length;o++)e.controls[t.form].hasError([t.validatorErrors[o]])&&(n=!1);return n&&null!==e.controls[t.form].value?"is-valid":!t.validators.length||!t.required&&n?"":"is-invalid"}getErrorMessages(t,e){let n=[];for(let o=0;o<t.validators.length;o++)e.controls[t.form].hasError([t.validatorErrors[o]])&&n.push(t.validatorMsg[o]);return n}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DialogInputContent,deps:[{token:i1$2.NgbActiveModal},{token:i2.FormBuilder}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"21.0.1",type:DialogInputContent,isStandalone:!1,selector:"resolveio-dialog.input",inputs:{title:"title",inputFields:"inputFields"},ngImport:i0,template:'\n\t\t<form [formGroup]="formInput" novalidate (ngSubmit)="_activeModal.close(this.formInput.controls)">\n\t\t <div class="modal-header">\n\t\t <h4 class="modal-title"><i class="fa fa-plus-circle" style="color: green; font-size: 0.85em" aria-hidden="true"></i> {{ title }}</h4>\n\t\t <button type="button" class="btn-close ms-auto" aria-label="Close" (click)="_activeModal.dismiss()"></button>\n\t\t </div>\n\t\t <div class="modal-body">\n\t\t @for (inputField of inputFields; track inputField.label; let i = $index) {\n\t\t <div class="form-group">\n\t\t <label class="form-control-label">{{inputField.label}}</label>\n\t\t @if (formInput.controls[inputField.form].hasError(\'required\') && inputField.required) {\n\t\t <em>- Required</em>\n\t\t }\n\t\t @if (!formInput.controls[inputField.form].hasError(\'required\') && formInput.controls[inputField.form].invalid) {\n\t\t <em>- Invalid</em>\n\t\t }\n\t\t @if (inputField.type !== \'date\' && inputField.type !== \'datetime\' && inputField.type !== \'state\' && inputField.type !== \'textarea\' && inputField.type !== \'number\' && inputField.type !== \'select\' && inputField.type !== \'boolean\') {\n\t\t <input [autofocus]="i === 0 ? true : false" [focus]="i === 0 ? true : false" [formControlName]="inputField.form" [ngClass]="[\'form-control\', validateInput(inputField, formInput)]" [type]="(inputField.type ? inputField.type : \'text\')">\n\t\t @for (errorMsg of getErrorMessages(inputField, formInput); track errorMsg) {\n\t\t <div class="invalid-feedback">{{errorMsg}}</div>\n\t\t }\n\t\t }\n\t\t @if (inputField.type === \'select\') {\n\t\t <ng-select [formControlName]="inputField.form" [ngClass]="[validateInput(inputField, formInput)]" [placeholder]="inputField.placeholder" [options]="inputField.options" optionValueKey="value" optionLabelKey="text"></ng-select>\n\t\t @for (errorMsg of getErrorMessages(inputField, formInput); track errorMsg) {\n\t\t <div class="invalid-feedback">{{errorMsg}}</div>\n\t\t }\n\t\t }\n\t\t @if (inputField.type === \'state\') {\n\t\t <select [formControlName]="inputField.form" [ngClass]="[\'form-control\', validateInput(inputField, formInput)]">\n\t\t <option value="">Select State</option>\n\t\t @for (state of states; track state) {\n\t\t <option [value]="state">{{state}}</option>\n\t\t }\n\t\t </select>\n\t\t @for (errorMsg of getErrorMessages(inputField, formInput); track errorMsg) {\n\t\t <div class="invalid-feedback">{{errorMsg}}</div>\n\t\t }\n\t\t }\n\t\t @if (inputField.type === \'textarea\') {\n\t\t <textarea rows="4" [formControlName]="inputField.form" [ngClass]="[\'form-control\', validateInput(inputField, formInput)]"></textarea>\n\t\t @for (errorMsg of getErrorMessages(inputField, formInput); track errorMsg) {\n\t\t <div class="invalid-feedback">{{errorMsg}}</div>\n\t\t }\n\t\t }\n\t\t @if (inputField.type === \'number\') {\n\t\t <input [formControlName]="inputField.form" type="number" [ngClass]="[\'form-control\', validateInput(inputField, formInput)]">\n\t\t @for (errorMsg of getErrorMessages(inputField, formInput); track errorMsg) {\n\t\t <div class="invalid-feedback">{{errorMsg}}</div>\n\t\t }\n\t\t }\n\t\t @if (inputField.type === \'date\') {\n\t\t <div class="input-group">\n\t\t <rio-date-picker [formControlName]="inputField.form" placeholder="yyyy-mm-dd" [ngClass]="[\'form-control\', validateInput(inputField, formInput)]" selectionMode="date" [enableTime]="false"></rio-date-picker>\n\t\t </div>\n\t\t }\n\t\t @if (inputField.type === \'datetime\') {\n\t\t <div class="input-group">\n\t\t <rio-date-picker [formControlName]="inputField.form" [ngClass]="[\'form-control\', validateInput(inputField, formInput)]" selectionMode="datetime"></rio-date-picker>\n\t\t </div>\n\t\t }\n\t\t @if (inputField.type === \'boolean\') {\n\t\t <div (click)="formInput.controls[inputField.form].setValue(!formInput.controls[inputField.form].value)">\n\t\t @if (formInput.controls[inputField.form].value) {\n\t\t <i class="fa fa-check" style="color: green; font-size: 24px;" aria-hidden="true"></i>\n\t\t }\n\t\t @if (!formInput.controls[inputField.form].value) {\n\t\t <i class="fa fa-times" style="color: red; font-size: 24px;" aria-hidden="true"></i>\n\t\t }\n\t\t </div>\n\t\t }\n\t\t </div>\n\t\t }\n\t\t </div>\n\t\t <div class="modal-footer">\n\t\t <form-button [form]="formInput"></form-button>\n\t\t <button type="button" class="btn btn-secondary" (click)="_activeModal.dismiss()">Cancel</button>\n\t\t </div>\n\t\t</form>\n\t\t',isInline:!0,dependencies:[{kind:"directive",type:i2.ɵNgNoValidate,selector:"form:not([ngNoForm]):not([ngNativeValidate])"},{kind:"directive",type:i2.NgSelectOption,selector:"option",inputs:["ngValue","value"]},{kind:"directive",type:i2.ɵNgSelectMultipleOption,selector:"option",inputs:["ngValue","value"]},{kind:"directive",type:i2.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:i2.NumberValueAccessor,selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]"},{kind:"directive",type:i2.SelectControlValueAccessor,selector:"select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]",inputs:["compareWith"]},{kind:"directive",type:i2.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:i2.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:i2.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:i2.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"component",type:FormButtonComponent,selector:"form-button",inputs:["form","disabled","type"]},{kind:"component",type:i5.NgSelectComponent,selector:"ng-select",inputs:["placeholder","multiple","panelMaxHeight","panelMaxViewportRatio","optionHeight","virtualBuffer","overlayZIndex","autoSizePanel","panelPosition","autoCenterPanel","viewportMargin","panelWidth","panelFullscreenWidth","clearable","templateLabelFromView","searchable","searchMatchMode","defaultSearch","textWrap","compareWith","options","optionLabelKey","optionLabelFn","optionValueKey","optionDisabledKey","optionIdKey","optionGroupKey","disabled","emitOptionObject","debugLog","stickyKey","stickyAutoSave"],outputs:["change"]},{kind:"directive",type:i7.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]},{kind:"component",type:i6.RioDatePickerComponent,selector:"rio-date-picker",inputs:["enableDate","enableTime","selectionMode","firstDayOfWeek","toggleWeekFirstDay","timezone","minDate","maxDate","disabled","label","allowSeconds","minuteStep","panelWidth"],outputs:["change"]},{kind:"directive",type:FocusDirective,selector:"[focus]",inputs:["focus"]}]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DialogInputContent,decorators:[{type:Component,args:[{selector:"resolveio-dialog.input",template:'\n\t\t<form [formGroup]="formInput" novalidate (ngSubmit)="_activeModal.close(this.formInput.controls)">\n\t\t <div class="modal-header">\n\t\t <h4 class="modal-title"><i class="fa fa-plus-circle" style="color: green; font-size: 0.85em" aria-hidden="true"></i> {{ title }}</h4>\n\t\t <button type="button" class="btn-close ms-auto" aria-label="Close" (click)="_activeModal.dismiss()"></button>\n\t\t </div>\n\t\t <div class="modal-body">\n\t\t @for (inputField of inputFields; track inputField.label; let i = $index) {\n\t\t <div class="form-group">\n\t\t <label class="form-control-label">{{inputField.label}}</label>\n\t\t @if (formInput.controls[inputField.form].hasError(\'required\') && inputField.required) {\n\t\t <em>- Required</em>\n\t\t }\n\t\t @if (!formInput.controls[inputField.form].hasError(\'required\') && formInput.controls[inputField.form].invalid) {\n\t\t <em>- Invalid</em>\n\t\t }\n\t\t @if (inputField.type !== \'date\' && inputField.type !== \'datetime\' && inputField.type !== \'state\' && inputField.type !== \'textarea\' && inputField.type !== \'number\' && inputField.type !== \'select\' && inputField.type !== \'boolean\') {\n\t\t <input [autofocus]="i === 0 ? true : false" [focus]="i === 0 ? true : false" [formControlName]="inputField.form" [ngClass]="[\'form-control\', validateInput(inputField, formInput)]" [type]="(inputField.type ? inputField.type : \'text\')">\n\t\t @for (errorMsg of getErrorMessages(inputField, formInput); track errorMsg) {\n\t\t <div class="invalid-feedback">{{errorMsg}}</div>\n\t\t }\n\t\t }\n\t\t @if (inputField.type === \'select\') {\n\t\t <ng-select [formControlName]="inputField.form" [ngClass]="[validateInput(inputField, formInput)]" [placeholder]="inputField.placeholder" [options]="inputField.options" optionValueKey="value" optionLabelKey="text"></ng-select>\n\t\t @for (errorMsg of getErrorMessages(inputField, formInput); track errorMsg) {\n\t\t <div class="invalid-feedback">{{errorMsg}}</div>\n\t\t }\n\t\t }\n\t\t @if (inputField.type === \'state\') {\n\t\t <select [formControlName]="inputField.form" [ngClass]="[\'form-control\', validateInput(inputField, formInput)]">\n\t\t <option value="">Select State</option>\n\t\t @for (state of states; track state) {\n\t\t <option [value]="state">{{state}}</option>\n\t\t }\n\t\t </select>\n\t\t @for (errorMsg of getErrorMessages(inputField, formInput); track errorMsg) {\n\t\t <div class="invalid-feedback">{{errorMsg}}</div>\n\t\t }\n\t\t }\n\t\t @if (inputField.type === \'textarea\') {\n\t\t <textarea rows="4" [formControlName]="inputField.form" [ngClass]="[\'form-control\', validateInput(inputField, formInput)]"></textarea>\n\t\t @for (errorMsg of getErrorMessages(inputField, formInput); track errorMsg) {\n\t\t <div class="invalid-feedback">{{errorMsg}}</div>\n\t\t }\n\t\t }\n\t\t @if (inputField.type === \'number\') {\n\t\t <input [formControlName]="inputField.form" type="number" [ngClass]="[\'form-control\', validateInput(inputField, formInput)]">\n\t\t @for (errorMsg of getErrorMessages(inputField, formInput); track errorMsg) {\n\t\t <div class="invalid-feedback">{{errorMsg}}</div>\n\t\t }\n\t\t }\n\t\t @if (inputField.type === \'date\') {\n\t\t <div class="input-group">\n\t\t <rio-date-picker [formControlName]="inputField.form" placeholder="yyyy-mm-dd" [ngClass]="[\'form-control\', validateInput(inputField, formInput)]" selectionMode="date" [enableTime]="false"></rio-date-picker>\n\t\t </div>\n\t\t }\n\t\t @if (inputField.type === \'datetime\') {\n\t\t <div class="input-group">\n\t\t <rio-date-picker [formControlName]="inputField.form" [ngClass]="[\'form-control\', validateInput(inputField, formInput)]" selectionMode="datetime"></rio-date-picker>\n\t\t </div>\n\t\t }\n\t\t @if (inputField.type === \'boolean\') {\n\t\t <div (click)="formInput.controls[inputField.form].setValue(!formInput.controls[inputField.form].value)">\n\t\t @if (formInput.controls[inputField.form].value) {\n\t\t <i class="fa fa-check" style="color: green; font-size: 24px;" aria-hidden="true"></i>\n\t\t }\n\t\t @if (!formInput.controls[inputField.form].value) {\n\t\t <i class="fa fa-times" style="color: red; font-size: 24px;" aria-hidden="true"></i>\n\t\t }\n\t\t </div>\n\t\t }\n\t\t </div>\n\t\t }\n\t\t </div>\n\t\t <div class="modal-footer">\n\t\t <form-button [form]="formInput"></form-button>\n\t\t <button type="button" class="btn btn-secondary" (click)="_activeModal.dismiss()">Cancel</button>\n\t\t </div>\n\t\t</form>\n\t\t',standalone:!1}]}],ctorParameters:()=>[{type:i1$2.NgbActiveModal},{type:i2.FormBuilder}],propDecorators:{title:[{type:Input}],inputFields:[{type:Input}]}});class DialogErrorContent{activeModal;title;body;handleKeyboardEvent(t){13===t.keyCode&&this.activeModal.close()}constructor(t){this.activeModal=t}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DialogErrorContent,deps:[{token:i1$2.NgbActiveModal}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"21.0.1",type:DialogErrorContent,isStandalone:!1,selector:"resolveio-dialog.error",inputs:{title:"title",body:"body"},host:{listeners:{"document:keypress":"handleKeyboardEvent($event)"}},ngImport:i0,template:'\n\t\t<div class="modal-header">\n\t\t\t<h4 class="modal-title"><i class="fa fa-times-circle" style="color: red; font-size: 0.85em" aria-hidden="true"></i> {{ title }}</h4>\n\t\t\t<button type="button" class="btn-close ms-auto" aria-label="Close" (click)="activeModal.dismiss(\'Cross click\')"></button>\n\t\t</div>\n\t\t<div class="modal-body">\n\t\t\t<p>{{ body }}</p>\n\t\t</div>\n\t\t<div class="modal-footer">\n\t\t\t<button type="button" class="btn btn-secondary" (click)="activeModal.close(\'Close click\')">Ok</button>\n\t\t</div>\n \t',isInline:!0})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DialogErrorContent,decorators:[{type:Component,args:[{selector:"resolveio-dialog.error",template:'\n\t\t<div class="modal-header">\n\t\t\t<h4 class="modal-title"><i class="fa fa-times-circle" style="color: red; font-size: 0.85em" aria-hidden="true"></i> {{ title }}</h4>\n\t\t\t<button type="button" class="btn-close ms-auto" aria-label="Close" (click)="activeModal.dismiss(\'Cross click\')"></button>\n\t\t</div>\n\t\t<div class="modal-body">\n\t\t\t<p>{{ body }}</p>\n\t\t</div>\n\t\t<div class="modal-footer">\n\t\t\t<button type="button" class="btn btn-secondary" (click)="activeModal.close(\'Close click\')">Ok</button>\n\t\t</div>\n \t',standalone:!1}]}],ctorParameters:()=>[{type:i1$2.NgbActiveModal}],propDecorators:{title:[{type:Input}],body:[{type:Input}],handleKeyboardEvent:[{type:HostListener,args:["document:keypress",["$event"]]}]}});class DialogConfirmContent{activeModal;title;body;html;handleKeyboardEvent(t){13===t.keyCode&&this.activeModal.close()}constructor(t){this.activeModal=t}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DialogConfirmContent,deps:[{token:i1$2.NgbActiveModal}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"21.0.1",type:DialogConfirmContent,isStandalone:!1,selector:"resolveio-dialog.confirm",inputs:{title:"title",body:"body",html:"html"},host:{listeners:{"document:keypress":"handleKeyboardEvent($event)"}},ngImport:i0,template:'\n\t\t<div class="modal-header">\n\t\t\t<h4 class="modal-title"><i class="fa fa-question-circle" style="color: blue; font-size: 0.85em" aria-hidden="true"></i> {{ title }}</h4>\n\t\t\t<button type="button" class="btn-close ms-auto" aria-label="Close" (click)="activeModal.dismiss(\'Cross click\')"></button>\n\t\t</div>\n\t\t<div class="modal-body">\n\t\t\t<p>{{ body }}</p>\n\t\t\t<div [innerHTML]="html"></div>\n\t\t</div>\n\t\t<div class="modal-footer">\n\t\t\t<button type="button" class="btn btn-success" (click)="activeModal.close()">Yes</button>\n\t\t\t<button type="button" class="btn btn-danger" (click)="activeModal.dismiss()">No</button>\n\t\t</div>\n \t',isInline:!0})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DialogConfirmContent,decorators:[{type:Component,args:[{selector:"resolveio-dialog.confirm",template:'\n\t\t<div class="modal-header">\n\t\t\t<h4 class="modal-title"><i class="fa fa-question-circle" style="color: blue; font-size: 0.85em" aria-hidden="true"></i> {{ title }}</h4>\n\t\t\t<button type="button" class="btn-close ms-auto" aria-label="Close" (click)="activeModal.dismiss(\'Cross click\')"></button>\n\t\t</div>\n\t\t<div class="modal-body">\n\t\t\t<p>{{ body }}</p>\n\t\t\t<div [innerHTML]="html"></div>\n\t\t</div>\n\t\t<div class="modal-footer">\n\t\t\t<button type="button" class="btn btn-success" (click)="activeModal.close()">Yes</button>\n\t\t\t<button type="button" class="btn btn-danger" (click)="activeModal.dismiss()">No</button>\n\t\t</div>\n \t',standalone:!1}]}],ctorParameters:()=>[{type:i1$2.NgbActiveModal}],propDecorators:{title:[{type:Input}],body:[{type:Input}],html:[{type:Input}],handleKeyboardEvent:[{type:HostListener,args:["document:keypress",["$event"]]}]}});class DialogSelectDateTimeContent{_activeModal;_fb;title="";date;showTime=!0;close;allElements;form;constructor(t,e){this._activeModal=t,this._fb=e}ngOnInit(){this.date||(this.date=new Date),this.form=this._fb.group({time:[{hour:this.date.getHours(),minute:this.date.getMinutes(),second:0},[Validators.required]],date:[{year:this.date.getFullYear(),month:this.date.getMonth()+1,day:this.date.getDate()},[Validators.required]]})}ngAfterViewInit(){setTimeout(()=>{let t=this.recursiveFindFirstElement(this.allElements.nativeElement);t?t.focus():(this.close.nativeElement.focus(),this.close.nativeElement.blur())},100)}recursiveFindFirstElement(t){let e=null,n=t.children;for(let t=0;t<Object.keys(n).length;t++){let o=n[Object.keys(n)[t]];if(o.children&&o.children.length)e=this.recursiveFindFirstElement(o);else{if("BUTTON"===o.tagName&&o.classList.contains("close"))return null;if(!("BUTTON"!==o.tagName&&"INPUT"!==o.tagName&&"SELECT"!==o.tagName&&"TEXTAREA"!==o.tagName||o.hidden||o.disabled))return o}if(e)break}return e}submitForm(){this._activeModal.close(new Date(this.form.value.date.year,parseInt(this.form.value.date.month)-1,this.form.value.date.day,this.form.value.time.hour,this.form.value.time.minute,this.form.value.time.second,0))}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DialogSelectDateTimeContent,deps:[{token:i1$2.NgbActiveModal},{token:i2.FormBuilder}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"21.0.1",type:DialogSelectDateTimeContent,isStandalone:!1,selector:"resolveio-dialog.select-datetime",inputs:{title:"title",date:"date",showTime:"showTime"},viewQueries:[{propertyName:"close",first:!0,predicate:["close"],descendants:!0},{propertyName:"allElements",first:!0,predicate:["allElements"],descendants:!0}],ngImport:i0,template:'\n\t \t<style>\n\t \t table {\n\t \t width: 100%;\n\t \t table-layout: fixed;\n\t \t}\n\t \t\n\t \ttr {\n\t \twidth: 100%;\n\t \t}\n\t \t\n\t \ttd {\n\t \twidth: 100%;\n\t \ttext-align: center;\n\t \t}\n\t \t</style>\n\t \t<div #allElements>\n\t \t <form [formGroup]="form" novalidate (ngSubmit)="submitForm()">\n\t \t <div class="modal-header">\n\t \t <h4 class="modal-title"><i class="fa fa-question-circle" style="color: blue; font-size: 0.85em" aria-hidden="true"></i> {{ title }}</h4>\n\t \t <button type="button" class="btn-close ms-auto" aria-label="Close" (click)="_activeModal.dismiss()" #close></button>\n\t \t </div>\n\t \t <div class="modal-body">\n\t \t <table>\n\t \t <tr>\n\t \t <td style="border: none;">\n\t \t <div class="input-group">\n\t \t <rio-date-picker class="form-control" placeholder="yyyy-mm-dd" name="dp" formControlName="date" selectionMode="date" [enableTime]="false"></rio-date-picker>\n\t \t </div>\n\t \t </td>\n\t \t @if (showTime) {\n\t \t <td style="border: none;">\n\t \t <div class="offset-3">\n\t \t <rio-date-picker formControlName="time" selectionMode="time" [enableDate]="false"></rio-date-picker>\n\t \t </div>\n\t \t </td>\n\t \t }\n\t \t </tr>\n\t \t </table>\n\t \t </div>\n\t \t <div class="modal-footer">\n\t \t <form-button [form]="form"></form-button>\n\t \t <button type="button" class="btn btn-secondary" (click)="_activeModal.dismiss()">Cancel</button>\n\t \t </div>\n\t \t </form>\n\t \t</div>\n\t \t',isInline:!0,styles:["table{width:100%;table-layout:fixed}tr{width:100%}td{width:100%;text-align:center}\n"],dependencies:[{kind:"directive",type:i2.ɵNgNoValidate,selector:"form:not([ngNoForm]):not([ngNativeValidate])"},{kind:"directive",type:i2.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:i2.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:i2.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:i2.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"component",type:FormButtonComponent,selector:"form-button",inputs:["form","disabled","type"]},{kind:"component",type:i6.RioDatePickerComponent,selector:"rio-date-picker",inputs:["enableDate","enableTime","selectionMode","firstDayOfWeek","toggleWeekFirstDay","timezone","minDate","maxDate","disabled","label","allowSeconds","minuteStep","panelWidth"],outputs:["change"]}]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DialogSelectDateTimeContent,decorators:[{type:Component,args:[{selector:"resolveio-dialog.select-datetime",template:'\n\t \t<style>\n\t \t table {\n\t \t width: 100%;\n\t \t table-layout: fixed;\n\t \t}\n\t \t\n\t \ttr {\n\t \twidth: 100%;\n\t \t}\n\t \t\n\t \ttd {\n\t \twidth: 100%;\n\t \ttext-align: center;\n\t \t}\n\t \t</style>\n\t \t<div #allElements>\n\t \t <form [formGroup]="form" novalidate (ngSubmit)="submitForm()">\n\t \t <div class="modal-header">\n\t \t <h4 class="modal-title"><i class="fa fa-question-circle" style="color: blue; font-size: 0.85em" aria-hidden="true"></i> {{ title }}</h4>\n\t \t <button type="button" class="btn-close ms-auto" aria-label="Close" (click)="_activeModal.dismiss()" #close></button>\n\t \t </div>\n\t \t <div class="modal-body">\n\t \t <table>\n\t \t <tr>\n\t \t <td style="border: none;">\n\t \t <div class="input-group">\n\t \t <rio-date-picker class="form-control" placeholder="yyyy-mm-dd" name="dp" formControlName="date" selectionMode="date" [enableTime]="false"></rio-date-picker>\n\t \t </div>\n\t \t </td>\n\t \t @if (showTime) {\n\t \t <td style="border: none;">\n\t \t <div class="offset-3">\n\t \t <rio-date-picker formControlName="time" selectionMode="time" [enableDate]="false"></rio-date-picker>\n\t \t </div>\n\t \t </td>\n\t \t }\n\t \t </tr>\n\t \t </table>\n\t \t </div>\n\t \t <div class="modal-footer">\n\t \t <form-button [form]="form"></form-button>\n\t \t <button type="button" class="btn btn-secondary" (click)="_activeModal.dismiss()">Cancel</button>\n\t \t </div>\n\t \t </form>\n\t \t</div>\n\t \t',standalone:!1}]}],ctorParameters:()=>[{type:i1$2.NgbActiveModal},{type:i2.FormBuilder}],propDecorators:{title:[{type:Input}],date:[{type:Input}],showTime:[{type:Input}],close:[{type:ViewChild,args:["close",{static:!1}]}],allElements:[{type:ViewChild,args:["allElements",{static:!1}]}]}});class DialogSelectDataLabelsContent{_activeModal;_fb;title="";subtitle="";data;showArraySubData;form;dialogData=[];constructor(t,e){this._activeModal=t,this._fb=e}ngOnInit(){this.getKeys()}getKeys(){let t=Object.keys(this.data),e="";t.filter(t=>"_id"!==t&&!t.startsWith("id_")&&"__v"!==t&&"createdAt"!==t&&"updatedAt"!==t).forEach(t=>{if(e=typeof this.data[t],"object"===e)if(Array.isArray(this.data[t])){if(e="array",this.dialogData.push({label:t.replace(new RegExp("_","g")," ").replace("string","").replace(/\w\S*/g,function(t){return t.charAt(0).toUpperCase()+t.substr(1).toLowerCase()}),data:t,selected:!0,type:e,subLabel:null,subData:null,subtype:null}),!0===this.showArraySubData){Object.keys(this.data[t][0]).filter(t=>"_id"!==t&&!t.startsWith("id_")).forEach(n=>{this.dialogData.push({label:t.replace(new RegExp("_","g")," ").replace("string","").replace(/\w\S*/g,function(t){return t.charAt(0).toUpperCase()+t.substr(1).toLowerCase()}),subLabel:n.replace(new RegExp("_","g")," ").replace("string","").replace(/\w\S*/g,function(t){return t.charAt(0).toUpperCase()+t.substr(1).toLowerCase()}),data:t,type:e,subData:n,selected:!0,subtype:typeof n})})}}else{let n=Object.keys(this.data[t]);n.length?n.filter(t=>"_id"!==t&&!t.startsWith("id_")).forEach(n=>{this.dialogData.push({label:t.replace(new RegExp("_","g")," ").replace("string","").replace(/\w\S*/g,function(t){return t.charAt(0).toUpperCase()+t.substr(1).toLowerCase()}),subLabel:n.replace(new RegExp("_","g")," ").replace("string","").replace(/\w\S*/g,function(t){return t.charAt(0).toUpperCase()+t.substr(1).toLowerCase()}),data:t,subData:n,subtype:null,selected:!0,type:e})}):this.dialogData.push({label:t.replace(new RegExp("_","g")," ").replace("string","").replace(/\w\S*/g,function(t){return t.charAt(0).toUpperCase()+t.substr(1).toLowerCase()}),data:t,selected:!0,type:e,subData:null,subLabel:null,subtype:null})}else this.dialogData.push({label:t.replace(new RegExp("_","g")," ").replace("string","").replace(/\w\S*/g,function(t){return t.charAt(0).toUpperCase()+t.substr(1).toLowerCase()}),data:t,selected:!0,type:e,subData:null,subLabel:null,subtype:null})})}changeSelected(t){t.selected=!t.selected,"array"===t.type&&null===t.subtype&&this.dialogData.filter(e=>e.label===t.label).forEach(e=>{e.selected=t.selected})}submit(){return this.dialogData}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DialogSelectDataLabelsContent,deps:[{token:i1$2.NgbActiveModal},{token:i2.FormBuilder}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"21.0.1",type:DialogSelectDataLabelsContent,isStandalone:!1,selector:"resolveio-dialog.select-data-labels",inputs:{title:"title",subtitle:"subtitle",data:"data",showArraySubData:"showArraySubData"},ngImport:i0,template:'\n\t\t<div class="modal-header">\n\t\t <h4 class="modal-title"><i class="fa fa-question-circle" style="color: blue; font-size: 0.75em" aria-hidden="true"></i> {{ title }} - {{ subtitle }}</h4>\n\t\t <button type="button" class="btn-close ms-auto" aria-label="Close" (click)="_activeModal.dismiss()"></button>\n\t\t</div>\n\t\t<div class="modal-body">\n\t\t <div class="col-lg-12">\n\t\t <div class="row">\n\t\t <div class="col-lg-12">\n\t\t @for (label of dialogData; track label.label) {\n\t\t <div class="row">\n\t\t @if (label.subtype === null && label.type !== \'object\') {\n\t\t <div style="font-size: 12px;">\n\t\t <input type="checkbox" [checked]="label.selected" (click)="changeSelected(label)" style="height: 20px; width: auto;"> {{ label.label }}\n\t\t </div>\n\t\t }\n\t\t @if (label.subtype === null && label.type === \'object\' && label.subLabel !== null) {\n\t\t <div style="font-size: 12px;">\n\t\t <input type="checkbox" [checked]="label.selected" (click)="changeSelected(label)" style="height: 20px; width: auto;"> {{ label.subLabel }}\n\t\t </div>\n\t\t }\n\t\t @if (label.subtype === null && label.type === \'object\' && label.subLabel === null) {\n\t\t <div style="font-size: 12px;">\n\t\t <input type="checkbox" [checked]="label.selected" (click)="changeSelected(label)" style="height: 20px; width: auto;"> {{ label.label }}\n\t\t </div>\n\t\t }\n\t\t @if (label.subtype !== null) {\n\t\t <div style="font-size: 12px;">\n\t\t <input type="checkbox" [checked]="label.selected" (click)="changeSelected(label)" style="height: 20px; width: auto;"> {{ label.subLabel }}\n\t\t </div>\n\t\t }\n\t\t </div>\n\t\t }\n\t\t </div>\n\t\t </div>\n\t\t </div>\n\t\t</div>\n\t\t<div class="modal-footer">\n\t\t <button type="button" class="btn btn-success" (click)="_activeModal.close(dialogData)">Submit</button>\n\t\t <button type="button" class="btn btn-secondary" (click)="_activeModal.dismiss()">Cancel</button>\n\t\t</div>\n\t\t',isInline:!0})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DialogSelectDataLabelsContent,decorators:[{type:Component,args:[{selector:"resolveio-dialog.select-data-labels",template:'\n\t\t<div class="modal-header">\n\t\t <h4 class="modal-title"><i class="fa fa-question-circle" style="color: blue; font-size: 0.75em" aria-hidden="true"></i> {{ title }} - {{ subtitle }}</h4>\n\t\t <button type="button" class="btn-close ms-auto" aria-label="Close" (click)="_activeModal.dismiss()"></button>\n\t\t</div>\n\t\t<div class="modal-body">\n\t\t <div class="col-lg-12">\n\t\t <div class="row">\n\t\t <div class="col-lg-12">\n\t\t @for (label of dialogData; track label.label) {\n\t\t <div class="row">\n\t\t @if (label.subtype === null && label.type !== \'object\') {\n\t\t <div style="font-size: 12px;">\n\t\t <input type="checkbox" [checked]="label.selected" (click)="changeSelected(label)" style="height: 20px; width: auto;"> {{ label.label }}\n\t\t </div>\n\t\t }\n\t\t @if (label.subtype === null && label.type === \'object\' && label.subLabel !== null) {\n\t\t <div style="font-size: 12px;">\n\t\t <input type="checkbox" [checked]="label.selected" (click)="changeSelected(label)" style="height: 20px; width: auto;"> {{ label.subLabel }}\n\t\t </div>\n\t\t }\n\t\t @if (label.subtype === null && label.type === \'object\' && label.subLabel === null) {\n\t\t <div style="font-size: 12px;">\n\t\t <input type="checkbox" [checked]="label.selected" (click)="changeSelected(label)" style="height: 20px; width: auto;"> {{ label.label }}\n\t\t </div>\n\t\t }\n\t\t @if (label.subtype !== null) {\n\t\t <div style="font-size: 12px;">\n\t\t <input type="checkbox" [checked]="label.selected" (click)="changeSelected(label)" style="height: 20px; width: auto;"> {{ label.subLabel }}\n\t\t </div>\n\t\t }\n\t\t </div>\n\t\t }\n\t\t </div>\n\t\t </div>\n\t\t </div>\n\t\t</div>\n\t\t<div class="modal-footer">\n\t\t <button type="button" class="btn btn-success" (click)="_activeModal.close(dialogData)">Submit</button>\n\t\t <button type="button" class="btn btn-secondary" (click)="_activeModal.dismiss()">Cancel</button>\n\t\t</div>\n\t\t',standalone:!1}]}],ctorParameters:()=>[{type:i1$2.NgbActiveModal},{type:i2.FormBuilder}],propDecorators:{title:[{type:Input}],subtitle:[{type:Input}],data:[{type:Input}],showArraySubData:[{type:Input}]}});class ResponsiveButtonGroupComponent extends BaseComponent{_cdRef;_resizeService;_services;collapseSize=900;windowSize=window.innerWidth;windowSizeSubscription=null;constructor(t,e,n){super(n),this._cdRef=t,this._resizeService=e,this._services=n}ngOnInit(){this.windowSizeSubscription=this._resizeService.onResize$.subscribe(t=>{t&&(this.windowSize=t.innerWidth,this._cdRef.detectChanges())})}ngOnDestroy(){this.windowSizeSubscription.unsubscribe()}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:ResponsiveButtonGroupComponent,deps:[{token:i0.ChangeDetectorRef},{token:ResizeService},{token:ProviderService}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"21.0.1",type:ResponsiveButtonGroupComponent,isStandalone:!1,selector:"responsive-button-group",inputs:{collapseSize:"collapseSize"},providers:[ProviderService],usesInheritance:!0,ngImport:i0,template:"<style>\n\t@media screen and (min-width: 900px) {\n\t\t:host ::ng-deep .xsBtnGroup {\n\t\t\tdisplay: none !important;\n\t\t}\n\n\t\t:host ::ng-deep .lgBtnGroup {\n\t\t\tdisplay: inline-flex !important;\n\t\t}\n\n\t\t:host ::ng-deep .lgBtnGroup button {\n\t\t\tmargin-left: 5px !important;\n\t\t}\n\n\t\t:host ::ng-deep .lgBtnGroup a {\n\t\t\tmargin-left: 5px !important;\n\t\t}\n\t}\n\n\t@media screen and (max-width: 900px) {\n\t\t:host ::ng-deep .xsBtnGroup {\n\t\t\tdisplay: inherit !important;\n\t\t}\n\n\t\t:host ::ng-deep .xsBtnGroup button {\n\t\t\tmargin-top: 5px !important;\n\t\t\twidth: 100% !important;\n\t\t}\n\n\t\t:host ::ng-deep .xsBtnGroup a {\n\t\t\tmargin-top: 5px !important;\n\t\t}\n\n\t\t:host ::ng-deep .lgBtnGroup {\n\t\t\tdisplay: none !important;\n\t\t}\n\t}\n</style>\n\n<div [ngClass]=\"windowSize <= collapseSize ? ['btn-group-vertical', 'xsBtnGroup'] : ['btn-group', 'lgBtnGroup']\">\n\t<ng-content></ng-content>\n</div>\n",styles:["@media screen and (min-width:900px){:host ::ng-deep .xsBtnGroup{display:none!important}:host ::ng-deep .lgBtnGroup{display:inline-flex!important}:host ::ng-deep .lgBtnGroup button{margin-left:5px!important}:host ::ng-deep .lgBtnGroup a{margin-left:5px!important}}@media screen and (max-width:900px){:host ::ng-deep .xsBtnGroup{display:inherit!important}:host ::ng-deep .xsBtnGroup button{margin-top:5px!important;width:100%!important}:host ::ng-deep .xsBtnGroup a{margin-top:5px!important}:host ::ng-deep .lgBtnGroup{display:none!important}}\n"],dependencies:[{kind:"directive",type:i7.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]}]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:ResponsiveButtonGroupComponent,decorators:[{type:Component,args:[{providers:[ProviderService],selector:"responsive-button-group",standalone:!1,template:"<style>\n\t@media screen and (min-width: 900px) {\n\t\t:host ::ng-deep .xsBtnGroup {\n\t\t\tdisplay: none !important;\n\t\t}\n\n\t\t:host ::ng-deep .lgBtnGroup {\n\t\t\tdisplay: inline-flex !important;\n\t\t}\n\n\t\t:host ::ng-deep .lgBtnGroup button {\n\t\t\tmargin-left: 5px !important;\n\t\t}\n\n\t\t:host ::ng-deep .lgBtnGroup a {\n\t\t\tmargin-left: 5px !important;\n\t\t}\n\t}\n\n\t@media screen and (max-width: 900px) {\n\t\t:host ::ng-deep .xsBtnGroup {\n\t\t\tdisplay: inherit !important;\n\t\t}\n\n\t\t:host ::ng-deep .xsBtnGroup button {\n\t\t\tmargin-top: 5px !important;\n\t\t\twidth: 100% !important;\n\t\t}\n\n\t\t:host ::ng-deep .xsBtnGroup a {\n\t\t\tmargin-top: 5px !important;\n\t\t}\n\n\t\t:host ::ng-deep .lgBtnGroup {\n\t\t\tdisplay: none !important;\n\t\t}\n\t}\n</style>\n\n<div [ngClass]=\"windowSize <= collapseSize ? ['btn-group-vertical', 'xsBtnGroup'] : ['btn-group', 'lgBtnGroup']\">\n\t<ng-content></ng-content>\n</div>\n"}]}],ctorParameters:()=>[{type:i0.ChangeDetectorRef},{type:ResizeService},{type:ProviderService}],propDecorators:{collapseSize:[{type:Input}]}});class DialogLoginContent{_activeModal;_fb;msAllowed=!1;showLoginText=!0;form;constructor(t,e){this._activeModal=t,this._fb=e}ngOnInit(){this.form=this._fb.group({username:["",[Validators.required]],password:["",[Validators.required]],forgotPassword:[!1]})}toggleForgotPassword(){this.form.controls.forgotPassword.setValue(!this.form.controls.forgotPassword.value),this.form.controls.forgotPassword.value?(this.form.controls.password.setValue(""),this.form.controls.password.clearValidators(),this.form.controls.password.disable()):(this.form.controls.password.setValidators([Validators.required]),this.form.controls.password.enable()),this.form.controls.password.updateValueAndValidity()}close(t){this._activeModal.close({form:this.form,type:t})}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DialogLoginContent,deps:[{token:i1$2.NgbActiveModal},{token:i2.FormBuilder}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"21.0.1",type:DialogLoginContent,isStandalone:!1,selector:"resolveio-dialog.login",inputs:{msAllowed:"msAllowed",showLoginText:"showLoginText"},ngImport:i0,template:'\n\t\t<style>\n\t\t collapse-table {\n\t\t width: 100%;\n\t\t}\n\t\t\n\t\t.navbar-light .navbar-nav .active>.nav-link, .navbar-light .navbar-nav .nav-link.active, .navbar-light .navbar-nav .nav-link.show, .navbar-light .navbar-nav .show>.nav-link {\n\t\tcolor: #0b4499;\n\t\t}\n\t\t.navbar-light .navbar-nav .nav-link {\n\t\tcolor:#333;\n\t\t}\n\t\ta.nav-link.loginreg {\n\t\tbackground-color: #0b4499;\n\t\tcolor: #fff !important;\n\t\tborder-radius: 40px;\n\t\t}\n\t\ta.nav-link.loginreg:hover {\n\t\tbackground: #1668e2;\n\t\t}\n\t\t.nav-link {\n\t\tcolor: #333333;\n\t\tfont-size: 150%\n\t\t}\n\t\t.nav-item a.nav-link.active {\n\t\tcolor: #0b4499;\n\t\t}\n\t\t.contactimg>img{\n\t\twidth: 100%;\n\t\t}\n\t\t\n\t\t.log-box {\n\t\tpadding-top: 0px;\n\t\tpadding-bottom: 26px;\n\t\t}\n\t\t.loginform .form-control, .register-form .form-control {\n\t\tcolor: #000;\n\t\theight: 52px;\n\t\t}\n\t\t.loginform {\n\t\tmargin-top: 35px;\n\t\t}\n\t\t.loginform label {\n\t\tfont-size: 18px;\n\t\tfont-weight: 600;\n\t\t}\n\t\t\n\t\t.loginbtn {\n\t\tbackground: #0b4499;\n\t\twidth: 100%;\n\t\tmargin-top: 44px;\n\t\theight: 52px;\n\t\tfont-size: 22px;\n\t\tborder-radius: 2px;\n\t\tcolor: #fff !important;\n\t\t}\n\t\t\n\t\t.login365btn {\n\t\tbackground: orange;\n\t\twidth: 100%;\n\t\tmargin-top: 44px;\n\t\theight: 52px;\n\t\tfont-size: 22px;\n\t\tborder-radius: 2px;\n\t\tcolor: #fff !important;\n\t\t}\n\t\t\n\t\t.contactimg {\n\t\tposition: relative;\n\t\t}\n\t\t.login-logo {\n\t\tmargin-bottom: 20px;\n\t\t}\n\t\t\n\t\t.textbox {\n\t\tposition: absolute;\n\t\ttop: 50%;\n\t\tcolor: #fff;\n\t\tpadding: 40px;\n\t\ttransform: translate(0%, -50%);\n\t\ttext-align: center;\n\t\t}\n\t\t.sign-btn {\n\t\tbackground: #0b4499;\n\t\twidth: 100%;\n\t\tmargin-top: 14px;\n\t\theight: 52px;\n\t\tfont-size: 22px;\n\t\tborder-radius: 2px;\n\t\tcolor: #fff !important;\n\t\t}\n\t\t\n\t\tbutton.btn.sign-btn:hover {\n\t\tbackground: #1668e2;\n\t\t}\n\t\t\n\t\t.login-card {\n\t\tmargin-bottom: 20px;\n\t\tpadding: 20px;\n\t\tpadding-top: 10px;\n\t\tborder-radius: 8px;\n\t\tbox-shadow: 0 4px 8px rgba(0,0,0,0.2), 0 6px 20px rgba(0,0,0,0.19); /* Enhanced shadow */\n\t\tbackground-color: #FFFFFF;\n\t\t}\n\t\t\n\t\t.login-header {\n\t\tfont-size: 20px;\n\t\tfont-weight: bold;\n\t\tcolor: #333;\n\t\tmargin-bottom: 15px;\n\t\ttext-align: center;\n\t\t}\n\t\t\n\t\t.employee-login-btn {\n\t\tbackground-color: #0078D4; /* Microsoft Blue */\n\t\tcolor: white;\n\t\tpadding: 10px 20px; /* Larger size */\n\t\tfont-size: 16px; /* Larger text */\n\t\tborder-radius: 5px; /* Rounded corners */\n\t\twidth: 100%; /* Full width */\n\t\tbox-sizing: border-box; /* Include padding and border in the element\'s width and height */\n\t\t}\n\t\t\n\t\t.third-party-login-btn {\n\t\tbackground-color: #28a745; /* Bootstrap success green */\n\t\tcolor: white;\n\t\tborder-radius: 5px; /* Rounded corners */\n\t\twidth: 100%; /* Full width */\n\t\tbox-sizing: border-box; /* Include padding and border in the element\'s width and height */\n\t\tmargin-top: 10px;\n\t\t}\n\t\t\n\t\t.third-party-login-section {\n\t\tbackground-color: #F3F4F6; /* Optional: Light grey background for contrast */\n\t\tborder-radius: 8px; /* Optional: Rounded corners for the input form */\n\t\t}\n\t\t\n\t\t.employee-login-section, .third-party-login-section {\n\t\ttext-align: center;\n\t\t}\n\t\t\n\t\t\n\t\t</style>\n\t\t<form [formGroup]="form" novalidate>\n\t\t <div class="modal-header">\n\t\t <h4 class="modal-title"><b>Login</b></h4>\n\t\t <button type="button" class="btn-close ms-auto" aria-label="Close" (click)="_activeModal.dismiss()"></button>\n\t\t </div>\n\t\t @if (form) {\n\t\t <div class="modal-body">\n\t\t <div class="row justify-content-md-center">\n\t\t <div class="col-lg-12">\n\t\t <div class="row bg-white">\n\t\t <div class="col-lg-6">\n\t\t <div class="contactimg">\n\t\t <img src="/assets/images/loginsignup/formimg.jpg" alt="images" class="img-fluid">\n\t\t @if (showLoginText) {\n\t\t <div class="textbox">\n\t\t <div class="login-logo"><img src="/assets/images/loginsignup/login-logo.png" alt="images"></div>\n\t\t </div>\n\t\t }\n\t\t </div>\n\t\t </div>\n\t\t <div class="col-lg-6">\n\t\t <div class="log-box">\n\t\t <div class="loginform" style="margin: 0px;">\n\t\t @if (!msAllowed) {\n\t\t <div class="login-card">\n\t\t <h3 class="login-header">Employee/Customer Login</h3>\n\t\t <div class="third-party-login-section">\n\t\t <div class="form-group">\n\t\t <label>Username/Email</label>\n\t\t @if (form.controls.username.hasError(\'required\')) {\n\t\t <em>- Required</em>\n\t\t }\n\t\t <input type="email" [ngClass]="[\'form-control\', form.controls.username.valid ? \'is-valid\' : \'is-invalid\']" formControlName="username" [autofocus]="true" [focus]="true" aria-describedby="emailHelp" placeholder="Your Username/Email" autocomplete="username">\n\t\t </div>\n\t\t <div class="form-group">\n\t\t <label>Password</label>\n\t\t @if (form.controls.password.hasError(\'required\')) {\n\t\t <em>- Required</em>\n\t\t }\n\t\t <input type="password" [ngClass]="[\'form-control\', form.controls.password.enabled ? (form.controls.password.valid ? \'is-valid\' : \'is-invalid\') : \'\']" formControlName="password" placeholder="Your Password" autocomplete="current-password">\n\t\t </div>\n\t\t <div class="form-check text-right">\n\t\t <label class="form-check-label"><a href="javascript:void(0)" (click)="toggleForgotPassword()"> {{!form.controls.forgotPassword.value ? \'Forgot Password?\' : \'Enter Password\'}} </a></label>\n\t\t </div>\n\t\t <button type="submit" class="btn third-party-login-btn" (click)="close(\'ResolveIO\')">{{!form.controls.forgotPassword.value ? \'Login\' : \'Submit\'}}</button>\n\t\t </div>\n\t\t </div>\n\t\t }\n\t\t @if (msAllowed) {\n\t\t \x3c!-- Employee Login Section --\x3e\n\t\t <div class="login-card">\n\t\t <h3 class="login-header">Employee Login</h3>\n\t\t <div class="employee-login-section">\n\t\t <button type="submit" class="btn employee-login-btn" (click)="close(\'MS\')">Employee Login</button>\n\t\t </div>\n\t\t </div>\n\t\t \x3c!-- Third Party Login Section --\x3e\n\t\t <div class="login-card">\n\t\t <h3 class="login-header">Third Party Login</h3>\n\t\t <div class="third-party-login-section">\n\t\t <div class="form-group">\n\t\t <label>Username/Email</label>\n\t\t @if (form.controls.username.hasError(\'required\')) {\n\t\t <em>- Required</em>\n\t\t }\n\t\t <input type="email" [ngClass]="[\'form-control\', form.controls.username.valid ? \'is-valid\' : \'is-invalid\']" formControlName="username" [autofocus]="true" [focus]="true" aria-describedby="emailHelp" placeholder="Your Username/Email" autocomplete="username">\n\t\t </div>\n\t\t <div class="form-group">\n\t\t <label>Password</label>\n\t\t @if (form.controls.password.hasError(\'required\')) {\n\t\t <em>- Required</em>\n\t\t }\n\t\t <input type="password" [ngClass]="[\'form-control\', form.controls.password.enabled ? (form.controls.password.valid ? \'is-valid\' : \'is-invalid\') : \'\']" formControlName="password" placeholder="Your Password" autocomplete="current-password">\n\t\t </div>\n\t\t <div class="form-check text-right">\n\t\t <label class="form-check-label"><a href="javascript:void(0)" (click)="toggleForgotPassword()"> {{!form.controls.forgotPassword.value ? \'Forgot Password?\' : \'Enter Password\'}} </a></label>\n\t\t </div>\n\t\t <button type="submit" class="btn third-party-login-btn" (click)="close(\'ResolveIO\')">{{!form.controls.forgotPassword.value ? \'Login\' : \'Submit\'}}</button>\n\t\t </div>\n\t\t </div>\n\t\t }\n\t\t </div>\n\t\t </div>\n\t\t </div>\n\t\t </div>\n\t\t </div>\n\t\t </div>\n\t\t </div>\n\t\t }\n\t\t <div class="modal-footer">\n\t\t <responsive-button-group>\n\t\t <button type="button" class="btn btn-secondary" (click)="_activeModal.dismiss()">Cancel</button>\n\t\t </responsive-button-group>\n\t\t </div>\n\t\t</form>\n\t\t',isInline:!0,styles:["collapse-table{width:100%}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:#0b4499}.navbar-light .navbar-nav .nav-link{color:#333}a.nav-link.loginreg{background-color:#0b4499;color:#fff!important;border-radius:40px}a.nav-link.loginreg:hover{background:#1668e2}.nav-link{color:#333;font-size:150%}.nav-item a.nav-link.active{color:#0b4499}.contactimg>img{width:100%}.log-box{padding-top:0;padding-bottom:26px}.loginform .form-control,.register-form .form-control{color:#000;height:52px}.loginform{margin-top:35px}.loginform label{font-size:18px;font-weight:600}.loginbtn{background:#0b4499;width:100%;margin-top:44px;height:52px;font-size:22px;border-radius:2px;color:#fff!important}.login365btn{background:orange;width:100%;margin-top:44px;height:52px;font-size:22px;border-radius:2px;color:#fff!important}.contactimg{position:relative}.login-logo{margin-bottom:20px}.textbox{position:absolute;top:50%;color:#fff;padding:40px;transform:translateY(-50%);text-align:center}.sign-btn{background:#0b4499;width:100%;margin-top:14px;height:52px;font-size:22px;border-radius:2px;color:#fff!important}button.btn.sign-btn:hover{background:#1668e2}.login-card{margin-bottom:20px;padding:10px 20px 20px;border-radius:8px;box-shadow:0 4px 8px #0003,0 6px 20px #00000030;background-color:#fff}.login-header{font-size:20px;font-weight:700;color:#333;margin-bottom:15px;text-align:center}.employee-login-btn{background-color:#0078d4;color:#fff;padding:10px 20px;font-size:16px;border-radius:5px;width:100%;box-sizing:border-box}.third-party-login-btn{background-color:#28a745;color:#fff;border-radius:5px;width:100%;box-sizing:border-box;margin-top:10px}.third-party-login-section{background-color:#f3f4f6;border-radius:8px}.employee-login-section,.third-party-login-section{text-align:center}\n"],dependencies:[{kind:"directive",type:i2.ɵNgNoValidate,selector:"form:not([ngNoForm]):not([ngNativeValidate])"},{kind:"directive",type:i2.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:i2.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:i2.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:i2.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:i2.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"component",type:ResponsiveButtonGroupComponent,selector:"responsive-button-group",inputs:["collapseSize"]},{kind:"directive",type:i7.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]},{kind:"directive",type:FocusDirective,selector:"[focus]",inputs:["focus"]}]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DialogLoginContent,decorators:[{type:Component,args:[{selector:"resolveio-dialog.login",template:'\n\t\t<style>\n\t\t collapse-table {\n\t\t width: 100%;\n\t\t}\n\t\t\n\t\t.navbar-light .navbar-nav .active>.nav-link, .navbar-light .navbar-nav .nav-link.active, .navbar-light .navbar-nav .nav-link.show, .navbar-light .navbar-nav .show>.nav-link {\n\t\tcolor: #0b4499;\n\t\t}\n\t\t.navbar-light .navbar-nav .nav-link {\n\t\tcolor:#333;\n\t\t}\n\t\ta.nav-link.loginreg {\n\t\tbackground-color: #0b4499;\n\t\tcolor: #fff !important;\n\t\tborder-radius: 40px;\n\t\t}\n\t\ta.nav-link.loginreg:hover {\n\t\tbackground: #1668e2;\n\t\t}\n\t\t.nav-link {\n\t\tcolor: #333333;\n\t\tfont-size: 150%\n\t\t}\n\t\t.nav-item a.nav-link.active {\n\t\tcolor: #0b4499;\n\t\t}\n\t\t.contactimg>img{\n\t\twidth: 100%;\n\t\t}\n\t\t\n\t\t.log-box {\n\t\tpadding-top: 0px;\n\t\tpadding-bottom: 26px;\n\t\t}\n\t\t.loginform .form-control, .register-form .form-control {\n\t\tcolor: #000;\n\t\theight: 52px;\n\t\t}\n\t\t.loginform {\n\t\tmargin-top: 35px;\n\t\t}\n\t\t.loginform label {\n\t\tfont-size: 18px;\n\t\tfont-weight: 600;\n\t\t}\n\t\t\n\t\t.loginbtn {\n\t\tbackground: #0b4499;\n\t\twidth: 100%;\n\t\tmargin-top: 44px;\n\t\theight: 52px;\n\t\tfont-size: 22px;\n\t\tborder-radius: 2px;\n\t\tcolor: #fff !important;\n\t\t}\n\t\t\n\t\t.login365btn {\n\t\tbackground: orange;\n\t\twidth: 100%;\n\t\tmargin-top: 44px;\n\t\theight: 52px;\n\t\tfont-size: 22px;\n\t\tborder-radius: 2px;\n\t\tcolor: #fff !important;\n\t\t}\n\t\t\n\t\t.contactimg {\n\t\tposition: relative;\n\t\t}\n\t\t.login-logo {\n\t\tmargin-bottom: 20px;\n\t\t}\n\t\t\n\t\t.textbox {\n\t\tposition: absolute;\n\t\ttop: 50%;\n\t\tcolor: #fff;\n\t\tpadding: 40px;\n\t\ttransform: translate(0%, -50%);\n\t\ttext-align: center;\n\t\t}\n\t\t.sign-btn {\n\t\tbackground: #0b4499;\n\t\twidth: 100%;\n\t\tmargin-top: 14px;\n\t\theight: 52px;\n\t\tfont-size: 22px;\n\t\tborder-radius: 2px;\n\t\tcolor: #fff !important;\n\t\t}\n\t\t\n\t\tbutton.btn.sign-btn:hover {\n\t\tbackground: #1668e2;\n\t\t}\n\t\t\n\t\t.login-card {\n\t\tmargin-bottom: 20px;\n\t\tpadding: 20px;\n\t\tpadding-top: 10px;\n\t\tborder-radius: 8px;\n\t\tbox-shadow: 0 4px 8px rgba(0,0,0,0.2), 0 6px 20px rgba(0,0,0,0.19); /* Enhanced shadow */\n\t\tbackground-color: #FFFFFF;\n\t\t}\n\t\t\n\t\t.login-header {\n\t\tfont-size: 20px;\n\t\tfont-weight: bold;\n\t\tcolor: #333;\n\t\tmargin-bottom: 15px;\n\t\ttext-align: center;\n\t\t}\n\t\t\n\t\t.employee-login-btn {\n\t\tbackground-color: #0078D4; /* Microsoft Blue */\n\t\tcolor: white;\n\t\tpadding: 10px 20px; /* Larger size */\n\t\tfont-size: 16px; /* Larger text */\n\t\tborder-radius: 5px; /* Rounded corners */\n\t\twidth: 100%; /* Full width */\n\t\tbox-sizing: border-box; /* Include padding and border in the element\'s width and height */\n\t\t}\n\t\t\n\t\t.third-party-login-btn {\n\t\tbackground-color: #28a745; /* Bootstrap success green */\n\t\tcolor: white;\n\t\tborder-radius: 5px; /* Rounded corners */\n\t\twidth: 100%; /* Full width */\n\t\tbox-sizing: border-box; /* Include padding and border in the element\'s width and height */\n\t\tmargin-top: 10px;\n\t\t}\n\t\t\n\t\t.third-party-login-section {\n\t\tbackground-color: #F3F4F6; /* Optional: Light grey background for contrast */\n\t\tborder-radius: 8px; /* Optional: Rounded corners for the input form */\n\t\t}\n\t\t\n\t\t.employee-login-section, .third-party-login-section {\n\t\ttext-align: center;\n\t\t}\n\t\t\n\t\t\n\t\t</style>\n\t\t<form [formGroup]="form" novalidate>\n\t\t <div class="modal-header">\n\t\t <h4 class="modal-title"><b>Login</b></h4>\n\t\t <button type="button" class="btn-close ms-auto" aria-label="Close" (click)="_activeModal.dismiss()"></button>\n\t\t </div>\n\t\t @if (form) {\n\t\t <div class="modal-body">\n\t\t <div class="row justify-content-md-center">\n\t\t <div class="col-lg-12">\n\t\t <div class="row bg-white">\n\t\t <div class="col-lg-6">\n\t\t <div class="contactimg">\n\t\t <img src="/assets/images/loginsignup/formimg.jpg" alt="images" class="img-fluid">\n\t\t @if (showLoginText) {\n\t\t <div class="textbox">\n\t\t <div class="login-logo"><img src="/assets/images/loginsignup/login-logo.png" alt="images"></div>\n\t\t </div>\n\t\t }\n\t\t </div>\n\t\t </div>\n\t\t <div class="col-lg-6">\n\t\t <div class="log-box">\n\t\t <div class="loginform" style="margin: 0px;">\n\t\t @if (!msAllowed) {\n\t\t <div class="login-card">\n\t\t <h3 class="login-header">Employee/Customer Login</h3>\n\t\t <div class="third-party-login-section">\n\t\t <div class="form-group">\n\t\t <label>Username/Email</label>\n\t\t @if (form.controls.username.hasError(\'required\')) {\n\t\t <em>- Required</em>\n\t\t }\n\t\t <input type="email" [ngClass]="[\'form-control\', form.controls.username.valid ? \'is-valid\' : \'is-invalid\']" formControlName="username" [autofocus]="true" [focus]="true" aria-describedby="emailHelp" placeholder="Your Username/Email" autocomplete="username">\n\t\t </div>\n\t\t <div class="form-group">\n\t\t <label>Password</label>\n\t\t @if (form.controls.password.hasError(\'required\')) {\n\t\t <em>- Required</em>\n\t\t }\n\t\t <input type="password" [ngClass]="[\'form-control\', form.controls.password.enabled ? (form.controls.password.valid ? \'is-valid\' : \'is-invalid\') : \'\']" formControlName="password" placeholder="Your Password" autocomplete="current-password">\n\t\t </div>\n\t\t <div class="form-check text-right">\n\t\t <label class="form-check-label"><a href="javascript:void(0)" (click)="toggleForgotPassword()"> {{!form.controls.forgotPassword.value ? \'Forgot Password?\' : \'Enter Password\'}} </a></label>\n\t\t </div>\n\t\t <button type="submit" class="btn third-party-login-btn" (click)="close(\'ResolveIO\')">{{!form.controls.forgotPassword.value ? \'Login\' : \'Submit\'}}</button>\n\t\t </div>\n\t\t </div>\n\t\t }\n\t\t @if (msAllowed) {\n\t\t \x3c!-- Employee Login Section --\x3e\n\t\t <div class="login-card">\n\t\t <h3 class="login-header">Employee Login</h3>\n\t\t <div class="employee-login-section">\n\t\t <button type="submit" class="btn employee-login-btn" (click)="close(\'MS\')">Employee Login</button>\n\t\t </div>\n\t\t </div>\n\t\t \x3c!-- Third Party Login Section --\x3e\n\t\t <div class="login-card">\n\t\t <h3 class="login-header">Third Party Login</h3>\n\t\t <div class="third-party-login-section">\n\t\t <div class="form-group">\n\t\t <label>Username/Email</label>\n\t\t @if (form.controls.username.hasError(\'required\')) {\n\t\t <em>- Required</em>\n\t\t }\n\t\t <input type="email" [ngClass]="[\'form-control\', form.controls.username.valid ? \'is-valid\' : \'is-invalid\']" formControlName="username" [autofocus]="true" [focus]="true" aria-describedby="emailHelp" placeholder="Your Username/Email" autocomplete="username">\n\t\t </div>\n\t\t <div class="form-group">\n\t\t <label>Password</label>\n\t\t @if (form.controls.password.hasError(\'required\')) {\n\t\t <em>- Required</em>\n\t\t }\n\t\t <input type="password" [ngClass]="[\'form-control\', form.controls.password.enabled ? (form.controls.password.valid ? \'is-valid\' : \'is-invalid\') : \'\']" formControlName="password" placeholder="Your Password" autocomplete="current-password">\n\t\t </div>\n\t\t <div class="form-check text-right">\n\t\t <label class="form-check-label"><a href="javascript:void(0)" (click)="toggleForgotPassword()"> {{!form.controls.forgotPassword.value ? \'Forgot Password?\' : \'Enter Password\'}} </a></label>\n\t\t </div>\n\t\t <button type="submit" class="btn third-party-login-btn" (click)="close(\'ResolveIO\')">{{!form.controls.forgotPassword.value ? \'Login\' : \'Submit\'}}</button>\n\t\t </div>\n\t\t </div>\n\t\t }\n\t\t </div>\n\t\t </div>\n\t\t </div>\n\t\t </div>\n\t\t </div>\n\t\t </div>\n\t\t </div>\n\t\t }\n\t\t <div class="modal-footer">\n\t\t <responsive-button-group>\n\t\t <button type="button" class="btn btn-secondary" (click)="_activeModal.dismiss()">Cancel</button>\n\t\t </responsive-button-group>\n\t\t </div>\n\t\t</form>\n\t\t',standalone:!1}]}],ctorParameters:()=>[{type:i1$2.NgbActiveModal},{type:i2.FormBuilder}],propDecorators:{msAllowed:[{type:Input}],showLoginText:[{type:Input}]}});class DialogRegisterContent{_activeModal;_fb;form;constructor(t,e){this._activeModal=t,this._fb=e}ngOnInit(){this.form=this._fb.group({username:["",[Validators.required]],name:["",[Validators.required]],phone:["",[Validators.required]],company:["",[Validators.required]],email:["",[Validators.required]]})}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DialogRegisterContent,deps:[{token:i1$2.NgbActiveModal},{token:i2.FormBuilder}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"21.0.1",type:DialogRegisterContent,isStandalone:!1,selector:"resolveio-dialog.register",ngImport:i0,template:'\n\t\t<style>\n\t\t collapse-table {\n\t\t width: 100%;\n\t\t}\n\t\t\n\t\t.navbar-light .navbar-nav .active>.nav-link, .navbar-light .navbar-nav .nav-link.active, .navbar-light .navbar-nav .nav-link.show, .navbar-light .navbar-nav .show>.nav-link {\n\t\tcolor: #0b4499;\n\t\t}\n\t\t.navbar-light .navbar-nav .nav-link {\n\t\tcolor:#333;\n\t\t}\n\t\ta.nav-link.loginreg {\n\t\tbackground-color: #0b4499;\n\t\tcolor: #fff !important;\n\t\tborder-radius: 40px;\n\t\t}\n\t\ta.nav-link.loginreg:hover {\n\t\tbackground: #1668e2;\n\t\t}\n\t\t.nav-link {\n\t\tcolor: #333333;\n\t\tfont-size: 150%\n\t\t}\n\t\t.nav-item a.nav-link.active {\n\t\tcolor: #0b4499;\n\t\t}\n\t\t.contactimg>img{\n\t\twidth: 100%;\n\t\t}\n\t\t\n\t\t.log-box {\n\t\tpadding-top: 26px;\n\t\tpadding-bottom: 26px;\n\t\t}\n\t\t.loginform .form-control, .register-form .form-control {\n\t\tcolor: #000;\n\t\theight: 52px;\n\t\t}\n\t\t.loginform {\n\t\tmargin-top: 35px;\n\t\t}\n\t\t.loginform label {\n\t\tfont-size: 18px;\n\t\tfont-weight: 600;\n\t\t}\n\t\t\n\t\t.loginbtn {\n\t\tbackground: #0b4499;\n\t\twidth: 100%;\n\t\tmargin-top: 44px;\n\t\theight: 52px;\n\t\tfont-size: 22px;\n\t\tborder-radius: 2px;\n\t\tcolor: #fff !important;\n\t\t}\n\t\t\n\t\t.contactimg {\n\t\tposition: relative;\n\t\t}\n\t\t.login-logo {\n\t\tmargin-bottom: 20px;\n\t\t}\n\t\t\n\t\t.textbox {\n\t\tposition: absolute;\n\t\ttop: 50%;\n\t\tcolor: #fff;\n\t\tpadding: 40px;\n\t\ttransform: translate(0%, -50%);\n\t\ttext-align: center;\n\t\t}\n\t\t.sign-btn {\n\t\tbackground: #0b4499;\n\t\twidth: 100%;\n\t\tmargin-top: 14px;\n\t\theight: 52px;\n\t\tfont-size: 22px;\n\t\tborder-radius: 2px;\n\t\tcolor: #fff !important;\n\t\t}\n\t\t\n\t\tbutton.btn.sign-btn:hover {\n\t\tbackground: #1668e2;\n\t\t}\n\t\t</style>\n\t\t<form [formGroup]="form" novalidate (ngSubmit)="_activeModal.close(form)">\n\t\t <div class="modal-header">\n\t\t <h4 class="modal-title"><i class="fa fa-question-circle" style="color: blue; font-size: 0.85em" aria-hidden="true"></i> Register</h4>\n\t\t <button type="button" class="btn-close ms-auto" aria-label="Close" (click)="_activeModal.dismiss()"></button>\n\t\t </div>\n\t\t @if (form) {\n\t\t <div class="modal-body">\n\t\t <div class="row justify-content-md-center">\n\t\t <div class="col-lg-12">\n\t\t <div class="row bg-white">\n\t\t <div class="col-lg-6">\n\t\t <div class="contactimg">\n\t\t <img src="/assets/images/loginsignup/formimg.jpg" alt="images" class="img-fluid">\n\t\t <div class="textbox">\n\t\t <div class="login-logo"><img src="/assets/images/loginsignup/login-logo.png" alt="images"></div>\n\t\t </div>\n\t\t </div>\n\t\t </div>\n\t\t <div class="col-lg-6">\n\t\t <div class="log-box">\n\t\t <div class="register-form">\n\t\t <div class="form-group">\n\t\t <label>User Name</label>\n\t\t @if (form.controls.username.hasError(\'required\')) {\n\t\t <em>- Required</em>\n\t\t }\n\t\t <input type="text" class="form-control" [ngClass]="[\'form-control\', form.controls.username.valid ? \'is-valid\' : \'is-invalid\']" formControlName="username" [autofocus]="true" [focus]="true" aria-describedby="emailHelp" placeholder="User Name">\n\t\t </div>\n\t\t <div class="form-group">\n\t\t <label>Full Name</label>\n\t\t @if (form.controls.name.hasError(\'required\')) {\n\t\t <em>- Required</em>\n\t\t }\n\t\t <input type="text" class="form-control" [ngClass]="[\'form-control\', form.controls.name.valid ? \'is-valid\' : \'is-invalid\']" formControlName="name" aria-describedby="emailHelp" placeholder="Name">\n\t\t </div>\n\t\t <div class="form-group">\n\t\t <label>Phone Number</label>\n\t\t @if (form.controls.phone.hasError(\'required\')) {\n\t\t <em>- Required</em>\n\t\t }\n\t\t <input type="text" class="form-control" [ngClass]="[\'form-control\', form.controls.phone.valid ? \'is-valid\' : \'is-invalid\']" formControlName="phone" placeholder="Phone Number">\n\t\t </div>\n\t\t <div class="form-group">\n\t\t <label>Company</label>\n\t\t @if (form.controls.company.hasError(\'required\')) {\n\t\t <em>- Required</em>\n\t\t }\n\t\t <input type="text" class="form-control" [ngClass]="[\'form-control\', form.controls.company.valid ? \'is-valid\' : \'is-invalid\']" formControlName="company" placeholder="Company Name">\n\t\t </div>\n\t\t <div class="form-group">\n\t\t <label>Email</label>\n\t\t @if (form.controls.email.hasError(\'required\')) {\n\t\t <em>- Required</em>\n\t\t }\n\t\t <input type="email" class="form-control" [ngClass]="[\'form-control\', form.controls.email.valid ? \'is-valid\' : \'is-invalid\']" formControlName="email" placeholder="Email">\n\t\t </div>\n\t\t <button type="submit" class="btn sign-btn">Signup</button>\n\t\t </div>\n\t\t </div>\n\t\t </div>\n\t\t </div>\n\t\t </div>\n\t\t </div>\n\t\t </div>\n\t\t }\n\t\t <div class="modal-footer">\n\t\t <responsive-button-group>\n\t\t <button type="button" class="btn btn-secondary" (click)="_activeModal.dismiss()">Cancel</button>\n\t\t </responsive-button-group>\n\t\t </div>\n\t\t</form>\n\t\t',isInline:!0,styles:["collapse-table{width:100%}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:#0b4499}.navbar-light .navbar-nav .nav-link{color:#333}a.nav-link.loginreg{background-color:#0b4499;color:#fff!important;border-radius:40px}a.nav-link.loginreg:hover{background:#1668e2}.nav-link{color:#333;font-size:150%}.nav-item a.nav-link.active{color:#0b4499}.contactimg>img{width:100%}.log-box{padding-top:26px;padding-bottom:26px}.loginform .form-control,.register-form .form-control{color:#000;height:52px}.loginform{margin-top:35px}.loginform label{font-size:18px;font-weight:600}.loginbtn{background:#0b4499;width:100%;margin-top:44px;height:52px;font-size:22px;border-radius:2px;color:#fff!important}.contactimg{position:relative}.login-logo{margin-bottom:20px}.textbox{position:absolute;top:50%;color:#fff;padding:40px;transform:translateY(-50%);text-align:center}.sign-btn{background:#0b4499;width:100%;margin-top:14px;height:52px;font-size:22px;border-radius:2px;color:#fff!important}button.btn.sign-btn:hover{background:#1668e2}\n"],dependencies:[{kind:"directive",type:i2.ɵNgNoValidate,selector:"form:not([ngNoForm]):not([ngNativeValidate])"},{kind:"directive",type:i2.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:i2.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:i2.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:i2.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:i2.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"component",type:ResponsiveButtonGroupComponent,selector:"responsive-button-group",inputs:["collapseSize"]},{kind:"directive",type:i7.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]},{kind:"directive",type:FocusDirective,selector:"[focus]",inputs:["focus"]}]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DialogRegisterContent,decorators:[{type:Component,args:[{selector:"resolveio-dialog.register",template:'\n\t\t<style>\n\t\t collapse-table {\n\t\t width: 100%;\n\t\t}\n\t\t\n\t\t.navbar-light .navbar-nav .active>.nav-link, .navbar-light .navbar-nav .nav-link.active, .navbar-light .navbar-nav .nav-link.show, .navbar-light .navbar-nav .show>.nav-link {\n\t\tcolor: #0b4499;\n\t\t}\n\t\t.navbar-light .navbar-nav .nav-link {\n\t\tcolor:#333;\n\t\t}\n\t\ta.nav-link.loginreg {\n\t\tbackground-color: #0b4499;\n\t\tcolor: #fff !important;\n\t\tborder-radius: 40px;\n\t\t}\n\t\ta.nav-link.loginreg:hover {\n\t\tbackground: #1668e2;\n\t\t}\n\t\t.nav-link {\n\t\tcolor: #333333;\n\t\tfont-size: 150%\n\t\t}\n\t\t.nav-item a.nav-link.active {\n\t\tcolor: #0b4499;\n\t\t}\n\t\t.contactimg>img{\n\t\twidth: 100%;\n\t\t}\n\t\t\n\t\t.log-box {\n\t\tpadding-top: 26px;\n\t\tpadding-bottom: 26px;\n\t\t}\n\t\t.loginform .form-control, .register-form .form-control {\n\t\tcolor: #000;\n\t\theight: 52px;\n\t\t}\n\t\t.loginform {\n\t\tmargin-top: 35px;\n\t\t}\n\t\t.loginform label {\n\t\tfont-size: 18px;\n\t\tfont-weight: 600;\n\t\t}\n\t\t\n\t\t.loginbtn {\n\t\tbackground: #0b4499;\n\t\twidth: 100%;\n\t\tmargin-top: 44px;\n\t\theight: 52px;\n\t\tfont-size: 22px;\n\t\tborder-radius: 2px;\n\t\tcolor: #fff !important;\n\t\t}\n\t\t\n\t\t.contactimg {\n\t\tposition: relative;\n\t\t}\n\t\t.login-logo {\n\t\tmargin-bottom: 20px;\n\t\t}\n\t\t\n\t\t.textbox {\n\t\tposition: absolute;\n\t\ttop: 50%;\n\t\tcolor: #fff;\n\t\tpadding: 40px;\n\t\ttransform: translate(0%, -50%);\n\t\ttext-align: center;\n\t\t}\n\t\t.sign-btn {\n\t\tbackground: #0b4499;\n\t\twidth: 100%;\n\t\tmargin-top: 14px;\n\t\theight: 52px;\n\t\tfont-size: 22px;\n\t\tborder-radius: 2px;\n\t\tcolor: #fff !important;\n\t\t}\n\t\t\n\t\tbutton.btn.sign-btn:hover {\n\t\tbackground: #1668e2;\n\t\t}\n\t\t</style>\n\t\t<form [formGroup]="form" novalidate (ngSubmit)="_activeModal.close(form)">\n\t\t <div class="modal-header">\n\t\t <h4 class="modal-title"><i class="fa fa-question-circle" style="color: blue; font-size: 0.85em" aria-hidden="true"></i> Register</h4>\n\t\t <button type="button" class="btn-close ms-auto" aria-label="Close" (click)="_activeModal.dismiss()"></button>\n\t\t </div>\n\t\t @if (form) {\n\t\t <div class="modal-body">\n\t\t <div class="row justify-content-md-center">\n\t\t <div class="col-lg-12">\n\t\t <div class="row bg-white">\n\t\t <div class="col-lg-6">\n\t\t <div class="contactimg">\n\t\t <img src="/assets/images/loginsignup/formimg.jpg" alt="images" class="img-fluid">\n\t\t <div class="textbox">\n\t\t <div class="login-logo"><img src="/assets/images/loginsignup/login-logo.png" alt="images"></div>\n\t\t </div>\n\t\t </div>\n\t\t </div>\n\t\t <div class="col-lg-6">\n\t\t <div class="log-box">\n\t\t <div class="register-form">\n\t\t <div class="form-group">\n\t\t <label>User Name</label>\n\t\t @if (form.controls.username.hasError(\'required\')) {\n\t\t <em>- Required</em>\n\t\t }\n\t\t <input type="text" class="form-control" [ngClass]="[\'form-control\', form.controls.username.valid ? \'is-valid\' : \'is-invalid\']" formControlName="username" [autofocus]="true" [focus]="true" aria-describedby="emailHelp" placeholder="User Name">\n\t\t </div>\n\t\t <div class="form-group">\n\t\t <label>Full Name</label>\n\t\t @if (form.controls.name.hasError(\'required\')) {\n\t\t <em>- Required</em>\n\t\t }\n\t\t <input type="text" class="form-control" [ngClass]="[\'form-control\', form.controls.name.valid ? \'is-valid\' : \'is-invalid\']" formControlName="name" aria-describedby="emailHelp" placeholder="Name">\n\t\t </div>\n\t\t <div class="form-group">\n\t\t <label>Phone Number</label>\n\t\t @if (form.controls.phone.hasError(\'required\')) {\n\t\t <em>- Required</em>\n\t\t }\n\t\t <input type="text" class="form-control" [ngClass]="[\'form-control\', form.controls.phone.valid ? \'is-valid\' : \'is-invalid\']" formControlName="phone" placeholder="Phone Number">\n\t\t </div>\n\t\t <div class="form-group">\n\t\t <label>Company</label>\n\t\t @if (form.controls.company.hasError(\'required\')) {\n\t\t <em>- Required</em>\n\t\t }\n\t\t <input type="text" class="form-control" [ngClass]="[\'form-control\', form.controls.company.valid ? \'is-valid\' : \'is-invalid\']" formControlName="company" placeholder="Company Name">\n\t\t </div>\n\t\t <div class="form-group">\n\t\t <label>Email</label>\n\t\t @if (form.controls.email.hasError(\'required\')) {\n\t\t <em>- Required</em>\n\t\t }\n\t\t <input type="email" class="form-control" [ngClass]="[\'form-control\', form.controls.email.valid ? \'is-valid\' : \'is-invalid\']" formControlName="email" placeholder="Email">\n\t\t </div>\n\t\t <button type="submit" class="btn sign-btn">Signup</button>\n\t\t </div>\n\t\t </div>\n\t\t </div>\n\t\t </div>\n\t\t </div>\n\t\t </div>\n\t\t </div>\n\t\t }\n\t\t <div class="modal-footer">\n\t\t <responsive-button-group>\n\t\t <button type="button" class="btn btn-secondary" (click)="_activeModal.dismiss()">Cancel</button>\n\t\t </responsive-button-group>\n\t\t </div>\n\t\t</form>\n\t\t',standalone:!1}]}],ctorParameters:()=>[{type:i1$2.NgbActiveModal},{type:i2.FormBuilder}]});class DialogSelectWithButtonsURLContent{_activeModal;_account;url="";close;allElements;title="Select Window Type";selectedType="";options=[{value:"same_tab",text:"Same Tab"},{value:"new_tab",text:"New Tab"},{value:"new_window",text:"New Window"}];constructor(t,e){this._activeModal=t,this._account=e}ngOnInit(){this._account.getUser().settings.routing_preference&&"alwaysAsk"!==this._account.getUser().settings.routing_preference&&("sameTab"===this._account.getUser().settings.routing_preference&&window.open(this.url,"_self"),"newTab"===this._account.getUser().settings.routing_preference&&window.open(this.url,"_blank"),"newWindow"===this._account.getUser().settings.routing_preference&&window.open(this.url,"_blank","toolbar=1,location=1,menubar=1"),this._activeModal.close())}ngAfterViewInit(){setTimeout(()=>{let t=this.recursiveFindFirstElement(this.allElements.nativeElement);t?t.focus():(this.close.nativeElement.focus(),this.close.nativeElement.blur())},100)}recursiveFindFirstElement(t){let e=null,n=t.children;for(let t=0;t<Object.keys(n).length;t++){let o=n[Object.keys(n)[t]];if(o.children&&o.children.length)e=this.recursiveFindFirstElement(o);else{if("BUTTON"===o.tagName&&o.classList.contains("close"))return null;if(!("BUTTON"!==o.tagName&&"INPUT"!==o.tagName&&"SELECT"!==o.tagName&&"TEXTAREA"!==o.tagName||o.hidden||o.disabled))return o}if(e)break}return e}onSelectType(t){this.selectedType=t,this.submit()}submit(){"same_tab"===this.selectedType&&window.open(this.url,"_self"),"new_tab"===this.selectedType&&window.open(this.url,"_blank"),"new_window"===this.selectedType&&window.open(this.url,"_blank","toolbar=1,location=1,menubar=1"),this._activeModal.close()}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DialogSelectWithButtonsURLContent,deps:[{token:i1$2.NgbActiveModal},{token:AccountManagerService}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"21.0.1",type:DialogSelectWithButtonsURLContent,isStandalone:!1,selector:"resolveio-dialog.select-with-buttons-url",inputs:{url:"url"},viewQueries:[{propertyName:"close",first:!0,predicate:["close"],descendants:!0},{propertyName:"allElements",first:!0,predicate:["allElements"],descendants:!0}],ngImport:i0,template:'\n\t\t<style>\n\t\t collapse-table tr:hover {\n\t\t background-color: lightblue;\n\t\t cursor: pointer;\n\t\t}\n\t\t\n\t\t.selected {\n\t\tbackground-color: lightblue;\n\t\t}\n\t\t\n\t\tcollapse-table {\n\t\twidth: 100%;\n\t\t}\n\t\t</style>\n\t\t<div #allElements>\n\t\t <div class="modal-header">\n\t\t <h4 class="modal-title"><i class="fa fa-question-circle" style="color: blue; font-size: 0.85em" aria-hidden="true"></i> {{ title }}</h4>\n\t\t <button type="button" class="btn-close ms-auto" aria-label="Close" (click)="_activeModal.dismiss()" #close></button>\n\t\t </div>\n\t\t <div class="modal-body">\n\t\t <div class="row">\n\t\t @for (option of options; track option.value) {\n\t\t <div class="col">\n\t\t <button style="width: 100%" type="button" [ngClass]="[\'btn\', selectedType === option.value ? \'btn-success\' : \'btn-warning\']" (click)="onSelectType(option.value)">{{option.text}}</button>\n\t\t </div>\n\t\t }\n\t\t </div>\n\t\t </div>\n\t\t</div>\n\t\t',isInline:!0,styles:["collapse-table tr:hover{background-color:#add8e6;cursor:pointer}.selected{background-color:#add8e6}collapse-table{width:100%}\n"],dependencies:[{kind:"directive",type:i7.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]}]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DialogSelectWithButtonsURLContent,decorators:[{type:Component,args:[{selector:"resolveio-dialog.select-with-buttons-url",template:'\n\t\t<style>\n\t\t collapse-table tr:hover {\n\t\t background-color: lightblue;\n\t\t cursor: pointer;\n\t\t}\n\t\t\n\t\t.selected {\n\t\tbackground-color: lightblue;\n\t\t}\n\t\t\n\t\tcollapse-table {\n\t\twidth: 100%;\n\t\t}\n\t\t</style>\n\t\t<div #allElements>\n\t\t <div class="modal-header">\n\t\t <h4 class="modal-title"><i class="fa fa-question-circle" style="color: blue; font-size: 0.85em" aria-hidden="true"></i> {{ title }}</h4>\n\t\t <button type="button" class="btn-close ms-auto" aria-label="Close" (click)="_activeModal.dismiss()" #close></button>\n\t\t </div>\n\t\t <div class="modal-body">\n\t\t <div class="row">\n\t\t @for (option of options; track option.value) {\n\t\t <div class="col">\n\t\t <button style="width: 100%" type="button" [ngClass]="[\'btn\', selectedType === option.value ? \'btn-success\' : \'btn-warning\']" (click)="onSelectType(option.value)">{{option.text}}</button>\n\t\t </div>\n\t\t }\n\t\t </div>\n\t\t </div>\n\t\t</div>\n\t\t',standalone:!1}]}],ctorParameters:()=>[{type:i1$2.NgbActiveModal},{type:AccountManagerService}],propDecorators:{url:[{type:Input}],close:[{type:ViewChild,args:["close",{static:!1}]}],allElements:[{type:ViewChild,args:["allElements",{static:!1}]}]}});class CollapseTableComponent{_resizeService;_account;collapseSize;tableFixed=!1;headerFixed=!1;secondaryColor=!1;tertiaryColor=!1;windowSize=window.innerWidth;windowSizeSubscription=null;constructor(t,e){this._resizeService=t,this._account=e}ngOnInit(){this.windowSizeSubscription=this._resizeService.onResize$.subscribe(t=>{this.windowSize=t.innerWidth}),this._account.getUser()&&this._account.getUser().settings&&(document.documentElement.style.setProperty("--primary-table-color",this._account.getUser().settings.table_color),document.documentElement.style.setProperty("--primary-table-font-color",this._account.getUser().settings.table_font_color),document.documentElement.style.setProperty("--font-size",this._account.getUser().settings.font_size+"px"),document.documentElement.style.setProperty("--secondary-table-color",this._account.getUser().settings.secondary_table_color),document.documentElement.style.setProperty("--secondary-table-font-color",this._account.getUser().settings.secondary_table_font_color),document.documentElement.style.setProperty("--tertiary-table-color",this._account.getUser().settings.tertiary_table_color),document.documentElement.style.setProperty("--tertiary-table-font-color",this._account.getUser().settings.tertiary_table_font_color))}ngOnDestroy(){this.windowSizeSubscription.unsubscribe()}onClick(t){}getCollapseClass(){let t=["table"];return this.secondaryColor?t.push("collapseTable-sec"):this.tertiaryColor?t.push("collapseTable-tert"):t.push("collapseTable"),t}getPrimaryColor(){return this._account.getUser()?this._account.getUser().settings.table_color:"#3b3ee3"}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:CollapseTableComponent,deps:[{token:ResizeService},{token:AccountManagerService}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"21.0.1",type:CollapseTableComponent,isStandalone:!1,selector:"collapse-table",inputs:{collapseSize:"collapseSize",tableFixed:"tableFixed",headerFixed:"headerFixed",secondaryColor:"secondaryColor",tertiaryColor:"tertiaryColor"},ngImport:i0,template:'<style>\n\t:host ::ng-deep :root {\n\t\t--primary-table-color: #3b3ee3;\n\t\t--primary-table-font-color: white;\n\t\t--font-size: 12px;\n\t\t--secondary-table-color: #87ceeb;\n\t\t--secondary-table-font-color: #000000;\n\t\t--tertiary-table-color: #ff4500;\n\t\t--tertiary-table-font-color: #000000;\n\t}\n\n\t:host {\n\t\tdisplay: block;\n\t\twidth: 100%;\n\t}\n\n\t.table-responsive-xl {\n\t\toverflow-y: visible;\n\t\toverflow-x: auto;\n\t\tposition: relative;\n\t}\n\n\t:host ::ng-deep .collapseTable {\n\t\tborder: 1px solid #ccc;\n\t\tmargin: 0;\n\t\tpadding: 0;\n\t\twidth: 100%;\n\t\toverflow: visible;\n\t\tposition: relative;\n\t\t/*table-layout: fixed;*/\n\t}\n\t:host ::ng-deep .collapseTable tr {\n\t\tborder: 1px solid #ddd;\n\t\tpadding: 0.35em;\n\t}\n\t:host ::ng-deep .collapseTable th,\n\t:host ::ng-deep .collapseTable td {\n\t\tpadding: 0.625em;\n\t\ttext-align: center;\n\t\tvertical-align: middle;\n\t}\n\t:host ::ng-deep .collapseTable th {\n\t\tletter-spacing: 0.1em;\n\t\ttext-transform: uppercase;\n\t\tbackground-color: var(--primary-table-color);\n\t\tcolor: var(--primary-table-font-color);\n\t\tfont-size: var(--font-size);\n\t\tposition: sticky;\n\t\tz-index: 10;\n\t\ttop: 0;\n\t}\n\t:host ::ng-deep .collapseTable-sec {\n\t\tborder: 1px solid #ccc;\n\t\tmargin: 0;\n\t\tpadding: 0;\n\t\twidth: 100%;\n\t\toverflow: visible;\n\t\tposition: relative;\n\t}\n\t:host ::ng-deep .collapseTable-sec tr {\n\t\tborder: 1px solid #ddd;\n\t\tpadding: 0.35em;\n\t}\n\t:host ::ng-deep .collapseTable-sec th,\n\t:host ::ng-deep .collapseTable-sec td {\n\t\tpadding: 0.625em;\n\t\ttext-align: center;\n\t}\n\t:host ::ng-deep .collapseTable-sec th {\n\t\tletter-spacing: 0.1em;\n\t\ttext-transform: uppercase;\n\t\tbackground-color: var(--secondary-table-color);\n\t\tcolor: var(--secondary-table-font-color);\n\t\tfont-size: var(--font-size);\n\t\tposition: sticky;\n\t\tz-index: 10;\n\t\ttop: 0;\n\t}\n\t:host ::ng-deep .collapseTable-tert {\n\t\tborder: 1px solid #ccc;\n\t\tmargin: 0;\n\t\tpadding: 0;\n\t\twidth: 100%;\n\t\toverflow: visible;\n\t\tposition: relative;\n\t}\n\t:host ::ng-deep .collapseTable-tert tr {\n\t\tborder: 1px solid #ddd;\n\t\tpadding: 0.35em;\n\t}\n\t:host ::ng-deep .collapseTable-tert th,\n\t:host ::ng-deep .collapseTable-tert td {\n\t\tpadding: 0.625em;\n\t\ttext-align: center;\n\t}\n\t:host ::ng-deep .collapseTable-tert th {\n\t\tletter-spacing: 0.1em;\n\t\ttext-transform: uppercase;\n\t\tbackground-color: var(--tertiary-table-color);\n\t\tcolor: var(--tertiary-table-font-color);\n\t\tfont-size: var(--font-size);\n\t\tposition: sticky;\n\t\tz-index: 10;\n\t\ttop: 0;\n\t}\n\n\t.fixed {\n\t\ttable-layout: fixed;\n\t}\n\n\t:host ::ng-deep .headerFixed thead,\n\t:host ::ng-deep .headerFixed tbody tr {\n\t\tdisplay: table;\n\t\twidth: 100%;\n\t\ttable-layout: fixed;\n\t}\n\n\t:host ::ng-deep .collapseTable,\n\t:host ::ng-deep .collapseTable-sec,\n\t:host ::ng-deep .collapseTable-tert {\n\t\tbox-shadow: 0 0 15px rgba(0, 0, 0, 0.25);\n\t}\n\n\t:host ::ng-deep .collapseTable > thead:first-of-type > tr:first-child > th:first-child,\n\t:host ::ng-deep .collapseTable-sec > thead:first-of-type > tr:first-child > th:first-child,\n\t:host ::ng-deep .collapseTable-tert > thead:first-of-type > tr:first-child > th:first-child {\n\t\tborder-top-left-radius: 10px;\n\t}\n\n\t:host ::ng-deep .collapseTable > thead:first-of-type > tr:first-child > th:last-child,\n\t:host ::ng-deep .collapseTable-sec > thead:first-of-type > tr:first-child > th:last-child,\n\t:host ::ng-deep .collapseTable-tert > thead:first-of-type > tr:first-child > th:last-child {\n\t\tborder-top-right-radius: 10px;\n\t}\n\n\t:host ::ng-deep .collapseTable > tbody:last-of-type > tr:last-child > td:first-child,\n\t:host ::ng-deep .collapseTable-sec > tbody:last-of-type > tr:last-child > td:first-child,\n\t:host ::ng-deep .collapseTable-tert > tbody:last-of-type > tr:last-child > td:first-child {\n\t\tborder-bottom-left-radius: 10px;\n\t}\n\n\t:host ::ng-deep .collapseTable > tbody:last-of-type > tr:last-child > td:last-child,\n\t:host ::ng-deep .collapseTable-sec > tbody:last-of-type > tr:last-child > td:last-child,\n\t:host ::ng-deep .collapseTable-tert > tbody:last-of-type > tr:last-child > td:last-child {\n\t\tborder-bottom-right-radius: 10px;\n\t}\n\n\t.hide {\n\t\tdisplay: none;\n\t}\n\n\t.table-responsive-xl {\n\t\toverflow: visible !important;\n\t\tposition: relative;\n\t}\n</style>\n\n<div class="table-responsive-xl">\n\t<table [ngClass]="getCollapseClass()" style="border: none" cellspacing="0" cellpadding="0">\n\t\t<ng-content></ng-content>\n\t</table>\n</div>\n',styles:[":host ::ng-deep :root{--primary-table-color: #3b3ee3;--primary-table-font-color: white;--font-size: 12px;--secondary-table-color: #87ceeb;--secondary-table-font-color: #000000;--tertiary-table-color: #ff4500;--tertiary-table-font-color: #000000}:host{display:block;width:100%}.table-responsive-xl{overflow-y:visible;overflow-x:auto;position:relative}:host ::ng-deep .collapseTable{border:1px solid #ccc;margin:0;padding:0;width:100%;overflow:visible;position:relative}:host ::ng-deep .collapseTable tr{border:1px solid #ddd;padding:.35em}:host ::ng-deep .collapseTable th,:host ::ng-deep .collapseTable td{padding:.625em;text-align:center;vertical-align:middle}:host ::ng-deep .collapseTable th{letter-spacing:.1em;text-transform:uppercase;background-color:var(--primary-table-color);color:var(--primary-table-font-color);font-size:var(--font-size);position:sticky;z-index:10;top:0}:host ::ng-deep .collapseTable-sec{border:1px solid #ccc;margin:0;padding:0;width:100%;overflow:visible;position:relative}:host ::ng-deep .collapseTable-sec tr{border:1px solid #ddd;padding:.35em}:host ::ng-deep .collapseTable-sec th,:host ::ng-deep .collapseTable-sec td{padding:.625em;text-align:center}:host ::ng-deep .collapseTable-sec th{letter-spacing:.1em;text-transform:uppercase;background-color:var(--secondary-table-color);color:var(--secondary-table-font-color);font-size:var(--font-size);position:sticky;z-index:10;top:0}:host ::ng-deep .collapseTable-tert{border:1px solid #ccc;margin:0;padding:0;width:100%;overflow:visible;position:relative}:host ::ng-deep .collapseTable-tert tr{border:1px solid #ddd;padding:.35em}:host ::ng-deep .collapseTable-tert th,:host ::ng-deep .collapseTable-tert td{padding:.625em;text-align:center}:host ::ng-deep .collapseTable-tert th{letter-spacing:.1em;text-transform:uppercase;background-color:var(--tertiary-table-color);color:var(--tertiary-table-font-color);font-size:var(--font-size);position:sticky;z-index:10;top:0}.fixed{table-layout:fixed}:host ::ng-deep .headerFixed thead,:host ::ng-deep .headerFixed tbody tr{display:table;width:100%;table-layout:fixed}:host ::ng-deep .collapseTable,:host ::ng-deep .collapseTable-sec,:host ::ng-deep .collapseTable-tert{box-shadow:0 0 15px #00000040}:host ::ng-deep .collapseTable>thead:first-of-type>tr:first-child>th:first-child,:host ::ng-deep .collapseTable-sec>thead:first-of-type>tr:first-child>th:first-child,:host ::ng-deep .collapseTable-tert>thead:first-of-type>tr:first-child>th:first-child{border-top-left-radius:10px}:host ::ng-deep .collapseTable>thead:first-of-type>tr:first-child>th:last-child,:host ::ng-deep .collapseTable-sec>thead:first-of-type>tr:first-child>th:last-child,:host ::ng-deep .collapseTable-tert>thead:first-of-type>tr:first-child>th:last-child{border-top-right-radius:10px}:host ::ng-deep .collapseTable>tbody:last-of-type>tr:last-child>td:first-child,:host ::ng-deep .collapseTable-sec>tbody:last-of-type>tr:last-child>td:first-child,:host ::ng-deep .collapseTable-tert>tbody:last-of-type>tr:last-child>td:first-child{border-bottom-left-radius:10px}:host ::ng-deep .collapseTable>tbody:last-of-type>tr:last-child>td:last-child,:host ::ng-deep .collapseTable-sec>tbody:last-of-type>tr:last-child>td:last-child,:host ::ng-deep .collapseTable-tert>tbody:last-of-type>tr:last-child>td:last-child{border-bottom-right-radius:10px}.hide{display:none}.table-responsive-xl{overflow:visible!important;position:relative}\n"],dependencies:[{kind:"directive",type:i7.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]}]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:CollapseTableComponent,decorators:[{type:Component,args:[{selector:"collapse-table",standalone:!1,template:'<style>\n\t:host ::ng-deep :root {\n\t\t--primary-table-color: #3b3ee3;\n\t\t--primary-table-font-color: white;\n\t\t--font-size: 12px;\n\t\t--secondary-table-color: #87ceeb;\n\t\t--secondary-table-font-color: #000000;\n\t\t--tertiary-table-color: #ff4500;\n\t\t--tertiary-table-font-color: #000000;\n\t}\n\n\t:host {\n\t\tdisplay: block;\n\t\twidth: 100%;\n\t}\n\n\t.table-responsive-xl {\n\t\toverflow-y: visible;\n\t\toverflow-x: auto;\n\t\tposition: relative;\n\t}\n\n\t:host ::ng-deep .collapseTable {\n\t\tborder: 1px solid #ccc;\n\t\tmargin: 0;\n\t\tpadding: 0;\n\t\twidth: 100%;\n\t\toverflow: visible;\n\t\tposition: relative;\n\t\t/*table-layout: fixed;*/\n\t}\n\t:host ::ng-deep .collapseTable tr {\n\t\tborder: 1px solid #ddd;\n\t\tpadding: 0.35em;\n\t}\n\t:host ::ng-deep .collapseTable th,\n\t:host ::ng-deep .collapseTable td {\n\t\tpadding: 0.625em;\n\t\ttext-align: center;\n\t\tvertical-align: middle;\n\t}\n\t:host ::ng-deep .collapseTable th {\n\t\tletter-spacing: 0.1em;\n\t\ttext-transform: uppercase;\n\t\tbackground-color: var(--primary-table-color);\n\t\tcolor: var(--primary-table-font-color);\n\t\tfont-size: var(--font-size);\n\t\tposition: sticky;\n\t\tz-index: 10;\n\t\ttop: 0;\n\t}\n\t:host ::ng-deep .collapseTable-sec {\n\t\tborder: 1px solid #ccc;\n\t\tmargin: 0;\n\t\tpadding: 0;\n\t\twidth: 100%;\n\t\toverflow: visible;\n\t\tposition: relative;\n\t}\n\t:host ::ng-deep .collapseTable-sec tr {\n\t\tborder: 1px solid #ddd;\n\t\tpadding: 0.35em;\n\t}\n\t:host ::ng-deep .collapseTable-sec th,\n\t:host ::ng-deep .collapseTable-sec td {\n\t\tpadding: 0.625em;\n\t\ttext-align: center;\n\t}\n\t:host ::ng-deep .collapseTable-sec th {\n\t\tletter-spacing: 0.1em;\n\t\ttext-transform: uppercase;\n\t\tbackground-color: var(--secondary-table-color);\n\t\tcolor: var(--secondary-table-font-color);\n\t\tfont-size: var(--font-size);\n\t\tposition: sticky;\n\t\tz-index: 10;\n\t\ttop: 0;\n\t}\n\t:host ::ng-deep .collapseTable-tert {\n\t\tborder: 1px solid #ccc;\n\t\tmargin: 0;\n\t\tpadding: 0;\n\t\twidth: 100%;\n\t\toverflow: visible;\n\t\tposition: relative;\n\t}\n\t:host ::ng-deep .collapseTable-tert tr {\n\t\tborder: 1px solid #ddd;\n\t\tpadding: 0.35em;\n\t}\n\t:host ::ng-deep .collapseTable-tert th,\n\t:host ::ng-deep .collapseTable-tert td {\n\t\tpadding: 0.625em;\n\t\ttext-align: center;\n\t}\n\t:host ::ng-deep .collapseTable-tert th {\n\t\tletter-spacing: 0.1em;\n\t\ttext-transform: uppercase;\n\t\tbackground-color: var(--tertiary-table-color);\n\t\tcolor: var(--tertiary-table-font-color);\n\t\tfont-size: var(--font-size);\n\t\tposition: sticky;\n\t\tz-index: 10;\n\t\ttop: 0;\n\t}\n\n\t.fixed {\n\t\ttable-layout: fixed;\n\t}\n\n\t:host ::ng-deep .headerFixed thead,\n\t:host ::ng-deep .headerFixed tbody tr {\n\t\tdisplay: table;\n\t\twidth: 100%;\n\t\ttable-layout: fixed;\n\t}\n\n\t:host ::ng-deep .collapseTable,\n\t:host ::ng-deep .collapseTable-sec,\n\t:host ::ng-deep .collapseTable-tert {\n\t\tbox-shadow: 0 0 15px rgba(0, 0, 0, 0.25);\n\t}\n\n\t:host ::ng-deep .collapseTable > thead:first-of-type > tr:first-child > th:first-child,\n\t:host ::ng-deep .collapseTable-sec > thead:first-of-type > tr:first-child > th:first-child,\n\t:host ::ng-deep .collapseTable-tert > thead:first-of-type > tr:first-child > th:first-child {\n\t\tborder-top-left-radius: 10px;\n\t}\n\n\t:host ::ng-deep .collapseTable > thead:first-of-type > tr:first-child > th:last-child,\n\t:host ::ng-deep .collapseTable-sec > thead:first-of-type > tr:first-child > th:last-child,\n\t:host ::ng-deep .collapseTable-tert > thead:first-of-type > tr:first-child > th:last-child {\n\t\tborder-top-right-radius: 10px;\n\t}\n\n\t:host ::ng-deep .collapseTable > tbody:last-of-type > tr:last-child > td:first-child,\n\t:host ::ng-deep .collapseTable-sec > tbody:last-of-type > tr:last-child > td:first-child,\n\t:host ::ng-deep .collapseTable-tert > tbody:last-of-type > tr:last-child > td:first-child {\n\t\tborder-bottom-left-radius: 10px;\n\t}\n\n\t:host ::ng-deep .collapseTable > tbody:last-of-type > tr:last-child > td:last-child,\n\t:host ::ng-deep .collapseTable-sec > tbody:last-of-type > tr:last-child > td:last-child,\n\t:host ::ng-deep .collapseTable-tert > tbody:last-of-type > tr:last-child > td:last-child {\n\t\tborder-bottom-right-radius: 10px;\n\t}\n\n\t.hide {\n\t\tdisplay: none;\n\t}\n\n\t.table-responsive-xl {\n\t\toverflow: visible !important;\n\t\tposition: relative;\n\t}\n</style>\n\n<div class="table-responsive-xl">\n\t<table [ngClass]="getCollapseClass()" style="border: none" cellspacing="0" cellpadding="0">\n\t\t<ng-content></ng-content>\n\t</table>\n</div>\n'}]}],ctorParameters:()=>[{type:ResizeService},{type:AccountManagerService}],propDecorators:{collapseSize:[{type:Input}],tableFixed:[{type:Input}],headerFixed:[{type:Input}],secondaryColor:[{type:Input}],tertiaryColor:[{type:Input}]}});class DialogSelectArrayObjsContent{_activeModal;title="";objects=[];multiple=!1;allowNone=!1;close;allElements;selectedIndex=null;selectedItem=null;selectedIndexes=[];selectedItems=[];constructor(t){this._activeModal=t}ngAfterViewInit(){setTimeout(()=>{let t=this.recursiveFindFirstElement(this.allElements.nativeElement);t?t.focus():(this.close.nativeElement.focus(),this.close.nativeElement.blur())},100),this.objects.forEach((t,e)=>{t.selected&&(this.selectedIndexes.push(e),this.selectedItems.push(t))})}recursiveFindFirstElement(t){let e=null,n=t.children;for(let t=0;t<Object.keys(n).length;t++){let o=n[Object.keys(n)[t]];if(o.children&&o.children.length)e=this.recursiveFindFirstElement(o);else{if("BUTTON"===o.tagName&&o.classList.contains("close"))return null;if(!("BUTTON"!==o.tagName&&"INPUT"!==o.tagName&&"SELECT"!==o.tagName&&"TEXTAREA"!==o.tagName||o.hidden||o.disabled))return o}if(e)break}return e}onSelectItem(t){this.multiple?this.selectedItems.some(e=>e.value===this.objects[t].value)?(this.selectedIndexes.splice(this.selectedIndexes.indexOf(t),1),this.selectedItems.splice(this.selectedItems.map(t=>t.value).indexOf(this.objects[t].value),1)):(this.selectedIndexes.push(t),this.selectedItems.push(this.objects[t])):this.objects[t]===this.selectedItem?(this.selectedItem=null,this.selectedIndex=null):(this.selectedItem=this.objects[t],this.selectedIndex=t)}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DialogSelectArrayObjsContent,deps:[{token:i1$2.NgbActiveModal}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"21.0.1",type:DialogSelectArrayObjsContent,isStandalone:!1,selector:"resolveio-dialog.select-array-objs",inputs:{title:"title",objects:"objects",multiple:"multiple",allowNone:"allowNone"},viewQueries:[{propertyName:"close",first:!0,predicate:["close"],descendants:!0},{propertyName:"allElements",first:!0,predicate:["allElements"],descendants:!0}],ngImport:i0,template:'\n\t\t<style>\n\t\t collapse-table tr:hover {\n\t\t background-color: lightblue;\n\t\t cursor: pointer;\n\t\t}\n\t\t\n\t\t.selected {\n\t\tbackground-color: lightblue;\n\t\t}\n\t\t\n\t\tcollapse-table {\n\t\twidth: 100%;\n\t\t}\n\t\t</style>\n\t\t<div #allElements>\n\t\t <div class="modal-header">\n\t\t <h4 class="modal-title"><i class="fa fa-question-circle" style="color: blue; font-size: 0.85em" aria-hidden="true"></i> {{ title }}</h4>\n\t\t <button type="button" class="btn-close ms-auto" aria-label="Close" (click)="_activeModal.dismiss()" #close></button>\n\t\t </div>\n\t\t <div class="modal-body">\n\t\t <div style="height: 60vh; overflow-y: auto">\n\t\t <collapse-table collapseSize="900">\n\t\t <thead>\n\t\t <tr>\n\t\t <th>List</th>\n\t\t </tr>\n\t\t </thead>\n\t\t <tbody>\n\t\t @for (object of objects; track object.text; let i = $index) {\n\t\t <tr (click)="onSelectItem(i)" [ngClass]="{\'selected\' : i === selectedIndex || selectedIndexes.includes(i)}">\n\t\t <td>{{object.text}}</td>\n\t\t </tr>\n\t\t }\n\t\t </tbody>\n\t\t </collapse-table>\n\t\t </div>\n\t\t</div>\n\t\t<div class="modal-footer">\n\t\t @if (!allowNone) {\n\t\t <button type="button" [ngClass]="[\'btn\', (selectedItem || selectedItems.length) ? \'btn-success\' : \'btn-danger\']" [disabled]="!selectedItem && !selectedItems.length" (click)="_activeModal.close(selectedItem || selectedItems)">Submit</button>\n\t\t }\n\t\t @if (allowNone) {\n\t\t <button type="button" class="btn btn-success" (click)="_activeModal.close(selectedItem || selectedItems)">Submit</button>\n\t\t }\n\t\t <button type="button" class="btn btn-secondary" (click)="_activeModal.dismiss()">Cancel</button>\n\t\t</div>\n\t\t</div>\n\t\t',isInline:!0,styles:["collapse-table tr:hover{background-color:#add8e6;cursor:pointer}.selected{background-color:#add8e6}collapse-table{width:100%}\n"],dependencies:[{kind:"component",type:CollapseTableComponent,selector:"collapse-table",inputs:["collapseSize","tableFixed","headerFixed","secondaryColor","tertiaryColor"]},{kind:"directive",type:i7.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]}]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DialogSelectArrayObjsContent,decorators:[{type:Component,args:[{selector:"resolveio-dialog.select-array-objs",template:'\n\t\t<style>\n\t\t collapse-table tr:hover {\n\t\t background-color: lightblue;\n\t\t cursor: pointer;\n\t\t}\n\t\t\n\t\t.selected {\n\t\tbackground-color: lightblue;\n\t\t}\n\t\t\n\t\tcollapse-table {\n\t\twidth: 100%;\n\t\t}\n\t\t</style>\n\t\t<div #allElements>\n\t\t <div class="modal-header">\n\t\t <h4 class="modal-title"><i class="fa fa-question-circle" style="color: blue; font-size: 0.85em" aria-hidden="true"></i> {{ title }}</h4>\n\t\t <button type="button" class="btn-close ms-auto" aria-label="Close" (click)="_activeModal.dismiss()" #close></button>\n\t\t </div>\n\t\t <div class="modal-body">\n\t\t <div style="height: 60vh; overflow-y: auto">\n\t\t <collapse-table collapseSize="900">\n\t\t <thead>\n\t\t <tr>\n\t\t <th>List</th>\n\t\t </tr>\n\t\t </thead>\n\t\t <tbody>\n\t\t @for (object of objects; track object.text; let i = $index) {\n\t\t <tr (click)="onSelectItem(i)" [ngClass]="{\'selected\' : i === selectedIndex || selectedIndexes.includes(i)}">\n\t\t <td>{{object.text}}</td>\n\t\t </tr>\n\t\t }\n\t\t </tbody>\n\t\t </collapse-table>\n\t\t </div>\n\t\t</div>\n\t\t<div class="modal-footer">\n\t\t @if (!allowNone) {\n\t\t <button type="button" [ngClass]="[\'btn\', (selectedItem || selectedItems.length) ? \'btn-success\' : \'btn-danger\']" [disabled]="!selectedItem && !selectedItems.length" (click)="_activeModal.close(selectedItem || selectedItems)">Submit</button>\n\t\t }\n\t\t @if (allowNone) {\n\t\t <button type="button" class="btn btn-success" (click)="_activeModal.close(selectedItem || selectedItems)">Submit</button>\n\t\t }\n\t\t <button type="button" class="btn btn-secondary" (click)="_activeModal.dismiss()">Cancel</button>\n\t\t</div>\n\t\t</div>\n\t\t',standalone:!1}]}],ctorParameters:()=>[{type:i1$2.NgbActiveModal}],propDecorators:{title:[{type:Input}],objects:[{type:Input}],multiple:[{type:Input}],allowNone:[{type:Input}],close:[{type:ViewChild,args:["close",{static:!1}]}],allElements:[{type:ViewChild,args:["allElements",{static:!1}]}]}});class DialogSelectArrayContent{_activeModal;_cdRef;title="";array=[];multiple;selectedIndexes=[];close;allElements;method="list";mappedArray=[];selectIndexes=[];constructor(t,e){this._activeModal=t,this._cdRef=e}ngOnInit(){this.mappedArray=this.array.map((t,e)=>({value:e,text:t})),this.selectedIndexes.forEach(t=>{this.selectIndexes.push(t)})}ngAfterViewInit(){setTimeout(()=>{let t=this.recursiveFindFirstElement(this.allElements.nativeElement);t?t.focus():(this.close.nativeElement.focus(),this.close.nativeElement.blur())},100)}recursiveFindFirstElement(t){let e=null,n=t.children;for(let t=0;t<Object.keys(n).length;t++){let o=n[Object.keys(n)[t]];if(o.children&&o.children.length)e=this.recursiveFindFirstElement(o);else{if("BUTTON"===o.tagName&&o.classList.contains("close"))return null;if(!("BUTTON"!==o.tagName&&"INPUT"!==o.tagName&&"SELECT"!==o.tagName&&"TEXTAREA"!==o.tagName||o.hidden||o.disabled))return o}if(e)break}return e}addDropDown(){let t=this.array.filter((t,e)=>!this.selectedIndexes.includes(e))[0],e=this.array.findIndex(e=>e===t);this.selectedIndexes.push(e),this.selectIndexes.push(e)}onSelectDropdown(t,e){this.onSelectItem(this.selectedIndexes[e]),this.onSelectItem(t)}availableAdd(){return!!this.array.filter((t,e)=>!this.selectedIndexes.includes(e))[0]}getFilteredArray(t){return this.mappedArray.filter(e=>e.value===t||!this.selectedIndexes.includes(e.value))}isInSelectedIndex(t){return!!this.selectedIndexes.includes(t)}onSelectItem(t){this.multiple?this.selectedIndexes.includes(t)?(this.selectedIndexes.splice(this.selectedIndexes.indexOf(t),1),this.selectIndexes.splice(this.selectIndexes.indexOf(t),1)):(this.selectedIndexes.push(t),this.selectIndexes.push(t)):this.selectedIndexes.includes(t)?(this.selectedIndexes=[],this.selectIndexes=[]):(this.selectedIndexes=[t],this.selectIndexes=[t])}getArray(){let t=[];return this.selectedIndexes.forEach(e=>{t.push(this.array[e])}),t}selectAll(){this.selectedIndexes=[],this.selectIndexes=[],this.array.forEach((t,e)=>{this.selectedIndexes.push(e),this.selectIndexes.push(e)})}removeAll(){this.selectedIndexes=[],this.selectIndexes=[]}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DialogSelectArrayContent,deps:[{token:i1$2.NgbActiveModal},{token:i0.ChangeDetectorRef}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"21.0.1",type:DialogSelectArrayContent,isStandalone:!1,selector:"resolveio-dialog.select-array",inputs:{title:"title",array:"array",multiple:"multiple",selectedIndexes:"selectedIndexes"},viewQueries:[{propertyName:"close",first:!0,predicate:["close"],descendants:!0},{propertyName:"allElements",first:!0,predicate:["allElements"],descendants:!0}],ngImport:i0,template:'\n\t\t<style>\n\t\t collapse-table tr:hover {\n\t\t background-color: lightblue;\n\t\t cursor: pointer;\n\t\t}\n\t\t\n\t\t.selected {\n\t\tbackground-color: lightblue;\n\t\t}\n\t\t\n\t\tcollapse-table {\n\t\twidth: 100%;\n\t\t}\n\t\t</style>\n\t\t<div #allElements>\n\t\t <div class="modal-header">\n\t\t <h4 class="modal-title"><i class="fa fa-question-circle" style="color: blue; font-size: 0.85em" aria-hidden="true"></i> {{ title }}</h4>\n\t\t <button type="button" class="btn-close ms-auto" aria-label="Close" (click)="_activeModal.dismiss()" #close></button>\n\t\t </div>\n\t\t <div class="modal-body" style="height: 60vh;">\n\t\t <responsive-button-group>\n\t\t @if (multiple) {\n\t\t <button type="button" class="btn btn-primary" (click)="selectAll()">Select All</button>\n\t\t <button type="button" class="btn btn-danger" (click)="removeAll()">Remove All</button>\n\t\t }\n\t\t <button type="button" [ngClass]="[\'btn\', method === \'list\' ? \'btn-success\' : \'btn-warning\']" (click)="method = \'list\'">Use List</button>\n\t\t <button type="button" [ngClass]="[\'btn\', method === \'dropdown\' ? \'btn-success\' : \'btn-warning\']" (click)="method = \'dropdown\'">Use Dropdown</button>\n\t\t </responsive-button-group>\n\t\t <div style="height: 50vh; overflow-y: auto; margin-top: 10px">\n\t\t @if (method === \'list\') {\n\t\t <collapse-table collapseSize="900">\n\t\t <thead>\n\t\t <tr>\n\t\t <th>List</th>\n\t\t </tr>\n\t\t </thead>\n\t\t <tbody>\n\t\t @for (data of array; track data; let i = $index) {\n\t\t <tr (click)="onSelectItem(i)" [ngClass]="{\'selected\' : isInSelectedIndex(i)}">\n\t\t <td>{{data}}</td>\n\t\t </tr>\n\t\t }\n\t\t </tbody>\n\t\t </collapse-table>\n\t\t }\n\t\t @if (method === \'dropdown\') {\n\t\t <collapse-table collapseSize="900">\n\t\t <thead>\n\t\t <tr>\n\t\t <th>Item</th>\n\t\t <th>Remove</th>\n\t\t </tr>\n\t\t </thead>\n\t\t <tbody>\n\t\t @for (item of selectIndexes; track item; let i = $index) {\n\t\t <tr>\n\t\t <td>\n\t\t <ng-select placeholder="Select Item" [ngModel]="item" (change)="onSelectDropdown($event, i)">\n\t\t @for (data of getFilteredArray(item); track data.value) {\n\t\t <ng-option [value]="data.value">{{data.text}}</ng-option>\n\t\t }\n\t\t </ng-select>\n\t\t </td>\n\t\t <td>\n\t\t <button type="button" class="btn btn-danger" (click)="onSelectItem(item)">Remove</button>\n\t\t </td>\n\t\t </tr>\n\t\t }\n\t\t </tbody>\n\t\t </collapse-table>\n\t\t @if (multiple || !selectIndexes.length) {\n\t\t <button type="button" class="btn btn-success" (click)="addDropDown()" [disabled]="!availableAdd()">Add</button>\n\t\t }\n\t\t }\n\t\t</div>\n\t\t</div>\n\t\t<div class="modal-footer">\n\t\t <button type="button" [ngClass]="[\'btn\', selectedIndexes.length ? \'btn-success\' : \'btn-danger\']" [disabled]="!selectedIndexes.length || this.selectedIndexes.includes(null)" (click)="_activeModal.close(this.multiple ? getArray() : array[selectedIndexes[0]])">Submit</button>\n\t\t <button type="button" class="btn btn-secondary" (click)="_activeModal.dismiss()">Cancel</button>\n\t\t</div>\n\t\t</div>\n\t\t',isInline:!0,styles:["collapse-table tr:hover{background-color:#add8e6;cursor:pointer}.selected{background-color:#add8e6}collapse-table{width:100%}\n"],dependencies:[{kind:"directive",type:i2.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:i2.NgModel,selector:"[ngModel]:not([formControlName]):not([formControl])",inputs:["name","disabled","ngModel","ngModelOptions"],outputs:["ngModelChange"],exportAs:["ngModel"]},{kind:"component",type:CollapseTableComponent,selector:"collapse-table",inputs:["collapseSize","tableFixed","headerFixed","secondaryColor","tertiaryColor"]},{kind:"component",type:ResponsiveButtonGroupComponent,selector:"responsive-button-group",inputs:["collapseSize"]},{kind:"component",type:i5.NgSelectComponent,selector:"ng-select",inputs:["placeholder","multiple","panelMaxHeight","panelMaxViewportRatio","optionHeight","virtualBuffer","overlayZIndex","autoSizePanel","panelPosition","autoCenterPanel","viewportMargin","panelWidth","panelFullscreenWidth","clearable","templateLabelFromView","searchable","searchMatchMode","defaultSearch","textWrap","compareWith","options","optionLabelKey","optionLabelFn","optionValueKey","optionDisabledKey","optionIdKey","optionGroupKey","disabled","emitOptionObject","debugLog","stickyKey","stickyAutoSave"],outputs:["change"]},{kind:"component",type:i5.NgOptionComponent,selector:"ng-option",inputs:["value","disabled","label","id"]},{kind:"directive",type:i7.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]}],changeDetection:i0.ChangeDetectionStrategy.OnPush})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DialogSelectArrayContent,decorators:[{type:Component,args:[{selector:"resolveio-dialog.select-array",template:'\n\t\t<style>\n\t\t collapse-table tr:hover {\n\t\t background-color: lightblue;\n\t\t cursor: pointer;\n\t\t}\n\t\t\n\t\t.selected {\n\t\tbackground-color: lightblue;\n\t\t}\n\t\t\n\t\tcollapse-table {\n\t\twidth: 100%;\n\t\t}\n\t\t</style>\n\t\t<div #allElements>\n\t\t <div class="modal-header">\n\t\t <h4 class="modal-title"><i class="fa fa-question-circle" style="color: blue; font-size: 0.85em" aria-hidden="true"></i> {{ title }}</h4>\n\t\t <button type="button" class="btn-close ms-auto" aria-label="Close" (click)="_activeModal.dismiss()" #close></button>\n\t\t </div>\n\t\t <div class="modal-body" style="height: 60vh;">\n\t\t <responsive-button-group>\n\t\t @if (multiple) {\n\t\t <button type="button" class="btn btn-primary" (click)="selectAll()">Select All</button>\n\t\t <button type="button" class="btn btn-danger" (click)="removeAll()">Remove All</button>\n\t\t }\n\t\t <button type="button" [ngClass]="[\'btn\', method === \'list\' ? \'btn-success\' : \'btn-warning\']" (click)="method = \'list\'">Use List</button>\n\t\t <button type="button" [ngClass]="[\'btn\', method === \'dropdown\' ? \'btn-success\' : \'btn-warning\']" (click)="method = \'dropdown\'">Use Dropdown</button>\n\t\t </responsive-button-group>\n\t\t <div style="height: 50vh; overflow-y: auto; margin-top: 10px">\n\t\t @if (method === \'list\') {\n\t\t <collapse-table collapseSize="900">\n\t\t <thead>\n\t\t <tr>\n\t\t <th>List</th>\n\t\t </tr>\n\t\t </thead>\n\t\t <tbody>\n\t\t @for (data of array; track data; let i = $index) {\n\t\t <tr (click)="onSelectItem(i)" [ngClass]="{\'selected\' : isInSelectedIndex(i)}">\n\t\t <td>{{data}}</td>\n\t\t </tr>\n\t\t }\n\t\t </tbody>\n\t\t </collapse-table>\n\t\t }\n\t\t @if (method === \'dropdown\') {\n\t\t <collapse-table collapseSize="900">\n\t\t <thead>\n\t\t <tr>\n\t\t <th>Item</th>\n\t\t <th>Remove</th>\n\t\t </tr>\n\t\t </thead>\n\t\t <tbody>\n\t\t @for (item of selectIndexes; track item; let i = $index) {\n\t\t <tr>\n\t\t <td>\n\t\t <ng-select placeholder="Select Item" [ngModel]="item" (change)="onSelectDropdown($event, i)">\n\t\t @for (data of getFilteredArray(item); track data.value) {\n\t\t <ng-option [value]="data.value">{{data.text}}</ng-option>\n\t\t }\n\t\t </ng-select>\n\t\t </td>\n\t\t <td>\n\t\t <button type="button" class="btn btn-danger" (click)="onSelectItem(item)">Remove</button>\n\t\t </td>\n\t\t </tr>\n\t\t }\n\t\t </tbody>\n\t\t </collapse-table>\n\t\t @if (multiple || !selectIndexes.length) {\n\t\t <button type="button" class="btn btn-success" (click)="addDropDown()" [disabled]="!availableAdd()">Add</button>\n\t\t }\n\t\t }\n\t\t</div>\n\t\t</div>\n\t\t<div class="modal-footer">\n\t\t <button type="button" [ngClass]="[\'btn\', selectedIndexes.length ? \'btn-success\' : \'btn-danger\']" [disabled]="!selectedIndexes.length || this.selectedIndexes.includes(null)" (click)="_activeModal.close(this.multiple ? getArray() : array[selectedIndexes[0]])">Submit</button>\n\t\t <button type="button" class="btn btn-secondary" (click)="_activeModal.dismiss()">Cancel</button>\n\t\t</div>\n\t\t</div>\n\t\t',changeDetection:ChangeDetectionStrategy.OnPush,standalone:!1}]}],ctorParameters:()=>[{type:i1$2.NgbActiveModal},{type:i0.ChangeDetectorRef}],propDecorators:{title:[{type:Input}],array:[{type:Input}],multiple:[{type:Input}],selectedIndexes:[{type:Input}],close:[{type:ViewChild,args:["close",{static:!1}]}],allElements:[{type:ViewChild,args:["allElements",{static:!1}]}]}});class DialogService{modalService;constructor(t){this.modalService=t}openDialog(t,e={size:"lg",backdrop:"static"}){return this.modalService.open(t,e)}notify(t){const e=this.openDialog(DialogNotifyContent);e.componentInstance.title="Notify",e.componentInstance.body=t}input(t,e){const n=this.openDialog(DialogInputContent);return n.componentInstance.title=t,n.componentInstance.inputFields=e,n.result}error(t){const e=this.openDialog(DialogErrorContent);e.componentInstance.title="Error",e.componentInstance.body=t}confirm(t,e){const n=this.openDialog(DialogConfirmContent);return n.componentInstance.title="Confirm",n.componentInstance.body=t,n.componentInstance.html=e,n.result}selectDateTime(t,e=!0){const n=this.openDialog(DialogSelectDateTimeContent);return n.componentInstance.title="Select Date"+(e?" and Time":""),n.componentInstance.date=t,n.componentInstance.showTime=e,n.result}selectDataLabel(t,e=!0){const n=this.openDialog(DialogSelectDataLabelsContent,{size:"sm",backdrop:"static"});return n.componentInstance.title="Select Data Labels",n.componentInstance.data=t,n.componentInstance.showArraySubData=e,n.result}login(t,e=!0){const n=this.openDialog(DialogLoginContent);return n.componentInstance.msAllowed=t,n.componentInstance.showLoginText=e,n.result}register(){return this.openDialog(DialogRegisterContent).result}selectWithButtonsURL(t){const e=this.openDialog(DialogSelectWithButtonsURLContent);return e.componentInstance.url=t,e.result}selectWithArrayObjs(t,e,n=!1,o=!1){const r=this.openDialog(DialogSelectArrayObjsContent);return r.componentInstance.title=t,r.componentInstance.objects=e,r.componentInstance.multiple=n,r.componentInstance.allowNone=o,r.result}selectArray(t,e,n=!1,o=[]){const r=this.openDialog(DialogSelectArrayContent);return r.componentInstance.title=t,r.componentInstance.array=e,r.componentInstance.multiple=n,r.componentInstance.selectedIndexes=o,r.result}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DialogService,deps:[{token:i1$2.NgbModal}],target:i0.ɵɵFactoryTarget.Injectable});static"ɵprov"=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DialogService})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DialogService,decorators:[{type:Injectable}],ctorParameters:()=>[{type:i1$2.NgbModal}]});class AuthService{_ds;_vs;_alert;_account;_socket;environment=null;userHasPhoneNumber=!1;userData;userAgentApplication;constructor(t,e,n,o,r){this._ds=t,this._vs=e,this._alert=n,this._account=o,this._socket=r}setupMSSingleSignOn(t){this.environment=t,"/auth365"===window.location.pathname&&window.location.hash&&window.location.hash.startsWith("#id_token=")&&(this.environment.MS_id_token=window.location.hash.replace("#","")),this.userAgentApplication=new UserAgentApplication({auth:{clientId:this.environment.MS_clientId,authority:this.environment.MS_authority,redirectUri:this.environment.MS_redirectUri,validateAuthority:!1,navigateToLoginRequestUrl:!1},framework:{isAngular:!0}})}setEnvironment(t){this.environment=t}setUserHasPhoneNumber(t){this.userHasPhoneNumber=t}registerUser(t,e=!0){return new Promise((n,o)=>{let r=[{label:"User Name",form:"username",data:"",validators:[Validators.required],validatorErrors:["required"],validatorMsg:["Username is required"],required:!0},{label:"Full Name",form:"fullname",data:"",validators:[Validators.required],validatorErrors:["required"],validatorMsg:["Full name is required"],required:!0},{label:"Email",form:"email",data:"",validators:[Validators.required,this._vs.email],validatorErrors:["required","email"],validatorMsg:["Email is required","Email is invalid"],required:!0}];this.userHasPhoneNumber&&r.push({label:"Phone",form:"phonenumber",data:"",validators:[this._vs.phoneNumber],validatorErrors:["phoneNumber"],validatorMsg:["Phone number is invalid"],type:"text"}),this._ds.input("Register New User",r).then(r=>{let i={username:r.username.value.trim().toLowerCase(),email:r.email.value.trim().toLowerCase(),fullname:r.fullname.value.trim(),roles:{super_admin:!1,approvals:[],groups:[],notifications:[],miscs:[]},active:!0,readonly:!1,phonenumber:r.phonenumber?r.phonenumber.value:"",other:t,attempts:0,salt:"",hash:""};this._socket.call("createUserAndEmailEnrollment",i,e,(t,e)=>{t?o(t):n(e)})},t=>o())})}editUser(t){let e=[{label:"User Name",form:"username",data:t.username,validators:[Validators.required],validatorErrors:["required"],validatorMsg:["Username is required"],required:!0},{label:"Full Name",form:"fullname",data:t.fullname,validators:[Validators.required],validatorErrors:["required"],validatorMsg:["Full name is required"],required:!0},{label:"Email",form:"email",data:t.email,validators:[Validators.required,this._vs.email],validatorErrors:["required","email"],validatorMsg:["Email is required","Email is invalid"],required:!0}];return this.userHasPhoneNumber&&e.push({label:"Phone",form:"phonenumber",data:t.phonenumber||"",validators:[this._vs.phoneNumber],validatorErrors:["phoneNumber"],validatorMsg:["Phone number is invalid"],type:"text"}),new Promise((n,o)=>{this._ds.input("Edit User",e).then(e=>{e.phonenumber&&e.phonenumber.value?t.phonenumber=e.phonenumber.value:t.phonenumber="",t.email=e.email.value.trim(),this._socket.call("editUser",t._id,e.username.value.trim().toLowerCase(),e.fullname.value.trim(),e.email.value.trim().toLowerCase(),t.phonenumber,(r,i)=>{if(r)this._socket.call("insertErrorLog","AuthService - edituser",[t,r]),o(r);else{let t={username:e.username.value.trim(),fullname:e.fullname.value.trim(),email:e.email.value.trim()};this._alert.setAlert("success","User has been edited"),n(t)}})},t=>{n(!0)})})}loginUser(){return new Promise((t,e)=>{this.loginModal().then(n=>{"MS"===n.type?this.microsoftSignOn():n.form.value.forgotPassword?this._account.resetUserPassword(n.form.value.username):this._account.logIn(n.form.value.username,n.form.value.password).then(e=>{t(e)},t=>e("Invalid login"))},t=>e())})}microsoftSignOn(){this.userAgentApplication.loginRedirect(["user.read","mail.send"])}loginModal(){return this._ds.login(!(!this.environment||!this.environment.MS_ALLOWED),!this.environment||!this.environment.HIDE_LOGIN_TEXT)}removeUser(t){return new Promise((e,n)=>{this._socket.call("removeDocument","users",t,(o,r)=>{o?(this._ds.error("Could not remove user"),this._socket.call("insertErrorLog","AuthService - removeUser",[t,o]),n(o)):e(!0)})})}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:AuthService,deps:[{token:DialogService},{token:ValidationService},{token:AlertService},{token:AccountManagerService},{token:SocketManagerService}],target:i0.ɵɵFactoryTarget.Injectable});static"ɵprov"=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:AuthService})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:AuthService,decorators:[{type:Injectable}],ctorParameters:()=>[{type:DialogService},{type:ValidationService},{type:AlertService},{type:AccountManagerService},{type:SocketManagerService}]});class AuthPermissionService{modules=[];constructor(){}registerModule(t){this.modules.push(t),this.modules.sort((t,e)=>{let n=t.name,o=e.name;return n<o?-1:n>o?1:0})}getAllModulePermissions(){return this.modules}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:AuthPermissionService,deps:[],target:i0.ɵɵFactoryTarget.Injectable});static"ɵprov"=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:AuthPermissionService})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:AuthPermissionService,decorators:[{type:Injectable}],ctorParameters:()=>[]});class ScrollDirective{onScroll=new EventEmitter;bottomOffset=100;topOffset=100;constructor(){}scrolled(t){this.elementScrollEvent(t)}windowScrolled(t){this.windowScrollEvent(t)}windowScrollEvent(t){const e=t.target,n=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,o=n<this.topOffset,r={isReachingBottom:e.body.offsetHeight-(window.innerHeight+n)<this.bottomOffset,isReachingTop:o,originalEvent:t,isWindowEvent:!0};this.onScroll.emit(r)}elementScrollEvent(t){const e=t.target,n=e.scrollHeight-e.scrollTop,o=e.offsetHeight,r=e.scrollTop<this.topOffset,i={isReachingBottom:n-o<this.bottomOffset,isReachingTop:r,originalEvent:t,isWindowEvent:!1};this.onScroll.emit(i)}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:ScrollDirective,deps:[],target:i0.ɵɵFactoryTarget.Directive});static"ɵdir"=i0.ɵɵngDeclareDirective({minVersion:"14.0.0",version:"21.0.1",type:ScrollDirective,isStandalone:!1,selector:"[detect-scroll]",inputs:{bottomOffset:"bottomOffset",topOffset:"topOffset"},outputs:{onScroll:"onScroll"},host:{listeners:{scroll:"scrolled($event)","window:scroll":"windowScrolled($event)"}},ngImport:i0})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:ScrollDirective,decorators:[{type:Directive,args:[{selector:"[detect-scroll]",standalone:!1}]}],ctorParameters:()=>[],propDecorators:{onScroll:[{type:Output}],bottomOffset:[{type:Input}],topOffset:[{type:Input}],scrolled:[{type:HostListener,args:["scroll",["$event"]]}],windowScrolled:[{type:HostListener,args:["window:scroll",["$event"]]}]}});class NavbarMainComponent extends BaseComponent{_services;auth;_ds;_app;dropdowns;scrollable;logo="";navTabs=[];fontSize=12;publicProgram=!1;digitalSign=!1;showSupport=!0;user=null;collapseShowing=!1;client="";isResolveIO=!1;standardProgram=!1;tourStarted=!1;dropdownLeftTimer=null;scrollRightInterval=null;scrollLeftInterval=null;isDemo=!1;constructor(t,e,n,o){super(t),this._services=t,this.auth=e,this._ds=n,this._app=o}ngOnInit(){this._services._account.user.subscribe(t=>{this.user=t}),this.client=this._app.client.getValue(),this.standardProgram=this._app.standardProgram.getValue(),this.tourStarted=this._services._app.tourStarted.getValue(),this.client||(this.isResolveIO=!0),this._services._app.tourStarted.subscribe(t=>{this.tourStarted=t}),this._services._app.isDemo.subscribe(t=>{this.isDemo=t})}ngAfterViewInit(){this.dropdownLeftTimer=setInterval(()=>{this.calculateDropdownsLeft()},500),document.documentElement.style.setProperty("--font-size",this.fontSize+"px")}ngOnDestroy(){this.dropdownLeftTimer&&(clearInterval(this.dropdownLeftTimer),this.dropdownLeftTimer=null)}async logout(){this._app.isLoggingOut.next(!0),await this._services._account.logOut(),this._app.isLoggingOut.next(!1)}login(){this.auth.loginUser().then(()=>{},t=>{})}hasScrolled(){return this.scrollable.nativeElement.scrollLeft<=0&&this.stopScrollRight(),this.scrollable.nativeElement.scrollLeft>0}hasMoreScroll(){return this.scrollable.nativeElement.scrollWidth<=this.scrollable.nativeElement.clientWidth+this.scrollable.nativeElement.scrollLeft&&this.stopScrollLeft(),this.scrollable.nativeElement.scrollWidth>this.scrollable.nativeElement.clientWidth+this.scrollable.nativeElement.scrollLeft}startScrollRight(){this.scrollRightInterval=setInterval(()=>{this.scrollable.nativeElement.scrollLeft-=2},1)}stopScrollRight(){clearInterval(this.scrollRightInterval)}scrollRightOnce(){this.scrollable.nativeElement.scrollLeft-=50}startScrollLeft(){this.scrollLeftInterval=setInterval(()=>{this.scrollable.nativeElement.scrollLeft+=2},1)}stopScrollLeft(){clearInterval(this.scrollLeftInterval)}scrollLeftOnce(){this.scrollable.nativeElement.scrollLeft+=50}handleNavLinkClick(t){if(t&&(t.metaKey||t.ctrlKey)){const e=t.currentTarget;e&&e.href&&(window.open(e.href,"_blank"),t.preventDefault(),t.stopPropagation())}}calculateDropdownsLeft(){if(this.dropdowns&&this.dropdowns.toArray()&&this.dropdowns.toArray().length&&this.scrollable){const t=[];return this.navTabs.filter(t=>"dropdown"===t.type).forEach(e=>{const n=e.label||"",o=this.dropdowns.toArray().filter(t=>t.nativeElement.innerText.split("\n")[0].replace(/[^A-Za-z0-9]/g,"")===n.replace(/[^A-Za-z0-9]/g,""))[0],r=o?o.nativeElement.querySelector(".dropdown-menu"):null,i=o?Math.max(o.nativeElement.offsetLeft-this.scrollable.nativeElement.scrollLeft,this.scrollable.nativeElement.offsetLeft):0;if(r){parseInt(r.style.left||"0",10)!==i&&t.push({dropDownMenu:r,nextLeft:i})}}),t.length&&t.forEach(t=>{t.dropDownMenu.style.left=t.nextLeft+"px"}),!0}return!1}isInRole(t){if(!t)return!0;if(this.isSuperAdmin())return!0;if(this.user&&this.user.roles.groups)for(let e=0;e<this.user.roles.groups.length;e++){let n=this.user.roles.groups[e];for(let e=0;e<n.views.length;e++){let o=n.views[e];if(o===t||o.startsWith(t+"/"))return!0}}return!1}isSuperAdmin(){return!(!this.user||!this.user.roles)&&this.user.roles.super_admin}isInOneRole(t){if(this.isSuperAdmin())return!0;for(let e=0;e<t.length;e++){let n=t[e];if(!n)return!0;if(this._services._account.isUserInView(n))return!0}return!1}navigateTo(t){this._services._router.navigateByUrl(t)}help(){this._ds.input("What do you need help with?",[{label:"Title of Problem",form:"problem_title",data:"",validators:[Validators.required],validatorErrors:["required"],validatorMsg:["Problem title is required."],required:!0},{label:"Description of Problem",form:"problem_desc",data:"",validators:[Validators.required],validatorErrors:["required"],validatorMsg:["Problem description is required."],required:!0,type:"textarea"}]).then(t=>{this._services._socket.call("getHelpNotification",this._services._account.getUser().fullname,t.problem_title.value,t.problem_desc.value)},()=>{})}isCustomer(){return!(!this._services._account.getUser().other.customers||!this._services._account.getUser().other.customers.length)}getWindowWidth(){return window.innerWidth}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:NavbarMainComponent,deps:[{token:ProviderService},{token:AuthService},{token:DialogService},{token:CoreService}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"21.0.1",type:NavbarMainComponent,isStandalone:!1,selector:"navbar-main",inputs:{logo:"logo",navTabs:"navTabs",fontSize:"fontSize",publicProgram:"publicProgram",digitalSign:"digitalSign",showSupport:"showSupport"},providers:[ProviderService],viewQueries:[{propertyName:"scrollable",first:!0,predicate:["scrollable"],descendants:!0,static:!0},{propertyName:"dropdowns",predicate:["dropdowns"],descendants:!0}],usesInheritance:!0,ngImport:i0,template:'<style>\n\t:root {\n\t\t--font-size: 12;\n\t}\n\n\t:host ::ng-deep * {\n\t\tfont-size: var(--font-size);\n\t}\n\n\t@media (max-width: 1200px) {\n\t\t.navbarMain a {\n\t\t\tfont-size: 18px !important;\n\t\t}\n\t\t.navbarMain .dropdown-menu {\n\t\t\tmargin-left: 10px;\n\t\t}\n\t\t.navbar-divider-pipe {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.navbar-divider-hr {\n\t\t\tdisplay: block;\n\t\t\twidth: 100%;\n\t\t\theight: 1px;\n\t\t\tborder: 0;\n\t\t\tborder-top: 1px solid white;\n\t\t\tbackground-color: white;\n\t\t\tcolor: white;\n\t\t\topacity: 1;\n\t\t\tmargin: 0.25rem 0;\n\t\t}\n\t}\n\t@media (min-width: 1200px) {\n\t\t.scrollable-x {\n\t\t\tmax-width: 60vw;\n\t\t\toverflow-x: auto;\n\t\t\toverflow-y: visible;\n\t\t\talign-items: center;\n\t\t}\n\n\t\t::-webkit-scrollbar {\n\t\t\tdisplay: none;\n\t\t}\n\n\t\t.verticalAlign {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t}\n\n\t\t.dropdown {\n\t\t\tposition: static;\n\t\t}\n\t}\n\n\t.navbar li {\n\t\tcursor: pointer;\n\t\ttext-align: center;\n\t}\n\n\t.navbar-divider-pipe {\n\t\tdisplay: inline-block;\n\t\talign-self: stretch;\n\t\twidth: 1px;\n\t\tbackground-color: white;\n\t\topacity: 0.8;\n\t\tmargin: 0 0.75rem;\n\t}\n\n\t.navbar-dark .navbar-nav .nav-link:hover,\n\t.navbar-dark .navbar-nav .nav-link:focus {\n\t\tcolor: gray;\n\t}\n\t.navbar-divider-item {\n\t\tdisplay: flex;\n\t\talign-items: stretch;\n\t}\n</style>\n\n<div class="row">\n\t<nav class="navbar navbar-expand-xl navbar-dark bg-dark navbarMain" style="width: 100%">\n\t\t<a class="navbar-brand" href="#">\n\t\t\t@if (!isDemo) {\n\t\t\t\t<img [src]="logo" style="width: auto; height: 36px" />\n\t\t\t}\n\t\t</a>\n\t\t<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMainNav" aria-controls="navbarMainNav" aria-expanded="false" aria-label="Toggle navigation">\n\t\t\t<span class="navbar-toggler-icon"></span>\n\t\t</button>\n\t\t<div class="navbar-collapse collapse" id="navbarMainNav">\n\t\t\t<ul class="navbar-nav">\n\t\t\t\t@if (!standardProgram && !digitalSign) {\n\t\t\t\t\t<li class="nav-item" data-bs-toggle="collapse" data-bs-target="#navbarMainNav" [style.border-right]="getWindowWidth() > 1200 ? \'1px solid white\' : \'\'">\n\t\t\t\t\t\t<a class="nav-link" routerLink="home" (click)="handleNavLinkClick($event)" [class.disabled]="tourStarted ? true : null" routerLinkActive="active">Home</a>\n\t\t\t\t\t</li>\n\t\t\t\t}\n\t\t\t</ul>\n\t\t\t@if (hasScrolled()) {\n\t\t\t\t<div (mouseover)="startScrollRight()" (mouseout)="stopScrollRight()" (click)="scrollRightOnce()">\n\t\t\t\t\t<i class="fa fa-arrow-left" style="color: white; font-size: 20px"></i>\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t<ul [ngClass]="[\'navbar-nav\', \'scrollable-x\']" #scrollable detect-scroll (onScroll)="calculateDropdownsLeft()">\n\t\t\t\t@for (tab of navTabs; track tab.label || tab.links?.[0]?.routerLink || i; let i = $index) {\n\t\t\t\t\t@if (tab.type === \'link\') {\n\t\t\t\t\t\t@if ((publicProgram || user) && !digitalSign && isInRole(tab.links[0].role)) {\n\t\t\t\t\t\t\t<li class="nav-item" data-bs-toggle="collapse" [tourAnchor]="tab.tourAnchor" data-bs-target="#navbarMainNav">\n\t\t\t\t\t\t\t\t<a class="nav-link" (click)="handleNavLinkClick($event)" [class.disabled]="tourStarted ? true : null" [routerLink]="tab.links[0].routerLink" routerLinkActive="active">{{ tab.links[0].label }}</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t@if (tab.type === \'dropdown\') {\n\t\t\t\t\t\t@if ((publicProgram || user) && isInOneRole(tab.roles)) {\n\t\t\t\t\t\t\t<li #dropdowns class="nav-item dropdown">\n\t\t\t\t\t\t\t\t<a class="nav-link dropdown-toggle" [class.disabled]="tourStarted ? true : null" id="navbarDropdownAsset" role="button" [tourAnchor]="tab.tourAnchor" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">\n\t\t\t\t\t\t\t\t\t{{ tab.label }}\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t<div class="dropdown-menu bg-dark" aria-labelledby="navbarDropdownAsset" data-bs-toggle="collapse" data-bs-target="#navbarMainNav">\n\t\t\t\t\t\t\t\t\t@for (link of tab.links; track link.routerLink || link.label) {\n\t\t\t\t\t\t\t\t\t\t@if ((publicProgram || user) && isInRole(link.role)) {\n\t\t\t\t\t\t\t\t\t\t\t<a class="dropdown-item nav-link" (click)="handleNavLinkClick($event)" [routerLink]="link.routerLink">{{ link.label }}</a>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t</ul>\n\t\t\t@if (hasMoreScroll()) {\n\t\t\t\t<div (mouseover)="startScrollLeft()" (mouseout)="stopScrollLeft()" (click)="scrollLeftOnce()">\n\t\t\t\t\t<i class="fa fa-arrow-right" style="color: white; font-size: 20px"></i>\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@if (getWindowWidth() < 1200) {\n\t\t\t\t<hr class="navbar-divider-hr" />\n\t\t\t}\n\t\t\t@if (!publicProgram) {\n\t\t\t\t<ul [ngClass]="[\'navbar-nav\', \'ms-auto\']">\n\t\t\t\t\t@if (user && client && (showSupport || isSuperAdmin())) {\n\t\t\t\t\t\t<li class="nav-item" data-bs-toggle="collapse" data-bs-target="#navbarMainNav" style="height: 30px" tourAnchor="supportSection">\n\t\t\t\t\t\t\t<a class="nav-link" (click)="handleNavLinkClick($event)" [class.disabled]="tourStarted ? true : null" routerLink="support-ticket" routerLinkActive="active">Support</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t}\n\t\t\t\t\t@if (user && isInRole(\'super-admin\')) {\n\t\t\t\t\t\t<li class="nav-item" data-bs-toggle="collapse" data-bs-target="#navbarMainNav">\n\t\t\t\t\t\t\t<a class="nav-link" (click)="handleNavLinkClick($event)" routerLink="logs" routerLinkActive="active">Logs</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t}\n\t\t\t\t\t@if (user && isInRole(\'super-admin\')) {\n\t\t\t\t\t\t<li class="nav-item" data-bs-toggle="collapse" data-bs-target="#navbarMainNav">\n\t\t\t\t\t\t\t<a class="nav-link" (click)="handleNavLinkClick($event)" routerLink="super-admin" routerLinkActive="active">Super Admin</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t}\n\t\t\t\t\t@if (user) {\n\t\t\t\t\t\t<li class="nav-item navbar-divider-item">\n\t\t\t\t\t\t\t@if (getWindowWidth() > 1200) {\n\t\t\t\t\t\t\t\t<span class="navbar-divider-pipe" aria-hidden="true"></span>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@else {\n\t\t\t\t\t\t\t\t<hr class="navbar-divider-hr" />\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</li>\n\t\t\t\t\t}\n\t\t\t\t\t@if (!user) {\n\t\t\t\t\t\t<li class="nav-item" data-bs-toggle="collapse" data-bs-target="#navbarMainNav">\n\t\t\t\t\t\t\t<a class="nav-link" (click)="login()" style="cursor: pointer" routerLinkActive="active">Login</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t}\n\t\t\t\t\t@if (user) {\n\t\t\t\t\t\t<li class="nav-item" tourAnchor="userSettings">\n\t\t\t\t\t\t\t<a class="nav-link" (click)="handleNavLinkClick($event)" [class.disabled]="tourStarted ? true : null" routerLink="user-settings">Hello {{ user.fullname }}!</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t}\n\t\t\t\t\t@if (user) {\n\t\t\t\t\t\t<li class="nav-item" style="cursor: pointer" (click)="logout()" data-bs-toggle="collapse" data-bs-target="#navbarMainNav">\n\t\t\t\t\t\t\t<a class="nav-link" [class.disabled]="tourStarted ? true : null">Logout</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t}\n\t\t\t\t</ul>\n\t\t\t}\n\t\t</div>\n\t</nav>\n</div>\n',styles:[":root{--font-size: 12}:host ::ng-deep *{font-size:var(--font-size)}@media(max-width:1200px){.navbarMain a{font-size:18px!important}.navbarMain .dropdown-menu{margin-left:10px}.navbar-divider-pipe{display:none}.navbar-divider-hr{display:block;width:100%;height:1px;border:0;border-top:1px solid white;background-color:#fff;color:#fff;opacity:1;margin:.25rem 0}}@media(min-width:1200px){.scrollable-x{max-width:60vw;overflow-x:auto;overflow-y:visible;align-items:center}::-webkit-scrollbar{display:none}.verticalAlign{display:flex;align-items:center}.dropdown{position:static}}.navbar li{cursor:pointer;text-align:center}.navbar-divider-pipe{display:inline-block;align-self:stretch;width:1px;background-color:#fff;opacity:.8;margin:0 .75rem}.navbar-dark .navbar-nav .nav-link:hover,.navbar-dark .navbar-nav .nav-link:focus{color:gray}.navbar-divider-item{display:flex;align-items:stretch}\n"],dependencies:[{kind:"directive",type:i1$1.RouterLink,selector:"[routerLink]",inputs:["target","queryParams","fragment","queryParamsHandling","state","info","relativeTo","preserveFragment","skipLocationChange","replaceUrl","routerLink"]},{kind:"directive",type:i1$1.RouterLinkActive,selector:"[routerLinkActive]",inputs:["routerLinkActiveOptions","ariaCurrentWhenActive","routerLinkActive"],outputs:["isActiveChange"],exportAs:["routerLinkActive"]},{kind:"directive",type:i7.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]},{kind:"directive",type:ScrollDirective,selector:"[detect-scroll]",inputs:["bottomOffset","topOffset"],outputs:["onScroll"]}]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:NavbarMainComponent,decorators:[{type:Component,args:[{selector:"navbar-main",providers:[ProviderService],standalone:!1,template:'<style>\n\t:root {\n\t\t--font-size: 12;\n\t}\n\n\t:host ::ng-deep * {\n\t\tfont-size: var(--font-size);\n\t}\n\n\t@media (max-width: 1200px) {\n\t\t.navbarMain a {\n\t\t\tfont-size: 18px !important;\n\t\t}\n\t\t.navbarMain .dropdown-menu {\n\t\t\tmargin-left: 10px;\n\t\t}\n\t\t.navbar-divider-pipe {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.navbar-divider-hr {\n\t\t\tdisplay: block;\n\t\t\twidth: 100%;\n\t\t\theight: 1px;\n\t\t\tborder: 0;\n\t\t\tborder-top: 1px solid white;\n\t\t\tbackground-color: white;\n\t\t\tcolor: white;\n\t\t\topacity: 1;\n\t\t\tmargin: 0.25rem 0;\n\t\t}\n\t}\n\t@media (min-width: 1200px) {\n\t\t.scrollable-x {\n\t\t\tmax-width: 60vw;\n\t\t\toverflow-x: auto;\n\t\t\toverflow-y: visible;\n\t\t\talign-items: center;\n\t\t}\n\n\t\t::-webkit-scrollbar {\n\t\t\tdisplay: none;\n\t\t}\n\n\t\t.verticalAlign {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t}\n\n\t\t.dropdown {\n\t\t\tposition: static;\n\t\t}\n\t}\n\n\t.navbar li {\n\t\tcursor: pointer;\n\t\ttext-align: center;\n\t}\n\n\t.navbar-divider-pipe {\n\t\tdisplay: inline-block;\n\t\talign-self: stretch;\n\t\twidth: 1px;\n\t\tbackground-color: white;\n\t\topacity: 0.8;\n\t\tmargin: 0 0.75rem;\n\t}\n\n\t.navbar-dark .navbar-nav .nav-link:hover,\n\t.navbar-dark .navbar-nav .nav-link:focus {\n\t\tcolor: gray;\n\t}\n\t.navbar-divider-item {\n\t\tdisplay: flex;\n\t\talign-items: stretch;\n\t}\n</style>\n\n<div class="row">\n\t<nav class="navbar navbar-expand-xl navbar-dark bg-dark navbarMain" style="width: 100%">\n\t\t<a class="navbar-brand" href="#">\n\t\t\t@if (!isDemo) {\n\t\t\t\t<img [src]="logo" style="width: auto; height: 36px" />\n\t\t\t}\n\t\t</a>\n\t\t<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMainNav" aria-controls="navbarMainNav" aria-expanded="false" aria-label="Toggle navigation">\n\t\t\t<span class="navbar-toggler-icon"></span>\n\t\t</button>\n\t\t<div class="navbar-collapse collapse" id="navbarMainNav">\n\t\t\t<ul class="navbar-nav">\n\t\t\t\t@if (!standardProgram && !digitalSign) {\n\t\t\t\t\t<li class="nav-item" data-bs-toggle="collapse" data-bs-target="#navbarMainNav" [style.border-right]="getWindowWidth() > 1200 ? \'1px solid white\' : \'\'">\n\t\t\t\t\t\t<a class="nav-link" routerLink="home" (click)="handleNavLinkClick($event)" [class.disabled]="tourStarted ? true : null" routerLinkActive="active">Home</a>\n\t\t\t\t\t</li>\n\t\t\t\t}\n\t\t\t</ul>\n\t\t\t@if (hasScrolled()) {\n\t\t\t\t<div (mouseover)="startScrollRight()" (mouseout)="stopScrollRight()" (click)="scrollRightOnce()">\n\t\t\t\t\t<i class="fa fa-arrow-left" style="color: white; font-size: 20px"></i>\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t<ul [ngClass]="[\'navbar-nav\', \'scrollable-x\']" #scrollable detect-scroll (onScroll)="calculateDropdownsLeft()">\n\t\t\t\t@for (tab of navTabs; track tab.label || tab.links?.[0]?.routerLink || i; let i = $index) {\n\t\t\t\t\t@if (tab.type === \'link\') {\n\t\t\t\t\t\t@if ((publicProgram || user) && !digitalSign && isInRole(tab.links[0].role)) {\n\t\t\t\t\t\t\t<li class="nav-item" data-bs-toggle="collapse" [tourAnchor]="tab.tourAnchor" data-bs-target="#navbarMainNav">\n\t\t\t\t\t\t\t\t<a class="nav-link" (click)="handleNavLinkClick($event)" [class.disabled]="tourStarted ? true : null" [routerLink]="tab.links[0].routerLink" routerLinkActive="active">{{ tab.links[0].label }}</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t@if (tab.type === \'dropdown\') {\n\t\t\t\t\t\t@if ((publicProgram || user) && isInOneRole(tab.roles)) {\n\t\t\t\t\t\t\t<li #dropdowns class="nav-item dropdown">\n\t\t\t\t\t\t\t\t<a class="nav-link dropdown-toggle" [class.disabled]="tourStarted ? true : null" id="navbarDropdownAsset" role="button" [tourAnchor]="tab.tourAnchor" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">\n\t\t\t\t\t\t\t\t\t{{ tab.label }}\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t<div class="dropdown-menu bg-dark" aria-labelledby="navbarDropdownAsset" data-bs-toggle="collapse" data-bs-target="#navbarMainNav">\n\t\t\t\t\t\t\t\t\t@for (link of tab.links; track link.routerLink || link.label) {\n\t\t\t\t\t\t\t\t\t\t@if ((publicProgram || user) && isInRole(link.role)) {\n\t\t\t\t\t\t\t\t\t\t\t<a class="dropdown-item nav-link" (click)="handleNavLinkClick($event)" [routerLink]="link.routerLink">{{ link.label }}</a>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t</ul>\n\t\t\t@if (hasMoreScroll()) {\n\t\t\t\t<div (mouseover)="startScrollLeft()" (mouseout)="stopScrollLeft()" (click)="scrollLeftOnce()">\n\t\t\t\t\t<i class="fa fa-arrow-right" style="color: white; font-size: 20px"></i>\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@if (getWindowWidth() < 1200) {\n\t\t\t\t<hr class="navbar-divider-hr" />\n\t\t\t}\n\t\t\t@if (!publicProgram) {\n\t\t\t\t<ul [ngClass]="[\'navbar-nav\', \'ms-auto\']">\n\t\t\t\t\t@if (user && client && (showSupport || isSuperAdmin())) {\n\t\t\t\t\t\t<li class="nav-item" data-bs-toggle="collapse" data-bs-target="#navbarMainNav" style="height: 30px" tourAnchor="supportSection">\n\t\t\t\t\t\t\t<a class="nav-link" (click)="handleNavLinkClick($event)" [class.disabled]="tourStarted ? true : null" routerLink="support-ticket" routerLinkActive="active">Support</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t}\n\t\t\t\t\t@if (user && isInRole(\'super-admin\')) {\n\t\t\t\t\t\t<li class="nav-item" data-bs-toggle="collapse" data-bs-target="#navbarMainNav">\n\t\t\t\t\t\t\t<a class="nav-link" (click)="handleNavLinkClick($event)" routerLink="logs" routerLinkActive="active">Logs</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t}\n\t\t\t\t\t@if (user && isInRole(\'super-admin\')) {\n\t\t\t\t\t\t<li class="nav-item" data-bs-toggle="collapse" data-bs-target="#navbarMainNav">\n\t\t\t\t\t\t\t<a class="nav-link" (click)="handleNavLinkClick($event)" routerLink="super-admin" routerLinkActive="active">Super Admin</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t}\n\t\t\t\t\t@if (user) {\n\t\t\t\t\t\t<li class="nav-item navbar-divider-item">\n\t\t\t\t\t\t\t@if (getWindowWidth() > 1200) {\n\t\t\t\t\t\t\t\t<span class="navbar-divider-pipe" aria-hidden="true"></span>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@else {\n\t\t\t\t\t\t\t\t<hr class="navbar-divider-hr" />\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</li>\n\t\t\t\t\t}\n\t\t\t\t\t@if (!user) {\n\t\t\t\t\t\t<li class="nav-item" data-bs-toggle="collapse" data-bs-target="#navbarMainNav">\n\t\t\t\t\t\t\t<a class="nav-link" (click)="login()" style="cursor: pointer" routerLinkActive="active">Login</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t}\n\t\t\t\t\t@if (user) {\n\t\t\t\t\t\t<li class="nav-item" tourAnchor="userSettings">\n\t\t\t\t\t\t\t<a class="nav-link" (click)="handleNavLinkClick($event)" [class.disabled]="tourStarted ? true : null" routerLink="user-settings">Hello {{ user.fullname }}!</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t}\n\t\t\t\t\t@if (user) {\n\t\t\t\t\t\t<li class="nav-item" style="cursor: pointer" (click)="logout()" data-bs-toggle="collapse" data-bs-target="#navbarMainNav">\n\t\t\t\t\t\t\t<a class="nav-link" [class.disabled]="tourStarted ? true : null">Logout</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t}\n\t\t\t\t</ul>\n\t\t\t}\n\t\t</div>\n\t</nav>\n</div>\n'}]}],ctorParameters:()=>[{type:ProviderService},{type:AuthService},{type:DialogService},{type:CoreService}],propDecorators:{dropdowns:[{type:ViewChildren,args:["dropdowns"]}],scrollable:[{type:ViewChild,args:["scrollable",{static:!0}]}],logo:[{type:Input,args:["logo"]}],navTabs:[{type:Input,args:["navTabs"]}],fontSize:[{type:Input,args:["fontSize"]}],publicProgram:[{type:Input,args:["publicProgram"]}],digitalSign:[{type:Input,args:["digitalSign"]}],showSupport:[{type:Input,args:["showSupport"]}]}});class FilterEqualPipe{transform(t,e,n){return t?t.filter(t=>t[e]===n):[]}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:FilterEqualPipe,deps:[],target:i0.ɵɵFactoryTarget.Pipe});static"ɵpipe"=i0.ɵɵngDeclarePipe({minVersion:"14.0.0",version:"21.0.1",ngImport:i0,type:FilterEqualPipe,isStandalone:!1,name:"filterEqual",pure:!1})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:FilterEqualPipe,decorators:[{type:Pipe,args:[{name:"filterEqual",pure:!1,standalone:!1}]}]});class FilterNotEqualPipe{transform(t,e,n){return t?t.filter(t=>t[e]!==n):[]}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:FilterNotEqualPipe,deps:[],target:i0.ɵɵFactoryTarget.Pipe});static"ɵpipe"=i0.ɵɵngDeclarePipe({minVersion:"14.0.0",version:"21.0.1",ngImport:i0,type:FilterNotEqualPipe,isStandalone:!1,name:"filterNotEqual"})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:FilterNotEqualPipe,decorators:[{type:Pipe,args:[{name:"filterNotEqual",standalone:!1}]}]});class NavbarModuleComponent extends BaseComponent{_cdRef;_services;sideNavHeight;sideNavWidth;menuData={title:"",module:null,description:null,description_name:"Description",tabs:[]};selectedTab=null;currentRoute="";routerEvents$=[];tourStarted=!1;drawerOpen=!1;isDeviceWidth=window.innerWidth<=1200;constructor(t,e){super(e),this._cdRef=t,this._services=e}ngOnInit(){this.tourStarted=this._services._app.tourStarted.getValue(),this.routerEvents$.push(this._services._router.events.subscribe(t=>{this._services._router.url.replace(/\/[a-f0-9]{24}$/,"").replace(/\?.+$/,"")===this.currentRoute&&this.selectedTab||this.selectTabFromRouter()})),this.routerEvents$.push(this._services._app.navbarModuleData.subscribe(t=>{this.menuData=t,this._services._router.url.replace(/\/[a-f0-9]{24}$/,"").replace(/\?.+$/,"")===this.currentRoute&&this.selectedTab||this.selectTabFromRouter()})),this.routerEvents$.push(this._services._app.tourStarted.subscribe(t=>{this.tourStarted=t}))}onResize(){this.isDeviceWidth=window.innerWidth<=1200}ngOnDestroy(){this.routerEvents$.forEach(t=>{t.unsubscribe()})}selectTabFromRouter(){if(this.menuData)if("/"===this._services._router.url)this.selectedTab=this.menuData.tabs[0];else{for(this.currentRoute=this._services._router.url.replace(/\/[a-f0-9]{24}$/,"").replace(/\?.+$/,""),this.selectedTab=null;!this.selectedTab&&this.currentRoute.split("/").length>2;){for(let t=0;t<this.menuData.tabs.length;t++){let e=this.menuData.tabs[t];if(e.link===this.currentRoute){this.selectedTab=e;break}}this.currentRoute=this.currentRoute.replace(/(\/[^\/]+$)/,"")}this.selectedTab||(this.selectedTab=this.menuData.tabs[0])}}tabClass(t){return this.selectedTab&&this.selectedTab.label===t.label?"active":""}handleNavLinkClick(t){if(t&&(t.metaKey||t.ctrlKey)){const e=t.currentTarget;e&&e.href&&(window.open(e.href,"_blank"),t.preventDefault(),t.stopPropagation())}}onNavLinkClick(t){this.handleNavLinkClick(t),!t.defaultPrevented&&window.innerWidth<=1200&&(this.drawerOpen=!1)}toggleDrawer(){this.drawerOpen=!this.drawerOpen}navigateTo(t){this.selectedTab!==t&&(this.selectedTab=t,null===t.params?this._services._router.navigateByUrl(t.link):this._services._router.navigateByUrl(t.link+"/"+t.params),window.innerWidth<=1200&&(this.drawerOpen=!1))}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:NavbarModuleComponent,deps:[{token:i0.ChangeDetectorRef},{token:ProviderService}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"21.0.1",type:NavbarModuleComponent,isStandalone:!1,selector:"navbar-module",inputs:{sideNavHeight:"sideNavHeight",sideNavWidth:"sideNavWidth"},host:{listeners:{"window:resize":"onResize()"}},providers:[ProviderService],usesInheritance:!0,ngImport:i0,template:'<style>\n\t.navbarModule li {\n\t\tcursor: pointer;\n\t}\n\t.navbarModule li.active {\n\t\tborder-left: 3px solid #d19b3d;\n\t}\n\t.navbarModule nav {\n\t\twidth: 100%;\n\t}\n\t.navbar-module-container {\n\t\tmargin-left: calc(var(--bs-gutter-x, 1.5rem) / -2);\n\t\tmargin-right: calc(var(--bs-gutter-x, 1.5rem) / -2);\n\t}\n\n\t.navbarModule .nav-link {\n\t\tmargin-left: 10px;\n\t}\n\n\t@media (min-width: 1200px) {\n\t\t.navbarModule {\n\t\t\theight: 95vh;\n\t\t\tmargin-left: -10px;\n\t\t}\n\n\t\thr {\n\t\t\tborder-top: white 1px solid;\n\t\t}\n\t}\n\n\t@media (max-width: 1200px) {\n\t\t.device-drawer-margin {\n\t\t\tmargin-left: 10px !important;\n\t\t}\n\n\t\thr {\n\t\t\tdisplay: none;\n\t\t}\n\n\t\t.navbarModule a {\n\t\t\tfont-size: 18px !important;\n\t\t}\n\t}\n</style>\n\n<div class="navbar-module-container">\n\t<nav class="navbar navbar-expand-xl navbar-dark bg-dark flex-xl-column navbarModule" [style.height]="sideNavHeight ? sideNavHeight + \'px\' : \'\'" [style.width]="sideNavWidth ? sideNavWidth : \'\'">\n\t\t<div href="#" style="color: white; font-size: 16px; margin-left: 10px;">\n\t\t\t{{ menuData.title }}\n\t\t</div>\n\t\t<button class="navbar-toggler" type="button" [attr.aria-controls]="\'navbarModuleNav\'" [attr.aria-expanded]="drawerOpen" aria-label="Toggle navigation" (click)="toggleDrawer()">\n\t\t\t<span class="navbar-toggler-icon"></span>\n\t\t</button>\n\t\t<div class="navbar-collapse collapse" [class.show]="drawerOpen" [ngClass]="{ \'device-drawer-margin\': isDeviceWidth }" id="navbarModuleNav" style="align-items: baseline; width: 100%; overflow-y: auto; overflow-x: hidden">\n\t\t\t<ul class="navbar-nav" style="display: block; float: left; width: 100%">\n\t\t\t\t@for (tab of menuData.tabs | filterNotEqual: \'params\' : \'0\'; track tab.label; let i = $index) {\n\t\t\t\t\t@if (tab.params !== null && menuData.tabs[i - 1] && menuData.tabs[i - 1].params === null) {\n\t\t\t\t\t\t<hr />\n\t\t\t\t\t\t<div href="#" style="color: white; font-size: 16px">Selected {{ menuData.module }}</div>\n\t\t\t\t\t\t<hr />\n\t\t\t\t\t\t<div style="color: white; margin-left: 5px; text-decoration: underline; font-size: 14px">{{ menuData.description_name }}:</div>\n\t\t\t\t\t\t<div style="color: white; margin-left: 8px; font-size: 12px">{{ menuData.description }}</div>\n\t\t\t\t\t\t<br />\n\t\t\t\t\t}\n\t\t\t\t\t<li [ngClass]="[\'nav-item\', tabClass(tab)]" [tourAnchor]="tab.tourAnchor">\n\t\t\t\t\t\t<a class="nav-link" [class.disabled]="tourStarted ? true : null" (click)="onNavLinkClick($event)" [routerLink]="[tab.params ? tab.link + \'/\' + tab.params : tab.link]" routerLinkActive="active">{{ tab.label }}</a>\n\t\t\t\t\t</li>\n\t\t\t\t}\n\t\t\t</ul>\n\t\t</div>\n\t</nav>\n</div>\n',styles:[".navbarModule li{cursor:pointer}.navbarModule li.active{border-left:3px solid #d19b3d}.navbarModule nav{width:100%}.navbar-module-container{margin-left:calc(var(--bs-gutter-x, 1.5rem) / -2);margin-right:calc(var(--bs-gutter-x, 1.5rem) / -2)}.navbarModule .nav-link{margin-left:10px}@media(min-width:1200px){.navbarModule{height:95vh;margin-left:-10px}hr{border-top:white 1px solid}}@media(max-width:1200px){.device-drawer-margin{margin-left:10px!important}hr{display:none}.navbarModule a{font-size:18px!important}}\n"],dependencies:[{kind:"directive",type:i1$1.RouterLink,selector:"[routerLink]",inputs:["target","queryParams","fragment","queryParamsHandling","state","info","relativeTo","preserveFragment","skipLocationChange","replaceUrl","routerLink"]},{kind:"directive",type:i1$1.RouterLinkActive,selector:"[routerLinkActive]",inputs:["routerLinkActiveOptions","ariaCurrentWhenActive","routerLinkActive"],outputs:["isActiveChange"],exportAs:["routerLinkActive"]},{kind:"directive",type:i7.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]},{kind:"pipe",type:FilterNotEqualPipe,name:"filterNotEqual"}]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:NavbarModuleComponent,decorators:[{type:Component,args:[{providers:[ProviderService],selector:"navbar-module",standalone:!1,template:'<style>\n\t.navbarModule li {\n\t\tcursor: pointer;\n\t}\n\t.navbarModule li.active {\n\t\tborder-left: 3px solid #d19b3d;\n\t}\n\t.navbarModule nav {\n\t\twidth: 100%;\n\t}\n\t.navbar-module-container {\n\t\tmargin-left: calc(var(--bs-gutter-x, 1.5rem) / -2);\n\t\tmargin-right: calc(var(--bs-gutter-x, 1.5rem) / -2);\n\t}\n\n\t.navbarModule .nav-link {\n\t\tmargin-left: 10px;\n\t}\n\n\t@media (min-width: 1200px) {\n\t\t.navbarModule {\n\t\t\theight: 95vh;\n\t\t\tmargin-left: -10px;\n\t\t}\n\n\t\thr {\n\t\t\tborder-top: white 1px solid;\n\t\t}\n\t}\n\n\t@media (max-width: 1200px) {\n\t\t.device-drawer-margin {\n\t\t\tmargin-left: 10px !important;\n\t\t}\n\n\t\thr {\n\t\t\tdisplay: none;\n\t\t}\n\n\t\t.navbarModule a {\n\t\t\tfont-size: 18px !important;\n\t\t}\n\t}\n</style>\n\n<div class="navbar-module-container">\n\t<nav class="navbar navbar-expand-xl navbar-dark bg-dark flex-xl-column navbarModule" [style.height]="sideNavHeight ? sideNavHeight + \'px\' : \'\'" [style.width]="sideNavWidth ? sideNavWidth : \'\'">\n\t\t<div href="#" style="color: white; font-size: 16px; margin-left: 10px;">\n\t\t\t{{ menuData.title }}\n\t\t</div>\n\t\t<button class="navbar-toggler" type="button" [attr.aria-controls]="\'navbarModuleNav\'" [attr.aria-expanded]="drawerOpen" aria-label="Toggle navigation" (click)="toggleDrawer()">\n\t\t\t<span class="navbar-toggler-icon"></span>\n\t\t</button>\n\t\t<div class="navbar-collapse collapse" [class.show]="drawerOpen" [ngClass]="{ \'device-drawer-margin\': isDeviceWidth }" id="navbarModuleNav" style="align-items: baseline; width: 100%; overflow-y: auto; overflow-x: hidden">\n\t\t\t<ul class="navbar-nav" style="display: block; float: left; width: 100%">\n\t\t\t\t@for (tab of menuData.tabs | filterNotEqual: \'params\' : \'0\'; track tab.label; let i = $index) {\n\t\t\t\t\t@if (tab.params !== null && menuData.tabs[i - 1] && menuData.tabs[i - 1].params === null) {\n\t\t\t\t\t\t<hr />\n\t\t\t\t\t\t<div href="#" style="color: white; font-size: 16px">Selected {{ menuData.module }}</div>\n\t\t\t\t\t\t<hr />\n\t\t\t\t\t\t<div style="color: white; margin-left: 5px; text-decoration: underline; font-size: 14px">{{ menuData.description_name }}:</div>\n\t\t\t\t\t\t<div style="color: white; margin-left: 8px; font-size: 12px">{{ menuData.description }}</div>\n\t\t\t\t\t\t<br />\n\t\t\t\t\t}\n\t\t\t\t\t<li [ngClass]="[\'nav-item\', tabClass(tab)]" [tourAnchor]="tab.tourAnchor">\n\t\t\t\t\t\t<a class="nav-link" [class.disabled]="tourStarted ? true : null" (click)="onNavLinkClick($event)" [routerLink]="[tab.params ? tab.link + \'/\' + tab.params : tab.link]" routerLinkActive="active">{{ tab.label }}</a>\n\t\t\t\t\t</li>\n\t\t\t\t}\n\t\t\t</ul>\n\t\t</div>\n\t</nav>\n</div>\n'}]}],ctorParameters:()=>[{type:i0.ChangeDetectorRef},{type:ProviderService}],propDecorators:{sideNavHeight:[{type:Input}],sideNavWidth:[{type:Input}],onResize:[{type:HostListener,args:["window:resize"]}]}});class CoreComponent extends BaseComponent{_deviceDet;_ds;_resizeService;_services;_offline;_storage;_auth;_aps;environment;logo="";navTabs="";userHasPhoneNumber=!1;client="";showNavbarModule=!0;publicProgram=!1;showSupport=!0;el_navBarMain;el_navBarModule;year=(new Date).getFullYear().toString();fullScreen=!1;windowSizeHeight=window.innerHeight;windowSizeWidth=window.innerWidth;navbarMainHeight=0;statusHeight=0;connectedHeight=0;isDevice=!1;showNavigationMenu=!1;swFlagAlert=null;isConnected=!1;isConnecting=!1;socketStatus;user;status;collapsableMenu=!0;fontSize=12;openedWindow=!1;isOffline=!1;foundUpdate=!1;orientation="portrait";digitalSign=!1;constructor(t,e,n,o,r,i,a,s){super(o),this._deviceDet=t,this._ds=e,this._resizeService=n,this._services=o,this._offline=r,this._storage=i,this._auth=a,this._aps=s}ngOnInit(){this._services._app.setEnvironment(this.environment),this._offline.initStorage(this.environment.OFFLINE_DB_SECRET_KEY),this._services._app.setClient(this.client),this._services._app.setNavTabs(this.navTabs),this._services._account.initLoginManager(this.environment),this.environment&&this.environment.MS_ALLOWED?this._auth.setupMSSingleSignOn(this.environment):this.environment&&this._auth.setEnvironment(this.environment),this._auth.setUserHasPhoneNumber(this.userHasPhoneNumber),this._resizeService.onResize$.subscribe(t=>{setTimeout(()=>{this.windowSizeHeight=t.innerHeight,this.windowSizeWidth=t.innerWidth},100)}),this._services._app.fullScreen.subscribe(t=>{this.fullScreen=t}),this._services._account.user.subscribe(t=>{t&&t.settings?(this.collapsableMenu=t.settings.collapsable_menu,this.fontSize=t.settings.font_size,document.documentElement.style.setProperty("--warning-color",t.settings.warning_color),document.documentElement.style.setProperty("--warning-font-color",t.settings.warning_font_color),document.documentElement.style.setProperty("--warning-shadow-color","0 0 0 0.2rem "+hexToRGB$1(t.settings.warning_color,.5)),document.documentElement.style.setProperty("--warning-hover-color",t.settings.warning_hover_color),document.documentElement.style.setProperty("--success-color",t.settings.success_color),document.documentElement.style.setProperty("--success-font-color",t.settings.success_font_color),document.documentElement.style.setProperty("--success-shadow-color","0 0 0 0.2rem "+hexToRGB$1(t.settings.success_color,.5)),document.documentElement.style.setProperty("--success-hover-color",t.settings.success_hover_color),document.documentElement.style.setProperty("--danger-color",t.settings.danger_color),document.documentElement.style.setProperty("--danger-font-color",t.settings.danger_font_color),document.documentElement.style.setProperty("--danger-shadow-color","0 0 0 0.2rem "+hexToRGB$1(t.settings.danger_color,.5)),document.documentElement.style.setProperty("--danger-hover-color",t.settings.danger_hover_color),document.documentElement.style.setProperty("--info-color",t.settings.info_color),document.documentElement.style.setProperty("--info-font-color",t.settings.info_font_color),document.documentElement.style.setProperty("--info-shadow-color","0 0 0 0.2rem "+hexToRGB$1(t.settings.info_color,.5)),document.documentElement.style.setProperty("--info-hover-color",t.settings.info_hover_color),document.documentElement.style.setProperty("--primary-color",t.settings.primary_color),document.documentElement.style.setProperty("--primary-font-color",t.settings.primary_font_color),document.documentElement.style.setProperty("--primary-shadow-color","0 0 0 0.2rem "+hexToRGB$1(t.settings.primary_color,.5)),document.documentElement.style.setProperty("--primary-hover-color",t.settings.primary_hover_color),document.documentElement.style.setProperty("--secondary-color",t.settings.secondary_color),document.documentElement.style.setProperty("--secondary-font-color",t.settings.secondary_font_color),document.documentElement.style.setProperty("--secondary-shadow-color","0 0 0 0.2rem "+hexToRGB$1(t.settings.secondary_color,.5)),document.documentElement.style.setProperty("--secondary-hover-color",t.settings.secondary_hover_color)):!t||t.other.customers&&t.other.customers.length||t.other.id_customer||t.settings||this.openedWindow?(document.documentElement.style.setProperty("--warning-color","#ffc107"),document.documentElement.style.setProperty("--warning-font-color","#000000"),document.documentElement.style.setProperty("--warning-shadow-color","0 0 0 0.2rem rgba(222, 170, 12, 0.5)"),document.documentElement.style.setProperty("--warning-hover-color","#e0a800"),document.documentElement.style.setProperty("--success-color","#28a745"),document.documentElement.style.setProperty("--success-font-color","#ffffff"),document.documentElement.style.setProperty("--success-shadow-color","0 0 0 0.2rem rgba(72, 180, 97, 0.5)"),document.documentElement.style.setProperty("--success-hover-color","#218838"),document.documentElement.style.setProperty("--danger-color","#dc3545"),document.documentElement.style.setProperty("--danger-font-color","#ffffff"),document.documentElement.style.setProperty("--danger-shadow-color","0 0 0 0.2rem rgba(225, 83, 97, 0.5)"),document.documentElement.style.setProperty("--danger-hover-color","#c82333"),document.documentElement.style.setProperty("--info-color","#17a2b8"),document.documentElement.style.setProperty("--info-font-color","#ffffff"),document.documentElement.style.setProperty("--info-shadow-color","0 0 0 0.2rem rgba(58, 176, 195, 0.5)"),document.documentElement.style.setProperty("--info-hover-color","#138496"),document.documentElement.style.setProperty("--primary-color","#007bff"),document.documentElement.style.setProperty("--primary-font-color","#ffffff"),document.documentElement.style.setProperty("--primary-shadow-color","0 0 0 0.2rem rgba(38, 143, 255, 0.5)"),document.documentElement.style.setProperty("--primary-hover-color","#0069d9"),document.documentElement.style.setProperty("--secondary-color","#868e96"),document.documentElement.style.setProperty("--secondary-font-color","#ffffff"),document.documentElement.style.setProperty("--secondary-shadow-color","0 0 0 0.2rem rgba(130, 138, 145, 0.5)"),document.documentElement.style.setProperty("--secondary-hover-color","#5a6268"),this.fontSize=12):(this.openedWindow=!0,document.documentElement.style.setProperty("--warning-color","#ffc107"),document.documentElement.style.setProperty("--warning-font-color","#000000"),document.documentElement.style.setProperty("--warning-shadow-color","0 0 0 0.2rem rgba(222, 170, 12, 0.5)"),document.documentElement.style.setProperty("--warning-hover-color","#e0a800"),document.documentElement.style.setProperty("--success-color","#28a745"),document.documentElement.style.setProperty("--success-font-color","#ffffff"),document.documentElement.style.setProperty("--success-shadow-color","0 0 0 0.2rem rgba(72, 180, 97, 0.5)"),document.documentElement.style.setProperty("--success-hover-color","#218838"),document.documentElement.style.setProperty("--danger-color","#dc3545"),document.documentElement.style.setProperty("--danger-font-color","#ffffff"),document.documentElement.style.setProperty("--danger-shadow-color","0 0 0 0.2rem rgba(225, 83, 97, 0.5)"),document.documentElement.style.setProperty("--danger-hover-color","#c82333"),document.documentElement.style.setProperty("--info-color","#17a2b8"),document.documentElement.style.setProperty("--info-font-color","#ffffff"),document.documentElement.style.setProperty("--info-shadow-color","0 0 0 0.2rem rgba(58, 176, 195, 0.5)"),document.documentElement.style.setProperty("--info-hover-color","#138496"),document.documentElement.style.setProperty("--primary-color","#007bff"),document.documentElement.style.setProperty("--primary-font-color","#ffffff"),document.documentElement.style.setProperty("--primary-shadow-color","0 0 0 0.2rem rgba(38, 143, 255, 0.5)"),document.documentElement.style.setProperty("--primary-hover-color","#0069d9"),document.documentElement.style.setProperty("--secondary-color","#868e96"),document.documentElement.style.setProperty("--secondary-font-color","#ffffff"),document.documentElement.style.setProperty("--secondary-shadow-color","0 0 0 0.2rem rgba(130, 138, 145, 0.5)"),document.documentElement.style.setProperty("--secondary-hover-color","#5a6268"),this.fontSize=12,this._ds.notify("Hello, "+t.fullname+" it looks like there are no user settings saved for you. To adjust your user settings click your name at the top of the page next to the logout button, adjust any settings you want, then click submit to apply them."),this._services._router.navigateByUrl(this._services._router.url.split("/")[0]+"/user-settings/settings")),this.user=t}),this._deviceDet.isMobile()||this._deviceDet.isTablet()?(this._services._app.setIsDevice(!0),this.isDevice=!0):(this._services._app.setIsDevice(!1),this.isDevice=!1),this.environment.IS_PRODUCTION&&this._services._socket.subscribeBypassRoute("flagUpdateWithType","newSW").subscribe(t=>{t?(this.swFlagAlert=this._services._alert.setAlert("info","This page will reload once new version has been downloaded",0),this._services._app.setIsInvalidSW(!0),navigator.serviceWorker?navigator.serviceWorker.getRegistrations().then(t=>{t&&t.length||setTimeout(()=>{window.location.reload()},3e3)},t=>{setTimeout(()=>{window.location.reload()},3e3)}):setTimeout(()=>{window.location.reload()},3e3)):this.swFlagAlert&&(this._services._app.setIsInvalidSW(!1),this._services._alert.clearAlert(this.swFlagAlert.toastId),this.swFlagAlert=null)}),this._offline.offlineMode.subscribe(t=>{this.isOffline=t}),this._services._account.getSocketStatus().subscribe(t=>{this.socketStatus=t,this.user?(this.socketStatus===WebSocket.OPEN?(this.isConnected=!0,this.isConnecting=!1):(this.isConnected=!1,this.socketStatus===WebSocket.CONNECTING?this.isConnecting=!0:this.isConnecting=!1),this.isConnected?this.connectedHeight=0:this.connectedHeight=40):(this.isConnected=!1,this.isConnecting=!1,this.connectedHeight=40)}),this._services._socket.subscribeBypassRoute("appstatus").subscribe(t=>{this.status=t,this._services._app.setHasStatusMessage(!!this.status),this.statusHeight=this.status?40:0}),setTimeout(()=>{this.navbarMainHeight=this.el_navBarMain.nativeElement.children[0].clientHeight},100),setTimeout(()=>{this.navbarMainHeight=this.el_navBarMain.nativeElement.children[0].clientHeight},1e3),setTimeout(()=>{this.navbarMainHeight=this.el_navBarMain.nativeElement.children[0].clientHeight},5e3);let t,e=!1,n=this._storage.get("lastURL");this._services._router.events.subscribe(t=>{t.url&&t.url.startsWith("/digital-sign?")&&(this.digitalSign=!0),this.isDevice&&(n&&"/"!==n&&!e&&(""!==t.url&&"/"!==t.url||this._services._router.navigateByUrl(n)),e=!0,t.url?this._storage.set("lastURL",t.url):t.urlAfterRedirects&&this._storage.set("lastURL",t.urlAfterRedirects))}),["iPad","iPhone","iPod"].indexOf(navigator.platform)>=0&&"standalone"in window.navigator&&window.navigator.standalone&&(this.showNavigationMenu=!0),window.addEventListener("orientationchange",()=>{-90===window.orientation&&(this.orientation="landscape"),90===window.orientation&&(this.orientation="landscape"),0===window.orientation&&(this.orientation="portrait")},!0),document.addEventListener("focus",function(){document.activeElement instanceof HTMLElement&&"INPUT"===document.activeElement.nodeName&&"number"===document.activeElement.type&&(t=!0,document.addEventListener("mousewheel",handleMousewheelEvent,{passive:!0}))},!0),document.addEventListener("blur",function(){t&&(t=!1,document.removeEventListener("mousewheel",handleMousewheelEvent))},!0),window.addEventListener("dragover",t=>{(t||event).preventDefault()},!1),window.addEventListener("drop",t=>{(t||event).preventDefault()},!1)}getNavbarModuleHeight(){return this.el_navBarModule?this.el_navBarModule.nativeElement.children[0].clientHeight:0}onPushBackButton(){window.history.back()}onPushReloadButton(){window.location.reload()}onPushForwardButton(){window.history.forward()}openNav(){let t=document.getElementById("navSid"),e=document.getElementById("main_cont");t&&e&&("40px"===t.style.width&&"45px"===e.style.paddingLeft?(t.style.width="195px",e.style.paddingLeft="210px"):(t.style.width="40px",e.style.paddingLeft="45px"))}closeNav(){let t=document.getElementById("navSid"),e=document.getElementById("main_cont");t&&e&&(t.style.width="40px",e.style.paddingLeft="45px")}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:CoreComponent,deps:[{token:i1$3.DeviceDetectorService},{token:DialogService},{token:ResizeService},{token:ProviderService},{token:OfflineManagerService},{token:LocalStorageService},{token:AuthService},{token:AuthPermissionService}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"21.0.1",type:CoreComponent,isStandalone:!1,selector:"resolveio-client-lib-core",inputs:{environment:"environment",logo:"logo",navTabs:"navTabs",userHasPhoneNumber:"userHasPhoneNumber",client:"client",showNavbarModule:"showNavbarModule",publicProgram:"publicProgram",showSupport:"showSupport"},providers:[ProviderService],viewQueries:[{propertyName:"el_navBarMain",first:!0,predicate:["navBarMain"],descendants:!0,read:ElementRef,static:!0},{propertyName:"el_navBarModule",first:!0,predicate:["navBarModule"],descendants:!0,read:ElementRef,static:!0}],usesInheritance:!0,ngImport:i0,template:'<style>\n\t:root {\n\t\t--warning-color: #ffc107;\n\t\t--warning-font-color: #000000;\n\t\t--warning-hover-color: #e0a800;\n\t\t--warning-shadow-color: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n\t\t--success-color: #28a745;\n\t\t--success-font-color: #ffffff;\n\t\t--success-hover-color: #218838;\n\t\t--success-shadow-color: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n\t\t--danger-color: #dc3545;\n\t\t--danger-font-color: #ffffff;\n\t\t--danger-hover-color: #c82333;\n\t\t--danger-shadow-color: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n\t\t--info-color: #17a2b8;\n\t\t--info-font-color: #ffffff;\n\t\t--info-hover-color: #138496;\n\t\t--info-shadow-color: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n\t\t--primary-color: #007bff;\n\t\t--primary-font-color: #ffffff;\n\t\t--primary-hover-color: #0069d9;\n\t\t--primary-shadow-color: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n\t\t--secondary-color: #868e96;\n\t\t--secondary-font-color: #ffffff;\n\t\t--secondary-hover-color: #5a6268;\n\t\t--secondary-shadow-color: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n\t}\n\n\t:host ::ng-deep .btn-warning {\n\t\tcolor: var(--warning-font-color);\n\t\tbackground-color: var(--warning-color);\n\t\tborder-color: var(--warning-color);\n\t}\n\t:host ::ng-deep .btn-warning:focus,\n\t.btn-warning.focus {\n\t\tbox-shadow: var(--warning-shadow-color);\n\t}\n\t:host ::ng-deep .btn-warning:hover {\n\t\tcolor: var(--warning-font-color);\n\t\tbackground-color: var(--warning-hover-color);\n\t\tborder-color: var(--warning-hover-color);\n\t}\n\n\t:host ::ng-deep .btn-success {\n\t\tcolor: var(--success-font-color);\n\t\tbackground-color: var(--success-color);\n\t\tborder-color: var(--success-color);\n\t}\n\t:host ::ng-deep .btn-success:focus,\n\t.btn-success.focus {\n\t\tbox-shadow: var(--success-shadow-color);\n\t}\n\t:host ::ng-deep .btn-success:hover {\n\t\tcolor: var(--success-font-color);\n\t\tbackground-color: var(--success-hover-color);\n\t\tborder-color: var(--success-hover-color);\n\t}\n\n\t:host ::ng-deep .btn-danger {\n\t\tcolor: var(--danger-font-color);\n\t\tbackground-color: var(--danger-color);\n\t\tborder-color: var(--danger-color);\n\t}\n\t:host ::ng-deep .btn-danger:focus,\n\t.btn-danger.focus {\n\t\tbox-shadow: var(--danger-shadow-color);\n\t}\n\t:host ::ng-deep .btn-danger:hover {\n\t\tcolor: var(--danger-font-color);\n\t\tbackground-color: var(--danger-hover-color);\n\t\tborder-color: var(--danger-hover-color);\n\t}\n\n\t:host ::ng-deep .btn-info {\n\t\tcolor: var(--info-font-color);\n\t\tbackground-color: var(--info-color);\n\t\tborder-color: var(--info-color);\n\t}\n\t:host ::ng-deep .btn-info:focus,\n\t.btn-info.focus {\n\t\tbox-shadow: var(--info-shadow-color);\n\t}\n\t:host ::ng-deep .btn-info:hover {\n\t\tcolor: var(--info-font-color);\n\t\tbackground-color: var(--info-hover-color);\n\t\tborder-color: var(--info-hover-color);\n\t}\n\n\t:host ::ng-deep .btn-primary {\n\t\tcolor: var(--primary-font-color);\n\t\tbackground-color: var(--primary-color);\n\t\tborder-color: var(--primary-color);\n\t}\n\t:host ::ng-deep .btn-primary:focus,\n\t.btn-primary.focus {\n\t\tbox-shadow: var(--primary-shadow-color);\n\t}\n\t:host ::ng-deep .btn-primary:hover {\n\t\tcolor: var(--primary-font-color);\n\t\tbackground-color: var(--primary-hover-color);\n\t\tborder-color: var(--primary-hover-color);\n\t}\n\n\t:host ::ng-deep .btn-secondary {\n\t\tcolor: var(--secondary-font-color);\n\t\tbackground-color: var(--secondary-color);\n\t\tborder-color: var(--secondary-color);\n\t}\n\t:host ::ng-deep .btn-secondary:focus,\n\t.btn-secondary.focus {\n\t\tbox-shadow: var(--secondary-shadow-color);\n\t}\n\t:host ::ng-deep .btn-secondary:hover {\n\t\tcolor: var(--secondary-font-color);\n\t\tbackground-color: var(--secondary-hover-color);\n\t\tborder-color: var(--secondary-hover-color);\n\t}\n\n\t@media print {\n\t\t.dontPrint * {\n\t\t\tdisplay: none !important;\n\t\t}\n\n\t\t.myDivToPrintCs {\n\t\t\tbackground-color: white;\n\t\t\theight: 100%;\n\t\t\twidth: 100%;\n\t\t\tfont-size: 12px;\n\t\t\tline-height: 12px;\n\t\t\tpage-break-after: avoid;\n\t\t\tdisplay: initial;\n\t\t}\n\n\t\t.removeOverflow {\n\t\t\toverflow-y: hidden !important;\n\t\t\theight: 100% !important;\n\t\t}\n\t}\n\n\t.hideThis {\n\t\tdisplay: none !important;\n\t}\n\n\t.navSidbar {\n\t\twidth: 0px;\n\t\tposition: fixed;\n\t\tz-index: 1;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\tbackground-color: var(--navbar-bg-color, rgba(var(--bs-dark-rgb, 33, 37, 41), 1)) !important;\n\t\toverflow: hidden;\n\t\ttransition: 0.5s;\n\t\tpadding-top: 0px;\n\t}\n\n\t.navSidbar a {\n\t\tpadding: 8px 8px 8px 32px;\n\t\ttext-decoration: none;\n\t\tfont-size: 25px;\n\t\tcolor: #818181;\n\t\tdisplay: block;\n\t\ttransition: 0.3s;\n\t}\n\n\t.navSidbar a:hover {\n\t\tcolor: #f1f1f1;\n\t}\n\n\t.openbtn {\n\t\tbackground-color: var(--navbar-bg-color, rgba(var(--bs-dark-rgb, 33, 37, 41), 1)) !important;\n\t\tborder: none;\n\t\tcolor: #fff;\n\t\tpadding: 5px 20px;\n\t\tfont-size: 18px;\n\t\tright: 0;\n\t\ttop: 0px;\n\t\tposition: absolute;\n\t\tz-index: 999999;\n\t\tcursor: pointer;\n\t\tfloat: right;\n\t\theight: 100%;\n\t}\n\n\t.openbtn span {\n\t\tfont-size: 20px;\n\t\tdisplay: block;\n\t\theight: auto;\n\t\twidth: auto;\n\t\ttext-align: center;\n\t\tposition: absolute;\n\t\tleft: 50%;\n\t\ttop: 50%;\n\t\ttransform: translate(-50%, -50%) rotate(-90deg);\n\t\tmargin-top: -55px;\n\t\tletter-spacing: 30px;\n\t}\n\t#main_cont {\n\t\ttransition: padding-left 0.5s;\n\t}\n\n\t.sid_inr {\n\t\tpadding-left: 25px;\n\t}\n\n\t@keyframes shimmer {\n\t\t0%,\n\t\t50% {\n\t\t\tbackground-position: 120% 0;\n\t\t}\n\t\t100% {\n\t\t\tbackground-position: -80% 0;\n\t\t}\n\t}\n\n\t.shimmer::before {\n\t\tcontent: \'\';\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tright: 0;\n\t\tbottom: 0;\n\t\tleft: 0;\n\t\tbackground: linear-gradient(-75deg, rgba(255, 255, 255, 0) 40%, rgba(255, 255, 255, 0.7) 50%, rgba(255, 255, 255, 0) 60%);\n\t\tbackground-size: 200% 100%;\n\t\tanimation: shimmer 5s linear infinite;\n\t\tanimation-fill-mode: forwards;\n\t\tz-index: 11;\n\t}\n</style>\n@if (isDevice) {\n\t<link rel="stylesheet" type="text/css" href="/assets/css/tablet.css" />\n}\n<div #shell>\n\t@if (user && (!isConnected || isOffline) && !publicProgram && !digitalSign) {\n\t\t<div style="height: 40px; text-align: center; vertical-align: middle; background-color: red; color: white">\n\t\t\t<div style="padding-top: 9px; padding-bottom: 9px" class="shimmer">*** OFFLINE MODE ***</div>\n\t\t</div>\n\t}\n\t@if (!user && (!isConnected || isOffline) && !publicProgram && !digitalSign) {\n\t\t<div style="height: 40px; text-align: center; vertical-align: middle; background-color: red; color: white">\n\t\t\t<div style="padding-top: 9px; padding-bottom: 9px" class="shimmer">*** PLEASE LOGIN ***</div>\n\t\t</div>\n\t}\n\t@if (status) {\n\t\t<div style="height: 40px; text-align: center; vertical-align: middle; background-color: red; color: white">\n\t\t\t<div style="padding-top: 9px; padding-bottom: 9px" class="shimmer">*** {{ status.message }} ***</div>\n\t\t</div>\n\t}\n\t@if (fullScreen) {\n\t\t<router-outlet name="jobboardfsoutlet"></router-outlet>\n\t}\n\t<div [ngClass]="[\'container-fluid\', fullScreen ? \'hideThis\' : \'\']" [style.font-size.px]="fontSize">\n\t\t<div class="dontPrint">\n\t\t\t<navbar-main style="width: 100%" tourAnchor="navBarMain" #navBarMain [logo]="logo" [showSupport]="showSupport" [navTabs]="navTabs" [fontSize]="fontSize" [publicProgram]="publicProgram || digitalSign" [digitalSign]="digitalSign"></navbar-main>\n\t\t</div>\n\t\t<ng-template ngbModalContainer></ng-template>\n\t\t<div class="row">\n\t\t\t@if (showNavbarModule && !digitalSign) {\n\t\t\t\t<div id="navSid" [ngClass]="[\'dontPrint\', windowSizeWidth > 1200 && collapsableMenu ? \'navSidbar\' : \'col-xl-1\']" [style.width]="windowSizeWidth > 1200 && collapsableMenu ? \'40px\' : windowSizeWidth > 1200 ? \'\' : \'100%\'" [style.margin-top.px]="windowSizeWidth > 1200 && collapsableMenu ? navbarMainHeight + statusHeight + connectedHeight : 0">\n\t\t\t\t\t@if (windowSizeWidth > 1200 && collapsableMenu) {\n\t\t\t\t\t\t<div class="openbtn" (mouseenter)="openNav()"><span>MENU</span></div>\n\t\t\t\t\t}\n\t\t\t\t\t<div [ngClass]="windowSizeWidth > 1200 && collapsableMenu ? \'sid_inr\' : \'\'">\n\t\t\t\t\t\t<navbar-module #navBarModule tourAnchor="navBarModule" [sideNavWidth]="windowSizeWidth > 1200 && collapsableMenu ? \'90%\' : \'auto\'" [sideNavHeight]="windowSizeWidth > 1200 ? windowSizeHeight - navbarMainHeight - statusHeight - connectedHeight - (showNavigationMenu ? 54 + getNavbarModuleHeight() : 0) - (!isDevice || (isDevice && showNavigationMenu) ? 20 : 0) - 5 : \'\'"></navbar-module>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t<div [id]="windowSizeWidth > 1200 ? \'main_cont\' : \'main_cont_mobile\'" [ngClass]="[windowSizeWidth > 1200 && collapsableMenu ? \'col-xl-12\' : \'col-xl-11\']" [style.padding-left]="windowSizeWidth > 1200 && collapsableMenu && showNavbarModule ? 45 + \'px\' : null" (mouseenter)="windowSizeWidth > 1200 && collapsableMenu && showNavbarModule ? closeNav() : null" style="padding-top: 5px">\n\t\t\t\t<div style="-webkit-overflow-scrolling: touch" [style.overflow-y]="isDevice && !showNavigationMenu ? \'initial\' : \'scroll\'" [style.height.px]="windowSizeHeight - (isDevice && windowSizeWidth <= 1200 && !showNavigationMenu ? (getNavbarModuleHeight() > 100 ? 0 : getNavbarModuleHeight()) : 0) - navbarMainHeight - (!publicProgram && !digitalSign ? statusHeight : 0) - (!publicProgram && !digitalSign ? connectedHeight : 0) - (isDevice && showNavigationMenu ? 54 + (getNavbarModuleHeight() > 100 ? 0 : getNavbarModuleHeight()) : 0) - (!isDevice || (isDevice && showNavigationMenu) ? 20 : 0) - 5" class="removeOverflow">\n\t\t\t\t\t<router-outlet></router-outlet>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t@if (isDevice && showNavigationMenu) {\n\t\t\t<div style="height: 54px; background-color: lightgray; margin-left: -15px; margin-right: -15px" class="dontPrint">\n\t\t\t\t<table style="width: 100%">\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td style="text-align: center">\n\t\t\t\t\t\t\t<button type="button" class="btn" style="background-color: lightgray" (click)="onPushBackButton()"><i class="fa fa-arrow-left" style="color: black; font-size: 20px"></i></button>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t\t<td style="text-align: center">\n\t\t\t\t\t\t\t<button type="button" class="btn" style="background-color: lightgray" (click)="onPushReloadButton()"><i class="fa fa-refresh" style="color: black; font-size: 20px"></i></button>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t\t<td style="text-align: center">\n\t\t\t\t\t\t\t<button type="button" class="btn" style="background-color: lightgray" (click)="onPushForwardButton()"><i class="fa fa-arrow-right" style="color: black; font-size: 20px"></i></button>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</table>\n\t\t\t</div>\n\t\t}\n\t\t@if (!isDevice) {\n\t\t\t<div style="text-align: center; height: 20px; font-style: italic; font-weight: bold; background-color: lightgray; margin-left: -15px; margin-right: -15px">© {{ year }} RESOLVEIO ALL RIGHTS RESERVED</div>\n\t\t}\n\t</div>\n</div>\n',styles:[':root{--warning-color: #ffc107;--warning-font-color: #000000;--warning-hover-color: #e0a800;--warning-shadow-color: 0 0 0 .2rem rgba(222, 170, 12, .5);--success-color: #28a745;--success-font-color: #ffffff;--success-hover-color: #218838;--success-shadow-color: 0 0 0 .2rem rgba(72, 180, 97, .5);--danger-color: #dc3545;--danger-font-color: #ffffff;--danger-hover-color: #c82333;--danger-shadow-color: 0 0 0 .2rem rgba(225, 83, 97, .5);--info-color: #17a2b8;--info-font-color: #ffffff;--info-hover-color: #138496;--info-shadow-color: 0 0 0 .2rem rgba(58, 176, 195, .5);--primary-color: #007bff;--primary-font-color: #ffffff;--primary-hover-color: #0069d9;--primary-shadow-color: 0 0 0 .2rem rgba(38, 143, 255, .5);--secondary-color: #868e96;--secondary-font-color: #ffffff;--secondary-hover-color: #5a6268;--secondary-shadow-color: 0 0 0 .2rem rgba(130, 138, 145, .5)}:host ::ng-deep .btn-warning{color:var(--warning-font-color);background-color:var(--warning-color);border-color:var(--warning-color)}:host ::ng-deep .btn-warning:focus,.btn-warning.focus{box-shadow:var(--warning-shadow-color)}:host ::ng-deep .btn-warning:hover{color:var(--warning-font-color);background-color:var(--warning-hover-color);border-color:var(--warning-hover-color)}:host ::ng-deep .btn-success{color:var(--success-font-color);background-color:var(--success-color);border-color:var(--success-color)}:host ::ng-deep .btn-success:focus,.btn-success.focus{box-shadow:var(--success-shadow-color)}:host ::ng-deep .btn-success:hover{color:var(--success-font-color);background-color:var(--success-hover-color);border-color:var(--success-hover-color)}:host ::ng-deep .btn-danger{color:var(--danger-font-color);background-color:var(--danger-color);border-color:var(--danger-color)}:host ::ng-deep .btn-danger:focus,.btn-danger.focus{box-shadow:var(--danger-shadow-color)}:host ::ng-deep .btn-danger:hover{color:var(--danger-font-color);background-color:var(--danger-hover-color);border-color:var(--danger-hover-color)}:host ::ng-deep .btn-info{color:var(--info-font-color);background-color:var(--info-color);border-color:var(--info-color)}:host ::ng-deep .btn-info:focus,.btn-info.focus{box-shadow:var(--info-shadow-color)}:host ::ng-deep .btn-info:hover{color:var(--info-font-color);background-color:var(--info-hover-color);border-color:var(--info-hover-color)}:host ::ng-deep .btn-primary{color:var(--primary-font-color);background-color:var(--primary-color);border-color:var(--primary-color)}:host ::ng-deep .btn-primary:focus,.btn-primary.focus{box-shadow:var(--primary-shadow-color)}:host ::ng-deep .btn-primary:hover{color:var(--primary-font-color);background-color:var(--primary-hover-color);border-color:var(--primary-hover-color)}:host ::ng-deep .btn-secondary{color:var(--secondary-font-color);background-color:var(--secondary-color);border-color:var(--secondary-color)}:host ::ng-deep .btn-secondary:focus,.btn-secondary.focus{box-shadow:var(--secondary-shadow-color)}:host ::ng-deep .btn-secondary:hover{color:var(--secondary-font-color);background-color:var(--secondary-hover-color);border-color:var(--secondary-hover-color)}@media print{.dontPrint *{display:none!important}.myDivToPrintCs{background-color:#fff;height:100%;width:100%;font-size:12px;line-height:12px;page-break-after:avoid;display:initial}.removeOverflow{overflow-y:hidden!important;height:100%!important}}.hideThis{display:none!important}.navSidbar{width:0px;position:fixed;z-index:1;top:0;left:0;background-color:var(--navbar-bg-color, rgba(var(--bs-dark-rgb, 33, 37, 41), 1))!important;overflow:hidden;transition:.5s;padding-top:0}.navSidbar a{padding:8px 8px 8px 32px;text-decoration:none;font-size:25px;color:#818181;display:block;transition:.3s}.navSidbar a:hover{color:#f1f1f1}.openbtn{background-color:var(--navbar-bg-color, rgba(var(--bs-dark-rgb, 33, 37, 41), 1))!important;border:none;color:#fff;padding:5px 20px;font-size:18px;right:0;top:0;position:absolute;z-index:999999;cursor:pointer;float:right;height:100%}.openbtn span{font-size:20px;display:block;height:auto;width:auto;text-align:center;position:absolute;left:50%;top:50%;transform:translate(-50%,-50%) rotate(-90deg);margin-top:-55px;letter-spacing:30px}#main_cont{transition:padding-left .5s}.sid_inr{padding-left:25px}@keyframes shimmer{0%,50%{background-position:120% 0}to{background-position:-80% 0}}.shimmer:before{content:"";position:absolute;inset:0;background:linear-gradient(-75deg,#fff0 40%,#ffffffb3,#fff0 60%);background-size:200% 100%;animation:shimmer 5s linear infinite;animation-fill-mode:forwards;z-index:11}\n'],dependencies:[{kind:"directive",type:i1$1.RouterOutlet,selector:"router-outlet",inputs:["name","routerOutletData"],outputs:["activate","deactivate","attach","detach"],exportAs:["outlet"]},{kind:"directive",type:i7.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]},{kind:"component",type:NavbarMainComponent,selector:"navbar-main",inputs:["logo","navTabs","fontSize","publicProgram","digitalSign","showSupport"]},{kind:"component",type:NavbarModuleComponent,selector:"navbar-module",inputs:["sideNavHeight","sideNavWidth"]}]})}function handleMousewheelEvent(){document.activeElement.blur()}function hexToRGB$1(t,e){let n=parseInt(t.slice(1,3),16),o=parseInt(t.slice(3,5),16),r=parseInt(t.slice(5,7),16);return e?"rgba("+n+", "+o+", "+r+", "+e+")":"rgb("+n+", "+o+", "+r+")"}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:CoreComponent,decorators:[{type:Component,args:[{providers:[ProviderService],selector:"resolveio-client-lib-core",standalone:!1,template:'<style>\n\t:root {\n\t\t--warning-color: #ffc107;\n\t\t--warning-font-color: #000000;\n\t\t--warning-hover-color: #e0a800;\n\t\t--warning-shadow-color: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n\t\t--success-color: #28a745;\n\t\t--success-font-color: #ffffff;\n\t\t--success-hover-color: #218838;\n\t\t--success-shadow-color: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n\t\t--danger-color: #dc3545;\n\t\t--danger-font-color: #ffffff;\n\t\t--danger-hover-color: #c82333;\n\t\t--danger-shadow-color: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n\t\t--info-color: #17a2b8;\n\t\t--info-font-color: #ffffff;\n\t\t--info-hover-color: #138496;\n\t\t--info-shadow-color: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n\t\t--primary-color: #007bff;\n\t\t--primary-font-color: #ffffff;\n\t\t--primary-hover-color: #0069d9;\n\t\t--primary-shadow-color: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n\t\t--secondary-color: #868e96;\n\t\t--secondary-font-color: #ffffff;\n\t\t--secondary-hover-color: #5a6268;\n\t\t--secondary-shadow-color: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n\t}\n\n\t:host ::ng-deep .btn-warning {\n\t\tcolor: var(--warning-font-color);\n\t\tbackground-color: var(--warning-color);\n\t\tborder-color: var(--warning-color);\n\t}\n\t:host ::ng-deep .btn-warning:focus,\n\t.btn-warning.focus {\n\t\tbox-shadow: var(--warning-shadow-color);\n\t}\n\t:host ::ng-deep .btn-warning:hover {\n\t\tcolor: var(--warning-font-color);\n\t\tbackground-color: var(--warning-hover-color);\n\t\tborder-color: var(--warning-hover-color);\n\t}\n\n\t:host ::ng-deep .btn-success {\n\t\tcolor: var(--success-font-color);\n\t\tbackground-color: var(--success-color);\n\t\tborder-color: var(--success-color);\n\t}\n\t:host ::ng-deep .btn-success:focus,\n\t.btn-success.focus {\n\t\tbox-shadow: var(--success-shadow-color);\n\t}\n\t:host ::ng-deep .btn-success:hover {\n\t\tcolor: var(--success-font-color);\n\t\tbackground-color: var(--success-hover-color);\n\t\tborder-color: var(--success-hover-color);\n\t}\n\n\t:host ::ng-deep .btn-danger {\n\t\tcolor: var(--danger-font-color);\n\t\tbackground-color: var(--danger-color);\n\t\tborder-color: var(--danger-color);\n\t}\n\t:host ::ng-deep .btn-danger:focus,\n\t.btn-danger.focus {\n\t\tbox-shadow: var(--danger-shadow-color);\n\t}\n\t:host ::ng-deep .btn-danger:hover {\n\t\tcolor: var(--danger-font-color);\n\t\tbackground-color: var(--danger-hover-color);\n\t\tborder-color: var(--danger-hover-color);\n\t}\n\n\t:host ::ng-deep .btn-info {\n\t\tcolor: var(--info-font-color);\n\t\tbackground-color: var(--info-color);\n\t\tborder-color: var(--info-color);\n\t}\n\t:host ::ng-deep .btn-info:focus,\n\t.btn-info.focus {\n\t\tbox-shadow: var(--info-shadow-color);\n\t}\n\t:host ::ng-deep .btn-info:hover {\n\t\tcolor: var(--info-font-color);\n\t\tbackground-color: var(--info-hover-color);\n\t\tborder-color: var(--info-hover-color);\n\t}\n\n\t:host ::ng-deep .btn-primary {\n\t\tcolor: var(--primary-font-color);\n\t\tbackground-color: var(--primary-color);\n\t\tborder-color: var(--primary-color);\n\t}\n\t:host ::ng-deep .btn-primary:focus,\n\t.btn-primary.focus {\n\t\tbox-shadow: var(--primary-shadow-color);\n\t}\n\t:host ::ng-deep .btn-primary:hover {\n\t\tcolor: var(--primary-font-color);\n\t\tbackground-color: var(--primary-hover-color);\n\t\tborder-color: var(--primary-hover-color);\n\t}\n\n\t:host ::ng-deep .btn-secondary {\n\t\tcolor: var(--secondary-font-color);\n\t\tbackground-color: var(--secondary-color);\n\t\tborder-color: var(--secondary-color);\n\t}\n\t:host ::ng-deep .btn-secondary:focus,\n\t.btn-secondary.focus {\n\t\tbox-shadow: var(--secondary-shadow-color);\n\t}\n\t:host ::ng-deep .btn-secondary:hover {\n\t\tcolor: var(--secondary-font-color);\n\t\tbackground-color: var(--secondary-hover-color);\n\t\tborder-color: var(--secondary-hover-color);\n\t}\n\n\t@media print {\n\t\t.dontPrint * {\n\t\t\tdisplay: none !important;\n\t\t}\n\n\t\t.myDivToPrintCs {\n\t\t\tbackground-color: white;\n\t\t\theight: 100%;\n\t\t\twidth: 100%;\n\t\t\tfont-size: 12px;\n\t\t\tline-height: 12px;\n\t\t\tpage-break-after: avoid;\n\t\t\tdisplay: initial;\n\t\t}\n\n\t\t.removeOverflow {\n\t\t\toverflow-y: hidden !important;\n\t\t\theight: 100% !important;\n\t\t}\n\t}\n\n\t.hideThis {\n\t\tdisplay: none !important;\n\t}\n\n\t.navSidbar {\n\t\twidth: 0px;\n\t\tposition: fixed;\n\t\tz-index: 1;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\tbackground-color: var(--navbar-bg-color, rgba(var(--bs-dark-rgb, 33, 37, 41), 1)) !important;\n\t\toverflow: hidden;\n\t\ttransition: 0.5s;\n\t\tpadding-top: 0px;\n\t}\n\n\t.navSidbar a {\n\t\tpadding: 8px 8px 8px 32px;\n\t\ttext-decoration: none;\n\t\tfont-size: 25px;\n\t\tcolor: #818181;\n\t\tdisplay: block;\n\t\ttransition: 0.3s;\n\t}\n\n\t.navSidbar a:hover {\n\t\tcolor: #f1f1f1;\n\t}\n\n\t.openbtn {\n\t\tbackground-color: var(--navbar-bg-color, rgba(var(--bs-dark-rgb, 33, 37, 41), 1)) !important;\n\t\tborder: none;\n\t\tcolor: #fff;\n\t\tpadding: 5px 20px;\n\t\tfont-size: 18px;\n\t\tright: 0;\n\t\ttop: 0px;\n\t\tposition: absolute;\n\t\tz-index: 999999;\n\t\tcursor: pointer;\n\t\tfloat: right;\n\t\theight: 100%;\n\t}\n\n\t.openbtn span {\n\t\tfont-size: 20px;\n\t\tdisplay: block;\n\t\theight: auto;\n\t\twidth: auto;\n\t\ttext-align: center;\n\t\tposition: absolute;\n\t\tleft: 50%;\n\t\ttop: 50%;\n\t\ttransform: translate(-50%, -50%) rotate(-90deg);\n\t\tmargin-top: -55px;\n\t\tletter-spacing: 30px;\n\t}\n\t#main_cont {\n\t\ttransition: padding-left 0.5s;\n\t}\n\n\t.sid_inr {\n\t\tpadding-left: 25px;\n\t}\n\n\t@keyframes shimmer {\n\t\t0%,\n\t\t50% {\n\t\t\tbackground-position: 120% 0;\n\t\t}\n\t\t100% {\n\t\t\tbackground-position: -80% 0;\n\t\t}\n\t}\n\n\t.shimmer::before {\n\t\tcontent: \'\';\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tright: 0;\n\t\tbottom: 0;\n\t\tleft: 0;\n\t\tbackground: linear-gradient(-75deg, rgba(255, 255, 255, 0) 40%, rgba(255, 255, 255, 0.7) 50%, rgba(255, 255, 255, 0) 60%);\n\t\tbackground-size: 200% 100%;\n\t\tanimation: shimmer 5s linear infinite;\n\t\tanimation-fill-mode: forwards;\n\t\tz-index: 11;\n\t}\n</style>\n@if (isDevice) {\n\t<link rel="stylesheet" type="text/css" href="/assets/css/tablet.css" />\n}\n<div #shell>\n\t@if (user && (!isConnected || isOffline) && !publicProgram && !digitalSign) {\n\t\t<div style="height: 40px; text-align: center; vertical-align: middle; background-color: red; color: white">\n\t\t\t<div style="padding-top: 9px; padding-bottom: 9px" class="shimmer">*** OFFLINE MODE ***</div>\n\t\t</div>\n\t}\n\t@if (!user && (!isConnected || isOffline) && !publicProgram && !digitalSign) {\n\t\t<div style="height: 40px; text-align: center; vertical-align: middle; background-color: red; color: white">\n\t\t\t<div style="padding-top: 9px; padding-bottom: 9px" class="shimmer">*** PLEASE LOGIN ***</div>\n\t\t</div>\n\t}\n\t@if (status) {\n\t\t<div style="height: 40px; text-align: center; vertical-align: middle; background-color: red; color: white">\n\t\t\t<div style="padding-top: 9px; padding-bottom: 9px" class="shimmer">*** {{ status.message }} ***</div>\n\t\t</div>\n\t}\n\t@if (fullScreen) {\n\t\t<router-outlet name="jobboardfsoutlet"></router-outlet>\n\t}\n\t<div [ngClass]="[\'container-fluid\', fullScreen ? \'hideThis\' : \'\']" [style.font-size.px]="fontSize">\n\t\t<div class="dontPrint">\n\t\t\t<navbar-main style="width: 100%" tourAnchor="navBarMain" #navBarMain [logo]="logo" [showSupport]="showSupport" [navTabs]="navTabs" [fontSize]="fontSize" [publicProgram]="publicProgram || digitalSign" [digitalSign]="digitalSign"></navbar-main>\n\t\t</div>\n\t\t<ng-template ngbModalContainer></ng-template>\n\t\t<div class="row">\n\t\t\t@if (showNavbarModule && !digitalSign) {\n\t\t\t\t<div id="navSid" [ngClass]="[\'dontPrint\', windowSizeWidth > 1200 && collapsableMenu ? \'navSidbar\' : \'col-xl-1\']" [style.width]="windowSizeWidth > 1200 && collapsableMenu ? \'40px\' : windowSizeWidth > 1200 ? \'\' : \'100%\'" [style.margin-top.px]="windowSizeWidth > 1200 && collapsableMenu ? navbarMainHeight + statusHeight + connectedHeight : 0">\n\t\t\t\t\t@if (windowSizeWidth > 1200 && collapsableMenu) {\n\t\t\t\t\t\t<div class="openbtn" (mouseenter)="openNav()"><span>MENU</span></div>\n\t\t\t\t\t}\n\t\t\t\t\t<div [ngClass]="windowSizeWidth > 1200 && collapsableMenu ? \'sid_inr\' : \'\'">\n\t\t\t\t\t\t<navbar-module #navBarModule tourAnchor="navBarModule" [sideNavWidth]="windowSizeWidth > 1200 && collapsableMenu ? \'90%\' : \'auto\'" [sideNavHeight]="windowSizeWidth > 1200 ? windowSizeHeight - navbarMainHeight - statusHeight - connectedHeight - (showNavigationMenu ? 54 + getNavbarModuleHeight() : 0) - (!isDevice || (isDevice && showNavigationMenu) ? 20 : 0) - 5 : \'\'"></navbar-module>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t<div [id]="windowSizeWidth > 1200 ? \'main_cont\' : \'main_cont_mobile\'" [ngClass]="[windowSizeWidth > 1200 && collapsableMenu ? \'col-xl-12\' : \'col-xl-11\']" [style.padding-left]="windowSizeWidth > 1200 && collapsableMenu && showNavbarModule ? 45 + \'px\' : null" (mouseenter)="windowSizeWidth > 1200 && collapsableMenu && showNavbarModule ? closeNav() : null" style="padding-top: 5px">\n\t\t\t\t<div style="-webkit-overflow-scrolling: touch" [style.overflow-y]="isDevice && !showNavigationMenu ? \'initial\' : \'scroll\'" [style.height.px]="windowSizeHeight - (isDevice && windowSizeWidth <= 1200 && !showNavigationMenu ? (getNavbarModuleHeight() > 100 ? 0 : getNavbarModuleHeight()) : 0) - navbarMainHeight - (!publicProgram && !digitalSign ? statusHeight : 0) - (!publicProgram && !digitalSign ? connectedHeight : 0) - (isDevice && showNavigationMenu ? 54 + (getNavbarModuleHeight() > 100 ? 0 : getNavbarModuleHeight()) : 0) - (!isDevice || (isDevice && showNavigationMenu) ? 20 : 0) - 5" class="removeOverflow">\n\t\t\t\t\t<router-outlet></router-outlet>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t@if (isDevice && showNavigationMenu) {\n\t\t\t<div style="height: 54px; background-color: lightgray; margin-left: -15px; margin-right: -15px" class="dontPrint">\n\t\t\t\t<table style="width: 100%">\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td style="text-align: center">\n\t\t\t\t\t\t\t<button type="button" class="btn" style="background-color: lightgray" (click)="onPushBackButton()"><i class="fa fa-arrow-left" style="color: black; font-size: 20px"></i></button>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t\t<td style="text-align: center">\n\t\t\t\t\t\t\t<button type="button" class="btn" style="background-color: lightgray" (click)="onPushReloadButton()"><i class="fa fa-refresh" style="color: black; font-size: 20px"></i></button>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t\t<td style="text-align: center">\n\t\t\t\t\t\t\t<button type="button" class="btn" style="background-color: lightgray" (click)="onPushForwardButton()"><i class="fa fa-arrow-right" style="color: black; font-size: 20px"></i></button>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</table>\n\t\t\t</div>\n\t\t}\n\t\t@if (!isDevice) {\n\t\t\t<div style="text-align: center; height: 20px; font-style: italic; font-weight: bold; background-color: lightgray; margin-left: -15px; margin-right: -15px">© {{ year }} RESOLVEIO ALL RIGHTS RESERVED</div>\n\t\t}\n\t</div>\n</div>\n'}]}],ctorParameters:()=>[{type:i1$3.DeviceDetectorService},{type:DialogService},{type:ResizeService},{type:ProviderService},{type:OfflineManagerService},{type:LocalStorageService},{type:AuthService},{type:AuthPermissionService}],propDecorators:{environment:[{type:Input,args:["environment"]}],logo:[{type:Input,args:["logo"]}],navTabs:[{type:Input,args:["navTabs"]}],userHasPhoneNumber:[{type:Input,args:["userHasPhoneNumber"]}],client:[{type:Input,args:["client"]}],showNavbarModule:[{type:Input,args:["showNavbarModule"]}],publicProgram:[{type:Input,args:["publicProgram"]}],showSupport:[{type:Input,args:["showSupport"]}],el_navBarMain:[{type:ViewChild,args:["navBarMain",{read:ElementRef,static:!0}]}],el_navBarModule:[{type:ViewChild,args:["navBarModule",{read:ElementRef,static:!0}]}]}});class HtmlDiffViewerComponent{payloadStr="";leftTextarea;rightTextarea;diffContent;leftContent="";rightContent="";diffLines=[];visibleDiffLines=[];showFullDiff=!1;constructor(){}ngAfterViewInit(){if(this.payloadStr){let t=JSON.parse(this.payloadStr,dateReviver);t[0]&&t[2]&&(this.leftContent=JSON.stringify(t[0],null,2),this.rightContent=JSON.stringify(t[2],null,2),this.rightContent.includes("$")&&(this.rightContent=JSON.stringify(applyMongoUpdate(t[0],t[2]),null,2)),this.generateDiff())}}toggleDiffView(){this.showFullDiff=!this.showFullDiff,this.updateVisibleLines()}updateVisibleLines(){if(this.showFullDiff)return void(this.visibleDiffLines=[...this.diffLines.map((t,e)=>(t.leftNumber=e+1,t))]);const t=new Set,e=new Set;this.diffLines.forEach((e,n)=>{"added"!==e.type&&"removed"!==e.type&&"changed"!==e.type||t.add(n)});const n=new Set;t.forEach(t=>{let e=t,o=0;const r=[];for(;e>=0;){const t=this.diffLines[e],i=t.leftContent||t.rightContent||"";i.trim().endsWith("}")||i.trim().endsWith("]")?o++:(i.trim().endsWith("{")||i.trim().endsWith("["))&&(o>0?o--:(n.add(e),r.push(e))),e--}r.forEach(t=>{let e=t,o=1;for(;e<this.diffLines.length&&o>0;){e++;const t=this.diffLines[e];if(!t)break;const r=t.leftContent||t.rightContent||"";r.trim().endsWith("{")||r.trim().endsWith("[")?o++:(r.trim().endsWith("}")||r.trim().endsWith("]"))&&(o--,0===o&&n.add(e))}})});const o=new Set([...t,...n]);o.forEach(t=>{for(let n=Math.max(0,t-1);n<=Math.min(this.diffLines.length-1,t+1);n++)e.add(n)}),this.visibleDiffLines=this.diffLines.map((t,n)=>({...t,isContext:e.has(n)&&!o.has(n),hidden:!(o.has(n)||e.has(n))}))}generateDiff(){try{const t=JSON.parse(this.leftContent),e=JSON.parse(this.rightContent),n=this.normalizeValue(t),o=this.normalizeValue(e),r=this.compareValues(null,n,o,0);this.diffLines=this.assignLineNumbers(r),this.updateVisibleLines(),this.setupScrollSync()}catch(t){console.error("Error generating diff:",t),this.diffLines=[],this.visibleDiffLines=[]}}normalizeValue(t){if(Array.isArray(t)){if(0===t.length)return t;if("object"==typeof t[0]&&null!==t[0])return t.map(t=>this.normalizeValue(t));if("string"==typeof t[0]||"number"==typeof t[0]||"boolean"==typeof t[0]){const e=[...t];return e.sort((t,e)=>t<e?-1:t>e?1:0),e}return t}if(t&&"object"==typeof t){const e={};return Object.keys(t).sort().forEach(n=>{e[n]=this.normalizeValue(t[n])}),e}return t}compareValues(t,e,n,o){const r=[],i=this.getType(e),a=this.getType(n);if(void 0===e&&void 0!==n)return this.isComplexType(a)?(r.push(this.makeLine("added","",this.openingBrace(t,a,o))),r.push(...this.renderComplex(n,"added",o+1,!0)),r.push(this.makeLine("added","",this.closingBrace(a,o)))):r.push(this.makeLine("added","",this.renderPrimitive(t,n,o))),r;if(void 0!==e&&void 0===n)return this.isComplexType(i)?(r.push(this.makeLine("removed",this.openingBrace(t,i,o),"")),r.push(...this.renderComplex(e,"removed",o+1,!1)),r.push(this.makeLine("removed",this.closingBrace(i,o),""))):r.push(this.makeLine("removed",this.renderPrimitive(t,e,o),"")),r;if(i!==a||"object"!==i&&"array"!==i)this.isEqual(e,n)?r.push(this.makeLine("unchanged",this.renderPrimitive(t,e,o),this.renderPrimitive(t,n,o))):r.push(this.makeLine("changed",this.renderPrimitive(t,e,o),this.renderPrimitive(t,n,o)));else{if(r.push(this.makeLine("unchanged",this.openingBrace(t,i,o),this.openingBrace(t,a,o))),"object"===i){const t=new Set([...Object.keys(e),...Object.keys(n)]),i=Array.from(t).sort();for(const t of i){const i=e[t],a=n[t];r.push(...this.compareValues(t,i,a,o+1))}}else{const t=Math.max(e.length,n.length);let i=!1;for(let o=0;o<t;o++){const t=e[o],r=n[o];if(!this.isEqual(t,r)){i=!0;break}}if(i)for(let i=0;i<t;i++){const t=e[i],a=n[i];this.isEqual(t,a)||(void 0===t&&void 0!==a?this.isComplexType(this.getType(a))?(r.push(this.makeLine("added","",this.openingBrace(`[${i}]`,this.getType(a),o+1))),r.push(...this.renderComplex(a,"added",o+2,!0)),r.push(this.makeLine("added","",this.closingBrace(this.getType(a),o+1)))):r.push(this.makeLine("added","",this.renderPrimitive(`[${i}]`,a,o+1))):void 0!==t&&void 0===a?this.isComplexType(this.getType(t))?(r.push(this.makeLine("removed",this.openingBrace(`[${i}]`,this.getType(t),o+1),"")),r.push(...this.renderComplex(t,"removed",o+2,!1)),r.push(this.makeLine("removed",this.closingBrace(this.getType(t),o+1),""))):r.push(this.makeLine("removed",this.renderPrimitive(`[${i}]`,t,o+1),"")):r.push(...this.compareValues(`[${i}]`,t,a,o+1)))}else for(let t=0;t<e.length;t++)r.push(...this.compareValues(`[${t}]`,e[t],n[t],o+1))}r.push(this.makeLine("unchanged",this.closingBrace(i,o),this.closingBrace(a,o)))}return r}isComplexType(t){return"object"===t||"array"===t}renderComplex(t,e,n,o){const r=[],i=this.getType(t);if("object"===i){Object.keys(t).sort().forEach(i=>{const a=t[i],s=this.getType(a);this.isComplexType(s)?(r.push(this.makeLine(e,o?"":this.openingBrace(i,s,n),o?this.openingBrace(i,s,n):"")),r.push(...this.renderComplex(a,e,n+1,o)),r.push(this.makeLine(e,o?"":this.closingBrace(s,n),o?this.closingBrace(s,n):""))):r.push(this.makeLine(e,o?"":this.renderPrimitive(i,a,n),o?this.renderPrimitive(i,a,n):""))})}else if("array"===i)for(let i=0;i<t.length;i++){const a=t[i],s=this.getType(a);this.isComplexType(s)?(r.push(this.makeLine(e,o?"":this.openingBrace(`[${i}]`,s,n),o?this.openingBrace(`[${i}]`,s,n):"")),r.push(...this.renderComplex(a,e,n+1,o)),r.push(this.makeLine(e,o?"":this.closingBrace(s,n),o?this.closingBrace(s,n):""))):r.push(this.makeLine(e,o?"":this.renderPrimitive(`[${i}]`,a,n),o?this.renderPrimitive(`[${i}]`,a,n):""))}else r.push(this.makeLine(e,o?"":this.renderPrimitive(null,t,n),o?this.renderPrimitive(null,t,n):""));return r}getType(t){return null===t?"null":Array.isArray(t)?"array":"object"==typeof t?"object":"primitive"}isEqual(t,e){return JSON.stringify(t)===JSON.stringify(e)}makeLine(t,e,n){return{type:t,leftContent:e,rightContent:n}}openingBrace(t,e,n){const o=this.getIndentString(n),r="array"===e?"[":"{";return t?t.startsWith("[")?`${o}${t}: ${r}`:`${o}"${t}": ${r}`:`${o}${r}`}closingBrace(t,e){return`${this.getIndentString(e)}${"array"===t?"]":"}"}`}renderPrimitive(t,e,n){const o=this.getIndentString(n),r=JSON.stringify(e);return t?t.startsWith("[")?`${o}${t}: ${r}`:`${o}"${t}": ${r}`:`${o}${r}`}getIndentString(t){let e="";for(let n=0;n<t;n++)e+="\t";return e}assignLineNumbers(t){let e=1,n=1;return t.map(t=>{let o="",r="";return"removed"===t.type?(o=(e++).toString(),r=""):"added"===t.type?(o="",r=(n++).toString()):(o=(e++).toString(),r=(n++).toString()),{...t,leftNumber:o,rightNumber:r}})}setupScrollSync(){setTimeout(()=>{const t=this.diffContent.nativeElement,e=t.querySelectorAll(".left"),n=t.querySelectorAll(".right");if(e.length&&n.length){const t=e[0],o=n[0];t.addEventListener("scroll",()=>{o.scrollTop=t.scrollTop,o.scrollLeft=t.scrollLeft}),o.addEventListener("scroll",()=>{t.scrollTop=o.scrollTop,t.scrollLeft=o.scrollLeft})}})}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:HtmlDiffViewerComponent,deps:[],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"21.0.1",type:HtmlDiffViewerComponent,isStandalone:!1,selector:"html-diff-viewer",inputs:{payloadStr:"payloadStr"},viewQueries:[{propertyName:"leftTextarea",first:!0,predicate:["leftTextarea"],descendants:!0},{propertyName:"rightTextarea",first:!0,predicate:["rightTextarea"],descendants:!0},{propertyName:"diffContent",first:!0,predicate:["diffContent"],descendants:!0}],ngImport:i0,template:'\n\t\t<div class="diff-container">\n\t\t <div class="diff-controls">\n\t\t <button type="button" class="btn"\n\t\t [class.btn-primary]="!showFullDiff"\n\t\t [class.btn-secondary]="showFullDiff"\n\t\t (click)="toggleDiffView()">\n\t\t {{ showFullDiff ? \'Show Full Content\' : \'Show Changes Only\' }}\n\t\t </button>\n\t\t </div>\n\t\t <div class="diff-header">\n\t\t <div class="diff-header-left">Original</div>\n\t\t <div class="diff-header-right">Modified</div>\n\t\t </div>\n\t\t <div class="diff-content" #diffContent>\n\t\t <div class="diff-lines">\n\t\t @for (line of visibleDiffLines; track line) {\n\t\t <div class="diff-line"\n\t\t [class.context-line]="line.isContext"\n\t\t [class.hidden-line]="line.hidden">\n\t\t <div class="line-number left">{{ line.leftNumber }}</div>\n\t\t <div class="line-content left"\n\t\t [class.deleted]="line.type === \'removed\'"\n\t\t [class.changed-left]="line.type === \'changed\'">\n\t\t <span>{{ line.leftContent }}</span>\n\t\t </div>\n\t\t <div class="line-number right">{{ line.rightNumber }}</div>\n\t\t <div class="line-content right"\n\t\t [class.added]="line.type === \'added\'"\n\t\t [class.changed-right]="line.type === \'changed\'">\n\t\t <span>{{ line.rightContent }}</span>\n\t\t </div>\n\t\t </div>\n\t\t }\n\t\t </div>\n\t\t </div>\n\t\t <div class="input-container">\n\t\t <textarea #leftTextarea [(ngModel)]="leftContent" placeholder="Left side content" rows="10"></textarea>\n\t\t <textarea #rightTextarea [(ngModel)]="rightContent" placeholder="Right side content" rows="10"></textarea>\n\t\t </div>\n\t\t</div>\n\t\t',isInline:!0,styles:[".diff-container{display:flex;flex-direction:column;font-family:monospace;font-size:12px;line-height:1.5}.diff-controls{margin-bottom:10px}.btn{padding:5px 10px;border-radius:4px;cursor:pointer;border:1px solid #ddd}.btn-primary{background-color:#0366d6;color:#fff}.btn-secondary{background-color:#f6f8fa;color:#24292e}.diff-header{display:flex;background:#f6f8fa;border:1px solid #e1e4e8;border-bottom:none;padding:8px 16px;font-weight:700}.diff-header-left,.diff-header-right{width:50%;box-sizing:border-box}.diff-content{border:1px solid #e1e4e8;overflow:auto;max-height:500px}.diff-lines{display:flex;flex-direction:column;width:100%}.diff-line{display:flex;width:100%}.context-line{background-color:#f1f8ff}.hidden-line{display:none}.line-number{width:40px!important;min-width:40px!important;padding:0 10px;text-align:right;color:#1b1f234d;background-color:#f6f8fa;border-right:1px solid #e1e4e8;-webkit-user-select:none;user-select:none}.line-content{flex:1;padding:0 10px;white-space:pre;min-width:0;overflow-x:auto}.left{width:50%;border-right:1px solid #e1e4e8}.right{width:50%}.added{background-color:#e6ffed}.deleted{background-color:#ffebe9}.changed-left{background-color:#fff3bf;text-decoration:line-through}.changed-right{background-color:#d4edda}.input-container{display:flex;margin-top:20px;gap:10px}textarea{width:50%;height:200px;font-family:monospace;padding:10px;border:1px solid #ddd;border-radius:4px;box-sizing:border-box}*{word-wrap:normal!important}\n"],dependencies:[{kind:"directive",type:i2.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:i2.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:i2.NgModel,selector:"[ngModel]:not([formControlName]):not([formControl])",inputs:["name","disabled","ngModel","ngModelOptions"],outputs:["ngModelChange"],exportAs:["ngModel"]}]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:HtmlDiffViewerComponent,decorators:[{type:Component,args:[{selector:"html-diff-viewer",template:'\n\t\t<div class="diff-container">\n\t\t <div class="diff-controls">\n\t\t <button type="button" class="btn"\n\t\t [class.btn-primary]="!showFullDiff"\n\t\t [class.btn-secondary]="showFullDiff"\n\t\t (click)="toggleDiffView()">\n\t\t {{ showFullDiff ? \'Show Full Content\' : \'Show Changes Only\' }}\n\t\t </button>\n\t\t </div>\n\t\t <div class="diff-header">\n\t\t <div class="diff-header-left">Original</div>\n\t\t <div class="diff-header-right">Modified</div>\n\t\t </div>\n\t\t <div class="diff-content" #diffContent>\n\t\t <div class="diff-lines">\n\t\t @for (line of visibleDiffLines; track line) {\n\t\t <div class="diff-line"\n\t\t [class.context-line]="line.isContext"\n\t\t [class.hidden-line]="line.hidden">\n\t\t <div class="line-number left">{{ line.leftNumber }}</div>\n\t\t <div class="line-content left"\n\t\t [class.deleted]="line.type === \'removed\'"\n\t\t [class.changed-left]="line.type === \'changed\'">\n\t\t <span>{{ line.leftContent }}</span>\n\t\t </div>\n\t\t <div class="line-number right">{{ line.rightNumber }}</div>\n\t\t <div class="line-content right"\n\t\t [class.added]="line.type === \'added\'"\n\t\t [class.changed-right]="line.type === \'changed\'">\n\t\t <span>{{ line.rightContent }}</span>\n\t\t </div>\n\t\t </div>\n\t\t }\n\t\t </div>\n\t\t </div>\n\t\t <div class="input-container">\n\t\t <textarea #leftTextarea [(ngModel)]="leftContent" placeholder="Left side content" rows="10"></textarea>\n\t\t <textarea #rightTextarea [(ngModel)]="rightContent" placeholder="Right side content" rows="10"></textarea>\n\t\t </div>\n\t\t</div>\n\t\t',standalone:!1,styles:[".diff-container{display:flex;flex-direction:column;font-family:monospace;font-size:12px;line-height:1.5}.diff-controls{margin-bottom:10px}.btn{padding:5px 10px;border-radius:4px;cursor:pointer;border:1px solid #ddd}.btn-primary{background-color:#0366d6;color:#fff}.btn-secondary{background-color:#f6f8fa;color:#24292e}.diff-header{display:flex;background:#f6f8fa;border:1px solid #e1e4e8;border-bottom:none;padding:8px 16px;font-weight:700}.diff-header-left,.diff-header-right{width:50%;box-sizing:border-box}.diff-content{border:1px solid #e1e4e8;overflow:auto;max-height:500px}.diff-lines{display:flex;flex-direction:column;width:100%}.diff-line{display:flex;width:100%}.context-line{background-color:#f1f8ff}.hidden-line{display:none}.line-number{width:40px!important;min-width:40px!important;padding:0 10px;text-align:right;color:#1b1f234d;background-color:#f6f8fa;border-right:1px solid #e1e4e8;-webkit-user-select:none;user-select:none}.line-content{flex:1;padding:0 10px;white-space:pre;min-width:0;overflow-x:auto}.left{width:50%;border-right:1px solid #e1e4e8}.right{width:50%}.added{background-color:#e6ffed}.deleted{background-color:#ffebe9}.changed-left{background-color:#fff3bf;text-decoration:line-through}.changed-right{background-color:#d4edda}.input-container{display:flex;margin-top:20px;gap:10px}textarea{width:50%;height:200px;font-family:monospace;padding:10px;border:1px solid #ddd;border-radius:4px;box-sizing:border-box}*{word-wrap:normal!important}\n"]}]}],ctorParameters:()=>[],propDecorators:{payloadStr:[{type:Input}],leftTextarea:[{type:ViewChild,args:["leftTextarea"]}],rightTextarea:[{type:ViewChild,args:["rightTextarea"]}],diffContent:[{type:ViewChild,args:["diffContent"]}]}});class JsonParsePipe{transform(t){let e=null,n=!1;try{e=JSON.parse(t,dateReviver)}catch(t){n=!0}return n?t:JSON.stringify(e,null,2)}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:JsonParsePipe,deps:[],target:i0.ɵɵFactoryTarget.Pipe});static"ɵpipe"=i0.ɵɵngDeclarePipe({minVersion:"14.0.0",version:"21.0.1",ngImport:i0,type:JsonParsePipe,isStandalone:!1,name:"jsonParse",pure:!1})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:JsonParsePipe,decorators:[{type:Pipe,args:[{name:"jsonParse",pure:!1,standalone:!1}]}]});class LoggerComponent extends BaseComponent{_services;_ds;_cd;subscription$=[];logs=[];entries_per_page=25;page_num=1;log_cnt=0;user=null;users=[];startDateTime;endDateTime;dateStart;dateEnd;selectedTypes=[];client=null;clients=[];collection="";method="";route="";id_document="";constructor(t,e,n){super(t),this._services=t,this._ds=e,this._cd=n}ngOnInit(){this._services._account.getUser().roles.super_admin||this._services._router.navigateByUrl("/home"),this.subscription$.push(this._services._socket.subscribe("activeClients").subscribe(t=>{this.clients=t,this._cd.detectChanges()})),this.subscription$.push(this._services._socket.subscribe("allUsers").subscribe(t=>{this.users=t,this._cd.detectChanges()}));let t=new Date;t.setHours(0,0,0,0);let e=new Date(moment$1(t).subtract(10,"days").toDate());this.startDateTime=this.createPickerValue(e,0);let n=new Date;n.setHours(23,59,59,999),this.endDateTime=this.createPickerValue(n,59),this.getLogData()}ngOnDestroy(){this.subscription$.forEach(t=>{t.unsubscribe()})}getLogData(){this.dateStart=this.toDate(this.startDateTime),this.dateEnd=this.toDate(this.endDateTime,!0);let t={$and:[{createdAt:{$gte:this.dateStart}},{createdAt:{$lte:this.dateEnd}}]};if(this.client)if(this.client.includes(",")){let e=this.client.split(",").map(t=>t.trim()).filter(t=>!t.startsWith("!"));e.length&&t.$and.push({client:{$in:e}}),this.client.split(",").map(t=>t.trim()).filter(t=>t.startsWith("!")).forEach(e=>{t.$and.push({client:{$ne:e.replace("!","")}})})}else this.client.startsWith("!")?t.$and.push({client:{$ne:this.client.replace("!","").trim()}}):t.$and.push({client:this.client.trim()});else t.$and.push({client:"ResolveIO"});if(this.selectedTypes.length){if(t.$and.push({type:{$in:this.selectedTypes}}),this.collection)if(this.collection.includes(",")){let e=this.collection.split(",").map(t=>t.trim()).filter(t=>!t.startsWith("!"));e.length&&t.$and.push({collection:{$in:e}}),this.collection.split(",").map(t=>t.trim()).filter(t=>t.startsWith("!")).forEach(e=>{t.$and.push({collection:{$ne:e.replace("!","")}})})}else this.collection.startsWith("!")?t.$and.push({collection:{$ne:this.collection.replace("!","").trim()}}):t.$and.push({collection:this.collection.trim()});if(this.method)if(this.method.includes(",")){let e=this.method.split(",").map(t=>t.trim()).filter(t=>!t.startsWith("!"));e.length&&t.$and.push({method:{$in:e}}),this.method.split(",").map(t=>t.trim()).filter(t=>t.startsWith("!")).forEach(e=>{t.$and.push({method:{$ne:e.replace("!","")}})})}else this.method.startsWith("!")?t.$and.push({method:{$ne:this.method.replace("!","").trim()}}):t.$and.push({method:this.method.trim()});if(this.route)if(this.route.includes(",")){let e=this.route.split(",").map(t=>t.trim()).filter(t=>!t.startsWith("!"));e.length&&t.$and.push({route:{$in:e}}),this.route.split(",").map(t=>t.trim()).filter(t=>t.startsWith("!")).forEach(e=>{t.$and.push({route:{$ne:e.replace("!","")}})})}else this.route.startsWith("!")?t.$and.push({route:{$ne:this.route.replace("!","").trim()}}):t.$and.push({route:this.route.trim()});if(this.id_document)if(this.id_document.includes(",")){let e=this.id_document.split(",").map(t=>t.trim()).filter(t=>!t.startsWith("!"));e.length&&t.$and.push({id_document:{$in:e}}),this.id_document.split(",").map(t=>t.trim()).filter(t=>t.startsWith("!")).forEach(e=>{t.$and.push({id_document:{$ne:e.replace("!","")}})})}else this.id_document.startsWith("!")?t.$and.push({id_document:{$ne:this.id_document.replace("!","").trim()}}):t.$and.push({id_document:this.id_document.trim()});this.user&&t.$and.push({user:this.user}),"string"==typeof this.entries_per_page&&(this.entries_per_page=parseInt(this.entries_per_page)),this._services._socket.call("findWithOptions","logs",t,{sort:{createdAt:-1},limit:this.entries_per_page,skip:this.entries_per_page*(this.page_num-1)},(t,e)=>{this.logs=e,this._cd.detectChanges()}),this._services._socket.call("countCollectionWithQuery","logs",t,(t,e)=>{this.log_cnt=e,this._cd.detectChanges()}),this._cd.detectChanges()}}selectType(t){"all"!==t?this.selectedTypes.includes(t)?this.selectedTypes.splice(this.selectedTypes.indexOf(t),1):this.selectedTypes.push(t):7===this.selectedTypes.length?this.selectedTypes=[]:this.selectedTypes=["error","document","query","queryResponse","client-request","client-response","callMethod"],this.logs=[],this.selectedTypes.length&&this.getLogData()}icon(t){return"error"===t?"danger":"document"===t?"info":"client-response"===t?"success":"client-request"===t?"primary":"secondary"}removeAllLogs(){this._ds.confirm("Are you sure you want to delete all logs?").then(()=>{this._services._socket.call("removeAllDocuments","logs")},()=>{})}toDate(t,e=!1){if(!t||!t.date)return new Date;let n=t.time||{hour:0,minute:0,second:0,ms:0},o=e?999:n.ms||0;return new Date(t.date.year,t.date.month-1,t.date.day,n.hour||0,n.minute||0,n.second||0,o)}createPickerValue(t,e=null){return{mode:"datetime",date:{year:t.getFullYear(),month:t.getMonth()+1,day:t.getDate()},time:{hour:t.getHours(),minute:t.getMinutes(),second:null!==e?e:t.getSeconds(),ms:t.getMilliseconds()}}}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:LoggerComponent,deps:[{token:ProviderService},{token:DialogService},{token:i0.ChangeDetectorRef}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"21.0.1",type:LoggerComponent,isStandalone:!1,selector:"resolveio-logger",providers:[ProviderService],usesInheritance:!0,ngImport:i0,template:'<div class="row">\n\t<div class="col-lg-12">\n\t\t<div class="card">\n\t\t\t<div class="card-header"><b>Filters</b></div>\n\t\t\t<div class="card-body">\n\t\t\t\t<div class="row">\n\t\t\t\t\t<div class="col-lg-12">\n\t\t\t\t\t\t<responsive-button-group collapseSize="900">\n\t\t\t\t\t\t\t<button type="button" [ngClass]="[\'btn\', selectedTypes.includes(\'error\') && selectedTypes.includes(\'document\') && selectedTypes.includes(\'query\') && selectedTypes.includes(\'client-request\') && selectedTypes.includes(\'client-response\') ? \'btn-success\' : \'btn-warning\']" (click)="selectType(\'all\')">All</button>\n\t\t\t\t\t\t\t<button type="button" [ngClass]="[\'btn\', selectedTypes.includes(\'error\') ? \'btn-success\' : \'btn-warning\']" (click)="selectType(\'error\')">Errors</button>\n\t\t\t\t\t\t\t<button type="button" [ngClass]="[\'btn\', selectedTypes.includes(\'document\') ? \'btn-success\' : \'btn-warning\']" (click)="selectType(\'document\')">Document</button>\n\t\t\t\t\t\t\t\x3c!-- <button type="button" [ngClass]="[\'btn\', selectedTypes.includes(\'query\') ? \'btn-success\' : \'btn-warning\']" (click)="selectType(\'query\')">Query</button> --\x3e\n\t\t\t\t\t\t\t\x3c!-- <button type="button" [ngClass]="[\'btn\', selectedTypes.includes(\'queryResponse\') ? \'btn-success\' : \'btn-warning\']" (click)="selectType(\'queryResponse\')">Query Response</button> --\x3e\n\t\t\t\t\t\t\t<button type="button" [ngClass]="[\'btn\', selectedTypes.includes(\'client-request\') ? \'btn-success\' : \'btn-warning\']" (click)="selectType(\'client-request\')">Client Requests</button>\n\t\t\t\t\t\t\t<button type="button" [ngClass]="[\'btn\', selectedTypes.includes(\'client-response\') ? \'btn-success\' : \'btn-warning\']" (click)="selectType(\'client-response\')">Client Responses</button>\n\t\t\t\t\t\t\t<button type="button" [ngClass]="[\'btn\', selectedTypes.includes(\'callMethod\') ? \'btn-success\' : \'btn-warning\']" (click)="selectType(\'callMethod\')">Call Method</button>\n\t\t\t\t\t\t\t<button type="button" class="btn btn-danger" (click)="removeAllLogs()">REMOVE ALL LOGS</button>\n\t\t\t\t\t\t</responsive-button-group>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class="row" style="margin-top: 10px">\n\t\t\t\t\t<div class="col-lg-2">\n\t\t\t\t\t\t<label class="form-control-label">Client</label>\n\t\t\t\t\t\t<ng-select [(ngModel)]="client" (change)="getLogData()" placeholder="Select Client" [options]="clients" optionValueKey="name" optionLabelKey="name"></ng-select>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="col-lg-2">\n\t\t\t\t\t\t<label class="form-control-label">User</label>\n\t\t\t\t\t\t<ng-select [(ngModel)]="user" (change)="getLogData()" placeholder="Select User" [options]="users" optionValueKey="fullname" optionLabelKey="fullname"></ng-select>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="col-lg-2">\n\t\t\t\t\t\t<label class="form-control-label">Collection</label>\n\t\t\t\t\t\t<input class="form-control" [(ngModel)]="collection" (change)="getLogData()" placeholder="Input Colls Sep By , & ! for !Not" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="col-lg-2">\n\t\t\t\t\t\t<label class="form-control-label">Method</label>\n\t\t\t\t\t\t<input class="form-control" [(ngModel)]="method" (change)="getLogData()" placeholder="Input Methods Sep By , & ! for !Not" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="col-lg-2">\n\t\t\t\t\t\t<label class="form-control-label">Route</label>\n\t\t\t\t\t\t<input class="form-control" [(ngModel)]="route" (change)="getLogData()" placeholder="Input Routes Sep By , & ! for !Not" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="col-lg-2">\n\t\t\t\t\t\t<label class="form-control-label">Document</label>\n\t\t\t\t\t\t<input class="form-control" [(ngModel)]="id_document" (change)="getLogData()" placeholder="Input Ids Sep By , & ! for !Not" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class="row" style="margin-top: 10px">\n\t\t\t\t\t<div class="col-lg-2 offset-lg-4">\n\t\t\t\t\t\t<label class="form-control-label">Date/Time Start</label>\n\t\t\t\t\t\t<div class="input-group">\n\t\t\t\t\t\t\t<rio-date-picker [(ngModel)]="startDateTime" (ngModelChange)="getLogData()" selectionMode="datetime" [allowSeconds]="true"></rio-date-picker>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="col-lg-2">\n\t\t\t\t\t\t<label class="form-control-label">Date/Time End</label>\n\t\t\t\t\t\t<div class="input-group">\n\t\t\t\t\t\t\t<rio-date-picker [(ngModel)]="endDateTime" (ngModelChange)="getLogData()" selectionMode="datetime" [allowSeconds]="true"></rio-date-picker>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class="row" style="margin-top: 10px">\n\t\t\t\t\t<div ngbAccordion #acc="ngbAccordion" activeIds="">\n\t\t\t\t\t\t@for (log of logs; track log._id; let i = $index) {\n\t\t\t\t\t\t\t<div ngbAccordionItem [id]="\'log_\' + i">\n\t\t\t\t\t\t\t\t<div ngbAccordionHeader>\n\t\t\t\t\t\t\t\t\t<button ngbAccordionButton type="button">\n\t\t\t\t\t\t\t\t\t\t<label class="label-accordion" style="width: 90%; height: 22px">\n\t\t\t\t\t\t\t\t\t\t\t<strong class="float-start">Type: {{ log.type }}{{ log.method ? \' - Method: \' + log.method : \'\' }}{{ log.collection ? \' - Collection: \' + log.collection : \'\' }}{{ log.user ? \' - User: \' + log.user : \'\' }}{{ log.route ? \' - Route: \' + log.route : \'\' }}{{ log.id_document ? \' - id_document: \' + log.id_document : \'\' }}{{ log.messageId ? \' - messageId: \' + log.messageId : \'\' }}{{ log.instance ? \' - instance: \' + log.instance : \'\' }}</strong>\n\t\t\t\t\t\t\t\t\t\t\t<p class="float-end mb-0">{{ log.createdAt | date: \'medium\' }}</p>\n\t\t\t\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div ngbAccordionCollapse>\n\t\t\t\t\t\t\t\t\t<div ngbAccordionBody>\n\t\t\t\t\t\t\t\t\t\t<ng-template>\n\t\t\t\t\t\t\t\t\t\t\t@if (log.payload) {\n\t\t\t\t\t\t\t\t\t\t\t\t@if (log.method === \'replaceOne\' || log.method === \'updateOne\') {\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div ngbAccordion #acc2="ngbAccordion" activeIds="diff">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div ngbAccordionItem id="diff">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div ngbAccordionHeader>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<button ngbAccordionButton type="button">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class="label-accordion" style="width: 90%; height: 22px">Diff</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div ngbAccordionCollapse>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div ngbAccordionBody>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ng-template>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<html-diff-viewer [payloadStr]="log.payload"></html-diff-viewer>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div ngbAccordionItem id="raw">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div ngbAccordionHeader>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<button ngbAccordionButton type="button">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class="label-accordion" style="width: 90%; height: 22px">Raw</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div ngbAccordionCollapse>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div ngbAccordionBody>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ng-template>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<pre>{{ log.payload | jsonParse }}</pre>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t@if (log.method !== \'replaceOne\' && log.method !== \'updateOne\') {\n\t\t\t\t\t\t\t\t\t\t\t\t\t<pre>{{ log.payload | jsonParse }}</pre>\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t@if (!log.payload) {\n\t\t\t\t\t\t\t\t\t\t\t\tNo Data\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="row" style="margin-top: 10px">\n\t\t\t\t\t\t<div class="col-lg-4">\n\t\t\t\t\t\t\t<div class="row">\n\t\t\t\t\t\t\t\t<div class="col-lg-8">\n\t\t\t\t\t\t\t\t\t<label class="form-control-label">Entries Per Page</label>\n\t\t\t\t\t\t\t\t\t<select class="form-control" [(ngModel)]="entries_per_page" (change)="getLogData()">\n\t\t\t\t\t\t\t\t\t\t<option value="10">10</option>\n\t\t\t\t\t\t\t\t\t\t<option value="25">25</option>\n\t\t\t\t\t\t\t\t\t\t<option value="50">50</option>\n\t\t\t\t\t\t\t\t\t\t<option value="100">100</option>\n\t\t\t\t\t\t\t\t\t\t<option value="250">250</option>\n\t\t\t\t\t\t\t\t\t\t<option value="500">500</option>\n\t\t\t\t\t\t\t\t\t\t<option value="1000">1000</option>\n\t\t\t\t\t\t\t\t\t\t<option value="5000">5000</option>\n\t\t\t\t\t\t\t\t\t</select>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class="col-lg-8">\n\t\t\t\t\t\t\t<ngb-pagination class="float-end" boundaryLinks="true" [collectionSize]="log_cnt" directionLinks="true" ellipses="false" [(page)]="page_num" maxSize="6" [pageSize]="entries_per_page" rotate="true" (pageChange)="getLogData()"></ngb-pagination>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>\n',dependencies:[{kind:"directive",type:i2.NgSelectOption,selector:"option",inputs:["ngValue","value"]},{kind:"directive",type:i2.ɵNgSelectMultipleOption,selector:"option",inputs:["ngValue","value"]},{kind:"directive",type:i2.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:i2.SelectControlValueAccessor,selector:"select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]",inputs:["compareWith"]},{kind:"directive",type:i2.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:i2.NgModel,selector:"[ngModel]:not([formControlName]):not([formControl])",inputs:["name","disabled","ngModel","ngModelOptions"],outputs:["ngModelChange"],exportAs:["ngModel"]},{kind:"directive",type:i1$2.NgbAccordionButton,selector:"button[ngbAccordionButton]"},{kind:"directive",type:i1$2.NgbAccordionDirective,selector:"[ngbAccordion]",inputs:["animation","closeOthers","destroyOnHide"],outputs:["show","shown","hide","hidden"],exportAs:["ngbAccordion"]},{kind:"directive",type:i1$2.NgbAccordionItem,selector:"[ngbAccordionItem]",inputs:["ngbAccordionItem","destroyOnHide","disabled","collapsed"],outputs:["show","shown","hide","hidden"],exportAs:["ngbAccordionItem"]},{kind:"directive",type:i1$2.NgbAccordionHeader,selector:"[ngbAccordionHeader]"},{kind:"component",type:i1$2.NgbAccordionBody,selector:"[ngbAccordionBody]"},{kind:"directive",type:i1$2.NgbAccordionCollapse,selector:"[ngbAccordionCollapse]",exportAs:["ngbAccordionCollapse"]},{kind:"component",type:i1$2.NgbPagination,selector:"ngb-pagination",inputs:["disabled","boundaryLinks","directionLinks","ellipses","rotate","collectionSize","maxSize","page","pageSize","size"],outputs:["pageChange"]},{kind:"component",type:ResponsiveButtonGroupComponent,selector:"responsive-button-group",inputs:["collapseSize"]},{kind:"component",type:i5.NgSelectComponent,selector:"ng-select",inputs:["placeholder","multiple","panelMaxHeight","panelMaxViewportRatio","optionHeight","virtualBuffer","overlayZIndex","autoSizePanel","panelPosition","autoCenterPanel","viewportMargin","panelWidth","panelFullscreenWidth","clearable","templateLabelFromView","searchable","searchMatchMode","defaultSearch","textWrap","compareWith","options","optionLabelKey","optionLabelFn","optionValueKey","optionDisabledKey","optionIdKey","optionGroupKey","disabled","emitOptionObject","debugLog","stickyKey","stickyAutoSave"],outputs:["change"]},{kind:"directive",type:i7.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]},{kind:"component",type:i6.RioDatePickerComponent,selector:"rio-date-picker",inputs:["enableDate","enableTime","selectionMode","firstDayOfWeek","toggleWeekFirstDay","timezone","minDate","maxDate","disabled","label","allowSeconds","minuteStep","panelWidth"],outputs:["change"]},{kind:"component",type:HtmlDiffViewerComponent,selector:"html-diff-viewer",inputs:["payloadStr"]},{kind:"pipe",type:JsonParsePipe,name:"jsonParse"},{kind:"pipe",type:i7.DatePipe,name:"date"}],changeDetection:i0.ChangeDetectionStrategy.OnPush})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:LoggerComponent,decorators:[{type:Component,args:[{selector:"resolveio-logger",providers:[ProviderService],changeDetection:ChangeDetectionStrategy.OnPush,standalone:!1,template:'<div class="row">\n\t<div class="col-lg-12">\n\t\t<div class="card">\n\t\t\t<div class="card-header"><b>Filters</b></div>\n\t\t\t<div class="card-body">\n\t\t\t\t<div class="row">\n\t\t\t\t\t<div class="col-lg-12">\n\t\t\t\t\t\t<responsive-button-group collapseSize="900">\n\t\t\t\t\t\t\t<button type="button" [ngClass]="[\'btn\', selectedTypes.includes(\'error\') && selectedTypes.includes(\'document\') && selectedTypes.includes(\'query\') && selectedTypes.includes(\'client-request\') && selectedTypes.includes(\'client-response\') ? \'btn-success\' : \'btn-warning\']" (click)="selectType(\'all\')">All</button>\n\t\t\t\t\t\t\t<button type="button" [ngClass]="[\'btn\', selectedTypes.includes(\'error\') ? \'btn-success\' : \'btn-warning\']" (click)="selectType(\'error\')">Errors</button>\n\t\t\t\t\t\t\t<button type="button" [ngClass]="[\'btn\', selectedTypes.includes(\'document\') ? \'btn-success\' : \'btn-warning\']" (click)="selectType(\'document\')">Document</button>\n\t\t\t\t\t\t\t\x3c!-- <button type="button" [ngClass]="[\'btn\', selectedTypes.includes(\'query\') ? \'btn-success\' : \'btn-warning\']" (click)="selectType(\'query\')">Query</button> --\x3e\n\t\t\t\t\t\t\t\x3c!-- <button type="button" [ngClass]="[\'btn\', selectedTypes.includes(\'queryResponse\') ? \'btn-success\' : \'btn-warning\']" (click)="selectType(\'queryResponse\')">Query Response</button> --\x3e\n\t\t\t\t\t\t\t<button type="button" [ngClass]="[\'btn\', selectedTypes.includes(\'client-request\') ? \'btn-success\' : \'btn-warning\']" (click)="selectType(\'client-request\')">Client Requests</button>\n\t\t\t\t\t\t\t<button type="button" [ngClass]="[\'btn\', selectedTypes.includes(\'client-response\') ? \'btn-success\' : \'btn-warning\']" (click)="selectType(\'client-response\')">Client Responses</button>\n\t\t\t\t\t\t\t<button type="button" [ngClass]="[\'btn\', selectedTypes.includes(\'callMethod\') ? \'btn-success\' : \'btn-warning\']" (click)="selectType(\'callMethod\')">Call Method</button>\n\t\t\t\t\t\t\t<button type="button" class="btn btn-danger" (click)="removeAllLogs()">REMOVE ALL LOGS</button>\n\t\t\t\t\t\t</responsive-button-group>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class="row" style="margin-top: 10px">\n\t\t\t\t\t<div class="col-lg-2">\n\t\t\t\t\t\t<label class="form-control-label">Client</label>\n\t\t\t\t\t\t<ng-select [(ngModel)]="client" (change)="getLogData()" placeholder="Select Client" [options]="clients" optionValueKey="name" optionLabelKey="name"></ng-select>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="col-lg-2">\n\t\t\t\t\t\t<label class="form-control-label">User</label>\n\t\t\t\t\t\t<ng-select [(ngModel)]="user" (change)="getLogData()" placeholder="Select User" [options]="users" optionValueKey="fullname" optionLabelKey="fullname"></ng-select>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="col-lg-2">\n\t\t\t\t\t\t<label class="form-control-label">Collection</label>\n\t\t\t\t\t\t<input class="form-control" [(ngModel)]="collection" (change)="getLogData()" placeholder="Input Colls Sep By , & ! for !Not" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="col-lg-2">\n\t\t\t\t\t\t<label class="form-control-label">Method</label>\n\t\t\t\t\t\t<input class="form-control" [(ngModel)]="method" (change)="getLogData()" placeholder="Input Methods Sep By , & ! for !Not" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="col-lg-2">\n\t\t\t\t\t\t<label class="form-control-label">Route</label>\n\t\t\t\t\t\t<input class="form-control" [(ngModel)]="route" (change)="getLogData()" placeholder="Input Routes Sep By , & ! for !Not" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="col-lg-2">\n\t\t\t\t\t\t<label class="form-control-label">Document</label>\n\t\t\t\t\t\t<input class="form-control" [(ngModel)]="id_document" (change)="getLogData()" placeholder="Input Ids Sep By , & ! for !Not" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class="row" style="margin-top: 10px">\n\t\t\t\t\t<div class="col-lg-2 offset-lg-4">\n\t\t\t\t\t\t<label class="form-control-label">Date/Time Start</label>\n\t\t\t\t\t\t<div class="input-group">\n\t\t\t\t\t\t\t<rio-date-picker [(ngModel)]="startDateTime" (ngModelChange)="getLogData()" selectionMode="datetime" [allowSeconds]="true"></rio-date-picker>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="col-lg-2">\n\t\t\t\t\t\t<label class="form-control-label">Date/Time End</label>\n\t\t\t\t\t\t<div class="input-group">\n\t\t\t\t\t\t\t<rio-date-picker [(ngModel)]="endDateTime" (ngModelChange)="getLogData()" selectionMode="datetime" [allowSeconds]="true"></rio-date-picker>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class="row" style="margin-top: 10px">\n\t\t\t\t\t<div ngbAccordion #acc="ngbAccordion" activeIds="">\n\t\t\t\t\t\t@for (log of logs; track log._id; let i = $index) {\n\t\t\t\t\t\t\t<div ngbAccordionItem [id]="\'log_\' + i">\n\t\t\t\t\t\t\t\t<div ngbAccordionHeader>\n\t\t\t\t\t\t\t\t\t<button ngbAccordionButton type="button">\n\t\t\t\t\t\t\t\t\t\t<label class="label-accordion" style="width: 90%; height: 22px">\n\t\t\t\t\t\t\t\t\t\t\t<strong class="float-start">Type: {{ log.type }}{{ log.method ? \' - Method: \' + log.method : \'\' }}{{ log.collection ? \' - Collection: \' + log.collection : \'\' }}{{ log.user ? \' - User: \' + log.user : \'\' }}{{ log.route ? \' - Route: \' + log.route : \'\' }}{{ log.id_document ? \' - id_document: \' + log.id_document : \'\' }}{{ log.messageId ? \' - messageId: \' + log.messageId : \'\' }}{{ log.instance ? \' - instance: \' + log.instance : \'\' }}</strong>\n\t\t\t\t\t\t\t\t\t\t\t<p class="float-end mb-0">{{ log.createdAt | date: \'medium\' }}</p>\n\t\t\t\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div ngbAccordionCollapse>\n\t\t\t\t\t\t\t\t\t<div ngbAccordionBody>\n\t\t\t\t\t\t\t\t\t\t<ng-template>\n\t\t\t\t\t\t\t\t\t\t\t@if (log.payload) {\n\t\t\t\t\t\t\t\t\t\t\t\t@if (log.method === \'replaceOne\' || log.method === \'updateOne\') {\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div ngbAccordion #acc2="ngbAccordion" activeIds="diff">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div ngbAccordionItem id="diff">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div ngbAccordionHeader>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<button ngbAccordionButton type="button">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class="label-accordion" style="width: 90%; height: 22px">Diff</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div ngbAccordionCollapse>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div ngbAccordionBody>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ng-template>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<html-diff-viewer [payloadStr]="log.payload"></html-diff-viewer>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div ngbAccordionItem id="raw">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div ngbAccordionHeader>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<button ngbAccordionButton type="button">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class="label-accordion" style="width: 90%; height: 22px">Raw</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div ngbAccordionCollapse>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div ngbAccordionBody>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ng-template>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<pre>{{ log.payload | jsonParse }}</pre>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t@if (log.method !== \'replaceOne\' && log.method !== \'updateOne\') {\n\t\t\t\t\t\t\t\t\t\t\t\t\t<pre>{{ log.payload | jsonParse }}</pre>\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t@if (!log.payload) {\n\t\t\t\t\t\t\t\t\t\t\t\tNo Data\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="row" style="margin-top: 10px">\n\t\t\t\t\t\t<div class="col-lg-4">\n\t\t\t\t\t\t\t<div class="row">\n\t\t\t\t\t\t\t\t<div class="col-lg-8">\n\t\t\t\t\t\t\t\t\t<label class="form-control-label">Entries Per Page</label>\n\t\t\t\t\t\t\t\t\t<select class="form-control" [(ngModel)]="entries_per_page" (change)="getLogData()">\n\t\t\t\t\t\t\t\t\t\t<option value="10">10</option>\n\t\t\t\t\t\t\t\t\t\t<option value="25">25</option>\n\t\t\t\t\t\t\t\t\t\t<option value="50">50</option>\n\t\t\t\t\t\t\t\t\t\t<option value="100">100</option>\n\t\t\t\t\t\t\t\t\t\t<option value="250">250</option>\n\t\t\t\t\t\t\t\t\t\t<option value="500">500</option>\n\t\t\t\t\t\t\t\t\t\t<option value="1000">1000</option>\n\t\t\t\t\t\t\t\t\t\t<option value="5000">5000</option>\n\t\t\t\t\t\t\t\t\t</select>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class="col-lg-8">\n\t\t\t\t\t\t\t<ngb-pagination class="float-end" boundaryLinks="true" [collectionSize]="log_cnt" directionLinks="true" ellipses="false" [(page)]="page_num" maxSize="6" [pageSize]="entries_per_page" rotate="true" (pageChange)="getLogData()"></ngb-pagination>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>\n'}]}],ctorParameters:()=>[{type:ProviderService},{type:DialogService},{type:i0.ChangeDetectorRef}]});class AuthGuard{_router;_auth;_ds;_account;_app;_offline;_aps;_alert;redirectUrl;constructor(t,e,n,o,r,i,a,s){this._router=t,this._auth=e,this._ds=n,this._account=o,this._app=r,this._offline=i,this._aps=a,this._alert=s}canActivate(t,e){return new Promise(t=>{this._account.isInitCompleted().then(()=>{let n=this._account.getUser();if(n||(n=this._offline.getUser(),n&&this._account.setUser(n)),n)if(n.active){let o=e.url.replace(/\/[a-f0-9]{24}$/,"").replace(/\?.+$/,""),r=o.replace(/([^\/]+\/?$)/,"");if(n.roles.super_admin)t(!0);else{let e=!1;for(;!e&&o.split("/").length>2;){if(!this.isLinkFakeRoute(o))if(n.roles.groups.some(t=>t.views.some(t=>t===o)))e=!0,t(!0);else if(n.roles.groups.some(t=>t.views.some(t=>t.startsWith(r)&&!this.doesLinkHaveParameter(t)&&!this.isLinkFakeRoute(t)))){let o=n.roles.groups.filter(t=>t.views.some(t=>t.startsWith(r)&&!this.doesLinkHaveParameter(t)&&!this.isLinkFakeRoute(t)))[0].views.filter(t=>t.startsWith(r)&&!this.doesLinkHaveParameter(t)&&!this.isLinkFakeRoute(t))[0];e=!0,this._router.navigateByUrl(o),t(!1)}r=r.replace(/([^\/]+\/?$)/,""),o=o.replace(/(\/[^\/]+$)/,"")}e||(this._router.navigateByUrl("/home"),t(!1))}}else this._router.navigateByUrl("/home"),t(!1);else navigator.onLine?this._auth.loginUser().then(o=>{this._account.isLoginCompleted().then(()=>{if(n=this._account.getUser(),n.active){let o=e.url.replace(/\/[a-f0-9]{24}$/,"").replace(/\?.+$/,""),r=o.replace(/([^\/]+\/?$)/,"");if(n.roles.super_admin)t(!0);else{let e=!1;for(;!e&&o.split("/").length>2;){if(!this.isLinkFakeRoute(o))if(n.roles.groups.some(t=>t.views.some(t=>t===o)))e=!0,t(!0);else if(n.roles.groups.some(t=>t.views.some(t=>t.startsWith(r)&&!this.doesLinkHaveParameter(t)&&!this.isLinkFakeRoute(t)))){let o=n.roles.groups.filter(t=>t.views.some(t=>t.startsWith(r)&&!this.doesLinkHaveParameter(t)&&!this.isLinkFakeRoute(t)))[0].views.filter(t=>t.startsWith(r)&&!this.doesLinkHaveParameter(t)&&!this.isLinkFakeRoute(t))[0];e=!0,this._router.navigateByUrl(o),t(!1)}r=r.replace(/([^\/]+\/?$)/,""),o=o.replace(/(\/[^\/]+$)/,"")}e||(this._router.navigateByUrl("/home"),t(!1))}}else this._router.navigateByUrl("/home"),t(!1)})},()=>{this._router.navigateByUrl("/home"),t(!1)}):t(!0)},()=>{})})}doesLinkHaveParameter(t){let e=this._aps.getAllModulePermissions();for(let n=0;n<e.length;n++){let o=e[n];for(let e=0;e<o.views.length;e++){let n=o.views[e];if(n.link===t)return!!n.has_parameter}}return!1}isLinkFakeRoute(t){let e=this._aps.getAllModulePermissions();for(let n=0;n<e.length;n++){let o=e[n];for(let e=0;e<o.views.length;e++){let n=o.views[e];if(n.link===t)return!!n.fake_route}}return!0}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:AuthGuard,deps:[{token:i1$1.Router},{token:AuthService},{token:DialogService},{token:AccountManagerService},{token:CoreService},{token:OfflineManagerService},{token:AuthPermissionService},{token:AlertService}],target:i0.ɵɵFactoryTarget.Injectable});static"ɵprov"=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:AuthGuard})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:AuthGuard,decorators:[{type:Injectable}],ctorParameters:()=>[{type:i1$1.Router},{type:AuthService},{type:DialogService},{type:AccountManagerService},{type:CoreService},{type:OfflineManagerService},{type:AuthPermissionService},{type:AlertService}]});class CanDeactivateGuard{canDeactivate(t){return!t.canDeactivate||t.canDeactivate()}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:CanDeactivateGuard,deps:[],target:i0.ɵɵFactoryTarget.Injectable});static"ɵprov"=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:CanDeactivateGuard})}function getWindow(){return window}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:CanDeactivateGuard,decorators:[{type:Injectable}]});class WindowRefService{get nativeWindow(){return getWindow()}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:WindowRefService,deps:[],target:i0.ɵɵFactoryTarget.Injectable});static"ɵprov"=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:WindowRefService})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:WindowRefService,decorators:[{type:Injectable}]});class UserRoleComponent extends BaseComponent{_services;role;constructor(t){super(t),this._services=t}userInRole(){return this._services._account.isUserInView(this.role)}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:UserRoleComponent,deps:[{token:ProviderService}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"21.0.1",type:UserRoleComponent,isStandalone:!1,selector:"user-role",inputs:{role:"role"},providers:[ProviderService],usesInheritance:!0,ngImport:i0,template:"@if (userInRole()) {<ng-content></ng-content>}",isInline:!0})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:UserRoleComponent,decorators:[{type:Component,args:[{providers:[ProviderService],selector:"user-role",template:"@if (userInRole()) {<ng-content></ng-content>}",standalone:!1}]}],ctorParameters:()=>[{type:ProviderService}],propDecorators:{role:[{type:Input}]}});class UserRoleModule{static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:UserRoleModule,deps:[],target:i0.ɵɵFactoryTarget.NgModule});static"ɵmod"=i0.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"21.0.1",ngImport:i0,type:UserRoleModule,declarations:[UserRoleComponent],imports:[CommonModule],exports:[UserRoleComponent]});static"ɵinj"=i0.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:UserRoleModule,imports:[CommonModule]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:UserRoleModule,decorators:[{type:NgModule,args:[{imports:[CommonModule],exports:[UserRoleComponent],declarations:[UserRoleComponent]}]}]});class FormButtonModule{static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:FormButtonModule,deps:[],target:i0.ɵɵFactoryTarget.NgModule});static"ɵmod"=i0.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"21.0.1",ngImport:i0,type:FormButtonModule,declarations:[FormButtonComponent],imports:[CommonModule,NgbTooltipModule],exports:[FormButtonComponent]});static"ɵinj"=i0.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:FormButtonModule,imports:[CommonModule,NgbTooltipModule]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:FormButtonModule,decorators:[{type:NgModule,args:[{imports:[CommonModule,NgbTooltipModule],exports:[FormButtonComponent],declarations:[FormButtonComponent]}]}]});class ResponsiveButtonGroupModule{static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:ResponsiveButtonGroupModule,deps:[],target:i0.ɵɵFactoryTarget.NgModule});static"ɵmod"=i0.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"21.0.1",ngImport:i0,type:ResponsiveButtonGroupModule,declarations:[ResponsiveButtonGroupComponent],imports:[CommonModule],exports:[ResponsiveButtonGroupComponent]});static"ɵinj"=i0.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:ResponsiveButtonGroupModule,imports:[CommonModule]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:ResponsiveButtonGroupModule,decorators:[{type:NgModule,args:[{imports:[CommonModule],declarations:[ResponsiveButtonGroupComponent],exports:[ResponsiveButtonGroupComponent]}]}]});class CollapseTableModule{static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:CollapseTableModule,deps:[],target:i0.ɵɵFactoryTarget.NgModule});static"ɵmod"=i0.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"21.0.1",ngImport:i0,type:CollapseTableModule,declarations:[CollapseTableComponent],imports:[FormsModule,CommonModule],exports:[CollapseTableComponent]});static"ɵinj"=i0.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:CollapseTableModule,providers:[ResizeService],imports:[FormsModule,CommonModule]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:CollapseTableModule,decorators:[{type:NgModule,args:[{imports:[FormsModule,CommonModule],exports:[CollapseTableComponent],declarations:[CollapseTableComponent],providers:[ResizeService]}]}]});class PhonePipe{transform(t){if(!t)return"";let e,n,o;switch((t=(t=(t=(t=t.replace(new RegExp("-","g"),"")).replace(new RegExp(" ","g"),"")).replace("(","")).replace(")","")).length){case 10:e=1,n=t.slice(0,3),o=t.slice(3);break;case 11:e=t[0],n=t.slice(1,4),o=t.slice(4);break;case 12:e=t.slice(0,3),n=t.slice(3,5),o=t.slice(5);break;default:return t}return 1===e&&(e=""),o=o.slice(0,3)+"-"+o.slice(3),(e+" ("+n+") "+o).trim()}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:PhonePipe,deps:[],target:i0.ɵɵFactoryTarget.Pipe});static"ɵpipe"=i0.ɵɵngDeclarePipe({minVersion:"14.0.0",version:"21.0.1",ngImport:i0,type:PhonePipe,isStandalone:!1,name:"phone"})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:PhonePipe,decorators:[{type:Pipe,args:[{name:"phone",standalone:!1}]}]});class ReversePipe{transform(t){return t.slice(0).reverse()}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:ReversePipe,deps:[],target:i0.ɵɵFactoryTarget.Pipe});static"ɵpipe"=i0.ɵɵngDeclarePipe({minVersion:"14.0.0",version:"21.0.1",ngImport:i0,type:ReversePipe,isStandalone:!1,name:"reverse"})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:ReversePipe,decorators:[{type:Pipe,args:[{name:"reverse",standalone:!1}]}]});class MinusCurrencyPipe{transform(t,e){return"-"===t.charAt(0)?"("+t.substring(1,t.length)+")":t}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:MinusCurrencyPipe,deps:[],target:i0.ɵɵFactoryTarget.Pipe});static"ɵpipe"=i0.ɵɵngDeclarePipe({minVersion:"14.0.0",version:"21.0.1",ngImport:i0,type:MinusCurrencyPipe,isStandalone:!1,name:"minusCurrency"})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:MinusCurrencyPipe,decorators:[{type:Pipe,args:[{name:"minusCurrency",standalone:!1}]}]});class DomSanitizorPipe{_sanitizer;constructor(t){this._sanitizer=t}transform(t,e="html"){switch(e){case"html":return this._sanitizer.bypassSecurityTrustHtml(t);case"style":return this._sanitizer.bypassSecurityTrustStyle(t);case"script":return this._sanitizer.bypassSecurityTrustScript(t);case"url":return this._sanitizer.bypassSecurityTrustUrl(t);case"resourceUrl":return this._sanitizer.bypassSecurityTrustResourceUrl(t);default:throw new Error(`Invalid safe type specified: ${e}`)}}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DomSanitizorPipe,deps:[{token:i1$4.DomSanitizer}],target:i0.ɵɵFactoryTarget.Pipe});static"ɵpipe"=i0.ɵɵngDeclarePipe({minVersion:"14.0.0",version:"21.0.1",ngImport:i0,type:DomSanitizorPipe,isStandalone:!1,name:"safe"})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DomSanitizorPipe,decorators:[{type:Pipe,args:[{name:"safe",standalone:!1}]}],ctorParameters:()=>[{type:i1$4.DomSanitizer}]});class TitleCaseAndUnderscorePipe{transform(t){let e=t.replace("_"," ").toLowerCase().split(" ");for(let t=0;t<e.length;t++)e[t]=e[t].charAt(0).toUpperCase()+e[t].slice(1);return e.join(" ")}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:TitleCaseAndUnderscorePipe,deps:[],target:i0.ɵɵFactoryTarget.Pipe});static"ɵpipe"=i0.ɵɵngDeclarePipe({minVersion:"14.0.0",version:"21.0.1",ngImport:i0,type:TitleCaseAndUnderscorePipe,isStandalone:!1,name:"titleCase",pure:!1})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:TitleCaseAndUnderscorePipe,decorators:[{type:Pipe,args:[{name:"titleCase",pure:!1,standalone:!1}]}]});class PipeModule{static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:PipeModule,deps:[],target:i0.ɵɵFactoryTarget.NgModule});static"ɵmod"=i0.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"21.0.1",ngImport:i0,type:PipeModule,declarations:[FilterEqualPipe,FilterNotEqualPipe,PhonePipe,ReversePipe,MinusCurrencyPipe,DomSanitizorPipe,TitleCaseAndUnderscorePipe,JsonParsePipe],exports:[FilterEqualPipe,FilterNotEqualPipe,PhonePipe,ReversePipe,MinusCurrencyPipe,DomSanitizorPipe,TitleCaseAndUnderscorePipe,JsonParsePipe]});static"ɵinj"=i0.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:PipeModule})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:PipeModule,decorators:[{type:NgModule,args:[{declarations:[FilterEqualPipe,FilterNotEqualPipe,PhonePipe,ReversePipe,MinusCurrencyPipe,DomSanitizorPipe,TitleCaseAndUnderscorePipe,JsonParsePipe],exports:[FilterEqualPipe,FilterNotEqualPipe,PhonePipe,ReversePipe,MinusCurrencyPipe,DomSanitizorPipe,TitleCaseAndUnderscorePipe,JsonParsePipe]}]}]});class SortTableDirective{element;sortables=new Map;_stateChanges=new Subject;active;start=1;disabled=!1;tableFixed=!1;headerFixed=!1;secondaryColor=!1;tertiaryColor=!1;get direction(){return this._direction}set direction(t){if(t&&-1!==t&&1!==t)throw Error(t+" is not a valid sort direction (0 or 1).");this._direction=t}_direction=0;_data=new BehaviorSubject([]);sortChange=new EventEmitter;constructor(t){this.element=t}register(t){if(!t.id)throw Error("CTSortHeader must be provided with a unique id");if(this.sortables.has(t.id))throw Error("Cannot have two CTSortables with the same id "+t.id);this.sortables.set(t.id,t)}deregister(t){this.sortables.delete(t.id)}sort(t){if(this.active!=t.id?(this.active=t.id,this.direction=t.start?t.start:this.start):this.direction*=-1,this.sortChange.emit({active:this.active,direction:this.direction}),this._data.value.length){let e=null;for(let n=0;n<this._data.value.length;n++)if(t.id.split(".").reduce((t,e)=>t[e],this._data.value[n])){e=t.id.split(".").reduce((t,e)=>t[e],this._data.value[n]);break}if(null!=e)if("string"==typeof e){let e=new RegExp(/^[\d.,$]+$/);this._data.value.filter(e=>t.id.split(".").reduce((t,e)=>t[e],e)).some(n=>!e.test(t.id.split(".").reduce((t,e)=>t[e],n)))?1===this.direction?this._data.next(this._data.value.sort((e,n)=>(t.id.split(".").reduce((t,e)=>t[e],e)||"zzzzzz").localeCompare(t.id.split(".").reduce((t,e)=>t[e],n)||"zzzzzz"))):this._data.next(this._data.value.sort((e,n)=>(t.id.split(".").reduce((t,e)=>t[e],n)||"AAAAAAA").localeCompare(t.id.split(".").reduce((t,e)=>t[e],e)||"AAAAAAA"))):1===this.direction?this._data.next(this._data.value.sort((e,n)=>(null!==t.id.split(".").reduce((t,e)=>t[e],e)?parseFloat(t.id.split(".").reduce((t,e)=>t[e],e).replace(/\$/g,"").replace(",","")):999999999999)-(null!==t.id.split(".").reduce((t,e)=>t[e],n)?parseFloat(t.id.split(".").reduce((t,e)=>t[e],n).replace(/\$/g,"").replace(",","")):999999999999))):this._data.next(this._data.value.sort((e,n)=>(null!==t.id.split(".").reduce((t,e)=>t[e],n)?parseFloat(t.id.split(".").reduce((t,e)=>t[e],n).replace(/\$/g,"").replace(",","")):-999999999999)-(null!==t.id.split(".").reduce((t,e)=>t[e],e)?parseFloat(t.id.split(".").reduce((t,e)=>t[e],e).replace(/\$/g,"").replace(",","")):-999999999999)))}else"number"==typeof e?1===this.direction?this._data.next(this._data.value.sort((e,n)=>(null!==t.id.split(".").reduce((t,e)=>t[e],e)?t.id.split(".").reduce((t,e)=>t[e],e):999999999999)-(null!==t.id.split(".").reduce((t,e)=>t[e],n)?t.id.split(".").reduce((t,e)=>t[e],n):999999999999))):this._data.next(this._data.value.sort((e,n)=>(null!==t.id.split(".").reduce((t,e)=>t[e],n)?t.id.split(".").reduce((t,e)=>t[e],n):-999999999999)-(null!==t.id.split(".").reduce((t,e)=>t[e],e)?t.id.split(".").reduce((t,e)=>t[e],e):-999999999999))):e instanceof Date?1===this.direction?this._data.next(this._data.value.sort((e,n)=>(t.id.split(".").reduce((t,e)=>t[e],e)?t.id.split(".").reduce((t,e)=>t[e],e).getTime():0)-(t.id.split(".").reduce((t,e)=>t[e],n)?t.id.split(".").reduce((t,e)=>t[e],n).getTime():0))):this._data.next(this._data.value.sort((e,n)=>(t.id.split(".").reduce((t,e)=>t[e],n)?t.id.split(".").reduce((t,e)=>t[e],n).getTime():0)-(t.id.split(".").reduce((t,e)=>t[e],e)?t.id.split(".").reduce((t,e)=>t[e],e).getTime():0))):"boolean"==typeof e?this._data.next(this._data.value.sort((e,n)=>t.id.split(".").reduce((t,e)=>t[e],e)===t.id.split(".").reduce((t,e)=>t[e],n)?0:t.id.split(".").reduce((t,e)=>t[e],e)?1===this.direction?-1:1:1===this.direction?1:-1)):this._data.next(this._data.value.sort((e,n)=>t.id.split(".").reduce((t,e)=>t[e],e)===t.id.split(".").reduce((t,e)=>t[e],n)?0:t.id.split(".").reduce((t,e)=>t[e],e)>t.id.split(".").reduce((t,e)=>t[e],n)?-1:1))}}getData(){return this._data.asObservable()}setData(t){this._data.next(t)}ngOnInit(){}ngOnChanges(){this._stateChanges.next()}ngOnDestroy(){this._stateChanges.complete()}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SortTableDirective,deps:[{token:i0.ElementRef}],target:i0.ɵɵFactoryTarget.Directive});static"ɵdir"=i0.ɵɵngDeclareDirective({minVersion:"14.0.0",version:"21.0.1",type:SortTableDirective,isStandalone:!1,selector:"[sortable]",inputs:{active:["sortActive","active"],start:["sortStart","start"],disabled:["sortDisabled","disabled"],tableFixed:"tableFixed",headerFixed:"headerFixed",secondaryColor:"secondaryColor",tertiaryColor:"tertiaryColor"},outputs:{sortChange:"sortChange"},usesOnChanges:!0,ngImport:i0})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SortTableDirective,decorators:[{type:Directive,args:[{selector:"[sortable]",standalone:!1}]}],ctorParameters:()=>[{type:i0.ElementRef}],propDecorators:{active:[{type:Input,args:["sortActive"]}],start:[{type:Input,args:["sortStart"]}],disabled:[{type:Input,args:["sortDisabled"]}],tableFixed:[{type:Input}],headerFixed:[{type:Input}],secondaryColor:[{type:Input}],tertiaryColor:[{type:Input}],sortChange:[{type:Output,args:["sortChange"]}]}});class SortTableHeaderComponent{_sort;_arrowDirection=0;id;arrowPosition="after";start;_rerenderSubscription;disabled;constructor(t,e){if(this._sort=e,!e)throw Error("SortTableSortHeader must be placed within a parent element with the CTSortable directive.");this._rerenderSubscription=merge(e.sortChange,e._stateChanges).subscribe(()=>{this._isSorted()&&this._updateArrowDirection(),t.markForCheck()})}ngOnInit(){this._sort.register(this)}ngOnDestroy(){this._sort.deregister(this),this._rerenderSubscription.unsubscribe()}_isSorted(){return this._sort.active===this.id}_getSortDirection(){return this._sort.direction}_updateArrowDirection(){this._arrowDirection=this._isSorted()?this._sort.direction:this.start||this._sort.start}_isDisabled(){return this._sort.disabled||this.disabled}onClick(t){this._isDisabled()||this._sort.sort(this)}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SortTableHeaderComponent,deps:[{token:i0.ChangeDetectorRef},{token:SortTableDirective,optional:!0}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"21.0.1",type:SortTableHeaderComponent,isStandalone:!1,selector:"[sort-table-header]",inputs:{disabled:"disabled",id:["sort-table-header","id"],arrowPosition:"arrowPosition",start:"start"},ngImport:i0,template:'<div (click)="onClick($event)">\n\t<ng-content></ng-content>\n\t@if (_isSorted() && _getSortDirection() === -1) {\n\t\t<i class="fa fa-arrow-down" style="margin-left: 10px; font-size: 14px"></i>\n\t}\n\t@if (_isSorted() && _getSortDirection() === 1) {\n\t\t<i class="fa fa-arrow-up" style="margin-left: 10px; font-size: 14px"></i>\n\t}\n</div>\n',changeDetection:i0.ChangeDetectionStrategy.OnPush,encapsulation:i0.ViewEncapsulation.None})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SortTableHeaderComponent,decorators:[{type:Component,args:[{selector:"[sort-table-header]",encapsulation:ViewEncapsulation.None,changeDetection:ChangeDetectionStrategy.OnPush,inputs:["disabled"],standalone:!1,template:'<div (click)="onClick($event)">\n\t<ng-content></ng-content>\n\t@if (_isSorted() && _getSortDirection() === -1) {\n\t\t<i class="fa fa-arrow-down" style="margin-left: 10px; font-size: 14px"></i>\n\t}\n\t@if (_isSorted() && _getSortDirection() === 1) {\n\t\t<i class="fa fa-arrow-up" style="margin-left: 10px; font-size: 14px"></i>\n\t}\n</div>\n'}]}],ctorParameters:()=>[{type:i0.ChangeDetectorRef},{type:SortTableDirective,decorators:[{type:Optional}]}],propDecorators:{id:[{type:Input,args:["sort-table-header"]}],arrowPosition:[{type:Input}],start:[{type:Input}],disabled:[{type:Input}]}});class SortTableNgForComponent{_sort;data=[];dataChanged=new EventEmitter;sortSub$=null;sortedData=[];constructor(t){if(this._sort=t,!t)throw Error("SortTableNgFor must be placed within a parent element with the CTSortable directive.")}ngOnInit(){this.sortSub$=this._sort.getData().subscribe(t=>{this.sortedData=t,this.dataChanged.emit(this.sortedData)})}ngOnChanges(){this._sort.setData(this.data)}ngOnDestroy(){this.sortSub$.unsubscribe()}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SortTableNgForComponent,deps:[{token:SortTableDirective,optional:!0}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"21.0.1",type:SortTableNgForComponent,isStandalone:!1,selector:"[sort-table-ngfor]",inputs:{data:["sort-table-ngfor","data"]},outputs:{dataChanged:"dataChanged"},usesOnChanges:!0,ngImport:i0,template:"<ng-content></ng-content>",isInline:!0})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SortTableNgForComponent,decorators:[{type:Component,args:[{selector:"[sort-table-ngfor]",template:"<ng-content></ng-content>",standalone:!1}]}],ctorParameters:()=>[{type:SortTableDirective,decorators:[{type:Optional}]}],propDecorators:{data:[{type:Input,args:["sort-table-ngfor"]}],dataChanged:[{type:Output}]}});class SortTableModule{static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SortTableModule,deps:[],target:i0.ɵɵFactoryTarget.NgModule});static"ɵmod"=i0.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"21.0.1",ngImport:i0,type:SortTableModule,declarations:[SortTableDirective,SortTableHeaderComponent,SortTableNgForComponent],imports:[FormsModule,CommonModule],exports:[SortTableDirective,SortTableHeaderComponent,SortTableNgForComponent]});static"ɵinj"=i0.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SortTableModule,imports:[FormsModule,CommonModule]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SortTableModule,decorators:[{type:NgModule,args:[{imports:[FormsModule,CommonModule],exports:[SortTableDirective,SortTableHeaderComponent,SortTableNgForComponent],declarations:[SortTableDirective,SortTableHeaderComponent,SortTableNgForComponent]}]}]});class Sortable{container;options;dragItem;startIndex;listeners=[];direction;swapThreshold;constructor(t,e={}){this.container=t,this.options=e,this.direction=this.resolveDirection(),this.swapThreshold=this.resolveSwapThreshold(),this.bindListeners(),this.ensureDraggable()}static create(t,e={}){return new Sortable(t,e)}destroy(){this.listeners.forEach(t=>t()),this.listeners=[],this.dragItem=void 0,this.startIndex=void 0}bindListeners(){const t=(t,e)=>{this.container.addEventListener(t,e),this.listeners.push(()=>this.container.removeEventListener(t,e))};t("dragstart",this.handleDragStart),t("dragover",this.handleDragOver),t("drop",this.handleDrop),t("dragend",this.handleDragEnd)}handleDragStart=t=>{const e=this.getSortableElement(t.target);if(e&&this.hasValidHandle(t.target,e)&&(this.ensureDraggable(),this.dragItem=e,this.startIndex=this.getElementIndex(e),t.dataTransfer)){t.dataTransfer.effectAllowed="move";try{t.dataTransfer.setData("text/plain","")}catch{}}};handleDragOver=t=>{if(!this.dragItem)return;const e=this.getSortableElement(t.target);if(!e||e===this.dragItem)return;t.preventDefault();const n=e.getBoundingClientRect(),o=("horizontal"===this.direction?t.clientX-n.left>n.width*this.swapThreshold:t.clientY-n.top>n.height*this.swapThreshold)?e.nextElementSibling:e;o!==this.dragItem&&this.container.insertBefore(this.dragItem,o)};handleDrop=t=>{this.dragItem&&(t.preventDefault(),this.finish(t))};handleDragEnd=t=>{this.dragItem&&(t.preventDefault(),this.finish(t))};finish(t){if(!this.dragItem)return;const e=this.getElementIndex(this.dragItem),n={oldIndex:this.startIndex,newIndex:e,item:this.dragItem,from:this.container,to:this.container};this.options.onEnd&&this.options.onEnd(n),this.options.onUpdate&&void 0!==this.startIndex&&e!==this.startIndex&&this.options.onUpdate(n),this.dragItem=void 0,this.startIndex=void 0}ensureDraggable(){this.getItems().forEach(t=>{t.getAttribute("draggable")||t.setAttribute("draggable","true")})}getItems(){return(this.options.draggable?Array.from(this.container.querySelectorAll(this.options.draggable)):Array.from(this.container.children)).filter(t=>t.parentElement===this.container)}getSortableElement(t){if(!t)return null;let e=t;for(;e&&e!==this.container;){if(this.isSortableItem(e))return e;e=e.parentElement}return null}isSortableItem(t){return this.options.draggable?t.matches(this.options.draggable)&&t.parentElement===this.container:t.parentElement===this.container}hasValidHandle(t,e){if(!this.options.handle||!t)return!0;const n=t.closest(this.options.handle);return!!n&&e.contains(n)}getElementIndex(t){return this.getItems().indexOf(t)}resolveDirection(){if("horizontal"===this.options.direction||"vertical"===this.options.direction)return this.options.direction;const t=this.container.tagName.toLowerCase();if("tr"===t)return"horizontal";if("tbody"===t||"ul"===t||"ol"===t)return"vertical";const e=window.getComputedStyle(this.container),n="flex"===e.display&&e.flexDirection.startsWith("row"),o="grid"===e.display&&e.gridAutoFlow.includes("column");return n||o?"horizontal":"vertical"}resolveSwapThreshold(){const t="number"==typeof this.options.swapThreshold?this.options.swapThreshold:.45;return t>0&&t<1?t:.45}}const SORTABLEJS_DEFAULT_OPTIONS=new InjectionToken("SORTABLEJS_DEFAULT_OPTIONS");class SortablejsDirective{_el;defaultOptions;items;options;sortableInstance;constructor(t,e){this._el=t,this.defaultOptions=e}ngOnInit(){const t={animation:150,onEnd:t=>{this.updateOrder(t),this.options&&"function"==typeof this.options.onEnd&&this.options.onEnd(t),this.options&&"function"==typeof this.options.onUpdate&&t.oldIndex!==t.newIndex&&this.options.onUpdate(t)}},e=Object.assign({},t,this.defaultOptions||{},this.options||{});this.sortableInstance=Sortable.create(this._el.nativeElement,e)}ngOnDestroy(){this.sortableInstance&&this.sortableInstance.destroy()}updateOrder(t){if(this.items&&void 0!==t.oldIndex&&void 0!==t.newIndex&&t.oldIndex!==t.newIndex)if(this.isFormArray(this.items)){const e=this.items.at(t.oldIndex);this.items.removeAt(t.oldIndex),this.items.insert(t.newIndex,e)}else if(Array.isArray(this.items)){const e=this.items.splice(t.oldIndex,1)[0];this.items.splice(t.newIndex,0,e)}}isFormArray(t){return t&&"function"==typeof t.at&&"function"==typeof t.removeAt&&"function"==typeof t.insert}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SortablejsDirective,deps:[{token:i0.ElementRef},{token:SORTABLEJS_DEFAULT_OPTIONS,optional:!0}],target:i0.ɵɵFactoryTarget.Directive});static"ɵdir"=i0.ɵɵngDeclareDirective({minVersion:"14.0.0",version:"21.0.1",type:SortablejsDirective,isStandalone:!1,selector:"[sortablejs]",inputs:{items:["sortablejs","items"],options:["sortablejsOptions","options"]},ngImport:i0})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SortablejsDirective,decorators:[{type:Directive,args:[{selector:"[sortablejs]",standalone:!1}]}],ctorParameters:()=>[{type:i0.ElementRef},{type:void 0,decorators:[{type:Optional},{type:Inject,args:[SORTABLEJS_DEFAULT_OPTIONS]}]}],propDecorators:{items:[{type:Input,args:["sortablejs"]}],options:[{type:Input,args:["sortablejsOptions"]}]}});class SortablejsModule{static forRoot(t){return{ngModule:SortablejsModule,providers:t?[{provide:SORTABLEJS_DEFAULT_OPTIONS,useValue:t}]:[]}}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SortablejsModule,deps:[],target:i0.ɵɵFactoryTarget.NgModule});static"ɵmod"=i0.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"21.0.1",ngImport:i0,type:SortablejsModule,declarations:[SortablejsDirective],exports:[SortablejsDirective]});static"ɵinj"=i0.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SortablejsModule})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SortablejsModule,decorators:[{type:NgModule,args:[{declarations:[SortablejsDirective],exports:[SortablejsDirective]}]}]});class NgDragDropService{dragData;dragEffect=null;scope=null;onDragStart=new Subject;onDragEnd=new Subject;static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:NgDragDropService,deps:[],target:i0.ɵɵFactoryTarget.Injectable});static"ɵprov"=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:NgDragDropService,providedIn:"root"})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:NgDragDropService,decorators:[{type:Injectable,args:[{providedIn:"root"}]}]});class DomHelper{static addClass(t,e){const n=this.resolveElement(t);n&&(n.classList.contains(e)||n.classList.add(e))}static removeClass(t,e){const n=this.resolveElement(t);n&&n.classList.remove(e)}static matches(t,e){if(!t)return!1;const n=t.matches||t.msMatchesSelector||t.mozMatchesSelector||t.webkitMatchesSelector;return!!n&&n.call(t,e)}static resolveElement(t){return t?t.nativeElement?t.nativeElement:t:null}}class Draggable{el;renderer;ng2DragDropService;zone;dragData;dragHandle;dragEffect="move";dragScope="default";dragHandleClass="drag-handle";dragClass="drag-border";dragTransitClass="drag-transit";onDragStart=new EventEmitter;onDrag=new EventEmitter;onDragEnd=new EventEmitter;mouseDownElement;_dragEnabled=!0;_dragImage;dragImageElement;unbindDragListener;constructor(t,e,n,o){this.el=t,this.renderer=e,this.ng2DragDropService=n,this.zone=o}get dragEnabled(){return this._dragEnabled}set dragEnabled(t){this._dragEnabled=t,this.applyDragHandleClass()}get dragImage(){return this._dragImage}set dragImage(t){this._dragImage=t,this.dragImageElement=new Image,this.dragImageElement.src=this._dragImage}ngOnInit(){this.applyDragHandleClass()}ngOnDestroy(){this.unbindDragListeners()}dragStart(t){if(this.allowDrag()){DomHelper.addClass(this.el,this.dragTransitClass),setTimeout(()=>{DomHelper.addClass(this.el,this.dragClass),DomHelper.removeClass(this.el,this.dragTransitClass)},10),this.ng2DragDropService.dragData=this.dragData,this.ng2DragDropService.scope=this.dragScope,this.ng2DragDropService.dragEffect=this.dragEffect;const e=this.getDragHandleElement();e&&this.updateCursor(e,"grabbing"),null!=t.dataTransfer&&(t.dataTransfer.effectAllowed=this.dragEffect,t.dataTransfer.dropEffect=this.dragEffect,t.dataTransfer.setData("text","")),this.dragImage&&t.dataTransfer&&t.dataTransfer.setDragImage(this.dragImageElement,0,0),t.stopPropagation(),this.onDragStart.emit(t),this.ng2DragDropService.onDragStart.next(),this.zone.runOutsideAngular(()=>{this.unbindDragListener=this.renderer.listen(this.el.nativeElement,"drag",t=>{this.drag(t)})})}else t.preventDefault()}drag(t){this.onDrag.emit(t)}dragEnd(t){this.unbindDragListeners(),DomHelper.removeClass(this.el,this.dragClass),this.ng2DragDropService.dragData=null,this.ng2DragDropService.dragEffect=null,this.ng2DragDropService.scope=null;const e=this.getDragHandleElement();e&&this.updateCursor(e,this.dragEnabled?"grab":null),this.ng2DragDropService.onDragEnd.next(),this.onDragEnd.emit(t),t.stopPropagation(),t.preventDefault()}mousedown(t){this.mouseDownElement=t.target}allowDrag(){return this.dragHandle?DomHelper.matches(this.mouseDownElement,this.dragHandle)&&this.dragEnabled:this.dragEnabled}applyDragHandleClass(){const t=this.getDragHandleElement();t&&(this.dragEnabled?DomHelper.addClass(t,this.dragHandleClass):DomHelper.removeClass(t,this.dragHandleClass),this.updateCursor(t,this.dragEnabled?"grab":null))}getDragHandleElement(){let t=this.el.nativeElement;return this.dragHandle&&(t=this.el.nativeElement.querySelector(this.dragHandle)),t}unbindDragListeners(){this.unbindDragListener&&this.unbindDragListener()}updateCursor(t,e){e?this.renderer.setStyle(t,"cursor",e):this.renderer.removeStyle(t,"cursor")}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:Draggable,deps:[{token:i0.ElementRef},{token:i0.Renderer2},{token:NgDragDropService},{token:i0.NgZone}],target:i0.ɵɵFactoryTarget.Directive});static"ɵdir"=i0.ɵɵngDeclareDirective({minVersion:"14.0.0",version:"21.0.1",type:Draggable,isStandalone:!1,selector:"[draggable]",inputs:{dragData:"dragData",dragHandle:"dragHandle",dragEffect:"dragEffect",dragScope:"dragScope",dragHandleClass:"dragHandleClass",dragClass:"dragClass",dragTransitClass:"dragTransitClass",dragEnabled:"dragEnabled",dragImage:"dragImage"},outputs:{onDragStart:"onDragStart",onDrag:"onDrag",onDragEnd:"onDragEnd"},host:{listeners:{dragstart:"dragStart($event)",dragend:"dragEnd($event)",mousedown:"mousedown($event)",touchstart:"mousedown($event)"},properties:{draggable:"this.dragEnabled"}},ngImport:i0})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:Draggable,decorators:[{type:Directive,args:[{selector:"[draggable]",standalone:!1}]}],ctorParameters:()=>[{type:i0.ElementRef},{type:i0.Renderer2},{type:NgDragDropService},{type:i0.NgZone}],propDecorators:{dragData:[{type:Input}],dragHandle:[{type:Input}],dragEffect:[{type:Input}],dragScope:[{type:Input}],dragHandleClass:[{type:Input}],dragClass:[{type:Input}],dragTransitClass:[{type:Input}],onDragStart:[{type:Output}],onDrag:[{type:Output}],onDragEnd:[{type:Output}],dragEnabled:[{type:Input},{type:HostBinding,args:["draggable"]}],dragImage:[{type:Input}],dragStart:[{type:HostListener,args:["dragstart",["$event"]]}],dragEnd:[{type:HostListener,args:["dragend",["$event"]]}],mousedown:[{type:HostListener,args:["mousedown",["$event"]]},{type:HostListener,args:["touchstart",["$event"]]}]}});class DropEvent{nativeEvent;dragData;constructor(t,e){this.nativeEvent=t,this.dragData=e}}class Droppable{el;renderer;ng2DragDropService;zone;onDragEnter=new EventEmitter;onDragOver=new EventEmitter;onDragLeave=new EventEmitter;onDrop=new EventEmitter;dragOverClass="drag-over-border";dragHintClass="drag-hint-border";dropScope="default";_dropEnabled=!0;_isDragActive=!1;_isServiceActive=!1;dragStartSubscription;dragEndSubscription;unbindDragEnterListener;unbindDragOverListener;unbindDragLeaveListener;constructor(t,e,n,o){this.el=t,this.renderer=e,this.ng2DragDropService=n,this.zone=o}get dropEnabled(){return this._dropEnabled}set dropEnabled(t){this._dropEnabled=t,!0===this._dropEnabled?this.subscribeService():this.unsubscribeService()}ngOnInit(){!0===this.dropEnabled&&this.subscribeService()}ngOnDestroy(){this.unsubscribeService(),this.unbindDragListeners()}drop(t){this.allowDrop().subscribe(e=>{e&&this._isDragActive&&(DomHelper.removeClass(this.el,this.dragOverClass),t.preventDefault(),t.stopPropagation(),this.ng2DragDropService.onDragEnd.next(),this.onDrop.emit(new DropEvent(t,this.ng2DragDropService.dragData)),this.ng2DragDropService.dragData=null,this.ng2DragDropService.dragEffect=null,this.ng2DragDropService.scope=null)})}dragEnter(t){t.preventDefault(),t.stopPropagation(),this.onDragEnter.emit(t)}dragOver(t,e){if(e){if(DomHelper.addClass(this.el,this.dragOverClass),t.dataTransfer){const e=this.ng2DragDropService.dragEffect??"move";t.dataTransfer.dropEffect=e}t.preventDefault(),this.onDragOver.emit(t)}}dragLeave(t){DomHelper.removeClass(this.el,this.dragOverClass),t.preventDefault(),this.onDragLeave.emit(t)}allowDrop(){let t=!1;if("string"==typeof this.dropScope)"string"==typeof this.ng2DragDropService.scope?t=this.ng2DragDropService.scope===this.dropScope:this.ng2DragDropService.scope instanceof Array&&(t=this.ng2DragDropService.scope.indexOf(this.dropScope)>-1);else if(this.dropScope instanceof Array)"string"==typeof this.ng2DragDropService.scope?t=this.dropScope.indexOf(this.ng2DragDropService.scope)>-1:this.ng2DragDropService.scope instanceof Array&&(t=this.dropScope.filter(t=>-1!==this.ng2DragDropService.scope.indexOf(t)).length>0);else if("function"==typeof this.dropScope&&(t=this.dropScope(this.ng2DragDropService.dragData),t instanceof Observable))return t.pipe(map(t=>t&&this.dropEnabled));return of(t&&this.dropEnabled)}subscribeService(){!0!==this._isServiceActive&&(this._isServiceActive=!0,this.dragStartSubscription=this.ng2DragDropService.onDragStart.subscribe(()=>{this._isDragActive=!0,this.allowDrop().subscribe(t=>{t&&this._isDragActive&&(DomHelper.addClass(this.el,this.dragHintClass),this.zone.runOutsideAngular(()=>{this.unbindDragEnterListener=this.renderer.listen(this.el.nativeElement,"dragenter",t=>{this.dragEnter(t)}),this.unbindDragOverListener=this.renderer.listen(this.el.nativeElement,"dragover",e=>{this.dragOver(e,t)}),this.unbindDragLeaveListener=this.renderer.listen(this.el.nativeElement,"dragleave",t=>{this.dragLeave(t)})}))})}),this.dragEndSubscription=this.ng2DragDropService.onDragEnd.subscribe(()=>{this._isDragActive=!1,DomHelper.removeClass(this.el,this.dragHintClass),this.unbindDragListeners()}))}unsubscribeService(){this._isServiceActive=!1,this.dragStartSubscription&&this.dragStartSubscription.unsubscribe(),this.dragEndSubscription&&this.dragEndSubscription.unsubscribe()}unbindDragListeners(){this.unbindDragEnterListener&&this.unbindDragEnterListener(),this.unbindDragOverListener&&this.unbindDragOverListener(),this.unbindDragLeaveListener&&this.unbindDragLeaveListener()}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:Droppable,deps:[{token:i0.ElementRef},{token:i0.Renderer2},{token:NgDragDropService},{token:i0.NgZone}],target:i0.ɵɵFactoryTarget.Directive});static"ɵdir"=i0.ɵɵngDeclareDirective({minVersion:"14.0.0",version:"21.0.1",type:Droppable,isStandalone:!1,selector:"[droppable]",inputs:{dragOverClass:"dragOverClass",dragHintClass:"dragHintClass",dropScope:"dropScope",dropEnabled:"dropEnabled"},outputs:{onDragEnter:"onDragEnter",onDragOver:"onDragOver",onDragLeave:"onDragLeave",onDrop:"onDrop"},host:{listeners:{drop:"drop($event)"}},ngImport:i0})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:Droppable,decorators:[{type:Directive,args:[{selector:"[droppable]",standalone:!1}]}],ctorParameters:()=>[{type:i0.ElementRef},{type:i0.Renderer2},{type:NgDragDropService},{type:i0.NgZone}],propDecorators:{onDragEnter:[{type:Output}],onDragOver:[{type:Output}],onDragLeave:[{type:Output}],onDrop:[{type:Output}],dragOverClass:[{type:Input}],dragHintClass:[{type:Input}],dropScope:[{type:Input}],dropEnabled:[{type:Input}],drop:[{type:HostListener,args:["drop",["$event"]]}]}});class NgDragDropModule{static forRoot(){return{ngModule:NgDragDropModule,providers:[NgDragDropService]}}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:NgDragDropModule,deps:[],target:i0.ɵɵFactoryTarget.NgModule});static"ɵmod"=i0.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"21.0.1",ngImport:i0,type:NgDragDropModule,declarations:[Draggable,Droppable],exports:[Draggable,Droppable]});static"ɵinj"=i0.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:NgDragDropModule})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:NgDragDropModule,decorators:[{type:NgModule,args:[{declarations:[Draggable,Droppable],exports:[Draggable,Droppable]}]}]});class SharedModule{static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SharedModule,deps:[],target:i0.ɵɵFactoryTarget.NgModule});static"ɵmod"=i0.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"21.0.1",ngImport:i0,type:SharedModule,imports:[ReactiveFormsModule,FormsModule,CollapseTableModule,RouterModule,NgbModule,NgbAccordionModule,FormButtonModule,ResponsiveButtonGroupModule,PipeModule,UserRoleModule,NgSelectModule,SortTableModule,CommonModule,SortablejsModule,NgDragDropModule,RioDatePickerModule],exports:[ReactiveFormsModule,FormsModule,CollapseTableModule,RouterModule,NgbModule,NgbAccordionModule,FormButtonModule,ResponsiveButtonGroupModule,PipeModule,UserRoleModule,NgSelectModule,SortTableModule,CommonModule,SortablejsModule,NgDragDropModule,RioDatePickerModule]});static"ɵinj"=i0.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SharedModule,imports:[ReactiveFormsModule,FormsModule,CollapseTableModule,RouterModule,NgbModule,NgbAccordionModule,FormButtonModule,ResponsiveButtonGroupModule,PipeModule,UserRoleModule,NgSelectModule,SortTableModule,CommonModule,SortablejsModule,NgDragDropModule,RioDatePickerModule,ReactiveFormsModule,FormsModule,CollapseTableModule,RouterModule,NgbModule,NgbAccordionModule,FormButtonModule,ResponsiveButtonGroupModule,PipeModule,UserRoleModule,NgSelectModule,SortTableModule,CommonModule,SortablejsModule,NgDragDropModule,RioDatePickerModule]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SharedModule,decorators:[{type:NgModule,args:[{imports:[ReactiveFormsModule,FormsModule,CollapseTableModule,RouterModule,NgbModule,NgbAccordionModule,FormButtonModule,ResponsiveButtonGroupModule,PipeModule,UserRoleModule,NgSelectModule,SortTableModule,CommonModule,SortablejsModule,NgDragDropModule,RioDatePickerModule],exports:[ReactiveFormsModule,FormsModule,CollapseTableModule,RouterModule,NgbModule,NgbAccordionModule,FormButtonModule,ResponsiveButtonGroupModule,PipeModule,UserRoleModule,NgSelectModule,SortTableModule,CommonModule,SortablejsModule,NgDragDropModule,RioDatePickerModule]}]}]});class ForgotPasswordComponent extends BaseComponent{_route;_services;_http;_ds;serverURL="";form;user;subscription$=[];token;disableFormButton=!1;constructor(t,e,n,o){super(e),this._route=t,this._services=e,this._http=n,this._ds=o}ngOnInit(){2!==this._route.snapshot.queryParamMap.keys.length?(this._ds.error("Invalid params"),this._services._router.navigateByUrl("/home")):(this.serverURL=this._route.snapshot.queryParamMap.keys[0],this.token=this._route.snapshot.queryParamMap.keys[1]),this.form=this._services._fb.group({password:["",[Validators.compose([Validators.required,Validators.minLength(6)])]],confirm_password:["",[Validators.compose([Validators.required,Validators.minLength(6)])]]},{validator:this._services._vs.matchPassword}),this._http.post(this.serverURL+"/userWithForgotPasswordToken",{forgotPasswordToken:this.token}).toPromise().then(t=>{t.error?(this._ds.error("Invalid token"),this._services._router.navigateByUrl("/home")):this.user=t.result.user},t=>{this._ds.error("Invalid token"),this._services._router.navigateByUrl("/home")})}ngOnDestroy(){this.subscription$.forEach(t=>{t.unsubscribe()})}submit(){this.disableFormButton=!0,this._http.post(this.serverURL+"/setUserWithForgotPasswordToken",{forgotPasswordToken:this.token,password:this.form.value.password}).toPromise().then(t=>{t.error?(this._ds.error("Could not update user"),this._services._router.navigateByUrl("/home")):(this._services._alert.setAlert("success","User has been updated, please log in"),this._services._router.navigateByUrl("/home"))},t=>{this._ds.error("Invalid token"),this._services._router.navigateByUrl("/home")}),this._services._router.navigateByUrl("/home")}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:ForgotPasswordComponent,deps:[{token:i1$1.ActivatedRoute},{token:ProviderService},{token:i4.HttpClient},{token:DialogService}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"21.0.1",type:ForgotPasswordComponent,isStandalone:!1,selector:"resolveio-forgot-password",providers:[ProviderService],usesInheritance:!0,ngImport:i0,template:'<style>\n\tinput {\n\t\twidth: 100%;\n\t}\n</style>\n\n@if (user) {\n\t<h4>\n\t\tWelcome to ResolveIO.\n\t\t<br />\n\t\t<br />\n\t\tYour username will be {{ user.username }}. Please create a password for your account.\n\t</h4>\n\t<form [formGroup]="form" novalidate (ngSubmit)="submit()">\n\t\t<div class="row">\n\t\t\t<div class="col-lg-12">\n\t\t\t\t<div class="form-group">\n\t\t\t\t\t<label class="form-control-label">Username</label>\n\t\t\t\t\t{{ user.username }}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class="row">\n\t\t\t<div class="col-lg-12">\n\t\t\t\t<div class="form-group">\n\t\t\t\t\t<label class="form-control-label">Password</label>\n\t\t\t\t\t@if (form.controls.password.hasError(\'required\')) {\n\t\t\t\t\t\t<em>- Required</em>\n\t\t\t\t\t}\n\t\t\t\t\t@if (form.controls.password.hasError(\'minlength\') || form.hasError(\'matchPassword\')) {\n\t\t\t\t\t\t<em>- Invalid</em>\n\t\t\t\t\t}\n\t\t\t\t\t<input type="text" [ngClass]="[\'form-control\', form.controls.password.valid && form.valid ? \'is-valid\' : \'is-invalid\']" formControlName="password" type="password" autocomplete="new-password" />\n\t\t\t\t\t@if (form.controls.password.hasError(\'required\')) {\n\t\t\t\t\t\t<div class="invalid-feedback">Password is required</div>\n\t\t\t\t\t}\n\t\t\t\t\t@if (form.controls.password.hasError(\'minlength\')) {\n\t\t\t\t\t\t<div class="invalid-feedback">Password must be 6 or more characters</div>\n\t\t\t\t\t}\n\t\t\t\t\t@if (!form.controls.password.hasError(\'minlength\') && form.hasError(\'matchPassword\')) {\n\t\t\t\t\t\t<div class="invalid-feedback" align="start">Passwords do not match</div>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class="row">\n\t\t\t<div class="col-lg-12">\n\t\t\t\t<div class="form-group">\n\t\t\t\t\t<label class="form-control-label">Confirm Password</label>\n\t\t\t\t\t@if (form.controls.confirm_password.hasError(\'required\')) {\n\t\t\t\t\t\t<em>- Required</em>\n\t\t\t\t\t}\n\t\t\t\t\t@if (form.hasError(\'matchPassword\')) {\n\t\t\t\t\t\t<em>- Invalid</em>\n\t\t\t\t\t}\n\t\t\t\t\t<input type="text" [ngClass]="[\'form-control\', form.controls.confirm_password.valid ? \'is-valid\' : \'is-invalid\']" formControlName="confirm_password" type="password" autocomplete="new-password" />\n\t\t\t\t\t@if (form.controls.confirm_password.hasError(\'required\')) {\n\t\t\t\t\t\t<div class="invalid-feedback">Password is required</div>\n\t\t\t\t\t}\n\t\t\t\t\t@if (form.hasError(\'matchPassword\')) {\n\t\t\t\t\t\t<div class="invalid-feedback" align="start">Passwords do not match</div>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class="row" style="margin-top: 30px">\n\t\t\t<div class="col-lg-12">\n\t\t\t\t<form-button [form]="form" [disabled]="disableFormButton"></form-button>\n\t\t\t</div>\n\t\t</div>\n\t</form>\n}\n',styles:["input{width:100%}\n"],dependencies:[{kind:"directive",type:i2.ɵNgNoValidate,selector:"form:not([ngNoForm]):not([ngNativeValidate])"},{kind:"directive",type:i2.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:i2.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:i2.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:i2.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:i2.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"component",type:FormButtonComponent,selector:"form-button",inputs:["form","disabled","type"]},{kind:"directive",type:i7.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]}]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:ForgotPasswordComponent,decorators:[{type:Component,args:[{selector:"resolveio-forgot-password",providers:[ProviderService],standalone:!1,template:'<style>\n\tinput {\n\t\twidth: 100%;\n\t}\n</style>\n\n@if (user) {\n\t<h4>\n\t\tWelcome to ResolveIO.\n\t\t<br />\n\t\t<br />\n\t\tYour username will be {{ user.username }}. Please create a password for your account.\n\t</h4>\n\t<form [formGroup]="form" novalidate (ngSubmit)="submit()">\n\t\t<div class="row">\n\t\t\t<div class="col-lg-12">\n\t\t\t\t<div class="form-group">\n\t\t\t\t\t<label class="form-control-label">Username</label>\n\t\t\t\t\t{{ user.username }}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class="row">\n\t\t\t<div class="col-lg-12">\n\t\t\t\t<div class="form-group">\n\t\t\t\t\t<label class="form-control-label">Password</label>\n\t\t\t\t\t@if (form.controls.password.hasError(\'required\')) {\n\t\t\t\t\t\t<em>- Required</em>\n\t\t\t\t\t}\n\t\t\t\t\t@if (form.controls.password.hasError(\'minlength\') || form.hasError(\'matchPassword\')) {\n\t\t\t\t\t\t<em>- Invalid</em>\n\t\t\t\t\t}\n\t\t\t\t\t<input type="text" [ngClass]="[\'form-control\', form.controls.password.valid && form.valid ? \'is-valid\' : \'is-invalid\']" formControlName="password" type="password" autocomplete="new-password" />\n\t\t\t\t\t@if (form.controls.password.hasError(\'required\')) {\n\t\t\t\t\t\t<div class="invalid-feedback">Password is required</div>\n\t\t\t\t\t}\n\t\t\t\t\t@if (form.controls.password.hasError(\'minlength\')) {\n\t\t\t\t\t\t<div class="invalid-feedback">Password must be 6 or more characters</div>\n\t\t\t\t\t}\n\t\t\t\t\t@if (!form.controls.password.hasError(\'minlength\') && form.hasError(\'matchPassword\')) {\n\t\t\t\t\t\t<div class="invalid-feedback" align="start">Passwords do not match</div>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class="row">\n\t\t\t<div class="col-lg-12">\n\t\t\t\t<div class="form-group">\n\t\t\t\t\t<label class="form-control-label">Confirm Password</label>\n\t\t\t\t\t@if (form.controls.confirm_password.hasError(\'required\')) {\n\t\t\t\t\t\t<em>- Required</em>\n\t\t\t\t\t}\n\t\t\t\t\t@if (form.hasError(\'matchPassword\')) {\n\t\t\t\t\t\t<em>- Invalid</em>\n\t\t\t\t\t}\n\t\t\t\t\t<input type="text" [ngClass]="[\'form-control\', form.controls.confirm_password.valid ? \'is-valid\' : \'is-invalid\']" formControlName="confirm_password" type="password" autocomplete="new-password" />\n\t\t\t\t\t@if (form.controls.confirm_password.hasError(\'required\')) {\n\t\t\t\t\t\t<div class="invalid-feedback">Password is required</div>\n\t\t\t\t\t}\n\t\t\t\t\t@if (form.hasError(\'matchPassword\')) {\n\t\t\t\t\t\t<div class="invalid-feedback" align="start">Passwords do not match</div>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class="row" style="margin-top: 30px">\n\t\t\t<div class="col-lg-12">\n\t\t\t\t<form-button [form]="form" [disabled]="disableFormButton"></form-button>\n\t\t\t</div>\n\t\t</div>\n\t</form>\n}\n'}]}],ctorParameters:()=>[{type:i1$1.ActivatedRoute},{type:ProviderService},{type:i4.HttpClient},{type:DialogService}]});class EnrollComponent extends BaseComponent{_route;_services;_http;_ds;serverURL="";form;user;subscription$=[];token;disableFormButton=!1;constructor(t,e,n,o){super(e),this._route=t,this._services=e,this._http=n,this._ds=o}ngOnInit(){2!==this._route.snapshot.queryParamMap.keys.length?(this._ds.error("Invalid params"),this._services._router.navigateByUrl("/home")):(this.serverURL=this._route.snapshot.queryParamMap.keys[0],this.token=this._route.snapshot.queryParamMap.keys[1]),this.form=this._services._fb.group({password:["",[Validators.compose([Validators.required,Validators.minLength(6)])]],confirm_password:["",[Validators.compose([Validators.required,Validators.minLength(6)])]]},{validator:this._services._vs.matchPassword}),this._http.post(this.serverURL+"/userWithEnrollmentToken",{enrollmentToken:this.token}).toPromise().then(t=>{t.error?(this._ds.error("Invalid token"),this._services._router.navigateByUrl("/home")):this.user=t.result.user},t=>{this._ds.error("Invalid token"),this._services._router.navigateByUrl("/home")})}ngOnDestroy(){this.subscription$.forEach(t=>{t.unsubscribe()})}submit(){this.disableFormButton=!0,this._http.post(this.serverURL+"/setUserWithEnrollmentToken",{enrollmentToken:this.token,password:this.form.value.password}).toPromise().then(t=>{t.error?(this._ds.error("Could not update user"),this._services._router.navigateByUrl("/home")):(this._services._alert.setAlert("success","User has been updated, please log in"),this._services._router.navigateByUrl("/home"))},t=>{this._ds.error("Invalid token"),this._services._router.navigateByUrl("/home")})}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:EnrollComponent,deps:[{token:i1$1.ActivatedRoute},{token:ProviderService},{token:i4.HttpClient},{token:DialogService}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"21.0.1",type:EnrollComponent,isStandalone:!1,selector:"resolveio-enroll",providers:[ProviderService],usesInheritance:!0,ngImport:i0,template:'<style>\n\tinput {\n\t\twidth: 100%;\n\t}\n</style>\n\n@if (user) {\n\t<h4>\n\t\tWelcome to ResolveIO.\n\t\t<br />\n\t\t<br />\n\t\tYour username will be {{ user.username }}. Please create a password for your account.\n\t</h4>\n\t<form [formGroup]="form" novalidate (ngSubmit)="submit()">\n\t\t<div class="row">\n\t\t\t<div class="col-lg-12">\n\t\t\t\t<div class="form-group">\n\t\t\t\t\t<label class="form-control-label">Username</label>\n\t\t\t\t\t{{ user.username }}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class="row">\n\t\t\t<div class="col-lg-12">\n\t\t\t\t<div class="form-group">\n\t\t\t\t\t<label class="form-control-label">Password</label>\n\t\t\t\t\t@if (form.controls.password.hasError(\'required\')) {\n\t\t\t\t\t\t<em>- Required</em>\n\t\t\t\t\t}\n\t\t\t\t\t@if (form.controls.password.hasError(\'minlength\') || form.hasError(\'matchPassword\')) {\n\t\t\t\t\t\t<em>- Invalid</em>\n\t\t\t\t\t}\n\t\t\t\t\t<input type="text" [ngClass]="[\'form-control\', form.controls.password.valid && !form.hasError(\'matchPassword\') ? \'is-valid\' : \'is-invalid\']" formControlName="password" type="password" autocomplete="new-password" />\n\t\t\t\t\t@if (form.controls.password.hasError(\'required\')) {\n\t\t\t\t\t\t<div class="invalid-feedback">Password is required</div>\n\t\t\t\t\t}\n\t\t\t\t\t@if (form.controls.password.hasError(\'minlength\')) {\n\t\t\t\t\t\t<div class="invalid-feedback">Password must be 6 or more characters</div>\n\t\t\t\t\t}\n\t\t\t\t\t@if (!form.controls.password.hasError(\'minlength\') && form.hasError(\'matchPassword\')) {\n\t\t\t\t\t\t<div class="invalid-feedback" align="start">Passwords do not match</div>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class="row">\n\t\t\t<div class="col-lg-12">\n\t\t\t\t<div class="form-group">\n\t\t\t\t\t<label class="form-control-label">Confirm Password</label>\n\t\t\t\t\t@if (form.controls.confirm_password.hasError(\'required\')) {\n\t\t\t\t\t\t<em>- Required</em>\n\t\t\t\t\t}\n\t\t\t\t\t@if (form.hasError(\'matchPassword\')) {\n\t\t\t\t\t\t<em>- Invalid</em>\n\t\t\t\t\t}\n\t\t\t\t\t<input type="text" [ngClass]="[\'form-control\', form.controls.confirm_password.valid && !form.hasError(\'matchPassword\') ? \'is-valid\' : \'is-invalid\']" formControlName="confirm_password" type="password" autocomplete="new-password" />\n\t\t\t\t\t@if (form.controls.confirm_password.hasError(\'required\')) {\n\t\t\t\t\t\t<div class="invalid-feedback">Password is required</div>\n\t\t\t\t\t}\n\t\t\t\t\t@if (form.hasError(\'matchPassword\')) {\n\t\t\t\t\t\t<div class="invalid-feedback" align="start">Passwords do not match</div>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class="row" style="margin-top: 30px">\n\t\t\t<div class="col-lg-12">\n\t\t\t\t<form-button [form]="form" [disabled]="disableFormButton"></form-button>\n\t\t\t</div>\n\t\t</div>\n\t</form>\n}\n',styles:["input{width:100%}\n"],dependencies:[{kind:"directive",type:i2.ɵNgNoValidate,selector:"form:not([ngNoForm]):not([ngNativeValidate])"},{kind:"directive",type:i2.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:i2.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:i2.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:i2.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:i2.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"component",type:FormButtonComponent,selector:"form-button",inputs:["form","disabled","type"]},{kind:"directive",type:i7.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]}]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:EnrollComponent,decorators:[{type:Component,args:[{selector:"resolveio-enroll",providers:[ProviderService],standalone:!1,template:'<style>\n\tinput {\n\t\twidth: 100%;\n\t}\n</style>\n\n@if (user) {\n\t<h4>\n\t\tWelcome to ResolveIO.\n\t\t<br />\n\t\t<br />\n\t\tYour username will be {{ user.username }}. Please create a password for your account.\n\t</h4>\n\t<form [formGroup]="form" novalidate (ngSubmit)="submit()">\n\t\t<div class="row">\n\t\t\t<div class="col-lg-12">\n\t\t\t\t<div class="form-group">\n\t\t\t\t\t<label class="form-control-label">Username</label>\n\t\t\t\t\t{{ user.username }}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class="row">\n\t\t\t<div class="col-lg-12">\n\t\t\t\t<div class="form-group">\n\t\t\t\t\t<label class="form-control-label">Password</label>\n\t\t\t\t\t@if (form.controls.password.hasError(\'required\')) {\n\t\t\t\t\t\t<em>- Required</em>\n\t\t\t\t\t}\n\t\t\t\t\t@if (form.controls.password.hasError(\'minlength\') || form.hasError(\'matchPassword\')) {\n\t\t\t\t\t\t<em>- Invalid</em>\n\t\t\t\t\t}\n\t\t\t\t\t<input type="text" [ngClass]="[\'form-control\', form.controls.password.valid && !form.hasError(\'matchPassword\') ? \'is-valid\' : \'is-invalid\']" formControlName="password" type="password" autocomplete="new-password" />\n\t\t\t\t\t@if (form.controls.password.hasError(\'required\')) {\n\t\t\t\t\t\t<div class="invalid-feedback">Password is required</div>\n\t\t\t\t\t}\n\t\t\t\t\t@if (form.controls.password.hasError(\'minlength\')) {\n\t\t\t\t\t\t<div class="invalid-feedback">Password must be 6 or more characters</div>\n\t\t\t\t\t}\n\t\t\t\t\t@if (!form.controls.password.hasError(\'minlength\') && form.hasError(\'matchPassword\')) {\n\t\t\t\t\t\t<div class="invalid-feedback" align="start">Passwords do not match</div>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class="row">\n\t\t\t<div class="col-lg-12">\n\t\t\t\t<div class="form-group">\n\t\t\t\t\t<label class="form-control-label">Confirm Password</label>\n\t\t\t\t\t@if (form.controls.confirm_password.hasError(\'required\')) {\n\t\t\t\t\t\t<em>- Required</em>\n\t\t\t\t\t}\n\t\t\t\t\t@if (form.hasError(\'matchPassword\')) {\n\t\t\t\t\t\t<em>- Invalid</em>\n\t\t\t\t\t}\n\t\t\t\t\t<input type="text" [ngClass]="[\'form-control\', form.controls.confirm_password.valid && !form.hasError(\'matchPassword\') ? \'is-valid\' : \'is-invalid\']" formControlName="confirm_password" type="password" autocomplete="new-password" />\n\t\t\t\t\t@if (form.controls.confirm_password.hasError(\'required\')) {\n\t\t\t\t\t\t<div class="invalid-feedback">Password is required</div>\n\t\t\t\t\t}\n\t\t\t\t\t@if (form.hasError(\'matchPassword\')) {\n\t\t\t\t\t\t<div class="invalid-feedback" align="start">Passwords do not match</div>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class="row" style="margin-top: 30px">\n\t\t\t<div class="col-lg-12">\n\t\t\t\t<form-button [form]="form" [disabled]="disableFormButton"></form-button>\n\t\t\t</div>\n\t\t</div>\n\t</form>\n}\n'}]}],ctorParameters:()=>[{type:i1$1.ActivatedRoute},{type:ProviderService},{type:i4.HttpClient},{type:DialogService}]});class Auth365Component extends BaseComponent{_app;_route;_services;_http;_ds;_socket;token;constructor(t,e,n,o,r,i){super(n),this._app=t,this._route=e,this._services=n,this._http=o,this._ds=r,this._socket=i,this._app.environment.value.MS_id_token?this._services._account.logIn365(this._app.environment.value.MS_id_token).then(()=>{this._services._router.navigateByUrl("/home")},()=>{}):this._services._router.navigateByUrl("/home")}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:Auth365Component,deps:[{token:CoreService},{token:i1$1.ActivatedRoute},{token:ProviderService},{token:i4.HttpClient},{token:DialogService},{token:SocketManagerService}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"21.0.1",type:Auth365Component,isStandalone:!1,selector:"resolveio-auth365",providers:[ProviderService],usesInheritance:!0,ngImport:i0,template:"<router-outlet></router-outlet>",isInline:!0,dependencies:[{kind:"directive",type:i1$1.RouterOutlet,selector:"router-outlet",inputs:["name","routerOutletData"],outputs:["activate","deactivate","attach","detach"],exportAs:["outlet"]}]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:Auth365Component,decorators:[{type:Component,args:[{selector:"resolveio-auth365",providers:[ProviderService],template:"<router-outlet></router-outlet>",standalone:!1}]}],ctorParameters:()=>[{type:CoreService},{type:i1$1.ActivatedRoute},{type:ProviderService},{type:i4.HttpClient},{type:DialogService},{type:SocketManagerService}]});class UserSettingsService{selectedUser=new BehaviorSubject("0");constructor(){}setSelectedUser(t){this.selectedUser.next(t)}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:UserSettingsService,deps:[],target:i0.ɵɵFactoryTarget.Injectable});static"ɵprov"=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:UserSettingsService})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:UserSettingsService,decorators:[{type:Injectable}],ctorParameters:()=>[]});const UserSettingsModulePermission={name:"user-settings",views:[{link:"/user-settings/settings",label:"Settings"}],approval:{type:"user-settings"}};class UserSettingsComponent extends BaseComponent{_us;_services;selectedUserSettings$;menuData;constructor(t,e){super(e),this._us=t,this._services=e}ngOnInit(){this.selectedUserSettings$=this._us.selectedUser.subscribe(t=>this.selectedUserSettingsChanged(t))}ngOnDestroy(){this._us.setSelectedUser("0"),this.selectedUserSettings$.unsubscribe()}selectedUserSettingsChanged(t){this.setUserSettingsMenuData()}setUserSettingsMenuData(t,e){let n=[];UserSettingsModulePermission.views.forEach(t=>{if((this._services._account.isUserInView(t.link)||this._services._account.isUserSuperAdmin())&&"/user-settings/settings"===t.link)n.push({link:"/user-settings/settings",params:null,label:"Settings"})}),this.menuData={title:"User Settings",module:"User Settings",description_name:"User: ",description:e?e.fullname:"",tabs:n},this._services._app.setNavbarModuleData(this.menuData)}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:UserSettingsComponent,deps:[{token:UserSettingsService},{token:ProviderService}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"21.0.1",type:UserSettingsComponent,isStandalone:!1,selector:"resolveio-user-settings",providers:[ProviderService],usesInheritance:!0,ngImport:i0,template:"<router-outlet></router-outlet>",isInline:!0,dependencies:[{kind:"directive",type:i1$1.RouterOutlet,selector:"router-outlet",inputs:["name","routerOutletData"],outputs:["activate","deactivate","attach","detach"],exportAs:["outlet"]}]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:UserSettingsComponent,decorators:[{type:Component,args:[{selector:"resolveio-user-settings",providers:[ProviderService],template:"<router-outlet></router-outlet>",standalone:!1}]}],ctorParameters:()=>[{type:UserSettingsService},{type:ProviderService}]});class UsersSettingsComponent extends BaseComponent{_aps;_us;_services;_ds;_stickyAdapter;subscription$=[];form;disableFormButton=!1;user;client="";views=[];stickySelects=[];stickySelections={};constructor(t,e,n,o,r){super(n),this._aps=t,this._us=e,this._services=n,this._ds=o,this._stickyAdapter=r}ngOnInit(){this._us.setSelectedUser("0"),this.client=this._services._app.client.getValue(),this.form=this._services._fb.group({table_color:["#3b3ee3",[Validators.required]],table_font_color:["#ffffff",[Validators.required]],font_size:[12,[Validators.required,this._services._vs.wholeNumbersGreaterThanZero,this._services._vs.maxValue(18),this._services._vs.minValue(8)]],secondary_table_color:["#87ceeb",[Validators.required]],secondary_table_font_color:["#000000",[Validators.required]],tertiary_table_color:["#ff4500",[Validators.required]],tertiary_table_font_color:["#000000",[Validators.required]],collapsable_menu:[!0],entries_per_page:["25",[Validators.required]],warning_color:["#ffc107",[Validators.required]],warning_font_color:["#000000",[Validators.required]],warning_hover_color:["#e0a800",[Validators.required]],success_color:["#28a745",[Validators.required]],success_font_color:["#ffffff",[Validators.required]],success_hover_color:["#218838",[Validators.required]],danger_color:["#dc3545",[Validators.required]],danger_font_color:["#ffffff",[Validators.required]],danger_hover_color:["#c82333",[Validators.required]],info_color:["#17a2b8",[Validators.required]],info_font_color:["#ffffff",[Validators.required]],info_hover_color:["#138496",[Validators.required]],primary_color:["#007bff",[Validators.required]],primary_font_color:["#ffffff",[Validators.required]],primary_hover_color:["#0069d9",[Validators.required]],secondary_color:["#868e96",[Validators.required]],secondary_font_color:["#ffffff",[Validators.required]],secondary_hover_color:["#5a6268",[Validators.required]],date_picker_day_start:["S",[Validators.required]],routing_preference:["alwaysAsk"],opening_route:["/home"],ng_select_search_mode:["fuzzy",[Validators.required]]});const t=this._services._account.getUser();t&&t.settings&&(this.form.patchValue(t.settings),t.roles.groups.forEach(t=>{t.views.forEach(t=>{this.views.some(e=>e.value===t)||this.views.push({value:t,display:toTitleCase(t.replace("/","").replace(new RegExp("/","g")," - "))})})}));const e=this._normalizeDatePickerDayStart(t?.other?.date_picker_day_start);this.form.controls.date_picker_day_start.setValue(e),this._loadStickySelects(this._services._account.getUser()),document.documentElement.style.setProperty("--primary-table-color",this.form.controls.table_color.value),document.documentElement.style.setProperty("--primary-table-font-color",this.form.controls.table_font_color.value),document.documentElement.style.setProperty("--font-size",this.form.controls.font_size.value+"px"),document.documentElement.style.setProperty("--secondary-table-color",this.form.controls.secondary_table_color.value),document.documentElement.style.setProperty("--secondary-table-font-color",this.form.controls.secondary_table_font_color.value),document.documentElement.style.setProperty("--tertiary-table-color",this.form.controls.tertiary_table_color.value),document.documentElement.style.setProperty("--tertiary-table-font-color",this.form.controls.tertiary_table_font_color.value),document.documentElement.style.setProperty("--warning-color",this.form.controls.warning_color.value),document.documentElement.style.setProperty("--warning-font-color",this.form.controls.warning_font_color.value),document.documentElement.style.setProperty("--warning-shadow-color","0 0 0 0.2rem "+hexToRGB(this.form.controls.warning_color.value,.5)),document.documentElement.style.setProperty("--warning-hover-color",this.form.controls.warning_hover_color.value),document.documentElement.style.setProperty("--success-color",this.form.controls.success_color.value),document.documentElement.style.setProperty("--success-font-color",this.form.controls.success_font_color.value),document.documentElement.style.setProperty("--success-shadow-color","0 0 0 0.2rem "+hexToRGB(this.form.controls.success_color.value,.5)),document.documentElement.style.setProperty("--success-hover-color",this.form.controls.success_hover_color.value),document.documentElement.style.setProperty("--danger-color",this.form.controls.danger_color.value),document.documentElement.style.setProperty("--danger-font-color",this.form.controls.danger_font_color.value),document.documentElement.style.setProperty("--danger-shadow-color","0 0 0 0.2rem "+hexToRGB(this.form.controls.danger_color.value,.5)),document.documentElement.style.setProperty("--danger-hover-color",this.form.controls.danger_hover_color.value),document.documentElement.style.setProperty("--info-color",this.form.controls.info_color.value),document.documentElement.style.setProperty("--info-font-color",this.form.controls.info_font_color.value),document.documentElement.style.setProperty("--info-shadow-color","0 0 0 0.2rem "+hexToRGB(this.form.controls.info_color.value,.5)),document.documentElement.style.setProperty("--info-hover-color",this.form.controls.info_hover_color.value),document.documentElement.style.setProperty("--primary-color",this.form.controls.primary_color.value),document.documentElement.style.setProperty("--primary-font-color",this.form.controls.primary_font_color.value),document.documentElement.style.setProperty("--primary-shadow-color","0 0 0 0.2rem "+hexToRGB(this.form.controls.primary_color.value,.5)),document.documentElement.style.setProperty("--primary-hover-color",this.form.controls.primary_hover_color.value),document.documentElement.style.setProperty("--secondary-color",this.form.controls.secondary_color.value),document.documentElement.style.setProperty("--secondary-font-color",this.form.controls.secondary_font_color.value),document.documentElement.style.setProperty("--secondary-shadow-color","0 0 0 0.2rem "+hexToRGB(this.form.controls.secondary_color.value,.5)),document.documentElement.style.setProperty("--secondary-hover-color",this.form.controls.secondary_hover_color.value),this.subscription$.push(this._services._account.user.subscribe(t=>{this.user=t,this._loadStickySelects(t)}))}ngOnDestroy(){this.subscription$.forEach(t=>{t.unsubscribe()})}changePrimaryColor(){document.documentElement.style.setProperty("--primary-table-color",this.form.controls.table_color.value)}changePrimaryFontColor(){document.documentElement.style.setProperty("--primary-table-font-color",this.form.controls.table_font_color.value)}changePrimaryFontSize(){document.documentElement.style.setProperty("--font-size",this.form.controls.font_size.value+"px")}changeSecondaryColor(){document.documentElement.style.setProperty("--secondary-table-color",this.form.controls.secondary_table_color.value)}changeSecondaryFontColor(){document.documentElement.style.setProperty("--secondary-table-font-color",this.form.controls.secondary_table_font_color.value)}changeTertiaryColor(){document.documentElement.style.setProperty("--tertiary-table-color",this.form.controls.tertiary_table_color.value)}changeTertiaryFontColor(){document.documentElement.style.setProperty("--tertiary-table-font-color",this.form.controls.tertiary_table_font_color.value)}changeWarningColor(){document.documentElement.style.setProperty("--warning-color",this.form.controls.warning_color.value),document.documentElement.style.setProperty("--warning-shadow-color","0 0 0 0.2rem "+hexToRGB(this.form.controls.warning_color.value,.5))}changeWarningHoverColor(){document.documentElement.style.setProperty("--warning-hover-color",this.form.controls.warning_hover_color.value)}changeWarningFontColor(){document.documentElement.style.setProperty("--warning-font-color",this.form.controls.warning_font_color.value)}changeSuccessColor(){document.documentElement.style.setProperty("--success-color",this.form.controls.success_color.value),document.documentElement.style.setProperty("--success-shadow-color","0 0 0 0.2rem "+hexToRGB(this.form.controls.success_color.value,.5))}changeSuccessHoverColor(){document.documentElement.style.setProperty("--success-hover-color",this.form.controls.success_hover_color.value)}changeSuccessFontColor(){document.documentElement.style.setProperty("--success-font-color",this.form.controls.success_font_color.value)}changeDangerColor(){document.documentElement.style.setProperty("--danger-color",this.form.controls.danger_color.value),document.documentElement.style.setProperty("--danger-shadow-color","0 0 0 0.2rem "+hexToRGB(this.form.controls.danger_color.value,.5))}changeDangerHoverColor(){document.documentElement.style.setProperty("--danger-hover-color",this.form.controls.danger_hover_color.value)}changeDangerFontColor(){document.documentElement.style.setProperty("--danger-font-color",this.form.controls.danger_font_color.value)}changeInfoColor(){document.documentElement.style.setProperty("--info-color",this.form.controls.info_color.value),document.documentElement.style.setProperty("--info-shadow-color","0 0 0 0.2rem "+hexToRGB(this.form.controls.info_color.value,.5))}changeInfoHoverColor(){document.documentElement.style.setProperty("--info-hover-color",this.form.controls.info_hover_color.value)}changeInfoFontColor(){document.documentElement.style.setProperty("--info-font-color",this.form.controls.info_font_color.value)}changePrimaryButtonColor(){document.documentElement.style.setProperty("--primary-color",this.form.controls.primary_color.value),document.documentElement.style.setProperty("--primary-shadow-color","0 0 0 0.2rem "+hexToRGB(this.form.controls.primary_color.value,.5))}changePrimaryButtonHoverColor(){document.documentElement.style.setProperty("--primary-hover-color",this.form.controls.primary_hover_color.value)}changePrimaryButtonFontColor(){document.documentElement.style.setProperty("--primary-font-color",this.form.controls.primary_font_color.value)}changeSecondaryButtonColor(){document.documentElement.style.setProperty("--secondary-color",this.form.controls.secondary_color.value),document.documentElement.style.setProperty("--secondary-shadow-color","0 0 0 0.2rem "+hexToRGB(this.form.controls.secondary_color.value,.5))}changeSecondaryHoverColor(){document.documentElement.style.setProperty("--secondary-hover-color",this.form.controls.secondary_hover_color.value)}changeSecondaryButtonFontColor(){document.documentElement.style.setProperty("--secondary-font-color",this.form.controls.secondary_font_color.value)}reset(){this.form.controls.table_color.setValue("#3b3ee3"),this.form.controls.table_font_color.setValue("#ffffff"),this.form.controls.font_size.setValue(12),this.form.controls.secondary_table_color.setValue("#87ceeb"),this.form.controls.secondary_table_font_color.setValue("#000000"),this.form.controls.tertiary_table_color.setValue("#ff4500"),this.form.controls.tertiary_table_font_color.setValue("#000000"),this.form.controls.collapsable_menu.setValue(!0),this.form.controls.entries_per_page.setValue("25"),this.form.controls.warning_color.setValue("#ffc107"),this.form.controls.warning_font_color.setValue("#000000"),this.form.controls.warning_hover_color.setValue("#e0a800"),this.form.controls.success_color.setValue("#28a745"),this.form.controls.success_font_color.setValue("#ffffff"),this.form.controls.success_hover_color.setValue("#218838"),this.form.controls.danger_color.setValue("#dc3545"),this.form.controls.danger_font_color.setValue("#ffffff"),this.form.controls.danger_hover_color.setValue("#c82333"),this.form.controls.info_color.setValue("#17a2b8"),this.form.controls.info_font_color.setValue("#ffffff"),this.form.controls.info_hover_color.setValue("#138496"),this.form.controls.primary_color.setValue("#007bff"),this.form.controls.primary_font_color.setValue("#ffffff"),this.form.controls.primary_hover_color.setValue("#0069d9"),this.form.controls.secondary_color.setValue("#868e96"),this.form.controls.secondary_font_color.setValue("#ffffff"),this.form.controls.secondary_hover_color.setValue("#5a6268"),this.form.controls.date_picker_day_start.setValue("S"),this.form.controls.ng_select_search_mode.setValue("fuzzy"),document.documentElement.style.setProperty("--primary-table-color",this.form.controls.table_color.value),document.documentElement.style.setProperty("--primary-table-font-color",this.form.controls.table_font_color.value),document.documentElement.style.setProperty("--font-size",this.form.controls.font_size.value+"px"),document.documentElement.style.setProperty("--secondary-table-color",this.form.controls.secondary_table_color.value),document.documentElement.style.setProperty("--secondary-table-font-color",this.form.controls.secondary_table_font_color.value),document.documentElement.style.setProperty("--tertiary-table-color",this.form.controls.tertiary_table_color.value),document.documentElement.style.setProperty("--tertiary-table-font-color",this.form.controls.tertiary_table_font_color.value),document.documentElement.style.setProperty("--warning-color",this.form.controls.warning_color.value),document.documentElement.style.setProperty("--warning-font-color",this.form.controls.warning_font_color.value),document.documentElement.style.setProperty("--warning-shadow-color","0 0 0 0.2rem "+hexToRGB(this.form.controls.warning_color.value,.5)),document.documentElement.style.setProperty("--warning-hover-color",this.form.controls.warning_hover_color.value),document.documentElement.style.setProperty("--success-color",this.form.controls.success_color.value),document.documentElement.style.setProperty("--success-font-color",this.form.controls.success_font_color.value),document.documentElement.style.setProperty("--success-shadow-color","0 0 0 0.2rem "+hexToRGB(this.form.controls.success_color.value,.5)),document.documentElement.style.setProperty("--success-hover-color",this.form.controls.success_hover_color.value),document.documentElement.style.setProperty("--danger-color",this.form.controls.danger_color.value),document.documentElement.style.setProperty("--danger-font-color",this.form.controls.danger_font_color.value),document.documentElement.style.setProperty("--danger-shadow-color","0 0 0 0.2rem "+hexToRGB(this.form.controls.danger_color.value,.5)),document.documentElement.style.setProperty("--danger-hover-color",this.form.controls.danger_hover_color.value),document.documentElement.style.setProperty("--info-color",this.form.controls.info_color.value),document.documentElement.style.setProperty("--info-font-color",this.form.controls.info_font_color.value),document.documentElement.style.setProperty("--info-shadow-color","0 0 0 0.2rem "+hexToRGB(this.form.controls.info_color.value,.5)),document.documentElement.style.setProperty("--info-hover-color",this.form.controls.info_hover_color.value),document.documentElement.style.setProperty("--primary-color",this.form.controls.primary_color.value),document.documentElement.style.setProperty("--primary-font-color",this.form.controls.primary_font_color.value),document.documentElement.style.setProperty("--primary-shadow-color","0 0 0 0.2rem "+hexToRGB(this.form.controls.primary_color.value,.5)),document.documentElement.style.setProperty("--primary-hover-color",this.form.controls.primary_hover_color.value),document.documentElement.style.setProperty("--secondary-color",this.form.controls.secondary_color.value),document.documentElement.style.setProperty("--secondary-font-color",this.form.controls.secondary_font_color.value),document.documentElement.style.setProperty("--secondary-shadow-color","0 0 0 0.2rem "+hexToRGB(this.form.controls.secondary_color.value,.5)),document.documentElement.style.setProperty("--secondary-hover-color",this.form.controls.secondary_hover_color.value)}updateStickyDefault(t,e){const n=this.stickySelects.findIndex(e=>e.key===t);if(-1===n)return;const o=this.stickySelects.map(t=>({...t,options:t.options||[]})),r={...o[n]};r.defaultValue=void 0===e?null:e,r.defaultLabel=this._resolveStickyLabel(r,e),r.updatedAt=(new Date).toISOString(),o[n]=r,this.stickySelects=o,this.stickySelections[t]=e,this._stickyAdapter&&this._stickyAdapter.saveStickySelects(o,"user-settings")}_loadStickySelects(t){const e=t||this._services._account.getUser();if(e&&e.other&&Array.isArray(e.other.stickySelects)){const t=[],n=new Set;e.other.stickySelects.forEach(e=>{e&&e.key&&!n.has(e.key)&&(n.add(e.key),t.push({...e,options:e.options||[]}))}),this.stickySelects=t}else this.stickySelects=[];this.stickySelections={},this.stickySelects.forEach(t=>{this.stickySelections[t.key]=void 0!==t.defaultValue?t.defaultValue:null})}_resolveStickyLabel(t,e){if(null==e)return"";const n=(t.options||[]).find(t=>JSON.stringify(t.value)===JSON.stringify(e));return n&&n.label?n.label:"string"==typeof e?e:JSON.stringify(e)}submitForm(t){const e=this._services._account.getUser(),n=this.form.value,o=this._normalizeDatePickerDayStart(n.date_picker_day_start),{date_picker_day_start:r,...i}=n,a={...e?.other||{},date_picker_day_start:o};this._services._socket.call("updateDocumentProps","users",e._id,[{prop:"settings",data:i},{prop:"other",data:a}],e.__v,(t,n)=>{if(n){if(this._services._alert.setAlert("success","Settings have been updated"),e){const t={...e,__v:n&&n.__v?n.__v:e.__v,settings:i,other:a};this._services._account.setUser(t)}}else this._ds.error("Could not update settings"),this._services._socket.call("insertErrorLog","user settings - update user",[this._services._account.getUser(),t])})}_normalizeDatePickerDayStart(t){return"M"===t||"m"===t||1===t||"1"===t?"M":"S"}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:UsersSettingsComponent,deps:[{token:AuthPermissionService},{token:UserSettingsService},{token:ProviderService},{token:DialogService},{token:NG_SELECT_STICKY_ADAPTER,optional:!0}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"21.0.1",type:UsersSettingsComponent,isStandalone:!1,selector:"resolveio-users-settings",providers:[ProviderService],usesInheritance:!0,ngImport:i0,template:'<style>\n\t.sticky-section-card,\n\t.sticky-section-card * {\n\t\ttransform: none !important;\n\t}\n\n\t:host {\n\t\tdisplay: block;\n\t}\n\n\t::ng-deep :root {\n\t\t--primary-table-color: #3b3ee3;\n\t\t--primary-table-font-color: #ffffff;\n\t\t--font-size: 12px;\n\t\t--secondary-table-color: #87ceeb;\n\t\t--secondary-table-font-color: #000000;\n\t\t--tertiary-table-color: #ff4500;\n\t\t--tertiary-table-font-color: #000000;\n\t\t--warning-color: #ffc107;\n\t\t--warning-font-color: #000000;\n\t\t--warning-hover-color: #e0a800;\n\t\t--warning-shadow-color: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n\t\t--success-color: #28a745;\n\t\t--success-font-color: #ffffff;\n\t\t--success-hover-color: #218838;\n\t\t--success-shadow-color: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n\t\t--danger-color: #dc3545;\n\t\t--danger-font-color: #ffffff;\n\t\t--danger-hover-color: #c82333;\n\t\t--danger-shadow-color: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n\t\t--info-color: #17a2b8;\n\t\t--info-font-color: #ffffff;\n\t\t--info-hover-color: #138496;\n\t\t--info-shadow-color: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n\t\t--primary-color: #007bff;\n\t\t--primary-font-color: #ffffff;\n\t\t--primary-hover-color: #0069d9;\n\t\t--primary-shadow-color: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n\t\t--secondary-color: #868e96;\n\t\t--secondary-font-color: #ffffff;\n\t\t--secondary-hover-color: #5a6268;\n\t\t--secondary-shadow-color: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n\t}\n\n\t.settings-shell {\n\t\tposition: relative;\n\t\toverflow: visible;\n\t\tpadding: 12px 8px 32px;\n\t\tbackground: radial-gradient(circle at 15% 20%, rgba(111, 136, 255, 0.12), transparent 35%),\n\t\t\tradial-gradient(circle at 80% 0%, rgba(255, 130, 92, 0.12), transparent 32%),\n\t\t\tlinear-gradient(135deg, #f7f9ff 0%, #ffffff 60%, #f5f7fb 100%);\n\t}\n\n\t.aurora {\n\t\tposition: absolute;\n\t\twidth: 420px;\n\t\theight: 420px;\n\t\tborder-radius: 50%;\n\t\tfilter: blur(70px);\n\t\topacity: .55;\n\t\tmix-blend-mode: screen;\n\t\tanimation: drift 18s ease-in-out infinite alternate;\n\t\tz-index: 0;\n\t}\n\n\t.aurora.aurora-one {\n\t\tbackground: radial-gradient(circle, rgba(82, 163, 255, .7), rgba(134, 120, 255, .25));\n\t\ttop: -120px;\n\t\tleft: -70px;\n\t}\n\n\t.aurora.aurora-two {\n\t\tbackground: radial-gradient(circle, rgba(255, 147, 92, .6), rgba(255, 227, 187, .35));\n\t\tbottom: -140px;\n\t\tright: -40px;\n\t\tanimation-duration: 22s;\n\t}\n\n\t.settings-hero {\n\t\tposition: relative;\n\t\tz-index: 1;\n\t\tdisplay: grid;\n\t\tgrid-template-columns: repeat(auto-fit, minmax(320px, 1fr));\n\t\tgap: 16px;\n\t\talign-items: center;\n\t\tmargin-bottom: 18px;\n\t}\n\n\t.glass-card {\n\t\tposition: relative;\n\t\tbackground: rgba(255, 255, 255, .78);\n\t\tborder: 1px solid rgba(255, 255, 255, .55);\n\t\tbox-shadow: 0 10px 40px rgba(54, 74, 120, .14), inset 0 0 0 1px rgba(255, 255, 255, .32);\n\t\tborder-radius: 18px;\n\t\tpadding: 18px;\n\t\toverflow: hidden;\n\t}\n\n\t.glass-card::before {\n\t\tcontent: \'\';\n\t\tposition: absolute;\n\t\tinset: 0;\n\t\tborder-radius: inherit;\n\t\tpointer-events: none;\n\t\tz-index: 0;\n\t}\n\n\t.hero-main h2 {\n\t\tfont-weight: 800;\n\t\tfont-size: 26px;\n\t\tmargin-bottom: 8px;\n\t\tcolor: #0f172a;\n\t}\n\n\t.hero-main p {\n\t\tcolor: #4b5563;\n\t\tmargin-bottom: 12px;\n\t}\n\n\t.hero-chip {\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tgap: 6px;\n\t\tpadding: 6px 12px;\n\t\tborder-radius: 999px;\n\t\tfont-weight: 700;\n\t\tcolor: #1f2937;\n\t\tbackground: linear-gradient(120deg, rgba(99, 102, 241, .1), rgba(16, 185, 129, .1), rgba(59, 130, 246, .12));\n\t\tborder: 1px solid rgba(99, 102, 241, .25);\n\t\tmargin-bottom: 10px;\n\t\ttext-transform: uppercase;\n\t\tletter-spacing: .04em;\n\t\tfont-size: 12px;\n\t}\n\n\t.hero-actions {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\tgap: 12px;\n\t\talign-items: center;\n\t\tmargin-top: 12px;\n\t}\n\n\t.neon-btn {\n\t\tposition: relative;\n\t\tborder: 1px solid rgba(15, 23, 42, .1);\n\t\tbackground: linear-gradient(120deg, rgba(99, 102, 241, .15), rgba(59, 130, 246, .08));\n\t\tcolor: #0f172a;\n\t\tfont-weight: 700;\n\t\tpadding: 10px 16px;\n\t\tborder-radius: 12px;\n\t\tbox-shadow: 0 10px 24px rgba(99, 102, 241, .15);\n\t\ttransition: transform .2s ease, box-shadow .2s ease, border-color .2s ease;\n\t}\n\n\t.neon-btn:hover {\n\t\ttransform: translateY(-2px);\n\t\tborder-color: rgba(99, 102, 241, .45);\n\t\tbox-shadow: 0 14px 26px rgba(99, 102, 241, .22);\n\t}\n\n\t.save-button form-button ::ng-deep button {\n\t\tborder-radius: 12px;\n\t\tfont-weight: 800;\n\t\tletter-spacing: .01em;\n\t\tpadding: 11px 18px;\n\t\tbox-shadow: 0 10px 26px rgba(16, 185, 129, .24);\n\t}\n\n\t.hero-preview {\n\t\tposition: relative;\n\t}\n\n\t.preview-card {\n\t\tborder-radius: 16px;\n\t\tpadding: 16px;\n\t\tbackground: radial-gradient(circle at 20% 20%, rgba(255, 255, 255, .7), rgba(255, 255, 255, .52));\n\t\tbox-shadow: inset 0 1px 0 rgba(255, 255, 255, .8), 0 12px 30px rgba(80, 110, 185, .16);\n\t\tborder: 1px solid rgba(255, 255, 255, .6);\n\t}\n\n\t.preview-title {\n\t\tfont-weight: 800;\n\t\tmargin-bottom: 8px;\n\t\tcolor: #111827;\n\t}\n\n\t.swatch-row {\n\t\tdisplay: grid;\n\t\tgrid-template-columns: repeat(auto-fit, minmax(140px, 1fr));\n\t\tgap: 10px;\n\t}\n\n\t.swatch {\n\t\tborder-radius: 12px;\n\t\tpadding: 10px;\n\t\tcolor: #0f172a;\n\t\tfont-weight: 700;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: space-between;\n\t\tbox-shadow: inset 0 1px 0 rgba(255, 255, 255, .45);\n\t\topacity: .98;\n\t}\n\n\t.swatch span {\n\t\tfont-size: 12px;\n\t\tfont-weight: 600;\n\t\tcolor: rgba(15, 23, 42, .85);\n\t}\n\n\t.preview-pulse {\n\t\tposition: absolute;\n\t\twidth: 120px;\n\t\theight: 120px;\n\t\tborder-radius: 50%;\n\t\tbackground: radial-gradient(circle, rgba(16, 185, 129, .3), transparent 60%);\n\t\tbottom: -18px;\n\t\tright: -14px;\n\t\tfilter: blur(12px);\n\t\tanimation: pulse 2.4s ease-in-out infinite;\n\t}\n\n\t.hero-metrics {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\tgap: 8px;\n\t\tmargin-top: 14px;\n\t}\n\n\t.metric-pill {\n\t\tbackground: rgba(15, 23, 42, .06);\n\t\tborder: 1px solid rgba(15, 23, 42, .08);\n\t\tborder-radius: 999px;\n\t\tpadding: 8px 12px;\n\t\tfont-weight: 700;\n\t\tcolor: #0f172a;\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tgap: 6px;\n\t}\n\n\t.section-grid {\n\t\tdisplay: grid;\n\t\tgrid-template-columns: repeat(auto-fit, minmax(320px, 1fr));\n\t\tgap: 14px;\n\t\tposition: relative;\n\t\tz-index: 1;\n\t}\n\n\t.section-card {\n\t\tposition: relative;\n\t\toverflow: visible;\n\t}\n\n\t.section-heading {\n\t\tmargin-bottom: 12px;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: space-between;\n\t\tgap: 10px;\n\t\tflex-wrap: wrap;\n\t}\n\n\t.section-heading h3 {\n\t\tmargin: 0;\n\t\tfont-weight: 800;\n\t\tcolor: #0f172a;\n\t}\n\n\t.section-heading p {\n\t\tmargin: 0;\n\t\tcolor: #4b5563;\n\t}\n\n\t.field-grid {\n\t\tdisplay: grid;\n\t\tgrid-template-columns: repeat(auto-fit, minmax(240px, 1fr));\n\t\tgap: 12px;\n\t}\n\n\t.field-card {\n\t\tpadding: 12px;\n\t\tborder-radius: 14px;\n\t\tborder: 1px solid rgba(15, 23, 42, .06);\n\t\tbackground: rgba(255, 255, 255, .85);\n\t\tbox-shadow: inset 0 1px 0 rgba(255, 255, 255, .7);\n\t\ttransition: transform .2s ease, box-shadow .2s ease;\n\t}\n\n\t.field-card:hover {\n\t\tbox-shadow: 0 8px 22px rgba(99, 102, 241, .12);\n\t}\n\n\t/* Avoid transforming the sticky select card so the fixed overlay positions correctly. */\n\t.sticky-select-card:hover {\n\t\ttransform: none;\n\t}\n\n\t.sticky-section-card {\n\t\tanimation: none;\n\t\ttransform: none;\n\t}\n\n\t.field-label {\n\t\tfont-weight: 700;\n\t\tcolor: #111827;\n\t\tmargin-bottom: 4px;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: space-between;\n\t\tgap: 6px;\n\t}\n\n\t.field-hint {\n\t\tfont-size: 12px;\n\t\tcolor: #6b7280;\n\t\tmargin: 0;\n\t}\n\n\t.input-bevel {\n\t\tborder-radius: 12px;\n\t\tborder: 1px solid rgba(15, 23, 42, .1);\n\t\tbackground: rgba(255, 255, 255, .92);\n\t\tbox-shadow: inset 0 1px 0 rgba(255, 255, 255, .8);\n\t\tpadding: 10px 12px;\n\t\twidth: 100%;\n\t}\n\n\t.toggle {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 8px;\n\t}\n\n\t.toggle-input {\n\t\tdisplay: none;\n\t}\n\n\t.toggle-track {\n\t\twidth: 54px;\n\t\theight: 30px;\n\t\tborder-radius: 999px;\n\t\tbackground: linear-gradient(120deg, rgba(15, 23, 42, .08), rgba(15, 23, 42, .15));\n\t\tposition: relative;\n\t\tbox-shadow: inset 0 1px 0 rgba(255, 255, 255, .6);\n\t\tborder: 1px solid rgba(15, 23, 42, .12);\n\t\ttransition: background .2s ease;\n\t}\n\n\t.toggle-thumb {\n\t\tposition: absolute;\n\t\ttop: 3px;\n\t\tleft: 3px;\n\t\twidth: 24px;\n\t\theight: 24px;\n\t\tborder-radius: 50%;\n\t\tbackground: linear-gradient(135deg, #63a4ff, #83eaf1);\n\t\tbox-shadow: 0 8px 16px rgba(99, 102, 241, .35);\n\t\ttransition: transform .2s ease;\n\t}\n\n\t.toggle-input:checked + .toggle-track {\n\t\tbackground: linear-gradient(120deg, rgba(16, 185, 129, .15), rgba(52, 211, 153, .25));\n\t\tborder-color: rgba(16, 185, 129, .45);\n\t}\n\n\t.toggle-input:checked + .toggle-track .toggle-thumb {\n\t\ttransform: translateX(24px);\n\t\tbackground: linear-gradient(135deg, #10b981, #22d3ee);\n\t\tbox-shadow: 0 10px 18px rgba(16, 185, 129, .32);\n\t}\n\n\t.toggle-state {\n\t\tfont-weight: 700;\n\t\tcolor: #0f172a;\n\t}\n\n\t.color-grid {\n\t\tdisplay: grid;\n\t\tgrid-template-columns: repeat(auto-fit, minmax(260px, 1fr));\n\t\tgap: 10px;\n\t\tmargin-top: 10px;\n\t}\n\n\t.color-card {\n\t\tborder-radius: 14px;\n\t\tpadding: 12px;\n\t\tborder: 1px solid rgba(15, 23, 42, .06);\n\t\tbackground: rgba(255, 255, 255, .9);\n\t\tdisplay: grid;\n\t\tgrid-template-columns: 1fr 120px;\n\t\tgap: 10px;\n\t\talign-items: center;\n\t}\n\n\t.color-chip {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 4px;\n\t}\n\n\t.color-name {\n\t\tfont-weight: 700;\n\t\tcolor: #0f172a;\n\t}\n\n\t.color-preview {\n\t\tborder-radius: 12px;\n\t\theight: 48px;\n\t\tborder: 1px solid rgba(15, 23, 42, .08);\n\t\tbox-shadow: inset 0 1px 0 rgba(255, 255, 255, .7);\n\t}\n\n\t.color-input {\n\t\theight: 48px;\n\t\tborder: 1px solid rgba(15, 23, 42, .08);\n\t\tborder-radius: 12px;\n\t\tbox-shadow: inset 0 1px 0 rgba(255, 255, 255, .75);\n\t\twidth: 100%;\n\t\tcursor: pointer;\n\t}\n\n\t.palette-preview {\n\t\tdisplay: grid;\n\t\tgrid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n\t\tgap: 10px;\n\t\tmargin-bottom: 8px;\n\t}\n\n\t.preview-table {\n\t\tborder-radius: 12px;\n\t\tpadding: 10px;\n\t\tbackground: linear-gradient(160deg, rgba(255, 255, 255, .85), rgba(255, 255, 255, .7));\n\t\tborder: 1px solid rgba(15, 23, 42, .08);\n\t\tbox-shadow: inset 0 1px 0 rgba(255, 255, 255, .8);\n\t}\n\n\t.preview-table .row-swatch {\n\t\tborder-radius: 10px;\n\t\tpadding: 10px;\n\t\tfont-weight: 700;\n\t\tmargin-bottom: 6px;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: space-between;\n\t\tbox-shadow: inset 0 1px 0 rgba(255, 255, 255, .6);\n\t}\n\n\t.preview-table .row-swatch:last-child {\n\t\tmargin-bottom: 0;\n\t}\n\n\t.button-demo {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\tgap: 8px;\n\t\tmargin-bottom: 10px;\n\t}\n\n\t.btn-warning {\n\t\tcolor: var(--warning-font-color);\n\t\tbackground-color: var(--warning-color);\n\t\tborder-color: var(--warning-color);\n\t}\n\n\t.btn-warning:focus,\n\t.btn-warning.focus {\n\t\tbox-shadow: var(--warning-shadow-color);\n\t}\n\n\t.btn-warning:hover {\n\t\tcolor: var(--warning-font-color);\n\t\tbackground-color: var(--warning-hover-color);\n\t\tborder-color: var(--warning-hover-color);\n\t}\n\n\t.btn-success {\n\t\tcolor: var(--success-font-color);\n\t\tbackground-color: var(--success-color);\n\t\tborder-color: var(--success-color);\n\t}\n\n\t.btn-success:focus,\n\t.btn-success.focus {\n\t\tbox-shadow: var(--success-shadow-color);\n\t}\n\n\t.btn-success:hover {\n\t\tcolor: var(--success-font-color);\n\t\tbackground-color: var(--success-hover-color);\n\t\tborder-color: var(--success-hover-color);\n\t}\n\n\t.btn-danger {\n\t\tcolor: var(--danger-font-color);\n\t\tbackground-color: var(--danger-color);\n\t\tborder-color: var(--danger-color);\n\t}\n\n\t.btn-danger:focus,\n\t.btn-danger.focus {\n\t\tbox-shadow: var(--danger-shadow-color);\n\t}\n\n\t.btn-danger:hover {\n\t\tcolor: var(--danger-font-color);\n\t\tbackground-color: var(--danger-hover-color);\n\t\tborder-color: var(--danger-hover-color);\n\t}\n\n\t.btn-info {\n\t\tcolor: var(--info-font-color);\n\t\tbackground-color: var(--info-color);\n\t\tborder-color: var(--info-color);\n\t}\n\n\t.btn-info:focus,\n\t.btn-info.focus {\n\t\tbox-shadow: var(--info-shadow-color);\n\t}\n\n\t.btn-info:hover {\n\t\tcolor: var(--info-font-color);\n\t\tbackground-color: var(--info-hover-color);\n\t\tborder-color: var(--info-hover-color);\n\t}\n\n\t.btn-primary {\n\t\tcolor: var(--primary-font-color);\n\t\tbackground-color: var(--primary-color);\n\t\tborder-color: var(--primary-color);\n\t}\n\n\t.btn-primary:focus,\n\t.btn-primary.focus {\n\t\tbox-shadow: var(--primary-shadow-color);\n\t}\n\n\t.btn-primary:hover {\n\t\tcolor: var(--primary-font-color);\n\t\tbackground-color: var(--primary-hover-color);\n\t\tborder-color: var(--primary-hover-color);\n\t}\n\n\t.btn-secondary {\n\t\tcolor: var(--secondary-font-color);\n\t\tbackground-color: var(--secondary-color);\n\t\tborder-color: var(--secondary-color);\n\t}\n\n\t.btn-secondary:focus,\n\t.btn-secondary.focus {\n\t\tbox-shadow: var(--secondary-shadow-color);\n\t}\n\n\t.btn-secondary:hover {\n\t\tcolor: var(--secondary-font-color);\n\t\tbackground-color: var(--secondary-hover-color);\n\t\tborder-color: var(--secondary-hover-color);\n\t}\n\n\t.ng-select .ng-select-container {\n\t\tborder-radius: 12px !important;\n\t\tmin-height: 42px !important;\n\t\tborder-color: rgba(15, 23, 42, .1) !important;\n\t\tbox-shadow: inset 0 1px 0 rgba(255, 255, 255, .7);\n\t}\n\n\t.sticky-empty {\n\t\tbackground: rgba(23, 162, 184, .12);\n\t\tcolor: #0f4c75;\n\t\tborder: 1px solid rgba(23, 162, 184, .2);\n\t\tborder-radius: 12px;\n\t\tpadding: 12px;\n\t}\n\n\t.animate-rise {\n\t\tanimation: rise .5s ease;\n\t}\n\n\t@keyframes drift {\n\t\tfrom {\n\t\t\ttransform: translateY(0) translateX(0);\n\t\t}\n\t\tto {\n\t\t\ttransform: translateY(-30px) translateX(20px);\n\t\t}\n\t}\n\n\t@keyframes pulse {\n\t\t0% {\n\t\t\ttransform: scale(1);\n\t\t\topacity: .6;\n\t\t}\n\t\t50% {\n\t\t\ttransform: scale(1.08);\n\t\t\topacity: .9;\n\t\t}\n\t\t100% {\n\t\t\ttransform: scale(1);\n\t\t\topacity: .6;\n\t\t}\n\t}\n\n\t@keyframes rise {\n\t\tfrom {\n\t\t\topacity: 0;\n\t\t\ttransform: translateY(12px);\n\t\t}\n\t\tto {\n\t\t\topacity: 1;\n\t\t\ttransform: translateY(0);\n\t\t}\n\t}\n</style>\n\n<div class="settings-shell">\n\t<div class="aurora aurora-one"></div>\n\t<div class="aurora aurora-two"></div>\n\t<form [formGroup]="form" novalidate (ngSubmit)="submitForm(form)">\n\t\t<div class="settings-hero glass-card animate-rise">\n\t\t\t<div class="hero-main">\n\t\t\t\t<div class="hero-chip">User Settings</div>\n\t\t\t\t<h2>Welcome {{ user?.fullname || user?.username || user?.email || \'back\' }}!</h2>\n\t\t\t\t<p>Shape {{ client || \'your workspace\' }} into something joyful, colorful and uniquely you.</p>\n\t\t\t\t<div class="hero-actions">\n\t\t\t\t\t<button type="button" class="neon-btn" (click)="reset()">Reset to defaults</button>\n\t\t\t\t\t<div class="save-button">\n\t\t\t\t\t\t<form-button [form]="form" [disabled]="disableFormButton"></form-button>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class="hero-metrics">\n\t\t\t\t\t<div class="metric-pill">\n\t\t\t\t\t\t<span>Entries / page</span>\n\t\t\t\t\t\t<strong>{{ form.controls.entries_per_page.value }}</strong>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="metric-pill">\n\t\t\t\t\t\t<span>Font size</span>\n\t\t\t\t\t\t<strong>{{ form.controls.font_size.value }}px</strong>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="metric-pill">\n\t\t\t\t\t\t<span>Week starts</span>\n\t\t\t\t\t\t<strong>{{ form.controls.date_picker_day_start.value === \'M\' ? \'Monday\' : \'Sunday\' }}</strong>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class="hero-preview">\n\t\t\t\t<div class="preview-card">\n\t\t\t\t\t<div class="preview-title">Live palette peek</div>\n\t\t\t\t\t<div class="swatch-row">\n\t\t\t\t\t\t<div class="swatch" [style.background]="form.controls.primary_color.value" [style.color]="form.controls.primary_font_color.value">\n\t\t\t\t\t\t\t<span>Primary buttons</span>\n\t\t\t\t\t\t\t{{ form.controls.primary_color.value }}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class="swatch" [style.background]="form.controls.success_color.value" [style.color]="form.controls.success_font_color.value">\n\t\t\t\t\t\t\t<span>Success tone</span>\n\t\t\t\t\t\t\t{{ form.controls.success_color.value }}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class="swatch" [style.background]="form.controls.table_color.value" [style.color]="form.controls.table_font_color.value">\n\t\t\t\t\t\t\t<span>Primary table</span>\n\t\t\t\t\t\t\t{{ form.controls.table_color.value }}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class="preview-pulse"></div>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div class="section-grid">\n\t\t\t<div class="section-card glass-card animate-rise">\n\t\t\t\t<div class="section-heading">\n\t\t\t\t\t<h3>Experience preferences</h3>\n\t\t\t\t\t<p>Tune how the app greets you each day.</p>\n\t\t\t\t</div>\n\t\t\t\t<div class="field-grid">\n\t\t\t\t\t<label class="field-card">\n\t\t\t\t\t\t<div class="field-label">Collapsable menu</div>\n\t\t\t\t\t\t<p class="field-hint">Keep navigation cozy when you want focus.</p>\n\t\t\t\t\t\t<div class="toggle">\n\t\t\t\t\t\t\t<input class="toggle-input" type="checkbox" formControlName="collapsable_menu" />\n\t\t\t\t\t\t\t<span class="toggle-track">\n\t\t\t\t\t\t\t\t<span class="toggle-thumb"></span>\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t<div class="toggle-state">\n\t\t\t\t\t\t\t\t@if (form.controls.collapsable_menu.value) {\n\t\t\t\t\t\t\t\t\tCompact\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t@else {\n\t\t\t\t\t\t\t\t\tOpen\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</label>\n\t\t\t\t\t<div class="field-card">\n\t\t\t\t\t\t<div class="field-label">Default entries per page</div>\n\t\t\t\t\t\t<p class="field-hint">Pick your sweet spot for list density.</p>\n\t\t\t\t\t\t\t\t<ng-select class="input-bevel" [ngClass]="[form.controls.entries_per_page.valid ? \'is-valid\' : \'is-invalid\']" formControlName="entries_per_page" [clearable]="false" [searchable]="false">\n\t\t\t\t\t\t\t\t\t<ng-option value="25">25</ng-option>\n\t\t\t\t\t\t\t\t\t<ng-option value="50">50</ng-option>\n\t\t\t\t\t\t\t\t\t<ng-option value="100">100</ng-option>\n\t\t\t\t\t\t\t\t\t<ng-option value="250">250</ng-option>\n\t\t\t\t\t\t\t\t</ng-select>\n\t\t\t\t\t\t@if (!form.controls.entries_per_page.valid) {\n\t\t\t\t\t\t\t<div class="text-danger mt-1">Entries per page is required</div>\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="field-card">\n\t\t\t\t\t\t<div class="field-label">Select search style</div>\n\t\t\t\t\t\t<p class="field-hint">Decide if typing should be fuzzy or exact.</p>\n\t\t\t\t\t\t<ng-select class="input-bevel" [ngClass]="[form.controls.ng_select_search_mode.valid ? \'is-valid\' : \'is-invalid\']" formControlName="ng_select_search_mode" [clearable]="false" [searchable]="false">\n\t\t\t\t\t\t\t<ng-option value="fuzzy">Fuzzy (flexible matching)</ng-option>\n\t\t\t\t\t\t\t<ng-option value="exact">Exact (must contain the term)</ng-option>\n\t\t\t\t\t\t</ng-select>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="field-card">\n\t\t\t\t\t\t<div class="field-label">Font size</div>\n\t\t\t\t\t\t<p class="field-hint">We recommend between 11–14px for quick scanning.</p>\n\t\t\t\t\t\t<input class="input-bevel" [ngClass]="[form.controls.font_size.valid ? \'is-valid\' : \'is-invalid\']" type="number" formControlName="font_size" (keyup)="changePrimaryFontSize()" />\n\t\t\t\t\t\t@if (form.controls.font_size.hasError(\'required\')) {\n\t\t\t\t\t\t\t<div class="text-danger mt-1">Font size is required</div>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (form.controls.font_size.hasError(\'wholeNumbersGreaterThanZero\')) {\n\t\t\t\t\t\t\t<div class="text-danger mt-1">Font size is invalid</div>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (form.controls.font_size.hasError(\'maxValue\')) {\n\t\t\t\t\t\t\t<div class="text-danger mt-1">Font size can not exceed 18</div>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (form.controls.font_size.hasError(\'minValue\')) {\n\t\t\t\t\t\t\t<div class="text-danger mt-1">Font size can not be less than 8</div>\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="field-card">\n\t\t\t\t\t\t<div class="field-label">Week start (date picker)</div>\n\t\t\t\t\t\t<p class="field-hint">Pick where your planner begins.</p>\n\t\t\t\t\t\t<ng-select class="input-bevel" [ngClass]="[form.controls.date_picker_day_start.valid ? \'is-valid\' : \'is-invalid\']" formControlName="date_picker_day_start" [clearable]="false" [searchable]="false">\n\t\t\t\t\t\t\t<ng-option [value]="\'S\'">Sunday</ng-option>\n\t\t\t\t\t\t\t<ng-option [value]="\'M\'">Monday</ng-option>\n\t\t\t\t\t\t</ng-select>\n\t\t\t\t\t\t@if (form.controls.date_picker_day_start.hasError(\'required\')) {\n\t\t\t\t\t\t\t<div class="text-danger mt-1">Week start is required</div>\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="field-card">\n\t\t\t\t\t\t<div class="field-label">Starting page</div>\n\t\t\t\t\t\t<p class="field-hint">Jump right into the view you love most.</p>\n\t\t\t\t\t\t<ng-select class="input-bevel" [ngClass]="[form.controls.opening_route.valid ? \'is-valid\' : \'\']" formControlName="opening_route" [clearable]="false" [searchable]="false">\n\t\t\t\t\t\t\t<ng-option value="/home">Home</ng-option>\n\t\t\t\t\t\t\t@for (view of views; track view.display) {\n\t\t\t\t\t\t\t\t<ng-option [value]="view.value">{{ view.display | titleCase }}</ng-option>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ng-select>\n\t\t\t\t\t</div>\n\t\t\t\t\t@if (client === \'Ace Completions\') {\n\t\t\t\t\t\t<div class="field-card">\n\t\t\t\t\t\t\t<div class="field-label">Routing preference</div>\n\t\t\t\t\t\t\t<p class="field-hint">Decide how links open while you multitask.</p>\n\t\t\t\t\t\t\t<ng-select class="input-bevel" [ngClass]="[form.controls.routing_preference.valid ? \'is-valid\' : \'\']" formControlName="routing_preference" [clearable]="false" [searchable]="false">\n\t\t\t\t\t\t\t\t<ng-option value="alwaysAsk">Always Ask</ng-option>\n\t\t\t\t\t\t\t\t<ng-option value="sameTab">Same Tab</ng-option>\n\t\t\t\t\t\t\t\t<ng-option value="newTab">New Tab</ng-option>\n\t\t\t\t\t\t\t\t<ng-option value="newWindow">New Window</ng-option>\n\t\t\t\t\t\t\t</ng-select>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<div class="section-card glass-card animate-rise">\n\t\t\t\t<div class="section-heading">\n\t\t\t\t\t<h3>Table palette</h3>\n\t\t\t\t\t<p>Pick vibrant layers for your data rows.</p>\n\t\t\t\t</div>\n\t\t\t\t<div class="palette-preview">\n\t\t\t\t\t<div class="preview-table">\n\t\t\t\t\t\t<div class="row-swatch" [style.background]="form.controls.table_color.value" [style.color]="form.controls.table_font_color.value">\n\t\t\t\t\t\t\tPrimary header\n\t\t\t\t\t\t\t<span>{{ form.controls.table_font_color.value }}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class="row-swatch" [style.background]="form.controls.secondary_table_color.value" [style.color]="form.controls.secondary_table_font_color.value">\n\t\t\t\t\t\t\tSecondary header\n\t\t\t\t\t\t\t<span>{{ form.controls.secondary_table_font_color.value }}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class="row-swatch" [style.background]="form.controls.tertiary_table_color.value" [style.color]="form.controls.tertiary_table_font_color.value">\n\t\t\t\t\t\t\tTertiary header\n\t\t\t\t\t\t\t<span>{{ form.controls.tertiary_table_font_color.value }}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="preview-table">\n\t\t\t\t\t\t<div class="row-swatch" [style.background]="form.controls.warning_color.value" [style.color]="form.controls.warning_font_color.value">\n\t\t\t\t\t\t\tWarnings\n\t\t\t\t\t\t\t<span>{{ form.controls.warning_hover_color.value }}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class="row-swatch" [style.background]="form.controls.success_color.value" [style.color]="form.controls.success_font_color.value">\n\t\t\t\t\t\t\tSuccess\n\t\t\t\t\t\t\t<span>{{ form.controls.success_hover_color.value }}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class="row-swatch" [style.background]="form.controls.info_color.value" [style.color]="form.controls.info_font_color.value">\n\t\t\t\t\t\t\tInfo\n\t\t\t\t\t\t\t<span>{{ form.controls.info_hover_color.value }}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class="color-grid">\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Primary table background</div>\n\t\t\t\t\t\t\t<div class="field-hint">The hero row that anchors your data.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.table_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="table_color" (ngModelChange)="changePrimaryColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Primary table font</div>\n\t\t\t\t\t\t\t<div class="field-hint">Keep it crisp and readable.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.table_font_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="table_font_color" (ngModelChange)="changePrimaryFontColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Secondary table background</div>\n\t\t\t\t\t\t\t<div class="field-hint">Great for supporting sections.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.secondary_table_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="secondary_table_color" (ngModelChange)="changeSecondaryColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Secondary table font</div>\n\t\t\t\t\t\t\t<div class="field-hint">Match contrast with the new hue.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.secondary_table_font_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="secondary_table_font_color" (ngModelChange)="changeSecondaryFontColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Tertiary table background</div>\n\t\t\t\t\t\t\t<div class="field-hint">For extra callouts.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.tertiary_table_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="tertiary_table_color" (ngModelChange)="changeTertiaryColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Tertiary table font</div>\n\t\t\t\t\t\t\t<div class="field-hint">Balance brightness for legibility.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.tertiary_table_font_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="tertiary_table_font_color" (ngModelChange)="changeTertiaryFontColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<div class="section-card glass-card animate-rise">\n\t\t\t\t<div class="section-heading">\n\t\t\t\t\t<h3>Button glow-up</h3>\n\t\t\t\t\t<p>Make clicks feel friendly and intentional.</p>\n\t\t\t\t</div>\n\t\t\t\t<div class="button-demo">\n\t\t\t\t\t<button type="button" class="btn btn-success">Success</button>\n\t\t\t\t\t<button type="button" class="btn btn-warning">Warning</button>\n\t\t\t\t\t<button type="button" class="btn btn-danger">Danger</button>\n\t\t\t\t\t<button type="button" class="btn btn-info">Info</button>\n\t\t\t\t\t<button type="button" class="btn btn-primary">Primary</button>\n\t\t\t\t\t<button type="button" class="btn btn-secondary">Secondary</button>\n\t\t\t\t</div>\n\t\t\t\t<div class="color-grid">\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Success background</div>\n\t\t\t\t\t\t\t<div class="field-hint">Celebrate wins.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.success_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="success_color" (ngModelChange)="changeSuccessColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Success font</div>\n\t\t\t\t\t\t\t<div class="field-hint">Keep it sharp.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.success_font_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="success_font_color" (ngModelChange)="changeSuccessFontColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Success hover</div>\n\t\t\t\t\t\t\t<div class="field-hint">How the button greets hover.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.success_hover_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="success_hover_color" (ngModelChange)="changeSuccessHoverColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Warning background</div>\n\t\t\t\t\t\t\t<div class="field-hint">Gentle but visible.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.warning_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="warning_color" (ngModelChange)="changeWarningColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Warning font</div>\n\t\t\t\t\t\t\t<div class="field-hint">High contrast copy.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.warning_font_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="warning_font_color" (ngModelChange)="changeWarningFontColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Warning hover</div>\n\t\t\t\t\t\t\t<div class="field-hint">Add motion to caution.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.warning_hover_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="warning_hover_color" (ngModelChange)="changeWarningHoverColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Danger background</div>\n\t\t\t\t\t\t\t<div class="field-hint">Clear stop signal.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.danger_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="danger_color" (ngModelChange)="changeDangerColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Danger font</div>\n\t\t\t\t\t\t\t<div class="field-hint">Stay readable on alert.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.danger_font_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="danger_font_color" (ngModelChange)="changeDangerFontColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Danger hover</div>\n\t\t\t\t\t\t\t<div class="field-hint">Softer on hover.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.danger_hover_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="danger_hover_color" (ngModelChange)="changeDangerHoverColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Info background</div>\n\t\t\t\t\t\t\t<div class="field-hint">Highlight helpful hints.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.info_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="info_color" (ngModelChange)="changeInfoColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Info font</div>\n\t\t\t\t\t\t\t<div class="field-hint">Keep tips legible.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.info_font_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="info_font_color" (ngModelChange)="changeInfoFontColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Info hover</div>\n\t\t\t\t\t\t\t<div class="field-hint">Gentle motion on hover.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.info_hover_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="info_hover_color" (ngModelChange)="changeInfoHoverColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Primary background</div>\n\t\t\t\t\t\t\t<div class="field-hint">The hero action.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.primary_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="primary_color" (ngModelChange)="changePrimaryButtonColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Primary font</div>\n\t\t\t\t\t\t\t<div class="field-hint">Strong contrast for CTA.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.primary_font_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="primary_font_color" (ngModelChange)="changePrimaryButtonFontColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Primary hover</div>\n\t\t\t\t\t\t\t<div class="field-hint">A playful shift on hover.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.primary_hover_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="primary_hover_color" (ngModelChange)="changePrimaryButtonHoverColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Secondary background</div>\n\t\t\t\t\t\t\t<div class="field-hint">Great for subtle actions.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.secondary_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="secondary_color" (ngModelChange)="changeSecondaryButtonColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Secondary font</div>\n\t\t\t\t\t\t\t<div class="field-hint">Keep it balanced.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.secondary_font_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="secondary_font_color" (ngModelChange)="changeSecondaryButtonFontColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Secondary hover</div>\n\t\t\t\t\t\t\t<div class="field-hint">Add a soft glow.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.secondary_hover_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="secondary_hover_color" (ngModelChange)="changeSecondaryHoverColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<div class="section-card glass-card animate-rise sticky-section-card">\n\t\t\t\t<div class="section-heading">\n\t\t\t\t\t<h3>Sticky select defaults</h3>\n\t\t\t\t\t<p>Teach ResolveIO which choices you love.</p>\n\t\t\t\t</div>\n\t\t\t\t@if (!stickySelects.length) {\n\t\t\t\t\t<div class="sticky-empty">\n\t\t\t\t\t\tNo sticky selects saved yet. Add a stickyKey on a select to remember your favorite defaults.\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t\t@else {\n\t\t\t\t\t@for (sticky of stickySelects; track sticky.key) {\n\t\t\t\t\t\t<div class="field-card sticky-select-card">\n\t\t\t\t\t\t\t<div class="field-label">{{ sticky.key }}</div>\n\t\t\t\t\t\t\t@if (sticky.options && sticky.options.length) {\n\t\t\t\t\t\t\t\t<ng-select\n\t\t\t\t\t\t\t\t\t[(ngModel)]="stickySelections[sticky.key]"\n\t\t\t\t\t\t\t\t\t[ngModelOptions]="{standalone: true}"\n\t\t\t\t\t\t\t\t\t[options]="sticky.options"\n\t\t\t\t\t\t\t\t\toptionValueKey="value"\n\t\t\t\t\t\t\t\t\toptionLabelKey="label"\n\t\t\t\t\t\t\t\t\t[searchable]="false"\n\t\t\t\t\t\t\t\t\tappendTo="body"\n\t\t\t\t\t\t\t\t\t[stickyAutoSave]="true"\n\t\t\t\t\t\t\t\t\t(ngModelChange)="updateStickyDefault(sticky.key, $event)">\n\t\t\t\t\t\t\t\t</ng-select>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@if (!sticky.options || !sticky.options.length) {\n\t\t\t\t\t\t\t\t<div class="text-muted">No saved options yet.</div>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t</div>\n\t\t</div>\n\t</form>\n</div>\n',styles:['.sticky-section-card,.sticky-section-card *{transform:none!important}:host{display:block}::ng-deep :root{--primary-table-color: #3b3ee3;--primary-table-font-color: #ffffff;--font-size: 12px;--secondary-table-color: #87ceeb;--secondary-table-font-color: #000000;--tertiary-table-color: #ff4500;--tertiary-table-font-color: #000000;--warning-color: #ffc107;--warning-font-color: #000000;--warning-hover-color: #e0a800;--warning-shadow-color: 0 0 0 .2rem rgba(222, 170, 12, .5);--success-color: #28a745;--success-font-color: #ffffff;--success-hover-color: #218838;--success-shadow-color: 0 0 0 .2rem rgba(72, 180, 97, .5);--danger-color: #dc3545;--danger-font-color: #ffffff;--danger-hover-color: #c82333;--danger-shadow-color: 0 0 0 .2rem rgba(225, 83, 97, .5);--info-color: #17a2b8;--info-font-color: #ffffff;--info-hover-color: #138496;--info-shadow-color: 0 0 0 .2rem rgba(58, 176, 195, .5);--primary-color: #007bff;--primary-font-color: #ffffff;--primary-hover-color: #0069d9;--primary-shadow-color: 0 0 0 .2rem rgba(38, 143, 255, .5);--secondary-color: #868e96;--secondary-font-color: #ffffff;--secondary-hover-color: #5a6268;--secondary-shadow-color: 0 0 0 .2rem rgba(130, 138, 145, .5)}.settings-shell{position:relative;overflow:visible;padding:12px 8px 32px;background:radial-gradient(circle at 15% 20%,rgba(111,136,255,.12),transparent 35%),radial-gradient(circle at 80% 0%,rgba(255,130,92,.12),transparent 32%),linear-gradient(135deg,#f7f9ff,#fff 60%,#f5f7fb)}.aurora{position:absolute;width:420px;height:420px;border-radius:50%;filter:blur(70px);opacity:.55;mix-blend-mode:screen;animation:drift 18s ease-in-out infinite alternate;z-index:0}.aurora.aurora-one{background:radial-gradient(circle,#52a3ffb3,#8678ff40);top:-120px;left:-70px}.aurora.aurora-two{background:radial-gradient(circle,#ff935c99,#ffe3bb59);bottom:-140px;right:-40px;animation-duration:22s}.settings-hero{position:relative;z-index:1;display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:16px;align-items:center;margin-bottom:18px}.glass-card{position:relative;background:#ffffffc7;border:1px solid rgba(255,255,255,.55);box-shadow:0 10px 40px #364a7824,inset 0 0 0 1px #ffffff52;border-radius:18px;padding:18px;overflow:hidden}.glass-card:before{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;z-index:0}.hero-main h2{font-weight:800;font-size:26px;margin-bottom:8px;color:#0f172a}.hero-main p{color:#4b5563;margin-bottom:12px}.hero-chip{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border-radius:999px;font-weight:700;color:#1f2937;background:linear-gradient(120deg,#6366f11a,#10b9811a,#3b82f61f);border:1px solid rgba(99,102,241,.25);margin-bottom:10px;text-transform:uppercase;letter-spacing:.04em;font-size:12px}.hero-actions{display:flex;flex-wrap:wrap;gap:12px;align-items:center;margin-top:12px}.neon-btn{position:relative;border:1px solid rgba(15,23,42,.1);background:linear-gradient(120deg,#6366f126,#3b82f614);color:#0f172a;font-weight:700;padding:10px 16px;border-radius:12px;box-shadow:0 10px 24px #6366f126;transition:transform .2s ease,box-shadow .2s ease,border-color .2s ease}.neon-btn:hover{transform:translateY(-2px);border-color:#6366f173;box-shadow:0 14px 26px #6366f138}.save-button form-button ::ng-deep button{border-radius:12px;font-weight:800;letter-spacing:.01em;padding:11px 18px;box-shadow:0 10px 26px #10b9813d}.hero-preview{position:relative}.preview-card{border-radius:16px;padding:16px;background:radial-gradient(circle at 20% 20%,#ffffffb3,#ffffff85);box-shadow:inset 0 1px #fffc,0 12px 30px #506eb929;border:1px solid rgba(255,255,255,.6)}.preview-title{font-weight:800;margin-bottom:8px;color:#111827}.swatch-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:10px}.swatch{border-radius:12px;padding:10px;color:#0f172a;font-weight:700;display:flex;align-items:center;justify-content:space-between;box-shadow:inset 0 1px #ffffff73;opacity:.98}.swatch span{font-size:12px;font-weight:600;color:#0f172ad9}.preview-pulse{position:absolute;width:120px;height:120px;border-radius:50%;background:radial-gradient(circle,rgba(16,185,129,.3),transparent 60%);bottom:-18px;right:-14px;filter:blur(12px);animation:pulse 2.4s ease-in-out infinite}.hero-metrics{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px}.metric-pill{background:#0f172a0f;border:1px solid rgba(15,23,42,.08);border-radius:999px;padding:8px 12px;font-weight:700;color:#0f172a;display:inline-flex;align-items:center;gap:6px}.section-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:14px;position:relative;z-index:1}.section-card{position:relative;overflow:visible}.section-heading{margin-bottom:12px;display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}.section-heading h3{margin:0;font-weight:800;color:#0f172a}.section-heading p{margin:0;color:#4b5563}.field-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px}.field-card{padding:12px;border-radius:14px;border:1px solid rgba(15,23,42,.06);background:#ffffffd9;box-shadow:inset 0 1px #ffffffb3;transition:transform .2s ease,box-shadow .2s ease}.field-card:hover{box-shadow:0 8px 22px #6366f11f}.sticky-select-card:hover{transform:none}.sticky-section-card{animation:none;transform:none}.field-label{font-weight:700;color:#111827;margin-bottom:4px;display:flex;align-items:center;justify-content:space-between;gap:6px}.field-hint{font-size:12px;color:#6b7280;margin:0}.input-bevel{border-radius:12px;border:1px solid rgba(15,23,42,.1);background:#ffffffeb;box-shadow:inset 0 1px #fffc;padding:10px 12px;width:100%}.toggle{display:flex;align-items:center;gap:8px}.toggle-input{display:none}.toggle-track{width:54px;height:30px;border-radius:999px;background:linear-gradient(120deg,#0f172a14,#0f172a26);position:relative;box-shadow:inset 0 1px #fff9;border:1px solid rgba(15,23,42,.12);transition:background .2s ease}.toggle-thumb{position:absolute;top:3px;left:3px;width:24px;height:24px;border-radius:50%;background:linear-gradient(135deg,#63a4ff,#83eaf1);box-shadow:0 8px 16px #6366f159;transition:transform .2s ease}.toggle-input:checked+.toggle-track{background:linear-gradient(120deg,#10b98126,#34d39940);border-color:#10b98173}.toggle-input:checked+.toggle-track .toggle-thumb{transform:translate(24px);background:linear-gradient(135deg,#10b981,#22d3ee);box-shadow:0 10px 18px #10b98152}.toggle-state{font-weight:700;color:#0f172a}.color-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:10px;margin-top:10px}.color-card{border-radius:14px;padding:12px;border:1px solid rgba(15,23,42,.06);background:#ffffffe6;display:grid;grid-template-columns:1fr 120px;gap:10px;align-items:center}.color-chip{display:flex;flex-direction:column;gap:4px}.color-name{font-weight:700;color:#0f172a}.color-preview{border-radius:12px;height:48px;border:1px solid rgba(15,23,42,.08);box-shadow:inset 0 1px #ffffffb3}.color-input{height:48px;border:1px solid rgba(15,23,42,.08);border-radius:12px;box-shadow:inset 0 1px #ffffffbf;width:100%;cursor:pointer}.palette-preview{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:10px;margin-bottom:8px}.preview-table{border-radius:12px;padding:10px;background:linear-gradient(160deg,#ffffffd9,#ffffffb3);border:1px solid rgba(15,23,42,.08);box-shadow:inset 0 1px #fffc}.preview-table .row-swatch{border-radius:10px;padding:10px;font-weight:700;margin-bottom:6px;display:flex;align-items:center;justify-content:space-between;box-shadow:inset 0 1px #fff9}.preview-table .row-swatch:last-child{margin-bottom:0}.button-demo{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:10px}.btn-warning{color:var(--warning-font-color);background-color:var(--warning-color);border-color:var(--warning-color)}.btn-warning:focus,.btn-warning.focus{box-shadow:var(--warning-shadow-color)}.btn-warning:hover{color:var(--warning-font-color);background-color:var(--warning-hover-color);border-color:var(--warning-hover-color)}.btn-success{color:var(--success-font-color);background-color:var(--success-color);border-color:var(--success-color)}.btn-success:focus,.btn-success.focus{box-shadow:var(--success-shadow-color)}.btn-success:hover{color:var(--success-font-color);background-color:var(--success-hover-color);border-color:var(--success-hover-color)}.btn-danger{color:var(--danger-font-color);background-color:var(--danger-color);border-color:var(--danger-color)}.btn-danger:focus,.btn-danger.focus{box-shadow:var(--danger-shadow-color)}.btn-danger:hover{color:var(--danger-font-color);background-color:var(--danger-hover-color);border-color:var(--danger-hover-color)}.btn-info{color:var(--info-font-color);background-color:var(--info-color);border-color:var(--info-color)}.btn-info:focus,.btn-info.focus{box-shadow:var(--info-shadow-color)}.btn-info:hover{color:var(--info-font-color);background-color:var(--info-hover-color);border-color:var(--info-hover-color)}.btn-primary{color:var(--primary-font-color);background-color:var(--primary-color);border-color:var(--primary-color)}.btn-primary:focus,.btn-primary.focus{box-shadow:var(--primary-shadow-color)}.btn-primary:hover{color:var(--primary-font-color);background-color:var(--primary-hover-color);border-color:var(--primary-hover-color)}.btn-secondary{color:var(--secondary-font-color);background-color:var(--secondary-color);border-color:var(--secondary-color)}.btn-secondary:focus,.btn-secondary.focus{box-shadow:var(--secondary-shadow-color)}.btn-secondary:hover{color:var(--secondary-font-color);background-color:var(--secondary-hover-color);border-color:var(--secondary-hover-color)}.ng-select .ng-select-container{border-radius:12px!important;min-height:42px!important;border-color:#0f172a1a!important;box-shadow:inset 0 1px #ffffffb3}.sticky-empty{background:#17a2b81f;color:#0f4c75;border:1px solid rgba(23,162,184,.2);border-radius:12px;padding:12px}.animate-rise{animation:rise .5s ease}@keyframes drift{0%{transform:translateY(0) translate(0)}to{transform:translateY(-30px) translate(20px)}}@keyframes pulse{0%{transform:scale(1);opacity:.6}50%{transform:scale(1.08);opacity:.9}to{transform:scale(1);opacity:.6}}@keyframes rise{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}\n'],dependencies:[{kind:"directive",type:i2.ɵNgNoValidate,selector:"form:not([ngNoForm]):not([ngNativeValidate])"},{kind:"directive",type:i2.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:i2.NumberValueAccessor,selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]"},{kind:"directive",type:i2.CheckboxControlValueAccessor,selector:"input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]"},{kind:"directive",type:i2.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:i2.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:i2.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:i2.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:i2.NgModel,selector:"[ngModel]:not([formControlName]):not([formControl])",inputs:["name","disabled","ngModel","ngModelOptions"],outputs:["ngModelChange"],exportAs:["ngModel"]},{kind:"component",type:FormButtonComponent,selector:"form-button",inputs:["form","disabled","type"]},{kind:"component",type:i5.NgSelectComponent,selector:"ng-select",inputs:["placeholder","multiple","panelMaxHeight","panelMaxViewportRatio","optionHeight","virtualBuffer","overlayZIndex","autoSizePanel","panelPosition","autoCenterPanel","viewportMargin","panelWidth","panelFullscreenWidth","clearable","templateLabelFromView","searchable","searchMatchMode","defaultSearch","textWrap","compareWith","options","optionLabelKey","optionLabelFn","optionValueKey","optionDisabledKey","optionIdKey","optionGroupKey","disabled","emitOptionObject","debugLog","stickyKey","stickyAutoSave"],outputs:["change"]},{kind:"component",type:i5.NgOptionComponent,selector:"ng-option",inputs:["value","disabled","label","id"]},{kind:"directive",type:i7.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]},{kind:"pipe",type:TitleCaseAndUnderscorePipe,name:"titleCase"}]})}function hexToRGB(t,e){let n=parseInt(t.slice(1,3),16),o=parseInt(t.slice(3,5),16),r=parseInt(t.slice(5,7),16);return e?"rgba("+n+", "+o+", "+r+", "+e+")":"rgb("+n+", "+o+", "+r+")"}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:UsersSettingsComponent,decorators:[{type:Component,args:[{selector:"resolveio-users-settings",providers:[ProviderService],standalone:!1,template:'<style>\n\t.sticky-section-card,\n\t.sticky-section-card * {\n\t\ttransform: none !important;\n\t}\n\n\t:host {\n\t\tdisplay: block;\n\t}\n\n\t::ng-deep :root {\n\t\t--primary-table-color: #3b3ee3;\n\t\t--primary-table-font-color: #ffffff;\n\t\t--font-size: 12px;\n\t\t--secondary-table-color: #87ceeb;\n\t\t--secondary-table-font-color: #000000;\n\t\t--tertiary-table-color: #ff4500;\n\t\t--tertiary-table-font-color: #000000;\n\t\t--warning-color: #ffc107;\n\t\t--warning-font-color: #000000;\n\t\t--warning-hover-color: #e0a800;\n\t\t--warning-shadow-color: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n\t\t--success-color: #28a745;\n\t\t--success-font-color: #ffffff;\n\t\t--success-hover-color: #218838;\n\t\t--success-shadow-color: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n\t\t--danger-color: #dc3545;\n\t\t--danger-font-color: #ffffff;\n\t\t--danger-hover-color: #c82333;\n\t\t--danger-shadow-color: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n\t\t--info-color: #17a2b8;\n\t\t--info-font-color: #ffffff;\n\t\t--info-hover-color: #138496;\n\t\t--info-shadow-color: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n\t\t--primary-color: #007bff;\n\t\t--primary-font-color: #ffffff;\n\t\t--primary-hover-color: #0069d9;\n\t\t--primary-shadow-color: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n\t\t--secondary-color: #868e96;\n\t\t--secondary-font-color: #ffffff;\n\t\t--secondary-hover-color: #5a6268;\n\t\t--secondary-shadow-color: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n\t}\n\n\t.settings-shell {\n\t\tposition: relative;\n\t\toverflow: visible;\n\t\tpadding: 12px 8px 32px;\n\t\tbackground: radial-gradient(circle at 15% 20%, rgba(111, 136, 255, 0.12), transparent 35%),\n\t\t\tradial-gradient(circle at 80% 0%, rgba(255, 130, 92, 0.12), transparent 32%),\n\t\t\tlinear-gradient(135deg, #f7f9ff 0%, #ffffff 60%, #f5f7fb 100%);\n\t}\n\n\t.aurora {\n\t\tposition: absolute;\n\t\twidth: 420px;\n\t\theight: 420px;\n\t\tborder-radius: 50%;\n\t\tfilter: blur(70px);\n\t\topacity: .55;\n\t\tmix-blend-mode: screen;\n\t\tanimation: drift 18s ease-in-out infinite alternate;\n\t\tz-index: 0;\n\t}\n\n\t.aurora.aurora-one {\n\t\tbackground: radial-gradient(circle, rgba(82, 163, 255, .7), rgba(134, 120, 255, .25));\n\t\ttop: -120px;\n\t\tleft: -70px;\n\t}\n\n\t.aurora.aurora-two {\n\t\tbackground: radial-gradient(circle, rgba(255, 147, 92, .6), rgba(255, 227, 187, .35));\n\t\tbottom: -140px;\n\t\tright: -40px;\n\t\tanimation-duration: 22s;\n\t}\n\n\t.settings-hero {\n\t\tposition: relative;\n\t\tz-index: 1;\n\t\tdisplay: grid;\n\t\tgrid-template-columns: repeat(auto-fit, minmax(320px, 1fr));\n\t\tgap: 16px;\n\t\talign-items: center;\n\t\tmargin-bottom: 18px;\n\t}\n\n\t.glass-card {\n\t\tposition: relative;\n\t\tbackground: rgba(255, 255, 255, .78);\n\t\tborder: 1px solid rgba(255, 255, 255, .55);\n\t\tbox-shadow: 0 10px 40px rgba(54, 74, 120, .14), inset 0 0 0 1px rgba(255, 255, 255, .32);\n\t\tborder-radius: 18px;\n\t\tpadding: 18px;\n\t\toverflow: hidden;\n\t}\n\n\t.glass-card::before {\n\t\tcontent: \'\';\n\t\tposition: absolute;\n\t\tinset: 0;\n\t\tborder-radius: inherit;\n\t\tpointer-events: none;\n\t\tz-index: 0;\n\t}\n\n\t.hero-main h2 {\n\t\tfont-weight: 800;\n\t\tfont-size: 26px;\n\t\tmargin-bottom: 8px;\n\t\tcolor: #0f172a;\n\t}\n\n\t.hero-main p {\n\t\tcolor: #4b5563;\n\t\tmargin-bottom: 12px;\n\t}\n\n\t.hero-chip {\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tgap: 6px;\n\t\tpadding: 6px 12px;\n\t\tborder-radius: 999px;\n\t\tfont-weight: 700;\n\t\tcolor: #1f2937;\n\t\tbackground: linear-gradient(120deg, rgba(99, 102, 241, .1), rgba(16, 185, 129, .1), rgba(59, 130, 246, .12));\n\t\tborder: 1px solid rgba(99, 102, 241, .25);\n\t\tmargin-bottom: 10px;\n\t\ttext-transform: uppercase;\n\t\tletter-spacing: .04em;\n\t\tfont-size: 12px;\n\t}\n\n\t.hero-actions {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\tgap: 12px;\n\t\talign-items: center;\n\t\tmargin-top: 12px;\n\t}\n\n\t.neon-btn {\n\t\tposition: relative;\n\t\tborder: 1px solid rgba(15, 23, 42, .1);\n\t\tbackground: linear-gradient(120deg, rgba(99, 102, 241, .15), rgba(59, 130, 246, .08));\n\t\tcolor: #0f172a;\n\t\tfont-weight: 700;\n\t\tpadding: 10px 16px;\n\t\tborder-radius: 12px;\n\t\tbox-shadow: 0 10px 24px rgba(99, 102, 241, .15);\n\t\ttransition: transform .2s ease, box-shadow .2s ease, border-color .2s ease;\n\t}\n\n\t.neon-btn:hover {\n\t\ttransform: translateY(-2px);\n\t\tborder-color: rgba(99, 102, 241, .45);\n\t\tbox-shadow: 0 14px 26px rgba(99, 102, 241, .22);\n\t}\n\n\t.save-button form-button ::ng-deep button {\n\t\tborder-radius: 12px;\n\t\tfont-weight: 800;\n\t\tletter-spacing: .01em;\n\t\tpadding: 11px 18px;\n\t\tbox-shadow: 0 10px 26px rgba(16, 185, 129, .24);\n\t}\n\n\t.hero-preview {\n\t\tposition: relative;\n\t}\n\n\t.preview-card {\n\t\tborder-radius: 16px;\n\t\tpadding: 16px;\n\t\tbackground: radial-gradient(circle at 20% 20%, rgba(255, 255, 255, .7), rgba(255, 255, 255, .52));\n\t\tbox-shadow: inset 0 1px 0 rgba(255, 255, 255, .8), 0 12px 30px rgba(80, 110, 185, .16);\n\t\tborder: 1px solid rgba(255, 255, 255, .6);\n\t}\n\n\t.preview-title {\n\t\tfont-weight: 800;\n\t\tmargin-bottom: 8px;\n\t\tcolor: #111827;\n\t}\n\n\t.swatch-row {\n\t\tdisplay: grid;\n\t\tgrid-template-columns: repeat(auto-fit, minmax(140px, 1fr));\n\t\tgap: 10px;\n\t}\n\n\t.swatch {\n\t\tborder-radius: 12px;\n\t\tpadding: 10px;\n\t\tcolor: #0f172a;\n\t\tfont-weight: 700;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: space-between;\n\t\tbox-shadow: inset 0 1px 0 rgba(255, 255, 255, .45);\n\t\topacity: .98;\n\t}\n\n\t.swatch span {\n\t\tfont-size: 12px;\n\t\tfont-weight: 600;\n\t\tcolor: rgba(15, 23, 42, .85);\n\t}\n\n\t.preview-pulse {\n\t\tposition: absolute;\n\t\twidth: 120px;\n\t\theight: 120px;\n\t\tborder-radius: 50%;\n\t\tbackground: radial-gradient(circle, rgba(16, 185, 129, .3), transparent 60%);\n\t\tbottom: -18px;\n\t\tright: -14px;\n\t\tfilter: blur(12px);\n\t\tanimation: pulse 2.4s ease-in-out infinite;\n\t}\n\n\t.hero-metrics {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\tgap: 8px;\n\t\tmargin-top: 14px;\n\t}\n\n\t.metric-pill {\n\t\tbackground: rgba(15, 23, 42, .06);\n\t\tborder: 1px solid rgba(15, 23, 42, .08);\n\t\tborder-radius: 999px;\n\t\tpadding: 8px 12px;\n\t\tfont-weight: 700;\n\t\tcolor: #0f172a;\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tgap: 6px;\n\t}\n\n\t.section-grid {\n\t\tdisplay: grid;\n\t\tgrid-template-columns: repeat(auto-fit, minmax(320px, 1fr));\n\t\tgap: 14px;\n\t\tposition: relative;\n\t\tz-index: 1;\n\t}\n\n\t.section-card {\n\t\tposition: relative;\n\t\toverflow: visible;\n\t}\n\n\t.section-heading {\n\t\tmargin-bottom: 12px;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: space-between;\n\t\tgap: 10px;\n\t\tflex-wrap: wrap;\n\t}\n\n\t.section-heading h3 {\n\t\tmargin: 0;\n\t\tfont-weight: 800;\n\t\tcolor: #0f172a;\n\t}\n\n\t.section-heading p {\n\t\tmargin: 0;\n\t\tcolor: #4b5563;\n\t}\n\n\t.field-grid {\n\t\tdisplay: grid;\n\t\tgrid-template-columns: repeat(auto-fit, minmax(240px, 1fr));\n\t\tgap: 12px;\n\t}\n\n\t.field-card {\n\t\tpadding: 12px;\n\t\tborder-radius: 14px;\n\t\tborder: 1px solid rgba(15, 23, 42, .06);\n\t\tbackground: rgba(255, 255, 255, .85);\n\t\tbox-shadow: inset 0 1px 0 rgba(255, 255, 255, .7);\n\t\ttransition: transform .2s ease, box-shadow .2s ease;\n\t}\n\n\t.field-card:hover {\n\t\tbox-shadow: 0 8px 22px rgba(99, 102, 241, .12);\n\t}\n\n\t/* Avoid transforming the sticky select card so the fixed overlay positions correctly. */\n\t.sticky-select-card:hover {\n\t\ttransform: none;\n\t}\n\n\t.sticky-section-card {\n\t\tanimation: none;\n\t\ttransform: none;\n\t}\n\n\t.field-label {\n\t\tfont-weight: 700;\n\t\tcolor: #111827;\n\t\tmargin-bottom: 4px;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: space-between;\n\t\tgap: 6px;\n\t}\n\n\t.field-hint {\n\t\tfont-size: 12px;\n\t\tcolor: #6b7280;\n\t\tmargin: 0;\n\t}\n\n\t.input-bevel {\n\t\tborder-radius: 12px;\n\t\tborder: 1px solid rgba(15, 23, 42, .1);\n\t\tbackground: rgba(255, 255, 255, .92);\n\t\tbox-shadow: inset 0 1px 0 rgba(255, 255, 255, .8);\n\t\tpadding: 10px 12px;\n\t\twidth: 100%;\n\t}\n\n\t.toggle {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 8px;\n\t}\n\n\t.toggle-input {\n\t\tdisplay: none;\n\t}\n\n\t.toggle-track {\n\t\twidth: 54px;\n\t\theight: 30px;\n\t\tborder-radius: 999px;\n\t\tbackground: linear-gradient(120deg, rgba(15, 23, 42, .08), rgba(15, 23, 42, .15));\n\t\tposition: relative;\n\t\tbox-shadow: inset 0 1px 0 rgba(255, 255, 255, .6);\n\t\tborder: 1px solid rgba(15, 23, 42, .12);\n\t\ttransition: background .2s ease;\n\t}\n\n\t.toggle-thumb {\n\t\tposition: absolute;\n\t\ttop: 3px;\n\t\tleft: 3px;\n\t\twidth: 24px;\n\t\theight: 24px;\n\t\tborder-radius: 50%;\n\t\tbackground: linear-gradient(135deg, #63a4ff, #83eaf1);\n\t\tbox-shadow: 0 8px 16px rgba(99, 102, 241, .35);\n\t\ttransition: transform .2s ease;\n\t}\n\n\t.toggle-input:checked + .toggle-track {\n\t\tbackground: linear-gradient(120deg, rgba(16, 185, 129, .15), rgba(52, 211, 153, .25));\n\t\tborder-color: rgba(16, 185, 129, .45);\n\t}\n\n\t.toggle-input:checked + .toggle-track .toggle-thumb {\n\t\ttransform: translateX(24px);\n\t\tbackground: linear-gradient(135deg, #10b981, #22d3ee);\n\t\tbox-shadow: 0 10px 18px rgba(16, 185, 129, .32);\n\t}\n\n\t.toggle-state {\n\t\tfont-weight: 700;\n\t\tcolor: #0f172a;\n\t}\n\n\t.color-grid {\n\t\tdisplay: grid;\n\t\tgrid-template-columns: repeat(auto-fit, minmax(260px, 1fr));\n\t\tgap: 10px;\n\t\tmargin-top: 10px;\n\t}\n\n\t.color-card {\n\t\tborder-radius: 14px;\n\t\tpadding: 12px;\n\t\tborder: 1px solid rgba(15, 23, 42, .06);\n\t\tbackground: rgba(255, 255, 255, .9);\n\t\tdisplay: grid;\n\t\tgrid-template-columns: 1fr 120px;\n\t\tgap: 10px;\n\t\talign-items: center;\n\t}\n\n\t.color-chip {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 4px;\n\t}\n\n\t.color-name {\n\t\tfont-weight: 700;\n\t\tcolor: #0f172a;\n\t}\n\n\t.color-preview {\n\t\tborder-radius: 12px;\n\t\theight: 48px;\n\t\tborder: 1px solid rgba(15, 23, 42, .08);\n\t\tbox-shadow: inset 0 1px 0 rgba(255, 255, 255, .7);\n\t}\n\n\t.color-input {\n\t\theight: 48px;\n\t\tborder: 1px solid rgba(15, 23, 42, .08);\n\t\tborder-radius: 12px;\n\t\tbox-shadow: inset 0 1px 0 rgba(255, 255, 255, .75);\n\t\twidth: 100%;\n\t\tcursor: pointer;\n\t}\n\n\t.palette-preview {\n\t\tdisplay: grid;\n\t\tgrid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n\t\tgap: 10px;\n\t\tmargin-bottom: 8px;\n\t}\n\n\t.preview-table {\n\t\tborder-radius: 12px;\n\t\tpadding: 10px;\n\t\tbackground: linear-gradient(160deg, rgba(255, 255, 255, .85), rgba(255, 255, 255, .7));\n\t\tborder: 1px solid rgba(15, 23, 42, .08);\n\t\tbox-shadow: inset 0 1px 0 rgba(255, 255, 255, .8);\n\t}\n\n\t.preview-table .row-swatch {\n\t\tborder-radius: 10px;\n\t\tpadding: 10px;\n\t\tfont-weight: 700;\n\t\tmargin-bottom: 6px;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: space-between;\n\t\tbox-shadow: inset 0 1px 0 rgba(255, 255, 255, .6);\n\t}\n\n\t.preview-table .row-swatch:last-child {\n\t\tmargin-bottom: 0;\n\t}\n\n\t.button-demo {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\tgap: 8px;\n\t\tmargin-bottom: 10px;\n\t}\n\n\t.btn-warning {\n\t\tcolor: var(--warning-font-color);\n\t\tbackground-color: var(--warning-color);\n\t\tborder-color: var(--warning-color);\n\t}\n\n\t.btn-warning:focus,\n\t.btn-warning.focus {\n\t\tbox-shadow: var(--warning-shadow-color);\n\t}\n\n\t.btn-warning:hover {\n\t\tcolor: var(--warning-font-color);\n\t\tbackground-color: var(--warning-hover-color);\n\t\tborder-color: var(--warning-hover-color);\n\t}\n\n\t.btn-success {\n\t\tcolor: var(--success-font-color);\n\t\tbackground-color: var(--success-color);\n\t\tborder-color: var(--success-color);\n\t}\n\n\t.btn-success:focus,\n\t.btn-success.focus {\n\t\tbox-shadow: var(--success-shadow-color);\n\t}\n\n\t.btn-success:hover {\n\t\tcolor: var(--success-font-color);\n\t\tbackground-color: var(--success-hover-color);\n\t\tborder-color: var(--success-hover-color);\n\t}\n\n\t.btn-danger {\n\t\tcolor: var(--danger-font-color);\n\t\tbackground-color: var(--danger-color);\n\t\tborder-color: var(--danger-color);\n\t}\n\n\t.btn-danger:focus,\n\t.btn-danger.focus {\n\t\tbox-shadow: var(--danger-shadow-color);\n\t}\n\n\t.btn-danger:hover {\n\t\tcolor: var(--danger-font-color);\n\t\tbackground-color: var(--danger-hover-color);\n\t\tborder-color: var(--danger-hover-color);\n\t}\n\n\t.btn-info {\n\t\tcolor: var(--info-font-color);\n\t\tbackground-color: var(--info-color);\n\t\tborder-color: var(--info-color);\n\t}\n\n\t.btn-info:focus,\n\t.btn-info.focus {\n\t\tbox-shadow: var(--info-shadow-color);\n\t}\n\n\t.btn-info:hover {\n\t\tcolor: var(--info-font-color);\n\t\tbackground-color: var(--info-hover-color);\n\t\tborder-color: var(--info-hover-color);\n\t}\n\n\t.btn-primary {\n\t\tcolor: var(--primary-font-color);\n\t\tbackground-color: var(--primary-color);\n\t\tborder-color: var(--primary-color);\n\t}\n\n\t.btn-primary:focus,\n\t.btn-primary.focus {\n\t\tbox-shadow: var(--primary-shadow-color);\n\t}\n\n\t.btn-primary:hover {\n\t\tcolor: var(--primary-font-color);\n\t\tbackground-color: var(--primary-hover-color);\n\t\tborder-color: var(--primary-hover-color);\n\t}\n\n\t.btn-secondary {\n\t\tcolor: var(--secondary-font-color);\n\t\tbackground-color: var(--secondary-color);\n\t\tborder-color: var(--secondary-color);\n\t}\n\n\t.btn-secondary:focus,\n\t.btn-secondary.focus {\n\t\tbox-shadow: var(--secondary-shadow-color);\n\t}\n\n\t.btn-secondary:hover {\n\t\tcolor: var(--secondary-font-color);\n\t\tbackground-color: var(--secondary-hover-color);\n\t\tborder-color: var(--secondary-hover-color);\n\t}\n\n\t.ng-select .ng-select-container {\n\t\tborder-radius: 12px !important;\n\t\tmin-height: 42px !important;\n\t\tborder-color: rgba(15, 23, 42, .1) !important;\n\t\tbox-shadow: inset 0 1px 0 rgba(255, 255, 255, .7);\n\t}\n\n\t.sticky-empty {\n\t\tbackground: rgba(23, 162, 184, .12);\n\t\tcolor: #0f4c75;\n\t\tborder: 1px solid rgba(23, 162, 184, .2);\n\t\tborder-radius: 12px;\n\t\tpadding: 12px;\n\t}\n\n\t.animate-rise {\n\t\tanimation: rise .5s ease;\n\t}\n\n\t@keyframes drift {\n\t\tfrom {\n\t\t\ttransform: translateY(0) translateX(0);\n\t\t}\n\t\tto {\n\t\t\ttransform: translateY(-30px) translateX(20px);\n\t\t}\n\t}\n\n\t@keyframes pulse {\n\t\t0% {\n\t\t\ttransform: scale(1);\n\t\t\topacity: .6;\n\t\t}\n\t\t50% {\n\t\t\ttransform: scale(1.08);\n\t\t\topacity: .9;\n\t\t}\n\t\t100% {\n\t\t\ttransform: scale(1);\n\t\t\topacity: .6;\n\t\t}\n\t}\n\n\t@keyframes rise {\n\t\tfrom {\n\t\t\topacity: 0;\n\t\t\ttransform: translateY(12px);\n\t\t}\n\t\tto {\n\t\t\topacity: 1;\n\t\t\ttransform: translateY(0);\n\t\t}\n\t}\n</style>\n\n<div class="settings-shell">\n\t<div class="aurora aurora-one"></div>\n\t<div class="aurora aurora-two"></div>\n\t<form [formGroup]="form" novalidate (ngSubmit)="submitForm(form)">\n\t\t<div class="settings-hero glass-card animate-rise">\n\t\t\t<div class="hero-main">\n\t\t\t\t<div class="hero-chip">User Settings</div>\n\t\t\t\t<h2>Welcome {{ user?.fullname || user?.username || user?.email || \'back\' }}!</h2>\n\t\t\t\t<p>Shape {{ client || \'your workspace\' }} into something joyful, colorful and uniquely you.</p>\n\t\t\t\t<div class="hero-actions">\n\t\t\t\t\t<button type="button" class="neon-btn" (click)="reset()">Reset to defaults</button>\n\t\t\t\t\t<div class="save-button">\n\t\t\t\t\t\t<form-button [form]="form" [disabled]="disableFormButton"></form-button>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class="hero-metrics">\n\t\t\t\t\t<div class="metric-pill">\n\t\t\t\t\t\t<span>Entries / page</span>\n\t\t\t\t\t\t<strong>{{ form.controls.entries_per_page.value }}</strong>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="metric-pill">\n\t\t\t\t\t\t<span>Font size</span>\n\t\t\t\t\t\t<strong>{{ form.controls.font_size.value }}px</strong>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="metric-pill">\n\t\t\t\t\t\t<span>Week starts</span>\n\t\t\t\t\t\t<strong>{{ form.controls.date_picker_day_start.value === \'M\' ? \'Monday\' : \'Sunday\' }}</strong>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class="hero-preview">\n\t\t\t\t<div class="preview-card">\n\t\t\t\t\t<div class="preview-title">Live palette peek</div>\n\t\t\t\t\t<div class="swatch-row">\n\t\t\t\t\t\t<div class="swatch" [style.background]="form.controls.primary_color.value" [style.color]="form.controls.primary_font_color.value">\n\t\t\t\t\t\t\t<span>Primary buttons</span>\n\t\t\t\t\t\t\t{{ form.controls.primary_color.value }}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class="swatch" [style.background]="form.controls.success_color.value" [style.color]="form.controls.success_font_color.value">\n\t\t\t\t\t\t\t<span>Success tone</span>\n\t\t\t\t\t\t\t{{ form.controls.success_color.value }}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class="swatch" [style.background]="form.controls.table_color.value" [style.color]="form.controls.table_font_color.value">\n\t\t\t\t\t\t\t<span>Primary table</span>\n\t\t\t\t\t\t\t{{ form.controls.table_color.value }}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class="preview-pulse"></div>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div class="section-grid">\n\t\t\t<div class="section-card glass-card animate-rise">\n\t\t\t\t<div class="section-heading">\n\t\t\t\t\t<h3>Experience preferences</h3>\n\t\t\t\t\t<p>Tune how the app greets you each day.</p>\n\t\t\t\t</div>\n\t\t\t\t<div class="field-grid">\n\t\t\t\t\t<label class="field-card">\n\t\t\t\t\t\t<div class="field-label">Collapsable menu</div>\n\t\t\t\t\t\t<p class="field-hint">Keep navigation cozy when you want focus.</p>\n\t\t\t\t\t\t<div class="toggle">\n\t\t\t\t\t\t\t<input class="toggle-input" type="checkbox" formControlName="collapsable_menu" />\n\t\t\t\t\t\t\t<span class="toggle-track">\n\t\t\t\t\t\t\t\t<span class="toggle-thumb"></span>\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t<div class="toggle-state">\n\t\t\t\t\t\t\t\t@if (form.controls.collapsable_menu.value) {\n\t\t\t\t\t\t\t\t\tCompact\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t@else {\n\t\t\t\t\t\t\t\t\tOpen\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</label>\n\t\t\t\t\t<div class="field-card">\n\t\t\t\t\t\t<div class="field-label">Default entries per page</div>\n\t\t\t\t\t\t<p class="field-hint">Pick your sweet spot for list density.</p>\n\t\t\t\t\t\t\t\t<ng-select class="input-bevel" [ngClass]="[form.controls.entries_per_page.valid ? \'is-valid\' : \'is-invalid\']" formControlName="entries_per_page" [clearable]="false" [searchable]="false">\n\t\t\t\t\t\t\t\t\t<ng-option value="25">25</ng-option>\n\t\t\t\t\t\t\t\t\t<ng-option value="50">50</ng-option>\n\t\t\t\t\t\t\t\t\t<ng-option value="100">100</ng-option>\n\t\t\t\t\t\t\t\t\t<ng-option value="250">250</ng-option>\n\t\t\t\t\t\t\t\t</ng-select>\n\t\t\t\t\t\t@if (!form.controls.entries_per_page.valid) {\n\t\t\t\t\t\t\t<div class="text-danger mt-1">Entries per page is required</div>\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="field-card">\n\t\t\t\t\t\t<div class="field-label">Select search style</div>\n\t\t\t\t\t\t<p class="field-hint">Decide if typing should be fuzzy or exact.</p>\n\t\t\t\t\t\t<ng-select class="input-bevel" [ngClass]="[form.controls.ng_select_search_mode.valid ? \'is-valid\' : \'is-invalid\']" formControlName="ng_select_search_mode" [clearable]="false" [searchable]="false">\n\t\t\t\t\t\t\t<ng-option value="fuzzy">Fuzzy (flexible matching)</ng-option>\n\t\t\t\t\t\t\t<ng-option value="exact">Exact (must contain the term)</ng-option>\n\t\t\t\t\t\t</ng-select>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="field-card">\n\t\t\t\t\t\t<div class="field-label">Font size</div>\n\t\t\t\t\t\t<p class="field-hint">We recommend between 11–14px for quick scanning.</p>\n\t\t\t\t\t\t<input class="input-bevel" [ngClass]="[form.controls.font_size.valid ? \'is-valid\' : \'is-invalid\']" type="number" formControlName="font_size" (keyup)="changePrimaryFontSize()" />\n\t\t\t\t\t\t@if (form.controls.font_size.hasError(\'required\')) {\n\t\t\t\t\t\t\t<div class="text-danger mt-1">Font size is required</div>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (form.controls.font_size.hasError(\'wholeNumbersGreaterThanZero\')) {\n\t\t\t\t\t\t\t<div class="text-danger mt-1">Font size is invalid</div>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (form.controls.font_size.hasError(\'maxValue\')) {\n\t\t\t\t\t\t\t<div class="text-danger mt-1">Font size can not exceed 18</div>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (form.controls.font_size.hasError(\'minValue\')) {\n\t\t\t\t\t\t\t<div class="text-danger mt-1">Font size can not be less than 8</div>\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="field-card">\n\t\t\t\t\t\t<div class="field-label">Week start (date picker)</div>\n\t\t\t\t\t\t<p class="field-hint">Pick where your planner begins.</p>\n\t\t\t\t\t\t<ng-select class="input-bevel" [ngClass]="[form.controls.date_picker_day_start.valid ? \'is-valid\' : \'is-invalid\']" formControlName="date_picker_day_start" [clearable]="false" [searchable]="false">\n\t\t\t\t\t\t\t<ng-option [value]="\'S\'">Sunday</ng-option>\n\t\t\t\t\t\t\t<ng-option [value]="\'M\'">Monday</ng-option>\n\t\t\t\t\t\t</ng-select>\n\t\t\t\t\t\t@if (form.controls.date_picker_day_start.hasError(\'required\')) {\n\t\t\t\t\t\t\t<div class="text-danger mt-1">Week start is required</div>\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="field-card">\n\t\t\t\t\t\t<div class="field-label">Starting page</div>\n\t\t\t\t\t\t<p class="field-hint">Jump right into the view you love most.</p>\n\t\t\t\t\t\t<ng-select class="input-bevel" [ngClass]="[form.controls.opening_route.valid ? \'is-valid\' : \'\']" formControlName="opening_route" [clearable]="false" [searchable]="false">\n\t\t\t\t\t\t\t<ng-option value="/home">Home</ng-option>\n\t\t\t\t\t\t\t@for (view of views; track view.display) {\n\t\t\t\t\t\t\t\t<ng-option [value]="view.value">{{ view.display | titleCase }}</ng-option>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ng-select>\n\t\t\t\t\t</div>\n\t\t\t\t\t@if (client === \'Ace Completions\') {\n\t\t\t\t\t\t<div class="field-card">\n\t\t\t\t\t\t\t<div class="field-label">Routing preference</div>\n\t\t\t\t\t\t\t<p class="field-hint">Decide how links open while you multitask.</p>\n\t\t\t\t\t\t\t<ng-select class="input-bevel" [ngClass]="[form.controls.routing_preference.valid ? \'is-valid\' : \'\']" formControlName="routing_preference" [clearable]="false" [searchable]="false">\n\t\t\t\t\t\t\t\t<ng-option value="alwaysAsk">Always Ask</ng-option>\n\t\t\t\t\t\t\t\t<ng-option value="sameTab">Same Tab</ng-option>\n\t\t\t\t\t\t\t\t<ng-option value="newTab">New Tab</ng-option>\n\t\t\t\t\t\t\t\t<ng-option value="newWindow">New Window</ng-option>\n\t\t\t\t\t\t\t</ng-select>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<div class="section-card glass-card animate-rise">\n\t\t\t\t<div class="section-heading">\n\t\t\t\t\t<h3>Table palette</h3>\n\t\t\t\t\t<p>Pick vibrant layers for your data rows.</p>\n\t\t\t\t</div>\n\t\t\t\t<div class="palette-preview">\n\t\t\t\t\t<div class="preview-table">\n\t\t\t\t\t\t<div class="row-swatch" [style.background]="form.controls.table_color.value" [style.color]="form.controls.table_font_color.value">\n\t\t\t\t\t\t\tPrimary header\n\t\t\t\t\t\t\t<span>{{ form.controls.table_font_color.value }}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class="row-swatch" [style.background]="form.controls.secondary_table_color.value" [style.color]="form.controls.secondary_table_font_color.value">\n\t\t\t\t\t\t\tSecondary header\n\t\t\t\t\t\t\t<span>{{ form.controls.secondary_table_font_color.value }}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class="row-swatch" [style.background]="form.controls.tertiary_table_color.value" [style.color]="form.controls.tertiary_table_font_color.value">\n\t\t\t\t\t\t\tTertiary header\n\t\t\t\t\t\t\t<span>{{ form.controls.tertiary_table_font_color.value }}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="preview-table">\n\t\t\t\t\t\t<div class="row-swatch" [style.background]="form.controls.warning_color.value" [style.color]="form.controls.warning_font_color.value">\n\t\t\t\t\t\t\tWarnings\n\t\t\t\t\t\t\t<span>{{ form.controls.warning_hover_color.value }}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class="row-swatch" [style.background]="form.controls.success_color.value" [style.color]="form.controls.success_font_color.value">\n\t\t\t\t\t\t\tSuccess\n\t\t\t\t\t\t\t<span>{{ form.controls.success_hover_color.value }}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class="row-swatch" [style.background]="form.controls.info_color.value" [style.color]="form.controls.info_font_color.value">\n\t\t\t\t\t\t\tInfo\n\t\t\t\t\t\t\t<span>{{ form.controls.info_hover_color.value }}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class="color-grid">\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Primary table background</div>\n\t\t\t\t\t\t\t<div class="field-hint">The hero row that anchors your data.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.table_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="table_color" (ngModelChange)="changePrimaryColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Primary table font</div>\n\t\t\t\t\t\t\t<div class="field-hint">Keep it crisp and readable.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.table_font_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="table_font_color" (ngModelChange)="changePrimaryFontColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Secondary table background</div>\n\t\t\t\t\t\t\t<div class="field-hint">Great for supporting sections.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.secondary_table_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="secondary_table_color" (ngModelChange)="changeSecondaryColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Secondary table font</div>\n\t\t\t\t\t\t\t<div class="field-hint">Match contrast with the new hue.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.secondary_table_font_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="secondary_table_font_color" (ngModelChange)="changeSecondaryFontColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Tertiary table background</div>\n\t\t\t\t\t\t\t<div class="field-hint">For extra callouts.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.tertiary_table_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="tertiary_table_color" (ngModelChange)="changeTertiaryColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Tertiary table font</div>\n\t\t\t\t\t\t\t<div class="field-hint">Balance brightness for legibility.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.tertiary_table_font_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="tertiary_table_font_color" (ngModelChange)="changeTertiaryFontColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<div class="section-card glass-card animate-rise">\n\t\t\t\t<div class="section-heading">\n\t\t\t\t\t<h3>Button glow-up</h3>\n\t\t\t\t\t<p>Make clicks feel friendly and intentional.</p>\n\t\t\t\t</div>\n\t\t\t\t<div class="button-demo">\n\t\t\t\t\t<button type="button" class="btn btn-success">Success</button>\n\t\t\t\t\t<button type="button" class="btn btn-warning">Warning</button>\n\t\t\t\t\t<button type="button" class="btn btn-danger">Danger</button>\n\t\t\t\t\t<button type="button" class="btn btn-info">Info</button>\n\t\t\t\t\t<button type="button" class="btn btn-primary">Primary</button>\n\t\t\t\t\t<button type="button" class="btn btn-secondary">Secondary</button>\n\t\t\t\t</div>\n\t\t\t\t<div class="color-grid">\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Success background</div>\n\t\t\t\t\t\t\t<div class="field-hint">Celebrate wins.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.success_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="success_color" (ngModelChange)="changeSuccessColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Success font</div>\n\t\t\t\t\t\t\t<div class="field-hint">Keep it sharp.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.success_font_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="success_font_color" (ngModelChange)="changeSuccessFontColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Success hover</div>\n\t\t\t\t\t\t\t<div class="field-hint">How the button greets hover.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.success_hover_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="success_hover_color" (ngModelChange)="changeSuccessHoverColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Warning background</div>\n\t\t\t\t\t\t\t<div class="field-hint">Gentle but visible.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.warning_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="warning_color" (ngModelChange)="changeWarningColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Warning font</div>\n\t\t\t\t\t\t\t<div class="field-hint">High contrast copy.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.warning_font_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="warning_font_color" (ngModelChange)="changeWarningFontColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Warning hover</div>\n\t\t\t\t\t\t\t<div class="field-hint">Add motion to caution.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.warning_hover_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="warning_hover_color" (ngModelChange)="changeWarningHoverColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Danger background</div>\n\t\t\t\t\t\t\t<div class="field-hint">Clear stop signal.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.danger_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="danger_color" (ngModelChange)="changeDangerColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Danger font</div>\n\t\t\t\t\t\t\t<div class="field-hint">Stay readable on alert.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.danger_font_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="danger_font_color" (ngModelChange)="changeDangerFontColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Danger hover</div>\n\t\t\t\t\t\t\t<div class="field-hint">Softer on hover.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.danger_hover_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="danger_hover_color" (ngModelChange)="changeDangerHoverColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Info background</div>\n\t\t\t\t\t\t\t<div class="field-hint">Highlight helpful hints.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.info_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="info_color" (ngModelChange)="changeInfoColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Info font</div>\n\t\t\t\t\t\t\t<div class="field-hint">Keep tips legible.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.info_font_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="info_font_color" (ngModelChange)="changeInfoFontColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Info hover</div>\n\t\t\t\t\t\t\t<div class="field-hint">Gentle motion on hover.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.info_hover_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="info_hover_color" (ngModelChange)="changeInfoHoverColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Primary background</div>\n\t\t\t\t\t\t\t<div class="field-hint">The hero action.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.primary_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="primary_color" (ngModelChange)="changePrimaryButtonColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Primary font</div>\n\t\t\t\t\t\t\t<div class="field-hint">Strong contrast for CTA.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.primary_font_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="primary_font_color" (ngModelChange)="changePrimaryButtonFontColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Primary hover</div>\n\t\t\t\t\t\t\t<div class="field-hint">A playful shift on hover.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.primary_hover_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="primary_hover_color" (ngModelChange)="changePrimaryButtonHoverColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Secondary background</div>\n\t\t\t\t\t\t\t<div class="field-hint">Great for subtle actions.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.secondary_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="secondary_color" (ngModelChange)="changeSecondaryButtonColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Secondary font</div>\n\t\t\t\t\t\t\t<div class="field-hint">Keep it balanced.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.secondary_font_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="secondary_font_color" (ngModelChange)="changeSecondaryButtonFontColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="color-card">\n\t\t\t\t\t\t<div class="color-chip">\n\t\t\t\t\t\t\t<div class="color-name">Secondary hover</div>\n\t\t\t\t\t\t\t<div class="field-hint">Add a soft glow.</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input type="color" class="color-input" [ngClass]="[form.controls.secondary_hover_color.value ? \'is-valid\' : \'is-invalid\']" formControlName="secondary_hover_color" (ngModelChange)="changeSecondaryHoverColor()" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<div class="section-card glass-card animate-rise sticky-section-card">\n\t\t\t\t<div class="section-heading">\n\t\t\t\t\t<h3>Sticky select defaults</h3>\n\t\t\t\t\t<p>Teach ResolveIO which choices you love.</p>\n\t\t\t\t</div>\n\t\t\t\t@if (!stickySelects.length) {\n\t\t\t\t\t<div class="sticky-empty">\n\t\t\t\t\t\tNo sticky selects saved yet. Add a stickyKey on a select to remember your favorite defaults.\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t\t@else {\n\t\t\t\t\t@for (sticky of stickySelects; track sticky.key) {\n\t\t\t\t\t\t<div class="field-card sticky-select-card">\n\t\t\t\t\t\t\t<div class="field-label">{{ sticky.key }}</div>\n\t\t\t\t\t\t\t@if (sticky.options && sticky.options.length) {\n\t\t\t\t\t\t\t\t<ng-select\n\t\t\t\t\t\t\t\t\t[(ngModel)]="stickySelections[sticky.key]"\n\t\t\t\t\t\t\t\t\t[ngModelOptions]="{standalone: true}"\n\t\t\t\t\t\t\t\t\t[options]="sticky.options"\n\t\t\t\t\t\t\t\t\toptionValueKey="value"\n\t\t\t\t\t\t\t\t\toptionLabelKey="label"\n\t\t\t\t\t\t\t\t\t[searchable]="false"\n\t\t\t\t\t\t\t\t\tappendTo="body"\n\t\t\t\t\t\t\t\t\t[stickyAutoSave]="true"\n\t\t\t\t\t\t\t\t\t(ngModelChange)="updateStickyDefault(sticky.key, $event)">\n\t\t\t\t\t\t\t\t</ng-select>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@if (!sticky.options || !sticky.options.length) {\n\t\t\t\t\t\t\t\t<div class="text-muted">No saved options yet.</div>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t</div>\n\t\t</div>\n\t</form>\n</div>\n'}]}],ctorParameters:()=>[{type:AuthPermissionService},{type:UserSettingsService},{type:ProviderService},{type:DialogService},{type:void 0,decorators:[{type:Optional},{type:Inject,args:[NG_SELECT_STICKY_ADAPTER]}]}]});const routes$1=[{path:"user-settings",component:UserSettingsComponent,children:[{path:"settings",component:UsersSettingsComponent},{path:"**",redirectTo:"settings"}]}],UserSettingsRouting=RouterModule.forChild(routes$1);class DatatableComponent extends BaseComponent{_services;urlClick;columns;data;collapseSize;searchTitle;totalItems=1e3;onChangeTableData=new EventEmitter;tableData;constructor(t){super(t),this._services=t}changeTableData(){this.onChangeTableData.emit()}sortColumn(t){this.tableData.sortColumn===t?"desc"===this.tableData.sortOrder?this.tableData.sortOrder="asc":this.tableData.sortOrder="desc":(this.tableData.sortOrder="asc",this.tableData.sortColumn=t),this.changeTableData()}navigateTo(t,e){"file_key"!==e&&t&&this.urlClick&&this._services._router.navigateByUrl(this.urlClick+t)}openFile(t){this._services._socket.call("getSignedUrl",t,900,(e,n)=>{n?window.open(n):this._services._socket.call("insertErrorLog","Widgets-datatable - getsignedurl",[t,e])})}typeOf(t){return typeof t}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DatatableComponent,deps:[{token:ProviderService}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"21.0.1",type:DatatableComponent,isStandalone:!1,selector:"data-table",inputs:{urlClick:"urlClick",columns:"columns",data:"data",collapseSize:"collapseSize",searchTitle:"searchTitle",totalItems:"totalItems",tableData:"tableData"},outputs:{onChangeTableData:"onChangeTableData"},providers:[ProviderService],usesInheritance:!0,ngImport:i0,template:'<style>\n\t.orangeRow {\n\t\tbackground-color: orangered;\n\t}\n\n\tcollapse-table tr:hover {\n\t\tbackground-color: lightblue;\n\t\tcursor: pointer;\n\t}\n\n\tcollapse-table {\n\t\twidth: 100%;\n\t}\n</style>\n\n<div class="row">\n\t<div class="input-group">\n\t\t<span class="input-group-btn">\n\t\t\t<button class="btn btn-primary" type="button" (click)="changeTableData()">Search!</button>\n\t\t</span>\n\t\t<input type="text" class="form-control" placeholder="{{ searchTitle }}" [(ngModel)]="tableData.searchString" (keyup.enter)="changeTableData()" style="z-index: 0" />\n\t</div>\n</div>\n<div class="row" style="padding-top: 20px">\n\t<collapse-table [collapseSize]="collapseSize" headerFixed="true">\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t@for (column of columns; track column) {\n\t\t\t\t\t<th (click)="sortColumn(column.data)" style="cursor: pointer">\n\t\t\t\t\t\t{{ column.name }}\n\t\t\t\t\t\t@if (tableData.sortColumn == column.data && tableData.sortOrder === \'desc\') {\n\t\t\t\t\t\t\t<i class="fa fa-caret-down"></i>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (tableData.sortColumn == column.data && tableData.sortOrder === \'asc\') {\n\t\t\t\t\t\t\t<i class="fa fa-caret-up"></i>\n\t\t\t\t\t\t}\n\t\t\t\t\t</th>\n\t\t\t\t}\n\t\t\t</tr>\n\t\t</thead>\n\t\t<tbody>\n\t\t\t@for (item of data; track item[\'_id\']) {\n\t\t\t\t<tr [ngClass]="{ orangeRow: item[\'color_red\'] }">\n\t\t\t\t\t@for (column of columns; track column.name) {\n\t\t\t\t\t\t<td (click)="navigateTo(item[\'_id\'], column.data)" [attr.data-label]="column.name">\n\t\t\t\t\t\t\t@if (typeOf(item[column.data]) !== \'boolean\' && column.data !== \'cost\' && column.data !== \'wells\' && column.data !== \'cost_total\' && column.data !== \'price\' && column.data !== \'date\' && column.data !== \'date_created\' && column.data !== \'date_delivered\' && column.data !== \'quantity\' && column.data !== \'quantity_string\' && column.data !== \'min_stock\' && column.data !== \'max_stock\' && column.data !== \'file_key\' && column.data !== \'date_in\') {\n\t\t\t\t\t\t\t\t<span>{{ column.subData ? item[column.data][column.subData] : item[column.data] }}</span>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@if (column.data === \'cost\' || column.data === \'price\' || column.data === \'cost_total\') {\n\t\t\t\t\t\t\t\t<span>{{ item[column.data] | currency: \'USD\' : \'symbol\' : \'1.2-2\' }}</span>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@if (column.data === \'date\' || column.data === \'date_created\' || column.data === \'date_delivered\') {\n\t\t\t\t\t\t\t\t<span>{{ item[column.data] | date: \'short\' }}</span>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@if (column.data === \'quantity\' || column.data === \'min_stock\' || column.data === \'max_stock\') {\n\t\t\t\t\t\t\t\t<span>{{ item[column.data] | number }}</span>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@if (column.data === \'quantity_string\') {\n\t\t\t\t\t\t\t\t<span>{{ item[column.data] | number }}</span>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@if (column.data === \'wells\') {\n\t\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t\t<pre>{{ item[column.data] }}</pre>\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@if (column.data === \'file_key\') {\n\t\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t\t<button type="button" (click)="openFile(item[column.data])" class="btn btn-secondary">Open File</button>\n\t\t\t\t\t\t\t\t\t\x3c!-- <button type="button" class="btn btn-warning" (click)="viewDeletedReason(item)" *ngIf="item.deleted.is_deleted">View Deleted Reason</button> --\x3e\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@if (typeOf(item[column.data]) === \'boolean\') {\n\t\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t\t@if (item[column.data]) {\n\t\t\t\t\t\t\t\t\t\t<i class="fa fa-check" style="color: green; font-size: 18px" aria-hidden="true"></i>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t@if (!item[column.data]) {\n\t\t\t\t\t\t\t\t\t\t<i class="fa fa-times" style="color: red; font-size: 18px" aria-hidden="true"></i>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</td>\n\t\t\t\t\t}\n\t\t\t\t</tr>\n\t\t\t}\n\t\t</tbody>\n\t</collapse-table>\n</div>\n<hr />\n<div class="row">\n\t<div class="col-lg-4">\n\t\t<div class="row">\n\t\t\t<div class="col-lg-8">\n\t\t\t\t<label class="form-control-label">Entries Per Page</label>\n\t\t\t\t<select class="form-control" [(ngModel)]="tableData.entriesPerPage" (ngModelChange)="changeTableData()">\n\t\t\t\t\t<option value="25">25</option>\n\t\t\t\t\t<option value="50">50</option>\n\t\t\t\t\t<option value="100">100</option>\n\t\t\t\t\t<option value="250">250</option>\n\t\t\t\t</select>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div class="col-lg-8" style="margin-top: 16px">\n\t\t<ngb-pagination class="float-end" boundaryLinks="true" [collectionSize]="totalItems" directionLinks="true" ellipses="false" [(page)]="tableData.pageNum" maxSize="6" [pageSize]="tableData.entriesPerPage" rotate="true" (pageChange)="changeTableData()"></ngb-pagination>\n\t</div>\n</div>\n',styles:[".orangeRow{background-color:#ff4500}collapse-table tr:hover{background-color:#add8e6;cursor:pointer}collapse-table{width:100%}\n"],dependencies:[{kind:"component",type:i1$2.NgbPagination,selector:"ngb-pagination",inputs:["disabled","boundaryLinks","directionLinks","ellipses","rotate","collectionSize","maxSize","page","pageSize","size"],outputs:["pageChange"]},{kind:"directive",type:i2.NgSelectOption,selector:"option",inputs:["ngValue","value"]},{kind:"directive",type:i2.ɵNgSelectMultipleOption,selector:"option",inputs:["ngValue","value"]},{kind:"directive",type:i2.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:i2.SelectControlValueAccessor,selector:"select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]",inputs:["compareWith"]},{kind:"directive",type:i2.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:i2.NgModel,selector:"[ngModel]:not([formControlName]):not([formControl])",inputs:["name","disabled","ngModel","ngModelOptions"],outputs:["ngModelChange"],exportAs:["ngModel"]},{kind:"directive",type:i7.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]},{kind:"component",type:CollapseTableComponent,selector:"collapse-table",inputs:["collapseSize","tableFixed","headerFixed","secondaryColor","tertiaryColor"]},{kind:"pipe",type:i7.DecimalPipe,name:"number"},{kind:"pipe",type:i7.CurrencyPipe,name:"currency"},{kind:"pipe",type:i7.DatePipe,name:"date"}]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DatatableComponent,decorators:[{type:Component,args:[{providers:[ProviderService],selector:"data-table",standalone:!1,template:'<style>\n\t.orangeRow {\n\t\tbackground-color: orangered;\n\t}\n\n\tcollapse-table tr:hover {\n\t\tbackground-color: lightblue;\n\t\tcursor: pointer;\n\t}\n\n\tcollapse-table {\n\t\twidth: 100%;\n\t}\n</style>\n\n<div class="row">\n\t<div class="input-group">\n\t\t<span class="input-group-btn">\n\t\t\t<button class="btn btn-primary" type="button" (click)="changeTableData()">Search!</button>\n\t\t</span>\n\t\t<input type="text" class="form-control" placeholder="{{ searchTitle }}" [(ngModel)]="tableData.searchString" (keyup.enter)="changeTableData()" style="z-index: 0" />\n\t</div>\n</div>\n<div class="row" style="padding-top: 20px">\n\t<collapse-table [collapseSize]="collapseSize" headerFixed="true">\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t@for (column of columns; track column) {\n\t\t\t\t\t<th (click)="sortColumn(column.data)" style="cursor: pointer">\n\t\t\t\t\t\t{{ column.name }}\n\t\t\t\t\t\t@if (tableData.sortColumn == column.data && tableData.sortOrder === \'desc\') {\n\t\t\t\t\t\t\t<i class="fa fa-caret-down"></i>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (tableData.sortColumn == column.data && tableData.sortOrder === \'asc\') {\n\t\t\t\t\t\t\t<i class="fa fa-caret-up"></i>\n\t\t\t\t\t\t}\n\t\t\t\t\t</th>\n\t\t\t\t}\n\t\t\t</tr>\n\t\t</thead>\n\t\t<tbody>\n\t\t\t@for (item of data; track item[\'_id\']) {\n\t\t\t\t<tr [ngClass]="{ orangeRow: item[\'color_red\'] }">\n\t\t\t\t\t@for (column of columns; track column.name) {\n\t\t\t\t\t\t<td (click)="navigateTo(item[\'_id\'], column.data)" [attr.data-label]="column.name">\n\t\t\t\t\t\t\t@if (typeOf(item[column.data]) !== \'boolean\' && column.data !== \'cost\' && column.data !== \'wells\' && column.data !== \'cost_total\' && column.data !== \'price\' && column.data !== \'date\' && column.data !== \'date_created\' && column.data !== \'date_delivered\' && column.data !== \'quantity\' && column.data !== \'quantity_string\' && column.data !== \'min_stock\' && column.data !== \'max_stock\' && column.data !== \'file_key\' && column.data !== \'date_in\') {\n\t\t\t\t\t\t\t\t<span>{{ column.subData ? item[column.data][column.subData] : item[column.data] }}</span>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@if (column.data === \'cost\' || column.data === \'price\' || column.data === \'cost_total\') {\n\t\t\t\t\t\t\t\t<span>{{ item[column.data] | currency: \'USD\' : \'symbol\' : \'1.2-2\' }}</span>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@if (column.data === \'date\' || column.data === \'date_created\' || column.data === \'date_delivered\') {\n\t\t\t\t\t\t\t\t<span>{{ item[column.data] | date: \'short\' }}</span>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@if (column.data === \'quantity\' || column.data === \'min_stock\' || column.data === \'max_stock\') {\n\t\t\t\t\t\t\t\t<span>{{ item[column.data] | number }}</span>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@if (column.data === \'quantity_string\') {\n\t\t\t\t\t\t\t\t<span>{{ item[column.data] | number }}</span>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@if (column.data === \'wells\') {\n\t\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t\t<pre>{{ item[column.data] }}</pre>\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@if (column.data === \'file_key\') {\n\t\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t\t<button type="button" (click)="openFile(item[column.data])" class="btn btn-secondary">Open File</button>\n\t\t\t\t\t\t\t\t\t\x3c!-- <button type="button" class="btn btn-warning" (click)="viewDeletedReason(item)" *ngIf="item.deleted.is_deleted">View Deleted Reason</button> --\x3e\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@if (typeOf(item[column.data]) === \'boolean\') {\n\t\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t\t@if (item[column.data]) {\n\t\t\t\t\t\t\t\t\t\t<i class="fa fa-check" style="color: green; font-size: 18px" aria-hidden="true"></i>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t@if (!item[column.data]) {\n\t\t\t\t\t\t\t\t\t\t<i class="fa fa-times" style="color: red; font-size: 18px" aria-hidden="true"></i>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</td>\n\t\t\t\t\t}\n\t\t\t\t</tr>\n\t\t\t}\n\t\t</tbody>\n\t</collapse-table>\n</div>\n<hr />\n<div class="row">\n\t<div class="col-lg-4">\n\t\t<div class="row">\n\t\t\t<div class="col-lg-8">\n\t\t\t\t<label class="form-control-label">Entries Per Page</label>\n\t\t\t\t<select class="form-control" [(ngModel)]="tableData.entriesPerPage" (ngModelChange)="changeTableData()">\n\t\t\t\t\t<option value="25">25</option>\n\t\t\t\t\t<option value="50">50</option>\n\t\t\t\t\t<option value="100">100</option>\n\t\t\t\t\t<option value="250">250</option>\n\t\t\t\t</select>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div class="col-lg-8" style="margin-top: 16px">\n\t\t<ngb-pagination class="float-end" boundaryLinks="true" [collectionSize]="totalItems" directionLinks="true" ellipses="false" [(page)]="tableData.pageNum" maxSize="6" [pageSize]="tableData.entriesPerPage" rotate="true" (pageChange)="changeTableData()"></ngb-pagination>\n\t</div>\n</div>\n'}]}],ctorParameters:()=>[{type:ProviderService}],propDecorators:{urlClick:[{type:Input}],columns:[{type:Input}],data:[{type:Input}],collapseSize:[{type:Input}],searchTitle:[{type:Input}],totalItems:[{type:Input}],onChangeTableData:[{type:Output}],tableData:[{type:Input}]}});class DatatableModule{static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DatatableModule,deps:[],target:i0.ɵɵFactoryTarget.NgModule});static"ɵmod"=i0.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"21.0.1",ngImport:i0,type:DatatableModule,declarations:[DatatableComponent],imports:[NgbModule,FormsModule,CommonModule,RouterModule,CollapseTableModule],exports:[DatatableComponent]});static"ɵinj"=i0.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DatatableModule,imports:[NgbModule,FormsModule,CommonModule,RouterModule,CollapseTableModule]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DatatableModule,decorators:[{type:NgModule,args:[{imports:[NgbModule,FormsModule,CommonModule,RouterModule,CollapseTableModule],exports:[DatatableComponent],declarations:[DatatableComponent],providers:[]}]}]});class FileUploadComponent extends BaseComponent{_resize;_services;_ds;_http;constructor(t,e,n,o){super(e),this._resize=t,this._services=e,this._ds=n,this._http=o}files=[];allowDelete=!1;allowReplace=!1;showFileUpload=!0;filesChanged=new EventEmitter;fileAdded=new EventEmitter;fileRemoved=new EventEmitter;fileType;download_link;supportedFileTypes=["application/pdf","text/plain","image/gif","image/png","image/jpeg","image/bmp"];pdfSrc="";replaceFileIndex=0;isUploading=!1;progressMsg="";windowSize$;windowSize=0;ngOnInit(){this.windowSize$=this._resize.onResize$.subscribe(t=>{this.windowSize=t?t.innerWidth:window.innerWidth})}ngOnDestroy(){this.windowSize$.unsubscribe()}dragFileAccepted(t){this.supportedFileTypes.indexOf(t.type)>=0?this.uploadWithEmit(t,"misc").then(()=>{},t=>{this._ds.error("Could not upload file, incorrect type")}):this._ds.error("Invalid format, the supported file types are: "+this.supportedFileTypes)}upload(t,e,n,o,r){return new Promise((i,a)=>{this.progressMsg="Uploading "+(o||t.name),this._services._aws.uploadFile(t,e,n,o).then(a=>{const s={_id:a._id,name:o||t.name,size:t.size,status:r||"Uploaded",key:a.key,order:n||-1,type:e};this.isUploading=!1,this.files.push(s),this.files=this.files.sort((t,e)=>t.order-e.order),i(s)},t=>{this._ds.error("Could not upload file. "+t),a(t)}),this.isUploading=!0})}uploadWithEmit(t,e,n,o,r){return new Promise((i,a)=>{this.progressMsg="Uploading "+(o||t.name),this._services._aws.uploadFile(t,e,n,o).then(a=>{const s={_id:a._id,name:o||t.name,size:t.size,status:r||"Uploaded",key:a.key,order:n||-1,type:e};this.isUploading=!1,this.files=this.files.sort((t,e)=>t.order-e.order),this.fileAdded.emit(s),i(s)},t=>{this._ds.error("Could not upload file. "+t),a(t)}),this.isUploading=!0})}delete(t,e=!0){this.pdfSrc="",e?this._ds.confirm("Are you sure you want to delete this file?").then(e=>{this._services._aws.deleteFile(this.files[t].key,(e,n)=>{e&&(this._ds.error("Could not delete file"),this._services._socket.call("insertErrorLog","Widgets.File-Upload - Delete File",[this.files[t].key,e]))}),this.files.splice(t,1)},t=>{}):(this._services._aws.deleteFile(this.files[t].key,(e,n)=>{e&&this._services._socket.call("insertErrorLog","Widgets.File-Upload - Delete File",[this.files[t].key,e])}),this.files.splice(t,1))}deleteWithEmit(t,e=!0){this.pdfSrc="";let n=Object.assign({},this.files[t]);e?this._ds.confirm("Are you sure you want to delete this file?").then(e=>{this._services._aws.deleteFile(this.files[t].key,(e,o)=>{e&&(this._ds.error("Could not delete file"),this._services._socket.call("insertErrorLog","Widgets.File-Upload - Delete File",[this.files[t].key,e])),this.fileRemoved.emit(n)})},t=>{}):this._services._aws.deleteFile(this.files[t].key,(e,o)=>{e&&this._services._socket.call("insertErrorLog","Widgets.File-Upload - Delete File",[this.files[t].key,e]),this.fileRemoved.emit(n)})}deleteFileWithId(t){this.delete(this.files.map(t=>t._id).indexOf(t),!1)}open(t){this._services._socket.call("getSignedUrl",t.key,900,(e,n)=>{n?window.open(n):this._services._socket.call("insertErrorLog","Widgets-file - getsignedurl",[t.key,e])})}setPDFViewerSrc(t){this._services._socket.call("getSignedUrl",t.key,900,(e,n)=>{n?this.pdfSrc=n:(this._ds.error("Could not get signed url for file"),this._services._socket.call("insertErrorLog","Widgets-file - getsignedurl pdfviewer",[t.key,e]))})}onFileSelect(t){this.uploadWithEmit(t.target.files[0],this.fileType?this.fileType:"misc").then(()=>{},()=>{}),t.srcElement.value=""}onFileSelectReplace(t){if(t.target.files[0]){this.files[this.replaceFileIndex]._id;let e=this.files[this.replaceFileIndex].type,n=this.files[this.replaceFileIndex].order,o=this.files[this.replaceFileIndex].name.replace(/\.[^\.]+$/,"")+"."+t.target.files[0].name.split(".")[t.target.files[0].name.split(".").length-1],r=this.files[this.replaceFileIndex].status;this.deleteWithEmit(this.replaceFileIndex,!1),"Unsigned"===r?this._ds.confirm("Are you replacing this file with a signed copy?").then(r=>{this.uploadWithEmit(t.target.files[0],e,n,o,"Signed").then(t=>{t.key,t._id},t=>{})},r=>{this.uploadWithEmit(t.target.files[0],e,n,o).then(t=>{t.key,t._id},t=>{})}):this.uploadWithEmit(t.target.files[0],e,n,o).then(t=>{t.key,t._id},t=>{})}}userIsInRole(t){return this._services._account.isUserInView(t)}isMobile(){}downloadResource(t){return this._http.get(t,{responseType:"blob"}).toPromise()}download(t){this._services._socket.call("getSignedUrl",t.key,900,async(e,n)=>{if(n){const e=await this.downloadResource(n),o=window.URL.createObjectURL(e),r=this.download_link.nativeElement;r.href=o,r.download=t.name,r.click(),window.URL.revokeObjectURL(o)}else this._services._socket.call("insertErrorLog","Widgets-file - update bol",[e])})}email(t){this._ds.input("Email file to which address?",[{label:"Email Address",form:"email",data:"",validators:[Validators.required,this._services._vs.email],validatorErrors:["required","email"],validatorMsg:["Email is required","Email is invalid"],required:!0}]).then(e=>{this._services._socket.call("emailFile",t._id,e.email.value,(t,e)=>{t?this._ds.error("Could not send email: "+t):this._services._alert.setAlert("success","Email has been sent")})},t=>{})}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:FileUploadComponent,deps:[{token:ResizeService},{token:ProviderService},{token:DialogService},{token:i4.HttpClient}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"21.0.1",type:FileUploadComponent,isStandalone:!1,selector:"file-upload",inputs:{files:"files",allowDelete:"allowDelete",allowReplace:"allowReplace",showFileUpload:"showFileUpload",fileType:"fileType"},outputs:{filesChanged:"filesChanged",fileAdded:"fileAdded",fileRemoved:"fileRemoved"},viewQueries:[{propertyName:"download_link",first:!0,predicate:["download_link"],descendants:!0,static:!0}],usesInheritance:!0,ngImport:i0,template:'<style>\n\thtml,\n\tbody {\n\t\theight: 100%;\n\t}\n\n\tcollapse-table tr:hover {\n\t\tbackground-color: lightblue;\n\t\tcursor: pointer;\n\t}\n\n\tcollapse-table {\n\t\twidth: 100%;\n\t}\n\n\t/* Label container: */\n\t.file {\n\t\tdisplay: inline-block;\n\t\tpadding: 0 0 0 0.5em;\n\t\tcursor: pointer;\n\t\tposition: relative;\n\t\tborder: 0.075rem solid #ddd;\n\t\tborder-radius: 0.25rem;\n\t}\n\n\t/* The pseudo input field: */\n\t.file::before {\n\t\tcontent: \'\';\n\t\tdisplay: block;\n\t\tposition: absolute;\n\t\tleft: 0;\n\t\tright: 0;\n\t\ttop: 0;\n\t\tbottom: 0;\n\t\tz-index: -1;\n\n\t\t/* Bootstrap appearance: */\n\t\tbackground-color: #fff;\n\t\tborder: 0.075rem solid #ddd;\n\t\tborder-radius: 0.25rem;\n\t\t-webkit-box-shadow: inset 0 0.2rem 0.4rem rgba(0, 0, 0, 0.05);\n\t\tbox-shadow: inset 0 0.2rem 0.4rem rgba(0, 0, 0, 0.05);\n\t}\n\n\t/* The pseudo button: */\n\t.file::after {\n\t\tcontent: \'Browse\';\n\t\tdisplay: inline-block;\n\n\t\t/* Bootstrap appearance: */\n\t\tbackground-color: #eee;\n\t\tborder: 0.075rem solid #ddd;\n\t\tborder-radius: 0 0.25rem 0.25rem 0;\n\t\tpadding: 0.5rem 1rem;\n\t\tline-height: 1.5;\n\t\tcolor: #555;\n\t}\n\n\t.file input[type=\'file\'] {\n\t\tcursor: pointer;\n\t\tborder: 0 none;\n\t\twidth: 12em;\n\t}\n\n\t/* -webkit hide the button: */\n\t.file input[type=\'file\']::-webkit-file-upload-button {\n\t\tborder: 0;\n\t\tpadding: 0;\n\t\tmargin: 0;\n\t\twidth: 0;\n\t\tbackground: transparent;\n\t}\n\n\t/* IE10+ hide the button: */\n\t.file input[type=\'file\']::-ms-browse {\n\t\tpadding: 0;\n\t\tmargin: -1px;\n\t\twidth: 0;\n\t\tborder: 0;\n\t\tbackground: transparent;\n\t}\n\n\t.file input[type=\'file\']::-ms-value {\n\t\tbackground: #fff;\n\t\tborder: 0;\n\t}\n\n\tcard {\n\t\twidth: 100%;\n\t}\n</style>\n\n<a style="display: none" #download_link></a>\n<input hidden type="file" #fileInputReplace (change)="onFileSelectReplace($event)" />\n\n<div class="card">\n\t<div class="card-header">\n\t\t<strong class="pull-left">Files</strong>\n\t</div>\n\t<div class="card-block">\n\t\t<div class="row">\n\t\t\t<div class="col-lg-6">\n\t\t\t\t@if (showFileUpload) {\n\t\t\t\t\t<div class="row">\n\t\t\t\t\t\t<div class="col-lg-6">\n\t\t\t\t\t\t\t<div class="container">\n\t\t\t\t\t\t\t\t<div style="margin: 10px 0px; font-weight: bold">Upload File</div>\n\t\t\t\t\t\t\t\t<label class="file">\n\t\t\t\t\t\t\t\t\t<input type="file" #fileInput (change)="onFileSelect($event)" />\n\t\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t\t<br />\n\t\t\t\t\t\t\t\t<ngx-file-drop dropZoneLabel="Drop files here" style="width: 223px; height: 112px; border: 1px black dashed; border-radius: 5px; justify-content: center" class="vertical-align" (onFileDrop)="dragFileAccepted($event)"></ngx-file-drop>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class="col-lg-6">\n\t\t\t\t\t\t\t@if (isUploading) {\n\t\t\t\t\t\t\t\t<b>{{ progressMsg || \'N/A\' }}</b>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t\t<div class="row" style="margin-top: 10px">\n\t\t\t\t\t@if (windowSize > 980) {\n\t\t\t\t\t\t<div class="col-lg-12">\n\t\t\t\t\t\t\t@if (pdfSrc) {\n\t\t\t\t\t\t\t\t<div style="text-align: center">\n\t\t\t\t\t\t\t\t\t<resolveio-client-lib-pdf-viewer [pdfSrc]="pdfSrc"></resolveio-client-lib-pdf-viewer>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class="col-lg-6">\n\t\t\t\t@if (files && files.length) {\n\t\t\t\t\t<b>Uploaded Files</b>\n\t\t\t\t\t<div [style.max-height]="windowSize > 900 ? \'300px\' : \'\'" [style.overflow-y]="windowSize > 900 ? \'auto\' : \'\'">\n\t\t\t\t\t\t<collapse-table collapseSize="900">\n\t\t\t\t\t\t\t<thead>\n\t\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t\t<th>File Name</th>\n\t\t\t\t\t\t\t\t\t<th>Size</th>\n\t\t\t\t\t\t\t\t\t<th>Type</th>\n\t\t\t\t\t\t\t\t\t<th>Actions</th>\n\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t</thead>\n\t\t\t\t\t\t\t<tbody>\n\t\t\t\t\t\t\t\t@for (file of files; track file._id; let i = $index) {\n\t\t\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t\t\t<td data-label="File Name" (click)="setPDFViewerSrc(file)">{{ file.name }}</td>\n\t\t\t\t\t\t\t\t\t\t<td data-label="Size" (click)="setPDFViewerSrc(file)">{{ file.size / 1024 / 1024 | number: \'.2\' }} MB</td>\n\t\t\t\t\t\t\t\t\t\t<td data-label="Type" (click)="setPDFViewerSrc(file)">{{ file.type }}</td>\n\t\t\t\t\t\t\t\t\t\t<td data-label="Actions">\n\t\t\t\t\t\t\t\t\t\t\t<responsive-button-group collapseSize="900">\n\t\t\t\t\t\t\t\t\t\t\t\t<button type="button" class="btn btn-success" (click)="open(file)">Open</button>\n\t\t\t\t\t\t\t\t\t\t\t\t<button type="button" class="btn btn-primary" (click)="download(file)">Download</button>\n\t\t\t\t\t\t\t\t\t\t\t\t<button [hidden]="!allowDelete || (file.type !== \'misc\' && !userIsInRole(\'super-admin\'))" type="button" class="btn btn-danger" (click)="deleteWithEmit(i)">Delete</button>\n\t\t\t\t\t\t\t\t\t\t\t\t<button [hidden]="!allowDelete || (file.type !== \'misc\' && !userIsInRole(\'super-admin\'))" type="button" class="btn btn-danger" (click)="fileInputReplace.click(); replaceFileIndex = i">Replace</button>\n\t\t\t\t\t\t\t\t\t\t\t\t<button type="button" class="btn btn-warning" (click)="email(file)">Email</button>\n\t\t\t\t\t\t\t\t\t\t\t</responsive-button-group>\n\t\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</tbody>\n\t\t\t\t\t\t</collapse-table>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t\t@if (!files || !files.length) {\n\t\t\t\t\t<b>No Uploaded Files</b>\n\t\t\t\t}\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>\n',styles:['html,body{height:100%}collapse-table tr:hover{background-color:#add8e6;cursor:pointer}collapse-table{width:100%}.file{display:inline-block;padding:0 0 0 .5em;cursor:pointer;position:relative;border:.075rem solid #ddd;border-radius:.25rem}.file:before{content:"";display:block;position:absolute;inset:0;z-index:-1;background-color:#fff;border:.075rem solid #ddd;border-radius:.25rem;-webkit-box-shadow:inset 0 .2rem .4rem rgba(0,0,0,.05);box-shadow:inset 0 .2rem .4rem #0000000d}.file:after{content:"Browse";display:inline-block;background-color:#eee;border:.075rem solid #ddd;border-radius:0 .25rem .25rem 0;padding:.5rem 1rem;line-height:1.5;color:#555}.file input[type=file]{cursor:pointer;border:0 none;width:12em}.file input[type=file]::-webkit-file-upload-button{border:0;padding:0;margin:0;width:0;background:transparent}.file input[type=file]::-ms-browse{padding:0;margin:-1px;width:0;border:0;background:transparent}.file input[type=file]::-ms-value{background:#fff;border:0}card{width:100%}\n'],dependencies:[{kind:"component",type:CollapseTableComponent,selector:"collapse-table",inputs:["collapseSize","tableFixed","headerFixed","secondaryColor","tertiaryColor"]},{kind:"component",type:ResponsiveButtonGroupComponent,selector:"responsive-button-group",inputs:["collapseSize"]},{kind:"component",type:i7$1.NgxFileDropComponent,selector:"ngx-file-drop",inputs:["accept","directory","multiple","dropZoneLabel","dropZoneClassName","useDragEnter","contentClassName","showBrowseBtn","browseBtnClassName","browseBtnLabel","disabled"],outputs:["onFileDrop","onFileOver","onFileLeave"]},{kind:"component",type:i8.PdfViewerComponent,selector:"resolveio-client-lib-pdf-viewer",inputs:["pdfSrc","fileName"]},{kind:"pipe",type:i7.DecimalPipe,name:"number"}]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:FileUploadComponent,decorators:[{type:Component,args:[{selector:"file-upload",standalone:!1,template:'<style>\n\thtml,\n\tbody {\n\t\theight: 100%;\n\t}\n\n\tcollapse-table tr:hover {\n\t\tbackground-color: lightblue;\n\t\tcursor: pointer;\n\t}\n\n\tcollapse-table {\n\t\twidth: 100%;\n\t}\n\n\t/* Label container: */\n\t.file {\n\t\tdisplay: inline-block;\n\t\tpadding: 0 0 0 0.5em;\n\t\tcursor: pointer;\n\t\tposition: relative;\n\t\tborder: 0.075rem solid #ddd;\n\t\tborder-radius: 0.25rem;\n\t}\n\n\t/* The pseudo input field: */\n\t.file::before {\n\t\tcontent: \'\';\n\t\tdisplay: block;\n\t\tposition: absolute;\n\t\tleft: 0;\n\t\tright: 0;\n\t\ttop: 0;\n\t\tbottom: 0;\n\t\tz-index: -1;\n\n\t\t/* Bootstrap appearance: */\n\t\tbackground-color: #fff;\n\t\tborder: 0.075rem solid #ddd;\n\t\tborder-radius: 0.25rem;\n\t\t-webkit-box-shadow: inset 0 0.2rem 0.4rem rgba(0, 0, 0, 0.05);\n\t\tbox-shadow: inset 0 0.2rem 0.4rem rgba(0, 0, 0, 0.05);\n\t}\n\n\t/* The pseudo button: */\n\t.file::after {\n\t\tcontent: \'Browse\';\n\t\tdisplay: inline-block;\n\n\t\t/* Bootstrap appearance: */\n\t\tbackground-color: #eee;\n\t\tborder: 0.075rem solid #ddd;\n\t\tborder-radius: 0 0.25rem 0.25rem 0;\n\t\tpadding: 0.5rem 1rem;\n\t\tline-height: 1.5;\n\t\tcolor: #555;\n\t}\n\n\t.file input[type=\'file\'] {\n\t\tcursor: pointer;\n\t\tborder: 0 none;\n\t\twidth: 12em;\n\t}\n\n\t/* -webkit hide the button: */\n\t.file input[type=\'file\']::-webkit-file-upload-button {\n\t\tborder: 0;\n\t\tpadding: 0;\n\t\tmargin: 0;\n\t\twidth: 0;\n\t\tbackground: transparent;\n\t}\n\n\t/* IE10+ hide the button: */\n\t.file input[type=\'file\']::-ms-browse {\n\t\tpadding: 0;\n\t\tmargin: -1px;\n\t\twidth: 0;\n\t\tborder: 0;\n\t\tbackground: transparent;\n\t}\n\n\t.file input[type=\'file\']::-ms-value {\n\t\tbackground: #fff;\n\t\tborder: 0;\n\t}\n\n\tcard {\n\t\twidth: 100%;\n\t}\n</style>\n\n<a style="display: none" #download_link></a>\n<input hidden type="file" #fileInputReplace (change)="onFileSelectReplace($event)" />\n\n<div class="card">\n\t<div class="card-header">\n\t\t<strong class="pull-left">Files</strong>\n\t</div>\n\t<div class="card-block">\n\t\t<div class="row">\n\t\t\t<div class="col-lg-6">\n\t\t\t\t@if (showFileUpload) {\n\t\t\t\t\t<div class="row">\n\t\t\t\t\t\t<div class="col-lg-6">\n\t\t\t\t\t\t\t<div class="container">\n\t\t\t\t\t\t\t\t<div style="margin: 10px 0px; font-weight: bold">Upload File</div>\n\t\t\t\t\t\t\t\t<label class="file">\n\t\t\t\t\t\t\t\t\t<input type="file" #fileInput (change)="onFileSelect($event)" />\n\t\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t\t<br />\n\t\t\t\t\t\t\t\t<ngx-file-drop dropZoneLabel="Drop files here" style="width: 223px; height: 112px; border: 1px black dashed; border-radius: 5px; justify-content: center" class="vertical-align" (onFileDrop)="dragFileAccepted($event)"></ngx-file-drop>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class="col-lg-6">\n\t\t\t\t\t\t\t@if (isUploading) {\n\t\t\t\t\t\t\t\t<b>{{ progressMsg || \'N/A\' }}</b>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t\t<div class="row" style="margin-top: 10px">\n\t\t\t\t\t@if (windowSize > 980) {\n\t\t\t\t\t\t<div class="col-lg-12">\n\t\t\t\t\t\t\t@if (pdfSrc) {\n\t\t\t\t\t\t\t\t<div style="text-align: center">\n\t\t\t\t\t\t\t\t\t<resolveio-client-lib-pdf-viewer [pdfSrc]="pdfSrc"></resolveio-client-lib-pdf-viewer>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class="col-lg-6">\n\t\t\t\t@if (files && files.length) {\n\t\t\t\t\t<b>Uploaded Files</b>\n\t\t\t\t\t<div [style.max-height]="windowSize > 900 ? \'300px\' : \'\'" [style.overflow-y]="windowSize > 900 ? \'auto\' : \'\'">\n\t\t\t\t\t\t<collapse-table collapseSize="900">\n\t\t\t\t\t\t\t<thead>\n\t\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t\t<th>File Name</th>\n\t\t\t\t\t\t\t\t\t<th>Size</th>\n\t\t\t\t\t\t\t\t\t<th>Type</th>\n\t\t\t\t\t\t\t\t\t<th>Actions</th>\n\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t</thead>\n\t\t\t\t\t\t\t<tbody>\n\t\t\t\t\t\t\t\t@for (file of files; track file._id; let i = $index) {\n\t\t\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t\t\t<td data-label="File Name" (click)="setPDFViewerSrc(file)">{{ file.name }}</td>\n\t\t\t\t\t\t\t\t\t\t<td data-label="Size" (click)="setPDFViewerSrc(file)">{{ file.size / 1024 / 1024 | number: \'.2\' }} MB</td>\n\t\t\t\t\t\t\t\t\t\t<td data-label="Type" (click)="setPDFViewerSrc(file)">{{ file.type }}</td>\n\t\t\t\t\t\t\t\t\t\t<td data-label="Actions">\n\t\t\t\t\t\t\t\t\t\t\t<responsive-button-group collapseSize="900">\n\t\t\t\t\t\t\t\t\t\t\t\t<button type="button" class="btn btn-success" (click)="open(file)">Open</button>\n\t\t\t\t\t\t\t\t\t\t\t\t<button type="button" class="btn btn-primary" (click)="download(file)">Download</button>\n\t\t\t\t\t\t\t\t\t\t\t\t<button [hidden]="!allowDelete || (file.type !== \'misc\' && !userIsInRole(\'super-admin\'))" type="button" class="btn btn-danger" (click)="deleteWithEmit(i)">Delete</button>\n\t\t\t\t\t\t\t\t\t\t\t\t<button [hidden]="!allowDelete || (file.type !== \'misc\' && !userIsInRole(\'super-admin\'))" type="button" class="btn btn-danger" (click)="fileInputReplace.click(); replaceFileIndex = i">Replace</button>\n\t\t\t\t\t\t\t\t\t\t\t\t<button type="button" class="btn btn-warning" (click)="email(file)">Email</button>\n\t\t\t\t\t\t\t\t\t\t\t</responsive-button-group>\n\t\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</tbody>\n\t\t\t\t\t\t</collapse-table>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t\t@if (!files || !files.length) {\n\t\t\t\t\t<b>No Uploaded Files</b>\n\t\t\t\t}\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>\n'}]}],ctorParameters:()=>[{type:ResizeService},{type:ProviderService},{type:DialogService},{type:i4.HttpClient}],propDecorators:{files:[{type:Input}],allowDelete:[{type:Input}],allowReplace:[{type:Input}],showFileUpload:[{type:Input}],filesChanged:[{type:Output}],fileAdded:[{type:Output}],fileRemoved:[{type:Output}],fileType:[{type:Input}],download_link:[{type:ViewChild,args:["download_link",{static:!0}]}]}});class FileModule{static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:FileModule,deps:[],target:i0.ɵɵFactoryTarget.NgModule});static"ɵmod"=i0.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"21.0.1",ngImport:i0,type:FileModule,declarations:[FileUploadComponent],imports:[CommonModule,FormsModule,CollapseTableModule,NgbModule,ResponsiveButtonGroupModule,NgxFileDropModule,PdfViewerModule],exports:[FileUploadComponent]});static"ɵinj"=i0.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:FileModule,imports:[CommonModule,FormsModule,CollapseTableModule,NgbModule,ResponsiveButtonGroupModule,NgxFileDropModule,PdfViewerModule]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:FileModule,decorators:[{type:NgModule,args:[{imports:[CommonModule,FormsModule,CollapseTableModule,NgbModule,ResponsiveButtonGroupModule,NgxFileDropModule,PdfViewerModule],declarations:[FileUploadComponent],exports:[FileUploadComponent]}]}]});class UserSettingsModule{static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:UserSettingsModule,deps:[],target:i0.ɵɵFactoryTarget.NgModule});static"ɵmod"=i0.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"21.0.1",ngImport:i0,type:UserSettingsModule,declarations:[UserSettingsComponent,UsersSettingsComponent],imports:[SharedModule,i1$1.RouterModule,DatatableModule,FileModule,NgbAccordionModule,NgbModule]});static"ɵinj"=i0.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:UserSettingsModule,providers:[UserSettingsService],imports:[SharedModule,UserSettingsRouting,DatatableModule,FileModule,NgbAccordionModule,NgbModule]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:UserSettingsModule,decorators:[{type:NgModule,args:[{imports:[SharedModule,UserSettingsRouting,DatatableModule,FileModule,NgbAccordionModule,NgbModule],declarations:[UserSettingsComponent,UsersSettingsComponent],providers:[UserSettingsService]}]}]});class HomeComponent extends BaseComponent{_route;auth;_services;_http;_app;menuData={title:"Home",module:null,description:null,description_name:null,tabs:[{link:"home",params:null,label:"Home"}]};selectedSolution="Asset";loggingOut$=null;subscription$=null;isLoggedIn;form;constructor(t,e,n,o,r){super(n),this._route=t,this.auth=e,this._services=n,this._http=o,this._app=r}ngOnInit(){this._services._app.setNavbarModuleData(this.menuData),this.loggingOut$=this._app.isLoggingOut.subscribe(t=>{t||(this._services._account.getUser()?this._services._account.getUser().settings&&this._services._account.getUser().settings.opening_route&&"/home"!==this._services._account.getUser().settings.opening_route?this._services._router.navigateByUrl(this._services._account.getUser().settings.opening_route):"/home"!==this._services._router.url&&this._services._router.navigateByUrl("/home"):(this.subscription$&&this.subscription$.unsubscribe(),this.subscription$=this._services._account.user.subscribe(t=>{t&&t.settings&&t.settings.opening_route&&"/home"!==t.settings.opening_route?this._services._router.navigateByUrl(t.settings.opening_route):"/home"!==this._services._router.url&&this._services._router.navigateByUrl("/home")},()=>{})))})}ngOnDestroy(){this.subscription$&&this.subscription$.unsubscribe(),this.loggingOut$&&this.loggingOut$.unsubscribe()}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:HomeComponent,deps:[{token:i1$1.ActivatedRoute},{token:AuthService},{token:ProviderService},{token:i4.HttpClient},{token:CoreService}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"21.0.1",type:HomeComponent,isStandalone:!1,selector:"resolveio-home",providers:[ProviderService],usesInheritance:!0,ngImport:i0,template:'<div class="home-hero h-100">\n\t<div class="row h-100 m-0">\n\t\t<div class="col-lg-12 h-100">\n\t\t\t<div class="jumbotron jumbotron-fluid h-100 home-hero__jumbotron">\n\t\t\t\t<div class="container text-center h-100 home-hero__container">\n\t\t\t\t\t<img src="/assets/images/ResolveIO.png" class="img-fluid home-hero__logo" alt="ResolveIO logo" />\n\t\t\t\t\t<p class="home-hero__tagline">The All-in-One Solution for Tracking Inventory, Ordering, POs, Management, and Much More!</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>\n',styles:[".home-hero{height:100%;overflow-x:hidden}.home-hero__jumbotron{padding-bottom:0}.home-hero__container{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;padding-left:1.5rem;padding-right:1.5rem}.home-hero__logo{width:100%;max-width:750px;height:auto;object-fit:contain}.home-hero__tagline{font-size:24px;font-style:italic}@media(max-width:767.98px){.home-hero__container{padding-left:1.25rem;padding-right:1.25rem}.home-hero__tagline{font-size:18px}}\n"]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:HomeComponent,decorators:[{type:Component,args:[{selector:"resolveio-home",providers:[ProviderService],standalone:!1,template:'<div class="home-hero h-100">\n\t<div class="row h-100 m-0">\n\t\t<div class="col-lg-12 h-100">\n\t\t\t<div class="jumbotron jumbotron-fluid h-100 home-hero__jumbotron">\n\t\t\t\t<div class="container text-center h-100 home-hero__container">\n\t\t\t\t\t<img src="/assets/images/ResolveIO.png" class="img-fluid home-hero__logo" alt="ResolveIO logo" />\n\t\t\t\t\t<p class="home-hero__tagline">The All-in-One Solution for Tracking Inventory, Ordering, POs, Management, and Much More!</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>\n',styles:[".home-hero{height:100%;overflow-x:hidden}.home-hero__jumbotron{padding-bottom:0}.home-hero__container{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;padding-left:1.5rem;padding-right:1.5rem}.home-hero__logo{width:100%;max-width:750px;height:auto;object-fit:contain}.home-hero__tagline{font-size:24px;font-style:italic}@media(max-width:767.98px){.home-hero__container{padding-left:1.25rem;padding-right:1.25rem}.home-hero__tagline{font-size:18px}}\n"]}]}],ctorParameters:()=>[{type:i1$1.ActivatedRoute},{type:AuthService},{type:ProviderService},{type:i4.HttpClient},{type:CoreService}]});class NgSelectStickyAdapterService{_account;_socket;constructor(t,e){this._account=t,this._socket=e}get userChanges(){return this._account.user.asObservable()}getUser(){return this._account.getUser()}saveStickySelects(t,e="ng-select"){const n=this._account.getUser();if(!n)return;const o={...n.other||{},stickySelects:t},r={...n,other:o};return this._account.setUser(r),this._socket.call("saveUserStickySelects",t,n._id).then(e=>{const o=this._account.getUser();if(!o||o._id!==n._id)return;const r=e?.stickySelects||t,i={...o,__v:e?.__v??o.__v,other:{...o.other||{},stickySelects:r}};this._account.setUser(i)}).catch(()=>{})}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:NgSelectStickyAdapterService,deps:[{token:AccountManagerService},{token:SocketManagerService}],target:i0.ɵɵFactoryTarget.Injectable});static"ɵprov"=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:NgSelectStickyAdapterService})}function rioDatePickerConfigFactory(t,e){return{resolveFirstDayOfWeek:()=>{const e=t.getUser()?.other?.date_picker_day_start;if("M"===e||"S"===e)return e;if("string"==typeof e){const t=e.toUpperCase();if("M"===t||"S"===t)return t}return 1===e?"M":7===e||0===e?"S":null},resolveTimezone:()=>e.environment.value?.TZ_CLIENT||null}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:NgSelectStickyAdapterService,decorators:[{type:Injectable}],ctorParameters:()=>[{type:AccountManagerService},{type:SocketManagerService}]});class CoreModule{static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:CoreModule,deps:[],target:i0.ɵɵFactoryTarget.NgModule});static"ɵmod"=i0.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"21.0.1",ngImport:i0,type:CoreModule,declarations:[CoreComponent,HomeComponent,LoggerComponent,HtmlDiffViewerComponent,NavbarMainComponent,NavbarModuleComponent,ForgotPasswordComponent,EnrollComponent,Auth365Component,FocusDirective,ScrollDirective,DialogConfirmContent,DialogErrorContent,DialogInputContent,DialogNotifyContent,DialogSelectDateTimeContent,DialogSelectDataLabelsContent,DialogLoginContent,DialogRegisterContent,DialogSelectWithButtonsURLContent,DialogSelectArrayObjsContent,DialogSelectArrayContent],imports:[SharedModule,NgbModule,i1.ToastrModule,UserSettingsModule,BrowserAnimationsModule,CollapseTableModule],exports:[CoreComponent,HomeComponent,LoggerComponent,NavbarMainComponent,NavbarModuleComponent,ForgotPasswordComponent,EnrollComponent,Auth365Component,FocusDirective,ScrollDirective]});static"ɵinj"=i0.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:CoreModule,providers:[CoreService,AuthService,AuthGuard,CanDeactivateGuard,DialogService,ValidationService,AwsService,AuthPermissionService,WindowRefService,AlertService,SocketService,SocketManagerService,TokenManagerService,AccountManagerService,OfflineManagerService,DeviceDetectorService,LocalStorageService,NgSelectStickyAdapterService,{provide:NG_SELECT_STICKY_ADAPTER,useExisting:NgSelectStickyAdapterService},{provide:RIO_DATE_PICKER_CONFIG,useFactory:rioDatePickerConfigFactory,deps:[AccountManagerService,CoreService]},provideHttpClient(withInterceptorsFromDi())],imports:[SharedModule,NgbModule,ToastrModule.forRoot(),UserSettingsModule,BrowserAnimationsModule,CollapseTableModule]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:CoreModule,decorators:[{type:NgModule,args:[{declarations:[CoreComponent,HomeComponent,LoggerComponent,HtmlDiffViewerComponent,NavbarMainComponent,NavbarModuleComponent,ForgotPasswordComponent,EnrollComponent,Auth365Component,FocusDirective,ScrollDirective,DialogConfirmContent,DialogErrorContent,DialogInputContent,DialogNotifyContent,DialogSelectDateTimeContent,DialogSelectDataLabelsContent,DialogLoginContent,DialogRegisterContent,DialogSelectWithButtonsURLContent,DialogSelectArrayObjsContent,DialogSelectArrayContent],exports:[CoreComponent,HomeComponent,LoggerComponent,NavbarMainComponent,NavbarModuleComponent,ForgotPasswordComponent,EnrollComponent,Auth365Component,FocusDirective,ScrollDirective],imports:[SharedModule,NgbModule,ToastrModule.forRoot(),UserSettingsModule,BrowserAnimationsModule,CollapseTableModule],providers:[CoreService,AuthService,AuthGuard,CanDeactivateGuard,DialogService,ValidationService,AwsService,AuthPermissionService,WindowRefService,AlertService,SocketService,SocketManagerService,TokenManagerService,AccountManagerService,OfflineManagerService,DeviceDetectorService,LocalStorageService,NgSelectStickyAdapterService,{provide:NG_SELECT_STICKY_ADAPTER,useExisting:NgSelectStickyAdapterService},{provide:RIO_DATE_PICKER_CONFIG,useFactory:rioDatePickerConfigFactory,deps:[AccountManagerService,CoreService]},provideHttpClient(withInterceptorsFromDi())]}]}]});class SupportTicketService{selectedSupportTicket=new BehaviorSubject("0");constructor(){}setSelectedSupportTicket(t){this.selectedSupportTicket.next(t)}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SupportTicketService,deps:[],target:i0.ɵɵFactoryTarget.Injectable});static"ɵprov"=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SupportTicketService})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SupportTicketService,decorators:[{type:Injectable}],ctorParameters:()=>[]});class SupportTicketComponent extends BaseComponent{_sts;_services;selectedResolveIOSupport$;menuData;constructor(t,e){super(e),this._sts=t,this._services=e}ngOnInit(){this.selectedResolveIOSupport$=this._sts.selectedSupportTicket.subscribe(t=>this.selectedResolveIOSupportChanged(t))}ngOnDestroy(){this._sts.setSelectedSupportTicket("0"),this.selectedResolveIOSupport$.unsubscribe()}selectedResolveIOSupportChanged(t){"0"!==t?this._services._socket.call("supportGetSupportTicketWithId",t,(e,n)=>{n?this.setResolveIOSupportModuleMenuData(t,n):this.setResolveIOSupportModuleMenuData()}):this.setResolveIOSupportModuleMenuData()}setResolveIOSupportModuleMenuData(t,e){let n=[];n.push({link:"/support-ticket/list",params:null,label:"List",tourAnchor:"navBarModuleSupportList"}),n.push({link:"/support-ticket/new",params:null,label:"New",tourAnchor:"navBarModuleSupportNew"}),n.push({link:"/support-ticket/detail",params:t||"0",label:"Details"}),(this._services._account.isUserSuperAdmin()||e&&e.id_user_created===this._services._account.getUser()._id)&&n.push({link:"/support-ticket/edit",params:t||"0",label:"Edit"}),this.menuData={title:"Support Center",module:"Support Ticket",description_name:"Support Ticket #",description:e?e.support_ticket_number_string:"",tabs:n},this._services._app.setNavbarModuleData(this.menuData)}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SupportTicketComponent,deps:[{token:SupportTicketService},{token:ProviderService}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"21.0.1",type:SupportTicketComponent,isStandalone:!1,selector:"resolveio-support-ticket",providers:[ProviderService],usesInheritance:!0,ngImport:i0,template:"<router-outlet></router-outlet>",isInline:!0,dependencies:[{kind:"directive",type:i1$1.RouterOutlet,selector:"router-outlet",inputs:["name","routerOutletData"],outputs:["activate","deactivate","attach","detach"],exportAs:["outlet"]}]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SupportTicketComponent,decorators:[{type:Component,args:[{selector:"resolveio-support-ticket",providers:[ProviderService],template:"<router-outlet></router-outlet>",standalone:!1}]}],ctorParameters:()=>[{type:SupportTicketService},{type:ProviderService}]});class SupportTicketListComponent extends BaseComponent{_sts;_route;_services;route$;support_tickets;subscription$=[];columns=[{name:"Support Ticket #",data:"support_ticket_number"},{name:"Date Created",data:"date_created"},{name:"Type",data:"type"},{name:"Issue",data:"issue"},{name:"Status",data:"status"},{name:"Created By",data:"user_created"}];tableData={searchString:"",entriesPerPage:"25",pageNum:1,sortColumn:"",sortOrder:"desc",filters:{status:"Opened",substatus:"All"}};totalItems=1e3;constructor(t,e,n){super(n),this._sts=t,this._route=e,this._services=n}ngOnInit(){this._sts.setSelectedSupportTicket("0"),this.route$=this._route.queryParams.subscribe(()=>{let t=Object.keys(this.tableData),e=Object.keys(this.tableData.filters);this._route.snapshot.queryParamMap.keys.length?(t.splice(t.indexOf("filters",1)),e.forEach(e=>{t.push("filters."+e)}),t.filter(t=>t in this._route.snapshot.queryParams).forEach(t=>{if(t.includes("filters.")){let e=t;e=e.replace("filters.",""),this.tableData.filters[e]=this._route.snapshot.queryParams[t]}else this.tableData[t]=this._route.snapshot.queryParams[t]})):this.tableData={searchString:"",entriesPerPage:"25",pageNum:1,sortColumn:"",sortOrder:"desc",filters:{status:"Opened",substatus:"All"}},this.queryData()})}ngOnDestroy(){this.subscription$.forEach(t=>{t.unsubscribe()}),this.route$.unsubscribe()}onQueryDataChanged(){let t={},e=Object.keys(this.tableData),n=Object.keys(this.tableData.filters);e.forEach(e=>{"filters"===e?n.forEach(e=>{t["filters."+e]=this.tableData.filters[e]}):t[e]=this.tableData[e]}),this._services._router.navigate(["/support-ticket/list"],{queryParams:t})}queryData(){let t={};this.columns.forEach(e=>{t[e.data]=1});const e={limit:parseInt(this.tableData.entriesPerPage),skip:(this.tableData.pageNum-1)*parseInt(this.tableData.entriesPerPage),sort:this.tableData.sortColumn?{[this.tableData.sortColumn]:"asc"===this.tableData.sortOrder?1:-1}:{name:1},fields:t};let n=[{prop:"client",data:this._services._app.client.getValue()}];"All"!==this.tableData.filters.status&&n.push({prop:"status",data:this.tableData.filters.status}),"All"!==this.tableData.filters.substatus&&n.push({prop:"substatus",data:this.tableData.filters.substatus}),this._services._socket.call("supportticketsWithOptions",e,this.tableData.searchString,n,(t,e)=>{this.support_tickets=e}),this._services._socket.call("supportticketCount",this.tableData.searchString,n,(t,e)=>{t?this._services._socket.call("insertErrorLog","countQuery - resolveioSupportList",[t]):this.totalItems=e})}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SupportTicketListComponent,deps:[{token:SupportTicketService},{token:i1$1.ActivatedRoute},{token:ProviderService}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"21.0.1",type:SupportTicketListComponent,isStandalone:!1,selector:"resolveio-support-ticket-list",providers:[ProviderService],usesInheritance:!0,ngImport:i0,template:'<div class="row">\n\t<div class="col-sm-6">\n\t\t<b>Filter Support Ticket By Status</b>\n\t\t<br />\n\t\t<select class="form-control" [(ngModel)]="tableData.filters[\'status\']" (change)="onQueryDataChanged()" tourAnchor="supportListFilter">\n\t\t\t<option value="All">All</option>\n\t\t\t<option value="Opened">Opened</option>\n\t\t\t<option value="Resolved">Resolved</option>\n\t\t</select>\n\t</div>\n\t<div class="col-sm-6">\n\t\t<b>Filter Support Ticket By Sub-Status</b>\n\t\t<br />\n\t\t<select class="form-control" [(ngModel)]="tableData.filters[\'substatus\']" (change)="onQueryDataChanged()">\n\t\t\t<option value="All">All</option>\n\t\t\t<option value="Investigating">Investigating</option>\n\t\t\t<option value="Awaiting Customer Interaction">Awaiting Customer Interaction</option>\n\t\t\t<option value="Resolved">Resolved</option>\n\t\t</select>\n\t</div>\n</div>\n<div class="row">\n\t<div class="col-md-12">\n\t\t<div style="padding-left: 15px; padding-right: 15px; padding-top: 15px">\n\t\t\t<data-table #dataTable [urlClick]="\'/support-ticket/detail/\'" [columns]="columns" [data]="support_tickets" [collapseSize]="990" [searchTitle]="\'Search For Support Ticket...\'" [totalItems]="totalItems" (onChangeTableData)="onQueryDataChanged()" [tableData]="tableData" tourAnchor="supportListDatatable"></data-table>\n\t\t</div>\n\t</div>\n</div>\n',dependencies:[{kind:"directive",type:i2.NgSelectOption,selector:"option",inputs:["ngValue","value"]},{kind:"directive",type:i2.ɵNgSelectMultipleOption,selector:"option",inputs:["ngValue","value"]},{kind:"directive",type:i2.SelectControlValueAccessor,selector:"select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]",inputs:["compareWith"]},{kind:"directive",type:i2.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:i2.NgModel,selector:"[ngModel]:not([formControlName]):not([formControl])",inputs:["name","disabled","ngModel","ngModelOptions"],outputs:["ngModelChange"],exportAs:["ngModel"]},{kind:"component",type:DatatableComponent,selector:"data-table",inputs:["urlClick","columns","data","collapseSize","searchTitle","totalItems","tableData"],outputs:["onChangeTableData"]}]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SupportTicketListComponent,decorators:[{type:Component,args:[{selector:"resolveio-support-ticket-list",providers:[ProviderService],standalone:!1,template:'<div class="row">\n\t<div class="col-sm-6">\n\t\t<b>Filter Support Ticket By Status</b>\n\t\t<br />\n\t\t<select class="form-control" [(ngModel)]="tableData.filters[\'status\']" (change)="onQueryDataChanged()" tourAnchor="supportListFilter">\n\t\t\t<option value="All">All</option>\n\t\t\t<option value="Opened">Opened</option>\n\t\t\t<option value="Resolved">Resolved</option>\n\t\t</select>\n\t</div>\n\t<div class="col-sm-6">\n\t\t<b>Filter Support Ticket By Sub-Status</b>\n\t\t<br />\n\t\t<select class="form-control" [(ngModel)]="tableData.filters[\'substatus\']" (change)="onQueryDataChanged()">\n\t\t\t<option value="All">All</option>\n\t\t\t<option value="Investigating">Investigating</option>\n\t\t\t<option value="Awaiting Customer Interaction">Awaiting Customer Interaction</option>\n\t\t\t<option value="Resolved">Resolved</option>\n\t\t</select>\n\t</div>\n</div>\n<div class="row">\n\t<div class="col-md-12">\n\t\t<div style="padding-left: 15px; padding-right: 15px; padding-top: 15px">\n\t\t\t<data-table #dataTable [urlClick]="\'/support-ticket/detail/\'" [columns]="columns" [data]="support_tickets" [collapseSize]="990" [searchTitle]="\'Search For Support Ticket...\'" [totalItems]="totalItems" (onChangeTableData)="onQueryDataChanged()" [tableData]="tableData" tourAnchor="supportListDatatable"></data-table>\n\t\t</div>\n\t</div>\n</div>\n'}]}],ctorParameters:()=>[{type:SupportTicketService},{type:i1$1.ActivatedRoute},{type:ProviderService}]});class SupportTicketNewComponent extends BaseComponent{_sts;_cd;_services;_ds;fileUpload;subscription$=[];form;disableFormButton=!1;submit=!1;constructor(t,e,n,o){super(n),this._sts=t,this._cd=e,this._services=n,this._ds=o}ngOnInit(){this._sts.setSelectedSupportTicket("0"),this.form=this._services._fb.group({__v:[0],type:["",[Validators.required]],priority:["",[Validators.required]],issue:["",[Validators.required]],support_ticket_number:[0],support_ticket_number_string:["0"],status:["Opened"],substatus:["New"],client:[this._services._app.client.getValue()],id_client:[this._services._app.client.getValue()],messages:[[]],date_created:[null],date_created_string:[""],id_user_created:[this._services._account.getUser()._id],user_created:[this._services._account.getUser().fullname],billable:[!1,[Validators.required]],date_investigation:[null],date_closed:[null],files:[[]],current_watchers:[[]],client_user:[{id_user:this._services._account.getUser()._id,user:this._services._account.getUser().fullname,email:this._services._account.getUser().email?this._services._account.getUser().email:""}],tasks:[[]],notes:[[]],users_assigned:[[]],bill_description:[""],difficulty:[1]})}ngOnDestroy(){this.subscription$.forEach(t=>{t.unsubscribe()})}canDeactivate(){return!0}onTypeChange(){"System Impairment"===this.form.controls.type.value?(this.form.controls.priority.setValue("High"),this.form.controls.billable.setValue(!1)):"Request New Feature"===this.form.controls.type.value||"General Inquery"===this.form.controls.type.value?(this.form.controls.priority.setValue("Low"),this.form.controls.billable.setValue(!0)):(this.form.controls.priority.setValue(""),this.form.controls.billable.setValue(!1))}submitForm(t){this.submit=!0,this.disableFormButton=!0;let e=new Date;this.form.controls.date_created.setValue(e),this.form.controls.date_created_string.setValue(e.getFullYear()+"/"+(e.getMonth()+1)+"/"+e.getDate()),this._services._socket.call("supportInsertSupportTicket",this.form.value,(t,e)=>{e?(this._services._alert.setAlert("success","Support ticket has been created"),this._services._router.navigateByUrl("/support-ticket/detail/"+e)):(this._ds.error("Could not create new support ticket."),this._services._socket.call("insertErrorLog","Support Ticket New - insert support ticket",[this.form.value,t]))})}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SupportTicketNewComponent,deps:[{token:SupportTicketService},{token:i0.ChangeDetectorRef},{token:ProviderService},{token:DialogService}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"21.0.1",type:SupportTicketNewComponent,isStandalone:!1,selector:"resolveio-support-ticket-new",providers:[ProviderService],viewQueries:[{propertyName:"fileUpload",first:!0,predicate:["fileUpload"],descendants:!0,static:!0}],usesInheritance:!0,ngImport:i0,template:'<style>\n\t.label-accordion {\n\t\tfont-weight: bold;\n\t\tcolor: black;\n\t\tmargin-bottom: 0px;\n\t}\n</style>\n\n<div class="col-lg-12">\n\t<form [formGroup]="form" novalidate (ngSubmit)="submitForm(form)">\n\t\t<div class="row">\n\t\t\t<div ngbAccordion #acc="ngbAccordion" activeIds="supportTicketInfo">\n\t\t\t\t<div ngbAccordionItem id="supportTicketInfo">\n\t\t\t\t\t<div ngbAccordionHeader>\n\t\t\t\t\t\t<button ngbAccordionButton type="button">\n\t\t\t\t\t\t\t<label class="label-accordion">Support Ticket Info</label>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div ngbAccordionCollapse>\n\t\t\t\t\t\t<div ngbAccordionBody>\n\t\t\t\t\t\t\t<ng-template>\n\t\t\t\t\t\t\t\t<div class="row">\n\t\t\t\t\t\t\t\t\t<div class="col-12">\n\t\t\t\t\t\t\t\t\t\t<div class="form-group">\n\t\t\t\t\t\t\t\t\t\t\t<label class="form-control-label">Support Ticket Type</label>\n\t\t\t\t\t\t\t\t\t\t\t@if (!form.controls.type.valid) {\n\t\t\t\t\t\t\t\t\t\t\t\t<em>- Required</em>\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t<select [ngClass]="[\'form-control\', form.controls.type.valid ? \'is-valid\' : \'is-invalid\']" formControlName="type" (change)="onTypeChange()" tourAnchor="supportNewSelect">\n\t\t\t\t\t\t\t\t\t\t\t\t<option value="">Select Type</option>\n\t\t\t\t\t\t\t\t\t\t\t\t<option value="General Inquery">General Inquery</option>\n\t\t\t\t\t\t\t\t\t\t\t\t<option value="System Impairment">System Impairment</option>\n\t\t\t\t\t\t\t\t\t\t\t\t<option value="Request New Feature">Request New Feature</option>\n\t\t\t\t\t\t\t\t\t\t\t</select>\n\t\t\t\t\t\t\t\t\t\t\t@if (!form.controls.type.valid) {\n\t\t\t\t\t\t\t\t\t\t\t\t<div class="invalid-feedback">Type is required</div>\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class="row">\n\t\t\t\t\t\t\t<div class="col-lg-12">\n\t\t\t\t\t\t\t\t<div class="form-group">\n\t\t\t\t\t\t\t\t\t<label class="form-control-label">Problem/Feature Description</label>\n\t\t\t\t\t\t\t\t\t@if (!form.controls.issue.valid) {\n\t\t\t\t\t\t\t\t\t\t<em>- Required</em>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t<textarea formControlName="issue" [ngClass]="[\'form-control\', form.controls.issue.valid ? \'is-valid\' : \'is-invalid\']" [rows]="5" style="overflow-x: hidden" tourAnchor="supportNewInput"></textarea>\n\t\t\t\t\t\t\t\t\t@if (!form.controls.issue.valid) {\n\t\t\t\t\t\t\t\t\t\t<div class="invalid-feedback">Description is required</div>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class="row" style="padding-top: 15px">\n\t\t\t<form-button [form]="form" [disabled]="disableFormButton" tourAnchor="supportNewSubmit"></form-button>\n\t\t</div>\n\t</form>\n</div>\n',styles:[".label-accordion{font-weight:700;color:#000;margin-bottom:0}\n"],dependencies:[{kind:"directive",type:i2.ɵNgNoValidate,selector:"form:not([ngNoForm]):not([ngNativeValidate])"},{kind:"directive",type:i2.NgSelectOption,selector:"option",inputs:["ngValue","value"]},{kind:"directive",type:i2.ɵNgSelectMultipleOption,selector:"option",inputs:["ngValue","value"]},{kind:"directive",type:i2.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:i2.SelectControlValueAccessor,selector:"select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]",inputs:["compareWith"]},{kind:"directive",type:i2.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:i2.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:i2.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:i2.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:i1$2.NgbAccordionButton,selector:"button[ngbAccordionButton]"},{kind:"directive",type:i1$2.NgbAccordionDirective,selector:"[ngbAccordion]",inputs:["animation","closeOthers","destroyOnHide"],outputs:["show","shown","hide","hidden"],exportAs:["ngbAccordion"]},{kind:"directive",type:i1$2.NgbAccordionItem,selector:"[ngbAccordionItem]",inputs:["ngbAccordionItem","destroyOnHide","disabled","collapsed"],outputs:["show","shown","hide","hidden"],exportAs:["ngbAccordionItem"]},{kind:"directive",type:i1$2.NgbAccordionHeader,selector:"[ngbAccordionHeader]"},{kind:"component",type:i1$2.NgbAccordionBody,selector:"[ngbAccordionBody]"},{kind:"directive",type:i1$2.NgbAccordionCollapse,selector:"[ngbAccordionCollapse]",exportAs:["ngbAccordionCollapse"]},{kind:"component",type:FormButtonComponent,selector:"form-button",inputs:["form","disabled","type"]},{kind:"directive",type:i7.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]}]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SupportTicketNewComponent,decorators:[{type:Component,args:[{selector:"resolveio-support-ticket-new",providers:[ProviderService],standalone:!1,template:'<style>\n\t.label-accordion {\n\t\tfont-weight: bold;\n\t\tcolor: black;\n\t\tmargin-bottom: 0px;\n\t}\n</style>\n\n<div class="col-lg-12">\n\t<form [formGroup]="form" novalidate (ngSubmit)="submitForm(form)">\n\t\t<div class="row">\n\t\t\t<div ngbAccordion #acc="ngbAccordion" activeIds="supportTicketInfo">\n\t\t\t\t<div ngbAccordionItem id="supportTicketInfo">\n\t\t\t\t\t<div ngbAccordionHeader>\n\t\t\t\t\t\t<button ngbAccordionButton type="button">\n\t\t\t\t\t\t\t<label class="label-accordion">Support Ticket Info</label>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div ngbAccordionCollapse>\n\t\t\t\t\t\t<div ngbAccordionBody>\n\t\t\t\t\t\t\t<ng-template>\n\t\t\t\t\t\t\t\t<div class="row">\n\t\t\t\t\t\t\t\t\t<div class="col-12">\n\t\t\t\t\t\t\t\t\t\t<div class="form-group">\n\t\t\t\t\t\t\t\t\t\t\t<label class="form-control-label">Support Ticket Type</label>\n\t\t\t\t\t\t\t\t\t\t\t@if (!form.controls.type.valid) {\n\t\t\t\t\t\t\t\t\t\t\t\t<em>- Required</em>\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t<select [ngClass]="[\'form-control\', form.controls.type.valid ? \'is-valid\' : \'is-invalid\']" formControlName="type" (change)="onTypeChange()" tourAnchor="supportNewSelect">\n\t\t\t\t\t\t\t\t\t\t\t\t<option value="">Select Type</option>\n\t\t\t\t\t\t\t\t\t\t\t\t<option value="General Inquery">General Inquery</option>\n\t\t\t\t\t\t\t\t\t\t\t\t<option value="System Impairment">System Impairment</option>\n\t\t\t\t\t\t\t\t\t\t\t\t<option value="Request New Feature">Request New Feature</option>\n\t\t\t\t\t\t\t\t\t\t\t</select>\n\t\t\t\t\t\t\t\t\t\t\t@if (!form.controls.type.valid) {\n\t\t\t\t\t\t\t\t\t\t\t\t<div class="invalid-feedback">Type is required</div>\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class="row">\n\t\t\t\t\t\t\t<div class="col-lg-12">\n\t\t\t\t\t\t\t\t<div class="form-group">\n\t\t\t\t\t\t\t\t\t<label class="form-control-label">Problem/Feature Description</label>\n\t\t\t\t\t\t\t\t\t@if (!form.controls.issue.valid) {\n\t\t\t\t\t\t\t\t\t\t<em>- Required</em>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t<textarea formControlName="issue" [ngClass]="[\'form-control\', form.controls.issue.valid ? \'is-valid\' : \'is-invalid\']" [rows]="5" style="overflow-x: hidden" tourAnchor="supportNewInput"></textarea>\n\t\t\t\t\t\t\t\t\t@if (!form.controls.issue.valid) {\n\t\t\t\t\t\t\t\t\t\t<div class="invalid-feedback">Description is required</div>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class="row" style="padding-top: 15px">\n\t\t\t<form-button [form]="form" [disabled]="disableFormButton" tourAnchor="supportNewSubmit"></form-button>\n\t\t</div>\n\t</form>\n</div>\n'}]}],ctorParameters:()=>[{type:SupportTicketService},{type:i0.ChangeDetectorRef},{type:ProviderService},{type:DialogService}],propDecorators:{fileUpload:[{type:ViewChild,args:["fileUpload",{static:!0}]}]}});class SupportTicketDetailComponent extends BaseComponent{_route;_sts;_services;_ds;fileUpload;subscription$=[];id;data;files=[];constructor(t,e,n,o){super(n),this._route=t,this._sts=e,this._services=n,this._ds=o}ngOnInit(){this.id=this._route.snapshot.params.id,this._sts.setSelectedSupportTicket(this.id),this._services._socket.call("supportGetSupportTicketWithId",this.id,(t,e)=>{if(!e)return this._services._router.navigateByUrl("/support-ticket/list"),void this._ds.error("Could not find support ticket");this.data=e})}ngOnDestroy(){this.subscription$.forEach(t=>{t.unsubscribe()})}onFileAdded(t){this.data.files.push(t._id),this._services._socket.call("supportUpdateSupportTicket",this.data,(t,e)=>{!t&&e||(this._ds.error("Could not update support ticket files"),this._services._socket.call("insertErrorLog","support-ticket-detail - update support-ticket files add",[this.data.files,t]))})}onFilesRemoved(t){this._ds.confirm("Are you sure you want to remove a file? This will email all current watchers?").then(e=>{-1!==this.data.files.indexOf(t._id)&&(this.data.files.splice(this.data.files.indexOf(t._id),1),this._services._socket.call("supportUpdateSupportTicket",this.data,(t,e)=>{!t&&e||(this._ds.error("Could not update support-ticket files"),this._services._socket.call("insertErrorLog","support-ticket-detail - update files remove",[{prop:"files",data:this.data.files},t]))}))},()=>{})}edit(){this._services._router.navigateByUrl("/support-ticket/edit/"+this.id)}newMessage(){this._ds.input("Input Message",[{label:"Message",form:"message",data:"",validators:[Validators.required],validatorErrors:["required"],validatorMsg:["Message is required"],required:!0,type:"textarea"}]).then(t=>{this.data.messages.push({message:t.message.value,id_user:this._services._account.getUser()._id,user:this._services._account.getUser().fullname,date:new Date,type:"Client"}),this._services._socket.call("supportUpdateSupportTicket",this.data,(t,e)=>{e||(this._services._socket.call("insertErrorLog","Support Ticket Detail - Add Message"),this._ds.error("Support ticket could not update"))})},()=>{})}editMessage(t){let e=this.data.messages[t];this._ds.input("Input Message",[{label:"Message",form:"message",data:e.message,validators:[Validators.required],validatorErrors:["required"],validatorMsg:["Message is required"],required:!0,type:"textarea"}]).then(t=>{e.message=t.message.value,this._services._socket.call("supportUpdateSupportTicket",this.data,(t,e)=>{e||(this._services._socket.call("insertErrorLog","Support Ticket Detail - Add Message"),this._ds.error("Support ticket could not update"))})},()=>{})}deleteMessage(t){this._ds.confirm("Are you sure you want to remove this message?").then(()=>{this.data.messages.splice(t,1),this._services._socket.call("supportUpdateSupportTicket",this.data,(t,e)=>{e||(this._services._socket.call("insertErrorLog","Support Ticket Detail - Add Message"),this._ds.error("Support ticket could not update"))})},()=>{})}isMyMessage(t){return this._services._account.getUser()._id===t.id_user}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SupportTicketDetailComponent,deps:[{token:i1$1.ActivatedRoute},{token:SupportTicketService},{token:ProviderService},{token:DialogService}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"21.0.1",type:SupportTicketDetailComponent,isStandalone:!1,selector:"resolveio-support-ticket-detail",providers:[ProviderService],viewQueries:[{propertyName:"fileUpload",first:!0,predicate:["fileUpload"],descendants:!0,static:!0}],usesInheritance:!0,ngImport:i0,template:'<style>\n\t.label-accordion {\n\t\tfont-weight: bold;\n\t\tcolor: black;\n\t\tmargin-bottom: 0px;\n\t}\n\n\t.accordion {\n\t\twidth: 100%;\n\t}\n\n\tdl {\n\t\tmargin-bottom: 0px;\n\t}\n\n\t.selected {\n\t\tbackground-color: lightblue;\n\t}\n</style>\n\n@if (data) {\n\t<div class="col-lg-12">\n\t\t<div class="row">\n\t\t\t<div ngbAccordion #acc="ngbAccordion" activeIds="supportTicketInfo, supportTicketMessages, files">\n\t\t\t\t<div ngbAccordionItem id="supportTicketInfo">\n\t\t\t\t\t<div ngbAccordionHeader>\n\t\t\t\t\t\t<button ngbAccordionButton type="button"><span class="label-accordion">Support Ticket Info</span></button>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div ngbAccordionCollapse>\n\t\t\t\t\t\t<div ngbAccordionBody>\n\t\t\t\t\t\t\t<ng-template>\n\t\t\t\t\t\t\t\t<div class="card">\n\t\t\t\t\t\t\t\t\t<div class="card-header"><b>General Info</b></div>\n\t\t\t\t\t\t\t\t\t<div class="card-body">\n\t\t\t\t\t\t\t\t\t\t<div class="row">\n\t\t\t\t\t\t\t\t\t\t\t<div class="col-lg-4">\n\t\t\t\t\t\t\t\t\t\t\t\t<dl>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<dt>Support Ticket #</dt>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<dd>{{ data.support_ticket_number | number }}</dd>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<dt>Date Created</dt>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<dd>{{ data.date_created | date: \'short\' }}</dd>\n\t\t\t\t\t\t\t\t\t\t\t\t</dl>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t<div class="col-lg-4">\n\t\t\t\t\t\t\t\t\t\t\t\t<dl>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<dt>Type</dt>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<dd>{{ data.type }}</dd>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<dt>User</dt>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<dd>{{ data.user_created }}</dd>\n\t\t\t\t\t\t\t\t\t\t\t\t</dl>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t<div class="col-lg-4">\n\t\t\t\t\t\t\t\t\t\t\t\t<dl>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<dt>Status</dt>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<dd>{{ data.status }}</dd>\n\t\t\t\t\t\t\t\t\t\t\t\t</dl>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class="card">\n\t\t\t\t\t\t\t\t\t<div class="card-header"><b>Problem Description</b></div>\n\t\t\t\t\t\t\t\t\t<div class="card-body">\n\t\t\t\t\t\t\t\t\t\t<pre>{{ data.issue }}</pre>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t@if (data) {\n\t\t\t\t\t<div ngbAccordionItem id="supportTicketMessages">\n\t\t\t\t\t\t<div ngbAccordionHeader>\n\t\t\t\t\t\t\t<button ngbAccordionButton type="button"><span class="label-accordion">Messages</span></button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div ngbAccordionCollapse>\n\t\t\t\t\t\t\t<div ngbAccordionBody>\n\t\t\t\t\t\t\t\t<ng-template>\n\t\t\t\t\t\t\t\t\t<div class="row">\n\t\t\t\t\t\t\t\t\t\t<div class="col-lg-12">\n\t\t\t\t\t\t\t\t\t\t\t@for (message of data.messages; track message.message; let i = $index) {\n\t\t\t\t\t\t\t\t\t\t\t\t<div class="card">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div class="card-header">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<b>User: {{ message.user }} - Date: {{ message.date | date: \'short\' }}</b>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div class="card-body" [ngClass]="[message.type === \'ResolveIO\' ? \'selected\' : \'\']">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class="row" style="width: 100%">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class="col-lg-10">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<pre>{{ message.message }}</pre>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class="col-lg-2">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<responsive-button-group collapseSize="900">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t@if (isMyMessage(message)) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<button type="button" class="btn btn-warning" (click)="editMessage(i)">Edit</button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t@if (isMyMessage(message)) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<button type="button" class="btn btn-danger" (click)="deleteMessage(i)">Delete</button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</responsive-button-group>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<div class="row" style="margin-top: 10px">\n\t\t\t\t\t\t\t\t\t\t<div class="col-lg-12">\n\t\t\t\t\t\t\t\t\t\t\t<button type="button" class="btn btn-success" (click)="newMessage()">New Message</button>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t\t<div ngbAccordionItem id="files">\n\t\t\t\t\t<div ngbAccordionHeader>\n\t\t\t\t\t\t<button ngbAccordionButton type="button"><span class="label-accordion">Support Ticket Files</span></button>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div ngbAccordionCollapse>\n\t\t\t\t\t\t<div ngbAccordionBody>\n\t\t\t\t\t\t\t<ng-template>\n\t\t\t\t\t\t\t\t<file-upload #fileUpload (fileAdded)="onFileAdded($event)" (fileRemoved)="onFilesRemoved($event)" [files]="files" [allowDelete]="true" [allowReplace]="true"></file-upload>\n\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class="row" style="padding-top: 15px">\n\t\t\t<responsive-button-group collapseSize="900">\n\t\t\t\t<button class="btn btn-warning" type="button" (click)="edit()">Edit Support Ticket</button>\n\t\t\t</responsive-button-group>\n\t\t</div>\n\t</div>\n}\n',styles:[".label-accordion{font-weight:700;color:#000;margin-bottom:0}.accordion{width:100%}dl{margin-bottom:0}.selected{background-color:#add8e6}\n"],dependencies:[{kind:"directive",type:i1$2.NgbAccordionButton,selector:"button[ngbAccordionButton]"},{kind:"directive",type:i1$2.NgbAccordionDirective,selector:"[ngbAccordion]",inputs:["animation","closeOthers","destroyOnHide"],outputs:["show","shown","hide","hidden"],exportAs:["ngbAccordion"]},{kind:"directive",type:i1$2.NgbAccordionItem,selector:"[ngbAccordionItem]",inputs:["ngbAccordionItem","destroyOnHide","disabled","collapsed"],outputs:["show","shown","hide","hidden"],exportAs:["ngbAccordionItem"]},{kind:"directive",type:i1$2.NgbAccordionHeader,selector:"[ngbAccordionHeader]"},{kind:"component",type:i1$2.NgbAccordionBody,selector:"[ngbAccordionBody]"},{kind:"directive",type:i1$2.NgbAccordionCollapse,selector:"[ngbAccordionCollapse]",exportAs:["ngbAccordionCollapse"]},{kind:"component",type:ResponsiveButtonGroupComponent,selector:"responsive-button-group",inputs:["collapseSize"]},{kind:"directive",type:i7.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]},{kind:"component",type:FileUploadComponent,selector:"file-upload",inputs:["files","allowDelete","allowReplace","showFileUpload","fileType"],outputs:["filesChanged","fileAdded","fileRemoved"]},{kind:"pipe",type:i7.DecimalPipe,name:"number"},{kind:"pipe",type:i7.DatePipe,name:"date"}]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SupportTicketDetailComponent,decorators:[{type:Component,args:[{selector:"resolveio-support-ticket-detail",providers:[ProviderService],standalone:!1,template:'<style>\n\t.label-accordion {\n\t\tfont-weight: bold;\n\t\tcolor: black;\n\t\tmargin-bottom: 0px;\n\t}\n\n\t.accordion {\n\t\twidth: 100%;\n\t}\n\n\tdl {\n\t\tmargin-bottom: 0px;\n\t}\n\n\t.selected {\n\t\tbackground-color: lightblue;\n\t}\n</style>\n\n@if (data) {\n\t<div class="col-lg-12">\n\t\t<div class="row">\n\t\t\t<div ngbAccordion #acc="ngbAccordion" activeIds="supportTicketInfo, supportTicketMessages, files">\n\t\t\t\t<div ngbAccordionItem id="supportTicketInfo">\n\t\t\t\t\t<div ngbAccordionHeader>\n\t\t\t\t\t\t<button ngbAccordionButton type="button"><span class="label-accordion">Support Ticket Info</span></button>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div ngbAccordionCollapse>\n\t\t\t\t\t\t<div ngbAccordionBody>\n\t\t\t\t\t\t\t<ng-template>\n\t\t\t\t\t\t\t\t<div class="card">\n\t\t\t\t\t\t\t\t\t<div class="card-header"><b>General Info</b></div>\n\t\t\t\t\t\t\t\t\t<div class="card-body">\n\t\t\t\t\t\t\t\t\t\t<div class="row">\n\t\t\t\t\t\t\t\t\t\t\t<div class="col-lg-4">\n\t\t\t\t\t\t\t\t\t\t\t\t<dl>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<dt>Support Ticket #</dt>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<dd>{{ data.support_ticket_number | number }}</dd>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<dt>Date Created</dt>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<dd>{{ data.date_created | date: \'short\' }}</dd>\n\t\t\t\t\t\t\t\t\t\t\t\t</dl>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t<div class="col-lg-4">\n\t\t\t\t\t\t\t\t\t\t\t\t<dl>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<dt>Type</dt>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<dd>{{ data.type }}</dd>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<dt>User</dt>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<dd>{{ data.user_created }}</dd>\n\t\t\t\t\t\t\t\t\t\t\t\t</dl>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t<div class="col-lg-4">\n\t\t\t\t\t\t\t\t\t\t\t\t<dl>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<dt>Status</dt>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<dd>{{ data.status }}</dd>\n\t\t\t\t\t\t\t\t\t\t\t\t</dl>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class="card">\n\t\t\t\t\t\t\t\t\t<div class="card-header"><b>Problem Description</b></div>\n\t\t\t\t\t\t\t\t\t<div class="card-body">\n\t\t\t\t\t\t\t\t\t\t<pre>{{ data.issue }}</pre>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t@if (data) {\n\t\t\t\t\t<div ngbAccordionItem id="supportTicketMessages">\n\t\t\t\t\t\t<div ngbAccordionHeader>\n\t\t\t\t\t\t\t<button ngbAccordionButton type="button"><span class="label-accordion">Messages</span></button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div ngbAccordionCollapse>\n\t\t\t\t\t\t\t<div ngbAccordionBody>\n\t\t\t\t\t\t\t\t<ng-template>\n\t\t\t\t\t\t\t\t\t<div class="row">\n\t\t\t\t\t\t\t\t\t\t<div class="col-lg-12">\n\t\t\t\t\t\t\t\t\t\t\t@for (message of data.messages; track message.message; let i = $index) {\n\t\t\t\t\t\t\t\t\t\t\t\t<div class="card">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div class="card-header">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<b>User: {{ message.user }} - Date: {{ message.date | date: \'short\' }}</b>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div class="card-body" [ngClass]="[message.type === \'ResolveIO\' ? \'selected\' : \'\']">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class="row" style="width: 100%">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class="col-lg-10">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<pre>{{ message.message }}</pre>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class="col-lg-2">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<responsive-button-group collapseSize="900">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t@if (isMyMessage(message)) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<button type="button" class="btn btn-warning" (click)="editMessage(i)">Edit</button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t@if (isMyMessage(message)) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<button type="button" class="btn btn-danger" (click)="deleteMessage(i)">Delete</button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</responsive-button-group>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<div class="row" style="margin-top: 10px">\n\t\t\t\t\t\t\t\t\t\t<div class="col-lg-12">\n\t\t\t\t\t\t\t\t\t\t\t<button type="button" class="btn btn-success" (click)="newMessage()">New Message</button>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t\t<div ngbAccordionItem id="files">\n\t\t\t\t\t<div ngbAccordionHeader>\n\t\t\t\t\t\t<button ngbAccordionButton type="button"><span class="label-accordion">Support Ticket Files</span></button>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div ngbAccordionCollapse>\n\t\t\t\t\t\t<div ngbAccordionBody>\n\t\t\t\t\t\t\t<ng-template>\n\t\t\t\t\t\t\t\t<file-upload #fileUpload (fileAdded)="onFileAdded($event)" (fileRemoved)="onFilesRemoved($event)" [files]="files" [allowDelete]="true" [allowReplace]="true"></file-upload>\n\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class="row" style="padding-top: 15px">\n\t\t\t<responsive-button-group collapseSize="900">\n\t\t\t\t<button class="btn btn-warning" type="button" (click)="edit()">Edit Support Ticket</button>\n\t\t\t</responsive-button-group>\n\t\t</div>\n\t</div>\n}\n'}]}],ctorParameters:()=>[{type:i1$1.ActivatedRoute},{type:SupportTicketService},{type:ProviderService},{type:DialogService}],propDecorators:{fileUpload:[{type:ViewChild,args:["fileUpload",{static:!0}]}]}});class SupportTicketEditComponent extends BaseComponent{_route;_sts;_services;_ds;fileUpload;selectType;id;data;subscription$=[];form;disableFormButton=!1;constructor(t,e,n,o){super(n),this._route=t,this._sts=e,this._services=n,this._ds=o}ngOnInit(){this.id=this._route.snapshot.params.id,this._sts.setSelectedSupportTicket(this.id.toString()),this.form=this._services._fb.group({_id:[""],__v:[0],type:["",[Validators.required]],priority:["",[Validators.required]],issue:["",[Validators.required]],support_ticket_number:[null],support_ticket_number_string:[null],status:["Opened"],substatus:["New"],client:[""],id_client:["",[Validators.required]],messages:[[]],date_created:[null],date_created_string:[""],id_user_created:[this._services._account.getUser()._id],user_created:[this._services._account.getUser().fullname],billable:[!1,[Validators.required]],date_investigation:[null],date_closed:[null],files:[[]],current_watchers:[[]],client_user:[null],users_assigned:[[]],bill_description:[""],tasks:[[]],notes:[[]],difficulty:[1]}),this._services._socket.call("supportGetSupportTicketWithId",this.id,(t,e)=>{if(!e)return this._services._router.navigateByUrl("/support-ticket/list"),void this._ds.error("Could not find support ticket");this.data=e,this.loadForm()})}ngOnDestroy(){this.subscription$.forEach(t=>{t.unsubscribe()})}loadForm(){this.form.patchValue(this.data)}onTypeChange(){"System Impairment"===this.form.controls.type.value?(this.form.controls.priority.setValue("High"),this.form.controls.billable.setValue(!1)):"Request New Feature"===this.form.controls.type.value||"General Inquery"===this.form.controls.type.value?(this.form.controls.priority.setValue("Low"),this.form.controls.billable.setValue(!0)):(this.form.controls.priority.setValue(""),this.form.controls.billable.setValue(!1))}submitForm(t){this.disableFormButton=!0,this._services._socket.call("supportUpdateSupportTicket",this.form.value,(t,e)=>{e?(this._services._alert.setAlert("info","Editing support ticket, please wait"),this._services._router.navigateByUrl("/support-ticket/detail/"+this.id)):(this._ds.error("Could not edit support ticket"),this._services._socket.call("insertErrorLog","Support-ticket-edit - update support ticket",[this.form.value,t]))})}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SupportTicketEditComponent,deps:[{token:i1$1.ActivatedRoute},{token:SupportTicketService},{token:ProviderService},{token:DialogService}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"21.0.1",type:SupportTicketEditComponent,isStandalone:!1,selector:"resolveio-support-ticket-edit",providers:[ProviderService],viewQueries:[{propertyName:"fileUpload",first:!0,predicate:["fileUpload"],descendants:!0,static:!0},{propertyName:"selectType",first:!0,predicate:["selectType"],descendants:!0,static:!0}],usesInheritance:!0,ngImport:i0,template:'<style>\n\t.label-accordion {\n\t\tfont-weight: bold;\n\t\tcolor: black;\n\t\tmargin-bottom: 0px;\n\t}\n</style>\n\n<div class="col-lg-12">\n\t<form [formGroup]="form" novalidate (ngSubmit)="submitForm(form)">\n\t\t<div class="row">\n\t\t\t<div ngbAccordion #acc="ngbAccordion" activeIds="supportTicketInfo">\n\t\t\t\t<div ngbAccordionItem id="supportTicketInfo">\n\t\t\t\t\t<div ngbAccordionHeader>\n\t\t\t\t\t\t<button ngbAccordionButton type="button"><span class="label-accordion">Support Ticket Info</span></button>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div ngbAccordionCollapse>\n\t\t\t\t\t\t<div ngbAccordionBody>\n\t\t\t\t\t\t\t<ng-template>\n\t\t\t\t\t\t\t\t<div class="row">\n\t\t\t\t\t\t\t\t\t<div class="col-12">\n\t\t\t\t\t\t\t\t\t\t<div class="form-group">\n\t\t\t\t\t\t\t\t\t\t\t<label class="form-control-label">Support Ticket Type</label>\n\t\t\t\t\t\t\t\t\t\t\t@if (!form.controls.type.valid) {\n\t\t\t\t\t\t\t\t\t\t\t\t<em>- Required</em>\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t<select [ngClass]="[\'form-control\', form.controls.type.valid ? \'is-valid\' : \'is-invalid\']" formControlName="type" (change)="onTypeChange()">\n\t\t\t\t\t\t\t\t\t\t\t\t<option value="">Select Type</option>\n\t\t\t\t\t\t\t\t\t\t\t\t<option value="General Inquery">General Inquery</option>\n\t\t\t\t\t\t\t\t\t\t\t\t<option value="System Impairment">System Impairment</option>\n\t\t\t\t\t\t\t\t\t\t\t\t<option value="Request New Feature">Request New Feature</option>\n\t\t\t\t\t\t\t\t\t\t\t</select>\n\t\t\t\t\t\t\t\t\t\t\t@if (!form.controls.type.valid) {\n\t\t\t\t\t\t\t\t\t\t\t\t<div class="invalid-feedback">Type is required</div>\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class="row">\n\t\t\t\t\t\t\t\t\t<div class="col-lg-12">\n\t\t\t\t\t\t\t\t\t\t<div class="form-group">\n\t\t\t\t\t\t\t\t\t\t\t<label class="form-control-label">Problem Description</label>\n\t\t\t\t\t\t\t\t\t\t\t@if (!form.controls.issue.valid) {\n\t\t\t\t\t\t\t\t\t\t\t\t<em>- Required</em>\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t<textarea formControlName="issue" [ngClass]="[\'form-control\', form.controls.issue.valid ? \'is-valid\' : \'is-invalid\']" [rows]="5" style="overflow-x: hidden"></textarea>\n\t\t\t\t\t\t\t\t\t\t\t@if (!form.controls.issue.valid) {\n\t\t\t\t\t\t\t\t\t\t\t\t<div class="invalid-feedback">Problem Description is required</div>\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class="row" style="padding-top: 15px">\n\t\t\t<form-button [form]="form" [disabled]="disableFormButton"></form-button>\n\t\t</div>\n\t</form>\n</div>\n',styles:[".label-accordion{font-weight:700;color:#000;margin-bottom:0}\n"],dependencies:[{kind:"directive",type:i2.ɵNgNoValidate,selector:"form:not([ngNoForm]):not([ngNativeValidate])"},{kind:"directive",type:i2.NgSelectOption,selector:"option",inputs:["ngValue","value"]},{kind:"directive",type:i2.ɵNgSelectMultipleOption,selector:"option",inputs:["ngValue","value"]},{kind:"directive",type:i2.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:i2.SelectControlValueAccessor,selector:"select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]",inputs:["compareWith"]},{kind:"directive",type:i2.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:i2.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:i2.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:i2.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:i1$2.NgbAccordionButton,selector:"button[ngbAccordionButton]"},{kind:"directive",type:i1$2.NgbAccordionDirective,selector:"[ngbAccordion]",inputs:["animation","closeOthers","destroyOnHide"],outputs:["show","shown","hide","hidden"],exportAs:["ngbAccordion"]},{kind:"directive",type:i1$2.NgbAccordionItem,selector:"[ngbAccordionItem]",inputs:["ngbAccordionItem","destroyOnHide","disabled","collapsed"],outputs:["show","shown","hide","hidden"],exportAs:["ngbAccordionItem"]},{kind:"directive",type:i1$2.NgbAccordionHeader,selector:"[ngbAccordionHeader]"},{kind:"component",type:i1$2.NgbAccordionBody,selector:"[ngbAccordionBody]"},{kind:"directive",type:i1$2.NgbAccordionCollapse,selector:"[ngbAccordionCollapse]",exportAs:["ngbAccordionCollapse"]},{kind:"component",type:FormButtonComponent,selector:"form-button",inputs:["form","disabled","type"]},{kind:"directive",type:i7.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]}]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SupportTicketEditComponent,decorators:[{type:Component,args:[{selector:"resolveio-support-ticket-edit",providers:[ProviderService],standalone:!1,template:'<style>\n\t.label-accordion {\n\t\tfont-weight: bold;\n\t\tcolor: black;\n\t\tmargin-bottom: 0px;\n\t}\n</style>\n\n<div class="col-lg-12">\n\t<form [formGroup]="form" novalidate (ngSubmit)="submitForm(form)">\n\t\t<div class="row">\n\t\t\t<div ngbAccordion #acc="ngbAccordion" activeIds="supportTicketInfo">\n\t\t\t\t<div ngbAccordionItem id="supportTicketInfo">\n\t\t\t\t\t<div ngbAccordionHeader>\n\t\t\t\t\t\t<button ngbAccordionButton type="button"><span class="label-accordion">Support Ticket Info</span></button>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div ngbAccordionCollapse>\n\t\t\t\t\t\t<div ngbAccordionBody>\n\t\t\t\t\t\t\t<ng-template>\n\t\t\t\t\t\t\t\t<div class="row">\n\t\t\t\t\t\t\t\t\t<div class="col-12">\n\t\t\t\t\t\t\t\t\t\t<div class="form-group">\n\t\t\t\t\t\t\t\t\t\t\t<label class="form-control-label">Support Ticket Type</label>\n\t\t\t\t\t\t\t\t\t\t\t@if (!form.controls.type.valid) {\n\t\t\t\t\t\t\t\t\t\t\t\t<em>- Required</em>\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t<select [ngClass]="[\'form-control\', form.controls.type.valid ? \'is-valid\' : \'is-invalid\']" formControlName="type" (change)="onTypeChange()">\n\t\t\t\t\t\t\t\t\t\t\t\t<option value="">Select Type</option>\n\t\t\t\t\t\t\t\t\t\t\t\t<option value="General Inquery">General Inquery</option>\n\t\t\t\t\t\t\t\t\t\t\t\t<option value="System Impairment">System Impairment</option>\n\t\t\t\t\t\t\t\t\t\t\t\t<option value="Request New Feature">Request New Feature</option>\n\t\t\t\t\t\t\t\t\t\t\t</select>\n\t\t\t\t\t\t\t\t\t\t\t@if (!form.controls.type.valid) {\n\t\t\t\t\t\t\t\t\t\t\t\t<div class="invalid-feedback">Type is required</div>\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class="row">\n\t\t\t\t\t\t\t\t\t<div class="col-lg-12">\n\t\t\t\t\t\t\t\t\t\t<div class="form-group">\n\t\t\t\t\t\t\t\t\t\t\t<label class="form-control-label">Problem Description</label>\n\t\t\t\t\t\t\t\t\t\t\t@if (!form.controls.issue.valid) {\n\t\t\t\t\t\t\t\t\t\t\t\t<em>- Required</em>\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t<textarea formControlName="issue" [ngClass]="[\'form-control\', form.controls.issue.valid ? \'is-valid\' : \'is-invalid\']" [rows]="5" style="overflow-x: hidden"></textarea>\n\t\t\t\t\t\t\t\t\t\t\t@if (!form.controls.issue.valid) {\n\t\t\t\t\t\t\t\t\t\t\t\t<div class="invalid-feedback">Problem Description is required</div>\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class="row" style="padding-top: 15px">\n\t\t\t<form-button [form]="form" [disabled]="disableFormButton"></form-button>\n\t\t</div>\n\t</form>\n</div>\n'}]}],ctorParameters:()=>[{type:i1$1.ActivatedRoute},{type:SupportTicketService},{type:ProviderService},{type:DialogService}],propDecorators:{fileUpload:[{type:ViewChild,args:["fileUpload",{static:!0}]}],selectType:[{type:ViewChild,args:["selectType",{static:!0}]}]}});const routes=[{path:"",component:SupportTicketComponent,children:[{path:"list",component:SupportTicketListComponent},{path:"new",component:SupportTicketNewComponent},{path:"detail/:id",component:SupportTicketDetailComponent},{path:"edit/:id",component:SupportTicketEditComponent},{path:"**",redirectTo:"list"}]}],SupportTicketRouting=RouterModule.forChild(routes);class SupportTicketModule{static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SupportTicketModule,deps:[],target:i0.ɵɵFactoryTarget.NgModule});static"ɵmod"=i0.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"21.0.1",ngImport:i0,type:SupportTicketModule,declarations:[SupportTicketComponent,SupportTicketListComponent,SupportTicketNewComponent,SupportTicketDetailComponent,SupportTicketEditComponent],imports:[SharedModule,i1$1.RouterModule,DatatableModule,FileModule,NgbAccordionModule]});static"ɵinj"=i0.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SupportTicketModule,providers:[SupportTicketService],imports:[SharedModule,SupportTicketRouting,DatatableModule,FileModule,NgbAccordionModule]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SupportTicketModule,decorators:[{type:NgModule,args:[{imports:[SharedModule,SupportTicketRouting,DatatableModule,FileModule,NgbAccordionModule],declarations:[SupportTicketComponent,SupportTicketListComponent,SupportTicketNewComponent,SupportTicketDetailComponent,SupportTicketEditComponent],providers:[SupportTicketService]}]}]});let typeCache={};function type(t){if(typeCache[t])throw new Error(`Action type "${t}" is not unqiue"`);return typeCache[t]=!0,t}const CSV_EOL="\r\n",CSV_BOM="\ufeff",CSV_DEFAULTS={filename:"export",fieldSeparator:",",quoteStrings:'"',decimalseparator:".",showLabels:!1,showTitle:!1,title:"My Report",useBom:!0,headers:[]};function exportCsv(t,e,n){const o=Array.isArray(t)?t:tryParse(t);if(!Array.isArray(o)||!o.length)return void console.log("Invalid data");const r={...CSV_DEFAULTS,...n};e&&(r.filename=e);const i=normalizeData(o,r);i.title&&!r.showTitle&&(r.showTitle=!0,r.title||(r.title=i.title));let a="";r.useBom&&(a+="\ufeff"),r.showTitle&&r.title&&(a+=`${r.title}\r\n\r\n`);const s=resolveHeaders(r,i.data),l=stripHeaderRow(i.data,s,r),c=resolveRowKeys(l,s);s.length&&(a+=`${s.join(r.fieldSeparator)}\r\n`),l.forEach(t=>{a+=`${resolveRow(t,c,r)}\r\n`});const d=new Blob([a],{type:"text/csv;charset=utf-8;"}),p=`${(r.filename||CSV_DEFAULTS.filename).replace(/ /g,"_")}.csv`;if(navigator.msSaveBlob)navigator.msSaveBlob(d,p);else{const t=document.createElement("a");t.href=URL.createObjectURL(d),t.setAttribute("visibility","hidden"),t.download=p,document.body.appendChild(t),t.click(),document.body.removeChild(t)}}function resolveHeaders(t,e){return t.headers&&t.headers.length?t.headers:t.showLabels&&e.length&&!Array.isArray(e[0])&&"object"==typeof e[0]?collectKeysInOrder(e):[]}function resolveRowKeys(t,e){return e.length?e:!t.length||Array.isArray(t[0])||"object"!=typeof t[0]?[]:Object.keys(t[0])}function resolveRow(t,e,n){return Array.isArray(t)?t.map(t=>formatValue(t,n)).join(n.fieldSeparator):e.length?e.map(e=>formatValue(t[e],n)).join(n.fieldSeparator):Object.keys(t).map(e=>formatValue(t[e],n)).join(n.fieldSeparator)}function formatValue(t,e){if("locale"===e.decimalseparator&&isFloat(t))return t.toLocaleString();if("."!==e.decimalseparator&&isFloat(t))return t.toString().replace(".",e.decimalseparator);if("string"==typeof t){let n=t.replace(/"/g,'""');return(e.quoteStrings||t.indexOf(",")>-1||t.indexOf("\n")>-1||t.indexOf("\r")>-1)&&(n=`${e.quoteStrings}${n}${e.quoteStrings}`),n}return"boolean"==typeof t?t?"TRUE":"FALSE":null==t?"":t}function normalizeData(t,e){if(!e.showLabels||!t.length||Array.isArray(t[0])||"object"!=typeof t[0])return{data:t};const[n,...o]=t;if(isTitleRow(n)){const t=Object.keys(n);return{data:o,title:String(n[t[0]])}}return{data:t}}function stripHeaderRow(t,e,n){if(!n.showLabels||!e.length||!t.length)return t;const[o,...r]=t;return isHeaderValueRow(o,e)?r:t}function collectKeysInOrder(t){const e=[];return t.forEach(t=>{Array.isArray(t)||"object"!=typeof t||Object.keys(t).forEach(t=>{-1===e.indexOf(t)&&e.push(t)})}),e}function isHeaderValueRow(t,e){return!(Array.isArray(t)||"object"!=typeof t||!e.length)&&e.every(e=>t[e]===e)}function isTitleRow(t){if(Array.isArray(t)||"object"!=typeof t||null===t)return!1;const e=Object.keys(t);if(1!==e.length)return!1;const n=t[e[0]];return"string"==typeof n&&n===e[0]}function tryParse(t){try{return JSON.parse(t)}catch(t){return console.log("Invalid CSV data",t),[]}}function isFloat(t){return+t===t&&(!isFinite(t)||Boolean(t%1))}class DateShortcutComponent extends BaseComponent{_services;_cd;startDateObj;endDateObj;startDateObjForm;endDateObjForm;startDateObjChange=new EventEmitter;endDateObjChange=new EventEmitter;startDateObjFormChange=new EventEmitter;endDateObjFormChange=new EventEmitter;datesChanged=new EventEmitter;shortcutValue=null;shortcutValueChange=new EventEmitter;constructor(t,e){super(t),this._services=t,this._cd=e}ngOnInit(){this.onSelectShortcut()}reset(){this.shortcutValue=null,this.shortcutValueChange.emit(this.shortcutValue),this._cd.detectChanges()}onSelectShortcut(){if(this.shortcutValue){const t=this._services._app.environment.value?.TZ_CLIENT,e=momentTz(t);if(this.startDateObj&&this.endDateObj){let n=dateOnlyStartOfDayTz({year:this.startDateObj.year,month:this.startDateObj.month,day:this.startDateObj.day},t),o=dateOnlyStartOfDayTz({year:this.endDateObj.year,month:this.endDateObj.month,day:this.endDateObj.day},t);"Q1"===this.shortcutValue?(n=e.clone().startOf("year").toDate(),o=e.clone().startOf("year").quarter(2).subtract(1,"days").toDate()):"Q2"===this.shortcutValue?(n=e.clone().startOf("year").quarter(2).toDate(),o=e.clone().startOf("year").quarter(3).subtract(1,"days").toDate()):"Q3"===this.shortcutValue?(n=e.clone().startOf("year").quarter(3).toDate(),o=e.clone().startOf("year").quarter(4).subtract(1,"days").toDate()):"Q4"===this.shortcutValue?(n=e.clone().startOf("year").quarter(4).toDate(),o=e.clone().endOf("year").toDate()):"Last Q1"===this.shortcutValue?(n=e.clone().startOf("year").subtract(1,"year").toDate(),o=e.clone().startOf("year").subtract(1,"year").quarter(2).subtract(1,"days").toDate()):"Last Q2"===this.shortcutValue?(n=e.clone().startOf("year").subtract(1,"year").quarter(2).toDate(),o=e.clone().startOf("year").subtract(1,"year").quarter(3).subtract(1,"days").toDate()):"Last Q3"===this.shortcutValue?(n=e.clone().startOf("year").subtract(1,"year").quarter(3).toDate(),o=e.clone().startOf("year").subtract(1,"year").quarter(4).subtract(1,"days").toDate()):"Last Q4"===this.shortcutValue?(n=e.clone().startOf("year").subtract(1,"year").quarter(4).toDate(),o=e.clone().endOf("year").subtract(1,"year").toDate()):"Today"===this.shortcutValue?(n=e.clone().startOf("day").toDate(),o=e.clone().toDate()):"Yesterday"===this.shortcutValue?(n=e.clone().subtract(1,"days").startOf("day").toDate(),o=e.clone().subtract(1,"days").endOf("day").toDate()):"Week"===this.shortcutValue?(n=e.clone().startOf("isoWeek").toDate(),o=e.clone().toDate()):"Last Week"===this.shortcutValue?(o=e.clone().startOf("isoWeek").subtract(1,"days").toDate(),n=momentTz(t,o).startOf("isoWeek").toDate()):"Month"===this.shortcutValue?(n=e.clone().startOf("month").toDate(),o=e.clone().toDate()):"Last Month"===this.shortcutValue?(o=e.clone().startOf("month").subtract(1,"days").endOf("day").toDate(),n=momentTz(t,o).startOf("month").toDate()):"Last 30 Days"===this.shortcutValue?(o=e.clone().toDate(),n=e.clone().subtract(30,"days").startOf("day").toDate()):"Quarter"===this.shortcutValue?(n=e.clone().startOf("year").quarter(e.quarter()).toDate(),o=e.clone().toDate()):"Last Quarter"===this.shortcutValue?(o=e.clone().startOf("year").quarter(e.quarter()).subtract(1,"days").endOf("day").toDate(),n=momentTz(t,o).startOf("quarter").toDate()):"Year"===this.shortcutValue?(n=e.clone().startOf("year").toDate(),o=e.clone().toDate()):"Last Year"===this.shortcutValue?(o=e.clone().startOf("year").subtract(1,"days").endOf("day").toDate(),n=momentTz(t,o).startOf("year").toDate()):"All"===this.shortcutValue&&(n=new Date(2017,0,1,0,0,0,0),o=e.clone().toDate()),this.startDateObj={year:n.getFullYear(),month:n.getMonth()+1,day:n.getDate()},this.endDateObj={year:o.getFullYear(),month:o.getMonth()+1,day:o.getDate()},this.startDateObjChange.emit(this.startDateObj),this.endDateObjChange.emit(this.endDateObj),this.datesChanged.emit([this.startDateObj,this.endDateObj])}else if(this.startDateObjForm&&this.endDateObjForm){let n=dateOnlyStartOfDayTz({year:this.startDateObjForm.value.year,month:this.startDateObjForm.value.month,day:this.startDateObjForm.value.day},t),o=dateOnlyStartOfDayTz({year:this.endDateObjForm.value.year,month:this.endDateObjForm.value.month,day:this.endDateObjForm.value.day},t);"Q1"===this.shortcutValue?(n=e.clone().startOf("year").toDate(),o=e.clone().startOf("year").quarter(2).subtract(1,"days").toDate()):"Q2"===this.shortcutValue?(n=e.clone().startOf("year").quarter(2).toDate(),o=e.clone().startOf("year").quarter(3).subtract(1,"days").toDate()):"Q3"===this.shortcutValue?(n=e.clone().startOf("year").quarter(3).toDate(),o=e.clone().startOf("year").quarter(4).subtract(1,"days").toDate()):"Q4"===this.shortcutValue?(n=e.clone().startOf("year").quarter(4).toDate(),o=e.clone().endOf("year").toDate()):"Last Q1"===this.shortcutValue?(n=e.clone().startOf("year").subtract(1,"year").toDate(),o=e.clone().startOf("year").subtract(1,"year").quarter(2).subtract(1,"days").toDate()):"Last Q2"===this.shortcutValue?(n=e.clone().startOf("year").subtract(1,"year").quarter(2).toDate(),o=e.clone().startOf("year").subtract(1,"year").quarter(3).subtract(1,"days").toDate()):"Last Q3"===this.shortcutValue?(n=e.clone().startOf("year").subtract(1,"year").quarter(3).toDate(),o=e.clone().startOf("year").subtract(1,"year").quarter(4).subtract(1,"days").toDate()):"Last Q4"===this.shortcutValue?(n=e.clone().startOf("year").subtract(1,"year").quarter(4).toDate(),o=e.clone().endOf("year").subtract(1,"year").toDate()):"Today"===this.shortcutValue?(n=e.clone().startOf("day").toDate(),o=e.clone().toDate()):"Yesterday"===this.shortcutValue?(n=e.clone().subtract(1,"days").startOf("day").toDate(),o=e.clone().subtract(1,"days").endOf("day").toDate()):"Week"===this.shortcutValue?(n=e.clone().startOf("isoWeek").toDate(),o=e.clone().toDate()):"Last Week"===this.shortcutValue?(o=e.clone().startOf("isoWeek").subtract(1,"days").toDate(),n=momentTz(t,o).startOf("isoWeek").toDate()):"Month"===this.shortcutValue?(n=e.clone().startOf("month").toDate(),o=e.clone().toDate()):"Last Month"===this.shortcutValue?(o=e.clone().startOf("month").subtract(1,"days").endOf("day").toDate(),n=momentTz(t,o).startOf("month").toDate()):"Last 30 Days"===this.shortcutValue?(o=e.clone().toDate(),n=e.clone().subtract(30,"days").startOf("day").toDate()):"Quarter"===this.shortcutValue?(n=e.clone().startOf("year").quarter(e.quarter()).toDate(),o=e.clone().toDate()):"Last Quarter"===this.shortcutValue?(o=e.clone().startOf("year").quarter(e.quarter()).subtract(1,"days").endOf("day").toDate(),n=momentTz(t,o).startOf("quarter").toDate()):"Year"===this.shortcutValue?(n=e.clone().startOf("year").toDate(),o=e.clone().toDate()):"Last Year"===this.shortcutValue?(o=e.clone().startOf("year").subtract(1,"days").endOf("day").toDate(),n=momentTz(t,o).startOf("year").toDate()):"All"===this.shortcutValue&&(n=new Date(2017,0,1,0,0,0,0),o=e.clone().toDate()),this.startDateObjForm.setValue({year:n.getFullYear(),month:n.getMonth()+1,day:n.getDate()}),this.endDateObjForm.setValue({year:o.getFullYear(),month:o.getMonth()+1,day:o.getDate()}),this.startDateObjFormChange.emit(this.startDateObjForm),this.endDateObjFormChange.emit(this.endDateObjForm),this.datesChanged.emit([this.startDateObjForm,this.endDateObjForm])}this.shortcutValueChange.emit(this.shortcutValue)}this._cd.detectChanges()}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DateShortcutComponent,deps:[{token:ProviderService},{token:i0.ChangeDetectorRef}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"21.0.1",type:DateShortcutComponent,isStandalone:!1,selector:"date-shortcut",inputs:{startDateObj:"startDateObj",endDateObj:"endDateObj",startDateObjForm:"startDateObjForm",endDateObjForm:"endDateObjForm",shortcutValue:"shortcutValue"},outputs:{startDateObjChange:"startDateObjChange",endDateObjChange:"endDateObjChange",startDateObjFormChange:"startDateObjFormChange",endDateObjFormChange:"endDateObjFormChange",datesChanged:"datesChanged",shortcutValueChange:"shortcutValueChange"},providers:[ProviderService],usesInheritance:!0,ngImport:i0,template:'\n\t\t<label class="form-control-label">Date Shortcuts</label>\n\t\t<ng-select [(ngModel)]="shortcutValue" (change)="onSelectShortcut()" placeholder="Select Shortcut" [clearable]="false">\n\t\t\t<ng-option value="Today">Today</ng-option>\n\t\t\t<ng-option value="Yesterday">Yesterday</ng-option>\n\t\t\t<ng-option value="Week">This Week</ng-option>\n\t\t\t<ng-option value="Last Week">Last Week</ng-option>\n\t\t\t<ng-option value="Month">This Month</ng-option>\n\t\t\t<ng-option value="Last Month">Last Month</ng-option>\n\t\t\t<ng-option value="Last 30 Days">Last 30 Days</ng-option>\n\t\t\t<ng-option value="Quarter">This Quarter</ng-option>\n\t\t\t<ng-option value="Last Quarter">Last Quarter</ng-option>\n\t\t\t<ng-option value="Year">This Year</ng-option>\n\t\t\t<ng-option value="Last Year">Last Year</ng-option>\n\t\t\t<ng-option value="Q1">Q1</ng-option>\n\t\t\t<ng-option value="Q2">Q2</ng-option>\n\t\t\t<ng-option value="Q3">Q3</ng-option>\n\t\t\t<ng-option value="Q4">Q4</ng-option>\n\t\t\t<ng-option value="Last Q1">Last Q1</ng-option>\n\t\t\t<ng-option value="Last Q2">Last Q2</ng-option>\n\t\t\t<ng-option value="Last Q3">Last Q3</ng-option>\n\t\t\t<ng-option value="Last Q4">Last Q4</ng-option>\n\t\t\t<ng-option value="All">All</ng-option>\n\t\t</ng-select>\n\t',isInline:!0,dependencies:[{kind:"directive",type:i2.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:i2.NgModel,selector:"[ngModel]:not([formControlName]):not([formControl])",inputs:["name","disabled","ngModel","ngModelOptions"],outputs:["ngModelChange"],exportAs:["ngModel"]},{kind:"component",type:i5.NgSelectComponent,selector:"ng-select",inputs:["placeholder","multiple","panelMaxHeight","panelMaxViewportRatio","optionHeight","virtualBuffer","overlayZIndex","autoSizePanel","panelPosition","autoCenterPanel","viewportMargin","panelWidth","panelFullscreenWidth","clearable","templateLabelFromView","searchable","searchMatchMode","defaultSearch","textWrap","compareWith","options","optionLabelKey","optionLabelFn","optionValueKey","optionDisabledKey","optionIdKey","optionGroupKey","disabled","emitOptionObject","debugLog","stickyKey","stickyAutoSave"],outputs:["change"]},{kind:"component",type:i5.NgOptionComponent,selector:"ng-option",inputs:["value","disabled","label","id"]}],changeDetection:i0.ChangeDetectionStrategy.OnPush})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DateShortcutComponent,decorators:[{type:Component,args:[{providers:[ProviderService],selector:"date-shortcut",template:'\n\t\t<label class="form-control-label">Date Shortcuts</label>\n\t\t<ng-select [(ngModel)]="shortcutValue" (change)="onSelectShortcut()" placeholder="Select Shortcut" [clearable]="false">\n\t\t\t<ng-option value="Today">Today</ng-option>\n\t\t\t<ng-option value="Yesterday">Yesterday</ng-option>\n\t\t\t<ng-option value="Week">This Week</ng-option>\n\t\t\t<ng-option value="Last Week">Last Week</ng-option>\n\t\t\t<ng-option value="Month">This Month</ng-option>\n\t\t\t<ng-option value="Last Month">Last Month</ng-option>\n\t\t\t<ng-option value="Last 30 Days">Last 30 Days</ng-option>\n\t\t\t<ng-option value="Quarter">This Quarter</ng-option>\n\t\t\t<ng-option value="Last Quarter">Last Quarter</ng-option>\n\t\t\t<ng-option value="Year">This Year</ng-option>\n\t\t\t<ng-option value="Last Year">Last Year</ng-option>\n\t\t\t<ng-option value="Q1">Q1</ng-option>\n\t\t\t<ng-option value="Q2">Q2</ng-option>\n\t\t\t<ng-option value="Q3">Q3</ng-option>\n\t\t\t<ng-option value="Q4">Q4</ng-option>\n\t\t\t<ng-option value="Last Q1">Last Q1</ng-option>\n\t\t\t<ng-option value="Last Q2">Last Q2</ng-option>\n\t\t\t<ng-option value="Last Q3">Last Q3</ng-option>\n\t\t\t<ng-option value="Last Q4">Last Q4</ng-option>\n\t\t\t<ng-option value="All">All</ng-option>\n\t\t</ng-select>\n\t',changeDetection:ChangeDetectionStrategy.OnPush,standalone:!1}]}],ctorParameters:()=>[{type:ProviderService},{type:i0.ChangeDetectorRef}],propDecorators:{startDateObj:[{type:Input}],endDateObj:[{type:Input}],startDateObjForm:[{type:Input}],endDateObjForm:[{type:Input}],startDateObjChange:[{type:Output}],endDateObjChange:[{type:Output}],startDateObjFormChange:[{type:Output}],endDateObjFormChange:[{type:Output}],datesChanged:[{type:Output}],shortcutValue:[{type:Input}],shortcutValueChange:[{type:Output}]}});class DateShortcutModule{static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DateShortcutModule,deps:[],target:i0.ɵɵFactoryTarget.NgModule});static"ɵmod"=i0.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"21.0.1",ngImport:i0,type:DateShortcutModule,declarations:[DateShortcutComponent],imports:[FormsModule,CommonModule,NgSelectModule],exports:[DateShortcutComponent]});static"ɵinj"=i0.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DateShortcutModule,imports:[FormsModule,CommonModule,NgSelectModule]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:DateShortcutModule,decorators:[{type:NgModule,args:[{imports:[FormsModule,CommonModule,NgSelectModule],exports:[DateShortcutComponent],declarations:[DateShortcutComponent]}]}]});class SchedulerComponent extends BaseComponent{_services;today=new Date;over_forward=!1;over_backwards=!1;mouseDown=!1;mouseLastEvent=null;timer_sub=null;months=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];size_svg={width:0,height:0};size_cell={width:30,height:30};svgChart;constructor(t){super(t),this._services=t}ngAfterViewInit(){this.size_svg.width=this.svgChart.nativeElement.clientWidth,this.size_svg.height=this.svgChart.nativeElement.clientHeight}ngOnDestroy(){this.timer_sub&&clearInterval(this.timer_sub)}onMouseup(){this.mouseDown=!1}onMousedown(t){this.mouseDown=!0,this.mouseLastEvent=t}onMousemove(t){if(this.mouseDown){let e=0;this.mouseLastEvent.clientX-t.clientX>1?e=Math.floor((this.mouseLastEvent.clientX-t.clientX)/15)>0?Math.floor((this.mouseLastEvent.clientX-t.clientX+5*(30-this.size_cell.width))/20):1:this.mouseLastEvent.clientX-t.clientX<-1&&(e=Math.floor((this.mouseLastEvent.clientX-t.clientX)/15)<0?Math.floor((this.mouseLastEvent.clientX-t.clientX-5*(30-this.size_cell.width))/20):-1),this.today=moment$1(this.today).add(e,"days").toDate(),this.mouseLastEvent=t}}onMouseLeave(t){this.mouseDown&&(this.mouseDown=!1)}buildDays(){let t=[];for(let e=0;e<Math.floor(this.size_svg.width/this.size_cell.width);e++)t.push({index:e,day:moment$1(this.today).add(e,"days").toDate().getDate()});return t}buildMonths(){let t=[{index_start:0,index_end:null,month:this.months[this.today.getMonth()]}];for(let e=1;e<Math.floor(this.size_svg.width/this.size_cell.width);e++)moment$1(this.today).add(e,"days").toDate().getMonth()!==moment$1(this.today).add(e-1,"days").toDate().getMonth()&&(t[t.length-1].index_end=e,t.push({index_start:e,index_end:null,month:this.months[moment$1(this.today).add(e,"days").toDate().getMonth()]}));return t[t.length-1].index_end=Math.floor(this.size_svg.width/this.size_cell.width),t}buildYears(){let t=[{index_start:0,index_end:null,year:this.today.getFullYear()}];for(let e=1;e<Math.floor(this.size_svg.width/this.size_cell.width);e++)moment$1(this.today).add(e,"days").toDate().getFullYear()!==moment$1(this.today).add(e-1,"days").toDate().getFullYear()&&(t[t.length-1].index_end=e,t.push({index_start:e,index_end:null,year:moment$1(this.today).add(e,"days").toDate().getFullYear()}));return t[t.length-1].index_end=Math.floor(this.size_svg.width/this.size_cell.width),t}decrementToday(){this.today=moment$1(this.today).subtract(1,"days").toDate()}incrementToday(){this.today=moment$1(this.today).add(1,"days").toDate()}overForward(){this.timer_sub=setInterval(()=>{this.incrementToday()},50)}leftForward(){clearInterval(this.timer_sub)}overBackwards(){this.timer_sub=setInterval(()=>{this.decrementToday()},50)}leftBackwards(){clearInterval(this.timer_sub)}zoomOut(){this.size_cell.width>10&&(this.size_cell.width-=10)}zoomIn(){this.size_cell.width+=10}static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SchedulerComponent,deps:[{token:ProviderService}],target:i0.ɵɵFactoryTarget.Component});static"ɵcmp"=i0.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"21.0.1",type:SchedulerComponent,isStandalone:!1,selector:"scheduler",host:{listeners:{mouseup:"onMouseup()",mousedown:"onMousedown($event)",mousemove:"onMousemove($event)",mouseleave:"onMouseLeave($event)"}},providers:[ProviderService],viewQueries:[{propertyName:"svgChart",first:!0,predicate:["svgChart"],descendants:!0,static:!0}],usesInheritance:!0,ngImport:i0,template:'<style>\n\t.bar {\n\t\tfill: red; /* changes the background */\n\t\theight: 21px;\n\t\ttransition: fill 0.3s ease;\n\t\tcursor: pointer;\n\t\tfont-family: Helvetica, sans-serif;\n\t}\n\n\t.bar text {\n\t\tcolor: black;\n\t}\n\n\t.bar:hover,\n\t.bar:focus {\n\t\tfill: black;\n\t}\n\n\t.bar:hover text,\n\t.bar:focus text {\n\t\tfill: red;\n\t}\n\n\t.year {\n\t\tstroke: black;\n\t\tfill: white;\n\t}\n\n\t.month {\n\t\tstroke: black;\n\t\tfill: white;\n\t}\n\n\t.day {\n\t\tstroke: black;\n\t\tfill: white;\n\t}\n\n\t.smallText {\n\t\tfont-size: 4px;\n\t}\n</style>\n\n<div class="scheduler">\n\t<button class="btn btn-warning" type="button" (mouseenter)="overBackwards()" (mouseleave)="leftBackwards()">Go Backwards</button>\n\t<button class="btn btn-success" type="button" (mouseenter)="overForward()" (mouseleave)="leftForward()">Go Forward</button>\n\n\t<button style="margin-left: 20px" class="btn btn-warning" type="button" (click)="zoomOut()">Zoom Out</button>\n\t<button class="btn btn-success" type="button" (click)="zoomIn()">Zoom In</button>\n\n\t<svg class="chart" width="100%" height="100%" aria-labelledby="title desc" role="img" #svgChart>\n\t\t<title id="title">Scheduler</title>\n\t\t<desc id="desc">Scheduler</desc>\n\n\t\t<g class="year">\n\t\t\t@for (year of buildYears(); track year;) {\n\t\t\t\t<ng-container>\n\t\t\t\t\t<rect [attr.width]="(year.index_end - year.index_start) * size_cell.width" [attr.height]="size_cell.height" [attr.x]="year.index_start * size_cell.width"></rect>\n\t\t\t\t\t<svg [attr.width]="(year.index_end - year.index_start) * size_cell.width" [attr.height]="size_cell.height" [attr.x]="year.index_start * size_cell.width">\n\t\t\t\t\t\t<text x="50%" y="50%" alignment-baseline="middle" text-anchor="middle">{{ year.year }}</text>\n\t\t\t\t\t</svg>\n\t\t\t\t</ng-container>\n\t\t\t}\n\t\t</g>\n\t\t<g class="month">\n\t\t\t@for (month of buildMonths(); track month;) {\n\t\t\t\t<ng-container>\n\t\t\t\t\t<rect [attr.width]="(month.index_end - month.index_start) * size_cell.width" [attr.height]="size_cell.height" [attr.x]="month.index_start * size_cell.width" [attr.y]="size_cell.height"></rect>\n\t\t\t\t\t<svg [attr.width]="(month.index_end - month.index_start) * size_cell.width" [attr.height]="size_cell.height" [attr.x]="month.index_start * size_cell.width" [attr.y]="size_cell.height">\n\t\t\t\t\t\t<text x="50%" y="50%" alignment-baseline="middle" text-anchor="middle">{{ month.month }}</text>\n\t\t\t\t\t</svg>\n\t\t\t\t</ng-container>\n\t\t\t}\n\t\t</g>\n\t\t<g class="day">\n\t\t\t@for (day of buildDays(); track day;) {\n\t\t\t\t<ng-container>\n\t\t\t\t\t<rect [attr.width]="size_cell.width" [attr.height]="size_cell.height" [attr.x]="day.index * size_cell.width" [attr.y]="size_cell.height * 2"></rect>\n\t\t\t\t\t<svg [attr.width]="size_cell.width" [attr.height]="size_cell.height" [attr.x]="day.index * size_cell.width" [attr.y]="size_cell.height * 2">\n\t\t\t\t\t\t<text x="50%" y="50%" alignment-baseline="middle" text-anchor="middle" [style.font-size.px]="[size_cell.width > 10 ? 12 : 6]">{{ day.day }}</text>\n\t\t\t\t\t</svg>\n\t\t\t\t</ng-container>\n\t\t\t}\n\t\t</g>\n\n\t\t\x3c!-- <g class="bar">\n\t<rect width="40" height="19"></rect>\n\t<text x="45" y="9.5" dy=".35em">4 apples</text>\n\t</g>\n\t<g class="bar">\n\t<rect width="80" height="19" y="20"></rect>\n\t<text x="85" y="28" dy=".35em">8 bananas</text>\n\t</g>\n\t<g class="bar">\n\t<rect width="150" height="19" y="40"></rect>\n\t<text x="150" y="48" dy=".35em">15 kiwis</text>\n\t</g>\n\t<g class="bar">\n\t<rect width="160" height="19" y="60"></rect>\n\t<text x="161" y="68" dy=".35em">16 oranges</text>\n\t</g>\n\t<g class="bar">\n\t<rect width="230" height="19" y="80"></rect>\n\t<text x="235" y="88" dy=".35em">23 lemons</text>\n\t</g> --\x3e\n\t</svg>\n</div>\n',styles:[".bar{fill:red;height:21px;transition:fill .3s ease;cursor:pointer;font-family:Helvetica,sans-serif}.bar text{color:#000}.bar:hover,.bar:focus{fill:#000}.bar:hover text,.bar:focus text{fill:red}.year,.month,.day{stroke:#000;fill:#fff}.smallText{font-size:4px}\n"]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SchedulerComponent,decorators:[{type:Component,args:[{providers:[ProviderService],selector:"scheduler",standalone:!1,template:'<style>\n\t.bar {\n\t\tfill: red; /* changes the background */\n\t\theight: 21px;\n\t\ttransition: fill 0.3s ease;\n\t\tcursor: pointer;\n\t\tfont-family: Helvetica, sans-serif;\n\t}\n\n\t.bar text {\n\t\tcolor: black;\n\t}\n\n\t.bar:hover,\n\t.bar:focus {\n\t\tfill: black;\n\t}\n\n\t.bar:hover text,\n\t.bar:focus text {\n\t\tfill: red;\n\t}\n\n\t.year {\n\t\tstroke: black;\n\t\tfill: white;\n\t}\n\n\t.month {\n\t\tstroke: black;\n\t\tfill: white;\n\t}\n\n\t.day {\n\t\tstroke: black;\n\t\tfill: white;\n\t}\n\n\t.smallText {\n\t\tfont-size: 4px;\n\t}\n</style>\n\n<div class="scheduler">\n\t<button class="btn btn-warning" type="button" (mouseenter)="overBackwards()" (mouseleave)="leftBackwards()">Go Backwards</button>\n\t<button class="btn btn-success" type="button" (mouseenter)="overForward()" (mouseleave)="leftForward()">Go Forward</button>\n\n\t<button style="margin-left: 20px" class="btn btn-warning" type="button" (click)="zoomOut()">Zoom Out</button>\n\t<button class="btn btn-success" type="button" (click)="zoomIn()">Zoom In</button>\n\n\t<svg class="chart" width="100%" height="100%" aria-labelledby="title desc" role="img" #svgChart>\n\t\t<title id="title">Scheduler</title>\n\t\t<desc id="desc">Scheduler</desc>\n\n\t\t<g class="year">\n\t\t\t@for (year of buildYears(); track year;) {\n\t\t\t\t<ng-container>\n\t\t\t\t\t<rect [attr.width]="(year.index_end - year.index_start) * size_cell.width" [attr.height]="size_cell.height" [attr.x]="year.index_start * size_cell.width"></rect>\n\t\t\t\t\t<svg [attr.width]="(year.index_end - year.index_start) * size_cell.width" [attr.height]="size_cell.height" [attr.x]="year.index_start * size_cell.width">\n\t\t\t\t\t\t<text x="50%" y="50%" alignment-baseline="middle" text-anchor="middle">{{ year.year }}</text>\n\t\t\t\t\t</svg>\n\t\t\t\t</ng-container>\n\t\t\t}\n\t\t</g>\n\t\t<g class="month">\n\t\t\t@for (month of buildMonths(); track month;) {\n\t\t\t\t<ng-container>\n\t\t\t\t\t<rect [attr.width]="(month.index_end - month.index_start) * size_cell.width" [attr.height]="size_cell.height" [attr.x]="month.index_start * size_cell.width" [attr.y]="size_cell.height"></rect>\n\t\t\t\t\t<svg [attr.width]="(month.index_end - month.index_start) * size_cell.width" [attr.height]="size_cell.height" [attr.x]="month.index_start * size_cell.width" [attr.y]="size_cell.height">\n\t\t\t\t\t\t<text x="50%" y="50%" alignment-baseline="middle" text-anchor="middle">{{ month.month }}</text>\n\t\t\t\t\t</svg>\n\t\t\t\t</ng-container>\n\t\t\t}\n\t\t</g>\n\t\t<g class="day">\n\t\t\t@for (day of buildDays(); track day;) {\n\t\t\t\t<ng-container>\n\t\t\t\t\t<rect [attr.width]="size_cell.width" [attr.height]="size_cell.height" [attr.x]="day.index * size_cell.width" [attr.y]="size_cell.height * 2"></rect>\n\t\t\t\t\t<svg [attr.width]="size_cell.width" [attr.height]="size_cell.height" [attr.x]="day.index * size_cell.width" [attr.y]="size_cell.height * 2">\n\t\t\t\t\t\t<text x="50%" y="50%" alignment-baseline="middle" text-anchor="middle" [style.font-size.px]="[size_cell.width > 10 ? 12 : 6]">{{ day.day }}</text>\n\t\t\t\t\t</svg>\n\t\t\t\t</ng-container>\n\t\t\t}\n\t\t</g>\n\n\t\t\x3c!-- <g class="bar">\n\t<rect width="40" height="19"></rect>\n\t<text x="45" y="9.5" dy=".35em">4 apples</text>\n\t</g>\n\t<g class="bar">\n\t<rect width="80" height="19" y="20"></rect>\n\t<text x="85" y="28" dy=".35em">8 bananas</text>\n\t</g>\n\t<g class="bar">\n\t<rect width="150" height="19" y="40"></rect>\n\t<text x="150" y="48" dy=".35em">15 kiwis</text>\n\t</g>\n\t<g class="bar">\n\t<rect width="160" height="19" y="60"></rect>\n\t<text x="161" y="68" dy=".35em">16 oranges</text>\n\t</g>\n\t<g class="bar">\n\t<rect width="230" height="19" y="80"></rect>\n\t<text x="235" y="88" dy=".35em">23 lemons</text>\n\t</g> --\x3e\n\t</svg>\n</div>\n'}]}],ctorParameters:()=>[{type:ProviderService}],propDecorators:{svgChart:[{type:ViewChild,args:["svgChart",{static:!0}]}],onMouseup:[{type:HostListener,args:["mouseup"]}],onMousedown:[{type:HostListener,args:["mousedown",["$event"]]}],onMousemove:[{type:HostListener,args:["mousemove",["$event"]]}],onMouseLeave:[{type:HostListener,args:["mouseleave",["$event"]]}]}});class SchedulerModule{static"ɵfac"=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SchedulerModule,deps:[],target:i0.ɵɵFactoryTarget.NgModule});static"ɵmod"=i0.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"21.0.1",ngImport:i0,type:SchedulerModule,declarations:[SchedulerComponent],imports:[NgbModule,FormsModule,CommonModule,RouterModule],exports:[SchedulerComponent]});static"ɵinj"=i0.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SchedulerModule,imports:[NgbModule,FormsModule,CommonModule,RouterModule]})}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.0.1",ngImport:i0,type:SchedulerModule,decorators:[{type:NgModule,args:[{imports:[NgbModule,FormsModule,CommonModule,RouterModule],exports:[SchedulerComponent],declarations:[SchedulerComponent],providers:[]}]}]});const ReportBuilderModulePermission={name:"report-builder",views:[{link:"/report-builder/list",label:"List"},{link:"/report-builder/new",label:"New"},{link:"/report-builder/scheduled-job",label:"Scheduled Job"},{link:"/report-builder/dashboard-builder",label:"Dashboard Builder"},{link:"/report-builder/detail",label:"Detail",has_parameter:!0},{link:"/report-builder/edit",label:"Edit",has_parameter:!0},{link:"/report-builder/delete",label:"Delete",has_parameter:!0}]},SuperAdminModulePermission={name:"super-admin",views:[{link:"/super-admin/dashboard",label:"Dashboard"},{link:"/super-admin/apm",label:"APM"},{link:"/super-admin/monitor",label:"Monitor"}]};export{AccountManagerService,AlertService,Auth365Component,AuthGuard,AuthPermissionService,AuthService,AwsService,BaseComponent,CanDeactivateGuard,CollapseTableComponent,CollapseTableModule,CoreComponent,CoreModule,CoreService,DatatableComponent,DatatableModule,DateShortcutComponent,DateShortcutModule,DialogService,DomSanitizorPipe,Draggable,DropEvent,Droppable,EnrollComponent,FileModule,FileUploadComponent,FilterEqualPipe,FilterNotEqualPipe,FocusDirective,ForgotPasswordComponent,FormButtonComponent,FormButtonModule,HomeComponent,JsonParsePipe,LoggerComponent,MinusCurrencyPipe,NavbarMainComponent,NavbarModuleComponent,NgDragDropModule,NgDragDropService,OfflineManagerService,PhonePipe,PipeModule,ProviderService,ReportBuilderModulePermission,ResizeService,ResponsiveButtonGroupComponent,ResponsiveButtonGroupModule,ReversePipe,SchedulerComponent,SchedulerModule,ScrollDirective,SharedModule,SocketManagerService,SocketService,SortTableDirective,SortTableHeaderComponent,SortTableModule,SortTableNgForComponent,Sortable as SortableJs,SortablejsDirective,SortablejsModule,StorageDB,SuperAdminModulePermission,SupportTicketComponent,SupportTicketDetailComponent,SupportTicketEditComponent,SupportTicketListComponent,SupportTicketModule,SupportTicketNewComponent,SupportTicketRouting,SupportTicketService,TitleCaseAndUnderscorePipe,TokenManagerService,UserRoleComponent,UserRoleModule,ValidationService,WindowRefService,applyMongoUpdate,b64toBlobURL,blobToFile,dateOnlyStartOfDayTz,dateReviver,deepCopy,deepDiffDetails,exportCsv,generateCronStringFromDate,isUpperCase,mergeDeep,momentTz,pad,rioDatePickerConfigFactory,round,s2ab,toDataURL,toTitleCase,type};
|