Files
pocketbase/ui/dist/assets/index-CqTYCBEi.js
2026-04-20 10:32:23 +03:00

81 lines
561 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./docsList-BAfVNUIM.js","./expandInfo-DGS0CLSa.js","./fieldsInfo-Bz62125-.js","./filterSyntax-Df6AnI5x.js","./docsView-Be6Uhvcf.js","./docsCreate-Be3S3y5K.js","./docsUpdate-LtD8DbWI.js","./docsListAuthMethods-9feSopQX.js","./docsAuthWithPassword-DEWj8Jyn.js","./docsAuthWithOAuth2-DUIE4EoY.js","./docsAuthWithOTP-B7z2VJzp.js","./docsAuthRefresh-UjveHHwo.js","./pageInstaller-CboSj8bL.js","./pocketbase.es-B_4DUNUU.js","./pageConfirmPasswordReset-xSsXQyFi.js","./pageConfirmVerification-BSn_UexA.js","./pageConfirmEmailChange-DWXtM27Q.js"])))=>i.map(i=>d[i]);
import{a as e,n,r,t as i}from"./pocketbase.es-B_4DUNUU.js";var a=Object.create,o=Object.defineProperty,s=Object.getOwnPropertyDescriptor,c=Object.getOwnPropertyNames,l=Object.getPrototypeOf,u=Object.prototype.hasOwnProperty,d=(e,n)=>()=>(n||e((n={exports:{}}).exports,n),n.exports),f=(e,n,r,i)=>{if(n&&typeof n==`object`||typeof n==`function`)for(var a=c(n),l=0,d=a.length,f;l<d;l++)f=a[l],!u.call(e,f)&&f!==r&&o(e,f,{get:(e=>n[e]).bind(null,f),enumerable:!(i=s(n,f))||i.enumerable});return e},p=(e,n,r)=>(r=e==null?{}:a(l(e)),f(n||!e||!e.__esModule?o(r,`default`,{value:e,enumerable:!0}):r,e));(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))r(e);new MutationObserver(e=>{for(let n of e)if(n.type===`childList`)for(let e of n.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&r(e)}).observe(document,{childList:!0,subtree:!0});function n(e){let n={};return e.integrity&&(n.integrity=e.integrity),e.referrerPolicy&&(n.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?n.credentials=`include`:e.crossOrigin===`anonymous`?n.credentials=`omit`:n.credentials=`same-origin`,n}function r(e){if(e.ep)return;e.ep=!0;let r=n(e);fetch(e.href,r)}})();var m=`abcdefghijklmnopqrstuvwxyz0123456789`,h=`pb_redirect`,g=store({hash:window.location.hash});window.addEventListener(`hashchange`,()=>{g.hash=window.location.hash}),Prism.languages.pbrule={string:Prism.languages.js.string,number:Prism.languages.js.number,function:Prism.languages.js.function,boolean:/\b(?:true|false)\b/i,constant:/\b(?:null)\b/i,comment:{pattern:/\/\/.*/,greedy:!0},italic:/_via_|\:\w+/,keyword:/&&|\|\||\??(?:!~|!=|>=|<=|=|~|>|>|<)(?=[@\w\s]|$)/};var _={isObject(e){return typeof e==`object`&&!!e&&e.constructor===Object},isEmpty(e){return e==null||e===``||Array.isArray(e)&&e.length===0||typeof e==`object`&&app.utils.isEmptyObject(e)},isEmptyObject(e){for(let n in e)return!1;return!0},toArray(e,n=!1){return Array.isArray(e)?e.slice():(n||!_.isEmpty(e))&&e!==void 0?[e]:[]},removeByValue(e,n){if(!Array.isArray(e)){console.warn(`[removeByValue] not an array:`,e);return}for(let r=e.length-1;r>=0;r--)if(e[r]==n){e.splice(r,1);break}},removeByKey(e,n,r){if(!Array.isArray(e)){console.warn(`[removeByKey] not an array:`,e);return}for(let i in e)if(e[i][n]==r){e.splice(i,1);break}},pushUnique(e,n){if(!Array.isArray(e)){console.warn(`[pushUnique] not an array:`,e);return}e.includes(n)||e.push(n)},mergeUnique(e,n){for(let r of n)app.utils.pushUnique(e,r);return e},pushOrReplaceObject(e,n,r=`id`){for(let i=e.length-1;i>=0;i--)if(e[i][r]==n[r]){e[i]=n;return}e.push(n)},filterDuplicatesByKey(e,n=`id`){e=Array.isArray(e)?e:[];let r={};for(let i of e)r[i[n]]=i;return Object.values(r)},filterRedactedProps(e,n=`******`){let r=JSON.parse(JSON.stringify(e||{}));for(let e in r)typeof r[e]==`object`&&r[e]!==null?r[e]=_.filterRedactedProps(r[e],n):r[e]===n&&delete r[e];return r},getByPath(e,n,r=null,i=`.`){let a=e||{},o=(n||``).split(i);for(let e of o){if(!_.isObject(a)&&!Array.isArray(a)||a[e]===void 0)return r;a=a[e]}return a},setByPath(e,n,r,i=`.`){if(typeof e!=`object`||!e){console.warn(`setByPath: data not an object or array.`);return}let a=e,o=n.split(i),s=o.pop();for(let e of o)(!_.isObject(a)&&!Array.isArray(a)||!_.isObject(a[e])&&!Array.isArray(a[e]))&&(a[e]={}),a=a[e];a[s]=r},deleteByPath(e,n,r=`.`){let i=e||{},a=(n||``).split(r),o=a.pop();for(let e of a)(!_.isObject(i)&&!Array.isArray(i)||!_.isObject(i[e])&&!Array.isArray(i[e]))&&(i[e]={}),i=i[e];Array.isArray(i)?i.splice(o,1):_.isObject(i)&&delete i[o],a.length>0&&(Array.isArray(i)&&!i.length||_.isObject(i)&&!Object.keys(i).length)&&(Array.isArray(e)&&e.length>0||_.isObject(e)&&Object.keys(e).length>0)&&_.deleteByPath(e,a.join(r),r)},emptyClone(e,n=[]){let r=JSON.parse(JSON.stringify(e));for(let e in r)n.includes(e)||(typeof r[e]==`string`?r[e]=``:typeof r[e]==`number`?r[e]=0:Array.isArray(r[e])?r[e]=[]:app.utils.isObject(r[e])&&(r[e]={}));return r},randomString(e=8,n=m){let r=``;for(let i=0;i<e;i++)r+=n.charAt(Math.floor(Math.random()*n.length));return r},randomSecret(e=30){if(typeof crypto>`u`)return app.utils.randomString(e);let n=new Uint8Array(e);crypto.getRandomValues(n);let r=``;for(let i=0;i<e;i++)r+=`-_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz`.charAt(n[i]%64);return r},sentenize(e,n=!0){if(typeof e!=`string`)return``;if(e=e.trim().split(`_`).join(` `),e===``)return e;if(e=e[0].toUpperCase()+e.substring(1),n){let n=e[e.length-1];n!==`.`&&n!==`?`&&n!==`!`&&(e+=`.`)}return e},trimQuotedValue(e){return typeof e==`string`&&(e[0]==`"`||e[0]==`'`||e[0]=="`")&&e[0]==e[e.length-1]?e.slice(1,-1):e},slugify(e,n=`_`,r=[]){if(e===``)return``;let i={a:/а|à|á|å|â/gi,b:/б/gi,c:/ц|ç/gi,d:/д/gi,e:/е|è|é|ê|ẽ|ë/gi,f:/ф/gi,g:/г/gi,h:/х/gi,i:/й|и|ì|í|î/gi,j:/ж/gi,k:/к/gi,l:/л/gi,m:/м/gi,n:/н|ñ/gi,o:/о|ò|ó|ô|ø/gi,p:/п/gi,q:/я/gi,r:/р/gi,s:/с/gi,t:/т/gi,u:/ю|ù|ú|ů|û/gi,v:/в/gi,w:/в/gi,x:/ь/gi,y:/ъ/gi,z:/з/gi,ae:/ä|æ/gi,oe:/ö/gi,ue:/ü/gi,Ae:/Ä/gi,Ue:/Ü/gi,Oe:/Ö/gi,ss:/ß/gi,and:/&/gi};for(let n in i)e=e.replace(i[n],n);return e.replace(RegExp(`[`+r.join(``)+`]`,`g`),` `).replace(/[^\w\ ]/gi,``).replace(/\s+/g,n)},encodeEntities(e){return e?e.replaceAll(`&`,`&amp;`).replaceAll(`<`,`&lt;`).replaceAll(`>`,`&gt;`).replaceAll(`"`,`&quot;`).replaceAll(`'`,`&#039;`):``},plainText(e){return e?(new DOMParser().parseFromString(e,`text/html`).body.textContent||``).trim():``},truncate(e,n=150,r=!0){if(e=``+e,e.length<=n)return e;if(e=e.slice(0,n),r){for(;e.endsWith(`.`);)e=e.slice(0,-1);e+=`...`}return e},truncateObject(e,n=150,r=!0){let i=Array.isArray(e)?[]:{};for(let a in e){let o=e[a];typeof o==`string`?o=app.utils.truncate(o,n,r):(Array.isArray(o)||app.utils.isObject(o))&&(o=app.utils.truncateObject(o,n,r)),i[a]=o}return i},stringifyValue(e,n=`N/A`,r=150){if(_.isEmpty(e))return n;if(typeof e==`number`)return``+e;if(typeof e==`boolean`)return e?`True`:`False`;if(typeof e==`string`)return e=e.indexOf(`<`)>=0?_.plainText(e):e,_.truncate(e,r)||n;if(Array.isArray(e)&&typeof e[0]!=`object`)return _.truncate(e.join(`,`),r);if(typeof e==`object`)try{return _.truncate(JSON.stringify(e),r)||n}catch{return n}return e},splitNonEmpty(e,n=`,`){let r=(e||``).split(n),i=[];for(let e of r)e=e.trim(),_.isEmpty(e)||i.push(e);return i},joinNonEmpty(e,n=`, `){e||=[];let r=[];for(let n of e)n=typeof n==`string`?n.trim():n,_.isEmpty(n)||r.push(``+n);return r.join(n)},formattedFileSize(e){let n=e?Math.floor(Math.log(e)/Math.log(1024)):0;return(e/1024**n).toFixed(2)*1+` `+[`B`,`KB`,`MB`,`GB`,`TB`][n]},toRFC3339Datetime(e){if(!e)return``;let n;return n=e instanceof Date?e:typeof e==`string`?new Date(e.replace(` `,`T`)):new Date(e),n.toISOString().replace(`T`,` `)},toLocalDatetime(e){if(!e)return``;let n;n=e instanceof Date?e:typeof e==`string`?new Date(e.replace(` `,`T`)):new Date(e);let r=n.getFullYear();return isNaN(r)?``:`${r}-${(n.getMonth()+1).toString().padStart(2,`0`)}-${n.getDate().toString().padStart(2,`0`)} ${n.getHours().toString().padStart(2,`0`)}:${n.getMinutes().toString().padStart(2,`0`)}:${n.getSeconds().toString().padStart(2,`0`)}.${n.getMilliseconds().toString().padStart(3,`0`)}`},toDatetimeLocalInputValue(e){if(!e)return``;let n;n=e instanceof Date?e:typeof e==`string`?new Date(e.replaceAll(` `,`T`)):new Date(e);let r=n.getFullYear();return isNaN(r)?``:`${r}-${(n.getMonth()+1).toString().padStart(2,`0`)}-${n.getDate().toString().padStart(2,`0`)}T${n.getHours().toString().padStart(2,`0`)}:${n.getMinutes().toString().padStart(2,`0`)}:${n.getSeconds().toString().padStart(2,`0`)}`},async copyToClipboard(e){if(e=e==null?``:e instanceof Date?e.toISOString():typeof e==`object`?JSON.stringify(e):``+e,!(!e.length||!window.navigator?.clipboard))return window.navigator.clipboard.writeText(e).catch(e=>{console.warn(`Failed to copy.`,e)})},download(e,n){let r=document.createElement(`a`);r.setAttribute(`href`,e),r.setAttribute(`download`,n),r.setAttribute(`target`,`_blank`),r.setAttribute(`rel`,`noopener noreferrer`),r.click(),r=null},downloadJSON(e,n){n=n.endsWith(`.json`)?n:n+`.json`;let r=new Blob([JSON.stringify(e,null,2)],{type:`application/json`}),i=window.URL.createObjectURL(r);_.download(i,n)},getApiExampleURL(){let e;if(app.pb.baseURL.startsWith(`http://`)||app.pb.baseURL.startsWith(`https://`))e=app.pb.baseURL;else{e=window.location.href;let n=e.indexOf(`/_/`);e=n>=0?e.substring(0,n):window.location.origin}return e.replace(`//localhost`,`//127.0.0.1`)},isActivePath(e,n=!0,r=``){r||=g.hash;let i;return i=RegExp(n?`^`+RegExp.escape(e)+`\\/?.*$`:`^`+RegExp.escape(e)+`\\/?(?:\\?.+)?$`),i.test(r)},getHashQueryParams(e=``){e||=g.hash;let n=``,r=e.indexOf(`?`);return r>-1&&(n=window.location.hash.substring(r+1)),Object.fromEntries(new URLSearchParams(n))},replaceHashQueryParams(e,n=null){e||={};let r=``,i=window.location.hash,a=i.indexOf(`?`);a>-1&&(r=i.substring(a+1),i=i.substring(0,a));let o=new URLSearchParams(r);for(let n in e){let r=e[n];_.isEmpty(r)?o.delete(n):o.set(n,r)}r=o.toString(),r!=``&&(i+=`?`+r);let s=window.location.href,c=s.indexOf(`#`);c>-1&&(s=s.substring(0,c));let l=s+i;return n===!1||(n===!0?window.history.pushState(null,``,l):window.history.replaceState(null,``,l)),l},rememberPath(){window.localStorage.setItem(h,window.location.hash)},toRememberedPath(e=`#/collections`){let n=window.localStorage.getItem(h);n&&window.localStorage.removeItem(h),window.location.hash=n||e},getLocalHistory(e,n=null){try{let r=window.localStorage.getItem(e);if(r)return JSON.parse(r)||n}catch(n){console.log(`failed to load local history:`,e,n)}return n},saveLocalHistory(e,n){try{app.utils.isEmpty(n)?window.localStorage.removeItem(e):typeof n==`string`?window.localStorage.setItem(e,n):window.localStorage.setItem(e,JSON.stringify(n))}catch(n){console.log(`failed to save local history:`,e,n)}},generateThumb(e,n=100,r=100){return new Promise(i=>{let a=new FileReader;a.onload=function(a){let o=new Image;o.onload=function(){let a=document.createElement(`canvas`),s=a.getContext(`2d`),c=o.width,l=o.height;return a.width=n,a.height=r,s.drawImage(o,c>l?(c-l)/2:0,0,c>l?l:c,c>l?l:c,0,0,n,r),i(a.toDataURL(e.type))},o.src=a.target.result},a.readAsDataURL(e)})},normalizeSearchFilter(e,n=[]){if(e=(e||``).trim(),!e||!n.length)return e;for(let n of[`=`,`!=`,`~`,`!~`,`>`,`>=`,`<`,`<=`])if(e.includes(n))return e;return e=isNaN(e)&&e!=`true`&&e!=`false`?`"${e.replace(/^[\"\'\`]|[\"\'\`]$/gm,``)}"`:e,n.map(n=>`${n}~${e}`).join(`||`)},logLevels:{[-4]:{label:`DEBUG`,class:``},0:{label:`INFO`,class:`success`},4:{label:`WARN`,class:`warning`},8:{label:`ERROR`,class:`danger`}},logDataFormatters:{execTime:function(e){return e?.data?.execTime===void 0?`N/A`:e.data.execTime+`ms`}},extendStore(e,n={},...r){let i=[];for(let a in n){let o=n[a];typeof e.__raw?.[a]==`function`||typeof o!=`function`||a.length>2&&a.startsWith(`on`)||r.includes(a)?e[a]=o:i.push(watch(o,n=>{e[a]=n}))}return i},cssTimeToMs(e){return e?(e=e.toLowerCase(),e.endsWith(`ms`)?Number(e.substring(0,e.length-2)):e.endsWith(`s`)?Number(e.substring(0,e.length-1)):Number(e)||0):0},isDarkEnoughForWhiteText(e){if(e=e?.startsWith(`#`)?e.substring(1):e,e?.length!=6)return!1;let n=parseInt(e.substring(0,2),16),r=parseInt(e.substring(2,4),16),i=parseInt(e.substring(4,6),16);return(n*299+r*587+i*114)/1e3<128},imageExtensions:[`.jpg`,`.jpeg`,`.png`,`.svg`,`.gif`,`.jfif`,`.webp`,`.avif`],videoExtensions:[`.mp4`,`.avi`,`.mov`,`.3gp`,`.wmv`],audioExtensions:[`.aa`,`.aac`,`.m4v`,`.mp3`,`.ogg`,`.oga`,`.mogg`,`.amr`],documentExtensions:[`.pdf`,`.doc`,`.docx`,`.xls`,`.xlsx`,`.ppt`,`.pptx`,`.odp`,`.odt`,`.ods`,`.txt`],hasImageExtension(e){return e=(e||``).toLowerCase(),!!app.utils.imageExtensions.find(n=>e.endsWith(n))},hasVideoExtension(e){return e=(e||``).toLowerCase(),!!app.utils.videoExtensions.find(n=>e.endsWith(n))},hasAudioExtension(e){return e=(e||``).toLowerCase(),!!app.utils.audioExtensions.find(n=>e.endsWith(n))},hasDocumentExtension(e){return e=(e||``).toLowerCase(),!!app.utils.documentExtensions.find(n=>e.endsWith(n))},getFileType(e){return app.utils.hasImageExtension(e)?`image`:app.utils.hasVideoExtension(e)?`video`:app.utils.hasAudioExtension(e)?`audio`:app.utils.hasDocumentExtension(e)?`document`:`file`},fileTypeIcons:{image:`ri-image-line`,video:`ri-movie-line`,audio:`ri-music-2-line`,document:`ri-file-line`,file:`ri-file-line`},fallbackFieldIcon:`ri-puzzle-line`,fallbackCollectionIcon:`ri-puzzle-line`,fallbackProviderIcon:`ri-puzzle-line`,fallbackPresentableProps:[`title`,`name`,`slug`,`email`,`username`,`nickname`,`displayName`,`label`,`subject`,`topic`,`message`,`heading`,`headline`,`header`,`caption`,`key`,`identifier`,`id`],sortedCollections(e=[]){let n,r;function i(e,i){return n=e.name.startsWith(`_`),r=i.name.startsWith(`_`),n&&!r?1:!n&&r?-1:e.name>i.name?1:e.name<i.name?-1:0}return e.slice().sort(i)},sortedCollectionsByType(e=[]){let n=[],r=[],i=[];for(let a of e)a.type===`auth`?n.push(a):a.type===`base`?r.push(a):i.push(a);return[].concat(app.utils.sortedCollections(n),app.utils.sortedCollections(r),app.utils.sortedCollections(i))},hasCollectionChanges(e,n,r=!1){if(e||={},n||={},e.id!=n.id)return!0;for(let r in e)if(r!==`fields`&&JSON.stringify(e[r])!==JSON.stringify(n[r]))return!0;let i=Array.isArray(e.fields)?e.fields:[],a=Array.isArray(n.fields)?n.fields:[],o=i.filter(e=>e?.id&&!a.find(n=>n.id==e.id)),s=a.filter(e=>e?.id&&!i.find(n=>n.id==e.id)),c=a.filter(e=>{let n=app.utils.isObject(e)&&i.find(n=>n.id==e.id);if(!n)return!1;for(let r in n)if(JSON.stringify(e[r])!=JSON.stringify(n[r]))return!0;return!1});return!!(s.length||c.length||r&&o.length)},extractColumnsFromQuery(e){let n=`__PBGROUP__`;e=(e||``).replace(/\([\s\S]+?\)/gm,n).replace(/[\t\r\n]|(?:\s\s)+/g,` `);let r=e.match(/select\s+([\s\S]+)\s+from/)?.[1]?.split(`,`)||[],i=[];for(let e of r){let r=e.trim().split(` `).pop();r!=``&&r!=n&&i.push(r.replace(/[\'\"\`\[\]\s]/g,``))}return i},getAllCollectionIdentifiers(e,n=``){if(!e)return[];let r=[n+`id`],i=e.type==`auth`;if(e.type===`view`)for(let i of app.utils.extractColumnsFromQuery(e.viewQuery))app.utils.pushUnique(r,n+i);let a=e.fields||[];for(let e of a)if(!(e.type==`password`||i&&e.name==`tokenKey`))if(app.fieldTypes[e.type]?.identifierExtractor){let i=app.utils.toArray(app.fieldTypes[e.type]?.identifierExtractor(e,n));for(let e of i)app.utils.pushUnique(r,e)}else app.utils.pushUnique(r,n+e.name);return r},getDummyFieldsData(e,n=!1){let r=e?.fields||[],i={};for(let e of r)if(!e.hidden)if(app.fieldTypes[e.type]?.dummyData){let r=app.fieldTypes[e.type].dummyData(e,n);r!==void 0&&(i[e.name]=r)}else i[e.name]=`[[DATA]]`;return i},parseIndex(e){let n={unique:!1,optional:!1,schemaName:``,indexName:``,tableName:``,columns:[],where:``},r=/create\s+(unique\s+)?\s*index\s*(if\s+not\s+exists\s+)?(\S*)\s+on\s+(\S*)\s*\(([\s\S]*)\)(?:\s*where\s+([\s\S]*))?/gim.exec((e||``).trim());if(r?.length!=7)return n;let i=/^[\"\'\`\[\{}]|[\"\'\`\]\}]$/gm;n.unique=r[1]?.trim().toLowerCase()===`unique`,n.optional=!app.utils.isEmpty(r[2]?.trim());let a=(r[3]||``).split(`.`);a.length==2?(n.schemaName=a[0].replace(i,``),n.indexName=a[1].replace(i,``)):(n.schemaName=``,n.indexName=a[0].replace(i,``)),n.tableName=(r[4]||``).replace(i,``);let o=(r[5]||``).replace(/,(?=[^\(]*\))/gim,`{PB_TEMP}`).split(`,`);for(let e of o){e=e.trim().replaceAll(`{PB_TEMP}`,`,`);let r=/^([\s\S]+?)(?:\s+collate\s+([\w]+))?(?:\s+(asc|desc))?$/gim.exec(e);if(r?.length!=4)continue;let a=r[1]?.trim()?.replace(i,``);a&&n.columns.push({name:a,collate:r[2]||``,sort:r[3]?.toUpperCase()||``})}return n.where=r[6]||``,n},buildIndex(e){let n=`CREATE `;e.unique&&(n+=`UNIQUE `),n+=`INDEX `,e.optional&&(n+=`IF NOT EXISTS `),e.schemaName&&(n+=`\`${e.schemaName}\`.`),n+=`\`${e.indexName||`idx_`+app.utils.randomString(10)}\` `,n+=`ON \`${e.tableName}\` (`;let r=e.columns.filter(e=>!!e?.name);return r.length>1&&(n+=`
`),n+=r.map(e=>{let n=``;return e.name.includes(`(`)||e.name.includes(` `)?n+=e.name:n+="`"+e.name+"`",e.collate&&(n+=` COLLATE `+e.collate),e.sort&&(n+=` `+e.sort.toUpperCase()),n}).join(`,
`),r.length>1&&(n+=`
`),n+=`)`,e.where&&(n+=` WHERE ${e.where}`),n},replaceIndexFields(e,n){let r=app.utils.parseIndex(e);return typeof n==`function`?Object.assign(r,n(r)||{}):Object.assign(r,n||{}),app.utils.buildIndex(r)},replaceIndexColumn(e,n,r){if(n===r)return e;let i=app.utils.parseIndex(e),a=!1;for(let e of i.columns)e.name===n&&(e.name=r,a=!0);return a?app.utils.buildIndex(i):e}};window.app=window.app||{},window.app.utils=_,window.app=window.app||{},window.app.utils=window.app.utils||{},window.app.utils.mimeTypes=[{ext:``,mimeType:`application/octet-stream`},{ext:`.xpm`,mimeType:`image/x-xpixmap`},{ext:`.7z`,mimeType:`application/x-7z-compressed`},{ext:`.zip`,mimeType:`application/zip`},{ext:`.xlsx`,mimeType:`application/vnd.openxmlformats-officedocument.spreadsheetml.sheet`},{ext:`.docx`,mimeType:`application/vnd.openxmlformats-officedocument.wordprocessingml.document`},{ext:`.pptx`,mimeType:`application/vnd.openxmlformats-officedocument.presentationml.presentation`},{ext:`.epub`,mimeType:`application/epub+zip`},{ext:`.apk`,mimeType:`application/vnd.android.package-archive`},{ext:`.jar`,mimeType:`application/jar`},{ext:`.odt`,mimeType:`application/vnd.oasis.opendocument.text`},{ext:`.ott`,mimeType:`application/vnd.oasis.opendocument.text-template`},{ext:`.ods`,mimeType:`application/vnd.oasis.opendocument.spreadsheet`},{ext:`.ots`,mimeType:`application/vnd.oasis.opendocument.spreadsheet-template`},{ext:`.odp`,mimeType:`application/vnd.oasis.opendocument.presentation`},{ext:`.otp`,mimeType:`application/vnd.oasis.opendocument.presentation-template`},{ext:`.odg`,mimeType:`application/vnd.oasis.opendocument.graphics`},{ext:`.otg`,mimeType:`application/vnd.oasis.opendocument.graphics-template`},{ext:`.odf`,mimeType:`application/vnd.oasis.opendocument.formula`},{ext:`.odc`,mimeType:`application/vnd.oasis.opendocument.chart`},{ext:`.sxc`,mimeType:`application/vnd.sun.xml.calc`},{ext:`.pdf`,mimeType:`application/pdf`},{ext:`.fdf`,mimeType:`application/vnd.fdf`},{ext:``,mimeType:`application/x-ole-storage`},{ext:`.msi`,mimeType:`application/x-ms-installer`},{ext:`.aaf`,mimeType:`application/octet-stream`},{ext:`.msg`,mimeType:`application/vnd.ms-outlook`},{ext:`.xls`,mimeType:`application/vnd.ms-excel`},{ext:`.pub`,mimeType:`application/vnd.ms-publisher`},{ext:`.ppt`,mimeType:`application/vnd.ms-powerpoint`},{ext:`.doc`,mimeType:`application/msword`},{ext:`.ps`,mimeType:`application/postscript`},{ext:`.psd`,mimeType:`image/vnd.adobe.photoshop`},{ext:`.p7s`,mimeType:`application/pkcs7-signature`},{ext:`.ogg`,mimeType:`application/ogg`},{ext:`.oga`,mimeType:`audio/ogg`},{ext:`.ogv`,mimeType:`video/ogg`},{ext:`.png`,mimeType:`image/png`},{ext:`.png`,mimeType:`image/vnd.mozilla.apng`},{ext:`.jpg`,mimeType:`image/jpeg`},{ext:`.jxl`,mimeType:`image/jxl`},{ext:`.jp2`,mimeType:`image/jp2`},{ext:`.jpf`,mimeType:`image/jpx`},{ext:`.jpm`,mimeType:`image/jpm`},{ext:`.jxs`,mimeType:`image/jxs`},{ext:`.gif`,mimeType:`image/gif`},{ext:`.webp`,mimeType:`image/webp`},{ext:`.exe`,mimeType:`application/vnd.microsoft.portable-executable`},{ext:``,mimeType:`application/x-elf`},{ext:``,mimeType:`application/x-object`},{ext:``,mimeType:`application/x-executable`},{ext:`.so`,mimeType:`application/x-sharedlib`},{ext:``,mimeType:`application/x-coredump`},{ext:`.a`,mimeType:`application/x-archive`},{ext:`.deb`,mimeType:`application/vnd.debian.binary-package`},{ext:`.tar`,mimeType:`application/x-tar`},{ext:`.xar`,mimeType:`application/x-xar`},{ext:`.bz2`,mimeType:`application/x-bzip2`},{ext:`.fits`,mimeType:`application/fits`},{ext:`.tiff`,mimeType:`image/tiff`},{ext:`.bmp`,mimeType:`image/bmp`},{ext:`.ico`,mimeType:`image/x-icon`},{ext:`.mp3`,mimeType:`audio/mpeg`},{ext:`.flac`,mimeType:`audio/flac`},{ext:`.midi`,mimeType:`audio/midi`},{ext:`.ape`,mimeType:`audio/ape`},{ext:`.mpc`,mimeType:`audio/musepack`},{ext:`.amr`,mimeType:`audio/amr`},{ext:`.wav`,mimeType:`audio/wav`},{ext:`.aiff`,mimeType:`audio/aiff`},{ext:`.au`,mimeType:`audio/basic`},{ext:`.mpeg`,mimeType:`video/mpeg`},{ext:`.mov`,mimeType:`video/quicktime`},{ext:`.mp4`,mimeType:`video/mp4`},{ext:`.avif`,mimeType:`image/avif`},{ext:`.3gp`,mimeType:`video/3gpp`},{ext:`.3g2`,mimeType:`video/3gpp2`},{ext:`.mp4`,mimeType:`audio/mp4`},{ext:`.mqv`,mimeType:`video/quicktime`},{ext:`.m4a`,mimeType:`audio/x-m4a`},{ext:`.m4v`,mimeType:`video/x-m4v`},{ext:`.heic`,mimeType:`image/heic`},{ext:`.heic`,mimeType:`image/heic-sequence`},{ext:`.heif`,mimeType:`image/heif`},{ext:`.heif`,mimeType:`image/heif-sequence`},{ext:`.mj2`,mimeType:`video/mj2`},{ext:`.dvb`,mimeType:`video/vnd.dvb.file`},{ext:`.webm`,mimeType:`video/webm`},{ext:`.avi`,mimeType:`video/x-msvideo`},{ext:`.flv`,mimeType:`video/x-flv`},{ext:`.mkv`,mimeType:`video/x-matroska`},{ext:`.asf`,mimeType:`video/x-ms-asf`},{ext:`.asf`,mimeType:`video/x-ms-wmv`},{ext:`.asf`,mimeType:`video/asf`},{ext:`.aac`,mimeType:`audio/aac`},{ext:`.voc`,mimeType:`audio/x-unknown`},{ext:`.m3u`,mimeType:`application/vnd.apple.mpegurl`},{ext:`.rmvb`,mimeType:`application/vnd.rn-realmedia-vbr`},{ext:`.gz`,mimeType:`application/gzip`},{ext:`.class`,mimeType:`application/x-java-applet`},{ext:`.swf`,mimeType:`application/x-shockwave-flash`},{ext:`.crx`,mimeType:`application/x-chrome-extension`},{ext:`.ttf`,mimeType:`font/ttf`},{ext:`.woff`,mimeType:`font/woff`},{ext:`.woff2`,mimeType:`font/woff2`},{ext:`.otf`,mimeType:`font/otf`},{ext:`.ttc`,mimeType:`font/collection`},{ext:`.eot`,mimeType:`application/vnd.ms-fontobject`},{ext:`.wasm`,mimeType:`application/wasm`},{ext:`.shx`,mimeType:`application/vnd.shx`},{ext:`.shp`,mimeType:`application/vnd.shp`},{ext:`.dbf`,mimeType:`application/x-dbf`},{ext:`.dcm`,mimeType:`application/dicom`},{ext:`.rar`,mimeType:`application/x-rar-compressed`},{ext:`.djvu`,mimeType:`image/vnd.djvu`},{ext:`.mobi`,mimeType:`application/x-mobipocket-ebook`},{ext:`.lit`,mimeType:`application/x-ms-reader`},{ext:`.bpg`,mimeType:`image/bpg`},{ext:`.cbor`,mimeType:`application/cbor`},{ext:`.sqlite`,mimeType:`application/vnd.sqlite3`},{ext:`.dwg`,mimeType:`image/vnd.dwg`},{ext:`.nes`,mimeType:`application/vnd.nintendo.snes.rom`},{ext:`.lnk`,mimeType:`application/x-ms-shortcut`},{ext:`.macho`,mimeType:`application/x-mach-binary`},{ext:`.qcp`,mimeType:`audio/qcelp`},{ext:`.icns`,mimeType:`image/x-icns`},{ext:`.hdr`,mimeType:`image/vnd.radiance`},{ext:`.mrc`,mimeType:`application/marc`},{ext:`.mdb`,mimeType:`application/x-msaccess`},{ext:`.accdb`,mimeType:`application/x-msaccess`},{ext:`.zst`,mimeType:`application/zstd`},{ext:`.cab`,mimeType:`application/vnd.ms-cab-compressed`},{ext:`.rpm`,mimeType:`application/x-rpm`},{ext:`.xz`,mimeType:`application/x-xz`},{ext:`.lz`,mimeType:`application/lzip`},{ext:`.torrent`,mimeType:`application/x-bittorrent`},{ext:`.cpio`,mimeType:`application/x-cpio`},{ext:``,mimeType:`application/tzif`},{ext:`.xcf`,mimeType:`image/x-xcf`},{ext:`.pat`,mimeType:`image/x-gimp-pat`},{ext:`.gbr`,mimeType:`image/x-gimp-gbr`},{ext:`.glb`,mimeType:`model/gltf-binary`},{ext:`.cab`,mimeType:`application/x-installshield`},{ext:`.jxr`,mimeType:`image/jxr`},{ext:`.parquet`,mimeType:`application/vnd.apache.parquet`},{ext:`.txt`,mimeType:`text/plain`},{ext:`.html`,mimeType:`text/html`},{ext:`.svg`,mimeType:`image/svg+xml`},{ext:`.xml`,mimeType:`text/xml`},{ext:`.rss`,mimeType:`application/rss+xml`},{ext:`.atom`,mimeType:`application/atom+xml`},{ext:`.x3d`,mimeType:`model/x3d+xml`},{ext:`.kml`,mimeType:`application/vnd.google-earth.kml+xml`},{ext:`.xlf`,mimeType:`application/x-xliff+xml`},{ext:`.dae`,mimeType:`model/vnd.collada+xml`},{ext:`.gml`,mimeType:`application/gml+xml`},{ext:`.gpx`,mimeType:`application/gpx+xml`},{ext:`.tcx`,mimeType:`application/vnd.garmin.tcx+xml`},{ext:`.amf`,mimeType:`application/x-amf`},{ext:`.3mf`,mimeType:`application/vnd.ms-package.3dmanufacturing-3dmodel+xml`},{ext:`.xfdf`,mimeType:`application/vnd.adobe.xfdf`},{ext:`.owl`,mimeType:`application/owl+xml`},{ext:`.php`,mimeType:`text/x-php`},{ext:`.js`,mimeType:`text/javascript`},{ext:`.lua`,mimeType:`text/x-lua`},{ext:`.pl`,mimeType:`text/x-perl`},{ext:`.py`,mimeType:`text/x-python`},{ext:`.json`,mimeType:`application/json`},{ext:`.geojson`,mimeType:`application/geo+json`},{ext:`.har`,mimeType:`application/json`},{ext:`.ndjson`,mimeType:`application/x-ndjson`},{ext:`.rtf`,mimeType:`text/rtf`},{ext:`.srt`,mimeType:`application/x-subrip`},{ext:`.tcl`,mimeType:`text/x-tcl`},{ext:`.csv`,mimeType:`text/csv`},{ext:`.tsv`,mimeType:`text/tab-separated-values`},{ext:`.vcf`,mimeType:`text/vcard`},{ext:`.ics`,mimeType:`text/calendar`},{ext:`.warc`,mimeType:`application/warc`},{ext:`.vtt`,mimeType:`text/vtt`},{ext:`.pbm`,mimeType:`image/x-portable-bitmap`},{ext:`.pgm`,mimeType:`image/x-portable-graymap`},{ext:`.ppm`,mimeType:`image/x-portable-pixmap`},{ext:`.eml`,mimeType:`message/rfc822`}];var v=new BroadcastChannel(`tabsSync`),ee=`pbSettings`,te=`pbColorScheme`;window.app=window.app||{},window.app.store=store({_ready:!1,superuser:null,showHeader:!0,page:t.div({className:`page`},()=>{if(!app.store._ready)return t.span({className:`loader lg m-auto`,title:`Loading plugins...`})}),mainLogo:`./images/logo.svg`,headerLogo:`./images/logo_white.svg`,favicon:``,title:``,_mediaColorScheme:``,userColorScheme:window.localStorage.getItem(te)||``,get activeColorScheme(){return app.store.userColorScheme?app.store.userColorScheme:app.store._mediaColorScheme||`light`},errors:null,creditLinks:[{href:`https://pocketbase.io/docs`,icon:`ri-book-open-line`,label:`Docs`},{href:`https://github.com/pocketbase/pocketbase/releases`,icon:`ri-github-line`,label:`PocketBase v0.37.2-dev`}],headerLinks:[{href:`#/collections`,icon:`ri-database-2-line`,label:`Collections`},{href:`#/logs`,icon:`ri-bar-chart-box-line`,label:`Logs`},{href:`#/settings`,icon:`ri-settings-3-line`,label:`Settings`}],settingsNavGroups:{System:[{href:`#/settings`,icon:`ri-home-gear-line`,label:`Application`},{href:`#/settings/mail`,icon:`ri-send-plane-2-line`,label:`Mail settings`},{href:`#/settings/storage`,icon:`ri-archive-drawer-line`,label:`Files storage`},{href:`#/settings/backups`,icon:`ri-archive-line`,label:`Backups`},{href:`#/settings/crons`,icon:`ri-time-line`,label:`Crons`}],Sync:[{href:`#/settings/export-collections`,icon:`ri-uninstall-line`,label:`Export collections`},{href:`#/settings/import-collections`,icon:`ri-install-line`,label:`Import collections`}]},predefinedAccentColors:[`#1055c9`,`#a3142a`,`#096d5c`,`#e6620a`,`#007d9c`,`#3f3da9`],settings:app.utils.getLocalHistory(ee,{}),isLoadingSettings:!1,async loadSettings(){app.store.isLoadingSettings=!0;try{let e=await app.pb.settings.getAll({requestKey:`appStore.loadSettings`});app.store.settings=e,app.store.isLoadingSettings=!1}catch(e){e.isAbort||(app.store.isLoadingSettings=!1,app.checkApiError(e))}},collections:[],collectionScaffolds:{},isLoadingCollections:!1,_activeCollectionIdOrName:``,get activeCollection(){let e=app.store._activeCollectionIdOrName;return app.store.collections.find(n=>n.id==e||n.name==e)||app.store.collections[0]},set activeCollection(e){typeof e==`string`?app.store._activeCollectionIdOrName=e:app.store._activeCollectionIdOrName=e?.id},async silentlyReloadCollections(){try{let e=await app.pb.collections.getFullList({requestKey:`appStore.silentlyReloadCollections`});e=app.utils.sortedCollectionsByType(e),JSON.stringify(e)!=JSON.stringify(app.store.collections)&&(app.store.collections=e)}catch(e){e.isAbort||console.warn(`failed to reload app store collections:`,e)}},async loadCollections(e=null){app.store.isLoadingCollections=!0;try{let[n,r]=await Promise.all([app.pb.collections.getScaffolds({requestKey:`appStore.loadCollections.getScaffolds`}),app.pb.collections.getFullList({requestKey:`appStore.loadCollections.getFullList`})]);r=app.utils.sortedCollectionsByType(r),JSON.stringify(app.store.collections)!=JSON.stringify(r)&&(app.store.collections=r),app.store.collectionScaffolds=n,app.store._activeCollectionIdOrName=e||app.store._activeCollectionIdOrName||app.store.collections[0]?.id||``,app.store.isLoadingCollections=!1}catch(e){e.isAbort||(app.store.isLoadingCollections=!1,app.checkApiError(e))}},addOrUpdateCollection(e){let n=app.store.collections.findIndex(n=>n.id==e.id);n>=0?(app.store.activeCollection.id==e.id&&(app.store._activeCollectionIdOrName=e.id),app.store.collections[n]=e):app.store.collections.push(e),app.store.collections=app.utils.sortedCollectionsByType(app.store.collections)},oauth2Providers:[],isLoadingOAuth2Providers:!1,async loadOAuth2Providers(){app.store.isLoadingOAuth2Providers=!0;try{app.store.oauth2Providers=await app.pb.send(`/api/collections/meta/oauth2-providers`),app.store.isLoadingOAuth2Providers=!1}catch(e){e.isAbort||(app.checkApiError(e),app.store.isLoadingOAuth2Providers=!1)}}}),window.addEventListener(`hashchange`,()=>{app.store.title=``,app.store.errors=null}),watch(()=>{let e=app.utils.toArray(app.store.title),n=app.store.settings?.meta?.appName||``;n&&e.push(n),document.title=e.join(` - `)});var ne;watch(()=>app.store.settings?.meta?.accentColor,e=>{ne||(ne=t.meta({name:`theme-color`}),document.head.appendChild(ne)),e?(ne?.setAttribute(`content`,e),document.documentElement.style.setProperty(`--accentColor`,e)):(ne?.removeAttribute(`content`),document.documentElement.style.removeProperty(`--accentColor`))});var re;watch(()=>app.store.favicon,e=>{re||(re=t.link({rel:`icon`}),document.head.appendChild(re)),e?re.href=e:re.href=window.location.href.startsWith(`https://`)?`./images/favicon_prod.png`:`./images/favicon.png`});var ie=window.matchMedia(`(prefers-color-scheme: dark)`);app.store._mediaColorScheme=ie.matches?`dark`:`light`,ie.addEventListener(`change`,({matches:e})=>{app.store._mediaColorScheme=e?`dark`:`light`}),watch(()=>app.store.userColorScheme,e=>{e?window.localStorage.setItem(te,e):window.localStorage.removeItem(te),v?.postMessage({colorScheme:e})});var ae;watch(()=>app.store.activeColorScheme,e=>{clearTimeout(ae),document.documentElement.style.setProperty(`--animationSpeed`,`0`),document.documentElement.setAttribute(`data-color-scheme`,e),ae=setTimeout(()=>{document.documentElement.style.removeProperty(`--animationSpeed`)},100)});function oe(e,n){e.__errListener&&=(e.removeEventListener(`input`,e.__errListener),e.removeEventListener(`change`,e.__errListener),null),e.setCustomValidity&&(e.setCustomValidity(``),e._oldTitle?e.setAttribute(`title`,e._oldTitle):e.removeAttribute(`title`)),e.removeAttribute(`data-error`);let r=n.nextSibling;r&&r.classList?.contains(`generated-error`)&&r.getAttribute(`data-input-name`)==e.getAttribute(`name`)&&r.remove(),n.querySelector(`[data-error]`)||n.classList.remove(`error`)}watch(()=>JSON.stringify(app.store.errors)&&app.store.errors,e=>{let n=document.querySelectorAll(`[name]`);for(let r of n){if(r.classList.contains(`no-error`))continue;let n=r.closest(`.fields`)||r.closest(`.field`);if(!n)continue;let i=r.getAttribute(`name`);oe(r,n);let a=app.utils.getByPath(e,i)?.message;a&&(n.classList.add(`error`),r.__errListener=function(){oe(r,n),app.utils.deleteByPath(app.store.errors,i)},r.addEventListener(`input`,r.__errListener),r.addEventListener(`change`,r.__errListener),r.setAttribute(`data-error`,!0),r.setCustomValidity&&r.reportValidity&&r.classList.contains(`inline-error`)?(r.setCustomValidity(a),r.reportValidity(),r._oldTitle=r.title,r.title=a):n.after(t.div({"html-data-input-name":i,className:`field-help error generated-error`,textContent:a})))}}),v.onmessage=e=>{e.data?.collections&&JSON.stringify(app.store.collections)!=JSON.stringify(e.data.collections)&&(app.store.collections=e.data.collections),e.data?.settings&&JSON.stringify(app.store.settings)!=JSON.stringify(e.data.settings)&&(app.store.settings=e.data.settings),e.data?.colorScheme&&(app.store.userColorScheme=e.data.colorScheme)},watch(()=>JSON.stringify(app.store.collections),(e,n)=>{e&&e!=`[]`&&n&&n!=`[]`&&e!=n&&v?.postMessage({collections:JSON.parse(e)})}),watch(()=>JSON.stringify(app.store.settings),(e,n)=>{e&&e!=`{}`&&n&&n!=`{}`&&e!=n&&v?.postMessage({settings:JSON.parse(e)}),window.localStorage.setItem(ee,e)});var y=`#/login`,b=window.location.pathname.endsWith(`/`)?window.location.pathname.substring(0,window.location.pathname.length-1):window.location.pathname;window.app=window.app||{},window.app.pb=new i(`../`,new r(`__pb_superusers__`+b)),app.pb.beforeSend=function(e,n){return n.headers[`x-request-source`]=`pbui`,{url:e,options:n}},app.store.superuser=app.pb.authStore.record,app.pb.authStore.onChange((e,n)=>{!n&&window.location.hash!=y&&(app.modals.close(),window.location.hash=y),app.store.superuser=n}),app.pb.authStore.isValid&&app.pb.collection(app.pb.authStore.record?.collectionName||`_superusers`).authRefresh().catch(e=>{console.warn(`Failed to refresh the existing auth token:`,e);let n=e?.status<<0;(n==401||n==403)&&(app.utils.rememberPath(),app.pb.cancelAllRequests(),app.pb.authStore.clear())}),app.pb.authStore.onChange((e,n)=>{n?.id&&(app.store.loadCollections(),app.store.loadSettings(),app.store.loadOAuth2Providers())});var se=app.pb.collection;app.pb.collection=function(e){let n=se.call(this,e);return ce(n),n};function ce(e){if(e.__customUIEvents)return;e.__customUIEvents=!0;let n=e.create;e.create=function(){return n.apply(e,arguments).then(e=>(setTimeout(()=>{document.dispatchEvent(new CustomEvent(`record:create`,{detail:e})),document.dispatchEvent(new CustomEvent(`record:save`,{detail:e}))},0),e))};let r=e.update;e.update=function(){return r.apply(e,arguments).then(e=>(setTimeout(()=>{document.dispatchEvent(new CustomEvent(`record:update`,{detail:e})),document.dispatchEvent(new CustomEvent(`record:save`,{detail:e}))},0),e))};let i=e.delete;e.delete=function(){return i.apply(e,arguments).then(n=>{let r={id:arguments[0],collectionId:e.collectionIdOrName,collectionName:e.collectionIdOrName};return setTimeout(()=>{document.dispatchEvent(new CustomEvent(`record:delete`,{detail:r}))},0),n})}}var le=`pbLastFileToken`,x=!1,ue=[];app.pb.authStore.onChange((e,n)=>{n?.id||window.localStorage.removeItem(le)}),window.app.getFileToken=async function(n=``){let r=n&&app.store.collections?.find(e=>e.id==n||e.name==n);if(r&&!r.fields?.find(e=>e.type==`file`&&e.protected))return;let i=window.localStorage.getItem(le);return(!i||e(i,60))&&(i=await S()),i};async function S(){return new Promise(async(e,n)=>{if(ue.push({resolve:e,reject:n}),!x){x=!0;try{let e=await app.pb.files.getToken();window.localStorage.setItem(le,e),ue.forEach(n=>n.resolve(e))}catch(e){ue.forEach(n=>n.reject(e))}x=!1,ue=[]}})}window.app.checkApiError=function(e,n=!0){if(!e||!(e instanceof Error)||e.isAbort){console.warn(`checkApiError - unexpected error type:`,e);return}let r=e?.status<<0,i=e?.response||{},a=n&&(i.message||e.message||`Something went wrong!`);if(a&&app.toasts.error(a),r==0&&console.log(e),app.utils.isEmpty(i.data)||(app.store.errors=i.data),r===401&&window.location.hash!=y)return app.utils.rememberPath(),app.pb.cancelAllRequests(),app.pb.authStore.clear();r===403&&(app.pb.cancelAllRequests(),window.location.hash!=y&&(window.location.hash=y))};function de(){return()=>{if(!(!app.store._ready||!app.store.showHeader||!app.store.superuser?.id))return t.header({pbEvent:`appHeader`,rid:`appHeader`,className:`app-header accent-surface`,onmount:async e=>{await new Promise(e=>setTimeout(e,0)),e._scrollToActiveMenuItem=function(){e?.querySelector(`.app-main-nav .header-link.active`)?.scrollIntoView()},e._scrollToActiveMenuItem(),window.addEventListener(`hashchange`,e._scrollToActiveMenuItem)},onunmount:e=>{window.removeEventListener(`hashchange`,e?._scrollToActiveMenuItem)}},t.a({href:`#/`,className:`logo`},t.img({src:()=>app.store.headerLogo,alt:`App logo`})),t.nav({pbEvent:`mainNav`,className:`app-main-nav`},()=>app.store.headerLinks.map(e=>{let n=e.href.startsWith(`#/`);return t.a({href:()=>e.href,target:()=>n?void 0:`_blank`,rel:()=>n?void 0:`noopener noreferrer`,className:n=>`header-link ${e.isActive?.(n)||app.utils.isActivePath(e.href)?`active`:``}`},()=>{if(e.icon)return t.i({className:e.icon,ariaHidden:!0})},t.span({className:`txt`},()=>e.label))})),t.div({className:`flex-fill app-header-separator`}),C(),t.button({className:`header-link logged-user txt-normal`,"html-popovertarget":`logged-user-dropdown`},t.span({className:`superuser-name txt-ellipsis`},()=>app.store.superuser?.email),t.i({className:`ri-arrow-drop-down-line`,ariaHidden:!0})),t.div({pbEvent:`loggedUserDropdown`,id:`logged-user-dropdown`,className:`dropdown sm nowrap logged-user-dropdown`,popover:`auto`},t.a({className:`dropdown-item dropdown-item-manage`,href:`#/collections?collection=_superusers`,onclick:e=>{e.target.closest(`.dropdown`).hidePopover()}},t.i({className:`ri-group-line`,ariaHidden:!0}),t.span({className:`txt`},`Manage superusers`)),t.hr(),t.button({type:`button`,className:`dropdown-item txt-danger dropdown-item-logout`,onclick:()=>app.pb.authStore.clear()},t.i({className:`ri-logout-circle-line`,ariaHidden:!0}),t.span({className:`txt`},`Logout`))))}}function C(){let e=[{value:`light`,icon:`ri-sun-line`,label:`Light`},{value:`dark`,icon:`ri-moon-line`,label:`Dark`},{value:``,icon:`ri-subtract-line`,label:`Auto`}];return[t.button({className:`header-link color-scheme-picker`,"html-popovertarget":`color-scheme-dropdown`,title:`Color scheme`},t.i({className:()=>app.store.activeColorScheme==`dark`?`ri-moon-line`:`ri-sun-line`,ariaHidden:!0})),t.div({pbEvent:`colorSchemeDropdown`,id:`color-scheme-dropdown`,className:`dropdown sm nowrap color-scheme-dropdown`,popover:`auto`},()=>e.map(e=>t.button({type:`button`,className:()=>`dropdown-item dropdown-item-light ${app.store.userColorScheme==e.value?`active`:``}`,onclick:n=>{n.target.closest(`.dropdown`).hidePopover(),app.store.userColorScheme=e.value}},t.i({className:e.icon,ariaHidden:!0}),t.span({className:`txt`},e.label))))]}document.addEventListener(`invalid`,e=>{let n=e.target.closest(`details`);n&&!n.open&&!e.target.closest(`summary`)&&(n.open=!0,e.target.reportValidity&&e.target.reportValidity())},!0);var w=`dropdown-item`;document.addEventListener(`toggle`,e=>{if(e.newState!=`open`||!e.target?.matches(`.dropdown`)||e.target.__keyboardNavRegistered)return;e.target.__keyboardNavRegistered=!0;let n=e.target;function r(e){if(!n.isConnected){document.removeEventListener(`keydown`,r);return}let i;if(i=document.activeElement&&document.activeElement.classList.contains(w)?document.activeElement:n.querySelector(`.`+w+`:not([hidden]):not(.disabled)`),i){if(e.key==`ArrowUp`){e.preventDefault();let n=E(i,-1);i==document.activeElement&&n?.classList?.contains(w)?n?.focus():i.focus()}else if(e.key==`ArrowDown`){e.preventDefault();let n=E(i,1);i==document.activeElement&&n?.classList?.contains(w)?n?.focus():i.focus()}else if(e.keyCode>=65&&e.keyCode<=90||e.keyCode>=48&&e.keyCode<=57){let e=n.querySelectorAll(`input,textare,select`);e.length==1&&e[0].focus()}}}n.addEventListener(`toggle`,e=>{e.newState==`open`?(T(e.target.id,!0),document.addEventListener(`keydown`,r)):(T(e.target.id,!1),document.removeEventListener(`keydown`,r))})},!0);function T(e,n=!1){e&&document.querySelectorAll(`[popovertarget='`+e+`']`)?.forEach(e=>e.setAttribute(`data-popover-state`,n))}function E(e,n=-1){let r=n<0?e.previousElementSibling:e.nextElementSibling;return r&&(r.hidden||r.classList.contains(`disabled`)||!r.classList.contains(w))?E(r,n):r}var D=5,O=t.div({ariaHidden:!0,popover:`manual`,className:`pb-tooltip`});document.body.appendChild(O);function k(e,n){let r=e.getBoundingClientRect();O.setAttribute(`data-position`,n),O.style.top=`0px`,O.style.left=`0px`;let i=O.offsetHeight,a=O.offsetWidth,o=0,s=0;n==`left`?(o=r.top+r.height/2-i/2,s=r.left-a-D):n==`right`?(o=r.top+r.height/2-i/2,s=r.right+D):n==`top`?(o=r.top-i-D,s=r.left+r.width/2-a/2):n==`top-left`?(o=r.top-i-D,s=r.left):n==`top-right`?(o=r.top-i-D,s=r.right-a):n==`bottom-left`?(o=r.top+r.height+D,s=r.left):n==`bottom-right`?(o=r.top+r.height+D,s=r.right-a):(o=r.top+r.height+D,s=r.left+r.width/2-a/2),s+a>document.documentElement.clientWidth&&(s=document.documentElement.clientWidth-a),s=s>=0?s:0,o+i>document.documentElement.clientHeight&&(o=document.documentElement.clientHeight-i),o=o>=0?o:0,O.style.top=o+`px`,O.style.left=s+`px`}function A(){O.hidePopover()}function fe(e,n,r){if(!e||!n){A();return}O.showPopover(),O.textContent=n,k(e,r)}document.body.addEventListener(`mouseleave`,()=>{A()});function pe(e,n=`top`){return r=>{if(!r._tooltipText){r._tooltipText=store({value:``});let e;function i(){e?.unwatch(),e=watch(()=>r._tooltipText.value,async e=>{fe(r,e,n)})}async function a(){e?.unwatch(),e=null,A()}r.addEventListener(`mouseenter`,i),r.addEventListener(`focusin`,i),r.addEventListener(`mouseleave`,a),r.addEventListener(`focusout`,a),r.addEventListener(`blur`,a);let o=r.onunmount;r.onunmount=n=>{e?.unwatch(),n._tooltipText=null,n?.removeEventListener(`mouseenter`,i),n?.removeEventListener(`focusin`,i),n?.removeEventListener(`mouseleave`,a),n?.removeEventListener(`focusout`,a),n?.removeEventListener(`blur`,a),o(n)}}return typeof e==`function`?r._tooltipText.value=e():r._tooltipText.value=e,r._tooltipText.value}}window.app=window.app||{},window.app.attrs=window.app.attrs||{},window.app.attrs.tooltip=pe,window.app=window.app||{},window.app.modals=window.app.modals||{},window.app.modals.confirm=function(e,n,r,i={className:void 0,yesButton:``,noButton:``}){j.textOrElem=e,j.yesCallback=n,j.yesCallbackWaiting=!1,j.noCallback=r,j.noCallbackWaiting=!1,j.className=typeof i.className==`string`?i.className:`sm`,j.yesButton=i.yesButton||`Yes`,j.noButton=i.noButton||`No`,me.isConnected||document.body.appendChild(me),window.app.modals.open(me)};var j=store({className:``,textOrElem:null,yesButton:``,yesCallback:null,yesCallbackWaiting:!1,noButton:``,noCallback:null,noCallbackWaiting:!1,get isBusy(){return j.yesCallbackWaiting||j.noCallbackWaiting}}),me=t.div({className:()=>`modal popup manual ${j.className||``}`},t.div({className:`modal-content`},e=>typeof j.textOrElem==`string`?t.h6({className:`block txt-center`},j.textOrElem):typeof j.textOrElem==`function`?j.textOrElem(e):j.textOrElem),t.footer({className:`modal-footer p-sm`},t.div({className:`grid sm`},t.div({className:`col-sm-6`},t.button({type:`button`,className:()=>`btn lg block secondary ${j.noCallbackWaiting?`loading`:``}`,disabled:()=>j.isBusy,onclick:async()=>{if(j.noCallback){j.noCallbackWaiting=!0;try{if(await j.noCallback()===!1)return}catch(e){console.log(`confirm noCallback error:`,e)}finally{j.noCallbackWaiting=!1}}window.app.modals.close(me)}},()=>typeof j.noButton==`string`?t.span({className:`txt`},j.noButton):typeof j.noButton==`function`?j.noButton(el):j.noButton)),t.div({className:`col-sm-6`},t.button({type:`button`,className:()=>`btn lg block warning ${j.yesCallbackWaiting?`loading`:``}`,disabled:()=>j.isBusy,onclick:async()=>{if(j.yesCallback){j.yesCallbackWaiting=!0;try{if(await j.yesCallback()===!1)return}catch(e){console.log(`confirm yesCallback error:`,e)}finally{j.yesCallbackWaiting=!1}}window.app.modals.close(me)}},()=>typeof j.yesButton==`string`?t.span({className:`txt`},j.yesButton):typeof j.yesButton==`function`?j.yesButton(el):j.yesButton)))));window.app=window.app||{},window.app.components=window.app.components||{},window.app.components.dragline=function(e={}){let n,r=store({rid:void 0,id:void 0,hidden:void 0,inert:void 0,className:``,tolerance:0,ondragstart:function(e){},ondragstop:function(e){},ondragging:function(e,n,r){}}),i=app.utils.extendStore(r,e),a=store({dragStarted:!1}),o,s,c,l;function u(){document.addEventListener(`touchmove`,m),document.addEventListener(`mousemove`,m),document.addEventListener(`touchend`,p),document.addEventListener(`mouseup`,p)}function d(){document.removeEventListener(`touchmove`,m),document.removeEventListener(`mousemove`,m),document.removeEventListener(`touchend`,p),document.removeEventListener(`mouseup`,p)}function f(e){e.stopPropagation(),o=e.clientX,s=e.clientY,c=e.clientX-n.offsetLeft,l=e.clientY-n.offsetTop,u()}function p(e){a.dragStarted&&(e.preventDefault(),a.dragStarted=!1,r.ondragstop?.(e)),d()}function m(e){let i=e.clientX-o,u=e.clientY-s,d=e.clientX-c,f=e.clientY-l;!a.dragStarted&&Math.abs(d-n.offsetLeft)<r.tolerance&&Math.abs(f-n.offsetTop)<r.tolerance||(e.preventDefault(),a.dragStarted||(a.dragStarted=!0,r.ondragstart?.(e)),r.ondragging?.(e,i,u))}return n=t.div({rid:r.rid,id:()=>r.id,hidden:()=>r.hidden,inert:()=>r.inert,className:()=>`dragline ${a.dragStarted?`dragging`:``} ${r.className}`,onmousedown:e=>{e.button==0&&f(e)},ontouchstart:f,onunmount:()=>{d(),i.forEach(e=>e?.unwatch())}}),n},window.app=window.app||{},window.app.components=window.app.components||{},window.app.components.slide=function(e,...n){let r;return t.div({className:n=>`block slide-block ${e?.(n)?``:`hidden`}`,onmount:e=>{r=setTimeout(()=>{e?.setAttribute(`data-slide`,`1`)},200)},onunmount:()=>{clearTimeout(r)}},...n)},window.app=window.app||{},window.app.modals=window.app.modals||{};var M=`data-modal-state`,he=`manual`,ge;window.app.modals.open=async function(e){if(!e?.isConnected){console.error(`modals.open requies an active DOM element`,e);return}let n;if(e.onbeforeopen&&(n=await e.onbeforeopen(e)),n===!1)return;if(e.onafteropen){let n=new ResizeObserver(r=>{for(let i of r)i.contentRect.height>0&&e?.onafteropen&&(e.onafteropen(e),n.disconnect(),n=null)});n.observe(e)}ge=document.activeElement,_e(e),e._forceClose=()=>app.modals.close(e,!0),window.addEventListener(`popstate`,e._forceClose);let r=Math.max(ve(e)?.style.zIndex<<0,1e3);e.style.zIndex=r+1,e.setAttribute(M,`open`)},window.app.modals.close=async function(e=null,n=!1){if(e||=ve(),e){if(window.removeEventListener(`popstate`,e._forceClose),n)e.onbeforeclose?.(e,!0),e.setAttribute(M,`close`),e.onafterclose?.(e,!0);else{if(e.onbeforeclose&&await e.onbeforeclose(e,!1)===!1)return;if(e.onafterclose){let n=new ResizeObserver(r=>{for(let i of r)i.contentRect.height<=0&&e?.onafterclose&&(e.onafterclose(e,!1),n.disconnect(),n=null)});n.observe(e)}e.setAttribute(M,`close`)}ge&&(ge.focus?.(),setTimeout(()=>{ge?.blur?.(),ge=null},0))}};function _e(e){if(e.getAttribute(`tabindex`)||e.setAttribute(`tabindex`,`-1`),setTimeout(()=>{let n=e?.querySelector(`[autofocus]`);n?n.focus():e?.focus()},0),e.getAttribute(M))return;e.setAttribute(M,``),e.addEventListener(`keydown`,n=>{n.key!=`Escape`||e.classList.contains(he)||n.target!==e&&e.contains(n.target)||window.app.modals.close(e)});let n=!1,r=r=>{n=r.target!==e&&e.contains(r.target)};e.addEventListener(`mousedown`,r),e.addEventListener(`touchstart`,r);let i=!1,a=n=>{i=n.target!==e&&e.contains(n.target)};e.addEventListener(`mouseup`,a),e.addEventListener(`touchend`,a),e.addEventListener(`click`,r=>{n||i||e.classList.contains(he)||r.target!==e&&e.contains(r.target)||window.app.modals.close(e)})}function ve(e){let n=document.querySelectorAll(`[${M}="open"]`),r=0,i=0,a;for(let o of n)e&&o==e||(r=o.style.zIndex<<0,r>i&&(i=r,a=o));return a}var ye=new Map,be=t.div({className:`toasts-container`});function xe(e,n=!0){let r=ye.get(e);!r||!r.isConnected||(ye.delete(e),clearTimeout(r._removeTimeout),n?(r.classList.add(`removing`),setTimeout(()=>{r.remove()},300)):r.remove())}function Se(e=!0){ye.forEach((n,r)=>{window.app.toasts.remove(r,e)})}function Ce(e,n={}){n.type=`info`,n.duration=n.duration||3e3,Ee(e,n)}function we(e,n={}){n.type=`success`,n.duration=n.duration||3e3,Ee(e,n)}function Te(e,n={}){n.type=`error`,n.duration=n.duration||3500,Ee(e,n)}function Ee(e,n={}){n=Object.assign({duration:3e3,key:void 0,type:`info`},n),be.isConnected||document.body.appendChild(be);let r=n.key||e;ye.has(r)&&xe(r,!1);function i(e){e?._removeTimeout&&clearTimeout(e?._removeTimeout),e._removeTimeout=setTimeout(()=>{xe(r)},n.duration)}let a=t.div({className:`toast ${n.type||``}`,onmount:e=>{i(e)},onunmount:e=>{e?._removeTimeout&&(clearTimeout(e?._removeTimeout),a=null)},onmouseover:()=>{clearTimeout(a?._removeTimeout)},onmouseout:()=>{i(a)}},t.div({className:`toast-container`},t.div({className:`toast-icon`}),t.div({className:`toast-content`},e,t.button({className:`m-l-auto btn circle sm transparent secondary toast-remove`,title:`Clear`,onclick:()=>xe(r)},t.i({className:`ri-close-line`,ariaHidden:!0})))));ye.set(r,a),be.prepend(a)}window.app=window.app||{},window.app.toasts=window.app.toasts||{},window.app.toasts.info=Ce,window.app.toasts.error=Te,window.app.toasts.success=we,window.app.toasts.remove=xe,window.app.toasts.removeAll=Se,window.app=window.app||{},window.app.components=window.app.components||{},window.app.components.sortable=function(e={}){let n=store({rid:void 0,id:void 0,hidden:void 0,inert:void 0,className:``,data:[],dataItem:function(e,n,r){return t.span(null,`Item `+n)},onchange:function(e,n,r){},handle:``,before:void 0,after:void 0}),r=app.utils.extendStore(n,e);function i(e){function r(){e.querySelectorAll(`:scope > [data-dragstart="true"]`)?.forEach(e=>{e.dataset.dragstart=!1}),e.querySelectorAll(`:scope > [data-dragover="true"]`)?.forEach(e=>{e.dataset.dragover=!1})}e.addEventListener(`dragstart`,r=>{if(n.handle&&!r.target.closest(n.handle)){r.preventDefault();return}let i=o(e,r.target);i&&(i.dataset.dragstart=!0)}),e.addEventListener(`dragenter`,n=>{for(let n of e.children)n.dataset.dragover&&(n.dataset.dragover=!1);let r=o(e,n.target);r&&(r.dataset.dragover=!0)}),e.addEventListener(`dragend`,e=>{r()}),e.addEventListener(`dragover`,e=>{e.preventDefault()}),e.addEventListener(`drop`,i=>{if(!n.onchange){r();return}let s=e.querySelector(`:scope > [data-dragstart="true"]`),c=o(e,i.target);if(r(),!s||!c||c==s)return;let l=a(s),u=a(c),d=n.data.slice(),f=d.splice(l,1);d.splice(u,0,f[0]),n.onchange(d,l,u)})}function a(e){if(!e?.parentNode)return-1;for(let n=0;n<e.parentNode.children.length;n++)if(e.parentNode.children[n]==e)return n;return-1}function o(e,n){return!n||!n.parentNode?null:n.parentNode==e?n:o(e,n.parentNode)}return t.div({rid:n.rid,id:()=>n.id,hidden:()=>n.hidden,inert:()=>n.inert,className:()=>n.className,onmount:e=>{i(e)},onunmount:e=>{r.forEach(e=>e?.unwatch())}},e=>typeof n.before==`function`?n.before(e):n.before,e=>{let r=[];for(let i=0;i<n.data.length;i++){let a=n.dataItem(n.data[i],i,e);if(a){if(n.handle){let e=a.querySelector(n.handle);e&&(e.draggable=!0)}else a.draggable=!0;r.push(a)}}return r},e=>typeof n.after==`function`?n.after(e):n.after)},window.app=window.app||{},window.app.components=window.app.components||{},window.app.components.copyButton=function(e,...n){let r=store({active:!1}),i;function a(){let n=e;typeof n==`function`&&(n=e()),app.utils.copyToClipboard(n),r.active=!0,clearTimeout(i),i=setTimeout(()=>{r.active=!1},500)}return t.button({tabIndex:-1,type:`button`,className:()=>`copy-to-clipboard ${r.active?`active`:``}`,title:`Copy`,ariaDescription:app.attrs.tooltip(()=>r.active?`Copied`:null),onclick:e=>{e.preventDefault(),e.stopPropagation(),a()}},t.i({hidden:n?.length,ariaHidden:!0,className:()=>`copy-icon ${r.active?`ri-check-double-line`:`ri-file-copy-line`}`}),...n)},window.app=window.app||{},window.app.components=window.app.components||{},window.app.components.codeBlock=function(e={}){let n=store({rid:void 0,id:void 0,hidden:void 0,inert:void 0,className:``,language:`js`,value:void 0,footnote:void 0}),r=app.utils.extendStore(n,e);return t.div({rid:n.rid,id:()=>n.id,hidden:()=>n.hidden,inert:()=>n.inert,className:()=>`code-wrapper ${n.className}`,tabIndex:-1,onmount:e=>{e.addEventListener(`keydown`,n=>{(n.ctrlKey||n.metaKey)&&(n.key==`a`||n.key==`A`)&&(n.preventDefault(),window.getSelection().selectAllChildren(e))})},onunmount:()=>{r.forEach(e=>e?.unwatch())}},t.code({className:`block`,innerHTML:()=>De(n.value,n.language)}),t.div({className:`footnote`},e=>typeof n.footnote==`function`?n.footnote(e):n.footnote))};function De(e,n){return e=typeof e==`string`?e:``,e=Prism.plugins.NormalizeWhitespace.normalize(e,{"remove-trailing":!0,"remove-indent":!0,"left-trim":!0,"right-trim":!0}),Prism.highlight(e,Prism.languages[n]||Prism.languages.js,n)}window.app=window.app||{},window.app.components=window.app.components||{},window.app.components.codeEditor=function(e={}){let n=store({rid:void 0,id:void 0,hidden:void 0,inert:void 0,name:void 0,className:``,value:``,language:`js`,placeholder:``,disabled:!1,required:!1,singleLine:!1,autocomplete:void 0,oninput:function(e,n){},onfocus:function(e,n){},onblur:function(e,n){}}),r=app.utils.extendStore(n,e,`autocomplete`),i,a,o=!0;function s(e){c(),i=t.div({className:`dropdown autocomplete code-editor-dropdown`,onmount:e=>{e._updatePosition=()=>{o?Fe(i):c()},e._closeOnEsc=e=>{e.key==`Escape`&&(e.preventDefault(),c())},window.addEventListener(`scroll`,e._updatePosition,!0),window.addEventListener(`resize`,e._updatePosition),window.addEventListener(`keydown`,e._closeOnEsc),e._updatePosition()},onunmount:e=>{e&&(window.removeEventListener(`scroll`,e._updatePosition,!0),window.removeEventListener(`resize`,e._updatePosition),window.removeEventListener(`keydown`,e._closeOnEsc))}},e),document.body.appendChild(i),d&&(a?.disconnect(),a=new IntersectionObserver(([e])=>{o=e.isIntersecting},{root:null,threshold:.1}),a.observe(d))}function c(){i&&=(i.remove(),null),a&&=(a.disconnect(),null),o=!0}let l=!1,u,d=t.div({contentEditable:()=>n.disabled?!1:`plaintext-only`,tabIndex:0,spellcheck:!1,autocorrect:!1,autocomplete:`off`,autocapitalize:`off`,role:`textbox`,className:`editor-content`,"html-data-placeholder":()=>n.placeholder,onmount:e=>{u?.unwatch(),u=watch(()=>n.value,e=>{e!=d.textContent&&(d.textContent=e,c())})},onunmount:e=>{u?.unwatch(),c()},onfocus:e=>{n.onfocus?.(n.value,e)},onblur:e=>{i&&!i.contains(e.relatedTarget)&&c(),n.onblur?.(n.value,e)},oninput:e=>{if(c(),n.value=d.textContent,n.oninput?.(n.value,e),d.dispatchEvent(new CustomEvent(`change`,{detail:n.value})),!n.value?.length){d.textContent=``;return}if(!d?.isConnected)return;let r=Pe(d),i=je(n.value,r);if(!i.word.length||r==i.start)return;let a=[];if(typeof n.autocomplete==`function`)a=n.autocomplete(i.word)||[];else if(!app.utils.isEmpty(n.autocomplete)){let e=i.word.toLowerCase();a=n.autocomplete.filter(n=>(typeof n==`object`&&(n=n?.value),n=n?.toLowerCase(),n&&n!=e&&n.includes(e)))}a?.length&&s(()=>a.map((e,r)=>t.button({type:`button`,className:`dropdown-item ${r==0?`active`:``}`,textContent:e.label||e.value||e,onclick:r=>{r.preventDefault(),d.focus();let a=e.value||e;d.textContent=d.textContent.substring(0,i.start)+a+d.textContent.substring(i.end+1),n.value=d.textContent;try{window.getSelection().setPosition(d.childNodes[0],i.start+a.length)}catch(e){console.warn(`failed to set caret position`,e)}c()}})))},onkeydown:e=>{if(l=e.ctrlKey||e.metaKey,(e.key==`Enter`||e.key==`Tab`)&&i?.isConnected){e.preventDefault(),i.querySelector(`.dropdown-item.active`)?.click();return}if(e.key==`ArrowUp`&&i?.isConnected){e.preventDefault();let n=i.querySelector(`.dropdown-item.active`);n?.previousElementSibling&&(n.classList.remove(`active`),n.previousElementSibling.classList.add(`active`),n.previousElementSibling.scrollIntoView(!1));return}if(e.key==`ArrowDown`&&i?.isConnected){e.preventDefault();let n=i.querySelector(`.dropdown-item.active`);n?.nextElementSibling&&(n.classList.remove(`active`),n.nextElementSibling.classList.add(`active`),n.nextElementSibling.scrollIntoView(!1));return}if(l&&e.key.toLowerCase()==`l`){e.preventDefault(),Me(d);return}if(l&&e.key.toLowerCase()==`d`){e.preventDefault(),Ne(d);return}if(!n.singleLine&&e.key==`Tab`){e.preventDefault();let r=window.getSelection();if(!r)return;if(e.shiftKey){r.modify(`extend`,`backward`,`character`),r.toString()[0]==` `?(r.deleteFromDocument(),n.value=d.textContent):(r.modify(`extend`,`forward`,`character`),r.toString()[0]==` `&&(r.deleteFromDocument(),n.value=d.textContent));return}let i=r.getRangeAt(0);i&&(i.deleteContents(),i.insertNode(document.createTextNode(` `)),i.collapse(),n.value=d.textContent);return}if(n.singleLine&&e.key==`Enter`){e.preventDefault(),p.click();return}},onscroll:()=>{c(),f&&(f.scrollLeft=d.scrollLeft,f.scrollTop=d.scrollTop)}}),f=t.div({className:`highlight-overlay`,innerHTML:()=>ke(n.value,n.language),onscroll:()=>{d&&(d.scrollLeft=f.scrollLeft,d.scrollTop=f.scrollTop)}}),p=t.button({type:`submit`,className:`hidden`});return t.div({rid:n.rid,id:()=>n.id,inert:()=>n.inert,hidden:()=>n.hidden,"html-name":()=>n.name,"html-required":()=>n.required||void 0,className:()=>`input code-editor ${n.className} ${n.disabled?`disabled`:``} ${n.singleLine?`single-line`:``}`,onclick:()=>{d?.focus()},onunmount:()=>{r?.forEach(e=>e?.unwatch())}},t.div({className:`code-editor-container`},d,f,p))};var Oe=500;function ke(e,n){return e=typeof e==`string`?e:``,e?((!Prism.languages[n]||e.length>Oe)&&(n=`plain`),Prism.highlight(e,Prism.languages[n],n)):``}var Ae=new RegExp(/[\p{Alphabetic}\p{Number}_@:\."'{}]/,`u`);function je(e,n){let r=n;for(let i=n-1;i>=0&&Ae.test(e[i]);i--)r=i;let i=r;for(let r=n-1;r<e.length&&Ae.test(e[r]);r++)i=r;return{word:e.substring(r,i+1),start:r,end:i}}function Me(){let e=window.getSelection();e?.modify(`move`,`forward`,`lineboundary`),e?.modify(`extend`,`backward`,`lineboundary`)}function Ne(){let e=window.getSelection();e?.modify(`move`,`forward`,`word`),e?.modify(`extend`,`backward`,`word`)}function Pe(e){let n=window.getSelection(),r=0;for(let i of e.childNodes)if(i==n.focusNode)break;else r+=i.length;return r+n.focusOffset}function Fe(e){let n=window.getSelection()?.getRangeAt(0)?.getBoundingClientRect();if(!n||!e)return!1;if(n.top<0){e.classList.add(`hidden`);return}e.classList.remove(`hidden`),e.style.left=`0px`,e.style.top=`0px`;let r=e.offsetHeight,i=e.offsetWidth,a=n.left-5,o=n.top+n.height;o+r>document.documentElement.clientHeight&&(o=Math.max(n.top-r,0)),a+i>document.documentElement.clientWidth&&(a=Math.max(document.documentElement.clientWidth-i,0)),e.style.left=a+`px`,e.style.top=o+`px`}window.app=window.app||{},window.app.components=window.app.components||{},window.app.components.codeBlockTabs=function(e={}){let n=store({rid:void 0,id:void 0,hidden:void 0,inert:void 0,className:``,activeTabIndex:0,historyKey:``,tabs:[],get activeTab(){return n.tabs[n.activeTabIndex]||n.tabs[0]}}),r=app.utils.extendStore(n,e);return r.push(watch(()=>n.activeTabIndex,(e,r)=>{r!=null&&n.historyKey&&localStorage.setItem(n.historyKey,e)})),t.div({rid:n.rid,id:()=>n.id,hidden:()=>n.hidden||!n.tabs.length,inert:()=>n.inert,className:()=>`code-block-tabs ${n.className}`,onmount:()=>{n.historyKey&&(n.activeTabIndex=localStorage.getItem(n.historyKey)<<0)},onunmount:()=>{r.forEach(e=>e?.unwatch())}},t.header({className:`tabs-header`},()=>n.tabs.map((e,r)=>t.button({type:`button`,className:()=>`tab-item ${n.activeTabIndex==r?`active`:``}`,onclick:()=>n.activeTabIndex=r},n=>typeof e.title==`function`?e.title(n):e.title))),t.div({className:`code-block-tabs-content`},()=>{if(n.activeTab)return app.components.codeBlock(n.activeTab)}))},window.app=window.app||{},window.app.components=window.app.components||{},window.app.components.select=function(e={}){let n=store({rid:void 0,id:void 0,name:void 0,hidden:void 0,inert:void 0,className:``,value:void 0,options:[],before:null,after:null,max:1,searchThreshold:6,required:!1,disabled:!1,placeholder:`- Select -`,noItemsFoundText:`No items found`,onchange:function(e){},ondropdowntoggle:function(e){}}),r=app.utils.extendStore(n,e);n.max<=0&&(n.max=1);let i=store({selected:[],search:``,get hasSearch(){return i.search?.length>0},get allowRemove(){return!n.disabled&&(!n.required||n.max>1)}});function a(){if(n.value===void 0)return;let e=app.utils.toArray(n.value,!0),r=e.slice(0,n.max||1);e.length!=r.length&&(console.warn(`[select] the provided select values (${e.length}) are more than the allowed max selected options (${r.length}):`,e),n.value=n.max>1?r:r[0]),i.selected=e.map(e=>n.options.find(n=>n.value===e)).filter(Boolean)}r.push(watch(()=>n.value,()=>a()));async function o(e){let r=i.selected.findIndex(n=>n.value===e.value);if(r>=0){if(!i.allowRemove){f?.hidePopover();return}i.selected.splice(r,1)}else{let r=i.selected.length-n.max;for(;r>=0;)i.selected.pop(),r--;i.selected.push(e)}n.max<=1&&f?.hidePopover(),n.onchange&&(await n.onchange(i.selected),a()),p?.isConnected&&p.dispatchEvent(new CustomEvent(`change`,{detail:i.selected,bubbles:!0}))}function s(e){return i.selected.findIndex(n=>n.value===e.value)>=0}let c=t.input({type:`text`,placeholder:`Search...`,value:()=>i.search,oninput:e=>i.search=e.target.value});function l(e=!1){i.search=``,e&&c?.focus()}let u=t.div({className:`txt-hint txt-center m-0 p-5`,hidden:!0},n.noItemsFoundText);async function d(){f&&(await new Promise(e=>setTimeout(e,0)),f.querySelector(`.select-option:not([hidden])`)?u.hidden=!0:u.hidden=!1)}let f=t.div({tabIndex:-1,popover:`auto`,className:`dropdown`,onbeforetoggle:e=>(e.newState==`closed`&&l(),n.ondropdowntoggle?.(e))},t.div({className:`fields dropdown-search`,hidden:()=>n.options.length<n.searchThreshold},t.div({className:`field`},c),t.div({className:`field addon p-r-5`,hidden:()=>!i.hasSearch},t.button({type:`button`,title:`Clear`,className:`btn sm secondary transparent circle`,onclick:()=>l(!0)},t.i({className:`ri-close-line`,ariaHidden:!0})))),()=>n.before?.__raw||n.before,()=>n.options.map(e=>t.button({type:`button`,className:()=>`dropdown-item select-option ${s(e)?`active`:``}`,onclick:()=>(o(e),!1)},e.label||e.value)),u,()=>n.after?.__raw||n.after),p=t.button({type:`button`,id:()=>n.id,name:()=>n.name,disabled:()=>n.disabled,className:()=>`selected-container ${n.className}`,popoverTargetElement:f,onclick:e=>{e.stopPropagation()}},()=>i.selected.length?i.selected.map(e=>t.div({className:`selected-item`},e.selected||e.label||e.value,()=>{if(i.allowRemove)return t.i({tabIndex:-1,role:`button`,className:`ri-close-line link-hint btn-option-unset`,ariaLabel:app.attrs.tooltip(`Unset`,`left`),onclick:()=>(o(e),!1)})})):t.span({rid:`selected-placeholder`,className:`placeholder`},()=>n.placeholder));r.push(watch(()=>n.options,()=>{d()}));let m;return r.push(watch(()=>i.search,()=>{let e=i.search.toLowerCase().replaceAll(` `,``);clearTimeout(m),m=setTimeout(()=>{let n=f.querySelectorAll(`.select-option`);e.length?n.forEach(n=>{n.textContent.toLowerCase().replaceAll(` `,``).includes(e)?n.hidden=!1:n.hidden=!0}):n.forEach(e=>e.hidden=!1),d()},100)})),t.div({rid:n.rid,hidden:()=>n.hidden,inert:()=>n.inert,onmount:e=>{e.addEventListener(`focusout`,function(n){(!n.relatedTarget||!e.contains(n.relatedTarget))&&f?.hidePopover()})},onunmount:()=>{clearTimeout(m),r.forEach(e=>e.unwatch())},className:()=>[`input`,`select`,n.max>1?`multiple`:`single`,n.disabled?`disabled`:``,n.required?`required`:``].join(` `)},p,f)},window.app=window.app||{},window.app.components=window.app.components||{};var Ie=Intl.DateTimeFormat().resolvedOptions().timeZone;window.app.components.formattedDate=function(e={}){let n=store({rid:void 0,id:void 0,hidden:void 0,value:``,short:!1}),r=app.utils.extendStore(n,e);return t.div({rid:n.rid,id:()=>n.id,hidden:()=>n.hidden,ariaDescription:app.attrs.tooltip(()=>n.short&&n.value?app.utils.toLocalDatetime(n.value)+`
`+Ie:null),"html-class":`formatted-date`,className:()=>`formatted-date ${n.short?`short`:`full`}`,onunmount:()=>{r.forEach(e=>e?.unwatch())}},()=>{if(!n.value)return t.span({className:`missing-value`});if(n.short){let e=n.value.split(` `);return[t.span({className:`primary-date`},e[0]),t.span({className:`secondary-date`},e[1])]}return[t.span({className:`primary-date`},app.utils.toLocalDatetime(n.value)),t.span({className:`secondary-date`},n.value)]})},window.app=window.app||{},window.app.components=window.app.components||{},window.app.components.refreshButton=function(e={}){let n=store({rid:void 0,id:void 0,hidden:void 0,inert:void 0,tooltip:`Refresh`,className:`btn transparent secondary circle rotate-btn`,disabled:!1,onclick:function(e){}}),r=app.utils.extendStore(n,e),i,a=t.button({rid:n.rid,id:()=>n.id,hidden:()=>n.hidden,inert:()=>n.inert,type:`button`,ariaLabel:app.attrs.tooltip(()=>n.tooltip),disabled:()=>n.disabled,className:()=>n.className,onunmount:()=>{clearTimeout(i),r.forEach(e=>e?.unwatch())},onclick:e=>{e.preventDefault(),n.onclick&&n.onclick(e),a.classList.add(`rotate`),a.addEventListener(`animationend`,()=>{a.classList.remove(`rotate`)}),clearTimeout(i),i=setTimeout(()=>{clearTimeout(i),a.classList.remove(`rotate`)},500)}},t.i({className:`ri-refresh-line`,ariaHidden:!0}));return a},window.app=window.app||{},window.app.components=window.app.components||{},window.app.components.searchHistoryButton=function(e={}){let n=store({rid:void 0,id:void 0,hidden:void 0,inert:void 0,value:void 0,historyKey:`default`,max:15,openInNewTabParam:`filter`,btnClassName:`btn sm pill secondary transparent p-r-5`,onselect:function(e){}}),r=app.utils.extendStore(n,e),i=store({items:app.utils.getLocalHistory(n.historyKey,[])});function a(e){o(e),i.items.unshift(e)}function o(e){app.utils.removeByValue(i.items,e)}let s=`history_dropdown_`+app.utils.randomString();r.push(watch(()=>n.value,e=>{e&&a(e)})),r.push(watch(()=>{i.items.length>n.max&&(i.items=i.items.slice(0,n.max)),app.utils.saveLocalHistory(n.historyKey,i.items)}));let c=t.div({id:s,className:`dropdown sm left nowrap history-searchbar-dropdown`,popover:`hint`,onclick:e=>(e.stopPropagation(),!1)},t.div({className:`block p-5`},t.small({className:`txt-hint`},`Search history`)),()=>i.items?.length?i.items.slice(0,n.max).map(e=>t.button({type:`button`,className:`dropdown-item txt-code`,onclick:()=>{c.hidePopover(),n.onselect?.(e),a(e)},onauxclick:()=>{if(n.openInNewTabParam){a(e),c.hidePopover();let r=app.utils.replaceHashQueryParams({[n.openInNewTabParam]:e},!1);window.open(r,`_blank`)}}},t.span({className:`txt-ellipsis`,title:e,textContent:e}),t.small({role:`button`,className:`remove-btn link-hint m-l-auto p-l-5 p-r-5`,title:`Clear`,onauxclick:e=>(e.stopPropagation(),!1),onclick:n=>(n.stopPropagation(),o(e),!1)},t.i({className:`ri-close-line`,ariaHidden:!0})))):t.div({rid:`no-history`,className:`block p-5`},t.span(null,`Your recent searches will show up here.`)));return t.button({rid:n.rid,id:()=>n.id,hidden:()=>n.hidden,inert:()=>n.inert,type:`button`,title:`Search history`,className:()=>n.btnClassName,"html-popovertarget":s,onunmount:()=>{r?.forEach(e=>e?.unwatch())}},t.i({className:`ri-search-line`,ariaHidden:!0}),t.i({className:`ri-arrow-drop-down-line`,ariaHidden:!0}),c)},window.app=window.app||{},window.app.components=window.app.components||{},window.app.components.s3Test=function(e={}){let n=`s3_test_request`,r=store({rid:void 0,config:null,label:`Use S3 storage`,testFilesystem:`storage`}),i=app.utils.extendStore(r,e),a=store({isTesting:!1,testError:null,get hasError(){return!app.utils.isEmpty(a.testError)}}),o,s;function c(e=150){if(!r.config.enabled){clearTimeout(o);return}a.isTesting=!0,clearTimeout(o),o=setTimeout(()=>{l()},e)}async function l(){if(a.isTesting=!0,!r.config.enabled||!r.testFilesystem){a.testError=null,a.isTesting=!1;return}app.pb.cancelRequest(n),clearTimeout(s),s=setTimeout(()=>{app.pb.cancelRequest(n),a.testError=Error(`S3 test connection timeout.`),a.isTesting=!1},3e4);try{await app.pb.props.testS3(r.testFilesystem,{requestKey:n}),a.testError=null,a.isTesting=!1}catch(e){e?.isAbort||(a.testError=e,a.isTesting=!1,clearTimeout(s))}}return i.push(watch(()=>r.testFilesystem&&r.config,()=>c())),t.div({pbEvent:`s3Test`,rid:r.rid,hidden:()=>!r.testFilesystem,className:()=>`label s3-test-label txt-nowrap ${a.hasError?`warning`:`success`}`,ariaDescription:app.attrs.tooltip(()=>a.testError?.data?.message),onunmount:()=>{clearTimeout(s),clearTimeout(o),i.forEach(e=>e?.unwatch())}},()=>a.isTesting?t.span({className:`loader sm`}):a.hasError?[t.i({className:`ri-error-warning-line txt-warning`,ariaHidden:!0}),t.span({className:`txt`},`Failed to establish S3 connection`)]:[t.i({className:`ri-checkbox-circle-line txt-success`,ariaHidden:!0}),t.span({className:`txt`},`S3 connected successfully`)])},window.app=window.app||{},window.app.components=window.app.components||{},window.app.components.s3ConfigFields=function(e={}){let n=store({rid:void 0,id:void 0,hidden:void 0,inert:void 0,className:``,config:{},configKey:`s3`,toggleLabel:`Use S3 storage`,testFilesystem:`storage`,before:null,after:null}),r=app.utils.extendStore(n,e);n.configKey.endsWith(`.`)&&(n.configKey=n.configKey.substring(0,n.configKey.length-1));let i=store({originalHash:``,originalConfig:null});return r.push(watch(()=>n.config,e=>{i.originalHash=JSON.stringify(e),i.originalConfig=JSON.parse(i.originalHash)})),t.div({pbEvent:`s3ConfigFields`,rid:n.rid,id:()=>n.id,hidden:()=>n.hidden,inert:()=>n.inert,className:()=>`block s3-fields s3-config-${n.configKey} ${n.className}`,onunmount:()=>{r.forEach(e=>e?.unwatch())}},t.div({className:`field`},t.input({id:()=>`${n.configKey}.enabled`,name:()=>`${n.configKey}.enabled`,type:`checkbox`,className:`switch`,checked:()=>n.config.enabled,onchange:e=>n.config.enabled=e.target.checked}),t.label({htmlFor:()=>`${n.configKey}.enabled`},()=>n.toggleLabel)),e=>typeof n.before==`function`?n.before(e):n.before,app.components.slide(()=>n.config.enabled,t.div({className:`grid m-t-base`},t.div({className:`col-lg-6`},t.div({className:`field`},t.label({htmlFor:()=>`${n.configKey}.endpoint`},`Endpoint`),t.input({id:()=>`${n.configKey}.endpoint`,name:()=>`${n.configKey}.endpoint`,type:`text`,required:()=>n.config.enabled,value:()=>n.config.endpoint||``,oninput:e=>n.config.endpoint=e.target.value}))),t.div({className:`col-lg-3`},t.div({className:`field`},t.label({htmlFor:()=>`${n.configKey}.bucket`},`Bucket`),t.input({id:()=>`${n.configKey}.bucket`,name:()=>`${n.configKey}.bucket`,type:`text`,required:()=>n.config.enabled,value:()=>n.config.bucket||``,oninput:e=>n.config.bucket=e.target.value}))),t.div({className:`col-lg-3`},t.div({className:`field`},t.label({htmlFor:()=>`${n.configKey}.region`},`Region`),t.input({id:()=>`${n.configKey}.region`,name:()=>`${n.configKey}.region`,type:`text`,required:()=>n.config.enabled,value:()=>n.config.region||``,oninput:e=>n.config.region=e.target.value}))),t.div({className:`col-lg-6`},t.div({className:`field`},t.label({htmlFor:()=>`${n.configKey}.accessKey`},`Access key`),t.input({id:()=>`${n.configKey}.accessKey`,name:()=>`${n.configKey}.accessKey`,type:`text`,autocomplete:`off`,required:()=>n.config.enabled,value:()=>n.config.accessKey||``,oninput:e=>n.config.accessKey=e.target.value}))),t.div({className:`col-lg-6`},t.div({className:()=>`field ${n.config.enabled?``:`required`}`},t.label({htmlFor:()=>`${n.configKey}.secret`},`Secret`),t.input({id:()=>`${n.configKey}.secret`,name:()=>`${n.configKey}.secret`,type:`password`,autocomplete:`new-password`,value:()=>n.config.secret||``,oninput:e=>n.config.secret=e.target.value,onkeyup:e=>{e.key==`Backspace`&&n.config.secret===void 0&&(n.config.secret=``)},placeholder:()=>n.config.secret===void 0?`* * * * * *`:``}))),t.div({className:`col-lg-6`,style:`min-height: 25px`},t.div({className:`field`},t.input({id:()=>`${n.configKey}.forcePathStyle`,name:()=>`${n.configKey}.forcePathStyle`,type:`checkbox`,checked:()=>n.config.forcePathStyle||!1,onchange:e=>n.config.forcePathStyle=e.target.checked}),t.label({htmlFor:()=>`${n.configKey}.forcePathStyle`},t.span({className:`txt`},`Force path-style addressing`),t.i({className:`ri-information-line link-hint`,ariaDescription:app.attrs.tooltip(`Forces the request to use path-style addressing, eg. "https://s3.amazonaws.com/BUCKET/KEY" instead of the default "https://BUCKET.s3.amazonaws.com/KEY".`)})))),t.div({className:`col-lg-6 txt-right`},()=>{if(!(!n.config?.enabled||i.originalHash!=JSON.stringify(n.config)))return app.components.s3Test({config:()=>n.config,testFilesystem:()=>n.testFilesystem})}))),e=>typeof n.after==`function`?n.after(e):n.after)};var Le=p(d(((e,n)=>{(function(r,i){typeof e==`object`&&n!==void 0?i(e):typeof define==`function`&&define.amd?define([`exports`],i):(r=typeof globalThis<`u`?globalThis:r||self,i(r.leaflet={}))})(e,(function(e){var n=`1.9.4`;function r(e){var n,r,i,a;for(r=1,i=arguments.length;r<i;r++)for(n in a=arguments[r],a)e[n]=a[n];return e}var i=Object.create||(function(){function e(){}return function(n){return e.prototype=n,new e}})();function a(e,n){var r=Array.prototype.slice;if(e.bind)return e.bind.apply(e,r.call(arguments,1));var i=r.call(arguments,2);return function(){return e.apply(n,i.length?i.concat(r.call(arguments)):arguments)}}var o=0;function s(e){return`_leaflet_id`in e||(e._leaflet_id=++o),e._leaflet_id}function c(e,n,r){var i,a,o,s=function(){i=!1,a&&=(o.apply(r,a),!1)};return o=function(){i?a=arguments:(e.apply(r,arguments),setTimeout(s,n),i=!0)},o}function l(e,n,r){var i=n[1],a=n[0],o=i-a;return e===i&&r?e:((e-a)%o+o)%o+a}function u(){return!1}function d(e,n){if(n===!1)return e;var r=10**(n===void 0?6:n);return Math.round(e*r)/r}function f(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,``)}function p(e){return f(e).split(/\s+/)}function m(e,n){for(var r in Object.prototype.hasOwnProperty.call(e,`options`)||(e.options=e.options?i(e.options):{}),n)e.options[r]=n[r];return e.options}function h(e,n,r){var i=[];for(var a in e)i.push(encodeURIComponent(r?a.toUpperCase():a)+`=`+encodeURIComponent(e[a]));return(!n||n.indexOf(`?`)===-1?`?`:`&`)+i.join(`&`)}var g=/\{ *([\w_ -]+) *\}/g;function _(e,n){return e.replace(g,function(e,r){var i=n[r];if(i===void 0)throw Error(`No value provided for variable `+e);return typeof i==`function`&&(i=i(n)),i})}var v=Array.isArray||function(e){return Object.prototype.toString.call(e)===`[object Array]`};function ee(e,n){for(var r=0;r<e.length;r++)if(e[r]===n)return r;return-1}var te=`data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=`;function ne(e){return window[`webkit`+e]||window[`moz`+e]||window[`ms`+e]}var re=0;function ie(e){var n=+new Date,r=Math.max(0,16-(n-re));return re=n+r,window.setTimeout(e,r)}var ae=window.requestAnimationFrame||ne(`RequestAnimationFrame`)||ie,oe=window.cancelAnimationFrame||ne(`CancelAnimationFrame`)||ne(`CancelRequestAnimationFrame`)||function(e){window.clearTimeout(e)};function y(e,n,r){if(r&&ae===ie)e.call(n);else return ae.call(window,a(e,n))}function b(e){e&&oe.call(window,e)}var se={__proto__:null,extend:r,create:i,bind:a,get lastId(){return o},stamp:s,throttle:c,wrapNum:l,falseFn:u,formatNum:d,trim:f,splitWords:p,setOptions:m,getParamString:h,template:_,isArray:v,indexOf:ee,emptyImageUrl:te,requestFn:ae,cancelFn:oe,requestAnimFrame:y,cancelAnimFrame:b};function ce(){}ce.extend=function(e){var n=function(){m(this),this.initialize&&this.initialize.apply(this,arguments),this.callInitHooks()},a=n.__super__=this.prototype,o=i(a);for(var s in o.constructor=n,n.prototype=o,this)Object.prototype.hasOwnProperty.call(this,s)&&s!==`prototype`&&s!==`__super__`&&(n[s]=this[s]);return e.statics&&r(n,e.statics),e.includes&&(le(e.includes),r.apply(null,[o].concat(e.includes))),r(o,e),delete o.statics,delete o.includes,o.options&&(o.options=a.options?i(a.options):{},r(o.options,e.options)),o._initHooks=[],o.callInitHooks=function(){if(!this._initHooksCalled){a.callInitHooks&&a.callInitHooks.call(this),this._initHooksCalled=!0;for(var e=0,n=o._initHooks.length;e<n;e++)o._initHooks[e].call(this)}},n},ce.include=function(e){var n=this.prototype.options;return r(this.prototype,e),e.options&&(this.prototype.options=n,this.mergeOptions(e.options)),this},ce.mergeOptions=function(e){return r(this.prototype.options,e),this},ce.addInitHook=function(e){var n=Array.prototype.slice.call(arguments,1),r=typeof e==`function`?e:function(){this[e].apply(this,n)};return this.prototype._initHooks=this.prototype._initHooks||[],this.prototype._initHooks.push(r),this};function le(e){if(!(typeof L>`u`||!L||!L.Mixin)){e=v(e)?e:[e];for(var n=0;n<e.length;n++)e[n]===L.Mixin.Events&&console.warn(`Deprecated include of L.Mixin.Events: this property will be removed in future releases, please inherit from L.Evented instead.`,Error().stack)}}var x={on:function(e,n,r){if(typeof e==`object`)for(var i in e)this._on(i,e[i],n);else{e=p(e);for(var a=0,o=e.length;a<o;a++)this._on(e[a],n,r)}return this},off:function(e,n,r){if(!arguments.length)delete this._events;else if(typeof e==`object`)for(var i in e)this._off(i,e[i],n);else{e=p(e);for(var a=arguments.length===1,o=0,s=e.length;o<s;o++)a?this._off(e[o]):this._off(e[o],n,r)}return this},_on:function(e,n,r,i){if(typeof n!=`function`){console.warn(`wrong listener type: `+typeof n);return}if(this._listens(e,n,r)===!1){r===this&&(r=void 0);var a={fn:n,ctx:r};i&&(a.once=!0),this._events=this._events||{},this._events[e]=this._events[e]||[],this._events[e].push(a)}},_off:function(e,n,r){var i,a,o;if(this._events&&(i=this._events[e],i)){if(arguments.length===1){if(this._firingCount)for(a=0,o=i.length;a<o;a++)i[a].fn=u;delete this._events[e];return}if(typeof n!=`function`){console.warn(`wrong listener type: `+typeof n);return}var s=this._listens(e,n,r);if(s!==!1){var c=i[s];this._firingCount&&(c.fn=u,this._events[e]=i=i.slice()),i.splice(s,1)}}},fire:function(e,n,i){if(!this.listens(e,i))return this;var a=r({},n,{type:e,target:this,sourceTarget:n&&n.sourceTarget||this});if(this._events){var o=this._events[e];if(o){this._firingCount=this._firingCount+1||1;for(var s=0,c=o.length;s<c;s++){var l=o[s],u=l.fn;l.once&&this.off(e,u,l.ctx),u.call(l.ctx||this,a)}this._firingCount--}}return i&&this._propagateEvent(a),this},listens:function(e,n,r,i){typeof e!=`string`&&console.warn(`"string" type argument expected`);var a=n;typeof n!=`function`&&(i=!!n,a=void 0,r=void 0);var o=this._events&&this._events[e];if(o&&o.length&&this._listens(e,a,r)!==!1)return!0;if(i){for(var s in this._eventParents)if(this._eventParents[s].listens(e,n,r,i))return!0}return!1},_listens:function(e,n,r){if(!this._events)return!1;var i=this._events[e]||[];if(!n)return!!i.length;r===this&&(r=void 0);for(var a=0,o=i.length;a<o;a++)if(i[a].fn===n&&i[a].ctx===r)return a;return!1},once:function(e,n,r){if(typeof e==`object`)for(var i in e)this._on(i,e[i],n,!0);else{e=p(e);for(var a=0,o=e.length;a<o;a++)this._on(e[a],n,r,!0)}return this},addEventParent:function(e){return this._eventParents=this._eventParents||{},this._eventParents[s(e)]=e,this},removeEventParent:function(e){return this._eventParents&&delete this._eventParents[s(e)],this},_propagateEvent:function(e){for(var n in this._eventParents)this._eventParents[n].fire(e.type,r({layer:e.target,propagatedFrom:e.target},e),!0)}};x.addEventListener=x.on,x.removeEventListener=x.clearAllEventListeners=x.off,x.addOneTimeEventListener=x.once,x.fireEvent=x.fire,x.hasEventListeners=x.listens;var ue=ce.extend(x);function S(e,n,r){this.x=r?Math.round(e):e,this.y=r?Math.round(n):n}var de=Math.trunc||function(e){return e>0?Math.floor(e):Math.ceil(e)};S.prototype={clone:function(){return new S(this.x,this.y)},add:function(e){return this.clone()._add(C(e))},_add:function(e){return this.x+=e.x,this.y+=e.y,this},subtract:function(e){return this.clone()._subtract(C(e))},_subtract:function(e){return this.x-=e.x,this.y-=e.y,this},divideBy:function(e){return this.clone()._divideBy(e)},_divideBy:function(e){return this.x/=e,this.y/=e,this},multiplyBy:function(e){return this.clone()._multiplyBy(e)},_multiplyBy:function(e){return this.x*=e,this.y*=e,this},scaleBy:function(e){return new S(this.x*e.x,this.y*e.y)},unscaleBy:function(e){return new S(this.x/e.x,this.y/e.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=de(this.x),this.y=de(this.y),this},distanceTo:function(e){e=C(e);var n=e.x-this.x,r=e.y-this.y;return Math.sqrt(n*n+r*r)},equals:function(e){return e=C(e),e.x===this.x&&e.y===this.y},contains:function(e){return e=C(e),Math.abs(e.x)<=Math.abs(this.x)&&Math.abs(e.y)<=Math.abs(this.y)},toString:function(){return`Point(`+d(this.x)+`, `+d(this.y)+`)`}};function C(e,n,r){return e instanceof S?e:v(e)?new S(e[0],e[1]):e==null?e:typeof e==`object`&&`x`in e&&`y`in e?new S(e.x,e.y):new S(e,n,r)}function w(e,n){if(e)for(var r=n?[e,n]:e,i=0,a=r.length;i<a;i++)this.extend(r[i])}w.prototype={extend:function(e){var n,r;if(!e)return this;if(e instanceof S||typeof e[0]==`number`||`x`in e)n=r=C(e);else if(e=T(e),n=e.min,r=e.max,!n||!r)return this;return!this.min&&!this.max?(this.min=n.clone(),this.max=r.clone()):(this.min.x=Math.min(n.x,this.min.x),this.max.x=Math.max(r.x,this.max.x),this.min.y=Math.min(n.y,this.min.y),this.max.y=Math.max(r.y,this.max.y)),this},getCenter:function(e){return C((this.min.x+this.max.x)/2,(this.min.y+this.max.y)/2,e)},getBottomLeft:function(){return C(this.min.x,this.max.y)},getTopRight:function(){return C(this.max.x,this.min.y)},getTopLeft:function(){return this.min},getBottomRight:function(){return this.max},getSize:function(){return this.max.subtract(this.min)},contains:function(e){var n,r;return e=typeof e[0]==`number`||e instanceof S?C(e):T(e),e instanceof w?(n=e.min,r=e.max):n=r=e,n.x>=this.min.x&&r.x<=this.max.x&&n.y>=this.min.y&&r.y<=this.max.y},intersects:function(e){e=T(e);var n=this.min,r=this.max,i=e.min,a=e.max,o=a.x>=n.x&&i.x<=r.x,s=a.y>=n.y&&i.y<=r.y;return o&&s},overlaps:function(e){e=T(e);var n=this.min,r=this.max,i=e.min,a=e.max,o=a.x>n.x&&i.x<r.x,s=a.y>n.y&&i.y<r.y;return o&&s},isValid:function(){return!!(this.min&&this.max)},pad:function(e){var n=this.min,r=this.max,i=Math.abs(n.x-r.x)*e,a=Math.abs(n.y-r.y)*e;return T(C(n.x-i,n.y-a),C(r.x+i,r.y+a))},equals:function(e){return e?(e=T(e),this.min.equals(e.getTopLeft())&&this.max.equals(e.getBottomRight())):!1}};function T(e,n){return!e||e instanceof w?e:new w(e,n)}function E(e,n){if(e)for(var r=n?[e,n]:e,i=0,a=r.length;i<a;i++)this.extend(r[i])}E.prototype={extend:function(e){var n=this._southWest,r=this._northEast,i,a;if(e instanceof O)i=e,a=e;else if(e instanceof E){if(i=e._southWest,a=e._northEast,!i||!a)return this}else return e?this.extend(k(e)||D(e)):this;return!n&&!r?(this._southWest=new O(i.lat,i.lng),this._northEast=new O(a.lat,a.lng)):(n.lat=Math.min(i.lat,n.lat),n.lng=Math.min(i.lng,n.lng),r.lat=Math.max(a.lat,r.lat),r.lng=Math.max(a.lng,r.lng)),this},pad:function(e){var n=this._southWest,r=this._northEast,i=Math.abs(n.lat-r.lat)*e,a=Math.abs(n.lng-r.lng)*e;return new E(new O(n.lat-i,n.lng-a),new O(r.lat+i,r.lng+a))},getCenter:function(){return new O((this._southWest.lat+this._northEast.lat)/2,(this._southWest.lng+this._northEast.lng)/2)},getSouthWest:function(){return this._southWest},getNorthEast:function(){return this._northEast},getNorthWest:function(){return new O(this.getNorth(),this.getWest())},getSouthEast:function(){return new O(this.getSouth(),this.getEast())},getWest:function(){return this._southWest.lng},getSouth:function(){return this._southWest.lat},getEast:function(){return this._northEast.lng},getNorth:function(){return this._northEast.lat},contains:function(e){e=typeof e[0]==`number`||e instanceof O||`lat`in e?k(e):D(e);var n=this._southWest,r=this._northEast,i,a;return e instanceof E?(i=e.getSouthWest(),a=e.getNorthEast()):i=a=e,i.lat>=n.lat&&a.lat<=r.lat&&i.lng>=n.lng&&a.lng<=r.lng},intersects:function(e){e=D(e);var n=this._southWest,r=this._northEast,i=e.getSouthWest(),a=e.getNorthEast(),o=a.lat>=n.lat&&i.lat<=r.lat,s=a.lng>=n.lng&&i.lng<=r.lng;return o&&s},overlaps:function(e){e=D(e);var n=this._southWest,r=this._northEast,i=e.getSouthWest(),a=e.getNorthEast(),o=a.lat>n.lat&&i.lat<r.lat,s=a.lng>n.lng&&i.lng<r.lng;return o&&s},toBBoxString:function(){return[this.getWest(),this.getSouth(),this.getEast(),this.getNorth()].join(`,`)},equals:function(e,n){return e?(e=D(e),this._southWest.equals(e.getSouthWest(),n)&&this._northEast.equals(e.getNorthEast(),n)):!1},isValid:function(){return!!(this._southWest&&this._northEast)}};function D(e,n){return e instanceof E?e:new E(e,n)}function O(e,n,r){if(isNaN(e)||isNaN(n))throw Error(`Invalid LatLng object: (`+e+`, `+n+`)`);this.lat=+e,this.lng=+n,r!==void 0&&(this.alt=+r)}O.prototype={equals:function(e,n){return e?(e=k(e),Math.max(Math.abs(this.lat-e.lat),Math.abs(this.lng-e.lng))<=(n===void 0?1e-9:n)):!1},toString:function(e){return`LatLng(`+d(this.lat,e)+`, `+d(this.lng,e)+`)`},distanceTo:function(e){return fe.distance(this,k(e))},wrap:function(){return fe.wrapLatLng(this)},toBounds:function(e){var n=180*e/40075017,r=n/Math.cos(Math.PI/180*this.lat);return D([this.lat-n,this.lng-r],[this.lat+n,this.lng+r])},clone:function(){return new O(this.lat,this.lng,this.alt)}};function k(e,n,r){return e instanceof O?e:v(e)&&typeof e[0]!=`object`?e.length===3?new O(e[0],e[1],e[2]):e.length===2?new O(e[0],e[1]):null:e==null?e:typeof e==`object`&&`lat`in e?new O(e.lat,`lng`in e?e.lng:e.lon,e.alt):n===void 0?null:new O(e,n,r)}var A={latLngToPoint:function(e,n){var r=this.projection.project(e),i=this.scale(n);return this.transformation._transform(r,i)},pointToLatLng:function(e,n){var r=this.scale(n),i=this.transformation.untransform(e,r);return this.projection.unproject(i)},project:function(e){return this.projection.project(e)},unproject:function(e){return this.projection.unproject(e)},scale:function(e){return 256*2**e},zoom:function(e){return Math.log(e/256)/Math.LN2},getProjectedBounds:function(e){if(this.infinite)return null;var n=this.projection.bounds,r=this.scale(e);return new w(this.transformation.transform(n.min,r),this.transformation.transform(n.max,r))},infinite:!1,wrapLatLng:function(e){var n=this.wrapLng?l(e.lng,this.wrapLng,!0):e.lng,r=this.wrapLat?l(e.lat,this.wrapLat,!0):e.lat,i=e.alt;return new O(r,n,i)},wrapLatLngBounds:function(e){var n=e.getCenter(),r=this.wrapLatLng(n),i=n.lat-r.lat,a=n.lng-r.lng;if(i===0&&a===0)return e;var o=e.getSouthWest(),s=e.getNorthEast();return new E(new O(o.lat-i,o.lng-a),new O(s.lat-i,s.lng-a))}},fe=r({},A,{wrapLng:[-180,180],R:6371e3,distance:function(e,n){var r=Math.PI/180,i=e.lat*r,a=n.lat*r,o=Math.sin((n.lat-e.lat)*r/2),s=Math.sin((n.lng-e.lng)*r/2),c=o*o+Math.cos(i)*Math.cos(a)*s*s,l=2*Math.atan2(Math.sqrt(c),Math.sqrt(1-c));return this.R*l}}),pe=6378137,j={R:pe,MAX_LATITUDE:85.0511287798,project:function(e){var n=Math.PI/180,r=this.MAX_LATITUDE,i=Math.max(Math.min(r,e.lat),-r),a=Math.sin(i*n);return new S(this.R*e.lng*n,this.R*Math.log((1+a)/(1-a))/2)},unproject:function(e){var n=180/Math.PI;return new O((2*Math.atan(Math.exp(e.y/this.R))-Math.PI/2)*n,e.x*n/this.R)},bounds:(function(){var e=pe*Math.PI;return new w([-e,-e],[e,e])})()};function me(e,n,r,i){if(v(e)){this._a=e[0],this._b=e[1],this._c=e[2],this._d=e[3];return}this._a=e,this._b=n,this._c=r,this._d=i}me.prototype={transform:function(e,n){return this._transform(e.clone(),n)},_transform:function(e,n){return n||=1,e.x=n*(this._a*e.x+this._b),e.y=n*(this._c*e.y+this._d),e},untransform:function(e,n){return n||=1,new S((e.x/n-this._b)/this._a,(e.y/n-this._d)/this._c)}};function M(e,n,r,i){return new me(e,n,r,i)}var he=r({},fe,{code:`EPSG:3857`,projection:j,transformation:function(){var e=.5/(Math.PI*j.R);return M(e,.5,-e,.5)}()}),ge=r({},he,{code:`EPSG:900913`});function _e(e){return document.createElementNS(`http://www.w3.org/2000/svg`,e)}function ve(e,n){var r=``,i,a,o,s,c,l;for(i=0,o=e.length;i<o;i++){for(c=e[i],a=0,s=c.length;a<s;a++)l=c[a],r+=(a?`L`:`M`)+l.x+` `+l.y;r+=n?P.svg?`z`:`x`:``}return r||`M0 0`}var ye=document.documentElement.style,be=`ActiveXObject`in window,xe=be&&!document.addEventListener,Se=`msLaunchUri`in navigator&&!(`documentMode`in document),Ce=N(`webkit`),we=N(`android`),Te=N(`android 2`)||N(`android 3`),Ee=parseInt(/WebKit\/([0-9]+)|$/.exec(navigator.userAgent)[1],10),De=we&&N(`Google`)&&Ee<537&&!(`AudioNode`in window),Oe=!!window.opera,ke=!Se&&N(`chrome`),Ae=N(`gecko`)&&!Ce&&!Oe&&!be,je=!ke&&N(`safari`),Me=N(`phantom`),Ne=`OTransition`in ye,Pe=navigator.platform.indexOf(`Win`)===0,Fe=be&&`transition`in ye,Ie=`WebKitCSSMatrix`in window&&`m11`in new window.WebKitCSSMatrix&&!Te,Le=`MozPerspective`in ye,Re=!window.L_DISABLE_3D&&(Fe||Ie||Le)&&!Ne&&!Me,ze=typeof orientation<`u`||N(`mobile`),Be=ze&&Ce,Ve=ze&&Ie,He=!window.PointerEvent&&window.MSPointerEvent,Ue=!!(window.PointerEvent||He),We=`ontouchstart`in window||!!window.TouchEvent,Ge=!window.L_NO_TOUCH&&(We||Ue),Ke=ze&&Oe,qe=ze&&Ae,Je=(window.devicePixelRatio||window.screen.deviceXDPI/window.screen.logicalXDPI)>1,Ye=function(){var e=!1;try{var n=Object.defineProperty({},`passive`,{get:function(){e=!0}});window.addEventListener(`testPassiveEventSupport`,u,n),window.removeEventListener(`testPassiveEventSupport`,u,n)}catch{}return e}(),Xe=function(){return!!document.createElement(`canvas`).getContext}(),Ze=!!(document.createElementNS&&_e(`svg`).createSVGRect),Qe=!!Ze&&(function(){var e=document.createElement(`div`);return e.innerHTML=`<svg/>`,(e.firstChild&&e.firstChild.namespaceURI)===`http://www.w3.org/2000/svg`})(),$e=!Ze&&function(){try{var e=document.createElement(`div`);e.innerHTML=`<v:shape adj="1"/>`;var n=e.firstChild;return n.style.behavior=`url(#default#VML)`,n&&typeof n.adj==`object`}catch{return!1}}(),et=navigator.platform.indexOf(`Mac`)===0,tt=navigator.platform.indexOf(`Linux`)===0;function N(e){return navigator.userAgent.toLowerCase().indexOf(e)>=0}var P={ie:be,ielt9:xe,edge:Se,webkit:Ce,android:we,android23:Te,androidStock:De,opera:Oe,chrome:ke,gecko:Ae,safari:je,phantom:Me,opera12:Ne,win:Pe,ie3d:Fe,webkit3d:Ie,gecko3d:Le,any3d:Re,mobile:ze,mobileWebkit:Be,mobileWebkit3d:Ve,msPointer:He,pointer:Ue,touch:Ge,touchNative:We,mobileOpera:Ke,mobileGecko:qe,retina:Je,passiveEvents:Ye,canvas:Xe,svg:Ze,vml:$e,inlineSvg:Qe,mac:et,linux:tt},nt=P.msPointer?`MSPointerDown`:`pointerdown`,rt=P.msPointer?`MSPointerMove`:`pointermove`,F=P.msPointer?`MSPointerUp`:`pointerup`,it=P.msPointer?`MSPointerCancel`:`pointercancel`,at={touchstart:nt,touchmove:rt,touchend:F,touchcancel:it},ot={touchstart:ht,touchmove:mt,touchend:mt,touchcancel:mt},st={},ct=!1;function lt(e,n,r){return n===`touchstart`&&pt(),ot[n]?(r=ot[n].bind(this,r),e.addEventListener(at[n],r,!1),r):(console.warn(`wrong event specified:`,n),u)}function ut(e,n,r){if(!at[n]){console.warn(`wrong event specified:`,n);return}e.removeEventListener(at[n],r,!1)}function I(e){st[e.pointerId]=e}function dt(e){st[e.pointerId]&&(st[e.pointerId]=e)}function ft(e){delete st[e.pointerId]}function pt(){ct||=(document.addEventListener(nt,I,!0),document.addEventListener(rt,dt,!0),document.addEventListener(F,ft,!0),document.addEventListener(it,ft,!0),!0)}function mt(e,n){if(n.pointerType!==(n.MSPOINTER_TYPE_MOUSE||`mouse`)){for(var r in n.touches=[],st)n.touches.push(st[r]);n.changedTouches=[n],e(n)}}function ht(e,n){n.MSPOINTER_TYPE_TOUCH&&n.pointerType===n.MSPOINTER_TYPE_TOUCH&&q(n),mt(e,n)}function gt(e){var n={},r,i;for(i in e)r=e[i],n[i]=r&&r.bind?r.bind(e):r;return e=n,n.type=`dblclick`,n.detail=2,n.isTrusted=!1,n._simulated=!0,n}var _t=200;function vt(e,n){e.addEventListener(`dblclick`,n);var r=0,i;function a(e){if(e.detail!==1){i=e.detail;return}if(!(e.pointerType===`mouse`||e.sourceCapabilities&&!e.sourceCapabilities.firesTouchEvents)){var a=nn(e);if(!(a.some(function(e){return e instanceof HTMLLabelElement&&e.attributes.for})&&!a.some(function(e){return e instanceof HTMLInputElement||e instanceof HTMLSelectElement}))){var o=Date.now();o-r<=_t?(i++,i===2&&n(gt(e))):i=1,r=o}}}return e.addEventListener(`click`,a),{dblclick:n,simDblclick:a}}function yt(e,n){e.removeEventListener(`dblclick`,n.dblclick),e.removeEventListener(`click`,n.simDblclick)}var bt=Mt([`transform`,`webkitTransform`,`OTransform`,`MozTransform`,`msTransform`]),xt=Mt([`webkitTransition`,`transition`,`OTransition`,`MozTransition`,`msTransition`]),St=xt===`webkitTransition`||xt===`OTransition`?xt+`End`:`transitionend`;function Ct(e){return typeof e==`string`?document.getElementById(e):e}function wt(e,n){var r=e.style[n]||e.currentStyle&&e.currentStyle[n];if((!r||r===`auto`)&&document.defaultView){var i=document.defaultView.getComputedStyle(e,null);r=i?i[n]:null}return r===`auto`?null:r}function R(e,n,r){var i=document.createElement(e);return i.className=n||``,r&&r.appendChild(i),i}function z(e){var n=e.parentNode;n&&n.removeChild(e)}function Tt(e){for(;e.firstChild;)e.removeChild(e.firstChild)}function Et(e){var n=e.parentNode;n&&n.lastChild!==e&&n.appendChild(e)}function Dt(e){var n=e.parentNode;n&&n.firstChild!==e&&n.insertBefore(e,n.firstChild)}function Ot(e,n){if(e.classList!==void 0)return e.classList.contains(n);var r=At(e);return r.length>0&&RegExp(`(^|\\s)`+n+`(\\s|$)`).test(r)}function B(e,n){if(e.classList!==void 0)for(var r=p(n),i=0,a=r.length;i<a;i++)e.classList.add(r[i]);else if(!Ot(e,n)){var o=At(e);kt(e,(o?o+` `:``)+n)}}function V(e,n){e.classList===void 0?kt(e,f((` `+At(e)+` `).replace(` `+n+` `,` `))):e.classList.remove(n)}function kt(e,n){e.className.baseVal===void 0?e.className=n:e.className.baseVal=n}function At(e){return e.correspondingElement&&(e=e.correspondingElement),e.className.baseVal===void 0?e.className:e.className.baseVal}function H(e,n){`opacity`in e.style?e.style.opacity=n:`filter`in e.style&&jt(e,n)}function jt(e,n){var r=!1,i=`DXImageTransform.Microsoft.Alpha`;try{r=e.filters.item(i)}catch{if(n===1)return}n=Math.round(n*100),r?(r.Enabled=n!==100,r.Opacity=n):e.style.filter+=` progid:`+i+`(opacity=`+n+`)`}function Mt(e){for(var n=document.documentElement.style,r=0;r<e.length;r++)if(e[r]in n)return e[r];return!1}function Nt(e,n,r){var i=n||new S(0,0);e.style[bt]=(P.ie3d?`translate(`+i.x+`px,`+i.y+`px)`:`translate3d(`+i.x+`px,`+i.y+`px,0)`)+(r?` scale(`+r+`)`:``)}function U(e,n){e._leaflet_pos=n,P.any3d?Nt(e,n):(e.style.left=n.x+`px`,e.style.top=n.y+`px`)}function Pt(e){return e._leaflet_pos||new S(0,0)}var Ft,It,Lt;if(`onselectstart`in document)Ft=function(){W(window,`selectstart`,q)},It=function(){K(window,`selectstart`,q)};else{var Rt=Mt([`userSelect`,`WebkitUserSelect`,`OUserSelect`,`MozUserSelect`,`msUserSelect`]);Ft=function(){if(Rt){var e=document.documentElement.style;Lt=e[Rt],e[Rt]=`none`}},It=function(){Rt&&(document.documentElement.style[Rt]=Lt,Lt=void 0)}}function zt(){W(window,`dragstart`,q)}function Bt(){K(window,`dragstart`,q)}var Vt,Ht;function Ut(e){for(;e.tabIndex===-1;)e=e.parentNode;e.style&&(Wt(),Vt=e,Ht=e.style.outlineStyle,e.style.outlineStyle=`none`,W(window,`keydown`,Wt))}function Wt(){Vt&&(Vt.style.outlineStyle=Ht,Vt=void 0,Ht=void 0,K(window,`keydown`,Wt))}function Gt(e){do e=e.parentNode;while((!e.offsetWidth||!e.offsetHeight)&&e!==document.body);return e}function Kt(e){var n=e.getBoundingClientRect();return{x:n.width/e.offsetWidth||1,y:n.height/e.offsetHeight||1,boundingClientRect:n}}var qt={__proto__:null,TRANSFORM:bt,TRANSITION:xt,TRANSITION_END:St,get:Ct,getStyle:wt,create:R,remove:z,empty:Tt,toFront:Et,toBack:Dt,hasClass:Ot,addClass:B,removeClass:V,setClass:kt,getClass:At,setOpacity:H,testProp:Mt,setTransform:Nt,setPosition:U,getPosition:Pt,get disableTextSelection(){return Ft},get enableTextSelection(){return It},disableImageDrag:zt,enableImageDrag:Bt,preventOutline:Ut,restoreOutline:Wt,getSizedParentNode:Gt,getScale:Kt};function W(e,n,r,i){if(n&&typeof n==`object`)for(var a in n)Xt(e,a,n[a],r);else{n=p(n);for(var o=0,s=n.length;o<s;o++)Xt(e,n[o],r,i)}return this}var G=`_leaflet_events`;function K(e,n,r,i){if(arguments.length===1)Jt(e),delete e[G];else if(n&&typeof n==`object`)for(var a in n)Zt(e,a,n[a],r);else if(n=p(n),arguments.length===2)Jt(e,function(e){return ee(n,e)!==-1});else for(var o=0,s=n.length;o<s;o++)Zt(e,n[o],r,i);return this}function Jt(e,n){for(var r in e[G]){var i=r.split(/\d/)[0];(!n||n(i))&&Zt(e,i,null,null,r)}}var Yt={mouseenter:`mouseover`,mouseleave:`mouseout`,wheel:!(`onwheel`in window)&&`mousewheel`};function Xt(e,n,r,i){var a=n+s(r)+(i?`_`+s(i):``);if(e[G]&&e[G][a])return this;var o=function(n){return r.call(i||e,n||window.event)},c=o;!P.touchNative&&P.pointer&&n.indexOf(`touch`)===0?o=lt(e,n,o):P.touch&&n===`dblclick`?o=vt(e,o):`addEventListener`in e?n===`touchstart`||n===`touchmove`||n===`wheel`||n===`mousewheel`?e.addEventListener(Yt[n]||n,o,P.passiveEvents?{passive:!1}:!1):n===`mouseenter`||n===`mouseleave`?(o=function(n){n||=window.event,sn(e,n)&&c(n)},e.addEventListener(Yt[n],o,!1)):e.addEventListener(n,c,!1):e.attachEvent(`on`+n,o),e[G]=e[G]||{},e[G][a]=o}function Zt(e,n,r,i,a){a||=n+s(r)+(i?`_`+s(i):``);var o=e[G]&&e[G][a];if(!o)return this;!P.touchNative&&P.pointer&&n.indexOf(`touch`)===0?ut(e,n,o):P.touch&&n===`dblclick`?yt(e,o):`removeEventListener`in e?e.removeEventListener(Yt[n]||n,o,!1):e.detachEvent(`on`+n,o),e[G][a]=null}function Qt(e){return e.stopPropagation?e.stopPropagation():e.originalEvent?e.originalEvent._stopped=!0:e.cancelBubble=!0,this}function $t(e){return Xt(e,`wheel`,Qt),this}function en(e){return W(e,`mousedown touchstart dblclick contextmenu`,Qt),e._leaflet_disable_click=!0,this}function q(e){return e.preventDefault?e.preventDefault():e.returnValue=!1,this}function tn(e){return q(e),Qt(e),this}function nn(e){if(e.composedPath)return e.composedPath();for(var n=[],r=e.target;r;)n.push(r),r=r.parentNode;return n}function rn(e,n){if(!n)return new S(e.clientX,e.clientY);var r=Kt(n),i=r.boundingClientRect;return new S((e.clientX-i.left)/r.x-n.clientLeft,(e.clientY-i.top)/r.y-n.clientTop)}var an=P.linux&&P.chrome?window.devicePixelRatio:P.mac?window.devicePixelRatio*3:window.devicePixelRatio>0?2*window.devicePixelRatio:1;function on(e){return P.edge?e.wheelDeltaY/2:e.deltaY&&e.deltaMode===0?-e.deltaY/an:e.deltaY&&e.deltaMode===1?-e.deltaY*20:e.deltaY&&e.deltaMode===2?-e.deltaY*60:e.deltaX||e.deltaZ?0:e.wheelDelta?(e.wheelDeltaY||e.wheelDelta)/2:e.detail&&Math.abs(e.detail)<32765?-e.detail*20:e.detail?e.detail/-32765*60:0}function sn(e,n){var r=n.relatedTarget;if(!r)return!0;try{for(;r&&r!==e;)r=r.parentNode}catch{return!1}return r!==e}var cn={__proto__:null,on:W,off:K,stopPropagation:Qt,disableScrollPropagation:$t,disableClickPropagation:en,preventDefault:q,stop:tn,getPropagationPath:nn,getMousePosition:rn,getWheelDelta:on,isExternalTarget:sn,addListener:W,removeListener:K},ln=ue.extend({run:function(e,n,r,i){this.stop(),this._el=e,this._inProgress=!0,this._duration=r||.25,this._easeOutPower=1/Math.max(i||.5,.2),this._startPos=Pt(e),this._offset=n.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=y(this._animate,this),this._step()},_step:function(e){var n=+new Date-this._startTime,r=this._duration*1e3;n<r?this._runFrame(this._easeOut(n/r),e):(this._runFrame(1),this._complete())},_runFrame:function(e,n){var r=this._startPos.add(this._offset.multiplyBy(e));n&&r._round(),U(this._el,r),this.fire(`step`)},_complete:function(){b(this._animId),this._inProgress=!1,this.fire(`end`)},_easeOut:function(e){return 1-(1-e)**this._easeOutPower}}),J=ue.extend({options:{crs:he,center:void 0,zoom:void 0,minZoom:void 0,maxZoom:void 0,layers:[],maxBounds:void 0,renderer:void 0,zoomAnimation:!0,zoomAnimationThreshold:4,fadeAnimation:!0,markerZoomAnimation:!0,transform3DLimit:8388608,zoomSnap:1,zoomDelta:1,trackResize:!0},initialize:function(e,n){n=m(this,n),this._handlers=[],this._layers={},this._zoomBoundLayers={},this._sizeChanged=!0,this._initContainer(e),this._initLayout(),this._onResize=a(this._onResize,this),this._initEvents(),n.maxBounds&&this.setMaxBounds(n.maxBounds),n.zoom!==void 0&&(this._zoom=this._limitZoom(n.zoom)),n.center&&n.zoom!==void 0&&this.setView(k(n.center),n.zoom,{reset:!0}),this.callInitHooks(),this._zoomAnimated=xt&&P.any3d&&!P.mobileOpera&&this.options.zoomAnimation,this._zoomAnimated&&(this._createAnimProxy(),W(this._proxy,St,this._catchTransitionEnd,this)),this._addLayers(this.options.layers)},setView:function(e,n,i){return n=n===void 0?this._zoom:this._limitZoom(n),e=this._limitCenter(k(e),n,this.options.maxBounds),i||={},this._stop(),this._loaded&&!i.reset&&i!==!0&&(i.animate!==void 0&&(i.zoom=r({animate:i.animate},i.zoom),i.pan=r({animate:i.animate,duration:i.duration},i.pan)),this._zoom===n?this._tryAnimatedPan(e,i.pan):this._tryAnimatedZoom&&this._tryAnimatedZoom(e,n,i.zoom))?(clearTimeout(this._sizeTimer),this):(this._resetView(e,n,i.pan&&i.pan.noMoveStart),this)},setZoom:function(e,n){return this._loaded?this.setView(this.getCenter(),e,{zoom:n}):(this._zoom=e,this)},zoomIn:function(e,n){return e||=P.any3d?this.options.zoomDelta:1,this.setZoom(this._zoom+e,n)},zoomOut:function(e,n){return e||=P.any3d?this.options.zoomDelta:1,this.setZoom(this._zoom-e,n)},setZoomAround:function(e,n,r){var i=this.getZoomScale(n),a=this.getSize().divideBy(2),o=(e instanceof S?e:this.latLngToContainerPoint(e)).subtract(a).multiplyBy(1-1/i),s=this.containerPointToLatLng(a.add(o));return this.setView(s,n,{zoom:r})},_getBoundsCenterZoom:function(e,n){n||={},e=e.getBounds?e.getBounds():D(e);var r=C(n.paddingTopLeft||n.padding||[0,0]),i=C(n.paddingBottomRight||n.padding||[0,0]),a=this.getBoundsZoom(e,!1,r.add(i));if(a=typeof n.maxZoom==`number`?Math.min(n.maxZoom,a):a,a===1/0)return{center:e.getCenter(),zoom:a};var o=i.subtract(r).divideBy(2),s=this.project(e.getSouthWest(),a),c=this.project(e.getNorthEast(),a);return{center:this.unproject(s.add(c).divideBy(2).add(o),a),zoom:a}},fitBounds:function(e,n){if(e=D(e),!e.isValid())throw Error(`Bounds are not valid.`);var r=this._getBoundsCenterZoom(e,n);return this.setView(r.center,r.zoom,n)},fitWorld:function(e){return this.fitBounds([[-90,-180],[90,180]],e)},panTo:function(e,n){return this.setView(e,this._zoom,{pan:n})},panBy:function(e,n){if(e=C(e).round(),n||={},!e.x&&!e.y)return this.fire(`moveend`);if(n.animate!==!0&&!this.getSize().contains(e))return this._resetView(this.unproject(this.project(this.getCenter()).add(e)),this.getZoom()),this;if(this._panAnim||(this._panAnim=new ln,this._panAnim.on({step:this._onPanTransitionStep,end:this._onPanTransitionEnd},this)),n.noMoveStart||this.fire(`movestart`),n.animate!==!1){B(this._mapPane,`leaflet-pan-anim`);var r=this._getMapPanePos().subtract(e).round();this._panAnim.run(this._mapPane,r,n.duration||.25,n.easeLinearity)}else this._rawPanBy(e),this.fire(`move`).fire(`moveend`);return this},flyTo:function(e,n,r){if(r||={},r.animate===!1||!P.any3d)return this.setView(e,n,r);this._stop();var i=this.project(this.getCenter()),a=this.project(e),o=this.getSize(),s=this._zoom;e=k(e),n=n===void 0?s:n;var c=Math.max(o.x,o.y),l=c*this.getZoomScale(s,n),u=a.distanceTo(i)||1,d=1.42,f=d*d;function p(e){var n=e?-1:1,r=e?l:c,i=(l*l-c*c+n*f*f*u*u)/(2*r*f*u),a=Math.sqrt(i*i+1)-i;return a<1e-9?-18:Math.log(a)}function m(e){return(Math.exp(e)-Math.exp(-e))/2}function h(e){return(Math.exp(e)+Math.exp(-e))/2}function g(e){return m(e)/h(e)}var _=p(0);function v(e){return c*(h(_)/h(_+d*e))}function ee(e){return c*(h(_)*g(_+d*e)-m(_))/f}function te(e){return 1-(1-e)**1.5}var ne=Date.now(),re=(p(1)-_)/d,ie=r.duration?1e3*r.duration:1e3*re*.8;function ae(){var r=(Date.now()-ne)/ie,o=te(r)*re;r<=1?(this._flyToFrame=y(ae,this),this._move(this.unproject(i.add(a.subtract(i).multiplyBy(ee(o)/u)),s),this.getScaleZoom(c/v(o),s),{flyTo:!0})):this._move(e,n)._moveEnd(!0)}return this._moveStart(!0,r.noMoveStart),ae.call(this),this},flyToBounds:function(e,n){var r=this._getBoundsCenterZoom(e,n);return this.flyTo(r.center,r.zoom,n)},setMaxBounds:function(e){return e=D(e),this.listens(`moveend`,this._panInsideMaxBounds)&&this.off(`moveend`,this._panInsideMaxBounds),e.isValid()?(this.options.maxBounds=e,this._loaded&&this._panInsideMaxBounds(),this.on(`moveend`,this._panInsideMaxBounds)):(this.options.maxBounds=null,this)},setMinZoom:function(e){var n=this.options.minZoom;return this.options.minZoom=e,this._loaded&&n!==e&&(this.fire(`zoomlevelschange`),this.getZoom()<this.options.minZoom)?this.setZoom(e):this},setMaxZoom:function(e){var n=this.options.maxZoom;return this.options.maxZoom=e,this._loaded&&n!==e&&(this.fire(`zoomlevelschange`),this.getZoom()>this.options.maxZoom)?this.setZoom(e):this},panInsideBounds:function(e,n){this._enforcingBounds=!0;var r=this.getCenter(),i=this._limitCenter(r,this._zoom,D(e));return r.equals(i)||this.panTo(i,n),this._enforcingBounds=!1,this},panInside:function(e,n){n||={};var r=C(n.paddingTopLeft||n.padding||[0,0]),i=C(n.paddingBottomRight||n.padding||[0,0]),a=this.project(this.getCenter()),o=this.project(e),s=this.getPixelBounds(),c=T([s.min.add(r),s.max.subtract(i)]),l=c.getSize();if(!c.contains(o)){this._enforcingBounds=!0;var u=o.subtract(c.getCenter()),d=c.extend(o).getSize().subtract(l);a.x+=u.x<0?-d.x:d.x,a.y+=u.y<0?-d.y:d.y,this.panTo(this.unproject(a),n),this._enforcingBounds=!1}return this},invalidateSize:function(e){if(!this._loaded)return this;e=r({animate:!1,pan:!0},e===!0?{animate:!0}:e);var n=this.getSize();this._sizeChanged=!0,this._lastCenter=null;var i=this.getSize(),o=n.divideBy(2).round(),s=i.divideBy(2).round(),c=o.subtract(s);return!c.x&&!c.y?this:(e.animate&&e.pan?this.panBy(c):(e.pan&&this._rawPanBy(c),this.fire(`move`),e.debounceMoveend?(clearTimeout(this._sizeTimer),this._sizeTimer=setTimeout(a(this.fire,this,`moveend`),200)):this.fire(`moveend`)),this.fire(`resize`,{oldSize:n,newSize:i}))},stop:function(){return this.setZoom(this._limitZoom(this._zoom)),this.options.zoomSnap||this.fire(`viewreset`),this._stop()},locate:function(e){if(e=this._locateOptions=r({timeout:1e4,watch:!1},e),!(`geolocation`in navigator))return this._handleGeolocationError({code:0,message:`Geolocation not supported.`}),this;var n=a(this._handleGeolocationResponse,this),i=a(this._handleGeolocationError,this);return e.watch?this._locationWatchId=navigator.geolocation.watchPosition(n,i,e):navigator.geolocation.getCurrentPosition(n,i,e),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch&&navigator.geolocation.clearWatch(this._locationWatchId),this._locateOptions&&(this._locateOptions.setView=!1),this},_handleGeolocationError:function(e){if(this._container._leaflet_id){var n=e.code,r=e.message||(n===1?`permission denied`:n===2?`position unavailable`:`timeout`);this._locateOptions.setView&&!this._loaded&&this.fitWorld(),this.fire(`locationerror`,{code:n,message:`Geolocation error: `+r+`.`})}},_handleGeolocationResponse:function(e){if(this._container._leaflet_id){var n=e.coords.latitude,r=e.coords.longitude,i=new O(n,r),a=i.toBounds(e.coords.accuracy*2),o=this._locateOptions;if(o.setView){var s=this.getBoundsZoom(a);this.setView(i,o.maxZoom?Math.min(s,o.maxZoom):s)}var c={latlng:i,bounds:a,timestamp:e.timestamp};for(var l in e.coords)typeof e.coords[l]==`number`&&(c[l]=e.coords[l]);this.fire(`locationfound`,c)}},addHandler:function(e,n){if(!n)return this;var r=this[e]=new n(this);return this._handlers.push(r),this.options[e]&&r.enable(),this},remove:function(){if(this._initEvents(!0),this.options.maxBounds&&this.off(`moveend`,this._panInsideMaxBounds),this._containerId!==this._container._leaflet_id)throw 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}for(var e in this._locationWatchId!==void 0&&this.stopLocate(),this._stop(),z(this._mapPane),this._clearControlPos&&this._clearControlPos(),this._resizeRequest&&=(b(this._resizeRequest),null),this._clearHandlers(),this._loaded&&this.fire(`unload`),this._layers)this._layers[e].remove();for(e in this._panes)z(this._panes[e]);return this._layers=[],this._panes=[],delete this._mapPane,delete this._renderer,this},createPane:function(e,n){var r=R(`div`,`leaflet-pane`+(e?` leaflet-`+e.replace(`Pane`,``)+`-pane`:``),n||this._mapPane);return e&&(this._panes[e]=r),r},getCenter:function(){return this._checkIfLoaded(),this._lastCenter&&!this._moved()?this._lastCenter.clone():this.layerPointToLatLng(this._getCenterLayerPoint())},getZoom:function(){return this._zoom},getBounds:function(){var e=this.getPixelBounds();return new E(this.unproject(e.getBottomLeft()),this.unproject(e.getTopRight()))},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(e,n,r){e=D(e),r=C(r||[0,0]);var i=this.getZoom()||0,a=this.getMinZoom(),o=this.getMaxZoom(),s=e.getNorthWest(),c=e.getSouthEast(),l=this.getSize().subtract(r),u=T(this.project(c,i),this.project(s,i)).getSize(),d=P.any3d?this.options.zoomSnap:1,f=l.x/u.x,p=l.y/u.y,m=n?Math.max(f,p):Math.min(f,p);return i=this.getScaleZoom(m,i),d&&(i=Math.round(i/(d/100))*(d/100),i=n?Math.ceil(i/d)*d:Math.floor(i/d)*d),Math.max(a,Math.min(o,i))},getSize:function(){return(!this._size||this._sizeChanged)&&(this._size=new S(this._container.clientWidth||0,this._container.clientHeight||0),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(e,n){var r=this._getTopLeftPoint(e,n);return new w(r,r.add(this.getSize()))},getPixelOrigin:function(){return this._checkIfLoaded(),this._pixelOrigin},getPixelWorldBounds:function(e){return this.options.crs.getProjectedBounds(e===void 0?this.getZoom():e)},getPane:function(e){return typeof e==`string`?this._panes[e]:e},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(e,n){var r=this.options.crs;return n=n===void 0?this._zoom:n,r.scale(e)/r.scale(n)},getScaleZoom:function(e,n){var r=this.options.crs;n=n===void 0?this._zoom:n;var i=r.zoom(e*r.scale(n));return isNaN(i)?1/0:i},project:function(e,n){return n=n===void 0?this._zoom:n,this.options.crs.latLngToPoint(k(e),n)},unproject:function(e,n){return n=n===void 0?this._zoom:n,this.options.crs.pointToLatLng(C(e),n)},layerPointToLatLng:function(e){var n=C(e).add(this.getPixelOrigin());return this.unproject(n)},latLngToLayerPoint:function(e){return this.project(k(e))._round()._subtract(this.getPixelOrigin())},wrapLatLng:function(e){return this.options.crs.wrapLatLng(k(e))},wrapLatLngBounds:function(e){return this.options.crs.wrapLatLngBounds(D(e))},distance:function(e,n){return this.options.crs.distance(k(e),k(n))},containerPointToLayerPoint:function(e){return C(e).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(e){return C(e).add(this._getMapPanePos())},containerPointToLatLng:function(e){var n=this.containerPointToLayerPoint(C(e));return this.layerPointToLatLng(n)},latLngToContainerPoint:function(e){return this.layerPointToContainerPoint(this.latLngToLayerPoint(k(e)))},mouseEventToContainerPoint:function(e){return rn(e,this._container)},mouseEventToLayerPoint:function(e){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(e))},mouseEventToLatLng:function(e){return this.layerPointToLatLng(this.mouseEventToLayerPoint(e))},_initContainer:function(e){var n=this._container=Ct(e);if(!n)throw Error(`Map container not found.`);if(n._leaflet_id)throw Error(`Map container is already initialized.`);W(n,`scroll`,this._onScroll,this),this._containerId=s(n)},_initLayout:function(){var e=this._container;this._fadeAnimated=this.options.fadeAnimation&&P.any3d,B(e,`leaflet-container`+(P.touch?` leaflet-touch`:``)+(P.retina?` leaflet-retina`:``)+(P.ielt9?` leaflet-oldie`:``)+(P.safari?` leaflet-safari`:``)+(this._fadeAnimated?` leaflet-fade-anim`:``));var n=wt(e,`position`);n!==`absolute`&&n!==`relative`&&n!==`fixed`&&n!==`sticky`&&(e.style.position=`relative`),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var e=this._panes={};this._paneRenderers={},this._mapPane=this.createPane(`mapPane`,this._container),U(this._mapPane,new S(0,0)),this.createPane(`tilePane`),this.createPane(`overlayPane`),this.createPane(`shadowPane`),this.createPane(`markerPane`),this.createPane(`tooltipPane`),this.createPane(`popupPane`),this.options.markerZoomAnimation||(B(e.markerPane,`leaflet-zoom-hide`),B(e.shadowPane,`leaflet-zoom-hide`))},_resetView:function(e,n,r){U(this._mapPane,new S(0,0));var i=!this._loaded;this._loaded=!0,n=this._limitZoom(n),this.fire(`viewprereset`);var a=this._zoom!==n;this._moveStart(a,r)._move(e,n)._moveEnd(a),this.fire(`viewreset`),i&&this.fire(`load`)},_moveStart:function(e,n){return e&&this.fire(`zoomstart`),n||this.fire(`movestart`),this},_move:function(e,n,r,i){n===void 0&&(n=this._zoom);var a=this._zoom!==n;return this._zoom=n,this._lastCenter=e,this._pixelOrigin=this._getNewPixelOrigin(e),i?r&&r.pinch&&this.fire(`zoom`,r):((a||r&&r.pinch)&&this.fire(`zoom`,r),this.fire(`move`,r)),this},_moveEnd:function(e){return e&&this.fire(`zoomend`),this.fire(`moveend`)},_stop:function(){return b(this._flyToFrame),this._panAnim&&this._panAnim.stop(),this},_rawPanBy:function(e){U(this._mapPane,this._getMapPanePos().subtract(e))},_getZoomSpan:function(){return this.getMaxZoom()-this.getMinZoom()},_panInsideMaxBounds:function(){this._enforcingBounds||this.panInsideBounds(this.options.maxBounds)},_checkIfLoaded:function(){if(!this._loaded)throw Error(`Set map center and zoom first.`)},_initEvents:function(e){this._targets={},this._targets[s(this._container)]=this;var n=e?K:W;n(this._container,`click dblclick mousedown mouseup mouseover mouseout mousemove contextmenu keypress keydown keyup`,this._handleDOMEvent,this),this.options.trackResize&&n(window,`resize`,this._onResize,this),P.any3d&&this.options.transform3DLimit&&(e?this.off:this.on).call(this,`moveend`,this._onMoveEnd)},_onResize:function(){b(this._resizeRequest),this._resizeRequest=y(function(){this.invalidateSize({debounceMoveend:!0})},this)},_onScroll:function(){this._container.scrollTop=0,this._container.scrollLeft=0},_onMoveEnd:function(){var e=this._getMapPanePos();Math.max(Math.abs(e.x),Math.abs(e.y))>=this.options.transform3DLimit&&this._resetView(this.getCenter(),this.getZoom())},_findEventTargets:function(e,n){for(var r=[],i,a=n===`mouseout`||n===`mouseover`,o=e.target||e.srcElement,c=!1;o;){if(i=this._targets[s(o)],i&&(n===`click`||n===`preclick`)&&this._draggableMoved(i)){c=!0;break}if(i&&i.listens(n,!0)&&(a&&!sn(o,e)||(r.push(i),a))||o===this._container)break;o=o.parentNode}return!r.length&&!c&&!a&&this.listens(n,!0)&&(r=[this]),r},_isClickDisabled:function(e){for(;e&&e!==this._container;){if(e._leaflet_disable_click)return!0;e=e.parentNode}},_handleDOMEvent:function(e){var n=e.target||e.srcElement;if(!(!this._loaded||n._leaflet_disable_events||e.type===`click`&&this._isClickDisabled(n))){var r=e.type;r===`mousedown`&&Ut(n),this._fireDOMEvent(e,r)}},_mouseEvents:[`click`,`dblclick`,`mouseover`,`mouseout`,`contextmenu`],_fireDOMEvent:function(e,n,i){if(e.type===`click`){var a=r({},e);a.type=`preclick`,this._fireDOMEvent(a,a.type,i)}var o=this._findEventTargets(e,n);if(i){for(var s=[],c=0;c<i.length;c++)i[c].listens(n,!0)&&s.push(i[c]);o=s.concat(o)}if(o.length){n===`contextmenu`&&q(e);var l=o[0],u={originalEvent:e};if(e.type!==`keypress`&&e.type!==`keydown`&&e.type!==`keyup`){var d=l.getLatLng&&(!l._radius||l._radius<=10);u.containerPoint=d?this.latLngToContainerPoint(l.getLatLng()):this.mouseEventToContainerPoint(e),u.layerPoint=this.containerPointToLayerPoint(u.containerPoint),u.latlng=d?l.getLatLng():this.layerPointToLatLng(u.layerPoint)}for(c=0;c<o.length;c++)if(o[c].fire(n,u,!0),u.originalEvent._stopped||o[c].options.bubblingMouseEvents===!1&&ee(this._mouseEvents,n)!==-1)return}},_draggableMoved:function(e){return e=e.dragging&&e.dragging.enabled()?e:this,e.dragging&&e.dragging.moved()||this.boxZoom&&this.boxZoom.moved()},_clearHandlers:function(){for(var e=0,n=this._handlers.length;e<n;e++)this._handlers[e].disable()},whenReady:function(e,n){return this._loaded?e.call(n||this,{target:this}):this.on(`load`,e,n),this},_getMapPanePos:function(){return Pt(this._mapPane)||new S(0,0)},_moved:function(){var e=this._getMapPanePos();return e&&!e.equals([0,0])},_getTopLeftPoint:function(e,n){return(e&&n!==void 0?this._getNewPixelOrigin(e,n):this.getPixelOrigin()).subtract(this._getMapPanePos())},_getNewPixelOrigin:function(e,n){var r=this.getSize()._divideBy(2);return this.project(e,n)._subtract(r)._add(this._getMapPanePos())._round()},_latLngToNewLayerPoint:function(e,n,r){var i=this._getNewPixelOrigin(r,n);return this.project(e,n)._subtract(i)},_latLngBoundsToNewLayerBounds:function(e,n,r){var i=this._getNewPixelOrigin(r,n);return T([this.project(e.getSouthWest(),n)._subtract(i),this.project(e.getNorthWest(),n)._subtract(i),this.project(e.getSouthEast(),n)._subtract(i),this.project(e.getNorthEast(),n)._subtract(i)])},_getCenterLayerPoint:function(){return this.containerPointToLayerPoint(this.getSize()._divideBy(2))},_getCenterOffset:function(e){return this.latLngToLayerPoint(e).subtract(this._getCenterLayerPoint())},_limitCenter:function(e,n,r){if(!r)return e;var i=this.project(e,n),a=this.getSize().divideBy(2),o=new w(i.subtract(a),i.add(a)),s=this._getBoundsOffset(o,r,n);return Math.abs(s.x)<=1&&Math.abs(s.y)<=1?e:this.unproject(i.add(s),n)},_limitOffset:function(e,n){if(!n)return e;var r=this.getPixelBounds(),i=new w(r.min.add(e),r.max.add(e));return e.add(this._getBoundsOffset(i,n))},_getBoundsOffset:function(e,n,r){var i=T(this.project(n.getNorthEast(),r),this.project(n.getSouthWest(),r)),a=i.min.subtract(e.min),o=i.max.subtract(e.max);return new S(this._rebound(a.x,-o.x),this._rebound(a.y,-o.y))},_rebound:function(e,n){return e+n>0?Math.round(e-n)/2:Math.max(0,Math.ceil(e))-Math.max(0,Math.floor(n))},_limitZoom:function(e){var n=this.getMinZoom(),r=this.getMaxZoom(),i=P.any3d?this.options.zoomSnap:1;return i&&(e=Math.round(e/i)*i),Math.max(n,Math.min(r,e))},_onPanTransitionStep:function(){this.fire(`move`)},_onPanTransitionEnd:function(){V(this._mapPane,`leaflet-pan-anim`),this.fire(`moveend`)},_tryAnimatedPan:function(e,n){var r=this._getCenterOffset(e)._trunc();return(n&&n.animate)!==!0&&!this.getSize().contains(r)?!1:(this.panBy(r,n),!0)},_createAnimProxy:function(){var e=this._proxy=R(`div`,`leaflet-proxy leaflet-zoom-animated`);this._panes.mapPane.appendChild(e),this.on(`zoomanim`,function(e){var n=bt,r=this._proxy.style[n];Nt(this._proxy,this.project(e.center,e.zoom),this.getZoomScale(e.zoom,1)),r===this._proxy.style[n]&&this._animatingZoom&&this._onZoomTransitionEnd()},this),this.on(`load moveend`,this._animMoveEnd,this),this._on(`unload`,this._destroyAnimProxy,this)},_destroyAnimProxy:function(){z(this._proxy),this.off(`load moveend`,this._animMoveEnd,this),delete this._proxy},_animMoveEnd:function(){var e=this.getCenter(),n=this.getZoom();Nt(this._proxy,this.project(e,n),this.getZoomScale(n,1))},_catchTransitionEnd:function(e){this._animatingZoom&&e.propertyName.indexOf(`transform`)>=0&&this._onZoomTransitionEnd()},_nothingToAnimate:function(){return!this._container.getElementsByClassName(`leaflet-zoom-animated`).length},_tryAnimatedZoom:function(e,n,r){if(this._animatingZoom)return!0;if(r||={},!this._zoomAnimated||r.animate===!1||this._nothingToAnimate()||Math.abs(n-this._zoom)>this.options.zoomAnimationThreshold)return!1;var i=this.getZoomScale(n),a=this._getCenterOffset(e)._divideBy(1-1/i);return r.animate!==!0&&!this.getSize().contains(a)?!1:(y(function(){this._moveStart(!0,r.noMoveStart||!1)._animateZoom(e,n,!0)},this),!0)},_animateZoom:function(e,n,r,i){this._mapPane&&(r&&(this._animatingZoom=!0,this._animateToCenter=e,this._animateToZoom=n,B(this._mapPane,`leaflet-zoom-anim`)),this.fire(`zoomanim`,{center:e,zoom:n,noUpdate:i}),this._tempFireZoomEvent||=this._zoom!==this._animateToZoom,this._move(this._animateToCenter,this._animateToZoom,void 0,!0),setTimeout(a(this._onZoomTransitionEnd,this),250))},_onZoomTransitionEnd:function(){this._animatingZoom&&(this._mapPane&&V(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 un(e,n){return new J(e,n)}var Y=ce.extend({options:{position:`topright`},initialize:function(e){m(this,e)},getPosition:function(){return this.options.position},setPosition:function(e){var n=this._map;return n&&n.removeControl(this),this.options.position=e,n&&n.addControl(this),this},getContainer:function(){return this._container},addTo:function(e){this.remove(),this._map=e;var n=this._container=this.onAdd(e),r=this.getPosition(),i=e._controlCorners[r];return B(n,`leaflet-control`),r.indexOf(`bottom`)===-1?i.appendChild(n):i.insertBefore(n,i.firstChild),this._map.on(`unload`,this.remove,this),this},remove:function(){return this._map?(z(this._container),this.onRemove&&this.onRemove(this._map),this._map.off(`unload`,this.remove,this),this._map=null,this):this},_refocusOnMap:function(e){this._map&&e&&e.screenX>0&&e.screenY>0&&this._map.getContainer().focus()}}),dn=function(e){return new Y(e)};J.include({addControl:function(e){return e.addTo(this),this},removeControl:function(e){return e.remove(),this},_initControlPos:function(){var e=this._controlCorners={},n=`leaflet-`,r=this._controlContainer=R(`div`,n+`control-container`,this._container);function i(i,a){var o=n+i+` `+n+a;e[i+a]=R(`div`,o,r)}i(`top`,`left`),i(`top`,`right`),i(`bottom`,`left`),i(`bottom`,`right`)},_clearControlPos:function(){for(var e in this._controlCorners)z(this._controlCorners[e]);z(this._controlContainer),delete this._controlCorners,delete this._controlContainer}});var fn=Y.extend({options:{collapsed:!0,position:`topright`,autoZIndex:!0,hideSingleBase:!1,sortLayers:!1,sortFunction:function(e,n,r,i){return r<i?-1:+(i<r)}},initialize:function(e,n,r){for(var i in m(this,r),this._layerControlInputs=[],this._layers=[],this._lastZIndex=0,this._handlingClick=!1,this._preventClick=!1,e)this._addLayer(e[i],i);for(i in n)this._addLayer(n[i],i,!0)},onAdd:function(e){this._initLayout(),this._update(),this._map=e,e.on(`zoomend`,this._checkDisabledLayers,this);for(var n=0;n<this._layers.length;n++)this._layers[n].layer.on(`add remove`,this._onLayerChange,this);return this._container},addTo:function(e){return Y.prototype.addTo.call(this,e),this._expandIfNotCollapsed()},onRemove:function(){this._map.off(`zoomend`,this._checkDisabledLayers,this);for(var e=0;e<this._layers.length;e++)this._layers[e].layer.off(`add remove`,this._onLayerChange,this)},addBaseLayer:function(e,n){return this._addLayer(e,n),this._map?this._update():this},addOverlay:function(e,n){return this._addLayer(e,n,!0),this._map?this._update():this},removeLayer:function(e){e.off(`add remove`,this._onLayerChange,this);var n=this._getLayer(s(e));return n&&this._layers.splice(this._layers.indexOf(n),1),this._map?this._update():this},expand:function(){B(this._container,`leaflet-control-layers-expanded`),this._section.style.height=null;var e=this._map.getSize().y-(this._container.offsetTop+50);return e<this._section.clientHeight?(B(this._section,`leaflet-control-layers-scrollbar`),this._section.style.height=e+`px`):V(this._section,`leaflet-control-layers-scrollbar`),this._checkDisabledLayers(),this},collapse:function(){return V(this._container,`leaflet-control-layers-expanded`),this},_initLayout:function(){var e=`leaflet-control-layers`,n=this._container=R(`div`,e),r=this.options.collapsed;n.setAttribute(`aria-haspopup`,!0),en(n),$t(n);var i=this._section=R(`section`,e+`-list`);r&&(this._map.on(`click`,this.collapse,this),W(n,{mouseenter:this._expandSafely,mouseleave:this.collapse},this));var a=this._layersLink=R(`a`,e+`-toggle`,n);a.href=`#`,a.title=`Layers`,a.setAttribute(`role`,`button`),W(a,{keydown:function(e){e.keyCode===13&&this._expandSafely()},click:function(e){q(e),this._expandSafely()}},this),r||this.expand(),this._baseLayersList=R(`div`,e+`-base`,i),this._separator=R(`div`,e+`-separator`,i),this._overlaysList=R(`div`,e+`-overlays`,i),n.appendChild(i)},_getLayer:function(e){for(var n=0;n<this._layers.length;n++)if(this._layers[n]&&s(this._layers[n].layer)===e)return this._layers[n]},_addLayer:function(e,n,r){this._map&&e.on(`add remove`,this._onLayerChange,this),this._layers.push({layer:e,name:n,overlay:r}),this.options.sortLayers&&this._layers.sort(a(function(e,n){return this.options.sortFunction(e.layer,n.layer,e.name,n.name)},this)),this.options.autoZIndex&&e.setZIndex&&(this._lastZIndex++,e.setZIndex(this._lastZIndex)),this._expandIfNotCollapsed()},_update:function(){if(!this._container)return this;Tt(this._baseLayersList),Tt(this._overlaysList),this._layerControlInputs=[];var e,n,r,i,a=0;for(r=0;r<this._layers.length;r++)i=this._layers[r],this._addItem(i),n||=i.overlay,e||=!i.overlay,a+=+!i.overlay;return this.options.hideSingleBase&&(e&&=a>1,this._baseLayersList.style.display=e?``:`none`),this._separator.style.display=n&&e?``:`none`,this},_onLayerChange:function(e){this._handlingClick||this._update();var n=this._getLayer(s(e.target)),r=n.overlay?e.type===`add`?`overlayadd`:`overlayremove`:e.type===`add`?`baselayerchange`:null;r&&this._map.fire(r,n)},_createRadioElement:function(e,n){var r=`<input type="radio" class="leaflet-control-layers-selector" name="`+e+`"`+(n?` checked="checked"`:``)+`/>`,i=document.createElement(`div`);return i.innerHTML=r,i.firstChild},_addItem:function(e){var n=document.createElement(`label`),r=this._map.hasLayer(e.layer),i;e.overlay?(i=document.createElement(`input`),i.type=`checkbox`,i.className=`leaflet-control-layers-selector`,i.defaultChecked=r):i=this._createRadioElement(`leaflet-base-layers_`+s(this),r),this._layerControlInputs.push(i),i.layerId=s(e.layer),W(i,`click`,this._onInputClick,this);var a=document.createElement(`span`);a.innerHTML=` `+e.name;var o=document.createElement(`span`);return n.appendChild(o),o.appendChild(i),o.appendChild(a),(e.overlay?this._overlaysList:this._baseLayersList).appendChild(n),this._checkDisabledLayers(),n},_onInputClick:function(){if(!this._preventClick){var e=this._layerControlInputs,n,r,i=[],a=[];this._handlingClick=!0;for(var o=e.length-1;o>=0;o--)n=e[o],r=this._getLayer(n.layerId).layer,n.checked?i.push(r):n.checked||a.push(r);for(o=0;o<a.length;o++)this._map.hasLayer(a[o])&&this._map.removeLayer(a[o]);for(o=0;o<i.length;o++)this._map.hasLayer(i[o])||this._map.addLayer(i[o]);this._handlingClick=!1,this._refocusOnMap()}},_checkDisabledLayers:function(){for(var e=this._layerControlInputs,n,r,i=this._map.getZoom(),a=e.length-1;a>=0;a--)n=e[a],r=this._getLayer(n.layerId).layer,n.disabled=r.options.minZoom!==void 0&&i<r.options.minZoom||r.options.maxZoom!==void 0&&i>r.options.maxZoom},_expandIfNotCollapsed:function(){return this._map&&!this.options.collapsed&&this.expand(),this},_expandSafely:function(){var e=this._section;this._preventClick=!0,W(e,`click`,q),this.expand();var n=this;setTimeout(function(){K(e,`click`,q),n._preventClick=!1})}}),pn=function(e,n,r){return new fn(e,n,r)},mn=Y.extend({options:{position:`topleft`,zoomInText:`<span aria-hidden="true">+</span>`,zoomInTitle:`Zoom in`,zoomOutText:`<span aria-hidden="true">&#x2212;</span>`,zoomOutTitle:`Zoom out`},onAdd:function(e){var n=`leaflet-control-zoom`,r=R(`div`,n+` leaflet-bar`),i=this.options;return this._zoomInButton=this._createButton(i.zoomInText,i.zoomInTitle,n+`-in`,r,this._zoomIn),this._zoomOutButton=this._createButton(i.zoomOutText,i.zoomOutTitle,n+`-out`,r,this._zoomOut),this._updateDisabled(),e.on(`zoomend zoomlevelschange`,this._updateDisabled,this),r},onRemove:function(e){e.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(e){!this._disabled&&this._map._zoom<this._map.getMaxZoom()&&this._map.zoomIn(this._map.options.zoomDelta*(e.shiftKey?3:1))},_zoomOut:function(e){!this._disabled&&this._map._zoom>this._map.getMinZoom()&&this._map.zoomOut(this._map.options.zoomDelta*(e.shiftKey?3:1))},_createButton:function(e,n,r,i,a){var o=R(`a`,r,i);return o.innerHTML=e,o.href=`#`,o.title=n,o.setAttribute(`role`,`button`),o.setAttribute(`aria-label`,n),en(o),W(o,`click`,tn),W(o,`click`,a,this),W(o,`click`,this._refocusOnMap,this),o},_updateDisabled:function(){var e=this._map,n=`leaflet-disabled`;V(this._zoomInButton,n),V(this._zoomOutButton,n),this._zoomInButton.setAttribute(`aria-disabled`,`false`),this._zoomOutButton.setAttribute(`aria-disabled`,`false`),(this._disabled||e._zoom===e.getMinZoom())&&(B(this._zoomOutButton,n),this._zoomOutButton.setAttribute(`aria-disabled`,`true`)),(this._disabled||e._zoom===e.getMaxZoom())&&(B(this._zoomInButton,n),this._zoomInButton.setAttribute(`aria-disabled`,`true`))}});J.mergeOptions({zoomControl:!0}),J.addInitHook(function(){this.options.zoomControl&&(this.zoomControl=new mn,this.addControl(this.zoomControl))});var hn=function(e){return new mn(e)},gn=Y.extend({options:{position:`bottomleft`,maxWidth:100,metric:!0,imperial:!0},onAdd:function(e){var n=`leaflet-control-scale`,r=R(`div`,n),i=this.options;return this._addScales(i,n+`-line`,r),e.on(i.updateWhenIdle?`moveend`:`move`,this._update,this),e.whenReady(this._update,this),r},onRemove:function(e){e.off(this.options.updateWhenIdle?`moveend`:`move`,this._update,this)},_addScales:function(e,n,r){e.metric&&(this._mScale=R(`div`,n,r)),e.imperial&&(this._iScale=R(`div`,n,r))},_update:function(){var e=this._map,n=e.getSize().y/2,r=e.distance(e.containerPointToLatLng([0,n]),e.containerPointToLatLng([this.options.maxWidth,n]));this._updateScales(r)},_updateScales:function(e){this.options.metric&&e&&this._updateMetric(e),this.options.imperial&&e&&this._updateImperial(e)},_updateMetric:function(e){var n=this._getRoundNum(e),r=n<1e3?n+` m`:n/1e3+` km`;this._updateScale(this._mScale,r,n/e)},_updateImperial:function(e){var n=e*3.2808399,r,i,a;n>5280?(r=n/5280,i=this._getRoundNum(r),this._updateScale(this._iScale,i+` mi`,i/r)):(a=this._getRoundNum(n),this._updateScale(this._iScale,a+` ft`,a/n))},_updateScale:function(e,n,r){e.style.width=Math.round(this.options.maxWidth*r)+`px`,e.innerHTML=n},_getRoundNum:function(e){var n=10**((Math.floor(e)+``).length-1),r=e/n;return r=r>=10?10:r>=5?5:r>=3?3:r>=2?2:1,n*r}}),_n=function(e){return new gn(e)},vn=Y.extend({options:{position:`bottomright`,prefix:`<a href="https://leafletjs.com" title="A JavaScript library for interactive maps">`+(P.inlineSvg?`<svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="12" height="8" viewBox="0 0 12 8" class="leaflet-attribution-flag"><path fill="#4C7BE1" d="M0 0h12v4H0z"/><path fill="#FFD500" d="M0 4h12v3H0z"/><path fill="#E0BC00" d="M0 7h12v1H0z"/></svg> `:``)+`Leaflet</a>`},initialize:function(e){m(this,e),this._attributions={}},onAdd:function(e){for(var n in e.attributionControl=this,this._container=R(`div`,`leaflet-control-attribution`),en(this._container),e._layers)e._layers[n].getAttribution&&this.addAttribution(e._layers[n].getAttribution());return this._update(),e.on(`layeradd`,this._addAttribution,this),this._container},onRemove:function(e){e.off(`layeradd`,this._addAttribution,this)},_addAttribution:function(e){e.layer.getAttribution&&(this.addAttribution(e.layer.getAttribution()),e.layer.once(`remove`,function(){this.removeAttribution(e.layer.getAttribution())},this))},setPrefix:function(e){return this.options.prefix=e,this._update(),this},addAttribution:function(e){return e?(this._attributions[e]||(this._attributions[e]=0),this._attributions[e]++,this._update(),this):this},removeAttribution:function(e){return e&&this._attributions[e]&&(this._attributions[e]--,this._update()),this},_update:function(){if(this._map){var e=[];for(var n in this._attributions)this._attributions[n]&&e.push(n);var r=[];this.options.prefix&&r.push(this.options.prefix),e.length&&r.push(e.join(`, `)),this._container.innerHTML=r.join(` <span aria-hidden="true">|</span> `)}}});J.mergeOptions({attributionControl:!0}),J.addInitHook(function(){this.options.attributionControl&&new vn().addTo(this)}),Y.Layers=fn,Y.Zoom=mn,Y.Scale=gn,Y.Attribution=vn,dn.layers=pn,dn.zoom=hn,dn.scale=_n,dn.attribution=function(e){return new vn(e)};var X=ce.extend({initialize:function(e){this._map=e},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}});X.addTo=function(e,n){return e.addHandler(n,this),this};var yn={Events:x},bn=P.touch?`touchstart mousedown`:`mousedown`,xn=ue.extend({options:{clickTolerance:3},initialize:function(e,n,r,i){m(this,i),this._element=e,this._dragStartTarget=n||e,this._preventOutline=r},enable:function(){this._enabled||=(W(this._dragStartTarget,bn,this._onDown,this),!0)},disable:function(){this._enabled&&(xn._dragging===this&&this.finishDrag(!0),K(this._dragStartTarget,bn,this._onDown,this),this._enabled=!1,this._moved=!1)},_onDown:function(e){if(this._enabled&&(this._moved=!1,!Ot(this._element,`leaflet-zoom-anim`))){if(e.touches&&e.touches.length!==1){xn._dragging===this&&this.finishDrag();return}if(!(xn._dragging||e.shiftKey||e.which!==1&&e.button!==1&&!e.touches)&&(xn._dragging=this,this._preventOutline&&Ut(this._element),zt(),Ft(),!this._moving)){this.fire(`down`);var n=e.touches?e.touches[0]:e,r=Gt(this._element);this._startPoint=new S(n.clientX,n.clientY),this._startPos=Pt(this._element),this._parentScale=Kt(r);var i=e.type===`mousedown`;W(document,i?`mousemove`:`touchmove`,this._onMove,this),W(document,i?`mouseup`:`touchend touchcancel`,this._onUp,this)}}},_onMove:function(e){if(this._enabled){if(e.touches&&e.touches.length>1){this._moved=!0;return}var n=e.touches&&e.touches.length===1?e.touches[0]:e,r=new S(n.clientX,n.clientY)._subtract(this._startPoint);!r.x&&!r.y||Math.abs(r.x)+Math.abs(r.y)<this.options.clickTolerance||(r.x/=this._parentScale.x,r.y/=this._parentScale.y,q(e),this._moved||(this.fire(`dragstart`),this._moved=!0,B(document.body,`leaflet-dragging`),this._lastTarget=e.target||e.srcElement,window.SVGElementInstance&&this._lastTarget instanceof window.SVGElementInstance&&(this._lastTarget=this._lastTarget.correspondingUseElement),B(this._lastTarget,`leaflet-drag-target`)),this._newPos=this._startPos.add(r),this._moving=!0,this._lastEvent=e,this._updatePosition())}},_updatePosition:function(){var e={originalEvent:this._lastEvent};this.fire(`predrag`,e),U(this._element,this._newPos),this.fire(`drag`,e)},_onUp:function(){this._enabled&&this.finishDrag()},finishDrag:function(e){V(document.body,`leaflet-dragging`),this._lastTarget&&=(V(this._lastTarget,`leaflet-drag-target`),null),K(document,`mousemove touchmove`,this._onMove,this),K(document,`mouseup touchend touchcancel`,this._onUp,this),Bt(),It();var n=this._moved&&this._moving;this._moving=!1,xn._dragging=!1,n&&this.fire(`dragend`,{noInertia:e,distance:this._newPos.distanceTo(this._startPos)})}});function Sn(e,n,r){var i,a=[1,4,2,8],o,s,c,l,u,d,f,p;for(o=0,d=e.length;o<d;o++)e[o]._code=Fn(e[o],n);for(c=0;c<4;c++){for(f=a[c],i=[],o=0,d=e.length,s=d-1;o<d;s=o++)l=e[o],u=e[s],l._code&f?u._code&f||(p=Pn(u,l,f,n,r),p._code=Fn(p,n),i.push(p)):(u._code&f&&(p=Pn(u,l,f,n,r),p._code=Fn(p,n),i.push(p)),i.push(l));e=i}return e}function Cn(e,n){var r,i,a,o,s,c,l,u,d;if(!e||e.length===0)throw Error(`latlngs not passed`);Z(e)||(console.warn(`latlngs are not flat! Only the first ring will be used`),e=e[0]);var f=k([0,0]),p=D(e);p.getNorthWest().distanceTo(p.getSouthWest())*p.getNorthEast().distanceTo(p.getNorthWest())<1700&&(f=wn(e));var m=e.length,h=[];for(r=0;r<m;r++){var g=k(e[r]);h.push(n.project(k([g.lat-f.lat,g.lng-f.lng])))}for(c=l=u=0,r=0,i=m-1;r<m;i=r++)a=h[r],o=h[i],s=a.y*o.x-o.y*a.x,l+=(a.x+o.x)*s,u+=(a.y+o.y)*s,c+=s*3;d=c===0?h[0]:[l/c,u/c];var _=n.unproject(C(d));return k([_.lat+f.lat,_.lng+f.lng])}function wn(e){for(var n=0,r=0,i=0,a=0;a<e.length;a++){var o=k(e[a]);n+=o.lat,r+=o.lng,i++}return k([n/i,r/i])}var Tn={__proto__:null,clipPolygon:Sn,polygonCenter:Cn,centroid:wn};function En(e,n){if(!n||!e.length)return e.slice();var r=n*n;return e=jn(e,r),e=kn(e,r),e}function Dn(e,n,r){return Math.sqrt(Ln(e,n,r,!0))}function On(e,n,r){return Ln(e,n,r)}function kn(e,n){var r=e.length,i=new(typeof Uint8Array<`u`?Uint8Array:Array)(r);i[0]=i[r-1]=1,An(e,i,n,0,r-1);var a,o=[];for(a=0;a<r;a++)i[a]&&o.push(e[a]);return o}function An(e,n,r,i,a){var o=0,s,c,l;for(c=i+1;c<=a-1;c++)l=Ln(e[c],e[i],e[a],!0),l>o&&(s=c,o=l);o>r&&(n[s]=1,An(e,n,r,i,s),An(e,n,r,s,a))}function jn(e,n){for(var r=[e[0]],i=1,a=0,o=e.length;i<o;i++)In(e[i],e[a])>n&&(r.push(e[i]),a=i);return a<o-1&&r.push(e[o-1]),r}var Mn;function Nn(e,n,r,i,a){var o=i?Mn:Fn(e,r),s=Fn(n,r),c,l,u;for(Mn=s;;){if(!(o|s))return[e,n];if(o&s)return!1;c=o||s,l=Pn(e,n,c,r,a),u=Fn(l,r),c===o?(e=l,o=u):(n=l,s=u)}}function Pn(e,n,r,i,a){var o=n.x-e.x,s=n.y-e.y,c=i.min,l=i.max,u,d;return r&8?(u=e.x+o*(l.y-e.y)/s,d=l.y):r&4?(u=e.x+o*(c.y-e.y)/s,d=c.y):r&2?(u=l.x,d=e.y+s*(l.x-e.x)/o):r&1&&(u=c.x,d=e.y+s*(c.x-e.x)/o),new S(u,d,a)}function Fn(e,n){var r=0;return e.x<n.min.x?r|=1:e.x>n.max.x&&(r|=2),e.y<n.min.y?r|=4:e.y>n.max.y&&(r|=8),r}function In(e,n){var r=n.x-e.x,i=n.y-e.y;return r*r+i*i}function Ln(e,n,r,i){var a=n.x,o=n.y,s=r.x-a,c=r.y-o,l=s*s+c*c,u;return l>0&&(u=((e.x-a)*s+(e.y-o)*c)/l,u>1?(a=r.x,o=r.y):u>0&&(a+=s*u,o+=c*u)),s=e.x-a,c=e.y-o,i?s*s+c*c:new S(a,o)}function Z(e){return!v(e[0])||typeof e[0][0]!=`object`&&e[0][0]!==void 0}function Rn(e){return console.warn(`Deprecated use of _flat, please use L.LineUtil.isFlat instead.`),Z(e)}function zn(e,n){var r,i,a,o,s,c,l,u;if(!e||e.length===0)throw Error(`latlngs not passed`);Z(e)||(console.warn(`latlngs are not flat! Only the first ring will be used`),e=e[0]);var d=k([0,0]),f=D(e);f.getNorthWest().distanceTo(f.getSouthWest())*f.getNorthEast().distanceTo(f.getNorthWest())<1700&&(d=wn(e));var p=e.length,m=[];for(r=0;r<p;r++){var h=k(e[r]);m.push(n.project(k([h.lat-d.lat,h.lng-d.lng])))}for(r=0,i=0;r<p-1;r++)i+=m[r].distanceTo(m[r+1])/2;if(i===0)u=m[0];else for(r=0,o=0;r<p-1;r++)if(s=m[r],c=m[r+1],a=s.distanceTo(c),o+=a,o>i){l=(o-i)/a,u=[c.x-l*(c.x-s.x),c.y-l*(c.y-s.y)];break}var g=n.unproject(C(u));return k([g.lat+d.lat,g.lng+d.lng])}var Bn={__proto__:null,simplify:En,pointToSegmentDistance:Dn,closestPointOnSegment:On,clipSegment:Nn,_getEdgeIntersection:Pn,_getBitCode:Fn,_sqClosestPointOnSegment:Ln,isFlat:Z,_flat:Rn,polylineCenter:zn},Vn={project:function(e){return new S(e.lng,e.lat)},unproject:function(e){return new O(e.y,e.x)},bounds:new w([-180,-90],[180,90])},Hn={R:6378137,R_MINOR:6356752.314245179,bounds:new w([-20037508.34279,-15496570.73972],[20037508.34279,18764656.23138]),project:function(e){var n=Math.PI/180,r=this.R,i=e.lat*n,a=this.R_MINOR/r,o=Math.sqrt(1-a*a),s=o*Math.sin(i),c=Math.tan(Math.PI/4-i/2)/((1-s)/(1+s))**(o/2);return i=-r*Math.log(Math.max(c,1e-10)),new S(e.lng*n*r,i)},unproject:function(e){for(var n=180/Math.PI,r=this.R,i=this.R_MINOR/r,a=Math.sqrt(1-i*i),o=Math.exp(-e.y/r),s=Math.PI/2-2*Math.atan(o),c=0,l=.1,u;c<15&&Math.abs(l)>1e-7;c++)u=a*Math.sin(s),u=((1-u)/(1+u))**(a/2),l=Math.PI/2-2*Math.atan(o*u)-s,s+=l;return new O(s*n,e.x*n/r)}},Un={__proto__:null,LonLat:Vn,Mercator:Hn,SphericalMercator:j},Wn=r({},fe,{code:`EPSG:3395`,projection:Hn,transformation:function(){var e=.5/(Math.PI*Hn.R);return M(e,.5,-e,.5)}()}),Gn=r({},fe,{code:`EPSG:4326`,projection:Vn,transformation:M(1/180,1,-1/180,.5)}),Kn=r({},A,{projection:Vn,transformation:M(1,0,-1,0),scale:function(e){return 2**e},zoom:function(e){return Math.log(e)/Math.LN2},distance:function(e,n){var r=n.lng-e.lng,i=n.lat-e.lat;return Math.sqrt(r*r+i*i)},infinite:!0});A.Earth=fe,A.EPSG3395=Wn,A.EPSG3857=he,A.EPSG900913=ge,A.EPSG4326=Gn,A.Simple=Kn;var Q=ue.extend({options:{pane:`overlayPane`,attribution:null,bubblingMouseEvents:!0},addTo:function(e){return e.addLayer(this),this},remove:function(){return this.removeFrom(this._map||this._mapToAdd)},removeFrom:function(e){return e&&e.removeLayer(this),this},getPane:function(e){return this._map.getPane(e?this.options[e]||e:this.options.pane)},addInteractiveTarget:function(e){return this._map._targets[s(e)]=this,this},removeInteractiveTarget:function(e){return delete this._map._targets[s(e)],this},getAttribution:function(){return this.options.attribution},_layerAdd:function(e){var n=e.target;if(n.hasLayer(this)){if(this._map=n,this._zoomAnimated=n._zoomAnimated,this.getEvents){var r=this.getEvents();n.on(r,this),this.once(`remove`,function(){n.off(r,this)},this)}this.onAdd(n),this.fire(`add`),n.fire(`layeradd`,{layer:this})}}});J.include({addLayer:function(e){if(!e._layerAdd)throw Error(`The provided object is not a Layer.`);var n=s(e);return this._layers[n]?this:(this._layers[n]=e,e._mapToAdd=this,e.beforeAdd&&e.beforeAdd(this),this.whenReady(e._layerAdd,e),this)},removeLayer:function(e){var n=s(e);return this._layers[n]?(this._loaded&&e.onRemove(this),delete this._layers[n],this._loaded&&(this.fire(`layerremove`,{layer:e}),e.fire(`remove`)),e._map=e._mapToAdd=null,this):this},hasLayer:function(e){return s(e)in this._layers},eachLayer:function(e,n){for(var r in this._layers)e.call(n,this._layers[r]);return this},_addLayers:function(e){e=e?v(e)?e:[e]:[];for(var n=0,r=e.length;n<r;n++)this.addLayer(e[n])},_addZoomLimit:function(e){(!isNaN(e.options.maxZoom)||!isNaN(e.options.minZoom))&&(this._zoomBoundLayers[s(e)]=e,this._updateZoomLevels())},_removeZoomLimit:function(e){var n=s(e);this._zoomBoundLayers[n]&&(delete this._zoomBoundLayers[n],this._updateZoomLevels())},_updateZoomLevels:function(){var e=1/0,n=-1/0,r=this._getZoomSpan();for(var i in this._zoomBoundLayers){var a=this._zoomBoundLayers[i].options;e=a.minZoom===void 0?e:Math.min(e,a.minZoom),n=a.maxZoom===void 0?n:Math.max(n,a.maxZoom)}this._layersMaxZoom=n===-1/0?void 0:n,this._layersMinZoom=e===1/0?void 0:e,r!==this._getZoomSpan()&&this.fire(`zoomlevelschange`),this.options.maxZoom===void 0&&this._layersMaxZoom&&this.getZoom()>this._layersMaxZoom&&this.setZoom(this._layersMaxZoom),this.options.minZoom===void 0&&this._layersMinZoom&&this.getZoom()<this._layersMinZoom&&this.setZoom(this._layersMinZoom)}});var qn=Q.extend({initialize:function(e,n){m(this,n),this._layers={};var r,i;if(e)for(r=0,i=e.length;r<i;r++)this.addLayer(e[r])},addLayer:function(e){var n=this.getLayerId(e);return this._layers[n]=e,this._map&&this._map.addLayer(e),this},removeLayer:function(e){var n=e in this._layers?e:this.getLayerId(e);return this._map&&this._layers[n]&&this._map.removeLayer(this._layers[n]),delete this._layers[n],this},hasLayer:function(e){return(typeof e==`number`?e:this.getLayerId(e))in this._layers},clearLayers:function(){return this.eachLayer(this.removeLayer,this)},invoke:function(e){var n=Array.prototype.slice.call(arguments,1),r,i;for(r in this._layers)i=this._layers[r],i[e]&&i[e].apply(i,n);return this},onAdd:function(e){this.eachLayer(e.addLayer,e)},onRemove:function(e){this.eachLayer(e.removeLayer,e)},eachLayer:function(e,n){for(var r in this._layers)e.call(n,this._layers[r]);return this},getLayer:function(e){return this._layers[e]},getLayers:function(){var e=[];return this.eachLayer(e.push,e),e},setZIndex:function(e){return this.invoke(`setZIndex`,e)},getLayerId:function(e){return s(e)}}),Jn=function(e,n){return new qn(e,n)},Yn=qn.extend({addLayer:function(e){return this.hasLayer(e)?this:(e.addEventParent(this),qn.prototype.addLayer.call(this,e),this.fire(`layeradd`,{layer:e}))},removeLayer:function(e){return this.hasLayer(e)?(e in this._layers&&(e=this._layers[e]),e.removeEventParent(this),qn.prototype.removeLayer.call(this,e),this.fire(`layerremove`,{layer:e})):this},setStyle:function(e){return this.invoke(`setStyle`,e)},bringToFront:function(){return this.invoke(`bringToFront`)},bringToBack:function(){return this.invoke(`bringToBack`)},getBounds:function(){var e=new E;for(var n in this._layers){var r=this._layers[n];e.extend(r.getBounds?r.getBounds():r.getLatLng())}return e}}),Xn=function(e,n){return new Yn(e,n)},Zn=ce.extend({options:{popupAnchor:[0,0],tooltipAnchor:[0,0],crossOrigin:!1},initialize:function(e){m(this,e)},createIcon:function(e){return this._createIcon(`icon`,e)},createShadow:function(e){return this._createIcon(`shadow`,e)},_createIcon:function(e,n){var r=this._getIconUrl(e);if(!r){if(e===`icon`)throw Error(`iconUrl not set in Icon options (see the docs).`);return null}var i=this._createImg(r,n&&n.tagName===`IMG`?n:null);return this._setIconStyles(i,e),(this.options.crossOrigin||this.options.crossOrigin===``)&&(i.crossOrigin=this.options.crossOrigin===!0?``:this.options.crossOrigin),i},_setIconStyles:function(e,n){var r=this.options,i=r[n+`Size`];typeof i==`number`&&(i=[i,i]);var a=C(i),o=C(n===`shadow`&&r.shadowAnchor||r.iconAnchor||a&&a.divideBy(2,!0));e.className=`leaflet-marker-`+n+` `+(r.className||``),o&&(e.style.marginLeft=-o.x+`px`,e.style.marginTop=-o.y+`px`),a&&(e.style.width=a.x+`px`,e.style.height=a.y+`px`)},_createImg:function(e,n){return n||=document.createElement(`img`),n.src=e,n},_getIconUrl:function(e){return P.retina&&this.options[e+`RetinaUrl`]||this.options[e+`Url`]}});function Qn(e){return new Zn(e)}var $n=Zn.extend({options:{iconUrl:`marker-icon.png`,iconRetinaUrl:`marker-icon-2x.png`,shadowUrl:`marker-shadow.png`,iconSize:[25,41],iconAnchor:[12,41],popupAnchor:[1,-34],tooltipAnchor:[16,-28],shadowSize:[41,41]},_getIconUrl:function(e){return typeof $n.imagePath!=`string`&&($n.imagePath=this._detectIconPath()),(this.options.imagePath||$n.imagePath)+Zn.prototype._getIconUrl.call(this,e)},_stripUrl:function(e){var n=function(e,n,r){var i=n.exec(e);return i&&i[r]};return e=n(e,/^url\((['"])?(.+)\1\)$/,2),e&&n(e,/^(.*)marker-icon\.png$/,1)},_detectIconPath:function(){var e=R(`div`,`leaflet-default-icon-path`,document.body),n=wt(e,`background-image`)||wt(e,`backgroundImage`);if(document.body.removeChild(e),n=this._stripUrl(n),n)return n;var r=document.querySelector(`link[href$="leaflet.css"]`);return r?r.href.substring(0,r.href.length-11-1):``}}),er=X.extend({initialize:function(e){this._marker=e},addHooks:function(){var e=this._marker._icon;this._draggable||=new xn(e,e,!0),this._draggable.on({dragstart:this._onDragStart,predrag:this._onPreDrag,drag:this._onDrag,dragend:this._onDragEnd},this).enable(),B(e,`leaflet-marker-draggable`)},removeHooks:function(){this._draggable.off({dragstart:this._onDragStart,predrag:this._onPreDrag,drag:this._onDrag,dragend:this._onDragEnd},this).disable(),this._marker._icon&&V(this._marker._icon,`leaflet-marker-draggable`)},moved:function(){return this._draggable&&this._draggable._moved},_adjustPan:function(e){var n=this._marker,r=n._map,i=this._marker.options.autoPanSpeed,a=this._marker.options.autoPanPadding,o=Pt(n._icon),s=r.getPixelBounds(),c=r.getPixelOrigin(),l=T(s.min._subtract(c).add(a),s.max._subtract(c).subtract(a));if(!l.contains(o)){var u=C((Math.max(l.max.x,o.x)-l.max.x)/(s.max.x-l.max.x)-(Math.min(l.min.x,o.x)-l.min.x)/(s.min.x-l.min.x),(Math.max(l.max.y,o.y)-l.max.y)/(s.max.y-l.max.y)-(Math.min(l.min.y,o.y)-l.min.y)/(s.min.y-l.min.y)).multiplyBy(i);r.panBy(u,{animate:!1}),this._draggable._newPos._add(u),this._draggable._startPos._add(u),U(n._icon,this._draggable._newPos),this._onDrag(e),this._panRequest=y(this._adjustPan.bind(this,e))}},_onDragStart:function(){this._oldLatLng=this._marker.getLatLng(),this._marker.closePopup&&this._marker.closePopup(),this._marker.fire(`movestart`).fire(`dragstart`)},_onPreDrag:function(e){this._marker.options.autoPan&&(b(this._panRequest),this._panRequest=y(this._adjustPan.bind(this,e)))},_onDrag:function(e){var n=this._marker,r=n._shadow,i=Pt(n._icon),a=n._map.layerPointToLatLng(i);r&&U(r,i),n._latlng=a,e.latlng=a,e.oldLatLng=this._oldLatLng,n.fire(`move`,e).fire(`drag`,e)},_onDragEnd:function(e){b(this._panRequest),delete this._oldLatLng,this._marker.fire(`moveend`).fire(`dragend`,e)}}),tr=Q.extend({options:{icon:new $n,interactive:!0,keyboard:!0,title:``,alt:`Marker`,zIndexOffset:0,opacity:1,riseOnHover:!1,riseOffset:250,pane:`markerPane`,shadowPane:`shadowPane`,bubblingMouseEvents:!1,autoPanOnFocus:!0,draggable:!1,autoPan:!1,autoPanPadding:[50,50],autoPanSpeed:10},initialize:function(e,n){m(this,n),this._latlng=k(e)},onAdd:function(e){this._zoomAnimated=this._zoomAnimated&&e.options.markerZoomAnimation,this._zoomAnimated&&e.on(`zoomanim`,this._animateZoom,this),this._initIcon(),this.update()},onRemove:function(e){this.dragging&&this.dragging.enabled()&&(this.options.draggable=!0,this.dragging.removeHooks()),delete this.dragging,this._zoomAnimated&&e.off(`zoomanim`,this._animateZoom,this),this._removeIcon(),this._removeShadow()},getEvents:function(){return{zoom:this.update,viewreset:this.update}},getLatLng:function(){return this._latlng},setLatLng:function(e){var n=this._latlng;return this._latlng=k(e),this.update(),this.fire(`move`,{oldLatLng:n,latlng:this._latlng})},setZIndexOffset:function(e){return this.options.zIndexOffset=e,this.update()},getIcon:function(){return this.options.icon},setIcon:function(e){return this.options.icon=e,this._map&&(this._initIcon(),this.update()),this._popup&&this.bindPopup(this._popup,this._popup.options),this},getElement:function(){return this._icon},update:function(){if(this._icon&&this._map){var e=this._map.latLngToLayerPoint(this._latlng).round();this._setPos(e)}return this},_initIcon:function(){var e=this.options,n=`leaflet-zoom-`+(this._zoomAnimated?`animated`:`hide`),r=e.icon.createIcon(this._icon),i=!1;r!==this._icon&&(this._icon&&this._removeIcon(),i=!0,e.title&&(r.title=e.title),r.tagName===`IMG`&&(r.alt=e.alt||``)),B(r,n),e.keyboard&&(r.tabIndex=`0`,r.setAttribute(`role`,`button`)),this._icon=r,e.riseOnHover&&this.on({mouseover:this._bringToFront,mouseout:this._resetZIndex}),this.options.autoPanOnFocus&&W(r,`focus`,this._panOnFocus,this);var a=e.icon.createShadow(this._shadow),o=!1;a!==this._shadow&&(this._removeShadow(),o=!0),a&&(B(a,n),a.alt=``),this._shadow=a,e.opacity<1&&this._updateOpacity(),i&&this.getPane().appendChild(this._icon),this._initInteraction(),a&&o&&this.getPane(e.shadowPane).appendChild(this._shadow)},_removeIcon:function(){this.options.riseOnHover&&this.off({mouseover:this._bringToFront,mouseout:this._resetZIndex}),this.options.autoPanOnFocus&&K(this._icon,`focus`,this._panOnFocus,this),z(this._icon),this.removeInteractiveTarget(this._icon),this._icon=null},_removeShadow:function(){this._shadow&&z(this._shadow),this._shadow=null},_setPos:function(e){this._icon&&U(this._icon,e),this._shadow&&U(this._shadow,e),this._zIndex=e.y+this.options.zIndexOffset,this._resetZIndex()},_updateZIndex:function(e){this._icon&&(this._icon.style.zIndex=this._zIndex+e)},_animateZoom:function(e){var n=this._map._latLngToNewLayerPoint(this._latlng,e.zoom,e.center).round();this._setPos(n)},_initInteraction:function(){if(this.options.interactive&&(B(this._icon,`leaflet-interactive`),this.addInteractiveTarget(this._icon),er)){var e=this.options.draggable;this.dragging&&(e=this.dragging.enabled(),this.dragging.disable()),this.dragging=new er(this),e&&this.dragging.enable()}},setOpacity:function(e){return this.options.opacity=e,this._map&&this._updateOpacity(),this},_updateOpacity:function(){var e=this.options.opacity;this._icon&&H(this._icon,e),this._shadow&&H(this._shadow,e)},_bringToFront:function(){this._updateZIndex(this.options.riseOffset)},_resetZIndex:function(){this._updateZIndex(0)},_panOnFocus:function(){var e=this._map;if(e){var n=this.options.icon.options,r=n.iconSize?C(n.iconSize):C(0,0),i=n.iconAnchor?C(n.iconAnchor):C(0,0);e.panInside(this._latlng,{paddingTopLeft:i,paddingBottomRight:r.subtract(i)})}},_getPopupAnchor:function(){return this.options.icon.options.popupAnchor},_getTooltipAnchor:function(){return this.options.icon.options.tooltipAnchor}});function nr(e,n){return new tr(e,n)}var rr=Q.extend({options:{stroke:!0,color:`#3388ff`,weight:3,opacity:1,lineCap:`round`,lineJoin:`round`,dashArray:null,dashOffset:null,fill:!1,fillColor:null,fillOpacity:.2,fillRule:`evenodd`,interactive:!0,bubblingMouseEvents:!0},beforeAdd:function(e){this._renderer=e.getRenderer(this)},onAdd:function(){this._renderer._initPath(this),this._reset(),this._renderer._addPath(this)},onRemove:function(){this._renderer._removePath(this)},redraw:function(){return this._map&&this._renderer._updatePath(this),this},setStyle:function(e){return m(this,e),this._renderer&&(this._renderer._updateStyle(this),this.options.stroke&&e&&Object.prototype.hasOwnProperty.call(e,`weight`)&&this._updateBounds()),this},bringToFront:function(){return this._renderer&&this._renderer._bringToFront(this),this},bringToBack:function(){return this._renderer&&this._renderer._bringToBack(this),this},getElement:function(){return this._path},_reset:function(){this._project(),this._update()},_clickTolerance:function(){return(this.options.stroke?this.options.weight/2:0)+(this._renderer.options.tolerance||0)}}),ir=rr.extend({options:{fill:!0,radius:10},initialize:function(e,n){m(this,n),this._latlng=k(e),this._radius=this.options.radius},setLatLng:function(e){var n=this._latlng;return this._latlng=k(e),this.redraw(),this.fire(`move`,{oldLatLng:n,latlng:this._latlng})},getLatLng:function(){return this._latlng},setRadius:function(e){return this.options.radius=this._radius=e,this.redraw()},getRadius:function(){return this._radius},setStyle:function(e){var n=e&&e.radius||this._radius;return rr.prototype.setStyle.call(this,e),this.setRadius(n),this},_project:function(){this._point=this._map.latLngToLayerPoint(this._latlng),this._updateBounds()},_updateBounds:function(){var e=this._radius,n=this._radiusY||e,r=this._clickTolerance(),i=[e+r,n+r];this._pxBounds=new w(this._point.subtract(i),this._point.add(i))},_update:function(){this._map&&this._updatePath()},_updatePath:function(){this._renderer._updateCircle(this)},_empty:function(){return this._radius&&!this._renderer._bounds.intersects(this._pxBounds)},_containsPoint:function(e){return e.distanceTo(this._point)<=this._radius+this._clickTolerance()}});function ar(e,n){return new ir(e,n)}var or=ir.extend({initialize:function(e,n,i){if(typeof n==`number`&&(n=r({},i,{radius:n})),m(this,n),this._latlng=k(e),isNaN(this.options.radius))throw Error(`Circle radius cannot be NaN`);this._mRadius=this.options.radius},setRadius:function(e){return this._mRadius=e,this.redraw()},getRadius:function(){return this._mRadius},getBounds:function(){var e=[this._radius,this._radiusY||this._radius];return new E(this._map.layerPointToLatLng(this._point.subtract(e)),this._map.layerPointToLatLng(this._point.add(e)))},setStyle:rr.prototype.setStyle,_project:function(){var e=this._latlng.lng,n=this._latlng.lat,r=this._map,i=r.options.crs;if(i.distance===fe.distance){var a=Math.PI/180,o=this._mRadius/fe.R/a,s=r.project([n+o,e]),c=r.project([n-o,e]),l=s.add(c).divideBy(2),u=r.unproject(l).lat,d=Math.acos((Math.cos(o*a)-Math.sin(n*a)*Math.sin(u*a))/(Math.cos(n*a)*Math.cos(u*a)))/a;(isNaN(d)||d===0)&&(d=o/Math.cos(Math.PI/180*n)),this._point=l.subtract(r.getPixelOrigin()),this._radius=isNaN(d)?0:l.x-r.project([u,e-d]).x,this._radiusY=l.y-s.y}else{var f=i.unproject(i.project(this._latlng).subtract([this._mRadius,0]));this._point=r.latLngToLayerPoint(this._latlng),this._radius=this._point.x-r.latLngToLayerPoint(f).x}this._updateBounds()}});function sr(e,n,r){return new or(e,n,r)}var cr=rr.extend({options:{smoothFactor:1,noClip:!1},initialize:function(e,n){m(this,n),this._setLatLngs(e)},getLatLngs:function(){return this._latlngs},setLatLngs:function(e){return this._setLatLngs(e),this.redraw()},isEmpty:function(){return!this._latlngs.length},closestLayerPoint:function(e){for(var n=1/0,r=null,i=Ln,a,o,s=0,c=this._parts.length;s<c;s++)for(var l=this._parts[s],u=1,d=l.length;u<d;u++){a=l[u-1],o=l[u];var f=i(e,a,o,!0);f<n&&(n=f,r=i(e,a,o))}return r&&(r.distance=Math.sqrt(n)),r},getCenter:function(){if(!this._map)throw Error(`Must add layer to map before using getCenter()`);return zn(this._defaultShape(),this._map.options.crs)},getBounds:function(){return this._bounds},addLatLng:function(e,n){return n||=this._defaultShape(),e=k(e),n.push(e),this._bounds.extend(e),this.redraw()},_setLatLngs:function(e){this._bounds=new E,this._latlngs=this._convertLatLngs(e)},_defaultShape:function(){return Z(this._latlngs)?this._latlngs:this._latlngs[0]},_convertLatLngs:function(e){for(var n=[],r=Z(e),i=0,a=e.length;i<a;i++)r?(n[i]=k(e[i]),this._bounds.extend(n[i])):n[i]=this._convertLatLngs(e[i]);return n},_project:function(){var e=new w;this._rings=[],this._projectLatlngs(this._latlngs,this._rings,e),this._bounds.isValid()&&e.isValid()&&(this._rawPxBounds=e,this._updateBounds())},_updateBounds:function(){var e=this._clickTolerance(),n=new S(e,e);this._rawPxBounds&&(this._pxBounds=new w([this._rawPxBounds.min.subtract(n),this._rawPxBounds.max.add(n)]))},_projectLatlngs:function(e,n,r){var i=e[0]instanceof O,a=e.length,o,s;if(i){for(s=[],o=0;o<a;o++)s[o]=this._map.latLngToLayerPoint(e[o]),r.extend(s[o]);n.push(s)}else for(o=0;o<a;o++)this._projectLatlngs(e[o],n,r)},_clipPoints:function(){var e=this._renderer._bounds;if(this._parts=[],!(!this._pxBounds||!this._pxBounds.intersects(e))){if(this.options.noClip){this._parts=this._rings;return}var n=this._parts,r,i,a,o,s,c,l;for(r=0,a=0,o=this._rings.length;r<o;r++)for(l=this._rings[r],i=0,s=l.length;i<s-1;i++)c=Nn(l[i],l[i+1],e,i,!0),c&&(n[a]=n[a]||[],n[a].push(c[0]),(c[1]!==l[i+1]||i===s-2)&&(n[a].push(c[1]),a++))}},_simplifyPoints:function(){for(var e=this._parts,n=this.options.smoothFactor,r=0,i=e.length;r<i;r++)e[r]=En(e[r],n)},_update:function(){this._map&&(this._clipPoints(),this._simplifyPoints(),this._updatePath())},_updatePath:function(){this._renderer._updatePoly(this)},_containsPoint:function(e,n){var r,i,a,o,s,c,l=this._clickTolerance();if(!this._pxBounds||!this._pxBounds.contains(e))return!1;for(r=0,o=this._parts.length;r<o;r++)for(c=this._parts[r],i=0,s=c.length,a=s-1;i<s;a=i++)if(!(!n&&i===0)&&Dn(e,c[a],c[i])<=l)return!0;return!1}});function lr(e,n){return new cr(e,n)}cr._flat=Rn;var ur=cr.extend({options:{fill:!0},isEmpty:function(){return!this._latlngs.length||!this._latlngs[0].length},getCenter:function(){if(!this._map)throw Error(`Must add layer to map before using getCenter()`);return Cn(this._defaultShape(),this._map.options.crs)},_convertLatLngs:function(e){var n=cr.prototype._convertLatLngs.call(this,e),r=n.length;return r>=2&&n[0]instanceof O&&n[0].equals(n[r-1])&&n.pop(),n},_setLatLngs:function(e){cr.prototype._setLatLngs.call(this,e),Z(this._latlngs)&&(this._latlngs=[this._latlngs])},_defaultShape:function(){return Z(this._latlngs[0])?this._latlngs[0]:this._latlngs[0][0]},_clipPoints:function(){var e=this._renderer._bounds,n=this.options.weight,r=new S(n,n);if(e=new w(e.min.subtract(r),e.max.add(r)),this._parts=[],!(!this._pxBounds||!this._pxBounds.intersects(e))){if(this.options.noClip){this._parts=this._rings;return}for(var i=0,a=this._rings.length,o;i<a;i++)o=Sn(this._rings[i],e,!0),o.length&&this._parts.push(o)}},_updatePath:function(){this._renderer._updatePoly(this,!0)},_containsPoint:function(e){var n=!1,r,i,a,o,s,c,l,u;if(!this._pxBounds||!this._pxBounds.contains(e))return!1;for(o=0,l=this._parts.length;o<l;o++)for(r=this._parts[o],s=0,u=r.length,c=u-1;s<u;c=s++)i=r[s],a=r[c],i.y>e.y!=a.y>e.y&&e.x<(a.x-i.x)*(e.y-i.y)/(a.y-i.y)+i.x&&(n=!n);return n||cr.prototype._containsPoint.call(this,e,!0)}});function dr(e,n){return new ur(e,n)}var fr=Yn.extend({initialize:function(e,n){m(this,n),this._layers={},e&&this.addData(e)},addData:function(e){var n=v(e)?e:e.features,r,i,a;if(n){for(r=0,i=n.length;r<i;r++)a=n[r],(a.geometries||a.geometry||a.features||a.coordinates)&&this.addData(a);return this}var o=this.options;if(o.filter&&!o.filter(e))return this;var s=pr(e,o);return s?(s.feature=br(e),s.defaultOptions=s.options,this.resetStyle(s),o.onEachFeature&&o.onEachFeature(e,s),this.addLayer(s)):this},resetStyle:function(e){return e===void 0?this.eachLayer(this.resetStyle,this):(e.options=r({},e.defaultOptions),this._setLayerStyle(e,this.options.style),this)},setStyle:function(e){return this.eachLayer(function(n){this._setLayerStyle(n,e)},this)},_setLayerStyle:function(e,n){e.setStyle&&(typeof n==`function`&&(n=n(e.feature)),e.setStyle(n))}});function pr(e,n){var r=e.type===`Feature`?e.geometry:e,i=r?r.coordinates:null,a=[],o=n&&n.pointToLayer,s=n&&n.coordsToLatLng||hr,c,l,u,d;if(!i&&!r)return null;switch(r.type){case`Point`:return c=s(i),mr(o,e,c,n);case`MultiPoint`:for(u=0,d=i.length;u<d;u++)c=s(i[u]),a.push(mr(o,e,c,n));return new Yn(a);case`LineString`:case`MultiLineString`:return l=gr(i,r.type===`LineString`?0:1,s),new cr(l,n);case`Polygon`:case`MultiPolygon`:return l=gr(i,r.type===`Polygon`?1:2,s),new ur(l,n);case`GeometryCollection`:for(u=0,d=r.geometries.length;u<d;u++){var f=pr({geometry:r.geometries[u],type:`Feature`,properties:e.properties},n);f&&a.push(f)}return new Yn(a);case`FeatureCollection`:for(u=0,d=r.features.length;u<d;u++){var p=pr(r.features[u],n);p&&a.push(p)}return new Yn(a);default:throw Error(`Invalid GeoJSON object.`)}}function mr(e,n,r,i){return e?e(n,r):new tr(r,i&&i.markersInheritOptions&&i)}function hr(e){return new O(e[1],e[0],e[2])}function gr(e,n,r){for(var i=[],a=0,o=e.length,s;a<o;a++)s=n?gr(e[a],n-1,r):(r||hr)(e[a]),i.push(s);return i}function _r(e,n){return e=k(e),e.alt===void 0?[d(e.lng,n),d(e.lat,n)]:[d(e.lng,n),d(e.lat,n),d(e.alt,n)]}function vr(e,n,r,i){for(var a=[],o=0,s=e.length;o<s;o++)a.push(n?vr(e[o],Z(e[o])?0:n-1,r,i):_r(e[o],i));return!n&&r&&a.length>0&&a.push(a[0].slice()),a}function yr(e,n){return e.feature?r({},e.feature,{geometry:n}):br(n)}function br(e){return e.type===`Feature`||e.type===`FeatureCollection`?e:{type:`Feature`,properties:{},geometry:e}}var xr={toGeoJSON:function(e){return yr(this,{type:`Point`,coordinates:_r(this.getLatLng(),e)})}};tr.include(xr),or.include(xr),ir.include(xr),cr.include({toGeoJSON:function(e){var n=!Z(this._latlngs),r=vr(this._latlngs,+!!n,!1,e);return yr(this,{type:(n?`Multi`:``)+`LineString`,coordinates:r})}}),ur.include({toGeoJSON:function(e){var n=!Z(this._latlngs),r=n&&!Z(this._latlngs[0]),i=vr(this._latlngs,r?2:+!!n,!0,e);return n||(i=[i]),yr(this,{type:(r?`Multi`:``)+`Polygon`,coordinates:i})}}),qn.include({toMultiPoint:function(e){var n=[];return this.eachLayer(function(r){n.push(r.toGeoJSON(e).geometry.coordinates)}),yr(this,{type:`MultiPoint`,coordinates:n})},toGeoJSON:function(e){var n=this.feature&&this.feature.geometry&&this.feature.geometry.type;if(n===`MultiPoint`)return this.toMultiPoint(e);var r=n===`GeometryCollection`,i=[];return this.eachLayer(function(n){if(n.toGeoJSON){var a=n.toGeoJSON(e);if(r)i.push(a.geometry);else{var o=br(a);o.type===`FeatureCollection`?i.push.apply(i,o.features):i.push(o)}}}),r?yr(this,{geometries:i,type:`GeometryCollection`}):{type:`FeatureCollection`,features:i}}});function Sr(e,n){return new fr(e,n)}var Cr=Sr,wr=Q.extend({options:{opacity:1,alt:``,interactive:!1,crossOrigin:!1,errorOverlayUrl:``,zIndex:1,className:``},initialize:function(e,n,r){this._url=e,this._bounds=D(n),m(this,r)},onAdd:function(){this._image||(this._initImage(),this.options.opacity<1&&this._updateOpacity()),this.options.interactive&&(B(this._image,`leaflet-interactive`),this.addInteractiveTarget(this._image)),this.getPane().appendChild(this._image),this._reset()},onRemove:function(){z(this._image),this.options.interactive&&this.removeInteractiveTarget(this._image)},setOpacity:function(e){return this.options.opacity=e,this._image&&this._updateOpacity(),this},setStyle:function(e){return e.opacity&&this.setOpacity(e.opacity),this},bringToFront:function(){return this._map&&Et(this._image),this},bringToBack:function(){return this._map&&Dt(this._image),this},setUrl:function(e){return this._url=e,this._image&&(this._image.src=e),this},setBounds:function(e){return this._bounds=D(e),this._map&&this._reset(),this},getEvents:function(){var e={zoom:this._reset,viewreset:this._reset};return this._zoomAnimated&&(e.zoomanim=this._animateZoom),e},setZIndex:function(e){return this.options.zIndex=e,this._updateZIndex(),this},getBounds:function(){return this._bounds},getElement:function(){return this._image},_initImage:function(){var e=this._url.tagName===`IMG`,n=this._image=e?this._url:R(`img`);if(B(n,`leaflet-image-layer`),this._zoomAnimated&&B(n,`leaflet-zoom-animated`),this.options.className&&B(n,this.options.className),n.onselectstart=u,n.onmousemove=u,n.onload=a(this.fire,this,`load`),n.onerror=a(this._overlayOnError,this,`error`),(this.options.crossOrigin||this.options.crossOrigin===``)&&(n.crossOrigin=this.options.crossOrigin===!0?``:this.options.crossOrigin),this.options.zIndex&&this._updateZIndex(),e){this._url=n.src;return}n.src=this._url,n.alt=this.options.alt},_animateZoom:function(e){var n=this._map.getZoomScale(e.zoom),r=this._map._latLngBoundsToNewLayerBounds(this._bounds,e.zoom,e.center).min;Nt(this._image,r,n)},_reset:function(){var e=this._image,n=new w(this._map.latLngToLayerPoint(this._bounds.getNorthWest()),this._map.latLngToLayerPoint(this._bounds.getSouthEast())),r=n.getSize();U(e,n.min),e.style.width=r.x+`px`,e.style.height=r.y+`px`},_updateOpacity:function(){H(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 e=this.options.errorOverlayUrl;e&&this._url!==e&&(this._url=e,this._image.src=e)},getCenter:function(){return this._bounds.getCenter()}}),Tr=function(e,n,r){return new wr(e,n,r)},Er=wr.extend({options:{autoplay:!0,loop:!0,keepAspectRatio:!0,muted:!1,playsInline:!0},_initImage:function(){var e=this._url.tagName===`VIDEO`,n=this._image=e?this._url:R(`video`);if(B(n,`leaflet-image-layer`),this._zoomAnimated&&B(n,`leaflet-zoom-animated`),this.options.className&&B(n,this.options.className),n.onselectstart=u,n.onmousemove=u,n.onloadeddata=a(this.fire,this,`load`),e){for(var r=n.getElementsByTagName(`source`),i=[],o=0;o<r.length;o++)i.push(r[o].src);this._url=r.length>0?i:[n.src];return}v(this._url)||(this._url=[this._url]),!this.options.keepAspectRatio&&Object.prototype.hasOwnProperty.call(n.style,`objectFit`)&&(n.style.objectFit=`fill`),n.autoplay=!!this.options.autoplay,n.loop=!!this.options.loop,n.muted=!!this.options.muted,n.playsInline=!!this.options.playsInline;for(var s=0;s<this._url.length;s++){var c=R(`source`);c.src=this._url[s],n.appendChild(c)}}});function Dr(e,n,r){return new Er(e,n,r)}var Or=wr.extend({_initImage:function(){var e=this._image=this._url;B(e,`leaflet-image-layer`),this._zoomAnimated&&B(e,`leaflet-zoom-animated`),this.options.className&&B(e,this.options.className),e.onselectstart=u,e.onmousemove=u}});function kr(e,n,r){return new Or(e,n,r)}var $=Q.extend({options:{interactive:!1,offset:[0,0],className:``,pane:void 0,content:``},initialize:function(e,n){e&&(e instanceof O||v(e))?(this._latlng=k(e),m(this,n)):(m(this,e),this._source=n),this.options.content&&(this._content=this.options.content)},openOn:function(e){return e=arguments.length?e:this._source._map,e.hasLayer(this)||e.addLayer(this),this},close:function(){return this._map&&this._map.removeLayer(this),this},toggle:function(e){return this._map?this.close():(arguments.length?this._source=e:e=this._source,this._prepareOpen(),this.openOn(e._map)),this},onAdd:function(e){this._zoomAnimated=e._zoomAnimated,this._container||this._initLayout(),e._fadeAnimated&&H(this._container,0),clearTimeout(this._removeTimeout),this.getPane().appendChild(this._container),this.update(),e._fadeAnimated&&H(this._container,1),this.bringToFront(),this.options.interactive&&(B(this._container,`leaflet-interactive`),this.addInteractiveTarget(this._container))},onRemove:function(e){e._fadeAnimated?(H(this._container,0),this._removeTimeout=setTimeout(a(z,void 0,this._container),200)):z(this._container),this.options.interactive&&(V(this._container,`leaflet-interactive`),this.removeInteractiveTarget(this._container))},getLatLng:function(){return this._latlng},setLatLng:function(e){return this._latlng=k(e),this._map&&(this._updatePosition(),this._adjustPan()),this},getContent:function(){return this._content},setContent:function(e){return this._content=e,this.update(),this},getElement:function(){return this._container},update:function(){this._map&&(this._container.style.visibility=`hidden`,this._updateContent(),this._updateLayout(),this._updatePosition(),this._container.style.visibility=``,this._adjustPan())},getEvents:function(){var e={zoom:this._updatePosition,viewreset:this._updatePosition};return this._zoomAnimated&&(e.zoomanim=this._animateZoom),e},isOpen:function(){return!!this._map&&this._map.hasLayer(this)},bringToFront:function(){return this._map&&Et(this._container),this},bringToBack:function(){return this._map&&Dt(this._container),this},_prepareOpen:function(e){var n=this._source;if(!n._map)return!1;if(n instanceof Yn){n=null;var r=this._source._layers;for(var i in r)if(r[i]._map){n=r[i];break}if(!n)return!1;this._source=n}if(!e)if(n.getCenter)e=n.getCenter();else if(n.getLatLng)e=n.getLatLng();else if(n.getBounds)e=n.getBounds().getCenter();else throw Error(`Unable to get source layer LatLng.`);return this.setLatLng(e),this._map&&this.update(),!0},_updateContent:function(){if(this._content){var e=this._contentNode,n=typeof this._content==`function`?this._content(this._source||this):this._content;if(typeof n==`string`)e.innerHTML=n;else{for(;e.hasChildNodes();)e.removeChild(e.firstChild);e.appendChild(n)}this.fire(`contentupdate`)}},_updatePosition:function(){if(this._map){var e=this._map.latLngToLayerPoint(this._latlng),n=C(this.options.offset),r=this._getAnchor();this._zoomAnimated?U(this._container,e.add(r)):n=n.add(e).add(r);var i=this._containerBottom=-n.y,a=this._containerLeft=-Math.round(this._containerWidth/2)+n.x;this._container.style.bottom=i+`px`,this._container.style.left=a+`px`}},_getAnchor:function(){return[0,0]}});J.include({_initOverlay:function(e,n,r,i){var a=n;return a instanceof e||(a=new e(i).setContent(n)),r&&a.setLatLng(r),a}}),Q.include({_initOverlay:function(e,n,r,i){var a=r;return a instanceof e?(m(a,i),a._source=this):(a=n&&!i?n:new e(i,this),a.setContent(r)),a}});var Ar=$.extend({options:{pane:`popupPane`,offset:[0,7],maxWidth:300,minWidth:50,maxHeight:null,autoPan:!0,autoPanPaddingTopLeft:null,autoPanPaddingBottomRight:null,autoPanPadding:[5,5],keepInView:!1,closeButton:!0,autoClose:!0,closeOnEscapeKey:!0,className:``},openOn:function(e){return e=arguments.length?e:this._source._map,!e.hasLayer(this)&&e._popup&&e._popup.options.autoClose&&e.removeLayer(e._popup),e._popup=this,$.prototype.openOn.call(this,e)},onAdd:function(e){$.prototype.onAdd.call(this,e),e.fire(`popupopen`,{popup:this}),this._source&&(this._source.fire(`popupopen`,{popup:this},!0),this._source instanceof rr||this._source.on(`preclick`,Qt))},onRemove:function(e){$.prototype.onRemove.call(this,e),e.fire(`popupclose`,{popup:this}),this._source&&(this._source.fire(`popupclose`,{popup:this},!0),this._source instanceof rr||this._source.off(`preclick`,Qt))},getEvents:function(){var e=$.prototype.getEvents.call(this);return(this.options.closeOnClick===void 0?this._map.options.closePopupOnClick:this.options.closeOnClick)&&(e.preclick=this.close),this.options.keepInView&&(e.moveend=this._adjustPan),e},_initLayout:function(){var e=`leaflet-popup`,n=this._container=R(`div`,e+` `+(this.options.className||``)+` leaflet-zoom-animated`),r=this._wrapper=R(`div`,e+`-content-wrapper`,n);if(this._contentNode=R(`div`,e+`-content`,r),en(n),$t(this._contentNode),W(n,`contextmenu`,Qt),this._tipContainer=R(`div`,e+`-tip-container`,n),this._tip=R(`div`,e+`-tip`,this._tipContainer),this.options.closeButton){var i=this._closeButton=R(`a`,e+`-close-button`,n);i.setAttribute(`role`,`button`),i.setAttribute(`aria-label`,`Close popup`),i.href=`#close`,i.innerHTML=`<span aria-hidden="true">&#215;</span>`,W(i,`click`,function(e){q(e),this.close()},this)}},_updateLayout:function(){var e=this._contentNode,n=e.style;n.width=``,n.whiteSpace=`nowrap`;var r=e.offsetWidth;r=Math.min(r,this.options.maxWidth),r=Math.max(r,this.options.minWidth),n.width=r+1+`px`,n.whiteSpace=``,n.height=``;var i=e.offsetHeight,a=this.options.maxHeight,o=`leaflet-popup-scrolled`;a&&i>a?(n.height=a+`px`,B(e,o)):V(e,o),this._containerWidth=this._container.offsetWidth},_animateZoom:function(e){var n=this._map._latLngToNewLayerPoint(this._latlng,e.zoom,e.center),r=this._getAnchor();U(this._container,n.add(r))},_adjustPan:function(){if(this.options.autoPan){if(this._map._panAnim&&this._map._panAnim.stop(),this._autopanning){this._autopanning=!1;return}var e=this._map,n=parseInt(wt(this._container,`marginBottom`),10)||0,r=this._container.offsetHeight+n,i=this._containerWidth,a=new S(this._containerLeft,-r-this._containerBottom);a._add(Pt(this._container));var o=e.layerPointToContainerPoint(a),s=C(this.options.autoPanPadding),c=C(this.options.autoPanPaddingTopLeft||s),l=C(this.options.autoPanPaddingBottomRight||s),u=e.getSize(),d=0,f=0;o.x+i+l.x>u.x&&(d=o.x+i-u.x+l.x),o.x-d-c.x<0&&(d=o.x-c.x),o.y+r+l.y>u.y&&(f=o.y+r-u.y+l.y),o.y-f-c.y<0&&(f=o.y-c.y),(d||f)&&(this.options.keepInView&&(this._autopanning=!0),e.fire(`autopanstart`).panBy([d,f]))}},_getAnchor:function(){return C(this._source&&this._source._getPopupAnchor?this._source._getPopupAnchor():[0,0])}}),jr=function(e,n){return new Ar(e,n)};J.mergeOptions({closePopupOnClick:!0}),J.include({openPopup:function(e,n,r){return this._initOverlay(Ar,e,n,r).openOn(this),this},closePopup:function(e){return e=arguments.length?e:this._popup,e&&e.close(),this}}),Q.include({bindPopup:function(e,n){return this._popup=this._initOverlay(Ar,this._popup,e,n),this._popupHandlersAdded||=(this.on({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),!0),this},unbindPopup:function(){return this._popup&&=(this.off({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!1,null),this},openPopup:function(e){return this._popup&&(this instanceof Yn||(this._popup._source=this),this._popup._prepareOpen(e||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(e){return this._popup&&this._popup.setContent(e),this},getPopup:function(){return this._popup},_openPopup:function(e){if(!(!this._popup||!this._map)){tn(e);var n=e.layer||e.target;if(this._popup._source===n&&!(n instanceof rr)){this._map.hasLayer(this._popup)?this.closePopup():this.openPopup(e.latlng);return}this._popup._source=n,this.openPopup(e.latlng)}},_movePopup:function(e){this._popup.setLatLng(e.latlng)},_onKeyPress:function(e){e.originalEvent.keyCode===13&&this._openPopup(e)}});var Mr=$.extend({options:{pane:`tooltipPane`,offset:[0,0],direction:`auto`,permanent:!1,sticky:!1,opacity:.9},onAdd:function(e){$.prototype.onAdd.call(this,e),this.setOpacity(this.options.opacity),e.fire(`tooltipopen`,{tooltip:this}),this._source&&(this.addEventParent(this._source),this._source.fire(`tooltipopen`,{tooltip:this},!0))},onRemove:function(e){$.prototype.onRemove.call(this,e),e.fire(`tooltipclose`,{tooltip:this}),this._source&&(this.removeEventParent(this._source),this._source.fire(`tooltipclose`,{tooltip:this},!0))},getEvents:function(){var e=$.prototype.getEvents.call(this);return this.options.permanent||(e.preclick=this.close),e},_initLayout:function(){this._contentNode=this._container=R(`div`,`leaflet-tooltip `+(this.options.className||``)+` leaflet-zoom-`+(this._zoomAnimated?`animated`:`hide`)),this._container.setAttribute(`role`,`tooltip`),this._container.setAttribute(`id`,`leaflet-tooltip-`+s(this))},_updateLayout:function(){},_adjustPan:function(){},_setPosition:function(e){var n,r,i=this._map,a=this._container,o=i.latLngToContainerPoint(i.getCenter()),s=i.layerPointToContainerPoint(e),c=this.options.direction,l=a.offsetWidth,u=a.offsetHeight,d=C(this.options.offset),f=this._getAnchor();c===`top`?(n=l/2,r=u):c===`bottom`?(n=l/2,r=0):c===`center`?(n=l/2,r=u/2):c===`right`?(n=0,r=u/2):c===`left`?(n=l,r=u/2):s.x<o.x?(c=`right`,n=0,r=u/2):(c=`left`,n=l+(d.x+f.x)*2,r=u/2),e=e.subtract(C(n,r,!0)).add(d).add(f),V(a,`leaflet-tooltip-right`),V(a,`leaflet-tooltip-left`),V(a,`leaflet-tooltip-top`),V(a,`leaflet-tooltip-bottom`),B(a,`leaflet-tooltip-`+c),U(a,e)},_updatePosition:function(){var e=this._map.latLngToLayerPoint(this._latlng);this._setPosition(e)},setOpacity:function(e){this.options.opacity=e,this._container&&H(this._container,e)},_animateZoom:function(e){var n=this._map._latLngToNewLayerPoint(this._latlng,e.zoom,e.center);this._setPosition(n)},_getAnchor:function(){return C(this._source&&this._source._getTooltipAnchor&&!this.options.sticky?this._source._getTooltipAnchor():[0,0])}}),Nr=function(e,n){return new Mr(e,n)};J.include({openTooltip:function(e,n,r){return this._initOverlay(Mr,e,n,r).openOn(this),this},closeTooltip:function(e){return e.close(),this}}),Q.include({bindTooltip:function(e,n){return this._tooltip&&this.isTooltipOpen()&&this.unbindTooltip(),this._tooltip=this._initOverlay(Mr,this._tooltip,e,n),this._initTooltipInteractions(),this._tooltip.options.permanent&&this._map&&this._map.hasLayer(this)&&this.openTooltip(),this},unbindTooltip:function(){return this._tooltip&&=(this._initTooltipInteractions(!0),this.closeTooltip(),null),this},_initTooltipInteractions:function(e){if(!(!e&&this._tooltipHandlersAdded)){var n=e?`off`:`on`,r={remove:this.closeTooltip,move:this._moveTooltip};this._tooltip.options.permanent?r.add=this._openTooltip:(r.mouseover=this._openTooltip,r.mouseout=this.closeTooltip,r.click=this._openTooltip,this._map?this._addFocusListeners():r.add=this._addFocusListeners),this._tooltip.options.sticky&&(r.mousemove=this._moveTooltip),this[n](r),this._tooltipHandlersAdded=!e}},openTooltip:function(e){return this._tooltip&&(this instanceof Yn||(this._tooltip._source=this),this._tooltip._prepareOpen(e)&&(this._tooltip.openOn(this._map),this.getElement?this._setAriaDescribedByOnLayer(this):this.eachLayer&&this.eachLayer(this._setAriaDescribedByOnLayer,this))),this},closeTooltip:function(){if(this._tooltip)return this._tooltip.close()},toggleTooltip:function(){return this._tooltip&&this._tooltip.toggle(this),this},isTooltipOpen:function(){return this._tooltip.isOpen()},setTooltipContent:function(e){return this._tooltip&&this._tooltip.setContent(e),this},getTooltip:function(){return this._tooltip},_addFocusListeners:function(){this.getElement?this._addFocusListenersOnLayer(this):this.eachLayer&&this.eachLayer(this._addFocusListenersOnLayer,this)},_addFocusListenersOnLayer:function(e){var n=typeof e.getElement==`function`&&e.getElement();n&&(W(n,`focus`,function(){this._tooltip._source=e,this.openTooltip()},this),W(n,`blur`,this.closeTooltip,this))},_setAriaDescribedByOnLayer:function(e){var n=typeof e.getElement==`function`&&e.getElement();n&&n.setAttribute(`aria-describedby`,this._tooltip._container.id)},_openTooltip:function(e){if(!(!this._tooltip||!this._map)){if(this._map.dragging&&this._map.dragging.moving()&&!this._openOnceFlag){this._openOnceFlag=!0;var n=this;this._map.once(`moveend`,function(){n._openOnceFlag=!1,n._openTooltip(e)});return}this._tooltip._source=e.layer||e.target,this.openTooltip(this._tooltip.options.sticky?e.latlng:void 0)}},_moveTooltip:function(e){var n=e.latlng,r,i;this._tooltip.options.sticky&&e.originalEvent&&(r=this._map.mouseEventToContainerPoint(e.originalEvent),i=this._map.containerPointToLayerPoint(r),n=this._map.layerPointToLatLng(i)),this._tooltip.setLatLng(n)}});var Pr=Zn.extend({options:{iconSize:[12,12],html:!1,bgPos:null,className:`leaflet-div-icon`},createIcon:function(e){var n=e&&e.tagName===`DIV`?e:document.createElement(`div`),r=this.options;if(r.html instanceof Element?(Tt(n),n.appendChild(r.html)):n.innerHTML=r.html===!1?``:r.html,r.bgPos){var i=C(r.bgPos);n.style.backgroundPosition=-i.x+`px `+-i.y+`px`}return this._setIconStyles(n,`icon`),n},createShadow:function(){return null}});function Fr(e){return new Pr(e)}Zn.Default=$n;var Ir=Q.extend({options:{tileSize:256,opacity:1,updateWhenIdle:P.mobile,updateWhenZooming:!0,updateInterval:200,zIndex:1,bounds:null,minZoom:0,maxZoom:void 0,maxNativeZoom:void 0,minNativeZoom:void 0,noWrap:!1,pane:`tilePane`,className:``,keepBuffer:2},initialize:function(e){m(this,e)},onAdd:function(){this._initContainer(),this._levels={},this._tiles={},this._resetView()},beforeAdd:function(e){e._addZoomLimit(this)},onRemove:function(e){this._removeAllTiles(),z(this._container),e._removeZoomLimit(this),this._container=null,this._tileZoom=void 0},bringToFront:function(){return this._map&&(Et(this._container),this._setAutoZIndex(Math.max)),this},bringToBack:function(){return this._map&&(Dt(this._container),this._setAutoZIndex(Math.min)),this},getContainer:function(){return this._container},setOpacity:function(e){return this.options.opacity=e,this._updateOpacity(),this},setZIndex:function(e){return this.options.zIndex=e,this._updateZIndex(),this},isLoading:function(){return this._loading},redraw:function(){if(this._map){this._removeAllTiles();var e=this._clampZoom(this._map.getZoom());e!==this._tileZoom&&(this._tileZoom=e,this._updateLevels()),this._update()}return this},getEvents:function(){var e={viewprereset:this._invalidateAll,viewreset:this._resetView,zoom:this._resetView,moveend:this._onMoveEnd};return this.options.updateWhenIdle||(this._onMove||=c(this._onMoveEnd,this.options.updateInterval,this),e.move=this._onMove),this._zoomAnimated&&(e.zoomanim=this._animateZoom),e},createTile:function(){return document.createElement(`div`)},getTileSize:function(){var e=this.options.tileSize;return e instanceof S?e:new S(e,e)},_updateZIndex:function(){this._container&&this.options.zIndex!==void 0&&this.options.zIndex!==null&&(this._container.style.zIndex=this.options.zIndex)},_setAutoZIndex:function(e){for(var n=this.getPane().children,r=-e(-1/0,1/0),i=0,a=n.length,o;i<a;i++)o=n[i].style.zIndex,n[i]!==this._container&&o&&(r=e(r,+o));isFinite(r)&&(this.options.zIndex=r+e(-1,1),this._updateZIndex())},_updateOpacity:function(){if(this._map&&!P.ielt9){H(this._container,this.options.opacity);var e=+new Date,n=!1,r=!1;for(var i in this._tiles){var a=this._tiles[i];if(!(!a.current||!a.loaded)){var o=Math.min(1,(e-a.loaded)/200);H(a.el,o),o<1?n=!0:(a.active?r=!0:this._onOpaqueTile(a),a.active=!0)}}r&&!this._noPrune&&this._pruneTiles(),n&&(b(this._fadeFrame),this._fadeFrame=y(this._updateOpacity,this))}},_onOpaqueTile:u,_initContainer:function(){this._container||(this._container=R(`div`,`leaflet-layer `+(this.options.className||``)),this._updateZIndex(),this.options.opacity<1&&this._updateOpacity(),this.getPane().appendChild(this._container))},_updateLevels:function(){var e=this._tileZoom,n=this.options.maxZoom;if(e!==void 0){for(var r in this._levels)r=Number(r),this._levels[r].el.children.length||r===e?(this._levels[r].el.style.zIndex=n-Math.abs(e-r),this._onUpdateLevel(r)):(z(this._levels[r].el),this._removeTilesAtZoom(r),this._onRemoveLevel(r),delete this._levels[r]);var i=this._levels[e],a=this._map;return i||(i=this._levels[e]={},i.el=R(`div`,`leaflet-tile-container leaflet-zoom-animated`,this._container),i.el.style.zIndex=n,i.origin=a.project(a.unproject(a.getPixelOrigin()),e).round(),i.zoom=e,this._setZoomTransform(i,a.getCenter(),a.getZoom()),i.el.offsetWidth,this._onCreateLevel(i)),this._level=i,i}},_onUpdateLevel:u,_onRemoveLevel:u,_onCreateLevel:u,_pruneTiles:function(){if(this._map){var e,n,r=this._map.getZoom();if(r>this.options.maxZoom||r<this.options.minZoom){this._removeAllTiles();return}for(e in this._tiles)n=this._tiles[e],n.retain=n.current;for(e in this._tiles)if(n=this._tiles[e],n.current&&!n.active){var i=n.coords;this._retainParent(i.x,i.y,i.z,i.z-5)||this._retainChildren(i.x,i.y,i.z,i.z+2)}for(e in this._tiles)this._tiles[e].retain||this._removeTile(e)}},_removeTilesAtZoom:function(e){for(var n in this._tiles)this._tiles[n].coords.z===e&&this._removeTile(n)},_removeAllTiles:function(){for(var e in this._tiles)this._removeTile(e)},_invalidateAll:function(){for(var e in this._levels)z(this._levels[e].el),this._onRemoveLevel(Number(e)),delete this._levels[e];this._removeAllTiles(),this._tileZoom=void 0},_retainParent:function(e,n,r,i){var a=Math.floor(e/2),o=Math.floor(n/2),s=r-1,c=new S(+a,+o);c.z=+s;var l=this._tileCoordsToKey(c),u=this._tiles[l];return u&&u.active?(u.retain=!0,!0):(u&&u.loaded&&(u.retain=!0),s>i?this._retainParent(a,o,s,i):!1)},_retainChildren:function(e,n,r,i){for(var a=2*e;a<2*e+2;a++)for(var o=2*n;o<2*n+2;o++){var s=new S(a,o);s.z=r+1;var c=this._tileCoordsToKey(s),l=this._tiles[c];if(l&&l.active){l.retain=!0;continue}else l&&l.loaded&&(l.retain=!0);r+1<i&&this._retainChildren(a,o,r+1,i)}},_resetView:function(e){var n=e&&(e.pinch||e.flyTo);this._setView(this._map.getCenter(),this._map.getZoom(),n,n)},_animateZoom:function(e){this._setView(e.center,e.zoom,!0,e.noUpdate)},_clampZoom:function(e){var n=this.options;return n.minNativeZoom!==void 0&&e<n.minNativeZoom?n.minNativeZoom:n.maxNativeZoom!==void 0&&n.maxNativeZoom<e?n.maxNativeZoom:e},_setView:function(e,n,r,i){var a=Math.round(n);a=this.options.maxZoom!==void 0&&a>this.options.maxZoom||this.options.minZoom!==void 0&&a<this.options.minZoom?void 0:this._clampZoom(a);var o=this.options.updateWhenZooming&&a!==this._tileZoom;(!i||o)&&(this._tileZoom=a,this._abortLoading&&this._abortLoading(),this._updateLevels(),this._resetGrid(),a!==void 0&&this._update(e),r||this._pruneTiles(),this._noPrune=!!r),this._setZoomTransforms(e,n)},_setZoomTransforms:function(e,n){for(var r in this._levels)this._setZoomTransform(this._levels[r],e,n)},_setZoomTransform:function(e,n,r){var i=this._map.getZoomScale(r,e.zoom),a=e.origin.multiplyBy(i).subtract(this._map._getNewPixelOrigin(n,r)).round();P.any3d?Nt(e.el,a,i):U(e.el,a)},_resetGrid:function(){var e=this._map,n=e.options.crs,r=this._tileSize=this.getTileSize(),i=this._tileZoom,a=this._map.getPixelWorldBounds(this._tileZoom);a&&(this._globalTileRange=this._pxBoundsToTileRange(a)),this._wrapX=n.wrapLng&&!this.options.noWrap&&[Math.floor(e.project([0,n.wrapLng[0]],i).x/r.x),Math.ceil(e.project([0,n.wrapLng[1]],i).x/r.y)],this._wrapY=n.wrapLat&&!this.options.noWrap&&[Math.floor(e.project([n.wrapLat[0],0],i).y/r.x),Math.ceil(e.project([n.wrapLat[1],0],i).y/r.y)]},_onMoveEnd:function(){!this._map||this._map._animatingZoom||this._update()},_getTiledPixelBounds:function(e){var n=this._map,r=n._animatingZoom?Math.max(n._animateToZoom,n.getZoom()):n.getZoom(),i=n.getZoomScale(r,this._tileZoom),a=n.project(e,this._tileZoom).floor(),o=n.getSize().divideBy(i*2);return new w(a.subtract(o),a.add(o))},_update:function(e){var n=this._map;if(n){var r=this._clampZoom(n.getZoom());if(e===void 0&&(e=n.getCenter()),this._tileZoom!==void 0){var i=this._getTiledPixelBounds(e),a=this._pxBoundsToTileRange(i),o=a.getCenter(),s=[],c=this.options.keepBuffer,l=new w(a.getBottomLeft().subtract([c,-c]),a.getTopRight().add([c,-c]));if(!(isFinite(a.min.x)&&isFinite(a.min.y)&&isFinite(a.max.x)&&isFinite(a.max.y)))throw Error(`Attempted to load an infinite number of tiles`);for(var u in this._tiles){var d=this._tiles[u].coords;(d.z!==this._tileZoom||!l.contains(new S(d.x,d.y)))&&(this._tiles[u].current=!1)}if(Math.abs(r-this._tileZoom)>1){this._setView(e,r);return}for(var f=a.min.y;f<=a.max.y;f++)for(var p=a.min.x;p<=a.max.x;p++){var m=new S(p,f);if(m.z=this._tileZoom,this._isValidTile(m)){var h=this._tiles[this._tileCoordsToKey(m)];h?h.current=!0:s.push(m)}}if(s.sort(function(e,n){return e.distanceTo(o)-n.distanceTo(o)}),s.length!==0){this._loading||(this._loading=!0,this.fire(`loading`));var g=document.createDocumentFragment();for(p=0;p<s.length;p++)this._addTile(s[p],g);this._level.el.appendChild(g)}}}},_isValidTile:function(e){var n=this._map.options.crs;if(!n.infinite){var r=this._globalTileRange;if(!n.wrapLng&&(e.x<r.min.x||e.x>r.max.x)||!n.wrapLat&&(e.y<r.min.y||e.y>r.max.y))return!1}if(!this.options.bounds)return!0;var i=this._tileCoordsToBounds(e);return D(this.options.bounds).overlaps(i)},_keyToBounds:function(e){return this._tileCoordsToBounds(this._keyToTileCoords(e))},_tileCoordsToNwSe:function(e){var n=this._map,r=this.getTileSize(),i=e.scaleBy(r),a=i.add(r);return[n.unproject(i,e.z),n.unproject(a,e.z)]},_tileCoordsToBounds:function(e){var n=this._tileCoordsToNwSe(e),r=new E(n[0],n[1]);return this.options.noWrap||(r=this._map.wrapLatLngBounds(r)),r},_tileCoordsToKey:function(e){return e.x+`:`+e.y+`:`+e.z},_keyToTileCoords:function(e){var n=e.split(`:`),r=new S(+n[0],+n[1]);return r.z=+n[2],r},_removeTile:function(e){var n=this._tiles[e];n&&(z(n.el),delete this._tiles[e],this.fire(`tileunload`,{tile:n.el,coords:this._keyToTileCoords(e)}))},_initTile:function(e){B(e,`leaflet-tile`);var n=this.getTileSize();e.style.width=n.x+`px`,e.style.height=n.y+`px`,e.onselectstart=u,e.onmousemove=u,P.ielt9&&this.options.opacity<1&&H(e,this.options.opacity)},_addTile:function(e,n){var r=this._getTilePos(e),i=this._tileCoordsToKey(e),o=this.createTile(this._wrapCoords(e),a(this._tileReady,this,e));this._initTile(o),this.createTile.length<2&&y(a(this._tileReady,this,e,null,o)),U(o,r),this._tiles[i]={el:o,coords:e,current:!0},n.appendChild(o),this.fire(`tileloadstart`,{tile:o,coords:e})},_tileReady:function(e,n,r){n&&this.fire(`tileerror`,{error:n,tile:r,coords:e});var i=this._tileCoordsToKey(e);r=this._tiles[i],r&&(r.loaded=+new Date,this._map._fadeAnimated?(H(r.el,0),b(this._fadeFrame),this._fadeFrame=y(this._updateOpacity,this)):(r.active=!0,this._pruneTiles()),n||(B(r.el,`leaflet-tile-loaded`),this.fire(`tileload`,{tile:r.el,coords:e})),this._noTilesToLoad()&&(this._loading=!1,this.fire(`load`),P.ielt9||!this._map._fadeAnimated?y(this._pruneTiles,this):setTimeout(a(this._pruneTiles,this),250)))},_getTilePos:function(e){return e.scaleBy(this.getTileSize()).subtract(this._level.origin)},_wrapCoords:function(e){var n=new S(this._wrapX?l(e.x,this._wrapX):e.x,this._wrapY?l(e.y,this._wrapY):e.y);return n.z=e.z,n},_pxBoundsToTileRange:function(e){var n=this.getTileSize();return new w(e.min.unscaleBy(n).floor(),e.max.unscaleBy(n).ceil().subtract([1,1]))},_noTilesToLoad:function(){for(var e in this._tiles)if(!this._tiles[e].loaded)return!1;return!0}});function Lr(e){return new Ir(e)}var Rr=Ir.extend({options:{minZoom:0,maxZoom:18,subdomains:`abc`,errorTileUrl:``,zoomOffset:0,tms:!1,zoomReverse:!1,detectRetina:!1,crossOrigin:!1,referrerPolicy:!1},initialize:function(e,n){this._url=e,n=m(this,n),n.detectRetina&&P.retina&&n.maxZoom>0?(n.tileSize=Math.floor(n.tileSize/2),n.zoomReverse?(n.zoomOffset--,n.minZoom=Math.min(n.maxZoom,n.minZoom+1)):(n.zoomOffset++,n.maxZoom=Math.max(n.minZoom,n.maxZoom-1)),n.minZoom=Math.max(0,n.minZoom)):n.zoomReverse?n.minZoom=Math.min(n.maxZoom,n.minZoom):n.maxZoom=Math.max(n.minZoom,n.maxZoom),typeof n.subdomains==`string`&&(n.subdomains=n.subdomains.split(``)),this.on(`tileunload`,this._onTileRemove)},setUrl:function(e,n){return this._url===e&&n===void 0&&(n=!0),this._url=e,n||this.redraw(),this},createTile:function(e,n){var r=document.createElement(`img`);return W(r,`load`,a(this._tileOnLoad,this,n,r)),W(r,`error`,a(this._tileOnError,this,n,r)),(this.options.crossOrigin||this.options.crossOrigin===``)&&(r.crossOrigin=this.options.crossOrigin===!0?``:this.options.crossOrigin),typeof this.options.referrerPolicy==`string`&&(r.referrerPolicy=this.options.referrerPolicy),r.alt=``,r.src=this.getTileUrl(e),r},getTileUrl:function(e){var n={r:P.retina?`@2x`:``,s:this._getSubdomain(e),x:e.x,y:e.y,z:this._getZoomForUrl()};if(this._map&&!this._map.options.crs.infinite){var i=this._globalTileRange.max.y-e.y;this.options.tms&&(n.y=i),n[`-y`]=i}return _(this._url,r(n,this.options))},_tileOnLoad:function(e,n){P.ielt9?setTimeout(a(e,this,null,n),0):e(null,n)},_tileOnError:function(e,n,r){var i=this.options.errorTileUrl;i&&n.getAttribute(`src`)!==i&&(n.src=i),e(r,n)},_onTileRemove:function(e){e.tile.onload=null},_getZoomForUrl:function(){var e=this._tileZoom,n=this.options.maxZoom,r=this.options.zoomReverse,i=this.options.zoomOffset;return r&&(e=n-e),e+i},_getSubdomain:function(e){var n=Math.abs(e.x+e.y)%this.options.subdomains.length;return this.options.subdomains[n]},_abortLoading:function(){var e,n;for(e in this._tiles)if(this._tiles[e].coords.z!==this._tileZoom&&(n=this._tiles[e].el,n.onload=u,n.onerror=u,!n.complete)){n.src=te;var r=this._tiles[e].coords;z(n),delete this._tiles[e],this.fire(`tileabort`,{tile:n,coords:r})}},_removeTile:function(e){var n=this._tiles[e];if(n)return n.el.setAttribute(`src`,te),Ir.prototype._removeTile.call(this,e)},_tileReady:function(e,n,r){if(!(!this._map||r&&r.getAttribute(`src`)===te))return Ir.prototype._tileReady.call(this,e,n,r)}});function zr(e,n){return new Rr(e,n)}var Br=Rr.extend({defaultWmsParams:{service:`WMS`,request:`GetMap`,layers:``,styles:``,format:`image/jpeg`,transparent:!1,version:`1.1.1`},options:{crs:null,uppercase:!1},initialize:function(e,n){this._url=e;var i=r({},this.defaultWmsParams);for(var a in n)a in this.options||(i[a]=n[a]);n=m(this,n);var o=n.detectRetina&&P.retina?2:1,s=this.getTileSize();i.width=s.x*o,i.height=s.y*o,this.wmsParams=i},onAdd:function(e){this._crs=this.options.crs||e.options.crs,this._wmsVersion=parseFloat(this.wmsParams.version);var n=this._wmsVersion>=1.3?`crs`:`srs`;this.wmsParams[n]=this._crs.code,Rr.prototype.onAdd.call(this,e)},getTileUrl:function(e){var n=this._tileCoordsToNwSe(e),r=this._crs,i=T(r.project(n[0]),r.project(n[1])),a=i.min,o=i.max,s=(this._wmsVersion>=1.3&&this._crs===Gn?[a.y,a.x,o.y,o.x]:[a.x,a.y,o.x,o.y]).join(`,`),c=Rr.prototype.getTileUrl.call(this,e);return c+h(this.wmsParams,c,this.options.uppercase)+(this.options.uppercase?`&BBOX=`:`&bbox=`)+s},setParams:function(e,n){return r(this.wmsParams,e),n||this.redraw(),this}});function Vr(e,n){return new Br(e,n)}Rr.WMS=Br,zr.wms=Vr;var Hr=Q.extend({options:{padding:.1},initialize:function(e){m(this,e),s(this),this._layers=this._layers||{}},onAdd:function(){this._container||(this._initContainer(),B(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 e={viewreset:this._reset,zoom:this._onZoom,moveend:this._update,zoomend:this._onZoomEnd};return this._zoomAnimated&&(e.zoomanim=this._onAnimZoom),e},_onAnimZoom:function(e){this._updateTransform(e.center,e.zoom)},_onZoom:function(){this._updateTransform(this._map.getCenter(),this._map.getZoom())},_updateTransform:function(e,n){var r=this._map.getZoomScale(n,this._zoom),i=this._map.getSize().multiplyBy(.5+this.options.padding),a=this._map.project(this._center,n),o=i.multiplyBy(-r).add(a).subtract(this._map._getNewPixelOrigin(e,n));P.any3d?Nt(this._container,o,r):U(this._container,o)},_reset:function(){for(var e in this._update(),this._updateTransform(this._center,this._zoom),this._layers)this._layers[e]._reset()},_onZoomEnd:function(){for(var e in this._layers)this._layers[e]._project()},_updatePaths:function(){for(var e in this._layers)this._layers[e]._update()},_update:function(){var e=this.options.padding,n=this._map.getSize(),r=this._map.containerPointToLayerPoint(n.multiplyBy(-e)).round();this._bounds=new w(r,r.add(n.multiplyBy(1+e*2)).round()),this._center=this._map.getCenter(),this._zoom=this._map.getZoom()}}),Ur=Hr.extend({options:{tolerance:0},getEvents:function(){var e=Hr.prototype.getEvents.call(this);return e.viewprereset=this._onViewPreReset,e},_onViewPreReset:function(){this._postponeUpdatePaths=!0},onAdd:function(){Hr.prototype.onAdd.call(this),this._draw()},_initContainer:function(){var e=this._container=document.createElement(`canvas`);W(e,`mousemove`,this._onMouseMove,this),W(e,`click dblclick mousedown mouseup contextmenu`,this._onClick,this),W(e,`mouseout`,this._handleMouseOut,this),e._leaflet_disable_events=!0,this._ctx=e.getContext(`2d`)},_destroyContainer:function(){b(this._redrawRequest),delete this._ctx,z(this._container),K(this._container),delete this._container},_updatePaths:function(){if(!this._postponeUpdatePaths){var e;for(var n in this._redrawBounds=null,this._layers)e=this._layers[n],e._update();this._redraw()}},_update:function(){if(!(this._map._animatingZoom&&this._bounds)){Hr.prototype._update.call(this);var e=this._bounds,n=this._container,r=e.getSize(),i=P.retina?2:1;U(n,e.min),n.width=i*r.x,n.height=i*r.y,n.style.width=r.x+`px`,n.style.height=r.y+`px`,P.retina&&this._ctx.scale(2,2),this._ctx.translate(-e.min.x,-e.min.y),this.fire(`update`)}},_reset:function(){Hr.prototype._reset.call(this),this._postponeUpdatePaths&&(this._postponeUpdatePaths=!1,this._updatePaths())},_initPath:function(e){this._updateDashArray(e),this._layers[s(e)]=e;var n=e._order={layer:e,prev:this._drawLast,next:null};this._drawLast&&(this._drawLast.next=n),this._drawLast=n,this._drawFirst=this._drawFirst||this._drawLast},_addPath:function(e){this._requestRedraw(e)},_removePath:function(e){var n=e._order,r=n.next,i=n.prev;r?r.prev=i:this._drawLast=i,i?i.next=r:this._drawFirst=r,delete e._order,delete this._layers[s(e)],this._requestRedraw(e)},_updatePath:function(e){this._extendRedrawBounds(e),e._project(),e._update(),this._requestRedraw(e)},_updateStyle:function(e){this._updateDashArray(e),this._requestRedraw(e)},_updateDashArray:function(e){if(typeof e.options.dashArray==`string`){var n=e.options.dashArray.split(/[, ]+/),r=[],i,a;for(a=0;a<n.length;a++){if(i=Number(n[a]),isNaN(i))return;r.push(i)}e.options._dashArray=r}else e.options._dashArray=e.options.dashArray},_requestRedraw:function(e){this._map&&(this._extendRedrawBounds(e),this._redrawRequest=this._redrawRequest||y(this._redraw,this))},_extendRedrawBounds:function(e){if(e._pxBounds){var n=(e.options.weight||0)+1;this._redrawBounds=this._redrawBounds||new w,this._redrawBounds.extend(e._pxBounds.min.subtract([n,n])),this._redrawBounds.extend(e._pxBounds.max.add([n,n]))}},_redraw:function(){this._redrawRequest=null,this._redrawBounds&&(this._redrawBounds.min._floor(),this._redrawBounds.max._ceil()),this._clear(),this._draw(),this._redrawBounds=null},_clear:function(){var e=this._redrawBounds;if(e){var n=e.getSize();this._ctx.clearRect(e.min.x,e.min.y,n.x,n.y)}else this._ctx.save(),this._ctx.setTransform(1,0,0,1,0,0),this._ctx.clearRect(0,0,this._container.width,this._container.height),this._ctx.restore()},_draw:function(){var e,n=this._redrawBounds;if(this._ctx.save(),n){var r=n.getSize();this._ctx.beginPath(),this._ctx.rect(n.min.x,n.min.y,r.x,r.y),this._ctx.clip()}this._drawing=!0;for(var i=this._drawFirst;i;i=i.next)e=i.layer,(!n||e._pxBounds&&e._pxBounds.intersects(n))&&e._updatePath();this._drawing=!1,this._ctx.restore()},_updatePoly:function(e,n){if(this._drawing){var r,i,a,o,s=e._parts,c=s.length,l=this._ctx;if(c){for(l.beginPath(),r=0;r<c;r++){for(i=0,a=s[r].length;i<a;i++)o=s[r][i],l[i?`lineTo`:`moveTo`](o.x,o.y);n&&l.closePath()}this._fillStroke(l,e)}}},_updateCircle:function(e){if(!(!this._drawing||e._empty())){var n=e._point,r=this._ctx,i=Math.max(Math.round(e._radius),1),a=(Math.max(Math.round(e._radiusY),1)||i)/i;a!==1&&(r.save(),r.scale(1,a)),r.beginPath(),r.arc(n.x,n.y/a,i,0,Math.PI*2,!1),a!==1&&r.restore(),this._fillStroke(r,e)}},_fillStroke:function(e,n){var r=n.options;r.fill&&(e.globalAlpha=r.fillOpacity,e.fillStyle=r.fillColor||r.color,e.fill(r.fillRule||`evenodd`)),r.stroke&&r.weight!==0&&(e.setLineDash&&e.setLineDash(n.options&&n.options._dashArray||[]),e.globalAlpha=r.opacity,e.lineWidth=r.weight,e.strokeStyle=r.color,e.lineCap=r.lineCap,e.lineJoin=r.lineJoin,e.stroke())},_onClick:function(e){for(var n=this._map.mouseEventToLayerPoint(e),r,i,a=this._drawFirst;a;a=a.next)r=a.layer,r.options.interactive&&r._containsPoint(n)&&(!(e.type===`click`||e.type===`preclick`)||!this._map._draggableMoved(r))&&(i=r);this._fireEvent(i?[i]:!1,e)},_onMouseMove:function(e){if(!(!this._map||this._map.dragging.moving()||this._map._animatingZoom)){var n=this._map.mouseEventToLayerPoint(e);this._handleMouseHover(e,n)}},_handleMouseOut:function(e){var n=this._hoveredLayer;n&&(V(this._container,`leaflet-interactive`),this._fireEvent([n],e,`mouseout`),this._hoveredLayer=null,this._mouseHoverThrottled=!1)},_handleMouseHover:function(e,n){if(!this._mouseHoverThrottled){for(var r,i,o=this._drawFirst;o;o=o.next)r=o.layer,r.options.interactive&&r._containsPoint(n)&&(i=r);i!==this._hoveredLayer&&(this._handleMouseOut(e),i&&(B(this._container,`leaflet-interactive`),this._fireEvent([i],e,`mouseover`),this._hoveredLayer=i)),this._fireEvent(this._hoveredLayer?[this._hoveredLayer]:!1,e),this._mouseHoverThrottled=!0,setTimeout(a(function(){this._mouseHoverThrottled=!1},this),32)}},_fireEvent:function(e,n,r){this._map._fireDOMEvent(n,r||n.type,e)},_bringToFront:function(e){var n=e._order;if(n){var r=n.next,i=n.prev;if(r)r.prev=i;else return;i?i.next=r:r&&(this._drawFirst=r),n.prev=this._drawLast,this._drawLast.next=n,n.next=null,this._drawLast=n,this._requestRedraw(e)}},_bringToBack:function(e){var n=e._order;if(n){var r=n.next,i=n.prev;if(i)i.next=r;else return;r?r.prev=i:i&&(this._drawLast=i),n.prev=null,n.next=this._drawFirst,this._drawFirst.prev=n,this._drawFirst=n,this._requestRedraw(e)}}});function Wr(e){return P.canvas?new Ur(e):null}var Gr=(function(){try{return document.namespaces.add(`lvml`,`urn:schemas-microsoft-com:vml`),function(e){return document.createElement(`<lvml:`+e+` class="lvml">`)}}catch{}return function(e){return document.createElement(`<`+e+` xmlns="urn:schemas-microsoft.com:vml" class="lvml">`)}})(),Kr={_initContainer:function(){this._container=R(`div`,`leaflet-vml-container`)},_update:function(){this._map._animatingZoom||(Hr.prototype._update.call(this),this.fire(`update`))},_initPath:function(e){var n=e._container=Gr(`shape`);B(n,`leaflet-vml-shape `+(this.options.className||``)),n.coordsize=`1 1`,e._path=Gr(`path`),n.appendChild(e._path),this._updateStyle(e),this._layers[s(e)]=e},_addPath:function(e){var n=e._container;this._container.appendChild(n),e.options.interactive&&e.addInteractiveTarget(n)},_removePath:function(e){var n=e._container;z(n),e.removeInteractiveTarget(n),delete this._layers[s(e)]},_updateStyle:function(e){var n=e._stroke,r=e._fill,i=e.options,a=e._container;a.stroked=!!i.stroke,a.filled=!!i.fill,i.stroke?(n||=e._stroke=Gr(`stroke`),a.appendChild(n),n.weight=i.weight+`px`,n.color=i.color,n.opacity=i.opacity,i.dashArray?n.dashStyle=v(i.dashArray)?i.dashArray.join(` `):i.dashArray.replace(/( *, *)/g,` `):n.dashStyle=``,n.endcap=i.lineCap.replace(`butt`,`flat`),n.joinstyle=i.lineJoin):n&&(a.removeChild(n),e._stroke=null),i.fill?(r||=e._fill=Gr(`fill`),a.appendChild(r),r.color=i.fillColor||i.color,r.opacity=i.fillOpacity):r&&(a.removeChild(r),e._fill=null)},_updateCircle:function(e){var n=e._point.round(),r=Math.round(e._radius),i=Math.round(e._radiusY||r);this._setPath(e,e._empty()?`M0 0`:`AL `+n.x+`,`+n.y+` `+r+`,`+i+` 0,23592600`)},_setPath:function(e,n){e._path.v=n},_bringToFront:function(e){Et(e._container)},_bringToBack:function(e){Dt(e._container)}},qr=P.vml?Gr:_e,Jr=Hr.extend({_initContainer:function(){this._container=qr(`svg`),this._container.setAttribute(`pointer-events`,`none`),this._rootGroup=qr(`g`),this._container.appendChild(this._rootGroup)},_destroyContainer:function(){z(this._container),K(this._container),delete this._container,delete this._rootGroup,delete this._svgSize},_update:function(){if(!(this._map._animatingZoom&&this._bounds)){Hr.prototype._update.call(this);var e=this._bounds,n=e.getSize(),r=this._container;(!this._svgSize||!this._svgSize.equals(n))&&(this._svgSize=n,r.setAttribute(`width`,n.x),r.setAttribute(`height`,n.y)),U(r,e.min),r.setAttribute(`viewBox`,[e.min.x,e.min.y,n.x,n.y].join(` `)),this.fire(`update`)}},_initPath:function(e){var n=e._path=qr(`path`);e.options.className&&B(n,e.options.className),e.options.interactive&&B(n,`leaflet-interactive`),this._updateStyle(e),this._layers[s(e)]=e},_addPath:function(e){this._rootGroup||this._initContainer(),this._rootGroup.appendChild(e._path),e.addInteractiveTarget(e._path)},_removePath:function(e){z(e._path),e.removeInteractiveTarget(e._path),delete this._layers[s(e)]},_updatePath:function(e){e._project(),e._update()},_updateStyle:function(e){var n=e._path,r=e.options;n&&(r.stroke?(n.setAttribute(`stroke`,r.color),n.setAttribute(`stroke-opacity`,r.opacity),n.setAttribute(`stroke-width`,r.weight),n.setAttribute(`stroke-linecap`,r.lineCap),n.setAttribute(`stroke-linejoin`,r.lineJoin),r.dashArray?n.setAttribute(`stroke-dasharray`,r.dashArray):n.removeAttribute(`stroke-dasharray`),r.dashOffset?n.setAttribute(`stroke-dashoffset`,r.dashOffset):n.removeAttribute(`stroke-dashoffset`)):n.setAttribute(`stroke`,`none`),r.fill?(n.setAttribute(`fill`,r.fillColor||r.color),n.setAttribute(`fill-opacity`,r.fillOpacity),n.setAttribute(`fill-rule`,r.fillRule||`evenodd`)):n.setAttribute(`fill`,`none`))},_updatePoly:function(e,n){this._setPath(e,ve(e._parts,n))},_updateCircle:function(e){var n=e._point,r=Math.max(Math.round(e._radius),1),i=Math.max(Math.round(e._radiusY),1)||r,a=`a`+r+`,`+i+` 0 1,0 `,o=e._empty()?`M0 0`:`M`+(n.x-r)+`,`+n.y+a+r*2+`,0 `+a+-r*2+`,0 `;this._setPath(e,o)},_setPath:function(e,n){e._path.setAttribute(`d`,n)},_bringToFront:function(e){Et(e._path)},_bringToBack:function(e){Dt(e._path)}});P.vml&&Jr.include(Kr);function Yr(e){return P.svg||P.vml?new Jr(e):null}J.include({getRenderer:function(e){var n=e.options.renderer||this._getPaneRenderer(e.options.pane)||this.options.renderer||this._renderer;return n||=this._renderer=this._createRenderer(),this.hasLayer(n)||this.addLayer(n),n},_getPaneRenderer:function(e){if(e===`overlayPane`||e===void 0)return!1;var n=this._paneRenderers[e];return n===void 0&&(n=this._createRenderer({pane:e}),this._paneRenderers[e]=n),n},_createRenderer:function(e){return this.options.preferCanvas&&Wr(e)||Yr(e)}});var Xr=ur.extend({initialize:function(e,n){ur.prototype.initialize.call(this,this._boundsToLatLngs(e),n)},setBounds:function(e){return this.setLatLngs(this._boundsToLatLngs(e))},_boundsToLatLngs:function(e){return e=D(e),[e.getSouthWest(),e.getNorthWest(),e.getNorthEast(),e.getSouthEast()]}});function Zr(e,n){return new Xr(e,n)}Jr.create=qr,Jr.pointsToPath=ve,fr.geometryToLayer=pr,fr.coordsToLatLng=hr,fr.coordsToLatLngs=gr,fr.latLngToCoords=_r,fr.latLngsToCoords=vr,fr.getFeature=yr,fr.asFeature=br,J.mergeOptions({boxZoom:!0});var Qr=X.extend({initialize:function(e){this._map=e,this._container=e._container,this._pane=e._panes.overlayPane,this._resetStateTimeout=0,e.on(`unload`,this._destroy,this)},addHooks:function(){W(this._container,`mousedown`,this._onMouseDown,this)},removeHooks:function(){K(this._container,`mousedown`,this._onMouseDown,this)},moved:function(){return this._moved},_destroy:function(){z(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(e){if(!e.shiftKey||e.which!==1&&e.button!==1)return!1;this._clearDeferredResetState(),this._resetState(),Ft(),zt(),this._startPoint=this._map.mouseEventToContainerPoint(e),W(document,{contextmenu:tn,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseMove:function(e){this._moved||(this._moved=!0,this._box=R(`div`,`leaflet-zoom-box`,this._container),B(this._container,`leaflet-crosshair`),this._map.fire(`boxzoomstart`)),this._point=this._map.mouseEventToContainerPoint(e);var n=new w(this._point,this._startPoint),r=n.getSize();U(this._box,n.min),this._box.style.width=r.x+`px`,this._box.style.height=r.y+`px`},_finish:function(){this._moved&&(z(this._box),V(this._container,`leaflet-crosshair`)),It(),Bt(),K(document,{contextmenu:tn,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseUp:function(e){if(!(e.which!==1&&e.button!==1)&&(this._finish(),this._moved)){this._clearDeferredResetState(),this._resetStateTimeout=setTimeout(a(this._resetState,this),0);var n=new E(this._map.containerPointToLatLng(this._startPoint),this._map.containerPointToLatLng(this._point));this._map.fitBounds(n).fire(`boxzoomend`,{boxZoomBounds:n})}},_onKeyDown:function(e){e.keyCode===27&&(this._finish(),this._clearDeferredResetState(),this._resetState())}});J.addInitHook(`addHandler`,`boxZoom`,Qr),J.mergeOptions({doubleClickZoom:!0});var $r=X.extend({addHooks:function(){this._map.on(`dblclick`,this._onDoubleClick,this)},removeHooks:function(){this._map.off(`dblclick`,this._onDoubleClick,this)},_onDoubleClick:function(e){var n=this._map,r=n.getZoom(),i=n.options.zoomDelta,a=e.originalEvent.shiftKey?r-i:r+i;n.options.doubleClickZoom===`center`?n.setZoom(a):n.setZoomAround(e.containerPoint,a)}});J.addInitHook(`addHandler`,`doubleClickZoom`,$r),J.mergeOptions({dragging:!0,inertia:!0,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,easeLinearity:.2,worldCopyJump:!1,maxBoundsViscosity:0});var ei=X.extend({addHooks:function(){if(!this._draggable){var e=this._map;this._draggable=new xn(e._mapPane,e._container),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),this._draggable.on(`predrag`,this._onPreDragLimit,this),e.options.worldCopyJump&&(this._draggable.on(`predrag`,this._onPreDragWrap,this),e.on(`zoomend`,this._onZoomEnd,this),e.whenReady(this._onZoomEnd,this))}B(this._map._container,`leaflet-grab leaflet-touch-drag`),this._draggable.enable(),this._positions=[],this._times=[]},removeHooks:function(){V(this._map._container,`leaflet-grab`),V(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 e=this._map;if(e._stop(),this._map.options.maxBounds&&this._map.options.maxBoundsViscosity){var n=D(this._map.options.maxBounds);this._offsetLimit=T(this._map.latLngToContainerPoint(n.getNorthWest()).multiplyBy(-1),this._map.latLngToContainerPoint(n.getSouthEast()).multiplyBy(-1).add(this._map.getSize())),this._viscosity=Math.min(1,Math.max(0,this._map.options.maxBoundsViscosity))}else this._offsetLimit=null;e.fire(`movestart`).fire(`dragstart`),e.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(e){if(this._map.options.inertia){var n=this._lastTime=+new Date,r=this._lastPos=this._draggable._absPos||this._draggable._newPos;this._positions.push(r),this._times.push(n),this._prunePositions(n)}this._map.fire(`move`,e).fire(`drag`,e)},_prunePositions:function(e){for(;this._positions.length>1&&e-this._times[0]>50;)this._positions.shift(),this._times.shift()},_onZoomEnd:function(){var e=this._map.getSize().divideBy(2);this._initialWorldOffset=this._map.latLngToLayerPoint([0,0]).subtract(e).x,this._worldWidth=this._map.getPixelWorldBounds().getSize().x},_viscousLimit:function(e,n){return e-(e-n)*this._viscosity},_onPreDragLimit:function(){if(!(!this._viscosity||!this._offsetLimit)){var e=this._draggable._newPos.subtract(this._draggable._startPos),n=this._offsetLimit;e.x<n.min.x&&(e.x=this._viscousLimit(e.x,n.min.x)),e.y<n.min.y&&(e.y=this._viscousLimit(e.y,n.min.y)),e.x>n.max.x&&(e.x=this._viscousLimit(e.x,n.max.x)),e.y>n.max.y&&(e.y=this._viscousLimit(e.y,n.max.y)),this._draggable._newPos=this._draggable._startPos.add(e)}},_onPreDragWrap:function(){var e=this._worldWidth,n=Math.round(e/2),r=this._initialWorldOffset,i=this._draggable._newPos.x,a=(i-n+r)%e+n-r,o=(i+n+r)%e-n-r,s=Math.abs(a+r)<Math.abs(o+r)?a:o;this._draggable._absPos=this._draggable._newPos.clone(),this._draggable._newPos.x=s},_onDragEnd:function(e){var n=this._map,r=n.options,i=!r.inertia||e.noInertia||this._times.length<2;if(n.fire(`dragend`,e),i)n.fire(`moveend`);else{this._prunePositions(+new Date);var a=this._lastPos.subtract(this._positions[0]),o=(this._lastTime-this._times[0])/1e3,s=r.easeLinearity,c=a.multiplyBy(s/o),l=c.distanceTo([0,0]),u=Math.min(r.inertiaMaxSpeed,l),d=c.multiplyBy(u/l),f=u/(r.inertiaDeceleration*s),p=d.multiplyBy(-f/2).round();!p.x&&!p.y?n.fire(`moveend`):(p=n._limitOffset(p,n.options.maxBounds),y(function(){n.panBy(p,{duration:f,easeLinearity:s,noMoveStart:!0,animate:!0})}))}}});J.addInitHook(`addHandler`,`dragging`,ei),J.mergeOptions({keyboard:!0,keyboardPanDelta:80});var ti=X.extend({keyCodes:{left:[37],right:[39],down:[40],up:[38],zoomIn:[187,107,61,171],zoomOut:[189,109,54,173]},initialize:function(e){this._map=e,this._setPanDelta(e.options.keyboardPanDelta),this._setZoomDelta(e.options.zoomDelta)},addHooks:function(){var e=this._map._container;e.tabIndex<=0&&(e.tabIndex=`0`),W(e,{focus:this._onFocus,blur:this._onBlur,mousedown:this._onMouseDown},this),this._map.on({focus:this._addHooks,blur:this._removeHooks},this)},removeHooks:function(){this._removeHooks(),K(this._map._container,{focus:this._onFocus,blur:this._onBlur,mousedown:this._onMouseDown},this),this._map.off({focus:this._addHooks,blur:this._removeHooks},this)},_onMouseDown:function(){if(!this._focused){var e=document.body,n=document.documentElement,r=e.scrollTop||n.scrollTop,i=e.scrollLeft||n.scrollLeft;this._map._container.focus(),window.scrollTo(i,r)}},_onFocus:function(){this._focused=!0,this._map.fire(`focus`)},_onBlur:function(){this._focused=!1,this._map.fire(`blur`)},_setPanDelta:function(e){var n=this._panKeys={},r=this.keyCodes,i,a;for(i=0,a=r.left.length;i<a;i++)n[r.left[i]]=[-1*e,0];for(i=0,a=r.right.length;i<a;i++)n[r.right[i]]=[e,0];for(i=0,a=r.down.length;i<a;i++)n[r.down[i]]=[0,e];for(i=0,a=r.up.length;i<a;i++)n[r.up[i]]=[0,-1*e]},_setZoomDelta:function(e){var n=this._zoomKeys={},r=this.keyCodes,i,a;for(i=0,a=r.zoomIn.length;i<a;i++)n[r.zoomIn[i]]=e;for(i=0,a=r.zoomOut.length;i<a;i++)n[r.zoomOut[i]]=-e},_addHooks:function(){W(document,`keydown`,this._onKeyDown,this)},_removeHooks:function(){K(document,`keydown`,this._onKeyDown,this)},_onKeyDown:function(e){if(!(e.altKey||e.ctrlKey||e.metaKey)){var n=e.keyCode,r=this._map,i;if(n in this._panKeys){if(!r._panAnim||!r._panAnim._inProgress)if(i=this._panKeys[n],e.shiftKey&&(i=C(i).multiplyBy(3)),r.options.maxBounds&&(i=r._limitOffset(C(i),r.options.maxBounds)),r.options.worldCopyJump){var a=r.wrapLatLng(r.unproject(r.project(r.getCenter()).add(i)));r.panTo(a)}else r.panBy(i)}else if(n in this._zoomKeys)r.setZoom(r.getZoom()+(e.shiftKey?3:1)*this._zoomKeys[n]);else if(n===27&&r._popup&&r._popup.options.closeOnEscapeKey)r.closePopup();else return;tn(e)}}});J.addInitHook(`addHandler`,`keyboard`,ti),J.mergeOptions({scrollWheelZoom:!0,wheelDebounceTime:40,wheelPxPerZoomLevel:60});var ni=X.extend({addHooks:function(){W(this._map._container,`wheel`,this._onWheelScroll,this),this._delta=0},removeHooks:function(){K(this._map._container,`wheel`,this._onWheelScroll,this)},_onWheelScroll:function(e){var n=on(e),r=this._map.options.wheelDebounceTime;this._delta+=n,this._lastMousePos=this._map.mouseEventToContainerPoint(e),this._startTime||=+new Date;var i=Math.max(r-(+new Date-this._startTime),0);clearTimeout(this._timer),this._timer=setTimeout(a(this._performZoom,this),i),tn(e)},_performZoom:function(){var e=this._map,n=e.getZoom(),r=this._map.options.zoomSnap||0;e._stop();var i=this._delta/(this._map.options.wheelPxPerZoomLevel*4),a=4*Math.log(2/(1+Math.exp(-Math.abs(i))))/Math.LN2,o=r?Math.ceil(a/r)*r:a,s=e._limitZoom(n+(this._delta>0?o:-o))-n;this._delta=0,this._startTime=null,s&&(e.options.scrollWheelZoom===`center`?e.setZoom(n+s):e.setZoomAround(this._lastMousePos,n+s))}});J.addInitHook(`addHandler`,`scrollWheelZoom`,ni);var ri=600;J.mergeOptions({tapHold:P.touchNative&&P.safari&&P.mobile,tapTolerance:15});var ii=X.extend({addHooks:function(){W(this._map._container,`touchstart`,this._onDown,this)},removeHooks:function(){K(this._map._container,`touchstart`,this._onDown,this)},_onDown:function(e){if(clearTimeout(this._holdTimeout),e.touches.length===1){var n=e.touches[0];this._startPos=this._newPos=new S(n.clientX,n.clientY),this._holdTimeout=setTimeout(a(function(){this._cancel(),this._isTapValid()&&(W(document,`touchend`,q),W(document,`touchend touchcancel`,this._cancelClickPrevent),this._simulateEvent(`contextmenu`,n))},this),ri),W(document,`touchend touchcancel contextmenu`,this._cancel,this),W(document,`touchmove`,this._onMove,this)}},_cancelClickPrevent:function e(){K(document,`touchend`,q),K(document,`touchend touchcancel`,e)},_cancel:function(){clearTimeout(this._holdTimeout),K(document,`touchend touchcancel contextmenu`,this._cancel,this),K(document,`touchmove`,this._onMove,this)},_onMove:function(e){var n=e.touches[0];this._newPos=new S(n.clientX,n.clientY)},_isTapValid:function(){return this._newPos.distanceTo(this._startPos)<=this._map.options.tapTolerance},_simulateEvent:function(e,n){var r=new MouseEvent(e,{bubbles:!0,cancelable:!0,view:window,screenX:n.screenX,screenY:n.screenY,clientX:n.clientX,clientY:n.clientY});r._simulated=!0,n.target.dispatchEvent(r)}});J.addInitHook(`addHandler`,`tapHold`,ii),J.mergeOptions({touchZoom:P.touch,bounceAtZoomLimits:!0});var ai=X.extend({addHooks:function(){B(this._map._container,`leaflet-touch-zoom`),W(this._map._container,`touchstart`,this._onTouchStart,this)},removeHooks:function(){V(this._map._container,`leaflet-touch-zoom`),K(this._map._container,`touchstart`,this._onTouchStart,this)},_onTouchStart:function(e){var n=this._map;if(!(!e.touches||e.touches.length!==2||n._animatingZoom||this._zooming)){var r=n.mouseEventToContainerPoint(e.touches[0]),i=n.mouseEventToContainerPoint(e.touches[1]);this._centerPoint=n.getSize()._divideBy(2),this._startLatLng=n.containerPointToLatLng(this._centerPoint),n.options.touchZoom!==`center`&&(this._pinchStartLatLng=n.containerPointToLatLng(r.add(i)._divideBy(2))),this._startDist=r.distanceTo(i),this._startZoom=n.getZoom(),this._moved=!1,this._zooming=!0,n._stop(),W(document,`touchmove`,this._onTouchMove,this),W(document,`touchend touchcancel`,this._onTouchEnd,this),q(e)}},_onTouchMove:function(e){if(!(!e.touches||e.touches.length!==2||!this._zooming)){var n=this._map,r=n.mouseEventToContainerPoint(e.touches[0]),i=n.mouseEventToContainerPoint(e.touches[1]),o=r.distanceTo(i)/this._startDist;if(this._zoom=n.getScaleZoom(o,this._startZoom),!n.options.bounceAtZoomLimits&&(this._zoom<n.getMinZoom()&&o<1||this._zoom>n.getMaxZoom()&&o>1)&&(this._zoom=n._limitZoom(this._zoom)),n.options.touchZoom===`center`){if(this._center=this._startLatLng,o===1)return}else{var s=r._add(i)._divideBy(2)._subtract(this._centerPoint);if(o===1&&s.x===0&&s.y===0)return;this._center=n.unproject(n.project(this._pinchStartLatLng,this._zoom).subtract(s),this._zoom)}this._moved||=(n._moveStart(!0,!1),!0),b(this._animRequest),this._animRequest=y(a(n._move,n,this._center,this._zoom,{pinch:!0,round:!1},void 0),this,!0),q(e)}},_onTouchEnd:function(){if(!this._moved||!this._zooming){this._zooming=!1;return}this._zooming=!1,b(this._animRequest),K(document,`touchmove`,this._onTouchMove,this),K(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`,ai),J.BoxZoom=Qr,J.DoubleClickZoom=$r,J.Drag=ei,J.Keyboard=ti,J.ScrollWheelZoom=ni,J.TapHold=ii,J.TouchZoom=ai,e.Bounds=w,e.Browser=P,e.CRS=A,e.Canvas=Ur,e.Circle=or,e.CircleMarker=ir,e.Class=ce,e.Control=Y,e.DivIcon=Pr,e.DivOverlay=$,e.DomEvent=cn,e.DomUtil=qt,e.Draggable=xn,e.Evented=ue,e.FeatureGroup=Yn,e.GeoJSON=fr,e.GridLayer=Ir,e.Handler=X,e.Icon=Zn,e.ImageOverlay=wr,e.LatLng=O,e.LatLngBounds=E,e.Layer=Q,e.LayerGroup=qn,e.LineUtil=Bn,e.Map=J,e.Marker=tr,e.Mixin=yn,e.Path=rr,e.Point=S,e.PolyUtil=Tn,e.Polygon=ur,e.Polyline=cr,e.Popup=Ar,e.PosAnimation=ln,e.Projection=Un,e.Rectangle=Xr,e.Renderer=Hr,e.SVG=Jr,e.SVGOverlay=Or,e.TileLayer=Rr,e.Tooltip=Mr,e.Transformation=me,e.Util=se,e.VideoOverlay=Er,e.bind=a,e.bounds=T,e.canvas=Wr,e.circle=sr,e.circleMarker=ar,e.control=dn,e.divIcon=Fr,e.extend=r,e.featureGroup=Xn,e.geoJSON=Sr,e.geoJson=Cr,e.gridLayer=Lr,e.icon=Qn,e.imageOverlay=Tr,e.latLng=k,e.latLngBounds=D,e.layerGroup=Jn,e.map=un,e.marker=nr,e.point=C,e.polygon=dr,e.polyline=lr,e.popup=jr,e.rectangle=Zr,e.setOptions=m,e.stamp=s,e.svg=Yr,e.svgOverlay=kr,e.tileLayer=zr,e.tooltip=Nr,e.transformation=M,e.version=n,e.videoOverlay=Dr;var oi=window.L;e.noConflict=function(){return window.L=oi,this},window.L=e}))}))(),1),Re=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAABSCAMAAAAhFXfZAAAC91BMVEVMaXEzeak2f7I4g7g3g7cua5gzeKg8hJo3grY4g7c3grU0gLI2frE0daAubJc2gbQwd6QzeKk2gLMtd5sxdKIua5g1frA2f7IydaM0e6w2fq41fK01eqo3grgubJgta5cxdKI1f7AydaQydaMxc6EubJgvbJkwcZ4ubZkwcJwubZgubJcydqUydKIxapgubJctbJcubZcubJcvbJYubJcvbZkubJctbJctbZcubJg2f7AubJcrbZcubJcubJcua5g3grY0fq8ubJcubJdEkdEwhsw6i88vhswuhcsuhMtBjMgthMsrg8srgss6is8qgcs8i9A9iMYtg8spgcoogMo7hcMngMonf8olfso4gr8kfck5iM8jfMk4iM8he8k1fro7itAgesk2hs8eecgzfLcofssdeMg0hc4cd8g2hcsxeLQbdsgZdcgxeLImfcszhM0vda4xgckzhM4xg84wf8Yxgs4udKsvfcQucqhUndROmdM1fK0wcZ8vb5w0eqpQm9MzeKhXoNVcpdYydKNWn9VZotVKltJFjsIwcJ1Rms9OlslLmtH///8+kc9epdYzd6dbo9VHkMM2f7FHmNBClM8ydqVcpNY9hro3gLM9hLczealQmcw3fa46f7A8gLMxc6I3eagyc6FIldJMl9JSnNRSntNNl9JPnNJFi75UnM9ZodVKksg8kM45jc09e6ZHltFBk883gbRBh7pDk9EwcaBzn784g7dKkcY2i81Om9M7j85Llc81is09g7Q4grY/j9A0eqxKmdFFltBEjcXf6fFImdBCiLxJl9FGlNFBi78yiMxVndEvbpo6js74+vx+psPP3+o/ks5HkcpGmNCjwdZCkNDM3ehYoNJEls+lxNkxh8xHks0+jdC1zd5Lg6r+/v/H2ufz9/o3jM3t8/edvdM/k89Th61OiLBSjbZklbaTt9BfptdjmL1AicBHj8hGk9FAgK1dkLNTjLRekrdClc/k7fM0icy0y9tgp9c4jc2NtM9Dlc8zicxeXZn3AAAAQ3RSTlMAHDdTb4yPA+LtnEQmC4L2EmHqB7XA0d0sr478x4/Yd5i1zOfyPkf1sLVq4Nh3FvjxopQ2/STNuFzUwFIwxKaejILpIBEV9wAABhVJREFUeF6s1NdyFEcYBeBeoQIhRAkLlRDGrhIgY3BJL8CVeKzuyXFzzjkn5ZxzzuScg3PO8cKzu70JkO0LfxdTU//pM9vTu7Xgf6KqOVTb9X7toRrVEfBf1HTVjZccrT/2by1VV928Yty9ZbVuucdz90frG8DBjl9pVApbOstvmMuvVgaNXSfAAd6pGxpy6yxf5ph43pS/4f3uoaGm2rdu72S9xzOvMymkZFq/ptDrk90mhW7e4zl7HLzhxGWPR20xmSxJ/VqldG5m9XhaVOA1DadsNh3Pu5L2N6QtPO/32JpqQBVVk20oy/Pi2s23WEvyfHbe1thadVQttvm7Llf65gGmXK67XtupyoM7HQhmXdLS8oGWJNeOJ3C5fG5XCEJnkez3/oFdsvgJ4l2ANZwhrJKk/7OSXa+3Vw2WJMlKnGkobouYk6T0TyX30klOUnTD9HJ5qpckL3EW/w4XF3Xd0FGywXUrstrclVsqz5Pd/sXFYyDnPdrLcQODmGOK47IZb4CmibmMn+MYRzFZ5jg33ZL/EJrWcszHmANy3ARBK/IXtciJy8VsitPSdE3uuHxzougojcUdr8/32atnz/ev3f/K5wtpxUTpcaI45zusVDpYtZi+jg0oU9b3x74h7+n9ABvYEZeKaVq0sh0AtLKsFtqNBdeT0MrSzwwlq9+x6xAO4tgOtSzbCjrNQQiNvQUbUEubvzBUeGw26yDCsRHCoLkTHDa7IdOLIThs/gHvChszh2CimE8peRs47cxANI0lYNB5y1DljpOF0IhzBDPOZnDOqYYbeGKECbPzWnXludPphw5c2YBq5zlwXphIbO4VDCZ0gnPfUO1TwZoYwAs2ExPCedAu9DAjfQUjzITQb3jNj0KG2Sgt6BHaQUdYzWz+XmBktOHwanXjaSTcwwziBcuMOtwBmqPrTOxFQR/DRKKPqyur0aiW6cULYsx6tBm0jXpR/AUWR6HRq9WVW6MRhIq5jLyjbaCTDCijyYJNpCajdyobP/eTw0iexBAKkJ3gA5KcQb2zBXsIBckn+xVv8jkZSaEFHE+jFEleAEfayRU0MouNoBmB/L50Ai/HSLIHxcrpCvnhSQAuakKp2C/YbCylJjXRVy/z3+Kv/RrNcCo+WUzlVEhzKffnTQnxeN9fWF88fiNCUdSTsaufaChKWInHeysygfpIqagoakW+vV20J8uyl6TyNKEZWV4oRSPyCkWpgOLSbkCObT8o2r6tlG58HQquf6O0v50tB7JM7F4EORd2dx/K0w/KHsVkLPaoYrwgP/y7krr3SSMA4zj+OBgmjYkxcdIJQyQRKgg2viX9Hddi9UBb29LrKR7CVVEEEXWojUkXNyfTNDE14W9gbHJNuhjDettN3ZvbOvdOqCD3Jp/9l+/wJE+9PkYGjx/fqkys3S2rMozM/o2106rfMUINo6hVqz+eu/hd1c4xTg0TAfy5kV+4UG6+IthHTU9woWmxuKNbTfuCSfovBCxq7EtHqvYL4Sm6F8GVxsSXHMQ07TOi1DKtZxjWaaIyi4CXWjxPccUw8WVbMYY5wxC1mzEyXMJWkllpRloi+Kkoq69sxBTlElF6aAxYUbjXNlhlDZilDnM4U5SlN5biRsRHnbx3mbeWjEh4mEyiuJDl5XcWVmX5GvNkFgLWZM5qwsop4/AWfLhU1cR7k1VVvcYCWRkOI6Xy5gmnphCYIkvzuNYzHzosq2oNk2RtSs8khfUOfHIDgR6ysYBaMpl4uEgk2U/oJTs9AaTSwma7dT69geAE2ZpEjUsn2ieJNHeKfrI3EcAGJ2ZaNgVuC8EBctCLc57P5u5led6IOBkIYkuQMrmmjChs4VkfOerHqSBkPzZlhe06RslZ3zMjk2sscqKwY0RcjKK+LWbzd7KiHhkncs/siFJ+V5eXxD34B8nVuJEpGJNmxN2gH3vSvp7J70tF+D1Ej8qUJD1TkErAND2GZwTFg/LubvmgiBG3SOvdlsqFQrkEzJCL1rstlnVFROixZoDDSuXQFHESwVGlcuQcMb/b42NgjLowh5MTDFE3vNB5qStRIErdCQEh6pLPR92anSUb/wAIhldAaDMpGgAAAABJRU5ErkJggg==`,ze=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAApCAYAAADAk4LOAAAFgUlEQVR4Aa1XA5BjWRTN2oW17d3YaZtr2962HUzbDNpjszW24mRt28p47v7zq/bXZtrp/lWnXr337j3nPCe85NcypgSFdugCpW5YoDAMRaIMqRi6aKq5E3YqDQO3qAwjVWrD8Ncq/RBpykd8oZUb/kaJutow8r1aP9II0WmLKLIsJyv1w/kqw9Ch2MYdB++12Onxee/QMwvf4/Dk/Lfp/i4nxTXtOoQ4pW5Aj7wpici1A9erdAN2OH64x8OSP9j3Ft3b7aWkTg/Fm91siTra0f9on5sQr9INejH6CUUUpavjFNq1B+Oadhxmnfa8RfEmN8VNAsQhPqF55xHkMzz3jSmChWU6f7/XZKNH+9+hBLOHYozuKQPxyMPUKkrX/K0uWnfFaJGS1QPRtZsOPtr3NsW0uyh6NNCOkU3Yz+bXbT3I8G3xE5EXLXtCXbbqwCO9zPQYPRTZ5vIDXD7U+w7rFDEoUUf7ibHIR4y6bLVPXrz8JVZEql13trxwue/uDivd3fkWRbS6/IA2bID4uk0UpF1N8qLlbBlXs4Ee7HLTfV1j54APvODnSfOWBqtKVvjgLKzF5YdEk5ewRkGlK0i33Eofffc7HT56jD7/6U+qH3Cx7SBLNntH5YIPvODnyfIXZYRVDPqgHtLs5ABHD3YzLuespb7t79FY34DjMwrVrcTuwlT55YMPvOBnRrJ4VXTdNnYug5ucHLBjEpt30701A3Ts+HEa73u6dT3FNWwflY86eMHPk+Yu+i6pzUpRrW7SNDg5JHR4KapmM5Wv2E8Tfcb1HoqqHMHU+uWDD7zg54mz5/2BSnizi9T1Dg4QQXLToGNCkb6tb1NU+QAlGr1++eADrzhn/u8Q2YZhQVlZ5+CAOtqfbhmaUCS1ezNFVm2imDbPmPng5wmz+gwh+oHDce0eUtQ6OGDIyR0uUhUsoO3vfDmmgOezH0mZN59x7MBi++WDL1g/eEiU3avlidO671bkLfwbw5XV2P8Pzo0ydy4t2/0eu33xYSOMOD8hTf4CrBtGMSoXfPLchX+J0ruSePw3LZeK0juPJbYzrhkH0io7B3k164hiGvawhOKMLkrQLyVpZg8rHFW7E2uHOL888IBPlNZ1FPzstSJM694fWr6RwpvcJK60+0HCILTBzZLFNdtAzJaohze60T8qBzyh5ZuOg5e7uwQppofEmf2++DYvmySqGBuKaicF1blQjhuHdvCIMvp8whTTfZzI7RldpwtSzL+F1+wkdZ2TBOW2gIF88PBTzD/gpeREAMEbxnJcaJHNHrpzji0gQCS6hdkEeYt9DF/2qPcEC8RM28Hwmr3sdNyht00byAut2k3gufWNtgtOEOFGUwcXWNDbdNbpgBGxEvKkOQsxivJx33iow0Vw5S6SVTrpVq11ysA2Rp7gTfPfktc6zhtXBBC+adRLshf6sG2RfHPZ5EAc4sVZ83yCN00Fk/4kggu40ZTvIEm5g24qtU4KjBrx/BTTH8ifVASAG7gKrnWxJDcU7x8X6Ecczhm3o6YicvsLXWfh3Ch1W0k8x0nXF+0fFxgt4phz8QvypiwCCFKMqXCnqXExjq10beH+UUA7+nG6mdG/Pu0f3LgFcGrl2s0kNNjpmoJ9o4B29CMO8dMT4Q5ox8uitF6fqsrJOr8qnwNbRzv6hSnG5wP+64C7h9lp30hKNtKdWjtdkbuPA19nJ7Tz3zR/ibgARbhb4AlhavcBebmTHcFl2fvYEnW0ox9xMxKBS8btJ+KiEbq9zA4RthQXDhPa0T9TEe69gWupwc6uBUphquXgf+/FrIjweHQS4/pduMe5ERUMHUd9xv8ZR98CxkS4F2n3EUrUZ10EYNw7BWm9x1GiPssi3GgiGRDKWRYZfXlON+dfNbM+GgIwYdwAAAAASUVORK5CYII=`,Be=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACkAAAApCAQAAAACach9AAACMUlEQVR4Ae3ShY7jQBAE0Aoz/f9/HTMzhg1zrdKUrJbdx+Kd2nD8VNudfsL/Th///dyQN2TH6f3y/BGpC379rV+S+qqetBOxImNQXL8JCAr2V4iMQXHGNJxeCfZXhSRBcQMfvkOWUdtfzlLgAENmZDcmo2TVmt8OSM2eXxBp3DjHSMFutqS7SbmemzBiR+xpKCNUIRkdkkYxhAkyGoBvyQFEJEefwSmmvBfJuJ6aKqKWnAkvGZOaZXTUgFqYULWNSHUckZuR1HIIimUExutRxwzOLROIG4vKmCKQt364mIlhSyzAf1m9lHZHJZrlAOMMztRRiKimp/rpdJDc9Awry5xTZCte7FHtuS8wJgeYGrex28xNTd086Dik7vUMscQOa8y4DoGtCCSkAKlNwpgNtphjrC6MIHUkR6YWxxs6Sc5xqn222mmCRFzIt8lEdKx+ikCtg91qS2WpwVfBelJCiQJwvzixfI9cxZQWgiSJelKnwBElKYtDOb2MFbhmUigbReQBV0Cg4+qMXSxXSyGUn4UbF8l+7qdSGnTC0XLCmahIgUHLhLOhpVCtw4CzYXvLQWQbJNmxoCsOKAxSgBJno75avolkRw8iIAFcsdc02e9iyCd8tHwmeSSoKTowIgvscSGZUOA7PuCN5b2BX9mQM7S0wYhMNU74zgsPBj3HU7wguAfnxxjFQGBE6pwN+GjME9zHY7zGp8wVxMShYX9NXvEWD3HbwJf4giO4CFIQxXScH1/TM+04kkBiAAAAAElFTkSuQmCC`,Ve=8;window.app=window.app||{},window.app.components=window.app.components||{},window.app.components.leaflet=function(e={}){let n=store({rid:void 0,id:void 0,hidden:void 0,inert:void 0,className:``,point:{lat:0,lon:0},onchange:function(e){}}),r=app.utils.extendStore(n,e),i,a,o;r.push(watch(()=>{n.point.lat>90&&(n.point.lat=90),n.point.lat<-90&&(n.point.lat=-90),n.point.lon>180&&(n.point.lon=180),n.point.lon<-180&&(n.point.lon=-180)},()=>{s()}));function s(e=200){i&&(clearTimeout(o),o=setTimeout(()=>{a?.setLatLng([n.point.lat,n.point.lon]),i?.panInside([n.point.lat,n.point.lon],{padding:[20,40]})},e))}function c(e){let r=[He(n.point.lat),He(n.point.lon)];i=Le.default.map(e,{zoomControl:!1}).setView(r,Ve),Le.default.tileLayer(`https://tile.openstreetmap.org/{z}/{x}/{y}.png`,{attribution:`&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>`}).addTo(i),Le.default.Icon.Default.prototype.options.iconUrl=ze,Le.default.Icon.Default.prototype.options.iconRetinaUrl=Re,Le.default.Icon.Default.prototype.options.shadowUrl=Be,Le.default.Icon.Default.imagePath=``,a=Le.default.marker(r,{draggable:!0,autoPan:!0}).addTo(i),a.bindTooltip(`drag or right click anywhere on the map to move`),a.on(`moveend`,e=>{e.sourceTarget?._latlng&&u(e.sourceTarget._latlng.lat,e.sourceTarget._latlng.lng,!1)}),i.on(`contextmenu`,e=>{u(e.latlng.lat,e.latlng.lng,!1)})}function l(){clearTimeout(o),a?.remove(),i?.remove()}function u(e,r,o=!0){let s={lat:He(e),lon:He(r)};n.onchange&&n.onchange(s)===!1||(n.point=s,o&&(a?.setLatLng([n.point.lat,n.point.lon]),i?.panTo([n.point.lat,n.point.lon],{animate:!1})),i.getContainer()?.dispatchEvent(new CustomEvent(`change`,{detail:s})),f?.())}let[d,f]=Ue(u);return t.div({rid:n.rid,id:()=>n.id,hidden:()=>n.hidden,inert:()=>n.inert,className:`map-container`,onunmount:()=>{r.forEach(e=>e?.unwatch())}},d,t.div({className:`map-box`,onmount:e=>{c(e)},onunmount:()=>{l()}}))};function He(e){return+(+e).toFixed(6)||0}function Ue(e=null){let n=store({searchTerm:``,isSearching:!1,searchResults:[]}),r,i;function a(){i?.abort(`reset`),clearTimeout(r),n.isSearching=!1,n.searchResults=[],n.searchTerm=``}function o(e=1100){if(clearTimeout(r),i?.abort(`search debounce`),n.isSearching=!0,n.searchResults=[],!n.searchTerm){n.isSearching=!1;return}r=setTimeout(async()=>{try{i=new AbortController;let e=await fetch(`https://nominatim.openstreetmap.org/search.php?format=jsonv2&q=`+encodeURIComponent(n.searchTerm),{signal:i.signal});if(e.status!=200)throw Error(`OpenStreetMap API error `+e.status);let r=[],a=await e.json();for(let e of a)r.push({lat:e.lat,lon:e.lon,name:e.display_name});n.searchResults=r}catch(e){console.warn(`[address search failed]`,e)}n.isSearching=!1},e)}let s=t.div({className:`fields`},t.div({className:`field`},t.input({type:`text`,placeholder:`Search address...`,value:()=>n.searchTerm,oninput:e=>n.searchTerm=e.target.value})),t.div({className:`field addon p-l-10 p-r-10`},()=>{if(n.isSearching)return t.span({className:`loader sm`});if(n.searchTerm.length)return t.button({className:`link-hint`,title:`Clear search`,onclick:()=>a()},t.i({className:`ri-close-line`,ariaHidden:!0}))})),c=t.div({className:`dropdown`,popover:`manual`},()=>n.searchResults.map(n=>t.button({type:`button`,className:`dropdown-item`,title:`Select address coordinates`,onclick:()=>e?.(n.lat,n.lon)},n.name))),l=[];return[t.div({className:`map-search`,onmount:()=>{l.push(watch(()=>n.searchTerm,e=>{o(e)})),l.push(watch(()=>n.searchResults,e=>{e.length?c.showPopover({source:s}):c.hidePopover()}))},onunmount:()=>{l.forEach(e=>e?.unwatch()),a()}},s,c),a]}var We=`:root,.dropdown,.base-surface{--baseFontFamily:"IBM Plex Sans", system-ui, sans-serif, emoji;--monospaceFontFamily:"IBM Plex Mono", ui-monospace, monospace, emoji;--iconFontFamily:"remixicon";--primaryColor:#25272d;--primaryAlt1Color:color-mix(in srgb, var(--primaryColor), white 8%);--primaryAlt2Color:color-mix(in srgb, var(--primaryColor), white 13%);--primaryTxtColor:#fff;--primaryTxtHintColor:color-mix(in srgb, var(--primaryTxtColor), transparent 35%);--primaryTxtDisabledColor:color-mix(in srgb, var(--primaryTxtColor), transparent 50%);--secondaryColor:#e8eaee;--secondaryAlt1Color:#dcdfe5;--secondaryAlt2Color:#c4cbd4;--secondaryTxtColor:var(--primaryColor);--secondaryTxtHintColor:color-mix(in srgb, var(--secondaryTxtColor), transparent 35%);--secondaryTxtDisabledColor:color-mix(in srgb, var(--secondaryTxtColor), transparent 50%);--infoColor:#3376e5;--infoAlt1Color:color-mix(in srgb, var(--infoColor), white 10%);--infoAlt2Color:color-mix(in srgb, var(--infoColor), white 15%);--infoTxtColor:var(--primaryTxtColor);--infoTxtHintColor:var(--primaryTxtHintColor);--infoTxtDisabledColor:var(--primaryTxtDisabledColor);--successColor:#22a96d;--successAlt1Color:color-mix(in srgb, var(--successColor), white 10%);--successAlt2Color:color-mix(in srgb, var(--successColor), white 15%);--successTxtColor:var(--primaryTxtColor);--successTxtHintColor:var(--primaryTxtHintColor);--successTxtDisabledColor:var(--primaryTxtDisabledColor);--warningColor:#e57534;--warningAlt1Color:color-mix(in srgb, var(--warningColor), white 10%);--warningAlt2Color:color-mix(in srgb, var(--warningColor), white 15%);--warningTxtColor:var(--primaryTxtColor);--warningTxtHintColor:var(--primaryTxtHintColor);--warningTxtDisabledColor:var(--primaryTxtDisabledColor);--dangerColor:#c33751;--dangerAlt1Color:color-mix(in srgb, var(--dangerColor), white 10%);--dangerAlt2Color:color-mix(in srgb, var(--dangerColor), white 15%);--dangerTxtColor:var(--primaryTxtColor);--dangerTxtHintColor:var(--primaryTxtHintColor);--dangerTxtDisabledColor:var(--primaryTxtDisabledColor);--accentColor:#1055c9;--accentAlt1Color:color-mix(in srgb, var(--accentColor), white 10%);--accentAlt2Color:color-mix(in srgb, var(--accentColor), white 15%);--accentTxtColor:#fff;--accentTxtHintColor:color-mix(in srgb, var(--accentTxtColor), transparent 40%);--accentTxtDisabledColor:color-mix(in srgb, var(--accentTxtColor), transparent 50%);--surfaceColor:#fff;--surfaceAlt1Color:#f6f7f9;--surfaceAlt2Color:#e8eaee;--surfaceAlt3Color:#dfe2e7;--surfaceAlt4Color:#d9dde2;--surfaceAlt5Color:#d1d6dc;--surfaceTxtColor:#25272d;--surfaceTxtHintColor:#6b747b;--surfaceTxtDisabledColor:#abaeba;--surfaceAccentColor:color-mix(in srgb, var(--accentColor), white 80%);--surfaceInfoColor:color-mix(in srgb, var(--infoColor), white 80%);--surfaceSuccessColor:color-mix(in srgb, var(--successColor), white 80%);--surfaceWarningColor:color-mix(in srgb, var(--warningColor), white 80%);--surfaceDangerColor:color-mix(in srgb, var(--dangerColor), white 80%);--selectionColor:#22242a38;--inputColor:var(--surfaceAlt2Color);--inputFocusColor:var(--surfaceAlt3Color);--inputBorderColor:var(--surfaceAlt4Color);scrollbar-color:var(--surfaceAlt4Color) transparent;--prismFunctionColor:#7c00aa;--prismStringColor:#116b00;--prismNumberColor:#246f86;--prismPropertyColor:#246f86;--prismKeywordColor:#a04900;--prismCommentColor:var(--surfaceTxtHintColor);--prismPunctuationColor:var(--surfaceTxtColor);--modalAnimationSpeed:.2s;--modalOverlayColor:#22242a38;--tooltipTxtColor:#fff;--tooltipSurfaceColor:#222424e6;--boxShadow:0px 8px 5px -5px #2224241a;--leftBoxShadow:-1px 0px 5px 0 #2224241a;--rightBoxShadow:1px 0px 5px 0 #2224241a;--topScrollShadow:0px 2px 8px 1px #22242426;--bottomScrollShadow:0px -2px 8px 1px #22242426;--leftScrollShadow:3px 0px 5px 0px #22242433;--rightScrollShadow:-3px 0px 5px 0px #22242433;--fontSize:14px;--smFontSize:13px;--lgFontSize:15px;--lineHeight:22px;--smLineHeight:16px;--lgLineHeight:24px;--btnHeight:45px;--smBtnHeight:35px;--lgBtnHeight:52px;--spacing:30px;--smSpacing:20px;--inputPadding:13px;--inputBorderRadius:var(--borderRadius);--borderRadius:5px;--lgBorderRadius:15px;--pageSidebarWidth:240px;--wrapperWidth:840px;--smWrapperWidth:430px;--lgWrapperWidth:1150px;--loaderIcon:"";--loaderAnimationSpeed:1.2s;--animationSpeed:.15s;--activeAnimationSpeed:70ms;--slideAnimationSpeed:.2s;accent-color:var(--primaryColor)}[data-color-scheme=dark],[data-color-scheme=dark] .dropdown{--surfaceColor:#1f1f1f;--surfaceAlt1Color:color-mix(in srgb, var(--surfaceColor), white 3%);--surfaceAlt2Color:color-mix(in srgb, var(--surfaceColor), white 7%);--surfaceAlt3Color:color-mix(in srgb, var(--surfaceColor), white 12%);--surfaceAlt4Color:color-mix(in srgb, var(--surfaceColor), white 14%);--surfaceAlt5Color:color-mix(in srgb, var(--surfaceColor), white 16%);--surfaceTxtColor:#dedede;--tooltipTxtColor:var(--surfaceTxtColor);--surfaceTxtHintColor:color-mix(in srgb, var(--surfaceTxtColor), transparent 45%);--surfaceTxtDisabledColor:color-mix(in srgb, var(--surfaceTxtColor), transparent 65%);--secondaryColor:var(--surfaceAlt2Color);--secondaryTxtColor:var(--surfaceTxtColor);--secondaryAlt1Color:var(--surfaceAlt3Color);--secondaryAlt2Color:var(--surfaceAlt4Color);--primaryColor:#161616;--primaryTxtColor:var(--surfaceTxtColor);--primaryAlt1Color:color-mix(in srgb, var(--primaryColor), white 1%);--primaryAlt2Color:color-mix(in srgb, var(--primaryColor), white 1.5%);--primaryTxtHintColor:color-mix(in srgb, var(--primaryTxtColor), transparent 35%);--primaryTxtDisabledColor:color-mix(in srgb, var(--primaryTxtColor), transparent 50%);--infoColor:#4273bd;--infoTxtColor:var(--surfaceTxtColor);--infoAlt1Color:color-mix(in srgb, var(--infoColor), black 10%);--infoAlt2Color:color-mix(in srgb, var(--infoColor), black 15%);--surfaceInfoColor:color-mix(in srgb, var(--infoColor), var(--surfaceColor) 45%);--successColor:#257e58;--successTxtColor:var(--surfaceTxtColor);--successAlt1Color:color-mix(in srgb, var(--successColor), black 10%);--successAlt2Color:color-mix(in srgb, var(--successColor), black 15%);--surfaceSuccessColor:color-mix(in srgb, var(--successColor), var(--surfaceColor) 45%);--warningColor:#b94f09;--warningTxtColor:var(--surfaceTxtColor);--warningAlt1Color:color-mix(in srgb, var(--warningColor), black 10%);--warningAlt2Color:color-mix(in srgb, var(--warningColor), black 15%);--surfaceWarningColor:color-mix(in srgb, var(--warningColor), var(--surfaceColor) 45%);--dangerColor:#b6354c;--dangerTxtColor:var(--surfaceTxtColor);--dangerAlt1Color:color-mix(in srgb, var(--dangerColor), black 10%);--dangerAlt2Color:color-mix(in srgb, var(--dangerColor), black 15%);--surfaceDangerColor:color-mix(in srgb, var(--dangerColor), var(--surfaceColor) 45%);--selectionColor:#ffffff38;--inputColor:var(--surfaceAlt2Color);--inputFocusColor:var(--surfaceAlt3Color);--inputBorderColor:var(--surfaceAlt4Color);scrollbar-color:var(--surfaceAlt5Color) transparent;--modalOverlayColor:#00000080;--boxShadow:0px 8px 5px -5px #0000004d;--leftBoxShadow:-1px 0px 5px 0 #0000004d;--rightBoxShadow:1px 0px 5px 0 #0000004d;--topScrollShadow:0px 2px 8px 1px #00000073;--bottomScrollShadow:0px -2px 8px 1px #00000073;--leftScrollShadow:3px 0px 5px 0px #0006;--rightScrollShadow:-3px 0px 5px 0px #0006;--prismFunctionColor:#ab7abd;--prismStringColor:#87b47e;--prismNumberColor:#86b9bb;--prismPropertyColor:#90c2d1;--prismKeywordColor:#b3703d;--prismCommentColor:var(--surfaceTxtHintColor);--prismPunctuationColor:var(--surfaceTxtColor)}html .accent-surface{--surfaceColor:var(--accentColor);--surfaceAlt1Color:color-mix(in srgb, var(--surfaceColor), white 5%);--surfaceAlt2Color:color-mix(in srgb, var(--surfaceColor), white 10%);--surfaceAlt3Color:color-mix(in srgb, var(--surfaceColor), white 20%);--surfaceAlt4Color:color-mix(in srgb, var(--surfaceColor), white 30%);--surfaceAlt5Color:color-mix(in srgb, var(--surfaceColor), white 40%);--surfaceTxtColor:#fff;--surfaceTxtHintColor:color-mix(in srgb, var(--surfaceTxtColor), transparent 35%);--surfaceTxtDisabledColor:color-mix(in srgb, var(--surfaceTxtColor), transparent 60%);--surfaceAccentColor:color-mix(in srgb, var(--surfaceColor), white 20%);--surfaceInfoColor:color-mix(in srgb, var(--infoColor), transparent 40%);--surfaceSuccessColor:color-mix(in srgb, var(--successColor), transparent 40%);--surfaceWarningColor:color-mix(in srgb, var(--warningColor), transparent 40%);--surfaceDangerColor:color-mix(in srgb, var(--dangerColor), transparent 40%);--inputColor:var(--surfaceAlt3Color);--inputFocusColor:var(--surfaceAlt4Color);--inputBorderColor:var(--surfaceAlt5Color);--selectionColor:var(--surfaceAccentColor);scrollbar-color:var(--surfaceAlt4Color) transparent}@media (width<=900px){:root,.dropdown,.base-surface{--spacing:20px;--smSpacing:15px;--btnHeight:40px;--smBtnHeight:30px;--lgBtnHeight:47px}}`;window.app=window.app||{},window.app.components=window.app.components||{},window.app.components.tinymce=function(e={}){let n=store({rid:void 0,id:void 0,hidden:void 0,inert:void 0,name:void 0,className:``,value:``,readonly:!1,disabled:!1,required:!1,convertURLs:!1,onchange:function(e){},onbeforeinit:function(e){},onafterinit:function(e){}}),r=app.utils.extendStore(n,e),i,a,o;r.push(watch(()=>n.value,c)),r.push(watch(()=>n.disabled||n.readonly,l)),r.push(watch(()=>n.convertURLs,u)),r.push(watch(()=>app.store.activeColorScheme,d));function s(e){try{e()}catch(e){console.warn(`tinymce error:`,e)}}function c(){o!=n.value&&s(()=>{i?.setContent(``+(n.value||``))})}function l(){s(()=>{i?.mode?.set(n.disabled||n.readonly?`readonly`:`design`)})}function u(){s(()=>{i?.options?.set(`convert_urls`,!!n.convertURLs)})}function d(){s(()=>{i?.getBody()?.setAttribute(`data-color-scheme`,app.store.activeColorScheme)})}let f;function p(e=150){clearTimeout(f),f=setTimeout(m,e)}function m(){if(!i)return;clearTimeout(f);let e;s(()=>{e=i.getContent()}),e!=o&&(o=e,n.onchange?.(e),a?.dispatchEvent(new CustomEvent(`change`,{detail:{editor:i,content:e},bubbles:!0})))}function h(){i&&(clearTimeout(f),i.dom?.unbind(document),s(()=>{window.tinymce?.remove(i)}),i=null,o=null)}async function g(e){if(await Xe(),h(),!e.isConnected)return;let r={target:e,content_style:We,branding:!1,promotion:!1,menubar:!1,resize:!1,min_height:265,height:265,max_height:600,sandbox_iframes:!0,convert_unsafe_embeds:!0,codesample_global_prismjs:!0,convert_urls:!1,relative_urls:!1,autoresize_bottom_margin:30,media_poster:!1,media_alt_source:!1,codesample_languages:[{text:`HTML/XML`,value:`markup`},{text:`CSS`,value:`css`},{text:`SQL`,value:`sql`},{text:`JavaScript`,value:`javascript`},{text:`Go`,value:`go`},{text:`Dart`,value:`dart`},{text:`Zig`,value:`zig`},{text:`Rust`,value:`rust`},{text:`Lua`,value:`lua`},{text:`PHP`,value:`php`},{text:`Ruby`,value:`ruby`},{text:`Python`,value:`python`},{text:`Java`,value:`java`},{text:`C`,value:`c`},{text:`C#`,value:`csharp`},{text:`C++`,value:`cpp`},{text:`Markdown`,value:`markdown`},{text:`Swift`,value:`swift`},{text:`Kotlin`,value:`kotlin`},{text:`Elixir`,value:`elixir`},{text:`Scala`,value:`scala`},{text:`Julia`,value:`julia`},{text:`Haskell`,value:`haskell`}],plugins:[`autolink`,`autoresize`,`code`,`codesample`,`directionality`,`image`,`link`,`lists`,`media`,`table`,`wordcount`],toolbar:`styles | alignleft aligncenter alignright | bold italic forecolor backcolor | bullist numlist | link table media_picker codesample | direction code`,paste_postprocess:(e,n)=>{Je(n.node)},file_picker_types:`image`,file_picker_callback:(e,n,r)=>{let i=document.createElement(`input`);i.setAttribute(`type`,`file`),i.setAttribute(`accept`,`image/*`),i.addEventListener(`change`,n=>{let r=n.target.files[0],i=new FileReader;i.addEventListener(`load`,()=>{if(!tinymce)return;let n=`blobid`+new Date().getTime(),a=tinymce.activeEditor.editorUpload.blobCache,o=i.result.split(`,`)[1],s=a.create(n,r,o);a.add(s),e(s.blobUri(),{title:r.name})}),i.readAsDataURL(r)}),i.click()},setup:e=>{i=e,e.on(`init`,e=>{n.onafterinit?.(i),u(),l(),d(),c()}),e.on(`keydown`,n=>{(n.ctrlKey||n.metaKey)&&n.code==`KeyS`&&e.formElement&&(n.preventDefault(),n.stopPropagation(),e.formElement.dispatchEvent(new KeyboardEvent(`keydown`,n)))}),e.on(`input`,e=>{p()}),e.on(`change`,e=>{m()}),Ge(e),Ke(e)}};n.readonly&&(r.statusbar=!1,r.min_height=30,r.height=30,r.max_height=500,r.autoresize_bottom_margin=5,r.resize=!1,r.toolbar=!1,r.plugins=[`autoresize`,`codesample`,`directionality`]),n.onbeforeinit&&n.onbeforeinit(r),window.tinymce.init(r)}return a=t.textarea({name:()=>n.name,onmount:e=>{g(e).catch(e=>{console.warn(`tinymce init error:`,e)})},onunmount:h}),t.div({rid:n.rid,id:()=>n.id,hidden:()=>n.hidden,inert:()=>n.inert,className:()=>`pb-tinymce ${n.className}`,"html-required":()=>n.required||void 0,onunmount:e=>{clearTimeout(f),r.forEach(e=>e?.unwatch()),a=null}},a)};function Ge(e){let n=`pbTinymceLastDirection`;e.on(`init`,()=>{let r=window.localStorage.getItem(n);!e.isDirty()&&e.getContent()==``&&r==`rtl`&&e.execCommand(`mceDirectionRTL`)}),e.ui.registry.addMenuButton(`direction`,{icon:`visualchars`,tooltip:`Direction`,fetch:r=>{r([{type:`menuitem`,text:`LTR content`,icon:`ltr`,onAction:()=>{window?.localStorage?.setItem(n,`ltr`),e.execCommand(`mceDirectionLTR`)}},{type:`menuitem`,text:`RTL content`,icon:`rtl`,onAction:()=>{window?.localStorage?.setItem(n,`rtl`),e.execCommand(`mceDirectionRTL`)}}])}})}function Ke(e){e.ui.registry.addMenuButton(`media_picker`,{tooltip:`Insert media`,icon:`embed`,fetch:n=>{n([{type:`menuitem`,text:`Inline image (Base64)`,onAction:()=>{e.execCommand(`mceImage`)}},{type:`menuitem`,text:`Media from collection`,onAction:()=>{app.modals.openRecordFilePicker({fileTypes:[`image`,`audio`,`video`],onselect:n=>{let r=app.pb.files.getURL(n.record,n.name,{thumb:n.thumb||void 0}),i=app.utils.encodeEntities(n.name),a=app.utils.encodeEntities(r);app.utils.hasImageExtension(n.name)?e?.execCommand(`InsertImage`,!1,r):app.utils.hasAudioExtension(n.name)?e?.execCommand(`InsertHTML`,!1,`<audio controls src="${a}"></audio>`):app.utils.hasVideoExtension(i)&&e?.execCommand(`InsertHTML`,!1,`
<video controls width="300">
<source src="${a}" />
<p>Download: <a href="${a}" download="${i}">${i}</a>.</p>
</video>
`)}})}},{type:`menuitem`,text:`Manual embed`,onAction:()=>{tinymce.activeEditor.execCommand(`mceMedia`)}}])}})}var qe=`DIV.P.A.EM.B.STRONG.H1.H2.H3.H4.H5.H6.TABLE.TR.TD.TH.TBODY.THEAD.TFOOT.BR.HR.Q.SUP.SUB.DEL.IMG.OL.UL.LI.CODE`.split(`.`);function Je(e){if(e){for(let n of e.children)Je(n);qe.includes(e.tagName)?(e.removeAttribute(`style`),e.removeAttribute(`class`)):Ye(e)}}function Ye(e){let n=e.parentNode;for(;e.firstChild;)n.insertBefore(e.firstChild,e);n.removeChild(e)}async function Xe(){if(window.tinymce!==void 0)return;let e=`lazy-tinymce-js`;return document.getElementById(e)?new Promise((e,n)=>{function r(){document.removeEventListener(`tinymceLoadSuccess`,i),document.removeEventListener(`tinymceLoadError`,a)}let i=function(){r(),e()},a=function(e){r(),n(e?.details)};document.addEventListener(`tinymceLoadSuccess`,i),document.addEventListener(`tinymceLoadError`,a)}):new Promise((n,r)=>{document.head.querySelector(`#shablon-script`).after(t.script({id:e,src:`./libs/tinymce/tinymce.min.js`,onload:()=>{n()},onerror:e=>{console.warn(`failed to load tinymce.min.js:`,e),r(e)}}))}).then(()=>{document.dispatchEvent(new CustomEvent(`tinymceLoadSuccess`))}).catch(e=>{document.dispatchEvent(new CustomEvent(`tinymceLoadError`,{detail:e}))})}window.app=window.app||{},window.app.components=window.app.components||{},window.app.components.colorPicker=function(e={}){let n=`picker_`+app.utils.randomString(),r=store({rid:void 0,id:void 0,hidden:void 0,inert:void 0,className:``,name:``,required:!1,disabled:!1,value:``,predefinedColors:[],onchange:e=>{},onmount:e=>{},onunmount:e=>{}}),i=app.utils.extendStore(r,e),a=store({inputValue:`#ffffff`});function o(e){e=e?.toLowerCase()||``,r.onchange?.(e)}let s,c=t.input({type:`color`,className:`color-picker-input`,id:()=>r.id,name:()=>r.name,required:()=>r.required,disabled:()=>r.disabled,value:()=>(a.inputValue=r.value||`#ffffff`,r.value||void 0),oninput:e=>{a.inputValue=e.target.value,clearTimeout(s),s=setTimeout(()=>{o(e.target.value)},50)}});return t.div({rid:r.rid,hidden:()=>r.hidden,inert:()=>r.inert,className:()=>`color-picker ${r.className}`,onmount:e=>{r.onmount?.(e)},onunmount:e=>{clearTimeout(s),r.onunmount?.(e),i.forEach(e=>e?.unwatch())}},t.div({className:`color-picker-input-wrapper`},c,t.output({className:`result`,style:()=>`color: lch(from ${a.inputValue||`#ffffff`} calc((49 - l) * infinity) 0 0);`,textContent:()=>a.inputValue})),t.button({hidden:()=>!r.predefinedColors.length,type:`button`,title:`Predefined colors`,className:`link-hint predefined-colors-btn`,"html-popovertarget":n+`predefined-colors-dropdown`},t.i({className:`ri-arrow-down-s-line`,ariaHidden:!0})),t.div({pbEvent:`predefinedColorsDropdown`,id:n+`predefined-colors-dropdown`,className:`dropdown predefined-colors-dropdown`,popover:`auto`},t.div({className:`predefined-colors-list`},()=>r.predefinedColors?.map(e=>t.button({type:`button`,className:()=>`color ${r.value==e?`active`:``}`,style:`background:${e}`,onclick:n=>{c&&(n.target.closest(`.dropdown`)?.hidePopover(),c.value=e||void 0,c.dispatchEvent(new Event(`input`,{bubbles:!0})))}})))))},window.app=window.app||{},window.app.components=window.app.components||{},window.app.components.ruleField=function(e={}){let n=`rule_`+app.utils.randomString(),r=store({rid:void 0,id:void 0,hidden:void 0,inert:void 0,className:``,required:!1,disabled:!1,name:void 0,label:void 0,help:void 0,value:null,nullable:!0,placeholder:`Leave empty to grant everyone access...`,autocomplete:e=>[],oninput:e=>{},onmount:e=>{},onunmount:e=>{},get isLocked(){return r.value==null}}),i=app.utils.extendStore(r,e,`isLocked`),a,o=``;function s(e){r.value=e,r.oninput?.(e),a?.dispatchEvent(new CustomEvent(`change`,{detail:e}))}function c(){r.value!==null&&(o=r.value,s(null))}function l(){s(o??``),setTimeout(()=>{document.getElementById(n)?.focus()},0)}return a=t.div({rid:r.rid,id:()=>r.id,hidden:()=>r.hidden,inert:()=>r.inert,"html-name":()=>r.name,className:()=>[`field`,`rule-field`,r.required?`required`:null,r.value===null?`locked`:null,r.disabled?`disabled`:null].filter(Boolean).join(` `),onmount:e=>{r.onmount?.(e)},onunmount:e=>{r.onunmount?.(e),i.forEach(e=>e?.unwatch())}},t.label({htmlFor:n},e=>r.label?typeof r.label==`function`?r.label(e):typeof r.label==`string`?t.span({className:`txt`},r.label):r.label:t.span({className:`txt`},`Rule`),t.span({hidden:()=>!r.isLocked,className:`txt superusers-label`},`(Superusers only)`)),e=>r.isLocked?t.button({type:`button`,className:`unlock-overlay`,disabled:()=>r.disabled,onclick:l},t.span({className:`txt`},`Unlock and set custom rule`),t.i({className:`ri-lock-unlock-line`,ariaHidden:!0})):[app.components.codeEditor({id:n,language:`pbrule`,required:()=>r.required,disabled:()=>r.disabled,value:()=>r.value,oninput:s,placeholder:()=>r.placeholder,autocomplete:r.autocomplete,autocompleteContainer:e}),t.button({hidden:()=>!r.nullable,type:`button`,className:`superuser-toggle`,disabled:()=>r.disabled,onclick:c},t.i({className:`ri-lock-line`,ariaHidden:!0}),t.span({className:`txt`},`Set superusers only`))]),a},window.app=window.app||{},window.app.components=window.app.components||{},window.app.components.credits=function(){return t.div({pbEvent:`credits`,className:`credits`},()=>app.store.creditLinks.map(e=>{let n=e.href.startsWith(`#/`);return t.a({href:()=>e.href,target:()=>n?void 0:`_blank`,rel:()=>n?void 0:`noopener noreferrer`,className:n=>`credit-item ${e.isActive?.(n)||app.utils.isActivePath(e.href,!1)?`active`:``}`},()=>{if(e.icon)return t.i({className:e.icon,ariaHidden:!0})},t.span({className:`txt`},()=>e.label))}))},window.app=window.app||{},window.app.components=window.app.components||{},window.app.components.searchbar=function(e={}){let n=store({rid:void 0,id:void 0,hidden:void 0,inert:void 0,value:``,className:``,placeholder:`Search...`,disabled:!1,historyKey:``,autocomplete:void 0,onsubmit:e=>{}}),r=app.utils.extendStore(n,e,`autocomplete`),i=store({value:``});function a(){n.value=i.value,n.onsubmit?.(i.value)}function o(){i.value=``,a()}return r.push(watch(()=>n.value,e=>{i.value=e})),t.form({rid:n.rid,id:()=>n.id,hidden:()=>n.hidden,inert:()=>n.inert,className:()=>`fields searchbar ${n.className}`,onsubmit:e=>{e.preventDefault(),a()},onunmount:e=>{r.forEach(e=>e?.unwatch())}},()=>{if(n.historyKey)return t.div({className:`field addon p-l-5`},app.components.searchHistoryButton({historyKey:()=>n.historyKey,value:()=>n.value,onselect:e=>{i.value=e,a()}}))},t.div({className:`field`},app.components.codeEditor({singleLine:!0,language:`pbrule`,className:()=>n.historyKey?`p-l-5`:`p-l-20`,placeholder:()=>n.placeholder,disabled:()=>n.disabled,value:()=>i.value,oninput:e=>i.value=e,autocomplete:n.autocomplete})),()=>{if(n.value.length>0||i.value.length>0)return t.div({rid:`search-ctrls`,className:`field addon p-r-5`},t.button({type:`submit`,className:`btn sm pill warning`,hidden:()=>n.value==i.value},`Search`),t.button({type:`button`,className:`btn sm pill secondary transparent`,onclick:()=>o()},`Clear`))})},window.app=window.app||{},window.app.components=window.app.components||{},window.app.components.uploadedFileThumb=function(e={}){let n=store({rid:void 0,id:void 0,hidden:void 0,inert:void 0,file:void 0,imageWidth:100,imageHeight:100,extraClasses:`sm`}),r=app.utils.extendStore(n,e),i=store({thumbSrc:void 0});return r.push(watch(()=>[n.file,n.imageWidth,n.imageHeight],()=>{app.utils.hasImageExtension(n.file?.name)?app.utils.generateThumb(n.file,n.imageWidth,n.imageHeight).then(e=>{i.thumbSrc=e}).catch(e=>{console.warn(`unable to generate thumb:`,e),i.thumbSrc=void 0}):i.thumbSrc=void 0})),t.div({rid:n.rid,id:()=>n.id,hidden:()=>n.hidden,inert:()=>n.inert,className:()=>`thumb ${n.extraClasses}`,onunmount:()=>{r.forEach(e=>e?.unwatch())}},()=>{let e=app.utils.getFileType(n.file?.name);return e==`image`&&i.thumbSrc?t.img({draggable:!1,loading:`lazy`,alt:()=>`Thumb of `+n.file.name,src:i.thumbSrc}):t.i({className:app.utils.fileTypeIcons[e]||`ri-file-line`,ariaHidden:!0})})},window.app=window.app||{},window.app.modals=window.app.modals||{},window.app.modals.openFilePreview=function(e){let n=Ze(e);document.body.appendChild(n),app.modals.open(n)};function Ze(e){let n=store({url:``,get filename(){let e=n.url,r=e.indexOf(`?`);return e.substring(e.lastIndexOf(`/`)+1,r>0?r:void 0)},get fileType(){return app.utils.getFileType(n.filename)}});async function r(){let r=``;try{r=typeof e==`function`?await e():await e}catch(e){e.isAbort||console.warn(`resolveUrlOrFactory file preview failure:`,e)}return n.url=r,r}async function i(){let e=await r();e&&window.open(e,`_blank`,`noreferrer,noopener`)}return t.div({pbEvent:`filePreviewModal`,className:()=>`modal preview preview-${n.fileType}`,onbeforeopen:()=>{r()},onafterclose:e=>{e.remove()}},t.div({className:`modal-content`},()=>n.url?n.fileType==`image`?t.img({src:()=>n.url,alt:()=>`Preview ${n.filename}`}):t.object({data:n.url,title:()=>n.filename},`Cannot preview the file.`):t.span({className:`loader`})),t.footer({className:`modal-footer`},t.button({type:`button`,className:`link-hint filename-link`,ariaDescription:app.attrs.tooltip(`Open in new tab`),onclick:()=>i()},t.span({className:`txt`},()=>n.filename)),t.button({type:`button`,className:`btn transparent m-l-auto`,onclick:()=>app.modals.close()},t.span({className:`txt`},`Close`))))}window.app=window.app||{},window.app.components=window.app.components||{};var Qe=2,$e=.4,et=40;window.app.components.erd=function(e={}){let n=store({rid:void 0,id:void 0,hidden:void 0,inert:void 0,className:``,collections:[],height:500,cols:5,marginX:90,marginY:70,scale:.8,onscalechange:e=>{}}),r=app.utils.extendStore(n,e),i=store({activeCollection:null,positions:{},viewX:0,viewY:0,panStartX:0,panStartY:0,isPanning:!1,isUpdating:!0}),a,o,s=`erd_`+app.utils.randomString();r.push(watch(()=>n.scale,e=>{e>Qe&&(n.scale=Qe),e<$e&&(n.scale=$e),o||=e,n.onscalechange?.(e)})),r.push(watch(()=>JSON.stringify(n.collections),(e,n)=>{n!==void 0&&c()}));async function c(e=!0){i.isUpdating=!0,await new Promise(e=>setTimeout(e,0)),i.positions={};let r=Array(n.cols).fill(et);a.querySelectorAll(`.erd-table`)?.forEach((e,a)=>{let o=a%n.cols;i.positions[e.dataset.collectionId]={x:et+o*(e.clientWidth+n.marginX),y:r[o]},r[o]+=e.clientHeight+n.marginY}),d(),e?await u():l(),i.isUpdating=!1}function l(){h.innerHTML=``,_.innerHTML=``}async function u(){await new Promise(e=>setTimeout(e,0)),l();let e=[];for(let r of n.collections){let i=r.fields||[];for(let o of i){if(o.type!=`relation`)continue;let i=a?.querySelector(`[data-collection-id="${r.id}"]`)?.querySelector(`[data-field-name="${o.name}"]`),s=a?.querySelector(`[data-collection-id="${o.collectionId}"]`)?.querySelector(`[data-field-name="id"]`);e.push(tt(i,s,n.scale,r.id,o.collectionId))}}e.length&&h.append(...e)}function d(){let e=a.clientWidth||0,r=a.querySelector(`.erd-table`)?.offsetWidth||0,o=2*et+n.cols*(r+n.marginX)-n.marginX;i.viewY=0,i.viewX=(e-o*n.scale)/2}function f(){n.scale=o||1,d()}function p(e){return i.activeCollection?i.activeCollection.id==e.id||i.activeCollection.fields?.find(n=>n.type==`relation`&&n.collectionId==e.id)?!0:!!e.fields?.find(e=>e.type==`relation`&&e.collectionId==i.activeCollection.id):!1}let m=document.createElementNS(`http://www.w3.org/2000/svg`,`svg`);m.classList.add(`erd-paths`,`back`),m.innerHTML=`
<defs>
<marker id="${s}_arrow1" class="arrow" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="6" markerHeight="6" orient="auto" fill="context-stroke">
<path d="M 0 0 L 10 5 L 0 10 z" />
</marker>
</defs>
<g class="paths-group" marker-end="url(#${s}_arrow1)"></g>
`;let h=m.querySelector(`.paths-group`),g=document.createElementNS(`http://www.w3.org/2000/svg`,`svg`);g.classList.add(`erd-paths`,`front`),g.innerHTML=`
<defs>
<marker id="${s}_arrow2" class="arrow" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="6" markerHeight="6" orient="auto" fill="context-stroke">
<path d="M 0 0 L 10 5 L 0 10 z" />
</marker>
</defs>
<g class="paths-group" marker-end="url(#${s}_arrow2)"></g>
`;let _=g.querySelector(`.paths-group`);return a=t.div({tabIndex:-1,rid:n.rid,id:()=>n.id,hidden:()=>n.hidden,inert:()=>n.inert,className:()=>`erd ${n.className} ${i.isUpdating?`updating`:``} ${i.isPanning?`panning`:``} ${i.activeCollection?`active`:``}`,onkeydown:e=>{(e.ctrlKey||e.metaKey)&&e.key==`0`&&f()},onmount:async e=>{e.addEventListener(`wheel`,r=>{r.preventDefault();let a=e.getBoundingClientRect(),o=r.clientX-a.left,s=r.clientY-a.top,c=(o-i.viewX)/n.scale,l=(s-i.viewY)/n.scale,u=Math.min(Math.max(-r.deltaY*.001+n.scale,$e),Qe);i.viewX=o-c*u,i.viewY=s-l*u,n.scale=u}),e.addEventListener(`pointerdown`,e=>{e.buttons==1&&(i.isPanning=!0,i.panStartX=e.clientX-i.viewX,i.panStartY=e.clientY-i.viewY)}),e._ondragging=function(e){i.isPanning&&(i.viewX=e.clientX-i.panStartX,i.viewY=e.clientY-i.panStartY)},e._ondragstop=function(){i.isPanning=!1},window.addEventListener(`pointermove`,e._ondragging),window.addEventListener(`pointerup`,e._ondragstop),c()},onunmount:e=>{window.removeEventListener(`pointermove`,e._ondragging),window.removeEventListener(`pointerup`,e._ondragstop),r.forEach(e=>e?.unwatch())}},t.div({className:`erd-area`,style:()=>`transform: translate(${i.viewX}px, ${i.viewY}px) scale(${n.scale});`},m,t.div({className:`erd-tables`},()=>n.collections.map(e=>t.div({style:()=>`left:${i.positions[e.id]?.x||0}px;top:${i.positions[e.id]?.y||0}px`,className:()=>`erd-table type-${e.type} ${p(e)?`active`:``} ${e.system?`system`:``}`,"html-data-collection-id":()=>e.id,"html-data-collection-name":()=>e.name,onmouseenter:()=>{h.querySelectorAll(`[data-to="${e.id}"]`)?.forEach(e=>{e.classList.add(`active-to`),_.append(e)}),h.querySelectorAll(`[data-from="${e.id}"]`)?.forEach(e=>{e.classList.add(`active-from`),_.append(e)}),i.activeCollection=e},onmouseleave:()=>{for(let e of _.children)e.classList.remove(`active-from`,`active-to`);h.append(..._.children),i.activeCollection=null}},t.div({className:`erd-table-row header`},()=>e.name),()=>e.fields?.map(e=>t.div({className:`erd-table-row type-${e.type} ${e.primaryKey?`primary-key`:``}`,"html-data-field-id":()=>e.id,"html-data-field-name":()=>e.name},t.i({ariaHidden:!0,title:()=>e.type,className:()=>`field-icon ${app.fieldTypes[e.type].icon||app.utils.fallbackFieldIcon}`}),t.span({className:`field-name`},()=>e.name),()=>{if(e.hidden)return t.span({className:`label danger field-hidden-label`},`Hidden`)},()=>{if(e.maxSelect!==void 0)return t.span({className:`meta`},e.maxSelect>1?`multiple`:`single`)}))))),g),t.nav({className:`erd-nav`,onmousedown:e=>{e.stopImmediatePropagation()}},t.button({type:`button`,className:`btn sm circle secondary`,title:`Zoom in`,onclick:()=>{n.scale+=.05}},t.i({className:`ri-add-line`,ariaHidden:!0})),t.button({type:`button`,className:`btn sm circle secondary`,title:`Zoom out`,onclick:()=>{n.scale-=.05}},t.i({className:`ri-subtract-line`,ariaHidden:!0})))),a};function tt(e,n,r=1,i=``,a=``,o=2){if(!e||!n)return;let s=e.closest(`.erd-area`).getBoundingClientRect(),c=e.getBoundingClientRect(),l=n.getBoundingClientRect();o*=r;let u=c.top-s.top+c.height/2,d=l.top-s.top+l.height/2,f,p;c.left<l.left?(f=c.left-s.left+c.width+o,p=l.left-s.left-o):c.left>l.left?(f=c.left-s.left-o,p=l.left-s.left+l.width+o):(f=c.left-s.left-o,p=l.left-s.left-o),f/=r,p/=r,u/=r,d/=r;let m=f+(p-f)/2;f==p&&(m-=20);let h=`M ${f} ${u}
L ${m} ${u}
L ${m} ${d}
L ${p} ${d}`,g=document.createElementNS(`http://www.w3.org/2000/svg`,`path`);return g.setAttribute(`class`,`relation-path`),g.setAttribute(`data-from`,i||``),g.setAttribute(`data-to`,a||``),g.setAttribute(`d`,h),g}window.app=window.app||{},window.app.components=window.app.components||{};var N=1e3;window.app.components.pageSidebar=function(e={},...n){let r,i=store({rid:void 0,id:void 0,hidden:void 0,inert:void 0,className:``,widthHistoryKey:`pbPageSidebarWidth`,onmount:void 0,onunmount:void 0}),a=app.utils.extendStore(i,e),o=store({responsiveShow:!1}),s;function c(){if(r){if(window.innerWidth>N){o.responsiveShow=!1,r.dataset.responsive=!1,s?.remove(),s=null;return}r.dataset.responsive=!0,s||(s=t.button({type:`button`,className:`btn transparent secondary responsive-sidebar-btn`,title:`Toggle sidebar`,onclick:e=>{e.stopPropagation(),o.responsiveShow=!o.responsiveShow}},t.i({className:`ri-menu-2-line`,ariaHidden:!0})),document.body.querySelector(`.page-header .breadcrumbs`).before(s))}}function l(e){if(e.target.closest(`.responsive-close`)){o.responsiveShow=!1;return}if(!(e.target.closest(`.page-sidebar`)||e.target.closest(`.app-header`)||e.target.closest(`.modal`)))return e.preventDefault(),e.stopImmediatePropagation(),o.responsiveShow=!1,!1}return a.push(watch(()=>o.responsiveShow,e=>{e?window.addEventListener(`click`,l,!0):window.removeEventListener(`click`,l,!0)})),r=t.aside({pbEvent:`pageSidebar`,rid:i.rid,id:()=>i.id,hidden:()=>i.hidden,inert:()=>i.inert,className:()=>`page-sidebar ${i.className} ${o.responsiveShow?`active`:``}`,onmount:e=>{c(e),window.addEventListener(`resize`,c),i.onmount?.(e)},onunmount:e=>{i.onunmount?.(e),window.removeEventListener(`click`,l,!0),window.removeEventListener(`resize`,c),s?.remove(),a.forEach(e=>e?.unwatch())}},e=>{let n;return i.widthHistoryKey&&(n=localStorage.getItem(i.widthHistoryKey),n&&(e.style.width=n)),app.components.dragline({ondragstart:n=>{e._startWidth=e.offsetWidth},ondragging:(r,a,o)=>{n=e._startWidth+a+`px`,e.style.width=n,i.widthHistoryKey&&localStorage.setItem(i.widthHistoryKey,n)}})},...n),r};var P=`modulepreload`,nt=function(e,n){return new URL(e,n).href},rt={},F=function(e,n,r){let i=Promise.resolve();if(n&&n.length>0){let e=document.getElementsByTagName(`link`),a=document.querySelector(`meta[property=csp-nonce]`),o=a?.nonce||a?.getAttribute(`nonce`);function s(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}i=s(n.map(n=>{if(n=nt(n,r),n in rt)return;rt[n]=!0;let i=n.endsWith(`.css`),a=i?`[rel="stylesheet"]`:``;if(r)for(let r=e.length-1;r>=0;r--){let a=e[r];if(a.href===n&&(!i||a.rel===`stylesheet`))return}else if(document.querySelector(`link[href="${n}"]${a}`))return;let s=document.createElement(`link`);if(s.rel=i?`stylesheet`:P,i||(s.as=`script`),s.crossOrigin=``,s.href=n,o&&s.setAttribute(`nonce`,o),document.head.appendChild(s),i)return new Promise((e,r)=>{s.addEventListener(`load`,e),s.addEventListener(`error`,()=>r(Error(`Unable to preload CSS for ${n}`)))})}))}function a(e){let n=new Event(`vite:preloadError`,{cancelable:!0});if(n.payload=e,window.dispatchEvent(n),!n.defaultPrevented)throw e}return i.then(n=>{for(let e of n||[])e.status===`rejected`&&a(e.reason);return e().catch(a)})};window.app=window.app||{},window.app.modals=window.app.modals||{},window.app.modals.openApiPreview=function(e,n={onbeforeopen:null,onafteropen:null,onbeforeclose:null,onafterclose:null}){let r=it(e,n);r&&(document.body.appendChild(r),app.modals.open(r))};function it(e,n){if(!e){console.warn(`[apiPreviewModal] missing required collection`);return}let r,i=store({activeTab:`List/Search`,tabEl:null,isLoading:!1}),a={"List/Search":async e=>{let{docsList:n}=await F(async()=>{let{docsList:e}=await import(`./docsList-BAfVNUIM.js`);return{docsList:e}},__vite__mapDeps([0,1,2,3]),import.meta.url);return i.tabEl=n(e)},View:async e=>{let{docsView:n}=await F(async()=>{let{docsView:e}=await import(`./docsView-Be6Uhvcf.js`);return{docsView:e}},__vite__mapDeps([4,1,2]),import.meta.url);return i.tabEl=n(e)}};e.type!=`view`&&(a.Create=async e=>{let{docsCreate:n}=await F(async()=>{let{docsCreate:e}=await import(`./docsCreate-Be3S3y5K.js`);return{docsCreate:e}},__vite__mapDeps([5,1,2]),import.meta.url);return i.tabEl=n(e)},a.Update=async e=>{let{docsUpdate:n}=await F(async()=>{let{docsUpdate:e}=await import(`./docsUpdate-LtD8DbWI.js`);return{docsUpdate:e}},__vite__mapDeps([6,5,1,2]),import.meta.url);return i.tabEl=n(e)},a.Delete=async e=>{let{docsDelete:n}=await F(async()=>{let{docsDelete:e}=await import(`./docsDelete-CybOn5jy.js`);return{docsDelete:e}},[],import.meta.url);return i.tabEl=n(e)},a.Realtime=async e=>{let{docsRealtime:n}=await F(async()=>{let{docsRealtime:e}=await import(`./docsRealtime-PMESvmJN.js`);return{docsRealtime:e}},[],import.meta.url);return i.tabEl=n(e)},a.Batch=async e=>{let{docsBatch:n}=await F(async()=>{let{docsBatch:e}=await import(`./docsBatch-DNJl1NTn.js`);return{docsBatch:e}},[],import.meta.url);return i.tabEl=n(e)}),e.type==`auth`&&(a[``]=null,a[`List auth methods`]=async e=>{let{docsListAuthMethods:n}=await F(async()=>{let{docsListAuthMethods:e}=await import(`./docsListAuthMethods-9feSopQX.js`);return{docsListAuthMethods:e}},__vite__mapDeps([7,2]),import.meta.url);return i.tabEl=n(e)},a[`Auth with password`]=e.passwordAuth?.enabled?async e=>{let{docsAuthWithPassword:n}=await F(async()=>{let{docsAuthWithPassword:e}=await import(`./docsAuthWithPassword-DEWj8Jyn.js`);return{docsAuthWithPassword:e}},__vite__mapDeps([8,1,2]),import.meta.url);return i.tabEl=n(e)}:null,e.name!=`_superusers`&&(a[`Auth with OAuth2`]=e.oauth2?.enabled?async e=>{let{docsAuthWithOAuth2:n}=await F(async()=>{let{docsAuthWithOAuth2:e}=await import(`./docsAuthWithOAuth2-DUIE4EoY.js`);return{docsAuthWithOAuth2:e}},__vite__mapDeps([9,1,2]),import.meta.url);return i.tabEl=n(e)}:null),a[`Auth with OTP`]=e.otp?.enabled?async e=>{let{docsAuthWithOTP:n}=await F(async()=>{let{docsAuthWithOTP:e}=await import(`./docsAuthWithOTP-B7z2VJzp.js`);return{docsAuthWithOTP:e}},__vite__mapDeps([10,1,2]),import.meta.url);return i.tabEl=n(e)}:null,a[`Auth refresh`]=async e=>{let{docsAuthRefresh:n}=await F(async()=>{let{docsAuthRefresh:e}=await import(`./docsAuthRefresh-UjveHHwo.js`);return{docsAuthRefresh:e}},__vite__mapDeps([11,1,2]),import.meta.url);return i.tabEl=n(e)},e.name!=`_superusers`&&(a.Verification=async e=>{let{docsVerification:n}=await F(async()=>{let{docsVerification:e}=await import(`./docsVerification-B_Nb90xU.js`);return{docsVerification:e}},[],import.meta.url);return i.tabEl=n(e)}),a[`Password reset`]=async e=>{let{docsPasswordReset:n}=await F(async()=>{let{docsPasswordReset:e}=await import(`./docsPasswordReset-vLO_ZWrq.js`);return{docsPasswordReset:e}},[],import.meta.url);return i.tabEl=n(e)},a[`Email change`]=async e=>{let{docsEmailChange:n}=await F(async()=>{let{docsEmailChange:e}=await import(`./docsEmailChange-B---6FKV.js`);return{docsEmailChange:e}},[],import.meta.url);return i.tabEl=n(e)});let o=[watch(()=>i.activeTab,async()=>{i.isLoading=!0,await a[i.activeTab]?.(e),i.isLoading=!1})];return r=t.div({pbEvent:`apiPreviewModal`,className:`modal api-preview-modal`,onbeforeopen:e=>n.onbeforeopen?.(e),onafteropen:e=>{n.onafteropen?.(e)},onbeforeclose:e=>n.onbeforeclose?.(e),onafterclose:e=>{n.onafterclose?.(e),o.forEach(e=>e?.unwatch()),e?.remove()},onmount:e=>{},onunmount:e=>{o.forEach(e=>e?.unwatch())}},t.div({className:`modal-content`},t.aside({className:`api-preview-sidebar`},t.nav({className:`api-preview-nav`},()=>{let e=[];for(let n in a){if(!n){e.push(t.hr());continue}let r=!a[n];e.push(t.button({type:`button`,className:()=>`nav-item ${i.activeTab==n?`active`:``}`,disabled:r,ariaDescription:app.attrs.tooltip(()=>r?`Not enabled for the collection`:``,`left`),onclick:()=>{r||(i.activeTab=n)}},n))}return e})),t.div({className:()=>`api-preview-content ${i.isLoading?`faded`:``}`,scrollTop:()=>i.activeTab?0:null},t.header({className:`api-preview-content-header`},t.h6(null,()=>i.activeTab+` (${e.name})`),t.button({type:`button`,className:()=>`btn sm circle transparent secondary m-l-auto preview-close-btn ${i.isLoading?`loading`:``}`,title:`Close`,onclick:()=>app.modals.close(r)},t.i({className:`ri-close-line`,ariaHidden:!0}))),()=>i.tabEl))),r}window.app=window.app||{},window.app.modals=window.app.modals||{},window.app.modals.openMailTest=function(e=``,n=``){let r=at(e,n);document.body.appendChild(r),app.modals.open(r)};function at(e=``,n=``){let r=`mail_test_`+app.utils.randomString(),i=`pbLastTestEmail`,a=`email_test_request`,o=[{label:`Verification`,value:`verification`},{label:`Password reset`,value:`password-reset`},{label:`Confirm email change`,value:`email-change`},{label:`OTP`,value:`otp`},{label:`Login alert`,value:`login-alert`}],s=store({email:localStorage.getItem(i)||app.store.superuser?.email||``,template:n||o[0].value,isSending:!1,collectionIdOrName:e,get isAuthCollectionsLoading(){return app.store.isCollectionsLoading},get authCollections(){return app.utils.sortedCollections(app.store.collections.filter(e=>e.type==`auth`))},get canSubmit(){return!!s.email&&!!s.template&&!!s.collectionIdOrName}}),c;async function l(){if(!(s.isSending||!s.canSubmit)){s.isSending=!0,clearTimeout(c),c=setTimeout(()=>{s.isSending=!1,app.pb.cancelRequest(a),app.modals.close(),app.toasts.error(`Test email send timeout.`)},15e3);try{s.email!=app.pb.authStore.record?.email&&localStorage.setItem(i,s.email),await app.pb.settings.testEmail(s.collectionIdOrName,s.email,s.template,{requestKey:a}),app.toasts.success(`Successfully sent test email.`),app.modals.close()}catch(e){app.checkApiError(e)}s.isSending=!1,clearTimeout(c)}}let u=[];return t.div({className:`modal popup sm`,onbeforeopen:e=>{u.push(watch(()=>s.isAuthCollectionsLoading,e=>{!e&&!s.collectionIdOrName&&(s.collectionIdOrName=s.authCollections[0]?.id||``)}))},onafterclose:e=>{clearTimeout(c),e?.remove()},onunmount:()=>{clearTimeout(c),u.forEach(e=>e?.unwatch())}},t.header({className:`modal-header`},t.h5({className:`m-auto`},`Send test email`)),t.form({id:r,className:`modal-content mail-settings-test-form`,onsubmit:e=>{e.preventDefault(),l()}},t.div({className:`grid`},t.div({className:`col-lg-12`},()=>o.map((e,n)=>t.field({className:()=>`field ${n>0?`m-t-10`:``}`},t.input({type:`radio`,id:r+`.template.`+e.value,name:`template`,checked:()=>s.template==e.value,onchange:n=>s.template=e.value}),t.label({htmlFor:r+`.template.`+e.value},e.label||e.value)))),()=>{if(!e)return t.div({className:`col-lg-12`},t.div({className:`field`},t.label({htmlFor:r+`.collection`},`Auth collection`),app.components.select({id:r+`.collection`,name:`collection`,required:!0,placeholder:()=>s.isAuthCollectionsLoading?`Loading auth collections...`:`Select auth collection`,options:()=>s.authCollections.map(e=>({value:e.id,label:e.name})),value:()=>s.collectionIdOrName||``,onchange:e=>{s.collectionIdOrName=e?.[0]?.value}})))},t.div({className:`col-lg-12`},t.div({className:`field`},t.label({htmlFor:r+`.email`},`To email address`),t.input({id:r+`.email`,name:`email`,type:`email`,required:!0,value:()=>s.email||``,oninput:e=>s.email=e.target.value}))))),t.footer({className:`modal-footer`},t.button({type:`button`,className:`btn transparent m-r-auto`,onclick:()=>app.modals.close(),disabled:()=>s.isSending},t.span({className:`txt`},`Close`)),t.button({"html-form":r,type:`submit`,className:()=>`btn expanded ${s.isSending?`loading`:``}`,disabled:()=>s.isSending||!s.canSubmit},t.i({className:`ri-mail-send-line`,ariaHidden:!0}),t.span({className:`txt`},`Send`))))}function ot(e={}){let n=store({rid:void 0,collectionA:null,collectionB:null,deleteMissing:!1,className:``}),r=app.utils.extendStore(n,e),i=store({hasAnyChange:!1,get isDeleteDiff(){return!n.collectionB?.id&&!n.collectionB?.name},get isCreateDiff(){return!i.isDeleteDiff&&!n.collectionA?.id},get hasAnyChange(){return app.utils.hasCollectionChanges(n.collectionA,n.collectionB,n.deleteMissing)},get fieldsListA(){return Array.isArray(n.collectionA?.fields)?n.collectionA?.fields:[]},get fieldsListB(){let e=Array.isArray(n.collectionB?.fields)?n.collectionB?.fields:[];return n.deleteMissing||(e=e.concat(n.collectionA?.fields?.filter(n=>!e.find(e=>n.id==e.id))||[])),e},get mainModelProps(){return app.utils.mergeUnique(Object.keys(n.collectionA||{}),Object.keys(n.collectionB||{})).filter(e=>![`fields`,`created`,`updated`].includes(e))},get removedFields(){return i.fieldsListA.filter(e=>!i.fieldsListB.find(n=>e.id==n.id))},get sharedFields(){return i.fieldsListB.filter(e=>i.fieldsListA.find(n=>n.id==e.id))},get addedFields(){return i.fieldsListB.filter(e=>!i.fieldsListA.find(n=>n.id==e.id))}});function a(e){return e===void 0?``:app.utils.isObject(e)?JSON.stringify(e,null,4):``+e}function o(e,n){return e===n?!1:JSON.stringify(e)!=JSON.stringify(n)}function s(e,n){return(e||[]).find(e=>e.id==n)}return t.div({rid:n.rid,pbEvent:`collectionsDiffTableWrapper`,className:()=>`collections-diff-table-wrapper ${n.className}`,onunmount:()=>{r.forEach(e=>e?.unwatch())}},t.div({className:`collections-diff-table-title`},()=>n.collectionA?.id?n.collectionB?.id?[t.span({hidden:()=>!i.hasAnyChange,className:`label import-change-label warning`,textContent:`Changed`}),t.div({className:`inline-flex gap-5`},()=>{if(n.collectionA?.name!=n.collectionB?.name)return[t.strong({className:`txt-strikethrough txt-hint`,textContent:n.collectionA?.name}),t.i({className:`ri-arrow-right-line txt-sm`,ariaHidden:!0})]},t.strong({textContent:()=>n.collectionB?.name}))]:[t.span({className:`label import-change-label danger`,textContent:`Deleted`}),t.strong({textContent:()=>n.collectionA?.name})]:[t.span({className:`label import-change-label success`,textContent:`Added`}),t.strong({textContent:()=>n.collectionB?.name})]),t.table({className:`collections-diff-table`},t.thead(null,t.tr(null,t.th({className:`min-width`},`Props`),t.th({width:`40%`},`Old`),t.th({width:`40%`},`New`))),t.tbody(null,()=>i.mainModelProps.map(e=>{let r=o(n.collectionA?.[e],n.collectionB?.[e]);return t.tr({className:r?`txt-primary`:``},t.td({className:`min-width`},e),t.td({className:()=>i.isCreateDiff?`changed-non-col`:r?`changed-old-col`:``},t.pre({className:`txt diff-value`},a(n.collectionA?.[e]))),t.td({className:()=>i.isDeleteDiff?`changed-non-col`:r?`changed-new-col`:``},t.pre({className:`txt diff-value`},a(n.collectionB?.[e]))))}),()=>{if(!n.deleteMissing&&!i.isDeleteDiff)return;let e=[];for(let n of i.removedFields){e.push(t.tr(null,t.th({className:`min-width`,colSpan:3},t.span({className:`txt`},`field: `,n.name),t.span({className:`label danger m-l-5`},`Deleted - `,t.small(null,`All stored data related to '${n.name}' will be deleted!`)))));for(let r in n){let i=n[r];e.push(t.tr(null,t.td({className:`min-width field-key-col`},r),t.td({className:`changed-old-col`},t.pre({className:`txt`},a(i))),t.td({className:`changed-none-col`})))}}return e},()=>{let e=[];for(let n of i.sharedFields){let r=s(i.fieldsListA,n.id),c=o(r,s(i.fieldsListB,n.id));e.push(t.tr(null,t.th({className:`min-width`,colSpan:3},t.span({className:`txt`},`field: `,n.name),t.span({className:`label warning m-l-5 ${c?``:`hidden`}`,textContent:`Changed`}))));for(let i in n){let s=n[i],c=o(r?.[i],s);e.push(t.tr({className:c?`txt-primary`:``},t.td({className:`min-width field-key-col`},i),t.td({className:c?`changed-old-col`:``},t.pre({className:`txt`},a(r?.[i]))),t.td({className:c?`changed-new-col`:``},t.pre({className:`txt`},a(s)))))}}return e},()=>{let e=[];for(let n of i.addedFields){e.push(t.tr(null,t.th({className:`min-width`,colSpan:3},t.span({className:`txt`},`field: `,n.name),t.span({className:`label success m-l-5`},`Added`))));for(let r in n){let i=n[r];e.push(t.tr({className:`txt-primary`},t.td({className:`min-width field-key-col`},r),t.td({className:`changed-none-col`}),t.td({className:`changed-new-col`},t.pre({className:`txt`},a(i)))))}}return e})))}window.app=window.app||{},window.app.modals=window.app.modals||{},window.app.modals.openImportCollectionsReview=function(e,n,r={deleteMissing:!1,onsubmit:null}){let i=st(e,n,r);i&&(document.body.appendChild(i),app.modals.open(i))};function st(e,n,r){let i,a=store({deleteMissing:!1,onsubmit:function(e){}}),o=app.utils.extendStore(a,r),s=store({isImporting:!1,pairs:[]});function c(){let r=[];for(let i of e){let e=n.find(e=>e.id==i.id);(a.deleteMissing&&!e?.id||e?.id&&app.utils.hasCollectionChanges(i,e,a.deleteMissing))&&r.push({old:i,new:e})}for(let i of n){let n=e.find(e=>e.id==i.id);n?.id||r.push({old:n,new:i})}s.pairs=r}function l(){let r=[];if(a.deleteMissing)for(let i of e){let e=n.find(e=>e.id==i.id);if(!e)r.push(i.name+`.*`);else{let n=Array.isArray(i.fields)?i.fields:[];for(let a of n)e.fields.find(e=>e.id==a.id)||r.push(`${i.name}.${a.name} (${a.id})`)}}r.length?app.modals.confirm([t.h6(null,`Do you really want to delete the following collection fields and their related records data:`),t.ul(null,()=>r.map(e=>t.li(null,e)))],()=>u()):u()}async function u(){if(!s.isImporting){s.isImporting=!0;try{await app.pb.collections.import(n,a.deleteMissing),await app.store.loadCollections(),a.onsubmit?.(JSON.parse(JSON.stringify(app.store.collections))),app.toasts.success(`Successfully imported collections configuration.`)}catch(e){app.checkApiError(e)}s.isImporting=!1,app.modals.close(i)}}return i=t.div({pbEvent:`importCollectionsReviewModal`,className:`modal popup full import-collections-review-modal`,onbeforeopen:()=>{c()},onbeforeclose:()=>!s.isImporting,onafterclose:e=>{e?.remove()},onunmount:()=>{o.forEach(e=>e?.unwatch())}},t.header({className:`modal-header`},t.h5(null,`Side-by-side diff`)),t.div({className:`modal-content`},()=>s.pairs.map(e=>ot({collectionA:e.old,collectionB:e.new,deleteMissing:a.deleteMissing}))),t.footer({className:`modal-footer`},t.button({type:`button`,className:`btn transparent m-r-auto`,disabled:()=>s.isImporting,onclick:()=>app.modals.close(i)},t.span({className:`txt`},`Close`)),t.button({type:`button`,className:()=>`btn expanded ${s.isImporting?`loading`:``}`,disabled:()=>s.isImporting,onclick:()=>l()},t.span({className:`txt`},`Confirm and import`)))),i}window.app=window.app||{},window.app.components=window.app.components||{},window.app.components.recordSummary=function(e,n=null){let r=store({get collection(){return app.store.collections.find(n=>n.id==e.collectionId||n.name==e.collectionName)},get presentableFields(){if(!r.collection?.id)return[];let e=r.collection.fields.filter(e=>e.presentable).sort((e,n)=>{let r=app.fieldTypes[e.type].summaryPriority||0,i=app.fieldTypes[n.type].summaryPriority||0;return r>i?1:r<i?-1:0});if(!e.length)for(let n of app.utils.fallbackPresentableProps){let i=r.collection?.fields?.find(e=>e.name==n);if(i){e.push(i);break}}return e}});return t.div({className:`label record-summary`},t.i({ariaHidden:!0,className:`ri-eye-line link-hint record-preview-icon`,onclick:e=>{e.stopImmediatePropagation(),e.preventDefault()},onmouseenter:n=>{lt(n.target,e,100)},onmouseleave:e=>{ct(e.target,100)},onunmount:e=>{ct(e,0)}}),()=>{let i=[];function a(e){(e==null||e==``)&&(e=t.span({className:`missing-value`})),i.push(e)}for(let i of r.presentableFields){let r=app.fieldTypes[i.type]?.view;if(r)a(r({short:!0,get record(){return e},get field(){return i},get meta(){return n}}));else{let n=app.utils.toArray(e[i.name]).splice(0,3);for(let e of n)a(e)}}return i})};function ct(e,n=150){if(e){if(clearTimeout(e._summaryDropdownTimeoutId),n<=0){e?._summaryDropdown?.hidePopover?.();return}e._summaryDropdownTimeoutId=setTimeout(()=>{e?._summaryDropdown?.hidePopover?.()},n)}}function lt(e,n,r=150){if(e){if(clearTimeout(e._summaryDropdownTimeoutId),r<=0){ut(e,n);return}e._summaryDropdownTimeoutId=setTimeout(()=>{ut(e,n)},r)}}var ut=function(e,n){e&&(e._summaryDropdown||(e._summaryDropdown=t.div({className:`dropdown record-summary-dropdown`,popover:`manual`,onclick:e=>{e.stopImmediatePropagation(),e.preventDefault()}},t.div({className:`record-header`},t.a({className:`link-hint txt-bold m-r-auto`,target:`_blank`,href:`#/collections?collection=${n.collectionName}&record=${n.id}`,onclick:e=>{e.stopImmediatePropagation()}},t.span({className:`txt`},`Edit relation record`),t.i({className:`ri-external-link-line`,ariaHidden:!0})),t.button({type:`button`,className:`link-hint`,title:`Close`,onclick:()=>ct(e,0)},t.i({className:`ri-close-line`,ariaHidden:!0}))),t.hr(),t.pre({className:`record-json`},()=>{let e=app.store.collections.find(e=>e.id==n.collectionId||e.name==n.collectionName)?.fields||[];if(!e.length)return;let r={collectionId:n.collectionId,collectionName:n.collectionName};for(let i of e)r[i.name]=n[i.name];return JSON.stringify(app.utils.truncateObject(r,27),null,2)})),e.appendChild(e._summaryDropdown)),e._summaryDropdown?.showPopover({source:e}))};window.app=window.app||{},window.app.components=window.app.components||{},window.app.components.recordsSearchbar=function(e={}){let n=store({rid:void 0,id:void 0,hidden:void 0,inert:void 0,disabled:void 0,value:``,className:``,collection:void 0,onsubmit:e=>{}}),r=app.utils.extendStore(n,e);return t.div({rid:n.rid,id:()=>n.id,hidden:()=>n.hidden,inert:()=>n.inert,className:()=>`full-width records-searchbar-wrapper ${n.className}`,onunmount:()=>{r.forEach(e=>e?.unwatch())}},app.components.searchbar({placeholder:()=>!n.disabled&&!n.collection?.id?`Loading...`:`Search term or filter...`,historyKey:()=>`pbRecordsSearchHistory_`+n.collection?.id,disabled:()=>n.disabled||!n.collection,value:()=>n.value,autocomplete:e=>app.utils.collectionAutocompleteKeys(n.collection,e,{requestKeys:!1,collectionJoinKeys:!1}),onsubmit:n.onsubmit}))},window.app=window.app||{},window.app.components=window.app.components||{};var I={max:10,pending:new Set,processing:new Set};function dt(e){return I.pending.add(e),I.processing.size<=I.max&&ft(),()=>{I.pending.delete(e),I.processing.delete(e),I.processing.size<I.max&&ft()}}function ft(){for(let e of I.pending){I.pending.delete(e),I.processing.add(e),e();return}}window.app.components.recordFileThumb=function(e={}){let n=store({rid:void 0,id:void 0,hidden:void 0,inert:void 0,record:{},filename:``,extraClasses:`sm`}),r=app.utils.extendStore(n,e),i=store({isPreviewLoading:!1,previewToken:``,get fileType(){return app.utils.getFileType(n.filename)},get hasPreview(){return[`image`,`audio`,`video`].includes(i.fileType)||n.filename.endsWith(`.pdf`)},previewURL:void 0});return t.button({rid:n.rid,id:()=>n.id,hidden:()=>n.hidden,inert:()=>n.inert,type:`button`,draggable:!1,className:()=>`thumb ${n.extraClasses} ${i.isPreviewLoading?`loading`:``}`,title:()=>(i.hasPreview?`Preview`:`Download`)+` `+n.filename,onclick:async e=>{e.stopPropagation();async function r(){let e=await app.getFileToken(n.record.collectionId);return app.pb.files.getURL(n.record,n.filename,{token:e})}if(i.hasPreview)app.modals.openFilePreview(r);else{let e=await r();app.utils.download(e,n.filename)}},onunmount:()=>{r.forEach(e=>e?.unwatch())}},()=>{if(i.fileType==`image`){let e=t.img({draggable:!1,alt:()=>`Thumb of `+n.filename,src:()=>i.previewURL,onerror:n=>{console.warn(`[recordFileThumb] load err:`,n),i.isPreviewLoading=!1,e?._semaphoreRelease?.()},onload:()=>{i.isPreviewLoading=!1,e?._semaphoreRelease?.()},onmount:e=>{i.isPreviewLoading=!0,e._semaphoreRelease=dt(async()=>{try{i.previewToken=await app.getFileToken(n.record.collectionId),i.previewURL=app.pb.files.getURL(n.record,n.filename,{thumb:`100x100`,token:i.previewToken})}catch(e){console.warn(e)}})},onunmount:e=>{i.isPreviewLoading=!1,e._semaphoreRelease?.()}});return e}return t.i({className:app.utils.fileTypeIcons[i.fileType]||`ri-file-line`,ariaHidden:!0})})},window.app=window.app||{},window.app.modals=window.app.modals||{};var pt=100,mt={btnText:`Insert`,fileTypes:[],onselect:function(e){}},ht=`pbLastRecordFilePickerCollection`,gt=`listFilePickerRecords`;window.app.modals.openRecordFilePicker=function(e={}){e=Object.assign({},mt,e);let n=_t(e);document.body.appendChild(n),app.modals.open(n)};function _t(e=mt){let n,r=`file_picker_`+app.utils.randomString(),i=store({selectedFile:{},records:[],activeCollectionId:``,searchTerm:``,lastRecordsPage:1,lastTotalRecords:0,isLoadingRecords:!1,get collections(){return app.utils.sortedCollections(app.store.collections.filter(e=>e.type==`view`?!1:!!e.fields?.find(e=>e.type===`file`&&!e.protected)))},get activeCollection(){return i.collections.find(e=>e.id==i.activeCollectionId)||i.collections[0]},get activeCollectionFileFields(){return i.activeCollection?.fields?.filter(e=>e.type===`file`&&!e.protected)||[]},get isLoading(){return app.store.isLoadingCollections||i.isLoadingRecords},get canLoadMore(){return!i.isLoadingRecords&&i.lastTotalRecords==pt},get hasAtleastOneFile(){return!!i.records.find(e=>c(e).length>0)}}),a=[];a.push(watch(()=>{i.activeCollectionId?(window.localStorage.setItem(ht,i.activeCollectionId),i.searchTerm=``):i.activeCollectionId=window.localStorage.getItem(ht)})),a.push(watch(()=>[i.activeCollection,i.searchTerm],()=>s(!0)));function o(){app.pb.cancelRequest(gt),i.isLoadingRecords=!1,i.records=[],i.lastTotalRecords=0,i.lastRecordsPage=1,i.selectedFile={}}async function s(e=!1){if(!i.activeCollection){o();return}e&&o(),i.isLoadingRecords=!0;try{let n=e?1:i.lastRecordsPage+1,r=app.utils.getAllCollectionIdentifiers(i.activeCollection),a=app.utils.normalizeSearchFilter(i.searchTerm,r)||``;a&&(a+=` && `),a+=`(`+i.activeCollectionFileFields.map(e=>`${e.name}:length>0`).join(`||`)+`)`;let o=await app.pb.collection(i.activeCollection.id).getList(n,pt,{requestKey:gt,filter:a,skipTotal:1,sort:i.activeCollection.type==`view`?``:`-@rowid`});i.lastRecordsPage=o.page,i.lastTotalRecords=o.items.length,i.records=app.utils.filterDuplicatesByKey(i.records.concat(o.items)),i.isLoadingRecords=!1}catch(e){e.isAbort||(i.isLoadingRecords=!1,app.checkApiError(e))}}function c(n){let r=[];for(let a of i.activeCollectionFileFields){let i=app.utils.toArray(n[a.name]);for(let n of i)(app.utils.isEmpty(e.fileTypes)||e.fileTypes?.includes(app.utils.getFileType(n)))&&r.push(n)}return r}function l(e,n){i.selectedFile={record:e,name:n,thumb:``}}function u(e,n){return i.selectedFile?.name==n&&i.selectedFile?.record?.id==e?.id}let d={"record:create":e=>{e.detail.collectionId==i.activeCollection?.id&&(i.selectedFile?.record?.id==e.detail.id&&(i.selectedFile.record=e.detail),s(!0))},"record:delete":e=>{e.detail.collectionId!=i.activeCollection?.id&&e.detail.collectionName!=i.activeCollection?.name||(i.selectedFile?.record?.id==e.detail.id&&(i.selectedFile={}),s(!0))}};return n=t.div({className:`modal popup record-file-picker-modal`,onafterclose:e=>{e?.remove()},onmount:e=>{for(let e in d)document.addEventListener(e,d[e])},onunmount:e=>{a.forEach(e=>e?.unwatch());for(let e in d)document.removeEventListener(e,d[e])}},t.header({className:`modal-header`},t.button({className:()=>`btn primary outline record-file-picker-collection-select-btn ${app.store.isLoadingCollections?`loading`:``}`,disabled:()=>app.store.isLoadingCollections,"html-popovertarget":`collections_dropdown`+r},t.span({className:`txt-lg collection-name m-r-auto`},()=>i.activeCollection?.name||`Select collection`),t.i({className:`ri-arrow-drop-down-line`,ariaHidden:!0})),t.div({id:`collections_dropdown`+r,className:`dropdown`,popover:`hint`},()=>i.collections.map(e=>t.button({type:`button`,className:()=>`dropdown-item ${i.activeCollectionId==e.id?`active`:``}`,onclick:n=>{i.activeCollectionId=e.id,n.target?.closest(`.dropdown`)?.hidePopover()}},e.name))),app.components.recordsSearchbar({disabled:()=>!i.activeCollection?.id,collection:()=>i.activeCollection,value:()=>i.searchTerm,onsubmit:e=>i.searchTerm=e}),t.button({type:`button`,className:`btn circle transparent`,ariaLabel:app.attrs.tooltip(`Add new record`),onclick:()=>app.modals.openRecordUpsert(i.activeCollection)},t.i({className:`ri-add-line txt-hint`,ariaHidden:!0}))),t.div({className:`modal-content`},t.div({className:`block txt-center`,hidden:()=>i.hasAtleastOneFile||!i.isLoading},t.span({className:`loader`})),t.div({className:`record-file-picker-list`},()=>{let e=[];for(let n of i.records){let r=c(n);for(let i of r)e.push(t.button({rid:n.id+`:`+i,className:()=>`list-item thumb ${u(n,i)?`success`:``}`,ariaDescription:app.attrs.tooltip(i,`bottom`),onclick:()=>l(n,i)},()=>{if(app.utils.hasImageExtension(i))return t.img({loading:`lazy`,src:app.pb.files.getURL(n,i,{thumb:`100x100`}),alt:i});let e=app.utils.getFileType(i);return t.i({className:app.utils.fileTypeIcons[e]||`ri-file-line`,ariaHidden:!0})}))}return e}),t.div({hidden:()=>!i.canLoadMore||!i.hasAtleastOneFile,className:`block txt-center`},t.button({className:()=>`btn secondary expanded-lg m-t-base ${i.isLoadingRecords?`loading`:``}`,disabled:()=>i.isLoadingRecords,onclick:()=>s()},t.span({className:`txt`},`Load more`))),t.div({className:`block txt-center txt-hint p-t-10 p-b-10`,hidden:()=>i.hasAtleastOneFile||i.isLoading},()=>app.utils.isEmpty(e.fileTypes)?t.p(null,`No records with selectable files found.`):t.p(null,`No "${e.fileTypes.join(`", "`)}" files found.`),t.button({type:`button`,className:`btn sm secondary`,textContent:`Clear search`,hidden:()=>!i.searchTerm?.length,onclick:()=>{i.searchTerm=``}}))),t.footer({className:`modal-footer`},t.button({type:`button`,className:`btn transparent m-r-auto`,onclick:()=>app.modals.close(n)},t.span({className:`txt`},`Close`)),()=>{if(!i.selectedFile?.name||!app.utils.hasImageExtension(i.selectedFile.name))return;let e=[{value:``,label:`Original size`},{value:`100x100`,label:`100x100 thumb`}],n=i.activeCollectionFileFields.find(e=>i.selectedFile.record[e.name].includes(i.selectedFile.name)),r=app.utils.toArray(n.thumbs);for(let n of r)e.push({value:n,label:`${n} thumb`});return t.div({className:`record-file-picker-thumb-select`},app.components.select({required:!0,value:i.selectedFile.thumb||``,options:e,onchange:e=>{i.selectedFile.thumb=e?.[0].value}}))},t.button({type:`button`,className:`btn expanded`,disabled:()=>i.isLoading||!i.selectedFile?.name,onclick:()=>{let r=JSON.parse(JSON.stringify(i.selectedFile));if(e.onselect&&e.onselect(r)===!1)return!1;app.modals.close(n)}},t.span({className:`txt`},()=>e.btnText||mt.btnText)))),n}window.app=window.app||{},window.app.modals=window.app.modals||{};var vt=50,yt=100,bt=`listRelationPickerRecords`,xt={collection:``,selectedIds:[],maxSelect:1,btnText:`Set selection`,onselect:function(e){}};window.app.modals.openRecordsPicker=function(e={}){e=Object.assign({},xt,e);let n=St(e);document.body.appendChild(n),app.modals.open(n)};function St(e=xt){let n,r=store({searchTerm:``,selected:[],preselected:[],isLoadingPreselected:!1,records:[],isLoadingRecords:!1,lastRecordsPage:1,lastRecordsTotal:0,get collection(){let n=e.collection;return typeof e.collection==`object`&&e.collection?.id&&(n=e.collection?.id),app.store.collections.find(e=>e.id==n||e.name==n)},get isLoading(){return r.isLoadingPreselected||r.isLoadingRecords},get canLoadMore(){return!r.isLoadingRecords&&r.lastRecordsTotal==vt}}),i=[watch(()=>[e.collection,e.selectedIds],()=>{o()}),watch(()=>[r.collection,r.searchTerm],()=>{s(!0)})];function a(){setTimeout(()=>app.modals.close(n),0)}async function o(){let n=app.utils.toArray(e.selectedIds),i=e.collection?.id||e.collection;if(!i||!n.length)return;r.isLoadingSelected=!0;let a=[],o=n.slice(),s=[];for(;o.length>0;){let e=[],n=o.splice(0,yt);for(let r of n)e.push(`id="${r}"`);s.push(app.pb.collection(i).getFullList({requestKey:null,filter:e.join(`||`)}))}try{await Promise.all(s).then(e=>{a=a.concat(...e)});let e=[];for(let r of n){let n=a.find(e=>e.id==r);n&&e.push(n)}r.searchTerm.trim()||(r.records=app.utils.filterDuplicatesByKey(e.concat(r.records))),r.selected=e,r.isLoadingSelected=!1}catch(e){e.isAbort||(app.checkApiError(e),r.isLoadingSelected=!1)}}async function s(e=!1){if(r.collection?.id){e&&(c(),r.searchTerm.trim()||(r.records=r.selected.slice())),r.isLoadingRecords=!0;try{let n=e?1:r.lastRecordsPage+1,i=app.utils.getAllCollectionIdentifiers(r.collection),a=app.utils.normalizeSearchFilter(r.searchTerm,i)||``,o=await app.pb.collection(r.collection.id).getList(n,vt,{requestKey:bt,filter:a,skipTotal:1,sort:r.collection.type==`view`?``:`-@rowid`});r.lastRecordsPage=o.page,r.lastRecordsTotal=o.items.length,r.records=app.utils.filterDuplicatesByKey(r.records.concat(o.items)),r.isLoadingRecords=!1}catch(e){e.isAbort||(r.isLoadingRecords=!1,app.checkApiError(e))}}}function c(){app.pb.cancelRequest(bt),r.isLoadingRecords=!1,r.records=[],r.lastTotalRecords=0,r.lastRecordsPage=1}function l(e){e.target.scrollHeight-e.target.clientHeight-e.target.scrollTop<=100&&r.canLoadMore&&s()}function u(n){let i=r.selected.findIndex(e=>e.id==n.id);if(i>=0)r.selected.splice(i,1);else{let i=e.maxSelect||1,a=r.selected.length-i;for(;a>=0;)r.selected.pop(),a--;r.selected.push(n)}}function d(e){return r.selected.findIndex(n=>n.id==e.id)>=0}let f={"record:save":e=>{if(e.detail.collectionId!=r.collection?.id)return;let n=r.selected?.findIndex(n=>n.id==e.detail.id);n>=0&&(r.selected[n]=e.detail),app.utils.pushOrReplaceObject(r.records,e.detail),s(!0)},"record:delete":e=>{e.detail.collectionId!=r.collection?.id&&e.detail.collectionName!=r.collection?.name||(d(e.detail)&&u(e.detail),app.utils.removeByKey(r.records,`id`,e.detail.id),s(!0))}};return n=t.div({className:`modal popup lg records-picker-modal`,onafterclose:e=>{e.remove()},onmount:e=>{for(let e in f)document.addEventListener(e,f[e])},onunmount:e=>{i.forEach(e=>e?.unwatch());for(let e in f)document.removeEventListener(e,f[e])}},t.header({className:`modal-header`},t.h6({className:`collection-name`},()=>r.collection.name),app.components.recordsSearchbar({disabled:()=>!r.collection?.id,collection:()=>r.collection,value:()=>r.searchTerm,onsubmit:e=>r.searchTerm=e}),t.button({type:`button`,className:`btn circle transparent`,ariaLabel:app.attrs.tooltip(`Add new record`),onclick:()=>{app.modals.openRecordUpsert(r.collection)}},t.i({className:`ri-add-line txt-hint`,ariaHidden:!0}))),t.div({className:`modal-content`,hidden:()=>r.isLoadingCollection},t.div({className:`list records-picker-list`,onscroll:l,onresize:l},()=>r.records.map(e=>t.div({tabIndex:0,className:`list-item handle`,onclick:()=>{u(e),document.activeElement?.blur()}},t.div({className:`content`},t.span({className:`state-icon`},t.i({ariaHidden:!0,className:()=>d(e)?`ri-checkbox-circle-fill txt-success`:`ri-checkbox-blank-circle-line txt-disabled`})),()=>app.components.recordSummary(e)),t.div({className:`actions autohide`},t.button({className:`btn sm secondary transparent circle`,ariaLabel:app.attrs.tooltip(`Edit`),onclick:n=>{n.stopPropagation(),app.modals.openRecordUpsert(r.collection,e)}},t.i({className:`ri-pencil-line`,ariaHidden:!0}))))),t.div({className:`list-item`,hidden:()=>!r.isLoading},t.div({className:`skeleton-loader`})),t.div({className:`list-item`,hidden:()=>r.records.length||r.isLoading},t.div({className:`content txt-hint`},t.span({className:`txt`},`No records found.`),t.button({type:`button`,className:`btn sm secondary`,textContent:`Clear search`,hidden:()=>!r.searchTerm.trim().length,onclick:()=>{r.searchTerm=``}})))),t.div({className:`block m-t-base`},t.p({className:`txt-bold`},()=>`Selected (${r.selected.length} of max ${e.maxSelect||1})`),t.span({className:`txt-hint`,hidden:()=>r.selected},`No selected records.`),app.components.sortable({className:`records-picker-selected-list`,data:()=>r.selected,dataItem:(e,n)=>t.div({rid:e,className:`label handle`},()=>app.components.recordSummary(e,[],!0),t.span({className:`link-hint`,title:`Remove`,role:`button`,onclick:()=>u(e)},t.i({className:`ri-close-line`,ariaHidden:!0}))),onchange:(e,n,i)=>{r.selected=e}}))),t.footer({className:`modal-footer`},t.button({type:`button`,className:`btn transparent m-r-auto`,onclick:()=>a()},t.span({className:`txt`},`Close`)),()=>{if(!r.selectedFile?.name||!app.utils.hasImageExtension(r.selectedFile.name))return;let e=[{value:``,label:`Original size`},{value:`100x100`,label:`100x100 thumb`}],n=r.activeCollectionFileFields.find(e=>r.selectedFile.record[e.name].includes(r.selectedFile.name)),i=app.utils.toArray(n.thumbs);for(let n of i)e.push({value:n,label:`${n} thumb`});return t.div({className:`record-file-picker-thumb-select`},app.components.select({required:!0,value:r.selectedFile.thumb||``,options:e,onchange:e=>{r.selectedFile.thumb=e?.[0].value}}))},t.button({type:`button`,className:`btn expanded`,disabled:()=>r.isLoadingCollection,onclick:()=>{let n=JSON.parse(JSON.stringify(r.selected));if(e.onselect&&e.onselect(n)===!1)return!1;a()}},t.span({className:`txt`},e.btnText||xt.btnText)))),n}window.app=window.app||{},window.app.modals=window.app.modals||{},window.app.modals.openRecordPreview=function(e,n={onbeforeopen:null,onafteropen:null,onbeforeclose:null,onafterclose:null}){let r=R(e,n);r&&(document.body.appendChild(r),app.modals.open(r))};function Ct(e){e.expand&&(e=Object.assign({},e),delete e.expand),app.utils.downloadJSON(e,e.collectionName+`_`+e.id+`.json`)}function wt(e){e.expand&&(e=Object.assign({},e),delete e.expand),app.utils.copyToClipboard(JSON.stringify(e,null,2)),app.toasts.success(`Record copied to clipboard!`)}function R(e,n){let r,i=app.utils.randomString(),a=store({isLoading:!1,record:null,get collection(){return app.store.collections.find(n=>n.id==e.collectionId||n.name==e.collectionName)}});async function o(){if(!e?.id){app.toasts.error(`Failed to load record.`),setTimeout(()=>app.modals.close(r),0),console.warn(`[recordPreviewModal] missing required record id field:`,e);return}if(!e.collectionId&&!e.collectionName){app.toasts.error(`Failed to load record.`),setTimeout(()=>app.modals.close(r),0),console.warn(`[recordPreviewModal] missing required collectionId or collectionName field:`,e);return}a.isLoading=!0;try{let n=[],r=a.collection?.fields?.filter(e=>!e.hidden&&e.presentable&&e.type==`relation`)||[];for(let e of r)n.push(e.name);a.record=await app.pb.collection(e.collectionId||e.collectionName).getOne(e.id,{requestKey:`record_preview_`+e.id,expand:n.join(`,`)||void 0}),a.isLoading=!1}catch(e){e?.isAbort||(a.isLoading=!1,app.checkApiError(e),setTimeout(()=>app.modals.close(r),0))}}return r=t.div({pbEvent:`recordPreviewModal`,className:`modal record-preview-modal`,onbeforeopen:e=>(o(),n.onbeforeopen?.(e)),onafteropen:e=>{n.onafteropen?.(e)},onbeforeclose:e=>n.onbeforeclose?.(e),onafterclose:e=>{n.onafterclose?.(e),e?.remove()},onmount:e=>{},onunmount:e=>{}},t.header({className:`modal-header`},t.h6(null,t.strong(null,()=>e?.collectionName||a.collection?.name),` record preview`),t.button({title:`More options`,className:`btn sm circle transparent m-l-auto`,"html-popovertarget":i+`preview-dropdown`},t.i({className:`ri-more-line`,ariaHidden:!0})),t.div({id:i+`preview-dropdown`,className:`dropdown`,popover:`auto`},e=>t.button({className:`dropdown-item`,onclick:()=>{wt(a.record),e.hidePopover()}},t.i({className:`ri-braces-line`,ariaHidden:!0}),t.span({className:`txt`},`Copy JSON`)))),t.div({className:`modal-content`},()=>a.isLoading||!a.record?.id||!a.collection?.id?t.table(null,t.tbody(null,()=>{let e=a.collection?.fields?.filter(e=>e.type!=`password`).length||1,n=[];for(let r=0;r<e;r++)n.push(t.tr(null,t.td(null,t.span({className:`skeleton-loader`}))));return n})):t.table({pbEvent:`recordPreviewTable`,className:`record-preview-table responsive-table`},t.tbody(null,()=>(a.collection?.fields?.filter(e=>e.type!=`password`)||[]).map(e=>t.tr(null,t.th({className:()=>`min-width p-r-0 col-field-name-${e.name}`},e.name),t.td({className:()=>`col-field-name-${e.name}`},()=>app.fieldTypes[e.type]?.view?app.fieldTypes[e.type].view({short:!1,get record(){return a.record},get field(){return e}}):app.utils.stringifyValue(a.record[e.name]))))))),t.footer({className:`modal-footer`},t.button({type:`button`,className:`btn transparent m-r-auto`,onclick:()=>app.modals.close(r)},t.span({className:`txt`},`Close`)),t.button({type:`button`,className:`btn`,onclick:()=>Ct(a.record)},t.i({className:`ri-download-line`,ariaHidden:!0}),t.span({className:`txt`},`Download JSON`)))),r}window.app=window.app||{},window.app.modals=window.app.modals||{},window.app.modals.openRecordImpersontate=function(e){let n=z(e);document.body.appendChild(n),app.modals.open(n)};function z(e){let n=`impersonate_`+app.utils.randomString(),r=store({isLoading:!1,token:``,duration:0,get collection(){return app.store.collections.find(n=>n.id==e.collectionId||n.name==e.collectionName)}}),i=app.utils.getApiExampleURL();async function a(){if(!r.isLoading){r.isLoading=!0;try{r.token=(await app.pb.collection(r.collection.name).impersonate(e.id,r.duration)).authStore.token}catch(e){app.checkApiError(e)}r.isLoading=!1}}function o(){r.token=``,r.duration=0}return t.div({className:`modal popup record-impersonate-auth-modal`,onbeforeclose:()=>!r.isLoading,onafterclose:e=>{e?.remove()}},t.header({className:`modal-header`},t.h6(null,`Generate nonrenewable auth token for `,t.strong(null,()=>e.email||e.id))),t.div({className:`modal-content`},t.form({id:n+`_form`,hidden:()=>r.token,className:`block`,onsubmit:e=>{e.preventDefault(),a()}},t.div({className:`field`},t.label({htmlFor:n+`_duration`},`Token duration (in seconds)`),t.input({id:n+`_duration`,type:`number`,name:`duration`,min:0,step:1,placeholder:()=>`Default to the collection settings (${r.collection?.authToken?.duration||0}s)`,value:e=>r.duration||``,oninput:e=>r.duration=parseInt(e.target.value,10)}))),t.div({hidden:()=>!r.token,className:`alert success impersonate-success`},t.strong(null,()=>r.token),` `,app.components.copyButton(()=>r.token)),app.components.codeBlockTabs({hidden:()=>!r.token,className:`sdk-examples m-t-base`,tabs:[{title:`JS SDK`,language:`js`,value:`
import PocketBase from 'pocketbase';
const pb = new PocketBase('${i}');
// load the token into the store
const token = '...';
pb.authStore.save(token, null);
`,footnote:t.div({className:`txt-right`},t.a({href:`https://github.com/pocketbase/js-sdk`,target:`_blank`,rel:`noopener noreferrer`,textContent:`JS SDK docs`}))},{title:`Dart SDK`,language:`dart`,value:`
import 'package:pocketbase/pocketbase.dart';
final pb = PocketBase('${i}');
// load the token into the store
final token = '...';
pb.authStore.save(token, null);
`,footnote:t.div({className:`txt-right`},t.a({href:`https://github.com/pocketbase/dart-sdk`,target:`_blank`,rel:`noopener noreferrer`,textContent:`Dart SDK docs`}))}]})),t.footer({className:`modal-footer`},t.button({type:`button`,className:`btn transparent m-r-auto`,disabled:()=>r.isLoading,onclick:()=>app.modals.close()},t.span({className:`txt`},`Close`)),t.button({hidden:()=>r.token,type:`submit`,"html-form":n+`_form`,className:()=>`btn expanded-lg ${r.isLoading?`loading`:``}`,disabled:()=>r.isLoading},t.span({className:`txt`},`Generate token`)),t.button({hidden:()=>!r.token,type:`button`,className:()=>`btn secondary expanded-lg ${r.isLoading?`loading`:``}`,onclick:()=>o()},t.span({className:`txt`},`Generate new one`))))}window.app=window.app||{},window.app.modals=window.app.modals||{},window.app.modals.openRecordUpsert=function(e,n=null,r={onbeforeopen:null,onafteropen:null,onbeforeclose:null,onafterclose:null,onsave:null,ondelete:null,onduplicate:null,ontokensreset:null,onpasswordresetsend:null,onverificationsend:null}){app.store.errors=null;let i=kt(e,n,r);i&&(document.body.appendChild(i),app.modals.open(i))};var Tt=[`expand`];function Et(e,n=Tt){if(n.find(n=>e[n]!==void 0)){e=Object.assign({},e);for(let r of n)delete e[r]}return e}function Dt(e){e=Et(e),app.utils.copyToClipboard(JSON.stringify(e,null,2)),app.toasts.success(`Record copied to clipboard!`)}function Ot(e){return e?JSON.stringify(e):``}var B=`main`,V=`authProviders`;function kt(e,n,r){if(!e?.id){console.warn(`[recordUpsertModal] missing required collection`);return}let i,a=`record_upsert_`+app.utils.randomString(),o=app.utils.getLocalHistory(app.consts.COLUMNS_STORAGE_PREFIX+e.id,{}),s=store({isLoading:!0,isSaving:!1,isLocked:!1,originalRecord:{},record:{},initialDraft:null,activeTab:B,get isNew(){return app.utils.isEmpty(s.originalRecord?.id)},get isAuthCollection(){return e.type==`auth`},get isSuperusersCollection(){return e.name==`_superusers`},get showTabs(){return!s.isNew&&s.isAuthCollection&&!s.isSuperusersCollection},get excludedFields(){let e=[`id`];return s.isAuthCollection&&e.push(`email`,`emailVisibility`,`verified`,`password`,`tokenKey`),e},get initialDraftHash(){return Ot(s.initialDraft)},get recordHash(){return Ot(s.record)},get originalRecordHash(){return Ot(s.originalRecord)},get hasChanges(){return s.originalRecordHash!=s.recordHash},get isFormDisabled(){return s.isLoading||s.isSaving||!s.isNew&&!s.hasChanges}});function c(){return`draft_`+e.id+`_`+(s.originalRecord?.id||``)}function l(){return window.localStorage.getItem(c())||``}function u(){try{let e=l();if(e)return JSON.parse(e)}catch(e){console.warn(`getDraft failure:`,e),f()}return null}function d(e){try{window.localStorage.setItem(c(),e)}catch(e){console.warn(`saveDraft failure:`,e),f()}}function f(){window.localStorage.removeItem(c()),s.initialDraft=null}function p(){if(!s.initialDraft)return;app.store.errors&&(app.store.errors=null);let e=JSON.parse(JSON.stringify(s.initialDraft));f(),s.record=e}async function m(n){s.isLoading=!0;let r=typeof n==`string`?n:n?.id;if(!r){let e=app.utils.isObject(n)?JSON.parse(JSON.stringify(n)):{};s.originalRecord=app.utils.emptyClone(e,[`collectionId`,`collectionName`]),s.initialDraft=u(),s.record=e,s.isLoading=!1,s.isLocked=!1;return}s.isLocked=!!app.store.settings?.meta?.hideControls;try{s.originalRecord={id:r};let n=await app.pb.collection(e.name).getOne(r,{requestKey:`upsert_load_`+r});s.originalRecord=n,s.initialDraft=u(),s.record=JSON.parse(JSON.stringify(n)),s.isLoading=!1}catch(e){e?.isAbort||(app.checkApiError(e),s.isLoading=!1,setTimeout(()=>app.modals.close(i,!0),0))}}async function h(){let n={};for(let e in s.record){if(e==`expand`||e.startsWith(`@@`))continue;let r=s.record[e]?.__raw||s.record[e];r===void 0&&(r=null),n[e]=r}for(let r of e.fields){let i=app.fieldTypes[r.type]?.onrecordsave;i&&await i({collection:e,originalRecord:s.originalRecord,record:s.record,field:r,payload:n})}return n}async function g(n=!0){if(!(s.isLocked||s.isSaving||!s.isNew&&!s.hasChanges)){s.isSaving=!0;try{let a=await h(),o=app.utils.isEmpty(s.originalRecord?.id),c;c=o?await app.pb.collection(e.name).create(a):await app.pb.collection(e.name).update(s.originalRecord.id,a),f(),o?(s.originalRecord=structuredClone(c),s.record=structuredClone(c)):(Object.assign(s.originalRecord,structuredClone(c)),Object.assign(s.record,structuredClone(c))),r.onsave?.(structuredClone(c),o),app.store.errors=null;let l;l=o?`Successfully created ${e.name} "${c.id}".`:`Successfully updated ${e.name} "${c.id}".`,app.toasts.success(l,{key:`recordSave`}),s.isSaving=!1,n&&app.modals.close(i,!0)}catch(e){e?.isAbort||(s.isSaving=!1,app.checkApiError(e,!1),app.toasts.error(e.message||`Failed to save record.`,{key:`recordSave`}))}}}function _(){f(),s.record=JSON.parse(JSON.stringify(s.originalRecord))}async function v(){let n=s.originalRecord?JSON.parse(JSON.stringify(s.originalRecord)):{};n.id=``;for(let r of e.fields){let i=app.fieldTypes[r.type]?.onrecordduplicate;i&&await i({collection:e,field:r,originalRecord:s.originalRecord,clone:n})}f(),r.onduplicate?.(n),m(n)}let ee=[];function te(){return[t.div({className:`modal-content`},t.form({id:a+`form`,className:`grid`,inert:()=>s.isLoading||s.isSaving,onsubmit:e=>{e.preventDefault()},onmount:e=>{e._quickSaveHandler=e=>{(e.ctrlKey||e.metaKey)&&e.code==`KeyS`&&(e.preventDefault(),g(!1))},window.addEventListener(`keydown`,e._quickSaveHandler)},onunmount:e=>{e?._quickSaveHandler&&window.removeEventListener(`keydown`,e?._quickSaveHandler)}},()=>{if(!(s.isLoading||s.hasChanges||app.utils.isEmpty(s.initialDraft)||s.initialDraftHash==s.recordHash))return t.div({className:`col-12`},t.div({className:`alert warning flex gap-sm`},t.div({className:`content`},`The record has previous unsaved changes.`),t.button({type:`button`,className:`btn sm outline`,onclick:()=>p()},t.span({className:`txt`},`Restore draft`)),t.button({type:`button`,className:`btn sm secondary transparent circle m-l-auto`,ariaLabel:app.attrs.tooltip(`Discard draft`,`left`),onclick:()=>{f()}},t.i({className:`ri-close-line`,ariaHidden:!0}))))},()=>{let n=e.fields?.find(e=>e.primaryKey);return t.div({className:`col-12`},app.fieldTypes[n.type].input({get collection(){return e},get originalRecord(){return s.originalRecord},get record(){return s.record},get field(){return n}}))},()=>{if(!s.isAuthCollection)return;let n=[t.div({className:`col-12`},U(e,s)),t.div({className:`col-12`},Ft(e,s))];return s.isSuperusersCollection||n.push(t.div({className:`col-12`},Pt(e,s))),n},()=>{let n=[],r=s.excludedFields;for(let i of e.fields)!app.fieldTypes[i.type]?.input||r.includes(i.name)||n.push(t.div({className:()=>`col-12 ${i.hidden&&!o[i.id]?`hidden-field-blur`:``}`},()=>app.fieldTypes[i.type].input({get collection(){return e},get originalRecord(){return s.originalRecord},get record(){return s.record},get field(){return i}})));return n.length&&s.isAuthCollection&&n.unshift(t.div({className:`col-12`},t.hr({className:`m-0`}))),n})),t.footer({className:`modal-footer`},t.button({type:`button`,className:`btn transparent m-r-auto`,disabled:()=>s.isSaving,onclick:()=>app.modals.close(i)},t.span({className:`txt`},`Close`)),t.button({hidden:()=>!s.isLocked,type:`button`,className:`btn outline`,disabled:()=>s.isFormDisabled,onclick:()=>s.isLocked=!1},t.i({className:`ri-lock-unlock-line`,ariaHidden:!0}),t.span({className:`txt`},`Unlock to save`)),t.div({hidden:()=>s.isLocked,className:`btns`},t.button({type:`button`,className:()=>`btn expanded-lg ${s.isLoading||s.isSaving?`loading`:``}`,disabled:()=>s.isLocked||s.isFormDisabled,onclick:()=>g()},t.span({className:`txt`},()=>s.isNew?`Create`:`Save changes`)),t.button({type:`button`,className:()=>`btn p-5`,title:`Save options`,disabled:()=>s.isLocked||s.isFormDisabled,"html-popovertarget":a+`save_options`},t.i({className:`ri-arrow-up-s-line`,ariaHidden:!0})),t.div({id:a+`save_options`,className:`dropdown nowrap`,popover:`auto`},t.button({type:`button`,className:`dropdown-item`,onclick:e=>{e.target.closest(`.dropdown`).hidePopover(),g(!1)}},t.span({className:`txt`},`Save and continue`),t.small({className:`txt-hint`},`(Ctrl+S)`)),t.hr(),t.button({type:`button`,className:`dropdown-item`,onclick:e=>{e.target.closest(`.dropdown`).hidePopover(),_()}},t.span({className:`txt`},`Reset form`)))))]}return i=t.div({pbEvent:`recordUpsertModal`,className:`modal record-upsert-modal`,onbeforeopen:()=>(m(n),ee.push(watch(()=>s.recordHash,(e,n)=>{!n||!e||e==`{}`||n==`{}`||d(e)})),r.onbeforeopen?.(el)),onafteropen:e=>{r.onafteropen?.(e)},onbeforeclose:(e,n)=>(!s.hasChanges&&s.initialDraftHash!=l()&&f(),n?r.onbeforeclose?.(e):s.isLoading||s.isSaving?!1:s.hasChanges?new Promise(n=>{app.modals.confirm(`You have unsaved changes. Do you really want to discard them?`,()=>(f(),n(r.onbeforeclose?.(e))),()=>n(!1),{yesButton:`Yes, discard`})}):r.onbeforeclose?.(e)),onafterclose:e=>{r.onafterclose?.(e),ee.forEach(e=>e?.unwatch()),e?.remove()},onunmount:()=>{ee.forEach(e=>e?.unwatch())}},t.header({className:()=>`modal-header ${s.showTabs?`isolated`:``}`},t.div({className:`grid`},t.div({className:`col-12 flex`},t.h6({className:`modal-title`},()=>s.isLoading?t.span({className:`loader sm`}):[t.span(null,()=>s.isNew?`Create `:`Edit `),t.strong({className:`txt-ellipsis collection-name`,style:`max-width: 220px`},()=>e.name),t.span(null,` record`)]),t.div({className:`flex-fill`}),()=>{if(!app.utils.isEmpty(s.originalRecord?.id))return[t.button({type:`button`,className:`btn sm circle transparent`,title:`More options`,disabled:()=>s.isLoading,"html-popovertarget":a+`modal-header-dropdown`},t.i({className:`ri-more-line`,ariaHidden:!0})),t.div({id:a+`modal-header-dropdown`,className:`dropdown nowrap modal-header-dropdown`,popover:`auto`},()=>{if(!s.isAuthCollection)return;let n=[];return!s.originalRecord.verified&&s.originalRecord.email&&!s.isSuperusersCollection&&n.push(jt(e,s,r)),s.originalRecord.email&&n.push(H(e,s,r)),n.push(Mt(e,s,r)),n.push(At(e,s,r)),n.push(t.hr()),n},t.button({type:`button`,className:`dropdown-item`,onclick:e=>{e.target.closest(`.dropdown`).hidePopover(),Dt(s.originalRecord)}},t.i({className:`ri-braces-line`,ariaHidden:!0}),t.span({className:`txt`},`Copy JSON`)),()=>{if(e.type!=`view`)return[t.button({type:`button`,className:`dropdown-item`,onclick:e=>{e.target.closest(`.dropdown`).hidePopover(),s.hasChanges?app.modals.confirm(`You have unsaved changes. Do you really want to discard them?`,v,null,{yesButton:`Yes, discard`}):v()}},t.i({className:`ri-file-copy-line`,ariaHidden:!0}),t.span({className:`txt`},`Duplicate`)),t.hr(),Nt(e,s,r)]})]}),()=>{if(s.showTabs)return t.div({className:`col-12`},t.nav({className:`tabs-header equal-width`},t.button({type:`button`,disabled:()=>s.isLoading||s.isSaving,className:()=>`tab-item ${s.activeTab==B?`active`:s.hasChanges?`txt-warning`:``}`,ariaDescription:app.attrs.tooltip(()=>s.hasChanges&&s.activeTab!=B?`Has unsaved changes`:``),onclick:()=>s.activeTab=B},t.span({className:`txt`},()=>s.isAuthCollection?`Account`:`Main`)),t.button({type:`button`,disabled:()=>s.isLoading||s.isSaving,className:()=>`tab-item ${s.activeTab==V?`active`:``}`,onclick:()=>s.activeTab=V},t.span({className:`txt`},`Auth providers`))))})),()=>!s.isNew&&!s.isSuperusersCollection&&s.activeTab==V?It(e,s):te()),i}function At(e,n,r){let i=store({isSubmitting:!1});async function a(){if(!(i.isSubmitting||!n.record.id)){i.isSubmitting=!0;try{let i={},a=e.fields.find(e=>e.name==`tokenKey`);a.autogeneratePattern?i[`tokenKey:autogenerate`]=``:i.tokenKey=app.utils.randomSecret(a.max<<0||Math.max(2*a.min<<0,50));let o=await app.pb.collection(e.name).update(n.record.id,i);r.ontokensreset?.(o);let s=e.fields?.filter(e=>e.type==`autodate`)||[];for(let e of s){let r=o[e.name];n.initialDraft&&(n.initialDraft[e.name]=r),n.originalRecord[e.name]=r,n.record[e.name]=r}app.toasts.success(`Successfully reset all tokens for the selected record.`)}catch(e){app.checkApiError(e)}i.isSubmitting=!1}}return t.button({type:`button`,className:`dropdown-item`,disabled:()=>i.isSubmitting,onclick:e=>{e.target.closest(`.dropdown`).hidePopover(),app.modals.confirm(`Do you really want to reset all issued tokens for the selected auth record?`,a,null,{yesButton:`Reset all tokens`})}},t.i({className:`ri-reset-left-line`,ariaHidden:!0}),t.span({className:`txt`},`Reset issued tokens`))}function H(e,n,r){let i=store({isSubmitting:!1});async function a(){if(!(i.isSubmitting||!n.originalRecord?.email)){i.isSubmitting=!0;try{await app.pb.collection(e.name).requestPasswordReset(n.originalRecord.email),r.onpasswordresetsend?.(JSON.parse(JSON.stringify(n.originalRecord))),app.toasts.success(`Successfully sent password reset email to ${n.originalRecord.email}.`)}catch(e){app.checkApiError(e)}i.isSubmitting=!1}}return t.button({type:`button`,className:`dropdown-item`,disabled:()=>i.isSubmitting,onclick:e=>{e.target.closest(`.dropdown`).hidePopover(),app.modals.confirm(`Do you really want to send password reset email to ${n.originalRecord?.email}?`,a,null,{yesButton:`Send`})}},t.i({className:`ri-mail-lock-line`,ariaHidden:!0}),t.span({className:`txt`},`Send password reset email`))}function jt(e,n,r){let i=store({isSubmitting:!1});async function a(){if(!(i.isSubmitting||!n.originalRecord?.email||n.originalRecord?.verified)){i.isSubmitting=!0;try{await app.pb.collection(e.name).requestVerification(n.originalRecord.email),r.onverificationsend?.(JSON.parse(JSON.stringify(n.originalRecord))),app.toasts.success(`Successfully sent verification email to ${n.originalRecord.email}.`)}catch(e){app.checkApiError(e)}i.isSubmitting=!1}}return t.button({type:`button`,className:`dropdown-item`,disabled:()=>i.isSubmitting,onclick:e=>{e.target.closest(`.dropdown`).hidePopover(),app.modals.confirm(`Do you really want to send verification email to ${n.originalRecord?.email}?`,a,null,{yesButton:`Send`})}},t.i({className:`ri-mail-check-line`,ariaHidden:!0}),t.span({className:`txt`},`Send verification email`))}function Mt(e,n,r){return t.button({type:`button`,className:`dropdown-item`,onclick:e=>{e.target.closest(`.dropdown`).hidePopover(),app.modals.openRecordImpersontate(n.originalRecord)}},t.i({className:`ri-id-card-line`,ariaHidden:!0}),t.span({className:`txt`},`Impersonate`))}function Nt(e,n,r){let i=store({isSubmitting:!1});async function a(){if(!(i.isSubmitting||!n.originalRecord?.id)){i.isSubmitting=!0;try{await app.pb.collection(e.name).delete(n.originalRecord.id),r.ondelete?.(JSON.parse(JSON.stringify(n.originalRecord))),app.toasts.success(`Successfully deleted record "${n.originalRecord.id}".`)}catch(e){app.checkApiError(e)}i.isSubmitting=!1}}return t.button({type:`button`,className:`dropdown-item txt-danger`,disabled:()=>i.isSubmitting,onclick:e=>{e.target.closest(`.dropdown`).hidePopover(),app.modals.confirm(`Do you really want to delete the selected record?`,async()=>{await a(),app.modals.close(e.target.closest(`.modal`))},null,{yesButton:`Delete record`})}},t.i({className:`ri-delete-bin-7-line`,ariaHidden:!0}),t.span({className:`txt`},`Delete`))}function U(e,n){let r=e.fields.find(e=>e.name==`email`);if(!r){console.warn(`missing expected email field`);return}let i=`auth_email_`+app.utils.randomString();return t.div({className:`record-field-input field-type-email field-type-auth-email`},t.div({className:`fields`},t.div({className:`field`},t.label({htmlFor:i},t.i({className:app.fieldTypes.email.icon,ariaHidden:!0}),t.span({className:`txt`},()=>r.name)),t.input({type:`email`,id:i,spellcheck:!1,name:()=>r.name,required:()=>r.required,value:()=>n.record[r.name]||``,oninput:e=>n.record[r.name]=e.target.value})),t.div({className:`field addon`},t.button({type:`button`,className:()=>`btn sm transparent ${n.record.emailVisibility?`success`:`secondary`}`,ariaDescription:app.attrs.tooltip(`Make email public or private`,`top-right`),onclick:()=>{n.record.emailVisibility=!n.record.emailVisibility}},t.span({className:`txt`},`Public: `,()=>n.record.emailVisibility?`On`:`Off`)))),()=>{if(r.help)return t.div({className:`field-help`},r.help)})}function Pt(e,n){let r=e.fields.find(e=>e.name==`verified`);if(!r){console.warn(`missing expected verified field`);return}let i=app.fieldTypes.bool.input({get field(){return r},get collection(){return e},get record(){return n.record},get originalRecord(){return n.originalRecord}});return i.addEventListener(`change`,e=>{n.originalRecord.verified!=n.record.verified&&app.modals.confirm(`Do you really want to manually change the verified account state from "${!n.record.verified}" to "${n.record.verified}"?`,null,()=>{n.record.verified=!n.record.verified},{yesButton:`Yes, `+(n.record.verified?`verify`:`unverify`)})}),i}function Ft(e,n){let r=`auth_pass_`+app.utils.randomString(),i=store({changePassword:!1,get isNew(){return app.utils.isEmpty(n.originalRecord?.id)}});function a(){delete n.record.password,delete n.record.passwordConfirm,app.store.errors&&(delete app.store.errors.password,delete app.store.errors.passwordConfirm)}return t.div({className:`record-field-input field-type-password field-type-auth-password`,onmount:e=>{e._watchers?.forEach(e=>e?.unwatch()),e._watchers=[watch(()=>{i.changePassword||(app.store.errors?.password||app.store.errors?.passwordConfirm||n.record.password||n.record.passwordConfirm)&&(i.changePassword=!0)})]},onunmount:e=>{e._watchers?.forEach(e=>e?.unwatch())}},t.div({hidden:()=>i.isNew,className:`field`},t.input({type:`checkbox`,id:r+`_change`,className:`switch`,checked:()=>i.changePassword,onchange:e=>{i.changePassword=e.target.checked,e.target.checked||a()}}),t.label({htmlFor:r+`_change`},t.span({className:`txt`},`change password`))),app.components.slide(()=>i.isNew||i.changePassword,t.div({className:()=>`fields ${i.isNew?``:`m-t-sm`}`},t.div({className:`field`},t.label({htmlFor:r+`_password`},t.i({className:`ri-lock-line`,ariaHidden:!0}),t.span({className:`txt`},`Password`)),t.input({type:`password`,id:r+`_password`,spellcheck:!1,name:`password`,className:`inline-error`,autocomplete:`new-password`,required:()=>i.isNew||i.changePassword,value:()=>n.record.password||``,oninput:e=>{e.target.value?n.record.password=e.target.value:delete n.record.password}})),t.div({className:`delimiter`}),t.div({className:`field`},t.label({htmlFor:r+`_password_confirm`},t.i({className:`ri-lock-line`,ariaHidden:!0}),t.span({className:`txt`},`Confirm`)),t.input({type:`password`,id:r+`_password_confirm`,spellcheck:!1,name:`passwordConfirm`,className:`inline-error`,autocomplete:`new-password`,required:()=>i.isNew||i.changePassword,value:()=>n.record.passwordConfirm||``,oninput:e=>{e.target.value?n.record.passwordConfirm=e.target.value:delete n.record.passwordConfirm}}))),()=>{let n=e.fields?.find(e=>e.name==`password`)?.help||``;if(n)return t.div({className:`field-help`},n)},t.div({className:`field-help`},t.span({className:`txt link-hint`,role:`button`,onclick:e=>{e.preventDefault();let r=app.utils.randomSecret(20);n.record.password=r,n.record.passwordConfirm=r,app.utils.copyToClipboard(r),app.toasts.info(`Generated and copied random password to clipboard.`)}},`Generate and set random password`))))}function It(e,n){let r=store({isLoading:!1,externalAuths:[]});async function i(){r.isLoading=!0;try{r.externalAuths=await app.pb.collection(`_externalAuths`).getFullList({filter:app.pb.filter(`collectionRef={:collectionId} && recordRef={:recordId}`,{collectionId:n.record.collectionId,recordId:n.record.id})}),r.isLoading=!1}catch(e){e?.isAbort&&(app.pb.checkApiError(e),r.isLoading=!1)}}function a(e){let n=(app.store.oauth2Providers?.find(n=>n.name==e.provider)||{}).displayName||e.provider;app.modals.confirm(`Do you really want to unlink the ${n} provider?`,()=>app.pb.collection(`_externalAuths`).delete(e.id).then(()=>{app.toasts.success(`Successfully unlinked ${n}.`),i()}).catch(e=>{app.checkApiError(e)}),null,{yesButton:`Unlink`})}return[t.div({className:`modal-content`},t.div({className:`list`,onmount:()=>{i()}},()=>r.isLoading?t.div({className:`list-item`},t.div({className:`skeleton-loader`})):r.externalAuths.length?r.externalAuths.map(e=>{let n=app.store.oauth2Providers?.find(n=>n.name==e.provider)||{};return t.div({className:`list-item`},t.figure({className:`provider-logo`},()=>n.logo?t.img({src:`data:image/svg+xml;base64,`+btoa(n.logo),alt:e.provider+` logo`}):t.i({className:app.utils.fallbackProviderIcon,ariaHidden:!0})),t.div({className:`content`},t.span({className:`txt-nowrap`},()=>n.displayName||e.provider),t.small({className:`txt-hint`},`ID: `,()=>e.providerId)),t.div({className:`actions`},t.button({type:`button`,className:`btn sm secondary transparent circle`,ariaLabel:app.attrs.tooltip(`Unlink`,`left`),onclick:()=>a(e)},t.i({className:`ri-close-line`,ariaHidden:!0}))))}):t.div({className:`list-item`},t.div({className:`block txt-hint txt-center`},`No external auth providers found.`)))),t.footer({className:`modal-footer`},t.button({type:`button`,className:`btn transparent m-r-auto`,onclick:()=>app.modals.close()},t.span({className:`txt`},`Close`)))]}var Lt=10,Rt=500,zt=`pb:lazyExpandSummaryRels`,Bt={},Vt={};function Ht(e){let n=new Set;return t.div({className:`record-field-view field-type-relation`,onunmount:()=>{for(let e of n)document.removeEventListener(zt,e);n.clear(),n=null}},()=>{let r=app.utils.toArray(e.record[e.field.name]);if(!r.length)return t.span({className:`missing-value`});let i=e.meta||{},a=app.utils.toArray(i.parents);if(a.includes(e.record.id))return t.span({className:`marker recursive`},`(recursive)`);let o=JSON.parse(JSON.stringify(i));o.parents=a.concat(e.record.id);let s=[],c=e.short?3:1e3,l=app.utils.toArray(e.record.expand?.[e.field.name]);for(let i=0;i<r.length;i++){if(i>=c){s.push(t.span({className:`marker more`},`(`,r.length-c,` more)`));break}let a=r[i],u=l.find(e=>e?.id==a);if(u)s.push(app.components.recordSummary(u,o));else if(s.push(t.span({className:`label relation-id animate-delayed-fadeIn`},app.components.copyButton(a),a)),o.parents.length<Lt){let r=i;Bt[e.field.collectionId]=Bt[e.field.collectionId]||new Set,Bt[e.field.collectionId].add(a);let o=i=>{i.detail.id==a&&i.detail.collectionId==e.field.collectionId&&(Ut(e.record,e.field,structuredClone(i.detail),r),document.removeEventListener(zt,o),n.delete(o))};n.add(o),document.addEventListener(zt,o)}}return Wt(e.field.collectionId),s})}function Ut(e,n,r,i=0){if(e.expand=e.expand||{},n.maxSelect>1){e.expand[n.name]=app.utils.toArray(e.expand[n.name]);let a=e.expand[n.name].findIndex(e=>e?.id==r.id);a>=0?e.expand[n.name][a]=r:e.expand[n.name][i]?e.expand[n.name].push(r):e.expand[n.name][i]=r}else e.expand[n.name]=r}function Wt(e){e&&(clearTimeout(Vt[e]),Vt[e]=setTimeout(()=>{let n=Array.from(Bt[e]||[]);if(n.length)for(Bt[e].clear(),Bt[e]=null,Vt[e]=null;n.length;){let r=n.splice(0,Rt),i=[],a=app.store.collections.find(n=>n.id==e)?.fields?.filter(e=>!e.hidden&&e.presentable&&e.type==`relation`)||[];for(let e of a)i.push(e.name);i=i.join(`,`)||void 0;let o=Gt(e,a),s;s=r.length==1?app.pb.collection(e).getOne(r[0],{requestKey:null,expand:i,fields:o}):app.pb.collection(e).getFullList({requestKey:null,expand:i,filter:r.map(e=>app.pb.filter(`id={:id}`,{id:e})).join(`||`),fields:o}),s.then(e=>{if(e=app.utils.toArray(e),e.length)for(let n of e)document.dispatchEvent(new CustomEvent(zt,{detail:n}))}).catch(e=>{console.warn(`failed to lazily expand presentable relation`,e)})}},0))}function Gt(e,n=[],r=200){let i=app.store.collections.find(n=>n.id==e)?.fields?.filter(e=>e.type==`editor`).map(e=>`${e.name}:excerpt(${r},true)`)||[];for(let e of n){let n=app.store.collections?.find(n=>n.id==e.collectionId)?.fields?.filter(e=>e.type==`editor`)?.map(n=>`expand.${e.name}.${n.name}:excerpt(${r},true)`);n?.length&&(i.push(`expand.${e.name}.*`),i=i.concat(n))}if(i.length>0)return[`*`,`expand.*`].concat(i).join(`,`)}window.app=window.app||{},window.app.components=window.app.components||{};var Kt=40,qt=/^([\+\-])?(\w+)$/;window.app.consts=window.app.consts||{},window.app.consts.COLUMNS_STORAGE_PREFIX=`pbColumns_`,window.app.components.recordsList=function(e={}){let n=`records_list_`+app.utils.randomString(),r=store({collection:{},filter:``,sort:``,reset:void 0,rid:void 0,id:void 0,hidden:void 0,className:``,onchange:(e,n)=>{},onselect:e=>{}}),i=app.utils.extendStore(r,e),a=store({isLoading:!1,records:[],lastPage:0,lastTotalItems:0,bulkSelected:{},columnsPreferences:{},get canLoadMore(){return a.lastTotalItems>=Kt},get totalSelected(){return Object.keys(a.bulkSelected).length},get areAllSelected(){return a.records.length&&a.records.length==a.totalSelected},get firstAutoUpdatedField(){return r.collection?.fields?.find(e=>e.type==`autodate`&&e.onUpdate)},get isSuperusersCollection(){return r.collection?.type==`auth`&&r.collection?.name==`_superusers`}});async function o(){a.records=[],a.lastPage=0,a.lastTotalItems=0,a.bulkSelected={}}function s(){r.onchange?.(r.filter,r.sort)}async function c(e=!1){if(r.collection?.id){a.isLoading=!0;try{let i=app.utils.normalizeSearchFilter(r.filter,r.collection.fields.filter(e=>!e.hidden).map(e=>e.name)),s=[],c=r.collection.fields.filter(e=>!e.hidden&&e.type==`relation`);for(let e of c)s.push(e.name);let l=Gt(r.collection.id,c),u=r.sort||void 0,d=u?.match(qt),f=d?r.collection.fields.find(e=>!e.hidden&&e.name===d[2]):null;f?f?.type==`relation`&&(u=app.store.collections?.find(e=>e.id==f.collectionId)?.fields?.filter(e=>e.presentable)?.map(e=>(d[1]||``)+d[2]+`.`+e.name)?.join(`,`)):u=r.collection.type==`view`?void 0:`-@rowid`;let p=e?1:a.lastPage+1,m=await app.pb.collection(r.collection.name).getList(p,Kt,{requestKey:n,skipTotal:1,filter:i,sort:u,expand:s.join(`,`)||void 0,fields:l});m.page==1&&o(),a.lastPage=m.page,a.lastTotalItems=m.items.length;for(let e=0;e<m.items.length;e++)app.utils.pushOrReplaceObject(a.records,m.items[e]),e>1&&e%15==0&&await new Promise(e=>setTimeout(e,20));a.isLoading=!1}catch(e){e.isAbort||(a.isLoading=!1,o(),app.checkApiError(e))}}}function l(e=!0){let n={};if(e)for(let e of a.records)n[e.id]=e;a.bulkSelected=n}function u(){let e=JSON.parse(JSON.stringify(Object.values(a.bulkSelected)));if(e.length){for(let n of e)n.expand&&delete n.expand;return e.length==1?app.utils.downloadJSON(e[0],r.collection.name+`_`+e[0].id+`.json`):app.utils.downloadJSON(e,`${e.length}_${r.collection.name}_records.json`)}}async function d(){let e=Object.keys(a.bulkSelected);if(!e.length)return;let n=e.slice();for(;n.length;){let e=n.splice(0,100),i=[];for(let n of e)i.push(app.pb.collection(r.collection.name).delete(n));try{await Promise.all(i)}catch(e){app.checkApiError(e),l(!1),c(!0);return}}l(!1),app.toasts.success(`Successfully deleted ${e.length} ${e.length==1?`record`:`records`}.`)}function f(e){return a.firstAutoUpdatedField?e.id+e[a.firstAutoUpdatedField.name]+r.collection?.updated+Object.keys(e):JSON.stringify(e)+r.collection?.updated}function p(e){return a.columnsPreferences[e.id]===void 0?e.hidden:!a.columnsPreferences[e.id]}let m,h={"record:save":e=>{if(e.detail.collectionId!=r.collection?.id)return;let n=a.records.find(n=>n.id==e.detail.id);n&&Object.assign(n,JSON.parse(JSON.stringify(e.detail))),c(!0)},"record:delete":e=>{e.detail.collectionId!=r.collection?.id&&e.detail.collectionName!=r.collection?.name||(delete a.bulkSelected[e.detail.id],app.utils.removeByKey(a.records,`id`,e.detail.id),clearTimeout(m),m=setTimeout(()=>{a.records?.length||c(!0)},100))}};return t.div({pbEvent:`recordsList`,rid:r.rid,id:()=>r.id,hidden:()=>r.hidden,className:()=>`page-table-wrapper ${r.className}`,onmount:e=>{for(let e in h)document.addEventListener(e,h[e]);i.push(watch(()=>r.collection?.id,(e,n)=>{a.columnsPreferences=app.utils.getLocalHistory(app.consts.COLUMNS_STORAGE_PREFIX+e,{}),n&&n!=e&&o()})),i.push(watch(()=>(r.collection?.id||``)+(r.filter||``)+(r.sort||``)+(r.reset||``),(e,n)=>{e!=n&&c(!0)})),i.push(watch(()=>a.lastPage,n=>{n==1&&e&&(e.scrollTop=0)})),i.push(watch(()=>JSON.stringify(a.columnsPreferences),(e,n)=>{r.collection?.id&&n&&app.utils.saveLocalHistory(app.consts.COLUMNS_STORAGE_PREFIX+r.collection.id,a.columnsPreferences)}))},onunmount:()=>{app.pb.cancelRequest(n),clearTimeout(m),i.forEach(e=>e?.unwatch());for(let e in h)document.removeEventListener(e,h[e])}},t.table({pbEvent:`recordsListTable`,className:()=>`records-table responsive-table ${a.records.length>Kt?`optimize`:``}`},t.thead({className:`sticky`},t.tr(null,t.th({className:`col-bulk-select`},t.div({className:`field`,hidden:()=>a.isLoading},t.input({id:`all_`+n,type:`checkbox`,disabled:()=>!a.records.length,checked:()=>a.areAllSelected,onchange:e=>l(e.target.checked)}),t.label({htmlFor:`all_`+n})),t.span({className:`loader`,hidden:()=>!a.isLoading})),()=>{let e=r.collection?.fields||[],n=[];for(let i of e)!app.fieldTypes[i.type]?.view||a.isSuperusersCollection&&i.name==`verified`||n.push(t.th({hidden:()=>p(i),className:()=>{let e=``;return r.sort==i.name||r.sort==`+`+i.name?e=`asc`:r.sort==`-`+i.name&&(e=`desc`),`sort-handle ${e} col-field-type-${i.type} col-field-name-${i.name}`},onclick:e=>{let n=`-`+i.name;r.sort==n&&(n=i.name),r.sort=n,s()}},t.div({className:`inline-flex gap-5`},t.i({ariaHidden:!0,className:()=>i.primaryKey?`ri-key-line`:app.fieldTypes[i.type]?.icon||app.utils.fallbackFieldIcon}),t.span({className:`txt`,textContent:i.name}))));return n},t.th({className:`col-meta`},()=>W(r,a)))),t.tbody(null,()=>a.records.length?a.records.map((e,i)=>t.tr({rid:f(e),tabIndex:0,className:`handle`,onclick:n=>{n.preventDefault(),r.onselect(e)},onkeypress:n=>{(n.key==`Enter`||n.key==` `)&&(n.preventDefault(),r.onselect(e))}},t.td({className:`col-bulk-select`,onclick:e=>e.stopPropagation(),onkeypress:e=>e.stopPropagation()},t.div({className:`field`},t.input({type:`checkbox`,id:()=>n+e.id,checked:()=>!!a.bulkSelected[e.id],onchange:n=>{let r=JSON.parse(JSON.stringify(a.bulkSelected));n.target.checked?r[e.id]=e:delete r[e.id],a.bulkSelected=r}}),t.label({htmlFor:n+e.id}))),()=>{let n=[],i=r.collection?.fields||[];for(let r of i){let i=app.fieldTypes[r.type]?.view;i&&(a.isSuperusersCollection&&r.name==`verified`||n.push(t.td({"html-data-name":r.name,hidden:()=>p(r),className:`col-field-type-${r.type} col-field-name-${r.name}`},()=>i({short:!0,get record(){return e},get field(){return r}}))))}return n},t.td({className:`col-meta`},t.i({className:`ri-arrow-right-line m-r-10`,ariaHidden:!0})))):t.tr(null,t.td({colSpan:99,style:`height:59px`},()=>a.isLoading?t.span({className:`skeleton-loader`}):t.div({className:`sticky-content txt-center txt-hint`},t.p({className:`txt-bold`},`No records found.`),t.button({hidden:()=>r.filter?.length||r.collection?.type==`view`,type:`button`,className:`btn secondary expanded-lg`,onclick(){app.modals.openRecordUpsert(r.collection)}},t.i({className:`ri-add-line`}),t.span({className:`txt`},`New record`)),t.button({hidden:()=>!r.filter?.length,type:`button`,className:`btn secondary expanded-lg`,onclick(){r.filter=``,s()}},t.span({className:`txt`},`Clear search`))))),t.tr({hidden:()=>!a.canLoadMore},t.td({colSpan:99},t.button({className:()=>`btn lg secondary load-more-btn ${a.isLoading?`transparent loading`:``}`,disabled:()=>a.isLoading,onclick:()=>c()},t.span({className:`txt`},`Load more`)))))),t.div({className:`bulkbar-wrapper`},t.div({hidden:()=>!a.totalSelected,className:`bulkbar records-bulkbar`},t.span({className:`txt`},`Selected `,t.strong(null,()=>a.totalSelected),()=>` ${a.totalSelected==1?`record`:`records`}`),t.button({type:`button`,className:`btn sm secondary pill m-r-auto`,onclick:()=>l(!1)},t.span({className:`txt`},`Reset`)),()=>{if(r.collection?.type!=`view`)return t.button({type:`button`,className:`btn sm pill outline danger`,onclick:()=>{app.modals.confirm(`Do you really want to delete the selected records?`,d)}},t.i({className:`ri-delete-bin-7-line`,ariaHidden:!0}),t.span({className:`txt`},`Delete`))},t.button({type:`button`,className:`btn sm pill`,onclick:()=>u()},t.i({className:`ri-download-line`,ariaHidden:!0}),t.span({className:`txt`},`JSON`)))))};function W(e,n){let r=`cols_`+app.utils.randomString(),i=t.div({className:`dropdown sm nowrap records-list-columns-dropdown gap-0`,popover:`auto`},()=>{if(!e.collection?.fields)return;let i=[],a=e.collection.type==`auth`;for(let o of e.collection.fields)o.primaryKey||!app.fieldTypes[o.type].view||a&&o.name==`tokenKey`||i.push(t.div({className:`dropdown-item`,onclick:e=>{e.target.querySelector(`label`)?.click()}},t.div({className:`field`},t.input({type:`checkbox`,className:`switch sm`,id:()=>r+o.name,checked:()=>n.columnsPreferences[o.id]===void 0?!o.hidden:!!n.columnsPreferences[o.id],onchange:e=>{n.columnsPreferences[o.id]=e.target.checked}}),t.label({htmlFor:()=>r+o.name},o.name))));return i});return t.button({hidden:()=>e.collection?.fields.length<=1,type:`button`,title:`Toggle columns`,className:`btn sm secondary transparent circle`,popoverTargetElement:i},t.i({className:`ri-more-2-line`,ariaHidden:!0}),i)}window.app=window.app||{},window.app.components=window.app.components||{};var G=`@toDelete`;window.app.components.fieldSettings=function(e,n={}){let r=`base_`+app.utils.randomString(),i=store({showHidden:!0,showPresentable:!0,showDuplicate:!0,showRemove:!0,header:e=>null,content:e=>null,footer:e=>null}),a=app.utils.extendStore(i,n);function o(){let n=JSON.parse(JSON.stringify(e.field));n.id=``,n.system=!1,n.name=K(e.collection.fields,n.name+`_copy`),n.__detailsOpen=!0,n.primaryKey&&=!1,n[`@toDelete`]&&delete n[G],e.collection.fields.splice(e.fieldIndex+1,0,n)}function s(){e.field.id?e.field[G]=!0:e.collection.fields.splice(e.fieldIndex,1)}return t.details({"html-class":`accordion record-field-settings`,className:()=>`accordion record-field-settings field-type-${e.field.type} ${e.field[`@toDelete`]?`deleted`:``}`,name:`collection_field`,onmount:n=>{e.field.__detailsOpen&&(delete e.field.__detailsOpen,n.open=!0),a.push(watch(()=>e.field.name,(n,r)=>{n=app.utils.slugify(n),e.field.name=n,r!==void 0&&(Yt(e.collection,r,n),Jt(e.collection,r,n))})),a.push(watch(()=>e.field[G],n=>{n&&e.originalField?.name&&e.field.name!=e.originalField.name&&(e.field.name=e.originalField.name)})),a.push(watch(()=>{e.field.presentable&&e.field.hidden&&(e.field.presentable=!1,app.toasts.info(`The field cannot be presentable if hidden.`))})),a.push(watch(()=>{(e.field.name==`id`||e.collection.type==`auth`&&[`password`,`tokenKey`].includes(e.field.name))&&e.originalField&&e.field.required!=e.originalField.required&&(e.field.required=e.originalField.required,app.toasts.info(`The option cannot be changed for field "${e.field.name}".`))})),a.push(watch(()=>{(e.field.name==`id`||e.collection.type==`auth`&&[`password`,`tokenKey`,`email`].includes(e.field.name))&&e.originalField&&e.field.hidden!=e.originalField.hidden&&(e.field.hidden=e.originalField.hidden,app.toasts.info(`The option cannot be changed for field "${e.field.name}".`))}))},onunmount:e=>{a.forEach(e=>e?.unwatch())}},t.summary({tabIndex:-1,onfocusout:()=>!1,onclick:()=>!1,onkeyup:()=>!1},t.span({className:`sort-handle`},t.i({className:`ri-draggable`})),t.header({className:`header-fields`,inert:()=>e.field[G],onclick:e=>{e.stopPropagation(),e.preventDefault()}},t.div({className:`fields`},t.label({htmlFor:r+`.name`,className:()=>`field addon ${e.field.system?`txt-disabled`:``}`},t.i({className:app.fieldTypes[e.field.type]?.icon||app.utils.fallbackFieldIcon,ariaDescription:app.attrs.tooltip(()=>e.field.system?e.field.type+` (system)`:e.field.type)})),t.div({className:`field prop-name`},t.input({type:`text`,id:r+`.name`,name:()=>`fields.${e.fieldIndex}.name`,required:!0,spellcheck:!1,placeholder:`Field name*`,className:`inline-error`,disabled:()=>e.field[`@toDelete`]||e.field.system,value:()=>e.field.name||``,oninput:n=>{n.isComposing||(e.field.name=n.target.value)},onmount:n=>{n.addEventListener(`compositionend`,n=>{e.field.name=n.target.value}),setTimeout(()=>{n&&e.field.__focus&&(n.select(),delete e.field.__focus)},0)}}),t.div({className:`field-labels`},()=>{let n=[];return e.field.required&&n.push(t.span({className:`label success`},`Required`)),e.field.hidden?n.push(t.span({className:`label danger`},`Hidden`)):e.field.presentable&&n.push(t.span({className:`label info`},`Presentable`)),n}))),e=>typeof i.header==`function`?i.header(e):i.header),t.button({type:`button`,className:()=>`btn sm circle transparent secondary ${app.utils.isEmpty(app.utils.getByPath(app.store.errors,`fields.${e.fieldIndex}`))?``:`txt-danger`}`,title:`Field options`,hidden:()=>e.field[G],onclick:e=>{let n=e.target.closest(`details`);n&&(n.open=!n.open)}},t.i({className:`ri-settings-3-line`,ariaHidden:!0})),t.button({type:`button`,className:`btn sm circle transparent warning`,hidden:()=>!e.field[G],onclick:()=>delete e.field[G],ariaLabel:app.attrs.tooltip(`Restore`)},t.i({className:`ri-restart-line`,ariaHidden:!0}))),e=>typeof i.content==`function`?i.content(e):i.content,t.footer({className:`record-field-settings-footer`},e=>typeof i.footer==`function`?i.footer(e):i.footer,()=>{if(i.showPresentable)return t.div({className:`field prop-presentable`},t.input({type:`checkbox`,id:r+`.presentable`,name:()=>`fields.${e.fieldIndex}.presentable`,className:`sm`,disabled:()=>e.field.hidden,checked:()=>!!e.field.presentable,onchange:n=>e.field.presentable=n.target.checked}),t.label({htmlFor:r+`.presentable`},t.span({className:`txt`},`Presentable`),t.i({className:`ri-information-line link-hint`,ariaDescription:app.attrs.tooltip(()=>{let n=`Whether the field should be preferred in the Superuser UI relation listings (default to auto).`;return e.field.hidden&&(n+=`
The field cannot be presentable if hidden.`),n})})))},()=>{if(i.showHidden)return t.div({className:`field prop-hidden`},t.input({type:`checkbox`,id:r+`.hidden`,className:`sm`,name:()=>`fields.${e.fieldIndex}.hidden`,checked:()=>!!e.field.hidden,onchange:n=>e.field.hidden=n.target.checked}),t.label({htmlFor:r+`.hidden`},t.span({className:`txt`},`Hidden`),t.i({className:`ri-information-line link-hint`,ariaDescription:app.attrs.tooltip(`Hide from the JSON API response and filters.`)})))},t.button({hidden:()=>!i.showDuplicate&&(!i.showRemove||e.field.system),type:`button`,title:`More options`,className:`btn sm circle transparent secondary more-btn m-l-auto`,"html-popovertarget":r+`_options_dropdown`},t.i({className:`ri-more-line`,ariaHidden:!0})),t.div({id:r+`_options_dropdown`,className:`dropdown sm field-options-dropdown`,popover:`auto`},()=>{if(i.showDuplicate)return t.button({type:`button`,className:`dropdown-item`,role:`menuitem`,textContent:`Duplicate`,onclick:e=>{o(),e.target.closest(`.dropdown`).hidePopover()}})},()=>{if(!(!i.showRemove||e.field.system))return t.button({type:`button`,className:`dropdown-item`,role:`menuitem`,textContent:`Remove`,onclick:e=>{s(),e.target.closest(`.dropdown`).hidePopover(),e.target.closest(`details`).open=!1}})})))};function K(e,n=`field`){let r=n,i=2,a=n.match(/\d+$/)?.[0]||``,o=a?n.substring(0,n.length-a.length):n;for(;e?.find(e=>e.name.toLowerCase()==r.toLowerCase());)r=o+((a<<0)+i),i++;return r}function Jt(e,n,r){if(!r||n===void 0||n===r||!e?.passwordAuth?.identityFields?.length)return;let i=e.passwordAuth.identityFields;for(let e=0;e<i.length;e++)i[e]==n&&(i[e]=r)}function Yt(e,n,r){!r||n===void 0||n===r||!e?.indexes?.length||!e?.fields?.length||e.fields.find(e=>!e[`@toDelete`]&&e.name==n)||(e.indexes=e.indexes.map(e=>app.utils.replaceIndexColumn(e,n,r)))}function Xt(e){let n=`text_`+app.utils.randomString(),r=store({get hasAutogenerate(){return!app.utils.isEmpty(e.field.autogeneratePattern)&&app.utils.isEmpty(e.originalRecord?.id)},get isDisabled(){return!app.utils.isEmpty(e.originalRecord?.id)&&e.field.primaryKey},get isRequired(){return e.field.required&&!r.hasAutogenerate&&!r.isDisabled}});return t.div({className:`record-field-input field-type-text`},t.div({className:`fields`},t.div({className:`field`},t.label({htmlFor:n},t.i({ariaHidden:!0,className:()=>e.field.primaryKey?`ri-key-line`:app.fieldTypes.text.icon}),t.span({className:`txt`},()=>e.field.name)),t.div({className:`autoexpand-wrapper`},t.textarea({id:n,rows:1,name:()=>e.field.name,required:()=>r.isRequired,disabled:()=>r.isDisabled,placeholder:()=>r.hasAutogenerate?`Leave empty to autogenerate...`:``,value:()=>e.record[e.field.name]||``,oninput:n=>e.record[e.field.name]=n.target.value||``}),t.div({className:`input`},()=>e.record[e.field.name],` `))),()=>{if(!e.field.primaryKey||!e.originalRecord?.id)return;let n=e.collection?.fields?.filter(e=>e.type==`autodate`)||[];if(!n.length)return;let r=[];for(let i of n)r.push(`${i.name}: ${app.utils.stringifyValue(e.record[i.name])}`);return t.div({className:`field addon`},t.i({className:`ri-information-line txt-hint link-faded`,ariaDescription:app.attrs.tooltip(r.join(`
`),`left`)}))}),()=>{if(e.field.help)return t.div({className:`field-help`},e.field.help)})}function Zt(e){let n=`f_`+app.utils.randomString();return app.components.fieldSettings(e,{content:()=>t.div({className:`grid sm`},t.div({className:`col-sm-6`},t.div({className:`field`},t.label({htmlFor:n+`.min`},t.span({className:`txt`},`Min length`),t.i({className:`ri-information-line link-hint`,ariaDescription:app.attrs.tooltip(`Clear the field or set it to 0 for no limit.`)})),t.input({type:`number`,id:n+`.min`,name:()=>`fields.${e.fieldIndex}.min`,step:1,min:0,max:2**53-1,placeholder:`No min limit`,value:()=>e.field.min||``,oninput:n=>{e.field.min=parseInt(n.target.value,10)}}))),t.div({className:`col-sm-6`},t.div({className:`field`},t.label({htmlFor:n+`.max`},t.span({className:`txt`},`Max length`),t.i({className:`ri-information-line link-hint`,ariaDescription:app.attrs.tooltip(`Clear the field or set it to 0 to fallback to the default limit.`)})),t.input({type:`number`,id:n+`.max`,name:()=>`fields.${e.fieldIndex}.max`,step:1,min:()=>e.field.min||0,max:2**53-1,placeholder:`Default to max 5000 characters`,value:()=>e.field.max||``,oninput:n=>{e.field.max=parseInt(n.target.value,10)}}))),t.div({className:`col-sm-6`},t.div({className:`field`},t.label({htmlFor:n+`.pattern`},t.span({className:`txt`},`Validation pattern`),()=>{if(e.field.primaryKey)return t.i({className:`ri-information-line link-hint`,ariaDescription:app.attrs.tooltip(`All record ids have forbidden characters and unique case-insensitive (ASCII) validations in addition to the user defined regex pattern.`)})}),t.input({type:`text`,id:n+`.pattern`,name:()=>`fields.${e.fieldIndex}.pattern`,value:()=>e.field.pattern||``,oninput:n=>e.field.pattern=n.target.value})),t.div({className:`field-help`},`Ex. `,t.code(null,`^[a-z0-9]+$`))),t.div({className:`col-sm-6`},t.div({className:`field`},t.label({htmlFor:n+`.autogeneratePattern`},t.span({className:`txt`},`Autogenerate pattern`),t.i({className:`ri-information-line link-hint`,ariaDescription:app.attrs.tooltip(`Set and autogenerate text matching the pattern on missing record create value.`)})),t.input({type:`text`,id:n+`.autogeneratePattern`,name:()=>`fields.${e.fieldIndex}.autogeneratePattern`,value:()=>e.field.autogeneratePattern||``,oninput:n=>e.field.autogeneratePattern=n.target.value})),t.div({className:`field-help`},`Ex. `,t.code(null,`[a-z0-9]{30}`))),t.div({className:`col-sm-12`},t.div({className:`field`},t.label({htmlFor:n+`.help`},`Help text`),t.input({type:`text`,id:n+`.help`,name:()=>`fields.${e.fieldIndex}.help`,value:()=>e.field.help||``,oninput:n=>e.field.help=n.target.value})))),footer:()=>[t.div({className:`field`},t.input({className:`sm`,type:`checkbox`,id:n+`.required`,name:()=>`fields.${e.fieldIndex}.required`,checked:()=>!!e.field.required,onchange:n=>e.field.required=n.target.checked}),t.label({htmlFor:n+`.required`},t.span({className:`txt`},`Required`),t.small({className:`txt-hint`},`(!='')`),t.i({className:`ri-information-line link-hint`,ariaDescription:app.attrs.tooltip(`Requires the field value to be nonempty string`)})))]})}function Qt(e){return t.div({className:`record-field-view field-type-text`},()=>{let n=e.record[e.field.name]||``;if(n==``)return t.span({className:`missing-value`});if(e.field.primaryKey){let r=null;return e.record?.collectionName==`_superusers`&&app.store.superuser?.id==e.record?.id&&(r=t.strong({className:`txt`,textContent:` (you)`})),t.span({className:`label`},app.components.copyButton(n),t.span({className:`txt-ellipsis`},app.utils.truncate(n),r))}return e.short?t.span({className:`txt txt-ellipsis`,textContent:app.utils.truncate(n)}):n})}window.app=window.app||{},window.app.fieldTypes=window.app.fieldTypes||{},window.app.fieldTypes.text={icon:`ri-text`,label:`Plain text`,settings:Zt,input:Xt,view:Qt,filterModifiers:e=>[`lower`],dummyData:(e,n=!1)=>e.primaryKey?app.utils.randomString(15):`example text`};function $t(e){let n=`editor_`+app.utils.randomString(),r=store({lazyEditor:null});return t.div({className:`record-field-input field-type-editor large-modal`,onmount:()=>{requestAnimationFrame(()=>{r.lazyEditor=app.components.tinymce({id:n,required:()=>e.field.required,convertURLs:()=>e.field.convertURLs,name:()=>e.field.name,value:()=>e.record[e.field.name]||``,onchange:n=>{e.record[e.field.name]=n}})})}},t.div({className:`field`},t.label({htmlFor:n},t.i({className:app.fieldTypes.editor.icon,ariaHidden:!0}),t.span({className:`txt`},()=>e.field.name)),()=>r.lazyEditor),()=>{if(e.field.help)return t.div({className:`field-help`},e.field.help)})}function en(e){let n=`f_`+app.utils.randomString();return store({showInfo:!1}),app.components.fieldSettings(e,{content:()=>t.div({className:`grid sm`},t.div({className:`col-sm-12`},t.div({className:`field`},t.label({htmlFor:n+`.maxSize`},t.span(null,`Max size `),t.small(null,`(bytes)`)),t.input({type:`number`,id:n+`.maxSize`,name:()=>`fields.${e.fieldIndex}.maxSize`,min:0,step:1,max:2**53-1,placeholder:`Default to max ~5MB`,value:()=>e.field.maxSize||``,oninput:n=>{e.field.maxSize=parseInt(n.target.value,10)}}))),t.div({className:`col-sm-12`},t.div({className:`field`},t.label({htmlFor:n+`.help`},`Help text`),t.input({type:`text`,id:n+`.help`,name:()=>`fields.${e.fieldIndex}.help`,value:()=>e.field.help||``,oninput:n=>e.field.help=n.target.value})))),footer:()=>[t.div({className:`field`},t.input({className:`sm`,type:`checkbox`,id:n+`.required`,name:()=>`fields.${e.fieldIndex}.required`,checked:()=>!!e.field.required,onchange:n=>e.field.required=n.target.checked}),t.label({htmlFor:n+`.required`},t.span({className:`txt`},`Required`),t.i({className:`ri-information-line link-hint`,ariaDescription:app.attrs.tooltip(`Requires the field value to be nonempty string`)}))),t.div({className:`field`},t.input({className:`sm`,type:`checkbox`,id:n+`.convertURLs`,name:()=>`fields.${e.fieldIndex}.convertURLs`,checked:()=>!!e.field.convertURLs,onchange:n=>e.field.convertURLs=n.target.checked}),t.label({htmlFor:n+`.convertURLs`},t.span({className:`txt`},`Strip URLs domain`),t.i({className:`ri-information-line link-hint`,ariaDescription:app.attrs.tooltip(`This could help making the editor content more portable between environments since there will be no local base url to replace.`)})))]})}function q(e){return t.div({className:`record-field-view field-type-editor`},()=>{if(e.short){let n=e.record[e.field.name];return n?t.span({className:`txt`,textContent:app.utils.truncate(app.utils.plainText(n),200)}):t.span({className:`missing-value`})}return app.components.tinymce({readonly:!0,className:`large-modal`,value:()=>e.record[e.field.name]||``})})}window.app=window.app||{},window.app.fieldTypes=window.app.fieldTypes||{},window.app.fieldTypes.editor={icon:`ri-edit-2-line`,label:`Rich editor`,settings:en,input:$t,view:q,filterModifiers:e=>[`lower`],dummyData:(e,n=!1)=>`Lorem ipsum dolor sit amet...`};function tn(e){let n=`number_`+app.utils.randomString();return t.div({className:`record-field-input field-type-number`},t.div({className:`field`},t.label({htmlFor:n},t.i({className:app.fieldTypes.number.icon,ariaHidden:!0}),t.span({className:`txt`},()=>e.field.name)),t.input({type:`number`,id:n,step:`any`,name:()=>e.field.name,required:()=>e.field.required,min:()=>e.field.min,max:()=>e.field.max,value:()=>e.record[e.field.name]||0,oninput:n=>e.record[e.field.name]=Number(n.target.value)})),()=>{if(e.field.help)return t.div({className:`field-help`},e.field.help)})}function nn(e){let n=`f_`+app.utils.randomString();return app.components.fieldSettings(e,{content:()=>t.div({className:`grid sm`},t.div({className:`col-sm-6`},t.div({className:`field`},t.label({htmlFor:n+`.min`},`Min`),t.input({type:`text`,id:n+`.min`,name:()=>`fields.${e.fieldIndex}.min`,value:()=>typeof e.field.min==`number`?e.field.min:``,oninput:n=>{n.target.value?e.field.min=Number(n.target.value):e.field.min=null}}))),t.div({className:`col-sm-6`},t.div({className:`field`},t.label({htmlFor:n+`.max`},`Max`),t.input({type:`text`,id:n+`.max`,min:()=>e.field.min,name:()=>`fields.${e.fieldIndex}.max`,value:()=>typeof e.field.max==`number`?e.field.max:``,oninput:n=>{n.target.value?e.field.max=Number(n.target.value):e.field.max=null}}))),t.div({className:`col-sm-12`},t.div({className:`field`},t.label({htmlFor:n+`.help`},`Help text`),t.input({type:`text`,id:n+`.help`,name:()=>`fields.${e.fieldIndex}.help`,value:()=>e.field.help||``,oninput:n=>e.field.help=n.target.value})))),footer:()=>[t.div({className:`field`},t.input({className:`sm`,type:`checkbox`,id:n+`.onlyInt`,name:()=>`fields.${e.fieldIndex}.onlyInt`,checked:()=>!!e.field.onlyInt,onchange:n=>e.field.onlyInt=n.target.checked}),t.label({htmlFor:n+`.onlyInt`},t.span({className:`txt`},`No decimals`),t.i({className:`ri-information-line link-hint`,ariaDescription:app.attrs.tooltip(`Existing decimal numbers will not be affected.`)}))),t.div({className:`field`},t.input({className:`sm`,type:`checkbox`,id:n+`.required`,name:()=>`fields.${e.fieldIndex}.required`,checked:()=>!!e.field.required,onchange:n=>e.field.required=n.target.checked}),t.label({htmlFor:n+`.required`},t.span({className:`txt`},`Required`),t.small({className:`txt-hint`},`(!=0)`),t.i({className:`ri-information-line link-hint`,ariaDescription:app.attrs.tooltip(`Requires the field value to be not 0.`)})))]})}function rn(e){return t.div({className:`record-field-view field-type-number`},t.span({className:`txt`},()=>e.record[e.field.name]))}window.app=window.app||{},window.app.fieldTypes=window.app.fieldTypes||{},window.app.fieldTypes.number={icon:`ri-hashtag`,label:`Number`,settings:nn,input:tn,view:rn,dummyData:(e,n=!1)=>123.456};function an(e){let n=`bool_`+app.utils.randomString();return t.div({className:`record-field-input field-type-bool`},t.div({className:`field`},t.input({type:`checkbox`,id:n,className:`switch`,name:()=>e.field.name,required:()=>e.field.required,checked:()=>e.record[e.field.name]||!1,onchange:n=>e.record[e.field.name]=n.target.checked||!1}),t.label({htmlFor:n},()=>e.field.name)),()=>{if(e.field.help)return t.div({className:`field-help`},e.field.help)})}function on(e){let n=`f_`+app.utils.randomString();return app.components.fieldSettings(e,{content:()=>t.div({className:`grid sm`},t.div({className:`col-sm-12`},t.div({className:`field`},t.label({htmlFor:n+`.help`},`Help text`),t.input({type:`text`,id:n+`.help`,name:()=>`fields.${e.fieldIndex}.help`,value:()=>e.field.help||``,oninput:n=>e.field.help=n.target.value})))),footer:()=>[t.div({className:`field`},t.input({className:`sm`,type:`checkbox`,id:n+`.required`,name:()=>`fields.${e.fieldIndex}.required`,checked:()=>!!e.field.required,onchange:n=>e.field.required=n.target.checked}),t.label({htmlFor:n+`.required`},t.span({className:`txt`},`Required`),t.small({className:`txt-hint`},`(=true)`),t.i({className:`ri-information-line link-hint`,ariaDescription:app.attrs.tooltip(`Requires the field value to be true.`)})))]})}function sn(e){return t.div({className:`record-field-view field-type-bool`},t.span({className:()=>`label ${e.record[e.field.name]?`success`:``}`},()=>e.record[e.field.name]?`True`:`False`))}window.app=window.app||{},window.app.fieldTypes=window.app.fieldTypes||{},window.app.fieldTypes.bool={icon:`ri-toggle-line`,label:`Bool`,settings:on,input:an,view:sn,dummyData:(e,n=!1)=>[!0,!1][Math.floor(Math.random()*2)]};function cn(e){let n=`email_`+app.utils.randomString();return t.div({className:`record-field-input field-type-email`},t.div({className:`field`},t.label({htmlFor:n},t.i({className:app.fieldTypes.email.icon,ariaHidden:!0}),t.span({className:`txt`},()=>e.field.name)),t.input({type:`email`,id:n,spellcheck:!1,autocomplete:!1,name:()=>e.field.name,required:()=>e.field.required,value:()=>e.record[e.field.name]||``,oninput:n=>e.record[e.field.name]=n.target.value})),()=>{if(e.field.help)return t.div({className:`field-help`},e.field.help)})}function ln(e){let n=`f_`+app.utils.randomString();return app.components.fieldSettings(e,{content:()=>t.div({className:`grid sm`},t.div({className:`col-sm-6`},t.div({className:`field`},t.label({htmlFor:n+`.exceptDomains`},t.span({className:`txt`},`Except domains`),t.i({className:`ri-information-line link-hint`,ariaDescription:app.attrs.tooltip(`List of domains that are NOT allowed.
This field is disabled if "Only domains" is set.`)})),t.input({type:`text`,id:n+`.exceptDomains`,disabled:()=>!app.utils.isEmpty(e.field.onlyDomains),name:()=>`fields.${e.fieldIndex}.exceptDomains`,value:()=>app.utils.joinNonEmpty(e.field.exceptDomains),onchange:n=>e.field.exceptDomains=app.utils.splitNonEmpty(n.target.value,`,`)})),t.div({className:`field-help`},`Use comma as separator.`)),t.div({className:`col-sm-6`},t.div({className:`field`},t.label({htmlFor:n+`.onlyDomains`},t.span({className:`txt`},`Only domains`),t.i({className:`ri-information-line link-hint`,ariaDescription:app.attrs.tooltip(`List of domains that are ONLY allowed.
This field is disabled if "Except domains" is set.`)})),t.input({type:`text`,id:n+`.onlyDomains`,disabled:()=>!app.utils.isEmpty(e.field.exceptDomains),name:()=>`fields.${e.fieldIndex}.onlyDomains`,value:()=>app.utils.joinNonEmpty(e.field.onlyDomains),onchange:n=>e.field.onlyDomains=app.utils.splitNonEmpty(n.target.value,`,`)})),t.div({className:`field-help`},`Use comma as separator.`)),t.div({className:`col-sm-12`},t.div({className:`field`},t.label({htmlFor:n+`.help`},`Help text`),t.input({type:`text`,id:n+`.help`,name:()=>`fields.${e.fieldIndex}.help`,value:()=>e.field.help||``,oninput:n=>e.field.help=n.target.value})))),footer:()=>[t.div({className:`field`},t.input({className:`sm`,type:`checkbox`,id:n+`.required`,name:()=>`fields.${e.fieldIndex}.required`,checked:()=>!!e.field.required,onchange:n=>e.field.required=n.target.checked}),t.label({htmlFor:n+`.required`},t.span({className:`txt`},`Required`),t.small({className:`txt-hint`},`(!='')`),t.i({className:`ri-information-line link-hint`,ariaDescription:app.attrs.tooltip(`Requires the field value to be nonempty string`)})))]})}function J(e){return t.div({className:`record-field-view field-type-email`},()=>{let n=e.record[e.field.name]||``;return n?e.short?t.span({className:`txt txt-ellipsis`,textContent:app.utils.truncate(n)}):n:t.span({className:`missing-value`})})}window.app=window.app||{},window.app.fieldTypes=window.app.fieldTypes||{},window.app.fieldTypes.email={icon:`ri-mail-line`,label:`Email`,settings:ln,input:cn,view:J,filterModifiers:e=>[`lower`],dummyData:(e,n=!1)=>`test_${app.utils.randomString(3,`123567890`)}@example.com`};function un(e){let n=`url_`+app.utils.randomString();return t.div({className:`record-field-input field-type-url`},t.div({className:`field`},t.label({htmlFor:n},t.i({className:app.fieldTypes.url.icon,ariaHidden:!0}),t.span({className:`txt`},()=>e.field.name)),t.input({type:`url`,id:n,spellcheck:!1,name:()=>e.field.name,required:()=>e.field.required,value:()=>e.record[e.field.name]||``,oninput:n=>e.record[e.field.name]=n.target.value})),()=>{if(e.field.help)return t.div({className:`field-help`},e.field.help)})}function Y(e){let n=`f_`+app.utils.randomString();return app.components.fieldSettings(e,{content:()=>t.div({className:`grid sm`},t.div({className:`col-sm-6`},t.div({className:`field`},t.label({htmlFor:n+`.exceptDomains`},t.span({className:`txt`},`Except domains`),t.i({className:`ri-information-line link-hint`,ariaDescription:app.attrs.tooltip(`List of domains that are NOT allowed.
This field is disabled if "Only domains" is set.`)})),t.input({type:`text`,id:n+`.exceptDomains`,disabled:()=>!app.utils.isEmpty(e.field.onlyDomains),name:()=>`fields.${e.fieldIndex}.exceptDomains`,value:()=>app.utils.joinNonEmpty(e.field.exceptDomains),onchange:n=>e.field.exceptDomains=app.utils.splitNonEmpty(n.target.value,`,`)})),t.div({className:`field-help`},`Use comma as separator.`)),t.div({className:`col-sm-6`},t.div({className:`field`},t.label({htmlFor:n+`.onlyDomains`},t.span({className:`txt`},`Only domains`),t.i({className:`ri-information-line link-hint`,ariaDescription:app.attrs.tooltip(`List of domains that are ONLY allowed.
This field is disabled if "Except domains" is set.`)})),t.input({type:`text`,id:n+`.onlyDomains`,disabled:()=>!app.utils.isEmpty(e.field.exceptDomains),name:()=>`fields.${e.fieldIndex}.onlyDomains`,value:()=>app.utils.joinNonEmpty(e.field.onlyDomains),onchange:n=>e.field.onlyDomains=app.utils.splitNonEmpty(n.target.value,`,`)})),t.div({className:`field-help`},`Use comma as separator.`)),t.div({className:`col-sm-12`},t.div({className:`field`},t.label({htmlFor:n+`.help`},`Help text`),t.input({type:`text`,id:n+`.help`,name:()=>`fields.${e.fieldIndex}.help`,value:()=>e.field.help||``,oninput:n=>e.field.help=n.target.value})))),footer:()=>[t.div({className:`field`},t.input({className:`sm`,type:`checkbox`,id:n+`.required`,name:()=>`fields.${e.fieldIndex}.required`,checked:()=>!!e.field.required,onchange:n=>e.field.required=n.target.checked}),t.label({htmlFor:n+`.required`},t.span({className:`txt`},`Required`),t.small({className:`txt-hint`},`(!='')`),t.i({className:`ri-information-line link-hint`,ariaDescription:app.attrs.tooltip(`Requires the field value to be nonempty string`)})))]})}function dn(e){return t.div({className:`record-field-view field-type-url`},()=>{let n=e.record[e.field.name]||``;return n?t.a({href:()=>n,className:`txt txt-ellipsis`,rel:`noopener noreferrer`,target:`_blank`,textContent:app.utils.truncate(n),ariaDescription:app.attrs.tooltip(`Open in new tab`),onclick:e=>{e.stopPropagation()}}):t.span({className:`missing-value`})})}window.app=window.app||{},window.app.fieldTypes=window.app.fieldTypes||{},window.app.fieldTypes.url={icon:`ri-link`,label:`URL`,settings:Y,input:un,view:dn,dummyData:(e,n=!1)=>`https://example.com`};function fn(e){let n=`date_`+app.utils.randomString();return t.div({className:`record-field-input field-type-date`},t.div({className:`field`},t.label({htmlFor:n},t.i({className:app.fieldTypes.date.icon,ariaHidden:!0}),t.span({className:`txt`},()=>e.field.name)),t.input({id:n,step:1,type:`datetime-local`,name:()=>e.field.name,required:()=>e.field.required,value:()=>app.utils.toDatetimeLocalInputValue(e.record[e.field.name]),onchange:n=>{e.record[e.field.name]=app.utils.toRFC3339Datetime(n.target.value)}})),()=>{if(e.field.help)return t.div({className:`field-help`},e.field.help)})}function pn(e){let n=`f_`+app.utils.randomString();return app.components.fieldSettings(e,{content:()=>t.div({className:`grid sm`},t.div({className:`col-sm-6`},t.div({className:`field`},t.label({htmlFor:n+`.min`},t.span({className:`txt`},`Min date (Local)`)),t.input({type:`datetime-local`,id:n+`.min`,step:1,name:()=>`fields.${e.fieldIndex}.min`,value:()=>app.utils.toDatetimeLocalInputValue(e.field.min),onchange:n=>{e.field.min=app.utils.toRFC3339Datetime(n.target.value)}}))),t.div({className:`col-sm-6`},t.div({className:`field`},t.label({htmlFor:n+`.max`},t.span({className:`txt`},`Max date (Local)`)),t.input({type:`datetime-local`,id:n+`.max`,step:1,name:()=>`fields.${e.fieldIndex}.max`,value:()=>app.utils.toDatetimeLocalInputValue(e.field.max),onchange:n=>{e.field.max=app.utils.toRFC3339Datetime(n.target.value)}}))),t.div({className:`col-sm-12`},t.div({className:`field`},t.label({htmlFor:n+`.help`},`Help text`),t.input({type:`text`,id:n+`.help`,name:()=>`fields.${e.fieldIndex}.help`,value:()=>e.field.help||``,oninput:n=>e.field.help=n.target.value})))),footer:()=>[t.div({className:`field`},t.input({className:`sm`,type:`checkbox`,id:n+`.required`,name:()=>`fields.${e.fieldIndex}.required`,checked:()=>!!e.field.required,onchange:n=>e.field.required=n.target.checked}),t.label({htmlFor:n+`.required`},t.span({className:`txt`},`Required`),t.small({className:`txt-hint`},`(!='')`),t.i({className:`ri-information-line link-hint`,ariaDescription:app.attrs.tooltip(`Requires the field value to be nonempty string`)})))]})}function mn(e){return t.div({className:`record-field-view field-type-date`},app.components.formattedDate({value:()=>e.record[e.field.name],short:()=>e.short}))}window.app=window.app||{},window.app.fieldTypes=window.app.fieldTypes||{},window.app.fieldTypes.date={icon:`ri-calendar-line`,label:`Datetime`,settings:pn,input:fn,view:mn,dummyData:(e,n=!1)=>new Date().toISOString().replaceAll(`T`,` `)};function hn(e){delete e.clone[e.field.name]}function gn(e){let n=[{label:`Create`,value:1},{label:`Update`,value:2},{label:`Create/Update`,value:3}];function r(e){return e.onCreate&&e.onUpdate?3:e.onUpdate?2:1}function i(n){switch(n){case 1:e.field.onCreate=!0,e.field.onUpdate=!1;break;case 2:e.field.onCreate=!1,e.field.onUpdate=!0;break;case 3:e.field.onCreate=!0,e.field.onUpdate=!0;break}}let a=store({isDropdownOpen:!1});return app.components.fieldSettings(e,{header:t.div({className:`field header-select autodate-select`,ariaDescription:app.attrs.tooltip(`Auto set on`,`left`),onmount:()=>{i(r(e.field))}},app.components.select({required:!0,options:n,disabled:()=>e.originalCollection?.system,value:()=>r(e.field),onchange:e=>i(e?.[0]?.value),ondropdowntoggle:e=>{a.isDropdownOpen=e.newState==`open`}}))})}function _n(e){return t.div({className:`record-field-view field-type-autodate`},app.components.formattedDate({value:()=>e.record[e.field.name],short:()=>e.short}))}window.app=window.app||{},window.app.fieldTypes=window.app.fieldTypes||{},window.app.fieldTypes.autodate={icon:`ri-calendar-check-line`,label:`Autodate`,settings:gn,view:_n,onrecordduplicate:hn,dummyData:(e,n=!1)=>{if(!n)return new Date().toISOString().replaceAll(`T`,` `)}};var vn=`@@filesToDelete`;function X(e){let n=app.utils.toArray(e.payload[e.field.name]),r=app.utils.toArray(e.record[vn]?.[e.field.name]);for(let e of r){let r=n.indexOf(e);r>=0&&n.splice(r,1)}e.payload[e.field.name]=n}function yn(e){let n=`file_`+app.utils.randomString();function r(n){return typeof n==`string`?!!e.record[vn]?.[e.field.name]?.includes(n):!1}function i(n){if(typeof n==`string`){e.record[vn]=e.record[`@@filesToDelete`]||{},e.record[vn][e.field.name]=e.record[`@@filesToDelete`][e.field.name]||[],app.utils.pushUnique(e.record[vn][e.field.name],n),c();return}let r=app.utils.toArray(e.record[e.field.name]),i=r.indexOf(n);i>=0&&(r.splice(i,1),e.record[e.field.name]=r,c())}function a(n){typeof n==`string`&&(app.utils.removeByValue(e.record[vn]?.[e.field.name],n),c())}function o(){return e.record[`@@filesToDelete`]?.[e.field.name]?.length||0}function s(){return app.utils.toArray(e.record[e.field.name]).length-o()}function c(){f?.dispatchEvent(new CustomEvent(`change`,{detail:{data:e},bubbles:!0}))}let l=store({get maxReached(){let n=e.field.maxSelect||1;return s()>=n}});function u(n){let r=app.utils.toArray(e.record[e.field.name]);for(let e of n){if(l.maxReached){console.warn(`can't add more files - max allowed files reached`);break}r.push(e)}e.record[e.field.name]=r,c()}let d=t.input({type:`file`,hidden:!0,multiple:()=>e.field.maxSelect>1,accept:()=>e.field.mimeTypes?.join(`,`)||void 0,onchange:e=>{u(e.target.files),e.target.value=null}}),f=t.output({className:`field-content`,name:()=>e.field.name},app.components.sortable({className:`list`,data:()=>{let n=app.utils.toArray(e.record[e.field.name]),r=!1;for(let e=n.length-1;e>=0;e--)typeof n[e]==`string`||n[e]instanceof Blob||(r=!0,n.splice(e,1));return r&&(e.record[e.field.name]=n),n},onchange:n=>{e.record[e.field.name]=n,c()},dataItem:(n,o)=>t.div({rid:n,className:()=>`list-item highlight ${r(n)?`deleted`:``}`},t.div({className:`content gap-10`},()=>typeof n==`string`?[app.components.recordFileThumb({record:e.record,filename:n}),t.button({type:`button`,ariaDescription:app.attrs.tooltip(`Open in new tab`),onclick:async()=>{let r=await app.getFileToken(e.record.collectionId),i=app.pb.files.getURL(e.record,n,{token:r});window.open(i,`_blank`,`noreferrer,noopener`)}},t.span({className:`txt link-primary`},n))]:[app.components.uploadedFileThumb({file:n}),t.span({className:`label success`},`New`),t.span({className:`txt`},n.name)]),t.div({className:`actions`},t.button({type:`button`,className:`btn sm secondary transparent circle`,ariaLabel:app.attrs.tooltip(`Remove file`),hidden:()=>r(n),onclick:()=>i(n)},t.i({className:`ri-close-line`,ariaHidden:!0})),t.button({type:`button`,className:`btn sm warning transparent`,hidden:()=>!r(n),onclick:()=>a(n)},t.span({className:`txt`},`Restore`))))}),t.hr({className:`m-t-5 m-b-0`,hidden:()=>app.utils.toArray(e.record[e.field.name]).length>0}),t.button({type:`button`,className:`btn sm secondary block`,title:()=>l.maxReached?`Max allowed files reached`:void 0,disabled:()=>l.maxReached,onclick:e=>{l.maxReached||d?.click(),document.activeElement?.blur()}},t.i({className:`ri-upload-cloud-line`,ariaHidden:!0}),t.span({className:`txt`},`Upload or drop new file`)));return t.div({className:`record-field-input field-type-file`,ondragover:e=>{e.preventDefault()},ondrop:e=>{let n=e.dataTransfer?.files||[];n.length&&(e.preventDefault(),!l.maxReached&&u(n))}},t.div({className:()=>`field ${e.field.required?`required`:``}`},t.label({htmlFor:n},t.i({className:app.fieldTypes.file.icon,ariaHidden:!0}),t.span({className:`txt`},()=>e.field.name)),d,f),()=>{if(e.field.help)return t.div({className:`field-help`},e.field.help)})}function bn(e){delete e.clone[e.field.name]}function xn(e){let n=`f_`+app.utils.randomString();return app.components.fieldSettings(e,{header:[t.div({className:`field header-select single-multiple-select`},app.components.select({required:!0,options:[{label:`Single`,value:!1},{label:`Multiple`,value:!0}],value:()=>e.field.maxSelect>1,onchange:n=>{n?.[0]?.value?(!e.field.maxSelect||e.field.maxSelect<2)&&(e.field.maxSelect=10):e.field.maxSelect=1}}))],content:()=>t.div({className:`grid sm`},t.div({className:`col-sm-12`},t.div({className:`field`},t.label({htmlFor:n+`.mimeTypes`},t.span({className:`txt`},`Allowed mime types`),t.i({className:`ri-information-line link-hint`,ariaDescription:app.attrs.tooltip(`Allow files ONLY with the listed mime types.
Leave empty for no restriction.`)})),app.components.select({max:99,placeholder:`No restriction`,options:app.utils.mimeTypes.map(e=>({value:e.mimeType,label:()=>t.div({className:`inline-flex gap-10`},t.span({className:`txt`},e.ext||`-`),t.small({className:`txt-hint`},e.mimeType))})),name:()=>`fields.${e.fieldIndex}.mimeTypes`,value:()=>app.utils.toArray(e.field.mimeTypes),onchange:n=>e.field.mimeTypes=n.map(e=>e.value)})),t.div({className:`field-help`},t.button({type:`button`,className:`link-hint gap-0`,"html-popovertarget":n+`mimeTypesDropdown`},t.span({className:`txt`},`Choose presets`),t.i({className:`ri-arrow-drop-down-fill`,ariaHidden:!0})),t.div({id:n+`mimeTypesDropdown`,className:`dropdown sm nowrap left p-10`,popover:`auto`},t.button({type:`button`,className:`dropdown-item`,role:`menuitem`,onclick:n=>{e.field.mimeTypes=[`image/jpeg`,`image/png`,`image/svg+xml`,`image/gif`,`image/webp`],n.target.closest(`.dropdown`).hidePopover()},textContent:`Images (jpg, png, svg, gif, webp)`}),t.button({type:`button`,className:`dropdown-item`,role:`menuitem`,onclick:n=>{e.field.mimeTypes=[`application/pdf`,`application/msword`,`application/vnd.openxmlformats-officedocument.wordprocessingml.document`,`application/vnd.ms-excel`,`application/vnd.openxmlformats-officedocument.spreadsheetml.sheet`],n.target.closest(`.dropdown`).hidePopover()},textContent:`Documents (pdf, doc/docx, xls/xlsx)`}),t.button({type:`button`,className:`dropdown-item`,role:`menuitem`,onclick:n=>{e.field.mimeTypes=[`video/mp4`,`video/mpeg`,`video/x-msvideo`,`video/quicktime`,`video/3gpp`],n.target.closest(`.dropdown`).hidePopover()},textContent:`Videos (mp4, mpeg, avi, mov, 3gp)`}),t.button({type:`button`,className:`dropdown-item`,role:`menuitem`,onclick:n=>{e.field.mimeTypes=[`application/zip`,`application/x-7z-compressed`,`application/x-rar-compressed`],n.target.closest(`.dropdown`).hidePopover()},textContent:`Archives (zip, 7zip, rar)`})))),t.div({className:()=>e.field.maxSelect>1?`col-sm-6`:`col-sm-9`},t.div({className:`field`},t.label({htmlFor:n+`.thumbs`},t.span({className:`txt`},`Thumb sizes`),t.i({className:`ri-information-line link-hint`,ariaDescription:app.attrs.tooltip(`List of additional thumb sizes for image files, along with the default thumb size of 100x100. The thumbs are generated lazily on first access.`)})),t.input({type:`text`,id:n+`.thumbs`,placeholder:`e.g. 50x50, 480x720`,name:()=>`fields.${e.fieldIndex}.thumbs`,value:()=>app.utils.joinNonEmpty(e.field.thumbs),onchange:n=>e.field.thumbs=app.utils.splitNonEmpty(n.target.value,`,`)})),t.div({className:`field-help`},t.span({className:`txt m-r-5`},`Use comma as separator.`),t.button({type:`button`,className:`link-hint gap-0`,"html-popovertarget":n+`thumbFormatsDropdown`},t.span({className:`txt`},`Supported formats`),t.i({className:`ri-arrow-drop-down-fill`,ariaHidden:!0})),t.div({id:n+`thumbFormatsDropdown`,className:`dropdown sm nowrap left p-10`,popover:`auto`},t.ul({className:`m-0 p-l-sm`},t.li(null,t.strong(null,`WxH`),t.span(null,` (e.g. 100x50) - crop to WxH viewbox (from center)`)),t.li(null,t.strong(null,`WxHt`),t.span(null,` (e.g. 100x50t) - crop to WxH viewbox (from top)`)),t.li(null,t.strong(null,`WxHb`),t.span(null,` (e.g. 100x50b) - crop to WxH viewbox (from bottom)`)),t.li(null,t.strong(null,`WxHf`),t.span(null,` (e.g. 100x50f) - fit inside a WxH viewbox (without cropping)`)),t.li(null,t.strong(null,`0xH`),t.span(null,` (e.g. 0x50) - resize to H height preserving the aspect ratio`)),t.li(null,t.strong(null,`Wx0`),t.span(null,` (e.g. 100x0) - resize to W width preserving the aspect ratio`)))))),t.div({className:`col-sm-3`},t.div({className:`field`},t.label({htmlFor:n+`.maxSize`},`Max size`),t.input({type:`number`,id:n+`.maxSize`,step:1,min:0,max:2**53-1,placeholder:`~5MB default`,name:()=>`fields.${e.fieldIndex}.maxSize`,value:()=>e.field.maxSize||``,oninput:n=>e.field.maxSize=parseInt(n.target.value,10)})),t.div({className:`field-help`},`In bytes.`)),()=>{if(e.field.maxSelect>1)return t.div({className:`col-sm-3`},t.div({className:`field`},t.label({htmlFor:n+`.maxSelect`},`Max select`),t.input({type:`number`,id:n+`.maxSelect`,placeholder:`Default to single`,step:1,min:2,required:!0,max:2**53-1,name:()=>`fields.${e.fieldIndex}.maxSelect`,value:()=>e.field.maxSelect||``,onchange:e=>{let n=parseInt(e.target.value,10);n>1?props.field.maxSelect=n:props.field.maxSelect=1}})))},t.div({className:`col-sm-12`},t.div({className:`field m-t-5 m-b-5`},t.input({className:`switch`,type:`checkbox`,id:n+`.protected`,name:()=>`fields.${e.fieldIndex}.protected`,checked:()=>!!e.field.protected,onchange:n=>e.field.protected=n.target.checked}),t.label({htmlFor:n+`.protected`},t.span({className:`txt`},`Protected`),t.small({className:`txt-hint`},`Files will require View API rule permissions and file token (`,t.a({href:`https://pocketbase.io/docs/files-handling#protected-files`,target:`_blank`,rel:`noopener noreferrer`,textContent:`Learn more`}),`).`)))),t.div({className:`col-sm-12`},t.div({className:`field`},t.label({htmlFor:n+`.help`},`Help text`),t.input({type:`text`,id:n+`.help`,name:()=>`fields.${e.fieldIndex}.help`,value:()=>e.field.help||``,oninput:n=>e.field.help=n.target.value})))),footer:()=>[t.div({className:`field`},t.input({className:`sm`,type:`checkbox`,id:n+`.required`,name:()=>`fields.${e.fieldIndex}.required`,checked:()=>!!e.field.required,onchange:n=>e.field.required=n.target.checked}),t.label({htmlFor:n+`.required`},t.span({className:`txt`},`Required`),t.small({className:`txt-hint`},`(!='')`),t.i({className:`ri-information-line link-hint`,ariaDescription:app.attrs.tooltip(`Requires the field value to be nonempty string`)})))]})}function Sn(e){return t.div({className:`record-field-view field-type-file`},()=>{let n=app.utils.toArray(e.record[e.field.name]);if(!n.length)return t.span({className:`missing-value`});let r=[],i=e.short?5:100;for(let a=0;a<n.length;a++){if(a>=i){r.push(t.span({className:`thumb sm`},`+`,n.length-i));break}r.push(app.components.recordFileThumb({record:e.record,filename:n[a]}))}return r})}window.app=window.app||{},window.app.fieldTypes=window.app.fieldTypes||{},window.app.fieldTypes.file={icon:`ri-image-line`,label:`File`,settings:xn,input:yn,view:Sn,summaryPriority:-1,onrecordsave:X,onrecordduplicate:bn,filterModifiers:e=>e.maxSelect>1?[`each`,`length`]:[],dummyData:(e,n=!1)=>n?e.maxSelect>1?[Cn(`test1.txt`),Cn(`test2.txt`)]:Cn(`test1.txt`):e.maxSelect>1?[`test1_`+app.utils.randomString(10)+`.txt`,`test2_`+app.utils.randomString(10)+`.txt`]:`test_`+app.utils.randomString(10)+`.txt`};function Cn(e){return{toString(){return`new File([...], '${e}')`},toJSON(){return`[[new File([...], '${e}')]]`}}}function wn(e){let n=`rel_`+app.utils.randomString();function r(){l?.dispatchEvent(new CustomEvent(`change`,{detail:{data:e},bubbles:!0}))}let i=store({selected:[],isLoading:!0,get maxReached(){let n=e.field.maxSelect||1;return app.utils.toArray(e.record[e.field.name]).length>=n}});async function a(){i.isLoading=!0;let n=app.utils.toArray(e.record[e.field.name]);if(!n.length){i.selected=[],i.isLoading=!1;return}try{let r=app.store.collections.find(n=>n.id==e.field.collectionId),a=[],o=r?.fields?.filter(e=>!e.hidden&&e.presentable&&e.type==`relation`)||[];for(let e of o)a.push(e.name);let s=await app.pb.collection(e.field.collectionId).getFullList({requestKey:null,filter:n.map(e=>app.pb.filter(`id={:id}`,{id:e})).join(`||`),expand:a.join(`,`)||void 0}),c=[];for(let e of n){let n=s.find(n=>n.id==e);n&&c.push(n)}i.selected=c,i.isLoading=!1}catch(e){e.isAbort||(app.checkApiError(e),i.isLoading=!1)}}function o(n){let r=app.utils.toArray(e.record[e.field.name]),a=r.indexOf(n);a>=0&&(r.splice(a,1),s(r));let o=i.selected.findIndex(e=>e.id==n);i.selected.splice(o,1)}function s(n=[]){e.record[e.field.name]=e.field.maxSelect>1?n:n?.[0]||``,r()}let c=[watch(()=>e.record[e.field.name],()=>a())],l=t.output({className:`field-content`,name:()=>e.field.name},t.div({hidden:()=>!i.isLoading,className:`list`},()=>app.utils.toArray(e.record[e.field.name]).map(()=>t.div({className:`list-item`},t.span({className:`skeleton-loader`})))),app.components.sortable({className:`list`,hidden:()=>i.isLoading,data:()=>i.selected,onchange:e=>{i.selected=e,s(e.map(e=>e.id))},dataItem:(e,n)=>t.div({rid:e,className:`list-item highlight`},t.div({className:`content`},()=>app.components.recordSummary(e)),t.div({className:`actions`},t.button({className:`btn sm secondary transparent circle`,ariaLabel:app.attrs.tooltip(`Remove`),onclick:()=>o(e.id)},t.i({className:`ri-close-line`,ariaHidden:!0}))))}),t.hr({hidden:()=>!app.utils.isEmpty(e.record[e.field.name]),className:`m-t-5 m-b-0`}),t.button({type:`button`,className:`btn sm secondary block`,disabled:()=>i.isLoading,onclick:n=>{app.modals.openRecordsPicker({collection:e.field.collectionId,selectedIds:app.utils.toArray(e.record[e.field.name]),maxSelect:e.field.maxSelect,onselect:e=>{i.selected=e,s(e.map(e=>e.id))}})}},t.i({className:`ri-magic-line`,ariaHidden:!0}),t.span({className:`txt`},`Open records picker`)));return t.div({className:`record-field-input field-type-relation`,onunmount:()=>{c.forEach(e=>e?.unwatch())}},t.div({className:()=>`field ${e.field.required?`required`:``}`},t.label({htmlFor:n},t.i({className:app.fieldTypes.relation.icon,ariaHidden:!0}),t.span({className:`txt`},()=>e.field.name)),l),()=>{if(e.field.help)return t.div({className:`field-help`},e.field.help)})}function Tn(e){let n=`f_`+app.utils.randomString(),r=[{label:`False`,value:!1},{label:`True`,value:!0}],i=[{label:`Single`,value:!1},{label:`Multiple`,value:!0}],a=[watch(()=>e.field.maxSelect,n=>{n||=1,n<=1&&(e.field.minSelect=0)})];return app.components.fieldSettings(e,{header:[t.div({className:`field header-select collections-select`,onunmount:()=>{a.forEach(e=>e?.unwatch())}},app.components.select({required:!0,className:`inline-error`,placeholder:`Select collection*`,name:()=>`fields.${e.fieldIndex}.collectionId`,disabled:()=>!!e.originalField?.id,options:()=>app.utils.sortedCollections(app.store.collections.filter(e=>e.type!=`view`)).map(e=>({value:e.id,label:e.name})),value:()=>e.field.collectionId,onchange:n=>{e.field.collectionId=n?.[0]?.value||``},after:()=>[t.hr({className:`m-t-5 m-b-5`}),t.button({type:`button`,className:`btn sm outline`,onclick:()=>{app.modals.openCollectionUpsert({},{onsave:n=>{e.field.collectionId=n.id}})}},t.i({className:`ri-add-line`,ariaHidden:!0}),t.span({className:`txt`},`New collection`))]})),t.div({className:`field header-select single-multiple-select`},app.components.select({required:!0,options:i,value:()=>e.field.maxSelect>1,onchange:n=>{n?.[0]?.value?e.field.maxSelect<<0<2&&(e.field.maxSelect=10):e.field.maxSelect=1}}))],content:()=>t.div({className:`grid sm`},t.div({className:`col-sm-6`,hidden:()=>e.field.maxSelect<<0<2},t.div({className:`field`},t.label({htmlFor:n+`.minSelect`},`Min select`),t.input({type:`number`,id:n+`.minSelect`,step:1,min:0,max:2**53-1,placeholder:`No min limit`,name:()=>`fields.${e.fieldIndex}.minSelect`,value:()=>e.field.minSelect||``,onchange:n=>e.field.minSelect=parseInt(n.target.value,10)}))),t.div({className:`col-sm-6`,hidden:()=>e.field.maxSelect<<0<2},t.div({className:`field`},t.label({htmlFor:n+`.maxSelect`},`Max select`),t.input({type:`number`,id:n+`.maxSelect`,step:1,min:()=>e.field.minSelect||2,max:2**53-1,placeholder:`Default to single`,name:()=>`fields.${e.fieldIndex}.maxSelect`,value:()=>e.field.maxSelect||``,onchange:n=>{let r=parseInt(n.target.value,10);r>1?e.field.maxSelect=r:e.field.maxSelect=1}}))),t.div({className:`col-sm-12`},t.div({className:`field`},t.label({htmlFor:n+`.cascadeDelete`},`Cascade delete`),app.components.select({required:!0,id:n+`.cascadeDelete`,name:()=>`fields.${e.fieldIndex}.cascadeDelete`,options:r,value:()=>e.field.cascadeDelete||!1,onchange:n=>{e.field.cascadeDelete=!!n?.[0].value}}))),t.div({className:`col-sm-12`},t.div({className:`field`},t.label({htmlFor:n+`.help`},`Help text`),t.input({type:`text`,id:n+`.help`,name:()=>`fields.${e.fieldIndex}.help`,value:()=>e.field.help||``,oninput:n=>e.field.help=n.target.value})))),footer:()=>[t.div({className:`field`},t.input({className:`sm`,type:`checkbox`,id:n+`.required`,name:()=>`fields.${e.fieldIndex}.required`,checked:()=>!!e.field.required,onchange:n=>e.field.required=n.target.checked}),t.label({htmlFor:n+`.required`},t.span({className:`txt`},`Required`),t.small({className:`txt-hint`},`(!='')`),t.i({className:`ri-information-line link-hint`,ariaDescription:app.attrs.tooltip(`Requires the field value to be nonempty string`)})))]})}window.app=window.app||{},window.app.fieldTypes=window.app.fieldTypes||{},window.app.fieldTypes.relation={icon:`ri-mind-map`,label:`Relation`,settings:Tn,input:wn,view:Ht,filterModifiers:e=>e.maxSelect>1?[`each`,`length`]:[],dummyData:(e,n=!1)=>e.maxSelect>1?[`RECORD_ID1`,`RECORD_ID2`]:`RECORD_ID`};function En(e){let n=`select_`+app.utils.randomString();return t.div({className:`record-field-input field-type-select`},t.div({className:`field`},t.label({htmlFor:n},t.i({className:app.fieldTypes.select.icon,ariaHidden:!0}),t.span({className:`txt`},()=>e.field.name)),app.components.select({id:n,max:()=>e.field.maxSelect||1,required:()=>e.field.required,options:()=>e.field.values.map(e=>({value:e})),value:()=>app.utils.toArray(e.record[e.field.name]),onchange:n=>{if(e.field.maxSelect<=1){e.record[e.field.name]=n?.[0]?.value||``;return}e.record[e.field.name]=n.map(e=>e.value)}})),()=>{if(e.field.help)return t.div({className:`field-help`},e.field.help)})}function Dn(e){let n=`f_`+app.utils.randomString(),r=[{label:`Single`,value:!1},{label:`Multiple`,value:!0}],i=t.div({popover:`manual`,className:`dropdown field-select-choices-dropdown`},t.div({className:`field-help m-t-0`,style:`font-size: 0.9em`},`New-line separated choices:`),t.div({className:`field`},t.textarea({className:`autoexpand`,required:!0,value:()=>app.utils.toArray(e.field.values,!1).join(`
`),oninput:n=>{let r=n.target.value.trimStart().replaceAll(`
`,`
`).split(`
`);e.field.values=r,app.utils.deleteByPath(app.store.errors,`fields.${e.fieldIndex}.values`)},onchange:n=>{let r=new Set,i=n.target.value.split(`
`);for(let e of i)e!=``&&r.add(e);e.field.values=Array.from(r)},onblur:e=>{(!e.relatedTarget||!i.contains(e.relatedTarget))&&i.hidePopover()}}))),a=[watch(()=>{e.field.values?.length&&e.field.maxSelect>e.field.values.length&&(e.field.maxSelect=e.field.values.length)})];return app.components.fieldSettings(e,{header:[t.div({className:`field header-select field-select-choices-input`,onunmount:()=>{a.forEach(e=>e?.unwatch())}},t.input({type:`text`,placeholder:`Add choices*`,className:`txt-left inline-error`,value:()=>e.field.values?.join(``)||``,name:()=>`fields.${e.fieldIndex}.values`,onfocus:e=>(i?.showPopover({source:e.target}),i.querySelector(`textarea`)?.focus(),!1)}),i),t.div({className:`field header-select single-multiple-select`},app.components.select({required:!0,options:r,value:()=>e.field.maxSelect>1,onchange:n=>{n?.[0]?.value?e.field.maxSelect=e.field.values.length||2:e.field.maxSelect=1}}))],content:()=>t.div({className:`grid sm`},()=>{if(e.field.maxSelect>1)return t.div({className:`col-sm-12`},t.div({className:`field`},t.label({htmlFor:n+`.maxSelect`},`Max select`),t.input({type:`number`,id:n+`.maxSelect`,placeholder:`Default to single`,step:1,min:2,max:()=>e.field.values?.length||2,name:()=>`fields.${e.fieldIndex}.maxSelect`,value:()=>e.field.maxSelect||``,onchange:n=>{let r=parseInt(n.target.value,10);r>1?e.field.maxSelect=r:e.field.maxSelect=1}})))},t.div({className:`col-sm-12`},t.div({className:`field`},t.label({htmlFor:n+`.help`},`Help text`),t.input({type:`text`,id:n+`.help`,name:()=>`fields.${e.fieldIndex}.help`,value:()=>e.field.help||``,oninput:n=>e.field.help=n.target.value})))),footer:()=>[t.div({className:`field`},t.input({className:`sm`,type:`checkbox`,id:n+`.required`,name:()=>`fields.${e.fieldIndex}.required`,checked:()=>!!e.field.required,onchange:n=>e.field.required=n.target.checked}),t.label({htmlFor:n+`.required`},t.span({className:`txt`},`Required`),t.small({className:`txt-hint`,textContent:()=>e.field.maxSelect>1?`(!=[])`:`(!='')`}),t.i({className:`ri-information-line link-hint`,ariaDescription:app.attrs.tooltip(()=>`Requires the field value to be nonempty ${e.field.maxSelect>1?`array`:`string`}.`)})))]})}function On(e){return t.div({className:`record-field-view field-type-select`},t.div({className:`inline-flex gap-5`},()=>{let n=app.utils.toArray(e.record[e.field.name],!1);return n.length?n.map(e=>t.span({className:`label`,title:e,textContent:app.utils.truncate(e,100)})):t.span({className:`missing-value`})}))}window.app=window.app||{},window.app.fieldTypes=window.app.fieldTypes||{},window.app.fieldTypes.select={icon:`ri-list-check`,label:`Select`,settings:Dn,input:En,view:On,filterModifiers:e=>e.maxSelect>1?[`each`,`length`]:[],dummyData:(e,n=!1)=>e.maxSelect>1?e.values?.slice(0,2)||[]:e.values?.[0]||``};function kn(e){let n=`json_`+app.utils.randomString(),r=store({value:``}),i=[watch(()=>e.record[e.field.name],(n,i)=>{if(!(n!==``&&n===r.value)){if(typeof n==`string`&&!n.startsWith(`"`)&&!n.endsWith(`"`)){r.value=JSON.stringify(n===void 0?null:n),e.record[e.field.name]=r.value;return}typeof n==`string`&&n.startsWith(`"`)&&n.endsWith(`"`)?r.value=n:n===null?r.value=`null`:r.value=JSON.stringify(n===void 0?null:n,null,2)}})];function a(){let n=r.value.trim();if(n===``){e.record[e.field.name]=null;return}try{let r=JSON.parse(n);typeof r==`string`?e.record[e.field.name]=JSON.stringify(r):e.record[e.field.name]=r}catch{e.record[e.field.name]=n}}return t.div({className:`record-field-input field-type-json`},t.div({className:`field`,onunmount:()=>{clearTimeout(void 0),i.forEach(e=>e?.unwatch())}},t.label({htmlFor:n},t.i({className:app.fieldTypes.json.icon,ariaHidden:!0}),t.span({className:`txt`},()=>e.field.name),t.span({hidden:()=>An(r.value.trim()),className:`json-state`,ariaDescription:app.attrs.tooltip(`Invalid JSON`,`left`)},t.i({className:`ri-error-warning-fill txt-danger`,ariaHidden:!0})),t.span({hidden:()=>!An(r.value.trim()),className:`json-state`,ariaDescription:app.attrs.tooltip(`Valid JSON`,`left`)},t.i({className:`ri-checkbox-circle-fill txt-success`,ariaHidden:!0}))),app.components.codeEditor({language:`js`,id:n,name:()=>e.field.name,required:()=>e.field.required,value:()=>r.value,oninput:e=>r.value=e,onblur:()=>a()})),()=>{if(e.field.help)return t.div({className:`field-help`},e.field.help)})}function An(e){if(e===``)return!0;try{return JSON.parse(e),!0}catch{return!1}}function jn(e){try{let n=e.record[e.field.name];typeof n==`string`&&JSON.parse(n)}catch(r){throw new n({status:400,response:{message:`Invalid JSON data`,data:{[e.field.name]:{code:`invalid_json`,message:r.toString()}}}})}}function Mn(e){let n=`f_`+app.utils.randomString(),r=store({showInfo:!1});return app.components.fieldSettings(e,{content:()=>t.div({className:`grid sm`},t.div({className:`col-sm-12`},t.div({className:`field`},t.label({htmlFor:n+`.maxSize`},t.span(null,`Max size `),t.small(null,`(bytes)`)),t.input({type:`number`,id:n+`.maxSize`,name:()=>`fields.${e.fieldIndex}.maxSize`,min:0,step:1,max:2**53-1,placeholder:`Default to max ~1MB`,value:()=>e.field.maxSize||``,oninput:n=>{e.field.maxSize=parseInt(n.target.value,10)}}))),t.div({className:`col-sm-12`},t.div({className:`field`},t.label({htmlFor:n+`.help`},`Help text`),t.input({type:`text`,id:n+`.help`,name:()=>`fields.${e.fieldIndex}.help`,value:()=>e.field.help||``,oninput:n=>e.field.help=n.target.value}))),t.div({className:`col-sm-12`},t.button({type:`button`,className:()=>`btn sm secondary ${r.showInfo?``:`transparent`}`,onclick:()=>r.showInfo=!r.showInfo},t.span({className:`txt`},`String value normalizations`),t.i({className:()=>r.showInfo?`ri-arrow-up-s-line`:`ri-arrow-down-s-line`,ariaHidden:!0})),app.components.slide(()=>r.showInfo,t.div({className:`alert m-t-10 info`},t.div({className:`content`},`In order to support seamlessly both `,t.code(null,`application/json`),` and `,t.code(null,`multipart/form-data`),`requests, the following normalization rules are applied if the `,t.code(null,`json`),` field is a plain string:`,t.ul(null,t.li(null,`"true" is converted to the json `,t.code(null,`true`)),t.li(null,`"false" is converted to the json `,t.code(null,`false`)),t.li(null,`"null" is converted to the json `,t.code(null,`null`)),t.li(null,`"[1,2,3]" is converted to the json `,t.code(null,`[1,2,3]`)),t.li(null,`'{"a":1,"b":2}' is converted to the json `,t.code(null,`{"a":1,"b":2}`)),t.li(null,`numeric strings are converted to json number`),t.li(null,`double quoted strings are left as they are (aka. without normalizations)`),t.li(null,`any other string (empty string too) is double quoted`)),`Alternatively, if you want to avoid the string value normalizations, you can wrap your data inside an object, eg. `,t.code(null,`{"data": anything}`),`.`))))),footer:()=>[t.div({className:`field`},t.input({className:`sm`,type:`checkbox`,id:n+`.required`,name:()=>`fields.${e.fieldIndex}.required`,checked:()=>!!e.field.required,onchange:n=>e.field.required=n.target.checked}),t.label({htmlFor:n+`.required`},t.span({className:`txt`},`Required`),t.i({className:`ri-information-line link-hint`,ariaDescription:app.attrs.tooltip(`Requires the field value NOT to be null, '', [], {}`)})))]})}function Nn(e){return t.div({className:`record-field-view field-type-json`},()=>{let n=e.record[e.field.name];return e.short?t.span({className:`txt-code txt-ellipsis`,textContent:app.utils.truncate(app.utils.trimQuotedValue(JSON.stringify(n))||``)}):app.components.codeBlock({value:()=>JSON.stringify(n,null,2)})})}window.app=window.app||{},window.app.fieldTypes=window.app.fieldTypes||{},window.app.fieldTypes.json={icon:`ri-braces-line`,label:`JSON`,settings:Mn,input:kn,view:Nn,onrecordsave:jn,dummyData:(e,n=!1)=>({example:123})};function Pn(e){let n=`geo_`+app.utils.randomString(),r=store({showMap:!1});return t.div({className:`record-field-input field-type-geoPoint`},t.div({className:()=>`field-list ${e.field.required?`required`:``}`},t.label({htmlFor:n},t.i({className:app.fieldTypes.geoPoint.icon,ariaHidden:!0}),t.span({className:`txt`},()=>e.field.name)),t.div({className:`field-list-content`},t.div({className:`field-list-item p-0`},t.div({className:`fields`},t.div({className:`field addon`},t.label({htmlFor:n+`.lon`},`Longitude:`)),t.div({className:`field`},t.input({id:n+`.lon`,type:`number`,step:`any`,min:`-180`,max:`180`,placeholder:0,name:()=>e.field.name,required:()=>e.field.required,value:()=>e.record[e.field.name]?.lon||``,onchange:n=>{e.record[e.field.name]=e.record[e.field.name]||{},e.record[e.field.name].lon=Number(n.target.value)}})),t.span({className:`delimiter`}),t.div({className:`field addon`},t.label({htmlFor:n+`.lat`},`Latitude:`)),t.div({className:`field`},t.input({id:n+`.lat`,type:`number`,step:`any`,min:`-90`,max:`90`,placeholder:0,name:()=>e.field.name,required:()=>e.field.required,value:()=>e.record[e.field.name]?.lat||``,onchange:n=>{e.record[e.field.name]=e.record[e.field.name]||{},e.record[e.field.name].lat=Number(n.target.value)}})),t.span({className:`delimiter`}),t.div({className:`field addon p-5`},t.button({type:`button`,className:()=>`btn sm circle secondary ${r.showMap?``:`transparent`}`,onclick:()=>r.showMap=!r.showMap},t.i({className:`ri-map-2-line`}))))),()=>{if(r.showMap)return t.div({className:`field-list-item p-0`,style:`height: 250px`},app.components.leaflet({point:()=>e.record[e.field.name]||{lat:0,lon:0},onchange:n=>{e.record[e.field.name]=structuredClone(n)}}))})),()=>{if(e.field.help)return t.div({className:`field-help`},e.field.help)})}function Fn(e){let n=`f_`+app.utils.randomString();return app.components.fieldSettings(e,{content:()=>t.div({className:`grid sm`},t.div({className:`col-sm-12`},t.div({className:`field`},t.label({htmlFor:n+`.help`},`Help text`),t.input({type:`text`,id:n+`.help`,name:()=>`fields.${e.fieldIndex}.help`,value:()=>e.field.help||``,oninput:n=>e.field.help=n.target.value})))),footer:()=>[t.div({className:`field`},t.input({className:`sm`,type:`checkbox`,id:n+`.required`,name:()=>`fields.${e.fieldIndex}.required`,checked:()=>!!e.field.required,onchange:n=>e.field.required=n.target.checked}),t.label({htmlFor:n+`.required`},t.span({className:`txt`},`Required`),t.small({className:`txt-hint`},`(=true)`),t.i({className:`ri-information-line link-hint`,ariaDescription:app.attrs.tooltip(`Requires the field value to be true.`)})))]})}function In(e){return t.div({className:`record-field-view field-type-geoPoint`},t.span({className:`label`},()=>{let n=e.record[e.field.name];return`${n?.lon||0}, ${n?.lat||0}`}))}window.app=window.app||{},window.app.fieldTypes=window.app.fieldTypes||{},window.app.fieldTypes.geoPoint={icon:`ri-map-pin-2-line`,label:`Geo Point`,settings:Fn,input:Pn,view:In,identifierExtractor:function(e,n=``){return[n+e.name+`.lon`,n+e.name+`.lat`]},dummyData:(e,n=!1)=>({lon:0,lat:0})};function Ln(e){let n=`f_`+app.utils.randomString();return app.components.fieldSettings(e,{showHidden:!1,showPresentable:!1,showDuplicate:!1,content:t.div({className:`grid sm`},t.div({className:`col-sm-6`},t.div({className:`field`},t.label({htmlFor:n+`.min`},t.span({className:`txt`},`Min length`),t.i({className:`ri-information-line link-hint`,ariaDescription:app.attrs.tooltip(`Clear the field or set it to 0 for no limit.`)})),t.input({type:`number`,id:n+`.min`,name:()=>`fields.${e.fieldIndex}.min`,step:1,min:0,max:71,placeholder:`No min limit`,value:()=>e.field.min||``,oninput:n=>{e.field.min=parseInt(n.target.value,10)}}))),t.div({className:`col-sm-6`},t.div({className:`field`},t.label({htmlFor:n+`.max`},t.span({className:`txt`},`Max length`),t.i({className:`ri-information-line link-hint`,ariaDescription:app.attrs.tooltip(`Clear the field or set it to 0 to fallback to the default limit (71).`)})),t.input({type:`number`,id:n+`.max`,name:()=>`fields.${e.fieldIndex}.max`,step:1,min:()=>e.field.min||0,max:71,placeholder:`Up to 71 chars`,value:()=>e.field.max||``,oninput:n=>{e.field.max=parseInt(n.target.value,10)}}))),t.div({className:`col-sm-6`},t.div({className:`field`},t.label({htmlFor:n+`.max`},t.span({className:`txt`},`Bcrypt cost`),t.i({className:`ri-information-line link-hint`,ariaDescription:app.attrs.tooltip(`Clear the field or set it to 0 to fallback to the default (10).`)})),t.input({type:`number`,id:n+`.cost`,name:()=>`fields.${e.fieldIndex}.cost`,step:1,min:4,max:31,placeholder:`Default to 10`,value:()=>e.field.cost||``,oninput:n=>{e.field.cost=parseInt(n.target.value,10)}}))),t.div({className:`col-sm-6`},t.div({className:`field`},t.label({htmlFor:n+`.pattern`},t.span({className:`txt`},`Validation pattern`)),t.input({type:`text`,id:n+`.pattern`,placeholder:`ex. ^\\w+$`,name:()=>`fields.${e.fieldIndex}.pattern`,value:()=>e.field.pattern||``,oninput:n=>e.field.pattern=n.target.value}))),t.div({className:`col-sm-12`},t.div({className:`field`},t.label({htmlFor:n+`.help`},`Help text`),t.input({type:`text`,id:n+`.help`,name:()=>`fields.${e.fieldIndex}.help`,value:()=>e.field.help||``,oninput:n=>e.field.help=n.target.value})))),footer:()=>{if(!(e.collection?.type==`auth`&&e.field.name==`password`))return[t.div({className:`field`},t.input({className:`sm`,type:`checkbox`,id:n+`.required`,name:()=>`fields.${e.fieldIndex}.required`,checked:()=>!!e.field.required,onchange:n=>e.field.required=n.target.checked}),t.label({htmlFor:n+`.required`},t.span({className:`txt`},`Required`),t.small({className:`txt-hint`},`(!='')`),t.i({className:`ri-information-line link-hint`,ariaDescription:app.attrs.tooltip(`Requires the field value to be nonempty string`)})))]}})}window.app=window.app||{},window.app.fieldTypes=window.app.fieldTypes||{},window.app.fieldTypes.password={icon:`ri-lock-password-line`,label:`Password`,settings:Ln},window.app=window.app||{},window.app.modals=window.app.modals||{},window.app.modals.openIndexUpsert=function(e,n=``,r={onsave:()=>{},ondelete:()=>{}}){let i=Z(e,n,r);i&&(document.body.appendChild(i),app.modals.open(i))};function Z(e,n=``,r={}){if(!e){console.warn(`[indexUpsertModal] missing required collection argument`);return}let i,a=app.utils.randomString(),o=store({originalIndex:``,index:``,get isNew(){return o.originalIndex==``},get indexParts(){return app.utils.parseIndex(o.index)},get lowerCasedIndexColumnNames(){return o.indexParts.columns.map(e=>e.name.toLowerCase())},get canSave(){return o.lowerCasedIndexColumnNames.length>0}}),s=e?.fields?.filter(e=>!e[`@toDelete`]&&e.name!=`id`)?.map(e=>e.name)||[];function c(n){if(o.originalIndex=n||``,!n){let r=app.utils.parseIndex(``);r.tableName=e?.name||``,n=app.utils.buildIndex(r)}o.index=n}function l(){if(!e||!o.canSave){console.warn(`[saveIndex] no collection or invalid save state:`,e,o.canSave);return}e.indexes=e.indexes||[];let n=e.indexes.findIndex(e=>e==o.originalIndex);n>=0?(e.indexes[n]=o.index,app.utils.deleteByPath(app.store.errors,`indexes.`+n)):e.indexes.push(o.index),typeof r?.onsave==`function`&&r.onsave({collection:e,index:o.index,oldIndex:o.originalIndex}),f(),app.modals.close(i)}function u(){if(!e||!o.originalIndex){console.warn(`[deleteIndex] no collection or index:`,e,o.originalIndex);return}let n=e.indexes?.findIndex(e=>e==o.originalIndex);if(n==-1){console.warn(`[deleteIndex] missing index:`,o.originalIndex);return}e.indexes.splice(n,1),app.utils.deleteByPath(app.store.errors,`indexes.`+n),typeof r?.ondelete==`function`&&r.ondelete({collection:e,position:n,index:o.originalIndex}),f(),app.modals.close(i)}function d(n){let r=JSON.parse(JSON.stringify(o.indexParts));r.tableName=e?.name||``;let i=n.toLowerCase(),a=r.columns.findIndex(e=>e.name.toLowerCase()==i);a>=0?r.columns.splice(a,1):app.utils.pushUnique(r.columns,{name:n}),o.index=app.utils.buildIndex(r),f()}function f(){if(app.store.errors?.indexes){let n=e.indexes.findIndex(e=>e==o.originalIndex);app.utils.deleteByPath(app.store.errors,`indexes.`+n)}}return i=t.div({className:`modal popup index-upsert-modal`,onbeforeopen:()=>{c(n)},onafteropen:()=>{app.store.errors?.indexes&&(app.store.errors.indexes=JSON.parse(JSON.stringify(app.store.errors.indexes)))},onafterclose:e=>{e?.remove()}},t.header({className:`modal-header`},t.h6({className:`modal-title`},t.span({className:`txt`},()=>o.isNew?`Create index`:`Update index`))),t.div({className:`modal-content`},t.form({id:a+`form`,className:`grid sm index-upsert-form`,onsubmit:e=>{e.preventDefault(),l()}},t.div({className:`col-12`},t.div({className:`field`},t.input({type:`checkbox`,className:`switch`,id:a+`checkbox_unique`,checked:()=>o.indexParts.unique,onchange:n=>{let r=JSON.parse(JSON.stringify(o.indexParts));r.unique=n.target.checked,r.tableName=r.tableName||e?.name||``,o.index=app.utils.buildIndex(r)}}),t.label({htmlFor:a+`checkbox_unique`},`Unique`))),t.div({className:`col-12`},t.div({className:`field`},app.components.codeEditor({required:!0,className:`collection-index-input pre-wrap`,name:()=>`indexes.`+e.indexes?.findIndex(e=>e==o.originalIndex),placeholder:()=>`e.g. CREATE INDEX idx_test on ${e?.name||`X`} (created)`,value:()=>o.index,oninput:e=>o.index=e})),t.div({hidden:()=>!s.length,className:`field-help m-t-sm`},t.div({className:`flex flex-wrap gap-5`},t.span({className:`txt`,textContent:`Presets:`}),()=>s?.map(e=>{let n=o.lowerCasedIndexColumnNames.includes(e.toLowerCase());return t.button({type:`button`,textContent:e,className:()=>`label handle ${n?`success`:``}`,onclick:()=>d(e)})})))))),t.footer({className:`modal-footer gap-base`},t.button({type:`button`,className:`btn transparent m-r-auto`,onclick:()=>app.modals.close(i)},t.span({className:`txt`},`Close`)),t.button({hidden:()=>o.isNew,type:`button`,className:()=>`btn sm circle transparent secondary`,ariaLabel:app.attrs.tooltip(`Delete index`,`left`),onclick:()=>{app.modals.confirm(`Do you really want to remove the selected index from the collection?`,u)}},t.i({className:`ri-delete-bin-7-line`,ariaHidden:!0})),t.button({type:`submit`,"html-form":a+`form`,disabled:()=>!o.canSave,className:()=>`btn expanded`},t.span({className:`txt`},`Set index`)))),i}function Rn(e,n,r={}){let i=`emailTemplate`+app.utils.randomString(),a=store({title:`Email template`,placeholders:[]}),o=app.utils.extendStore(a,r),s=store({get config(){let r=app.utils.getByPath(e,n);return r||(r={subject:``,body:``},app.utils.setByPath(e,n,r)),r},get tokensList(){return[]}}),c=()=>{if(a.placeholders?.length)return t.div({className:`field-help`},t.div({className:`flex flex-wrap gap-5`},t.span({className:`txt`},`Placeholders:`),()=>a.placeholders.map(e=>t.span({className:`label sm`},app.components.copyButton(e,e)))))};return t.details({pbEvent:`emailTemplateAccordion`,className:`accordion email-template-accordion`,name:`email-template`,onunmount:()=>{o.forEach(e=>e?.unwatch())}},t.summary(null,t.i({className:`ri-draft-line`,ariaHidden:!0}),t.span({className:`txt`,textContent:()=>a.title}),()=>{if(app.utils.getByPath(app.store.errors,n))return t.i({ariaHidden:!0,className:`ri-error-warning-fill txt-danger m-l-auto`,ariaDescription:app.attrs.tooltip(`Has errors`,`left`)})}),t.div({className:`grid`},t.div({className:`col-12`},t.div({className:`field`},t.label({htmlFor:i+`.subject`,textContent:`Subject`}),app.components.codeEditor({id:i+`.subject`,name:n+`.subject`,required:!0,singleLine:!0,language:`text`,autocomplete:a.placeholders,value:()=>s.config.subject||``,oninput:e=>s.config.subject=e})),c),t.div({className:`col-12`},t.div({className:`field`},t.label({htmlFor:i+`.body`,textContent:`Body (HTML)`}),app.components.codeEditor({id:i+`.body`,name:n+`.body`,required:!0,language:`html`,className:`pre-wrap`,autocomplete:a.placeholders,value:()=>s.config.body||``,oninput:e=>s.config.body=e})),c)))}function zn(e){let n=`mfa_`+app.utils.randomString(),r=store({get config(){return e.mfa||={enabled:!1,duration:900,rule:``},e.mfa},get isSuperusers(){return e.system&&e.name==`_superusers`}});return t.details({pbEvent:`mfaAccordion`,name:`auth-methods`,className:`accordion mfa-accordion`},t.summary(null,t.i({className:`ri-shield-check-line`,ariaHidden:!0}),t.span({className:`txt`,textContent:`Multi-factor authentication (MFA)`}),t.span({className:()=>`label m-l-auto ${r.config.enabled?`success`:``}`,textContent:()=>r.config.enabled?`Enabled`:`Disabled`}),()=>{if(app.store.errors?.mfa)return t.i({className:`ri-error-warning-fill txt-danger`,ariaDescription:app.attrs.tooltip(`Has errors`,`left`)})}),t.div({className:`grid sm`},t.div({className:`col-sm-12`},t.div({className:`alert info`},t.div({className:`content`},t.p(null,`Multi-factor authentication (MFA) requires the user to authenticate with any 2 different auth methods (otp, identity/password, oauth2) before issuing an auth token. `,t.a({href:`https://pocketbase.io/docs/authentication#multi-factor-authentication`,className:`link-hint`,target:`_blank`,rel:`noopener noreferrer`,textContent:`Learn more.`}))))),t.div({className:`col-sm-12`},t.div({className:`field`},t.input({type:`checkbox`,id:n+`.enabled`,name:`mfa.enabled`,className:`switch`,checked:()=>r.config.enabled,onchange:n=>{r.config.enabled=n.target.checked,r.isSuperusers&&(e.otp.enabled=n.target.checked)}}),t.label({htmlFor:n+`.enabled`,textContent:`Enable`}))),t.div({className:`col-sm-12`},t.div({className:`field`},t.label({htmlFor:n+`.duration`,textContent:`Max duration between 2 authentications (in seconds)`}),t.input({type:`number`,id:n+`.duration`,name:`mfa.duration`,min:1,step:1,required:!0,value:()=>r.config.duration||``,oninput:e=>r.config.duration=parseInt(e.target.value,10)}))),t.div({className:`col-sm-12`},app.components.ruleField({label:`MFA rule`,id:n+`.rule`,name:`mfa.rule`,nullable:!1,placeholder:`Leave empty to require MFA for everyone`,autocomplete:n=>app.utils.collectionAutocompleteKeys(e,n),value:()=>r.config.rule||``,oninput:e=>r.config.rule=e}),t.div({className:`field-help`},t.p(null,`This optional rule could be used to enable/disable MFA per account basis.`),t.p(null,`For example, to require MFA only for accounts with non-empty email you can set it to `,t.code(null,`email != ''`),`.`),t.p(null,`Leave the rule empty to require MFA for everyone.`)))))}var Bn=[`id`,`email`,`emailVisibility`,`verified`,`tokenKey`,`password`],Vn=[`text`,`editor`,`url`,`email`,`json`];function Hn(e){let n=`oauth2_`+app.utils.randomString(),r=store({get config(){return e.oauth2||={enabled:!1,mappedFields:{},providers:[]},e.oauth2},get regularFieldOptions(){return e.fields?.filter(e=>Vn.includes(e.type)&&!Bn.includes(e.name)).map(e=>({value:e.name}))},get regularAndFileFieldOptions(){return e.fields?.filter(e=>(e.type==`file`||Vn.includes(e.type))&&!Bn.includes(e.name)).map(e=>({value:e.name}))},showMapping:!1});function i(e){app.utils.deleteByPath(app.store.errors,`oauth2.providers.`+e)}return t.details({pbEvent:`oauth2Accordion`,name:`auth-methods`,className:`accordion oauth2-accordion`},t.summary(null,t.i({className:`ri-profile-line`,ariaHidden:!0}),t.span({className:`txt`,textContent:`OAuth2`}),t.span({className:()=>`label m-l-auto ${r.config.enabled?`success`:``}`,textContent:()=>r.config.enabled?`Enabled`:`Disabled`}),()=>{if(!app.utils.isEmpty(app.store.errors?.oauth2))return t.i({className:`ri-error-warning-fill txt-danger`,ariaDescription:app.attrs.tooltip(`Has errors`,`left`)})}),t.div({className:`grid sm`},t.div({className:`col-sm-12`},t.div({className:`field`},t.input({type:`checkbox`,id:n+`.enabled`,name:`oauth2.enabled`,className:`switch`,checked:()=>r.config.enabled,onchange:e=>r.config.enabled=e.target.checked}),t.label({htmlFor:n+`.enabled`,textContent:`Enable`}))),()=>r.config.providers.map((e,a)=>{let o=n+e.name,s=app.store.oauth2Providers?.find(n=>n.name==e.name)||{};return t.div({className:`col-sm-6`},t.div({className:()=>{let e=`provider-card`;return app.utils.isEmpty(app.store.errors?.oauth2?.providers?.[a])||(e+=` error`),e}},t.figure({className:`provider-logo`},()=>s.logo?t.img({src:`data:image/svg+xml;base64,`+btoa(s.logo),alt:e.name+` logo`}):t.i({className:app.utils.fallbackProviderIcon,ariaHidden:!0})),t.div({className:`content`},t.span({className:`primary-txt`},()=>e.displayName||s.displayName||s.name),t.span({className:`secondary-txt`},()=>e.name||s.name)),t.div({className:`actions`},t.button({type:`button`,title:`Options`,className:`btn secondary transparent sm circle`,"html-popovertarget":o+`dropdown`},t.i({className:`ri-more-2-line`,ariaHidden:!0})),t.div({id:o+`dropdown`,className:`dropdown sm`,popover:`auto`},t.button({type:`button`,className:`dropdown-item`,onclick:n=>{n.target.closest(`.dropdown`).hidePopover(),app.modals.openProviderSettings(e,{namePrefix:`oauth2.providers.`+a,onsubmit:(e,n)=>{r.config.providers[a]=n,i(a)}})}},t.span({className:`txt`},`Settings`)),t.hr(),t.button({type:`button`,className:`dropdown-item`,onclick:n=>{n.target.closest(`.dropdown`).hidePopover(),app.modals.confirm(`Do you really want to remove provider "${e.displayName||s.displayName||s.name}"?`,()=>{i(a),r.config.providers.splice(a,1),r.config.providers.length==0&&(r.config.enabled=!1)})}},t.span({className:`txt`},`Remove`))))))}),t.div({className:`col-sm-6`},t.button({type:`button`,className:`btn lg block secondary add-provider-btn`,onclick:()=>{app.modals.openProviderPicker({exclude:r.config.providers.map(e=>e.name),onselect:e=>{app.modals.openProviderSettings({name:e.name},{onsubmit:(e,n)=>{r.config.providers.length==0&&(r.config.enabled=!0),r.config.providers.push(n)}})}})}},t.i({className:`ri-add-line`,ariaHidden:!0}),t.span({className:`txt `},`Add provider`))),t.div({className:`col-sm-12`},t.button({type:`button`,className:()=>`btn secondary sm ${r.showMapping?``:`transparent`}`,onclick:()=>r.showMapping=!r.showMapping},t.span({className:`txt`},`Optional users create fields mapping`),t.i({className:()=>r.showMapping?`ri-arrow-drop-up-line`:`ri-arrow-drop-down-line`,ariaHidden:!0})),app.components.slide(()=>r.showMapping,t.div({className:`grid sm m-t-sm`},t.div({className:`col-sm-6`},t.div({className:`field`},t.label({htmlFor:n+`.mappedFields.name`},`OAuth2 full name`),app.components.select({id:n+`.mappedFields.name`,name:`oauth2.mappedFields.name`,placeholder:`Select field`,options:()=>r.regularFieldOptions,value:()=>e.oauth2.mappedFields.name,onchange:n=>{e.oauth2.mappedFields.name=n?.[0]?.value||``}}))),t.div({className:`col-sm-6`},t.div({className:`field`},t.label({htmlFor:n+`.mappedFields.avatarURL`},`OAuth2 avatar`),app.components.select({id:n+`.mappedFields.avatarURL`,name:`oauth2.mappedFields.avatarURL`,placeholder:`Select field`,options:()=>r.regularAndFileFieldOptions,value:()=>e.oauth2.mappedFields.avatarURL,onchange:n=>{e.oauth2.mappedFields.avatarURL=n?.[0]?.value||``}}))),t.div({className:`col-sm-6`},t.div({className:`field`},t.label({htmlFor:n+`.mappedFields.id`},`OAuth2 id`),app.components.select({id:n+`.mappedFields.id`,name:`oauth2.mappedFields.id`,placeholder:`Select field`,options:()=>r.regularFieldOptions,value:()=>e.oauth2.mappedFields.id,onchange:n=>{e.oauth2.mappedFields.id=n?.[0]?.value||``}}))),t.div({className:`col-sm-6`},t.div({className:`field`},t.label({htmlFor:n+`.mappedFields.username`},`OAuth2 username`),app.components.select({id:n+`.mappedFields.username`,name:`oauth2.mappedFields.username`,placeholder:`Select field`,options:()=>r.regularFieldOptions,value:()=>e.oauth2.mappedFields.username,onchange:n=>{e.oauth2.mappedFields.username=n?.[0]?.value||``}}))))))))}function Un(e){let n=`otp_`+app.utils.randomString(),r=store({get config(){return e.otp||={enabled:!1,duration:300,length:8},e.otp},get isSuperusers(){return e.system&&e.name==`_superusers`}});return t.details({pbEvent:`otpAccordion`,name:`auth-methods`,className:`accordion otp-accordion`},t.summary(null,t.i({className:`ri-time-line`,ariaHidden:!0}),t.span({className:`txt`,textContent:`One-time password (OTP)`}),t.span({className:()=>`label m-l-auto ${r.config.enabled?`success`:``}`,textContent:()=>r.config.enabled?`Enabled`:`Disabled`}),()=>{if(app.store.errors?.otp)return t.i({className:`ri-error-warning-fill txt-danger`,ariaDescription:app.attrs.tooltip(`Has errors`,`left`)})}),t.div({className:`grid sm`},t.div({className:`col-sm-12`},t.div({className:`field`},t.input({type:`checkbox`,id:n+`.enabled`,name:`otp.enabled`,className:`switch`,checked:()=>r.config.enabled,onchange:n=>{r.config.enabled=n.target.checked,r.isSuperusers&&(e.mfa.enabled=n.target.checked)}}),t.label({htmlFor:n+`.enabled`,textContent:`Enable`}),()=>{if(r.isSuperusers)return t.i({className:`ri-information-line link-hint`,ariaDescription:app.attrs.tooltip(`Superusers can have OTP only as part of Two-factor authentication.`)})})),t.div({className:`col-sm-6`},t.div({className:`field`},t.label({htmlFor:n+`.duration`,textContent:`Duration (in seconds)`}),t.input({type:`number`,id:n+`.duration`,name:`otp.duration`,min:1,step:1,required:!0,value:()=>r.config.duration||``,oninput:e=>r.config.duration=parseInt(e.target.value,10)}))),t.div({className:`col-sm-6`},t.div({className:`field`},t.label({htmlFor:n+`.length`,textContent:`Generated password length`}),t.input({type:`number`,id:n+`.length`,name:`otp.length`,min:1,step:1,required:!0,value:()=>r.config.length||``,oninput:e=>r.config.length=parseInt(e.target.value,10)})))))}function Wn(e){let n=`passwordAuth_`+app.utils.randomString(),r=store({get config(){return e.passwordAuth||={enabled:!0,identityFields:[`email`]},e.passwordAuth},get identityFieldOptions(){let n=[{value:`email`}],r=e?.fields||[],i=e?.indexes||[];for(let e of i){let i=app.utils.parseIndex(e);if(!i.unique||i.columns.length!=1||i.columns[0].name==`email`)continue;let a=r.find(e=>!e.hidden&&e.name.toLowerCase()==i.columns[0].name.toLowerCase());a&&n.push({value:a.name})}return n}});return t.details({pbEvent:`passwordAuthAccordion`,name:`auth-methods`,className:`accordion password-auth-accordion`},t.summary(null,t.i({className:`ri-lock-password-line`,ariaHidden:!0}),t.span({className:`txt`,textContent:`Identity/Password`}),t.span({className:()=>`label m-l-auto ${r.config.enabled?`success`:``}`,textContent:()=>r.config.enabled?`Enabled`:`Disabled`}),()=>{if(app.store.errors?.passwordAuth)return t.i({className:`ri-error-warning-fill txt-danger`,ariaDescription:app.attrs.tooltip(`Has errors`,`left`)})}),t.div({className:`grid sm`},t.div({className:`col-sm-12`},t.div({className:`field`},t.input({type:`checkbox`,id:n+`.enabled`,name:`passwordAuth.enabled`,className:`switch`,checked:()=>r.config.enabled,onchange:e=>r.config.enabled=e.target.checked}),t.label({htmlFor:n+`.enabled`,textContent:`Enable`}))),t.div({className:`col-sm-12`},t.div({className:`field`},t.label({htmlFor:n+`.identityFields`,textContent:`Identity fields`}),app.components.select({id:n+`.identityFields`,name:`passwordAuth.identityFields`,max:99,required:!0,options:()=>r.identityFieldOptions,value:()=>r.config.identityFields,onchange:e=>{r.config.identityFields=e.map(e=>e.value)}})),t.div({className:`field-help`},`Only non-hidden fields with UNIQUE index constraint can be selected.`))))}function Gn(e){let n=`token_`+app.utils.randomString(),r=store({get tokensList(){return e?.name===`_superusers`?[{key:`authToken`,label:`Auth`},{key:`passwordResetToken`,label:`Password reset`},{key:`fileToken`,label:`Protected file`}]:[{key:`authToken`,label:`Auth`},{key:`verificationToken`,label:`Email verification`},{key:`passwordResetToken`,label:`Password reset`},{key:`emailChangeToken`,label:`Email change`},{key:`fileToken`,label:`Protected file`}]}});return t.details({pbEvent:`tokenOptionsAccordion`,name:`other`,className:`accordion token-options-accordion`},t.summary(null,t.i({className:`ri-key-2-line`,ariaHidden:!0}),t.span({className:`txt`,textContent:`Token options (invalidate, duration)`})),t.div({className:`grid sm`},()=>r.tokensList.map(r=>{let i=n+r.key;return t.div({className:`col-sm-6`},t.div({className:`field token-field`},t.label({htmlFor:i,textContent:()=>r.label+` duration (in seconds)`}),t.input({id:i,type:`number`,min:1,step:1,required:!0,name:()=>r.key+`.duration`,value:()=>e[r.key].duration,oninput:n=>e[r.key].duration=parseInt(n.target.value,10)})),t.div({className:`field-help m-b-10`},t.button({type:`button`,className:()=>`link-hint ${e[r.key].secret?`txt-success`:``}`,textContent:`Invalidate all previously issued tokens`,onclick:()=>{e[r.key].secret?delete e[r.key].secret:e[r.key].secret=app.utils.randomSecret(50)}})))})))}function Kn(e){let n=`options_`+app.utils.randomString();return t.div({className:`collection-tab-content collection-options-tab-content`},t.div({className:`grid`},t.div({className:`col-12`},t.div({className:`section-heading`},t.strong(null,`Auth methods`),t.div({className:`flex-fill`}),t.div({className:`field`},t.input({id:n+`.authAlert`,name:`authAlert.enabled`,type:`checkbox`,className:`switch sm`,checked:()=>!!e.collection.authAlert?.enabled,onchange:n=>{e.collection.authAlert=e.collection.authAlert||{},e.collection.authAlert.enabled=n.target.checked}}),t.label({htmlFor:n+`.authAlert`},`Send email alert for new logins`))),Wn(e.collection),()=>{if(e.originalCollection?.name!=`_superusers`)return Hn(e.collection)},Un(e.collection),zn(e.collection)),t.div({className:`col-12`},t.div({className:`section-heading`},t.strong(null,`Mail templates`),t.button({tabIndex:-1,type:`buttton`,className:`m-l-auto label handle txt-bold`,textContent:`Send test email`,onclick:()=>app.modals.openMailTest(e.collection?.name)})),Rn(e.collection,`verificationTemplate`,{title:`Default Verification email template`,placeholders:[`{APP_NAME}`,`{APP_URL}`,`{RECORD:*}`,`{TOKEN}`]}),Rn(e.collection,`resetPasswordTemplate`,{title:`Default Password reset email template`,placeholders:[`{APP_NAME}`,`{APP_URL}`,`{RECORD:*}`,`{TOKEN}`]}),Rn(e.collection,`confirmEmailChangeTemplate`,{title:`Default Confirm email change email template`,placeholders:[`{APP_NAME}`,`{APP_URL}`,`{RECORD:*}`,`{TOKEN}`]}),Rn(e.collection,`otp.emailTemplate`,{title:`Default OTP email template`,placeholders:[`{APP_NAME}`,`{APP_URL}`,`{RECORD:*}`,`{OTP}`,`{OTP_ID}`]}),Rn(e.collection,`authAlert.emailTemplate`,{title:`Default Login alert email template`,placeholders:[`{APP_NAME}`,`{APP_URL}`,`{RECORD:*}`,`{ALERT_INFO}`]})),t.div({className:`col-12`},t.div({className:`section-heading`},t.strong(null,`Other`)),Gn(e.collection))))}function Q(e){return t.div({className:`collection-tab-content collection-fields-tab-content`},t.div({className:`collection-fields-list`},app.components.sortable({handle:`.sort-handle`,data:()=>(e.collection?.fields||[])?.filter(e=>!!app.fieldTypes[e.type]?.settings),dataItem:(n,r)=>app.fieldTypes[n.type].settings({field:n,get originalCollection(){return e.originalCollection},get collection(){return e.collection},get originalField(){return e.originalCollection?.fields?.find(e=>n.id&&e.id==n.id)},get fieldIndex(){return e.collection.fields?.findIndex(e=>n.id?e.id==n.id:e==n)}}),onchange:(n,r,i)=>{e.collection.fields=n}})),()=>app.components.addCollectionFieldButton(e.collection),t.hr(),t.p({className:`txt-bold`},`Unique constraints and indexes (`,()=>e.collection.indexes?.length,`)`),app.components.sortable({className:`indexes-list`,data:()=>e.collection.indexes||[],onchange:function(n){e.collection.indexes=n},dataItem:(n,r)=>{let i=app.utils.parseIndex(n);return t.button({type:`button`,className:()=>`label handle ${app.store.errors?.indexes?.[r]?.message?`danger error`:`success`}`,ariaDescription:app.attrs.tooltip(()=>app.store.errors?.indexes?.[r]?.message||``),onclick:()=>app.modals.openIndexUpsert(e.collection,n)},()=>{if(i.unique)return t.strong(null,`Unique:`)},t.span({className:`txt`},()=>i.columns?.map(e=>e.name).join(`, `)))},after:()=>t.button({type:`button`,className:`label handle`,onclick:()=>app.modals.openIndexUpsert(e.collection)},t.i({className:`ri-add-line`,ariaHidden:!0}),t.span({className:`txt`},`New index`))}))}function qn(e){let n=store({showRulesInfo:!1,showAuthRules:!1}),r=()=>app.attrs.tooltip(e.originalCollection?.system?`System collection rule cannot be changed.`:null,`top-left`);function i(n){return app.utils.collectionAutocompleteKeys(e.collection,n)}return t.div({className:`collection-tab-content collection-rules-tab-content`},t.div({className:`grid`},t.div({className:`col-12`},t.div({className:`flex txt-hint txt-sm`},t.span({className:`txt`},`All rules follow the `,t.a({target:`_blank`,rel:`noopener noreferrer`,href:`https://pocketbase.io/docs/api-rules-and-filters`,textContent:`PocketBase filter syntax and operators`}),`.`),t.strong({tabIndex:-1,className:`m-l-auto link-hint`,textContent:()=>n.showRulesInfo?`Hide available fields`:`Show available fields`,onclick:()=>n.showRulesInfo=!n.showRulesInfo})),app.components.slide(()=>n.showRulesInfo,t.div({className:`alert warning m-t-sm`},t.div({className:`content`},t.p(null,`The following record fields are available:`),t.div({className:`flex flex-wrap gap-5`},()=>app.utils.getAllCollectionIdentifiers(e.collection).map(e=>t.code(null,e))),t.hr({className:`m-t-10 m-b-10`}),t.p(null,`The request fields could be accessed with the special `,t.strong(null,`@request`),` fields:`),t.div({className:`flex flex-wrap gap-5`},t.code(null,`@request.headers.*`),t.code(null,`@request.query.*`),t.code(null,`@request.body.*`),t.code(null,`@request.auth.*`)),t.hr({className:`m-t-10 m-b-10`}),t.p(null,`You could also add constraints and query other collections using the `,t.strong(null,`@collection`),` field:`),t.div({className:`flex flex-wrap gap-5`},t.code(null,`@collection.ANY_COLLECTION_NAME.*`)),t.hr({className:`m-t-10 m-b-10`}),t.p(null,`Example rule:`),()=>{let n=e.collection.fields?.find(e=>e.type==`date`||e.type==`autodate`);return n?t.code(null,`@request.auth.id != "" && ${n.name} > "2022-01-01 00:00:00.000Z"`):t.code(null,`@request.auth.id != ""`)})))),t.div({className:`col-12`,ariaDescription:r()},app.components.ruleField({label:`List/Search rule`,name:`listRule`,autocomplete:i,disabled:()=>e.originalCollection?.system,value:()=>e.collection.listRule,oninput:n=>e.collection.listRule=n})),t.div({className:`col-12`,ariaDescription:r()},app.components.ruleField({label:`View rule`,name:`viewRule`,autocomplete:i,disabled:()=>e.originalCollection?.system,value:()=>e.collection.viewRule,oninput:n=>e.collection.viewRule=n})),()=>{if(e.collection.type!=`view`)return[t.div({className:`col-12`,ariaDescription:r()},app.components.ruleField({label:[t.span({className:`txt`,textContent:`Create rule`}),t.i({hidden:()=>e.collection.createRule==null,className:`ri-information-line link-hint`,ariaDescription:app.attrs.tooltip(`The main record fields hold the values that are going to be inserted in the database.`)})],name:`createRule`,autocomplete:i,disabled:()=>e.originalCollection?.system,value:()=>e.collection.createRule,oninput:n=>e.collection.createRule=n})),t.div({className:`col-12`,ariaDescription:r()},app.components.ruleField({label:[t.span({className:`txt`,textContent:`Update rule`}),t.i({hidden:()=>e.collection.updateRule==null,className:`ri-information-line link-hint`,ariaDescription:app.attrs.tooltip(`The main record fields hold the old/existing record field values.
To target the newly submitted ones you can use @request.body.*.`)})],name:`updateRule`,autocomplete:i,disabled:()=>e.originalCollection?.system,value:()=>e.collection.updateRule,oninput:n=>e.collection.updateRule=n})),t.div({className:`col-12`,ariaDescription:r()},app.components.ruleField({label:`Delete rule`,name:`deleteRule`,autocomplete:i,disabled:()=>e.originalCollection?.system,value:()=>e.collection.deleteRule,oninput:n=>e.collection.deleteRule=n}))]}),()=>{if(e.collection.type==`auth`)return[t.hr({className:`m-t-base m-b-base`}),t.button({type:`button`,onmount:()=>{n.showAuthRules=e.collection.manageRule!==null||e.collection.authRule!==``},className:()=>`btn secondary sm ${n.showAuthRules?``:`transparent`}`,onclick:()=>{n.showAuthRules=!n.showAuthRules}},t.span({className:`txt`},`Additional auth collection rules`),t.i({ariaHidden:!0,className:()=>n.showAuthRules?`ri-arrow-drop-up-line`:`ri-arrow-drop-down-line`})),app.components.slide(()=>n.showAuthRules,t.div({className:`grid sm m-t-sm`},t.div({className:`col-12`,ariaDescription:r()},app.components.ruleField({label:`Authentication rule`,name:`authRule`,placeholder:``,autocomplete:i,disabled:()=>e.originalCollection?.system,value:()=>e.collection.authRule,oninput:n=>e.collection.authRule=n}),t.div({className:`field-help`},t.p(null,`This rule is executed every time `,t.strong(null,`before authentication`),` allowing you to restrict who can authenticate.`),t.p(null,`For example, to allow only verified users you can set it to `,t.code(null,`verified = true`),`.`),t.p(null,`Leave it empty to allow anyone with an account to authenticate.`),t.p(null,`To disable authentication entirely you can change it to "Set superusers only".`))),t.div({className:`col-12`,ariaDescription:r()},app.components.ruleField({label:`Manage rule`,name:`manageRule`,autocomplete:i,disabled:()=>e.originalCollection?.system,value:()=>e.collection.manageRule,oninput:n=>e.collection.manageRule=n}),t.div({className:`field-help`},t.p(null,`This rule is executed in addition to the `,t.strong(null,`create`),` and `,t.strong(null,`update`),` API rules.`),t.p(null,`It enables superuser-like permissions to allow fully managing the auth record(s), eg. changing the password without requiring to enter the old one, directly updating the verified state or email, etc.`)))))]})}var Jn=`test_view_query`;function Yn(e){let n=`query_`+app.utils.randomString(),r=[`SELECT`,`FROM`,`WHERE`,`LEFT JOIN`,`INNER JOIN`,`ON`,`GROUP BY`,`HAVING`,`ORDER BY`,`LIMIT`,`OFFSET`,`AS`,`WITH`,`NOT`,`IN`,`EXISTS`,`LIKE`,`CAST`],i=store({testRecords:[],testError:``,isTesting:!1});async function a(n){if(i.isTesting=!0,i.testRecords=[],(app.store.errors?.viewQuery||app.store.errors?.fields)&&(delete app.store.errors.viewQuery,delete app.store.errors.fields),!n){i.testError=``,i.isTesting=!1;return}try{let r=await app.pb.send(`/api/collections/meta/dry-run-view`,{method:`POST`,body:{query:n},requestKey:Jn});e.collection?.id?i.testRecords=r.sample.map(n=>(n.collectionId=e.collection?.id,n.collectionName=e.collection?.name,n)):i.testRecords=r.sample,i.testError=``,i.isTesting=!1}catch(e){e.isAbort||(i.testError=e.message||`Invalid query.`,i.isTesting=!1)}}let o,s=[watch(()=>e.collection?.viewQuery,e=>{clearTimeout(o),o=setTimeout(()=>a(e),200)})];return t.div({pbEvent:`collectionViewQueryTabContent`,className:`collection-tab-content collection-view-query-tab-content`,onunmount:()=>{clearTimeout(o),app.pb.cancelRequest(Jn),s.forEach(e=>e?.unwatch())}},t.div({className:`grid`},t.div({className:`col-12`},t.div({className:`txt-right txt-sm m-b-10`},t.button({type:`button`,className:`txt-bold link-hint`,"html-popovertarget":n+`caveats_dropdown`},()=>`Query caveats`)),t.div({id:n+`caveats_dropdown`,className:`dropdown sm query-caveats-dropdown`,popover:`auto`},t.ul(null,t.li(null,`Wildcard columns (*) are not supported.`),t.li(null,`The query must have a unique `,t.code(null,`id`),` column.`,t.br(),`If your query doesn't have a suitable one, you can use the universal `,t.code(null,`(ROW_NUMBER() OVER()) as id`),`.`),t.li(null,`Expressions must be aliased with a valid formatted field name, e.g. `,t.code(null,`MAX(balance) as maxBalance`),`.`),t.li(null,`Combined/multi-spaced expressions must be wrapped in parenthesis, e.g. `,t.code(null,`(MAX(balance) + 1) as maxBalance`),`.`),t.li(null,`UNION expressions are supported but the entire query must be wrapped in parenthesis.`))),t.div({className:`field`},t.label({htmlFor:n+`.viewQuery`},t.span({className:`txt`},`Select query`),t.span({hidden:()=>!i.testError,className:`query-state`,ariaDescription:app.attrs.tooltip(`Invalid query`,`left`)},t.i({className:`ri-error-warning-fill txt-danger`,ariaHidden:!0})),t.span({hidden:()=>!!i.testError,className:`query-state`,ariaDescription:app.attrs.tooltip(`Valid query`,`left`)},t.i({className:`ri-checkbox-circle-fill txt-success`,ariaHidden:!0}))),app.components.codeEditor({id:n+`.viewQuery`,name:`viewQuery`,language:`sql`,required:!0,autocomplete:r,className:`inline-error`,value:()=>e.collection.viewQuery||``,oninput:n=>{e.collection.viewQuery=n}}))),t.div({className:`col-12`},t.p({className:`txt-sm txt-bold`},`Sample output:`),t.div({className:`view-query-sample-wrapper`},app.components.codeBlock({language:()=>i.testError?`plain`:`js`,className:()=>`view-query-sample ${i.testError?`txt-danger`:``}`,value:()=>i.testRecords?.length?JSON.stringify(i.testRecords,null,2):i.testError||`N/A`})))))}window.app=window.app||{},window.app.modals=window.app.modals||{},window.app.modals.openCollectionUpsert=function(e={},n={onbeforeopen:null,onafteropen:null,onbeforeclose:null,onafterclose:null,onsave:null,ondelete:null,onduplicate:null,ontruncate:null}){app.store.errors=null;let r=Xn(e||{},n||{});document.body.appendChild(r),app.modals.open(r)},window.app.collectionTypes={base:{icon:`ri-folder-2-line`,tabs:{Fields:Q,"API rules":qn}},view:{icon:`ri-table-line`,tabs:{Query:Yn,"API rules":qn}},auth:{icon:`ri-group-line`,tabs:{Fields:Q,"API rules":qn,Options:Kn}}};function Xn(e,n){let r,i=`collection_upsert_`+app.utils.randomString(),a=store({isSaving:!1,originalCollection:{},collection:{},selectedTab:``,get activeTab(){return app.collectionTypes[a.collection.type]?.tabs&&(!a.selectedTab||!app.collectionTypes[a.collection.type].tabs?.[a.selectedTab])?Object.keys(app.collectionTypes[a.collection.type].tabs)?.[0]||``:a.selectedTab},get isNew(){return app.utils.isEmpty(a.originalCollection?.id)},get collectionTypeOptions(){return Object.keys(app.collectionTypes).map(e=>({value:e,label:app.utils.sentenize(e,!1)+` collection`}))},get collectionHash(){return Object.keys(a.collection).length,JSON.stringify(a.collection)},get originalCollectionHash(){return JSON.stringify(a.originalCollection)},get hasChanges(){return a.originalCollectionHash!=a.collectionHash},get canSave(){return!a.isSaving&&(a.isNew||a.hasChanges)}});async function o(e){app.utils.isEmpty(e)&&(e=JSON.parse(JSON.stringify(app.store.collectionScaffolds.base))||{type:`base`,fields:[]},e.fields.push({type:`autodate`,name:`created`,onCreate:!0}),e.fields.push({type:`autodate`,name:`updated`,onCreate:!0,onUpdate:!0})),a.originalCollection=JSON.parse(JSON.stringify(e)),a.collection=JSON.parse(JSON.stringify(e))}async function s(e=!0){a.canSave&&(a.isSaving=!0,app.modals.openCollectionChangesConfirmation(a.originalCollection,a.collection,()=>l(e),()=>{a.isSaving=!1}))}function c(){let e=JSON.parse(JSON.stringify(a.collection));e.fields=e.fields||[];for(let n=e.fields.length-1;n>=0;n--)if(e.fields[n][`@toDelete`]){e.fields.splice(n,1);continue}return e}async function l(e=!0){a.isSaving=!0;try{let i=c(),o=app.utils.isEmpty(a.originalCollection?.id),s;s=o?app.pb.collections.create(i):app.pb.collections.update(a.originalCollection.id,i);let l=JSON.stringify(await s);a.originalCollection=JSON.parse(l),a.collection=JSON.parse(l),app.store.addOrUpdateCollection(JSON.parse(l)),n?.onsave?.(JSON.parse(l),o),a.isSaving=!1,app.toasts.success(o?`Successfully created collection "${a.collection.name}".`:`Successfully updated collection "${a.collection.name}".`,{key:`collectionSave`}),app.store.errors=null,e&&app.modals.close(r,!0)}catch(e){e?.isAbort||(a.isSaving=!1,app.checkApiError(e,!1),app.toasts.error(e.message||`Failed to save collection.`,{key:`collectionSave`}))}}function u(){a.collection=JSON.parse(JSON.stringify(a.originalCollection))}async function d(){let e=a.originalCollection?JSON.parse(JSON.stringify(a.originalCollection)):{};return e.id=``,e.system=!1,e.name+=`_duplicate`,e.created=``,e.updated=``,e.indexes=e.indexes?.map(n=>app.utils.replaceIndexFields(n,n=>({indexName:n.indexName+app.utils.randomString(3),tableName:e.name})))||[],await n.onduplicate?.(e),o(e)}async function f(e){a.selectedTab=e,await new Promise(e=>setTimeout(e,0)),app.store.errors&&(app.store.errors=JSON.parse(JSON.stringify(app.store.errors)))}return r=t.div({pbEvent:`collectionUpsertModal`,"html-data-collectionId":()=>a.originalCollection?.id,"html-data-collectionName":()=>a.originalCollection?.name,className:`modal collection-upsert-modal`,inert:()=>a.isSaving,onkeydown:e=>{if((e.ctrlKey||e.metaKey)&&e.code==`KeyS`){e.preventDefault();let n=document.activeElement;n?.blur(),s(!1),n?.focus()}},onbeforeopen:()=>(o(e),n.onbeforeopen?.(el)),onafteropen:e=>{n.onafteropen?.(e)},onbeforeclose:(e,r)=>r?n.onbeforeclose?.(e):a.isSaving?!1:a.hasChanges?new Promise(r=>{app.modals.confirm(`You have unsaved changes. Do you really want to discard them?`,()=>r(n.onbeforeclose?.(e)),()=>r(!1))}):n.onbeforeclose?.(e),onafterclose:e=>{n.onafterclose?.(e),e?.remove()},onmount:e=>{e._watchers?.forEach(e=>e?.unwatch()),e._watchers=[watch(()=>a.collection.type,(e,n)=>{if(!n||e==n||!app.store.collectionScaffolds[e])return;app.utils.deleteByPath(app.store.errors,`fields`);let r=JSON.parse(JSON.stringify(app.store.collectionScaffolds[e]));a.collection=Object.assign(structuredClone(r),JSON.parse(JSON.stringify(a.collection))),a.originalCollection=r,Zn(a.collection)}),watch(()=>a.collection.name,(n,r)=>{n=app.utils.slugify(n),a.collection.name=n,!(r===void 0||!n||n==r)&&(clearTimeout(e.__collectionRenameTimeoutId),e.__collectionRenameTimeoutId=setTimeout(()=>{a.collection.indexes=a.collection.indexes?.map(e=>app.utils.replaceIndexFields(e,{tableName:a.collection.name}))},150))})]},onunmount:e=>{clearTimeout(e?.__collectionRenameTimeoutId),e?._watchers?.forEach(e=>e?.unwatch())}},t.header({className:`modal-header isolated`},t.div({className:`grid sm`},t.div({className:`col-12 flex`},t.h6({className:`modal-title`},t.span(null,()=>a.isNew?`Create `:`Edit `),t.strong({hidden:()=>a.isNew,className:`txt-ellipsis collection-name`},()=>a.originalCollection?.name),t.span(null,` collection`)),t.div({className:`flex-fill`}),()=>{if(!app.utils.isEmpty(a.originalCollection?.id))return[t.button({type:`button`,className:`btn sm circle transparent`,title:`More options`,"html-popovertarget":i+`modal-header-dropdown`},t.i({className:`ri-more-line`,ariaHidden:!0})),t.div({id:i+`modal-header-dropdown`,className:`dropdown nowrap modal-header-dropdown`,popover:`auto`},t.button({type:`button`,className:`dropdown-item`,onclick:e=>{e.target.closest(`.dropdown`).hidePopover(),app.utils.copyToClipboard(JSON.stringify(a.originalCollection,null,2)),app.toasts.success(`Collection copied to clipboard!`)}},t.i({className:`ri-braces-line`,ariaHidden:!0}),t.span({className:`txt`},`Copy JSON`)),t.button({type:`button`,className:`dropdown-item`,onclick:e=>{e.target.closest(`.dropdown`).hidePopover(),a.hasChanges?app.modals.confirm(`You have unsaved changes. Do you really want to discard them?`,d,null,{yesButton:`Yes, discard`}):d()}},t.i({className:`ri-file-copy-line`,ariaHidden:!0}),t.span({className:`txt`},`Duplicate`)),t.hr(),()=>{if(a.collection.type!=`view`)return Qn(a,n)},()=>{if(!a.collection.system)return $n(a,n)})]}),t.div({className:`col-12`},t.div({className:`fields`},t.div({className:`field`},t.label({htmlFor:i+`col_name`,textContent:()=>`Name${a.collection?.system?` (system)`:``}`}),t.input({id:i+`col_name`,type:`text`,name:`name`,required:!0,spellcheck:!1,placeholder:`e.g. posts`,autofocus:()=>a.isNew,disabled:()=>!a.isNew&&a.collection?.system,value:()=>a.collection.name||``,onmount:e=>{e.addEventListener(`compositionend`,e=>{a.collection.name=e.target.value})},oninput:e=>{e.isComposing||(a.collection.name=e.target.value)}})),t.div({className:`field addon`},t.button({type:`button`,disabled:()=>!a.isNew,className:()=>`btn sm collection-type-select ${a.isNew?`outline`:`transparent`}`,"html-popovertarget":i+`col_type_dropdown`},t.span({className:`txt`},`Type: `,()=>app.utils.sentenize(a.collection.type,!1)||`N/A`),t.i({hidden:()=>!a.isNew,ariaHidden:!0,className:`ri-arrow-drop-down-line m-l-auto`})),t.div({id:i+`col_type_dropdown`,className:`dropdown nowrap collection-type-dropdown`,popover:`auto`},()=>{let e=[];for(let n of a.collectionTypeOptions)e.push(t.button({type:`button`,className:()=>`dropdown-item ${n.value==a.collection.type?`active`:``}`,onclick:e=>{e.target.closest(`.dropdown`).hidePopover(),a.collection.type=n.value}},t.i({ariaHidden:!0,className:app.collectionTypes[n.value]?.icon||app.utils.fallbackCollectionIcon}),t.span({className:`txt`},n.label||n.value)));return e})))),t.div({className:`col-12`},t.nav({className:`tabs-header equal-width`},()=>{let e=[],n=app.collectionTypes[a.collection.type]?.tabs||{};for(let r in n)e.push(t.button({type:`button`,disabled:()=>a.isSaving,className:()=>`tab-item ${a.activeTab==r?`active`:``}`,onclick:()=>f(r)},t.span({className:`txt`},r)));return e})))),t.div({className:`modal-content`},()=>app.collectionTypes[a.collection.type]?.tabs?.[a.activeTab]?.(a)),t.footer({className:`modal-footer`},t.button({type:`button`,className:`btn transparent m-r-auto`,disabled:()=>a.isSaving,onclick:()=>app.modals.close(r)},t.span({className:`txt`},`Close`)),()=>{let e=JSON.stringify(app.store.errors);if(!(e==``||e==`null`||e==`{}`||e==`[]`))return t.i({className:`ri-alert-line txt-danger`,ariaDescription:app.attrs.tooltip(()=>`Raw error:
`+e)})},t.div({className:`btns`},t.button({type:`button`,className:()=>`btn expanded-lg ${a.isSaving?`loading`:``}`,disabled:()=>!a.canSave,onclick:()=>s(!0)},t.span({className:`txt`},()=>a.isNew?`Create`:`Save changes`)),t.button({type:`button`,title:`Save options`,className:()=>`btn p-5`,disabled:()=>!a.canSave,"html-popovertarget":i+`save_options`},t.i({className:`ri-arrow-up-s-line`,ariaHidden:!0})),t.div({id:i+`save_options`,className:`dropdown nowrap`,popover:`auto`},t.button({type:`button`,className:`dropdown-item`,onclick:e=>{e.target.closest(`.dropdown`).hidePopover(),s(!1)}},t.span({className:`txt`},`Save and continue`),t.small({className:`txt-hint`},`(Ctrl+S)`)),t.hr(),t.button({type:`button`,className:`dropdown-item`,onclick:e=>{e.target.closest(`.dropdown`).hidePopover(),u()}},t.span({className:`txt`},`Reset form`)))))),r}function Zn(e){let n=JSON.parse(JSON.stringify(app.store.collectionScaffolds[e.type])),r=JSON.parse(JSON.stringify(e.fields))||[],i=r.filter(e=>!e.system);e.fields=n.fields||[];for(let n of r){if(!n.system)continue;let r=e.fields.find(e=>e.name==n.name);r&&Object.assign(r,n)}for(let n of i)e.fields.push(n);if(e.indexes=e.indexes||[],e.indexes.length){let r=n?.indexes||[];indexesLoop:for(let n=e.indexes.length-1;n>=0;n--){let i=app.utils.parseIndex(e.indexes[n]),a=i.indexName.toLowerCase();for(let i of r)if(a==app.utils.parseIndex(i).indexName.toLowerCase()){e.indexes.splice(n,1);continue indexesLoop}for(let r of i.columns)if(!e.fields.find(e=>e.name.toLowerCase()==r.name.toLowerCase())){e.indexes.splice(n,1);continue indexesLoop}}}app.utils.mergeUnique(e.indexes,n.indexes)}function Qn(e,n){let r=`truncate_`+app.utils.randomString(),i=store({isSubmitting:!1,nameConfirm:``});async function a(){if(i.isSubmitting||!e.originalCollection?.name||e.originalCollection.name!=i.nameConfirm)return!1;i.isSubmitting=!0;try{return await app.pb.collections.truncate(e.originalCollection.name),n.ontruncate?.(JSON.parse(JSON.stringify(e.originalCollection))),app.toasts.success(`Successfully truncated collection "${e.originalCollection.name}".`),i.isSubmitting=!1,!0}catch(e){i.isSubmitting=!1,app.checkApiError(e)}return!1}return t.button({type:`button`,className:`dropdown-item txt-danger`,disabled:()=>i.isSubmitting,onclick:n=>{n.target.closest(`.dropdown`).hidePopover(),app.modals.confirm(t.div(null,t.h6({className:`block txt-center`},`Do you really want to delete all records of the collection?`),t.div({className:`confirm-collection-label txt-bold m-t-sm m-b-sm`},`Type the collection name `,t.div({className:`label`},()=>e.originalCollection.name,app.components.copyButton(()=>e.originalCollection?.name)),` to confirm:`),t.div({className:`field`},t.label({htmlFor:r+`.confirm_name`},`Collection name`),t.input({id:r+`.confirm_name`,type:`text`,required:!0,pattern:()=>RegExp.escape(e.originalCollection.name),value:()=>i.nameConfirm,oninput:e=>i.nameConfirm=e.target.value}))),async()=>{if(document.getElementById(r+`.confirm_name`)?.reportValidity(),!await a())return!1;app.modals.close(n.target.closest(`.modal`))},()=>{i.nameConfirm=``})}},t.i({className:`ri-eraser-line`,ariaHidden:!0}),t.span({className:`txt`},`Truncate`))}function $n(e,n){let r=`delete_`+app.utils.randomString(),i=store({isSubmitting:!1,nameConfirm:``});async function a(){if(i.isSubmitting||!e.originalCollection?.name||e.originalCollection.name!=i.nameConfirm)return!1;i.isSubmitting=!0;try{return await app.pb.collections.delete(e.originalCollection.name),n.ondelete?.(JSON.parse(JSON.stringify(e.originalCollection))),app.utils.removeByKey(app.store.collections,`id`,e.originalCollection.id),app.toasts.success(`Successfully deleted collection "${e.originalCollection.name}".`),i.isSubmitting=!1,!0}catch(e){i.isSubmitting=!1,app.checkApiError(e)}return!1}return t.button({type:`button`,className:`dropdown-item txt-danger`,disabled:()=>i.isSubmitting,onclick:n=>{n.target.closest(`.dropdown`).hidePopover();let o=n.target.closest(`.modal`);app.modals.confirm(t.div({className:`block`},t.h6({className:`block txt-center`},()=>e.originalCollection.type==`view`?`Do you really want to delete the selected collection?`:`Do you really want to delete the selected collection and all its records`),t.div({className:`confirm-collection-label txt-bold m-t-sm m-b-sm`},`Type the collection name `,t.div({className:`label`},()=>e.originalCollection.name,app.components.copyButton(()=>e.originalCollection?.name)),` to confirm:`),t.div({className:`field`},t.label({htmlFor:r+`.confirm_name`},`Collection name`),t.input({id:r+`.confirm_name`,type:`text`,required:!0,pattern:()=>RegExp.escape(e.originalCollection.name),value:()=>i.nameConfirm,oninput:e=>i.nameConfirm=e.target.value}))),async()=>{if(document.getElementById(r+`.confirm_name`)?.reportValidity(),!await a())return!1;app.modals.close(o)},()=>{i.nameConfirm=``})}},t.i({className:`ri-delete-bin-7-line`,ariaHidden:!0}),t.span({className:`txt`},`Delete`))}window.app=window.app||{},window.app.components=window.app.components||{},window.app.components.addCollectionFieldButton=function(e){let n=`new_field_`+app.utils.randomString();function r(n){let r={id:``,name:i(n),type:n,system:!1,hidden:!1,presentable:!1,required:!1,__focus:!0};e.fields=e.fields||[];let a=e.fields.findLastIndex(e=>e.type!=`autodate`);r.type!=`autodate`&&a>=0?e.fields.splice(a+1,0,r):e.fields.push(r)}function i(e=``){let n=e,r=2,i=e.match(/\d+$/)?.[0]||``,o=i?e.substring(0,e.length-i.length):e;for(;a(n);)n=o+((i<<0)+r),r++;return n}function a(n){return!!e.fields?.find(e=>e.name.toLowerCase()===n.toLowerCase())}return t.div({className:`new-collection-field-btn-wrapper`},t.button({type:`button`,className:`btn block outline`,"html-popovertarget":n+`_dropdown`},t.i({className:`ri-add-line`,ariaHidden:!0}),t.span({className:`txt`},`New field`)),t.div({id:n+`_dropdown`,className:`dropdown field-types-dropdown`,popover:`auto`},()=>{let e=[];for(let n in app.fieldTypes){if(n==`password`)continue;let i=app.fieldTypes[n];i.settings&&e.push(t.button({type:`button`,className:`dropdown-item`,onclick:e=>{e.target.closest(`.dropdown`)?.hidePopover(),r(n)}},t.i({className:i.icon||app.utils.fallbackFieldIcon,ariaHidden:!0}),t.span({className:`txt`},i.label||n)))}return e}))},window.app=window.app||{},window.app.utils=window.app.utils||{};var er={maxKeys:30,requestKeys:!0,collectionJoinKeys:!0};window.app.utils.collectionAutocompleteKeys=function(e,n,r={}){if(!e||!n||!app.store.collections?.length)return[];r=Object.assign({},er,r);let i=nr(n,app.store.collections,e).sort(tr);if(r.requestKeys){let r=rr(n,app.store.collections,e).sort(tr);for(let e of r)i.push(e)}if(r.collectionJoinKeys){let e=ir(n,app.store.collections).sort(tr);for(let n of e)i.push(n)}return i.length>r.maxKeys?i.slice(0,r.maxKeys):i};function tr(e,n){return e.length-n.length}function nr(e,n,r,i=``,a=0){if(!e||a>=4||(typeof r==`string`&&(r=n.find(e=>e.name==r||e.id==r)),!r))return[];e=e.toLowerCase();let o=r.type==`auth`,s=app.utils.getAllCollectionIdentifiers(r,i).filter(n=>n.toLowerCase().includes(e)),c=r.fields||[];for(let r of c){if(r.type==`password`||o&&r.name==`tokenKey`)continue;let c=[];if(i==`@request.body.`&&(c.push(i+r.name+`:changed`),c.push(i+r.name+`:isset`)),typeof app.fieldTypes[r.type]?.filterModifiers==`function`){let e=app.fieldTypes[r.type]?.filterModifiers(r)||[];for(let n of e)c.push(i+r.name+`:`+n)}for(let n of c)n.toLowerCase().includes(e)&&s.push(n);if(r.type==`relation`&&r.collectionId){let o=nr(e,n,r.collectionId,i+r.name+`.`,a+1);for(let e of o)s.push(e)}}for(let o of n){let c=o.fields||[];for(let l of c){if(l.type!=`relation`||l.collectionId!=r.id)continue;let c=i+o.name+`_via_`+l.name,u=nr(e,n,o,c+`.`,a+2);for(let e of u)s.push(e)}}return s}function rr(e,n,r){if(!e)return[];e=e.toLowerCase();let i=[];for(let n of[`@request.context`,`@request.method`,`@request.query.`,`@request.body.`,`@request.headers.`,`@request.auth.collectionId`,`@request.auth.collectionName`])n.toLowerCase().includes(e)&&i.push(n);let a=n.filter(e=>e.type===`auth`);for(let r of a){if(r.system)continue;let a=nr(e,n,r,`@request.auth.`);for(let e of a)app.utils.pushUnique(i,e)}if(typeof r==`string`&&(r=n.find(e=>e.name==r||e.id==r)),!r)return i;let o=nr(e,n,r,`@request.body.`);for(let e of o)i.push(e);return i}function ir(e,n){let r=[],i=`@collection.`,a,o;if(12<e.length?(a=e,o=i):(a=i,o=e),!a.includes(o))return r;for(let a of n){if(a.system)continue;let o=nr(e,n,a,i+a.name+`.`);for(let e of o)r.push(e)}return r}window.app=window.app||{},window.app.modals=window.app.modals||{},window.app.modals.openProviderPicker=function(e={exclude:[],onbeforeopen:null,onafteropen:null,onbeforeclose:null,onafterclose:null,onselect:null}){let n=ar(e);n&&(document.body.appendChild(n),app.modals.open(n))};function ar(e={}){let n,r=store({searchTerm:``,get filteredProviders(){let n=r.searchTerm.trim().toLowerCase().replaceAll(` `,``);return app.store.oauth2Providers.filter(r=>!e.exclude?.includes(r.name)&&(r.name+r.displayName).toLowerCase().replaceAll(` `,``).includes(n))}});function i(){r.searchTerm=``}return n=t.div({pbEvent:`providerPickerModal`,className:`modal provider-picker-modal`,onbeforeopen:n=>e.onbeforeopen?.(n),onafteropen:n=>{e.onafteropen?.(n)},onbeforeclose:n=>e.onbeforeclose?.(n),onafterclose:n=>{e.onafterclose?.(n),n?.remove()}},t.header({className:`modal-header`},t.h6({className:`modal-title`},t.span({className:`txt`},`Select OAuth2 provider`))),t.div({className:`modal-content`},t.div({className:`grid sm`},t.div({className:`col-12`},t.div({className:`fields searchbar`},t.div({className:`field`},t.input({placeholder:`Search...`,className:`p-l-20`,value:()=>r.searchTerm,oninput:e=>r.searchTerm=e.target.value})),()=>{if(r.searchTerm)return t.div({rid:`search-ctrls`,className:`field addon p-r-5`},t.button({type:`button`,className:`btn sm pill secondary transparent`,onclick:()=>i()},`Clear`))})),()=>{if(!(app.store.isLoadingOAuth2Providers||r.filteredProviders.length))return t.div({rid:`notfound`,className:`block txt-center txt-hint`},t.p(null,`No providers found.`),t.button({type:`button`,className:`btn sm secondary`,textContent:`Clear search`,onclick:()=>i()}))},()=>app.store.isLoadingOAuth2Providers?t.div({className:`col-12 txt-center`},t.span({className:`loader active`})):r.filteredProviders.map(r=>t.div({className:`col-sm-6`},t.button({type:`button`,className:`provider-card handle`,onclick:()=>{app.modals.close(n),e.onselect?.(r)}},t.figure({className:`provider-logo`},()=>r.logo?t.img({src:`data:image/svg+xml;base64,`+btoa(r.logo),alt:r.name+` logo`}):t.i({className:app.utils.fallbackProviderIcon,ariaHidden:!0})),t.div({className:`content`},t.span({className:`primadry-txt`},r.displayName||r.name),t.span({className:`secondary-txt`},r.name))))))),t.footer({className:`modal-footer gap-base`},t.button({type:`button`,className:`btn transparent m-r-auto`,onclick:()=>app.modals.close(n)},t.span({className:`txt`},`Close`)))),n}window.app=window.app||{},window.app.modals=window.app.modals||{},window.app.modals.openProviderSettings=function(e={},n={namePrefix:``,onbeforeopen:null,onafteropen:null,onbeforeclose:null,onafterclose:null,onsubmit:null}){let r=or(e,n);r&&(document.body.appendChild(r),app.modals.open(r))};function or(e,n){let r,i=`provider_`+app.utils.randomString();e||={};let a=!e.clientId,o=JSON.stringify(e),s=app.store.oauth2Providers?.find(n=>n.name==e.name);if(!s){console.warn(`missing provider for config`,e);return}let c=store({config:JSON.parse(o),get hasChanges(){return o!=JSON.stringify(c.config)},onsubmit:(e,n)=>{}});function l(){c.hasChanges&&(n.onsubmit?.(s,JSON.parse(JSON.stringify(c.config))),app.modals.close(r))}return r=t.div({pbEvent:`providerSettingsModal`,className:`modal provider-settings-modal`,onbeforeopen:e=>n.onbeforeopen?.(e),onafteropen:e=>{n.onafteropen?.(e),setTimeout(()=>{app.store.errors?.oauth2&&(app.store.errors.oauth2=JSON.parse(JSON.stringify(app.store.errors.oauth2)))},0)},onbeforeclose:e=>n.onbeforeclose?.(e),onafterclose:e=>{n.onafterclose?.(e),e?.remove()}},t.header({className:`modal-header`},t.figure({className:`provider-logo`},()=>s.logo?t.img({src:`data:image/svg+xml;base64,`+btoa(s.logo),alt:s.name+` logo`}):t.i({className:app.utils.fallbackProviderIcon,ariaHidden:!0})),t.h6({className:`modal-title`},e.displayName||s.displayName||s.name,t.small({className:`txt-hint`},` (`,e.name,`)`))),t.form({pbEvent:`providerSettingsForm`,id:i+`form`,className:`modal-content`,onsubmit:e=>{e.preventDefault(),l()}},t.div({className:`grid`},t.div({className:`col-12`},t.div({className:`field`},t.label({htmlFor:i+`.clientId`,textContent:`Client ID`}),t.input({type:`text`,required:!0,id:i+`.clientId`,autocomplete:`off`,name:()=>n.namePrefix+`.clientId`,value:()=>c.config.clientId||``,oninput:e=>c.config.clientId=e.target.value.trim()}))),t.div({className:`col-12`},t.div({className:`field`},t.label({htmlFor:i+`.clientSecret`,textContent:`Client secret`}),t.input({type:`password`,id:i+`.clientSecret`,autocomplete:`new-password`,required:()=>a||c.config.clientSecret!==void 0,name:()=>n.namePrefix+`.clientSecret`,value:()=>c.config.clientSecret||``,oninput:e=>c.config.clientSecret=e.target.value.trim(),onkeyup:e=>{e.key==`Backspace`&&c.config.clientSecret===void 0&&(c.config.clientSecret=``)},placeholder:()=>a||c.config.clientSecret!==void 0?``:`* * * * * *`}))),()=>{if(typeof app.oauth2?.[s.name]==`function`)return t.div({className:`col-12`},app.oauth2[s.name](s,n.namePrefix,c))})),t.footer({className:`modal-footer`},t.button({type:`button`,className:`btn transparent m-r-auto`,onclick:()=>app.modals.close(r)},t.span({className:`txt`},`Close`)),t.button({"html-form":i+`form`,type:`submit`,className:`btn`,disabled:()=>!c.hasChanges},t.span({className:`txt`},`Set provider config`)))),r}window.app=window.app||{},window.app.modals=window.app.modals||{},window.app.modals.openCollectionChangesConfirmation=async function(e,n,r,i){let a=store({isLoadingConflictingOIDCProviders:!1,conflictingOIDCProviders:[],get isCollectionRenamed(){return e?.name!=n?.name},get isNewCollectionAuth(){return n?.type===`auth`},get isNewCollectionView(){return n?.type===`view`},get renamedFields(){return a.isNewCollectionView?[]:n?.fields?.filter?.(n=>{let r;return n.id&&!n[`@toDelete`]&&(r=e.fields?.find?.(e=>e.id==n.id)),r&&r.name!=n.name})||[]},get deletedFields(){return a.isNewCollectionView?[]:n?.fields?.filter?.(e=>e.id&&e[`@toDelete`])||[]},get multipleToSingleFields(){return a.isNewCollectionView?[]:n?.fields?.filter?.(n=>{let r=e?.fields?.find?.(e=>e.id==n.id);if(!r||r.maxSelect===void 0)return!1;let i=r.maxSelect||1,a=n.maxSelect||1;return i>1&&a==1})||[]},get changedRules(){if(window.location.protocol!=`https:`)return[];let r=[],i=[`listRule`,`viewRule`];a.isNewCollectionView||i.push(`createRule`,`updateRule`,`deleteRule`),a.isNewCollectionAuth&&i.push(`manageRule`,`authRule`);let o,s;for(let a of i)o=e?.[a],s=n?.[a],o!==s&&r.push({prop:a,oldRule:o,newRule:s});return r},get needConfirmation(){return!app.utils.isEmpty(e?.id)&&(a.isCollectionRenamed||a.renamedFields.length||a.deletedFields.length||a.multipleToSingleFields.length||a.changedRules.length||a.conflictingOIDCProviders.length)}}),o=[`oidc`,`oidc2`,`oidc3`];async function s(){if(!(app.utils.isEmpty(e?.id)||!a.isNewCollectionAuth)){a.isLoadingConflictingOIDCProviders=!0;try{a.conflictingOIDCProviders=[];for(let r of o){let i=e?.oauth2?.providers?.find?.(e=>e.name==r),o=n?.oauth2?.providers?.find?.(e=>e.name==r);if(!i||!o)continue;let s=new URL(i.authURL).host,c=new URL(o.authURL).host;s!=c&&await app.pb.collection(`_externalAuths`).getFirstListItem(app.pb.filter(`collectionRef={:collectionId} && provider={:provider}`,{collectionId:n?.id,provider:r}),{requestKey:null})&&a.conflictingOIDCProviders.push({name:r,oldHost:s,newHost:c})}a.isLoadingConflictingOIDCProviders=!1}catch(e){e.isAbort&&(a.isLoadingConflictingOIDCProviders=!1,app.checkApiError(e))}}}if(await s(),!a.needConfirmation)return r();app.modals.confirm(t.div({className:`dangerous-collection-changes-list`},t.h5({className:`block txt-center m-b-base`},`Do you really want to save the collection changes?`),()=>{if(!(!a.isCollectionRenamed&&!a.deletedFields.length&&!a.renamedFields.length))return t.div({className:`alert warning m-b-base`},t.p(null,`If the collection participate in another collection rule, filter or view query, you'll have to update it manually!`),()=>{if(a.deletedFields.length)return t.p(null,`All data associated with the removed fields will be permanently deleted!`)})},()=>{if(a.isCollectionRenamed)return t.ul({className:`collection-changes-list changes-renamed-collection`},t.li({className:`list-item`},`Renamed collection `,t.strong({className:`label warning`},e?.name),t.i({className:`ri-arrow-right-line txt-sm`,ariaHidden:!0}),t.strong({className:`label success`},n?.name||`N/A`)))},()=>{if(a.renamedFields.length)return t.ul({className:`collection-changes-list changes-renamed-fields`},()=>a.renamedFields.map(n=>{let r=e?.fields?.find?.(e=>e.id==n.id);return t.li({className:`list-item`},`Renamed field `,t.strong({className:`label warning`},r?.name),t.i({className:`ri-arrow-right-line txt-sm`,ariaHidden:!0}),t.strong({className:`label success`},n.name||`N/A`))}))},()=>{if(a.deletedFields.length)return t.ul({className:`collection-changes-list changes-deleted-fields`},()=>a.deletedFields.map(e=>t.li({className:`list-item`},`Deleted field `,t.strong({className:`label danger`},e.name||`N/A`))))},()=>{if(a.multipleToSingleFields.length)return t.ul({className:`collection-changes-list changes-multiple-to-single-fields`},()=>a.multipleToSingleFields.map(e=>t.li({className:`list-item`},`Multiple to single value conversion of field `,t.strong({className:`label warning`},e.name||e.id),t.em({className:`txt-sm`},` (will keep only the last array item)`))))},()=>{if(a.changedRules.length)return t.ul({className:`collection-changes-list changes-api-rules`},()=>a.changedRules.map(e=>t.li({className:`list-item`},t.div({className:`content`},t.span({className:`txt`},`Changed API rule for `),t.code(null,e.prop)),t.small({className:`txt-bold`},`Old:`),t.div({className:`rule-content old-rule`},e.oldRule===null?`null (superusers only)`:e.oldRule||`""`),t.small({className:`txt-bold`},`New:`),t.div({className:`rule-content new-rule`},e.newRule===null?`null (superusers only)`:e.newRule||`""`))))},()=>{if(a.conflictingOIDCProviders.length)return t.ul({className:`collection-changes-list changes-api-rules`},()=>a.conflictingOIDCProviders.map(e=>t.li({className:`list-item`},`Changed OIDC `,e.name,` host `,t.strong({className:`label warning`},e.oldHost),t.i({className:`ri-arrow-right-line txt-sm`,ariaHidden:!0}),t.strong({className:`label success`},e.newHost),t.br(),t.span({className:`txt-hint`},`If the old and new OIDC configuration is not for the same provider consider deleting`,` all old _externalAuths records associated to the current collection and provider,`,` otherwise it may result in account linking errors.`),` `,t.a({rel:`noopenener noreferrer`,target:`_blank`,href:()=>`#/collections?collection=_externalAuths&filter=collectionRef%3D%22${n?.id}%22+%26%26+provider%3D%22${e.name}%22`,textContent:`Review existing _externalAuths records`}))))}),r,i,{className:`collection-changes-confirm-modal`})},window.app=window.app||{},window.app.modals=window.app.modals||{},window.app.modals.openCollectionsOverview=function(e={onbeforeopen:null,onafteropen:null,onbeforeclose:null,onafterclose:null}){let n=sr(e);n&&(document.body.appendChild(n),app.modals.open(n))};function sr(e={}){let n=`overview_modal_`+app.utils.randomString(),r={"Fields and relations":cr,Rules:lr},i=store({showSystemCollections:!1,activeTab:Object.keys(r)[0],get collections(){return i.showSystemCollections?app.store.collections:app.store.collections.filter(e=>!e.system)}}),a=t.div({pbEvent:`collectionsOverviewModal`,className:`modal popup collections-overview-modal`,onbeforeopen:n=>e.onbeforeopen?.(n),onafteropen:n=>{e.onafteropen?.(n)},onbeforeclose:n=>e.onbeforeclose?.(n),onafterclose:n=>{e.onafterclose?.(n),n?.remove()}},t.header({className:`modal-header isolated`},t.div({className:`grid sm`},t.div({className:`col-12`},t.div({className:`flex`},t.h6({className:`modal-title`},`Collections overview`),t.div({className:`flex-fill`}),t.div({className:`field`},t.input({id:n+`.showSystemCollections`,type:`checkbox`,className:`sm switch`,checked:()=>i.showSystemCollections,onchange:e=>i.showSystemCollections=e.target.checked}),t.label({htmlFor:n+`.showSystemCollections`},`System collections`)),t.button({type:`button`,className:`btn sm secondary transparent circle modal-close-btn`,title:`Close`,onclick:()=>app.modals.close(a)},t.i({className:`ri-close-line`,ariaHidden:!0})))),t.div({className:`col-12`},t.div({className:`tabs-header equal-width`},()=>{let e=[];for(let n in r)e.push(t.button({type:`button`,className:()=>`tab-item ${i.activeTab==n?`active`:``}`,onclick:()=>i.activeTab=n,textContent:n}));return e})))),()=>r[i.activeTab]?.(i));return a}function cr(e){return t.div({className:`modal-content erd-tab`},app.components.erd({collections:()=>{let n,r;function i(e,i){return n=e.name.startsWith(`_`),r=i.name.startsWith(`_`),e.system&&!i.system||n&&!r?1:!e.system&&i.system||!n&&r?-1:0}return e.collections.slice().sort(i)}}))}function lr(e){let n=[{value:`listRule`,label:`List/Search rule`},{value:`viewRule`,label:`View rule`},{value:`createRule`,label:`Create rule`,filter:e=>e.type!=`view`},{value:`updateRule`,label:`Update rule`,filter:e=>e.type!=`view`},{value:`deleteRule`,label:`Delete rule`,filter:e=>e.type!=`view`},{value:`authRule`,label:`Auth rule`,filter:e=>e.type==`auth`},{value:`manageRule`,label:`Manage rule`,filter:e=>e.type==`auth`},{value:`mfaRule`,label:`MFA rule`,emptyLabel:t.span({className:`label info`},`Enabled for everyone`),rule:e=>e.mfa?.rule,filter:e=>e.mfa?.enabled&&e.type==`auth`}],r=store({activeRuleOption:n[0],get activeCollections(){return r.activeRuleOption.filter?e.collections.filter(e=>r.activeRuleOption.filter(e)):e.collections}});return t.div({className:`modal-content rules-tab`},t.table({className:`rules-table`},t.thead({className:`sticky`},t.tr(null,t.td({colSpan:99,className:`col-rule-btns`},t.div({className:`rule-btns`},()=>n.map(e=>t.button({type:`button`,className:()=>`btn sm ${r.activeRuleOption?.value==e.value?`outline`:`transparent secondary`}`,textContent:()=>e.label,onclick:()=>r.activeRuleOption=e})))))),t.tbody(null,()=>r.activeCollections.length?r.activeCollections.map(e=>t.tr(null,t.th({className:`min-width`},t.div({className:`inline-flex gap-10`},t.i({ariaHidden:!0,className:()=>app.collectionTypes[e.type]?.icon||app.utils.fallbackCollectionIcon}),t.span({className:`txt collection-name`,title:()=>e.name,textContent:()=>e.name}))),()=>{let n;return n=r.activeRuleOption.rule?r.activeRuleOption.rule(e):e[r.activeRuleOption.value],t.td({style:`vertical-align: top`},()=>n===null?r.activeRuleOption.nullLabel?r.activeRuleOption.nullLabel:t.span({className:`label success`},`Superusers only`):n===``?r.activeRuleOption.emptyLabel?r.activeRuleOption.emptyLabel:t.span({className:`label info`},`Public`):app.components.codeBlock({language:`pbrule`,value:n}))})):t.tr(null,t.td({colSpan:99,className:`txt-hint`},t.p(null,`No collections with the selected rule.`))))))}window.app=window.app||{},window.app.oauth2=window.app.oauth2||{},window.app.oauth2.microsoft=function(e,n,r){let i=`microsoft_`+app.utils.randomString();return t.div({pbEvent:`oauth2MicrosoftOptions`,className:`oauth2-microsoft-options`},t.p({className:`txt-bold`},`Azure AD endpoints`),t.div({className:`grid`},t.div({className:`col-12`},t.div({className:`field`},t.label({htmlFor:i+`.authURL`},`Auth URL`),t.input({id:i+`.authURL`,name:n+`.authURL`,type:`url`,required:!0,value:()=>r.config.authURL||``,oninput:e=>r.config.authURL=e.target.value})),t.div({className:`field-help`},`Ex. https://login.microsoftonline.com/YOUR_DIRECTORY_TENANT_ID/oauth2/v2.0/authorize`)),t.div({className:`col-12`},t.div({className:`field`},t.label({htmlFor:i+`.tokenURL`},`Token URL`),t.input({id:i+`.tokenURL`,name:n+`.tokenURL`,type:`url`,required:!0,value:()=>r.config.tokenURL||``,oninput:e=>r.config.tokenURL=e.target.value})),t.div({className:`field-help`},`Ex. https://login.microsoftonline.com/YOUR_DIRECTORY_TENANT_ID/oauth2/v2.0/token`))))},window.app=window.app||{},window.app.oauth2=window.app.oauth2||{},window.app.oauth2.lark=function(e,n,r){let i=`lark_`+app.utils.randomString(),a=[{label:`Feishu (China)`,value:`feishu.cn`},{label:`Lark (International)`,value:`larksuite.com`}],o=store({domain:r.config.authURL?.includes(a[1].value)?a[1].value:a[0].value}),s=[watch(()=>o.domain,e=>{e&&(r.config.authURL=`https://accounts.${e}/open-apis/authen/v1/authorize`,r.config.tokenURL=`https://open.${e}/open-apis/authen/v2/oauth/token`,r.config.userInfoURL=`https://open.${e}/open-apis/authen/v1/user_info`)})];return t.div({pbEvent:`oauth2LarkOptions`,className:`oauth2-lark-options`,onunmount:()=>{s.forEach(e=>e?.unwatch())}},t.div({className:`grid`},t.div({className:`col-12`},t.div({className:`field`},t.label({htmlFor:i+`.site`},`Site`),app.components.select({options:a,required:!0,value:()=>o.domain||``,onchange:e=>{o.domain=e?.[0]?.value}}))),t.div({className:`col-12`},t.div({className:`alert info`},`Note that the Lark user's `,t.strong(null,`Union ID`),` will be used for the association with the PocketBase user (see `,t.a({href:`https://open.feishu.cn/document/platform-overveiw/basic-concepts/user-identity-introduction/introduction#3f2d4b63`,target:`_blank`,rel:`noopener noreferrer`,textContent:`Different Types of Lark User IDs`}),`).`))))},window.app=window.app||{},window.app.components=window.app.components||{},window.app.components.oauth2EndpointFields=function(e,n,r,i={}){let a=`endpoints_`+app.utils.randomString(),o=store({required:!0,title:`Provider endpoints`}),s=app.utils.extendStore(o,i);return t.div({pbEvent:`oauth2Endpoints`,className:`oauth2-endpoints`,onunmount:()=>{s.forEach(e=>e?.unwatch())}},t.p({className:`txt-bold`},e=>(typeof o.title==`function`&&o.title(e),o.title)),t.div({className:`grid`},t.div({className:`col-12`},t.div({className:`field`},t.label({htmlFor:a+`.authURL`},`Auth URL`),t.input({id:a+`.authURL`,name:n+`.authURL`,type:`url`,required:()=>!!o.required,value:()=>r.config.authURL||``,oninput:e=>r.config.authURL=e.target.value}))),t.div({className:`col-12`},t.div({className:`field`},t.label({htmlFor:a+`.tokenURL`},`Token URL`),t.input({id:a+`.tokenURL`,name:n+`.tokenURL`,type:`url`,required:()=>!!o.required,value:()=>r.config.tokenURL||``,oninput:e=>r.config.tokenURL=e.target.value}))),t.div({className:`col-12`},t.div({className:`field`},t.label({htmlFor:a+`.userInfoURL`},`User info URL`),t.input({id:a+`.userInfoURL`,name:n+`.userInfoURL`,type:`url`,required:()=>!!o.required,value:()=>r.config.userInfoURL||``,oninput:e=>r.config.userInfoURL=e.target.value})))))},window.app.oauth2=window.app.oauth2||{},window.app.oauth2.gitlab=function(e,n,r){return app.components.oauth2EndpointFields(e,n,r,{required:!1,title:`Self-hosted endpoints (optional)`})},window.app.oauth2.gitea=function(e,n,r){return app.components.oauth2EndpointFields(e,n,r,{required:!1,title:`Self-hosted endpoints (optional)`})},window.app.oauth2.mailcow=function(e,n,r){return app.components.oauth2EndpointFields(e,n,r)},window.app=window.app||{},window.app.oauth2=window.app.oauth2||{},window.app.oauth2.oidc=function(e,n,r){let i=`oidc_`+app.utils.randomString(),a=[{label:`User info URL`,value:!0},{label:`ID Token`,value:!1}],o=store({useUserInfoUrl:!1}),s=[];return t.div({pbEvent:`oauth2OIDCOptions`,className:`oauth2-oidc-options`,onmount:e=>{r.config.displayName===void 0&&(r.config.displayName=`OIDC`),r.config.pkce===void 0&&(r.config.pkce=!0),(r.config.userInfoURL||!r.config.extra)&&(o.useUserInfoUrl=!0),s.push(watch(()=>o.useUserInfoUrl,(e,n)=>{e?r.config.extra=null:(r.config.userInfoURL=``,r.config.extra=r.config.extra||{})}))},onunmount:()=>{s.forEach(e=>e?.unwatch())}},t.div({className:`grid`},t.div({className:`col-12`},t.div({className:`field`},t.label({htmlFor:i+`.displayName`},`Display name`),t.input({id:i+`.displayName`,name:n+`.displayName`,type:`text`,required:!0,value:()=>r.config.displayName||``,oninput:e=>r.config.displayName=e.target.value}))),t.div({className:`col-12`},t.p({className:`txt-bold`},`Endpoints`),t.div({className:`field`},t.label({htmlFor:i+`.authURL`},`Auth URL`),t.input({id:i+`.authURL`,name:n+`.authURL`,type:`url`,required:!0,value:()=>r.config.authURL||``,oninput:e=>r.config.authURL=e.target.value}))),t.div({className:`col-12`},t.div({className:`field`},t.label({htmlFor:i+`.tokenURL`},`Token URL`),t.input({id:i+`.tokenURL`,name:n+`.tokenURL`,type:`url`,required:!0,value:()=>r.config.tokenURL||``,oninput:e=>r.config.tokenURL=e.target.value}))),t.div({className:`col-12`},t.div({className:`field`},t.label({htmlFor:i+`.userInfoSelect`},`Fetch user info from`),app.components.select({id:i+`.userInfoSelect`,required:!0,options:a,value:()=>o.useUserInfoUrl,onchange:e=>o.useUserInfoUrl=e?.[0]?.value})),t.div({className:`oidc-userinfo-options m-t-10`},()=>o.useUserInfoUrl?t.div({className:`field`},t.label({htmlFor:i+`.userInfoURL`},`User info URL`),t.input({id:i+`.userInfoURL`,name:n+`.userInfoURL`,type:`url`,required:!0,value:()=>r.config.userInfoURL||``,oninput:e=>r.config.userInfoURL=e.target.value})):t.div({className:`grid sm`},t.div({className:`col-12 txt-hint txt-sm`},t.em(null,`Both fields are considered optional because the parsed `,t.code(null,`id_token`),` is a direct result of the TLS code->token exchange server response.`)),t.div({className:`col-12`},t.div({className:`field`},t.label({htmlFor:i+`.extra.jwksURL`},t.span({className:`txt`},`JWKS verification URL`),t.i({className:`ri-information-line link-hint`,ariaDescription:app.attrs.tooltip(`URL to the public token verification keys.`)})),t.input({id:i+`.extra.jwksURL`,name:n+`.extra.jwksURL`,type:`url`,value:()=>r.config.extra?.jwksURL||``,oninput:e=>{r.config.extra=r.config.extra||{},r.config.extra.jwksURL=e.target.value}}))),t.div({className:`col-12`},t.div({className:`field`},t.label({htmlFor:i+`.extra.issuers`},t.span({className:`txt`},`Issuers`),t.i({className:`ri-information-line link-hint`,ariaDescription:app.attrs.tooltip(`Comma separated list of accepted values for the iss token claim validation.`)})),t.input({id:i+`.extra.issuers`,name:n+`.extra.issuers`,type:`text`,value:()=>app.utils.joinNonEmpty(r.config.extra?.issuers),oninput:e=>{let n=app.utils.splitNonEmpty(e.target.value,`,`),i=app.utils.joinNonEmpty(n);app.utils.joinNonEmpty(r.config.extra?.issuers)!=i&&(r.config.extra=r.config.extra||{},r.config.extra.issuers=n)}})))))),t.div({className:`col-12`},t.div({className:`field`},t.input({id:i+`.pkce`,name:n+`.pkce`,type:`checkbox`,checked:()=>r.config.pkce||!1,onchange:e=>r.config.pkce=e.target.checked}),t.label({htmlFor:i+`.pkce`},t.span({className:`txt`,textContent:`Support PKCE`}),t.i({className:`ri-information-line link-hint`,ariaDescription:app.attrs.tooltip(`Usually it should be safe to be always enabled as most providers will just ignore the extra query parameters if they don't support PKCE.`)}))))))},window.app=window.app||{},window.app.oauth2=window.app.oauth2||{},window.app.oauth2.apple=function(e,n,r){return``+app.utils.randomString(),t.div({pbEvent:`oauth2AppleOptions`,className:`oauth2-apple-options`},t.button({type:`button`,className:`btn sm secondary`,onclick:()=>{app.modals.openAppleSecretGenerator({ongenerate:e=>{r.config.clientSecret=e}})}},t.i({className:`ri-key-line`,ariaHidden:!0}),t.span({className:`txt`},`Generate secret`)))},window.app.modals=window.app.modals||{},window.app.modals.openAppleSecretGenerator=function(e={onbeforeopen:null,onafteropen:null,onbeforeclose:null,onafterclose:null,ongenerate:null}){let n=ur(e);n&&(document.body.appendChild(n),app.modals.open(n))};function ur(e={}){let n,r=`secret_generator_`+app.utils.randomString(),i=15777e3,a=store({clientId:``,teamId:``,keyId:``,privateKey:``,duration:i,isSubmitting:!1});async function o(){a.isSubmitting=!0;try{let r=await app.pb.settings.generateAppleClientSecret(a.clientId,a.teamId,a.keyId,a.privateKey.trim(),a.duration);a.isSubmitting=!1,app.toasts.success(`Successfully generated client secret.`),e.ongenerate?.(r.secret),app.modals.close(n)}catch(e){e.isAbort||(app.checkApiError(e),a.isSubmitting=!1)}}return n=t.div({pbEvent:`appleSecretGeneratorModal`,className:`modal popup apple-secret-generator-modal`,onbeforeopen:n=>e.onbeforeopen?.(n),onafteropen:n=>{e.onafteropen?.(n)},onbeforeclose:n=>e.onbeforeclose?.(n),onafterclose:n=>{e.onafterclose?.(n),n?.remove()}},t.header({className:`modal-header`},t.h5({className:`m-auto`},`Generate Apple client secret`)),t.form({id:r+`_form`,className:`modal-content`,onsubmit:e=>{e.preventDefault(),o()}},t.div({className:`grid`},t.div({className:`col-sm-6`},t.div({className:`field`},t.label({htmlFor:r+`.clientId`},`Client ID`),t.input({id:r+`.clientId`,name:`clientId`,type:`text`,required:!0,value:()=>a.clientId||``,oninput:e=>a.clientId=e.target.value}))),t.div({className:`col-sm-6`},t.div({className:`field`},t.label({htmlFor:r+`.teamId`},`Team ID`),t.input({id:r+`.teamId`,name:`teamId`,type:`text`,required:!0,value:()=>a.teamId||``,oninput:e=>a.teamId=e.target.value}))),t.div({className:`col-sm-6`},t.div({className:`field`},t.label({htmlFor:r+`.keyId`},`Key ID`),t.input({id:r+`.keyId`,name:`keyId`,type:`text`,required:!0,value:()=>a.keyId||``,oninput:e=>a.keyId=e.target.value}))),t.div({className:`col-sm-6`},t.div({className:`field`},t.label({htmlFor:r+`.duration`},`Duration (in seconds)`),t.input({id:r+`.duration`,name:`duration`,type:`number`,min:0,step:1,max:i,required:!0,value:()=>a.duration||0,oninput:e=>a.duration=parseInt(e.target.value,10)})),t.div({className:`field-help`},`Max ${i} seconds (~${i/(3600*24*30)<<0} months).`)),t.div({className:`col-sm-12`},t.div({className:`field`},t.label({htmlFor:r+`.privateKey`},`Private key`),t.textarea({id:r+`.privateKey`,name:`privateKey`,type:`text`,required:!0,rows:8,placeholder:`-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----`,value:()=>a.privateKey||``,oninput:e=>a.privateKey=e.target.value})),t.div({className:`field-help`},`The key is not stored on the server and it is used only for generating the signed JWT.`)))),t.footer({className:`modal-footer`},t.button({type:`button`,className:`btn transparent m-r-auto`,onclick:()=>app.modals.close(n)},t.span({className:`txt`},`Close`)),t.button({"html-form":r+`_form`,type:`submit`,className:`btn expanded`},t.i({className:`ri-key-line`,ariaHidden:!0}),t.span({className:`txt`},`Generate secret`)))),n}function dr(){return t.div({className:`inline-flex gap-5`},t.span(null,`Default log levels:`),()=>{let e=[];for(let n in app.utils.logLevels)e.push(t.code(null,`${n}:${app.utils.logLevels[n].label}`));return e})}window.app=window.app||{},window.app.modals=window.app.modals||{},window.app.modals.openLogsSettings=function(e={onbeforeopen:null,onafteropen:null,onbeforeclose:null,onafterclose:null,onsave:null}){let n=fr(e);n&&(document.body.appendChild(n),app.modals.open(n))};function fr(e){let n,r=store({isLoading:!1,isSaving:!1,formSettings:{},initFormSettingsHash:``,get hasChanges(){return r.initFormSettingsHash!=JSON.stringify(r.formSettings)}});function i(e={}){r.formSettings={logs:e?.logs||{}},r.initFormSettingsHash=JSON.stringify(r.formSettings)}async function a(){r.isLoading=!0;try{i(await app.pb.settings.getAll({requestKey:`logsSettings`})),r.isLoading=!1}catch(e){e.isAbort||(r.isLoading=!1,app.checkApiError(e))}}async function o(){if(r.hasChanges){r.isSaving=!0;try{let a=await app.pb.settings.update(app.utils.filterRedactedProps(r.formSettings));e.onsave?.(a),i(a),app.toasts.success(`Successfully saved logs settings.`),r.isSaving=!1,app.modals.close(n)}catch(e){e.isAbort||(r.isSaving=!1,app.checkApiError(e))}}}return n=t.div({pbEvent:`logsSettingsModal`,className:`modal popup sm logs-settings-modal`,onbeforeopen:n=>(a(),e.onbeforeopen?.(n)),onafteropen:n=>{e.onafteropen?.(n)},onbeforeclose:n=>e.onbeforeclose?.(n),onafterclose:n=>{e.onafterclose?.(n),n?.remove()}},t.header({className:`modal-header`},t.h5({className:`m-auto`},`Logs settings`)),()=>r.isLoading?t.div({className:`modal-content flex`,style:`min-height: 200px`},t.span({className:`loader m-auto`})):[t.form({pbEvent:`logsSettingsForm`,id:`logsSettingsForm`,className:`modal-content logs-settings-form`,onsubmit:e=>{e.preventDefault(),o()}},t.div({className:`grid`},t.div({className:`col-lg-12`},t.field({className:`field`},t.label({htmlFor:`logs.maxDays`},`Max days retention`),t.input({type:`number`,id:`logs.maxDays`,name:`logs.maxDays`,min:0,required:!0,value:()=>r.formSettings.logs.maxDays,oninput:e=>r.formSettings.logs.maxDays=e.target.value<<0})),t.div({className:`field-help`},`Set to `,t.code(null,0),` to disable logs persistence.`)),t.div({className:`col-lg-12`},t.field({className:`field`},t.label({htmlFor:`logs.minLevel`},`Min log level`),t.input({type:`number`,id:`logs.minLevel`,name:`logs.minLevel`,min:-100,max:100,required:!0,value:()=>r.formSettings.logs.minLevel,oninput:e=>r.formSettings.logs.minLevel=e.target.value<<0})),t.div({className:`field-help`},t.div(null,`Logs with level below the minimum will be ignored.`),dr())),t.div({className:`col-lg-12`},t.field({className:`field`},t.input({type:`checkbox`,id:`logs.logIP`,name:`logs.logIP`,className:`switch`,checked:()=>r.formSettings.logs.logIP,onchange:e=>r.formSettings.logs.logIP=e.target.checked}),t.label({htmlFor:`logs.logIP`},`Enable IP logging`))),t.div({className:`col-lg-12`},t.field({className:`field`},t.input({type:`checkbox`,id:`logs.logAuthId`,name:`logs.logAuthId`,className:`switch`,checked:()=>r.formSettings.logs.logAuthId,onchange:e=>r.formSettings.logs.logAuthId=e.target.checked}),t.label({htmlFor:`logs.logAuthId`},`Enable Auth Id logging`))))),t.footer({className:`modal-footer`},t.button({type:`button`,className:`btn transparent m-r-auto`,onclick:()=>app.modals.close(n),disabled:()=>r.isSaving},t.span({className:`txt`},`Close`)),t.button({type:`submit`,"html-form":`logsSettingsForm`,className:()=>`btn ${r.isSaving?`loading`:``}`,disabled:()=>!r.hasChanges||r.isSaving},t.span({className:`txt`},`Save changes`)))]),n}function pr(e){return t.div({className:()=>`label log-level-label level-${e.level}`},t.span({className:`txt`},()=>`${app.utils.logLevels[e.level]?.label||`UNKN`} (${e.level})`))}window.app=window.app||{},window.app.modals=window.app.modals||{},window.app.modals.openLogPreview=function(e,n={onbeforeopen:null,onafteropen:null,onbeforeclose:null,onafterclose:null}){let r=_r(e,n);r&&(document.body.appendChild(r),app.modals.open(r))};var mr=[`execTime`,`type`,`auth`,`authId`,`status`,`method`,`url`,`referer`,`remoteIP`,`userIP`,`userAgent`,`error`,`details`];function hr(e){app.utils.downloadJSON(e,`log_`+e.created.replaceAll(/[-:\. ]/gi,``)+`.json`)}function gr(e){app.utils.copyToClipboard(JSON.stringify(e,null,2)),app.toasts.success(`Log copied to clipboard!`)}function _r(e,n){let r,i=store({isLoading:!1,log:null,get isRequest(){return i.log?.data?.type==`request`},get orderedDataKeys(){let e=new Set;if(!i.log?.data)return e;for(let n of mr)i.log.data[n]!==void 0&&e.add(n);for(let n in i.log.data)e.add(n);return e}});async function a(){i.isLoading=!0;try{app.utils.isObject(e)?i.log=JSON.parse(JSON.stringify(e)):i.log=await app.pb.logs.getOne(e,{requestKey:`log_preview`}),i.isLoading=!1}catch(e){e.isAbort||(i.isLoading=!1,app.checkApiError(e))}}return r=t.div({pbEvent:`logPreviewModal`,className:`modal log-preview-modal`,onbeforeopen:e=>(a(),n.onbeforeopen?.(e)),onafteropen:e=>{n.onafteropen?.(e)},onbeforeclose:e=>n.onbeforeclose?.(e),onafterclose:e=>{n.onafterclose?.(e),e?.remove()}},t.header({className:`modal-header`},t.h5(null,`Log details`),t.button({className:`btn sm circle transparent m-l-auto`,title:`More options`,"html-popovertarget":`log-meta-dropdown`},t.i({className:`ri-more-line`,ariaHidden:!0})),t.div({id:`log-meta-dropdown`,className:`dropdown`,popover:`auto`},e=>t.button({className:`dropdown-item`,onclick:()=>{gr(i.log),e.hidePopover()}},t.i({className:`ri-braces-line`,ariaHidden:!0}),t.span({className:`txt`},`Copy JSON`)))),t.div({className:`modal-content`},()=>!i.log||i.isLoading?t.div({className:`block txt-center`},t.span({className:`loader`})):t.table({pbEvent:`logPreviewTable`,className:`log-view-table responsive-table`},t.tbody(null,t.tr(null,t.th({className:`col-field-name-id p-r-0`},`id`),t.td(null,()=>i.log.id),t.td({className:`col-copy min-width`},app.components.copyButton(i.log.id))),t.tr(null,t.th({className:`col-field-name-level p-r-0`},`level`),t.td(null,()=>pr(i.log)),t.td({className:`col-copy min-width`},app.components.copyButton(i.log.level))),t.tr(null,t.th({className:`col-field-name-created p-r-0`},`created`),t.td(null,app.components.formattedDate({value:()=>i.log.created,short:!1})),t.td({className:`col-copy min-width`},app.components.copyButton(i.log.created))),()=>{if(!i.isRequest)return t.tr(null,t.th({className:`col-field-name-message p-r-0`},`message`),t.td(null,()=>app.utils.truncate(i.log.message,1e3)),t.td({className:`col-copy min-width`},app.components.copyButton(i.log.message)))},()=>{let e=[];for(let n of i.orderedDataKeys){let r=i.log.data?.[n];app.utils.logDataFormatters[n]&&(r=app.utils.logDataFormatters[n](i.log));let a=app.utils.isEmpty(r),o=!a&&app.utils.isObject(r);o&&(r=JSON.stringify(r,null,2)),e.push(t.tr({rid:`log_data_`+i.log.id+`_`+n},t.th({className:`min-width p-r-0`},`data.`+n),t.td(null,()=>a?t.span({className:`txt txt-hint`,textContent:`N/A`}):n===`error`?t.span({className:`label danger log-error-label ${o?`txt-code`:``}`,textContent:r}):n==`details`?t.span({className:`label warning log-details-label ${o?`txt-code`:``}`,textContent:r}):o?app.components.codeBlock({value:r}):t.span({className:`txt`,textContent:app.utils.stringifyValue(r,`N/A`,1e3)})),t.td({className:`col-copy min-width`},app.components.copyButton(r))))}return e}))),t.footer({className:`modal-footer`},t.button({type:`button`,className:`btn transparent m-r-auto`,onclick:()=>app.modals.close(r)},t.span({className:`txt`},`Close`)),t.button({type:`button`,className:`btn`,onclick:()=>hr(i.log)},t.i({className:`ri-download-line`,ariaHidden:!0}),t.span({className:`txt`},`Download JSON`)))),r}function vr(e){app.store.title=`Superuser login`;let n=store({authMethods:{},identity:e.query.demoEmail?.[0]||``,password:e.query.demoPassword?.[0]||``,showPassword:!1,otpId:``,lastOTPId:``,otpEmail:``,otpPassword:``,mfaId:``,totalSteps:1,get currentStep(){return 1+!!n.mfaId+!!n.otpId},isAuthMethodsLoading:!0,isPasswordAuthSubmitting:!1,isOTPRequestSubmitting:!1,isOTPAuthSubmitting:!1});async function r(){n.isAuthMethodsLoading=!0;try{n.authMethods=await app.pb.collection(`_superusers`).listAuthMethods(),n.totalSteps=1,n.mfaId=``,n.otpId=``,n.authMethods.mfa?.enabled&&n.authMethods.otp?.enabled&&(n.totalSteps+=2)}catch(e){app.checkApiError(e)}n.isAuthMethodsLoading=!1}return r(),t.div({pbEvent:`pageSuperuserLogin`,className:`wrapper sm m-auto p-b-base`},t.header({className:`txt-center m-b-base`},t.img({className:`main-logo`,src:()=>app.store.mainLogo,ariaHidden:!0,alt:`App logo`}),t.h5({className:`m-t-10`},t.span(null,()=>app.store.title),()=>{if(n.totalSteps>1)return t.span(null,()=>` (${n.currentStep}/${n.totalSteps})`)})),()=>{if(n.isAuthMethodsLoading)return t.div({className:`block txt-center`},t.span({className:`loader lg`}));if(n.authMethods.password?.enabled&&!n.mfaId)return br(n);if(n.authMethods.otp?.enabled)return n.otpId?wr(n):Sr(n)})}async function yr(e){if(!e.isPasswordAuthSubmitting){e.isPasswordAuthSubmitting=!0;try{await app.pb.collection(`_superusers`).authWithPassword(e.identity,e.password),app.toasts.removeAll(),app.store.errors=null,app.utils.toRememberedPath()}catch(n){n.status==401?(e.mfaId=n.response.mfaId,e.authMethods?.password?.identityFields?.length==1&&e.authMethods.password.identityFields[0]==`email`?(e.otpEmail=e.identity,await xr(e)):/^[^@\s]+@[^@\s]+$/.test(e.identity)&&(e.otpEmail=e.identity)):n.status==400?app.toasts.error(`Invalid login credentials.`):app.checkApiError(n)}e.isPasswordAuthSubmitting=!1}}function br(e){return t.form({pbEvent:`authWithPasswordForm`,className:`grid auth-with-password-form`,onsubmit:n=>{n.preventDefault(),yr(e)}},t.div({className:`col-12`},t.div({className:`field`},t.label({htmlFor:`login_identity`},()=>app.utils.sentenize(e.authMethods.password.identityFields.join(` or `),!1)),t.input({id:`login_identity`,name:`identity`,type:()=>e.authMethods.password.identityFields.length==1&&e.authMethods.password.identityFields[0]==`email`?`email`:`text`,required:!0,autofocus:!0,value:()=>e.identity,oninput:n=>e.identity=n.target.value}))),t.div({className:`col-12`},t.div({className:`fields`},t.div({className:`field`},t.label({htmlFor:`login_pass`},`Password`),t.input({id:`login_pass`,name:`password`,required:!0,type:()=>e.showPassword?`text`:`password`,value:()=>e.password,oninput:n=>e.password=n.target.value})),t.div({className:`field addon`},t.button({type:`button`,tabIndex:-1,className:`btn sm transparent secondary circle tooltip-right`,ariaLabel:app.attrs.tooltip(()=>e.showPassword?`Hide password`:`Show password`),onclick:()=>e.showPassword=!e.showPassword},t.i({className:()=>e.showPassword?`ri-eye-off-line`:`ri-eye-line`,ariaHidden:!0})))),t.a({href:`#/request-password-reset`,className:`link-hint m-t-5`,onclick:e=>e.stopPropagation()},t.small(null,`Forgotten password`))),t.div({className:`col-12`},t.button({className:()=>`btn lg block next ${e.isPasswordAuthSubmitting?`loading`:``}`,disabled:()=>e.isPasswordAuthSubmitting},t.span({className:`txt`},()=>e.totalSteps>1?`Next`:`Login`),t.i({className:`ri-arrow-right-line`,ariaHidden:!0}))))}async function xr(e){if(!e.isOTPRequestSubmitting){e.isOTPRequestSubmitting=!0;try{e.otpId=(await app.pb.collection(`_superusers`).requestOTP(e.otpEmail)).otpId,e.lastOTPId=e.otpId,app.toasts.removeAll(),app.store.errors=null}catch(n){n.status==429&&(e.otpId=e.lastOTPId),app.checkApiError(n)}e.isOTPRequestSubmitting=!1}}function Sr(e){return t.form({pbEvent:`requestOTPForm`,className:`grid request-otp-form`,onsubmit:n=>{n.preventDefault(),xr(e)}},t.div({className:`col-12`},t.div({className:`field`},t.label({htmlFor:`otp_email`},`Email`),t.input({id:`otp_email`,name:`email`,type:`email`,required:!0,autofocus:!0,value:()=>e.otpEmail,oninput:n=>e.otpEmail=n.target.value}))),t.div({className:`col-12`},t.button({className:()=>`btn lg block ${e.isOTPRequestSubmitting?`loading`:``}`,disabled:()=>e.isOTPRequestSubmitting},t.i({className:`ri-mail-send-line`,ariaHidden:!0}),t.span({className:`txt`},`Send OTP`))))}async function Cr(e){if(!e.isOTPAuthSubmitting){e.isOTPAuthSubmitting=!0;try{await app.pb.collection(`_superusers`).authWithOTP(e.otpId||e.lastOTPId,e.otpPassword,{mfaId:e.mfaId}),app.toasts.removeAll(),app.store.errors=null,app.utils.toRememberedPath()}catch(e){app.checkApiError(e)}e.isOTPAuthSubmitting=!1}}function wr(e){return t.form({pbEvent:`authWithOTPForm`,className:`grid auht-with-otp-form`,onsubmit:n=>{n.preventDefault(),Cr(e)}},()=>{if(e.otpEmail)return t.div({className:`col-12`},t.div({className:`content txt-center`},`Check your `,t.strong(null,e.otpEmail),` inbox and enter below the received One-time password (OTP).`))},t.div({className:`col-12`},t.div({className:`field`},t.label({htmlFor:`otp_id`},`Id`),t.input({id:`otp_id`,name:`otpId`,type:`text`,required:!0,placeholder:()=>e.lastOTPId,value:()=>e.otpId,onchange:n=>{e.otpId=n.target.value||e.lastOTPId,n.target.value=e.otpId}}))),t.div({className:`col-12`},t.div({className:`fields`},t.div({className:`field`},t.label({htmlFor:`otp_password`},`One-time password`),t.input({id:`otp_password`,name:`password`,required:!0,type:()=>e.showPassword?`text`:`password`,value:()=>e.otpPassword,oninput:n=>e.otpPassword=n.target.value})),t.div({className:`field addon`},t.button({type:`button`,tabIndex:-1,className:`btn sm transparent secondary circle tooltip-right`,ariaLabel:app.attrs.tooltip(()=>e.showPassword?`Hide password`:`Show password`),onclick:()=>e.showPassword=!e.showPassword},t.i({className:()=>e.showPassword?`ri-eye-off-line`:`ri-eye-line`}))))),t.div({className:`col-12`},t.button({className:()=>`btn lg block next ${e.isOTPAuthSubmitting?`loading`:``}`,disabled:()=>e.isOTPAuthSubmitting},t.span({className:`txt`},`Login`),t.i({className:`ri-arrow-right-line`,ariaHidden:!0})),t.div({className:`block m-t-sm txt-center`},t.button({type:`button`,className:`link-hint txt-sm`,disabled:()=>e.isOTPAuthSubmitting,onclick:()=>{e.otpId=``,e.otpPassword=``}},`Request another OTP`))))}var Tr=`pbPinnedCollections`,Er=12;function Dr(){let e=store({search:``,pinned:app.utils.getLocalHistory(Tr,[]),get filteredCollections(){if(!e.search.length)return app.store.collections;let n=e.search.replaceAll(` `,``).toLowerCase();return app.store.collections.filter(e=>(e.name+e.id+e.type).toLowerCase().includes(n))},get systemCollections(){return e.filteredCollections.filter(n=>n.system&&!e.pinned.includes(n.id))},get regularCollections(){return e.filteredCollections.filter(n=>!n.system&&!e.pinned.includes(n.id))},get pinnedCollections(){return e.pinned.length?e.filteredCollections.filter(n=>e.pinned.includes(n.id)):[]}});function n(){e.search=``}let r=[];return app.components.pageSidebar({className:()=>`collections-sidebar ${e.responsiveShow?`active`:``}`,onmount:n=>{r.push(watch(()=>{app.utils.saveLocalHistory(Tr,JSON.stringify(e.pinned))})),r.push(watch(()=>app.store.activeCollection?.id,async()=>{await new Promise(e=>setTimeout(e,0));let e=n?.querySelector(`.nav-item.active`),r=e?.closest(`details`);r&&(r.open=!0,e?.scrollIntoView({block:`nearest`}))}))},onunmount:()=>{r.forEach(e=>e?.unwatch())}},t.div({className:`sidebar-search`},t.div({className:`fields`},t.div({className:`field`},t.input({className:`p-r-5`,type:`text`,placeholder:`Search collections...`,value:()=>e.search,oninput:n=>e.search=n.target.value})),t.div({className:`field addon p-l-0 p-r-5 gap-0`},t.button({hidden:()=>!e.search.length,type:`button`,className:`btn sm circle transparent secondary`,ariaDescription:app.attrs.tooltip(`Clear`,`left`),onclick:n},t.i({className:`ri-close-line`,ariaHidden:!0})),t.button({type:`button`,disabled:()=>app.store.isLoadingCollections,className:()=>`btn sm circle transparent secondary link-faded ${app.store.isLoadingCollections?`loading`:``}`,ariaDescription:app.attrs.tooltip(`Collections overview`,`left`),onclick:()=>app.modals.openCollectionsOverview()},t.i({className:`ri-organization-chart`,ariaHidden:!0}))))),()=>{if(!(!e.search.length||e.filteredCollections.length||app.store.isLoadingCollections))return t.div({className:`block p-t-base txt-center txt-hint`},t.p(null,`No collections found.`),t.button({type:`button`,className:`btn sm secondary`,textContent:`Clear search`,onclick:()=>n()}))},()=>{if(app.store.isLoadingCollections&&!e.filteredCollections.length)return t.div({className:`sidebar-content txt-center`},t.span({className:`loader sm`}))},()=>[t.nav({className:()=>`sidebar-content collections-list scrollable ${e.regularCollections.length+e.pinnedCollections>=Er?`compact`:``}`},t.details({hidden:()=>!e.pinnedCollections.length,className:()=>`nav-group nav-group-pinned-collections`,open:!0},t.summary({tabIndex:-1,onfocusout:()=>!1,onclick:()=>!1,onkeyup:()=>!1},`Pinned`),()=>e.pinnedCollections.map(n=>Or(n,e))),t.details({hidden:()=>!e.regularCollections.length,className:`nav-group nav-group-regular-collections`,open:!0},t.summary({tabIndex:-1,onfocusout:()=>!1,onclick:()=>!1,onkeyup:()=>!1},()=>e.pinnedCollections.length?`Others`:`Collections`),()=>e.regularCollections.map(n=>Or(n,e))),t.details({hidden:()=>!e.systemCollections.length,className:`nav-group nav-group-system-collections`,open:()=>e.search.length},t.summary(null,`System`),()=>e.systemCollections.map(n=>Or(n,e)))),t.div({hidden:()=>e.search.length&&!e.filteredCollections.length,className:`sidebar-content new-collection`},t.button({type:`button`,className:`btn outline block`,onclick:()=>{app.modals.openCollectionUpsert({},{onsave:e=>{app.store.activeCollection=e.id}})}},t.i({className:`ri-add-line`,ariaHidden:!0}),t.span({textContent:`New collection`})))])}function Or(e,n){return t.button({"html-data-collection-id":()=>e.id,type:`button`,className:()=>`nav-item responsive-close ${e.id==app.store.activeCollection?.id?`active`:``}`,title:()=>e.name,onauxclick:n=>{n.preventDefault(),window.open(`#/collections?collection=${e.name}`,`_blank`,`noreferrer,noopener`)},onclick:n=>{n.preventDefault(),app.store.activeCollection=e.name}},t.i({className:()=>app.collectionTypes[e.type]?.icon||app.utils.fallbackCollectionIcon,ariaHidden:!0}),t.span({className:`txt`},()=>e.name),()=>{if(!(e.type!=`auth`||!e.oauth2?.enabled||e.oauth2?.providers?.length>0))return t.i({ariaHidden:!0,className:`ri-alert-line txt-hint txt-sm`,ariaDescription:app.attrs.tooltip(`OAuth2 auth is enabled but the collection doesn't have any registered providers`)})},()=>{let r=n.pinned.indexOf(e.id);return t.span({tabIndex:-1,role:`button`,className:`pin`,title:()=>r>=0?`Unpin`:`Pin`,onclick:i=>{i.preventDefault(),i.stopPropagation(),r>=0?n.pinned.splice(r,1):n.pinned.push(e.id)}},t.i({ariaHidden:!1,className:()=>r>=0?`ri-unpin-line`:`ri-pushpin-line`}))})}var kr=`sort`,$=`filter`,Ar=`collection`,jr=`record`,Mr=`pbLastActiveCollection`,Nr=`recordsTotalCountRequest`;function Pr(e){app.store.activeCollection=e.query[Ar]?.[0]||window.localStorage.getItem(Mr);let n=store({reset:null,activeRecordIdOrModel:e.query[jr]?.[0]||``,sort:e.query[kr]?.[0]||``,filter:e.query[$]?.[0]||``,totalCount:0,isTotalCountLoading:!1});async function r(){if(app.store.activeCollection?.id){n.isTotalCountLoading=!0;try{let e=app.utils.normalizeSearchFilter(n.filter,app.store.activeCollection.fields.filter(e=>!e.hidden).map(e=>e.name));n.totalCount=(await app.pb.collection(app.store.activeCollection.name).getList(1,1,{requestKey:Nr,filter:e,fields:`id`})).totalItems}catch(e){e.isAbort||(n.totalCount=0,console.warn(`failed to load total count:`,e))}n.isTotalCountLoading=!1}}function i(){n.reset=Date.now()}let a=[watch(()=>(app.store.activeCollection?.name||``)+(app.store.activeCollection?.updated||``),(e,r)=>{app.store.title=app.store.activeCollection?.name||`Collections`,r&&(r!=e&&(n.filter=``,n.sort=``),app.utils.replaceHashQueryParams({[Ar]:app.store.activeCollection?.name,[$]:n.filter||null,[kr]:n.sort||null},e==r?null:!0),app.store.activeCollection?.id?window.localStorage.setItem(Mr,app.store.activeCollection.id):window.localStorage.removeItem(Mr))}),watch(()=>[n.filter,n.sort],(e,r)=>{r&&app.utils.replaceHashQueryParams({[$]:n.filter||null,[kr]:n.sort||null})}),watch(()=>(n.activeRecordIdOrModel||``)+(app.store.activeCollection?.id||``),(e,r)=>{if(!n.activeRecordIdOrModel){app.utils.replaceHashQueryParams({[jr]:null});return}if(e==r||!app.store.activeCollection?.id)return;let i=typeof n.activeRecordIdOrModel==`string`?{id:n.activeRecordIdOrModel,collectionId:app.store.activeCollection?.id,collectionName:app.store.activeCollection?.name}:n.activeRecordIdOrModel;app.utils.replaceHashQueryParams({[jr]:i.id||null}),app.modals.close(null,!0),app.store.activeCollection?.type==`view`?app.modals.openRecordPreview(i,{onafterclose:()=>{n.activeRecordIdOrModel=``}}):app.modals.openRecordUpsert(app.store.activeCollection,i,{onafterclose:()=>{n.activeRecordIdOrModel=``}})}),watch(()=>[app.store.activeCollection?.id,n.filter,n.reset],()=>r())],o={"record:save":e=>{e.detail.collectionId==app.store.activeCollection?.id&&n.totalCount++},"record:delete":e=>{e.detail.collectionId!=app.store.activeCollection?.id&&e.detail.collectionName!=app.store.activeCollection?.name||n.totalCount--}};return t.div({pbEvent:`pageCollections`,className:`page`,onmount:()=>{app.store.isLoadingCollections||app.store.silentlyReloadCollections();for(let e in o)document.addEventListener(e,o[e])},onunmount:()=>{app.pb.cancelRequest(Nr),a.forEach(e=>e?.unwatch());for(let e in o)document.removeEventListener(e,o[e])}},()=>Dr(),t.div({className:`page-content full-height`},t.header({className:`page-header compact flex-nowrap`},t.nav({className:`breadcrumbs`},t.div(null,`Collections`),()=>{if(app.store.activeCollection?.name)return t.div({title:app.store.activeCollection.name,textContent:app.store.activeCollection.name})}),t.div({hidden:()=>!app.store.activeCollection?.id,pbEvent:`pageHeaderSecondaryBtns`,className:`page-header-secondary-btns`},t.button({type:`button`,className:`btn circle transparent secondary tooltip-bottom btn-collection-settings`,ariaLabel:app.attrs.tooltip(`Collection settings`),onclick:()=>{app.modals.openCollectionUpsert(app.store.activeCollection,{ontruncate:()=>i(),onsave:(e,n)=>{n?app.store.activeCollection=e.id:i()}})}},t.i({className:`ri-settings-3-line`,ariaHidden:!0})),app.components.refreshButton({onclick:()=>i()})),t.div({hidden:()=>!app.store.activeCollection?.id,pbEvent:`pageHeaderPrimaryBtns`,className:`page-header-primary-btns`},t.button({type:`button`,className:`btn outline api-preview-btn`,onclick:()=>app.modals.openApiPreview(app.store.activeCollection)},t.i({className:`ri-code-s-slash-line`,ariaHidden:!0}),t.span({className:`txt`,textContent:`API preview`})),()=>{if(app.store.activeCollection?.type!=`view`)return t.button({type:`button`,className:`btn new-record-btn`,onclick:()=>app.modals.openRecordUpsert(app.store.activeCollection)},t.i({className:`ri-add-line`,ariaHidden:!0}),t.span({className:`txt`,textContent:`New Record`}))})),t.div({hidden:()=>!app.store.isLoadingCollections||app.store.activeCollection?.id,className:`block txt-center p-base`},t.span({className:`loader lg`})),t.div({hidden:()=>app.store.isLoadingCollections||app.store.activeCollection?.id,className:`block txt-center p-base`},t.h6({className:`txt`},()=>app.store.collections?.length?`Select collection from the sidebar.`:`No collections found.`)),app.components.recordsSearchbar({hidden:()=>!app.store.activeCollection?.id,collection:()=>app.store.activeCollection,value:()=>n.filter,onsubmit:e=>n.filter=e}),app.components.recordsList({className:`m-t-sm`,reset:()=>n.reset,hidden:()=>!app.store.activeCollection?.id,collection:()=>app.store.activeCollection,filter:()=>n.filter,sort:()=>n.sort,onselect:e=>{n.activeRecordIdOrModel=e},onchange:(e,r)=>{n.filter=e,n.sort=r}}),t.footer({className:`page-footer`},t.span({className:()=>`total-count ${n.isTotalCountLoading?`faded`:``}`},`Total: `,()=>n.totalCount),app.components.credits())))}function Fr(){return document.body.clientWidth>600&&document.body.clientHeight>=720?150:100}function Ir(e){let n=store({stats:[]});async function r(r){if(r){e.isChartLoading=!0;try{let i=(e.presets||[]).concat(app.utils.normalizeSearchFilter(e.filter,[`level`,`message`,`data`])),a=await app.pb.logs.getStats({filter:i.filter(Boolean).map(e=>`(`+e+`)`).join(`&&`)}),o=a.length,s=[],c=[];e.totalFound=0;for(let n=0;n<o;n++){let r=new Date(a[n].date.replace(` `,`T`)).getTime()/1e3;s.push(r),c.push(a[n].total),e.totalFound+=a[n].total,a[n+1]?.date?new Date(a[n+1].date.replace(` `,`T`)).getTime()/1e3-r>3600&&(s.push(r+3600),c.push(0)):n+1==o&&(s.push(r+3600),c.push(0))}n.stats=a,e.isChartLoading=!1,Rr(r,[s,c],e)}catch(n){n?.isAbort||(e.isChartLoading=!1,console.warn(`failed to load logs chart:`,n))}}}let i=[];return t.div({pbEvent:`logsChart`,className:()=>[`logs-chart`,e.isChartLoading?`loading`:null,e.zoom?.min&&e.zoom?.max?`zoomed`:``,!n.stats.length||!e.isFirstLoadReady?`nodata`:null].filter(Boolean).join(` `),onmount:n=>{i.push(watch(()=>[e.reset,e.filter,e.presets?.length],()=>r(n))),n._resizeChartFunc=()=>{clearTimeout(n._resizeTimeoutId),n._resizeTimeoutId=setTimeout(()=>{n?._uplot&&n._uplot.setSize({width:n.clientWidth,height:Fr()})},100)},window.addEventListener(`resize`,n._resizeChartFunc)},onunmount:e=>{i.forEach(e=>e?.unwatch()),e._uplot?.destroy(),e._resizeChartFunc&&(clearTimeout(e._resizeTimeoutId),window.removeEventListener(`resize`,e._resizeChartFunc),e._resizeChartFunc=null,e._resizeTimeoutId=null)}},t.button({type:`button`,className:()=>`logs-reset-zoom-ctrl ${e.zoom?.min&&e.zoom?.max?``:`hidden`}`,onclick(){e.zoom={}}},t.div({className:`content-primary`},`Reset zoom`),t.div({className:`content-secondary`},`(drag the timeline to pan)`)),t.span({hidden:()=>!e.isChartLoading,className:()=>`loader logs-chart-loader`}))}function Lr(e){let n=e?.data?.[0];n&&e.setScale(`x`,{min:n[0],max:n[n.length-1]})}function Rr(e,n,r){let i=window.getComputedStyle(e),a=i.getPropertyValue(`--surfaceTxtHintColor`),o=i.getPropertyValue(`--surfaceAlt1Color`),s=i.getPropertyValue(`--surfaceAlt4Color`),c=i.getPropertyValue(`--surfaceAlt2Color`),l={width:e.clientWidth,height:Fr(),legend:{show:!1},cursor:{x:!1,y:!1},scales:{x:{range:(e,r,i)=>r<n[0][0]||i>n[0][n[0].length-1]?[e.scales.x.min,e.scales.x.max]:[r,i]},y:{range:{min:{pad:.2,soft:0,mode:1},max:{pad:.2,soft:0,mode:2}}}},series:[{},{paths:uPlot.paths.stepped({align:1}),points:{show:!1,size:1},width:2,fill:c,stroke:s}],axes:[{show:!0,size:35,lineGap:1,space:60,stroke:a,incrs:[300,600,900,1800,3600,3600*2,3600*3,3600*4,3600*6,3600*12,86400,86400*2],values:[[3600,`{h}{aa}`,`
{MMM} {DD}`,null,`
{MMM} {DD}`,null,null,null,1],[60,`{h}:{mm}{aa}`,`
{MMM} {DD}`,null,`
{MMM} {DD}`,null,null,null,1]],grid:{show:!0,stroke:o,width:1},ticks:{show:!0,stroke:o,width:1,size:5}},{show:!0,stroke:a,grid:{show:!0,stroke:o,width:1},ticks:{show:!0,stroke:o,width:1,size:5}}],plugins:[Vr(),zr(r),Br(r)]};e._uplot?.destroy(),e._uplot=new uPlot(l,n,e)}function zr(e){let n;return{hooks:{init:r=>{r.over.ondblclick=n=>{e.zoom={}},n=watch(()=>{!e.zoom?.min||!e.zoom?.max?Lr(r):r.setScale(`x`,{min:e.zoom.min,max:e.zoom.max})})},destroy:e=>{n?.unwatch()},setSelect:n=>{n.select.width>0&&(e.zoom={min:n.posToVal(n.select.left,`x`),max:n.posToVal(n.select.left+n.select.width,`x`)})}}}}function Br(e){let n;return{hooks:{init:r=>{let i=r.root.querySelectorAll(`.u-axis`);if(!i.length){console.warn(`xPanPlugin requires x axis to be defined`);return}i[0].addEventListener(`mousedown`,i=>{if(!e.zoom?.min)return;let a=i.clientX,{min:o,max:s}=r.scales.x,c=r.bbox.width,l=(s-o)/(c/uPlot.pxRatio),u=i=>{let c=(a-i.clientX)*l;r.setScale(`x`,{min:o+c,max:s+c}),clearTimeout(n),n=setTimeout(()=>{r?.scales?.x&&(e.zoom={min:r.scales.x.min,max:r.scales.x.max})},100)},d=e=>{document.removeEventListener(`mousemove`,u),document.removeEventListener(`mouseup`,d)};document.addEventListener(`mousemove`,u),document.addEventListener(`mouseup`,d)})},destroy:e=>{n&&clearTimeout(n)}}}}function Vr(e){let n;return{hooks:{init:e=>{let r=e.over;n=store({date:``,total:0,left:0,top:0,show:!1});let i=t.div({className:()=>`chart-tooltip ${n.show?``:`hidden`}`,onmount(e){e._positionWatcher?.unwatch(),e._positionWatcher=watch(()=>[n.left,n.top],()=>{if(!e)return;let i=e.getBoundingClientRect(),a=n.left;a<0?a=0:a+i.width>r.clientWidth&&(a=r.clientWidth-i.width),e.style.left=a+`px`;let o=n.top-i.height-5;o<0&&(o=n.top+5,o+i.high>r.clientHeight&&(o=r.clientHeight-i.height)),e.style.top=o+`px`})},onunmount(e){e._positionWatcher?.unwatch()}},t.div({className:`content-primary`},()=>`${n.total} ${n.total==1?`request`:`requests`}`),t.div({className:`content-secondary`},()=>n.date));r.appendChild(i),r.addEventListener(`mouseleave`,()=>{n&&(n.show=!1)})},destroy:()=>{n.show=!1},setCursor:e=>{if(!n)return;let r=e.data[0][e.cursor.idx]||0,i=e.data[1][e.cursor.idx]||0;if(r==0||i==0){n.show=!1;return}n.show=!0,n.total=i;let a=new Date(r*1e3),o=new Date(r*1e3+36e5),s=a.toLocaleString(`default`,{month:`short`}),c=a.getDate().toString().padStart(2,`0`);n.date=`${s} ${c} ${Hr(a)}-${Hr(o)}`,n.left=Math.round(e.valToPos(r,`x`)),n.top=Math.round(e.valToPos(i,`y`))}}}}function Hr(e){let n=e.getHours(),r=n>=12?`pm`:`am`;return n=n%12||12,n+r}var Ur=50;function Wr(e){let n=store({logs:[],lastLoadCount:0,lastPage:1,bulkSelected:{},get canLoadMore(){return n.lastLoadCount>=Ur},get totalSelected(){return Object.keys(n.bulkSelected).length},get areAllSelected(){return n.logs.length&&n.logs.length==n.totalSelected}});async function r(r=!1){e.isListLoading=!0;try{let i=r?1:n.lastPage+1,a=(e.presets||[]).concat(app.utils.normalizeSearchFilter(e.filter,[`level`,`message`,`data`]));if(e.zoom?.min&&e.zoom?.max){let n=new Date(e.zoom.min*1e3);n.setSeconds(0),n.setMilliseconds(0);let r=app.utils.toRFC3339Datetime(n),i=new Date(e.zoom.max*1e3);i.setSeconds(59),i.setMilliseconds(999);let o=app.utils.toRFC3339Datetime(i);a.push(`created >= "${r}" && created <= "${o}"`)}else i>1&&a.push(`created <= "${n.logs[n.logs.length-1].created}"`);let o=await app.pb.logs.getList(i,Ur,{skipTotal:1,sort:`-@rowid`,requestKey:`logs_list`,filter:a.filter(Boolean).map(e=>`(`+e+`)`).join(`&&`)});o.page==1&&(n.logs=[],n.bulkSelected={}),n.lastPage=o.page,n.lastLoadCount=o.items.length;for(let e=0;e<o.items.length;e++)app.utils.pushOrReplaceObject(n.logs,o.items[e]),e>1&&e%20==0&&await new Promise(e=>setTimeout(e,20));e.isListLoading=!1,e.isFirstLoadReady||=!0}catch(n){n.isAbort||(e.isListLoading=!1,app.checkApiError(n))}}function i(e=!0){let r={};if(e)for(let e of n.logs)r[e.id]=e;n.bulkSelected=r}function a(e){let n=[];if(!e.data)return n;if(e.data.type==`request`){for(let r of[`status`,`execTime`,`auth`,`authId`,`userIP`])e.data[r]!==void 0&&n.push({key:r});e.data.referer&&!e.data.referer.includes(window.location.host)&&n.push({key:`referer`})}else{let r=Object.keys(e.data);for(let e of r)e!=`error`&&e!=`details`&&n.length<6&&n.push({key:e})}return e.data.error&&n.push({key:`error`,label:`danger`}),e.data.details&&n.push({key:`details`,label:`warning`}),n}let o=/[-:\. ]/gi;function s(){let e=Object.values(n.bulkSelected).sort((e,n)=>e.created<n.created?1:e.created>n.created?-1:0);if(!e.length)return;if(e.length==1)return app.utils.downloadJSON(e[0],`log_`+e[0].created.replaceAll(o,``)+`.json`);let r=e[0].created.replaceAll(o,``),i=e[e.length-1].created.replaceAll(o,``);return app.utils.downloadJSON(e,`${e.length}_logs_${i}_to_${r}.json`)}let c=[];return t.div({pbEvent:`logsList`,className:`page-table-wrapper`,onmount(n){c.push(watch(()=>[e.filter,e.presets?.length],()=>{e.zoom={}}),watch(()=>[e.reset,e.filter,e.presets?.length,e.zoom?.min,e.zoom?.max],()=>{r(!0),n&&(n.scrollTop=0)}))},onunmount(){c.forEach(e=>e?.unwatch())}},t.table({className:()=>`logs-table ${n.logs?.length>Ur?`optimize`:``}`},t.thead(null,t.tr(null,t.th({className:`col-bulk-select`},t.div({className:`field`,hidden:()=>e.isLoading},t.input({id:`logs_select_all`,type:`checkbox`,checked:()=>n.areAllSelected,onchange:e=>i(e.target.checked)}),t.label({htmlFor:`logs_select_all`})),t.span({className:`loader`,hidden:()=>!e.isLoading})),t.th({className:`col-field-name-level`},t.div({className:`inline-flex gap-5`},t.i({className:`ri-bookmark-line`,ariaHidden:!0}),t.span({textContent:`Level`}))),t.th({className:`col-field-name-message`},t.div({className:`inline-flex gap-5`},t.i({className:`ri-file-list-2-line`,ariaHidden:!0}),t.span({textContent:`Message`}))),t.th({className:`col-field-type-date col-field-name-created`},t.div({className:`inline-flex gap-5`},t.i({className:`ri-calendar-line`,ariaHidden:!0}),t.span({textContent:`Created`}))),t.th({className:`col-meta`}))),t.tbody(null,()=>n.logs?.length?n.logs.map(r=>t.tr({rid:r.id,tabIndex:0,role:`button`,className:()=>`handle ${r.data.type==`request`?`log-request`:``}`,onclick:()=>{e.activeLogIdOrModel=r},onkeypress:n=>{(n.key==`Enter`||n.key==` `)&&(n.preventDefault(),e.activeLogIdOrModel=r)}},()=>[t.td({className:`col-bulk-select`,onclick:e=>e.stopPropagation(),onkeypress:e=>e.stopPropagation()},t.div({className:`field`},t.input({id:`cb_`+r.id,type:`checkbox`,checked:()=>!!n.bulkSelected[r.id],onchange:e=>{let i=JSON.parse(JSON.stringify(n.bulkSelected));e.target.checked?i[r.id]=!0:delete i[r.id],n.bulkSelected=i}}),t.label({htmlFor:`cb_`+r.id}))),t.td({className:`col-field-name-level`},pr(r)),t.td({className:`col-field-name-message`},t.div({className:`content-primary`},()=>app.utils.truncate(r.message,1e3)),t.div({className:`content-secondary`},()=>{let e=[],n=a(r);for(let i of n){let n;n=app.utils.logDataFormatters[i.key]?app.utils.logDataFormatters[i.key](r):app.utils.stringifyValue(r.data[i.key],`N/A`,80),e.push(t.span({className:`label sm ${i.label||``}`},`${i.key}: ${n}`))}return e})),t.td({className:`col-field-type-date col-field-name-created`},app.components.formattedDate({value:()=>r.created,short:!1})),t.td({className:`col-meta`},t.i({className:`ri-arrow-right-line`,ariaHidden:!0}))])):t.tr(null,t.td({colSpan:99},()=>e.isListLoading?t.span({className:`skeleton-loader`}):t.div({className:`sticky-content txt-center txt-hint`},t.p({className:`txt-bold`},`No logs found.`),t.button({hidden:()=>e.filter?.length||app.utils.isEmpty(e.zoom),type:`button`,className:`btn secondary expanded-lg`,onclick(){e.zoom={}}},t.span({className:`txt`},`Reset zoom`)),t.button({hidden:()=>!e.filter?.length,type:`button`,className:`btn secondary expanded-lg`,onclick(){e.filter=``}},t.span({className:`txt`},`Clear search`))))),t.tr({hidden:()=>!n.canLoadMore},t.td({colSpan:99},t.button({className:()=>`btn lg secondary load-more-btn ${e.isListLoading?`transparent loading`:``}`,disabled:()=>e.isListLoading,onclick:()=>r()},t.span({className:`txt`},`Load older`)))))),t.div({className:`bulkbar-wrapper`},t.div({hidden:()=>n.totalSelected==0,className:`bulkbar logs-bulkbar`},t.span({className:`txt`},`Selected `,t.strong(null,()=>n.totalSelected),()=>` ${n.totalSelected==1?`log`:`logs`}`),t.button({type:`button`,className:`btn sm secondary pill m-r-auto`,onclick:()=>i(!1)},t.span({className:`txt`},`Reset`)),t.button({type:`button`,className:`btn sm pill`,onclick:()=>s()},t.i({className:`ri-download-line`,ariaHidden:!0}),t.span({className:`txt`},`JSON`)))))}function Gr(e){app.store.title=`Logs`;let n=`logId`,r=`filter`,i=`superuserRequests`,a=`pbLogSuperuserRequests`,o=`data.auth!='_superusers'`,s=e.query[n]?.[0]||``,c=e.query[r]?.[0]||``,l=!!(e.query[i]?.[0]<<0)||!!(window.localStorage.getItem(a)<<0),u=store({reset:null,isChartLoading:!1,isListLoading:!1,isFirstLoadReady:!1,zoom:{},presets:l?[]:[o],filter:c,totalFound:null,activeLogIdOrModel:s,get hasIncludeRequestsBySuperusers(){return!u.presets.includes(o)},get isLoading(){return u.isListLoading||u.isChartLoading}});function d(e){return e?typeof e==`string`?e:e?.id:null}function f(){u.reset=Date.now()}let p=[];return[t.div({pbEvent:`logsChartContainer`,className:`logs-chart-container accent-surface`},Ir(u)),t.div({pbEvent:`pageLogs`,className:`page page-logs`,onmount(e){p.push(watch(()=>{app.utils.replaceHashQueryParams({[r]:u.filter})}),watch(()=>{let e=+!!u.hasIncludeRequestsBySuperusers;app.utils.replaceHashQueryParams({[i]:e}),window.localStorage.setItem(a,e)}),watch(()=>u.activeLogIdOrModel,()=>{app.utils.replaceHashQueryParams({[n]:d(u.activeLogIdOrModel)}),u.activeLogIdOrModel&&(app.modals.close(null,!0),app.modals.openLogPreview(u.activeLogIdOrModel,{onafterclose:()=>{u.activeLogIdOrModel=null}}))}))},onunmount(e){clearTimeout(e._chartTiemoutId),p.forEach(e=>e?.unwatch())}},t.div({className:`page-content full-height`},t.header({className:`page-header`},t.nav({className:`breadcrumbs`},t.div(null,`Logs`)),t.div({className:`inline-flex gap-sm`},t.button({className:`btn circle transparent secondary tooltip-right`,ariaLabel:app.attrs.tooltip(`Logs settings`),onclick:()=>app.modals.openLogsSettings({onsave:()=>f()})},t.i({className:`ri-settings-3-line`,ariaHidden:!0})),app.components.refreshButton({onclick:f})),app.components.searchbar({className:`logs-searchbar`,historyKey:`pbLogsSearchHistory`,placeholder:"Search term or filter like `level > 0`",value:()=>u.filter||``,onsubmit:e=>u.filter=e,autocomplete:[`id`,`level`,`message`,`created`,{value:`data.`,label:`data.*`}]}),t.div({className:`meta m-l-auto`},t.div({className:`field logs-include-superuser-requests`},t.input({type:`checkbox`,id:`logs_checkbox`,className:`switch sm`,checked:()=>u.hasIncludeRequestsBySuperusers,onchange:e=>{e.target.checked?app.utils.removeByValue(u.presets,o):app.utils.pushUnique(u.presets,o)}}),t.label({htmlFor:`logs_checkbox`},t.small({className:`txt`},`Include requests by superusers`))))),Wr(u),t.footer({className:`page-footer`},t.span({className:`txt total-logs`},`Total: `,()=>u.totalFound==null?`...`:u.totalFound),app.components.credits())))]}function Kr(){return app.components.pageSidebar({pbEvent:`settingsSidebar`,className:`settings-sidebar`},t.nav({className:`sidebar-content scrollable`},()=>{let e=[];for(let n in app.store.settingsNavGroups){let r=app.store.settingsNavGroups[n],i=t.details({className:`nav-group`,"html-data-group":n,open:!0},t.summary({tabIndex:-1,onfocusout:()=>!1,onclick:()=>!1,onkeyup:()=>!1},n),()=>r.map(e=>{let n=e.href.startsWith(`#/`);return t.a({href:()=>e.href,target:()=>n?void 0:`_blank`,rel:()=>n?void 0:`noopener noreferrer`,className:n=>`nav-item ${e.isActive?.(n)||app.utils.isActivePath(e.href,!1)?`active`:``}`},()=>{if(e.icon)return t.i({className:e.icon,ariaHidden:!0})},t.span({className:`txt`},()=>e.label))}));e.push(i)}return e}))}function qr(e){return t.details({pbEvent:`batchApiAccordion`,className:`accordion batch-api-accordion`,name:`settingsAccordion`},t.summary(null,t.i({className:`ri-archive-stack-line`,ariaHidden:!0}),t.span({className:`txt`},`Batch API`),t.div({className:`flex-fill`}),()=>e.formSettings.batch.enabled?t.span({className:`label success`},`Enabled`):t.span({className:`label`},`Disabled`),()=>{if(!app.utils.isEmpty(app.store.errors?.batch))return t.i({className:`ri-error-warning-fill txt-danger`,ariaDescription:app.attrs.tooltip(`Has errors`,`left`)})}),t.div({className:`grid sm`},t.div({className:`col-lg-12`},t.div({className:`field`},t.input({id:`batch.enabled`,name:`batch.enabled`,type:`checkbox`,className:`switch`,checked:()=>e.formSettings.batch.enabled||!1,onchange:n=>e.formSettings.batch.enabled=n.target.checked}),t.label({htmlFor:`batch.enabled`},t.span({className:`txt`},`Enable`),t.small({className:`txt-hint`},` (experimental)`)))),t.div({className:`col-lg-4`},t.div({className:`field`},t.label({htmlFor:`batch.maxRequests`},t.span({className:`txt`},`Max requests in a batch`),t.i({className:`ri-information-line link-faded`,ariaDescription:app.attrs.tooltip(`Rate limiting (if enabled) also applies for the batch create/update/upsert/delete requests.`,`right`)})),t.input({id:`batch.maxRequests`,name:`batch.maxRequests`,type:`number`,min:1,step:1,required:()=>e.formSettings.batch.enabled,disabled:()=>!e.formSettings.batch.enabled,value:()=>e.formSettings.batch.maxRequests,oninput:n=>e.formSettings.batch.maxRequests=n.target.value<<0}))),t.div({className:`col-lg-4`},t.div({className:`field`},t.label({htmlFor:`batch.timeout`},t.span({className:`txt`},`Max processing time (in seconds)`)),t.input({id:`batch.timeout`,name:`batch.timeout`,type:`number`,min:1,step:1,required:()=>e.formSettings.batch.enabled,disabled:()=>!e.formSettings.batch.enabled,value:()=>e.formSettings.batch.timeout,oninput:n=>e.formSettings.batch.timeout=parseInt(n.target.value,10)}))),t.div({className:`col-lg-4`},t.div({className:`field`},t.label({htmlFor:`batch.maxBodySize`},t.span({className:`txt`},`Max body size (in bytes)`)),t.input({id:`batch.maxBodySize`,name:`batch.maxBodySize`,type:`number`,min:0,step:1,placeholder:`Default to 128MB`,disabled:()=>!e.formSettings.batch.enabled,value:()=>e.formSettings.batch.maxBodySize||``,oninput:n=>e.formSettings.batch.maxBodySize=parseInt(n.target.value,10)})))))}var Jr=[{value:`*:list`},{value:`*:view`},{value:`*:create`},{value:`*:update`},{value:`*:delete`},{value:`*:file`,description:`targets the files download endpoint`},{value:`*:listAuthMethods`},{value:`*:authRefresh`},{value:`*:auth`,description:`targets all auth methods`},{value:`*:authWithPassword`},{value:`*:authWithOAuth2`},{value:`*:authWithOTP`},{value:`*:requestOTP`},{value:`*:requestPasswordReset`},{value:`*:confirmPasswordReset`},{value:`*:requestVerification`},{value:`*:confirmVerification`},{value:`*:requestEmailChange`},{value:`*:confirmEmailChange`}];function Yr(){let e=Xr();document.body.appendChild(e),app.modals.open(e)}function Xr(){return t.div({pbEvent:`rateLimitInfoModal`,className:`modal rate-limit-info-modal`,onafterclose:e=>{e?.remove()}},t.header({className:`modal-header`},t.h5(null,`Rate limit label format`)),t.div({className:`modal-content`},t.p(null,`The rate limit rules are resolved in the following order (stops on the first match):`),t.ol(null,t.li(null,`exact tag (e.g. `,t.code(null,`users:create`)),t.li(null,`wildcard tag (e.g. `,t.code(null,`*:create`)),t.li(null,`METHOD + exact path (e.g. `,t.code(null,`POST /a/b`)),t.li(null,`METHOD + prefix path (e.g. `,t.code(null,`POST /a/b`,t.strong(null,`/`))),t.li(null,`exact path (e.g. `,t.code(null,`/a/b`)),t.li(null,`prefix path (e.g. `,t.code(null,`/a/b`,t.strong(null,`/`)))),t.p(null,`In case of multiple rules with the same label but different target user audience (e.g. "guest" vs "auth"), only the matching audience rule is taken in consideration.`),t.hr(),t.p(null,`The rate limit label could be in one of the following formats:`),t.ul(null,t.li({className:`m-b-sm`},t.code(null,`[METHOD ]/my/path`),` - full exact route match (`,t.strong(null,`must be without trailing slash`),`; "METHOD" is optional).`,t.br(),`For example:`,t.ul({className:`m-0`},t.li(null,t.code(null,`/hello`),` - matches `,t.code(null,`GET /hello`),`, `,t.code(null,`POST /hello`),`, etc.`),t.li(null,t.code(null,`POST /hello`),` - matches only `,t.code(null,`POST /hello`)))),t.li({className:`m-b-sm`},t.code(null,`[METHOD ]/my/prefix`,t.strong(null,`/`)),` - path prefix (`,t.strong(null,`must end with trailing slash;`),`"METHOD" is optional). For example:`,t.ul({className:`m-0`},t.li(null,t.code(null,`/hello/`),` - matches `,t.code(null,`GET /hello`),`, `,t.code(null,`POST /hello/a/b/c`),`, etc.`),t.li(null,t.code(null,`POST /hello/`),` - matches `,t.code(null,`POST /hello`),`, `,t.code(null,`POST /hello/a/b/c`),`, etc.`))),t.li({className:`m-b-0`},t.code(null,`collectionName:predefinedTag`),` - targets a specific action of a single collection.`,` To apply the rule for all collections you can use the `,t.code(null,`*`),` wildcard. For example:`,t.code(null,`posts:create`),`, `,t.code(null,`users:listAuthMethods`),`, `,t.code(null,`*:auth`),`.`,t.br(),`The predifined collection tags are (`,t.em(null,`there should be autocomplete once you start typing`),`):`,t.ul({className:`m-0`},()=>Jr.map(e=>t.li(null,e.value.replace(`*:`,`:`),()=>{if(e.description)return t.em({className:`txt-hint`},` (`,e.description,`)`)})))))),t.footer({className:`modal-footer`},t.button({type:`button`,className:`btn transparent m-r-auto`,onclick:()=>app.modals.close()},t.span({className:`txt`},`Close`))))}function Zr(e){if(!e)return;let n=[{},{}];return e.sort((e,r)=>{n[0].length=e.label.length,n[0].isTag=e.label.includes(`:`)||!e.label.includes(`/`),n[0].isWildcardTag=n[0].isTag&&e.label.startsWith(`*`),n[0].isExactTag=n[0].isTag&&!n[0].isWildcardTag,n[0].isPrefix=!n[0].isTag&&e.label.endsWith(`/`),n[0].hasMethod=!n[0].isTag&&e.label.includes(` /`),n[1].length=r.label.length,n[1].isTag=r.label.includes(`:`)||!r.label.includes(`/`),n[1].isWildcardTag=n[1].isTag&&r.label.startsWith(`*`),n[1].isExactTag=n[1].isTag&&!n[1].isWildcardTag,n[1].isPrefix=!n[1].isTag&&r.label.endsWith(`/`),n[1].hasMethod=!n[1].isTag&&r.label.includes(` /`);for(let e of n)e.priority=0,e.isTag?(e.priority+=1e3,e.isExactTag?e.priority+=10:e.priority+=5):(e.hasMethod&&(e.priority+=10),e.isPrefix||(e.priority+=5));return n[0].isPrefix&&n[1].isPrefix&&(n[0].hasMethod&&n[1].hasMethod||!n[0].hasMethod&&!n[1].hasMethod)&&(n[0].length>n[1].length?n[0].priority+=1:n[0].length<n[1].length&&(n[1].priority+=1)),n[0].priority>n[1].priority?-1:+(n[0].priority<n[1].priority)}),e}function Qr(e){let n=[{value:``,label:`All`},{value:`@guest`,label:`Guest only`},{value:`@auth`,label:`Auth only`}],r=store({predefinedTags:Jr});i();async function i(){let e=[];try{e=await app.pb.collections.getFullList()}catch(e){console.warn(`loadPredefinedTags: failed to load collections`,e);return}r.predefinedTags=[];for(let n of e)n.system||(r.predefinedTags.push({value:n.name+`:list`}),r.predefinedTags.push({value:n.name+`:view`}),n.type!=`view`&&(r.predefinedTags.push({value:n.name+`:create`}),r.predefinedTags.push({value:n.name+`:update`}),r.predefinedTags.push({value:n.name+`:delete`})),n.type==`auth`&&(r.predefinedTags.push({value:n.name+`:listAuthMethods`}),r.predefinedTags.push({value:n.name+`:authRefresh`}),r.predefinedTags.push({value:n.name+`:auth`}),r.predefinedTags.push({value:n.name+`:authWithPassword`}),r.predefinedTags.push({value:n.name+`:authWithOAuth2`}),r.predefinedTags.push({value:n.name+`:authWithOTP`}),r.predefinedTags.push({value:n.name+`:requestOTP`}),r.predefinedTags.push({value:n.name+`:requestPasswordReset`}),r.predefinedTags.push({value:n.name+`:confirmPasswordReset`}),r.predefinedTags.push({value:n.name+`:requestVerification`}),r.predefinedTags.push({value:n.name+`:confirmVerification`}),r.predefinedTags.push({value:n.name+`:requestEmailChange`}),r.predefinedTags.push({value:n.name+`:confirmEmailChange`})),n.fields.find(e=>e.type==`file`)&&r.predefinedTags.push({value:n.name+`:file`}));r.predefinedTags=r.predefinedTags.concat(Jr)}function a(){Array.isArray(e.formSettings.rateLimits.rules)||(e.formSettings.rateLimits.rules=[]),e.formSettings.rateLimits.rules.push({label:``,maxRequests:200,duration:3,audience:``}),e.formSettings.rateLimits.rules.length==1&&(e.formSettings.rateLimits.enabled=!0)}function o(n){e.formSettings.rateLimits.rules.splice(n,1),e.formSettings.rateLimits.rules.length||(e.formSettings.rateLimits.enabled=!1)}let s=[];return t.details({pbEvent:`rateLimitAccordion`,className:`accordion rate-limit-accordion`,name:`settingsAccordion`,onmount:()=>{s.push(watch(()=>JSON.stringify(e.formSettings.rateLimits.rules),()=>{app.store.errors?.rateLimits?.rules&&delete app.store.errors.rateLimits}))},onunmount:()=>{s.forEach(e=>e?.unwatch())}},t.summary(null,t.i({className:`ri-pulse-fill`,ariaHidden:!0}),t.span({className:`txt`},`Rate limiting`),t.div({className:`flex-fill`}),()=>e.formSettings.rateLimits.enabled?t.span({className:`label success`},`Enabled`):t.span({className:`label`},`Disabled`),()=>{if(!app.utils.isEmpty(app.store.errors?.rateLimits))return t.i({className:`ri-error-warning-fill txt-danger`,ariaDescription:app.attrs.tooltip(`Has errors`,`left`)})}),t.div({className:`grid sm`},t.div({className:`col-lg-12`},t.div({className:`field`},t.input({id:`rateLimits.enabled`,name:`rateLimits.enabled`,type:`checkbox`,className:`switch`,checked:()=>e.formSettings.rateLimits.enabled||!1,onchange:n=>e.formSettings.rateLimits.enabled=n.target.checked}),t.label({htmlFor:`rateLimits.enabled`},t.span({className:`txt`},`Enable`),t.small({className:`txt-hint`},` (experimental)`)))),t.div({className:`col-lg-12`},t.div({className:`rate-limit-table-wrapper`},t.table({className:`rate-limit-table`},t.thead({hidden:()=>!e.formSettings.rateLimits.rules?.length},t.tr(null,t.th({className:`col-label`},`Rate limit label`),t.th({className:`col-requests`},`Max requests`,t.br(),t.small(null,`(per IP)`)),t.th({className:`col-duration`},`Interval`,t.br(),t.small(null,`(in seconds)`)),t.th({className:`col-audience`},`Targeted users`),t.th({className:`col-action`}))),t.tbody(null,()=>{let i=[],a=e.formSettings.rateLimits.rules||[];for(let e=0;e<a.length;e++){let s=a[e];i.push(t.tr({className:`rate-limit-row`},t.td({className:`col-label`},t.div({className:`field`},t.input({type:`text`,required:!0,className:`inline-error`,id:`rateLimits.rules.`+e+`.label`,name:`rateLimits.rules.`+e+`.label`,placeholder:`tag (users:create) or path (/api/)`,"html-list":`rateLimits.rules.`+e+`.label_list`,value:()=>s.label,oninput:e=>s.label=e.target.value}),t.datalist({id:`rateLimits.rules.`+e+`.label_list`},()=>r.predefinedTags.map(e=>t.option({value:e.value},e.label||``))))),t.td({className:`col-requests`},t.div({className:`field`},t.input({type:`number`,required:!0,placeholder:`Max requests*`,className:`inline-error`,min:1,step:1,name:`rateLimits.rules.`+e+`.maxRequests`,value:()=>s.maxRequests||0,oninput:e=>s.maxRequests=parseInt(e.target.value,10)}))),t.td({className:`col-duration`},t.div({className:`field`},t.input({type:`number`,required:!0,placeholder:`Interval*`,className:`inline-error`,min:1,step:1,name:`rateLimits.rules.`+e+`.duration`,value:()=>s.duration,oninput:e=>s.duration=parseInt(e.target.value,10)}))),t.td({className:`col-audience`},t.div({className:`field`},app.components.select({name:`rateLimits.rules.`+e+`.audience`,className:`inline-error`,options:n,required:!0,value:()=>s.audience||``,onchange:e=>{s.audience=e?.[0]?.value}}))),t.td({className:`col-action`},t.button({type:`button`,araiaDescription:app.attrs.tooltip(`Remove rule`),className:`btn sm secondary transparent circle`,onclick:()=>o(e)},t.i({className:`ri-close-line`})))))}return i}))),t.div({className:`flex m-t-sm`},t.button({type:`button`,className:`btn secondary sm`,onclick:()=>a()},t.i({className:`ri-add-line`,ariaHidden:!0}),t.span({className:`txt`},`Add rate limit rule`)),t.button({type:`button`,className:`link-hint txt-sm m-l-auto`,onclick:()=>Yr()},t.em(null,`Learn more about the rate limit rules`))))))}function $r(e){let n=[`X-Forwarded-For`,`Fly-Client-IP`,`CF-Connecting-IP`],r=[{label:`Use leftmost IP`,value:!0},{label:`Use rightmost IP`,value:!1}],i=store({isLoading:!1,realIP:``,possibleProxyHeader:``,get suggestedProxyHeaders(){return i.possibleProxyHeader?[i.possibleProxyHeader].concat(n.filter(e=>e!=i.possibleProxyHeader)):n},get isEnabled(){return!app.utils.isEmpty(e.formSettings.trustedProxy?.headers)}});a();async function a(){i.isLoading=!0;try{let e=await app.pb.health.check({requestKey:`loadProxyInfo`});i.realIP=e.data?.realIP||``,i.possibleProxyHeader=e.data?.possibleProxyHeader||``,i.isLoading=!1}catch(e){e.isAbort||(app.checkApiError(e),i.isLoading=!1)}}return t.details({pbEvent:`trustedProxyAccordion`,className:`accordion trusted-proxy-accordion`,name:`settingsAccordion`,open:()=>i.isLoading?!1:null},t.summary(null,t.i({className:`ri-route-line`,ariaHidden:!0}),t.span({className:`txt`},`User IP proxy headers`),()=>{if(i.isLoading)return t.span({className:`loader sm`});if(!i.isEnabled&&i.possibleProxyHeader)return t.i({className:`ri-alert-line txt-warning`,ariaDescription:app.attrs.tooltip(`Detected proxy header.
It is recommend to list it as trusted.`,`right`)});if(i.isEnabled&&i.possibleProxyHeader&&!e.formSettings.trustedProxy.headers.includes(i.possibleProxyHeader))return t.i({className:`ri-alert-line txt-hint`,ariaDescription:app.attrs.tooltip(`The configured proxy header doesn't match with the detected one.`,`right`)})},t.div({className:`flex-fill`}),()=>i.isEnabled?t.span({className:`label success`},`Enabled`):t.span({className:`label`},`Disabled`),()=>{if(!app.utils.isEmpty(app.store.errors?.trustedProxy))return t.i({className:`ri-error-warning-fill txt-danger`,ariaDescription:app.attrs.tooltip(`Has errors`,`left`)})}),t.p({className:`m-t-0`},`Below you should see your real IP. If not - configure the correct proxy header for your environment.`),t.div({hidden:()=>i.isLoading,className:`alert info m-b-sm`},t.div({className:`flex gap-5`},t.span(null,`Resolved user IP:`),t.strong(null,()=>i.realIP||`N/A`)),t.div({className:`flex gap-5`},t.span(null,`Detected proxy header:`),t.strong(null,()=>i.possibleProxyHeader||`N/A`))),t.div({className:`content m-b-sm`},t.p(null,`
When PocketBase is deployed on platforms like Fly or it is accessible through proxies such as
NGINX, requests from different users will originate from the same IP address (the IP of the proxy
connecting to your PocketBase app).
`),t.p(null,`
In this case to retrieve the actual user IP (used for rate limiting, logging, etc.) you need to
properly configure your proxy and list below the trusted headers that PocketBase could use to
extract the user IP.
`),t.p({className:`txt-bold`},`When using such proxy, to avoid spoofing it is recommended to:`),t.ul({className:`txt-bold`},t.li(null,`use headers that are controlled only by the proxy and cannot be manually set by the users`),t.li(null,`make sure that the PocketBase server can be accessed ONLY through the proxy`)),t.p(null,`You can clear the headers field if PocketBase is not deployed behind a proxy.`)),t.div({className:`grid sm`},t.div({className:`col-lg-9`},t.div({className:`fields`},t.div({className:`field`},t.label({htmlFor:`trustedProxy.headers`},`Trusted IP proxy headers`),t.input({type:`text`,id:`trustedProxy.headers`,name:`trustedProxy.headers`,placeholder:`Leave empty to disable`,value:()=>app.utils.joinNonEmpty(e.formSettings.trustedProxy.headers),oninput:n=>{let r=app.utils.splitNonEmpty(n.target.value,`,`),i=app.utils.joinNonEmpty(r);app.utils.joinNonEmpty(e.formSettings.trustedProxy.headers)!=i&&(e.formSettings.trustedProxy.headers=r)}})),t.div({className:`field addon`},t.button({type:`button`,className:()=>`btn sm secondary transparent ${app.utils.isEmpty(e.formSettings.trustedProxy.headers)?`hidden`:``}`,onclick:()=>{e.formSettings.trustedProxy.headers=[]}},t.span({className:`txt`},`Clear`)))),t.div({className:`field-help`},`Comma separated list of headers such as: `,t.div({className:`inline-flex gap-5`},()=>i.suggestedProxyHeaders.map(n=>t.div({type:`button`,className:`label sm link-hint`,onclick:()=>{e.formSettings.trustedProxy.headers=[n]},textContent:n}))))),t.div({className:`col-lg-3`},t.div({className:`field`},t.label({htmlFor:`trustedProxy.useLeftmostIP`},t.span({className:`txt`},`IP priority`),t.i({className:`ri-information-line tooltip-right`,ariaDescription:app.attrs.tooltip(`This is in case the proxy returns more than 1 IP as header value. The rightmost IP is usually considered to be the more trustworthy but this could vary depending on the proxy.`)})),app.components.select({id:`trustedProxy.useLeftmostIP`,name:`trustedProxy.useLeftmostIP`,options:r,required:!0,value:()=>e.formSettings.trustedProxy.useLeftmostIP||!1,onchange:n=>{e.formSettings.trustedProxy.useLeftmostIP=n?.[0]?.value}})))))}function ei(){app.store.title=`Application settings`;let e=store({isLoading:!1,isSaving:!1,formSettings:null,originalFormSettings:null,get originalFormSettingsHash(){return JSON.stringify(e.originalFormSettings)},get hasChanges(){return e.originalFormSettingsHash!=JSON.stringify(e.formSettings)}});n();async function n(){e.isLoading=!0;try{i(await app.pb.settings.getAll()),e.isLoading=!1}catch(e){e.isAbort||app.checkApiError(e)}}async function r(){if(!(e.isSaving||!e.hasChanges)){e.isSaving=!0,e.formSettings.rateLimits.rules=Zr(e.formSettings.rateLimits.rules);try{let n=app.utils.filterRedactedProps(e.formSettings);i(await app.pb.settings.update(n)),app.toasts.success(`Successfully saved application settings.`)}catch(e){app.checkApiError(e)}e.isSaving=!1}}function i(n={}){if(app.store.settings=JSON.parse(JSON.stringify(n)),!n.meta?.accentColor){let e=window.getComputedStyle(document.documentElement)?.getPropertyValue(`--accentColor`);e?.startsWith(`#`)&&(n.meta=n.meta||{},n.meta.accentColor=e.toLowerCase()||``)}e.originalFormSettings={meta:n.meta||{},batch:n.batch||{},trustedProxy:n.trustedProxy||{headers:[]},rateLimits:n.rateLimits||{rules:[]}},Zr(e.originalFormSettings.rateLimits.rules),e.formSettings=JSON.parse(JSON.stringify(e.originalFormSettings))}function a(){e.formSettings=JSON.parse(e.originalFormSettingsHash)}return t.div({pbEvent:`pageApplicationSettings`,className:`page page-application-settings`},Kr(),t.div({className:`page-content full-height`},t.header({className:`page-header`},t.nav({className:`breadcrumbs`},t.div({className:`breadcrumb-item`},`Settings`),t.div({className:`breadcrumb-item`},`Application`))),t.div({className:`wrapper m-b-base`},()=>e.isLoading?t.div({className:`block txt-center`},t.span({className:`loader lg`})):t.form({pbEvent:`applicationSettingsForm`,className:`grid application-settings-form`,inert:()=>e.isSaving,onsubmit:e=>{e.preventDefault(),r()}},t.div({className:`col-md-5`},t.div({className:`field`},t.label({htmlFor:`meta.appName`},`Application name`),t.input({id:`meta.appName`,name:`meta.appName`,type:`text`,required:!0,value:()=>e.formSettings.meta.appName||``,oninput:n=>e.formSettings.meta.appName=n.target.value}))),t.div({className:`col-md-5`},t.div({className:`field`},t.label({htmlFor:`meta.appURL`},`Application URL`),t.input({id:`meta.appURL`,name:`meta.appURL`,type:`url`,required:!0,value:()=>e.formSettings.meta.appURL||``,oninput:n=>e.formSettings.meta.appURL=n.target.value}))),t.div({className:`col-md-2`},()=>ti(e,e.isSaving)),t.div({className:`col-lg-12`},()=>$r(e),()=>Qr(e),()=>qr(e)),t.div({className:`col-lg-12`},t.div({className:`field`},t.input({id:`meta.hideControls`,name:`meta.hideControls`,type:`checkbox`,className:`switch`,checked:()=>e.formSettings.meta.hideControls,onchange:n=>e.formSettings.meta.hideControls=n.target.checked}),t.label({htmlFor:`meta.hideControls`},t.span({className:`txt`},`Hide/Lock collection and record controls`),t.i({className:`ri-information-line link-hint`,ariaDescription:app.attrs.tooltip(`To prevent accidental changes when in production environment, collections create and update buttons will be hidden.
Records update will also require an extra unlock step before save.`)})))),t.div({className:`col-lg-12`},t.hr()),t.div({className:`col-lg-12`},t.div({className:`flex`},t.div({className:`m-r-auto`}),t.button({type:`button`,className:`btn transparent secondary`,disabled:()=>e.isSaving,hidden:()=>!e.hasChanges,onclick:a},t.span({className:`txt`},`Cancel`)),t.button({className:()=>`btn expanded ${e.isSaving?`loading`:``}`,disabled:()=>!e.hasChanges||e.isSaving},t.span({className:`txt`},`Save changes`)))))),t.footer({className:`page-footer`},app.components.credits())))}function ti(e){let n=`accent_`+app.utils.randomString(),r=store({isTooLight:!1}),i,a;function o(e){clearTimeout(a),document.documentElement.style.setProperty(`--animationSpeed`,`0`),e?document.documentElement.style.setProperty(`--accentColor`,e.toLowerCase()):document.documentElement.style.removeProperty(`--accentColor`),a=setTimeout(()=>{document.documentElement.style.removeProperty(`--animationSpeed`)},100)}let s=[watch(()=>e.formSettings?.meta?.accentColor,e=>{clearTimeout(i),i=setTimeout(()=>{o(e)},100)})];return t.div({className:`field`,ariaDescription:app.attrs.tooltip(()=>r.isTooLight?`Invalid - color is too light`:``),onunmount:()=>{clearTimeout(i),o(e.formSettings.meta.accentColor),s.forEach(e=>e?.unwatch())}},t.label({htmlFor:n},t.span({className:`txt`},`Accent`),t.i({hidden:()=>!r.isTooLight,className:`txt-warning ri-alert-line`})),app.components.colorPicker({id:n,name:`meta.accentColor`,predefinedColors:()=>app.store.predefinedAccentColors,value:()=>e.formSettings.meta.accentColor,onchange:n=>{if(r.isTooLight=!1,!app.utils.isDarkEnoughForWhiteText(n)){r.isTooLight=!0;return}e.formSettings.meta.accentColor=n}}))}function ni(e={}){let n=store({onsave:null}),r=app.utils.extendStore(n,e),i=[{cron:`0 0 * * *`,label:`Every day at 00:00h`},{cron:`0 0 * * 0`,label:`Every sunday at 00:00h`},{cron:`0 0 * * 1,3`,label:`Every Mon and Wed at 00:00h`},{cron:`0 0 1 * *`,label:`Every first day of the month at 00:00h`}],a=store({showForm:!1,isLoading:!1,isSaving:!1,formSettings:null,initSerialized:`null`,enableAutoBackups:!1,get hasChanges(){return a.initSerialized!=JSON.stringify(a.formSettings)}});async function o(){a.isLoading=!0;try{c(await app.pb.settings.getAll()),a.isLoading=!1}catch(e){e.isAbort||app.checkApiError(e)}}async function s(){if(!(a.isSaving||!a.hasChanges)){a.isSaving=!0;try{let e=app.utils.filterRedactedProps(a.formSettings),r=await app.pb.settings.update(e);n.onsave?.(r),c(r),app.toasts.success(`Successfully saved backups settings.`)}catch(e){app.checkApiError(e)}a.isSaving=!1}}function c(e={}){app.store.settings=JSON.parse(JSON.stringify(e)),a.formSettings={backups:e?.backups||{}},a.enableAutoBackups=!!a.formSettings.backups.cron,a.initSerialized=JSON.stringify(a.formSettings)}function l(){a.formSettings=JSON.parse(a.initSerialized),a.enableAutoBackups=!!a.formSettings.backups.cron}return r.push(watch(()=>{!a.enableAutoBackups&&a.formSettings?.backups?.cron&&(a.formSettings.backups.cron=``)})),t.div({className:`block backups-settings-form-wrapper`,onmount:()=>{o()},onunmount:()=>{r.forEach(e=>e?.unwatch())}},t.button({type:`button`,className:()=>`btn secondary ${a.isLoading?`loading`:``}`,disabled:()=>a.isLoading||a.hasChanges,onclick:()=>a.showForm=!a.showForm},t.span({className:`txt`},`Backup options`),t.i({className:()=>a.showForm?`ri-arrow-up-s-line`:`ri-arrow-down-s-line`,ariaHidden:!0})),app.components.slide(()=>a.showForm,t.form({pbEvent:`backupsSettingsForm`,className:`grid backups-settings-form m-t-base`,inert:()=>a.isSaving,onsubmit:e=>{e.preventDefault(),s()}},()=>a.isLoading?t.div({className:`col-lg-12 txt-center`},t.span({className:`loader lg`})):[t.div({className:`col-lg-12`},t.div({className:`field`},t.input({id:`enableAutoBackupsToggle`,type:`checkbox`,className:`switch`,checked:()=>a.enableAutoBackups,onchange:e=>{a.enableAutoBackups=e.target.checked,a.formSettings.backups.cron||(a.formSettings.backups.cron=i[0].cron)}}),t.label({htmlFor:`enableAutoBackupsToggle`},`Enable auto backups`)),app.components.slide(()=>a.enableAutoBackups,t.div({className:`grid m-t-base m-b-base`},t.div({className:`col-lg-6`},t.div({className:`fields`},t.div({className:`field`},t.label({htmlFor:`backups.cron`},`Cron expression`),t.input({id:`backups.cron`,name:`backups.cron`,className:`txt-code`,type:`text`,placeholder:`e.g. 0 0 * * *`,required:()=>a.enableAutoBackups,value:()=>a.formSettings.backups.cron,oninput:e=>a.formSettings.backups.cron=e.target.value})),t.div({className:`field addon`},t.button({type:`button`,className:`btn outline sm`,"html-popovertarget":`cron-presets-dropdown`},t.span({className:`txt`},`Presets`),t.i({className:`ri-arrow-drop-down-line`,ariaHidden:!0})),t.div({id:`cron-presets-dropdown`,className:`dropdown sm txt-nowrap`,popover:`auto`},()=>i.map(e=>t.button({type:`button`,className:()=>`dropdown-item ${a.formSettings.backups.cron==e.cron?`active`:``}`,textContent:e.label,onclick:n=>{a.formSettings.backups.cron=e.cron,n.target.closest(`.dropdown`).hidePopover()}}))))),t.div({className:`field-help`},`Supports numeric list, steps, ranges or `,t.strong({className:`link-hint tooltip-bottom`,ariaDescription:app.attrs.tooltip(`@yearly
@annually
@monthly
@weekly
@daily
@midnight
@hourly`)},`macros`),`.`,t.br(),`By default the timezone is in UTC.`)),t.div({className:`col-lg-6`},t.div({className:`field`},t.label({htmlFor:`backups.cronMaxKeep`},`Max @auto backups to keep`),t.input({id:`backups.cronMaxKeep`,name:`backups.cronMaxKeep`,type:`number`,required:()=>a.enableAutoBackups,min:1,value:()=>a.formSettings.backups.cronMaxKeep,oninput:e=>{a.formSettings.backups.cronMaxKeep=parseInt(e.target.value,10)}})))))),t.div({className:`col-lg-12`},app.components.s3ConfigFields({toggleLabel:`Store backups in S3 storage`,testFilesystem:`backups`,config:()=>a.formSettings.backups.s3})),t.div({className:`col-lg-12`},t.hr()),t.div({className:`col-lg-12`},t.div({className:`flex`},t.div({className:`m-r-auto`}),t.button({hidden:()=>!a.hasChanges,type:`button`,className:`btn transparent secondary`,onclick:l},t.span({className:`txt`},`Cancel`)),t.button({className:()=>`btn expanded ${a.isSaving?`loading`:``}`,disabled:()=>!a.hasChanges||a.isSaving},t.span({className:`txt`},`Save changes`))))])))}function ri(e={oncreated:null}){let n=ii(e);n&&(document.body.appendChild(n),app.modals.open(n))}function ii(e){let n,r=`backup_create_`+app.utils.randomString(),i=store({name:``,isSubmitting:!1}),a;async function o(){if(!i.isSubmitting){i.isSubmitting=!0,clearTimeout(a),a=setTimeout(()=>{app.modals.close(n)},1500);try{await app.pb.backups.create(i.name,{requestKey:r}),i.isSubmitting=!1,e.oncreated&&e.oncreated(i.name),app.toasts.success(`Successfully generated new backup.`),app.modals.close(n)}catch(e){e.isAbort||(clearTimeout(a),i.isSubmitting=!1,app.checkApiError(e))}}}return n=t.div({pbEvent:`backupCreateModal`,className:`modal popup backup-create-modal`,onbeforeclose:()=>{i.isSubmitting&&app.toasts.info(`The backup was started but may take a while to complete. You can come back later.`)},onafterclose:e=>{clearTimeout(a),e?.remove()}},t.header({className:`modal-header`},t.h5({className:`m-auto txt-center`},`Initialize new backup`)),t.form({id:r,className:`modal-content backup-restore-form`,autocomplete:`off`,onsubmit:e=>{e.preventDefault(),o()}},t.div({className:`grid`},t.div({className:`col-lg-12`},t.div({className:`alert warning`},t.div({className:`content`},t.p(null,`Please note that during the backup other concurrent write requests may fail since the database will be temporary "locked" (this usually happens only during the ZIP generation).`),t.p({className:`txt-bold`},`If you are using S3 storage for the collections file upload, you'll have to backup them separately since they are not locally stored and they will not be included in the generated backup!`)))),t.div({className:`col-lg-12`},t.div({className:`field`},t.label({htmlFor:r+`_name`},`Backup name`),t.input({id:r+`_name`,name:`name`,type:`text`,pattern:`^[a-z0-9_-]+.zip$`,placeholder:`Leave empty to autogenerate`,value:()=>i.name,oninput:e=>i.name=e.target.value})),t.div({className:`field-help`},`Must be in the format [a-z0-9_-].zip`)))),t.footer({className:`modal-footer`},t.button({type:`button`,className:`btn transparent m-r-auto`,disabled:()=>i.isSubmitting,onclick:()=>app.modals.close(n)},t.span({className:`txt`},`Cancel`)),t.button({"html-form":r,type:`submit`,className:()=>`btn ${i.isSubmitting?`loading`:``}`,disabled:()=>i.isSubmitting},t.span({className:`txt`},`Start backup`)))),n}function ai(e){let n=oi(e);document.body.appendChild(n),app.modals.open(n)}function oi(e){let n=`backup_restore_`+app.utils.randomString(),r=store({key:e,keyConfirm:``,isSubmitting:!1,get canSubmit(){return r.key&&r.key==r.keyConfirm}}),i;async function a(){if(!(r.isSubmitting||!r.canSubmit)){clearTimeout(i),r.isSubmitting=!0;try{await app.pb.backups.restore(r.keyConfirm),i=setTimeout(()=>{window.location.reload(),r.isSubmitting=!1},2e3)}catch(e){clearTimeout(i),e?.isAbort||(r.isSubmitting=!1,app.checkApiError(e))}}}return t.div({pbEvent:`backupRestoreModal`,className:`modal popup backup-restore-modal`,onbeforeclose:()=>!r.isSubmitting,onafterclose:e=>{e?.remove()},onunmount:()=>{clearTimeout(i)}},t.header({className:`modal-header`},t.h5({className:`m-auto txt-center`},`Restore `,t.strong(null,()=>r.key))),t.form({id:n,className:`modal-content backup-restore-form`,autocomplete:`off`,onsubmit:e=>{e.preventDefault(),a()}},t.div({className:`grid`},t.div({className:`col-lg-12`},t.div({className:`alert danger`},t.div({className:`content`},t.p({className:`txt-bold`},`Please proceed with extreme caution and use it only with trusted backups!`),t.p(null,`Backup restore currently works only on UNIX based systems.`),t.p(null,`The restore operation will attempt to replace your existing `,t.code(null,`pb_data`),` with the one from the backup and will restart the application process.`),t.p(null,`This means that on success all of your data (including app settings, users, superusers, etc.) will be replaced with the ones from the backup.`),t.p(null,`The operation will be reverted if the backup is invalid (ex. missing `,t.code(null,`data.db`),` file).`),t.p(null,`Below is an oversimplified version of the restore flow:`),t.ol(null,t.li(null,`Replaces the current `,t.code(null,`pb_data`),` with the content from the backup.`),t.li(null,`Triggers app restart.`),t.li(null,`Applies all migrations that are missing in the restored `,t.code(null,`pb_data`),`.`),t.li(null,`Initializes the app server as usual.`))))),t.div({className:`col-lg-12`},t.div({className:`confirm-key-label m-b-sm`},`Type the backup name `,t.div({className:`label`},()=>r.key,app.components.copyButton(()=>r.key)),` to confirm:`),t.div({className:`field`},t.label({htmlFor:n+`_key`},`Backup name`),t.input({id:n+`_key`,name:`key`,type:`text`,required:!0,value:()=>r.keyConfirm,oninput:e=>r.keyConfirm=e.target.value}))))),t.footer({className:`modal-footer`},t.button({type:`button`,className:`btn transparent m-r-auto`,onclick:()=>app.modals.close(),disabled:()=>r.isSubmitting},t.span({className:`txt`},`Cancel`)),t.button({"html-form":n,type:`submit`,className:()=>`btn ${r.isSubmitting?`loading`:``}`,disabled:()=>r.isSubmitting||!r.canSubmit},t.span({className:`txt`},`Restore backup`))))}function si(e={}){let n=store({reset:null}),r=app.utils.extendStore(n,e),i=store({canBackup:!0,isLoading:!1,isDownloading:{},isDeleting:{},backups:[]});async function a(){i.isLoading=!0;try{i.backups=await app.pb.backups.getFullList(),i.backups.sort((e,n)=>e.modified<n.modified?1:e.modified>n.modified?-1:0),i.isLoading=!1}catch(e){e.isAbort||(app.checkApiError(e),i.isLoading=!1)}}async function o(e){app.modals.confirm(`Do you really want to delete ${e}?`,()=>s(e))}async function s(e){if(!i.isDeleting[e]){i.isDeleting[e]=!0;try{await app.pb.backups.delete(e),a(),app.toasts.success(`Successfully deleted ${e}.`)}catch(e){app.checkApiError(e)}delete i.isDeleting[e]}}async function c(){try{let e=await app.pb.health.check({requestKey:null}),n=i.canBackup;i.canBackup=e?.data?.canBackup||!1,i.canBackup&&n!=i.canBackup&&a()}catch(e){console.warn(`failed to load canBackup checks`,e)}}async function l(e){if(!i.isDownloading[e]){i.isDownloading[e]=!0;try{let n=await app.pb.files.getToken({requestKey:null});app.utils.download(app.pb.backups.getDownloadURL(n,e))}catch(e){app.checkApiError(e)}delete i.isDownloading[e]}}return t.div({className:`list`,onmount:e=>{r.push(watch(()=>n.reset,()=>{a()})),e._canBackupIntervalId=setInterval(()=>{c()},3500)},onunmount:e=>{clearInterval(e._canBackupIntervalId),r.forEach(e=>e?.unwatch())}},t.div({hidden:()=>!i.isLoading||i.backups.length,className:`list-item`},t.div({className:`skeleton-loader`})),t.div({hidden:()=>i.isLoading||i.backups.length,className:()=>`list-item`},t.div({className:`content block txt-hint`},`No backups found.`)),()=>i.backups.map(e=>t.div({className:()=>`list-item ${i.isLoading?`faded`:``}`},t.i({className:`ri-folder-zip-line`,ariaHidden:!0}),t.div({className:`content`},t.span({className:`backup-name txt-ellipsis`,title:()=>e.key,textContent:()=>e.key}),t.small({className:`backup-size txt-hint txt-nowrap`},`(`,()=>app.utils.formattedFileSize(e.size),`)`)),t.nav({hidden:()=>i.isLoading,className:`actions autohide`},t.button({type:`button`,ariaLabel:app.attrs.tooltip(`Download`),className:()=>`btn sm circle secondary transparent ${i.isDownloading[e.key]?`loading`:``}`,disabled:()=>i.isDeleting[e.key]||i.isDownloading[e.key],onclick:()=>l(e.key)},t.i({className:`ri-download-line`,ariaHidden:!0})),t.button({type:`button`,ariaLabel:app.attrs.tooltip(`Restore`),className:()=>`btn sm circle secondary transparent`,disabled:()=>i.isDeleting[e.key]||i.isDownloading[e.key],onclick:()=>ai(e.key)},t.i({className:`ri-restart-line`,ariaHidden:!0})),t.button({type:`button`,ariaLabel:app.attrs.tooltip(`Delete`),className:()=>`btn sm circle secondary transparent ${i.isDeleting[e.key]?`loading`:``}`,disabled:()=>i.isDeleting[e.key]||i.isDownloading[e.key],onclick:()=>o(e.key)},t.i({className:`ri-delete-bin-7-line`,ariaHidden:!0}))))),t.div({className:`list-item`},t.button({type:`button`,className:()=>`btn secondary block ${i.isLoading?`loading`:``}`,disabled:()=>!i.canBackup||i.isLoading,onclick:()=>{ri({oncreated:()=>a()})}},()=>i.canBackup?[t.i({className:`ri-play-circle-line`,ariaHidden:!0}),t.span({className:`txt`},`Initialize new backup`)]:[t.span({className:`loader sm`}),t.span({className:`txt`},`Backup/restore operation is in process`)])))}function ci(e=null){let n=`backup_upload_`+app.utils.randomString(),r=store({isUploading:!1});function i(e){e&&app.modals.confirm(`Note that we don't perform validations for the uploaded backup files. Proceed with extreme caution and only if you trust the source.\n\nDo you really want to upload "${e.name}"?`,()=>{a(e)},()=>{o()})}async function a(i){if(!(!i||r.isUploading)){r.isUploading=!0;try{let a=new FormData;a.set(`file`,i),await app.pb.backups.upload(a,{requestKey:n}),r.isUploading=!1,e(i),app.toasts.success(`Successfully uploaded a new backup.`)}catch(e){e.isAbort||(r.isUploading=!1,e.response?.formData?.file?.message?app.toasts.error(e.response.formData.file.message):app.checkApiError(e))}o()}}function o(){s&&(s.value=``)}let s=t.input({type:`file`,accept:`application/zip`,className:`hidden`,onchange:e=>{i(e.target?.files?.[0])}});return t.div(null,t.button({type:`button`,ariaLabel:app.attrs.tooltip(`Upload backup`),className:()=>`btn sm transparent secondary circle ${r.isUploading?`loading`:``}`,disabled:()=>r.isUploading,onclick:()=>s?.click(),onunmount:()=>{app.pb.cancelRequest(n)}},t.i({className:`ri-upload-cloud-line`,ariaHidden:!0})),s)}function li(e){app.store.title=`Backups`;let n=store({resetList:null});function r(){n.resetList=Date.now()}return t.div({pbEvent:`pageBackupsSettings`,className:`page page-backups-settings`},Kr(),t.div({className:`page-content full-height`},t.header({className:`page-header`},t.nav({className:`breadcrumbs`},t.div({className:`breadcrumb-item`},`Settings`),t.div({className:`breadcrumb-item`},()=>app.store.title))),t.div({className:`wrapper m-b-base`},t.div({className:`grid`},t.div({className:`col-lg-12`},t.div({className:`flex gap-10 m-b-sm`},t.div({className:`txt-lg`},`Backup and restore your PocketBase data`),app.components.refreshButton({className:`btn sm transparent secondary circle tooltip-bottom`,onclick:r}),ci(r)),si({reset:()=>n.resetList})),t.div({className:`col-lg-12`},ni({onsave:()=>r()})))),t.footer({className:`page-footer`},app.components.credits())))}function ui(e={}){let n=store({reset:null}),r=app.utils.extendStore(n,e),i=store({isLoading:!1,isRunning:{},crons:[]});async function a(){i.isLoading=!0;try{i.crons=await app.pb.crons.getFullList(),i.isLoading=!1}catch(e){e.isAbort||(app.checkApiError(e),i.isLoading=!1)}}async function o(e){if(!(!e||i.isRunning[e])){i.isRunning[e]=!0;try{await app.pb.crons.run(e),app.toasts.success(`Successfully triggered "${e}".`),i.isRunning[e]=!1}catch(n){n.isAbort||(ApiClient.error(n),i.isRunning[e]=!1)}}}return t.div({pbEvent:`cronsList`,className:`list`,onmount:()=>{r.push(watch(()=>n.reset,()=>{a()}))},onunmount:()=>{r.forEach(e=>e?.unwatch())}},()=>{if(!i.isLoading||i.crons.length)return;let e=[];for(let n=0;n<4;n++)e.push(t.div({rid:`skeleton_`+n,className:`list-item`},t.div({className:`skeleton-loader`})));return e},t.div({hidden:()=>i.isLoading||i.crons.length,className:`list-item`},t.div({className:`content block txt-hint`},`No registered crons found.`)),()=>i.crons.map(e=>t.div({className:()=>`list-item ${i.isLoading?`faded`:``}`},t.div({className:`content`},t.span({className:`cron-id txt-code txt-ellipsis`,title:()=>e.id,textContent:()=>e.id})),t.small({className:`cron-expression txt-hint txt-nowrap txt-code`},()=>e.expression),t.nav({hidden:()=>i.isLoading,className:`actions`},t.button({type:`button`,ariaLabel:app.attrs.tooltip(`Run`),className:()=>`btn sm circle secondary transparent ${i.isRunning[e.id]?`loading`:``}`,disabled:()=>i.isRunning[e.id],onclick:()=>o(e.id)},t.i({className:`ri-play-large-line`,ariaHidden:!0}))))))}function di(e){app.store.title=`Crons`;let n=store({resetList:null});function r(){n.resetList=Date.now()}return t.div({pbEvent:`pageCronsSettings`,className:`page`},Kr(),t.div({className:`page-content full-height`},t.header({className:`page-header`},t.nav({className:`breadcrumbs`},t.div({className:`breadcrumb-item`},`Settings`),t.div({className:`breadcrumb-item`},()=>app.store.title))),t.div({className:`wrapper m-b-base`},t.div({className:`flex gap-10 m-b-sm`},t.div({className:`txt-lg`},`Registered app cron jobs`),app.components.refreshButton({className:`btn sm transparent secondary circle`,onclick:r})),ui({reset:()=>n.resetList}),t.div({className:`txt-sm txt-hint m-t-sm`},`App cron jobs can be registered only programmatically with `,t.a({href:`https://pocketbase.io/docs/go-jobs-scheduling/`,target:`_blank`,rel:`noopener noreferrer`,textContent:`Go`}),` or `,t.a({href:`https://pocketbase.io/docs/js-jobs-scheduling/`,target:`_blank`,rel:`noopener noreferrer`,textContent:`JavaScript`}),`.`)),t.footer({className:`page-footer`},app.components.credits())))}function fi(e){app.store.title=`Mail settings`;let n=[{label:`Auto (StartTLS)`,value:!1},{label:`Always`,value:!0}],r=[{label:`PLAIN (default)`,value:`PLAIN`},{label:`LOGIN`,value:`LOGIN`}],i=store({isLoading:!1,isSaving:!1,formSettings:null,initSerialized:`null`,showMoreOptions:!1,get hasChanges(){return i.initSerialized!=JSON.stringify(i.formSettings)}});a();async function a(){i.isLoading=!0;try{s(await app.pb.settings.getAll()),i.isLoading=!1}catch(e){e.isAbort||app.checkApiError(e)}}async function o(){if(!(i.isSaving||!i.hasChanges)){i.isSaving=!0;try{let e=app.utils.filterRedactedProps(i.formSettings);s(await app.pb.settings.update(e)),app.toasts.success(`Successfully saved mail settings.`)}catch(e){app.checkApiError(e)}i.isSaving=!1}}function s(e={}){app.store.settings=JSON.parse(JSON.stringify(e)),i.formSettings={meta:e?.meta||{},smtp:e?.smtp||{}},i.formSettings.smtp.authMethod||(i.formSettings.smtp.authMethod=r[0].value),i.initSerialized=JSON.stringify(i.formSettings)}function c(){i.formSettings=JSON.parse(i.initSerialized)}return t.div({pbEvent:`pageMailSettings`,className:`page page-mail-settings`},Kr(),t.div({className:`page-content full-height`},t.header({className:`page-header`},t.nav({className:`breadcrumbs`},t.div({className:`breadcrumb-item`},`Settings`),t.div({className:`breadcrumb-item`},()=>app.store.title))),t.div({className:`wrapper m-b-base`},()=>i.isLoading?t.div({className:`block txt-center`},t.span({className:`loader lg`})):t.form({pbEvent:`mailSettingsForm`,className:`grid mail-settings-form`,inert:()=>i.isSaving,onsubmit:e=>{e.preventDefault(),o()}},t.div({className:`col-lg-12 txt-lg`},t.p(null,`Configure common settings for sending emails.`)),t.div({className:`col-lg-6`},t.div({className:`field`},t.label({htmlFor:`meta.senderName`},`Sender name`),t.input({id:`meta.senderName`,name:`meta.senderName`,type:`text`,required:!0,value:()=>i.formSettings.meta.senderName||``,oninput:e=>i.formSettings.meta.senderName=e.target.value}))),t.div({className:`col-lg-6`},t.div({className:`field`},t.label({htmlFor:`meta.senderAddress`},`Sender address`),t.input({id:`meta.senderAddress`,name:`meta.senderAddress`,type:`email`,required:!0,value:()=>i.formSettings.meta.senderAddress||``,oninput:e=>i.formSettings.meta.senderAddress=e.target.value}))),t.div({className:`col-lg-12`},t.div({className:`field`},t.input({id:`smtp.enabled`,name:`smtp.enabled`,type:`checkbox`,className:`switch`,checked:()=>!!i.formSettings.smtp.enabled,onchange:e=>i.formSettings.smtp.enabled=e.target.checked}),t.label({htmlFor:`smtp.enabled`},t.span({className:`txt`},`Use SMTP mail server `,t.strong(null,`(recommended)`)),t.i({className:`ri-information-line link-faded`,ariaDescription:app.attrs.tooltip(`By default PocketBase uses the unix "sendmail" command for sending emails. For better emails deliverability it is recommended to use a SMTP mail server.`)}))),app.components.slide(()=>i.formSettings.smtp.enabled,t.div({className:`grid m-t-sm`},t.div({className:`col-lg-4`},t.div({className:`field`},t.label({htmlFor:`smtp.host`},`SMTP server host`),t.input({id:`smtp.host`,name:`smtp.host`,type:`text`,required:()=>i.formSettings.smtp.enabled,value:()=>i.formSettings.smtp.host||``,oninput:e=>i.formSettings.smtp.host=e.target.value}))),t.div({className:`col-lg-2`},t.div({className:`field`},t.label({htmlFor:`smtp.port`},`Port`),t.input({id:`smtp.port`,name:`smtp.port`,type:`number`,min:0,step:1,required:()=>i.formSettings.smtp.enabled,value:()=>i.formSettings.smtp.port||``,oninput:e=>i.formSettings.smtp.port=parseInt(e.target.value,10)}))),t.div({className:`col-lg-3`},t.div({className:`field`},t.label({htmlFor:`smtp.username`},`Username`),t.input({id:`smtp.username`,name:`smtp.username`,type:`text`,autocomplete:`off`,value:()=>i.formSettings.smtp.username||``,oninput:e=>i.formSettings.smtp.username=e.target.value}))),t.div({className:`col-lg-3`},t.div({className:`field`},t.label({htmlFor:`smtp.password`},`Password`),t.input({id:`smtp.password`,name:`smtp.password`,type:`password`,autocomplete:`new-password`,value:()=>i.formSettings.smtp.password||``,oninput:e=>i.formSettings.smtp.password=e.target.value,onkeyup:e=>{e.key==`Backspace`&&i.formSettings.smtp.password===void 0&&(i.formSettings.smtp.password=``)},placeholder:()=>i.formSettings.smtp.password===void 0?`* * * * * *`:``})))),t.button({type:`button`,className:`btn secondary sm m-t-sm`,onclick:()=>i.showMoreOptions=!i.showMoreOptions},t.span({className:`txt`},()=>i.showMoreOptions?`Hide more options`:`Show more options`),t.i({className:()=>i.showMoreOptions?`ri-arrow-drop-up-line`:`ri-arrow-drop-down-line`})),app.components.slide(()=>i.showMoreOptions,t.div({className:`grid m-t-sm`},t.div({className:`col-lg-3`},t.div({className:`field`},t.label({htmlFor:`smtp.tls`},`TLS encryption`),app.components.select({id:`smtp.tls`,name:`smtp.tls`,required:!0,options:n,value:()=>i.formSettings.smtp.tls||!1,onchange:e=>{i.formSettings.smtp.tls=e?.[0]?.value}}))),t.div({className:`col-lg-3`},t.div({className:`field`},t.label({htmlFor:`smtp.authMethod`},`AUTH method`),app.components.select({id:`smtp.authMethod`,name:`smtp.authMethod`,required:!0,options:r,value:()=>i.formSettings.smtp.authMethod||r[0].value,onchange:e=>{i.formSettings.smtp.authMethod=e?.[0]?.value}}))),t.div({className:`col-lg-6`},t.div({className:`field`},t.label({htmlFor:`smtp.localName`},t.span({className:`txt`},`EHLO/HELO domain`),t.i({className:`ri-information-line link-hint tooltip-top`,ariaDescription:app.attrs.tooltip(`Some SMTP servers, such as the Gmail SMTP-relay, requires a proper domain name in the inital EHLO/HELO exchange and will reject attempts to use localhost.`)})),t.input({id:`smtp.localName`,name:`smtp.localName`,type:`text`,placeholder:`Default to localhost`,value:()=>i.formSettings.smtp.localName||``,oninput:e=>i.formSettings.smtp.localName=e.target.value}))))))),t.div({className:`col-lg-12`},t.hr()),t.div({className:`col-lg-12`},t.div({className:`flex`},t.div({className:`m-r-auto`}),()=>i.hasChanges?[t.button({type:`button`,className:`btn transparent secondary`,onclick:c},t.span({className:`txt`},`Cancel`)),t.button({className:()=>`btn expanded ${i.isSaving?`loading`:``}`,disabled:()=>!i.hasChanges||i.isSaving},t.span({className:`txt`},`Save changes`))]:t.button({type:`button`,className:()=>`btn expanded outline`,onclick:()=>app.modals.openMailTest()},t.i({className:`ri-mail-check-line`,ariaHidden:!0}),t.span({className:`txt`},`Send test email`)))))),t.footer({className:`page-footer`},app.components.credits())))}function pi(){app.store.title=`File storage`;let e=store({isLoading:!1,isSaving:!1,formSettings:null,initSerialized:`null`,originalFormSettings:null,get hasChanges(){return e.initSerialized!=JSON.stringify(e.formSettings)}});n();async function n(){e.isLoading=!0;try{i(await app.pb.settings.getAll()),e.isLoading=!1}catch(e){e.isAbort||app.checkApiError(e)}}async function r(){if(!(e.isSaving||!e.hasChanges)){e.isSaving=!0;try{let n=app.utils.filterRedactedProps(e.formSettings);i(await app.pb.settings.update(n)),app.toasts.success(`Successfully saved storage settings.`)}catch(e){app.checkApiError(e)}e.isSaving=!1}}function i(n={}){app.store.settings=JSON.parse(JSON.stringify(n)),e.formSettings={s3:n?.s3||{}},e.initSerialized=JSON.stringify(e.formSettings),e.originalFormSettings=JSON.parse(e.initSerialized)}function a(){e.formSettings=JSON.parse(e.initSerialized)}return t.div({pbEvent:`pageStorageSettings`,className:`page page-storage-settings`},Kr(),t.div({className:`page-content full-height`},t.header({className:`page-header`},t.nav({className:`breadcrumbs`},t.div({className:`breadcrumb-item`},`Settings`),t.div({className:`breadcrumb-item`},()=>app.store.title))),t.div({className:`wrapper m-b-base`},()=>e.isLoading?t.div({className:`block txt-center`},t.span({className:`loader lg`})):t.form({pbEvent:`storageSettingsForm`,className:`grid storage-settings-form`,inert:()=>e.isSaving,onsubmit:e=>{e.preventDefault(),r()}},t.div({className:`col-lg-12 txt-lg`},t.p(null,`By default PocketBase uses and recommends the local file system to store uploaded files because it is more performant, easier to manage and backup.`),t.p(null,`Alternatively, if you have limited disk space available, you could opt to an S3 compatible external storage.`)),t.div({className:`col-lg-12`},app.components.s3ConfigFields({config:()=>e.formSettings.s3,before:()=>{let n=e.originalFormSettings.s3?.enabled;if(n!=e.formSettings.s3?.enabled)return t.div({className:`alert info m-t-sm`},`If you have existing uploaded files, you'll have to migrate them manually from the `,t.strong(null,n?`S3 storage`:`local file system`),` to the `,t.strong(null,e.formSettings.s3?.enabled?`S3 storage`:`local file system`),`.`,t.br(),`There are several command line tools that can help you, such as: `,t.a({href:`https://github.com/rclone/rclone`,target:`_blank`,rel:`noopener noreferrer`,className:`txt-bold`,textContent:`rclone`}),`, `,t.a({href:`https://github.com/peak/s5cmd`,target:`_blank`,rel:`noopener noreferrer`,className:`txt-bold`,textContent:`s5cmd`}),`, etc.`)}})),t.div({className:`col-lg-12`},t.hr()),t.div({className:`col-lg-12`},t.div({className:`flex`},t.div({className:`m-r-auto`}),t.button({hidden:()=>!e.hasChanges,type:`button`,className:`btn transparent secondary`,onclick:a},t.span({className:`txt`},`Cancel`)),t.button({className:()=>`btn expanded ${e.isSaving?`loading`:``}`,disabled:()=>!e.hasChanges||e.isSaving},t.span({className:`txt`},`Save changes`)))))),t.footer({className:`page-footer`},app.components.credits())))}function mi(e){app.store.title=`Export collections`;let n=`export_`+app.utils.randomString(),r=store({isLoading:!1,collections:[],bulkSelected:{},get bulkSelectStr(){return JSON.stringify(app.utils.sortedCollectionsByType(Object.values(r.bulkSelected)),null,2)},get totalSelected(){return Object.keys(r.bulkSelected).length},get areAllSelected(){return r.collections.length&&r.collections.length==r.totalSelected}});i();async function i(){r.isLoading=!0;try{let e=await app.pb.collections.getFullList({requestKey:n});for(let n of e)delete n.created,delete n.updated,delete n.oauth2?.providers;r.collections=app.utils.sortedCollectionsByType(e),c(),r.isLoading=!1}catch(e){e.isAbort||(app.checkApiError(e),r.isLoading=!1)}}function a(){let e=app.utils.sortedCollectionsByType(Object.values(r.bulkSelected));app.utils.downloadJSON(e,`pb_schema`)}function o(){r.areAllSelected?s():c()}function s(){r.bulkSelected={}}function c(){r.bulkSelected={};for(let e of r.collections)r.bulkSelected[e.id]=e}function l(e){let n=JSON.parse(JSON.stringify(r.bulkSelected));r.bulkSelected[e.id]?delete n[e.id]:n[e.id]=e,r.bulkSelected=n}return t.div({pbEvent:`pageExportCollections`,className:`page page-export-collections`},Kr(),t.div({className:`page-content full-height`},t.header({className:`page-header`},t.nav({className:`breadcrumbs`},t.div({className:`breadcrumb-item`},`Settings`),t.div({className:`breadcrumb-item`},()=>app.store.title))),t.div({className:`wrapper m-b-base`},()=>r.isLoading?t.div({className:`txt-center`},t.span({className:`loader lg`})):t.div({className:`grid`},t.div({className:`col-lg-12`},t.div({className:`txt-lg`},`Below you'll find your current collections configuration that you could import in another PocketBase environment.`)),t.div({className:`col-lg-12`},t.div({className:`export-panel`},t.aside({className:`export-list`},t.div({className:`list-item`},t.div({className:`field`},t.input({id:n+`.select_all`,type:`checkbox`,checked:()=>r.areAllSelected,onchange:()=>o()}),t.label({htmlFor:n+`.select_all`},`Select all`))),()=>r.collections.map(e=>{let i=n+`_c_`+e.id;return t.div({className:`list-item`},t.div({className:`field`},t.input({id:i,type:`checkbox`,checked:()=>!!r.bulkSelected[e.id],onchange:()=>{l(e)}}),t.label({htmlFor:i},e.name)))})),t.output({className:`export-preview`},app.components.codeBlock({value:()=>r.bulkSelectStr,language:`plain`}),t.nav({className:`ctrls`},app.components.copyButton(()=>r.bulkSelectStr))))),t.div({className:`col-lg-12 txt-right`},t.button({className:`btn`,onclick:a},t.i({className:`ri-download-line`,ariaHidden:!0}),t.span({className:`txt`},`Download as JSON`))))),t.footer({className:`page-footer`},app.components.credits())))}function hi(e){app.store.title=`Import collections`;let n=`import_`+app.utils.randomString(),r=[],i=store({rawNewCollections:``,oldCollections:[],newCollections:[],collectionsToUpdate:[],deleteMissing:!0,isLoadingFile:!1,isLoadingOldCollections:!1,mergeWithOldCollections:!1,get isRawValid(){return!!i.rawNewCollections&&i.newCollections?.length>0&&i.newCollections.length==i.newCollections.filter(e=>!!e.id&&!!e.name).length},get collectionsToDelete(){return i.oldCollections.filter(e=>i.isRawValid&&!i.mergeWithOldCollections&&i.deleteMissing&&!i.newCollections.find(n=>n.id==e.id))},get collectionsToAdd(){return i.newCollections.filter(e=>i.isRawValid&&!i.oldCollections.find(n=>n.id==e.id))},get idReplacableCollections(){return i.newCollections.filter(e=>{let n=i.oldCollections.find(n=>n.name==e.name||n.id==e.id);if(!n)return!1;if(n.id!=e.id)return!0;let r=Array.isArray(n.fields)?n.fields:[],a=Array.isArray(e.fields)?e.fields:[];for(let e of a){if(r.find(n=>n.id==e.id))continue;let n=r.find(n=>n.name==e.name);if(n&&e.id!=n.id)return!0}return!1})},get hasChanges(){return!!i.rawNewCollections&&!!(i.collectionsToDelete.length||i.collectionsToAdd.length||i.collectionsToUpdate.length)},get canReview(){return!i.isLoadingOldCollections&&i.isRawValid&&i.hasChanges}}),a=t.input({id:n+`_load_json`,type:`file`,className:`hidden`,accept:`.json`,onchange:()=>{d(a.files?.[0])}});o();async function o(){i.isLoadingOldCollections=!0;try{let e=await app.pb.collections.getFullList();for(let n of e)delete n.created,delete n.updated,delete n.oauth2?.providers;i.oldCollections=e,i.isLoadingOldCollections=!1}catch(e){e.isAbort||(app.checkApiError(e),i.isLoadingOldCollections=!1)}}r.push(watch(()=>i.rawNewCollections,()=>{s()}));function s(){let e=[];try{e=JSON.parse(i.rawNewCollections),e=Array.isArray(e)?app.utils.filterDuplicatesByKey(e):[];for(let n of e)delete n.created,delete n.updated,n.fields&&=app.utils.filterDuplicatesByKey(n.fields)}catch{}i.newCollections=e}r.push(watch(()=>[i.newCollections,i.deleteMissing],()=>{c()}));function c(){if(i.collectionsToUpdate=[],i.isRawValid)for(let e of i.newCollections){let n=i.oldCollections.find(n=>n.id==e.id);!n?.id||!app.utils.hasCollectionChanges(n,e,i.deleteMissing)||i.collectionsToUpdate.push({new:e,old:n})}}function l(){for(let e of i.newCollections){let n=i.oldCollections.find(n=>n.name==e.name||n.id==e.id);if(!n)continue;let r=e.id,a=n.id;e.id=a;let o=Array.isArray(n.fields)?n.fields:[],s=Array.isArray(e.fields)?e.fields:[];for(let e of s){let n=o.find(n=>n.name==e.name);n&&n.id&&(e.id=n.id)}for(let e of i.newCollections)if(Array.isArray(e.fields))for(let n of e.fields)n.collectionId&&n.collectionId===r&&(n.collectionId=a);for(let n=0;n<e.indexes?.length;n++)e.indexes[n]=e.indexes[n].replace(/create\s+(?:unique\s+)?\s*index\s*(?:if\s+not\s+exists\s+)?(\S*)\s+on/gim,e=>e.replace(r,a))}i.rawNewCollections=JSON.stringify(i.newCollections,null,2)}function u(){i.rawNewCollections=``,a.value=``,app.store.errors=null}function d(e){i.isLoadingFile=!0;let n=new FileReader;n.onload=async e=>{i.isLoadingFile=!1,a.value=``,i.rawNewCollections=e.target.result,await new Promise(e=>setTimeout(e,0)),i.newCollections.length||(app.toasts.error(`Invalid collections configuration.`),u())},n.onerror=e=>{app.toasts.error(`Failed to load the imported JSON.`),console.warn(e),i.isLoadingFile=!1,a.value=``},n.readAsText(e)}function f(){let e=i.mergeWithOldCollections?app.utils.filterDuplicatesByKey(i.oldCollections.concat(i.newCollections)):i.newCollections;app.modals.openImportCollectionsReview(i.oldCollections,e,{deleteMissing:i.deleteMissing,onsubmit:()=>{u(),o()}})}return t.div({pbEvent:`pageImportCollections`,className:`page page-import-collections`,onunmount:()=>{r.forEach(e=>e?.unwatch())}},Kr(),t.div({className:`page-content full-height`},t.header({className:`page-header`},t.nav({className:`breadcrumbs`},t.div({className:`breadcrumb-item`},`Settings`),t.div({className:`breadcrumb-item`},()=>app.store.title))),t.div({className:`wrapper m-b-base`},()=>i.isLoadingOldCollections?t.div({className:`block txt-center`},t.span({className:`loader lg`})):t.div({className:`grid`},t.div({className:`col-lg-12`},t.span({className:`txt-lg m-r-5`},`Paste below the collections configuration you want to import or`),t.label({htmlFor:a.id,className:()=>`btn sm outline ${i.isLoadingFile?`loading`:``}`},t.span({className:`txt`},`Load from JSON file`)),a,t.p({className:`txt-hint`},t.em(null,`You can use the `,t.a({href:`https://pocketbase.io/docs/go-migrations/`,target:`_blank`,rel:`noopener noreferrer`,textContent:`Go`}),` or `,t.a({href:`https://pocketbase.io/docs/js-migrations/`,target:`_blank`,rel:`noopener noreferrer`,textContent:`JS`}),` migrations to manage your collections programmatically in more granular and version controlled manner.`))),t.div({className:`col-lg-12`},t.div({className:`field`},t.label({htmlFor:n+`_collections_field`},`Collections`),t.textarea({id:n+`_collections_field`,name:`collections`,rows:12,className:`txt-code`,spellcheck:!1,autocorrect:!1,autocomplete:`off`,autocapitalize:`off`,value:()=>i.rawNewCollections,oninput:e=>i.rawNewCollections=e.target.value})),t.div({className:()=>`field-help error ${i.rawNewCollections&&!i.isRawValid?``:`hidden`}`},`Invalid collections configuration.`)),t.div({className:()=>`col-lg-12 ${i.isRawValid?``:`hidden`}`},t.div({className:`field`},t.input({id:n+`_merge_checkbox`,type:`checkbox`,className:`switch`,checked:()=>i.mergeWithOldCollections,onchange:e=>i.mergeWithOldCollections=e.target.checked}),t.label({htmlFor:n+`_merge_checkbox`},`Merge with the existing collections`))),t.div({className:()=>`col-lg-12 ${i.isRawValid&&!i.hasChanges?``:`hidden`}`},t.div({className:`alert info`},t.div({className:`content`},t.p(null,`Your collections configuration is already up-to-date!`)))),t.div({className:()=>`col-lg-12 ${i.isRawValid&&i.hasChanges?``:`hidden`}`},t.p({className:`txt-hint txt-bold`},`Detected changes`),t.div({className:`list`},()=>i.collectionsToDelete.map(e=>t.div({className:`list-item`},t.span({className:`label import-change-label danger`,textContent:`Deleted`}),t.div({className:`inline-flex gap-5`},t.strong({textContent:()=>e.name}),t.small({className:()=>`txt-hint ${e.id?``:`hidden`}`,textContent:()=>e.id})))),()=>i.collectionsToUpdate.map(e=>t.div({className:`list-item`},t.span({className:`label import-change-label warning`,textContent:`Changed`}),t.div({className:`inline-flex gap-5`},()=>{if(e.old.name!=e.new.name)return[t.span({className:`txt-strikethrough txt-hint`,textContent:e.old.name}),t.i({className:`ri-arrow-right-line txt-sm`,ariaHidden:!0})]},t.strong({textContent:()=>e.new.name}),t.small({className:()=>`txt-hint ${e.new.id?``:`hidden`}`,textContent:()=>e.new.id})))),()=>i.collectionsToAdd.map(e=>t.div({className:`list-item`},t.span({className:`label import-change-label success`,textContent:`Added`}),t.div({className:`inline-flex gap-5`},t.strong({textContent:()=>e.name}),t.small({className:()=>`txt-hint ${e.id?``:`hidden`}`,textContent:()=>e.id})))))),t.div({className:()=>`col-lg-12 ${i.idReplacableCollections?.length?``:`hidden`}`},t.div({className:`alert warning`},t.div({className:`content`},t.p(null,`Some of the imported collections share the same name and/or fields but are imported with different IDs.`),t.p(null,`You can replace them in the import if you want to:`,t.button({type:`button`,className:`btn warning sm m-l-10`,textContent:`Replace with original IDs`,onclick:l}))))),t.div({className:`col-lg-12`},t.div({className:`flex`},t.button({type:`button`,className:()=>`btn secondary ${i.rawNewCollections?``:`hidden`}`,onclick:u},t.span({className:`txt`},`Clear`)),t.button({type:`button`,className:`btn expanded-lg m-l-auto`,disabled:()=>!i.canReview,onclick:f},t.span({className:`txt`},`Review`)))))),t.footer({className:`page-footer`},app.components.credits())))}window.app=window.app||{},window.app.routes=window.app.routes||{},window.app.routes.fallbackPath=`#/collections`,app.routes.guestOnly=function(e,n){if(app.store._ready)throw Error(`the router is already initialized`);gi[e]=async e=>{if(app.pb.authStore.isValid&&app.pb.authStore.record?.id){window.location.hash=`#/`;return}app.store.showHeader=!1,app.store.page=await n(e)}},app.routes.superuserOnly=function(e,n){if(app.store._ready)throw Error(`the router is already initialized`);gi[e]=async e=>{if(!app.pb.authStore.isValid||!app.pb.authStore.record?.id){window.location.hash=`#/login`;return}app.store.showHeader=!0,app.store.page=await n(e)}},app.routes.blank=function(e,n){if(app.store._ready)throw Error(`the router is already initialized`);gi[e]=async e=>{app.store.showHeader=!1,app.store.page=await n(e)}};var gi={},_i;function vi(){_i&&_i(),_i=router(gi,{fallbackPath:app.routes.fallbackPath})}app.routes.guestOnly(`#/pbinstall/{token}`,async e=>{let{pageInstaller:n}=await F(async()=>{let{pageInstaller:e}=await import(`./pageInstaller-CboSj8bL.js`);return{pageInstaller:e}},__vite__mapDeps([12,13]),import.meta.url);return n(e)}),app.routes.guestOnly(`#/login`,e=>vr(e)),app.routes.guestOnly(`#/request-password-reset`,async e=>{let{pageRequestSuperuserPasswordReset:n}=await F(async()=>{let{pageRequestSuperuserPasswordReset:e}=await import(`./pageRequestSuperuserPasswordReset-BAmkaQ1W.js`);return{pageRequestSuperuserPasswordReset:e}},[],import.meta.url);return n(e)}),app.routes.blank(`#/auth/confirm-password-reset/{token}`,async e=>{let{pageConfirmPasswordReset:n}=await F(async()=>{let{pageConfirmPasswordReset:e}=await import(`./pageConfirmPasswordReset-xSsXQyFi.js`);return{pageConfirmPasswordReset:e}},__vite__mapDeps([14,13]),import.meta.url);return n(e)}),app.routes.blank(`#/auth/confirm-verification/{token}`,async e=>{let{pageConfirmVerification:n}=await F(async()=>{let{pageConfirmVerification:e}=await import(`./pageConfirmVerification-BSn_UexA.js`);return{pageConfirmVerification:e}},__vite__mapDeps([15,13]),import.meta.url);return n(e)}),app.routes.blank(`#/auth/confirm-email-change/{token}`,async e=>{let{pageConfirmEmailChange:n}=await F(async()=>{let{pageConfirmEmailChange:e}=await import(`./pageConfirmEmailChange-DWXtM27Q.js`);return{pageConfirmEmailChange:e}},__vite__mapDeps([16,13]),import.meta.url);return n(e)}),app.routes.blank(`#/auth/oauth2-redirect-success`,async e=>{let{pageOAuth2RedirectSuccess:n}=await F(async()=>{let{pageOAuth2RedirectSuccess:e}=await import(`./pageOAuth2RedirectSuccess-D2cNvtvq.js`);return{pageOAuth2RedirectSuccess:e}},[],import.meta.url);return n(e)}),app.routes.blank(`#/auth/oauth2-redirect-failure`,async e=>{let{pageOAuth2RedirectFailure:n}=await F(async()=>{let{pageOAuth2RedirectFailure:e}=await import(`./pageOAuth2RedirectFailure-CDpbQFyk.js`);return{pageOAuth2RedirectFailure:e}},[],import.meta.url);return n(e)}),app.routes.superuserOnly(`#/collections`,Pr),app.routes.superuserOnly(`#/logs`,Gr),app.routes.superuserOnly(`#/settings`,ei),app.routes.superuserOnly(`#/settings/mail`,fi),app.routes.superuserOnly(`#/settings/storage`,pi),app.routes.superuserOnly(`#/settings/backups`,li),app.routes.superuserOnly(`#/settings/crons`,di),app.routes.superuserOnly(`#/settings/export-collections`,mi),app.routes.superuserOnly(`#/settings/import-collections`,hi);var yi=t;t=new Proxy({},{get(e,n){return function(){let e=arguments?.[0];if(e&&e.pbEvent){let n=e.onmount;e.onmount=r=>{n?.(r),r.dataset.pb=e.pbEvent,document.dispatchEvent(new CustomEvent(`mount:`+e.pbEvent,{detail:r}))};let r=e.onunmount;e.onunmount=n=>{document.dispatchEvent(new CustomEvent(`unmount:`+e.pbEvent,{detail:n})),r?.(n)}}return yi[n](...arguments)}}}),document.body.prepend(t.main({"html-class":`app`,className:()=>`app ${app.store.settings?.meta?.hideControls?`hide-controls`:``}`},de(),e=>(typeof app.store.page==`function`&&app.store.page(e),app.store.page))),watch(()=>app.store._ready,e=>{e&&vi()});var bi=t.script({type:`module`,src:app.pb.buildURL(`/_/extensions.js`),onload:()=>{app.store._ready=!0},onerror:e=>{console.warn(`Failed to load extensions:`,e),app.store._ready=!0}});document.body.appendChild(bi);