(function(){const a=document.createElement("link").relList;if(a&&a.supports&&a.supports("modulepreload"))return;for(const c of document.querySelectorAll('link[rel="modulepreload"]'))l(c);new MutationObserver(c=>{for(const d of c)if(d.type==="childList")for(const h of d.addedNodes)h.tagName==="LINK"&&h.rel==="modulepreload"&&l(h)}).observe(document,{childList:!0,subtree:!0});function o(c){const d={};return c.integrity&&(d.integrity=c.integrity),c.referrerPolicy&&(d.referrerPolicy=c.referrerPolicy),c.crossOrigin==="use-credentials"?d.credentials="include":c.crossOrigin==="anonymous"?d.credentials="omit":d.credentials="same-origin",d}function l(c){if(c.ep)return;c.ep=!0;const d=o(c);fetch(c.href,d)}})();const ji="insuite_mobile_user_profile";function zi(n){return String(n??"").trim()}function co(n){return zi(n).toLowerCase()}function _l(n){const a=co(n);return a==="etude"||a==="etude_raccordement"?"raccordement":a}function aa(n){return!n||typeof n!="object"?null:{id:Number(n.id||0),name:zi(n.name),email:zi(n.email),role_key:co(n.role_key),technician_type:_l(n.technician_type),assigned_city:zi(n.assigned_city)}}function Ki(){try{return aa(JSON.parse(localStorage.getItem(ji)||"null"))}catch{return null}}function vl(n){const a=aa(n);return a?(localStorage.setItem(ji,JSON.stringify(a)),a):(localStorage.removeItem(ji),null)}function Ui(){localStorage.removeItem(ji)}function sa(n){const a=aa(n),o=(a==null?void 0:a.technician_type)||"";return o==="raccordement"?{profile:a,technicianType:o,moduleKey:"raccordement",moduleLabel:"Raccordement",moduleListTitle:"Raccordements",moduleHeroSubtitle:"Portefeuille terrain des raccordements clients assignés.",moduleMetricLabel:"Raccordements",moduleInProgressLabel:"Raccordements en cours",moduleActionLabel:"Ouvrir raccordement",moduleOpenActionLabel:"Voir raccordements",moduleNotificationLabel:"mission(s) raccordement",defaultRoute:"/dashboard",navItems:[{path:"/dashboard",label:"Dashboard",icon:"fa-chart-line",activePaths:["/dashboard"]},{path:"/ftth",label:"Raccordement",icon:"fa-network-wired",activePaths:["/ftth","/ftth-report"]}],canAccessPath(l){return["/dashboard","/ftth","/ftth-report"].includes(l)}}:o==="maintenance_ftth"?{profile:a,technicianType:o,moduleKey:"maintenance_ftth",moduleLabel:"Maintenance Ftth",moduleListTitle:"Maintenance Ftth",moduleHeroSubtitle:"Portefeuille terrain des interventions FTTH assignées.",moduleMetricLabel:"Maintenance Ftth",moduleInProgressLabel:"FTTH en cours",moduleActionLabel:"Ouvrir maintenance",moduleOpenActionLabel:"Voir fiches",moduleNotificationLabel:"mission(s) FTTH",defaultRoute:"/dashboard",navItems:[{path:"/dashboard",label:"Dashboard",icon:"fa-chart-line",activePaths:["/dashboard"]},{path:"/ftth",label:"Maintenance Ftth",icon:"fa-network-wired",activePaths:["/ftth","/ftth-report"]},{path:"/nearby",label:"Proximité",icon:"fa-location-crosshairs",activePaths:["/nearby"]}],canAccessPath(l){return["/dashboard","/ftth","/ftth-report","/nearby"].includes(l)}}:o==="backbones"?{profile:a,technicianType:o,moduleKey:"backbones",moduleLabel:"Incidents",moduleListTitle:"Incidents",moduleHeroSubtitle:"Traitement terrain et suivi des tickets backbone assignés.",moduleMetricLabel:"Incidents",moduleInProgressLabel:"Incidents urgents",moduleActionLabel:"Ouvrir incidents",moduleOpenActionLabel:"Traiter urgences",moduleNotificationLabel:"incident(s)",defaultRoute:"/dashboard",navItems:[{path:"/dashboard",label:"Dashboard",icon:"fa-chart-line",activePaths:["/dashboard"]},{path:"/assigned",label:"Incidents",icon:"fa-triangle-exclamation",activePaths:["/assigned","/treatment"]}],canAccessPath(l){return["/dashboard","/assigned","/treatment"].includes(l)}}:{profile:a,technicianType:o,moduleKey:"mixed",moduleLabel:"FTTH",moduleListTitle:"FTTH",moduleHeroSubtitle:"Portefeuille terrain FTTH et raccordements assignés.",moduleMetricLabel:"Missions FTTH",moduleInProgressLabel:"FTTH en cours",moduleActionLabel:"Ouvrir FTTH",moduleOpenActionLabel:"Voir fiches",moduleNotificationLabel:"mission(s) FTTH",defaultRoute:"/dashboard",navItems:[{path:"/dashboard",label:"Dashboard",icon:"fa-chart-line",activePaths:["/dashboard"]},{path:"/assigned",label:"Incidents",icon:"fa-triangle-exclamation",activePaths:["/assigned","/treatment"]},{path:"/nearby",label:"Proximité",icon:"fa-location-crosshairs",activePaths:["/nearby"]},{path:"/ftth",label:"FTTH",icon:"fa-network-wired",activePaths:["/ftth","/ftth-report"]}],canAccessPath(){return!0}}}const Vi="insuite_mobile_token",Ns="insuite_mobile_installation_id",uo="insuite_mobile_trial_device_id",Wn="insuite_mobile_trial_started_at",Rs=336*60*60*1e3;function ho(n){const a=Number(n);return Number.isFinite(a)&&a>0?a:0}function gl(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`install_${Date.now()}_${Math.random().toString(36).slice(2,10)}`}function oa(){let n=localStorage.getItem(Ns)||"",a=ho(localStorage.getItem(Wn));return n||(n=gl(),localStorage.setItem(Ns,n),a=0),a||(a=Date.now(),localStorage.setItem(Wn,String(a))),{installationId:n,startedAt:a}}function mo(n){const a=String(n||"").trim();return a?(localStorage.setItem(uo,a),a):""}function fo(){return String(localStorage.getItem(uo)||"").trim()}function bl(n){const a=ho(n);return a?(localStorage.setItem(Wn,String(a)),a):0}function re(){const{installationId:n,startedAt:a}=oa(),o=fo(),l=a+Rs,c=Math.max(0,l-Date.now()),d=c<=0;return{installationId:n,deviceId:o,startedAt:a,expiresAt:l,remainingMs:c,expired:d,totalDurationMs:Rs}}function ra(){return re().expired}function li(){return ra()?(ai(),""):localStorage.getItem(Vi)||""}function yl(n){if(ra()){ai();return}const a=localStorage.getItem(Vi)||"";a&&a!==n&&Ui(),localStorage.setItem(Vi,n)}function ai(){localStorage.removeItem(Vi),Ui()}const wl="modulepreload",Ll=function(n){return"/"+n},zs={},Ji=function(a,o,l){let c=Promise.resolve();if(o&&o.length>0){let h=function(g){return Promise.all(g.map(w=>Promise.resolve(w).then(y=>({status:"fulfilled",value:y}),y=>({status:"rejected",reason:y}))))};document.getElementsByTagName("link");const f=document.querySelector("meta[property=csp-nonce]"),m=(f==null?void 0:f.nonce)||(f==null?void 0:f.getAttribute("nonce"));c=h(o.map(g=>{if(g=Ll(g),g in zs)return;zs[g]=!0;const w=g.endsWith(".css"),y=w?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${g}"]${y}`))return;const v=document.createElement("link");if(v.rel=w?"stylesheet":wl,w||(v.as="script"),v.crossOrigin="",v.href=g,m&&v.setAttribute("nonce",m),document.head.appendChild(v),w)return new Promise((_,x)=>{v.addEventListener("load",_),v.addEventListener("error",()=>x(new Error(`Unable to preload CSS for ${g}`)))})}))}function d(h){const f=new Event("vite:preloadError",{cancelable:!0});if(f.payload=h,window.dispatchEvent(f),!f.defaultPrevented)throw h}return c.then(h=>{for(const f of h||[])f.status==="rejected"&&d(f.reason);return a().catch(d)})};/*! Capacitor: https://capacitorjs.com/ - MIT License */const Sl=n=>{const a=new Map;a.set("web",{name:"web"});const o=n.CapacitorPlatforms||{currentPlatform:{name:"web"},platforms:a},l=(d,h)=>{o.platforms.set(d,h)},c=d=>{o.platforms.has(d)&&(o.currentPlatform=o.platforms.get(d))};return o.addPlatform=l,o.setPlatform=c,o},xl=n=>n.CapacitorPlatforms=Sl(n),po=xl(typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});po.addPlatform;po.setPlatform;var $e;(function(n){n.Unimplemented="UNIMPLEMENTED",n.Unavailable="UNAVAILABLE"})($e||($e={}));class Rn extends Error{constructor(a,o,l){super(a),this.message=a,this.code=o,this.data=l}}const Tl=n=>{var a,o;return n!=null&&n.androidBridge?"android":!((o=(a=n==null?void 0:n.webkit)===null||a===void 0?void 0:a.messageHandlers)===null||o===void 0)&&o.bridge?"ios":"web"},Pl=n=>{var a,o,l,c,d;const h=n.CapacitorCustomPlatform||null,f=n.Capacitor||{},m=f.Plugins=f.Plugins||{},g=n.CapacitorPlatforms,w=()=>h!==null?h.name:Tl(n),y=((a=g==null?void 0:g.currentPlatform)===null||a===void 0?void 0:a.getPlatform)||w,v=()=>y()!=="web",_=((o=g==null?void 0:g.currentPlatform)===null||o===void 0?void 0:o.isNativePlatform)||v,x=V=>{const E=K.get(V);return!!(E!=null&&E.platforms.has(y())||M(V))},T=((l=g==null?void 0:g.currentPlatform)===null||l===void 0?void 0:l.isPluginAvailable)||x,k=V=>{var E;return(E=f.PluginHeaders)===null||E===void 0?void 0:E.find(R=>R.name===V)},M=((c=g==null?void 0:g.currentPlatform)===null||c===void 0?void 0:c.getPluginHeader)||k,N=V=>n.console.error(V),H=(V,E,R)=>Promise.reject(`${R} does not have an implementation of "${E}".`),K=new Map,W=(V,E={})=>{const R=K.get(V);if(R)return console.warn(`Capacitor plugin "${V}" already registered. Cannot register plugins twice.`),R.proxy;const rt=y(),Q=M(V);let et;const Ht=async()=>(!et&&rt in E?et=typeof E[rt]=="function"?et=await E[rt]():et=E[rt]:h!==null&&!et&&"web"in E&&(et=typeof E.web=="function"?et=await E.web():et=E.web),et),ht=(I,j)=>{var at,st;if(Q){const it=Q==null?void 0:Q.methods.find(D=>j===D.name);if(it)return it.rtype==="promise"?D=>f.nativePromise(V,j.toString(),D):(D,F)=>f.nativeCallback(V,j.toString(),D,F);if(I)return(at=I[j])===null||at===void 0?void 0:at.bind(I)}else{if(I)return(st=I[j])===null||st===void 0?void 0:st.bind(I);throw new Rn(`"${V}" plugin is not implemented on ${rt}`,$e.Unimplemented)}},Be=I=>{let j;const at=(...st)=>{const it=Ht().then(D=>{const F=ht(D,I);if(F){const vt=F(...st);return j=vt==null?void 0:vt.remove,vt}else throw new Rn(`"${V}.${I}()" is not implemented on ${rt}`,$e.Unimplemented)});return I==="addListener"&&(it.remove=async()=>j()),it};return at.toString=()=>`${I.toString()}() { [capacitor code] }`,Object.defineProperty(at,"name",{value:I,writable:!1,configurable:!1}),at},pt=Be("addListener"),te=Be("removeListener"),z=(I,j)=>{const at=pt({eventName:I},j),st=async()=>{const D=await at;te({eventName:I,callbackId:D},j)},it=new Promise(D=>at.then(()=>D({remove:st})));return it.remove=async()=>{console.warn("Using addListener() without 'await' is deprecated."),await st()},it},ge=new Proxy({},{get(I,j){switch(j){case"$$typeof":return;case"toJSON":return()=>({});case"addListener":return Q?z:pt;case"removeListener":return te;default:return Be(j)}}});return m[V]=ge,K.set(V,{name:V,proxy:ge,platforms:new Set([...Object.keys(E),...Q?[rt]:[]])}),ge},tt=((d=g==null?void 0:g.currentPlatform)===null||d===void 0?void 0:d.registerPlugin)||W;return f.convertFileSrc||(f.convertFileSrc=V=>V),f.getPlatform=y,f.handleError=N,f.isNativePlatform=_,f.isPluginAvailable=T,f.pluginMethodNoop=H,f.registerPlugin=tt,f.Exception=Rn,f.DEBUG=!!f.DEBUG,f.isLoggingEnabled=!!f.isLoggingEnabled,f.platform=f.getPlatform(),f.isNative=f.isNativePlatform(),f},kl=n=>n.Capacitor=Pl(n),X=kl(typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{}),Qt=X.registerPlugin;X.Plugins;class _o{constructor(a){this.listeners={},this.retainedEventArguments={},this.windowListeners={},a&&(console.warn(`Capacitor WebPlugin "${a.name}" config object was deprecated in v3 and will be removed in v4.`),this.config=a)}addListener(a,o){let l=!1;this.listeners[a]||(this.listeners[a]=[],l=!0),this.listeners[a].push(o);const d=this.windowListeners[a];d&&!d.registered&&this.addWindowListener(d),l&&this.sendRetainedArgumentsForEvent(a);const h=async()=>this.removeListener(a,o);return Promise.resolve({remove:h})}async removeAllListeners(){this.listeners={};for(const a in this.windowListeners)this.removeWindowListener(this.windowListeners[a]);this.windowListeners={}}notifyListeners(a,o,l){const c=this.listeners[a];if(!c){if(l){let d=this.retainedEventArguments[a];d||(d=[]),d.push(o),this.retainedEventArguments[a]=d}return}c.forEach(d=>d(o))}hasListeners(a){return!!this.listeners[a].length}registerWindowListener(a,o){this.windowListeners[o]={registered:!1,windowEventName:a,pluginEventName:o,handler:l=>{this.notifyListeners(o,l)}}}unimplemented(a="not implemented"){return new X.Exception(a,$e.Unimplemented)}unavailable(a="not available"){return new X.Exception(a,$e.Unavailable)}async removeListener(a,o){const l=this.listeners[a];if(!l)return;const c=l.indexOf(o);this.listeners[a].splice(c,1),this.listeners[a].length||this.removeWindowListener(this.windowListeners[a])}addWindowListener(a){window.addEventListener(a.windowEventName,a.handler),a.registered=!0}removeWindowListener(a){a&&(window.removeEventListener(a.windowEventName,a.handler),a.registered=!1)}sendRetainedArgumentsForEvent(a){const o=this.retainedEventArguments[a];o&&(delete this.retainedEventArguments[a],o.forEach(l=>{this.notifyListeners(a,l)}))}}const Bs=n=>encodeURIComponent(n).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape),Ds=n=>n.replace(/(%[\dA-F]{2})+/gi,decodeURIComponent);class Al extends _o{async getCookies(){const a=document.cookie,o={};return a.split(";").forEach(l=>{if(l.length<=0)return;let[c,d]=l.replace(/=/,"CAP_COOKIE").split("CAP_COOKIE");c=Ds(c).trim(),d=Ds(d).trim(),o[c]=d}),o}async setCookie(a){try{const o=Bs(a.key),l=Bs(a.value),c=`; expires=${(a.expires||"").replace("expires=","")}`,d=(a.path||"/").replace("path=",""),h=a.url!=null&&a.url.length>0?`domain=${a.url}`:"";document.cookie=`${o}=${l||""}${c}; path=${d}; ${h};`}catch(o){return Promise.reject(o)}}async deleteCookie(a){try{document.cookie=`${a.key}=; Max-Age=0`}catch(o){return Promise.reject(o)}}async clearCookies(){try{const a=document.cookie.split(";")||[];for(const o of a)document.cookie=o.replace(/^ +/,"").replace(/=.*/,`=;expires=${new Date().toUTCString()};path=/`)}catch(a){return Promise.reject(a)}}async clearAllCookies(){try{await this.clearCookies()}catch(a){return Promise.reject(a)}}}Qt("CapacitorCookies",{web:()=>new Al});const Cl=async n=>new Promise((a,o)=>{const l=new FileReader;l.onload=()=>{const c=l.result;a(c.indexOf(",")>=0?c.split(",")[1]:c)},l.onerror=c=>o(c),l.readAsDataURL(n)}),Ml=(n={})=>{const a=Object.keys(n);return Object.keys(n).map(c=>c.toLocaleLowerCase()).reduce((c,d,h)=>(c[d]=n[a[h]],c),{})},El=(n,a=!0)=>n?Object.entries(n).reduce((l,c)=>{const[d,h]=c;let f,m;return Array.isArray(h)?(m="",h.forEach(g=>{f=a?encodeURIComponent(g):g,m+=`${d}=${f}&`}),m.slice(0,-1)):(f=a?encodeURIComponent(h):h,m=`${d}=${f}`),`${l}&${m}`},"").substr(1):null,Il=(n,a={})=>{const o=Object.assign({method:n.method||"GET",headers:n.headers},a),c=Ml(n.headers)["content-type"]||"";if(typeof n.data=="string")o.body=n.data;else if(c.includes("application/x-www-form-urlencoded")){const d=new URLSearchParams;for(const[h,f]of Object.entries(n.data||{}))d.set(h,f);o.body=d.toString()}else if(c.includes("multipart/form-data")||n.data instanceof FormData){const d=new FormData;if(n.data instanceof FormData)n.data.forEach((f,m)=>{d.append(m,f)});else for(const f of Object.keys(n.data))d.append(f,n.data[f]);o.body=d;const h=new Headers(o.headers);h.delete("content-type"),o.headers=h}else(c.includes("application/json")||typeof n.data=="object")&&(o.body=JSON.stringify(n.data));return o};class Ol extends _o{async request(a){const o=Il(a,a.webFetchExtra),l=El(a.params,a.shouldEncodeUrlParams),c=l?`${a.url}?${l}`:a.url,d=await fetch(c,o),h=d.headers.get("content-type")||"";let{responseType:f="text"}=d.ok?a:{};h.includes("application/json")&&(f="json");let m,g;switch(f){case"arraybuffer":case"blob":g=await d.blob(),m=await Cl(g);break;case"json":m=await d.json();break;case"document":case"text":default:m=await d.text()}const w={};return d.headers.forEach((y,v)=>{w[v]=y}),{data:m,headers:w,status:d.status,url:d.url}}async get(a){return this.request(Object.assign(Object.assign({},a),{method:"GET"}))}async post(a){return this.request(Object.assign(Object.assign({},a),{method:"POST"}))}async put(a){return this.request(Object.assign(Object.assign({},a),{method:"PUT"}))}async patch(a){return this.request(Object.assign(Object.assign({},a),{method:"PATCH"}))}async delete(a){return this.request(Object.assign(Object.assign({},a),{method:"DELETE"}))}}const $l=Qt("CapacitorHttp",{web:()=>new Ol}),Ee=Qt("App",{web:()=>Ji(()=>import("./web-Cau1EXQn.js"),[]).then(n=>new n.AppWeb)});var qs;(function(n){n.Dark="DARK",n.Light="LIGHT",n.Default="DEFAULT"})(qs||(qs={}));var Hs;(function(n){n.Body="body",n.Ionic="ionic",n.Native="native",n.None="none"})(Hs||(Hs={}));const Fs=Qt("Keyboard"),vo="insuite_mobile_api_base",go="insuite_mobile_cfg",Nl="https://maintenance-back.insuite-ci.com/public".replace(/\/$/,""),Bi=8e3;function bo(n){return String(n||"").trim().replace(/\/$/,"")}function Yi(){return bo(localStorage.getItem(vo)||Nl)}function Rl(n){const a=bo(n);return a?(localStorage.setItem(vo,a),a):""}function yo(n){const a=Yi();return!a||n.startsWith("http")?n:a+n}function zl(){if(typeof(X==null?void 0:X.isNativePlatform)=="function")return X.isNativePlatform();const n=typeof(X==null?void 0:X.getPlatform)=="function"?X.getPlatform():"web";return n==="android"||n==="ios"}function Bl(n,a){const l=Object.entries(a||{}).find(([d])=>String(d).toLowerCase()==="content-type"),c=String((l==null?void 0:l[1])||"");if(typeof n=="string"&&c.includes("application/json"))try{return JSON.parse(n)}catch{return null}return n}async function Dl(n,a,o,l){const c=await Hl($l.request({url:yo(a),method:n,headers:l,data:o,connectTimeout:Bi,readTimeout:Bi}),Bi),d=Bl(c.data,c.headers);if(c.status<200||c.status>=300){const h=new Error("http_error");throw h.status=c.status,h.data=d,h}return d}async function Xi(n,a,o,l={}){const c={...l},d=li();if(d&&(c.Authorization=`Bearer ${d}`),zl()&&!(o instanceof FormData)){let g=o;return o instanceof URLSearchParams&&(g=o.toString()),Dl(n,a,g,c)}const f=typeof AbortController<"u"?new AbortController:null,m=f?window.setTimeout(()=>f.abort(),Bi):null;try{const g=await fetch(yo(a),{method:n,headers:c,body:o,signal:f==null?void 0:f.signal}),v=(g.headers.get("content-type")||"").includes("application/json")?await g.json().catch(()=>null):await g.text().catch(()=>null);if(!g.ok){const _=new Error("http_error");throw _.status=g.status,_.data=v,_}return v}catch(g){if((g==null?void 0:g.name)==="AbortError"){const w=new Error("timeout_error");throw w.code="timeout",w}throw g}finally{m&&window.clearTimeout(m)}}async function xt(n){return Xi("GET",n,void 0,{Accept:"application/json"})}async function wo(n,a){return Xi("POST",n,a,{Accept:"application/json"})}async function qt(n,a){const o=new URLSearchParams;return Object.entries(a||{}).forEach(([l,c])=>o.set(l,String(c??""))),Xi("POST",n,o,{Accept:"application/json","Content-Type":"application/x-www-form-urlencoded;charset=UTF-8"})}function Re(){try{return JSON.parse(localStorage.getItem(go)||"null")||{}}catch{return{}}}async function ql(){try{const n=await Xi("GET","/api/mobile/config",void 0,{Accept:"application/json"});if(!(n!=null&&n.ok)||!n.config)return;const a=n.config;a.api_base&&Rl(a.api_base),localStorage.setItem(go,JSON.stringify({app_name:a.app_name||"",logo_url:a.logo_url||"",splash_url:a.splash_url||"",login_bg_url:a.login_bg_url||"",icon_url:a.icon_url||""}))}catch{}}function Hl(n,a){let o=null;return new Promise((l,c)=>{o=window.setTimeout(()=>{const d=new Error("timeout_error");d.code="timeout",c(d)},a),n.then(l).catch(c).finally(()=>{o&&window.clearTimeout(o)})})}const Lo="insuite_mobile_notifications",Zs="insuite_mobile_notifications_remote_init",So="insuite:notifications-updated";function ze(){try{const n=localStorage.getItem(Lo),a=n?JSON.parse(n):[];return Array.isArray(a)?a:[]}catch{return[]}}function Fl(){return ze().filter(n=>!n.read).length}function la(){const n=ze().map(a=>({...a,read:!0}));return Qi(n,{silent:!0}),n}async function ca(){const n=la();try{await qt("/api/mobile/notifications/read-all",{})}catch{return n}return n}function ua({incidents:n=[],tickets:a=[]}={}){const o=ze(),l=o.filter(f=>f.source!=="local"),c=new Map(o.filter(f=>f.source==="local").map(f=>[f.id,!!f.read])),d=Ul({incidents:n,tickets:a}).map(f=>({...f,source:"local",read:c.get(f.id)??!1})),h=da([...l,...d]);return Qi(h,{silent:!0}),h}async function Zl({playSound:n=!1}={}){const a=ze(),o=a.filter(g=>g.source==="local"),l=new Set(a.filter(g=>g.source==="server"&&!g.read).map(g=>g.id)),c=await xt("/api/mobile/notifications"),d=Array.isArray(c==null?void 0:c.notifications)?c.notifications.map(g=>Vl(g)):[],f=localStorage.getItem(Zs)==="1"&&d.some(g=>!g.read&&!l.has(g.id)),m=da([...d,...o]);return Qi(m,{playSound:n&&f}),localStorage.setItem(Zs,"1"),m}function jl(n,{playSound:a=!0}={}){const o=ze(),l=o.filter(m=>m.source!=="local"),c=o.filter(m=>m.source==="local"),d={id:(n==null?void 0:n.id)||`local-${Date.now()}`,source:"local",title:n==null?void 0:n.title,body:(n==null?void 0:n.body)||"",route:n==null?void 0:n.route,icon:n==null?void 0:n.icon,tone:n==null?void 0:n.tone,read:!1,timestamp:(n==null?void 0:n.timestamp)||new Date().toISOString()},h=c.filter(m=>m.id!==d.id),f=da([d,...h,...l]);return Qi(f,{playSound:a}),d}function Ul({incidents:n,tickets:a}){const o=sa(Ki()),l=[],c=n.filter(h=>String(h.priority||"").toLowerCase()==="urgent"),d=a.filter(h=>{const f=String(h.status||"").toLowerCase();return f&&f!=="traité"&&f!=="validé"&&f!=="clôturé"});if((o.moduleKey==="backbones"||o.moduleKey==="mixed")&&l.push({id:`incidents-total-${n.length}`,title:n.length?`${n.length} incident(s) assigné(s)`:"Aucun incident assigné",body:n.length?"Consultez le portefeuille incidents pour prioriser le traitement terrain.":"Aucun ticket incident en attente pour le moment.",route:"/assigned",icon:"fa-triangle-exclamation",tone:n.length?"warning":"neutral",timestamp:new Date().toISOString()}),(o.moduleKey==="backbones"||o.moduleKey==="mixed")&&c.length&&l.push({id:`incidents-urgent-${c.length}`,title:`${c.length} incident(s) urgent(s) à traiter`,body:"Des interventions marquées urgentes nécessitent une prise en charge rapide.",route:"/assigned",icon:"fa-bolt",tone:"danger",timestamp:new Date().toISOString()}),o.moduleKey!=="backbones"){const h=js(o,a.length);l.push({id:`ftth-total-${a.length}`,title:a.length?`${a.length} ${h} assignée(s)`:`Aucune ${h} assignée`,body:a.length?`Le portefeuille ${o.moduleLabel} contient des fiches terrain prêtes à être ouvertes.`:`Aucune intervention ${o.moduleLabel.toLowerCase()} en attente actuellement.`,route:"/ftth",icon:"fa-network-wired",tone:a.length?"info":"neutral",timestamp:new Date().toISOString()})}if(o.moduleKey!=="backbones"&&d.length){const h=js(o,d.length);l.push({id:`ftth-open-${d.length}`,title:`${d.length} ${h} en cours`,body:"Pensez à finaliser ou mettre à jour les fiches terrain en attente.",route:"/ftth",icon:"fa-file-waveform",tone:"primary",timestamp:new Date().toISOString()})}return l.push({id:"dashboard-entry",title:"Dashboard mobile disponible",body:"Le tableau de bord centralise maintenant vos compteurs, raccourcis et alertes in-app.",route:"/dashboard",icon:"fa-chart-line",tone:"success",timestamp:new Date().toISOString()}),l.slice(0,6)}function Vl(n){return{id:`server-${Number((n==null?void 0:n.id)||0)}`,remoteId:Number((n==null?void 0:n.id)||0),source:"server",title:(n==null?void 0:n.title)||"Notification",body:(n==null?void 0:n.body)||"",route:Wl((n==null?void 0:n.url)||""),url:(n==null?void 0:n.url)||"",icon:Gl(n),tone:Kl(n),read:Number((n==null?void 0:n.is_read)||0)===1,timestamp:(n==null?void 0:n.created_at)||new Date().toISOString()}}function Wl(n){const a=String(n||"");return a?a.includes("/raccordement-clients")||a.includes("/maintenance-ftth")?"/ftth":a.includes("/incidents/treatment")||a.includes("/incidents")?"/assigned":(a.includes("/notifications")||a.includes("/dashboard"),"/dashboard"):"/dashboard"}function Gl(n){const a=`${(n==null?void 0:n.title)||""} ${(n==null?void 0:n.body)||""}`.toLowerCase();return a.includes("urgent")||a.includes("incident")?"fa-triangle-exclamation":a.includes("raccordement")||a.includes("ftth")||a.includes("maintenance")?"fa-network-wired":a.includes("valid")?"fa-check-double":a.includes("rejet")?"fa-times-circle":"fa-bell"}function Kl(n){const a=`${(n==null?void 0:n.title)||""} ${(n==null?void 0:n.body)||""}`.toLowerCase();return a.includes("urgent")||a.includes("rejet")?"danger":a.includes("assign")||a.includes("soumis")?"warning":a.includes("valid")?"success":a.includes("raccordement")||a.includes("ftth")?"info":"neutral"}function da(n){return[...n].sort((a,o)=>{const l=Date.parse((a==null?void 0:a.timestamp)||"")||0;return(Date.parse((o==null?void 0:o.timestamp)||"")||0)-l})}let zn=null;function xo(){const n=window.AudioContext||window.webkitAudioContext;return n?(zn||(zn=new n),zn):null}function Jl(){const n=xo();(n==null?void 0:n.state)==="suspended"&&n.resume().catch(()=>{})}["click","touchstart","keydown"].forEach(n=>{window.addEventListener(n,Jl,{passive:!0})});function Yl(){const n=xo();if(!n)return;const a=n.currentTime,o=n.createOscillator(),l=n.createGain();o.type="sine",o.frequency.setValueAtTime(880,a),o.frequency.exponentialRampToValueAtTime(660,a+.18),l.gain.setValueAtTime(1e-4,a),l.gain.exponentialRampToValueAtTime(.08,a+.02),l.gain.exponentialRampToValueAtTime(1e-4,a+.22),o.connect(l),l.connect(n.destination),o.start(a),o.stop(a+.24)}function Qi(n,{silent:a=!1,playSound:o=!1}={}){localStorage.setItem(Lo,JSON.stringify(n)),!a&&o&&Yl(),window.dispatchEvent(new CustomEvent(So,{detail:n}))}function js(n,a){return n.moduleKey==="raccordement"?a>1?"raccordements":"raccordement":a>1?"missions FTTH":"mission FTTH"}const ci=X.isNativePlatform()?Qt("KioskSettings"):null;function ha(){if(!ci)throw new Error("settings_unavailable")}function Xl(){return!!ci}async function Ql(){return ha(),ci.openWifiSettings()}async function tc(){return ha(),ci.openNetworkSettings()}async function ec(){return ha(),ci.openDeviceSettings()}async function ic(n,{experience:a}={}){const o=a||{moduleKey:"mixed",moduleLabel:"FTTH",moduleMetricLabel:"Missions FTTH",moduleInProgressLabel:"FTTH en cours",moduleActionLabel:"Ouvrir FTTH",moduleOpenActionLabel:"Voir fiches",navItems:[]};n.innerHTML=`
tableau de bord
Vue d'ensemble terrain

Retrouvez vos volumes de tickets, vos priorités et les accès rapides juste après la connexion.

Raccourcis
Accès direct aux écrans opérationnels
${nc(o)}
${ac()}
Alertes prioritaires
Éléments qui demandent une attention rapide
Dernières assignations
Aperçu des tickets disponibles sans quitter le dashboard
`;const l=n.querySelector("#dashboardAlert"),c=n.querySelector("#dashboardHeroStats"),d=n.querySelector("#dashboardMetrics"),h=n.querySelector("#dashboardPriorityList"),f=n.querySelector("#dashboardRecentList"),m=Array.from(n.querySelectorAll("[data-kiosk-settings]"));for(const w of m)w.addEventListener("click",async()=>{const y=String(w.dataset.kioskSettings||""),_={wifi:Ql,network:tc,device:ec}[y];if(_)try{await _()}catch{l.innerHTML='
Impossible d’ouvrir les paramètres de la tablette depuis ce terminal.
'}});async function g(){var tt,V;l.innerHTML="",c.innerHTML='
ChargementSynchronisation…
',d.innerHTML='
Chargement du tableau de bord…
',h.innerHTML='
Analyse des priorités…
',f.innerHTML='
Chargement des assignations…
';const w=o.moduleKey==="backbones"||o.moduleKey==="mixed",y=o.moduleKey!=="backbones",[v,_]=await Promise.allSettled([w?xt("/api/mobile/incidents/assigned"):Promise.resolve({ok:!0,incidents:[]}),y?xt("/api/mobile/ftth/assigned"):Promise.resolve({ok:!0,tickets:[]})]),x=v.status==="fulfilled"?((tt=v.value)==null?void 0:tt.incidents)||[]:[],T=_.status==="fulfilled"?((V=_.value)==null?void 0:V.tickets)||[]:[],k=x.filter(E=>String(E.priority||"").toLowerCase()==="urgent").length,M=T.filter(E=>{const R=String(E.status||"").toLowerCase();return R&&R!=="traité"&&R!=="validé"&&R!=="clôturé"}).length;ua({incidents:x,tickets:T}),c.innerHTML=sc(o,x.length,T.length,k,M),d.innerHTML=oc(o,x.length,T.length,k,M);const N=rc(o,x.length,T.length,k,M);h.innerHTML=N.map(E=>`
${oe(E)}
`).join("");const H=x.slice(0,2).map(E=>({title:E.ticket_id||`INC-${E.id}`,subtitle:E.title||"Incident terrain",meta:E.status_label||E.priority||"À traiter",href:`#/treatment?id=${Number(E.id||0)}`,icon:"fa-triangle-exclamation"})),K=T.slice(0,2).map(E=>({title:E.client_name||E.ref_code||`FTTH-${E.id}`,subtitle:E.nature_intervention||E.client_address||`Mission ${o.moduleLabel}`,meta:E.priority||E.status||"À ouvrir",href:`#/ftth-report?id=${Number(E.id||0)}`,icon:"fa-network-wired"})),W=o.moduleKey==="backbones"?H:o.moduleKey==="mixed"?[...H,...K]:K;f.innerHTML=W.length?W.map(E=>` ${oe(E.title)} ${oe(E.subtitle)} ${oe(E.meta)} `).join(""):'
Aucune assignation récente à afficher.
',(w&&v.status==="rejected"||y&&_.status==="rejected")&&(l.innerHTML='
Certaines données n’ont pas pu être synchronisées. Le dashboard affiche les éléments disponibles.
')}n.querySelector("#btnRefreshDashboard").addEventListener("click",g),await g()}function Ci(n,a,o,l,c,d){return`
${oe(n)}
${a}
${oe(d)}
`}function nc(n){return n.navItems.filter(o=>o.path!=="/dashboard").map((o,l)=>`${oe(o.label)}`).join("")}function ac(){return Xl()?`
Accès tablette autorisé en mode borne
`:""}function sc(n,a,o,l,c){return n.moduleKey==="backbones"?`
Incidents ${a}
Urgents ${l}
`:`
${oe(n.moduleMetricLabel)} ${o}
En cours ${c}
`}function oc(n,a,o,l,c){return n.moduleKey==="backbones"?` ${Ci("Incidents assignés",a,"fa-triangle-exclamation","text-bg-warning","#/assigned","Ouvrir incidents")} ${Ci("Incidents urgents",l,"fa-bolt","text-bg-danger","#/assigned","Traiter urgences")} `:` ${Ci(n.moduleMetricLabel,o,"fa-network-wired","text-bg-info","#/ftth",n.moduleActionLabel)} ${Ci(n.moduleInProgressLabel,c,"fa-file-waveform","text-bg-primary","#/ftth",n.moduleOpenActionLabel)} `}function rc(n,a,o,l,c){return n.moduleKey==="backbones"?[l?`${l} incident(s) urgent(s) nécessitent une prise en charge.`:"",a?"":"Aucun incident en attente pour le moment."].filter(Boolean):[c?`${c} mission(s) ${n.moduleLabel.toLowerCase()} restent à compléter.`:"",o?"":`Aucune mission ${n.moduleLabel.toLowerCase()} en attente pour le moment.`].filter(Boolean)}function oe(n){return String(n??"").replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}const Us=Qt("Device",{web:()=>Ji(()=>import("./web-BpmyF2Vn.js"),[]).then(n=>new n.DeviceWeb)});function Bn(){return typeof(X==null?void 0:X.isNativePlatform)=="function"&&X.isNativePlatform()}async function ma(){oa();const n=fo();if(n)return{deviceId:n,platform:Bn()?"android":"web",model:"",fingerprint:""};let a="",o=Bn()?"android":"web",l="",c="";if(Bn())try{const[d,h]=await Promise.all([Us.getId(),Us.getInfo()]);a=String((d==null?void 0:d.identifier)||"").trim(),o=String((h==null?void 0:h.platform)||o).trim()||o,l=String((h==null?void 0:h.model)||"").trim(),c=[o,String((h==null?void 0:h.manufacturer)||"").trim(),l,String((h==null?void 0:h.operatingSystem)||"").trim(),String((h==null?void 0:h.osVersion)||"").trim(),String((h==null?void 0:h.name)||"").trim()].filter(Boolean).join("||").toLowerCase()}catch{a=""}return a||(a=re().installationId),mo(a),{deviceId:a,platform:o,model:l,fingerprint:c}}async function lc(){var o;if(!Yi())return re();const a=await ma();if(!a.deviceId)return re();try{const l=await qt("/api/mobile/trial/state",{device_id:a.deviceId,device_fingerprint:a.fingerprint,platform:a.platform,model:a.model});l!=null&&l.ok&&((o=l==null?void 0:l.trial)!=null&&o.started_at_ms)&&(mo(a.deviceId),bl(l.trial.started_at_ms))}catch{}return re()}const fa="insuite_mobile_activation_state";function pe(){try{const n=JSON.parse(localStorage.getItem(fa)||"null")||{};return{activated:n.activated===!0,email:String(n.email||"").trim(),userName:String(n.userName||"").trim(),activatedAt:String(n.activatedAt||"").trim()}}catch{return{activated:!1,email:"",userName:"",activatedAt:""}}}function To(n={}){const a={activated:n.activated===!0,email:String(n.email||"").trim(),userName:String(n.userName||"").trim(),activatedAt:String(n.activatedAt||"").trim()};return localStorage.setItem(fa,JSON.stringify(a)),a}function cc(){localStorage.removeItem(fa)}async function uc(){var o;if(!Yi())return pe();const a=await ma();if(!a.deviceId&&!a.fingerprint)return pe();try{const l=await qt("/api/mobile/activation/status",{device_id:a.deviceId,device_fingerprint:a.fingerprint,platform:a.platform,model:a.model});if(l!=null&&l.ok&&((o=l==null?void 0:l.activation)!=null&&o.activated))return To({activated:!0,email:l.activation.email||"",userName:l.activation.user_name||"",activatedAt:l.activation.activated_at||""});cc()}catch{return pe()}return pe()}async function dc({email:n,code:a}){var c;const o=await ma(),l=await qt("/api/mobile/activate",{email:n,code:a,device_id:o.deviceId,device_fingerprint:o.fingerprint,platform:o.platform,model:o.model});return l!=null&&l.ok&&((c=l==null?void 0:l.activation)!=null&&c.activated)?To({activated:!0,email:l.activation.email||n,userName:l.activation.user_name||"",activatedAt:l.activation.activated_at||""}):pe()}async function hc(n,a){const o=Re(),l=o.logo_url||"/insuite-logo.svg",c=o.app_name||"Insuite Technicien",d=pe(),h=o.login_bg_url?`style="background-image:url('${Jt(o.login_bg_url)}');background-size:cover;background-position:center"`:"";n.innerHTML=`
Activation requise

Activer l’accès mobile

Saisissez l’adresse email autorisée et le code reçu par email avant la première authentification.

${d.activated&&d.email?`Appareil déjà associé à ${Jt(d.email)}.`:"Le code est généré depuis le module Licences mobiles dans le back-office."}
`;const f=n.querySelector("#activationErrBox"),m=n.querySelector("#activationForm");m.addEventListener("submit",async g=>{g.preventDefault(),f.style.display="none";const w=new FormData(m),y=String(w.get("email")||"").trim(),v=String(w.get("code")||"").trim();if(!y||!v){f.textContent="Renseignez l’adresse email et le code d’activation.",f.style.display="block";return}try{const _=await dc({email:y,code:v});if(!_.activated){f.textContent="Activation impossible.",f.style.display="block";return}mc(n,_,a)}catch(_){const x=(()=>{var T;switch((T=_==null?void 0:_.data)==null?void 0:T.error){case"license_disabled":return"Cette licence mobile est suspendue.";case"code_expired":return"Le code d’activation a expiré. Demandez-en un nouveau.";case"code_invalid":return"Le code d’activation est invalide.";case"user_not_found":return"Aucun utilisateur actif ne correspond à cette adresse email.";default:return _!=null&&_.status?"Activation refusée par le serveur.":"Connexion au serveur impossible. Vérifiez le réseau puis réessayez."}})();f.textContent=x,f.style.display="block"}})}function mc(n,a,o){const l=Re(),c=l.logo_url||"/insuite-logo.svg",d=l.app_name||"Insuite Technicien",h=a.userName||a.email||"Compte mobile";n.innerHTML=`
Activation validée

Compte mobile activé

L’appareil est maintenant autorisé pour ${Jt(h)}. Vous pouvez accéder à votre espace personnel.

Compte ${Jt(h)}
Activation ${Jt(fc(a.activatedAt))}
`;const f=n.querySelector("#btnActivationContinue");f==null||f.addEventListener("click",()=>o(a)),window.setTimeout(()=>f==null?void 0:f.focus(),220)}function fc(n){if(!n)return"À l’instant";const a=new Date(n);return Number.isNaN(a.getTime())?"À l’instant":a.toLocaleString("fr-FR")}function Jt(n){return String(n??"").replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}async function Po(n,a){typeof n.__loginCountdownCleanup=="function"&&n.__loginCountdownCleanup();const o=Re(),l=o.logo_url||"/insuite-logo.svg",c=o.app_name||"Insuite Technicien",h=re().expired,f=o.login_bg_url?`style="background-image:url('${Mi(o.login_bg_url)}');background-size:cover;background-position:center"`:"";n.innerHTML=`
Android ready

${Mi(c)}

Connexion sécurisée à la fiche terrain mobile, pensée pour le travail terrain et la validation rapide.

Accès limité ${h?"Délai dépassé":"Compte à rebours 2 semaines"}
-- j -- h -- min -- s
`;const m=n.querySelector("#errBox"),g=n.querySelector("#okBox"),w=n.querySelector("#loginForm"),y=n.querySelector("#trialTimer"),v=n.querySelector("#trialMeta"),_=n.querySelector("#trialStateLabel"),x=n.querySelector("#trialProgressBar"),T=()=>{const M=re(),N=M.totalDurationMs||1,H=Math.min(1,Math.max(0,(N-M.remainingMs)/N));if(x&&(x.style.width=`${Math.round((1-H)*100)}%`),M.expired)return _.textContent="Délai dépassé",y.textContent="00 j 00 h 00 min 00 s",v.textContent="La période de 14 jours est terminée. La connexion est désormais bloquée.",!0;const K=Math.floor(M.remainingMs/1e3),W=Math.floor(K/86400),tt=Math.floor(K%86400/3600),V=Math.floor(K%3600/60),E=K%60,R=(rt,Q)=>`${String(rt).padStart(2,"0")} ${Q}`;return _.textContent="Compte à rebours 2 semaines",y.textContent=[R(W,"j"),R(tt,"h"),R(V,"min"),R(E,"s")].join(" "),v.textContent=`Expiration prévue le ${new Date(M.expiresAt).toLocaleString("fr-FR")}.`,!1};let k=window.setInterval(()=>{T()&&(window.clearInterval(k),location.hash="#/login",Po(n,a))},1e3);n.__loginCountdownCleanup=()=>{window.clearInterval(k)},T(),h&&(m.textContent="La période autorisée de 14 jours est expirée. La connexion est bloquée.",m.style.display="block"),w.addEventListener("submit",async M=>{var tt,V,E;if(M.preventDefault(),m.style.display="none",g.style.display="none",re().expired){m.textContent="La période autorisée de 14 jours est expirée. La connexion est bloquée.",m.style.display="block",T();return}const H=new FormData(w),K=String(H.get("email")||"").trim(),W=String(H.get("password")||"");try{const R=await qt("/api/mobile/login",{email:K,password:W});if(!(R!=null&&R.ok)||!(R!=null&&R.token)){m.textContent="Connexion impossible.",m.style.display="block";return}g.textContent="Connexion établie.",g.style.display="block",(tt=n.__loginCountdownCleanup)==null||tt.call(n),a(R.token)}catch(R){const rt=((V=R==null?void 0:R.data)==null?void 0:V.error)==="requires_2fa"?"2FA requis (non supporté dans l’app pour le moment).":((E=R==null?void 0:R.data)==null?void 0:E.error)==="needs_license"?"L'utilisateur a besoin d'une licence pour l'utilisation.":R!=null&&R.status?"Identifiants invalides ou accès refusé.":"Connexion au serveur impossible. Vérifiez le réseau de la tablette.";m.textContent=rt,m.style.display="block"}})}function Mi(n){return String(n??"").replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}const ko=Qt("AppLauncher",{web:()=>Ji(()=>import("./web-JiZtHT5F.js"),[]).then(n=>new n.AppLauncherWeb)}),pc=Qt("Browser",{web:()=>Ji(()=>import("./web-CjYA_maC.js"),[]).then(n=>new n.BrowserWeb)});function _c(n){return n&&n.__esModule&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n}var ti={exports:{}};/* @preserve * Leaflet 1.9.4, a JS library for interactive maps. https://leafletjs.com * (c) 2010-2023 Vladimir Agafonkin, (c) 2010-2011 CloudMade */var vc=ti.exports,Vs;function gc(){return Vs||(Vs=1,(function(n,a){(function(o,l){l(a)})(vc,(function(o){var l="1.9.4";function c(t){var e,i,s,r;for(i=1,s=arguments.length;i"u"||!L||!L.Mixin)){t=H(t)?t:[t];for(var e=0;e0?Math.floor(t):Math.ceil(t)};z.prototype={clone:function(){return new z(this.x,this.y)},add:function(t){return this.clone()._add(I(t))},_add:function(t){return this.x+=t.x,this.y+=t.y,this},subtract:function(t){return this.clone()._subtract(I(t))},_subtract:function(t){return this.x-=t.x,this.y-=t.y,this},divideBy:function(t){return this.clone()._divideBy(t)},_divideBy:function(t){return this.x/=t,this.y/=t,this},multiplyBy:function(t){return this.clone()._multiplyBy(t)},_multiplyBy:function(t){return this.x*=t,this.y*=t,this},scaleBy:function(t){return new z(this.x*t.x,this.y*t.y)},unscaleBy:function(t){return new z(this.x/t.x,this.y/t.y)},round:function(){return this.clone()._round()},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},floor:function(){return this.clone()._floor()},_floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},ceil:function(){return this.clone()._ceil()},_ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this},trunc:function(){return this.clone()._trunc()},_trunc:function(){return this.x=ge(this.x),this.y=ge(this.y),this},distanceTo:function(t){t=I(t);var e=t.x-this.x,i=t.y-this.y;return Math.sqrt(e*e+i*i)},equals:function(t){return t=I(t),t.x===this.x&&t.y===this.y},contains:function(t){return t=I(t),Math.abs(t.x)<=Math.abs(this.x)&&Math.abs(t.y)<=Math.abs(this.y)},toString:function(){return"Point("+v(this.x)+", "+v(this.y)+")"}};function I(t,e,i){return t instanceof z?t:H(t)?new z(t[0],t[1]):t==null?t:typeof t=="object"&&"x"in t&&"y"in t?new z(t.x,t.y):new z(t,e,i)}function j(t,e){if(t)for(var i=e?[t,e]:t,s=0,r=i.length;s=this.min.x&&i.x<=this.max.x&&e.y>=this.min.y&&i.y<=this.max.y},intersects:function(t){t=at(t);var e=this.min,i=this.max,s=t.min,r=t.max,u=r.x>=e.x&&s.x<=i.x,p=r.y>=e.y&&s.y<=i.y;return u&&p},overlaps:function(t){t=at(t);var e=this.min,i=this.max,s=t.min,r=t.max,u=r.x>e.x&&s.xe.y&&s.y=e.lat&&r.lat<=i.lat&&s.lng>=e.lng&&r.lng<=i.lng},intersects:function(t){t=it(t);var e=this._southWest,i=this._northEast,s=t.getSouthWest(),r=t.getNorthEast(),u=r.lat>=e.lat&&s.lat<=i.lat,p=r.lng>=e.lng&&s.lng<=i.lng;return u&&p},overlaps:function(t){t=it(t);var e=this._southWest,i=this._northEast,s=t.getSouthWest(),r=t.getNorthEast(),u=r.lat>e.lat&&s.late.lng&&s.lng1,sr=(function(){var t=!1;try{var e=Object.defineProperty({},"passive",{get:function(){t=!0}});window.addEventListener("testPassiveEventSupport",y,e),window.removeEventListener("testPassiveEventSupport",y,e)}catch{}return t})(),or=(function(){return!!document.createElement("canvas").getContext})(),cn=!!(document.createElementNS&&Pa("svg").createSVGRect),rr=!!cn&&(function(){var t=document.createElement("div");return t.innerHTML="",(t.firstChild&&t.firstChild.namespaceURI)==="http://www.w3.org/2000/svg"})(),lr=!cn&&(function(){try{var t=document.createElement("div");t.innerHTML='';var e=t.firstChild;return e.style.behavior="url(#default#VML)",e&&typeof e.adj=="object"}catch{return!1}})(),cr=navigator.platform.indexOf("Mac")===0,ur=navigator.platform.indexOf("Linux")===0;function Ot(t){return navigator.userAgent.toLowerCase().indexOf(t)>=0}var O={ie:ui,ielt9:Wo,edge:Aa,webkit:on,android:Ca,android23:Ma,androidStock:Ko,opera:rn,chrome:Ea,gecko:Ia,safari:Jo,phantom:Oa,opera12:$a,win:Yo,ie3d:Na,webkit3d:ln,gecko3d:Ra,any3d:Xo,mobile:qe,mobileWebkit:Qo,mobileWebkit3d:tr,msPointer:za,pointer:Ba,touch:er,touchNative:Da,mobileOpera:ir,mobileGecko:nr,retina:ar,passiveEvents:sr,canvas:or,svg:cn,vml:lr,inlineSvg:rr,mac:cr,linux:ur},qa=O.msPointer?"MSPointerDown":"pointerdown",Ha=O.msPointer?"MSPointerMove":"pointermove",Fa=O.msPointer?"MSPointerUp":"pointerup",Za=O.msPointer?"MSPointerCancel":"pointercancel",un={touchstart:qa,touchmove:Ha,touchend:Fa,touchcancel:Za},ja={touchstart:_r,touchmove:di,touchend:di,touchcancel:di},be={},Ua=!1;function dr(t,e,i){return e==="touchstart"&&pr(),ja[e]?(i=ja[e].bind(this,i),t.addEventListener(un[e],i,!1),i):(console.warn("wrong event specified:",e),y)}function hr(t,e,i){if(!un[e]){console.warn("wrong event specified:",e);return}t.removeEventListener(un[e],i,!1)}function mr(t){be[t.pointerId]=t}function fr(t){be[t.pointerId]&&(be[t.pointerId]=t)}function Va(t){delete be[t.pointerId]}function pr(){Ua||(document.addEventListener(qa,mr,!0),document.addEventListener(Ha,fr,!0),document.addEventListener(Fa,Va,!0),document.addEventListener(Za,Va,!0),Ua=!0)}function di(t,e){if(e.pointerType!==(e.MSPOINTER_TYPE_MOUSE||"mouse")){e.touches=[];for(var i in be)e.touches.push(be[i]);e.changedTouches=[e],t(e)}}function _r(t,e){e.MSPOINTER_TYPE_TOUCH&&e.pointerType===e.MSPOINTER_TYPE_TOUCH&&ft(e),di(t,e)}function vr(t){var e={},i,s;for(s in t)i=t[s],e[s]=i&&i.bind?i.bind(t):i;return t=e,e.type="dblclick",e.detail=2,e.isTrusted=!1,e._simulated=!0,e}var gr=200;function br(t,e){t.addEventListener("dblclick",e);var i=0,s;function r(u){if(u.detail!==1){s=u.detail;return}if(!(u.pointerType==="mouse"||u.sourceCapabilities&&!u.sourceCapabilities.firesTouchEvents)){var p=Ya(u);if(!(p.some(function(S){return S instanceof HTMLLabelElement&&S.attributes.for})&&!p.some(function(S){return S instanceof HTMLInputElement||S instanceof HTMLSelectElement}))){var b=Date.now();b-i<=gr?(s++,s===2&&e(vr(u))):s=1,i=b}}}return t.addEventListener("click",r),{dblclick:e,simDblclick:r}}function yr(t,e){t.removeEventListener("dblclick",e.dblclick),t.removeEventListener("click",e.simDblclick)}var dn=fi(["transform","webkitTransform","OTransform","MozTransform","msTransform"]),He=fi(["webkitTransition","transition","OTransition","MozTransition","msTransition"]),Wa=He==="webkitTransition"||He==="OTransition"?He+"End":"transitionend";function Ga(t){return typeof t=="string"?document.getElementById(t):t}function Fe(t,e){var i=t.style[e]||t.currentStyle&&t.currentStyle[e];if((!i||i==="auto")&&document.defaultView){var s=document.defaultView.getComputedStyle(t,null);i=s?s[e]:null}return i==="auto"?null:i}function Y(t,e,i){var s=document.createElement(t);return s.className=e||"",i&&i.appendChild(s),s}function ot(t){var e=t.parentNode;e&&e.removeChild(t)}function hi(t){for(;t.firstChild;)t.removeChild(t.firstChild)}function ye(t){var e=t.parentNode;e&&e.lastChild!==t&&e.appendChild(t)}function we(t){var e=t.parentNode;e&&e.firstChild!==t&&e.insertBefore(t,e.firstChild)}function hn(t,e){if(t.classList!==void 0)return t.classList.contains(e);var i=mi(t);return i.length>0&&new RegExp("(^|\\s)"+e+"(\\s|$)").test(i)}function q(t,e){if(t.classList!==void 0)for(var i=x(e),s=0,r=i.length;s0?2*window.devicePixelRatio:1;function Qa(t){return O.edge?t.wheelDeltaY/2:t.deltaY&&t.deltaMode===0?-t.deltaY/Sr:t.deltaY&&t.deltaMode===1?-t.deltaY*20:t.deltaY&&t.deltaMode===2?-t.deltaY*60:t.deltaX||t.deltaZ?0:t.wheelDelta?(t.wheelDeltaY||t.wheelDelta)/2:t.detail&&Math.abs(t.detail)<32765?-t.detail*20:t.detail?t.detail/-32765*60:0}function xn(t,e){var i=e.relatedTarget;if(!i)return!0;try{for(;i&&i!==t;)i=i.parentNode}catch{return!1}return i!==t}var xr={__proto__:null,on:B,off:nt,stopPropagation:ue,disableScrollPropagation:Sn,disableClickPropagation:Ve,preventDefault:ft,stop:de,getPropagationPath:Ya,getMousePosition:Xa,getWheelDelta:Qa,isExternalTarget:xn,addListener:B,removeListener:nt},ts=te.extend({run:function(t,e,i,s){this.stop(),this._el=t,this._inProgress=!0,this._duration=i||.25,this._easeOutPower=1/Math.max(s||.5,.2),this._startPos=ce(t),this._offset=e.subtract(this._startPos),this._startTime=+new Date,this.fire("start"),this._animate()},stop:function(){this._inProgress&&(this._step(!0),this._complete())},_animate:function(){this._animId=Q(this._animate,this),this._step()},_step:function(t){var e=+new Date-this._startTime,i=this._duration*1e3;ethis.options.maxZoom)?this.setZoom(t):this},panInsideBounds:function(t,e){this._enforcingBounds=!0;var i=this.getCenter(),s=this._limitCenter(i,this._zoom,it(t));return i.equals(s)||this.panTo(s,e),this._enforcingBounds=!1,this},panInside:function(t,e){e=e||{};var i=I(e.paddingTopLeft||e.padding||[0,0]),s=I(e.paddingBottomRight||e.padding||[0,0]),r=this.project(this.getCenter()),u=this.project(t),p=this.getPixelBounds(),b=at([p.min.add(i),p.max.subtract(s)]),S=b.getSize();if(!b.contains(u)){this._enforcingBounds=!0;var P=u.subtract(b.getCenter()),C=b.extend(u).getSize().subtract(S);r.x+=P.x<0?-C.x:C.x,r.y+=P.y<0?-C.y:C.y,this.panTo(this.unproject(r),e),this._enforcingBounds=!1}return this},invalidateSize:function(t){if(!this._loaded)return this;t=c({animate:!1,pan:!0},t===!0?{animate:!0}:t);var e=this.getSize();this._sizeChanged=!0,this._lastCenter=null;var i=this.getSize(),s=e.divideBy(2).round(),r=i.divideBy(2).round(),u=s.subtract(r);return!u.x&&!u.y?this:(t.animate&&t.pan?this.panBy(u):(t.pan&&this._rawPanBy(u),this.fire("move"),t.debounceMoveend?(clearTimeout(this._sizeTimer),this._sizeTimer=setTimeout(h(this.fire,this,"moveend"),200)):this.fire("moveend")),this.fire("resize",{oldSize:e,newSize:i}))},stop:function(){return this.setZoom(this._limitZoom(this._zoom)),this.options.zoomSnap||this.fire("viewreset"),this._stop()},locate:function(t){if(t=this._locateOptions=c({timeout:1e4,watch:!1},t),!("geolocation"in navigator))return this._handleGeolocationError({code:0,message:"Geolocation not supported."}),this;var e=h(this._handleGeolocationResponse,this),i=h(this._handleGeolocationError,this);return t.watch?this._locationWatchId=navigator.geolocation.watchPosition(e,i,t):navigator.geolocation.getCurrentPosition(e,i,t),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch&&navigator.geolocation.clearWatch(this._locationWatchId),this._locateOptions&&(this._locateOptions.setView=!1),this},_handleGeolocationError:function(t){if(this._container._leaflet_id){var e=t.code,i=t.message||(e===1?"permission denied":e===2?"position unavailable":"timeout");this._locateOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:e,message:"Geolocation error: "+i+"."})}},_handleGeolocationResponse:function(t){if(this._container._leaflet_id){var e=t.coords.latitude,i=t.coords.longitude,s=new D(e,i),r=s.toBounds(t.coords.accuracy*2),u=this._locateOptions;if(u.setView){var p=this.getBoundsZoom(r);this.setView(s,u.maxZoom?Math.min(p,u.maxZoom):p)}var b={latlng:s,bounds:r,timestamp:t.timestamp};for(var S in t.coords)typeof t.coords[S]=="number"&&(b[S]=t.coords[S]);this.fire("locationfound",b)}},addHandler:function(t,e){if(!e)return this;var i=this[t]=new e(this);return this._handlers.push(i),this.options[t]&&i.enable(),this},remove:function(){if(this._initEvents(!0),this.options.maxBounds&&this.off("moveend",this._panInsideMaxBounds),this._containerId!==this._container._leaflet_id)throw new Error("Map container is being reused by another instance");try{delete this._container._leaflet_id,delete this._containerId}catch{this._container._leaflet_id=void 0,this._containerId=void 0}this._locationWatchId!==void 0&&this.stopLocate(),this._stop(),ot(this._mapPane),this._clearControlPos&&this._clearControlPos(),this._resizeRequest&&(et(this._resizeRequest),this._resizeRequest=null),this._clearHandlers(),this._loaded&&this.fire("unload");var t;for(t in this._layers)this._layers[t].remove();for(t in this._panes)ot(this._panes[t]);return this._layers=[],this._panes=[],delete this._mapPane,delete this._renderer,this},createPane:function(t,e){var i="leaflet-pane"+(t?" leaflet-"+t.replace("Pane","")+"-pane":""),s=Y("div",i,e||this._mapPane);return t&&(this._panes[t]=s),s},getCenter:function(){return this._checkIfLoaded(),this._lastCenter&&!this._moved()?this._lastCenter.clone():this.layerPointToLatLng(this._getCenterLayerPoint())},getZoom:function(){return this._zoom},getBounds:function(){var t=this.getPixelBounds(),e=this.unproject(t.getBottomLeft()),i=this.unproject(t.getTopRight());return new st(e,i)},getMinZoom:function(){return this.options.minZoom===void 0?this._layersMinZoom||0:this.options.minZoom},getMaxZoom:function(){return this.options.maxZoom===void 0?this._layersMaxZoom===void 0?1/0:this._layersMaxZoom:this.options.maxZoom},getBoundsZoom:function(t,e,i){t=it(t),i=I(i||[0,0]);var s=this.getZoom()||0,r=this.getMinZoom(),u=this.getMaxZoom(),p=t.getNorthWest(),b=t.getSouthEast(),S=this.getSize().subtract(i),P=at(this.project(b,s),this.project(p,s)).getSize(),C=O.any3d?this.options.zoomSnap:1,$=S.x/P.x,U=S.y/P.y,_t=e?Math.max($,U):Math.min($,U);return s=this.getScaleZoom(_t,s),C&&(s=Math.round(s/(C/100))*(C/100),s=e?Math.ceil(s/C)*C:Math.floor(s/C)*C),Math.max(r,Math.min(u,s))},getSize:function(){return(!this._size||this._sizeChanged)&&(this._size=new z(this._container.clientWidth||0,this._container.clientHeight||0),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(t,e){var i=this._getTopLeftPoint(t,e);return new j(i,i.add(this.getSize()))},getPixelOrigin:function(){return this._checkIfLoaded(),this._pixelOrigin},getPixelWorldBounds:function(t){return this.options.crs.getProjectedBounds(t===void 0?this.getZoom():t)},getPane:function(t){return typeof t=="string"?this._panes[t]:t},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(t,e){var i=this.options.crs;return e=e===void 0?this._zoom:e,i.scale(t)/i.scale(e)},getScaleZoom:function(t,e){var i=this.options.crs;e=e===void 0?this._zoom:e;var s=i.zoom(t*i.scale(e));return isNaN(s)?1/0:s},project:function(t,e){return e=e===void 0?this._zoom:e,this.options.crs.latLngToPoint(F(t),e)},unproject:function(t,e){return e=e===void 0?this._zoom:e,this.options.crs.pointToLatLng(I(t),e)},layerPointToLatLng:function(t){var e=I(t).add(this.getPixelOrigin());return this.unproject(e)},latLngToLayerPoint:function(t){var e=this.project(F(t))._round();return e._subtract(this.getPixelOrigin())},wrapLatLng:function(t){return this.options.crs.wrapLatLng(F(t))},wrapLatLngBounds:function(t){return this.options.crs.wrapLatLngBounds(it(t))},distance:function(t,e){return this.options.crs.distance(F(t),F(e))},containerPointToLayerPoint:function(t){return I(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return I(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){var e=this.containerPointToLayerPoint(I(t));return this.layerPointToLatLng(e)},latLngToContainerPoint:function(t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(F(t)))},mouseEventToContainerPoint:function(t){return Xa(t,this._container)},mouseEventToLayerPoint:function(t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){var e=this._container=Ga(t);if(e){if(e._leaflet_id)throw new Error("Map container is already initialized.")}else throw new Error("Map container not found.");B(e,"scroll",this._onScroll,this),this._containerId=m(e)},_initLayout:function(){var t=this._container;this._fadeAnimated=this.options.fadeAnimation&&O.any3d,q(t,"leaflet-container"+(O.touch?" leaflet-touch":"")+(O.retina?" leaflet-retina":"")+(O.ielt9?" leaflet-oldie":"")+(O.safari?" leaflet-safari":"")+(this._fadeAnimated?" leaflet-fade-anim":""));var e=Fe(t,"position");e!=="absolute"&&e!=="relative"&&e!=="fixed"&&e!=="sticky"&&(t.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var t=this._panes={};this._paneRenderers={},this._mapPane=this.createPane("mapPane",this._container),ut(this._mapPane,new z(0,0)),this.createPane("tilePane"),this.createPane("overlayPane"),this.createPane("shadowPane"),this.createPane("markerPane"),this.createPane("tooltipPane"),this.createPane("popupPane"),this.options.markerZoomAnimation||(q(t.markerPane,"leaflet-zoom-hide"),q(t.shadowPane,"leaflet-zoom-hide"))},_resetView:function(t,e,i){ut(this._mapPane,new z(0,0));var s=!this._loaded;this._loaded=!0,e=this._limitZoom(e),this.fire("viewprereset");var r=this._zoom!==e;this._moveStart(r,i)._move(t,e)._moveEnd(r),this.fire("viewreset"),s&&this.fire("load")},_moveStart:function(t,e){return t&&this.fire("zoomstart"),e||this.fire("movestart"),this},_move:function(t,e,i,s){e===void 0&&(e=this._zoom);var r=this._zoom!==e;return this._zoom=e,this._lastCenter=t,this._pixelOrigin=this._getNewPixelOrigin(t),s?i&&i.pinch&&this.fire("zoom",i):((r||i&&i.pinch)&&this.fire("zoom",i),this.fire("move",i)),this},_moveEnd:function(t){return t&&this.fire("zoomend"),this.fire("moveend")},_stop:function(){return et(this._flyToFrame),this._panAnim&&this._panAnim.stop(),this},_rawPanBy:function(t){ut(this._mapPane,this._getMapPanePos().subtract(t))},_getZoomSpan:function(){return this.getMaxZoom()-this.getMinZoom()},_panInsideMaxBounds:function(){this._enforcingBounds||this.panInsideBounds(this.options.maxBounds)},_checkIfLoaded:function(){if(!this._loaded)throw new Error("Set map center and zoom first.")},_initEvents:function(t){this._targets={},this._targets[m(this._container)]=this;var e=t?nt:B;e(this._container,"click dblclick mousedown mouseup mouseover mouseout mousemove contextmenu keypress keydown keyup",this._handleDOMEvent,this),this.options.trackResize&&e(window,"resize",this._onResize,this),O.any3d&&this.options.transform3DLimit&&(t?this.off:this.on).call(this,"moveend",this._onMoveEnd)},_onResize:function(){et(this._resizeRequest),this._resizeRequest=Q(function(){this.invalidateSize({debounceMoveend:!0})},this)},_onScroll:function(){this._container.scrollTop=0,this._container.scrollLeft=0},_onMoveEnd:function(){var t=this._getMapPanePos();Math.max(Math.abs(t.x),Math.abs(t.y))>=this.options.transform3DLimit&&this._resetView(this.getCenter(),this.getZoom())},_findEventTargets:function(t,e){for(var i=[],s,r=e==="mouseout"||e==="mouseover",u=t.target||t.srcElement,p=!1;u;){if(s=this._targets[m(u)],s&&(e==="click"||e==="preclick")&&this._draggableMoved(s)){p=!0;break}if(s&&s.listens(e,!0)&&(r&&!xn(u,t)||(i.push(s),r))||u===this._container)break;u=u.parentNode}return!i.length&&!p&&!r&&this.listens(e,!0)&&(i=[this]),i},_isClickDisabled:function(t){for(;t&&t!==this._container;){if(t._leaflet_disable_click)return!0;t=t.parentNode}},_handleDOMEvent:function(t){var e=t.target||t.srcElement;if(!(!this._loaded||e._leaflet_disable_events||t.type==="click"&&this._isClickDisabled(e))){var i=t.type;i==="mousedown"&&gn(e),this._fireDOMEvent(t,i)}},_mouseEvents:["click","dblclick","mouseover","mouseout","contextmenu"],_fireDOMEvent:function(t,e,i){if(t.type==="click"){var s=c({},t);s.type="preclick",this._fireDOMEvent(s,s.type,i)}var r=this._findEventTargets(t,e);if(i){for(var u=[],p=0;p0?Math.round(t-e)/2:Math.max(0,Math.ceil(t))-Math.max(0,Math.floor(e))},_limitZoom:function(t){var e=this.getMinZoom(),i=this.getMaxZoom(),s=O.any3d?this.options.zoomSnap:1;return s&&(t=Math.round(t/s)*s),Math.max(e,Math.min(i,t))},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){lt(this._mapPane,"leaflet-pan-anim"),this.fire("moveend")},_tryAnimatedPan:function(t,e){var i=this._getCenterOffset(t)._trunc();return(e&&e.animate)!==!0&&!this.getSize().contains(i)?!1:(this.panBy(i,e),!0)},_createAnimProxy:function(){var t=this._proxy=Y("div","leaflet-proxy leaflet-zoom-animated");this._panes.mapPane.appendChild(t),this.on("zoomanim",function(e){var i=dn,s=this._proxy.style[i];le(this._proxy,this.project(e.center,e.zoom),this.getZoomScale(e.zoom,1)),s===this._proxy.style[i]&&this._animatingZoom&&this._onZoomTransitionEnd()},this),this.on("load moveend",this._animMoveEnd,this),this._on("unload",this._destroyAnimProxy,this)},_destroyAnimProxy:function(){ot(this._proxy),this.off("load moveend",this._animMoveEnd,this),delete this._proxy},_animMoveEnd:function(){var t=this.getCenter(),e=this.getZoom();le(this._proxy,this.project(t,e),this.getZoomScale(e,1))},_catchTransitionEnd:function(t){this._animatingZoom&&t.propertyName.indexOf("transform")>=0&&this._onZoomTransitionEnd()},_nothingToAnimate:function(){return!this._container.getElementsByClassName("leaflet-zoom-animated").length},_tryAnimatedZoom:function(t,e,i){if(this._animatingZoom)return!0;if(i=i||{},!this._zoomAnimated||i.animate===!1||this._nothingToAnimate()||Math.abs(e-this._zoom)>this.options.zoomAnimationThreshold)return!1;var s=this.getZoomScale(e),r=this._getCenterOffset(t)._divideBy(1-1/s);return i.animate!==!0&&!this.getSize().contains(r)?!1:(Q(function(){this._moveStart(!0,i.noMoveStart||!1)._animateZoom(t,e,!0)},this),!0)},_animateZoom:function(t,e,i,s){this._mapPane&&(i&&(this._animatingZoom=!0,this._animateToCenter=t,this._animateToZoom=e,q(this._mapPane,"leaflet-zoom-anim")),this.fire("zoomanim",{center:t,zoom:e,noUpdate:s}),this._tempFireZoomEvent||(this._tempFireZoomEvent=this._zoom!==this._animateToZoom),this._move(this._animateToCenter,this._animateToZoom,void 0,!0),setTimeout(h(this._onZoomTransitionEnd,this),250))},_onZoomTransitionEnd:function(){this._animatingZoom&&(this._mapPane&<(this._mapPane,"leaflet-zoom-anim"),this._animatingZoom=!1,this._move(this._animateToCenter,this._animateToZoom,void 0,!0),this._tempFireZoomEvent&&this.fire("zoom"),delete this._tempFireZoomEvent,this.fire("move"),this._moveEnd(!0))}});function Tr(t,e){return new J(t,e)}var Ct=ht.extend({options:{position:"topright"},initialize:function(t){T(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var e=this._map;return e&&e.removeControl(this),this.options.position=t,e&&e.addControl(this),this},getContainer:function(){return this._container},addTo:function(t){this.remove(),this._map=t;var e=this._container=this.onAdd(t),i=this.getPosition(),s=t._controlCorners[i];return q(e,"leaflet-control"),i.indexOf("bottom")!==-1?s.insertBefore(e,s.firstChild):s.appendChild(e),this._map.on("unload",this.remove,this),this},remove:function(){return this._map?(ot(this._container),this.onRemove&&this.onRemove(this._map),this._map.off("unload",this.remove,this),this._map=null,this):this},_refocusOnMap:function(t){this._map&&t&&t.screenX>0&&t.screenY>0&&this._map.getContainer().focus()}}),We=function(t){return new Ct(t)};J.include({addControl:function(t){return t.addTo(this),this},removeControl:function(t){return t.remove(),this},_initControlPos:function(){var t=this._controlCorners={},e="leaflet-",i=this._controlContainer=Y("div",e+"control-container",this._container);function s(r,u){var p=e+r+" "+e+u;t[r+u]=Y("div",p,i)}s("top","left"),s("top","right"),s("bottom","left"),s("bottom","right")},_clearControlPos:function(){for(var t in this._controlCorners)ot(this._controlCorners[t]);ot(this._controlContainer),delete this._controlCorners,delete this._controlContainer}});var es=Ct.extend({options:{collapsed:!0,position:"topright",autoZIndex:!0,hideSingleBase:!1,sortLayers:!1,sortFunction:function(t,e,i,s){return i1,this._baseLayersList.style.display=t?"":"none"),this._separator.style.display=e&&t?"":"none",this},_onLayerChange:function(t){this._handlingClick||this._update();var e=this._getLayer(m(t.target)),i=e.overlay?t.type==="add"?"overlayadd":"overlayremove":t.type==="add"?"baselayerchange":null;i&&this._map.fire(i,e)},_createRadioElement:function(t,e){var i='",s=document.createElement("div");return s.innerHTML=i,s.firstChild},_addItem:function(t){var e=document.createElement("label"),i=this._map.hasLayer(t.layer),s;t.overlay?(s=document.createElement("input"),s.type="checkbox",s.className="leaflet-control-layers-selector",s.defaultChecked=i):s=this._createRadioElement("leaflet-base-layers_"+m(this),i),this._layerControlInputs.push(s),s.layerId=m(t.layer),B(s,"click",this._onInputClick,this);var r=document.createElement("span");r.innerHTML=" "+t.name;var u=document.createElement("span");e.appendChild(u),u.appendChild(s),u.appendChild(r);var p=t.overlay?this._overlaysList:this._baseLayersList;return p.appendChild(e),this._checkDisabledLayers(),e},_onInputClick:function(){if(!this._preventClick){var t=this._layerControlInputs,e,i,s=[],r=[];this._handlingClick=!0;for(var u=t.length-1;u>=0;u--)e=t[u],i=this._getLayer(e.layerId).layer,e.checked?s.push(i):e.checked||r.push(i);for(u=0;u=0;r--)e=t[r],i=this._getLayer(e.layerId).layer,e.disabled=i.options.minZoom!==void 0&&si.options.maxZoom},_expandIfNotCollapsed:function(){return this._map&&!this.options.collapsed&&this.expand(),this},_expandSafely:function(){var t=this._section;this._preventClick=!0,B(t,"click",ft),this.expand();var e=this;setTimeout(function(){nt(t,"click",ft),e._preventClick=!1})}}),Pr=function(t,e,i){return new es(t,e,i)},Tn=Ct.extend({options:{position:"topleft",zoomInText:'',zoomInTitle:"Zoom in",zoomOutText:'',zoomOutTitle:"Zoom out"},onAdd:function(t){var e="leaflet-control-zoom",i=Y("div",e+" leaflet-bar"),s=this.options;return this._zoomInButton=this._createButton(s.zoomInText,s.zoomInTitle,e+"-in",i,this._zoomIn),this._zoomOutButton=this._createButton(s.zoomOutText,s.zoomOutTitle,e+"-out",i,this._zoomOut),this._updateDisabled(),t.on("zoomend zoomlevelschange",this._updateDisabled,this),i},onRemove:function(t){t.off("zoomend zoomlevelschange",this._updateDisabled,this)},disable:function(){return this._disabled=!0,this._updateDisabled(),this},enable:function(){return this._disabled=!1,this._updateDisabled(),this},_zoomIn:function(t){!this._disabled&&this._map._zoomthis._map.getMinZoom()&&this._map.zoomOut(this._map.options.zoomDelta*(t.shiftKey?3:1))},_createButton:function(t,e,i,s,r){var u=Y("a",i,s);return u.innerHTML=t,u.href="#",u.title=e,u.setAttribute("role","button"),u.setAttribute("aria-label",e),Ve(u),B(u,"click",de),B(u,"click",r,this),B(u,"click",this._refocusOnMap,this),u},_updateDisabled:function(){var t=this._map,e="leaflet-disabled";lt(this._zoomInButton,e),lt(this._zoomOutButton,e),this._zoomInButton.setAttribute("aria-disabled","false"),this._zoomOutButton.setAttribute("aria-disabled","false"),(this._disabled||t._zoom===t.getMinZoom())&&(q(this._zoomOutButton,e),this._zoomOutButton.setAttribute("aria-disabled","true")),(this._disabled||t._zoom===t.getMaxZoom())&&(q(this._zoomInButton,e),this._zoomInButton.setAttribute("aria-disabled","true"))}});J.mergeOptions({zoomControl:!0}),J.addInitHook(function(){this.options.zoomControl&&(this.zoomControl=new Tn,this.addControl(this.zoomControl))});var kr=function(t){return new Tn(t)},is=Ct.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0},onAdd:function(t){var e="leaflet-control-scale",i=Y("div",e),s=this.options;return this._addScales(s,e+"-line",i),t.on(s.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),i},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,e,i){t.metric&&(this._mScale=Y("div",e,i)),t.imperial&&(this._iScale=Y("div",e,i))},_update:function(){var t=this._map,e=t.getSize().y/2,i=t.distance(t.containerPointToLatLng([0,e]),t.containerPointToLatLng([this.options.maxWidth,e]));this._updateScales(i)},_updateScales:function(t){this.options.metric&&t&&this._updateMetric(t),this.options.imperial&&t&&this._updateImperial(t)},_updateMetric:function(t){var e=this._getRoundNum(t),i=e<1e3?e+" m":e/1e3+" km";this._updateScale(this._mScale,i,e/t)},_updateImperial:function(t){var e=t*3.2808399,i,s,r;e>5280?(i=e/5280,s=this._getRoundNum(i),this._updateScale(this._iScale,s+" mi",s/i)):(r=this._getRoundNum(e),this._updateScale(this._iScale,r+" ft",r/e))},_updateScale:function(t,e,i){t.style.width=Math.round(this.options.maxWidth*i)+"px",t.innerHTML=e},_getRoundNum:function(t){var e=Math.pow(10,(Math.floor(t)+"").length-1),i=t/e;return i=i>=10?10:i>=5?5:i>=3?3:i>=2?2:1,e*i}}),Ar=function(t){return new is(t)},Cr='',Pn=Ct.extend({options:{position:"bottomright",prefix:''+(O.inlineSvg?Cr+" ":"")+"Leaflet"},initialize:function(t){T(this,t),this._attributions={}},onAdd:function(t){t.attributionControl=this,this._container=Y("div","leaflet-control-attribution"),Ve(this._container);for(var e in t._layers)t._layers[e].getAttribution&&this.addAttribution(t._layers[e].getAttribution());return this._update(),t.on("layeradd",this._addAttribution,this),this._container},onRemove:function(t){t.off("layeradd",this._addAttribution,this)},_addAttribution:function(t){t.layer.getAttribution&&(this.addAttribution(t.layer.getAttribution()),t.layer.once("remove",function(){this.removeAttribution(t.layer.getAttribution())},this))},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t?(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update(),this):this},removeAttribution:function(t){return t?(this._attributions[t]&&(this._attributions[t]--,this._update()),this):this},_update:function(){if(this._map){var t=[];for(var e in this._attributions)this._attributions[e]&&t.push(e);var i=[];this.options.prefix&&i.push(this.options.prefix),t.length&&i.push(t.join(", ")),this._container.innerHTML=i.join(' ')}}});J.mergeOptions({attributionControl:!0}),J.addInitHook(function(){this.options.attributionControl&&new Pn().addTo(this)});var Mr=function(t){return new Pn(t)};Ct.Layers=es,Ct.Zoom=Tn,Ct.Scale=is,Ct.Attribution=Pn,We.layers=Pr,We.zoom=kr,We.scale=Ar,We.attribution=Mr;var Nt=ht.extend({initialize:function(t){this._map=t},enable:function(){return this._enabled?this:(this._enabled=!0,this.addHooks(),this)},disable:function(){return this._enabled?(this._enabled=!1,this.removeHooks(),this):this},enabled:function(){return!!this._enabled}});Nt.addTo=function(t,e){return t.addHandler(e,this),this};var Er={Events:pt},ns=O.touch?"touchstart mousedown":"mousedown",ie=te.extend({options:{clickTolerance:3},initialize:function(t,e,i,s){T(this,s),this._element=t,this._dragStartTarget=e||t,this._preventOutline=i},enable:function(){this._enabled||(B(this._dragStartTarget,ns,this._onDown,this),this._enabled=!0)},disable:function(){this._enabled&&(ie._dragging===this&&this.finishDrag(!0),nt(this._dragStartTarget,ns,this._onDown,this),this._enabled=!1,this._moved=!1)},_onDown:function(t){if(this._enabled&&(this._moved=!1,!hn(this._element,"leaflet-zoom-anim"))){if(t.touches&&t.touches.length!==1){ie._dragging===this&&this.finishDrag();return}if(!(ie._dragging||t.shiftKey||t.which!==1&&t.button!==1&&!t.touches)&&(ie._dragging=this,this._preventOutline&&gn(this._element),pn(),Ze(),!this._moving)){this.fire("down");var e=t.touches?t.touches[0]:t,i=Ka(this._element);this._startPoint=new z(e.clientX,e.clientY),this._startPos=ce(this._element),this._parentScale=bn(i);var s=t.type==="mousedown";B(document,s?"mousemove":"touchmove",this._onMove,this),B(document,s?"mouseup":"touchend touchcancel",this._onUp,this)}}},_onMove:function(t){if(this._enabled){if(t.touches&&t.touches.length>1){this._moved=!0;return}var e=t.touches&&t.touches.length===1?t.touches[0]:t,i=new z(e.clientX,e.clientY)._subtract(this._startPoint);!i.x&&!i.y||Math.abs(i.x)+Math.abs(i.y)u&&(p=b,u=S);u>i&&(e[p]=1,An(t,e,i,s,p),An(t,e,i,p,r))}function Nr(t,e){for(var i=[t[0]],s=1,r=0,u=t.length;se&&(i.push(t[s]),r=s);return re.max.x&&(i|=2),t.ye.max.y&&(i|=8),i}function Rr(t,e){var i=e.x-t.x,s=e.y-t.y;return i*i+s*s}function Ge(t,e,i,s){var r=e.x,u=e.y,p=i.x-r,b=i.y-u,S=p*p+b*b,P;return S>0&&(P=((t.x-r)*p+(t.y-u)*b)/S,P>1?(r=i.x,u=i.y):P>0&&(r+=p*P,u+=b*P)),p=t.x-r,b=t.y-u,s?p*p+b*b:new z(r,u)}function Pt(t){return!H(t[0])||typeof t[0][0]!="object"&&typeof t[0][0]<"u"}function us(t){return console.warn("Deprecated use of _flat, please use L.LineUtil.isFlat instead."),Pt(t)}function ds(t,e){var i,s,r,u,p,b,S,P;if(!t||t.length===0)throw new Error("latlngs not passed");Pt(t)||(console.warn("latlngs are not flat! Only the first ring will be used"),t=t[0]);var C=F([0,0]),$=it(t),U=$.getNorthWest().distanceTo($.getSouthWest())*$.getNorthEast().distanceTo($.getNorthWest());U<1700&&(C=kn(t));var _t=t.length,mt=[];for(i=0;i<_t;i++){var kt=F(t[i]);mt.push(e.project(F([kt.lat-C.lat,kt.lng-C.lng])))}for(i=0,s=0;i<_t-1;i++)s+=mt[i].distanceTo(mt[i+1])/2;if(s===0)P=mt[0];else for(i=0,u=0;i<_t-1;i++)if(p=mt[i],b=mt[i+1],r=p.distanceTo(b),u+=r,u>s){S=(u-s)/r,P=[b.x-S*(b.x-p.x),b.y-S*(b.y-p.y)];break}var gt=e.unproject(I(P));return F([gt.lat+C.lat,gt.lng+C.lng])}var zr={__proto__:null,simplify:os,pointToSegmentDistance:rs,closestPointOnSegment:Or,clipSegment:cs,_getEdgeIntersection:vi,_getBitCode:he,_sqClosestPointOnSegment:Ge,isFlat:Pt,_flat:us,polylineCenter:ds},Cn={project:function(t){return new z(t.lng,t.lat)},unproject:function(t){return new D(t.y,t.x)},bounds:new j([-180,-90],[180,90])},Mn={R:6378137,R_MINOR:6356752314245179e-9,bounds:new j([-2003750834279e-5,-1549657073972e-5],[2003750834279e-5,1876465623138e-5]),project:function(t){var e=Math.PI/180,i=this.R,s=t.lat*e,r=this.R_MINOR/i,u=Math.sqrt(1-r*r),p=u*Math.sin(s),b=Math.tan(Math.PI/4-s/2)/Math.pow((1-p)/(1+p),u/2);return s=-i*Math.log(Math.max(b,1e-10)),new z(t.lng*e*i,s)},unproject:function(t){for(var e=180/Math.PI,i=this.R,s=this.R_MINOR/i,r=Math.sqrt(1-s*s),u=Math.exp(-t.y/i),p=Math.PI/2-2*Math.atan(u),b=0,S=.1,P;b<15&&Math.abs(S)>1e-7;b++)P=r*Math.sin(p),P=Math.pow((1-P)/(1+P),r/2),S=Math.PI/2-2*Math.atan(u*P)-p,p+=S;return new D(p*e,t.x*e/i)}},Br={__proto__:null,LonLat:Cn,Mercator:Mn,SphericalMercator:en},Dr=c({},ee,{code:"EPSG:3395",projection:Mn,transformation:(function(){var t=.5/(Math.PI*Mn.R);return De(t,.5,-t,.5)})()}),hs=c({},ee,{code:"EPSG:4326",projection:Cn,transformation:De(1/180,1,-1/180,.5)}),qr=c({},vt,{projection:Cn,transformation:De(1,0,-1,0),scale:function(t){return Math.pow(2,t)},zoom:function(t){return Math.log(t)/Math.LN2},distance:function(t,e){var i=e.lng-t.lng,s=e.lat-t.lat;return Math.sqrt(i*i+s*s)},infinite:!0});vt.Earth=ee,vt.EPSG3395=Dr,vt.EPSG3857=an,vt.EPSG900913=Vo,vt.EPSG4326=hs,vt.Simple=qr;var Mt=te.extend({options:{pane:"overlayPane",attribution:null,bubblingMouseEvents:!0},addTo:function(t){return t.addLayer(this),this},remove:function(){return this.removeFrom(this._map||this._mapToAdd)},removeFrom:function(t){return t&&t.removeLayer(this),this},getPane:function(t){return this._map.getPane(t?this.options[t]||t:this.options.pane)},addInteractiveTarget:function(t){return this._map._targets[m(t)]=this,this},removeInteractiveTarget:function(t){return delete this._map._targets[m(t)],this},getAttribution:function(){return this.options.attribution},_layerAdd:function(t){var e=t.target;if(e.hasLayer(this)){if(this._map=e,this._zoomAnimated=e._zoomAnimated,this.getEvents){var i=this.getEvents();e.on(i,this),this.once("remove",function(){e.off(i,this)},this)}this.onAdd(e),this.fire("add"),e.fire("layeradd",{layer:this})}}});J.include({addLayer:function(t){if(!t._layerAdd)throw new Error("The provided object is not a Layer.");var e=m(t);return this._layers[e]?this:(this._layers[e]=t,t._mapToAdd=this,t.beforeAdd&&t.beforeAdd(this),this.whenReady(t._layerAdd,t),this)},removeLayer:function(t){var e=m(t);return this._layers[e]?(this._loaded&&t.onRemove(this),delete this._layers[e],this._loaded&&(this.fire("layerremove",{layer:t}),t.fire("remove")),t._map=t._mapToAdd=null,this):this},hasLayer:function(t){return m(t)in this._layers},eachLayer:function(t,e){for(var i in this._layers)t.call(e,this._layers[i]);return this},_addLayers:function(t){t=t?H(t)?t:[t]:[];for(var e=0,i=t.length;ethis._layersMaxZoom&&this.setZoom(this._layersMaxZoom),this.options.minZoom===void 0&&this._layersMinZoom&&this.getZoom()=2&&e[0]instanceof D&&e[0].equals(e[i-1])&&e.pop(),e},_setLatLngs:function(t){Zt.prototype._setLatLngs.call(this,t),Pt(this._latlngs)&&(this._latlngs=[this._latlngs])},_defaultShape:function(){return Pt(this._latlngs[0])?this._latlngs[0]:this._latlngs[0][0]},_clipPoints:function(){var t=this._renderer._bounds,e=this.options.weight,i=new z(e,e);if(t=new j(t.min.subtract(i),t.max.add(i)),this._parts=[],!(!this._pxBounds||!this._pxBounds.intersects(t))){if(this.options.noClip){this._parts=this._rings;return}for(var s=0,r=this._rings.length,u;st.y!=r.y>t.y&&t.x<(r.x-s.x)*(t.y-s.y)/(r.y-s.y)+s.x&&(e=!e);return e||Zt.prototype._containsPoint.call(this,t,!0)}});function Gr(t,e){return new xe(t,e)}var jt=Ft.extend({initialize:function(t,e){T(this,e),this._layers={},t&&this.addData(t)},addData:function(t){var e=H(t)?t:t.features,i,s,r;if(e){for(i=0,s=e.length;i0&&r.push(r[0].slice()),r}function Te(t,e){return t.feature?c({},t.feature,{geometry:e}):Si(e)}function Si(t){return t.type==="Feature"||t.type==="FeatureCollection"?t:{type:"Feature",properties:{},geometry:t}}var $n={toGeoJSON:function(t){return Te(this,{type:"Point",coordinates:On(this.getLatLng(),t)})}};gi.include($n),En.include($n),bi.include($n),Zt.include({toGeoJSON:function(t){var e=!Pt(this._latlngs),i=Li(this._latlngs,e?1:0,!1,t);return Te(this,{type:(e?"Multi":"")+"LineString",coordinates:i})}}),xe.include({toGeoJSON:function(t){var e=!Pt(this._latlngs),i=e&&!Pt(this._latlngs[0]),s=Li(this._latlngs,i?2:e?1:0,!0,t);return e||(s=[s]),Te(this,{type:(i?"Multi":"")+"Polygon",coordinates:s})}}),Le.include({toMultiPoint:function(t){var e=[];return this.eachLayer(function(i){e.push(i.toGeoJSON(t).geometry.coordinates)}),Te(this,{type:"MultiPoint",coordinates:e})},toGeoJSON:function(t){var e=this.feature&&this.feature.geometry&&this.feature.geometry.type;if(e==="MultiPoint")return this.toMultiPoint(t);var i=e==="GeometryCollection",s=[];return this.eachLayer(function(r){if(r.toGeoJSON){var u=r.toGeoJSON(t);if(i)s.push(u.geometry);else{var p=Si(u);p.type==="FeatureCollection"?s.push.apply(s,p.features):s.push(p)}}}),i?Te(this,{geometries:s,type:"GeometryCollection"}):{type:"FeatureCollection",features:s}}});function ps(t,e){return new jt(t,e)}var Kr=ps,xi=Mt.extend({options:{opacity:1,alt:"",interactive:!1,crossOrigin:!1,errorOverlayUrl:"",zIndex:1,className:""},initialize:function(t,e,i){this._url=t,this._bounds=it(e),T(this,i)},onAdd:function(){this._image||(this._initImage(),this.options.opacity<1&&this._updateOpacity()),this.options.interactive&&(q(this._image,"leaflet-interactive"),this.addInteractiveTarget(this._image)),this.getPane().appendChild(this._image),this._reset()},onRemove:function(){ot(this._image),this.options.interactive&&this.removeInteractiveTarget(this._image)},setOpacity:function(t){return this.options.opacity=t,this._image&&this._updateOpacity(),this},setStyle:function(t){return t.opacity&&this.setOpacity(t.opacity),this},bringToFront:function(){return this._map&&ye(this._image),this},bringToBack:function(){return this._map&&we(this._image),this},setUrl:function(t){return this._url=t,this._image&&(this._image.src=t),this},setBounds:function(t){return this._bounds=it(t),this._map&&this._reset(),this},getEvents:function(){var t={zoom:this._reset,viewreset:this._reset};return this._zoomAnimated&&(t.zoomanim=this._animateZoom),t},setZIndex:function(t){return this.options.zIndex=t,this._updateZIndex(),this},getBounds:function(){return this._bounds},getElement:function(){return this._image},_initImage:function(){var t=this._url.tagName==="IMG",e=this._image=t?this._url:Y("img");if(q(e,"leaflet-image-layer"),this._zoomAnimated&&q(e,"leaflet-zoom-animated"),this.options.className&&q(e,this.options.className),e.onselectstart=y,e.onmousemove=y,e.onload=h(this.fire,this,"load"),e.onerror=h(this._overlayOnError,this,"error"),(this.options.crossOrigin||this.options.crossOrigin==="")&&(e.crossOrigin=this.options.crossOrigin===!0?"":this.options.crossOrigin),this.options.zIndex&&this._updateZIndex(),t){this._url=e.src;return}e.src=this._url,e.alt=this.options.alt},_animateZoom:function(t){var e=this._map.getZoomScale(t.zoom),i=this._map._latLngBoundsToNewLayerBounds(this._bounds,t.zoom,t.center).min;le(this._image,i,e)},_reset:function(){var t=this._image,e=new j(this._map.latLngToLayerPoint(this._bounds.getNorthWest()),this._map.latLngToLayerPoint(this._bounds.getSouthEast())),i=e.getSize();ut(t,e.min),t.style.width=i.x+"px",t.style.height=i.y+"px"},_updateOpacity:function(){Tt(this._image,this.options.opacity)},_updateZIndex:function(){this._image&&this.options.zIndex!==void 0&&this.options.zIndex!==null&&(this._image.style.zIndex=this.options.zIndex)},_overlayOnError:function(){this.fire("error");var t=this.options.errorOverlayUrl;t&&this._url!==t&&(this._url=t,this._image.src=t)},getCenter:function(){return this._bounds.getCenter()}}),Jr=function(t,e,i){return new xi(t,e,i)},_s=xi.extend({options:{autoplay:!0,loop:!0,keepAspectRatio:!0,muted:!1,playsInline:!0},_initImage:function(){var t=this._url.tagName==="VIDEO",e=this._image=t?this._url:Y("video");if(q(e,"leaflet-image-layer"),this._zoomAnimated&&q(e,"leaflet-zoom-animated"),this.options.className&&q(e,this.options.className),e.onselectstart=y,e.onmousemove=y,e.onloadeddata=h(this.fire,this,"load"),t){for(var i=e.getElementsByTagName("source"),s=[],r=0;r0?s:[e.src];return}H(this._url)||(this._url=[this._url]),!this.options.keepAspectRatio&&Object.prototype.hasOwnProperty.call(e.style,"objectFit")&&(e.style.objectFit="fill"),e.autoplay=!!this.options.autoplay,e.loop=!!this.options.loop,e.muted=!!this.options.muted,e.playsInline=!!this.options.playsInline;for(var u=0;ur?(e.height=r+"px",q(t,u)):lt(t,u),this._containerWidth=this._container.offsetWidth},_animateZoom:function(t){var e=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center),i=this._getAnchor();ut(this._container,e.add(i))},_adjustPan:function(){if(this.options.autoPan){if(this._map._panAnim&&this._map._panAnim.stop(),this._autopanning){this._autopanning=!1;return}var t=this._map,e=parseInt(Fe(this._container,"marginBottom"),10)||0,i=this._container.offsetHeight+e,s=this._containerWidth,r=new z(this._containerLeft,-i-this._containerBottom);r._add(ce(this._container));var u=t.layerPointToContainerPoint(r),p=I(this.options.autoPanPadding),b=I(this.options.autoPanPaddingTopLeft||p),S=I(this.options.autoPanPaddingBottomRight||p),P=t.getSize(),C=0,$=0;u.x+s+S.x>P.x&&(C=u.x+s-P.x+S.x),u.x-C-b.x<0&&(C=u.x-b.x),u.y+i+S.y>P.y&&($=u.y+i-P.y+S.y),u.y-$-b.y<0&&($=u.y-b.y),(C||$)&&(this.options.keepInView&&(this._autopanning=!0),t.fire("autopanstart").panBy([C,$]))}},_getAnchor:function(){return I(this._source&&this._source._getPopupAnchor?this._source._getPopupAnchor():[0,0])}}),Qr=function(t,e){return new Ti(t,e)};J.mergeOptions({closePopupOnClick:!0}),J.include({openPopup:function(t,e,i){return this._initOverlay(Ti,t,e,i).openOn(this),this},closePopup:function(t){return t=arguments.length?t:this._popup,t&&t.close(),this}}),Mt.include({bindPopup:function(t,e){return this._popup=this._initOverlay(Ti,this._popup,t,e),this._popupHandlersAdded||(this.on({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!0),this},unbindPopup:function(){return this._popup&&(this.off({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!1,this._popup=null),this},openPopup:function(t){return this._popup&&(this instanceof Ft||(this._popup._source=this),this._popup._prepareOpen(t||this._latlng)&&this._popup.openOn(this._map)),this},closePopup:function(){return this._popup&&this._popup.close(),this},togglePopup:function(){return this._popup&&this._popup.toggle(this),this},isPopupOpen:function(){return this._popup?this._popup.isOpen():!1},setPopupContent:function(t){return this._popup&&this._popup.setContent(t),this},getPopup:function(){return this._popup},_openPopup:function(t){if(!(!this._popup||!this._map)){de(t);var e=t.layer||t.target;if(this._popup._source===e&&!(e instanceof ne)){this._map.hasLayer(this._popup)?this.closePopup():this.openPopup(t.latlng);return}this._popup._source=e,this.openPopup(t.latlng)}},_movePopup:function(t){this._popup.setLatLng(t.latlng)},_onKeyPress:function(t){t.originalEvent.keyCode===13&&this._openPopup(t)}});var Pi=Rt.extend({options:{pane:"tooltipPane",offset:[0,0],direction:"auto",permanent:!1,sticky:!1,opacity:.9},onAdd:function(t){Rt.prototype.onAdd.call(this,t),this.setOpacity(this.options.opacity),t.fire("tooltipopen",{tooltip:this}),this._source&&(this.addEventParent(this._source),this._source.fire("tooltipopen",{tooltip:this},!0))},onRemove:function(t){Rt.prototype.onRemove.call(this,t),t.fire("tooltipclose",{tooltip:this}),this._source&&(this.removeEventParent(this._source),this._source.fire("tooltipclose",{tooltip:this},!0))},getEvents:function(){var t=Rt.prototype.getEvents.call(this);return this.options.permanent||(t.preclick=this.close),t},_initLayout:function(){var t="leaflet-tooltip",e=t+" "+(this.options.className||"")+" leaflet-zoom-"+(this._zoomAnimated?"animated":"hide");this._contentNode=this._container=Y("div",e),this._container.setAttribute("role","tooltip"),this._container.setAttribute("id","leaflet-tooltip-"+m(this))},_updateLayout:function(){},_adjustPan:function(){},_setPosition:function(t){var e,i,s=this._map,r=this._container,u=s.latLngToContainerPoint(s.getCenter()),p=s.layerPointToContainerPoint(t),b=this.options.direction,S=r.offsetWidth,P=r.offsetHeight,C=I(this.options.offset),$=this._getAnchor();b==="top"?(e=S/2,i=P):b==="bottom"?(e=S/2,i=0):b==="center"?(e=S/2,i=P/2):b==="right"?(e=0,i=P/2):b==="left"?(e=S,i=P/2):p.xthis.options.maxZoom||is?this._retainParent(r,u,p,s):!1)},_retainChildren:function(t,e,i,s){for(var r=2*t;r<2*t+2;r++)for(var u=2*e;u<2*e+2;u++){var p=new z(r,u);p.z=i+1;var b=this._tileCoordsToKey(p),S=this._tiles[b];if(S&&S.active){S.retain=!0;continue}else S&&S.loaded&&(S.retain=!0);i+1this.options.maxZoom||this.options.minZoom!==void 0&&r1){this._setView(t,i);return}for(var $=r.min.y;$<=r.max.y;$++)for(var U=r.min.x;U<=r.max.x;U++){var _t=new z(U,$);if(_t.z=this._tileZoom,!!this._isValidTile(_t)){var mt=this._tiles[this._tileCoordsToKey(_t)];mt?mt.current=!0:p.push(_t)}}if(p.sort(function(gt,ke){return gt.distanceTo(u)-ke.distanceTo(u)}),p.length!==0){this._loading||(this._loading=!0,this.fire("loading"));var kt=document.createDocumentFragment();for(U=0;Ui.max.x)||!e.wrapLat&&(t.yi.max.y))return!1}if(!this.options.bounds)return!0;var s=this._tileCoordsToBounds(t);return it(this.options.bounds).overlaps(s)},_keyToBounds:function(t){return this._tileCoordsToBounds(this._keyToTileCoords(t))},_tileCoordsToNwSe:function(t){var e=this._map,i=this.getTileSize(),s=t.scaleBy(i),r=s.add(i),u=e.unproject(s,t.z),p=e.unproject(r,t.z);return[u,p]},_tileCoordsToBounds:function(t){var e=this._tileCoordsToNwSe(t),i=new st(e[0],e[1]);return this.options.noWrap||(i=this._map.wrapLatLngBounds(i)),i},_tileCoordsToKey:function(t){return t.x+":"+t.y+":"+t.z},_keyToTileCoords:function(t){var e=t.split(":"),i=new z(+e[0],+e[1]);return i.z=+e[2],i},_removeTile:function(t){var e=this._tiles[t];e&&(ot(e.el),delete this._tiles[t],this.fire("tileunload",{tile:e.el,coords:this._keyToTileCoords(t)}))},_initTile:function(t){q(t,"leaflet-tile");var e=this.getTileSize();t.style.width=e.x+"px",t.style.height=e.y+"px",t.onselectstart=y,t.onmousemove=y,O.ielt9&&this.options.opacity<1&&Tt(t,this.options.opacity)},_addTile:function(t,e){var i=this._getTilePos(t),s=this._tileCoordsToKey(t),r=this.createTile(this._wrapCoords(t),h(this._tileReady,this,t));this._initTile(r),this.createTile.length<2&&Q(h(this._tileReady,this,t,null,r)),ut(r,i),this._tiles[s]={el:r,coords:t,current:!0},e.appendChild(r),this.fire("tileloadstart",{tile:r,coords:t})},_tileReady:function(t,e,i){e&&this.fire("tileerror",{error:e,tile:i,coords:t});var s=this._tileCoordsToKey(t);i=this._tiles[s],i&&(i.loaded=+new Date,this._map._fadeAnimated?(Tt(i.el,0),et(this._fadeFrame),this._fadeFrame=Q(this._updateOpacity,this)):(i.active=!0,this._pruneTiles()),e||(q(i.el,"leaflet-tile-loaded"),this.fire("tileload",{tile:i.el,coords:t})),this._noTilesToLoad()&&(this._loading=!1,this.fire("load"),O.ielt9||!this._map._fadeAnimated?Q(this._pruneTiles,this):setTimeout(h(this._pruneTiles,this),250)))},_getTilePos:function(t){return t.scaleBy(this.getTileSize()).subtract(this._level.origin)},_wrapCoords:function(t){var e=new z(this._wrapX?w(t.x,this._wrapX):t.x,this._wrapY?w(t.y,this._wrapY):t.y);return e.z=t.z,e},_pxBoundsToTileRange:function(t){var e=this.getTileSize();return new j(t.min.unscaleBy(e).floor(),t.max.unscaleBy(e).ceil().subtract([1,1]))},_noTilesToLoad:function(){for(var t in this._tiles)if(!this._tiles[t].loaded)return!1;return!0}});function il(t){return new Je(t)}var Pe=Je.extend({options:{minZoom:0,maxZoom:18,subdomains:"abc",errorTileUrl:"",zoomOffset:0,tms:!1,zoomReverse:!1,detectRetina:!1,crossOrigin:!1,referrerPolicy:!1},initialize:function(t,e){this._url=t,e=T(this,e),e.detectRetina&&O.retina&&e.maxZoom>0?(e.tileSize=Math.floor(e.tileSize/2),e.zoomReverse?(e.zoomOffset--,e.minZoom=Math.min(e.maxZoom,e.minZoom+1)):(e.zoomOffset++,e.maxZoom=Math.max(e.minZoom,e.maxZoom-1)),e.minZoom=Math.max(0,e.minZoom)):e.zoomReverse?e.minZoom=Math.min(e.maxZoom,e.minZoom):e.maxZoom=Math.max(e.minZoom,e.maxZoom),typeof e.subdomains=="string"&&(e.subdomains=e.subdomains.split("")),this.on("tileunload",this._onTileRemove)},setUrl:function(t,e){return this._url===t&&e===void 0&&(e=!0),this._url=t,e||this.redraw(),this},createTile:function(t,e){var i=document.createElement("img");return B(i,"load",h(this._tileOnLoad,this,e,i)),B(i,"error",h(this._tileOnError,this,e,i)),(this.options.crossOrigin||this.options.crossOrigin==="")&&(i.crossOrigin=this.options.crossOrigin===!0?"":this.options.crossOrigin),typeof this.options.referrerPolicy=="string"&&(i.referrerPolicy=this.options.referrerPolicy),i.alt="",i.src=this.getTileUrl(t),i},getTileUrl:function(t){var e={r:O.retina?"@2x":"",s:this._getSubdomain(t),x:t.x,y:t.y,z:this._getZoomForUrl()};if(this._map&&!this._map.options.crs.infinite){var i=this._globalTileRange.max.y-t.y;this.options.tms&&(e.y=i),e["-y"]=i}return N(this._url,c(e,this.options))},_tileOnLoad:function(t,e){O.ielt9?setTimeout(h(t,this,null,e),0):t(null,e)},_tileOnError:function(t,e,i){var s=this.options.errorTileUrl;s&&e.getAttribute("src")!==s&&(e.src=s),t(i,e)},_onTileRemove:function(t){t.tile.onload=null},_getZoomForUrl:function(){var t=this._tileZoom,e=this.options.maxZoom,i=this.options.zoomReverse,s=this.options.zoomOffset;return i&&(t=e-t),t+s},_getSubdomain:function(t){var e=Math.abs(t.x+t.y)%this.options.subdomains.length;return this.options.subdomains[e]},_abortLoading:function(){var t,e;for(t in this._tiles)if(this._tiles[t].coords.z!==this._tileZoom&&(e=this._tiles[t].el,e.onload=y,e.onerror=y,!e.complete)){e.src=W;var i=this._tiles[t].coords;ot(e),delete this._tiles[t],this.fire("tileabort",{tile:e,coords:i})}},_removeTile:function(t){var e=this._tiles[t];if(e)return e.el.setAttribute("src",W),Je.prototype._removeTile.call(this,t)},_tileReady:function(t,e,i){if(!(!this._map||i&&i.getAttribute("src")===W))return Je.prototype._tileReady.call(this,t,e,i)}});function bs(t,e){return new Pe(t,e)}var ys=Pe.extend({defaultWmsParams:{service:"WMS",request:"GetMap",layers:"",styles:"",format:"image/jpeg",transparent:!1,version:"1.1.1"},options:{crs:null,uppercase:!1},initialize:function(t,e){this._url=t;var i=c({},this.defaultWmsParams);for(var s in e)s in this.options||(i[s]=e[s]);e=T(this,e);var r=e.detectRetina&&O.retina?2:1,u=this.getTileSize();i.width=u.x*r,i.height=u.y*r,this.wmsParams=i},onAdd:function(t){this._crs=this.options.crs||t.options.crs,this._wmsVersion=parseFloat(this.wmsParams.version);var e=this._wmsVersion>=1.3?"crs":"srs";this.wmsParams[e]=this._crs.code,Pe.prototype.onAdd.call(this,t)},getTileUrl:function(t){var e=this._tileCoordsToNwSe(t),i=this._crs,s=at(i.project(e[0]),i.project(e[1])),r=s.min,u=s.max,p=(this._wmsVersion>=1.3&&this._crs===hs?[r.y,r.x,u.y,u.x]:[r.x,r.y,u.x,u.y]).join(","),b=Pe.prototype.getTileUrl.call(this,t);return b+k(this.wmsParams,b,this.options.uppercase)+(this.options.uppercase?"&BBOX=":"&bbox=")+p},setParams:function(t,e){return c(this.wmsParams,t),e||this.redraw(),this}});function nl(t,e){return new ys(t,e)}Pe.WMS=ys,bs.wms=nl;var Ut=Mt.extend({options:{padding:.1},initialize:function(t){T(this,t),m(this),this._layers=this._layers||{}},onAdd:function(){this._container||(this._initContainer(),q(this._container,"leaflet-zoom-animated")),this.getPane().appendChild(this._container),this._update(),this.on("update",this._updatePaths,this)},onRemove:function(){this.off("update",this._updatePaths,this),this._destroyContainer()},getEvents:function(){var t={viewreset:this._reset,zoom:this._onZoom,moveend:this._update,zoomend:this._onZoomEnd};return this._zoomAnimated&&(t.zoomanim=this._onAnimZoom),t},_onAnimZoom:function(t){this._updateTransform(t.center,t.zoom)},_onZoom:function(){this._updateTransform(this._map.getCenter(),this._map.getZoom())},_updateTransform:function(t,e){var i=this._map.getZoomScale(e,this._zoom),s=this._map.getSize().multiplyBy(.5+this.options.padding),r=this._map.project(this._center,e),u=s.multiplyBy(-i).add(r).subtract(this._map._getNewPixelOrigin(t,e));O.any3d?le(this._container,u,i):ut(this._container,u)},_reset:function(){this._update(),this._updateTransform(this._center,this._zoom);for(var t in this._layers)this._layers[t]._reset()},_onZoomEnd:function(){for(var t in this._layers)this._layers[t]._project()},_updatePaths:function(){for(var t in this._layers)this._layers[t]._update()},_update:function(){var t=this.options.padding,e=this._map.getSize(),i=this._map.containerPointToLayerPoint(e.multiplyBy(-t)).round();this._bounds=new j(i,i.add(e.multiplyBy(1+t*2)).round()),this._center=this._map.getCenter(),this._zoom=this._map.getZoom()}}),ws=Ut.extend({options:{tolerance:0},getEvents:function(){var t=Ut.prototype.getEvents.call(this);return t.viewprereset=this._onViewPreReset,t},_onViewPreReset:function(){this._postponeUpdatePaths=!0},onAdd:function(){Ut.prototype.onAdd.call(this),this._draw()},_initContainer:function(){var t=this._container=document.createElement("canvas");B(t,"mousemove",this._onMouseMove,this),B(t,"click dblclick mousedown mouseup contextmenu",this._onClick,this),B(t,"mouseout",this._handleMouseOut,this),t._leaflet_disable_events=!0,this._ctx=t.getContext("2d")},_destroyContainer:function(){et(this._redrawRequest),delete this._ctx,ot(this._container),nt(this._container),delete this._container},_updatePaths:function(){if(!this._postponeUpdatePaths){var t;this._redrawBounds=null;for(var e in this._layers)t=this._layers[e],t._update();this._redraw()}},_update:function(){if(!(this._map._animatingZoom&&this._bounds)){Ut.prototype._update.call(this);var t=this._bounds,e=this._container,i=t.getSize(),s=O.retina?2:1;ut(e,t.min),e.width=s*i.x,e.height=s*i.y,e.style.width=i.x+"px",e.style.height=i.y+"px",O.retina&&this._ctx.scale(2,2),this._ctx.translate(-t.min.x,-t.min.y),this.fire("update")}},_reset:function(){Ut.prototype._reset.call(this),this._postponeUpdatePaths&&(this._postponeUpdatePaths=!1,this._updatePaths())},_initPath:function(t){this._updateDashArray(t),this._layers[m(t)]=t;var e=t._order={layer:t,prev:this._drawLast,next:null};this._drawLast&&(this._drawLast.next=e),this._drawLast=e,this._drawFirst=this._drawFirst||this._drawLast},_addPath:function(t){this._requestRedraw(t)},_removePath:function(t){var e=t._order,i=e.next,s=e.prev;i?i.prev=s:this._drawLast=s,s?s.next=i:this._drawFirst=i,delete t._order,delete this._layers[m(t)],this._requestRedraw(t)},_updatePath:function(t){this._extendRedrawBounds(t),t._project(),t._update(),this._requestRedraw(t)},_updateStyle:function(t){this._updateDashArray(t),this._requestRedraw(t)},_updateDashArray:function(t){if(typeof t.options.dashArray=="string"){var e=t.options.dashArray.split(/[, ]+/),i=[],s,r;for(r=0;r')}}catch{}return function(t){return document.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}})(),al={_initContainer:function(){this._container=Y("div","leaflet-vml-container")},_update:function(){this._map._animatingZoom||(Ut.prototype._update.call(this),this.fire("update"))},_initPath:function(t){var e=t._container=Ye("shape");q(e,"leaflet-vml-shape "+(this.options.className||"")),e.coordsize="1 1",t._path=Ye("path"),e.appendChild(t._path),this._updateStyle(t),this._layers[m(t)]=t},_addPath:function(t){var e=t._container;this._container.appendChild(e),t.options.interactive&&t.addInteractiveTarget(e)},_removePath:function(t){var e=t._container;ot(e),t.removeInteractiveTarget(e),delete this._layers[m(t)]},_updateStyle:function(t){var e=t._stroke,i=t._fill,s=t.options,r=t._container;r.stroked=!!s.stroke,r.filled=!!s.fill,s.stroke?(e||(e=t._stroke=Ye("stroke")),r.appendChild(e),e.weight=s.weight+"px",e.color=s.color,e.opacity=s.opacity,s.dashArray?e.dashStyle=H(s.dashArray)?s.dashArray.join(" "):s.dashArray.replace(/( *, *)/g," "):e.dashStyle="",e.endcap=s.lineCap.replace("butt","flat"),e.joinstyle=s.lineJoin):e&&(r.removeChild(e),t._stroke=null),s.fill?(i||(i=t._fill=Ye("fill")),r.appendChild(i),i.color=s.fillColor||s.color,i.opacity=s.fillOpacity):i&&(r.removeChild(i),t._fill=null)},_updateCircle:function(t){var e=t._point.round(),i=Math.round(t._radius),s=Math.round(t._radiusY||i);this._setPath(t,t._empty()?"M0 0":"AL "+e.x+","+e.y+" "+i+","+s+" 0,"+65535*360)},_setPath:function(t,e){t._path.v=e},_bringToFront:function(t){ye(t._container)},_bringToBack:function(t){we(t._container)}},ki=O.vml?Ye:Pa,Xe=Ut.extend({_initContainer:function(){this._container=ki("svg"),this._container.setAttribute("pointer-events","none"),this._rootGroup=ki("g"),this._container.appendChild(this._rootGroup)},_destroyContainer:function(){ot(this._container),nt(this._container),delete this._container,delete this._rootGroup,delete this._svgSize},_update:function(){if(!(this._map._animatingZoom&&this._bounds)){Ut.prototype._update.call(this);var t=this._bounds,e=t.getSize(),i=this._container;(!this._svgSize||!this._svgSize.equals(e))&&(this._svgSize=e,i.setAttribute("width",e.x),i.setAttribute("height",e.y)),ut(i,t.min),i.setAttribute("viewBox",[t.min.x,t.min.y,e.x,e.y].join(" ")),this.fire("update")}},_initPath:function(t){var e=t._path=ki("path");t.options.className&&q(e,t.options.className),t.options.interactive&&q(e,"leaflet-interactive"),this._updateStyle(t),this._layers[m(t)]=t},_addPath:function(t){this._rootGroup||this._initContainer(),this._rootGroup.appendChild(t._path),t.addInteractiveTarget(t._path)},_removePath:function(t){ot(t._path),t.removeInteractiveTarget(t._path),delete this._layers[m(t)]},_updatePath:function(t){t._project(),t._update()},_updateStyle:function(t){var e=t._path,i=t.options;e&&(i.stroke?(e.setAttribute("stroke",i.color),e.setAttribute("stroke-opacity",i.opacity),e.setAttribute("stroke-width",i.weight),e.setAttribute("stroke-linecap",i.lineCap),e.setAttribute("stroke-linejoin",i.lineJoin),i.dashArray?e.setAttribute("stroke-dasharray",i.dashArray):e.removeAttribute("stroke-dasharray"),i.dashOffset?e.setAttribute("stroke-dashoffset",i.dashOffset):e.removeAttribute("stroke-dashoffset")):e.setAttribute("stroke","none"),i.fill?(e.setAttribute("fill",i.fillColor||i.color),e.setAttribute("fill-opacity",i.fillOpacity),e.setAttribute("fill-rule",i.fillRule||"evenodd")):e.setAttribute("fill","none"))},_updatePoly:function(t,e){this._setPath(t,ka(t._parts,e))},_updateCircle:function(t){var e=t._point,i=Math.max(Math.round(t._radius),1),s=Math.max(Math.round(t._radiusY),1)||i,r="a"+i+","+s+" 0 1,0 ",u=t._empty()?"M0 0":"M"+(e.x-i)+","+e.y+r+i*2+",0 "+r+-i*2+",0 ";this._setPath(t,u)},_setPath:function(t,e){t._path.setAttribute("d",e)},_bringToFront:function(t){ye(t._path)},_bringToBack:function(t){we(t._path)}});O.vml&&Xe.include(al);function Ss(t){return O.svg||O.vml?new Xe(t):null}J.include({getRenderer:function(t){var e=t.options.renderer||this._getPaneRenderer(t.options.pane)||this.options.renderer||this._renderer;return e||(e=this._renderer=this._createRenderer()),this.hasLayer(e)||this.addLayer(e),e},_getPaneRenderer:function(t){if(t==="overlayPane"||t===void 0)return!1;var e=this._paneRenderers[t];return e===void 0&&(e=this._createRenderer({pane:t}),this._paneRenderers[t]=e),e},_createRenderer:function(t){return this.options.preferCanvas&&Ls(t)||Ss(t)}});var xs=xe.extend({initialize:function(t,e){xe.prototype.initialize.call(this,this._boundsToLatLngs(t),e)},setBounds:function(t){return this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return t=it(t),[t.getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}});function sl(t,e){return new xs(t,e)}Xe.create=ki,Xe.pointsToPath=ka,jt.geometryToLayer=yi,jt.coordsToLatLng=In,jt.coordsToLatLngs=wi,jt.latLngToCoords=On,jt.latLngsToCoords=Li,jt.getFeature=Te,jt.asFeature=Si,J.mergeOptions({boxZoom:!0});var Ts=Nt.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane,this._resetStateTimeout=0,t.on("unload",this._destroy,this)},addHooks:function(){B(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){nt(this._container,"mousedown",this._onMouseDown,this)},moved:function(){return this._moved},_destroy:function(){ot(this._pane),delete this._pane},_resetState:function(){this._resetStateTimeout=0,this._moved=!1},_clearDeferredResetState:function(){this._resetStateTimeout!==0&&(clearTimeout(this._resetStateTimeout),this._resetStateTimeout=0)},_onMouseDown:function(t){if(!t.shiftKey||t.which!==1&&t.button!==1)return!1;this._clearDeferredResetState(),this._resetState(),Ze(),pn(),this._startPoint=this._map.mouseEventToContainerPoint(t),B(document,{contextmenu:de,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseMove:function(t){this._moved||(this._moved=!0,this._box=Y("div","leaflet-zoom-box",this._container),q(this._container,"leaflet-crosshair"),this._map.fire("boxzoomstart")),this._point=this._map.mouseEventToContainerPoint(t);var e=new j(this._point,this._startPoint),i=e.getSize();ut(this._box,e.min),this._box.style.width=i.x+"px",this._box.style.height=i.y+"px"},_finish:function(){this._moved&&(ot(this._box),lt(this._container,"leaflet-crosshair")),je(),_n(),nt(document,{contextmenu:de,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseUp:function(t){if(!(t.which!==1&&t.button!==1)&&(this._finish(),!!this._moved)){this._clearDeferredResetState(),this._resetStateTimeout=setTimeout(h(this._resetState,this),0);var e=new st(this._map.containerPointToLatLng(this._startPoint),this._map.containerPointToLatLng(this._point));this._map.fitBounds(e).fire("boxzoomend",{boxZoomBounds:e})}},_onKeyDown:function(t){t.keyCode===27&&(this._finish(),this._clearDeferredResetState(),this._resetState())}});J.addInitHook("addHandler","boxZoom",Ts),J.mergeOptions({doubleClickZoom:!0});var Ps=Nt.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick,this)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick,this)},_onDoubleClick:function(t){var e=this._map,i=e.getZoom(),s=e.options.zoomDelta,r=t.originalEvent.shiftKey?i-s:i+s;e.options.doubleClickZoom==="center"?e.setZoom(r):e.setZoomAround(t.containerPoint,r)}});J.addInitHook("addHandler","doubleClickZoom",Ps),J.mergeOptions({dragging:!0,inertia:!0,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,easeLinearity:.2,worldCopyJump:!1,maxBoundsViscosity:0});var ks=Nt.extend({addHooks:function(){if(!this._draggable){var t=this._map;this._draggable=new ie(t._mapPane,t._container),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),this._draggable.on("predrag",this._onPreDragLimit,this),t.options.worldCopyJump&&(this._draggable.on("predrag",this._onPreDragWrap,this),t.on("zoomend",this._onZoomEnd,this),t.whenReady(this._onZoomEnd,this))}q(this._map._container,"leaflet-grab leaflet-touch-drag"),this._draggable.enable(),this._positions=[],this._times=[]},removeHooks:function(){lt(this._map._container,"leaflet-grab"),lt(this._map._container,"leaflet-touch-drag"),this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},moving:function(){return this._draggable&&this._draggable._moving},_onDragStart:function(){var t=this._map;if(t._stop(),this._map.options.maxBounds&&this._map.options.maxBoundsViscosity){var e=it(this._map.options.maxBounds);this._offsetLimit=at(this._map.latLngToContainerPoint(e.getNorthWest()).multiplyBy(-1),this._map.latLngToContainerPoint(e.getSouthEast()).multiplyBy(-1).add(this._map.getSize())),this._viscosity=Math.min(1,Math.max(0,this._map.options.maxBoundsViscosity))}else this._offsetLimit=null;t.fire("movestart").fire("dragstart"),t.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(t){if(this._map.options.inertia){var e=this._lastTime=+new Date,i=this._lastPos=this._draggable._absPos||this._draggable._newPos;this._positions.push(i),this._times.push(e),this._prunePositions(e)}this._map.fire("move",t).fire("drag",t)},_prunePositions:function(t){for(;this._positions.length>1&&t-this._times[0]>50;)this._positions.shift(),this._times.shift()},_onZoomEnd:function(){var t=this._map.getSize().divideBy(2),e=this._map.latLngToLayerPoint([0,0]);this._initialWorldOffset=e.subtract(t).x,this._worldWidth=this._map.getPixelWorldBounds().getSize().x},_viscousLimit:function(t,e){return t-(t-e)*this._viscosity},_onPreDragLimit:function(){if(!(!this._viscosity||!this._offsetLimit)){var t=this._draggable._newPos.subtract(this._draggable._startPos),e=this._offsetLimit;t.xe.max.x&&(t.x=this._viscousLimit(t.x,e.max.x)),t.y>e.max.y&&(t.y=this._viscousLimit(t.y,e.max.y)),this._draggable._newPos=this._draggable._startPos.add(t)}},_onPreDragWrap:function(){var t=this._worldWidth,e=Math.round(t/2),i=this._initialWorldOffset,s=this._draggable._newPos.x,r=(s-e+i)%t+e-i,u=(s+e+i)%t-e-i,p=Math.abs(r+i)0?u:-u))-e;this._delta=0,this._startTime=null,p&&(t.options.scrollWheelZoom==="center"?t.setZoom(e+p):t.setZoomAround(this._lastMousePos,e+p))}});J.addInitHook("addHandler","scrollWheelZoom",Cs);var ol=600;J.mergeOptions({tapHold:O.touchNative&&O.safari&&O.mobile,tapTolerance:15});var Ms=Nt.extend({addHooks:function(){B(this._map._container,"touchstart",this._onDown,this)},removeHooks:function(){nt(this._map._container,"touchstart",this._onDown,this)},_onDown:function(t){if(clearTimeout(this._holdTimeout),t.touches.length===1){var e=t.touches[0];this._startPos=this._newPos=new z(e.clientX,e.clientY),this._holdTimeout=setTimeout(h(function(){this._cancel(),this._isTapValid()&&(B(document,"touchend",ft),B(document,"touchend touchcancel",this._cancelClickPrevent),this._simulateEvent("contextmenu",e))},this),ol),B(document,"touchend touchcancel contextmenu",this._cancel,this),B(document,"touchmove",this._onMove,this)}},_cancelClickPrevent:function t(){nt(document,"touchend",ft),nt(document,"touchend touchcancel",t)},_cancel:function(){clearTimeout(this._holdTimeout),nt(document,"touchend touchcancel contextmenu",this._cancel,this),nt(document,"touchmove",this._onMove,this)},_onMove:function(t){var e=t.touches[0];this._newPos=new z(e.clientX,e.clientY)},_isTapValid:function(){return this._newPos.distanceTo(this._startPos)<=this._map.options.tapTolerance},_simulateEvent:function(t,e){var i=new MouseEvent(t,{bubbles:!0,cancelable:!0,view:window,screenX:e.screenX,screenY:e.screenY,clientX:e.clientX,clientY:e.clientY});i._simulated=!0,e.target.dispatchEvent(i)}});J.addInitHook("addHandler","tapHold",Ms),J.mergeOptions({touchZoom:O.touch,bounceAtZoomLimits:!0});var Es=Nt.extend({addHooks:function(){q(this._map._container,"leaflet-touch-zoom"),B(this._map._container,"touchstart",this._onTouchStart,this)},removeHooks:function(){lt(this._map._container,"leaflet-touch-zoom"),nt(this._map._container,"touchstart",this._onTouchStart,this)},_onTouchStart:function(t){var e=this._map;if(!(!t.touches||t.touches.length!==2||e._animatingZoom||this._zooming)){var i=e.mouseEventToContainerPoint(t.touches[0]),s=e.mouseEventToContainerPoint(t.touches[1]);this._centerPoint=e.getSize()._divideBy(2),this._startLatLng=e.containerPointToLatLng(this._centerPoint),e.options.touchZoom!=="center"&&(this._pinchStartLatLng=e.containerPointToLatLng(i.add(s)._divideBy(2))),this._startDist=i.distanceTo(s),this._startZoom=e.getZoom(),this._moved=!1,this._zooming=!0,e._stop(),B(document,"touchmove",this._onTouchMove,this),B(document,"touchend touchcancel",this._onTouchEnd,this),ft(t)}},_onTouchMove:function(t){if(!(!t.touches||t.touches.length!==2||!this._zooming)){var e=this._map,i=e.mouseEventToContainerPoint(t.touches[0]),s=e.mouseEventToContainerPoint(t.touches[1]),r=i.distanceTo(s)/this._startDist;if(this._zoom=e.getScaleZoom(r,this._startZoom),!e.options.bounceAtZoomLimits&&(this._zoome.getMaxZoom()&&r>1)&&(this._zoom=e._limitZoom(this._zoom)),e.options.touchZoom==="center"){if(this._center=this._startLatLng,r===1)return}else{var u=i._add(s)._divideBy(2)._subtract(this._centerPoint);if(r===1&&u.x===0&&u.y===0)return;this._center=e.unproject(e.project(this._pinchStartLatLng,this._zoom).subtract(u),this._zoom)}this._moved||(e._moveStart(!0,!1),this._moved=!0),et(this._animRequest);var p=h(e._move,e,this._center,this._zoom,{pinch:!0,round:!1},void 0);this._animRequest=Q(p,this,!0),ft(t)}},_onTouchEnd:function(){if(!this._moved||!this._zooming){this._zooming=!1;return}this._zooming=!1,et(this._animRequest),nt(document,"touchmove",this._onTouchMove,this),nt(document,"touchend touchcancel",this._onTouchEnd,this),this._map.options.zoomAnimation?this._map._animateZoom(this._center,this._map._limitZoom(this._zoom),!0,this._map.options.zoomSnap):this._map._resetView(this._center,this._map._limitZoom(this._zoom))}});J.addInitHook("addHandler","touchZoom",Es),J.BoxZoom=Ts,J.DoubleClickZoom=Ps,J.Drag=ks,J.Keyboard=As,J.ScrollWheelZoom=Cs,J.TapHold=Ms,J.TouchZoom=Es,o.Bounds=j,o.Browser=O,o.CRS=vt,o.Canvas=ws,o.Circle=En,o.CircleMarker=bi,o.Class=ht,o.Control=Ct,o.DivIcon=gs,o.DivOverlay=Rt,o.DomEvent=xr,o.DomUtil=Lr,o.Draggable=ie,o.Evented=te,o.FeatureGroup=Ft,o.GeoJSON=jt,o.GridLayer=Je,o.Handler=Nt,o.Icon=Se,o.ImageOverlay=xi,o.LatLng=D,o.LatLngBounds=st,o.Layer=Mt,o.LayerGroup=Le,o.LineUtil=zr,o.Map=J,o.Marker=gi,o.Mixin=Er,o.Path=ne,o.Point=z,o.PolyUtil=Ir,o.Polygon=xe,o.Polyline=Zt,o.Popup=Ti,o.PosAnimation=ts,o.Projection=Br,o.Rectangle=xs,o.Renderer=Ut,o.SVG=Xe,o.SVGOverlay=vs,o.TileLayer=Pe,o.Tooltip=Pi,o.Transformation=nn,o.Util=Ht,o.VideoOverlay=_s,o.bind=h,o.bounds=at,o.canvas=Ls,o.circle=Vr,o.circleMarker=Ur,o.control=We,o.divIcon=el,o.extend=c,o.featureGroup=Fr,o.geoJSON=ps,o.geoJson=Kr,o.gridLayer=il,o.icon=Zr,o.imageOverlay=Jr,o.latLng=F,o.latLngBounds=it,o.layerGroup=Hr,o.map=Tr,o.marker=jr,o.point=I,o.polygon=Gr,o.polyline=Wr,o.popup=Qr,o.rectangle=sl,o.setOptions=T,o.stamp=m,o.svg=Ss,o.svgOverlay=Xr,o.tileLayer=bs,o.tooltip=tl,o.transformation=De,o.version=l,o.videoOverlay=Yr;var rl=window.L;o.noConflict=function(){return window.L=rl,this},window.L=o}))})(ti,ti.exports)),ti.exports}var bc=gc();const fe=_c(bc),Gn=new Set;["hashchange","pagehide","beforeunload"].forEach(n=>{window.addEventListener(n,()=>{Lc()})});function St(n){const a=String(n??"").trim().replace(",",".");if(!a)return null;const o=Number(a);return Number.isFinite(o)?o:null}function Yt(n,a){const o=St(n),l=St(a);return!(o===null||l===null||o<-90||o>90||l<-180||l>180)}function pa(n,a){return Yt(n,a)?`${St(n).toFixed(6)}, ${St(a).toFixed(6)}`:""}function yc(n,a,o=""){const l=St(n),c=St(a),d=`${l},${c}`,h=o?`${d} (${o})`:d;return`https://www.google.com/maps/search/?api=1&query=${encodeURIComponent(h)}`}function wc(n,a,o=""){const l=St(n),c=St(a),d=`${l},${c}`,h=o?`${d} (${o})`:d;return`https://www.google.com/maps/dir/?api=1&destination=${encodeURIComponent(h)}&travelmode=driving`}function _a(n,a,o=""){if(!Yt(n,a))return!1;const l=yc(n,a,o);return ba(l,{preferExternalApp:Mo()}),!0}function va(n,a,o=""){if(!Yt(n,a))return!1;const l=St(n),c=St(a),d=`google.navigation:q=${l},${c}&mode=d`,h=wc(l,c,o);return Mo()?(Sc(d,h),!0):(ba(h),!0)}function Ao({mapElement:n,destinationLat:a,destinationLng:o,destinationLabel:l="",statusElement:c,distanceElement:d,durationElement:h,technicianCoordsElement:f}){if(!n||!Yt(a,o))return null;ga(n);const m=[St(a),St(o)],g=fe.map(n,{zoomControl:!0,attributionControl:!0}).setView(m,14);fe.tileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",{attribution:"© OpenStreetMap contributors",maxZoom:19}).addTo(g);const w=fe.circleMarker(m,{radius:10,color:"#0f6cbd",weight:3,fillColor:"#22c1c3",fillOpacity:.85}).addTo(g).bindPopup(l||"Destination client");let y=null,v=null,_=null,x=!1,T=null,k=null,M=null,N=null;me(c,"Recherche de votre position GPS…","secondary"),At(d,"En attente"),At(h,"En attente"),At(f,"Position en cours de détection"),xc(g,()=>!x);const H={destroy(){x||(x=!0,T!==null&&navigator.geolocation&&navigator.geolocation.clearWatch(T),_&&g.removeLayer(_),v&&g.removeLayer(v),y&&g.removeLayer(y),g.remove(),Gn.delete(H),n.__liveRouteController===H&&delete n.__liveRouteController)}};if(n.__liveRouteController=H,Gn.add(H),!navigator.geolocation)return me(c,"La géolocalisation n’est pas disponible sur cet appareil.","warning"),H;const K=async W=>{var E,R,rt;const tt=Ws(W[0],W[1],m[0],m[1]);if(At(d,Ei(tt)),At(f,pa(W[0],W[1])),!(!k||Ws(W[0],W[1],k[0],k[1])>20)&&M!==null){At(d,Ei(M)),At(h,Gs(N)),me(c,"Trajet actualisé depuis votre position.","success"),Dn(g,y,w,_);return}k=W,me(c,"Calcul de l’itinéraire en cours…","secondary");try{const Q=`https://router.project-osrm.org/route/v1/driving/${W[1]},${W[0]};${m[1]},${m[0]}?overview=full&geometries=geojson`,et=await fetch(Q);if(!et.ok)throw new Error("route_http");const Ht=await et.json(),ht=((E=Ht==null?void 0:Ht.routes)==null?void 0:E[0])||null;if(!((rt=(R=ht==null?void 0:ht.geometry)==null?void 0:R.coordinates)!=null&&rt.length))throw new Error("route_empty");_&&g.removeLayer(_),_=fe.geoJSON(ht.geometry,{style:{color:"#0f6cbd",weight:5,opacity:.9}}).addTo(g),M=Number(ht.distance||tt),N=Number(ht.duration||0),At(d,Ei(M)),At(h,Gs(N)),me(c,"Itinéraire temps réel prêt.","success"),Dn(g,y,w,_)}catch{M=tt,N=null,At(d,Ei(tt)),At(h,"Non disponible"),me(c,"Position récupérée, mais le calcul d’itinéraire n’a pas abouti.","warning"),Dn(g,y,w,_)}};return T=navigator.geolocation.watchPosition(W=>{if(x)return;const tt=[W.coords.latitude,W.coords.longitude];y?y.setLatLng(tt):y=fe.circleMarker(tt,{radius:9,color:"#15803d",weight:3,fillColor:"#22c55e",fillOpacity:.82}).addTo(g).bindPopup("Votre position"),v?(v.setLatLng(tt),v.setRadius(Math.max(Number(W.coords.accuracy||20),15))):v=fe.circle(tt,{radius:Math.max(Number(W.coords.accuracy||20),15),color:"#15803d",weight:1,fillColor:"#22c55e",fillOpacity:.12}).addTo(g),K(tt)},()=>{x||(me(c,"Impossible de récupérer votre position GPS en direct.","danger"),At(f,"Autorisation ou GPS indisponible"))},{enableHighAccuracy:!0,maximumAge:5e3,timeout:15e3}),H}function ga(n){var a;(a=n==null?void 0:n.__liveRouteController)==null||a.destroy()}function Ws(n,a,o,l){const d=Ii(o-n),h=Ii(l-a),f=Math.sin(d/2)**2+Math.cos(Ii(n))*Math.cos(Ii(o))*Math.sin(h/2)**2;return 6371e3*(2*Math.atan2(Math.sqrt(f),Math.sqrt(1-f)))}function Lc(){Array.from(Gn).forEach(n=>n.destroy())}function Dn(n,a,o,l){if(l){n.fitBounds(l.getBounds(),{padding:[18,18]});return}const c=fe.latLngBounds([]);a&&c.extend(a.getLatLng()),o&&c.extend(o.getLatLng()),c.isValid()&&n.fitBounds(c,{padding:[22,22]})}function me(n,a,o){n&&(n.textContent=a,n.className=`mobile-route-status tone-${o||"secondary"}`)}function At(n,a){n&&(n.textContent=a)}function Ei(n){return Number.isFinite(n)?n>=1e3?`${(n/1e3).toFixed(1)} km`:`${Math.round(n)} m`:"Non disponible"}function Gs(n){if(!Number.isFinite(n)||n<=0)return"Non disponible";const a=Math.round(n/60),o=Math.floor(a/60),l=a%60;return o>0?`${o} h ${String(l).padStart(2,"0")} min`:`${a} min`}function Ii(n){return n*Math.PI/180}async function Sc(n,a){try{await ko.openUrl({url:n});return}catch{await ba(a,{preferExternalApp:!0})}}async function ba(n,{preferExternalApp:a=!1}={}){if(!n)return!1;if(Co()){if(a)try{return await ko.openUrl({url:n}),!0}catch{}try{return await pc.open({url:n}),!0}catch{}}return typeof window.open=="function"?(window.open(n,"_blank","noopener"),!0):(window.location.href=n,!0)}function xc(n,a){const o=()=>{a()&&n.invalidateSize()};typeof window.requestAnimationFrame=="function"&&window.requestAnimationFrame(()=>{window.requestAnimationFrame(o)}),window.setTimeout(o,180),window.setTimeout(o,420)}function Co(){return typeof(X==null?void 0:X.isNativePlatform)=="function"&&X.isNativePlatform()}function Mo(){return!Co()||typeof(X==null?void 0:X.getPlatform)!="function"?!1:X.getPlatform()==="android"}const Di=5e3,Kn=4;async function Tc(n){n.innerHTML=`
proximité agent
Clients FTTH proches

Consultez les clients déjà traités, identifiez ceux à proximité et démarrez un itinéraire terrain immédiatement.

Recherche de votre position terrain…
Chargement des clients de proximité…
`;const a=n.querySelector("#nearbyStatusBox"),o=n.querySelector("#nearbyList");async function l(){o.innerHTML='
Chargement des clients de proximité…
';const[c,d]=await Promise.all([xt("/api/mobile/ftth/nearby").catch(()=>null),kc().catch(()=>null)]),h=Array.isArray(c==null?void 0:c.clients)?c.clients:[],f=Ac(h,d),m=d?f.filter(w=>w.isNearby):f,g=d?f.filter(w=>w.distanceMeters!==null&&!w.isNearby).length:0;if(d?(a.className="mobile-route-status tone-success",a.textContent=g>0?`Position détectée: ${ae(d.accuracy||0)} de précision environ. ${m.length} client(s) dans un rayon de ${ae(Di)}. ${g} client(s) trop éloigné(s) masqué(s).`:`Position détectée: ${ae(d.accuracy||0)} de précision environ. ${m.length} client(s) dans un rayon de ${ae(Di)}.`):(a.className="mobile-route-status tone-warning",a.textContent=`Position indisponible ou précision GPS insuffisante. Une précision de ${ae(Kn)} est requise.`),!m.length){o.innerHTML=`

Aucun client proche exploitable.

${d?`Aucun client n’a été trouvé dans un rayon de ${ae(Di)} autour de votre position actuelle.`:`Les clients apparaîtront ici dès qu’une position avec une précision de ${ae(Kn)} ou mieux sera disponible.`}

`;return}o.innerHTML=m.map(w=>Pc(w)).join(""),o.querySelectorAll(".js-proximity-map").forEach(w=>{w.addEventListener("click",()=>{_a(w.getAttribute("data-lat"),w.getAttribute("data-lng"),w.getAttribute("data-label")||"Client FTTH")})}),o.querySelectorAll(".js-proximity-route").forEach(w=>{w.addEventListener("click",()=>{const y=Number(w.getAttribute("data-id")||0),v=w.getAttribute("data-lat"),_=w.getAttribute("data-lng"),x=w.getAttribute("data-label")||"Client FTTH";va(v,_,x),jl({id:`nearby-route-${y}-${Date.now()}`,title:"Itinéraire démarré",body:`Navigation lancée vers ${x}.`,route:"/nearby",icon:"fa-route",tone:y?"info":"neutral"},{playSound:!0})})})}n.querySelector("#btnRefreshNearby").addEventListener("click",l),await l()}function Pc(n){const a=Number(n.has_active_maintenance||0)===1,o=a&&Number(n.assigned_to_me||0)===1,l=n.distanceMeters!==null?`${ae(n.distanceMeters)}${n.isNearby?" • à proximité":""}`:"Distance indisponible",c=a?'Maintenance active':Number(n.is_maintenance||0)===1?'Historique maintenance':"";return`
${se(n.client_name||"Client FTTH")}
${se(n.ref_code||n.site_name||"Historique client")}
${c}
${se(n.client_address||n.site_name||"Adresse non renseignée")}
${se(l)} ${se(n.report_status||"rapport")} ${Number(n.assigned_to_me||0)===1?'Assigné à moi':""}
${n.nature_intervention?`
${se(n.nature_intervention)}
`:""} ${n.last_reported_at?`
Dernier traitement: ${se(Mc(n.last_reported_at))}
`:""}
${o?` Ouvrir la maintenance `:""}
`}function kc(){return new Promise((n,a)=>{if(!navigator.geolocation){a(new Error("geolocation_unavailable"));return}navigator.geolocation.getCurrentPosition(o=>{const l=Number(o.coords.accuracy||0);if(!Number.isFinite(l)||l<=0||l>Kn){a(new Error("geolocation_accuracy_insufficient"));return}n({lat:Number(o.coords.latitude),lng:Number(o.coords.longitude),accuracy:l})},a,{enableHighAccuracy:!0,maximumAge:0,timeout:2e4})})}function Ac(n,a){return[...n].map(o=>{const l=St(o.client_lat),c=St(o.client_lng),d=Yt(l,c),h=a&&d?Cc(a.lat,a.lng,l,c):null;return{...o,client_lat:d?l:null,client_lng:d?c:null,distanceMeters:h,isNearby:!a||h!==null&&h<=Di}}).filter(o=>Yt(o.client_lat,o.client_lng)).sort((o,l)=>Number(o.has_active_maintenance||0)!==Number(l.has_active_maintenance||0)?Number(l.has_active_maintenance||0)-Number(o.has_active_maintenance||0):o.distanceMeters===null&&l.distanceMeters===null?0:o.distanceMeters===null?1:l.distanceMeters===null?-1:o.distanceMeters-l.distanceMeters)}function Cc(n,a,o,l){const d=g=>g*Math.PI/180,h=d(o-n),f=d(l-a),m=Math.sin(h/2)**2+Math.cos(d(n))*Math.cos(d(o))*Math.sin(f/2)**2;return 6371e3*2*Math.atan2(Math.sqrt(m),Math.sqrt(1-m))}function ae(n){const a=Number(n||0);return!Number.isFinite(a)||a<=0?"0 m":a<1e3?`${Math.round(a)} m`:`${(a/1e3).toFixed(a<1e4?1:0)} km`}function Mc(n){const a=new Date(String(n||"").replace(" ","T"));return Number.isNaN(a.getTime())?String(n||"—"):a.toLocaleString("fr-FR")}function se(n){return String(n??"").replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function Ae(n){return se(n)}async function Ec(n){n.innerHTML=`
Incidents assignés
`;const a=n.querySelector("#box"),o=n.querySelector("#btnRefresh");async function l(){a.innerHTML='
Chargement…
';try{const c=await xt("/api/mobile/incidents/assigned"),d=(c==null?void 0:c.incidents)||[];if(ua({incidents:d}),!d.length){a.innerHTML='
Aucun incident assigné.
';return}a.innerHTML=d.map(h=>{const f=Number(h.id||0),m=h.ticket_id||`INC-${f}`,g=(h.title||"").toString(),w=(h.priority||"").toString(),y=(h.status_label||"").toString();return`
${Oi(m)}
${Oi(g)}
${Oi(w)}
${Oi(y)}
`}).join("")}catch{a.innerHTML='
Impossible de charger la liste.
'}}o.addEventListener("click",l),await l()}function Oi(n){return String(n).replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function ya(n){return`insuite_draft_${n}`}function qn(n,a){localStorage.setItem(ya(n),JSON.stringify({savedAt:new Date().toISOString(),payload:a}))}function Ic(n){const a=localStorage.getItem(ya(n));if(!a)return null;try{return JSON.parse(a)}catch{return null}}function Oc(n){localStorage.removeItem(ya(n))}async function $c(n,{incidentId:a}){if(!a){n.innerHTML='
Incident invalide.
';return}n.innerHTML=`
Traitement
Retour
Équipe

Diagnostic

Intervention

OTDR & pièces

Statut

Matériels (1 ligne)

Photos

`;const o=n.querySelector("#meta"),l=n.querySelector("#draftInfo"),c=n.querySelector("#okBox"),d=n.querySelector("#errBox"),h=n.querySelector("#treatForm");function f(_){c.textContent=_,c.style.display="block",d.style.display="none"}function m(_){d.textContent=_,d.style.display="block",c.style.display="none"}function g(_){if(!_)return;const x=Object.entries(_);for(const[T,k]of x){const M=h.querySelector(`[name="${Nc(T)}"]`);M&&(M.type==="checkbox"?M.checked=!!k:(M.type,M.value=String(k??"")))}}const w=Ic(a);w!=null&&w.payload&&(l.style.display="block",l.textContent=`Brouillon local détecté (sauvé le ${w.savedAt}).`,g(w.payload));try{const _=await xt(`/api/mobile/treatment?id=${a}`);if(_!=null&&_.ok&&_.incident){const x=_.incident.ticket_id||`INC-${a}`;o.textContent=`${x} — ${_.incident.title||""}`.trim(),_.report&&g({team_name:_.report.team_name,team_contact:_.report.team_contact,type_of_incident:_.report.type_of_incident,detection_mode:_.report.detection_mode,cut_distance_km:_.report.cut_distance_km,gps_lat:_.report.gps_lat,gps_lng:_.report.gps_lng,fault_nature:_.report.fault_nature,takeover_at:Hn(_.report.takeover_at),intervention_start:Hn(_.report.intervention_start),intervention_end:Hn(_.report.intervention_end),repair_type:_.report.repair_type,work_comments:_.report.work_comments,otdr_result:_.report.otdr_result,resolution_status:_.report.resolution_status,need_additional:_.report.need_additional})}}catch{o.textContent=`INC-${a}`}function y(){const _={},x=new FormData(h);for(const[T,k]of x.entries())k instanceof File||(_[T]=k);return _}n.querySelector("#btnSaveDraft").addEventListener("click",()=>{const _=y();qn(a,_),f("Brouillon sauvegardé localement.")});async function v(_){c.style.display="none",d.style.display="none";const x=new FormData(h);if(x.set("action_type",_),!navigator.onLine){const T=y();qn(a,T),f("Hors-ligne: brouillon sauvegardé localement.");return}try{const T=await wo("/api/mobile/treatment/save",x);if(T!=null&&T.ok){_==="submit"?(Oc(a),f("Traitement soumis.")):(qn(a,y()),f("Traitement sauvegardé (draft)."));return}m("Erreur lors de la sauvegarde.")}catch{m("Erreur réseau ou serveur.")}}n.querySelector("#btnSyncDraft").addEventListener("click",()=>v("draft")),n.querySelector("#btnSubmit").addEventListener("click",()=>v("submit"))}function Hn(n){return n?String(n).replace(" ","T").slice(0,16):""}function Nc(n){return String(n).replaceAll('"','\\"')}const Rc={nouveau:{label:"Nouveau",cls:"text-bg-primary"},assigné:{label:"Assigné",cls:"text-bg-warning"},en_cours:{label:"En cours",cls:"text-bg-info"},attente_planification:{label:"Attente planification",cls:"text-bg-dark"},traité:{label:"Traité",cls:"text-bg-success"},validé:{label:"Validé",cls:"text-bg-success"},clôturé:{label:"Clôturé",cls:"text-bg-secondary"}},zc={Urgent:"text-bg-danger",Haute:"text-bg-warning",Moyenne:"text-bg-primary",Basse:"text-bg-secondary"},Ks={brouillon:"📝 Brouillon",soumis:"⏳ En attente validation",validé:"✅ Validé",rejeté:"❌ Rejeté",null:"— À remplir"},Bc={intervention_effectuee:"Intervention réalisée",client_indisponible:"Client indisponible",reprogrammation_demandee:"Reprogrammation demandée"},Fn="insuite_ftth_flash",bt={subscription:["NumeroAbonnement","Numero Abonnement","Numéro Abonnement","Abonnement"],customerName:["NomClient","Nom client","Nom du client"],address:["Localisation","LOCALISATION","Adresse intervention"],contact1:["Contact1","CONTACT CLIENT 1","Contact client 1"],contact2:["Contact2","CONTACT CLIENT 2","Contact client 2"],plaque:["PLAQUE","Plaque"],jdv:["JDV","JDV CLIENT"],pco:["PCO","PCO CLIENT"],snont:["SNONT"],nd:["ND"],progress:["Avancement"],company:["EntrepriseFTTH","Entreprise"],city:["Ville"],commune:["Commune"]};async function Dc(n,{experience:a}={}){var w;const o=a||{moduleListTitle:"Interventions assignées",moduleHeroSubtitle:"Raccordements clients et maintenance FTTH regroupés dans une seule vue terrain."},l=new Map;n.innerHTML=`
portefeuille terrain
${ct(o.moduleListTitle||"Interventions assignées")}

${ct(o.moduleHeroSubtitle||"Raccordements clients et maintenance FTTH regroupés dans une seule vue terrain.")}

Chargement…
`;const c=n.querySelector("#ftthFlashBox"),d=n.querySelector("#loadBox"),h=n.querySelector("#listBox");Fc(c);const f=qc((w=a==null?void 0:a.profile)==null?void 0:w.role_key),m=n.querySelector("#validationBox");async function g(){var y;l.forEach((v,_)=>{var x;(x=v==null?void 0:v.destroy)==null||x.call(v),l.delete(_)}),d.style.display="block",d.textContent="Chargement…",h.innerHTML="",m&&(m.style.display="none");try{const v=await xt("/api/mobile/ftth/assigned");ua({tickets:(v==null?void 0:v.tickets)||[]}),d.style.display="none",!(v!=null&&v.ok)||!((y=v.tickets)!=null&&y.length)?h.innerHTML=`

Aucune intervention assignée.

Le portefeuille se mettra à jour dès qu'une mission terrain vous sera affectée.

`:(h.innerHTML=v.tickets.map(_=>{const x=Js(_),T=Rc[_.status]||{label:_.status,cls:"text-bg-secondary"},k=zc[_.priority]||"text-bg-secondary",M=Ks[_.report_status]||Ks.null,N=Bc[_.client_visit_status]||"",H=_.planned_intervention_date?`${Yn(_.planned_intervention_date)}${_.planned_intervention_time?` a ${String(_.planned_intervention_time).slice(0,5)}`:""}`:"",K=Yt(_.client_lat,_.client_lng);return`
${ct(x.title)}
${ct(x.subtitle)}
${ct(_.priority)}
${x.address?`
${ct(x.address)}
`:""}
${ct(x.headline)}
${x.networkPath?`
${ct(x.networkPath)}
`:""} ${x.secondaryLine?`
${ct(x.secondaryLine)}
`:""}
${T.label} ${M} ${ct(x.modeLabel)} ${N?`${ct(N)}`:""} ${K?'GPS':""}
Assigné le ${Yn(_.assigned_at)}
Ouvrir
${H?`
Replanifié pour ${ct(H)}
`:""} ${K?`
`:""}
`}).join(""),h.querySelectorAll("[data-id]").forEach(_=>{_.addEventListener("click",()=>{location.hash="#/ftth-report?id="+_.dataset.id})}),h.querySelectorAll("[data-card-action]").forEach(_=>{_.addEventListener("click",x=>{x.stopPropagation()})}),h.querySelectorAll(".js-toggle-ftth-map").forEach(_=>{_.addEventListener("click",x=>{var H;x.stopPropagation();const T=_.getAttribute("data-map-target")||"",k=T?document.getElementById(T):null;if(!k)return;const M=k.hidden;k.hidden=!M;const N=String(T).replace("ftth-map-","");if(M){const K=document.getElementById(`ftth-map-canvas-${N}`),W=document.getElementById(`ftth-map-status-${N}`),tt=document.getElementById(`ftth-map-distance-${N}`),V=document.getElementById(`ftth-map-duration-${N}`),E=document.getElementById(`ftth-map-tech-${N}`),R=_.getAttribute("data-label")||"",rt=_.closest("[data-id]"),Q=v.tickets.find(et=>String(et.id)===String((rt==null?void 0:rt.dataset.id)||N));if(Q&&K){const et=Js(Q),Ht=Ao({mapElement:K,destinationLat:Q.client_lat,destinationLng:Q.client_lng,destinationLabel:et.mapLabel,statusElement:W,distanceElement:tt,durationElement:V,technicianCoordsElement:E});l.set(N,Ht)}}else{const K=l.get(N);(H=K==null?void 0:K.destroy)==null||H.call(K),l.delete(N);const W=document.getElementById(`ftth-map-canvas-${N}`);ga(W)}_.innerHTML=M?'Masquer carte':'Carte'})}),h.querySelectorAll(".js-start-route").forEach(_=>{_.addEventListener("click",x=>{x.stopPropagation(),va(_.getAttribute("data-lat"),_.getAttribute("data-lng"),_.getAttribute("data-label")||"")})}),h.querySelectorAll(".js-open-ftth-map-external").forEach(_=>{_.addEventListener("click",x=>{x.stopPropagation(),_a(_.getAttribute("data-lat"),_.getAttribute("data-lng"),_.getAttribute("data-label")||"")})})),f&&m&&await Hc(m)}catch{d.style.display="block",d.innerHTML='Erreur de chargement. Vérifiez votre connexion.'}}n.querySelector("#btnRefresh").addEventListener("click",g),await g()}function qc(n){const a=String(n||"").toLowerCase().trim();return["admin","manager","superviseur","supervisor"].includes(a)}async function Hc(n){n.style.display="block",n.innerHTML=`
supervision
Validations en attente
Chargement des validations...
`;const a=n.querySelector("#validationList");try{const[o,l]=await Promise.all([xt("/api/mobile/ftth/validations"),xt("/api/mobile/ftth/raccordement-techs").catch(()=>({ok:!1,techs:[]}))]);if(!(o!=null&&o.ok)){a.innerHTML='
Impossible de charger les validations.
';return}const c=Array.isArray(o.items)?o.items:[],d=Array.isArray(l==null?void 0:l.techs)?l.techs:[];if(!c.length){a.innerHTML='

Aucun rapport en attente de validation.

';return}const h=d.map(f=>``).join("");a.innerHTML=c.map(f=>{const m=!!f.study_submitted_at&&f.workflow_phase==="installation",g=Eo(f.extra_fields),w=Io(f,g)||m,y=Yn(f.study_submitted_at||f.submitted_at),v=m&&d.length>0,_=m&&d.length===0;return`
${ct(f.client_name||"Client")}
${ct(f.ref_code||"Ticket #"+f.ticket_id)}
En attente
${ct(f.technician_name)}  · ${ct(y)}
${w?m?"Etude raccordement":"Installation":"Maintenance FTTH"}
${v?`
`:""} ${_?'
Aucun technicien raccordement disponible. Utilisez la webapp pour assigner.
':""}
`}).join(""),a.querySelectorAll(".js-btn-validate").forEach(f=>{f.addEventListener("click",async()=>{const m=f.closest("[data-report-id]"),g=m?m.dataset.reportId:"",w=m&&m.dataset.isRaccHandoff==="1",y=m?m.querySelector(".js-validation-status"):null;let v="";if(w){const _=m?m.querySelector(".js-racc-tech-select"):null;if(v=_?_.value:"",!v){y&&(y.style.display="",y.innerHTML='
Selectionnez un technicien raccordement.
');return}}f.disabled=!0,y&&(y.style.display="",y.innerHTML='
Validation en cours...
');try{const _={report_id:g,action:"validate"};v&&(_.installation_technician_id=v);const x=await qt("/api/mobile/ftth/validate",_);if(x&&x.ok)m&&(m.style.opacity="0.5"),y&&(y.innerHTML='
Valide avec succes.
'),window.setTimeout(()=>{m&&m.remove()},1500);else{const T=x&&(x.message||x.error)||"Erreur lors de la validation.";y&&(y.innerHTML='
'+ct(T)+"
"),f.disabled=!1}}catch{y&&(y.innerHTML='
Erreur reseau.
'),f.disabled=!1}})}),a.querySelectorAll(".js-btn-reject").forEach(f=>{f.addEventListener("click",async()=>{const m=f.closest("[data-report-id]"),g=m?m.dataset.reportId:"",w=m?m.querySelector(".js-validation-status"):null,y=window.prompt("Motif du rejet :")||"";if(y.trim()){f.disabled=!0,w&&(w.style.display="",w.innerHTML='
Rejet en cours...
');try{const v=await qt("/api/mobile/ftth/validate",{report_id:g,action:"reject",reason:y});if(v&&v.ok)m&&(m.style.opacity="0.5"),w&&(w.innerHTML='
Rejete.
'),window.setTimeout(()=>{m&&m.remove()},1500);else{const _=v&&(v.message||v.error)||"Erreur.";w&&(w.innerHTML='
'+ct(_)+"
"),f.disabled=!1}}catch{w&&(w.innerHTML='
Erreur reseau.
'),f.disabled=!1}}})})}catch{a.innerHTML='
Erreur de chargement des validations.
'}}function Js(n){const a=Eo(n.extra_fields),o=Io(n,a),l=zt(n.client_code,yt(a,bt.subscription)),c=zt(n.client_name,yt(a,bt.customerName)),d=zt(n.client_address,yt(a,bt.address),n.site_name),h=zt(n.client_phone,yt(a,bt.contact1)),f=zt(n.client_phone2,yt(a,bt.contact2)),m=zt(n.sro_client,yt(a,bt.plaque)),g=zt(n.jdv_client,yt(a,bt.jdv)),w=zt(n.pco_client,yt(a,bt.pco)),y=yt(a,bt.snont),v=yt(a,bt.nd),_=zt(n.avancement,yt(a,bt.progress)),x=zt(n.company_name,yt(a,bt.company)),T=yt(a,bt.city),k=yt(a,bt.commune),M=[m?`PLAQUE ${m}`:"",g?`JDV ${g}`:"",w?`PCO ${w}`:""].filter(Boolean).join(" => ");return o?{isRaccordement:o,modeLabel:"Raccordement",title:c||"Client raccordement",subtitle:l||n.ref_code||`RACC-${n.id}`,address:d,headline:_||"Raccordement client",networkPath:M,secondaryLine:[h,f,T&&k?`${T} / ${k}`:T||k,x,y,v].filter(Boolean).join(" · "),mapLabel:c||l||n.ref_code||`RACC-${n.id}`}:{isRaccordement:o,modeLabel:"FTTH",title:n.client_name||"Client FTTH",subtitle:n.ref_code||`FTTH-${n.id}`,address:d,headline:n.nature_intervention||"Maintenance FTTH B2B",networkPath:M,secondaryLine:[h,f,x].filter(Boolean).join(" · "),mapLabel:n.client_name||n.ref_code||`FTTH-${n.id}`}}function Eo(n){if(!n)return{};if(typeof n=="object")return n;try{const a=JSON.parse(n);return a&&typeof a=="object"?a:{}}catch{return{}}}function yt(n,a){const o=Object.entries(n||{});for(const l of a){const c=Jn(l);for(const[d,h]of o){const f=Jn(d);if(!(!f||h==null||String(h).trim()==="")&&(f===c||f.includes(c)||c.includes(f)))return String(h).trim()}}return""}function Io(n,a){return typeof(n==null?void 0:n.mobile_is_raccordement)=="boolean"?n.mobile_is_raccordement:Jn((a==null?void 0:a.module)||"")==="raccordement clients"}function Jn(n){return String(n||"").normalize("NFD").replace(/[\u0300-\u036f]/g,"").toLowerCase().replace(/[^a-z0-9]+/g," ").trim()}function zt(...n){for(const a of n)if(a!=null&&String(a).trim()!=="")return String(a).trim();return""}function ct(n){return String(n??"").replace(/&/g,"&").replace(//g,">")}function Wt(n){return String(n??"").replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function Yn(n){if(!n)return"—";const a=new Date(n.replace(" ","T"));return isNaN(a)?n:a.toLocaleDateString("fr-FR",{day:"2-digit",month:"2-digit",year:"numeric"})}function Fc(n){if(!n)return;const a=sessionStorage.getItem(Fn);if(a)try{const o=JSON.parse(a);if(!(o!=null&&o.message)||o.scope!=="list")return;n.innerHTML=`
${ct(o.message)}
`,n.style.display="block"}catch{n.style.display="none"}finally{try{const o=JSON.parse(a);(o==null?void 0:o.scope)==="list"&&sessionStorage.removeItem(Fn)}catch{sessionStorage.removeItem(Fn)}}}const _e=["constat","intervention","appreciation","signatures"],Zc=[["très_satisfait","Très satisfait","fa-face-grin-stars"],["satisfait","Satisfait","fa-face-smile"],["peu_satisfait","Peu satisfait","fa-face-meh"],["non_satisfait","Non satisfait","fa-face-frown"]],jc=[["satisfaction_service","Qualité du service","fa-star"],["satisfaction_delay","Délai d'intervention","fa-clock"],["satisfaction_quality","Qualité du travail","fa-screwdriver-wrench"],["satisfaction_behavior","Comportement de l'agent","fa-handshake-angle"]],qi="insuite_ftth_flash",Et={subscription:["NumeroAbonnement","Numero Abonnement","Numéro Abonnement","Abonnement"],customerName:["NomClient","Nom client","Nom du client"],address:["Localisation","LOCALISATION","Adresse intervention"],contact1:["Contact1","CONTACT CLIENT 1","Contact client 1"],plaque:["PLAQUE","Plaque"],jdv:["JDV","JDV CLIENT"],pco:["PCO","PCO CLIENT"],progress:["Avancement"],company:["EntrepriseFTTH","Entreprise"],city:["Ville"],commune:["Commune"]};async function Uc(n,{ticketId:a}){var d,h,f;if(!a){n.innerHTML='
Intervention invalide.
';return}n.innerHTML=`
Chargement de la fiche terrain…
`;const o=n.querySelector("#reportHero"),l=n.querySelector("#reportBody"),c=n.querySelector("#reportStatus");try{const m=await xt(`/api/mobile/ftth/report?id=${a}`);if(!(m!=null&&m.ok)||!m.ticket){const M=(m==null?void 0:m.message)||(m==null?void 0:m.error)||"Réponse incomplète du serveur.";l.innerHTML=`
Impossible de charger cette fiche terrain.
${A(M)}
`;return}const g=m.ticket,w=Vc(m.report,a),y=Array.isArray(w.photos)?w.photos:[],v=m.study||null,_=m.installation||null,x=m.handoff_locked===!0,T=Wc(g,w,y,m.otb||null,v);if(o.innerHTML=Kc(g,w),x){l.innerHTML=Xc(g,w);return}l.innerHTML=Yc(g,w,y,T.otb,v,_),gu(c,"detail"),Jc(n,T),Lt(g).isRaccordement&&w.workflow_phase==="study"?(_u(l,T,c),Qs(l,T,c),Xs(l,T,c)):(au(l,T),ou(l,T),ru(l,T,c),lu(l,T,c),uu(l,T),cu(l,T,c),du(l,T,c),hu(l,T),pu(l,T,c),Xs(l,T,c),Qs(l,T,c),Hi(l,T.activeStep),si(l,T),Xn(l,T))}catch(m){if((m==null?void 0:m.status)===403&&((d=m==null?void 0:m.data)==null?void 0:d.error)==="wrong_portfolio"){const y=((h=m==null?void 0:m.data)==null?void 0:h.message)||"Ce ticket n'appartient pas à votre portefeuille. Retournez à la liste.";l.innerHTML=`
Accès non autorisé
${A(y)}
← Retour à la liste
`;return}const w=((f=m==null?void 0:m.data)==null?void 0:f.message)||(m==null?void 0:m.message)||"Erreur inconnue";console.error("ftth-report render failed",m),l.innerHTML=`
Erreur de chargement de la fiche terrain.
${A(w)}
`}}function Vc(n,a){const o=n||{};return{id:Number(o.id||0),ticket_id:a,operation_type:o.operation_type||"maintenance",intervention_date:eo(o.intervention_date),intervention_start:jn(o.intervention_start),intervention_end:jn(o.intervention_end),constat_comments:o.constat_comments||"",impacted_equipment:Array.isArray(o.impacted_equipment)?o.impacted_equipment:[],materials_used:Array.isArray(o.materials_used)?o.materials_used:[],selected_otb_id:Number(o.selected_otb_id||0),selected_otb_label:o.selected_otb_label||"",recommended_otb_id:Number(o.recommended_otb_id||0),recommended_otb_label:o.recommended_otb_label||"",otb_distance_meters:o.otb_distance_meters||"",otb_selection_mode:o.otb_selection_mode||"none",otb_recommendation_payload:o.otb_recommendation_payload||null,general_comments:o.general_comments||"",satisfaction_service:o.satisfaction_service||"",satisfaction_delay:o.satisfaction_delay||"",satisfaction_quality:o.satisfaction_quality||"",satisfaction_behavior:o.satisfaction_behavior||"",client_name_onsite:o.client_name_onsite||"",client_visit_status:o.client_visit_status||"intervention_effectuee",planned_intervention_date:eo(o.planned_intervention_date),planned_intervention_time:jn(o.planned_intervention_time),planning_comment:o.planning_comment||"",client_remarks:o.client_remarks||"",service_restored:Number(o.service_restored||0),submit_gps_lat:o.submit_gps_lat||"",submit_gps_lng:o.submit_gps_lng||"",submit_gps_accuracy_meters:o.submit_gps_accuracy_meters||"",status:o.status||"brouillon",rejection_reason:o.rejection_reason||"",submitted_at:o.submitted_at||"",client_signature_path:o.client_signature_path||"",agent_signature_path:o.agent_signature_path||"",photos:Array.isArray(o.photos)?o.photos:[],workflow_phase:o.workflow_phase||"study",study_gps_lat:o.study_gps_lat||"",study_gps_lng:o.study_gps_lng||"",study_gps_accuracy_meters:o.study_gps_accuracy_meters||""}}function Wc(n,a,o,l,c=null){const d=Lt(n),h=oi(n.id,d.isRaccordement);return{ticket:n,report:a,activeStep:0,equipments:Ro(a.impacted_equipment),materials:zo(a.materials_used),constatFiles:[],interventionFiles:[],gpsLat:a.submit_gps_lat||"",gpsLng:a.submit_gps_lng||"",gpsAccuracy:a.submit_gps_accuracy_meters||"",studyGpsLat:a.study_gps_lat||"",studyGpsLng:a.study_gps_lng||"",studyGpsAccuracy:a.study_gps_accuracy_meters||"",clientSignatureData:"",agentSignatureData:"",photos:o,draft:h,otb:Gc(a,l,(h==null?void 0:h.payload)||null,d.isRaccordement),study:c,mapVisible:!1,routeMapController:null,autoSyncInFlight:!1,onlineHandler:null}}function Gc(n,a,o,l){if(!l)return{radiusMeters:0,alert:"",candidates:[],outOfRadius:[],recommended:null,recommendedId:0,selectedId:0,selectedLabel:"",selectionMode:"none",distanceMeters:0,recommendationPayload:null};const c=Array.isArray(a==null?void 0:a.candidates)?a.candidates:[],d=Array.isArray(a==null?void 0:a.out_of_radius)?a.out_of_radius:[],h=(a==null?void 0:a.recommended)||null,f=Number((o==null?void 0:o.selected_otb_id)||n.selected_otb_id||(h==null?void 0:h.id)||0),m=Number(n.recommended_otb_id||(h==null?void 0:h.id)||0),g=a||n.otb_recommendation_payload||null,y=[...c,...d].filter(Boolean).find(v=>Number(v.id||0)===f)||h||null;return{radiusMeters:Number((a==null?void 0:a.radius_meters)||0),alert:(a==null?void 0:a.alert)||"",candidates:c,outOfRadius:d,recommended:h,recommendedId:m,selectedId:f,selectedLabel:String((o==null?void 0:o.selected_otb_label)||n.selected_otb_label||(y==null?void 0:y.box_code)||""),selectionMode:String((o==null?void 0:o.otb_selection_mode)||n.otb_selection_mode||(f>0&&f===m?"auto":f>0?"manual":"none")),distanceMeters:Number((o==null?void 0:o.otb_distance_meters)||n.otb_distance_meters||(y==null?void 0:y.distance_meters)||0),recommendationPayload:g}}function Kc(n,a){const o=Lt(n),l=Yt(n.client_lat,n.client_lng);return`
Retour au portefeuille terrain
${A(o.heroPill)}

${A(o.title)}

${A(o.subtitle)}

${A(a.status||"brouillon")}
${A(o.kpiPrimaryLabel)} ${A(o.kpiPrimaryValue)}
${A(o.kpiSecondaryLabel)} ${A(o.kpiSecondaryValue)}
${A(o.kpiTertiaryLabel)} ${A(o.kpiTertiaryValue)}
${A(o.kpiQuaternaryLabel)} ${A(o.kpiQuaternaryValue)}
${l?`
${A(o.routeTitle)}
Carte du site et lancement d'itinéraire temps réel.
${A(pa(n.client_lat,n.client_lng))}
`:`
Accès client
Aucune coordonnée GPS n'est disponible pour cette fiche terrain.
`}
`}function Jc(n,a){if(!Yt(a.ticket.client_lat,a.ticket.client_lng))return;const l=Lt(a.ticket),c=n.querySelector("#btnToggleRouteMap"),d=n.querySelector("#btnStartRoute"),h=n.querySelector("#btnOpenExternalMap"),f=n.querySelector("#routeMapCard"),m=n.querySelector("#routeMapCanvas"),g=n.querySelector("#routeMapStatus"),w=n.querySelector("#routeMapDistance"),y=n.querySelector("#routeMapDuration"),v=n.querySelector("#routeMapTechnician");c==null||c.addEventListener("click",()=>{var _,x,T,k;f&&(a.mapVisible=!a.mapVisible,f.hidden=!a.mapVisible,a.mapVisible&&m&&((x=(_=a.routeMapController)==null?void 0:_.destroy)==null||x.call(_),a.routeMapController=Ao({mapElement:m,destinationLat:a.ticket.client_lat,destinationLng:a.ticket.client_lng,destinationLabel:l.mapLabel,statusElement:g,distanceElement:w,durationElement:y,technicianCoordsElement:v})),a.mapVisible||((k=(T=a.routeMapController)==null?void 0:T.destroy)==null||k.call(T),a.routeMapController=null,ga(m)),c.innerHTML=a.mapVisible?'Masquer la carte':'Afficher la carte')}),d==null||d.addEventListener("click",()=>{va(d.getAttribute("data-lat"),d.getAttribute("data-lng"),d.getAttribute("data-label")||"")}),h==null||h.addEventListener("click",()=>{_a(h.getAttribute("data-lat"),h.getAttribute("data-lng"),h.getAttribute("data-label")||"")})}function Yc(n,a,o,l,c,d=null){const h=Lt(n);if(h.isRaccordement&&a.workflow_phase==="study")return Qc(n,a,l,c||null);let f="";if(h.isRaccordement&&a.workflow_phase==="installation"&&d){const v=d.selected_box_label||(d.selected_otb_id?"Boîtier #"+d.selected_otb_id:"Non défini"),_=d.selected_box_address?`
${A(d.selected_box_address)}
`:"",x=d.selected_port>0?`Port ${d.selected_port}`:"Non défini",T=d.study_gps_lat&&d.study_gps_lng?`${parseFloat(d.study_gps_lat).toFixed(5)}, ${parseFloat(d.study_gps_lng).toFixed(5)}`:"Non renseigné",k=d.planning_comment?`
${A(d.planning_comment)}
`:"";f=`
Résumé étude — Phase installation
Boîtier OTB ${A(v)} ${_}
Port réservé ${A(x)}
GPS étude ${A(T)}
${k}
`}const m=a.intervention_date||"À renseigner",g=h.isRaccordement?h.summaryTertiaryValue||"Aucun suivi saisi":a.constat_comments?String(a.constat_comments).trim().slice(0,80):"Aucun constat saisi",w=o.filter(v=>v.tab_type==="constat"),y=o.filter(v=>v.tab_type==="intervention");return` ${f}
Synthèse mission
Les informations de tête restent visibles pendant toute la saisie.
${A(h.summaryPrimaryLabel)} ${A(h.summaryPrimaryValue)}
${A(h.summarySecondaryLabel)} ${A(m)}
${A(h.summaryTertiaryLabel)} ${A(g)}
État fiche ${A(a.status||"brouillon")}
Navigation formulaire
Étape 1 sur ${_e.length} · ${No(_e[0])}
${tu(n,a,w)}
`}function Xc(n,a){const o=Lt(n),l=a.study_submitted_at||a.submitted_at,c=l?new Date(l).toLocaleDateString("fr-FR",{day:"2-digit",month:"2-digit",year:"numeric",hour:"2-digit",minute:"2-digit"}):"Date inconnue",d=A(a.selected_otb_label||"Boîtier OTB"),h=a.selected_otb_port_number?`Port ${A(String(a.selected_otb_port_number))}`:"";return`
${A(o.title||"Raccordement client")}
${A(o.subtitle||"")}

Dossier transmis avec succès

Ce dossier a été transmis au superviseur étude & raccordement pour validation et assignation d'un technicien raccordement.

Transmis le
${A(c)}
${d?`
Boîtier OTB sélectionné
${d}${h?` — ${h}`:""}
`:""}
← Retour à la liste
`}function Qc(n,a,o,l=null){const c=Lt(n),d=(o==null?void 0:o.recommended)||null,h=a.study_gps_lat&&a.study_gps_lng,f=5e3,m=(l==null?void 0:l.all_boxes)||[...(o==null?void 0:o.candidates)||[],...(o==null?void 0:o.outOfRadius)||[]],g=m.filter(k=>Number(k.distance_meters??1/0)<=f),w=m.filter(k=>Number(k.distance_meters??1/0)>f),y=g.length>0,v=Number((o==null?void 0:o.selectedId)||0),_=Number((l==null?void 0:l.selected_otb_port_number)||0),T=(v>0&&(l!=null&&l.ports_by_box)?l.ports_by_box[String(v)]||(l==null?void 0:l.available_ports)||[]:(l==null?void 0:l.available_ports)||[]).filter(k=>k.available||Number(k.number)===_);return`
Fiche étude raccordement
Capturez la position d'étude, sélectionnez le boîtier OTB et transmettez au superviseur raccordement.
Phase étude
Client ${A(c.title)}
Abonnement / Réf. ${A(c.summaryPrimaryValue)}
Réseau ${A(c.kpiPrimaryValue)}
État fiche ${A(a.status||"brouillon")}
Position GPS d'étude ${h?'Enregistrée':""}
${h?`Position enregistrée : ${Number(a.study_gps_lat).toFixed(5)}, ${Number(a.study_gps_lng).toFixed(5)}${a.study_gps_accuracy_meters?` · précision ${Math.round(Number(a.study_gps_accuracy_meters))} m`:""}`:"Aucune position d'étude enregistrée."}
Sélection du boîtier OTB ${y&&(o!=null&&o.radiusMeters)?`Rayon ${A(Dt(o.radiusMeters))}`:""}
${d&&y?`
Recommandé : ${A(d.box_code)} Auto
${A(d.distance_label||Dt(d.distance_meters||0))} · ${A(String(d.ports_available??0))} port(s) disponible(s)
`:""} ${y?"":`
Aucun boîtier OTB dans un rayon de 5 km. Utilisez la recherche manuelle ci-dessous.
`}
${y?`
`:""} ${m.length===0?'
Aucun boîtier OTB actif disponible.
':""}
Commentaires et consignes
Ce commentaire sera transmis avec la réservation du port au superviseur raccordement.
Réservation du port
${T.length===0?`
${v>0?"Aucun port disponible dans la base pour ce boîtier.":"Sélectionnez un boîtier OTB pour afficher les ports disponibles."}
`:""}
Transmission
${((l==null?void 0:l.handoff_technicians)||[]).length>0?`
Le rapport sera transmis à tous les superviseurs étude & raccordement : ${l.handoff_technicians.map(k=>A(k.name||k.username||`Superviseur #${k.id}`)).join(", ")}.
`:`
Aucun superviseur étude & raccordement disponible. Contactez votre administrateur.
`}
`}function tu(n,a,o){return`
Constat terrain
Décrivez l'état initial, les équipements impactés et les preuves visuelles de départ.
Étape 1/4
${[["maintenance","Maintenance","fa-screwdriver-wrench"],["travaux","Travaux","fa-helmet-safety"],["autres","Autres","fa-layer-group"]].map(([l,c,d])=>` `).join("")}
Équipements impactés
Photos de constat Ajoutez les photos initiales avec commentaire éventuel.
${o.length?`
${o.map(l=>`
Photo constat existante
`).join("")}
`:'
Aucune photo de constat enregistrée pour le moment.
'}
`}function eu(n,a,o,l){const c=Lt(n),d=(l==null?void 0:l.recommended)||null,h=Array.isArray(l==null?void 0:l.candidates)&&l.candidates.length>0,f=Array.isArray(l==null?void 0:l.outOfRadius)&&l.outOfRadius.length>0;return`
Intervention et pièces
Renseignez les matériaux, le compte-rendu d'exécution et les preuves photo de l'intervention.
Étape 2/4
Matériaux et pièces utilisés
${c.isRaccordement?`
Boîtier OTB recommandé ${l!=null&&l.radiusMeters?`Rayon ${A(Dt(l.radiusMeters))}`:""}
${d?A(d.box_code):"Aucune recommandation"} ${A((l==null?void 0:l.selectionMode)==="manual"?"Manuel":(l==null?void 0:l.selectionMode)==="auto"?"Auto":"Sans sélection")}
${d?`${A(d.distance_label||Dt(d.distance_meters||0))} · ${A(String(d.ports_available??0))} port(s) disponible(s)`:"Aucun OTB actif trouvé dans le périmètre configuré."}
${l!=null&&l.alert?`
${A(l.alert)}
`:""} ${!h&&!f?`
Aucun boîtier OTB n'a été proposé pour cette intervention.
`:""}
`:""}
Photos d'intervention Ajoutez les preuves visuelles après action corrective.
${o.length?`
${o.map(m=>`
Photo intervention existante
`).join("")}
`:`
Aucune photo d'intervention enregistrée pour le moment.
`}
`}function iu(n,a){const o=Lt(n);return`
Appréciation client
Renseignez les retours du client et l'état final du service après passage terrain.
Étape 3/4
${jc.map(([l,c,d])=>`
${c}
${Zc.map(([h,f,m])=>` `).join("")}
`).join("")}
État final du service
${o.isRaccordement?"Client / abonnement":"Client sur site"}
Disponibilité du client Permet de basculer la mission en attente de planification si nécessaire.
${[["intervention_effectuee","Intervention réalisée","fa-circle-check"],["client_indisponible","Client indisponible","fa-user-clock"],["reprogrammation_demandee","Reprogrammation demandée","fa-calendar-days"]].map(([l,c,d])=>` `).join("")}
`}function nu(n){return`
Signatures et géolocalisation
Finalisez la fiche avec les signatures manuscrites et la position GPS de soumission.
Étape 4/4
Signature client ${n.client_signature_path?'Déjà enregistrée':""}
Signature agent terrain ${n.agent_signature_path?'Déjà enregistrée':""}
Position GPS de soumission
Aucune position capturée pour le moment.
`}function au(n,a){var l;const o=n.querySelector("#ftthReportForm");o&&(l=a.draft)!=null&&l.payload&&(su(o,a.draft.payload),Array.isArray(a.draft.payload.impacted_equipment)&&(a.equipments=Ro(a.draft.payload.impacted_equipment)),Array.isArray(a.draft.payload.materials_used)&&(a.materials=zo(a.draft.payload.materials_used)),a.gpsLat=a.draft.payload.gps_lat||a.gpsLat,a.gpsLng=a.draft.payload.gps_lng||a.gpsLng,a.gpsAccuracy=a.draft.payload.gps_accuracy_meters||a.gpsAccuracy,a.clientSignatureData=a.draft.payload.client_signature_data||a.clientSignatureData,a.agentSignatureData=a.draft.payload.agent_signature_data||a.agentSignatureData)}function su(n,a){Object.entries(a||{}).forEach(([o,l])=>{if(o==="impacted_equipment"||o==="materials_used"||o==="gps_lat"||o==="gps_lng"||o==="gps_accuracy_meters")return;const c=n.elements.namedItem(o);if(c){if(typeof RadioNodeList<"u"&&c instanceof RadioNodeList){c.value=String(l??"");return}if(c.type==="radio"||c.type==="checkbox"){c.checked=String(c.value)===String(l);return}c.value=l??""}})}function ou(n,a){var o,l;n.querySelectorAll("[data-step-index]").forEach(c=>{c.addEventListener("click",()=>{a.activeStep=Number(c.dataset.stepIndex||0),Hi(n,a.activeStep)})}),(o=n.querySelector("#btnPrevStep"))==null||o.addEventListener("click",()=>{a.activeStep=Math.max(0,a.activeStep-1),Hi(n,a.activeStep)}),(l=n.querySelector("#btnNextStep"))==null||l.addEventListener("click",()=>{a.activeStep=Math.min(_e.length-1,a.activeStep+1),Hi(n,a.activeStep)})}function Hi(n,a){const o=n.querySelector("#stepToolbarCurrent");n.querySelectorAll("[data-step-index]").forEach(d=>{d.classList.toggle("active",Number(d.dataset.stepIndex)===a)}),o&&(o.textContent=`Étape ${a+1} sur ${_e.length} · ${No(_e[a])}`),n.querySelectorAll("[data-step-panel]").forEach(d=>{d.hidden=Number(d.dataset.stepPanel)!==a});const l=n.querySelector("#btnPrevStep"),c=n.querySelector("#btnNextStep");l&&(l.disabled=a===0),c&&(c.disabled=a===_e.length-1,c.innerHTML=a===_e.length-1?"Dernière étape":'Suivant')}function ru(n,a){var o;(o=n.querySelector("#btnAddEquipment"))==null||o.addEventListener("click",()=>{const l=n.querySelector("#equipmentInput"),c=n.querySelector("#equipmentDetailInput"),d=String((l==null?void 0:l.value)||"").trim(),h=String((c==null?void 0:c.value)||"").trim();d&&(a.equipments.push({name:d,detail:h}),l&&(l.value=""),c&&(c.value=""),si(n,a))})}function lu(n,a){var o;(o=n.querySelector("#btnAddMaterial"))==null||o.addEventListener("click",()=>{var h,f,m;const l=String(((h=n.querySelector("#materialNameInput"))==null?void 0:h.value)||"").trim(),c=String(((f=n.querySelector("#materialQtyInput"))==null?void 0:f.value)||"").trim(),d=String(((m=n.querySelector("#materialRefInput"))==null?void 0:m.value)||"").trim();l&&(a.materials.push({designation:l,qty:c,reference:d}),n.querySelector("#materialNameInput").value="",n.querySelector("#materialQtyInput").value="",n.querySelector("#materialRefInput").value="",si(n,a))})}function cu(n,a){var x,T,k;const o=n.querySelector("#selectedOtbId");if(!o)return;const l=[...((x=a.otb)==null?void 0:x.candidates)||[],...((T=a.otb)==null?void 0:T.outOfRadius)||[]],c=((k=a.otb)==null?void 0:k.recommended)||null,d=n.querySelector('input[name="recommended_otb_id"]'),h=n.querySelector('input[name="recommended_otb_label"]'),f=n.querySelector('input[name="otb_distance_meters"]'),m=n.querySelector('input[name="otb_selection_mode"]'),g=n.querySelector('input[name="otb_recommendation_payload"]'),w=n.querySelector("#otbSummaryTitle"),y=n.querySelector("#otbSummaryMeta"),v=n.querySelector("#otbSummaryMode"),_=()=>{const M=Number(o.value||0),N=l.find(H=>Number(H.id||0)===M)||null;a.otb.selectedId=M,a.otb.selectedLabel=(N==null?void 0:N.box_code)||"",a.otb.distanceMeters=Number((N==null?void 0:N.distance_meters)||(c==null?void 0:c.distance_meters)||0),a.otb.selectionMode=M>0?M===Number(a.otb.recommendedId||0)?"auto":"manual":"none",d&&(d.value=String(a.otb.recommendedId||0)),h&&(h.value=String((c==null?void 0:c.box_code)||"")),f&&(f.value=String(a.otb.distanceMeters||"")),m&&(m.value=a.otb.selectionMode),g&&(g.value=JSON.stringify(a.otb.recommendationPayload||null)),w&&(w.textContent=(N==null?void 0:N.box_code)||(c==null?void 0:c.box_code)||"Aucune recommandation"),y&&(y.textContent=N?`${N.distance_label||Dt(N.distance_meters||0)} · ${N.ports_available??0} port(s) libre(s)`:c?`${c.distance_label||Dt(c.distance_meters||0)} · ${c.ports_available??0} port(s) libre(s)`:"Aucun OTB actif trouvé dans le périmètre configuré."),v&&(v.textContent=a.otb.selectionMode==="manual"?"Manuel":a.otb.selectionMode==="auto"?"Auto":"Sans sélection")};o.addEventListener("change",_),_()}function si(n,a){const o=n.querySelector("#equipmentList");o&&(o.innerHTML=a.equipments.length?a.equipments.map((c,d)=>`
${A(c.name)}
${c.detail?`
${A(c.detail)}
`:'
Aucun détail complémentaire.
'}
`).join(""):'
Aucun équipement ajouté pour le moment.
',o.querySelectorAll("[data-remove-equipment]").forEach(c=>{c.addEventListener("click",()=>{a.equipments.splice(Number(c.dataset.removeEquipment),1),si(n,a)})}));const l=n.querySelector("#materialList");l&&(l.innerHTML=a.materials.length?a.materials.map((c,d)=>`
${A(c.designation)}
Quantité: ${A(c.qty||"—")}
Référence: ${A(c.reference||"—")}
`).join(""):'
Aucun matériau ajouté pour le moment.
',l.querySelectorAll("[data-remove-material]").forEach(c=>{c.addEventListener("click",()=>{a.materials.splice(Number(c.dataset.removeMaterial),1),si(n,a)})}))}function uu(n,a){var o,l;(o=n.querySelector("#constatPhotosInput"))==null||o.addEventListener("change",c=>{a.constatFiles=Array.from(c.target.files||[]),Xn(n,a)}),(l=n.querySelector("#interventionPhotosInput"))==null||l.addEventListener("change",c=>{a.interventionFiles=Array.from(c.target.files||[]),Xn(n,a)})}function Xn(n,a){const o=n.querySelector("#constatPhotoDraftList");o&&(o.innerHTML=a.constatFiles.map((c,d)=>` `).join(""));const l=n.querySelector("#interventionPhotoDraftList");l&&(l.innerHTML=a.interventionFiles.map((c,d)=>` `).join(""))}function du(n,a,o){var c,d;const l=n.querySelector("#gpsStatusLine");Zn(l,a),(c=n.querySelector("#btnCaptureGps"))==null||c.addEventListener("click",()=>{if(!navigator.geolocation){G(o,"La géolocalisation n'est pas disponible sur cet appareil.","warning");return}G(o,"Capture GPS en cours…","secondary"),navigator.geolocation.getCurrentPosition(h=>{a.gpsLat=String(h.coords.latitude),a.gpsLng=String(h.coords.longitude),a.gpsAccuracy=h.coords.accuracy?String(h.coords.accuracy):"",Zn(l,a),G(o,"Position GPS capturée.","success")},()=>{G(o,"Impossible de récupérer la position GPS.","danger")},{enableHighAccuracy:!0,timeout:1e4})}),(d=n.querySelector("#btnReuseExistingGps"))==null||d.addEventListener("click",()=>{a.gpsLat=String(a.report.submit_gps_lat||a.gpsLat||""),a.gpsLng=String(a.report.submit_gps_lng||a.gpsLng||""),a.gpsAccuracy=String(a.report.submit_gps_accuracy_meters||a.gpsAccuracy||""),Zn(l,a),G(o,"Dernière position connue réappliquée.","secondary")})}function Zn(n,a){n&&(n.textContent=a.gpsLat&&a.gpsLng?`Position prête: ${Number(a.gpsLat).toFixed(5)}, ${Number(a.gpsLng).toFixed(5)}${a.gpsAccuracy?` · précision ${Math.round(Number(a.gpsAccuracy))} m`:""}`:"Aucune position capturée pour le moment.")}function hu(n,a){const o=n.querySelector("#clientSignatureCanvas"),l=n.querySelector("#agentSignatureCanvas");[["client",o],["agent",l]].forEach(([d,h])=>{if(!h)return;fu(h,m=>{d==="client"&&(a.clientSignatureData=m),d==="agent"&&(a.agentSignatureData=m)});const f=d==="client"?a.clientSignatureData:a.agentSignatureData;f&&mu(h,f)}),n.querySelectorAll("[data-clear-signature]").forEach(d=>{d.addEventListener("click",()=>{const h=d.dataset.clearSignature,f=h==="client"?o:l;f&&(Oo(f),h==="client"&&(a.clientSignatureData=""),h==="agent"&&(a.agentSignatureData=""))})}),n.querySelectorAll("[data-capture-signature]").forEach(d=>{d.addEventListener("click",()=>{const h=d.dataset.captureSignature,f=h==="client"?o:l;if(!f)return;const m=f.toDataURL("image/png");h==="client"&&(a.clientSignatureData=m),h==="agent"&&(a.agentSignatureData=m)})})}function mu(n,a){const o=new Image;o.onload=()=>{Oo(n),n.getContext("2d").drawImage(o,0,0,n.width,n.height)},o.src=a}function fu(n,a){const o=n.getContext("2d");o.lineWidth=2.2,o.lineCap="round",o.lineJoin="round",o.strokeStyle="#0f172a";let l=!1;const c=m=>{var _;const g=n.getBoundingClientRect(),w=(_=m.touches)==null?void 0:_[0],y=w?w.clientX:m.clientX,v=w?w.clientY:m.clientY;return{x:(y-g.left)/g.width*n.width,y:(v-g.top)/g.height*n.height}},d=m=>{l=!0;const g=c(m);o.beginPath(),o.moveTo(g.x,g.y)},h=m=>{if(!l)return;m.preventDefault();const g=c(m);o.lineTo(g.x,g.y),o.stroke()},f=()=>{l&&(l=!1,a(n.toDataURL("image/png")))};n.addEventListener("mousedown",d),n.addEventListener("mousemove",h),n.addEventListener("mouseup",f),n.addEventListener("mouseleave",f),n.addEventListener("touchstart",d,{passive:!0}),n.addEventListener("touchmove",h,{passive:!1}),n.addEventListener("touchend",f)}function Oo(n){n.getContext("2d").clearRect(0,0,n.width,n.height)}function pu(n,a,o){var l,c,d;(l=n.querySelector("#btnSaveLocal"))==null||l.addEventListener("click",()=>{const h=$o(n,a);Ne(a.ticket.id,h),G(o,"Brouillon local sauvegardé sur l'appareil.","success")}),(c=n.querySelector("#btnSaveDraft"))==null||c.addEventListener("click",async()=>{await ta(n,a,o,"draft")}),(d=n.querySelector("#btnSubmitReport"))==null||d.addEventListener("click",async()=>{await ta(n,a,o,"submit")})}function _u(n,a,o){var l,c,d,h,f,m,g;(l=n.querySelector("#btnSaveLocal"))==null||l.addEventListener("click",()=>{const w=Qn(n,a);Ne(a.ticket.id,w),G(o,"Brouillon local sauvegardé sur l'appareil.","success")}),(c=n.querySelector("#btnSaveDraft"))==null||c.addEventListener("click",async()=>{await Ys(n,a,o,"draft")}),(d=n.querySelector("#btnHandoffRaccordement"))==null||d.addEventListener("click",async()=>{await Ys(n,a,o,"handoff")}),(h=n.querySelector("#btnCaptureStudyGps"))==null||h.addEventListener("click",()=>{if(!navigator.geolocation){G(o,"La géolocalisation n'est pas disponible sur cet appareil.","warning");return}G(o,"Capture GPS en cours…","secondary"),navigator.geolocation.getCurrentPosition(w=>{a.studyGpsLat=String(w.coords.latitude),a.studyGpsLng=String(w.coords.longitude),a.studyGpsAccuracy=w.coords.accuracy?String(w.coords.accuracy):"";const y=n.querySelector("#studyGpsLatInput"),v=n.querySelector("#studyGpsLngInput"),_=n.querySelector("#studyGpsAccuracyInput");y&&(y.value=a.studyGpsLat),v&&(v.value=a.studyGpsLng),_&&(_.value=a.studyGpsAccuracy);const x=n.querySelector("#studyGpsStatusLine");x&&(x.textContent=`Position capturée : ${Number(a.studyGpsLat).toFixed(5)}, ${Number(a.studyGpsLng).toFixed(5)}${a.studyGpsAccuracy?` · précision ${Math.round(Number(a.studyGpsAccuracy))} m`:""}`),G(o,"Position GPS d'étude capturée.","success")},()=>{G(o,"Impossible de récupérer la position GPS.","danger")},{enableHighAccuracy:!0,timeout:1e4})}),(f=n.querySelector("#btnOtbManualSwitch"))==null||f.addEventListener("click",()=>{const w=n.querySelector("#otbSearchWrap");w&&(w.hidden=!1),n.querySelectorAll("#selectedOtbId .otb-far-opt").forEach(v=>{v.style.display=""});const y=n.querySelector("#btnOtbManualSwitch");y&&(y.hidden=!0)}),(m=n.querySelector("#otbSearchInput"))==null||m.addEventListener("input",w=>{const y=w.target.value.toLowerCase().trim();n.querySelectorAll("#selectedOtbId option[data-box-code]").forEach(v=>{if(!y){v.style.display="";return}const _=(v.dataset.boxCode||"").toLowerCase(),x=(v.dataset.addr||"").toLowerCase();v.style.display=_.includes(y)||x.includes(y)?"":"none"})}),(g=n.querySelector("#selectedOtbId"))==null||g.addEventListener("change",w=>{var H,K,W,tt,V;const y=w.target.value,v=[...((H=a.otb)==null?void 0:H.candidates)||[],...((K=a.otb)==null?void 0:K.outOfRadius)||[],...((W=a.study)==null?void 0:W.all_boxes)||[]],_=new Set,T=v.filter(E=>{const R=String(E.id??"");return!R||_.has(R)?!1:(_.add(R),!0)}).find(E=>String(E.id)===String(y));a.otb.selectedId=Number(y)||0,a.otb.selectedLabel=(T==null?void 0:T.box_code)||"",a.otb.distanceMeters=Number((T==null?void 0:T.distance_meters)||0),a.otb.selectionMode=y?Number(y)===Number(((tt=a.otb)==null?void 0:tt.recommendedId)||0)?"auto":"manual":"none";const k=n.querySelector("#studyOtbSelectionModeInput");k&&(k.value=a.otb.selectionMode);const M=n.querySelector("#studyOtbDistanceInput");M&&(M.value=String(a.otb.distanceMeters));const N=y&&((V=a.study)!=null&&V.ports_by_box)?a.study.ports_by_box[String(y)]||[]:[];vu(n,N)})}function vu(n,a,o){const l=n.querySelector("#selectedOtbPortNumber");if(!l)return;const d=Number(l.value||0);l.innerHTML='',a.filter(m=>m.available||Number(m.number)===d).forEach(m=>{const g=document.createElement("option");g.value=String(m.number),g.selected=Number(m.number)===d,g.textContent=`Port ${m.number}${m.available?"":m.status==="occupied"?" - occupé":" - réservé"}`,l.appendChild(g)});const f=l.parentElement;if(f==null||f.querySelectorAll("#portFeedbackMsg").forEach(m=>m.remove()),a.length===0){const m=document.createElement("div");m.id="portFeedbackMsg",m.className="form-text text-muted mt-1",m.textContent="Aucun port disponible dans la base pour ce boîtier.",f==null||f.appendChild(m)}}function Qn(n,a){var d,h,f,m,g;const o=n.querySelector("#ftthReportForm"),l=new FormData(o),c={};for(const[w,y]of l.entries())y instanceof File||(c[w]=y);return c.selected_otb_id=((d=a.otb)==null?void 0:d.selectedId)||"",c.selected_otb_label=((h=a.otb)==null?void 0:h.selectedLabel)||"",c.recommended_otb_id=((f=a.otb)==null?void 0:f.recommendedId)||"",c.otb_distance_meters=((m=a.otb)==null?void 0:m.distanceMeters)||"",c.otb_selection_mode=((g=a.otb)==null?void 0:g.selectionMode)||"none",c.study_gps_lat=a.studyGpsLat||"",c.study_gps_lng=a.studyGpsLng||"",c.study_gps_accuracy_meters=a.studyGpsAccuracy||"",c}async function Ys(n,a,o,l){var h,f,m,g,w,y;const c=n.querySelector("#ftthReportForm"),d=new FormData(c);if(d.set("ticket_id",String(a.ticket.id)),d.set("action_type",l),d.set("study_gps_lat",a.studyGpsLat||((h=n.querySelector("#studyGpsLatInput"))==null?void 0:h.value)||""),d.set("study_gps_lng",a.studyGpsLng||((f=n.querySelector("#studyGpsLngInput"))==null?void 0:f.value)||""),d.set("study_gps_accuracy_meters",a.studyGpsAccuracy||((m=n.querySelector("#studyGpsAccuracyInput"))==null?void 0:m.value)||""),d.set("otb_distance_meters",((g=a.otb)==null?void 0:g.distanceMeters)||""),d.set("otb_selection_mode",((w=a.otb)==null?void 0:w.selectionMode)||"none"),!navigator.onLine){const v=Qn(n,a);Ne(a.ticket.id,v,{pendingSyncAction:l}),a.draft=oi(a.ticket.id,!0),G(o,"Hors ligne: brouillon local conservé, synchronisation automatique prévue au retour du réseau.","warning");return}if(l==="handoff"){const v=String(d.get("selected_otb_id")||"").trim(),_=String(d.get("selected_otb_port_number")||"").trim(),x=String(d.get("study_gps_lat")||a.studyGpsLat||"").trim();if(!String(d.get("handoff_technician_id")||"").trim()){G(o,"Aucun superviseur étude & raccordement disponible. Contactez votre administrateur.","danger");return}if(!v||v==="0"){G(o,"Sélectionnez un boîtier OTB avant de transmettre.","danger");return}if(!_||_==="0"){G(o,"Sélectionnez un port OTB avant de transmettre.","danger");return}if(!x){G(o,"Capturez votre position GPS avant de transmettre.","danger");return}}try{G(o,l==="handoff"?"Transmission au superviseur raccordement…":"Enregistrement du brouillon…","secondary");const v={};for(const[x,T]of d.entries())T instanceof File||(v[x]=String(T??""));const _=await qt("/api/mobile/ftth/report/save",v);if(!(_!=null&&_.ok)){const x=(_==null?void 0:_.message)||(_==null?void 0:_.error)||"Le serveur a refusé l'enregistrement.";G(o,x,"danger");return}if(Zi(a.ticket.id),a.draft=null,l==="handoff"){const x=Lt(a.ticket);Fi({scope:"list",kind:"success",message:`${x.flashLabel} a été transmis au superviseur raccordement.`}),window.setTimeout(()=>Wi("#/ftth"),300)}else G(o,"Brouillon enregistré.","success"),window.setTimeout(()=>Wi(`#/ftth-report?id=${a.ticket.id}&savedAt=${Date.now()}`),300)}catch(v){const _=Qn(n,a);Ne(a.ticket.id,_,{pendingSyncAction:l}),a.draft=oi(a.ticket.id,!0);const x=((y=v==null?void 0:v.data)==null?void 0:y.message)||(v==null?void 0:v.message)||"Erreur réseau";G(o,`Erreur: ${x}. Brouillon local conservé.`,"danger")}}function Xs(n,a,o){var c,d;if(!((c=a.draft)!=null&&c.savedAt))return;const l=(d=a.draft)!=null&&d.pendingSyncAction?" Synchronisation automatique en attente du retour réseau.":"";G(o,`Brouillon local restauré (${bu(a.draft.savedAt)}).${l}`,"info")}function Qs(n,a,o){var c;window.__insuiteFtthOnlineSyncHandler&&window.removeEventListener("online",window.__insuiteFtthOnlineSyncHandler);const l=async()=>{var d;if(!(a.autoSyncInFlight||!navigator.onLine||!((d=a.draft)!=null&&d.pendingSyncAction))){a.autoSyncInFlight=!0,G(o,"Connexion rétablie: synchronisation automatique du brouillon en cours…","secondary");try{await ta(n,a,o,a.draft.pendingSyncAction,!0)}finally{a.autoSyncInFlight=!1}}};a.onlineHandler=l,window.__insuiteFtthOnlineSyncHandler=l,window.addEventListener("online",l),navigator.onLine&&((c=a.draft)!=null&&c.pendingSyncAction)&&window.setTimeout(l,200)}async function ta(n,a,o,l,c=!1){const d=n.querySelector("#ftthReportForm"),h=$o(n,a),f=new FormData(d),m=l==="submit",g=String(f.get("client_visit_status")||"intervention_effectuee"),w=String(f.get("planned_intervention_date")||"").trim(),y=String(f.get("planned_intervention_time")||"").trim();if(g==="reprogrammation_demandee"&&(!w||!y)){G(o,"Renseignez la date et l'heure de replanification avant d'enregistrer cette situation.","warning");return}if(f.set("ticket_id",String(a.ticket.id)),f.set("action_type",l),f.set("impacted_equipment",JSON.stringify(a.equipments)),f.set("materials_used",JSON.stringify(a.materials)),f.set("gps_lat",a.gpsLat||""),f.set("gps_lng",a.gpsLng||""),f.set("gps_accuracy_meters",a.gpsAccuracy||""),m&&a.clientSignatureData&&f.set("client_signature_data",a.clientSignatureData),m&&a.agentSignatureData&&f.set("agent_signature_data",a.agentSignatureData),m||(f.delete("constat_photos[]"),f.delete("interv_photos[]")),m&&(to(n,f,"constat"),to(n,f,"intervention")),!navigator.onLine){Ne(a.ticket.id,h,{pendingSyncAction:l}),a.draft=oi(a.ticket.id),G(o,"Hors ligne: brouillon local conservé, synchronisation automatique prévue au retour du réseau.","warning");return}try{G(o,c?"Synchronisation automatique de la fiche terrain…":l==="submit"?"Soumission de la fiche terrain…":"Enregistrement du brouillon…","secondary");let v=null;if(l==="draft"){const _={};for(const[x,T]of f.entries())T instanceof File||(_[x]=String(T??""));v=await qt("/api/mobile/ftth/report/save",_)}else v=await wo("/api/mobile/ftth/report/save",f);if(!(v!=null&&v.ok)){G(o,"Le serveur a refusé l'enregistrement de la fiche.","danger");return}if((v==null?void 0:v.ticket_status)==="attente_planification"){const _=Lt(a.ticket);Zi(a.ticket.id),a.draft=null,G(o,"Situation client enregistrée. Le ticket passe en attente de planification.","success"),Fi({scope:"list",kind:"warning",message:`${_.flashLabel} est maintenant en attente de planification.`})}else if(l==="submit"){const _=Lt(a.ticket);Zi(a.ticket.id),a.draft=null,G(o,"Fiche terrain soumise pour validation.","success"),Fi({scope:"list",kind:"success",message:`${_.flashLabel} a été soumis pour validation.`})}else{const _=Lt(a.ticket);Zi(a.ticket.id),a.draft=null,G(o,"Brouillon serveur enregistré.","success"),Fi({scope:"detail",kind:"success",message:`Le brouillon de ${_.flashLabel.toLowerCase()} a été enregistré.`})}window.setTimeout(()=>{if(l==="submit"||(v==null?void 0:v.ticket_status)==="attente_planification"){Wi("#/ftth");return}Wi(`#/ftth-report?id=${a.ticket.id}&savedAt=${Date.now()}`)},300)}catch(v){Ne(a.ticket.id,h,{pendingSyncAction:l}),a.draft=oi(a.ticket.id);const _=v==null?void 0:v.data,x=typeof _=="string"?_:(_==null?void 0:_.message)||(_==null?void 0:_.error)||"";if((v==null?void 0:v.status)===401){G(o,`Session expirée (401). Reconnectez-vous puis relancez l'enregistrement.${x?` ${x}`:""}`,"danger");return}if((v==null?void 0:v.status)===403){G(o,`Accès refusé (403): vous n'êtes plus affecté à ce ticket.${x?` ${x}`:""}`,"warning");return}if((v==null?void 0:v.status)===422){G(o,`Enregistrement refusé (422): ${x||"Vérifiez les champs obligatoires."}`,"warning");return}if(v!=null&&v.status){G(o,`Enregistrement impossible (${v.status}). ${x||"Le serveur a rejeté la requête."}`,"danger");return}const T=[v==null?void 0:v.code,v==null?void 0:v.name,v==null?void 0:v.message].filter(Boolean).map(M=>String(M)).join(" / ");let k="api_inconnue";try{await xt("/api/mobile/me"),k="api_ok"}catch(M){k=`api_ko:${(M==null?void 0:M.status)||(M==null?void 0:M.code)||(M==null?void 0:M.name)||(M==null?void 0:M.message)||"unknown"}`}G(o,`Erreur réseau: un brouillon local a été conservé et sera resynchronisé dès que possible. [diag:${k}${T?`|${T}`:""}]`,"danger")}}function Wi(n){const a=String(n||"#/ftth");if(location.hash===a){typeof HashChangeEvent<"u"?window.dispatchEvent(new HashChangeEvent("hashchange")):window.dispatchEvent(new Event("hashchange"));return}location.hash="",window.setTimeout(()=>{location.hash=a},25)}function Fi(n){sessionStorage.setItem(qi,JSON.stringify(n))}function gu(n,a){if(!n)return;const o=sessionStorage.getItem(qi);if(o)try{const l=JSON.parse(o);if(!(l!=null&&l.message)||l.scope!==a)return;G(n,l.message,l.kind||"success"),sessionStorage.removeItem(qi)}catch{sessionStorage.removeItem(qi)}}function to(n,a,o){const l=o==="constat"?"constat":"intervention";n.querySelectorAll(`[data-${l}-comment]`).forEach(c=>{o==="constat"?(a.append("constat_photo_comments[]",c.value||""),a.append("constat_photo_lats[]",""),a.append("constat_photo_lngs[]","")):(a.append("interv_photo_comments[]",c.value||""),a.append("interv_photo_item_index[]","0"))})}function $o(n,a){var d,h,f,m,g,w,y,v;const o=n.querySelector("#ftthReportForm"),l=new FormData(o),c={};for(const[_,x]of l.entries())x instanceof File||(c[_]=x);return c.impacted_equipment=a.equipments,c.materials_used=a.materials,c.gps_lat=a.gpsLat,c.gps_lng=a.gpsLng,c.gps_accuracy_meters=a.gpsAccuracy,c.client_signature_data=a.clientSignatureData||"",c.agent_signature_data=a.agentSignatureData||"",Lt(a.ticket).isRaccordement&&(c.selected_otb_id=((d=a.otb)==null?void 0:d.selectedId)||"",c.selected_otb_label=((h=a.otb)==null?void 0:h.selectedLabel)||"",c.recommended_otb_id=((f=a.otb)==null?void 0:f.recommendedId)||"",c.recommended_otb_label=((g=(m=a.otb)==null?void 0:m.recommended)==null?void 0:g.box_code)||"",c.otb_distance_meters=((w=a.otb)==null?void 0:w.distanceMeters)||"",c.otb_selection_mode=((y=a.otb)==null?void 0:y.selectionMode)||"none",c.otb_recommendation_payload=JSON.stringify(((v=a.otb)==null?void 0:v.recommendationPayload)||null)),c}function G(n,a,o){n&&(n.className=`mobile-status alert alert-${o}`,n.textContent=a,n.style.display="block")}function No(n){return{constat:"Constat",intervention:"Intervention",appreciation:"Appréciation",signatures:"Signatures"}[n]||n}function Ro(n){return(n||[]).map(a=>typeof a=="string"?{name:a,detail:""}:{name:a.name||a.label||a.designation||"",detail:a.detail||a.reference||""}).filter(a=>a.name)}function zo(n){return(n||[]).map(a=>typeof a=="string"?{designation:a,qty:"",reference:""}:{designation:a.designation||a.name||a.label||"",qty:a.qty||a.quantity||"",reference:a.reference||""}).filter(a=>a.designation)}function eo(n){return n?String(n).slice(0,10):""}function jn(n){if(!n)return"";const a=String(n);return a.includes("T")?a.slice(11,16):a.slice(0,5)}function bu(n){const a=new Date(n);return Number.isNaN(a.getTime())?n:a.toLocaleString("fr-FR")}function wa(n){return`insuite_ftth_draft_${n}`}function Ne(n,a,o={}){localStorage.setItem(wa(n),JSON.stringify({savedAt:new Date().toISOString(),payload:a,pendingSyncAction:o.pendingSyncAction||""}))}function Dt(n){const a=Number(n||0);return!Number.isFinite(a)||a<=0?"N/A":a>=1e3?`${(a/1e3).toFixed(2).replace(".",",")} km`:`${Math.round(a)} m`}function oi(n,a=!1){const o=localStorage.getItem(wa(n));if(!o)return null;try{const l=JSON.parse(o);return!a&&(l!=null&&l.payload)&&typeof l.payload=="object"&&(delete l.payload.selected_otb_id,delete l.payload.selected_otb_label,delete l.payload.recommended_otb_id,delete l.payload.recommended_otb_label,delete l.payload.otb_distance_meters,delete l.payload.otb_selection_mode,delete l.payload.otb_recommendation_payload),l}catch{return null}}function Zi(n){localStorage.removeItem(wa(n))}function Lt(n){const a=yu(n.extra_fields),o=wu(n,a),l=Vt(n.client_code,It(a,Et.subscription)),c=Vt(n.client_name,It(a,Et.customerName)),d=Vt(n.client_address,It(a,Et.address),n.site_name),h=Vt(n.client_phone,It(a,Et.contact1)),f=Vt(n.sro_client,It(a,Et.plaque)),m=Vt(n.jdv_client,It(a,Et.jdv)),g=Vt(n.pco_client,It(a,Et.pco)),w=Vt(n.avancement,It(a,Et.progress)),y=It(a,Et.city),v=It(a,Et.commune),_=Vt(n.company_name,It(a,Et.company)),x=[f?`PLAQUE ${f}`:"",m?`JDV ${m}`:"",g?`PCO ${g}`:""].filter(Boolean).join(" => ");return o?{isRaccordement:o,heroPill:"fiche raccordement mobile",title:c||"Client raccordement",subtitle:[l||n.ref_code||`RACC-${n.id}`,w||"Raccordement client"].filter(Boolean).join(" — "),kpiPrimaryLabel:"PLAQUE / JDV / PCO",kpiPrimaryValue:x||"Repères réseau non renseignés",kpiSecondaryLabel:"Localisation",kpiSecondaryValue:d||(y&&v?`${y} / ${v}`:y||v||"Non renseignée"),kpiTertiaryLabel:"Avancement",kpiTertiaryValue:w||"Non renseigné",kpiQuaternaryLabel:"Contact",kpiQuaternaryValue:h||"Non renseigné",routeTitle:"Accès raccordement",summaryPrimaryLabel:"Abonnement / client",summaryPrimaryValue:[l,c].filter(Boolean).join(" · ")||"Non renseigné",summarySecondaryLabel:"Date d'intervention",summaryTertiaryLabel:"Suivi raccordement",summaryTertiaryValue:[w,_].filter(Boolean).join(" · ")||"Aucun suivi saisi",flashLabel:l?`Le raccordement ${l}`:`La fiche ${c||`RACC-${n.id}`}`,mapLabel:c||l||n.ref_code||`RACC-${n.id}`}:{isRaccordement:o,heroPill:"fiche terrain mobile",title:n.client_name||"Client FTTH",subtitle:`${n.nature_intervention||"Maintenance FTTH B2B"} — ${n.ref_code||`FTTH-${n.id}`}`,kpiPrimaryLabel:"Réseau",kpiPrimaryValue:x||"Repères réseau non renseignés",kpiSecondaryLabel:"Adresse",kpiSecondaryValue:d||"Non renseignée",kpiTertiaryLabel:"Priorité",kpiTertiaryValue:n.priority||"Moyenne",kpiQuaternaryLabel:"Téléphone",kpiQuaternaryValue:h||"Non renseigné",routeTitle:"Accès client",summaryPrimaryLabel:"Client concerné",summaryPrimaryValue:n.client_name||"Non renseigné",summarySecondaryLabel:"Date d'intervention",summaryTertiaryLabel:"Commentaires terrain",flashLabel:`La fiche ${n.ref_code||`FTTH-${n.id}`}`,mapLabel:n.client_name||n.ref_code||`FTTH-${n.id}`}}function yu(n){if(!n)return{};if(typeof n=="object")return n;try{const a=JSON.parse(n);return a&&typeof a=="object"?a:{}}catch{return{}}}function It(n,a){const o=Object.entries(n||{});for(const l of a){const c=ea(l);for(const[d,h]of o){const f=ea(d);if(!(!f||h==null||String(h).trim()==="")&&(f===c||f.includes(c)||c.includes(f)))return String(h).trim()}}return""}function wu(n,a){return typeof(n==null?void 0:n.mobile_is_raccordement)=="boolean"?n.mobile_is_raccordement:ea((a==null?void 0:a.module)||"")==="raccordement clients"}function ea(n){return String(n||"").normalize("NFD").replace(/[\u0300-\u036f]/g,"").toLowerCase().replace(/[^a-z0-9]+/g," ").trim()}function Vt(...n){for(const a of n)if(a!=null&&String(a).trim()!=="")return String(a).trim();return""}function A(n){return String(n??"").replace(/&/g,"&").replace(//g,">").replace(/"/g,""")}function Z(n){return A(n).replace(/'/g,"'")}const Lu="/cartography/tracking-context",Bo="/cartography/update-location",Do=12e4,Su=6e4,xu=10,Gi=Qt("BackgroundTracking");let io=!1,ei=null,ii=null,Ce=null;function La(){return X.getPlatform()==="android"}function Tu(n){return n.startsWith("http")?n:`${Yi()}${n}`}async function Pu(){if(La())try{await Gi.configure({token:li(),updateUrl:Tu(Bo),intervalMs:Do})}catch{}}async function ku(){if(La())try{await Pu(),await Gi.start(),await Gi.syncOnce()}catch{}}async function qo(){if(La())try{await Gi.stop()}catch{}}function Ho(){return typeof navigator<"u"&&!!navigator.geolocation}function $i(n){return n*Math.PI/180}function Au(n,a,o,l){const d=$i(o-n),h=$i(l-a),f=Math.sin(d/2)**2+Math.cos($i(n))*Math.cos($i(o))*Math.sin(h/2)**2;return 6371e3*2*Math.atan2(Math.sqrt(f),Math.sqrt(1-f))}function Cu(n){if(!Ce)return!0;const a=Date.now(),o=Au(Ce.lat,Ce.lng,n.latitude,n.longitude),l=a-Ce.sentAt;return o>=xu||l>=Su}async function no(n){const a=n==null?void 0:n.coords;if(!(!a||!Cu(a)))try{await qt(Bo,{lat:a.latitude,lng:a.longitude,accuracy:a.accuracy??"",heading:a.heading??"",speed:a.speed??"",source:"mobile_auto_tracking"}),Ce={lat:Number(a.latitude),lng:Number(a.longitude),sentAt:Date.now()}}catch{}}function Fo(){ei!==null&&Ho()&&navigator.geolocation.clearWatch(ei),ei=null}function Mu(){ei!==null||!Ho()||(navigator.geolocation.getCurrentPosition(n=>{no(n)},()=>{},{enableHighAccuracy:!0,maximumAge:15e3,timeout:2e4}),ei=navigator.geolocation.watchPosition(n=>{no(n)},()=>{},{enableHighAccuracy:!0,maximumAge:15e3,timeout:2e4}))}function Zo(){ii===null&&(ii=window.setInterval(()=>{Ie().catch(()=>{})},Do))}function Eu(){ii!==null&&window.clearInterval(ii),ii=null}async function Iu(){try{const n=await xt(Lu);return n!=null&&n.ok?n:null}catch{return null}}async function Ie(){if(!li())return ni(),null;const n=await Iu();return n!=null&&n.should_track?(await ku(),Mu(),Zo(),n):(Fo(),await qo(),n)}function ni(){Fo(),Eu(),qo(),Ce=null}function Ou(){io||(io=!0,Zo(),document.addEventListener("visibilitychange",()=>{document.hidden||Ie().catch(()=>{})}),window.addEventListener("focus",()=>{Ie().catch(()=>{})}),Ee&&typeof Ee.addListener=="function"&&Ee.addListener("appStateChange",({isActive:n})=>{n&&Ie().catch(()=>{})}))}const Sa={"/dashboard":{title:"Dashboard",subtitle:"Pilotage rapide des interventions mobiles"},"/assigned":{title:"Incidents",subtitle:"Traitement terrain et suivi des tickets",backTarget:"/dashboard"},"/nearby":{title:"Proximité agent",subtitle:"Clients FTTH proches et itinéraires terrain",backTarget:"/dashboard"},"/treatment":{title:"Traitement incident",subtitle:"Saisie terrain et clôture opérationnelle",backTarget:"/assigned"},"/ftth":{title:"FTTH B2B",subtitle:"Portefeuille terrain et interventions assignées",backTarget:"/dashboard"},"/ftth-report":{title:"Fiche terrain",subtitle:"Expérience mobile premium pour Android",backTarget:"/ftth"}};let Xt=null,Gt=Ki(),ao=!1,so=null,oo=!1,Qe=0,Oe=null,Un=null,Ni=!1,wt=null,ve=null,ro=!1,ia=0;const $u=4500;function jo(){const n=(location.hash||"#/activate").slice(1),[a,o]=n.split("?"),l=a||"/activate",c=new URLSearchParams(o||"");return{path:l,params:c}}function tn(n){return n instanceof HTMLElement&&n.matches('input:not([type="button"]):not([type="submit"]):not([type="reset"]):not([type="checkbox"]):not([type="radio"]):not([type="range"]), textarea, select, [contenteditable="true"]')}function Nu({resetBaseline:n=!1}={}){const a=document.documentElement,o=window.visualViewport,l=Math.round((o==null?void 0:o.height)||window.innerHeight||document.documentElement.clientHeight||0),c=Math.round((o==null?void 0:o.offsetTop)||0);(n||!Qe||l>=Qe-48)&&(Qe=Math.max(Qe,l));const d=Math.max(0,Qe-l-c),h=Math.max(d,ia),f=h>120&&tn(document.activeElement),m={visibleHeight:Math.max(l,320),keyboardInset:h,keyboardOpen:f};!n&&wt&&Math.abs(wt.visibleHeight-m.visibleHeight)<=2&&Math.abs(wt.keyboardInset-m.keyboardInset)<=2&&wt.keyboardOpen===m.keyboardOpen||(wt=m,a.style.setProperty("--app-height",`${m.visibleHeight}px`),a.style.setProperty("--app-keyboard-offset",`${h}px`),document.body.classList.toggle("keyboard-open",f))}function Kt({resetBaseline:n=!1}={}){Ni=Ni||n,Un===null&&(Un=window.requestAnimationFrame(()=>{const a=Ni;Un=null,Ni=!1,Nu({resetBaseline:a})}))}function Ru(n){let a=(n==null?void 0:n.parentElement)||null;for(;a;){const o=window.getComputedStyle(a),l=o.overflowY||o.overflow;if(/(auto|scroll|overlay)/.test(l)&&a.scrollHeight>a.clientHeight+4)return a;a=a.parentElement}return document.scrollingElement||document.documentElement}function zu(){const n=(wt==null?void 0:wt.keyboardInset)||0;return Math.max(24,Math.min(140,Math.round(n*.35)+24))}function Uo(n,a=220){tn(n)&&(Oe&&window.clearTimeout(Oe),Oe=window.setTimeout(()=>{var m;if(!document.contains(n))return;const o=Ru(n),l=Math.round(((m=window.visualViewport)==null?void 0:m.height)||window.innerHeight||document.documentElement.clientHeight||0),c=(wt==null?void 0:wt.keyboardInset)||0,d=zu(),h=Math.max(120,l-Math.max(c,d));n.scrollIntoView({block:"center",inline:"nearest",behavior:"auto"});const f=n.getBoundingClientRect();if(o instanceof HTMLElement&&o!==document.body&&o!==document.documentElement){const g=o.getBoundingClientRect(),w=g.top+d,y=Math.min(g.bottom-d,h);f.bottom>y?o.scrollTop+=f.bottom-y:f.toph?window.scrollBy({top:f.bottom-h,behavior:"auto"}):f.top{ve=null,wt!=null&&wt.keyboardOpen&&Uo(a,0)},n))}function Bu(){if(oo)return;oo=!0,!ro&&X.getPlatform()==="android"&&(ro=!0,Fs.addListener("keyboardDidShow",a=>{ia=Math.max(0,Math.round((a==null?void 0:a.keyboardHeight)||0)),Kt(),lo(0)}),Fs.addListener("keyboardDidHide",()=>{ia=0,Kt({resetBaseline:!0})}));const n=()=>{Kt(),lo()};Kt({resetBaseline:!0}),window.addEventListener("resize",n),window.addEventListener("orientationchange",()=>{window.setTimeout(()=>Kt({resetBaseline:!0}),180)}),window.visualViewport&&window.visualViewport.addEventListener("resize",n),document.addEventListener("focusin",a=>{const o=a.target;tn(o)&&(Kt(),Uo(o,180))},!0),document.addEventListener("focusout",()=>{Oe&&(window.clearTimeout(Oe),Oe=null),ve&&(window.clearTimeout(ve),ve=null),window.setTimeout(()=>Kt(),180)},!0)}function Du(n,a){const o=Sa[n]||{title:"Insuite Technicien",subtitle:"Console mobile terrain"};return n==="/ftth"?{...o,title:a.moduleLabel,subtitle:a.moduleHeroSubtitle,backTarget:"/dashboard"}:n==="/ftth-report"?{...o,title:a.technicianType==="raccordement"?"Fiche raccordement":"Fiche terrain",subtitle:a.technicianType==="raccordement"?"Saisie terrain et suivi opérationnel des raccordements clients":o.subtitle,backTarget:"/ftth"}:o}function qu(n,a){return a.navItems.map(o=>` ${o.label} `).join("")}function Hu(n,a){const o=Du(n,a),l=!!o.backTarget,d=new Set(["/activate","/login","/ftth-report"]).has(n),h=document.getElementById("app");h.innerHTML=`
${l?` `:''} ${d?"":`
`}
${o.title}
${d?"":`
${o.subtitle}
`}
Session mobile
`,Xt=h,ri(h),h.querySelector("#btnLogout").addEventListener("click",()=>{ni(),ai(),location.hash="#/login"});const m=h.querySelector("#btnBack");m&&m.addEventListener("click",()=>{Gu(n)});const g=h.querySelector("#btnNotifications");g==null||g.addEventListener("click",()=>{Vu(h)});const w=h.querySelector("#btnReadNotifications");return w==null||w.addEventListener("click",async()=>{await ca(),ri(h)}),h.addEventListener("click",y=>{const v=h.querySelector("#notificationPanel"),_=h.querySelector("#btnNotifications");!v||v.hidden||v.contains(y.target)||_!=null&&_.contains(y.target)||xa(h)}),h}async function Fu(){const n=Re(),a=n.logo_url||"/insuite-logo.svg",o=n.app_name||"Insuite Technicien",l=n.splash_url?`style="background-image:url('${Bt(n.splash_url)}');background-size:cover;background-position:center"`:"",c=document.getElementById("app");c.innerHTML=`
${Bt(o)}
Fiche terrain native-like pour Android
`,await new Promise(d=>window.setTimeout(d,1400))}async function Zu(n){const a=n.querySelector("#meLine");if(!a)return;const o=Gt||Ki();if(!o){a.textContent="";return}const l=sa(o),c=l.technicianType?` — ${l.moduleLabel}`:"";a.textContent=`${o.name||""} — ${o.email||""}${c}`.trim()}async function ju({force:n=!1}={}){if(!li())return Gt=null,Ui(),null;if(!n&&Gt)return Gt;if(!n){const o=Ki();if(o)return Gt=o,o}try{const o=await xt("/api/mobile/me");if(o!=null&&o.ok&&o.user)return Gt=vl(o.user),Gt}catch{}return Gt=null,Ui(),null}async function Vn(){const{path:n,params:a}=jo(),o=pe();if(ra()&&!o.activated&&(ai(),n!=="/activate")){location.hash="#/activate";return}const l=li();if(!o.activated&&n!=="/activate"){ni(),location.hash="#/activate";return}if(o.activated&&n==="/activate"){location.hash=l?"#/dashboard":"#/login";return}if(!l&&n!=="/login"&&n!=="/activate"){ni(),location.hash="#/login";return}if(l&&n==="/login"){location.hash="#/dashboard";return}if(n==="/activate"){const m=document.getElementById("app");Xt=null,m.innerHTML="",await hc(m,async()=>{location.hash="#/login"});return}if(n==="/login"){const m=document.getElementById("app");Xt=null,m.innerHTML="",await Po(m,async g=>{yl(g),Gt=null,await Ie(),location.hash="#/dashboard"});return}await Ie();const c=await ju();if(!c){ni(),ai(),location.hash="#/login";return}const d=sa(c);if(!d.canAccessPath(n)){location.hash=`#${d.defaultRoute}`;return}const h=Hu(n,d);h.querySelector('[data-role="status"]').style.display="none",await Zu(h),await Me({playSound:!1});const f=h.querySelector("#view");if(n==="/dashboard"){await ic(f,{experience:d});return}if(n==="/assigned"){await Ec(f);return}if(n==="/nearby"){await Tc(f);return}if(n==="/treatment"){const m=Number(a.get("id")||0);await $c(f,{incidentId:m});return}if(n==="/ftth"){await Dc(f,{experience:d});return}if(n==="/ftth-report"){const m=Number(a.get("id")||0);await Uc(f,{ticketId:m});return}f.innerHTML='
Route inconnue.
'}function Uu(){Bu(),Ou(),window.addEventListener("hashchange",()=>{window.__insuiteFtthOnlineSyncHandler&&(window.removeEventListener("online",window.__insuiteFtthOnlineSyncHandler),window.__insuiteFtthOnlineSyncHandler=null),Vn()}),window.addEventListener(So,()=>{Xt&&ri(Xt)}),Ju(),Wu(),Promise.allSettled([Fu(),Ri(ql()),Ri(lc())]).then(async()=>{Ku(),await Ri(uc()),await Ri(Me({playSound:!1})),await Vn(),Kt({resetBaseline:!0})}).catch(async()=>{await Vn(),Kt({resetBaseline:!0})})}function Ri(n,a=$u){return Promise.race([n,new Promise(o=>{window.setTimeout(o,a)})])}function ri(n){const a=ze(),o=Fl(),l=n.querySelector("#notifBadge"),c=n.querySelector("#notificationList");if(l&&(l.hidden=o<1,l.textContent=String(o)),!!c){if(!a.length){c.innerHTML='
Aucune notification in-app pour le moment.
';return}c.innerHTML=a.map(d=>` `).join(""),c.querySelectorAll("[data-route]").forEach(d=>{d.addEventListener("click",()=>{la(),ca().catch(()=>{});const h=d.getAttribute("data-route")||"/dashboard";xa(n),location.hash=`#${h}`})})}}function Vu(n){const a=n.querySelector("#notificationPanel");a&&(a.hidden=!a.hidden,a.hidden||(la(),ca().catch(()=>{}),ri(n)))}async function Me({playSound:n=!1}={}){try{await Zl({playSound:n})}catch{return}Xt&&ri(Xt)}function Wu(){so||(so=window.setInterval(()=>{!na()&&document.hidden||Me({playSound:!0})},3e4),document.addEventListener("visibilitychange",()=>{document.hidden||Me({playSound:!1})}),window.addEventListener("focus",()=>{Me({playSound:!1})}),na()&&Ee.addListener("appStateChange",({isActive:n})=>{n&&Me({playSound:!1})}))}function xa(n){const a=n.querySelector("#notificationPanel");if(!a)return!1;const o=!a.hidden;return a.hidden=!0,o}function Gu(n){var o;const a=(o=Sa[n])==null?void 0:o.backTarget;if(a){location.hash=`#${a}`;return}location.hash="#/dashboard"}function Ku(){const{icon_url:n}=Re();n&&["icon","apple-touch-icon"].forEach(a=>{let o=document.querySelector(`link[rel="${a}"]`);o||(o=document.createElement("link"),o.rel=a,document.head.appendChild(o)),o.href=n})}function na(){return typeof(X==null?void 0:X.isNativePlatform)=="function"&&X.isNativePlatform()}async function Ju(){ao||!na()||(ao=!0,await Ee.addListener("backButton",async()=>{var o;if(Xt&&xa(Xt))return;const{path:n}=jo(),a=(o=Sa[n])==null?void 0:o.backTarget;if(a){location.hash=`#${a}`;return}if(n==="/dashboard"||n==="/login"){window.confirm("Voulez-vous quitter l’application Insuite Technicien ?")&&await Ee.exitApp();return}location.hash="#/dashboard"}))}function Bt(n){return String(n??"").replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}oa();Uu();export{_o as W};