\n\n\t\t\t\t\n\t\t\t\t\t 0\"\n\t\t\t\t\t\t:aria-label=\"t('photos', 'Unselect all')\"\n\t\t\t\t\t\t@click=\"resetSelection\">\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t{{ t('photos', 'Unselect all') }}\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t{{ t('photos', 'Add photos to this album') }}\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ t('photos', 'Edit album details') }}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ t('photos', 'Delete album') }}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t 0\">\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{{ t('photos', 'Remove selection from album') }}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\n\t\t\t\n\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t{{ t('photos', \"Add\") }}\n\t\t\t\t\n\t\t\t\n\t\t\n\n\t\t\n\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t{{ t('photos', 'Save') }}\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\n\t\t\n\t\t\t handleAlbumUpdate(event)\" />\n\t\t\n\t
\n\n\n\n\n\n"],"names":["_sfc_main","ActionFavorite","AlbumForm","Close","CollaboratorsSelectionForm","CollectionContent","DeleteOutline","PhotosPicker","HeaderNavigation","ImagePlusOutline","MapMarkerOutline","NcActionButton","NcActions","NcActionSeparator","NcButton","NcDialog","NcEmptyContent","NcLoadingIcon","NcModal","PencilOutline","Plus","ShareVariantOutline","FetchCollectionContentMixin","FetchFilesMixin","useIsMobile","fileId","file","albumsExtraProps","albumFilesExtraProps","album","changes","fileIds","collaborators","error","logger","filters","translate"],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"AlbumContent-BKBA5ISE.chunk.mjs","sources":["../src/views/AlbumContent.vue"],"sourcesContent":["\n\n\t
\n\n\t\t\t\t\n\t\t\t\t\t 0\"\n\t\t\t\t\t\t:aria-label=\"t('photos', 'Unselect all')\"\n\t\t\t\t\t\t@click=\"resetSelection\">\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t{{ t('photos', 'Unselect all') }}\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t{{ t('photos', 'Add photos to this album') }}\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ t('photos', 'Edit album details') }}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ t('photos', 'Delete album') }}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t 0\">\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{{ t('photos', 'Remove selection from album') }}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\n\t\t\t\n\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t{{ t('photos', \"Add\") }}\n\t\t\t\t\n\t\t\t\n\t\t\n\n\t\t\n\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t{{ t('photos', 'Save') }}\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\n\t\t\n\t\t\t handleAlbumUpdate(event)\" />\n\t\t\n\t
\n\n\n\n\n\n"],"names":["_sfc_main","ActionFavorite","AlbumForm","Close","CollaboratorsSelectionForm","CollectionContent","DeleteOutline","PhotosPicker","HeaderNavigation","ImagePlusOutline","MapMarkerOutline","NcActionButton","NcActions","NcActionSeparator","NcButton","NcDialog","NcEmptyContent","NcLoadingIcon","NcModal","PencilOutline","Plus","ShareVariantOutline","FetchCollectionContentMixin","FetchFilesMixin","useIsMobile","fileId","file","albumsExtraProps","albumFilesExtraProps","album","changes","fileIds","collaborators","error","logger","filters","translate"],"mappings":"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"}
\ No newline at end of file
diff --git a/js/AlbumForm-BISzN9cQ.chunk.mjs b/js/AlbumForm-DNYy3ar8.chunk.mjs
similarity index 99%
rename from js/AlbumForm-BISzN9cQ.chunk.mjs
rename to js/AlbumForm-DNYy3ar8.chunk.mjs
index 12b266dd87..7204618b00 100644
--- a/js/AlbumForm-BISzN9cQ.chunk.mjs
+++ b/js/AlbumForm-DNYy3ar8.chunk.mjs
@@ -1,2 +1,2 @@
-import{m,v as p,I as d,a as i}from"./index-DjIio1qt.chunk.mjs";import{t as s,C,k as f,s as y,r as k,g}from"./preload-helper-iHri5ttz.chunk.mjs";import{i as b,l as r,s as n,x as v,T as N,z as L,w as c}from"./index-6_vkf3an.chunk.mjs";import{N as F}from"./NcTextField-Czr9S6YO-RwCaeh-_.chunk.mjs";import{E as _,p as S,q as w,e as $,n as h,j as A,r as x,M}from"./icons-BPrPKxzl.chunk.mjs";import{P,a as B,f as V}from"./PhotosFiltersInput-Rq4vPTbx.chunk.mjs";import{S as l}from"./index-x9vhq81Z.chunk.mjs";import{N as E}from"./NcSelectUsers-B4w9UC_d-BckswLS_.chunk.mjs";import{F as O}from"./FetchCollectionContentMixin-B2MWChoj.chunk.mjs";const u="data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='mdi-account-group-outline'%20viewBox='0%200%2024%2024'%3e%3cpath%20d='M12,5A3.5,3.5%200%200,0%208.5,8.5A3.5,3.5%200%200,0%2012,12A3.5,3.5%200%200,0%2015.5,8.5A3.5,3.5%200%200,0%2012,5M12,7A1.5,1.5%200%200,1%2013.5,8.5A1.5,1.5%200%200,1%2012,10A1.5,1.5%200%200,1%2010.5,8.5A1.5,1.5%200%200,1%2012,7M5.5,8A2.5,2.5%200%200,0%203,10.5C3,11.44%203.53,12.25%204.29,12.68C4.65,12.88%205.06,13%205.5,13C5.94,13%206.35,12.88%206.71,12.68C7.08,12.47%207.39,12.17%207.62,11.81C6.89,10.86%206.5,9.7%206.5,8.5C6.5,8.41%206.5,8.31%206.5,8.22C6.2,8.08%205.86,8%205.5,8M18.5,8C18.14,8%2017.8,8.08%2017.5,8.22C17.5,8.31%2017.5,8.41%2017.5,8.5C17.5,9.7%2017.11,10.86%2016.38,11.81C16.5,12%2016.63,12.15%2016.78,12.3C16.94,12.45%2017.1,12.58%2017.29,12.68C17.65,12.88%2018.06,13%2018.5,13C18.94,13%2019.35,12.88%2019.71,12.68C20.47,12.25%2021,11.44%2021,10.5A2.5,2.5%200%200,0%2018.5,8M12,14C9.66,14%205,15.17%205,17.5V19H19V17.5C19,15.17%2014.34,14%2012,14M4.71,14.55C2.78,14.78%200,15.76%200,17.5V19H3V17.07C3,16.06%203.69,15.22%204.71,14.55M19.29,14.55C20.31,15.22%2021,16.06%2021,17.07V19H24V17.5C24,15.76%2021.22,14.78%2019.29,14.55M12,16C13.53,16%2015.24,16.5%2016.23,17H7.77C8.76,16.5%2010.47,16%2012,16Z'%20/%3e%3c/svg%3e",I={name:"CollaboratorsSelectionForm",components:{Close:$,ContentCopy:w,Check:S,Earth:_,NcButton:b,NcSelectUsers:E},mixins:[O],props:{albumName:{type:String,required:!0},collaborators:{type:Array,default:()=>[]},allowPublicLink:{type:Boolean,default:!0}},data(){return{availableCollaborators:{},selectedCollaboratorsKeys:[],currentSearchResults:[],loadingCollaborators:!1,randomId:Math.random().toString().substring(2,10),publicLinkCopied:!1,collaboratorTypes:l,config:{minSearchStringLength:parseInt(OC.config["sharing.minSearchStringLength"],10)||0}}},computed:{searchResults(){return this.currentSearchResults.filter(({id:t})=>t!==y()?.uid).map(t=>({key:`${t.type}:${t.id}`,id:t.id,user:t.id,displayName:t.label,type:t.type===l.User?"user":"group",iconSvg:t.type===l.Group?u:void 0})).filter(({key:t})=>!this.selectedCollaboratorsKeys.includes(t))},selectedCollaborators(){return this.selectedCollaboratorsKeys.map(t=>this.availableCollaborators[t])},selectedUsers:{get(){return this.selectedCollaborators.filter(({type:t})=>t!==l.Link).map(t=>({key:`${t.type}:${t.id}`,id:t.id,user:t.id,displayName:t.label,type:t.type===l.User?"user":"group",iconSvg:t.type===l.Group?u:void 0}))},set(t){this.selectedCollaboratorsKeys=t.map(({key:e})=>e)}},isPublicLinkSelected(){return this.selectedCollaboratorsKeys.includes(`${l.Link}`)},publicLink(){return this.availableCollaborators[l.Link]},publicLinkURL(){return`${window.location.protocol}//${window.location.host}${f(`apps/photos/public/${this.publicLink.id}`)}`},albumFileName(){return this.$store.getters.getAlbumName(this.albumName)}},watch:{collaborators(t){this.populateCollaborators(t)}},mounted(){this.populateCollaborators(this.collaborators)},methods:{async searchCollaborators(t){if(t!==void 0&&(t=t.trim(),!(t.length{switch(a.source){case"users":return{id:a.id,label:a.label,type:l.User};case"groups":return{id:a.id,label:a.label,type:l.Group};default:throw new Error(`Invalid collaborator source ${a.source}`)}}),this.availableCollaborators={...this.availableCollaborators,...this.currentSearchResults.reduce(this.indexCollaborators,{})}}catch(e){this.errorFetchingCollaborators=e,r.error(this.t("photos","Failed to fetch collaborators list."),{error:e}),n(this.t("photos","Failed to fetch collaborators list."))}finally{this.loadingCollaborators=!1}},populateCollaborators(t){const e=t.reduce(this.indexCollaborators,{});this.selectedCollaboratorsKeys=Object.keys(e),this.availableCollaborators={3:{id:"",label:this.t("photos","Public link"),type:l.Link},...this.availableCollaborators,...e}},indexCollaborators(t,e){return{...t,[`${e.type}${e.type===l.Link?"":":"}${e.type===l.Link?"":e.id}`]:e}},async createPublicLinkForAlbum(){this.selectEntity(`${l.Link}`),await this.updateAlbumCollaborators(),await this.fetchCollection(this.albumFileName,v)},async deletePublicLink(){this.unselectEntity(`${l.Link}`),this.availableCollaborators[3]={id:"",label:this.t("photos","Public link"),type:l.Link},this.publicLinkCopied=!1,await this.updateAlbumCollaborators()},async updateAlbumCollaborators(){try{await this.$store.dispatch("updateCollection",{collectionFileName:this.albumFileName,properties:{collaborators:this.selectedCollaborators}})}catch(t){r.error("[PublicAlbumContent] Error updating album",{error:t}),n(this.t("photos","Failed to update album."))}},async copyPublicLink(){await navigator.clipboard.writeText(this.publicLinkURL),this.publicLinkCopied=!0,setTimeout(()=>{this.publicLinkCopied=!1},1e4)},selectEntity(t){this.selectedCollaboratorsKeys.includes(t)||this.selectedCollaboratorsKeys.push(t)},unselectEntity(t){const e=this.selectedCollaboratorsKeys.indexOf(t);e!==-1&&this.selectedCollaboratorsKeys.splice(e,1)},t:s}};var U=function(){var t=this,e=t._self._c;return e("div",{staticClass:"manage-collaborators"},[e("h2",{staticClass:"manage-collaborators__title"},[t._v(" "+t._s(t.t("photos","Add collaborators"))+" ")]),e("form",{staticClass:"manage-collaborators__form",on:{submit:function(a){a.preventDefault()}}},[e("NcSelectUsers",{attrs:{"input-id":"sharing-search-input","input-label":t.t("photos","Add people or groups who can edit your album"),loading:t.loadingCollaborators,label:"label",filterable:!1,placeholder:t.t("photos","Search people or groups"),"clear-search-on-blur":()=>!1,multiple:!0,"append-to-body":!1,options:t.searchResults},on:{search:t.searchCollaborators,"option:selected":({key:a})=>t.selectEntity(a)},model:{value:t.selectedUsers,callback:function(a){t.selectedUsers=a},expression:"selectedUsers"}},[t._v(" "+t._s(t.t("photos","No recommendations. Start typing."))+" ")])],1),e("div",{staticClass:"actions"},[t.allowPublicLink?e("div",{staticClass:"actions__public-link"},[t.isPublicLinkSelected&&t.publicLink.id!==""?[e("NcButton",{staticClass:"manage-collaborators__public-link-button",attrs:{"aria-label":t.t("photos","Copy the public link"),title:t.publicLinkURL},on:{click:t.copyPublicLink},scopedSlots:t._u([{key:"icon",fn:function(){return[t.publicLinkCopied?e("Check"):e("ContentCopy")]},proxy:!0}],null,!1,845538853)},[t.publicLinkCopied?[t._v(" "+t._s(t.t("photos","Public link copied!"))+" ")]:[t._v(" "+t._s(t.t("photos","Copy public link"))+" ")]],2),e("NcButton",{attrs:{variant:"tertiary","aria-label":t.t("photos","Delete the public link")},on:{click:t.deletePublicLink}},[e("Close",{attrs:{slot:"icon"},slot:"icon"})],1)]:e("NcButton",{staticClass:"manage-collaborators__public-link-button",attrs:{disabled:t.isPublicLinkSelected&&t.publicLink.id==="","aria-label":t.t("photos","Create public link share")},on:{click:t.createPublicLinkForAlbum}},[e("Earth",{attrs:{slot:"icon"},slot:"icon"}),t._v(" "+t._s(t.t("photos","Share via public link"))+" ")],1)],2):t._e(),e("div",{staticClass:"actions__slot"},[t._t("default",null,{collaborators:t.selectedCollaborators})],2)])])},T=[],K=h(I,U,T,!1,null,"e411f323");const R=K.exports,z={name:"AlbumForm",components:{MapMarkerOutline:M,AccountMultiplePlusOutline:x,SendOutline:A,NcButton:b,NcLoadingIcon:L,NcTextField:F,CollaboratorsSelectionForm:R,PhotosFiltersInput:B,PhotosFiltersDisplay:P},props:{album:{type:Object,default:null},filtersValue:{type:Object,default:()=>({})},displayBackButton:{type:Boolean,default:!1}},data(){return{showCollaboratorView:!1,albumName:"",albumLocation:"",albumFilters:V.reduce((t,e)=>({...t,[e.id]:[]}),{}),loading:!1}},computed:{editMode(){return this.album!==null},sharingEnabled(){return OC.Share!==void 0},albumFileName(){return this.$store.getters.getAlbumName(this.albumName)},albumNameValidationError(){const t=this.$store.getters.albums[this.albumFileName];if(t!==void 0&&this.album!==t&&!this.loading)return s("files","This name is already in use.");try{p(this.albumName)}catch(e){if(!(e instanceof d))throw e;switch(e.reason){case i.Character:return s("files",'"{char}" is not allowed inside a filename.',{char:e.segment});case i.ReservedName:return;case i.Extension:return;default:return s("files","Invalid filename.")}}},canSubmit(){return this.albumName!==""&&this.albumNameValidationError===void 0&&!this.loading}},mounted(){this.editMode?(this.albumName=this.album?.basename,this.albumLocation=this.album?.attributes.location??"",this.albumFilters={...this.albumFilters,...structuredClone(this.album?.attributes.filters??{})}):this.albumFilters={...this.albumFilters,...structuredClone(this.filtersValue)},this.$nextTick(()=>{this.$refs.nameInput.$el.getElementsByTagName("input")[0].focus()})},methods:{submit(t=[]){this.canSubmit&&(this.editMode?this.handleUpdateAlbum():this.handleCreateAlbum(t))},async handleCreateAlbum(t=[]){try{this.loading=!0;const e=k({basename:this.albumName,filename:c+"/"+this.albumName,lastmod:"",size:0,type:"directory",etag:null,props:{displayname:this.albumName,resourcetype:{},nbItems:0,location:this.albumLocation,"last-photo":-1,date:m().format("MMMM YYYY"),collaborators:t,filters:this.filtersValue,source:g(`dav/${this.albumFileName}`)}},c);let a=await this.$store.dispatch("createCollection",{collection:e});if(a===void 0)return;const o={};this.albumLocation!==""&&(o.location=this.albumLocation),(this.albumLocation!==""||t.length!==0)&&(o.collaborators=t),Object.keys(this.filtersValue).length>0&&(o.filters=this.filtersValue),a=await this.$store.dispatch("updateCollection",{collectionFileName:this.albumFileName,properties:o}),this.$emit("done",{album:a})}finally{this.loading=!1}},async handleUpdateAlbum(){try{this.loading=!0;let t=this.album?.clone();const e=[];if(this.album!==null&&this.album.basename!==this.albumName&&(e.push("name"),t=await this.$store.dispatch("renameCollection",{collectionFileName:this.album.root+this.album.path,newBaseName:this.albumName}),t===this.album))return;this.album!==null&&this.album.attributes.location!==this.albumLocation&&(e.push("location"),t=await this.$store.dispatch("updateCollection",{collectionFileName:t.root+t.path,properties:{location:this.albumLocation}})),this.album!==null&&JSON.stringify(this.album.attributes.filters)!==JSON.stringify(this.albumFilters)&&(e.push("filters"),t=await this.$store.dispatch("updateCollection",{collectionFileName:t.root+t.path,properties:{filters:this.albumFilters}})),this.$emit("done",{album:t,changes:e})}finally{this.loading=!1}},selectFilter(t){this.albumFilters[t.filterId].push(t.value)},deselectFilter(t){const e=this.albumFilters[t.filterId].indexOf(t.value);e!==-1&&this.albumFilters[t.filterId].splice(e,1)},back(){this.$emit("back")},t:s}};var j=function(){var t=this,e=t._self._c;return t.showCollaboratorView?e("CollaboratorsSelectionForm",{attrs:{"album-name":t.albumName,"allow-public-link":!1},scopedSlots:t._u([{key:"default",fn:function({collaborators:a}){return[e("span",{staticClass:"left-buttons"},[e("NcButton",{attrs:{variant:"tertiary"},on:{click:function(o){t.showCollaboratorView=!1}}},[t._v(" "+t._s(t.t("photos","Back"))+" ")])],1),e("span",{staticClass:"right-buttons"},[e("NcButton",{attrs:{variant:"primary",disabled:!t.canSubmit},on:{click:function(o){return t.submit(a)}},scopedSlots:t._u([{key:"icon",fn:function(){return[t.loading?e("NcLoadingIcon",{attrs:{size:20}}):e("SendOutline",{attrs:{size:20}})]},proxy:!0}],null,!0)},[t._v(" "+t._s(t.editMode?t.t("photos","Save"):t.t("photos","Create album"))+" ")])],1)]}}])}):e("form",{staticClass:"album-form",on:{submit:function(a){return a.preventDefault(),t.submit()}}},[e("div",{staticClass:"form-inputs"},[e("NcTextField",{ref:"nameInput",attrs:{type:"text",name:"name","helper-text":t.albumNameValidationError,error:t.albumNameValidationError!==void 0,required:!0,label:t.t("photos","Name of the album")},model:{value:t.albumName,callback:function(a){t.albumName=typeof a=="string"?a.trim():a},expression:"albumName"}}),e("NcTextField",{attrs:{value:t.albumLocation,name:"location",type:"text",label:t.t("photos","Location of the album")},on:{"update:value":function(a){t.albumLocation=a}},scopedSlots:t._u([{key:"default",fn:function(){return[e("MapMarkerOutline",{attrs:{size:20}})]},proxy:!0}],null,!1,3863723734)})],1),e("PhotosFiltersInput",{attrs:{"selected-filters":t.albumFilters},on:{"select-filter":t.selectFilter}}),e("PhotosFiltersDisplay",{attrs:{"selected-filters":t.albumFilters},on:{"deselect-filter":t.deselectFilter}}),e("div",{staticClass:"form-buttons"},[e("span",{staticClass:"left-buttons"},[t.displayBackButton?e("NcButton",{attrs:{variant:"tertiary"},on:{click:t.back}},[t._v(" "+t._s(t.t("photos","Back"))+" ")]):t._e()],1),e("span",{staticClass:"right-buttons"},[t.sharingEnabled&&!t.editMode?e("NcButton",{attrs:{variant:"secondary",disabled:!t.canSubmit},on:{click:function(a){t.showCollaboratorView=!0}},scopedSlots:t._u([{key:"icon",fn:function(){return[e("AccountMultiplePlusOutline",{attrs:{size:20}})]},proxy:!0}],null,!1,1381680579)},[t._v(" "+t._s(t.t("photos","Add collaborators"))+" ")]):t._e(),e("NcButton",{attrs:{variant:"primary",disabled:!t.canSubmit},on:{click:function(a){return t.submit()}},scopedSlots:t._u([{key:"icon",fn:function(){return[t.loading?e("NcLoadingIcon",{attrs:{size:20}}):e("SendOutline",{attrs:{size:20}})]},proxy:!0}],null,!1,2348760288)},[t._v(" "+t._s(t.editMode?t.t("photos","Save"):t.t("photos","Create album"))+" ")])],1)])],1)},D=[],G=h(z,j,D,!1,null,"8461dd7d");const et=G.exports;export{et as A,R as C};
-//# sourceMappingURL=AlbumForm-BISzN9cQ.chunk.mjs.map
+import{m,v as p,I as d,a as i}from"./index-DjIio1qt.chunk.mjs";import{t as s,C,k as f,s as y,r as k,g}from"./preload-helper-iHri5ttz.chunk.mjs";import{i as b,l as r,s as n,x as v,T as N,z as L,w as c}from"./index-6_vkf3an.chunk.mjs";import{N as F}from"./NcTextField-Czr9S6YO-RwCaeh-_.chunk.mjs";import{E as _,p as S,q as w,e as $,n as h,j as A,r as x,M}from"./icons-BPrPKxzl.chunk.mjs";import{P,a as B,f as V}from"./PhotosFiltersInput-BJ4kTX4C.chunk.mjs";import{S as l}from"./index-x9vhq81Z.chunk.mjs";import{N as E}from"./NcSelectUsers-B4w9UC_d-BckswLS_.chunk.mjs";import{F as O}from"./FetchCollectionContentMixin-B2MWChoj.chunk.mjs";const u="data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='mdi-account-group-outline'%20viewBox='0%200%2024%2024'%3e%3cpath%20d='M12,5A3.5,3.5%200%200,0%208.5,8.5A3.5,3.5%200%200,0%2012,12A3.5,3.5%200%200,0%2015.5,8.5A3.5,3.5%200%200,0%2012,5M12,7A1.5,1.5%200%200,1%2013.5,8.5A1.5,1.5%200%200,1%2012,10A1.5,1.5%200%200,1%2010.5,8.5A1.5,1.5%200%200,1%2012,7M5.5,8A2.5,2.5%200%200,0%203,10.5C3,11.44%203.53,12.25%204.29,12.68C4.65,12.88%205.06,13%205.5,13C5.94,13%206.35,12.88%206.71,12.68C7.08,12.47%207.39,12.17%207.62,11.81C6.89,10.86%206.5,9.7%206.5,8.5C6.5,8.41%206.5,8.31%206.5,8.22C6.2,8.08%205.86,8%205.5,8M18.5,8C18.14,8%2017.8,8.08%2017.5,8.22C17.5,8.31%2017.5,8.41%2017.5,8.5C17.5,9.7%2017.11,10.86%2016.38,11.81C16.5,12%2016.63,12.15%2016.78,12.3C16.94,12.45%2017.1,12.58%2017.29,12.68C17.65,12.88%2018.06,13%2018.5,13C18.94,13%2019.35,12.88%2019.71,12.68C20.47,12.25%2021,11.44%2021,10.5A2.5,2.5%200%200,0%2018.5,8M12,14C9.66,14%205,15.17%205,17.5V19H19V17.5C19,15.17%2014.34,14%2012,14M4.71,14.55C2.78,14.78%200,15.76%200,17.5V19H3V17.07C3,16.06%203.69,15.22%204.71,14.55M19.29,14.55C20.31,15.22%2021,16.06%2021,17.07V19H24V17.5C24,15.76%2021.22,14.78%2019.29,14.55M12,16C13.53,16%2015.24,16.5%2016.23,17H7.77C8.76,16.5%2010.47,16%2012,16Z'%20/%3e%3c/svg%3e",I={name:"CollaboratorsSelectionForm",components:{Close:$,ContentCopy:w,Check:S,Earth:_,NcButton:b,NcSelectUsers:E},mixins:[O],props:{albumName:{type:String,required:!0},collaborators:{type:Array,default:()=>[]},allowPublicLink:{type:Boolean,default:!0}},data(){return{availableCollaborators:{},selectedCollaboratorsKeys:[],currentSearchResults:[],loadingCollaborators:!1,randomId:Math.random().toString().substring(2,10),publicLinkCopied:!1,collaboratorTypes:l,config:{minSearchStringLength:parseInt(OC.config["sharing.minSearchStringLength"],10)||0}}},computed:{searchResults(){return this.currentSearchResults.filter(({id:t})=>t!==y()?.uid).map(t=>({key:`${t.type}:${t.id}`,id:t.id,user:t.id,displayName:t.label,type:t.type===l.User?"user":"group",iconSvg:t.type===l.Group?u:void 0})).filter(({key:t})=>!this.selectedCollaboratorsKeys.includes(t))},selectedCollaborators(){return this.selectedCollaboratorsKeys.map(t=>this.availableCollaborators[t])},selectedUsers:{get(){return this.selectedCollaborators.filter(({type:t})=>t!==l.Link).map(t=>({key:`${t.type}:${t.id}`,id:t.id,user:t.id,displayName:t.label,type:t.type===l.User?"user":"group",iconSvg:t.type===l.Group?u:void 0}))},set(t){this.selectedCollaboratorsKeys=t.map(({key:e})=>e)}},isPublicLinkSelected(){return this.selectedCollaboratorsKeys.includes(`${l.Link}`)},publicLink(){return this.availableCollaborators[l.Link]},publicLinkURL(){return`${window.location.protocol}//${window.location.host}${f(`apps/photos/public/${this.publicLink.id}`)}`},albumFileName(){return this.$store.getters.getAlbumName(this.albumName)}},watch:{collaborators(t){this.populateCollaborators(t)}},mounted(){this.populateCollaborators(this.collaborators)},methods:{async searchCollaborators(t){if(t!==void 0&&(t=t.trim(),!(t.length{switch(a.source){case"users":return{id:a.id,label:a.label,type:l.User};case"groups":return{id:a.id,label:a.label,type:l.Group};default:throw new Error(`Invalid collaborator source ${a.source}`)}}),this.availableCollaborators={...this.availableCollaborators,...this.currentSearchResults.reduce(this.indexCollaborators,{})}}catch(e){this.errorFetchingCollaborators=e,r.error(this.t("photos","Failed to fetch collaborators list."),{error:e}),n(this.t("photos","Failed to fetch collaborators list."))}finally{this.loadingCollaborators=!1}},populateCollaborators(t){const e=t.reduce(this.indexCollaborators,{});this.selectedCollaboratorsKeys=Object.keys(e),this.availableCollaborators={3:{id:"",label:this.t("photos","Public link"),type:l.Link},...this.availableCollaborators,...e}},indexCollaborators(t,e){return{...t,[`${e.type}${e.type===l.Link?"":":"}${e.type===l.Link?"":e.id}`]:e}},async createPublicLinkForAlbum(){this.selectEntity(`${l.Link}`),await this.updateAlbumCollaborators(),await this.fetchCollection(this.albumFileName,v)},async deletePublicLink(){this.unselectEntity(`${l.Link}`),this.availableCollaborators[3]={id:"",label:this.t("photos","Public link"),type:l.Link},this.publicLinkCopied=!1,await this.updateAlbumCollaborators()},async updateAlbumCollaborators(){try{await this.$store.dispatch("updateCollection",{collectionFileName:this.albumFileName,properties:{collaborators:this.selectedCollaborators}})}catch(t){r.error("[PublicAlbumContent] Error updating album",{error:t}),n(this.t("photos","Failed to update album."))}},async copyPublicLink(){await navigator.clipboard.writeText(this.publicLinkURL),this.publicLinkCopied=!0,setTimeout(()=>{this.publicLinkCopied=!1},1e4)},selectEntity(t){this.selectedCollaboratorsKeys.includes(t)||this.selectedCollaboratorsKeys.push(t)},unselectEntity(t){const e=this.selectedCollaboratorsKeys.indexOf(t);e!==-1&&this.selectedCollaboratorsKeys.splice(e,1)},t:s}};var U=function(){var t=this,e=t._self._c;return e("div",{staticClass:"manage-collaborators"},[e("h2",{staticClass:"manage-collaborators__title"},[t._v(" "+t._s(t.t("photos","Add collaborators"))+" ")]),e("form",{staticClass:"manage-collaborators__form",on:{submit:function(a){a.preventDefault()}}},[e("NcSelectUsers",{attrs:{"input-id":"sharing-search-input","input-label":t.t("photos","Add people or groups who can edit your album"),loading:t.loadingCollaborators,label:"label",filterable:!1,placeholder:t.t("photos","Search people or groups"),"clear-search-on-blur":()=>!1,multiple:!0,"append-to-body":!1,options:t.searchResults},on:{search:t.searchCollaborators,"option:selected":({key:a})=>t.selectEntity(a)},model:{value:t.selectedUsers,callback:function(a){t.selectedUsers=a},expression:"selectedUsers"}},[t._v(" "+t._s(t.t("photos","No recommendations. Start typing."))+" ")])],1),e("div",{staticClass:"actions"},[t.allowPublicLink?e("div",{staticClass:"actions__public-link"},[t.isPublicLinkSelected&&t.publicLink.id!==""?[e("NcButton",{staticClass:"manage-collaborators__public-link-button",attrs:{"aria-label":t.t("photos","Copy the public link"),title:t.publicLinkURL},on:{click:t.copyPublicLink},scopedSlots:t._u([{key:"icon",fn:function(){return[t.publicLinkCopied?e("Check"):e("ContentCopy")]},proxy:!0}],null,!1,845538853)},[t.publicLinkCopied?[t._v(" "+t._s(t.t("photos","Public link copied!"))+" ")]:[t._v(" "+t._s(t.t("photos","Copy public link"))+" ")]],2),e("NcButton",{attrs:{variant:"tertiary","aria-label":t.t("photos","Delete the public link")},on:{click:t.deletePublicLink}},[e("Close",{attrs:{slot:"icon"},slot:"icon"})],1)]:e("NcButton",{staticClass:"manage-collaborators__public-link-button",attrs:{disabled:t.isPublicLinkSelected&&t.publicLink.id==="","aria-label":t.t("photos","Create public link share")},on:{click:t.createPublicLinkForAlbum}},[e("Earth",{attrs:{slot:"icon"},slot:"icon"}),t._v(" "+t._s(t.t("photos","Share via public link"))+" ")],1)],2):t._e(),e("div",{staticClass:"actions__slot"},[t._t("default",null,{collaborators:t.selectedCollaborators})],2)])])},T=[],K=h(I,U,T,!1,null,"e411f323");const R=K.exports,z={name:"AlbumForm",components:{MapMarkerOutline:M,AccountMultiplePlusOutline:x,SendOutline:A,NcButton:b,NcLoadingIcon:L,NcTextField:F,CollaboratorsSelectionForm:R,PhotosFiltersInput:B,PhotosFiltersDisplay:P},props:{album:{type:Object,default:null},filtersValue:{type:Object,default:()=>({})},displayBackButton:{type:Boolean,default:!1}},data(){return{showCollaboratorView:!1,albumName:"",albumLocation:"",albumFilters:V.reduce((t,e)=>({...t,[e.id]:[]}),{}),loading:!1}},computed:{editMode(){return this.album!==null},sharingEnabled(){return OC.Share!==void 0},albumFileName(){return this.$store.getters.getAlbumName(this.albumName)},albumNameValidationError(){const t=this.$store.getters.albums[this.albumFileName];if(t!==void 0&&this.album!==t&&!this.loading)return s("files","This name is already in use.");try{p(this.albumName)}catch(e){if(!(e instanceof d))throw e;switch(e.reason){case i.Character:return s("files",'"{char}" is not allowed inside a filename.',{char:e.segment});case i.ReservedName:return;case i.Extension:return;default:return s("files","Invalid filename.")}}},canSubmit(){return this.albumName!==""&&this.albumNameValidationError===void 0&&!this.loading}},mounted(){this.editMode?(this.albumName=this.album?.basename,this.albumLocation=this.album?.attributes.location??"",this.albumFilters={...this.albumFilters,...structuredClone(this.album?.attributes.filters??{})}):this.albumFilters={...this.albumFilters,...structuredClone(this.filtersValue)},this.$nextTick(()=>{this.$refs.nameInput.$el.getElementsByTagName("input")[0].focus()})},methods:{submit(t=[]){this.canSubmit&&(this.editMode?this.handleUpdateAlbum():this.handleCreateAlbum(t))},async handleCreateAlbum(t=[]){try{this.loading=!0;const e=k({basename:this.albumName,filename:c+"/"+this.albumName,lastmod:"",size:0,type:"directory",etag:null,props:{displayname:this.albumName,resourcetype:{},nbItems:0,location:this.albumLocation,"last-photo":-1,date:m().format("MMMM YYYY"),collaborators:t,filters:this.filtersValue,source:g(`dav/${this.albumFileName}`)}},c);let a=await this.$store.dispatch("createCollection",{collection:e});if(a===void 0)return;const o={};this.albumLocation!==""&&(o.location=this.albumLocation),(this.albumLocation!==""||t.length!==0)&&(o.collaborators=t),Object.keys(this.filtersValue).length>0&&(o.filters=this.filtersValue),a=await this.$store.dispatch("updateCollection",{collectionFileName:this.albumFileName,properties:o}),this.$emit("done",{album:a})}finally{this.loading=!1}},async handleUpdateAlbum(){try{this.loading=!0;let t=this.album?.clone();const e=[];if(this.album!==null&&this.album.basename!==this.albumName&&(e.push("name"),t=await this.$store.dispatch("renameCollection",{collectionFileName:this.album.root+this.album.path,newBaseName:this.albumName}),t===this.album))return;this.album!==null&&this.album.attributes.location!==this.albumLocation&&(e.push("location"),t=await this.$store.dispatch("updateCollection",{collectionFileName:t.root+t.path,properties:{location:this.albumLocation}})),this.album!==null&&JSON.stringify(this.album.attributes.filters)!==JSON.stringify(this.albumFilters)&&(e.push("filters"),t=await this.$store.dispatch("updateCollection",{collectionFileName:t.root+t.path,properties:{filters:this.albumFilters}})),this.$emit("done",{album:t,changes:e})}finally{this.loading=!1}},selectFilter(t){this.albumFilters[t.filterId].push(t.value)},deselectFilter(t){const e=this.albumFilters[t.filterId].indexOf(t.value);e!==-1&&this.albumFilters[t.filterId].splice(e,1)},back(){this.$emit("back")},t:s}};var j=function(){var t=this,e=t._self._c;return t.showCollaboratorView?e("CollaboratorsSelectionForm",{attrs:{"album-name":t.albumName,"allow-public-link":!1},scopedSlots:t._u([{key:"default",fn:function({collaborators:a}){return[e("span",{staticClass:"left-buttons"},[e("NcButton",{attrs:{variant:"tertiary"},on:{click:function(o){t.showCollaboratorView=!1}}},[t._v(" "+t._s(t.t("photos","Back"))+" ")])],1),e("span",{staticClass:"right-buttons"},[e("NcButton",{attrs:{variant:"primary",disabled:!t.canSubmit},on:{click:function(o){return t.submit(a)}},scopedSlots:t._u([{key:"icon",fn:function(){return[t.loading?e("NcLoadingIcon",{attrs:{size:20}}):e("SendOutline",{attrs:{size:20}})]},proxy:!0}],null,!0)},[t._v(" "+t._s(t.editMode?t.t("photos","Save"):t.t("photos","Create album"))+" ")])],1)]}}])}):e("form",{staticClass:"album-form",on:{submit:function(a){return a.preventDefault(),t.submit()}}},[e("div",{staticClass:"form-inputs"},[e("NcTextField",{ref:"nameInput",attrs:{type:"text",name:"name","helper-text":t.albumNameValidationError,error:t.albumNameValidationError!==void 0,required:!0,label:t.t("photos","Name of the album")},model:{value:t.albumName,callback:function(a){t.albumName=typeof a=="string"?a.trim():a},expression:"albumName"}}),e("NcTextField",{attrs:{value:t.albumLocation,name:"location",type:"text",label:t.t("photos","Location of the album")},on:{"update:value":function(a){t.albumLocation=a}},scopedSlots:t._u([{key:"default",fn:function(){return[e("MapMarkerOutline",{attrs:{size:20}})]},proxy:!0}],null,!1,3863723734)})],1),e("PhotosFiltersInput",{attrs:{"selected-filters":t.albumFilters},on:{"select-filter":t.selectFilter}}),e("PhotosFiltersDisplay",{attrs:{"selected-filters":t.albumFilters},on:{"deselect-filter":t.deselectFilter}}),e("div",{staticClass:"form-buttons"},[e("span",{staticClass:"left-buttons"},[t.displayBackButton?e("NcButton",{attrs:{variant:"tertiary"},on:{click:t.back}},[t._v(" "+t._s(t.t("photos","Back"))+" ")]):t._e()],1),e("span",{staticClass:"right-buttons"},[t.sharingEnabled&&!t.editMode?e("NcButton",{attrs:{variant:"secondary",disabled:!t.canSubmit},on:{click:function(a){t.showCollaboratorView=!0}},scopedSlots:t._u([{key:"icon",fn:function(){return[e("AccountMultiplePlusOutline",{attrs:{size:20}})]},proxy:!0}],null,!1,1381680579)},[t._v(" "+t._s(t.t("photos","Add collaborators"))+" ")]):t._e(),e("NcButton",{attrs:{variant:"primary",disabled:!t.canSubmit},on:{click:function(a){return t.submit()}},scopedSlots:t._u([{key:"icon",fn:function(){return[t.loading?e("NcLoadingIcon",{attrs:{size:20}}):e("SendOutline",{attrs:{size:20}})]},proxy:!0}],null,!1,2348760288)},[t._v(" "+t._s(t.editMode?t.t("photos","Save"):t.t("photos","Create album"))+" ")])],1)])],1)},D=[],G=h(z,j,D,!1,null,"8461dd7d");const et=G.exports;export{et as A,R as C};
+//# sourceMappingURL=AlbumForm-DNYy3ar8.chunk.mjs.map
diff --git a/js/AlbumForm-BISzN9cQ.chunk.mjs.license b/js/AlbumForm-DNYy3ar8.chunk.mjs.license
similarity index 100%
rename from js/AlbumForm-BISzN9cQ.chunk.mjs.license
rename to js/AlbumForm-DNYy3ar8.chunk.mjs.license
diff --git a/js/AlbumForm-BISzN9cQ.chunk.mjs.map b/js/AlbumForm-DNYy3ar8.chunk.mjs.map
similarity index 99%
rename from js/AlbumForm-BISzN9cQ.chunk.mjs.map
rename to js/AlbumForm-DNYy3ar8.chunk.mjs.map
index 4263fd4291..089cf45e63 100644
--- a/js/AlbumForm-BISzN9cQ.chunk.mjs.map
+++ b/js/AlbumForm-DNYy3ar8.chunk.mjs.map
@@ -1 +1 @@
-{"version":3,"file":"AlbumForm-BISzN9cQ.chunk.mjs","sources":["../node_modules/@mdi/svg/svg/account-group-outline.svg","../src/components/Albums/CollaboratorsSelectionForm.vue","../src/components/Albums/AlbumForm.vue"],"sourcesContent":["export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='mdi-account-group-outline'%20viewBox='0%200%2024%2024'%3e%3cpath%20d='M12,5A3.5,3.5%200%200,0%208.5,8.5A3.5,3.5%200%200,0%2012,12A3.5,3.5%200%200,0%2015.5,8.5A3.5,3.5%200%200,0%2012,5M12,7A1.5,1.5%200%200,1%2013.5,8.5A1.5,1.5%200%200,1%2012,10A1.5,1.5%200%200,1%2010.5,8.5A1.5,1.5%200%200,1%2012,7M5.5,8A2.5,2.5%200%200,0%203,10.5C3,11.44%203.53,12.25%204.29,12.68C4.65,12.88%205.06,13%205.5,13C5.94,13%206.35,12.88%206.71,12.68C7.08,12.47%207.39,12.17%207.62,11.81C6.89,10.86%206.5,9.7%206.5,8.5C6.5,8.41%206.5,8.31%206.5,8.22C6.2,8.08%205.86,8%205.5,8M18.5,8C18.14,8%2017.8,8.08%2017.5,8.22C17.5,8.31%2017.5,8.41%2017.5,8.5C17.5,9.7%2017.11,10.86%2016.38,11.81C16.5,12%2016.63,12.15%2016.78,12.3C16.94,12.45%2017.1,12.58%2017.29,12.68C17.65,12.88%2018.06,13%2018.5,13C18.94,13%2019.35,12.88%2019.71,12.68C20.47,12.25%2021,11.44%2021,10.5A2.5,2.5%200%200,0%2018.5,8M12,14C9.66,14%205,15.17%205,17.5V19H19V17.5C19,15.17%2014.34,14%2012,14M4.71,14.55C2.78,14.78%200,15.76%200,17.5V19H3V17.07C3,16.06%203.69,15.22%204.71,14.55M19.29,14.55C20.31,15.22%2021,16.06%2021,17.07V19H24V17.5C24,15.76%2021.22,14.78%2019.29,14.55M12,16C13.53,16%2015.24,16.5%2016.23,17H7.77C8.76,16.5%2010.47,16%2012,16Z'%20/%3e%3c/svg%3e\"","\n\n\t
\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ t('photos', 'Public link copied!') }}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ t('photos', 'Copy public link') }}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t{{ t('photos', 'Share via public link') }}\n\t\t\t\t\n\t\t\t
\n\n\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t
\n\n\n\n\n\n","\n\n\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{{ t('photos', 'Back') }}\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t{{ editMode ? t('photos', 'Save') : t('photos', 'Create album') }}\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n\n\n\n\n\n"],"names":["AccountGroupOutlineSvg","_sfc_main$1","Close","ContentCopy","Check","Earth","NcButton","NcSelectUsers","FetchCollectionContentMixin","ShareType","id","getCurrentUser","collaborator","key","collaboratorKey","type","newValue","generateUrl","collaborators","query","response","axios","generateOcsUrl","error","logger","showError","initialCollaborators","albumsExtraProps","index","translate","_sfc_main","MapMarkerOutline","AccountMultiplePlusOutline","SendOutline","NcLoadingIcon","NcTextField","CollaboratorsSelectionForm","PhotosFiltersInput","PhotosFiltersDisplay","filters","acc","filter","existingAlbum","t","validateFilename","InvalidFilenameError","InvalidFilenameErrorReason","localAlbum","resultToNode","albumsPrefix","moment","generateRemoteUrl","album","propertiesToUpdate","changes","filterOption"],"mappings":"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","x_google_ignoreList":[0]}
\ No newline at end of file
+{"version":3,"file":"AlbumForm-DNYy3ar8.chunk.mjs","sources":["../node_modules/@mdi/svg/svg/account-group-outline.svg","../src/components/Albums/CollaboratorsSelectionForm.vue","../src/components/Albums/AlbumForm.vue"],"sourcesContent":["export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='mdi-account-group-outline'%20viewBox='0%200%2024%2024'%3e%3cpath%20d='M12,5A3.5,3.5%200%200,0%208.5,8.5A3.5,3.5%200%200,0%2012,12A3.5,3.5%200%200,0%2015.5,8.5A3.5,3.5%200%200,0%2012,5M12,7A1.5,1.5%200%200,1%2013.5,8.5A1.5,1.5%200%200,1%2012,10A1.5,1.5%200%200,1%2010.5,8.5A1.5,1.5%200%200,1%2012,7M5.5,8A2.5,2.5%200%200,0%203,10.5C3,11.44%203.53,12.25%204.29,12.68C4.65,12.88%205.06,13%205.5,13C5.94,13%206.35,12.88%206.71,12.68C7.08,12.47%207.39,12.17%207.62,11.81C6.89,10.86%206.5,9.7%206.5,8.5C6.5,8.41%206.5,8.31%206.5,8.22C6.2,8.08%205.86,8%205.5,8M18.5,8C18.14,8%2017.8,8.08%2017.5,8.22C17.5,8.31%2017.5,8.41%2017.5,8.5C17.5,9.7%2017.11,10.86%2016.38,11.81C16.5,12%2016.63,12.15%2016.78,12.3C16.94,12.45%2017.1,12.58%2017.29,12.68C17.65,12.88%2018.06,13%2018.5,13C18.94,13%2019.35,12.88%2019.71,12.68C20.47,12.25%2021,11.44%2021,10.5A2.5,2.5%200%200,0%2018.5,8M12,14C9.66,14%205,15.17%205,17.5V19H19V17.5C19,15.17%2014.34,14%2012,14M4.71,14.55C2.78,14.78%200,15.76%200,17.5V19H3V17.07C3,16.06%203.69,15.22%204.71,14.55M19.29,14.55C20.31,15.22%2021,16.06%2021,17.07V19H24V17.5C24,15.76%2021.22,14.78%2019.29,14.55M12,16C13.53,16%2015.24,16.5%2016.23,17H7.77C8.76,16.5%2010.47,16%2012,16Z'%20/%3e%3c/svg%3e\"","\n\n\t
\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ t('photos', 'Public link copied!') }}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ t('photos', 'Copy public link') }}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t{{ t('photos', 'Share via public link') }}\n\t\t\t\t\n\t\t\t
\n\n\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t
\n\n\n\n\n\n","\n\n\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{{ t('photos', 'Back') }}\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t{{ editMode ? t('photos', 'Save') : t('photos', 'Create album') }}\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n\n\n\n\n\n"],"names":["AccountGroupOutlineSvg","_sfc_main$1","Close","ContentCopy","Check","Earth","NcButton","NcSelectUsers","FetchCollectionContentMixin","ShareType","id","getCurrentUser","collaborator","key","collaboratorKey","type","newValue","generateUrl","collaborators","query","response","axios","generateOcsUrl","error","logger","showError","initialCollaborators","albumsExtraProps","index","translate","_sfc_main","MapMarkerOutline","AccountMultiplePlusOutline","SendOutline","NcLoadingIcon","NcTextField","CollaboratorsSelectionForm","PhotosFiltersInput","PhotosFiltersDisplay","filters","acc","filter","existingAlbum","t","validateFilename","InvalidFilenameError","InvalidFilenameErrorReason","localAlbum","resultToNode","albumsPrefix","moment","generateRemoteUrl","album","propertiesToUpdate","changes","filterOption"],"mappings":"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","x_google_ignoreList":[0]}
\ No newline at end of file
diff --git a/js/AlbumsView-Bs2JAhOX.chunk.mjs b/js/AlbumsView-CPC_3yRI.chunk.mjs
similarity index 92%
rename from js/AlbumsView-Bs2JAhOX.chunk.mjs
rename to js/AlbumsView-CPC_3yRI.chunk.mjs
index 7ad69b11a2..d4bc79f843 100644
--- a/js/AlbumsView-Bs2JAhOX.chunk.mjs
+++ b/js/AlbumsView-CPC_3yRI.chunk.mjs
@@ -1,2 +1,2 @@
-import{a as s,h as r,t as a,k as l}from"./preload-helper-iHri5ttz.chunk.mjs";import{i,v as n,w as m,x as u,y as p}from"./index-6_vkf3an.chunk.mjs";import{N as c}from"./NcEmptyContent-BkpeWiV5.chunk.mjs";import{C as b,I as f,P as h,n as d}from"./icons-BPrPKxzl.chunk.mjs";import{A as C}from"./AlbumForm-BISzN9cQ.chunk.mjs";import{C as y,a as _}from"./CollectionsList-6GeFqfGW.chunk.mjs";import{H as v}from"./HeaderNavigation-6G2FmN95.chunk.mjs";import{F as g}from"./FetchCollectionsMixin-BuJ7c1sd.chunk.mjs";import"./index-DjIio1qt.chunk.mjs";import"./createElementId-DhjFt1I9-B2HCdIOx.chunk.mjs";import"./NcTextField-Czr9S6YO-RwCaeh-_.chunk.mjs";import"./useModelMigration-EhAWvqDD-C15wbtL_.chunk.mjs";import"./PhotosFiltersInput-Rq4vPTbx.chunk.mjs";import"./NcSelect-CHc1QupB-BHJEUvv_.chunk.mjs";import"./NcAvatar-DkAX4nqq-B0poB0w8.chunk.mjs";import"./NcActionButton-K4jUGMlW-Bs_jOwCM.chunk.mjs";import"./NcDateTimePicker-BnrbGiT7.chunk.mjs";import"./useFormatDateTime-DyMeKy1D.chunk.mjs";import"./NcDateTime-enXYuwj8-T7oCJafb.chunk.mjs";import"./collectionFetcher-DyDb1Dp2.chunk.mjs";import"./video-B7iCXJqN.chunk.mjs";import"./index-x9vhq81Z.chunk.mjs";import"./NcSelectUsers-B4w9UC_d-BckswLS_.chunk.mjs";import"./FetchCollectionContentMixin-B2MWChoj.chunk.mjs";import"./AbortControllerMixin-CCU9Utyn.chunk.mjs";const A=s({name:"AlbumsView",components:{Plus:h,ImageMultipleOutline:f,NcModal:n,NcButton:i,NcEmptyContent:c,CollectionsList:_,CollectionCover:y,HeaderNavigation:v,AlbumForm:C,CogOutline:b},filters:{coverUrl(t){return t===-1?"":l(`/apps/photos/api/v1/preview/${t}?x=512&y=512`)}},mixins:[g],setup(){return{isMobile:p()}},data(){return{showAlbumCreationForm:!1}},computed:{albums(){return this.$store.getters.albums}},async beforeMount(){this.fetchAlbums()},methods:{fetchAlbums(){this.fetchCollections(m,u)},handleAlbumCreated({album:t}){this.showAlbumCreationForm=!1,this.$router.push(`/albums/${t.basename}`)},t:a,n:r}});var x=function(){var t=this,o=t._self._c;return t._self._setupProxy,o("div",[o("CollectionsList",{staticClass:"albums-list",attrs:{collections:t.albums,loading:t.loadingCollections,error:t.errorFetchingCollections},scopedSlots:t._u([{key:"header",fn:function(){return[o("HeaderNavigation",{key:"navigation",attrs:{loading:t.loadingCollections,title:t.t("photos","Albums"),"root-title":t.t("photos","Albums")},on:{refresh:t.fetchAlbums}},[o("NcButton",{attrs:{"aria-label":t.isMobile?t.t("photos","New album"):void 0},on:{click:function(e){t.showAlbumCreationForm=!0}},scopedSlots:t._u([{key:"icon",fn:function(){return[o("Plus",{attrs:{size:20}})]},proxy:!0},t.isMobile?null:{key:"default",fn:function(){return[t._v(" "+t._s(t.t("photos","New album"))+" ")]},proxy:!0}],null,!0)})],1)]},proxy:!0},{key:"default",fn:function({collection:e}){return[o("CollectionCover",{key:e.basename,attrs:{"parent-route":"/albums","collection-name":e.basename,"alt-img":t.t("photos","Cover photo for album {albumName}",{albumName:e.basename}),"cover-url":t._f("coverUrl")(e.attributes["last-photo"])},scopedSlots:t._u([{key:"default",fn:function(){return[o("span",{staticClass:"album__name"},[t._v(" "+t._s(e.basename)+" ")]),Object.keys(e.attributes.filters).length!==0?o("CogOutline",{attrs:{"fill-color":"var(--color-text-lighter)"}}):t._e()]},proxy:!0},{key:"subtitle",fn:function(){return[o("div",{staticClass:"album__details"},[t._v(" "+t._s(e.attributes.date)+" ⸱ "+t._s(t.n("photos","%n item","%n photos and videos",e.attributes.nbItems))+" ")])]},proxy:!0}],null,!0)})]}},{key:"empty-collections-list",fn:function(){return[o("NcEmptyContent",{attrs:{name:t.t("photos","There is no album yet!")},scopedSlots:t._u([{key:"icon",fn:function(){return[o("ImageMultipleOutline")]},proxy:!0}])})]},proxy:!0}])}),t.showAlbumCreationForm?o("NcModal",{attrs:{"label-id":"new-album-form"},on:{close:function(e){t.showAlbumCreationForm=!1}}},[o("h2",{staticClass:"album-creation__heading"},[t._v(" "+t._s(t.t("photos","New album"))+" ")]),o("AlbumForm",{on:{done:t.handleAlbumCreated}})],1):t._e()],1)},N=[],k=d(A,x,N,!1,null,"aaa5b5ca");const X=k.exports;export{X as default};
-//# sourceMappingURL=AlbumsView-Bs2JAhOX.chunk.mjs.map
+import{a as s,h as r,t as a,k as l}from"./preload-helper-iHri5ttz.chunk.mjs";import{i,v as n,w as m,x as u,y as p}from"./index-6_vkf3an.chunk.mjs";import{N as c}from"./NcEmptyContent-BkpeWiV5.chunk.mjs";import{C as b,I as f,P as h,n as d}from"./icons-BPrPKxzl.chunk.mjs";import{A as C}from"./AlbumForm-DNYy3ar8.chunk.mjs";import{C as y,a as _}from"./CollectionsList-CiIbYZgv.chunk.mjs";import{H as v}from"./HeaderNavigation-6G2FmN95.chunk.mjs";import{F as g}from"./FetchCollectionsMixin-BuJ7c1sd.chunk.mjs";import"./index-DjIio1qt.chunk.mjs";import"./createElementId-DhjFt1I9-B2HCdIOx.chunk.mjs";import"./NcTextField-Czr9S6YO-RwCaeh-_.chunk.mjs";import"./useModelMigration-EhAWvqDD-C15wbtL_.chunk.mjs";import"./PhotosFiltersInput-BJ4kTX4C.chunk.mjs";import"./NcSelect-CHc1QupB-BHJEUvv_.chunk.mjs";import"./NcAvatar-DkAX4nqq-B0poB0w8.chunk.mjs";import"./NcActionButton-K4jUGMlW-Bs_jOwCM.chunk.mjs";import"./NcDateTimePicker-BnrbGiT7.chunk.mjs";import"./useFormatDateTime-DyMeKy1D.chunk.mjs";import"./NcDateTime-enXYuwj8-T7oCJafb.chunk.mjs";import"./collectionFetcher-DyDb1Dp2.chunk.mjs";import"./video-CFxEyJH4.chunk.mjs";import"./index-x9vhq81Z.chunk.mjs";import"./NcSelectUsers-B4w9UC_d-BckswLS_.chunk.mjs";import"./FetchCollectionContentMixin-B2MWChoj.chunk.mjs";import"./AbortControllerMixin-CCU9Utyn.chunk.mjs";const A=s({name:"AlbumsView",components:{Plus:h,ImageMultipleOutline:f,NcModal:n,NcButton:i,NcEmptyContent:c,CollectionsList:_,CollectionCover:y,HeaderNavigation:v,AlbumForm:C,CogOutline:b},filters:{coverUrl(t){return t===-1?"":l(`/apps/photos/api/v1/preview/${t}?x=512&y=512`)}},mixins:[g],setup(){return{isMobile:p()}},data(){return{showAlbumCreationForm:!1}},computed:{albums(){return this.$store.getters.albums}},async beforeMount(){this.fetchAlbums()},methods:{fetchAlbums(){this.fetchCollections(m,u)},handleAlbumCreated({album:t}){this.showAlbumCreationForm=!1,this.$router.push(`/albums/${t.basename}`)},t:a,n:r}});var x=function(){var t=this,o=t._self._c;return t._self._setupProxy,o("div",[o("CollectionsList",{staticClass:"albums-list",attrs:{collections:t.albums,loading:t.loadingCollections,error:t.errorFetchingCollections},scopedSlots:t._u([{key:"header",fn:function(){return[o("HeaderNavigation",{key:"navigation",attrs:{loading:t.loadingCollections,title:t.t("photos","Albums"),"root-title":t.t("photos","Albums")},on:{refresh:t.fetchAlbums}},[o("NcButton",{attrs:{"aria-label":t.isMobile?t.t("photos","New album"):void 0},on:{click:function(e){t.showAlbumCreationForm=!0}},scopedSlots:t._u([{key:"icon",fn:function(){return[o("Plus",{attrs:{size:20}})]},proxy:!0},t.isMobile?null:{key:"default",fn:function(){return[t._v(" "+t._s(t.t("photos","New album"))+" ")]},proxy:!0}],null,!0)})],1)]},proxy:!0},{key:"default",fn:function({collection:e}){return[o("CollectionCover",{key:e.basename,attrs:{"parent-route":"/albums","collection-name":e.basename,"alt-img":t.t("photos","Cover photo for album {albumName}",{albumName:e.basename}),"cover-url":t._f("coverUrl")(e.attributes["last-photo"])},scopedSlots:t._u([{key:"default",fn:function(){return[o("span",{staticClass:"album__name"},[t._v(" "+t._s(e.basename)+" ")]),Object.keys(e.attributes.filters).length!==0?o("CogOutline",{attrs:{"fill-color":"var(--color-text-lighter)"}}):t._e()]},proxy:!0},{key:"subtitle",fn:function(){return[o("div",{staticClass:"album__details"},[t._v(" "+t._s(e.attributes.date)+" ⸱ "+t._s(t.n("photos","%n item","%n photos and videos",e.attributes.nbItems))+" ")])]},proxy:!0}],null,!0)})]}},{key:"empty-collections-list",fn:function(){return[o("NcEmptyContent",{attrs:{name:t.t("photos","There is no album yet!")},scopedSlots:t._u([{key:"icon",fn:function(){return[o("ImageMultipleOutline")]},proxy:!0}])})]},proxy:!0}])}),t.showAlbumCreationForm?o("NcModal",{attrs:{"label-id":"new-album-form"},on:{close:function(e){t.showAlbumCreationForm=!1}}},[o("h2",{staticClass:"album-creation__heading"},[t._v(" "+t._s(t.t("photos","New album"))+" ")]),o("AlbumForm",{on:{done:t.handleAlbumCreated}})],1):t._e()],1)},N=[],k=d(A,x,N,!1,null,"aaa5b5ca");const X=k.exports;export{X as default};
+//# sourceMappingURL=AlbumsView-CPC_3yRI.chunk.mjs.map
diff --git a/js/AlbumsView-Bs2JAhOX.chunk.mjs.license b/js/AlbumsView-CPC_3yRI.chunk.mjs.license
similarity index 100%
rename from js/AlbumsView-Bs2JAhOX.chunk.mjs.license
rename to js/AlbumsView-CPC_3yRI.chunk.mjs.license
diff --git a/js/AlbumsView-Bs2JAhOX.chunk.mjs.map b/js/AlbumsView-CPC_3yRI.chunk.mjs.map
similarity index 98%
rename from js/AlbumsView-Bs2JAhOX.chunk.mjs.map
rename to js/AlbumsView-CPC_3yRI.chunk.mjs.map
index c51d462ce1..98d9d79296 100644
--- a/js/AlbumsView-Bs2JAhOX.chunk.mjs.map
+++ b/js/AlbumsView-CPC_3yRI.chunk.mjs.map
@@ -1 +1 @@
-{"version":3,"file":"AlbumsView-Bs2JAhOX.chunk.mjs","sources":["../src/views/AlbumsView.vue"],"sourcesContent":["\n\n\t
\n\n\n\n\n\n"],"names":["_sfc_main","defineComponent","Plus","ImageMultipleOutline","NcModal","NcButton","NcEmptyContent","CollectionsList","CollectionCover","HeaderNavigation","AlbumForm","CogOutline","lastPhoto","generateUrl","FetchCollectionsMixin","useIsSmallMobile","albumsPrefix","albumsExtraProps","album","translate","translatePlural"],"mappings":"myCA4FA,MAAAA,EAAAC,EAAA,CACA,KAAA,aACA,WAAA,CACA,KAAAC,EACA,qBAAAC,EACA,QAAAC,EACA,SAAAC,EACA,eAAAC,EACA,gBAAAC,EACA,gBAAAC,EACA,iBAAAC,EACA,UAAAC,EACA,WAAAC,CAAA,EAGA,QAAA,CACA,SAAAC,EAAA,CACA,OAAAA,IAAA,GACA,GAGAC,EAAA,+BAAAD,CAAA,cAAA,CACA,CAAA,EAGA,OAAA,CAAAE,CAAA,EAEA,OAAA,CAEA,MAAA,CACA,SAFAC,EAAA,CAEA,CAEA,EAEA,MAAA,CACA,MAAA,CACA,sBAAA,EAAA,CAEA,EAEA,SAAA,CACA,QAAA,CACA,OAAA,KAAA,OAAA,QAAA,MACA,CAAA,EAGA,MAAA,aAAA,CACA,KAAA,YAAA,CACA,EAEA,QAAA,CACA,aAAA,CACA,KAAA,iBACAC,EACAC,CAAA,CAEA,EAEA,mBAAA,CAAA,MAAAC,GAAA,CACA,KAAA,sBAAA,GACA,KAAA,QAAA,KAAA,WAAAA,EAAA,QAAA,EAAA,CACA,EAEA,EAAAC,EACA,EAAAC,CAAA,CAEA,CAAA"}
\ No newline at end of file
+{"version":3,"file":"AlbumsView-CPC_3yRI.chunk.mjs","sources":["../src/views/AlbumsView.vue"],"sourcesContent":["\n\n\t
\n\n\n\n\n\n"],"names":["_sfc_main","defineComponent","Plus","ImageMultipleOutline","NcModal","NcButton","NcEmptyContent","CollectionsList","CollectionCover","HeaderNavigation","AlbumForm","CogOutline","lastPhoto","generateUrl","FetchCollectionsMixin","useIsSmallMobile","albumsPrefix","albumsExtraProps","album","translate","translatePlural"],"mappings":"myCA4FA,MAAAA,EAAAC,EAAA,CACA,KAAA,aACA,WAAA,CACA,KAAAC,EACA,qBAAAC,EACA,QAAAC,EACA,SAAAC,EACA,eAAAC,EACA,gBAAAC,EACA,gBAAAC,EACA,iBAAAC,EACA,UAAAC,EACA,WAAAC,CAAA,EAGA,QAAA,CACA,SAAAC,EAAA,CACA,OAAAA,IAAA,GACA,GAGAC,EAAA,+BAAAD,CAAA,cAAA,CACA,CAAA,EAGA,OAAA,CAAAE,CAAA,EAEA,OAAA,CAEA,MAAA,CACA,SAFAC,EAAA,CAEA,CAEA,EAEA,MAAA,CACA,MAAA,CACA,sBAAA,EAAA,CAEA,EAEA,SAAA,CACA,QAAA,CACA,OAAA,KAAA,OAAA,QAAA,MACA,CAAA,EAGA,MAAA,aAAA,CACA,KAAA,YAAA,CACA,EAEA,QAAA,CACA,aAAA,CACA,KAAA,iBACAC,EACAC,CAAA,CAEA,EAEA,mBAAA,CAAA,MAAAC,GAAA,CACA,KAAA,sBAAA,GACA,KAAA,QAAA,KAAA,WAAAA,EAAA,QAAA,EAAA,CACA,EAEA,EAAAC,EACA,EAAAC,CAAA,CAEA,CAAA"}
\ No newline at end of file
diff --git a/js/CollectionsList-6GeFqfGW.chunk.mjs b/js/CollectionsList-CiIbYZgv.chunk.mjs
similarity index 94%
rename from js/CollectionsList-6GeFqfGW.chunk.mjs
rename to js/CollectionsList-CiIbYZgv.chunk.mjs
index 351b7e084e..220fa100fa 100644
--- a/js/CollectionsList-6GeFqfGW.chunk.mjs
+++ b/js/CollectionsList-CiIbYZgv.chunk.mjs
@@ -1,2 +1,2 @@
-import{a as r,j as n,c as s,t as i}from"./preload-helper-iHri5ttz.chunk.mjs";import{L as a}from"./video-B7iCXJqN.chunk.mjs";import{I as u,n as c,A as _}from"./icons-BPrPKxzl.chunk.mjs";import{N as p}from"./NcEmptyContent-BkpeWiV5.chunk.mjs";const m=r({__name:"CollectionCover",props:{coverUrl:null,altImg:null,parentRoute:null,collectionName:null},setup(t){const o=t,e=n(!1),l=s(()=>`${o.parentRoute}/${encodeURIComponent(o.collectionName)}`);return{__sfc:!0,props:o,coverLoadingError:e,link:l,RouterLink:a,ImageMultipleOutline:u}}});var d=function(){var t=this,o=t._self._c,e=t._self._setupProxy;return o(e.RouterLink,{staticClass:"collection-cover",attrs:{to:e.link}},[t.coverUrl!==""&&e.coverLoadingError===!1?o("img",{staticClass:"collection-cover__image",attrs:{src:t.coverUrl,alt:t.altImg},on:{error:function(l){e.coverLoadingError=!0}}}):o("div",{staticClass:"collection-cover__image collection-cover__image--placeholder"},[o(e.ImageMultipleOutline,{attrs:{size:128}})],1),o("div",{staticClass:"collection-cover__details"},[o("div",{staticClass:"collection-cover__details__title"},[t._t("default")],2),o("div",{staticClass:"collection-cover__details__subtitle"},[t._t("subtitle")],2)])])},v=[],C=c(m,d,v,!1,null,"719cd191");const I=C.exports,f={name:"CollectionsList",components:{AlertCircleOutline:_,NcEmptyContent:p},props:{collections:{type:Object,required:!0},loading:{type:Boolean,default:!1},error:{type:Error,default:null}},computed:{noCollection(){return Object.keys(this.collections).length===0}},methods:{t:i}};var g=function(){var t=this,o=t._self._c;return t.error?o("NcEmptyContent",{attrs:{name:t.t("photos","An error occurred")}},[o("AlertCircleOutline",{attrs:{slot:"icon"},slot:"icon"})],1):o("div",{staticClass:"collections"},[t._t("header"),t.noCollection&&!t.loading?t._t("empty-collections-list"):t.noCollection?t._e():o("ul",{staticClass:"collections__list"},t._l(t.collections,function(e){return o("li",{key:e.basename,attrs:{"data-cy-collections-list-collection":e.basename}},[t._t("default",null,{collection:e})],2)}),0)],2)},y=[],h=c(f,g,y,!1,null,"b585220f");const O=h.exports;export{I as C,O as a};
-//# sourceMappingURL=CollectionsList-6GeFqfGW.chunk.mjs.map
+import{a as r,j as n,c as s,t as i}from"./preload-helper-iHri5ttz.chunk.mjs";import{L as a}from"./video-CFxEyJH4.chunk.mjs";import{I as u,n as c,A as _}from"./icons-BPrPKxzl.chunk.mjs";import{N as p}from"./NcEmptyContent-BkpeWiV5.chunk.mjs";const m=r({__name:"CollectionCover",props:{coverUrl:null,altImg:null,parentRoute:null,collectionName:null},setup(t){const o=t,e=n(!1),l=s(()=>`${o.parentRoute}/${encodeURIComponent(o.collectionName)}`);return{__sfc:!0,props:o,coverLoadingError:e,link:l,RouterLink:a,ImageMultipleOutline:u}}});var d=function(){var t=this,o=t._self._c,e=t._self._setupProxy;return o(e.RouterLink,{staticClass:"collection-cover",attrs:{to:e.link}},[t.coverUrl!==""&&e.coverLoadingError===!1?o("img",{staticClass:"collection-cover__image",attrs:{src:t.coverUrl,alt:t.altImg},on:{error:function(l){e.coverLoadingError=!0}}}):o("div",{staticClass:"collection-cover__image collection-cover__image--placeholder"},[o(e.ImageMultipleOutline,{attrs:{size:128}})],1),o("div",{staticClass:"collection-cover__details"},[o("div",{staticClass:"collection-cover__details__title"},[t._t("default")],2),o("div",{staticClass:"collection-cover__details__subtitle"},[t._t("subtitle")],2)])])},v=[],C=c(m,d,v,!1,null,"719cd191");const I=C.exports,f={name:"CollectionsList",components:{AlertCircleOutline:_,NcEmptyContent:p},props:{collections:{type:Object,required:!0},loading:{type:Boolean,default:!1},error:{type:Error,default:null}},computed:{noCollection(){return Object.keys(this.collections).length===0}},methods:{t:i}};var g=function(){var t=this,o=t._self._c;return t.error?o("NcEmptyContent",{attrs:{name:t.t("photos","An error occurred")}},[o("AlertCircleOutline",{attrs:{slot:"icon"},slot:"icon"})],1):o("div",{staticClass:"collections"},[t._t("header"),t.noCollection&&!t.loading?t._t("empty-collections-list"):t.noCollection?t._e():o("ul",{staticClass:"collections__list"},t._l(t.collections,function(e){return o("li",{key:e.basename,attrs:{"data-cy-collections-list-collection":e.basename}},[t._t("default",null,{collection:e})],2)}),0)],2)},y=[],h=c(f,g,y,!1,null,"b585220f");const O=h.exports;export{I as C,O as a};
+//# sourceMappingURL=CollectionsList-CiIbYZgv.chunk.mjs.map
diff --git a/js/CollectionsList-6GeFqfGW.chunk.mjs.license b/js/CollectionsList-CiIbYZgv.chunk.mjs.license
similarity index 100%
rename from js/CollectionsList-6GeFqfGW.chunk.mjs.license
rename to js/CollectionsList-CiIbYZgv.chunk.mjs.license
diff --git a/js/CollectionsList-6GeFqfGW.chunk.mjs.map b/js/CollectionsList-CiIbYZgv.chunk.mjs.map
similarity index 98%
rename from js/CollectionsList-6GeFqfGW.chunk.mjs.map
rename to js/CollectionsList-CiIbYZgv.chunk.mjs.map
index d6eefc406c..bfbc63212d 100644
--- a/js/CollectionsList-6GeFqfGW.chunk.mjs.map
+++ b/js/CollectionsList-CiIbYZgv.chunk.mjs.map
@@ -1 +1 @@
-{"version":3,"file":"CollectionsList-6GeFqfGW.chunk.mjs","sources":["../src/components/Collection/CollectionCover.vue","../src/components/Collection/CollectionsList.vue"],"sourcesContent":["\n\n\t\n\t\t\n\n\t\t
\n\t\t\t\n\t\t
\n\t\t
\n\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t\n\n\n\n\n\n","\n\n\t\n\t\n\t\t\n\t\n\n\t
\n\t\t\n\t\t\n\n\t\t\n\t\t\n\n\t\t\n\t\t
\n\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t
\n\n\n\n\n\n"],"names":["coverLoadingError","ref","link","computed","props","_sfc_main","AlertCircleOutline","NcEmptyContent","translate"],"mappings":"+WAuCMA,EAAoBC,EAAI,EAAK,EAC7BC,EAAOC,EAAS,IAAM,GAAGC,EAAM,WAAW,IAAI,mBAAmBA,EAAM,cAAc,CAAC,EAAE,wyBCN9FC,EAAA,CACA,KAAA,kBAEA,WAAA,CACA,mBAAAC,EACA,eAAAC,CAAA,EAGA,MAAA,CACA,YAAA,CACA,KAAA,OACA,SAAA,EAAA,EAGA,QAAA,CACA,KAAA,QACA,QAAA,EAAA,EAGA,MAAA,CACA,KAAA,MACA,QAAA,IAAA,CACA,EAGA,SAAA,CACA,cAAA,CACA,OAAA,OAAA,KAAA,KAAA,WAAA,EAAA,SAAA,CACA,CAAA,EAGA,QAAA,CACA,EAAAC,CAAA,CAEA"}
\ No newline at end of file
+{"version":3,"file":"CollectionsList-CiIbYZgv.chunk.mjs","sources":["../src/components/Collection/CollectionCover.vue","../src/components/Collection/CollectionsList.vue"],"sourcesContent":["\n\n\t\n\t\t\n\n\t\t
\n\t\t\t\n\t\t
\n\t\t
\n\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t\n\n\n\n\n\n","\n\n\t\n\t\n\t\t\n\t\n\n\t
\n\t\t\n\t\t\n\n\t\t\n\t\t\n\n\t\t\n\t\t
\n\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t
\n\n\n\n\n\n"],"names":["coverLoadingError","ref","link","computed","props","_sfc_main","AlertCircleOutline","NcEmptyContent","translate"],"mappings":"+WAuCMA,EAAoBC,EAAI,EAAK,EAC7BC,EAAOC,EAAS,IAAM,GAAGC,EAAM,WAAW,IAAI,mBAAmBA,EAAM,cAAc,CAAC,EAAE,wyBCN9FC,EAAA,CACA,KAAA,kBAEA,WAAA,CACA,mBAAAC,EACA,eAAAC,CAAA,EAGA,MAAA,CACA,YAAA,CACA,KAAA,OACA,SAAA,EAAA,EAGA,QAAA,CACA,KAAA,QACA,QAAA,EAAA,EAGA,MAAA,CACA,KAAA,MACA,QAAA,IAAA,CACA,EAGA,SAAA,CACA,cAAA,CACA,OAAA,OAAA,KAAA,KAAA,WAAA,EAAA,SAAA,CACA,CAAA,EAGA,QAAA,CACA,EAAAC,CAAA,CAEA"}
\ No newline at end of file
diff --git a/js/FaceContent-Dg4dQHfZ.chunk.mjs b/js/FaceContent-3Ggm0lDl.chunk.mjs
similarity index 97%
rename from js/FaceContent-Dg4dQHfZ.chunk.mjs
rename to js/FaceContent-3Ggm0lDl.chunk.mjs
index 0710112f96..58f9db6f66 100644
--- a/js/FaceContent-Dg4dQHfZ.chunk.mjs
+++ b/js/FaceContent-3Ggm0lDl.chunk.mjs
@@ -1,2 +1,2 @@
-import{h as n,t as i,V as c}from"./preload-helper-iHri5ttz.chunk.mjs";import{N as l}from"./NcActionButton-K4jUGMlW-Bs_jOwCM.chunk.mjs";import{i as r,h as f,A as d,z as h,l as s,E as a}from"./index-6_vkf3an.chunk.mjs";import{N as u}from"./NcEmptyContent-BkpeWiV5.chunk.mjs";import{g as p,h as m,f as F,i as v,j as g,A as _,e as y,k as N,S as w,a as C,c as M,n as k}from"./icons-BPrPKxzl.chunk.mjs";import{F as S}from"./FaceMergeForm-jH2ieXCc.chunk.mjs";import{F as I}from"./FileComponent-Bw4ZFXMR.chunk.mjs";import{F as A,a as $}from"./FilesSelectionMixin-GHX9hTKF.chunk.mjs";import{F as R}from"./FaceCover-3afTUpDo.chunk.mjs";import{F as x}from"./FetchFilesMixin-Ck9H2-jY.chunk.mjs";import"./index-DjIio1qt.chunk.mjs";import"./createElementId-DhjFt1I9-B2HCdIOx.chunk.mjs";import"./NcCheckboxRadioSwitch-D4IV4zWy-CSDAL8Yg.chunk.mjs";import"./NcIconToggleSwitch-0NTw7i-t-DOrRmNgh.chunk.mjs";import"./useModelMigration-EhAWvqDD-C15wbtL_.chunk.mjs";import"./fileFetcher-p0a3IV9C.chunk.mjs";import"./AbortControllerMixin-CCU9Utyn.chunk.mjs";import"./PhotoSearch-CvX3QQRp.chunk.mjs";const B={name:"FaceContent",components:{PencilOutline:M,Star:C,StarOutline:w,Download:N,Close:y,AlertCircleOutline:_,SendOutline:g,Merge:v,ArrowLeft:F,AccountBoxMultipleOutline:m,FaceMergeForm:S,FilesListViewer:$,FileComponent:I,NcLoadingIcon:h,NcEmptyContent:u,NcActions:d,NcActionButton:l,NcDialog:f,NcButton:r,AccountSwitchOutline:p},directives:{focus(e){c.nextTick(()=>e.focus())}},mixins:[R,x,A],props:{faceName:{type:String,default:"/"}},data(){return{showMoveModal:!1,showMergeModal:!1,showRenameModal:!1,loadingCount:0,appContent:document.getElementById("app-content-vue")}},computed:{files(){return this.$store.state.files.files},facesFiles(){return this.$store.state.faces.facesFiles},face(){return this.faces[this.faceName]},faceFileIds(){return this.facesFiles[this.faceName]||[]},shouldFavoriteSelection(){return this.selectedFileIds.some(e=>this.$store.state.files.files[e].attributes.favorite===0)}},watch:{face(){this.face&&this.fetchFaceContent(this.faceName)}},mounted(){this.fetchFaceContent(this.faceName)},methods:{openViewer(e){window.OCA.Viewer.open({fileInfo:a(this.files[e]),list:this.faceFileIds.map(t=>a(this.files[t]))})},async handleRemoveFilesFromFace(e){try{this.loadingCount++,await this.$store.dispatch("removeFilesFromFace",{faceName:this.faceName,fileIdsToRemove:e}),this.resetSelection()}catch(t){s.error(t)}finally{this.loadingCount--}},async handleDeleteFace(){try{this.loadingCount++,await this.$store.dispatch("deleteFace",{faceName:this.faceName}),this.$router.push("/faces")}catch(e){s.error(e)}finally{this.loadingCount--}},async handleRenameFace(e){try{this.loadingCount++,this.showRenameModal=!1;const t=this.faceName;await this.$store.dispatch("renameFace",{oldName:t,faceName:e}),this.$router.push({name:"facecontent",params:{faceName:e}})}catch(t){s.error(t)}finally{this.loadingCount--}},async handleMerge(e){try{this.loadingCount++,await this.$store.dispatch("moveFilesToFace",{oldFace:this.faceName,faceName:e,fileIdsToMove:this.facesFiles[this.faceName]}),await this.$store.dispatch("deleteFace",{faceName:this.faceName}),this.showMergeModal=!1,this.$router.push({name:"facecontent",params:{faceName:e}})}catch(t){s.error(t)}finally{this.loadingCount--}},async handleMove(e,t){try{this.loadingCount++,await this.$store.dispatch("moveFilesToFace",{oldFace:this.faceName,faceName:e,fileIdsToMove:t}),this.showMoveModal=!1}catch(o){s.error(o)}finally{this.loadingCount--}},async favoriteSelection(){try{this.loadingCount++,await this.$store.dispatch("toggleFavoriteForFiles",{fileIds:this.selectedFileIds,favoriteState:!0})}catch(e){s.error(e)}finally{this.loadingCount--}},async unFavoriteSelection(){try{this.loadingCount++,await this.$store.dispatch("toggleFavoriteForFiles",{fileIds:this.selectedFileIds,favoriteState:!1})}catch(e){s.error(e)}finally{this.loadingCount--}},async downloadSelection(){try{this.loadingCount++,await this.$store.dispatch("downloadFiles",this.selectedFileIds)}catch(e){s.error(e)}finally{this.loadingCount--}},t:i,n}};var O=function(){var e=this,t=e._self._c;return e.face===void 0&&!e.loadingFiles&&!e.loadingFaces?t("NcEmptyContent",{staticClass:"empty-content-with-illustration",scopedSlots:e._u([{key:"icon",fn:function(){return[t("AccountBoxMultipleOutline")]},proxy:!0}],null,!1,2861705255)},[e._v(" "+e._s(e.t("photos","This person could not be found"))+" ")]):e.errorFetchingFiles||e.errorFetchingFaces?t("NcEmptyContent",{scopedSlots:e._u([{key:"icon",fn:function(){return[t("AlertCircleOutline")]},proxy:!0}])},[e._v(" "+e._s(e.t("photos","An error occurred"))+" ")]):t("div",{staticClass:"face"},[t("div",{staticClass:"face__header"},[t("div",{staticClass:"face__header__left"},[t("NcActions",[t("NcActionButton",{on:{click:function(o){return e.$router.push("/faces/")}},scopedSlots:e._u([{key:"icon",fn:function(){return[t("ArrowLeft")]},proxy:!0}])},[e._v(e._s(e.t("photos","Back"))+" ")])],1),t("div",{staticClass:"face__header__title"},[e.face!==void 0?t("h2",{staticClass:"face-name",class:{"hidden-visually":e.face.basename.match(/^[0-9]+$/)}},[e._v(" "+e._s(e.face.basename)+" ")]):e._e()]),e.loadingCount>0||e.loadingFaces?t("NcLoadingIcon"):e._e()],1),e.face!==void 0?t("div",{staticClass:"face__header__actions"},[t("NcActions",[t("NcActionButton",{attrs:{"close-after-click":!0,"aria-label":e.t("photos","Rename person")},on:{click:function(o){e.showRenameModal=!0}},scopedSlots:e._u([{key:"icon",fn:function(){return[t("PencilOutline")]},proxy:!0}],null,!1,347985790)},[e._v(" "+e._s(e.t("photos","Rename person"))+" ")])],1),t("NcActions",{attrs:{"force-menu":!0}},[Object.keys(e.faces).length>1?t("NcActionButton",{attrs:{"close-after-click":!0,"aria-label":e.t("photos","Merge with different person")},on:{click:function(o){e.showMergeModal=!0}},scopedSlots:e._u([{key:"icon",fn:function(){return[t("Merge")]},proxy:!0}],null,!1,3117189691)},[e._v(" "+e._s(e.t("photos","Merge with different person"))+" ")]):e._e(),e.selectedFileIds.length?[t("NcActionButton",{attrs:{"close-after-click":!0,"aria-label":e.t("photos","Download selected files")},on:{click:e.downloadSelection}},[t("Download",{attrs:{slot:"icon"},slot:"icon"}),e._v(" "+e._s(e.t("photos","Download selected photos"))+" ")],1),e.shouldFavoriteSelection?t("NcActionButton",{attrs:{"close-after-click":!0,"aria-label":e.t("photos","Mark selection as favorite")},on:{click:e.favoriteSelection}},[t("StarOutline",{attrs:{slot:"icon"},slot:"icon"}),e._v(" "+e._s(e.t("photos","Favorite"))+" ")],1):t("NcActionButton",{attrs:{"close-after-click":!0,"aria-label":e.t("photos","Remove selection from favorites")},on:{click:e.unFavoriteSelection}},[t("Star",{attrs:{slot:"icon"},slot:"icon"}),e._v(" "+e._s(e.t("photos","Remove from favorites"))+" ")],1),t("NcActionButton",{attrs:{"close-after-click":!0},on:{click:function(o){e.showMoveModal=!0}},scopedSlots:e._u([{key:"icon",fn:function(){return[t("AccountSwitchOutline")]},proxy:!0}],null,!1,1476410576)},[e._v(" "+e._s(e.n("photos","Move photo to a different person","Move photos to a different person",e.selectedFileIds.length))+" ")]),t("NcActionButton",{attrs:{"close-after-click":!0},on:{click:function(o){return e.handleRemoveFilesFromFace(e.selectedFileIds)}},scopedSlots:e._u([{key:"icon",fn:function(){return[t("Close")]},proxy:!0}],null,!1,1051939733)},[e._v(" "+e._s(e.n("photos","Remove photo from person","Remove photos from person",e.selectedFileIds.length))+" ")])]:e._e(),t("NcActionButton",{attrs:{"close-after-click":!0},on:{click:e.handleDeleteFace},scopedSlots:e._u([{key:"icon",fn:function(){return[t("Close")]},proxy:!0}],null,!1,1051939733)},[e._v(" "+e._s(e.t("photos","Remove person"))+" ")])],2)],1):e._e()]),e.face!==void 0?t("FilesListViewer",{staticClass:"face__photos",attrs:{"container-element":e.appContent,"file-ids":e.faceFileIds,loading:e.loadingFiles||e.loadingFaces},scopedSlots:e._u([{key:"default",fn:function({file:o}){return t("FileComponent",{attrs:{file:e.files[o.id],"allow-selection":!0,selected:e.selection[o.id]===!0},on:{click:e.openViewer,"select-toggled":e.onFileSelectToggle}})}}],null,!1,3208665420)}):e._e(),e.showRenameModal?t("NcDialog",{attrs:{name:e.t("photos","Rename person"),"close-on-click-outside":"",size:"small"},on:{closing:function(o){e.showRenameModal=!1}},scopedSlots:e._u([{key:"actions",fn:function(){return[t("NcButton",{attrs:{"aria-label":e.t("photos","Save."),variant:"primary",disabled:e.$refs.nameInput&&e.$refs.nameInput.value.trim()===""},on:{click:function(o){return e.handleRenameFace(e.$refs.nameInput.value)}},scopedSlots:e._u([{key:"icon",fn:function(){return[e.loadingCount?t("NcLoadingIcon"):t("SendOutline")]},proxy:!0}],null,!1,4093389955)},[e._v(" "+e._s(e.t("photos","Save"))+" ")])]},proxy:!0}],null,!1,1503261394)},[t("div",{staticClass:"rename-form"},[t("input",{directives:[{name:"focus",rawName:"v-focus"}],ref:"nameInput",attrs:{type:"text",name:"name",required:"",placeholder:e.t("photos","Name of this person")},domProps:{value:e.faceName},on:{keydown:function(o){return!o.type.indexOf("key")&&e._k(o.keyCode,"enter",13,o.key,"Enter")?null:e.handleRenameFace(e.$refs.nameInput.value)}}})])]):e._e(),e.showMergeModal?t("NcDialog",{attrs:{name:e.t("photos","Merge person"),"close-on-click-outside":"",size:"normal"},on:{closing:function(o){e.showMergeModal=!1}}},[t("FaceMergeForm",{attrs:{"first-face":e.faceName},on:{select:function(o){return e.handleMerge(o)}}})],1):e._e(),e.showMoveModal?t("NcDialog",{attrs:{name:e.t("photos","Move to different person"),"close-on-click-outside":"",size:"normal"},on:{closing:function(o){e.showMoveModal=!1}}},[t("FaceMergeForm",{attrs:{"first-face":e.faceName},on:{select:function(o){return e.handleMove(o,e.selectedFileIds)}}})],1):e._e()],1)},b=[],D=k(B,O,b,!1,null,"e7556087");const ee=D.exports;export{ee as default};
-//# sourceMappingURL=FaceContent-Dg4dQHfZ.chunk.mjs.map
+import{h as n,t as i,V as c}from"./preload-helper-iHri5ttz.chunk.mjs";import{N as l}from"./NcActionButton-K4jUGMlW-Bs_jOwCM.chunk.mjs";import{i as r,h as f,A as d,z as h,l as s,E as a}from"./index-6_vkf3an.chunk.mjs";import{N as u}from"./NcEmptyContent-BkpeWiV5.chunk.mjs";import{g as p,h as m,f as F,i as v,j as g,A as _,e as y,k as N,S as w,a as C,c as M,n as k}from"./icons-BPrPKxzl.chunk.mjs";import{F as S}from"./FaceMergeForm-CjFfdbB1.chunk.mjs";import{F as I}from"./FileComponent-Bw4ZFXMR.chunk.mjs";import{F as A,a as $}from"./FilesSelectionMixin-GHX9hTKF.chunk.mjs";import{F as R}from"./FaceCover-CwQK1LWo.chunk.mjs";import{F as x}from"./FetchFilesMixin-Ck9H2-jY.chunk.mjs";import"./index-DjIio1qt.chunk.mjs";import"./createElementId-DhjFt1I9-B2HCdIOx.chunk.mjs";import"./NcCheckboxRadioSwitch-D4IV4zWy-CSDAL8Yg.chunk.mjs";import"./NcIconToggleSwitch-0NTw7i-t-DOrRmNgh.chunk.mjs";import"./useModelMigration-EhAWvqDD-C15wbtL_.chunk.mjs";import"./fileFetcher-p0a3IV9C.chunk.mjs";import"./AbortControllerMixin-CCU9Utyn.chunk.mjs";import"./PhotoSearch-CvX3QQRp.chunk.mjs";const B={name:"FaceContent",components:{PencilOutline:M,Star:C,StarOutline:w,Download:N,Close:y,AlertCircleOutline:_,SendOutline:g,Merge:v,ArrowLeft:F,AccountBoxMultipleOutline:m,FaceMergeForm:S,FilesListViewer:$,FileComponent:I,NcLoadingIcon:h,NcEmptyContent:u,NcActions:d,NcActionButton:l,NcDialog:f,NcButton:r,AccountSwitchOutline:p},directives:{focus(e){c.nextTick(()=>e.focus())}},mixins:[R,x,A],props:{faceName:{type:String,default:"/"}},data(){return{showMoveModal:!1,showMergeModal:!1,showRenameModal:!1,loadingCount:0,appContent:document.getElementById("app-content-vue")}},computed:{files(){return this.$store.state.files.files},facesFiles(){return this.$store.state.faces.facesFiles},face(){return this.faces[this.faceName]},faceFileIds(){return this.facesFiles[this.faceName]||[]},shouldFavoriteSelection(){return this.selectedFileIds.some(e=>this.$store.state.files.files[e].attributes.favorite===0)}},watch:{face(){this.face&&this.fetchFaceContent(this.faceName)}},mounted(){this.fetchFaceContent(this.faceName)},methods:{openViewer(e){window.OCA.Viewer.open({fileInfo:a(this.files[e]),list:this.faceFileIds.map(t=>a(this.files[t]))})},async handleRemoveFilesFromFace(e){try{this.loadingCount++,await this.$store.dispatch("removeFilesFromFace",{faceName:this.faceName,fileIdsToRemove:e}),this.resetSelection()}catch(t){s.error(t)}finally{this.loadingCount--}},async handleDeleteFace(){try{this.loadingCount++,await this.$store.dispatch("deleteFace",{faceName:this.faceName}),this.$router.push("/faces")}catch(e){s.error(e)}finally{this.loadingCount--}},async handleRenameFace(e){try{this.loadingCount++,this.showRenameModal=!1;const t=this.faceName;await this.$store.dispatch("renameFace",{oldName:t,faceName:e}),this.$router.push({name:"facecontent",params:{faceName:e}})}catch(t){s.error(t)}finally{this.loadingCount--}},async handleMerge(e){try{this.loadingCount++,await this.$store.dispatch("moveFilesToFace",{oldFace:this.faceName,faceName:e,fileIdsToMove:this.facesFiles[this.faceName]}),await this.$store.dispatch("deleteFace",{faceName:this.faceName}),this.showMergeModal=!1,this.$router.push({name:"facecontent",params:{faceName:e}})}catch(t){s.error(t)}finally{this.loadingCount--}},async handleMove(e,t){try{this.loadingCount++,await this.$store.dispatch("moveFilesToFace",{oldFace:this.faceName,faceName:e,fileIdsToMove:t}),this.showMoveModal=!1}catch(o){s.error(o)}finally{this.loadingCount--}},async favoriteSelection(){try{this.loadingCount++,await this.$store.dispatch("toggleFavoriteForFiles",{fileIds:this.selectedFileIds,favoriteState:!0})}catch(e){s.error(e)}finally{this.loadingCount--}},async unFavoriteSelection(){try{this.loadingCount++,await this.$store.dispatch("toggleFavoriteForFiles",{fileIds:this.selectedFileIds,favoriteState:!1})}catch(e){s.error(e)}finally{this.loadingCount--}},async downloadSelection(){try{this.loadingCount++,await this.$store.dispatch("downloadFiles",this.selectedFileIds)}catch(e){s.error(e)}finally{this.loadingCount--}},t:i,n}};var O=function(){var e=this,t=e._self._c;return e.face===void 0&&!e.loadingFiles&&!e.loadingFaces?t("NcEmptyContent",{staticClass:"empty-content-with-illustration",scopedSlots:e._u([{key:"icon",fn:function(){return[t("AccountBoxMultipleOutline")]},proxy:!0}],null,!1,2861705255)},[e._v(" "+e._s(e.t("photos","This person could not be found"))+" ")]):e.errorFetchingFiles||e.errorFetchingFaces?t("NcEmptyContent",{scopedSlots:e._u([{key:"icon",fn:function(){return[t("AlertCircleOutline")]},proxy:!0}])},[e._v(" "+e._s(e.t("photos","An error occurred"))+" ")]):t("div",{staticClass:"face"},[t("div",{staticClass:"face__header"},[t("div",{staticClass:"face__header__left"},[t("NcActions",[t("NcActionButton",{on:{click:function(o){return e.$router.push("/faces/")}},scopedSlots:e._u([{key:"icon",fn:function(){return[t("ArrowLeft")]},proxy:!0}])},[e._v(e._s(e.t("photos","Back"))+" ")])],1),t("div",{staticClass:"face__header__title"},[e.face!==void 0?t("h2",{staticClass:"face-name",class:{"hidden-visually":e.face.basename.match(/^[0-9]+$/)}},[e._v(" "+e._s(e.face.basename)+" ")]):e._e()]),e.loadingCount>0||e.loadingFaces?t("NcLoadingIcon"):e._e()],1),e.face!==void 0?t("div",{staticClass:"face__header__actions"},[t("NcActions",[t("NcActionButton",{attrs:{"close-after-click":!0,"aria-label":e.t("photos","Rename person")},on:{click:function(o){e.showRenameModal=!0}},scopedSlots:e._u([{key:"icon",fn:function(){return[t("PencilOutline")]},proxy:!0}],null,!1,347985790)},[e._v(" "+e._s(e.t("photos","Rename person"))+" ")])],1),t("NcActions",{attrs:{"force-menu":!0}},[Object.keys(e.faces).length>1?t("NcActionButton",{attrs:{"close-after-click":!0,"aria-label":e.t("photos","Merge with different person")},on:{click:function(o){e.showMergeModal=!0}},scopedSlots:e._u([{key:"icon",fn:function(){return[t("Merge")]},proxy:!0}],null,!1,3117189691)},[e._v(" "+e._s(e.t("photos","Merge with different person"))+" ")]):e._e(),e.selectedFileIds.length?[t("NcActionButton",{attrs:{"close-after-click":!0,"aria-label":e.t("photos","Download selected files")},on:{click:e.downloadSelection}},[t("Download",{attrs:{slot:"icon"},slot:"icon"}),e._v(" "+e._s(e.t("photos","Download selected photos"))+" ")],1),e.shouldFavoriteSelection?t("NcActionButton",{attrs:{"close-after-click":!0,"aria-label":e.t("photos","Mark selection as favorite")},on:{click:e.favoriteSelection}},[t("StarOutline",{attrs:{slot:"icon"},slot:"icon"}),e._v(" "+e._s(e.t("photos","Favorite"))+" ")],1):t("NcActionButton",{attrs:{"close-after-click":!0,"aria-label":e.t("photos","Remove selection from favorites")},on:{click:e.unFavoriteSelection}},[t("Star",{attrs:{slot:"icon"},slot:"icon"}),e._v(" "+e._s(e.t("photos","Remove from favorites"))+" ")],1),t("NcActionButton",{attrs:{"close-after-click":!0},on:{click:function(o){e.showMoveModal=!0}},scopedSlots:e._u([{key:"icon",fn:function(){return[t("AccountSwitchOutline")]},proxy:!0}],null,!1,1476410576)},[e._v(" "+e._s(e.n("photos","Move photo to a different person","Move photos to a different person",e.selectedFileIds.length))+" ")]),t("NcActionButton",{attrs:{"close-after-click":!0},on:{click:function(o){return e.handleRemoveFilesFromFace(e.selectedFileIds)}},scopedSlots:e._u([{key:"icon",fn:function(){return[t("Close")]},proxy:!0}],null,!1,1051939733)},[e._v(" "+e._s(e.n("photos","Remove photo from person","Remove photos from person",e.selectedFileIds.length))+" ")])]:e._e(),t("NcActionButton",{attrs:{"close-after-click":!0},on:{click:e.handleDeleteFace},scopedSlots:e._u([{key:"icon",fn:function(){return[t("Close")]},proxy:!0}],null,!1,1051939733)},[e._v(" "+e._s(e.t("photos","Remove person"))+" ")])],2)],1):e._e()]),e.face!==void 0?t("FilesListViewer",{staticClass:"face__photos",attrs:{"container-element":e.appContent,"file-ids":e.faceFileIds,loading:e.loadingFiles||e.loadingFaces},scopedSlots:e._u([{key:"default",fn:function({file:o}){return t("FileComponent",{attrs:{file:e.files[o.id],"allow-selection":!0,selected:e.selection[o.id]===!0},on:{click:e.openViewer,"select-toggled":e.onFileSelectToggle}})}}],null,!1,3208665420)}):e._e(),e.showRenameModal?t("NcDialog",{attrs:{name:e.t("photos","Rename person"),"close-on-click-outside":"",size:"small"},on:{closing:function(o){e.showRenameModal=!1}},scopedSlots:e._u([{key:"actions",fn:function(){return[t("NcButton",{attrs:{"aria-label":e.t("photos","Save."),variant:"primary",disabled:e.$refs.nameInput&&e.$refs.nameInput.value.trim()===""},on:{click:function(o){return e.handleRenameFace(e.$refs.nameInput.value)}},scopedSlots:e._u([{key:"icon",fn:function(){return[e.loadingCount?t("NcLoadingIcon"):t("SendOutline")]},proxy:!0}],null,!1,4093389955)},[e._v(" "+e._s(e.t("photos","Save"))+" ")])]},proxy:!0}],null,!1,1503261394)},[t("div",{staticClass:"rename-form"},[t("input",{directives:[{name:"focus",rawName:"v-focus"}],ref:"nameInput",attrs:{type:"text",name:"name",required:"",placeholder:e.t("photos","Name of this person")},domProps:{value:e.faceName},on:{keydown:function(o){return!o.type.indexOf("key")&&e._k(o.keyCode,"enter",13,o.key,"Enter")?null:e.handleRenameFace(e.$refs.nameInput.value)}}})])]):e._e(),e.showMergeModal?t("NcDialog",{attrs:{name:e.t("photos","Merge person"),"close-on-click-outside":"",size:"normal"},on:{closing:function(o){e.showMergeModal=!1}}},[t("FaceMergeForm",{attrs:{"first-face":e.faceName},on:{select:function(o){return e.handleMerge(o)}}})],1):e._e(),e.showMoveModal?t("NcDialog",{attrs:{name:e.t("photos","Move to different person"),"close-on-click-outside":"",size:"normal"},on:{closing:function(o){e.showMoveModal=!1}}},[t("FaceMergeForm",{attrs:{"first-face":e.faceName},on:{select:function(o){return e.handleMove(o,e.selectedFileIds)}}})],1):e._e()],1)},b=[],D=k(B,O,b,!1,null,"c10e7548");const ee=D.exports;export{ee as default};
+//# sourceMappingURL=FaceContent-3Ggm0lDl.chunk.mjs.map
diff --git a/js/FaceContent-Dg4dQHfZ.chunk.mjs.license b/js/FaceContent-3Ggm0lDl.chunk.mjs.license
similarity index 100%
rename from js/FaceContent-Dg4dQHfZ.chunk.mjs.license
rename to js/FaceContent-3Ggm0lDl.chunk.mjs.license
diff --git a/js/FaceContent-Dg4dQHfZ.chunk.mjs.map b/js/FaceContent-3Ggm0lDl.chunk.mjs.map
similarity index 79%
rename from js/FaceContent-Dg4dQHfZ.chunk.mjs.map
rename to js/FaceContent-3Ggm0lDl.chunk.mjs.map
index b45219b362..1ea472fa02 100644
--- a/js/FaceContent-Dg4dQHfZ.chunk.mjs.map
+++ b/js/FaceContent-3Ggm0lDl.chunk.mjs.map
@@ -1 +1 @@
-{"version":3,"file":"FaceContent-Dg4dQHfZ.chunk.mjs","sources":["../src/views/FaceContent.vue"],"sourcesContent":["\n\n\t\n\t\n\t\t\n\t\t\t\n\t\t\n\t\t{{ t('photos', 'This person could not be found') }}\n\t\n\t\n\t\t\n\t\t\t\n\t\t\n\t\t{{ t('photos', 'An error occurred') }}\n\t\n\n\t
\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t{{ t('photos', 'Rename person') }}\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t 1\"\n\t\t\t\t\t\t:close-after-click=\"true\"\n\t\t\t\t\t\t:aria-label=\"t('photos', 'Merge with different person')\"\n\t\t\t\t\t\t@click=\"showMergeModal = true\">\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t{{ t('photos', 'Merge with different person') }}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ t('photos', 'Download selected photos') }}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ t('photos', 'Favorite') }}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ t('photos', 'Remove from favorites') }}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ n('photos', 'Move photo to a different person', 'Move photos to a different person', selectedFileIds.length) }}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ n('photos', 'Remove photo from person', 'Remove photos from person', selectedFileIds.length) }}\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t{{ t('photos', 'Remove person') }}\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\n\n\n\n\n"],"names":["_sfc_main","PencilOutline","Star","StarOutline","Download","Close","AlertCircleOutline","SendOutline","Merge","ArrowLeft","AccountBoxMultipleOutline","FaceMergeForm","FilesListViewer","FileComponent","NcLoadingIcon","NcEmptyContent","NcActions","NcActionButton","NcDialog","NcButton","AccountSwitchOutline","el","Vue","FetchFacesMixin","FetchFilesMixin","FilesSelectionMixin","fileId","toViewerFileInfo","fileIds","error","logger","faceName","oldName","t","i"],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"FaceContent-3Ggm0lDl.chunk.mjs","sources":["../src/views/FaceContent.vue"],"sourcesContent":["\n\n\t\n\t\n\t\t\n\t\t\t\n\t\t\n\t\t{{ t('photos', 'This person could not be found') }}\n\t\n\t\n\t\t\n\t\t\t\n\t\t\n\t\t{{ t('photos', 'An error occurred') }}\n\t\n\n\t
\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t{{ t('photos', 'Rename person') }}\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t 1\"\n\t\t\t\t\t\t:close-after-click=\"true\"\n\t\t\t\t\t\t:aria-label=\"t('photos', 'Merge with different person')\"\n\t\t\t\t\t\t@click=\"showMergeModal = true\">\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t{{ t('photos', 'Merge with different person') }}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ t('photos', 'Download selected photos') }}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ t('photos', 'Favorite') }}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ t('photos', 'Remove from favorites') }}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ n('photos', 'Move photo to a different person', 'Move photos to a different person', selectedFileIds.length) }}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ n('photos', 'Remove photo from person', 'Remove photos from person', selectedFileIds.length) }}\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t{{ t('photos', 'Remove person') }}\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\n\n\n\n\n"],"names":["root","freeExports","exports","freeModule","module","freeGlobal","global","regexAstralSymbols","regexAsciiWhitelist","regexBmpWhitelist","regexEncodeNonAscii","encodeMap","regexEscape","escapeMap","regexInvalidEntity","regexInvalidRawCodePoint","regexDecode","decodeMap","decodeMapLegacy","decodeMapNumeric","invalidReferenceCodePoints","stringFromCharCode","object","hasOwnProperty","has","propertyName","contains","array","value","index","length","merge","options","defaults","result","key","codePointToSymbol","codePoint","strict","output","parseError","hexEscape","decEscape","message","encode","string","encodeEverything","useNamedReferences","allowUnsafeSymbols","escapeCodePoint","escapeBmpSymbol","symbol","$0","high","low","decode","html","$1","$2","$3","$4","$5","$6","$7","$8","semicolon","decDigits","hexDigits","reference","next","escape","he","this","FaceCoverMixin","defineComponent","faceName","cover","detection","zoom","horizontalCenterOfFace","verticalCenterOfFace","recognizeDAVProps","FetchFacesMixin","AbortControllerMixin","fetchedRawFaces","davClient","getCurrentUser","getPropFind","fetchedFace","file","resultToNode","logger","error","t","showError","force","fetchedRawFiles","fetchedFiles","fileIds","unassignedFacesRoot","count","_sfc_main","generateUrl","n"],"mappings":"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O,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,KAAe,MAAM,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,EAAS,OAAO,KAAe,MAAM,KAAe,OAAO,KAAe,OAAO,EAAS,OAAO,KAAe,OAAO,KAAe,MAAM,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAO,SAAS,EAAO,SAAS,EAAS,SAAS,EAAS,SAAS,IAAS,SAAS,EAAS,MAAM,EAAS,MAAM,KAAe,OAAO,KAAe,MAAM,EAAS,OAAO,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,EAAO,OAAO,EAAO,SAAS,EAAO,SAAS,EAAO,SAAS,EAAO,SAAS,EAAO,QAAQ,EAAO,QAAQ,EAAO,OAAO,EAAO,OAAO,EAAS,SAAS,EAAS,SAAS,EAAO,SAAS,EAAO,SAAS,EAAO,SAAS,EAAO,SAAS,EAAS,QAAQ,EAAS,QAAQ,EAAS,QAAQ,EAAS,QAAQ,KAAe,MAAM,KAAe,OAAO,KAAe,OAAO,EAAS,OAAO,KAAe,MAAM,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,EAAS,OAAO,EAAS,SAAS,KAAe,MAAM,KAAe,OAAO,KAAe,OAAO,EAAS,OAAO,EAAS,KAAK,EAAS,OAAO,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,IAAS,KAAK,EAAS,SAAS,EAAS,SAAS,EAAS,QAAQ,EAAS,QAAQ,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAO,QAAQ,KAAe,MAAM,KAAe,OAAO,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,IAAS,QAAQ,EAAS,SAAS,EAAS,SAAS,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,EAAO,SAAS,EAAO,SAA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","x_google_ignoreList":[0]}
\ No newline at end of file
+{"version":3,"file":"FaceCover-CwQK1LWo.chunk.mjs","sources":["../node_modules/he/he.js","../src/mixins/FaceCoverMixin.ts","../src/mixins/FetchFacesMixin.ts","../src/components/Faces/FaceCover.vue"],"sourcesContent":["/*! https://mths.be/he v1.2.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t// All astral symbols.\n\tvar regexAstralSymbols = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n\t// All ASCII symbols (not just printable ASCII) except those listed in the\n\t// first column of the overrides table.\n\t// https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides\n\tvar regexAsciiWhitelist = /[\\x01-\\x7F]/g;\n\t// All BMP symbols that are not ASCII newlines, printable ASCII symbols, or\n\t// code points listed in the first column of the overrides table on\n\t// https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides.\n\tvar regexBmpWhitelist = /[\\x01-\\t\\x0B\\f\\x0E-\\x1F\\x7F\\x81\\x8D\\x8F\\x90\\x9D\\xA0-\\uFFFF]/g;\n\n\tvar regexEncodeNonAscii = /<\\u20D2|=\\u20E5|>\\u20D2|\\u205F\\u200A|\\u219D\\u0338|\\u2202\\u0338|\\u2220\\u20D2|\\u2229\\uFE00|\\u222A\\uFE00|\\u223C\\u20D2|\\u223D\\u0331|\\u223E\\u0333|\\u2242\\u0338|\\u224B\\u0338|\\u224D\\u20D2|\\u224E\\u0338|\\u224F\\u0338|\\u2250\\u0338|\\u2261\\u20E5|\\u2264\\u20D2|\\u2265\\u20D2|\\u2266\\u0338|\\u2267\\u0338|\\u2268\\uFE00|\\u2269\\uFE00|\\u226A\\u0338|\\u226A\\u20D2|\\u226B\\u0338|\\u226B\\u20D2|\\u227F\\u0338|\\u2282\\u20D2|\\u2283\\u20D2|\\u228A\\uFE00|\\u228B\\uFE00|\\u228F\\u0338|\\u2290\\u0338|\\u2293\\uFE00|\\u2294\\uFE00|\\u22B4\\u20D2|\\u22B5\\u20D2|\\u22D8\\u0338|\\u22D9\\u0338|\\u22DA\\uFE00|\\u22DB\\uFE00|\\u22F5\\u0338|\\u22F9\\u0338|\\u2933\\u0338|\\u29CF\\u0338|\\u29D0\\u0338|\\u2A6D\\u0338|\\u2A70\\u0338|\\u2A7D\\u0338|\\u2A7E\\u0338|\\u2AA1\\u0338|\\u2AA2\\u0338|\\u2AAC\\uFE00|\\u2AAD\\uFE00|\\u2AAF\\u0338|\\u2AB0\\u0338|\\u2AC5\\u0338|\\u2AC6\\u0338|\\u2ACB\\uFE00|\\u2ACC\\uFE00|\\u2AFD\\u20E5|[\\xA0-\\u0113\\u0116-\\u0122\\u0124-\\u012B\\u012E-\\u014D\\u0150-\\u017E\\u0192\\u01B5\\u01F5\\u0237\\u02C6\\u02C7\\u02D8-\\u02DD\\u0311\\u0391-\\u03A1\\u03A3-\\u03A9\\u03B1-\\u03C9\\u03D1\\u03D2\\u03D5\\u03D6\\u03DC\\u03DD\\u03F0\\u03F1\\u03F5\\u03F6\\u0401-\\u040C\\u040E-\\u044F\\u0451-\\u045C\\u045E\\u045F\\u2002-\\u2005\\u2007-\\u2010\\u2013-\\u2016\\u2018-\\u201A\\u201C-\\u201E\\u2020-\\u2022\\u2025\\u2026\\u2030-\\u2035\\u2039\\u203A\\u203E\\u2041\\u2043\\u2044\\u204F\\u2057\\u205F-\\u2063\\u20AC\\u20DB\\u20DC\\u2102\\u2105\\u210A-\\u2113\\u2115-\\u211E\\u2122\\u2124\\u2127-\\u2129\\u212C\\u212D\\u212F-\\u2131\\u2133-\\u2138\\u2145-\\u2148\\u2153-\\u215E\\u2190-\\u219B\\u219D-\\u21A7\\u21A9-\\u21AE\\u21B0-\\u21B3\\u21B5-\\u21B7\\u21BA-\\u21DB\\u21DD\\u21E4\\u21E5\\u21F5\\u21FD-\\u2205\\u2207-\\u2209\\u220B\\u220C\\u220F-\\u2214\\u2216-\\u2218\\u221A\\u221D-\\u2238\\u223A-\\u2257\\u2259\\u225A\\u225C\\u225F-\\u2262\\u2264-\\u228B\\u228D-\\u229B\\u229D-\\u22A5\\u22A7-\\u22B0\\u22B2-\\u22BB\\u22BD-\\u22DB\\u22DE-\\u22E3\\u22E6-\\u22F7\\u22F9-\\u22FE\\u2305\\u2306\\u2308-\\u2310\\u2312\\u2313\\u2315\\u2316\\u231C-\\u231F\\u2322\\u2323\\u232D\\u232E\\u2336\\u233D\\u233F\\u237C\\u23B0\\u23B1\\u23B4-\\u23B6\\u23DC-\\u23DF\\u23E2\\u23E7\\u2423\\u24C8\\u2500\\u2502\\u250C\\u2510\\u2514\\u2518\\u251C\\u2524\\u252C\\u2534\\u253C\\u2550-\\u256C\\u2580\\u2584\\u2588\\u2591-\\u2593\\u25A1\\u25AA\\u25AB\\u25AD\\u25AE\\u25B1\\u25B3-\\u25B5\\u25B8\\u25B9\\u25BD-\\u25BF\\u25C2\\u25C3\\u25CA\\u25CB\\u25EC\\u25EF\\u25F8-\\u25FC\\u2605\\u2606\\u260E\\u2640\\u2642\\u2660\\u2663\\u2665\\u2666\\u266A\\u266D-\\u266F\\u2713\\u2717\\u2720\\u2736\\u2758\\u2772\\u2773\\u27C8\\u27C9\\u27E6-\\u27ED\\u27F5-\\u27FA\\u27FC\\u27FF\\u2902-\\u2905\\u290C-\\u2913\\u2916\\u2919-\\u2920\\u2923-\\u292A\\u2933\\u2935-\\u2939\\u293C\\u293D\\u2945\\u2948-\\u294B\\u294E-\\u2976\\u2978\\u2979\\u297B-\\u297F\\u2985\\u2986\\u298B-\\u2996\\u299A\\u299C\\u299D\\u29A4-\\u29B7\\u29B9\\u29BB\\u29BC\\u29BE-\\u29C5\\u29C9\\u29CD-\\u29D0\\u29DC-\\u29DE\\u29E3-\\u29E5\\u29EB\\u29F4\\u29F6\\u2A00-\\u2A02\\u2A04\\u2A06\\u2A0C\\u2A0D\\u2A10-\\u2A17\\u2A22-\\u2A27\\u2A29\\u2A2A\\u2A2D-\\u2A31\\u2A33-\\u2A3C\\u2A3F\\u2A40\\u2A42-\\u2A4D\\u2A50\\u2A53-\\u2A58\\u2A5A-\\u2A5D\\u2A5F\\u2A66\\u2A6A\\u2A6D-\\u2A75\\u2A77-\\u2A9A\\u2A9D-\\u2AA2\\u2AA4-\\u2AB0\\u2AB3-\\u2AC8\\u2ACB\\u2ACC\\u2ACF-\\u2ADB\\u2AE4\\u2AE6-\\u2AE9\\u2AEB-\\u2AF3\\u2AFD\\uFB00-\\uFB04]|\\uD835[\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDCCF\\uDD04\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDD6B]/g;\n\tvar encodeMap = {'\\xAD':'shy','\\u200C':'zwnj','\\u200D':'zwj','\\u200E':'lrm','\\u2063':'ic','\\u2062':'it','\\u2061':'af','\\u200F':'rlm','\\u200B':'ZeroWidthSpace','\\u2060':'NoBreak','\\u0311':'DownBreve','\\u20DB':'tdot','\\u20DC':'DotDot','\\t':'Tab','\\n':'NewLine','\\u2008':'puncsp','\\u205F':'MediumSpace','\\u2009':'thinsp','\\u200A':'hairsp','\\u2004':'emsp13','\\u2002':'ensp','\\u2005':'emsp14','\\u2003':'emsp','\\u2007':'numsp','\\xA0':'nbsp','\\u205F\\u200A':'ThickSpace','\\u203E':'oline','_':'lowbar','\\u2010':'dash','\\u2013':'ndash','\\u2014':'mdash','\\u2015':'horbar',',':'comma',';':'semi','\\u204F':'bsemi',':':'colon','\\u2A74':'Colone','!':'excl','\\xA1':'iexcl','?':'quest','\\xBF':'iquest','.':'period','\\u2025':'nldr','\\u2026':'mldr','\\xB7':'middot','\\'':'apos','\\u2018':'lsquo','\\u2019':'rsquo','\\u201A':'sbquo','\\u2039':'lsaquo','\\u203A':'rsaquo','\"':'quot','\\u201C':'ldquo','\\u201D':'rdquo','\\u201E':'bdquo','\\xAB':'laquo','\\xBB':'raquo','(':'lpar',')':'rpar','[':'lsqb',']':'rsqb','{':'lcub','}':'rcub','\\u2308':'lceil','\\u2309':'rceil','\\u230A':'lfloor','\\u230B':'rfloor','\\u2985':'lopar','\\u2986':'ropar','\\u298B':'lbrke','\\u298C':'rbrke','\\u298D':'lbrkslu','\\u298E':'rbrksld','\\u298F':'lbrksld','\\u2990':'rbrkslu','\\u2991':'langd','\\u2992':'rangd','\\u2993':'lparlt','\\u2994':'rpargt','\\u2995':'gtlPar','\\u2996':'ltrPar','\\u27E6':'lobrk','\\u27E7':'robrk','\\u27E8':'lang','\\u27E9':'rang','\\u27EA':'Lang','\\u27EB':'Rang','\\u27EC':'loang','\\u27ED':'roang','\\u2772':'lbbrk','\\u2773':'rbbrk','\\u2016':'Vert','\\xA7':'sect','\\xB6':'para','@':'commat','*':'ast','/':'sol','undefined':null,'&':'amp','#':'num','%':'percnt','\\u2030':'permil','\\u2031':'pertenk','\\u2020':'dagger','\\u2021':'Dagger','\\u2022':'bull','\\u2043':'hybull','\\u2032':'prime','\\u2033':'Prime','\\u2034':'tprime','\\u2057':'qprime','\\u2035':'bprime','\\u2041':'caret','`':'grave','\\xB4':'acute','\\u02DC':'tilde','^':'Hat','\\xAF':'macr','\\u02D8':'breve','\\u02D9':'dot','\\xA8':'die','\\u02DA':'ring','\\u02DD':'dblac','\\xB8':'cedil','\\u02DB':'ogon','\\u02C6':'circ','\\u02C7':'caron','\\xB0':'deg','\\xA9':'copy','\\xAE':'reg','\\u2117':'copysr','\\u2118':'wp','\\u211E':'rx','\\u2127':'mho','\\u2129':'iiota','\\u2190':'larr','\\u219A':'nlarr','\\u2192':'rarr','\\u219B':'nrarr','\\u2191':'uarr','\\u2193':'darr','\\u2194':'harr','\\u21AE':'nharr','\\u2195':'varr','\\u2196':'nwarr','\\u2197':'nearr','\\u2198':'searr','\\u2199':'swarr','\\u219D':'rarrw','\\u219D\\u0338':'nrarrw','\\u219E':'Larr','\\u219F':'Uarr','\\u21A0':'Rarr','\\u21A1':'Darr','\\u21A2':'larrtl','\\u21A3':'rarrtl','\\u21A4':'mapstoleft','\\u21A5':'mapstoup','\\u21A6':'map','\\u21A7':'mapstodown','\\u21A9':'larrhk','\\u21AA':'rarrhk','\\u21AB':'larrlp','\\u21AC':'rarrlp','\\u21AD':'harrw','\\u21B0':'lsh','\\u21B1':'rsh','\\u21B2':'ldsh','\\u21B3':'rdsh','\\u21B5':'crarr','\\u21B6':'cularr','\\u21B7':'curarr','\\u21BA':'olarr','\\u21BB':'orarr','\\u21BC':'lharu','\\u21BD':'lhard','\\u21BE':'uharr','\\u21BF':'uharl','\\u21C0':'rharu','\\u21C1':'rhard','\\u21C2':'dharr','\\u21C3':'dharl','\\u21C4':'rlarr','\\u21C5':'udarr','\\u21C6':'lrarr','\\u21C7':'llarr','\\u21C8':'uuarr','\\u21C9':'rrarr','\\u21CA':'ddarr','\\u21CB':'lrhar','\\u21CC':'rlhar','\\u21D0':'lArr','\\u21CD':'nlArr','\\u21D1':'uArr','\\u21D2':'rArr','\\u21CF':'nrArr','\\u21D3':'dArr','\\u21D4':'iff','\\u21CE':'nhArr','\\u21D5':'vArr','\\u21D6':'nwArr','\\u21D7':'neArr','\\u21D8':'seArr','\\u21D9':'swArr','\\u21DA':'lAarr','\\u21DB':'rAarr','\\u21DD':'zigrarr','\\u21E4':'larrb','\\u21E5':'rarrb','\\u21F5':'duarr','\\u21FD':'loarr','\\u21FE':'roarr','\\u21FF':'hoarr','\\u2200':'forall','\\u2201':'comp','\\u2202':'part','\\u2202\\u0338':'npart','\\u2203':'exist','\\u2204':'nexist','\\u2205':'empty','\\u2207':'Del','\\u2208':'in','\\u2209':'notin','\\u220B':'ni','\\u220C':'notni','\\u03F6':'bepsi','\\u220F':'prod','\\u2210':'coprod','\\u2211':'sum','+':'plus','\\xB1':'pm','\\xF7':'div','\\xD7':'times','<':'lt','\\u226E':'nlt','<\\u20D2':'nvlt','=':'equals','\\u2260':'ne','=\\u20E5':'bne','\\u2A75':'Equal','>':'gt','\\u226F':'ngt','>\\u20D2':'nvgt','\\xAC':'not','|':'vert','\\xA6':'brvbar','\\u2212':'minus','\\u2213':'mp','\\u2214':'plusdo','\\u2044':'frasl','\\u2216':'setmn','\\u2217':'lowast','\\u2218':'compfn','\\u221A':'Sqrt','\\u221D':'prop','\\u221E':'infin','\\u221F':'angrt','\\u2220':'ang','\\u2220\\u20D2':'nang','\\u2221':'angmsd','\\u2222':'angsph','\\u2223':'mid','\\u2224':'nmid','\\u2225':'par','\\u2226':'npar','\\u2227':'and','\\u2228':'or','\\u2229':'cap','\\u2229\\uFE00':'caps','\\u222A':'cup','\\u222A\\uFE00':'cups','\\u222B':'int','\\u222C':'Int','\\u222D':'tint','\\u2A0C':'qint','\\u222E':'oint','\\u222F':'Conint','\\u2230':'Cconint','\\u2231':'cwint','\\u2232':'cwconint','\\u2233':'awconint','\\u2234':'there4','\\u2235':'becaus','\\u2236':'ratio','\\u2237':'Colon','\\u2238':'minusd','\\u223A':'mDDot','\\u223B':'homtht','\\u223C':'sim','\\u2241':'nsim','\\u223C\\u20D2':'nvsim','\\u223D':'bsim','\\u223D\\u0331':'race','\\u223E':'ac','\\u223E\\u0333':'acE','\\u223F':'acd','\\u2240':'wr','\\u2242':'esim','\\u2242\\u0338':'nesim','\\u2243':'sime','\\u2244':'nsime','\\u2245':'cong','\\u2247':'ncong','\\u2246':'simne','\\u2248':'ap','\\u2249':'nap','\\u224A':'ape','\\u224B':'apid','\\u224B\\u0338':'napid','\\u224C':'bcong','\\u224D':'CupCap','\\u226D':'NotCupCap','\\u224D\\u20D2':'nvap','\\u224E':'bump','\\u224E\\u0338':'nbump','\\u224F':'bumpe','\\u224F\\u0338':'nbumpe','\\u2250':'doteq','\\u2250\\u0338':'nedot','\\u2251':'eDot','\\u2252':'efDot','\\u2253':'erDot','\\u2254':'colone','\\u2255':'ecolon','\\u2256':'ecir','\\u2257':'cire','\\u2259':'wedgeq','\\u225A':'veeeq','\\u225C':'trie','\\u225F':'equest','\\u2261':'equiv','\\u2262':'nequiv','\\u2261\\u20E5':'bnequiv','\\u2264':'le','\\u2270':'nle','\\u2264\\u20D2':'nvle','\\u2265':'ge','\\u2271':'nge','\\u2265\\u20D2':'nvge','\\u2266':'lE','\\u2266\\u0338':'nlE','\\u2267':'gE','\\u2267\\u0338':'ngE','\\u2268\\uFE00':'lvnE','\\u2268':'lnE','\\u2269':'gnE','\\u2269\\uFE00':'gvnE','\\u226A':'ll','\\u226A\\u0338':'nLtv','\\u226A\\u20D2':'nLt','\\u226B':'gg','\\u226B\\u0338':'nGtv','\\u226B\\u20D2':'nGt','\\u226C':'twixt','\\u2272':'lsim','\\u2274':'nlsim','\\u2273':'gsim','\\u2275':'ngsim','\\u2276':'lg','\\u2278':'ntlg','\\u2277':'gl','\\u2279':'ntgl','\\u227A':'pr','\\u2280':'npr','\\u227B':'sc','\\u2281':'nsc','\\u227C':'prcue','\\u22E0':'nprcue','\\u227D':'sccue','\\u22E1':'nsccue','\\u227E':'prsim','\\u227F':'scsim','\\u227F\\u0338':'NotSucceedsTilde','\\u2282':'sub','\\u2284':'nsub','\\u2282\\u20D2':'vnsub','\\u2283':'sup','\\u2285':'nsup','\\u2283\\u20D2':'vnsup','\\u2286':'sube','\\u2288':'nsube','\\u2287':'supe','\\u2289':'nsupe','\\u228A\\uFE00':'vsubne','\\u228A':'subne','\\u228B\\uFE00':'vsupne','\\u228B':'supne','\\u228D':'cupdot','\\u228E':'uplus','\\u228F':'sqsub','\\u228F\\u0338':'NotSquareSubset','\\u2290':'sqsup','\\u2290\\u0338':'NotSquareSuperset','\\u2291':'sqsube','\\u22E2':'nsqsube','\\u2292':'sqsupe','\\u22E3':'nsqsupe','\\u2293':'sqcap','\\u2293\\uFE00':'sqcaps','\\u2294':'sqcup','\\u2294\\uFE00':'sqcups','\\u2295':'oplus','\\u2296':'ominus','\\u2297':'otimes','\\u2298':'osol','\\u2299':'odot','\\u229A':'ocir','\\u229B':'oast','\\u229D':'odash','\\u229E':'plusb','\\u229F':'minusb','\\u22A0':'timesb','\\u22A1':'sdotb','\\u22A2':'vdash','\\u22AC':'nvdash','\\u22A3':'dashv','\\u22A4':'top','\\u22A5':'bot','\\u22A7':'models','\\u22A8':'vDash','\\u22AD':'nvDash','\\u22A9':'Vdash','\\u22AE':'nVdash','\\u22AA':'Vvdash','\\u22AB':'VDash','\\u22AF':'nVDash','\\u22B0':'prurel','\\u22B2':'vltri','\\u22EA':'nltri','\\u22B3':'vrtri','\\u22EB':'nrtri','\\u22B4':'ltrie','\\u22EC':'nltrie','\\u22B4\\u20D2':'nvltrie','\\u22B5':'rtrie','\\u22ED':'nrtrie','\\u22B5\\u20D2':'nvrtrie','\\u22B6':'origof','\\u22B7':'imof','\\u22B8':'mumap','\\u22B9':'hercon','\\u22BA':'intcal','\\u22BB':'veebar','\\u22BD':'barvee','\\u22BE':'angrtvb','\\u22BF':'lrtri','\\u22C0':'Wedge','\\u22C1':'Vee','\\u22C2':'xcap','\\u22C3':'xcup','\\u22C4':'diam','\\u22C5':'sdot','\\u22C6':'Star','\\u22C7':'divonx','\\u22C8':'bowtie','\\u22C9':'ltimes','\\u22CA':'rtimes','\\u22CB':'lthree','\\u22CC':'rthree','\\u22CD':'bsime','\\u22CE':'cuvee','\\u22CF':'cuwed','\\u22D0':'Sub','\\u22D1':'Sup','\\u22D2':'Cap','\\u22D3':'Cup','\\u22D4':'fork','\\u22D5':'epar','\\u22D6':'ltdot','\\u22D7':'gtdot','\\u22D8':'Ll','\\u22D8\\u0338':'nLl','\\u22D9':'Gg','\\u22D9\\u0338':'nGg','\\u22DA\\uFE00':'lesg','\\u22DA':'leg','\\u22DB':'gel','\\u22DB\\uFE00':'gesl','\\u22DE':'cuepr','\\u22DF':'cuesc','\\u22E6':'lnsim','\\u22E7':'gnsim','\\u22E8':'prnsim','\\u22E9':'scnsim','\\u22EE':'vellip','\\u22EF':'ctdot','\\u22F0':'utdot','\\u22F1':'dtdot','\\u22F2':'disin','\\u22F3':'isinsv','\\u22F4':'isins','\\u22F5':'isindot','\\u22F5\\u0338':'notindot','\\u22F6':'notinvc','\\u22F7':'notinvb','\\u22F9':'isinE','\\u22F9\\u0338':'notinE','\\u22FA':'nisd','\\u22FB':'xnis','\\u22FC':'nis','\\u22FD':'notnivc','\\u22FE':'notnivb','\\u2305':'barwed','\\u2306':'Barwed','\\u230C':'drcrop','\\u230D':'dlcrop','\\u230E':'urcrop','\\u230F':'ulcrop','\\u2310':'bnot','\\u2312':'profline','\\u2313':'profsurf','\\u2315':'telrec','\\u2316':'target','\\u231C':'ulcorn','\\u231D':'urcorn','\\u231E':'dlcorn','\\u231F':'drcorn','\\u2322':'frown','\\u2323':'smile','\\u232D':'cylcty','\\u232E':'profalar','\\u2336':'topbot','\\u233D':'ovbar','\\u233F':'solbar','\\u237C':'angzarr','\\u23B0':'lmoust','\\u23B1':'rmoust','\\u23B4':'tbrk','\\u23B5':'bbrk','\\u23B6':'bbrktbrk','\\u23DC':'OverParenthesis','\\u23DD':'UnderParenthesis','\\u23DE':'OverBrace','\\u23DF':'UnderBrace','\\u23E2':'trpezium','\\u23E7':'elinters','\\u2423':'blank','\\u2500':'boxh','\\u2502':'boxv','\\u250C':'boxdr','\\u2510':'boxdl','\\u2514':'boxur','\\u2518':'boxul','\\u251C':'boxvr','\\u2524':'boxvl','\\u252C':'boxhd','\\u2534':'boxhu','\\u253C':'boxvh','\\u2550':'boxH','\\u2551':'boxV','\\u2552':'boxdR','\\u2553':'boxDr','\\u2554':'boxDR','\\u2555':'boxdL','\\u2556':'boxDl','\\u2557':'boxDL','\\u2558':'boxuR','\\u2559':'boxUr','\\u255A':'boxUR','\\u255B':'boxuL','\\u255C':'boxUl','\\u255D':'boxUL','\\u255E':'boxvR','\\u255F':'boxVr','\\u2560':'boxVR','\\u2561':'boxvL','\\u2562':'boxVl','\\u2563':'boxVL','\\u2564':'boxHd','\\u2565':'boxhD','\\u2566':'boxHD','\\u2567':'boxHu','\\u2568':'boxhU','\\u2569':'boxHU','\\u256A':'boxvH','\\u256B':'boxVh','\\u256C':'boxVH','\\u2580':'uhblk','\\u2584':'lhblk','\\u2588':'block','\\u2591':'blk14','\\u2592':'blk12','\\u2593':'blk34','\\u25A1':'squ','\\u25AA':'squf','\\u25AB':'EmptyVerySmallSquare','\\u25AD':'rect','\\u25AE':'marker','\\u25B1':'fltns','\\u25B3':'xutri','\\u25B4':'utrif','\\u25B5':'utri','\\u25B8':'rtrif','\\u25B9':'rtri','\\u25BD':'xdtri','\\u25BE':'dtrif','\\u25BF':'dtri','\\u25C2':'ltrif','\\u25C3':'ltri','\\u25CA':'loz','\\u25CB':'cir','\\u25EC':'tridot','\\u25EF':'xcirc','\\u25F8':'ultri','\\u25F9':'urtri','\\u25FA':'lltri','\\u25FB':'EmptySmallSquare','\\u25FC':'FilledSmallSquare','\\u2605':'starf','\\u2606':'star','\\u260E':'phone','\\u2640':'female','\\u2642':'male','\\u2660':'spades','\\u2663':'clubs','\\u2665':'hearts','\\u2666':'diams','\\u266A':'sung','\\u2713':'check','\\u2717':'cross','\\u2720':'malt','\\u2736':'sext','\\u2758':'VerticalSeparator','\\u27C8':'bsolhsub','\\u27C9':'suphsol','\\u27F5':'xlarr','\\u27F6':'xrarr','\\u27F7':'xharr','\\u27F8':'xlArr','\\u27F9':'xrArr','\\u27FA':'xhArr','\\u27FC':'xmap','\\u27FF':'dzigrarr','\\u2902':'nvlArr','\\u2903':'nvrArr','\\u2904':'nvHarr','\\u2905':'Map','\\u290C':'lbarr','\\u290D':'rbarr','\\u290E':'lBarr','\\u290F':'rBarr','\\u2910':'RBarr','\\u2911':'DDotrahd','\\u2912':'UpArrowBar','\\u2913':'DownArrowBar','\\u2916':'Rarrtl','\\u2919':'latail','\\u291A':'ratail','\\u291B':'lAtail','\\u291C':'rAtail','\\u291D':'larrfs','\\u291E':'rarrfs','\\u291F':'larrbfs','\\u2920':'rarrbfs','\\u2923':'nwarhk','\\u2924':'nearhk','\\u2925':'searhk','\\u2926':'swarhk','\\u2927':'nwnear','\\u2928':'toea','\\u2929':'tosa','\\u292A':'swnwar','\\u2933':'rarrc','\\u2933\\u0338':'nrarrc','\\u2935':'cudarrr','\\u2936':'ldca','\\u2937':'rdca','\\u2938':'cudarrl','\\u2939':'larrpl','\\u293C':'curarrm','\\u293D':'cularrp','\\u2945':'rarrpl','\\u2948':'harrcir','\\u2949':'Uarrocir','\\u294A':'lurdshar','\\u294B':'ldrushar','\\u294E':'LeftRightVector','\\u294F':'RightUpDownVector','\\u2950':'DownLeftRightVector','\\u2951':'LeftUpDownVector','\\u2952':'LeftVectorBar','\\u2953':'RightVectorBar','\\u2954':'RightUpVectorBar','\\u2955':'RightDownVectorBar','\\u2956':'DownLeftVectorBar','\\u2957':'DownRightVectorBar','\\u2958':'LeftUpVectorBar','\\u2959':'LeftDownVectorBar','\\u295A':'LeftTeeVector','\\u295B':'RightTeeVector','\\u295C':'RightUpTeeVector','\\u295D':'RightDownTeeVector','\\u295E':'DownLeftTeeVector','\\u295F':'DownRightTeeVector','\\u2960':'LeftUpTeeVector','\\u2961':'LeftDownTeeVector','\\u2962':'lHar','\\u2963':'uHar','\\u2964':'rHar','\\u2965':'dHar','\\u2966':'luruhar','\\u2967':'ldrdhar','\\u2968':'ruluhar','\\u2969':'rdldhar','\\u296A':'lharul','\\u296B':'llhard','\\u296C':'rharul','\\u296D':'lrhard','\\u296E':'udhar','\\u296F':'duhar','\\u2970':'RoundImplies','\\u2971':'erarr','\\u2972':'simrarr','\\u2973':'larrsim','\\u2974':'rarrsim','\\u2975':'rarrap','\\u2976':'ltlarr','\\u2978':'gtrarr','\\u2979':'subrarr','\\u297B':'suplarr','\\u297C':'lfisht','\\u297D':'rfisht','\\u297E':'ufisht','\\u297F':'dfisht','\\u299A':'vzigzag','\\u299C':'vangrt','\\u299D':'angrtvbd','\\u29A4':'ange','\\u29A5':'range','\\u29A6':'dwangle','\\u29A7':'uwangle','\\u29A8':'angmsdaa','\\u29A9':'angmsdab','\\u29AA':'angmsdac','\\u29AB':'angmsdad','\\u29AC':'angmsdae','\\u29AD':'angmsdaf','\\u29AE':'angmsdag','\\u29AF':'angmsdah','\\u29B0':'bemptyv','\\u29B1':'demptyv','\\u29B2':'cemptyv','\\u29B3':'raemptyv','\\u29B4':'laemptyv','\\u29B5':'ohbar','\\u29B6':'omid','\\u29B7':'opar','\\u29B9':'operp','\\u29BB':'olcross','\\u29BC':'odsold','\\u29BE':'olcir','\\u29BF':'ofcir','\\u29C0':'olt','\\u29C1':'ogt','\\u29C2':'cirscir','\\u29C3':'cirE','\\u29C4':'solb','\\u29C5':'bsolb','\\u29C9':'boxbox','\\u29CD':'trisb','\\u29CE':'rtriltri','\\u29CF':'LeftTriangleBar','\\u29CF\\u0338':'NotLeftTriangleBar','\\u29D0':'RightTriangleBar','\\u29D0\\u0338':'NotRightTriangleBar','\\u29DC':'iinfin','\\u29DD':'infintie','\\u29DE':'nvinfin','\\u29E3':'eparsl','\\u29E4':'smeparsl','\\u29E5':'eqvparsl','\\u29EB':'lozf','\\u29F4':'RuleDelayed','\\u29F6':'dsol','\\u2A00':'xodot','\\u2A01':'xoplus','\\u2A02':'xotime','\\u2A04':'xuplus','\\u2A06':'xsqcup','\\u2A0D':'fpartint','\\u2A10':'cirfnint','\\u2A11':'awint','\\u2A12':'rppolint','\\u2A13':'scpolint','\\u2A14':'npolint','\\u2A15':'pointint','\\u2A16':'quatint','\\u2A17':'intlarhk','\\u2A22':'pluscir','\\u2A23':'plusacir','\\u2A24':'simplus','\\u2A25':'plusdu','\\u2A26':'plussim','\\u2A27':'plustwo','\\u2A29':'mcomma','\\u2A2A':'minusdu','\\u2A2D':'loplus','\\u2A2E':'roplus','\\u2A2F':'Cross','\\u2A30':'timesd','\\u2A31':'timesbar','\\u2A33':'smashp','\\u2A34':'lotimes','\\u2A35':'rotimes','\\u2A36':'otimesas','\\u2A37':'Otimes','\\u2A38':'odiv','\\u2A39':'triplus','\\u2A3A':'triminus','\\u2A3B':'tritime','\\u2A3C':'iprod','\\u2A3F':'amalg','\\u2A40':'capdot','\\u2A42':'ncup','\\u2A43':'ncap','\\u2A44':'capand','\\u2A45':'cupor','\\u2A46':'cupcap','\\u2A47':'capcup','\\u2A48':'cupbrcap','\\u2A49':'capbrcup','\\u2A4A':'cupcup','\\u2A4B':'capcap','\\u2A4C':'ccups','\\u2A4D':'ccaps','\\u2A50':'ccupssm','\\u2A53':'And','\\u2A54':'Or','\\u2A55':'andand','\\u2A56':'oror','\\u2A57':'orslope','\\u2A58':'andslope','\\u2A5A':'andv','\\u2A5B':'orv','\\u2A5C':'andd','\\u2A5D':'ord','\\u2A5F':'wedbar','\\u2A66':'sdote','\\u2A6A':'simdot','\\u2A6D':'congdot','\\u2A6D\\u0338':'ncongdot','\\u2A6E':'easter','\\u2A6F':'apacir','\\u2A70':'apE','\\u2A70\\u0338':'napE','\\u2A71':'eplus','\\u2A72':'pluse','\\u2A73':'Esim','\\u2A77':'eDDot','\\u2A78':'equivDD','\\u2A79':'ltcir','\\u2A7A':'gtcir','\\u2A7B':'ltquest','\\u2A7C':'gtquest','\\u2A7D':'les','\\u2A7D\\u0338':'nles','\\u2A7E':'ges','\\u2A7E\\u0338':'nges','\\u2A7F':'lesdot','\\u2A80':'gesdot','\\u2A81':'lesdoto','\\u2A82':'gesdoto','\\u2A83':'lesdotor','\\u2A84':'gesdotol','\\u2A85':'lap','\\u2A86':'gap','\\u2A87':'lne','\\u2A88':'gne','\\u2A89':'lnap','\\u2A8A':'gnap','\\u2A8B':'lEg','\\u2A8C':'gEl','\\u2A8D':'lsime','\\u2A8E':'gsime','\\u2A8F':'lsimg','\\u2A90':'gsiml','\\u2A91':'lgE','\\u2A92':'glE','\\u2A93':'lesges','\\u2A94':'gesles','\\u2A95':'els','\\u2A96':'egs','\\u2A97':'elsdot','\\u2A98':'egsdot','\\u2A99':'el','\\u2A9A':'eg','\\u2A9D':'siml','\\u2A9E':'simg','\\u2A9F':'simlE','\\u2AA0':'simgE','\\u2AA1':'LessLess','\\u2AA1\\u0338':'NotNestedLessLess','\\u2AA2':'GreaterGreater','\\u2AA2\\u0338':'NotNestedGreaterGreater','\\u2AA4':'glj','\\u2AA5':'gla','\\u2AA6':'ltcc','\\u2AA7':'gtcc','\\u2AA8':'lescc','\\u2AA9':'gescc','\\u2AAA':'smt','\\u2AAB':'lat','\\u2AAC':'smte','\\u2AAC\\uFE00':'smtes','\\u2AAD':'late','\\u2AAD\\uFE00':'lates','\\u2AAE':'bumpE','\\u2AAF':'pre','\\u2AAF\\u0338':'npre','\\u2AB0':'sce','\\u2AB0\\u0338':'nsce','\\u2AB3':'prE','\\u2AB4':'scE','\\u2AB5':'prnE','\\u2AB6':'scnE','\\u2AB7':'prap','\\u2AB8':'scap','\\u2AB9':'prnap','\\u2ABA':'scnap','\\u2ABB':'Pr','\\u2ABC':'Sc','\\u2ABD':'subdot','\\u2ABE':'supdot','\\u2ABF':'subplus','\\u2AC0':'supplus','\\u2AC1':'submult','\\u2AC2':'supmult','\\u2AC3':'subedot','\\u2AC4':'supedot','\\u2AC5':'subE','\\u2AC5\\u0338':'nsubE','\\u2AC6':'supE','\\u2AC6\\u0338':'nsupE','\\u2AC7':'subsim','\\u2AC8':'supsim','\\u2ACB\\uFE00':'vsubnE','\\u2ACB':'subnE','\\u2ACC\\uFE00':'vsupnE','\\u2ACC':'supnE','\\u2ACF':'csub','\\u2AD0':'csup','\\u2AD1':'csube','\\u2AD2':'csupe','\\u2AD3':'subsup','\\u2AD4':'supsub','\\u2AD5':'subsub','\\u2AD6':'supsup','\\u2AD7':'suphsub','\\u2AD8':'supdsub','\\u2AD9':'forkv','\\u2ADA':'topfork','\\u2ADB':'mlcp','\\u2AE4':'Dashv','\\u2AE6':'Vdashl','\\u2AE7':'Barv','\\u2AE8':'vBar','\\u2AE9':'vBarv','\\u2AEB':'Vbar','\\u2AEC':'Not','\\u2AED':'bNot','\\u2AEE':'rnmid','\\u2AEF':'cirmid','\\u2AF0':'midcir','\\u2AF1':'topcir','\\u2AF2':'nhpar','\\u2AF3':'parsim','\\u2AFD':'parsl','\\u2AFD\\u20E5':'nparsl','\\u266D':'flat','\\u266E':'natur','\\u266F':'sharp','\\xA4':'curren','\\xA2':'cent','$':'dollar','\\xA3':'pound','\\xA5':'yen','\\u20AC':'euro','\\xB9':'sup1','\\xBD':'half','\\u2153':'frac13','\\xBC':'frac14','\\u2155':'frac15','\\u2159':'frac16','\\u215B':'frac18','\\xB2':'sup2','\\u2154':'frac23','\\u2156':'frac25','\\xB3':'sup3','\\xBE':'frac34','\\u2157':'frac35','\\u215C':'frac38','\\u2158':'frac45','\\u215A':'frac56','\\u215D':'frac58','\\u215E':'frac78','\\uD835\\uDCB6':'ascr','\\uD835\\uDD52':'aopf','\\uD835\\uDD1E':'afr','\\uD835\\uDD38':'Aopf','\\uD835\\uDD04':'Afr','\\uD835\\uDC9C':'Ascr','\\xAA':'ordf','\\xE1':'aacute','\\xC1':'Aacute','\\xE0':'agrave','\\xC0':'Agrave','\\u0103':'abreve','\\u0102':'Abreve','\\xE2':'acirc','\\xC2':'Acirc','\\xE5':'aring','\\xC5':'angst','\\xE4':'auml','\\xC4':'Auml','\\xE3':'atilde','\\xC3':'Atilde','\\u0105':'aogon','\\u0104':'Aogon','\\u0101':'amacr','\\u0100':'Amacr','\\xE6':'aelig','\\xC6':'AElig','\\uD835\\uDCB7':'bscr','\\uD835\\uDD53':'bopf','\\uD835\\uDD1F':'bfr','\\uD835\\uDD39':'Bopf','\\u212C':'Bscr','\\uD835\\uDD05':'Bfr','\\uD835\\uDD20':'cfr','\\uD835\\uDCB8':'cscr','\\uD835\\uDD54':'copf','\\u212D':'Cfr','\\uD835\\uDC9E':'Cscr','\\u2102':'Copf','\\u0107':'cacute','\\u0106':'Cacute','\\u0109':'ccirc','\\u0108':'Ccirc','\\u010D':'ccaron','\\u010C':'Ccaron','\\u010B':'cdot','\\u010A':'Cdot','\\xE7':'ccedil','\\xC7':'Ccedil','\\u2105':'incare','\\uD835\\uDD21':'dfr','\\u2146':'dd','\\uD835\\uDD55':'dopf','\\uD835\\uDCB9':'dscr','\\uD835\\uDC9F':'Dscr','\\uD835\\uDD07':'Dfr','\\u2145':'DD','\\uD835\\uDD3B':'Dopf','\\u010F':'dcaron','\\u010E':'Dcaron','\\u0111':'dstrok','\\u0110':'Dstrok','\\xF0':'eth','\\xD0':'ETH','\\u2147':'ee','\\u212F':'escr','\\uD835\\uDD22':'efr','\\uD835\\uDD56':'eopf','\\u2130':'Escr','\\uD835\\uDD08':'Efr','\\uD835\\uDD3C':'Eopf','\\xE9':'eacute','\\xC9':'Eacute','\\xE8':'egrave','\\xC8':'Egrave','\\xEA':'ecirc','\\xCA':'Ecirc','\\u011B':'ecaron','\\u011A':'Ecaron','\\xEB':'euml','\\xCB':'Euml','\\u0117':'edot','\\u0116':'Edot','\\u0119':'eogon','\\u0118':'Eogon','\\u0113':'emacr','\\u0112':'Emacr','\\uD835\\uDD23':'ffr','\\uD835\\uDD57':'fopf','\\uD835\\uDCBB':'fscr','\\uD835\\uDD09':'Ffr','\\uD835\\uDD3D':'Fopf','\\u2131':'Fscr','\\uFB00':'fflig','\\uFB03':'ffilig','\\uFB04':'ffllig','\\uFB01':'filig','fj':'fjlig','\\uFB02':'fllig','\\u0192':'fnof','\\u210A':'gscr','\\uD835\\uDD58':'gopf','\\uD835\\uDD24':'gfr','\\uD835\\uDCA2':'Gscr','\\uD835\\uDD3E':'Gopf','\\uD835\\uDD0A':'Gfr','\\u01F5':'gacute','\\u011F':'gbreve','\\u011E':'Gbreve','\\u011D':'gcirc','\\u011C':'Gcirc','\\u0121':'gdot','\\u0120':'Gdot','\\u0122':'Gcedil','\\uD835\\uDD25':'hfr','\\u210E':'planckh','\\uD835\\uDCBD':'hscr','\\uD835\\uDD59':'hopf','\\u210B':'Hscr','\\u210C':'Hfr','\\u210D':'Hopf','\\u0125':'hcirc','\\u0124':'Hcirc','\\u210F':'hbar','\\u0127':'hstrok','\\u0126':'Hstrok','\\uD835\\uDD5A':'iopf','\\uD835\\uDD26':'ifr','\\uD835\\uDCBE':'iscr','\\u2148':'ii','\\uD835\\uDD40':'Iopf','\\u2110':'Iscr','\\u2111':'Im','\\xED':'iacute','\\xCD':'Iacute','\\xEC':'igrave','\\xCC':'Igrave','\\xEE':'icirc','\\xCE':'Icirc','\\xEF':'iuml','\\xCF':'Iuml','\\u0129':'itilde','\\u0128':'Itilde','\\u0130':'Idot','\\u012F':'iogon','\\u012E':'Iogon','\\u012B':'imacr','\\u012A':'Imacr','\\u0133':'ijlig','\\u0132':'IJlig','\\u0131':'imath','\\uD835\\uDCBF':'jscr','\\uD835\\uDD5B':'jopf','\\uD835\\uDD27':'jfr','\\uD835\\uDCA5':'Jscr','\\uD835\\uDD0D':'Jfr','\\uD835\\uDD41':'Jopf','\\u0135':'jcirc','\\u0134':'Jcirc','\\u0237':'jmath','\\uD835\\uDD5C':'kopf','\\uD835\\uDCC0':'kscr','\\uD835\\uDD28':'kfr','\\uD835\\uDCA6':'Kscr','\\uD835\\uDD42':'Kopf','\\uD835\\uDD0E':'Kfr','\\u0137':'kcedil','\\u0136':'Kcedil','\\uD835\\uDD29':'lfr','\\uD835\\uDCC1':'lscr','\\u2113':'ell','\\uD835\\uDD5D':'lopf','\\u2112':'Lscr','\\uD835\\uDD0F':'Lfr','\\uD835\\uDD43':'Lopf','\\u013A':'lacute','\\u0139':'Lacute','\\u013E':'lcaron','\\u013D':'Lcaron','\\u013C':'lcedil','\\u013B':'Lcedil','\\u0142':'lstrok','\\u0141':'Lstrok','\\u0140':'lmidot','\\u013F':'Lmidot','\\uD835\\uDD2A':'mfr','\\uD835\\uDD5E':'mopf','\\uD835\\uDCC2':'mscr','\\uD835\\uDD10':'Mfr','\\uD835\\uDD44':'Mopf','\\u2133':'Mscr','\\uD835\\uDD2B':'nfr','\\uD835\\uDD5F':'nopf','\\uD835\\uDCC3':'nscr','\\u2115':'Nopf','\\uD835\\uDCA9':'Nscr','\\uD835\\uDD11':'Nfr','\\u0144':'nacute','\\u0143':'Nacute','\\u0148':'ncaron','\\u0147':'Ncaron','\\xF1':'ntilde','\\xD1':'Ntilde','\\u0146':'ncedil','\\u0145':'Ncedil','\\u2116':'numero','\\u014B':'eng','\\u014A':'ENG','\\uD835\\uDD60':'oopf','\\uD835\\uDD2C':'ofr','\\u2134':'oscr','\\uD835\\uDCAA':'Oscr','\\uD835\\uDD12':'Ofr','\\uD835\\uDD46':'Oopf','\\xBA':'ordm','\\xF3':'oacute','\\xD3':'Oacute','\\xF2':'ograve','\\xD2':'Ograve','\\xF4':'ocirc','\\xD4':'Ocirc','\\xF6':'ouml','\\xD6':'Ouml','\\u0151':'odblac','\\u0150':'Odblac','\\xF5':'otilde','\\xD5':'Otilde','\\xF8':'oslash','\\xD8':'Oslash','\\u014D':'omacr','\\u014C':'Omacr','\\u0153':'oelig','\\u0152':'OElig','\\uD835\\uDD2D':'pfr','\\uD835\\uDCC5':'pscr','\\uD835\\uDD61':'popf','\\u2119':'Popf','\\uD835\\uDD13':'Pfr','\\uD835\\uDCAB':'Pscr','\\uD835\\uDD62':'qopf','\\uD835\\uDD2E':'qfr','\\uD835\\uDCC6':'qscr','\\uD835\\uDCAC':'Qscr','\\uD835\\uDD14':'Qfr','\\u211A':'Qopf','\\u0138':'kgreen','\\uD835\\uDD2F':'rfr','\\uD835\\uDD63':'ropf','\\uD835\\uDCC7':'rscr','\\u211B':'Rscr','\\u211C':'Re','\\u211D':'Ropf','\\u0155':'racute','\\u0154':'Racute','\\u0159':'rcaron','\\u0158':'Rcaron','\\u0157':'rcedil','\\u0156':'Rcedil','\\uD835\\uDD64':'sopf','\\uD835\\uDCC8':'sscr','\\uD835\\uDD30':'sfr','\\uD835\\uDD4A':'Sopf','\\uD835\\uDD16':'Sfr','\\uD835\\uDCAE':'Sscr','\\u24C8':'oS','\\u015B':'sacute','\\u015A':'Sacute','\\u015D':'scirc','\\u015C':'Scirc','\\u0161':'scaron','\\u0160':'Scaron','\\u015F':'scedil','\\u015E':'Scedil','\\xDF':'szlig','\\uD835\\uDD31':'tfr','\\uD835\\uDCC9':'tscr','\\uD835\\uDD65':'topf','\\uD835\\uDCAF':'Tscr','\\uD835\\uDD17':'Tfr','\\uD835\\uDD4B':'Topf','\\u0165':'tcaron','\\u0164':'Tcaron','\\u0163':'tcedil','\\u0162':'Tcedil','\\u2122':'trade','\\u0167':'tstrok','\\u0166':'Tstrok','\\uD835\\uDCCA':'uscr','\\uD835\\uDD66':'uopf','\\uD835\\uDD32':'ufr','\\uD835\\uDD4C':'Uopf','\\uD835\\uDD18':'Ufr','\\uD835\\uDCB0':'Uscr','\\xFA':'uacute','\\xDA':'Uacute','\\xF9':'ugrave','\\xD9':'Ugrave','\\u016D':'ubreve','\\u016C':'Ubreve','\\xFB':'ucirc','\\xDB':'Ucirc','\\u016F':'uring','\\u016E':'Uring','\\xFC':'uuml','\\xDC':'Uuml','\\u0171':'udblac','\\u0170':'Udblac','\\u0169':'utilde','\\u0168':'Utilde','\\u0173':'uogon','\\u0172':'Uogon','\\u016B':'umacr','\\u016A':'Umacr','\\uD835\\uDD33':'vfr','\\uD835\\uDD67':'vopf','\\uD835\\uDCCB':'vscr','\\uD835\\uDD19':'Vfr','\\uD835\\uDD4D':'Vopf','\\uD835\\uDCB1':'Vscr','\\uD835\\uDD68':'wopf','\\uD835\\uDCCC':'wscr','\\uD835\\uDD34':'wfr','\\uD835\\uDCB2':'Wscr','\\uD835\\uDD4E':'Wopf','\\uD835\\uDD1A':'Wfr','\\u0175':'wcirc','\\u0174':'Wcirc','\\uD835\\uDD35':'xfr','\\uD835\\uDCCD':'xscr','\\uD835\\uDD69':'xopf','\\uD835\\uDD4F':'Xopf','\\uD835\\uDD1B':'Xfr','\\uD835\\uDCB3':'Xscr','\\uD835\\uDD36':'yfr','\\uD835\\uDCCE':'yscr','\\uD835\\uDD6A':'yopf','\\uD835\\uDCB4':'Yscr','\\uD835\\uDD1C':'Yfr','\\uD835\\uDD50':'Yopf','\\xFD':'yacute','\\xDD':'Yacute','\\u0177':'ycirc','\\u0176':'Ycirc','\\xFF':'yuml','\\u0178':'Yuml','\\uD835\\uDCCF':'zscr','\\uD835\\uDD37':'zfr','\\uD835\\uDD6B':'zopf','\\u2128':'Zfr','\\u2124':'Zopf','\\uD835\\uDCB5':'Zscr','\\u017A':'zacute','\\u0179':'Zacute','\\u017E':'zcaron','\\u017D':'Zcaron','\\u017C':'zdot','\\u017B':'Zdot','\\u01B5':'imped','\\xFE':'thorn','\\xDE':'THORN','\\u0149':'napos','\\u03B1':'alpha','\\u0391':'Alpha','\\u03B2':'beta','\\u0392':'Beta','\\u03B3':'gamma','\\u0393':'Gamma','\\u03B4':'delta','\\u0394':'Delta','\\u03B5':'epsi','\\u03F5':'epsiv','\\u0395':'Epsilon','\\u03DD':'gammad','\\u03DC':'Gammad','\\u03B6':'zeta','\\u0396':'Zeta','\\u03B7':'eta','\\u0397':'Eta','\\u03B8':'theta','\\u03D1':'thetav','\\u0398':'Theta','\\u03B9':'iota','\\u0399':'Iota','\\u03BA':'kappa','\\u03F0':'kappav','\\u039A':'Kappa','\\u03BB':'lambda','\\u039B':'Lambda','\\u03BC':'mu','\\xB5':'micro','\\u039C':'Mu','\\u03BD':'nu','\\u039D':'Nu','\\u03BE':'xi','\\u039E':'Xi','\\u03BF':'omicron','\\u039F':'Omicron','\\u03C0':'pi','\\u03D6':'piv','\\u03A0':'Pi','\\u03C1':'rho','\\u03F1':'rhov','\\u03A1':'Rho','\\u03C3':'sigma','\\u03A3':'Sigma','\\u03C2':'sigmaf','\\u03C4':'tau','\\u03A4':'Tau','\\u03C5':'upsi','\\u03A5':'Upsilon','\\u03D2':'Upsi','\\u03C6':'phi','\\u03D5':'phiv','\\u03A6':'Phi','\\u03C7':'chi','\\u03A7':'Chi','\\u03C8':'psi','\\u03A8':'Psi','\\u03C9':'omega','\\u03A9':'ohm','\\u0430':'acy','\\u0410':'Acy','\\u0431':'bcy','\\u0411':'Bcy','\\u0432':'vcy','\\u0412':'Vcy','\\u0433':'gcy','\\u0413':'Gcy','\\u0453':'gjcy','\\u0403':'GJcy','\\u0434':'dcy','\\u0414':'Dcy','\\u0452':'djcy','\\u0402':'DJcy','\\u0435':'iecy','\\u0415':'IEcy','\\u0451':'iocy','\\u0401':'IOcy','\\u0454':'jukcy','\\u0404':'Jukcy','\\u0436':'zhcy','\\u0416':'ZHcy','\\u0437':'zcy','\\u0417':'Zcy','\\u0455':'dscy','\\u0405':'DScy','\\u0438':'icy','\\u0418':'Icy','\\u0456':'iukcy','\\u0406':'Iukcy','\\u0457':'yicy','\\u0407':'YIcy','\\u0439':'jcy','\\u0419':'Jcy','\\u0458':'jsercy','\\u0408':'Jsercy','\\u043A':'kcy','\\u041A':'Kcy','\\u045C':'kjcy','\\u040C':'KJcy','\\u043B':'lcy','\\u041B':'Lcy','\\u0459':'ljcy','\\u0409':'LJcy','\\u043C':'mcy','\\u041C':'Mcy','\\u043D':'ncy','\\u041D':'Ncy','\\u045A':'njcy','\\u040A':'NJcy','\\u043E':'ocy','\\u041E':'Ocy','\\u043F':'pcy','\\u041F':'Pcy','\\u0440':'rcy','\\u0420':'Rcy','\\u0441':'scy','\\u0421':'Scy','\\u0442':'tcy','\\u0422':'Tcy','\\u045B':'tshcy','\\u040B':'TSHcy','\\u0443':'ucy','\\u0423':'Ucy','\\u045E':'ubrcy','\\u040E':'Ubrcy','\\u0444':'fcy','\\u0424':'Fcy','\\u0445':'khcy','\\u0425':'KHcy','\\u0446':'tscy','\\u0426':'TScy','\\u0447':'chcy','\\u0427':'CHcy','\\u045F':'dzcy','\\u040F':'DZcy','\\u0448':'shcy','\\u0428':'SHcy','\\u0449':'shchcy','\\u0429':'SHCHcy','\\u044A':'hardcy','\\u042A':'HARDcy','\\u044B':'ycy','\\u042B':'Ycy','\\u044C':'softcy','\\u042C':'SOFTcy','\\u044D':'ecy','\\u042D':'Ecy','\\u044E':'yucy','\\u042E':'YUcy','\\u044F':'yacy','\\u042F':'YAcy','\\u2135':'aleph','\\u2136':'beth','\\u2137':'gimel','\\u2138':'daleth'};\n\n\tvar regexEscape = /[\"&'<>`]/g;\n\tvar escapeMap = {\n\t\t'\"': '"',\n\t\t'&': '&',\n\t\t'\\'': ''',\n\t\t'<': '<',\n\t\t// See https://mathiasbynens.be/notes/ambiguous-ampersands: in HTML, the\n\t\t// following is not strictly necessary unless it’s part of a tag or an\n\t\t// unquoted attribute value. We’re only escaping it to support those\n\t\t// situations, and for XML support.\n\t\t'>': '>',\n\t\t// In Internet Explorer ≤ 8, the backtick character can be used\n\t\t// to break out of (un)quoted attribute values or HTML comments.\n\t\t// See http://html5sec.org/#102, http://html5sec.org/#108, and\n\t\t// http://html5sec.org/#133.\n\t\t'`': '`'\n\t};\n\n\tvar regexInvalidEntity = /(?:[xX][^a-fA-F0-9]|[^0-9xX])/;\n\tvar regexInvalidRawCodePoint = /[\\0-\\x08\\x0B\\x0E-\\x1F\\x7F-\\x9F\\uFDD0-\\uFDEF\\uFFFE\\uFFFF]|[\\uD83F\\uD87F\\uD8BF\\uD8FF\\uD93F\\uD97F\\uD9BF\\uD9FF\\uDA3F\\uDA7F\\uDABF\\uDAFF\\uDB3F\\uDB7F\\uDBBF\\uDBFF][\\uDFFE\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/;\n\tvar regexDecode = /&(CounterClockwiseContourIntegral|DoubleLongLeftRightArrow|ClockwiseContourIntegral|NotNestedGreaterGreater|NotSquareSupersetEqual|DiacriticalDoubleAcute|NotRightTriangleEqual|NotSucceedsSlantEqual|NotPrecedesSlantEqual|CloseCurlyDoubleQuote|NegativeVeryThinSpace|DoubleContourIntegral|FilledVerySmallSquare|CapitalDifferentialD|OpenCurlyDoubleQuote|EmptyVerySmallSquare|NestedGreaterGreater|DoubleLongRightArrow|NotLeftTriangleEqual|NotGreaterSlantEqual|ReverseUpEquilibrium|DoubleLeftRightArrow|NotSquareSubsetEqual|NotDoubleVerticalBar|RightArrowLeftArrow|NotGreaterFullEqual|NotRightTriangleBar|SquareSupersetEqual|DownLeftRightVector|DoubleLongLeftArrow|leftrightsquigarrow|LeftArrowRightArrow|NegativeMediumSpace|blacktriangleright|RightDownVectorBar|PrecedesSlantEqual|RightDoubleBracket|SucceedsSlantEqual|NotLeftTriangleBar|RightTriangleEqual|SquareIntersection|RightDownTeeVector|ReverseEquilibrium|NegativeThickSpace|longleftrightarrow|Longleftrightarrow|LongLeftRightArrow|DownRightTeeVector|DownRightVectorBar|GreaterSlantEqual|SquareSubsetEqual|LeftDownVectorBar|LeftDoubleBracket|VerticalSeparator|rightleftharpoons|NotGreaterGreater|NotSquareSuperset|blacktriangleleft|blacktriangledown|NegativeThinSpace|LeftDownTeeVector|NotLessSlantEqual|leftrightharpoons|DoubleUpDownArrow|DoubleVerticalBar|LeftTriangleEqual|FilledSmallSquare|twoheadrightarrow|NotNestedLessLess|DownLeftTeeVector|DownLeftVectorBar|RightAngleBracket|NotTildeFullEqual|NotReverseElement|RightUpDownVector|DiacriticalTilde|NotSucceedsTilde|circlearrowright|NotPrecedesEqual|rightharpoondown|DoubleRightArrow|NotSucceedsEqual|NonBreakingSpace|NotRightTriangle|LessEqualGreater|RightUpTeeVector|LeftAngleBracket|GreaterFullEqual|DownArrowUpArrow|RightUpVectorBar|twoheadleftarrow|GreaterEqualLess|downharpoonright|RightTriangleBar|ntrianglerighteq|NotSupersetEqual|LeftUpDownVector|DiacriticalAcute|rightrightarrows|vartriangleright|UpArrowDownArrow|DiacriticalGrave|UnderParenthesis|EmptySmallSquare|LeftUpVectorBar|leftrightarrows|DownRightVector|downharpoonleft|trianglerighteq|ShortRightArrow|OverParenthesis|DoubleLeftArrow|DoubleDownArrow|NotSquareSubset|bigtriangledown|ntrianglelefteq|UpperRightArrow|curvearrowright|vartriangleleft|NotLeftTriangle|nleftrightarrow|LowerRightArrow|NotHumpDownHump|NotGreaterTilde|rightthreetimes|LeftUpTeeVector|NotGreaterEqual|straightepsilon|LeftTriangleBar|rightsquigarrow|ContourIntegral|rightleftarrows|CloseCurlyQuote|RightDownVector|LeftRightVector|nLeftrightarrow|leftharpoondown|circlearrowleft|SquareSuperset|OpenCurlyQuote|hookrightarrow|HorizontalLine|DiacriticalDot|NotLessGreater|ntriangleright|DoubleRightTee|InvisibleComma|InvisibleTimes|LowerLeftArrow|DownLeftVector|NotSubsetEqual|curvearrowleft|trianglelefteq|NotVerticalBar|TildeFullEqual|downdownarrows|NotGreaterLess|RightTeeVector|ZeroWidthSpace|looparrowright|LongRightArrow|doublebarwedge|ShortLeftArrow|ShortDownArrow|RightVectorBar|GreaterGreater|ReverseElement|rightharpoonup|LessSlantEqual|leftthreetimes|upharpoonright|rightarrowtail|LeftDownVector|Longrightarrow|NestedLessLess|UpperLeftArrow|nshortparallel|leftleftarrows|leftrightarrow|Leftrightarrow|LeftRightArrow|longrightarrow|upharpoonleft|RightArrowBar|ApplyFunction|LeftTeeVector|leftarrowtail|NotEqualTilde|varsubsetneqq|varsupsetneqq|RightTeeArrow|SucceedsEqual|SucceedsTilde|LeftVectorBar|SupersetEqual|hookleftarrow|DifferentialD|VerticalTilde|VeryThinSpace|blacktriangle|bigtriangleup|LessFullEqual|divideontimes|leftharpoonup|UpEquilibrium|ntriangleleft|RightTriangle|measuredangle|shortparallel|longleftarrow|Longleftarrow|LongLeftArrow|DoubleLeftTee|Poincareplane|PrecedesEqual|triangleright|DoubleUpArrow|RightUpVector|fallingdotseq|looparrowleft|PrecedesTilde|NotTildeEqual|NotTildeTilde|smallsetminus|Proportional|triangleleft|triangledown|UnderBracket|NotHumpEqual|exponentiale|ExponentialE|NotLessTilde|HilbertSpace|RightCeiling|blacklozenge|varsupsetneq|HumpDownHump|GreaterEqual|VerticalLine|LeftTeeArrow|NotLessEqual|DownTeeArrow|LeftTriangle|varsubsetneq|Intersection|NotCongruent|DownArrowBar|LeftUpVector|LeftArrowBar|risingdotseq|GreaterTilde|RoundImplies|SquareSubset|ShortUpArrow|NotSuperset|quaternions|precnapprox|backepsilon|preccurlyeq|OverBracket|blacksquare|MediumSpace|VerticalBar|circledcirc|circleddash|CircleMinus|CircleTimes|LessGreater|curlyeqprec|curlyeqsucc|diamondsuit|UpDownArrow|Updownarrow|RuleDelayed|Rrightarrow|updownarrow|RightVector|nRightarrow|nrightarrow|eqslantless|LeftCeiling|Equilibrium|SmallCircle|expectation|NotSucceeds|thickapprox|GreaterLess|SquareUnion|NotPrecedes|NotLessLess|straightphi|succnapprox|succcurlyeq|SubsetEqual|sqsupseteq|Proportion|Laplacetrf|ImaginaryI|supsetneqq|NotGreater|gtreqqless|NotElement|ThickSpace|TildeEqual|TildeTilde|Fouriertrf|rmoustache|EqualTilde|eqslantgtr|UnderBrace|LeftVector|UpArrowBar|nLeftarrow|nsubseteqq|subsetneqq|nsupseteqq|nleftarrow|succapprox|lessapprox|UpTeeArrow|upuparrows|curlywedge|lesseqqgtr|varepsilon|varnothing|RightFloor|complement|CirclePlus|sqsubseteq|Lleftarrow|circledast|RightArrow|Rightarrow|rightarrow|lmoustache|Bernoullis|precapprox|mapstoleft|mapstodown|longmapsto|dotsquare|downarrow|DoubleDot|nsubseteq|supsetneq|leftarrow|nsupseteq|subsetneq|ThinSpace|ngeqslant|subseteqq|HumpEqual|NotSubset|triangleq|NotCupCap|lesseqgtr|heartsuit|TripleDot|Leftarrow|Coproduct|Congruent|varpropto|complexes|gvertneqq|LeftArrow|LessTilde|supseteqq|MinusPlus|CircleDot|nleqslant|NotExists|gtreqless|nparallel|UnionPlus|LeftFloor|checkmark|CenterDot|centerdot|Mellintrf|gtrapprox|bigotimes|OverBrace|spadesuit|therefore|pitchfork|rationals|PlusMinus|Backslash|Therefore|DownBreve|backsimeq|backprime|DownArrow|nshortmid|Downarrow|lvertneqq|eqvparsl|imagline|imagpart|infintie|integers|Integral|intercal|LessLess|Uarrocir|intlarhk|sqsupset|angmsdaf|sqsubset|llcorner|vartheta|cupbrcap|lnapprox|Superset|SuchThat|succnsim|succneqq|angmsdag|biguplus|curlyvee|trpezium|Succeeds|NotTilde|bigwedge|angmsdah|angrtvbd|triminus|cwconint|fpartint|lrcorner|smeparsl|subseteq|urcorner|lurdshar|laemptyv|DDotrahd|approxeq|ldrushar|awconint|mapstoup|backcong|shortmid|triangle|geqslant|gesdotol|timesbar|circledR|circledS|setminus|multimap|naturals|scpolint|ncongdot|RightTee|boxminus|gnapprox|boxtimes|andslope|thicksim|angmsdaa|varsigma|cirfnint|rtriltri|angmsdab|rppolint|angmsdac|barwedge|drbkarow|clubsuit|thetasym|bsolhsub|capbrcup|dzigrarr|doteqdot|DotEqual|dotminus|UnderBar|NotEqual|realpart|otimesas|ulcorner|hksearow|hkswarow|parallel|PartialD|elinters|emptyset|plusacir|bbrktbrk|angmsdad|pointint|bigoplus|angmsdae|Precedes|bigsqcup|varkappa|notindot|supseteq|precneqq|precnsim|profalar|profline|profsurf|leqslant|lesdotor|raemptyv|subplus|notnivb|notnivc|subrarr|zigrarr|vzigzag|submult|subedot|Element|between|cirscir|larrbfs|larrsim|lotimes|lbrksld|lbrkslu|lozenge|ldrdhar|dbkarow|bigcirc|epsilon|simrarr|simplus|ltquest|Epsilon|luruhar|gtquest|maltese|npolint|eqcolon|npreceq|bigodot|ddagger|gtrless|bnequiv|harrcir|ddotseq|equivDD|backsim|demptyv|nsqsube|nsqsupe|Upsilon|nsubset|upsilon|minusdu|nsucceq|swarrow|nsupset|coloneq|searrow|boxplus|napprox|natural|asympeq|alefsym|congdot|nearrow|bigstar|diamond|supplus|tritime|LeftTee|nvinfin|triplus|NewLine|nvltrie|nvrtrie|nwarrow|nexists|Diamond|ruluhar|Implies|supmult|angzarr|suplarr|suphsub|questeq|because|digamma|Because|olcross|bemptyv|omicron|Omicron|rotimes|NoBreak|intprod|angrtvb|orderof|uwangle|suphsol|lesdoto|orslope|DownTee|realine|cudarrl|rdldhar|OverBar|supedot|lessdot|supdsub|topfork|succsim|rbrkslu|rbrksld|pertenk|cudarrr|isindot|planckh|lessgtr|pluscir|gesdoto|plussim|plustwo|lesssim|cularrp|rarrsim|Cayleys|notinva|notinvb|notinvc|UpArrow|Uparrow|uparrow|NotLess|dwangle|precsim|Product|curarrm|Cconint|dotplus|rarrbfs|ccupssm|Cedilla|cemptyv|notniva|quatint|frac35|frac38|frac45|frac56|frac58|frac78|tridot|xoplus|gacute|gammad|Gammad|lfisht|lfloor|bigcup|sqsupe|gbreve|Gbreve|lharul|sqsube|sqcups|Gcedil|apacir|llhard|lmidot|Lmidot|lmoust|andand|sqcaps|approx|Abreve|spades|circeq|tprime|divide|topcir|Assign|topbot|gesdot|divonx|xuplus|timesd|gesles|atilde|solbar|SOFTcy|loplus|timesb|lowast|lowbar|dlcorn|dlcrop|softcy|dollar|lparlt|thksim|lrhard|Atilde|lsaquo|smashp|bigvee|thinsp|wreath|bkarow|lsquor|lstrok|Lstrok|lthree|ltimes|ltlarr|DotDot|simdot|ltrPar|weierp|xsqcup|angmsd|sigmav|sigmaf|zeetrf|Zcaron|zcaron|mapsto|vsupne|thetav|cirmid|marker|mcomma|Zacute|vsubnE|there4|gtlPar|vsubne|bottom|gtrarr|SHCHcy|shchcy|midast|midcir|middot|minusb|minusd|gtrdot|bowtie|sfrown|mnplus|models|colone|seswar|Colone|mstpos|searhk|gtrsim|nacute|Nacute|boxbox|telrec|hairsp|Tcedil|nbumpe|scnsim|ncaron|Ncaron|ncedil|Ncedil|hamilt|Scedil|nearhk|hardcy|HARDcy|tcedil|Tcaron|commat|nequiv|nesear|tcaron|target|hearts|nexist|varrho|scedil|Scaron|scaron|hellip|Sacute|sacute|hercon|swnwar|compfn|rtimes|rthree|rsquor|rsaquo|zacute|wedgeq|homtht|barvee|barwed|Barwed|rpargt|horbar|conint|swarhk|roplus|nltrie|hslash|hstrok|Hstrok|rmoust|Conint|bprime|hybull|hyphen|iacute|Iacute|supsup|supsub|supsim|varphi|coprod|brvbar|agrave|Supset|supset|igrave|Igrave|notinE|Agrave|iiiint|iinfin|copysr|wedbar|Verbar|vangrt|becaus|incare|verbar|inodot|bullet|drcorn|intcal|drcrop|cularr|vellip|Utilde|bumpeq|cupcap|dstrok|Dstrok|CupCap|cupcup|cupdot|eacute|Eacute|supdot|iquest|easter|ecaron|Ecaron|ecolon|isinsv|utilde|itilde|Itilde|curarr|succeq|Bumpeq|cacute|ulcrop|nparsl|Cacute|nprcue|egrave|Egrave|nrarrc|nrarrw|subsup|subsub|nrtrie|jsercy|nsccue|Jsercy|kappav|kcedil|Kcedil|subsim|ulcorn|nsimeq|egsdot|veebar|kgreen|capand|elsdot|Subset|subset|curren|aacute|lacute|Lacute|emptyv|ntilde|Ntilde|lagran|lambda|Lambda|capcap|Ugrave|langle|subdot|emsp13|numero|emsp14|nvdash|nvDash|nVdash|nVDash|ugrave|ufisht|nvHarr|larrfs|nvlArr|larrhk|larrlp|larrpl|nvrArr|Udblac|nwarhk|larrtl|nwnear|oacute|Oacute|latail|lAtail|sstarf|lbrace|odblac|Odblac|lbrack|udblac|odsold|eparsl|lcaron|Lcaron|ograve|Ograve|lcedil|Lcedil|Aacute|ssmile|ssetmn|squarf|ldquor|capcup|ominus|cylcty|rharul|eqcirc|dagger|rfloor|rfisht|Dagger|daleth|equals|origof|capdot|equest|dcaron|Dcaron|rdquor|oslash|Oslash|otilde|Otilde|otimes|Otimes|urcrop|Ubreve|ubreve|Yacute|Uacute|uacute|Rcedil|rcedil|urcorn|parsim|Rcaron|Vdashl|rcaron|Tstrok|percnt|period|permil|Exists|yacute|rbrack|rbrace|phmmat|ccaron|Ccaron|planck|ccedil|plankv|tstrok|female|plusdo|plusdu|ffilig|plusmn|ffllig|Ccedil|rAtail|dfisht|bernou|ratail|Rarrtl|rarrtl|angsph|rarrpl|rarrlp|rarrhk|xwedge|xotime|forall|ForAll|Vvdash|vsupnE|preceq|bigcap|frac12|frac13|frac14|primes|rarrfs|prnsim|frac15|Square|frac16|square|lesdot|frac18|frac23|propto|prurel|rarrap|rangle|puncsp|frac25|Racute|qprime|racute|lesges|frac34|abreve|AElig|eqsim|utdot|setmn|urtri|Equal|Uring|seArr|uring|searr|dashv|Dashv|mumap|nabla|iogon|Iogon|sdote|sdotb|scsim|napid|napos|equiv|natur|Acirc|dblac|erarr|nbump|iprod|erDot|ucirc|awint|esdot|angrt|ncong|isinE|scnap|Scirc|scirc|ndash|isins|Ubrcy|nearr|neArr|isinv|nedot|ubrcy|acute|Ycirc|iukcy|Iukcy|xutri|nesim|caret|jcirc|Jcirc|caron|twixt|ddarr|sccue|exist|jmath|sbquo|ngeqq|angst|ccaps|lceil|ngsim|UpTee|delta|Delta|rtrif|nharr|nhArr|nhpar|rtrie|jukcy|Jukcy|kappa|rsquo|Kappa|nlarr|nlArr|TSHcy|rrarr|aogon|Aogon|fflig|xrarr|tshcy|ccirc|nleqq|filig|upsih|nless|dharl|nlsim|fjlig|ropar|nltri|dharr|robrk|roarr|fllig|fltns|roang|rnmid|subnE|subne|lAarr|trisb|Ccirc|acirc|ccups|blank|VDash|forkv|Vdash|langd|cedil|blk12|blk14|laquo|strns|diams|notin|vDash|larrb|blk34|block|disin|uplus|vdash|vBarv|aelig|starf|Wedge|check|xrArr|lates|lbarr|lBarr|notni|lbbrk|bcong|frasl|lbrke|frown|vrtri|vprop|vnsup|gamma|Gamma|wedge|xodot|bdquo|srarr|doteq|ldquo|boxdl|boxdL|gcirc|Gcirc|boxDl|boxDL|boxdr|boxdR|boxDr|TRADE|trade|rlhar|boxDR|vnsub|npart|vltri|rlarr|boxhd|boxhD|nprec|gescc|nrarr|nrArr|boxHd|boxHD|boxhu|boxhU|nrtri|boxHu|clubs|boxHU|times|colon|Colon|gimel|xlArr|Tilde|nsime|tilde|nsmid|nspar|THORN|thorn|xlarr|nsube|nsubE|thkap|xhArr|comma|nsucc|boxul|boxuL|nsupe|nsupE|gneqq|gnsim|boxUl|boxUL|grave|boxur|boxuR|boxUr|boxUR|lescc|angle|bepsi|boxvh|varpi|boxvH|numsp|Theta|gsime|gsiml|theta|boxVh|boxVH|boxvl|gtcir|gtdot|boxvL|boxVl|boxVL|crarr|cross|Cross|nvsim|boxvr|nwarr|nwArr|sqsup|dtdot|Uogon|lhard|lharu|dtrif|ocirc|Ocirc|lhblk|duarr|odash|sqsub|Hacek|sqcup|llarr|duhar|oelig|OElig|ofcir|boxvR|uogon|lltri|boxVr|csube|uuarr|ohbar|csupe|ctdot|olarr|olcir|harrw|oline|sqcap|omacr|Omacr|omega|Omega|boxVR|aleph|lneqq|lnsim|loang|loarr|rharu|lobrk|hcirc|operp|oplus|rhard|Hcirc|orarr|Union|order|ecirc|Ecirc|cuepr|szlig|cuesc|breve|reals|eDDot|Breve|hoarr|lopar|utrif|rdquo|Umacr|umacr|efDot|swArr|ultri|alpha|rceil|ovbar|swarr|Wcirc|wcirc|smtes|smile|bsemi|lrarr|aring|parsl|lrhar|bsime|uhblk|lrtri|cupor|Aring|uharr|uharl|slarr|rbrke|bsolb|lsime|rbbrk|RBarr|lsimg|phone|rBarr|rbarr|icirc|lsquo|Icirc|emacr|Emacr|ratio|simne|plusb|simlE|simgE|simeq|pluse|ltcir|ltdot|empty|xharr|xdtri|iexcl|Alpha|ltrie|rarrw|pound|ltrif|xcirc|bumpe|prcue|bumpE|asymp|amacr|cuvee|Sigma|sigma|iiint|udhar|iiota|ijlig|IJlig|supnE|imacr|Imacr|prime|Prime|image|prnap|eogon|Eogon|rarrc|mdash|mDDot|cuwed|imath|supne|imped|Amacr|udarr|prsim|micro|rarrb|cwint|raquo|infin|eplus|range|rangd|Ucirc|radic|minus|amalg|veeeq|rAarr|epsiv|ycirc|quest|sharp|quot|zwnj|Qscr|race|qscr|Qopf|qopf|qint|rang|Rang|Zscr|zscr|Zopf|zopf|rarr|rArr|Rarr|Pscr|pscr|prop|prod|prnE|prec|ZHcy|zhcy|prap|Zeta|zeta|Popf|popf|Zdot|plus|zdot|Yuml|yuml|phiv|YUcy|yucy|Yscr|yscr|perp|Yopf|yopf|part|para|YIcy|Ouml|rcub|yicy|YAcy|rdca|ouml|osol|Oscr|rdsh|yacy|real|oscr|xvee|andd|rect|andv|Xscr|oror|ordm|ordf|xscr|ange|aopf|Aopf|rHar|Xopf|opar|Oopf|xopf|xnis|rhov|oopf|omid|xmap|oint|apid|apos|ogon|ascr|Ascr|odot|odiv|xcup|xcap|ocir|oast|nvlt|nvle|nvgt|nvge|nvap|Wscr|wscr|auml|ntlg|ntgl|nsup|nsub|nsim|Nscr|nscr|nsce|Wopf|ring|npre|wopf|npar|Auml|Barv|bbrk|Nopf|nopf|nmid|nLtv|beta|ropf|Ropf|Beta|beth|nles|rpar|nleq|bnot|bNot|nldr|NJcy|rscr|Rscr|Vscr|vscr|rsqb|njcy|bopf|nisd|Bopf|rtri|Vopf|nGtv|ngtr|vopf|boxh|boxH|boxv|nges|ngeq|boxV|bscr|scap|Bscr|bsim|Vert|vert|bsol|bull|bump|caps|cdot|ncup|scnE|ncap|nbsp|napE|Cdot|cent|sdot|Vbar|nang|vBar|chcy|Mscr|mscr|sect|semi|CHcy|Mopf|mopf|sext|circ|cire|mldr|mlcp|cirE|comp|shcy|SHcy|vArr|varr|cong|copf|Copf|copy|COPY|malt|male|macr|lvnE|cscr|ltri|sime|ltcc|simg|Cscr|siml|csub|Uuml|lsqb|lsim|uuml|csup|Lscr|lscr|utri|smid|lpar|cups|smte|lozf|darr|Lopf|Uscr|solb|lopf|sopf|Sopf|lneq|uscr|spar|dArr|lnap|Darr|dash|Sqrt|LJcy|ljcy|lHar|dHar|Upsi|upsi|diam|lesg|djcy|DJcy|leqq|dopf|Dopf|dscr|Dscr|dscy|ldsh|ldca|squf|DScy|sscr|Sscr|dsol|lcub|late|star|Star|Uopf|Larr|lArr|larr|uopf|dtri|dzcy|sube|subE|Lang|lang|Kscr|kscr|Kopf|kopf|KJcy|kjcy|KHcy|khcy|DZcy|ecir|edot|eDot|Jscr|jscr|succ|Jopf|jopf|Edot|uHar|emsp|ensp|Iuml|iuml|eopf|isin|Iscr|iscr|Eopf|epar|sung|epsi|escr|sup1|sup2|sup3|Iota|iota|supe|supE|Iopf|iopf|IOcy|iocy|Escr|esim|Esim|imof|Uarr|QUOT|uArr|uarr|euml|IEcy|iecy|Idot|Euml|euro|excl|Hscr|hscr|Hopf|hopf|TScy|tscy|Tscr|hbar|tscr|flat|tbrk|fnof|hArr|harr|half|fopf|Fopf|tdot|gvnE|fork|trie|gtcc|fscr|Fscr|gdot|gsim|Gscr|gscr|Gopf|gopf|gneq|Gdot|tosa|gnap|Topf|topf|geqq|toea|GJcy|gjcy|tint|gesl|mid|Sfr|ggg|top|ges|gla|glE|glj|geq|gne|gEl|gel|gnE|Gcy|gcy|gap|Tfr|tfr|Tcy|tcy|Hat|Tau|Ffr|tau|Tab|hfr|Hfr|ffr|Fcy|fcy|icy|Icy|iff|ETH|eth|ifr|Ifr|Eta|eta|int|Int|Sup|sup|ucy|Ucy|Sum|sum|jcy|ENG|ufr|Ufr|eng|Jcy|jfr|els|ell|egs|Efr|efr|Jfr|uml|kcy|Kcy|Ecy|ecy|kfr|Kfr|lap|Sub|sub|lat|lcy|Lcy|leg|Dot|dot|lEg|leq|les|squ|div|die|lfr|Lfr|lgE|Dfr|dfr|Del|deg|Dcy|dcy|lne|lnE|sol|loz|smt|Cup|lrm|cup|lsh|Lsh|sim|shy|map|Map|mcy|Mcy|mfr|Mfr|mho|gfr|Gfr|sfr|cir|Chi|chi|nap|Cfr|vcy|Vcy|cfr|Scy|scy|ncy|Ncy|vee|Vee|Cap|cap|nfr|scE|sce|Nfr|nge|ngE|nGg|vfr|Vfr|ngt|bot|nGt|nis|niv|Rsh|rsh|nle|nlE|bne|Bfr|bfr|nLl|nlt|nLt|Bcy|bcy|not|Not|rlm|wfr|Wfr|npr|nsc|num|ocy|ast|Ocy|ofr|xfr|Xfr|Ofr|ogt|ohm|apE|olt|Rho|ape|rho|Rfr|rfr|ord|REG|ang|reg|orv|And|and|AMP|Rcy|amp|Afr|ycy|Ycy|yen|yfr|Yfr|rcy|par|pcy|Pcy|pfr|Pfr|phi|Phi|afr|Acy|acy|zcy|Zcy|piv|acE|acd|zfr|Zfr|pre|prE|psi|Psi|qfr|Qfr|zwj|Or|ge|Gg|gt|gg|el|oS|lt|Lt|LT|Re|lg|gl|eg|ne|Im|it|le|DD|wp|wr|nu|Nu|dd|lE|Sc|sc|pi|Pi|ee|af|ll|Ll|rx|gE|xi|pm|Xi|ic|pr|Pr|in|ni|mp|mu|ac|Mu|or|ap|Gt|GT|ii);|&(Aacute|Agrave|Atilde|Ccedil|Eacute|Egrave|Iacute|Igrave|Ntilde|Oacute|Ograve|Oslash|Otilde|Uacute|Ugrave|Yacute|aacute|agrave|atilde|brvbar|ccedil|curren|divide|eacute|egrave|frac12|frac14|frac34|iacute|igrave|iquest|middot|ntilde|oacute|ograve|oslash|otilde|plusmn|uacute|ugrave|yacute|AElig|Acirc|Aring|Ecirc|Icirc|Ocirc|THORN|Ucirc|acirc|acute|aelig|aring|cedil|ecirc|icirc|iexcl|laquo|micro|ocirc|pound|raquo|szlig|thorn|times|ucirc|Auml|COPY|Euml|Iuml|Ouml|QUOT|Uuml|auml|cent|copy|euml|iuml|macr|nbsp|ordf|ordm|ouml|para|quot|sect|sup1|sup2|sup3|uuml|yuml|AMP|ETH|REG|amp|deg|eth|not|reg|shy|uml|yen|GT|LT|gt|lt)(?!;)([=a-zA-Z0-9]?)|([0-9]+)(;?)|[xX]([a-fA-F0-9]+)(;?)|&([0-9a-zA-Z]+)/g;\n\tvar decodeMap = {'aacute':'\\xE1','Aacute':'\\xC1','abreve':'\\u0103','Abreve':'\\u0102','ac':'\\u223E','acd':'\\u223F','acE':'\\u223E\\u0333','acirc':'\\xE2','Acirc':'\\xC2','acute':'\\xB4','acy':'\\u0430','Acy':'\\u0410','aelig':'\\xE6','AElig':'\\xC6','af':'\\u2061','afr':'\\uD835\\uDD1E','Afr':'\\uD835\\uDD04','agrave':'\\xE0','Agrave':'\\xC0','alefsym':'\\u2135','aleph':'\\u2135','alpha':'\\u03B1','Alpha':'\\u0391','amacr':'\\u0101','Amacr':'\\u0100','amalg':'\\u2A3F','amp':'&','AMP':'&','and':'\\u2227','And':'\\u2A53','andand':'\\u2A55','andd':'\\u2A5C','andslope':'\\u2A58','andv':'\\u2A5A','ang':'\\u2220','ange':'\\u29A4','angle':'\\u2220','angmsd':'\\u2221','angmsdaa':'\\u29A8','angmsdab':'\\u29A9','angmsdac':'\\u29AA','angmsdad':'\\u29AB','angmsdae':'\\u29AC','angmsdaf':'\\u29AD','angmsdag':'\\u29AE','angmsdah':'\\u29AF','angrt':'\\u221F','angrtvb':'\\u22BE','angrtvbd':'\\u299D','angsph':'\\u2222','angst':'\\xC5','angzarr':'\\u237C','aogon':'\\u0105','Aogon':'\\u0104','aopf':'\\uD835\\uDD52','Aopf':'\\uD835\\uDD38','ap':'\\u2248','apacir':'\\u2A6F','ape':'\\u224A','apE':'\\u2A70','apid':'\\u224B','apos':'\\'','ApplyFunction':'\\u2061','approx':'\\u2248','approxeq':'\\u224A','aring':'\\xE5','Aring':'\\xC5','ascr':'\\uD835\\uDCB6','Ascr':'\\uD835\\uDC9C','Assign':'\\u2254','ast':'*','asymp':'\\u2248','asympeq':'\\u224D','atilde':'\\xE3','Atilde':'\\xC3','auml':'\\xE4','Auml':'\\xC4','awconint':'\\u2233','awint':'\\u2A11','backcong':'\\u224C','backepsilon':'\\u03F6','backprime':'\\u2035','backsim':'\\u223D','backsimeq':'\\u22CD','Backslash':'\\u2216','Barv':'\\u2AE7','barvee':'\\u22BD','barwed':'\\u2305','Barwed':'\\u2306','barwedge':'\\u2305','bbrk':'\\u23B5','bbrktbrk':'\\u23B6','bcong':'\\u224C','bcy':'\\u0431','Bcy':'\\u0411','bdquo':'\\u201E','becaus':'\\u2235','because':'\\u2235','Because':'\\u2235','bemptyv':'\\u29B0','bepsi':'\\u03F6','bernou':'\\u212C','Bernoullis':'\\u212C','beta':'\\u03B2','Beta':'\\u0392','beth':'\\u2136','between':'\\u226C','bfr':'\\uD835\\uDD1F','Bfr':'\\uD835\\uDD05','bigcap':'\\u22C2','bigcirc':'\\u25EF','bigcup':'\\u22C3','bigodot':'\\u2A00','bigoplus':'\\u2A01','bigotimes':'\\u2A02','bigsqcup':'\\u2A06','bigstar':'\\u2605','bigtriangledown':'\\u25BD','bigtriangleup':'\\u25B3','biguplus':'\\u2A04','bigvee':'\\u22C1','bigwedge':'\\u22C0','bkarow':'\\u290D','blacklozenge':'\\u29EB','blacksquare':'\\u25AA','blacktriangle':'\\u25B4','blacktriangledown':'\\u25BE','blacktriangleleft':'\\u25C2','blacktriangleright':'\\u25B8','blank':'\\u2423','blk12':'\\u2592','blk14':'\\u2591','blk34':'\\u2593','block':'\\u2588','bne':'=\\u20E5','bnequiv':'\\u2261\\u20E5','bnot':'\\u2310','bNot':'\\u2AED','bopf':'\\uD835\\uDD53','Bopf':'\\uD835\\uDD39','bot':'\\u22A5','bottom':'\\u22A5','bowtie':'\\u22C8','boxbox':'\\u29C9','boxdl':'\\u2510','boxdL':'\\u2555','boxDl':'\\u2556','boxDL':'\\u2557','boxdr':'\\u250C','boxdR':'\\u2552','boxDr':'\\u2553','boxDR':'\\u2554','boxh':'\\u2500','boxH':'\\u2550','boxhd':'\\u252C','boxhD':'\\u2565','boxHd':'\\u2564','boxHD':'\\u2566','boxhu':'\\u2534','boxhU':'\\u2568','boxHu':'\\u2567','boxHU':'\\u2569','boxminus':'\\u229F','boxplus':'\\u229E','boxtimes':'\\u22A0','boxul':'\\u2518','boxuL':'\\u255B','boxUl':'\\u255C','boxUL':'\\u255D','boxur':'\\u2514','boxuR':'\\u2558','boxUr':'\\u2559','boxUR':'\\u255A','boxv':'\\u2502','boxV':'\\u2551','boxvh':'\\u253C','boxvH':'\\u256A','boxVh':'\\u256B','boxVH':'\\u256C','boxvl':'\\u2524','boxvL':'\\u2561','boxVl':'\\u2562','boxVL':'\\u2563','boxvr':'\\u251C','boxvR':'\\u255E','boxVr':'\\u255F','boxVR':'\\u2560','bprime':'\\u2035','breve':'\\u02D8','Breve':'\\u02D8','brvbar':'\\xA6','bscr':'\\uD835\\uDCB7','Bscr':'\\u212C','bsemi':'\\u204F','bsim':'\\u223D','bsime':'\\u22CD','bsol':'\\\\','bsolb':'\\u29C5','bsolhsub':'\\u27C8','bull':'\\u2022','bullet':'\\u2022','bump':'\\u224E','bumpe':'\\u224F','bumpE':'\\u2AAE','bumpeq':'\\u224F','Bumpeq':'\\u224E','cacute':'\\u0107','Cacute':'\\u0106','cap':'\\u2229','Cap':'\\u22D2','capand':'\\u2A44','capbrcup':'\\u2A49','capcap':'\\u2A4B','capcup':'\\u2A47','capdot':'\\u2A40','CapitalDifferentialD':'\\u2145','caps':'\\u2229\\uFE00','caret':'\\u2041','caron':'\\u02C7','Cayleys':'\\u212D','ccaps':'\\u2A4D','ccaron':'\\u010D','Ccaron':'\\u010C','ccedil':'\\xE7','Ccedil':'\\xC7','ccirc':'\\u0109','Ccirc':'\\u0108','Cconint':'\\u2230','ccups':'\\u2A4C','ccupssm':'\\u2A50','cdot':'\\u010B','Cdot':'\\u010A','cedil':'\\xB8','Cedilla':'\\xB8','cemptyv':'\\u29B2','cent':'\\xA2','centerdot':'\\xB7','CenterDot':'\\xB7','cfr':'\\uD835\\uDD20','Cfr':'\\u212D','chcy':'\\u0447','CHcy':'\\u0427','check':'\\u2713','checkmark':'\\u2713','chi':'\\u03C7','Chi':'\\u03A7','cir':'\\u25CB','circ':'\\u02C6','circeq':'\\u2257','circlearrowleft':'\\u21BA','circlearrowright':'\\u21BB','circledast':'\\u229B','circledcirc':'\\u229A','circleddash':'\\u229D','CircleDot':'\\u2299','circledR':'\\xAE','circledS':'\\u24C8','CircleMinus':'\\u2296','CirclePlus':'\\u2295','CircleTimes':'\\u2297','cire':'\\u2257','cirE':'\\u29C3','cirfnint':'\\u2A10','cirmid':'\\u2AEF','cirscir':'\\u29C2','ClockwiseContourIntegral':'\\u2232','CloseCurlyDoubleQuote':'\\u201D','CloseCurlyQuote':'\\u2019','clubs':'\\u2663','clubsuit':'\\u2663','colon':':','Colon':'\\u2237','colone':'\\u2254','Colone':'\\u2A74','coloneq':'\\u2254','comma':',','commat':'@','comp':'\\u2201','compfn':'\\u2218','complement':'\\u2201','complexes':'\\u2102','cong':'\\u2245','congdot':'\\u2A6D','Congruent':'\\u2261','conint':'\\u222E','Conint':'\\u222F','ContourIntegral':'\\u222E','copf':'\\uD835\\uDD54','Copf':'\\u2102','coprod':'\\u2210','Coproduct':'\\u2210','copy':'\\xA9','COPY':'\\xA9','copysr':'\\u2117','CounterClockwiseContourIntegral':'\\u2233','crarr':'\\u21B5','cross':'\\u2717','Cross':'\\u2A2F','cscr':'\\uD835\\uDCB8','Cscr':'\\uD835\\uDC9E','csub':'\\u2ACF','csube':'\\u2AD1','csup':'\\u2AD0','csupe':'\\u2AD2','ctdot':'\\u22EF','cudarrl':'\\u2938','cudarrr':'\\u2935','cuepr':'\\u22DE','cuesc':'\\u22DF','cularr':'\\u21B6','cularrp':'\\u293D','cup':'\\u222A','Cup':'\\u22D3','cupbrcap':'\\u2A48','cupcap':'\\u2A46','CupCap':'\\u224D','cupcup':'\\u2A4A','cupdot':'\\u228D','cupor':'\\u2A45','cups':'\\u222A\\uFE00','curarr':'\\u21B7','curarrm':'\\u293C','curlyeqprec':'\\u22DE','curlyeqsucc':'\\u22DF','curlyvee':'\\u22CE','curlywedge':'\\u22CF','curren':'\\xA4','curvearrowleft':'\\u21B6','curvearrowright':'\\u21B7','cuvee':'\\u22CE','cuwed':'\\u22CF','cwconint':'\\u2232','cwint':'\\u2231','cylcty':'\\u232D','dagger':'\\u2020','Dagger':'\\u2021','daleth':'\\u2138','darr':'\\u2193','dArr':'\\u21D3','Darr':'\\u21A1','dash':'\\u2010','dashv':'\\u22A3','Dashv':'\\u2AE4','dbkarow':'\\u290F','dblac':'\\u02DD','dcaron':'\\u010F','Dcaron':'\\u010E','dcy':'\\u0434','Dcy':'\\u0414','dd':'\\u2146','DD':'\\u2145','ddagger':'\\u2021','ddarr':'\\u21CA','DDotrahd':'\\u2911','ddotseq':'\\u2A77','deg':'\\xB0','Del':'\\u2207','delta':'\\u03B4','Delta':'\\u0394','demptyv':'\\u29B1','dfisht':'\\u297F','dfr':'\\uD835\\uDD21','Dfr':'\\uD835\\uDD07','dHar':'\\u2965','dharl':'\\u21C3','dharr':'\\u21C2','DiacriticalAcute':'\\xB4','DiacriticalDot':'\\u02D9','DiacriticalDoubleAcute':'\\u02DD','DiacriticalGrave':'`','DiacriticalTilde':'\\u02DC','diam':'\\u22C4','diamond':'\\u22C4','Diamond':'\\u22C4','diamondsuit':'\\u2666','diams':'\\u2666','die':'\\xA8','DifferentialD':'\\u2146','digamma':'\\u03DD','disin':'\\u22F2','div':'\\xF7','divide':'\\xF7','divideontimes':'\\u22C7','divonx':'\\u22C7','djcy':'\\u0452','DJcy':'\\u0402','dlcorn':'\\u231E','dlcrop':'\\u230D','dollar':'$','dopf':'\\uD835\\uDD55','Dopf':'\\uD835\\uDD3B','dot':'\\u02D9','Dot':'\\xA8','DotDot':'\\u20DC','doteq':'\\u2250','doteqdot':'\\u2251','DotEqual':'\\u2250','dotminus':'\\u2238','dotplus':'\\u2214','dotsquare':'\\u22A1','doublebarwedge':'\\u2306','DoubleContourIntegral':'\\u222F','DoubleDot':'\\xA8','DoubleDownArrow':'\\u21D3','DoubleLeftArrow':'\\u21D0','DoubleLeftRightArrow':'\\u21D4','DoubleLeftTee':'\\u2AE4','DoubleLongLeftArrow':'\\u27F8','DoubleLongLeftRightArrow':'\\u27FA','DoubleLongRightArrow':'\\u27F9','DoubleRightArrow':'\\u21D2','DoubleRightTee':'\\u22A8','DoubleUpArrow':'\\u21D1','DoubleUpDownArrow':'\\u21D5','DoubleVerticalBar':'\\u2225','downarrow':'\\u2193','Downarrow':'\\u21D3','DownArrow':'\\u2193','DownArrowBar':'\\u2913','DownArrowUpArrow':'\\u21F5','DownBreve':'\\u0311','downdownarrows':'\\u21CA','downharpoonleft':'\\u21C3','downharpoonright':'\\u21C2','DownLeftRightVector':'\\u2950','DownLeftTeeVector':'\\u295E','DownLeftVector':'\\u21BD','DownLeftVectorBar':'\\u2956','DownRightTeeVector':'\\u295F','DownRightVector':'\\u21C1','DownRightVectorBar':'\\u2957','DownTee':'\\u22A4','DownTeeArrow':'\\u21A7','drbkarow':'\\u2910','drcorn':'\\u231F','drcrop':'\\u230C','dscr':'\\uD835\\uDCB9','Dscr':'\\uD835\\uDC9F','dscy':'\\u0455','DScy':'\\u0405','dsol':'\\u29F6','dstrok':'\\u0111','Dstrok':'\\u0110','dtdot':'\\u22F1','dtri':'\\u25BF','dtrif':'\\u25BE','duarr':'\\u21F5','duhar':'\\u296F','dwangle':'\\u29A6','dzcy':'\\u045F','DZcy':'\\u040F','dzigrarr':'\\u27FF','eacute':'\\xE9','Eacute':'\\xC9','easter':'\\u2A6E','ecaron':'\\u011B','Ecaron':'\\u011A','ecir':'\\u2256','ecirc':'\\xEA','Ecirc':'\\xCA','ecolon':'\\u2255','ecy':'\\u044D','Ecy':'\\u042D','eDDot':'\\u2A77','edot':'\\u0117','eDot':'\\u2251','Edot':'\\u0116','ee':'\\u2147','efDot':'\\u2252','efr':'\\uD835\\uDD22','Efr':'\\uD835\\uDD08','eg':'\\u2A9A','egrave':'\\xE8','Egrave':'\\xC8','egs':'\\u2A96','egsdot':'\\u2A98','el':'\\u2A99','Element':'\\u2208','elinters':'\\u23E7','ell':'\\u2113','els':'\\u2A95','elsdot':'\\u2A97','emacr':'\\u0113','Emacr':'\\u0112','empty':'\\u2205','emptyset':'\\u2205','EmptySmallSquare':'\\u25FB','emptyv':'\\u2205','EmptyVerySmallSquare':'\\u25AB','emsp':'\\u2003','emsp13':'\\u2004','emsp14':'\\u2005','eng':'\\u014B','ENG':'\\u014A','ensp':'\\u2002','eogon':'\\u0119','Eogon':'\\u0118','eopf':'\\uD835\\uDD56','Eopf':'\\uD835\\uDD3C','epar':'\\u22D5','eparsl':'\\u29E3','eplus':'\\u2A71','epsi':'\\u03B5','epsilon':'\\u03B5','Epsilon':'\\u0395','epsiv':'\\u03F5','eqcirc':'\\u2256','eqcolon':'\\u2255','eqsim':'\\u2242','eqslantgtr':'\\u2A96','eqslantless':'\\u2A95','Equal':'\\u2A75','equals':'=','EqualTilde':'\\u2242','equest':'\\u225F','Equilibrium':'\\u21CC','equiv':'\\u2261','equivDD':'\\u2A78','eqvparsl':'\\u29E5','erarr':'\\u2971','erDot':'\\u2253','escr':'\\u212F','Escr':'\\u2130','esdot':'\\u2250','esim':'\\u2242','Esim':'\\u2A73','eta':'\\u03B7','Eta':'\\u0397','eth':'\\xF0','ETH':'\\xD0','euml':'\\xEB','Euml':'\\xCB','euro':'\\u20AC','excl':'!','exist':'\\u2203','Exists':'\\u2203','expectation':'\\u2130','exponentiale':'\\u2147','ExponentialE':'\\u2147','fallingdotseq':'\\u2252','fcy':'\\u0444','Fcy':'\\u0424','female':'\\u2640','ffilig':'\\uFB03','fflig':'\\uFB00','ffllig':'\\uFB04','ffr':'\\uD835\\uDD23','Ffr':'\\uD835\\uDD09','filig':'\\uFB01','FilledSmallSquare':'\\u25FC','FilledVerySmallSquare':'\\u25AA','fjlig':'fj','flat':'\\u266D','fllig':'\\uFB02','fltns':'\\u25B1','fnof':'\\u0192','fopf':'\\uD835\\uDD57','Fopf':'\\uD835\\uDD3D','forall':'\\u2200','ForAll':'\\u2200','fork':'\\u22D4','forkv':'\\u2AD9','Fouriertrf':'\\u2131','fpartint':'\\u2A0D','frac12':'\\xBD','frac13':'\\u2153','frac14':'\\xBC','frac15':'\\u2155','frac16':'\\u2159','frac18':'\\u215B','frac23':'\\u2154','frac25':'\\u2156','frac34':'\\xBE','frac35':'\\u2157','frac38':'\\u215C','frac45':'\\u2158','frac56':'\\u215A','frac58':'\\u215D','frac78':'\\u215E','frasl':'\\u2044','frown':'\\u2322','fscr':'\\uD835\\uDCBB','Fscr':'\\u2131','gacute':'\\u01F5','gamma':'\\u03B3','Gamma':'\\u0393','gammad':'\\u03DD','Gammad':'\\u03DC','gap':'\\u2A86','gbreve':'\\u011F','Gbreve':'\\u011E','Gcedil':'\\u0122','gcirc':'\\u011D','Gcirc':'\\u011C','gcy':'\\u0433','Gcy':'\\u0413','gdot':'\\u0121','Gdot':'\\u0120','ge':'\\u2265','gE':'\\u2267','gel':'\\u22DB','gEl':'\\u2A8C','geq':'\\u2265','geqq':'\\u2267','geqslant':'\\u2A7E','ges':'\\u2A7E','gescc':'\\u2AA9','gesdot':'\\u2A80','gesdoto':'\\u2A82','gesdotol':'\\u2A84','gesl':'\\u22DB\\uFE00','gesles':'\\u2A94','gfr':'\\uD835\\uDD24','Gfr':'\\uD835\\uDD0A','gg':'\\u226B','Gg':'\\u22D9','ggg':'\\u22D9','gimel':'\\u2137','gjcy':'\\u0453','GJcy':'\\u0403','gl':'\\u2277','gla':'\\u2AA5','glE':'\\u2A92','glj':'\\u2AA4','gnap':'\\u2A8A','gnapprox':'\\u2A8A','gne':'\\u2A88','gnE':'\\u2269','gneq':'\\u2A88','gneqq':'\\u2269','gnsim':'\\u22E7','gopf':'\\uD835\\uDD58','Gopf':'\\uD835\\uDD3E','grave':'`','GreaterEqual':'\\u2265','GreaterEqualLess':'\\u22DB','GreaterFullEqual':'\\u2267','GreaterGreater':'\\u2AA2','GreaterLess':'\\u2277','GreaterSlantEqual':'\\u2A7E','GreaterTilde':'\\u2273','gscr':'\\u210A','Gscr':'\\uD835\\uDCA2','gsim':'\\u2273','gsime':'\\u2A8E','gsiml':'\\u2A90','gt':'>','Gt':'\\u226B','GT':'>','gtcc':'\\u2AA7','gtcir':'\\u2A7A','gtdot':'\\u22D7','gtlPar':'\\u2995','gtquest':'\\u2A7C','gtrapprox':'\\u2A86','gtrarr':'\\u2978','gtrdot':'\\u22D7','gtreqless':'\\u22DB','gtreqqless':'\\u2A8C','gtrless':'\\u2277','gtrsim':'\\u2273','gvertneqq':'\\u2269\\uFE00','gvnE':'\\u2269\\uFE00','Hacek':'\\u02C7','hairsp':'\\u200A','half':'\\xBD','hamilt':'\\u210B','hardcy':'\\u044A','HARDcy':'\\u042A','harr':'\\u2194','hArr':'\\u21D4','harrcir':'\\u2948','harrw':'\\u21AD','Hat':'^','hbar':'\\u210F','hcirc':'\\u0125','Hcirc':'\\u0124','hearts':'\\u2665','heartsuit':'\\u2665','hellip':'\\u2026','hercon':'\\u22B9','hfr':'\\uD835\\uDD25','Hfr':'\\u210C','HilbertSpace':'\\u210B','hksearow':'\\u2925','hkswarow':'\\u2926','hoarr':'\\u21FF','homtht':'\\u223B','hookleftarrow':'\\u21A9','hookrightarrow':'\\u21AA','hopf':'\\uD835\\uDD59','Hopf':'\\u210D','horbar':'\\u2015','HorizontalLine':'\\u2500','hscr':'\\uD835\\uDCBD','Hscr':'\\u210B','hslash':'\\u210F','hstrok':'\\u0127','Hstrok':'\\u0126','HumpDownHump':'\\u224E','HumpEqual':'\\u224F','hybull':'\\u2043','hyphen':'\\u2010','iacute':'\\xED','Iacute':'\\xCD','ic':'\\u2063','icirc':'\\xEE','Icirc':'\\xCE','icy':'\\u0438','Icy':'\\u0418','Idot':'\\u0130','iecy':'\\u0435','IEcy':'\\u0415','iexcl':'\\xA1','iff':'\\u21D4','ifr':'\\uD835\\uDD26','Ifr':'\\u2111','igrave':'\\xEC','Igrave':'\\xCC','ii':'\\u2148','iiiint':'\\u2A0C','iiint':'\\u222D','iinfin':'\\u29DC','iiota':'\\u2129','ijlig':'\\u0133','IJlig':'\\u0132','Im':'\\u2111','imacr':'\\u012B','Imacr':'\\u012A','image':'\\u2111','ImaginaryI':'\\u2148','imagline':'\\u2110','imagpart':'\\u2111','imath':'\\u0131','imof':'\\u22B7','imped':'\\u01B5','Implies':'\\u21D2','in':'\\u2208','incare':'\\u2105','infin':'\\u221E','infintie':'\\u29DD','inodot':'\\u0131','int':'\\u222B','Int':'\\u222C','intcal':'\\u22BA','integers':'\\u2124','Integral':'\\u222B','intercal':'\\u22BA','Intersection':'\\u22C2','intlarhk':'\\u2A17','intprod':'\\u2A3C','InvisibleComma':'\\u2063','InvisibleTimes':'\\u2062','iocy':'\\u0451','IOcy':'\\u0401','iogon':'\\u012F','Iogon':'\\u012E','iopf':'\\uD835\\uDD5A','Iopf':'\\uD835\\uDD40','iota':'\\u03B9','Iota':'\\u0399','iprod':'\\u2A3C','iquest':'\\xBF','iscr':'\\uD835\\uDCBE','Iscr':'\\u2110','isin':'\\u2208','isindot':'\\u22F5','isinE':'\\u22F9','isins':'\\u22F4','isinsv':'\\u22F3','isinv':'\\u2208','it':'\\u2062','itilde':'\\u0129','Itilde':'\\u0128','iukcy':'\\u0456','Iukcy':'\\u0406','iuml':'\\xEF','Iuml':'\\xCF','jcirc':'\\u0135','Jcirc':'\\u0134','jcy':'\\u0439','Jcy':'\\u0419','jfr':'\\uD835\\uDD27','Jfr':'\\uD835\\uDD0D','jmath':'\\u0237','jopf':'\\uD835\\uDD5B','Jopf':'\\uD835\\uDD41','jscr':'\\uD835\\uDCBF','Jscr':'\\uD835\\uDCA5','jsercy':'\\u0458','Jsercy':'\\u0408','jukcy':'\\u0454','Jukcy':'\\u0404','kappa':'\\u03BA','Kappa':'\\u039A','kappav':'\\u03F0','kcedil':'\\u0137','Kcedil':'\\u0136','kcy':'\\u043A','Kcy':'\\u041A','kfr':'\\uD835\\uDD28','Kfr':'\\uD835\\uDD0E','kgreen':'\\u0138','khcy':'\\u0445','KHcy':'\\u0425','kjcy':'\\u045C','KJcy':'\\u040C','kopf':'\\uD835\\uDD5C','Kopf':'\\uD835\\uDD42','kscr':'\\uD835\\uDCC0','Kscr':'\\uD835\\uDCA6','lAarr':'\\u21DA','lacute':'\\u013A','Lacute':'\\u0139','laemptyv':'\\u29B4','lagran':'\\u2112','lambda':'\\u03BB','Lambda':'\\u039B','lang':'\\u27E8','Lang':'\\u27EA','langd':'\\u2991','langle':'\\u27E8','lap':'\\u2A85','Laplacetrf':'\\u2112','laquo':'\\xAB','larr':'\\u2190','lArr':'\\u21D0','Larr':'\\u219E','larrb':'\\u21E4','larrbfs':'\\u291F','larrfs':'\\u291D','larrhk':'\\u21A9','larrlp':'\\u21AB','larrpl':'\\u2939','larrsim':'\\u2973','larrtl':'\\u21A2','lat':'\\u2AAB','latail':'\\u2919','lAtail':'\\u291B','late':'\\u2AAD','lates':'\\u2AAD\\uFE00','lbarr':'\\u290C','lBarr':'\\u290E','lbbrk':'\\u2772','lbrace':'{','lbrack':'[','lbrke':'\\u298B','lbrksld':'\\u298F','lbrkslu':'\\u298D','lcaron':'\\u013E','Lcaron':'\\u013D','lcedil':'\\u013C','Lcedil':'\\u013B','lceil':'\\u2308','lcub':'{','lcy':'\\u043B','Lcy':'\\u041B','ldca':'\\u2936','ldquo':'\\u201C','ldquor':'\\u201E','ldrdhar':'\\u2967','ldrushar':'\\u294B','ldsh':'\\u21B2','le':'\\u2264','lE':'\\u2266','LeftAngleBracket':'\\u27E8','leftarrow':'\\u2190','Leftarrow':'\\u21D0','LeftArrow':'\\u2190','LeftArrowBar':'\\u21E4','LeftArrowRightArrow':'\\u21C6','leftarrowtail':'\\u21A2','LeftCeiling':'\\u2308','LeftDoubleBracket':'\\u27E6','LeftDownTeeVector':'\\u2961','LeftDownVector':'\\u21C3','LeftDownVectorBar':'\\u2959','LeftFloor':'\\u230A','leftharpoondown':'\\u21BD','leftharpoonup':'\\u21BC','leftleftarrows':'\\u21C7','leftrightarrow':'\\u2194','Leftrightarrow':'\\u21D4','LeftRightArrow':'\\u2194','leftrightarrows':'\\u21C6','leftrightharpoons':'\\u21CB','leftrightsquigarrow':'\\u21AD','LeftRightVector':'\\u294E','LeftTee':'\\u22A3','LeftTeeArrow':'\\u21A4','LeftTeeVector':'\\u295A','leftthreetimes':'\\u22CB','LeftTriangle':'\\u22B2','LeftTriangleBar':'\\u29CF','LeftTriangleEqual':'\\u22B4','LeftUpDownVector':'\\u2951','LeftUpTeeVector':'\\u2960','LeftUpVector':'\\u21BF','LeftUpVectorBar':'\\u2958','LeftVector':'\\u21BC','LeftVectorBar':'\\u2952','leg':'\\u22DA','lEg':'\\u2A8B','leq':'\\u2264','leqq':'\\u2266','leqslant':'\\u2A7D','les':'\\u2A7D','lescc':'\\u2AA8','lesdot':'\\u2A7F','lesdoto':'\\u2A81','lesdotor':'\\u2A83','lesg':'\\u22DA\\uFE00','lesges':'\\u2A93','lessapprox':'\\u2A85','lessdot':'\\u22D6','lesseqgtr':'\\u22DA','lesseqqgtr':'\\u2A8B','LessEqualGreater':'\\u22DA','LessFullEqual':'\\u2266','LessGreater':'\\u2276','lessgtr':'\\u2276','LessLess':'\\u2AA1','lesssim':'\\u2272','LessSlantEqual':'\\u2A7D','LessTilde':'\\u2272','lfisht':'\\u297C','lfloor':'\\u230A','lfr':'\\uD835\\uDD29','Lfr':'\\uD835\\uDD0F','lg':'\\u2276','lgE':'\\u2A91','lHar':'\\u2962','lhard':'\\u21BD','lharu':'\\u21BC','lharul':'\\u296A','lhblk':'\\u2584','ljcy':'\\u0459','LJcy':'\\u0409','ll':'\\u226A','Ll':'\\u22D8','llarr':'\\u21C7','llcorner':'\\u231E','Lleftarrow':'\\u21DA','llhard':'\\u296B','lltri':'\\u25FA','lmidot':'\\u0140','Lmidot':'\\u013F','lmoust':'\\u23B0','lmoustache':'\\u23B0','lnap':'\\u2A89','lnapprox':'\\u2A89','lne':'\\u2A87','lnE':'\\u2268','lneq':'\\u2A87','lneqq':'\\u2268','lnsim':'\\u22E6','loang':'\\u27EC','loarr':'\\u21FD','lobrk':'\\u27E6','longleftarrow':'\\u27F5','Longleftarrow':'\\u27F8','LongLeftArrow':'\\u27F5','longleftrightarrow':'\\u27F7','Longleftrightarrow':'\\u27FA','LongLeftRightArrow':'\\u27F7','longmapsto':'\\u27FC','longrightarrow':'\\u27F6','Longrightarrow':'\\u27F9','LongRightArrow':'\\u27F6','looparrowleft':'\\u21AB','looparrowright':'\\u21AC','lopar':'\\u2985','lopf':'\\uD835\\uDD5D','Lopf':'\\uD835\\uDD43','loplus':'\\u2A2D','lotimes':'\\u2A34','lowast':'\\u2217','lowbar':'_','LowerLeftArrow':'\\u2199','LowerRightArrow':'\\u2198','loz':'\\u25CA','lozenge':'\\u25CA','lozf':'\\u29EB','lpar':'(','lparlt':'\\u2993','lrarr':'\\u21C6','lrcorner':'\\u231F','lrhar':'\\u21CB','lrhard':'\\u296D','lrm':'\\u200E','lrtri':'\\u22BF','lsaquo':'\\u2039','lscr':'\\uD835\\uDCC1','Lscr':'\\u2112','lsh':'\\u21B0','Lsh':'\\u21B0','lsim':'\\u2272','lsime':'\\u2A8D','lsimg':'\\u2A8F','lsqb':'[','lsquo':'\\u2018','lsquor':'\\u201A','lstrok':'\\u0142','Lstrok':'\\u0141','lt':'<','Lt':'\\u226A','LT':'<','ltcc':'\\u2AA6','ltcir':'\\u2A79','ltdot':'\\u22D6','lthree':'\\u22CB','ltimes':'\\u22C9','ltlarr':'\\u2976','ltquest':'\\u2A7B','ltri':'\\u25C3','ltrie':'\\u22B4','ltrif':'\\u25C2','ltrPar':'\\u2996','lurdshar':'\\u294A','luruhar':'\\u2966','lvertneqq':'\\u2268\\uFE00','lvnE':'\\u2268\\uFE00','macr':'\\xAF','male':'\\u2642','malt':'\\u2720','maltese':'\\u2720','map':'\\u21A6','Map':'\\u2905','mapsto':'\\u21A6','mapstodown':'\\u21A7','mapstoleft':'\\u21A4','mapstoup':'\\u21A5','marker':'\\u25AE','mcomma':'\\u2A29','mcy':'\\u043C','Mcy':'\\u041C','mdash':'\\u2014','mDDot':'\\u223A','measuredangle':'\\u2221','MediumSpace':'\\u205F','Mellintrf':'\\u2133','mfr':'\\uD835\\uDD2A','Mfr':'\\uD835\\uDD10','mho':'\\u2127','micro':'\\xB5','mid':'\\u2223','midast':'*','midcir':'\\u2AF0','middot':'\\xB7','minus':'\\u2212','minusb':'\\u229F','minusd':'\\u2238','minusdu':'\\u2A2A','MinusPlus':'\\u2213','mlcp':'\\u2ADB','mldr':'\\u2026','mnplus':'\\u2213','models':'\\u22A7','mopf':'\\uD835\\uDD5E','Mopf':'\\uD835\\uDD44','mp':'\\u2213','mscr':'\\uD835\\uDCC2','Mscr':'\\u2133','mstpos':'\\u223E','mu':'\\u03BC','Mu':'\\u039C','multimap':'\\u22B8','mumap':'\\u22B8','nabla':'\\u2207','nacute':'\\u0144','Nacute':'\\u0143','nang':'\\u2220\\u20D2','nap':'\\u2249','napE':'\\u2A70\\u0338','napid':'\\u224B\\u0338','napos':'\\u0149','napprox':'\\u2249','natur':'\\u266E','natural':'\\u266E','naturals':'\\u2115','nbsp':'\\xA0','nbump':'\\u224E\\u0338','nbumpe':'\\u224F\\u0338','ncap':'\\u2A43','ncaron':'\\u0148','Ncaron':'\\u0147','ncedil':'\\u0146','Ncedil':'\\u0145','ncong':'\\u2247','ncongdot':'\\u2A6D\\u0338','ncup':'\\u2A42','ncy':'\\u043D','Ncy':'\\u041D','ndash':'\\u2013','ne':'\\u2260','nearhk':'\\u2924','nearr':'\\u2197','neArr':'\\u21D7','nearrow':'\\u2197','nedot':'\\u2250\\u0338','NegativeMediumSpace':'\\u200B','NegativeThickSpace':'\\u200B','NegativeThinSpace':'\\u200B','NegativeVeryThinSpace':'\\u200B','nequiv':'\\u2262','nesear':'\\u2928','nesim':'\\u2242\\u0338','NestedGreaterGreater':'\\u226B','NestedLessLess':'\\u226A','NewLine':'\\n','nexist':'\\u2204','nexists':'\\u2204','nfr':'\\uD835\\uDD2B','Nfr':'\\uD835\\uDD11','nge':'\\u2271','ngE':'\\u2267\\u0338','ngeq':'\\u2271','ngeqq':'\\u2267\\u0338','ngeqslant':'\\u2A7E\\u0338','nges':'\\u2A7E\\u0338','nGg':'\\u22D9\\u0338','ngsim':'\\u2275','ngt':'\\u226F','nGt':'\\u226B\\u20D2','ngtr':'\\u226F','nGtv':'\\u226B\\u0338','nharr':'\\u21AE','nhArr':'\\u21CE','nhpar':'\\u2AF2','ni':'\\u220B','nis':'\\u22FC','nisd':'\\u22FA','niv':'\\u220B','njcy':'\\u045A','NJcy':'\\u040A','nlarr':'\\u219A','nlArr':'\\u21CD','nldr':'\\u2025','nle':'\\u2270','nlE':'\\u2266\\u0338','nleftarrow':'\\u219A','nLeftarrow':'\\u21CD','nleftrightarrow':'\\u21AE','nLeftrightarrow':'\\u21CE','nleq':'\\u2270','nleqq':'\\u2266\\u0338','nleqslant':'\\u2A7D\\u0338','nles':'\\u2A7D\\u0338','nless':'\\u226E','nLl':'\\u22D8\\u0338','nlsim':'\\u2274','nlt':'\\u226E','nLt':'\\u226A\\u20D2','nltri':'\\u22EA','nltrie':'\\u22EC','nLtv':'\\u226A\\u0338','nmid':'\\u2224','NoBreak':'\\u2060','NonBreakingSpace':'\\xA0','nopf':'\\uD835\\uDD5F','Nopf':'\\u2115','not':'\\xAC','Not':'\\u2AEC','NotCongruent':'\\u2262','NotCupCap':'\\u226D','NotDoubleVerticalBar':'\\u2226','NotElement':'\\u2209','NotEqual':'\\u2260','NotEqualTilde':'\\u2242\\u0338','NotExists':'\\u2204','NotGreater':'\\u226F','NotGreaterEqual':'\\u2271','NotGreaterFullEqual':'\\u2267\\u0338','NotGreaterGreater':'\\u226B\\u0338','NotGreaterLess':'\\u2279','NotGreaterSlantEqual':'\\u2A7E\\u0338','NotGreaterTilde':'\\u2275','NotHumpDownHump':'\\u224E\\u0338','NotHumpEqual':'\\u224F\\u0338','notin':'\\u2209','notindot':'\\u22F5\\u0338','notinE':'\\u22F9\\u0338','notinva':'\\u2209','notinvb':'\\u22F7','notinvc':'\\u22F6','NotLeftTriangle':'\\u22EA','NotLeftTriangleBar':'\\u29CF\\u0338','NotLeftTriangleEqual':'\\u22EC','NotLess':'\\u226E','NotLessEqual':'\\u2270','NotLessGreater':'\\u2278','NotLessLess':'\\u226A\\u0338','NotLessSlantEqual':'\\u2A7D\\u0338','NotLessTilde':'\\u2274','NotNestedGreaterGreater':'\\u2AA2\\u0338','NotNestedLessLess':'\\u2AA1\\u0338','notni':'\\u220C','notniva':'\\u220C','notnivb':'\\u22FE','notnivc':'\\u22FD','NotPrecedes':'\\u2280','NotPrecedesEqual':'\\u2AAF\\u0338','NotPrecedesSlantEqual':'\\u22E0','NotReverseElement':'\\u220C','NotRightTriangle':'\\u22EB','NotRightTriangleBar':'\\u29D0\\u0338','NotRightTriangleEqual':'\\u22ED','NotSquareSubset':'\\u228F\\u0338','NotSquareSubsetEqual':'\\u22E2','NotSquareSuperset':'\\u2290\\u0338','NotSquareSupersetEqual':'\\u22E3','NotSubset':'\\u2282\\u20D2','NotSubsetEqual':'\\u2288','NotSucceeds':'\\u2281','NotSucceedsEqual':'\\u2AB0\\u0338','NotSucceedsSlantEqual':'\\u22E1','NotSucceedsTilde':'\\u227F\\u0338','NotSuperset':'\\u2283\\u20D2','NotSupersetEqual':'\\u2289','NotTilde':'\\u2241','NotTildeEqual':'\\u2244','NotTildeFullEqual':'\\u2247','NotTildeTilde':'\\u2249','NotVerticalBar':'\\u2224','npar':'\\u2226','nparallel':'\\u2226','nparsl':'\\u2AFD\\u20E5','npart':'\\u2202\\u0338','npolint':'\\u2A14','npr':'\\u2280','nprcue':'\\u22E0','npre':'\\u2AAF\\u0338','nprec':'\\u2280','npreceq':'\\u2AAF\\u0338','nrarr':'\\u219B','nrArr':'\\u21CF','nrarrc':'\\u2933\\u0338','nrarrw':'\\u219D\\u0338','nrightarrow':'\\u219B','nRightarrow':'\\u21CF','nrtri':'\\u22EB','nrtrie':'\\u22ED','nsc':'\\u2281','nsccue':'\\u22E1','nsce':'\\u2AB0\\u0338','nscr':'\\uD835\\uDCC3','Nscr':'\\uD835\\uDCA9','nshortmid':'\\u2224','nshortparallel':'\\u2226','nsim':'\\u2241','nsime':'\\u2244','nsimeq':'\\u2244','nsmid':'\\u2224','nspar':'\\u2226','nsqsube':'\\u22E2','nsqsupe':'\\u22E3','nsub':'\\u2284','nsube':'\\u2288','nsubE':'\\u2AC5\\u0338','nsubset':'\\u2282\\u20D2','nsubseteq':'\\u2288','nsubseteqq':'\\u2AC5\\u0338','nsucc':'\\u2281','nsucceq':'\\u2AB0\\u0338','nsup':'\\u2285','nsupe':'\\u2289','nsupE':'\\u2AC6\\u0338','nsupset':'\\u2283\\u20D2','nsupseteq':'\\u2289','nsupseteqq':'\\u2AC6\\u0338','ntgl':'\\u2279','ntilde':'\\xF1','Ntilde':'\\xD1','ntlg':'\\u2278','ntriangleleft':'\\u22EA','ntrianglelefteq':'\\u22EC','ntriangleright':'\\u22EB','ntrianglerighteq':'\\u22ED','nu':'\\u03BD','Nu':'\\u039D','num':'#','numero':'\\u2116','numsp':'\\u2007','nvap':'\\u224D\\u20D2','nvdash':'\\u22AC','nvDash':'\\u22AD','nVdash':'\\u22AE','nVDash':'\\u22AF','nvge':'\\u2265\\u20D2','nvgt':'>\\u20D2','nvHarr':'\\u2904','nvinfin':'\\u29DE','nvlArr':'\\u2902','nvle':'\\u2264\\u20D2','nvlt':'<\\u20D2','nvltrie':'\\u22B4\\u20D2','nvrArr':'\\u2903','nvrtrie':'\\u22B5\\u20D2','nvsim':'\\u223C\\u20D2','nwarhk':'\\u2923','nwarr':'\\u2196','nwArr':'\\u21D6','nwarrow':'\\u2196','nwnear':'\\u2927','oacute':'\\xF3','Oacute':'\\xD3','oast':'\\u229B','ocir':'\\u229A','ocirc':'\\xF4','Ocirc':'\\xD4','ocy':'\\u043E','Ocy':'\\u041E','odash':'\\u229D','odblac':'\\u0151','Odblac':'\\u0150','odiv':'\\u2A38','odot':'\\u2299','odsold':'\\u29BC','oelig':'\\u0153','OElig':'\\u0152','ofcir':'\\u29BF','ofr':'\\uD835\\uDD2C','Ofr':'\\uD835\\uDD12','ogon':'\\u02DB','ograve':'\\xF2','Ograve':'\\xD2','ogt':'\\u29C1','ohbar':'\\u29B5','ohm':'\\u03A9','oint':'\\u222E','olarr':'\\u21BA','olcir':'\\u29BE','olcross':'\\u29BB','oline':'\\u203E','olt':'\\u29C0','omacr':'\\u014D','Omacr':'\\u014C','omega':'\\u03C9','Omega':'\\u03A9','omicron':'\\u03BF','Omicron':'\\u039F','omid':'\\u29B6','ominus':'\\u2296','oopf':'\\uD835\\uDD60','Oopf':'\\uD835\\uDD46','opar':'\\u29B7','OpenCurlyDoubleQuote':'\\u201C','OpenCurlyQuote':'\\u2018','operp':'\\u29B9','oplus':'\\u2295','or':'\\u2228','Or':'\\u2A54','orarr':'\\u21BB','ord':'\\u2A5D','order':'\\u2134','orderof':'\\u2134','ordf':'\\xAA','ordm':'\\xBA','origof':'\\u22B6','oror':'\\u2A56','orslope':'\\u2A57','orv':'\\u2A5B','oS':'\\u24C8','oscr':'\\u2134','Oscr':'\\uD835\\uDCAA','oslash':'\\xF8','Oslash':'\\xD8','osol':'\\u2298','otilde':'\\xF5','Otilde':'\\xD5','otimes':'\\u2297','Otimes':'\\u2A37','otimesas':'\\u2A36','ouml':'\\xF6','Ouml':'\\xD6','ovbar':'\\u233D','OverBar':'\\u203E','OverBrace':'\\u23DE','OverBracket':'\\u23B4','OverParenthesis':'\\u23DC','par':'\\u2225','para':'\\xB6','parallel':'\\u2225','parsim':'\\u2AF3','parsl':'\\u2AFD','part':'\\u2202','PartialD':'\\u2202','pcy':'\\u043F','Pcy':'\\u041F','percnt':'%','period':'.','permil':'\\u2030','perp':'\\u22A5','pertenk':'\\u2031','pfr':'\\uD835\\uDD2D','Pfr':'\\uD835\\uDD13','phi':'\\u03C6','Phi':'\\u03A6','phiv':'\\u03D5','phmmat':'\\u2133','phone':'\\u260E','pi':'\\u03C0','Pi':'\\u03A0','pitchfork':'\\u22D4','piv':'\\u03D6','planck':'\\u210F','planckh':'\\u210E','plankv':'\\u210F','plus':'+','plusacir':'\\u2A23','plusb':'\\u229E','pluscir':'\\u2A22','plusdo':'\\u2214','plusdu':'\\u2A25','pluse':'\\u2A72','PlusMinus':'\\xB1','plusmn':'\\xB1','plussim':'\\u2A26','plustwo':'\\u2A27','pm':'\\xB1','Poincareplane':'\\u210C','pointint':'\\u2A15','popf':'\\uD835\\uDD61','Popf':'\\u2119','pound':'\\xA3','pr':'\\u227A','Pr':'\\u2ABB','prap':'\\u2AB7','prcue':'\\u227C','pre':'\\u2AAF','prE':'\\u2AB3','prec':'\\u227A','precapprox':'\\u2AB7','preccurlyeq':'\\u227C','Precedes':'\\u227A','PrecedesEqual':'\\u2AAF','PrecedesSlantEqual':'\\u227C','PrecedesTilde':'\\u227E','preceq':'\\u2AAF','precnapprox':'\\u2AB9','precneqq':'\\u2AB5','precnsim':'\\u22E8','precsim':'\\u227E','prime':'\\u2032','Prime':'\\u2033','primes':'\\u2119','prnap':'\\u2AB9','prnE':'\\u2AB5','prnsim':'\\u22E8','prod':'\\u220F','Product':'\\u220F','profalar':'\\u232E','profline':'\\u2312','profsurf':'\\u2313','prop':'\\u221D','Proportion':'\\u2237','Proportional':'\\u221D','propto':'\\u221D','prsim':'\\u227E','prurel':'\\u22B0','pscr':'\\uD835\\uDCC5','Pscr':'\\uD835\\uDCAB','psi':'\\u03C8','Psi':'\\u03A8','puncsp':'\\u2008','qfr':'\\uD835\\uDD2E','Qfr':'\\uD835\\uDD14','qint':'\\u2A0C','qopf':'\\uD835\\uDD62','Qopf':'\\u211A','qprime':'\\u2057','qscr':'\\uD835\\uDCC6','Qscr':'\\uD835\\uDCAC','quaternions':'\\u210D','quatint':'\\u2A16','quest':'?','questeq':'\\u225F','quot':'\"','QUOT':'\"','rAarr':'\\u21DB','race':'\\u223D\\u0331','racute':'\\u0155','Racute':'\\u0154','radic':'\\u221A','raemptyv':'\\u29B3','rang':'\\u27E9','Rang':'\\u27EB','rangd':'\\u2992','range':'\\u29A5','rangle':'\\u27E9','raquo':'\\xBB','rarr':'\\u2192','rArr':'\\u21D2','Rarr':'\\u21A0','rarrap':'\\u2975','rarrb':'\\u21E5','rarrbfs':'\\u2920','rarrc':'\\u2933','rarrfs':'\\u291E','rarrhk':'\\u21AA','rarrlp':'\\u21AC','rarrpl':'\\u2945','rarrsim':'\\u2974','rarrtl':'\\u21A3','Rarrtl':'\\u2916','rarrw':'\\u219D','ratail':'\\u291A','rAtail':'\\u291C','ratio':'\\u2236','rationals':'\\u211A','rbarr':'\\u290D','rBarr':'\\u290F','RBarr':'\\u2910','rbbrk':'\\u2773','rbrace':'}','rbrack':']','rbrke':'\\u298C','rbrksld':'\\u298E','rbrkslu':'\\u2990','rcaron':'\\u0159','Rcaron':'\\u0158','rcedil':'\\u0157','Rcedil':'\\u0156','rceil':'\\u2309','rcub':'}','rcy':'\\u0440','Rcy':'\\u0420','rdca':'\\u2937','rdldhar':'\\u2969','rdquo':'\\u201D','rdquor':'\\u201D','rdsh':'\\u21B3','Re':'\\u211C','real':'\\u211C','realine':'\\u211B','realpart':'\\u211C','reals':'\\u211D','rect':'\\u25AD','reg':'\\xAE','REG':'\\xAE','ReverseElement':'\\u220B','ReverseEquilibrium':'\\u21CB','ReverseUpEquilibrium':'\\u296F','rfisht':'\\u297D','rfloor':'\\u230B','rfr':'\\uD835\\uDD2F','Rfr':'\\u211C','rHar':'\\u2964','rhard':'\\u21C1','rharu':'\\u21C0','rharul':'\\u296C','rho':'\\u03C1','Rho':'\\u03A1','rhov':'\\u03F1','RightAngleBracket':'\\u27E9','rightarrow':'\\u2192','Rightarrow':'\\u21D2','RightArrow':'\\u2192','RightArrowBar':'\\u21E5','RightArrowLeftArrow':'\\u21C4','rightarrowtail':'\\u21A3','RightCeiling':'\\u2309','RightDoubleBracket':'\\u27E7','RightDownTeeVector':'\\u295D','RightDownVector':'\\u21C2','RightDownVectorBar':'\\u2955','RightFloor':'\\u230B','rightharpoondown':'\\u21C1','rightharpoonup':'\\u21C0','rightleftarrows':'\\u21C4','rightleftharpoons':'\\u21CC','rightrightarrows':'\\u21C9','rightsquigarrow':'\\u219D','RightTee':'\\u22A2','RightTeeArrow':'\\u21A6','RightTeeVector':'\\u295B','rightthreetimes':'\\u22CC','RightTriangle':'\\u22B3','RightTriangleBar':'\\u29D0','RightTriangleEqual':'\\u22B5','RightUpDownVector':'\\u294F','RightUpTeeVector':'\\u295C','RightUpVector':'\\u21BE','RightUpVectorBar':'\\u2954','RightVector':'\\u21C0','RightVectorBar':'\\u2953','ring':'\\u02DA','risingdotseq':'\\u2253','rlarr':'\\u21C4','rlhar':'\\u21CC','rlm':'\\u200F','rmoust':'\\u23B1','rmoustache':'\\u23B1','rnmid':'\\u2AEE','roang':'\\u27ED','roarr':'\\u21FE','robrk':'\\u27E7','ropar':'\\u2986','ropf':'\\uD835\\uDD63','Ropf':'\\u211D','roplus':'\\u2A2E','rotimes':'\\u2A35','RoundImplies':'\\u2970','rpar':')','rpargt':'\\u2994','rppolint':'\\u2A12','rrarr':'\\u21C9','Rrightarrow':'\\u21DB','rsaquo':'\\u203A','rscr':'\\uD835\\uDCC7','Rscr':'\\u211B','rsh':'\\u21B1','Rsh':'\\u21B1','rsqb':']','rsquo':'\\u2019','rsquor':'\\u2019','rthree':'\\u22CC','rtimes':'\\u22CA','rtri':'\\u25B9','rtrie':'\\u22B5','rtrif':'\\u25B8','rtriltri':'\\u29CE','RuleDelayed':'\\u29F4','ruluhar':'\\u2968','rx':'\\u211E','sacute':'\\u015B','Sacute':'\\u015A','sbquo':'\\u201A','sc':'\\u227B','Sc':'\\u2ABC','scap':'\\u2AB8','scaron':'\\u0161','Scaron':'\\u0160','sccue':'\\u227D','sce':'\\u2AB0','scE':'\\u2AB4','scedil':'\\u015F','Scedil':'\\u015E','scirc':'\\u015D','Scirc':'\\u015C','scnap':'\\u2ABA','scnE':'\\u2AB6','scnsim':'\\u22E9','scpolint':'\\u2A13','scsim':'\\u227F','scy':'\\u0441','Scy':'\\u0421','sdot':'\\u22C5','sdotb':'\\u22A1','sdote':'\\u2A66','searhk':'\\u2925','searr':'\\u2198','seArr':'\\u21D8','searrow':'\\u2198','sect':'\\xA7','semi':';','seswar':'\\u2929','setminus':'\\u2216','setmn':'\\u2216','sext':'\\u2736','sfr':'\\uD835\\uDD30','Sfr':'\\uD835\\uDD16','sfrown':'\\u2322','sharp':'\\u266F','shchcy':'\\u0449','SHCHcy':'\\u0429','shcy':'\\u0448','SHcy':'\\u0428','ShortDownArrow':'\\u2193','ShortLeftArrow':'\\u2190','shortmid':'\\u2223','shortparallel':'\\u2225','ShortRightArrow':'\\u2192','ShortUpArrow':'\\u2191','shy':'\\xAD','sigma':'\\u03C3','Sigma':'\\u03A3','sigmaf':'\\u03C2','sigmav':'\\u03C2','sim':'\\u223C','simdot':'\\u2A6A','sime':'\\u2243','simeq':'\\u2243','simg':'\\u2A9E','simgE':'\\u2AA0','siml':'\\u2A9D','simlE':'\\u2A9F','simne':'\\u2246','simplus':'\\u2A24','simrarr':'\\u2972','slarr':'\\u2190','SmallCircle':'\\u2218','smallsetminus':'\\u2216','smashp':'\\u2A33','smeparsl':'\\u29E4','smid':'\\u2223','smile':'\\u2323','smt':'\\u2AAA','smte':'\\u2AAC','smtes':'\\u2AAC\\uFE00','softcy':'\\u044C','SOFTcy':'\\u042C','sol':'/','solb':'\\u29C4','solbar':'\\u233F','sopf':'\\uD835\\uDD64','Sopf':'\\uD835\\uDD4A','spades':'\\u2660','spadesuit':'\\u2660','spar':'\\u2225','sqcap':'\\u2293','sqcaps':'\\u2293\\uFE00','sqcup':'\\u2294','sqcups':'\\u2294\\uFE00','Sqrt':'\\u221A','sqsub':'\\u228F','sqsube':'\\u2291','sqsubset':'\\u228F','sqsubseteq':'\\u2291','sqsup':'\\u2290','sqsupe':'\\u2292','sqsupset':'\\u2290','sqsupseteq':'\\u2292','squ':'\\u25A1','square':'\\u25A1','Square':'\\u25A1','SquareIntersection':'\\u2293','SquareSubset':'\\u228F','SquareSubsetEqual':'\\u2291','SquareSuperset':'\\u2290','SquareSupersetEqual':'\\u2292','SquareUnion':'\\u2294','squarf':'\\u25AA','squf':'\\u25AA','srarr':'\\u2192','sscr':'\\uD835\\uDCC8','Sscr':'\\uD835\\uDCAE','ssetmn':'\\u2216','ssmile':'\\u2323','sstarf':'\\u22C6','star':'\\u2606','Star':'\\u22C6','starf':'\\u2605','straightepsilon':'\\u03F5','straightphi':'\\u03D5','strns':'\\xAF','sub':'\\u2282','Sub':'\\u22D0','subdot':'\\u2ABD','sube':'\\u2286','subE':'\\u2AC5','subedot':'\\u2AC3','submult':'\\u2AC1','subne':'\\u228A','subnE':'\\u2ACB','subplus':'\\u2ABF','subrarr':'\\u2979','subset':'\\u2282','Subset':'\\u22D0','subseteq':'\\u2286','subseteqq':'\\u2AC5','SubsetEqual':'\\u2286','subsetneq':'\\u228A','subsetneqq':'\\u2ACB','subsim':'\\u2AC7','subsub':'\\u2AD5','subsup':'\\u2AD3','succ':'\\u227B','succapprox':'\\u2AB8','succcurlyeq':'\\u227D','Succeeds':'\\u227B','SucceedsEqual':'\\u2AB0','SucceedsSlantEqual':'\\u227D','SucceedsTilde':'\\u227F','succeq':'\\u2AB0','succnapprox':'\\u2ABA','succneqq':'\\u2AB6','succnsim':'\\u22E9','succsim':'\\u227F','SuchThat':'\\u220B','sum':'\\u2211','Sum':'\\u2211','sung':'\\u266A','sup':'\\u2283','Sup':'\\u22D1','sup1':'\\xB9','sup2':'\\xB2','sup3':'\\xB3','supdot':'\\u2ABE','supdsub':'\\u2AD8','supe':'\\u2287','supE':'\\u2AC6','supedot':'\\u2AC4','Superset':'\\u2283','SupersetEqual':'\\u2287','suphsol':'\\u27C9','suphsub':'\\u2AD7','suplarr':'\\u297B','supmult':'\\u2AC2','supne':'\\u228B','supnE':'\\u2ACC','supplus':'\\u2AC0','supset':'\\u2283','Supset':'\\u22D1','supseteq':'\\u2287','supseteqq':'\\u2AC6','supsetneq':'\\u228B','supsetneqq':'\\u2ACC','supsim':'\\u2AC8','supsub':'\\u2AD4','supsup':'\\u2AD6','swarhk':'\\u2926','swarr':'\\u2199','swArr':'\\u21D9','swarrow':'\\u2199','swnwar':'\\u292A','szlig':'\\xDF','Tab':'\\t','target':'\\u2316','tau':'\\u03C4','Tau':'\\u03A4','tbrk':'\\u23B4','tcaron':'\\u0165','Tcaron':'\\u0164','tcedil':'\\u0163','Tcedil':'\\u0162','tcy':'\\u0442','Tcy':'\\u0422','tdot':'\\u20DB','telrec':'\\u2315','tfr':'\\uD835\\uDD31','Tfr':'\\uD835\\uDD17','there4':'\\u2234','therefore':'\\u2234','Therefore':'\\u2234','theta':'\\u03B8','Theta':'\\u0398','thetasym':'\\u03D1','thetav':'\\u03D1','thickapprox':'\\u2248','thicksim':'\\u223C','ThickSpace':'\\u205F\\u200A','thinsp':'\\u2009','ThinSpace':'\\u2009','thkap':'\\u2248','thksim':'\\u223C','thorn':'\\xFE','THORN':'\\xDE','tilde':'\\u02DC','Tilde':'\\u223C','TildeEqual':'\\u2243','TildeFullEqual':'\\u2245','TildeTilde':'\\u2248','times':'\\xD7','timesb':'\\u22A0','timesbar':'\\u2A31','timesd':'\\u2A30','tint':'\\u222D','toea':'\\u2928','top':'\\u22A4','topbot':'\\u2336','topcir':'\\u2AF1','topf':'\\uD835\\uDD65','Topf':'\\uD835\\uDD4B','topfork':'\\u2ADA','tosa':'\\u2929','tprime':'\\u2034','trade':'\\u2122','TRADE':'\\u2122','triangle':'\\u25B5','triangledown':'\\u25BF','triangleleft':'\\u25C3','trianglelefteq':'\\u22B4','triangleq':'\\u225C','triangleright':'\\u25B9','trianglerighteq':'\\u22B5','tridot':'\\u25EC','trie':'\\u225C','triminus':'\\u2A3A','TripleDot':'\\u20DB','triplus':'\\u2A39','trisb':'\\u29CD','tritime':'\\u2A3B','trpezium':'\\u23E2','tscr':'\\uD835\\uDCC9','Tscr':'\\uD835\\uDCAF','tscy':'\\u0446','TScy':'\\u0426','tshcy':'\\u045B','TSHcy':'\\u040B','tstrok':'\\u0167','Tstrok':'\\u0166','twixt':'\\u226C','twoheadleftarrow':'\\u219E','twoheadrightarrow':'\\u21A0','uacute':'\\xFA','Uacute':'\\xDA','uarr':'\\u2191','uArr':'\\u21D1','Uarr':'\\u219F','Uarrocir':'\\u2949','ubrcy':'\\u045E','Ubrcy':'\\u040E','ubreve':'\\u016D','Ubreve':'\\u016C','ucirc':'\\xFB','Ucirc':'\\xDB','ucy':'\\u0443','Ucy':'\\u0423','udarr':'\\u21C5','udblac':'\\u0171','Udblac':'\\u0170','udhar':'\\u296E','ufisht':'\\u297E','ufr':'\\uD835\\uDD32','Ufr':'\\uD835\\uDD18','ugrave':'\\xF9','Ugrave':'\\xD9','uHar':'\\u2963','uharl':'\\u21BF','uharr':'\\u21BE','uhblk':'\\u2580','ulcorn':'\\u231C','ulcorner':'\\u231C','ulcrop':'\\u230F','ultri':'\\u25F8','umacr':'\\u016B','Umacr':'\\u016A','uml':'\\xA8','UnderBar':'_','UnderBrace':'\\u23DF','UnderBracket':'\\u23B5','UnderParenthesis':'\\u23DD','Union':'\\u22C3','UnionPlus':'\\u228E','uogon':'\\u0173','Uogon':'\\u0172','uopf':'\\uD835\\uDD66','Uopf':'\\uD835\\uDD4C','uparrow':'\\u2191','Uparrow':'\\u21D1','UpArrow':'\\u2191','UpArrowBar':'\\u2912','UpArrowDownArrow':'\\u21C5','updownarrow':'\\u2195','Updownarrow':'\\u21D5','UpDownArrow':'\\u2195','UpEquilibrium':'\\u296E','upharpoonleft':'\\u21BF','upharpoonright':'\\u21BE','uplus':'\\u228E','UpperLeftArrow':'\\u2196','UpperRightArrow':'\\u2197','upsi':'\\u03C5','Upsi':'\\u03D2','upsih':'\\u03D2','upsilon':'\\u03C5','Upsilon':'\\u03A5','UpTee':'\\u22A5','UpTeeArrow':'\\u21A5','upuparrows':'\\u21C8','urcorn':'\\u231D','urcorner':'\\u231D','urcrop':'\\u230E','uring':'\\u016F','Uring':'\\u016E','urtri':'\\u25F9','uscr':'\\uD835\\uDCCA','Uscr':'\\uD835\\uDCB0','utdot':'\\u22F0','utilde':'\\u0169','Utilde':'\\u0168','utri':'\\u25B5','utrif':'\\u25B4','uuarr':'\\u21C8','uuml':'\\xFC','Uuml':'\\xDC','uwangle':'\\u29A7','vangrt':'\\u299C','varepsilon':'\\u03F5','varkappa':'\\u03F0','varnothing':'\\u2205','varphi':'\\u03D5','varpi':'\\u03D6','varpropto':'\\u221D','varr':'\\u2195','vArr':'\\u21D5','varrho':'\\u03F1','varsigma':'\\u03C2','varsubsetneq':'\\u228A\\uFE00','varsubsetneqq':'\\u2ACB\\uFE00','varsupsetneq':'\\u228B\\uFE00','varsupsetneqq':'\\u2ACC\\uFE00','vartheta':'\\u03D1','vartriangleleft':'\\u22B2','vartriangleright':'\\u22B3','vBar':'\\u2AE8','Vbar':'\\u2AEB','vBarv':'\\u2AE9','vcy':'\\u0432','Vcy':'\\u0412','vdash':'\\u22A2','vDash':'\\u22A8','Vdash':'\\u22A9','VDash':'\\u22AB','Vdashl':'\\u2AE6','vee':'\\u2228','Vee':'\\u22C1','veebar':'\\u22BB','veeeq':'\\u225A','vellip':'\\u22EE','verbar':'|','Verbar':'\\u2016','vert':'|','Vert':'\\u2016','VerticalBar':'\\u2223','VerticalLine':'|','VerticalSeparator':'\\u2758','VerticalTilde':'\\u2240','VeryThinSpace':'\\u200A','vfr':'\\uD835\\uDD33','Vfr':'\\uD835\\uDD19','vltri':'\\u22B2','vnsub':'\\u2282\\u20D2','vnsup':'\\u2283\\u20D2','vopf':'\\uD835\\uDD67','Vopf':'\\uD835\\uDD4D','vprop':'\\u221D','vrtri':'\\u22B3','vscr':'\\uD835\\uDCCB','Vscr':'\\uD835\\uDCB1','vsubne':'\\u228A\\uFE00','vsubnE':'\\u2ACB\\uFE00','vsupne':'\\u228B\\uFE00','vsupnE':'\\u2ACC\\uFE00','Vvdash':'\\u22AA','vzigzag':'\\u299A','wcirc':'\\u0175','Wcirc':'\\u0174','wedbar':'\\u2A5F','wedge':'\\u2227','Wedge':'\\u22C0','wedgeq':'\\u2259','weierp':'\\u2118','wfr':'\\uD835\\uDD34','Wfr':'\\uD835\\uDD1A','wopf':'\\uD835\\uDD68','Wopf':'\\uD835\\uDD4E','wp':'\\u2118','wr':'\\u2240','wreath':'\\u2240','wscr':'\\uD835\\uDCCC','Wscr':'\\uD835\\uDCB2','xcap':'\\u22C2','xcirc':'\\u25EF','xcup':'\\u22C3','xdtri':'\\u25BD','xfr':'\\uD835\\uDD35','Xfr':'\\uD835\\uDD1B','xharr':'\\u27F7','xhArr':'\\u27FA','xi':'\\u03BE','Xi':'\\u039E','xlarr':'\\u27F5','xlArr':'\\u27F8','xmap':'\\u27FC','xnis':'\\u22FB','xodot':'\\u2A00','xopf':'\\uD835\\uDD69','Xopf':'\\uD835\\uDD4F','xoplus':'\\u2A01','xotime':'\\u2A02','xrarr':'\\u27F6','xrArr':'\\u27F9','xscr':'\\uD835\\uDCCD','Xscr':'\\uD835\\uDCB3','xsqcup':'\\u2A06','xuplus':'\\u2A04','xutri':'\\u25B3','xvee':'\\u22C1','xwedge':'\\u22C0','yacute':'\\xFD','Yacute':'\\xDD','yacy':'\\u044F','YAcy':'\\u042F','ycirc':'\\u0177','Ycirc':'\\u0176','ycy':'\\u044B','Ycy':'\\u042B','yen':'\\xA5','yfr':'\\uD835\\uDD36','Yfr':'\\uD835\\uDD1C','yicy':'\\u0457','YIcy':'\\u0407','yopf':'\\uD835\\uDD6A','Yopf':'\\uD835\\uDD50','yscr':'\\uD835\\uDCCE','Yscr':'\\uD835\\uDCB4','yucy':'\\u044E','YUcy':'\\u042E','yuml':'\\xFF','Yuml':'\\u0178','zacute':'\\u017A','Zacute':'\\u0179','zcaron':'\\u017E','Zcaron':'\\u017D','zcy':'\\u0437','Zcy':'\\u0417','zdot':'\\u017C','Zdot':'\\u017B','zeetrf':'\\u2128','ZeroWidthSpace':'\\u200B','zeta':'\\u03B6','Zeta':'\\u0396','zfr':'\\uD835\\uDD37','Zfr':'\\u2128','zhcy':'\\u0436','ZHcy':'\\u0416','zigrarr':'\\u21DD','zopf':'\\uD835\\uDD6B','Zopf':'\\u2124','zscr':'\\uD835\\uDCCF','Zscr':'\\uD835\\uDCB5','zwj':'\\u200D','zwnj':'\\u200C'};\n\tvar decodeMapLegacy = {'aacute':'\\xE1','Aacute':'\\xC1','acirc':'\\xE2','Acirc':'\\xC2','acute':'\\xB4','aelig':'\\xE6','AElig':'\\xC6','agrave':'\\xE0','Agrave':'\\xC0','amp':'&','AMP':'&','aring':'\\xE5','Aring':'\\xC5','atilde':'\\xE3','Atilde':'\\xC3','auml':'\\xE4','Auml':'\\xC4','brvbar':'\\xA6','ccedil':'\\xE7','Ccedil':'\\xC7','cedil':'\\xB8','cent':'\\xA2','copy':'\\xA9','COPY':'\\xA9','curren':'\\xA4','deg':'\\xB0','divide':'\\xF7','eacute':'\\xE9','Eacute':'\\xC9','ecirc':'\\xEA','Ecirc':'\\xCA','egrave':'\\xE8','Egrave':'\\xC8','eth':'\\xF0','ETH':'\\xD0','euml':'\\xEB','Euml':'\\xCB','frac12':'\\xBD','frac14':'\\xBC','frac34':'\\xBE','gt':'>','GT':'>','iacute':'\\xED','Iacute':'\\xCD','icirc':'\\xEE','Icirc':'\\xCE','iexcl':'\\xA1','igrave':'\\xEC','Igrave':'\\xCC','iquest':'\\xBF','iuml':'\\xEF','Iuml':'\\xCF','laquo':'\\xAB','lt':'<','LT':'<','macr':'\\xAF','micro':'\\xB5','middot':'\\xB7','nbsp':'\\xA0','not':'\\xAC','ntilde':'\\xF1','Ntilde':'\\xD1','oacute':'\\xF3','Oacute':'\\xD3','ocirc':'\\xF4','Ocirc':'\\xD4','ograve':'\\xF2','Ograve':'\\xD2','ordf':'\\xAA','ordm':'\\xBA','oslash':'\\xF8','Oslash':'\\xD8','otilde':'\\xF5','Otilde':'\\xD5','ouml':'\\xF6','Ouml':'\\xD6','para':'\\xB6','plusmn':'\\xB1','pound':'\\xA3','quot':'\"','QUOT':'\"','raquo':'\\xBB','reg':'\\xAE','REG':'\\xAE','sect':'\\xA7','shy':'\\xAD','sup1':'\\xB9','sup2':'\\xB2','sup3':'\\xB3','szlig':'\\xDF','thorn':'\\xFE','THORN':'\\xDE','times':'\\xD7','uacute':'\\xFA','Uacute':'\\xDA','ucirc':'\\xFB','Ucirc':'\\xDB','ugrave':'\\xF9','Ugrave':'\\xD9','uml':'\\xA8','uuml':'\\xFC','Uuml':'\\xDC','yacute':'\\xFD','Yacute':'\\xDD','yen':'\\xA5','yuml':'\\xFF'};\n\tvar decodeMapNumeric = {'0':'\\uFFFD','128':'\\u20AC','130':'\\u201A','131':'\\u0192','132':'\\u201E','133':'\\u2026','134':'\\u2020','135':'\\u2021','136':'\\u02C6','137':'\\u2030','138':'\\u0160','139':'\\u2039','140':'\\u0152','142':'\\u017D','145':'\\u2018','146':'\\u2019','147':'\\u201C','148':'\\u201D','149':'\\u2022','150':'\\u2013','151':'\\u2014','152':'\\u02DC','153':'\\u2122','154':'\\u0161','155':'\\u203A','156':'\\u0153','158':'\\u017E','159':'\\u0178'};\n\tvar invalidReferenceCodePoints = [1,2,3,4,5,6,7,8,11,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,64976,64977,64978,64979,64980,64981,64982,64983,64984,64985,64986,64987,64988,64989,64990,64991,64992,64993,64994,64995,64996,64997,64998,64999,65000,65001,65002,65003,65004,65005,65006,65007,65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111];\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\tvar object = {};\n\tvar hasOwnProperty = object.hasOwnProperty;\n\tvar has = function(object, propertyName) {\n\t\treturn hasOwnProperty.call(object, propertyName);\n\t};\n\n\tvar contains = function(array, value) {\n\t\tvar index = -1;\n\t\tvar length = array.length;\n\t\twhile (++index < length) {\n\t\t\tif (array[index] == value) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t};\n\n\tvar merge = function(options, defaults) {\n\t\tif (!options) {\n\t\t\treturn defaults;\n\t\t}\n\t\tvar result = {};\n\t\tvar key;\n\t\tfor (key in defaults) {\n\t\t\t// A `hasOwnProperty` check is not needed here, since only recognized\n\t\t\t// option names are used anyway. Any others are ignored.\n\t\t\tresult[key] = has(options, key) ? options[key] : defaults[key];\n\t\t}\n\t\treturn result;\n\t};\n\n\t// Modified version of `ucs2encode`; see https://mths.be/punycode.\n\tvar codePointToSymbol = function(codePoint, strict) {\n\t\tvar output = '';\n\t\tif ((codePoint >= 0xD800 && codePoint <= 0xDFFF) || codePoint > 0x10FFFF) {\n\t\t\t// See issue #4:\n\t\t\t// “Otherwise, if the number is in the range 0xD800 to 0xDFFF or is\n\t\t\t// greater than 0x10FFFF, then this is a parse error. Return a U+FFFD\n\t\t\t// REPLACEMENT CHARACTER.”\n\t\t\tif (strict) {\n\t\t\t\tparseError('character reference outside the permissible Unicode range');\n\t\t\t}\n\t\t\treturn '\\uFFFD';\n\t\t}\n\t\tif (has(decodeMapNumeric, codePoint)) {\n\t\t\tif (strict) {\n\t\t\t\tparseError('disallowed character reference');\n\t\t\t}\n\t\t\treturn decodeMapNumeric[codePoint];\n\t\t}\n\t\tif (strict && contains(invalidReferenceCodePoints, codePoint)) {\n\t\t\tparseError('disallowed character reference');\n\t\t}\n\t\tif (codePoint > 0xFFFF) {\n\t\t\tcodePoint -= 0x10000;\n\t\t\toutput += stringFromCharCode(codePoint >>> 10 & 0x3FF | 0xD800);\n\t\t\tcodePoint = 0xDC00 | codePoint & 0x3FF;\n\t\t}\n\t\toutput += stringFromCharCode(codePoint);\n\t\treturn output;\n\t};\n\n\tvar hexEscape = function(codePoint) {\n\t\treturn '' + codePoint.toString(16).toUpperCase() + ';';\n\t};\n\n\tvar decEscape = function(codePoint) {\n\t\treturn '' + codePoint + ';';\n\t};\n\n\tvar parseError = function(message) {\n\t\tthrow Error('Parse error: ' + message);\n\t};\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar encode = function(string, options) {\n\t\toptions = merge(options, encode.options);\n\t\tvar strict = options.strict;\n\t\tif (strict && regexInvalidRawCodePoint.test(string)) {\n\t\t\tparseError('forbidden code point');\n\t\t}\n\t\tvar encodeEverything = options.encodeEverything;\n\t\tvar useNamedReferences = options.useNamedReferences;\n\t\tvar allowUnsafeSymbols = options.allowUnsafeSymbols;\n\t\tvar escapeCodePoint = options.decimal ? decEscape : hexEscape;\n\n\t\tvar escapeBmpSymbol = function(symbol) {\n\t\t\treturn escapeCodePoint(symbol.charCodeAt(0));\n\t\t};\n\n\t\tif (encodeEverything) {\n\t\t\t// Encode ASCII symbols.\n\t\t\tstring = string.replace(regexAsciiWhitelist, function(symbol) {\n\t\t\t\t// Use named references if requested & possible.\n\t\t\t\tif (useNamedReferences && has(encodeMap, symbol)) {\n\t\t\t\t\treturn '&' + encodeMap[symbol] + ';';\n\t\t\t\t}\n\t\t\t\treturn escapeBmpSymbol(symbol);\n\t\t\t});\n\t\t\t// Shorten a few escapes that represent two symbols, of which at least one\n\t\t\t// is within the ASCII range.\n\t\t\tif (useNamedReferences) {\n\t\t\t\tstring = string\n\t\t\t\t\t.replace(/>\\u20D2/g, '>⃒')\n\t\t\t\t\t.replace(/<\\u20D2/g, '<⃒')\n\t\t\t\t\t.replace(/fj/g, 'fj');\n\t\t\t}\n\t\t\t// Encode non-ASCII symbols.\n\t\t\tif (useNamedReferences) {\n\t\t\t\t// Encode non-ASCII symbols that can be replaced with a named reference.\n\t\t\t\tstring = string.replace(regexEncodeNonAscii, function(string) {\n\t\t\t\t\t// Note: there is no need to check `has(encodeMap, string)` here.\n\t\t\t\t\treturn '&' + encodeMap[string] + ';';\n\t\t\t\t});\n\t\t\t}\n\t\t\t// Note: any remaining non-ASCII symbols are handled outside of the `if`.\n\t\t} else if (useNamedReferences) {\n\t\t\t// Apply named character references.\n\t\t\t// Encode `<>\"'&` using named character references.\n\t\t\tif (!allowUnsafeSymbols) {\n\t\t\t\tstring = string.replace(regexEscape, function(string) {\n\t\t\t\t\treturn '&' + encodeMap[string] + ';'; // no need to check `has()` here\n\t\t\t\t});\n\t\t\t}\n\t\t\t// Shorten escapes that represent two symbols, of which at least one is\n\t\t\t// `<>\"'&`.\n\t\t\tstring = string\n\t\t\t\t.replace(/>\\u20D2/g, '>⃒')\n\t\t\t\t.replace(/<\\u20D2/g, '<⃒');\n\t\t\t// Encode non-ASCII symbols that can be replaced with a named reference.\n\t\t\tstring = string.replace(regexEncodeNonAscii, function(string) {\n\t\t\t\t// Note: there is no need to check `has(encodeMap, string)` here.\n\t\t\t\treturn '&' + encodeMap[string] + ';';\n\t\t\t});\n\t\t} else if (!allowUnsafeSymbols) {\n\t\t\t// Encode `<>\"'&` using hexadecimal escapes, now that they’re not handled\n\t\t\t// using named character references.\n\t\t\tstring = string.replace(regexEscape, escapeBmpSymbol);\n\t\t}\n\t\treturn string\n\t\t\t// Encode astral symbols.\n\t\t\t.replace(regexAstralSymbols, function($0) {\n\t\t\t\t// https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n\t\t\t\tvar high = $0.charCodeAt(0);\n\t\t\t\tvar low = $0.charCodeAt(1);\n\t\t\t\tvar codePoint = (high - 0xD800) * 0x400 + low - 0xDC00 + 0x10000;\n\t\t\t\treturn escapeCodePoint(codePoint);\n\t\t\t})\n\t\t\t// Encode any remaining BMP symbols that are not printable ASCII symbols\n\t\t\t// using a hexadecimal escape.\n\t\t\t.replace(regexBmpWhitelist, escapeBmpSymbol);\n\t};\n\t// Expose default options (so they can be overridden globally).\n\tencode.options = {\n\t\t'allowUnsafeSymbols': false,\n\t\t'encodeEverything': false,\n\t\t'strict': false,\n\t\t'useNamedReferences': false,\n\t\t'decimal' : false\n\t};\n\n\tvar decode = function(html, options) {\n\t\toptions = merge(options, decode.options);\n\t\tvar strict = options.strict;\n\t\tif (strict && regexInvalidEntity.test(html)) {\n\t\t\tparseError('malformed character reference');\n\t\t}\n\t\treturn html.replace(regexDecode, function($0, $1, $2, $3, $4, $5, $6, $7, $8) {\n\t\t\tvar codePoint;\n\t\t\tvar semicolon;\n\t\t\tvar decDigits;\n\t\t\tvar hexDigits;\n\t\t\tvar reference;\n\t\t\tvar next;\n\n\t\t\tif ($1) {\n\t\t\t\treference = $1;\n\t\t\t\t// Note: there is no need to check `has(decodeMap, reference)`.\n\t\t\t\treturn decodeMap[reference];\n\t\t\t}\n\n\t\t\tif ($2) {\n\t\t\t\t// Decode named character references without trailing `;`, e.g. `&`.\n\t\t\t\t// This is only a parse error if it gets converted to `&`, or if it is\n\t\t\t\t// followed by `=` in an attribute context.\n\t\t\t\treference = $2;\n\t\t\t\tnext = $3;\n\t\t\t\tif (next && options.isAttributeValue) {\n\t\t\t\t\tif (strict && next == '=') {\n\t\t\t\t\t\tparseError('`&` did not start a character reference');\n\t\t\t\t\t}\n\t\t\t\t\treturn $0;\n\t\t\t\t} else {\n\t\t\t\t\tif (strict) {\n\t\t\t\t\t\tparseError(\n\t\t\t\t\t\t\t'named character reference was not terminated by a semicolon'\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\t// Note: there is no need to check `has(decodeMapLegacy, reference)`.\n\t\t\t\t\treturn decodeMapLegacy[reference] + (next || '');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ($4) {\n\t\t\t\t// Decode decimal escapes, e.g. `𝌆`.\n\t\t\t\tdecDigits = $4;\n\t\t\t\tsemicolon = $5;\n\t\t\t\tif (strict && !semicolon) {\n\t\t\t\t\tparseError('character reference was not terminated by a semicolon');\n\t\t\t\t}\n\t\t\t\tcodePoint = parseInt(decDigits, 10);\n\t\t\t\treturn codePointToSymbol(codePoint, strict);\n\t\t\t}\n\n\t\t\tif ($6) {\n\t\t\t\t// Decode hexadecimal escapes, e.g. `𝌆`.\n\t\t\t\thexDigits = $6;\n\t\t\t\tsemicolon = $7;\n\t\t\t\tif (strict && !semicolon) {\n\t\t\t\t\tparseError('character reference was not terminated by a semicolon');\n\t\t\t\t}\n\t\t\t\tcodePoint = parseInt(hexDigits, 16);\n\t\t\t\treturn codePointToSymbol(codePoint, strict);\n\t\t\t}\n\n\t\t\t// If we’re still here, `if ($7)` is implied; it’s an ambiguous\n\t\t\t// ampersand for sure. https://mths.be/notes/ambiguous-ampersands\n\t\t\tif (strict) {\n\t\t\t\tparseError(\n\t\t\t\t\t'named character reference was not terminated by a semicolon'\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn $0;\n\t\t});\n\t};\n\t// Expose default options (so they can be overridden globally).\n\tdecode.options = {\n\t\t'isAttributeValue': false,\n\t\t'strict': false\n\t};\n\n\tvar escape = function(string) {\n\t\treturn string.replace(regexEscape, function($0) {\n\t\t\t// Note: there is no need to check `has(escapeMap, $0)` here.\n\t\t\treturn escapeMap[$0];\n\t\t});\n\t};\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar he = {\n\t\t'version': '1.2.0',\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'escape': escape,\n\t\t'unescape': decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn he;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js, io.js, or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = he;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in he) {\n\t\t\t\thas(he, key) && (freeExports[key] = he[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.he = he;\n\t}\n\n}(this));\n","/**\n * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport he from 'he'\nimport { defineComponent } from 'vue'\n\ntype Cover = {\n\tdetection: {\n\t\tx: number\n\t\ty: number\n\t\twidth: number\n\t\theight: number\n\t}\n}\n\nexport default defineComponent({\n\tname: 'FaceCoverMixin',\n\n\tcomputed: {\n\t\tfiles() {\n\t\t\treturn this.$store.state.files.files\n\t\t},\n\n\t\tfaces() {\n\t\t\treturn this.$store.state.faces.faces\n\t\t},\n\n\t\tfacesFiles() {\n\t\t\treturn this.$store.state.faces.facesFiles\n\t\t},\n\t},\n\n\tmethods: {\n\t\tgetFaceCover(faceName): Cover {\n\t\t\treturn JSON.parse(he.decode(this.faces[faceName].attributes['face-preview-image'] || '{}'))\n\t\t},\n\n\t\t/**\n\t\t * This will produce an inline style to apply to images\n\t\t * to zoom toward the detected face\n\t\t *\n\t\t * @param faceName\n\t\t */\n\t\tgetCoverStyle(faceName: string): Record | { transform: string, width: string, transformOrigin: string } {\n\t\t\tconst cover = this.getFaceCover(faceName)\n\t\t\tif (!cover || !cover.detection) {\n\t\t\t\treturn {}\n\t\t\t}\n\t\t\tconst detection = cover.detection\n\n\t\t\t// Zoom into the picture so that the face fills the --photos-face-width box nicely\n\t\t\t// if the face is larger than the image, we don't zoom out (reason for the Math.max)\n\t\t\tconst zoom = Math.max(1, (1 / detection.width) * 0.4)\n\n\t\t\tconst horizontalCenterOfFace = (detection.x + detection.width / 2) * 100\n\t\t\tconst verticalCenterOfFace = (detection.y + detection.height / 2) * 100\n\n\t\t\treturn {\n\t\t\t\t// We assume that the image is inside a div with width: var(--photos-face-width)\n\t\t\t\twidth: '100%',\n\t\t\t\t// we translate the image so that the center of the detected face is in the center of the --photos-face-width box\n\t\t\t\t// and add the zoom\n\t\t\t\ttransform: `translate(calc( var(--photos-face-width)/2 - ${horizontalCenterOfFace}% ), calc( var(--photos-face-width)/2 - ${verticalCenterOfFace}% )) scale(${zoom})`,\n\t\t\t\t// this is necessary for the zoom to zoom toward the center of the face\n\t\t\t\ttransformOrigin: `${horizontalCenterOfFace}% ${verticalCenterOfFace}%`,\n\t\t\t}\n\t\t},\n\t},\n})\n","/**\n * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { File } from '@nextcloud/files'\nimport type { FileStat, ResponseDataDetailed } from 'webdav'\n\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { showError } from '@nextcloud/dialogs'\nimport { resultToNode } from '@nextcloud/files/dav'\nimport { t } from '@nextcloud/l10n'\nimport he from 'he'\nimport { defineComponent } from 'vue'\nimport { davClient } from '../services/DavClient.ts'\nimport { getPropFind } from '../services/DavRequest.ts'\nimport logger from '../services/logger.js'\nimport AbortControllerMixin from './AbortControllerMixin.js'\n\nconst recognizeDAVProps = [\n\t'',\n\t'',\n\t'',\n\t'',\n]\n\ntype FaceNode = File & {\n\tattributes: {\n\t\t'face-detections': string\n\t\t'face-preview-image': string\n\t\trealpath: string\n\t}\n}\n\nexport default defineComponent({\n\tname: 'FetchFacesMixin',\n\n\tdata() {\n\t\treturn {\n\t\t\terrorFetchingFaces: null as null | number | Error | unknown,\n\t\t\tloadingFaces: false,\n\t\t\terrorFetchingFiles: null as null | number | Error | unknown,\n\t\t\tloadingFiles: false,\n\t\t}\n\t},\n\n\tmixins: [AbortControllerMixin],\n\n\tasync beforeMount() {\n\t\tthis.fetchFaces()\n\t},\n\n\tcomputed: {\n\t\tfaces() {\n\t\t\treturn this.$store.state.faces.faces\n\t\t},\n\t},\n\n\tmethods: {\n\t\tasync fetchFaces() {\n\t\t\tif (this.loadingFaces) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (Object.keys(this.faces).length) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tthis.loadingFaces = true\n\t\t\t\tthis.errorFetchingFaces = null\n\n\t\t\t\tconst { data: fetchedRawFaces } = await davClient.getDirectoryContents(`/recognize/${getCurrentUser()?.uid}/faces/`, {\n\t\t\t\t\tdata: getPropFind(recognizeDAVProps),\n\t\t\t\t\tdetails: true,\n\t\t\t\t\tsignal: this.abortController.signal,\n\t\t\t\t}) as ResponseDataDetailed\n\n\t\t\t\tconst fetchedFace = fetchedRawFaces.map((file) => resultToNode(file, `/recognize/${getCurrentUser()?.uid}/faces/`) as FaceNode)\n\t\t\t\tthis.$store.dispatch('addFaces', { faces: fetchedFace })\n\t\t\t\tlogger.debug(`[FetchFacesMixin] Fetched ${fetchedFace.length} new faces: `, { fetchedFace })\n\t\t\t} catch (error) {\n\t\t\t\tif (error.response?.status === 404) {\n\t\t\t\t\tthis.errorFetchingFaces = 404\n\t\t\t\t} else {\n\t\t\t\t\tthis.errorFetchingFaces = error\n\t\t\t\t}\n\t\t\t\tlogger.error(t('photos', 'Failed to fetch faces list.'), { error })\n\t\t\t\tshowError(t('photos', 'Failed to fetch faces list.'))\n\t\t\t} finally {\n\t\t\t\tthis.loadingFaces = false\n\t\t\t}\n\t\t},\n\n\t\tasync fetchFaceContent(faceName, force) {\n\t\t\tif (this.loadingFiles) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (!force && this.facesFiles[faceName] && this.facesFiles[faceName].length) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tthis.errorFetchingFiles = null\n\t\t\t\tthis.loadingFiles = true\n\n\t\t\t\tconst { data: fetchedRawFiles } = await davClient.getDirectoryContents(\n\t\t\t\t\t`/recognize/${getCurrentUser()?.uid}/faces/${faceName}`,\n\t\t\t\t\t{\n\t\t\t\t\t\tdata: getPropFind(recognizeDAVProps),\n\t\t\t\t\t\tdetails: true,\n\t\t\t\t\t\tsignal: this.abortController.signal,\n\t\t\t\t\t},\n\t\t\t\t) as ResponseDataDetailed\n\n\t\t\t\tconst fetchedFiles = fetchedRawFiles\n\t\t\t\t\t.map((file) => ({\n\t\t\t\t\t\t...file,\n\t\t\t\t\t\tfilename: he.decode(file.props?.realpath).replace(`/${getCurrentUser()?.uid}/files`, `/files/${getCurrentUser()?.uid}`),\n\t\t\t\t\t\t'face-detections': JSON.parse(he.decode(file.props?.['face-detections'])),\n\t\t\t\t\t}))\n\t\t\t\t\t.map((file) => resultToNode(file) as FaceNode)\n\n\t\t\t\tconst fileIds = fetchedFiles.map((file) => file.fileid?.toString() as string)\n\n\t\t\t\tthis.$store.dispatch('appendFiles', fetchedFiles)\n\n\t\t\t\tif (fetchedFiles.length > 0) {\n\t\t\t\t\tawait this.$store.commit('addFilesToFace', { faceName, fileIdsToAdd: fileIds })\n\t\t\t\t}\n\n\t\t\t\tlogger.debug(`[FetchFacesMixin] Fetched ${fileIds.length} new files: `, { fileIds })\n\t\t\t} catch (error) {\n\t\t\t\tif (error.response?.status === 404) {\n\t\t\t\t\tthis.errorFetchingFaces = 404\n\t\t\t\t} else {\n\t\t\t\t\tthis.errorFetchingFaces = error\n\t\t\t\t}\n\n\t\t\t\t// cancelled request, moving on...\n\t\t\t\tlogger.error('Error fetching face files', { error })\n\t\t\t} finally {\n\t\t\t\tthis.loadingFiles = false\n\t\t\t}\n\t\t},\n\n\t\tasync fetchUnassignedFaces(force) {\n\t\t\tif (this.loadingFiles) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (!force && this.unassignedFiles && this.unassignedFiles.length) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tthis.errorFetchingFiles = null\n\t\t\t\tthis.loadingFiles = true\n\n\t\t\t\tconst { data: fetchedRawFiles } = await davClient.getDirectoryContents(\n\t\t\t\t\t`/recognize/${getCurrentUser()?.uid}/unassigned-faces`,\n\t\t\t\t\t{\n\t\t\t\t\t\tdata: getPropFind(recognizeDAVProps),\n\t\t\t\t\t\tdetails: true,\n\t\t\t\t\t\tsignal: this.abortController.signal,\n\t\t\t\t\t},\n\t\t\t\t) as ResponseDataDetailed\n\n\t\t\t\tconst fetchedFiles = fetchedRawFiles\n\t\t\t\t\t.map((file) => ({\n\t\t\t\t\t\t...file,\n\t\t\t\t\t\tfilename: he.decode(file.props?.realpath).replace(`/${getCurrentUser()?.uid}/files`, `/files/${getCurrentUser()?.uid}`),\n\t\t\t\t\t\t'face-detections': JSON.parse(he.decode(file.props?.['face-detections'])),\n\t\t\t\t\t}))\n\t\t\t\t\t.map((file) => resultToNode(file) as FaceNode)\n\n\t\t\t\tconst fileIds = [...new Set(fetchedFiles.map((file) => '' + file.fileid))]\n\t\t\t\tthis.$store.dispatch('appendFiles', fetchedFiles)\n\n\t\t\t\tif (fetchedFiles.length > 0) {\n\t\t\t\t\tawait this.$store.commit('addUnassignedFiles', { fileIdsToAdd: fileIds })\n\t\t\t\t}\n\n\t\t\t\tlogger.debug(`[FetchFacesMixin] Fetched ${fileIds.length} new unassigned files: `, { fileIds })\n\t\t\t} catch (error) {\n\t\t\t\tif (error.response?.status === 404) {\n\t\t\t\t\tthis.errorFetchingFaces = 404\n\t\t\t\t} else {\n\t\t\t\t\tthis.errorFetchingFaces = error\n\t\t\t\t}\n\n\t\t\t\t// cancelled request, moving on...\n\t\t\t\tlogger.error('Error fetching unassigned files', { error })\n\t\t\t} finally {\n\t\t\t\tthis.loadingFiles = false\n\t\t\t}\n\t\t},\n\n\t\tasync fetchUnassignedFacesCount() {\n\t\t\ttry {\n\t\t\t\tconst { data: unassignedFacesRoot } = await davClient.stat(\n\t\t\t\t\t`/recognize/${getCurrentUser()?.uid}/unassigned-faces`,\n\t\t\t\t\t{\n\t\t\t\t\t\tdata: getPropFind(recognizeDAVProps),\n\t\t\t\t\t\tdetails: true,\n\t\t\t\t\t\tsignal: this.abortController.signal,\n\t\t\t\t\t},\n\t\t\t\t) as ResponseDataDetailed\n\n\t\t\t\tconst count = Number(unassignedFacesRoot.props?.nbItems)\n\n\t\t\t\tawait this.$store.commit('setUnassignedFilesCount', count)\n\n\t\t\t\tlogger.debug('[FetchFacesMixin] Fetched unassigned files count: ', { count })\n\t\t\t} catch (error) {\n\t\t\t\t// cancelled request, moving on...\n\t\t\t\tlogger.error('Error fetching unassigned files count', { error })\n\t\t\t}\n\t\t},\n\t},\n})\n","\n\n\n\t
\n\n\n\n\n\n"],"names":["root","freeExports","exports","freeModule","module","freeGlobal","global","regexAstralSymbols","regexAsciiWhitelist","regexBmpWhitelist","regexEncodeNonAscii","encodeMap","regexEscape","escapeMap","regexInvalidEntity","regexInvalidRawCodePoint","regexDecode","decodeMap","decodeMapLegacy","decodeMapNumeric","invalidReferenceCodePoints","stringFromCharCode","object","hasOwnProperty","has","propertyName","contains","array","value","index","length","merge","options","defaults","result","key","codePointToSymbol","codePoint","strict","output","parseError","hexEscape","decEscape","message","encode","string","encodeEverything","useNamedReferences","allowUnsafeSymbols","escapeCodePoint","escapeBmpSymbol","symbol","$0","high","low","decode","html","$1","$2","$3","$4","$5","$6","$7","$8","semicolon","decDigits","hexDigits","reference","next","escape","he","this","FaceCoverMixin","defineComponent","faceName","cover","detection","zoom","horizontalCenterOfFace","verticalCenterOfFace","recognizeDAVProps","FetchFacesMixin","AbortControllerMixin","fetchedRawFaces","davClient","getCurrentUser","getPropFind","fetchedFace","file","resultToNode","logger","error","t","showError","force","fetchedRawFiles","fetchedFiles","fileIds","unassignedFacesRoot","count","_sfc_main","generateUrl","n"],"mappings":"+WACE,SAASA,EAAM,CAGhB,IAAIC,EAA4CC,EAG5CC,EAA0CC,GAC7CA,EAAO,SAAWH,GAAeG,EAI9BC,EAAa,OAAOC,GAAU,UAAYA,GAC1CD,EAAW,SAAWA,GAAcA,EAAW,SAAWA,KAC7DL,EAAOK,GAMR,IAAIE,EAAqB,kCAIrBC,EAAsB,eAItBC,EAAoB,+DAEpBC,EAAsB,klGACtBC,EAAY,CAAC,IAAO,MAAM,IAAS,OAAO,IAAS,MAAM,IAAS,MAAM,IAAS,KAAK,IAAS,KAAK,IAAS,KAAK,IAAS,MAAM,IAAS,iBAAiB,IAAS,UAAU,IAAS,YAAY,IAAS,OAAO,IAAS,SAAS,IAAK,MAAM,KAAK,UAAU,IAAS,SAAS,IAAS,cAAc,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,OAAO,IAAS,SAAS,IAAS,OAAO,IAAS,QAAQ,IAAO,OAAO,KAAe,aAAa,IAAS,QAAQ,EAAI,SAAS,IAAS,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,SAAS,IAAI,QAAQ,IAAI,OAAO,IAAS,QAAQ,IAAI,QAAQ,IAAS,SAAS,IAAI,OAAO,IAAO,QAAQ,IAAI,QAAQ,IAAO,SAAS,IAAI,SAAS,IAAS,OAAO,IAAS,OAAO,IAAO,SAAS,IAAK,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,SAAS,IAAS,SAAS,IAAI,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAO,QAAQ,IAAO,QAAQ,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,SAAS,IAAS,SAAS,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,UAAU,IAAS,UAAU,IAAS,UAAU,IAAS,UAAU,IAAS,QAAQ,IAAS,QAAQ,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,QAAQ,IAAS,QAAQ,IAAS,OAAO,IAAS,OAAO,IAAS,OAAO,IAAS,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,OAAO,IAAO,OAAO,IAAO,OAAO,IAAI,SAAS,IAAI,MAAM,IAAI,MAAM,UAAY,KAAK,IAAI,MAAM,IAAI,MAAM,IAAI,SAAS,IAAS,SAAS,IAAS,UAAU,IAAS,SAAS,IAAS,SAAS,IAAS,OAAO,IAAS,SAAS,IAAS,QAAQ,IAAS,QAAQ,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,QAAQ,IAAI,QAAQ,IAAO,QAAQ,IAAS,QAAQ,IAAI,MAAM,IAAO,OAAO,IAAS,QAAQ,IAAS,MAAM,IAAO,MAAM,IAAS,OAAO,IAAS,QAAQ,IAAO,QAAQ,IAAS,OAAO,IAAS,OAAO,IAAS,QAAQ,IAAO,MAAM,IAAO,OAAO,IAAO,MAAM,IAAS,SAAS,IAAS,KAAK,IAAS,KAAK,IAAS,MAAM,IAAS,QAAQ,IAAS,OAAO,IAAS,QAAQ,IAAS,OAAO,IAAS,QAAQ,IAAS,OAAO,IAAS,OAAO,IAAS,OAAO,IAAS,QAAQ,IAAS,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,KAAe,SAAS,IAAS,OAAO,IAAS,OAAO,IAAS,OAAO,IAAS,OAAO,IAAS,SAAS,IAAS,SAAS,IAAS,aAAa,IAAS,WAAW,IAAS,MAAM,IAAS,aAAa,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,QAAQ,IAAS,MAAM,IAAS,MAAM,IAAS,OAAO,IAAS,OAAO,IAAS,QAAQ,IAAS,SAAS,IAAS,SAAS,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,OAAO,IAAS,QAAQ,IAAS,OAAO,IAAS,OAAO,IAAS,QAAQ,IAAS,OAAO,IAAS,MAAM,IAAS,QAAQ,IAAS,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,UAAU,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,SAAS,IAAS,OAAO,IAAS,OAAO,KAAe,QAAQ,IAAS,QAAQ,IAAS,SAAS,IAAS,QAAQ,IAAS,MAAM,IAAS,KAAK,IAAS,QAAQ,IAAS,KAAK,IAAS,QAAQ,IAAS,QAAQ,IAAS,OAAO,IAAS,SAAS,IAAS,MAAM,IAAI,OAAO,IAAO,KAAK,IAAO,MAAM,IAAO,QAAQ,IAAI,KAAK,IAAS,MAAM,KAAU,OAAO,IAAI,SAAS,IAAS,KAAK,KAAU,MAAM,IAAS,QAAQ,IAAI,KAAK,IAAS,MAAM,KAAU,OAAO,IAAO,MAAM,IAAI,OAAO,IAAO,SAAS,IAAS,QAAQ,IAAS,KAAK,IAAS,SAAS,IAAS,QAAQ,IAAS,QAAQ,IAAS,SAAS,IAAS,SAAS,IAAS,OAAO,IAAS,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,MAAM,KAAe,OAAO,IAAS,SAAS,IAAS,SAAS,IAAS,MAAM,IAAS,OAAO,IAAS,MAAM,IAAS,OAAO,IAAS,MAAM,IAAS,KAAK,IAAS,MAAM,KAAe,OAAO,IAAS,MAAM,KAAe,OAAO,IAAS,MAAM,IAAS,MAAM,IAAS,OAAO,IAAS,OAAO,IAAS,OAAO,IAAS,SAAS,IAAS,UAAU,IAAS,QAAQ,IAAS,WAAW,IAAS,WAAW,IAAS,SAAS,IAAS,SAAS,IAAS,QAAQ,IAAS,QAAQ,IAAS,SAAS,IAAS,QAAQ,IAAS,SAAS,IAAS,MAAM,IAAS,OAAO,KAAe,QAAQ,IAAS,OAAO,KAAe,OAAO,IAAS,KAAK,KAAe,MAAM,IAAS,MAAM,IAAS,KAAK,IAAS,OAAO,KAAe,QAAQ,IAAS,OAAO,IAAS,QAAQ,IAAS,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,KAAK,IAAS,MAAM,IAAS,MAAM,IAAS,OAAO,KAAe,QAAQ,IAAS,QAAQ,IAAS,SAAS,IAAS,YAAY,KAAe,OAAO,IAAS,OAAO,KAAe,QAAQ,IAAS,QAAQ,KAAe,SAAS,IAAS,QAAQ,KAAe,QAAQ,IAAS,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,SAAS,IAAS,SAAS,IAAS,OAAO,IAAS,OAAO,IAAS,SAAS,IAAS,QAAQ,IAAS,OAAO,IAAS,SAAS,IAAS,QAAQ,IAAS,SAAS,KAAe,UAAU,IAAS,KAAK,IAAS,MAAM,KAAe,OAAO,IAAS,KAAK,IAAS,MAAM,KAAe,OAAO,IAAS,KAAK,KAAe,MAAM,IAAS,KAAK,KAAe,MAAM,KAAe,OAAO,IAAS,MAAM,IAAS,MAAM,KAAe,OAAO,IAAS,KAAK,KAAe,OAAO,KAAe,MAAM,IAAS,KAAK,KAAe,OAAO,KAAe,MAAM,IAAS,QAAQ,IAAS,OAAO,IAAS,QAAQ,IAAS,OAAO,IAAS,QAAQ,IAAS,KAAK,IAAS,OAAO,IAAS,KAAK,IAAS,OAAO,IAAS,KAAK,IAAS,MAAM,IAAS,KAAK,IAAS,MAAM,IAAS,QAAQ,IAAS,SAAS,IAAS,QAAQ,IAAS,SAAS,IAAS,QAAQ,IAAS,QAAQ,KAAe,mBAAmB,IAAS,MAAM,IAAS,OAAO,KAAe,QAAQ,IAAS,MAAM,IAAS,OAAO,KAAe,QAAQ,IAAS,OAAO,IAAS,QAAQ,IAAS,OAAO,IAAS,QAAQ,KAAe,SAAS,IAAS,QAAQ,KAAe,SAAS,IAAS,QAAQ,IAAS,SAAS,IAAS,QAAQ,IAAS,QAAQ,KAAe,kBAAkB,IAAS,QAAQ,KAAe,oBAAoB,IAAS,SAAS,IAAS,UAAU,IAAS,SAAS,IAAS,UAAU,IAAS,QAAQ,KAAe,SAAS,IAAS,QAAQ,KAAe,SAAS,IAAS,QAAQ,IAAS,SAAS,IAAS,SAAS,IAAS,OAAO,IAAS,OAAO,IAAS,OAAO,IAAS,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,SAAS,IAAS,SAAS,IAAS,QAAQ,IAAS,QAAQ,IAAS,SAAS,IAAS,QAAQ,IAAS,MAAM,IAAS,MAAM,IAAS,SAAS,IAAS,QAAQ,IAAS,SAAS,IAAS,QAAQ,IAAS,SAAS,IAAS,SAAS,IAAS,QAAQ,IAAS,SAAS,IAAS,SAAS,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,SAAS,KAAe,UAAU,IAAS,QAAQ,IAAS,SAAS,KAAe,UAAU,IAAS,SAAS,IAAS,OAAO,IAAS,QAAQ,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,UAAU,IAAS,QAAQ,IAAS,QAAQ,IAAS,MAAM,IAAS,OAAO,IAAS,OAAO,IAAS,OAAO,IAAS,OAAO,IAAS,OAAO,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,MAAM,IAAS,MAAM,IAAS,MAAM,IAAS,MAAM,IAAS,OAAO,IAAS,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,KAAK,KAAe,MAAM,IAAS,KAAK,KAAe,MAAM,KAAe,OAAO,IAAS,MAAM,IAAS,MAAM,KAAe,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,SAAS,IAAS,QAAQ,IAAS,UAAU,KAAe,WAAW,IAAS,UAAU,IAAS,UAAU,IAAS,QAAQ,KAAe,SAAS,IAAS,OAAO,IAAS,OAAO,IAAS,MAAM,IAAS,UAAU,IAAS,UAAU,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,OAAO,IAAS,WAAW,IAAS,WAAW,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,QAAQ,IAAS,QAAQ,IAAS,SAAS,IAAS,WAAW,IAAS,SAAS,IAAS,QAAQ,IAAS,SAAS,IAAS,UAAU,IAAS,SAAS,IAAS,SAAS,IAAS,OAAO,IAAS,OAAO,IAAS,WAAW,IAAS,kBAAkB,IAAS,mBAAmB,IAAS,YAAY,IAAS,aAAa,IAAS,WAAW,IAAS,WAAW,IAAS,QAAQ,IAAS,OAAO,IAAS,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,OAAO,IAAS,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,MAAM,IAAS,OAAO,IAAS,uBAAuB,IAAS,OAAO,IAAS,SAAS,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,OAAO,IAAS,QAAQ,IAAS,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,OAAO,IAAS,QAAQ,IAAS,OAAO,IAAS,MAAM,IAAS,MAAM,IAAS,SAAS,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,mBAAmB,IAAS,oBAAoB,IAAS,QAAQ,IAAS,OAAO,IAAS,QAAQ,IAAS,SAAS,IAAS,OAAO,IAAS,SAAS,IAAS,QAAQ,IAAS,SAAS,IAAS,QAAQ,IAAS,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,OAAO,IAAS,OAAO,IAAS,oBAAoB,IAAS,WAAW,IAAS,UAAU,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,OAAO,IAAS,WAAW,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,MAAM,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,WAAW,IAAS,aAAa,IAAS,eAAe,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,UAAU,IAAS,UAAU,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,OAAO,IAAS,OAAO,IAAS,SAAS,IAAS,QAAQ,KAAe,SAAS,IAAS,UAAU,IAAS,OAAO,IAAS,OAAO,IAAS,UAAU,IAAS,SAAS,IAAS,UAAU,IAAS,UAAU,IAAS,SAAS,IAAS,UAAU,IAAS,WAAW,IAAS,WAAW,IAAS,WAAW,IAAS,kBAAkB,IAAS,oBAAoB,IAAS,sBAAsB,IAAS,mBAAmB,IAAS,gBAAgB,IAAS,iBAAiB,IAAS,mBAAmB,IAAS,qBAAqB,IAAS,oBAAoB,IAAS,qBAAqB,IAAS,kBAAkB,IAAS,oBAAoB,IAAS,gBAAgB,IAAS,iBAAiB,IAAS,mBAAmB,IAAS,qBAAqB,IAAS,oBAAoB,IAAS,qBAAqB,IAAS,kBAAkB,IAAS,oBAAoB,IAAS,OAAO,IAAS,OAAO,IAAS,OAAO,IAAS,OAAO,IAAS,UAAU,IAAS,UAAU,IAAS,UAAU,IAAS,UAAU,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,QAAQ,IAAS,QAAQ,IAAS,eAAe,IAAS,QAAQ,IAAS,UAAU,IAAS,UAAU,IAAS,UAAU,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,UAAU,IAAS,UAAU,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,UAAU,IAAS,SAAS,IAAS,WAAW,IAAS,OAAO,IAAS,QAAQ,IAAS,UAAU,IAAS,UAAU,IAAS,WAAW,IAAS,WAAW,IAAS,WAAW,IAAS,WAAW,IAAS,WAAW,IAAS,WAAW,IAAS,WAAW,IAAS,WAAW,IAAS,UAAU,IAAS,UAAU,IAAS,UAAU,IAAS,WAAW,IAAS,WAAW,IAAS,QAAQ,IAAS,OAAO,IAAS,OAAO,IAAS,QAAQ,IAAS,UAAU,IAAS,SAAS,IAAS,QAAQ,IAAS,QAAQ,IAAS,MAAM,IAAS,MAAM,IAAS,UAAU,IAAS,OAAO,IAAS,OAAO,IAAS,QAAQ,IAAS,SAAS,IAAS,QAAQ,IAAS,WAAW,IAAS,kBAAkB,KAAe,qBAAqB,IAAS,mBAAmB,KAAe,sBAAsB,IAAS,SAAS,IAAS,WAAW,IAAS,UAAU,IAAS,SAAS,IAAS,WAAW,IAAS,WAAW,IAAS,OAAO,IAAS,cAAc,IAAS,OAAO,IAAS,QAAQ,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,WAAW,IAAS,WAAW,IAAS,QAAQ,IAAS,WAAW,IAAS,WAAW,IAAS,UAAU,IAAS,WAAW,IAAS,UAAU,IAAS,WAAW,IAAS,UAAU,IAAS,WAAW,IAAS,UAAU,IAAS,SAAS,IAAS,UAAU,IAAS,UAAU,IAAS,SAAS,IAAS,UAAU,IAAS,SAAS,IAAS,SAAS,IAAS,QAAQ,IAAS,SAAS,IAAS,WAAW,IAAS,SAAS,IAAS,UAAU,IAAS,UAAU,IAAS,WAAW,IAAS,SAAS,IAAS,OAAO,IAAS,UAAU,IAAS,WAAW,IAAS,UAAU,IAAS,QAAQ,IAAS,QAAQ,IAAS,SAAS,IAAS,OAAO,IAAS,OAAO,IAAS,SAAS,IAAS,QAAQ,IAAS,SAAS,IAAS,SAAS,IAAS,WAAW,IAAS,WAAW,IAAS,SAAS,IAAS,SAAS,IAAS,QAAQ,IAAS,QAAQ,IAAS,UAAU,IAAS,MAAM,IAAS,KAAK,IAAS,SAAS,IAAS,OAAO,IAAS,UAAU,IAAS,WAAW,IAAS,OAAO,IAAS,MAAM,IAAS,OAAO,IAAS,MAAM,IAAS,SAAS,IAAS,QAAQ,IAAS,SAAS,IAAS,UAAU,KAAe,WAAW,IAAS,SAAS,IAAS,SAAS,IAAS,MAAM,KAAe,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,OAAO,IAAS,QAAQ,IAAS,UAAU,IAAS,QAAQ,IAAS,QAAQ,IAAS,UAAU,IAAS,UAAU,IAAS,MAAM,KAAe,OAAO,IAAS,MAAM,KAAe,OAAO,IAAS,SAAS,IAAS,SAAS,IAAS,UAAU,IAAS,UAAU,IAAS,WAAW,IAAS,WAAW,IAAS,MAAM,IAAS,MAAM,IAAS,MAAM,IAAS,MAAM,IAAS,OAAO,IAAS,OAAO,IAAS,MAAM,IAAS,MAAM,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,MAAM,IAAS,MAAM,IAAS,SAAS,IAAS,SAAS,IAAS,MAAM,IAAS,MAAM,IAAS,SAAS,IAAS,SAAS,IAAS,KAAK,IAAS,KAAK,IAAS,OAAO,IAAS,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,WAAW,KAAe,oBAAoB,IAAS,iBAAiB,KAAe,0BAA0B,IAAS,MAAM,IAAS,MAAM,IAAS,OAAO,IAAS,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,MAAM,IAAS,MAAM,IAAS,OAAO,KAAe,QAAQ,IAAS,OAAO,KAAe,QAAQ,IAAS,QAAQ,IAAS,MAAM,KAAe,OAAO,IAAS,MAAM,KAAe,OAAO,IAAS,MAAM,IAAS,MAAM,IAAS,OAAO,IAAS,OAAO,IAAS,OAAO,IAAS,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,KAAK,IAAS,KAAK,IAAS,SAAS,IAAS,SAAS,IAAS,UAAU,IAAS,UAAU,IAAS,UAAU,IAAS,UAAU,IAAS,UAAU,IAAS,UAAU,IAAS,OAAO,KAAe,QAAQ,IAAS,OAAO,KAAe,QAAQ,IAAS,SAAS,IAAS,SAAS,KAAe,SAAS,IAAS,QAAQ,KAAe,SAAS,IAAS,QAAQ,IAAS,OAAO,IAAS,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,UAAU,IAAS,UAAU,IAAS,QAAQ,IAAS,UAAU,IAAS,OAAO,IAAS,QAAQ,IAAS,SAAS,IAAS,OAAO,IAAS,OAAO,IAAS,QAAQ,IAAS,OAAO,IAAS,MAAM,IAAS,OAAO,IAAS,QAAQ,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,QAAQ,IAAS,SAAS,IAAS,QAAQ,KAAe,SAAS,IAAS,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAO,SAAS,IAAO,OAAO,EAAI,SAAS,IAAO,QAAQ,IAAO,MAAM,IAAS,OAAO,IAAO,OAAO,IAAO,OAAO,IAAS,SAAS,IAAO,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAO,OAAO,IAAS,SAAS,IAAS,SAAS,IAAO,OAAO,IAAO,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,EAAO,OAAO,EAAO,SAAS,EAAO,SAAS,EAAO,SAAS,EAAO,SAAS,EAAS,SAAS,EAAS,SAAS,EAAO,QAAQ,EAAO,QAAQ,EAAO,QAAQ,EAAO,QAAQ,EAAO,OAAO,EAAO,OAAO,EAAO,SAAS,EAAO,SAAS,EAAS,QAAQ,EAAS,QAAQ,EAAS,QAAQ,EAAS,QAAQ,EAAO,QAAQ,EAAO,QAAQ,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,EAAS,OAAO,KAAe,MAAM,KAAe,MAAM,KAAe,OAAO,KAAe,OAAO,EAAS,MAAM,KAAe,OAAO,EAAS,OAAO,EAAS,SAAS,EAAS,SAAS,EAAS,QAAQ,EAAS,QAAQ,EAAS,SAAS,EAAS,SAAS,EAAS,OAAO,EAAS,OAAO,EAAO,SAAS,EAAO,SAAS,IAAS,SAAS,KAAe,MAAM,IAAS,KAAK,KAAe,OAAO,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,IAAS,KAAK,KAAe,OAAO,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAO,MAAM,EAAO,MAAM,IAAS,KAAK,EAAS,OAAO,KAAe,MAAM,KAAe,OAAO,EAAS,OAAO,KAAe,MAAM,KAAe,OAAO,EAAO,SAAS,EAAO,SAAS,EAAO,SAAS,EAAO,SAAS,EAAO,QAAQ,EAAO,QAAQ,EAAS,SAAS,EAAS,SAAS,EAAO,OAAO,EAAO,OAAO,EAAS,OAAO,EAAS,OAAO,EAAS,QAAQ,EAAS,QAAQ,EAAS,QAAQ,EAAS,QAAQ,KAAe,MAAM,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,EAAS,OAAO,EAAS,QAAQ,EAAS,SAAS,EAAS,SAAS,EAAS,QAAQ,GAAK,QAAQ,EAAS,QAAQ,EAAS,OAAO,EAAS,OAAO,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,QAAQ,EAAS,QAAQ,EAAS,OAAO,EAAS,OAAO,EAAS,SAAS,KAAe,MAAM,EAAS,UAAU,KAAe,OAAO,KAAe,OAAO,EAAS,OAAO,EAAS,MAAM,EAAS,OAAO,EAAS,QAAQ,EAAS,QAAQ,EAAS,OAAO,EAAS,SAAS,EAAS,SAAS,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,IAAS,KAAK,KAAe,OAAO,EAAS,OAAO,EAAS,KAAK,EAAO,SAAS,EAAO,SAAS,EAAO,SAAS,EAAO,SAAS,EAAO,QAAQ,EAAO,QAAQ,EAAO,OAAO,EAAO,OAAO,EAAS,SAAS,EAAS,SAAS,EAAS,OAAO,EAAS,QAAQ,EAAS,QAAQ,EAAS,QAAQ,EAAS,QAAQ,EAAS,QAAQ,EAAS,QAAQ,EAAS,QAAQ,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,EAAS,QAAQ,EAAS,QAAQ,IAAS,QAAQ,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,EAAS,SAAS,EAAS,SAAS,KAAe,MAAM,KAAe,OAAO,EAAS,MAAM,KAAe,OAAO,EAAS,OAAO,KAAe,MAAM,KAAe,OAAO,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,KAAe,MAAM,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,EAAS,OAAO,KAAe,MAAM,KAAe,OAAO,KAAe,OAAO,EAAS,OAAO,KAAe,OAAO,KAAe,MAAM,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAO,SAAS,EAAO,SAAS,EAAS,SAAS,EAAS,SAAS,IAAS,SAAS,EAAS,MAAM,EAAS,MAAM,KAAe,OAAO,KAAe,MAAM,EAAS,OAAO,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,EAAO,OAAO,EAAO,SAAS,EAAO,SAAS,EAAO,SAAS,EAAO,SAAS,EAAO,QAAQ,EAAO,QAAQ,EAAO,OAAO,EAAO,OAAO,EAAS,SAAS,EAAS,SAAS,EAAO,SAAS,EAAO,SAAS,EAAO,SAAS,EAAO,SAAS,EAAS,QAAQ,EAAS,QAAQ,EAAS,QAAQ,EAAS,QAAQ,KAAe,MAAM,KAAe,OAAO,KAAe,OAAO,EAAS,OAAO,KAAe,MAAM,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,EAAS,OAAO,EAAS,SAAS,KAAe,MAAM,KAAe,OAAO,KAAe,OAAO,EAAS,OAAO,EAAS,KAAK,EAAS,OAAO,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,IAAS,KAAK,EAAS,SAAS,EAAS,SAAS,EAAS,QAAQ,EAAS,QAAQ,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAO,QAAQ,KAAe,MAAM,KAAe,OAAO,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,EAAS,SAAS,IAAS,QAAQ,EAAS,SAAS,EAAS,SAAS,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,EAAO,SAAS,EAAO,SAA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","x_google_ignoreList":[0]}
\ No newline at end of file
diff --git a/js/FaceMergeForm-jH2ieXCc.chunk.mjs b/js/FaceMergeForm-CjFfdbB1.chunk.mjs
similarity index 89%
rename from js/FaceMergeForm-jH2ieXCc.chunk.mjs
rename to js/FaceMergeForm-CjFfdbB1.chunk.mjs
index b4eccd19e4..cead51077b 100644
--- a/js/FaceMergeForm-jH2ieXCc.chunk.mjs
+++ b/js/FaceMergeForm-CjFfdbB1.chunk.mjs
@@ -1,2 +1,2 @@
-import{a,F as r,b as i}from"./FaceCover-3afTUpDo.chunk.mjs";import{n}from"./icons-BPrPKxzl.chunk.mjs";const c={name:"FaceMergeForm",components:{FaceCover:i},mixins:[a,r],props:{firstFace:{type:String,required:!0}},data(){return{loading:!1}},computed:{files(){return this.$store.state.files.files},faces(){return this.$store.state.faces.faces},facesFiles(){return this.$store.getters.facesFiles},filteredFaces(){return Object.values(this.faces).filter(e=>e.basename!==this.firstFace).sort((e,s)=>e.attributes.nbItems&&s.attributes.nbItems?s.attributes.nbItems-e.attributes.nbItems:!this.facesFiles[s.basename]||!this.facesFiles[e.basename]?0:this.facesFiles[s.basename].length-this.facesFiles[e.basename].length)}},methods:{handleSelect(e){this.$emit("select",e),this.loading=!0}}};var l=function(){var e=this,s=e._self._c;return s("div",{staticClass:"merge-form face-list"},e._l(e.filteredFaces,function(t){return s("FaceCover",{key:t.basename,attrs:{"base-name":t.basename,small:""},on:{click:function(m){return e.handleSelect(t.basename)}}})}),1)},o=[],f=n(c,l,o,!1,null,"b48e014f");const h=f.exports;export{h as F};
-//# sourceMappingURL=FaceMergeForm-jH2ieXCc.chunk.mjs.map
+import{a,F as r,b as i}from"./FaceCover-CwQK1LWo.chunk.mjs";import{n}from"./icons-BPrPKxzl.chunk.mjs";const c={name:"FaceMergeForm",components:{FaceCover:i},mixins:[a,r],props:{firstFace:{type:String,required:!0}},data(){return{loading:!1}},computed:{files(){return this.$store.state.files.files},faces(){return this.$store.state.faces.faces},facesFiles(){return this.$store.getters.facesFiles},filteredFaces(){return Object.values(this.faces).filter(e=>e.basename!==this.firstFace).sort((e,s)=>e.attributes.nbItems&&s.attributes.nbItems?s.attributes.nbItems-e.attributes.nbItems:!this.facesFiles[s.basename]||!this.facesFiles[e.basename]?0:this.facesFiles[s.basename].length-this.facesFiles[e.basename].length)}},methods:{handleSelect(e){this.$emit("select",e),this.loading=!0}}};var l=function(){var e=this,s=e._self._c;return s("div",{staticClass:"merge-form face-list"},e._l(e.filteredFaces,function(t){return s("FaceCover",{key:t.basename,attrs:{"base-name":t.basename,small:""},on:{click:function(m){return e.handleSelect(t.basename)}}})}),1)},o=[],f=n(c,l,o,!1,null,"b48e014f");const h=f.exports;export{h as F};
+//# sourceMappingURL=FaceMergeForm-CjFfdbB1.chunk.mjs.map
diff --git a/js/FaceMergeForm-jH2ieXCc.chunk.mjs.license b/js/FaceMergeForm-CjFfdbB1.chunk.mjs.license
similarity index 100%
rename from js/FaceMergeForm-jH2ieXCc.chunk.mjs.license
rename to js/FaceMergeForm-CjFfdbB1.chunk.mjs.license
diff --git a/js/FaceMergeForm-jH2ieXCc.chunk.mjs.map b/js/FaceMergeForm-CjFfdbB1.chunk.mjs.map
similarity index 97%
rename from js/FaceMergeForm-jH2ieXCc.chunk.mjs.map
rename to js/FaceMergeForm-CjFfdbB1.chunk.mjs.map
index 90f00ab443..dc668b171a 100644
--- a/js/FaceMergeForm-jH2ieXCc.chunk.mjs.map
+++ b/js/FaceMergeForm-CjFfdbB1.chunk.mjs.map
@@ -1 +1 @@
-{"version":3,"file":"FaceMergeForm-jH2ieXCc.chunk.mjs","sources":["../src/components/Faces/FaceMergeForm.vue"],"sourcesContent":["\n\n\t
\n\t\t\n\t
\n\n\n\n\n\n"],"names":["_sfc_main","FaceCover","FaceCoverMixin","FetchFacesMixin","face","a","b","faceName"],"mappings":"sGAoBA,MAAAA,EAAA,CACA,KAAA,gBACA,WAAA,CAAA,UAAAC,CAAA,EACA,OAAA,CACAC,EACAC,CAAA,EAGA,MAAA,CACA,UAAA,CACA,KAAA,OACA,SAAA,EAAA,CACA,EAGA,MAAA,CACA,MAAA,CACA,QAAA,EAAA,CAEA,EAEA,SAAA,CACA,OAAA,CACA,OAAA,KAAA,OAAA,MAAA,MAAA,KACA,EAEA,OAAA,CACA,OAAA,KAAA,OAAA,MAAA,MAAA,KACA,EAEA,YAAA,CACA,OAAA,KAAA,OAAA,QAAA,UACA,EAEA,eAAA,CACA,OAAA,OAAA,OAAA,KAAA,KAAA,EACA,OAAAC,GAAAA,EAAA,WAAA,KAAA,SAAA,EACA,KAAA,CAAAC,EAAAC,IACAD,EAAA,WAAA,SAAAC,EAAA,WAAA,QACAA,EAAA,WAAA,QAAAD,EAAA,WAAA,QAEA,CAAA,KAAA,WAAAC,EAAA,QAAA,GAAA,CAAA,KAAA,WAAAD,EAAA,QAAA,EACA,EAEA,KAAA,WAAAC,EAAA,QAAA,EAAA,OAAA,KAAA,WAAAD,EAAA,QAAA,EAAA,MACA,CACA,CAAA,EAGA,QAAA,CACA,aAAAE,EAAA,CACA,KAAA,MAAA,SAAAA,CAAA,EACA,KAAA,QAAA,EACA,CAAA,CAEA"}
\ No newline at end of file
+{"version":3,"file":"FaceMergeForm-CjFfdbB1.chunk.mjs","sources":["../src/components/Faces/FaceMergeForm.vue"],"sourcesContent":["\n\n\t
\n\t\t\n\t
\n\n\n\n\n\n"],"names":["_sfc_main","FaceCover","FaceCoverMixin","FetchFacesMixin","face","a","b","faceName"],"mappings":"sGAoBA,MAAAA,EAAA,CACA,KAAA,gBACA,WAAA,CAAA,UAAAC,CAAA,EACA,OAAA,CACAC,EACAC,CAAA,EAGA,MAAA,CACA,UAAA,CACA,KAAA,OACA,SAAA,EAAA,CACA,EAGA,MAAA,CACA,MAAA,CACA,QAAA,EAAA,CAEA,EAEA,SAAA,CACA,OAAA,CACA,OAAA,KAAA,OAAA,MAAA,MAAA,KACA,EAEA,OAAA,CACA,OAAA,KAAA,OAAA,MAAA,MAAA,KACA,EAEA,YAAA,CACA,OAAA,KAAA,OAAA,QAAA,UACA,EAEA,eAAA,CACA,OAAA,OAAA,OAAA,KAAA,KAAA,EACA,OAAAC,GAAAA,EAAA,WAAA,KAAA,SAAA,EACA,KAAA,CAAAC,EAAAC,IACAD,EAAA,WAAA,SAAAC,EAAA,WAAA,QACAA,EAAA,WAAA,QAAAD,EAAA,WAAA,QAEA,CAAA,KAAA,WAAAC,EAAA,QAAA,GAAA,CAAA,KAAA,WAAAD,EAAA,QAAA,EACA,EAEA,KAAA,WAAAC,EAAA,QAAA,EAAA,OAAA,KAAA,WAAAD,EAAA,QAAA,EAAA,MACA,CACA,CAAA,EAGA,QAAA,CACA,aAAAE,EAAA,CACA,KAAA,MAAA,SAAAA,CAAA,EACA,KAAA,QAAA,EACA,CAAA,CAEA"}
\ No newline at end of file
diff --git a/js/FacesView-CFu4Sz2m.chunk.mjs b/js/FacesView-C3d2jLrb.chunk.mjs
similarity index 90%
rename from js/FacesView-CFu4Sz2m.chunk.mjs
rename to js/FacesView-C3d2jLrb.chunk.mjs
index 3e047cab5c..7a1fdd86a9 100644
--- a/js/FacesView-CFu4Sz2m.chunk.mjs
+++ b/js/FacesView-C3d2jLrb.chunk.mjs
@@ -1,2 +1,2 @@
-import{h as a,t as i}from"./preload-helper-iHri5ttz.chunk.mjs";import{L as c}from"./video-B7iCXJqN.chunk.mjs";import{N as r}from"./NcEmptyContent-BkpeWiV5.chunk.mjs";import{z as l}from"./index-6_vkf3an.chunk.mjs";import{m as u,n,h as m}from"./icons-BPrPKxzl.chunk.mjs";import{F as o,a as d,b as f}from"./FaceCover-3afTUpDo.chunk.mjs";import"./index-DjIio1qt.chunk.mjs";import"./createElementId-DhjFt1I9-B2HCdIOx.chunk.mjs";import"./AbortControllerMixin-CCU9Utyn.chunk.mjs";const p={name:"UnassignedFacesCover",components:{AccountOffOutlineIcon:u},mixins:[o,d],props:{small:{type:Boolean,default:!1}},computed:{unassignedFilesCount(){return this.$store.state.faces.unassignedFilesCount},colorMainBackground(){return getComputedStyle(document.documentElement).getPropertyValue("--color-main-background")}},async mounted(){await this.fetchUnassignedFacesCount()},methods:{n:a}};var h=function(){var e=this,s=e._self._c;return s("div",{staticClass:"face-cover",class:[e.small&&"face-cover--small"],on:{click:function(t){return e.$emit("click")}}},[s("div",{staticClass:"face-cover__crop-container"},[s("AccountOffOutlineIcon",{attrs:{size:128,"fill-color":e.colorMainBackground}})],1),s("div",{staticClass:"face-cover__details"},[e.small?e._e():s("div",{staticClass:"face-cover__details__second-line"},[e._v(" "+e._s(e.n("photos","%n unassigned photo","%n unassigned photos",e.unassignedFilesCount))+" ")])])])},g=[],_=n(p,h,g,!1,null,"80561ccf");const F=_.exports,v={name:"FacesView",components:{UnassignedFacesCover:F,FaceCover:f,NcEmptyContent:r,NcLoadingIcon:l,RouterLink:c,AccountBoxMultipleOutline:m},mixins:[o],computed:{facesFiles(){return this.$store.state.faces.facesFiles},unassignedFilesCount(){return this.$store.state.faces.unassignedFilesCount},noFaces(){return Object.keys(this.faces).length===0},orderedFaces(){return Object.values(this.faces).sort((e,s)=>e.attributes.nbItems&&s.attributes.nbItems?s.attributes.nbItems-e.attributes.nbItems:!this.facesFiles[s.basename]||!this.facesFiles[e.basename]?0:this.facesFiles[s.basename].length-this.facesFiles[e.basename].length)}},methods:{t:i}};var C=function(){var e=this,s=e._self._c;return e.errorFetchingFaces?s("NcEmptyContent",[e._v(" "+e._s(e.t("photos","An error occurred"))+" ")]):s("div",{staticClass:"faces"},[e.loadingFaces?s("NcLoadingIcon"):e._e(),e.noFaces&&!e.loadingFaces?s("div",{staticClass:"faces__empty"},[s("NcEmptyContent",{staticClass:"empty-content-with-illustration",scopedSlots:e._u([{key:"icon",fn:function(){return[s("AccountBoxMultipleOutline")]},proxy:!0},{key:"desc",fn:function(){return[e._v(" "+e._s(e.t("photos","This might take some time depending on the size of your photo library."))+" ")]},proxy:!0}],null,!1,149048332)},[e._v(" "+e._s(e.t("photos","Recognized people will show up here"))+" ")])],1):e.noFaces?e._e():s("div",{staticClass:"faces__list"},[e._l(e.orderedFaces,function(t){return s("RouterLink",{key:t.basename,attrs:{to:`/faces/${encodeURIComponent(t.basename)}`}},[s("FaceCover",{attrs:{"base-name":t.basename}})],1)}),s("RouterLink",{key:"unassigned",attrs:{to:"/faces/unassigned"}},[s("UnassignedFacesCover")],1)],2)],1)},b=[],y=n(v,C,b,!1,null,"d27b108f");const B=y.exports;export{B as default};
-//# sourceMappingURL=FacesView-CFu4Sz2m.chunk.mjs.map
+import{h as a,t as i}from"./preload-helper-iHri5ttz.chunk.mjs";import{L as c}from"./video-CFxEyJH4.chunk.mjs";import{N as r}from"./NcEmptyContent-BkpeWiV5.chunk.mjs";import{z as l}from"./index-6_vkf3an.chunk.mjs";import{m as u,n,h as m}from"./icons-BPrPKxzl.chunk.mjs";import{F as o,a as d,b as f}from"./FaceCover-CwQK1LWo.chunk.mjs";import"./index-DjIio1qt.chunk.mjs";import"./createElementId-DhjFt1I9-B2HCdIOx.chunk.mjs";import"./AbortControllerMixin-CCU9Utyn.chunk.mjs";const p={name:"UnassignedFacesCover",components:{AccountOffOutlineIcon:u},mixins:[o,d],props:{small:{type:Boolean,default:!1}},computed:{unassignedFilesCount(){return this.$store.state.faces.unassignedFilesCount},colorMainBackground(){return getComputedStyle(document.documentElement).getPropertyValue("--color-main-background")}},async mounted(){await this.fetchUnassignedFacesCount()},methods:{n:a}};var h=function(){var e=this,s=e._self._c;return s("div",{staticClass:"face-cover",class:[e.small&&"face-cover--small"],on:{click:function(t){return e.$emit("click")}}},[s("div",{staticClass:"face-cover__crop-container"},[s("AccountOffOutlineIcon",{attrs:{size:128,"fill-color":e.colorMainBackground}})],1),s("div",{staticClass:"face-cover__details"},[e.small?e._e():s("div",{staticClass:"face-cover__details__second-line"},[e._v(" "+e._s(e.n("photos","%n unassigned photo","%n unassigned photos",e.unassignedFilesCount))+" ")])])])},g=[],_=n(p,h,g,!1,null,"ef4bdf27");const F=_.exports,v={name:"FacesView",components:{UnassignedFacesCover:F,FaceCover:f,NcEmptyContent:r,NcLoadingIcon:l,RouterLink:c,AccountBoxMultipleOutline:m},mixins:[o],computed:{facesFiles(){return this.$store.state.faces.facesFiles},unassignedFilesCount(){return this.$store.state.faces.unassignedFilesCount},noFaces(){return Object.keys(this.faces).length===0},orderedFaces(){return Object.values(this.faces).sort((e,s)=>e.attributes.nbItems&&s.attributes.nbItems?s.attributes.nbItems-e.attributes.nbItems:!this.facesFiles[s.basename]||!this.facesFiles[e.basename]?0:this.facesFiles[s.basename].length-this.facesFiles[e.basename].length)}},methods:{t:i}};var C=function(){var e=this,s=e._self._c;return e.errorFetchingFaces?s("NcEmptyContent",[e._v(" "+e._s(e.t("photos","An error occurred"))+" ")]):s("div",{staticClass:"faces"},[e.loadingFaces?s("NcLoadingIcon"):e._e(),e.noFaces&&!e.loadingFaces?s("div",{staticClass:"faces__empty"},[s("NcEmptyContent",{staticClass:"empty-content-with-illustration",scopedSlots:e._u([{key:"icon",fn:function(){return[s("AccountBoxMultipleOutline")]},proxy:!0},{key:"desc",fn:function(){return[e._v(" "+e._s(e.t("photos","This might take some time depending on the size of your photo library."))+" ")]},proxy:!0}],null,!1,149048332)},[e._v(" "+e._s(e.t("photos","Recognized people will show up here"))+" ")])],1):e.noFaces?e._e():s("div",{staticClass:"faces__list"},[e._l(e.orderedFaces,function(t){return s("RouterLink",{key:t.basename,attrs:{to:`/faces/${encodeURIComponent(t.basename)}`}},[s("FaceCover",{attrs:{"base-name":t.basename}})],1)}),s("RouterLink",{key:"unassigned",attrs:{to:"/faces/unassigned"}},[s("UnassignedFacesCover")],1)],2)],1)},b=[],y=n(v,C,b,!1,null,"d27b108f");const B=y.exports;export{B as default};
+//# sourceMappingURL=FacesView-C3d2jLrb.chunk.mjs.map
diff --git a/js/FacesView-CFu4Sz2m.chunk.mjs.license b/js/FacesView-C3d2jLrb.chunk.mjs.license
similarity index 100%
rename from js/FacesView-CFu4Sz2m.chunk.mjs.license
rename to js/FacesView-C3d2jLrb.chunk.mjs.license
diff --git a/js/FacesView-C3d2jLrb.chunk.mjs.map b/js/FacesView-C3d2jLrb.chunk.mjs.map
new file mode 100644
index 0000000000..6161c879ba
--- /dev/null
+++ b/js/FacesView-C3d2jLrb.chunk.mjs.map
@@ -0,0 +1 @@
+{"version":3,"file":"FacesView-C3d2jLrb.chunk.mjs","sources":["../src/components/Faces/UnassignedFacesCover.vue","../src/views/FacesView.vue"],"sourcesContent":["\n\n\n\t
\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t{{ t('photos', 'This might take some time depending on the size of your photo library.') }}\n\t\t\t\t\n\t\t\t\t{{ t('photos', 'Recognized people will show up here') }}\n\t\t\t\n\t\t
\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t{{ t('photos', 'This might take some time depending on the size of your photo library.') }}\n\t\t\t\t\n\t\t\t\t{{ t('photos', 'Recognized people will show up here') }}\n\t\t\t\n\t\t
\n\n\n\n\n\n"],"names":["__defProp","__defProps","__getOwnPropDescs","__getOwnPropSymbols","__hasOwnProp","__propIsEnum","__defNormalProp","obj","key","value","__spreadValues","a","b","prop","__spreadProps","_typeof","obj2","_defineProperty","_toConsumableArray","arr","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","i","arr2","iter","reflectionIsSupported","copyReflectionMetadata","to","from","forwardMetadata","propertyKey","metaKeys","metaKey","metadata","fakeArray","hasProto","createDecorator","factory","target","index","Ctor","options","isPrimitive","type","collectDataFromConstructor","vm","Component2","originalInit","_this","keys","key2","data","plainData","$internalHooks","componentFactory","proto","descriptor","decorators","fn","superProto","Super","Vue","Extended","forwardStaticMembers","shouldIgnore","Original","extendedDescriptor","superDescriptor","Component","needToProduceProvide","original","produceProvide","provide","rv","reactiveInjectKey","_loop_1","i2","this_1","inheritInjected","componentOptions","reflectMetadataIsSupported","applyMetadata","Prop","k","ProvideReactive","Watch","path","_a","deep","_b","immediate","handler","watch","getGridGapDefault","elementWidth","windowHeight","getColumnCountDefault","getWindowMarginDefault","getItemRatioHeightDefault","height","width","columnWidth","imageRatio","debugLog","condition","args","__defProp2","__getOwnPropDesc","__decorateClass","kind","result","decorator","VirtualGrid$1","scrollElement","oldScrollElement","error","windowBottom","bottomTrigger","windowSize","windowScroll","elementWindowOffset","elementSize","containerData","items","windowMargin","gridGap","columnCount","entries","item","imageWidth","configData","currentRowNumber","prevRowsTotalHeight","currentRowMaxHeight","columnShift","cells","entry","columnSpanRecompute","heightRecompute","distanceToRowStart","shiftedIndex","columnNumber","rowNumber","overlapNumber","overlapRatio","offset","totalHeight","layoutData","cellsToRender","firstRenderedRowNumber","firstRenderedRowOffset","cell","cellTop","cellBottom","windowTop","renderTop","renderBottom","totalGapSpace","renderData","element","rect","render","_vm","_h","_c","staticRenderFns","normalizeComponent","scriptExports","render2","staticRenderFns2","functionalTemplate","injectStyles","scopeId","moduleIdentifier","shadowMode","hook","originalRender","h","context","existing","__cssModules","__component__","__vue2_injectStyles","o","VirtualGrid","_sfc_main$3","t","generateUrl","legacyToViewerFileInfo","file","_sfc_main$2","FolderOutline","RouterLink","fileid","etag","prefix","getCurrentUser","getFolderContent","endpoint","list","axios","defaultRootPath","defaultRemoteURL","folder","folders","files","allowedMimes","_sfc_main$1","defineComponent","FolderTagPreview","AbortControllerMixin","previewFolderContent","previewFiles","id","firstChildFolder","filename","unPrefixedFileName","logger","sizes","getGridConfig","val","currentSize","size","GridConfigMixin","_sfc_main","HeaderNavigation","NcEmptyContent","NcLoadingIcon","UploadPicker","getUploader","Folder","parsePermissions","FolderComponent","FileLegacy","upload","relPath","node","fetchFile"],"mappings":"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","x_google_ignoreList":[0]}
\ No newline at end of file
diff --git a/js/FoldersView-C_fBOmEW.chunk.mjs b/js/FoldersView-QKtkg9q6.chunk.mjs
similarity index 98%
rename from js/FoldersView-C_fBOmEW.chunk.mjs
rename to js/FoldersView-QKtkg9q6.chunk.mjs
index 53ced9ae15..6e431a96ca 100644
--- a/js/FoldersView-C_fBOmEW.chunk.mjs
+++ b/js/FoldersView-QKtkg9q6.chunk.mjs
@@ -1,2 +1,2 @@
-import"./index-DjIio1qt.chunk.mjs";import{V as F,t as v,k as x,s as H,b as w,a0 as Z,a as V,$ as ee,a3 as te}from"./preload-helper-iHri5ttz.chunk.mjs";import{U as re,g as ie}from"./index-DPkUyJ8g-BELfZN9P.chunk.mjs";import{N as oe}from"./NcEmptyContent-BkpeWiV5.chunk.mjs";import{aa as T,T as ne,a as q,l as j,z as ae}from"./index-6_vkf3an.chunk.mjs";import{n as R,t as B}from"./icons-BPrPKxzl.chunk.mjs";import{L as se}from"./video-B7iCXJqN.chunk.mjs";import{A as K}from"./AbortControllerMixin-CCU9Utyn.chunk.mjs";import{H as le}from"./HeaderNavigation-6G2FmN95.chunk.mjs";import{f as de}from"./fileFetcher-p0a3IV9C.chunk.mjs";import"./index-CJ3jRDua.chunk.mjs";import"./index-BSfP607A.chunk.mjs";import"./useHotKey-CPjpPwsD.chunk.mjs";import"./NcActionButton-K4jUGMlW-Bs_jOwCM.chunk.mjs";import"./NcProgressBar-D7zYeXBH-Bj5rIFx5.chunk.mjs";import"./createElementId-DhjFt1I9-B2HCdIOx.chunk.mjs";var ce=Object.defineProperty,ue=Object.defineProperties,fe=Object.getOwnPropertyDescriptors,W=Object.getOwnPropertySymbols,he=Object.prototype.hasOwnProperty,pe=Object.prototype.propertyIsEnumerable,N=(e,t,r)=>t in e?ce(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,k=(e,t)=>{for(var r in t||(t={}))he.call(t,r)&&N(e,r,t[r]);if(W)for(var r of W(t))pe.call(t,r)&&N(e,r,t[r]);return e},I=(e,t)=>ue(e,fe(t));function _(e){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?_=function(t){return typeof t}:_=function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},_(e)}function me(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function ge(e){return we(e)||ye(e)||ve()}function we(e){if(Array.isArray(e)){for(var t=0,r=new Array(e.length);t1&&arguments[1]!==void 0?arguments[1]:{};t.name=t.name||e._componentTag||e.name;var r=e.prototype;Object.getOwnPropertyNames(r).forEach(function(n){if(n!=="constructor"){if($.indexOf(n)>-1){t[n]=r[n];return}var a=Object.getOwnPropertyDescriptor(r,n);a.value!==void 0?typeof a.value=="function"?(t.methods||(t.methods={}))[n]=a.value:(t.mixins||(t.mixins=[])).push({data:function(){return me({},n,a.value)}}):(a.get||a.set)&&((t.computed||(t.computed={}))[n]={get:a.get,set:a.set})}}),(t.mixins||(t.mixins=[])).push({data:function(){return je(this,e)}});var i=e.__decorators__;i&&(i.forEach(function(n){return n(t)}),delete e.__decorators__);var o=Object.getPrototypeOf(e.prototype),s=o instanceof F?o.constructor:F,l=s.extend(t);return Se(l,e,s),be()&&Ce(l,e),l}var Re={prototype:!0,arguments:!0,callee:!0,caller:!0};function Se(e,t,r){Object.getOwnPropertyNames(t).forEach(function(i){if(!Re[i]){var o=Object.getOwnPropertyDescriptor(e,i);if(!(o&&!o.configurable)){var s=Object.getOwnPropertyDescriptor(t,i);if(!_e){if(i==="cid")return;var l=Object.getOwnPropertyDescriptor(r,i);if(!Fe(s.value)&&l&&l.value===s.value)return}Object.defineProperty(e,i,s)}}})}function Y(e){return typeof e=="function"?A(e):function(t){return A(t,e)}}Y.registerHooks=function(e){$.push.apply($,ge(e))};function De(e){return typeof e!="function"||!e.managed&&!e.managedReactive}function Le(e){var t=function(){var r=this,i=typeof e=="function"?e.call(this):e;i=Object.create(i||null),i[y]=Object.create(this[y]||{});for(var o in t.managed)i[t.managed[o]]=this[o];var s=function(n){i[t.managedReactive[n]]=l[n],Object.defineProperty(i[y],t.managedReactive[n],{enumerable:!0,configurable:!0,get:function(){return r[n]}})},l=this;for(var o in t.managedReactive)s(o);return i};return t.managed={},t.managedReactive={},t}var y="__reactiveInject__";function $e(e){Array.isArray(e.inject)||(e.inject=e.inject||{},e.inject[y]={from:y,default:{}})}var xe=typeof Reflect<"u"&&typeof Reflect.getMetadata<"u";function Ee(e,t,r){if(xe&&!Array.isArray(e)&&typeof e!="function"&&!e.hasOwnProperty("type")&&typeof e.type>"u"){var i=Reflect.getMetadata("design:type",t,r);i!==Object&&(e.type=i)}}function h(e){return e===void 0&&(e={}),function(t,r){Ee(e,t,r),E(function(i,o){(i.props||(i.props={}))[o]=e})(t,r)}}function b(e){return E(function(t,r){var i=t.provide;$e(t),De(i)&&(i=t.provide=Le(i)),i.managedReactive[r]=r})}function ze(e,t){t===void 0&&(t={});var r=t.deep,i=r===void 0?!1:r,o=t.immediate,s=o===void 0?!1:o;return E(function(l,n){typeof l.watch!="object"&&(l.watch=Object.create(null));var a=l.watch;typeof a[e]=="object"&&!Array.isArray(a[e])?a[e]=[a[e]]:typeof a[e]>"u"&&(a[e]=[]),a[e].push({handler:n,deep:i,immediate:s})})}const Me=(e,t)=>e>720&&t>480?10:5,Pe=e=>Math.floor(e/250),Te=e=>Math.round(e*1.5),We=(e,t,r)=>{const i=e/t;return Math.round(r*i)},G=(e,...t)=>{e&&console.debug(...t)};var Ne=Object.defineProperty,ke=Object.getOwnPropertyDescriptor,u=(e,t,r,i)=>{for(var o=i>1?void 0:i?ke(t,r):t,s=e.length-1,l;s>=0;s--)(l=e[s])&&(o=(i?l(t,r,o):l(o))||o);return i&&o&&Ne(t,r,o),o};let c=class extends F{constructor(){super(...arguments),this.updateLock=!1,this.bottomReached=!1,this.ref=null,this.containerData={windowSize:{height:0,width:0},windowScroll:{x:0,y:0},elementWindowOffset:0,elementSize:{height:0,width:0}}}get loadingBatch(){return this.loader&&this.updateLock}get configData(){return this.computeConfigData(this.containerData,this.items)}get layoutData(){return this.computeLayoutData(this.configData)}get renderData(){return this.computeRenderData(this.configData,this.containerData,this.layoutData)}mounted(){var e;this.ref=this.$refs.virtualGrid,this.initiliazeGrid(),window.addEventListener("resize",this.resize),((e=this.scrollElement)!=null?e:window).addEventListener("scroll",this.scroll)}beforeDestroy(){var e;window.removeEventListener("resize",this.resize),((e=this.scrollElement)!=null?e:window).removeEventListener("scroll",this.scroll)}onScrollElementChanged(e,t){(t??window).removeEventListener("scroll",this.scroll),(e??window).addEventListener("scroll",this.scroll)}resize(){this.loadMoreData()}scroll(){this.loadMoreData()}initiliazeGrid(){this.computeContainerData(),this.$nextTick(async()=>{this.loadMoreData()})}loadMoreData(){this.loadMoreDataAsync().catch(e=>{e&&console.error("Fail to load next data batch",e)}).then()}async loadMoreDataAsync(){this.computeContainerData();const e=this.containerData.windowScroll.y+this.containerData.windowSize.height,t=Math.max(0,this.containerData.elementWindowOffset+this.containerData.elementSize.height-this.updateTriggerMargin);!this.bottomReached&&e>=t&&!this.updateLock&&(this.updateLock=!0,G(this.debug,"Loading next batch"),await this.updateFunction()&&(G(this.debug,"Bottom reached"),this.bottomReached=!0),this.updateLock=!1,await this.loadMoreDataAsync())}computeContainerData(){if(this.ref===null)return;const e=this.getWindowSize(),t=this.getWindowScroll(),r=this.getElementOffset(this.ref),i=this.getElementSize(this.ref);this.containerData={windowSize:e,windowScroll:t,elementWindowOffset:r,elementSize:i}}computeConfigData(e,t){if(e===null||t===null)return{windowMargin:0,gridGap:0,columnCount:1,entries:[]};const r=e.elementSize?e.elementSize.width:0,i=this.getWindowMargin(e.windowSize.height),o=this.getGridGap(r,e.windowSize.height),s=this.getColumnCount(r),l=this.getColumnWidth(s,o,r),n=t.map(a=>{if(!a.width)return a;const d=l*a.columnSpan+o*(a.columnSpan-1);return I(k({},a),{height:this.getItemRatioHeight(a.height,a.width,d),width:d})});return{windowMargin:i,gridGap:o,columnCount:s,entries:n}}computeLayoutData(e){if(e===null)return{cells:[],totalHeight:0};let t=1,r=0,i=0,o=0;const s=e.entries.map((n,a)=>{const{columnCount:d,gridGap:g}=e;let f=n.columnSpan,p=n.height;f<1&&(f=d);const m=(a+o)%d;n.newRow&&m!==0&&(o+=d-m);const z=a+o,S=z%d+1,D=Math.floor(z/d)+1;if(S+f>d+1){const P=S+f-d-1,Q=P/f;p=p*(1-Q),f-=P}f>1&&(o+=f-1),D!==t&&(t=D,r+=i+g,i=0);const J=r,M=Math.round(p);return i=Math.max(i,M),I(k({},n),{columnNumber:S,rowNumber:D,offset:J,height:M,columnSpan:f})}),l=r+i;return{cells:s,totalHeight:l}}computeRenderData(e,t,r){if(r===null||e===null)return{cellsToRender:[],firstRenderedRowNumber:0,firstRenderedRowOffset:0};const i=[];let o=null,s=null;if(t.elementWindowOffset!==null){const l=t.elementWindowOffset;for(const n of r.cells){const a=l+n.offset,d=a+n.height,g=t.windowScroll.y,f=g+t.windowSize.height,p=g-e.windowMargin,m=f+e.windowMargin;a>m||d
()=>!0})],c.prototype,"updateFunction",2),u([h({default:()=>Me})],c.prototype,"getGridGap",2),u([h({default:()=>Pe})],c.prototype,"getColumnCount",2),u([h({default:()=>Te})],c.prototype,"getWindowMargin",2),u([h({default:()=>We})],c.prototype,"getItemRatioHeight",2),u([h({default:null})],c.prototype,"scrollElement",2),u([h({default:500})],c.prototype,"updateTriggerMargin",2),u([h({default:null})],c.prototype,"loader",2),u([h({default:!1})],c.prototype,"debug",2),u([b()],c.prototype,"updateLock",2),u([b()],c.prototype,"bottomReached",2),u([b()],c.prototype,"ref",2),u([b()],c.prototype,"containerData",2),u([ze("scrollElement")],c.prototype,"onScrollElementChanged",1),c=u([Y({name:"VirtualGrid"})],c);var Ie=function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("div",{ref:"virtualGrid",style:{boxSizing:"border-box",height:e.layoutData.totalHeight+"px",paddingTop:e.renderData!==null&&e.renderData.firstRenderedRowOffset!==null?e.renderData.firstRenderedRowOffset+"px":"0px"}},[r("div",{staticClass:"grid",style:{display:"-ms-grid",display:"grid","align-items":"center","grid-template-columns":"repeat("+e.configData.columnCount+", 1fr)",gap:e.configData.gridGap+"px"}},e._l(e.renderData.cellsToRender,function(i){return r("div",{key:i.id,staticClass:"grid-item-wrapper",style:{height:i.height+"px","grid-column-start":i.columnNumber,"grid-column-end":i.columnNumber+i.columnSpan,"grid-row-start":e.getGridRowStart(i,e.renderData)}},[r(i.renderComponent,e._g({tag:"component",attrs:{item:i}},e.$listeners))],1)}),0),r(e.loadingBatch&&e.loader,{tag:"component"})],1)},Ae=[];function Ge(e,t,r,i,o,s,l,n){var a=typeof e=="function"?e.options:e;t&&(a.render=t,a.staticRenderFns=r,a._compiled=!0);var d;if(o&&(d=o),d)if(a.functional){a._injectStyles=d;var g=a.render;a.render=function(p,m){return d.call(m),g(p,m)}}else{var f=a.beforeCreate;a.beforeCreate=f?[].concat(f,d):[d]}return{exports:e,options:a}}const U={};var Ue=Ge(c,Ie,Ae,!1,He);function He(e){for(let t in U)this[t]=U[t]}var Ve=(function(){return Ue.exports})();const qe={name:"FileLegacy",inheritAttrs:!1,props:{item:{type:Object,required:!0}},data(){return{loaded:!1,error:!1}},computed:{ariaUuid(){return`image-${this.item.injected.fileid}`},ariaLabel(){return v("photos",'Open the full size "{name}" image',{name:this.item.injected.basename})},isImage(){return this.item.injected.mime.startsWith("image")},decodedEtag(){return this.item.injected.etag.replace(""","").replace(""","")},src(){return x(`/core/preview?fileId=${this.item.injected.fileid}&c=${this.decodedEtag}&x=250&y=250&forceIcon=0&a=${this.croppedLayout?"0":"1"}`)},croppedLayout(){return this.$store.state.userConfig.croppedLayout}},beforeDestroy(){this.$refs.src=""},methods:{openViewer(){window.OCA.Viewer.open({fileInfo:T(this.item.injected),list:this.item.injected.list.map(e=>T(e))})},onLoad(){this.loaded=!0},onError(){this.error=!0},t:v}};var Be=function(){var e=this,t=e._self._c;return t("a",{staticClass:"file",class:{"file--cropped":e.croppedLayout},attrs:{href:e.item.injected.source,"aria-label":e.ariaLabel},on:{click:function(r){return r.preventDefault(),e.openViewer.apply(null,arguments)}}},[e.item.injected.mime.includes("video")&&e.item.injected.hasPreview?t("div",{staticClass:"icon-video-white"}):e._e(),t("transition-group",{staticClass:"transition-group",attrs:{name:"fade"}},[e.error?e._e():t("img",{key:`${e.item.injected.basename}-img`,ref:"img",attrs:{src:e.src,alt:e.item.injected.basename,"aria-describedby":e.ariaUuid},on:{load:e.onLoad,error:e.onError}}),!e.loaded||e.error?t("svg",{key:`${e.item.injected.basename}-svg`,attrs:{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"url(#placeholder__gradient)"}},[e.isImage?t("use",{attrs:{href:"#placeholder--img"}}):t("use",{attrs:{href:"#placeholder--video"}})]):e._e()]),t("p",{staticClass:"hidden-visually",attrs:{id:e.ariaUuid}},[e._v(e._s(e.item.injected.basename))]),t("div",{staticClass:"cover",attrs:{role:"none"}})],1)},Ke=[],Ye=R(qe,Be,Ke,!1,null,"6f079611");const Xe=Ye.exports,Je={name:"FolderTagPreview",components:{FolderOutline:B,RouterLink:se},props:{name:{type:String,required:!0},path:{type:String,default:""},fileList:{type:Array,default:()=>[]}},data(){return{failed:[]}},computed:{isEmpty(){return this.previewList.length===0},ariaLabel(){return v("photos",'Open the "{name}" folder',{name:this.name})},previewList(){return this.fileList.filter(e=>this.failed.indexOf(e.fileid)===-1)},previewUrl(){if(this.previewList.length===0)return null;const{fileid:e,etag:t}=this.previewList.at(-1);return x(`/core/preview?fileId=${e}&c=${t}&x=250&y=250&forceIcon=0&a=0`)},toLink(){const e=`/files/${H()?.uid}`;let t=this.path.replace(new RegExp(`^${e}`),"");return t=/^\/?(.+)/i.exec(t)[1],{...this.$route,params:{path:t.split("/")}}}},methods:{onPreviewFail({fileid:e}){this.failed.push(e)},t:v}};var Qe=function(){var e=this,t=e._self._c;return t("RouterLink",{staticClass:"folder",attrs:{to:e.toLink,"aria-label":e.ariaLabel}},[e.previewUrl?t("img",{staticClass:"folder__image",attrs:{src:e.previewUrl,alt:""},on:{error:function(r){return e.onPreviewFail(e.file)}}}):t("span",{staticClass:"folder__image folder__image--placeholder"},[t("FolderOutline",{staticClass:"folder__icon",attrs:{size:96,"fill-color":"var(--color-primary-element)"}})],1),t("span",{staticClass:"folder__details"},[t("FolderOutline"),t("span",{staticClass:"folder__title"},[e._v(e._s(e.name))])],1)])},Ze=[],et=R(Je,Qe,Ze,!1,null,"0660a5ac");const tt=et.exports;async function X(e="/",t={}){const r=x(`/apps/photos/api/v1/${t.shared?"shared":"albums"}`),i=(await ne.get(r+e,t)).data.map(n=>({...n,filename:`${w}${n.filename}`,source:decodeURI(Z+`${w}${n.filename}`)}));let o;const s=[],l=[];for(const n of i)n.filename===`${w}${e}`?o=n:n.type!=="file"?s.push(n):q.indexOf(n.mime)>-1&&l.push(n);return{folder:o,folders:s,files:l}}const rt=V({name:"FolderComponent",components:{FolderTagPreview:tt},mixins:[K],inheritAttrs:!1,props:{item:{type:Object,required:!0}},data(){return{previewFolder:this.item.injected.fileid}},computed:{files(){return this.$store.state.folders.files},subFolders(){return this.$store.state.folders.subFolders},folders(){return this.$store.state.folders.folders},folderContent(){return this.folders[this.item.injected.fileid]},previewFiles(){const e=this.folders[this.previewFolder],t=e?e.map(r=>this.files[r]).slice(0,4):[];if(t.length===0&&this.subFolders[this.previewFolder]&&this.previewFolder===this.item.injected.fileid){const r=this.subFolders[this.previewFolder][0];this.updatePreviewFolder(r),this.folders[this.previewFolder]||this.getFolderData(this.files[this.previewFolder].filename)}return t}},async created(){this.folderContent||await this.getFolderData(this.item.injected.filename)},methods:{async getFolderData(e){try{const t=`/files/${H()?.uid}`,r=e.replace(new RegExp(`^${t}`),""),{folder:i,folders:o,files:s}=await X(r,{shared:this.item.injected.showShared,signal:this.abortController.signal});this.$store.dispatch("updateFolders",{fileid:i?.fileid,files:s,folders:o}),this.$store.dispatch("updateFoldersFiles",{folder:i,files:s,folders:o})}catch(t){j.error("Failed to get folder content",{error:t,filename:e})}},updatePreviewFolder(e){this.previewFolder=e}}});var it=function(){var e=this,t=e._self._c;return e._self._setupProxy,t("FolderTagPreview",{attrs:{id:e.item.injected.fileid,name:e.item.injected.basename.toString(),path:e.item.injected.filename,"file-list":e.previewFiles}})},ot=[],nt=R(rt,it,ot,!1,null,"d58b828a");const at=nt.exports,C={400:{marginTop:66,marginW:8,count:3,folderCount:1},700:{marginTop:66,marginW:8,count:4,folderCount:1},1024:{marginTop:66,marginW:44,count:5,folderCount:2},1280:{marginTop:66,marginW:44,count:4,folderCount:2},1440:{marginTop:88,marginW:66,count:5,folderCount:3},1600:{marginTop:88,marginW:66,count:6,folderCount:4},2048:{marginTop:88,marginW:66,count:7,folderCount:4},2560:{marginTop:88,marginW:88,count:8,folderCount:6},3440:{marginTop:88,marginW:88,count:9,folderCount:8},max:{marginTop:88,marginW:88,count:10,folderCount:10}},O=new F({data(){return{gridConfig:C.max}},watch:{gridConfig(e){this.$emit("changed",e)}},created(){window.addEventListener("resize",this.handleWindowResize),this.handleWindowResize()},beforeDestroy(){window.removeEventListener("resize",this.handleWindowResize)},methods:{handleWindowResize(){const e=Object.keys(C).map(t=>Number.parseInt(t)).find(t=>t>document.documentElement.clientWidth);this.gridConfig=C[e]||C.max}}}),st=V({data(){return{gridConfig:{}}},created(){O.$on("changed",this.handleGridConfigChange),j.debug("Grid config",{gridConfig:O.gridConfig}),this.gridConfig=O.gridConfig},beforeDestroy(){O.$off("changed",this.handleGridConfigChange)},methods:{handleGridConfigChange(e){this.gridConfig=e}}}),lt={name:"FoldersView",components:{FolderOutline:B,HeaderNavigation:le,NcEmptyContent:oe,NcLoadingIcon:ae,UploadPicker:re,VirtualGrid:Ve},mixins:[K,st],props:{rootTitle:{type:String,required:!0},path:{type:String,default:"/"},showShared:{type:Boolean,default:!1}},data(){return{error:null,allowedMimes:q,initializing:!0,loading:!1,appContent:document.getElementById("app-content-vue"),uploader:ie()}},computed:{files(){return this.$store.state.folders.files},folders(){return this.$store.state.folders.folders},folderId(){return this.$store.state.folders.paths[this.path]},folder(){return this.files[this.folderId]},folderAsFolder(){if(this.folder)return new ee({...this.folder,permissions:te(this.folder.permissions),owner:null})},folderContent(){return this.folders[this.folderId]||[]},fileList(){return this.folderContent&&this.folderContent.map(e=>this.files[e]).filter(e=>!!e)},subFolders(){return this.folderId&&this.files[this.folderId]&&this.$store.state.folders.subFolders[this.folderId]},folderList(){return this.subFolders&&this.subFolders.map(e=>this.files[e]).filter(e=>!!e)},contentList(){const e=this.folderList&&this.folderList.map(r=>({id:`folder-${r.fileid}`,injected:{...r,showShared:this.showShared},width:232,height:280,columnSpan:1,renderComponent:at})),t=this.fileList?.map(r=>({id:`file-${r.fileid}`,injected:{...r,list:this.fileList},width:256,height:256,columnSpan:1,renderComponent:Xe}));return[...e||[],...t||[]]},isEmpty(){return!this.haveFiles&&!this.haveFolders},haveFiles(){return!!this.fileList&&this.fileList.length!==0},haveFolders(){return!!this.folderList&&this.folderList.length!==0}},watch:{path(){this.fetchFolderContent()},showShared(){this.fetchFolderContent()}},beforeMount(){this.fetchFolderContent()},methods:{onRefresh(){this.fetchFolderContent()},async fetchFolderContent(){this.error=null,this.loading=!0,window.OCA?.Viewer?.close?.(),window.OCA?.Files?.Sidebar?.close?.(),(!this.files[this.folderId]||!this.folders[this.folderId])&&(this.initializing=!0);try{const{folder:e,folders:t,files:r}=await X(this.path,{shared:this.showShared,signal:this.abortController.signal});this.$store.dispatch("addPath",{path:this.path,fileid:e?.fileid}),this.$store.dispatch("updateFolders",{fileid:e?.fileid,files:r,folders:t}),this.$store.dispatch("updateFoldersFiles",{folder:e,files:r,folders:t})}catch(e){e?.response&&e.response.status&&(e.response.status===404?(this.error=404,setTimeout(()=>{this.$router.push({name:this.$route.name??void 0})},3e3)):this.error=e),j.error("Error fetching album data",{error:e})}finally{this.loading=!1,this.initializing=!1}},async onUpload(e){const t=e.source.split(w).pop(),r=await de(w+t);if(r===null){j.error("Failed to fetch file",{relPath:t});return}const i={fileid:r.fileid,basename:r.basename,etag:r.attributes.etag,filename:r.root+r.path,source:r.source,lastmod:r.mtime?.getTime(),mime:r.mime,size:r.size,type:"file",permissions:"",hasPreview:r.attributes.hasPreview};this.$store.dispatch("appendFoldersFiles",[i]),this.$store.dispatch("addFilesToFolder",{fileid:this.folderId,files:[i]})},t:v}};var dt=function(){var e=this,t=e._self._c;return e.error===404?t("NcEmptyContent",{attrs:{name:e.t("photos","This folder does not exist")},scopedSlots:e._u([{key:"icon",fn:function(){return[t("FolderOutline")]},proxy:!0}],null,!1,610611029)}):e.error?t("NcEmptyContent",{attrs:{name:e.t("photos","An error occurred")}}):e.initializing?t("NcEmptyContent",{attrs:{name:e.t("photos","Loading folders…")},scopedSlots:e._u([{key:"icon",fn:function(){return[t("NcLoadingIcon")]},proxy:!0}])}):e.initializing?e._e():t("div",[t("HeaderNavigation",{key:"navigation",class:{"photos-navigation--uploading":e.uploader.queue?.length>0},attrs:{loading:e.loading,path:e.path,title:e.folder?.basename?.toString?.()||e.rootTitle,"root-title":e.rootTitle},on:{refresh:e.onRefresh}},[t("UploadPicker",{attrs:{accept:e.allowedMimes,destination:e.folderAsFolder,multiple:!0},on:{uploaded:e.onUpload}})],1),e.isEmpty?t("NcEmptyContent",{key:"emptycontent",attrs:{name:e.t("photos","No photos in here")},scopedSlots:e._u([{key:"icon",fn:function(){return[t("FolderOutline")]},proxy:!0}],null,!1,610611029)}):t("div",{staticClass:"grid-container",class:{"grid-container--folders":e.haveFolders}},[t("VirtualGrid",{ref:"virtualgrid",attrs:{items:e.contentList,"scroll-element":e.appContent,"get-column-count":()=>e.haveFolders?e.gridConfig.folderCount:e.gridConfig.count,"get-grid-gap":()=>e.haveFolders?16:8}})],1)],1)},ct=[],ut=R(lt,dt,ct,!1,null,"fbad4466");const Dt=ut.exports;export{Dt as default};
-//# sourceMappingURL=FoldersView-C_fBOmEW.chunk.mjs.map
+import"./index-DjIio1qt.chunk.mjs";import{V as F,t as v,k as x,s as H,b as w,a0 as Z,a as V,$ as ee,a3 as te}from"./preload-helper-iHri5ttz.chunk.mjs";import{U as re,g as ie}from"./index-DPkUyJ8g-BELfZN9P.chunk.mjs";import{N as oe}from"./NcEmptyContent-BkpeWiV5.chunk.mjs";import{aa as T,T as ne,a as q,l as j,z as ae}from"./index-6_vkf3an.chunk.mjs";import{n as R,t as B}from"./icons-BPrPKxzl.chunk.mjs";import{L as se}from"./video-CFxEyJH4.chunk.mjs";import{A as K}from"./AbortControllerMixin-CCU9Utyn.chunk.mjs";import{H as le}from"./HeaderNavigation-6G2FmN95.chunk.mjs";import{f as de}from"./fileFetcher-p0a3IV9C.chunk.mjs";import"./index-CJ3jRDua.chunk.mjs";import"./index-BSfP607A.chunk.mjs";import"./useHotKey-CPjpPwsD.chunk.mjs";import"./NcActionButton-K4jUGMlW-Bs_jOwCM.chunk.mjs";import"./NcProgressBar-D7zYeXBH-Bj5rIFx5.chunk.mjs";import"./createElementId-DhjFt1I9-B2HCdIOx.chunk.mjs";var ce=Object.defineProperty,ue=Object.defineProperties,fe=Object.getOwnPropertyDescriptors,W=Object.getOwnPropertySymbols,he=Object.prototype.hasOwnProperty,pe=Object.prototype.propertyIsEnumerable,N=(e,t,r)=>t in e?ce(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,k=(e,t)=>{for(var r in t||(t={}))he.call(t,r)&&N(e,r,t[r]);if(W)for(var r of W(t))pe.call(t,r)&&N(e,r,t[r]);return e},I=(e,t)=>ue(e,fe(t));function _(e){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?_=function(t){return typeof t}:_=function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},_(e)}function me(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function ge(e){return we(e)||ye(e)||ve()}function we(e){if(Array.isArray(e)){for(var t=0,r=new Array(e.length);t1&&arguments[1]!==void 0?arguments[1]:{};t.name=t.name||e._componentTag||e.name;var r=e.prototype;Object.getOwnPropertyNames(r).forEach(function(n){if(n!=="constructor"){if($.indexOf(n)>-1){t[n]=r[n];return}var a=Object.getOwnPropertyDescriptor(r,n);a.value!==void 0?typeof a.value=="function"?(t.methods||(t.methods={}))[n]=a.value:(t.mixins||(t.mixins=[])).push({data:function(){return me({},n,a.value)}}):(a.get||a.set)&&((t.computed||(t.computed={}))[n]={get:a.get,set:a.set})}}),(t.mixins||(t.mixins=[])).push({data:function(){return je(this,e)}});var i=e.__decorators__;i&&(i.forEach(function(n){return n(t)}),delete e.__decorators__);var o=Object.getPrototypeOf(e.prototype),s=o instanceof F?o.constructor:F,l=s.extend(t);return Se(l,e,s),be()&&Ce(l,e),l}var Re={prototype:!0,arguments:!0,callee:!0,caller:!0};function Se(e,t,r){Object.getOwnPropertyNames(t).forEach(function(i){if(!Re[i]){var o=Object.getOwnPropertyDescriptor(e,i);if(!(o&&!o.configurable)){var s=Object.getOwnPropertyDescriptor(t,i);if(!_e){if(i==="cid")return;var l=Object.getOwnPropertyDescriptor(r,i);if(!Fe(s.value)&&l&&l.value===s.value)return}Object.defineProperty(e,i,s)}}})}function Y(e){return typeof e=="function"?A(e):function(t){return A(t,e)}}Y.registerHooks=function(e){$.push.apply($,ge(e))};function De(e){return typeof e!="function"||!e.managed&&!e.managedReactive}function Le(e){var t=function(){var r=this,i=typeof e=="function"?e.call(this):e;i=Object.create(i||null),i[y]=Object.create(this[y]||{});for(var o in t.managed)i[t.managed[o]]=this[o];var s=function(n){i[t.managedReactive[n]]=l[n],Object.defineProperty(i[y],t.managedReactive[n],{enumerable:!0,configurable:!0,get:function(){return r[n]}})},l=this;for(var o in t.managedReactive)s(o);return i};return t.managed={},t.managedReactive={},t}var y="__reactiveInject__";function $e(e){Array.isArray(e.inject)||(e.inject=e.inject||{},e.inject[y]={from:y,default:{}})}var xe=typeof Reflect<"u"&&typeof Reflect.getMetadata<"u";function Ee(e,t,r){if(xe&&!Array.isArray(e)&&typeof e!="function"&&!e.hasOwnProperty("type")&&typeof e.type>"u"){var i=Reflect.getMetadata("design:type",t,r);i!==Object&&(e.type=i)}}function h(e){return e===void 0&&(e={}),function(t,r){Ee(e,t,r),E(function(i,o){(i.props||(i.props={}))[o]=e})(t,r)}}function b(e){return E(function(t,r){var i=t.provide;$e(t),De(i)&&(i=t.provide=Le(i)),i.managedReactive[r]=r})}function ze(e,t){t===void 0&&(t={});var r=t.deep,i=r===void 0?!1:r,o=t.immediate,s=o===void 0?!1:o;return E(function(l,n){typeof l.watch!="object"&&(l.watch=Object.create(null));var a=l.watch;typeof a[e]=="object"&&!Array.isArray(a[e])?a[e]=[a[e]]:typeof a[e]>"u"&&(a[e]=[]),a[e].push({handler:n,deep:i,immediate:s})})}const Me=(e,t)=>e>720&&t>480?10:5,Pe=e=>Math.floor(e/250),Te=e=>Math.round(e*1.5),We=(e,t,r)=>{const i=e/t;return Math.round(r*i)},G=(e,...t)=>{e&&console.debug(...t)};var Ne=Object.defineProperty,ke=Object.getOwnPropertyDescriptor,u=(e,t,r,i)=>{for(var o=i>1?void 0:i?ke(t,r):t,s=e.length-1,l;s>=0;s--)(l=e[s])&&(o=(i?l(t,r,o):l(o))||o);return i&&o&&Ne(t,r,o),o};let c=class extends F{constructor(){super(...arguments),this.updateLock=!1,this.bottomReached=!1,this.ref=null,this.containerData={windowSize:{height:0,width:0},windowScroll:{x:0,y:0},elementWindowOffset:0,elementSize:{height:0,width:0}}}get loadingBatch(){return this.loader&&this.updateLock}get configData(){return this.computeConfigData(this.containerData,this.items)}get layoutData(){return this.computeLayoutData(this.configData)}get renderData(){return this.computeRenderData(this.configData,this.containerData,this.layoutData)}mounted(){var e;this.ref=this.$refs.virtualGrid,this.initiliazeGrid(),window.addEventListener("resize",this.resize),((e=this.scrollElement)!=null?e:window).addEventListener("scroll",this.scroll)}beforeDestroy(){var e;window.removeEventListener("resize",this.resize),((e=this.scrollElement)!=null?e:window).removeEventListener("scroll",this.scroll)}onScrollElementChanged(e,t){(t??window).removeEventListener("scroll",this.scroll),(e??window).addEventListener("scroll",this.scroll)}resize(){this.loadMoreData()}scroll(){this.loadMoreData()}initiliazeGrid(){this.computeContainerData(),this.$nextTick(async()=>{this.loadMoreData()})}loadMoreData(){this.loadMoreDataAsync().catch(e=>{e&&console.error("Fail to load next data batch",e)}).then()}async loadMoreDataAsync(){this.computeContainerData();const e=this.containerData.windowScroll.y+this.containerData.windowSize.height,t=Math.max(0,this.containerData.elementWindowOffset+this.containerData.elementSize.height-this.updateTriggerMargin);!this.bottomReached&&e>=t&&!this.updateLock&&(this.updateLock=!0,G(this.debug,"Loading next batch"),await this.updateFunction()&&(G(this.debug,"Bottom reached"),this.bottomReached=!0),this.updateLock=!1,await this.loadMoreDataAsync())}computeContainerData(){if(this.ref===null)return;const e=this.getWindowSize(),t=this.getWindowScroll(),r=this.getElementOffset(this.ref),i=this.getElementSize(this.ref);this.containerData={windowSize:e,windowScroll:t,elementWindowOffset:r,elementSize:i}}computeConfigData(e,t){if(e===null||t===null)return{windowMargin:0,gridGap:0,columnCount:1,entries:[]};const r=e.elementSize?e.elementSize.width:0,i=this.getWindowMargin(e.windowSize.height),o=this.getGridGap(r,e.windowSize.height),s=this.getColumnCount(r),l=this.getColumnWidth(s,o,r),n=t.map(a=>{if(!a.width)return a;const d=l*a.columnSpan+o*(a.columnSpan-1);return I(k({},a),{height:this.getItemRatioHeight(a.height,a.width,d),width:d})});return{windowMargin:i,gridGap:o,columnCount:s,entries:n}}computeLayoutData(e){if(e===null)return{cells:[],totalHeight:0};let t=1,r=0,i=0,o=0;const s=e.entries.map((n,a)=>{const{columnCount:d,gridGap:g}=e;let f=n.columnSpan,p=n.height;f<1&&(f=d);const m=(a+o)%d;n.newRow&&m!==0&&(o+=d-m);const z=a+o,S=z%d+1,D=Math.floor(z/d)+1;if(S+f>d+1){const P=S+f-d-1,Q=P/f;p=p*(1-Q),f-=P}f>1&&(o+=f-1),D!==t&&(t=D,r+=i+g,i=0);const J=r,M=Math.round(p);return i=Math.max(i,M),I(k({},n),{columnNumber:S,rowNumber:D,offset:J,height:M,columnSpan:f})}),l=r+i;return{cells:s,totalHeight:l}}computeRenderData(e,t,r){if(r===null||e===null)return{cellsToRender:[],firstRenderedRowNumber:0,firstRenderedRowOffset:0};const i=[];let o=null,s=null;if(t.elementWindowOffset!==null){const l=t.elementWindowOffset;for(const n of r.cells){const a=l+n.offset,d=a+n.height,g=t.windowScroll.y,f=g+t.windowSize.height,p=g-e.windowMargin,m=f+e.windowMargin;a>m||d
\n\t\n\n\n\n\n\n","import '../assets/NcChip-DLfUzq07.css';\nimport { c as mdiClose } from \"../chunks/mdi-DkJglNiS.mjs\";\nimport { useSlots, computed } from \"vue\";\nimport { N as NcActionButton } from \"../chunks/NcActionButton-K4jUGMlW.mjs\";\nimport { N as NcActions } from \"../chunks/NcActions-DbPerbGE.mjs\";\nimport { N as NcIconSvgWrapper } from \"../chunks/NcIconSvgWrapper-Bui9PhAS.mjs\";\nimport { r as register, m as t18, a as t } from \"../chunks/_l10n-DVz9Qdzk.mjs\";\nimport { n as normalizeComponent } from \"../chunks/_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nregister(t18);\nconst _sfc_main = {\n __name: \"NcChip\",\n props: {\n /**\n * aria label to set on the close button\n *\n * @default 'Close'\n */\n ariaLabelClose: {\n type: String,\n default: t(\"Close\")\n },\n /**\n * Container for the actions\n */\n actionsContainer: {\n type: String,\n default: \"body\"\n },\n /**\n * Main text of the chip.\n */\n text: {\n type: String,\n default: \"\"\n },\n /**\n * Set the chips design variant-\n *\n * This sets the background style of the chip, similar to NcButton's `variant`.\n *\n * @deprecated will be removed with v9 - use `variant` instead.\n */\n type: {\n type: String,\n default: \"secondary\",\n validator: (value) => [\"primary\", \"secondary\", \"tertiary\", \"error\", \"warning\", \"success\"].includes(value)\n },\n /**\n * SVG path of the icon to use, this takes precedence over `iconSVG`.\n * For example icon paths from `@mdi/js` can be used.\n */\n iconPath: {\n type: String,\n default: null\n },\n /**\n * Inline SVG to use as the icon\n */\n iconSvg: {\n type: String,\n default: null\n },\n /**\n * Set to true to prevent the close button to be shown\n */\n noClose: {\n type: Boolean,\n default: false\n },\n /**\n * Set the chips design variant-\n *\n * This sets the background style of the chip, similar to NcButton's `variant`.\n *\n * @since 8.24.0\n */\n variant: {\n type: String,\n default: \"secondary\",\n validator: (value) => [\"primary\", \"secondary\", \"tertiary\", \"error\", \"warning\", \"success\"].includes(value)\n }\n },\n emits: [\"close\"],\n setup(__props, { emit }) {\n const props = __props;\n const slots = useSlots();\n const realVariant = computed(() => props.type !== \"secondary\" ? props.type : props.variant);\n const canClose = computed(() => !props.noClose);\n const hasActions = () => Boolean(slots.actions?.());\n const hasIcon = () => Boolean(props.iconPath || props.iconSvg || !!slots.icon?.());\n return { __sfc: true, props, emit, slots, realVariant, canClose, hasActions, hasIcon, mdiClose, NcActionButton, NcActions, NcIconSvgWrapper };\n }\n};\nvar _sfc_render = function render() {\n var _vm = this, _c = _vm._self._c, _setup = _vm._self._setupProxy;\n return _c(\"div\", { staticClass: \"nc-chip\", class: {\n [`nc-chip--${_setup.realVariant}`]: true,\n \"nc-chip--no-actions\": _vm.noClose && !_setup.hasActions(),\n \"nc-chip--no-icon\": !_setup.hasIcon()\n } }, [_setup.hasIcon() ? _c(\"span\", { staticClass: \"nc-chip__icon\" }, [_vm._t(\"icon\", function() {\n return [_vm.iconPath || _vm.iconSvg ? _c(_setup.NcIconSvgWrapper, { attrs: { \"inline\": \"\", \"path\": _vm.iconPath, \"svg\": _vm.iconPath ? void 0 : _vm.iconSvg, \"size\": 18 } }) : _vm._e()];\n })], 2) : _vm._e(), _c(\"span\", { staticClass: \"nc-chip__text\" }, [_vm._t(\"default\", function() {\n return [_vm._v(_vm._s(_vm.text))];\n })], 2), _setup.canClose || _setup.hasActions() ? _c(_setup.NcActions, { staticClass: \"nc-chip__actions\", attrs: { \"container\": _vm.actionsContainer, \"force-menu\": !_setup.canClose, \"variant\": \"tertiary-no-background\" } }, [_setup.canClose ? _c(_setup.NcActionButton, { attrs: { \"close-after-click\": \"\" }, on: { \"click\": function($event) {\n return _setup.emit(\"close\");\n } }, scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_c(_setup.NcIconSvgWrapper, { attrs: { \"path\": _setup.mdiClose, \"size\": 20 } })];\n }, proxy: true }], null, false, 2547223506) }, [_vm._v(\" \" + _vm._s(_vm.ariaLabelClose) + \" \")]) : _vm._e(), _vm._t(\"actions\")], 2) : _vm._e()], 1);\n};\nvar _sfc_staticRenderFns = [];\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n null,\n \"c8e429a5\"\n);\nconst NcChip = __component__.exports;\nexport {\n NcChip as default\n};\n//# sourceMappingURL=NcChip.mjs.map\n","/*!\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { PhotosFilter } from './PhotosFilter.ts'\n\nimport calendarMonthSvg from '@mdi/svg/svg/calendar-month.svg?raw'\nimport { t } from '@nextcloud/l10n'\nimport { spawnDialog } from '@nextcloud/vue/functions/dialog'\nimport CustomDateRangePickerDialog from '../../components/PhotosFilters/CustomDateRangePickerDialog.vue'\nimport DateRangeOption from '../../components/PhotosFilters/DateRangeOption.vue'\n\nexport type DateRangeValueType = { start: number, end: number }\n\nexport const dateRangeFilterId = 'date-range'\n\nexport const dateRangeFilter: PhotosFilter = {\n\tid: dateRangeFilterId,\n\ticon: calendarMonthSvg,\n\trenderOptionComponent: DateRangeOption,\n\tasync getOptions() {\n\t\tconst now = new Date()\n\n\t\treturn [\n\t\t\t{\n\t\t\t\tfilterId: dateRangeFilterId,\n\t\t\t\tlabel: t('photos', 'Last week'),\n\t\t\t\tvalue: {\n\t\t\t\t\tstart: new Date(now.getFullYear(), now.getMonth(), now.getDate() - now.getDay() - 7).getTime(),\n\t\t\t\t\tend: new Date(now.getFullYear(), now.getMonth(), now.getDate() - now.getDay() - 1).getTime(),\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tfilterId: dateRangeFilterId,\n\t\t\t\tlabel: t('photos', 'Last Month'),\n\t\t\t\tvalue: {\n\t\t\t\t\tstart: new Date(now.getFullYear(), now.getMonth() - 1, 1).getTime(),\n\t\t\t\t\tend: new Date(now.getFullYear(), now.getMonth(), 0).getTime(),\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tfilterId: dateRangeFilterId,\n\t\t\t\tlabel: t('photos', 'Custom…'),\n\t\t\t\tvalue: undefined,\n\t\t\t\tasync getValue() {\n\t\t\t\t\treturn new Promise((resolve) => {\n\t\t\t\t\t\tspawnDialog(CustomDateRangePickerDialog, undefined, resolve)\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t},\n\t\t]\n\t},\n\tgetQuery(dateRangeOptions: DateRangeValueType[]): string {\n\t\t// Add one day to the end date to include the whole day.\n\t\tconst dav = dateRangeOptions.map((option) => `\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t${option.start / 1000}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t${option.end / 1000 + 24 * 60 * 60}\n\t\t\t\t\n\t\t\t`)\n\n\t\treturn `${dav.join('')}`\n\t},\n}\n","export default \"\"","/**\n * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { computed, onUnmounted, ref } from 'vue'\nimport router from '../router/index.ts'\n\n/**\n *\n */\nexport default function() {\n\tconst abortController = ref(new AbortController())\n\n\tconst abortSignal = computed(() => abortController.value.signal)\n\n\t/**\n\t *\n\t */\n\tfunction abortPendingRequest() {\n\t\tabortController.value.abort()\n\t\tabortController.value = new AbortController()\n\t}\n\n\tonUnmounted(() => {\n\t\tabortController.value.abort()\n\t})\n\n\trouter.beforeEach((from, to, next) => {\n\t\tabortPendingRequest()\n\t\tnext()\n\t})\n\n\treturn {\n\t\tabortSignal,\n\t\tabortPendingRequest,\n\t}\n}\n","/**\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { WebDAVClient } from 'webdav'\n\nimport { ref } from 'vue'\nimport {\n\ttype Collection,\n\n\tfetchCollections,\n} from '../services/collectionFetcher.js'\nimport { davClient } from '../services/DavClient.ts'\nimport logger from '../services/logger.js'\nimport store from '../store/index.ts'\nimport useAbortController from './useAbortController.ts'\n\nexport default function() {\n\tconst errorFetchingCollections = ref(null as null | number | Error | unknown)\n\tconst loadingCollections = ref(false)\n\tconst { abortSignal } = useAbortController()\n\n\t/**\n\t *\n\t * @param collectionHome\n\t * @param extraProps\n\t * @param client\n\t */\n\tasync function _fetchCollections(collectionHome: string, extraProps: string[] = [], client: WebDAVClient = davClient): Promise {\n\t\tif (loadingCollections.value) {\n\t\t\treturn []\n\t\t}\n\n\t\ttry {\n\t\t\tloadingCollections.value = true\n\t\t\terrorFetchingCollections.value = null\n\n\t\t\tconst collections = await fetchCollections(collectionHome, { signal: abortSignal.value }, extraProps, client)\n\n\t\t\tstore.dispatch('addCollections', { collections })\n\n\t\t\treturn collections\n\t\t} catch (error) {\n\t\t\tif (error.response?.status === 404) {\n\t\t\t\terrorFetchingCollections.value = 404\n\t\t\t} else {\n\t\t\t\terrorFetchingCollections.value = error\n\t\t\t}\n\t\t\tlogger.error('Error fetching collections:', { error })\n\t\t} finally {\n\t\t\tloadingCollections.value = false\n\t\t}\n\n\t\treturn []\n\t}\n\n\treturn { fetchCollections: _fetchCollections, errorFetchingCollections, loadingCollections }\n}\n","\n\n\t\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t{{ value }}\n\t\t\n\t\n\n\n\n\n\n","/*!\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { PhotosFilter } from './PhotosFilter.ts'\n\nimport mapMarkerSvg from '@mdi/svg/svg/map-marker.svg?raw'\nimport { generateUrl } from '@nextcloud/router'\nimport PlacesOption from '../../components/PhotosFilters/PlaceOption.vue'\nimport store from '../../store/index.ts'\nimport { placesPrefix } from '../../store/places.ts'\nimport { fetchCollections } from '../collectionFetcher.ts'\n\nexport type PlacesValueType = string\n\nexport const placesFilterId = 'places'\n\nexport const placesFilter: PhotosFilter = {\n\tid: placesFilterId,\n\ticon: mapMarkerSvg,\n\trenderOptionComponent: PlacesOption,\n\tasync getOptions() {\n\t\tif (Object.values(store.getters.places).length === 0) {\n\t\t\tconst collections = await fetchCollections(placesPrefix)\n\t\t\tstore.dispatch('addCollections', { collections })\n\t\t}\n\n\t\treturn Object.values(Object.values(store.getters.places)).map((place) => {\n\t\t\treturn {\n\t\t\t\tfilterId: placesFilterId,\n\t\t\t\tlabel: place.displayname,\n\t\t\t\tvalue: place.displayname,\n\t\t\t\timgSrc: generateUrl(`/apps/photos/api/v1/preview/${place.attributes['last-photo']}?x=${64}&y=${64}`),\n\t\t\t}\n\t\t})\n\t},\n\tgetQuery(placesId: PlacesValueType[]): string {\n\t\tconst dav = placesId.map((placeId) => `\n\t\t\t\n\t\t\t\t\n\t\t\t\t${placeId}\n\t\t\t\n\t\t`)\n\n\t\treturn `${dav.join('')}`\n\t},\n}\n","/*!\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { dateRangeFilter } from './dateRangeFilter.ts'\nimport { placesFilter } from './placesFilter.ts'\n\nexport default [\n\tdateRangeFilter,\n\tplacesFilter,\n]\n","\n\n\t
\n\t\t
\n\t\t\t\n\n\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t
\n\n\n\n\n\n","\n\n\t
\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t
\n\n\n\n\n\n"],"names":["calendarMonthSvg","dateRange","ref","watch","newDateRangeValue","emit","register","t18","_sfc_main","t","value","__props","props","slots","useSlots","realVariant","computed","canClose","mdiClose","NcActionButton","NcActions","NcIconSvgWrapper","_sfc_render","_vm","_c","_setup","$event","_sfc_staticRenderFns","__component__","normalizeComponent","NcChip","dateRangeFilterId","dateRangeFilter","DateRangeOption","now","resolve","spawnDialog","CustomDateRangePickerDialog","dateRangeOptions","option","mapMarkerSvg","useAbortController","abortController","abortSignal","abortPendingRequest","onUnmounted","router","from","to","next","useFetchCollections","errorFetchingCollections","loadingCollections","_fetchCollections","collectionHome","extraProps","client","davClient","collections","fetchCollections","store","error","logger","placeImageSource","place","generateUrl","placesPrefix","placesFilterId","placesFilter","PlacesOption","placesId","placeId","filters","availableFilters","filter","filterOptions","availableOptions","availableOptionsWithSelection","optionIsSelected","loading","getOptionsPromises","options","handleSelectOptions"],"mappings":"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","x_google_ignoreList":[0,2,4]}
\ No newline at end of file
+{"version":3,"file":"PhotosFiltersInput-BJ4kTX4C.chunk.mjs","sources":["../node_modules/@mdi/svg/svg/calendar-month.svg?raw","../src/components/PhotosFilters/CustomDateRangePickerDialog.vue","../node_modules/@nextcloud/vue/dist/Components/NcChip.mjs","../src/services/PhotosFilters/dateRangeFilter.ts","../node_modules/@mdi/svg/svg/map-marker.svg?raw","../src/mixins/useAbortController.ts","../src/mixins/useFetchCollections.ts","../src/components/PhotosFilters/PlaceOption.vue","../src/services/PhotosFilters/placesFilter.ts","../src/services/PhotosFilters/index.ts","../src/components/PhotosFilters/PhotosFiltersDisplay.vue","../src/components/PhotosFilters/PhotosFiltersInput.vue"],"sourcesContent":["export default \"\"","\n\n\t\n\t\t
\n\t\n\n\n\n\n\n","import '../assets/NcChip-DLfUzq07.css';\nimport { c as mdiClose } from \"../chunks/mdi-DkJglNiS.mjs\";\nimport { useSlots, computed } from \"vue\";\nimport { N as NcActionButton } from \"../chunks/NcActionButton-K4jUGMlW.mjs\";\nimport { N as NcActions } from \"../chunks/NcActions-DbPerbGE.mjs\";\nimport { N as NcIconSvgWrapper } from \"../chunks/NcIconSvgWrapper-Bui9PhAS.mjs\";\nimport { r as register, m as t18, a as t } from \"../chunks/_l10n-DVz9Qdzk.mjs\";\nimport { n as normalizeComponent } from \"../chunks/_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nregister(t18);\nconst _sfc_main = {\n __name: \"NcChip\",\n props: {\n /**\n * aria label to set on the close button\n *\n * @default 'Close'\n */\n ariaLabelClose: {\n type: String,\n default: t(\"Close\")\n },\n /**\n * Container for the actions\n */\n actionsContainer: {\n type: String,\n default: \"body\"\n },\n /**\n * Main text of the chip.\n */\n text: {\n type: String,\n default: \"\"\n },\n /**\n * Set the chips design variant-\n *\n * This sets the background style of the chip, similar to NcButton's `variant`.\n *\n * @deprecated will be removed with v9 - use `variant` instead.\n */\n type: {\n type: String,\n default: \"secondary\",\n validator: (value) => [\"primary\", \"secondary\", \"tertiary\", \"error\", \"warning\", \"success\"].includes(value)\n },\n /**\n * SVG path of the icon to use, this takes precedence over `iconSVG`.\n * For example icon paths from `@mdi/js` can be used.\n */\n iconPath: {\n type: String,\n default: null\n },\n /**\n * Inline SVG to use as the icon\n */\n iconSvg: {\n type: String,\n default: null\n },\n /**\n * Set to true to prevent the close button to be shown\n */\n noClose: {\n type: Boolean,\n default: false\n },\n /**\n * Set the chips design variant-\n *\n * This sets the background style of the chip, similar to NcButton's `variant`.\n *\n * @since 8.24.0\n */\n variant: {\n type: String,\n default: \"secondary\",\n validator: (value) => [\"primary\", \"secondary\", \"tertiary\", \"error\", \"warning\", \"success\"].includes(value)\n }\n },\n emits: [\"close\"],\n setup(__props, { emit }) {\n const props = __props;\n const slots = useSlots();\n const realVariant = computed(() => props.type !== \"secondary\" ? props.type : props.variant);\n const canClose = computed(() => !props.noClose);\n const hasActions = () => Boolean(slots.actions?.());\n const hasIcon = () => Boolean(props.iconPath || props.iconSvg || !!slots.icon?.());\n return { __sfc: true, props, emit, slots, realVariant, canClose, hasActions, hasIcon, mdiClose, NcActionButton, NcActions, NcIconSvgWrapper };\n }\n};\nvar _sfc_render = function render() {\n var _vm = this, _c = _vm._self._c, _setup = _vm._self._setupProxy;\n return _c(\"div\", { staticClass: \"nc-chip\", class: {\n [`nc-chip--${_setup.realVariant}`]: true,\n \"nc-chip--no-actions\": _vm.noClose && !_setup.hasActions(),\n \"nc-chip--no-icon\": !_setup.hasIcon()\n } }, [_setup.hasIcon() ? _c(\"span\", { staticClass: \"nc-chip__icon\" }, [_vm._t(\"icon\", function() {\n return [_vm.iconPath || _vm.iconSvg ? _c(_setup.NcIconSvgWrapper, { attrs: { \"inline\": \"\", \"path\": _vm.iconPath, \"svg\": _vm.iconPath ? void 0 : _vm.iconSvg, \"size\": 18 } }) : _vm._e()];\n })], 2) : _vm._e(), _c(\"span\", { staticClass: \"nc-chip__text\" }, [_vm._t(\"default\", function() {\n return [_vm._v(_vm._s(_vm.text))];\n })], 2), _setup.canClose || _setup.hasActions() ? _c(_setup.NcActions, { staticClass: \"nc-chip__actions\", attrs: { \"container\": _vm.actionsContainer, \"force-menu\": !_setup.canClose, \"variant\": \"tertiary-no-background\" } }, [_setup.canClose ? _c(_setup.NcActionButton, { attrs: { \"close-after-click\": \"\" }, on: { \"click\": function($event) {\n return _setup.emit(\"close\");\n } }, scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_c(_setup.NcIconSvgWrapper, { attrs: { \"path\": _setup.mdiClose, \"size\": 20 } })];\n }, proxy: true }], null, false, 2547223506) }, [_vm._v(\" \" + _vm._s(_vm.ariaLabelClose) + \" \")]) : _vm._e(), _vm._t(\"actions\")], 2) : _vm._e()], 1);\n};\nvar _sfc_staticRenderFns = [];\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n null,\n \"c8e429a5\"\n);\nconst NcChip = __component__.exports;\nexport {\n NcChip as default\n};\n//# sourceMappingURL=NcChip.mjs.map\n","/*!\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { PhotosFilter } from './PhotosFilter.ts'\n\nimport calendarMonthSvg from '@mdi/svg/svg/calendar-month.svg?raw'\nimport { t } from '@nextcloud/l10n'\nimport { spawnDialog } from '@nextcloud/vue/functions/dialog'\nimport CustomDateRangePickerDialog from '../../components/PhotosFilters/CustomDateRangePickerDialog.vue'\nimport DateRangeOption from '../../components/PhotosFilters/DateRangeOption.vue'\n\nexport type DateRangeValueType = { start: number, end: number }\n\nexport const dateRangeFilterId = 'date-range'\n\nexport const dateRangeFilter: PhotosFilter = {\n\tid: dateRangeFilterId,\n\ticon: calendarMonthSvg,\n\trenderOptionComponent: DateRangeOption,\n\tasync getOptions() {\n\t\tconst now = new Date()\n\n\t\treturn [\n\t\t\t{\n\t\t\t\tfilterId: dateRangeFilterId,\n\t\t\t\tlabel: t('photos', 'Last week'),\n\t\t\t\tvalue: {\n\t\t\t\t\tstart: new Date(now.getFullYear(), now.getMonth(), now.getDate() - now.getDay() - 7).getTime(),\n\t\t\t\t\tend: new Date(now.getFullYear(), now.getMonth(), now.getDate() - now.getDay() - 1).getTime(),\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tfilterId: dateRangeFilterId,\n\t\t\t\tlabel: t('photos', 'Last Month'),\n\t\t\t\tvalue: {\n\t\t\t\t\tstart: new Date(now.getFullYear(), now.getMonth() - 1, 1).getTime(),\n\t\t\t\t\tend: new Date(now.getFullYear(), now.getMonth(), 0).getTime(),\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tfilterId: dateRangeFilterId,\n\t\t\t\tlabel: t('photos', 'Custom…'),\n\t\t\t\tvalue: undefined,\n\t\t\t\tasync getValue() {\n\t\t\t\t\treturn new Promise((resolve) => {\n\t\t\t\t\t\tspawnDialog(CustomDateRangePickerDialog, undefined, resolve)\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t},\n\t\t]\n\t},\n\tgetQuery(dateRangeOptions: DateRangeValueType[]): string {\n\t\t// Add one day to the end date to include the whole day.\n\t\tconst dav = dateRangeOptions.map((option) => `\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t${option.start / 1000}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t${option.end / 1000 + 24 * 60 * 60}\n\t\t\t\t\n\t\t\t`)\n\n\t\treturn `${dav.join('')}`\n\t},\n}\n","export default \"\"","/**\n * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { computed, onUnmounted, ref } from 'vue'\nimport router from '../router/index.ts'\n\n/**\n *\n */\nexport default function() {\n\tconst abortController = ref(new AbortController())\n\n\tconst abortSignal = computed(() => abortController.value.signal)\n\n\t/**\n\t *\n\t */\n\tfunction abortPendingRequest() {\n\t\tabortController.value.abort()\n\t\tabortController.value = new AbortController()\n\t}\n\n\tonUnmounted(() => {\n\t\tabortController.value.abort()\n\t})\n\n\trouter.beforeEach((from, to, next) => {\n\t\tabortPendingRequest()\n\t\tnext()\n\t})\n\n\treturn {\n\t\tabortSignal,\n\t\tabortPendingRequest,\n\t}\n}\n","/**\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { WebDAVClient } from 'webdav'\n\nimport { ref } from 'vue'\nimport {\n\ttype Collection,\n\n\tfetchCollections,\n} from '../services/collectionFetcher.js'\nimport { davClient } from '../services/DavClient.ts'\nimport logger from '../services/logger.js'\nimport store from '../store/index.ts'\nimport useAbortController from './useAbortController.ts'\n\nexport default function() {\n\tconst errorFetchingCollections = ref(null as null | number | Error | unknown)\n\tconst loadingCollections = ref(false)\n\tconst { abortSignal } = useAbortController()\n\n\t/**\n\t *\n\t * @param collectionHome\n\t * @param extraProps\n\t * @param client\n\t */\n\tasync function _fetchCollections(collectionHome: string, extraProps: string[] = [], client: WebDAVClient = davClient): Promise {\n\t\tif (loadingCollections.value) {\n\t\t\treturn []\n\t\t}\n\n\t\ttry {\n\t\t\tloadingCollections.value = true\n\t\t\terrorFetchingCollections.value = null\n\n\t\t\tconst collections = await fetchCollections(collectionHome, { signal: abortSignal.value }, extraProps, client)\n\n\t\t\tstore.dispatch('addCollections', { collections })\n\n\t\t\treturn collections\n\t\t} catch (error) {\n\t\t\tif (error.response?.status === 404) {\n\t\t\t\terrorFetchingCollections.value = 404\n\t\t\t} else {\n\t\t\t\terrorFetchingCollections.value = error\n\t\t\t}\n\t\t\tlogger.error('Error fetching collections:', { error })\n\t\t} finally {\n\t\t\tloadingCollections.value = false\n\t\t}\n\n\t\treturn []\n\t}\n\n\treturn { fetchCollections: _fetchCollections, errorFetchingCollections, loadingCollections }\n}\n","\n\n\t\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t{{ value }}\n\t\t\n\t\n\n\n\n\n\n","/*!\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { PhotosFilter } from './PhotosFilter.ts'\n\nimport mapMarkerSvg from '@mdi/svg/svg/map-marker.svg?raw'\nimport { generateUrl } from '@nextcloud/router'\nimport PlacesOption from '../../components/PhotosFilters/PlaceOption.vue'\nimport store from '../../store/index.ts'\nimport { placesPrefix } from '../../store/places.ts'\nimport { fetchCollections } from '../collectionFetcher.ts'\n\nexport type PlacesValueType = string\n\nexport const placesFilterId = 'places'\n\nexport const placesFilter: PhotosFilter = {\n\tid: placesFilterId,\n\ticon: mapMarkerSvg,\n\trenderOptionComponent: PlacesOption,\n\tasync getOptions() {\n\t\tif (Object.values(store.getters.places).length === 0) {\n\t\t\tconst collections = await fetchCollections(placesPrefix)\n\t\t\tstore.dispatch('addCollections', { collections })\n\t\t}\n\n\t\treturn Object.values(Object.values(store.getters.places)).map((place) => {\n\t\t\treturn {\n\t\t\t\tfilterId: placesFilterId,\n\t\t\t\tlabel: place.displayname,\n\t\t\t\tvalue: place.displayname,\n\t\t\t\timgSrc: generateUrl(`/apps/photos/api/v1/preview/${place.attributes['last-photo']}?x=${64}&y=${64}`),\n\t\t\t}\n\t\t})\n\t},\n\tgetQuery(placesId: PlacesValueType[]): string {\n\t\tconst dav = placesId.map((placeId) => `\n\t\t\t\n\t\t\t\t\n\t\t\t\t${placeId}\n\t\t\t\n\t\t`)\n\n\t\treturn `${dav.join('')}`\n\t},\n}\n","/*!\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { dateRangeFilter } from './dateRangeFilter.ts'\nimport { placesFilter } from './placesFilter.ts'\n\nexport default [\n\tdateRangeFilter,\n\tplacesFilter,\n]\n","\n\n\t
\n\t\t
\n\t\t\t\n\n\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t
\n\n\n\n\n\n","\n\n\t
\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t
\n\n\n\n\n\n"],"names":["calendarMonthSvg","dateRange","ref","watch","newDateRangeValue","emit","register","t18","_sfc_main","t","value","__props","props","slots","useSlots","realVariant","computed","canClose","mdiClose","NcActionButton","NcActions","NcIconSvgWrapper","_sfc_render","_vm","_c","_setup","$event","_sfc_staticRenderFns","__component__","normalizeComponent","NcChip","dateRangeFilterId","dateRangeFilter","DateRangeOption","now","resolve","spawnDialog","CustomDateRangePickerDialog","dateRangeOptions","option","mapMarkerSvg","useAbortController","abortController","abortSignal","abortPendingRequest","onUnmounted","router","from","to","next","useFetchCollections","errorFetchingCollections","loadingCollections","_fetchCollections","collectionHome","extraProps","client","davClient","collections","fetchCollections","store","error","logger","placeImageSource","place","generateUrl","placesPrefix","placesFilterId","placesFilter","PlacesOption","placesId","placeId","filters","availableFilters","filter","filterOptions","availableOptions","availableOptionsWithSelection","optionIsSelected","loading","getOptionsPromises","options","handleSelectOptions"],"mappings":"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","x_google_ignoreList":[0,2,4]}
\ No newline at end of file
diff --git a/js/PlacesView-DehMSNPa.chunk.mjs b/js/PlacesView-BYizGYrO.chunk.mjs
similarity index 92%
rename from js/PlacesView-DehMSNPa.chunk.mjs
rename to js/PlacesView-BYizGYrO.chunk.mjs
index f3b1083804..4d7e0cd32d 100644
--- a/js/PlacesView-DehMSNPa.chunk.mjs
+++ b/js/PlacesView-BYizGYrO.chunk.mjs
@@ -1,2 +1,2 @@
-import{h as s,t as a,k as l}from"./preload-helper-iHri5ttz.chunk.mjs";import{N as i}from"./NcEmptyContent-BkpeWiV5.chunk.mjs";import{I as r,n}from"./icons-BPrPKxzl.chunk.mjs";import{C as c,a as p}from"./CollectionsList-6GeFqfGW.chunk.mjs";import{H as m}from"./HeaderNavigation-6G2FmN95.chunk.mjs";import{F as h}from"./FetchCollectionsMixin-BuJ7c1sd.chunk.mjs";import{D as f}from"./index-6_vkf3an.chunk.mjs";import"./createElementId-DhjFt1I9-B2HCdIOx.chunk.mjs";import"./video-B7iCXJqN.chunk.mjs";import"./index-DjIio1qt.chunk.mjs";import"./collectionFetcher-DyDb1Dp2.chunk.mjs";import"./AbortControllerMixin-CCU9Utyn.chunk.mjs";const u={name:"PlacesView",components:{ImageMultipleOutline:r,NcEmptyContent:i,CollectionsList:p,CollectionCover:c,HeaderNavigation:m},filters:{coverUrl(t){return t===-1?"":l(`/apps/photos/api/v1/preview/${t}?x=512&y=512`)}},mixins:[h],computed:{places(){return this.$store.getters.places}},async beforeMount(){this.fetchPlaces()},methods:{fetchPlaces(){this.fetchCollections(f)},t:a,n:s}};var d=function(){var t=this,e=t._self._c;return e("div",[e("CollectionsList",{staticClass:"places-list",attrs:{collections:t.places,loading:t.loadingCollections,error:t.errorFetchingCollections},scopedSlots:t._u([{key:"default",fn:function({collection:o}){return e("CollectionCover",{key:o.basename,attrs:{"parent-route":"/places","collection-name":o.basename,"alt-img":t.t("photos","Cover photo for place {placeName}",{placeName:o.basename}),"cover-url":t._f("coverUrl")(o.attributes["last-photo"])}},[e("span",{staticClass:"place__name"},[t._v(" "+t._s(o.basename)+" ")]),e("div",{staticClass:"place__details",attrs:{slot:"subtitle"},slot:"subtitle"},[t._v(" "+t._s(t.n("photos","%n item","%n photos and videos",o.attributes.nbItems))+" ")])])}}])},[e("HeaderNavigation",{key:"navigation",attrs:{slot:"header",loading:t.loadingCollections,title:t.t("photos","Places"),"root-title":t.t("photos","Places")},on:{refresh:t.fetchPlaces},slot:"header"}),e("NcEmptyContent",{attrs:{slot:"empty-collections-list",name:t.t("photos","There is no place yet!")},slot:"empty-collections-list"},[e("ImageMultipleOutline",{attrs:{slot:"icon"},slot:"icon"})],1)],1)],1)},v=[],C=n(u,d,v,!1,null,"6fbdde2a");const E=C.exports;export{E as default};
-//# sourceMappingURL=PlacesView-DehMSNPa.chunk.mjs.map
+import{h as s,t as a,k as l}from"./preload-helper-iHri5ttz.chunk.mjs";import{N as i}from"./NcEmptyContent-BkpeWiV5.chunk.mjs";import{I as r,n}from"./icons-BPrPKxzl.chunk.mjs";import{C as c,a as p}from"./CollectionsList-CiIbYZgv.chunk.mjs";import{H as m}from"./HeaderNavigation-6G2FmN95.chunk.mjs";import{F as h}from"./FetchCollectionsMixin-BuJ7c1sd.chunk.mjs";import{D as f}from"./index-6_vkf3an.chunk.mjs";import"./createElementId-DhjFt1I9-B2HCdIOx.chunk.mjs";import"./video-CFxEyJH4.chunk.mjs";import"./index-DjIio1qt.chunk.mjs";import"./collectionFetcher-DyDb1Dp2.chunk.mjs";import"./AbortControllerMixin-CCU9Utyn.chunk.mjs";const u={name:"PlacesView",components:{ImageMultipleOutline:r,NcEmptyContent:i,CollectionsList:p,CollectionCover:c,HeaderNavigation:m},filters:{coverUrl(t){return t===-1?"":l(`/apps/photos/api/v1/preview/${t}?x=512&y=512`)}},mixins:[h],computed:{places(){return this.$store.getters.places}},async beforeMount(){this.fetchPlaces()},methods:{fetchPlaces(){this.fetchCollections(f)},t:a,n:s}};var d=function(){var t=this,e=t._self._c;return e("div",[e("CollectionsList",{staticClass:"places-list",attrs:{collections:t.places,loading:t.loadingCollections,error:t.errorFetchingCollections},scopedSlots:t._u([{key:"default",fn:function({collection:o}){return e("CollectionCover",{key:o.basename,attrs:{"parent-route":"/places","collection-name":o.basename,"alt-img":t.t("photos","Cover photo for place {placeName}",{placeName:o.basename}),"cover-url":t._f("coverUrl")(o.attributes["last-photo"])}},[e("span",{staticClass:"place__name"},[t._v(" "+t._s(o.basename)+" ")]),e("div",{staticClass:"place__details",attrs:{slot:"subtitle"},slot:"subtitle"},[t._v(" "+t._s(t.n("photos","%n item","%n photos and videos",o.attributes.nbItems))+" ")])])}}])},[e("HeaderNavigation",{key:"navigation",attrs:{slot:"header",loading:t.loadingCollections,title:t.t("photos","Places"),"root-title":t.t("photos","Places")},on:{refresh:t.fetchPlaces},slot:"header"}),e("NcEmptyContent",{attrs:{slot:"empty-collections-list",name:t.t("photos","There is no place yet!")},slot:"empty-collections-list"},[e("ImageMultipleOutline",{attrs:{slot:"icon"},slot:"icon"})],1)],1)],1)},v=[],C=n(u,d,v,!1,null,"6fbdde2a");const E=C.exports;export{E as default};
+//# sourceMappingURL=PlacesView-BYizGYrO.chunk.mjs.map
diff --git a/js/PlacesView-DehMSNPa.chunk.mjs.license b/js/PlacesView-BYizGYrO.chunk.mjs.license
similarity index 100%
rename from js/PlacesView-DehMSNPa.chunk.mjs.license
rename to js/PlacesView-BYizGYrO.chunk.mjs.license
diff --git a/js/PlacesView-DehMSNPa.chunk.mjs.map b/js/PlacesView-BYizGYrO.chunk.mjs.map
similarity index 98%
rename from js/PlacesView-DehMSNPa.chunk.mjs.map
rename to js/PlacesView-BYizGYrO.chunk.mjs.map
index 1857ed89cd..fe6de5d1e1 100644
--- a/js/PlacesView-DehMSNPa.chunk.mjs.map
+++ b/js/PlacesView-BYizGYrO.chunk.mjs.map
@@ -1 +1 @@
-{"version":3,"file":"PlacesView-DehMSNPa.chunk.mjs","sources":["../src/views/PlacesView.vue"],"sourcesContent":["\n\n\t
\n\t\t\t\t\t{{ n('photos', '%n item', '%n photos and videos', collection.attributes.nbItems) }}\n\t\t\t\t
\n\t\t\t\n\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t
\n\n\n\n\n\n"],"names":["_sfc_main","ImageMultipleOutline","NcEmptyContent","CollectionsList","CollectionCover","HeaderNavigation","fileId","generateUrl","FetchCollectionsMixin","placesPrefix","translate","translatePlural"],"mappings":"onBAsDA,MAAAA,EAAA,CACA,KAAA,aACA,WAAA,CACA,qBAAAC,EACA,eAAAC,EACA,gBAAAC,EACA,gBAAAC,EACA,iBAAAC,CAAA,EAGA,QAAA,CACA,SAAAC,EAAA,CACA,OAAAA,IAAA,GACA,GAGAC,EAAA,+BAAAD,CAAA,cAAA,CACA,CAAA,EAGA,OAAA,CAAAE,CAAA,EAEA,SAAA,CACA,QAAA,CACA,OAAA,KAAA,OAAA,QAAA,MACA,CAAA,EAGA,MAAA,aAAA,CACA,KAAA,YAAA,CACA,EAEA,QAAA,CACA,aAAA,CACA,KAAA,iBAAAC,CAAA,CACA,EAEA,EAAAC,EACA,EAAAC,CAAA,CAEA"}
\ No newline at end of file
+{"version":3,"file":"PlacesView-BYizGYrO.chunk.mjs","sources":["../src/views/PlacesView.vue"],"sourcesContent":["\n\n\t
\n\t\t\t\t\t{{ n('photos', '%n item', '%n photos and videos', collection.attributes.nbItems) }}\n\t\t\t\t
\n\t\t\t\n\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t
\n\n\n\n\n\n"],"names":["_sfc_main","ImageMultipleOutline","NcEmptyContent","CollectionsList","CollectionCover","HeaderNavigation","fileId","generateUrl","FetchCollectionsMixin","placesPrefix","translate","translatePlural"],"mappings":"onBAsDA,MAAAA,EAAA,CACA,KAAA,aACA,WAAA,CACA,qBAAAC,EACA,eAAAC,EACA,gBAAAC,EACA,gBAAAC,EACA,iBAAAC,CAAA,EAGA,QAAA,CACA,SAAAC,EAAA,CACA,OAAAA,IAAA,GACA,GAGAC,EAAA,+BAAAD,CAAA,cAAA,CACA,CAAA,EAGA,OAAA,CAAAE,CAAA,EAEA,SAAA,CACA,QAAA,CACA,OAAA,KAAA,OAAA,QAAA,MACA,CAAA,EAGA,MAAA,aAAA,CACA,KAAA,YAAA,CACA,EAEA,QAAA,CACA,aAAA,CACA,KAAA,iBAAAC,CAAA,CACA,EAEA,EAAAC,EACA,EAAAC,CAAA,CAEA"}
\ No newline at end of file
diff --git a/js/PublicAlbumContent-CZkNPobM.chunk.mjs b/js/PublicAlbumContent-D54gCfLM.chunk.mjs
similarity index 99%
rename from js/PublicAlbumContent-CZkNPobM.chunk.mjs
rename to js/PublicAlbumContent-D54gCfLM.chunk.mjs
index 5042c485d7..467210072b 100644
--- a/js/PublicAlbumContent-CZkNPobM.chunk.mjs
+++ b/js/PublicAlbumContent-D54gCfLM.chunk.mjs
@@ -1,8 +1,8 @@
-import{j as an,ad as un,ag as cn,t as ln,k as hn,H as mn,g as dn}from"./preload-helper-iHri5ttz.chunk.mjs";import"./NcActionButton-K4jUGMlW-Bs_jOwCM.chunk.mjs";import{r as A,aJ as fn,aK as bi,t as k,aM as pn,aN as Ci,aO as gn,aP as vn,aQ as yn,aR as wn,aS as Ei,aT as ki,aU as jn,aV as bn,aW as Cn,aX as En,aY as kn,aZ as _n,a_ as An,K as _i,a$ as Sn,b0 as xn,H as ke,b1 as On,b2 as ai,b3 as Pn,b4 as Fn,au as Tn,b5 as Ln,b6 as Bn,b7 as Dn,a1 as In,b8 as Nn,b9 as Rn,ba as Ft,bb as zn,A as Mn,bc as ui,B as Hn,bd as ci}from"./index-6_vkf3an.chunk.mjs";import"./NcProgressBar-D7zYeXBH-Bj5rIFx5.chunk.mjs";import"./NcBreadcrumbs-CesoXxTs-DQcjiANF.chunk.mjs";import{C as dt}from"./NcAvatar-DkAX4nqq-B0poB0w8.chunk.mjs";import"./video-B7iCXJqN.chunk.mjs";import"./NcFormBoxButton-BlS280R1-CT5HUra0.chunk.mjs";import"./useHotKey-CPjpPwsD.chunk.mjs";import"./NcTextField-Czr9S6YO-RwCaeh-_.chunk.mjs";import"./NcCheckboxRadioSwitch-D4IV4zWy-CSDAL8Yg.chunk.mjs";import{N as qn}from"./NcEmptyContent-BkpeWiV5.chunk.mjs";import"./createElementId-DhjFt1I9-B2HCdIOx.chunk.mjs";import{E as Un}from"./index-BSfP607A.chunk.mjs";import{N as $n}from"./NcSelect-CHc1QupB-BHJEUvv_.chunk.mjs";import"./NcColorPicker-CF17dQ48.chunk.mjs";import"./NcListItem-CaosvdEe-C-ofnpX3.chunk.mjs";import"./useFormatDateTime-DyMeKy1D.chunk.mjs";import"./NcDateTimePicker-BnrbGiT7.chunk.mjs";import"./NcIconToggleSwitch-0NTw7i-t-DOrRmNgh.chunk.mjs";import{b as Wn}from"./index-DjIio1qt.chunk.mjs";import"./NcSelectUsers-B4w9UC_d-BckswLS_.chunk.mjs";import{d as Kn}from"./index-K61t94YW.chunk.mjs";import"./NcUserBubble-BGfZAi4c-azL-EDwM.chunk.mjs";import{a0 as Vn,M as Gn,n as Qn}from"./icons-BPrPKxzl.chunk.mjs";import{C as Yn}from"./CollectionContent-DBHf8FYU.chunk.mjs";import{H as Jn}from"./HeaderNavigation-6G2FmN95.chunk.mjs";import{F as Zn}from"./FetchCollectionContentMixin-B2MWChoj.chunk.mjs";import"./useModelMigration-EhAWvqDD-C15wbtL_.chunk.mjs";import"./NcVNodes-Cmft-jHc.chunk.mjs";import"./FileComponent-Bw4ZFXMR.chunk.mjs";import"./FilesSelectionMixin-GHX9hTKF.chunk.mjs";import"./fileFetcher-p0a3IV9C.chunk.mjs";import"./collectionFetcher-DyDb1Dp2.chunk.mjs";import"./AbortControllerMixin-CCU9Utyn.chunk.mjs";A(),A(bi,fn);k("Search …"),A(pn),k("Settings"),A(Ci);const Xn="aaa1rp3bb0ott3vie4c1le2ogado5udhabi7c0ademy5centure6ountant0s9o1tor4d0s1ult4e0g1ro2tna4f0l1rica5g0akhan5ency5i0g1rbus3force5tel5kdn3l0ibaba4pay4lfinanz6state5y2sace3tom5m0azon4ericanexpress7family11x2fam3ica3sterdam8nalytics7droid5quan4z2o0l2partments8p0le4q0uarelle8r0ab1mco4chi3my2pa2t0e3s0da2ia2sociates9t0hleta5torney7u0ction5di0ble3o3spost5thor3o0s4w0s2x0a2z0ure5ba0by2idu3namex4d1k2r0celona5laycard4s5efoot5gains6seball5ketball8uhaus5yern5b0c1t1va3cg1n2d1e0ats2uty4er2rlin4st0buy5t2f1g1h0arti5i0ble3d1ke2ng0o3o1z2j1lack0friday9ockbuster8g1omberg7ue3m0s1w2n0pparibas9o0ats3ehringer8fa2m1nd2o0k0ing5sch2tik2on4t1utique6x2r0adesco6idgestone9oadway5ker3ther5ussels7s1t1uild0ers6siness6y1zz3v1w1y1z0h3ca0b1fe2l0l1vinklein9m0era3p2non3petown5ital0one8r0avan4ds2e0er0s4s2sa1e1h1ino4t0ering5holic7ba1n1re3c1d1enter4o1rn3f0a1d2g1h0anel2nel4rity4se2t2eap3intai5ristmas6ome4urch5i0priani6rcle4sco3tadel4i0c2y3k1l0aims4eaning6ick2nic1que6othing5ud3ub0med6m1n1o0ach3des3ffee4llege4ogne5m0mbank4unity6pany2re3uter5sec4ndos3struction8ulting7tact3ractors9oking4l1p2rsica5untry4pon0s4rses6pa2r0edit0card4union9icket5own3s1uise0s6u0isinella9v1w1x1y0mru3ou3z2dad1nce3ta1e1ing3sun4y2clk3ds2e0al0er2s3gree4livery5l1oitte5ta3mocrat6ntal2ist5si0gn4v2hl2iamonds6et2gital5rect0ory7scount3ver5h2y2j1k1m1np2o0cs1tor4g1mains5t1wnload7rive4tv2ubai3nlop4pont4rban5vag2r2z2earth3t2c0o2deka3u0cation8e1g1mail3erck5nergy4gineer0ing9terprises10pson4quipment8r0icsson6ni3s0q1tate5t1u0rovision8s2vents5xchange6pert3osed4ress5traspace10fage2il1rwinds6th3mily4n0s2rm0ers5shion4t3edex3edback6rrari3ero6i0delity5o2lm2nal1nce1ial7re0stone6mdale6sh0ing5t0ness6j1k1lickr3ghts4r2orist4wers5y2m1o0o0d1tball6rd1ex2sale4um3undation8x2r0ee1senius7l1ogans4ntier7tr2ujitsu5n0d2rniture7tbol5yi3ga0l0lery3o1up4me0s3p1rden4y2b0iz3d0n2e0a1nt0ing5orge5f1g0ee3h1i0ft0s3ves2ing5l0ass3e1obal2o4m0ail3bh2o1x2n1odaddy5ld0point6f2o0dyear5g0le4p1t1v2p1q1r0ainger5phics5tis4een3ipe3ocery4up4s1t1u0cci3ge2ide2tars5ru3w1y2hair2mburg5ngout5us3bo2dfc0bank7ealth0care8lp1sinki6re1mes5iphop4samitsu7tachi5v2k0t2m1n1ockey4ldings5iday5medepot5goods5s0ense7nda3rse3spital5t0ing5t0els3mail5use3w2r1sbc3t1u0ghes5yatt3undai7ibm2cbc2e1u2d1e0ee3fm2kano4l1m0amat4db2mo0bilien9n0c1dustries8finiti5o2g1k1stitute6urance4e4t0ernational10uit4vestments10o1piranga7q1r0ish4s0maili5t0anbul7t0au2v3jaguar4va3cb2e0ep2tzt3welry6io2ll2m0p2nj2o0bs1urg4t1y2p0morgan6rs3uegos4niper7kaufen5ddi3e0rryhotels6properties14fh2g1h1i0a1ds2m1ndle4tchen5wi3m1n1oeln3matsu5sher5p0mg2n2r0d1ed3uokgroup8w1y0oto4z2la0caixa5mborghini8er3nd0rover6xess5salle5t0ino3robe5w0yer5b1c1ds2ease3clerc5frak4gal2o2xus4gbt3i0dl2fe0insurance9style7ghting6ke2lly3mited4o2ncoln4k2ve1ing5k1lc1p2oan0s3cker3us3l1ndon4tte1o3ve3pl0financial11r1s1t0d0a3u0ndbeck6xe1ury5v1y2ma0drid4if1son4keup4n0agement7go3p1rket0ing3s4riott5shalls7ttel5ba2c0kinsey7d1e0d0ia3et2lbourne7me1orial6n0u2rckmsd7g1h1iami3crosoft7l1ni1t2t0subishi9k1l0b1s2m0a2n1o0bi0le4da2e1i1m1nash3ey2ster5rmon3tgage6scow4to0rcycles9v0ie4p1q1r1s0d2t0n1r2u0seum3ic4v1w1x1y1z2na0b1goya4me2vy3ba2c1e0c1t0bank4flix4work5ustar5w0s2xt0direct7us4f0l2g0o2hk2i0co2ke1on3nja3ssan1y5l1o0kia3rton4w0ruz3tv4p1r0a1w2tt2u1yc2z2obi1server7ffice5kinawa6layan0group9lo3m0ega4ne1g1l0ine5oo2pen3racle3nge4g0anic5igins6saka4tsuka4t2vh3pa0ge2nasonic7ris2s1tners4s1y3y2ccw3e0t2f0izer5g1h0armacy6d1ilips5one2to0graphy6s4ysio5ics1tet2ures6d1n0g1k2oneer5zza4k1l0ace2y0station9umbing5s3m1n0c2ohl2ker3litie5rn2st3r0axi3ess3ime3o0d0uctions8f1gressive8mo2perties3y5tection8u0dential9s1t1ub2w0c2y2qa1pon3uebec3st5racing4dio4e0ad1lestate6tor2y4cipes5d0stone5umbrella9hab3ise0n3t2liance6n0t0als5pair3ort3ublican8st0aurant8view0s5xroth6ich0ardli6oh3l1o1p2o0cks3deo3gers4om3s0vp3u0gby3hr2n2w0e2yukyu6sa0arland6fe0ty4kura4le1on3msclub4ung5ndvik0coromant12ofi4p1rl2s1ve2xo3b0i1s2c0b1haeffler7midt4olarships8ol3ule3warz5ience5ot3d1e0arch3t2cure1ity6ek2lect4ner3rvices6ven3w1x0y3fr2g1h0angrila6rp3ell3ia1ksha5oes2p0ping5uji3w3i0lk2na1gles5te3j1k0i0n2y0pe4l0ing4m0art3ile4n0cf3o0ccer3ial4ftbank4ware6hu2lar2utions7ng1y2y2pa0ce3ort2t3r0l2s1t0ada2ples4r1tebank4farm7c0group6ockholm6rage3e3ream4udio2y3yle4u0cks3pplies3y2ort5rf1gery5zuki5v1watch4iss4x1y0dney4stems6z2tab1ipei4lk2obao4rget4tamotors6r2too4x0i3c0i2d0k2eam2ch0nology8l1masek5nnis4va3f1g1h0d1eater2re6iaa2ckets5enda4ps2res2ol4j0maxx4x2k0maxx5l1m0all4n1o0day3kyo3ols3p1ray3shiba5tal3urs3wn2yota3s3r0ade1ing4ining5vel0ers0insurance16ust3v2t1ube2i1nes3shu4v0s2w1z2ua1bank3s2g1k1nicom3versity8o2ol2ps2s1y1z2va0cations7na1guard7c1e0gas3ntures6risign5mögensberater2ung14sicherung10t2g1i0ajes4deo3g1king4llas4n1p1rgin4sa1ion4va1o3laanderen9n1odka3lvo3te1ing3o2yage5u2wales2mart4ter4ng0gou5tch0es6eather0channel12bcam3er2site5d0ding5ibo2r3f1hoswho6ien2ki2lliamhill9n0dows4e1ners6me2olterskluwer11odside6rk0s2ld3w2s1tc1f3xbox3erox4ihuan4n2xx2yz3yachts4hoo3maxun5ndex5e1odobashi7ga2kohama6u0tube6t1un3za0ppos4ra3ero3ip2m1one3uerich6w2",tr="ελ1υ2бг1ел3дети4ею2католик6ом3мкд2он1сква6онлайн5рг3рус2ф2сайт3рб3укр3қаз3հայ3ישראל5קום3ابوظبي5رامكو5لاردن4بحرين5جزائر5سعودية6عليان5مغرب5مارات5یران5بارت2زار4يتك3ھارت5تونس4سودان3رية5شبكة4عراق2ب2مان4فلسطين6قطر3كاثوليك6وم3مصر2ليسيا5وريتانيا7قع4همراه5پاکستان7ڀارت4कॉम3नेट3भारत0म्3ोत5संगठन5বাংলা5ভারত2ৰত4ਭਾਰਤ4ભારત4ଭାରତ4இந்தியா6லங்கை6சிங்கப்பூர்11భారత్5ಭಾರತ4ഭാരതം5ලංකා4คอม3ไทย3ລາວ3გე2みんな3アマゾン4クラウド4グーグル4コム2ストア3セール3ファッション6ポイント4世界2中信1国1國1文网3亚马逊3企业2佛山2信息2健康2八卦2公司1益2台湾1灣2商城1店1标2嘉里0大酒店5在线2大拿2天主教3娱乐2家電2广东2微博2慈善2我爱你3手机2招聘2政务1府2新加坡2闻2时尚2書籍2机构2淡马锡3游戏2澳門2点看2移动2组织机构4网址1店1站1络2联通2谷歌2购物2通販2集团2電訊盈科4飞利浦3食品2餐厅2香格里拉3港2닷넷1컴2삼성2한국2",_e="numeric",Ae="ascii",Se="alpha",jt="asciinumeric",wt="alphanumeric",xe="domain",Ai="emoji",er="scheme",ir="slashscheme",ye="whitespace";function nr(e,n){return e in n||(n[e]=[]),n[e]}function ot(e,n,i){n[_e]&&(n[jt]=!0,n[wt]=!0),n[Ae]&&(n[jt]=!0,n[Se]=!0),n[jt]&&(n[wt]=!0),n[Se]&&(n[wt]=!0),n[wt]&&(n[xe]=!0),n[Ai]&&(n[xe]=!0);for(const s in n){const a=nr(s,i);a.indexOf(e)<0&&a.push(e)}}function rr(e,n){const i={};for(const s in n)n[s].indexOf(e)>=0&&(i[s]=!0);return i}function N(e=null){this.j={},this.jr=[],this.jd=null,this.t=e}N.groups={},N.prototype={accepts(){return!!this.t},go(e){const n=this,i=n.j[e];if(i)return i;for(let s=0;se.ta(n,i,s,a),O=(e,n,i,s,a)=>e.tr(n,i,s,a),li=(e,n,i,s,a)=>e.ts(n,i,s,a),m=(e,n,i,s,a)=>e.tt(n,i,s,a),Q="WORD",Oe="UWORD",Si="ASCIINUMERICAL",xi="ALPHANUMERICAL",At="LOCALHOST",Pe="TLD",Fe="UTLD",Dt="SCHEME",ft="SLASH_SCHEME",De="NUM",Te="WS",Ie="NL",bt="OPENBRACE",Ct="CLOSEBRACE",It="OPENBRACKET",Nt="CLOSEBRACKET",Rt="OPENPAREN",zt="CLOSEPAREN",Mt="OPENANGLEBRACKET",Ht="CLOSEANGLEBRACKET",qt="FULLWIDTHLEFTPAREN",Ut="FULLWIDTHRIGHTPAREN",$t="LEFTCORNERBRACKET",Wt="RIGHTCORNERBRACKET",Kt="LEFTWHITECORNERBRACKET",Vt="RIGHTWHITECORNERBRACKET",Gt="FULLWIDTHLESSTHAN",Qt="FULLWIDTHGREATERTHAN",Yt="AMPERSAND",Jt="APOSTROPHE",Zt="ASTERISK",X="AT",Xt="BACKSLASH",te="BACKTICK",ee="CARET",tt="COLON",Ne="COMMA",ie="DOLLAR",$="DOT",ne="EQUALS",Re="EXCLAMATION",z="HYPHEN",Et="PERCENT",re="PIPE",oe="PLUS",se="POUND",kt="QUERY",ze="QUOTE",Oi="FULLWIDTHMIDDLEDOT",Me="SEMI",W="SLASH",_t="TILDE",ae="UNDERSCORE",Pi="EMOJI",ue="SYM";var Fi=Object.freeze({__proto__:null,ALPHANUMERICAL:xi,AMPERSAND:Yt,APOSTROPHE:Jt,ASCIINUMERICAL:Si,ASTERISK:Zt,AT:X,BACKSLASH:Xt,BACKTICK:te,CARET:ee,CLOSEANGLEBRACKET:Ht,CLOSEBRACE:Ct,CLOSEBRACKET:Nt,CLOSEPAREN:zt,COLON:tt,COMMA:Ne,DOLLAR:ie,DOT:$,EMOJI:Pi,EQUALS:ne,EXCLAMATION:Re,FULLWIDTHGREATERTHAN:Qt,FULLWIDTHLEFTPAREN:qt,FULLWIDTHLESSTHAN:Gt,FULLWIDTHMIDDLEDOT:Oi,FULLWIDTHRIGHTPAREN:Ut,HYPHEN:z,LEFTCORNERBRACKET:$t,LEFTWHITECORNERBRACKET:Kt,LOCALHOST:At,NL:Ie,NUM:De,OPENANGLEBRACKET:Mt,OPENBRACE:bt,OPENBRACKET:It,OPENPAREN:Rt,PERCENT:Et,PIPE:re,PLUS:oe,POUND:se,QUERY:kt,QUOTE:ze,RIGHTCORNERBRACKET:Wt,RIGHTWHITECORNERBRACKET:Vt,SCHEME:Dt,SEMI:Me,SLASH:W,SLASH_SCHEME:ft,SYM:ue,TILDE:_t,TLD:Pe,UNDERSCORE:ae,UTLD:Fe,UWORD:Oe,WORD:Q,WS:Te});const V=/[a-z]/,yt=new RegExp("\\p{L}","u"),we=new RegExp("\\p{Emoji}","u"),G=/\d/,je=/\s/,hi="\r",be=`
+import{j as an,ad as un,ag as cn,t as ln,k as hn,H as mn,g as dn}from"./preload-helper-iHri5ttz.chunk.mjs";import"./NcActionButton-K4jUGMlW-Bs_jOwCM.chunk.mjs";import{r as A,aJ as fn,aK as bi,t as k,aM as pn,aN as Ci,aO as gn,aP as vn,aQ as yn,aR as wn,aS as Ei,aT as ki,aU as jn,aV as bn,aW as Cn,aX as En,aY as kn,aZ as _n,a_ as An,K as _i,a$ as Sn,b0 as xn,H as ke,b1 as On,b2 as ai,b3 as Pn,b4 as Fn,au as Tn,b5 as Ln,b6 as Bn,b7 as Dn,a1 as In,b8 as Nn,b9 as Rn,ba as Ft,bb as zn,A as Mn,bc as ui,B as Hn,bd as ci}from"./index-6_vkf3an.chunk.mjs";import"./NcProgressBar-D7zYeXBH-Bj5rIFx5.chunk.mjs";import"./NcBreadcrumbs-CesoXxTs-DQcjiANF.chunk.mjs";import{C as dt}from"./NcAvatar-DkAX4nqq-B0poB0w8.chunk.mjs";import"./video-CFxEyJH4.chunk.mjs";import"./NcFormBoxButton-BlS280R1-SHqQNUOS.chunk.mjs";import"./useHotKey-CPjpPwsD.chunk.mjs";import"./NcTextField-Czr9S6YO-RwCaeh-_.chunk.mjs";import"./NcCheckboxRadioSwitch-D4IV4zWy-CSDAL8Yg.chunk.mjs";import{N as qn}from"./NcEmptyContent-BkpeWiV5.chunk.mjs";import"./createElementId-DhjFt1I9-B2HCdIOx.chunk.mjs";import{E as Un}from"./index-BSfP607A.chunk.mjs";import{N as $n}from"./NcSelect-CHc1QupB-BHJEUvv_.chunk.mjs";import"./NcColorPicker-CF17dQ48.chunk.mjs";import"./NcListItem-CaosvdEe-C-ofnpX3.chunk.mjs";import"./useFormatDateTime-DyMeKy1D.chunk.mjs";import"./NcDateTimePicker-BnrbGiT7.chunk.mjs";import"./NcIconToggleSwitch-0NTw7i-t-DOrRmNgh.chunk.mjs";import{b as Wn}from"./index-DjIio1qt.chunk.mjs";import"./NcSelectUsers-B4w9UC_d-BckswLS_.chunk.mjs";import{d as Kn}from"./index-K61t94YW.chunk.mjs";import"./NcUserBubble-BGfZAi4c-BGVx_Zba.chunk.mjs";import{a0 as Vn,M as Gn,n as Qn}from"./icons-BPrPKxzl.chunk.mjs";import{C as Yn}from"./CollectionContent-DBHf8FYU.chunk.mjs";import{H as Jn}from"./HeaderNavigation-6G2FmN95.chunk.mjs";import{F as Zn}from"./FetchCollectionContentMixin-B2MWChoj.chunk.mjs";import"./useModelMigration-EhAWvqDD-C15wbtL_.chunk.mjs";import"./NcVNodes-Cmft-jHc.chunk.mjs";import"./FileComponent-Bw4ZFXMR.chunk.mjs";import"./FilesSelectionMixin-GHX9hTKF.chunk.mjs";import"./fileFetcher-p0a3IV9C.chunk.mjs";import"./collectionFetcher-DyDb1Dp2.chunk.mjs";import"./AbortControllerMixin-CCU9Utyn.chunk.mjs";A(),A(bi,fn);k("Search …"),A(pn),k("Settings"),A(Ci);const Xn="aaa1rp3bb0ott3vie4c1le2ogado5udhabi7c0ademy5centure6ountant0s9o1tor4d0s1ult4e0g1ro2tna4f0l1rica5g0akhan5ency5i0g1rbus3force5tel5kdn3l0ibaba4pay4lfinanz6state5y2sace3tom5m0azon4ericanexpress7family11x2fam3ica3sterdam8nalytics7droid5quan4z2o0l2partments8p0le4q0uarelle8r0ab1mco4chi3my2pa2t0e3s0da2ia2sociates9t0hleta5torney7u0ction5di0ble3o3spost5thor3o0s4w0s2x0a2z0ure5ba0by2idu3namex4d1k2r0celona5laycard4s5efoot5gains6seball5ketball8uhaus5yern5b0c1t1va3cg1n2d1e0ats2uty4er2rlin4st0buy5t2f1g1h0arti5i0ble3d1ke2ng0o3o1z2j1lack0friday9ockbuster8g1omberg7ue3m0s1w2n0pparibas9o0ats3ehringer8fa2m1nd2o0k0ing5sch2tik2on4t1utique6x2r0adesco6idgestone9oadway5ker3ther5ussels7s1t1uild0ers6siness6y1zz3v1w1y1z0h3ca0b1fe2l0l1vinklein9m0era3p2non3petown5ital0one8r0avan4ds2e0er0s4s2sa1e1h1ino4t0ering5holic7ba1n1re3c1d1enter4o1rn3f0a1d2g1h0anel2nel4rity4se2t2eap3intai5ristmas6ome4urch5i0priani6rcle4sco3tadel4i0c2y3k1l0aims4eaning6ick2nic1que6othing5ud3ub0med6m1n1o0ach3des3ffee4llege4ogne5m0mbank4unity6pany2re3uter5sec4ndos3struction8ulting7tact3ractors9oking4l1p2rsica5untry4pon0s4rses6pa2r0edit0card4union9icket5own3s1uise0s6u0isinella9v1w1x1y0mru3ou3z2dad1nce3ta1e1ing3sun4y2clk3ds2e0al0er2s3gree4livery5l1oitte5ta3mocrat6ntal2ist5si0gn4v2hl2iamonds6et2gital5rect0ory7scount3ver5h2y2j1k1m1np2o0cs1tor4g1mains5t1wnload7rive4tv2ubai3nlop4pont4rban5vag2r2z2earth3t2c0o2deka3u0cation8e1g1mail3erck5nergy4gineer0ing9terprises10pson4quipment8r0icsson6ni3s0q1tate5t1u0rovision8s2vents5xchange6pert3osed4ress5traspace10fage2il1rwinds6th3mily4n0s2rm0ers5shion4t3edex3edback6rrari3ero6i0delity5o2lm2nal1nce1ial7re0stone6mdale6sh0ing5t0ness6j1k1lickr3ghts4r2orist4wers5y2m1o0o0d1tball6rd1ex2sale4um3undation8x2r0ee1senius7l1ogans4ntier7tr2ujitsu5n0d2rniture7tbol5yi3ga0l0lery3o1up4me0s3p1rden4y2b0iz3d0n2e0a1nt0ing5orge5f1g0ee3h1i0ft0s3ves2ing5l0ass3e1obal2o4m0ail3bh2o1x2n1odaddy5ld0point6f2o0dyear5g0le4p1t1v2p1q1r0ainger5phics5tis4een3ipe3ocery4up4s1t1u0cci3ge2ide2tars5ru3w1y2hair2mburg5ngout5us3bo2dfc0bank7ealth0care8lp1sinki6re1mes5iphop4samitsu7tachi5v2k0t2m1n1ockey4ldings5iday5medepot5goods5s0ense7nda3rse3spital5t0ing5t0els3mail5use3w2r1sbc3t1u0ghes5yatt3undai7ibm2cbc2e1u2d1e0ee3fm2kano4l1m0amat4db2mo0bilien9n0c1dustries8finiti5o2g1k1stitute6urance4e4t0ernational10uit4vestments10o1piranga7q1r0ish4s0maili5t0anbul7t0au2v3jaguar4va3cb2e0ep2tzt3welry6io2ll2m0p2nj2o0bs1urg4t1y2p0morgan6rs3uegos4niper7kaufen5ddi3e0rryhotels6properties14fh2g1h1i0a1ds2m1ndle4tchen5wi3m1n1oeln3matsu5sher5p0mg2n2r0d1ed3uokgroup8w1y0oto4z2la0caixa5mborghini8er3nd0rover6xess5salle5t0ino3robe5w0yer5b1c1ds2ease3clerc5frak4gal2o2xus4gbt3i0dl2fe0insurance9style7ghting6ke2lly3mited4o2ncoln4k2ve1ing5k1lc1p2oan0s3cker3us3l1ndon4tte1o3ve3pl0financial11r1s1t0d0a3u0ndbeck6xe1ury5v1y2ma0drid4if1son4keup4n0agement7go3p1rket0ing3s4riott5shalls7ttel5ba2c0kinsey7d1e0d0ia3et2lbourne7me1orial6n0u2rckmsd7g1h1iami3crosoft7l1ni1t2t0subishi9k1l0b1s2m0a2n1o0bi0le4da2e1i1m1nash3ey2ster5rmon3tgage6scow4to0rcycles9v0ie4p1q1r1s0d2t0n1r2u0seum3ic4v1w1x1y1z2na0b1goya4me2vy3ba2c1e0c1t0bank4flix4work5ustar5w0s2xt0direct7us4f0l2g0o2hk2i0co2ke1on3nja3ssan1y5l1o0kia3rton4w0ruz3tv4p1r0a1w2tt2u1yc2z2obi1server7ffice5kinawa6layan0group9lo3m0ega4ne1g1l0ine5oo2pen3racle3nge4g0anic5igins6saka4tsuka4t2vh3pa0ge2nasonic7ris2s1tners4s1y3y2ccw3e0t2f0izer5g1h0armacy6d1ilips5one2to0graphy6s4ysio5ics1tet2ures6d1n0g1k2oneer5zza4k1l0ace2y0station9umbing5s3m1n0c2ohl2ker3litie5rn2st3r0axi3ess3ime3o0d0uctions8f1gressive8mo2perties3y5tection8u0dential9s1t1ub2w0c2y2qa1pon3uebec3st5racing4dio4e0ad1lestate6tor2y4cipes5d0stone5umbrella9hab3ise0n3t2liance6n0t0als5pair3ort3ublican8st0aurant8view0s5xroth6ich0ardli6oh3l1o1p2o0cks3deo3gers4om3s0vp3u0gby3hr2n2w0e2yukyu6sa0arland6fe0ty4kura4le1on3msclub4ung5ndvik0coromant12ofi4p1rl2s1ve2xo3b0i1s2c0b1haeffler7midt4olarships8ol3ule3warz5ience5ot3d1e0arch3t2cure1ity6ek2lect4ner3rvices6ven3w1x0y3fr2g1h0angrila6rp3ell3ia1ksha5oes2p0ping5uji3w3i0lk2na1gles5te3j1k0i0n2y0pe4l0ing4m0art3ile4n0cf3o0ccer3ial4ftbank4ware6hu2lar2utions7ng1y2y2pa0ce3ort2t3r0l2s1t0ada2ples4r1tebank4farm7c0group6ockholm6rage3e3ream4udio2y3yle4u0cks3pplies3y2ort5rf1gery5zuki5v1watch4iss4x1y0dney4stems6z2tab1ipei4lk2obao4rget4tamotors6r2too4x0i3c0i2d0k2eam2ch0nology8l1masek5nnis4va3f1g1h0d1eater2re6iaa2ckets5enda4ps2res2ol4j0maxx4x2k0maxx5l1m0all4n1o0day3kyo3ols3p1ray3shiba5tal3urs3wn2yota3s3r0ade1ing4ining5vel0ers0insurance16ust3v2t1ube2i1nes3shu4v0s2w1z2ua1bank3s2g1k1nicom3versity8o2ol2ps2s1y1z2va0cations7na1guard7c1e0gas3ntures6risign5mögensberater2ung14sicherung10t2g1i0ajes4deo3g1king4llas4n1p1rgin4sa1ion4va1o3laanderen9n1odka3lvo3te1ing3o2yage5u2wales2mart4ter4ng0gou5tch0es6eather0channel12bcam3er2site5d0ding5ibo2r3f1hoswho6ien2ki2lliamhill9n0dows4e1ners6me2olterskluwer11odside6rk0s2ld3w2s1tc1f3xbox3erox4ihuan4n2xx2yz3yachts4hoo3maxun5ndex5e1odobashi7ga2kohama6u0tube6t1un3za0ppos4ra3ero3ip2m1one3uerich6w2",tr="ελ1υ2бг1ел3дети4ею2католик6ом3мкд2он1сква6онлайн5рг3рус2ф2сайт3рб3укр3қаз3հայ3ישראל5קום3ابوظبي5رامكو5لاردن4بحرين5جزائر5سعودية6عليان5مغرب5مارات5یران5بارت2زار4يتك3ھارت5تونس4سودان3رية5شبكة4عراق2ب2مان4فلسطين6قطر3كاثوليك6وم3مصر2ليسيا5وريتانيا7قع4همراه5پاکستان7ڀارت4कॉम3नेट3भारत0म्3ोत5संगठन5বাংলা5ভারত2ৰত4ਭਾਰਤ4ભારત4ଭାରତ4இந்தியா6லங்கை6சிங்கப்பூர்11భారత్5ಭಾರತ4ഭാരതം5ලංකා4คอม3ไทย3ລາວ3გე2みんな3アマゾン4クラウド4グーグル4コム2ストア3セール3ファッション6ポイント4世界2中信1国1國1文网3亚马逊3企业2佛山2信息2健康2八卦2公司1益2台湾1灣2商城1店1标2嘉里0大酒店5在线2大拿2天主教3娱乐2家電2广东2微博2慈善2我爱你3手机2招聘2政务1府2新加坡2闻2时尚2書籍2机构2淡马锡3游戏2澳門2点看2移动2组织机构4网址1店1站1络2联通2谷歌2购物2通販2集团2電訊盈科4飞利浦3食品2餐厅2香格里拉3港2닷넷1컴2삼성2한국2",_e="numeric",Ae="ascii",Se="alpha",jt="asciinumeric",wt="alphanumeric",xe="domain",Ai="emoji",er="scheme",ir="slashscheme",ye="whitespace";function nr(e,n){return e in n||(n[e]=[]),n[e]}function ot(e,n,i){n[_e]&&(n[jt]=!0,n[wt]=!0),n[Ae]&&(n[jt]=!0,n[Se]=!0),n[jt]&&(n[wt]=!0),n[Se]&&(n[wt]=!0),n[wt]&&(n[xe]=!0),n[Ai]&&(n[xe]=!0);for(const s in n){const a=nr(s,i);a.indexOf(e)<0&&a.push(e)}}function rr(e,n){const i={};for(const s in n)n[s].indexOf(e)>=0&&(i[s]=!0);return i}function N(e=null){this.j={},this.jr=[],this.jd=null,this.t=e}N.groups={},N.prototype={accepts(){return!!this.t},go(e){const n=this,i=n.j[e];if(i)return i;for(let s=0;se.ta(n,i,s,a),O=(e,n,i,s,a)=>e.tr(n,i,s,a),li=(e,n,i,s,a)=>e.ts(n,i,s,a),m=(e,n,i,s,a)=>e.tt(n,i,s,a),Q="WORD",Oe="UWORD",Si="ASCIINUMERICAL",xi="ALPHANUMERICAL",At="LOCALHOST",Pe="TLD",Fe="UTLD",Dt="SCHEME",ft="SLASH_SCHEME",De="NUM",Te="WS",Ie="NL",bt="OPENBRACE",Ct="CLOSEBRACE",It="OPENBRACKET",Nt="CLOSEBRACKET",Rt="OPENPAREN",zt="CLOSEPAREN",Mt="OPENANGLEBRACKET",Ht="CLOSEANGLEBRACKET",qt="FULLWIDTHLEFTPAREN",Ut="FULLWIDTHRIGHTPAREN",$t="LEFTCORNERBRACKET",Wt="RIGHTCORNERBRACKET",Kt="LEFTWHITECORNERBRACKET",Vt="RIGHTWHITECORNERBRACKET",Gt="FULLWIDTHLESSTHAN",Qt="FULLWIDTHGREATERTHAN",Yt="AMPERSAND",Jt="APOSTROPHE",Zt="ASTERISK",X="AT",Xt="BACKSLASH",te="BACKTICK",ee="CARET",tt="COLON",Ne="COMMA",ie="DOLLAR",$="DOT",ne="EQUALS",Re="EXCLAMATION",z="HYPHEN",Et="PERCENT",re="PIPE",oe="PLUS",se="POUND",kt="QUERY",ze="QUOTE",Oi="FULLWIDTHMIDDLEDOT",Me="SEMI",W="SLASH",_t="TILDE",ae="UNDERSCORE",Pi="EMOJI",ue="SYM";var Fi=Object.freeze({__proto__:null,ALPHANUMERICAL:xi,AMPERSAND:Yt,APOSTROPHE:Jt,ASCIINUMERICAL:Si,ASTERISK:Zt,AT:X,BACKSLASH:Xt,BACKTICK:te,CARET:ee,CLOSEANGLEBRACKET:Ht,CLOSEBRACE:Ct,CLOSEBRACKET:Nt,CLOSEPAREN:zt,COLON:tt,COMMA:Ne,DOLLAR:ie,DOT:$,EMOJI:Pi,EQUALS:ne,EXCLAMATION:Re,FULLWIDTHGREATERTHAN:Qt,FULLWIDTHLEFTPAREN:qt,FULLWIDTHLESSTHAN:Gt,FULLWIDTHMIDDLEDOT:Oi,FULLWIDTHRIGHTPAREN:Ut,HYPHEN:z,LEFTCORNERBRACKET:$t,LEFTWHITECORNERBRACKET:Kt,LOCALHOST:At,NL:Ie,NUM:De,OPENANGLEBRACKET:Mt,OPENBRACE:bt,OPENBRACKET:It,OPENPAREN:Rt,PERCENT:Et,PIPE:re,PLUS:oe,POUND:se,QUERY:kt,QUOTE:ze,RIGHTCORNERBRACKET:Wt,RIGHTWHITECORNERBRACKET:Vt,SCHEME:Dt,SEMI:Me,SLASH:W,SLASH_SCHEME:ft,SYM:ue,TILDE:_t,TLD:Pe,UNDERSCORE:ae,UTLD:Fe,UWORD:Oe,WORD:Q,WS:Te});const V=/[a-z]/,yt=new RegExp("\\p{L}","u"),we=new RegExp("\\p{Emoji}","u"),G=/\d/,je=/\s/,hi="\r",be=`
`,or="️",sr="",Ce="";let Tt=null,Lt=null;function ar(e=[]){const n={};N.groups=n;const i=new N;Tt==null&&(Tt=mi(Xn)),Lt==null&&(Lt=mi(tr)),m(i,"'",Jt),m(i,"{",bt),m(i,"}",Ct),m(i,"[",It),m(i,"]",Nt),m(i,"(",Rt),m(i,")",zt),m(i,"<",Mt),m(i,">",Ht),m(i,"(",qt),m(i,")",Ut),m(i,"「",$t),m(i,"」",Wt),m(i,"『",Kt),m(i,"』",Vt),m(i,"<",Gt),m(i,">",Qt),m(i,"&",Yt),m(i,"*",Zt),m(i,"@",X),m(i,"`",te),m(i,"^",ee),m(i,":",tt),m(i,",",Ne),m(i,"$",ie),m(i,".",$),m(i,"=",ne),m(i,"!",Re),m(i,"-",z),m(i,"%",Et),m(i,"|",re),m(i,"+",oe),m(i,"#",se),m(i,"?",kt),m(i,'"',ze),m(i,"/",W),m(i,";",Me),m(i,"~",_t),m(i,"_",ae),m(i,"\\",Xt),m(i,"・",Oi);const s=O(i,G,De,{[_e]:!0});O(s,G,s);const a=O(s,V,Si,{[jt]:!0}),c=O(s,yt,xi,{[wt]:!0}),u=O(i,V,Q,{[Ae]:!0});O(u,G,a),O(u,V,u),O(a,G,a),O(a,V,a);const h=O(i,yt,Oe,{[Se]:!0});O(h,V),O(h,G,c),O(h,yt,h),O(c,G,c),O(c,V),O(c,yt,c);const v=m(i,be,Ie,{[ye]:!0}),y=m(i,hi,Te,{[ye]:!0}),C=O(i,je,Te,{[ye]:!0});m(i,Ce,C),m(y,be,v),m(y,Ce,C),O(y,je,C),m(C,hi),m(C,be),O(C,je,C),m(C,Ce,C);const d=O(i,we,Pi,{[Ai]:!0});m(d,"#"),O(d,we,d),m(d,or,d);const j=m(d,sr);m(j,"#"),O(j,we,d);const _=[[V,u],[G,a]],M=[[V,null],[yt,h],[G,c]];for(let P=0;PP[0]>L[0]?1:-1);for(let P=0;P=0?D[xe]=!0:V.test(L)?G.test(L)?D[jt]=!0:D[Ae]=!0:D[_e]=!0,li(i,L,L,D)}return li(i,"localhost",At,{ascii:!0}),i.jd=new N(ue),{start:i,tokens:Object.assign({groups:n},Fi)}}function Ti(e,n){const i=ur(n.replace(/[A-Z]/g,h=>h.toLowerCase())),s=i.length,a=[];let c=0,u=0;for(;u=0&&(d+=i[u].length,j++),y+=i[u].length,c+=i[u].length,u++;c-=d,u-=j,y-=d,a.push({t:C.t,v:n.slice(c-y,c),s:c-y,e:c})}return a}function ur(e){const n=[],i=e.length;let s=0;for(;s56319||s+1===i||(c=e.charCodeAt(s+1))<56320||c>57343?e[s]:e.slice(s,s+2);n.push(u),s+=u.length}return n}function Z(e,n,i,s,a){let c;const u=n.length;for(let h=0;h=0;)c++;if(c>0){n.push(i.join(""));for(let u=parseInt(e.substring(s,s+c),10);u>0;u--)i.pop();s+=c}else i.push(e[s]),s++}return n}const St={defaultProtocol:"http",events:null,format:di,formatHref:di,nl2br:!1,tagName:"a",target:null,rel:null,validate:!0,truncate:1/0,className:null,attributes:null,ignoreTags:[],render:null};function He(e,n=null){let i=Object.assign({},St);e&&(i=Object.assign(i,e instanceof He?e.o:e));const s=i.ignoreTags,a=[];for(let c=0;ci?s.substring(0,i)+"…":s},toFormattedHref(e){return e.get("formatHref",this.toHref(e.get("defaultProtocol")),this)},startIndex(){return this.tk[0].s},endIndex(){return this.tk[this.tk.length-1].e},toObject(e=St.defaultProtocol){return{type:this.t,value:this.toString(),isLink:this.isLink,href:this.toHref(e),start:this.startIndex(),end:this.endIndex()}},toFormattedObject(e){return{type:this.t,value:this.toFormattedString(e),isLink:this.isLink,href:this.toFormattedHref(e),start:this.startIndex(),end:this.endIndex()}},validate(e){return e.get("validate",this.toString(),this)},render(e){const n=this,i=this.toHref(e.get("defaultProtocol")),s=e.get("formatHref",i,this),a=e.get("tagName",i,n),c=this.toFormattedString(e),u={},h=e.get("className",i,n),v=e.get("target",i,n),y=e.get("rel",i,n),C=e.getObj("attributes",i,n),d=e.getObj("events",i,n);return u.href=s,h&&(u.class=h),v&&(u.target=v),y&&(u.rel=y),C&&Object.assign(u,C),{tagName:a,attributes:u,content:c,eventListeners:d}}};function ce(e,n){class i extends Li{constructor(a,c){super(a,c),this.t=e}}for(const s in n)i.prototype[s]=n[s];return i.t=e,i}const fi=ce("email",{isLink:!0,toHref(){return"mailto:"+this.toString()}}),pi=ce("text"),cr=ce("nl"),Bt=ce("url",{isLink:!0,toHref(e=St.defaultProtocol){return this.hasProtocol()?this.v:`${e}://${this.v}`},hasProtocol(){const e=this.tk;return e.length>=2&&e[0].t!==At&&e[1].t===tt}}),R=e=>new N(e);function lr({groups:e}){const n=e.domain.concat([Yt,Zt,X,Xt,te,ee,ie,ne,z,De,Et,re,oe,se,W,ue,_t,ae]),i=[Jt,tt,Ne,$,Re,Et,kt,ze,Me,Mt,Ht,bt,Ct,Nt,It,Rt,zt,qt,Ut,$t,Wt,Kt,Vt,Gt,Qt],s=[Yt,Jt,Zt,Xt,te,ee,ie,ne,z,bt,Ct,Et,re,oe,se,kt,W,ue,_t,ae],a=R(),c=m(a,_t);E(c,s,c),E(c,e.domain,c);const u=R(),h=R(),v=R();E(a,e.domain,u),E(a,e.scheme,h),E(a,e.slashscheme,v),E(u,s,c),E(u,e.domain,u);const y=m(u,X);m(c,X,y),m(h,X,y),m(v,X,y);const C=m(c,$);E(C,s,c),E(C,e.domain,c);const d=R();E(y,e.domain,d),E(d,e.domain,d);const j=m(d,$);E(j,e.domain,d);const _=R(fi);E(j,e.tld,_),E(j,e.utld,_),m(y,At,_);const M=m(d,z);m(M,z,M),E(M,e.domain,d),E(_,e.domain,d),m(_,$,j),m(_,z,M);const P=m(_,tt);E(P,e.numeric,fi);const L=m(u,z),D=m(u,$);m(L,z,L),E(L,e.domain,u),E(D,s,c),E(D,e.domain,u);const S=R(Bt);E(D,e.tld,S),E(D,e.utld,S),E(S,e.domain,u),E(S,s,c),m(S,$,D),m(S,z,L),m(S,X,y);const gt=m(S,tt),vt=R(Bt);E(gt,e.numeric,vt);const F=R(Bt),K=R();E(F,n,F),E(F,i,K),E(K,n,F),E(K,i,K),m(S,W,F),m(vt,W,F);const st=m(h,tt),at=m(v,tt),me=m(at,W),H=m(me,W);E(h,e.domain,u),m(h,$,D),m(h,z,L),E(v,e.domain,u),m(v,$,D),m(v,z,L),E(st,e.domain,F),m(st,W,F),m(st,kt,F),E(H,e.domain,F),E(H,n,F),m(H,W,F);const Pt=[[bt,Ct],[It,Nt],[Rt,zt],[Mt,Ht],[qt,Ut],[$t,Wt],[Kt,Vt],[Gt,Qt]];for(let ut=0;ut=0&&j++,a++,C++;if(j<0)a-=C,a0&&(c.push(Ee(pi,n,u)),u=[]),a-=j,C-=j;const _=d.t,M=i.slice(a-C,a);c.push(Ee(_,n,M))}}return u.length>0&&c.push(Ee(pi,n,u)),c}function Ee(e,n,i){const s=i[0].s,a=i[i.length-1].e,c=n.slice(s,a);return new e(c,i)}const I={scanner:null,parser:null,tokenQueue:[],pluginQueue:[],customSchemes:[],initialized:!1};function mr(){I.scanner=ar(I.customSchemes);for(let e=0;e/g,">")}function dr(e){return e.replace(/"/g,""")}function fr(e){const n=[];for(const i in e){let s=e[i]+"";n.push(`${i}="${dr(s)}"`)}return n.join(" ")}function pr({tagName:e,attributes:n,content:i}){return`<${e} ${fr(n)}>${Di(i)}${e}>`}function gr(e,n={}){n=new He(n,pr);const i=Bi(e),s=[];for(let a=0;a
`):!c.isLink||!n.check(c)?s.push(Di(c.toString())):s.push(n.render(c))}return s.join("")}String.prototype.linkify||Object.defineProperty(String.prototype,"linkify",{writable:!1,value:function(e){return gr(this,e)}}),A(gn);class Ii extends Error{constructor(n){super(n),this.name="TimeoutError"}}class vr extends Error{constructor(n){super(),this.name="AbortError",this.message=n}}const gi=e=>globalThis.DOMException===void 0?new vr(e):new DOMException(e),vi=e=>{const n=e.reason===void 0?gi("This operation was aborted."):e.reason;return n instanceof Error?n:gi(n)};function yr(e,n){const{milliseconds:i,fallback:s,message:a,customTimers:c={setTimeout,clearTimeout}}=n;let u,h;const v=new Promise((y,C)=>{if(typeof i!="number"||Math.sign(i)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${i}\``);if(n.signal){const{signal:j}=n;j.aborted&&C(vi(j)),h=()=>{C(vi(j))},j.addEventListener("abort",h,{once:!0})}if(i===Number.POSITIVE_INFINITY){e.then(y,C);return}const d=new Ii;u=c.setTimeout.call(void 0,()=>{if(s){try{y(s())}catch(j){C(j)}return}typeof e.cancel=="function"&&e.cancel(),a===!1?y():a instanceof Error?C(a):(d.message=a??`Promise timed out after ${i} milliseconds`,C(d))},i),(async()=>{try{y(await e)}catch(j){C(j)}})()}).finally(()=>{v.clear(),h&&n.signal&&n.signal.removeEventListener("abort",h)});return v.clear=()=>{c.clearTimeout.call(void 0,u),u=void 0},v}function wr(e,n,i){let s=0,a=e.length;for(;a>0;){const c=Math.trunc(a/2);let u=s+c;i(e[u],n)<=0?(s=++u,a-=c+1):a=c}return s}class jr{#t=[];enqueue(n,i){i={priority:0,...i};const s={priority:i.priority,id:i.id,run:n};if(this.size===0||this.#t[this.size-1].priority>=i.priority){this.#t.push(s);return}const a=wr(this.#t,s,(c,u)=>u.priority-c.priority);this.#t.splice(a,0,s)}setPriority(n,i){const s=this.#t.findIndex(c=>c.id===n);if(s===-1)throw new ReferenceError(`No promise function with the id "${n}" exists in the queue.`);const[a]=this.#t.splice(s,1);this.enqueue(a.run,{priority:i,id:n})}dequeue(){return this.#t.shift()?.run}filter(n){return this.#t.filter(i=>i.priority===n.priority).map(i=>i.run)}get size(){return this.#t.length}}class br extends Un{#t;#s;#o=0;#d;#a;#f=0;#i;#u;#e;#p;#n=0;#c;#r;#g;#w=1n;timeout;constructor(n){if(super(),n={carryoverConcurrencyCount:!1,intervalCap:Number.POSITIVE_INFINITY,interval:0,concurrency:Number.POSITIVE_INFINITY,autoStart:!0,queueClass:jr,...n},!(typeof n.intervalCap=="number"&&n.intervalCap>=1))throw new TypeError(`Expected \`intervalCap\` to be a number from 1 and up, got \`${n.intervalCap?.toString()??""}\` (${typeof n.intervalCap})`);if(n.interval===void 0||!(Number.isFinite(n.interval)&&n.interval>=0))throw new TypeError(`Expected \`interval\` to be a finite number >= 0, got \`${n.interval?.toString()??""}\` (${typeof n.interval})`);this.#t=n.carryoverConcurrencyCount,this.#s=n.intervalCap===Number.POSITIVE_INFINITY||n.interval===0,this.#d=n.intervalCap,this.#a=n.interval,this.#e=new n.queueClass,this.#p=n.queueClass,this.concurrency=n.concurrency,this.timeout=n.timeout,this.#g=n.throwOnTimeout===!0,this.#r=n.autoStart===!1}get#j(){return this.#s||this.#o{this.#E()},i)),!0}return!1}#l(){if(this.#e.size===0)return this.#i&&clearInterval(this.#i),this.#i=void 0,this.emit("empty"),this.#n===0&&this.emit("idle"),!1;if(!this.#r){const n=!this.#k;if(this.#j&&this.#b){const i=this.#e.dequeue();return i?(this.emit("active"),i(),n&&this.#v(),!0):!1}}return!1}#v(){this.#s||this.#i!==void 0||(this.#i=setInterval(()=>{this.#y()},this.#a),this.#f=Date.now()+this.#a)}#y(){this.#o===0&&this.#n===0&&this.#i&&(clearInterval(this.#i),this.#i=void 0),this.#o=this.#t?this.#n:0,this.#h()}#h(){for(;this.#l(););}get concurrency(){return this.#c}set concurrency(n){if(!(typeof n=="number"&&n>=1))throw new TypeError(`Expected \`concurrency\` to be a number from 1 and up, got \`${n}\` (${typeof n})`);this.#c=n,this.#h()}async#_(n){return new Promise((i,s)=>{n.addEventListener("abort",()=>{s(n.reason)},{once:!0})})}setPriority(n,i){this.#e.setPriority(n,i)}async add(n,i={}){return i.id??=(this.#w++).toString(),i={timeout:this.timeout,throwOnTimeout:this.#g,...i},new Promise((s,a)=>{this.#e.enqueue(async()=>{this.#n++;try{i.signal?.throwIfAborted(),this.#o++;let c=n({signal:i.signal});i.timeout&&(c=yr(Promise.resolve(c),{milliseconds:i.timeout})),i.signal&&(c=Promise.race([c,this.#_(i.signal)]));const u=await c;s(u),this.emit("completed",u)}catch(c){if(c instanceof Ii&&!i.throwOnTimeout){s();return}a(c),this.emit("error",c)}finally{this.#C()}},i),this.emit("add"),this.#l()})}async addAll(n,i){return Promise.all(n.map(async s=>this.add(s,i)))}start(){return this.#r?(this.#r=!1,this.#h(),this):this}pause(){this.#r=!0}clear(){this.#e=new this.#p}async onEmpty(){this.#e.size!==0&&await this.#m("empty")}async onSizeLessThan(n){this.#e.sizethis.#e.size{const a=()=>{i&&!i()||(this.off(n,a),s())};this.on(n,a)})}get size(){return this.#e.size}sizeBy(n){return this.#e.filter(n).length}get pending(){return this.#n}get isPaused(){return this.#r}}new br({concurrency:5}),A(vn),A(yn),A(wn),k("More items …");var Le={exports:{}},Cr=Le.exports,yi;function Er(){return yi||(yi=1,(function(e,n){(function(i,s){e.exports=s()})(typeof self<"u"?self:Cr,(function(){return(function(){var i={537:function(){typeof window<"u"&&(function(){for(var u=0,h=["ms","moz","webkit","o"],v=0;vt.length)&&(r=t.length);for(var o=0,l=new Array(r);o=p.length?{done:!0}:{done:!1,value:p[w++]}},e:function(T){throw T},f:x}}throw new TypeError(`Invalid attempt to iterate non-iterable instance.
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var B,ht=!0,mt=!1;return{s:function(){b=b.call(p)},n:function(){var T=b.next();return ht=T.done,T},e:function(T){mt=!0,B=T},f:function(){try{ht||b.return==null||b.return()}finally{if(mt)throw B}}}})(Object.getOwnPropertyNames(t));try{for(o.s();!(r=o.n()).done;){var l=r.value,f=t[l];t[l]=f&&_(f)==="object"?D(f):f}}catch(p){o.e(p)}finally{o.f()}return Object.freeze(t)}var S,gt,vt=function(t){if(!t.compressed)return t;for(var r in t.compressed=!1,t.emojis){var o=t.emojis[r];for(var l in P)o[l]=o[P[l]],delete o[P[l]];o.short_names||(o.short_names=[]),o.short_names.unshift(r),o.sheet_x=o.sheet[0],o.sheet_y=o.sheet[1],delete o.sheet,o.text||(o.text=""),o.added_in||(o.added_in=6),o.added_in=o.added_in.toFixed(1),o.search=L(o)}return D(t)},F=["+1","grinning","kissing_heart","heart_eyes","laughing","stuck_out_tongue_winking_eye","sweat_smile","joy","scream","disappointed","unamused","weary","sob","sunglasses","heart","hankey"],K={};function st(){gt=!0,S=j.get("frequently")}var at={add:function(t){gt||st();var r=t.id;S||(S=K),S[r]||(S[r]=0),S[r]+=1,j.set("last",r),j.set("frequently",S)},get:function(t){if(gt||st(),!S){K={};for(var r=[],o=Math.min(t,F.length),l=0;l',custom:'',flags:'',foods:'',nature:'',objects:'',smileys:'',people:'',places:'',recent:'',symbols:''};function H(t,r,o,l,f,p,g,b){var w,x=typeof t=="function"?t.options:t;return r&&(x.render=r,x.staticRenderFns=o,x._compiled=!0),{exports:t,options:x}}var Pt=H({props:{i18n:{type:Object,required:!0},color:{type:String},categories:{type:Array,required:!0},activeCategory:{type:Object,default:function(){return{}}}},emits:["click"],created:function(){this.svgs=me}},(function(){var t=this,r=t._self._c;return r("div",{staticClass:"emoji-mart-anchors",attrs:{role:"tablist"}},t._l(t.categories,(function(o){return r("button",{key:o.id,class:{"emoji-mart-anchor":!0,"emoji-mart-anchor-selected":o.id==t.activeCategory.id},style:{color:o.id==t.activeCategory.id?t.color:""},attrs:{role:"tab",type:"button","aria-label":o.name,"aria-selected":o.id==t.activeCategory.id,"data-title":t.i18n.categories[o.id]},on:{click:function(l){return t.$emit("click",o)}}},[r("div",{attrs:{"aria-hidden":"true"},domProps:{innerHTML:t._s(t.svgs[o.id])}}),t._v(" "),r("span",{staticClass:"emoji-mart-anchor-bar",style:{backgroundColor:t.color},attrs:{"aria-hidden":"true"}})])})),0)}),[]),ut=Pt.exports;function et(t,r){if(!(t instanceof r))throw new TypeError("Cannot call a class as a function")}function ct(t){var r=(function(o,l){if(_(o)!="object"||!o)return o;var f=o[Symbol.toPrimitive];if(f!==void 0){var p=f.call(o,"string");if(_(p)!="object")return p;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(o)})(t);return _(r)=="symbol"?r:r+""}function lt(t,r){for(var o=0;o1114111||Math.floor(g)!=g)throw RangeError("Invalid code point: "+g);g<=65535?o.push(g):(t=55296+((g-=65536)>>10),r=g%1024+56320,o.push(t,r)),(l+1===f||o.length>16384)&&(p+=String.fromCharCode.apply(null,o),o.length=0)}return p};function Wi(t){var r=t.split("-").map((function(o){return"0x".concat(o)}));return it.apply(null,r)}function $e(t){return t.reduce((function(r,o){return r.indexOf(o)===-1&&r.push(o),r}),[])}function Ki(t,r){var o=$e(t),l=$e(r);return o.filter((function(f){return l.indexOf(f)>=0}))}function We(t,r){var o={};for(var l in t){var f=t[l],p=f;Object.prototype.hasOwnProperty.call(r,l)&&(p=r[l]),_(p)==="object"&&(p=We(f,p)),o[l]=p}return o}function Ke(t,r){var o=typeof Symbol<"u"&&t[Symbol.iterator]||t["@@iterator"];if(!o){if(Array.isArray(t)||(o=(function(w,x){if(w){if(typeof w=="string")return Ve(w,x);var B=Object.prototype.toString.call(w).slice(8,-1);return B==="Object"&&w.constructor&&(B=w.constructor.name),B==="Map"||B==="Set"?Array.from(w):B==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(B)?Ve(w,x):void 0}})(t))||r){o&&(t=o);var l=0,f=function(){};return{s:f,n:function(){return l>=t.length?{done:!0}:{done:!1,value:t[l++]}},e:function(w){throw w},f}}throw new TypeError(`Invalid attempt to iterate non-iterable instance.
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var p,g=!0,b=!1;return{s:function(){o=o.call(t)},n:function(){var w=o.next();return g=w.done,w},e:function(w){b=!0,p=w},f:function(){try{g||o.return==null||o.return()}finally{if(b)throw p}}}}function Ve(t,r){(r==null||r>t.length)&&(r=t.length);for(var o=0,l=new Array(r);o1&&arguments[1]!==void 0?arguments[1]:{},l=o.emojisToShowFilter,f=o.include,p=o.exclude,g=o.custom,b=o.recent,w=o.recentLength,x=w===void 0?20:w;et(this,t),this._data=vt(r),this._emojisFilter=l||null,this._include=f||null,this._exclude=p||null,this._custom=g||[],this._recent=b||at.get(x),this._emojis={},this._nativeEmojis={},this._emoticons={},this._categories=[],this._recentCategory={id:"recent",name:"Recent",emojis:[]},this._customCategory={id:"custom",name:"Custom",emojis:[]},this._searchIndex={},this.buildIndex(),Object.freeze(this)}),[{key:"buildIndex",value:function(){var t=this,r=this._data.categories;if(this._include&&(r=(r=r.filter((function(p){return t._include.includes(p.id)}))).sort((function(p,g){var b=t._include.indexOf(p.id),w=t._include.indexOf(g.id);return bw?1:0}))),r.forEach((function(p){if(t.isCategoryNeeded(p.id)){var g={id:p.id,name:p.name,emojis:[]};p.emojis.forEach((function(b){var w=t.addEmoji(b);w&&g.emojis.push(w)})),g.emojis.length&&t._categories.push(g)}})),this.isCategoryNeeded("custom")){if(this._custom.length>0){var o,l=Ke(this._custom);try{for(l.s();!(o=l.n()).done;){var f=o.value;this.addCustomEmoji(f)}}catch(p){l.e(p)}finally{l.f()}}this._customCategory.emojis.length&&this._categories.push(this._customCategory)}this.isCategoryNeeded("recent")&&(this._recent.length&&this._recent.map((function(p){var g,b=Ke(t._customCategory.emojis);try{for(b.s();!(g=b.n()).done;){var w=g.value;if(w.id===p)return void t._recentCategory.emojis.push(w)}}catch(x){b.e(x)}finally{b.f()}t.hasEmoji(p)&&t._recentCategory.emojis.push(t.emoji(p))})),this._recentCategory.emojis.length&&this._categories.unshift(this._recentCategory))}},{key:"findEmoji",value:function(t,r){var o=t.match(Vi);if(o&&(t=o[1],o[2]&&(r=parseInt(o[2],10))),this._data.aliases.hasOwnProperty(t)&&(t=this._data.aliases[t]),this._emojis.hasOwnProperty(t)){var l=this._emojis[t];return r?l.getSkin(r):l}return this._nativeEmojis.hasOwnProperty(t)?this._nativeEmojis[t]:null}},{key:"categories",value:function(){return this._categories}},{key:"emoji",value:function(t){this._data.aliases.hasOwnProperty(t)&&(t=this._data.aliases[t]);var r=this._emojis[t];if(!r)throw new Error("Can not find emoji by id: "+t);return r}},{key:"firstEmoji",value:function(){var t=this._emojis[Object.keys(this._emojis)[0]];if(!t)throw new Error("Can not get first emoji");return t}},{key:"hasEmoji",value:function(t){return this._data.aliases.hasOwnProperty(t)&&(t=this._data.aliases[t]),!!this._emojis[t]}},{key:"nativeEmoji",value:function(t){return this._nativeEmojis.hasOwnProperty(t)?this._nativeEmojis[t]:null}},{key:"search",value:function(t,r){var o=this;if(r||(r=75),!t.length)return null;if(t=="-"||t=="-1")return[this.emoji("-1")];var l,f=t.toLowerCase().split(/[\s|,|\-|_]+/);f.length>2&&(f=[f[0],f[1]]),l=f.map((function(g){for(var b=o._emojis,w=o._searchIndex,x=0,B=function(){var mt=g[ht];if(x++,w[mt]||(w[mt]={}),!(w=w[mt]).results){var T={};for(var nt in w.results=[],w.emojis={},b){var U=b[nt],rn=U._data.search,ri=g.substr(0,x),oi=rn.indexOf(ri);if(oi!=-1){var si=oi+1;ri==nt&&(si=0),w.results.push(U),w.emojis[nt]=U,T[nt]=si}}w.results.sort((function(on,sn){return T[on.id]-T[sn.id]}))}b=w.emojis},ht=0;ht1?Ki.apply(null,l):l.length?l[0]:[])&&p.length>r&&(p=p.slice(0,r)),p}},{key:"addCustomEmoji",value:function(t){var r=Object.assign({},t,{id:t.short_names[0],custom:!0});r.search||(r.search=L(r));var o=new de(r);return this._emojis[o.id]=o,this._customCategory.emojis.push(o),o}},{key:"addEmoji",value:function(t){var r=this,o=this._data.emojis[t];if(!this.isEmojiNeeded(o))return!1;var l=new de(o);if(this._emojis[t]=l,l.native&&(this._nativeEmojis[l.native]=l),l._skins)for(var f in l._skins){var p=l._skins[f];p.native&&(this._nativeEmojis[p.native]=p)}return l.emoticons&&l.emoticons.forEach((function(g){r._emoticons[g]||(r._emoticons[g]=t)})),l}},{key:"isCategoryNeeded",value:function(t){var r=!this._include||!this._include.length||this._include.indexOf(t)>-1,o=!(!this._exclude||!this._exclude.length)&&this._exclude.indexOf(t)>-1;return!(!r||o)}},{key:"isEmojiNeeded",value:function(t){return!this._emojisFilter||this._emojisFilter(t)}}])})(),de=(function(){return q((function t(r){if(et(this,t),this._data=Object.assign({},r),this._skins=null,this._data.skin_variations)for(var o in this._skins=[],Ge){var l=Ge[o],f=this._data.skin_variations[l],p=Object.assign({},r);for(var g in f)p[g]=f[g];delete p.skin_variations,p.skin_tone=parseInt(o)+1,this._skins.push(new t(p))}for(var b in this._sanitized=Qe(this._data),this._sanitized)this[b]=this._sanitized[b];this.short_names=this._data.short_names,this.short_name=this._data.short_names[0],Object.freeze(this)}),[{key:"getSkin",value:function(t){return t&&t!="native"&&this._skins?this._skins[t-1]:this}},{key:"getPosition",value:function(){var t=+(1.6666666666666667*this._data.sheet_x).toFixed(2),r=+(100/60*this._data.sheet_y).toFixed(2);return"".concat(t,"% ").concat(r,"%")}},{key:"ariaLabel",value:function(){return[this.native].concat(this.short_names).filter(Boolean).join(", ")}}])})(),fe=(function(){return q((function t(r,o,l,f,p,g,b){et(this,t),this._emoji=r,this._native=f,this._skin=o,this._set=l,this._fallback=p,this.canRender=this._canRender(),this.cssClass=this._cssClass(),this.cssStyle=this._cssStyle(b),this.content=this._content(),this.title=g===!0?r.short_name:null,this.ariaLabel=r.ariaLabel(),Object.freeze(this)}),[{key:"getEmoji",value:function(){return this._emoji.getSkin(this._skin)}},{key:"_canRender",value:function(){return this._isCustom()||this._isNative()||this._hasEmoji()||this._fallback}},{key:"_cssClass",value:function(){return["emoji-set-"+this._set,"emoji-type-"+this._emojiType()]}},{key:"_cssStyle",value:function(t){var r={};return this._isCustom()?r={backgroundImage:"url("+this.getEmoji()._data.imageUrl+")",backgroundSize:"100%",width:t+"px",height:t+"px"}:this._hasEmoji()&&!this._isNative()&&(r={backgroundPosition:this.getEmoji().getPosition()}),t&&(r=this._isNative()?Object.assign(r,{fontSize:Math.round(.95*t*10)/10+"px"}):Object.assign(r,{width:t+"px",height:t+"px"})),r}},{key:"_content",value:function(){return this._isCustom()?"":this._isNative()?this.getEmoji().native:this._hasEmoji()?"":this._fallback?this._fallback(this.getEmoji()):null}},{key:"_isNative",value:function(){return this._native}},{key:"_isCustom",value:function(){return this.getEmoji().custom}},{key:"_hasEmoji",value:function(){if(!this.getEmoji()._data)return!1;var t=this.getEmoji()._data["has_img_"+this._set];return t===void 0||t}},{key:"_emojiType",value:function(){return this._isCustom()?"custom":this._isNative()?"native":this._hasEmoji()?"image":"fallback"}}])})();function Qe(t){var r=t.name,o=t.short_names,l=t.skin_tone,f=t.skin_variations,p=t.emoticons,g=t.unified,b=t.custom,w=t.imageUrl,x=t.id||o[0],B=":".concat(x,":");return b?{id:x,name:r,colons:B,emoticons:p,custom:b,imageUrl:w}:(l&&(B+=":skin-tone-".concat(l,":")),{id:x,name:r,colons:B,emoticons:p,unified:g.toLowerCase(),skin:l||(f?1:null),native:Wi(g)})}function Ye(t,r,o){return(r=ct(r))in t?Object.defineProperty(t,r,{value:o,enumerable:!0,configurable:!0,writable:!0}):t[r]=o,t}var Qi={native:{type:Boolean,default:!1},tooltip:{type:Boolean,default:!1},fallback:{type:Function},skin:{type:Number,default:1},set:{type:String,default:"apple"},emoji:{type:[String,Object],required:!0},size:{type:Number,default:null},tag:{type:String,default:"span"}},Yi={perLine:{type:Number,default:9},maxSearchResults:{type:Number,default:75},emojiSize:{type:Number,default:24},title:{type:String,default:"Emoji Mart™"},emoji:{type:String,default:"department_store"},color:{type:String,default:"#ae65c5"},set:{type:String,default:"apple"},skin:{type:Number,default:null},defaultSkin:{type:Number,default:1},native:{type:Boolean,default:!1},emojiTooltip:{type:Boolean,default:!1},autoFocus:{type:Boolean,default:!1},i18n:{type:Object,default:function(){return{}}},showPreview:{type:Boolean,default:!0},showSearch:{type:Boolean,default:!0},showCategories:{type:Boolean,default:!0},showSkinTones:{type:Boolean,default:!0},infiniteScroll:{type:Boolean,default:!0},pickerStyles:{type:Object,default:function(){return{}}}};function Je(t,r){var o=Object.keys(t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);r&&(l=l.filter((function(f){return Object.getOwnPropertyDescriptor(t,f).enumerable}))),o.push.apply(o,l)}return o}function Ze(t){for(var r=1;r0},emojiObjects:function(){var t=this;return this.emojis.map((function(r){return{emojiObject:r,emojiView:new fe(r,t.emojiProps.skin,t.emojiProps.set,t.emojiProps.native,t.emojiProps.fallback,t.emojiProps.emojiTooltip,t.emojiProps.emojiSize)}}))}},components:{Emoji:pe}},(function(){var t=this,r=t._self._c;return t.isVisible&&(t.isSearch||t.hasResults)?r("section",{class:{"emoji-mart-category":!0,"emoji-mart-no-results":!t.hasResults},attrs:{"aria-label":t.i18n.categories[t.id]}},[r("div",{staticClass:"emoji-mart-category-label"},[r("h3",{staticClass:"emoji-mart-category-label"},[t._v(t._s(t.i18n.categories[t.id]))])]),t._v(" "),t._l(t.emojiObjects,(function(o){var l=o.emojiObject,f=o.emojiView;return[f.canRender?r("button",{key:l.id,staticClass:"emoji-mart-emoji",class:t.activeClass(l),attrs:{"aria-label":f.ariaLabel,role:"option","aria-selected":"false","aria-posinset":"1","aria-setsize":"1812",type:"button","data-title":l.short_name,title:f.title},on:{mouseenter:function(p){t.emojiProps.onEnter(f.getEmoji())},mouseleave:function(p){t.emojiProps.onLeave(f.getEmoji())},click:function(p){t.emojiProps.onClick(f.getEmoji())}}},[r("span",{class:f.cssClass,style:f.cssStyle},[t._v(t._s(f.content))])]):t._e()]})),t._v(" "),t.hasResults?t._e():r("div",[r("emoji",{attrs:{data:t.data,emoji:"sleuth_or_spy",native:t.emojiProps.native,skin:t.emojiProps.skin,set:t.emojiProps.set}}),t._v(" "),r("div",{staticClass:"emoji-mart-no-results-label"},[t._v(t._s(t.i18n.notfound))])],1)],2):t._e()}),[]).exports,ti=H({props:{skin:{type:Number,required:!0}},emits:["change"],data:function(){return{opened:!1}},methods:{onClick:function(t){this.opened&&t!=this.skin&&this.$emit("change",t),this.opened=!this.opened}}},(function(){var t=this,r=t._self._c;return r("div",{class:{"emoji-mart-skin-swatches":!0,"emoji-mart-skin-swatches-opened":t.opened}},t._l(6,(function(o){return r("span",{key:o,class:{"emoji-mart-skin-swatch":!0,"emoji-mart-skin-swatch-selected":t.skin==o}},[r("span",{class:"emoji-mart-skin emoji-mart-skin-tone-"+o,on:{click:function(l){return t.onClick(o)}}})])})),0)}),[]).exports,ei=H({props:{data:{type:Object,required:!0},title:{type:String,required:!0},emoji:{type:[String,Object]},idleEmoji:{type:[String,Object],required:!0},showSkinTones:{type:Boolean,default:!0},emojiProps:{type:Object,required:!0},skinProps:{type:Object,required:!0},onSkinChange:{type:Function,required:!0}},computed:{emojiData:function(){return this.emoji?this.emoji:{}},emojiShortNames:function(){return this.emojiData.short_names},emojiEmoticons:function(){return this.emojiData.emoticons}},components:{Emoji:pe,Skins:ti}},(function(){var t=this,r=t._self._c;return r("div",{staticClass:"emoji-mart-preview"},[t.emoji?[r("div",{staticClass:"emoji-mart-preview-emoji"},[r("emoji",{attrs:{data:t.data,emoji:t.emoji,native:t.emojiProps.native,skin:t.emojiProps.skin,set:t.emojiProps.set}})],1),t._v(" "),r("div",{staticClass:"emoji-mart-preview-data"},[r("div",{staticClass:"emoji-mart-preview-name"},[t._v(t._s(t.emoji.name))]),t._v(" "),r("div",{staticClass:"emoji-mart-preview-shortnames"},t._l(t.emojiShortNames,(function(o){return r("span",{key:o,staticClass:"emoji-mart-preview-shortname"},[t._v(":"+t._s(o)+":")])})),0),t._v(" "),r("div",{staticClass:"emoji-mart-preview-emoticons"},t._l(t.emojiEmoticons,(function(o){return r("span",{key:o,staticClass:"emoji-mart-preview-emoticon"},[t._v(t._s(o))])})),0)])]:[r("div",{staticClass:"emoji-mart-preview-emoji"},[r("emoji",{attrs:{data:t.data,emoji:t.idleEmoji,native:t.emojiProps.native,skin:t.emojiProps.skin,set:t.emojiProps.set}})],1),t._v(" "),r("div",{staticClass:"emoji-mart-preview-data"},[r("span",{staticClass:"emoji-mart-title-label"},[t._v(t._s(t.title))])]),t._v(" "),t.showSkinTones?r("div",{staticClass:"emoji-mart-preview-skins"},[r("skins",{attrs:{skin:t.skinProps.skin},on:{change:function(o){return t.onSkinChange(o)}}})],1):t._e()]],2)}),[]).exports,Ji=H({props:{data:{type:Object,required:!0},i18n:{type:Object,required:!0},autoFocus:{type:Boolean,default:!1},onSearch:{type:Function,required:!0},onArrowLeft:{type:Function,required:!1},onArrowRight:{type:Function,required:!1},onArrowDown:{type:Function,required:!1},onArrowUp:{type:Function,required:!1},onEnter:{type:Function,required:!1}},emits:["search","enter","arrowUp","arrowDown","arrowRight","arrowLeft"],data:function(){return{value:""}},computed:{emojiIndex:function(){return this.data}},watch:{value:function(){this.$emit("search",this.value)}},methods:{clear:function(){this.value=""}},mounted:function(){var t=this.$el.querySelector("input");this.autoFocus&&t.focus()}},(function(){var t=this,r=t._self._c;return r("div",{staticClass:"emoji-mart-search"},[r("input",{directives:[{name:"model",rawName:"v-model",value:t.value,expression:"value"}],attrs:{type:"text",placeholder:t.i18n.search,role:"textbox","aria-autocomplete":"list","aria-owns":"emoji-mart-list","aria-label":"Search for an emoji","aria-describedby":"emoji-mart-search-description"},domProps:{value:t.value},on:{keydown:[function(o){return!o.type.indexOf("key")&&t._k(o.keyCode,"left",37,o.key,["Left","ArrowLeft"])||"button"in o&&o.button!==0?null:function(l){return t.$emit("arrowLeft",l)}.apply(null,arguments)},function(o){return!o.type.indexOf("key")&&t._k(o.keyCode,"right",39,o.key,["Right","ArrowRight"])||"button"in o&&o.button!==2?null:function(){return t.$emit("arrowRight")}.apply(null,arguments)},function(o){return!o.type.indexOf("key")&&t._k(o.keyCode,"down",40,o.key,["Down","ArrowDown"])?null:function(){return t.$emit("arrowDown")}.apply(null,arguments)},function(o){return!o.type.indexOf("key")&&t._k(o.keyCode,"up",38,o.key,["Up","ArrowUp"])?null:function(l){return t.$emit("arrowUp",l)}.apply(null,arguments)},function(o){return!o.type.indexOf("key")&&t._k(o.keyCode,"enter",13,o.key,"Enter")?null:function(){return t.$emit("enter")}.apply(null,arguments)}],input:function(o){o.target.composing||(t.value=o.target.value)}}}),t._v(" "),r("span",{staticClass:"hidden",attrs:{id:"emoji-picker-search-description"}},[t._v(`Use the left, right, up and down arrow keys to navigate the emoji search
results.`)])])}),[]),ii=Ji.exports;function ge(t,r){(r==null||r>t.length)&&(r=t.length);for(var o=0,l=new Array(r);o0})),this._categories[0].first=!0,Object.freeze(this._categories),this.activeCategory=this._categories[0],this.searchEmojis=null,this.previewEmoji=null,this.previewEmojiCategoryIdx=0,this.previewEmojiIdx=-1}),[{key:"onScroll",value:function(){var t=this._vm.$refs.scroll;if(t){for(var r=t.scrollTop,o=this.filteredCategories[0],l=0,f=this.filteredCategories.length;lr)break;o=p}this.activeCategory=o}}},{key:"allCategories",get:function(){return this._categories}},{key:"filteredCategories",get:function(){return this.searchEmojis?[{id:"search",name:"Search",emojis:this.searchEmojis}]:this._categories.filter((function(t){return t.emojis.length>0}))}},{key:"previewEmojiCategory",get:function(){return this.previewEmojiCategoryIdx>=0?this.filteredCategories[this.previewEmojiCategoryIdx]:null}},{key:"onAnchorClick",value:function(t){var r=this;if(!this.searchEmojis){var o=this.filteredCategories.indexOf(t),l=this._vm.getCategoryComponent(o);this._vm.infiniteScroll?(function(){if(l){var f=l.$el.offsetTop;t.first&&(f=0),r._vm.$refs.scroll.scrollTop=f}})():this.activeCategory=this.filteredCategories[o]}}},{key:"onSearch",value:function(t){var r=this._data.search(t,this.maxSearchResults);this.searchEmojis=r,this.previewEmojiCategoryIdx=0,this.previewEmojiIdx=0,this.updatePreviewEmoji()}},{key:"onEmojiEnter",value:function(t){this.previewEmoji=t,this.previewEmojiIdx=-1,this.previewEmojiCategoryIdx=-1}},{key:"onEmojiLeave",value:function(t){this.previewEmoji=null}},{key:"onArrowLeft",value:function(){this.previewEmojiIdx>0?this.previewEmojiIdx-=1:(this.previewEmojiCategoryIdx-=1,this.previewEmojiCategoryIdx<0?this.previewEmojiCategoryIdx=0:this.previewEmojiIdx=this.filteredCategories[this.previewEmojiCategoryIdx].emojis.length-1),this.updatePreviewEmoji()}},{key:"onArrowRight",value:function(){this.previewEmojiIdx=this.filteredCategories.length?this.previewEmojiCategoryIdx=this.filteredCategories.length-1:this.previewEmojiIdx=0),this.updatePreviewEmoji()}},{key:"onArrowDown",value:function(){if(this.previewEmojiIdx==-1)return this.onArrowRight();var t=this.filteredCategories[this.previewEmojiCategoryIdx].emojis.length,r=this._perLine;this.previewEmojiIdx+r>t&&(r=t%this._perLine);for(var o=0;o0?this.filteredCategories[this.previewEmojiCategoryIdx-1].emojis.length%this._perLine:0);for(var r=0;rl+r.scrollTop&&(r.scrollTop+=o.offsetHeight),o&&o.offsetTop"u")return 0;var t=document.createElement("div");t.style.width="100px",t.style.height="100px",t.style.overflow="scroll",t.style.position="absolute",t.style.top="-9999px",document.body.appendChild(t);var r=t.offsetWidth-t.clientWidth;return document.body.removeChild(t),r})()},filteredCategories:function(){return this.view.filteredCategories},mergedI18n:function(){return Object.freeze(We(Xi,this.i18n))},idleEmoji:function(){try{return this.data.emoji(this.emoji)}catch(t){return console.error("Default preview emoji `"+this.emoji+"` is not available, check the Picker `emoji` property"),console.error(t),this.data.firstEmoji()}},isSearching:function(){return this.view.searchEmojis!=null}},watch:{skin:function(){this.onSkinChange(this.skin)}},methods:{onScroll:function(){this.infiniteScroll&&!this.waitingForPaint&&(this.waitingForPaint=!0,window.requestAnimationFrame(this.onScrollPaint.bind(this)))},onScrollPaint:function(){this.waitingForPaint=!1,this.view.onScroll()},onAnchorClick:function(t){this.view.onAnchorClick(t)},onSearch:function(t){this.view.onSearch(t)},onEmojiEnter:function(t){this.view.onEmojiEnter(t)},onEmojiLeave:function(t){this.view.onEmojiLeave(t)},onArrowLeft:function(t){var r=this.view.previewEmojiIdx;this.view.onArrowLeft(),t&&this.view.previewEmojiIdx!==r&&t.preventDefault()},onArrowRight:function(){this.view.onArrowRight()},onArrowDown:function(){this.view.onArrowDown()},onArrowUp:function(t){this.view.onArrowUp(),t.preventDefault()},onEnter:function(){this.view.previewEmoji&&(this.$emit("select",this.view.previewEmoji),at.add(this.view.previewEmoji))},onEmojiClick:function(t){this.$emit("select",t),at.add(t)},onTextSelect:function(t){t.stopPropagation()},onSkinChange:function(t){this.activeSkin=t,j.update({skin:t}),this.$emit("skin-change",t)},getCategoryComponent:function(t){var r=this.$refs["categories_"+t];return r&&"0"in r?r[0]:r}},components:{Anchors:ut,Category:Xe,Preview:ei,Search:ii}},en=H(tn,(function(){var t=this,r=t._self._c;return r("section",{staticClass:"emoji-mart emoji-mart-static",style:t.customStyles},[t.showCategories?r("div",{staticClass:"emoji-mart-bar emoji-mart-bar-anchors"},[r("anchors",{attrs:{data:t.data,i18n:t.mergedI18n,color:t.color,categories:t.view.allCategories,"active-category":t.view.activeCategory},on:{click:t.onAnchorClick}})],1):t._e(),t._v(" "),t._t("searchTemplate",(function(){return[t.showSearch?r("search",{ref:"search",attrs:{data:t.data,i18n:t.mergedI18n,"auto-focus":t.autoFocus,"on-search":t.onSearch},on:{search:t.onSearch,arrowLeft:t.onArrowLeft,arrowRight:t.onArrowRight,arrowDown:t.onArrowDown,arrowUp:t.onArrowUp,enter:t.onEnter,select:t.onTextSelect}}):t._e()]}),{data:t.data,i18n:t.i18n,autoFocus:t.autoFocus,onSearch:t.onSearch}),t._v(" "),r("div",{ref:"scroll",staticClass:"emoji-mart-scroll",attrs:{role:"tabpanel"},on:{scroll:t.onScroll}},[r("div",{ref:"scrollContent",attrs:{id:"emoji-mart-list",role:"listbox","aria-expanded":"true"}},[t._t("customCategory"),t._v(" "),t._l(t.view.filteredCategories,(function(o,l){return r("category",{directives:[{name:"show",rawName:"v-show",value:t.infiniteScroll||o==t.view.activeCategory||t.isSearching,expression:"infiniteScroll || category == view.activeCategory || isSearching"}],key:o.id,ref:"categories_"+l,refInFor:!0,attrs:{data:t.data,i18n:t.mergedI18n,id:o.id,name:o.name,emojis:o.emojis,"emoji-props":t.emojiProps}})}))],2)]),t._v(" "),t._t("previewTemplate",(function(){return[t.showPreview?r("div",{staticClass:"emoji-mart-bar emoji-mart-bar-preview"},[r("preview",{attrs:{data:t.data,title:t.title,emoji:t.view.previewEmoji,"idle-emoji":t.idleEmoji,"show-skin-tones":t.showSkinTones,"emoji-props":t.emojiProps,"skin-props":t.skinProps,"on-skin-change":t.onSkinChange}})],1):t._e()]}),{data:t.data,title:t.title,emoji:t.view.previewEmoji,idleEmoji:t.idleEmoji,showSkinTones:t.showSkinTones,emojiProps:t.emojiProps,skinProps:t.skinProps,onSkinChange:t.onSkinChange})],2)}),[]),nn=en.exports})(),c})()}))})(Le)),Le.exports}if(Er(),un("nextcloud-vue").persist(!0).build(),A(jn,bi,ki,Ei),k("Search emoji"),k("No emoji found"),k("Search results"),k("Frequently used"),k("Smileys & Emotion"),k("People & Body"),k("Animals & Nature"),k("Food & Drink"),k("Activities"),k("Travel & Places"),k("Objects"),k("Symbols"),k("Flags"),k("Custom"),new dt(255,222,52,k("Neutral skin color")),new dt(228,205,166,k("Light skin tone")),new dt(250,221,192,k("Medium light skin tone")),new dt(174,129,87,k("Medium skin tone")),new dt(158,113,88,k("Medium dark skin tone")),new dt(96,79,69,k("Dark skin tone")),k("Pick an emoji"),A(bn),A(Cn),A(En),A(Ci),A(kn),A(_n),Wn()?.circles?.teamResourceProviders,A(An),k("Related resources"),k("Anything shared with the same group of people will show up here"),Array.prototype.find||(Array.prototype.find=function(e){if(this===null)throw new TypeError("Array.prototype.find called on null or undefined");if(typeof e!="function")throw new TypeError("predicate must be a function");for(var n=Object(this),i=n.length>>>0,s=arguments[1],a,c=0;c{kr(e,n,i,s)};function kr(e,n,i=()=>{},s){const a={hasInteractiveView:!0,fullWidth:!1,...s};if(window._vue_richtext_widgets[e]){_i.error(`[ReferencePicker]: Widget for id ${e} already registered`);return}window._vue_richtext_widgets[e]={id:e,callback:n,onDestroy:i,...a}}window._vue_richtext_custom_picker_elements??={},window._registerCustomPickerElement??=_r;function _r(e,n,i=()=>{},s="large"){if(window._vue_richtext_custom_picker_elements[e]){_i.error(`Custom reference picker element for id ${e} already registered`);return}window._vue_richtext_custom_picker_elements[e]={id:e,callback:n,onDestroy:i,size:s}}A(Sn),A(xn),k("Any link"),cn("core","filetypes/link.svg"),window._vue_richtext_reference_providers??=ke("core","reference-provider-list",[]),window._vue_richtext_reference_provider_timestamps??=ke("core","reference-provider-timestamps",{}),A(ai,On),A(Pn),A(Fn,ai,Ei),A(Ln,Tn);const xt=le(/[A-Za-z]/),qe=le(/[\dA-Za-z]/);function Ar(e){return e!==null&&(e<32||e===127)}function pt(e){return e!==null&&(e<0||e===32)}const Ni=le(new RegExp("\\p{P}|\\p{S}","u")),Ot=le(/\s/);function le(e){return n;function n(i){return i!==null&&i>-1&&e.test(String.fromCharCode(i))}}const Ri=(function(e){if(e==null)return Pr;if(typeof e=="function")return he(e);if(typeof e=="object")return Array.isArray(e)?Sr(e):xr(e);if(typeof e=="string")return Or(e);throw new Error("Expected function, string, or object as test")});function Sr(e){const n=[];let i=-1;for(;++i0&&!i&&(e[e.length-1][1]._gfmAutolinkLiteralWalkedInto=!0),i}an(null),A(Bn,ki),k("Write a message …"),A(Dn),{...$n.props,placeholder:k("Select a tag")},A(In),A(Nn);const[Do]=ke("core","config",{version:"30.0"}).version.split(".",2)??[];A(Rn),Kn(function(e){this.loadGroup(e)},200),Ft.themes.tooltip.html=!1,Ft.themes.tooltip.delay={show:500,hide:200},Ft.themes.tooltip.distance=10,Ft.themes.tooltip["arrow-padding"]=3;const qr={computed:{isMobile(){return zn.value}}},Ur={name:"PublicAlbumContent",components:{MapMarkerOutline:Gn,ImageOffOutline:Vn,NcEmptyContent:qn,NcActions:Mn,CollectionContent:Yn,HeaderNavigation:Jn},mixins:[Zn,qr],props:{token:{type:String,required:!0}},data(){return{showAddPhotosModal:!1,loadingCount:0,loadingAddFilesToAlbum:!1,albumOriginalName:"",publicClient:mn(dn("dav"),{Authorization:`Basic ${btoa(`${this.token}:`)}`})}},computed:{album(){return this.$store.getters.getPublicAlbum(this.albumName)},albumName(){return this.token},albumFileIds(){return this.$store.getters.getPublicAlbumFiles(this.albumName)},publicAlbumFileName(){return this.$store.getters.getPublicAlbumName(this.albumName)}},async beforeMount(){await this.fetchAlbumInfo(),await this.fetchAlbumContent()},methods:{async fetchAlbumInfo(){const e=await this.fetchCollection(`${ui}/${this.token}`,ci,this.publicClient);e!==null&&(this.albumOriginalName=e.attributes["original-name"])},async fetchAlbumContent(){(await this.fetchCollectionFiles(`${ui}/${this.token}`,[...Hn,...ci],this.publicClient)).forEach(e=>{e.update({previewUrl:hn(`/apps/photos/api/v1/publicPreview/${e.fileid}?x=4096&y=4096&token=${this.token}`),hasPreview:!1})})},async handleFilesPicked(e){this.showAddPhotosModal=!1,await this.$store.dispatch("addFilesToCollection",{collectionFileName:this.album.root+this.albumName,fileIdsToAdd:e}),await this.fetchAlbumContent()},async handleRemoveFilesFromAlbum(e){this.$refs.collectionContent.onUncheckFiles(e),await this.$store.dispatch("removeFilesFromCollection",{collectionFileName:this.album.root+this.albumName,fileIdsToRemove:e})},t:ln}};var $r=function(){var e=this,n=e._self._c;return n("div",[n("CollectionContent",{ref:"collectionContent",attrs:{collection:e.album,"collection-file-ids":e.albumFileIds,"allow-selection":!1,loading:e.loadingCollection||e.loadingCollectionFiles,error:e.errorFetchingCollection||e.errorFetchingCollectionFiles},scopedSlots:e._u([{key:"header",fn:function({selectedFileIds:i}){return e.albumOriginalName!==""?n("HeaderNavigation",{key:"navigation",attrs:{loading:e.loadingCollection||e.loadingCollectionFiles,params:{token:e.token},path:"/","root-title":e.albumOriginalName,title:e.albumOriginalName},on:{refresh:e.fetchAlbumContent}},[e.album.attributes.location!==""?n("div",{staticClass:"album__location",attrs:{slot:"subtitle"},slot:"subtitle"},[n("MapMarkerOutline"),e._v(e._s(e.album.attributes.location)+" ")],1):e._e(),e.album!==void 0?n("template",{slot:"right"},[n("NcActions",{attrs:{"force-menu":!0,"aria-label":e.t("photos","Open actions menu")}},[i.length>0?void 0:e._e()],2)],1):e._e()],2):e._e()}}],null,!0)},[n("NcEmptyContent",{staticClass:"album__empty",attrs:{slot:"empty-content",name:e.t("photos","This album does not have any photos or videos yet!")},slot:"empty-content"},[n("ImageOffOutline",{attrs:{slot:"icon"},slot:"icon"})],1)],1)],1)},Wr=[],Kr=Qn(Ur,$r,Wr,!1,null,"46c7b0a7");const Io=Kr.exports;export{Io as default};
-//# sourceMappingURL=PublicAlbumContent-CZkNPobM.chunk.mjs.map
+//# sourceMappingURL=PublicAlbumContent-D54gCfLM.chunk.mjs.map
diff --git a/js/PublicAlbumContent-CZkNPobM.chunk.mjs.license b/js/PublicAlbumContent-D54gCfLM.chunk.mjs.license
similarity index 100%
rename from js/PublicAlbumContent-CZkNPobM.chunk.mjs.license
rename to js/PublicAlbumContent-D54gCfLM.chunk.mjs.license
diff --git a/js/PublicAlbumContent-CZkNPobM.chunk.mjs.map b/js/PublicAlbumContent-D54gCfLM.chunk.mjs.map
similarity index 99%
rename from js/PublicAlbumContent-CZkNPobM.chunk.mjs.map
rename to js/PublicAlbumContent-D54gCfLM.chunk.mjs.map
index de9808098e..16c8b18707 100644
--- a/js/PublicAlbumContent-CZkNPobM.chunk.mjs.map
+++ b/js/PublicAlbumContent-D54gCfLM.chunk.mjs.map
@@ -1 +1 @@
-{"version":3,"file":"PublicAlbumContent-CZkNPobM.chunk.mjs","sources":["../node_modules/@nextcloud/vue/dist/chunks/NcActionButtonGroup-B95wg_Q6.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcAppNavigationSearch-CzhlljAU.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcAppNavigationSettings-BaO-G72x.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcAppSettingsShortcutsSection-DblUBaWP.mjs","../node_modules/linkifyjs/dist/linkify.mjs","../node_modules/linkify-string/dist/linkify-string.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcAppSidebar-B7GuNZ4C.mjs","../node_modules/p-timeout/index.js","../node_modules/p-queue/dist/lower-bound.js","../node_modules/p-queue/dist/priority-queue.js","../node_modules/p-queue/dist/index.js","../node_modules/@nextcloud/vue/dist/Functions/preloadImage.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcCollectionList-DOAZ13vO.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcDashboardWidget-CO1z9VUN.mjs","../node_modules/emoji-mart-vue-fast/dist/emoji-mart.js","../node_modules/tributejs/dist/tribute.esm.js","../node_modules/@nextcloud/vue/dist/chunks/emoji-Dtn2mDf7.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcEmojiPicker-DNxcceCn.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcFilePicker-Ck9o-ia3.mjs","../node_modules/@nextcloud/vue/dist/chunks/useCopy-DDDe5RYH.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcKbd-GB8FuSAU.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcHotkeyList-Co7MBL5U.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcRelatedResourcesPanel-I2ZOB3cx.mjs","../node_modules/@nextcloud/vue/dist/chunks/customPickerElements-DLFtgReB.mjs","../node_modules/@nextcloud/vue/dist/chunks/referencePickerModal-B69WouiU.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcRichText-ByLPwUvM.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcRichContenteditable-8ZA_LArB.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcSelectTags-Bokig7ar.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcSettingsInputText-BwnkZzWL.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcSettingsSection-Dz_b9rcq.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcSettingsSelectGroup-BdXf7ytX.mjs","../node_modules/@nextcloud/vue/dist/Directives/Tooltip.mjs","../node_modules/@nextcloud/vue/dist/Mixins/isMobile.mjs","../src/views/PublicAlbumContent.vue"],"sourcesContent":["import '../assets/NcActionButtonGroup-DqR0weTf.css';\nimport { defineComponent } from \"vue\";\nimport { r as register, a as t } from \"./_l10n-DVz9Qdzk.mjs\";\nimport { G as GenRandomId } from \"./GenRandomId-F5ebeBB_.mjs\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nregister();\nconst _sfc_main = defineComponent({\n name: \"NcActionButtonGroup\",\n inject: {\n isInSemanticMenu: {\n from: \"NcActions:isSemanticMenu\",\n default: false\n }\n },\n props: {\n /**\n * Optional text shown below the button group\n */\n name: {\n required: false,\n default: void 0,\n type: String\n }\n },\n setup() {\n return {\n labelId: `nc-action-button-group-${GenRandomId()}`\n };\n },\n methods: {\n t\n }\n});\nvar _sfc_render = function render() {\n var _vm = this, _c = _vm._self._c;\n _vm._self._setupProxy;\n return _c(\"li\", { staticClass: \"nc-button-group-base\", attrs: { \"role\": _vm.isInSemanticMenu && \"presentation\" } }, [_vm.name ? _c(\"div\", { attrs: { \"id\": _vm.labelId } }, [_vm._v(\" \" + _vm._s(_vm.name) + \" \")]) : _vm._e(), _c(\"ul\", { staticClass: \"nc-button-group-content\", attrs: { \"role\": \"group\", \"aria-labelledby\": _vm.name ? _vm.labelId : void 0 } }, [_vm._t(\"default\")], 2)]);\n};\nvar _sfc_staticRenderFns = [];\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n null,\n \"d5482fd6\"\n);\nconst NcActionButtonGroup = __component__.exports;\nexport {\n NcActionButtonGroup as N\n};\n//# sourceMappingURL=NcActionButtonGroup-B95wg_Q6.mjs.map\n","import '../assets/NcAppNavigationSearch-DWhTZbjb.css';\nimport { useFocusWithin } from \"@vueuse/core\";\nimport { useSlots, ref, watch, nextTick } from \"vue\";\nimport { C as Close } from \"./Close-BtLPUSdO.mjs\";\nimport { N as NcInputField } from \"./NcInputField-i4Z8nb4b.mjs\";\nimport { r as register, o as t44, p as t15, a as t } from \"./_l10n-DVz9Qdzk.mjs\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nregister(t15, t44);\nconst __default__ = {\n name: \"NcAppNavigationSearch\",\n model: {\n event: \"update:modelValue\",\n prop: \"modelValue\"\n }\n};\nconst _sfc_main = /* @__PURE__ */ Object.assign(__default__, {\n props: {\n /**\n * Current search input\n */\n modelValue: {\n type: String,\n default: \"\"\n },\n /**\n * Text used to label the search input\n */\n label: {\n type: String,\n default: t(\"Search …\")\n },\n /**\n * Placeholder of the search input\n * By default the value of `label` is used.\n */\n placeholder: {\n type: String,\n default: null\n }\n },\n emits: [\"update:modelValue\"],\n setup(__props, { emit }) {\n const slots = useSlots();\n const inputElement = ref();\n const { focused: inputHasFocus } = useFocusWithin(inputElement);\n const transitionTimeout = Number.parseInt(window.getComputedStyle(window.document.body).getPropertyValue(\"--animation-quick\")) || 100;\n const actionsContainer = ref();\n const hasActions = () => !!slots.actions;\n const showActions = ref(true);\n const timeoutId = ref();\n const hideActions = ref(false);\n watch(inputHasFocus, () => {\n showActions.value = !inputHasFocus.value;\n });\n watch(showActions, (show) => {\n window.clearTimeout(timeoutId.value);\n if (show) {\n hideActions.value = false;\n } else {\n window.setTimeout(() => {\n hideActions.value = !show;\n }, transitionTimeout);\n }\n });\n function onCloseSearch() {\n emit(\"update:modelValue\", \"\");\n if (hasActions()) {\n showActions.value = true;\n nextTick(() => actionsContainer.value.querySelector(\"button\")?.focus());\n }\n }\n return { __sfc: true, emit, slots, inputElement, inputHasFocus, transitionTimeout, actionsContainer, hasActions, showActions, timeoutId, hideActions, onCloseSearch, IconClose: Close, NcInputField, t };\n }\n});\nvar _sfc_render = function render() {\n var _vm = this, _c = _vm._self._c, _setup = _vm._self._setupProxy;\n return _c(\"div\", { staticClass: \"app-navigation-search\", class: {\n \"app-navigation-search--has-actions\": _setup.hasActions()\n } }, [_c(_setup.NcInputField, { ref: \"inputElement\", staticClass: \"app-navigation-search__input\", attrs: { \"aria-label\": _vm.label, \"label-outside\": \"\", \"placeholder\": _vm.placeholder ?? _vm.label, \"show-trailing-button\": \"\", \"trailing-button-label\": _setup.t(\"Clear search\"), \"type\": \"search\", \"value\": _vm.modelValue }, on: { \"update:value\": function($event) {\n return _vm.$emit(\"update:modelValue\", $event);\n }, \"trailing-button-click\": _setup.onCloseSearch }, scopedSlots: _vm._u([{ key: \"trailing-button-icon\", fn: function() {\n return [_c(_setup.IconClose, { attrs: { \"size\": 20 } })];\n }, proxy: true }]) }), _setup.hasActions() ? _c(\"div\", { ref: \"actionsContainer\", staticClass: \"app-navigation-search__actions\", class: {\n \"app-navigation-search__actions--hidden\": !_setup.showActions,\n \"hidden-visually\": _setup.hideActions\n } }, [_vm._t(\"actions\")], 2) : _vm._e()], 1);\n};\nvar _sfc_staticRenderFns = [];\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n null,\n \"df568544\"\n);\nconst NcAppNavigationSearch = __component__.exports;\nexport {\n NcAppNavigationSearch as N\n};\n//# sourceMappingURL=NcAppNavigationSearch-CzhlljAU.mjs.map\n","import '../assets/NcMentionBubble-CaztX9Pv.css';\nimport '../assets/NcAppNavigationSettings-2Wh1E3Hq.css';\nimport { k as mdiCogOutline, l as mdiCog } from \"./mdi-DkJglNiS.mjs\";\nimport { vOnClickOutside } from \"@vueuse/components\";\nimport { N as NcButton } from \"./NcButton-CCWEL9Ci.mjs\";\nimport { N as NcIconSvgWrapper } from \"./NcIconSvgWrapper-Bui9PhAS.mjs\";\nimport { r as register, n as t48, a as t } from \"./_l10n-DVz9Qdzk.mjs\";\nimport clickOutsideOptions from \"../Mixins/clickOutsideOptions.mjs\";\nimport \"../Composables/useIsFullscreen.mjs\";\nimport \"../Composables/useIsMobile.mjs\";\nimport \"escape-html\";\nimport \"striptags\";\nimport \"vue\";\nimport \"../Composables/useIsDarkTheme.mjs\";\nimport \"@nextcloud/router\";\nimport \"../Functions/isDarkTheme.mjs\";\n/* empty css */\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nimport \"@nextcloud/auth\";\nimport \"@nextcloud/axios\";\nimport \"@nextcloud/capabilities\";\nimport \"./logger-D3RVzcfQ.mjs\";\nimport { G as GenRandomId } from \"./GenRandomId-F5ebeBB_.mjs\";\nimport { a as isLegacy32 } from \"./legacy-DV3mGZdh.mjs\";\nregister(t48);\nconst _sfc_main = {\n directives: {\n ClickOutside: vOnClickOutside\n },\n components: {\n NcButton,\n NcIconSvgWrapper\n },\n mixins: [\n clickOutsideOptions\n ],\n props: {\n /**\n * Text of the button\n *\n * @default 'Settings'\n */\n name: {\n type: String,\n required: false,\n default: t(\"Settings\")\n }\n },\n setup() {\n const contentId = GenRandomId();\n return {\n contentId,\n isLegacy32,\n mdiCog,\n mdiCogOutline\n };\n },\n data() {\n return {\n open: false\n };\n },\n computed: {\n clickOutsideConfig() {\n return [\n this.closeMenu,\n this.clickOutsideOptions\n ];\n }\n },\n methods: {\n closeMenu() {\n this.open = false;\n }\n }\n};\nvar _sfc_render = function render() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"div\", { directives: [{ name: \"click-outside\", rawName: \"v-click-outside\", value: _vm.clickOutsideConfig, expression: \"clickOutsideConfig\" }], class: { open: _vm.open }, attrs: { \"id\": \"app-settings\" } }, [_c(\"div\", { attrs: { \"id\": \"app-settings__header\" } }, [_c(\"NcButton\", { staticClass: \"settings-button\", attrs: { \"aria-controls\": _vm.contentId, \"aria-expanded\": _vm.open ? \"true\" : \"false\", \"alignment\": \"start\", \"variant\": \"tertiary\", \"wide\": \"\" }, on: { \"click\": function($event) {\n _vm.open = !_vm.open;\n } }, scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_c(\"NcIconSvgWrapper\", { staticClass: \"settings-button__icon\", attrs: { \"path\": _vm.isLegacy32 ? _vm.mdiCog : _vm.mdiCogOutline } })];\n }, proxy: true }]) }, [_vm._v(\" \" + _vm._s(_vm.name) + \" \")])], 1), _c(\"Transition\", { attrs: { \"name\": \"slide-up\" } }, [_c(\"div\", { directives: [{ name: \"show\", rawName: \"v-show\", value: _vm.open, expression: \"open\" }], attrs: { \"id\": _vm.contentId } }, [_vm._t(\"default\")], 2)])], 1);\n};\nvar _sfc_staticRenderFns = [];\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n null,\n \"8fb21c8b\"\n);\nconst NcAppNavigationSettings = __component__.exports;\nexport {\n NcAppNavigationSettings as N\n};\n//# sourceMappingURL=NcAppNavigationSettings-BaO-G72x.mjs.map\n","import '../assets/NcAppSettingsShortcutsSection-C_DMnyUy.css';\nimport { defineComponent } from \"vue\";\nimport { N as NcAppSettingsSection } from \"./NcAppSettingsSection-BjQllLEA.mjs\";\nimport { r as register, y as t30, a as t } from \"./_l10n-DVz9Qdzk.mjs\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nregister(t30);\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcAppSettingsShortcutsSection\",\n setup(__props) {\n return { __sfc: true, NcAppSettingsSection, t };\n }\n});\nconst appSettingsSectionShortcuts = \"_appSettingsSectionShortcuts_LgM7S\";\nconst style0 = {\n \"material-design-icon\": \"_material-design-icon_QP8kM\",\n appSettingsSectionShortcuts\n};\nvar _sfc_render = function render() {\n var _vm = this, _c = _vm._self._c, _setup = _vm._self._setupProxy;\n return _c(_setup.NcAppSettingsSection, { attrs: { \"id\": \"keyboard-shortcuts\", \"name\": _setup.t(\"Keyboard shortcuts\") } }, [_c(\"div\", { class: _vm.$style.appSettingsSectionShortcuts }, [_vm._t(\"default\")], 2)]);\n};\nvar _sfc_staticRenderFns = [];\nconst __cssModules = {\n \"$style\": style0\n};\nfunction _sfc_injectStyles(ctx) {\n for (var key in __cssModules) {\n this[key] = __cssModules[key];\n }\n}\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n _sfc_injectStyles,\n null\n);\nconst NcAppSettingsShortcutsSection = __component__.exports;\nexport {\n NcAppSettingsShortcutsSection as N\n};\n//# sourceMappingURL=NcAppSettingsShortcutsSection-DblUBaWP.mjs.map\n","// THIS FILE IS AUTOMATICALLY GENERATED DO NOT EDIT DIRECTLY\n// See update-tlds.js for encoding/decoding format\n// https://data.iana.org/TLD/tlds-alpha-by-domain.txt\nconst encodedTlds = 'aaa1rp3bb0ott3vie4c1le2ogado5udhabi7c0ademy5centure6ountant0s9o1tor4d0s1ult4e0g1ro2tna4f0l1rica5g0akhan5ency5i0g1rbus3force5tel5kdn3l0ibaba4pay4lfinanz6state5y2sace3tom5m0azon4ericanexpress7family11x2fam3ica3sterdam8nalytics7droid5quan4z2o0l2partments8p0le4q0uarelle8r0ab1mco4chi3my2pa2t0e3s0da2ia2sociates9t0hleta5torney7u0ction5di0ble3o3spost5thor3o0s4w0s2x0a2z0ure5ba0by2idu3namex4d1k2r0celona5laycard4s5efoot5gains6seball5ketball8uhaus5yern5b0c1t1va3cg1n2d1e0ats2uty4er2rlin4st0buy5t2f1g1h0arti5i0ble3d1ke2ng0o3o1z2j1lack0friday9ockbuster8g1omberg7ue3m0s1w2n0pparibas9o0ats3ehringer8fa2m1nd2o0k0ing5sch2tik2on4t1utique6x2r0adesco6idgestone9oadway5ker3ther5ussels7s1t1uild0ers6siness6y1zz3v1w1y1z0h3ca0b1fe2l0l1vinklein9m0era3p2non3petown5ital0one8r0avan4ds2e0er0s4s2sa1e1h1ino4t0ering5holic7ba1n1re3c1d1enter4o1rn3f0a1d2g1h0anel2nel4rity4se2t2eap3intai5ristmas6ome4urch5i0priani6rcle4sco3tadel4i0c2y3k1l0aims4eaning6ick2nic1que6othing5ud3ub0med6m1n1o0ach3des3ffee4llege4ogne5m0mbank4unity6pany2re3uter5sec4ndos3struction8ulting7tact3ractors9oking4l1p2rsica5untry4pon0s4rses6pa2r0edit0card4union9icket5own3s1uise0s6u0isinella9v1w1x1y0mru3ou3z2dad1nce3ta1e1ing3sun4y2clk3ds2e0al0er2s3gree4livery5l1oitte5ta3mocrat6ntal2ist5si0gn4v2hl2iamonds6et2gital5rect0ory7scount3ver5h2y2j1k1m1np2o0cs1tor4g1mains5t1wnload7rive4tv2ubai3nlop4pont4rban5vag2r2z2earth3t2c0o2deka3u0cation8e1g1mail3erck5nergy4gineer0ing9terprises10pson4quipment8r0icsson6ni3s0q1tate5t1u0rovision8s2vents5xchange6pert3osed4ress5traspace10fage2il1rwinds6th3mily4n0s2rm0ers5shion4t3edex3edback6rrari3ero6i0delity5o2lm2nal1nce1ial7re0stone6mdale6sh0ing5t0ness6j1k1lickr3ghts4r2orist4wers5y2m1o0o0d1tball6rd1ex2sale4um3undation8x2r0ee1senius7l1ogans4ntier7tr2ujitsu5n0d2rniture7tbol5yi3ga0l0lery3o1up4me0s3p1rden4y2b0iz3d0n2e0a1nt0ing5orge5f1g0ee3h1i0ft0s3ves2ing5l0ass3e1obal2o4m0ail3bh2o1x2n1odaddy5ld0point6f2o0dyear5g0le4p1t1v2p1q1r0ainger5phics5tis4een3ipe3ocery4up4s1t1u0cci3ge2ide2tars5ru3w1y2hair2mburg5ngout5us3bo2dfc0bank7ealth0care8lp1sinki6re1mes5iphop4samitsu7tachi5v2k0t2m1n1ockey4ldings5iday5medepot5goods5s0ense7nda3rse3spital5t0ing5t0els3mail5use3w2r1sbc3t1u0ghes5yatt3undai7ibm2cbc2e1u2d1e0ee3fm2kano4l1m0amat4db2mo0bilien9n0c1dustries8finiti5o2g1k1stitute6urance4e4t0ernational10uit4vestments10o1piranga7q1r0ish4s0maili5t0anbul7t0au2v3jaguar4va3cb2e0ep2tzt3welry6io2ll2m0p2nj2o0bs1urg4t1y2p0morgan6rs3uegos4niper7kaufen5ddi3e0rryhotels6properties14fh2g1h1i0a1ds2m1ndle4tchen5wi3m1n1oeln3matsu5sher5p0mg2n2r0d1ed3uokgroup8w1y0oto4z2la0caixa5mborghini8er3nd0rover6xess5salle5t0ino3robe5w0yer5b1c1ds2ease3clerc5frak4gal2o2xus4gbt3i0dl2fe0insurance9style7ghting6ke2lly3mited4o2ncoln4k2ve1ing5k1lc1p2oan0s3cker3us3l1ndon4tte1o3ve3pl0financial11r1s1t0d0a3u0ndbeck6xe1ury5v1y2ma0drid4if1son4keup4n0agement7go3p1rket0ing3s4riott5shalls7ttel5ba2c0kinsey7d1e0d0ia3et2lbourne7me1orial6n0u2rckmsd7g1h1iami3crosoft7l1ni1t2t0subishi9k1l0b1s2m0a2n1o0bi0le4da2e1i1m1nash3ey2ster5rmon3tgage6scow4to0rcycles9v0ie4p1q1r1s0d2t0n1r2u0seum3ic4v1w1x1y1z2na0b1goya4me2vy3ba2c1e0c1t0bank4flix4work5ustar5w0s2xt0direct7us4f0l2g0o2hk2i0co2ke1on3nja3ssan1y5l1o0kia3rton4w0ruz3tv4p1r0a1w2tt2u1yc2z2obi1server7ffice5kinawa6layan0group9lo3m0ega4ne1g1l0ine5oo2pen3racle3nge4g0anic5igins6saka4tsuka4t2vh3pa0ge2nasonic7ris2s1tners4s1y3y2ccw3e0t2f0izer5g1h0armacy6d1ilips5one2to0graphy6s4ysio5ics1tet2ures6d1n0g1k2oneer5zza4k1l0ace2y0station9umbing5s3m1n0c2ohl2ker3litie5rn2st3r0axi3ess3ime3o0d0uctions8f1gressive8mo2perties3y5tection8u0dential9s1t1ub2w0c2y2qa1pon3uebec3st5racing4dio4e0ad1lestate6tor2y4cipes5d0stone5umbrella9hab3ise0n3t2liance6n0t0als5pair3ort3ublican8st0aurant8view0s5xroth6ich0ardli6oh3l1o1p2o0cks3deo3gers4om3s0vp3u0gby3hr2n2w0e2yukyu6sa0arland6fe0ty4kura4le1on3msclub4ung5ndvik0coromant12ofi4p1rl2s1ve2xo3b0i1s2c0b1haeffler7midt4olarships8ol3ule3warz5ience5ot3d1e0arch3t2cure1ity6ek2lect4ner3rvices6ven3w1x0y3fr2g1h0angrila6rp3ell3ia1ksha5oes2p0ping5uji3w3i0lk2na1gles5te3j1k0i0n2y0pe4l0ing4m0art3ile4n0cf3o0ccer3ial4ftbank4ware6hu2lar2utions7ng1y2y2pa0ce3ort2t3r0l2s1t0ada2ples4r1tebank4farm7c0group6ockholm6rage3e3ream4udio2y3yle4u0cks3pplies3y2ort5rf1gery5zuki5v1watch4iss4x1y0dney4stems6z2tab1ipei4lk2obao4rget4tamotors6r2too4x0i3c0i2d0k2eam2ch0nology8l1masek5nnis4va3f1g1h0d1eater2re6iaa2ckets5enda4ps2res2ol4j0maxx4x2k0maxx5l1m0all4n1o0day3kyo3ols3p1ray3shiba5tal3urs3wn2yota3s3r0ade1ing4ining5vel0ers0insurance16ust3v2t1ube2i1nes3shu4v0s2w1z2ua1bank3s2g1k1nicom3versity8o2ol2ps2s1y1z2va0cations7na1guard7c1e0gas3ntures6risign5mögensberater2ung14sicherung10t2g1i0ajes4deo3g1king4llas4n1p1rgin4sa1ion4va1o3laanderen9n1odka3lvo3te1ing3o2yage5u2wales2mart4ter4ng0gou5tch0es6eather0channel12bcam3er2site5d0ding5ibo2r3f1hoswho6ien2ki2lliamhill9n0dows4e1ners6me2olterskluwer11odside6rk0s2ld3w2s1tc1f3xbox3erox4ihuan4n2xx2yz3yachts4hoo3maxun5ndex5e1odobashi7ga2kohama6u0tube6t1un3za0ppos4ra3ero3ip2m1one3uerich6w2';\n// Internationalized domain names containing non-ASCII\nconst encodedUtlds = 'ελ1υ2бг1ел3дети4ею2католик6ом3мкд2он1сква6онлайн5рг3рус2ф2сайт3рб3укр3қаз3հայ3ישראל5קום3ابوظبي5رامكو5لاردن4بحرين5جزائر5سعودية6عليان5مغرب5مارات5یران5بارت2زار4يتك3ھارت5تونس4سودان3رية5شبكة4عراق2ب2مان4فلسطين6قطر3كاثوليك6وم3مصر2ليسيا5وريتانيا7قع4همراه5پاکستان7ڀارت4कॉम3नेट3भारत0म्3ोत5संगठन5বাংলা5ভারত2ৰত4ਭਾਰਤ4ભારત4ଭାରତ4இந்தியா6லங்கை6சிங்கப்பூர்11భారత్5ಭಾರತ4ഭാരതം5ලංකා4คอม3ไทย3ລາວ3გე2みんな3アマゾン4クラウド4グーグル4コム2ストア3セール3ファッション6ポイント4世界2中信1国1國1文网3亚马逊3企业2佛山2信息2健康2八卦2公司1益2台湾1灣2商城1店1标2嘉里0大酒店5在线2大拿2天主教3娱乐2家電2广东2微博2慈善2我爱你3手机2招聘2政务1府2新加坡2闻2时尚2書籍2机构2淡马锡3游戏2澳門2点看2移动2组织机构4网址1店1站1络2联通2谷歌2购物2通販2集团2電訊盈科4飞利浦3食品2餐厅2香格里拉3港2닷넷1컴2삼성2한국2';\n\n/**\n * Finite State Machine generation utilities\n */\n\n/**\n * @template T\n * @typedef {{ [group: string]: T[] }} Collections\n */\n\n/**\n * @typedef {{ [group: string]: true }} Flags\n */\n\n// Keys in scanner Collections instances\nconst numeric = 'numeric';\nconst ascii = 'ascii';\nconst alpha = 'alpha';\nconst asciinumeric = 'asciinumeric';\nconst alphanumeric = 'alphanumeric';\nconst domain = 'domain';\nconst emoji = 'emoji';\nconst scheme = 'scheme';\nconst slashscheme = 'slashscheme';\nconst whitespace = 'whitespace';\n\n/**\n * @template T\n * @param {string} name\n * @param {Collections} groups to register in\n * @returns {T[]} Current list of tokens in the given collection\n */\nfunction registerGroup(name, groups) {\n if (!(name in groups)) {\n groups[name] = [];\n }\n return groups[name];\n}\n\n/**\n * @template T\n * @param {T} t token to add\n * @param {Collections} groups\n * @param {Flags} flags\n */\nfunction addToGroups(t, flags, groups) {\n if (flags[numeric]) {\n flags[asciinumeric] = true;\n flags[alphanumeric] = true;\n }\n if (flags[ascii]) {\n flags[asciinumeric] = true;\n flags[alpha] = true;\n }\n if (flags[asciinumeric]) {\n flags[alphanumeric] = true;\n }\n if (flags[alpha]) {\n flags[alphanumeric] = true;\n }\n if (flags[alphanumeric]) {\n flags[domain] = true;\n }\n if (flags[emoji]) {\n flags[domain] = true;\n }\n for (const k in flags) {\n const group = registerGroup(k, groups);\n if (group.indexOf(t) < 0) {\n group.push(t);\n }\n }\n}\n\n/**\n * @template T\n * @param {T} t token to check\n * @param {Collections} groups\n * @returns {Flags} group flags that contain this token\n */\nfunction flagsForToken(t, groups) {\n const result = {};\n for (const c in groups) {\n if (groups[c].indexOf(t) >= 0) {\n result[c] = true;\n }\n }\n return result;\n}\n\n/**\n * @template T\n * @typedef {null | T } Transition\n */\n\n/**\n * Define a basic state machine state. j is the list of character transitions,\n * jr is the list of regex-match transitions, jd is the default state to\n * transition to t is the accepting token type, if any. If this is the terminal\n * state, then it does not emit a token.\n *\n * The template type T represents the type of the token this state accepts. This\n * should be a string (such as of the token exports in `text.js`) or a\n * MultiToken subclass (from `multi.js`)\n *\n * @template T\n * @param {T} [token] Token that this state emits\n */\nfunction State(token = null) {\n // this.n = null; // DEBUG: State name\n /** @type {{ [input: string]: State }} j */\n this.j = {}; // IMPLEMENTATION 1\n // this.j = []; // IMPLEMENTATION 2\n /** @type {[RegExp, State][]} jr */\n this.jr = [];\n /** @type {?State} jd */\n this.jd = null;\n /** @type {?T} t */\n this.t = token;\n}\n\n/**\n * Scanner token groups\n * @type Collections\n */\nState.groups = {};\nState.prototype = {\n accepts() {\n return !!this.t;\n },\n /**\n * Follow an existing transition from the given input to the next state.\n * Does not mutate.\n * @param {string} input character or token type to transition on\n * @returns {?State} the next state, if any\n */\n go(input) {\n const state = this;\n const nextState = state.j[input];\n if (nextState) {\n return nextState;\n }\n for (let i = 0; i < state.jr.length; i++) {\n const regex = state.jr[i][0];\n const nextState = state.jr[i][1]; // note: might be empty to prevent default jump\n if (nextState && regex.test(input)) {\n return nextState;\n }\n }\n // Nowhere left to jump! Return default, if any\n return state.jd;\n },\n /**\n * Whether the state has a transition for the given input. Set the second\n * argument to true to only look for an exact match (and not a default or\n * regular-expression-based transition)\n * @param {string} input\n * @param {boolean} exactOnly\n */\n has(input, exactOnly = false) {\n return exactOnly ? input in this.j : !!this.go(input);\n },\n /**\n * Short for \"transition all\"; create a transition from the array of items\n * in the given list to the same final resulting state.\n * @param {string | string[]} inputs Group of inputs to transition on\n * @param {Transition | State} [next] Transition options\n * @param {Flags} [flags] Collections flags to add token to\n * @param {Collections} [groups] Master list of token groups\n */\n ta(inputs, next, flags, groups) {\n for (let i = 0; i < inputs.length; i++) {\n this.tt(inputs[i], next, flags, groups);\n }\n },\n /**\n * Short for \"take regexp transition\"; defines a transition for this state\n * when it encounters a token which matches the given regular expression\n * @param {RegExp} regexp Regular expression transition (populate first)\n * @param {T | State} [next] Transition options\n * @param {Flags} [flags] Collections flags to add token to\n * @param {Collections} [groups] Master list of token groups\n * @returns {State} taken after the given input\n */\n tr(regexp, next, flags, groups) {\n groups = groups || State.groups;\n let nextState;\n if (next && next.j) {\n nextState = next;\n } else {\n // Token with maybe token groups\n nextState = new State(next);\n if (flags && groups) {\n addToGroups(next, flags, groups);\n }\n }\n this.jr.push([regexp, nextState]);\n return nextState;\n },\n /**\n * Short for \"take transitions\", will take as many sequential transitions as\n * the length of the given input and returns the\n * resulting final state.\n * @param {string | string[]} input\n * @param {T | State} [next] Transition options\n * @param {Flags} [flags] Collections flags to add token to\n * @param {Collections} [groups] Master list of token groups\n * @returns {State} taken after the given input\n */\n ts(input, next, flags, groups) {\n let state = this;\n const len = input.length;\n if (!len) {\n return state;\n }\n for (let i = 0; i < len - 1; i++) {\n state = state.tt(input[i]);\n }\n return state.tt(input[len - 1], next, flags, groups);\n },\n /**\n * Short for \"take transition\", this is a method for building/working with\n * state machines.\n *\n * If a state already exists for the given input, returns it.\n *\n * If a token is specified, that state will emit that token when reached by\n * the linkify engine.\n *\n * If no state exists, it will be initialized with some default transitions\n * that resemble existing default transitions.\n *\n * If a state is given for the second argument, that state will be\n * transitioned to on the given input regardless of what that input\n * previously did.\n *\n * Specify a token group flags to define groups that this token belongs to.\n * The token will be added to corresponding entires in the given groups\n * object.\n *\n * @param {string} input character, token type to transition on\n * @param {T | State} [next] Transition options\n * @param {Flags} [flags] Collections flags to add token to\n * @param {Collections} [groups] Master list of groups\n * @returns {State} taken after the given input\n */\n tt(input, next, flags, groups) {\n groups = groups || State.groups;\n const state = this;\n\n // Check if existing state given, just a basic transition\n if (next && next.j) {\n state.j[input] = next;\n return next;\n }\n const t = next;\n\n // Take the transition with the usual default mechanisms and use that as\n // a template for creating the next state\n let nextState,\n templateState = state.go(input);\n if (templateState) {\n nextState = new State();\n Object.assign(nextState.j, templateState.j);\n nextState.jr.push.apply(nextState.jr, templateState.jr);\n nextState.jd = templateState.jd;\n nextState.t = templateState.t;\n } else {\n nextState = new State();\n }\n if (t) {\n // Ensure newly token is in the same groups as the old token\n if (groups) {\n if (nextState.t && typeof nextState.t === 'string') {\n const allFlags = Object.assign(flagsForToken(nextState.t, groups), flags);\n addToGroups(t, allFlags, groups);\n } else if (flags) {\n addToGroups(t, flags, groups);\n }\n }\n nextState.t = t; // overwrite anything that was previously there\n }\n state.j[input] = nextState;\n return nextState;\n }\n};\n\n// Helper functions to improve minification (not exported outside linkifyjs module)\n\n/**\n * @template T\n * @param {State} state\n * @param {string | string[]} input\n * @param {Flags} [flags]\n * @param {Collections} [groups]\n */\nconst ta = (state, input, next, flags, groups) => state.ta(input, next, flags, groups);\n\n/**\n * @template T\n * @param {State} state\n * @param {RegExp} regexp\n * @param {T | State} [next]\n * @param {Flags} [flags]\n * @param {Collections} [groups]\n */\nconst tr = (state, regexp, next, flags, groups) => state.tr(regexp, next, flags, groups);\n\n/**\n * @template T\n * @param {State} state\n * @param {string | string[]} input\n * @param {T | State} [next]\n * @param {Flags} [flags]\n * @param {Collections} [groups]\n */\nconst ts = (state, input, next, flags, groups) => state.ts(input, next, flags, groups);\n\n/**\n * @template T\n * @param {State} state\n * @param {string} input\n * @param {T | State} [next]\n * @param {Collections} [groups]\n * @param {Flags} [flags]\n */\nconst tt = (state, input, next, flags, groups) => state.tt(input, next, flags, groups);\n\n/******************************************************************************\nText Tokens\nIdentifiers for token outputs from the regexp scanner\n******************************************************************************/\n\n// A valid web domain token\nconst WORD = 'WORD'; // only contains a-z\nconst UWORD = 'UWORD'; // contains letters other than a-z, used for IDN\nconst ASCIINUMERICAL = 'ASCIINUMERICAL'; // contains a-z, 0-9\nconst ALPHANUMERICAL = 'ALPHANUMERICAL'; // contains numbers and letters other than a-z, used for IDN\n\n// Special case of word\nconst LOCALHOST = 'LOCALHOST';\n\n// Valid top-level domain, special case of WORD (see tlds.js)\nconst TLD = 'TLD';\n\n// Valid IDN TLD, special case of UWORD (see tlds.js)\nconst UTLD = 'UTLD';\n\n// The scheme portion of a web URI protocol. Supported types include: `mailto`,\n// `file`, and user-defined custom protocols. Limited to schemes that contain\n// only letters\nconst SCHEME = 'SCHEME';\n\n// Similar to SCHEME, except makes distinction for schemes that must always be\n// followed by `://`, not just `:`. Supported types include `http`, `https`,\n// `ftp`, `ftps`\nconst SLASH_SCHEME = 'SLASH_SCHEME';\n\n// Any sequence of digits 0-9\nconst NUM = 'NUM';\n\n// Any number of consecutive whitespace characters that are not newline\nconst WS = 'WS';\n\n// New line (unix style)\nconst NL = 'NL'; // \\n\n\n// Opening/closing bracket classes\n// TODO: Rename OPEN -> LEFT and CLOSE -> RIGHT in v5 to fit with Unicode names\n// Also rename angle brackes to LESSTHAN and GREATER THAN\nconst OPENBRACE = 'OPENBRACE'; // {\nconst CLOSEBRACE = 'CLOSEBRACE'; // }\nconst OPENBRACKET = 'OPENBRACKET'; // [\nconst CLOSEBRACKET = 'CLOSEBRACKET'; // ]\nconst OPENPAREN = 'OPENPAREN'; // (\nconst CLOSEPAREN = 'CLOSEPAREN'; // )\nconst OPENANGLEBRACKET = 'OPENANGLEBRACKET'; // <\nconst CLOSEANGLEBRACKET = 'CLOSEANGLEBRACKET'; // >\nconst FULLWIDTHLEFTPAREN = 'FULLWIDTHLEFTPAREN'; // (\nconst FULLWIDTHRIGHTPAREN = 'FULLWIDTHRIGHTPAREN'; // )\nconst LEFTCORNERBRACKET = 'LEFTCORNERBRACKET'; // 「\nconst RIGHTCORNERBRACKET = 'RIGHTCORNERBRACKET'; // 」\nconst LEFTWHITECORNERBRACKET = 'LEFTWHITECORNERBRACKET'; // 『\nconst RIGHTWHITECORNERBRACKET = 'RIGHTWHITECORNERBRACKET'; // 』\nconst FULLWIDTHLESSTHAN = 'FULLWIDTHLESSTHAN'; // <\nconst FULLWIDTHGREATERTHAN = 'FULLWIDTHGREATERTHAN'; // >\n\n// Various symbols\nconst AMPERSAND = 'AMPERSAND'; // &\nconst APOSTROPHE = 'APOSTROPHE'; // '\nconst ASTERISK = 'ASTERISK'; // *\nconst AT = 'AT'; // @\nconst BACKSLASH = 'BACKSLASH'; // \\\nconst BACKTICK = 'BACKTICK'; // `\nconst CARET = 'CARET'; // ^\nconst COLON = 'COLON'; // :\nconst COMMA = 'COMMA'; // ,\nconst DOLLAR = 'DOLLAR'; // $\nconst DOT = 'DOT'; // .\nconst EQUALS = 'EQUALS'; // =\nconst EXCLAMATION = 'EXCLAMATION'; // !\nconst HYPHEN = 'HYPHEN'; // -\nconst PERCENT = 'PERCENT'; // %\nconst PIPE = 'PIPE'; // |\nconst PLUS = 'PLUS'; // +\nconst POUND = 'POUND'; // #\nconst QUERY = 'QUERY'; // ?\nconst QUOTE = 'QUOTE'; // \"\nconst FULLWIDTHMIDDLEDOT = 'FULLWIDTHMIDDLEDOT'; // ・\n\nconst SEMI = 'SEMI'; // ;\nconst SLASH = 'SLASH'; // /\nconst TILDE = 'TILDE'; // ~\nconst UNDERSCORE = 'UNDERSCORE'; // _\n\n// Emoji symbol\nconst EMOJI$1 = 'EMOJI';\n\n// Default token - anything that is not one of the above\nconst SYM = 'SYM';\n\nvar tk = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tALPHANUMERICAL: ALPHANUMERICAL,\n\tAMPERSAND: AMPERSAND,\n\tAPOSTROPHE: APOSTROPHE,\n\tASCIINUMERICAL: ASCIINUMERICAL,\n\tASTERISK: ASTERISK,\n\tAT: AT,\n\tBACKSLASH: BACKSLASH,\n\tBACKTICK: BACKTICK,\n\tCARET: CARET,\n\tCLOSEANGLEBRACKET: CLOSEANGLEBRACKET,\n\tCLOSEBRACE: CLOSEBRACE,\n\tCLOSEBRACKET: CLOSEBRACKET,\n\tCLOSEPAREN: CLOSEPAREN,\n\tCOLON: COLON,\n\tCOMMA: COMMA,\n\tDOLLAR: DOLLAR,\n\tDOT: DOT,\n\tEMOJI: EMOJI$1,\n\tEQUALS: EQUALS,\n\tEXCLAMATION: EXCLAMATION,\n\tFULLWIDTHGREATERTHAN: FULLWIDTHGREATERTHAN,\n\tFULLWIDTHLEFTPAREN: FULLWIDTHLEFTPAREN,\n\tFULLWIDTHLESSTHAN: FULLWIDTHLESSTHAN,\n\tFULLWIDTHMIDDLEDOT: FULLWIDTHMIDDLEDOT,\n\tFULLWIDTHRIGHTPAREN: FULLWIDTHRIGHTPAREN,\n\tHYPHEN: HYPHEN,\n\tLEFTCORNERBRACKET: LEFTCORNERBRACKET,\n\tLEFTWHITECORNERBRACKET: LEFTWHITECORNERBRACKET,\n\tLOCALHOST: LOCALHOST,\n\tNL: NL,\n\tNUM: NUM,\n\tOPENANGLEBRACKET: OPENANGLEBRACKET,\n\tOPENBRACE: OPENBRACE,\n\tOPENBRACKET: OPENBRACKET,\n\tOPENPAREN: OPENPAREN,\n\tPERCENT: PERCENT,\n\tPIPE: PIPE,\n\tPLUS: PLUS,\n\tPOUND: POUND,\n\tQUERY: QUERY,\n\tQUOTE: QUOTE,\n\tRIGHTCORNERBRACKET: RIGHTCORNERBRACKET,\n\tRIGHTWHITECORNERBRACKET: RIGHTWHITECORNERBRACKET,\n\tSCHEME: SCHEME,\n\tSEMI: SEMI,\n\tSLASH: SLASH,\n\tSLASH_SCHEME: SLASH_SCHEME,\n\tSYM: SYM,\n\tTILDE: TILDE,\n\tTLD: TLD,\n\tUNDERSCORE: UNDERSCORE,\n\tUTLD: UTLD,\n\tUWORD: UWORD,\n\tWORD: WORD,\n\tWS: WS\n});\n\n// Note that these two Unicode ones expand into a really big one with Babel\nconst ASCII_LETTER = /[a-z]/;\nconst LETTER = /\\p{L}/u; // Any Unicode character with letter data type\nconst EMOJI = /\\p{Emoji}/u; // Any Unicode emoji character\nconst EMOJI_VARIATION$1 = /\\ufe0f/;\nconst DIGIT = /\\d/;\nconst SPACE = /\\s/;\n\nvar regexp = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tASCII_LETTER: ASCII_LETTER,\n\tDIGIT: DIGIT,\n\tEMOJI: EMOJI,\n\tEMOJI_VARIATION: EMOJI_VARIATION$1,\n\tLETTER: LETTER,\n\tSPACE: SPACE\n});\n\n/**\n\tThe scanner provides an interface that takes a string of text as input, and\n\toutputs an array of tokens instances that can be used for easy URL parsing.\n*/\n\nconst CR = '\\r'; // carriage-return character\nconst LF = '\\n'; // line-feed character\nconst EMOJI_VARIATION = '\\ufe0f'; // Variation selector, follows heart and others\nconst EMOJI_JOINER = '\\u200d'; // zero-width joiner\nconst OBJECT_REPLACEMENT = '\\ufffc'; // whitespace placeholder that sometimes appears in rich text editors\n\nlet tlds = null,\n utlds = null; // don't change so only have to be computed once\n\n/**\n * Scanner output token:\n * - `t` is the token name (e.g., 'NUM', 'EMOJI', 'TLD')\n * - `v` is the value of the token (e.g., '123', '❤️', 'com')\n * - `s` is the start index of the token in the original string\n * - `e` is the end index of the token in the original string\n * @typedef {{t: string, v: string, s: number, e: number}} Token\n */\n\n/**\n * @template T\n * @typedef {{ [collection: string]: T[] }} Collections\n */\n\n/**\n * Initialize the scanner character-based state machine for the given start\n * state\n * @param {[string, boolean][]} customSchemes List of custom schemes, where each\n * item is a length-2 tuple with the first element set to the string scheme, and\n * the second element set to `true` if the `://` after the scheme is optional\n */\nfunction init$2(customSchemes = []) {\n // Frequently used states (name argument removed during minification)\n /** @type Collections */\n const groups = {}; // of tokens\n State.groups = groups;\n /** @type State */\n const Start = new State();\n if (tlds == null) {\n tlds = decodeTlds(encodedTlds);\n }\n if (utlds == null) {\n utlds = decodeTlds(encodedUtlds);\n }\n\n // States for special URL symbols that accept immediately after start\n tt(Start, \"'\", APOSTROPHE);\n tt(Start, '{', OPENBRACE);\n tt(Start, '}', CLOSEBRACE);\n tt(Start, '[', OPENBRACKET);\n tt(Start, ']', CLOSEBRACKET);\n tt(Start, '(', OPENPAREN);\n tt(Start, ')', CLOSEPAREN);\n tt(Start, '<', OPENANGLEBRACKET);\n tt(Start, '>', CLOSEANGLEBRACKET);\n tt(Start, '(', FULLWIDTHLEFTPAREN);\n tt(Start, ')', FULLWIDTHRIGHTPAREN);\n tt(Start, '「', LEFTCORNERBRACKET);\n tt(Start, '」', RIGHTCORNERBRACKET);\n tt(Start, '『', LEFTWHITECORNERBRACKET);\n tt(Start, '』', RIGHTWHITECORNERBRACKET);\n tt(Start, '<', FULLWIDTHLESSTHAN);\n tt(Start, '>', FULLWIDTHGREATERTHAN);\n tt(Start, '&', AMPERSAND);\n tt(Start, '*', ASTERISK);\n tt(Start, '@', AT);\n tt(Start, '`', BACKTICK);\n tt(Start, '^', CARET);\n tt(Start, ':', COLON);\n tt(Start, ',', COMMA);\n tt(Start, '$', DOLLAR);\n tt(Start, '.', DOT);\n tt(Start, '=', EQUALS);\n tt(Start, '!', EXCLAMATION);\n tt(Start, '-', HYPHEN);\n tt(Start, '%', PERCENT);\n tt(Start, '|', PIPE);\n tt(Start, '+', PLUS);\n tt(Start, '#', POUND);\n tt(Start, '?', QUERY);\n tt(Start, '\"', QUOTE);\n tt(Start, '/', SLASH);\n tt(Start, ';', SEMI);\n tt(Start, '~', TILDE);\n tt(Start, '_', UNDERSCORE);\n tt(Start, '\\\\', BACKSLASH);\n tt(Start, '・', FULLWIDTHMIDDLEDOT);\n const Num = tr(Start, DIGIT, NUM, {\n [numeric]: true\n });\n tr(Num, DIGIT, Num);\n const Asciinumeric = tr(Num, ASCII_LETTER, ASCIINUMERICAL, {\n [asciinumeric]: true\n });\n const Alphanumeric = tr(Num, LETTER, ALPHANUMERICAL, {\n [alphanumeric]: true\n });\n\n // State which emits a word token\n const Word = tr(Start, ASCII_LETTER, WORD, {\n [ascii]: true\n });\n tr(Word, DIGIT, Asciinumeric);\n tr(Word, ASCII_LETTER, Word);\n tr(Asciinumeric, DIGIT, Asciinumeric);\n tr(Asciinumeric, ASCII_LETTER, Asciinumeric);\n\n // Same as previous, but specific to non-fsm.ascii alphabet words\n const UWord = tr(Start, LETTER, UWORD, {\n [alpha]: true\n });\n tr(UWord, ASCII_LETTER); // Non-accepting\n tr(UWord, DIGIT, Alphanumeric);\n tr(UWord, LETTER, UWord);\n tr(Alphanumeric, DIGIT, Alphanumeric);\n tr(Alphanumeric, ASCII_LETTER); // Non-accepting\n tr(Alphanumeric, LETTER, Alphanumeric); // Non-accepting\n\n // Whitespace jumps\n // Tokens of only non-newline whitespace are arbitrarily long\n // If any whitespace except newline, more whitespace!\n const Nl = tt(Start, LF, NL, {\n [whitespace]: true\n });\n const Cr = tt(Start, CR, WS, {\n [whitespace]: true\n });\n const Ws = tr(Start, SPACE, WS, {\n [whitespace]: true\n });\n tt(Start, OBJECT_REPLACEMENT, Ws);\n tt(Cr, LF, Nl); // \\r\\n\n tt(Cr, OBJECT_REPLACEMENT, Ws);\n tr(Cr, SPACE, Ws);\n tt(Ws, CR); // non-accepting state to avoid mixing whitespaces\n tt(Ws, LF); // non-accepting state to avoid mixing whitespaces\n tr(Ws, SPACE, Ws);\n tt(Ws, OBJECT_REPLACEMENT, Ws);\n\n // Emoji tokens. They are not grouped by the scanner except in cases where a\n // zero-width joiner is present\n const Emoji = tr(Start, EMOJI, EMOJI$1, {\n [emoji]: true\n });\n tt(Emoji, '#'); // no transition, emoji regex seems to match #\n tr(Emoji, EMOJI, Emoji);\n tt(Emoji, EMOJI_VARIATION, Emoji);\n // tt(Start, EMOJI_VARIATION, Emoji); // This one is sketchy\n\n const EmojiJoiner = tt(Emoji, EMOJI_JOINER);\n tt(EmojiJoiner, '#');\n tr(EmojiJoiner, EMOJI, Emoji);\n // tt(EmojiJoiner, EMOJI_VARIATION, Emoji); // also sketchy\n\n // Generates states for top-level domains\n // Note that this is most accurate when tlds are in alphabetical order\n const wordjr = [[ASCII_LETTER, Word], [DIGIT, Asciinumeric]];\n const uwordjr = [[ASCII_LETTER, null], [LETTER, UWord], [DIGIT, Alphanumeric]];\n for (let i = 0; i < tlds.length; i++) {\n fastts(Start, tlds[i], TLD, WORD, wordjr);\n }\n for (let i = 0; i < utlds.length; i++) {\n fastts(Start, utlds[i], UTLD, UWORD, uwordjr);\n }\n addToGroups(TLD, {\n tld: true,\n ascii: true\n }, groups);\n addToGroups(UTLD, {\n utld: true,\n alpha: true\n }, groups);\n\n // Collect the states generated by different protocols. NOTE: If any new TLDs\n // get added that are also protocols, set the token to be the same as the\n // protocol to ensure parsing works as expected.\n fastts(Start, 'file', SCHEME, WORD, wordjr);\n fastts(Start, 'mailto', SCHEME, WORD, wordjr);\n fastts(Start, 'http', SLASH_SCHEME, WORD, wordjr);\n fastts(Start, 'https', SLASH_SCHEME, WORD, wordjr);\n fastts(Start, 'ftp', SLASH_SCHEME, WORD, wordjr);\n fastts(Start, 'ftps', SLASH_SCHEME, WORD, wordjr);\n addToGroups(SCHEME, {\n scheme: true,\n ascii: true\n }, groups);\n addToGroups(SLASH_SCHEME, {\n slashscheme: true,\n ascii: true\n }, groups);\n\n // Register custom schemes. Assumes each scheme is asciinumeric with hyphens\n customSchemes = customSchemes.sort((a, b) => a[0] > b[0] ? 1 : -1);\n for (let i = 0; i < customSchemes.length; i++) {\n const sch = customSchemes[i][0];\n const optionalSlashSlash = customSchemes[i][1];\n const flags = optionalSlashSlash ? {\n [scheme]: true\n } : {\n [slashscheme]: true\n };\n if (sch.indexOf('-') >= 0) {\n flags[domain] = true;\n } else if (!ASCII_LETTER.test(sch)) {\n flags[numeric] = true; // numbers only\n } else if (DIGIT.test(sch)) {\n flags[asciinumeric] = true;\n } else {\n flags[ascii] = true;\n }\n ts(Start, sch, sch, flags);\n }\n\n // Localhost token\n ts(Start, 'localhost', LOCALHOST, {\n ascii: true\n });\n\n // Set default transition for start state (some symbol)\n Start.jd = new State(SYM);\n return {\n start: Start,\n tokens: Object.assign({\n groups\n }, tk)\n };\n}\n\n/**\n\tGiven a string, returns an array of TOKEN instances representing the\n\tcomposition of that string.\n\n\t@method run\n\t@param {State} start scanner starting state\n\t@param {string} str input string to scan\n\t@return {Token[]} list of tokens, each with a type and value\n*/\nfunction run$1(start, str) {\n // State machine is not case sensitive, so input is tokenized in lowercased\n // form (still returns regular case). Uses selective `toLowerCase` because\n // lowercasing the entire string causes the length and character position to\n // vary in some non-English strings with V8-based runtimes.\n const iterable = stringToArray(str.replace(/[A-Z]/g, c => c.toLowerCase()));\n const charCount = iterable.length; // <= len if there are emojis, etc\n const tokens = []; // return value\n\n // cursor through the string itself, accounting for characters that have\n // width with length 2 such as emojis\n let cursor = 0;\n\n // Cursor through the array-representation of the string\n let charCursor = 0;\n\n // Tokenize the string\n while (charCursor < charCount) {\n let state = start;\n let nextState = null;\n let tokenLength = 0;\n let latestAccepting = null;\n let sinceAccepts = -1;\n let charsSinceAccepts = -1;\n while (charCursor < charCount && (nextState = state.go(iterable[charCursor]))) {\n state = nextState;\n\n // Keep track of the latest accepting state\n if (state.accepts()) {\n sinceAccepts = 0;\n charsSinceAccepts = 0;\n latestAccepting = state;\n } else if (sinceAccepts >= 0) {\n sinceAccepts += iterable[charCursor].length;\n charsSinceAccepts++;\n }\n tokenLength += iterable[charCursor].length;\n cursor += iterable[charCursor].length;\n charCursor++;\n }\n\n // Roll back to the latest accepting state\n cursor -= sinceAccepts;\n charCursor -= charsSinceAccepts;\n tokenLength -= sinceAccepts;\n\n // No more jumps, just make a new token from the last accepting one\n tokens.push({\n t: latestAccepting.t,\n // token type/name\n v: str.slice(cursor - tokenLength, cursor),\n // string value\n s: cursor - tokenLength,\n // start index\n e: cursor // end index (excluding)\n });\n }\n return tokens;\n}\n\n/**\n * Convert a String to an Array of characters, taking into account that some\n * characters like emojis take up two string indexes.\n *\n * Adapted from core-js (MIT license)\n * https://github.com/zloirock/core-js/blob/2d69cf5f99ab3ea3463c395df81e5a15b68f49d9/packages/core-js/internals/string-multibyte.js\n *\n * @function stringToArray\n * @param {string} str\n * @returns {string[]}\n */\nfunction stringToArray(str) {\n const result = [];\n const len = str.length;\n let index = 0;\n while (index < len) {\n let first = str.charCodeAt(index);\n let second;\n let char = first < 0xd800 || first > 0xdbff || index + 1 === len || (second = str.charCodeAt(index + 1)) < 0xdc00 || second > 0xdfff ? str[index] // single character\n : str.slice(index, index + 2); // two-index characters\n result.push(char);\n index += char.length;\n }\n return result;\n}\n\n/**\n * Fast version of ts function for when transition defaults are well known\n * @param {State} state\n * @param {string} input\n * @param {string} t\n * @param {string} defaultt\n * @param {[RegExp, State][]} jr\n * @returns {State}\n */\nfunction fastts(state, input, t, defaultt, jr) {\n let next;\n const len = input.length;\n for (let i = 0; i < len - 1; i++) {\n const char = input[i];\n if (state.j[char]) {\n next = state.j[char];\n } else {\n next = new State(defaultt);\n next.jr = jr.slice();\n state.j[char] = next;\n }\n state = next;\n }\n next = new State(t);\n next.jr = jr.slice();\n state.j[input[len - 1]] = next;\n return next;\n}\n\n/**\n * Converts a string of Top-Level Domain names encoded in update-tlds.js back\n * into a list of strings.\n * @param {str} encoded encoded TLDs string\n * @returns {str[]} original TLDs list\n */\nfunction decodeTlds(encoded) {\n const words = [];\n const stack = [];\n let i = 0;\n let digits = '0123456789';\n while (i < encoded.length) {\n let popDigitCount = 0;\n while (digits.indexOf(encoded[i + popDigitCount]) >= 0) {\n popDigitCount++; // encountered some digits, have to pop to go one level up trie\n }\n if (popDigitCount > 0) {\n words.push(stack.join('')); // whatever preceded the pop digits must be a word\n for (let popCount = parseInt(encoded.substring(i, i + popDigitCount), 10); popCount > 0; popCount--) {\n stack.pop();\n }\n i += popDigitCount;\n } else {\n stack.push(encoded[i]); // drop down a level into the trie\n i++;\n }\n }\n return words;\n}\n\n/**\n * An object where each key is a valid DOM Event Name such as `click` or `focus`\n * and each value is an event handler function.\n *\n * https://developer.mozilla.org/en-US/docs/Web/API/Element#events\n * @typedef {?{ [event: string]: Function }} EventListeners\n */\n\n/**\n * All formatted properties required to render a link, including `tagName`,\n * `attributes`, `content` and `eventListeners`.\n * @typedef {{ tagName: any, attributes: {[attr: string]: any}, content: string,\n * eventListeners: EventListeners }} IntermediateRepresentation\n */\n\n/**\n * Specify either an object described by the template type `O` or a function.\n *\n * The function takes a string value (usually the link's href attribute), the\n * link type (`'url'`, `'hashtag`', etc.) and an internal token representation\n * of the link. It should return an object of the template type `O`\n * @template O\n * @typedef {O | ((value: string, type: string, token: MultiToken) => O)} OptObj\n */\n\n/**\n * Specify either a function described by template type `F` or an object.\n *\n * Each key in the object should be a link type (`'url'`, `'hashtag`', etc.). Each\n * value should be a function with template type `F` that is called when the\n * corresponding link type is encountered.\n * @template F\n * @typedef {F | { [type: string]: F}} OptFn\n */\n\n/**\n * Specify either a value with template type `V`, a function that returns `V` or\n * an object where each value resolves to `V`.\n *\n * The function takes a string value (usually the link's href attribute), the\n * link type (`'url'`, `'hashtag`', etc.) and an internal token representation\n * of the link. It should return an object of the template type `V`\n *\n * For the object, each key should be a link type (`'url'`, `'hashtag`', etc.).\n * Each value should either have type `V` or a function that returns V. This\n * function similarly takes a string value and a token.\n *\n * Example valid types for `Opt`:\n *\n * ```js\n * 'hello'\n * (value, type, token) => 'world'\n * { url: 'hello', email: (value, token) => 'world'}\n * ```\n * @template V\n * @typedef {V | ((value: string, type: string, token: MultiToken) => V) | { [type: string]: V | ((value: string, token: MultiToken) => V) }} Opt\n */\n\n/**\n * See available options: https://linkify.js.org/docs/options.html\n * @typedef {{\n * \tdefaultProtocol?: string,\n * events?: OptObj,\n * \tformat?: Opt,\n * \tformatHref?: Opt,\n * \tnl2br?: boolean,\n * \ttagName?: Opt,\n * \ttarget?: Opt,\n * \trel?: Opt,\n * \tvalidate?: Opt,\n * \ttruncate?: Opt,\n * \tclassName?: Opt,\n * \tattributes?: OptObj<({ [attr: string]: any })>,\n * ignoreTags?: string[],\n * \trender?: OptFn<((ir: IntermediateRepresentation) => any)>\n * }} Opts\n */\n\n/**\n * @type Required\n */\nconst defaults = {\n defaultProtocol: 'http',\n events: null,\n format: noop,\n formatHref: noop,\n nl2br: false,\n tagName: 'a',\n target: null,\n rel: null,\n validate: true,\n truncate: Infinity,\n className: null,\n attributes: null,\n ignoreTags: [],\n render: null\n};\n\n/**\n * Utility class for linkify interfaces to apply specified\n * {@link Opts formatting and rendering options}.\n *\n * @param {Opts | Options} [opts] Option value overrides.\n * @param {(ir: IntermediateRepresentation) => any} [defaultRender] (For\n * internal use) default render function that determines how to generate an\n * HTML element based on a link token's derived tagName, attributes and HTML.\n * Similar to render option\n */\nfunction Options(opts, defaultRender = null) {\n let o = Object.assign({}, defaults);\n if (opts) {\n o = Object.assign(o, opts instanceof Options ? opts.o : opts);\n }\n\n // Ensure all ignored tags are uppercase\n const ignoredTags = o.ignoreTags;\n const uppercaseIgnoredTags = [];\n for (let i = 0; i < ignoredTags.length; i++) {\n uppercaseIgnoredTags.push(ignoredTags[i].toUpperCase());\n }\n /** @protected */\n this.o = o;\n if (defaultRender) {\n this.defaultRender = defaultRender;\n }\n this.ignoreTags = uppercaseIgnoredTags;\n}\nOptions.prototype = {\n o: defaults,\n /**\n * @type string[]\n */\n ignoreTags: [],\n /**\n * @param {IntermediateRepresentation} ir\n * @returns {any}\n */\n defaultRender(ir) {\n return ir;\n },\n /**\n * Returns true or false based on whether a token should be displayed as a\n * link based on the user options.\n * @param {MultiToken} token\n * @returns {boolean}\n */\n check(token) {\n return this.get('validate', token.toString(), token);\n },\n // Private methods\n\n /**\n * Resolve an option's value based on the value of the option and the given\n * params. If operator and token are specified and the target option is\n * callable, automatically calls the function with the given argument.\n * @template {keyof Opts} K\n * @param {K} key Name of option to use\n * @param {string} [operator] will be passed to the target option if it's a\n * function. If not specified, RAW function value gets returned\n * @param {MultiToken} [token] The token from linkify.tokenize\n * @returns {Opts[K] | any}\n */\n get(key, operator, token) {\n const isCallable = operator != null;\n let option = this.o[key];\n if (!option) {\n return option;\n }\n if (typeof option === 'object') {\n option = token.t in option ? option[token.t] : defaults[key];\n if (typeof option === 'function' && isCallable) {\n option = option(operator, token);\n }\n } else if (typeof option === 'function' && isCallable) {\n option = option(operator, token.t, token);\n }\n return option;\n },\n /**\n * @template {keyof Opts} L\n * @param {L} key Name of options object to use\n * @param {string} [operator]\n * @param {MultiToken} [token]\n * @returns {Opts[L] | any}\n */\n getObj(key, operator, token) {\n let obj = this.o[key];\n if (typeof obj === 'function' && operator != null) {\n obj = obj(operator, token.t, token);\n }\n return obj;\n },\n /**\n * Convert the given token to a rendered element that may be added to the\n * calling-interface's DOM\n * @param {MultiToken} token Token to render to an HTML element\n * @returns {any} Render result; e.g., HTML string, DOM element, React\n * Component, etc.\n */\n render(token) {\n const ir = token.render(this); // intermediate representation\n const renderFn = this.get('render', null, token) || this.defaultRender;\n return renderFn(ir, token.t, token);\n }\n};\nfunction noop(val) {\n return val;\n}\n\nvar options = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tOptions: Options,\n\tdefaults: defaults\n});\n\n/******************************************************************************\n\tMulti-Tokens\n\tTokens composed of arrays of TextTokens\n******************************************************************************/\n\n/**\n * @param {string} value\n * @param {Token[]} tokens\n */\nfunction MultiToken(value, tokens) {\n this.t = 'token';\n this.v = value;\n this.tk = tokens;\n}\n\n/**\n * Abstract class used for manufacturing tokens of text tokens. That is rather\n * than the value for a token being a small string of text, it's value an array\n * of text tokens.\n *\n * Used for grouping together URLs, emails, hashtags, and other potential\n * creations.\n * @class MultiToken\n * @property {string} t\n * @property {string} v\n * @property {Token[]} tk\n * @abstract\n */\nMultiToken.prototype = {\n isLink: false,\n /**\n * Return the string this token represents.\n * @return {string}\n */\n toString() {\n return this.v;\n },\n /**\n * What should the value for this token be in the `href` HTML attribute?\n * Returns the `.toString` value by default.\n * @param {string} [scheme]\n * @return {string}\n */\n toHref(scheme) {\n return this.toString();\n },\n /**\n * @param {Options} options Formatting options\n * @returns {string}\n */\n toFormattedString(options) {\n const val = this.toString();\n const truncate = options.get('truncate', val, this);\n const formatted = options.get('format', val, this);\n return truncate && formatted.length > truncate ? formatted.substring(0, truncate) + '…' : formatted;\n },\n /**\n *\n * @param {Options} options\n * @returns {string}\n */\n toFormattedHref(options) {\n return options.get('formatHref', this.toHref(options.get('defaultProtocol')), this);\n },\n /**\n * The start index of this token in the original input string\n * @returns {number}\n */\n startIndex() {\n return this.tk[0].s;\n },\n /**\n * The end index of this token in the original input string (up to this\n * index but not including it)\n * @returns {number}\n */\n endIndex() {\n return this.tk[this.tk.length - 1].e;\n },\n /**\n \tReturns an object of relevant values for this token, which includes keys\n \t* type - Kind of token ('url', 'email', etc.)\n \t* value - Original text\n \t* href - The value that should be added to the anchor tag's href\n \t\tattribute\n \t\t@method toObject\n \t@param {string} [protocol] `'http'` by default\n */\n toObject(protocol = defaults.defaultProtocol) {\n return {\n type: this.t,\n value: this.toString(),\n isLink: this.isLink,\n href: this.toHref(protocol),\n start: this.startIndex(),\n end: this.endIndex()\n };\n },\n /**\n *\n * @param {Options} options Formatting option\n */\n toFormattedObject(options) {\n return {\n type: this.t,\n value: this.toFormattedString(options),\n isLink: this.isLink,\n href: this.toFormattedHref(options),\n start: this.startIndex(),\n end: this.endIndex()\n };\n },\n /**\n * Whether this token should be rendered as a link according to the given options\n * @param {Options} options\n * @returns {boolean}\n */\n validate(options) {\n return options.get('validate', this.toString(), this);\n },\n /**\n * Return an object that represents how this link should be rendered.\n * @param {Options} options Formattinng options\n */\n render(options) {\n const token = this;\n const href = this.toHref(options.get('defaultProtocol'));\n const formattedHref = options.get('formatHref', href, this);\n const tagName = options.get('tagName', href, token);\n const content = this.toFormattedString(options);\n const attributes = {};\n const className = options.get('className', href, token);\n const target = options.get('target', href, token);\n const rel = options.get('rel', href, token);\n const attrs = options.getObj('attributes', href, token);\n const eventListeners = options.getObj('events', href, token);\n attributes.href = formattedHref;\n if (className) {\n attributes.class = className;\n }\n if (target) {\n attributes.target = target;\n }\n if (rel) {\n attributes.rel = rel;\n }\n if (attrs) {\n Object.assign(attributes, attrs);\n }\n return {\n tagName,\n attributes,\n content,\n eventListeners\n };\n }\n};\n\n/**\n * Create a new token that can be emitted by the parser state machine\n * @param {string} type readable type of the token\n * @param {object} props properties to assign or override, including isLink = true or false\n * @returns {new (value: string, tokens: Token[]) => MultiToken} new token class\n */\nfunction createTokenClass(type, props) {\n class Token extends MultiToken {\n constructor(value, tokens) {\n super(value, tokens);\n this.t = type;\n }\n }\n for (const p in props) {\n Token.prototype[p] = props[p];\n }\n Token.t = type;\n return Token;\n}\n\n/**\n\tRepresents a list of tokens making up a valid email address\n*/\nconst Email = createTokenClass('email', {\n isLink: true,\n toHref() {\n return 'mailto:' + this.toString();\n }\n});\n\n/**\n\tRepresents some plain text\n*/\nconst Text = createTokenClass('text');\n\n/**\n\tMulti-linebreak token - represents a line break\n\t@class Nl\n*/\nconst Nl = createTokenClass('nl');\n\n/**\n\tRepresents a list of text tokens making up a valid URL\n\t@class Url\n*/\nconst Url = createTokenClass('url', {\n isLink: true,\n /**\n \tLowercases relevant parts of the domain and adds the protocol if\n \trequired. Note that this will not escape unsafe HTML characters in the\n \tURL.\n \t\t@param {string} [scheme] default scheme (e.g., 'https')\n \t@return {string} the full href\n */\n toHref(scheme = defaults.defaultProtocol) {\n // Check if already has a prefix scheme\n return this.hasProtocol() ? this.v : `${scheme}://${this.v}`;\n },\n /**\n * Check whether this URL token has a protocol\n * @return {boolean}\n */\n hasProtocol() {\n const tokens = this.tk;\n return tokens.length >= 2 && tokens[0].t !== LOCALHOST && tokens[1].t === COLON;\n }\n});\n\nvar multi = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tBase: MultiToken,\n\tEmail: Email,\n\tMultiToken: MultiToken,\n\tNl: Nl,\n\tText: Text,\n\tUrl: Url,\n\tcreateTokenClass: createTokenClass\n});\n\n/**\n\tNot exactly parser, more like the second-stage scanner (although we can\n\ttheoretically hotswap the code here with a real parser in the future... but\n\tfor a little URL-finding utility abstract syntax trees may be a little\n\toverkill).\n\n\tURL format: http://en.wikipedia.org/wiki/URI_scheme\n\tEmail format: http://en.wikipedia.org/wiki/EmailAddress (links to RFC in\n\treference)\n\n\t@module linkify\n\t@submodule parser\n\t@main run\n*/\n\nconst makeState = arg => new State(arg);\n\n/**\n * Generate the parser multi token-based state machine\n * @param {{ groups: Collections }} tokens\n */\nfunction init$1({\n groups\n}) {\n // Types of characters the URL can definitely end in\n const qsAccepting = groups.domain.concat([AMPERSAND, ASTERISK, AT, BACKSLASH, BACKTICK, CARET, DOLLAR, EQUALS, HYPHEN, NUM, PERCENT, PIPE, PLUS, POUND, SLASH, SYM, TILDE, UNDERSCORE]);\n\n // Types of tokens that can follow a URL and be part of the query string\n // but cannot be the very last characters\n // Characters that cannot appear in the URL at all should be excluded\n const qsNonAccepting = [APOSTROPHE, COLON, COMMA, DOT, EXCLAMATION, PERCENT, QUERY, QUOTE, SEMI, OPENANGLEBRACKET, CLOSEANGLEBRACKET, OPENBRACE, CLOSEBRACE, CLOSEBRACKET, OPENBRACKET, OPENPAREN, CLOSEPAREN, FULLWIDTHLEFTPAREN, FULLWIDTHRIGHTPAREN, LEFTCORNERBRACKET, RIGHTCORNERBRACKET, LEFTWHITECORNERBRACKET, RIGHTWHITECORNERBRACKET, FULLWIDTHLESSTHAN, FULLWIDTHGREATERTHAN];\n\n // For addresses without the mailto prefix\n // Tokens allowed in the localpart of the email\n const localpartAccepting = [AMPERSAND, APOSTROPHE, ASTERISK, BACKSLASH, BACKTICK, CARET, DOLLAR, EQUALS, HYPHEN, OPENBRACE, CLOSEBRACE, PERCENT, PIPE, PLUS, POUND, QUERY, SLASH, SYM, TILDE, UNDERSCORE];\n\n // The universal starting state.\n /**\n * @type State\n */\n const Start = makeState();\n const Localpart = tt(Start, TILDE); // Local part of the email address\n ta(Localpart, localpartAccepting, Localpart);\n ta(Localpart, groups.domain, Localpart);\n const Domain = makeState(),\n Scheme = makeState(),\n SlashScheme = makeState();\n ta(Start, groups.domain, Domain); // parsed string ends with a potential domain name (A)\n ta(Start, groups.scheme, Scheme); // e.g., 'mailto'\n ta(Start, groups.slashscheme, SlashScheme); // e.g., 'http'\n\n ta(Domain, localpartAccepting, Localpart);\n ta(Domain, groups.domain, Domain);\n const LocalpartAt = tt(Domain, AT); // Local part of the email address plus @\n\n tt(Localpart, AT, LocalpartAt); // close to an email address now\n\n // Local part of an email address can be e.g. 'http' or 'mailto'\n tt(Scheme, AT, LocalpartAt);\n tt(SlashScheme, AT, LocalpartAt);\n const LocalpartDot = tt(Localpart, DOT); // Local part of the email address plus '.' (localpart cannot end in .)\n ta(LocalpartDot, localpartAccepting, Localpart);\n ta(LocalpartDot, groups.domain, Localpart);\n const EmailDomain = makeState();\n ta(LocalpartAt, groups.domain, EmailDomain); // parsed string starts with local email info + @ with a potential domain name\n ta(EmailDomain, groups.domain, EmailDomain);\n const EmailDomainDot = tt(EmailDomain, DOT); // domain followed by DOT\n ta(EmailDomainDot, groups.domain, EmailDomain);\n const Email$1 = makeState(Email); // Possible email address (could have more tlds)\n ta(EmailDomainDot, groups.tld, Email$1);\n ta(EmailDomainDot, groups.utld, Email$1);\n tt(LocalpartAt, LOCALHOST, Email$1);\n\n // Hyphen can jump back to a domain name\n const EmailDomainHyphen = tt(EmailDomain, HYPHEN); // parsed string starts with local email info + @ with a potential domain name\n tt(EmailDomainHyphen, HYPHEN, EmailDomainHyphen);\n ta(EmailDomainHyphen, groups.domain, EmailDomain);\n ta(Email$1, groups.domain, EmailDomain);\n tt(Email$1, DOT, EmailDomainDot);\n tt(Email$1, HYPHEN, EmailDomainHyphen);\n\n // Final possible email states\n const EmailColon = tt(Email$1, COLON); // URL followed by colon (potential port number here)\n /*const EmailColonPort = */\n ta(EmailColon, groups.numeric, Email); // URL followed by colon and port number\n\n // Account for dots and hyphens. Hyphens are usually parts of domain names\n // (but not TLDs)\n const DomainHyphen = tt(Domain, HYPHEN); // domain followed by hyphen\n const DomainDot = tt(Domain, DOT); // domain followed by DOT\n tt(DomainHyphen, HYPHEN, DomainHyphen);\n ta(DomainHyphen, groups.domain, Domain);\n ta(DomainDot, localpartAccepting, Localpart);\n ta(DomainDot, groups.domain, Domain);\n const DomainDotTld = makeState(Url); // Simplest possible URL with no query string\n ta(DomainDot, groups.tld, DomainDotTld);\n ta(DomainDot, groups.utld, DomainDotTld);\n ta(DomainDotTld, groups.domain, Domain);\n ta(DomainDotTld, localpartAccepting, Localpart);\n tt(DomainDotTld, DOT, DomainDot);\n tt(DomainDotTld, HYPHEN, DomainHyphen);\n tt(DomainDotTld, AT, LocalpartAt);\n const DomainDotTldColon = tt(DomainDotTld, COLON); // URL followed by colon (potential port number here)\n const DomainDotTldColonPort = makeState(Url); // TLD followed by a port number\n ta(DomainDotTldColon, groups.numeric, DomainDotTldColonPort);\n\n // Long URL with optional port and maybe query string\n const Url$1 = makeState(Url);\n\n // URL with extra symbols at the end, followed by an opening bracket\n const UrlNonaccept = makeState(); // URL followed by some symbols (will not be part of the final URL)\n\n // Query strings\n ta(Url$1, qsAccepting, Url$1);\n ta(Url$1, qsNonAccepting, UrlNonaccept);\n ta(UrlNonaccept, qsAccepting, Url$1);\n ta(UrlNonaccept, qsNonAccepting, UrlNonaccept);\n\n // Become real URLs after `SLASH` or `COLON NUM SLASH`\n // Here works with or without scheme:// prefix\n tt(DomainDotTld, SLASH, Url$1);\n tt(DomainDotTldColonPort, SLASH, Url$1);\n\n // Note that domains that begin with schemes are treated slighly differently\n const SchemeColon = tt(Scheme, COLON); // e.g., 'mailto:'\n const SlashSchemeColon = tt(SlashScheme, COLON); // e.g., 'http:'\n const SlashSchemeColonSlash = tt(SlashSchemeColon, SLASH); // e.g., 'http:/'\n\n const UriPrefix = tt(SlashSchemeColonSlash, SLASH); // e.g., 'http://'\n\n // Scheme states can transition to domain states\n ta(Scheme, groups.domain, Domain);\n tt(Scheme, DOT, DomainDot);\n tt(Scheme, HYPHEN, DomainHyphen);\n ta(SlashScheme, groups.domain, Domain);\n tt(SlashScheme, DOT, DomainDot);\n tt(SlashScheme, HYPHEN, DomainHyphen);\n\n // Force URL with scheme prefix followed by anything sane\n ta(SchemeColon, groups.domain, Url$1);\n tt(SchemeColon, SLASH, Url$1);\n tt(SchemeColon, QUERY, Url$1);\n ta(UriPrefix, groups.domain, Url$1);\n ta(UriPrefix, qsAccepting, Url$1);\n tt(UriPrefix, SLASH, Url$1);\n const bracketPairs = [[OPENBRACE, CLOSEBRACE],\n // {}\n [OPENBRACKET, CLOSEBRACKET],\n // []\n [OPENPAREN, CLOSEPAREN],\n // ()\n [OPENANGLEBRACKET, CLOSEANGLEBRACKET],\n // <>\n [FULLWIDTHLEFTPAREN, FULLWIDTHRIGHTPAREN],\n // ()\n [LEFTCORNERBRACKET, RIGHTCORNERBRACKET],\n // 「」\n [LEFTWHITECORNERBRACKET, RIGHTWHITECORNERBRACKET],\n // 『』\n [FULLWIDTHLESSTHAN, FULLWIDTHGREATERTHAN] // <>\n ];\n for (let i = 0; i < bracketPairs.length; i++) {\n const [OPEN, CLOSE] = bracketPairs[i];\n const UrlOpen = tt(Url$1, OPEN); // URL followed by open bracket\n\n // Continue not accepting for open brackets\n tt(UrlNonaccept, OPEN, UrlOpen);\n\n // Closing bracket component. This character WILL be included in the URL\n tt(UrlOpen, CLOSE, Url$1);\n\n // URL that beings with an opening bracket, followed by a symbols.\n // Note that the final state can still be `UrlOpen` (if the URL has a\n // single opening bracket for some reason).\n const UrlOpenQ = makeState(Url);\n ta(UrlOpen, qsAccepting, UrlOpenQ);\n const UrlOpenSyms = makeState(); // UrlOpen followed by some symbols it cannot end it\n ta(UrlOpen, qsNonAccepting);\n\n // URL that begins with an opening bracket, followed by some symbols\n ta(UrlOpenQ, qsAccepting, UrlOpenQ);\n ta(UrlOpenQ, qsNonAccepting, UrlOpenSyms);\n ta(UrlOpenSyms, qsAccepting, UrlOpenQ);\n ta(UrlOpenSyms, qsNonAccepting, UrlOpenSyms);\n\n // Close brace/bracket to become regular URL\n tt(UrlOpenQ, CLOSE, Url$1);\n tt(UrlOpenSyms, CLOSE, Url$1);\n }\n tt(Start, LOCALHOST, DomainDotTld); // localhost is a valid URL state\n tt(Start, NL, Nl); // single new line\n\n return {\n start: Start,\n tokens: tk\n };\n}\n\n/**\n * Run the parser state machine on a list of scanned string-based tokens to\n * create a list of multi tokens, each of which represents a URL, email address,\n * plain text, etc.\n *\n * @param {State} start parser start state\n * @param {string} input the original input used to generate the given tokens\n * @param {Token[]} tokens list of scanned tokens\n * @returns {MultiToken[]}\n */\nfunction run(start, input, tokens) {\n let len = tokens.length;\n let cursor = 0;\n let multis = [];\n let textTokens = [];\n while (cursor < len) {\n let state = start;\n let secondState = null;\n let nextState = null;\n let multiLength = 0;\n let latestAccepting = null;\n let sinceAccepts = -1;\n while (cursor < len && !(secondState = state.go(tokens[cursor].t))) {\n // Starting tokens with nowhere to jump to.\n // Consider these to be just plain text\n textTokens.push(tokens[cursor++]);\n }\n while (cursor < len && (nextState = secondState || state.go(tokens[cursor].t))) {\n // Get the next state\n secondState = null;\n state = nextState;\n\n // Keep track of the latest accepting state\n if (state.accepts()) {\n sinceAccepts = 0;\n latestAccepting = state;\n } else if (sinceAccepts >= 0) {\n sinceAccepts++;\n }\n cursor++;\n multiLength++;\n }\n if (sinceAccepts < 0) {\n // No accepting state was found, part of a regular text token add\n // the first text token to the text tokens array and try again from\n // the next\n cursor -= multiLength;\n if (cursor < len) {\n textTokens.push(tokens[cursor]);\n cursor++;\n }\n } else {\n // Accepting state!\n // First close off the textTokens (if available)\n if (textTokens.length > 0) {\n multis.push(initMultiToken(Text, input, textTokens));\n textTokens = [];\n }\n\n // Roll back to the latest accepting state\n cursor -= sinceAccepts;\n multiLength -= sinceAccepts;\n\n // Create a new multitoken\n const Multi = latestAccepting.t;\n const subtokens = tokens.slice(cursor - multiLength, cursor);\n multis.push(initMultiToken(Multi, input, subtokens));\n }\n }\n\n // Finally close off the textTokens (if available)\n if (textTokens.length > 0) {\n multis.push(initMultiToken(Text, input, textTokens));\n }\n return multis;\n}\n\n/**\n * Utility function for instantiating a new multitoken with all the relevant\n * fields during parsing.\n * @param {new (value: string, tokens: Token[]) => MultiToken} Multi class to instantiate\n * @param {string} input original input string\n * @param {Token[]} tokens consecutive tokens scanned from input string\n * @returns {MultiToken}\n */\nfunction initMultiToken(Multi, input, tokens) {\n const startIdx = tokens[0].s;\n const endIdx = tokens[tokens.length - 1].e;\n const value = input.slice(startIdx, endIdx);\n return new Multi(value, tokens);\n}\n\nconst warn = typeof console !== 'undefined' && console && console.warn || (() => {});\nconst warnAdvice = 'until manual call of linkify.init(). Register all schemes and plugins before invoking linkify the first time.';\n\n// Side-effect initialization state\nconst INIT = {\n scanner: null,\n parser: null,\n tokenQueue: [],\n pluginQueue: [],\n customSchemes: [],\n initialized: false\n};\n\n/**\n * @typedef {{\n * \tstart: State,\n * \ttokens: { groups: Collections } & typeof tk\n * }} ScannerInit\n */\n\n/**\n * @typedef {{\n * \tstart: State,\n * \ttokens: typeof multi\n * }} ParserInit\n */\n\n/**\n * @typedef {(arg: { scanner: ScannerInit }) => void} TokenPlugin\n */\n\n/**\n * @typedef {(arg: { scanner: ScannerInit, parser: ParserInit }) => void} Plugin\n */\n\n/**\n * De-register all plugins and reset the internal state-machine. Used for\n * testing; not required in practice.\n * @private\n */\nfunction reset() {\n State.groups = {};\n INIT.scanner = null;\n INIT.parser = null;\n INIT.tokenQueue = [];\n INIT.pluginQueue = [];\n INIT.customSchemes = [];\n INIT.initialized = false;\n return INIT;\n}\n\n/**\n * Register a token plugin to allow the scanner to recognize additional token\n * types before the parser state machine is constructed from the results.\n * @param {string} name of plugin to register\n * @param {TokenPlugin} plugin function that accepts the scanner state machine\n * and available scanner tokens and collections and extends the state machine to\n * recognize additional tokens or groups.\n */\nfunction registerTokenPlugin(name, plugin) {\n if (typeof plugin !== 'function') {\n throw new Error(`linkifyjs: Invalid token plugin ${plugin} (expects function)`);\n }\n for (let i = 0; i < INIT.tokenQueue.length; i++) {\n if (name === INIT.tokenQueue[i][0]) {\n warn(`linkifyjs: token plugin \"${name}\" already registered - will be overwritten`);\n INIT.tokenQueue[i] = [name, plugin];\n return;\n }\n }\n INIT.tokenQueue.push([name, plugin]);\n if (INIT.initialized) {\n warn(`linkifyjs: already initialized - will not register token plugin \"${name}\" ${warnAdvice}`);\n }\n}\n\n/**\n * Register a linkify plugin\n * @param {string} name of plugin to register\n * @param {Plugin} plugin function that accepts the parser state machine and\n * extends the parser to recognize additional link types\n */\nfunction registerPlugin(name, plugin) {\n if (typeof plugin !== 'function') {\n throw new Error(`linkifyjs: Invalid plugin ${plugin} (expects function)`);\n }\n for (let i = 0; i < INIT.pluginQueue.length; i++) {\n if (name === INIT.pluginQueue[i][0]) {\n warn(`linkifyjs: plugin \"${name}\" already registered - will be overwritten`);\n INIT.pluginQueue[i] = [name, plugin];\n return;\n }\n }\n INIT.pluginQueue.push([name, plugin]);\n if (INIT.initialized) {\n warn(`linkifyjs: already initialized - will not register plugin \"${name}\" ${warnAdvice}`);\n }\n}\n\n/**\n * Detect URLs with the following additional protocol. Anything with format\n * \"protocol://...\" will be considered a link. If `optionalSlashSlash` is set to\n * `true`, anything with format \"protocol:...\" will be considered a link.\n * @param {string} scheme\n * @param {boolean} [optionalSlashSlash]\n */\nfunction registerCustomProtocol(scheme, optionalSlashSlash = false) {\n if (INIT.initialized) {\n warn(`linkifyjs: already initialized - will not register custom scheme \"${scheme}\" ${warnAdvice}`);\n }\n if (!/^[0-9a-z]+(-[0-9a-z]+)*$/.test(scheme)) {\n throw new Error(`linkifyjs: incorrect scheme format.\n1. Must only contain digits, lowercase ASCII letters or \"-\"\n2. Cannot start or end with \"-\"\n3. \"-\" cannot repeat`);\n }\n INIT.customSchemes.push([scheme, optionalSlashSlash]);\n}\n\n/**\n * Initialize the linkify state machine. Called automatically the first time\n * linkify is called on a string, but may be called manually as well.\n */\nfunction init() {\n // Initialize scanner state machine and plugins\n INIT.scanner = init$2(INIT.customSchemes);\n for (let i = 0; i < INIT.tokenQueue.length; i++) {\n INIT.tokenQueue[i][1]({\n scanner: INIT.scanner\n });\n }\n\n // Initialize parser state machine and plugins\n INIT.parser = init$1(INIT.scanner.tokens);\n for (let i = 0; i < INIT.pluginQueue.length; i++) {\n INIT.pluginQueue[i][1]({\n scanner: INIT.scanner,\n parser: INIT.parser\n });\n }\n INIT.initialized = true;\n return INIT;\n}\n\n/**\n * Parse a string into tokens that represent linkable and non-linkable sub-components\n * @param {string} str\n * @return {MultiToken[]} tokens\n */\nfunction tokenize(str) {\n if (!INIT.initialized) {\n init();\n }\n return run(INIT.parser.start, str, run$1(INIT.scanner.start, str));\n}\ntokenize.scan = run$1; // for testing\n\n/**\n * Find a list of linkable items in the given string.\n * @param {string} str string to find links in\n * @param {string | Opts} [type] either formatting options or specific type of\n * links to find, e.g., 'url' or 'email'\n * @param {Opts} [opts] formatting options for final output. Cannot be specified\n * if opts already provided in `type` argument\n */\nfunction find(str, type = null, opts = null) {\n if (type && typeof type === 'object') {\n if (opts) {\n throw Error(`linkifyjs: Invalid link type ${type}; must be a string`);\n }\n opts = type;\n type = null;\n }\n const options = new Options(opts);\n const tokens = tokenize(str);\n const filtered = [];\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n if (token.isLink && (!type || token.t === type) && options.check(token)) {\n filtered.push(token.toFormattedObject(options));\n }\n }\n return filtered;\n}\n\n/**\n * Is the given string valid linkable text of some sort. Note that this does not\n * trim the text for you.\n *\n * Optionally pass in a second `type` param, which is the type of link to test\n * for.\n *\n * For example,\n *\n * linkify.test(str, 'email');\n *\n * Returns `true` if str is a valid email.\n * @param {string} str string to test for links\n * @param {string} [type] optional specific link type to look for\n * @returns boolean true/false\n */\nfunction test(str, type = null) {\n const tokens = tokenize(str);\n return tokens.length === 1 && tokens[0].isLink && (!type || tokens[0].t === type);\n}\n\nexport { MultiToken, Options, State, createTokenClass, find, init, multi, options, regexp, registerCustomProtocol, registerPlugin, registerTokenPlugin, reset, stringToArray, test, multi as text, tokenize };\n","import { Options, tokenize } from 'linkifyjs';\n\n/**\n\tConvert strings of text into linkable HTML text\n*/\nfunction escapeText(text) {\n return text.replace(/&/g, '&').replace(//g, '>');\n}\nfunction escapeAttr(href) {\n return href.replace(/\"/g, '"');\n}\nfunction attributesToString(attributes) {\n const result = [];\n for (const attr in attributes) {\n let val = attributes[attr] + '';\n result.push(`${attr}=\"${escapeAttr(val)}\"`);\n }\n return result.join(' ');\n}\nfunction defaultRender({\n tagName,\n attributes,\n content\n}) {\n return `<${tagName} ${attributesToString(attributes)}>${escapeText(content)}${tagName}>`;\n}\n\n/**\n * Convert a plan text string to an HTML string with links. Expects that the\n * given strings does not contain any HTML entities. Use the linkify-html\n * interface if you need to parse HTML entities.\n *\n * @param {string} str string to linkify\n * @param {import('linkifyjs').Opts} [opts] overridable options\n * @returns {string}\n */\nfunction linkifyStr(str, opts = {}) {\n opts = new Options(opts, defaultRender);\n const tokens = tokenize(str);\n const result = [];\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n if (token.t === 'nl' && opts.get('nl2br')) {\n result.push(' \\n');\n } else if (!token.isLink || !opts.check(token)) {\n result.push(escapeText(token.toString()));\n } else {\n result.push(opts.render(token));\n }\n }\n return result.join('');\n}\nif (!String.prototype.linkify) {\n Object.defineProperty(String.prototype, 'linkify', {\n writable: false,\n value: function linkify(options) {\n return linkifyStr(this, options);\n }\n });\n}\n\nexport { linkifyStr as default };\n","import '../assets/NcAppSidebar-B1bkEVQA.css';\nimport { Portal } from \"@linusborg/vue-simple-portal\";\nimport { vOnClickOutside } from \"@vueuse/components\";\nimport { createFocusTrap } from \"focus-trap\";\nimport Vue, { ref, provide } from \"vue\";\nimport { A as ArrowRight } from \"./ArrowRight-CY2b9hgN.mjs\";\nimport { C as Close } from \"./Close-BtLPUSdO.mjs\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nimport { i as isLegacy34 } from \"./legacy-DV3mGZdh.mjs\";\nimport { N as NcCheckboxRadioSwitch } from \"./NcCheckboxRadioSwitch-D4IV4zWy.mjs\";\nimport NcVNodes from \"../Components/NcVNodes.mjs\";\nimport { useIsSmallMobile } from \"../Composables/useIsMobile.mjs\";\nimport directive from \"../Directives/Focus.mjs\";\nimport { r as register, S as t14, a as t } from \"./_l10n-DVz9Qdzk.mjs\";\nimport { g as getTrapStack } from \"./focusTrap-HJQ4pqHV.mjs\";\nimport { G as GenRandomId } from \"./GenRandomId-F5ebeBB_.mjs\";\nimport { l as logger } from \"./logger-D3RVzcfQ.mjs\";\nimport { N as NcActions } from \"./NcActions-DbPerbGE.mjs\";\nimport { N as NcAppSidebarHeader } from \"./NcAppSidebarHeader-CBE4tNYb.mjs\";\nimport { N as NcButton } from \"./NcButton-CCWEL9Ci.mjs\";\nimport NcEmptyContent from \"../Components/NcEmptyContent.mjs\";\nimport NcLoadingIcon from \"../Components/NcLoadingIcon.mjs\";\nconst _sfc_main$4 = {\n name: \"DockRightIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nvar _sfc_render$4 = function render() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"span\", _vm._b({ staticClass: \"material-design-icon dock-right-icon\", attrs: { \"aria-hidden\": _vm.title ? null : \"true\", \"aria-label\": _vm.title, \"role\": \"img\" }, on: { \"click\": function($event) {\n return _vm.$emit(\"click\", $event);\n } } }, \"span\", _vm.$attrs, false), [_c(\"svg\", { staticClass: \"material-design-icon__svg\", attrs: { \"fill\": _vm.fillColor, \"width\": _vm.size, \"height\": _vm.size, \"viewBox\": \"0 0 24 24\" } }, [_c(\"path\", { attrs: { \"d\": \"M20 4H4A2 2 0 0 0 2 6V18A2 2 0 0 0 4 20H20A2 2 0 0 0 22 18V6A2 2 0 0 0 20 4M15 18H4V6H15Z\" } }, [_vm.title ? _c(\"title\", [_vm._v(_vm._s(_vm.title))]) : _vm._e()])])]);\n};\nvar _sfc_staticRenderFns$4 = [];\nvar __component__$4 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$4,\n _sfc_render$4,\n _sfc_staticRenderFns$4,\n false,\n null,\n null\n);\nconst IconDockRight = __component__$4.exports;\nconst _sfc_main$3 = {\n name: \"StarIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nvar _sfc_render$3 = function render2() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"span\", _vm._b({ staticClass: \"material-design-icon star-icon\", attrs: { \"aria-hidden\": _vm.title ? null : \"true\", \"aria-label\": _vm.title, \"role\": \"img\" }, on: { \"click\": function($event) {\n return _vm.$emit(\"click\", $event);\n } } }, \"span\", _vm.$attrs, false), [_c(\"svg\", { staticClass: \"material-design-icon__svg\", attrs: { \"fill\": _vm.fillColor, \"width\": _vm.size, \"height\": _vm.size, \"viewBox\": \"0 0 24 24\" } }, [_c(\"path\", { attrs: { \"d\": \"M12,17.27L18.18,21L16.54,13.97L22,9.24L14.81,8.62L12,2L9.19,8.62L2,9.24L7.45,13.97L5.82,21L12,17.27Z\" } }, [_vm.title ? _c(\"title\", [_vm._v(_vm._s(_vm.title))]) : _vm._e()])])]);\n};\nvar _sfc_staticRenderFns$3 = [];\nvar __component__$3 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$3,\n _sfc_render$3,\n _sfc_staticRenderFns$3,\n false,\n null,\n null\n);\nconst Star = __component__$3.exports;\nconst _sfc_main$2 = {\n name: \"StarOutlineIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nvar _sfc_render$2 = function render3() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"span\", _vm._b({ staticClass: \"material-design-icon star-outline-icon\", attrs: { \"aria-hidden\": _vm.title ? null : \"true\", \"aria-label\": _vm.title, \"role\": \"img\" }, on: { \"click\": function($event) {\n return _vm.$emit(\"click\", $event);\n } } }, \"span\", _vm.$attrs, false), [_c(\"svg\", { staticClass: \"material-design-icon__svg\", attrs: { \"fill\": _vm.fillColor, \"width\": _vm.size, \"height\": _vm.size, \"viewBox\": \"0 0 24 24\" } }, [_c(\"path\", { attrs: { \"d\": \"M12,15.39L8.24,17.66L9.23,13.38L5.91,10.5L10.29,10.13L12,6.09L13.71,10.13L18.09,10.5L14.77,13.38L15.76,17.66M22,9.24L14.81,8.63L12,2L9.19,8.63L2,9.24L7.45,13.97L5.82,21L12,17.27L18.18,21L16.54,13.97L22,9.24Z\" } }, [_vm.title ? _c(\"title\", [_vm._v(_vm._s(_vm.title))]) : _vm._e()])])]);\n};\nvar _sfc_staticRenderFns$2 = [];\nvar __component__$2 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$2,\n _sfc_render$2,\n _sfc_staticRenderFns$2,\n false,\n null,\n null\n);\nconst StarOutline = __component__$2.exports;\nconst _sfc_main$1 = {\n name: \"NcAppSidebarTabs\",\n components: {\n NcCheckboxRadioSwitch,\n NcVNodes\n },\n provide() {\n return {\n registerTab: this.registerTab,\n unregisterTab: this.unregisterTab,\n // Getter as an alternative to Vue 2.7 computed(() => this.activeTab)\n getActiveTab: () => this.activeTab,\n // Used to check whether the tab header is shown so the tabs can reference the tab header for `aria-labelledby` or not\n isTablistShown: () => this.hasMultipleTabs\n };\n },\n props: {\n /**\n * Id of the tab to activate\n */\n active: {\n type: String,\n default: \"\"\n },\n /**\n * Force the tab navigation to display even if there is only one tab\n */\n forceTabs: {\n type: Boolean,\n default: false\n }\n },\n emits: [\"update:active\"],\n data() {\n return {\n /**\n * Tab descriptions from the passed NcSidebarTab components' props to build the tab navbar from.\n */\n tabs: [],\n /**\n * Local active (open) tab's ID. It allows to use component without active.sync\n */\n activeTab: \"\",\n isLegacy34\n };\n },\n computed: {\n /**\n * Has multiple tabs. If only one tab - its content is shown without navigation\n *\n * @return {boolean}\n */\n hasMultipleTabs() {\n return this.tabs.length > 1;\n },\n showForSingleTab() {\n return this.forceTabs && this.tabs.length === 1;\n },\n currentTabIndex() {\n return this.tabs.findIndex((tab) => tab.id === this.activeTab);\n }\n },\n watch: {\n active(active) {\n if (active !== this.activeTab) {\n this.updateActive();\n }\n }\n },\n methods: {\n /**\n * Set the current active tab\n *\n * @param {string} id the id of the tab\n */\n setActive(id) {\n this.activeTab = id;\n this.$emit(\"update:active\", this.activeTab);\n },\n /**\n * Focus the previous tab\n * and emit to the parent component\n */\n focusPreviousTab() {\n if (this.currentTabIndex > 0) {\n this.setActive(this.tabs[this.currentTabIndex - 1].id);\n }\n this.focusActiveTab();\n },\n /**\n * Focus the next tab\n * and emit to the parent component\n */\n focusNextTab() {\n if (this.currentTabIndex < this.tabs.length - 1) {\n this.setActive(this.tabs[this.currentTabIndex + 1].id);\n }\n this.focusActiveTab();\n },\n /**\n * Focus the first tab\n * and emit to the parent component\n */\n focusFirstTab() {\n this.setActive(this.tabs[0].id);\n this.focusActiveTab();\n },\n /**\n * Focus the last tab\n * and emit to the parent component\n */\n focusLastTab() {\n this.setActive(this.tabs[this.tabs.length - 1].id);\n this.focusActiveTab();\n },\n /**\n * Focus the current active tab\n */\n focusActiveTab() {\n this.$el.querySelector(`#tab-button-${this.activeTab}`).focus();\n },\n /**\n * Focus the content on tab\n * see aria accessibility guidelines\n */\n focusActiveTabContent() {\n this.$el.querySelector(\"#tab-\" + this.activeTab).focus();\n },\n /**\n * Update the current active tab\n */\n updateActive() {\n this.activeTab = this.active && this.tabs.some((tab) => tab.id === this.active) ? this.active : this.tabs.length > 0 ? this.tabs[0].id : \"\";\n },\n /**\n * Register child tab in the tabs\n *\n * @param {object} tab child tab passed to slot\n */\n registerTab(tab) {\n this.tabs.push(tab);\n this.tabs.sort((a, b) => {\n if (a.order === b.order) {\n return OC.Util.naturalSortCompare(a.name, b.name);\n }\n return a.order - b.order;\n });\n this.updateActive();\n },\n /**\n * Unregister child tab from the tabs\n *\n * @param {string} id tab's id\n */\n unregisterTab(id) {\n const tabIndex = this.tabs.findIndex((tab) => tab.id === id);\n if (tabIndex !== -1) {\n this.tabs.splice(tabIndex, 1);\n }\n if (this.activeTab === id) {\n this.updateActive();\n }\n }\n }\n};\nvar _sfc_render$1 = function render4() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"div\", { staticClass: \"app-sidebar-tabs\" }, [_vm.hasMultipleTabs || _vm.showForSingleTab ? _c(\"div\", { staticClass: \"app-sidebar-tabs__nav\", class: { \"app-sidebar-tabs__nav--legacy\": _vm.isLegacy34 }, attrs: { \"role\": \"tablist\" }, on: { \"keydown\": [function($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"left\", 37, $event.key, [\"Left\", \"ArrowLeft\"])) return null;\n if (\"button\" in $event && $event.button !== 0) return null;\n if ($event.ctrlKey || $event.shiftKey || $event.altKey || $event.metaKey) return null;\n $event.preventDefault();\n $event.stopPropagation();\n return _vm.focusPreviousTab.apply(null, arguments);\n }, function($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"right\", 39, $event.key, [\"Right\", \"ArrowRight\"])) return null;\n if (\"button\" in $event && $event.button !== 2) return null;\n if ($event.ctrlKey || $event.shiftKey || $event.altKey || $event.metaKey) return null;\n $event.preventDefault();\n $event.stopPropagation();\n return _vm.focusNextTab.apply(null, arguments);\n }, function($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"tab\", 9, $event.key, \"Tab\")) return null;\n if ($event.ctrlKey || $event.shiftKey || $event.altKey || $event.metaKey) return null;\n $event.preventDefault();\n $event.stopPropagation();\n return _vm.focusActiveTabContent.apply(null, arguments);\n }, function($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"home\", void 0, $event.key, void 0)) return null;\n if ($event.ctrlKey || $event.shiftKey || $event.altKey || $event.metaKey) return null;\n $event.preventDefault();\n $event.stopPropagation();\n return _vm.focusFirstTab.apply(null, arguments);\n }, function($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"end\", void 0, $event.key, void 0)) return null;\n if ($event.ctrlKey || $event.shiftKey || $event.altKey || $event.metaKey) return null;\n $event.preventDefault();\n $event.stopPropagation();\n return _vm.focusLastTab.apply(null, arguments);\n }, function($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"page-up\", void 0, $event.key, void 0)) return null;\n if ($event.ctrlKey || $event.shiftKey || $event.altKey || $event.metaKey) return null;\n $event.preventDefault();\n $event.stopPropagation();\n return _vm.focusFirstTab.apply(null, arguments);\n }, function($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"page-down\", void 0, $event.key, void 0)) return null;\n if ($event.ctrlKey || $event.shiftKey || $event.altKey || $event.metaKey) return null;\n $event.preventDefault();\n $event.stopPropagation();\n return _vm.focusLastTab.apply(null, arguments);\n }] } }, _vm._l(_vm.tabs, function(tab) {\n return _c(\"NcCheckboxRadioSwitch\", { key: tab.id, staticClass: \"app-sidebar-tabs__tab\", class: { active: tab.id === _vm.activeTab }, attrs: { \"aria-controls\": `tab-${tab.id}`, \"aria-selected\": String(_vm.activeTab === tab.id), \"button-variant\": true, \"checked\": _vm.activeTab === tab.id, \"wrapper-id\": `tab-button-${tab.id}`, \"tabindex\": _vm.activeTab === tab.id ? 0 : -1, \"button-variant-grouped\": \"horizontal\", \"role\": \"tab\", \"type\": \"button\" }, on: { \"update:checked\": function($event) {\n return _vm.setActive(tab.id);\n } }, scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_c(\"NcVNodes\", { attrs: { \"vnodes\": tab.renderIcon() } }, [_c(\"span\", { staticClass: \"app-sidebar-tabs__tab-icon\", class: tab.icon })])];\n }, proxy: true }], null, true) }, [_c(\"span\", { staticClass: \"app-sidebar-tabs__tab-caption\" }, [_vm._v(\" \" + _vm._s(tab.name) + \" \")])]);\n }), 1) : _vm._e(), _c(\"div\", { staticClass: \"app-sidebar-tabs__content\", class: { \"app-sidebar-tabs__content--multiple\": _vm.hasMultipleTabs } }, [_vm._t(\"default\")], 2)]);\n};\nvar _sfc_staticRenderFns$1 = [];\nvar __component__$1 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$1,\n _sfc_render$1,\n _sfc_staticRenderFns$1,\n false,\n null,\n \"9fb8a5f7\"\n);\nconst NcAppSidebarTabs = __component__$1.exports;\nregister(t14);\nconst _sfc_main = {\n name: \"NcAppSidebar\",\n components: {\n Teleport: Portal,\n NcActions,\n NcAppSidebarHeader,\n NcAppSidebarTabs,\n ArrowRight,\n IconDockRight,\n NcButton,\n NcLoadingIcon,\n NcEmptyContent,\n Close,\n Star,\n StarOutline\n },\n directives: {\n focus: directive,\n ClickOutside: vOnClickOutside\n },\n inject: {\n ncContentSelector: {\n from: \"NcContent:selector\",\n default: void 0\n }\n },\n props: {\n /**\n * The active tab\n */\n active: {\n type: String,\n default: \"\"\n },\n /**\n * Note: in @nextcloud/vue v9 this prop is required\n */\n name: {\n type: String,\n default: \"\"\n },\n /**\n * Allow to edit the sidebar name.\n */\n nameEditable: {\n type: Boolean,\n default: false\n },\n /**\n * Placeholder in the edit field if the name is editable.\n */\n namePlaceholder: {\n type: String,\n default: \"\"\n },\n /**\n * Secondary name of the sidebar (subline)\n */\n subname: {\n type: String,\n default: \"\"\n },\n /**\n * Title to display for the subname.\n */\n subtitle: {\n type: String,\n default: \"\"\n },\n /**\n * Url to the top header background image\n * Applied with css\n */\n background: {\n type: String,\n default: \"\"\n },\n /**\n * Enable the favourite icon if not null\n * See fired events\n */\n starred: {\n type: Boolean,\n // eslint-disable-next-line vue/no-boolean-default\n default: null\n },\n /**\n * Show loading spinner instead of the star icon\n */\n starLoading: {\n type: Boolean,\n default: false\n },\n /**\n * Show loading spinner instead of tabs\n */\n loading: {\n type: Boolean,\n default: false\n },\n /**\n * Display the sidebar in compact mode\n */\n compact: {\n type: Boolean,\n default: false\n },\n /**\n * Only display close button and default slot content.\n * Don't display other header content and primary and secondary actions.\n * Useful when showing the EmptyContent component as content.\n */\n empty: {\n type: Boolean,\n default: false\n },\n /**\n * Force the actions to display in a three dot menu\n */\n forceMenu: {\n type: Boolean,\n default: false\n },\n /**\n * Force the tab navigation to display even if there is only one tab\n */\n forceTabs: {\n type: Boolean,\n default: false\n },\n /**\n * Linkify the name\n */\n linkifyName: {\n type: Boolean,\n default: false\n },\n /**\n * Title to display for the name.\n * Can be set to the same text in case it's too long.\n */\n title: {\n type: String,\n default: \"\"\n },\n /**\n * Allow to conditionally show the sidebar\n * You can also use `v-if` on the sidebar, but using the open prop allow to keep\n * the sidebar inside the DOM for performance if it is opened and closed multiple times.\n *\n * When using the `open` property to close the sidebar a built-in toggle button will be shown to reopen it,\n * similar to the app navigation. You can remove this button with the `no-toggle` prop.\n */\n open: {\n type: Boolean,\n // eslint-disable-next-line vue/no-boolean-default\n default: true\n },\n /**\n * Custom classes to assign to the sidebar toggle button.\n * If needed this can be used to assign styles to the button using `:deep()` selector.\n */\n toggleClasses: {\n type: [String, Array, Object],\n default: \"\"\n },\n /**\n * Custom attrs to assign to the sidebar toggle button.\n */\n toggleAttrs: {\n type: Object,\n default: void 0\n },\n /**\n * Do not add the built-in toggle button with `open` prop.\n */\n noToggle: {\n type: Boolean,\n default: false\n }\n },\n emits: [\n \"close\",\n \"closing\",\n \"closed\",\n \"opening\",\n \"opened\",\n \"figure-click\",\n \"update:active\",\n \"update:name\",\n \"update:nameEditable\",\n \"update:open\",\n \"update:starred\",\n \"submit-name\",\n \"dismiss-editing\"\n ],\n setup() {\n const headerRef = ref(null);\n provide(\"NcAppSidebar:header:ref\", headerRef);\n return {\n uid: GenRandomId(),\n isMobile: useIsSmallMobile(),\n headerRef\n };\n },\n data() {\n return {\n changeNameTranslated: t(\"Change name\"),\n closeTranslated: t(\"Close sidebar\"),\n favoriteTranslated: t(\"Favorite\"),\n isStarred: this.starred,\n focusTrap: null,\n elementToReturnFocus: null\n };\n },\n computed: {\n canStar() {\n return this.isStarred !== null;\n },\n hasFigure() {\n return this.$slots.header || this.background;\n },\n hasFigureClickListener() {\n return this.$listeners[\"figure-click\"];\n }\n },\n watch: {\n starred() {\n this.isStarred = this.starred;\n },\n isMobile() {\n this.toggleFocusTrap();\n },\n open() {\n this.checkToggleButtonContainerAvailability();\n }\n },\n created() {\n this.preserveElementToReturnFocus();\n this.checkToggleButtonContainerAvailability();\n },\n beforeDestroy() {\n this.$emit(\"closed\");\n this.focusTrap?.deactivate();\n },\n methods: {\n t,\n preserveElementToReturnFocus() {\n if (document.activeElement && document.activeElement !== document.body) {\n this.elementToReturnFocus = document.activeElement;\n if (this.elementToReturnFocus.getAttribute(\"role\") === \"menuitem\") {\n const menu = this.elementToReturnFocus.closest('[role=\"menu\"]');\n if (menu) {\n const menuTrigger = document.querySelector(`[aria-controls=\"${menu.id}\"]`);\n this.elementToReturnFocus = menuTrigger;\n }\n }\n }\n },\n initFocusTrap() {\n if (this.focusTrap) {\n return;\n }\n this.focusTrap = createFocusTrap([\n // The sidebar itself\n this.$refs.sidebar,\n // Nextcloud Server header navigarion\n document.querySelector(\"#header\")\n ], {\n allowOutsideClick: true,\n fallbackFocus: this.$refs.closeButton.$el,\n trapStack: getTrapStack(),\n escapeDeactivates: false\n });\n },\n /**\n * Activate focus trap if it is currently needed, otherwise deactivate\n */\n toggleFocusTrap() {\n if (this.open && this.isMobile) {\n this.initFocusTrap();\n this.focusTrap.activate();\n } else {\n this.focusTrap?.deactivate();\n }\n },\n /**\n * Close the sidebar on pressing the escape key on mobile\n *\n * @param {KeyboardEvent} event key down event\n */\n onKeydownEsc(event) {\n if (this.isMobile) {\n event.stopPropagation();\n this.closeSidebar();\n }\n },\n onBeforeEnter(element) {\n this.$emit(\"opening\", element);\n },\n onAfterEnter(element) {\n if (this.elementToReturnFocus) {\n this.focus();\n }\n this.toggleFocusTrap();\n this.$emit(\"opened\", element);\n },\n onBeforeLeave(element) {\n this.$emit(\"closing\", element);\n },\n onAfterLeave(element) {\n this.$emit(\"closed\", element);\n this.toggleFocusTrap();\n this.elementToReturnFocus?.focus({ focusVisible: true });\n this.elementToReturnFocus = null;\n },\n /**\n * Used to tell parent component the user asked to close the sidebar\n *\n * @param {Event} e close icon click event\n */\n closeSidebar(e) {\n this.$emit(\"close\", e);\n this.$emit(\"update:open\", false);\n },\n /**\n * Emit figure click event to parent component\n *\n * @param {Event} e click event\n */\n onFigureClick(e) {\n this.$emit(\"figure-click\", e);\n },\n /**\n * Toggle the favourite state\n * and emit to the parent component\n */\n toggleStarred() {\n this.isStarred = !this.isStarred;\n this.$emit(\"update:starred\", this.isStarred);\n },\n editName() {\n this.$emit(\"update:nameEditable\", true);\n if (this.nameEditable) {\n this.$nextTick(() => this.$refs.nameInput.focus());\n }\n },\n /**\n * Focus the sidebar\n *\n * @public\n */\n focus() {\n if (!this.open && !this.noToggle) {\n this.$refs.toggle.$el.focus();\n return;\n }\n try {\n this.headerRef.focus();\n } catch {\n Vue.util.warn(\"NcAppSidebar should have focusable header for accessibility reasons. Use NcAppSidebarHeader component.\");\n }\n },\n /**\n * Focus the active tab\n *\n * @public\n */\n focusActiveTabContent() {\n this.preserveElementToReturnFocus();\n this.$refs.tabs.focusActiveTabContent();\n },\n /**\n * Check if the toggle button container is available\n */\n checkToggleButtonContainerAvailability() {\n if (this.open === false && !this.noToggle && !this.ncContentSelector) {\n logger.warn(\"[NcAppSidebar] It looks like you want to use NcAppSidebar with the built-in toggle button. This feature is only available when NcAppSidebar is used in NcContent.\");\n }\n },\n /**\n * Emit name change event to parent component\n *\n * @param {Event} event input event\n */\n onNameInput(event) {\n this.$emit(\"update:name\", event.target.value);\n },\n /**\n * Emit when the name form edit confirm button is pressed in order\n * to change the name.\n *\n * @param {Event} event submit event\n */\n onSubmitName(event) {\n this.$emit(\"update:nameEditable\", false);\n this.$emit(\"submit-name\", event);\n },\n onDismissEditing() {\n this.$emit(\"update:nameEditable\", false);\n this.$emit(\"dismiss-editing\");\n },\n onUpdateActive(activeTab) {\n this.$emit(\"update:active\", activeTab);\n }\n }\n};\nvar _sfc_render = function render5() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"transition\", { attrs: { \"appear\": \"\", \"name\": \"slide-right\" }, on: { \"before-enter\": _vm.onBeforeEnter, \"after-enter\": _vm.onAfterEnter, \"before-leave\": _vm.onBeforeLeave, \"after-leave\": _vm.onAfterLeave } }, [_c(\"aside\", { directives: [{ name: \"show\", rawName: \"v-show\", value: _vm.open, expression: \"open\" }], ref: \"sidebar\", staticClass: \"app-sidebar\", attrs: { \"id\": \"app-sidebar-vue\", \"aria-labelledby\": `app-sidebar-vue-${_vm.uid}__header` }, on: { \"keydown\": function($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"esc\", 27, $event.key, [\"Esc\", \"Escape\"])) return null;\n return _vm.onKeydownEsc.apply(null, arguments);\n } } }, [_vm.ncContentSelector && !_vm.open && !_vm.noToggle ? _c(\"Teleport\", { attrs: { \"selector\": _vm.ncContentSelector } }, [_c(\"NcButton\", _vm._b({ ref: \"toggle\", staticClass: \"app-sidebar__toggle\", class: _vm.toggleClasses, attrs: { \"aria-label\": _vm.t(\"Open sidebar\"), \"variant\": \"tertiary\" }, on: { \"click\": function($event) {\n return _vm.$emit(\"update:open\", true);\n } }, scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_vm._t(\"toggle-icon\", function() {\n return [_c(\"IconDockRight\", { attrs: { \"size\": 20 } })];\n })];\n }, proxy: true }], null, true) }, \"NcButton\", _vm.toggleAttrs, false))], 1) : _vm._e(), _c(\"header\", { staticClass: \"app-sidebar-header\", class: {\n \"app-sidebar-header--with-figure\": _vm.hasFigure,\n \"app-sidebar-header--compact\": _vm.compact\n } }, [!_vm.empty ? _vm._t(\"info\", function() {\n return [_c(\"div\", { staticClass: \"app-sidebar-header__info\" }, [_vm.hasFigure ? _c(\"div\", { staticClass: \"app-sidebar-header__figure\", class: {\n \"app-sidebar-header__figure--with-action\": _vm.hasFigureClickListener\n }, style: {\n backgroundImage: `url(${_vm.background})`\n }, attrs: { \"tabindex\": \"0\" }, on: { \"click\": _vm.onFigureClick, \"keydown\": function($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")) return null;\n return _vm.onFigureClick.apply(null, arguments);\n } } }, [_vm._t(\"header\")], 2) : _vm._e(), _c(\"div\", { staticClass: \"app-sidebar-header__desc\", class: {\n \"app-sidebar-header__desc--with-tertiary-action\": _vm.canStar || _vm.$slots[\"tertiary-actions\"],\n \"app-sidebar-header__desc--editable\": _vm.nameEditable && !_vm.subname,\n \"app-sidebar-header__desc--with-subname--editable\": _vm.nameEditable && _vm.subname,\n \"app-sidebar-header__desc--without-actions\": !_vm.$slots[\"secondary-actions\"]\n } }, [_vm.canStar || _vm.$slots[\"tertiary-actions\"] ? _c(\"div\", { staticClass: \"app-sidebar-header__tertiary-actions\" }, [_vm._t(\"tertiary-actions\", function() {\n return [_vm.canStar ? _c(\"NcButton\", { staticClass: \"app-sidebar-header__star\", attrs: { \"aria-label\": _vm.favoriteTranslated, \"pressed\": _vm.isStarred, \"variant\": \"secondary\" }, on: { \"click\": function($event) {\n $event.preventDefault();\n return _vm.toggleStarred.apply(null, arguments);\n } }, scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_vm.starLoading ? _c(\"NcLoadingIcon\") : _vm.isStarred ? _c(\"Star\", { attrs: { \"size\": 20 } }) : _c(\"StarOutline\", { attrs: { \"size\": 20 } })];\n }, proxy: true }], null, false, 2575459756) }) : _vm._e()];\n })], 2) : _vm._e(), _c(\"div\", { staticClass: \"app-sidebar-header__name-container\" }, [_c(\"div\", { staticClass: \"app-sidebar-header__mainname-container\" }, [_c(\"NcAppSidebarHeader\", { directives: [{ name: \"show\", rawName: \"v-show\", value: !_vm.nameEditable, expression: \"!nameEditable\" }], staticClass: \"app-sidebar-header__mainname\", attrs: { \"name\": _vm.name, \"linkify\": _vm.linkifyName, \"title\": _vm.title, \"tabindex\": _vm.nameEditable ? 0 : -1 }, nativeOn: { \"click\": function($event) {\n if ($event.target !== $event.currentTarget) return null;\n return _vm.editName.apply(null, arguments);\n } } }), _vm.nameEditable ? [_c(\"form\", { directives: [{ name: \"click-outside\", rawName: \"v-click-outside\", value: (() => _vm.onSubmitName()), expression: \"() => onSubmitName()\" }], staticClass: \"app-sidebar-header__mainname-form\", on: { \"submit\": function($event) {\n $event.preventDefault();\n return _vm.onSubmitName.apply(null, arguments);\n } } }, [_c(\"input\", { directives: [{ name: \"focus\", rawName: \"v-focus\" }], ref: \"nameInput\", staticClass: \"app-sidebar-header__mainname-input\", attrs: { \"type\": \"text\", \"placeholder\": _vm.namePlaceholder }, domProps: { \"value\": _vm.name }, on: { \"keydown\": function($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"esc\", 27, $event.key, [\"Esc\", \"Escape\"])) return null;\n $event.stopPropagation();\n return _vm.onDismissEditing.apply(null, arguments);\n }, \"input\": _vm.onNameInput } }), _c(\"NcButton\", { attrs: { \"aria-label\": _vm.changeNameTranslated, \"type\": \"submit\", \"variant\": \"tertiary-no-background\" }, scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_c(\"ArrowRight\", { attrs: { \"size\": 20 } })];\n }, proxy: true }], null, false, 1252225425) })], 1)] : _vm._e(), _vm.$slots[\"secondary-actions\"] ? _c(\"NcActions\", { staticClass: \"app-sidebar-header__menu\", attrs: { \"force-menu\": _vm.forceMenu } }, [_vm._t(\"secondary-actions\")], 2) : _vm._e()], 2), _vm.subname.trim() !== \"\" || _vm.$slots[\"subname\"] ? _c(\"p\", { staticClass: \"app-sidebar-header__subname\", attrs: { \"title\": _vm.subtitle || void 0 } }, [_vm._t(\"subname\", function() {\n return [_vm._v(\" \" + _vm._s(_vm.subname) + \" \")];\n })], 2) : _vm._e()])])])];\n }) : _c(\"NcAppSidebarHeader\", { staticClass: \"app-sidebar-header__mainname--hidden\", attrs: { \"name\": _vm.name, \"tabindex\": \"-1\" } }), _c(\"NcButton\", { ref: \"closeButton\", staticClass: \"app-sidebar__close\", attrs: { \"aria-label\": _vm.closeTranslated, \"title\": _vm.closeTranslated, \"variant\": \"tertiary\" }, on: { \"click\": function($event) {\n $event.preventDefault();\n return _vm.closeSidebar.apply(null, arguments);\n } }, scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_c(\"Close\", { attrs: { \"size\": 20 } })];\n }, proxy: true }]) }), _vm.$slots[\"description\"] && !_vm.empty ? _c(\"div\", { staticClass: \"app-sidebar-header__description\" }, [_vm._t(\"description\")], 2) : _vm._e()], 2), _c(\"NcAppSidebarTabs\", { directives: [{ name: \"show\", rawName: \"v-show\", value: !_vm.loading, expression: \"!loading\" }], ref: \"tabs\", attrs: { \"active\": _vm.active, \"force-tabs\": _vm.forceTabs }, on: { \"update:active\": _vm.onUpdateActive } }, [_vm._t(\"default\")], 2), _vm.loading ? _c(\"NcEmptyContent\", { scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_c(\"NcLoadingIcon\", { attrs: { \"size\": 64 } })];\n }, proxy: true }], null, false, 826850984) }) : _vm._e()], 1)]);\n};\nvar _sfc_staticRenderFns = [];\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n null,\n \"898c8c80\"\n);\nconst NcAppSidebar = __component__.exports;\nexport {\n NcAppSidebar as N\n};\n//# sourceMappingURL=NcAppSidebar-B7GuNZ4C.mjs.map\n","export class TimeoutError extends Error {\n\tconstructor(message) {\n\t\tsuper(message);\n\t\tthis.name = 'TimeoutError';\n\t}\n}\n\n/**\nAn error to be thrown when the request is aborted by AbortController.\nDOMException is thrown instead of this Error when DOMException is available.\n*/\nexport class AbortError extends Error {\n\tconstructor(message) {\n\t\tsuper();\n\t\tthis.name = 'AbortError';\n\t\tthis.message = message;\n\t}\n}\n\n/**\nTODO: Remove AbortError and just throw DOMException when targeting Node 18.\n*/\nconst getDOMException = errorMessage => globalThis.DOMException === undefined\n\t? new AbortError(errorMessage)\n\t: new DOMException(errorMessage);\n\n/**\nTODO: Remove below function and just 'reject(signal.reason)' when targeting Node 18.\n*/\nconst getAbortedReason = signal => {\n\tconst reason = signal.reason === undefined\n\t\t? getDOMException('This operation was aborted.')\n\t\t: signal.reason;\n\n\treturn reason instanceof Error ? reason : getDOMException(reason);\n};\n\nexport default function pTimeout(promise, options) {\n\tconst {\n\t\tmilliseconds,\n\t\tfallback,\n\t\tmessage,\n\t\tcustomTimers = {setTimeout, clearTimeout},\n\t} = options;\n\n\tlet timer;\n\tlet abortHandler;\n\n\tconst wrappedPromise = new Promise((resolve, reject) => {\n\t\tif (typeof milliseconds !== 'number' || Math.sign(milliseconds) !== 1) {\n\t\t\tthrow new TypeError(`Expected \\`milliseconds\\` to be a positive number, got \\`${milliseconds}\\``);\n\t\t}\n\n\t\tif (options.signal) {\n\t\t\tconst {signal} = options;\n\t\t\tif (signal.aborted) {\n\t\t\t\treject(getAbortedReason(signal));\n\t\t\t}\n\n\t\t\tabortHandler = () => {\n\t\t\t\treject(getAbortedReason(signal));\n\t\t\t};\n\n\t\t\tsignal.addEventListener('abort', abortHandler, {once: true});\n\t\t}\n\n\t\tif (milliseconds === Number.POSITIVE_INFINITY) {\n\t\t\tpromise.then(resolve, reject);\n\t\t\treturn;\n\t\t}\n\n\t\t// We create the error outside of `setTimeout` to preserve the stack trace.\n\t\tconst timeoutError = new TimeoutError();\n\n\t\ttimer = customTimers.setTimeout.call(undefined, () => {\n\t\t\tif (fallback) {\n\t\t\t\ttry {\n\t\t\t\t\tresolve(fallback());\n\t\t\t\t} catch (error) {\n\t\t\t\t\treject(error);\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (typeof promise.cancel === 'function') {\n\t\t\t\tpromise.cancel();\n\t\t\t}\n\n\t\t\tif (message === false) {\n\t\t\t\tresolve();\n\t\t\t} else if (message instanceof Error) {\n\t\t\t\treject(message);\n\t\t\t} else {\n\t\t\t\ttimeoutError.message = message ?? `Promise timed out after ${milliseconds} milliseconds`;\n\t\t\t\treject(timeoutError);\n\t\t\t}\n\t\t}, milliseconds);\n\n\t\t(async () => {\n\t\t\ttry {\n\t\t\t\tresolve(await promise);\n\t\t\t} catch (error) {\n\t\t\t\treject(error);\n\t\t\t}\n\t\t})();\n\t});\n\n\tconst cancelablePromise = wrappedPromise.finally(() => {\n\t\tcancelablePromise.clear();\n\t\tif (abortHandler && options.signal) {\n\t\t\toptions.signal.removeEventListener('abort', abortHandler);\n\t\t}\n\t});\n\n\tcancelablePromise.clear = () => {\n\t\tcustomTimers.clearTimeout.call(undefined, timer);\n\t\ttimer = undefined;\n\t};\n\n\treturn cancelablePromise;\n}\n","// Port of lower_bound from https://en.cppreference.com/w/cpp/algorithm/lower_bound\n// Used to compute insertion index to keep queue sorted after insertion\nexport default function lowerBound(array, value, comparator) {\n let first = 0;\n let count = array.length;\n while (count > 0) {\n const step = Math.trunc(count / 2);\n let it = first + step;\n if (comparator(array[it], value) <= 0) {\n first = ++it;\n count -= step + 1;\n }\n else {\n count = step;\n }\n }\n return first;\n}\n","import lowerBound from './lower-bound.js';\nexport default class PriorityQueue {\n #queue = [];\n enqueue(run, options) {\n options = {\n priority: 0,\n ...options,\n };\n const element = {\n priority: options.priority,\n id: options.id,\n run,\n };\n if (this.size === 0 || this.#queue[this.size - 1].priority >= options.priority) {\n this.#queue.push(element);\n return;\n }\n const index = lowerBound(this.#queue, element, (a, b) => b.priority - a.priority);\n this.#queue.splice(index, 0, element);\n }\n setPriority(id, priority) {\n const index = this.#queue.findIndex((element) => element.id === id);\n if (index === -1) {\n throw new ReferenceError(`No promise function with the id \"${id}\" exists in the queue.`);\n }\n const [item] = this.#queue.splice(index, 1);\n this.enqueue(item.run, { priority, id });\n }\n dequeue() {\n const item = this.#queue.shift();\n return item?.run;\n }\n filter(options) {\n return this.#queue.filter((element) => element.priority === options.priority).map((element) => element.run);\n }\n get size() {\n return this.#queue.length;\n }\n}\n","import { EventEmitter } from 'eventemitter3';\nimport pTimeout, { TimeoutError } from 'p-timeout';\nimport PriorityQueue from './priority-queue.js';\n/**\nPromise queue with concurrency control.\n*/\nexport default class PQueue extends EventEmitter {\n #carryoverConcurrencyCount;\n #isIntervalIgnored;\n #intervalCount = 0;\n #intervalCap;\n #interval;\n #intervalEnd = 0;\n #intervalId;\n #timeoutId;\n #queue;\n #queueClass;\n #pending = 0;\n // The `!` is needed because of https://github.com/microsoft/TypeScript/issues/32194\n #concurrency;\n #isPaused;\n #throwOnTimeout;\n // Use to assign a unique identifier to a promise function, if not explicitly specified\n #idAssigner = 1n;\n /**\n Per-operation timeout in milliseconds. Operations fulfill once `timeout` elapses if they haven't already.\n\n Applies to each future operation.\n */\n timeout;\n // TODO: The `throwOnTimeout` option should affect the return types of `add()` and `addAll()`\n constructor(options) {\n super();\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n options = {\n carryoverConcurrencyCount: false,\n intervalCap: Number.POSITIVE_INFINITY,\n interval: 0,\n concurrency: Number.POSITIVE_INFINITY,\n autoStart: true,\n queueClass: PriorityQueue,\n ...options,\n };\n if (!(typeof options.intervalCap === 'number' && options.intervalCap >= 1)) {\n throw new TypeError(`Expected \\`intervalCap\\` to be a number from 1 and up, got \\`${options.intervalCap?.toString() ?? ''}\\` (${typeof options.intervalCap})`);\n }\n if (options.interval === undefined || !(Number.isFinite(options.interval) && options.interval >= 0)) {\n throw new TypeError(`Expected \\`interval\\` to be a finite number >= 0, got \\`${options.interval?.toString() ?? ''}\\` (${typeof options.interval})`);\n }\n this.#carryoverConcurrencyCount = options.carryoverConcurrencyCount;\n this.#isIntervalIgnored = options.intervalCap === Number.POSITIVE_INFINITY || options.interval === 0;\n this.#intervalCap = options.intervalCap;\n this.#interval = options.interval;\n this.#queue = new options.queueClass();\n this.#queueClass = options.queueClass;\n this.concurrency = options.concurrency;\n this.timeout = options.timeout;\n this.#throwOnTimeout = options.throwOnTimeout === true;\n this.#isPaused = options.autoStart === false;\n }\n get #doesIntervalAllowAnother() {\n return this.#isIntervalIgnored || this.#intervalCount < this.#intervalCap;\n }\n get #doesConcurrentAllowAnother() {\n return this.#pending < this.#concurrency;\n }\n #next() {\n this.#pending--;\n this.#tryToStartAnother();\n this.emit('next');\n }\n #onResumeInterval() {\n this.#onInterval();\n this.#initializeIntervalIfNeeded();\n this.#timeoutId = undefined;\n }\n get #isIntervalPaused() {\n const now = Date.now();\n if (this.#intervalId === undefined) {\n const delay = this.#intervalEnd - now;\n if (delay < 0) {\n // Act as the interval was done\n // We don't need to resume it here because it will be resumed on line 160\n this.#intervalCount = (this.#carryoverConcurrencyCount) ? this.#pending : 0;\n }\n else {\n // Act as the interval is pending\n if (this.#timeoutId === undefined) {\n this.#timeoutId = setTimeout(() => {\n this.#onResumeInterval();\n }, delay);\n }\n return true;\n }\n }\n return false;\n }\n #tryToStartAnother() {\n if (this.#queue.size === 0) {\n // We can clear the interval (\"pause\")\n // Because we can redo it later (\"resume\")\n if (this.#intervalId) {\n clearInterval(this.#intervalId);\n }\n this.#intervalId = undefined;\n this.emit('empty');\n if (this.#pending === 0) {\n this.emit('idle');\n }\n return false;\n }\n if (!this.#isPaused) {\n const canInitializeInterval = !this.#isIntervalPaused;\n if (this.#doesIntervalAllowAnother && this.#doesConcurrentAllowAnother) {\n const job = this.#queue.dequeue();\n if (!job) {\n return false;\n }\n this.emit('active');\n job();\n if (canInitializeInterval) {\n this.#initializeIntervalIfNeeded();\n }\n return true;\n }\n }\n return false;\n }\n #initializeIntervalIfNeeded() {\n if (this.#isIntervalIgnored || this.#intervalId !== undefined) {\n return;\n }\n this.#intervalId = setInterval(() => {\n this.#onInterval();\n }, this.#interval);\n this.#intervalEnd = Date.now() + this.#interval;\n }\n #onInterval() {\n if (this.#intervalCount === 0 && this.#pending === 0 && this.#intervalId) {\n clearInterval(this.#intervalId);\n this.#intervalId = undefined;\n }\n this.#intervalCount = this.#carryoverConcurrencyCount ? this.#pending : 0;\n this.#processQueue();\n }\n /**\n Executes all queued functions until it reaches the limit.\n */\n #processQueue() {\n // eslint-disable-next-line no-empty\n while (this.#tryToStartAnother()) { }\n }\n get concurrency() {\n return this.#concurrency;\n }\n set concurrency(newConcurrency) {\n if (!(typeof newConcurrency === 'number' && newConcurrency >= 1)) {\n throw new TypeError(`Expected \\`concurrency\\` to be a number from 1 and up, got \\`${newConcurrency}\\` (${typeof newConcurrency})`);\n }\n this.#concurrency = newConcurrency;\n this.#processQueue();\n }\n async #throwOnAbort(signal) {\n return new Promise((_resolve, reject) => {\n signal.addEventListener('abort', () => {\n reject(signal.reason);\n }, { once: true });\n });\n }\n /**\n Updates the priority of a promise function by its id, affecting its execution order. Requires a defined concurrency limit to take effect.\n\n For example, this can be used to prioritize a promise function to run earlier.\n\n ```js\n import PQueue from 'p-queue';\n\n const queue = new PQueue({concurrency: 1});\n\n queue.add(async () => '🦄', {priority: 1});\n queue.add(async () => '🦀', {priority: 0, id: '🦀'});\n queue.add(async () => '🦄', {priority: 1});\n queue.add(async () => '🦄', {priority: 1});\n\n queue.setPriority('🦀', 2);\n ```\n\n In this case, the promise function with `id: '🦀'` runs second.\n\n You can also deprioritize a promise function to delay its execution:\n\n ```js\n import PQueue from 'p-queue';\n\n const queue = new PQueue({concurrency: 1});\n\n queue.add(async () => '🦄', {priority: 1});\n queue.add(async () => '🦀', {priority: 1, id: '🦀'});\n queue.add(async () => '🦄');\n queue.add(async () => '🦄', {priority: 0});\n\n queue.setPriority('🦀', -1);\n ```\n Here, the promise function with `id: '🦀'` executes last.\n */\n setPriority(id, priority) {\n this.#queue.setPriority(id, priority);\n }\n async add(function_, options = {}) {\n // In case `id` is not defined.\n options.id ??= (this.#idAssigner++).toString();\n options = {\n timeout: this.timeout,\n throwOnTimeout: this.#throwOnTimeout,\n ...options,\n };\n return new Promise((resolve, reject) => {\n this.#queue.enqueue(async () => {\n this.#pending++;\n try {\n options.signal?.throwIfAborted();\n this.#intervalCount++;\n let operation = function_({ signal: options.signal });\n if (options.timeout) {\n operation = pTimeout(Promise.resolve(operation), { milliseconds: options.timeout });\n }\n if (options.signal) {\n operation = Promise.race([operation, this.#throwOnAbort(options.signal)]);\n }\n const result = await operation;\n resolve(result);\n this.emit('completed', result);\n }\n catch (error) {\n if (error instanceof TimeoutError && !options.throwOnTimeout) {\n resolve();\n return;\n }\n reject(error);\n this.emit('error', error);\n }\n finally {\n this.#next();\n }\n }, options);\n this.emit('add');\n this.#tryToStartAnother();\n });\n }\n async addAll(functions, options) {\n return Promise.all(functions.map(async (function_) => this.add(function_, options)));\n }\n /**\n Start (or resume) executing enqueued tasks within concurrency limit. No need to call this if queue is not paused (via `options.autoStart = false` or by `.pause()` method.)\n */\n start() {\n if (!this.#isPaused) {\n return this;\n }\n this.#isPaused = false;\n this.#processQueue();\n return this;\n }\n /**\n Put queue execution on hold.\n */\n pause() {\n this.#isPaused = true;\n }\n /**\n Clear the queue.\n */\n clear() {\n this.#queue = new this.#queueClass();\n }\n /**\n Can be called multiple times. Useful if you for example add additional items at a later time.\n\n @returns A promise that settles when the queue becomes empty.\n */\n async onEmpty() {\n // Instantly resolve if the queue is empty\n if (this.#queue.size === 0) {\n return;\n }\n await this.#onEvent('empty');\n }\n /**\n @returns A promise that settles when the queue size is less than the given limit: `queue.size < limit`.\n\n If you want to avoid having the queue grow beyond a certain size you can `await queue.onSizeLessThan()` before adding a new item.\n\n Note that this only limits the number of items waiting to start. There could still be up to `concurrency` jobs already running that this call does not include in its calculation.\n */\n async onSizeLessThan(limit) {\n // Instantly resolve if the queue is empty.\n if (this.#queue.size < limit) {\n return;\n }\n await this.#onEvent('next', () => this.#queue.size < limit);\n }\n /**\n The difference with `.onEmpty` is that `.onIdle` guarantees that all work from the queue has finished. `.onEmpty` merely signals that the queue is empty, but it could mean that some promises haven't completed yet.\n\n @returns A promise that settles when the queue becomes empty, and all promises have completed; `queue.size === 0 && queue.pending === 0`.\n */\n async onIdle() {\n // Instantly resolve if none pending and if nothing else is queued\n if (this.#pending === 0 && this.#queue.size === 0) {\n return;\n }\n await this.#onEvent('idle');\n }\n async #onEvent(event, filter) {\n return new Promise(resolve => {\n const listener = () => {\n if (filter && !filter()) {\n return;\n }\n this.off(event, listener);\n resolve();\n };\n this.on(event, listener);\n });\n }\n /**\n Size of the queue, the number of queued items waiting to run.\n */\n get size() {\n return this.#queue.size;\n }\n /**\n Size of the queue, filtered by the given options.\n\n For example, this can be used to find the number of items remaining in the queue with a specific priority level.\n */\n sizeBy(options) {\n // eslint-disable-next-line unicorn/no-array-callback-reference\n return this.#queue.filter(options).length;\n }\n /**\n Number of running items (no longer in the queue).\n */\n get pending() {\n return this.#pending;\n }\n /**\n Whether the queue is currently paused.\n */\n get isPaused() {\n return this.#isPaused;\n }\n}\n","import PQueue from \"p-queue\";\nconst queue = new PQueue({ concurrency: 5 });\nfunction preloadImage(url) {\n const { resolve, promise } = Promise.withResolvers();\n queue.add(() => {\n const image = new Image();\n image.onerror = () => resolve(false);\n image.onload = () => resolve(true);\n image.src = url;\n return promise;\n });\n return promise;\n}\nexport {\n preloadImage\n};\n//# sourceMappingURL=preloadImage.mjs.map\n","import '../assets/NcCollectionList-ChU8Os4e.css';\nimport debounce from \"debounce\";\nimport { ref, set } from \"vue\";\nimport { r as register, O as t27, a as t, P as t6 } from \"./_l10n-DVz9Qdzk.mjs\";\nimport { N as NcActionButton } from \"./NcActionButton-K4jUGMlW.mjs\";\nimport { N as NcActions } from \"./NcActions-DbPerbGE.mjs\";\nimport { N as NcAvatar } from \"./NcAvatar-DkAX4nqq.mjs\";\nimport { g as getRoute } from \"./autolink-CeB9uxD9.mjs\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nimport { l as logger } from \"./logger-D3RVzcfQ.mjs\";\nimport { N as NcSelect } from \"./NcSelect-CHc1QupB.mjs\";\nimport axios from \"@nextcloud/axios\";\nimport { generateOcsUrl } from \"@nextcloud/router\";\nregister(t27);\nconst _sfc_main$1 = {\n name: \"NcCollectionListItem\",\n components: {\n NcAvatar,\n NcActions,\n NcActionButton\n },\n props: {\n /**\n * The collection\n */\n collection: {\n type: Object,\n default: null\n },\n /**\n * Current error if any\n */\n error: {\n type: String,\n default: void 0\n }\n },\n emits: [\"remove-resource\", \"rename-collection\"],\n data() {\n return {\n detailsOpen: false,\n newName: null\n };\n },\n computed: {\n getIcon() {\n return (resource) => [resource.iconClass];\n },\n typeClass() {\n return (resource) => \"resource-type-\" + resource.type;\n },\n resources() {\n return this.collection.resources?.filter((resource) => !Array.isArray(resource)) ?? [];\n },\n getComponent() {\n return (resource) => {\n const route = getRoute(this.$router, resource.link);\n return route ? { component: \"router-link\", to: route, href: void 0 } : { component: \"a\", to: void 0, href: resource.link };\n };\n },\n iconUrl() {\n return (resource) => {\n if (resource.mimetype) {\n return OC.MimeType.getIconUrl(resource.mimetype);\n }\n if (resource.iconUrl) {\n return resource.iconUrl;\n }\n return \"\";\n };\n }\n },\n methods: {\n t,\n toggleDetails() {\n this.detailsOpen = !this.detailsOpen;\n },\n showDetails() {\n this.detailsOpen = true;\n },\n removeResource(collection, resource) {\n this.$emit(\"remove-resource\", {\n collectionId: collection.id,\n resourceType: resource.type,\n resourceId: resource.id\n });\n },\n openRename() {\n this.newName = this.collection.name;\n },\n renameCollection() {\n if (this.newName) {\n this.$emit(\"rename-collection\", {\n collectionId: this.collection.id,\n name: this.newName\n });\n }\n this.newName = null;\n }\n }\n};\nvar _sfc_render$1 = function render() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"li\", { staticClass: \"collection-list-item\" }, [_c(\"NcAvatar\", { staticClass: \"collection-avatar\", attrs: { \"display-name\": _vm.collection.name, \"allow-placeholder\": \"\" } }), _vm.newName === null ? _c(\"span\", { staticClass: \"collection-item-name\", attrs: { \"title\": \"\" }, on: { \"click\": _vm.showDetails } }, [_vm._v(_vm._s(_vm.collection.name))]) : _c(\"form\", { class: { \"should-shake\": _vm.error }, on: { \"submit\": function($event) {\n $event.preventDefault();\n return _vm.renameCollection.apply(null, arguments);\n } } }, [_c(\"input\", { directives: [{ name: \"model\", rawName: \"v-model\", value: _vm.newName, expression: \"newName\" }], attrs: { \"type\": \"text\", \"autocomplete\": \"off\", \"autocapitalize\": \"off\" }, domProps: { \"value\": _vm.newName }, on: { \"input\": function($event) {\n if ($event.target.composing) return;\n _vm.newName = $event.target.value;\n } } }), _c(\"input\", { staticClass: \"icon-confirm\", attrs: { \"type\": \"submit\", \"value\": \"\" } })]), !_vm.detailsOpen && _vm.newName === null ? _c(\"div\", { staticClass: \"linked-icons\" }, _vm._l(_vm.resources.slice(0, 2), function(resource) {\n return _c(_vm.getComponent(resource).component, { key: resource.type + \"|\" + resource.id, tag: \"component\", class: _vm.typeClass(resource), attrs: { \"title\": resource.name, \"to\": _vm.getComponent(resource).to, \"href\": _vm.getComponent(resource).href } }, [_c(\"img\", { attrs: { \"src\": _vm.iconUrl(resource), \"alt\": resource.name } })]);\n }), 1) : _vm._e(), _vm.newName === null ? _c(\"span\", { staticClass: \"sharingOptionsGroup\" }, [_c(\"NcActions\", [_c(\"NcActionButton\", { attrs: { \"icon\": \"icon-info\" }, on: { \"click\": function($event) {\n $event.preventDefault();\n return _vm.toggleDetails.apply(null, arguments);\n } } }, [_vm._v(\" \" + _vm._s(_vm.detailsOpen ? _vm.t(\"Hide details\") : _vm.t(\"Show details\")) + \" \")]), _c(\"NcActionButton\", { attrs: { \"icon\": \"icon-rename\" }, on: { \"click\": function($event) {\n $event.preventDefault();\n return _vm.openRename.apply(null, arguments);\n } } }, [_vm._v(\" \" + _vm._s(_vm.t(\"Rename project\")) + \" \")])], 1)], 1) : _vm._e(), _c(\"transition\", { attrs: { \"name\": \"fade\" } }, [_vm.error ? _c(\"div\", { staticClass: \"error\" }, [_vm._v(\" \" + _vm._s(_vm.error) + \" \")]) : _vm._e()]), _c(\"transition\", { attrs: { \"name\": \"fade\" } }, [_vm.detailsOpen ? _c(\"ul\", { staticClass: \"resource-list-details\" }, _vm._l(_vm.resources, function(resource) {\n return _c(\"li\", { key: resource.type + \"|\" + resource.id, class: _vm.typeClass(resource) }, [_c(_vm.getComponent(resource).component, { tag: \"component\", attrs: { \"to\": _vm.getComponent(resource).to, \"href\": _vm.getComponent(resource).href } }, [_c(\"img\", { attrs: { \"src\": _vm.iconUrl(resource), \"alt\": resource.name } }), _c(\"span\", { staticClass: \"resource-name\" }, [_vm._v(_vm._s(resource.name || \"\"))])]), _c(\"span\", { staticClass: \"icon-close\", on: { \"click\": function($event) {\n return _vm.removeResource(_vm.collection, resource);\n } } })], 1);\n }), 0) : _vm._e()])], 1);\n};\nvar _sfc_staticRenderFns$1 = [];\nvar __component__$1 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$1,\n _sfc_render$1,\n _sfc_staticRenderFns$1,\n false,\n null,\n \"88468fab\"\n);\nconst NcCollectionListItem = __component__$1.exports;\nregister(t6);\nfunction extractOcsData(response) {\n return response.data.ocs.data;\n}\nfunction renameCollectionService(collectionId, collectionName) {\n return axios.put(generateOcsUrl(\"collaboration/resources/collections/{collectionId}\", { collectionId }), { collectionName }).then(extractOcsData);\n}\nfunction getCollectionsByResourceService(resourceType, resourceId) {\n return axios.get(generateOcsUrl(\"collaboration/resources/{resourceType}/{resourceId}\", { resourceType, resourceId })).then(extractOcsData);\n}\nfunction createCollectionService(resourceType, resourceId, name) {\n return axios.post(generateOcsUrl(\"collaboration/resources/{resourceType}/{resourceId}\", { resourceType, resourceId }), { name }).then(extractOcsData);\n}\nfunction addResourceService(collectionId, resourceType, resourceId) {\n return axios.post(generateOcsUrl(\"collaboration/resources/collections/{collectionId}\", { collectionId }), { resourceType, resourceId }).then(extractOcsData);\n}\nfunction removeResourceService(collectionId, resourceType, resourceId) {\n return axios.delete(generateOcsUrl(\"collaboration/resources/collections/{collectionId}\", { collectionId }), { params: { resourceType, resourceId } }).then(extractOcsData);\n}\nfunction searchService(query) {\n return axios.get(generateOcsUrl(\"collaboration/resources/collections/search/{query}\", { query })).then(extractOcsData);\n}\nfunction useCollections() {\n const storedCollections = ref([]);\n const addCollections = (collections) => {\n set(storedCollections, \"value\", collections);\n };\n const addCollection = (collection) => {\n set(storedCollections, \"value\", [...storedCollections.value, collection]);\n };\n const removeCollection = (collectionId) => {\n set(storedCollections, \"value\", storedCollections.value.filter((item) => item.id !== collectionId));\n };\n const updateCollection = (collection) => {\n const index = storedCollections.value.findIndex((item) => item.id === collection.id);\n if (index !== -1) {\n set(storedCollections.value, index, collection);\n } else {\n addCollection(collection);\n }\n };\n const fetchCollectionsByResource = async ({ resourceType, resourceId }) => {\n const collections = await getCollectionsByResourceService(resourceType, resourceId);\n addCollections(collections);\n };\n const createCollection = async ({ baseResourceType, baseResourceId, resourceType, resourceId, name }) => {\n const collection = await createCollectionService(baseResourceType, baseResourceId, name);\n addCollection(collection);\n await addResourceToCollection({\n collectionId: collection.id,\n resourceType,\n resourceId\n });\n };\n const renameCollection = async ({ collectionId, name }) => {\n const collection = await renameCollectionService(collectionId, name);\n updateCollection(collection);\n };\n async function addResourceToCollection({ collectionId, resourceType, resourceId }) {\n const collection = await addResourceService(collectionId, resourceType, String(resourceId));\n updateCollection(collection);\n }\n const removeResourceFromCollection = async ({ collectionId, resourceType, resourceId }) => {\n const collection = await removeResourceService(collectionId, resourceType, String(resourceId));\n if (collection.resources.length > 0) {\n updateCollection(collection);\n } else {\n removeCollection(collectionId);\n }\n };\n return {\n storedCollections,\n fetchCollectionsByResource,\n createCollection,\n renameCollection,\n addResourceToCollection,\n removeResourceFromCollection\n };\n}\nconst METHOD_CREATE_COLLECTION = 0;\nconst METHOD_ADD_TO_COLLECTION = 1;\nconst _sfc_main = {\n name: \"NcCollectionList\",\n components: {\n NcCollectionListItem,\n NcAvatar,\n NcSelect\n },\n props: {\n /**\n * Resource type identifier\n */\n type: {\n type: String,\n default: null\n },\n /**\n * Unique id of the resource\n */\n id: {\n type: String,\n default: null\n },\n /**\n * Name of the resource\n */\n name: {\n type: String,\n default: \"\"\n },\n /**\n * Whether the component is active (to start fetch resources)\n */\n isActive: {\n type: Boolean,\n // eslint-disable-next-line vue/no-boolean-default\n default: true\n }\n },\n setup() {\n const {\n storedCollections,\n fetchCollectionsByResource,\n createCollection,\n addResourceToCollection,\n removeResourceFromCollection,\n renameCollection\n } = useCollections();\n const searchCollections = ref([]);\n const search = debounce(function(query, loading) {\n if (query !== \"\") {\n loading(true);\n searchService(query).then((collections) => {\n searchCollections.value = collections;\n }).catch((error) => {\n logger.error(\"Failed to search for collections\", { error });\n }).finally(() => {\n loading(false);\n });\n }\n }, 500);\n return {\n storedCollections,\n fetchCollectionsByResource,\n createCollection,\n addResourceToCollection,\n removeResourceFromCollection,\n renameCollection,\n searchCollections,\n search\n };\n },\n data() {\n return {\n selectIsOpen: false,\n generatingCodes: false,\n codes: void 0,\n value: null,\n model: {},\n collectionsError: {},\n error: null,\n isSelectOpen: false\n };\n },\n computed: {\n collections() {\n return this.storedCollections.filter((collection) => collection.resources.some((resource) => resource && resource.id === String(this.id) && resource.type === this.type));\n },\n placeholder() {\n return this.isSelectOpen ? t(\"Type to search for existing projects\") : t(\"Add to a project\");\n },\n options() {\n const options = [];\n window.OCP.Collaboration.getTypes().sort().forEach((type) => {\n options.push({\n method: METHOD_CREATE_COLLECTION,\n type,\n title: window.OCP.Collaboration.getLabel(type),\n class: window.OCP.Collaboration.getIcon(type),\n action: () => window.OCP.Collaboration.trigger(type)\n });\n });\n for (const index in this.searchCollections) {\n if (!this.collections.find((collection) => collection.id === this.searchCollections[index].id)) {\n options.push({\n method: METHOD_ADD_TO_COLLECTION,\n title: this.searchCollections[index].name,\n collectionId: this.searchCollections[index].id\n });\n }\n }\n return options;\n },\n resourceIdentifier() {\n return {\n resourceType: this.type,\n resourceId: this.id,\n isActive: this.isActive\n };\n }\n },\n watch: {\n resourceIdentifier: {\n deep: true,\n immediate: true,\n handler(resourceIdentifier) {\n if (!resourceIdentifier.isActive || !resourceIdentifier.resourceId || !resourceIdentifier.resourceType) {\n return;\n }\n this.fetchCollectionsByResource(resourceIdentifier);\n }\n }\n },\n methods: {\n t,\n select(selectedOption) {\n if (selectedOption.method === METHOD_CREATE_COLLECTION) {\n selectedOption.action().then((resourceId) => {\n this.createCollection({\n baseResourceType: this.type,\n baseResourceId: this.id,\n resourceType: selectedOption.type,\n resourceId,\n name: this.name\n }).catch((e) => {\n this.setError(t(\"Failed to create a project\"), e);\n });\n }).catch((error) => {\n logger.error(\"No resource selected\", { error });\n });\n }\n if (selectedOption.method === METHOD_ADD_TO_COLLECTION) {\n this.addResourceToCollection({\n collectionId: selectedOption.collectionId,\n resourceType: this.type,\n resourceId: this.id\n }).catch((e) => {\n this.setError(t(\"Failed to add the item to the project\"), e);\n });\n }\n this.value = null;\n },\n showSelect() {\n this.selectIsOpen = true;\n this.$refs.select.$el.focus();\n },\n setError(error, e) {\n logger.error(error, { error: e });\n this.error = error;\n setTimeout(() => {\n this.error = null;\n }, 5e3);\n },\n renameCollectionFromItem({ collectionId, name }) {\n this.renameCollection({ collectionId, name }).catch((error) => {\n logger.error(t(\"Failed to rename the project\"), { error });\n this.collectionsError[collectionId] = t(\"Failed to rename the project\");\n setTimeout(() => {\n this.collectionsError[collectionId] = null;\n }, 5e3);\n });\n }\n }\n};\nvar _sfc_render = function render2() {\n var _vm = this, _c = _vm._self._c;\n return _vm.collections && _vm.type && _vm.id ? _c(\"ul\", { staticClass: \"collection-list\", attrs: { \"id\": \"collection-list\" } }, [_c(\"li\", { on: { \"click\": _vm.showSelect } }, [_vm._m(0), _c(\"div\", { attrs: { \"id\": \"collection-select-container\" } }, [_c(\"NcSelect\", { ref: \"select\", attrs: { \"aria-label-combobox\": _vm.t(\"Add to a project\"), \"options\": _vm.options, \"placeholder\": _vm.placeholder, \"label\": \"title\", \"limit\": 5 }, on: { \"close\": function($event) {\n _vm.isSelectOpen = false;\n }, \"open\": function($event) {\n _vm.isSelectOpen = true;\n }, \"option:selected\": _vm.select, \"search\": _vm.search }, scopedSlots: _vm._u([{ key: \"selected-option\", fn: function(option) {\n return [_c(\"span\", { staticClass: \"option__desc\" }, [_c(\"span\", { staticClass: \"option__title\" }, [_vm._v(_vm._s(option.title))])])];\n } }, { key: \"option\", fn: function(option) {\n return [_c(\"span\", { staticClass: \"option__wrapper\" }, [option.class ? _c(\"span\", { staticClass: \"avatar\", class: option.class }) : option.method !== 2 ? _c(\"NcAvatar\", { attrs: { \"allow-placeholder\": \"\", \"display-name\": option.title } }) : _vm._e(), _c(\"span\", { staticClass: \"option__title\" }, [_vm._v(_vm._s(option.title))])], 1)];\n } }], null, false, 2397208459), model: { value: _vm.value, callback: function($$v) {\n _vm.value = $$v;\n }, expression: \"value\" } }, [_c(\"p\", { staticClass: \"hint\" }, [_vm._v(\" \" + _vm._s(_vm.t(\"Connect items to a project to make them easier to find\")) + \" \")])])], 1)]), _c(\"transition\", { attrs: { \"name\": \"fade\" } }, [_vm.error ? _c(\"li\", { staticClass: \"error\" }, [_vm._v(\" \" + _vm._s(_vm.error) + \" \")]) : _vm._e()]), _vm._l(_vm.collections, function(collection) {\n return _c(\"NcCollectionListItem\", { key: collection.id, attrs: { \"collection\": collection, \"error\": _vm.collectionsError[collection.id] }, on: { \"rename-collection\": _vm.renameCollectionFromItem, \"remove-resource\": _vm.removeResourceFromCollection } });\n })], 2) : _vm._e();\n};\nvar _sfc_staticRenderFns = [function() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"div\", { staticClass: \"avatar\" }, [_c(\"span\", { staticClass: \"icon-projects\" })]);\n}];\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n null,\n \"e1b88947\"\n);\nconst NcCollectionList = __component__.exports;\nexport {\n NcCollectionList as N\n};\n//# sourceMappingURL=NcCollectionList-DOAZ13vO.mjs.map\n","import '../assets/NcDashboardWidget-CodY3evn.css';\nimport { C as Check } from \"./Check-BkThHPH7.mjs\";\nimport { r as register, l as t34, a as t } from \"./_l10n-DVz9Qdzk.mjs\";\nimport { N as NcAvatar } from \"./NcAvatar-DkAX4nqq.mjs\";\nimport { N as NcDashboardWidgetItem } from \"./NcDashboardWidgetItem-2VgB9qj2.mjs\";\nimport NcEmptyContent from \"../Components/NcEmptyContent.mjs\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nregister(t34);\nconst _sfc_main = {\n name: \"NcDashboardWidget\",\n components: {\n NcAvatar,\n NcDashboardWidgetItem,\n NcEmptyContent,\n Check\n },\n props: {\n /**\n * An array containing the items to show (specific structure must be respected,\n * except if you override item rendering in the default slot).\n */\n items: {\n type: Array,\n default: () => {\n return [];\n }\n },\n /**\n * If this is set, a \"show more\" text is displayed on the widget's bottom.\n * It's a link pointing to this URL.\n */\n showMoreUrl: {\n type: String,\n default: \"\"\n },\n /**\n * The text of show more button.\n *\n * Expected to be in the form \"More {itemName} …\"\n */\n showMoreLabel: {\n type: String,\n default: t(\"More items …\")\n },\n /**\n * A boolean to put the widget in a loading state.\n */\n loading: {\n type: Boolean,\n default: false\n },\n /**\n * An object containing context menu entries that will be displayed for each item.\n */\n itemMenu: {\n type: Object,\n default: () => {\n return {};\n }\n },\n /**\n * Whether both the items and the empty content message are shown.\n * Usefull for e.g. showing \"No mentions\" and a list of elements.\n */\n showItemsAndEmptyContent: {\n type: Boolean,\n default: false\n },\n /**\n * The text to show in the empty content area.\n */\n emptyContentMessage: {\n type: String,\n default: \"\"\n },\n /**\n * The text to show in the half empty content area.\n */\n halfEmptyContentMessage: {\n type: String,\n default: \"\"\n }\n },\n computed: {\n // forward menu events to my parent\n handlers() {\n const h = {};\n for (const evName in this.itemMenu) {\n h[evName] = (it) => {\n this.$emit(evName, it);\n };\n }\n return h;\n },\n displayedItems() {\n const nbItems = this.showMoreUrl && this.items.length >= this.maxItemNumber ? this.maxItemNumber - 1 : this.maxItemNumber;\n return this.items.slice(0, nbItems);\n },\n showHalfEmptyContentArea() {\n return this.showItemsAndEmptyContent && this.halfEmptyContentString && this.items.length !== 0;\n },\n halfEmptyContentString() {\n return this.halfEmptyContentMessage || this.emptyContentMessage;\n },\n maxItemNumber() {\n return this.showItemsAndEmptyContent ? 5 : 7;\n },\n showMore() {\n return this.showMoreUrl && this.items.length >= this.maxItemNumber;\n }\n }\n};\nvar _sfc_render = function render() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"div\", { staticClass: \"dashboard-widget\" }, [_vm.showHalfEmptyContentArea ? _c(\"NcEmptyContent\", { staticClass: \"half-screen\", attrs: { \"description\": _vm.halfEmptyContentString }, scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_vm._t(\"halfEmptyContentIcon\", function() {\n return [_c(\"Check\")];\n })];\n }, proxy: true }], null, true) }) : _vm._e(), _c(\"ul\", _vm._l(_vm.displayedItems, function(item) {\n return _c(\"li\", { key: item.id }, [_vm._t(\"default\", function() {\n return [_c(\"NcDashboardWidgetItem\", _vm._g(_vm._b({ attrs: { \"item-menu\": _vm.itemMenu } }, \"NcDashboardWidgetItem\", item, false), _vm.handlers))];\n }, { \"item\": item })], 2);\n }), 0), _vm.loading ? _c(\"div\", _vm._l(7, function(i) {\n return _c(\"div\", { key: i, staticClass: \"item-list__entry\" }, [_c(\"NcAvatar\", { staticClass: \"item-avatar\", attrs: { \"size\": 44 } }), _vm._m(0, true)], 1);\n }), 0) : _vm.items.length === 0 ? _vm._t(\"empty-content\", function() {\n return [_vm.emptyContentMessage ? _c(\"NcEmptyContent\", { attrs: { \"description\": _vm.emptyContentMessage }, scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_vm._t(\"emptyContentIcon\")];\n }, proxy: true }], null, true) }) : _vm._e()];\n }) : _vm.showMore ? _c(\"a\", { staticClass: \"more\", attrs: { \"href\": _vm.showMoreUrl, \"target\": \"_blank\", \"tabindex\": \"0\" } }, [_vm._v(\" \" + _vm._s(_vm.showMoreLabel) + \" \")]) : _vm._e()], 2);\n};\nvar _sfc_staticRenderFns = [function() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"div\", { staticClass: \"item__details\" }, [_c(\"h3\", [_vm._v(\" \")]), _c(\"p\", { staticClass: \"message\" }, [_vm._v(\" \")])]);\n}];\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n null,\n \"bde19bf3\"\n);\nconst NcDashboardWidget = __component__.exports;\nexport {\n NcDashboardWidget as N\n};\n//# sourceMappingURL=NcDashboardWidget-CO1z9VUN.mjs.map\n","!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof exports?exports.EmojiMart=t():e.EmojiMart=t()}(\"undefined\"!=typeof self?self:this,(function(){return function(){var e={537:function(){\"undefined\"!=typeof window&&function(){for(var e=0,t=[\"ms\",\"moz\",\"webkit\",\"o\"],i=0;ie.length)&&(t=e.length);for(var i=0,n=new Array(t);i=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:r}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var o,s=!0,a=!1;return{s:function(){i=i.call(e)},n:function(){var e=i.next();return s=e.done,e},e:function(e){a=!0,o=e},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw o}}}}(Object.getOwnPropertyNames(e));try{for(i.s();!(t=i.n()).done;){var n=t.value,r=e[n];e[n]=r&&\"object\"===u(r)?d(r):r}}catch(e){i.e(e)}finally{i.f()}return Object.freeze(e)}var f,v,p=function(e){if(!e.compressed)return e;for(var t in e.compressed=!1,e.emojis){var i=e.emojis[t];for(var n in h)i[n]=i[h[n]],delete i[h[n]];i.short_names||(i.short_names=[]),i.short_names.unshift(t),i.sheet_x=i.sheet[0],i.sheet_y=i.sheet[1],delete i.sheet,i.text||(i.text=\"\"),i.added_in||(i.added_in=6),i.added_in=i.added_in.toFixed(1),i.search=m(i)}return d(e)},j=[\"+1\",\"grinning\",\"kissing_heart\",\"heart_eyes\",\"laughing\",\"stuck_out_tongue_winking_eye\",\"sweat_smile\",\"joy\",\"scream\",\"disappointed\",\"unamused\",\"weary\",\"sob\",\"sunglasses\",\"heart\",\"hankey\"],g={};function y(){v=!0,f=c.get(\"frequently\")}var w={add:function(e){v||y();var t=e.id;f||(f=g),f[t]||(f[t]=0),f[t]+=1,c.set(\"last\",t),c.set(\"frequently\",f)},get:function(e){if(v||y(),!f){g={};for(var t=[],i=Math.min(e,j.length),n=0;n',custom:'',flags:'',foods:'',nature:'',objects:'',smileys:'',people:'',places:'',recent:'',symbols:''};function b(e,t,i,n,r,o,s,a){var c,u=\"function\"==typeof e?e.options:e;if(t&&(u.render=t,u.staticRenderFns=i,u._compiled=!0),n&&(u.functional=!0),o&&(u._scopeId=\"data-v-\"+o),s?(c=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||\"undefined\"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),r&&r.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(s)},u._ssrRegister=c):r&&(c=a?function(){r.call(this,(u.functional?this.parent:this).$root.$options.shadowRoot)}:r),c)if(u.functional){u._injectStyles=c;var l=u.render;u.render=function(e,t){return c.call(t),l(e,t)}}else{var h=u.beforeCreate;u.beforeCreate=h?[].concat(h,c):[c]}return{exports:e,options:u}}var C=b({props:{i18n:{type:Object,required:!0},color:{type:String},categories:{type:Array,required:!0},activeCategory:{type:Object,default:function(){return{}}}},emits:[\"click\"],created:function(){this.svgs=_}},(function(){var e=this,t=e._self._c;return t(\"div\",{staticClass:\"emoji-mart-anchors\",attrs:{role:\"tablist\"}},e._l(e.categories,(function(i){return t(\"button\",{key:i.id,class:{\"emoji-mart-anchor\":!0,\"emoji-mart-anchor-selected\":i.id==e.activeCategory.id},style:{color:i.id==e.activeCategory.id?e.color:\"\"},attrs:{role:\"tab\",type:\"button\",\"aria-label\":i.name,\"aria-selected\":i.id==e.activeCategory.id,\"data-title\":e.i18n.categories[i.id]},on:{click:function(t){return e.$emit(\"click\",i)}}},[t(\"div\",{attrs:{\"aria-hidden\":\"true\"},domProps:{innerHTML:e._s(e.svgs[i.id])}}),e._v(\" \"),t(\"span\",{staticClass:\"emoji-mart-anchor-bar\",style:{backgroundColor:e.color},attrs:{\"aria-hidden\":\"true\"}})])})),0)}),[],!1,null,null,null),k=C.exports;function E(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function S(e){var t=function(e,t){if(\"object\"!=u(e)||!e)return e;var i=e[Symbol.toPrimitive];if(void 0!==i){var n=i.call(e,\"string\");if(\"object\"!=u(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==u(t)?t:t+\"\"}function x(e,t){for(var i=0;i1114111||Math.floor(s)!=s)throw RangeError(\"Invalid code point: \"+s);s<=65535?i.push(s):(e=55296+((s-=65536)>>10),t=s%1024+56320,i.push(e,t)),(n+1===r||i.length>16384)&&(o+=String.fromCharCode.apply(null,i),i.length=0)}return o};function A(e){var t=e.split(\"-\").map((function(e){return\"0x\".concat(e)}));return P.apply(null,t)}function M(e){return e.reduce((function(e,t){return-1===e.indexOf(t)&&e.push(t),e}),[])}function I(e,t){var i=M(e),n=M(t);return i.filter((function(e){return n.indexOf(e)>=0}))}function F(e,t){var i={};for(var n in e){var r=e[n],o=r;Object.prototype.hasOwnProperty.call(t,n)&&(o=t[n]),\"object\"===u(o)&&(o=F(r,o)),i[n]=o}return i}function z(e,t){var i=\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(!i){if(Array.isArray(e)||(i=function(e,t){if(e){if(\"string\"==typeof e)return L(e,t);var i=Object.prototype.toString.call(e).slice(8,-1);return\"Object\"===i&&e.constructor&&(i=e.constructor.name),\"Map\"===i||\"Set\"===i?Array.from(e):\"Arguments\"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?L(e,t):void 0}}(e))||t&&e&&\"number\"==typeof e.length){i&&(e=i);var n=0,r=function(){};return{s:r,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:r}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var o,s=!0,a=!1;return{s:function(){i=i.call(e)},n:function(){var e=i.next();return s=e.done,e},e:function(e){a=!0,o=e},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw o}}}}function L(e,t){(null==t||t>e.length)&&(t=e.length);for(var i=0,n=new Array(t);i1&&void 0!==arguments[1]?arguments[1]:{},n=i.emojisToShowFilter,r=i.include,o=i.exclude,s=i.custom,a=i.recent,c=i.recentLength,u=void 0===c?20:c;E(this,e),this._data=p(t),this._emojisFilter=n||null,this._include=r||null,this._exclude=o||null,this._custom=s||[],this._recent=a||w.get(u),this._emojis={},this._nativeEmojis={},this._emoticons={},this._categories=[],this._recentCategory={id:\"recent\",name:\"Recent\",emojis:[]},this._customCategory={id:\"custom\",name:\"Custom\",emojis:[]},this._searchIndex={},this.buildIndex(),Object.freeze(this)}),[{key:\"buildIndex\",value:function(){var e=this,t=this._data.categories;if(this._include&&(t=(t=t.filter((function(t){return e._include.includes(t.id)}))).sort((function(t,i){var n=e._include.indexOf(t.id),r=e._include.indexOf(i.id);return nr?1:0}))),t.forEach((function(t){if(e.isCategoryNeeded(t.id)){var i={id:t.id,name:t.name,emojis:[]};t.emojis.forEach((function(t){var n=e.addEmoji(t);n&&i.emojis.push(n)})),i.emojis.length&&e._categories.push(i)}})),this.isCategoryNeeded(\"custom\")){if(this._custom.length>0){var i,n=z(this._custom);try{for(n.s();!(i=n.n()).done;){var r=i.value;this.addCustomEmoji(r)}}catch(e){n.e(e)}finally{n.f()}}this._customCategory.emojis.length&&this._categories.push(this._customCategory)}this.isCategoryNeeded(\"recent\")&&(this._recent.length&&this._recent.map((function(t){var i,n=z(e._customCategory.emojis);try{for(n.s();!(i=n.n()).done;){var r=i.value;if(r.id===t)return void e._recentCategory.emojis.push(r)}}catch(e){n.e(e)}finally{n.f()}e.hasEmoji(t)&&e._recentCategory.emojis.push(e.emoji(t))})),this._recentCategory.emojis.length&&this._categories.unshift(this._recentCategory))}},{key:\"findEmoji\",value:function(e,t){var i=e.match(T);if(i&&(e=i[1],i[2]&&(t=parseInt(i[2],10))),this._data.aliases.hasOwnProperty(e)&&(e=this._data.aliases[e]),this._emojis.hasOwnProperty(e)){var n=this._emojis[e];return t?n.getSkin(t):n}return this._nativeEmojis.hasOwnProperty(e)?this._nativeEmojis[e]:null}},{key:\"categories\",value:function(){return this._categories}},{key:\"emoji\",value:function(e){this._data.aliases.hasOwnProperty(e)&&(e=this._data.aliases[e]);var t=this._emojis[e];if(!t)throw new Error(\"Can not find emoji by id: \"+e);return t}},{key:\"firstEmoji\",value:function(){var e=this._emojis[Object.keys(this._emojis)[0]];if(!e)throw new Error(\"Can not get first emoji\");return e}},{key:\"hasEmoji\",value:function(e){return this._data.aliases.hasOwnProperty(e)&&(e=this._data.aliases[e]),!!this._emojis[e]}},{key:\"nativeEmoji\",value:function(e){return this._nativeEmojis.hasOwnProperty(e)?this._nativeEmojis[e]:null}},{key:\"search\",value:function(e,t){var i=this;if(t||(t=75),!e.length)return null;if(\"-\"==e||\"-1\"==e)return[this.emoji(\"-1\")];var n,r=e.toLowerCase().split(/[\\s|,|\\-|_]+/);r.length>2&&(r=[r[0],r[1]]),n=r.map((function(e){for(var t=i._emojis,n=i._searchIndex,r=0,o=function(){var i=e[s];if(r++,n[i]||(n[i]={}),!(n=n[i]).results){var o={};for(var a in n.results=[],n.emojis={},t){var c=t[a],u=c._data.search,l=e.substr(0,r),h=u.indexOf(l);if(-1!=h){var m=h+1;l==a&&(m=0),n.results.push(c),n.emojis[a]=c,o[a]=m}}n.results.sort((function(e,t){return o[e.id]-o[t.id]}))}t=n.emojis},s=0;s1?I.apply(null,n):n.length?n[0]:[])&&o.length>t&&(o=o.slice(0,t)),o}},{key:\"addCustomEmoji\",value:function(e){var t=Object.assign({},e,{id:e.short_names[0],custom:!0});t.search||(t.search=m(t));var i=new N(t);return this._emojis[i.id]=i,this._customCategory.emojis.push(i),i}},{key:\"addEmoji\",value:function(e){var t=this,i=this._data.emojis[e];if(!this.isEmojiNeeded(i))return!1;var n=new N(i);if(this._emojis[e]=n,n.native&&(this._nativeEmojis[n.native]=n),n._skins)for(var r in n._skins){var o=n._skins[r];o.native&&(this._nativeEmojis[o.native]=o)}return n.emoticons&&n.emoticons.forEach((function(i){t._emoticons[i]||(t._emoticons[i]=e)})),n}},{key:\"isCategoryNeeded\",value:function(e){var t=!this._include||!this._include.length||this._include.indexOf(e)>-1,i=!(!this._exclude||!this._exclude.length)&&this._exclude.indexOf(e)>-1;return!(!t||i)}},{key:\"isEmojiNeeded\",value:function(e){return!this._emojisFilter||this._emojisFilter(e)}}])}(),N=function(){return O((function e(t){if(E(this,e),this._data=Object.assign({},t),this._skins=null,this._data.skin_variations)for(var i in this._skins=[],q){var n=q[i],r=this._data.skin_variations[n],o=Object.assign({},t);for(var s in r)o[s]=r[s];delete o.skin_variations,o.skin_tone=parseInt(i)+1,this._skins.push(new e(o))}for(var a in this._sanitized=D(this._data),this._sanitized)this[a]=this._sanitized[a];this.short_names=this._data.short_names,this.short_name=this._data.short_names[0],Object.freeze(this)}),[{key:\"getSkin\",value:function(e){return e&&\"native\"!=e&&this._skins?this._skins[e-1]:this}},{key:\"getPosition\",value:function(){var e=+(100/60*this._data.sheet_x).toFixed(2),t=+(100/60*this._data.sheet_y).toFixed(2);return\"\".concat(e,\"% \").concat(t,\"%\")}},{key:\"ariaLabel\",value:function(){return[this.native].concat(this.short_names).filter(Boolean).join(\", \")}}])}(),$=function(){return O((function e(t,i,n,r,o,s,a){E(this,e),this._emoji=t,this._native=r,this._skin=i,this._set=n,this._fallback=o,this.canRender=this._canRender(),this.cssClass=this._cssClass(),this.cssStyle=this._cssStyle(a),this.content=this._content(),this.title=!0===s?t.short_name:null,this.ariaLabel=t.ariaLabel(),Object.freeze(this)}),[{key:\"getEmoji\",value:function(){return this._emoji.getSkin(this._skin)}},{key:\"_canRender\",value:function(){return this._isCustom()||this._isNative()||this._hasEmoji()||this._fallback}},{key:\"_cssClass\",value:function(){return[\"emoji-set-\"+this._set,\"emoji-type-\"+this._emojiType()]}},{key:\"_cssStyle\",value:function(e){var t={};return this._isCustom()?t={backgroundImage:\"url(\"+this.getEmoji()._data.imageUrl+\")\",backgroundSize:\"100%\",width:e+\"px\",height:e+\"px\"}:this._hasEmoji()&&!this._isNative()&&(t={backgroundPosition:this.getEmoji().getPosition()}),e&&(t=this._isNative()?Object.assign(t,{fontSize:Math.round(.95*e*10)/10+\"px\"}):Object.assign(t,{width:e+\"px\",height:e+\"px\"})),t}},{key:\"_content\",value:function(){return this._isCustom()?\"\":this._isNative()?this.getEmoji().native:this._hasEmoji()?\"\":this._fallback?this._fallback(this.getEmoji()):null}},{key:\"_isNative\",value:function(){return this._native}},{key:\"_isCustom\",value:function(){return this.getEmoji().custom}},{key:\"_hasEmoji\",value:function(){if(!this.getEmoji()._data)return!1;var e=this.getEmoji()._data[\"has_img_\"+this._set];return void 0===e||e}},{key:\"_emojiType\",value:function(){return this._isCustom()?\"custom\":this._isNative()?\"native\":this._hasEmoji()?\"image\":\"fallback\"}}])}();function D(e){var t=e.name,i=e.short_names,n=e.skin_tone,r=e.skin_variations,o=e.emoticons,s=e.unified,a=e.custom,c=e.imageUrl,u=e.id||i[0],l=\":\".concat(u,\":\");return a?{id:u,name:t,colons:l,emoticons:o,custom:a,imageUrl:c}:(n&&(l+=\":skin-tone-\".concat(n,\":\")),{id:u,name:t,colons:l,emoticons:o,unified:s.toLowerCase(),skin:n||(r?1:null),native:A(s)})}function B(e,t,i){return(t=S(t))in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}var H={native:{type:Boolean,default:!1},tooltip:{type:Boolean,default:!1},fallback:{type:Function},skin:{type:Number,default:1},set:{type:String,default:\"apple\"},emoji:{type:[String,Object],required:!0},size:{type:Number,default:null},tag:{type:String,default:\"span\"}},U={perLine:{type:Number,default:9},maxSearchResults:{type:Number,default:75},emojiSize:{type:Number,default:24},title:{type:String,default:\"Emoji Mart™\"},emoji:{type:String,default:\"department_store\"},color:{type:String,default:\"#ae65c5\"},set:{type:String,default:\"apple\"},skin:{type:Number,default:null},defaultSkin:{type:Number,default:1},native:{type:Boolean,default:!1},emojiTooltip:{type:Boolean,default:!1},autoFocus:{type:Boolean,default:!1},i18n:{type:Object,default:function(){return{}}},showPreview:{type:Boolean,default:!0},showSearch:{type:Boolean,default:!0},showCategories:{type:Boolean,default:!0},showSkinTones:{type:Boolean,default:!0},infiniteScroll:{type:Boolean,default:!0},pickerStyles:{type:Object,default:function(){return{}}}};function V(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function W(e){for(var t=1;t0},emojiObjects:function(){var e=this;return this.emojis.map((function(t){return{emojiObject:t,emojiView:new $(t,e.emojiProps.skin,e.emojiProps.set,e.emojiProps.native,e.emojiProps.fallback,e.emojiProps.emojiTooltip,e.emojiProps.emojiSize)}}))}},components:{Emoji:J}},(function(){var e=this,t=e._self._c;return e.isVisible&&(e.isSearch||e.hasResults)?t(\"section\",{class:{\"emoji-mart-category\":!0,\"emoji-mart-no-results\":!e.hasResults},attrs:{\"aria-label\":e.i18n.categories[e.id]}},[t(\"div\",{staticClass:\"emoji-mart-category-label\"},[t(\"h3\",{staticClass:\"emoji-mart-category-label\"},[e._v(e._s(e.i18n.categories[e.id]))])]),e._v(\" \"),e._l(e.emojiObjects,(function(i){var n=i.emojiObject,r=i.emojiView;return[r.canRender?t(\"button\",{key:n.id,staticClass:\"emoji-mart-emoji\",class:e.activeClass(n),attrs:{\"aria-label\":r.ariaLabel,role:\"option\",\"aria-selected\":\"false\",\"aria-posinset\":\"1\",\"aria-setsize\":\"1812\",type:\"button\",\"data-title\":n.short_name,title:r.title},on:{mouseenter:function(t){e.emojiProps.onEnter(r.getEmoji())},mouseleave:function(t){e.emojiProps.onLeave(r.getEmoji())},click:function(t){e.emojiProps.onClick(r.getEmoji())}}},[t(\"span\",{class:r.cssClass,style:r.cssStyle},[e._v(e._s(r.content))])]):e._e()]})),e._v(\" \"),e.hasResults?e._e():t(\"div\",[t(\"emoji\",{attrs:{data:e.data,emoji:\"sleuth_or_spy\",native:e.emojiProps.native,skin:e.emojiProps.skin,set:e.emojiProps.set}}),e._v(\" \"),t(\"div\",{staticClass:\"emoji-mart-no-results-label\"},[e._v(e._s(e.i18n.notfound))])],1)],2):e._e()}),[],!1,null,null,null).exports,Z=b({props:{skin:{type:Number,required:!0}},emits:[\"change\"],data:function(){return{opened:!1}},methods:{onClick:function(e){this.opened&&e!=this.skin&&this.$emit(\"change\",e),this.opened=!this.opened}}},(function(){var e=this,t=e._self._c;return t(\"div\",{class:{\"emoji-mart-skin-swatches\":!0,\"emoji-mart-skin-swatches-opened\":e.opened}},e._l(6,(function(i){return t(\"span\",{key:i,class:{\"emoji-mart-skin-swatch\":!0,\"emoji-mart-skin-swatch-selected\":e.skin==i}},[t(\"span\",{class:\"emoji-mart-skin emoji-mart-skin-tone-\"+i,on:{click:function(t){return e.onClick(i)}}})])})),0)}),[],!1,null,null,null).exports,G=b({props:{data:{type:Object,required:!0},title:{type:String,required:!0},emoji:{type:[String,Object]},idleEmoji:{type:[String,Object],required:!0},showSkinTones:{type:Boolean,default:!0},emojiProps:{type:Object,required:!0},skinProps:{type:Object,required:!0},onSkinChange:{type:Function,required:!0}},computed:{emojiData:function(){return this.emoji?this.emoji:{}},emojiShortNames:function(){return this.emojiData.short_names},emojiEmoticons:function(){return this.emojiData.emoticons}},components:{Emoji:J,Skins:Z}},(function(){var e=this,t=e._self._c;return t(\"div\",{staticClass:\"emoji-mart-preview\"},[e.emoji?[t(\"div\",{staticClass:\"emoji-mart-preview-emoji\"},[t(\"emoji\",{attrs:{data:e.data,emoji:e.emoji,native:e.emojiProps.native,skin:e.emojiProps.skin,set:e.emojiProps.set}})],1),e._v(\" \"),t(\"div\",{staticClass:\"emoji-mart-preview-data\"},[t(\"div\",{staticClass:\"emoji-mart-preview-name\"},[e._v(e._s(e.emoji.name))]),e._v(\" \"),t(\"div\",{staticClass:\"emoji-mart-preview-shortnames\"},e._l(e.emojiShortNames,(function(i){return t(\"span\",{key:i,staticClass:\"emoji-mart-preview-shortname\"},[e._v(\":\"+e._s(i)+\":\")])})),0),e._v(\" \"),t(\"div\",{staticClass:\"emoji-mart-preview-emoticons\"},e._l(e.emojiEmoticons,(function(i){return t(\"span\",{key:i,staticClass:\"emoji-mart-preview-emoticon\"},[e._v(e._s(i))])})),0)])]:[t(\"div\",{staticClass:\"emoji-mart-preview-emoji\"},[t(\"emoji\",{attrs:{data:e.data,emoji:e.idleEmoji,native:e.emojiProps.native,skin:e.emojiProps.skin,set:e.emojiProps.set}})],1),e._v(\" \"),t(\"div\",{staticClass:\"emoji-mart-preview-data\"},[t(\"span\",{staticClass:\"emoji-mart-title-label\"},[e._v(e._s(e.title))])]),e._v(\" \"),e.showSkinTones?t(\"div\",{staticClass:\"emoji-mart-preview-skins\"},[t(\"skins\",{attrs:{skin:e.skinProps.skin},on:{change:function(t){return e.onSkinChange(t)}}})],1):e._e()]],2)}),[],!1,null,null,null).exports,K=b({props:{data:{type:Object,required:!0},i18n:{type:Object,required:!0},autoFocus:{type:Boolean,default:!1},onSearch:{type:Function,required:!0},onArrowLeft:{type:Function,required:!1},onArrowRight:{type:Function,required:!1},onArrowDown:{type:Function,required:!1},onArrowUp:{type:Function,required:!1},onEnter:{type:Function,required:!1}},emits:[\"search\",\"enter\",\"arrowUp\",\"arrowDown\",\"arrowRight\",\"arrowLeft\"],data:function(){return{value:\"\"}},computed:{emojiIndex:function(){return this.data}},watch:{value:function(){this.$emit(\"search\",this.value)}},methods:{clear:function(){this.value=\"\"}},mounted:function(){var e=this.$el.querySelector(\"input\");this.autoFocus&&e.focus()}},(function(){var e=this,t=e._self._c;return t(\"div\",{staticClass:\"emoji-mart-search\"},[t(\"input\",{directives:[{name:\"model\",rawName:\"v-model\",value:e.value,expression:\"value\"}],attrs:{type:\"text\",placeholder:e.i18n.search,role:\"textbox\",\"aria-autocomplete\":\"list\",\"aria-owns\":\"emoji-mart-list\",\"aria-label\":\"Search for an emoji\",\"aria-describedby\":\"emoji-mart-search-description\"},domProps:{value:e.value},on:{keydown:[function(t){return!t.type.indexOf(\"key\")&&e._k(t.keyCode,\"left\",37,t.key,[\"Left\",\"ArrowLeft\"])||\"button\"in t&&0!==t.button?null:function(t){return e.$emit(\"arrowLeft\",t)}.apply(null,arguments)},function(t){return!t.type.indexOf(\"key\")&&e._k(t.keyCode,\"right\",39,t.key,[\"Right\",\"ArrowRight\"])||\"button\"in t&&2!==t.button?null:function(){return e.$emit(\"arrowRight\")}.apply(null,arguments)},function(t){return!t.type.indexOf(\"key\")&&e._k(t.keyCode,\"down\",40,t.key,[\"Down\",\"ArrowDown\"])?null:function(){return e.$emit(\"arrowDown\")}.apply(null,arguments)},function(t){return!t.type.indexOf(\"key\")&&e._k(t.keyCode,\"up\",38,t.key,[\"Up\",\"ArrowUp\"])?null:function(t){return e.$emit(\"arrowUp\",t)}.apply(null,arguments)},function(t){return!t.type.indexOf(\"key\")&&e._k(t.keyCode,\"enter\",13,t.key,\"Enter\")?null:function(){return e.$emit(\"enter\")}.apply(null,arguments)}],input:function(t){t.target.composing||(e.value=t.target.value)}}}),e._v(\" \"),t(\"span\",{staticClass:\"hidden\",attrs:{id:\"emoji-picker-search-description\"}},[e._v(\"Use the left, right, up and down arrow keys to navigate the emoji search\\n results.\")])])}),[],!1,null,null,null),Q=K.exports;function Y(e,t){(null==t||t>e.length)&&(t=e.length);for(var i=0,n=new Array(t);i0})),this._categories[0].first=!0,Object.freeze(this._categories),this.activeCategory=this._categories[0],this.searchEmojis=null,this.previewEmoji=null,this.previewEmojiCategoryIdx=0,this.previewEmojiIdx=-1}),[{key:\"onScroll\",value:function(){var e=this._vm.$refs.scroll;if(e){for(var t=e.scrollTop,i=this.filteredCategories[0],n=0,r=this.filteredCategories.length;nt)break;i=o}this.activeCategory=i}}},{key:\"allCategories\",get:function(){return this._categories}},{key:\"filteredCategories\",get:function(){return this.searchEmojis?[{id:\"search\",name:\"Search\",emojis:this.searchEmojis}]:this._categories.filter((function(e){return e.emojis.length>0}))}},{key:\"previewEmojiCategory\",get:function(){return this.previewEmojiCategoryIdx>=0?this.filteredCategories[this.previewEmojiCategoryIdx]:null}},{key:\"onAnchorClick\",value:function(e){var t=this;if(!this.searchEmojis){var i=this.filteredCategories.indexOf(e),n=this._vm.getCategoryComponent(i);this._vm.infiniteScroll?function(){if(n){var i=n.$el.offsetTop;e.first&&(i=0),t._vm.$refs.scroll.scrollTop=i}}():this.activeCategory=this.filteredCategories[i]}}},{key:\"onSearch\",value:function(e){var t=this._data.search(e,this.maxSearchResults);this.searchEmojis=t,this.previewEmojiCategoryIdx=0,this.previewEmojiIdx=0,this.updatePreviewEmoji()}},{key:\"onEmojiEnter\",value:function(e){this.previewEmoji=e,this.previewEmojiIdx=-1,this.previewEmojiCategoryIdx=-1}},{key:\"onEmojiLeave\",value:function(e){this.previewEmoji=null}},{key:\"onArrowLeft\",value:function(){this.previewEmojiIdx>0?this.previewEmojiIdx-=1:(this.previewEmojiCategoryIdx-=1,this.previewEmojiCategoryIdx<0?this.previewEmojiCategoryIdx=0:this.previewEmojiIdx=this.filteredCategories[this.previewEmojiCategoryIdx].emojis.length-1),this.updatePreviewEmoji()}},{key:\"onArrowRight\",value:function(){this.previewEmojiIdx=this.filteredCategories.length?this.previewEmojiCategoryIdx=this.filteredCategories.length-1:this.previewEmojiIdx=0),this.updatePreviewEmoji()}},{key:\"onArrowDown\",value:function(){if(-1==this.previewEmojiIdx)return this.onArrowRight();var e=this.filteredCategories[this.previewEmojiCategoryIdx].emojis.length,t=this._perLine;this.previewEmojiIdx+t>e&&(t=e%this._perLine);for(var i=0;i0?this.filteredCategories[this.previewEmojiCategoryIdx-1].emojis.length%this._perLine:0);for(var t=0;tn+t.scrollTop&&(t.scrollTop+=i.offsetHeight),i&&i.offsetTop>> 0;\n var thisArg = arguments[1];\n var value;\n\n for (var i = 0; i < length; i++) {\n value = list[i];\n if (predicate.call(thisArg, value, i, list)) {\n return value\n }\n }\n return undefined\n };\n}\n\nif (window && typeof window.CustomEvent !== \"function\") {\n function CustomEvent$1(event, params) {\n params = params || {\n bubbles: false,\n cancelable: false,\n detail: undefined\n };\n var evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n return evt\n }\n\n if (typeof window.Event !== 'undefined') {\n CustomEvent$1.prototype = window.Event.prototype;\n }\n\n window.CustomEvent = CustomEvent$1;\n}\n\nclass TributeEvents {\n constructor(tribute) {\n this.tribute = tribute;\n this.tribute.events = this;\n }\n\n static keys() {\n return [\n {\n key: 9,\n value: \"TAB\"\n },\n {\n key: 8,\n value: \"DELETE\"\n },\n {\n key: 13,\n value: \"ENTER\"\n },\n {\n key: 27,\n value: \"ESCAPE\"\n },\n {\n key: 32,\n value: \"SPACE\"\n },\n {\n key: 38,\n value: \"UP\"\n },\n {\n key: 40,\n value: \"DOWN\"\n }\n ];\n }\n\n bind(element) {\n element.boundKeydown = this.keydown.bind(element, this);\n element.boundKeyup = this.keyup.bind(element, this);\n element.boundInput = this.input.bind(element, this);\n\n element.addEventListener(\"keydown\", element.boundKeydown, false);\n element.addEventListener(\"keyup\", element.boundKeyup, false);\n element.addEventListener(\"input\", element.boundInput, false);\n }\n\n unbind(element) {\n element.removeEventListener(\"keydown\", element.boundKeydown, false);\n element.removeEventListener(\"keyup\", element.boundKeyup, false);\n element.removeEventListener(\"input\", element.boundInput, false);\n\n delete element.boundKeydown;\n delete element.boundKeyup;\n delete element.boundInput;\n }\n\n keydown(instance, event) {\n if (instance.shouldDeactivate(event)) {\n instance.tribute.isActive = false;\n instance.tribute.hideMenu();\n }\n\n let element = this;\n instance.commandEvent = false;\n\n TributeEvents.keys().forEach(o => {\n if (o.key === event.keyCode) {\n instance.commandEvent = true;\n instance.callbacks()[o.value.toLowerCase()](event, element);\n }\n });\n }\n\n input(instance, event) {\n instance.inputEvent = true;\n instance.keyup.call(this, instance, event);\n }\n\n click(instance, event) {\n let tribute = instance.tribute;\n if (tribute.menu && tribute.menu.contains(event.target)) {\n let li = event.target;\n event.preventDefault();\n event.stopPropagation();\n while (li.nodeName.toLowerCase() !== \"li\") {\n li = li.parentNode;\n if (!li || li === tribute.menu) {\n throw new Error(\"cannot find the
container for the click\");\n }\n }\n tribute.selectItemAtIndex(li.getAttribute(\"data-index\"), event);\n tribute.hideMenu();\n\n // TODO: should fire with externalTrigger and target is outside of menu\n } else if (tribute.current.element && !tribute.current.externalTrigger) {\n tribute.current.externalTrigger = false;\n setTimeout(() => tribute.hideMenu());\n }\n }\n\n keyup(instance, event) {\n if (instance.inputEvent) {\n instance.inputEvent = false;\n }\n instance.updateSelection(this);\n\n if (event.keyCode === 27) return;\n\n if (!instance.tribute.allowSpaces && instance.tribute.hasTrailingSpace) {\n instance.tribute.hasTrailingSpace = false;\n instance.commandEvent = true;\n instance.callbacks()[\"space\"](event, this);\n return;\n }\n\n if (!instance.tribute.isActive) {\n if (instance.tribute.autocompleteMode) {\n instance.callbacks().triggerChar(event, this, \"\");\n } else {\n let keyCode = instance.getKeyCode(instance, this, event);\n\n if (isNaN(keyCode) || !keyCode) return;\n\n let trigger = instance.tribute.triggers().find(trigger => {\n return trigger.charCodeAt(0) === keyCode;\n });\n\n if (typeof trigger !== \"undefined\") {\n instance.callbacks().triggerChar(event, this, trigger);\n }\n }\n }\n\n if (\n instance.tribute.current.mentionText.length <\n instance.tribute.current.collection.menuShowMinLength\n ) {\n return;\n }\n\n if (\n ((instance.tribute.current.trigger ||\n instance.tribute.autocompleteMode) &&\n instance.commandEvent === false) ||\n (instance.tribute.isActive && event.keyCode === 8)\n ) {\n instance.tribute.showMenuFor(this, true);\n }\n }\n\n shouldDeactivate(event) {\n if (!this.tribute.isActive) return false;\n\n if (this.tribute.current.mentionText.length === 0) {\n let eventKeyPressed = false;\n TributeEvents.keys().forEach(o => {\n if (event.keyCode === o.key) eventKeyPressed = true;\n });\n\n return !eventKeyPressed;\n }\n\n return false;\n }\n\n getKeyCode(instance, el, event) {\n let tribute = instance.tribute;\n let info = tribute.range.getTriggerInfo(\n false,\n tribute.hasTrailingSpace,\n true,\n tribute.allowSpaces,\n tribute.autocompleteMode\n );\n\n if (info) {\n return info.mentionTriggerChar.charCodeAt(0);\n } else {\n return false;\n }\n }\n\n updateSelection(el) {\n this.tribute.current.element = el;\n let info = this.tribute.range.getTriggerInfo(\n false,\n this.tribute.hasTrailingSpace,\n true,\n this.tribute.allowSpaces,\n this.tribute.autocompleteMode\n );\n\n if (info) {\n this.tribute.current.selectedPath = info.mentionSelectedPath;\n this.tribute.current.mentionText = info.mentionText;\n this.tribute.current.selectedOffset = info.mentionSelectedOffset;\n }\n }\n\n callbacks() {\n return {\n triggerChar: (e, el, trigger) => {\n let tribute = this.tribute;\n tribute.current.trigger = trigger;\n\n let collectionItem = tribute.collection.find(item => {\n return item.trigger === trigger;\n });\n\n tribute.current.collection = collectionItem;\n\n if (\n tribute.current.mentionText.length >=\n tribute.current.collection.menuShowMinLength &&\n tribute.inputEvent\n ) {\n tribute.showMenuFor(el, true);\n }\n },\n enter: (e, el) => {\n // choose selection\n if (this.tribute.isActive && this.tribute.current.filteredItems) {\n e.preventDefault();\n e.stopPropagation();\n setTimeout(() => {\n this.tribute.selectItemAtIndex(this.tribute.menuSelected, e);\n this.tribute.hideMenu();\n }, 0);\n }\n },\n escape: (e, el) => {\n if (this.tribute.isActive) {\n e.preventDefault();\n e.stopPropagation();\n this.tribute.isActive = false;\n this.tribute.hideMenu();\n }\n },\n tab: (e, el) => {\n // choose first match\n this.callbacks().enter(e, el);\n },\n space: (e, el) => {\n if (this.tribute.isActive) {\n if (this.tribute.spaceSelectsMatch) {\n this.callbacks().enter(e, el);\n } else if (!this.tribute.allowSpaces) {\n e.stopPropagation();\n setTimeout(() => {\n this.tribute.hideMenu();\n this.tribute.isActive = false;\n }, 0);\n }\n }\n },\n up: (e, el) => {\n // navigate up ul\n if (this.tribute.isActive && this.tribute.current.filteredItems) {\n e.preventDefault();\n e.stopPropagation();\n let count = this.tribute.current.filteredItems.length,\n selected = this.tribute.menuSelected;\n\n if (count > selected && selected > 0) {\n this.tribute.menuSelected--;\n this.setActiveLi();\n } else if (selected === 0) {\n this.tribute.menuSelected = count - 1;\n this.setActiveLi();\n this.tribute.menu.scrollTop = this.tribute.menu.scrollHeight;\n }\n }\n },\n down: (e, el) => {\n // navigate down ul\n if (this.tribute.isActive && this.tribute.current.filteredItems) {\n e.preventDefault();\n e.stopPropagation();\n let count = this.tribute.current.filteredItems.length - 1,\n selected = this.tribute.menuSelected;\n\n if (count > selected) {\n this.tribute.menuSelected++;\n this.setActiveLi();\n } else if (count === selected) {\n this.tribute.menuSelected = 0;\n this.setActiveLi();\n this.tribute.menu.scrollTop = 0;\n }\n }\n },\n delete: (e, el) => {\n if (\n this.tribute.isActive &&\n this.tribute.current.mentionText.length < 1\n ) {\n this.tribute.hideMenu();\n } else if (this.tribute.isActive) {\n this.tribute.showMenuFor(el);\n }\n }\n };\n }\n\n setActiveLi(index) {\n let lis = this.tribute.menu.querySelectorAll(\"li\"),\n length = lis.length >>> 0;\n\n if (index) this.tribute.menuSelected = parseInt(index);\n\n for (let i = 0; i < length; i++) {\n let li = lis[i];\n if (i === this.tribute.menuSelected) {\n li.classList.add(this.tribute.current.collection.selectClass);\n\n let liClientRect = li.getBoundingClientRect();\n let menuClientRect = this.tribute.menu.getBoundingClientRect();\n\n if (liClientRect.bottom > menuClientRect.bottom) {\n let scrollDistance = liClientRect.bottom - menuClientRect.bottom;\n this.tribute.menu.scrollTop += scrollDistance;\n } else if (liClientRect.top < menuClientRect.top) {\n let scrollDistance = menuClientRect.top - liClientRect.top;\n this.tribute.menu.scrollTop -= scrollDistance;\n }\n } else {\n li.classList.remove(this.tribute.current.collection.selectClass);\n }\n }\n }\n\n getFullHeight(elem, includeMargin) {\n let height = elem.getBoundingClientRect().height;\n\n if (includeMargin) {\n let style = elem.currentStyle || window.getComputedStyle(elem);\n return (\n height + parseFloat(style.marginTop) + parseFloat(style.marginBottom)\n );\n }\n\n return height;\n }\n}\n\nclass TributeMenuEvents {\n constructor(tribute) {\n this.tribute = tribute;\n this.tribute.menuEvents = this;\n this.menu = this.tribute.menu;\n }\n\n bind(menu) {\n this.menuClickEvent = this.tribute.events.click.bind(null, this);\n this.menuContainerScrollEvent = this.debounce(\n () => {\n if (this.tribute.isActive) {\n this.tribute.showMenuFor(this.tribute.current.element, false);\n }\n },\n 300,\n false\n );\n this.windowResizeEvent = this.debounce(\n () => {\n if (this.tribute.isActive) {\n this.tribute.range.positionMenuAtCaret(true);\n }\n },\n 300,\n false\n );\n\n // fixes IE11 issues with mousedown\n this.tribute.range\n .getDocument()\n .addEventListener(\"MSPointerDown\", this.menuClickEvent, false);\n this.tribute.range\n .getDocument()\n .addEventListener(\"mousedown\", this.menuClickEvent, false);\n window.addEventListener(\"resize\", this.windowResizeEvent);\n\n if (this.menuContainer) {\n this.menuContainer.addEventListener(\n \"scroll\",\n this.menuContainerScrollEvent,\n false\n );\n } else {\n window.addEventListener(\"scroll\", this.menuContainerScrollEvent);\n }\n }\n\n unbind(menu) {\n this.tribute.range\n .getDocument()\n .removeEventListener(\"mousedown\", this.menuClickEvent, false);\n this.tribute.range\n .getDocument()\n .removeEventListener(\"MSPointerDown\", this.menuClickEvent, false);\n window.removeEventListener(\"resize\", this.windowResizeEvent);\n\n if (this.menuContainer) {\n this.menuContainer.removeEventListener(\n \"scroll\",\n this.menuContainerScrollEvent,\n false\n );\n } else {\n window.removeEventListener(\"scroll\", this.menuContainerScrollEvent);\n }\n }\n\n debounce(func, wait, immediate) {\n var timeout;\n return () => {\n var context = this,\n args = arguments;\n var later = () => {\n timeout = null;\n if (!immediate) func.apply(context, args);\n };\n var callNow = immediate && !timeout;\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n if (callNow) func.apply(context, args);\n };\n }\n}\n\n// Thanks to https://github.com/jeff-collins/ment.io\n\nclass TributeRange {\n constructor(tribute) {\n this.tribute = tribute;\n this.tribute.range = this;\n }\n\n getDocument() {\n let iframe;\n if (this.tribute.current.collection) {\n iframe = this.tribute.current.collection.iframe;\n }\n\n if (!iframe) {\n return document\n }\n\n return iframe.contentWindow.document\n }\n\n positionMenuAtCaret(scrollTo) {\n let context = this.tribute.current,\n coordinates;\n\n let info = this.getTriggerInfo(false, this.tribute.hasTrailingSpace, true, this.tribute.allowSpaces, this.tribute.autocompleteMode);\n\n if (typeof info !== 'undefined') {\n\n if(!this.tribute.positionMenu){\n this.tribute.menu.style.cssText = `display: block;`;\n return\n }\n\n if (!this.isContentEditable(context.element)) {\n coordinates = this.getTextAreaOrInputUnderlinePosition(this.tribute.current.element,\n info.mentionPosition);\n }\n else {\n coordinates = this.getContentEditableCaretPosition(info.mentionPosition);\n }\n\n this.tribute.menu.style.cssText = `top: ${coordinates.top}px;\n left: ${coordinates.left}px;\n right: ${coordinates.right}px;\n bottom: ${coordinates.bottom}px;\n position: absolute;\n display: block;`;\n\n if (coordinates.left === 'auto') {\n this.tribute.menu.style.left = 'auto';\n }\n\n if (coordinates.top === 'auto') {\n this.tribute.menu.style.top = 'auto';\n }\n\n if (scrollTo) this.scrollIntoView();\n\n window.setTimeout(() => {\n let menuDimensions = {\n width: this.tribute.menu.offsetWidth,\n height: this.tribute.menu.offsetHeight\n };\n let menuIsOffScreen = this.isMenuOffScreen(coordinates, menuDimensions);\n\n let menuIsOffScreenHorizontally = window.innerWidth > menuDimensions.width && (menuIsOffScreen.left || menuIsOffScreen.right);\n let menuIsOffScreenVertically = window.innerHeight > menuDimensions.height && (menuIsOffScreen.top || menuIsOffScreen.bottom);\n if (menuIsOffScreenHorizontally || menuIsOffScreenVertically) {\n this.tribute.menu.style.cssText = 'display: none';\n this.positionMenuAtCaret(scrollTo);\n }\n }, 0);\n\n } else {\n this.tribute.menu.style.cssText = 'display: none';\n }\n }\n\n get menuContainerIsBody() {\n return this.tribute.menuContainer === document.body || !this.tribute.menuContainer;\n }\n\n\n selectElement(targetElement, path, offset) {\n let range;\n let elem = targetElement;\n\n if (path) {\n for (var i = 0; i < path.length; i++) {\n elem = elem.childNodes[path[i]];\n if (elem === undefined) {\n return\n }\n while (elem.length < offset) {\n offset -= elem.length;\n elem = elem.nextSibling;\n }\n if (elem.childNodes.length === 0 && !elem.length) {\n elem = elem.previousSibling;\n }\n }\n }\n let sel = this.getWindowSelection();\n\n range = this.getDocument().createRange();\n range.setStart(elem, offset);\n range.setEnd(elem, offset);\n range.collapse(true);\n\n try {\n sel.removeAllRanges();\n } catch (error) {}\n\n sel.addRange(range);\n targetElement.focus();\n }\n\n replaceTriggerText(text, requireLeadingSpace, hasTrailingSpace, originalEvent, item) {\n let info = this.getTriggerInfo(true, hasTrailingSpace, requireLeadingSpace, this.tribute.allowSpaces, this.tribute.autocompleteMode);\n\n if (info !== undefined) {\n let context = this.tribute.current;\n let replaceEvent = new CustomEvent('tribute-replaced', {\n detail: {\n item: item,\n instance: context,\n context: info,\n event: originalEvent,\n }\n });\n\n if (!this.isContentEditable(context.element)) {\n let myField = this.tribute.current.element;\n let textSuffix = typeof this.tribute.replaceTextSuffix == 'string'\n ? this.tribute.replaceTextSuffix\n : ' ';\n text += textSuffix;\n let startPos = info.mentionPosition;\n let endPos = info.mentionPosition + info.mentionText.length + textSuffix.length;\n if (!this.tribute.autocompleteMode) {\n endPos += info.mentionTriggerChar.length - 1;\n }\n myField.value = myField.value.substring(0, startPos) + text +\n myField.value.substring(endPos, myField.value.length);\n myField.selectionStart = startPos + text.length;\n myField.selectionEnd = startPos + text.length;\n } else {\n // add a space to the end of the pasted text\n let textSuffix = typeof this.tribute.replaceTextSuffix == 'string'\n ? this.tribute.replaceTextSuffix\n : '\\xA0';\n text += textSuffix;\n let endPos = info.mentionPosition + info.mentionText.length;\n if (!this.tribute.autocompleteMode) {\n endPos += info.mentionTriggerChar.length;\n }\n this.pasteHtml(text, info.mentionPosition, endPos);\n }\n\n context.element.dispatchEvent(new CustomEvent('input', { bubbles: true }));\n context.element.dispatchEvent(replaceEvent);\n }\n }\n\n pasteHtml(html, startPos, endPos) {\n let range, sel;\n sel = this.getWindowSelection();\n range = this.getDocument().createRange();\n range.setStart(sel.anchorNode, startPos);\n range.setEnd(sel.anchorNode, endPos);\n range.deleteContents();\n\n let el = this.getDocument().createElement('div');\n el.innerHTML = html;\n let frag = this.getDocument().createDocumentFragment(),\n node, lastNode;\n while ((node = el.firstChild)) {\n lastNode = frag.appendChild(node);\n }\n range.insertNode(frag);\n\n // Preserve the selection\n if (lastNode) {\n range = range.cloneRange();\n range.setStartAfter(lastNode);\n range.collapse(true);\n sel.removeAllRanges();\n sel.addRange(range);\n }\n }\n\n getWindowSelection() {\n if (this.tribute.collection.iframe) {\n return this.tribute.collection.iframe.contentWindow.getSelection()\n }\n\n return window.getSelection()\n }\n\n getNodePositionInParent(element) {\n if (element.parentNode === null) {\n return 0\n }\n\n for (var i = 0; i < element.parentNode.childNodes.length; i++) {\n let node = element.parentNode.childNodes[i];\n\n if (node === element) {\n return i\n }\n }\n }\n\n getContentEditableSelectedPath(ctx) {\n let sel = this.getWindowSelection();\n let selected = sel.anchorNode;\n let path = [];\n let offset;\n\n if (selected != null) {\n let i;\n let ce = selected.contentEditable;\n while (selected !== null && ce !== 'true') {\n i = this.getNodePositionInParent(selected);\n path.push(i);\n selected = selected.parentNode;\n if (selected !== null) {\n ce = selected.contentEditable;\n }\n }\n path.reverse();\n\n // getRangeAt may not exist, need alternative\n offset = sel.getRangeAt(0).startOffset;\n\n return {\n selected: selected,\n path: path,\n offset: offset\n }\n }\n }\n\n getTextPrecedingCurrentSelection() {\n let context = this.tribute.current,\n text = '';\n\n if (!this.isContentEditable(context.element)) {\n let textComponent = this.tribute.current.element;\n if (textComponent) {\n let startPos = textComponent.selectionStart;\n if (textComponent.value && startPos >= 0) {\n text = textComponent.value.substring(0, startPos);\n }\n }\n\n } else {\n let selectedElem = this.getWindowSelection().anchorNode;\n\n if (selectedElem != null) {\n let workingNodeContent = selectedElem.textContent;\n let selectStartOffset = this.getWindowSelection().getRangeAt(0).startOffset;\n\n if (workingNodeContent && selectStartOffset >= 0) {\n text = workingNodeContent.substring(0, selectStartOffset);\n }\n }\n }\n\n return text\n }\n\n getLastWordInText(text) {\n text = text.replace(/\\u00A0/g, ' '); // https://stackoverflow.com/questions/29850407/how-do-i-replace-unicode-character-u00a0-with-a-space-in-javascript\n let wordsArray = text.split(/\\s+/);\n let worldsCount = wordsArray.length - 1;\n return wordsArray[worldsCount].trim()\n }\n\n getTriggerInfo(menuAlreadyActive, hasTrailingSpace, requireLeadingSpace, allowSpaces, isAutocomplete) {\n let ctx = this.tribute.current;\n let selected, path, offset;\n\n if (!this.isContentEditable(ctx.element)) {\n selected = this.tribute.current.element;\n } else {\n let selectionInfo = this.getContentEditableSelectedPath(ctx);\n\n if (selectionInfo) {\n selected = selectionInfo.selected;\n path = selectionInfo.path;\n offset = selectionInfo.offset;\n }\n }\n\n let effectiveRange = this.getTextPrecedingCurrentSelection();\n let lastWordOfEffectiveRange = this.getLastWordInText(effectiveRange);\n\n if (isAutocomplete) {\n return {\n mentionPosition: effectiveRange.length - lastWordOfEffectiveRange.length,\n mentionText: lastWordOfEffectiveRange,\n mentionSelectedElement: selected,\n mentionSelectedPath: path,\n mentionSelectedOffset: offset\n }\n }\n\n if (effectiveRange !== undefined && effectiveRange !== null) {\n let mostRecentTriggerCharPos = -1;\n let triggerChar;\n\n this.tribute.collection.forEach(config => {\n let c = config.trigger;\n let idx = config.requireLeadingSpace ?\n this.lastIndexWithLeadingSpace(effectiveRange, c) :\n effectiveRange.lastIndexOf(c);\n\n if (idx > mostRecentTriggerCharPos) {\n mostRecentTriggerCharPos = idx;\n triggerChar = c;\n requireLeadingSpace = config.requireLeadingSpace;\n }\n });\n\n if (mostRecentTriggerCharPos >= 0 &&\n (\n mostRecentTriggerCharPos === 0 ||\n !requireLeadingSpace ||\n /[\\xA0\\s]/g.test(\n effectiveRange.substring(\n mostRecentTriggerCharPos - 1,\n mostRecentTriggerCharPos)\n )\n )\n ) {\n let currentTriggerSnippet = effectiveRange.substring(mostRecentTriggerCharPos + triggerChar.length,\n effectiveRange.length);\n\n triggerChar = effectiveRange.substring(mostRecentTriggerCharPos, mostRecentTriggerCharPos + triggerChar.length);\n let firstSnippetChar = currentTriggerSnippet.substring(0, 1);\n let leadingSpace = currentTriggerSnippet.length > 0 &&\n (\n firstSnippetChar === ' ' ||\n firstSnippetChar === '\\xA0'\n );\n if (hasTrailingSpace) {\n currentTriggerSnippet = currentTriggerSnippet.trim();\n }\n\n let regex = allowSpaces ? /[^\\S ]/g : /[\\xA0\\s]/g;\n\n this.tribute.hasTrailingSpace = regex.test(currentTriggerSnippet);\n\n if (!leadingSpace && (menuAlreadyActive || !(regex.test(currentTriggerSnippet)))) {\n return {\n mentionPosition: mostRecentTriggerCharPos,\n mentionText: currentTriggerSnippet,\n mentionSelectedElement: selected,\n mentionSelectedPath: path,\n mentionSelectedOffset: offset,\n mentionTriggerChar: triggerChar\n }\n }\n }\n }\n }\n\n lastIndexWithLeadingSpace (str, trigger) {\n let reversedStr = str.split('').reverse().join('');\n let index = -1;\n\n for (let cidx = 0, len = str.length; cidx < len; cidx++) {\n let firstChar = cidx === str.length - 1;\n let leadingSpace = /\\s/.test(reversedStr[cidx + 1]);\n\n let match = true;\n for (let triggerIdx = trigger.length - 1; triggerIdx >= 0; triggerIdx--) {\n if (trigger[triggerIdx] !== reversedStr[cidx-triggerIdx]) {\n match = false;\n break\n }\n }\n\n if (match && (firstChar || leadingSpace)) {\n index = str.length - 1 - cidx;\n break\n }\n }\n\n return index\n }\n\n isContentEditable(element) {\n return element.nodeName !== 'INPUT' && element.nodeName !== 'TEXTAREA'\n }\n\n isMenuOffScreen(coordinates, menuDimensions) {\n let windowWidth = window.innerWidth;\n let windowHeight = window.innerHeight;\n let doc = document.documentElement;\n let windowLeft = (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0);\n let windowTop = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0);\n\n let menuTop = typeof coordinates.top === 'number' ? coordinates.top : windowTop + windowHeight - coordinates.bottom - menuDimensions.height;\n let menuRight = typeof coordinates.right === 'number' ? coordinates.right : coordinates.left + menuDimensions.width;\n let menuBottom = typeof coordinates.bottom === 'number' ? coordinates.bottom : coordinates.top + menuDimensions.height;\n let menuLeft = typeof coordinates.left === 'number' ? coordinates.left : windowLeft + windowWidth - coordinates.right - menuDimensions.width;\n\n return {\n top: menuTop < Math.floor(windowTop),\n right: menuRight > Math.ceil(windowLeft + windowWidth),\n bottom: menuBottom > Math.ceil(windowTop + windowHeight),\n left: menuLeft < Math.floor(windowLeft)\n }\n }\n\n getMenuDimensions() {\n // Width of the menu depends of its contents and position\n // We must check what its width would be without any obstruction\n // This way, we can achieve good positioning for flipping the menu\n let dimensions = {\n width: null,\n height: null\n };\n\n this.tribute.menu.style.cssText = `top: 0px;\n left: 0px;\n position: fixed;\n display: block;\n visibility; hidden;`;\n dimensions.width = this.tribute.menu.offsetWidth;\n dimensions.height = this.tribute.menu.offsetHeight;\n\n this.tribute.menu.style.cssText = `display: none;`;\n\n return dimensions\n }\n\n getTextAreaOrInputUnderlinePosition(element, position, flipped) {\n let properties = ['direction', 'boxSizing', 'width', 'height', 'overflowX',\n 'overflowY', 'borderTopWidth', 'borderRightWidth',\n 'borderBottomWidth', 'borderLeftWidth', 'paddingTop',\n 'paddingRight', 'paddingBottom', 'paddingLeft',\n 'fontStyle', 'fontVariant', 'fontWeight', 'fontStretch',\n 'fontSize', 'fontSizeAdjust', 'lineHeight', 'fontFamily',\n 'textAlign', 'textTransform', 'textIndent',\n 'textDecoration', 'letterSpacing', 'wordSpacing'\n ];\n\n let isFirefox = (window.mozInnerScreenX !== null);\n\n let div = this.getDocument().createElement('div');\n div.id = 'input-textarea-caret-position-mirror-div';\n this.getDocument().body.appendChild(div);\n\n let style = div.style;\n let computed = window.getComputedStyle ? getComputedStyle(element) : element.currentStyle;\n\n style.whiteSpace = 'pre-wrap';\n if (element.nodeName !== 'INPUT') {\n style.wordWrap = 'break-word';\n }\n\n // position off-screen\n style.position = 'absolute';\n style.visibility = 'hidden';\n\n // transfer the element's properties to the div\n properties.forEach(prop => {\n style[prop] = computed[prop];\n });\n\n if (isFirefox) {\n style.width = `${(parseInt(computed.width) - 2)}px`;\n if (element.scrollHeight > parseInt(computed.height))\n style.overflowY = 'scroll';\n } else {\n style.overflow = 'hidden';\n }\n\n div.textContent = element.value.substring(0, position);\n\n if (element.nodeName === 'INPUT') {\n div.textContent = div.textContent.replace(/\\s/g, ' ');\n }\n\n let span = this.getDocument().createElement('span');\n span.textContent = element.value.substring(position) || '.';\n div.appendChild(span);\n\n let rect = element.getBoundingClientRect();\n let doc = document.documentElement;\n let windowLeft = (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0);\n let windowTop = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0);\n\n let top = 0;\n let left = 0;\n if (this.menuContainerIsBody) {\n top = rect.top;\n left = rect.left;\n }\n\n let coordinates = {\n top: top + windowTop + span.offsetTop + parseInt(computed.borderTopWidth) + parseInt(computed.fontSize) - element.scrollTop,\n left: left + windowLeft + span.offsetLeft + parseInt(computed.borderLeftWidth)\n };\n\n let windowWidth = window.innerWidth;\n let windowHeight = window.innerHeight;\n\n let menuDimensions = this.getMenuDimensions();\n let menuIsOffScreen = this.isMenuOffScreen(coordinates, menuDimensions);\n\n if (menuIsOffScreen.right) {\n coordinates.right = windowWidth - coordinates.left;\n coordinates.left = 'auto';\n }\n\n let parentHeight = this.tribute.menuContainer\n ? this.tribute.menuContainer.offsetHeight\n : this.getDocument().body.offsetHeight;\n\n if (menuIsOffScreen.bottom) {\n let parentRect = this.tribute.menuContainer\n ? this.tribute.menuContainer.getBoundingClientRect()\n : this.getDocument().body.getBoundingClientRect();\n let scrollStillAvailable = parentHeight - (windowHeight - parentRect.top);\n\n coordinates.bottom = scrollStillAvailable + (windowHeight - rect.top - span.offsetTop);\n coordinates.top = 'auto';\n }\n\n menuIsOffScreen = this.isMenuOffScreen(coordinates, menuDimensions);\n if (menuIsOffScreen.left) {\n coordinates.left = windowWidth > menuDimensions.width\n ? windowLeft + windowWidth - menuDimensions.width\n : windowLeft;\n delete coordinates.right;\n }\n if (menuIsOffScreen.top) {\n coordinates.top = windowHeight > menuDimensions.height\n ? windowTop + windowHeight - menuDimensions.height\n : windowTop;\n delete coordinates.bottom;\n }\n\n this.getDocument().body.removeChild(div);\n return coordinates\n }\n\n getContentEditableCaretPosition(selectedNodePosition) {\n let range;\n let sel = this.getWindowSelection();\n\n range = this.getDocument().createRange();\n range.setStart(sel.anchorNode, selectedNodePosition);\n range.setEnd(sel.anchorNode, selectedNodePosition);\n\n range.collapse(false);\n\n let rect = range.getBoundingClientRect();\n let doc = document.documentElement;\n let windowLeft = (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0);\n let windowTop = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0);\n\n let left = rect.left;\n let top = rect.top;\n\n let coordinates = {\n left: left + windowLeft,\n top: top + rect.height + windowTop\n };\n let windowWidth = window.innerWidth;\n let windowHeight = window.innerHeight;\n\n let menuDimensions = this.getMenuDimensions();\n let menuIsOffScreen = this.isMenuOffScreen(coordinates, menuDimensions);\n\n if (menuIsOffScreen.right) {\n coordinates.left = 'auto';\n coordinates.right = windowWidth - rect.left - windowLeft;\n }\n\n let parentHeight = this.tribute.menuContainer\n ? this.tribute.menuContainer.offsetHeight\n : this.getDocument().body.offsetHeight;\n\n if (menuIsOffScreen.bottom) {\n let parentRect = this.tribute.menuContainer\n ? this.tribute.menuContainer.getBoundingClientRect()\n : this.getDocument().body.getBoundingClientRect();\n let scrollStillAvailable = parentHeight - (windowHeight - parentRect.top);\n\n coordinates.top = 'auto';\n coordinates.bottom = scrollStillAvailable + (windowHeight - rect.top);\n }\n\n menuIsOffScreen = this.isMenuOffScreen(coordinates, menuDimensions);\n if (menuIsOffScreen.left) {\n coordinates.left = windowWidth > menuDimensions.width\n ? windowLeft + windowWidth - menuDimensions.width\n : windowLeft;\n delete coordinates.right;\n }\n if (menuIsOffScreen.top) {\n coordinates.top = windowHeight > menuDimensions.height\n ? windowTop + windowHeight - menuDimensions.height\n : windowTop;\n delete coordinates.bottom;\n }\n\n if (!this.menuContainerIsBody) {\n coordinates.left = coordinates.left ? coordinates.left - this.tribute.menuContainer.offsetLeft : coordinates.left;\n coordinates.top = coordinates.top ? coordinates.top - this.tribute.menuContainer.offsetTop : coordinates.top;\n }\n\n return coordinates\n }\n\n scrollIntoView(elem) {\n let reasonableBuffer = 20,\n clientRect;\n let maxScrollDisplacement = 100;\n let e = this.menu;\n\n if (typeof e === 'undefined') return;\n\n while (clientRect === undefined || clientRect.height === 0) {\n clientRect = e.getBoundingClientRect();\n\n if (clientRect.height === 0) {\n e = e.childNodes[0];\n if (e === undefined || !e.getBoundingClientRect) {\n return\n }\n }\n }\n\n let elemTop = clientRect.top;\n let elemBottom = elemTop + clientRect.height;\n\n if (elemTop < 0) {\n window.scrollTo(0, window.pageYOffset + clientRect.top - reasonableBuffer);\n } else if (elemBottom > window.innerHeight) {\n let maxY = window.pageYOffset + clientRect.top - reasonableBuffer;\n\n if (maxY - window.pageYOffset > maxScrollDisplacement) {\n maxY = window.pageYOffset + maxScrollDisplacement;\n }\n\n let targetY = window.pageYOffset - (window.innerHeight - elemBottom);\n\n if (targetY > maxY) {\n targetY = maxY;\n }\n\n window.scrollTo(0, targetY);\n }\n }\n}\n\n// Thanks to https://github.com/mattyork/fuzzy\nclass TributeSearch {\n constructor(tribute) {\n this.tribute = tribute;\n this.tribute.search = this;\n }\n\n simpleFilter(pattern, array) {\n return array.filter(string => {\n return this.test(pattern, string)\n })\n }\n\n test(pattern, string) {\n return this.match(pattern, string) !== null\n }\n\n match(pattern, string, opts) {\n opts = opts || {};\n let len = string.length,\n pre = opts.pre || '',\n post = opts.post || '',\n compareString = opts.caseSensitive && string || string.toLowerCase();\n\n if (opts.skip) {\n return {rendered: string, score: 0}\n }\n\n pattern = opts.caseSensitive && pattern || pattern.toLowerCase();\n\n let patternCache = this.traverse(compareString, pattern, 0, 0, []);\n if (!patternCache) {\n return null\n }\n return {\n rendered: this.render(string, patternCache.cache, pre, post),\n score: patternCache.score\n }\n }\n\n traverse(string, pattern, stringIndex, patternIndex, patternCache) {\n // if the pattern search at end\n if (pattern.length === patternIndex) {\n\n // calculate score and copy the cache containing the indices where it's found\n return {\n score: this.calculateScore(patternCache),\n cache: patternCache.slice()\n }\n }\n\n // if string at end or remaining pattern > remaining string\n if (string.length === stringIndex || pattern.length - patternIndex > string.length - stringIndex) {\n return undefined\n }\n\n let c = pattern[patternIndex];\n let index = string.indexOf(c, stringIndex);\n let best, temp;\n\n while (index > -1) {\n patternCache.push(index);\n temp = this.traverse(string, pattern, index + 1, patternIndex + 1, patternCache);\n patternCache.pop();\n\n // if downstream traversal failed, return best answer so far\n if (!temp) {\n return best\n }\n\n if (!best || best.score < temp.score) {\n best = temp;\n }\n\n index = string.indexOf(c, index + 1);\n }\n\n return best\n }\n\n calculateScore(patternCache) {\n let score = 0;\n let temp = 1;\n\n patternCache.forEach((index, i) => {\n if (i > 0) {\n if (patternCache[i - 1] + 1 === index) {\n temp += temp + 1;\n }\n else {\n temp = 1;\n }\n }\n\n score += temp;\n });\n\n return score\n }\n\n render(string, indices, pre, post) {\n var rendered = string.substring(0, indices[0]);\n\n indices.forEach((index, i) => {\n rendered += pre + string[index] + post +\n string.substring(index + 1, (indices[i + 1]) ? indices[i + 1] : string.length);\n });\n\n return rendered\n }\n\n filter(pattern, arr, opts) {\n opts = opts || {};\n return arr\n .reduce((prev, element, idx, arr) => {\n let str = element;\n\n if (opts.extract) {\n str = opts.extract(element);\n\n if (!str) { // take care of undefineds / nulls / etc.\n str = '';\n }\n }\n\n let rendered = this.match(pattern, str, opts);\n\n if (rendered != null) {\n prev[prev.length] = {\n string: rendered.rendered,\n score: rendered.score,\n index: idx,\n original: element\n };\n }\n\n return prev\n }, [])\n\n .sort((a, b) => {\n let compare = b.score - a.score;\n if (compare) return compare\n return a.index - b.index\n })\n }\n}\n\nclass Tribute {\n constructor({\n values = null,\n iframe = null,\n selectClass = \"highlight\",\n containerClass = \"tribute-container\",\n itemClass = \"\",\n trigger = \"@\",\n autocompleteMode = false,\n selectTemplate = null,\n menuItemTemplate = null,\n lookup = \"key\",\n fillAttr = \"value\",\n collection = null,\n menuContainer = null,\n noMatchTemplate = null,\n requireLeadingSpace = true,\n allowSpaces = false,\n replaceTextSuffix = null,\n positionMenu = true,\n spaceSelectsMatch = false,\n searchOpts = {},\n menuItemLimit = null,\n menuShowMinLength = 0\n }) {\n this.autocompleteMode = autocompleteMode;\n this.menuSelected = 0;\n this.current = {};\n this.inputEvent = false;\n this.isActive = false;\n this.menuContainer = menuContainer;\n this.allowSpaces = allowSpaces;\n this.replaceTextSuffix = replaceTextSuffix;\n this.positionMenu = positionMenu;\n this.hasTrailingSpace = false;\n this.spaceSelectsMatch = spaceSelectsMatch;\n\n if (this.autocompleteMode) {\n trigger = \"\";\n allowSpaces = false;\n }\n\n if (values) {\n this.collection = [\n {\n // symbol that starts the lookup\n trigger: trigger,\n\n // is it wrapped in an iframe\n iframe: iframe,\n\n // class applied to selected item\n selectClass: selectClass,\n\n // class applied to the Container\n containerClass: containerClass,\n\n // class applied to each item\n itemClass: itemClass,\n\n // function called on select that retuns the content to insert\n selectTemplate: (\n selectTemplate || Tribute.defaultSelectTemplate\n ).bind(this),\n\n // function called that returns content for an item\n menuItemTemplate: (\n menuItemTemplate || Tribute.defaultMenuItemTemplate\n ).bind(this),\n\n // function called when menu is empty, disables hiding of menu.\n noMatchTemplate: (t => {\n if (typeof t === \"string\") {\n if (t.trim() === \"\") return null;\n return t;\n }\n if (typeof t === \"function\") {\n return t.bind(this);\n }\n\n return (\n noMatchTemplate ||\n function() {\n return \"
No Match Found!
\";\n }.bind(this)\n );\n })(noMatchTemplate),\n\n // column to search against in the object\n lookup: lookup,\n\n // column that contains the content to insert by default\n fillAttr: fillAttr,\n\n // array of objects or a function returning an array of objects\n values: values,\n\n requireLeadingSpace: requireLeadingSpace,\n\n searchOpts: searchOpts,\n\n menuItemLimit: menuItemLimit,\n\n menuShowMinLength: menuShowMinLength\n }\n ];\n } else if (collection) {\n if (this.autocompleteMode)\n console.warn(\n \"Tribute in autocomplete mode does not work for collections\"\n );\n this.collection = collection.map(item => {\n return {\n trigger: item.trigger || trigger,\n iframe: item.iframe || iframe,\n selectClass: item.selectClass || selectClass,\n containerClass: item.containerClass || containerClass,\n itemClass: item.itemClass || itemClass,\n selectTemplate: (\n item.selectTemplate || Tribute.defaultSelectTemplate\n ).bind(this),\n menuItemTemplate: (\n item.menuItemTemplate || Tribute.defaultMenuItemTemplate\n ).bind(this),\n // function called when menu is empty, disables hiding of menu.\n noMatchTemplate: (t => {\n if (typeof t === \"string\") {\n if (t.trim() === \"\") return null;\n return t;\n }\n if (typeof t === \"function\") {\n return t.bind(this);\n }\n\n return (\n noMatchTemplate ||\n function() {\n return \"
No Match Found!
\";\n }.bind(this)\n );\n })(noMatchTemplate),\n lookup: item.lookup || lookup,\n fillAttr: item.fillAttr || fillAttr,\n values: item.values,\n requireLeadingSpace: item.requireLeadingSpace,\n searchOpts: item.searchOpts || searchOpts,\n menuItemLimit: item.menuItemLimit || menuItemLimit,\n menuShowMinLength: item.menuShowMinLength || menuShowMinLength\n };\n });\n } else {\n throw new Error(\"[Tribute] No collection specified.\");\n }\n\n new TributeRange(this);\n new TributeEvents(this);\n new TributeMenuEvents(this);\n new TributeSearch(this);\n }\n\n get isActive() {\n return this._isActive;\n }\n\n set isActive(val) {\n if (this._isActive != val) {\n this._isActive = val;\n if (this.current.element) {\n let noMatchEvent = new CustomEvent(`tribute-active-${val}`);\n this.current.element.dispatchEvent(noMatchEvent);\n }\n }\n }\n\n static defaultSelectTemplate(item) {\n if (typeof item === \"undefined\")\n return `${this.current.collection.trigger}${this.current.mentionText}`;\n if (this.range.isContentEditable(this.current.element)) {\n return (\n '' +\n (this.current.collection.trigger +\n item.original[this.current.collection.fillAttr]) +\n \"\"\n );\n }\n\n return (\n this.current.collection.trigger +\n item.original[this.current.collection.fillAttr]\n );\n }\n\n static defaultMenuItemTemplate(matchItem) {\n return matchItem.string;\n }\n\n static inputTypes() {\n return [\"TEXTAREA\", \"INPUT\"];\n }\n\n triggers() {\n return this.collection.map(config => {\n return config.trigger;\n });\n }\n\n attach(el) {\n if (!el) {\n throw new Error(\"[Tribute] Must pass in a DOM node or NodeList.\");\n }\n\n // Check if it is a jQuery collection\n if (typeof jQuery !== \"undefined\" && el instanceof jQuery) {\n el = el.get();\n }\n\n // Is el an Array/Array-like object?\n if (\n el.constructor === NodeList ||\n el.constructor === HTMLCollection ||\n el.constructor === Array\n ) {\n let length = el.length;\n for (var i = 0; i < length; ++i) {\n this._attach(el[i]);\n }\n } else {\n this._attach(el);\n }\n }\n\n _attach(el) {\n if (el.hasAttribute(\"data-tribute\")) {\n console.warn(\"Tribute was already bound to \" + el.nodeName);\n }\n\n this.ensureEditable(el);\n this.events.bind(el);\n el.setAttribute(\"data-tribute\", true);\n }\n\n ensureEditable(element) {\n if (Tribute.inputTypes().indexOf(element.nodeName) === -1) {\n if (element.contentEditable) {\n element.contentEditable = true;\n } else {\n throw new Error(\"[Tribute] Cannot bind to \" + element.nodeName);\n }\n }\n }\n\n createMenu(containerClass) {\n let wrapper = this.range.getDocument().createElement(\"div\"),\n ul = this.range.getDocument().createElement(\"ul\");\n wrapper.className = containerClass;\n wrapper.appendChild(ul);\n\n if (this.menuContainer) {\n return this.menuContainer.appendChild(wrapper);\n }\n\n return this.range.getDocument().body.appendChild(wrapper);\n }\n\n showMenuFor(element, scrollTo) {\n // Only proceed if menu isn't already shown for the current element & mentionText\n if (\n this.isActive &&\n this.current.element === element &&\n this.current.mentionText === this.currentMentionTextSnapshot\n ) {\n return;\n }\n this.currentMentionTextSnapshot = this.current.mentionText;\n\n // create the menu if it doesn't exist.\n if (!this.menu) {\n this.menu = this.createMenu(this.current.collection.containerClass);\n element.tributeMenu = this.menu;\n this.menuEvents.bind(this.menu);\n }\n\n this.isActive = true;\n this.menuSelected = 0;\n\n if (!this.current.mentionText) {\n this.current.mentionText = \"\";\n }\n\n const processValues = values => {\n // Tribute may not be active any more by the time the value callback returns\n if (!this.isActive) {\n return;\n }\n\n let items = this.search.filter(this.current.mentionText, values, {\n pre: this.current.collection.searchOpts.pre || \"\",\n post: this.current.collection.searchOpts.post || \"\",\n skip: this.current.collection.searchOpts.skip,\n extract: el => {\n if (typeof this.current.collection.lookup === \"string\") {\n return el[this.current.collection.lookup];\n } else if (typeof this.current.collection.lookup === \"function\") {\n return this.current.collection.lookup(el, this.current.mentionText);\n } else {\n throw new Error(\n \"Invalid lookup attribute, lookup must be string or function.\"\n );\n }\n }\n });\n\n if (this.current.collection.menuItemLimit) {\n items = items.slice(0, this.current.collection.menuItemLimit);\n }\n\n this.current.filteredItems = items;\n\n let ul = this.menu.querySelector(\"ul\");\n\n this.range.positionMenuAtCaret(scrollTo);\n\n if (!items.length) {\n let noMatchEvent = new CustomEvent(\"tribute-no-match\", {\n detail: this.menu\n });\n this.current.element.dispatchEvent(noMatchEvent);\n if (\n (typeof this.current.collection.noMatchTemplate === \"function\" &&\n !this.current.collection.noMatchTemplate()) ||\n !this.current.collection.noMatchTemplate\n ) {\n this.hideMenu();\n } else {\n typeof this.current.collection.noMatchTemplate === \"function\"\n ? (ul.innerHTML = this.current.collection.noMatchTemplate())\n : (ul.innerHTML = this.current.collection.noMatchTemplate);\n }\n\n return;\n }\n\n ul.innerHTML = \"\";\n let fragment = this.range.getDocument().createDocumentFragment();\n\n items.forEach((item, index) => {\n let li = this.range.getDocument().createElement(\"li\");\n li.setAttribute(\"data-index\", index);\n li.className = this.current.collection.itemClass;\n li.addEventListener(\"mousemove\", e => {\n let [li, index] = this._findLiTarget(e.target);\n if (e.movementY !== 0) {\n this.events.setActiveLi(index);\n }\n });\n if (this.menuSelected === index) {\n li.classList.add(this.current.collection.selectClass);\n }\n li.innerHTML = this.current.collection.menuItemTemplate(item);\n fragment.appendChild(li);\n });\n ul.appendChild(fragment);\n };\n\n if (typeof this.current.collection.values === \"function\") {\n this.current.collection.values(this.current.mentionText, processValues);\n } else {\n processValues(this.current.collection.values);\n }\n }\n\n _findLiTarget(el) {\n if (!el) return [];\n const index = el.getAttribute(\"data-index\");\n return !index ? this._findLiTarget(el.parentNode) : [el, index];\n }\n\n showMenuForCollection(element, collectionIndex) {\n if (element !== document.activeElement) {\n this.placeCaretAtEnd(element);\n }\n\n this.current.collection = this.collection[collectionIndex || 0];\n this.current.externalTrigger = true;\n this.current.element = element;\n\n if (element.isContentEditable)\n this.insertTextAtCursor(this.current.collection.trigger);\n else this.insertAtCaret(element, this.current.collection.trigger);\n\n this.showMenuFor(element);\n }\n\n // TODO: make sure this works for inputs/textareas\n placeCaretAtEnd(el) {\n el.focus();\n if (\n typeof window.getSelection != \"undefined\" &&\n typeof document.createRange != \"undefined\"\n ) {\n var range = document.createRange();\n range.selectNodeContents(el);\n range.collapse(false);\n var sel = window.getSelection();\n sel.removeAllRanges();\n sel.addRange(range);\n } else if (typeof document.body.createTextRange != \"undefined\") {\n var textRange = document.body.createTextRange();\n textRange.moveToElementText(el);\n textRange.collapse(false);\n textRange.select();\n }\n }\n\n // for contenteditable\n insertTextAtCursor(text) {\n var sel, range;\n sel = window.getSelection();\n range = sel.getRangeAt(0);\n range.deleteContents();\n var textNode = document.createTextNode(text);\n range.insertNode(textNode);\n range.selectNodeContents(textNode);\n range.collapse(false);\n sel.removeAllRanges();\n sel.addRange(range);\n }\n\n // for regular inputs\n insertAtCaret(textarea, text) {\n var scrollPos = textarea.scrollTop;\n var caretPos = textarea.selectionStart;\n\n var front = textarea.value.substring(0, caretPos);\n var back = textarea.value.substring(\n textarea.selectionEnd,\n textarea.value.length\n );\n textarea.value = front + text + back;\n caretPos = caretPos + text.length;\n textarea.selectionStart = caretPos;\n textarea.selectionEnd = caretPos;\n textarea.focus();\n textarea.scrollTop = scrollPos;\n }\n\n hideMenu() {\n if (this.menu) {\n this.menu.style.cssText = \"display: none;\";\n this.isActive = false;\n this.menuSelected = 0;\n this.current = {};\n }\n }\n\n selectItemAtIndex(index, originalEvent) {\n index = parseInt(index);\n if (typeof index !== \"number\" || isNaN(index)) return;\n let item = this.current.filteredItems[index];\n let content = this.current.collection.selectTemplate(item);\n if (content !== null) this.replaceText(content, originalEvent, item);\n }\n\n replaceText(content, originalEvent, item) {\n this.range.replaceTriggerText(content, true, true, originalEvent, item);\n }\n\n _append(collection, newValues, replace) {\n if (typeof collection.values === \"function\") {\n throw new Error(\"Unable to append to values, as it is a function.\");\n } else if (!replace) {\n collection.values = collection.values.concat(newValues);\n } else {\n collection.values = newValues;\n }\n }\n\n append(collectionIndex, newValues, replace) {\n let index = parseInt(collectionIndex);\n if (typeof index !== \"number\")\n throw new Error(\"please provide an index for the collection to update.\");\n\n let collection = this.collection[index];\n\n this._append(collection, newValues, replace);\n }\n\n appendCurrent(newValues, replace) {\n if (this.isActive) {\n this._append(this.current.collection, newValues, replace);\n } else {\n throw new Error(\n \"No active state. Please use append instead and pass an index.\"\n );\n }\n }\n\n detach(el) {\n if (!el) {\n throw new Error(\"[Tribute] Must pass in a DOM node or NodeList.\");\n }\n\n // Check if it is a jQuery collection\n if (typeof jQuery !== \"undefined\" && el instanceof jQuery) {\n el = el.get();\n }\n\n // Is el an Array/Array-like object?\n if (\n el.constructor === NodeList ||\n el.constructor === HTMLCollection ||\n el.constructor === Array\n ) {\n let length = el.length;\n for (var i = 0; i < length; ++i) {\n this._detach(el[i]);\n }\n } else {\n this._detach(el);\n }\n }\n\n _detach(el) {\n this.events.unbind(el);\n if (el.tributeMenu) {\n this.menuEvents.unbind(el.tributeMenu);\n }\n\n setTimeout(() => {\n el.removeAttribute(\"data-tribute\");\n this.isActive = false;\n if (el.tributeMenu) {\n el.tributeMenu.remove();\n }\n });\n }\n}\n\n/**\n * Tribute.js\n * Native ES6 JavaScript @mention Plugin\n **/\n\nexport default Tribute;\n","import { getBuilder } from \"@nextcloud/browser-storage\";\nimport { EmojiIndex, frequently } from \"emoji-mart-vue-fast\";\nimport data from \"emoji-mart-vue-fast/data/all.json\";\nconst storage = getBuilder(\"nextcloud-vue\").persist(true).build();\nlet emojiIndex;\nvar EmojiSkinTone = /* @__PURE__ */ ((EmojiSkinTone2) => {\n EmojiSkinTone2[EmojiSkinTone2[\"Neutral\"] = 1] = \"Neutral\";\n EmojiSkinTone2[EmojiSkinTone2[\"Light\"] = 2] = \"Light\";\n EmojiSkinTone2[EmojiSkinTone2[\"MediumLight\"] = 3] = \"MediumLight\";\n EmojiSkinTone2[EmojiSkinTone2[\"Medium\"] = 4] = \"Medium\";\n EmojiSkinTone2[EmojiSkinTone2[\"MediumDark\"] = 5] = \"MediumDark\";\n EmojiSkinTone2[EmojiSkinTone2[\"Dark\"] = 6] = \"Dark\";\n return EmojiSkinTone2;\n})(EmojiSkinTone || {});\nfunction emojiSearch(query, maxResults = 10) {\n if (!emojiIndex) {\n emojiIndex = new EmojiIndex(data);\n }\n const currentSkinTone = getCurrentSkinTone();\n let results;\n if (query) {\n results = emojiIndex.search(`:${query}`, maxResults);\n if (results.length < maxResults) {\n results = results.concat(emojiIndex.search(query, maxResults - results.length));\n }\n } else {\n results = frequently.get(maxResults).map((id) => emojiIndex.emoji(id)) || [];\n }\n return results.map((emoji) => emoji.getSkin(currentSkinTone));\n}\nfunction emojiAddRecent(emojiOrEmojiData) {\n let emojiData;\n if (typeof emojiOrEmojiData === \"string\") {\n if (!emojiIndex) {\n emojiIndex = new EmojiIndex(data);\n }\n emojiData = emojiIndex.findEmoji(emojiOrEmojiData);\n } else {\n emojiData = emojiOrEmojiData;\n }\n if (emojiData && \"id\" in emojiData) {\n frequently.add(emojiData);\n }\n}\nfunction getCurrentSkinTone() {\n const skinTone = Number.parseInt(storage.getItem(\"NcEmojiPicker::currentSkinTone\") ?? \"1\");\n return Math.min(\n Math.max(\n skinTone,\n 1\n /* Neutral */\n ),\n 6\n /* Dark */\n );\n}\nfunction setCurrentSkinTone(skinTone) {\n skinTone = Math.min(\n Math.max(\n skinTone,\n 1\n /* Neutral */\n ),\n 6\n /* Dark */\n );\n storage.setItem(\"NcEmojiPicker::currentSkinTone\", skinTone.toString());\n}\nexport {\n EmojiSkinTone as E,\n emojiAddRecent as a,\n emojiSearch as e,\n getCurrentSkinTone as g,\n setCurrentSkinTone as s\n};\n//# sourceMappingURL=emoji-Dtn2mDf7.mjs.map\n","import '../assets/NcEmojiPicker-B-iLLj37.css';\nimport { Picker, Emoji, EmojiIndex } from \"emoji-mart-vue-fast\";\nimport data from \"emoji-mart-vue-fast/data/all.json\";\nimport { isFocusable } from \"tabbable\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nimport { N as NcColorPicker } from \"./NcColorPicker-SlazeVcI.mjs\";\nimport { u as useTrapStackControl } from \"./useTrapStackControl-BnLfCgGU.mjs\";\nimport { s as setCurrentSkinTone, g as getCurrentSkinTone } from \"./emoji-Dtn2mDf7.mjs\";\nimport { r as register, z as t43, A as t36, p as t15, B as t5, a as t } from \"./_l10n-DVz9Qdzk.mjs\";\nimport { C as Color } from \"./colors-Bp0JzIQ4.mjs\";\nimport { N as NcButton } from \"./NcButton-CCWEL9Ci.mjs\";\nimport { N as NcPopover } from \"./NcPopover-UAg26Qdd.mjs\";\nimport { N as NcTextField } from \"./NcTextField-Czr9S6YO.mjs\";\nconst _sfc_main$1 = {\n name: \"CircleIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nvar _sfc_render$1 = function render() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"span\", _vm._b({ staticClass: \"material-design-icon circle-icon\", attrs: { \"aria-hidden\": _vm.title ? null : \"true\", \"aria-label\": _vm.title, \"role\": \"img\" }, on: { \"click\": function($event) {\n return _vm.$emit(\"click\", $event);\n } } }, \"span\", _vm.$attrs, false), [_c(\"svg\", { staticClass: \"material-design-icon__svg\", attrs: { \"fill\": _vm.fillColor, \"width\": _vm.size, \"height\": _vm.size, \"viewBox\": \"0 0 24 24\" } }, [_c(\"path\", { attrs: { \"d\": \"M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z\" } }, [_vm.title ? _c(\"title\", [_vm._v(_vm._s(_vm.title))]) : _vm._e()])])]);\n};\nvar _sfc_staticRenderFns$1 = [];\nvar __component__$1 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$1,\n _sfc_render$1,\n _sfc_staticRenderFns$1,\n false,\n null,\n null\n);\nconst IconCircle = __component__$1.exports;\nregister(t5, t15, t36, t43);\nlet emojiIndex;\nconst i18n = {\n search: t(\"Search emoji\"),\n notfound: t(\"No emoji found\"),\n categories: {\n search: t(\"Search results\"),\n recent: t(\"Frequently used\"),\n smileys: t(\"Smileys & Emotion\"),\n people: t(\"People & Body\"),\n nature: t(\"Animals & Nature\"),\n foods: t(\"Food & Drink\"),\n activity: t(\"Activities\"),\n places: t(\"Travel & Places\"),\n objects: t(\"Objects\"),\n symbols: t(\"Symbols\"),\n flags: t(\"Flags\"),\n custom: t(\"Custom\")\n }\n};\nconst skinTonePalette = [\n new Color(255, 222, 52, t(\"Neutral skin color\")),\n new Color(228, 205, 166, t(\"Light skin tone\")),\n new Color(250, 221, 192, t(\"Medium light skin tone\")),\n new Color(174, 129, 87, t(\"Medium skin tone\")),\n new Color(158, 113, 88, t(\"Medium dark skin tone\")),\n new Color(96, 79, 69, t(\"Dark skin tone\"))\n];\nconst _sfc_main = {\n name: \"NcEmojiPicker\",\n components: {\n Emoji,\n IconCircle,\n NcButton,\n NcColorPicker,\n NcPopover,\n NcTextField,\n Picker\n },\n props: {\n /**\n * The emoji-set\n */\n activeSet: {\n type: String,\n default: \"native\"\n },\n /**\n * Show preview section when hovering emoji\n */\n showPreview: {\n type: Boolean,\n default: false\n },\n /**\n * Allow unselecting the selected emoji\n */\n allowUnselect: {\n type: Boolean,\n default: false\n },\n /**\n * Selected emoji to allow unselecting\n */\n selectedEmoji: {\n type: String,\n default: \"\"\n },\n /**\n * The fallback emoji in the preview section\n */\n previewFallbackEmoji: {\n type: String,\n default: \"grinning\"\n },\n /**\n * The fallback text in the preview section\n */\n previewFallbackName: {\n type: String,\n default: t(\"Pick an emoji\")\n },\n /**\n * Whether to close the emoji picker after picking one\n */\n closeOnSelect: {\n type: Boolean,\n // eslint-disable-next-line vue/no-boolean-default\n default: true\n },\n /**\n * Selector for the popover container\n */\n container: {\n type: [Boolean, String, Object, Element],\n default: \"body\"\n }\n },\n emits: [\n \"select\",\n \"select-data\",\n \"unselect\"\n ],\n setup() {\n if (!emojiIndex) {\n emojiIndex = new EmojiIndex(data);\n }\n return {\n // Non-reactive constants\n emojiIndex,\n skinTonePalette,\n i18n\n };\n },\n data() {\n const currentSkinTone = getCurrentSkinTone();\n return {\n /**\n * The current active color from the skin tone palette\n */\n currentColor: skinTonePalette[currentSkinTone - 1],\n /**\n * The current active skin tone\n *\n * @type {1|2|3|4|5|6}\n */\n currentSkinTone,\n search: \"\",\n open: false\n };\n },\n computed: {\n native() {\n return this.activeSet === \"native\";\n }\n },\n created() {\n useTrapStackControl(() => this.open);\n },\n methods: {\n t,\n clearSearch() {\n this.search = \"\";\n this.$refs.search.focus();\n },\n /**\n * Update the current skin tone by the result of the color picker\n *\n * @param {string} color Color set\n */\n onChangeSkinTone(color) {\n const index = this.skinTonePalette.findIndex((tone) => tone.color.toLowerCase() === color.toLowerCase());\n if (index > -1) {\n this.currentSkinTone = index + 1;\n this.currentColor = this.skinTonePalette[index];\n setCurrentSkinTone(this.currentSkinTone);\n }\n },\n select(emojiObject) {\n this.$emit(\"select\", emojiObject.native);\n this.$emit(\"select-data\", emojiObject);\n if (this.closeOnSelect) {\n this.open = false;\n }\n },\n unselect() {\n this.$emit(\"unselect\");\n },\n afterShow() {\n this.$refs.search.focus();\n },\n afterHide() {\n if (!document.activeElement || this.$refs.picker.$el.contains(document.activeElement) || !isFocusable(document.activeElement)) {\n this.$refs.popover.$el.querySelector('button, [role=\"button\"]')?.focus();\n }\n },\n /**\n * Manually handle Tab navigation skipping emoji buttons.\n * Navigation over emojis is handled by Arrow keys.\n *\n * @param {KeyboardEvent} event - Keyboard event\n */\n handleTabNavigationSkippingEmojis(event) {\n const current = event.target;\n const focusable = Array.from(this.$refs.picker.$el.querySelectorAll(\"button:not(.emoji-mart-emoji), input\"));\n if (!event.shiftKey) {\n const nextNode = focusable.find((node) => current.compareDocumentPosition(node) & Node.DOCUMENT_POSITION_FOLLOWING) || focusable[0];\n nextNode.focus();\n } else {\n const prevNode = focusable.findLast((node) => current.compareDocumentPosition(node) & Node.DOCUMENT_POSITION_PRECEDING) || focusable.at(-1);\n prevNode.focus();\n }\n },\n /**\n * Handle arrow navigation via 's handlers with scroll bug fix\n *\n * @param {'onArrowLeft' | 'onArrowRight' | 'onArrowDown' | 'onArrowUp'} originalHandlerName - Picker's arrow keydown handler name\n * @param {KeyboardEvent} event - Keyboard event\n */\n async callPickerArrowHandlerWithScrollFix(originalHandlerName, event) {\n this.$refs.picker[originalHandlerName](event);\n await this.$nextTick();\n const selectedEmoji = this.$refs.picker.$el.querySelector(\".emoji-mart-emoji-selected\");\n selectedEmoji?.scrollIntoView({\n block: \"center\",\n inline: \"center\"\n });\n }\n }\n};\nvar _sfc_render = function render2() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"NcPopover\", _vm._g(_vm._b({ ref: \"popover\", attrs: {\n \"shown\": _vm.open,\n \"container\": _vm.container,\n \"popup-role\": \"dialog\",\n \"focus-trap\": false\n /* Handled manually to remove emoji buttons from TAB sequence */\n }, on: { \"update:shown\": function($event) {\n _vm.open = $event;\n }, \"after-show\": _vm.afterShow, \"after-hide\": _vm.afterHide }, scopedSlots: _vm._u([{ key: \"trigger\", fn: function(slotProps) {\n return [_vm._t(\"default\", null, null, slotProps)];\n } }], null, true) }, \"NcPopover\", _vm.$attrs, false), _vm.$listeners), [_c(\"div\", { staticClass: \"nc-emoji-picker-container\" }, [_c(\"Picker\", _vm._b({ ref: \"picker\", attrs: { \"color\": \"var(--color-primary-element)\", \"data\": _vm.emojiIndex, \"emoji\": _vm.previewFallbackEmoji, \"i18n\": _vm.i18n, \"native\": _vm.native, \"emoji-size\": 20, \"per-line\": 8, \"picker-styles\": { width: \"320px\" }, \"show-preview\": _vm.showPreview, \"skin\": _vm.currentSkinTone, \"show-skin-tones\": false, \"title\": _vm.previewFallbackName, \"role\": \"dialog\", \"aria-modal\": \"true\", \"aria-label\": _vm.t(\"Emoji picker\") }, on: { \"select\": _vm.select }, nativeOn: { \"keydown\": function($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"tab\", 9, $event.key, \"Tab\")) return null;\n $event.preventDefault();\n return _vm.handleTabNavigationSkippingEmojis.apply(null, arguments);\n } }, scopedSlots: _vm._u([{ key: \"searchTemplate\", fn: function({ onSearch }) {\n return [_c(\"div\", { staticClass: \"search__wrapper\" }, [_c(\"NcTextField\", { ref: \"search\", staticClass: \"search\", attrs: { \"value\": _vm.search, \"label\": _vm.t(\"Search\"), \"label-visible\": true, \"placeholder\": _vm.i18n.search, \"trailing-button-icon\": \"close\", \"trailing-button-label\": _vm.t(\"Clear search\"), \"show-trailing-button\": _vm.search !== \"\" }, on: { \"update:value\": [function($event) {\n _vm.search = $event;\n }, function($event) {\n return onSearch(_vm.search);\n }], \"keydown\": [function($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"left\", 37, $event.key, [\"Left\", \"ArrowLeft\"])) return null;\n if (\"button\" in $event && $event.button !== 0) return null;\n return _vm.callPickerArrowHandlerWithScrollFix(\"onArrowLeft\", $event);\n }, function($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"right\", 39, $event.key, [\"Right\", \"ArrowRight\"])) return null;\n if (\"button\" in $event && $event.button !== 2) return null;\n return _vm.callPickerArrowHandlerWithScrollFix(\"onArrowRight\", $event);\n }, function($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"down\", 40, $event.key, [\"Down\", \"ArrowDown\"])) return null;\n return _vm.callPickerArrowHandlerWithScrollFix(\"onArrowDown\", $event);\n }, function($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"up\", 38, $event.key, [\"Up\", \"ArrowUp\"])) return null;\n return _vm.callPickerArrowHandlerWithScrollFix(\"onArrowUp\", $event);\n }, function($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")) return null;\n return _vm.$refs.picker.onEnter.apply(null, arguments);\n }], \"trailing-button-click\": function($event) {\n _vm.clearSearch();\n onSearch(\"\");\n } } }), _c(\"NcColorPicker\", { attrs: { \"palette-only\": \"\", \"container\": _vm.container, \"palette\": _vm.skinTonePalette, \"value\": _vm.currentColor.color }, on: { \"update:value\": _vm.onChangeSkinTone } }, [_c(\"NcButton\", { attrs: { \"aria-label\": _vm.t(\"Skin tone\"), \"variant\": \"tertiary-no-background\" }, scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_c(\"IconCircle\", { style: { color: _vm.currentColor.color }, attrs: { \"title\": _vm.currentColor.name, \"size\": 20 } })];\n }, proxy: true }], null, true) })], 1)], 1)];\n } }, _vm.allowUnselect && _vm.selectedEmoji ? { key: \"customCategory\", fn: function() {\n return [_c(\"div\", { staticClass: \"emoji-mart-category-label\" }, [_c(\"h3\", { staticClass: \"emoji-mart-category-label\" }, [_vm._v(\" \" + _vm._s(_vm.t(\"Selected\")) + \" \")])]), _c(\"Emoji\", { staticClass: \"emoji-selected\", attrs: { \"data\": _vm.emojiIndex, \"emoji\": _vm.selectedEmoji, \"native\": true, \"size\": 32 }, on: { \"click\": _vm.unselect } }), _c(\"Emoji\", { staticClass: \"emoji-delete\", attrs: { \"data\": _vm.emojiIndex, \"emoji\": \":x:\", \"native\": true, \"size\": 10 }, on: { \"click\": _vm.unselect } })];\n }, proxy: true } : null], null, true) }, \"Picker\", _vm.$attrs, false))], 1)]);\n};\nvar _sfc_staticRenderFns = [];\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n null,\n \"a3ed576d\"\n);\nconst NcEmojiPicker = __component__.exports;\nexport {\n NcEmojiPicker as N\n};\n//# sourceMappingURL=NcEmojiPicker-DNxcceCn.mjs.map\n","import '../assets/NcFilePicker-BokX813z.css';\nimport { defineComponent, ref, computed, nextTick } from \"vue\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nimport { N as NcActionButton } from \"./NcActionButton-K4jUGMlW.mjs\";\nimport NcActionCaption from \"../Components/NcActionCaption.mjs\";\nimport { N as NcActions } from \"./NcActions-DbPerbGE.mjs\";\nimport { N as NcIconSvgWrapper } from \"./NcIconSvgWrapper-Bui9PhAS.mjs\";\nimport NcLoadingIcon from \"../Components/NcLoadingIcon.mjs\";\nimport { r as register, L as t40, a as t } from \"./_l10n-DVz9Qdzk.mjs\";\nconst _sfc_main$3 = {\n name: \"FolderUploadIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nvar _sfc_render$3 = function render() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"span\", _vm._b({ staticClass: \"material-design-icon folder-upload-icon\", attrs: { \"aria-hidden\": _vm.title ? null : \"true\", \"aria-label\": _vm.title, \"role\": \"img\" }, on: { \"click\": function($event) {\n return _vm.$emit(\"click\", $event);\n } } }, \"span\", _vm.$attrs, false), [_c(\"svg\", { staticClass: \"material-design-icon__svg\", attrs: { \"fill\": _vm.fillColor, \"width\": _vm.size, \"height\": _vm.size, \"viewBox\": \"0 0 24 24\" } }, [_c(\"path\", { attrs: { \"d\": \"M20,6A2,2 0 0,1 22,8V18A2,2 0 0,1 20,20H4A2,2 0 0,1 2,18V6A2,2 0 0,1 4,4H10L12,6H20M10.75,13H14V17H16V13H19.25L15,8.75\" } }, [_vm.title ? _c(\"title\", [_vm._v(_vm._s(_vm.title))]) : _vm._e()])])]);\n};\nvar _sfc_staticRenderFns$3 = [];\nvar __component__$3 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$3,\n _sfc_render$3,\n _sfc_staticRenderFns$3,\n false,\n null,\n null\n);\nconst IconFolderUpload = __component__$3.exports;\nconst _sfc_main$2 = {\n name: \"PlusIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nvar _sfc_render$2 = function render2() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"span\", _vm._b({ staticClass: \"material-design-icon plus-icon\", attrs: { \"aria-hidden\": _vm.title ? null : \"true\", \"aria-label\": _vm.title, \"role\": \"img\" }, on: { \"click\": function($event) {\n return _vm.$emit(\"click\", $event);\n } } }, \"span\", _vm.$attrs, false), [_c(\"svg\", { staticClass: \"material-design-icon__svg\", attrs: { \"fill\": _vm.fillColor, \"width\": _vm.size, \"height\": _vm.size, \"viewBox\": \"0 0 24 24\" } }, [_c(\"path\", { attrs: { \"d\": \"M19,13H13V19H11V13H5V11H11V5H13V11H19V13Z\" } }, [_vm.title ? _c(\"title\", [_vm._v(_vm._s(_vm.title))]) : _vm._e()])])]);\n};\nvar _sfc_staticRenderFns$2 = [];\nvar __component__$2 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$2,\n _sfc_render$2,\n _sfc_staticRenderFns$2,\n false,\n null,\n null\n);\nconst IconPlus = __component__$2.exports;\nconst _sfc_main$1 = {\n name: \"UploadIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nvar _sfc_render$1 = function render3() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"span\", _vm._b({ staticClass: \"material-design-icon upload-icon\", attrs: { \"aria-hidden\": _vm.title ? null : \"true\", \"aria-label\": _vm.title, \"role\": \"img\" }, on: { \"click\": function($event) {\n return _vm.$emit(\"click\", $event);\n } } }, \"span\", _vm.$attrs, false), [_c(\"svg\", { staticClass: \"material-design-icon__svg\", attrs: { \"fill\": _vm.fillColor, \"width\": _vm.size, \"height\": _vm.size, \"viewBox\": \"0 0 24 24\" } }, [_c(\"path\", { attrs: { \"d\": \"M9,16V10H5L12,3L19,10H15V16H9M5,20V18H19V20H5Z\" } }, [_vm.title ? _c(\"title\", [_vm._v(_vm._s(_vm.title))]) : _vm._e()])])]);\n};\nvar _sfc_staticRenderFns$1 = [];\nvar __component__$1 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$1,\n _sfc_render$1,\n _sfc_staticRenderFns$1,\n false,\n null,\n null\n);\nconst IconUpload = __component__$1.exports;\nregister(t40);\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcFilePicker\",\n props: {\n accept: { default: void 0 },\n actionCaption: { default: \"\" },\n actions: { default: () => [] },\n directory: { type: Boolean },\n directoryOnly: { type: Boolean },\n disabled: { type: Boolean },\n iconOnly: { type: Boolean },\n label: { default: void 0 },\n loading: { type: Boolean },\n multiple: { type: Boolean },\n variant: { default: \"primary\" }\n },\n emits: [\"pick\"],\n setup(__props, { expose, emit }) {\n const props = __props;\n expose({\n reset\n });\n const formElement = ref(null);\n const inputElement = ref(null);\n const currentLabel = computed(() => {\n if (props.loading) {\n return t(\"Uploading …\");\n } else if (props.label) {\n return props.label;\n } else if (props.directoryOnly) {\n return t(\"Pick folder\");\n }\n return props.multiple ? t(\"Pick files\") : t(\"Pick file\");\n });\n const canUploadFolders = computed(() => {\n return (props.directory || props.directoryOnly) && \"webkitdirectory\" in HTMLInputElement.prototype;\n });\n function triggerPickFiles(uploadFolders) {\n reset();\n if (canUploadFolders.value) {\n inputElement.value.webkitdirectory = uploadFolders;\n }\n nextTick(() => inputElement.value.click());\n }\n function onPick() {\n const files = inputElement.value?.files ? Array.from(inputElement.value.files) : [];\n emit(\"pick\", files);\n }\n function reset() {\n formElement.value.reset();\n }\n return { __sfc: true, props, emit, formElement, inputElement, currentLabel, canUploadFolders, triggerPickFiles, onPick, reset, IconFolderUpload, IconPlus, IconUpload, NcActionButton, NcActionCaption, NcActions, NcIconSvgWrapper, NcLoadingIcon, t };\n }\n});\nconst filePicker = \"_filePicker_KfdBJ\";\nconst style0 = {\n filePicker\n};\nvar _sfc_render = function render4() {\n var _vm = this, _c = _vm._self._c, _setup = _vm._self._setupProxy;\n return _c(\"form\", { ref: \"formElement\", class: _vm.$style.filePicker }, [_c(_setup.NcActions, { attrs: { \"aria-label\": _setup.currentLabel, \"disabled\": _vm.disabled || _vm.loading, \"menu-name\": _vm.iconOnly ? void 0 : _setup.currentLabel, \"force-name\": !_vm.iconOnly, \"variant\": _vm.variant }, scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [!_vm.loading ? _vm._t(\"icon\", function() {\n return [_c(_setup.IconPlus, { attrs: { \"size\": 20 } })];\n }) : _c(_setup.NcLoadingIcon)];\n }, proxy: true }], null, true) }, [_vm.actionCaption ? _c(_setup.NcActionCaption, { attrs: { \"name\": _vm.actionCaption } }) : _vm._e(), !_vm.directoryOnly ? _c(_setup.NcActionButton, { attrs: { \"close-after-click\": \"\" }, on: { \"click\": function($event) {\n return _setup.triggerPickFiles(false);\n } }, scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_c(_setup.IconUpload, { attrs: { \"size\": 20 } })];\n }, proxy: true }], null, false, 3377047136) }, [_vm._v(\" \" + _vm._s(_setup.canUploadFolders || !!_vm.$slots.actions ? _vm.multiple ? _setup.t(\"Upload files\") : _setup.t(\"Upload file\") : _setup.currentLabel) + \" \")]) : _vm._e(), _setup.canUploadFolders ? _c(_setup.NcActionButton, { attrs: { \"close-after-click\": \"\" }, on: { \"click\": function($event) {\n return _setup.triggerPickFiles(true);\n } }, scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_c(_setup.IconFolderUpload, { staticStyle: { \"color\": \"var(--color-primary-element)\" }, attrs: { \"size\": 20 } })];\n }, proxy: true }], null, false, 746052933) }, [_vm._v(\" \" + _vm._s(!_vm.directoryOnly || !!_vm.$slots.actions ? _setup.t(\"Upload folder\") : _setup.currentLabel) + \" \")]) : _vm._e(), _vm._l(_vm.actions, function(group) {\n return [group.caption ? _c(_setup.NcActionCaption, { key: group.caption, attrs: { \"name\": group.caption } }) : _vm._e(), _vm._l(group.actions ?? [group], function(action) {\n return _c(_setup.NcActionButton, { key: action.label, attrs: { \"close-after-click\": \"\" }, on: { \"click\": action.onClick }, scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_c(_setup.NcIconSvgWrapper, { attrs: { \"svg\": action.iconSvg } })];\n }, proxy: true }], null, true) }, [_vm._v(\" \" + _vm._s(action.label) + \" \")]);\n })];\n })], 2), _c(\"input\", { ref: \"inputElement\", staticClass: \"hidden-visually\", attrs: { \"accept\": _vm.accept?.join(\", \"), \"aria-hidden\": \"true\", \"multiple\": _vm.multiple, \"type\": \"file\" }, on: { \"change\": _setup.onPick } }), _vm._t(\"default\")], 2);\n};\nvar _sfc_staticRenderFns = [];\nconst __cssModules = {\n \"$style\": style0\n};\nfunction _sfc_injectStyles(ctx) {\n for (var key in __cssModules) {\n this[key] = __cssModules[key];\n }\n}\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n _sfc_injectStyles,\n null\n);\nconst NcFilePicker = __component__.exports;\nexport {\n NcFilePicker as N\n};\n//# sourceMappingURL=NcFilePicker-Ck9o-ia3.mjs.map\n","import { a as mdiCheck, e as mdiContentCopy } from \"./mdi-DkJglNiS.mjs\";\nimport { toValue } from \"@vueuse/core\";\nimport { ref, computed } from \"vue\";\nimport { r as register, d as t21, a as t } from \"./_l10n-DVz9Qdzk.mjs\";\nregister(t21);\n/*!\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nconst DELAY = 2e3;\nfunction useCopy(content) {\n const isCopied = ref(false);\n const icon = computed(() => isCopied.value ? mdiCheck : mdiContentCopy);\n const altText = computed(() => isCopied.value ? t(\"Copied\") : t(\"Copy to clipboard\"));\n async function copy() {\n if (isCopied.value) {\n return;\n }\n const value = toValue(content);\n try {\n await navigator.clipboard.writeText(value);\n } catch {\n prompt(\"\", value);\n }\n isCopied.value = true;\n setTimeout(() => {\n isCopied.value = false;\n }, DELAY);\n }\n return {\n isCopied,\n copy,\n icon,\n altText\n };\n}\nexport {\n useCopy as u\n};\n//# sourceMappingURL=useCopy-DDDe5RYH.mjs.map\n","import '../assets/NcKbd-8TOrFNAw.css';\nimport { defineComponent, computed } from \"vue\";\nimport { r as register, x as t7, a as t } from \"./_l10n-DVz9Qdzk.mjs\";\nimport { i as isMac } from \"./platform-CC2ecGvV.mjs\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nregister(t7);\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcKbd\",\n props: {\n symbol: { default: void 0 },\n mac: { type: [Boolean, null], default: isMac }\n },\n setup(__props) {\n const props = __props;\n const labels = computed(() => ({\n ArrowUp: \"↑\",\n ArrowDown: \"↓\",\n ArrowLeft: \"←\",\n ArrowRight: \"→\",\n Control: !props.mac ? t(\"Ctrl\") : \"⌘\",\n Alt: !props.mac ? t(\"Alt\") : \"⌥\",\n Shift: !props.mac ? t(\"Shift\") : \"⇧\",\n Enter: !props.mac ? t(\"Enter\") : \"⏎\",\n Tab: !props.mac ? t(\"Tab\") : \"⇥\",\n Delete: !props.mac ? t(\"Delete\") : \"⌫\",\n Escape: !props.mac ? t(\"Escape\") : \"⎋\",\n Space: t(\"Space\")\n // TRANSLATORS: Space key on keyboard\n }));\n const label = computed(() => props.symbol && labels.value[props.symbol] || props.symbol);\n return { __sfc: true, props, labels, label };\n }\n});\nconst kbd = \"_kbd_nUCxj\";\nconst style0 = {\n \"material-design-icon\": \"_material-design-icon_tnSQy\",\n kbd\n};\nvar _sfc_render = function render() {\n var _vm = this, _c = _vm._self._c, _setup = _vm._self._setupProxy;\n return _c(\"kbd\", { class: _vm.$style.kbd }, [_vm._t(\"default\", function() {\n return [_vm._v(\" \" + _vm._s(_setup.label) + \" \")];\n })], 2);\n};\nvar _sfc_staticRenderFns = [];\nconst __cssModules = {\n \"$style\": style0\n};\nfunction _sfc_injectStyles(ctx) {\n for (var key in __cssModules) {\n this[key] = __cssModules[key];\n }\n}\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n _sfc_injectStyles,\n null\n);\nconst NcKbd = __component__.exports;\nexport {\n NcKbd as N\n};\n//# sourceMappingURL=NcKbd-GB8FuSAU.mjs.map\n","import '../assets/NcHotkeyList-CNWXE5jg.css';\nimport { defineComponent } from \"vue\";\nimport { r as register, y as t30, a as t } from \"./_l10n-DVz9Qdzk.mjs\";\nimport { c as createElementId } from \"./createElementId-DhjFt1I9.mjs\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nregister(t30);\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcHotkeyList\",\n props: {\n label: { default: void 0 }\n },\n setup(__props) {\n const labelId = `NcHotkeyList_${createElementId()}`;\n return { __sfc: true, labelId, t };\n }\n});\nconst hotkeyList = \"_hotkeyList_W8veH\";\nconst hotkeyList__heading = \"_hotkeyList__heading_Dfekf\";\nconst style0 = {\n hotkeyList,\n hotkeyList__heading\n};\nvar _sfc_render = function render() {\n var _vm = this, _c = _vm._self._c, _setup = _vm._self._setupProxy;\n return _c(\"div\", { class: _vm.$style.hotkeyList }, [_c(\"div\", { class: [_vm.$style.hotkeyList__heading, { \"hidden-visually\": !_vm.label }], attrs: { \"id\": _setup.labelId } }, [_vm._v(\" \" + _vm._s(_vm.label || _setup.t(\"Keyboard shortcuts\")) + \" \")]), _c(\"ul\", { attrs: { \"aria-labelledby\": _setup.labelId } }, [_vm._t(\"default\")], 2)]);\n};\nvar _sfc_staticRenderFns = [];\nconst __cssModules = {\n \"$style\": style0\n};\nfunction _sfc_injectStyles(ctx) {\n for (var key in __cssModules) {\n this[key] = __cssModules[key];\n }\n}\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n _sfc_injectStyles,\n null\n);\nconst NcHotkeyList = __component__.exports;\nexport {\n NcHotkeyList as N\n};\n//# sourceMappingURL=NcHotkeyList-Co7MBL5U.mjs.map\n","import '../assets/NcRelatedResourcesPanel-CTpqdDL9.css';\nimport axios from \"@nextcloud/axios\";\nimport { generateOcsUrl } from \"@nextcloud/router\";\nimport { r as register, T as t38, a as t, U as t42, V as t9 } from \"./_l10n-DVz9Qdzk.mjs\";\nimport { N as NcButton } from \"./NcButton-CCWEL9Ci.mjs\";\nimport { g as getRoute } from \"./autolink-CeB9uxD9.mjs\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nimport { getCapabilities } from \"@nextcloud/capabilities\";\nimport { C as ChevronDown } from \"./ChevronDown-DFQfzh63.mjs\";\nimport { C as ChevronUp } from \"./ChevronUp-C7Dy9Bph.mjs\";\nimport { N as NcIconSvgWrapper } from \"./NcIconSvgWrapper-Bui9PhAS.mjs\";\nimport { l as logger } from \"./logger-D3RVzcfQ.mjs\";\nregister(t38);\nconst _sfc_main$4 = {\n name: \"NcResource\",\n components: {\n NcButton\n },\n /* eslint vue/require-prop-comment: warn -- TODO: Add a proper doc block about what this props do */\n props: {\n icon: {\n type: String,\n required: true\n },\n name: {\n type: String,\n required: true\n },\n url: {\n type: String,\n required: true\n }\n },\n data() {\n return {\n labelTranslated: t('Open link to \"{resourceName}\"', { resourceName: this.name })\n };\n },\n computed: {\n route() {\n return getRoute(this.$router, this.url);\n }\n },\n methods: {\n t\n }\n};\nvar _sfc_render$4 = function render() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"li\", { staticClass: \"resource\" }, [_c(\"NcButton\", { staticClass: \"resource__button\", attrs: { \"aria-label\": _vm.labelTranslated, \"to\": _vm.route, \"href\": _vm.route ? null : _vm.url, \"variant\": \"tertiary\" }, scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_c(\"div\", { staticClass: \"resource__icon\" }, [_c(\"img\", { attrs: { \"src\": _vm.icon } })])];\n }, proxy: true }]) }, [_vm._v(\" \" + _vm._s(_vm.name) + \" \")])], 1);\n};\nvar _sfc_staticRenderFns$4 = [];\nvar __component__$4 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$4,\n _sfc_render$4,\n _sfc_staticRenderFns$4,\n false,\n null,\n \"9f864ea4\"\n);\nconst NcResource = __component__$4.exports;\nconst _sfc_main$3 = {\n name: \"AccountGroupIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nvar _sfc_render$3 = function render2() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"span\", _vm._b({ staticClass: \"material-design-icon account-group-icon\", attrs: { \"aria-hidden\": _vm.title ? null : \"true\", \"aria-label\": _vm.title, \"role\": \"img\" }, on: { \"click\": function($event) {\n return _vm.$emit(\"click\", $event);\n } } }, \"span\", _vm.$attrs, false), [_c(\"svg\", { staticClass: \"material-design-icon__svg\", attrs: { \"fill\": _vm.fillColor, \"width\": _vm.size, \"height\": _vm.size, \"viewBox\": \"0 0 24 24\" } }, [_c(\"path\", { attrs: { \"d\": \"M12,5.5A3.5,3.5 0 0,1 15.5,9A3.5,3.5 0 0,1 12,12.5A3.5,3.5 0 0,1 8.5,9A3.5,3.5 0 0,1 12,5.5M5,8C5.56,8 6.08,8.15 6.53,8.42C6.38,9.85 6.8,11.27 7.66,12.38C7.16,13.34 6.16,14 5,14A3,3 0 0,1 2,11A3,3 0 0,1 5,8M19,8A3,3 0 0,1 22,11A3,3 0 0,1 19,14C17.84,14 16.84,13.34 16.34,12.38C17.2,11.27 17.62,9.85 17.47,8.42C17.92,8.15 18.44,8 19,8M5.5,18.25C5.5,16.18 8.41,14.5 12,14.5C15.59,14.5 18.5,16.18 18.5,18.25V20H5.5V18.25M0,20V18.5C0,17.11 1.89,15.94 4.45,15.6C3.86,16.28 3.5,17.22 3.5,18.25V20H0M24,20H20.5V18.25C20.5,17.22 20.14,16.28 19.55,15.6C22.11,15.94 24,17.11 24,18.5V20Z\" } }, [_vm.title ? _c(\"title\", [_vm._v(_vm._s(_vm.title))]) : _vm._e()])])]);\n};\nvar _sfc_staticRenderFns$3 = [];\nvar __component__$3 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$3,\n _sfc_render$3,\n _sfc_staticRenderFns$3,\n false,\n null,\n null\n);\nconst AccountGroup = __component__$3.exports;\nconst _sfc_main$2 = {\n name: \"OpenInNewIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nvar _sfc_render$2 = function render3() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"span\", _vm._b({ staticClass: \"material-design-icon open-in-new-icon\", attrs: { \"aria-hidden\": _vm.title ? null : \"true\", \"aria-label\": _vm.title, \"role\": \"img\" }, on: { \"click\": function($event) {\n return _vm.$emit(\"click\", $event);\n } } }, \"span\", _vm.$attrs, false), [_c(\"svg\", { staticClass: \"material-design-icon__svg\", attrs: { \"fill\": _vm.fillColor, \"width\": _vm.size, \"height\": _vm.size, \"viewBox\": \"0 0 24 24\" } }, [_c(\"path\", { attrs: { \"d\": \"M14,3V5H17.59L7.76,14.83L9.17,16.24L19,6.41V10H21V3M19,19H5V5H12V3H5C3.89,3 3,3.9 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V12H19V19Z\" } }, [_vm.title ? _c(\"title\", [_vm._v(_vm._s(_vm.title))]) : _vm._e()])])]);\n};\nvar _sfc_staticRenderFns$2 = [];\nvar __component__$2 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$2,\n _sfc_render$2,\n _sfc_staticRenderFns$2,\n false,\n null,\n null\n);\nconst OpenInNew = __component__$2.exports;\nregister(t42);\nconst teamResourceProviders = getCapabilities()?.circles?.teamResourceProviders ?? [];\nconst _sfc_main$1 = {\n name: \"NcTeamResources\",\n components: {\n AccountGroup,\n ChevronDown,\n ChevronUp,\n OpenInNew,\n NcButton,\n NcIconSvgWrapper\n },\n /* eslint vue/require-prop-comment: warn -- TODO: Add a proper doc block about what this props do */\n props: {\n providerId: {\n type: String,\n default: null\n },\n itemId: {\n type: [String, Number],\n default: null\n }\n },\n data() {\n return {\n appEnabled: OC?.appswebroots?.circles !== void 0 && (OC.config.version.split(\".\")[0] ?? 0) >= 29,\n loading: false,\n teamResources: null,\n teamOpen: []\n };\n },\n computed: {\n isVisible() {\n return !this.loading && this.teamResources?.length > 0;\n },\n teamProviders() {\n return (teamId) => {\n const team = this.teamResources.find((t2) => t2.teamId === teamId);\n return team.resources?.reduce((acc, resource) => {\n if (resource.provider.id === this.providerId && resource.id === String(this.itemId)) {\n return acc;\n }\n if (!acc[resource.provider.id]) {\n acc[resource.provider.id] = resource.provider;\n acc[resource.provider.id].resources = [];\n }\n if (resource.provider.id === this.providerId && resource.id === String(this.itemId)) {\n return acc;\n }\n acc[resource.provider.id].resources.push(resource);\n return acc;\n }, {});\n };\n },\n open() {\n return (teamId) => {\n return this.teamOpen.indexOf(teamId) !== -1;\n };\n }\n },\n watch: {\n providerId() {\n this.fetchTeamResources();\n },\n itemId() {\n this.fetchTeamResources();\n }\n },\n created() {\n this.fetchTeamResources();\n },\n methods: {\n t,\n async fetchTeamResources() {\n if (!teamResourceProviders.includes(this.providerId)) {\n return;\n }\n try {\n this.loading = true;\n const response = await axios.get(generateOcsUrl(`/teams/resources/${this.providerId}/${this.itemId}`));\n this.teamResources = response.data.ocs.data.teams;\n this.teamOpen = [this.teamResources[0]?.teamId];\n } catch (error) {\n this.teamResources = null;\n logger.error(\"Could not fetch Teams resources\", { error });\n } finally {\n this.loading = false;\n }\n },\n toggleOpen(teamId, open) {\n if (open) {\n this.teamOpen.push(teamId);\n } else {\n this.teamOpen.splice(this.teamOpen.indexOf(teamId), 1);\n }\n }\n }\n};\nvar _sfc_render$1 = function render4() {\n var _vm = this, _c = _vm._self._c;\n return _vm.appEnabled && _vm.isVisible ? _c(\"div\", { staticClass: \"team-resources\" }, [_c(\"h5\", { staticClass: \"team-resources__header\" }, [_vm._v(\" \" + _vm._s(_vm.t(\"Related team resources\")) + \" \")]), _vm._l(_vm.teamResources, function(team) {\n return _c(\"details\", { key: team.teamId, staticClass: \"related-team\", attrs: { \"name\": \"Team resources\", \"open\": _vm.open(team.teamId) }, on: { \"toggle\": (event) => _vm.toggleOpen(team.teamId, event.target.open) } }, [_c(\"summary\", { staticClass: \"related-team__header\" }, [_c(\"h5\", { staticClass: \"related-team__name\" }, [_c(\"AccountGroup\", { attrs: { \"size\": 20 } }), _vm._v(\" \" + _vm._s(team.displayName) + \" \")], 1), _c(\"NcButton\", { attrs: { \"aria-label\": _vm.t(\"View team\"), \"href\": team.link, \"title\": _vm.t(\"View team\"), \"variant\": \"tertiary\" }, scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_c(\"OpenInNew\", { attrs: { \"size\": 20 } })];\n }, proxy: true }], null, true) }), _vm.open(team.teamId) ? _c(\"ChevronUp\", { attrs: { \"size\": 20 } }) : _c(\"ChevronDown\", { attrs: { \"size\": 20 } })], 1), _c(\"div\", _vm._l(_vm.teamProviders(team.teamId), function(provider) {\n return _c(\"div\", { key: provider.id, staticClass: \"related-team-provider\" }, [provider.resources.length > 0 ? _c(\"h6\", [_vm._v(\" \" + _vm._s(provider.name) + \" \")]) : _vm._e(), _c(\"ul\", _vm._l(provider.resources, function(resource) {\n return _c(\"li\", { key: resource.url, staticClass: \"related-team-resource\" }, [_c(\"a\", { staticClass: \"related-team-resource__link\", attrs: { \"href\": resource.url } }, [resource.iconEmoji ? _c(\"span\", { staticClass: \"resource__icon\" }, [_vm._v(\" \" + _vm._s(resource.iconEmoji) + \" \")]) : resource.iconSvg ? _c(\"NcIconSvgWrapper\", { staticClass: \"resource__icon\", attrs: { \"svg\": resource.iconSvg, \"size\": 20 } }) : resource.iconURL ? _c(\"span\", { staticClass: \"resource__icon\" }, [_c(\"img\", { attrs: { \"src\": resource.iconURL, \"alt\": \"\" } })]) : _vm._e(), _c(\"span\", { staticClass: \"resource__name\" }, [_vm._v(\" \" + _vm._s(resource.label) + \" \")])], 1)]);\n }), 0)]);\n }), 0)]);\n })], 2) : _vm._e();\n};\nvar _sfc_staticRenderFns$1 = [];\nvar __component__$1 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$1,\n _sfc_render$1,\n _sfc_staticRenderFns$1,\n false,\n null,\n \"e224f6ac\"\n);\nconst NcTeamResources = __component__$1.exports;\nregister(t9);\nconst _sfc_main = {\n name: \"NcRelatedResourcesPanel\",\n components: {\n NcResource,\n NcTeamResources\n },\n /* eslint vue/require-prop-comment: warn -- TODO: Add a proper doc block about what this props do */\n props: {\n /**\n * The provider id implemented with `\\OCA\\RelatedResources\\IRelatedResourceProvider::getProviderId()`\n */\n providerId: {\n type: String,\n default: null\n },\n /**\n * The item id which uniquely identities the e.g. Calendar event, Deck board, file, Talk room, etc.\n */\n itemId: {\n type: [String, Number],\n default: null\n },\n /**\n * Limits to specific resource type. i.e. any provider id implemented with `\\OCA\\RelatedResources\\IRelatedResourceProvider::getProviderId()`\n */\n resourceType: {\n type: String,\n default: \"\"\n },\n /**\n * Set the maximum number of resources to load\n */\n limit: {\n type: Number,\n default: 0\n },\n /**\n * Only used by the files sidebar\n *\n * File info is passed when registered with `OCA.Sharing.ShareTabSections.registerSection()`\n */\n fileInfo: {\n type: Object,\n default: null\n },\n /**\n * Make the header name dynamic\n */\n header: {\n type: String,\n default: t(\"Related resources\")\n },\n description: {\n type: String,\n default: t(\"Anything shared with the same group of people will show up here\")\n },\n /**\n * If this element is used on a primary element set to true for primary styling.\n */\n primary: {\n type: Boolean,\n default: false\n }\n },\n emits: [\n \"has-error\",\n \"has-resources\"\n ],\n data() {\n return {\n appEnabled: OC?.appswebroots?.related_resources !== void 0,\n loading: false,\n error: null,\n resources: []\n };\n },\n computed: {\n isVisible() {\n if (this.loading) {\n return false;\n }\n return this.error ?? this.resources.length > 0;\n },\n subline() {\n if (this.error) {\n return t(\"Error getting related resources. Please contact your system administrator if you have any questions.\");\n }\n return this.description;\n },\n hasResourceInfo() {\n if (this.providerId !== null && this.itemId !== null) {\n return true;\n }\n if (this.fileInfo !== null) {\n return true;\n }\n return false;\n },\n isFiles() {\n return this.fileInfo?.id !== void 0;\n },\n url() {\n let providerId;\n let itemId;\n if (this.isFiles) {\n providerId = \"files\";\n itemId = this.fileInfo.id;\n } else {\n providerId = this.providerId;\n itemId = this.itemId;\n }\n return generateOcsUrl(\"/apps/related_resources/related/{providerId}?itemId={itemId}&resourceType={resourceType}&limit={limit}&format=json\", {\n providerId,\n itemId,\n resourceType: this.resourceType,\n limit: this.limit\n });\n }\n },\n watch: {\n providerId() {\n this.fetchRelatedResources();\n },\n itemId() {\n this.fetchRelatedResources();\n },\n fileInfo() {\n this.fetchRelatedResources();\n },\n error(error) {\n this.$emit(\"has-error\", Boolean(error));\n },\n resources(resources) {\n this.$emit(\"has-resources\", resources.length > 0);\n }\n },\n created() {\n this.fetchRelatedResources();\n },\n methods: {\n t,\n async fetchRelatedResources() {\n if (!this.appEnabled || !this.hasResourceInfo) {\n return;\n }\n this.loading = true;\n this.error = null;\n this.resources = [];\n try {\n const response = await axios.get(this.url);\n this.resources = response.data.ocs?.data;\n } catch (error) {\n this.error = e;\n logger.error(\"Could not fetch related resources\", { error });\n } finally {\n this.loading = false;\n }\n }\n }\n};\nvar _sfc_render = function render5() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"div\", [_c(\"NcTeamResources\", { attrs: { \"provider-id\": _vm.providerId, \"item-id\": _vm.itemId } }), _vm.appEnabled && _vm.isVisible ? _c(\"div\", { staticClass: \"related-resources\" }, [_c(\"div\", { staticClass: \"related-resources__header\" }, [_c(\"h5\", [_vm._v(_vm._s(_vm.header))]), _c(\"p\", [_vm._v(_vm._s(_vm.subline))])]), _vm._l(_vm.resources, function(resource) {\n return _c(\"NcResource\", { key: resource.itemId, staticClass: \"related-resources__entry\", attrs: { \"icon\": resource.icon, \"name\": resource.title, \"url\": resource.url } });\n })], 2) : _vm._e()], 1);\n};\nvar _sfc_staticRenderFns = [];\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n null,\n \"c4e88089\"\n);\nconst NcRelatedResourcesPanel = __component__.exports;\nexport {\n NcRelatedResourcesPanel as N\n};\n//# sourceMappingURL=NcRelatedResourcesPanel-I2ZOB3cx.mjs.map\n","import { l as logger } from \"./logger-D3RVzcfQ.mjs\";\nwindow._vue_richtext_widgets ??= {};\nwindow._registerWidget ??= (id, callback, onDestroy, props) => {\n registerWidget(id, callback, onDestroy, props);\n};\nfunction registerWidget(id, callback, onDestroy = () => {\n}, props) {\n const propsWithDefaults = {\n hasInteractiveView: true,\n fullWidth: false,\n ...props\n };\n if (window._vue_richtext_widgets[id]) {\n logger.error(`[ReferencePicker]: Widget for id ${id} already registered`);\n return;\n }\n window._vue_richtext_widgets[id] = {\n id,\n callback,\n onDestroy,\n ...propsWithDefaults\n };\n}\nfunction renderWidget(el, options) {\n const { richObjectType, richObject, accessible, interactive } = options;\n if (richObjectType === \"open-graph\") {\n return;\n }\n if (!window._vue_richtext_widgets[richObjectType]) {\n logger.error(\"Widget for rich object type \" + richObjectType + \" not registered\");\n return;\n }\n window._vue_richtext_widgets[richObjectType].callback(el, { richObjectType, richObject, accessible, interactive });\n}\nfunction destroyWidget(richObjectType, el) {\n if (richObjectType === \"open-graph\") {\n return;\n }\n if (!window._vue_richtext_widgets[richObjectType]) {\n return;\n }\n window._vue_richtext_widgets[richObjectType].onDestroy(el);\n}\nfunction isWidgetRegistered(id) {\n return !!window._vue_richtext_widgets[id];\n}\nfunction hasInteractiveView(id) {\n return !!window._vue_richtext_widgets[id]?.hasInteractiveView;\n}\nfunction hasFullWidth(id) {\n return !!window._vue_richtext_widgets[id]?.fullWidth;\n}\nwindow._vue_richtext_custom_picker_elements ??= {};\nwindow._registerCustomPickerElement ??= registerCustomPickerElement;\nclass NcCustomPickerRenderResult {\n element;\n object;\n /**\n * @param element - The HTML element\n * @param object - The object\n */\n constructor(element, object) {\n this.element = element;\n this.object = object;\n }\n}\nfunction isCustomPickerElementRegistered(id) {\n return !!window._vue_richtext_custom_picker_elements[id];\n}\nfunction getCustomPickerElementSize(id) {\n const size = window._vue_richtext_custom_picker_elements[id]?.size;\n if ([\"small\", \"normal\", \"large\", \"full\"].includes(size)) {\n return size;\n }\n return null;\n}\nfunction registerCustomPickerElement(id, callback, onDestroy = () => {\n}, size = \"large\") {\n if (window._vue_richtext_custom_picker_elements[id]) {\n logger.error(`Custom reference picker element for id ${id} already registered`);\n return;\n }\n window._vue_richtext_custom_picker_elements[id] = {\n id,\n callback,\n onDestroy,\n size\n };\n}\nfunction renderCustomPickerElement(el, options) {\n const { providerId, accessible } = options;\n if (!window._vue_richtext_custom_picker_elements[providerId]) {\n logger.error(`Custom reference picker element for reference provider ID ${providerId} not registered`);\n return;\n }\n return window._vue_richtext_custom_picker_elements[providerId].callback(el, { providerId, accessible });\n}\nfunction destroyCustomPickerElement(providerId, el, renderResult) {\n if (!window._vue_richtext_custom_picker_elements[providerId]) {\n return;\n }\n window._vue_richtext_custom_picker_elements[providerId].onDestroy(el, renderResult);\n}\nexport {\n NcCustomPickerRenderResult as N,\n renderWidget as a,\n destroyCustomPickerElement as b,\n isCustomPickerElementRegistered as c,\n destroyWidget as d,\n registerCustomPickerElement as e,\n renderCustomPickerElement as f,\n getCustomPickerElementSize as g,\n hasInteractiveView as h,\n isWidgetRegistered as i,\n hasFullWidth as j,\n registerWidget as r\n};\n//# sourceMappingURL=customPickerElements-DLFtgReB.mjs.map\n","import '../assets/referencePickerModal-CGtNx7ew.css';\nimport Vue, { ref, nextTick } from \"vue\";\nimport { emit } from \"@nextcloud/event-bus\";\nimport { A as ArrowLeft } from \"./ArrowLeft-DuT2LZOm.mjs\";\nimport { C as Close } from \"./Close-BtLPUSdO.mjs\";\nimport { d as destroyWidget, a as renderWidget, i as isWidgetRegistered, h as hasInteractiveView, j as hasFullWidth, f as renderCustomPickerElement, b as destroyCustomPickerElement, c as isCustomPickerElementRegistered, g as getCustomPickerElementSize } from \"./customPickerElements-DLFtgReB.mjs\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nimport axios from \"@nextcloud/axios\";\nimport { loadState } from \"@nextcloud/initial-state\";\nimport { imagePath, generateOcsUrl } from \"@nextcloud/router\";\nimport { r as register, Y as t23, a as t, Z as t8, _ as t47, $ as t41, a0 as t24, z as t43, a1 as t31, m as t18, a2 as t12 } from \"./_l10n-DVz9Qdzk.mjs\";\nimport { l as logger } from \"./logger-D3RVzcfQ.mjs\";\nimport NcEmptyContent from \"../Components/NcEmptyContent.mjs\";\nimport { N as NcHighlight } from \"./index-CxTT94_h.mjs\";\nimport { N as NcSelect } from \"./NcSelect-CHc1QupB.mjs\";\nimport { useElementSize, useIntersectionObserver } from \"@vueuse/core\";\nimport { RouterLink } from \"vue-router\";\nimport { N as NcButton } from \"./NcButton-CCWEL9Ci.mjs\";\nimport { g as getRoute } from \"./autolink-CeB9uxD9.mjs\";\nimport NcLoadingIcon from \"../Components/NcLoadingIcon.mjs\";\nimport { N as NcTextField } from \"./NcTextField-Czr9S6YO.mjs\";\nimport { D as DotsHorizontalIcon } from \"./NcActions-DbPerbGE.mjs\";\nimport NcModal from \"../Components/NcModal.mjs\";\nregister(t23);\nconst IDLE_TIMEOUT = 3 * 60 * 1e3;\nconst _sfc_main$8 = {\n name: \"NcReferenceWidget\",\n components: {\n NcButton\n },\n /* eslint vue/require-prop-comment: warn -- TODO: Add a proper doc block about what this props do */\n props: {\n reference: {\n type: Object,\n required: true\n },\n interactive: {\n type: Boolean,\n // eslint-disable-next-line vue/no-boolean-default\n default: true\n },\n interactiveOptIn: {\n type: Boolean,\n default: false\n }\n },\n setup() {\n const isVisible = ref(false);\n const widgetRoot = ref();\n const { width } = useElementSize(widgetRoot);\n useIntersectionObserver(widgetRoot, ([entry]) => {\n nextTick(() => {\n isVisible.value = entry.isIntersecting;\n });\n });\n return {\n width,\n isVisible,\n widgetRoot\n };\n },\n data() {\n return {\n showInteractive: false,\n rendered: false,\n idleTimeout: null\n };\n },\n computed: {\n isInteractive() {\n return !this.interactiveOptIn && this.interactive || this.showInteractive;\n },\n hasFullWidth() {\n return hasFullWidth(this.reference.richObjectType);\n },\n hasCustomWidget() {\n return isWidgetRegistered(this.reference.richObjectType);\n },\n hasInteractiveView() {\n return isWidgetRegistered(this.reference.richObjectType) && hasInteractiveView(this.reference.richObjectType);\n },\n noAccess() {\n return this.reference && !this.reference.accessible;\n },\n descriptionStyle() {\n if (this.numberOfLines === 0) {\n return {\n display: \"none\"\n };\n }\n const lineClamp = this.numberOfLines;\n return {\n lineClamp,\n webkitLineClamp: lineClamp\n };\n },\n numberOfLines() {\n const lineCountOffsets = [450, 550, 650, Infinity];\n return lineCountOffsets.findIndex((max) => this.width < max);\n },\n compactLink() {\n const link = this.reference.openGraphObject.link;\n if (!link) {\n return \"\";\n }\n if (link.startsWith(\"https://\")) {\n return link.substring(8);\n }\n if (link.startsWith(\"http://\")) {\n return link.substring(7);\n }\n return link;\n },\n route() {\n return getRoute(this.$router, this.reference.openGraphObject.link);\n },\n referenceWidgetLinkComponent() {\n return this.route ? RouterLink : \"a\";\n },\n referenceWidgetLinkProps() {\n return this.route ? { to: this.route } : { href: this.reference.openGraphObject.link, target: \"_blank\" };\n }\n },\n watch: {\n isVisible: {\n handler(val) {\n if (!val) {\n this.idleTimeout = setTimeout(() => {\n if (!this.isVisible) {\n this.destroyWidget();\n }\n }, IDLE_TIMEOUT);\n return;\n }\n if (this.idleTimeout) {\n clearTimeout(this.idleTimeout);\n this.idleTimeout = null;\n }\n if (!this.rendered) {\n this.renderWidget();\n }\n },\n immediate: true\n }\n },\n beforeDestroy() {\n this.destroyWidget();\n },\n methods: {\n t,\n enableInteractive() {\n this.showInteractive = true;\n this.renderWidget();\n },\n renderWidget() {\n if (!this.$refs.customWidget) {\n return;\n }\n if (this?.reference?.richObjectType === \"open-graph\") {\n return;\n }\n this.$refs.customWidget.innerHTML = \"\";\n const widget = document.createElement(\"div\");\n widget.style = \"width: 100%;\";\n this.$refs.customWidget.appendChild(widget);\n this.$nextTick(() => {\n renderWidget(widget, {\n ...this.reference,\n interactive: this.isInteractive\n });\n this.rendered = true;\n });\n },\n destroyWidget() {\n if (this.rendered) {\n destroyWidget(this.reference.richObjectType, this.$el);\n this.rendered = false;\n }\n }\n }\n};\nvar _sfc_render$8 = function render() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"div\", { ref: \"widgetRoot\", class: { \"toggle-interactive\": _vm.hasInteractiveView && !_vm.isInteractive } }, [_vm.reference && _vm.hasCustomWidget ? _c(\"div\", { ref: \"customWidget\", staticClass: \"widget-custom\", class: { \"full-width\": _vm.hasFullWidth } }) : !_vm.noAccess && _vm.reference && _vm.reference.openGraphObject && !_vm.hasCustomWidget ? _c(_vm.referenceWidgetLinkComponent, _vm._b({ tag: \"component\", staticClass: \"widget-default\", attrs: { \"rel\": \"noopener noreferrer\" } }, \"component\", _vm.referenceWidgetLinkProps, false), [_vm.reference.openGraphObject.thumb ? _c(\"img\", { staticClass: \"widget-default--image\", attrs: { \"src\": _vm.reference.openGraphObject.thumb } }) : _vm._e(), _c(\"div\", { staticClass: \"widget-default--details\" }, [_c(\"p\", { staticClass: \"widget-default--name\" }, [_vm._v(\" \" + _vm._s(_vm.reference.openGraphObject.name) + \" \")]), _c(\"p\", { staticClass: \"widget-default--description\", style: _vm.descriptionStyle }, [_vm._v(\" \" + _vm._s(_vm.reference.openGraphObject.description) + \" \")]), _c(\"p\", { staticClass: \"widget-default--link\" }, [_vm._v(\" \" + _vm._s(_vm.compactLink) + \" \")])])]) : _vm._e(), _vm.interactiveOptIn && _vm.hasInteractiveView && !_vm.isInteractive ? _c(\"NcButton\", { staticClass: \"toggle-interactive--button\", on: { \"click\": _vm.enableInteractive } }, [_vm._v(\" \" + _vm._s(_vm.t(\"Enable interactive view\")) + \" \")]) : _vm._e()], 1);\n};\nvar _sfc_staticRenderFns$8 = [];\nvar __component__$8 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$8,\n _sfc_render$8,\n _sfc_staticRenderFns$8,\n false,\n null,\n \"f05dd81b\"\n);\nconst NcReferenceWidget = __component__$8.exports;\nconst _sfc_main$7 = {\n name: \"NcCustomPickerElement\",\n props: {\n /**\n * The reference provider\n */\n provider: {\n type: Object,\n required: true\n }\n },\n emits: [\n \"cancel\",\n \"submit\"\n ],\n data() {\n return {\n isRegistered: isCustomPickerElementRegistered(this.provider.id),\n renderResult: null\n };\n },\n mounted() {\n if (this.isRegistered) {\n this.renderElement();\n }\n },\n beforeDestroy() {\n if (this.isRegistered) {\n destroyCustomPickerElement(this.provider.id, this.$el, this.renderResult);\n }\n },\n methods: {\n renderElement() {\n if (this.$refs.domElement) {\n this.$refs.domElement.innerHTML = \"\";\n }\n const renderFunctionResult = renderCustomPickerElement(this.$refs.domElement, { providerId: this.provider.id, accessible: false });\n Promise.resolve(renderFunctionResult).then((result) => {\n this.renderResult = result;\n if (this.renderResult.object?._isVue && this.renderResult.object?.$on) {\n this.renderResult.object.$on(\"submit\", this.onSubmit);\n this.renderResult.object.$on(\"cancel\", this.onCancel);\n }\n this.renderResult.element.addEventListener(\"submit\", (e) => {\n this.onSubmit(e.detail);\n });\n this.renderResult.element.addEventListener(\"cancel\", this.onCancel);\n });\n },\n onSubmit(value) {\n this.$emit(\"submit\", value);\n },\n onCancel() {\n this.$emit(\"cancel\");\n }\n }\n};\nvar _sfc_render$7 = function render2() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"div\", { ref: \"domElement\" });\n};\nvar _sfc_staticRenderFns$7 = [];\nvar __component__$7 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$7,\n _sfc_render$7,\n _sfc_staticRenderFns$7,\n false,\n null,\n \"0547d92f\"\n);\nconst NcCustomPickerElement = __component__$7.exports;\nconst _sfc_main$6 = {\n name: \"LinkVariantIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nvar _sfc_render$6 = function render3() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"span\", _vm._b({ staticClass: \"material-design-icon link-variant-icon\", attrs: { \"aria-hidden\": _vm.title ? null : \"true\", \"aria-label\": _vm.title, \"role\": \"img\" }, on: { \"click\": function($event) {\n return _vm.$emit(\"click\", $event);\n } } }, \"span\", _vm.$attrs, false), [_c(\"svg\", { staticClass: \"material-design-icon__svg\", attrs: { \"fill\": _vm.fillColor, \"width\": _vm.size, \"height\": _vm.size, \"viewBox\": \"0 0 24 24\" } }, [_c(\"path\", { attrs: { \"d\": \"M10.59,13.41C11,13.8 11,14.44 10.59,14.83C10.2,15.22 9.56,15.22 9.17,14.83C7.22,12.88 7.22,9.71 9.17,7.76V7.76L12.71,4.22C14.66,2.27 17.83,2.27 19.78,4.22C21.73,6.17 21.73,9.34 19.78,11.29L18.29,12.78C18.3,11.96 18.17,11.14 17.89,10.36L18.36,9.88C19.54,8.71 19.54,6.81 18.36,5.64C17.19,4.46 15.29,4.46 14.12,5.64L10.59,9.17C9.41,10.34 9.41,12.24 10.59,13.41M13.41,9.17C13.8,8.78 14.44,8.78 14.83,9.17C16.78,11.12 16.78,14.29 14.83,16.24V16.24L11.29,19.78C9.34,21.73 6.17,21.73 4.22,19.78C2.27,17.83 2.27,14.66 4.22,12.71L5.71,11.22C5.7,12.04 5.83,12.86 6.11,13.65L5.64,14.12C4.46,15.29 4.46,17.19 5.64,18.36C6.81,19.54 8.71,19.54 9.88,18.36L13.41,14.83C14.59,13.66 14.59,11.76 13.41,10.59C13,10.2 13,9.56 13.41,9.17Z\" } }, [_vm.title ? _c(\"title\", [_vm._v(_vm._s(_vm.title))]) : _vm._e()])])]);\n};\nvar _sfc_staticRenderFns$6 = [];\nvar __component__$6 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$6,\n _sfc_render$6,\n _sfc_staticRenderFns$6,\n false,\n null,\n null\n);\nconst LinkVariantIcon = __component__$6.exports;\nregister(t8);\nconst anyLinkProviderId = \"any-link\";\nconst anyLinkProvider = {\n id: anyLinkProviderId,\n title: t(\"Any link\"),\n order: 0,\n icon_url: imagePath(\"core\", \"filetypes/link.svg\")\n};\nwindow._vue_richtext_reference_providers ??= loadState(\"core\", \"reference-provider-list\", []);\nwindow._vue_richtext_reference_provider_timestamps ??= loadState(\"core\", \"reference-provider-timestamps\", {});\nfunction getProvider(providerId) {\n if (providerId === anyLinkProviderId) {\n return anyLinkProvider;\n }\n return getProviders().find((p) => p.id === providerId);\n}\nfunction getProviders() {\n return window._vue_richtext_reference_providers.filter((p) => {\n const keep = !!p.search_providers_ids && p.search_providers_ids.length > 0 || isCustomPickerElementRegistered(p.id);\n if (!keep) {\n logger.debug(`[smart picker] ${p.id} reference provider is discoverable but does not have any related search provider or custom picker component registered`);\n }\n return keep;\n });\n}\nfunction sortProviders(providerList) {\n const timestamps = window._vue_richtext_reference_provider_timestamps;\n return providerList.sort((a, b) => {\n return a.order === b.order ? 0 : a.order > b.order ? 1 : -1;\n }).sort((a, b) => {\n const ta = timestamps[a.id];\n const tb = timestamps[b.id];\n return ta === tb ? 0 : tb === void 0 ? -1 : ta === void 0 ? 1 : ta > tb ? -1 : 1;\n });\n}\nfunction searchProvider(query, limit) {\n const providers = getProviders();\n const escapedQuery = query.replace(/[/\\-\\\\^$*+?.()|[\\]{}]/g, \"\\\\$&\");\n const regexp = new RegExp(escapedQuery, \"i\");\n const sortedProviders = sortProviders(providers);\n const filteredSortedProviders = sortedProviders.filter((p) => {\n return p.title.match(regexp);\n });\n const searchResult = limit ? filteredSortedProviders.slice(0, limit) : filteredSortedProviders;\n if (query === \"\" || searchResult.length === 0) {\n searchResult.push(anyLinkProvider);\n }\n return searchResult;\n}\nasync function touchProvider(providerId) {\n const timestamp = Math.floor(Date.now() / 1e3);\n const url = generateOcsUrl(\"references/provider/{providerId}\", { providerId });\n await axios.put(url, { timestamp });\n window._vue_richtext_reference_provider_timestamps[providerId] = timestamp;\n}\nregister(t41, t47);\nlet mytimer = 0;\nfunction delay(callback, ms) {\n return function() {\n const context = this;\n const args = arguments;\n clearTimeout(mytimer);\n mytimer = setTimeout(function() {\n callback.apply(context, args);\n }, ms);\n };\n}\nfunction isUrl(str) {\n try {\n return Boolean(new URL(str));\n } catch {\n return false;\n }\n}\nconst _sfc_main$5 = {\n name: \"NcProviderList\",\n components: {\n NcSelect,\n NcHighlight,\n NcEmptyContent,\n LinkVariantIcon\n },\n emits: [\n \"select-provider\",\n \"submit\"\n ],\n data() {\n return {\n selectedProvider: null,\n query: \"\",\n multiselectPlaceholder: t(\"Select provider\"),\n providerIconAlt: t(\"Provider icon\")\n };\n },\n computed: {\n options() {\n const result = [];\n if (this.query !== \"\" && isUrl(this.query)) {\n result.push({\n id: this.query,\n title: this.query,\n isLink: true\n });\n }\n result.push(...searchProvider(this.query));\n return result;\n }\n },\n methods: {\n focus() {\n setTimeout(() => {\n this.$refs[\"provider-select\"]?.$el?.querySelector(\"#provider-select-input\")?.focus();\n }, 300);\n },\n onProviderSelected(p) {\n if (p !== null) {\n if (p.isLink) {\n this.$emit(\"submit\", p.title);\n } else {\n this.$emit(\"select-provider\", p);\n }\n this.selectedProvider = null;\n }\n },\n onSearch(query) {\n this.query = query;\n }\n }\n};\nvar _sfc_render$5 = function render4() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"div\", { staticClass: \"provider-list\" }, [_c(\"NcSelect\", { ref: \"provider-select\", staticClass: \"provider-list--select\", attrs: { \"input-id\": \"provider-select-input\", \"label\": \"title\", \"placeholder\": _vm.multiselectPlaceholder, \"options\": _vm.options, \"append-to-body\": false, \"clear-search-on-select\": true, \"clear-search-on-blur\": () => false, \"filterable\": false }, on: { \"search\": _vm.onSearch, \"input\": _vm.onProviderSelected }, scopedSlots: _vm._u([{ key: \"option\", fn: function(option) {\n return [option.isLink ? _c(\"div\", { staticClass: \"provider\" }, [_c(\"LinkVariantIcon\", { staticClass: \"link-icon\", attrs: { \"size\": 20 } }), _c(\"span\", [_vm._v(_vm._s(option.title))])], 1) : _c(\"div\", { staticClass: \"provider\" }, [_c(\"img\", { staticClass: \"provider-icon\", attrs: { \"src\": option.icon_url, \"alt\": _vm.providerIconAlt } }), _c(\"NcHighlight\", { staticClass: \"option-text\", attrs: { \"search\": _vm.query, \"text\": option.title } })], 1)];\n } }]), model: { value: _vm.selectedProvider, callback: function($$v) {\n _vm.selectedProvider = $$v;\n }, expression: \"selectedProvider\" } }), _c(\"NcEmptyContent\", { staticClass: \"provider-list--empty-content\", scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_c(\"LinkVariantIcon\")];\n }, proxy: true }]) })], 1);\n};\nvar _sfc_staticRenderFns$5 = [];\nvar __component__$5 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$5,\n _sfc_render$5,\n _sfc_staticRenderFns$5,\n false,\n null,\n \"f39d58d9\"\n);\nconst NcProviderList = __component__$5.exports;\nregister(t24);\nconst _sfc_main$4 = {\n name: \"NcRawLinkInput\",\n components: {\n LinkVariantIcon,\n NcEmptyContent,\n NcLoadingIcon,\n NcReferenceWidget,\n NcTextField\n },\n props: {\n /**\n * The reference provider\n */\n provider: {\n type: Object,\n required: true\n }\n },\n emits: [\n \"submit\"\n ],\n data() {\n return {\n inputValue: \"\",\n loading: false,\n reference: null,\n abortController: null,\n inputPlaceholder: t(\"Enter link\")\n };\n },\n computed: {\n isLinkValid() {\n return isUrl(this.inputValue);\n }\n },\n methods: {\n focus() {\n this.$refs[\"url-input\"].$el.getElementsByTagName(\"input\")[0]?.focus();\n },\n onSubmit(e) {\n const value = e.target.value;\n if (this.isLinkValid) {\n this.$emit(\"submit\", value);\n }\n },\n onClear() {\n this.inputValue = \"\";\n this.reference = null;\n },\n onInput() {\n this.reference = null;\n if (this.abortController) {\n this.abortController.abort();\n }\n if (this.isLinkValid) {\n delay(() => {\n this.updateReference();\n }, 500)();\n }\n },\n updateReference() {\n this.loading = true;\n this.abortController = new AbortController();\n axios.get(generateOcsUrl(\"references/resolve\", 2) + \"?reference=\" + encodeURIComponent(this.inputValue), {\n signal: this.abortController.signal\n }).then((response) => {\n this.reference = response.data.ocs.data.references[this.inputValue];\n }).catch((error) => {\n logger.error(\"Could not update reference\", { error });\n }).then(() => {\n this.loading = false;\n });\n }\n }\n};\nvar _sfc_render$4 = function render5() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"div\", { staticClass: \"raw-link\" }, [_c(\"div\", { staticClass: \"input-wrapper\" }, [_c(\"NcTextField\", { ref: \"url-input\", attrs: { \"value\": _vm.inputValue, \"show-trailing-button\": _vm.inputValue !== \"\", \"label\": _vm.inputPlaceholder }, on: { \"update:value\": [function($event) {\n _vm.inputValue = $event;\n }, _vm.onInput], \"trailing-button-click\": _vm.onClear }, nativeOn: { \"keyup\": function($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")) return null;\n return _vm.onSubmit.apply(null, arguments);\n } } }, [_vm.loading ? _c(\"NcLoadingIcon\", { attrs: { \"size\": 16 } }) : _c(\"LinkVariantIcon\", { attrs: { \"size\": 16 } })], 1)], 1), _vm.reference !== null ? _c(\"NcReferenceWidget\", { staticClass: \"reference-widget\", attrs: { \"reference\": _vm.reference } }) : _c(\"NcEmptyContent\", { staticClass: \"raw-link--empty-content\", scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_vm.provider.icon_url ? _c(\"img\", { staticClass: \"provider-icon\", attrs: { \"src\": _vm.provider.icon_url } }) : _c(\"LinkVariantIcon\")];\n }, proxy: true }]) })], 1);\n};\nvar _sfc_staticRenderFns$4 = [];\nvar __component__$4 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$4,\n _sfc_render$4,\n _sfc_staticRenderFns$4,\n false,\n null,\n \"be630586\"\n);\nconst NcRawLinkInput = __component__$4.exports;\nconst _sfc_main$3 = {\n name: \"NcSearchResult\",\n components: {\n NcHighlight\n },\n props: {\n /**\n * Unified search result entry\n */\n entry: {\n type: Object,\n required: true\n },\n /**\n * The query that led to getting this result\n * Used to highlight the entry text\n */\n query: {\n type: String,\n required: true\n }\n }\n};\nvar _sfc_render$3 = function render6() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"div\", { staticClass: \"result\" }, [_vm.entry.icon ? _c(\"div\", { staticClass: \"result--icon-class\", class: { [_vm.entry.icon]: true, rounded: _vm.entry.rounded } }) : _c(\"img\", { staticClass: \"result--image\", class: { rounded: _vm.entry.rounded }, attrs: { \"src\": _vm.entry.thumbnailUrl } }), _c(\"div\", { staticClass: \"result--content\" }, [_c(\"span\", { staticClass: \"result--content--name\" }, [_c(\"NcHighlight\", { attrs: { \"search\": _vm.query, \"text\": _vm.entry.title } })], 1), _c(\"span\", { staticClass: \"result--content--subline\" }, [_c(\"NcHighlight\", { attrs: { \"search\": _vm.query, \"text\": _vm.entry.subline } })], 1)])]);\n};\nvar _sfc_staticRenderFns$3 = [];\nvar __component__$3 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$3,\n _sfc_render$3,\n _sfc_staticRenderFns$3,\n false,\n null,\n \"995c2758\"\n);\nconst NcSearchResult = __component__$3.exports;\nregister(t31, t41, t43);\nconst LIMIT = 5;\nconst _sfc_main$2 = {\n name: \"NcSearch\",\n components: {\n LinkVariantIcon,\n DotsHorizontalIcon,\n NcEmptyContent,\n NcSelect,\n NcSearchResult\n },\n /* eslint vue/require-prop-comment: warn -- TODO: Add a proper doc block about what this props do */\n props: {\n /**\n * The selected reference provider\n */\n provider: {\n type: Object,\n required: true\n },\n showEmptyContent: {\n type: Boolean,\n // eslint-disable-next-line vue/no-boolean-default\n default: true\n },\n /**\n * Placeholder of the search\n */\n searchPlaceholder: {\n type: String,\n default: null\n }\n },\n emits: [\n \"submit\"\n ],\n data() {\n return {\n searchQuery: \"\",\n selectedResult: null,\n resultsBySearchProvider: {},\n searching: false,\n searchingMoreOf: null,\n abortController: null,\n noOptionsText: t(\"Start typing to search\"),\n providerIconAlt: t(\"Provider icon\")\n };\n },\n computed: {\n mySearchPlaceholder() {\n return this.searchPlaceholder || t(\"Search\");\n },\n searchProviderIds() {\n return this.provider.search_providers_ids;\n },\n options() {\n if (this.searchQuery === \"\") {\n return [];\n }\n const options = [];\n if (isUrl(this.searchQuery)) {\n options.push(this.rawLinkEntry);\n }\n options.push(...this.formattedSearchResults);\n return options;\n },\n rawLinkEntry() {\n return {\n id: \"rawLinkEntry\",\n resourceUrl: this.searchQuery,\n isRawLink: true\n };\n },\n formattedSearchResults() {\n const results = [];\n this.searchProviderIds.forEach((pid) => {\n if (this.resultsBySearchProvider[pid].entries.length > 0) {\n if (this.searchProviderIds.length > 1 || this.resultsBySearchProvider[pid].entries.length > 1) {\n results.push({\n id: \"groupTitle-\" + pid,\n name: this.resultsBySearchProvider[pid].name,\n isCustomGroupTitle: true,\n providerId: pid\n });\n }\n const providerEntriesWithId = this.resultsBySearchProvider[pid].entries.map((entry, index) => {\n return {\n id: \"provider-\" + pid + \"-entry-\" + index,\n ...entry\n };\n });\n results.push(...providerEntriesWithId);\n if (this.resultsBySearchProvider[pid].isPaginated) {\n results.push({\n id: \"moreOf-\" + pid,\n name: this.resultsBySearchProvider[pid].name,\n isMore: true,\n providerId: pid,\n isLoading: this.searchingMoreOf === pid\n });\n }\n }\n });\n return results;\n }\n },\n mounted() {\n this.resetResults();\n },\n beforeDestroy() {\n this.cancelSearchRequests();\n },\n methods: {\n t,\n resetResults() {\n const resultsBySearchProvider = {};\n this.searchProviderIds.forEach((pid) => {\n resultsBySearchProvider[pid] = {\n entries: []\n };\n });\n this.resultsBySearchProvider = resultsBySearchProvider;\n },\n focus() {\n setTimeout(() => {\n this.$refs[\"search-select\"]?.$el?.querySelector(\"#search-select-input\")?.focus();\n }, 300);\n },\n cancelSearchRequests() {\n if (this.abortController) {\n this.abortController.abort();\n }\n },\n onSearchInput(query) {\n this.searchQuery = query;\n delay(() => {\n this.updateSearch();\n }, 500)();\n },\n onSelectResultSelected(item) {\n if (item !== null) {\n if (item.resourceUrl) {\n this.cancelSearchRequests();\n this.$emit(\"submit\", item.resourceUrl);\n } else if (item.isMore) {\n this.searchMoreOf(item.providerId).then(() => {\n this.selectedResult = null;\n });\n }\n }\n },\n searchMoreOf(searchProviderId) {\n this.searchingMoreOf = searchProviderId;\n this.cancelSearchRequests();\n return this.searchProviders(searchProviderId);\n },\n updateSearch() {\n this.cancelSearchRequests();\n this.resetResults();\n if (this.searchQuery === \"\") {\n this.searching = false;\n return;\n }\n return this.searchProviders();\n },\n searchProviders(searchProviderId = null) {\n this.abortController = new AbortController();\n this.searching = true;\n const searchPromises = searchProviderId === null ? [...this.searchProviderIds].map((pid) => {\n return this.searchOneProvider(pid);\n }) : [this.searchOneProvider(searchProviderId, this.resultsBySearchProvider[searchProviderId]?.cursor ?? null)];\n return Promise.allSettled(searchPromises).then((promises) => {\n const isOneCanceled = !!promises.find((p) => {\n return p.status === \"rejected\" && (p.reason.name === \"CanceledError\" || p.reason.code === \"ERR_CANCELED\");\n });\n if (!isOneCanceled) {\n this.searching = false;\n this.searchingMoreOf = null;\n }\n });\n },\n searchOneProvider(providerId, cursor = null) {\n const url = cursor === null ? generateOcsUrl(\"search/providers/{providerId}/search?term={term}&limit={limit}\", { providerId, term: this.searchQuery, limit: LIMIT }) : generateOcsUrl(\"search/providers/{providerId}/search?term={term}&limit={limit}&cursor={cursor}\", { providerId, term: this.searchQuery, limit: LIMIT, cursor });\n return axios.get(url, {\n signal: this.abortController.signal\n }).then((response) => {\n const data = response.data.ocs.data;\n this.resultsBySearchProvider[providerId].name = data.name;\n this.resultsBySearchProvider[providerId].cursor = data.cursor;\n this.resultsBySearchProvider[providerId].isPaginated = data.isPaginated;\n this.resultsBySearchProvider[providerId].entries.push(...data.entries);\n });\n }\n }\n};\nvar _sfc_render$2 = function render7() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"div\", { staticClass: \"smart-picker-search\", class: { \"with-empty-content\": _vm.showEmptyContent } }, [_c(\"NcSelect\", { ref: \"search-select\", staticClass: \"smart-picker-search--select\", attrs: { \"input-id\": \"search-select-input\", \"label\": \"name\", \"placeholder\": _vm.mySearchPlaceholder, \"options\": _vm.options, \"append-to-body\": false, \"close-on-select\": false, \"clear-search-on-select\": false, \"clear-search-on-blur\": () => false, \"reset-focus-on-options-change\": false, \"filterable\": false, \"autoscroll\": true, \"reset-on-options-change\": false, \"loading\": _vm.searching }, on: { \"search\": _vm.onSearchInput, \"input\": _vm.onSelectResultSelected }, scopedSlots: _vm._u([{ key: \"option\", fn: function(option) {\n return [option.isRawLink ? _c(\"div\", { staticClass: \"custom-option\" }, [_c(\"LinkVariantIcon\", { staticClass: \"option-simple-icon\", attrs: { \"size\": 20 } }), _c(\"span\", { staticClass: \"option-text\" }, [_vm._v(\" \" + _vm._s(_vm.t(\"Raw link {options}\", { options: option.resourceUrl })) + \" \")])], 1) : option.resourceUrl ? _c(\"NcSearchResult\", { staticClass: \"search-result\", attrs: { \"entry\": option, \"query\": _vm.searchQuery } }) : option.isCustomGroupTitle ? _c(\"span\", { staticClass: \"custom-option group-name\" }, [_vm.provider.icon_url ? _c(\"img\", { staticClass: \"provider-icon group-name-icon\", attrs: { \"src\": _vm.provider.icon_url } }) : _vm._e(), _c(\"span\", { staticClass: \"option-text\" }, [_c(\"strong\", [_vm._v(_vm._s(option.name))])])]) : option.isMore ? _c(\"span\", { staticClass: \"custom-option\" }, [option.isLoading ? _c(\"span\", { staticClass: \"option-simple-icon icon-loading-small\" }) : _c(\"DotsHorizontalIcon\", { staticClass: \"option-simple-icon\", attrs: { \"size\": 20 } }), _c(\"span\", { staticClass: \"option-text\" }, [_vm._v(\" \" + _vm._s(_vm.t('Load more \"{options}\"', { options: option.name })) + \" \")])], 1) : _vm._e()];\n } }, { key: \"no-options\", fn: function() {\n return [_vm._v(\" \" + _vm._s(_vm.noOptionsText) + \" \")];\n }, proxy: true }]), model: { value: _vm.selectedResult, callback: function($$v) {\n _vm.selectedResult = $$v;\n }, expression: \"selectedResult\" } }), _vm.showEmptyContent ? _c(\"NcEmptyContent\", { staticClass: \"smart-picker-search--empty-content\", scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_vm.provider.icon_url ? _c(\"img\", { staticClass: \"provider-icon\", attrs: { \"alt\": _vm.providerIconAlt, \"src\": _vm.provider.icon_url } }) : _c(\"LinkVariantIcon\")];\n }, proxy: true }], null, false, 2922132592) }) : _vm._e()], 1);\n};\nvar _sfc_staticRenderFns$2 = [];\nvar __component__$2 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$2,\n _sfc_render$2,\n _sfc_staticRenderFns$2,\n false,\n null,\n \"e61f71e3\"\n);\nconst NcSearch = __component__$2.exports;\nconst MODES = {\n providerList: 1,\n standardLinkInput: 2,\n searchInput: 3,\n customElement: 4\n};\nconst _sfc_main$1 = {\n name: \"NcReferencePicker\",\n components: {\n NcCustomPickerElement,\n NcProviderList,\n NcRawLinkInput,\n NcSearch\n },\n props: {\n /**\n * Provider to select on creation\n * Default: null. Show the provider list\n */\n initialProvider: {\n type: Object,\n default: () => null\n },\n /**\n * Optional width in pixels\n * Default: 100%\n */\n width: {\n type: Number,\n default: null\n },\n /**\n * Focus on the provider list select input on creation\n * Default: true\n */\n focusOnCreate: {\n type: Boolean,\n // eslint-disable-next-line vue/no-boolean-default\n default: true\n }\n },\n emits: [\n \"cancel\",\n \"cancel-raw-link\",\n \"cancel-search\",\n \"provider-selected\",\n \"submit\"\n ],\n data() {\n return {\n MODES,\n selectedProvider: this.initialProvider\n };\n },\n computed: {\n mode() {\n return this.selectedProvider === null ? MODES.providerList : isCustomPickerElementRegistered(this.selectedProvider.id) ? MODES.customElement : this.selectedProvider.search_providers_ids ? MODES.searchInput : MODES.standardLinkInput;\n },\n pickerWrapperStyle() {\n return {\n width: this.width ? this.width + \"px\" : void 0\n };\n }\n },\n mounted() {\n if (this.focusOnCreate) {\n if (this.initialProvider) {\n setTimeout(() => {\n this.$refs[\"url-input\"]?.focus();\n }, 300);\n } else {\n this.$nextTick(() => {\n this.$refs[\"provider-list\"]?.focus();\n });\n }\n }\n },\n methods: {\n onEscapePressed() {\n if (this.selectedProvider !== null) {\n this.deselectProvider();\n } else {\n this.cancelProviderSelection();\n }\n },\n onProviderSelected(provider) {\n this.selectedProvider = provider;\n this.$emit(\"provider-selected\", provider);\n this.$nextTick(() => {\n this.$refs[\"url-input\"]?.focus();\n });\n },\n cancelCustomElement() {\n this.deselectProvider();\n },\n cancelSearch() {\n this.$emit(\"cancel-search\", this.selectedProvider?.title);\n this.deselectProvider();\n },\n cancelRawLinkInput() {\n this.$emit(\"cancel-raw-link\", this.selectedProvider?.title);\n this.deselectProvider();\n },\n cancelProviderSelection() {\n this.$emit(\"cancel\");\n },\n submitLink(link) {\n if (this.selectedProvider !== null) {\n touchProvider(this.selectedProvider.id);\n }\n this.$emit(\"submit\", link);\n this.deselectProvider();\n },\n deselectProvider() {\n this.selectedProvider = null;\n this.$emit(\"provider-selected\", null);\n setTimeout(() => {\n this.$refs[\"provider-list\"]?.focus();\n }, 300);\n }\n }\n};\nvar _sfc_render$1 = function render8() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"div\", { staticClass: \"reference-picker\", style: _vm.pickerWrapperStyle, attrs: { \"tabindex\": \"-1\" }, on: { \"keydown\": function($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"esc\", 27, $event.key, [\"Esc\", \"Escape\"])) return null;\n $event.stopPropagation();\n $event.preventDefault();\n return _vm.onEscapePressed.apply(null, arguments);\n } } }, [_vm.mode === _vm.MODES.providerList ? _c(\"NcProviderList\", { ref: \"provider-list\", on: { \"select-provider\": _vm.onProviderSelected, \"submit\": _vm.submitLink, \"cancel\": _vm.cancelProviderSelection } }) : _vm.mode === _vm.MODES.standardLinkInput ? _c(\"NcRawLinkInput\", { ref: \"url-input\", attrs: { \"provider\": _vm.selectedProvider }, on: { \"submit\": _vm.submitLink, \"cancel\": _vm.cancelRawLinkInput } }) : _vm.mode === _vm.MODES.searchInput ? _c(\"NcSearch\", { ref: \"url-input\", attrs: { \"provider\": _vm.selectedProvider }, on: { \"cancel\": _vm.cancelSearch, \"submit\": _vm.submitLink } }) : _vm.mode === _vm.MODES.customElement ? _c(\"div\", { staticClass: \"custom-element-wrapper\" }, [_c(\"NcCustomPickerElement\", { staticClass: \"custom-element\", attrs: { \"provider\": _vm.selectedProvider }, on: { \"submit\": _vm.submitLink, \"cancel\": _vm.cancelCustomElement } })], 1) : _vm._e()], 1);\n};\nvar _sfc_staticRenderFns$1 = [];\nvar __component__$1 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$1,\n _sfc_render$1,\n _sfc_staticRenderFns$1,\n false,\n null,\n \"646d5538\"\n);\nconst NcReferencePicker = __component__$1.exports;\nregister(t12, t18);\nconst _sfc_main = {\n name: \"NcReferencePickerModal\",\n components: {\n NcReferencePicker,\n NcModal,\n NcButton,\n ArrowLeftIcon: ArrowLeft,\n CloseIcon: Close\n },\n props: {\n /**\n * Provider to select on creation\n * Show the provider list if no initial one is provided\n */\n initialProvider: {\n type: Object,\n default: () => null\n },\n /**\n * Focus on the input item on create\n */\n focusOnCreate: {\n type: Boolean,\n // eslint-disable-next-line vue/no-boolean-default\n default: true\n },\n /**\n * If true, add the modal content to the Viewer trap elements via the event-bus\n */\n isInsideViewer: {\n type: Boolean,\n default: false\n }\n },\n emits: [\n \"cancel\",\n \"submit\"\n ],\n data() {\n return {\n show: true,\n selectedProvider: this.initialProvider,\n backButtonTitle: t(\"Back to provider selection\"),\n closeButtonTitle: t(\"Close\"),\n closeButtonLabel: t(\"Close Smart Picker\")\n };\n },\n computed: {\n isProviderSelected() {\n return this.selectedProvider !== null;\n },\n showBackButton() {\n return this.initialProvider === null && this.isProviderSelected;\n },\n modalSize() {\n return this.isProviderSelected && isCustomPickerElementRegistered(this.selectedProvider.id) ? getCustomPickerElementSize(this.selectedProvider.id) ?? \"large\" : \"normal\";\n },\n showModalName() {\n return !this.isProviderSelected || !isCustomPickerElementRegistered(this.selectedProvider.id);\n },\n modalName() {\n return this.isProviderSelected ? this.selectedProvider.title : t(\"Smart Picker\");\n }\n },\n mounted() {\n if (this.isInsideViewer) {\n const elem = this.$refs.modal_content;\n emit(\"viewer:trapElements:changed\", elem);\n }\n },\n methods: {\n onCancel() {\n this.show = false;\n this.$emit(\"cancel\");\n },\n onSubmit(value) {\n this.show = false;\n this.$emit(\"submit\", value);\n },\n onProviderSelect(provider) {\n this.selectedProvider = provider;\n if (provider === null && this.initialProvider !== null) {\n this.onCancel();\n }\n },\n onBackClicked() {\n this.$refs.referencePicker.deselectProvider();\n }\n }\n};\nvar _sfc_render = function render9() {\n var _vm = this, _c = _vm._self._c;\n return _vm.show ? _c(\"NcModal\", { staticClass: \"reference-picker-modal\", attrs: { \"size\": _vm.modalSize, \"can-close\": true }, on: { \"close\": _vm.onCancel } }, [_c(\"div\", { ref: \"modal_content\", staticClass: \"reference-picker-modal--content\" }, [_vm.showBackButton ? _c(\"NcButton\", { staticClass: \"back-button\", attrs: { \"aria-label\": _vm.backButtonTitle, \"title\": _vm.backButtonTitle }, on: { \"click\": _vm.onBackClicked }, scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_c(\"ArrowLeftIcon\")];\n }, proxy: true }], null, false, 3001860362) }) : _vm._e(), _c(\"NcButton\", { staticClass: \"close-button\", attrs: { \"aria-label\": _vm.closeButtonLabel, \"title\": _vm.closeButtonTitle, \"variant\": \"tertiary\" }, on: { \"click\": _vm.onCancel }, scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_c(\"CloseIcon\")];\n }, proxy: true }], null, false, 2491825086) }), _vm.showModalName ? _c(\"h2\", [_vm._v(\" \" + _vm._s(_vm.modalName) + \" \")]) : _vm._e(), _c(\"NcReferencePicker\", { ref: \"referencePicker\", attrs: { \"initial-provider\": _vm.initialProvider, \"focus-on-create\": _vm.focusOnCreate }, on: { \"provider-selected\": _vm.onProviderSelect, \"submit\": _vm.onSubmit, \"cancel\": _vm.onCancel } })], 1)]) : _vm._e();\n};\nvar _sfc_staticRenderFns = [];\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n null,\n \"00990f2a\"\n);\nconst NcReferencePickerModal = __component__.exports;\nasync function getLinkWithPicker(providerId, isInsideViewer) {\n const modalId = \"referencePickerModal\";\n const modalElement = document.createElement(\"div\");\n modalElement.id = modalId;\n document.body.append(modalElement);\n const { promise, reject, resolve } = Promise.withResolvers();\n const initialProvider = providerId && getProvider(providerId) || null;\n const View = Vue.extend(NcReferencePickerModal);\n const view = new View({\n propsData: {\n initialProvider,\n isInsideViewer\n }\n }).$mount(modalElement);\n view.$on(\"cancel\", () => {\n view.$destroy();\n reject(new Error(\"User cancellation\"));\n });\n view.$on(\"submit\", (link) => {\n view.$destroy();\n resolve(link);\n });\n return promise;\n}\nexport {\n NcReferencePicker as N,\n anyLinkProviderId as a,\n getProvider as b,\n getProviders as c,\n sortProviders as d,\n NcReferencePickerModal as e,\n NcReferenceWidget as f,\n getLinkWithPicker as g,\n NcSearch as h,\n searchProvider as s\n};\n//# sourceMappingURL=referencePickerModal-B69WouiU.mjs.map\n","import '../assets/NcRichText-Cp_5tfBy.css';\nimport { toString } from \"mdast-util-to-string\";\nimport rehypeExternalLinks from \"rehype-external-links\";\nimport rehype2react from \"rehype-react\";\nimport breaks from \"remark-breaks\";\nimport remarkParse from \"remark-parse\";\nimport remark2rehype from \"remark-rehype\";\nimport remarkUnlinkProtocols from \"remark-unlink-protocols\";\nimport { unified } from \"unified\";\nimport { defineComponent, ref } from \"vue\";\nimport { RouterLink } from \"vue-router\";\nimport { N as NcCheckboxRadioSwitch } from \"./NcCheckboxRadioSwitch-D4IV4zWy.mjs\";\nimport { getCurrentUser } from \"@nextcloud/auth\";\nimport axios from \"@nextcloud/axios\";\nimport { generateOcsUrl } from \"@nextcloud/router\";\nimport { getSharingToken } from \"@nextcloud/sharing/public\";\nimport { f as NcReferenceWidget } from \"./referencePickerModal-B69WouiU.mjs\";\nimport { l as logger } from \"./logger-D3RVzcfQ.mjs\";\nimport { U as URL_PATTERN, p as parseUrl, r as remarkAutolink, g as getRoute, N as NcRichTextExternalLink } from \"./autolink-CeB9uxD9.mjs\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nimport { N as NcButton } from \"./NcButton-CCWEL9Ci.mjs\";\nimport { N as NcIconSvgWrapper } from \"./NcIconSvgWrapper-Bui9PhAS.mjs\";\nimport { u as useCopy } from \"./useCopy-DDDe5RYH.mjs\";\nimport { G as GenRandomId } from \"./GenRandomId-F5ebeBB_.mjs\";\nimport { u } from \"unist-builder\";\nimport { visitParents, EXIT, SKIP } from \"unist-util-visit-parents\";\nconst _sfc_main$2 = {\n name: \"NcReferenceList\",\n components: {\n NcReferenceWidget\n },\n /* eslint vue/require-prop-comment: warn -- TODO: Add a proper doc block about what this props do */\n props: {\n text: {\n type: String,\n default: \"\"\n },\n referenceData: {\n type: Array,\n default: null\n },\n limit: {\n type: Number,\n default: 1\n },\n displayFallback: {\n type: Boolean,\n default: false\n },\n interactive: {\n type: Boolean,\n // eslint-disable-next-line vue/no-boolean-default\n default: true\n },\n interactiveOptIn: {\n type: Boolean,\n default: false\n }\n },\n data() {\n return {\n references: null,\n loading: true\n };\n },\n computed: {\n isVisible() {\n return this.loading || this.displayedReferences.length !== 0;\n },\n values() {\n if (this.referenceData) {\n return this.referenceData;\n }\n if (this.displayFallback && !this.loading && !this.references) {\n return [this.fallbackReference];\n }\n return this.references ? Object.values(this.references) : [];\n },\n firstReference() {\n return this.values[0] ?? null;\n },\n displayedReferences() {\n return this.values.filter(Boolean).slice(0, this.limit);\n },\n fallbackReference() {\n return {\n accessible: true,\n openGraphObject: {\n id: this.text,\n link: this.text,\n name: this.text\n },\n richObjectType: \"open-graph\"\n };\n }\n },\n watch: {\n text: \"fetch\"\n },\n mounted() {\n this.fetch();\n },\n methods: {\n fetch() {\n this.loading = true;\n if (this.referenceData) {\n this.references = null;\n this.loading = false;\n return;\n }\n if (!new RegExp(URL_PATTERN).exec(this.text)) {\n this.references = null;\n this.loading = false;\n return;\n }\n this.resolve().then((response) => {\n this.references = response.data.ocs.data.references;\n this.loading = false;\n this.$emit(\"loaded\");\n }).catch((error) => {\n logger.error(\"Failed to extract references\", { error });\n this.loading = false;\n this.$emit(\"loaded\");\n });\n },\n resolve() {\n const match = new RegExp(URL_PATTERN).exec(this.text.trim());\n const isPublic = getCurrentUser() === null;\n if (this.limit === 1 && match) {\n return isPublic ? axios.get(generateOcsUrl(\"references/resolvePublic\") + `?reference=${encodeURIComponent(match[0])}&sharingToken=${getSharingToken()}`) : axios.get(generateOcsUrl(\"references/resolve\") + `?reference=${encodeURIComponent(match[0])}`);\n }\n return isPublic ? axios.post(generateOcsUrl(\"references/extractPublic\"), {\n text: this.text,\n resolve: true,\n limit: this.limit,\n sharingToken: getSharingToken()\n }) : axios.post(generateOcsUrl(\"references/extract\"), {\n text: this.text,\n resolve: true,\n limit: this.limit\n });\n }\n }\n};\nvar _sfc_render$2 = function render() {\n var _vm = this, _c = _vm._self._c;\n return _vm.isVisible ? _c(\"div\", { staticClass: \"widgets--list\", class: { \"icon-loading\": _vm.loading } }, _vm._l(_vm.displayedReferences, function(reference) {\n return _c(\"NcReferenceWidget\", { key: reference.openGraphObject?.id, attrs: { \"reference\": reference, \"interactive\": _vm.interactive, \"interactive-opt-in\": _vm.interactiveOptIn } });\n }), 1) : _vm._e();\n};\nvar _sfc_staticRenderFns$2 = [];\nvar __component__$2 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$2,\n _sfc_render$2,\n _sfc_staticRenderFns$2,\n false,\n null,\n \"a50e616b\"\n);\nconst NcReferenceList = __component__$2.exports;\nfunction ccount(value, character) {\n const source = String(value);\n if (typeof character !== \"string\") {\n throw new TypeError(\"Expected character\");\n }\n let count = 0;\n let index = source.indexOf(character);\n while (index !== -1) {\n count++;\n index = source.indexOf(character, index + character.length);\n }\n return count;\n}\nfunction ok$1() {\n}\nconst asciiAlpha = regexCheck(/[A-Za-z]/);\nconst asciiAlphanumeric = regexCheck(/[\\dA-Za-z]/);\nfunction asciiControl(code2) {\n return (\n // Special whitespace codes (which have negative values), C0 and Control\n // character DEL\n code2 !== null && (code2 < 32 || code2 === 127)\n );\n}\nfunction markdownLineEnding(code2) {\n return code2 !== null && code2 < -2;\n}\nfunction markdownLineEndingOrSpace(code2) {\n return code2 !== null && (code2 < 0 || code2 === 32);\n}\nfunction markdownSpace(code2) {\n return code2 === -2 || code2 === -1 || code2 === 32;\n}\nconst unicodePunctuation = regexCheck(new RegExp(\"\\\\p{P}|\\\\p{S}\", \"u\"));\nconst unicodeWhitespace = regexCheck(/\\s/);\nfunction regexCheck(regex) {\n return check;\n function check(code2) {\n return code2 !== null && code2 > -1 && regex.test(String.fromCharCode(code2));\n }\n}\nfunction escapeStringRegexp(string) {\n if (typeof string !== \"string\") {\n throw new TypeError(\"Expected a string\");\n }\n return string.replace(/[|\\\\{}()[\\]^$+*?.]/g, \"\\\\$&\").replace(/-/g, \"\\\\x2d\");\n}\nconst convert = (\n // Note: overloads in JSDoc can’t yet use different `@template`s.\n /**\n * @type {(\n * ((test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &\n * ((test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &\n * ((test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate) &\n * ((test?: null | undefined) => (node?: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &\n * ((test?: Test) => Check)\n * )}\n */\n /**\n * @param {Test} [test]\n * @returns {Check}\n */\n (function(test) {\n if (test === null || test === void 0) {\n return ok;\n }\n if (typeof test === \"function\") {\n return castFactory(test);\n }\n if (typeof test === \"object\") {\n return Array.isArray(test) ? anyFactory(test) : (\n // Cast because `ReadonlyArray` goes into the above but `isArray`\n // narrows to `Array`.\n propertiesFactory(\n /** @type {Props} */\n test\n )\n );\n }\n if (typeof test === \"string\") {\n return typeFactory(test);\n }\n throw new Error(\"Expected function, string, or object as test\");\n })\n);\nfunction anyFactory(tests) {\n const checks = [];\n let index = -1;\n while (++index < tests.length) {\n checks[index] = convert(tests[index]);\n }\n return castFactory(any);\n function any(...parameters) {\n let index2 = -1;\n while (++index2 < checks.length) {\n if (checks[index2].apply(this, parameters)) return true;\n }\n return false;\n }\n}\nfunction propertiesFactory(check) {\n const checkAsRecord = (\n /** @type {Record} */\n check\n );\n return castFactory(all);\n function all(node) {\n const nodeAsRecord = (\n /** @type {Record} */\n /** @type {unknown} */\n node\n );\n let key;\n for (key in check) {\n if (nodeAsRecord[key] !== checkAsRecord[key]) return false;\n }\n return true;\n }\n}\nfunction typeFactory(check) {\n return castFactory(type);\n function type(node) {\n return node && node.type === check;\n }\n}\nfunction castFactory(testFunction) {\n return check;\n function check(value, index, parent) {\n return Boolean(\n looksLikeANode(value) && testFunction.call(\n this,\n value,\n typeof index === \"number\" ? index : void 0,\n parent || void 0\n )\n );\n }\n}\nfunction ok() {\n return true;\n}\nfunction looksLikeANode(value) {\n return value !== null && typeof value === \"object\" && \"type\" in value;\n}\nfunction findAndReplace(tree, list2, options) {\n const settings = options || {};\n const ignored = convert(settings.ignore || []);\n const pairs = toPairs(list2);\n let pairIndex = -1;\n while (++pairIndex < pairs.length) {\n visitParents(tree, \"text\", visitor);\n }\n function visitor(node, parents) {\n let index = -1;\n let grandparent;\n while (++index < parents.length) {\n const parent = parents[index];\n const siblings = grandparent ? grandparent.children : void 0;\n if (ignored(\n parent,\n siblings ? siblings.indexOf(parent) : void 0,\n grandparent\n )) {\n return;\n }\n grandparent = parent;\n }\n if (grandparent) {\n return handler(node, parents);\n }\n }\n function handler(node, parents) {\n const parent = parents[parents.length - 1];\n const find = pairs[pairIndex][0];\n const replace2 = pairs[pairIndex][1];\n let start = 0;\n const siblings = parent.children;\n const index = siblings.indexOf(node);\n let change = false;\n let nodes = [];\n find.lastIndex = 0;\n let match = find.exec(node.value);\n while (match) {\n const position = match.index;\n const matchObject = {\n index: match.index,\n input: match.input,\n stack: [...parents, node]\n };\n let value = replace2(...match, matchObject);\n if (typeof value === \"string\") {\n value = value.length > 0 ? { type: \"text\", value } : void 0;\n }\n if (value === false) {\n find.lastIndex = position + 1;\n } else {\n if (start !== position) {\n nodes.push({\n type: \"text\",\n value: node.value.slice(start, position)\n });\n }\n if (Array.isArray(value)) {\n nodes.push(...value);\n } else if (value) {\n nodes.push(value);\n }\n start = position + match[0].length;\n change = true;\n }\n if (!find.global) {\n break;\n }\n match = find.exec(node.value);\n }\n if (change) {\n if (start < node.value.length) {\n nodes.push({ type: \"text\", value: node.value.slice(start) });\n }\n parent.children.splice(index, 1, ...nodes);\n } else {\n nodes = [node];\n }\n return index + nodes.length;\n }\n}\nfunction toPairs(tupleOrList) {\n const result = [];\n if (!Array.isArray(tupleOrList)) {\n throw new TypeError(\"Expected find and replace tuple or list of tuples\");\n }\n const list2 = !tupleOrList[0] || Array.isArray(tupleOrList[0]) ? tupleOrList : [tupleOrList];\n let index = -1;\n while (++index < list2.length) {\n const tuple = list2[index];\n result.push([toExpression(tuple[0]), toFunction(tuple[1])]);\n }\n return result;\n}\nfunction toExpression(find) {\n return typeof find === \"string\" ? new RegExp(escapeStringRegexp(find), \"g\") : find;\n}\nfunction toFunction(replace2) {\n return typeof replace2 === \"function\" ? replace2 : function() {\n return replace2;\n };\n}\nconst inConstruct = \"phrasing\";\nconst notInConstruct = [\"autolink\", \"link\", \"image\", \"label\"];\nfunction gfmAutolinkLiteralFromMarkdown() {\n return {\n transforms: [transformGfmAutolinkLiterals],\n enter: {\n literalAutolink: enterLiteralAutolink,\n literalAutolinkEmail: enterLiteralAutolinkValue,\n literalAutolinkHttp: enterLiteralAutolinkValue,\n literalAutolinkWww: enterLiteralAutolinkValue\n },\n exit: {\n literalAutolink: exitLiteralAutolink,\n literalAutolinkEmail: exitLiteralAutolinkEmail,\n literalAutolinkHttp: exitLiteralAutolinkHttp,\n literalAutolinkWww: exitLiteralAutolinkWww\n }\n };\n}\nfunction gfmAutolinkLiteralToMarkdown() {\n return {\n unsafe: [\n {\n character: \"@\",\n before: \"[+\\\\-.\\\\w]\",\n after: \"[\\\\-.\\\\w]\",\n inConstruct,\n notInConstruct\n },\n {\n character: \".\",\n before: \"[Ww]\",\n after: \"[\\\\-.\\\\w]\",\n inConstruct,\n notInConstruct\n },\n {\n character: \":\",\n before: \"[ps]\",\n after: \"\\\\/\",\n inConstruct,\n notInConstruct\n }\n ]\n };\n}\nfunction enterLiteralAutolink(token) {\n this.enter({ type: \"link\", title: null, url: \"\", children: [] }, token);\n}\nfunction enterLiteralAutolinkValue(token) {\n this.config.enter.autolinkProtocol.call(this, token);\n}\nfunction exitLiteralAutolinkHttp(token) {\n this.config.exit.autolinkProtocol.call(this, token);\n}\nfunction exitLiteralAutolinkWww(token) {\n this.config.exit.data.call(this, token);\n const node = this.stack[this.stack.length - 1];\n ok$1(node.type === \"link\");\n node.url = \"http://\" + this.sliceSerialize(token);\n}\nfunction exitLiteralAutolinkEmail(token) {\n this.config.exit.autolinkEmail.call(this, token);\n}\nfunction exitLiteralAutolink(token) {\n this.exit(token);\n}\nfunction transformGfmAutolinkLiterals(tree) {\n findAndReplace(\n tree,\n [\n [/(https?:\\/\\/|www(?=\\.))([-.\\w]+)([^ \\t\\r\\n]*)/gi, findUrl],\n [/([-.\\w+]+)@([-\\w]+(?:\\.[-\\w]+)+)/g, findEmail]\n ],\n { ignore: [\"link\", \"linkReference\"] }\n );\n}\nfunction findUrl(_, protocol, domain2, path2, match) {\n let prefix = \"\";\n if (!previous(match)) {\n return false;\n }\n if (/^w/i.test(protocol)) {\n domain2 = protocol + domain2;\n protocol = \"\";\n prefix = \"http://\";\n }\n if (!isCorrectDomain(domain2)) {\n return false;\n }\n const parts = splitUrl(domain2 + path2);\n if (!parts[0]) return false;\n const result = {\n type: \"link\",\n title: null,\n url: prefix + protocol + parts[0],\n children: [{ type: \"text\", value: protocol + parts[0] }]\n };\n if (parts[1]) {\n return [result, { type: \"text\", value: parts[1] }];\n }\n return result;\n}\nfunction findEmail(_, atext, label, match) {\n if (\n // Not an expected previous character.\n !previous(match, true) || // Label ends in not allowed character.\n /[-\\d_]$/.test(label)\n ) {\n return false;\n }\n return {\n type: \"link\",\n title: null,\n url: \"mailto:\" + atext + \"@\" + label,\n children: [{ type: \"text\", value: atext + \"@\" + label }]\n };\n}\nfunction isCorrectDomain(domain2) {\n const parts = domain2.split(\".\");\n if (parts.length < 2 || parts[parts.length - 1] && (/_/.test(parts[parts.length - 1]) || !/[a-zA-Z\\d]/.test(parts[parts.length - 1])) || parts[parts.length - 2] && (/_/.test(parts[parts.length - 2]) || !/[a-zA-Z\\d]/.test(parts[parts.length - 2]))) {\n return false;\n }\n return true;\n}\nfunction splitUrl(url) {\n const trailExec = /[!\"&'),.:;<>?\\]}]+$/.exec(url);\n if (!trailExec) {\n return [url, void 0];\n }\n url = url.slice(0, trailExec.index);\n let trail2 = trailExec[0];\n let closingParenIndex = trail2.indexOf(\")\");\n const openingParens = ccount(url, \"(\");\n let closingParens = ccount(url, \")\");\n while (closingParenIndex !== -1 && openingParens > closingParens) {\n url += trail2.slice(0, closingParenIndex + 1);\n trail2 = trail2.slice(closingParenIndex + 1);\n closingParenIndex = trail2.indexOf(\")\");\n closingParens++;\n }\n return [url, trail2];\n}\nfunction previous(match, email) {\n const code2 = match.input.charCodeAt(match.index - 1);\n return (match.index === 0 || unicodeWhitespace(code2) || unicodePunctuation(code2)) && (!email || code2 !== 47);\n}\nfunction normalizeIdentifier(value) {\n return value.replace(/[\\t\\n\\r ]+/g, \" \").replace(/^ | $/g, \"\").toLowerCase().toUpperCase();\n}\nfootnoteReference.peek = footnoteReferencePeek;\nfunction gfmFootnoteFromMarkdown() {\n return {\n enter: {\n gfmFootnoteDefinition: enterFootnoteDefinition,\n gfmFootnoteDefinitionLabelString: enterFootnoteDefinitionLabelString,\n gfmFootnoteCall: enterFootnoteCall,\n gfmFootnoteCallString: enterFootnoteCallString\n },\n exit: {\n gfmFootnoteDefinition: exitFootnoteDefinition,\n gfmFootnoteDefinitionLabelString: exitFootnoteDefinitionLabelString,\n gfmFootnoteCall: exitFootnoteCall,\n gfmFootnoteCallString: exitFootnoteCallString\n }\n };\n}\nfunction gfmFootnoteToMarkdown() {\n return {\n // This is on by default already.\n unsafe: [{ character: \"[\", inConstruct: [\"phrasing\", \"label\", \"reference\"] }],\n handlers: { footnoteDefinition, footnoteReference }\n };\n}\nfunction enterFootnoteDefinition(token) {\n this.enter(\n { type: \"footnoteDefinition\", identifier: \"\", label: \"\", children: [] },\n token\n );\n}\nfunction enterFootnoteDefinitionLabelString() {\n this.buffer();\n}\nfunction exitFootnoteDefinitionLabelString(token) {\n const label = this.resume();\n const node = this.stack[this.stack.length - 1];\n ok$1(node.type === \"footnoteDefinition\");\n node.label = label;\n node.identifier = normalizeIdentifier(\n this.sliceSerialize(token)\n ).toLowerCase();\n}\nfunction exitFootnoteDefinition(token) {\n this.exit(token);\n}\nfunction enterFootnoteCall(token) {\n this.enter({ type: \"footnoteReference\", identifier: \"\", label: \"\" }, token);\n}\nfunction enterFootnoteCallString() {\n this.buffer();\n}\nfunction exitFootnoteCallString(token) {\n const label = this.resume();\n const node = this.stack[this.stack.length - 1];\n ok$1(node.type === \"footnoteReference\");\n node.label = label;\n node.identifier = normalizeIdentifier(\n this.sliceSerialize(token)\n ).toLowerCase();\n}\nfunction exitFootnoteCall(token) {\n this.exit(token);\n}\nfunction footnoteReference(node, _, state, info) {\n const tracker = state.createTracker(info);\n let value = tracker.move(\"[^\");\n const exit2 = state.enter(\"footnoteReference\");\n const subexit = state.enter(\"reference\");\n value += tracker.move(\n state.safe(state.associationId(node), {\n ...tracker.current(),\n before: value,\n after: \"]\"\n })\n );\n subexit();\n exit2();\n value += tracker.move(\"]\");\n return value;\n}\nfunction footnoteReferencePeek() {\n return \"[\";\n}\nfunction footnoteDefinition(node, _, state, info) {\n const tracker = state.createTracker(info);\n let value = tracker.move(\"[^\");\n const exit2 = state.enter(\"footnoteDefinition\");\n const subexit = state.enter(\"label\");\n value += tracker.move(\n state.safe(state.associationId(node), {\n ...tracker.current(),\n before: value,\n after: \"]\"\n })\n );\n subexit();\n value += tracker.move(\n \"]:\" + (node.children && node.children.length > 0 ? \" \" : \"\")\n );\n tracker.shift(4);\n value += tracker.move(\n state.indentLines(state.containerFlow(node, tracker.current()), map$2)\n );\n exit2();\n return value;\n}\nfunction map$2(line, index, blank) {\n if (index === 0) {\n return line;\n }\n return (blank ? \"\" : \" \") + line;\n}\nconst constructsWithoutStrikethrough = [\n \"autolink\",\n \"destinationLiteral\",\n \"destinationRaw\",\n \"reference\",\n \"titleQuote\",\n \"titleApostrophe\"\n];\nhandleDelete.peek = peekDelete;\nfunction gfmStrikethroughFromMarkdown() {\n return {\n canContainEols: [\"delete\"],\n enter: { strikethrough: enterStrikethrough },\n exit: { strikethrough: exitStrikethrough }\n };\n}\nfunction gfmStrikethroughToMarkdown() {\n return {\n unsafe: [\n {\n character: \"~\",\n inConstruct: \"phrasing\",\n notInConstruct: constructsWithoutStrikethrough\n }\n ],\n handlers: { delete: handleDelete }\n };\n}\nfunction enterStrikethrough(token) {\n this.enter({ type: \"delete\", children: [] }, token);\n}\nfunction exitStrikethrough(token) {\n this.exit(token);\n}\nfunction handleDelete(node, _, state, info) {\n const tracker = state.createTracker(info);\n const exit2 = state.enter(\"strikethrough\");\n let value = tracker.move(\"~~\");\n value += state.containerPhrasing(node, {\n ...tracker.current(),\n before: value,\n after: \"~\"\n });\n value += tracker.move(\"~~\");\n exit2();\n return value;\n}\nfunction peekDelete() {\n return \"~\";\n}\nfunction markdownTable(table, options = {}) {\n const align = (options.align || []).concat();\n const stringLength = options.stringLength || defaultStringLength;\n const alignments = [];\n const cellMatrix = [];\n const sizeMatrix = [];\n const longestCellByColumn = [];\n let mostCellsPerRow = 0;\n let rowIndex = -1;\n while (++rowIndex < table.length) {\n const row2 = [];\n const sizes2 = [];\n let columnIndex2 = -1;\n if (table[rowIndex].length > mostCellsPerRow) {\n mostCellsPerRow = table[rowIndex].length;\n }\n while (++columnIndex2 < table[rowIndex].length) {\n const cell = serialize(table[rowIndex][columnIndex2]);\n if (options.alignDelimiters !== false) {\n const size = stringLength(cell);\n sizes2[columnIndex2] = size;\n if (longestCellByColumn[columnIndex2] === void 0 || size > longestCellByColumn[columnIndex2]) {\n longestCellByColumn[columnIndex2] = size;\n }\n }\n row2.push(cell);\n }\n cellMatrix[rowIndex] = row2;\n sizeMatrix[rowIndex] = sizes2;\n }\n let columnIndex = -1;\n if (typeof align === \"object\" && \"length\" in align) {\n while (++columnIndex < mostCellsPerRow) {\n alignments[columnIndex] = toAlignment(align[columnIndex]);\n }\n } else {\n const code2 = toAlignment(align);\n while (++columnIndex < mostCellsPerRow) {\n alignments[columnIndex] = code2;\n }\n }\n columnIndex = -1;\n const row = [];\n const sizes = [];\n while (++columnIndex < mostCellsPerRow) {\n const code2 = alignments[columnIndex];\n let before = \"\";\n let after = \"\";\n if (code2 === 99) {\n before = \":\";\n after = \":\";\n } else if (code2 === 108) {\n before = \":\";\n } else if (code2 === 114) {\n after = \":\";\n }\n let size = options.alignDelimiters === false ? 1 : Math.max(\n 1,\n longestCellByColumn[columnIndex] - before.length - after.length\n );\n const cell = before + \"-\".repeat(size) + after;\n if (options.alignDelimiters !== false) {\n size = before.length + size + after.length;\n if (size > longestCellByColumn[columnIndex]) {\n longestCellByColumn[columnIndex] = size;\n }\n sizes[columnIndex] = size;\n }\n row[columnIndex] = cell;\n }\n cellMatrix.splice(1, 0, row);\n sizeMatrix.splice(1, 0, sizes);\n rowIndex = -1;\n const lines = [];\n while (++rowIndex < cellMatrix.length) {\n const row2 = cellMatrix[rowIndex];\n const sizes2 = sizeMatrix[rowIndex];\n columnIndex = -1;\n const line = [];\n while (++columnIndex < mostCellsPerRow) {\n const cell = row2[columnIndex] || \"\";\n let before = \"\";\n let after = \"\";\n if (options.alignDelimiters !== false) {\n const size = longestCellByColumn[columnIndex] - (sizes2[columnIndex] || 0);\n const code2 = alignments[columnIndex];\n if (code2 === 114) {\n before = \" \".repeat(size);\n } else if (code2 === 99) {\n if (size % 2) {\n before = \" \".repeat(size / 2 + 0.5);\n after = \" \".repeat(size / 2 - 0.5);\n } else {\n before = \" \".repeat(size / 2);\n after = before;\n }\n } else {\n after = \" \".repeat(size);\n }\n }\n if (options.delimiterStart !== false && !columnIndex) {\n line.push(\"|\");\n }\n if (options.padding !== false && // Don’t add the opening space if we’re not aligning and the cell is\n // empty: there will be a closing space.\n !(options.alignDelimiters === false && cell === \"\") && (options.delimiterStart !== false || columnIndex)) {\n line.push(\" \");\n }\n if (options.alignDelimiters !== false) {\n line.push(before);\n }\n line.push(cell);\n if (options.alignDelimiters !== false) {\n line.push(after);\n }\n if (options.padding !== false) {\n line.push(\" \");\n }\n if (options.delimiterEnd !== false || columnIndex !== mostCellsPerRow - 1) {\n line.push(\"|\");\n }\n }\n lines.push(\n options.delimiterEnd === false ? line.join(\"\").replace(/ +$/, \"\") : line.join(\"\")\n );\n }\n return lines.join(\"\\n\");\n}\nfunction serialize(value) {\n return value === null || value === void 0 ? \"\" : String(value);\n}\nfunction defaultStringLength(value) {\n return value.length;\n}\nfunction toAlignment(value) {\n const code2 = typeof value === \"string\" ? value.codePointAt(0) : 0;\n return code2 === 67 || code2 === 99 ? 99 : code2 === 76 || code2 === 108 ? 108 : code2 === 82 || code2 === 114 ? 114 : 0;\n}\nfunction blockquote(node, _, state, info) {\n const exit2 = state.enter(\"blockquote\");\n const tracker = state.createTracker(info);\n tracker.move(\"> \");\n tracker.shift(2);\n const value = state.indentLines(\n state.containerFlow(node, tracker.current()),\n map$1\n );\n exit2();\n return value;\n}\nfunction map$1(line, _, blank) {\n return \">\" + (blank ? \"\" : \" \") + line;\n}\nfunction patternInScope(stack, pattern) {\n return listInScope(stack, pattern.inConstruct, true) && !listInScope(stack, pattern.notInConstruct, false);\n}\nfunction listInScope(stack, list2, none) {\n if (typeof list2 === \"string\") {\n list2 = [list2];\n }\n if (!list2 || list2.length === 0) {\n return none;\n }\n let index = -1;\n while (++index < list2.length) {\n if (stack.includes(list2[index])) {\n return true;\n }\n }\n return false;\n}\nfunction hardBreak(_, _1, state, info) {\n let index = -1;\n while (++index < state.unsafe.length) {\n if (state.unsafe[index].character === \"\\n\" && patternInScope(state.stack, state.unsafe[index])) {\n return /[ \\t]/.test(info.before) ? \"\" : \" \";\n }\n }\n return \"\\\\\\n\";\n}\nfunction longestStreak(value, substring) {\n const source = String(value);\n let index = source.indexOf(substring);\n let expected = index;\n let count = 0;\n let max = 0;\n if (typeof substring !== \"string\") {\n throw new TypeError(\"Expected substring\");\n }\n while (index !== -1) {\n if (index === expected) {\n if (++count > max) {\n max = count;\n }\n } else {\n count = 1;\n }\n expected = index + substring.length;\n index = source.indexOf(substring, expected);\n }\n return max;\n}\nfunction formatCodeAsIndented(node, state) {\n return Boolean(\n state.options.fences === false && node.value && // If there’s no info…\n !node.lang && // And there’s a non-whitespace character…\n /[^ \\r\\n]/.test(node.value) && // And the value doesn’t start or end in a blank…\n !/^[\\t ]*(?:[\\r\\n]|$)|(?:^|[\\r\\n])[\\t ]*$/.test(node.value)\n );\n}\nfunction checkFence(state) {\n const marker = state.options.fence || \"`\";\n if (marker !== \"`\" && marker !== \"~\") {\n throw new Error(\n \"Cannot serialize code with `\" + marker + \"` for `options.fence`, expected `` ` `` or `~`\"\n );\n }\n return marker;\n}\nfunction code$1(node, _, state, info) {\n const marker = checkFence(state);\n const raw = node.value || \"\";\n const suffix = marker === \"`\" ? \"GraveAccent\" : \"Tilde\";\n if (formatCodeAsIndented(node, state)) {\n const exit3 = state.enter(\"codeIndented\");\n const value2 = state.indentLines(raw, map);\n exit3();\n return value2;\n }\n const tracker = state.createTracker(info);\n const sequence = marker.repeat(Math.max(longestStreak(raw, marker) + 1, 3));\n const exit2 = state.enter(\"codeFenced\");\n let value = tracker.move(sequence);\n if (node.lang) {\n const subexit = state.enter(`codeFencedLang${suffix}`);\n value += tracker.move(\n state.safe(node.lang, {\n before: value,\n after: \" \",\n encode: [\"`\"],\n ...tracker.current()\n })\n );\n subexit();\n }\n if (node.lang && node.meta) {\n const subexit = state.enter(`codeFencedMeta${suffix}`);\n value += tracker.move(\" \");\n value += tracker.move(\n state.safe(node.meta, {\n before: value,\n after: \"\\n\",\n encode: [\"`\"],\n ...tracker.current()\n })\n );\n subexit();\n }\n value += tracker.move(\"\\n\");\n if (raw) {\n value += tracker.move(raw + \"\\n\");\n }\n value += tracker.move(sequence);\n exit2();\n return value;\n}\nfunction map(line, _, blank) {\n return (blank ? \"\" : \" \") + line;\n}\nfunction checkQuote(state) {\n const marker = state.options.quote || '\"';\n if (marker !== '\"' && marker !== \"'\") {\n throw new Error(\n \"Cannot serialize title with `\" + marker + \"` for `options.quote`, expected `\\\"`, or `'`\"\n );\n }\n return marker;\n}\nfunction definition(node, _, state, info) {\n const quote = checkQuote(state);\n const suffix = quote === '\"' ? \"Quote\" : \"Apostrophe\";\n const exit2 = state.enter(\"definition\");\n let subexit = state.enter(\"label\");\n const tracker = state.createTracker(info);\n let value = tracker.move(\"[\");\n value += tracker.move(\n state.safe(state.associationId(node), {\n before: value,\n after: \"]\",\n ...tracker.current()\n })\n );\n value += tracker.move(\"]: \");\n subexit();\n if (\n // If there’s no url, or…\n !node.url || // If there are control characters or whitespace.\n /[\\0- \\u007F]/.test(node.url)\n ) {\n subexit = state.enter(\"destinationLiteral\");\n value += tracker.move(\"<\");\n value += tracker.move(\n state.safe(node.url, { before: value, after: \">\", ...tracker.current() })\n );\n value += tracker.move(\">\");\n } else {\n subexit = state.enter(\"destinationRaw\");\n value += tracker.move(\n state.safe(node.url, {\n before: value,\n after: node.title ? \" \" : \"\\n\",\n ...tracker.current()\n })\n );\n }\n subexit();\n if (node.title) {\n subexit = state.enter(`title${suffix}`);\n value += tracker.move(\" \" + quote);\n value += tracker.move(\n state.safe(node.title, {\n before: value,\n after: quote,\n ...tracker.current()\n })\n );\n value += tracker.move(quote);\n subexit();\n }\n exit2();\n return value;\n}\nfunction checkEmphasis(state) {\n const marker = state.options.emphasis || \"*\";\n if (marker !== \"*\" && marker !== \"_\") {\n throw new Error(\n \"Cannot serialize emphasis with `\" + marker + \"` for `options.emphasis`, expected `*`, or `_`\"\n );\n }\n return marker;\n}\nfunction encodeCharacterReference(code2) {\n return \"\" + code2.toString(16).toUpperCase() + \";\";\n}\nfunction classifyCharacter(code2) {\n if (code2 === null || markdownLineEndingOrSpace(code2) || unicodeWhitespace(code2)) {\n return 1;\n }\n if (unicodePunctuation(code2)) {\n return 2;\n }\n}\nfunction encodeInfo(outside, inside, marker) {\n const outsideKind = classifyCharacter(outside);\n const insideKind = classifyCharacter(inside);\n if (outsideKind === void 0) {\n return insideKind === void 0 ? (\n // Letter inside:\n // we have to encode *both* letters for `_` as it is looser.\n // it already forms for `*` (and GFMs `~`).\n marker === \"_\" ? { inside: true, outside: true } : { inside: false, outside: false }\n ) : insideKind === 1 ? (\n // Whitespace inside: encode both (letter, whitespace).\n { inside: true, outside: true }\n ) : (\n // Punctuation inside: encode outer (letter)\n { inside: false, outside: true }\n );\n }\n if (outsideKind === 1) {\n return insideKind === void 0 ? (\n // Letter inside: already forms.\n { inside: false, outside: false }\n ) : insideKind === 1 ? (\n // Whitespace inside: encode both (whitespace).\n { inside: true, outside: true }\n ) : (\n // Punctuation inside: already forms.\n { inside: false, outside: false }\n );\n }\n return insideKind === void 0 ? (\n // Letter inside: already forms.\n { inside: false, outside: false }\n ) : insideKind === 1 ? (\n // Whitespace inside: encode inner (whitespace).\n { inside: true, outside: false }\n ) : (\n // Punctuation inside: already forms.\n { inside: false, outside: false }\n );\n}\nemphasis.peek = emphasisPeek;\nfunction emphasis(node, _, state, info) {\n const marker = checkEmphasis(state);\n const exit2 = state.enter(\"emphasis\");\n const tracker = state.createTracker(info);\n const before = tracker.move(marker);\n let between = tracker.move(\n state.containerPhrasing(node, {\n after: marker,\n before,\n ...tracker.current()\n })\n );\n const betweenHead = between.charCodeAt(0);\n const open = encodeInfo(\n info.before.charCodeAt(info.before.length - 1),\n betweenHead,\n marker\n );\n if (open.inside) {\n between = encodeCharacterReference(betweenHead) + between.slice(1);\n }\n const betweenTail = between.charCodeAt(between.length - 1);\n const close = encodeInfo(info.after.charCodeAt(0), betweenTail, marker);\n if (close.inside) {\n between = between.slice(0, -1) + encodeCharacterReference(betweenTail);\n }\n const after = tracker.move(marker);\n exit2();\n state.attentionEncodeSurroundingInfo = {\n after: close.outside,\n before: open.outside\n };\n return before + between + after;\n}\nfunction emphasisPeek(_, _1, state) {\n return state.options.emphasis || \"*\";\n}\nfunction visit(tree, testOrVisitor, visitorOrReverse, maybeReverse) {\n let reverse;\n let test;\n let visitor;\n if (typeof testOrVisitor === \"function\" && typeof visitorOrReverse !== \"function\") {\n test = void 0;\n visitor = testOrVisitor;\n reverse = visitorOrReverse;\n } else {\n test = testOrVisitor;\n visitor = visitorOrReverse;\n reverse = maybeReverse;\n }\n visitParents(tree, test, overload, reverse);\n function overload(node, parents) {\n const parent = parents[parents.length - 1];\n const index = parent ? parent.children.indexOf(node) : void 0;\n return visitor(node, index, parent);\n }\n}\nfunction formatHeadingAsSetext(node, state) {\n let literalWithBreak = false;\n visit(node, function(node2) {\n if (\"value\" in node2 && /\\r?\\n|\\r/.test(node2.value) || node2.type === \"break\") {\n literalWithBreak = true;\n return EXIT;\n }\n });\n return Boolean(\n (!node.depth || node.depth < 3) && toString(node) && (state.options.setext || literalWithBreak)\n );\n}\nfunction heading(node, _, state, info) {\n const rank = Math.max(Math.min(6, node.depth || 1), 1);\n const tracker = state.createTracker(info);\n if (formatHeadingAsSetext(node, state)) {\n const exit3 = state.enter(\"headingSetext\");\n const subexit2 = state.enter(\"phrasing\");\n const value2 = state.containerPhrasing(node, {\n ...tracker.current(),\n before: \"\\n\",\n after: \"\\n\"\n });\n subexit2();\n exit3();\n return value2 + \"\\n\" + (rank === 1 ? \"=\" : \"-\").repeat(\n // The whole size…\n value2.length - // Minus the position of the character after the last EOL (or\n // 0 if there is none)…\n (Math.max(value2.lastIndexOf(\"\\r\"), value2.lastIndexOf(\"\\n\")) + 1)\n );\n }\n const sequence = \"#\".repeat(rank);\n const exit2 = state.enter(\"headingAtx\");\n const subexit = state.enter(\"phrasing\");\n tracker.move(sequence + \" \");\n let value = state.containerPhrasing(node, {\n before: \"# \",\n after: \"\\n\",\n ...tracker.current()\n });\n if (/^[\\t ]/.test(value)) {\n value = encodeCharacterReference(value.charCodeAt(0)) + value.slice(1);\n }\n value = value ? sequence + \" \" + value : sequence;\n if (state.options.closeAtx) {\n value += \" \" + sequence;\n }\n subexit();\n exit2();\n return value;\n}\nhtml.peek = htmlPeek;\nfunction html(node) {\n return node.value || \"\";\n}\nfunction htmlPeek() {\n return \"<\";\n}\nimage.peek = imagePeek;\nfunction image(node, _, state, info) {\n const quote = checkQuote(state);\n const suffix = quote === '\"' ? \"Quote\" : \"Apostrophe\";\n const exit2 = state.enter(\"image\");\n let subexit = state.enter(\"label\");\n const tracker = state.createTracker(info);\n let value = tracker.move(\"![\");\n value += tracker.move(\n state.safe(node.alt, { before: value, after: \"]\", ...tracker.current() })\n );\n value += tracker.move(\"](\");\n subexit();\n if (\n // If there’s no url but there is a title…\n !node.url && node.title || // If there are control characters or whitespace.\n /[\\0- \\u007F]/.test(node.url)\n ) {\n subexit = state.enter(\"destinationLiteral\");\n value += tracker.move(\"<\");\n value += tracker.move(\n state.safe(node.url, { before: value, after: \">\", ...tracker.current() })\n );\n value += tracker.move(\">\");\n } else {\n subexit = state.enter(\"destinationRaw\");\n value += tracker.move(\n state.safe(node.url, {\n before: value,\n after: node.title ? \" \" : \")\",\n ...tracker.current()\n })\n );\n }\n subexit();\n if (node.title) {\n subexit = state.enter(`title${suffix}`);\n value += tracker.move(\" \" + quote);\n value += tracker.move(\n state.safe(node.title, {\n before: value,\n after: quote,\n ...tracker.current()\n })\n );\n value += tracker.move(quote);\n subexit();\n }\n value += tracker.move(\")\");\n exit2();\n return value;\n}\nfunction imagePeek() {\n return \"!\";\n}\nimageReference.peek = imageReferencePeek;\nfunction imageReference(node, _, state, info) {\n const type = node.referenceType;\n const exit2 = state.enter(\"imageReference\");\n let subexit = state.enter(\"label\");\n const tracker = state.createTracker(info);\n let value = tracker.move(\"![\");\n const alt = state.safe(node.alt, {\n before: value,\n after: \"]\",\n ...tracker.current()\n });\n value += tracker.move(alt + \"][\");\n subexit();\n const stack = state.stack;\n state.stack = [];\n subexit = state.enter(\"reference\");\n const reference = state.safe(state.associationId(node), {\n before: value,\n after: \"]\",\n ...tracker.current()\n });\n subexit();\n state.stack = stack;\n exit2();\n if (type === \"full\" || !alt || alt !== reference) {\n value += tracker.move(reference + \"]\");\n } else if (type === \"shortcut\") {\n value = value.slice(0, -1);\n } else {\n value += tracker.move(\"]\");\n }\n return value;\n}\nfunction imageReferencePeek() {\n return \"!\";\n}\ninlineCode.peek = inlineCodePeek;\nfunction inlineCode(node, _, state) {\n let value = node.value || \"\";\n let sequence = \"`\";\n let index = -1;\n while (new RegExp(\"(^|[^`])\" + sequence + \"([^`]|$)\").test(value)) {\n sequence += \"`\";\n }\n if (/[^ \\r\\n]/.test(value) && (/^[ \\r\\n]/.test(value) && /[ \\r\\n]$/.test(value) || /^`|`$/.test(value))) {\n value = \" \" + value + \" \";\n }\n while (++index < state.unsafe.length) {\n const pattern = state.unsafe[index];\n const expression = state.compilePattern(pattern);\n let match;\n if (!pattern.atBreak) continue;\n while (match = expression.exec(value)) {\n let position = match.index;\n if (value.charCodeAt(position) === 10 && value.charCodeAt(position - 1) === 13) {\n position--;\n }\n value = value.slice(0, position) + \" \" + value.slice(match.index + 1);\n }\n }\n return sequence + value + sequence;\n}\nfunction inlineCodePeek() {\n return \"`\";\n}\nfunction formatLinkAsAutolink(node, state) {\n const raw = toString(node);\n return Boolean(\n !state.options.resourceLink && // If there’s a url…\n node.url && // And there’s a no title…\n !node.title && // And the content of `node` is a single text node…\n node.children && node.children.length === 1 && node.children[0].type === \"text\" && // And if the url is the same as the content…\n (raw === node.url || \"mailto:\" + raw === node.url) && // And that starts w/ a protocol…\n /^[a-z][a-z+.-]+:/i.test(node.url) && // And that doesn’t contain ASCII control codes (character escapes and\n // references don’t work), space, or angle brackets…\n !/[\\0- <>\\u007F]/.test(node.url)\n );\n}\nlink.peek = linkPeek;\nfunction link(node, _, state, info) {\n const quote = checkQuote(state);\n const suffix = quote === '\"' ? \"Quote\" : \"Apostrophe\";\n const tracker = state.createTracker(info);\n let exit2;\n let subexit;\n if (formatLinkAsAutolink(node, state)) {\n const stack = state.stack;\n state.stack = [];\n exit2 = state.enter(\"autolink\");\n let value2 = tracker.move(\"<\");\n value2 += tracker.move(\n state.containerPhrasing(node, {\n before: value2,\n after: \">\",\n ...tracker.current()\n })\n );\n value2 += tracker.move(\">\");\n exit2();\n state.stack = stack;\n return value2;\n }\n exit2 = state.enter(\"link\");\n subexit = state.enter(\"label\");\n let value = tracker.move(\"[\");\n value += tracker.move(\n state.containerPhrasing(node, {\n before: value,\n after: \"](\",\n ...tracker.current()\n })\n );\n value += tracker.move(\"](\");\n subexit();\n if (\n // If there’s no url but there is a title…\n !node.url && node.title || // If there are control characters or whitespace.\n /[\\0- \\u007F]/.test(node.url)\n ) {\n subexit = state.enter(\"destinationLiteral\");\n value += tracker.move(\"<\");\n value += tracker.move(\n state.safe(node.url, { before: value, after: \">\", ...tracker.current() })\n );\n value += tracker.move(\">\");\n } else {\n subexit = state.enter(\"destinationRaw\");\n value += tracker.move(\n state.safe(node.url, {\n before: value,\n after: node.title ? \" \" : \")\",\n ...tracker.current()\n })\n );\n }\n subexit();\n if (node.title) {\n subexit = state.enter(`title${suffix}`);\n value += tracker.move(\" \" + quote);\n value += tracker.move(\n state.safe(node.title, {\n before: value,\n after: quote,\n ...tracker.current()\n })\n );\n value += tracker.move(quote);\n subexit();\n }\n value += tracker.move(\")\");\n exit2();\n return value;\n}\nfunction linkPeek(node, _, state) {\n return formatLinkAsAutolink(node, state) ? \"<\" : \"[\";\n}\nlinkReference.peek = linkReferencePeek;\nfunction linkReference(node, _, state, info) {\n const type = node.referenceType;\n const exit2 = state.enter(\"linkReference\");\n let subexit = state.enter(\"label\");\n const tracker = state.createTracker(info);\n let value = tracker.move(\"[\");\n const text2 = state.containerPhrasing(node, {\n before: value,\n after: \"]\",\n ...tracker.current()\n });\n value += tracker.move(text2 + \"][\");\n subexit();\n const stack = state.stack;\n state.stack = [];\n subexit = state.enter(\"reference\");\n const reference = state.safe(state.associationId(node), {\n before: value,\n after: \"]\",\n ...tracker.current()\n });\n subexit();\n state.stack = stack;\n exit2();\n if (type === \"full\" || !text2 || text2 !== reference) {\n value += tracker.move(reference + \"]\");\n } else if (type === \"shortcut\") {\n value = value.slice(0, -1);\n } else {\n value += tracker.move(\"]\");\n }\n return value;\n}\nfunction linkReferencePeek() {\n return \"[\";\n}\nfunction checkBullet(state) {\n const marker = state.options.bullet || \"*\";\n if (marker !== \"*\" && marker !== \"+\" && marker !== \"-\") {\n throw new Error(\n \"Cannot serialize items with `\" + marker + \"` for `options.bullet`, expected `*`, `+`, or `-`\"\n );\n }\n return marker;\n}\nfunction checkBulletOther(state) {\n const bullet = checkBullet(state);\n const bulletOther = state.options.bulletOther;\n if (!bulletOther) {\n return bullet === \"*\" ? \"-\" : \"*\";\n }\n if (bulletOther !== \"*\" && bulletOther !== \"+\" && bulletOther !== \"-\") {\n throw new Error(\n \"Cannot serialize items with `\" + bulletOther + \"` for `options.bulletOther`, expected `*`, `+`, or `-`\"\n );\n }\n if (bulletOther === bullet) {\n throw new Error(\n \"Expected `bullet` (`\" + bullet + \"`) and `bulletOther` (`\" + bulletOther + \"`) to be different\"\n );\n }\n return bulletOther;\n}\nfunction checkBulletOrdered(state) {\n const marker = state.options.bulletOrdered || \".\";\n if (marker !== \".\" && marker !== \")\") {\n throw new Error(\n \"Cannot serialize items with `\" + marker + \"` for `options.bulletOrdered`, expected `.` or `)`\"\n );\n }\n return marker;\n}\nfunction checkRule(state) {\n const marker = state.options.rule || \"*\";\n if (marker !== \"*\" && marker !== \"-\" && marker !== \"_\") {\n throw new Error(\n \"Cannot serialize rules with `\" + marker + \"` for `options.rule`, expected `*`, `-`, or `_`\"\n );\n }\n return marker;\n}\nfunction list(node, parent, state, info) {\n const exit2 = state.enter(\"list\");\n const bulletCurrent = state.bulletCurrent;\n let bullet = node.ordered ? checkBulletOrdered(state) : checkBullet(state);\n const bulletOther = node.ordered ? bullet === \".\" ? \")\" : \".\" : checkBulletOther(state);\n let useDifferentMarker = parent && state.bulletLastUsed ? bullet === state.bulletLastUsed : false;\n if (!node.ordered) {\n const firstListItem = node.children ? node.children[0] : void 0;\n if (\n // Bullet could be used as a thematic break marker:\n (bullet === \"*\" || bullet === \"-\") && // Empty first list item:\n firstListItem && (!firstListItem.children || !firstListItem.children[0]) && // Directly in two other list items:\n state.stack[state.stack.length - 1] === \"list\" && state.stack[state.stack.length - 2] === \"listItem\" && state.stack[state.stack.length - 3] === \"list\" && state.stack[state.stack.length - 4] === \"listItem\" && // That are each the first child.\n state.indexStack[state.indexStack.length - 1] === 0 && state.indexStack[state.indexStack.length - 2] === 0 && state.indexStack[state.indexStack.length - 3] === 0\n ) {\n useDifferentMarker = true;\n }\n if (checkRule(state) === bullet && firstListItem) {\n let index = -1;\n while (++index < node.children.length) {\n const item = node.children[index];\n if (item && item.type === \"listItem\" && item.children && item.children[0] && item.children[0].type === \"thematicBreak\") {\n useDifferentMarker = true;\n break;\n }\n }\n }\n }\n if (useDifferentMarker) {\n bullet = bulletOther;\n }\n state.bulletCurrent = bullet;\n const value = state.containerFlow(node, info);\n state.bulletLastUsed = bullet;\n state.bulletCurrent = bulletCurrent;\n exit2();\n return value;\n}\nfunction checkListItemIndent(state) {\n const style = state.options.listItemIndent || \"one\";\n if (style !== \"tab\" && style !== \"one\" && style !== \"mixed\") {\n throw new Error(\n \"Cannot serialize items with `\" + style + \"` for `options.listItemIndent`, expected `tab`, `one`, or `mixed`\"\n );\n }\n return style;\n}\nfunction listItem(node, parent, state, info) {\n const listItemIndent = checkListItemIndent(state);\n let bullet = state.bulletCurrent || checkBullet(state);\n if (parent && parent.type === \"list\" && parent.ordered) {\n bullet = (typeof parent.start === \"number\" && parent.start > -1 ? parent.start : 1) + (state.options.incrementListMarker === false ? 0 : parent.children.indexOf(node)) + bullet;\n }\n let size = bullet.length + 1;\n if (listItemIndent === \"tab\" || listItemIndent === \"mixed\" && (parent && parent.type === \"list\" && parent.spread || node.spread)) {\n size = Math.ceil(size / 4) * 4;\n }\n const tracker = state.createTracker(info);\n tracker.move(bullet + \" \".repeat(size - bullet.length));\n tracker.shift(size);\n const exit2 = state.enter(\"listItem\");\n const value = state.indentLines(\n state.containerFlow(node, tracker.current()),\n map2\n );\n exit2();\n return value;\n function map2(line, index, blank) {\n if (index) {\n return (blank ? \"\" : \" \".repeat(size)) + line;\n }\n return (blank ? bullet : bullet + \" \".repeat(size - bullet.length)) + line;\n }\n}\nfunction paragraph(node, _, state, info) {\n const exit2 = state.enter(\"paragraph\");\n const subexit = state.enter(\"phrasing\");\n const value = state.containerPhrasing(node, info);\n subexit();\n exit2();\n return value;\n}\nconst phrasing = (\n /** @type {(node?: unknown) => node is Exclude} */\n convert([\n \"break\",\n \"delete\",\n \"emphasis\",\n // To do: next major: removed since footnotes were added to GFM.\n \"footnote\",\n \"footnoteReference\",\n \"image\",\n \"imageReference\",\n \"inlineCode\",\n // Enabled by `mdast-util-math`:\n \"inlineMath\",\n \"link\",\n \"linkReference\",\n // Enabled by `mdast-util-mdx`:\n \"mdxJsxTextElement\",\n // Enabled by `mdast-util-mdx`:\n \"mdxTextExpression\",\n \"strong\",\n \"text\",\n // Enabled by `mdast-util-directive`:\n \"textDirective\"\n ])\n);\nfunction root(node, _, state, info) {\n const hasPhrasing = node.children.some(function(d) {\n return phrasing(d);\n });\n const container = hasPhrasing ? state.containerPhrasing : state.containerFlow;\n return container.call(state, node, info);\n}\nfunction checkStrong(state) {\n const marker = state.options.strong || \"*\";\n if (marker !== \"*\" && marker !== \"_\") {\n throw new Error(\n \"Cannot serialize strong with `\" + marker + \"` for `options.strong`, expected `*`, or `_`\"\n );\n }\n return marker;\n}\nstrong.peek = strongPeek;\nfunction strong(node, _, state, info) {\n const marker = checkStrong(state);\n const exit2 = state.enter(\"strong\");\n const tracker = state.createTracker(info);\n const before = tracker.move(marker + marker);\n let between = tracker.move(\n state.containerPhrasing(node, {\n after: marker,\n before,\n ...tracker.current()\n })\n );\n const betweenHead = between.charCodeAt(0);\n const open = encodeInfo(\n info.before.charCodeAt(info.before.length - 1),\n betweenHead,\n marker\n );\n if (open.inside) {\n between = encodeCharacterReference(betweenHead) + between.slice(1);\n }\n const betweenTail = between.charCodeAt(between.length - 1);\n const close = encodeInfo(info.after.charCodeAt(0), betweenTail, marker);\n if (close.inside) {\n between = between.slice(0, -1) + encodeCharacterReference(betweenTail);\n }\n const after = tracker.move(marker + marker);\n exit2();\n state.attentionEncodeSurroundingInfo = {\n after: close.outside,\n before: open.outside\n };\n return before + between + after;\n}\nfunction strongPeek(_, _1, state) {\n return state.options.strong || \"*\";\n}\nfunction text$1(node, _, state, info) {\n return state.safe(node.value, info);\n}\nfunction checkRuleRepetition(state) {\n const repetition = state.options.ruleRepetition || 3;\n if (repetition < 3) {\n throw new Error(\n \"Cannot serialize rules with repetition `\" + repetition + \"` for `options.ruleRepetition`, expected `3` or more\"\n );\n }\n return repetition;\n}\nfunction thematicBreak(_, _1, state) {\n const value = (checkRule(state) + (state.options.ruleSpaces ? \" \" : \"\")).repeat(checkRuleRepetition(state));\n return state.options.ruleSpaces ? value.slice(0, -1) : value;\n}\nconst handle = {\n blockquote,\n break: hardBreak,\n code: code$1,\n definition,\n emphasis,\n hardBreak,\n heading,\n html,\n image,\n imageReference,\n inlineCode,\n link,\n linkReference,\n list,\n listItem,\n paragraph,\n root,\n strong,\n text: text$1,\n thematicBreak\n};\nfunction gfmTableFromMarkdown() {\n return {\n enter: {\n table: enterTable,\n tableData: enterCell,\n tableHeader: enterCell,\n tableRow: enterRow\n },\n exit: {\n codeText: exitCodeText,\n table: exitTable,\n tableData: exit,\n tableHeader: exit,\n tableRow: exit\n }\n };\n}\nfunction enterTable(token) {\n const align = token._align;\n this.enter(\n {\n type: \"table\",\n align: align.map(function(d) {\n return d === \"none\" ? null : d;\n }),\n children: []\n },\n token\n );\n this.data.inTable = true;\n}\nfunction exitTable(token) {\n this.exit(token);\n this.data.inTable = void 0;\n}\nfunction enterRow(token) {\n this.enter({ type: \"tableRow\", children: [] }, token);\n}\nfunction exit(token) {\n this.exit(token);\n}\nfunction enterCell(token) {\n this.enter({ type: \"tableCell\", children: [] }, token);\n}\nfunction exitCodeText(token) {\n let value = this.resume();\n if (this.data.inTable) {\n value = value.replace(/\\\\([\\\\|])/g, replace);\n }\n const node = this.stack[this.stack.length - 1];\n ok$1(node.type === \"inlineCode\");\n node.value = value;\n this.exit(token);\n}\nfunction replace($0, $1) {\n return $1 === \"|\" ? $1 : $0;\n}\nfunction gfmTableToMarkdown(options) {\n const settings = options || {};\n const padding = settings.tableCellPadding;\n const alignDelimiters = settings.tablePipeAlign;\n const stringLength = settings.stringLength;\n const around = padding ? \" \" : \"|\";\n return {\n unsafe: [\n { character: \"\\r\", inConstruct: \"tableCell\" },\n { character: \"\\n\", inConstruct: \"tableCell\" },\n // A pipe, when followed by a tab or space (padding), or a dash or colon\n // (unpadded delimiter row), could result in a table.\n { atBreak: true, character: \"|\", after: \"[\t :-]\" },\n // A pipe in a cell must be encoded.\n { character: \"|\", inConstruct: \"tableCell\" },\n // A colon must be followed by a dash, in which case it could start a\n // delimiter row.\n { atBreak: true, character: \":\", after: \"-\" },\n // A delimiter row can also start with a dash, when followed by more\n // dashes, a colon, or a pipe.\n // This is a stricter version than the built in check for lists, thematic\n // breaks, and setex heading underlines though:\n // \n { atBreak: true, character: \"-\", after: \"[:|-]\" }\n ],\n handlers: {\n inlineCode: inlineCodeWithTable,\n table: handleTable,\n tableCell: handleTableCell,\n tableRow: handleTableRow\n }\n };\n function handleTable(node, _, state, info) {\n return serializeData(handleTableAsData(node, state, info), node.align);\n }\n function handleTableRow(node, _, state, info) {\n const row = handleTableRowAsData(node, state, info);\n const value = serializeData([row]);\n return value.slice(0, value.indexOf(\"\\n\"));\n }\n function handleTableCell(node, _, state, info) {\n const exit2 = state.enter(\"tableCell\");\n const subexit = state.enter(\"phrasing\");\n const value = state.containerPhrasing(node, {\n ...info,\n before: around,\n after: around\n });\n subexit();\n exit2();\n return value;\n }\n function serializeData(matrix, align) {\n return markdownTable(matrix, {\n align,\n // @ts-expect-error: `markdown-table` types should support `null`.\n alignDelimiters,\n // @ts-expect-error: `markdown-table` types should support `null`.\n padding,\n // @ts-expect-error: `markdown-table` types should support `null`.\n stringLength\n });\n }\n function handleTableAsData(node, state, info) {\n const children = node.children;\n let index = -1;\n const result = [];\n const subexit = state.enter(\"table\");\n while (++index < children.length) {\n result[index] = handleTableRowAsData(children[index], state, info);\n }\n subexit();\n return result;\n }\n function handleTableRowAsData(node, state, info) {\n const children = node.children;\n let index = -1;\n const result = [];\n const subexit = state.enter(\"tableRow\");\n while (++index < children.length) {\n result[index] = handleTableCell(children[index], node, state, info);\n }\n subexit();\n return result;\n }\n function inlineCodeWithTable(node, parent, state) {\n let value = handle.inlineCode(node, parent, state);\n if (state.stack.includes(\"tableCell\")) {\n value = value.replace(/\\|/g, \"\\\\$&\");\n }\n return value;\n }\n}\nfunction gfmTaskListItemFromMarkdown() {\n return {\n exit: {\n taskListCheckValueChecked: exitCheck,\n taskListCheckValueUnchecked: exitCheck,\n paragraph: exitParagraphWithTaskListItem\n }\n };\n}\nfunction gfmTaskListItemToMarkdown() {\n return {\n unsafe: [{ atBreak: true, character: \"-\", after: \"[:|-]\" }],\n handlers: { listItem: listItemWithTaskListItem }\n };\n}\nfunction exitCheck(token) {\n const node = this.stack[this.stack.length - 2];\n ok$1(node.type === \"listItem\");\n node.checked = token.type === \"taskListCheckValueChecked\";\n}\nfunction exitParagraphWithTaskListItem(token) {\n const parent = this.stack[this.stack.length - 2];\n if (parent && parent.type === \"listItem\" && typeof parent.checked === \"boolean\") {\n const node = this.stack[this.stack.length - 1];\n ok$1(node.type === \"paragraph\");\n const head = node.children[0];\n if (head && head.type === \"text\") {\n const siblings = parent.children;\n let index = -1;\n let firstParaghraph;\n while (++index < siblings.length) {\n const sibling = siblings[index];\n if (sibling.type === \"paragraph\") {\n firstParaghraph = sibling;\n break;\n }\n }\n if (firstParaghraph === node) {\n head.value = head.value.slice(1);\n if (head.value.length === 0) {\n node.children.shift();\n } else if (node.position && head.position && typeof head.position.start.offset === \"number\") {\n head.position.start.column++;\n head.position.start.offset++;\n node.position.start = Object.assign({}, head.position.start);\n }\n }\n }\n }\n this.exit(token);\n}\nfunction listItemWithTaskListItem(node, parent, state, info) {\n const head = node.children[0];\n const checkable = typeof node.checked === \"boolean\" && head && head.type === \"paragraph\";\n const checkbox = \"[\" + (node.checked ? \"x\" : \" \") + \"] \";\n const tracker = state.createTracker(info);\n if (checkable) {\n tracker.move(checkbox);\n }\n let value = handle.listItem(node, parent, state, {\n ...info,\n ...tracker.current()\n });\n if (checkable) {\n value = value.replace(/^(?:[*+-]|\\d+\\.)([\\r\\n]| {1,3})/, check);\n }\n return value;\n function check($0) {\n return $0 + checkbox;\n }\n}\nfunction gfmFromMarkdown() {\n return [\n gfmAutolinkLiteralFromMarkdown(),\n gfmFootnoteFromMarkdown(),\n gfmStrikethroughFromMarkdown(),\n gfmTableFromMarkdown(),\n gfmTaskListItemFromMarkdown()\n ];\n}\nfunction gfmToMarkdown(options) {\n return {\n extensions: [\n gfmAutolinkLiteralToMarkdown(),\n gfmFootnoteToMarkdown(),\n gfmStrikethroughToMarkdown(),\n gfmTableToMarkdown(options),\n gfmTaskListItemToMarkdown()\n ]\n };\n}\nfunction splice(list2, start, remove, items) {\n const end = list2.length;\n let chunkStart = 0;\n let parameters;\n if (start < 0) {\n start = -start > end ? 0 : end + start;\n } else {\n start = start > end ? end : start;\n }\n remove = remove > 0 ? remove : 0;\n if (items.length < 1e4) {\n parameters = Array.from(items);\n parameters.unshift(start, remove);\n list2.splice(...parameters);\n } else {\n if (remove) list2.splice(start, remove);\n while (chunkStart < items.length) {\n parameters = items.slice(chunkStart, chunkStart + 1e4);\n parameters.unshift(start, 0);\n list2.splice(...parameters);\n chunkStart += 1e4;\n start += 1e4;\n }\n }\n}\nconst hasOwnProperty = {}.hasOwnProperty;\nfunction combineExtensions(extensions) {\n const all = {};\n let index = -1;\n while (++index < extensions.length) {\n syntaxExtension(all, extensions[index]);\n }\n return all;\n}\nfunction syntaxExtension(all, extension) {\n let hook;\n for (hook in extension) {\n const maybe = hasOwnProperty.call(all, hook) ? all[hook] : void 0;\n const left = maybe || (all[hook] = {});\n const right = extension[hook];\n let code2;\n if (right) {\n for (code2 in right) {\n if (!hasOwnProperty.call(left, code2)) left[code2] = [];\n const value = right[code2];\n constructs(\n // @ts-expect-error Looks like a list.\n left[code2],\n Array.isArray(value) ? value : value ? [value] : []\n );\n }\n }\n }\n}\nfunction constructs(existing, list2) {\n let index = -1;\n const before = [];\n while (++index < list2.length) {\n (list2[index].add === \"after\" ? existing : before).push(list2[index]);\n }\n splice(existing, 0, 0, before);\n}\nconst wwwPrefix = {\n tokenize: tokenizeWwwPrefix,\n partial: true\n};\nconst domain = {\n tokenize: tokenizeDomain,\n partial: true\n};\nconst path = {\n tokenize: tokenizePath,\n partial: true\n};\nconst trail = {\n tokenize: tokenizeTrail,\n partial: true\n};\nconst emailDomainDotTrail = {\n tokenize: tokenizeEmailDomainDotTrail,\n partial: true\n};\nconst wwwAutolink = {\n tokenize: tokenizeWwwAutolink,\n previous: previousWww\n};\nconst protocolAutolink = {\n tokenize: tokenizeProtocolAutolink,\n previous: previousProtocol\n};\nconst emailAutolink = {\n tokenize: tokenizeEmailAutolink,\n previous: previousEmail\n};\nconst text = {};\nfunction gfmAutolinkLiteral() {\n return {\n text\n };\n}\nlet code = 48;\nwhile (code < 123) {\n text[code] = emailAutolink;\n code++;\n if (code === 58) code = 65;\n else if (code === 91) code = 97;\n}\ntext[43] = emailAutolink;\ntext[45] = emailAutolink;\ntext[46] = emailAutolink;\ntext[95] = emailAutolink;\ntext[72] = [emailAutolink, protocolAutolink];\ntext[104] = [emailAutolink, protocolAutolink];\ntext[87] = [emailAutolink, wwwAutolink];\ntext[119] = [emailAutolink, wwwAutolink];\nfunction tokenizeEmailAutolink(effects, ok2, nok) {\n const self = this;\n let dot;\n let data;\n return start;\n function start(code2) {\n if (!gfmAtext(code2) || !previousEmail.call(self, self.previous) || previousUnbalanced(self.events)) {\n return nok(code2);\n }\n effects.enter(\"literalAutolink\");\n effects.enter(\"literalAutolinkEmail\");\n return atext(code2);\n }\n function atext(code2) {\n if (gfmAtext(code2)) {\n effects.consume(code2);\n return atext;\n }\n if (code2 === 64) {\n effects.consume(code2);\n return emailDomain;\n }\n return nok(code2);\n }\n function emailDomain(code2) {\n if (code2 === 46) {\n return effects.check(\n emailDomainDotTrail,\n emailDomainAfter,\n emailDomainDot\n )(code2);\n }\n if (code2 === 45 || code2 === 95 || asciiAlphanumeric(code2)) {\n data = true;\n effects.consume(code2);\n return emailDomain;\n }\n return emailDomainAfter(code2);\n }\n function emailDomainDot(code2) {\n effects.consume(code2);\n dot = true;\n return emailDomain;\n }\n function emailDomainAfter(code2) {\n if (data && dot && asciiAlpha(self.previous)) {\n effects.exit(\"literalAutolinkEmail\");\n effects.exit(\"literalAutolink\");\n return ok2(code2);\n }\n return nok(code2);\n }\n}\nfunction tokenizeWwwAutolink(effects, ok2, nok) {\n const self = this;\n return wwwStart;\n function wwwStart(code2) {\n if (code2 !== 87 && code2 !== 119 || !previousWww.call(self, self.previous) || previousUnbalanced(self.events)) {\n return nok(code2);\n }\n effects.enter(\"literalAutolink\");\n effects.enter(\"literalAutolinkWww\");\n return effects.check(\n wwwPrefix,\n effects.attempt(domain, effects.attempt(path, wwwAfter), nok),\n nok\n )(code2);\n }\n function wwwAfter(code2) {\n effects.exit(\"literalAutolinkWww\");\n effects.exit(\"literalAutolink\");\n return ok2(code2);\n }\n}\nfunction tokenizeProtocolAutolink(effects, ok2, nok) {\n const self = this;\n let buffer = \"\";\n let seen = false;\n return protocolStart;\n function protocolStart(code2) {\n if ((code2 === 72 || code2 === 104) && previousProtocol.call(self, self.previous) && !previousUnbalanced(self.events)) {\n effects.enter(\"literalAutolink\");\n effects.enter(\"literalAutolinkHttp\");\n buffer += String.fromCodePoint(code2);\n effects.consume(code2);\n return protocolPrefixInside;\n }\n return nok(code2);\n }\n function protocolPrefixInside(code2) {\n if (asciiAlpha(code2) && buffer.length < 5) {\n buffer += String.fromCodePoint(code2);\n effects.consume(code2);\n return protocolPrefixInside;\n }\n if (code2 === 58) {\n const protocol = buffer.toLowerCase();\n if (protocol === \"http\" || protocol === \"https\") {\n effects.consume(code2);\n return protocolSlashesInside;\n }\n }\n return nok(code2);\n }\n function protocolSlashesInside(code2) {\n if (code2 === 47) {\n effects.consume(code2);\n if (seen) {\n return afterProtocol;\n }\n seen = true;\n return protocolSlashesInside;\n }\n return nok(code2);\n }\n function afterProtocol(code2) {\n return code2 === null || asciiControl(code2) || markdownLineEndingOrSpace(code2) || unicodeWhitespace(code2) || unicodePunctuation(code2) ? nok(code2) : effects.attempt(domain, effects.attempt(path, protocolAfter), nok)(code2);\n }\n function protocolAfter(code2) {\n effects.exit(\"literalAutolinkHttp\");\n effects.exit(\"literalAutolink\");\n return ok2(code2);\n }\n}\nfunction tokenizeWwwPrefix(effects, ok2, nok) {\n let size = 0;\n return wwwPrefixInside;\n function wwwPrefixInside(code2) {\n if ((code2 === 87 || code2 === 119) && size < 3) {\n size++;\n effects.consume(code2);\n return wwwPrefixInside;\n }\n if (code2 === 46 && size === 3) {\n effects.consume(code2);\n return wwwPrefixAfter;\n }\n return nok(code2);\n }\n function wwwPrefixAfter(code2) {\n return code2 === null ? nok(code2) : ok2(code2);\n }\n}\nfunction tokenizeDomain(effects, ok2, nok) {\n let underscoreInLastSegment;\n let underscoreInLastLastSegment;\n let seen;\n return domainInside;\n function domainInside(code2) {\n if (code2 === 46 || code2 === 95) {\n return effects.check(trail, domainAfter, domainAtPunctuation)(code2);\n }\n if (code2 === null || markdownLineEndingOrSpace(code2) || unicodeWhitespace(code2) || code2 !== 45 && unicodePunctuation(code2)) {\n return domainAfter(code2);\n }\n seen = true;\n effects.consume(code2);\n return domainInside;\n }\n function domainAtPunctuation(code2) {\n if (code2 === 95) {\n underscoreInLastSegment = true;\n } else {\n underscoreInLastLastSegment = underscoreInLastSegment;\n underscoreInLastSegment = void 0;\n }\n effects.consume(code2);\n return domainInside;\n }\n function domainAfter(code2) {\n if (underscoreInLastLastSegment || underscoreInLastSegment || !seen) {\n return nok(code2);\n }\n return ok2(code2);\n }\n}\nfunction tokenizePath(effects, ok2) {\n let sizeOpen = 0;\n let sizeClose = 0;\n return pathInside;\n function pathInside(code2) {\n if (code2 === 40) {\n sizeOpen++;\n effects.consume(code2);\n return pathInside;\n }\n if (code2 === 41 && sizeClose < sizeOpen) {\n return pathAtPunctuation(code2);\n }\n if (code2 === 33 || code2 === 34 || code2 === 38 || code2 === 39 || code2 === 41 || code2 === 42 || code2 === 44 || code2 === 46 || code2 === 58 || code2 === 59 || code2 === 60 || code2 === 63 || code2 === 93 || code2 === 95 || code2 === 126) {\n return effects.check(trail, ok2, pathAtPunctuation)(code2);\n }\n if (code2 === null || markdownLineEndingOrSpace(code2) || unicodeWhitespace(code2)) {\n return ok2(code2);\n }\n effects.consume(code2);\n return pathInside;\n }\n function pathAtPunctuation(code2) {\n if (code2 === 41) {\n sizeClose++;\n }\n effects.consume(code2);\n return pathInside;\n }\n}\nfunction tokenizeTrail(effects, ok2, nok) {\n return trail2;\n function trail2(code2) {\n if (code2 === 33 || code2 === 34 || code2 === 39 || code2 === 41 || code2 === 42 || code2 === 44 || code2 === 46 || code2 === 58 || code2 === 59 || code2 === 63 || code2 === 95 || code2 === 126) {\n effects.consume(code2);\n return trail2;\n }\n if (code2 === 38) {\n effects.consume(code2);\n return trailCharRefStart;\n }\n if (code2 === 93) {\n effects.consume(code2);\n return trailBracketAfter;\n }\n if (\n // `<` is an end.\n code2 === 60 || // So is whitespace.\n code2 === null || markdownLineEndingOrSpace(code2) || unicodeWhitespace(code2)\n ) {\n return ok2(code2);\n }\n return nok(code2);\n }\n function trailBracketAfter(code2) {\n if (code2 === null || code2 === 40 || code2 === 91 || markdownLineEndingOrSpace(code2) || unicodeWhitespace(code2)) {\n return ok2(code2);\n }\n return trail2(code2);\n }\n function trailCharRefStart(code2) {\n return asciiAlpha(code2) ? trailCharRefInside(code2) : nok(code2);\n }\n function trailCharRefInside(code2) {\n if (code2 === 59) {\n effects.consume(code2);\n return trail2;\n }\n if (asciiAlpha(code2)) {\n effects.consume(code2);\n return trailCharRefInside;\n }\n return nok(code2);\n }\n}\nfunction tokenizeEmailDomainDotTrail(effects, ok2, nok) {\n return start;\n function start(code2) {\n effects.consume(code2);\n return after;\n }\n function after(code2) {\n return asciiAlphanumeric(code2) ? nok(code2) : ok2(code2);\n }\n}\nfunction previousWww(code2) {\n return code2 === null || code2 === 40 || code2 === 42 || code2 === 95 || code2 === 91 || code2 === 93 || code2 === 126 || markdownLineEndingOrSpace(code2);\n}\nfunction previousProtocol(code2) {\n return !asciiAlpha(code2);\n}\nfunction previousEmail(code2) {\n return !(code2 === 47 || gfmAtext(code2));\n}\nfunction gfmAtext(code2) {\n return code2 === 43 || code2 === 45 || code2 === 46 || code2 === 95 || asciiAlphanumeric(code2);\n}\nfunction previousUnbalanced(events) {\n let index = events.length;\n let result = false;\n while (index--) {\n const token = events[index][1];\n if ((token.type === \"labelLink\" || token.type === \"labelImage\") && !token._balanced) {\n result = true;\n break;\n }\n if (token._gfmAutolinkLiteralWalkedInto) {\n result = false;\n break;\n }\n }\n if (events.length > 0 && !result) {\n events[events.length - 1][1]._gfmAutolinkLiteralWalkedInto = true;\n }\n return result;\n}\nfunction resolveAll(constructs2, events, context) {\n const called = [];\n let index = -1;\n while (++index < constructs2.length) {\n const resolve = constructs2[index].resolveAll;\n if (resolve && !called.includes(resolve)) {\n events = resolve(events, context);\n called.push(resolve);\n }\n }\n return events;\n}\nfunction factorySpace(effects, ok2, type, max) {\n const limit = max ? max - 1 : Number.POSITIVE_INFINITY;\n let size = 0;\n return start;\n function start(code2) {\n if (markdownSpace(code2)) {\n effects.enter(type);\n return prefix(code2);\n }\n return ok2(code2);\n }\n function prefix(code2) {\n if (markdownSpace(code2) && size++ < limit) {\n effects.consume(code2);\n return prefix;\n }\n effects.exit(type);\n return ok2(code2);\n }\n}\nconst blankLine = {\n tokenize: tokenizeBlankLine,\n partial: true\n};\nfunction tokenizeBlankLine(effects, ok2, nok) {\n return start;\n function start(code2) {\n return markdownSpace(code2) ? factorySpace(effects, after, \"linePrefix\")(code2) : after(code2);\n }\n function after(code2) {\n return code2 === null || markdownLineEnding(code2) ? ok2(code2) : nok(code2);\n }\n}\nconst indent = {\n tokenize: tokenizeIndent,\n partial: true\n};\nfunction gfmFootnote() {\n return {\n document: {\n [91]: {\n tokenize: tokenizeDefinitionStart,\n continuation: {\n tokenize: tokenizeDefinitionContinuation\n },\n exit: gfmFootnoteDefinitionEnd\n }\n },\n text: {\n [91]: {\n tokenize: tokenizeGfmFootnoteCall\n },\n [93]: {\n add: \"after\",\n tokenize: tokenizePotentialGfmFootnoteCall,\n resolveTo: resolveToPotentialGfmFootnoteCall\n }\n }\n };\n}\nfunction tokenizePotentialGfmFootnoteCall(effects, ok2, nok) {\n const self = this;\n let index = self.events.length;\n const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = []);\n let labelStart;\n while (index--) {\n const token = self.events[index][1];\n if (token.type === \"labelImage\") {\n labelStart = token;\n break;\n }\n if (token.type === \"gfmFootnoteCall\" || token.type === \"labelLink\" || token.type === \"label\" || token.type === \"image\" || token.type === \"link\") {\n break;\n }\n }\n return start;\n function start(code2) {\n if (!labelStart || !labelStart._balanced) {\n return nok(code2);\n }\n const id = normalizeIdentifier(\n self.sliceSerialize({\n start: labelStart.end,\n end: self.now()\n })\n );\n if (id.codePointAt(0) !== 94 || !defined.includes(id.slice(1))) {\n return nok(code2);\n }\n effects.enter(\"gfmFootnoteCallLabelMarker\");\n effects.consume(code2);\n effects.exit(\"gfmFootnoteCallLabelMarker\");\n return ok2(code2);\n }\n}\nfunction resolveToPotentialGfmFootnoteCall(events, context) {\n let index = events.length;\n while (index--) {\n if (events[index][1].type === \"labelImage\" && events[index][0] === \"enter\") {\n events[index][1];\n break;\n }\n }\n events[index + 1][1].type = \"data\";\n events[index + 3][1].type = \"gfmFootnoteCallLabelMarker\";\n const call = {\n type: \"gfmFootnoteCall\",\n start: Object.assign({}, events[index + 3][1].start),\n end: Object.assign({}, events[events.length - 1][1].end)\n };\n const marker = {\n type: \"gfmFootnoteCallMarker\",\n start: Object.assign({}, events[index + 3][1].end),\n end: Object.assign({}, events[index + 3][1].end)\n };\n marker.end.column++;\n marker.end.offset++;\n marker.end._bufferIndex++;\n const string = {\n type: \"gfmFootnoteCallString\",\n start: Object.assign({}, marker.end),\n end: Object.assign({}, events[events.length - 1][1].start)\n };\n const chunk = {\n type: \"chunkString\",\n contentType: \"string\",\n start: Object.assign({}, string.start),\n end: Object.assign({}, string.end)\n };\n const replacement = [\n // Take the `labelImageMarker` (now `data`, the `!`)\n events[index + 1],\n events[index + 2],\n [\"enter\", call, context],\n // The `[`\n events[index + 3],\n events[index + 4],\n // The `^`.\n [\"enter\", marker, context],\n [\"exit\", marker, context],\n // Everything in between.\n [\"enter\", string, context],\n [\"enter\", chunk, context],\n [\"exit\", chunk, context],\n [\"exit\", string, context],\n // The ending (`]`, properly parsed and labelled).\n events[events.length - 2],\n events[events.length - 1],\n [\"exit\", call, context]\n ];\n events.splice(index, events.length - index + 1, ...replacement);\n return events;\n}\nfunction tokenizeGfmFootnoteCall(effects, ok2, nok) {\n const self = this;\n const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = []);\n let size = 0;\n let data;\n return start;\n function start(code2) {\n effects.enter(\"gfmFootnoteCall\");\n effects.enter(\"gfmFootnoteCallLabelMarker\");\n effects.consume(code2);\n effects.exit(\"gfmFootnoteCallLabelMarker\");\n return callStart;\n }\n function callStart(code2) {\n if (code2 !== 94) return nok(code2);\n effects.enter(\"gfmFootnoteCallMarker\");\n effects.consume(code2);\n effects.exit(\"gfmFootnoteCallMarker\");\n effects.enter(\"gfmFootnoteCallString\");\n effects.enter(\"chunkString\").contentType = \"string\";\n return callData;\n }\n function callData(code2) {\n if (\n // Too long.\n size > 999 || // Closing brace with nothing.\n code2 === 93 && !data || // Space or tab is not supported by GFM for some reason.\n // `\\n` and `[` not being supported makes sense.\n code2 === null || code2 === 91 || markdownLineEndingOrSpace(code2)\n ) {\n return nok(code2);\n }\n if (code2 === 93) {\n effects.exit(\"chunkString\");\n const token = effects.exit(\"gfmFootnoteCallString\");\n if (!defined.includes(normalizeIdentifier(self.sliceSerialize(token)))) {\n return nok(code2);\n }\n effects.enter(\"gfmFootnoteCallLabelMarker\");\n effects.consume(code2);\n effects.exit(\"gfmFootnoteCallLabelMarker\");\n effects.exit(\"gfmFootnoteCall\");\n return ok2;\n }\n if (!markdownLineEndingOrSpace(code2)) {\n data = true;\n }\n size++;\n effects.consume(code2);\n return code2 === 92 ? callEscape : callData;\n }\n function callEscape(code2) {\n if (code2 === 91 || code2 === 92 || code2 === 93) {\n effects.consume(code2);\n size++;\n return callData;\n }\n return callData(code2);\n }\n}\nfunction tokenizeDefinitionStart(effects, ok2, nok) {\n const self = this;\n const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = []);\n let identifier;\n let size = 0;\n let data;\n return start;\n function start(code2) {\n effects.enter(\"gfmFootnoteDefinition\")._container = true;\n effects.enter(\"gfmFootnoteDefinitionLabel\");\n effects.enter(\"gfmFootnoteDefinitionLabelMarker\");\n effects.consume(code2);\n effects.exit(\"gfmFootnoteDefinitionLabelMarker\");\n return labelAtMarker;\n }\n function labelAtMarker(code2) {\n if (code2 === 94) {\n effects.enter(\"gfmFootnoteDefinitionMarker\");\n effects.consume(code2);\n effects.exit(\"gfmFootnoteDefinitionMarker\");\n effects.enter(\"gfmFootnoteDefinitionLabelString\");\n effects.enter(\"chunkString\").contentType = \"string\";\n return labelInside;\n }\n return nok(code2);\n }\n function labelInside(code2) {\n if (\n // Too long.\n size > 999 || // Closing brace with nothing.\n code2 === 93 && !data || // Space or tab is not supported by GFM for some reason.\n // `\\n` and `[` not being supported makes sense.\n code2 === null || code2 === 91 || markdownLineEndingOrSpace(code2)\n ) {\n return nok(code2);\n }\n if (code2 === 93) {\n effects.exit(\"chunkString\");\n const token = effects.exit(\"gfmFootnoteDefinitionLabelString\");\n identifier = normalizeIdentifier(self.sliceSerialize(token));\n effects.enter(\"gfmFootnoteDefinitionLabelMarker\");\n effects.consume(code2);\n effects.exit(\"gfmFootnoteDefinitionLabelMarker\");\n effects.exit(\"gfmFootnoteDefinitionLabel\");\n return labelAfter;\n }\n if (!markdownLineEndingOrSpace(code2)) {\n data = true;\n }\n size++;\n effects.consume(code2);\n return code2 === 92 ? labelEscape : labelInside;\n }\n function labelEscape(code2) {\n if (code2 === 91 || code2 === 92 || code2 === 93) {\n effects.consume(code2);\n size++;\n return labelInside;\n }\n return labelInside(code2);\n }\n function labelAfter(code2) {\n if (code2 === 58) {\n effects.enter(\"definitionMarker\");\n effects.consume(code2);\n effects.exit(\"definitionMarker\");\n if (!defined.includes(identifier)) {\n defined.push(identifier);\n }\n return factorySpace(\n effects,\n whitespaceAfter,\n \"gfmFootnoteDefinitionWhitespace\"\n );\n }\n return nok(code2);\n }\n function whitespaceAfter(code2) {\n return ok2(code2);\n }\n}\nfunction tokenizeDefinitionContinuation(effects, ok2, nok) {\n return effects.check(blankLine, ok2, effects.attempt(indent, ok2, nok));\n}\nfunction gfmFootnoteDefinitionEnd(effects) {\n effects.exit(\"gfmFootnoteDefinition\");\n}\nfunction tokenizeIndent(effects, ok2, nok) {\n const self = this;\n return factorySpace(\n effects,\n afterPrefix,\n \"gfmFootnoteDefinitionIndent\",\n 4 + 1\n );\n function afterPrefix(code2) {\n const tail = self.events[self.events.length - 1];\n return tail && tail[1].type === \"gfmFootnoteDefinitionIndent\" && tail[2].sliceSerialize(tail[1], true).length === 4 ? ok2(code2) : nok(code2);\n }\n}\nfunction gfmStrikethrough(options) {\n const options_ = options || {};\n let single = options_.singleTilde;\n const tokenizer = {\n tokenize: tokenizeStrikethrough,\n resolveAll: resolveAllStrikethrough\n };\n if (single === null || single === void 0) {\n single = true;\n }\n return {\n text: {\n [126]: tokenizer\n },\n insideSpan: {\n null: [tokenizer]\n },\n attentionMarkers: {\n null: [126]\n }\n };\n function resolveAllStrikethrough(events, context) {\n let index = -1;\n while (++index < events.length) {\n if (events[index][0] === \"enter\" && events[index][1].type === \"strikethroughSequenceTemporary\" && events[index][1]._close) {\n let open = index;\n while (open--) {\n if (events[open][0] === \"exit\" && events[open][1].type === \"strikethroughSequenceTemporary\" && events[open][1]._open && // If the sizes are the same:\n events[index][1].end.offset - events[index][1].start.offset === events[open][1].end.offset - events[open][1].start.offset) {\n events[index][1].type = \"strikethroughSequence\";\n events[open][1].type = \"strikethroughSequence\";\n const strikethrough = {\n type: \"strikethrough\",\n start: Object.assign({}, events[open][1].start),\n end: Object.assign({}, events[index][1].end)\n };\n const text2 = {\n type: \"strikethroughText\",\n start: Object.assign({}, events[open][1].end),\n end: Object.assign({}, events[index][1].start)\n };\n const nextEvents = [\n [\"enter\", strikethrough, context],\n [\"enter\", events[open][1], context],\n [\"exit\", events[open][1], context],\n [\"enter\", text2, context]\n ];\n const insideSpan = context.parser.constructs.insideSpan.null;\n if (insideSpan) {\n splice(\n nextEvents,\n nextEvents.length,\n 0,\n resolveAll(insideSpan, events.slice(open + 1, index), context)\n );\n }\n splice(nextEvents, nextEvents.length, 0, [\n [\"exit\", text2, context],\n [\"enter\", events[index][1], context],\n [\"exit\", events[index][1], context],\n [\"exit\", strikethrough, context]\n ]);\n splice(events, open - 1, index - open + 3, nextEvents);\n index = open + nextEvents.length - 2;\n break;\n }\n }\n }\n }\n index = -1;\n while (++index < events.length) {\n if (events[index][1].type === \"strikethroughSequenceTemporary\") {\n events[index][1].type = \"data\";\n }\n }\n return events;\n }\n function tokenizeStrikethrough(effects, ok2, nok) {\n const previous2 = this.previous;\n const events = this.events;\n let size = 0;\n return start;\n function start(code2) {\n if (previous2 === 126 && events[events.length - 1][1].type !== \"characterEscape\") {\n return nok(code2);\n }\n effects.enter(\"strikethroughSequenceTemporary\");\n return more(code2);\n }\n function more(code2) {\n const before = classifyCharacter(previous2);\n if (code2 === 126) {\n if (size > 1) return nok(code2);\n effects.consume(code2);\n size++;\n return more;\n }\n if (size < 2 && !single) return nok(code2);\n const token = effects.exit(\"strikethroughSequenceTemporary\");\n const after = classifyCharacter(code2);\n token._open = !after || after === 2 && Boolean(before);\n token._close = !before || before === 2 && Boolean(after);\n return ok2(code2);\n }\n }\n}\nclass EditMap {\n /**\n * Create a new edit map.\n */\n constructor() {\n this.map = [];\n }\n /**\n * Create an edit: a remove and/or add at a certain place.\n *\n * @param {number} index\n * @param {number} remove\n * @param {Array} add\n * @returns {undefined}\n */\n add(index, remove, add) {\n addImpl(this, index, remove, add);\n }\n // To do: add this when moving to `micromark`.\n // /**\n // * Create an edit: but insert `add` before existing additions.\n // *\n // * @param {number} index\n // * @param {number} remove\n // * @param {Array} add\n // * @returns {undefined}\n // */\n // addBefore(index, remove, add) {\n // addImpl(this, index, remove, add, true)\n // }\n /**\n * Done, change the events.\n *\n * @param {Array} events\n * @returns {undefined}\n */\n consume(events) {\n this.map.sort(function(a, b) {\n return a[0] - b[0];\n });\n if (this.map.length === 0) {\n return;\n }\n let index = this.map.length;\n const vecs = [];\n while (index > 0) {\n index -= 1;\n vecs.push(\n events.slice(this.map[index][0] + this.map[index][1]),\n this.map[index][2]\n );\n events.length = this.map[index][0];\n }\n vecs.push([...events]);\n events.length = 0;\n let slice = vecs.pop();\n while (slice) {\n events.push(...slice);\n slice = vecs.pop();\n }\n this.map.length = 0;\n }\n}\nfunction addImpl(editMap, at, remove, add) {\n let index = 0;\n if (remove === 0 && add.length === 0) {\n return;\n }\n while (index < editMap.map.length) {\n if (editMap.map[index][0] === at) {\n editMap.map[index][1] += remove;\n editMap.map[index][2].push(...add);\n return;\n }\n index += 1;\n }\n editMap.map.push([at, remove, add]);\n}\nfunction gfmTableAlign(events, index) {\n let inDelimiterRow = false;\n const align = [];\n while (index < events.length) {\n const event = events[index];\n if (inDelimiterRow) {\n if (event[0] === \"enter\") {\n if (event[1].type === \"tableContent\") {\n align.push(\n events[index + 1][1].type === \"tableDelimiterMarker\" ? \"left\" : \"none\"\n );\n }\n } else if (event[1].type === \"tableContent\") {\n if (events[index - 1][1].type === \"tableDelimiterMarker\") {\n const alignIndex = align.length - 1;\n align[alignIndex] = align[alignIndex] === \"left\" ? \"center\" : \"right\";\n }\n } else if (event[1].type === \"tableDelimiterRow\") {\n break;\n }\n } else if (event[0] === \"enter\" && event[1].type === \"tableDelimiterRow\") {\n inDelimiterRow = true;\n }\n index += 1;\n }\n return align;\n}\nfunction gfmTable() {\n return {\n flow: {\n null: {\n tokenize: tokenizeTable,\n resolveAll: resolveTable\n }\n }\n };\n}\nfunction tokenizeTable(effects, ok2, nok) {\n const self = this;\n let size = 0;\n let sizeB = 0;\n let seen;\n return start;\n function start(code2) {\n let index = self.events.length - 1;\n while (index > -1) {\n const type = self.events[index][1].type;\n if (type === \"lineEnding\" || // Note: markdown-rs uses `whitespace` instead of `linePrefix`\n type === \"linePrefix\")\n index--;\n else break;\n }\n const tail = index > -1 ? self.events[index][1].type : null;\n const next = tail === \"tableHead\" || tail === \"tableRow\" ? bodyRowStart : headRowBefore;\n if (next === bodyRowStart && self.parser.lazy[self.now().line]) {\n return nok(code2);\n }\n return next(code2);\n }\n function headRowBefore(code2) {\n effects.enter(\"tableHead\");\n effects.enter(\"tableRow\");\n return headRowStart(code2);\n }\n function headRowStart(code2) {\n if (code2 === 124) {\n return headRowBreak(code2);\n }\n seen = true;\n sizeB += 1;\n return headRowBreak(code2);\n }\n function headRowBreak(code2) {\n if (code2 === null) {\n return nok(code2);\n }\n if (markdownLineEnding(code2)) {\n if (sizeB > 1) {\n sizeB = 0;\n self.interrupt = true;\n effects.exit(\"tableRow\");\n effects.enter(\"lineEnding\");\n effects.consume(code2);\n effects.exit(\"lineEnding\");\n return headDelimiterStart;\n }\n return nok(code2);\n }\n if (markdownSpace(code2)) {\n return factorySpace(effects, headRowBreak, \"whitespace\")(code2);\n }\n sizeB += 1;\n if (seen) {\n seen = false;\n size += 1;\n }\n if (code2 === 124) {\n effects.enter(\"tableCellDivider\");\n effects.consume(code2);\n effects.exit(\"tableCellDivider\");\n seen = true;\n return headRowBreak;\n }\n effects.enter(\"data\");\n return headRowData(code2);\n }\n function headRowData(code2) {\n if (code2 === null || code2 === 124 || markdownLineEndingOrSpace(code2)) {\n effects.exit(\"data\");\n return headRowBreak(code2);\n }\n effects.consume(code2);\n return code2 === 92 ? headRowEscape : headRowData;\n }\n function headRowEscape(code2) {\n if (code2 === 92 || code2 === 124) {\n effects.consume(code2);\n return headRowData;\n }\n return headRowData(code2);\n }\n function headDelimiterStart(code2) {\n self.interrupt = false;\n if (self.parser.lazy[self.now().line]) {\n return nok(code2);\n }\n effects.enter(\"tableDelimiterRow\");\n seen = false;\n if (markdownSpace(code2)) {\n return factorySpace(\n effects,\n headDelimiterBefore,\n \"linePrefix\",\n self.parser.constructs.disable.null.includes(\"codeIndented\") ? void 0 : 4\n )(code2);\n }\n return headDelimiterBefore(code2);\n }\n function headDelimiterBefore(code2) {\n if (code2 === 45 || code2 === 58) {\n return headDelimiterValueBefore(code2);\n }\n if (code2 === 124) {\n seen = true;\n effects.enter(\"tableCellDivider\");\n effects.consume(code2);\n effects.exit(\"tableCellDivider\");\n return headDelimiterCellBefore;\n }\n return headDelimiterNok(code2);\n }\n function headDelimiterCellBefore(code2) {\n if (markdownSpace(code2)) {\n return factorySpace(effects, headDelimiterValueBefore, \"whitespace\")(code2);\n }\n return headDelimiterValueBefore(code2);\n }\n function headDelimiterValueBefore(code2) {\n if (code2 === 58) {\n sizeB += 1;\n seen = true;\n effects.enter(\"tableDelimiterMarker\");\n effects.consume(code2);\n effects.exit(\"tableDelimiterMarker\");\n return headDelimiterLeftAlignmentAfter;\n }\n if (code2 === 45) {\n sizeB += 1;\n return headDelimiterLeftAlignmentAfter(code2);\n }\n if (code2 === null || markdownLineEnding(code2)) {\n return headDelimiterCellAfter(code2);\n }\n return headDelimiterNok(code2);\n }\n function headDelimiterLeftAlignmentAfter(code2) {\n if (code2 === 45) {\n effects.enter(\"tableDelimiterFiller\");\n return headDelimiterFiller(code2);\n }\n return headDelimiterNok(code2);\n }\n function headDelimiterFiller(code2) {\n if (code2 === 45) {\n effects.consume(code2);\n return headDelimiterFiller;\n }\n if (code2 === 58) {\n seen = true;\n effects.exit(\"tableDelimiterFiller\");\n effects.enter(\"tableDelimiterMarker\");\n effects.consume(code2);\n effects.exit(\"tableDelimiterMarker\");\n return headDelimiterRightAlignmentAfter;\n }\n effects.exit(\"tableDelimiterFiller\");\n return headDelimiterRightAlignmentAfter(code2);\n }\n function headDelimiterRightAlignmentAfter(code2) {\n if (markdownSpace(code2)) {\n return factorySpace(effects, headDelimiterCellAfter, \"whitespace\")(code2);\n }\n return headDelimiterCellAfter(code2);\n }\n function headDelimiterCellAfter(code2) {\n if (code2 === 124) {\n return headDelimiterBefore(code2);\n }\n if (code2 === null || markdownLineEnding(code2)) {\n if (!seen || size !== sizeB) {\n return headDelimiterNok(code2);\n }\n effects.exit(\"tableDelimiterRow\");\n effects.exit(\"tableHead\");\n return ok2(code2);\n }\n return headDelimiterNok(code2);\n }\n function headDelimiterNok(code2) {\n return nok(code2);\n }\n function bodyRowStart(code2) {\n effects.enter(\"tableRow\");\n return bodyRowBreak(code2);\n }\n function bodyRowBreak(code2) {\n if (code2 === 124) {\n effects.enter(\"tableCellDivider\");\n effects.consume(code2);\n effects.exit(\"tableCellDivider\");\n return bodyRowBreak;\n }\n if (code2 === null || markdownLineEnding(code2)) {\n effects.exit(\"tableRow\");\n return ok2(code2);\n }\n if (markdownSpace(code2)) {\n return factorySpace(effects, bodyRowBreak, \"whitespace\")(code2);\n }\n effects.enter(\"data\");\n return bodyRowData(code2);\n }\n function bodyRowData(code2) {\n if (code2 === null || code2 === 124 || markdownLineEndingOrSpace(code2)) {\n effects.exit(\"data\");\n return bodyRowBreak(code2);\n }\n effects.consume(code2);\n return code2 === 92 ? bodyRowEscape : bodyRowData;\n }\n function bodyRowEscape(code2) {\n if (code2 === 92 || code2 === 124) {\n effects.consume(code2);\n return bodyRowData;\n }\n return bodyRowData(code2);\n }\n}\nfunction resolveTable(events, context) {\n let index = -1;\n let inFirstCellAwaitingPipe = true;\n let rowKind = 0;\n let lastCell = [0, 0, 0, 0];\n let cell = [0, 0, 0, 0];\n let afterHeadAwaitingFirstBodyRow = false;\n let lastTableEnd = 0;\n let currentTable;\n let currentBody;\n let currentCell;\n const map2 = new EditMap();\n while (++index < events.length) {\n const event = events[index];\n const token = event[1];\n if (event[0] === \"enter\") {\n if (token.type === \"tableHead\") {\n afterHeadAwaitingFirstBodyRow = false;\n if (lastTableEnd !== 0) {\n flushTableEnd(map2, context, lastTableEnd, currentTable, currentBody);\n currentBody = void 0;\n lastTableEnd = 0;\n }\n currentTable = {\n type: \"table\",\n start: Object.assign({}, token.start),\n // Note: correct end is set later.\n end: Object.assign({}, token.end)\n };\n map2.add(index, 0, [[\"enter\", currentTable, context]]);\n } else if (token.type === \"tableRow\" || token.type === \"tableDelimiterRow\") {\n inFirstCellAwaitingPipe = true;\n currentCell = void 0;\n lastCell = [0, 0, 0, 0];\n cell = [0, index + 1, 0, 0];\n if (afterHeadAwaitingFirstBodyRow) {\n afterHeadAwaitingFirstBodyRow = false;\n currentBody = {\n type: \"tableBody\",\n start: Object.assign({}, token.start),\n // Note: correct end is set later.\n end: Object.assign({}, token.end)\n };\n map2.add(index, 0, [[\"enter\", currentBody, context]]);\n }\n rowKind = token.type === \"tableDelimiterRow\" ? 2 : currentBody ? 3 : 1;\n } else if (rowKind && (token.type === \"data\" || token.type === \"tableDelimiterMarker\" || token.type === \"tableDelimiterFiller\")) {\n inFirstCellAwaitingPipe = false;\n if (cell[2] === 0) {\n if (lastCell[1] !== 0) {\n cell[0] = cell[1];\n currentCell = flushCell(\n map2,\n context,\n lastCell,\n rowKind,\n void 0,\n currentCell\n );\n lastCell = [0, 0, 0, 0];\n }\n cell[2] = index;\n }\n } else if (token.type === \"tableCellDivider\") {\n if (inFirstCellAwaitingPipe) {\n inFirstCellAwaitingPipe = false;\n } else {\n if (lastCell[1] !== 0) {\n cell[0] = cell[1];\n currentCell = flushCell(\n map2,\n context,\n lastCell,\n rowKind,\n void 0,\n currentCell\n );\n }\n lastCell = cell;\n cell = [lastCell[1], index, 0, 0];\n }\n }\n } else if (token.type === \"tableHead\") {\n afterHeadAwaitingFirstBodyRow = true;\n lastTableEnd = index;\n } else if (token.type === \"tableRow\" || token.type === \"tableDelimiterRow\") {\n lastTableEnd = index;\n if (lastCell[1] !== 0) {\n cell[0] = cell[1];\n currentCell = flushCell(\n map2,\n context,\n lastCell,\n rowKind,\n index,\n currentCell\n );\n } else if (cell[1] !== 0) {\n currentCell = flushCell(map2, context, cell, rowKind, index, currentCell);\n }\n rowKind = 0;\n } else if (rowKind && (token.type === \"data\" || token.type === \"tableDelimiterMarker\" || token.type === \"tableDelimiterFiller\")) {\n cell[3] = index;\n }\n }\n if (lastTableEnd !== 0) {\n flushTableEnd(map2, context, lastTableEnd, currentTable, currentBody);\n }\n map2.consume(context.events);\n index = -1;\n while (++index < context.events.length) {\n const event = context.events[index];\n if (event[0] === \"enter\" && event[1].type === \"table\") {\n event[1]._align = gfmTableAlign(context.events, index);\n }\n }\n return events;\n}\nfunction flushCell(map2, context, range, rowKind, rowEnd, previousCell) {\n const groupName = rowKind === 1 ? \"tableHeader\" : rowKind === 2 ? \"tableDelimiter\" : \"tableData\";\n const valueName = \"tableContent\";\n if (range[0] !== 0) {\n previousCell.end = Object.assign({}, getPoint(context.events, range[0]));\n map2.add(range[0], 0, [[\"exit\", previousCell, context]]);\n }\n const now = getPoint(context.events, range[1]);\n previousCell = {\n type: groupName,\n start: Object.assign({}, now),\n // Note: correct end is set later.\n end: Object.assign({}, now)\n };\n map2.add(range[1], 0, [[\"enter\", previousCell, context]]);\n if (range[2] !== 0) {\n const relatedStart = getPoint(context.events, range[2]);\n const relatedEnd = getPoint(context.events, range[3]);\n const valueToken = {\n type: valueName,\n start: Object.assign({}, relatedStart),\n end: Object.assign({}, relatedEnd)\n };\n map2.add(range[2], 0, [[\"enter\", valueToken, context]]);\n if (rowKind !== 2) {\n const start = context.events[range[2]];\n const end = context.events[range[3]];\n start[1].end = Object.assign({}, end[1].end);\n start[1].type = \"chunkText\";\n start[1].contentType = \"text\";\n if (range[3] > range[2] + 1) {\n const a = range[2] + 1;\n const b = range[3] - range[2] - 1;\n map2.add(a, b, []);\n }\n }\n map2.add(range[3] + 1, 0, [[\"exit\", valueToken, context]]);\n }\n if (rowEnd !== void 0) {\n previousCell.end = Object.assign({}, getPoint(context.events, rowEnd));\n map2.add(rowEnd, 0, [[\"exit\", previousCell, context]]);\n previousCell = void 0;\n }\n return previousCell;\n}\nfunction flushTableEnd(map2, context, index, table, tableBody) {\n const exits = [];\n const related = getPoint(context.events, index);\n if (tableBody) {\n tableBody.end = Object.assign({}, related);\n exits.push([\"exit\", tableBody, context]);\n }\n table.end = Object.assign({}, related);\n exits.push([\"exit\", table, context]);\n map2.add(index + 1, 0, exits);\n}\nfunction getPoint(events, index) {\n const event = events[index];\n const side = event[0] === \"enter\" ? \"start\" : \"end\";\n return event[1][side];\n}\nconst tasklistCheck = {\n tokenize: tokenizeTasklistCheck\n};\nfunction gfmTaskListItem() {\n return {\n text: {\n [91]: tasklistCheck\n }\n };\n}\nfunction tokenizeTasklistCheck(effects, ok2, nok) {\n const self = this;\n return open;\n function open(code2) {\n if (\n // Exit if there’s stuff before.\n self.previous !== null || // Exit if not in the first content that is the first child of a list\n // item.\n !self._gfmTasklistFirstContentOfListItem\n ) {\n return nok(code2);\n }\n effects.enter(\"taskListCheck\");\n effects.enter(\"taskListCheckMarker\");\n effects.consume(code2);\n effects.exit(\"taskListCheckMarker\");\n return inside;\n }\n function inside(code2) {\n if (markdownLineEndingOrSpace(code2)) {\n effects.enter(\"taskListCheckValueUnchecked\");\n effects.consume(code2);\n effects.exit(\"taskListCheckValueUnchecked\");\n return close;\n }\n if (code2 === 88 || code2 === 120) {\n effects.enter(\"taskListCheckValueChecked\");\n effects.consume(code2);\n effects.exit(\"taskListCheckValueChecked\");\n return close;\n }\n return nok(code2);\n }\n function close(code2) {\n if (code2 === 93) {\n effects.enter(\"taskListCheckMarker\");\n effects.consume(code2);\n effects.exit(\"taskListCheckMarker\");\n effects.exit(\"taskListCheck\");\n return after;\n }\n return nok(code2);\n }\n function after(code2) {\n if (markdownLineEnding(code2)) {\n return ok2(code2);\n }\n if (markdownSpace(code2)) {\n return effects.check(\n {\n tokenize: spaceThenNonSpace\n },\n ok2,\n nok\n )(code2);\n }\n return nok(code2);\n }\n}\nfunction spaceThenNonSpace(effects, ok2, nok) {\n return factorySpace(effects, after, \"whitespace\");\n function after(code2) {\n return code2 === null ? nok(code2) : ok2(code2);\n }\n}\nfunction gfm(options) {\n return combineExtensions([\n gfmAutolinkLiteral(),\n gfmFootnote(),\n gfmStrikethrough(options),\n gfmTable(),\n gfmTaskListItem()\n ]);\n}\nconst emptyOptions = {};\nfunction remarkGfm(options) {\n const self = (\n /** @type {Processor} */\n this\n );\n const settings = options || emptyOptions;\n const data = self.data();\n const micromarkExtensions = data.micromarkExtensions || (data.micromarkExtensions = []);\n const fromMarkdownExtensions = data.fromMarkdownExtensions || (data.fromMarkdownExtensions = []);\n const toMarkdownExtensions = data.toMarkdownExtensions || (data.toMarkdownExtensions = []);\n micromarkExtensions.push(gfm(settings));\n fromMarkdownExtensions.push(gfmFromMarkdown());\n toMarkdownExtensions.push(gfmToMarkdown(settings));\n}\nconst _sfc_main$1 = /* @__PURE__ */ defineComponent({\n __name: \"NcRichTextCopyButton\",\n props: {\n contentId: null\n },\n setup(__props) {\n const props = __props;\n const { copy, icon, altText } = useCopy(() => document.getElementById(props.contentId).textContent);\n return { __sfc: true, props, copy, icon, altText, NcButton, NcIconSvgWrapper };\n }\n});\nvar _sfc_render$1 = function render2() {\n var _vm = this, _c = _vm._self._c, _setup = _vm._self._setupProxy;\n return _c(_setup.NcButton, { attrs: { \"variant\": \"tertiary\", \"size\": \"small\", \"aria-label\": _setup.altText, \"title\": _setup.altText }, on: { \"click\": _setup.copy }, scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_c(_setup.NcIconSvgWrapper, { attrs: { \"path\": _setup.icon, \"inline\": \"\" } })];\n }, proxy: true }]) });\n};\nvar _sfc_staticRenderFns$1 = [];\nvar __component__$1 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$1,\n _sfc_render$1,\n _sfc_staticRenderFns$1,\n false,\n null,\n null\n);\nconst NcRichTextCopyButton = __component__$1.exports;\nfunction remarkPlaceholder() {\n return function(ast) {\n visitParents(ast, (node) => node.type === \"text\", visitor);\n function visitor(node, ancestors) {\n const parent = ancestors.at(-1);\n const index = parent.children.indexOf(node);\n const placeholders = node.value.split(/(\\{[a-z\\-_.0-9]+\\})/ig).map((entry) => {\n const matches = entry.match(/^\\{([a-z\\-_.0-9]+)\\}$/i);\n if (!matches) {\n return u(\"text\", entry);\n }\n const [, component] = matches;\n return u(\"element\", {\n tagName: `#${component}`\n });\n });\n parent.children.splice(index, 1, ...placeholders);\n }\n };\n}\nfunction prepareTextNode({ h, context }, text2) {\n if (context.autolink) {\n text2 = parseUrl(text2);\n }\n if (Array.isArray(text2)) {\n return text2.map((entry) => {\n if (typeof entry === \"string\") {\n return entry;\n }\n const { component, props } = entry;\n return h(component, {\n props,\n class: \"rich-text--component\"\n });\n });\n }\n return text2;\n}\n/*!\n * SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nfunction isCodeNode(node) {\n return [\"code\", \"inlineCode\"].includes(node.type);\n}\nconst remarkStripCode = function() {\n return function(tree) {\n visitParents(tree, isCodeNode, (node, ancestors) => {\n const parent = ancestors.at(-1);\n const index = parent.children.indexOf(node);\n parent.children.splice(index, 1, {\n ...node,\n value: \"\"\n });\n return [SKIP, index + 1];\n });\n };\n};\nfunction remarkUnescape() {\n return function(tree) {\n visitParents(tree, (node) => [\"text\", \"code\", \"inlineCode\"].includes(node.type), (node, ancestors) => {\n const parent = ancestors.at(-1);\n const index = parent.children.indexOf(node);\n parent.children.splice(index, 1, {\n ...node,\n value: node.value.replace(/</gmi, \"<\").replace(/>/gmi, \">\")\n });\n return [SKIP, index + 1];\n });\n };\n}\nconst LINK_PROTOCOLS = [\"http\", \"https\", \"mailto\", \"tel\"];\nconst rehypeHighlight = ref(null);\nasync function importRehypeHighlightLibrary() {\n const module = await import(\"rehype-highlight\");\n rehypeHighlight.value = module.default;\n}\nconst _sfc_main = {\n name: \"NcRichText\",\n components: {\n NcReferenceList\n },\n /* eslint vue/require-prop-comment: warn -- TODO: Add a proper doc block about what this props do */\n props: {\n text: {\n type: String,\n default: \"\"\n },\n arguments: {\n type: Object,\n default: () => {\n return {};\n }\n },\n referenceLimit: {\n type: Number,\n default: 0\n },\n referenceInteractive: {\n type: Boolean,\n // eslint-disable-next-line vue/no-boolean-default\n default: true\n },\n referenceInteractiveOptIn: {\n type: Boolean,\n default: false\n },\n /** Provide data upfront to avoid extra http request */\n references: {\n type: Array,\n default: null\n },\n /** Provide basic Markdown syntax */\n useMarkdown: {\n type: Boolean,\n default: false\n },\n /** Provide GitHub Flavored Markdown syntax */\n useExtendedMarkdown: {\n type: Boolean,\n default: false\n },\n /** Provide event from rendered markdown inputs */\n interactive: {\n type: Boolean,\n default: false\n },\n autolink: {\n type: Boolean,\n // eslint-disable-next-line vue/no-boolean-default\n default: true\n }\n },\n emits: [\n \"interact-todo\",\n \"interact:todo\"\n ],\n data() {\n return {\n parentId: GenRandomId(5)\n };\n },\n methods: {\n renderPlaintext(h) {\n const placeholders = this.text.split(/(\\{[a-z\\-_.0-9]+\\})/ig).map((entry) => {\n const matches = entry.match(/^\\{([a-z\\-_.0-9]+)\\}$/i);\n if (!matches) {\n return prepareTextNode({ h, context: this }, entry);\n }\n const argumentId = matches[1];\n const argument = this.arguments[argumentId];\n if (typeof argument === \"object\") {\n const { component, props } = argument;\n return h(component, {\n props,\n class: \"rich-text--component\"\n });\n }\n if (argument) {\n return h(\"span\", { class: \"rich-text--fallback\" }, argument);\n }\n return entry;\n });\n return h(\"div\", { class: \"rich-text--wrapper\" }, [\n h(\"div\", {}, placeholders.flat()),\n this.referenceLimit > 0 ? h(\"div\", { class: \"rich-text--reference-widget\" }, [\n h(NcReferenceList, {\n props: {\n text: this.text,\n referenceData: this.references,\n interactive: this.referenceInteractive,\n interactiveOptIn: this.referenceInteractiveOptIn\n }\n })\n ]) : null\n ]);\n },\n renderMarkdown(h) {\n const renderedMarkdown = unified().use(remarkParse).use(remarkAutolink, {\n autolink: this.autolink,\n useMarkdown: this.useMarkdown,\n useExtendedMarkdown: this.useExtendedMarkdown\n }).use(remarkUnescape).use(this.useExtendedMarkdown ? remarkGfm : void 0).use(breaks).use(remarkUnlinkProtocols, { except: LINK_PROTOCOLS }).use(remark2rehype, {\n handlers: {\n component(toHast, node) {\n return toHast(node, node.component, { value: node.value });\n }\n }\n }).use(this.useExtendedMarkdown ? rehypeHighlight.value : void 0).use(remarkPlaceholder).use(rehypeExternalLinks, {\n target: \"_blank\",\n rel: [\"noopener noreferrer\"]\n }).use(rehype2react, {\n createElement: (tag, attrs, children) => {\n if (!tag.startsWith(\"#\")) {\n if ([\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"].includes(tag)) {\n tag = `h${Math.min(+String(tag)[1] + 3, 6)}`;\n }\n if (this.useExtendedMarkdown) {\n if (tag === \"code\" && !rehypeHighlight.value && attrs?.attrs?.class?.includes(\"language\")) {\n importRehypeHighlightLibrary();\n }\n if (tag === \"pre\" && Array.isArray(children) && children[0].tag === \"code\") {\n const id = this.parentId + \"-code-block-\" + GenRandomId(5);\n return h(\"p\", { class: \"rich-text__code-block\" }, [\n h(tag, { attrs: { ...attrs, id } }, children),\n h(NcRichTextCopyButton, {\n props: { contentId: id },\n class: \"rich-text__code-block-button\"\n })\n ]);\n }\n let nestedNode = null;\n if (tag === \"li\" && Array.isArray(children) && children[0].tag === \"input\" && children[0].data.attrs.type === \"checkbox\") {\n const [inputNode, ...labelParts] = children;\n const nestedNodeIndex = labelParts.findIndex((child) => [\"ul\", \"ol\", \"li\", \"blockquote\", \"pre\"].includes(child.tag));\n if (nestedNodeIndex !== -1) {\n nestedNode = labelParts[nestedNodeIndex];\n labelParts.splice(nestedNodeIndex);\n }\n const id = this.parentId + \"-markdown-input-\" + GenRandomId(5);\n const inputComponent = h(NcCheckboxRadioSwitch, {\n attrs: {\n ...inputNode.data.attrs,\n id,\n disabled: !this.interactive\n },\n on: {\n \"update:checked\": () => {\n this.$emit(\"interact-todo\", id);\n this.$emit(\"interact:todo\", id);\n }\n }\n }, labelParts);\n return h(tag, attrs, [inputComponent, nestedNode]);\n }\n }\n if (tag === \"a\") {\n const route = getRoute(this.$router, attrs.attrs.href);\n if (route) {\n delete attrs.attrs.href;\n delete attrs.attrs.target;\n return h(RouterLink, {\n ...attrs,\n props: {\n to: route\n }\n }, children);\n }\n const isAllowedScheme = /^(https?:\\/\\/|tel:|mailto:)/.test(attrs.attrs.href);\n if (isAllowedScheme) {\n attrs.attrs.href = attrs.attrs.href.trim();\n return h(NcRichTextExternalLink, attrs, children);\n } else {\n delete attrs.attrs.href;\n delete attrs.attrs.target;\n return h(\"span\", attrs, children);\n }\n }\n return h(tag, attrs, children);\n }\n const placeholder = this.arguments[tag.slice(1)];\n if (!placeholder) {\n return h(\"span\", { ...{ attrs }, ...{ class: \"rich-text--fallback\" } }, [`{${tag.slice(1)}}`]);\n }\n if (!placeholder.component) {\n return h(\"span\", attrs, [placeholder]);\n }\n return h(\n placeholder.component,\n {\n attrs,\n props: placeholder.props,\n class: \"rich-text--component\"\n },\n children\n );\n },\n prefix: false\n }).processSync(this.text.replace(/<[^>]+>/g, (match) => match.replace(/\")).result;\n return h(\"div\", { class: \"rich-text--wrapper rich-text--wrapper-markdown\" }, [\n renderedMarkdown,\n this.referenceLimit > 0 ? h(\"div\", { class: \"rich-text--reference-widget\" }, [\n h(NcReferenceList, {\n props: {\n text: this.prepareReferenceSource(this.text),\n referenceData: this.references,\n interactive: this.referenceInteractive,\n interactiveOptIn: this.referenceInteractiveOptIn\n }\n })\n ]) : null\n ]);\n },\n /**\n * Strip content of inline code and code blocks for reference widgets\n * (e.g. ignore fenced links from being added as reference)\n *\n * @param {string} text - Content of the node\n */\n prepareReferenceSource(text2) {\n if (!this.useMarkdown && !this.useExtendedMarkdown) {\n return text2;\n }\n const processor = unified();\n processor.compiler = (tree) => toString(tree);\n return processor.use(remarkParse).use(remarkStripCode).processSync(text2).value;\n }\n },\n render(h) {\n return this.useMarkdown || this.useExtendedMarkdown ? this.renderMarkdown(h) : this.renderPlaintext(h);\n }\n};\nconst _sfc_render = null;\nconst _sfc_staticRenderFns = null;\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n null,\n \"177dd7c0\"\n);\nconst NcRichText = __component__.exports;\nexport {\n NcRichText as N,\n NcReferenceList as a\n};\n//# sourceMappingURL=NcRichText-ByLPwUvM.mjs.map\n","import '../assets/NcRichContenteditable-DwS6PNCv.css';\nimport debounce from \"debounce\";\nimport stringLength from \"string-length\";\nimport Tribute from \"tributejs/dist/tribute.esm.js\";\nimport { useIsDarkTheme } from \"../Composables/useIsDarkTheme.mjs\";\nimport { g as getAvatarUrl } from \"./getAvatarUrl-BGOeDmNO.mjs\";\nimport { N as NcUserStatusIcon } from \"./NcUserStatusIcon-DdPPN-cP.mjs\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nimport { u as useModelMigration } from \"./useModelMigration-EhAWvqDD.mjs\";\nimport { e as emojiSearch, a as emojiAddRecent } from \"./emoji-Dtn2mDf7.mjs\";\nimport { r as register, A as t36, G as t33, a as t, H as n } from \"./_l10n-DVz9Qdzk.mjs\";\nimport { r as richEditor } from \"./index-BCqXu_og.mjs\";\nimport { G as GenRandomId } from \"./GenRandomId-F5ebeBB_.mjs\";\nimport { l as logger } from \"./logger-D3RVzcfQ.mjs\";\nimport \"@nextcloud/auth\";\nimport \"@nextcloud/axios\";\nimport \"@nextcloud/router\";\nimport \"@nextcloud/sharing/public\";\nimport \"@vueuse/core\";\nimport \"vue\";\nimport \"vue-router\";\nimport \"./legacy-DV3mGZdh.mjs\";\nimport \"./NcButton-CCWEL9Ci.mjs\";\nimport { g as getLinkWithPicker, s as searchProvider } from \"./referencePickerModal-B69WouiU.mjs\";\nimport \"./customPickerElements-DLFtgReB.mjs\";\nimport \"unist-builder\";\nimport \"unist-util-visit-parents\";\nimport \"./NcRichText-ByLPwUvM.mjs\";\nimport \"./createElementId-DhjFt1I9.mjs\";\nimport \"../Components/NcEmptyContent.mjs\";\nimport \"./NcSelect-CHc1QupB.mjs\";\nimport \"../Components/NcLoadingIcon.mjs\";\nimport \"./NcTextField-Czr9S6YO.mjs\";\nimport \"@nextcloud/event-bus\";\nimport \"../Components/NcModal.mjs\";\nconst _sfc_main$1 = {\n name: \"NcAutoCompleteResult\",\n components: {\n NcUserStatusIcon\n },\n /* eslint vue/require-prop-comment: warn -- TODO: Add a proper doc block about what this props do */\n props: {\n /**\n * @deprecated Use `label` instead\n */\n title: {\n type: String,\n required: false,\n default: null\n },\n label: {\n type: String,\n required: false,\n default: null\n },\n subline: {\n type: String,\n default: null\n },\n id: {\n type: String,\n default: null\n },\n icon: {\n type: String,\n required: true\n },\n iconUrl: {\n type: String,\n default: null\n },\n source: {\n type: String,\n required: true\n },\n status: {\n type: [Object, Array],\n default: () => ({})\n }\n },\n setup() {\n const isDarkTheme = useIsDarkTheme();\n return {\n isDarkTheme\n };\n },\n computed: {\n avatarUrl() {\n if (this.iconUrl) {\n return this.iconUrl;\n }\n return this.id && this.source === \"users\" ? getAvatarUrl(this.id, { isDarkTheme: this.isDarkTheme }) : null;\n },\n // For backwards compatibility\n labelWithFallback() {\n return this.label || this.title;\n }\n }\n};\nvar _sfc_render$1 = function render() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"div\", { staticClass: \"autocomplete-result\" }, [_c(\"div\", { staticClass: \"autocomplete-result__icon\", class: [_vm.icon, `autocomplete-result__icon--${_vm.avatarUrl ? \"with-avatar\" : \"\"}`], style: _vm.avatarUrl ? { backgroundImage: `url(${_vm.avatarUrl})` } : null }, [_vm.status.icon ? _c(\"span\", { staticClass: \"autocomplete-result__status autocomplete-result__status--icon\" }, [_vm._v(\" \" + _vm._s(_vm.status && _vm.status.icon || \"\") + \" \")]) : _vm.status.status && _vm.status.status !== \"offline\" ? _c(\"NcUserStatusIcon\", { staticClass: \"autocomplete-result__status\", attrs: { \"status\": _vm.status.status } }) : _vm._e()], 1), _c(\"span\", { staticClass: \"autocomplete-result__content\" }, [_c(\"span\", { staticClass: \"autocomplete-result__title\", attrs: { \"title\": _vm.labelWithFallback } }, [_vm._v(\" \" + _vm._s(_vm.labelWithFallback) + \" \")]), _vm.subline ? _c(\"span\", { staticClass: \"autocomplete-result__subline\" }, [_vm._v(\" \" + _vm._s(_vm.subline) + \" \")]) : _vm._e()])]);\n};\nvar _sfc_staticRenderFns$1 = [];\nvar __component__$1 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$1,\n _sfc_render$1,\n _sfc_staticRenderFns$1,\n false,\n null,\n \"ef14f1ec\"\n);\nconst NcAutoCompleteResult = __component__$1.exports;\nregister(t33, t36);\nconst style1 = {\n \"material-design-icon\": \"_material-design-icon_VcM5r\",\n \"tribute-container\": \"_tribute-container_J8oX8\",\n \"tribute-container__item\": \"_tribute-container__item_pmtRS\",\n \"tribute-container--focus-visible\": \"_tribute-container--focus-visible_fgXKW\",\n \"tribute-container-autocomplete\": \"_tribute-container-autocomplete_4BlSc\",\n \"tribute-container-emoji\": \"_tribute-container-emoji_-VNGb\",\n \"tribute-container-link\": \"_tribute-container-link_dwgU7\",\n \"tribute-item\": \"_tribute-item_bDEuV\",\n \"tribute-item__title\": \"_tribute-item__title_hLTFb\",\n \"tribute-item__icon\": \"_tribute-item__icon_4BGX5\"\n};\nconst smilesCharacters = [\"d\", \"D\", \"p\", \"P\", \"s\", \"S\", \"x\", \"X\", \")\", \"(\", \"|\", \"/\"];\nconst textSmiles = [];\nsmilesCharacters.forEach((char) => {\n textSmiles.push(\":\" + char);\n textSmiles.push(\":-\" + char);\n});\nlet isPlaintextOnlySupported = null;\nconst _sfc_main = {\n name: \"NcRichContenteditable\",\n mixins: [richEditor],\n inheritAttrs: false,\n model: {\n prop: \"modelValue\",\n event: \"update:modelValue\"\n },\n props: {\n /**\n * The ID attribute of the content editable\n */\n id: {\n type: String,\n default: () => GenRandomId(7)\n },\n /**\n * Visual label of the contenteditable\n */\n label: {\n type: String,\n default: \"\"\n },\n /**\n * Removed in v9 - use `modelValue` (`v-model`) instead\n *\n * @deprecated\n */\n value: {\n type: String,\n default: void 0\n },\n /**\n * The text content\n */\n modelValue: {\n type: String,\n default: \"\"\n },\n /**\n * Placeholder to be shown if empty\n */\n placeholder: {\n type: String,\n default: t(\"Write a message …\")\n },\n /**\n * Auto complete function\n */\n autoComplete: {\n type: Function,\n default: () => []\n },\n /**\n * The containing element or selector for the tribute (menu popover)\n * Defaults to `body` element\n */\n menuContainer: {\n type: [String, Element, null],\n default: null\n },\n /**\n * Make the contenteditable looks like a textarea or not.\n * Default looks like a single-line input.\n * This also handle the default enter/shift+enter behaviour.\n * if multiline, enter = newline; otherwise enter = submit\n * shift+enter always add a new line. ctrl+enter always submits\n */\n multiline: {\n type: Boolean,\n default: false\n },\n /**\n * Is the content editable ?\n */\n contenteditable: {\n type: Boolean,\n // eslint-disable-next-line vue/no-boolean-default\n default: true\n },\n /**\n * Disable the editing and show specific disabled design\n */\n disabled: {\n type: Boolean,\n default: false\n },\n /**\n * Max allowed length\n */\n maxlength: {\n type: Number,\n default: null\n },\n /**\n * Enable or disable emoji autocompletion\n */\n emojiAutocomplete: {\n type: Boolean,\n // eslint-disable-next-line vue/no-boolean-default\n default: true\n },\n /**\n * Enable or disable link autocompletion\n */\n linkAutocomplete: {\n type: Boolean,\n // eslint-disable-next-line vue/no-boolean-default\n default: true\n }\n },\n emits: [\n \"submit\",\n \"paste\",\n /**\n * Removed in v9 - use `update:modelValue` (`v-model`) instead\n *\n * @deprecated\n */\n \"update:value\",\n \"update:modelValue\",\n /** Same as update:modelValue for Vue 2 compatibility */\n \"update:model-value\",\n \"smart-picker-submit\"\n ],\n setup() {\n const uid = GenRandomId(5);\n const model = useModelMigration(\"value\", \"update:value\", true);\n if (isPlaintextOnlySupported === null) {\n try {\n document.createElement(\"div\").contentEditable = \"plaintext-only\";\n isPlaintextOnlySupported = true;\n } catch (error) {\n logger.debug(\"[NcRichContenteditable] Unsupported attribute value:\", { error });\n isPlaintextOnlySupported = false;\n }\n }\n return {\n model,\n // Constants\n labelId: `nc-rich-contenteditable-${uid}-label`,\n tributeId: `nc-rich-contenteditable-${uid}-tribute`,\n /**\n * Non-reactive property to store Tribute instance\n *\n * @type {import('tributejs').default | null}\n */\n tribute: null,\n tributeStyleMutationObserver: null\n };\n },\n data() {\n return {\n // Represent the raw untrimmed text of the contenteditable\n // serves no other purpose than to check whether the\n // content is empty or not\n localValue: this.model,\n // Is in text composition session in IME\n isComposing: false,\n // Tribute autocomplete\n isAutocompleteOpen: false,\n autocompleteActiveId: void 0,\n isTributeIntegrationDone: false\n };\n },\n computed: {\n /**\n * Is the current trimmed value empty?\n *\n * @return {boolean}\n */\n isEmptyValue() {\n return !this.localValue || this.localValue.trim() === \"\";\n },\n /**\n * Is the current value over maxlength?\n *\n * @return {boolean}\n */\n isOverMaxlength() {\n if (this.isEmptyValue || !this.maxlength) {\n return false;\n }\n return stringLength(this.localValue) > this.maxlength;\n },\n /**\n * Tooltip to show if characters count is over limit\n *\n * @return {string}\n */\n tooltipString() {\n if (!this.isOverMaxlength) {\n return null;\n }\n return n(\"Message limit of %n character reached\", \"Message limit of %n characters reached\", this.maxlength);\n },\n /**\n * Edit is only allowed when contenteditable is:\n * 'true' (all browsers since 2015)\n * 'plaintext-only' (most browsers since 2015, Firefox since 136+)\n *\n * @return {string}\n */\n contenteditableAttributeValue() {\n if (this.contenteditable && !this.disabled) {\n return isPlaintextOnlySupported ? \"plaintext-only\" : \"true\";\n }\n return \"false\";\n },\n /**\n * Proxied native event handlers without custom event handlers\n *\n * @return {Record}\n */\n listeners() {\n const listeners = { ...this.$listeners };\n delete listeners.paste;\n return listeners;\n },\n /**\n * Compute debounce function for the autocomplete function\n */\n debouncedAutoComplete() {\n return debounce(async (search, callback) => {\n this.autoComplete(search, callback);\n }, 100);\n }\n },\n watch: {\n /**\n * If the parent value change, we compare the plain text rendering\n * If it's different, we render everything and update the main content\n */\n model() {\n const html = this.$refs.contenteditable.innerHTML;\n if (this.model.trim() !== this.parseContent(html).trim()) {\n this.updateContent(this.model);\n }\n }\n },\n mounted() {\n this.initializeTribute();\n this.updateContent(this.model);\n },\n beforeDestroy() {\n if (this.tribute) {\n this.tribute.detach(this.$refs.contenteditable);\n }\n if (this.tributeStyleMutationObserver) {\n this.tributeStyleMutationObserver.disconnect();\n }\n },\n methods: {\n /**\n * Focus the richContenteditable\n *\n * @public\n */\n focus() {\n this.$refs.contenteditable.focus();\n },\n initializeTribute() {\n const renderMenuItem = (content) => `
${content}
`;\n const tributesCollection = [];\n tributesCollection.push({\n fillAttr: \"id\",\n // Search against id and label (display name) (fallback to title for v8.0.0..8.6.1 compatibility)\n lookup: (result) => `${result.id} ${result.label ?? result.title}`,\n requireLeadingSpace: true,\n // Popup mention autocompletion templates\n menuItemTemplate: (item) => renderMenuItem(this.renderComponentHtml(item.original, NcAutoCompleteResult)),\n // Hide if no results\n noMatchTemplate: () => '',\n // Inner display of mentions\n selectTemplate: (item) => this.genSelectTemplate(item?.original?.id),\n // Autocompletion results\n values: this.debouncedAutoComplete,\n // Class added to the menu container\n containerClass: `${this.$style[\"tribute-container\"]} ${this.$style[\"tribute-container-autocomplete\"]}`,\n // Class added to each list item\n itemClass: this.$style[\"tribute-container__item\"]\n });\n if (this.emojiAutocomplete) {\n tributesCollection.push({\n trigger: \":\",\n // Don't use the tribute search function at all\n // We pass search results as values (see below)\n lookup: (result, query) => query,\n requireLeadingSpace: true,\n // Popup mention autocompletion templates\n menuItemTemplate: (item) => {\n if (textSmiles.includes(item.original)) {\n return item.original;\n }\n return renderMenuItem(`${item.original.native} :${item.original.short_name}`);\n },\n // Hide if no results\n noMatchTemplate: () => t(\"No emoji found\"),\n // Display raw emoji along with its name\n selectTemplate: (item) => {\n if (textSmiles.includes(item.original)) {\n return item.original;\n }\n emojiAddRecent(item.original);\n return item.original.native;\n },\n // Pass the search results as values\n values: (text, cb) => {\n const emojiResults = emojiSearch(text);\n if (textSmiles.includes(\":\" + text)) {\n emojiResults.unshift(\":\" + text);\n }\n cb(emojiResults);\n },\n // Class added to the menu container\n containerClass: `${this.$style[\"tribute-container\"]} ${this.$style[\"tribute-container-emoji\"]}`,\n // Class added to each list item\n itemClass: this.$style[\"tribute-container__item\"]\n });\n }\n if (this.linkAutocomplete) {\n tributesCollection.push({\n trigger: \"/\",\n // Don't use the tribute search function at all\n // We pass search results as values (see below)\n lookup: (result, query) => query,\n requireLeadingSpace: true,\n // Popup mention autocompletion templates\n menuItemTemplate: (item) => renderMenuItem(`${item.original.title}`),\n // Hide if no results\n noMatchTemplate: () => t(\"No link provider found\"),\n selectTemplate: this.getLink,\n // Pass the search results as values\n values: (text, cb) => cb(searchProvider(text)),\n // Class added to the menu container\n containerClass: `${this.$style[\"tribute-container\"]} ${this.$style[\"tribute-container-link\"]}`,\n // Class added to each list item\n itemClass: this.$style[\"tribute-container__item\"]\n });\n }\n const menuContainer = typeof this.menuContainer === \"string\" ? document.querySelector(this.menuContainer) : this.menuContainer;\n this.tribute = new Tribute({\n collection: tributesCollection,\n // FIXME: tributejs doesn't support allowSpaces as a collection option, only as a global one\n // Requires to fork a library to allow spaces only in the middle of mentions ('@' trigger)\n allowSpaces: false,\n // Where to inject the menu popup\n menuContainer\n });\n this.tribute.attach(this.$refs.contenteditable);\n this.$refs.contenteditable.contentEditable = this.contenteditableAttributeValue;\n },\n getLink(item) {\n getLinkWithPicker(item.original.id).then((result) => {\n const tmpElem = document.getElementById(\"tmp-smart-picker-result-node\");\n const eventData = {\n result,\n insertText: true\n };\n this.$emit(\"smart-picker-submit\", eventData);\n if (eventData.insertText) {\n const newElem = document.createTextNode(result);\n tmpElem.replaceWith(newElem);\n this.setCursorAfter(newElem);\n this.updateValue(this.$refs.contenteditable.innerHTML);\n } else {\n tmpElem.remove();\n }\n }).catch((error) => {\n logger.debug(\"Smart picker promise rejected\", { error });\n const tmpElem = document.getElementById(\"tmp-smart-picker-result-node\");\n this.setCursorAfter(tmpElem);\n tmpElem.remove();\n });\n return '';\n },\n setCursorAfter(element) {\n const range = document.createRange();\n range.setEndAfter(element);\n range.collapse();\n const selection = window.getSelection();\n selection.removeAllRanges();\n selection.addRange(range);\n },\n moveCursorToEnd() {\n if (!document.createRange) {\n return;\n }\n if (window.getSelection().rangeCount > 0 && this.$refs.contenteditable.contains(window.getSelection().getRangeAt(0).commonAncestorContainer)) {\n return;\n }\n const range = document.createRange();\n range.selectNodeContents(this.$refs.contenteditable);\n range.collapse(false);\n const selection = window.getSelection();\n selection.removeAllRanges();\n selection.addRange(range);\n },\n /**\n * Re-emit the input event to the parent\n *\n * @param {Event} event the input event\n */\n onInput(event) {\n this.updateValue(event.target.innerHTML);\n },\n /**\n * When pasting, sanitize the content, extract text\n * and render it again\n *\n * @param {Event} event the paste event\n * @fires Event paste the original paste event\n */\n onPaste(event) {\n if (!this.contenteditable || this.disabled) {\n return;\n }\n if (isPlaintextOnlySupported) {\n this.$emit(\"paste\", event);\n } else {\n event.preventDefault();\n const clipboardData = event.clipboardData;\n this.$emit(\"paste\", event);\n if (clipboardData.files.length !== 0 || !Object.values(clipboardData.items).find((item) => item?.type.startsWith(\"text\"))) {\n return;\n }\n const text = clipboardData.getData(\"text\");\n const selection = window.getSelection();\n const range = selection.getRangeAt(0);\n range.deleteContents();\n range.insertNode(document.createTextNode(text));\n range.collapse(false);\n }\n this.updateValue(this.$refs.contenteditable.innerHTML);\n },\n /**\n * Update the value text from the provided html\n *\n * @param {string} htmlOrText the html content (or raw text with @mentions)\n */\n updateValue(htmlOrText) {\n const text = this.parseContent(htmlOrText).replace(/^\\n$/, \"\");\n this.localValue = text;\n this.model = text;\n },\n /**\n * Update content and local value\n *\n * @param {string} value the message value\n */\n updateContent(value) {\n const renderedContent = this.renderContent(value);\n this.$refs.contenteditable.innerHTML = renderedContent;\n this.localValue = value;\n },\n /**\n * Enter key pressed. Submits if not multiline\n *\n * @param {Event} event the keydown event\n */\n onEnter(event) {\n if (this.multiline || this.isOverMaxlength || this.tribute.isActive || this.isComposing) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n this.$emit(\"submit\", event);\n },\n /**\n * Ctrl + Enter key pressed is used to submit\n *\n * @param {Event} event the keydown event\n */\n onCtrlEnter(event) {\n if (this.isOverMaxlength) {\n return;\n }\n this.$emit(\"submit\", event);\n },\n onKeyUp(event) {\n event.stopImmediatePropagation();\n },\n onKeyEsc(event) {\n if (this.tribute && this.isAutocompleteOpen) {\n event.stopImmediatePropagation();\n this.tribute.hideMenu();\n }\n },\n /**\n * Get HTML element with Tribute.js container\n *\n * @return {HTMLElement}\n */\n getTributeContainer() {\n return this.tribute.menu;\n },\n /**\n * Get the currently selected item element id in Tribute.js container\n *\n * @return {HTMLElement}\n */\n getTributeSelectedItem() {\n return this.getTributeContainer().querySelector('.highlight [id^=\"nc-rich-contenteditable-tribute-item-\"]');\n },\n /**\n * Handle Tribute activation\n *\n * @param {boolean} isActive - is active\n */\n onTributeActive(isActive) {\n this.isAutocompleteOpen = isActive;\n if (isActive) {\n this.getTributeContainer().setAttribute(\"class\", this.tribute.current.collection.containerClass || this.$style[\"tribute-container\"]);\n this.setupTributeIntegration();\n document.removeEventListener(\"click\", this.hideTribute, true);\n } else {\n this.debouncedAutoComplete.clear();\n this.autocompleteActiveId = void 0;\n this.setTributeFocusVisible(false);\n }\n },\n onTributeArrowKeyDown() {\n if (!this.isAutocompleteOpen) {\n return;\n }\n this.setTributeFocusVisible(true);\n this.onTributeSelectedItemWillChange();\n },\n onTributeSelectedItemWillChange() {\n requestAnimationFrame(() => {\n this.autocompleteActiveId = this.getTributeSelectedItem()?.id;\n });\n },\n setupTributeIntegration() {\n if (this.isTributeIntegrationDone) {\n return;\n }\n this.isTributeIntegrationDone = true;\n const tributeContainer = this.getTributeContainer();\n tributeContainer.id = this.tributeId;\n tributeContainer.setAttribute(\"role\", \"listbox\");\n const ul = tributeContainer.children[0];\n ul.setAttribute(\"role\", \"presentation\");\n this.tributeStyleMutationObserver = new MutationObserver(([{ target }]) => {\n if (target.style.display !== \"none\") {\n this.onTributeSelectedItemWillChange();\n }\n }).observe(tributeContainer, {\n attributes: true,\n attributeFilter: [\"style\"]\n });\n tributeContainer.addEventListener(\"mousemove\", () => {\n this.setTributeFocusVisible(false);\n this.onTributeSelectedItemWillChange();\n }, { passive: true });\n },\n /**\n * Set tribute-container--focus-visible class on the Tribute container when the user navigates the listbox via keyboard.\n *\n * Because the real focus is kept on the textbox, we cannot use the :focus-visible pseudo-class\n * to style selected options in the autocomplete listbox.\n *\n * @param {boolean} withFocusVisible - should the focus-visible class be added\n */\n setTributeFocusVisible(withFocusVisible) {\n if (withFocusVisible) {\n this.getTributeContainer().classList.add(this.$style[\"tribute-container--focus-visible\"]);\n } else {\n this.getTributeContainer().classList.remove(this.$style[\"tribute-container--focus-visible\"]);\n }\n },\n /**\n * Show tribute menu programmatically.\n *\n * @param {string} trigger - trigger character, can be '/', '@', or ':'\n *\n * @public\n */\n showTribute(trigger) {\n this.focus();\n const index = this.tribute.collection.findIndex((collection) => collection.trigger === trigger);\n this.tribute.showMenuForCollection(this.$refs.contenteditable, index);\n this.updateValue(this.$refs.contenteditable.innerHTML);\n document.addEventListener(\"click\", this.hideTribute, true);\n },\n /**\n * Hide tribute menu programmatically\n *\n */\n hideTribute() {\n this.tribute.hideMenu();\n document.removeEventListener(\"click\", this.hideTribute, true);\n }\n }\n};\nvar _sfc_render = function render2() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"div\", { staticClass: \"rich-contenteditable\" }, [_c(\"div\", _vm._g(_vm._b({ ref: \"contenteditable\", staticClass: \"rich-contenteditable__input\", class: {\n \"rich-contenteditable__input--empty\": _vm.isEmptyValue,\n \"rich-contenteditable__input--multiline\": _vm.multiline,\n \"rich-contenteditable__input--has-label\": _vm.label,\n \"rich-contenteditable__input--overflow\": _vm.isOverMaxlength,\n \"rich-contenteditable__input--disabled\": _vm.disabled\n }, attrs: { \"id\": _vm.id, \"contenteditable\": _vm.contenteditableAttributeValue, \"aria-labelledby\": _vm.label ? _vm.labelId : void 0, \"aria-placeholder\": _vm.placeholder, \"aria-multiline\": \"true\", \"role\": \"textbox\", \"aria-haspopup\": \"listbox\", \"aria-autocomplete\": \"inline\", \"aria-controls\": _vm.tributeId, \"aria-expanded\": _vm.isAutocompleteOpen ? \"true\" : \"false\", \"aria-activedescendant\": _vm.autocompleteActiveId, \"title\": _vm.tooltipString }, on: { \"focus\": _vm.moveCursorToEnd, \"input\": _vm.onInput, \"compositionstart\": function($event) {\n _vm.isComposing = true;\n }, \"compositionend\": function($event) {\n _vm.isComposing = false;\n }, \"!keydown\": function($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"esc\", 27, $event.key, [\"Esc\", \"Escape\"])) return null;\n return _vm.onKeyEsc.apply(null, arguments);\n }, \"keydown\": [function($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")) return null;\n if ($event.ctrlKey || $event.shiftKey || $event.altKey || $event.metaKey) return null;\n return _vm.onEnter.apply(null, arguments);\n }, function($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")) return null;\n if (!$event.ctrlKey) return null;\n if ($event.shiftKey || $event.altKey || $event.metaKey) return null;\n $event.stopPropagation();\n $event.preventDefault();\n return _vm.onCtrlEnter.apply(null, arguments);\n }, function($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"up\", 38, $event.key, [\"Up\", \"ArrowUp\"])) return null;\n if ($event.ctrlKey || $event.shiftKey || $event.altKey || $event.metaKey) return null;\n $event.stopPropagation();\n return _vm.onTributeArrowKeyDown.apply(null, arguments);\n }, function($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"down\", 40, $event.key, [\"Down\", \"ArrowDown\"])) return null;\n if ($event.ctrlKey || $event.shiftKey || $event.altKey || $event.metaKey) return null;\n $event.stopPropagation();\n return _vm.onTributeArrowKeyDown.apply(null, arguments);\n }], \"paste\": _vm.onPaste, \"!keyup\": function($event) {\n $event.stopPropagation();\n $event.preventDefault();\n return _vm.onKeyUp.apply(null, arguments);\n }, \"tribute-active-true\": function($event) {\n return _vm.onTributeActive(true);\n }, \"tribute-active-false\": function($event) {\n return _vm.onTributeActive(false);\n } } }, \"div\", _vm.$attrs, false), _vm.listeners)), _vm.label ? _c(\"div\", { staticClass: \"rich-contenteditable__label\", attrs: { \"id\": _vm.labelId } }, [_vm._v(\" \" + _vm._s(_vm.label) + \" \")]) : _vm._e()]);\n};\nvar _sfc_staticRenderFns = [];\nconst __cssModules = {\n \"$style\": style1\n};\nfunction _sfc_injectStyles(ctx) {\n for (var key in __cssModules) {\n this[key] = __cssModules[key];\n }\n}\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n _sfc_injectStyles,\n \"894f61fb\"\n);\nconst NcRichContenteditable = __component__.exports;\nexport {\n NcAutoCompleteResult as N,\n NcRichContenteditable as a\n};\n//# sourceMappingURL=NcRichContenteditable-8ZA_LArB.mjs.map\n","import { u as useModelMigration } from \"./useModelMigration-EhAWvqDD.mjs\";\nimport { r as register, k as t0, a as t } from \"./_l10n-DVz9Qdzk.mjs\";\nimport { l as logger } from \"./logger-D3RVzcfQ.mjs\";\nimport NcEllipsisedOption from \"../Components/NcEllipsisedOption.mjs\";\nimport { N as NcSelect } from \"./NcSelect-CHc1QupB.mjs\";\nimport axios from \"@nextcloud/axios\";\nimport { generateRemoteUrl } from \"@nextcloud/router\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nregister(t0);\nfunction xmlToJson(xml) {\n let obj = {};\n if (xml.nodeType === 1) {\n if (xml.attributes.length > 0) {\n obj[\"@attributes\"] = {};\n for (let j = 0; j < xml.attributes.length; j++) {\n const attribute = xml.attributes.item(j);\n obj[\"@attributes\"][attribute.nodeName] = attribute.nodeValue;\n }\n }\n } else if (xml.nodeType === 3) {\n obj = xml.nodeValue;\n }\n if (xml.hasChildNodes()) {\n for (let i = 0; i < xml.childNodes.length; i++) {\n const item = xml.childNodes.item(i);\n const nodeName = item.nodeName;\n if (typeof obj[nodeName] === \"undefined\") {\n obj[nodeName] = xmlToJson(item);\n } else {\n if (typeof obj[nodeName].push === \"undefined\") {\n const old = obj[nodeName];\n obj[nodeName] = [];\n obj[nodeName].push(old);\n }\n obj[nodeName].push(xmlToJson(item));\n }\n }\n }\n return obj;\n}\nfunction parseXml(xml) {\n let dom = null;\n try {\n dom = new DOMParser().parseFromString(xml, \"text/xml\");\n } catch (error) {\n logger.error(\"Failed to parse xml document\", { error });\n }\n return dom;\n}\nfunction xmlToTagList(xml) {\n const json = xmlToJson(parseXml(xml));\n const list = json[\"d:multistatus\"][\"d:response\"];\n const result = [];\n for (const index in list) {\n const tag = list[index][\"d:propstat\"];\n if (tag[\"d:status\"][\"#text\"] !== \"HTTP/1.1 200 OK\") {\n continue;\n }\n result.push({\n id: parseInt(tag[\"d:prop\"][\"oc:id\"][\"#text\"]),\n displayName: tag[\"d:prop\"][\"oc:display-name\"][\"#text\"],\n canAssign: tag[\"d:prop\"][\"oc:can-assign\"][\"#text\"] === \"true\",\n userAssignable: tag[\"d:prop\"][\"oc:user-assignable\"][\"#text\"] === \"true\",\n userVisible: tag[\"d:prop\"][\"oc:user-visible\"][\"#text\"] === \"true\"\n });\n }\n return result;\n}\nasync function searchTags() {\n if (window.NextcloudVueDocs) {\n return Promise.resolve(xmlToTagList(window.NextcloudVueDocs.tags));\n }\n const result = await axios({\n method: \"PROPFIND\",\n url: generateRemoteUrl(\"dav\") + \"/systemtags/\",\n data: `\n\t\t\t\t\t\n\t\t\t\t\t \n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t \n\t\t\t\t\t`\n });\n return xmlToTagList(result.data);\n}\nconst _sfc_main = {\n name: \"NcSelectTags\",\n components: {\n NcEllipsisedOption,\n NcSelect\n },\n model: {\n prop: \"modelValue\",\n event: \"update:modelValue\"\n },\n props: {\n // Add NcSelect prop defaults and populate $props\n ...NcSelect.props,\n /**\n * Enable automatic fetching of tags\n *\n * If `false`, available tags must be passed using the `options` prop\n */\n fetchTags: {\n type: Boolean,\n // eslint-disable-next-line vue/no-boolean-default\n default: true\n },\n /**\n * Callback to generate the label text\n *\n * @see https://vue-select.org/api/props.html#getoptionlabel\n */\n getOptionLabel: {\n type: Function,\n default: (option) => {\n const { displayName, userVisible, userAssignable } = option;\n if (userVisible === false) {\n return t(\"{tag} (invisible)\", { tag: displayName });\n }\n if (userAssignable === false) {\n return t(\"{tag} (restricted)\", { tag: displayName });\n }\n return displayName;\n }\n },\n /**\n * Sets the maximum number of tags to display in the dropdown list\n *\n * Because of compatibility reasons only 5 tag entries are shown by\n * default\n */\n limit: {\n type: Number,\n default: 5\n },\n /**\n * Allow selection of multiple options\n *\n * This prop automatically sets the internal `closeOnSelect` prop to\n * its boolean opposite\n *\n * @see https://vue-select.org/api/props.html#multiple\n */\n multiple: {\n type: Boolean,\n // eslint-disable-next-line vue/no-boolean-default\n default: true\n },\n /**\n * Callback to filter available options\n */\n optionsFilter: {\n type: Function,\n default: null\n },\n /**\n * Enable passing of `value` prop and emitted `input` events as-is\n * i.e. for usage with `v-model`\n *\n * If `true`, custom internal `value` and `input` handling is disabled\n */\n passthru: {\n type: Boolean,\n default: false\n },\n /**\n * Placeholder text\n *\n * @see https://vue-select.org/api/props.html#placeholder\n */\n placeholder: {\n type: String,\n default: t(\"Select a tag\")\n },\n /**\n * Removed in v9 - use `modelValue` (`v-model`) instead\n *\n * @deprecated\n */\n value: {\n type: [Number, Array, Object],\n default: void 0\n },\n /**\n * Currently selected value\n */\n modelValue: {\n type: [Number, Array, Object],\n default: null\n },\n /**\n * Any available prop\n *\n * @see https://vue-select.org/api/props.html\n */\n // Not an actual prop but needed to show in vue-styleguidist docs\n // eslint-disable-next-line\n \" \": {}\n },\n emits: [\n /**\n * Removed in v9 - use `update:modelValue` (`v-model`) instead\n */\n \"input\",\n /**\n * Emitted on input events of the multiselect field\n *\n * @type {number|number[]}\n */\n \"update:modelValue\",\n /** Same as update:modelValue for Vue 2 compatibility */\n \"update:model-value\",\n /**\n * All events from https://vue-select.org/api/events.html\n */\n // Not an actual event but needed to show in vue-styleguidist docs\n \" \"\n ],\n setup() {\n const model = useModelMigration(\"value\", \"input\");\n const noop = () => {\n };\n return {\n model,\n noop\n };\n },\n data() {\n return {\n search: \"\",\n availableTags: []\n };\n },\n computed: {\n availableOptions() {\n if (this.optionsFilter) {\n return this.tags.filter(this.optionsFilter);\n }\n return this.tags;\n },\n localValue() {\n if (this.tags.length === 0) {\n return [];\n }\n if (this.multiple) {\n return this.model.filter((tag) => tag !== \"\").map((id) => this.tags.find((tag2) => tag2.id === id));\n } else {\n return this.tags.find((tag) => tag.id === this.model);\n }\n },\n propsToForward() {\n const {\n // Props handled by this component\n fetchTags,\n optionsFilter,\n passthru,\n // Props to forward\n ...propsToForward\n } = this.$props;\n return propsToForward;\n },\n tags() {\n if (!this.fetchTags) {\n return this.options;\n }\n return this.availableTags;\n }\n },\n async created() {\n if (!this.fetchTags) {\n return;\n }\n try {\n const result = await searchTags();\n this.availableTags = result;\n } catch (error) {\n logger.error(\"Loading systemtags failed\", { error });\n }\n },\n methods: {\n handleInput(value) {\n if (this.multiple) {\n this.model = value.map((element) => element.id);\n } else {\n if (value === null) {\n this.model = null;\n } else {\n this.model = value.id;\n }\n }\n }\n }\n};\nvar _sfc_render = function render() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"NcSelect\", _vm._g(_vm._b({ attrs: { \"options\": _vm.availableOptions, \"close-on-select\": !_vm.multiple, \"value\": _vm.passthru ? _vm.model : _vm.localValue }, on: { \"search\": (searchString) => _vm.search = searchString }, scopedSlots: _vm._u([{ key: \"option\", fn: function(option) {\n return [_c(\"NcEllipsisedOption\", { attrs: { \"name\": _vm.getOptionLabel(option), \"search\": _vm.search } })];\n } }, { key: \"selected-option\", fn: function(selectedOption) {\n return [_c(\"NcEllipsisedOption\", { attrs: { \"name\": _vm.getOptionLabel(selectedOption), \"search\": _vm.search } })];\n } }, _vm._l(_vm.$scopedSlots, function(_, name) {\n return { key: name, fn: function(data) {\n return [_vm._t(name, null, null, data)];\n } };\n })], null, true) }, \"NcSelect\", _vm.propsToForward, false), {\n ..._vm.$listeners,\n input: _vm.passthru ? _vm.$listeners.input : _vm.noop,\n \"update:modelValue\": _vm.passthru ? _vm.$listeners[\"update:modelValue\"] : _vm.handleInput,\n \"update:model-value\": _vm.passthru ? _vm.$listeners[\"update:model-value\"] : _vm.noop\n }));\n};\nvar _sfc_staticRenderFns = [];\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n null,\n null\n);\nconst NcSelectTags = __component__.exports;\nexport {\n NcSelectTags as N\n};\n//# sourceMappingURL=NcSelectTags-Bokig7ar.mjs.map\n","import '../assets/NcSettingsInputText-18lfGViv.css';\nimport { u as useModelMigration } from \"./useModelMigration-EhAWvqDD.mjs\";\nimport { r as register, j as t50, a as t } from \"./_l10n-DVz9Qdzk.mjs\";\nimport { G as GenRandomId } from \"./GenRandomId-F5ebeBB_.mjs\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nregister(t50);\nconst _sfc_main = {\n name: \"NcSettingsInputText\",\n model: {\n prop: \"value\",\n event: \"update:value\"\n },\n props: {\n /**\n * label of the select group element\n */\n label: {\n type: String,\n required: true\n },\n /**\n * hint of the select group input\n */\n hint: {\n type: String,\n default: \"\"\n },\n /**\n * Removed in v9 - use `modelValue` (`v-model`) instead\n *\n * @deprecated\n */\n value: {\n type: String,\n default: void 0\n },\n /**\n * value of the select group input\n */\n modelValue: {\n type: String,\n default: \"\"\n },\n /**\n * disabled state of the settings select group input\n */\n disabled: {\n type: Boolean,\n default: false\n },\n /**\n * id attribute of the select group element\n */\n id: {\n type: String,\n default: () => \"settings-input-text-\" + GenRandomId(),\n validator: (id) => id.trim() !== \"\"\n }\n },\n emits: [\n /**\n * Removed in v9 - use `update:modelValue` (`v-model`) instead\n *\n * @deprecated\n */\n \"update:value\",\n /**\n * Emitted when the inputs value changes\n *\n * @type {string}\n */\n \"update:modelValue\",\n /* Same as update:modelValue for Vue 2 compatibility */\n \"update:model-value\",\n \"input\",\n \"submit\",\n \"change\"\n ],\n setup() {\n const model = useModelMigration(\"value\", \"update:value\");\n return {\n model\n };\n },\n data() {\n return {\n submitTranslated: t(\"Submit\")\n };\n },\n computed: {\n /**\n * @return {string}\n */\n idSubmit() {\n return this.id + \"-submit\";\n }\n },\n methods: {\n onInput(event) {\n this.$emit(\"input\", event);\n this.model = event.target.value;\n },\n onSubmit(event) {\n if (!this.disabled) {\n this.$emit(\"submit\", event);\n }\n },\n onChange(event) {\n this.$emit(\"change\", event);\n }\n }\n};\nvar _sfc_render = function render() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"form\", { ref: \"form\", attrs: { \"disabled\": _vm.disabled }, on: { \"submit\": function($event) {\n $event.preventDefault();\n $event.stopPropagation();\n return _vm.onSubmit.apply(null, arguments);\n } } }, [_c(\"div\", { staticClass: \"input-wrapper\" }, [_c(\"label\", { staticClass: \"action-input__label\", attrs: { \"for\": _vm.id } }, [_vm._v(_vm._s(_vm.label))]), _c(\"input\", { attrs: { \"id\": _vm.id, \"type\": \"text\", \"disabled\": _vm.disabled }, domProps: { \"value\": _vm.model }, on: { \"input\": _vm.onInput, \"change\": _vm.onChange } }), _c(\"input\", { staticClass: \"action-input__submit\", attrs: { \"id\": _vm.idSubmit, \"type\": \"submit\" }, domProps: { \"value\": _vm.submitTranslated } }), _vm.hint ? _c(\"p\", { staticClass: \"hint\" }, [_vm._v(\" \" + _vm._s(_vm.hint) + \" \")]) : _vm._e()])]);\n};\nvar _sfc_staticRenderFns = [];\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n null,\n \"9938ac79\"\n);\nconst NcSettingsInputText = __component__.exports;\nexport {\n NcSettingsInputText as N\n};\n//# sourceMappingURL=NcSettingsInputText-BwnkZzWL.mjs.map\n","import '../assets/NcSettingsSection-D_qeKnRb.css';\nimport { loadState } from \"@nextcloud/initial-state\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nimport { r as register, v as t25, a as t } from \"./_l10n-DVz9Qdzk.mjs\";\nconst _sfc_main$1 = {\n name: \"HelpCircleIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nvar _sfc_render$1 = function render() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"span\", _vm._b({ staticClass: \"material-design-icon help-circle-icon\", attrs: { \"aria-hidden\": _vm.title ? null : \"true\", \"aria-label\": _vm.title, \"role\": \"img\" }, on: { \"click\": function($event) {\n return _vm.$emit(\"click\", $event);\n } } }, \"span\", _vm.$attrs, false), [_c(\"svg\", { staticClass: \"material-design-icon__svg\", attrs: { \"fill\": _vm.fillColor, \"width\": _vm.size, \"height\": _vm.size, \"viewBox\": \"0 0 24 24\" } }, [_c(\"path\", { attrs: { \"d\": \"M15.07,11.25L14.17,12.17C13.45,12.89 13,13.5 13,15H11V14.5C11,13.39 11.45,12.39 12.17,11.67L13.41,10.41C13.78,10.05 14,9.55 14,9C14,7.89 13.1,7 12,7A2,2 0 0,0 10,9H8A4,4 0 0,1 12,5A4,4 0 0,1 16,9C16,9.88 15.64,10.67 15.07,11.25M13,19H11V17H13M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12C22,6.47 17.5,2 12,2Z\" } }, [_vm.title ? _c(\"title\", [_vm._v(_vm._s(_vm.title))]) : _vm._e()])])]);\n};\nvar _sfc_staticRenderFns$1 = [];\nvar __component__$1 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$1,\n _sfc_render$1,\n _sfc_staticRenderFns$1,\n false,\n null,\n null\n);\nconst HelpCircle = __component__$1.exports;\nregister(t25);\nconst [major] = loadState(\"core\", \"config\", { version: \"30.0\" }).version.split(\".\", 2) ?? [];\nconst isLegacy = major && Number.parseInt(major) < 30;\nconst _sfc_main = {\n name: \"NcSettingsSection\",\n components: {\n HelpCircle\n },\n props: {\n /**\n * The name of the settings section.\n * This is used for the headline and needs to be set.\n */\n name: {\n type: String,\n required: true\n },\n /**\n * Further informational description of the section.\n */\n description: {\n type: String,\n default: \"\"\n },\n /**\n * The URL for the documentation about this section\n */\n docUrl: {\n type: String,\n default: \"\"\n },\n /**\n * Limit the width of the setting's content\n *\n * Setting this to false allows unrestricted (width) settings content.\n * Note that the name and description have always a width limit.\n *\n * @deprecated Will be removed with next version and will not be used on Nextcloud 30+ (always forced to true)\n */\n limitWidth: {\n type: Boolean,\n // eslint-disable-next-line vue/no-boolean-default\n default: true\n }\n },\n data() {\n return {\n docNameTranslated: t(\"External documentation for {name}\", {\n name: this.name\n })\n };\n },\n computed: {\n forceLimitWidth() {\n return this.limitWidth || !isLegacy;\n },\n hasDescription() {\n return this.description.length > 0;\n },\n hasDocUrl() {\n return this.docUrl.length > 0;\n }\n }\n};\nvar _sfc_render = function render2() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"div\", { staticClass: \"settings-section\", class: { \"settings-section--limit-width\": _vm.forceLimitWidth } }, [_c(\"h2\", { staticClass: \"settings-section__name\" }, [_vm._v(\" \" + _vm._s(_vm.name) + \" \"), _vm.hasDocUrl ? _c(\"a\", { staticClass: \"settings-section__info\", attrs: { \"href\": _vm.docUrl, \"title\": _vm.docNameTranslated, \"aria-label\": _vm.docNameTranslated, \"target\": \"_blank\", \"rel\": \"noreferrer nofollow\" } }, [_c(\"HelpCircle\", { attrs: { \"size\": 20 } })], 1) : _vm._e()]), _vm.hasDescription ? _c(\"p\", { staticClass: \"settings-section__desc\" }, [_vm._v(\" \" + _vm._s(_vm.description) + \" \")]) : _vm._e(), _vm._t(\"default\")], 2);\n};\nvar _sfc_staticRenderFns = [];\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n null,\n \"56b92b56\"\n);\nconst NcSettingsSection = __component__.exports;\nexport {\n NcSettingsSection as N\n};\n//# sourceMappingURL=NcSettingsSection-Dz_b9rcq.mjs.map\n","import '../assets/NcSettingsSelectGroup-B9FlWQVH.css';\nimport axios from \"@nextcloud/axios\";\nimport { generateOcsUrl } from \"@nextcloud/router\";\nimport debounce from \"debounce\";\nimport { N as NcSelect } from \"./NcSelect-CHc1QupB.mjs\";\nimport { u as useModelMigration } from \"./useModelMigration-EhAWvqDD.mjs\";\nimport { r as register, i as t51, a as t } from \"./_l10n-DVz9Qdzk.mjs\";\nimport { G as GenRandomId } from \"./GenRandomId-F5ebeBB_.mjs\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nregister(t51);\nconst _sfc_main = {\n name: \"NcSettingsSelectGroup\",\n components: {\n NcSelect\n },\n model: {\n prop: \"modelValue\",\n event: \"update:modelValue\"\n },\n props: {\n /**\n * The text of the label element of the select group input\n */\n label: {\n type: String,\n required: true\n },\n /**\n * Placeholder for the input element\n * For backwards compatibility it falls back to the `label` value\n */\n placeholder: {\n type: String,\n default: \"\"\n },\n /**\n * id attribute of the select group element\n */\n id: {\n type: String,\n default: () => \"action-\" + GenRandomId(),\n validator: (id) => id.trim() !== \"\"\n },\n /**\n * Removed in v9 - use `modelValue` (`v-model`) instead\n *\n * @deprecated\n */\n value: {\n type: Array,\n default: void 0\n },\n /**\n * value of the select group input\n * A list of group IDs can be provided\n */\n modelValue: {\n type: Array,\n default: () => []\n },\n /**\n * disabled state of the settings select group input\n */\n disabled: {\n type: Boolean,\n default: false\n }\n },\n emits: [\n /**\n * Removed in v9 - use `update:modelValue` (`v-model`) instead\n *\n * @deprecated\n */\n \"input\",\n /** Emitted when the groups selection changes **Payload:** `value` (`Array`) - *Ids of selected groups */\n \"update:modelValue\",\n /** Same as update:modelValue for Vue 2 compatibility */\n \"update:model-value\",\n \"error\"\n ],\n setup() {\n const model = useModelMigration(\"value\", \"input\");\n return {\n model\n };\n },\n data() {\n return {\n /** Temporary store to cache groups */\n groups: {},\n randId: GenRandomId(),\n errorMessage: \"\"\n };\n },\n computed: {\n /**\n * If the error message should be shown\n */\n hasError() {\n return this.errorMessage !== \"\";\n },\n /**\n * Validate input value and only return valid strings (group IDs)\n *\n * @return {string[]}\n */\n filteredValue() {\n return this.model.filter((group) => group !== \"\" && typeof group === \"string\");\n },\n /**\n * value property converted to an array of group objects used as input for the NcSelect\n */\n inputValue() {\n return this.filteredValue.map((id) => {\n if (typeof this.groups[id] === \"undefined\") {\n return {\n id,\n displayname: id\n };\n }\n return this.groups[id];\n });\n },\n /**\n * Convert groups object to array of groups required for NcSelect.options\n * Filter out currently selected values\n *\n * @return {object[]}\n */\n groupsArray() {\n return Object.values(this.groups).filter((g) => !this.model.includes(g.id));\n }\n },\n watch: {\n /**\n * If the value is changed, check that all groups are loaded so we show the correct display name\n */\n value: {\n handler() {\n const loadedGroupIds = Object.keys(this.groups);\n const missing = this.filteredValue.filter((group) => !loadedGroupIds.includes(group));\n missing.forEach((groupId) => {\n this.loadGroup(groupId);\n });\n },\n // Run the watch handler also when the component is initially mounted\n immediate: true\n }\n },\n /**\n * Load groups matching the empty query to reduce API calls\n */\n async mounted() {\n const storageName = `${appName}:${appVersion}/initialGroups`;\n let savedGroups = window.sessionStorage.getItem(storageName);\n if (savedGroups) {\n savedGroups = Object.fromEntries(JSON.parse(savedGroups).map((group) => [group.id, group]));\n this.groups = { ...this.groups, ...savedGroups };\n } else {\n await this.loadGroup(\"\");\n window.sessionStorage.setItem(storageName, JSON.stringify(Object.values(this.groups)));\n }\n },\n methods: {\n t,\n /**\n * Called when a new group is selected or previous group is deselected to emit the update event\n *\n * @param {object[]} updatedValue Array of selected groups\n */\n update(updatedValue) {\n const value = updatedValue.map((element) => element.id);\n this.model = value;\n },\n /**\n * Use provisioning API to search for given group and save it in the groups object\n *\n * @param {string} query The query like parts of the id oder display name\n * @return {boolean}\n */\n async loadGroup(query) {\n try {\n query = typeof query === \"string\" ? encodeURI(query) : \"\";\n const response = await axios.get(generateOcsUrl(`cloud/groups/details?search=${query}&limit=10`, 2));\n if (this.errorMessage !== \"\") {\n window.setTimeout(() => {\n this.errorMessage = \"\";\n }, 5e3);\n }\n if (Object.keys(response.data.ocs.data.groups).length > 0) {\n const newGroups = Object.fromEntries(response.data.ocs.data.groups.map((element) => [element.id, element]));\n this.groups = { ...this.groups, ...newGroups };\n return true;\n }\n } catch (error) {\n this.$emit(\"error\", error);\n this.errorMessage = t(\"Unable to search the group\");\n }\n return false;\n },\n /**\n * Custom filter function for `NcSelect` to filter by ID *and* display name\n *\n * @param {object} option One of the groups\n * @param {string} label The label property of the group\n * @param {string} search The current search string\n */\n filterGroups(option, label, search) {\n return `${label || \"\"} ${option.id}`.toLocaleLowerCase().indexOf(search.toLocaleLowerCase()) > -1;\n },\n /**\n * Debounce the group search (reduce API calls)\n */\n onSearch: debounce(function(query) {\n this.loadGroup(query);\n }, 200)\n }\n};\nvar _sfc_render = function render() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"div\", [_vm.label ? _c(\"label\", { staticClass: \"hidden-visually\", attrs: { \"for\": _vm.id } }, [_vm._v(_vm._s(_vm.label))]) : _vm._e(), _c(\"NcSelect\", { attrs: { \"value\": _vm.inputValue, \"options\": _vm.groupsArray, \"placeholder\": _vm.placeholder || _vm.label, \"filter-by\": _vm.filterGroups, \"input-id\": _vm.id, \"limit\": 5, \"label\": \"displayname\", \"multiple\": true, \"close-on-select\": false, \"disabled\": _vm.disabled }, on: { \"update:model-value\": _vm.update, \"search\": _vm.onSearch } }), _c(\"div\", { directives: [{ name: \"show\", rawName: \"v-show\", value: _vm.hasError, expression: \"hasError\" }], staticClass: \"select-group-error\" }, [_vm._v(\" \" + _vm._s(_vm.errorMessage) + \" \")])], 1);\n};\nvar _sfc_staticRenderFns = [];\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n null,\n \"9d59765b\"\n);\nconst NcSettingsSelectGroup = __component__.exports;\nexport {\n NcSettingsSelectGroup as N\n};\n//# sourceMappingURL=NcSettingsSelectGroup-BdXf7ytX.mjs.map\n","import '../assets/Tooltip-C-QZMStp.css';\nimport { options } from \"floating-vue\";\nimport { VTooltip, options as options2 } from \"floating-vue\";\noptions.themes.tooltip.html = false;\noptions.themes.tooltip.delay = { show: 500, hide: 200 };\noptions.themes.tooltip.distance = 10;\noptions.themes.tooltip[\"arrow-padding\"] = 3;\nexport {\n VTooltip as default,\n options2 as options\n};\n//# sourceMappingURL=Tooltip.mjs.map\n","import { isMobileState } from \"../Composables/useIsMobile.mjs\";\nconst index = {\n computed: {\n /**\n * @deprecated Is to be removed in v9.0.0 with Vue 3 migration.\n * Use `composables/useIsMobile` instead.\n */\n isMobile() {\n return isMobileState.value;\n }\n }\n};\nexport {\n index as default\n};\n//# sourceMappingURL=isMobile.mjs.map\n","\n\n\t
\n\n\n\n\n\n"],"names":["register","t15","t44","t","t48","t30","encodedTlds","encodedUtlds","numeric","ascii","alpha","asciinumeric","alphanumeric","domain","emoji","scheme","slashscheme","whitespace","registerGroup","name","groups","addToGroups","flags","k","group","flagsForToken","result","c","State","token","input","state","nextState","i","regex","exactOnly","inputs","next","regexp","len","templateState","allFlags","ta","tr","ts","tt","WORD","UWORD","ASCIINUMERICAL","ALPHANUMERICAL","LOCALHOST","TLD","UTLD","SCHEME","SLASH_SCHEME","NUM","WS","NL","OPENBRACE","CLOSEBRACE","OPENBRACKET","CLOSEBRACKET","OPENPAREN","CLOSEPAREN","OPENANGLEBRACKET","CLOSEANGLEBRACKET","FULLWIDTHLEFTPAREN","FULLWIDTHRIGHTPAREN","LEFTCORNERBRACKET","RIGHTCORNERBRACKET","LEFTWHITECORNERBRACKET","RIGHTWHITECORNERBRACKET","FULLWIDTHLESSTHAN","FULLWIDTHGREATERTHAN","AMPERSAND","APOSTROPHE","ASTERISK","AT","BACKSLASH","BACKTICK","CARET","COLON","COMMA","DOLLAR","DOT","EQUALS","EXCLAMATION","HYPHEN","PERCENT","PIPE","PLUS","POUND","QUERY","QUOTE","FULLWIDTHMIDDLEDOT","SEMI","SLASH","TILDE","UNDERSCORE","EMOJI$1","SYM","tk","ASCII_LETTER","LETTER","EMOJI","DIGIT","SPACE","CR","LF","EMOJI_VARIATION","EMOJI_JOINER","OBJECT_REPLACEMENT","tlds","utlds","init$2","customSchemes","Start","decodeTlds","Num","Asciinumeric","Alphanumeric","Word","UWord","Nl","Cr","Ws","Emoji","EmojiJoiner","wordjr","uwordjr","fastts","a","b","sch","run$1","start","str","iterable","stringToArray","charCount","tokens","cursor","charCursor","tokenLength","latestAccepting","sinceAccepts","charsSinceAccepts","index","first","second","char","defaultt","jr","encoded","words","stack","digits","popDigitCount","popCount","defaults","noop","Options","opts","defaultRender","o","ignoredTags","uppercaseIgnoredTags","ir","key","operator","isCallable","option","obj","val","MultiToken","value","options","truncate","formatted","protocol","href","formattedHref","tagName","content","attributes","className","target","rel","attrs","eventListeners","createTokenClass","type","props","Token","p","Email","Text","Url","makeState","arg","init$1","qsAccepting","qsNonAccepting","localpartAccepting","Localpart","Domain","Scheme","SlashScheme","LocalpartAt","LocalpartDot","EmailDomain","EmailDomainDot","Email$1","EmailDomainHyphen","EmailColon","DomainHyphen","DomainDot","DomainDotTld","DomainDotTldColon","DomainDotTldColonPort","Url$1","UrlNonaccept","SchemeColon","SlashSchemeColon","SlashSchemeColonSlash","UriPrefix","bracketPairs","OPEN","CLOSE","UrlOpen","UrlOpenQ","UrlOpenSyms","run","multis","textTokens","secondState","multiLength","initMultiToken","Multi","subtokens","startIdx","endIdx","INIT","init","tokenize","escapeText","text","escapeAttr","attributesToString","attr","linkifyStr","t14","TimeoutError","message","AbortError","getDOMException","errorMessage","getAbortedReason","signal","reason","pTimeout","promise","milliseconds","fallback","customTimers","timer","abortHandler","cancelablePromise","resolve","reject","timeoutError","error","lowerBound","array","comparator","count","step","it","PriorityQueue","#queue","element","id","priority","item","PQueue","EventEmitter","#carryoverConcurrencyCount","#isIntervalIgnored","#intervalCount","#intervalCap","#interval","#intervalEnd","#intervalId","#timeoutId","#queueClass","#pending","#concurrency","#isPaused","#throwOnTimeout","#idAssigner","#doesIntervalAllowAnother","#doesConcurrentAllowAnother","#next","#tryToStartAnother","#onResumeInterval","#onInterval","#initializeIntervalIfNeeded","#isIntervalPaused","now","delay","canInitializeInterval","job","#processQueue","newConcurrency","#throwOnAbort","_resolve","function_","operation","functions","#onEvent","limit","event","filter","listener","t27","t6","t34","e","module","this","n","r","X","J","N","R","$","se","G","Q","Z","w","D","s","u","l","h","m","d","f","v","j","g","y","_","C","E","S","x","O","P","A","M","I","F","z","L","T","q","B","H","U","V","W","K","Y","ee","te","ie","ne","re","oe","getBuilder","t5","t36","t43","Color","t40","t21","t7","t38","t42","getCapabilities","t9","predicate","list","length","thisArg","CustomEvent$1","params","evt","callback","onDestroy","registerWidget","propsWithDefaults","logger","registerCustomPickerElement","size","t23","t8","imagePath","loadState","t41","t47","t24","t31","t12","t18","asciiAlpha","regexCheck","asciiAlphanumeric","asciiControl","code2","markdownLineEndingOrSpace","unicodePunctuation","unicodeWhitespace","check","convert","test","ok","castFactory","anyFactory","propertiesFactory","typeFactory","tests","checks","any","parameters","index2","checkAsRecord","all","node","nodeAsRecord","testFunction","parent","looksLikeANode","wwwPrefix","tokenizeWwwPrefix","tokenizeDomain","path","tokenizePath","trail","tokenizeTrail","emailDomainDotTrail","tokenizeEmailDomainDotTrail","wwwAutolink","tokenizeWwwAutolink","previousWww","protocolAutolink","tokenizeProtocolAutolink","previousProtocol","emailAutolink","tokenizeEmailAutolink","previousEmail","code","effects","ok2","nok","self","dot","data","gfmAtext","previousUnbalanced","atext","emailDomain","emailDomainAfter","emailDomainDot","wwwStart","wwwAfter","buffer","seen","protocolStart","protocolPrefixInside","protocolSlashesInside","afterProtocol","protocolAfter","wwwPrefixInside","wwwPrefixAfter","underscoreInLastSegment","underscoreInLastLastSegment","domainInside","domainAfter","domainAtPunctuation","sizeOpen","sizeClose","pathInside","pathAtPunctuation","trail2","trailCharRefStart","trailBracketAfter","trailCharRefInside","after","events","ref","t33","t0","NcSelect","t50","t25","major","t51","debounce","query","isMobileState","_sfc_main","MapMarkerOutline","ImageOffOutline","NcEmptyContent","NcActions","CollectionContent","HeaderNavigation","FetchCollectionContentMixin","isMobile","getClient","generateRemoteUrl","album","publicAlbumsPrefix","publicAlbumsExtraProps","albumFilesExtraProps","file","generateUrl","fileIds","translate"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32]}
\ No newline at end of file
+{"version":3,"file":"PublicAlbumContent-D54gCfLM.chunk.mjs","sources":["../node_modules/@nextcloud/vue/dist/chunks/NcActionButtonGroup-B95wg_Q6.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcAppNavigationSearch-CzhlljAU.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcAppNavigationSettings-BaO-G72x.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcAppSettingsShortcutsSection-DblUBaWP.mjs","../node_modules/linkifyjs/dist/linkify.mjs","../node_modules/linkify-string/dist/linkify-string.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcAppSidebar-B7GuNZ4C.mjs","../node_modules/p-timeout/index.js","../node_modules/p-queue/dist/lower-bound.js","../node_modules/p-queue/dist/priority-queue.js","../node_modules/p-queue/dist/index.js","../node_modules/@nextcloud/vue/dist/Functions/preloadImage.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcCollectionList-DOAZ13vO.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcDashboardWidget-CO1z9VUN.mjs","../node_modules/emoji-mart-vue-fast/dist/emoji-mart.js","../node_modules/tributejs/dist/tribute.esm.js","../node_modules/@nextcloud/vue/dist/chunks/emoji-Dtn2mDf7.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcEmojiPicker-DNxcceCn.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcFilePicker-Ck9o-ia3.mjs","../node_modules/@nextcloud/vue/dist/chunks/useCopy-DDDe5RYH.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcKbd-GB8FuSAU.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcHotkeyList-Co7MBL5U.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcRelatedResourcesPanel-I2ZOB3cx.mjs","../node_modules/@nextcloud/vue/dist/chunks/customPickerElements-DLFtgReB.mjs","../node_modules/@nextcloud/vue/dist/chunks/referencePickerModal-B69WouiU.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcRichText-ByLPwUvM.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcRichContenteditable-8ZA_LArB.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcSelectTags-Bokig7ar.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcSettingsInputText-BwnkZzWL.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcSettingsSection-Dz_b9rcq.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcSettingsSelectGroup-BdXf7ytX.mjs","../node_modules/@nextcloud/vue/dist/Directives/Tooltip.mjs","../node_modules/@nextcloud/vue/dist/Mixins/isMobile.mjs","../src/views/PublicAlbumContent.vue"],"sourcesContent":["import '../assets/NcActionButtonGroup-DqR0weTf.css';\nimport { defineComponent } from \"vue\";\nimport { r as register, a as t } from \"./_l10n-DVz9Qdzk.mjs\";\nimport { G as GenRandomId } from \"./GenRandomId-F5ebeBB_.mjs\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nregister();\nconst _sfc_main = defineComponent({\n name: \"NcActionButtonGroup\",\n inject: {\n isInSemanticMenu: {\n from: \"NcActions:isSemanticMenu\",\n default: false\n }\n },\n props: {\n /**\n * Optional text shown below the button group\n */\n name: {\n required: false,\n default: void 0,\n type: String\n }\n },\n setup() {\n return {\n labelId: `nc-action-button-group-${GenRandomId()}`\n };\n },\n methods: {\n t\n }\n});\nvar _sfc_render = function render() {\n var _vm = this, _c = _vm._self._c;\n _vm._self._setupProxy;\n return _c(\"li\", { staticClass: \"nc-button-group-base\", attrs: { \"role\": _vm.isInSemanticMenu && \"presentation\" } }, [_vm.name ? _c(\"div\", { attrs: { \"id\": _vm.labelId } }, [_vm._v(\" \" + _vm._s(_vm.name) + \" \")]) : _vm._e(), _c(\"ul\", { staticClass: \"nc-button-group-content\", attrs: { \"role\": \"group\", \"aria-labelledby\": _vm.name ? _vm.labelId : void 0 } }, [_vm._t(\"default\")], 2)]);\n};\nvar _sfc_staticRenderFns = [];\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n null,\n \"d5482fd6\"\n);\nconst NcActionButtonGroup = __component__.exports;\nexport {\n NcActionButtonGroup as N\n};\n//# sourceMappingURL=NcActionButtonGroup-B95wg_Q6.mjs.map\n","import '../assets/NcAppNavigationSearch-DWhTZbjb.css';\nimport { useFocusWithin } from \"@vueuse/core\";\nimport { useSlots, ref, watch, nextTick } from \"vue\";\nimport { C as Close } from \"./Close-BtLPUSdO.mjs\";\nimport { N as NcInputField } from \"./NcInputField-i4Z8nb4b.mjs\";\nimport { r as register, o as t44, p as t15, a as t } from \"./_l10n-DVz9Qdzk.mjs\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nregister(t15, t44);\nconst __default__ = {\n name: \"NcAppNavigationSearch\",\n model: {\n event: \"update:modelValue\",\n prop: \"modelValue\"\n }\n};\nconst _sfc_main = /* @__PURE__ */ Object.assign(__default__, {\n props: {\n /**\n * Current search input\n */\n modelValue: {\n type: String,\n default: \"\"\n },\n /**\n * Text used to label the search input\n */\n label: {\n type: String,\n default: t(\"Search …\")\n },\n /**\n * Placeholder of the search input\n * By default the value of `label` is used.\n */\n placeholder: {\n type: String,\n default: null\n }\n },\n emits: [\"update:modelValue\"],\n setup(__props, { emit }) {\n const slots = useSlots();\n const inputElement = ref();\n const { focused: inputHasFocus } = useFocusWithin(inputElement);\n const transitionTimeout = Number.parseInt(window.getComputedStyle(window.document.body).getPropertyValue(\"--animation-quick\")) || 100;\n const actionsContainer = ref();\n const hasActions = () => !!slots.actions;\n const showActions = ref(true);\n const timeoutId = ref();\n const hideActions = ref(false);\n watch(inputHasFocus, () => {\n showActions.value = !inputHasFocus.value;\n });\n watch(showActions, (show) => {\n window.clearTimeout(timeoutId.value);\n if (show) {\n hideActions.value = false;\n } else {\n window.setTimeout(() => {\n hideActions.value = !show;\n }, transitionTimeout);\n }\n });\n function onCloseSearch() {\n emit(\"update:modelValue\", \"\");\n if (hasActions()) {\n showActions.value = true;\n nextTick(() => actionsContainer.value.querySelector(\"button\")?.focus());\n }\n }\n return { __sfc: true, emit, slots, inputElement, inputHasFocus, transitionTimeout, actionsContainer, hasActions, showActions, timeoutId, hideActions, onCloseSearch, IconClose: Close, NcInputField, t };\n }\n});\nvar _sfc_render = function render() {\n var _vm = this, _c = _vm._self._c, _setup = _vm._self._setupProxy;\n return _c(\"div\", { staticClass: \"app-navigation-search\", class: {\n \"app-navigation-search--has-actions\": _setup.hasActions()\n } }, [_c(_setup.NcInputField, { ref: \"inputElement\", staticClass: \"app-navigation-search__input\", attrs: { \"aria-label\": _vm.label, \"label-outside\": \"\", \"placeholder\": _vm.placeholder ?? _vm.label, \"show-trailing-button\": \"\", \"trailing-button-label\": _setup.t(\"Clear search\"), \"type\": \"search\", \"value\": _vm.modelValue }, on: { \"update:value\": function($event) {\n return _vm.$emit(\"update:modelValue\", $event);\n }, \"trailing-button-click\": _setup.onCloseSearch }, scopedSlots: _vm._u([{ key: \"trailing-button-icon\", fn: function() {\n return [_c(_setup.IconClose, { attrs: { \"size\": 20 } })];\n }, proxy: true }]) }), _setup.hasActions() ? _c(\"div\", { ref: \"actionsContainer\", staticClass: \"app-navigation-search__actions\", class: {\n \"app-navigation-search__actions--hidden\": !_setup.showActions,\n \"hidden-visually\": _setup.hideActions\n } }, [_vm._t(\"actions\")], 2) : _vm._e()], 1);\n};\nvar _sfc_staticRenderFns = [];\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n null,\n \"df568544\"\n);\nconst NcAppNavigationSearch = __component__.exports;\nexport {\n NcAppNavigationSearch as N\n};\n//# sourceMappingURL=NcAppNavigationSearch-CzhlljAU.mjs.map\n","import '../assets/NcMentionBubble-CaztX9Pv.css';\nimport '../assets/NcAppNavigationSettings-2Wh1E3Hq.css';\nimport { k as mdiCogOutline, l as mdiCog } from \"./mdi-DkJglNiS.mjs\";\nimport { vOnClickOutside } from \"@vueuse/components\";\nimport { N as NcButton } from \"./NcButton-CCWEL9Ci.mjs\";\nimport { N as NcIconSvgWrapper } from \"./NcIconSvgWrapper-Bui9PhAS.mjs\";\nimport { r as register, n as t48, a as t } from \"./_l10n-DVz9Qdzk.mjs\";\nimport clickOutsideOptions from \"../Mixins/clickOutsideOptions.mjs\";\nimport \"../Composables/useIsFullscreen.mjs\";\nimport \"../Composables/useIsMobile.mjs\";\nimport \"escape-html\";\nimport \"striptags\";\nimport \"vue\";\nimport \"../Composables/useIsDarkTheme.mjs\";\nimport \"@nextcloud/router\";\nimport \"../Functions/isDarkTheme.mjs\";\n/* empty css */\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nimport \"@nextcloud/auth\";\nimport \"@nextcloud/axios\";\nimport \"@nextcloud/capabilities\";\nimport \"./logger-D3RVzcfQ.mjs\";\nimport { G as GenRandomId } from \"./GenRandomId-F5ebeBB_.mjs\";\nimport { a as isLegacy32 } from \"./legacy-DV3mGZdh.mjs\";\nregister(t48);\nconst _sfc_main = {\n directives: {\n ClickOutside: vOnClickOutside\n },\n components: {\n NcButton,\n NcIconSvgWrapper\n },\n mixins: [\n clickOutsideOptions\n ],\n props: {\n /**\n * Text of the button\n *\n * @default 'Settings'\n */\n name: {\n type: String,\n required: false,\n default: t(\"Settings\")\n }\n },\n setup() {\n const contentId = GenRandomId();\n return {\n contentId,\n isLegacy32,\n mdiCog,\n mdiCogOutline\n };\n },\n data() {\n return {\n open: false\n };\n },\n computed: {\n clickOutsideConfig() {\n return [\n this.closeMenu,\n this.clickOutsideOptions\n ];\n }\n },\n methods: {\n closeMenu() {\n this.open = false;\n }\n }\n};\nvar _sfc_render = function render() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"div\", { directives: [{ name: \"click-outside\", rawName: \"v-click-outside\", value: _vm.clickOutsideConfig, expression: \"clickOutsideConfig\" }], class: { open: _vm.open }, attrs: { \"id\": \"app-settings\" } }, [_c(\"div\", { attrs: { \"id\": \"app-settings__header\" } }, [_c(\"NcButton\", { staticClass: \"settings-button\", attrs: { \"aria-controls\": _vm.contentId, \"aria-expanded\": _vm.open ? \"true\" : \"false\", \"alignment\": \"start\", \"variant\": \"tertiary\", \"wide\": \"\" }, on: { \"click\": function($event) {\n _vm.open = !_vm.open;\n } }, scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_c(\"NcIconSvgWrapper\", { staticClass: \"settings-button__icon\", attrs: { \"path\": _vm.isLegacy32 ? _vm.mdiCog : _vm.mdiCogOutline } })];\n }, proxy: true }]) }, [_vm._v(\" \" + _vm._s(_vm.name) + \" \")])], 1), _c(\"Transition\", { attrs: { \"name\": \"slide-up\" } }, [_c(\"div\", { directives: [{ name: \"show\", rawName: \"v-show\", value: _vm.open, expression: \"open\" }], attrs: { \"id\": _vm.contentId } }, [_vm._t(\"default\")], 2)])], 1);\n};\nvar _sfc_staticRenderFns = [];\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n null,\n \"8fb21c8b\"\n);\nconst NcAppNavigationSettings = __component__.exports;\nexport {\n NcAppNavigationSettings as N\n};\n//# sourceMappingURL=NcAppNavigationSettings-BaO-G72x.mjs.map\n","import '../assets/NcAppSettingsShortcutsSection-C_DMnyUy.css';\nimport { defineComponent } from \"vue\";\nimport { N as NcAppSettingsSection } from \"./NcAppSettingsSection-BjQllLEA.mjs\";\nimport { r as register, y as t30, a as t } from \"./_l10n-DVz9Qdzk.mjs\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nregister(t30);\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcAppSettingsShortcutsSection\",\n setup(__props) {\n return { __sfc: true, NcAppSettingsSection, t };\n }\n});\nconst appSettingsSectionShortcuts = \"_appSettingsSectionShortcuts_LgM7S\";\nconst style0 = {\n \"material-design-icon\": \"_material-design-icon_QP8kM\",\n appSettingsSectionShortcuts\n};\nvar _sfc_render = function render() {\n var _vm = this, _c = _vm._self._c, _setup = _vm._self._setupProxy;\n return _c(_setup.NcAppSettingsSection, { attrs: { \"id\": \"keyboard-shortcuts\", \"name\": _setup.t(\"Keyboard shortcuts\") } }, [_c(\"div\", { class: _vm.$style.appSettingsSectionShortcuts }, [_vm._t(\"default\")], 2)]);\n};\nvar _sfc_staticRenderFns = [];\nconst __cssModules = {\n \"$style\": style0\n};\nfunction _sfc_injectStyles(ctx) {\n for (var key in __cssModules) {\n this[key] = __cssModules[key];\n }\n}\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n _sfc_injectStyles,\n null\n);\nconst NcAppSettingsShortcutsSection = __component__.exports;\nexport {\n NcAppSettingsShortcutsSection as N\n};\n//# sourceMappingURL=NcAppSettingsShortcutsSection-DblUBaWP.mjs.map\n","// THIS FILE IS AUTOMATICALLY GENERATED DO NOT EDIT DIRECTLY\n// See update-tlds.js for encoding/decoding format\n// https://data.iana.org/TLD/tlds-alpha-by-domain.txt\nconst encodedTlds = 'aaa1rp3bb0ott3vie4c1le2ogado5udhabi7c0ademy5centure6ountant0s9o1tor4d0s1ult4e0g1ro2tna4f0l1rica5g0akhan5ency5i0g1rbus3force5tel5kdn3l0ibaba4pay4lfinanz6state5y2sace3tom5m0azon4ericanexpress7family11x2fam3ica3sterdam8nalytics7droid5quan4z2o0l2partments8p0le4q0uarelle8r0ab1mco4chi3my2pa2t0e3s0da2ia2sociates9t0hleta5torney7u0ction5di0ble3o3spost5thor3o0s4w0s2x0a2z0ure5ba0by2idu3namex4d1k2r0celona5laycard4s5efoot5gains6seball5ketball8uhaus5yern5b0c1t1va3cg1n2d1e0ats2uty4er2rlin4st0buy5t2f1g1h0arti5i0ble3d1ke2ng0o3o1z2j1lack0friday9ockbuster8g1omberg7ue3m0s1w2n0pparibas9o0ats3ehringer8fa2m1nd2o0k0ing5sch2tik2on4t1utique6x2r0adesco6idgestone9oadway5ker3ther5ussels7s1t1uild0ers6siness6y1zz3v1w1y1z0h3ca0b1fe2l0l1vinklein9m0era3p2non3petown5ital0one8r0avan4ds2e0er0s4s2sa1e1h1ino4t0ering5holic7ba1n1re3c1d1enter4o1rn3f0a1d2g1h0anel2nel4rity4se2t2eap3intai5ristmas6ome4urch5i0priani6rcle4sco3tadel4i0c2y3k1l0aims4eaning6ick2nic1que6othing5ud3ub0med6m1n1o0ach3des3ffee4llege4ogne5m0mbank4unity6pany2re3uter5sec4ndos3struction8ulting7tact3ractors9oking4l1p2rsica5untry4pon0s4rses6pa2r0edit0card4union9icket5own3s1uise0s6u0isinella9v1w1x1y0mru3ou3z2dad1nce3ta1e1ing3sun4y2clk3ds2e0al0er2s3gree4livery5l1oitte5ta3mocrat6ntal2ist5si0gn4v2hl2iamonds6et2gital5rect0ory7scount3ver5h2y2j1k1m1np2o0cs1tor4g1mains5t1wnload7rive4tv2ubai3nlop4pont4rban5vag2r2z2earth3t2c0o2deka3u0cation8e1g1mail3erck5nergy4gineer0ing9terprises10pson4quipment8r0icsson6ni3s0q1tate5t1u0rovision8s2vents5xchange6pert3osed4ress5traspace10fage2il1rwinds6th3mily4n0s2rm0ers5shion4t3edex3edback6rrari3ero6i0delity5o2lm2nal1nce1ial7re0stone6mdale6sh0ing5t0ness6j1k1lickr3ghts4r2orist4wers5y2m1o0o0d1tball6rd1ex2sale4um3undation8x2r0ee1senius7l1ogans4ntier7tr2ujitsu5n0d2rniture7tbol5yi3ga0l0lery3o1up4me0s3p1rden4y2b0iz3d0n2e0a1nt0ing5orge5f1g0ee3h1i0ft0s3ves2ing5l0ass3e1obal2o4m0ail3bh2o1x2n1odaddy5ld0point6f2o0dyear5g0le4p1t1v2p1q1r0ainger5phics5tis4een3ipe3ocery4up4s1t1u0cci3ge2ide2tars5ru3w1y2hair2mburg5ngout5us3bo2dfc0bank7ealth0care8lp1sinki6re1mes5iphop4samitsu7tachi5v2k0t2m1n1ockey4ldings5iday5medepot5goods5s0ense7nda3rse3spital5t0ing5t0els3mail5use3w2r1sbc3t1u0ghes5yatt3undai7ibm2cbc2e1u2d1e0ee3fm2kano4l1m0amat4db2mo0bilien9n0c1dustries8finiti5o2g1k1stitute6urance4e4t0ernational10uit4vestments10o1piranga7q1r0ish4s0maili5t0anbul7t0au2v3jaguar4va3cb2e0ep2tzt3welry6io2ll2m0p2nj2o0bs1urg4t1y2p0morgan6rs3uegos4niper7kaufen5ddi3e0rryhotels6properties14fh2g1h1i0a1ds2m1ndle4tchen5wi3m1n1oeln3matsu5sher5p0mg2n2r0d1ed3uokgroup8w1y0oto4z2la0caixa5mborghini8er3nd0rover6xess5salle5t0ino3robe5w0yer5b1c1ds2ease3clerc5frak4gal2o2xus4gbt3i0dl2fe0insurance9style7ghting6ke2lly3mited4o2ncoln4k2ve1ing5k1lc1p2oan0s3cker3us3l1ndon4tte1o3ve3pl0financial11r1s1t0d0a3u0ndbeck6xe1ury5v1y2ma0drid4if1son4keup4n0agement7go3p1rket0ing3s4riott5shalls7ttel5ba2c0kinsey7d1e0d0ia3et2lbourne7me1orial6n0u2rckmsd7g1h1iami3crosoft7l1ni1t2t0subishi9k1l0b1s2m0a2n1o0bi0le4da2e1i1m1nash3ey2ster5rmon3tgage6scow4to0rcycles9v0ie4p1q1r1s0d2t0n1r2u0seum3ic4v1w1x1y1z2na0b1goya4me2vy3ba2c1e0c1t0bank4flix4work5ustar5w0s2xt0direct7us4f0l2g0o2hk2i0co2ke1on3nja3ssan1y5l1o0kia3rton4w0ruz3tv4p1r0a1w2tt2u1yc2z2obi1server7ffice5kinawa6layan0group9lo3m0ega4ne1g1l0ine5oo2pen3racle3nge4g0anic5igins6saka4tsuka4t2vh3pa0ge2nasonic7ris2s1tners4s1y3y2ccw3e0t2f0izer5g1h0armacy6d1ilips5one2to0graphy6s4ysio5ics1tet2ures6d1n0g1k2oneer5zza4k1l0ace2y0station9umbing5s3m1n0c2ohl2ker3litie5rn2st3r0axi3ess3ime3o0d0uctions8f1gressive8mo2perties3y5tection8u0dential9s1t1ub2w0c2y2qa1pon3uebec3st5racing4dio4e0ad1lestate6tor2y4cipes5d0stone5umbrella9hab3ise0n3t2liance6n0t0als5pair3ort3ublican8st0aurant8view0s5xroth6ich0ardli6oh3l1o1p2o0cks3deo3gers4om3s0vp3u0gby3hr2n2w0e2yukyu6sa0arland6fe0ty4kura4le1on3msclub4ung5ndvik0coromant12ofi4p1rl2s1ve2xo3b0i1s2c0b1haeffler7midt4olarships8ol3ule3warz5ience5ot3d1e0arch3t2cure1ity6ek2lect4ner3rvices6ven3w1x0y3fr2g1h0angrila6rp3ell3ia1ksha5oes2p0ping5uji3w3i0lk2na1gles5te3j1k0i0n2y0pe4l0ing4m0art3ile4n0cf3o0ccer3ial4ftbank4ware6hu2lar2utions7ng1y2y2pa0ce3ort2t3r0l2s1t0ada2ples4r1tebank4farm7c0group6ockholm6rage3e3ream4udio2y3yle4u0cks3pplies3y2ort5rf1gery5zuki5v1watch4iss4x1y0dney4stems6z2tab1ipei4lk2obao4rget4tamotors6r2too4x0i3c0i2d0k2eam2ch0nology8l1masek5nnis4va3f1g1h0d1eater2re6iaa2ckets5enda4ps2res2ol4j0maxx4x2k0maxx5l1m0all4n1o0day3kyo3ols3p1ray3shiba5tal3urs3wn2yota3s3r0ade1ing4ining5vel0ers0insurance16ust3v2t1ube2i1nes3shu4v0s2w1z2ua1bank3s2g1k1nicom3versity8o2ol2ps2s1y1z2va0cations7na1guard7c1e0gas3ntures6risign5mögensberater2ung14sicherung10t2g1i0ajes4deo3g1king4llas4n1p1rgin4sa1ion4va1o3laanderen9n1odka3lvo3te1ing3o2yage5u2wales2mart4ter4ng0gou5tch0es6eather0channel12bcam3er2site5d0ding5ibo2r3f1hoswho6ien2ki2lliamhill9n0dows4e1ners6me2olterskluwer11odside6rk0s2ld3w2s1tc1f3xbox3erox4ihuan4n2xx2yz3yachts4hoo3maxun5ndex5e1odobashi7ga2kohama6u0tube6t1un3za0ppos4ra3ero3ip2m1one3uerich6w2';\n// Internationalized domain names containing non-ASCII\nconst encodedUtlds = 'ελ1υ2бг1ел3дети4ею2католик6ом3мкд2он1сква6онлайн5рг3рус2ф2сайт3рб3укр3қаз3հայ3ישראל5קום3ابوظبي5رامكو5لاردن4بحرين5جزائر5سعودية6عليان5مغرب5مارات5یران5بارت2زار4يتك3ھارت5تونس4سودان3رية5شبكة4عراق2ب2مان4فلسطين6قطر3كاثوليك6وم3مصر2ليسيا5وريتانيا7قع4همراه5پاکستان7ڀارت4कॉम3नेट3भारत0म्3ोत5संगठन5বাংলা5ভারত2ৰত4ਭਾਰਤ4ભારત4ଭାରତ4இந்தியா6லங்கை6சிங்கப்பூர்11భారత్5ಭಾರತ4ഭാരതം5ලංකා4คอม3ไทย3ລາວ3გე2みんな3アマゾン4クラウド4グーグル4コム2ストア3セール3ファッション6ポイント4世界2中信1国1國1文网3亚马逊3企业2佛山2信息2健康2八卦2公司1益2台湾1灣2商城1店1标2嘉里0大酒店5在线2大拿2天主教3娱乐2家電2广东2微博2慈善2我爱你3手机2招聘2政务1府2新加坡2闻2时尚2書籍2机构2淡马锡3游戏2澳門2点看2移动2组织机构4网址1店1站1络2联通2谷歌2购物2通販2集团2電訊盈科4飞利浦3食品2餐厅2香格里拉3港2닷넷1컴2삼성2한국2';\n\n/**\n * Finite State Machine generation utilities\n */\n\n/**\n * @template T\n * @typedef {{ [group: string]: T[] }} Collections\n */\n\n/**\n * @typedef {{ [group: string]: true }} Flags\n */\n\n// Keys in scanner Collections instances\nconst numeric = 'numeric';\nconst ascii = 'ascii';\nconst alpha = 'alpha';\nconst asciinumeric = 'asciinumeric';\nconst alphanumeric = 'alphanumeric';\nconst domain = 'domain';\nconst emoji = 'emoji';\nconst scheme = 'scheme';\nconst slashscheme = 'slashscheme';\nconst whitespace = 'whitespace';\n\n/**\n * @template T\n * @param {string} name\n * @param {Collections} groups to register in\n * @returns {T[]} Current list of tokens in the given collection\n */\nfunction registerGroup(name, groups) {\n if (!(name in groups)) {\n groups[name] = [];\n }\n return groups[name];\n}\n\n/**\n * @template T\n * @param {T} t token to add\n * @param {Collections} groups\n * @param {Flags} flags\n */\nfunction addToGroups(t, flags, groups) {\n if (flags[numeric]) {\n flags[asciinumeric] = true;\n flags[alphanumeric] = true;\n }\n if (flags[ascii]) {\n flags[asciinumeric] = true;\n flags[alpha] = true;\n }\n if (flags[asciinumeric]) {\n flags[alphanumeric] = true;\n }\n if (flags[alpha]) {\n flags[alphanumeric] = true;\n }\n if (flags[alphanumeric]) {\n flags[domain] = true;\n }\n if (flags[emoji]) {\n flags[domain] = true;\n }\n for (const k in flags) {\n const group = registerGroup(k, groups);\n if (group.indexOf(t) < 0) {\n group.push(t);\n }\n }\n}\n\n/**\n * @template T\n * @param {T} t token to check\n * @param {Collections} groups\n * @returns {Flags} group flags that contain this token\n */\nfunction flagsForToken(t, groups) {\n const result = {};\n for (const c in groups) {\n if (groups[c].indexOf(t) >= 0) {\n result[c] = true;\n }\n }\n return result;\n}\n\n/**\n * @template T\n * @typedef {null | T } Transition\n */\n\n/**\n * Define a basic state machine state. j is the list of character transitions,\n * jr is the list of regex-match transitions, jd is the default state to\n * transition to t is the accepting token type, if any. If this is the terminal\n * state, then it does not emit a token.\n *\n * The template type T represents the type of the token this state accepts. This\n * should be a string (such as of the token exports in `text.js`) or a\n * MultiToken subclass (from `multi.js`)\n *\n * @template T\n * @param {T} [token] Token that this state emits\n */\nfunction State(token = null) {\n // this.n = null; // DEBUG: State name\n /** @type {{ [input: string]: State }} j */\n this.j = {}; // IMPLEMENTATION 1\n // this.j = []; // IMPLEMENTATION 2\n /** @type {[RegExp, State][]} jr */\n this.jr = [];\n /** @type {?State} jd */\n this.jd = null;\n /** @type {?T} t */\n this.t = token;\n}\n\n/**\n * Scanner token groups\n * @type Collections\n */\nState.groups = {};\nState.prototype = {\n accepts() {\n return !!this.t;\n },\n /**\n * Follow an existing transition from the given input to the next state.\n * Does not mutate.\n * @param {string} input character or token type to transition on\n * @returns {?State} the next state, if any\n */\n go(input) {\n const state = this;\n const nextState = state.j[input];\n if (nextState) {\n return nextState;\n }\n for (let i = 0; i < state.jr.length; i++) {\n const regex = state.jr[i][0];\n const nextState = state.jr[i][1]; // note: might be empty to prevent default jump\n if (nextState && regex.test(input)) {\n return nextState;\n }\n }\n // Nowhere left to jump! Return default, if any\n return state.jd;\n },\n /**\n * Whether the state has a transition for the given input. Set the second\n * argument to true to only look for an exact match (and not a default or\n * regular-expression-based transition)\n * @param {string} input\n * @param {boolean} exactOnly\n */\n has(input, exactOnly = false) {\n return exactOnly ? input in this.j : !!this.go(input);\n },\n /**\n * Short for \"transition all\"; create a transition from the array of items\n * in the given list to the same final resulting state.\n * @param {string | string[]} inputs Group of inputs to transition on\n * @param {Transition | State} [next] Transition options\n * @param {Flags} [flags] Collections flags to add token to\n * @param {Collections} [groups] Master list of token groups\n */\n ta(inputs, next, flags, groups) {\n for (let i = 0; i < inputs.length; i++) {\n this.tt(inputs[i], next, flags, groups);\n }\n },\n /**\n * Short for \"take regexp transition\"; defines a transition for this state\n * when it encounters a token which matches the given regular expression\n * @param {RegExp} regexp Regular expression transition (populate first)\n * @param {T | State} [next] Transition options\n * @param {Flags} [flags] Collections flags to add token to\n * @param {Collections} [groups] Master list of token groups\n * @returns {State} taken after the given input\n */\n tr(regexp, next, flags, groups) {\n groups = groups || State.groups;\n let nextState;\n if (next && next.j) {\n nextState = next;\n } else {\n // Token with maybe token groups\n nextState = new State(next);\n if (flags && groups) {\n addToGroups(next, flags, groups);\n }\n }\n this.jr.push([regexp, nextState]);\n return nextState;\n },\n /**\n * Short for \"take transitions\", will take as many sequential transitions as\n * the length of the given input and returns the\n * resulting final state.\n * @param {string | string[]} input\n * @param {T | State} [next] Transition options\n * @param {Flags} [flags] Collections flags to add token to\n * @param {Collections} [groups] Master list of token groups\n * @returns {State} taken after the given input\n */\n ts(input, next, flags, groups) {\n let state = this;\n const len = input.length;\n if (!len) {\n return state;\n }\n for (let i = 0; i < len - 1; i++) {\n state = state.tt(input[i]);\n }\n return state.tt(input[len - 1], next, flags, groups);\n },\n /**\n * Short for \"take transition\", this is a method for building/working with\n * state machines.\n *\n * If a state already exists for the given input, returns it.\n *\n * If a token is specified, that state will emit that token when reached by\n * the linkify engine.\n *\n * If no state exists, it will be initialized with some default transitions\n * that resemble existing default transitions.\n *\n * If a state is given for the second argument, that state will be\n * transitioned to on the given input regardless of what that input\n * previously did.\n *\n * Specify a token group flags to define groups that this token belongs to.\n * The token will be added to corresponding entires in the given groups\n * object.\n *\n * @param {string} input character, token type to transition on\n * @param {T | State} [next] Transition options\n * @param {Flags} [flags] Collections flags to add token to\n * @param {Collections} [groups] Master list of groups\n * @returns {State} taken after the given input\n */\n tt(input, next, flags, groups) {\n groups = groups || State.groups;\n const state = this;\n\n // Check if existing state given, just a basic transition\n if (next && next.j) {\n state.j[input] = next;\n return next;\n }\n const t = next;\n\n // Take the transition with the usual default mechanisms and use that as\n // a template for creating the next state\n let nextState,\n templateState = state.go(input);\n if (templateState) {\n nextState = new State();\n Object.assign(nextState.j, templateState.j);\n nextState.jr.push.apply(nextState.jr, templateState.jr);\n nextState.jd = templateState.jd;\n nextState.t = templateState.t;\n } else {\n nextState = new State();\n }\n if (t) {\n // Ensure newly token is in the same groups as the old token\n if (groups) {\n if (nextState.t && typeof nextState.t === 'string') {\n const allFlags = Object.assign(flagsForToken(nextState.t, groups), flags);\n addToGroups(t, allFlags, groups);\n } else if (flags) {\n addToGroups(t, flags, groups);\n }\n }\n nextState.t = t; // overwrite anything that was previously there\n }\n state.j[input] = nextState;\n return nextState;\n }\n};\n\n// Helper functions to improve minification (not exported outside linkifyjs module)\n\n/**\n * @template T\n * @param {State} state\n * @param {string | string[]} input\n * @param {Flags} [flags]\n * @param {Collections} [groups]\n */\nconst ta = (state, input, next, flags, groups) => state.ta(input, next, flags, groups);\n\n/**\n * @template T\n * @param {State} state\n * @param {RegExp} regexp\n * @param {T | State} [next]\n * @param {Flags} [flags]\n * @param {Collections} [groups]\n */\nconst tr = (state, regexp, next, flags, groups) => state.tr(regexp, next, flags, groups);\n\n/**\n * @template T\n * @param {State} state\n * @param {string | string[]} input\n * @param {T | State} [next]\n * @param {Flags} [flags]\n * @param {Collections} [groups]\n */\nconst ts = (state, input, next, flags, groups) => state.ts(input, next, flags, groups);\n\n/**\n * @template T\n * @param {State} state\n * @param {string} input\n * @param {T | State} [next]\n * @param {Collections} [groups]\n * @param {Flags} [flags]\n */\nconst tt = (state, input, next, flags, groups) => state.tt(input, next, flags, groups);\n\n/******************************************************************************\nText Tokens\nIdentifiers for token outputs from the regexp scanner\n******************************************************************************/\n\n// A valid web domain token\nconst WORD = 'WORD'; // only contains a-z\nconst UWORD = 'UWORD'; // contains letters other than a-z, used for IDN\nconst ASCIINUMERICAL = 'ASCIINUMERICAL'; // contains a-z, 0-9\nconst ALPHANUMERICAL = 'ALPHANUMERICAL'; // contains numbers and letters other than a-z, used for IDN\n\n// Special case of word\nconst LOCALHOST = 'LOCALHOST';\n\n// Valid top-level domain, special case of WORD (see tlds.js)\nconst TLD = 'TLD';\n\n// Valid IDN TLD, special case of UWORD (see tlds.js)\nconst UTLD = 'UTLD';\n\n// The scheme portion of a web URI protocol. Supported types include: `mailto`,\n// `file`, and user-defined custom protocols. Limited to schemes that contain\n// only letters\nconst SCHEME = 'SCHEME';\n\n// Similar to SCHEME, except makes distinction for schemes that must always be\n// followed by `://`, not just `:`. Supported types include `http`, `https`,\n// `ftp`, `ftps`\nconst SLASH_SCHEME = 'SLASH_SCHEME';\n\n// Any sequence of digits 0-9\nconst NUM = 'NUM';\n\n// Any number of consecutive whitespace characters that are not newline\nconst WS = 'WS';\n\n// New line (unix style)\nconst NL = 'NL'; // \\n\n\n// Opening/closing bracket classes\n// TODO: Rename OPEN -> LEFT and CLOSE -> RIGHT in v5 to fit with Unicode names\n// Also rename angle brackes to LESSTHAN and GREATER THAN\nconst OPENBRACE = 'OPENBRACE'; // {\nconst CLOSEBRACE = 'CLOSEBRACE'; // }\nconst OPENBRACKET = 'OPENBRACKET'; // [\nconst CLOSEBRACKET = 'CLOSEBRACKET'; // ]\nconst OPENPAREN = 'OPENPAREN'; // (\nconst CLOSEPAREN = 'CLOSEPAREN'; // )\nconst OPENANGLEBRACKET = 'OPENANGLEBRACKET'; // <\nconst CLOSEANGLEBRACKET = 'CLOSEANGLEBRACKET'; // >\nconst FULLWIDTHLEFTPAREN = 'FULLWIDTHLEFTPAREN'; // (\nconst FULLWIDTHRIGHTPAREN = 'FULLWIDTHRIGHTPAREN'; // )\nconst LEFTCORNERBRACKET = 'LEFTCORNERBRACKET'; // 「\nconst RIGHTCORNERBRACKET = 'RIGHTCORNERBRACKET'; // 」\nconst LEFTWHITECORNERBRACKET = 'LEFTWHITECORNERBRACKET'; // 『\nconst RIGHTWHITECORNERBRACKET = 'RIGHTWHITECORNERBRACKET'; // 』\nconst FULLWIDTHLESSTHAN = 'FULLWIDTHLESSTHAN'; // <\nconst FULLWIDTHGREATERTHAN = 'FULLWIDTHGREATERTHAN'; // >\n\n// Various symbols\nconst AMPERSAND = 'AMPERSAND'; // &\nconst APOSTROPHE = 'APOSTROPHE'; // '\nconst ASTERISK = 'ASTERISK'; // *\nconst AT = 'AT'; // @\nconst BACKSLASH = 'BACKSLASH'; // \\\nconst BACKTICK = 'BACKTICK'; // `\nconst CARET = 'CARET'; // ^\nconst COLON = 'COLON'; // :\nconst COMMA = 'COMMA'; // ,\nconst DOLLAR = 'DOLLAR'; // $\nconst DOT = 'DOT'; // .\nconst EQUALS = 'EQUALS'; // =\nconst EXCLAMATION = 'EXCLAMATION'; // !\nconst HYPHEN = 'HYPHEN'; // -\nconst PERCENT = 'PERCENT'; // %\nconst PIPE = 'PIPE'; // |\nconst PLUS = 'PLUS'; // +\nconst POUND = 'POUND'; // #\nconst QUERY = 'QUERY'; // ?\nconst QUOTE = 'QUOTE'; // \"\nconst FULLWIDTHMIDDLEDOT = 'FULLWIDTHMIDDLEDOT'; // ・\n\nconst SEMI = 'SEMI'; // ;\nconst SLASH = 'SLASH'; // /\nconst TILDE = 'TILDE'; // ~\nconst UNDERSCORE = 'UNDERSCORE'; // _\n\n// Emoji symbol\nconst EMOJI$1 = 'EMOJI';\n\n// Default token - anything that is not one of the above\nconst SYM = 'SYM';\n\nvar tk = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tALPHANUMERICAL: ALPHANUMERICAL,\n\tAMPERSAND: AMPERSAND,\n\tAPOSTROPHE: APOSTROPHE,\n\tASCIINUMERICAL: ASCIINUMERICAL,\n\tASTERISK: ASTERISK,\n\tAT: AT,\n\tBACKSLASH: BACKSLASH,\n\tBACKTICK: BACKTICK,\n\tCARET: CARET,\n\tCLOSEANGLEBRACKET: CLOSEANGLEBRACKET,\n\tCLOSEBRACE: CLOSEBRACE,\n\tCLOSEBRACKET: CLOSEBRACKET,\n\tCLOSEPAREN: CLOSEPAREN,\n\tCOLON: COLON,\n\tCOMMA: COMMA,\n\tDOLLAR: DOLLAR,\n\tDOT: DOT,\n\tEMOJI: EMOJI$1,\n\tEQUALS: EQUALS,\n\tEXCLAMATION: EXCLAMATION,\n\tFULLWIDTHGREATERTHAN: FULLWIDTHGREATERTHAN,\n\tFULLWIDTHLEFTPAREN: FULLWIDTHLEFTPAREN,\n\tFULLWIDTHLESSTHAN: FULLWIDTHLESSTHAN,\n\tFULLWIDTHMIDDLEDOT: FULLWIDTHMIDDLEDOT,\n\tFULLWIDTHRIGHTPAREN: FULLWIDTHRIGHTPAREN,\n\tHYPHEN: HYPHEN,\n\tLEFTCORNERBRACKET: LEFTCORNERBRACKET,\n\tLEFTWHITECORNERBRACKET: LEFTWHITECORNERBRACKET,\n\tLOCALHOST: LOCALHOST,\n\tNL: NL,\n\tNUM: NUM,\n\tOPENANGLEBRACKET: OPENANGLEBRACKET,\n\tOPENBRACE: OPENBRACE,\n\tOPENBRACKET: OPENBRACKET,\n\tOPENPAREN: OPENPAREN,\n\tPERCENT: PERCENT,\n\tPIPE: PIPE,\n\tPLUS: PLUS,\n\tPOUND: POUND,\n\tQUERY: QUERY,\n\tQUOTE: QUOTE,\n\tRIGHTCORNERBRACKET: RIGHTCORNERBRACKET,\n\tRIGHTWHITECORNERBRACKET: RIGHTWHITECORNERBRACKET,\n\tSCHEME: SCHEME,\n\tSEMI: SEMI,\n\tSLASH: SLASH,\n\tSLASH_SCHEME: SLASH_SCHEME,\n\tSYM: SYM,\n\tTILDE: TILDE,\n\tTLD: TLD,\n\tUNDERSCORE: UNDERSCORE,\n\tUTLD: UTLD,\n\tUWORD: UWORD,\n\tWORD: WORD,\n\tWS: WS\n});\n\n// Note that these two Unicode ones expand into a really big one with Babel\nconst ASCII_LETTER = /[a-z]/;\nconst LETTER = /\\p{L}/u; // Any Unicode character with letter data type\nconst EMOJI = /\\p{Emoji}/u; // Any Unicode emoji character\nconst EMOJI_VARIATION$1 = /\\ufe0f/;\nconst DIGIT = /\\d/;\nconst SPACE = /\\s/;\n\nvar regexp = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tASCII_LETTER: ASCII_LETTER,\n\tDIGIT: DIGIT,\n\tEMOJI: EMOJI,\n\tEMOJI_VARIATION: EMOJI_VARIATION$1,\n\tLETTER: LETTER,\n\tSPACE: SPACE\n});\n\n/**\n\tThe scanner provides an interface that takes a string of text as input, and\n\toutputs an array of tokens instances that can be used for easy URL parsing.\n*/\n\nconst CR = '\\r'; // carriage-return character\nconst LF = '\\n'; // line-feed character\nconst EMOJI_VARIATION = '\\ufe0f'; // Variation selector, follows heart and others\nconst EMOJI_JOINER = '\\u200d'; // zero-width joiner\nconst OBJECT_REPLACEMENT = '\\ufffc'; // whitespace placeholder that sometimes appears in rich text editors\n\nlet tlds = null,\n utlds = null; // don't change so only have to be computed once\n\n/**\n * Scanner output token:\n * - `t` is the token name (e.g., 'NUM', 'EMOJI', 'TLD')\n * - `v` is the value of the token (e.g., '123', '❤️', 'com')\n * - `s` is the start index of the token in the original string\n * - `e` is the end index of the token in the original string\n * @typedef {{t: string, v: string, s: number, e: number}} Token\n */\n\n/**\n * @template T\n * @typedef {{ [collection: string]: T[] }} Collections\n */\n\n/**\n * Initialize the scanner character-based state machine for the given start\n * state\n * @param {[string, boolean][]} customSchemes List of custom schemes, where each\n * item is a length-2 tuple with the first element set to the string scheme, and\n * the second element set to `true` if the `://` after the scheme is optional\n */\nfunction init$2(customSchemes = []) {\n // Frequently used states (name argument removed during minification)\n /** @type Collections */\n const groups = {}; // of tokens\n State.groups = groups;\n /** @type State */\n const Start = new State();\n if (tlds == null) {\n tlds = decodeTlds(encodedTlds);\n }\n if (utlds == null) {\n utlds = decodeTlds(encodedUtlds);\n }\n\n // States for special URL symbols that accept immediately after start\n tt(Start, \"'\", APOSTROPHE);\n tt(Start, '{', OPENBRACE);\n tt(Start, '}', CLOSEBRACE);\n tt(Start, '[', OPENBRACKET);\n tt(Start, ']', CLOSEBRACKET);\n tt(Start, '(', OPENPAREN);\n tt(Start, ')', CLOSEPAREN);\n tt(Start, '<', OPENANGLEBRACKET);\n tt(Start, '>', CLOSEANGLEBRACKET);\n tt(Start, '(', FULLWIDTHLEFTPAREN);\n tt(Start, ')', FULLWIDTHRIGHTPAREN);\n tt(Start, '「', LEFTCORNERBRACKET);\n tt(Start, '」', RIGHTCORNERBRACKET);\n tt(Start, '『', LEFTWHITECORNERBRACKET);\n tt(Start, '』', RIGHTWHITECORNERBRACKET);\n tt(Start, '<', FULLWIDTHLESSTHAN);\n tt(Start, '>', FULLWIDTHGREATERTHAN);\n tt(Start, '&', AMPERSAND);\n tt(Start, '*', ASTERISK);\n tt(Start, '@', AT);\n tt(Start, '`', BACKTICK);\n tt(Start, '^', CARET);\n tt(Start, ':', COLON);\n tt(Start, ',', COMMA);\n tt(Start, '$', DOLLAR);\n tt(Start, '.', DOT);\n tt(Start, '=', EQUALS);\n tt(Start, '!', EXCLAMATION);\n tt(Start, '-', HYPHEN);\n tt(Start, '%', PERCENT);\n tt(Start, '|', PIPE);\n tt(Start, '+', PLUS);\n tt(Start, '#', POUND);\n tt(Start, '?', QUERY);\n tt(Start, '\"', QUOTE);\n tt(Start, '/', SLASH);\n tt(Start, ';', SEMI);\n tt(Start, '~', TILDE);\n tt(Start, '_', UNDERSCORE);\n tt(Start, '\\\\', BACKSLASH);\n tt(Start, '・', FULLWIDTHMIDDLEDOT);\n const Num = tr(Start, DIGIT, NUM, {\n [numeric]: true\n });\n tr(Num, DIGIT, Num);\n const Asciinumeric = tr(Num, ASCII_LETTER, ASCIINUMERICAL, {\n [asciinumeric]: true\n });\n const Alphanumeric = tr(Num, LETTER, ALPHANUMERICAL, {\n [alphanumeric]: true\n });\n\n // State which emits a word token\n const Word = tr(Start, ASCII_LETTER, WORD, {\n [ascii]: true\n });\n tr(Word, DIGIT, Asciinumeric);\n tr(Word, ASCII_LETTER, Word);\n tr(Asciinumeric, DIGIT, Asciinumeric);\n tr(Asciinumeric, ASCII_LETTER, Asciinumeric);\n\n // Same as previous, but specific to non-fsm.ascii alphabet words\n const UWord = tr(Start, LETTER, UWORD, {\n [alpha]: true\n });\n tr(UWord, ASCII_LETTER); // Non-accepting\n tr(UWord, DIGIT, Alphanumeric);\n tr(UWord, LETTER, UWord);\n tr(Alphanumeric, DIGIT, Alphanumeric);\n tr(Alphanumeric, ASCII_LETTER); // Non-accepting\n tr(Alphanumeric, LETTER, Alphanumeric); // Non-accepting\n\n // Whitespace jumps\n // Tokens of only non-newline whitespace are arbitrarily long\n // If any whitespace except newline, more whitespace!\n const Nl = tt(Start, LF, NL, {\n [whitespace]: true\n });\n const Cr = tt(Start, CR, WS, {\n [whitespace]: true\n });\n const Ws = tr(Start, SPACE, WS, {\n [whitespace]: true\n });\n tt(Start, OBJECT_REPLACEMENT, Ws);\n tt(Cr, LF, Nl); // \\r\\n\n tt(Cr, OBJECT_REPLACEMENT, Ws);\n tr(Cr, SPACE, Ws);\n tt(Ws, CR); // non-accepting state to avoid mixing whitespaces\n tt(Ws, LF); // non-accepting state to avoid mixing whitespaces\n tr(Ws, SPACE, Ws);\n tt(Ws, OBJECT_REPLACEMENT, Ws);\n\n // Emoji tokens. They are not grouped by the scanner except in cases where a\n // zero-width joiner is present\n const Emoji = tr(Start, EMOJI, EMOJI$1, {\n [emoji]: true\n });\n tt(Emoji, '#'); // no transition, emoji regex seems to match #\n tr(Emoji, EMOJI, Emoji);\n tt(Emoji, EMOJI_VARIATION, Emoji);\n // tt(Start, EMOJI_VARIATION, Emoji); // This one is sketchy\n\n const EmojiJoiner = tt(Emoji, EMOJI_JOINER);\n tt(EmojiJoiner, '#');\n tr(EmojiJoiner, EMOJI, Emoji);\n // tt(EmojiJoiner, EMOJI_VARIATION, Emoji); // also sketchy\n\n // Generates states for top-level domains\n // Note that this is most accurate when tlds are in alphabetical order\n const wordjr = [[ASCII_LETTER, Word], [DIGIT, Asciinumeric]];\n const uwordjr = [[ASCII_LETTER, null], [LETTER, UWord], [DIGIT, Alphanumeric]];\n for (let i = 0; i < tlds.length; i++) {\n fastts(Start, tlds[i], TLD, WORD, wordjr);\n }\n for (let i = 0; i < utlds.length; i++) {\n fastts(Start, utlds[i], UTLD, UWORD, uwordjr);\n }\n addToGroups(TLD, {\n tld: true,\n ascii: true\n }, groups);\n addToGroups(UTLD, {\n utld: true,\n alpha: true\n }, groups);\n\n // Collect the states generated by different protocols. NOTE: If any new TLDs\n // get added that are also protocols, set the token to be the same as the\n // protocol to ensure parsing works as expected.\n fastts(Start, 'file', SCHEME, WORD, wordjr);\n fastts(Start, 'mailto', SCHEME, WORD, wordjr);\n fastts(Start, 'http', SLASH_SCHEME, WORD, wordjr);\n fastts(Start, 'https', SLASH_SCHEME, WORD, wordjr);\n fastts(Start, 'ftp', SLASH_SCHEME, WORD, wordjr);\n fastts(Start, 'ftps', SLASH_SCHEME, WORD, wordjr);\n addToGroups(SCHEME, {\n scheme: true,\n ascii: true\n }, groups);\n addToGroups(SLASH_SCHEME, {\n slashscheme: true,\n ascii: true\n }, groups);\n\n // Register custom schemes. Assumes each scheme is asciinumeric with hyphens\n customSchemes = customSchemes.sort((a, b) => a[0] > b[0] ? 1 : -1);\n for (let i = 0; i < customSchemes.length; i++) {\n const sch = customSchemes[i][0];\n const optionalSlashSlash = customSchemes[i][1];\n const flags = optionalSlashSlash ? {\n [scheme]: true\n } : {\n [slashscheme]: true\n };\n if (sch.indexOf('-') >= 0) {\n flags[domain] = true;\n } else if (!ASCII_LETTER.test(sch)) {\n flags[numeric] = true; // numbers only\n } else if (DIGIT.test(sch)) {\n flags[asciinumeric] = true;\n } else {\n flags[ascii] = true;\n }\n ts(Start, sch, sch, flags);\n }\n\n // Localhost token\n ts(Start, 'localhost', LOCALHOST, {\n ascii: true\n });\n\n // Set default transition for start state (some symbol)\n Start.jd = new State(SYM);\n return {\n start: Start,\n tokens: Object.assign({\n groups\n }, tk)\n };\n}\n\n/**\n\tGiven a string, returns an array of TOKEN instances representing the\n\tcomposition of that string.\n\n\t@method run\n\t@param {State} start scanner starting state\n\t@param {string} str input string to scan\n\t@return {Token[]} list of tokens, each with a type and value\n*/\nfunction run$1(start, str) {\n // State machine is not case sensitive, so input is tokenized in lowercased\n // form (still returns regular case). Uses selective `toLowerCase` because\n // lowercasing the entire string causes the length and character position to\n // vary in some non-English strings with V8-based runtimes.\n const iterable = stringToArray(str.replace(/[A-Z]/g, c => c.toLowerCase()));\n const charCount = iterable.length; // <= len if there are emojis, etc\n const tokens = []; // return value\n\n // cursor through the string itself, accounting for characters that have\n // width with length 2 such as emojis\n let cursor = 0;\n\n // Cursor through the array-representation of the string\n let charCursor = 0;\n\n // Tokenize the string\n while (charCursor < charCount) {\n let state = start;\n let nextState = null;\n let tokenLength = 0;\n let latestAccepting = null;\n let sinceAccepts = -1;\n let charsSinceAccepts = -1;\n while (charCursor < charCount && (nextState = state.go(iterable[charCursor]))) {\n state = nextState;\n\n // Keep track of the latest accepting state\n if (state.accepts()) {\n sinceAccepts = 0;\n charsSinceAccepts = 0;\n latestAccepting = state;\n } else if (sinceAccepts >= 0) {\n sinceAccepts += iterable[charCursor].length;\n charsSinceAccepts++;\n }\n tokenLength += iterable[charCursor].length;\n cursor += iterable[charCursor].length;\n charCursor++;\n }\n\n // Roll back to the latest accepting state\n cursor -= sinceAccepts;\n charCursor -= charsSinceAccepts;\n tokenLength -= sinceAccepts;\n\n // No more jumps, just make a new token from the last accepting one\n tokens.push({\n t: latestAccepting.t,\n // token type/name\n v: str.slice(cursor - tokenLength, cursor),\n // string value\n s: cursor - tokenLength,\n // start index\n e: cursor // end index (excluding)\n });\n }\n return tokens;\n}\n\n/**\n * Convert a String to an Array of characters, taking into account that some\n * characters like emojis take up two string indexes.\n *\n * Adapted from core-js (MIT license)\n * https://github.com/zloirock/core-js/blob/2d69cf5f99ab3ea3463c395df81e5a15b68f49d9/packages/core-js/internals/string-multibyte.js\n *\n * @function stringToArray\n * @param {string} str\n * @returns {string[]}\n */\nfunction stringToArray(str) {\n const result = [];\n const len = str.length;\n let index = 0;\n while (index < len) {\n let first = str.charCodeAt(index);\n let second;\n let char = first < 0xd800 || first > 0xdbff || index + 1 === len || (second = str.charCodeAt(index + 1)) < 0xdc00 || second > 0xdfff ? str[index] // single character\n : str.slice(index, index + 2); // two-index characters\n result.push(char);\n index += char.length;\n }\n return result;\n}\n\n/**\n * Fast version of ts function for when transition defaults are well known\n * @param {State} state\n * @param {string} input\n * @param {string} t\n * @param {string} defaultt\n * @param {[RegExp, State][]} jr\n * @returns {State}\n */\nfunction fastts(state, input, t, defaultt, jr) {\n let next;\n const len = input.length;\n for (let i = 0; i < len - 1; i++) {\n const char = input[i];\n if (state.j[char]) {\n next = state.j[char];\n } else {\n next = new State(defaultt);\n next.jr = jr.slice();\n state.j[char] = next;\n }\n state = next;\n }\n next = new State(t);\n next.jr = jr.slice();\n state.j[input[len - 1]] = next;\n return next;\n}\n\n/**\n * Converts a string of Top-Level Domain names encoded in update-tlds.js back\n * into a list of strings.\n * @param {str} encoded encoded TLDs string\n * @returns {str[]} original TLDs list\n */\nfunction decodeTlds(encoded) {\n const words = [];\n const stack = [];\n let i = 0;\n let digits = '0123456789';\n while (i < encoded.length) {\n let popDigitCount = 0;\n while (digits.indexOf(encoded[i + popDigitCount]) >= 0) {\n popDigitCount++; // encountered some digits, have to pop to go one level up trie\n }\n if (popDigitCount > 0) {\n words.push(stack.join('')); // whatever preceded the pop digits must be a word\n for (let popCount = parseInt(encoded.substring(i, i + popDigitCount), 10); popCount > 0; popCount--) {\n stack.pop();\n }\n i += popDigitCount;\n } else {\n stack.push(encoded[i]); // drop down a level into the trie\n i++;\n }\n }\n return words;\n}\n\n/**\n * An object where each key is a valid DOM Event Name such as `click` or `focus`\n * and each value is an event handler function.\n *\n * https://developer.mozilla.org/en-US/docs/Web/API/Element#events\n * @typedef {?{ [event: string]: Function }} EventListeners\n */\n\n/**\n * All formatted properties required to render a link, including `tagName`,\n * `attributes`, `content` and `eventListeners`.\n * @typedef {{ tagName: any, attributes: {[attr: string]: any}, content: string,\n * eventListeners: EventListeners }} IntermediateRepresentation\n */\n\n/**\n * Specify either an object described by the template type `O` or a function.\n *\n * The function takes a string value (usually the link's href attribute), the\n * link type (`'url'`, `'hashtag`', etc.) and an internal token representation\n * of the link. It should return an object of the template type `O`\n * @template O\n * @typedef {O | ((value: string, type: string, token: MultiToken) => O)} OptObj\n */\n\n/**\n * Specify either a function described by template type `F` or an object.\n *\n * Each key in the object should be a link type (`'url'`, `'hashtag`', etc.). Each\n * value should be a function with template type `F` that is called when the\n * corresponding link type is encountered.\n * @template F\n * @typedef {F | { [type: string]: F}} OptFn\n */\n\n/**\n * Specify either a value with template type `V`, a function that returns `V` or\n * an object where each value resolves to `V`.\n *\n * The function takes a string value (usually the link's href attribute), the\n * link type (`'url'`, `'hashtag`', etc.) and an internal token representation\n * of the link. It should return an object of the template type `V`\n *\n * For the object, each key should be a link type (`'url'`, `'hashtag`', etc.).\n * Each value should either have type `V` or a function that returns V. This\n * function similarly takes a string value and a token.\n *\n * Example valid types for `Opt`:\n *\n * ```js\n * 'hello'\n * (value, type, token) => 'world'\n * { url: 'hello', email: (value, token) => 'world'}\n * ```\n * @template V\n * @typedef {V | ((value: string, type: string, token: MultiToken) => V) | { [type: string]: V | ((value: string, token: MultiToken) => V) }} Opt\n */\n\n/**\n * See available options: https://linkify.js.org/docs/options.html\n * @typedef {{\n * \tdefaultProtocol?: string,\n * events?: OptObj,\n * \tformat?: Opt,\n * \tformatHref?: Opt,\n * \tnl2br?: boolean,\n * \ttagName?: Opt,\n * \ttarget?: Opt,\n * \trel?: Opt,\n * \tvalidate?: Opt,\n * \ttruncate?: Opt,\n * \tclassName?: Opt,\n * \tattributes?: OptObj<({ [attr: string]: any })>,\n * ignoreTags?: string[],\n * \trender?: OptFn<((ir: IntermediateRepresentation) => any)>\n * }} Opts\n */\n\n/**\n * @type Required\n */\nconst defaults = {\n defaultProtocol: 'http',\n events: null,\n format: noop,\n formatHref: noop,\n nl2br: false,\n tagName: 'a',\n target: null,\n rel: null,\n validate: true,\n truncate: Infinity,\n className: null,\n attributes: null,\n ignoreTags: [],\n render: null\n};\n\n/**\n * Utility class for linkify interfaces to apply specified\n * {@link Opts formatting and rendering options}.\n *\n * @param {Opts | Options} [opts] Option value overrides.\n * @param {(ir: IntermediateRepresentation) => any} [defaultRender] (For\n * internal use) default render function that determines how to generate an\n * HTML element based on a link token's derived tagName, attributes and HTML.\n * Similar to render option\n */\nfunction Options(opts, defaultRender = null) {\n let o = Object.assign({}, defaults);\n if (opts) {\n o = Object.assign(o, opts instanceof Options ? opts.o : opts);\n }\n\n // Ensure all ignored tags are uppercase\n const ignoredTags = o.ignoreTags;\n const uppercaseIgnoredTags = [];\n for (let i = 0; i < ignoredTags.length; i++) {\n uppercaseIgnoredTags.push(ignoredTags[i].toUpperCase());\n }\n /** @protected */\n this.o = o;\n if (defaultRender) {\n this.defaultRender = defaultRender;\n }\n this.ignoreTags = uppercaseIgnoredTags;\n}\nOptions.prototype = {\n o: defaults,\n /**\n * @type string[]\n */\n ignoreTags: [],\n /**\n * @param {IntermediateRepresentation} ir\n * @returns {any}\n */\n defaultRender(ir) {\n return ir;\n },\n /**\n * Returns true or false based on whether a token should be displayed as a\n * link based on the user options.\n * @param {MultiToken} token\n * @returns {boolean}\n */\n check(token) {\n return this.get('validate', token.toString(), token);\n },\n // Private methods\n\n /**\n * Resolve an option's value based on the value of the option and the given\n * params. If operator and token are specified and the target option is\n * callable, automatically calls the function with the given argument.\n * @template {keyof Opts} K\n * @param {K} key Name of option to use\n * @param {string} [operator] will be passed to the target option if it's a\n * function. If not specified, RAW function value gets returned\n * @param {MultiToken} [token] The token from linkify.tokenize\n * @returns {Opts[K] | any}\n */\n get(key, operator, token) {\n const isCallable = operator != null;\n let option = this.o[key];\n if (!option) {\n return option;\n }\n if (typeof option === 'object') {\n option = token.t in option ? option[token.t] : defaults[key];\n if (typeof option === 'function' && isCallable) {\n option = option(operator, token);\n }\n } else if (typeof option === 'function' && isCallable) {\n option = option(operator, token.t, token);\n }\n return option;\n },\n /**\n * @template {keyof Opts} L\n * @param {L} key Name of options object to use\n * @param {string} [operator]\n * @param {MultiToken} [token]\n * @returns {Opts[L] | any}\n */\n getObj(key, operator, token) {\n let obj = this.o[key];\n if (typeof obj === 'function' && operator != null) {\n obj = obj(operator, token.t, token);\n }\n return obj;\n },\n /**\n * Convert the given token to a rendered element that may be added to the\n * calling-interface's DOM\n * @param {MultiToken} token Token to render to an HTML element\n * @returns {any} Render result; e.g., HTML string, DOM element, React\n * Component, etc.\n */\n render(token) {\n const ir = token.render(this); // intermediate representation\n const renderFn = this.get('render', null, token) || this.defaultRender;\n return renderFn(ir, token.t, token);\n }\n};\nfunction noop(val) {\n return val;\n}\n\nvar options = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tOptions: Options,\n\tdefaults: defaults\n});\n\n/******************************************************************************\n\tMulti-Tokens\n\tTokens composed of arrays of TextTokens\n******************************************************************************/\n\n/**\n * @param {string} value\n * @param {Token[]} tokens\n */\nfunction MultiToken(value, tokens) {\n this.t = 'token';\n this.v = value;\n this.tk = tokens;\n}\n\n/**\n * Abstract class used for manufacturing tokens of text tokens. That is rather\n * than the value for a token being a small string of text, it's value an array\n * of text tokens.\n *\n * Used for grouping together URLs, emails, hashtags, and other potential\n * creations.\n * @class MultiToken\n * @property {string} t\n * @property {string} v\n * @property {Token[]} tk\n * @abstract\n */\nMultiToken.prototype = {\n isLink: false,\n /**\n * Return the string this token represents.\n * @return {string}\n */\n toString() {\n return this.v;\n },\n /**\n * What should the value for this token be in the `href` HTML attribute?\n * Returns the `.toString` value by default.\n * @param {string} [scheme]\n * @return {string}\n */\n toHref(scheme) {\n return this.toString();\n },\n /**\n * @param {Options} options Formatting options\n * @returns {string}\n */\n toFormattedString(options) {\n const val = this.toString();\n const truncate = options.get('truncate', val, this);\n const formatted = options.get('format', val, this);\n return truncate && formatted.length > truncate ? formatted.substring(0, truncate) + '…' : formatted;\n },\n /**\n *\n * @param {Options} options\n * @returns {string}\n */\n toFormattedHref(options) {\n return options.get('formatHref', this.toHref(options.get('defaultProtocol')), this);\n },\n /**\n * The start index of this token in the original input string\n * @returns {number}\n */\n startIndex() {\n return this.tk[0].s;\n },\n /**\n * The end index of this token in the original input string (up to this\n * index but not including it)\n * @returns {number}\n */\n endIndex() {\n return this.tk[this.tk.length - 1].e;\n },\n /**\n \tReturns an object of relevant values for this token, which includes keys\n \t* type - Kind of token ('url', 'email', etc.)\n \t* value - Original text\n \t* href - The value that should be added to the anchor tag's href\n \t\tattribute\n \t\t@method toObject\n \t@param {string} [protocol] `'http'` by default\n */\n toObject(protocol = defaults.defaultProtocol) {\n return {\n type: this.t,\n value: this.toString(),\n isLink: this.isLink,\n href: this.toHref(protocol),\n start: this.startIndex(),\n end: this.endIndex()\n };\n },\n /**\n *\n * @param {Options} options Formatting option\n */\n toFormattedObject(options) {\n return {\n type: this.t,\n value: this.toFormattedString(options),\n isLink: this.isLink,\n href: this.toFormattedHref(options),\n start: this.startIndex(),\n end: this.endIndex()\n };\n },\n /**\n * Whether this token should be rendered as a link according to the given options\n * @param {Options} options\n * @returns {boolean}\n */\n validate(options) {\n return options.get('validate', this.toString(), this);\n },\n /**\n * Return an object that represents how this link should be rendered.\n * @param {Options} options Formattinng options\n */\n render(options) {\n const token = this;\n const href = this.toHref(options.get('defaultProtocol'));\n const formattedHref = options.get('formatHref', href, this);\n const tagName = options.get('tagName', href, token);\n const content = this.toFormattedString(options);\n const attributes = {};\n const className = options.get('className', href, token);\n const target = options.get('target', href, token);\n const rel = options.get('rel', href, token);\n const attrs = options.getObj('attributes', href, token);\n const eventListeners = options.getObj('events', href, token);\n attributes.href = formattedHref;\n if (className) {\n attributes.class = className;\n }\n if (target) {\n attributes.target = target;\n }\n if (rel) {\n attributes.rel = rel;\n }\n if (attrs) {\n Object.assign(attributes, attrs);\n }\n return {\n tagName,\n attributes,\n content,\n eventListeners\n };\n }\n};\n\n/**\n * Create a new token that can be emitted by the parser state machine\n * @param {string} type readable type of the token\n * @param {object} props properties to assign or override, including isLink = true or false\n * @returns {new (value: string, tokens: Token[]) => MultiToken} new token class\n */\nfunction createTokenClass(type, props) {\n class Token extends MultiToken {\n constructor(value, tokens) {\n super(value, tokens);\n this.t = type;\n }\n }\n for (const p in props) {\n Token.prototype[p] = props[p];\n }\n Token.t = type;\n return Token;\n}\n\n/**\n\tRepresents a list of tokens making up a valid email address\n*/\nconst Email = createTokenClass('email', {\n isLink: true,\n toHref() {\n return 'mailto:' + this.toString();\n }\n});\n\n/**\n\tRepresents some plain text\n*/\nconst Text = createTokenClass('text');\n\n/**\n\tMulti-linebreak token - represents a line break\n\t@class Nl\n*/\nconst Nl = createTokenClass('nl');\n\n/**\n\tRepresents a list of text tokens making up a valid URL\n\t@class Url\n*/\nconst Url = createTokenClass('url', {\n isLink: true,\n /**\n \tLowercases relevant parts of the domain and adds the protocol if\n \trequired. Note that this will not escape unsafe HTML characters in the\n \tURL.\n \t\t@param {string} [scheme] default scheme (e.g., 'https')\n \t@return {string} the full href\n */\n toHref(scheme = defaults.defaultProtocol) {\n // Check if already has a prefix scheme\n return this.hasProtocol() ? this.v : `${scheme}://${this.v}`;\n },\n /**\n * Check whether this URL token has a protocol\n * @return {boolean}\n */\n hasProtocol() {\n const tokens = this.tk;\n return tokens.length >= 2 && tokens[0].t !== LOCALHOST && tokens[1].t === COLON;\n }\n});\n\nvar multi = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tBase: MultiToken,\n\tEmail: Email,\n\tMultiToken: MultiToken,\n\tNl: Nl,\n\tText: Text,\n\tUrl: Url,\n\tcreateTokenClass: createTokenClass\n});\n\n/**\n\tNot exactly parser, more like the second-stage scanner (although we can\n\ttheoretically hotswap the code here with a real parser in the future... but\n\tfor a little URL-finding utility abstract syntax trees may be a little\n\toverkill).\n\n\tURL format: http://en.wikipedia.org/wiki/URI_scheme\n\tEmail format: http://en.wikipedia.org/wiki/EmailAddress (links to RFC in\n\treference)\n\n\t@module linkify\n\t@submodule parser\n\t@main run\n*/\n\nconst makeState = arg => new State(arg);\n\n/**\n * Generate the parser multi token-based state machine\n * @param {{ groups: Collections }} tokens\n */\nfunction init$1({\n groups\n}) {\n // Types of characters the URL can definitely end in\n const qsAccepting = groups.domain.concat([AMPERSAND, ASTERISK, AT, BACKSLASH, BACKTICK, CARET, DOLLAR, EQUALS, HYPHEN, NUM, PERCENT, PIPE, PLUS, POUND, SLASH, SYM, TILDE, UNDERSCORE]);\n\n // Types of tokens that can follow a URL and be part of the query string\n // but cannot be the very last characters\n // Characters that cannot appear in the URL at all should be excluded\n const qsNonAccepting = [APOSTROPHE, COLON, COMMA, DOT, EXCLAMATION, PERCENT, QUERY, QUOTE, SEMI, OPENANGLEBRACKET, CLOSEANGLEBRACKET, OPENBRACE, CLOSEBRACE, CLOSEBRACKET, OPENBRACKET, OPENPAREN, CLOSEPAREN, FULLWIDTHLEFTPAREN, FULLWIDTHRIGHTPAREN, LEFTCORNERBRACKET, RIGHTCORNERBRACKET, LEFTWHITECORNERBRACKET, RIGHTWHITECORNERBRACKET, FULLWIDTHLESSTHAN, FULLWIDTHGREATERTHAN];\n\n // For addresses without the mailto prefix\n // Tokens allowed in the localpart of the email\n const localpartAccepting = [AMPERSAND, APOSTROPHE, ASTERISK, BACKSLASH, BACKTICK, CARET, DOLLAR, EQUALS, HYPHEN, OPENBRACE, CLOSEBRACE, PERCENT, PIPE, PLUS, POUND, QUERY, SLASH, SYM, TILDE, UNDERSCORE];\n\n // The universal starting state.\n /**\n * @type State\n */\n const Start = makeState();\n const Localpart = tt(Start, TILDE); // Local part of the email address\n ta(Localpart, localpartAccepting, Localpart);\n ta(Localpart, groups.domain, Localpart);\n const Domain = makeState(),\n Scheme = makeState(),\n SlashScheme = makeState();\n ta(Start, groups.domain, Domain); // parsed string ends with a potential domain name (A)\n ta(Start, groups.scheme, Scheme); // e.g., 'mailto'\n ta(Start, groups.slashscheme, SlashScheme); // e.g., 'http'\n\n ta(Domain, localpartAccepting, Localpart);\n ta(Domain, groups.domain, Domain);\n const LocalpartAt = tt(Domain, AT); // Local part of the email address plus @\n\n tt(Localpart, AT, LocalpartAt); // close to an email address now\n\n // Local part of an email address can be e.g. 'http' or 'mailto'\n tt(Scheme, AT, LocalpartAt);\n tt(SlashScheme, AT, LocalpartAt);\n const LocalpartDot = tt(Localpart, DOT); // Local part of the email address plus '.' (localpart cannot end in .)\n ta(LocalpartDot, localpartAccepting, Localpart);\n ta(LocalpartDot, groups.domain, Localpart);\n const EmailDomain = makeState();\n ta(LocalpartAt, groups.domain, EmailDomain); // parsed string starts with local email info + @ with a potential domain name\n ta(EmailDomain, groups.domain, EmailDomain);\n const EmailDomainDot = tt(EmailDomain, DOT); // domain followed by DOT\n ta(EmailDomainDot, groups.domain, EmailDomain);\n const Email$1 = makeState(Email); // Possible email address (could have more tlds)\n ta(EmailDomainDot, groups.tld, Email$1);\n ta(EmailDomainDot, groups.utld, Email$1);\n tt(LocalpartAt, LOCALHOST, Email$1);\n\n // Hyphen can jump back to a domain name\n const EmailDomainHyphen = tt(EmailDomain, HYPHEN); // parsed string starts with local email info + @ with a potential domain name\n tt(EmailDomainHyphen, HYPHEN, EmailDomainHyphen);\n ta(EmailDomainHyphen, groups.domain, EmailDomain);\n ta(Email$1, groups.domain, EmailDomain);\n tt(Email$1, DOT, EmailDomainDot);\n tt(Email$1, HYPHEN, EmailDomainHyphen);\n\n // Final possible email states\n const EmailColon = tt(Email$1, COLON); // URL followed by colon (potential port number here)\n /*const EmailColonPort = */\n ta(EmailColon, groups.numeric, Email); // URL followed by colon and port number\n\n // Account for dots and hyphens. Hyphens are usually parts of domain names\n // (but not TLDs)\n const DomainHyphen = tt(Domain, HYPHEN); // domain followed by hyphen\n const DomainDot = tt(Domain, DOT); // domain followed by DOT\n tt(DomainHyphen, HYPHEN, DomainHyphen);\n ta(DomainHyphen, groups.domain, Domain);\n ta(DomainDot, localpartAccepting, Localpart);\n ta(DomainDot, groups.domain, Domain);\n const DomainDotTld = makeState(Url); // Simplest possible URL with no query string\n ta(DomainDot, groups.tld, DomainDotTld);\n ta(DomainDot, groups.utld, DomainDotTld);\n ta(DomainDotTld, groups.domain, Domain);\n ta(DomainDotTld, localpartAccepting, Localpart);\n tt(DomainDotTld, DOT, DomainDot);\n tt(DomainDotTld, HYPHEN, DomainHyphen);\n tt(DomainDotTld, AT, LocalpartAt);\n const DomainDotTldColon = tt(DomainDotTld, COLON); // URL followed by colon (potential port number here)\n const DomainDotTldColonPort = makeState(Url); // TLD followed by a port number\n ta(DomainDotTldColon, groups.numeric, DomainDotTldColonPort);\n\n // Long URL with optional port and maybe query string\n const Url$1 = makeState(Url);\n\n // URL with extra symbols at the end, followed by an opening bracket\n const UrlNonaccept = makeState(); // URL followed by some symbols (will not be part of the final URL)\n\n // Query strings\n ta(Url$1, qsAccepting, Url$1);\n ta(Url$1, qsNonAccepting, UrlNonaccept);\n ta(UrlNonaccept, qsAccepting, Url$1);\n ta(UrlNonaccept, qsNonAccepting, UrlNonaccept);\n\n // Become real URLs after `SLASH` or `COLON NUM SLASH`\n // Here works with or without scheme:// prefix\n tt(DomainDotTld, SLASH, Url$1);\n tt(DomainDotTldColonPort, SLASH, Url$1);\n\n // Note that domains that begin with schemes are treated slighly differently\n const SchemeColon = tt(Scheme, COLON); // e.g., 'mailto:'\n const SlashSchemeColon = tt(SlashScheme, COLON); // e.g., 'http:'\n const SlashSchemeColonSlash = tt(SlashSchemeColon, SLASH); // e.g., 'http:/'\n\n const UriPrefix = tt(SlashSchemeColonSlash, SLASH); // e.g., 'http://'\n\n // Scheme states can transition to domain states\n ta(Scheme, groups.domain, Domain);\n tt(Scheme, DOT, DomainDot);\n tt(Scheme, HYPHEN, DomainHyphen);\n ta(SlashScheme, groups.domain, Domain);\n tt(SlashScheme, DOT, DomainDot);\n tt(SlashScheme, HYPHEN, DomainHyphen);\n\n // Force URL with scheme prefix followed by anything sane\n ta(SchemeColon, groups.domain, Url$1);\n tt(SchemeColon, SLASH, Url$1);\n tt(SchemeColon, QUERY, Url$1);\n ta(UriPrefix, groups.domain, Url$1);\n ta(UriPrefix, qsAccepting, Url$1);\n tt(UriPrefix, SLASH, Url$1);\n const bracketPairs = [[OPENBRACE, CLOSEBRACE],\n // {}\n [OPENBRACKET, CLOSEBRACKET],\n // []\n [OPENPAREN, CLOSEPAREN],\n // ()\n [OPENANGLEBRACKET, CLOSEANGLEBRACKET],\n // <>\n [FULLWIDTHLEFTPAREN, FULLWIDTHRIGHTPAREN],\n // ()\n [LEFTCORNERBRACKET, RIGHTCORNERBRACKET],\n // 「」\n [LEFTWHITECORNERBRACKET, RIGHTWHITECORNERBRACKET],\n // 『』\n [FULLWIDTHLESSTHAN, FULLWIDTHGREATERTHAN] // <>\n ];\n for (let i = 0; i < bracketPairs.length; i++) {\n const [OPEN, CLOSE] = bracketPairs[i];\n const UrlOpen = tt(Url$1, OPEN); // URL followed by open bracket\n\n // Continue not accepting for open brackets\n tt(UrlNonaccept, OPEN, UrlOpen);\n\n // Closing bracket component. This character WILL be included in the URL\n tt(UrlOpen, CLOSE, Url$1);\n\n // URL that beings with an opening bracket, followed by a symbols.\n // Note that the final state can still be `UrlOpen` (if the URL has a\n // single opening bracket for some reason).\n const UrlOpenQ = makeState(Url);\n ta(UrlOpen, qsAccepting, UrlOpenQ);\n const UrlOpenSyms = makeState(); // UrlOpen followed by some symbols it cannot end it\n ta(UrlOpen, qsNonAccepting);\n\n // URL that begins with an opening bracket, followed by some symbols\n ta(UrlOpenQ, qsAccepting, UrlOpenQ);\n ta(UrlOpenQ, qsNonAccepting, UrlOpenSyms);\n ta(UrlOpenSyms, qsAccepting, UrlOpenQ);\n ta(UrlOpenSyms, qsNonAccepting, UrlOpenSyms);\n\n // Close brace/bracket to become regular URL\n tt(UrlOpenQ, CLOSE, Url$1);\n tt(UrlOpenSyms, CLOSE, Url$1);\n }\n tt(Start, LOCALHOST, DomainDotTld); // localhost is a valid URL state\n tt(Start, NL, Nl); // single new line\n\n return {\n start: Start,\n tokens: tk\n };\n}\n\n/**\n * Run the parser state machine on a list of scanned string-based tokens to\n * create a list of multi tokens, each of which represents a URL, email address,\n * plain text, etc.\n *\n * @param {State} start parser start state\n * @param {string} input the original input used to generate the given tokens\n * @param {Token[]} tokens list of scanned tokens\n * @returns {MultiToken[]}\n */\nfunction run(start, input, tokens) {\n let len = tokens.length;\n let cursor = 0;\n let multis = [];\n let textTokens = [];\n while (cursor < len) {\n let state = start;\n let secondState = null;\n let nextState = null;\n let multiLength = 0;\n let latestAccepting = null;\n let sinceAccepts = -1;\n while (cursor < len && !(secondState = state.go(tokens[cursor].t))) {\n // Starting tokens with nowhere to jump to.\n // Consider these to be just plain text\n textTokens.push(tokens[cursor++]);\n }\n while (cursor < len && (nextState = secondState || state.go(tokens[cursor].t))) {\n // Get the next state\n secondState = null;\n state = nextState;\n\n // Keep track of the latest accepting state\n if (state.accepts()) {\n sinceAccepts = 0;\n latestAccepting = state;\n } else if (sinceAccepts >= 0) {\n sinceAccepts++;\n }\n cursor++;\n multiLength++;\n }\n if (sinceAccepts < 0) {\n // No accepting state was found, part of a regular text token add\n // the first text token to the text tokens array and try again from\n // the next\n cursor -= multiLength;\n if (cursor < len) {\n textTokens.push(tokens[cursor]);\n cursor++;\n }\n } else {\n // Accepting state!\n // First close off the textTokens (if available)\n if (textTokens.length > 0) {\n multis.push(initMultiToken(Text, input, textTokens));\n textTokens = [];\n }\n\n // Roll back to the latest accepting state\n cursor -= sinceAccepts;\n multiLength -= sinceAccepts;\n\n // Create a new multitoken\n const Multi = latestAccepting.t;\n const subtokens = tokens.slice(cursor - multiLength, cursor);\n multis.push(initMultiToken(Multi, input, subtokens));\n }\n }\n\n // Finally close off the textTokens (if available)\n if (textTokens.length > 0) {\n multis.push(initMultiToken(Text, input, textTokens));\n }\n return multis;\n}\n\n/**\n * Utility function for instantiating a new multitoken with all the relevant\n * fields during parsing.\n * @param {new (value: string, tokens: Token[]) => MultiToken} Multi class to instantiate\n * @param {string} input original input string\n * @param {Token[]} tokens consecutive tokens scanned from input string\n * @returns {MultiToken}\n */\nfunction initMultiToken(Multi, input, tokens) {\n const startIdx = tokens[0].s;\n const endIdx = tokens[tokens.length - 1].e;\n const value = input.slice(startIdx, endIdx);\n return new Multi(value, tokens);\n}\n\nconst warn = typeof console !== 'undefined' && console && console.warn || (() => {});\nconst warnAdvice = 'until manual call of linkify.init(). Register all schemes and plugins before invoking linkify the first time.';\n\n// Side-effect initialization state\nconst INIT = {\n scanner: null,\n parser: null,\n tokenQueue: [],\n pluginQueue: [],\n customSchemes: [],\n initialized: false\n};\n\n/**\n * @typedef {{\n * \tstart: State,\n * \ttokens: { groups: Collections } & typeof tk\n * }} ScannerInit\n */\n\n/**\n * @typedef {{\n * \tstart: State,\n * \ttokens: typeof multi\n * }} ParserInit\n */\n\n/**\n * @typedef {(arg: { scanner: ScannerInit }) => void} TokenPlugin\n */\n\n/**\n * @typedef {(arg: { scanner: ScannerInit, parser: ParserInit }) => void} Plugin\n */\n\n/**\n * De-register all plugins and reset the internal state-machine. Used for\n * testing; not required in practice.\n * @private\n */\nfunction reset() {\n State.groups = {};\n INIT.scanner = null;\n INIT.parser = null;\n INIT.tokenQueue = [];\n INIT.pluginQueue = [];\n INIT.customSchemes = [];\n INIT.initialized = false;\n return INIT;\n}\n\n/**\n * Register a token plugin to allow the scanner to recognize additional token\n * types before the parser state machine is constructed from the results.\n * @param {string} name of plugin to register\n * @param {TokenPlugin} plugin function that accepts the scanner state machine\n * and available scanner tokens and collections and extends the state machine to\n * recognize additional tokens or groups.\n */\nfunction registerTokenPlugin(name, plugin) {\n if (typeof plugin !== 'function') {\n throw new Error(`linkifyjs: Invalid token plugin ${plugin} (expects function)`);\n }\n for (let i = 0; i < INIT.tokenQueue.length; i++) {\n if (name === INIT.tokenQueue[i][0]) {\n warn(`linkifyjs: token plugin \"${name}\" already registered - will be overwritten`);\n INIT.tokenQueue[i] = [name, plugin];\n return;\n }\n }\n INIT.tokenQueue.push([name, plugin]);\n if (INIT.initialized) {\n warn(`linkifyjs: already initialized - will not register token plugin \"${name}\" ${warnAdvice}`);\n }\n}\n\n/**\n * Register a linkify plugin\n * @param {string} name of plugin to register\n * @param {Plugin} plugin function that accepts the parser state machine and\n * extends the parser to recognize additional link types\n */\nfunction registerPlugin(name, plugin) {\n if (typeof plugin !== 'function') {\n throw new Error(`linkifyjs: Invalid plugin ${plugin} (expects function)`);\n }\n for (let i = 0; i < INIT.pluginQueue.length; i++) {\n if (name === INIT.pluginQueue[i][0]) {\n warn(`linkifyjs: plugin \"${name}\" already registered - will be overwritten`);\n INIT.pluginQueue[i] = [name, plugin];\n return;\n }\n }\n INIT.pluginQueue.push([name, plugin]);\n if (INIT.initialized) {\n warn(`linkifyjs: already initialized - will not register plugin \"${name}\" ${warnAdvice}`);\n }\n}\n\n/**\n * Detect URLs with the following additional protocol. Anything with format\n * \"protocol://...\" will be considered a link. If `optionalSlashSlash` is set to\n * `true`, anything with format \"protocol:...\" will be considered a link.\n * @param {string} scheme\n * @param {boolean} [optionalSlashSlash]\n */\nfunction registerCustomProtocol(scheme, optionalSlashSlash = false) {\n if (INIT.initialized) {\n warn(`linkifyjs: already initialized - will not register custom scheme \"${scheme}\" ${warnAdvice}`);\n }\n if (!/^[0-9a-z]+(-[0-9a-z]+)*$/.test(scheme)) {\n throw new Error(`linkifyjs: incorrect scheme format.\n1. Must only contain digits, lowercase ASCII letters or \"-\"\n2. Cannot start or end with \"-\"\n3. \"-\" cannot repeat`);\n }\n INIT.customSchemes.push([scheme, optionalSlashSlash]);\n}\n\n/**\n * Initialize the linkify state machine. Called automatically the first time\n * linkify is called on a string, but may be called manually as well.\n */\nfunction init() {\n // Initialize scanner state machine and plugins\n INIT.scanner = init$2(INIT.customSchemes);\n for (let i = 0; i < INIT.tokenQueue.length; i++) {\n INIT.tokenQueue[i][1]({\n scanner: INIT.scanner\n });\n }\n\n // Initialize parser state machine and plugins\n INIT.parser = init$1(INIT.scanner.tokens);\n for (let i = 0; i < INIT.pluginQueue.length; i++) {\n INIT.pluginQueue[i][1]({\n scanner: INIT.scanner,\n parser: INIT.parser\n });\n }\n INIT.initialized = true;\n return INIT;\n}\n\n/**\n * Parse a string into tokens that represent linkable and non-linkable sub-components\n * @param {string} str\n * @return {MultiToken[]} tokens\n */\nfunction tokenize(str) {\n if (!INIT.initialized) {\n init();\n }\n return run(INIT.parser.start, str, run$1(INIT.scanner.start, str));\n}\ntokenize.scan = run$1; // for testing\n\n/**\n * Find a list of linkable items in the given string.\n * @param {string} str string to find links in\n * @param {string | Opts} [type] either formatting options or specific type of\n * links to find, e.g., 'url' or 'email'\n * @param {Opts} [opts] formatting options for final output. Cannot be specified\n * if opts already provided in `type` argument\n */\nfunction find(str, type = null, opts = null) {\n if (type && typeof type === 'object') {\n if (opts) {\n throw Error(`linkifyjs: Invalid link type ${type}; must be a string`);\n }\n opts = type;\n type = null;\n }\n const options = new Options(opts);\n const tokens = tokenize(str);\n const filtered = [];\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n if (token.isLink && (!type || token.t === type) && options.check(token)) {\n filtered.push(token.toFormattedObject(options));\n }\n }\n return filtered;\n}\n\n/**\n * Is the given string valid linkable text of some sort. Note that this does not\n * trim the text for you.\n *\n * Optionally pass in a second `type` param, which is the type of link to test\n * for.\n *\n * For example,\n *\n * linkify.test(str, 'email');\n *\n * Returns `true` if str is a valid email.\n * @param {string} str string to test for links\n * @param {string} [type] optional specific link type to look for\n * @returns boolean true/false\n */\nfunction test(str, type = null) {\n const tokens = tokenize(str);\n return tokens.length === 1 && tokens[0].isLink && (!type || tokens[0].t === type);\n}\n\nexport { MultiToken, Options, State, createTokenClass, find, init, multi, options, regexp, registerCustomProtocol, registerPlugin, registerTokenPlugin, reset, stringToArray, test, multi as text, tokenize };\n","import { Options, tokenize } from 'linkifyjs';\n\n/**\n\tConvert strings of text into linkable HTML text\n*/\nfunction escapeText(text) {\n return text.replace(/&/g, '&').replace(//g, '>');\n}\nfunction escapeAttr(href) {\n return href.replace(/\"/g, '"');\n}\nfunction attributesToString(attributes) {\n const result = [];\n for (const attr in attributes) {\n let val = attributes[attr] + '';\n result.push(`${attr}=\"${escapeAttr(val)}\"`);\n }\n return result.join(' ');\n}\nfunction defaultRender({\n tagName,\n attributes,\n content\n}) {\n return `<${tagName} ${attributesToString(attributes)}>${escapeText(content)}${tagName}>`;\n}\n\n/**\n * Convert a plan text string to an HTML string with links. Expects that the\n * given strings does not contain any HTML entities. Use the linkify-html\n * interface if you need to parse HTML entities.\n *\n * @param {string} str string to linkify\n * @param {import('linkifyjs').Opts} [opts] overridable options\n * @returns {string}\n */\nfunction linkifyStr(str, opts = {}) {\n opts = new Options(opts, defaultRender);\n const tokens = tokenize(str);\n const result = [];\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n if (token.t === 'nl' && opts.get('nl2br')) {\n result.push(' \\n');\n } else if (!token.isLink || !opts.check(token)) {\n result.push(escapeText(token.toString()));\n } else {\n result.push(opts.render(token));\n }\n }\n return result.join('');\n}\nif (!String.prototype.linkify) {\n Object.defineProperty(String.prototype, 'linkify', {\n writable: false,\n value: function linkify(options) {\n return linkifyStr(this, options);\n }\n });\n}\n\nexport { linkifyStr as default };\n","import '../assets/NcAppSidebar-B1bkEVQA.css';\nimport { Portal } from \"@linusborg/vue-simple-portal\";\nimport { vOnClickOutside } from \"@vueuse/components\";\nimport { createFocusTrap } from \"focus-trap\";\nimport Vue, { ref, provide } from \"vue\";\nimport { A as ArrowRight } from \"./ArrowRight-CY2b9hgN.mjs\";\nimport { C as Close } from \"./Close-BtLPUSdO.mjs\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nimport { i as isLegacy34 } from \"./legacy-DV3mGZdh.mjs\";\nimport { N as NcCheckboxRadioSwitch } from \"./NcCheckboxRadioSwitch-D4IV4zWy.mjs\";\nimport NcVNodes from \"../Components/NcVNodes.mjs\";\nimport { useIsSmallMobile } from \"../Composables/useIsMobile.mjs\";\nimport directive from \"../Directives/Focus.mjs\";\nimport { r as register, S as t14, a as t } from \"./_l10n-DVz9Qdzk.mjs\";\nimport { g as getTrapStack } from \"./focusTrap-HJQ4pqHV.mjs\";\nimport { G as GenRandomId } from \"./GenRandomId-F5ebeBB_.mjs\";\nimport { l as logger } from \"./logger-D3RVzcfQ.mjs\";\nimport { N as NcActions } from \"./NcActions-DbPerbGE.mjs\";\nimport { N as NcAppSidebarHeader } from \"./NcAppSidebarHeader-CBE4tNYb.mjs\";\nimport { N as NcButton } from \"./NcButton-CCWEL9Ci.mjs\";\nimport NcEmptyContent from \"../Components/NcEmptyContent.mjs\";\nimport NcLoadingIcon from \"../Components/NcLoadingIcon.mjs\";\nconst _sfc_main$4 = {\n name: \"DockRightIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nvar _sfc_render$4 = function render() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"span\", _vm._b({ staticClass: \"material-design-icon dock-right-icon\", attrs: { \"aria-hidden\": _vm.title ? null : \"true\", \"aria-label\": _vm.title, \"role\": \"img\" }, on: { \"click\": function($event) {\n return _vm.$emit(\"click\", $event);\n } } }, \"span\", _vm.$attrs, false), [_c(\"svg\", { staticClass: \"material-design-icon__svg\", attrs: { \"fill\": _vm.fillColor, \"width\": _vm.size, \"height\": _vm.size, \"viewBox\": \"0 0 24 24\" } }, [_c(\"path\", { attrs: { \"d\": \"M20 4H4A2 2 0 0 0 2 6V18A2 2 0 0 0 4 20H20A2 2 0 0 0 22 18V6A2 2 0 0 0 20 4M15 18H4V6H15Z\" } }, [_vm.title ? _c(\"title\", [_vm._v(_vm._s(_vm.title))]) : _vm._e()])])]);\n};\nvar _sfc_staticRenderFns$4 = [];\nvar __component__$4 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$4,\n _sfc_render$4,\n _sfc_staticRenderFns$4,\n false,\n null,\n null\n);\nconst IconDockRight = __component__$4.exports;\nconst _sfc_main$3 = {\n name: \"StarIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nvar _sfc_render$3 = function render2() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"span\", _vm._b({ staticClass: \"material-design-icon star-icon\", attrs: { \"aria-hidden\": _vm.title ? null : \"true\", \"aria-label\": _vm.title, \"role\": \"img\" }, on: { \"click\": function($event) {\n return _vm.$emit(\"click\", $event);\n } } }, \"span\", _vm.$attrs, false), [_c(\"svg\", { staticClass: \"material-design-icon__svg\", attrs: { \"fill\": _vm.fillColor, \"width\": _vm.size, \"height\": _vm.size, \"viewBox\": \"0 0 24 24\" } }, [_c(\"path\", { attrs: { \"d\": \"M12,17.27L18.18,21L16.54,13.97L22,9.24L14.81,8.62L12,2L9.19,8.62L2,9.24L7.45,13.97L5.82,21L12,17.27Z\" } }, [_vm.title ? _c(\"title\", [_vm._v(_vm._s(_vm.title))]) : _vm._e()])])]);\n};\nvar _sfc_staticRenderFns$3 = [];\nvar __component__$3 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$3,\n _sfc_render$3,\n _sfc_staticRenderFns$3,\n false,\n null,\n null\n);\nconst Star = __component__$3.exports;\nconst _sfc_main$2 = {\n name: \"StarOutlineIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nvar _sfc_render$2 = function render3() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"span\", _vm._b({ staticClass: \"material-design-icon star-outline-icon\", attrs: { \"aria-hidden\": _vm.title ? null : \"true\", \"aria-label\": _vm.title, \"role\": \"img\" }, on: { \"click\": function($event) {\n return _vm.$emit(\"click\", $event);\n } } }, \"span\", _vm.$attrs, false), [_c(\"svg\", { staticClass: \"material-design-icon__svg\", attrs: { \"fill\": _vm.fillColor, \"width\": _vm.size, \"height\": _vm.size, \"viewBox\": \"0 0 24 24\" } }, [_c(\"path\", { attrs: { \"d\": \"M12,15.39L8.24,17.66L9.23,13.38L5.91,10.5L10.29,10.13L12,6.09L13.71,10.13L18.09,10.5L14.77,13.38L15.76,17.66M22,9.24L14.81,8.63L12,2L9.19,8.63L2,9.24L7.45,13.97L5.82,21L12,17.27L18.18,21L16.54,13.97L22,9.24Z\" } }, [_vm.title ? _c(\"title\", [_vm._v(_vm._s(_vm.title))]) : _vm._e()])])]);\n};\nvar _sfc_staticRenderFns$2 = [];\nvar __component__$2 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$2,\n _sfc_render$2,\n _sfc_staticRenderFns$2,\n false,\n null,\n null\n);\nconst StarOutline = __component__$2.exports;\nconst _sfc_main$1 = {\n name: \"NcAppSidebarTabs\",\n components: {\n NcCheckboxRadioSwitch,\n NcVNodes\n },\n provide() {\n return {\n registerTab: this.registerTab,\n unregisterTab: this.unregisterTab,\n // Getter as an alternative to Vue 2.7 computed(() => this.activeTab)\n getActiveTab: () => this.activeTab,\n // Used to check whether the tab header is shown so the tabs can reference the tab header for `aria-labelledby` or not\n isTablistShown: () => this.hasMultipleTabs\n };\n },\n props: {\n /**\n * Id of the tab to activate\n */\n active: {\n type: String,\n default: \"\"\n },\n /**\n * Force the tab navigation to display even if there is only one tab\n */\n forceTabs: {\n type: Boolean,\n default: false\n }\n },\n emits: [\"update:active\"],\n data() {\n return {\n /**\n * Tab descriptions from the passed NcSidebarTab components' props to build the tab navbar from.\n */\n tabs: [],\n /**\n * Local active (open) tab's ID. It allows to use component without active.sync\n */\n activeTab: \"\",\n isLegacy34\n };\n },\n computed: {\n /**\n * Has multiple tabs. If only one tab - its content is shown without navigation\n *\n * @return {boolean}\n */\n hasMultipleTabs() {\n return this.tabs.length > 1;\n },\n showForSingleTab() {\n return this.forceTabs && this.tabs.length === 1;\n },\n currentTabIndex() {\n return this.tabs.findIndex((tab) => tab.id === this.activeTab);\n }\n },\n watch: {\n active(active) {\n if (active !== this.activeTab) {\n this.updateActive();\n }\n }\n },\n methods: {\n /**\n * Set the current active tab\n *\n * @param {string} id the id of the tab\n */\n setActive(id) {\n this.activeTab = id;\n this.$emit(\"update:active\", this.activeTab);\n },\n /**\n * Focus the previous tab\n * and emit to the parent component\n */\n focusPreviousTab() {\n if (this.currentTabIndex > 0) {\n this.setActive(this.tabs[this.currentTabIndex - 1].id);\n }\n this.focusActiveTab();\n },\n /**\n * Focus the next tab\n * and emit to the parent component\n */\n focusNextTab() {\n if (this.currentTabIndex < this.tabs.length - 1) {\n this.setActive(this.tabs[this.currentTabIndex + 1].id);\n }\n this.focusActiveTab();\n },\n /**\n * Focus the first tab\n * and emit to the parent component\n */\n focusFirstTab() {\n this.setActive(this.tabs[0].id);\n this.focusActiveTab();\n },\n /**\n * Focus the last tab\n * and emit to the parent component\n */\n focusLastTab() {\n this.setActive(this.tabs[this.tabs.length - 1].id);\n this.focusActiveTab();\n },\n /**\n * Focus the current active tab\n */\n focusActiveTab() {\n this.$el.querySelector(`#tab-button-${this.activeTab}`).focus();\n },\n /**\n * Focus the content on tab\n * see aria accessibility guidelines\n */\n focusActiveTabContent() {\n this.$el.querySelector(\"#tab-\" + this.activeTab).focus();\n },\n /**\n * Update the current active tab\n */\n updateActive() {\n this.activeTab = this.active && this.tabs.some((tab) => tab.id === this.active) ? this.active : this.tabs.length > 0 ? this.tabs[0].id : \"\";\n },\n /**\n * Register child tab in the tabs\n *\n * @param {object} tab child tab passed to slot\n */\n registerTab(tab) {\n this.tabs.push(tab);\n this.tabs.sort((a, b) => {\n if (a.order === b.order) {\n return OC.Util.naturalSortCompare(a.name, b.name);\n }\n return a.order - b.order;\n });\n this.updateActive();\n },\n /**\n * Unregister child tab from the tabs\n *\n * @param {string} id tab's id\n */\n unregisterTab(id) {\n const tabIndex = this.tabs.findIndex((tab) => tab.id === id);\n if (tabIndex !== -1) {\n this.tabs.splice(tabIndex, 1);\n }\n if (this.activeTab === id) {\n this.updateActive();\n }\n }\n }\n};\nvar _sfc_render$1 = function render4() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"div\", { staticClass: \"app-sidebar-tabs\" }, [_vm.hasMultipleTabs || _vm.showForSingleTab ? _c(\"div\", { staticClass: \"app-sidebar-tabs__nav\", class: { \"app-sidebar-tabs__nav--legacy\": _vm.isLegacy34 }, attrs: { \"role\": \"tablist\" }, on: { \"keydown\": [function($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"left\", 37, $event.key, [\"Left\", \"ArrowLeft\"])) return null;\n if (\"button\" in $event && $event.button !== 0) return null;\n if ($event.ctrlKey || $event.shiftKey || $event.altKey || $event.metaKey) return null;\n $event.preventDefault();\n $event.stopPropagation();\n return _vm.focusPreviousTab.apply(null, arguments);\n }, function($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"right\", 39, $event.key, [\"Right\", \"ArrowRight\"])) return null;\n if (\"button\" in $event && $event.button !== 2) return null;\n if ($event.ctrlKey || $event.shiftKey || $event.altKey || $event.metaKey) return null;\n $event.preventDefault();\n $event.stopPropagation();\n return _vm.focusNextTab.apply(null, arguments);\n }, function($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"tab\", 9, $event.key, \"Tab\")) return null;\n if ($event.ctrlKey || $event.shiftKey || $event.altKey || $event.metaKey) return null;\n $event.preventDefault();\n $event.stopPropagation();\n return _vm.focusActiveTabContent.apply(null, arguments);\n }, function($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"home\", void 0, $event.key, void 0)) return null;\n if ($event.ctrlKey || $event.shiftKey || $event.altKey || $event.metaKey) return null;\n $event.preventDefault();\n $event.stopPropagation();\n return _vm.focusFirstTab.apply(null, arguments);\n }, function($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"end\", void 0, $event.key, void 0)) return null;\n if ($event.ctrlKey || $event.shiftKey || $event.altKey || $event.metaKey) return null;\n $event.preventDefault();\n $event.stopPropagation();\n return _vm.focusLastTab.apply(null, arguments);\n }, function($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"page-up\", void 0, $event.key, void 0)) return null;\n if ($event.ctrlKey || $event.shiftKey || $event.altKey || $event.metaKey) return null;\n $event.preventDefault();\n $event.stopPropagation();\n return _vm.focusFirstTab.apply(null, arguments);\n }, function($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"page-down\", void 0, $event.key, void 0)) return null;\n if ($event.ctrlKey || $event.shiftKey || $event.altKey || $event.metaKey) return null;\n $event.preventDefault();\n $event.stopPropagation();\n return _vm.focusLastTab.apply(null, arguments);\n }] } }, _vm._l(_vm.tabs, function(tab) {\n return _c(\"NcCheckboxRadioSwitch\", { key: tab.id, staticClass: \"app-sidebar-tabs__tab\", class: { active: tab.id === _vm.activeTab }, attrs: { \"aria-controls\": `tab-${tab.id}`, \"aria-selected\": String(_vm.activeTab === tab.id), \"button-variant\": true, \"checked\": _vm.activeTab === tab.id, \"wrapper-id\": `tab-button-${tab.id}`, \"tabindex\": _vm.activeTab === tab.id ? 0 : -1, \"button-variant-grouped\": \"horizontal\", \"role\": \"tab\", \"type\": \"button\" }, on: { \"update:checked\": function($event) {\n return _vm.setActive(tab.id);\n } }, scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_c(\"NcVNodes\", { attrs: { \"vnodes\": tab.renderIcon() } }, [_c(\"span\", { staticClass: \"app-sidebar-tabs__tab-icon\", class: tab.icon })])];\n }, proxy: true }], null, true) }, [_c(\"span\", { staticClass: \"app-sidebar-tabs__tab-caption\" }, [_vm._v(\" \" + _vm._s(tab.name) + \" \")])]);\n }), 1) : _vm._e(), _c(\"div\", { staticClass: \"app-sidebar-tabs__content\", class: { \"app-sidebar-tabs__content--multiple\": _vm.hasMultipleTabs } }, [_vm._t(\"default\")], 2)]);\n};\nvar _sfc_staticRenderFns$1 = [];\nvar __component__$1 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$1,\n _sfc_render$1,\n _sfc_staticRenderFns$1,\n false,\n null,\n \"9fb8a5f7\"\n);\nconst NcAppSidebarTabs = __component__$1.exports;\nregister(t14);\nconst _sfc_main = {\n name: \"NcAppSidebar\",\n components: {\n Teleport: Portal,\n NcActions,\n NcAppSidebarHeader,\n NcAppSidebarTabs,\n ArrowRight,\n IconDockRight,\n NcButton,\n NcLoadingIcon,\n NcEmptyContent,\n Close,\n Star,\n StarOutline\n },\n directives: {\n focus: directive,\n ClickOutside: vOnClickOutside\n },\n inject: {\n ncContentSelector: {\n from: \"NcContent:selector\",\n default: void 0\n }\n },\n props: {\n /**\n * The active tab\n */\n active: {\n type: String,\n default: \"\"\n },\n /**\n * Note: in @nextcloud/vue v9 this prop is required\n */\n name: {\n type: String,\n default: \"\"\n },\n /**\n * Allow to edit the sidebar name.\n */\n nameEditable: {\n type: Boolean,\n default: false\n },\n /**\n * Placeholder in the edit field if the name is editable.\n */\n namePlaceholder: {\n type: String,\n default: \"\"\n },\n /**\n * Secondary name of the sidebar (subline)\n */\n subname: {\n type: String,\n default: \"\"\n },\n /**\n * Title to display for the subname.\n */\n subtitle: {\n type: String,\n default: \"\"\n },\n /**\n * Url to the top header background image\n * Applied with css\n */\n background: {\n type: String,\n default: \"\"\n },\n /**\n * Enable the favourite icon if not null\n * See fired events\n */\n starred: {\n type: Boolean,\n // eslint-disable-next-line vue/no-boolean-default\n default: null\n },\n /**\n * Show loading spinner instead of the star icon\n */\n starLoading: {\n type: Boolean,\n default: false\n },\n /**\n * Show loading spinner instead of tabs\n */\n loading: {\n type: Boolean,\n default: false\n },\n /**\n * Display the sidebar in compact mode\n */\n compact: {\n type: Boolean,\n default: false\n },\n /**\n * Only display close button and default slot content.\n * Don't display other header content and primary and secondary actions.\n * Useful when showing the EmptyContent component as content.\n */\n empty: {\n type: Boolean,\n default: false\n },\n /**\n * Force the actions to display in a three dot menu\n */\n forceMenu: {\n type: Boolean,\n default: false\n },\n /**\n * Force the tab navigation to display even if there is only one tab\n */\n forceTabs: {\n type: Boolean,\n default: false\n },\n /**\n * Linkify the name\n */\n linkifyName: {\n type: Boolean,\n default: false\n },\n /**\n * Title to display for the name.\n * Can be set to the same text in case it's too long.\n */\n title: {\n type: String,\n default: \"\"\n },\n /**\n * Allow to conditionally show the sidebar\n * You can also use `v-if` on the sidebar, but using the open prop allow to keep\n * the sidebar inside the DOM for performance if it is opened and closed multiple times.\n *\n * When using the `open` property to close the sidebar a built-in toggle button will be shown to reopen it,\n * similar to the app navigation. You can remove this button with the `no-toggle` prop.\n */\n open: {\n type: Boolean,\n // eslint-disable-next-line vue/no-boolean-default\n default: true\n },\n /**\n * Custom classes to assign to the sidebar toggle button.\n * If needed this can be used to assign styles to the button using `:deep()` selector.\n */\n toggleClasses: {\n type: [String, Array, Object],\n default: \"\"\n },\n /**\n * Custom attrs to assign to the sidebar toggle button.\n */\n toggleAttrs: {\n type: Object,\n default: void 0\n },\n /**\n * Do not add the built-in toggle button with `open` prop.\n */\n noToggle: {\n type: Boolean,\n default: false\n }\n },\n emits: [\n \"close\",\n \"closing\",\n \"closed\",\n \"opening\",\n \"opened\",\n \"figure-click\",\n \"update:active\",\n \"update:name\",\n \"update:nameEditable\",\n \"update:open\",\n \"update:starred\",\n \"submit-name\",\n \"dismiss-editing\"\n ],\n setup() {\n const headerRef = ref(null);\n provide(\"NcAppSidebar:header:ref\", headerRef);\n return {\n uid: GenRandomId(),\n isMobile: useIsSmallMobile(),\n headerRef\n };\n },\n data() {\n return {\n changeNameTranslated: t(\"Change name\"),\n closeTranslated: t(\"Close sidebar\"),\n favoriteTranslated: t(\"Favorite\"),\n isStarred: this.starred,\n focusTrap: null,\n elementToReturnFocus: null\n };\n },\n computed: {\n canStar() {\n return this.isStarred !== null;\n },\n hasFigure() {\n return this.$slots.header || this.background;\n },\n hasFigureClickListener() {\n return this.$listeners[\"figure-click\"];\n }\n },\n watch: {\n starred() {\n this.isStarred = this.starred;\n },\n isMobile() {\n this.toggleFocusTrap();\n },\n open() {\n this.checkToggleButtonContainerAvailability();\n }\n },\n created() {\n this.preserveElementToReturnFocus();\n this.checkToggleButtonContainerAvailability();\n },\n beforeDestroy() {\n this.$emit(\"closed\");\n this.focusTrap?.deactivate();\n },\n methods: {\n t,\n preserveElementToReturnFocus() {\n if (document.activeElement && document.activeElement !== document.body) {\n this.elementToReturnFocus = document.activeElement;\n if (this.elementToReturnFocus.getAttribute(\"role\") === \"menuitem\") {\n const menu = this.elementToReturnFocus.closest('[role=\"menu\"]');\n if (menu) {\n const menuTrigger = document.querySelector(`[aria-controls=\"${menu.id}\"]`);\n this.elementToReturnFocus = menuTrigger;\n }\n }\n }\n },\n initFocusTrap() {\n if (this.focusTrap) {\n return;\n }\n this.focusTrap = createFocusTrap([\n // The sidebar itself\n this.$refs.sidebar,\n // Nextcloud Server header navigarion\n document.querySelector(\"#header\")\n ], {\n allowOutsideClick: true,\n fallbackFocus: this.$refs.closeButton.$el,\n trapStack: getTrapStack(),\n escapeDeactivates: false\n });\n },\n /**\n * Activate focus trap if it is currently needed, otherwise deactivate\n */\n toggleFocusTrap() {\n if (this.open && this.isMobile) {\n this.initFocusTrap();\n this.focusTrap.activate();\n } else {\n this.focusTrap?.deactivate();\n }\n },\n /**\n * Close the sidebar on pressing the escape key on mobile\n *\n * @param {KeyboardEvent} event key down event\n */\n onKeydownEsc(event) {\n if (this.isMobile) {\n event.stopPropagation();\n this.closeSidebar();\n }\n },\n onBeforeEnter(element) {\n this.$emit(\"opening\", element);\n },\n onAfterEnter(element) {\n if (this.elementToReturnFocus) {\n this.focus();\n }\n this.toggleFocusTrap();\n this.$emit(\"opened\", element);\n },\n onBeforeLeave(element) {\n this.$emit(\"closing\", element);\n },\n onAfterLeave(element) {\n this.$emit(\"closed\", element);\n this.toggleFocusTrap();\n this.elementToReturnFocus?.focus({ focusVisible: true });\n this.elementToReturnFocus = null;\n },\n /**\n * Used to tell parent component the user asked to close the sidebar\n *\n * @param {Event} e close icon click event\n */\n closeSidebar(e) {\n this.$emit(\"close\", e);\n this.$emit(\"update:open\", false);\n },\n /**\n * Emit figure click event to parent component\n *\n * @param {Event} e click event\n */\n onFigureClick(e) {\n this.$emit(\"figure-click\", e);\n },\n /**\n * Toggle the favourite state\n * and emit to the parent component\n */\n toggleStarred() {\n this.isStarred = !this.isStarred;\n this.$emit(\"update:starred\", this.isStarred);\n },\n editName() {\n this.$emit(\"update:nameEditable\", true);\n if (this.nameEditable) {\n this.$nextTick(() => this.$refs.nameInput.focus());\n }\n },\n /**\n * Focus the sidebar\n *\n * @public\n */\n focus() {\n if (!this.open && !this.noToggle) {\n this.$refs.toggle.$el.focus();\n return;\n }\n try {\n this.headerRef.focus();\n } catch {\n Vue.util.warn(\"NcAppSidebar should have focusable header for accessibility reasons. Use NcAppSidebarHeader component.\");\n }\n },\n /**\n * Focus the active tab\n *\n * @public\n */\n focusActiveTabContent() {\n this.preserveElementToReturnFocus();\n this.$refs.tabs.focusActiveTabContent();\n },\n /**\n * Check if the toggle button container is available\n */\n checkToggleButtonContainerAvailability() {\n if (this.open === false && !this.noToggle && !this.ncContentSelector) {\n logger.warn(\"[NcAppSidebar] It looks like you want to use NcAppSidebar with the built-in toggle button. This feature is only available when NcAppSidebar is used in NcContent.\");\n }\n },\n /**\n * Emit name change event to parent component\n *\n * @param {Event} event input event\n */\n onNameInput(event) {\n this.$emit(\"update:name\", event.target.value);\n },\n /**\n * Emit when the name form edit confirm button is pressed in order\n * to change the name.\n *\n * @param {Event} event submit event\n */\n onSubmitName(event) {\n this.$emit(\"update:nameEditable\", false);\n this.$emit(\"submit-name\", event);\n },\n onDismissEditing() {\n this.$emit(\"update:nameEditable\", false);\n this.$emit(\"dismiss-editing\");\n },\n onUpdateActive(activeTab) {\n this.$emit(\"update:active\", activeTab);\n }\n }\n};\nvar _sfc_render = function render5() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"transition\", { attrs: { \"appear\": \"\", \"name\": \"slide-right\" }, on: { \"before-enter\": _vm.onBeforeEnter, \"after-enter\": _vm.onAfterEnter, \"before-leave\": _vm.onBeforeLeave, \"after-leave\": _vm.onAfterLeave } }, [_c(\"aside\", { directives: [{ name: \"show\", rawName: \"v-show\", value: _vm.open, expression: \"open\" }], ref: \"sidebar\", staticClass: \"app-sidebar\", attrs: { \"id\": \"app-sidebar-vue\", \"aria-labelledby\": `app-sidebar-vue-${_vm.uid}__header` }, on: { \"keydown\": function($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"esc\", 27, $event.key, [\"Esc\", \"Escape\"])) return null;\n return _vm.onKeydownEsc.apply(null, arguments);\n } } }, [_vm.ncContentSelector && !_vm.open && !_vm.noToggle ? _c(\"Teleport\", { attrs: { \"selector\": _vm.ncContentSelector } }, [_c(\"NcButton\", _vm._b({ ref: \"toggle\", staticClass: \"app-sidebar__toggle\", class: _vm.toggleClasses, attrs: { \"aria-label\": _vm.t(\"Open sidebar\"), \"variant\": \"tertiary\" }, on: { \"click\": function($event) {\n return _vm.$emit(\"update:open\", true);\n } }, scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_vm._t(\"toggle-icon\", function() {\n return [_c(\"IconDockRight\", { attrs: { \"size\": 20 } })];\n })];\n }, proxy: true }], null, true) }, \"NcButton\", _vm.toggleAttrs, false))], 1) : _vm._e(), _c(\"header\", { staticClass: \"app-sidebar-header\", class: {\n \"app-sidebar-header--with-figure\": _vm.hasFigure,\n \"app-sidebar-header--compact\": _vm.compact\n } }, [!_vm.empty ? _vm._t(\"info\", function() {\n return [_c(\"div\", { staticClass: \"app-sidebar-header__info\" }, [_vm.hasFigure ? _c(\"div\", { staticClass: \"app-sidebar-header__figure\", class: {\n \"app-sidebar-header__figure--with-action\": _vm.hasFigureClickListener\n }, style: {\n backgroundImage: `url(${_vm.background})`\n }, attrs: { \"tabindex\": \"0\" }, on: { \"click\": _vm.onFigureClick, \"keydown\": function($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")) return null;\n return _vm.onFigureClick.apply(null, arguments);\n } } }, [_vm._t(\"header\")], 2) : _vm._e(), _c(\"div\", { staticClass: \"app-sidebar-header__desc\", class: {\n \"app-sidebar-header__desc--with-tertiary-action\": _vm.canStar || _vm.$slots[\"tertiary-actions\"],\n \"app-sidebar-header__desc--editable\": _vm.nameEditable && !_vm.subname,\n \"app-sidebar-header__desc--with-subname--editable\": _vm.nameEditable && _vm.subname,\n \"app-sidebar-header__desc--without-actions\": !_vm.$slots[\"secondary-actions\"]\n } }, [_vm.canStar || _vm.$slots[\"tertiary-actions\"] ? _c(\"div\", { staticClass: \"app-sidebar-header__tertiary-actions\" }, [_vm._t(\"tertiary-actions\", function() {\n return [_vm.canStar ? _c(\"NcButton\", { staticClass: \"app-sidebar-header__star\", attrs: { \"aria-label\": _vm.favoriteTranslated, \"pressed\": _vm.isStarred, \"variant\": \"secondary\" }, on: { \"click\": function($event) {\n $event.preventDefault();\n return _vm.toggleStarred.apply(null, arguments);\n } }, scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_vm.starLoading ? _c(\"NcLoadingIcon\") : _vm.isStarred ? _c(\"Star\", { attrs: { \"size\": 20 } }) : _c(\"StarOutline\", { attrs: { \"size\": 20 } })];\n }, proxy: true }], null, false, 2575459756) }) : _vm._e()];\n })], 2) : _vm._e(), _c(\"div\", { staticClass: \"app-sidebar-header__name-container\" }, [_c(\"div\", { staticClass: \"app-sidebar-header__mainname-container\" }, [_c(\"NcAppSidebarHeader\", { directives: [{ name: \"show\", rawName: \"v-show\", value: !_vm.nameEditable, expression: \"!nameEditable\" }], staticClass: \"app-sidebar-header__mainname\", attrs: { \"name\": _vm.name, \"linkify\": _vm.linkifyName, \"title\": _vm.title, \"tabindex\": _vm.nameEditable ? 0 : -1 }, nativeOn: { \"click\": function($event) {\n if ($event.target !== $event.currentTarget) return null;\n return _vm.editName.apply(null, arguments);\n } } }), _vm.nameEditable ? [_c(\"form\", { directives: [{ name: \"click-outside\", rawName: \"v-click-outside\", value: (() => _vm.onSubmitName()), expression: \"() => onSubmitName()\" }], staticClass: \"app-sidebar-header__mainname-form\", on: { \"submit\": function($event) {\n $event.preventDefault();\n return _vm.onSubmitName.apply(null, arguments);\n } } }, [_c(\"input\", { directives: [{ name: \"focus\", rawName: \"v-focus\" }], ref: \"nameInput\", staticClass: \"app-sidebar-header__mainname-input\", attrs: { \"type\": \"text\", \"placeholder\": _vm.namePlaceholder }, domProps: { \"value\": _vm.name }, on: { \"keydown\": function($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"esc\", 27, $event.key, [\"Esc\", \"Escape\"])) return null;\n $event.stopPropagation();\n return _vm.onDismissEditing.apply(null, arguments);\n }, \"input\": _vm.onNameInput } }), _c(\"NcButton\", { attrs: { \"aria-label\": _vm.changeNameTranslated, \"type\": \"submit\", \"variant\": \"tertiary-no-background\" }, scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_c(\"ArrowRight\", { attrs: { \"size\": 20 } })];\n }, proxy: true }], null, false, 1252225425) })], 1)] : _vm._e(), _vm.$slots[\"secondary-actions\"] ? _c(\"NcActions\", { staticClass: \"app-sidebar-header__menu\", attrs: { \"force-menu\": _vm.forceMenu } }, [_vm._t(\"secondary-actions\")], 2) : _vm._e()], 2), _vm.subname.trim() !== \"\" || _vm.$slots[\"subname\"] ? _c(\"p\", { staticClass: \"app-sidebar-header__subname\", attrs: { \"title\": _vm.subtitle || void 0 } }, [_vm._t(\"subname\", function() {\n return [_vm._v(\" \" + _vm._s(_vm.subname) + \" \")];\n })], 2) : _vm._e()])])])];\n }) : _c(\"NcAppSidebarHeader\", { staticClass: \"app-sidebar-header__mainname--hidden\", attrs: { \"name\": _vm.name, \"tabindex\": \"-1\" } }), _c(\"NcButton\", { ref: \"closeButton\", staticClass: \"app-sidebar__close\", attrs: { \"aria-label\": _vm.closeTranslated, \"title\": _vm.closeTranslated, \"variant\": \"tertiary\" }, on: { \"click\": function($event) {\n $event.preventDefault();\n return _vm.closeSidebar.apply(null, arguments);\n } }, scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_c(\"Close\", { attrs: { \"size\": 20 } })];\n }, proxy: true }]) }), _vm.$slots[\"description\"] && !_vm.empty ? _c(\"div\", { staticClass: \"app-sidebar-header__description\" }, [_vm._t(\"description\")], 2) : _vm._e()], 2), _c(\"NcAppSidebarTabs\", { directives: [{ name: \"show\", rawName: \"v-show\", value: !_vm.loading, expression: \"!loading\" }], ref: \"tabs\", attrs: { \"active\": _vm.active, \"force-tabs\": _vm.forceTabs }, on: { \"update:active\": _vm.onUpdateActive } }, [_vm._t(\"default\")], 2), _vm.loading ? _c(\"NcEmptyContent\", { scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_c(\"NcLoadingIcon\", { attrs: { \"size\": 64 } })];\n }, proxy: true }], null, false, 826850984) }) : _vm._e()], 1)]);\n};\nvar _sfc_staticRenderFns = [];\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n null,\n \"898c8c80\"\n);\nconst NcAppSidebar = __component__.exports;\nexport {\n NcAppSidebar as N\n};\n//# sourceMappingURL=NcAppSidebar-B7GuNZ4C.mjs.map\n","export class TimeoutError extends Error {\n\tconstructor(message) {\n\t\tsuper(message);\n\t\tthis.name = 'TimeoutError';\n\t}\n}\n\n/**\nAn error to be thrown when the request is aborted by AbortController.\nDOMException is thrown instead of this Error when DOMException is available.\n*/\nexport class AbortError extends Error {\n\tconstructor(message) {\n\t\tsuper();\n\t\tthis.name = 'AbortError';\n\t\tthis.message = message;\n\t}\n}\n\n/**\nTODO: Remove AbortError and just throw DOMException when targeting Node 18.\n*/\nconst getDOMException = errorMessage => globalThis.DOMException === undefined\n\t? new AbortError(errorMessage)\n\t: new DOMException(errorMessage);\n\n/**\nTODO: Remove below function and just 'reject(signal.reason)' when targeting Node 18.\n*/\nconst getAbortedReason = signal => {\n\tconst reason = signal.reason === undefined\n\t\t? getDOMException('This operation was aborted.')\n\t\t: signal.reason;\n\n\treturn reason instanceof Error ? reason : getDOMException(reason);\n};\n\nexport default function pTimeout(promise, options) {\n\tconst {\n\t\tmilliseconds,\n\t\tfallback,\n\t\tmessage,\n\t\tcustomTimers = {setTimeout, clearTimeout},\n\t} = options;\n\n\tlet timer;\n\tlet abortHandler;\n\n\tconst wrappedPromise = new Promise((resolve, reject) => {\n\t\tif (typeof milliseconds !== 'number' || Math.sign(milliseconds) !== 1) {\n\t\t\tthrow new TypeError(`Expected \\`milliseconds\\` to be a positive number, got \\`${milliseconds}\\``);\n\t\t}\n\n\t\tif (options.signal) {\n\t\t\tconst {signal} = options;\n\t\t\tif (signal.aborted) {\n\t\t\t\treject(getAbortedReason(signal));\n\t\t\t}\n\n\t\t\tabortHandler = () => {\n\t\t\t\treject(getAbortedReason(signal));\n\t\t\t};\n\n\t\t\tsignal.addEventListener('abort', abortHandler, {once: true});\n\t\t}\n\n\t\tif (milliseconds === Number.POSITIVE_INFINITY) {\n\t\t\tpromise.then(resolve, reject);\n\t\t\treturn;\n\t\t}\n\n\t\t// We create the error outside of `setTimeout` to preserve the stack trace.\n\t\tconst timeoutError = new TimeoutError();\n\n\t\ttimer = customTimers.setTimeout.call(undefined, () => {\n\t\t\tif (fallback) {\n\t\t\t\ttry {\n\t\t\t\t\tresolve(fallback());\n\t\t\t\t} catch (error) {\n\t\t\t\t\treject(error);\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (typeof promise.cancel === 'function') {\n\t\t\t\tpromise.cancel();\n\t\t\t}\n\n\t\t\tif (message === false) {\n\t\t\t\tresolve();\n\t\t\t} else if (message instanceof Error) {\n\t\t\t\treject(message);\n\t\t\t} else {\n\t\t\t\ttimeoutError.message = message ?? `Promise timed out after ${milliseconds} milliseconds`;\n\t\t\t\treject(timeoutError);\n\t\t\t}\n\t\t}, milliseconds);\n\n\t\t(async () => {\n\t\t\ttry {\n\t\t\t\tresolve(await promise);\n\t\t\t} catch (error) {\n\t\t\t\treject(error);\n\t\t\t}\n\t\t})();\n\t});\n\n\tconst cancelablePromise = wrappedPromise.finally(() => {\n\t\tcancelablePromise.clear();\n\t\tif (abortHandler && options.signal) {\n\t\t\toptions.signal.removeEventListener('abort', abortHandler);\n\t\t}\n\t});\n\n\tcancelablePromise.clear = () => {\n\t\tcustomTimers.clearTimeout.call(undefined, timer);\n\t\ttimer = undefined;\n\t};\n\n\treturn cancelablePromise;\n}\n","// Port of lower_bound from https://en.cppreference.com/w/cpp/algorithm/lower_bound\n// Used to compute insertion index to keep queue sorted after insertion\nexport default function lowerBound(array, value, comparator) {\n let first = 0;\n let count = array.length;\n while (count > 0) {\n const step = Math.trunc(count / 2);\n let it = first + step;\n if (comparator(array[it], value) <= 0) {\n first = ++it;\n count -= step + 1;\n }\n else {\n count = step;\n }\n }\n return first;\n}\n","import lowerBound from './lower-bound.js';\nexport default class PriorityQueue {\n #queue = [];\n enqueue(run, options) {\n options = {\n priority: 0,\n ...options,\n };\n const element = {\n priority: options.priority,\n id: options.id,\n run,\n };\n if (this.size === 0 || this.#queue[this.size - 1].priority >= options.priority) {\n this.#queue.push(element);\n return;\n }\n const index = lowerBound(this.#queue, element, (a, b) => b.priority - a.priority);\n this.#queue.splice(index, 0, element);\n }\n setPriority(id, priority) {\n const index = this.#queue.findIndex((element) => element.id === id);\n if (index === -1) {\n throw new ReferenceError(`No promise function with the id \"${id}\" exists in the queue.`);\n }\n const [item] = this.#queue.splice(index, 1);\n this.enqueue(item.run, { priority, id });\n }\n dequeue() {\n const item = this.#queue.shift();\n return item?.run;\n }\n filter(options) {\n return this.#queue.filter((element) => element.priority === options.priority).map((element) => element.run);\n }\n get size() {\n return this.#queue.length;\n }\n}\n","import { EventEmitter } from 'eventemitter3';\nimport pTimeout, { TimeoutError } from 'p-timeout';\nimport PriorityQueue from './priority-queue.js';\n/**\nPromise queue with concurrency control.\n*/\nexport default class PQueue extends EventEmitter {\n #carryoverConcurrencyCount;\n #isIntervalIgnored;\n #intervalCount = 0;\n #intervalCap;\n #interval;\n #intervalEnd = 0;\n #intervalId;\n #timeoutId;\n #queue;\n #queueClass;\n #pending = 0;\n // The `!` is needed because of https://github.com/microsoft/TypeScript/issues/32194\n #concurrency;\n #isPaused;\n #throwOnTimeout;\n // Use to assign a unique identifier to a promise function, if not explicitly specified\n #idAssigner = 1n;\n /**\n Per-operation timeout in milliseconds. Operations fulfill once `timeout` elapses if they haven't already.\n\n Applies to each future operation.\n */\n timeout;\n // TODO: The `throwOnTimeout` option should affect the return types of `add()` and `addAll()`\n constructor(options) {\n super();\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n options = {\n carryoverConcurrencyCount: false,\n intervalCap: Number.POSITIVE_INFINITY,\n interval: 0,\n concurrency: Number.POSITIVE_INFINITY,\n autoStart: true,\n queueClass: PriorityQueue,\n ...options,\n };\n if (!(typeof options.intervalCap === 'number' && options.intervalCap >= 1)) {\n throw new TypeError(`Expected \\`intervalCap\\` to be a number from 1 and up, got \\`${options.intervalCap?.toString() ?? ''}\\` (${typeof options.intervalCap})`);\n }\n if (options.interval === undefined || !(Number.isFinite(options.interval) && options.interval >= 0)) {\n throw new TypeError(`Expected \\`interval\\` to be a finite number >= 0, got \\`${options.interval?.toString() ?? ''}\\` (${typeof options.interval})`);\n }\n this.#carryoverConcurrencyCount = options.carryoverConcurrencyCount;\n this.#isIntervalIgnored = options.intervalCap === Number.POSITIVE_INFINITY || options.interval === 0;\n this.#intervalCap = options.intervalCap;\n this.#interval = options.interval;\n this.#queue = new options.queueClass();\n this.#queueClass = options.queueClass;\n this.concurrency = options.concurrency;\n this.timeout = options.timeout;\n this.#throwOnTimeout = options.throwOnTimeout === true;\n this.#isPaused = options.autoStart === false;\n }\n get #doesIntervalAllowAnother() {\n return this.#isIntervalIgnored || this.#intervalCount < this.#intervalCap;\n }\n get #doesConcurrentAllowAnother() {\n return this.#pending < this.#concurrency;\n }\n #next() {\n this.#pending--;\n this.#tryToStartAnother();\n this.emit('next');\n }\n #onResumeInterval() {\n this.#onInterval();\n this.#initializeIntervalIfNeeded();\n this.#timeoutId = undefined;\n }\n get #isIntervalPaused() {\n const now = Date.now();\n if (this.#intervalId === undefined) {\n const delay = this.#intervalEnd - now;\n if (delay < 0) {\n // Act as the interval was done\n // We don't need to resume it here because it will be resumed on line 160\n this.#intervalCount = (this.#carryoverConcurrencyCount) ? this.#pending : 0;\n }\n else {\n // Act as the interval is pending\n if (this.#timeoutId === undefined) {\n this.#timeoutId = setTimeout(() => {\n this.#onResumeInterval();\n }, delay);\n }\n return true;\n }\n }\n return false;\n }\n #tryToStartAnother() {\n if (this.#queue.size === 0) {\n // We can clear the interval (\"pause\")\n // Because we can redo it later (\"resume\")\n if (this.#intervalId) {\n clearInterval(this.#intervalId);\n }\n this.#intervalId = undefined;\n this.emit('empty');\n if (this.#pending === 0) {\n this.emit('idle');\n }\n return false;\n }\n if (!this.#isPaused) {\n const canInitializeInterval = !this.#isIntervalPaused;\n if (this.#doesIntervalAllowAnother && this.#doesConcurrentAllowAnother) {\n const job = this.#queue.dequeue();\n if (!job) {\n return false;\n }\n this.emit('active');\n job();\n if (canInitializeInterval) {\n this.#initializeIntervalIfNeeded();\n }\n return true;\n }\n }\n return false;\n }\n #initializeIntervalIfNeeded() {\n if (this.#isIntervalIgnored || this.#intervalId !== undefined) {\n return;\n }\n this.#intervalId = setInterval(() => {\n this.#onInterval();\n }, this.#interval);\n this.#intervalEnd = Date.now() + this.#interval;\n }\n #onInterval() {\n if (this.#intervalCount === 0 && this.#pending === 0 && this.#intervalId) {\n clearInterval(this.#intervalId);\n this.#intervalId = undefined;\n }\n this.#intervalCount = this.#carryoverConcurrencyCount ? this.#pending : 0;\n this.#processQueue();\n }\n /**\n Executes all queued functions until it reaches the limit.\n */\n #processQueue() {\n // eslint-disable-next-line no-empty\n while (this.#tryToStartAnother()) { }\n }\n get concurrency() {\n return this.#concurrency;\n }\n set concurrency(newConcurrency) {\n if (!(typeof newConcurrency === 'number' && newConcurrency >= 1)) {\n throw new TypeError(`Expected \\`concurrency\\` to be a number from 1 and up, got \\`${newConcurrency}\\` (${typeof newConcurrency})`);\n }\n this.#concurrency = newConcurrency;\n this.#processQueue();\n }\n async #throwOnAbort(signal) {\n return new Promise((_resolve, reject) => {\n signal.addEventListener('abort', () => {\n reject(signal.reason);\n }, { once: true });\n });\n }\n /**\n Updates the priority of a promise function by its id, affecting its execution order. Requires a defined concurrency limit to take effect.\n\n For example, this can be used to prioritize a promise function to run earlier.\n\n ```js\n import PQueue from 'p-queue';\n\n const queue = new PQueue({concurrency: 1});\n\n queue.add(async () => '🦄', {priority: 1});\n queue.add(async () => '🦀', {priority: 0, id: '🦀'});\n queue.add(async () => '🦄', {priority: 1});\n queue.add(async () => '🦄', {priority: 1});\n\n queue.setPriority('🦀', 2);\n ```\n\n In this case, the promise function with `id: '🦀'` runs second.\n\n You can also deprioritize a promise function to delay its execution:\n\n ```js\n import PQueue from 'p-queue';\n\n const queue = new PQueue({concurrency: 1});\n\n queue.add(async () => '🦄', {priority: 1});\n queue.add(async () => '🦀', {priority: 1, id: '🦀'});\n queue.add(async () => '🦄');\n queue.add(async () => '🦄', {priority: 0});\n\n queue.setPriority('🦀', -1);\n ```\n Here, the promise function with `id: '🦀'` executes last.\n */\n setPriority(id, priority) {\n this.#queue.setPriority(id, priority);\n }\n async add(function_, options = {}) {\n // In case `id` is not defined.\n options.id ??= (this.#idAssigner++).toString();\n options = {\n timeout: this.timeout,\n throwOnTimeout: this.#throwOnTimeout,\n ...options,\n };\n return new Promise((resolve, reject) => {\n this.#queue.enqueue(async () => {\n this.#pending++;\n try {\n options.signal?.throwIfAborted();\n this.#intervalCount++;\n let operation = function_({ signal: options.signal });\n if (options.timeout) {\n operation = pTimeout(Promise.resolve(operation), { milliseconds: options.timeout });\n }\n if (options.signal) {\n operation = Promise.race([operation, this.#throwOnAbort(options.signal)]);\n }\n const result = await operation;\n resolve(result);\n this.emit('completed', result);\n }\n catch (error) {\n if (error instanceof TimeoutError && !options.throwOnTimeout) {\n resolve();\n return;\n }\n reject(error);\n this.emit('error', error);\n }\n finally {\n this.#next();\n }\n }, options);\n this.emit('add');\n this.#tryToStartAnother();\n });\n }\n async addAll(functions, options) {\n return Promise.all(functions.map(async (function_) => this.add(function_, options)));\n }\n /**\n Start (or resume) executing enqueued tasks within concurrency limit. No need to call this if queue is not paused (via `options.autoStart = false` or by `.pause()` method.)\n */\n start() {\n if (!this.#isPaused) {\n return this;\n }\n this.#isPaused = false;\n this.#processQueue();\n return this;\n }\n /**\n Put queue execution on hold.\n */\n pause() {\n this.#isPaused = true;\n }\n /**\n Clear the queue.\n */\n clear() {\n this.#queue = new this.#queueClass();\n }\n /**\n Can be called multiple times. Useful if you for example add additional items at a later time.\n\n @returns A promise that settles when the queue becomes empty.\n */\n async onEmpty() {\n // Instantly resolve if the queue is empty\n if (this.#queue.size === 0) {\n return;\n }\n await this.#onEvent('empty');\n }\n /**\n @returns A promise that settles when the queue size is less than the given limit: `queue.size < limit`.\n\n If you want to avoid having the queue grow beyond a certain size you can `await queue.onSizeLessThan()` before adding a new item.\n\n Note that this only limits the number of items waiting to start. There could still be up to `concurrency` jobs already running that this call does not include in its calculation.\n */\n async onSizeLessThan(limit) {\n // Instantly resolve if the queue is empty.\n if (this.#queue.size < limit) {\n return;\n }\n await this.#onEvent('next', () => this.#queue.size < limit);\n }\n /**\n The difference with `.onEmpty` is that `.onIdle` guarantees that all work from the queue has finished. `.onEmpty` merely signals that the queue is empty, but it could mean that some promises haven't completed yet.\n\n @returns A promise that settles when the queue becomes empty, and all promises have completed; `queue.size === 0 && queue.pending === 0`.\n */\n async onIdle() {\n // Instantly resolve if none pending and if nothing else is queued\n if (this.#pending === 0 && this.#queue.size === 0) {\n return;\n }\n await this.#onEvent('idle');\n }\n async #onEvent(event, filter) {\n return new Promise(resolve => {\n const listener = () => {\n if (filter && !filter()) {\n return;\n }\n this.off(event, listener);\n resolve();\n };\n this.on(event, listener);\n });\n }\n /**\n Size of the queue, the number of queued items waiting to run.\n */\n get size() {\n return this.#queue.size;\n }\n /**\n Size of the queue, filtered by the given options.\n\n For example, this can be used to find the number of items remaining in the queue with a specific priority level.\n */\n sizeBy(options) {\n // eslint-disable-next-line unicorn/no-array-callback-reference\n return this.#queue.filter(options).length;\n }\n /**\n Number of running items (no longer in the queue).\n */\n get pending() {\n return this.#pending;\n }\n /**\n Whether the queue is currently paused.\n */\n get isPaused() {\n return this.#isPaused;\n }\n}\n","import PQueue from \"p-queue\";\nconst queue = new PQueue({ concurrency: 5 });\nfunction preloadImage(url) {\n const { resolve, promise } = Promise.withResolvers();\n queue.add(() => {\n const image = new Image();\n image.onerror = () => resolve(false);\n image.onload = () => resolve(true);\n image.src = url;\n return promise;\n });\n return promise;\n}\nexport {\n preloadImage\n};\n//# sourceMappingURL=preloadImage.mjs.map\n","import '../assets/NcCollectionList-ChU8Os4e.css';\nimport debounce from \"debounce\";\nimport { ref, set } from \"vue\";\nimport { r as register, O as t27, a as t, P as t6 } from \"./_l10n-DVz9Qdzk.mjs\";\nimport { N as NcActionButton } from \"./NcActionButton-K4jUGMlW.mjs\";\nimport { N as NcActions } from \"./NcActions-DbPerbGE.mjs\";\nimport { N as NcAvatar } from \"./NcAvatar-DkAX4nqq.mjs\";\nimport { g as getRoute } from \"./autolink-CeB9uxD9.mjs\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nimport { l as logger } from \"./logger-D3RVzcfQ.mjs\";\nimport { N as NcSelect } from \"./NcSelect-CHc1QupB.mjs\";\nimport axios from \"@nextcloud/axios\";\nimport { generateOcsUrl } from \"@nextcloud/router\";\nregister(t27);\nconst _sfc_main$1 = {\n name: \"NcCollectionListItem\",\n components: {\n NcAvatar,\n NcActions,\n NcActionButton\n },\n props: {\n /**\n * The collection\n */\n collection: {\n type: Object,\n default: null\n },\n /**\n * Current error if any\n */\n error: {\n type: String,\n default: void 0\n }\n },\n emits: [\"remove-resource\", \"rename-collection\"],\n data() {\n return {\n detailsOpen: false,\n newName: null\n };\n },\n computed: {\n getIcon() {\n return (resource) => [resource.iconClass];\n },\n typeClass() {\n return (resource) => \"resource-type-\" + resource.type;\n },\n resources() {\n return this.collection.resources?.filter((resource) => !Array.isArray(resource)) ?? [];\n },\n getComponent() {\n return (resource) => {\n const route = getRoute(this.$router, resource.link);\n return route ? { component: \"router-link\", to: route, href: void 0 } : { component: \"a\", to: void 0, href: resource.link };\n };\n },\n iconUrl() {\n return (resource) => {\n if (resource.mimetype) {\n return OC.MimeType.getIconUrl(resource.mimetype);\n }\n if (resource.iconUrl) {\n return resource.iconUrl;\n }\n return \"\";\n };\n }\n },\n methods: {\n t,\n toggleDetails() {\n this.detailsOpen = !this.detailsOpen;\n },\n showDetails() {\n this.detailsOpen = true;\n },\n removeResource(collection, resource) {\n this.$emit(\"remove-resource\", {\n collectionId: collection.id,\n resourceType: resource.type,\n resourceId: resource.id\n });\n },\n openRename() {\n this.newName = this.collection.name;\n },\n renameCollection() {\n if (this.newName) {\n this.$emit(\"rename-collection\", {\n collectionId: this.collection.id,\n name: this.newName\n });\n }\n this.newName = null;\n }\n }\n};\nvar _sfc_render$1 = function render() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"li\", { staticClass: \"collection-list-item\" }, [_c(\"NcAvatar\", { staticClass: \"collection-avatar\", attrs: { \"display-name\": _vm.collection.name, \"allow-placeholder\": \"\" } }), _vm.newName === null ? _c(\"span\", { staticClass: \"collection-item-name\", attrs: { \"title\": \"\" }, on: { \"click\": _vm.showDetails } }, [_vm._v(_vm._s(_vm.collection.name))]) : _c(\"form\", { class: { \"should-shake\": _vm.error }, on: { \"submit\": function($event) {\n $event.preventDefault();\n return _vm.renameCollection.apply(null, arguments);\n } } }, [_c(\"input\", { directives: [{ name: \"model\", rawName: \"v-model\", value: _vm.newName, expression: \"newName\" }], attrs: { \"type\": \"text\", \"autocomplete\": \"off\", \"autocapitalize\": \"off\" }, domProps: { \"value\": _vm.newName }, on: { \"input\": function($event) {\n if ($event.target.composing) return;\n _vm.newName = $event.target.value;\n } } }), _c(\"input\", { staticClass: \"icon-confirm\", attrs: { \"type\": \"submit\", \"value\": \"\" } })]), !_vm.detailsOpen && _vm.newName === null ? _c(\"div\", { staticClass: \"linked-icons\" }, _vm._l(_vm.resources.slice(0, 2), function(resource) {\n return _c(_vm.getComponent(resource).component, { key: resource.type + \"|\" + resource.id, tag: \"component\", class: _vm.typeClass(resource), attrs: { \"title\": resource.name, \"to\": _vm.getComponent(resource).to, \"href\": _vm.getComponent(resource).href } }, [_c(\"img\", { attrs: { \"src\": _vm.iconUrl(resource), \"alt\": resource.name } })]);\n }), 1) : _vm._e(), _vm.newName === null ? _c(\"span\", { staticClass: \"sharingOptionsGroup\" }, [_c(\"NcActions\", [_c(\"NcActionButton\", { attrs: { \"icon\": \"icon-info\" }, on: { \"click\": function($event) {\n $event.preventDefault();\n return _vm.toggleDetails.apply(null, arguments);\n } } }, [_vm._v(\" \" + _vm._s(_vm.detailsOpen ? _vm.t(\"Hide details\") : _vm.t(\"Show details\")) + \" \")]), _c(\"NcActionButton\", { attrs: { \"icon\": \"icon-rename\" }, on: { \"click\": function($event) {\n $event.preventDefault();\n return _vm.openRename.apply(null, arguments);\n } } }, [_vm._v(\" \" + _vm._s(_vm.t(\"Rename project\")) + \" \")])], 1)], 1) : _vm._e(), _c(\"transition\", { attrs: { \"name\": \"fade\" } }, [_vm.error ? _c(\"div\", { staticClass: \"error\" }, [_vm._v(\" \" + _vm._s(_vm.error) + \" \")]) : _vm._e()]), _c(\"transition\", { attrs: { \"name\": \"fade\" } }, [_vm.detailsOpen ? _c(\"ul\", { staticClass: \"resource-list-details\" }, _vm._l(_vm.resources, function(resource) {\n return _c(\"li\", { key: resource.type + \"|\" + resource.id, class: _vm.typeClass(resource) }, [_c(_vm.getComponent(resource).component, { tag: \"component\", attrs: { \"to\": _vm.getComponent(resource).to, \"href\": _vm.getComponent(resource).href } }, [_c(\"img\", { attrs: { \"src\": _vm.iconUrl(resource), \"alt\": resource.name } }), _c(\"span\", { staticClass: \"resource-name\" }, [_vm._v(_vm._s(resource.name || \"\"))])]), _c(\"span\", { staticClass: \"icon-close\", on: { \"click\": function($event) {\n return _vm.removeResource(_vm.collection, resource);\n } } })], 1);\n }), 0) : _vm._e()])], 1);\n};\nvar _sfc_staticRenderFns$1 = [];\nvar __component__$1 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$1,\n _sfc_render$1,\n _sfc_staticRenderFns$1,\n false,\n null,\n \"88468fab\"\n);\nconst NcCollectionListItem = __component__$1.exports;\nregister(t6);\nfunction extractOcsData(response) {\n return response.data.ocs.data;\n}\nfunction renameCollectionService(collectionId, collectionName) {\n return axios.put(generateOcsUrl(\"collaboration/resources/collections/{collectionId}\", { collectionId }), { collectionName }).then(extractOcsData);\n}\nfunction getCollectionsByResourceService(resourceType, resourceId) {\n return axios.get(generateOcsUrl(\"collaboration/resources/{resourceType}/{resourceId}\", { resourceType, resourceId })).then(extractOcsData);\n}\nfunction createCollectionService(resourceType, resourceId, name) {\n return axios.post(generateOcsUrl(\"collaboration/resources/{resourceType}/{resourceId}\", { resourceType, resourceId }), { name }).then(extractOcsData);\n}\nfunction addResourceService(collectionId, resourceType, resourceId) {\n return axios.post(generateOcsUrl(\"collaboration/resources/collections/{collectionId}\", { collectionId }), { resourceType, resourceId }).then(extractOcsData);\n}\nfunction removeResourceService(collectionId, resourceType, resourceId) {\n return axios.delete(generateOcsUrl(\"collaboration/resources/collections/{collectionId}\", { collectionId }), { params: { resourceType, resourceId } }).then(extractOcsData);\n}\nfunction searchService(query) {\n return axios.get(generateOcsUrl(\"collaboration/resources/collections/search/{query}\", { query })).then(extractOcsData);\n}\nfunction useCollections() {\n const storedCollections = ref([]);\n const addCollections = (collections) => {\n set(storedCollections, \"value\", collections);\n };\n const addCollection = (collection) => {\n set(storedCollections, \"value\", [...storedCollections.value, collection]);\n };\n const removeCollection = (collectionId) => {\n set(storedCollections, \"value\", storedCollections.value.filter((item) => item.id !== collectionId));\n };\n const updateCollection = (collection) => {\n const index = storedCollections.value.findIndex((item) => item.id === collection.id);\n if (index !== -1) {\n set(storedCollections.value, index, collection);\n } else {\n addCollection(collection);\n }\n };\n const fetchCollectionsByResource = async ({ resourceType, resourceId }) => {\n const collections = await getCollectionsByResourceService(resourceType, resourceId);\n addCollections(collections);\n };\n const createCollection = async ({ baseResourceType, baseResourceId, resourceType, resourceId, name }) => {\n const collection = await createCollectionService(baseResourceType, baseResourceId, name);\n addCollection(collection);\n await addResourceToCollection({\n collectionId: collection.id,\n resourceType,\n resourceId\n });\n };\n const renameCollection = async ({ collectionId, name }) => {\n const collection = await renameCollectionService(collectionId, name);\n updateCollection(collection);\n };\n async function addResourceToCollection({ collectionId, resourceType, resourceId }) {\n const collection = await addResourceService(collectionId, resourceType, String(resourceId));\n updateCollection(collection);\n }\n const removeResourceFromCollection = async ({ collectionId, resourceType, resourceId }) => {\n const collection = await removeResourceService(collectionId, resourceType, String(resourceId));\n if (collection.resources.length > 0) {\n updateCollection(collection);\n } else {\n removeCollection(collectionId);\n }\n };\n return {\n storedCollections,\n fetchCollectionsByResource,\n createCollection,\n renameCollection,\n addResourceToCollection,\n removeResourceFromCollection\n };\n}\nconst METHOD_CREATE_COLLECTION = 0;\nconst METHOD_ADD_TO_COLLECTION = 1;\nconst _sfc_main = {\n name: \"NcCollectionList\",\n components: {\n NcCollectionListItem,\n NcAvatar,\n NcSelect\n },\n props: {\n /**\n * Resource type identifier\n */\n type: {\n type: String,\n default: null\n },\n /**\n * Unique id of the resource\n */\n id: {\n type: String,\n default: null\n },\n /**\n * Name of the resource\n */\n name: {\n type: String,\n default: \"\"\n },\n /**\n * Whether the component is active (to start fetch resources)\n */\n isActive: {\n type: Boolean,\n // eslint-disable-next-line vue/no-boolean-default\n default: true\n }\n },\n setup() {\n const {\n storedCollections,\n fetchCollectionsByResource,\n createCollection,\n addResourceToCollection,\n removeResourceFromCollection,\n renameCollection\n } = useCollections();\n const searchCollections = ref([]);\n const search = debounce(function(query, loading) {\n if (query !== \"\") {\n loading(true);\n searchService(query).then((collections) => {\n searchCollections.value = collections;\n }).catch((error) => {\n logger.error(\"Failed to search for collections\", { error });\n }).finally(() => {\n loading(false);\n });\n }\n }, 500);\n return {\n storedCollections,\n fetchCollectionsByResource,\n createCollection,\n addResourceToCollection,\n removeResourceFromCollection,\n renameCollection,\n searchCollections,\n search\n };\n },\n data() {\n return {\n selectIsOpen: false,\n generatingCodes: false,\n codes: void 0,\n value: null,\n model: {},\n collectionsError: {},\n error: null,\n isSelectOpen: false\n };\n },\n computed: {\n collections() {\n return this.storedCollections.filter((collection) => collection.resources.some((resource) => resource && resource.id === String(this.id) && resource.type === this.type));\n },\n placeholder() {\n return this.isSelectOpen ? t(\"Type to search for existing projects\") : t(\"Add to a project\");\n },\n options() {\n const options = [];\n window.OCP.Collaboration.getTypes().sort().forEach((type) => {\n options.push({\n method: METHOD_CREATE_COLLECTION,\n type,\n title: window.OCP.Collaboration.getLabel(type),\n class: window.OCP.Collaboration.getIcon(type),\n action: () => window.OCP.Collaboration.trigger(type)\n });\n });\n for (const index in this.searchCollections) {\n if (!this.collections.find((collection) => collection.id === this.searchCollections[index].id)) {\n options.push({\n method: METHOD_ADD_TO_COLLECTION,\n title: this.searchCollections[index].name,\n collectionId: this.searchCollections[index].id\n });\n }\n }\n return options;\n },\n resourceIdentifier() {\n return {\n resourceType: this.type,\n resourceId: this.id,\n isActive: this.isActive\n };\n }\n },\n watch: {\n resourceIdentifier: {\n deep: true,\n immediate: true,\n handler(resourceIdentifier) {\n if (!resourceIdentifier.isActive || !resourceIdentifier.resourceId || !resourceIdentifier.resourceType) {\n return;\n }\n this.fetchCollectionsByResource(resourceIdentifier);\n }\n }\n },\n methods: {\n t,\n select(selectedOption) {\n if (selectedOption.method === METHOD_CREATE_COLLECTION) {\n selectedOption.action().then((resourceId) => {\n this.createCollection({\n baseResourceType: this.type,\n baseResourceId: this.id,\n resourceType: selectedOption.type,\n resourceId,\n name: this.name\n }).catch((e) => {\n this.setError(t(\"Failed to create a project\"), e);\n });\n }).catch((error) => {\n logger.error(\"No resource selected\", { error });\n });\n }\n if (selectedOption.method === METHOD_ADD_TO_COLLECTION) {\n this.addResourceToCollection({\n collectionId: selectedOption.collectionId,\n resourceType: this.type,\n resourceId: this.id\n }).catch((e) => {\n this.setError(t(\"Failed to add the item to the project\"), e);\n });\n }\n this.value = null;\n },\n showSelect() {\n this.selectIsOpen = true;\n this.$refs.select.$el.focus();\n },\n setError(error, e) {\n logger.error(error, { error: e });\n this.error = error;\n setTimeout(() => {\n this.error = null;\n }, 5e3);\n },\n renameCollectionFromItem({ collectionId, name }) {\n this.renameCollection({ collectionId, name }).catch((error) => {\n logger.error(t(\"Failed to rename the project\"), { error });\n this.collectionsError[collectionId] = t(\"Failed to rename the project\");\n setTimeout(() => {\n this.collectionsError[collectionId] = null;\n }, 5e3);\n });\n }\n }\n};\nvar _sfc_render = function render2() {\n var _vm = this, _c = _vm._self._c;\n return _vm.collections && _vm.type && _vm.id ? _c(\"ul\", { staticClass: \"collection-list\", attrs: { \"id\": \"collection-list\" } }, [_c(\"li\", { on: { \"click\": _vm.showSelect } }, [_vm._m(0), _c(\"div\", { attrs: { \"id\": \"collection-select-container\" } }, [_c(\"NcSelect\", { ref: \"select\", attrs: { \"aria-label-combobox\": _vm.t(\"Add to a project\"), \"options\": _vm.options, \"placeholder\": _vm.placeholder, \"label\": \"title\", \"limit\": 5 }, on: { \"close\": function($event) {\n _vm.isSelectOpen = false;\n }, \"open\": function($event) {\n _vm.isSelectOpen = true;\n }, \"option:selected\": _vm.select, \"search\": _vm.search }, scopedSlots: _vm._u([{ key: \"selected-option\", fn: function(option) {\n return [_c(\"span\", { staticClass: \"option__desc\" }, [_c(\"span\", { staticClass: \"option__title\" }, [_vm._v(_vm._s(option.title))])])];\n } }, { key: \"option\", fn: function(option) {\n return [_c(\"span\", { staticClass: \"option__wrapper\" }, [option.class ? _c(\"span\", { staticClass: \"avatar\", class: option.class }) : option.method !== 2 ? _c(\"NcAvatar\", { attrs: { \"allow-placeholder\": \"\", \"display-name\": option.title } }) : _vm._e(), _c(\"span\", { staticClass: \"option__title\" }, [_vm._v(_vm._s(option.title))])], 1)];\n } }], null, false, 2397208459), model: { value: _vm.value, callback: function($$v) {\n _vm.value = $$v;\n }, expression: \"value\" } }, [_c(\"p\", { staticClass: \"hint\" }, [_vm._v(\" \" + _vm._s(_vm.t(\"Connect items to a project to make them easier to find\")) + \" \")])])], 1)]), _c(\"transition\", { attrs: { \"name\": \"fade\" } }, [_vm.error ? _c(\"li\", { staticClass: \"error\" }, [_vm._v(\" \" + _vm._s(_vm.error) + \" \")]) : _vm._e()]), _vm._l(_vm.collections, function(collection) {\n return _c(\"NcCollectionListItem\", { key: collection.id, attrs: { \"collection\": collection, \"error\": _vm.collectionsError[collection.id] }, on: { \"rename-collection\": _vm.renameCollectionFromItem, \"remove-resource\": _vm.removeResourceFromCollection } });\n })], 2) : _vm._e();\n};\nvar _sfc_staticRenderFns = [function() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"div\", { staticClass: \"avatar\" }, [_c(\"span\", { staticClass: \"icon-projects\" })]);\n}];\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n null,\n \"e1b88947\"\n);\nconst NcCollectionList = __component__.exports;\nexport {\n NcCollectionList as N\n};\n//# sourceMappingURL=NcCollectionList-DOAZ13vO.mjs.map\n","import '../assets/NcDashboardWidget-CodY3evn.css';\nimport { C as Check } from \"./Check-BkThHPH7.mjs\";\nimport { r as register, l as t34, a as t } from \"./_l10n-DVz9Qdzk.mjs\";\nimport { N as NcAvatar } from \"./NcAvatar-DkAX4nqq.mjs\";\nimport { N as NcDashboardWidgetItem } from \"./NcDashboardWidgetItem-2VgB9qj2.mjs\";\nimport NcEmptyContent from \"../Components/NcEmptyContent.mjs\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nregister(t34);\nconst _sfc_main = {\n name: \"NcDashboardWidget\",\n components: {\n NcAvatar,\n NcDashboardWidgetItem,\n NcEmptyContent,\n Check\n },\n props: {\n /**\n * An array containing the items to show (specific structure must be respected,\n * except if you override item rendering in the default slot).\n */\n items: {\n type: Array,\n default: () => {\n return [];\n }\n },\n /**\n * If this is set, a \"show more\" text is displayed on the widget's bottom.\n * It's a link pointing to this URL.\n */\n showMoreUrl: {\n type: String,\n default: \"\"\n },\n /**\n * The text of show more button.\n *\n * Expected to be in the form \"More {itemName} …\"\n */\n showMoreLabel: {\n type: String,\n default: t(\"More items …\")\n },\n /**\n * A boolean to put the widget in a loading state.\n */\n loading: {\n type: Boolean,\n default: false\n },\n /**\n * An object containing context menu entries that will be displayed for each item.\n */\n itemMenu: {\n type: Object,\n default: () => {\n return {};\n }\n },\n /**\n * Whether both the items and the empty content message are shown.\n * Usefull for e.g. showing \"No mentions\" and a list of elements.\n */\n showItemsAndEmptyContent: {\n type: Boolean,\n default: false\n },\n /**\n * The text to show in the empty content area.\n */\n emptyContentMessage: {\n type: String,\n default: \"\"\n },\n /**\n * The text to show in the half empty content area.\n */\n halfEmptyContentMessage: {\n type: String,\n default: \"\"\n }\n },\n computed: {\n // forward menu events to my parent\n handlers() {\n const h = {};\n for (const evName in this.itemMenu) {\n h[evName] = (it) => {\n this.$emit(evName, it);\n };\n }\n return h;\n },\n displayedItems() {\n const nbItems = this.showMoreUrl && this.items.length >= this.maxItemNumber ? this.maxItemNumber - 1 : this.maxItemNumber;\n return this.items.slice(0, nbItems);\n },\n showHalfEmptyContentArea() {\n return this.showItemsAndEmptyContent && this.halfEmptyContentString && this.items.length !== 0;\n },\n halfEmptyContentString() {\n return this.halfEmptyContentMessage || this.emptyContentMessage;\n },\n maxItemNumber() {\n return this.showItemsAndEmptyContent ? 5 : 7;\n },\n showMore() {\n return this.showMoreUrl && this.items.length >= this.maxItemNumber;\n }\n }\n};\nvar _sfc_render = function render() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"div\", { staticClass: \"dashboard-widget\" }, [_vm.showHalfEmptyContentArea ? _c(\"NcEmptyContent\", { staticClass: \"half-screen\", attrs: { \"description\": _vm.halfEmptyContentString }, scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_vm._t(\"halfEmptyContentIcon\", function() {\n return [_c(\"Check\")];\n })];\n }, proxy: true }], null, true) }) : _vm._e(), _c(\"ul\", _vm._l(_vm.displayedItems, function(item) {\n return _c(\"li\", { key: item.id }, [_vm._t(\"default\", function() {\n return [_c(\"NcDashboardWidgetItem\", _vm._g(_vm._b({ attrs: { \"item-menu\": _vm.itemMenu } }, \"NcDashboardWidgetItem\", item, false), _vm.handlers))];\n }, { \"item\": item })], 2);\n }), 0), _vm.loading ? _c(\"div\", _vm._l(7, function(i) {\n return _c(\"div\", { key: i, staticClass: \"item-list__entry\" }, [_c(\"NcAvatar\", { staticClass: \"item-avatar\", attrs: { \"size\": 44 } }), _vm._m(0, true)], 1);\n }), 0) : _vm.items.length === 0 ? _vm._t(\"empty-content\", function() {\n return [_vm.emptyContentMessage ? _c(\"NcEmptyContent\", { attrs: { \"description\": _vm.emptyContentMessage }, scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_vm._t(\"emptyContentIcon\")];\n }, proxy: true }], null, true) }) : _vm._e()];\n }) : _vm.showMore ? _c(\"a\", { staticClass: \"more\", attrs: { \"href\": _vm.showMoreUrl, \"target\": \"_blank\", \"tabindex\": \"0\" } }, [_vm._v(\" \" + _vm._s(_vm.showMoreLabel) + \" \")]) : _vm._e()], 2);\n};\nvar _sfc_staticRenderFns = [function() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"div\", { staticClass: \"item__details\" }, [_c(\"h3\", [_vm._v(\" \")]), _c(\"p\", { staticClass: \"message\" }, [_vm._v(\" \")])]);\n}];\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n null,\n \"bde19bf3\"\n);\nconst NcDashboardWidget = __component__.exports;\nexport {\n NcDashboardWidget as N\n};\n//# sourceMappingURL=NcDashboardWidget-CO1z9VUN.mjs.map\n","!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof exports?exports.EmojiMart=t():e.EmojiMart=t()}(\"undefined\"!=typeof self?self:this,(function(){return function(){var e={537:function(){\"undefined\"!=typeof window&&function(){for(var e=0,t=[\"ms\",\"moz\",\"webkit\",\"o\"],i=0;ie.length)&&(t=e.length);for(var i=0,n=new Array(t);i=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:r}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var o,s=!0,a=!1;return{s:function(){i=i.call(e)},n:function(){var e=i.next();return s=e.done,e},e:function(e){a=!0,o=e},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw o}}}}(Object.getOwnPropertyNames(e));try{for(i.s();!(t=i.n()).done;){var n=t.value,r=e[n];e[n]=r&&\"object\"===u(r)?d(r):r}}catch(e){i.e(e)}finally{i.f()}return Object.freeze(e)}var f,v,p=function(e){if(!e.compressed)return e;for(var t in e.compressed=!1,e.emojis){var i=e.emojis[t];for(var n in h)i[n]=i[h[n]],delete i[h[n]];i.short_names||(i.short_names=[]),i.short_names.unshift(t),i.sheet_x=i.sheet[0],i.sheet_y=i.sheet[1],delete i.sheet,i.text||(i.text=\"\"),i.added_in||(i.added_in=6),i.added_in=i.added_in.toFixed(1),i.search=m(i)}return d(e)},j=[\"+1\",\"grinning\",\"kissing_heart\",\"heart_eyes\",\"laughing\",\"stuck_out_tongue_winking_eye\",\"sweat_smile\",\"joy\",\"scream\",\"disappointed\",\"unamused\",\"weary\",\"sob\",\"sunglasses\",\"heart\",\"hankey\"],g={};function y(){v=!0,f=c.get(\"frequently\")}var w={add:function(e){v||y();var t=e.id;f||(f=g),f[t]||(f[t]=0),f[t]+=1,c.set(\"last\",t),c.set(\"frequently\",f)},get:function(e){if(v||y(),!f){g={};for(var t=[],i=Math.min(e,j.length),n=0;n',custom:'',flags:'',foods:'',nature:'',objects:'',smileys:'',people:'',places:'',recent:'',symbols:''};function b(e,t,i,n,r,o,s,a){var c,u=\"function\"==typeof e?e.options:e;if(t&&(u.render=t,u.staticRenderFns=i,u._compiled=!0),n&&(u.functional=!0),o&&(u._scopeId=\"data-v-\"+o),s?(c=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||\"undefined\"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),r&&r.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(s)},u._ssrRegister=c):r&&(c=a?function(){r.call(this,(u.functional?this.parent:this).$root.$options.shadowRoot)}:r),c)if(u.functional){u._injectStyles=c;var l=u.render;u.render=function(e,t){return c.call(t),l(e,t)}}else{var h=u.beforeCreate;u.beforeCreate=h?[].concat(h,c):[c]}return{exports:e,options:u}}var C=b({props:{i18n:{type:Object,required:!0},color:{type:String},categories:{type:Array,required:!0},activeCategory:{type:Object,default:function(){return{}}}},emits:[\"click\"],created:function(){this.svgs=_}},(function(){var e=this,t=e._self._c;return t(\"div\",{staticClass:\"emoji-mart-anchors\",attrs:{role:\"tablist\"}},e._l(e.categories,(function(i){return t(\"button\",{key:i.id,class:{\"emoji-mart-anchor\":!0,\"emoji-mart-anchor-selected\":i.id==e.activeCategory.id},style:{color:i.id==e.activeCategory.id?e.color:\"\"},attrs:{role:\"tab\",type:\"button\",\"aria-label\":i.name,\"aria-selected\":i.id==e.activeCategory.id,\"data-title\":e.i18n.categories[i.id]},on:{click:function(t){return e.$emit(\"click\",i)}}},[t(\"div\",{attrs:{\"aria-hidden\":\"true\"},domProps:{innerHTML:e._s(e.svgs[i.id])}}),e._v(\" \"),t(\"span\",{staticClass:\"emoji-mart-anchor-bar\",style:{backgroundColor:e.color},attrs:{\"aria-hidden\":\"true\"}})])})),0)}),[],!1,null,null,null),k=C.exports;function E(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function S(e){var t=function(e,t){if(\"object\"!=u(e)||!e)return e;var i=e[Symbol.toPrimitive];if(void 0!==i){var n=i.call(e,\"string\");if(\"object\"!=u(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==u(t)?t:t+\"\"}function x(e,t){for(var i=0;i1114111||Math.floor(s)!=s)throw RangeError(\"Invalid code point: \"+s);s<=65535?i.push(s):(e=55296+((s-=65536)>>10),t=s%1024+56320,i.push(e,t)),(n+1===r||i.length>16384)&&(o+=String.fromCharCode.apply(null,i),i.length=0)}return o};function A(e){var t=e.split(\"-\").map((function(e){return\"0x\".concat(e)}));return P.apply(null,t)}function M(e){return e.reduce((function(e,t){return-1===e.indexOf(t)&&e.push(t),e}),[])}function I(e,t){var i=M(e),n=M(t);return i.filter((function(e){return n.indexOf(e)>=0}))}function F(e,t){var i={};for(var n in e){var r=e[n],o=r;Object.prototype.hasOwnProperty.call(t,n)&&(o=t[n]),\"object\"===u(o)&&(o=F(r,o)),i[n]=o}return i}function z(e,t){var i=\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(!i){if(Array.isArray(e)||(i=function(e,t){if(e){if(\"string\"==typeof e)return L(e,t);var i=Object.prototype.toString.call(e).slice(8,-1);return\"Object\"===i&&e.constructor&&(i=e.constructor.name),\"Map\"===i||\"Set\"===i?Array.from(e):\"Arguments\"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?L(e,t):void 0}}(e))||t&&e&&\"number\"==typeof e.length){i&&(e=i);var n=0,r=function(){};return{s:r,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:r}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var o,s=!0,a=!1;return{s:function(){i=i.call(e)},n:function(){var e=i.next();return s=e.done,e},e:function(e){a=!0,o=e},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw o}}}}function L(e,t){(null==t||t>e.length)&&(t=e.length);for(var i=0,n=new Array(t);i1&&void 0!==arguments[1]?arguments[1]:{},n=i.emojisToShowFilter,r=i.include,o=i.exclude,s=i.custom,a=i.recent,c=i.recentLength,u=void 0===c?20:c;E(this,e),this._data=p(t),this._emojisFilter=n||null,this._include=r||null,this._exclude=o||null,this._custom=s||[],this._recent=a||w.get(u),this._emojis={},this._nativeEmojis={},this._emoticons={},this._categories=[],this._recentCategory={id:\"recent\",name:\"Recent\",emojis:[]},this._customCategory={id:\"custom\",name:\"Custom\",emojis:[]},this._searchIndex={},this.buildIndex(),Object.freeze(this)}),[{key:\"buildIndex\",value:function(){var e=this,t=this._data.categories;if(this._include&&(t=(t=t.filter((function(t){return e._include.includes(t.id)}))).sort((function(t,i){var n=e._include.indexOf(t.id),r=e._include.indexOf(i.id);return nr?1:0}))),t.forEach((function(t){if(e.isCategoryNeeded(t.id)){var i={id:t.id,name:t.name,emojis:[]};t.emojis.forEach((function(t){var n=e.addEmoji(t);n&&i.emojis.push(n)})),i.emojis.length&&e._categories.push(i)}})),this.isCategoryNeeded(\"custom\")){if(this._custom.length>0){var i,n=z(this._custom);try{for(n.s();!(i=n.n()).done;){var r=i.value;this.addCustomEmoji(r)}}catch(e){n.e(e)}finally{n.f()}}this._customCategory.emojis.length&&this._categories.push(this._customCategory)}this.isCategoryNeeded(\"recent\")&&(this._recent.length&&this._recent.map((function(t){var i,n=z(e._customCategory.emojis);try{for(n.s();!(i=n.n()).done;){var r=i.value;if(r.id===t)return void e._recentCategory.emojis.push(r)}}catch(e){n.e(e)}finally{n.f()}e.hasEmoji(t)&&e._recentCategory.emojis.push(e.emoji(t))})),this._recentCategory.emojis.length&&this._categories.unshift(this._recentCategory))}},{key:\"findEmoji\",value:function(e,t){var i=e.match(T);if(i&&(e=i[1],i[2]&&(t=parseInt(i[2],10))),this._data.aliases.hasOwnProperty(e)&&(e=this._data.aliases[e]),this._emojis.hasOwnProperty(e)){var n=this._emojis[e];return t?n.getSkin(t):n}return this._nativeEmojis.hasOwnProperty(e)?this._nativeEmojis[e]:null}},{key:\"categories\",value:function(){return this._categories}},{key:\"emoji\",value:function(e){this._data.aliases.hasOwnProperty(e)&&(e=this._data.aliases[e]);var t=this._emojis[e];if(!t)throw new Error(\"Can not find emoji by id: \"+e);return t}},{key:\"firstEmoji\",value:function(){var e=this._emojis[Object.keys(this._emojis)[0]];if(!e)throw new Error(\"Can not get first emoji\");return e}},{key:\"hasEmoji\",value:function(e){return this._data.aliases.hasOwnProperty(e)&&(e=this._data.aliases[e]),!!this._emojis[e]}},{key:\"nativeEmoji\",value:function(e){return this._nativeEmojis.hasOwnProperty(e)?this._nativeEmojis[e]:null}},{key:\"search\",value:function(e,t){var i=this;if(t||(t=75),!e.length)return null;if(\"-\"==e||\"-1\"==e)return[this.emoji(\"-1\")];var n,r=e.toLowerCase().split(/[\\s|,|\\-|_]+/);r.length>2&&(r=[r[0],r[1]]),n=r.map((function(e){for(var t=i._emojis,n=i._searchIndex,r=0,o=function(){var i=e[s];if(r++,n[i]||(n[i]={}),!(n=n[i]).results){var o={};for(var a in n.results=[],n.emojis={},t){var c=t[a],u=c._data.search,l=e.substr(0,r),h=u.indexOf(l);if(-1!=h){var m=h+1;l==a&&(m=0),n.results.push(c),n.emojis[a]=c,o[a]=m}}n.results.sort((function(e,t){return o[e.id]-o[t.id]}))}t=n.emojis},s=0;s1?I.apply(null,n):n.length?n[0]:[])&&o.length>t&&(o=o.slice(0,t)),o}},{key:\"addCustomEmoji\",value:function(e){var t=Object.assign({},e,{id:e.short_names[0],custom:!0});t.search||(t.search=m(t));var i=new N(t);return this._emojis[i.id]=i,this._customCategory.emojis.push(i),i}},{key:\"addEmoji\",value:function(e){var t=this,i=this._data.emojis[e];if(!this.isEmojiNeeded(i))return!1;var n=new N(i);if(this._emojis[e]=n,n.native&&(this._nativeEmojis[n.native]=n),n._skins)for(var r in n._skins){var o=n._skins[r];o.native&&(this._nativeEmojis[o.native]=o)}return n.emoticons&&n.emoticons.forEach((function(i){t._emoticons[i]||(t._emoticons[i]=e)})),n}},{key:\"isCategoryNeeded\",value:function(e){var t=!this._include||!this._include.length||this._include.indexOf(e)>-1,i=!(!this._exclude||!this._exclude.length)&&this._exclude.indexOf(e)>-1;return!(!t||i)}},{key:\"isEmojiNeeded\",value:function(e){return!this._emojisFilter||this._emojisFilter(e)}}])}(),N=function(){return O((function e(t){if(E(this,e),this._data=Object.assign({},t),this._skins=null,this._data.skin_variations)for(var i in this._skins=[],q){var n=q[i],r=this._data.skin_variations[n],o=Object.assign({},t);for(var s in r)o[s]=r[s];delete o.skin_variations,o.skin_tone=parseInt(i)+1,this._skins.push(new e(o))}for(var a in this._sanitized=D(this._data),this._sanitized)this[a]=this._sanitized[a];this.short_names=this._data.short_names,this.short_name=this._data.short_names[0],Object.freeze(this)}),[{key:\"getSkin\",value:function(e){return e&&\"native\"!=e&&this._skins?this._skins[e-1]:this}},{key:\"getPosition\",value:function(){var e=+(100/60*this._data.sheet_x).toFixed(2),t=+(100/60*this._data.sheet_y).toFixed(2);return\"\".concat(e,\"% \").concat(t,\"%\")}},{key:\"ariaLabel\",value:function(){return[this.native].concat(this.short_names).filter(Boolean).join(\", \")}}])}(),$=function(){return O((function e(t,i,n,r,o,s,a){E(this,e),this._emoji=t,this._native=r,this._skin=i,this._set=n,this._fallback=o,this.canRender=this._canRender(),this.cssClass=this._cssClass(),this.cssStyle=this._cssStyle(a),this.content=this._content(),this.title=!0===s?t.short_name:null,this.ariaLabel=t.ariaLabel(),Object.freeze(this)}),[{key:\"getEmoji\",value:function(){return this._emoji.getSkin(this._skin)}},{key:\"_canRender\",value:function(){return this._isCustom()||this._isNative()||this._hasEmoji()||this._fallback}},{key:\"_cssClass\",value:function(){return[\"emoji-set-\"+this._set,\"emoji-type-\"+this._emojiType()]}},{key:\"_cssStyle\",value:function(e){var t={};return this._isCustom()?t={backgroundImage:\"url(\"+this.getEmoji()._data.imageUrl+\")\",backgroundSize:\"100%\",width:e+\"px\",height:e+\"px\"}:this._hasEmoji()&&!this._isNative()&&(t={backgroundPosition:this.getEmoji().getPosition()}),e&&(t=this._isNative()?Object.assign(t,{fontSize:Math.round(.95*e*10)/10+\"px\"}):Object.assign(t,{width:e+\"px\",height:e+\"px\"})),t}},{key:\"_content\",value:function(){return this._isCustom()?\"\":this._isNative()?this.getEmoji().native:this._hasEmoji()?\"\":this._fallback?this._fallback(this.getEmoji()):null}},{key:\"_isNative\",value:function(){return this._native}},{key:\"_isCustom\",value:function(){return this.getEmoji().custom}},{key:\"_hasEmoji\",value:function(){if(!this.getEmoji()._data)return!1;var e=this.getEmoji()._data[\"has_img_\"+this._set];return void 0===e||e}},{key:\"_emojiType\",value:function(){return this._isCustom()?\"custom\":this._isNative()?\"native\":this._hasEmoji()?\"image\":\"fallback\"}}])}();function D(e){var t=e.name,i=e.short_names,n=e.skin_tone,r=e.skin_variations,o=e.emoticons,s=e.unified,a=e.custom,c=e.imageUrl,u=e.id||i[0],l=\":\".concat(u,\":\");return a?{id:u,name:t,colons:l,emoticons:o,custom:a,imageUrl:c}:(n&&(l+=\":skin-tone-\".concat(n,\":\")),{id:u,name:t,colons:l,emoticons:o,unified:s.toLowerCase(),skin:n||(r?1:null),native:A(s)})}function B(e,t,i){return(t=S(t))in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}var H={native:{type:Boolean,default:!1},tooltip:{type:Boolean,default:!1},fallback:{type:Function},skin:{type:Number,default:1},set:{type:String,default:\"apple\"},emoji:{type:[String,Object],required:!0},size:{type:Number,default:null},tag:{type:String,default:\"span\"}},U={perLine:{type:Number,default:9},maxSearchResults:{type:Number,default:75},emojiSize:{type:Number,default:24},title:{type:String,default:\"Emoji Mart™\"},emoji:{type:String,default:\"department_store\"},color:{type:String,default:\"#ae65c5\"},set:{type:String,default:\"apple\"},skin:{type:Number,default:null},defaultSkin:{type:Number,default:1},native:{type:Boolean,default:!1},emojiTooltip:{type:Boolean,default:!1},autoFocus:{type:Boolean,default:!1},i18n:{type:Object,default:function(){return{}}},showPreview:{type:Boolean,default:!0},showSearch:{type:Boolean,default:!0},showCategories:{type:Boolean,default:!0},showSkinTones:{type:Boolean,default:!0},infiniteScroll:{type:Boolean,default:!0},pickerStyles:{type:Object,default:function(){return{}}}};function V(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function W(e){for(var t=1;t0},emojiObjects:function(){var e=this;return this.emojis.map((function(t){return{emojiObject:t,emojiView:new $(t,e.emojiProps.skin,e.emojiProps.set,e.emojiProps.native,e.emojiProps.fallback,e.emojiProps.emojiTooltip,e.emojiProps.emojiSize)}}))}},components:{Emoji:J}},(function(){var e=this,t=e._self._c;return e.isVisible&&(e.isSearch||e.hasResults)?t(\"section\",{class:{\"emoji-mart-category\":!0,\"emoji-mart-no-results\":!e.hasResults},attrs:{\"aria-label\":e.i18n.categories[e.id]}},[t(\"div\",{staticClass:\"emoji-mart-category-label\"},[t(\"h3\",{staticClass:\"emoji-mart-category-label\"},[e._v(e._s(e.i18n.categories[e.id]))])]),e._v(\" \"),e._l(e.emojiObjects,(function(i){var n=i.emojiObject,r=i.emojiView;return[r.canRender?t(\"button\",{key:n.id,staticClass:\"emoji-mart-emoji\",class:e.activeClass(n),attrs:{\"aria-label\":r.ariaLabel,role:\"option\",\"aria-selected\":\"false\",\"aria-posinset\":\"1\",\"aria-setsize\":\"1812\",type:\"button\",\"data-title\":n.short_name,title:r.title},on:{mouseenter:function(t){e.emojiProps.onEnter(r.getEmoji())},mouseleave:function(t){e.emojiProps.onLeave(r.getEmoji())},click:function(t){e.emojiProps.onClick(r.getEmoji())}}},[t(\"span\",{class:r.cssClass,style:r.cssStyle},[e._v(e._s(r.content))])]):e._e()]})),e._v(\" \"),e.hasResults?e._e():t(\"div\",[t(\"emoji\",{attrs:{data:e.data,emoji:\"sleuth_or_spy\",native:e.emojiProps.native,skin:e.emojiProps.skin,set:e.emojiProps.set}}),e._v(\" \"),t(\"div\",{staticClass:\"emoji-mart-no-results-label\"},[e._v(e._s(e.i18n.notfound))])],1)],2):e._e()}),[],!1,null,null,null).exports,Z=b({props:{skin:{type:Number,required:!0}},emits:[\"change\"],data:function(){return{opened:!1}},methods:{onClick:function(e){this.opened&&e!=this.skin&&this.$emit(\"change\",e),this.opened=!this.opened}}},(function(){var e=this,t=e._self._c;return t(\"div\",{class:{\"emoji-mart-skin-swatches\":!0,\"emoji-mart-skin-swatches-opened\":e.opened}},e._l(6,(function(i){return t(\"span\",{key:i,class:{\"emoji-mart-skin-swatch\":!0,\"emoji-mart-skin-swatch-selected\":e.skin==i}},[t(\"span\",{class:\"emoji-mart-skin emoji-mart-skin-tone-\"+i,on:{click:function(t){return e.onClick(i)}}})])})),0)}),[],!1,null,null,null).exports,G=b({props:{data:{type:Object,required:!0},title:{type:String,required:!0},emoji:{type:[String,Object]},idleEmoji:{type:[String,Object],required:!0},showSkinTones:{type:Boolean,default:!0},emojiProps:{type:Object,required:!0},skinProps:{type:Object,required:!0},onSkinChange:{type:Function,required:!0}},computed:{emojiData:function(){return this.emoji?this.emoji:{}},emojiShortNames:function(){return this.emojiData.short_names},emojiEmoticons:function(){return this.emojiData.emoticons}},components:{Emoji:J,Skins:Z}},(function(){var e=this,t=e._self._c;return t(\"div\",{staticClass:\"emoji-mart-preview\"},[e.emoji?[t(\"div\",{staticClass:\"emoji-mart-preview-emoji\"},[t(\"emoji\",{attrs:{data:e.data,emoji:e.emoji,native:e.emojiProps.native,skin:e.emojiProps.skin,set:e.emojiProps.set}})],1),e._v(\" \"),t(\"div\",{staticClass:\"emoji-mart-preview-data\"},[t(\"div\",{staticClass:\"emoji-mart-preview-name\"},[e._v(e._s(e.emoji.name))]),e._v(\" \"),t(\"div\",{staticClass:\"emoji-mart-preview-shortnames\"},e._l(e.emojiShortNames,(function(i){return t(\"span\",{key:i,staticClass:\"emoji-mart-preview-shortname\"},[e._v(\":\"+e._s(i)+\":\")])})),0),e._v(\" \"),t(\"div\",{staticClass:\"emoji-mart-preview-emoticons\"},e._l(e.emojiEmoticons,(function(i){return t(\"span\",{key:i,staticClass:\"emoji-mart-preview-emoticon\"},[e._v(e._s(i))])})),0)])]:[t(\"div\",{staticClass:\"emoji-mart-preview-emoji\"},[t(\"emoji\",{attrs:{data:e.data,emoji:e.idleEmoji,native:e.emojiProps.native,skin:e.emojiProps.skin,set:e.emojiProps.set}})],1),e._v(\" \"),t(\"div\",{staticClass:\"emoji-mart-preview-data\"},[t(\"span\",{staticClass:\"emoji-mart-title-label\"},[e._v(e._s(e.title))])]),e._v(\" \"),e.showSkinTones?t(\"div\",{staticClass:\"emoji-mart-preview-skins\"},[t(\"skins\",{attrs:{skin:e.skinProps.skin},on:{change:function(t){return e.onSkinChange(t)}}})],1):e._e()]],2)}),[],!1,null,null,null).exports,K=b({props:{data:{type:Object,required:!0},i18n:{type:Object,required:!0},autoFocus:{type:Boolean,default:!1},onSearch:{type:Function,required:!0},onArrowLeft:{type:Function,required:!1},onArrowRight:{type:Function,required:!1},onArrowDown:{type:Function,required:!1},onArrowUp:{type:Function,required:!1},onEnter:{type:Function,required:!1}},emits:[\"search\",\"enter\",\"arrowUp\",\"arrowDown\",\"arrowRight\",\"arrowLeft\"],data:function(){return{value:\"\"}},computed:{emojiIndex:function(){return this.data}},watch:{value:function(){this.$emit(\"search\",this.value)}},methods:{clear:function(){this.value=\"\"}},mounted:function(){var e=this.$el.querySelector(\"input\");this.autoFocus&&e.focus()}},(function(){var e=this,t=e._self._c;return t(\"div\",{staticClass:\"emoji-mart-search\"},[t(\"input\",{directives:[{name:\"model\",rawName:\"v-model\",value:e.value,expression:\"value\"}],attrs:{type:\"text\",placeholder:e.i18n.search,role:\"textbox\",\"aria-autocomplete\":\"list\",\"aria-owns\":\"emoji-mart-list\",\"aria-label\":\"Search for an emoji\",\"aria-describedby\":\"emoji-mart-search-description\"},domProps:{value:e.value},on:{keydown:[function(t){return!t.type.indexOf(\"key\")&&e._k(t.keyCode,\"left\",37,t.key,[\"Left\",\"ArrowLeft\"])||\"button\"in t&&0!==t.button?null:function(t){return e.$emit(\"arrowLeft\",t)}.apply(null,arguments)},function(t){return!t.type.indexOf(\"key\")&&e._k(t.keyCode,\"right\",39,t.key,[\"Right\",\"ArrowRight\"])||\"button\"in t&&2!==t.button?null:function(){return e.$emit(\"arrowRight\")}.apply(null,arguments)},function(t){return!t.type.indexOf(\"key\")&&e._k(t.keyCode,\"down\",40,t.key,[\"Down\",\"ArrowDown\"])?null:function(){return e.$emit(\"arrowDown\")}.apply(null,arguments)},function(t){return!t.type.indexOf(\"key\")&&e._k(t.keyCode,\"up\",38,t.key,[\"Up\",\"ArrowUp\"])?null:function(t){return e.$emit(\"arrowUp\",t)}.apply(null,arguments)},function(t){return!t.type.indexOf(\"key\")&&e._k(t.keyCode,\"enter\",13,t.key,\"Enter\")?null:function(){return e.$emit(\"enter\")}.apply(null,arguments)}],input:function(t){t.target.composing||(e.value=t.target.value)}}}),e._v(\" \"),t(\"span\",{staticClass:\"hidden\",attrs:{id:\"emoji-picker-search-description\"}},[e._v(\"Use the left, right, up and down arrow keys to navigate the emoji search\\n results.\")])])}),[],!1,null,null,null),Q=K.exports;function Y(e,t){(null==t||t>e.length)&&(t=e.length);for(var i=0,n=new Array(t);i0})),this._categories[0].first=!0,Object.freeze(this._categories),this.activeCategory=this._categories[0],this.searchEmojis=null,this.previewEmoji=null,this.previewEmojiCategoryIdx=0,this.previewEmojiIdx=-1}),[{key:\"onScroll\",value:function(){var e=this._vm.$refs.scroll;if(e){for(var t=e.scrollTop,i=this.filteredCategories[0],n=0,r=this.filteredCategories.length;nt)break;i=o}this.activeCategory=i}}},{key:\"allCategories\",get:function(){return this._categories}},{key:\"filteredCategories\",get:function(){return this.searchEmojis?[{id:\"search\",name:\"Search\",emojis:this.searchEmojis}]:this._categories.filter((function(e){return e.emojis.length>0}))}},{key:\"previewEmojiCategory\",get:function(){return this.previewEmojiCategoryIdx>=0?this.filteredCategories[this.previewEmojiCategoryIdx]:null}},{key:\"onAnchorClick\",value:function(e){var t=this;if(!this.searchEmojis){var i=this.filteredCategories.indexOf(e),n=this._vm.getCategoryComponent(i);this._vm.infiniteScroll?function(){if(n){var i=n.$el.offsetTop;e.first&&(i=0),t._vm.$refs.scroll.scrollTop=i}}():this.activeCategory=this.filteredCategories[i]}}},{key:\"onSearch\",value:function(e){var t=this._data.search(e,this.maxSearchResults);this.searchEmojis=t,this.previewEmojiCategoryIdx=0,this.previewEmojiIdx=0,this.updatePreviewEmoji()}},{key:\"onEmojiEnter\",value:function(e){this.previewEmoji=e,this.previewEmojiIdx=-1,this.previewEmojiCategoryIdx=-1}},{key:\"onEmojiLeave\",value:function(e){this.previewEmoji=null}},{key:\"onArrowLeft\",value:function(){this.previewEmojiIdx>0?this.previewEmojiIdx-=1:(this.previewEmojiCategoryIdx-=1,this.previewEmojiCategoryIdx<0?this.previewEmojiCategoryIdx=0:this.previewEmojiIdx=this.filteredCategories[this.previewEmojiCategoryIdx].emojis.length-1),this.updatePreviewEmoji()}},{key:\"onArrowRight\",value:function(){this.previewEmojiIdx=this.filteredCategories.length?this.previewEmojiCategoryIdx=this.filteredCategories.length-1:this.previewEmojiIdx=0),this.updatePreviewEmoji()}},{key:\"onArrowDown\",value:function(){if(-1==this.previewEmojiIdx)return this.onArrowRight();var e=this.filteredCategories[this.previewEmojiCategoryIdx].emojis.length,t=this._perLine;this.previewEmojiIdx+t>e&&(t=e%this._perLine);for(var i=0;i0?this.filteredCategories[this.previewEmojiCategoryIdx-1].emojis.length%this._perLine:0);for(var t=0;tn+t.scrollTop&&(t.scrollTop+=i.offsetHeight),i&&i.offsetTop>> 0;\n var thisArg = arguments[1];\n var value;\n\n for (var i = 0; i < length; i++) {\n value = list[i];\n if (predicate.call(thisArg, value, i, list)) {\n return value\n }\n }\n return undefined\n };\n}\n\nif (window && typeof window.CustomEvent !== \"function\") {\n function CustomEvent$1(event, params) {\n params = params || {\n bubbles: false,\n cancelable: false,\n detail: undefined\n };\n var evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n return evt\n }\n\n if (typeof window.Event !== 'undefined') {\n CustomEvent$1.prototype = window.Event.prototype;\n }\n\n window.CustomEvent = CustomEvent$1;\n}\n\nclass TributeEvents {\n constructor(tribute) {\n this.tribute = tribute;\n this.tribute.events = this;\n }\n\n static keys() {\n return [\n {\n key: 9,\n value: \"TAB\"\n },\n {\n key: 8,\n value: \"DELETE\"\n },\n {\n key: 13,\n value: \"ENTER\"\n },\n {\n key: 27,\n value: \"ESCAPE\"\n },\n {\n key: 32,\n value: \"SPACE\"\n },\n {\n key: 38,\n value: \"UP\"\n },\n {\n key: 40,\n value: \"DOWN\"\n }\n ];\n }\n\n bind(element) {\n element.boundKeydown = this.keydown.bind(element, this);\n element.boundKeyup = this.keyup.bind(element, this);\n element.boundInput = this.input.bind(element, this);\n\n element.addEventListener(\"keydown\", element.boundKeydown, false);\n element.addEventListener(\"keyup\", element.boundKeyup, false);\n element.addEventListener(\"input\", element.boundInput, false);\n }\n\n unbind(element) {\n element.removeEventListener(\"keydown\", element.boundKeydown, false);\n element.removeEventListener(\"keyup\", element.boundKeyup, false);\n element.removeEventListener(\"input\", element.boundInput, false);\n\n delete element.boundKeydown;\n delete element.boundKeyup;\n delete element.boundInput;\n }\n\n keydown(instance, event) {\n if (instance.shouldDeactivate(event)) {\n instance.tribute.isActive = false;\n instance.tribute.hideMenu();\n }\n\n let element = this;\n instance.commandEvent = false;\n\n TributeEvents.keys().forEach(o => {\n if (o.key === event.keyCode) {\n instance.commandEvent = true;\n instance.callbacks()[o.value.toLowerCase()](event, element);\n }\n });\n }\n\n input(instance, event) {\n instance.inputEvent = true;\n instance.keyup.call(this, instance, event);\n }\n\n click(instance, event) {\n let tribute = instance.tribute;\n if (tribute.menu && tribute.menu.contains(event.target)) {\n let li = event.target;\n event.preventDefault();\n event.stopPropagation();\n while (li.nodeName.toLowerCase() !== \"li\") {\n li = li.parentNode;\n if (!li || li === tribute.menu) {\n throw new Error(\"cannot find the
container for the click\");\n }\n }\n tribute.selectItemAtIndex(li.getAttribute(\"data-index\"), event);\n tribute.hideMenu();\n\n // TODO: should fire with externalTrigger and target is outside of menu\n } else if (tribute.current.element && !tribute.current.externalTrigger) {\n tribute.current.externalTrigger = false;\n setTimeout(() => tribute.hideMenu());\n }\n }\n\n keyup(instance, event) {\n if (instance.inputEvent) {\n instance.inputEvent = false;\n }\n instance.updateSelection(this);\n\n if (event.keyCode === 27) return;\n\n if (!instance.tribute.allowSpaces && instance.tribute.hasTrailingSpace) {\n instance.tribute.hasTrailingSpace = false;\n instance.commandEvent = true;\n instance.callbacks()[\"space\"](event, this);\n return;\n }\n\n if (!instance.tribute.isActive) {\n if (instance.tribute.autocompleteMode) {\n instance.callbacks().triggerChar(event, this, \"\");\n } else {\n let keyCode = instance.getKeyCode(instance, this, event);\n\n if (isNaN(keyCode) || !keyCode) return;\n\n let trigger = instance.tribute.triggers().find(trigger => {\n return trigger.charCodeAt(0) === keyCode;\n });\n\n if (typeof trigger !== \"undefined\") {\n instance.callbacks().triggerChar(event, this, trigger);\n }\n }\n }\n\n if (\n instance.tribute.current.mentionText.length <\n instance.tribute.current.collection.menuShowMinLength\n ) {\n return;\n }\n\n if (\n ((instance.tribute.current.trigger ||\n instance.tribute.autocompleteMode) &&\n instance.commandEvent === false) ||\n (instance.tribute.isActive && event.keyCode === 8)\n ) {\n instance.tribute.showMenuFor(this, true);\n }\n }\n\n shouldDeactivate(event) {\n if (!this.tribute.isActive) return false;\n\n if (this.tribute.current.mentionText.length === 0) {\n let eventKeyPressed = false;\n TributeEvents.keys().forEach(o => {\n if (event.keyCode === o.key) eventKeyPressed = true;\n });\n\n return !eventKeyPressed;\n }\n\n return false;\n }\n\n getKeyCode(instance, el, event) {\n let tribute = instance.tribute;\n let info = tribute.range.getTriggerInfo(\n false,\n tribute.hasTrailingSpace,\n true,\n tribute.allowSpaces,\n tribute.autocompleteMode\n );\n\n if (info) {\n return info.mentionTriggerChar.charCodeAt(0);\n } else {\n return false;\n }\n }\n\n updateSelection(el) {\n this.tribute.current.element = el;\n let info = this.tribute.range.getTriggerInfo(\n false,\n this.tribute.hasTrailingSpace,\n true,\n this.tribute.allowSpaces,\n this.tribute.autocompleteMode\n );\n\n if (info) {\n this.tribute.current.selectedPath = info.mentionSelectedPath;\n this.tribute.current.mentionText = info.mentionText;\n this.tribute.current.selectedOffset = info.mentionSelectedOffset;\n }\n }\n\n callbacks() {\n return {\n triggerChar: (e, el, trigger) => {\n let tribute = this.tribute;\n tribute.current.trigger = trigger;\n\n let collectionItem = tribute.collection.find(item => {\n return item.trigger === trigger;\n });\n\n tribute.current.collection = collectionItem;\n\n if (\n tribute.current.mentionText.length >=\n tribute.current.collection.menuShowMinLength &&\n tribute.inputEvent\n ) {\n tribute.showMenuFor(el, true);\n }\n },\n enter: (e, el) => {\n // choose selection\n if (this.tribute.isActive && this.tribute.current.filteredItems) {\n e.preventDefault();\n e.stopPropagation();\n setTimeout(() => {\n this.tribute.selectItemAtIndex(this.tribute.menuSelected, e);\n this.tribute.hideMenu();\n }, 0);\n }\n },\n escape: (e, el) => {\n if (this.tribute.isActive) {\n e.preventDefault();\n e.stopPropagation();\n this.tribute.isActive = false;\n this.tribute.hideMenu();\n }\n },\n tab: (e, el) => {\n // choose first match\n this.callbacks().enter(e, el);\n },\n space: (e, el) => {\n if (this.tribute.isActive) {\n if (this.tribute.spaceSelectsMatch) {\n this.callbacks().enter(e, el);\n } else if (!this.tribute.allowSpaces) {\n e.stopPropagation();\n setTimeout(() => {\n this.tribute.hideMenu();\n this.tribute.isActive = false;\n }, 0);\n }\n }\n },\n up: (e, el) => {\n // navigate up ul\n if (this.tribute.isActive && this.tribute.current.filteredItems) {\n e.preventDefault();\n e.stopPropagation();\n let count = this.tribute.current.filteredItems.length,\n selected = this.tribute.menuSelected;\n\n if (count > selected && selected > 0) {\n this.tribute.menuSelected--;\n this.setActiveLi();\n } else if (selected === 0) {\n this.tribute.menuSelected = count - 1;\n this.setActiveLi();\n this.tribute.menu.scrollTop = this.tribute.menu.scrollHeight;\n }\n }\n },\n down: (e, el) => {\n // navigate down ul\n if (this.tribute.isActive && this.tribute.current.filteredItems) {\n e.preventDefault();\n e.stopPropagation();\n let count = this.tribute.current.filteredItems.length - 1,\n selected = this.tribute.menuSelected;\n\n if (count > selected) {\n this.tribute.menuSelected++;\n this.setActiveLi();\n } else if (count === selected) {\n this.tribute.menuSelected = 0;\n this.setActiveLi();\n this.tribute.menu.scrollTop = 0;\n }\n }\n },\n delete: (e, el) => {\n if (\n this.tribute.isActive &&\n this.tribute.current.mentionText.length < 1\n ) {\n this.tribute.hideMenu();\n } else if (this.tribute.isActive) {\n this.tribute.showMenuFor(el);\n }\n }\n };\n }\n\n setActiveLi(index) {\n let lis = this.tribute.menu.querySelectorAll(\"li\"),\n length = lis.length >>> 0;\n\n if (index) this.tribute.menuSelected = parseInt(index);\n\n for (let i = 0; i < length; i++) {\n let li = lis[i];\n if (i === this.tribute.menuSelected) {\n li.classList.add(this.tribute.current.collection.selectClass);\n\n let liClientRect = li.getBoundingClientRect();\n let menuClientRect = this.tribute.menu.getBoundingClientRect();\n\n if (liClientRect.bottom > menuClientRect.bottom) {\n let scrollDistance = liClientRect.bottom - menuClientRect.bottom;\n this.tribute.menu.scrollTop += scrollDistance;\n } else if (liClientRect.top < menuClientRect.top) {\n let scrollDistance = menuClientRect.top - liClientRect.top;\n this.tribute.menu.scrollTop -= scrollDistance;\n }\n } else {\n li.classList.remove(this.tribute.current.collection.selectClass);\n }\n }\n }\n\n getFullHeight(elem, includeMargin) {\n let height = elem.getBoundingClientRect().height;\n\n if (includeMargin) {\n let style = elem.currentStyle || window.getComputedStyle(elem);\n return (\n height + parseFloat(style.marginTop) + parseFloat(style.marginBottom)\n );\n }\n\n return height;\n }\n}\n\nclass TributeMenuEvents {\n constructor(tribute) {\n this.tribute = tribute;\n this.tribute.menuEvents = this;\n this.menu = this.tribute.menu;\n }\n\n bind(menu) {\n this.menuClickEvent = this.tribute.events.click.bind(null, this);\n this.menuContainerScrollEvent = this.debounce(\n () => {\n if (this.tribute.isActive) {\n this.tribute.showMenuFor(this.tribute.current.element, false);\n }\n },\n 300,\n false\n );\n this.windowResizeEvent = this.debounce(\n () => {\n if (this.tribute.isActive) {\n this.tribute.range.positionMenuAtCaret(true);\n }\n },\n 300,\n false\n );\n\n // fixes IE11 issues with mousedown\n this.tribute.range\n .getDocument()\n .addEventListener(\"MSPointerDown\", this.menuClickEvent, false);\n this.tribute.range\n .getDocument()\n .addEventListener(\"mousedown\", this.menuClickEvent, false);\n window.addEventListener(\"resize\", this.windowResizeEvent);\n\n if (this.menuContainer) {\n this.menuContainer.addEventListener(\n \"scroll\",\n this.menuContainerScrollEvent,\n false\n );\n } else {\n window.addEventListener(\"scroll\", this.menuContainerScrollEvent);\n }\n }\n\n unbind(menu) {\n this.tribute.range\n .getDocument()\n .removeEventListener(\"mousedown\", this.menuClickEvent, false);\n this.tribute.range\n .getDocument()\n .removeEventListener(\"MSPointerDown\", this.menuClickEvent, false);\n window.removeEventListener(\"resize\", this.windowResizeEvent);\n\n if (this.menuContainer) {\n this.menuContainer.removeEventListener(\n \"scroll\",\n this.menuContainerScrollEvent,\n false\n );\n } else {\n window.removeEventListener(\"scroll\", this.menuContainerScrollEvent);\n }\n }\n\n debounce(func, wait, immediate) {\n var timeout;\n return () => {\n var context = this,\n args = arguments;\n var later = () => {\n timeout = null;\n if (!immediate) func.apply(context, args);\n };\n var callNow = immediate && !timeout;\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n if (callNow) func.apply(context, args);\n };\n }\n}\n\n// Thanks to https://github.com/jeff-collins/ment.io\n\nclass TributeRange {\n constructor(tribute) {\n this.tribute = tribute;\n this.tribute.range = this;\n }\n\n getDocument() {\n let iframe;\n if (this.tribute.current.collection) {\n iframe = this.tribute.current.collection.iframe;\n }\n\n if (!iframe) {\n return document\n }\n\n return iframe.contentWindow.document\n }\n\n positionMenuAtCaret(scrollTo) {\n let context = this.tribute.current,\n coordinates;\n\n let info = this.getTriggerInfo(false, this.tribute.hasTrailingSpace, true, this.tribute.allowSpaces, this.tribute.autocompleteMode);\n\n if (typeof info !== 'undefined') {\n\n if(!this.tribute.positionMenu){\n this.tribute.menu.style.cssText = `display: block;`;\n return\n }\n\n if (!this.isContentEditable(context.element)) {\n coordinates = this.getTextAreaOrInputUnderlinePosition(this.tribute.current.element,\n info.mentionPosition);\n }\n else {\n coordinates = this.getContentEditableCaretPosition(info.mentionPosition);\n }\n\n this.tribute.menu.style.cssText = `top: ${coordinates.top}px;\n left: ${coordinates.left}px;\n right: ${coordinates.right}px;\n bottom: ${coordinates.bottom}px;\n position: absolute;\n display: block;`;\n\n if (coordinates.left === 'auto') {\n this.tribute.menu.style.left = 'auto';\n }\n\n if (coordinates.top === 'auto') {\n this.tribute.menu.style.top = 'auto';\n }\n\n if (scrollTo) this.scrollIntoView();\n\n window.setTimeout(() => {\n let menuDimensions = {\n width: this.tribute.menu.offsetWidth,\n height: this.tribute.menu.offsetHeight\n };\n let menuIsOffScreen = this.isMenuOffScreen(coordinates, menuDimensions);\n\n let menuIsOffScreenHorizontally = window.innerWidth > menuDimensions.width && (menuIsOffScreen.left || menuIsOffScreen.right);\n let menuIsOffScreenVertically = window.innerHeight > menuDimensions.height && (menuIsOffScreen.top || menuIsOffScreen.bottom);\n if (menuIsOffScreenHorizontally || menuIsOffScreenVertically) {\n this.tribute.menu.style.cssText = 'display: none';\n this.positionMenuAtCaret(scrollTo);\n }\n }, 0);\n\n } else {\n this.tribute.menu.style.cssText = 'display: none';\n }\n }\n\n get menuContainerIsBody() {\n return this.tribute.menuContainer === document.body || !this.tribute.menuContainer;\n }\n\n\n selectElement(targetElement, path, offset) {\n let range;\n let elem = targetElement;\n\n if (path) {\n for (var i = 0; i < path.length; i++) {\n elem = elem.childNodes[path[i]];\n if (elem === undefined) {\n return\n }\n while (elem.length < offset) {\n offset -= elem.length;\n elem = elem.nextSibling;\n }\n if (elem.childNodes.length === 0 && !elem.length) {\n elem = elem.previousSibling;\n }\n }\n }\n let sel = this.getWindowSelection();\n\n range = this.getDocument().createRange();\n range.setStart(elem, offset);\n range.setEnd(elem, offset);\n range.collapse(true);\n\n try {\n sel.removeAllRanges();\n } catch (error) {}\n\n sel.addRange(range);\n targetElement.focus();\n }\n\n replaceTriggerText(text, requireLeadingSpace, hasTrailingSpace, originalEvent, item) {\n let info = this.getTriggerInfo(true, hasTrailingSpace, requireLeadingSpace, this.tribute.allowSpaces, this.tribute.autocompleteMode);\n\n if (info !== undefined) {\n let context = this.tribute.current;\n let replaceEvent = new CustomEvent('tribute-replaced', {\n detail: {\n item: item,\n instance: context,\n context: info,\n event: originalEvent,\n }\n });\n\n if (!this.isContentEditable(context.element)) {\n let myField = this.tribute.current.element;\n let textSuffix = typeof this.tribute.replaceTextSuffix == 'string'\n ? this.tribute.replaceTextSuffix\n : ' ';\n text += textSuffix;\n let startPos = info.mentionPosition;\n let endPos = info.mentionPosition + info.mentionText.length + textSuffix.length;\n if (!this.tribute.autocompleteMode) {\n endPos += info.mentionTriggerChar.length - 1;\n }\n myField.value = myField.value.substring(0, startPos) + text +\n myField.value.substring(endPos, myField.value.length);\n myField.selectionStart = startPos + text.length;\n myField.selectionEnd = startPos + text.length;\n } else {\n // add a space to the end of the pasted text\n let textSuffix = typeof this.tribute.replaceTextSuffix == 'string'\n ? this.tribute.replaceTextSuffix\n : '\\xA0';\n text += textSuffix;\n let endPos = info.mentionPosition + info.mentionText.length;\n if (!this.tribute.autocompleteMode) {\n endPos += info.mentionTriggerChar.length;\n }\n this.pasteHtml(text, info.mentionPosition, endPos);\n }\n\n context.element.dispatchEvent(new CustomEvent('input', { bubbles: true }));\n context.element.dispatchEvent(replaceEvent);\n }\n }\n\n pasteHtml(html, startPos, endPos) {\n let range, sel;\n sel = this.getWindowSelection();\n range = this.getDocument().createRange();\n range.setStart(sel.anchorNode, startPos);\n range.setEnd(sel.anchorNode, endPos);\n range.deleteContents();\n\n let el = this.getDocument().createElement('div');\n el.innerHTML = html;\n let frag = this.getDocument().createDocumentFragment(),\n node, lastNode;\n while ((node = el.firstChild)) {\n lastNode = frag.appendChild(node);\n }\n range.insertNode(frag);\n\n // Preserve the selection\n if (lastNode) {\n range = range.cloneRange();\n range.setStartAfter(lastNode);\n range.collapse(true);\n sel.removeAllRanges();\n sel.addRange(range);\n }\n }\n\n getWindowSelection() {\n if (this.tribute.collection.iframe) {\n return this.tribute.collection.iframe.contentWindow.getSelection()\n }\n\n return window.getSelection()\n }\n\n getNodePositionInParent(element) {\n if (element.parentNode === null) {\n return 0\n }\n\n for (var i = 0; i < element.parentNode.childNodes.length; i++) {\n let node = element.parentNode.childNodes[i];\n\n if (node === element) {\n return i\n }\n }\n }\n\n getContentEditableSelectedPath(ctx) {\n let sel = this.getWindowSelection();\n let selected = sel.anchorNode;\n let path = [];\n let offset;\n\n if (selected != null) {\n let i;\n let ce = selected.contentEditable;\n while (selected !== null && ce !== 'true') {\n i = this.getNodePositionInParent(selected);\n path.push(i);\n selected = selected.parentNode;\n if (selected !== null) {\n ce = selected.contentEditable;\n }\n }\n path.reverse();\n\n // getRangeAt may not exist, need alternative\n offset = sel.getRangeAt(0).startOffset;\n\n return {\n selected: selected,\n path: path,\n offset: offset\n }\n }\n }\n\n getTextPrecedingCurrentSelection() {\n let context = this.tribute.current,\n text = '';\n\n if (!this.isContentEditable(context.element)) {\n let textComponent = this.tribute.current.element;\n if (textComponent) {\n let startPos = textComponent.selectionStart;\n if (textComponent.value && startPos >= 0) {\n text = textComponent.value.substring(0, startPos);\n }\n }\n\n } else {\n let selectedElem = this.getWindowSelection().anchorNode;\n\n if (selectedElem != null) {\n let workingNodeContent = selectedElem.textContent;\n let selectStartOffset = this.getWindowSelection().getRangeAt(0).startOffset;\n\n if (workingNodeContent && selectStartOffset >= 0) {\n text = workingNodeContent.substring(0, selectStartOffset);\n }\n }\n }\n\n return text\n }\n\n getLastWordInText(text) {\n text = text.replace(/\\u00A0/g, ' '); // https://stackoverflow.com/questions/29850407/how-do-i-replace-unicode-character-u00a0-with-a-space-in-javascript\n let wordsArray = text.split(/\\s+/);\n let worldsCount = wordsArray.length - 1;\n return wordsArray[worldsCount].trim()\n }\n\n getTriggerInfo(menuAlreadyActive, hasTrailingSpace, requireLeadingSpace, allowSpaces, isAutocomplete) {\n let ctx = this.tribute.current;\n let selected, path, offset;\n\n if (!this.isContentEditable(ctx.element)) {\n selected = this.tribute.current.element;\n } else {\n let selectionInfo = this.getContentEditableSelectedPath(ctx);\n\n if (selectionInfo) {\n selected = selectionInfo.selected;\n path = selectionInfo.path;\n offset = selectionInfo.offset;\n }\n }\n\n let effectiveRange = this.getTextPrecedingCurrentSelection();\n let lastWordOfEffectiveRange = this.getLastWordInText(effectiveRange);\n\n if (isAutocomplete) {\n return {\n mentionPosition: effectiveRange.length - lastWordOfEffectiveRange.length,\n mentionText: lastWordOfEffectiveRange,\n mentionSelectedElement: selected,\n mentionSelectedPath: path,\n mentionSelectedOffset: offset\n }\n }\n\n if (effectiveRange !== undefined && effectiveRange !== null) {\n let mostRecentTriggerCharPos = -1;\n let triggerChar;\n\n this.tribute.collection.forEach(config => {\n let c = config.trigger;\n let idx = config.requireLeadingSpace ?\n this.lastIndexWithLeadingSpace(effectiveRange, c) :\n effectiveRange.lastIndexOf(c);\n\n if (idx > mostRecentTriggerCharPos) {\n mostRecentTriggerCharPos = idx;\n triggerChar = c;\n requireLeadingSpace = config.requireLeadingSpace;\n }\n });\n\n if (mostRecentTriggerCharPos >= 0 &&\n (\n mostRecentTriggerCharPos === 0 ||\n !requireLeadingSpace ||\n /[\\xA0\\s]/g.test(\n effectiveRange.substring(\n mostRecentTriggerCharPos - 1,\n mostRecentTriggerCharPos)\n )\n )\n ) {\n let currentTriggerSnippet = effectiveRange.substring(mostRecentTriggerCharPos + triggerChar.length,\n effectiveRange.length);\n\n triggerChar = effectiveRange.substring(mostRecentTriggerCharPos, mostRecentTriggerCharPos + triggerChar.length);\n let firstSnippetChar = currentTriggerSnippet.substring(0, 1);\n let leadingSpace = currentTriggerSnippet.length > 0 &&\n (\n firstSnippetChar === ' ' ||\n firstSnippetChar === '\\xA0'\n );\n if (hasTrailingSpace) {\n currentTriggerSnippet = currentTriggerSnippet.trim();\n }\n\n let regex = allowSpaces ? /[^\\S ]/g : /[\\xA0\\s]/g;\n\n this.tribute.hasTrailingSpace = regex.test(currentTriggerSnippet);\n\n if (!leadingSpace && (menuAlreadyActive || !(regex.test(currentTriggerSnippet)))) {\n return {\n mentionPosition: mostRecentTriggerCharPos,\n mentionText: currentTriggerSnippet,\n mentionSelectedElement: selected,\n mentionSelectedPath: path,\n mentionSelectedOffset: offset,\n mentionTriggerChar: triggerChar\n }\n }\n }\n }\n }\n\n lastIndexWithLeadingSpace (str, trigger) {\n let reversedStr = str.split('').reverse().join('');\n let index = -1;\n\n for (let cidx = 0, len = str.length; cidx < len; cidx++) {\n let firstChar = cidx === str.length - 1;\n let leadingSpace = /\\s/.test(reversedStr[cidx + 1]);\n\n let match = true;\n for (let triggerIdx = trigger.length - 1; triggerIdx >= 0; triggerIdx--) {\n if (trigger[triggerIdx] !== reversedStr[cidx-triggerIdx]) {\n match = false;\n break\n }\n }\n\n if (match && (firstChar || leadingSpace)) {\n index = str.length - 1 - cidx;\n break\n }\n }\n\n return index\n }\n\n isContentEditable(element) {\n return element.nodeName !== 'INPUT' && element.nodeName !== 'TEXTAREA'\n }\n\n isMenuOffScreen(coordinates, menuDimensions) {\n let windowWidth = window.innerWidth;\n let windowHeight = window.innerHeight;\n let doc = document.documentElement;\n let windowLeft = (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0);\n let windowTop = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0);\n\n let menuTop = typeof coordinates.top === 'number' ? coordinates.top : windowTop + windowHeight - coordinates.bottom - menuDimensions.height;\n let menuRight = typeof coordinates.right === 'number' ? coordinates.right : coordinates.left + menuDimensions.width;\n let menuBottom = typeof coordinates.bottom === 'number' ? coordinates.bottom : coordinates.top + menuDimensions.height;\n let menuLeft = typeof coordinates.left === 'number' ? coordinates.left : windowLeft + windowWidth - coordinates.right - menuDimensions.width;\n\n return {\n top: menuTop < Math.floor(windowTop),\n right: menuRight > Math.ceil(windowLeft + windowWidth),\n bottom: menuBottom > Math.ceil(windowTop + windowHeight),\n left: menuLeft < Math.floor(windowLeft)\n }\n }\n\n getMenuDimensions() {\n // Width of the menu depends of its contents and position\n // We must check what its width would be without any obstruction\n // This way, we can achieve good positioning for flipping the menu\n let dimensions = {\n width: null,\n height: null\n };\n\n this.tribute.menu.style.cssText = `top: 0px;\n left: 0px;\n position: fixed;\n display: block;\n visibility; hidden;`;\n dimensions.width = this.tribute.menu.offsetWidth;\n dimensions.height = this.tribute.menu.offsetHeight;\n\n this.tribute.menu.style.cssText = `display: none;`;\n\n return dimensions\n }\n\n getTextAreaOrInputUnderlinePosition(element, position, flipped) {\n let properties = ['direction', 'boxSizing', 'width', 'height', 'overflowX',\n 'overflowY', 'borderTopWidth', 'borderRightWidth',\n 'borderBottomWidth', 'borderLeftWidth', 'paddingTop',\n 'paddingRight', 'paddingBottom', 'paddingLeft',\n 'fontStyle', 'fontVariant', 'fontWeight', 'fontStretch',\n 'fontSize', 'fontSizeAdjust', 'lineHeight', 'fontFamily',\n 'textAlign', 'textTransform', 'textIndent',\n 'textDecoration', 'letterSpacing', 'wordSpacing'\n ];\n\n let isFirefox = (window.mozInnerScreenX !== null);\n\n let div = this.getDocument().createElement('div');\n div.id = 'input-textarea-caret-position-mirror-div';\n this.getDocument().body.appendChild(div);\n\n let style = div.style;\n let computed = window.getComputedStyle ? getComputedStyle(element) : element.currentStyle;\n\n style.whiteSpace = 'pre-wrap';\n if (element.nodeName !== 'INPUT') {\n style.wordWrap = 'break-word';\n }\n\n // position off-screen\n style.position = 'absolute';\n style.visibility = 'hidden';\n\n // transfer the element's properties to the div\n properties.forEach(prop => {\n style[prop] = computed[prop];\n });\n\n if (isFirefox) {\n style.width = `${(parseInt(computed.width) - 2)}px`;\n if (element.scrollHeight > parseInt(computed.height))\n style.overflowY = 'scroll';\n } else {\n style.overflow = 'hidden';\n }\n\n div.textContent = element.value.substring(0, position);\n\n if (element.nodeName === 'INPUT') {\n div.textContent = div.textContent.replace(/\\s/g, ' ');\n }\n\n let span = this.getDocument().createElement('span');\n span.textContent = element.value.substring(position) || '.';\n div.appendChild(span);\n\n let rect = element.getBoundingClientRect();\n let doc = document.documentElement;\n let windowLeft = (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0);\n let windowTop = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0);\n\n let top = 0;\n let left = 0;\n if (this.menuContainerIsBody) {\n top = rect.top;\n left = rect.left;\n }\n\n let coordinates = {\n top: top + windowTop + span.offsetTop + parseInt(computed.borderTopWidth) + parseInt(computed.fontSize) - element.scrollTop,\n left: left + windowLeft + span.offsetLeft + parseInt(computed.borderLeftWidth)\n };\n\n let windowWidth = window.innerWidth;\n let windowHeight = window.innerHeight;\n\n let menuDimensions = this.getMenuDimensions();\n let menuIsOffScreen = this.isMenuOffScreen(coordinates, menuDimensions);\n\n if (menuIsOffScreen.right) {\n coordinates.right = windowWidth - coordinates.left;\n coordinates.left = 'auto';\n }\n\n let parentHeight = this.tribute.menuContainer\n ? this.tribute.menuContainer.offsetHeight\n : this.getDocument().body.offsetHeight;\n\n if (menuIsOffScreen.bottom) {\n let parentRect = this.tribute.menuContainer\n ? this.tribute.menuContainer.getBoundingClientRect()\n : this.getDocument().body.getBoundingClientRect();\n let scrollStillAvailable = parentHeight - (windowHeight - parentRect.top);\n\n coordinates.bottom = scrollStillAvailable + (windowHeight - rect.top - span.offsetTop);\n coordinates.top = 'auto';\n }\n\n menuIsOffScreen = this.isMenuOffScreen(coordinates, menuDimensions);\n if (menuIsOffScreen.left) {\n coordinates.left = windowWidth > menuDimensions.width\n ? windowLeft + windowWidth - menuDimensions.width\n : windowLeft;\n delete coordinates.right;\n }\n if (menuIsOffScreen.top) {\n coordinates.top = windowHeight > menuDimensions.height\n ? windowTop + windowHeight - menuDimensions.height\n : windowTop;\n delete coordinates.bottom;\n }\n\n this.getDocument().body.removeChild(div);\n return coordinates\n }\n\n getContentEditableCaretPosition(selectedNodePosition) {\n let range;\n let sel = this.getWindowSelection();\n\n range = this.getDocument().createRange();\n range.setStart(sel.anchorNode, selectedNodePosition);\n range.setEnd(sel.anchorNode, selectedNodePosition);\n\n range.collapse(false);\n\n let rect = range.getBoundingClientRect();\n let doc = document.documentElement;\n let windowLeft = (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0);\n let windowTop = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0);\n\n let left = rect.left;\n let top = rect.top;\n\n let coordinates = {\n left: left + windowLeft,\n top: top + rect.height + windowTop\n };\n let windowWidth = window.innerWidth;\n let windowHeight = window.innerHeight;\n\n let menuDimensions = this.getMenuDimensions();\n let menuIsOffScreen = this.isMenuOffScreen(coordinates, menuDimensions);\n\n if (menuIsOffScreen.right) {\n coordinates.left = 'auto';\n coordinates.right = windowWidth - rect.left - windowLeft;\n }\n\n let parentHeight = this.tribute.menuContainer\n ? this.tribute.menuContainer.offsetHeight\n : this.getDocument().body.offsetHeight;\n\n if (menuIsOffScreen.bottom) {\n let parentRect = this.tribute.menuContainer\n ? this.tribute.menuContainer.getBoundingClientRect()\n : this.getDocument().body.getBoundingClientRect();\n let scrollStillAvailable = parentHeight - (windowHeight - parentRect.top);\n\n coordinates.top = 'auto';\n coordinates.bottom = scrollStillAvailable + (windowHeight - rect.top);\n }\n\n menuIsOffScreen = this.isMenuOffScreen(coordinates, menuDimensions);\n if (menuIsOffScreen.left) {\n coordinates.left = windowWidth > menuDimensions.width\n ? windowLeft + windowWidth - menuDimensions.width\n : windowLeft;\n delete coordinates.right;\n }\n if (menuIsOffScreen.top) {\n coordinates.top = windowHeight > menuDimensions.height\n ? windowTop + windowHeight - menuDimensions.height\n : windowTop;\n delete coordinates.bottom;\n }\n\n if (!this.menuContainerIsBody) {\n coordinates.left = coordinates.left ? coordinates.left - this.tribute.menuContainer.offsetLeft : coordinates.left;\n coordinates.top = coordinates.top ? coordinates.top - this.tribute.menuContainer.offsetTop : coordinates.top;\n }\n\n return coordinates\n }\n\n scrollIntoView(elem) {\n let reasonableBuffer = 20,\n clientRect;\n let maxScrollDisplacement = 100;\n let e = this.menu;\n\n if (typeof e === 'undefined') return;\n\n while (clientRect === undefined || clientRect.height === 0) {\n clientRect = e.getBoundingClientRect();\n\n if (clientRect.height === 0) {\n e = e.childNodes[0];\n if (e === undefined || !e.getBoundingClientRect) {\n return\n }\n }\n }\n\n let elemTop = clientRect.top;\n let elemBottom = elemTop + clientRect.height;\n\n if (elemTop < 0) {\n window.scrollTo(0, window.pageYOffset + clientRect.top - reasonableBuffer);\n } else if (elemBottom > window.innerHeight) {\n let maxY = window.pageYOffset + clientRect.top - reasonableBuffer;\n\n if (maxY - window.pageYOffset > maxScrollDisplacement) {\n maxY = window.pageYOffset + maxScrollDisplacement;\n }\n\n let targetY = window.pageYOffset - (window.innerHeight - elemBottom);\n\n if (targetY > maxY) {\n targetY = maxY;\n }\n\n window.scrollTo(0, targetY);\n }\n }\n}\n\n// Thanks to https://github.com/mattyork/fuzzy\nclass TributeSearch {\n constructor(tribute) {\n this.tribute = tribute;\n this.tribute.search = this;\n }\n\n simpleFilter(pattern, array) {\n return array.filter(string => {\n return this.test(pattern, string)\n })\n }\n\n test(pattern, string) {\n return this.match(pattern, string) !== null\n }\n\n match(pattern, string, opts) {\n opts = opts || {};\n let len = string.length,\n pre = opts.pre || '',\n post = opts.post || '',\n compareString = opts.caseSensitive && string || string.toLowerCase();\n\n if (opts.skip) {\n return {rendered: string, score: 0}\n }\n\n pattern = opts.caseSensitive && pattern || pattern.toLowerCase();\n\n let patternCache = this.traverse(compareString, pattern, 0, 0, []);\n if (!patternCache) {\n return null\n }\n return {\n rendered: this.render(string, patternCache.cache, pre, post),\n score: patternCache.score\n }\n }\n\n traverse(string, pattern, stringIndex, patternIndex, patternCache) {\n // if the pattern search at end\n if (pattern.length === patternIndex) {\n\n // calculate score and copy the cache containing the indices where it's found\n return {\n score: this.calculateScore(patternCache),\n cache: patternCache.slice()\n }\n }\n\n // if string at end or remaining pattern > remaining string\n if (string.length === stringIndex || pattern.length - patternIndex > string.length - stringIndex) {\n return undefined\n }\n\n let c = pattern[patternIndex];\n let index = string.indexOf(c, stringIndex);\n let best, temp;\n\n while (index > -1) {\n patternCache.push(index);\n temp = this.traverse(string, pattern, index + 1, patternIndex + 1, patternCache);\n patternCache.pop();\n\n // if downstream traversal failed, return best answer so far\n if (!temp) {\n return best\n }\n\n if (!best || best.score < temp.score) {\n best = temp;\n }\n\n index = string.indexOf(c, index + 1);\n }\n\n return best\n }\n\n calculateScore(patternCache) {\n let score = 0;\n let temp = 1;\n\n patternCache.forEach((index, i) => {\n if (i > 0) {\n if (patternCache[i - 1] + 1 === index) {\n temp += temp + 1;\n }\n else {\n temp = 1;\n }\n }\n\n score += temp;\n });\n\n return score\n }\n\n render(string, indices, pre, post) {\n var rendered = string.substring(0, indices[0]);\n\n indices.forEach((index, i) => {\n rendered += pre + string[index] + post +\n string.substring(index + 1, (indices[i + 1]) ? indices[i + 1] : string.length);\n });\n\n return rendered\n }\n\n filter(pattern, arr, opts) {\n opts = opts || {};\n return arr\n .reduce((prev, element, idx, arr) => {\n let str = element;\n\n if (opts.extract) {\n str = opts.extract(element);\n\n if (!str) { // take care of undefineds / nulls / etc.\n str = '';\n }\n }\n\n let rendered = this.match(pattern, str, opts);\n\n if (rendered != null) {\n prev[prev.length] = {\n string: rendered.rendered,\n score: rendered.score,\n index: idx,\n original: element\n };\n }\n\n return prev\n }, [])\n\n .sort((a, b) => {\n let compare = b.score - a.score;\n if (compare) return compare\n return a.index - b.index\n })\n }\n}\n\nclass Tribute {\n constructor({\n values = null,\n iframe = null,\n selectClass = \"highlight\",\n containerClass = \"tribute-container\",\n itemClass = \"\",\n trigger = \"@\",\n autocompleteMode = false,\n selectTemplate = null,\n menuItemTemplate = null,\n lookup = \"key\",\n fillAttr = \"value\",\n collection = null,\n menuContainer = null,\n noMatchTemplate = null,\n requireLeadingSpace = true,\n allowSpaces = false,\n replaceTextSuffix = null,\n positionMenu = true,\n spaceSelectsMatch = false,\n searchOpts = {},\n menuItemLimit = null,\n menuShowMinLength = 0\n }) {\n this.autocompleteMode = autocompleteMode;\n this.menuSelected = 0;\n this.current = {};\n this.inputEvent = false;\n this.isActive = false;\n this.menuContainer = menuContainer;\n this.allowSpaces = allowSpaces;\n this.replaceTextSuffix = replaceTextSuffix;\n this.positionMenu = positionMenu;\n this.hasTrailingSpace = false;\n this.spaceSelectsMatch = spaceSelectsMatch;\n\n if (this.autocompleteMode) {\n trigger = \"\";\n allowSpaces = false;\n }\n\n if (values) {\n this.collection = [\n {\n // symbol that starts the lookup\n trigger: trigger,\n\n // is it wrapped in an iframe\n iframe: iframe,\n\n // class applied to selected item\n selectClass: selectClass,\n\n // class applied to the Container\n containerClass: containerClass,\n\n // class applied to each item\n itemClass: itemClass,\n\n // function called on select that retuns the content to insert\n selectTemplate: (\n selectTemplate || Tribute.defaultSelectTemplate\n ).bind(this),\n\n // function called that returns content for an item\n menuItemTemplate: (\n menuItemTemplate || Tribute.defaultMenuItemTemplate\n ).bind(this),\n\n // function called when menu is empty, disables hiding of menu.\n noMatchTemplate: (t => {\n if (typeof t === \"string\") {\n if (t.trim() === \"\") return null;\n return t;\n }\n if (typeof t === \"function\") {\n return t.bind(this);\n }\n\n return (\n noMatchTemplate ||\n function() {\n return \"
No Match Found!
\";\n }.bind(this)\n );\n })(noMatchTemplate),\n\n // column to search against in the object\n lookup: lookup,\n\n // column that contains the content to insert by default\n fillAttr: fillAttr,\n\n // array of objects or a function returning an array of objects\n values: values,\n\n requireLeadingSpace: requireLeadingSpace,\n\n searchOpts: searchOpts,\n\n menuItemLimit: menuItemLimit,\n\n menuShowMinLength: menuShowMinLength\n }\n ];\n } else if (collection) {\n if (this.autocompleteMode)\n console.warn(\n \"Tribute in autocomplete mode does not work for collections\"\n );\n this.collection = collection.map(item => {\n return {\n trigger: item.trigger || trigger,\n iframe: item.iframe || iframe,\n selectClass: item.selectClass || selectClass,\n containerClass: item.containerClass || containerClass,\n itemClass: item.itemClass || itemClass,\n selectTemplate: (\n item.selectTemplate || Tribute.defaultSelectTemplate\n ).bind(this),\n menuItemTemplate: (\n item.menuItemTemplate || Tribute.defaultMenuItemTemplate\n ).bind(this),\n // function called when menu is empty, disables hiding of menu.\n noMatchTemplate: (t => {\n if (typeof t === \"string\") {\n if (t.trim() === \"\") return null;\n return t;\n }\n if (typeof t === \"function\") {\n return t.bind(this);\n }\n\n return (\n noMatchTemplate ||\n function() {\n return \"
No Match Found!
\";\n }.bind(this)\n );\n })(noMatchTemplate),\n lookup: item.lookup || lookup,\n fillAttr: item.fillAttr || fillAttr,\n values: item.values,\n requireLeadingSpace: item.requireLeadingSpace,\n searchOpts: item.searchOpts || searchOpts,\n menuItemLimit: item.menuItemLimit || menuItemLimit,\n menuShowMinLength: item.menuShowMinLength || menuShowMinLength\n };\n });\n } else {\n throw new Error(\"[Tribute] No collection specified.\");\n }\n\n new TributeRange(this);\n new TributeEvents(this);\n new TributeMenuEvents(this);\n new TributeSearch(this);\n }\n\n get isActive() {\n return this._isActive;\n }\n\n set isActive(val) {\n if (this._isActive != val) {\n this._isActive = val;\n if (this.current.element) {\n let noMatchEvent = new CustomEvent(`tribute-active-${val}`);\n this.current.element.dispatchEvent(noMatchEvent);\n }\n }\n }\n\n static defaultSelectTemplate(item) {\n if (typeof item === \"undefined\")\n return `${this.current.collection.trigger}${this.current.mentionText}`;\n if (this.range.isContentEditable(this.current.element)) {\n return (\n '' +\n (this.current.collection.trigger +\n item.original[this.current.collection.fillAttr]) +\n \"\"\n );\n }\n\n return (\n this.current.collection.trigger +\n item.original[this.current.collection.fillAttr]\n );\n }\n\n static defaultMenuItemTemplate(matchItem) {\n return matchItem.string;\n }\n\n static inputTypes() {\n return [\"TEXTAREA\", \"INPUT\"];\n }\n\n triggers() {\n return this.collection.map(config => {\n return config.trigger;\n });\n }\n\n attach(el) {\n if (!el) {\n throw new Error(\"[Tribute] Must pass in a DOM node or NodeList.\");\n }\n\n // Check if it is a jQuery collection\n if (typeof jQuery !== \"undefined\" && el instanceof jQuery) {\n el = el.get();\n }\n\n // Is el an Array/Array-like object?\n if (\n el.constructor === NodeList ||\n el.constructor === HTMLCollection ||\n el.constructor === Array\n ) {\n let length = el.length;\n for (var i = 0; i < length; ++i) {\n this._attach(el[i]);\n }\n } else {\n this._attach(el);\n }\n }\n\n _attach(el) {\n if (el.hasAttribute(\"data-tribute\")) {\n console.warn(\"Tribute was already bound to \" + el.nodeName);\n }\n\n this.ensureEditable(el);\n this.events.bind(el);\n el.setAttribute(\"data-tribute\", true);\n }\n\n ensureEditable(element) {\n if (Tribute.inputTypes().indexOf(element.nodeName) === -1) {\n if (element.contentEditable) {\n element.contentEditable = true;\n } else {\n throw new Error(\"[Tribute] Cannot bind to \" + element.nodeName);\n }\n }\n }\n\n createMenu(containerClass) {\n let wrapper = this.range.getDocument().createElement(\"div\"),\n ul = this.range.getDocument().createElement(\"ul\");\n wrapper.className = containerClass;\n wrapper.appendChild(ul);\n\n if (this.menuContainer) {\n return this.menuContainer.appendChild(wrapper);\n }\n\n return this.range.getDocument().body.appendChild(wrapper);\n }\n\n showMenuFor(element, scrollTo) {\n // Only proceed if menu isn't already shown for the current element & mentionText\n if (\n this.isActive &&\n this.current.element === element &&\n this.current.mentionText === this.currentMentionTextSnapshot\n ) {\n return;\n }\n this.currentMentionTextSnapshot = this.current.mentionText;\n\n // create the menu if it doesn't exist.\n if (!this.menu) {\n this.menu = this.createMenu(this.current.collection.containerClass);\n element.tributeMenu = this.menu;\n this.menuEvents.bind(this.menu);\n }\n\n this.isActive = true;\n this.menuSelected = 0;\n\n if (!this.current.mentionText) {\n this.current.mentionText = \"\";\n }\n\n const processValues = values => {\n // Tribute may not be active any more by the time the value callback returns\n if (!this.isActive) {\n return;\n }\n\n let items = this.search.filter(this.current.mentionText, values, {\n pre: this.current.collection.searchOpts.pre || \"\",\n post: this.current.collection.searchOpts.post || \"\",\n skip: this.current.collection.searchOpts.skip,\n extract: el => {\n if (typeof this.current.collection.lookup === \"string\") {\n return el[this.current.collection.lookup];\n } else if (typeof this.current.collection.lookup === \"function\") {\n return this.current.collection.lookup(el, this.current.mentionText);\n } else {\n throw new Error(\n \"Invalid lookup attribute, lookup must be string or function.\"\n );\n }\n }\n });\n\n if (this.current.collection.menuItemLimit) {\n items = items.slice(0, this.current.collection.menuItemLimit);\n }\n\n this.current.filteredItems = items;\n\n let ul = this.menu.querySelector(\"ul\");\n\n this.range.positionMenuAtCaret(scrollTo);\n\n if (!items.length) {\n let noMatchEvent = new CustomEvent(\"tribute-no-match\", {\n detail: this.menu\n });\n this.current.element.dispatchEvent(noMatchEvent);\n if (\n (typeof this.current.collection.noMatchTemplate === \"function\" &&\n !this.current.collection.noMatchTemplate()) ||\n !this.current.collection.noMatchTemplate\n ) {\n this.hideMenu();\n } else {\n typeof this.current.collection.noMatchTemplate === \"function\"\n ? (ul.innerHTML = this.current.collection.noMatchTemplate())\n : (ul.innerHTML = this.current.collection.noMatchTemplate);\n }\n\n return;\n }\n\n ul.innerHTML = \"\";\n let fragment = this.range.getDocument().createDocumentFragment();\n\n items.forEach((item, index) => {\n let li = this.range.getDocument().createElement(\"li\");\n li.setAttribute(\"data-index\", index);\n li.className = this.current.collection.itemClass;\n li.addEventListener(\"mousemove\", e => {\n let [li, index] = this._findLiTarget(e.target);\n if (e.movementY !== 0) {\n this.events.setActiveLi(index);\n }\n });\n if (this.menuSelected === index) {\n li.classList.add(this.current.collection.selectClass);\n }\n li.innerHTML = this.current.collection.menuItemTemplate(item);\n fragment.appendChild(li);\n });\n ul.appendChild(fragment);\n };\n\n if (typeof this.current.collection.values === \"function\") {\n this.current.collection.values(this.current.mentionText, processValues);\n } else {\n processValues(this.current.collection.values);\n }\n }\n\n _findLiTarget(el) {\n if (!el) return [];\n const index = el.getAttribute(\"data-index\");\n return !index ? this._findLiTarget(el.parentNode) : [el, index];\n }\n\n showMenuForCollection(element, collectionIndex) {\n if (element !== document.activeElement) {\n this.placeCaretAtEnd(element);\n }\n\n this.current.collection = this.collection[collectionIndex || 0];\n this.current.externalTrigger = true;\n this.current.element = element;\n\n if (element.isContentEditable)\n this.insertTextAtCursor(this.current.collection.trigger);\n else this.insertAtCaret(element, this.current.collection.trigger);\n\n this.showMenuFor(element);\n }\n\n // TODO: make sure this works for inputs/textareas\n placeCaretAtEnd(el) {\n el.focus();\n if (\n typeof window.getSelection != \"undefined\" &&\n typeof document.createRange != \"undefined\"\n ) {\n var range = document.createRange();\n range.selectNodeContents(el);\n range.collapse(false);\n var sel = window.getSelection();\n sel.removeAllRanges();\n sel.addRange(range);\n } else if (typeof document.body.createTextRange != \"undefined\") {\n var textRange = document.body.createTextRange();\n textRange.moveToElementText(el);\n textRange.collapse(false);\n textRange.select();\n }\n }\n\n // for contenteditable\n insertTextAtCursor(text) {\n var sel, range;\n sel = window.getSelection();\n range = sel.getRangeAt(0);\n range.deleteContents();\n var textNode = document.createTextNode(text);\n range.insertNode(textNode);\n range.selectNodeContents(textNode);\n range.collapse(false);\n sel.removeAllRanges();\n sel.addRange(range);\n }\n\n // for regular inputs\n insertAtCaret(textarea, text) {\n var scrollPos = textarea.scrollTop;\n var caretPos = textarea.selectionStart;\n\n var front = textarea.value.substring(0, caretPos);\n var back = textarea.value.substring(\n textarea.selectionEnd,\n textarea.value.length\n );\n textarea.value = front + text + back;\n caretPos = caretPos + text.length;\n textarea.selectionStart = caretPos;\n textarea.selectionEnd = caretPos;\n textarea.focus();\n textarea.scrollTop = scrollPos;\n }\n\n hideMenu() {\n if (this.menu) {\n this.menu.style.cssText = \"display: none;\";\n this.isActive = false;\n this.menuSelected = 0;\n this.current = {};\n }\n }\n\n selectItemAtIndex(index, originalEvent) {\n index = parseInt(index);\n if (typeof index !== \"number\" || isNaN(index)) return;\n let item = this.current.filteredItems[index];\n let content = this.current.collection.selectTemplate(item);\n if (content !== null) this.replaceText(content, originalEvent, item);\n }\n\n replaceText(content, originalEvent, item) {\n this.range.replaceTriggerText(content, true, true, originalEvent, item);\n }\n\n _append(collection, newValues, replace) {\n if (typeof collection.values === \"function\") {\n throw new Error(\"Unable to append to values, as it is a function.\");\n } else if (!replace) {\n collection.values = collection.values.concat(newValues);\n } else {\n collection.values = newValues;\n }\n }\n\n append(collectionIndex, newValues, replace) {\n let index = parseInt(collectionIndex);\n if (typeof index !== \"number\")\n throw new Error(\"please provide an index for the collection to update.\");\n\n let collection = this.collection[index];\n\n this._append(collection, newValues, replace);\n }\n\n appendCurrent(newValues, replace) {\n if (this.isActive) {\n this._append(this.current.collection, newValues, replace);\n } else {\n throw new Error(\n \"No active state. Please use append instead and pass an index.\"\n );\n }\n }\n\n detach(el) {\n if (!el) {\n throw new Error(\"[Tribute] Must pass in a DOM node or NodeList.\");\n }\n\n // Check if it is a jQuery collection\n if (typeof jQuery !== \"undefined\" && el instanceof jQuery) {\n el = el.get();\n }\n\n // Is el an Array/Array-like object?\n if (\n el.constructor === NodeList ||\n el.constructor === HTMLCollection ||\n el.constructor === Array\n ) {\n let length = el.length;\n for (var i = 0; i < length; ++i) {\n this._detach(el[i]);\n }\n } else {\n this._detach(el);\n }\n }\n\n _detach(el) {\n this.events.unbind(el);\n if (el.tributeMenu) {\n this.menuEvents.unbind(el.tributeMenu);\n }\n\n setTimeout(() => {\n el.removeAttribute(\"data-tribute\");\n this.isActive = false;\n if (el.tributeMenu) {\n el.tributeMenu.remove();\n }\n });\n }\n}\n\n/**\n * Tribute.js\n * Native ES6 JavaScript @mention Plugin\n **/\n\nexport default Tribute;\n","import { getBuilder } from \"@nextcloud/browser-storage\";\nimport { EmojiIndex, frequently } from \"emoji-mart-vue-fast\";\nimport data from \"emoji-mart-vue-fast/data/all.json\";\nconst storage = getBuilder(\"nextcloud-vue\").persist(true).build();\nlet emojiIndex;\nvar EmojiSkinTone = /* @__PURE__ */ ((EmojiSkinTone2) => {\n EmojiSkinTone2[EmojiSkinTone2[\"Neutral\"] = 1] = \"Neutral\";\n EmojiSkinTone2[EmojiSkinTone2[\"Light\"] = 2] = \"Light\";\n EmojiSkinTone2[EmojiSkinTone2[\"MediumLight\"] = 3] = \"MediumLight\";\n EmojiSkinTone2[EmojiSkinTone2[\"Medium\"] = 4] = \"Medium\";\n EmojiSkinTone2[EmojiSkinTone2[\"MediumDark\"] = 5] = \"MediumDark\";\n EmojiSkinTone2[EmojiSkinTone2[\"Dark\"] = 6] = \"Dark\";\n return EmojiSkinTone2;\n})(EmojiSkinTone || {});\nfunction emojiSearch(query, maxResults = 10) {\n if (!emojiIndex) {\n emojiIndex = new EmojiIndex(data);\n }\n const currentSkinTone = getCurrentSkinTone();\n let results;\n if (query) {\n results = emojiIndex.search(`:${query}`, maxResults);\n if (results.length < maxResults) {\n results = results.concat(emojiIndex.search(query, maxResults - results.length));\n }\n } else {\n results = frequently.get(maxResults).map((id) => emojiIndex.emoji(id)) || [];\n }\n return results.map((emoji) => emoji.getSkin(currentSkinTone));\n}\nfunction emojiAddRecent(emojiOrEmojiData) {\n let emojiData;\n if (typeof emojiOrEmojiData === \"string\") {\n if (!emojiIndex) {\n emojiIndex = new EmojiIndex(data);\n }\n emojiData = emojiIndex.findEmoji(emojiOrEmojiData);\n } else {\n emojiData = emojiOrEmojiData;\n }\n if (emojiData && \"id\" in emojiData) {\n frequently.add(emojiData);\n }\n}\nfunction getCurrentSkinTone() {\n const skinTone = Number.parseInt(storage.getItem(\"NcEmojiPicker::currentSkinTone\") ?? \"1\");\n return Math.min(\n Math.max(\n skinTone,\n 1\n /* Neutral */\n ),\n 6\n /* Dark */\n );\n}\nfunction setCurrentSkinTone(skinTone) {\n skinTone = Math.min(\n Math.max(\n skinTone,\n 1\n /* Neutral */\n ),\n 6\n /* Dark */\n );\n storage.setItem(\"NcEmojiPicker::currentSkinTone\", skinTone.toString());\n}\nexport {\n EmojiSkinTone as E,\n emojiAddRecent as a,\n emojiSearch as e,\n getCurrentSkinTone as g,\n setCurrentSkinTone as s\n};\n//# sourceMappingURL=emoji-Dtn2mDf7.mjs.map\n","import '../assets/NcEmojiPicker-B-iLLj37.css';\nimport { Picker, Emoji, EmojiIndex } from \"emoji-mart-vue-fast\";\nimport data from \"emoji-mart-vue-fast/data/all.json\";\nimport { isFocusable } from \"tabbable\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nimport { N as NcColorPicker } from \"./NcColorPicker-SlazeVcI.mjs\";\nimport { u as useTrapStackControl } from \"./useTrapStackControl-BnLfCgGU.mjs\";\nimport { s as setCurrentSkinTone, g as getCurrentSkinTone } from \"./emoji-Dtn2mDf7.mjs\";\nimport { r as register, z as t43, A as t36, p as t15, B as t5, a as t } from \"./_l10n-DVz9Qdzk.mjs\";\nimport { C as Color } from \"./colors-Bp0JzIQ4.mjs\";\nimport { N as NcButton } from \"./NcButton-CCWEL9Ci.mjs\";\nimport { N as NcPopover } from \"./NcPopover-UAg26Qdd.mjs\";\nimport { N as NcTextField } from \"./NcTextField-Czr9S6YO.mjs\";\nconst _sfc_main$1 = {\n name: \"CircleIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nvar _sfc_render$1 = function render() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"span\", _vm._b({ staticClass: \"material-design-icon circle-icon\", attrs: { \"aria-hidden\": _vm.title ? null : \"true\", \"aria-label\": _vm.title, \"role\": \"img\" }, on: { \"click\": function($event) {\n return _vm.$emit(\"click\", $event);\n } } }, \"span\", _vm.$attrs, false), [_c(\"svg\", { staticClass: \"material-design-icon__svg\", attrs: { \"fill\": _vm.fillColor, \"width\": _vm.size, \"height\": _vm.size, \"viewBox\": \"0 0 24 24\" } }, [_c(\"path\", { attrs: { \"d\": \"M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z\" } }, [_vm.title ? _c(\"title\", [_vm._v(_vm._s(_vm.title))]) : _vm._e()])])]);\n};\nvar _sfc_staticRenderFns$1 = [];\nvar __component__$1 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$1,\n _sfc_render$1,\n _sfc_staticRenderFns$1,\n false,\n null,\n null\n);\nconst IconCircle = __component__$1.exports;\nregister(t5, t15, t36, t43);\nlet emojiIndex;\nconst i18n = {\n search: t(\"Search emoji\"),\n notfound: t(\"No emoji found\"),\n categories: {\n search: t(\"Search results\"),\n recent: t(\"Frequently used\"),\n smileys: t(\"Smileys & Emotion\"),\n people: t(\"People & Body\"),\n nature: t(\"Animals & Nature\"),\n foods: t(\"Food & Drink\"),\n activity: t(\"Activities\"),\n places: t(\"Travel & Places\"),\n objects: t(\"Objects\"),\n symbols: t(\"Symbols\"),\n flags: t(\"Flags\"),\n custom: t(\"Custom\")\n }\n};\nconst skinTonePalette = [\n new Color(255, 222, 52, t(\"Neutral skin color\")),\n new Color(228, 205, 166, t(\"Light skin tone\")),\n new Color(250, 221, 192, t(\"Medium light skin tone\")),\n new Color(174, 129, 87, t(\"Medium skin tone\")),\n new Color(158, 113, 88, t(\"Medium dark skin tone\")),\n new Color(96, 79, 69, t(\"Dark skin tone\"))\n];\nconst _sfc_main = {\n name: \"NcEmojiPicker\",\n components: {\n Emoji,\n IconCircle,\n NcButton,\n NcColorPicker,\n NcPopover,\n NcTextField,\n Picker\n },\n props: {\n /**\n * The emoji-set\n */\n activeSet: {\n type: String,\n default: \"native\"\n },\n /**\n * Show preview section when hovering emoji\n */\n showPreview: {\n type: Boolean,\n default: false\n },\n /**\n * Allow unselecting the selected emoji\n */\n allowUnselect: {\n type: Boolean,\n default: false\n },\n /**\n * Selected emoji to allow unselecting\n */\n selectedEmoji: {\n type: String,\n default: \"\"\n },\n /**\n * The fallback emoji in the preview section\n */\n previewFallbackEmoji: {\n type: String,\n default: \"grinning\"\n },\n /**\n * The fallback text in the preview section\n */\n previewFallbackName: {\n type: String,\n default: t(\"Pick an emoji\")\n },\n /**\n * Whether to close the emoji picker after picking one\n */\n closeOnSelect: {\n type: Boolean,\n // eslint-disable-next-line vue/no-boolean-default\n default: true\n },\n /**\n * Selector for the popover container\n */\n container: {\n type: [Boolean, String, Object, Element],\n default: \"body\"\n }\n },\n emits: [\n \"select\",\n \"select-data\",\n \"unselect\"\n ],\n setup() {\n if (!emojiIndex) {\n emojiIndex = new EmojiIndex(data);\n }\n return {\n // Non-reactive constants\n emojiIndex,\n skinTonePalette,\n i18n\n };\n },\n data() {\n const currentSkinTone = getCurrentSkinTone();\n return {\n /**\n * The current active color from the skin tone palette\n */\n currentColor: skinTonePalette[currentSkinTone - 1],\n /**\n * The current active skin tone\n *\n * @type {1|2|3|4|5|6}\n */\n currentSkinTone,\n search: \"\",\n open: false\n };\n },\n computed: {\n native() {\n return this.activeSet === \"native\";\n }\n },\n created() {\n useTrapStackControl(() => this.open);\n },\n methods: {\n t,\n clearSearch() {\n this.search = \"\";\n this.$refs.search.focus();\n },\n /**\n * Update the current skin tone by the result of the color picker\n *\n * @param {string} color Color set\n */\n onChangeSkinTone(color) {\n const index = this.skinTonePalette.findIndex((tone) => tone.color.toLowerCase() === color.toLowerCase());\n if (index > -1) {\n this.currentSkinTone = index + 1;\n this.currentColor = this.skinTonePalette[index];\n setCurrentSkinTone(this.currentSkinTone);\n }\n },\n select(emojiObject) {\n this.$emit(\"select\", emojiObject.native);\n this.$emit(\"select-data\", emojiObject);\n if (this.closeOnSelect) {\n this.open = false;\n }\n },\n unselect() {\n this.$emit(\"unselect\");\n },\n afterShow() {\n this.$refs.search.focus();\n },\n afterHide() {\n if (!document.activeElement || this.$refs.picker.$el.contains(document.activeElement) || !isFocusable(document.activeElement)) {\n this.$refs.popover.$el.querySelector('button, [role=\"button\"]')?.focus();\n }\n },\n /**\n * Manually handle Tab navigation skipping emoji buttons.\n * Navigation over emojis is handled by Arrow keys.\n *\n * @param {KeyboardEvent} event - Keyboard event\n */\n handleTabNavigationSkippingEmojis(event) {\n const current = event.target;\n const focusable = Array.from(this.$refs.picker.$el.querySelectorAll(\"button:not(.emoji-mart-emoji), input\"));\n if (!event.shiftKey) {\n const nextNode = focusable.find((node) => current.compareDocumentPosition(node) & Node.DOCUMENT_POSITION_FOLLOWING) || focusable[0];\n nextNode.focus();\n } else {\n const prevNode = focusable.findLast((node) => current.compareDocumentPosition(node) & Node.DOCUMENT_POSITION_PRECEDING) || focusable.at(-1);\n prevNode.focus();\n }\n },\n /**\n * Handle arrow navigation via 's handlers with scroll bug fix\n *\n * @param {'onArrowLeft' | 'onArrowRight' | 'onArrowDown' | 'onArrowUp'} originalHandlerName - Picker's arrow keydown handler name\n * @param {KeyboardEvent} event - Keyboard event\n */\n async callPickerArrowHandlerWithScrollFix(originalHandlerName, event) {\n this.$refs.picker[originalHandlerName](event);\n await this.$nextTick();\n const selectedEmoji = this.$refs.picker.$el.querySelector(\".emoji-mart-emoji-selected\");\n selectedEmoji?.scrollIntoView({\n block: \"center\",\n inline: \"center\"\n });\n }\n }\n};\nvar _sfc_render = function render2() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"NcPopover\", _vm._g(_vm._b({ ref: \"popover\", attrs: {\n \"shown\": _vm.open,\n \"container\": _vm.container,\n \"popup-role\": \"dialog\",\n \"focus-trap\": false\n /* Handled manually to remove emoji buttons from TAB sequence */\n }, on: { \"update:shown\": function($event) {\n _vm.open = $event;\n }, \"after-show\": _vm.afterShow, \"after-hide\": _vm.afterHide }, scopedSlots: _vm._u([{ key: \"trigger\", fn: function(slotProps) {\n return [_vm._t(\"default\", null, null, slotProps)];\n } }], null, true) }, \"NcPopover\", _vm.$attrs, false), _vm.$listeners), [_c(\"div\", { staticClass: \"nc-emoji-picker-container\" }, [_c(\"Picker\", _vm._b({ ref: \"picker\", attrs: { \"color\": \"var(--color-primary-element)\", \"data\": _vm.emojiIndex, \"emoji\": _vm.previewFallbackEmoji, \"i18n\": _vm.i18n, \"native\": _vm.native, \"emoji-size\": 20, \"per-line\": 8, \"picker-styles\": { width: \"320px\" }, \"show-preview\": _vm.showPreview, \"skin\": _vm.currentSkinTone, \"show-skin-tones\": false, \"title\": _vm.previewFallbackName, \"role\": \"dialog\", \"aria-modal\": \"true\", \"aria-label\": _vm.t(\"Emoji picker\") }, on: { \"select\": _vm.select }, nativeOn: { \"keydown\": function($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"tab\", 9, $event.key, \"Tab\")) return null;\n $event.preventDefault();\n return _vm.handleTabNavigationSkippingEmojis.apply(null, arguments);\n } }, scopedSlots: _vm._u([{ key: \"searchTemplate\", fn: function({ onSearch }) {\n return [_c(\"div\", { staticClass: \"search__wrapper\" }, [_c(\"NcTextField\", { ref: \"search\", staticClass: \"search\", attrs: { \"value\": _vm.search, \"label\": _vm.t(\"Search\"), \"label-visible\": true, \"placeholder\": _vm.i18n.search, \"trailing-button-icon\": \"close\", \"trailing-button-label\": _vm.t(\"Clear search\"), \"show-trailing-button\": _vm.search !== \"\" }, on: { \"update:value\": [function($event) {\n _vm.search = $event;\n }, function($event) {\n return onSearch(_vm.search);\n }], \"keydown\": [function($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"left\", 37, $event.key, [\"Left\", \"ArrowLeft\"])) return null;\n if (\"button\" in $event && $event.button !== 0) return null;\n return _vm.callPickerArrowHandlerWithScrollFix(\"onArrowLeft\", $event);\n }, function($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"right\", 39, $event.key, [\"Right\", \"ArrowRight\"])) return null;\n if (\"button\" in $event && $event.button !== 2) return null;\n return _vm.callPickerArrowHandlerWithScrollFix(\"onArrowRight\", $event);\n }, function($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"down\", 40, $event.key, [\"Down\", \"ArrowDown\"])) return null;\n return _vm.callPickerArrowHandlerWithScrollFix(\"onArrowDown\", $event);\n }, function($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"up\", 38, $event.key, [\"Up\", \"ArrowUp\"])) return null;\n return _vm.callPickerArrowHandlerWithScrollFix(\"onArrowUp\", $event);\n }, function($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")) return null;\n return _vm.$refs.picker.onEnter.apply(null, arguments);\n }], \"trailing-button-click\": function($event) {\n _vm.clearSearch();\n onSearch(\"\");\n } } }), _c(\"NcColorPicker\", { attrs: { \"palette-only\": \"\", \"container\": _vm.container, \"palette\": _vm.skinTonePalette, \"value\": _vm.currentColor.color }, on: { \"update:value\": _vm.onChangeSkinTone } }, [_c(\"NcButton\", { attrs: { \"aria-label\": _vm.t(\"Skin tone\"), \"variant\": \"tertiary-no-background\" }, scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_c(\"IconCircle\", { style: { color: _vm.currentColor.color }, attrs: { \"title\": _vm.currentColor.name, \"size\": 20 } })];\n }, proxy: true }], null, true) })], 1)], 1)];\n } }, _vm.allowUnselect && _vm.selectedEmoji ? { key: \"customCategory\", fn: function() {\n return [_c(\"div\", { staticClass: \"emoji-mart-category-label\" }, [_c(\"h3\", { staticClass: \"emoji-mart-category-label\" }, [_vm._v(\" \" + _vm._s(_vm.t(\"Selected\")) + \" \")])]), _c(\"Emoji\", { staticClass: \"emoji-selected\", attrs: { \"data\": _vm.emojiIndex, \"emoji\": _vm.selectedEmoji, \"native\": true, \"size\": 32 }, on: { \"click\": _vm.unselect } }), _c(\"Emoji\", { staticClass: \"emoji-delete\", attrs: { \"data\": _vm.emojiIndex, \"emoji\": \":x:\", \"native\": true, \"size\": 10 }, on: { \"click\": _vm.unselect } })];\n }, proxy: true } : null], null, true) }, \"Picker\", _vm.$attrs, false))], 1)]);\n};\nvar _sfc_staticRenderFns = [];\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n null,\n \"a3ed576d\"\n);\nconst NcEmojiPicker = __component__.exports;\nexport {\n NcEmojiPicker as N\n};\n//# sourceMappingURL=NcEmojiPicker-DNxcceCn.mjs.map\n","import '../assets/NcFilePicker-BokX813z.css';\nimport { defineComponent, ref, computed, nextTick } from \"vue\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nimport { N as NcActionButton } from \"./NcActionButton-K4jUGMlW.mjs\";\nimport NcActionCaption from \"../Components/NcActionCaption.mjs\";\nimport { N as NcActions } from \"./NcActions-DbPerbGE.mjs\";\nimport { N as NcIconSvgWrapper } from \"./NcIconSvgWrapper-Bui9PhAS.mjs\";\nimport NcLoadingIcon from \"../Components/NcLoadingIcon.mjs\";\nimport { r as register, L as t40, a as t } from \"./_l10n-DVz9Qdzk.mjs\";\nconst _sfc_main$3 = {\n name: \"FolderUploadIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nvar _sfc_render$3 = function render() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"span\", _vm._b({ staticClass: \"material-design-icon folder-upload-icon\", attrs: { \"aria-hidden\": _vm.title ? null : \"true\", \"aria-label\": _vm.title, \"role\": \"img\" }, on: { \"click\": function($event) {\n return _vm.$emit(\"click\", $event);\n } } }, \"span\", _vm.$attrs, false), [_c(\"svg\", { staticClass: \"material-design-icon__svg\", attrs: { \"fill\": _vm.fillColor, \"width\": _vm.size, \"height\": _vm.size, \"viewBox\": \"0 0 24 24\" } }, [_c(\"path\", { attrs: { \"d\": \"M20,6A2,2 0 0,1 22,8V18A2,2 0 0,1 20,20H4A2,2 0 0,1 2,18V6A2,2 0 0,1 4,4H10L12,6H20M10.75,13H14V17H16V13H19.25L15,8.75\" } }, [_vm.title ? _c(\"title\", [_vm._v(_vm._s(_vm.title))]) : _vm._e()])])]);\n};\nvar _sfc_staticRenderFns$3 = [];\nvar __component__$3 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$3,\n _sfc_render$3,\n _sfc_staticRenderFns$3,\n false,\n null,\n null\n);\nconst IconFolderUpload = __component__$3.exports;\nconst _sfc_main$2 = {\n name: \"PlusIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nvar _sfc_render$2 = function render2() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"span\", _vm._b({ staticClass: \"material-design-icon plus-icon\", attrs: { \"aria-hidden\": _vm.title ? null : \"true\", \"aria-label\": _vm.title, \"role\": \"img\" }, on: { \"click\": function($event) {\n return _vm.$emit(\"click\", $event);\n } } }, \"span\", _vm.$attrs, false), [_c(\"svg\", { staticClass: \"material-design-icon__svg\", attrs: { \"fill\": _vm.fillColor, \"width\": _vm.size, \"height\": _vm.size, \"viewBox\": \"0 0 24 24\" } }, [_c(\"path\", { attrs: { \"d\": \"M19,13H13V19H11V13H5V11H11V5H13V11H19V13Z\" } }, [_vm.title ? _c(\"title\", [_vm._v(_vm._s(_vm.title))]) : _vm._e()])])]);\n};\nvar _sfc_staticRenderFns$2 = [];\nvar __component__$2 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$2,\n _sfc_render$2,\n _sfc_staticRenderFns$2,\n false,\n null,\n null\n);\nconst IconPlus = __component__$2.exports;\nconst _sfc_main$1 = {\n name: \"UploadIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nvar _sfc_render$1 = function render3() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"span\", _vm._b({ staticClass: \"material-design-icon upload-icon\", attrs: { \"aria-hidden\": _vm.title ? null : \"true\", \"aria-label\": _vm.title, \"role\": \"img\" }, on: { \"click\": function($event) {\n return _vm.$emit(\"click\", $event);\n } } }, \"span\", _vm.$attrs, false), [_c(\"svg\", { staticClass: \"material-design-icon__svg\", attrs: { \"fill\": _vm.fillColor, \"width\": _vm.size, \"height\": _vm.size, \"viewBox\": \"0 0 24 24\" } }, [_c(\"path\", { attrs: { \"d\": \"M9,16V10H5L12,3L19,10H15V16H9M5,20V18H19V20H5Z\" } }, [_vm.title ? _c(\"title\", [_vm._v(_vm._s(_vm.title))]) : _vm._e()])])]);\n};\nvar _sfc_staticRenderFns$1 = [];\nvar __component__$1 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$1,\n _sfc_render$1,\n _sfc_staticRenderFns$1,\n false,\n null,\n null\n);\nconst IconUpload = __component__$1.exports;\nregister(t40);\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcFilePicker\",\n props: {\n accept: { default: void 0 },\n actionCaption: { default: \"\" },\n actions: { default: () => [] },\n directory: { type: Boolean },\n directoryOnly: { type: Boolean },\n disabled: { type: Boolean },\n iconOnly: { type: Boolean },\n label: { default: void 0 },\n loading: { type: Boolean },\n multiple: { type: Boolean },\n variant: { default: \"primary\" }\n },\n emits: [\"pick\"],\n setup(__props, { expose, emit }) {\n const props = __props;\n expose({\n reset\n });\n const formElement = ref(null);\n const inputElement = ref(null);\n const currentLabel = computed(() => {\n if (props.loading) {\n return t(\"Uploading …\");\n } else if (props.label) {\n return props.label;\n } else if (props.directoryOnly) {\n return t(\"Pick folder\");\n }\n return props.multiple ? t(\"Pick files\") : t(\"Pick file\");\n });\n const canUploadFolders = computed(() => {\n return (props.directory || props.directoryOnly) && \"webkitdirectory\" in HTMLInputElement.prototype;\n });\n function triggerPickFiles(uploadFolders) {\n reset();\n if (canUploadFolders.value) {\n inputElement.value.webkitdirectory = uploadFolders;\n }\n nextTick(() => inputElement.value.click());\n }\n function onPick() {\n const files = inputElement.value?.files ? Array.from(inputElement.value.files) : [];\n emit(\"pick\", files);\n }\n function reset() {\n formElement.value.reset();\n }\n return { __sfc: true, props, emit, formElement, inputElement, currentLabel, canUploadFolders, triggerPickFiles, onPick, reset, IconFolderUpload, IconPlus, IconUpload, NcActionButton, NcActionCaption, NcActions, NcIconSvgWrapper, NcLoadingIcon, t };\n }\n});\nconst filePicker = \"_filePicker_KfdBJ\";\nconst style0 = {\n filePicker\n};\nvar _sfc_render = function render4() {\n var _vm = this, _c = _vm._self._c, _setup = _vm._self._setupProxy;\n return _c(\"form\", { ref: \"formElement\", class: _vm.$style.filePicker }, [_c(_setup.NcActions, { attrs: { \"aria-label\": _setup.currentLabel, \"disabled\": _vm.disabled || _vm.loading, \"menu-name\": _vm.iconOnly ? void 0 : _setup.currentLabel, \"force-name\": !_vm.iconOnly, \"variant\": _vm.variant }, scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [!_vm.loading ? _vm._t(\"icon\", function() {\n return [_c(_setup.IconPlus, { attrs: { \"size\": 20 } })];\n }) : _c(_setup.NcLoadingIcon)];\n }, proxy: true }], null, true) }, [_vm.actionCaption ? _c(_setup.NcActionCaption, { attrs: { \"name\": _vm.actionCaption } }) : _vm._e(), !_vm.directoryOnly ? _c(_setup.NcActionButton, { attrs: { \"close-after-click\": \"\" }, on: { \"click\": function($event) {\n return _setup.triggerPickFiles(false);\n } }, scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_c(_setup.IconUpload, { attrs: { \"size\": 20 } })];\n }, proxy: true }], null, false, 3377047136) }, [_vm._v(\" \" + _vm._s(_setup.canUploadFolders || !!_vm.$slots.actions ? _vm.multiple ? _setup.t(\"Upload files\") : _setup.t(\"Upload file\") : _setup.currentLabel) + \" \")]) : _vm._e(), _setup.canUploadFolders ? _c(_setup.NcActionButton, { attrs: { \"close-after-click\": \"\" }, on: { \"click\": function($event) {\n return _setup.triggerPickFiles(true);\n } }, scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_c(_setup.IconFolderUpload, { staticStyle: { \"color\": \"var(--color-primary-element)\" }, attrs: { \"size\": 20 } })];\n }, proxy: true }], null, false, 746052933) }, [_vm._v(\" \" + _vm._s(!_vm.directoryOnly || !!_vm.$slots.actions ? _setup.t(\"Upload folder\") : _setup.currentLabel) + \" \")]) : _vm._e(), _vm._l(_vm.actions, function(group) {\n return [group.caption ? _c(_setup.NcActionCaption, { key: group.caption, attrs: { \"name\": group.caption } }) : _vm._e(), _vm._l(group.actions ?? [group], function(action) {\n return _c(_setup.NcActionButton, { key: action.label, attrs: { \"close-after-click\": \"\" }, on: { \"click\": action.onClick }, scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_c(_setup.NcIconSvgWrapper, { attrs: { \"svg\": action.iconSvg } })];\n }, proxy: true }], null, true) }, [_vm._v(\" \" + _vm._s(action.label) + \" \")]);\n })];\n })], 2), _c(\"input\", { ref: \"inputElement\", staticClass: \"hidden-visually\", attrs: { \"accept\": _vm.accept?.join(\", \"), \"aria-hidden\": \"true\", \"multiple\": _vm.multiple, \"type\": \"file\" }, on: { \"change\": _setup.onPick } }), _vm._t(\"default\")], 2);\n};\nvar _sfc_staticRenderFns = [];\nconst __cssModules = {\n \"$style\": style0\n};\nfunction _sfc_injectStyles(ctx) {\n for (var key in __cssModules) {\n this[key] = __cssModules[key];\n }\n}\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n _sfc_injectStyles,\n null\n);\nconst NcFilePicker = __component__.exports;\nexport {\n NcFilePicker as N\n};\n//# sourceMappingURL=NcFilePicker-Ck9o-ia3.mjs.map\n","import { a as mdiCheck, e as mdiContentCopy } from \"./mdi-DkJglNiS.mjs\";\nimport { toValue } from \"@vueuse/core\";\nimport { ref, computed } from \"vue\";\nimport { r as register, d as t21, a as t } from \"./_l10n-DVz9Qdzk.mjs\";\nregister(t21);\n/*!\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nconst DELAY = 2e3;\nfunction useCopy(content) {\n const isCopied = ref(false);\n const icon = computed(() => isCopied.value ? mdiCheck : mdiContentCopy);\n const altText = computed(() => isCopied.value ? t(\"Copied\") : t(\"Copy to clipboard\"));\n async function copy() {\n if (isCopied.value) {\n return;\n }\n const value = toValue(content);\n try {\n await navigator.clipboard.writeText(value);\n } catch {\n prompt(\"\", value);\n }\n isCopied.value = true;\n setTimeout(() => {\n isCopied.value = false;\n }, DELAY);\n }\n return {\n isCopied,\n copy,\n icon,\n altText\n };\n}\nexport {\n useCopy as u\n};\n//# sourceMappingURL=useCopy-DDDe5RYH.mjs.map\n","import '../assets/NcKbd-8TOrFNAw.css';\nimport { defineComponent, computed } from \"vue\";\nimport { r as register, x as t7, a as t } from \"./_l10n-DVz9Qdzk.mjs\";\nimport { i as isMac } from \"./platform-CC2ecGvV.mjs\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nregister(t7);\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcKbd\",\n props: {\n symbol: { default: void 0 },\n mac: { type: [Boolean, null], default: isMac }\n },\n setup(__props) {\n const props = __props;\n const labels = computed(() => ({\n ArrowUp: \"↑\",\n ArrowDown: \"↓\",\n ArrowLeft: \"←\",\n ArrowRight: \"→\",\n Control: !props.mac ? t(\"Ctrl\") : \"⌘\",\n Alt: !props.mac ? t(\"Alt\") : \"⌥\",\n Shift: !props.mac ? t(\"Shift\") : \"⇧\",\n Enter: !props.mac ? t(\"Enter\") : \"⏎\",\n Tab: !props.mac ? t(\"Tab\") : \"⇥\",\n Delete: !props.mac ? t(\"Delete\") : \"⌫\",\n Escape: !props.mac ? t(\"Escape\") : \"⎋\",\n Space: t(\"Space\")\n // TRANSLATORS: Space key on keyboard\n }));\n const label = computed(() => props.symbol && labels.value[props.symbol] || props.symbol);\n return { __sfc: true, props, labels, label };\n }\n});\nconst kbd = \"_kbd_nUCxj\";\nconst style0 = {\n \"material-design-icon\": \"_material-design-icon_tnSQy\",\n kbd\n};\nvar _sfc_render = function render() {\n var _vm = this, _c = _vm._self._c, _setup = _vm._self._setupProxy;\n return _c(\"kbd\", { class: _vm.$style.kbd }, [_vm._t(\"default\", function() {\n return [_vm._v(\" \" + _vm._s(_setup.label) + \" \")];\n })], 2);\n};\nvar _sfc_staticRenderFns = [];\nconst __cssModules = {\n \"$style\": style0\n};\nfunction _sfc_injectStyles(ctx) {\n for (var key in __cssModules) {\n this[key] = __cssModules[key];\n }\n}\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n _sfc_injectStyles,\n null\n);\nconst NcKbd = __component__.exports;\nexport {\n NcKbd as N\n};\n//# sourceMappingURL=NcKbd-GB8FuSAU.mjs.map\n","import '../assets/NcHotkeyList-CNWXE5jg.css';\nimport { defineComponent } from \"vue\";\nimport { r as register, y as t30, a as t } from \"./_l10n-DVz9Qdzk.mjs\";\nimport { c as createElementId } from \"./createElementId-DhjFt1I9.mjs\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nregister(t30);\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcHotkeyList\",\n props: {\n label: { default: void 0 }\n },\n setup(__props) {\n const labelId = `NcHotkeyList_${createElementId()}`;\n return { __sfc: true, labelId, t };\n }\n});\nconst hotkeyList = \"_hotkeyList_W8veH\";\nconst hotkeyList__heading = \"_hotkeyList__heading_Dfekf\";\nconst style0 = {\n hotkeyList,\n hotkeyList__heading\n};\nvar _sfc_render = function render() {\n var _vm = this, _c = _vm._self._c, _setup = _vm._self._setupProxy;\n return _c(\"div\", { class: _vm.$style.hotkeyList }, [_c(\"div\", { class: [_vm.$style.hotkeyList__heading, { \"hidden-visually\": !_vm.label }], attrs: { \"id\": _setup.labelId } }, [_vm._v(\" \" + _vm._s(_vm.label || _setup.t(\"Keyboard shortcuts\")) + \" \")]), _c(\"ul\", { attrs: { \"aria-labelledby\": _setup.labelId } }, [_vm._t(\"default\")], 2)]);\n};\nvar _sfc_staticRenderFns = [];\nconst __cssModules = {\n \"$style\": style0\n};\nfunction _sfc_injectStyles(ctx) {\n for (var key in __cssModules) {\n this[key] = __cssModules[key];\n }\n}\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n _sfc_injectStyles,\n null\n);\nconst NcHotkeyList = __component__.exports;\nexport {\n NcHotkeyList as N\n};\n//# sourceMappingURL=NcHotkeyList-Co7MBL5U.mjs.map\n","import '../assets/NcRelatedResourcesPanel-CTpqdDL9.css';\nimport axios from \"@nextcloud/axios\";\nimport { generateOcsUrl } from \"@nextcloud/router\";\nimport { r as register, T as t38, a as t, U as t42, V as t9 } from \"./_l10n-DVz9Qdzk.mjs\";\nimport { N as NcButton } from \"./NcButton-CCWEL9Ci.mjs\";\nimport { g as getRoute } from \"./autolink-CeB9uxD9.mjs\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nimport { getCapabilities } from \"@nextcloud/capabilities\";\nimport { C as ChevronDown } from \"./ChevronDown-DFQfzh63.mjs\";\nimport { C as ChevronUp } from \"./ChevronUp-C7Dy9Bph.mjs\";\nimport { N as NcIconSvgWrapper } from \"./NcIconSvgWrapper-Bui9PhAS.mjs\";\nimport { l as logger } from \"./logger-D3RVzcfQ.mjs\";\nregister(t38);\nconst _sfc_main$4 = {\n name: \"NcResource\",\n components: {\n NcButton\n },\n /* eslint vue/require-prop-comment: warn -- TODO: Add a proper doc block about what this props do */\n props: {\n icon: {\n type: String,\n required: true\n },\n name: {\n type: String,\n required: true\n },\n url: {\n type: String,\n required: true\n }\n },\n data() {\n return {\n labelTranslated: t('Open link to \"{resourceName}\"', { resourceName: this.name })\n };\n },\n computed: {\n route() {\n return getRoute(this.$router, this.url);\n }\n },\n methods: {\n t\n }\n};\nvar _sfc_render$4 = function render() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"li\", { staticClass: \"resource\" }, [_c(\"NcButton\", { staticClass: \"resource__button\", attrs: { \"aria-label\": _vm.labelTranslated, \"to\": _vm.route, \"href\": _vm.route ? null : _vm.url, \"variant\": \"tertiary\" }, scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_c(\"div\", { staticClass: \"resource__icon\" }, [_c(\"img\", { attrs: { \"src\": _vm.icon } })])];\n }, proxy: true }]) }, [_vm._v(\" \" + _vm._s(_vm.name) + \" \")])], 1);\n};\nvar _sfc_staticRenderFns$4 = [];\nvar __component__$4 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$4,\n _sfc_render$4,\n _sfc_staticRenderFns$4,\n false,\n null,\n \"9f864ea4\"\n);\nconst NcResource = __component__$4.exports;\nconst _sfc_main$3 = {\n name: \"AccountGroupIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nvar _sfc_render$3 = function render2() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"span\", _vm._b({ staticClass: \"material-design-icon account-group-icon\", attrs: { \"aria-hidden\": _vm.title ? null : \"true\", \"aria-label\": _vm.title, \"role\": \"img\" }, on: { \"click\": function($event) {\n return _vm.$emit(\"click\", $event);\n } } }, \"span\", _vm.$attrs, false), [_c(\"svg\", { staticClass: \"material-design-icon__svg\", attrs: { \"fill\": _vm.fillColor, \"width\": _vm.size, \"height\": _vm.size, \"viewBox\": \"0 0 24 24\" } }, [_c(\"path\", { attrs: { \"d\": \"M12,5.5A3.5,3.5 0 0,1 15.5,9A3.5,3.5 0 0,1 12,12.5A3.5,3.5 0 0,1 8.5,9A3.5,3.5 0 0,1 12,5.5M5,8C5.56,8 6.08,8.15 6.53,8.42C6.38,9.85 6.8,11.27 7.66,12.38C7.16,13.34 6.16,14 5,14A3,3 0 0,1 2,11A3,3 0 0,1 5,8M19,8A3,3 0 0,1 22,11A3,3 0 0,1 19,14C17.84,14 16.84,13.34 16.34,12.38C17.2,11.27 17.62,9.85 17.47,8.42C17.92,8.15 18.44,8 19,8M5.5,18.25C5.5,16.18 8.41,14.5 12,14.5C15.59,14.5 18.5,16.18 18.5,18.25V20H5.5V18.25M0,20V18.5C0,17.11 1.89,15.94 4.45,15.6C3.86,16.28 3.5,17.22 3.5,18.25V20H0M24,20H20.5V18.25C20.5,17.22 20.14,16.28 19.55,15.6C22.11,15.94 24,17.11 24,18.5V20Z\" } }, [_vm.title ? _c(\"title\", [_vm._v(_vm._s(_vm.title))]) : _vm._e()])])]);\n};\nvar _sfc_staticRenderFns$3 = [];\nvar __component__$3 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$3,\n _sfc_render$3,\n _sfc_staticRenderFns$3,\n false,\n null,\n null\n);\nconst AccountGroup = __component__$3.exports;\nconst _sfc_main$2 = {\n name: \"OpenInNewIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nvar _sfc_render$2 = function render3() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"span\", _vm._b({ staticClass: \"material-design-icon open-in-new-icon\", attrs: { \"aria-hidden\": _vm.title ? null : \"true\", \"aria-label\": _vm.title, \"role\": \"img\" }, on: { \"click\": function($event) {\n return _vm.$emit(\"click\", $event);\n } } }, \"span\", _vm.$attrs, false), [_c(\"svg\", { staticClass: \"material-design-icon__svg\", attrs: { \"fill\": _vm.fillColor, \"width\": _vm.size, \"height\": _vm.size, \"viewBox\": \"0 0 24 24\" } }, [_c(\"path\", { attrs: { \"d\": \"M14,3V5H17.59L7.76,14.83L9.17,16.24L19,6.41V10H21V3M19,19H5V5H12V3H5C3.89,3 3,3.9 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V12H19V19Z\" } }, [_vm.title ? _c(\"title\", [_vm._v(_vm._s(_vm.title))]) : _vm._e()])])]);\n};\nvar _sfc_staticRenderFns$2 = [];\nvar __component__$2 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$2,\n _sfc_render$2,\n _sfc_staticRenderFns$2,\n false,\n null,\n null\n);\nconst OpenInNew = __component__$2.exports;\nregister(t42);\nconst teamResourceProviders = getCapabilities()?.circles?.teamResourceProviders ?? [];\nconst _sfc_main$1 = {\n name: \"NcTeamResources\",\n components: {\n AccountGroup,\n ChevronDown,\n ChevronUp,\n OpenInNew,\n NcButton,\n NcIconSvgWrapper\n },\n /* eslint vue/require-prop-comment: warn -- TODO: Add a proper doc block about what this props do */\n props: {\n providerId: {\n type: String,\n default: null\n },\n itemId: {\n type: [String, Number],\n default: null\n }\n },\n data() {\n return {\n appEnabled: OC?.appswebroots?.circles !== void 0 && (OC.config.version.split(\".\")[0] ?? 0) >= 29,\n loading: false,\n teamResources: null,\n teamOpen: []\n };\n },\n computed: {\n isVisible() {\n return !this.loading && this.teamResources?.length > 0;\n },\n teamProviders() {\n return (teamId) => {\n const team = this.teamResources.find((t2) => t2.teamId === teamId);\n return team.resources?.reduce((acc, resource) => {\n if (resource.provider.id === this.providerId && resource.id === String(this.itemId)) {\n return acc;\n }\n if (!acc[resource.provider.id]) {\n acc[resource.provider.id] = resource.provider;\n acc[resource.provider.id].resources = [];\n }\n if (resource.provider.id === this.providerId && resource.id === String(this.itemId)) {\n return acc;\n }\n acc[resource.provider.id].resources.push(resource);\n return acc;\n }, {});\n };\n },\n open() {\n return (teamId) => {\n return this.teamOpen.indexOf(teamId) !== -1;\n };\n }\n },\n watch: {\n providerId() {\n this.fetchTeamResources();\n },\n itemId() {\n this.fetchTeamResources();\n }\n },\n created() {\n this.fetchTeamResources();\n },\n methods: {\n t,\n async fetchTeamResources() {\n if (!teamResourceProviders.includes(this.providerId)) {\n return;\n }\n try {\n this.loading = true;\n const response = await axios.get(generateOcsUrl(`/teams/resources/${this.providerId}/${this.itemId}`));\n this.teamResources = response.data.ocs.data.teams;\n this.teamOpen = [this.teamResources[0]?.teamId];\n } catch (error) {\n this.teamResources = null;\n logger.error(\"Could not fetch Teams resources\", { error });\n } finally {\n this.loading = false;\n }\n },\n toggleOpen(teamId, open) {\n if (open) {\n this.teamOpen.push(teamId);\n } else {\n this.teamOpen.splice(this.teamOpen.indexOf(teamId), 1);\n }\n }\n }\n};\nvar _sfc_render$1 = function render4() {\n var _vm = this, _c = _vm._self._c;\n return _vm.appEnabled && _vm.isVisible ? _c(\"div\", { staticClass: \"team-resources\" }, [_c(\"h5\", { staticClass: \"team-resources__header\" }, [_vm._v(\" \" + _vm._s(_vm.t(\"Related team resources\")) + \" \")]), _vm._l(_vm.teamResources, function(team) {\n return _c(\"details\", { key: team.teamId, staticClass: \"related-team\", attrs: { \"name\": \"Team resources\", \"open\": _vm.open(team.teamId) }, on: { \"toggle\": (event) => _vm.toggleOpen(team.teamId, event.target.open) } }, [_c(\"summary\", { staticClass: \"related-team__header\" }, [_c(\"h5\", { staticClass: \"related-team__name\" }, [_c(\"AccountGroup\", { attrs: { \"size\": 20 } }), _vm._v(\" \" + _vm._s(team.displayName) + \" \")], 1), _c(\"NcButton\", { attrs: { \"aria-label\": _vm.t(\"View team\"), \"href\": team.link, \"title\": _vm.t(\"View team\"), \"variant\": \"tertiary\" }, scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_c(\"OpenInNew\", { attrs: { \"size\": 20 } })];\n }, proxy: true }], null, true) }), _vm.open(team.teamId) ? _c(\"ChevronUp\", { attrs: { \"size\": 20 } }) : _c(\"ChevronDown\", { attrs: { \"size\": 20 } })], 1), _c(\"div\", _vm._l(_vm.teamProviders(team.teamId), function(provider) {\n return _c(\"div\", { key: provider.id, staticClass: \"related-team-provider\" }, [provider.resources.length > 0 ? _c(\"h6\", [_vm._v(\" \" + _vm._s(provider.name) + \" \")]) : _vm._e(), _c(\"ul\", _vm._l(provider.resources, function(resource) {\n return _c(\"li\", { key: resource.url, staticClass: \"related-team-resource\" }, [_c(\"a\", { staticClass: \"related-team-resource__link\", attrs: { \"href\": resource.url } }, [resource.iconEmoji ? _c(\"span\", { staticClass: \"resource__icon\" }, [_vm._v(\" \" + _vm._s(resource.iconEmoji) + \" \")]) : resource.iconSvg ? _c(\"NcIconSvgWrapper\", { staticClass: \"resource__icon\", attrs: { \"svg\": resource.iconSvg, \"size\": 20 } }) : resource.iconURL ? _c(\"span\", { staticClass: \"resource__icon\" }, [_c(\"img\", { attrs: { \"src\": resource.iconURL, \"alt\": \"\" } })]) : _vm._e(), _c(\"span\", { staticClass: \"resource__name\" }, [_vm._v(\" \" + _vm._s(resource.label) + \" \")])], 1)]);\n }), 0)]);\n }), 0)]);\n })], 2) : _vm._e();\n};\nvar _sfc_staticRenderFns$1 = [];\nvar __component__$1 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$1,\n _sfc_render$1,\n _sfc_staticRenderFns$1,\n false,\n null,\n \"e224f6ac\"\n);\nconst NcTeamResources = __component__$1.exports;\nregister(t9);\nconst _sfc_main = {\n name: \"NcRelatedResourcesPanel\",\n components: {\n NcResource,\n NcTeamResources\n },\n /* eslint vue/require-prop-comment: warn -- TODO: Add a proper doc block about what this props do */\n props: {\n /**\n * The provider id implemented with `\\OCA\\RelatedResources\\IRelatedResourceProvider::getProviderId()`\n */\n providerId: {\n type: String,\n default: null\n },\n /**\n * The item id which uniquely identities the e.g. Calendar event, Deck board, file, Talk room, etc.\n */\n itemId: {\n type: [String, Number],\n default: null\n },\n /**\n * Limits to specific resource type. i.e. any provider id implemented with `\\OCA\\RelatedResources\\IRelatedResourceProvider::getProviderId()`\n */\n resourceType: {\n type: String,\n default: \"\"\n },\n /**\n * Set the maximum number of resources to load\n */\n limit: {\n type: Number,\n default: 0\n },\n /**\n * Only used by the files sidebar\n *\n * File info is passed when registered with `OCA.Sharing.ShareTabSections.registerSection()`\n */\n fileInfo: {\n type: Object,\n default: null\n },\n /**\n * Make the header name dynamic\n */\n header: {\n type: String,\n default: t(\"Related resources\")\n },\n description: {\n type: String,\n default: t(\"Anything shared with the same group of people will show up here\")\n },\n /**\n * If this element is used on a primary element set to true for primary styling.\n */\n primary: {\n type: Boolean,\n default: false\n }\n },\n emits: [\n \"has-error\",\n \"has-resources\"\n ],\n data() {\n return {\n appEnabled: OC?.appswebroots?.related_resources !== void 0,\n loading: false,\n error: null,\n resources: []\n };\n },\n computed: {\n isVisible() {\n if (this.loading) {\n return false;\n }\n return this.error ?? this.resources.length > 0;\n },\n subline() {\n if (this.error) {\n return t(\"Error getting related resources. Please contact your system administrator if you have any questions.\");\n }\n return this.description;\n },\n hasResourceInfo() {\n if (this.providerId !== null && this.itemId !== null) {\n return true;\n }\n if (this.fileInfo !== null) {\n return true;\n }\n return false;\n },\n isFiles() {\n return this.fileInfo?.id !== void 0;\n },\n url() {\n let providerId;\n let itemId;\n if (this.isFiles) {\n providerId = \"files\";\n itemId = this.fileInfo.id;\n } else {\n providerId = this.providerId;\n itemId = this.itemId;\n }\n return generateOcsUrl(\"/apps/related_resources/related/{providerId}?itemId={itemId}&resourceType={resourceType}&limit={limit}&format=json\", {\n providerId,\n itemId,\n resourceType: this.resourceType,\n limit: this.limit\n });\n }\n },\n watch: {\n providerId() {\n this.fetchRelatedResources();\n },\n itemId() {\n this.fetchRelatedResources();\n },\n fileInfo() {\n this.fetchRelatedResources();\n },\n error(error) {\n this.$emit(\"has-error\", Boolean(error));\n },\n resources(resources) {\n this.$emit(\"has-resources\", resources.length > 0);\n }\n },\n created() {\n this.fetchRelatedResources();\n },\n methods: {\n t,\n async fetchRelatedResources() {\n if (!this.appEnabled || !this.hasResourceInfo) {\n return;\n }\n this.loading = true;\n this.error = null;\n this.resources = [];\n try {\n const response = await axios.get(this.url);\n this.resources = response.data.ocs?.data;\n } catch (error) {\n this.error = e;\n logger.error(\"Could not fetch related resources\", { error });\n } finally {\n this.loading = false;\n }\n }\n }\n};\nvar _sfc_render = function render5() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"div\", [_c(\"NcTeamResources\", { attrs: { \"provider-id\": _vm.providerId, \"item-id\": _vm.itemId } }), _vm.appEnabled && _vm.isVisible ? _c(\"div\", { staticClass: \"related-resources\" }, [_c(\"div\", { staticClass: \"related-resources__header\" }, [_c(\"h5\", [_vm._v(_vm._s(_vm.header))]), _c(\"p\", [_vm._v(_vm._s(_vm.subline))])]), _vm._l(_vm.resources, function(resource) {\n return _c(\"NcResource\", { key: resource.itemId, staticClass: \"related-resources__entry\", attrs: { \"icon\": resource.icon, \"name\": resource.title, \"url\": resource.url } });\n })], 2) : _vm._e()], 1);\n};\nvar _sfc_staticRenderFns = [];\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n null,\n \"c4e88089\"\n);\nconst NcRelatedResourcesPanel = __component__.exports;\nexport {\n NcRelatedResourcesPanel as N\n};\n//# sourceMappingURL=NcRelatedResourcesPanel-I2ZOB3cx.mjs.map\n","import { l as logger } from \"./logger-D3RVzcfQ.mjs\";\nwindow._vue_richtext_widgets ??= {};\nwindow._registerWidget ??= (id, callback, onDestroy, props) => {\n registerWidget(id, callback, onDestroy, props);\n};\nfunction registerWidget(id, callback, onDestroy = () => {\n}, props) {\n const propsWithDefaults = {\n hasInteractiveView: true,\n fullWidth: false,\n ...props\n };\n if (window._vue_richtext_widgets[id]) {\n logger.error(`[ReferencePicker]: Widget for id ${id} already registered`);\n return;\n }\n window._vue_richtext_widgets[id] = {\n id,\n callback,\n onDestroy,\n ...propsWithDefaults\n };\n}\nfunction renderWidget(el, options) {\n const { richObjectType, richObject, accessible, interactive } = options;\n if (richObjectType === \"open-graph\") {\n return;\n }\n if (!window._vue_richtext_widgets[richObjectType]) {\n logger.error(\"Widget for rich object type \" + richObjectType + \" not registered\");\n return;\n }\n window._vue_richtext_widgets[richObjectType].callback(el, { richObjectType, richObject, accessible, interactive });\n}\nfunction destroyWidget(richObjectType, el) {\n if (richObjectType === \"open-graph\") {\n return;\n }\n if (!window._vue_richtext_widgets[richObjectType]) {\n return;\n }\n window._vue_richtext_widgets[richObjectType].onDestroy(el);\n}\nfunction isWidgetRegistered(id) {\n return !!window._vue_richtext_widgets[id];\n}\nfunction hasInteractiveView(id) {\n return !!window._vue_richtext_widgets[id]?.hasInteractiveView;\n}\nfunction hasFullWidth(id) {\n return !!window._vue_richtext_widgets[id]?.fullWidth;\n}\nwindow._vue_richtext_custom_picker_elements ??= {};\nwindow._registerCustomPickerElement ??= registerCustomPickerElement;\nclass NcCustomPickerRenderResult {\n element;\n object;\n /**\n * @param element - The HTML element\n * @param object - The object\n */\n constructor(element, object) {\n this.element = element;\n this.object = object;\n }\n}\nfunction isCustomPickerElementRegistered(id) {\n return !!window._vue_richtext_custom_picker_elements[id];\n}\nfunction getCustomPickerElementSize(id) {\n const size = window._vue_richtext_custom_picker_elements[id]?.size;\n if ([\"small\", \"normal\", \"large\", \"full\"].includes(size)) {\n return size;\n }\n return null;\n}\nfunction registerCustomPickerElement(id, callback, onDestroy = () => {\n}, size = \"large\") {\n if (window._vue_richtext_custom_picker_elements[id]) {\n logger.error(`Custom reference picker element for id ${id} already registered`);\n return;\n }\n window._vue_richtext_custom_picker_elements[id] = {\n id,\n callback,\n onDestroy,\n size\n };\n}\nfunction renderCustomPickerElement(el, options) {\n const { providerId, accessible } = options;\n if (!window._vue_richtext_custom_picker_elements[providerId]) {\n logger.error(`Custom reference picker element for reference provider ID ${providerId} not registered`);\n return;\n }\n return window._vue_richtext_custom_picker_elements[providerId].callback(el, { providerId, accessible });\n}\nfunction destroyCustomPickerElement(providerId, el, renderResult) {\n if (!window._vue_richtext_custom_picker_elements[providerId]) {\n return;\n }\n window._vue_richtext_custom_picker_elements[providerId].onDestroy(el, renderResult);\n}\nexport {\n NcCustomPickerRenderResult as N,\n renderWidget as a,\n destroyCustomPickerElement as b,\n isCustomPickerElementRegistered as c,\n destroyWidget as d,\n registerCustomPickerElement as e,\n renderCustomPickerElement as f,\n getCustomPickerElementSize as g,\n hasInteractiveView as h,\n isWidgetRegistered as i,\n hasFullWidth as j,\n registerWidget as r\n};\n//# sourceMappingURL=customPickerElements-DLFtgReB.mjs.map\n","import '../assets/referencePickerModal-CGtNx7ew.css';\nimport Vue, { ref, nextTick } from \"vue\";\nimport { emit } from \"@nextcloud/event-bus\";\nimport { A as ArrowLeft } from \"./ArrowLeft-DuT2LZOm.mjs\";\nimport { C as Close } from \"./Close-BtLPUSdO.mjs\";\nimport { d as destroyWidget, a as renderWidget, i as isWidgetRegistered, h as hasInteractiveView, j as hasFullWidth, f as renderCustomPickerElement, b as destroyCustomPickerElement, c as isCustomPickerElementRegistered, g as getCustomPickerElementSize } from \"./customPickerElements-DLFtgReB.mjs\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nimport axios from \"@nextcloud/axios\";\nimport { loadState } from \"@nextcloud/initial-state\";\nimport { imagePath, generateOcsUrl } from \"@nextcloud/router\";\nimport { r as register, Y as t23, a as t, Z as t8, _ as t47, $ as t41, a0 as t24, z as t43, a1 as t31, m as t18, a2 as t12 } from \"./_l10n-DVz9Qdzk.mjs\";\nimport { l as logger } from \"./logger-D3RVzcfQ.mjs\";\nimport NcEmptyContent from \"../Components/NcEmptyContent.mjs\";\nimport { N as NcHighlight } from \"./index-CxTT94_h.mjs\";\nimport { N as NcSelect } from \"./NcSelect-CHc1QupB.mjs\";\nimport { useElementSize, useIntersectionObserver } from \"@vueuse/core\";\nimport { RouterLink } from \"vue-router\";\nimport { N as NcButton } from \"./NcButton-CCWEL9Ci.mjs\";\nimport { g as getRoute } from \"./autolink-CeB9uxD9.mjs\";\nimport NcLoadingIcon from \"../Components/NcLoadingIcon.mjs\";\nimport { N as NcTextField } from \"./NcTextField-Czr9S6YO.mjs\";\nimport { D as DotsHorizontalIcon } from \"./NcActions-DbPerbGE.mjs\";\nimport NcModal from \"../Components/NcModal.mjs\";\nregister(t23);\nconst IDLE_TIMEOUT = 3 * 60 * 1e3;\nconst _sfc_main$8 = {\n name: \"NcReferenceWidget\",\n components: {\n NcButton\n },\n /* eslint vue/require-prop-comment: warn -- TODO: Add a proper doc block about what this props do */\n props: {\n reference: {\n type: Object,\n required: true\n },\n interactive: {\n type: Boolean,\n // eslint-disable-next-line vue/no-boolean-default\n default: true\n },\n interactiveOptIn: {\n type: Boolean,\n default: false\n }\n },\n setup() {\n const isVisible = ref(false);\n const widgetRoot = ref();\n const { width } = useElementSize(widgetRoot);\n useIntersectionObserver(widgetRoot, ([entry]) => {\n nextTick(() => {\n isVisible.value = entry.isIntersecting;\n });\n });\n return {\n width,\n isVisible,\n widgetRoot\n };\n },\n data() {\n return {\n showInteractive: false,\n rendered: false,\n idleTimeout: null\n };\n },\n computed: {\n isInteractive() {\n return !this.interactiveOptIn && this.interactive || this.showInteractive;\n },\n hasFullWidth() {\n return hasFullWidth(this.reference.richObjectType);\n },\n hasCustomWidget() {\n return isWidgetRegistered(this.reference.richObjectType);\n },\n hasInteractiveView() {\n return isWidgetRegistered(this.reference.richObjectType) && hasInteractiveView(this.reference.richObjectType);\n },\n noAccess() {\n return this.reference && !this.reference.accessible;\n },\n descriptionStyle() {\n if (this.numberOfLines === 0) {\n return {\n display: \"none\"\n };\n }\n const lineClamp = this.numberOfLines;\n return {\n lineClamp,\n webkitLineClamp: lineClamp\n };\n },\n numberOfLines() {\n const lineCountOffsets = [450, 550, 650, Infinity];\n return lineCountOffsets.findIndex((max) => this.width < max);\n },\n compactLink() {\n const link = this.reference.openGraphObject.link;\n if (!link) {\n return \"\";\n }\n if (link.startsWith(\"https://\")) {\n return link.substring(8);\n }\n if (link.startsWith(\"http://\")) {\n return link.substring(7);\n }\n return link;\n },\n route() {\n return getRoute(this.$router, this.reference.openGraphObject.link);\n },\n referenceWidgetLinkComponent() {\n return this.route ? RouterLink : \"a\";\n },\n referenceWidgetLinkProps() {\n return this.route ? { to: this.route } : { href: this.reference.openGraphObject.link, target: \"_blank\" };\n }\n },\n watch: {\n isVisible: {\n handler(val) {\n if (!val) {\n this.idleTimeout = setTimeout(() => {\n if (!this.isVisible) {\n this.destroyWidget();\n }\n }, IDLE_TIMEOUT);\n return;\n }\n if (this.idleTimeout) {\n clearTimeout(this.idleTimeout);\n this.idleTimeout = null;\n }\n if (!this.rendered) {\n this.renderWidget();\n }\n },\n immediate: true\n }\n },\n beforeDestroy() {\n this.destroyWidget();\n },\n methods: {\n t,\n enableInteractive() {\n this.showInteractive = true;\n this.renderWidget();\n },\n renderWidget() {\n if (!this.$refs.customWidget) {\n return;\n }\n if (this?.reference?.richObjectType === \"open-graph\") {\n return;\n }\n this.$refs.customWidget.innerHTML = \"\";\n const widget = document.createElement(\"div\");\n widget.style = \"width: 100%;\";\n this.$refs.customWidget.appendChild(widget);\n this.$nextTick(() => {\n renderWidget(widget, {\n ...this.reference,\n interactive: this.isInteractive\n });\n this.rendered = true;\n });\n },\n destroyWidget() {\n if (this.rendered) {\n destroyWidget(this.reference.richObjectType, this.$el);\n this.rendered = false;\n }\n }\n }\n};\nvar _sfc_render$8 = function render() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"div\", { ref: \"widgetRoot\", class: { \"toggle-interactive\": _vm.hasInteractiveView && !_vm.isInteractive } }, [_vm.reference && _vm.hasCustomWidget ? _c(\"div\", { ref: \"customWidget\", staticClass: \"widget-custom\", class: { \"full-width\": _vm.hasFullWidth } }) : !_vm.noAccess && _vm.reference && _vm.reference.openGraphObject && !_vm.hasCustomWidget ? _c(_vm.referenceWidgetLinkComponent, _vm._b({ tag: \"component\", staticClass: \"widget-default\", attrs: { \"rel\": \"noopener noreferrer\" } }, \"component\", _vm.referenceWidgetLinkProps, false), [_vm.reference.openGraphObject.thumb ? _c(\"img\", { staticClass: \"widget-default--image\", attrs: { \"src\": _vm.reference.openGraphObject.thumb } }) : _vm._e(), _c(\"div\", { staticClass: \"widget-default--details\" }, [_c(\"p\", { staticClass: \"widget-default--name\" }, [_vm._v(\" \" + _vm._s(_vm.reference.openGraphObject.name) + \" \")]), _c(\"p\", { staticClass: \"widget-default--description\", style: _vm.descriptionStyle }, [_vm._v(\" \" + _vm._s(_vm.reference.openGraphObject.description) + \" \")]), _c(\"p\", { staticClass: \"widget-default--link\" }, [_vm._v(\" \" + _vm._s(_vm.compactLink) + \" \")])])]) : _vm._e(), _vm.interactiveOptIn && _vm.hasInteractiveView && !_vm.isInteractive ? _c(\"NcButton\", { staticClass: \"toggle-interactive--button\", on: { \"click\": _vm.enableInteractive } }, [_vm._v(\" \" + _vm._s(_vm.t(\"Enable interactive view\")) + \" \")]) : _vm._e()], 1);\n};\nvar _sfc_staticRenderFns$8 = [];\nvar __component__$8 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$8,\n _sfc_render$8,\n _sfc_staticRenderFns$8,\n false,\n null,\n \"f05dd81b\"\n);\nconst NcReferenceWidget = __component__$8.exports;\nconst _sfc_main$7 = {\n name: \"NcCustomPickerElement\",\n props: {\n /**\n * The reference provider\n */\n provider: {\n type: Object,\n required: true\n }\n },\n emits: [\n \"cancel\",\n \"submit\"\n ],\n data() {\n return {\n isRegistered: isCustomPickerElementRegistered(this.provider.id),\n renderResult: null\n };\n },\n mounted() {\n if (this.isRegistered) {\n this.renderElement();\n }\n },\n beforeDestroy() {\n if (this.isRegistered) {\n destroyCustomPickerElement(this.provider.id, this.$el, this.renderResult);\n }\n },\n methods: {\n renderElement() {\n if (this.$refs.domElement) {\n this.$refs.domElement.innerHTML = \"\";\n }\n const renderFunctionResult = renderCustomPickerElement(this.$refs.domElement, { providerId: this.provider.id, accessible: false });\n Promise.resolve(renderFunctionResult).then((result) => {\n this.renderResult = result;\n if (this.renderResult.object?._isVue && this.renderResult.object?.$on) {\n this.renderResult.object.$on(\"submit\", this.onSubmit);\n this.renderResult.object.$on(\"cancel\", this.onCancel);\n }\n this.renderResult.element.addEventListener(\"submit\", (e) => {\n this.onSubmit(e.detail);\n });\n this.renderResult.element.addEventListener(\"cancel\", this.onCancel);\n });\n },\n onSubmit(value) {\n this.$emit(\"submit\", value);\n },\n onCancel() {\n this.$emit(\"cancel\");\n }\n }\n};\nvar _sfc_render$7 = function render2() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"div\", { ref: \"domElement\" });\n};\nvar _sfc_staticRenderFns$7 = [];\nvar __component__$7 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$7,\n _sfc_render$7,\n _sfc_staticRenderFns$7,\n false,\n null,\n \"0547d92f\"\n);\nconst NcCustomPickerElement = __component__$7.exports;\nconst _sfc_main$6 = {\n name: \"LinkVariantIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nvar _sfc_render$6 = function render3() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"span\", _vm._b({ staticClass: \"material-design-icon link-variant-icon\", attrs: { \"aria-hidden\": _vm.title ? null : \"true\", \"aria-label\": _vm.title, \"role\": \"img\" }, on: { \"click\": function($event) {\n return _vm.$emit(\"click\", $event);\n } } }, \"span\", _vm.$attrs, false), [_c(\"svg\", { staticClass: \"material-design-icon__svg\", attrs: { \"fill\": _vm.fillColor, \"width\": _vm.size, \"height\": _vm.size, \"viewBox\": \"0 0 24 24\" } }, [_c(\"path\", { attrs: { \"d\": \"M10.59,13.41C11,13.8 11,14.44 10.59,14.83C10.2,15.22 9.56,15.22 9.17,14.83C7.22,12.88 7.22,9.71 9.17,7.76V7.76L12.71,4.22C14.66,2.27 17.83,2.27 19.78,4.22C21.73,6.17 21.73,9.34 19.78,11.29L18.29,12.78C18.3,11.96 18.17,11.14 17.89,10.36L18.36,9.88C19.54,8.71 19.54,6.81 18.36,5.64C17.19,4.46 15.29,4.46 14.12,5.64L10.59,9.17C9.41,10.34 9.41,12.24 10.59,13.41M13.41,9.17C13.8,8.78 14.44,8.78 14.83,9.17C16.78,11.12 16.78,14.29 14.83,16.24V16.24L11.29,19.78C9.34,21.73 6.17,21.73 4.22,19.78C2.27,17.83 2.27,14.66 4.22,12.71L5.71,11.22C5.7,12.04 5.83,12.86 6.11,13.65L5.64,14.12C4.46,15.29 4.46,17.19 5.64,18.36C6.81,19.54 8.71,19.54 9.88,18.36L13.41,14.83C14.59,13.66 14.59,11.76 13.41,10.59C13,10.2 13,9.56 13.41,9.17Z\" } }, [_vm.title ? _c(\"title\", [_vm._v(_vm._s(_vm.title))]) : _vm._e()])])]);\n};\nvar _sfc_staticRenderFns$6 = [];\nvar __component__$6 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$6,\n _sfc_render$6,\n _sfc_staticRenderFns$6,\n false,\n null,\n null\n);\nconst LinkVariantIcon = __component__$6.exports;\nregister(t8);\nconst anyLinkProviderId = \"any-link\";\nconst anyLinkProvider = {\n id: anyLinkProviderId,\n title: t(\"Any link\"),\n order: 0,\n icon_url: imagePath(\"core\", \"filetypes/link.svg\")\n};\nwindow._vue_richtext_reference_providers ??= loadState(\"core\", \"reference-provider-list\", []);\nwindow._vue_richtext_reference_provider_timestamps ??= loadState(\"core\", \"reference-provider-timestamps\", {});\nfunction getProvider(providerId) {\n if (providerId === anyLinkProviderId) {\n return anyLinkProvider;\n }\n return getProviders().find((p) => p.id === providerId);\n}\nfunction getProviders() {\n return window._vue_richtext_reference_providers.filter((p) => {\n const keep = !!p.search_providers_ids && p.search_providers_ids.length > 0 || isCustomPickerElementRegistered(p.id);\n if (!keep) {\n logger.debug(`[smart picker] ${p.id} reference provider is discoverable but does not have any related search provider or custom picker component registered`);\n }\n return keep;\n });\n}\nfunction sortProviders(providerList) {\n const timestamps = window._vue_richtext_reference_provider_timestamps;\n return providerList.sort((a, b) => {\n return a.order === b.order ? 0 : a.order > b.order ? 1 : -1;\n }).sort((a, b) => {\n const ta = timestamps[a.id];\n const tb = timestamps[b.id];\n return ta === tb ? 0 : tb === void 0 ? -1 : ta === void 0 ? 1 : ta > tb ? -1 : 1;\n });\n}\nfunction searchProvider(query, limit) {\n const providers = getProviders();\n const escapedQuery = query.replace(/[/\\-\\\\^$*+?.()|[\\]{}]/g, \"\\\\$&\");\n const regexp = new RegExp(escapedQuery, \"i\");\n const sortedProviders = sortProviders(providers);\n const filteredSortedProviders = sortedProviders.filter((p) => {\n return p.title.match(regexp);\n });\n const searchResult = limit ? filteredSortedProviders.slice(0, limit) : filteredSortedProviders;\n if (query === \"\" || searchResult.length === 0) {\n searchResult.push(anyLinkProvider);\n }\n return searchResult;\n}\nasync function touchProvider(providerId) {\n const timestamp = Math.floor(Date.now() / 1e3);\n const url = generateOcsUrl(\"references/provider/{providerId}\", { providerId });\n await axios.put(url, { timestamp });\n window._vue_richtext_reference_provider_timestamps[providerId] = timestamp;\n}\nregister(t41, t47);\nlet mytimer = 0;\nfunction delay(callback, ms) {\n return function() {\n const context = this;\n const args = arguments;\n clearTimeout(mytimer);\n mytimer = setTimeout(function() {\n callback.apply(context, args);\n }, ms);\n };\n}\nfunction isUrl(str) {\n try {\n return Boolean(new URL(str));\n } catch {\n return false;\n }\n}\nconst _sfc_main$5 = {\n name: \"NcProviderList\",\n components: {\n NcSelect,\n NcHighlight,\n NcEmptyContent,\n LinkVariantIcon\n },\n emits: [\n \"select-provider\",\n \"submit\"\n ],\n data() {\n return {\n selectedProvider: null,\n query: \"\",\n multiselectPlaceholder: t(\"Select provider\"),\n providerIconAlt: t(\"Provider icon\")\n };\n },\n computed: {\n options() {\n const result = [];\n if (this.query !== \"\" && isUrl(this.query)) {\n result.push({\n id: this.query,\n title: this.query,\n isLink: true\n });\n }\n result.push(...searchProvider(this.query));\n return result;\n }\n },\n methods: {\n focus() {\n setTimeout(() => {\n this.$refs[\"provider-select\"]?.$el?.querySelector(\"#provider-select-input\")?.focus();\n }, 300);\n },\n onProviderSelected(p) {\n if (p !== null) {\n if (p.isLink) {\n this.$emit(\"submit\", p.title);\n } else {\n this.$emit(\"select-provider\", p);\n }\n this.selectedProvider = null;\n }\n },\n onSearch(query) {\n this.query = query;\n }\n }\n};\nvar _sfc_render$5 = function render4() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"div\", { staticClass: \"provider-list\" }, [_c(\"NcSelect\", { ref: \"provider-select\", staticClass: \"provider-list--select\", attrs: { \"input-id\": \"provider-select-input\", \"label\": \"title\", \"placeholder\": _vm.multiselectPlaceholder, \"options\": _vm.options, \"append-to-body\": false, \"clear-search-on-select\": true, \"clear-search-on-blur\": () => false, \"filterable\": false }, on: { \"search\": _vm.onSearch, \"input\": _vm.onProviderSelected }, scopedSlots: _vm._u([{ key: \"option\", fn: function(option) {\n return [option.isLink ? _c(\"div\", { staticClass: \"provider\" }, [_c(\"LinkVariantIcon\", { staticClass: \"link-icon\", attrs: { \"size\": 20 } }), _c(\"span\", [_vm._v(_vm._s(option.title))])], 1) : _c(\"div\", { staticClass: \"provider\" }, [_c(\"img\", { staticClass: \"provider-icon\", attrs: { \"src\": option.icon_url, \"alt\": _vm.providerIconAlt } }), _c(\"NcHighlight\", { staticClass: \"option-text\", attrs: { \"search\": _vm.query, \"text\": option.title } })], 1)];\n } }]), model: { value: _vm.selectedProvider, callback: function($$v) {\n _vm.selectedProvider = $$v;\n }, expression: \"selectedProvider\" } }), _c(\"NcEmptyContent\", { staticClass: \"provider-list--empty-content\", scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_c(\"LinkVariantIcon\")];\n }, proxy: true }]) })], 1);\n};\nvar _sfc_staticRenderFns$5 = [];\nvar __component__$5 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$5,\n _sfc_render$5,\n _sfc_staticRenderFns$5,\n false,\n null,\n \"f39d58d9\"\n);\nconst NcProviderList = __component__$5.exports;\nregister(t24);\nconst _sfc_main$4 = {\n name: \"NcRawLinkInput\",\n components: {\n LinkVariantIcon,\n NcEmptyContent,\n NcLoadingIcon,\n NcReferenceWidget,\n NcTextField\n },\n props: {\n /**\n * The reference provider\n */\n provider: {\n type: Object,\n required: true\n }\n },\n emits: [\n \"submit\"\n ],\n data() {\n return {\n inputValue: \"\",\n loading: false,\n reference: null,\n abortController: null,\n inputPlaceholder: t(\"Enter link\")\n };\n },\n computed: {\n isLinkValid() {\n return isUrl(this.inputValue);\n }\n },\n methods: {\n focus() {\n this.$refs[\"url-input\"].$el.getElementsByTagName(\"input\")[0]?.focus();\n },\n onSubmit(e) {\n const value = e.target.value;\n if (this.isLinkValid) {\n this.$emit(\"submit\", value);\n }\n },\n onClear() {\n this.inputValue = \"\";\n this.reference = null;\n },\n onInput() {\n this.reference = null;\n if (this.abortController) {\n this.abortController.abort();\n }\n if (this.isLinkValid) {\n delay(() => {\n this.updateReference();\n }, 500)();\n }\n },\n updateReference() {\n this.loading = true;\n this.abortController = new AbortController();\n axios.get(generateOcsUrl(\"references/resolve\", 2) + \"?reference=\" + encodeURIComponent(this.inputValue), {\n signal: this.abortController.signal\n }).then((response) => {\n this.reference = response.data.ocs.data.references[this.inputValue];\n }).catch((error) => {\n logger.error(\"Could not update reference\", { error });\n }).then(() => {\n this.loading = false;\n });\n }\n }\n};\nvar _sfc_render$4 = function render5() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"div\", { staticClass: \"raw-link\" }, [_c(\"div\", { staticClass: \"input-wrapper\" }, [_c(\"NcTextField\", { ref: \"url-input\", attrs: { \"value\": _vm.inputValue, \"show-trailing-button\": _vm.inputValue !== \"\", \"label\": _vm.inputPlaceholder }, on: { \"update:value\": [function($event) {\n _vm.inputValue = $event;\n }, _vm.onInput], \"trailing-button-click\": _vm.onClear }, nativeOn: { \"keyup\": function($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")) return null;\n return _vm.onSubmit.apply(null, arguments);\n } } }, [_vm.loading ? _c(\"NcLoadingIcon\", { attrs: { \"size\": 16 } }) : _c(\"LinkVariantIcon\", { attrs: { \"size\": 16 } })], 1)], 1), _vm.reference !== null ? _c(\"NcReferenceWidget\", { staticClass: \"reference-widget\", attrs: { \"reference\": _vm.reference } }) : _c(\"NcEmptyContent\", { staticClass: \"raw-link--empty-content\", scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_vm.provider.icon_url ? _c(\"img\", { staticClass: \"provider-icon\", attrs: { \"src\": _vm.provider.icon_url } }) : _c(\"LinkVariantIcon\")];\n }, proxy: true }]) })], 1);\n};\nvar _sfc_staticRenderFns$4 = [];\nvar __component__$4 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$4,\n _sfc_render$4,\n _sfc_staticRenderFns$4,\n false,\n null,\n \"be630586\"\n);\nconst NcRawLinkInput = __component__$4.exports;\nconst _sfc_main$3 = {\n name: \"NcSearchResult\",\n components: {\n NcHighlight\n },\n props: {\n /**\n * Unified search result entry\n */\n entry: {\n type: Object,\n required: true\n },\n /**\n * The query that led to getting this result\n * Used to highlight the entry text\n */\n query: {\n type: String,\n required: true\n }\n }\n};\nvar _sfc_render$3 = function render6() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"div\", { staticClass: \"result\" }, [_vm.entry.icon ? _c(\"div\", { staticClass: \"result--icon-class\", class: { [_vm.entry.icon]: true, rounded: _vm.entry.rounded } }) : _c(\"img\", { staticClass: \"result--image\", class: { rounded: _vm.entry.rounded }, attrs: { \"src\": _vm.entry.thumbnailUrl } }), _c(\"div\", { staticClass: \"result--content\" }, [_c(\"span\", { staticClass: \"result--content--name\" }, [_c(\"NcHighlight\", { attrs: { \"search\": _vm.query, \"text\": _vm.entry.title } })], 1), _c(\"span\", { staticClass: \"result--content--subline\" }, [_c(\"NcHighlight\", { attrs: { \"search\": _vm.query, \"text\": _vm.entry.subline } })], 1)])]);\n};\nvar _sfc_staticRenderFns$3 = [];\nvar __component__$3 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$3,\n _sfc_render$3,\n _sfc_staticRenderFns$3,\n false,\n null,\n \"995c2758\"\n);\nconst NcSearchResult = __component__$3.exports;\nregister(t31, t41, t43);\nconst LIMIT = 5;\nconst _sfc_main$2 = {\n name: \"NcSearch\",\n components: {\n LinkVariantIcon,\n DotsHorizontalIcon,\n NcEmptyContent,\n NcSelect,\n NcSearchResult\n },\n /* eslint vue/require-prop-comment: warn -- TODO: Add a proper doc block about what this props do */\n props: {\n /**\n * The selected reference provider\n */\n provider: {\n type: Object,\n required: true\n },\n showEmptyContent: {\n type: Boolean,\n // eslint-disable-next-line vue/no-boolean-default\n default: true\n },\n /**\n * Placeholder of the search\n */\n searchPlaceholder: {\n type: String,\n default: null\n }\n },\n emits: [\n \"submit\"\n ],\n data() {\n return {\n searchQuery: \"\",\n selectedResult: null,\n resultsBySearchProvider: {},\n searching: false,\n searchingMoreOf: null,\n abortController: null,\n noOptionsText: t(\"Start typing to search\"),\n providerIconAlt: t(\"Provider icon\")\n };\n },\n computed: {\n mySearchPlaceholder() {\n return this.searchPlaceholder || t(\"Search\");\n },\n searchProviderIds() {\n return this.provider.search_providers_ids;\n },\n options() {\n if (this.searchQuery === \"\") {\n return [];\n }\n const options = [];\n if (isUrl(this.searchQuery)) {\n options.push(this.rawLinkEntry);\n }\n options.push(...this.formattedSearchResults);\n return options;\n },\n rawLinkEntry() {\n return {\n id: \"rawLinkEntry\",\n resourceUrl: this.searchQuery,\n isRawLink: true\n };\n },\n formattedSearchResults() {\n const results = [];\n this.searchProviderIds.forEach((pid) => {\n if (this.resultsBySearchProvider[pid].entries.length > 0) {\n if (this.searchProviderIds.length > 1 || this.resultsBySearchProvider[pid].entries.length > 1) {\n results.push({\n id: \"groupTitle-\" + pid,\n name: this.resultsBySearchProvider[pid].name,\n isCustomGroupTitle: true,\n providerId: pid\n });\n }\n const providerEntriesWithId = this.resultsBySearchProvider[pid].entries.map((entry, index) => {\n return {\n id: \"provider-\" + pid + \"-entry-\" + index,\n ...entry\n };\n });\n results.push(...providerEntriesWithId);\n if (this.resultsBySearchProvider[pid].isPaginated) {\n results.push({\n id: \"moreOf-\" + pid,\n name: this.resultsBySearchProvider[pid].name,\n isMore: true,\n providerId: pid,\n isLoading: this.searchingMoreOf === pid\n });\n }\n }\n });\n return results;\n }\n },\n mounted() {\n this.resetResults();\n },\n beforeDestroy() {\n this.cancelSearchRequests();\n },\n methods: {\n t,\n resetResults() {\n const resultsBySearchProvider = {};\n this.searchProviderIds.forEach((pid) => {\n resultsBySearchProvider[pid] = {\n entries: []\n };\n });\n this.resultsBySearchProvider = resultsBySearchProvider;\n },\n focus() {\n setTimeout(() => {\n this.$refs[\"search-select\"]?.$el?.querySelector(\"#search-select-input\")?.focus();\n }, 300);\n },\n cancelSearchRequests() {\n if (this.abortController) {\n this.abortController.abort();\n }\n },\n onSearchInput(query) {\n this.searchQuery = query;\n delay(() => {\n this.updateSearch();\n }, 500)();\n },\n onSelectResultSelected(item) {\n if (item !== null) {\n if (item.resourceUrl) {\n this.cancelSearchRequests();\n this.$emit(\"submit\", item.resourceUrl);\n } else if (item.isMore) {\n this.searchMoreOf(item.providerId).then(() => {\n this.selectedResult = null;\n });\n }\n }\n },\n searchMoreOf(searchProviderId) {\n this.searchingMoreOf = searchProviderId;\n this.cancelSearchRequests();\n return this.searchProviders(searchProviderId);\n },\n updateSearch() {\n this.cancelSearchRequests();\n this.resetResults();\n if (this.searchQuery === \"\") {\n this.searching = false;\n return;\n }\n return this.searchProviders();\n },\n searchProviders(searchProviderId = null) {\n this.abortController = new AbortController();\n this.searching = true;\n const searchPromises = searchProviderId === null ? [...this.searchProviderIds].map((pid) => {\n return this.searchOneProvider(pid);\n }) : [this.searchOneProvider(searchProviderId, this.resultsBySearchProvider[searchProviderId]?.cursor ?? null)];\n return Promise.allSettled(searchPromises).then((promises) => {\n const isOneCanceled = !!promises.find((p) => {\n return p.status === \"rejected\" && (p.reason.name === \"CanceledError\" || p.reason.code === \"ERR_CANCELED\");\n });\n if (!isOneCanceled) {\n this.searching = false;\n this.searchingMoreOf = null;\n }\n });\n },\n searchOneProvider(providerId, cursor = null) {\n const url = cursor === null ? generateOcsUrl(\"search/providers/{providerId}/search?term={term}&limit={limit}\", { providerId, term: this.searchQuery, limit: LIMIT }) : generateOcsUrl(\"search/providers/{providerId}/search?term={term}&limit={limit}&cursor={cursor}\", { providerId, term: this.searchQuery, limit: LIMIT, cursor });\n return axios.get(url, {\n signal: this.abortController.signal\n }).then((response) => {\n const data = response.data.ocs.data;\n this.resultsBySearchProvider[providerId].name = data.name;\n this.resultsBySearchProvider[providerId].cursor = data.cursor;\n this.resultsBySearchProvider[providerId].isPaginated = data.isPaginated;\n this.resultsBySearchProvider[providerId].entries.push(...data.entries);\n });\n }\n }\n};\nvar _sfc_render$2 = function render7() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"div\", { staticClass: \"smart-picker-search\", class: { \"with-empty-content\": _vm.showEmptyContent } }, [_c(\"NcSelect\", { ref: \"search-select\", staticClass: \"smart-picker-search--select\", attrs: { \"input-id\": \"search-select-input\", \"label\": \"name\", \"placeholder\": _vm.mySearchPlaceholder, \"options\": _vm.options, \"append-to-body\": false, \"close-on-select\": false, \"clear-search-on-select\": false, \"clear-search-on-blur\": () => false, \"reset-focus-on-options-change\": false, \"filterable\": false, \"autoscroll\": true, \"reset-on-options-change\": false, \"loading\": _vm.searching }, on: { \"search\": _vm.onSearchInput, \"input\": _vm.onSelectResultSelected }, scopedSlots: _vm._u([{ key: \"option\", fn: function(option) {\n return [option.isRawLink ? _c(\"div\", { staticClass: \"custom-option\" }, [_c(\"LinkVariantIcon\", { staticClass: \"option-simple-icon\", attrs: { \"size\": 20 } }), _c(\"span\", { staticClass: \"option-text\" }, [_vm._v(\" \" + _vm._s(_vm.t(\"Raw link {options}\", { options: option.resourceUrl })) + \" \")])], 1) : option.resourceUrl ? _c(\"NcSearchResult\", { staticClass: \"search-result\", attrs: { \"entry\": option, \"query\": _vm.searchQuery } }) : option.isCustomGroupTitle ? _c(\"span\", { staticClass: \"custom-option group-name\" }, [_vm.provider.icon_url ? _c(\"img\", { staticClass: \"provider-icon group-name-icon\", attrs: { \"src\": _vm.provider.icon_url } }) : _vm._e(), _c(\"span\", { staticClass: \"option-text\" }, [_c(\"strong\", [_vm._v(_vm._s(option.name))])])]) : option.isMore ? _c(\"span\", { staticClass: \"custom-option\" }, [option.isLoading ? _c(\"span\", { staticClass: \"option-simple-icon icon-loading-small\" }) : _c(\"DotsHorizontalIcon\", { staticClass: \"option-simple-icon\", attrs: { \"size\": 20 } }), _c(\"span\", { staticClass: \"option-text\" }, [_vm._v(\" \" + _vm._s(_vm.t('Load more \"{options}\"', { options: option.name })) + \" \")])], 1) : _vm._e()];\n } }, { key: \"no-options\", fn: function() {\n return [_vm._v(\" \" + _vm._s(_vm.noOptionsText) + \" \")];\n }, proxy: true }]), model: { value: _vm.selectedResult, callback: function($$v) {\n _vm.selectedResult = $$v;\n }, expression: \"selectedResult\" } }), _vm.showEmptyContent ? _c(\"NcEmptyContent\", { staticClass: \"smart-picker-search--empty-content\", scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_vm.provider.icon_url ? _c(\"img\", { staticClass: \"provider-icon\", attrs: { \"alt\": _vm.providerIconAlt, \"src\": _vm.provider.icon_url } }) : _c(\"LinkVariantIcon\")];\n }, proxy: true }], null, false, 2922132592) }) : _vm._e()], 1);\n};\nvar _sfc_staticRenderFns$2 = [];\nvar __component__$2 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$2,\n _sfc_render$2,\n _sfc_staticRenderFns$2,\n false,\n null,\n \"e61f71e3\"\n);\nconst NcSearch = __component__$2.exports;\nconst MODES = {\n providerList: 1,\n standardLinkInput: 2,\n searchInput: 3,\n customElement: 4\n};\nconst _sfc_main$1 = {\n name: \"NcReferencePicker\",\n components: {\n NcCustomPickerElement,\n NcProviderList,\n NcRawLinkInput,\n NcSearch\n },\n props: {\n /**\n * Provider to select on creation\n * Default: null. Show the provider list\n */\n initialProvider: {\n type: Object,\n default: () => null\n },\n /**\n * Optional width in pixels\n * Default: 100%\n */\n width: {\n type: Number,\n default: null\n },\n /**\n * Focus on the provider list select input on creation\n * Default: true\n */\n focusOnCreate: {\n type: Boolean,\n // eslint-disable-next-line vue/no-boolean-default\n default: true\n }\n },\n emits: [\n \"cancel\",\n \"cancel-raw-link\",\n \"cancel-search\",\n \"provider-selected\",\n \"submit\"\n ],\n data() {\n return {\n MODES,\n selectedProvider: this.initialProvider\n };\n },\n computed: {\n mode() {\n return this.selectedProvider === null ? MODES.providerList : isCustomPickerElementRegistered(this.selectedProvider.id) ? MODES.customElement : this.selectedProvider.search_providers_ids ? MODES.searchInput : MODES.standardLinkInput;\n },\n pickerWrapperStyle() {\n return {\n width: this.width ? this.width + \"px\" : void 0\n };\n }\n },\n mounted() {\n if (this.focusOnCreate) {\n if (this.initialProvider) {\n setTimeout(() => {\n this.$refs[\"url-input\"]?.focus();\n }, 300);\n } else {\n this.$nextTick(() => {\n this.$refs[\"provider-list\"]?.focus();\n });\n }\n }\n },\n methods: {\n onEscapePressed() {\n if (this.selectedProvider !== null) {\n this.deselectProvider();\n } else {\n this.cancelProviderSelection();\n }\n },\n onProviderSelected(provider) {\n this.selectedProvider = provider;\n this.$emit(\"provider-selected\", provider);\n this.$nextTick(() => {\n this.$refs[\"url-input\"]?.focus();\n });\n },\n cancelCustomElement() {\n this.deselectProvider();\n },\n cancelSearch() {\n this.$emit(\"cancel-search\", this.selectedProvider?.title);\n this.deselectProvider();\n },\n cancelRawLinkInput() {\n this.$emit(\"cancel-raw-link\", this.selectedProvider?.title);\n this.deselectProvider();\n },\n cancelProviderSelection() {\n this.$emit(\"cancel\");\n },\n submitLink(link) {\n if (this.selectedProvider !== null) {\n touchProvider(this.selectedProvider.id);\n }\n this.$emit(\"submit\", link);\n this.deselectProvider();\n },\n deselectProvider() {\n this.selectedProvider = null;\n this.$emit(\"provider-selected\", null);\n setTimeout(() => {\n this.$refs[\"provider-list\"]?.focus();\n }, 300);\n }\n }\n};\nvar _sfc_render$1 = function render8() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"div\", { staticClass: \"reference-picker\", style: _vm.pickerWrapperStyle, attrs: { \"tabindex\": \"-1\" }, on: { \"keydown\": function($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"esc\", 27, $event.key, [\"Esc\", \"Escape\"])) return null;\n $event.stopPropagation();\n $event.preventDefault();\n return _vm.onEscapePressed.apply(null, arguments);\n } } }, [_vm.mode === _vm.MODES.providerList ? _c(\"NcProviderList\", { ref: \"provider-list\", on: { \"select-provider\": _vm.onProviderSelected, \"submit\": _vm.submitLink, \"cancel\": _vm.cancelProviderSelection } }) : _vm.mode === _vm.MODES.standardLinkInput ? _c(\"NcRawLinkInput\", { ref: \"url-input\", attrs: { \"provider\": _vm.selectedProvider }, on: { \"submit\": _vm.submitLink, \"cancel\": _vm.cancelRawLinkInput } }) : _vm.mode === _vm.MODES.searchInput ? _c(\"NcSearch\", { ref: \"url-input\", attrs: { \"provider\": _vm.selectedProvider }, on: { \"cancel\": _vm.cancelSearch, \"submit\": _vm.submitLink } }) : _vm.mode === _vm.MODES.customElement ? _c(\"div\", { staticClass: \"custom-element-wrapper\" }, [_c(\"NcCustomPickerElement\", { staticClass: \"custom-element\", attrs: { \"provider\": _vm.selectedProvider }, on: { \"submit\": _vm.submitLink, \"cancel\": _vm.cancelCustomElement } })], 1) : _vm._e()], 1);\n};\nvar _sfc_staticRenderFns$1 = [];\nvar __component__$1 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$1,\n _sfc_render$1,\n _sfc_staticRenderFns$1,\n false,\n null,\n \"646d5538\"\n);\nconst NcReferencePicker = __component__$1.exports;\nregister(t12, t18);\nconst _sfc_main = {\n name: \"NcReferencePickerModal\",\n components: {\n NcReferencePicker,\n NcModal,\n NcButton,\n ArrowLeftIcon: ArrowLeft,\n CloseIcon: Close\n },\n props: {\n /**\n * Provider to select on creation\n * Show the provider list if no initial one is provided\n */\n initialProvider: {\n type: Object,\n default: () => null\n },\n /**\n * Focus on the input item on create\n */\n focusOnCreate: {\n type: Boolean,\n // eslint-disable-next-line vue/no-boolean-default\n default: true\n },\n /**\n * If true, add the modal content to the Viewer trap elements via the event-bus\n */\n isInsideViewer: {\n type: Boolean,\n default: false\n }\n },\n emits: [\n \"cancel\",\n \"submit\"\n ],\n data() {\n return {\n show: true,\n selectedProvider: this.initialProvider,\n backButtonTitle: t(\"Back to provider selection\"),\n closeButtonTitle: t(\"Close\"),\n closeButtonLabel: t(\"Close Smart Picker\")\n };\n },\n computed: {\n isProviderSelected() {\n return this.selectedProvider !== null;\n },\n showBackButton() {\n return this.initialProvider === null && this.isProviderSelected;\n },\n modalSize() {\n return this.isProviderSelected && isCustomPickerElementRegistered(this.selectedProvider.id) ? getCustomPickerElementSize(this.selectedProvider.id) ?? \"large\" : \"normal\";\n },\n showModalName() {\n return !this.isProviderSelected || !isCustomPickerElementRegistered(this.selectedProvider.id);\n },\n modalName() {\n return this.isProviderSelected ? this.selectedProvider.title : t(\"Smart Picker\");\n }\n },\n mounted() {\n if (this.isInsideViewer) {\n const elem = this.$refs.modal_content;\n emit(\"viewer:trapElements:changed\", elem);\n }\n },\n methods: {\n onCancel() {\n this.show = false;\n this.$emit(\"cancel\");\n },\n onSubmit(value) {\n this.show = false;\n this.$emit(\"submit\", value);\n },\n onProviderSelect(provider) {\n this.selectedProvider = provider;\n if (provider === null && this.initialProvider !== null) {\n this.onCancel();\n }\n },\n onBackClicked() {\n this.$refs.referencePicker.deselectProvider();\n }\n }\n};\nvar _sfc_render = function render9() {\n var _vm = this, _c = _vm._self._c;\n return _vm.show ? _c(\"NcModal\", { staticClass: \"reference-picker-modal\", attrs: { \"size\": _vm.modalSize, \"can-close\": true }, on: { \"close\": _vm.onCancel } }, [_c(\"div\", { ref: \"modal_content\", staticClass: \"reference-picker-modal--content\" }, [_vm.showBackButton ? _c(\"NcButton\", { staticClass: \"back-button\", attrs: { \"aria-label\": _vm.backButtonTitle, \"title\": _vm.backButtonTitle }, on: { \"click\": _vm.onBackClicked }, scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_c(\"ArrowLeftIcon\")];\n }, proxy: true }], null, false, 3001860362) }) : _vm._e(), _c(\"NcButton\", { staticClass: \"close-button\", attrs: { \"aria-label\": _vm.closeButtonLabel, \"title\": _vm.closeButtonTitle, \"variant\": \"tertiary\" }, on: { \"click\": _vm.onCancel }, scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_c(\"CloseIcon\")];\n }, proxy: true }], null, false, 2491825086) }), _vm.showModalName ? _c(\"h2\", [_vm._v(\" \" + _vm._s(_vm.modalName) + \" \")]) : _vm._e(), _c(\"NcReferencePicker\", { ref: \"referencePicker\", attrs: { \"initial-provider\": _vm.initialProvider, \"focus-on-create\": _vm.focusOnCreate }, on: { \"provider-selected\": _vm.onProviderSelect, \"submit\": _vm.onSubmit, \"cancel\": _vm.onCancel } })], 1)]) : _vm._e();\n};\nvar _sfc_staticRenderFns = [];\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n null,\n \"00990f2a\"\n);\nconst NcReferencePickerModal = __component__.exports;\nasync function getLinkWithPicker(providerId, isInsideViewer) {\n const modalId = \"referencePickerModal\";\n const modalElement = document.createElement(\"div\");\n modalElement.id = modalId;\n document.body.append(modalElement);\n const { promise, reject, resolve } = Promise.withResolvers();\n const initialProvider = providerId && getProvider(providerId) || null;\n const View = Vue.extend(NcReferencePickerModal);\n const view = new View({\n propsData: {\n initialProvider,\n isInsideViewer\n }\n }).$mount(modalElement);\n view.$on(\"cancel\", () => {\n view.$destroy();\n reject(new Error(\"User cancellation\"));\n });\n view.$on(\"submit\", (link) => {\n view.$destroy();\n resolve(link);\n });\n return promise;\n}\nexport {\n NcReferencePicker as N,\n anyLinkProviderId as a,\n getProvider as b,\n getProviders as c,\n sortProviders as d,\n NcReferencePickerModal as e,\n NcReferenceWidget as f,\n getLinkWithPicker as g,\n NcSearch as h,\n searchProvider as s\n};\n//# sourceMappingURL=referencePickerModal-B69WouiU.mjs.map\n","import '../assets/NcRichText-Cp_5tfBy.css';\nimport { toString } from \"mdast-util-to-string\";\nimport rehypeExternalLinks from \"rehype-external-links\";\nimport rehype2react from \"rehype-react\";\nimport breaks from \"remark-breaks\";\nimport remarkParse from \"remark-parse\";\nimport remark2rehype from \"remark-rehype\";\nimport remarkUnlinkProtocols from \"remark-unlink-protocols\";\nimport { unified } from \"unified\";\nimport { defineComponent, ref } from \"vue\";\nimport { RouterLink } from \"vue-router\";\nimport { N as NcCheckboxRadioSwitch } from \"./NcCheckboxRadioSwitch-D4IV4zWy.mjs\";\nimport { getCurrentUser } from \"@nextcloud/auth\";\nimport axios from \"@nextcloud/axios\";\nimport { generateOcsUrl } from \"@nextcloud/router\";\nimport { getSharingToken } from \"@nextcloud/sharing/public\";\nimport { f as NcReferenceWidget } from \"./referencePickerModal-B69WouiU.mjs\";\nimport { l as logger } from \"./logger-D3RVzcfQ.mjs\";\nimport { U as URL_PATTERN, p as parseUrl, r as remarkAutolink, g as getRoute, N as NcRichTextExternalLink } from \"./autolink-CeB9uxD9.mjs\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nimport { N as NcButton } from \"./NcButton-CCWEL9Ci.mjs\";\nimport { N as NcIconSvgWrapper } from \"./NcIconSvgWrapper-Bui9PhAS.mjs\";\nimport { u as useCopy } from \"./useCopy-DDDe5RYH.mjs\";\nimport { G as GenRandomId } from \"./GenRandomId-F5ebeBB_.mjs\";\nimport { u } from \"unist-builder\";\nimport { visitParents, EXIT, SKIP } from \"unist-util-visit-parents\";\nconst _sfc_main$2 = {\n name: \"NcReferenceList\",\n components: {\n NcReferenceWidget\n },\n /* eslint vue/require-prop-comment: warn -- TODO: Add a proper doc block about what this props do */\n props: {\n text: {\n type: String,\n default: \"\"\n },\n referenceData: {\n type: Array,\n default: null\n },\n limit: {\n type: Number,\n default: 1\n },\n displayFallback: {\n type: Boolean,\n default: false\n },\n interactive: {\n type: Boolean,\n // eslint-disable-next-line vue/no-boolean-default\n default: true\n },\n interactiveOptIn: {\n type: Boolean,\n default: false\n }\n },\n data() {\n return {\n references: null,\n loading: true\n };\n },\n computed: {\n isVisible() {\n return this.loading || this.displayedReferences.length !== 0;\n },\n values() {\n if (this.referenceData) {\n return this.referenceData;\n }\n if (this.displayFallback && !this.loading && !this.references) {\n return [this.fallbackReference];\n }\n return this.references ? Object.values(this.references) : [];\n },\n firstReference() {\n return this.values[0] ?? null;\n },\n displayedReferences() {\n return this.values.filter(Boolean).slice(0, this.limit);\n },\n fallbackReference() {\n return {\n accessible: true,\n openGraphObject: {\n id: this.text,\n link: this.text,\n name: this.text\n },\n richObjectType: \"open-graph\"\n };\n }\n },\n watch: {\n text: \"fetch\"\n },\n mounted() {\n this.fetch();\n },\n methods: {\n fetch() {\n this.loading = true;\n if (this.referenceData) {\n this.references = null;\n this.loading = false;\n return;\n }\n if (!new RegExp(URL_PATTERN).exec(this.text)) {\n this.references = null;\n this.loading = false;\n return;\n }\n this.resolve().then((response) => {\n this.references = response.data.ocs.data.references;\n this.loading = false;\n this.$emit(\"loaded\");\n }).catch((error) => {\n logger.error(\"Failed to extract references\", { error });\n this.loading = false;\n this.$emit(\"loaded\");\n });\n },\n resolve() {\n const match = new RegExp(URL_PATTERN).exec(this.text.trim());\n const isPublic = getCurrentUser() === null;\n if (this.limit === 1 && match) {\n return isPublic ? axios.get(generateOcsUrl(\"references/resolvePublic\") + `?reference=${encodeURIComponent(match[0])}&sharingToken=${getSharingToken()}`) : axios.get(generateOcsUrl(\"references/resolve\") + `?reference=${encodeURIComponent(match[0])}`);\n }\n return isPublic ? axios.post(generateOcsUrl(\"references/extractPublic\"), {\n text: this.text,\n resolve: true,\n limit: this.limit,\n sharingToken: getSharingToken()\n }) : axios.post(generateOcsUrl(\"references/extract\"), {\n text: this.text,\n resolve: true,\n limit: this.limit\n });\n }\n }\n};\nvar _sfc_render$2 = function render() {\n var _vm = this, _c = _vm._self._c;\n return _vm.isVisible ? _c(\"div\", { staticClass: \"widgets--list\", class: { \"icon-loading\": _vm.loading } }, _vm._l(_vm.displayedReferences, function(reference) {\n return _c(\"NcReferenceWidget\", { key: reference.openGraphObject?.id, attrs: { \"reference\": reference, \"interactive\": _vm.interactive, \"interactive-opt-in\": _vm.interactiveOptIn } });\n }), 1) : _vm._e();\n};\nvar _sfc_staticRenderFns$2 = [];\nvar __component__$2 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$2,\n _sfc_render$2,\n _sfc_staticRenderFns$2,\n false,\n null,\n \"a50e616b\"\n);\nconst NcReferenceList = __component__$2.exports;\nfunction ccount(value, character) {\n const source = String(value);\n if (typeof character !== \"string\") {\n throw new TypeError(\"Expected character\");\n }\n let count = 0;\n let index = source.indexOf(character);\n while (index !== -1) {\n count++;\n index = source.indexOf(character, index + character.length);\n }\n return count;\n}\nfunction ok$1() {\n}\nconst asciiAlpha = regexCheck(/[A-Za-z]/);\nconst asciiAlphanumeric = regexCheck(/[\\dA-Za-z]/);\nfunction asciiControl(code2) {\n return (\n // Special whitespace codes (which have negative values), C0 and Control\n // character DEL\n code2 !== null && (code2 < 32 || code2 === 127)\n );\n}\nfunction markdownLineEnding(code2) {\n return code2 !== null && code2 < -2;\n}\nfunction markdownLineEndingOrSpace(code2) {\n return code2 !== null && (code2 < 0 || code2 === 32);\n}\nfunction markdownSpace(code2) {\n return code2 === -2 || code2 === -1 || code2 === 32;\n}\nconst unicodePunctuation = regexCheck(new RegExp(\"\\\\p{P}|\\\\p{S}\", \"u\"));\nconst unicodeWhitespace = regexCheck(/\\s/);\nfunction regexCheck(regex) {\n return check;\n function check(code2) {\n return code2 !== null && code2 > -1 && regex.test(String.fromCharCode(code2));\n }\n}\nfunction escapeStringRegexp(string) {\n if (typeof string !== \"string\") {\n throw new TypeError(\"Expected a string\");\n }\n return string.replace(/[|\\\\{}()[\\]^$+*?.]/g, \"\\\\$&\").replace(/-/g, \"\\\\x2d\");\n}\nconst convert = (\n // Note: overloads in JSDoc can’t yet use different `@template`s.\n /**\n * @type {(\n * ((test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &\n * ((test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &\n * ((test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate) &\n * ((test?: null | undefined) => (node?: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &\n * ((test?: Test) => Check)\n * )}\n */\n /**\n * @param {Test} [test]\n * @returns {Check}\n */\n (function(test) {\n if (test === null || test === void 0) {\n return ok;\n }\n if (typeof test === \"function\") {\n return castFactory(test);\n }\n if (typeof test === \"object\") {\n return Array.isArray(test) ? anyFactory(test) : (\n // Cast because `ReadonlyArray` goes into the above but `isArray`\n // narrows to `Array`.\n propertiesFactory(\n /** @type {Props} */\n test\n )\n );\n }\n if (typeof test === \"string\") {\n return typeFactory(test);\n }\n throw new Error(\"Expected function, string, or object as test\");\n })\n);\nfunction anyFactory(tests) {\n const checks = [];\n let index = -1;\n while (++index < tests.length) {\n checks[index] = convert(tests[index]);\n }\n return castFactory(any);\n function any(...parameters) {\n let index2 = -1;\n while (++index2 < checks.length) {\n if (checks[index2].apply(this, parameters)) return true;\n }\n return false;\n }\n}\nfunction propertiesFactory(check) {\n const checkAsRecord = (\n /** @type {Record} */\n check\n );\n return castFactory(all);\n function all(node) {\n const nodeAsRecord = (\n /** @type {Record} */\n /** @type {unknown} */\n node\n );\n let key;\n for (key in check) {\n if (nodeAsRecord[key] !== checkAsRecord[key]) return false;\n }\n return true;\n }\n}\nfunction typeFactory(check) {\n return castFactory(type);\n function type(node) {\n return node && node.type === check;\n }\n}\nfunction castFactory(testFunction) {\n return check;\n function check(value, index, parent) {\n return Boolean(\n looksLikeANode(value) && testFunction.call(\n this,\n value,\n typeof index === \"number\" ? index : void 0,\n parent || void 0\n )\n );\n }\n}\nfunction ok() {\n return true;\n}\nfunction looksLikeANode(value) {\n return value !== null && typeof value === \"object\" && \"type\" in value;\n}\nfunction findAndReplace(tree, list2, options) {\n const settings = options || {};\n const ignored = convert(settings.ignore || []);\n const pairs = toPairs(list2);\n let pairIndex = -1;\n while (++pairIndex < pairs.length) {\n visitParents(tree, \"text\", visitor);\n }\n function visitor(node, parents) {\n let index = -1;\n let grandparent;\n while (++index < parents.length) {\n const parent = parents[index];\n const siblings = grandparent ? grandparent.children : void 0;\n if (ignored(\n parent,\n siblings ? siblings.indexOf(parent) : void 0,\n grandparent\n )) {\n return;\n }\n grandparent = parent;\n }\n if (grandparent) {\n return handler(node, parents);\n }\n }\n function handler(node, parents) {\n const parent = parents[parents.length - 1];\n const find = pairs[pairIndex][0];\n const replace2 = pairs[pairIndex][1];\n let start = 0;\n const siblings = parent.children;\n const index = siblings.indexOf(node);\n let change = false;\n let nodes = [];\n find.lastIndex = 0;\n let match = find.exec(node.value);\n while (match) {\n const position = match.index;\n const matchObject = {\n index: match.index,\n input: match.input,\n stack: [...parents, node]\n };\n let value = replace2(...match, matchObject);\n if (typeof value === \"string\") {\n value = value.length > 0 ? { type: \"text\", value } : void 0;\n }\n if (value === false) {\n find.lastIndex = position + 1;\n } else {\n if (start !== position) {\n nodes.push({\n type: \"text\",\n value: node.value.slice(start, position)\n });\n }\n if (Array.isArray(value)) {\n nodes.push(...value);\n } else if (value) {\n nodes.push(value);\n }\n start = position + match[0].length;\n change = true;\n }\n if (!find.global) {\n break;\n }\n match = find.exec(node.value);\n }\n if (change) {\n if (start < node.value.length) {\n nodes.push({ type: \"text\", value: node.value.slice(start) });\n }\n parent.children.splice(index, 1, ...nodes);\n } else {\n nodes = [node];\n }\n return index + nodes.length;\n }\n}\nfunction toPairs(tupleOrList) {\n const result = [];\n if (!Array.isArray(tupleOrList)) {\n throw new TypeError(\"Expected find and replace tuple or list of tuples\");\n }\n const list2 = !tupleOrList[0] || Array.isArray(tupleOrList[0]) ? tupleOrList : [tupleOrList];\n let index = -1;\n while (++index < list2.length) {\n const tuple = list2[index];\n result.push([toExpression(tuple[0]), toFunction(tuple[1])]);\n }\n return result;\n}\nfunction toExpression(find) {\n return typeof find === \"string\" ? new RegExp(escapeStringRegexp(find), \"g\") : find;\n}\nfunction toFunction(replace2) {\n return typeof replace2 === \"function\" ? replace2 : function() {\n return replace2;\n };\n}\nconst inConstruct = \"phrasing\";\nconst notInConstruct = [\"autolink\", \"link\", \"image\", \"label\"];\nfunction gfmAutolinkLiteralFromMarkdown() {\n return {\n transforms: [transformGfmAutolinkLiterals],\n enter: {\n literalAutolink: enterLiteralAutolink,\n literalAutolinkEmail: enterLiteralAutolinkValue,\n literalAutolinkHttp: enterLiteralAutolinkValue,\n literalAutolinkWww: enterLiteralAutolinkValue\n },\n exit: {\n literalAutolink: exitLiteralAutolink,\n literalAutolinkEmail: exitLiteralAutolinkEmail,\n literalAutolinkHttp: exitLiteralAutolinkHttp,\n literalAutolinkWww: exitLiteralAutolinkWww\n }\n };\n}\nfunction gfmAutolinkLiteralToMarkdown() {\n return {\n unsafe: [\n {\n character: \"@\",\n before: \"[+\\\\-.\\\\w]\",\n after: \"[\\\\-.\\\\w]\",\n inConstruct,\n notInConstruct\n },\n {\n character: \".\",\n before: \"[Ww]\",\n after: \"[\\\\-.\\\\w]\",\n inConstruct,\n notInConstruct\n },\n {\n character: \":\",\n before: \"[ps]\",\n after: \"\\\\/\",\n inConstruct,\n notInConstruct\n }\n ]\n };\n}\nfunction enterLiteralAutolink(token) {\n this.enter({ type: \"link\", title: null, url: \"\", children: [] }, token);\n}\nfunction enterLiteralAutolinkValue(token) {\n this.config.enter.autolinkProtocol.call(this, token);\n}\nfunction exitLiteralAutolinkHttp(token) {\n this.config.exit.autolinkProtocol.call(this, token);\n}\nfunction exitLiteralAutolinkWww(token) {\n this.config.exit.data.call(this, token);\n const node = this.stack[this.stack.length - 1];\n ok$1(node.type === \"link\");\n node.url = \"http://\" + this.sliceSerialize(token);\n}\nfunction exitLiteralAutolinkEmail(token) {\n this.config.exit.autolinkEmail.call(this, token);\n}\nfunction exitLiteralAutolink(token) {\n this.exit(token);\n}\nfunction transformGfmAutolinkLiterals(tree) {\n findAndReplace(\n tree,\n [\n [/(https?:\\/\\/|www(?=\\.))([-.\\w]+)([^ \\t\\r\\n]*)/gi, findUrl],\n [/([-.\\w+]+)@([-\\w]+(?:\\.[-\\w]+)+)/g, findEmail]\n ],\n { ignore: [\"link\", \"linkReference\"] }\n );\n}\nfunction findUrl(_, protocol, domain2, path2, match) {\n let prefix = \"\";\n if (!previous(match)) {\n return false;\n }\n if (/^w/i.test(protocol)) {\n domain2 = protocol + domain2;\n protocol = \"\";\n prefix = \"http://\";\n }\n if (!isCorrectDomain(domain2)) {\n return false;\n }\n const parts = splitUrl(domain2 + path2);\n if (!parts[0]) return false;\n const result = {\n type: \"link\",\n title: null,\n url: prefix + protocol + parts[0],\n children: [{ type: \"text\", value: protocol + parts[0] }]\n };\n if (parts[1]) {\n return [result, { type: \"text\", value: parts[1] }];\n }\n return result;\n}\nfunction findEmail(_, atext, label, match) {\n if (\n // Not an expected previous character.\n !previous(match, true) || // Label ends in not allowed character.\n /[-\\d_]$/.test(label)\n ) {\n return false;\n }\n return {\n type: \"link\",\n title: null,\n url: \"mailto:\" + atext + \"@\" + label,\n children: [{ type: \"text\", value: atext + \"@\" + label }]\n };\n}\nfunction isCorrectDomain(domain2) {\n const parts = domain2.split(\".\");\n if (parts.length < 2 || parts[parts.length - 1] && (/_/.test(parts[parts.length - 1]) || !/[a-zA-Z\\d]/.test(parts[parts.length - 1])) || parts[parts.length - 2] && (/_/.test(parts[parts.length - 2]) || !/[a-zA-Z\\d]/.test(parts[parts.length - 2]))) {\n return false;\n }\n return true;\n}\nfunction splitUrl(url) {\n const trailExec = /[!\"&'),.:;<>?\\]}]+$/.exec(url);\n if (!trailExec) {\n return [url, void 0];\n }\n url = url.slice(0, trailExec.index);\n let trail2 = trailExec[0];\n let closingParenIndex = trail2.indexOf(\")\");\n const openingParens = ccount(url, \"(\");\n let closingParens = ccount(url, \")\");\n while (closingParenIndex !== -1 && openingParens > closingParens) {\n url += trail2.slice(0, closingParenIndex + 1);\n trail2 = trail2.slice(closingParenIndex + 1);\n closingParenIndex = trail2.indexOf(\")\");\n closingParens++;\n }\n return [url, trail2];\n}\nfunction previous(match, email) {\n const code2 = match.input.charCodeAt(match.index - 1);\n return (match.index === 0 || unicodeWhitespace(code2) || unicodePunctuation(code2)) && (!email || code2 !== 47);\n}\nfunction normalizeIdentifier(value) {\n return value.replace(/[\\t\\n\\r ]+/g, \" \").replace(/^ | $/g, \"\").toLowerCase().toUpperCase();\n}\nfootnoteReference.peek = footnoteReferencePeek;\nfunction gfmFootnoteFromMarkdown() {\n return {\n enter: {\n gfmFootnoteDefinition: enterFootnoteDefinition,\n gfmFootnoteDefinitionLabelString: enterFootnoteDefinitionLabelString,\n gfmFootnoteCall: enterFootnoteCall,\n gfmFootnoteCallString: enterFootnoteCallString\n },\n exit: {\n gfmFootnoteDefinition: exitFootnoteDefinition,\n gfmFootnoteDefinitionLabelString: exitFootnoteDefinitionLabelString,\n gfmFootnoteCall: exitFootnoteCall,\n gfmFootnoteCallString: exitFootnoteCallString\n }\n };\n}\nfunction gfmFootnoteToMarkdown() {\n return {\n // This is on by default already.\n unsafe: [{ character: \"[\", inConstruct: [\"phrasing\", \"label\", \"reference\"] }],\n handlers: { footnoteDefinition, footnoteReference }\n };\n}\nfunction enterFootnoteDefinition(token) {\n this.enter(\n { type: \"footnoteDefinition\", identifier: \"\", label: \"\", children: [] },\n token\n );\n}\nfunction enterFootnoteDefinitionLabelString() {\n this.buffer();\n}\nfunction exitFootnoteDefinitionLabelString(token) {\n const label = this.resume();\n const node = this.stack[this.stack.length - 1];\n ok$1(node.type === \"footnoteDefinition\");\n node.label = label;\n node.identifier = normalizeIdentifier(\n this.sliceSerialize(token)\n ).toLowerCase();\n}\nfunction exitFootnoteDefinition(token) {\n this.exit(token);\n}\nfunction enterFootnoteCall(token) {\n this.enter({ type: \"footnoteReference\", identifier: \"\", label: \"\" }, token);\n}\nfunction enterFootnoteCallString() {\n this.buffer();\n}\nfunction exitFootnoteCallString(token) {\n const label = this.resume();\n const node = this.stack[this.stack.length - 1];\n ok$1(node.type === \"footnoteReference\");\n node.label = label;\n node.identifier = normalizeIdentifier(\n this.sliceSerialize(token)\n ).toLowerCase();\n}\nfunction exitFootnoteCall(token) {\n this.exit(token);\n}\nfunction footnoteReference(node, _, state, info) {\n const tracker = state.createTracker(info);\n let value = tracker.move(\"[^\");\n const exit2 = state.enter(\"footnoteReference\");\n const subexit = state.enter(\"reference\");\n value += tracker.move(\n state.safe(state.associationId(node), {\n ...tracker.current(),\n before: value,\n after: \"]\"\n })\n );\n subexit();\n exit2();\n value += tracker.move(\"]\");\n return value;\n}\nfunction footnoteReferencePeek() {\n return \"[\";\n}\nfunction footnoteDefinition(node, _, state, info) {\n const tracker = state.createTracker(info);\n let value = tracker.move(\"[^\");\n const exit2 = state.enter(\"footnoteDefinition\");\n const subexit = state.enter(\"label\");\n value += tracker.move(\n state.safe(state.associationId(node), {\n ...tracker.current(),\n before: value,\n after: \"]\"\n })\n );\n subexit();\n value += tracker.move(\n \"]:\" + (node.children && node.children.length > 0 ? \" \" : \"\")\n );\n tracker.shift(4);\n value += tracker.move(\n state.indentLines(state.containerFlow(node, tracker.current()), map$2)\n );\n exit2();\n return value;\n}\nfunction map$2(line, index, blank) {\n if (index === 0) {\n return line;\n }\n return (blank ? \"\" : \" \") + line;\n}\nconst constructsWithoutStrikethrough = [\n \"autolink\",\n \"destinationLiteral\",\n \"destinationRaw\",\n \"reference\",\n \"titleQuote\",\n \"titleApostrophe\"\n];\nhandleDelete.peek = peekDelete;\nfunction gfmStrikethroughFromMarkdown() {\n return {\n canContainEols: [\"delete\"],\n enter: { strikethrough: enterStrikethrough },\n exit: { strikethrough: exitStrikethrough }\n };\n}\nfunction gfmStrikethroughToMarkdown() {\n return {\n unsafe: [\n {\n character: \"~\",\n inConstruct: \"phrasing\",\n notInConstruct: constructsWithoutStrikethrough\n }\n ],\n handlers: { delete: handleDelete }\n };\n}\nfunction enterStrikethrough(token) {\n this.enter({ type: \"delete\", children: [] }, token);\n}\nfunction exitStrikethrough(token) {\n this.exit(token);\n}\nfunction handleDelete(node, _, state, info) {\n const tracker = state.createTracker(info);\n const exit2 = state.enter(\"strikethrough\");\n let value = tracker.move(\"~~\");\n value += state.containerPhrasing(node, {\n ...tracker.current(),\n before: value,\n after: \"~\"\n });\n value += tracker.move(\"~~\");\n exit2();\n return value;\n}\nfunction peekDelete() {\n return \"~\";\n}\nfunction markdownTable(table, options = {}) {\n const align = (options.align || []).concat();\n const stringLength = options.stringLength || defaultStringLength;\n const alignments = [];\n const cellMatrix = [];\n const sizeMatrix = [];\n const longestCellByColumn = [];\n let mostCellsPerRow = 0;\n let rowIndex = -1;\n while (++rowIndex < table.length) {\n const row2 = [];\n const sizes2 = [];\n let columnIndex2 = -1;\n if (table[rowIndex].length > mostCellsPerRow) {\n mostCellsPerRow = table[rowIndex].length;\n }\n while (++columnIndex2 < table[rowIndex].length) {\n const cell = serialize(table[rowIndex][columnIndex2]);\n if (options.alignDelimiters !== false) {\n const size = stringLength(cell);\n sizes2[columnIndex2] = size;\n if (longestCellByColumn[columnIndex2] === void 0 || size > longestCellByColumn[columnIndex2]) {\n longestCellByColumn[columnIndex2] = size;\n }\n }\n row2.push(cell);\n }\n cellMatrix[rowIndex] = row2;\n sizeMatrix[rowIndex] = sizes2;\n }\n let columnIndex = -1;\n if (typeof align === \"object\" && \"length\" in align) {\n while (++columnIndex < mostCellsPerRow) {\n alignments[columnIndex] = toAlignment(align[columnIndex]);\n }\n } else {\n const code2 = toAlignment(align);\n while (++columnIndex < mostCellsPerRow) {\n alignments[columnIndex] = code2;\n }\n }\n columnIndex = -1;\n const row = [];\n const sizes = [];\n while (++columnIndex < mostCellsPerRow) {\n const code2 = alignments[columnIndex];\n let before = \"\";\n let after = \"\";\n if (code2 === 99) {\n before = \":\";\n after = \":\";\n } else if (code2 === 108) {\n before = \":\";\n } else if (code2 === 114) {\n after = \":\";\n }\n let size = options.alignDelimiters === false ? 1 : Math.max(\n 1,\n longestCellByColumn[columnIndex] - before.length - after.length\n );\n const cell = before + \"-\".repeat(size) + after;\n if (options.alignDelimiters !== false) {\n size = before.length + size + after.length;\n if (size > longestCellByColumn[columnIndex]) {\n longestCellByColumn[columnIndex] = size;\n }\n sizes[columnIndex] = size;\n }\n row[columnIndex] = cell;\n }\n cellMatrix.splice(1, 0, row);\n sizeMatrix.splice(1, 0, sizes);\n rowIndex = -1;\n const lines = [];\n while (++rowIndex < cellMatrix.length) {\n const row2 = cellMatrix[rowIndex];\n const sizes2 = sizeMatrix[rowIndex];\n columnIndex = -1;\n const line = [];\n while (++columnIndex < mostCellsPerRow) {\n const cell = row2[columnIndex] || \"\";\n let before = \"\";\n let after = \"\";\n if (options.alignDelimiters !== false) {\n const size = longestCellByColumn[columnIndex] - (sizes2[columnIndex] || 0);\n const code2 = alignments[columnIndex];\n if (code2 === 114) {\n before = \" \".repeat(size);\n } else if (code2 === 99) {\n if (size % 2) {\n before = \" \".repeat(size / 2 + 0.5);\n after = \" \".repeat(size / 2 - 0.5);\n } else {\n before = \" \".repeat(size / 2);\n after = before;\n }\n } else {\n after = \" \".repeat(size);\n }\n }\n if (options.delimiterStart !== false && !columnIndex) {\n line.push(\"|\");\n }\n if (options.padding !== false && // Don’t add the opening space if we’re not aligning and the cell is\n // empty: there will be a closing space.\n !(options.alignDelimiters === false && cell === \"\") && (options.delimiterStart !== false || columnIndex)) {\n line.push(\" \");\n }\n if (options.alignDelimiters !== false) {\n line.push(before);\n }\n line.push(cell);\n if (options.alignDelimiters !== false) {\n line.push(after);\n }\n if (options.padding !== false) {\n line.push(\" \");\n }\n if (options.delimiterEnd !== false || columnIndex !== mostCellsPerRow - 1) {\n line.push(\"|\");\n }\n }\n lines.push(\n options.delimiterEnd === false ? line.join(\"\").replace(/ +$/, \"\") : line.join(\"\")\n );\n }\n return lines.join(\"\\n\");\n}\nfunction serialize(value) {\n return value === null || value === void 0 ? \"\" : String(value);\n}\nfunction defaultStringLength(value) {\n return value.length;\n}\nfunction toAlignment(value) {\n const code2 = typeof value === \"string\" ? value.codePointAt(0) : 0;\n return code2 === 67 || code2 === 99 ? 99 : code2 === 76 || code2 === 108 ? 108 : code2 === 82 || code2 === 114 ? 114 : 0;\n}\nfunction blockquote(node, _, state, info) {\n const exit2 = state.enter(\"blockquote\");\n const tracker = state.createTracker(info);\n tracker.move(\"> \");\n tracker.shift(2);\n const value = state.indentLines(\n state.containerFlow(node, tracker.current()),\n map$1\n );\n exit2();\n return value;\n}\nfunction map$1(line, _, blank) {\n return \">\" + (blank ? \"\" : \" \") + line;\n}\nfunction patternInScope(stack, pattern) {\n return listInScope(stack, pattern.inConstruct, true) && !listInScope(stack, pattern.notInConstruct, false);\n}\nfunction listInScope(stack, list2, none) {\n if (typeof list2 === \"string\") {\n list2 = [list2];\n }\n if (!list2 || list2.length === 0) {\n return none;\n }\n let index = -1;\n while (++index < list2.length) {\n if (stack.includes(list2[index])) {\n return true;\n }\n }\n return false;\n}\nfunction hardBreak(_, _1, state, info) {\n let index = -1;\n while (++index < state.unsafe.length) {\n if (state.unsafe[index].character === \"\\n\" && patternInScope(state.stack, state.unsafe[index])) {\n return /[ \\t]/.test(info.before) ? \"\" : \" \";\n }\n }\n return \"\\\\\\n\";\n}\nfunction longestStreak(value, substring) {\n const source = String(value);\n let index = source.indexOf(substring);\n let expected = index;\n let count = 0;\n let max = 0;\n if (typeof substring !== \"string\") {\n throw new TypeError(\"Expected substring\");\n }\n while (index !== -1) {\n if (index === expected) {\n if (++count > max) {\n max = count;\n }\n } else {\n count = 1;\n }\n expected = index + substring.length;\n index = source.indexOf(substring, expected);\n }\n return max;\n}\nfunction formatCodeAsIndented(node, state) {\n return Boolean(\n state.options.fences === false && node.value && // If there’s no info…\n !node.lang && // And there’s a non-whitespace character…\n /[^ \\r\\n]/.test(node.value) && // And the value doesn’t start or end in a blank…\n !/^[\\t ]*(?:[\\r\\n]|$)|(?:^|[\\r\\n])[\\t ]*$/.test(node.value)\n );\n}\nfunction checkFence(state) {\n const marker = state.options.fence || \"`\";\n if (marker !== \"`\" && marker !== \"~\") {\n throw new Error(\n \"Cannot serialize code with `\" + marker + \"` for `options.fence`, expected `` ` `` or `~`\"\n );\n }\n return marker;\n}\nfunction code$1(node, _, state, info) {\n const marker = checkFence(state);\n const raw = node.value || \"\";\n const suffix = marker === \"`\" ? \"GraveAccent\" : \"Tilde\";\n if (formatCodeAsIndented(node, state)) {\n const exit3 = state.enter(\"codeIndented\");\n const value2 = state.indentLines(raw, map);\n exit3();\n return value2;\n }\n const tracker = state.createTracker(info);\n const sequence = marker.repeat(Math.max(longestStreak(raw, marker) + 1, 3));\n const exit2 = state.enter(\"codeFenced\");\n let value = tracker.move(sequence);\n if (node.lang) {\n const subexit = state.enter(`codeFencedLang${suffix}`);\n value += tracker.move(\n state.safe(node.lang, {\n before: value,\n after: \" \",\n encode: [\"`\"],\n ...tracker.current()\n })\n );\n subexit();\n }\n if (node.lang && node.meta) {\n const subexit = state.enter(`codeFencedMeta${suffix}`);\n value += tracker.move(\" \");\n value += tracker.move(\n state.safe(node.meta, {\n before: value,\n after: \"\\n\",\n encode: [\"`\"],\n ...tracker.current()\n })\n );\n subexit();\n }\n value += tracker.move(\"\\n\");\n if (raw) {\n value += tracker.move(raw + \"\\n\");\n }\n value += tracker.move(sequence);\n exit2();\n return value;\n}\nfunction map(line, _, blank) {\n return (blank ? \"\" : \" \") + line;\n}\nfunction checkQuote(state) {\n const marker = state.options.quote || '\"';\n if (marker !== '\"' && marker !== \"'\") {\n throw new Error(\n \"Cannot serialize title with `\" + marker + \"` for `options.quote`, expected `\\\"`, or `'`\"\n );\n }\n return marker;\n}\nfunction definition(node, _, state, info) {\n const quote = checkQuote(state);\n const suffix = quote === '\"' ? \"Quote\" : \"Apostrophe\";\n const exit2 = state.enter(\"definition\");\n let subexit = state.enter(\"label\");\n const tracker = state.createTracker(info);\n let value = tracker.move(\"[\");\n value += tracker.move(\n state.safe(state.associationId(node), {\n before: value,\n after: \"]\",\n ...tracker.current()\n })\n );\n value += tracker.move(\"]: \");\n subexit();\n if (\n // If there’s no url, or…\n !node.url || // If there are control characters or whitespace.\n /[\\0- \\u007F]/.test(node.url)\n ) {\n subexit = state.enter(\"destinationLiteral\");\n value += tracker.move(\"<\");\n value += tracker.move(\n state.safe(node.url, { before: value, after: \">\", ...tracker.current() })\n );\n value += tracker.move(\">\");\n } else {\n subexit = state.enter(\"destinationRaw\");\n value += tracker.move(\n state.safe(node.url, {\n before: value,\n after: node.title ? \" \" : \"\\n\",\n ...tracker.current()\n })\n );\n }\n subexit();\n if (node.title) {\n subexit = state.enter(`title${suffix}`);\n value += tracker.move(\" \" + quote);\n value += tracker.move(\n state.safe(node.title, {\n before: value,\n after: quote,\n ...tracker.current()\n })\n );\n value += tracker.move(quote);\n subexit();\n }\n exit2();\n return value;\n}\nfunction checkEmphasis(state) {\n const marker = state.options.emphasis || \"*\";\n if (marker !== \"*\" && marker !== \"_\") {\n throw new Error(\n \"Cannot serialize emphasis with `\" + marker + \"` for `options.emphasis`, expected `*`, or `_`\"\n );\n }\n return marker;\n}\nfunction encodeCharacterReference(code2) {\n return \"\" + code2.toString(16).toUpperCase() + \";\";\n}\nfunction classifyCharacter(code2) {\n if (code2 === null || markdownLineEndingOrSpace(code2) || unicodeWhitespace(code2)) {\n return 1;\n }\n if (unicodePunctuation(code2)) {\n return 2;\n }\n}\nfunction encodeInfo(outside, inside, marker) {\n const outsideKind = classifyCharacter(outside);\n const insideKind = classifyCharacter(inside);\n if (outsideKind === void 0) {\n return insideKind === void 0 ? (\n // Letter inside:\n // we have to encode *both* letters for `_` as it is looser.\n // it already forms for `*` (and GFMs `~`).\n marker === \"_\" ? { inside: true, outside: true } : { inside: false, outside: false }\n ) : insideKind === 1 ? (\n // Whitespace inside: encode both (letter, whitespace).\n { inside: true, outside: true }\n ) : (\n // Punctuation inside: encode outer (letter)\n { inside: false, outside: true }\n );\n }\n if (outsideKind === 1) {\n return insideKind === void 0 ? (\n // Letter inside: already forms.\n { inside: false, outside: false }\n ) : insideKind === 1 ? (\n // Whitespace inside: encode both (whitespace).\n { inside: true, outside: true }\n ) : (\n // Punctuation inside: already forms.\n { inside: false, outside: false }\n );\n }\n return insideKind === void 0 ? (\n // Letter inside: already forms.\n { inside: false, outside: false }\n ) : insideKind === 1 ? (\n // Whitespace inside: encode inner (whitespace).\n { inside: true, outside: false }\n ) : (\n // Punctuation inside: already forms.\n { inside: false, outside: false }\n );\n}\nemphasis.peek = emphasisPeek;\nfunction emphasis(node, _, state, info) {\n const marker = checkEmphasis(state);\n const exit2 = state.enter(\"emphasis\");\n const tracker = state.createTracker(info);\n const before = tracker.move(marker);\n let between = tracker.move(\n state.containerPhrasing(node, {\n after: marker,\n before,\n ...tracker.current()\n })\n );\n const betweenHead = between.charCodeAt(0);\n const open = encodeInfo(\n info.before.charCodeAt(info.before.length - 1),\n betweenHead,\n marker\n );\n if (open.inside) {\n between = encodeCharacterReference(betweenHead) + between.slice(1);\n }\n const betweenTail = between.charCodeAt(between.length - 1);\n const close = encodeInfo(info.after.charCodeAt(0), betweenTail, marker);\n if (close.inside) {\n between = between.slice(0, -1) + encodeCharacterReference(betweenTail);\n }\n const after = tracker.move(marker);\n exit2();\n state.attentionEncodeSurroundingInfo = {\n after: close.outside,\n before: open.outside\n };\n return before + between + after;\n}\nfunction emphasisPeek(_, _1, state) {\n return state.options.emphasis || \"*\";\n}\nfunction visit(tree, testOrVisitor, visitorOrReverse, maybeReverse) {\n let reverse;\n let test;\n let visitor;\n if (typeof testOrVisitor === \"function\" && typeof visitorOrReverse !== \"function\") {\n test = void 0;\n visitor = testOrVisitor;\n reverse = visitorOrReverse;\n } else {\n test = testOrVisitor;\n visitor = visitorOrReverse;\n reverse = maybeReverse;\n }\n visitParents(tree, test, overload, reverse);\n function overload(node, parents) {\n const parent = parents[parents.length - 1];\n const index = parent ? parent.children.indexOf(node) : void 0;\n return visitor(node, index, parent);\n }\n}\nfunction formatHeadingAsSetext(node, state) {\n let literalWithBreak = false;\n visit(node, function(node2) {\n if (\"value\" in node2 && /\\r?\\n|\\r/.test(node2.value) || node2.type === \"break\") {\n literalWithBreak = true;\n return EXIT;\n }\n });\n return Boolean(\n (!node.depth || node.depth < 3) && toString(node) && (state.options.setext || literalWithBreak)\n );\n}\nfunction heading(node, _, state, info) {\n const rank = Math.max(Math.min(6, node.depth || 1), 1);\n const tracker = state.createTracker(info);\n if (formatHeadingAsSetext(node, state)) {\n const exit3 = state.enter(\"headingSetext\");\n const subexit2 = state.enter(\"phrasing\");\n const value2 = state.containerPhrasing(node, {\n ...tracker.current(),\n before: \"\\n\",\n after: \"\\n\"\n });\n subexit2();\n exit3();\n return value2 + \"\\n\" + (rank === 1 ? \"=\" : \"-\").repeat(\n // The whole size…\n value2.length - // Minus the position of the character after the last EOL (or\n // 0 if there is none)…\n (Math.max(value2.lastIndexOf(\"\\r\"), value2.lastIndexOf(\"\\n\")) + 1)\n );\n }\n const sequence = \"#\".repeat(rank);\n const exit2 = state.enter(\"headingAtx\");\n const subexit = state.enter(\"phrasing\");\n tracker.move(sequence + \" \");\n let value = state.containerPhrasing(node, {\n before: \"# \",\n after: \"\\n\",\n ...tracker.current()\n });\n if (/^[\\t ]/.test(value)) {\n value = encodeCharacterReference(value.charCodeAt(0)) + value.slice(1);\n }\n value = value ? sequence + \" \" + value : sequence;\n if (state.options.closeAtx) {\n value += \" \" + sequence;\n }\n subexit();\n exit2();\n return value;\n}\nhtml.peek = htmlPeek;\nfunction html(node) {\n return node.value || \"\";\n}\nfunction htmlPeek() {\n return \"<\";\n}\nimage.peek = imagePeek;\nfunction image(node, _, state, info) {\n const quote = checkQuote(state);\n const suffix = quote === '\"' ? \"Quote\" : \"Apostrophe\";\n const exit2 = state.enter(\"image\");\n let subexit = state.enter(\"label\");\n const tracker = state.createTracker(info);\n let value = tracker.move(\"![\");\n value += tracker.move(\n state.safe(node.alt, { before: value, after: \"]\", ...tracker.current() })\n );\n value += tracker.move(\"](\");\n subexit();\n if (\n // If there’s no url but there is a title…\n !node.url && node.title || // If there are control characters or whitespace.\n /[\\0- \\u007F]/.test(node.url)\n ) {\n subexit = state.enter(\"destinationLiteral\");\n value += tracker.move(\"<\");\n value += tracker.move(\n state.safe(node.url, { before: value, after: \">\", ...tracker.current() })\n );\n value += tracker.move(\">\");\n } else {\n subexit = state.enter(\"destinationRaw\");\n value += tracker.move(\n state.safe(node.url, {\n before: value,\n after: node.title ? \" \" : \")\",\n ...tracker.current()\n })\n );\n }\n subexit();\n if (node.title) {\n subexit = state.enter(`title${suffix}`);\n value += tracker.move(\" \" + quote);\n value += tracker.move(\n state.safe(node.title, {\n before: value,\n after: quote,\n ...tracker.current()\n })\n );\n value += tracker.move(quote);\n subexit();\n }\n value += tracker.move(\")\");\n exit2();\n return value;\n}\nfunction imagePeek() {\n return \"!\";\n}\nimageReference.peek = imageReferencePeek;\nfunction imageReference(node, _, state, info) {\n const type = node.referenceType;\n const exit2 = state.enter(\"imageReference\");\n let subexit = state.enter(\"label\");\n const tracker = state.createTracker(info);\n let value = tracker.move(\"![\");\n const alt = state.safe(node.alt, {\n before: value,\n after: \"]\",\n ...tracker.current()\n });\n value += tracker.move(alt + \"][\");\n subexit();\n const stack = state.stack;\n state.stack = [];\n subexit = state.enter(\"reference\");\n const reference = state.safe(state.associationId(node), {\n before: value,\n after: \"]\",\n ...tracker.current()\n });\n subexit();\n state.stack = stack;\n exit2();\n if (type === \"full\" || !alt || alt !== reference) {\n value += tracker.move(reference + \"]\");\n } else if (type === \"shortcut\") {\n value = value.slice(0, -1);\n } else {\n value += tracker.move(\"]\");\n }\n return value;\n}\nfunction imageReferencePeek() {\n return \"!\";\n}\ninlineCode.peek = inlineCodePeek;\nfunction inlineCode(node, _, state) {\n let value = node.value || \"\";\n let sequence = \"`\";\n let index = -1;\n while (new RegExp(\"(^|[^`])\" + sequence + \"([^`]|$)\").test(value)) {\n sequence += \"`\";\n }\n if (/[^ \\r\\n]/.test(value) && (/^[ \\r\\n]/.test(value) && /[ \\r\\n]$/.test(value) || /^`|`$/.test(value))) {\n value = \" \" + value + \" \";\n }\n while (++index < state.unsafe.length) {\n const pattern = state.unsafe[index];\n const expression = state.compilePattern(pattern);\n let match;\n if (!pattern.atBreak) continue;\n while (match = expression.exec(value)) {\n let position = match.index;\n if (value.charCodeAt(position) === 10 && value.charCodeAt(position - 1) === 13) {\n position--;\n }\n value = value.slice(0, position) + \" \" + value.slice(match.index + 1);\n }\n }\n return sequence + value + sequence;\n}\nfunction inlineCodePeek() {\n return \"`\";\n}\nfunction formatLinkAsAutolink(node, state) {\n const raw = toString(node);\n return Boolean(\n !state.options.resourceLink && // If there’s a url…\n node.url && // And there’s a no title…\n !node.title && // And the content of `node` is a single text node…\n node.children && node.children.length === 1 && node.children[0].type === \"text\" && // And if the url is the same as the content…\n (raw === node.url || \"mailto:\" + raw === node.url) && // And that starts w/ a protocol…\n /^[a-z][a-z+.-]+:/i.test(node.url) && // And that doesn’t contain ASCII control codes (character escapes and\n // references don’t work), space, or angle brackets…\n !/[\\0- <>\\u007F]/.test(node.url)\n );\n}\nlink.peek = linkPeek;\nfunction link(node, _, state, info) {\n const quote = checkQuote(state);\n const suffix = quote === '\"' ? \"Quote\" : \"Apostrophe\";\n const tracker = state.createTracker(info);\n let exit2;\n let subexit;\n if (formatLinkAsAutolink(node, state)) {\n const stack = state.stack;\n state.stack = [];\n exit2 = state.enter(\"autolink\");\n let value2 = tracker.move(\"<\");\n value2 += tracker.move(\n state.containerPhrasing(node, {\n before: value2,\n after: \">\",\n ...tracker.current()\n })\n );\n value2 += tracker.move(\">\");\n exit2();\n state.stack = stack;\n return value2;\n }\n exit2 = state.enter(\"link\");\n subexit = state.enter(\"label\");\n let value = tracker.move(\"[\");\n value += tracker.move(\n state.containerPhrasing(node, {\n before: value,\n after: \"](\",\n ...tracker.current()\n })\n );\n value += tracker.move(\"](\");\n subexit();\n if (\n // If there’s no url but there is a title…\n !node.url && node.title || // If there are control characters or whitespace.\n /[\\0- \\u007F]/.test(node.url)\n ) {\n subexit = state.enter(\"destinationLiteral\");\n value += tracker.move(\"<\");\n value += tracker.move(\n state.safe(node.url, { before: value, after: \">\", ...tracker.current() })\n );\n value += tracker.move(\">\");\n } else {\n subexit = state.enter(\"destinationRaw\");\n value += tracker.move(\n state.safe(node.url, {\n before: value,\n after: node.title ? \" \" : \")\",\n ...tracker.current()\n })\n );\n }\n subexit();\n if (node.title) {\n subexit = state.enter(`title${suffix}`);\n value += tracker.move(\" \" + quote);\n value += tracker.move(\n state.safe(node.title, {\n before: value,\n after: quote,\n ...tracker.current()\n })\n );\n value += tracker.move(quote);\n subexit();\n }\n value += tracker.move(\")\");\n exit2();\n return value;\n}\nfunction linkPeek(node, _, state) {\n return formatLinkAsAutolink(node, state) ? \"<\" : \"[\";\n}\nlinkReference.peek = linkReferencePeek;\nfunction linkReference(node, _, state, info) {\n const type = node.referenceType;\n const exit2 = state.enter(\"linkReference\");\n let subexit = state.enter(\"label\");\n const tracker = state.createTracker(info);\n let value = tracker.move(\"[\");\n const text2 = state.containerPhrasing(node, {\n before: value,\n after: \"]\",\n ...tracker.current()\n });\n value += tracker.move(text2 + \"][\");\n subexit();\n const stack = state.stack;\n state.stack = [];\n subexit = state.enter(\"reference\");\n const reference = state.safe(state.associationId(node), {\n before: value,\n after: \"]\",\n ...tracker.current()\n });\n subexit();\n state.stack = stack;\n exit2();\n if (type === \"full\" || !text2 || text2 !== reference) {\n value += tracker.move(reference + \"]\");\n } else if (type === \"shortcut\") {\n value = value.slice(0, -1);\n } else {\n value += tracker.move(\"]\");\n }\n return value;\n}\nfunction linkReferencePeek() {\n return \"[\";\n}\nfunction checkBullet(state) {\n const marker = state.options.bullet || \"*\";\n if (marker !== \"*\" && marker !== \"+\" && marker !== \"-\") {\n throw new Error(\n \"Cannot serialize items with `\" + marker + \"` for `options.bullet`, expected `*`, `+`, or `-`\"\n );\n }\n return marker;\n}\nfunction checkBulletOther(state) {\n const bullet = checkBullet(state);\n const bulletOther = state.options.bulletOther;\n if (!bulletOther) {\n return bullet === \"*\" ? \"-\" : \"*\";\n }\n if (bulletOther !== \"*\" && bulletOther !== \"+\" && bulletOther !== \"-\") {\n throw new Error(\n \"Cannot serialize items with `\" + bulletOther + \"` for `options.bulletOther`, expected `*`, `+`, or `-`\"\n );\n }\n if (bulletOther === bullet) {\n throw new Error(\n \"Expected `bullet` (`\" + bullet + \"`) and `bulletOther` (`\" + bulletOther + \"`) to be different\"\n );\n }\n return bulletOther;\n}\nfunction checkBulletOrdered(state) {\n const marker = state.options.bulletOrdered || \".\";\n if (marker !== \".\" && marker !== \")\") {\n throw new Error(\n \"Cannot serialize items with `\" + marker + \"` for `options.bulletOrdered`, expected `.` or `)`\"\n );\n }\n return marker;\n}\nfunction checkRule(state) {\n const marker = state.options.rule || \"*\";\n if (marker !== \"*\" && marker !== \"-\" && marker !== \"_\") {\n throw new Error(\n \"Cannot serialize rules with `\" + marker + \"` for `options.rule`, expected `*`, `-`, or `_`\"\n );\n }\n return marker;\n}\nfunction list(node, parent, state, info) {\n const exit2 = state.enter(\"list\");\n const bulletCurrent = state.bulletCurrent;\n let bullet = node.ordered ? checkBulletOrdered(state) : checkBullet(state);\n const bulletOther = node.ordered ? bullet === \".\" ? \")\" : \".\" : checkBulletOther(state);\n let useDifferentMarker = parent && state.bulletLastUsed ? bullet === state.bulletLastUsed : false;\n if (!node.ordered) {\n const firstListItem = node.children ? node.children[0] : void 0;\n if (\n // Bullet could be used as a thematic break marker:\n (bullet === \"*\" || bullet === \"-\") && // Empty first list item:\n firstListItem && (!firstListItem.children || !firstListItem.children[0]) && // Directly in two other list items:\n state.stack[state.stack.length - 1] === \"list\" && state.stack[state.stack.length - 2] === \"listItem\" && state.stack[state.stack.length - 3] === \"list\" && state.stack[state.stack.length - 4] === \"listItem\" && // That are each the first child.\n state.indexStack[state.indexStack.length - 1] === 0 && state.indexStack[state.indexStack.length - 2] === 0 && state.indexStack[state.indexStack.length - 3] === 0\n ) {\n useDifferentMarker = true;\n }\n if (checkRule(state) === bullet && firstListItem) {\n let index = -1;\n while (++index < node.children.length) {\n const item = node.children[index];\n if (item && item.type === \"listItem\" && item.children && item.children[0] && item.children[0].type === \"thematicBreak\") {\n useDifferentMarker = true;\n break;\n }\n }\n }\n }\n if (useDifferentMarker) {\n bullet = bulletOther;\n }\n state.bulletCurrent = bullet;\n const value = state.containerFlow(node, info);\n state.bulletLastUsed = bullet;\n state.bulletCurrent = bulletCurrent;\n exit2();\n return value;\n}\nfunction checkListItemIndent(state) {\n const style = state.options.listItemIndent || \"one\";\n if (style !== \"tab\" && style !== \"one\" && style !== \"mixed\") {\n throw new Error(\n \"Cannot serialize items with `\" + style + \"` for `options.listItemIndent`, expected `tab`, `one`, or `mixed`\"\n );\n }\n return style;\n}\nfunction listItem(node, parent, state, info) {\n const listItemIndent = checkListItemIndent(state);\n let bullet = state.bulletCurrent || checkBullet(state);\n if (parent && parent.type === \"list\" && parent.ordered) {\n bullet = (typeof parent.start === \"number\" && parent.start > -1 ? parent.start : 1) + (state.options.incrementListMarker === false ? 0 : parent.children.indexOf(node)) + bullet;\n }\n let size = bullet.length + 1;\n if (listItemIndent === \"tab\" || listItemIndent === \"mixed\" && (parent && parent.type === \"list\" && parent.spread || node.spread)) {\n size = Math.ceil(size / 4) * 4;\n }\n const tracker = state.createTracker(info);\n tracker.move(bullet + \" \".repeat(size - bullet.length));\n tracker.shift(size);\n const exit2 = state.enter(\"listItem\");\n const value = state.indentLines(\n state.containerFlow(node, tracker.current()),\n map2\n );\n exit2();\n return value;\n function map2(line, index, blank) {\n if (index) {\n return (blank ? \"\" : \" \".repeat(size)) + line;\n }\n return (blank ? bullet : bullet + \" \".repeat(size - bullet.length)) + line;\n }\n}\nfunction paragraph(node, _, state, info) {\n const exit2 = state.enter(\"paragraph\");\n const subexit = state.enter(\"phrasing\");\n const value = state.containerPhrasing(node, info);\n subexit();\n exit2();\n return value;\n}\nconst phrasing = (\n /** @type {(node?: unknown) => node is Exclude} */\n convert([\n \"break\",\n \"delete\",\n \"emphasis\",\n // To do: next major: removed since footnotes were added to GFM.\n \"footnote\",\n \"footnoteReference\",\n \"image\",\n \"imageReference\",\n \"inlineCode\",\n // Enabled by `mdast-util-math`:\n \"inlineMath\",\n \"link\",\n \"linkReference\",\n // Enabled by `mdast-util-mdx`:\n \"mdxJsxTextElement\",\n // Enabled by `mdast-util-mdx`:\n \"mdxTextExpression\",\n \"strong\",\n \"text\",\n // Enabled by `mdast-util-directive`:\n \"textDirective\"\n ])\n);\nfunction root(node, _, state, info) {\n const hasPhrasing = node.children.some(function(d) {\n return phrasing(d);\n });\n const container = hasPhrasing ? state.containerPhrasing : state.containerFlow;\n return container.call(state, node, info);\n}\nfunction checkStrong(state) {\n const marker = state.options.strong || \"*\";\n if (marker !== \"*\" && marker !== \"_\") {\n throw new Error(\n \"Cannot serialize strong with `\" + marker + \"` for `options.strong`, expected `*`, or `_`\"\n );\n }\n return marker;\n}\nstrong.peek = strongPeek;\nfunction strong(node, _, state, info) {\n const marker = checkStrong(state);\n const exit2 = state.enter(\"strong\");\n const tracker = state.createTracker(info);\n const before = tracker.move(marker + marker);\n let between = tracker.move(\n state.containerPhrasing(node, {\n after: marker,\n before,\n ...tracker.current()\n })\n );\n const betweenHead = between.charCodeAt(0);\n const open = encodeInfo(\n info.before.charCodeAt(info.before.length - 1),\n betweenHead,\n marker\n );\n if (open.inside) {\n between = encodeCharacterReference(betweenHead) + between.slice(1);\n }\n const betweenTail = between.charCodeAt(between.length - 1);\n const close = encodeInfo(info.after.charCodeAt(0), betweenTail, marker);\n if (close.inside) {\n between = between.slice(0, -1) + encodeCharacterReference(betweenTail);\n }\n const after = tracker.move(marker + marker);\n exit2();\n state.attentionEncodeSurroundingInfo = {\n after: close.outside,\n before: open.outside\n };\n return before + between + after;\n}\nfunction strongPeek(_, _1, state) {\n return state.options.strong || \"*\";\n}\nfunction text$1(node, _, state, info) {\n return state.safe(node.value, info);\n}\nfunction checkRuleRepetition(state) {\n const repetition = state.options.ruleRepetition || 3;\n if (repetition < 3) {\n throw new Error(\n \"Cannot serialize rules with repetition `\" + repetition + \"` for `options.ruleRepetition`, expected `3` or more\"\n );\n }\n return repetition;\n}\nfunction thematicBreak(_, _1, state) {\n const value = (checkRule(state) + (state.options.ruleSpaces ? \" \" : \"\")).repeat(checkRuleRepetition(state));\n return state.options.ruleSpaces ? value.slice(0, -1) : value;\n}\nconst handle = {\n blockquote,\n break: hardBreak,\n code: code$1,\n definition,\n emphasis,\n hardBreak,\n heading,\n html,\n image,\n imageReference,\n inlineCode,\n link,\n linkReference,\n list,\n listItem,\n paragraph,\n root,\n strong,\n text: text$1,\n thematicBreak\n};\nfunction gfmTableFromMarkdown() {\n return {\n enter: {\n table: enterTable,\n tableData: enterCell,\n tableHeader: enterCell,\n tableRow: enterRow\n },\n exit: {\n codeText: exitCodeText,\n table: exitTable,\n tableData: exit,\n tableHeader: exit,\n tableRow: exit\n }\n };\n}\nfunction enterTable(token) {\n const align = token._align;\n this.enter(\n {\n type: \"table\",\n align: align.map(function(d) {\n return d === \"none\" ? null : d;\n }),\n children: []\n },\n token\n );\n this.data.inTable = true;\n}\nfunction exitTable(token) {\n this.exit(token);\n this.data.inTable = void 0;\n}\nfunction enterRow(token) {\n this.enter({ type: \"tableRow\", children: [] }, token);\n}\nfunction exit(token) {\n this.exit(token);\n}\nfunction enterCell(token) {\n this.enter({ type: \"tableCell\", children: [] }, token);\n}\nfunction exitCodeText(token) {\n let value = this.resume();\n if (this.data.inTable) {\n value = value.replace(/\\\\([\\\\|])/g, replace);\n }\n const node = this.stack[this.stack.length - 1];\n ok$1(node.type === \"inlineCode\");\n node.value = value;\n this.exit(token);\n}\nfunction replace($0, $1) {\n return $1 === \"|\" ? $1 : $0;\n}\nfunction gfmTableToMarkdown(options) {\n const settings = options || {};\n const padding = settings.tableCellPadding;\n const alignDelimiters = settings.tablePipeAlign;\n const stringLength = settings.stringLength;\n const around = padding ? \" \" : \"|\";\n return {\n unsafe: [\n { character: \"\\r\", inConstruct: \"tableCell\" },\n { character: \"\\n\", inConstruct: \"tableCell\" },\n // A pipe, when followed by a tab or space (padding), or a dash or colon\n // (unpadded delimiter row), could result in a table.\n { atBreak: true, character: \"|\", after: \"[\t :-]\" },\n // A pipe in a cell must be encoded.\n { character: \"|\", inConstruct: \"tableCell\" },\n // A colon must be followed by a dash, in which case it could start a\n // delimiter row.\n { atBreak: true, character: \":\", after: \"-\" },\n // A delimiter row can also start with a dash, when followed by more\n // dashes, a colon, or a pipe.\n // This is a stricter version than the built in check for lists, thematic\n // breaks, and setex heading underlines though:\n // \n { atBreak: true, character: \"-\", after: \"[:|-]\" }\n ],\n handlers: {\n inlineCode: inlineCodeWithTable,\n table: handleTable,\n tableCell: handleTableCell,\n tableRow: handleTableRow\n }\n };\n function handleTable(node, _, state, info) {\n return serializeData(handleTableAsData(node, state, info), node.align);\n }\n function handleTableRow(node, _, state, info) {\n const row = handleTableRowAsData(node, state, info);\n const value = serializeData([row]);\n return value.slice(0, value.indexOf(\"\\n\"));\n }\n function handleTableCell(node, _, state, info) {\n const exit2 = state.enter(\"tableCell\");\n const subexit = state.enter(\"phrasing\");\n const value = state.containerPhrasing(node, {\n ...info,\n before: around,\n after: around\n });\n subexit();\n exit2();\n return value;\n }\n function serializeData(matrix, align) {\n return markdownTable(matrix, {\n align,\n // @ts-expect-error: `markdown-table` types should support `null`.\n alignDelimiters,\n // @ts-expect-error: `markdown-table` types should support `null`.\n padding,\n // @ts-expect-error: `markdown-table` types should support `null`.\n stringLength\n });\n }\n function handleTableAsData(node, state, info) {\n const children = node.children;\n let index = -1;\n const result = [];\n const subexit = state.enter(\"table\");\n while (++index < children.length) {\n result[index] = handleTableRowAsData(children[index], state, info);\n }\n subexit();\n return result;\n }\n function handleTableRowAsData(node, state, info) {\n const children = node.children;\n let index = -1;\n const result = [];\n const subexit = state.enter(\"tableRow\");\n while (++index < children.length) {\n result[index] = handleTableCell(children[index], node, state, info);\n }\n subexit();\n return result;\n }\n function inlineCodeWithTable(node, parent, state) {\n let value = handle.inlineCode(node, parent, state);\n if (state.stack.includes(\"tableCell\")) {\n value = value.replace(/\\|/g, \"\\\\$&\");\n }\n return value;\n }\n}\nfunction gfmTaskListItemFromMarkdown() {\n return {\n exit: {\n taskListCheckValueChecked: exitCheck,\n taskListCheckValueUnchecked: exitCheck,\n paragraph: exitParagraphWithTaskListItem\n }\n };\n}\nfunction gfmTaskListItemToMarkdown() {\n return {\n unsafe: [{ atBreak: true, character: \"-\", after: \"[:|-]\" }],\n handlers: { listItem: listItemWithTaskListItem }\n };\n}\nfunction exitCheck(token) {\n const node = this.stack[this.stack.length - 2];\n ok$1(node.type === \"listItem\");\n node.checked = token.type === \"taskListCheckValueChecked\";\n}\nfunction exitParagraphWithTaskListItem(token) {\n const parent = this.stack[this.stack.length - 2];\n if (parent && parent.type === \"listItem\" && typeof parent.checked === \"boolean\") {\n const node = this.stack[this.stack.length - 1];\n ok$1(node.type === \"paragraph\");\n const head = node.children[0];\n if (head && head.type === \"text\") {\n const siblings = parent.children;\n let index = -1;\n let firstParaghraph;\n while (++index < siblings.length) {\n const sibling = siblings[index];\n if (sibling.type === \"paragraph\") {\n firstParaghraph = sibling;\n break;\n }\n }\n if (firstParaghraph === node) {\n head.value = head.value.slice(1);\n if (head.value.length === 0) {\n node.children.shift();\n } else if (node.position && head.position && typeof head.position.start.offset === \"number\") {\n head.position.start.column++;\n head.position.start.offset++;\n node.position.start = Object.assign({}, head.position.start);\n }\n }\n }\n }\n this.exit(token);\n}\nfunction listItemWithTaskListItem(node, parent, state, info) {\n const head = node.children[0];\n const checkable = typeof node.checked === \"boolean\" && head && head.type === \"paragraph\";\n const checkbox = \"[\" + (node.checked ? \"x\" : \" \") + \"] \";\n const tracker = state.createTracker(info);\n if (checkable) {\n tracker.move(checkbox);\n }\n let value = handle.listItem(node, parent, state, {\n ...info,\n ...tracker.current()\n });\n if (checkable) {\n value = value.replace(/^(?:[*+-]|\\d+\\.)([\\r\\n]| {1,3})/, check);\n }\n return value;\n function check($0) {\n return $0 + checkbox;\n }\n}\nfunction gfmFromMarkdown() {\n return [\n gfmAutolinkLiteralFromMarkdown(),\n gfmFootnoteFromMarkdown(),\n gfmStrikethroughFromMarkdown(),\n gfmTableFromMarkdown(),\n gfmTaskListItemFromMarkdown()\n ];\n}\nfunction gfmToMarkdown(options) {\n return {\n extensions: [\n gfmAutolinkLiteralToMarkdown(),\n gfmFootnoteToMarkdown(),\n gfmStrikethroughToMarkdown(),\n gfmTableToMarkdown(options),\n gfmTaskListItemToMarkdown()\n ]\n };\n}\nfunction splice(list2, start, remove, items) {\n const end = list2.length;\n let chunkStart = 0;\n let parameters;\n if (start < 0) {\n start = -start > end ? 0 : end + start;\n } else {\n start = start > end ? end : start;\n }\n remove = remove > 0 ? remove : 0;\n if (items.length < 1e4) {\n parameters = Array.from(items);\n parameters.unshift(start, remove);\n list2.splice(...parameters);\n } else {\n if (remove) list2.splice(start, remove);\n while (chunkStart < items.length) {\n parameters = items.slice(chunkStart, chunkStart + 1e4);\n parameters.unshift(start, 0);\n list2.splice(...parameters);\n chunkStart += 1e4;\n start += 1e4;\n }\n }\n}\nconst hasOwnProperty = {}.hasOwnProperty;\nfunction combineExtensions(extensions) {\n const all = {};\n let index = -1;\n while (++index < extensions.length) {\n syntaxExtension(all, extensions[index]);\n }\n return all;\n}\nfunction syntaxExtension(all, extension) {\n let hook;\n for (hook in extension) {\n const maybe = hasOwnProperty.call(all, hook) ? all[hook] : void 0;\n const left = maybe || (all[hook] = {});\n const right = extension[hook];\n let code2;\n if (right) {\n for (code2 in right) {\n if (!hasOwnProperty.call(left, code2)) left[code2] = [];\n const value = right[code2];\n constructs(\n // @ts-expect-error Looks like a list.\n left[code2],\n Array.isArray(value) ? value : value ? [value] : []\n );\n }\n }\n }\n}\nfunction constructs(existing, list2) {\n let index = -1;\n const before = [];\n while (++index < list2.length) {\n (list2[index].add === \"after\" ? existing : before).push(list2[index]);\n }\n splice(existing, 0, 0, before);\n}\nconst wwwPrefix = {\n tokenize: tokenizeWwwPrefix,\n partial: true\n};\nconst domain = {\n tokenize: tokenizeDomain,\n partial: true\n};\nconst path = {\n tokenize: tokenizePath,\n partial: true\n};\nconst trail = {\n tokenize: tokenizeTrail,\n partial: true\n};\nconst emailDomainDotTrail = {\n tokenize: tokenizeEmailDomainDotTrail,\n partial: true\n};\nconst wwwAutolink = {\n tokenize: tokenizeWwwAutolink,\n previous: previousWww\n};\nconst protocolAutolink = {\n tokenize: tokenizeProtocolAutolink,\n previous: previousProtocol\n};\nconst emailAutolink = {\n tokenize: tokenizeEmailAutolink,\n previous: previousEmail\n};\nconst text = {};\nfunction gfmAutolinkLiteral() {\n return {\n text\n };\n}\nlet code = 48;\nwhile (code < 123) {\n text[code] = emailAutolink;\n code++;\n if (code === 58) code = 65;\n else if (code === 91) code = 97;\n}\ntext[43] = emailAutolink;\ntext[45] = emailAutolink;\ntext[46] = emailAutolink;\ntext[95] = emailAutolink;\ntext[72] = [emailAutolink, protocolAutolink];\ntext[104] = [emailAutolink, protocolAutolink];\ntext[87] = [emailAutolink, wwwAutolink];\ntext[119] = [emailAutolink, wwwAutolink];\nfunction tokenizeEmailAutolink(effects, ok2, nok) {\n const self = this;\n let dot;\n let data;\n return start;\n function start(code2) {\n if (!gfmAtext(code2) || !previousEmail.call(self, self.previous) || previousUnbalanced(self.events)) {\n return nok(code2);\n }\n effects.enter(\"literalAutolink\");\n effects.enter(\"literalAutolinkEmail\");\n return atext(code2);\n }\n function atext(code2) {\n if (gfmAtext(code2)) {\n effects.consume(code2);\n return atext;\n }\n if (code2 === 64) {\n effects.consume(code2);\n return emailDomain;\n }\n return nok(code2);\n }\n function emailDomain(code2) {\n if (code2 === 46) {\n return effects.check(\n emailDomainDotTrail,\n emailDomainAfter,\n emailDomainDot\n )(code2);\n }\n if (code2 === 45 || code2 === 95 || asciiAlphanumeric(code2)) {\n data = true;\n effects.consume(code2);\n return emailDomain;\n }\n return emailDomainAfter(code2);\n }\n function emailDomainDot(code2) {\n effects.consume(code2);\n dot = true;\n return emailDomain;\n }\n function emailDomainAfter(code2) {\n if (data && dot && asciiAlpha(self.previous)) {\n effects.exit(\"literalAutolinkEmail\");\n effects.exit(\"literalAutolink\");\n return ok2(code2);\n }\n return nok(code2);\n }\n}\nfunction tokenizeWwwAutolink(effects, ok2, nok) {\n const self = this;\n return wwwStart;\n function wwwStart(code2) {\n if (code2 !== 87 && code2 !== 119 || !previousWww.call(self, self.previous) || previousUnbalanced(self.events)) {\n return nok(code2);\n }\n effects.enter(\"literalAutolink\");\n effects.enter(\"literalAutolinkWww\");\n return effects.check(\n wwwPrefix,\n effects.attempt(domain, effects.attempt(path, wwwAfter), nok),\n nok\n )(code2);\n }\n function wwwAfter(code2) {\n effects.exit(\"literalAutolinkWww\");\n effects.exit(\"literalAutolink\");\n return ok2(code2);\n }\n}\nfunction tokenizeProtocolAutolink(effects, ok2, nok) {\n const self = this;\n let buffer = \"\";\n let seen = false;\n return protocolStart;\n function protocolStart(code2) {\n if ((code2 === 72 || code2 === 104) && previousProtocol.call(self, self.previous) && !previousUnbalanced(self.events)) {\n effects.enter(\"literalAutolink\");\n effects.enter(\"literalAutolinkHttp\");\n buffer += String.fromCodePoint(code2);\n effects.consume(code2);\n return protocolPrefixInside;\n }\n return nok(code2);\n }\n function protocolPrefixInside(code2) {\n if (asciiAlpha(code2) && buffer.length < 5) {\n buffer += String.fromCodePoint(code2);\n effects.consume(code2);\n return protocolPrefixInside;\n }\n if (code2 === 58) {\n const protocol = buffer.toLowerCase();\n if (protocol === \"http\" || protocol === \"https\") {\n effects.consume(code2);\n return protocolSlashesInside;\n }\n }\n return nok(code2);\n }\n function protocolSlashesInside(code2) {\n if (code2 === 47) {\n effects.consume(code2);\n if (seen) {\n return afterProtocol;\n }\n seen = true;\n return protocolSlashesInside;\n }\n return nok(code2);\n }\n function afterProtocol(code2) {\n return code2 === null || asciiControl(code2) || markdownLineEndingOrSpace(code2) || unicodeWhitespace(code2) || unicodePunctuation(code2) ? nok(code2) : effects.attempt(domain, effects.attempt(path, protocolAfter), nok)(code2);\n }\n function protocolAfter(code2) {\n effects.exit(\"literalAutolinkHttp\");\n effects.exit(\"literalAutolink\");\n return ok2(code2);\n }\n}\nfunction tokenizeWwwPrefix(effects, ok2, nok) {\n let size = 0;\n return wwwPrefixInside;\n function wwwPrefixInside(code2) {\n if ((code2 === 87 || code2 === 119) && size < 3) {\n size++;\n effects.consume(code2);\n return wwwPrefixInside;\n }\n if (code2 === 46 && size === 3) {\n effects.consume(code2);\n return wwwPrefixAfter;\n }\n return nok(code2);\n }\n function wwwPrefixAfter(code2) {\n return code2 === null ? nok(code2) : ok2(code2);\n }\n}\nfunction tokenizeDomain(effects, ok2, nok) {\n let underscoreInLastSegment;\n let underscoreInLastLastSegment;\n let seen;\n return domainInside;\n function domainInside(code2) {\n if (code2 === 46 || code2 === 95) {\n return effects.check(trail, domainAfter, domainAtPunctuation)(code2);\n }\n if (code2 === null || markdownLineEndingOrSpace(code2) || unicodeWhitespace(code2) || code2 !== 45 && unicodePunctuation(code2)) {\n return domainAfter(code2);\n }\n seen = true;\n effects.consume(code2);\n return domainInside;\n }\n function domainAtPunctuation(code2) {\n if (code2 === 95) {\n underscoreInLastSegment = true;\n } else {\n underscoreInLastLastSegment = underscoreInLastSegment;\n underscoreInLastSegment = void 0;\n }\n effects.consume(code2);\n return domainInside;\n }\n function domainAfter(code2) {\n if (underscoreInLastLastSegment || underscoreInLastSegment || !seen) {\n return nok(code2);\n }\n return ok2(code2);\n }\n}\nfunction tokenizePath(effects, ok2) {\n let sizeOpen = 0;\n let sizeClose = 0;\n return pathInside;\n function pathInside(code2) {\n if (code2 === 40) {\n sizeOpen++;\n effects.consume(code2);\n return pathInside;\n }\n if (code2 === 41 && sizeClose < sizeOpen) {\n return pathAtPunctuation(code2);\n }\n if (code2 === 33 || code2 === 34 || code2 === 38 || code2 === 39 || code2 === 41 || code2 === 42 || code2 === 44 || code2 === 46 || code2 === 58 || code2 === 59 || code2 === 60 || code2 === 63 || code2 === 93 || code2 === 95 || code2 === 126) {\n return effects.check(trail, ok2, pathAtPunctuation)(code2);\n }\n if (code2 === null || markdownLineEndingOrSpace(code2) || unicodeWhitespace(code2)) {\n return ok2(code2);\n }\n effects.consume(code2);\n return pathInside;\n }\n function pathAtPunctuation(code2) {\n if (code2 === 41) {\n sizeClose++;\n }\n effects.consume(code2);\n return pathInside;\n }\n}\nfunction tokenizeTrail(effects, ok2, nok) {\n return trail2;\n function trail2(code2) {\n if (code2 === 33 || code2 === 34 || code2 === 39 || code2 === 41 || code2 === 42 || code2 === 44 || code2 === 46 || code2 === 58 || code2 === 59 || code2 === 63 || code2 === 95 || code2 === 126) {\n effects.consume(code2);\n return trail2;\n }\n if (code2 === 38) {\n effects.consume(code2);\n return trailCharRefStart;\n }\n if (code2 === 93) {\n effects.consume(code2);\n return trailBracketAfter;\n }\n if (\n // `<` is an end.\n code2 === 60 || // So is whitespace.\n code2 === null || markdownLineEndingOrSpace(code2) || unicodeWhitespace(code2)\n ) {\n return ok2(code2);\n }\n return nok(code2);\n }\n function trailBracketAfter(code2) {\n if (code2 === null || code2 === 40 || code2 === 91 || markdownLineEndingOrSpace(code2) || unicodeWhitespace(code2)) {\n return ok2(code2);\n }\n return trail2(code2);\n }\n function trailCharRefStart(code2) {\n return asciiAlpha(code2) ? trailCharRefInside(code2) : nok(code2);\n }\n function trailCharRefInside(code2) {\n if (code2 === 59) {\n effects.consume(code2);\n return trail2;\n }\n if (asciiAlpha(code2)) {\n effects.consume(code2);\n return trailCharRefInside;\n }\n return nok(code2);\n }\n}\nfunction tokenizeEmailDomainDotTrail(effects, ok2, nok) {\n return start;\n function start(code2) {\n effects.consume(code2);\n return after;\n }\n function after(code2) {\n return asciiAlphanumeric(code2) ? nok(code2) : ok2(code2);\n }\n}\nfunction previousWww(code2) {\n return code2 === null || code2 === 40 || code2 === 42 || code2 === 95 || code2 === 91 || code2 === 93 || code2 === 126 || markdownLineEndingOrSpace(code2);\n}\nfunction previousProtocol(code2) {\n return !asciiAlpha(code2);\n}\nfunction previousEmail(code2) {\n return !(code2 === 47 || gfmAtext(code2));\n}\nfunction gfmAtext(code2) {\n return code2 === 43 || code2 === 45 || code2 === 46 || code2 === 95 || asciiAlphanumeric(code2);\n}\nfunction previousUnbalanced(events) {\n let index = events.length;\n let result = false;\n while (index--) {\n const token = events[index][1];\n if ((token.type === \"labelLink\" || token.type === \"labelImage\") && !token._balanced) {\n result = true;\n break;\n }\n if (token._gfmAutolinkLiteralWalkedInto) {\n result = false;\n break;\n }\n }\n if (events.length > 0 && !result) {\n events[events.length - 1][1]._gfmAutolinkLiteralWalkedInto = true;\n }\n return result;\n}\nfunction resolveAll(constructs2, events, context) {\n const called = [];\n let index = -1;\n while (++index < constructs2.length) {\n const resolve = constructs2[index].resolveAll;\n if (resolve && !called.includes(resolve)) {\n events = resolve(events, context);\n called.push(resolve);\n }\n }\n return events;\n}\nfunction factorySpace(effects, ok2, type, max) {\n const limit = max ? max - 1 : Number.POSITIVE_INFINITY;\n let size = 0;\n return start;\n function start(code2) {\n if (markdownSpace(code2)) {\n effects.enter(type);\n return prefix(code2);\n }\n return ok2(code2);\n }\n function prefix(code2) {\n if (markdownSpace(code2) && size++ < limit) {\n effects.consume(code2);\n return prefix;\n }\n effects.exit(type);\n return ok2(code2);\n }\n}\nconst blankLine = {\n tokenize: tokenizeBlankLine,\n partial: true\n};\nfunction tokenizeBlankLine(effects, ok2, nok) {\n return start;\n function start(code2) {\n return markdownSpace(code2) ? factorySpace(effects, after, \"linePrefix\")(code2) : after(code2);\n }\n function after(code2) {\n return code2 === null || markdownLineEnding(code2) ? ok2(code2) : nok(code2);\n }\n}\nconst indent = {\n tokenize: tokenizeIndent,\n partial: true\n};\nfunction gfmFootnote() {\n return {\n document: {\n [91]: {\n tokenize: tokenizeDefinitionStart,\n continuation: {\n tokenize: tokenizeDefinitionContinuation\n },\n exit: gfmFootnoteDefinitionEnd\n }\n },\n text: {\n [91]: {\n tokenize: tokenizeGfmFootnoteCall\n },\n [93]: {\n add: \"after\",\n tokenize: tokenizePotentialGfmFootnoteCall,\n resolveTo: resolveToPotentialGfmFootnoteCall\n }\n }\n };\n}\nfunction tokenizePotentialGfmFootnoteCall(effects, ok2, nok) {\n const self = this;\n let index = self.events.length;\n const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = []);\n let labelStart;\n while (index--) {\n const token = self.events[index][1];\n if (token.type === \"labelImage\") {\n labelStart = token;\n break;\n }\n if (token.type === \"gfmFootnoteCall\" || token.type === \"labelLink\" || token.type === \"label\" || token.type === \"image\" || token.type === \"link\") {\n break;\n }\n }\n return start;\n function start(code2) {\n if (!labelStart || !labelStart._balanced) {\n return nok(code2);\n }\n const id = normalizeIdentifier(\n self.sliceSerialize({\n start: labelStart.end,\n end: self.now()\n })\n );\n if (id.codePointAt(0) !== 94 || !defined.includes(id.slice(1))) {\n return nok(code2);\n }\n effects.enter(\"gfmFootnoteCallLabelMarker\");\n effects.consume(code2);\n effects.exit(\"gfmFootnoteCallLabelMarker\");\n return ok2(code2);\n }\n}\nfunction resolveToPotentialGfmFootnoteCall(events, context) {\n let index = events.length;\n while (index--) {\n if (events[index][1].type === \"labelImage\" && events[index][0] === \"enter\") {\n events[index][1];\n break;\n }\n }\n events[index + 1][1].type = \"data\";\n events[index + 3][1].type = \"gfmFootnoteCallLabelMarker\";\n const call = {\n type: \"gfmFootnoteCall\",\n start: Object.assign({}, events[index + 3][1].start),\n end: Object.assign({}, events[events.length - 1][1].end)\n };\n const marker = {\n type: \"gfmFootnoteCallMarker\",\n start: Object.assign({}, events[index + 3][1].end),\n end: Object.assign({}, events[index + 3][1].end)\n };\n marker.end.column++;\n marker.end.offset++;\n marker.end._bufferIndex++;\n const string = {\n type: \"gfmFootnoteCallString\",\n start: Object.assign({}, marker.end),\n end: Object.assign({}, events[events.length - 1][1].start)\n };\n const chunk = {\n type: \"chunkString\",\n contentType: \"string\",\n start: Object.assign({}, string.start),\n end: Object.assign({}, string.end)\n };\n const replacement = [\n // Take the `labelImageMarker` (now `data`, the `!`)\n events[index + 1],\n events[index + 2],\n [\"enter\", call, context],\n // The `[`\n events[index + 3],\n events[index + 4],\n // The `^`.\n [\"enter\", marker, context],\n [\"exit\", marker, context],\n // Everything in between.\n [\"enter\", string, context],\n [\"enter\", chunk, context],\n [\"exit\", chunk, context],\n [\"exit\", string, context],\n // The ending (`]`, properly parsed and labelled).\n events[events.length - 2],\n events[events.length - 1],\n [\"exit\", call, context]\n ];\n events.splice(index, events.length - index + 1, ...replacement);\n return events;\n}\nfunction tokenizeGfmFootnoteCall(effects, ok2, nok) {\n const self = this;\n const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = []);\n let size = 0;\n let data;\n return start;\n function start(code2) {\n effects.enter(\"gfmFootnoteCall\");\n effects.enter(\"gfmFootnoteCallLabelMarker\");\n effects.consume(code2);\n effects.exit(\"gfmFootnoteCallLabelMarker\");\n return callStart;\n }\n function callStart(code2) {\n if (code2 !== 94) return nok(code2);\n effects.enter(\"gfmFootnoteCallMarker\");\n effects.consume(code2);\n effects.exit(\"gfmFootnoteCallMarker\");\n effects.enter(\"gfmFootnoteCallString\");\n effects.enter(\"chunkString\").contentType = \"string\";\n return callData;\n }\n function callData(code2) {\n if (\n // Too long.\n size > 999 || // Closing brace with nothing.\n code2 === 93 && !data || // Space or tab is not supported by GFM for some reason.\n // `\\n` and `[` not being supported makes sense.\n code2 === null || code2 === 91 || markdownLineEndingOrSpace(code2)\n ) {\n return nok(code2);\n }\n if (code2 === 93) {\n effects.exit(\"chunkString\");\n const token = effects.exit(\"gfmFootnoteCallString\");\n if (!defined.includes(normalizeIdentifier(self.sliceSerialize(token)))) {\n return nok(code2);\n }\n effects.enter(\"gfmFootnoteCallLabelMarker\");\n effects.consume(code2);\n effects.exit(\"gfmFootnoteCallLabelMarker\");\n effects.exit(\"gfmFootnoteCall\");\n return ok2;\n }\n if (!markdownLineEndingOrSpace(code2)) {\n data = true;\n }\n size++;\n effects.consume(code2);\n return code2 === 92 ? callEscape : callData;\n }\n function callEscape(code2) {\n if (code2 === 91 || code2 === 92 || code2 === 93) {\n effects.consume(code2);\n size++;\n return callData;\n }\n return callData(code2);\n }\n}\nfunction tokenizeDefinitionStart(effects, ok2, nok) {\n const self = this;\n const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = []);\n let identifier;\n let size = 0;\n let data;\n return start;\n function start(code2) {\n effects.enter(\"gfmFootnoteDefinition\")._container = true;\n effects.enter(\"gfmFootnoteDefinitionLabel\");\n effects.enter(\"gfmFootnoteDefinitionLabelMarker\");\n effects.consume(code2);\n effects.exit(\"gfmFootnoteDefinitionLabelMarker\");\n return labelAtMarker;\n }\n function labelAtMarker(code2) {\n if (code2 === 94) {\n effects.enter(\"gfmFootnoteDefinitionMarker\");\n effects.consume(code2);\n effects.exit(\"gfmFootnoteDefinitionMarker\");\n effects.enter(\"gfmFootnoteDefinitionLabelString\");\n effects.enter(\"chunkString\").contentType = \"string\";\n return labelInside;\n }\n return nok(code2);\n }\n function labelInside(code2) {\n if (\n // Too long.\n size > 999 || // Closing brace with nothing.\n code2 === 93 && !data || // Space or tab is not supported by GFM for some reason.\n // `\\n` and `[` not being supported makes sense.\n code2 === null || code2 === 91 || markdownLineEndingOrSpace(code2)\n ) {\n return nok(code2);\n }\n if (code2 === 93) {\n effects.exit(\"chunkString\");\n const token = effects.exit(\"gfmFootnoteDefinitionLabelString\");\n identifier = normalizeIdentifier(self.sliceSerialize(token));\n effects.enter(\"gfmFootnoteDefinitionLabelMarker\");\n effects.consume(code2);\n effects.exit(\"gfmFootnoteDefinitionLabelMarker\");\n effects.exit(\"gfmFootnoteDefinitionLabel\");\n return labelAfter;\n }\n if (!markdownLineEndingOrSpace(code2)) {\n data = true;\n }\n size++;\n effects.consume(code2);\n return code2 === 92 ? labelEscape : labelInside;\n }\n function labelEscape(code2) {\n if (code2 === 91 || code2 === 92 || code2 === 93) {\n effects.consume(code2);\n size++;\n return labelInside;\n }\n return labelInside(code2);\n }\n function labelAfter(code2) {\n if (code2 === 58) {\n effects.enter(\"definitionMarker\");\n effects.consume(code2);\n effects.exit(\"definitionMarker\");\n if (!defined.includes(identifier)) {\n defined.push(identifier);\n }\n return factorySpace(\n effects,\n whitespaceAfter,\n \"gfmFootnoteDefinitionWhitespace\"\n );\n }\n return nok(code2);\n }\n function whitespaceAfter(code2) {\n return ok2(code2);\n }\n}\nfunction tokenizeDefinitionContinuation(effects, ok2, nok) {\n return effects.check(blankLine, ok2, effects.attempt(indent, ok2, nok));\n}\nfunction gfmFootnoteDefinitionEnd(effects) {\n effects.exit(\"gfmFootnoteDefinition\");\n}\nfunction tokenizeIndent(effects, ok2, nok) {\n const self = this;\n return factorySpace(\n effects,\n afterPrefix,\n \"gfmFootnoteDefinitionIndent\",\n 4 + 1\n );\n function afterPrefix(code2) {\n const tail = self.events[self.events.length - 1];\n return tail && tail[1].type === \"gfmFootnoteDefinitionIndent\" && tail[2].sliceSerialize(tail[1], true).length === 4 ? ok2(code2) : nok(code2);\n }\n}\nfunction gfmStrikethrough(options) {\n const options_ = options || {};\n let single = options_.singleTilde;\n const tokenizer = {\n tokenize: tokenizeStrikethrough,\n resolveAll: resolveAllStrikethrough\n };\n if (single === null || single === void 0) {\n single = true;\n }\n return {\n text: {\n [126]: tokenizer\n },\n insideSpan: {\n null: [tokenizer]\n },\n attentionMarkers: {\n null: [126]\n }\n };\n function resolveAllStrikethrough(events, context) {\n let index = -1;\n while (++index < events.length) {\n if (events[index][0] === \"enter\" && events[index][1].type === \"strikethroughSequenceTemporary\" && events[index][1]._close) {\n let open = index;\n while (open--) {\n if (events[open][0] === \"exit\" && events[open][1].type === \"strikethroughSequenceTemporary\" && events[open][1]._open && // If the sizes are the same:\n events[index][1].end.offset - events[index][1].start.offset === events[open][1].end.offset - events[open][1].start.offset) {\n events[index][1].type = \"strikethroughSequence\";\n events[open][1].type = \"strikethroughSequence\";\n const strikethrough = {\n type: \"strikethrough\",\n start: Object.assign({}, events[open][1].start),\n end: Object.assign({}, events[index][1].end)\n };\n const text2 = {\n type: \"strikethroughText\",\n start: Object.assign({}, events[open][1].end),\n end: Object.assign({}, events[index][1].start)\n };\n const nextEvents = [\n [\"enter\", strikethrough, context],\n [\"enter\", events[open][1], context],\n [\"exit\", events[open][1], context],\n [\"enter\", text2, context]\n ];\n const insideSpan = context.parser.constructs.insideSpan.null;\n if (insideSpan) {\n splice(\n nextEvents,\n nextEvents.length,\n 0,\n resolveAll(insideSpan, events.slice(open + 1, index), context)\n );\n }\n splice(nextEvents, nextEvents.length, 0, [\n [\"exit\", text2, context],\n [\"enter\", events[index][1], context],\n [\"exit\", events[index][1], context],\n [\"exit\", strikethrough, context]\n ]);\n splice(events, open - 1, index - open + 3, nextEvents);\n index = open + nextEvents.length - 2;\n break;\n }\n }\n }\n }\n index = -1;\n while (++index < events.length) {\n if (events[index][1].type === \"strikethroughSequenceTemporary\") {\n events[index][1].type = \"data\";\n }\n }\n return events;\n }\n function tokenizeStrikethrough(effects, ok2, nok) {\n const previous2 = this.previous;\n const events = this.events;\n let size = 0;\n return start;\n function start(code2) {\n if (previous2 === 126 && events[events.length - 1][1].type !== \"characterEscape\") {\n return nok(code2);\n }\n effects.enter(\"strikethroughSequenceTemporary\");\n return more(code2);\n }\n function more(code2) {\n const before = classifyCharacter(previous2);\n if (code2 === 126) {\n if (size > 1) return nok(code2);\n effects.consume(code2);\n size++;\n return more;\n }\n if (size < 2 && !single) return nok(code2);\n const token = effects.exit(\"strikethroughSequenceTemporary\");\n const after = classifyCharacter(code2);\n token._open = !after || after === 2 && Boolean(before);\n token._close = !before || before === 2 && Boolean(after);\n return ok2(code2);\n }\n }\n}\nclass EditMap {\n /**\n * Create a new edit map.\n */\n constructor() {\n this.map = [];\n }\n /**\n * Create an edit: a remove and/or add at a certain place.\n *\n * @param {number} index\n * @param {number} remove\n * @param {Array} add\n * @returns {undefined}\n */\n add(index, remove, add) {\n addImpl(this, index, remove, add);\n }\n // To do: add this when moving to `micromark`.\n // /**\n // * Create an edit: but insert `add` before existing additions.\n // *\n // * @param {number} index\n // * @param {number} remove\n // * @param {Array} add\n // * @returns {undefined}\n // */\n // addBefore(index, remove, add) {\n // addImpl(this, index, remove, add, true)\n // }\n /**\n * Done, change the events.\n *\n * @param {Array} events\n * @returns {undefined}\n */\n consume(events) {\n this.map.sort(function(a, b) {\n return a[0] - b[0];\n });\n if (this.map.length === 0) {\n return;\n }\n let index = this.map.length;\n const vecs = [];\n while (index > 0) {\n index -= 1;\n vecs.push(\n events.slice(this.map[index][0] + this.map[index][1]),\n this.map[index][2]\n );\n events.length = this.map[index][0];\n }\n vecs.push([...events]);\n events.length = 0;\n let slice = vecs.pop();\n while (slice) {\n events.push(...slice);\n slice = vecs.pop();\n }\n this.map.length = 0;\n }\n}\nfunction addImpl(editMap, at, remove, add) {\n let index = 0;\n if (remove === 0 && add.length === 0) {\n return;\n }\n while (index < editMap.map.length) {\n if (editMap.map[index][0] === at) {\n editMap.map[index][1] += remove;\n editMap.map[index][2].push(...add);\n return;\n }\n index += 1;\n }\n editMap.map.push([at, remove, add]);\n}\nfunction gfmTableAlign(events, index) {\n let inDelimiterRow = false;\n const align = [];\n while (index < events.length) {\n const event = events[index];\n if (inDelimiterRow) {\n if (event[0] === \"enter\") {\n if (event[1].type === \"tableContent\") {\n align.push(\n events[index + 1][1].type === \"tableDelimiterMarker\" ? \"left\" : \"none\"\n );\n }\n } else if (event[1].type === \"tableContent\") {\n if (events[index - 1][1].type === \"tableDelimiterMarker\") {\n const alignIndex = align.length - 1;\n align[alignIndex] = align[alignIndex] === \"left\" ? \"center\" : \"right\";\n }\n } else if (event[1].type === \"tableDelimiterRow\") {\n break;\n }\n } else if (event[0] === \"enter\" && event[1].type === \"tableDelimiterRow\") {\n inDelimiterRow = true;\n }\n index += 1;\n }\n return align;\n}\nfunction gfmTable() {\n return {\n flow: {\n null: {\n tokenize: tokenizeTable,\n resolveAll: resolveTable\n }\n }\n };\n}\nfunction tokenizeTable(effects, ok2, nok) {\n const self = this;\n let size = 0;\n let sizeB = 0;\n let seen;\n return start;\n function start(code2) {\n let index = self.events.length - 1;\n while (index > -1) {\n const type = self.events[index][1].type;\n if (type === \"lineEnding\" || // Note: markdown-rs uses `whitespace` instead of `linePrefix`\n type === \"linePrefix\")\n index--;\n else break;\n }\n const tail = index > -1 ? self.events[index][1].type : null;\n const next = tail === \"tableHead\" || tail === \"tableRow\" ? bodyRowStart : headRowBefore;\n if (next === bodyRowStart && self.parser.lazy[self.now().line]) {\n return nok(code2);\n }\n return next(code2);\n }\n function headRowBefore(code2) {\n effects.enter(\"tableHead\");\n effects.enter(\"tableRow\");\n return headRowStart(code2);\n }\n function headRowStart(code2) {\n if (code2 === 124) {\n return headRowBreak(code2);\n }\n seen = true;\n sizeB += 1;\n return headRowBreak(code2);\n }\n function headRowBreak(code2) {\n if (code2 === null) {\n return nok(code2);\n }\n if (markdownLineEnding(code2)) {\n if (sizeB > 1) {\n sizeB = 0;\n self.interrupt = true;\n effects.exit(\"tableRow\");\n effects.enter(\"lineEnding\");\n effects.consume(code2);\n effects.exit(\"lineEnding\");\n return headDelimiterStart;\n }\n return nok(code2);\n }\n if (markdownSpace(code2)) {\n return factorySpace(effects, headRowBreak, \"whitespace\")(code2);\n }\n sizeB += 1;\n if (seen) {\n seen = false;\n size += 1;\n }\n if (code2 === 124) {\n effects.enter(\"tableCellDivider\");\n effects.consume(code2);\n effects.exit(\"tableCellDivider\");\n seen = true;\n return headRowBreak;\n }\n effects.enter(\"data\");\n return headRowData(code2);\n }\n function headRowData(code2) {\n if (code2 === null || code2 === 124 || markdownLineEndingOrSpace(code2)) {\n effects.exit(\"data\");\n return headRowBreak(code2);\n }\n effects.consume(code2);\n return code2 === 92 ? headRowEscape : headRowData;\n }\n function headRowEscape(code2) {\n if (code2 === 92 || code2 === 124) {\n effects.consume(code2);\n return headRowData;\n }\n return headRowData(code2);\n }\n function headDelimiterStart(code2) {\n self.interrupt = false;\n if (self.parser.lazy[self.now().line]) {\n return nok(code2);\n }\n effects.enter(\"tableDelimiterRow\");\n seen = false;\n if (markdownSpace(code2)) {\n return factorySpace(\n effects,\n headDelimiterBefore,\n \"linePrefix\",\n self.parser.constructs.disable.null.includes(\"codeIndented\") ? void 0 : 4\n )(code2);\n }\n return headDelimiterBefore(code2);\n }\n function headDelimiterBefore(code2) {\n if (code2 === 45 || code2 === 58) {\n return headDelimiterValueBefore(code2);\n }\n if (code2 === 124) {\n seen = true;\n effects.enter(\"tableCellDivider\");\n effects.consume(code2);\n effects.exit(\"tableCellDivider\");\n return headDelimiterCellBefore;\n }\n return headDelimiterNok(code2);\n }\n function headDelimiterCellBefore(code2) {\n if (markdownSpace(code2)) {\n return factorySpace(effects, headDelimiterValueBefore, \"whitespace\")(code2);\n }\n return headDelimiterValueBefore(code2);\n }\n function headDelimiterValueBefore(code2) {\n if (code2 === 58) {\n sizeB += 1;\n seen = true;\n effects.enter(\"tableDelimiterMarker\");\n effects.consume(code2);\n effects.exit(\"tableDelimiterMarker\");\n return headDelimiterLeftAlignmentAfter;\n }\n if (code2 === 45) {\n sizeB += 1;\n return headDelimiterLeftAlignmentAfter(code2);\n }\n if (code2 === null || markdownLineEnding(code2)) {\n return headDelimiterCellAfter(code2);\n }\n return headDelimiterNok(code2);\n }\n function headDelimiterLeftAlignmentAfter(code2) {\n if (code2 === 45) {\n effects.enter(\"tableDelimiterFiller\");\n return headDelimiterFiller(code2);\n }\n return headDelimiterNok(code2);\n }\n function headDelimiterFiller(code2) {\n if (code2 === 45) {\n effects.consume(code2);\n return headDelimiterFiller;\n }\n if (code2 === 58) {\n seen = true;\n effects.exit(\"tableDelimiterFiller\");\n effects.enter(\"tableDelimiterMarker\");\n effects.consume(code2);\n effects.exit(\"tableDelimiterMarker\");\n return headDelimiterRightAlignmentAfter;\n }\n effects.exit(\"tableDelimiterFiller\");\n return headDelimiterRightAlignmentAfter(code2);\n }\n function headDelimiterRightAlignmentAfter(code2) {\n if (markdownSpace(code2)) {\n return factorySpace(effects, headDelimiterCellAfter, \"whitespace\")(code2);\n }\n return headDelimiterCellAfter(code2);\n }\n function headDelimiterCellAfter(code2) {\n if (code2 === 124) {\n return headDelimiterBefore(code2);\n }\n if (code2 === null || markdownLineEnding(code2)) {\n if (!seen || size !== sizeB) {\n return headDelimiterNok(code2);\n }\n effects.exit(\"tableDelimiterRow\");\n effects.exit(\"tableHead\");\n return ok2(code2);\n }\n return headDelimiterNok(code2);\n }\n function headDelimiterNok(code2) {\n return nok(code2);\n }\n function bodyRowStart(code2) {\n effects.enter(\"tableRow\");\n return bodyRowBreak(code2);\n }\n function bodyRowBreak(code2) {\n if (code2 === 124) {\n effects.enter(\"tableCellDivider\");\n effects.consume(code2);\n effects.exit(\"tableCellDivider\");\n return bodyRowBreak;\n }\n if (code2 === null || markdownLineEnding(code2)) {\n effects.exit(\"tableRow\");\n return ok2(code2);\n }\n if (markdownSpace(code2)) {\n return factorySpace(effects, bodyRowBreak, \"whitespace\")(code2);\n }\n effects.enter(\"data\");\n return bodyRowData(code2);\n }\n function bodyRowData(code2) {\n if (code2 === null || code2 === 124 || markdownLineEndingOrSpace(code2)) {\n effects.exit(\"data\");\n return bodyRowBreak(code2);\n }\n effects.consume(code2);\n return code2 === 92 ? bodyRowEscape : bodyRowData;\n }\n function bodyRowEscape(code2) {\n if (code2 === 92 || code2 === 124) {\n effects.consume(code2);\n return bodyRowData;\n }\n return bodyRowData(code2);\n }\n}\nfunction resolveTable(events, context) {\n let index = -1;\n let inFirstCellAwaitingPipe = true;\n let rowKind = 0;\n let lastCell = [0, 0, 0, 0];\n let cell = [0, 0, 0, 0];\n let afterHeadAwaitingFirstBodyRow = false;\n let lastTableEnd = 0;\n let currentTable;\n let currentBody;\n let currentCell;\n const map2 = new EditMap();\n while (++index < events.length) {\n const event = events[index];\n const token = event[1];\n if (event[0] === \"enter\") {\n if (token.type === \"tableHead\") {\n afterHeadAwaitingFirstBodyRow = false;\n if (lastTableEnd !== 0) {\n flushTableEnd(map2, context, lastTableEnd, currentTable, currentBody);\n currentBody = void 0;\n lastTableEnd = 0;\n }\n currentTable = {\n type: \"table\",\n start: Object.assign({}, token.start),\n // Note: correct end is set later.\n end: Object.assign({}, token.end)\n };\n map2.add(index, 0, [[\"enter\", currentTable, context]]);\n } else if (token.type === \"tableRow\" || token.type === \"tableDelimiterRow\") {\n inFirstCellAwaitingPipe = true;\n currentCell = void 0;\n lastCell = [0, 0, 0, 0];\n cell = [0, index + 1, 0, 0];\n if (afterHeadAwaitingFirstBodyRow) {\n afterHeadAwaitingFirstBodyRow = false;\n currentBody = {\n type: \"tableBody\",\n start: Object.assign({}, token.start),\n // Note: correct end is set later.\n end: Object.assign({}, token.end)\n };\n map2.add(index, 0, [[\"enter\", currentBody, context]]);\n }\n rowKind = token.type === \"tableDelimiterRow\" ? 2 : currentBody ? 3 : 1;\n } else if (rowKind && (token.type === \"data\" || token.type === \"tableDelimiterMarker\" || token.type === \"tableDelimiterFiller\")) {\n inFirstCellAwaitingPipe = false;\n if (cell[2] === 0) {\n if (lastCell[1] !== 0) {\n cell[0] = cell[1];\n currentCell = flushCell(\n map2,\n context,\n lastCell,\n rowKind,\n void 0,\n currentCell\n );\n lastCell = [0, 0, 0, 0];\n }\n cell[2] = index;\n }\n } else if (token.type === \"tableCellDivider\") {\n if (inFirstCellAwaitingPipe) {\n inFirstCellAwaitingPipe = false;\n } else {\n if (lastCell[1] !== 0) {\n cell[0] = cell[1];\n currentCell = flushCell(\n map2,\n context,\n lastCell,\n rowKind,\n void 0,\n currentCell\n );\n }\n lastCell = cell;\n cell = [lastCell[1], index, 0, 0];\n }\n }\n } else if (token.type === \"tableHead\") {\n afterHeadAwaitingFirstBodyRow = true;\n lastTableEnd = index;\n } else if (token.type === \"tableRow\" || token.type === \"tableDelimiterRow\") {\n lastTableEnd = index;\n if (lastCell[1] !== 0) {\n cell[0] = cell[1];\n currentCell = flushCell(\n map2,\n context,\n lastCell,\n rowKind,\n index,\n currentCell\n );\n } else if (cell[1] !== 0) {\n currentCell = flushCell(map2, context, cell, rowKind, index, currentCell);\n }\n rowKind = 0;\n } else if (rowKind && (token.type === \"data\" || token.type === \"tableDelimiterMarker\" || token.type === \"tableDelimiterFiller\")) {\n cell[3] = index;\n }\n }\n if (lastTableEnd !== 0) {\n flushTableEnd(map2, context, lastTableEnd, currentTable, currentBody);\n }\n map2.consume(context.events);\n index = -1;\n while (++index < context.events.length) {\n const event = context.events[index];\n if (event[0] === \"enter\" && event[1].type === \"table\") {\n event[1]._align = gfmTableAlign(context.events, index);\n }\n }\n return events;\n}\nfunction flushCell(map2, context, range, rowKind, rowEnd, previousCell) {\n const groupName = rowKind === 1 ? \"tableHeader\" : rowKind === 2 ? \"tableDelimiter\" : \"tableData\";\n const valueName = \"tableContent\";\n if (range[0] !== 0) {\n previousCell.end = Object.assign({}, getPoint(context.events, range[0]));\n map2.add(range[0], 0, [[\"exit\", previousCell, context]]);\n }\n const now = getPoint(context.events, range[1]);\n previousCell = {\n type: groupName,\n start: Object.assign({}, now),\n // Note: correct end is set later.\n end: Object.assign({}, now)\n };\n map2.add(range[1], 0, [[\"enter\", previousCell, context]]);\n if (range[2] !== 0) {\n const relatedStart = getPoint(context.events, range[2]);\n const relatedEnd = getPoint(context.events, range[3]);\n const valueToken = {\n type: valueName,\n start: Object.assign({}, relatedStart),\n end: Object.assign({}, relatedEnd)\n };\n map2.add(range[2], 0, [[\"enter\", valueToken, context]]);\n if (rowKind !== 2) {\n const start = context.events[range[2]];\n const end = context.events[range[3]];\n start[1].end = Object.assign({}, end[1].end);\n start[1].type = \"chunkText\";\n start[1].contentType = \"text\";\n if (range[3] > range[2] + 1) {\n const a = range[2] + 1;\n const b = range[3] - range[2] - 1;\n map2.add(a, b, []);\n }\n }\n map2.add(range[3] + 1, 0, [[\"exit\", valueToken, context]]);\n }\n if (rowEnd !== void 0) {\n previousCell.end = Object.assign({}, getPoint(context.events, rowEnd));\n map2.add(rowEnd, 0, [[\"exit\", previousCell, context]]);\n previousCell = void 0;\n }\n return previousCell;\n}\nfunction flushTableEnd(map2, context, index, table, tableBody) {\n const exits = [];\n const related = getPoint(context.events, index);\n if (tableBody) {\n tableBody.end = Object.assign({}, related);\n exits.push([\"exit\", tableBody, context]);\n }\n table.end = Object.assign({}, related);\n exits.push([\"exit\", table, context]);\n map2.add(index + 1, 0, exits);\n}\nfunction getPoint(events, index) {\n const event = events[index];\n const side = event[0] === \"enter\" ? \"start\" : \"end\";\n return event[1][side];\n}\nconst tasklistCheck = {\n tokenize: tokenizeTasklistCheck\n};\nfunction gfmTaskListItem() {\n return {\n text: {\n [91]: tasklistCheck\n }\n };\n}\nfunction tokenizeTasklistCheck(effects, ok2, nok) {\n const self = this;\n return open;\n function open(code2) {\n if (\n // Exit if there’s stuff before.\n self.previous !== null || // Exit if not in the first content that is the first child of a list\n // item.\n !self._gfmTasklistFirstContentOfListItem\n ) {\n return nok(code2);\n }\n effects.enter(\"taskListCheck\");\n effects.enter(\"taskListCheckMarker\");\n effects.consume(code2);\n effects.exit(\"taskListCheckMarker\");\n return inside;\n }\n function inside(code2) {\n if (markdownLineEndingOrSpace(code2)) {\n effects.enter(\"taskListCheckValueUnchecked\");\n effects.consume(code2);\n effects.exit(\"taskListCheckValueUnchecked\");\n return close;\n }\n if (code2 === 88 || code2 === 120) {\n effects.enter(\"taskListCheckValueChecked\");\n effects.consume(code2);\n effects.exit(\"taskListCheckValueChecked\");\n return close;\n }\n return nok(code2);\n }\n function close(code2) {\n if (code2 === 93) {\n effects.enter(\"taskListCheckMarker\");\n effects.consume(code2);\n effects.exit(\"taskListCheckMarker\");\n effects.exit(\"taskListCheck\");\n return after;\n }\n return nok(code2);\n }\n function after(code2) {\n if (markdownLineEnding(code2)) {\n return ok2(code2);\n }\n if (markdownSpace(code2)) {\n return effects.check(\n {\n tokenize: spaceThenNonSpace\n },\n ok2,\n nok\n )(code2);\n }\n return nok(code2);\n }\n}\nfunction spaceThenNonSpace(effects, ok2, nok) {\n return factorySpace(effects, after, \"whitespace\");\n function after(code2) {\n return code2 === null ? nok(code2) : ok2(code2);\n }\n}\nfunction gfm(options) {\n return combineExtensions([\n gfmAutolinkLiteral(),\n gfmFootnote(),\n gfmStrikethrough(options),\n gfmTable(),\n gfmTaskListItem()\n ]);\n}\nconst emptyOptions = {};\nfunction remarkGfm(options) {\n const self = (\n /** @type {Processor} */\n this\n );\n const settings = options || emptyOptions;\n const data = self.data();\n const micromarkExtensions = data.micromarkExtensions || (data.micromarkExtensions = []);\n const fromMarkdownExtensions = data.fromMarkdownExtensions || (data.fromMarkdownExtensions = []);\n const toMarkdownExtensions = data.toMarkdownExtensions || (data.toMarkdownExtensions = []);\n micromarkExtensions.push(gfm(settings));\n fromMarkdownExtensions.push(gfmFromMarkdown());\n toMarkdownExtensions.push(gfmToMarkdown(settings));\n}\nconst _sfc_main$1 = /* @__PURE__ */ defineComponent({\n __name: \"NcRichTextCopyButton\",\n props: {\n contentId: null\n },\n setup(__props) {\n const props = __props;\n const { copy, icon, altText } = useCopy(() => document.getElementById(props.contentId).textContent);\n return { __sfc: true, props, copy, icon, altText, NcButton, NcIconSvgWrapper };\n }\n});\nvar _sfc_render$1 = function render2() {\n var _vm = this, _c = _vm._self._c, _setup = _vm._self._setupProxy;\n return _c(_setup.NcButton, { attrs: { \"variant\": \"tertiary\", \"size\": \"small\", \"aria-label\": _setup.altText, \"title\": _setup.altText }, on: { \"click\": _setup.copy }, scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_c(_setup.NcIconSvgWrapper, { attrs: { \"path\": _setup.icon, \"inline\": \"\" } })];\n }, proxy: true }]) });\n};\nvar _sfc_staticRenderFns$1 = [];\nvar __component__$1 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$1,\n _sfc_render$1,\n _sfc_staticRenderFns$1,\n false,\n null,\n null\n);\nconst NcRichTextCopyButton = __component__$1.exports;\nfunction remarkPlaceholder() {\n return function(ast) {\n visitParents(ast, (node) => node.type === \"text\", visitor);\n function visitor(node, ancestors) {\n const parent = ancestors.at(-1);\n const index = parent.children.indexOf(node);\n const placeholders = node.value.split(/(\\{[a-z\\-_.0-9]+\\})/ig).map((entry) => {\n const matches = entry.match(/^\\{([a-z\\-_.0-9]+)\\}$/i);\n if (!matches) {\n return u(\"text\", entry);\n }\n const [, component] = matches;\n return u(\"element\", {\n tagName: `#${component}`\n });\n });\n parent.children.splice(index, 1, ...placeholders);\n }\n };\n}\nfunction prepareTextNode({ h, context }, text2) {\n if (context.autolink) {\n text2 = parseUrl(text2);\n }\n if (Array.isArray(text2)) {\n return text2.map((entry) => {\n if (typeof entry === \"string\") {\n return entry;\n }\n const { component, props } = entry;\n return h(component, {\n props,\n class: \"rich-text--component\"\n });\n });\n }\n return text2;\n}\n/*!\n * SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nfunction isCodeNode(node) {\n return [\"code\", \"inlineCode\"].includes(node.type);\n}\nconst remarkStripCode = function() {\n return function(tree) {\n visitParents(tree, isCodeNode, (node, ancestors) => {\n const parent = ancestors.at(-1);\n const index = parent.children.indexOf(node);\n parent.children.splice(index, 1, {\n ...node,\n value: \"\"\n });\n return [SKIP, index + 1];\n });\n };\n};\nfunction remarkUnescape() {\n return function(tree) {\n visitParents(tree, (node) => [\"text\", \"code\", \"inlineCode\"].includes(node.type), (node, ancestors) => {\n const parent = ancestors.at(-1);\n const index = parent.children.indexOf(node);\n parent.children.splice(index, 1, {\n ...node,\n value: node.value.replace(/</gmi, \"<\").replace(/>/gmi, \">\")\n });\n return [SKIP, index + 1];\n });\n };\n}\nconst LINK_PROTOCOLS = [\"http\", \"https\", \"mailto\", \"tel\"];\nconst rehypeHighlight = ref(null);\nasync function importRehypeHighlightLibrary() {\n const module = await import(\"rehype-highlight\");\n rehypeHighlight.value = module.default;\n}\nconst _sfc_main = {\n name: \"NcRichText\",\n components: {\n NcReferenceList\n },\n /* eslint vue/require-prop-comment: warn -- TODO: Add a proper doc block about what this props do */\n props: {\n text: {\n type: String,\n default: \"\"\n },\n arguments: {\n type: Object,\n default: () => {\n return {};\n }\n },\n referenceLimit: {\n type: Number,\n default: 0\n },\n referenceInteractive: {\n type: Boolean,\n // eslint-disable-next-line vue/no-boolean-default\n default: true\n },\n referenceInteractiveOptIn: {\n type: Boolean,\n default: false\n },\n /** Provide data upfront to avoid extra http request */\n references: {\n type: Array,\n default: null\n },\n /** Provide basic Markdown syntax */\n useMarkdown: {\n type: Boolean,\n default: false\n },\n /** Provide GitHub Flavored Markdown syntax */\n useExtendedMarkdown: {\n type: Boolean,\n default: false\n },\n /** Provide event from rendered markdown inputs */\n interactive: {\n type: Boolean,\n default: false\n },\n autolink: {\n type: Boolean,\n // eslint-disable-next-line vue/no-boolean-default\n default: true\n }\n },\n emits: [\n \"interact-todo\",\n \"interact:todo\"\n ],\n data() {\n return {\n parentId: GenRandomId(5)\n };\n },\n methods: {\n renderPlaintext(h) {\n const placeholders = this.text.split(/(\\{[a-z\\-_.0-9]+\\})/ig).map((entry) => {\n const matches = entry.match(/^\\{([a-z\\-_.0-9]+)\\}$/i);\n if (!matches) {\n return prepareTextNode({ h, context: this }, entry);\n }\n const argumentId = matches[1];\n const argument = this.arguments[argumentId];\n if (typeof argument === \"object\") {\n const { component, props } = argument;\n return h(component, {\n props,\n class: \"rich-text--component\"\n });\n }\n if (argument) {\n return h(\"span\", { class: \"rich-text--fallback\" }, argument);\n }\n return entry;\n });\n return h(\"div\", { class: \"rich-text--wrapper\" }, [\n h(\"div\", {}, placeholders.flat()),\n this.referenceLimit > 0 ? h(\"div\", { class: \"rich-text--reference-widget\" }, [\n h(NcReferenceList, {\n props: {\n text: this.text,\n referenceData: this.references,\n interactive: this.referenceInteractive,\n interactiveOptIn: this.referenceInteractiveOptIn\n }\n })\n ]) : null\n ]);\n },\n renderMarkdown(h) {\n const renderedMarkdown = unified().use(remarkParse).use(remarkAutolink, {\n autolink: this.autolink,\n useMarkdown: this.useMarkdown,\n useExtendedMarkdown: this.useExtendedMarkdown\n }).use(remarkUnescape).use(this.useExtendedMarkdown ? remarkGfm : void 0).use(breaks).use(remarkUnlinkProtocols, { except: LINK_PROTOCOLS }).use(remark2rehype, {\n handlers: {\n component(toHast, node) {\n return toHast(node, node.component, { value: node.value });\n }\n }\n }).use(this.useExtendedMarkdown ? rehypeHighlight.value : void 0).use(remarkPlaceholder).use(rehypeExternalLinks, {\n target: \"_blank\",\n rel: [\"noopener noreferrer\"]\n }).use(rehype2react, {\n createElement: (tag, attrs, children) => {\n if (!tag.startsWith(\"#\")) {\n if ([\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"].includes(tag)) {\n tag = `h${Math.min(+String(tag)[1] + 3, 6)}`;\n }\n if (this.useExtendedMarkdown) {\n if (tag === \"code\" && !rehypeHighlight.value && attrs?.attrs?.class?.includes(\"language\")) {\n importRehypeHighlightLibrary();\n }\n if (tag === \"pre\" && Array.isArray(children) && children[0].tag === \"code\") {\n const id = this.parentId + \"-code-block-\" + GenRandomId(5);\n return h(\"p\", { class: \"rich-text__code-block\" }, [\n h(tag, { attrs: { ...attrs, id } }, children),\n h(NcRichTextCopyButton, {\n props: { contentId: id },\n class: \"rich-text__code-block-button\"\n })\n ]);\n }\n let nestedNode = null;\n if (tag === \"li\" && Array.isArray(children) && children[0].tag === \"input\" && children[0].data.attrs.type === \"checkbox\") {\n const [inputNode, ...labelParts] = children;\n const nestedNodeIndex = labelParts.findIndex((child) => [\"ul\", \"ol\", \"li\", \"blockquote\", \"pre\"].includes(child.tag));\n if (nestedNodeIndex !== -1) {\n nestedNode = labelParts[nestedNodeIndex];\n labelParts.splice(nestedNodeIndex);\n }\n const id = this.parentId + \"-markdown-input-\" + GenRandomId(5);\n const inputComponent = h(NcCheckboxRadioSwitch, {\n attrs: {\n ...inputNode.data.attrs,\n id,\n disabled: !this.interactive\n },\n on: {\n \"update:checked\": () => {\n this.$emit(\"interact-todo\", id);\n this.$emit(\"interact:todo\", id);\n }\n }\n }, labelParts);\n return h(tag, attrs, [inputComponent, nestedNode]);\n }\n }\n if (tag === \"a\") {\n const route = getRoute(this.$router, attrs.attrs.href);\n if (route) {\n delete attrs.attrs.href;\n delete attrs.attrs.target;\n return h(RouterLink, {\n ...attrs,\n props: {\n to: route\n }\n }, children);\n }\n const isAllowedScheme = /^(https?:\\/\\/|tel:|mailto:)/.test(attrs.attrs.href);\n if (isAllowedScheme) {\n attrs.attrs.href = attrs.attrs.href.trim();\n return h(NcRichTextExternalLink, attrs, children);\n } else {\n delete attrs.attrs.href;\n delete attrs.attrs.target;\n return h(\"span\", attrs, children);\n }\n }\n return h(tag, attrs, children);\n }\n const placeholder = this.arguments[tag.slice(1)];\n if (!placeholder) {\n return h(\"span\", { ...{ attrs }, ...{ class: \"rich-text--fallback\" } }, [`{${tag.slice(1)}}`]);\n }\n if (!placeholder.component) {\n return h(\"span\", attrs, [placeholder]);\n }\n return h(\n placeholder.component,\n {\n attrs,\n props: placeholder.props,\n class: \"rich-text--component\"\n },\n children\n );\n },\n prefix: false\n }).processSync(this.text.replace(/<[^>]+>/g, (match) => match.replace(/\")).result;\n return h(\"div\", { class: \"rich-text--wrapper rich-text--wrapper-markdown\" }, [\n renderedMarkdown,\n this.referenceLimit > 0 ? h(\"div\", { class: \"rich-text--reference-widget\" }, [\n h(NcReferenceList, {\n props: {\n text: this.prepareReferenceSource(this.text),\n referenceData: this.references,\n interactive: this.referenceInteractive,\n interactiveOptIn: this.referenceInteractiveOptIn\n }\n })\n ]) : null\n ]);\n },\n /**\n * Strip content of inline code and code blocks for reference widgets\n * (e.g. ignore fenced links from being added as reference)\n *\n * @param {string} text - Content of the node\n */\n prepareReferenceSource(text2) {\n if (!this.useMarkdown && !this.useExtendedMarkdown) {\n return text2;\n }\n const processor = unified();\n processor.compiler = (tree) => toString(tree);\n return processor.use(remarkParse).use(remarkStripCode).processSync(text2).value;\n }\n },\n render(h) {\n return this.useMarkdown || this.useExtendedMarkdown ? this.renderMarkdown(h) : this.renderPlaintext(h);\n }\n};\nconst _sfc_render = null;\nconst _sfc_staticRenderFns = null;\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n null,\n \"177dd7c0\"\n);\nconst NcRichText = __component__.exports;\nexport {\n NcRichText as N,\n NcReferenceList as a\n};\n//# sourceMappingURL=NcRichText-ByLPwUvM.mjs.map\n","import '../assets/NcRichContenteditable-DwS6PNCv.css';\nimport debounce from \"debounce\";\nimport stringLength from \"string-length\";\nimport Tribute from \"tributejs/dist/tribute.esm.js\";\nimport { useIsDarkTheme } from \"../Composables/useIsDarkTheme.mjs\";\nimport { g as getAvatarUrl } from \"./getAvatarUrl-BGOeDmNO.mjs\";\nimport { N as NcUserStatusIcon } from \"./NcUserStatusIcon-DdPPN-cP.mjs\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nimport { u as useModelMigration } from \"./useModelMigration-EhAWvqDD.mjs\";\nimport { e as emojiSearch, a as emojiAddRecent } from \"./emoji-Dtn2mDf7.mjs\";\nimport { r as register, A as t36, G as t33, a as t, H as n } from \"./_l10n-DVz9Qdzk.mjs\";\nimport { r as richEditor } from \"./index-BCqXu_og.mjs\";\nimport { G as GenRandomId } from \"./GenRandomId-F5ebeBB_.mjs\";\nimport { l as logger } from \"./logger-D3RVzcfQ.mjs\";\nimport \"@nextcloud/auth\";\nimport \"@nextcloud/axios\";\nimport \"@nextcloud/router\";\nimport \"@nextcloud/sharing/public\";\nimport \"@vueuse/core\";\nimport \"vue\";\nimport \"vue-router\";\nimport \"./legacy-DV3mGZdh.mjs\";\nimport \"./NcButton-CCWEL9Ci.mjs\";\nimport { g as getLinkWithPicker, s as searchProvider } from \"./referencePickerModal-B69WouiU.mjs\";\nimport \"./customPickerElements-DLFtgReB.mjs\";\nimport \"unist-builder\";\nimport \"unist-util-visit-parents\";\nimport \"./NcRichText-ByLPwUvM.mjs\";\nimport \"./createElementId-DhjFt1I9.mjs\";\nimport \"../Components/NcEmptyContent.mjs\";\nimport \"./NcSelect-CHc1QupB.mjs\";\nimport \"../Components/NcLoadingIcon.mjs\";\nimport \"./NcTextField-Czr9S6YO.mjs\";\nimport \"@nextcloud/event-bus\";\nimport \"../Components/NcModal.mjs\";\nconst _sfc_main$1 = {\n name: \"NcAutoCompleteResult\",\n components: {\n NcUserStatusIcon\n },\n /* eslint vue/require-prop-comment: warn -- TODO: Add a proper doc block about what this props do */\n props: {\n /**\n * @deprecated Use `label` instead\n */\n title: {\n type: String,\n required: false,\n default: null\n },\n label: {\n type: String,\n required: false,\n default: null\n },\n subline: {\n type: String,\n default: null\n },\n id: {\n type: String,\n default: null\n },\n icon: {\n type: String,\n required: true\n },\n iconUrl: {\n type: String,\n default: null\n },\n source: {\n type: String,\n required: true\n },\n status: {\n type: [Object, Array],\n default: () => ({})\n }\n },\n setup() {\n const isDarkTheme = useIsDarkTheme();\n return {\n isDarkTheme\n };\n },\n computed: {\n avatarUrl() {\n if (this.iconUrl) {\n return this.iconUrl;\n }\n return this.id && this.source === \"users\" ? getAvatarUrl(this.id, { isDarkTheme: this.isDarkTheme }) : null;\n },\n // For backwards compatibility\n labelWithFallback() {\n return this.label || this.title;\n }\n }\n};\nvar _sfc_render$1 = function render() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"div\", { staticClass: \"autocomplete-result\" }, [_c(\"div\", { staticClass: \"autocomplete-result__icon\", class: [_vm.icon, `autocomplete-result__icon--${_vm.avatarUrl ? \"with-avatar\" : \"\"}`], style: _vm.avatarUrl ? { backgroundImage: `url(${_vm.avatarUrl})` } : null }, [_vm.status.icon ? _c(\"span\", { staticClass: \"autocomplete-result__status autocomplete-result__status--icon\" }, [_vm._v(\" \" + _vm._s(_vm.status && _vm.status.icon || \"\") + \" \")]) : _vm.status.status && _vm.status.status !== \"offline\" ? _c(\"NcUserStatusIcon\", { staticClass: \"autocomplete-result__status\", attrs: { \"status\": _vm.status.status } }) : _vm._e()], 1), _c(\"span\", { staticClass: \"autocomplete-result__content\" }, [_c(\"span\", { staticClass: \"autocomplete-result__title\", attrs: { \"title\": _vm.labelWithFallback } }, [_vm._v(\" \" + _vm._s(_vm.labelWithFallback) + \" \")]), _vm.subline ? _c(\"span\", { staticClass: \"autocomplete-result__subline\" }, [_vm._v(\" \" + _vm._s(_vm.subline) + \" \")]) : _vm._e()])]);\n};\nvar _sfc_staticRenderFns$1 = [];\nvar __component__$1 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$1,\n _sfc_render$1,\n _sfc_staticRenderFns$1,\n false,\n null,\n \"ef14f1ec\"\n);\nconst NcAutoCompleteResult = __component__$1.exports;\nregister(t33, t36);\nconst style1 = {\n \"material-design-icon\": \"_material-design-icon_VcM5r\",\n \"tribute-container\": \"_tribute-container_J8oX8\",\n \"tribute-container__item\": \"_tribute-container__item_pmtRS\",\n \"tribute-container--focus-visible\": \"_tribute-container--focus-visible_fgXKW\",\n \"tribute-container-autocomplete\": \"_tribute-container-autocomplete_4BlSc\",\n \"tribute-container-emoji\": \"_tribute-container-emoji_-VNGb\",\n \"tribute-container-link\": \"_tribute-container-link_dwgU7\",\n \"tribute-item\": \"_tribute-item_bDEuV\",\n \"tribute-item__title\": \"_tribute-item__title_hLTFb\",\n \"tribute-item__icon\": \"_tribute-item__icon_4BGX5\"\n};\nconst smilesCharacters = [\"d\", \"D\", \"p\", \"P\", \"s\", \"S\", \"x\", \"X\", \")\", \"(\", \"|\", \"/\"];\nconst textSmiles = [];\nsmilesCharacters.forEach((char) => {\n textSmiles.push(\":\" + char);\n textSmiles.push(\":-\" + char);\n});\nlet isPlaintextOnlySupported = null;\nconst _sfc_main = {\n name: \"NcRichContenteditable\",\n mixins: [richEditor],\n inheritAttrs: false,\n model: {\n prop: \"modelValue\",\n event: \"update:modelValue\"\n },\n props: {\n /**\n * The ID attribute of the content editable\n */\n id: {\n type: String,\n default: () => GenRandomId(7)\n },\n /**\n * Visual label of the contenteditable\n */\n label: {\n type: String,\n default: \"\"\n },\n /**\n * Removed in v9 - use `modelValue` (`v-model`) instead\n *\n * @deprecated\n */\n value: {\n type: String,\n default: void 0\n },\n /**\n * The text content\n */\n modelValue: {\n type: String,\n default: \"\"\n },\n /**\n * Placeholder to be shown if empty\n */\n placeholder: {\n type: String,\n default: t(\"Write a message …\")\n },\n /**\n * Auto complete function\n */\n autoComplete: {\n type: Function,\n default: () => []\n },\n /**\n * The containing element or selector for the tribute (menu popover)\n * Defaults to `body` element\n */\n menuContainer: {\n type: [String, Element, null],\n default: null\n },\n /**\n * Make the contenteditable looks like a textarea or not.\n * Default looks like a single-line input.\n * This also handle the default enter/shift+enter behaviour.\n * if multiline, enter = newline; otherwise enter = submit\n * shift+enter always add a new line. ctrl+enter always submits\n */\n multiline: {\n type: Boolean,\n default: false\n },\n /**\n * Is the content editable ?\n */\n contenteditable: {\n type: Boolean,\n // eslint-disable-next-line vue/no-boolean-default\n default: true\n },\n /**\n * Disable the editing and show specific disabled design\n */\n disabled: {\n type: Boolean,\n default: false\n },\n /**\n * Max allowed length\n */\n maxlength: {\n type: Number,\n default: null\n },\n /**\n * Enable or disable emoji autocompletion\n */\n emojiAutocomplete: {\n type: Boolean,\n // eslint-disable-next-line vue/no-boolean-default\n default: true\n },\n /**\n * Enable or disable link autocompletion\n */\n linkAutocomplete: {\n type: Boolean,\n // eslint-disable-next-line vue/no-boolean-default\n default: true\n }\n },\n emits: [\n \"submit\",\n \"paste\",\n /**\n * Removed in v9 - use `update:modelValue` (`v-model`) instead\n *\n * @deprecated\n */\n \"update:value\",\n \"update:modelValue\",\n /** Same as update:modelValue for Vue 2 compatibility */\n \"update:model-value\",\n \"smart-picker-submit\"\n ],\n setup() {\n const uid = GenRandomId(5);\n const model = useModelMigration(\"value\", \"update:value\", true);\n if (isPlaintextOnlySupported === null) {\n try {\n document.createElement(\"div\").contentEditable = \"plaintext-only\";\n isPlaintextOnlySupported = true;\n } catch (error) {\n logger.debug(\"[NcRichContenteditable] Unsupported attribute value:\", { error });\n isPlaintextOnlySupported = false;\n }\n }\n return {\n model,\n // Constants\n labelId: `nc-rich-contenteditable-${uid}-label`,\n tributeId: `nc-rich-contenteditable-${uid}-tribute`,\n /**\n * Non-reactive property to store Tribute instance\n *\n * @type {import('tributejs').default | null}\n */\n tribute: null,\n tributeStyleMutationObserver: null\n };\n },\n data() {\n return {\n // Represent the raw untrimmed text of the contenteditable\n // serves no other purpose than to check whether the\n // content is empty or not\n localValue: this.model,\n // Is in text composition session in IME\n isComposing: false,\n // Tribute autocomplete\n isAutocompleteOpen: false,\n autocompleteActiveId: void 0,\n isTributeIntegrationDone: false\n };\n },\n computed: {\n /**\n * Is the current trimmed value empty?\n *\n * @return {boolean}\n */\n isEmptyValue() {\n return !this.localValue || this.localValue.trim() === \"\";\n },\n /**\n * Is the current value over maxlength?\n *\n * @return {boolean}\n */\n isOverMaxlength() {\n if (this.isEmptyValue || !this.maxlength) {\n return false;\n }\n return stringLength(this.localValue) > this.maxlength;\n },\n /**\n * Tooltip to show if characters count is over limit\n *\n * @return {string}\n */\n tooltipString() {\n if (!this.isOverMaxlength) {\n return null;\n }\n return n(\"Message limit of %n character reached\", \"Message limit of %n characters reached\", this.maxlength);\n },\n /**\n * Edit is only allowed when contenteditable is:\n * 'true' (all browsers since 2015)\n * 'plaintext-only' (most browsers since 2015, Firefox since 136+)\n *\n * @return {string}\n */\n contenteditableAttributeValue() {\n if (this.contenteditable && !this.disabled) {\n return isPlaintextOnlySupported ? \"plaintext-only\" : \"true\";\n }\n return \"false\";\n },\n /**\n * Proxied native event handlers without custom event handlers\n *\n * @return {Record}\n */\n listeners() {\n const listeners = { ...this.$listeners };\n delete listeners.paste;\n return listeners;\n },\n /**\n * Compute debounce function for the autocomplete function\n */\n debouncedAutoComplete() {\n return debounce(async (search, callback) => {\n this.autoComplete(search, callback);\n }, 100);\n }\n },\n watch: {\n /**\n * If the parent value change, we compare the plain text rendering\n * If it's different, we render everything and update the main content\n */\n model() {\n const html = this.$refs.contenteditable.innerHTML;\n if (this.model.trim() !== this.parseContent(html).trim()) {\n this.updateContent(this.model);\n }\n }\n },\n mounted() {\n this.initializeTribute();\n this.updateContent(this.model);\n },\n beforeDestroy() {\n if (this.tribute) {\n this.tribute.detach(this.$refs.contenteditable);\n }\n if (this.tributeStyleMutationObserver) {\n this.tributeStyleMutationObserver.disconnect();\n }\n },\n methods: {\n /**\n * Focus the richContenteditable\n *\n * @public\n */\n focus() {\n this.$refs.contenteditable.focus();\n },\n initializeTribute() {\n const renderMenuItem = (content) => `
${content}
`;\n const tributesCollection = [];\n tributesCollection.push({\n fillAttr: \"id\",\n // Search against id and label (display name) (fallback to title for v8.0.0..8.6.1 compatibility)\n lookup: (result) => `${result.id} ${result.label ?? result.title}`,\n requireLeadingSpace: true,\n // Popup mention autocompletion templates\n menuItemTemplate: (item) => renderMenuItem(this.renderComponentHtml(item.original, NcAutoCompleteResult)),\n // Hide if no results\n noMatchTemplate: () => '',\n // Inner display of mentions\n selectTemplate: (item) => this.genSelectTemplate(item?.original?.id),\n // Autocompletion results\n values: this.debouncedAutoComplete,\n // Class added to the menu container\n containerClass: `${this.$style[\"tribute-container\"]} ${this.$style[\"tribute-container-autocomplete\"]}`,\n // Class added to each list item\n itemClass: this.$style[\"tribute-container__item\"]\n });\n if (this.emojiAutocomplete) {\n tributesCollection.push({\n trigger: \":\",\n // Don't use the tribute search function at all\n // We pass search results as values (see below)\n lookup: (result, query) => query,\n requireLeadingSpace: true,\n // Popup mention autocompletion templates\n menuItemTemplate: (item) => {\n if (textSmiles.includes(item.original)) {\n return item.original;\n }\n return renderMenuItem(`${item.original.native} :${item.original.short_name}`);\n },\n // Hide if no results\n noMatchTemplate: () => t(\"No emoji found\"),\n // Display raw emoji along with its name\n selectTemplate: (item) => {\n if (textSmiles.includes(item.original)) {\n return item.original;\n }\n emojiAddRecent(item.original);\n return item.original.native;\n },\n // Pass the search results as values\n values: (text, cb) => {\n const emojiResults = emojiSearch(text);\n if (textSmiles.includes(\":\" + text)) {\n emojiResults.unshift(\":\" + text);\n }\n cb(emojiResults);\n },\n // Class added to the menu container\n containerClass: `${this.$style[\"tribute-container\"]} ${this.$style[\"tribute-container-emoji\"]}`,\n // Class added to each list item\n itemClass: this.$style[\"tribute-container__item\"]\n });\n }\n if (this.linkAutocomplete) {\n tributesCollection.push({\n trigger: \"/\",\n // Don't use the tribute search function at all\n // We pass search results as values (see below)\n lookup: (result, query) => query,\n requireLeadingSpace: true,\n // Popup mention autocompletion templates\n menuItemTemplate: (item) => renderMenuItem(`${item.original.title}`),\n // Hide if no results\n noMatchTemplate: () => t(\"No link provider found\"),\n selectTemplate: this.getLink,\n // Pass the search results as values\n values: (text, cb) => cb(searchProvider(text)),\n // Class added to the menu container\n containerClass: `${this.$style[\"tribute-container\"]} ${this.$style[\"tribute-container-link\"]}`,\n // Class added to each list item\n itemClass: this.$style[\"tribute-container__item\"]\n });\n }\n const menuContainer = typeof this.menuContainer === \"string\" ? document.querySelector(this.menuContainer) : this.menuContainer;\n this.tribute = new Tribute({\n collection: tributesCollection,\n // FIXME: tributejs doesn't support allowSpaces as a collection option, only as a global one\n // Requires to fork a library to allow spaces only in the middle of mentions ('@' trigger)\n allowSpaces: false,\n // Where to inject the menu popup\n menuContainer\n });\n this.tribute.attach(this.$refs.contenteditable);\n this.$refs.contenteditable.contentEditable = this.contenteditableAttributeValue;\n },\n getLink(item) {\n getLinkWithPicker(item.original.id).then((result) => {\n const tmpElem = document.getElementById(\"tmp-smart-picker-result-node\");\n const eventData = {\n result,\n insertText: true\n };\n this.$emit(\"smart-picker-submit\", eventData);\n if (eventData.insertText) {\n const newElem = document.createTextNode(result);\n tmpElem.replaceWith(newElem);\n this.setCursorAfter(newElem);\n this.updateValue(this.$refs.contenteditable.innerHTML);\n } else {\n tmpElem.remove();\n }\n }).catch((error) => {\n logger.debug(\"Smart picker promise rejected\", { error });\n const tmpElem = document.getElementById(\"tmp-smart-picker-result-node\");\n this.setCursorAfter(tmpElem);\n tmpElem.remove();\n });\n return '';\n },\n setCursorAfter(element) {\n const range = document.createRange();\n range.setEndAfter(element);\n range.collapse();\n const selection = window.getSelection();\n selection.removeAllRanges();\n selection.addRange(range);\n },\n moveCursorToEnd() {\n if (!document.createRange) {\n return;\n }\n if (window.getSelection().rangeCount > 0 && this.$refs.contenteditable.contains(window.getSelection().getRangeAt(0).commonAncestorContainer)) {\n return;\n }\n const range = document.createRange();\n range.selectNodeContents(this.$refs.contenteditable);\n range.collapse(false);\n const selection = window.getSelection();\n selection.removeAllRanges();\n selection.addRange(range);\n },\n /**\n * Re-emit the input event to the parent\n *\n * @param {Event} event the input event\n */\n onInput(event) {\n this.updateValue(event.target.innerHTML);\n },\n /**\n * When pasting, sanitize the content, extract text\n * and render it again\n *\n * @param {Event} event the paste event\n * @fires Event paste the original paste event\n */\n onPaste(event) {\n if (!this.contenteditable || this.disabled) {\n return;\n }\n if (isPlaintextOnlySupported) {\n this.$emit(\"paste\", event);\n } else {\n event.preventDefault();\n const clipboardData = event.clipboardData;\n this.$emit(\"paste\", event);\n if (clipboardData.files.length !== 0 || !Object.values(clipboardData.items).find((item) => item?.type.startsWith(\"text\"))) {\n return;\n }\n const text = clipboardData.getData(\"text\");\n const selection = window.getSelection();\n const range = selection.getRangeAt(0);\n range.deleteContents();\n range.insertNode(document.createTextNode(text));\n range.collapse(false);\n }\n this.updateValue(this.$refs.contenteditable.innerHTML);\n },\n /**\n * Update the value text from the provided html\n *\n * @param {string} htmlOrText the html content (or raw text with @mentions)\n */\n updateValue(htmlOrText) {\n const text = this.parseContent(htmlOrText).replace(/^\\n$/, \"\");\n this.localValue = text;\n this.model = text;\n },\n /**\n * Update content and local value\n *\n * @param {string} value the message value\n */\n updateContent(value) {\n const renderedContent = this.renderContent(value);\n this.$refs.contenteditable.innerHTML = renderedContent;\n this.localValue = value;\n },\n /**\n * Enter key pressed. Submits if not multiline\n *\n * @param {Event} event the keydown event\n */\n onEnter(event) {\n if (this.multiline || this.isOverMaxlength || this.tribute.isActive || this.isComposing) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n this.$emit(\"submit\", event);\n },\n /**\n * Ctrl + Enter key pressed is used to submit\n *\n * @param {Event} event the keydown event\n */\n onCtrlEnter(event) {\n if (this.isOverMaxlength) {\n return;\n }\n this.$emit(\"submit\", event);\n },\n onKeyUp(event) {\n event.stopImmediatePropagation();\n },\n onKeyEsc(event) {\n if (this.tribute && this.isAutocompleteOpen) {\n event.stopImmediatePropagation();\n this.tribute.hideMenu();\n }\n },\n /**\n * Get HTML element with Tribute.js container\n *\n * @return {HTMLElement}\n */\n getTributeContainer() {\n return this.tribute.menu;\n },\n /**\n * Get the currently selected item element id in Tribute.js container\n *\n * @return {HTMLElement}\n */\n getTributeSelectedItem() {\n return this.getTributeContainer().querySelector('.highlight [id^=\"nc-rich-contenteditable-tribute-item-\"]');\n },\n /**\n * Handle Tribute activation\n *\n * @param {boolean} isActive - is active\n */\n onTributeActive(isActive) {\n this.isAutocompleteOpen = isActive;\n if (isActive) {\n this.getTributeContainer().setAttribute(\"class\", this.tribute.current.collection.containerClass || this.$style[\"tribute-container\"]);\n this.setupTributeIntegration();\n document.removeEventListener(\"click\", this.hideTribute, true);\n } else {\n this.debouncedAutoComplete.clear();\n this.autocompleteActiveId = void 0;\n this.setTributeFocusVisible(false);\n }\n },\n onTributeArrowKeyDown() {\n if (!this.isAutocompleteOpen) {\n return;\n }\n this.setTributeFocusVisible(true);\n this.onTributeSelectedItemWillChange();\n },\n onTributeSelectedItemWillChange() {\n requestAnimationFrame(() => {\n this.autocompleteActiveId = this.getTributeSelectedItem()?.id;\n });\n },\n setupTributeIntegration() {\n if (this.isTributeIntegrationDone) {\n return;\n }\n this.isTributeIntegrationDone = true;\n const tributeContainer = this.getTributeContainer();\n tributeContainer.id = this.tributeId;\n tributeContainer.setAttribute(\"role\", \"listbox\");\n const ul = tributeContainer.children[0];\n ul.setAttribute(\"role\", \"presentation\");\n this.tributeStyleMutationObserver = new MutationObserver(([{ target }]) => {\n if (target.style.display !== \"none\") {\n this.onTributeSelectedItemWillChange();\n }\n }).observe(tributeContainer, {\n attributes: true,\n attributeFilter: [\"style\"]\n });\n tributeContainer.addEventListener(\"mousemove\", () => {\n this.setTributeFocusVisible(false);\n this.onTributeSelectedItemWillChange();\n }, { passive: true });\n },\n /**\n * Set tribute-container--focus-visible class on the Tribute container when the user navigates the listbox via keyboard.\n *\n * Because the real focus is kept on the textbox, we cannot use the :focus-visible pseudo-class\n * to style selected options in the autocomplete listbox.\n *\n * @param {boolean} withFocusVisible - should the focus-visible class be added\n */\n setTributeFocusVisible(withFocusVisible) {\n if (withFocusVisible) {\n this.getTributeContainer().classList.add(this.$style[\"tribute-container--focus-visible\"]);\n } else {\n this.getTributeContainer().classList.remove(this.$style[\"tribute-container--focus-visible\"]);\n }\n },\n /**\n * Show tribute menu programmatically.\n *\n * @param {string} trigger - trigger character, can be '/', '@', or ':'\n *\n * @public\n */\n showTribute(trigger) {\n this.focus();\n const index = this.tribute.collection.findIndex((collection) => collection.trigger === trigger);\n this.tribute.showMenuForCollection(this.$refs.contenteditable, index);\n this.updateValue(this.$refs.contenteditable.innerHTML);\n document.addEventListener(\"click\", this.hideTribute, true);\n },\n /**\n * Hide tribute menu programmatically\n *\n */\n hideTribute() {\n this.tribute.hideMenu();\n document.removeEventListener(\"click\", this.hideTribute, true);\n }\n }\n};\nvar _sfc_render = function render2() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"div\", { staticClass: \"rich-contenteditable\" }, [_c(\"div\", _vm._g(_vm._b({ ref: \"contenteditable\", staticClass: \"rich-contenteditable__input\", class: {\n \"rich-contenteditable__input--empty\": _vm.isEmptyValue,\n \"rich-contenteditable__input--multiline\": _vm.multiline,\n \"rich-contenteditable__input--has-label\": _vm.label,\n \"rich-contenteditable__input--overflow\": _vm.isOverMaxlength,\n \"rich-contenteditable__input--disabled\": _vm.disabled\n }, attrs: { \"id\": _vm.id, \"contenteditable\": _vm.contenteditableAttributeValue, \"aria-labelledby\": _vm.label ? _vm.labelId : void 0, \"aria-placeholder\": _vm.placeholder, \"aria-multiline\": \"true\", \"role\": \"textbox\", \"aria-haspopup\": \"listbox\", \"aria-autocomplete\": \"inline\", \"aria-controls\": _vm.tributeId, \"aria-expanded\": _vm.isAutocompleteOpen ? \"true\" : \"false\", \"aria-activedescendant\": _vm.autocompleteActiveId, \"title\": _vm.tooltipString }, on: { \"focus\": _vm.moveCursorToEnd, \"input\": _vm.onInput, \"compositionstart\": function($event) {\n _vm.isComposing = true;\n }, \"compositionend\": function($event) {\n _vm.isComposing = false;\n }, \"!keydown\": function($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"esc\", 27, $event.key, [\"Esc\", \"Escape\"])) return null;\n return _vm.onKeyEsc.apply(null, arguments);\n }, \"keydown\": [function($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")) return null;\n if ($event.ctrlKey || $event.shiftKey || $event.altKey || $event.metaKey) return null;\n return _vm.onEnter.apply(null, arguments);\n }, function($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")) return null;\n if (!$event.ctrlKey) return null;\n if ($event.shiftKey || $event.altKey || $event.metaKey) return null;\n $event.stopPropagation();\n $event.preventDefault();\n return _vm.onCtrlEnter.apply(null, arguments);\n }, function($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"up\", 38, $event.key, [\"Up\", \"ArrowUp\"])) return null;\n if ($event.ctrlKey || $event.shiftKey || $event.altKey || $event.metaKey) return null;\n $event.stopPropagation();\n return _vm.onTributeArrowKeyDown.apply(null, arguments);\n }, function($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"down\", 40, $event.key, [\"Down\", \"ArrowDown\"])) return null;\n if ($event.ctrlKey || $event.shiftKey || $event.altKey || $event.metaKey) return null;\n $event.stopPropagation();\n return _vm.onTributeArrowKeyDown.apply(null, arguments);\n }], \"paste\": _vm.onPaste, \"!keyup\": function($event) {\n $event.stopPropagation();\n $event.preventDefault();\n return _vm.onKeyUp.apply(null, arguments);\n }, \"tribute-active-true\": function($event) {\n return _vm.onTributeActive(true);\n }, \"tribute-active-false\": function($event) {\n return _vm.onTributeActive(false);\n } } }, \"div\", _vm.$attrs, false), _vm.listeners)), _vm.label ? _c(\"div\", { staticClass: \"rich-contenteditable__label\", attrs: { \"id\": _vm.labelId } }, [_vm._v(\" \" + _vm._s(_vm.label) + \" \")]) : _vm._e()]);\n};\nvar _sfc_staticRenderFns = [];\nconst __cssModules = {\n \"$style\": style1\n};\nfunction _sfc_injectStyles(ctx) {\n for (var key in __cssModules) {\n this[key] = __cssModules[key];\n }\n}\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n _sfc_injectStyles,\n \"894f61fb\"\n);\nconst NcRichContenteditable = __component__.exports;\nexport {\n NcAutoCompleteResult as N,\n NcRichContenteditable as a\n};\n//# sourceMappingURL=NcRichContenteditable-8ZA_LArB.mjs.map\n","import { u as useModelMigration } from \"./useModelMigration-EhAWvqDD.mjs\";\nimport { r as register, k as t0, a as t } from \"./_l10n-DVz9Qdzk.mjs\";\nimport { l as logger } from \"./logger-D3RVzcfQ.mjs\";\nimport NcEllipsisedOption from \"../Components/NcEllipsisedOption.mjs\";\nimport { N as NcSelect } from \"./NcSelect-CHc1QupB.mjs\";\nimport axios from \"@nextcloud/axios\";\nimport { generateRemoteUrl } from \"@nextcloud/router\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nregister(t0);\nfunction xmlToJson(xml) {\n let obj = {};\n if (xml.nodeType === 1) {\n if (xml.attributes.length > 0) {\n obj[\"@attributes\"] = {};\n for (let j = 0; j < xml.attributes.length; j++) {\n const attribute = xml.attributes.item(j);\n obj[\"@attributes\"][attribute.nodeName] = attribute.nodeValue;\n }\n }\n } else if (xml.nodeType === 3) {\n obj = xml.nodeValue;\n }\n if (xml.hasChildNodes()) {\n for (let i = 0; i < xml.childNodes.length; i++) {\n const item = xml.childNodes.item(i);\n const nodeName = item.nodeName;\n if (typeof obj[nodeName] === \"undefined\") {\n obj[nodeName] = xmlToJson(item);\n } else {\n if (typeof obj[nodeName].push === \"undefined\") {\n const old = obj[nodeName];\n obj[nodeName] = [];\n obj[nodeName].push(old);\n }\n obj[nodeName].push(xmlToJson(item));\n }\n }\n }\n return obj;\n}\nfunction parseXml(xml) {\n let dom = null;\n try {\n dom = new DOMParser().parseFromString(xml, \"text/xml\");\n } catch (error) {\n logger.error(\"Failed to parse xml document\", { error });\n }\n return dom;\n}\nfunction xmlToTagList(xml) {\n const json = xmlToJson(parseXml(xml));\n const list = json[\"d:multistatus\"][\"d:response\"];\n const result = [];\n for (const index in list) {\n const tag = list[index][\"d:propstat\"];\n if (tag[\"d:status\"][\"#text\"] !== \"HTTP/1.1 200 OK\") {\n continue;\n }\n result.push({\n id: parseInt(tag[\"d:prop\"][\"oc:id\"][\"#text\"]),\n displayName: tag[\"d:prop\"][\"oc:display-name\"][\"#text\"],\n canAssign: tag[\"d:prop\"][\"oc:can-assign\"][\"#text\"] === \"true\",\n userAssignable: tag[\"d:prop\"][\"oc:user-assignable\"][\"#text\"] === \"true\",\n userVisible: tag[\"d:prop\"][\"oc:user-visible\"][\"#text\"] === \"true\"\n });\n }\n return result;\n}\nasync function searchTags() {\n if (window.NextcloudVueDocs) {\n return Promise.resolve(xmlToTagList(window.NextcloudVueDocs.tags));\n }\n const result = await axios({\n method: \"PROPFIND\",\n url: generateRemoteUrl(\"dav\") + \"/systemtags/\",\n data: `\n\t\t\t\t\t\n\t\t\t\t\t \n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t \n\t\t\t\t\t`\n });\n return xmlToTagList(result.data);\n}\nconst _sfc_main = {\n name: \"NcSelectTags\",\n components: {\n NcEllipsisedOption,\n NcSelect\n },\n model: {\n prop: \"modelValue\",\n event: \"update:modelValue\"\n },\n props: {\n // Add NcSelect prop defaults and populate $props\n ...NcSelect.props,\n /**\n * Enable automatic fetching of tags\n *\n * If `false`, available tags must be passed using the `options` prop\n */\n fetchTags: {\n type: Boolean,\n // eslint-disable-next-line vue/no-boolean-default\n default: true\n },\n /**\n * Callback to generate the label text\n *\n * @see https://vue-select.org/api/props.html#getoptionlabel\n */\n getOptionLabel: {\n type: Function,\n default: (option) => {\n const { displayName, userVisible, userAssignable } = option;\n if (userVisible === false) {\n return t(\"{tag} (invisible)\", { tag: displayName });\n }\n if (userAssignable === false) {\n return t(\"{tag} (restricted)\", { tag: displayName });\n }\n return displayName;\n }\n },\n /**\n * Sets the maximum number of tags to display in the dropdown list\n *\n * Because of compatibility reasons only 5 tag entries are shown by\n * default\n */\n limit: {\n type: Number,\n default: 5\n },\n /**\n * Allow selection of multiple options\n *\n * This prop automatically sets the internal `closeOnSelect` prop to\n * its boolean opposite\n *\n * @see https://vue-select.org/api/props.html#multiple\n */\n multiple: {\n type: Boolean,\n // eslint-disable-next-line vue/no-boolean-default\n default: true\n },\n /**\n * Callback to filter available options\n */\n optionsFilter: {\n type: Function,\n default: null\n },\n /**\n * Enable passing of `value` prop and emitted `input` events as-is\n * i.e. for usage with `v-model`\n *\n * If `true`, custom internal `value` and `input` handling is disabled\n */\n passthru: {\n type: Boolean,\n default: false\n },\n /**\n * Placeholder text\n *\n * @see https://vue-select.org/api/props.html#placeholder\n */\n placeholder: {\n type: String,\n default: t(\"Select a tag\")\n },\n /**\n * Removed in v9 - use `modelValue` (`v-model`) instead\n *\n * @deprecated\n */\n value: {\n type: [Number, Array, Object],\n default: void 0\n },\n /**\n * Currently selected value\n */\n modelValue: {\n type: [Number, Array, Object],\n default: null\n },\n /**\n * Any available prop\n *\n * @see https://vue-select.org/api/props.html\n */\n // Not an actual prop but needed to show in vue-styleguidist docs\n // eslint-disable-next-line\n \" \": {}\n },\n emits: [\n /**\n * Removed in v9 - use `update:modelValue` (`v-model`) instead\n */\n \"input\",\n /**\n * Emitted on input events of the multiselect field\n *\n * @type {number|number[]}\n */\n \"update:modelValue\",\n /** Same as update:modelValue for Vue 2 compatibility */\n \"update:model-value\",\n /**\n * All events from https://vue-select.org/api/events.html\n */\n // Not an actual event but needed to show in vue-styleguidist docs\n \" \"\n ],\n setup() {\n const model = useModelMigration(\"value\", \"input\");\n const noop = () => {\n };\n return {\n model,\n noop\n };\n },\n data() {\n return {\n search: \"\",\n availableTags: []\n };\n },\n computed: {\n availableOptions() {\n if (this.optionsFilter) {\n return this.tags.filter(this.optionsFilter);\n }\n return this.tags;\n },\n localValue() {\n if (this.tags.length === 0) {\n return [];\n }\n if (this.multiple) {\n return this.model.filter((tag) => tag !== \"\").map((id) => this.tags.find((tag2) => tag2.id === id));\n } else {\n return this.tags.find((tag) => tag.id === this.model);\n }\n },\n propsToForward() {\n const {\n // Props handled by this component\n fetchTags,\n optionsFilter,\n passthru,\n // Props to forward\n ...propsToForward\n } = this.$props;\n return propsToForward;\n },\n tags() {\n if (!this.fetchTags) {\n return this.options;\n }\n return this.availableTags;\n }\n },\n async created() {\n if (!this.fetchTags) {\n return;\n }\n try {\n const result = await searchTags();\n this.availableTags = result;\n } catch (error) {\n logger.error(\"Loading systemtags failed\", { error });\n }\n },\n methods: {\n handleInput(value) {\n if (this.multiple) {\n this.model = value.map((element) => element.id);\n } else {\n if (value === null) {\n this.model = null;\n } else {\n this.model = value.id;\n }\n }\n }\n }\n};\nvar _sfc_render = function render() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"NcSelect\", _vm._g(_vm._b({ attrs: { \"options\": _vm.availableOptions, \"close-on-select\": !_vm.multiple, \"value\": _vm.passthru ? _vm.model : _vm.localValue }, on: { \"search\": (searchString) => _vm.search = searchString }, scopedSlots: _vm._u([{ key: \"option\", fn: function(option) {\n return [_c(\"NcEllipsisedOption\", { attrs: { \"name\": _vm.getOptionLabel(option), \"search\": _vm.search } })];\n } }, { key: \"selected-option\", fn: function(selectedOption) {\n return [_c(\"NcEllipsisedOption\", { attrs: { \"name\": _vm.getOptionLabel(selectedOption), \"search\": _vm.search } })];\n } }, _vm._l(_vm.$scopedSlots, function(_, name) {\n return { key: name, fn: function(data) {\n return [_vm._t(name, null, null, data)];\n } };\n })], null, true) }, \"NcSelect\", _vm.propsToForward, false), {\n ..._vm.$listeners,\n input: _vm.passthru ? _vm.$listeners.input : _vm.noop,\n \"update:modelValue\": _vm.passthru ? _vm.$listeners[\"update:modelValue\"] : _vm.handleInput,\n \"update:model-value\": _vm.passthru ? _vm.$listeners[\"update:model-value\"] : _vm.noop\n }));\n};\nvar _sfc_staticRenderFns = [];\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n null,\n null\n);\nconst NcSelectTags = __component__.exports;\nexport {\n NcSelectTags as N\n};\n//# sourceMappingURL=NcSelectTags-Bokig7ar.mjs.map\n","import '../assets/NcSettingsInputText-18lfGViv.css';\nimport { u as useModelMigration } from \"./useModelMigration-EhAWvqDD.mjs\";\nimport { r as register, j as t50, a as t } from \"./_l10n-DVz9Qdzk.mjs\";\nimport { G as GenRandomId } from \"./GenRandomId-F5ebeBB_.mjs\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nregister(t50);\nconst _sfc_main = {\n name: \"NcSettingsInputText\",\n model: {\n prop: \"value\",\n event: \"update:value\"\n },\n props: {\n /**\n * label of the select group element\n */\n label: {\n type: String,\n required: true\n },\n /**\n * hint of the select group input\n */\n hint: {\n type: String,\n default: \"\"\n },\n /**\n * Removed in v9 - use `modelValue` (`v-model`) instead\n *\n * @deprecated\n */\n value: {\n type: String,\n default: void 0\n },\n /**\n * value of the select group input\n */\n modelValue: {\n type: String,\n default: \"\"\n },\n /**\n * disabled state of the settings select group input\n */\n disabled: {\n type: Boolean,\n default: false\n },\n /**\n * id attribute of the select group element\n */\n id: {\n type: String,\n default: () => \"settings-input-text-\" + GenRandomId(),\n validator: (id) => id.trim() !== \"\"\n }\n },\n emits: [\n /**\n * Removed in v9 - use `update:modelValue` (`v-model`) instead\n *\n * @deprecated\n */\n \"update:value\",\n /**\n * Emitted when the inputs value changes\n *\n * @type {string}\n */\n \"update:modelValue\",\n /* Same as update:modelValue for Vue 2 compatibility */\n \"update:model-value\",\n \"input\",\n \"submit\",\n \"change\"\n ],\n setup() {\n const model = useModelMigration(\"value\", \"update:value\");\n return {\n model\n };\n },\n data() {\n return {\n submitTranslated: t(\"Submit\")\n };\n },\n computed: {\n /**\n * @return {string}\n */\n idSubmit() {\n return this.id + \"-submit\";\n }\n },\n methods: {\n onInput(event) {\n this.$emit(\"input\", event);\n this.model = event.target.value;\n },\n onSubmit(event) {\n if (!this.disabled) {\n this.$emit(\"submit\", event);\n }\n },\n onChange(event) {\n this.$emit(\"change\", event);\n }\n }\n};\nvar _sfc_render = function render() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"form\", { ref: \"form\", attrs: { \"disabled\": _vm.disabled }, on: { \"submit\": function($event) {\n $event.preventDefault();\n $event.stopPropagation();\n return _vm.onSubmit.apply(null, arguments);\n } } }, [_c(\"div\", { staticClass: \"input-wrapper\" }, [_c(\"label\", { staticClass: \"action-input__label\", attrs: { \"for\": _vm.id } }, [_vm._v(_vm._s(_vm.label))]), _c(\"input\", { attrs: { \"id\": _vm.id, \"type\": \"text\", \"disabled\": _vm.disabled }, domProps: { \"value\": _vm.model }, on: { \"input\": _vm.onInput, \"change\": _vm.onChange } }), _c(\"input\", { staticClass: \"action-input__submit\", attrs: { \"id\": _vm.idSubmit, \"type\": \"submit\" }, domProps: { \"value\": _vm.submitTranslated } }), _vm.hint ? _c(\"p\", { staticClass: \"hint\" }, [_vm._v(\" \" + _vm._s(_vm.hint) + \" \")]) : _vm._e()])]);\n};\nvar _sfc_staticRenderFns = [];\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n null,\n \"9938ac79\"\n);\nconst NcSettingsInputText = __component__.exports;\nexport {\n NcSettingsInputText as N\n};\n//# sourceMappingURL=NcSettingsInputText-BwnkZzWL.mjs.map\n","import '../assets/NcSettingsSection-D_qeKnRb.css';\nimport { loadState } from \"@nextcloud/initial-state\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nimport { r as register, v as t25, a as t } from \"./_l10n-DVz9Qdzk.mjs\";\nconst _sfc_main$1 = {\n name: \"HelpCircleIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nvar _sfc_render$1 = function render() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"span\", _vm._b({ staticClass: \"material-design-icon help-circle-icon\", attrs: { \"aria-hidden\": _vm.title ? null : \"true\", \"aria-label\": _vm.title, \"role\": \"img\" }, on: { \"click\": function($event) {\n return _vm.$emit(\"click\", $event);\n } } }, \"span\", _vm.$attrs, false), [_c(\"svg\", { staticClass: \"material-design-icon__svg\", attrs: { \"fill\": _vm.fillColor, \"width\": _vm.size, \"height\": _vm.size, \"viewBox\": \"0 0 24 24\" } }, [_c(\"path\", { attrs: { \"d\": \"M15.07,11.25L14.17,12.17C13.45,12.89 13,13.5 13,15H11V14.5C11,13.39 11.45,12.39 12.17,11.67L13.41,10.41C13.78,10.05 14,9.55 14,9C14,7.89 13.1,7 12,7A2,2 0 0,0 10,9H8A4,4 0 0,1 12,5A4,4 0 0,1 16,9C16,9.88 15.64,10.67 15.07,11.25M13,19H11V17H13M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12C22,6.47 17.5,2 12,2Z\" } }, [_vm.title ? _c(\"title\", [_vm._v(_vm._s(_vm.title))]) : _vm._e()])])]);\n};\nvar _sfc_staticRenderFns$1 = [];\nvar __component__$1 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$1,\n _sfc_render$1,\n _sfc_staticRenderFns$1,\n false,\n null,\n null\n);\nconst HelpCircle = __component__$1.exports;\nregister(t25);\nconst [major] = loadState(\"core\", \"config\", { version: \"30.0\" }).version.split(\".\", 2) ?? [];\nconst isLegacy = major && Number.parseInt(major) < 30;\nconst _sfc_main = {\n name: \"NcSettingsSection\",\n components: {\n HelpCircle\n },\n props: {\n /**\n * The name of the settings section.\n * This is used for the headline and needs to be set.\n */\n name: {\n type: String,\n required: true\n },\n /**\n * Further informational description of the section.\n */\n description: {\n type: String,\n default: \"\"\n },\n /**\n * The URL for the documentation about this section\n */\n docUrl: {\n type: String,\n default: \"\"\n },\n /**\n * Limit the width of the setting's content\n *\n * Setting this to false allows unrestricted (width) settings content.\n * Note that the name and description have always a width limit.\n *\n * @deprecated Will be removed with next version and will not be used on Nextcloud 30+ (always forced to true)\n */\n limitWidth: {\n type: Boolean,\n // eslint-disable-next-line vue/no-boolean-default\n default: true\n }\n },\n data() {\n return {\n docNameTranslated: t(\"External documentation for {name}\", {\n name: this.name\n })\n };\n },\n computed: {\n forceLimitWidth() {\n return this.limitWidth || !isLegacy;\n },\n hasDescription() {\n return this.description.length > 0;\n },\n hasDocUrl() {\n return this.docUrl.length > 0;\n }\n }\n};\nvar _sfc_render = function render2() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"div\", { staticClass: \"settings-section\", class: { \"settings-section--limit-width\": _vm.forceLimitWidth } }, [_c(\"h2\", { staticClass: \"settings-section__name\" }, [_vm._v(\" \" + _vm._s(_vm.name) + \" \"), _vm.hasDocUrl ? _c(\"a\", { staticClass: \"settings-section__info\", attrs: { \"href\": _vm.docUrl, \"title\": _vm.docNameTranslated, \"aria-label\": _vm.docNameTranslated, \"target\": \"_blank\", \"rel\": \"noreferrer nofollow\" } }, [_c(\"HelpCircle\", { attrs: { \"size\": 20 } })], 1) : _vm._e()]), _vm.hasDescription ? _c(\"p\", { staticClass: \"settings-section__desc\" }, [_vm._v(\" \" + _vm._s(_vm.description) + \" \")]) : _vm._e(), _vm._t(\"default\")], 2);\n};\nvar _sfc_staticRenderFns = [];\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n null,\n \"56b92b56\"\n);\nconst NcSettingsSection = __component__.exports;\nexport {\n NcSettingsSection as N\n};\n//# sourceMappingURL=NcSettingsSection-Dz_b9rcq.mjs.map\n","import '../assets/NcSettingsSelectGroup-B9FlWQVH.css';\nimport axios from \"@nextcloud/axios\";\nimport { generateOcsUrl } from \"@nextcloud/router\";\nimport debounce from \"debounce\";\nimport { N as NcSelect } from \"./NcSelect-CHc1QupB.mjs\";\nimport { u as useModelMigration } from \"./useModelMigration-EhAWvqDD.mjs\";\nimport { r as register, i as t51, a as t } from \"./_l10n-DVz9Qdzk.mjs\";\nimport { G as GenRandomId } from \"./GenRandomId-F5ebeBB_.mjs\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nregister(t51);\nconst _sfc_main = {\n name: \"NcSettingsSelectGroup\",\n components: {\n NcSelect\n },\n model: {\n prop: \"modelValue\",\n event: \"update:modelValue\"\n },\n props: {\n /**\n * The text of the label element of the select group input\n */\n label: {\n type: String,\n required: true\n },\n /**\n * Placeholder for the input element\n * For backwards compatibility it falls back to the `label` value\n */\n placeholder: {\n type: String,\n default: \"\"\n },\n /**\n * id attribute of the select group element\n */\n id: {\n type: String,\n default: () => \"action-\" + GenRandomId(),\n validator: (id) => id.trim() !== \"\"\n },\n /**\n * Removed in v9 - use `modelValue` (`v-model`) instead\n *\n * @deprecated\n */\n value: {\n type: Array,\n default: void 0\n },\n /**\n * value of the select group input\n * A list of group IDs can be provided\n */\n modelValue: {\n type: Array,\n default: () => []\n },\n /**\n * disabled state of the settings select group input\n */\n disabled: {\n type: Boolean,\n default: false\n }\n },\n emits: [\n /**\n * Removed in v9 - use `update:modelValue` (`v-model`) instead\n *\n * @deprecated\n */\n \"input\",\n /** Emitted when the groups selection changes **Payload:** `value` (`Array`) - *Ids of selected groups */\n \"update:modelValue\",\n /** Same as update:modelValue for Vue 2 compatibility */\n \"update:model-value\",\n \"error\"\n ],\n setup() {\n const model = useModelMigration(\"value\", \"input\");\n return {\n model\n };\n },\n data() {\n return {\n /** Temporary store to cache groups */\n groups: {},\n randId: GenRandomId(),\n errorMessage: \"\"\n };\n },\n computed: {\n /**\n * If the error message should be shown\n */\n hasError() {\n return this.errorMessage !== \"\";\n },\n /**\n * Validate input value and only return valid strings (group IDs)\n *\n * @return {string[]}\n */\n filteredValue() {\n return this.model.filter((group) => group !== \"\" && typeof group === \"string\");\n },\n /**\n * value property converted to an array of group objects used as input for the NcSelect\n */\n inputValue() {\n return this.filteredValue.map((id) => {\n if (typeof this.groups[id] === \"undefined\") {\n return {\n id,\n displayname: id\n };\n }\n return this.groups[id];\n });\n },\n /**\n * Convert groups object to array of groups required for NcSelect.options\n * Filter out currently selected values\n *\n * @return {object[]}\n */\n groupsArray() {\n return Object.values(this.groups).filter((g) => !this.model.includes(g.id));\n }\n },\n watch: {\n /**\n * If the value is changed, check that all groups are loaded so we show the correct display name\n */\n value: {\n handler() {\n const loadedGroupIds = Object.keys(this.groups);\n const missing = this.filteredValue.filter((group) => !loadedGroupIds.includes(group));\n missing.forEach((groupId) => {\n this.loadGroup(groupId);\n });\n },\n // Run the watch handler also when the component is initially mounted\n immediate: true\n }\n },\n /**\n * Load groups matching the empty query to reduce API calls\n */\n async mounted() {\n const storageName = `${appName}:${appVersion}/initialGroups`;\n let savedGroups = window.sessionStorage.getItem(storageName);\n if (savedGroups) {\n savedGroups = Object.fromEntries(JSON.parse(savedGroups).map((group) => [group.id, group]));\n this.groups = { ...this.groups, ...savedGroups };\n } else {\n await this.loadGroup(\"\");\n window.sessionStorage.setItem(storageName, JSON.stringify(Object.values(this.groups)));\n }\n },\n methods: {\n t,\n /**\n * Called when a new group is selected or previous group is deselected to emit the update event\n *\n * @param {object[]} updatedValue Array of selected groups\n */\n update(updatedValue) {\n const value = updatedValue.map((element) => element.id);\n this.model = value;\n },\n /**\n * Use provisioning API to search for given group and save it in the groups object\n *\n * @param {string} query The query like parts of the id oder display name\n * @return {boolean}\n */\n async loadGroup(query) {\n try {\n query = typeof query === \"string\" ? encodeURI(query) : \"\";\n const response = await axios.get(generateOcsUrl(`cloud/groups/details?search=${query}&limit=10`, 2));\n if (this.errorMessage !== \"\") {\n window.setTimeout(() => {\n this.errorMessage = \"\";\n }, 5e3);\n }\n if (Object.keys(response.data.ocs.data.groups).length > 0) {\n const newGroups = Object.fromEntries(response.data.ocs.data.groups.map((element) => [element.id, element]));\n this.groups = { ...this.groups, ...newGroups };\n return true;\n }\n } catch (error) {\n this.$emit(\"error\", error);\n this.errorMessage = t(\"Unable to search the group\");\n }\n return false;\n },\n /**\n * Custom filter function for `NcSelect` to filter by ID *and* display name\n *\n * @param {object} option One of the groups\n * @param {string} label The label property of the group\n * @param {string} search The current search string\n */\n filterGroups(option, label, search) {\n return `${label || \"\"} ${option.id}`.toLocaleLowerCase().indexOf(search.toLocaleLowerCase()) > -1;\n },\n /**\n * Debounce the group search (reduce API calls)\n */\n onSearch: debounce(function(query) {\n this.loadGroup(query);\n }, 200)\n }\n};\nvar _sfc_render = function render() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"div\", [_vm.label ? _c(\"label\", { staticClass: \"hidden-visually\", attrs: { \"for\": _vm.id } }, [_vm._v(_vm._s(_vm.label))]) : _vm._e(), _c(\"NcSelect\", { attrs: { \"value\": _vm.inputValue, \"options\": _vm.groupsArray, \"placeholder\": _vm.placeholder || _vm.label, \"filter-by\": _vm.filterGroups, \"input-id\": _vm.id, \"limit\": 5, \"label\": \"displayname\", \"multiple\": true, \"close-on-select\": false, \"disabled\": _vm.disabled }, on: { \"update:model-value\": _vm.update, \"search\": _vm.onSearch } }), _c(\"div\", { directives: [{ name: \"show\", rawName: \"v-show\", value: _vm.hasError, expression: \"hasError\" }], staticClass: \"select-group-error\" }, [_vm._v(\" \" + _vm._s(_vm.errorMessage) + \" \")])], 1);\n};\nvar _sfc_staticRenderFns = [];\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n null,\n \"9d59765b\"\n);\nconst NcSettingsSelectGroup = __component__.exports;\nexport {\n NcSettingsSelectGroup as N\n};\n//# sourceMappingURL=NcSettingsSelectGroup-BdXf7ytX.mjs.map\n","import '../assets/Tooltip-C-QZMStp.css';\nimport { options } from \"floating-vue\";\nimport { VTooltip, options as options2 } from \"floating-vue\";\noptions.themes.tooltip.html = false;\noptions.themes.tooltip.delay = { show: 500, hide: 200 };\noptions.themes.tooltip.distance = 10;\noptions.themes.tooltip[\"arrow-padding\"] = 3;\nexport {\n VTooltip as default,\n options2 as options\n};\n//# sourceMappingURL=Tooltip.mjs.map\n","import { isMobileState } from \"../Composables/useIsMobile.mjs\";\nconst index = {\n computed: {\n /**\n * @deprecated Is to be removed in v9.0.0 with Vue 3 migration.\n * Use `composables/useIsMobile` instead.\n */\n isMobile() {\n return isMobileState.value;\n }\n }\n};\nexport {\n index as default\n};\n//# sourceMappingURL=isMobile.mjs.map\n","\n\n\t
\n\n\n\n\n\n"],"names":["register","t15","t44","t","t48","t30","encodedTlds","encodedUtlds","numeric","ascii","alpha","asciinumeric","alphanumeric","domain","emoji","scheme","slashscheme","whitespace","registerGroup","name","groups","addToGroups","flags","k","group","flagsForToken","result","c","State","token","input","state","nextState","i","regex","exactOnly","inputs","next","regexp","len","templateState","allFlags","ta","tr","ts","tt","WORD","UWORD","ASCIINUMERICAL","ALPHANUMERICAL","LOCALHOST","TLD","UTLD","SCHEME","SLASH_SCHEME","NUM","WS","NL","OPENBRACE","CLOSEBRACE","OPENBRACKET","CLOSEBRACKET","OPENPAREN","CLOSEPAREN","OPENANGLEBRACKET","CLOSEANGLEBRACKET","FULLWIDTHLEFTPAREN","FULLWIDTHRIGHTPAREN","LEFTCORNERBRACKET","RIGHTCORNERBRACKET","LEFTWHITECORNERBRACKET","RIGHTWHITECORNERBRACKET","FULLWIDTHLESSTHAN","FULLWIDTHGREATERTHAN","AMPERSAND","APOSTROPHE","ASTERISK","AT","BACKSLASH","BACKTICK","CARET","COLON","COMMA","DOLLAR","DOT","EQUALS","EXCLAMATION","HYPHEN","PERCENT","PIPE","PLUS","POUND","QUERY","QUOTE","FULLWIDTHMIDDLEDOT","SEMI","SLASH","TILDE","UNDERSCORE","EMOJI$1","SYM","tk","ASCII_LETTER","LETTER","EMOJI","DIGIT","SPACE","CR","LF","EMOJI_VARIATION","EMOJI_JOINER","OBJECT_REPLACEMENT","tlds","utlds","init$2","customSchemes","Start","decodeTlds","Num","Asciinumeric","Alphanumeric","Word","UWord","Nl","Cr","Ws","Emoji","EmojiJoiner","wordjr","uwordjr","fastts","a","b","sch","run$1","start","str","iterable","stringToArray","charCount","tokens","cursor","charCursor","tokenLength","latestAccepting","sinceAccepts","charsSinceAccepts","index","first","second","char","defaultt","jr","encoded","words","stack","digits","popDigitCount","popCount","defaults","noop","Options","opts","defaultRender","o","ignoredTags","uppercaseIgnoredTags","ir","key","operator","isCallable","option","obj","val","MultiToken","value","options","truncate","formatted","protocol","href","formattedHref","tagName","content","attributes","className","target","rel","attrs","eventListeners","createTokenClass","type","props","Token","p","Email","Text","Url","makeState","arg","init$1","qsAccepting","qsNonAccepting","localpartAccepting","Localpart","Domain","Scheme","SlashScheme","LocalpartAt","LocalpartDot","EmailDomain","EmailDomainDot","Email$1","EmailDomainHyphen","EmailColon","DomainHyphen","DomainDot","DomainDotTld","DomainDotTldColon","DomainDotTldColonPort","Url$1","UrlNonaccept","SchemeColon","SlashSchemeColon","SlashSchemeColonSlash","UriPrefix","bracketPairs","OPEN","CLOSE","UrlOpen","UrlOpenQ","UrlOpenSyms","run","multis","textTokens","secondState","multiLength","initMultiToken","Multi","subtokens","startIdx","endIdx","INIT","init","tokenize","escapeText","text","escapeAttr","attributesToString","attr","linkifyStr","t14","TimeoutError","message","AbortError","getDOMException","errorMessage","getAbortedReason","signal","reason","pTimeout","promise","milliseconds","fallback","customTimers","timer","abortHandler","cancelablePromise","resolve","reject","timeoutError","error","lowerBound","array","comparator","count","step","it","PriorityQueue","#queue","element","id","priority","item","PQueue","EventEmitter","#carryoverConcurrencyCount","#isIntervalIgnored","#intervalCount","#intervalCap","#interval","#intervalEnd","#intervalId","#timeoutId","#queueClass","#pending","#concurrency","#isPaused","#throwOnTimeout","#idAssigner","#doesIntervalAllowAnother","#doesConcurrentAllowAnother","#next","#tryToStartAnother","#onResumeInterval","#onInterval","#initializeIntervalIfNeeded","#isIntervalPaused","now","delay","canInitializeInterval","job","#processQueue","newConcurrency","#throwOnAbort","_resolve","function_","operation","functions","#onEvent","limit","event","filter","listener","t27","t6","t34","e","module","this","n","r","X","J","N","R","$","se","G","Q","Z","w","D","s","u","l","h","m","d","f","v","j","g","y","_","C","E","S","x","O","P","A","M","I","F","z","L","T","q","B","H","U","V","W","K","Y","ee","te","ie","ne","re","oe","getBuilder","t5","t36","t43","Color","t40","t21","t7","t38","t42","getCapabilities","t9","predicate","list","length","thisArg","CustomEvent$1","params","evt","callback","onDestroy","registerWidget","propsWithDefaults","logger","registerCustomPickerElement","size","t23","t8","imagePath","loadState","t41","t47","t24","t31","t12","t18","asciiAlpha","regexCheck","asciiAlphanumeric","asciiControl","code2","markdownLineEndingOrSpace","unicodePunctuation","unicodeWhitespace","check","convert","test","ok","castFactory","anyFactory","propertiesFactory","typeFactory","tests","checks","any","parameters","index2","checkAsRecord","all","node","nodeAsRecord","testFunction","parent","looksLikeANode","wwwPrefix","tokenizeWwwPrefix","tokenizeDomain","path","tokenizePath","trail","tokenizeTrail","emailDomainDotTrail","tokenizeEmailDomainDotTrail","wwwAutolink","tokenizeWwwAutolink","previousWww","protocolAutolink","tokenizeProtocolAutolink","previousProtocol","emailAutolink","tokenizeEmailAutolink","previousEmail","code","effects","ok2","nok","self","dot","data","gfmAtext","previousUnbalanced","atext","emailDomain","emailDomainAfter","emailDomainDot","wwwStart","wwwAfter","buffer","seen","protocolStart","protocolPrefixInside","protocolSlashesInside","afterProtocol","protocolAfter","wwwPrefixInside","wwwPrefixAfter","underscoreInLastSegment","underscoreInLastLastSegment","domainInside","domainAfter","domainAtPunctuation","sizeOpen","sizeClose","pathInside","pathAtPunctuation","trail2","trailCharRefStart","trailBracketAfter","trailCharRefInside","after","events","ref","t33","t0","NcSelect","t50","t25","major","t51","debounce","query","isMobileState","_sfc_main","MapMarkerOutline","ImageOffOutline","NcEmptyContent","NcActions","CollectionContent","HeaderNavigation","FetchCollectionContentMixin","isMobile","getClient","generateRemoteUrl","album","publicAlbumsPrefix","publicAlbumsExtraProps","albumFilesExtraProps","file","generateUrl","fileIds","translate"],"mappings":"gpEAKAA,EAAQ,ECERA,EAASC,GAAKC,EAAG,EAsBFC,EAAE,UAAU,ECL3BH,EAASI,EAAG,EAqBGD,EAAE,UAAU,ECxC3BH,EAASK,EAAG,ECFZ,MAAMC,GAAc,qxJAEdC,GAAe,omBAgBfC,GAAU,UACVC,GAAQ,QACRC,GAAQ,QACRC,GAAe,eACfC,GAAe,eACfC,GAAS,SACTC,GAAQ,QACRC,GAAS,SACTC,GAAc,cACdC,GAAa,aAQnB,SAASC,GAAcC,EAAMC,EAAQ,CACnC,OAAMD,KAAQC,IACZA,EAAOD,CAAI,EAAI,CAAA,GAEVC,EAAOD,CAAI,CACpB,CAQA,SAASE,GAAYlB,EAAGmB,EAAOF,EAAQ,CACjCE,EAAMd,EAAO,IACfc,EAAMX,EAAY,EAAI,GACtBW,EAAMV,EAAY,EAAI,IAEpBU,EAAMb,EAAK,IACba,EAAMX,EAAY,EAAI,GACtBW,EAAMZ,EAAK,EAAI,IAEbY,EAAMX,EAAY,IACpBW,EAAMV,EAAY,EAAI,IAEpBU,EAAMZ,EAAK,IACbY,EAAMV,EAAY,EAAI,IAEpBU,EAAMV,EAAY,IACpBU,EAAMT,EAAM,EAAI,IAEdS,EAAMR,EAAK,IACbQ,EAAMT,EAAM,EAAI,IAElB,UAAWU,KAAKD,EAAO,CACrB,MAAME,EAAQN,GAAcK,EAAGH,CAAM,EACjCI,EAAM,QAAQrB,CAAC,EAAI,GACrBqB,EAAM,KAAKrB,CAAC,CAEhB,CACF,CAQA,SAASsB,GAActB,EAAGiB,EAAQ,CAChC,MAAMM,EAAS,CAAA,EACf,UAAWC,KAAKP,EACVA,EAAOO,CAAC,EAAE,QAAQxB,CAAC,GAAK,IAC1BuB,EAAOC,CAAC,EAAI,IAGhB,OAAOD,CACT,CAoBA,SAASE,EAAMC,EAAQ,KAAM,CAG3B,KAAK,EAAI,GAGT,KAAK,GAAK,CAAA,EAEV,KAAK,GAAK,KAEV,KAAK,EAAIA,CACX,CAMAD,EAAM,OAAS,CAAA,EACfA,EAAM,UAAY,CAChB,SAAU,CACR,MAAO,CAAC,CAAC,KAAK,CAChB,EAOA,GAAGE,EAAO,CACR,MAAMC,EAAQ,KACRC,EAAYD,EAAM,EAAED,CAAK,EAC/B,GAAIE,EACF,OAAOA,EAET,QAASC,EAAI,EAAGA,EAAIF,EAAM,GAAG,OAAQE,IAAK,CACxC,MAAMC,EAAQH,EAAM,GAAGE,CAAC,EAAE,CAAC,EACrBD,EAAYD,EAAM,GAAGE,CAAC,EAAE,CAAC,EAC/B,GAAID,GAAaE,EAAM,KAAKJ,CAAK,EAC/B,OAAOE,CAEX,CAEA,OAAOD,EAAM,EACf,EAQA,IAAID,EAAOK,EAAY,GAAO,CAC5B,OAAOA,EAAYL,KAAS,KAAK,EAAI,CAAC,CAAC,KAAK,GAAGA,CAAK,CACtD,EASA,GAAGM,EAAQC,EAAMf,EAAOF,EAAQ,CAC9B,QAASa,EAAI,EAAGA,EAAIG,EAAO,OAAQH,IACjC,KAAK,GAAGG,EAAOH,CAAC,EAAGI,EAAMf,EAAOF,CAAM,CAE1C,EAUA,GAAGkB,EAAQD,EAAMf,EAAOF,EAAQ,CAC9BA,EAASA,GAAUQ,EAAM,OACzB,IAAII,EACJ,OAAIK,GAAQA,EAAK,EACfL,EAAYK,GAGZL,EAAY,IAAIJ,EAAMS,CAAI,EACtBf,GAASF,GACXC,GAAYgB,EAAMf,EAAOF,CAAM,GAGnC,KAAK,GAAG,KAAK,CAACkB,EAAQN,CAAS,CAAC,EACzBA,CACT,EAWA,GAAGF,EAAOO,EAAMf,EAAOF,EAAQ,CAC7B,IAAIW,EAAQ,KACZ,MAAMQ,EAAMT,EAAM,OAClB,GAAI,CAACS,EACH,OAAOR,EAET,QAASE,EAAI,EAAGA,EAAIM,EAAM,EAAGN,IAC3BF,EAAQA,EAAM,GAAGD,EAAMG,CAAC,CAAC,EAE3B,OAAOF,EAAM,GAAGD,EAAMS,EAAM,CAAC,EAAGF,EAAMf,EAAOF,CAAM,CACrD,EA2BA,GAAGU,EAAOO,EAAMf,EAAOF,EAAQ,CAC7BA,EAASA,GAAUQ,EAAM,OACzB,MAAMG,EAAQ,KAGd,GAAIM,GAAQA,EAAK,EACf,OAAAN,EAAM,EAAED,CAAK,EAAIO,EACVA,EAET,MAAMlC,EAAIkC,EAIV,IAAIL,EACFQ,EAAgBT,EAAM,GAAGD,CAAK,EAUhC,GATIU,GACFR,EAAY,IAAIJ,EAChB,OAAO,OAAOI,EAAU,EAAGQ,EAAc,CAAC,EAC1CR,EAAU,GAAG,KAAK,MAAMA,EAAU,GAAIQ,EAAc,EAAE,EACtDR,EAAU,GAAKQ,EAAc,GAC7BR,EAAU,EAAIQ,EAAc,GAE5BR,EAAY,IAAIJ,EAEdzB,EAAG,CAEL,GAAIiB,EACF,GAAIY,EAAU,GAAK,OAAOA,EAAU,GAAM,SAAU,CAClD,MAAMS,EAAW,OAAO,OAAOhB,GAAcO,EAAU,EAAGZ,CAAM,EAAGE,CAAK,EACxED,GAAYlB,EAAGsC,EAAUrB,CAAM,CACjC,MAAWE,GACTD,GAAYlB,EAAGmB,EAAOF,CAAM,EAGhCY,EAAU,EAAI7B,CAChB,CACA,OAAA4B,EAAM,EAAED,CAAK,EAAIE,EACVA,CACT,CACF,EAWA,MAAMU,EAAK,CAACX,EAAOD,EAAOO,EAAMf,EAAOF,IAAWW,EAAM,GAAGD,EAAOO,EAAMf,EAAOF,CAAM,EAU/EuB,EAAK,CAACZ,EAAOO,EAAQD,EAAMf,EAAOF,IAAWW,EAAM,GAAGO,EAAQD,EAAMf,EAAOF,CAAM,EAUjFwB,GAAK,CAACb,EAAOD,EAAOO,EAAMf,EAAOF,IAAWW,EAAM,GAAGD,EAAOO,EAAMf,EAAOF,CAAM,EAU/EyB,EAAK,CAACd,EAAOD,EAAOO,EAAMf,EAAOF,IAAWW,EAAM,GAAGD,EAAOO,EAAMf,EAAOF,CAAM,EAQ/E0B,EAAO,OACPC,GAAQ,QACRC,GAAiB,iBACjBC,GAAiB,iBAGjBC,GAAY,YAGZC,GAAM,MAGNC,GAAO,OAKPC,GAAS,SAKTC,GAAe,eAGfC,GAAM,MAGNC,GAAK,KAGLC,GAAK,KAKLC,GAAY,YACZC,GAAa,aACbC,GAAc,cACdC,GAAe,eACfC,GAAY,YACZC,GAAa,aACbC,GAAmB,mBACnBC,GAAoB,oBACpBC,GAAqB,qBACrBC,GAAsB,sBACtBC,GAAoB,oBACpBC,GAAqB,qBACrBC,GAAyB,yBACzBC,GAA0B,0BAC1BC,GAAoB,oBACpBC,GAAuB,uBAGvBC,GAAY,YACZC,GAAa,aACbC,GAAW,WACXC,EAAK,KACLC,GAAY,YACZC,GAAW,WACXC,GAAQ,QACRC,GAAQ,QACRC,GAAQ,QACRC,GAAS,SACTC,EAAM,MACNC,GAAS,SACTC,GAAc,cACdC,EAAS,SACTC,GAAU,UACVC,GAAO,OACPC,GAAO,OACPC,GAAQ,QACRC,GAAQ,QACRC,GAAQ,QACRC,GAAqB,qBAErBC,GAAO,OACPC,EAAQ,QACRC,GAAQ,QACRC,GAAa,aAGbC,GAAU,QAGVC,GAAM,MAEZ,IAAIC,GAAkB,OAAO,OAAO,CACnC,UAAW,KACX,eAAgBpD,GAChB,UAAWyB,GACX,WAAYC,GACZ,eAAgB3B,GAChB,SAAU4B,GACV,GAAIC,EACJ,UAAWC,GACX,SAAUC,GACV,MAAOC,GACP,kBAAmBf,GACnB,WAAYN,GACZ,aAAcE,GACd,WAAYE,GACZ,MAAOkB,GACP,MAAOC,GACP,OAAQC,GACR,IAAKC,EACL,MAAOe,GACP,OAAQd,GACR,YAAaC,GACb,qBAAsBb,GACtB,mBAAoBP,GACpB,kBAAmBM,GACnB,mBAAoBsB,GACpB,oBAAqB3B,GACrB,OAAQoB,EACR,kBAAmBnB,GACnB,uBAAwBE,GACxB,UAAWpB,GACX,GAAIO,GACJ,IAAKF,GACL,iBAAkBS,GAClB,UAAWN,GACX,YAAaE,GACb,UAAWE,GACX,QAAS0B,GACT,KAAMC,GACN,KAAMC,GACN,MAAOC,GACP,MAAOC,GACP,MAAOC,GACP,mBAAoBxB,GACpB,wBAAyBE,GACzB,OAAQlB,GACR,KAAM0C,GACN,MAAOC,EACP,aAAc1C,GACd,IAAK8C,GACL,MAAOH,GACP,IAAK9C,GACL,WAAY+C,GACZ,KAAM9C,GACN,MAAOL,GACP,KAAMD,EACN,GAAIU,EACL,CAAC,EAGD,MAAM8C,EAAe,QACfC,GAAS,WAAA,SAAA,GAAA,EACTC,GAAQ,WAAA,aAAA,GAAA,EAERC,EAAQ,KACRC,GAAQ,KAiBRC,GAAK,KACLC,GAAK;AAAA,EACLC,GAAkB,IAClBC,GAAe,IACfC,GAAqB,IAE3B,IAAIC,GAAO,KACTC,GAAQ,KAuBV,SAASC,GAAOC,EAAgB,GAAI,CAGlC,MAAM/F,EAAS,CAAA,EACfQ,EAAM,OAASR,EAEf,MAAMgG,EAAQ,IAAIxF,EACdoF,IAAQ,OACVA,GAAOK,GAAW/G,EAAW,GAE3B2G,IAAS,OACXA,GAAQI,GAAW9G,EAAY,GAIjCsC,EAAGuE,EAAO,IAAKzC,EAAU,EACzB9B,EAAGuE,EAAO,IAAK1D,EAAS,EACxBb,EAAGuE,EAAO,IAAKzD,EAAU,EACzBd,EAAGuE,EAAO,IAAKxD,EAAW,EAC1Bf,EAAGuE,EAAO,IAAKvD,EAAY,EAC3BhB,EAAGuE,EAAO,IAAKtD,EAAS,EACxBjB,EAAGuE,EAAO,IAAKrD,EAAU,EACzBlB,EAAGuE,EAAO,IAAKpD,EAAgB,EAC/BnB,EAAGuE,EAAO,IAAKnD,EAAiB,EAChCpB,EAAGuE,EAAO,IAAKlD,EAAkB,EACjCrB,EAAGuE,EAAO,IAAKjD,EAAmB,EAClCtB,EAAGuE,EAAO,IAAKhD,EAAiB,EAChCvB,EAAGuE,EAAO,IAAK/C,EAAkB,EACjCxB,EAAGuE,EAAO,IAAK9C,EAAsB,EACrCzB,EAAGuE,EAAO,IAAK7C,EAAuB,EACtC1B,EAAGuE,EAAO,IAAK5C,EAAiB,EAChC3B,EAAGuE,EAAO,IAAK3C,EAAoB,EACnC5B,EAAGuE,EAAO,IAAK1C,EAAS,EACxB7B,EAAGuE,EAAO,IAAKxC,EAAQ,EACvB/B,EAAGuE,EAAO,IAAKvC,CAAE,EACjBhC,EAAGuE,EAAO,IAAKrC,EAAQ,EACvBlC,EAAGuE,EAAO,IAAKpC,EAAK,EACpBnC,EAAGuE,EAAO,IAAKnC,EAAK,EACpBpC,EAAGuE,EAAO,IAAKlC,EAAK,EACpBrC,EAAGuE,EAAO,IAAKjC,EAAM,EACrBtC,EAAGuE,EAAO,IAAKhC,CAAG,EAClBvC,EAAGuE,EAAO,IAAK/B,EAAM,EACrBxC,EAAGuE,EAAO,IAAK9B,EAAW,EAC1BzC,EAAGuE,EAAO,IAAK7B,CAAM,EACrB1C,EAAGuE,EAAO,IAAK5B,EAAO,EACtB3C,EAAGuE,EAAO,IAAK3B,EAAI,EACnB5C,EAAGuE,EAAO,IAAK1B,EAAI,EACnB7C,EAAGuE,EAAO,IAAKzB,EAAK,EACpB9C,EAAGuE,EAAO,IAAKxB,EAAK,EACpB/C,EAAGuE,EAAO,IAAKvB,EAAK,EACpBhD,EAAGuE,EAAO,IAAKpB,CAAK,EACpBnD,EAAGuE,EAAO,IAAKrB,EAAI,EACnBlD,EAAGuE,EAAO,IAAKnB,EAAK,EACpBpD,EAAGuE,EAAO,IAAKlB,EAAU,EACzBrD,EAAGuE,EAAO,KAAMtC,EAAS,EACzBjC,EAAGuE,EAAO,IAAKtB,EAAkB,EACjC,MAAMwB,EAAM3E,EAAGyE,EAAOX,EAAOlD,GAAK,CAChC,CAAC/C,EAAO,EAAG,EACf,CAAG,EACDmC,EAAG2E,EAAKb,EAAOa,CAAG,EAClB,MAAMC,EAAe5E,EAAG2E,EAAKhB,EAActD,GAAgB,CACzD,CAACrC,EAAY,EAAG,EACpB,CAAG,EACK6G,EAAe7E,EAAG2E,EAAKf,GAAQtD,GAAgB,CACnD,CAACrC,EAAY,EAAG,EACpB,CAAG,EAGK6G,EAAO9E,EAAGyE,EAAOd,EAAcxD,EAAM,CACzC,CAACrC,EAAK,EAAG,EACb,CAAG,EACDkC,EAAG8E,EAAMhB,EAAOc,CAAY,EAC5B5E,EAAG8E,EAAMnB,EAAcmB,CAAI,EAC3B9E,EAAG4E,EAAcd,EAAOc,CAAY,EACpC5E,EAAG4E,EAAcjB,EAAciB,CAAY,EAG3C,MAAMG,EAAQ/E,EAAGyE,EAAOb,GAAQxD,GAAO,CACrC,CAACrC,EAAK,EAAG,EACb,CAAG,EACDiC,EAAG+E,EAAOpB,CAAY,EACtB3D,EAAG+E,EAAOjB,EAAOe,CAAY,EAC7B7E,EAAG+E,EAAOnB,GAAQmB,CAAK,EACvB/E,EAAG6E,EAAcf,EAAOe,CAAY,EACpC7E,EAAG6E,EAAclB,CAAY,EAC7B3D,EAAG6E,EAAcjB,GAAQiB,CAAY,EAKrC,MAAMG,EAAK9E,EAAGuE,EAAOR,GAAInD,GAAI,CAC3B,CAACxC,EAAU,EAAG,EAClB,CAAG,EACK2G,EAAK/E,EAAGuE,EAAOT,GAAInD,GAAI,CAC3B,CAACvC,EAAU,EAAG,EAClB,CAAG,EACK4G,EAAKlF,EAAGyE,EAAOV,GAAOlD,GAAI,CAC9B,CAACvC,EAAU,EAAG,EAClB,CAAG,EACD4B,EAAGuE,EAAOL,GAAoBc,CAAE,EAChChF,EAAG+E,EAAIhB,GAAIe,CAAE,EACb9E,EAAG+E,EAAIb,GAAoBc,CAAE,EAC7BlF,EAAGiF,EAAIlB,GAAOmB,CAAE,EAChBhF,EAAGgF,EAAIlB,EAAE,EACT9D,EAAGgF,EAAIjB,EAAE,EACTjE,EAAGkF,EAAInB,GAAOmB,CAAE,EAChBhF,EAAGgF,EAAId,GAAoBc,CAAE,EAI7B,MAAMC,EAAQnF,EAAGyE,EAAOZ,GAAOL,GAAS,CACtC,CAACrF,EAAK,EAAG,EACb,CAAG,EACD+B,EAAGiF,EAAO,GAAG,EACbnF,EAAGmF,EAAOtB,GAAOsB,CAAK,EACtBjF,EAAGiF,EAAOjB,GAAiBiB,CAAK,EAGhC,MAAMC,EAAclF,EAAGiF,EAAOhB,EAAY,EAC1CjE,EAAGkF,EAAa,GAAG,EACnBpF,EAAGoF,EAAavB,GAAOsB,CAAK,EAK5B,MAAME,EAAS,CAAC,CAAC1B,EAAcmB,CAAI,EAAG,CAAChB,EAAOc,CAAY,CAAC,EACrDU,EAAU,CAAC,CAAC3B,EAAc,IAAI,EAAG,CAACC,GAAQmB,CAAK,EAAG,CAACjB,EAAOe,CAAY,CAAC,EAC7E,QAASvF,EAAI,EAAGA,EAAI+E,GAAK,OAAQ/E,IAC/BiG,EAAOd,EAAOJ,GAAK/E,CAAC,EAAGkB,GAAKL,EAAMkF,CAAM,EAE1C,QAAS/F,EAAI,EAAGA,EAAIgF,GAAM,OAAQhF,IAChCiG,EAAOd,EAAOH,GAAMhF,CAAC,EAAGmB,GAAML,GAAOkF,CAAO,EAE9C5G,GAAY8B,GAAK,CACf,IAAK,GACL,MAAO,EACX,EAAK/B,CAAM,EACTC,GAAY+B,GAAM,CAChB,KAAM,GACN,MAAO,EACX,EAAKhC,CAAM,EAKT8G,EAAOd,EAAO,OAAQ/D,GAAQP,EAAMkF,CAAM,EAC1CE,EAAOd,EAAO,SAAU/D,GAAQP,EAAMkF,CAAM,EAC5CE,EAAOd,EAAO,OAAQ9D,GAAcR,EAAMkF,CAAM,EAChDE,EAAOd,EAAO,QAAS9D,GAAcR,EAAMkF,CAAM,EACjDE,EAAOd,EAAO,MAAO9D,GAAcR,EAAMkF,CAAM,EAC/CE,EAAOd,EAAO,OAAQ9D,GAAcR,EAAMkF,CAAM,EAChD3G,GAAYgC,GAAQ,CAClB,OAAQ,GACR,MAAO,EACX,EAAKjC,CAAM,EACTC,GAAYiC,GAAc,CACxB,YAAa,GACb,MAAO,EACX,EAAKlC,CAAM,EAGT+F,EAAgBA,EAAc,KAAK,CAACgB,EAAGC,IAAMD,EAAE,CAAC,EAAIC,EAAE,CAAC,EAAI,EAAI,EAAE,EACjE,QAASnG,EAAI,EAAGA,EAAIkF,EAAc,OAAQlF,IAAK,CAC7C,MAAMoG,EAAMlB,EAAclF,CAAC,EAAE,CAAC,EAExBX,EADqB6F,EAAclF,CAAC,EAAE,CAAC,EACV,CACjC,CAAClB,EAAM,EAAG,EAChB,EAAQ,CACF,CAACC,EAAW,EAAG,EACrB,EACQqH,EAAI,QAAQ,GAAG,GAAK,EACtB/G,EAAMT,EAAM,EAAI,GACNyF,EAAa,KAAK+B,CAAG,EAEtB5B,EAAM,KAAK4B,CAAG,EACvB/G,EAAMX,EAAY,EAAI,GAEtBW,EAAMb,EAAK,EAAI,GAJfa,EAAMd,EAAO,EAAI,GAMnBoC,GAAGwE,EAAOiB,EAAKA,EAAK/G,CAAK,CAC3B,CAGA,OAAAsB,GAAGwE,EAAO,YAAalE,GAAW,CAChC,MAAO,EACX,CAAG,EAGDkE,EAAM,GAAK,IAAIxF,EAAMwE,EAAG,EACjB,CACL,MAAOgB,EACP,OAAQ,OAAO,OAAO,CACpB,OAAAhG,CACN,EAAOiF,EAAE,CACT,CACA,CAWA,SAASiC,GAAMC,EAAOC,EAAK,CAKzB,MAAMC,EAAWC,GAAcF,EAAI,QAAQ,SAAU7G,GAAKA,EAAE,YAAW,CAAE,CAAC,EACpEgH,EAAYF,EAAS,OACrBG,EAAS,CAAA,EAIf,IAAIC,EAAS,EAGTC,EAAa,EAGjB,KAAOA,EAAaH,GAAW,CAC7B,IAAI5G,EAAQwG,EACRvG,EAAY,KACZ+G,EAAc,EACdC,EAAkB,KAClBC,EAAe,GACfC,EAAoB,GACxB,KAAOJ,EAAaH,IAAc3G,EAAYD,EAAM,GAAG0G,EAASK,CAAU,CAAC,IACzE/G,EAAQC,EAGJD,EAAM,WACRkH,EAAe,EACfC,EAAoB,EACpBF,EAAkBjH,GACTkH,GAAgB,IACzBA,GAAgBR,EAASK,CAAU,EAAE,OACrCI,KAEFH,GAAeN,EAASK,CAAU,EAAE,OACpCD,GAAUJ,EAASK,CAAU,EAAE,OAC/BA,IAIFD,GAAUI,EACVH,GAAcI,EACdH,GAAeE,EAGfL,EAAO,KAAK,CACV,EAAGI,EAAgB,EAEnB,EAAGR,EAAI,MAAMK,EAASE,EAAaF,CAAM,EAEzC,EAAGA,EAASE,EAEZ,EAAGF,CACT,CAAK,CACH,CACA,OAAOD,CACT,CAaA,SAASF,GAAcF,EAAK,CAC1B,MAAM9G,EAAS,CAAA,EACTa,EAAMiG,EAAI,OAChB,IAAIW,EAAQ,EACZ,KAAOA,EAAQ5G,GAAK,CAClB,IAAI6G,EAAQZ,EAAI,WAAWW,CAAK,EAC5BE,EACAC,EAAOF,EAAQ,OAAUA,EAAQ,OAAUD,EAAQ,IAAM5G,IAAQ8G,EAASb,EAAI,WAAWW,EAAQ,CAAC,GAAK,OAAUE,EAAS,MAASb,EAAIW,CAAK,EAC9IX,EAAI,MAAMW,EAAOA,EAAQ,CAAC,EAC5BzH,EAAO,KAAK4H,CAAI,EAChBH,GAASG,EAAK,MAChB,CACA,OAAO5H,CACT,CAWA,SAASwG,EAAOnG,EAAOD,EAAO3B,EAAGoJ,EAAUC,EAAI,CAC7C,IAAInH,EACJ,MAAME,EAAMT,EAAM,OAClB,QAASG,EAAI,EAAGA,EAAIM,EAAM,EAAGN,IAAK,CAChC,MAAMqH,EAAOxH,EAAMG,CAAC,EAChBF,EAAM,EAAEuH,CAAI,EACdjH,EAAON,EAAM,EAAEuH,CAAI,GAEnBjH,EAAO,IAAIT,EAAM2H,CAAQ,EACzBlH,EAAK,GAAKmH,EAAG,MAAK,EAClBzH,EAAM,EAAEuH,CAAI,EAAIjH,GAElBN,EAAQM,CACV,CACA,OAAAA,EAAO,IAAIT,EAAMzB,CAAC,EAClBkC,EAAK,GAAKmH,EAAG,MAAK,EAClBzH,EAAM,EAAED,EAAMS,EAAM,CAAC,CAAC,EAAIF,EACnBA,CACT,CAQA,SAASgF,GAAWoC,EAAS,CAC3B,MAAMC,EAAQ,CAAA,EACRC,EAAQ,CAAA,EACd,IAAI1H,EAAI,EACJ2H,EAAS,aACb,KAAO3H,EAAIwH,EAAQ,QAAQ,CACzB,IAAII,EAAgB,EACpB,KAAOD,EAAO,QAAQH,EAAQxH,EAAI4H,CAAa,CAAC,GAAK,GACnDA,IAEF,GAAIA,EAAgB,EAAG,CACrBH,EAAM,KAAKC,EAAM,KAAK,EAAE,CAAC,EACzB,QAASG,EAAW,SAASL,EAAQ,UAAUxH,EAAGA,EAAI4H,CAAa,EAAG,EAAE,EAAGC,EAAW,EAAGA,IACvFH,EAAM,IAAG,EAEX1H,GAAK4H,CACP,MACEF,EAAM,KAAKF,EAAQxH,CAAC,CAAC,EACrBA,GAEJ,CACA,OAAOyH,CACT,CAmFA,MAAMK,GAAW,CACf,gBAAiB,OACjB,OAAQ,KACR,OAAQC,GACR,WAAYA,GACZ,MAAO,GACP,QAAS,IACT,OAAQ,KACR,IAAK,KACL,SAAU,GACV,SAAU,IACV,UAAW,KACX,WAAY,KACZ,WAAY,CAAA,EACZ,OAAQ,IACV,EAYA,SAASC,GAAQC,EAAMC,EAAgB,KAAM,CAC3C,IAAIC,EAAI,OAAO,OAAO,CAAA,EAAIL,EAAQ,EAC9BG,IACFE,EAAI,OAAO,OAAOA,EAAGF,aAAgBD,GAAUC,EAAK,EAAIA,CAAI,GAI9D,MAAMG,EAAcD,EAAE,WAChBE,EAAuB,CAAA,EAC7B,QAASrI,EAAI,EAAGA,EAAIoI,EAAY,OAAQpI,IACtCqI,EAAqB,KAAKD,EAAYpI,CAAC,EAAE,YAAW,CAAE,EAGxD,KAAK,EAAImI,EACLD,IACF,KAAK,cAAgBA,GAEvB,KAAK,WAAaG,CACpB,CACAL,GAAQ,UAAY,CAClB,EAAGF,GAIH,WAAY,CAAA,EAKZ,cAAcQ,EAAI,CAChB,OAAOA,CACT,EAOA,MAAM1I,EAAO,CACX,OAAO,KAAK,IAAI,WAAYA,EAAM,SAAQ,EAAIA,CAAK,CACrD,EAcA,IAAI2I,EAAKC,EAAU5I,EAAO,CACxB,MAAM6I,EAAaD,GAAY,KAC/B,IAAIE,EAAS,KAAK,EAAEH,CAAG,EACvB,OAAKG,IAGD,OAAOA,GAAW,UACpBA,EAAS9I,EAAM,KAAK8I,EAASA,EAAO9I,EAAM,CAAC,EAAIkI,GAASS,CAAG,EACvD,OAAOG,GAAW,YAAcD,IAClCC,EAASA,EAAOF,EAAU5I,CAAK,IAExB,OAAO8I,GAAW,YAAcD,IACzCC,EAASA,EAAOF,EAAU5I,EAAM,EAAGA,CAAK,GAEnC8I,EACT,EAQA,OAAOH,EAAKC,EAAU5I,EAAO,CAC3B,IAAI+I,EAAM,KAAK,EAAEJ,CAAG,EACpB,OAAI,OAAOI,GAAQ,YAAcH,GAAY,OAC3CG,EAAMA,EAAIH,EAAU5I,EAAM,EAAGA,CAAK,GAE7B+I,CACT,EAQA,OAAO/I,EAAO,CACZ,MAAM0I,EAAK1I,EAAM,OAAO,IAAI,EAE5B,OADiB,KAAK,IAAI,SAAU,KAAMA,CAAK,GAAK,KAAK,eACzC0I,EAAI1I,EAAM,EAAGA,CAAK,CACpC,CACF,EACA,SAASmI,GAAKa,EAAK,CACjB,OAAOA,CACT,CAiBA,SAASC,GAAWC,EAAOnC,EAAQ,CACjC,KAAK,EAAI,QACT,KAAK,EAAImC,EACT,KAAK,GAAKnC,CACZ,CAeAkC,GAAW,UAAY,CACrB,OAAQ,GAKR,UAAW,CACT,OAAO,KAAK,CACd,EAOA,OAAO/J,EAAQ,CACb,OAAO,KAAK,SAAQ,CACtB,EAKA,kBAAkBiK,EAAS,CACzB,MAAMH,EAAM,KAAK,SAAQ,EACnBI,EAAWD,EAAQ,IAAI,WAAYH,EAAK,IAAI,EAC5CK,EAAYF,EAAQ,IAAI,SAAUH,EAAK,IAAI,EACjD,OAAOI,GAAYC,EAAU,OAASD,EAAWC,EAAU,UAAU,EAAGD,CAAQ,EAAI,IAAMC,CAC5F,EAMA,gBAAgBF,EAAS,CACvB,OAAOA,EAAQ,IAAI,aAAc,KAAK,OAAOA,EAAQ,IAAI,iBAAiB,CAAC,EAAG,IAAI,CACpF,EAKA,YAAa,CACX,OAAO,KAAK,GAAG,CAAC,EAAE,CACpB,EAMA,UAAW,CACT,OAAO,KAAK,GAAG,KAAK,GAAG,OAAS,CAAC,EAAE,CACrC,EAUA,SAASG,EAAWpB,GAAS,gBAAiB,CAC5C,MAAO,CACL,KAAM,KAAK,EACX,MAAO,KAAK,SAAQ,EACpB,OAAQ,KAAK,OACb,KAAM,KAAK,OAAOoB,CAAQ,EAC1B,MAAO,KAAK,WAAU,EACtB,IAAK,KAAK,SAAQ,CACxB,CACE,EAKA,kBAAkBH,EAAS,CACzB,MAAO,CACL,KAAM,KAAK,EACX,MAAO,KAAK,kBAAkBA,CAAO,EACrC,OAAQ,KAAK,OACb,KAAM,KAAK,gBAAgBA,CAAO,EAClC,MAAO,KAAK,WAAU,EACtB,IAAK,KAAK,SAAQ,CACxB,CACE,EAMA,SAASA,EAAS,CAChB,OAAOA,EAAQ,IAAI,WAAY,KAAK,SAAQ,EAAI,IAAI,CACtD,EAKA,OAAOA,EAAS,CACd,MAAMnJ,EAAQ,KACRuJ,EAAO,KAAK,OAAOJ,EAAQ,IAAI,iBAAiB,CAAC,EACjDK,EAAgBL,EAAQ,IAAI,aAAcI,EAAM,IAAI,EACpDE,EAAUN,EAAQ,IAAI,UAAWI,EAAMvJ,CAAK,EAC5C0J,EAAU,KAAK,kBAAkBP,CAAO,EACxCQ,EAAa,CAAA,EACbC,EAAYT,EAAQ,IAAI,YAAaI,EAAMvJ,CAAK,EAChD6J,EAASV,EAAQ,IAAI,SAAUI,EAAMvJ,CAAK,EAC1C8J,EAAMX,EAAQ,IAAI,MAAOI,EAAMvJ,CAAK,EACpC+J,EAAQZ,EAAQ,OAAO,aAAcI,EAAMvJ,CAAK,EAChDgK,EAAiBb,EAAQ,OAAO,SAAUI,EAAMvJ,CAAK,EAC3D,OAAA2J,EAAW,KAAOH,EACdI,IACFD,EAAW,MAAQC,GAEjBC,IACFF,EAAW,OAASE,GAElBC,IACFH,EAAW,IAAMG,GAEfC,GACF,OAAO,OAAOJ,EAAYI,CAAK,EAE1B,CACL,QAAAN,EACA,WAAAE,EACA,QAAAD,EACA,eAAAM,CACN,CACE,CACF,EAQA,SAASC,GAAiBC,EAAMC,EAAO,CACrC,MAAMC,UAAcnB,EAAW,CAC7B,YAAYC,EAAOnC,EAAQ,CACzB,MAAMmC,EAAOnC,CAAM,EACnB,KAAK,EAAImD,CACX,CACJ,CACE,UAAWG,KAAKF,EACdC,EAAM,UAAUC,CAAC,EAAIF,EAAME,CAAC,EAE9B,OAAAD,EAAM,EAAIF,EACHE,CACT,CAKA,MAAME,GAAQL,GAAiB,QAAS,CACtC,OAAQ,GACR,QAAS,CACP,MAAO,UAAY,KAAK,SAAQ,CAClC,CACF,CAAC,EAKKM,GAAON,GAAiB,MAAM,EAM9BnE,GAAKmE,GAAiB,IAAI,EAM1BO,GAAMP,GAAiB,MAAO,CAClC,OAAQ,GAQR,OAAO/K,EAASgJ,GAAS,gBAAiB,CAExC,OAAO,KAAK,cAAgB,KAAK,EAAI,GAAGhJ,CAAM,MAAM,KAAK,CAAC,EAC5D,EAKA,aAAc,CACZ,MAAM6H,EAAS,KAAK,GACpB,OAAOA,EAAO,QAAU,GAAKA,EAAO,CAAC,EAAE,IAAM1F,IAAa0F,EAAO,CAAC,EAAE,IAAM3D,EAC5E,CACF,CAAC,EA4BKqH,EAAYC,GAAO,IAAI3K,EAAM2K,CAAG,EAMtC,SAASC,GAAO,CACd,OAAApL,CACF,EAAG,CAED,MAAMqL,EAAcrL,EAAO,OAAO,OAAO,CAACsD,GAAWE,GAAUC,EAAIC,GAAWC,GAAUC,GAAOG,GAAQE,GAAQE,EAAQhC,GAAKiC,GAASC,GAAMC,GAAMC,GAAOK,EAAOI,GAAKH,GAAOC,EAAU,CAAC,EAKhLwG,EAAiB,CAAC/H,GAAYM,GAAOC,GAAOE,EAAKE,GAAaE,GAASI,GAAOC,GAAOE,GAAM/B,GAAkBC,GAAmBP,GAAWC,GAAYE,GAAcD,GAAaE,GAAWC,GAAYG,GAAoBC,GAAqBC,GAAmBC,GAAoBC,GAAwBC,GAAyBC,GAAmBC,EAAoB,EAIjXkI,EAAqB,CAACjI,GAAWC,GAAYC,GAAUE,GAAWC,GAAUC,GAAOG,GAAQE,GAAQE,EAAQ7B,GAAWC,GAAY6B,GAASC,GAAMC,GAAMC,GAAOC,GAAOI,EAAOI,GAAKH,GAAOC,EAAU,EAMlMkB,EAAQkF,EAAS,EACjBM,EAAY/J,EAAGuE,EAAOnB,EAAK,EACjCvD,EAAGkK,EAAWD,EAAoBC,CAAS,EAC3ClK,EAAGkK,EAAWxL,EAAO,OAAQwL,CAAS,EACtC,MAAMC,EAASP,EAAS,EACtBQ,EAASR,EAAS,EAClBS,EAAcT,EAAS,EACzB5J,EAAG0E,EAAOhG,EAAO,OAAQyL,CAAM,EAC/BnK,EAAG0E,EAAOhG,EAAO,OAAQ0L,CAAM,EAC/BpK,EAAG0E,EAAOhG,EAAO,YAAa2L,CAAW,EAEzCrK,EAAGmK,EAAQF,EAAoBC,CAAS,EACxClK,EAAGmK,EAAQzL,EAAO,OAAQyL,CAAM,EAChC,MAAMG,EAAcnK,EAAGgK,EAAQhI,CAAE,EAEjChC,EAAG+J,EAAW/H,EAAImI,CAAW,EAG7BnK,EAAGiK,EAAQjI,EAAImI,CAAW,EAC1BnK,EAAGkK,EAAalI,EAAImI,CAAW,EAC/B,MAAMC,EAAepK,EAAG+J,EAAWxH,CAAG,EACtC1C,EAAGuK,EAAcN,EAAoBC,CAAS,EAC9ClK,EAAGuK,EAAc7L,EAAO,OAAQwL,CAAS,EACzC,MAAMM,EAAcZ,EAAS,EAC7B5J,EAAGsK,EAAa5L,EAAO,OAAQ8L,CAAW,EAC1CxK,EAAGwK,EAAa9L,EAAO,OAAQ8L,CAAW,EAC1C,MAAMC,EAAiBtK,EAAGqK,EAAa9H,CAAG,EAC1C1C,EAAGyK,EAAgB/L,EAAO,OAAQ8L,CAAW,EAC7C,MAAME,EAAUd,EAAUH,EAAK,EAC/BzJ,EAAGyK,EAAgB/L,EAAO,IAAKgM,CAAO,EACtC1K,EAAGyK,EAAgB/L,EAAO,KAAMgM,CAAO,EACvCvK,EAAGmK,EAAa9J,GAAWkK,CAAO,EAGlC,MAAMC,EAAoBxK,EAAGqK,EAAa3H,CAAM,EAChD1C,EAAGwK,EAAmB9H,EAAQ8H,CAAiB,EAC/C3K,EAAG2K,EAAmBjM,EAAO,OAAQ8L,CAAW,EAChDxK,EAAG0K,EAAShM,EAAO,OAAQ8L,CAAW,EACtCrK,EAAGuK,EAAShI,EAAK+H,CAAc,EAC/BtK,EAAGuK,EAAS7H,EAAQ8H,CAAiB,EAGrC,MAAMC,EAAazK,EAAGuK,EAASnI,EAAK,EAEpCvC,EAAG4K,EAAYlM,EAAO,QAAS+K,EAAK,EAIpC,MAAMoB,EAAe1K,EAAGgK,EAAQtH,CAAM,EAChCiI,EAAY3K,EAAGgK,EAAQzH,CAAG,EAChCvC,EAAG0K,EAAchI,EAAQgI,CAAY,EACrC7K,EAAG6K,EAAcnM,EAAO,OAAQyL,CAAM,EACtCnK,EAAG8K,EAAWb,EAAoBC,CAAS,EAC3ClK,EAAG8K,EAAWpM,EAAO,OAAQyL,CAAM,EACnC,MAAMY,EAAenB,EAAUD,EAAG,EAClC3J,EAAG8K,EAAWpM,EAAO,IAAKqM,CAAY,EACtC/K,EAAG8K,EAAWpM,EAAO,KAAMqM,CAAY,EACvC/K,EAAG+K,EAAcrM,EAAO,OAAQyL,CAAM,EACtCnK,EAAG+K,EAAcd,EAAoBC,CAAS,EAC9C/J,EAAG4K,EAAcrI,EAAKoI,CAAS,EAC/B3K,EAAG4K,EAAclI,EAAQgI,CAAY,EACrC1K,EAAG4K,EAAc5I,EAAImI,CAAW,EAChC,MAAMU,GAAoB7K,EAAG4K,EAAcxI,EAAK,EAC1C0I,GAAwBrB,EAAUD,EAAG,EAC3C3J,EAAGgL,GAAmBtM,EAAO,QAASuM,EAAqB,EAG3D,MAAMC,EAAQtB,EAAUD,EAAG,EAGrBwB,EAAevB,IAGrB5J,EAAGkL,EAAOnB,EAAamB,CAAK,EAC5BlL,EAAGkL,EAAOlB,EAAgBmB,CAAY,EACtCnL,EAAGmL,EAAcpB,EAAamB,CAAK,EACnClL,EAAGmL,EAAcnB,EAAgBmB,CAAY,EAI7ChL,EAAG4K,EAAczH,EAAO4H,CAAK,EAC7B/K,EAAG8K,GAAuB3H,EAAO4H,CAAK,EAGtC,MAAME,GAAcjL,EAAGiK,EAAQ7H,EAAK,EAC9B8I,GAAmBlL,EAAGkK,EAAa9H,EAAK,EACxC+I,GAAwBnL,EAAGkL,GAAkB/H,CAAK,EAElDiI,EAAYpL,EAAGmL,GAAuBhI,CAAK,EAGjDtD,EAAGoK,EAAQ1L,EAAO,OAAQyL,CAAM,EAChChK,EAAGiK,EAAQ1H,EAAKoI,CAAS,EACzB3K,EAAGiK,EAAQvH,EAAQgI,CAAY,EAC/B7K,EAAGqK,EAAa3L,EAAO,OAAQyL,CAAM,EACrChK,EAAGkK,EAAa3H,EAAKoI,CAAS,EAC9B3K,EAAGkK,EAAaxH,EAAQgI,CAAY,EAGpC7K,EAAGoL,GAAa1M,EAAO,OAAQwM,CAAK,EACpC/K,EAAGiL,GAAa9H,EAAO4H,CAAK,EAC5B/K,EAAGiL,GAAalI,GAAOgI,CAAK,EAC5BlL,EAAGuL,EAAW7M,EAAO,OAAQwM,CAAK,EAClClL,EAAGuL,EAAWxB,EAAamB,CAAK,EAChC/K,EAAGoL,EAAWjI,EAAO4H,CAAK,EAC1B,MAAMM,GAAe,CAAC,CAACxK,GAAWC,EAAU,EAE5C,CAACC,GAAaC,EAAY,EAE1B,CAACC,GAAWC,EAAU,EAEtB,CAACC,GAAkBC,EAAiB,EAEpC,CAACC,GAAoBC,EAAmB,EAExC,CAACC,GAAmBC,EAAkB,EAEtC,CAACC,GAAwBC,EAAuB,EAEhD,CAACC,GAAmBC,EAAoB,CAC1C,EACE,QAASxC,GAAI,EAAGA,GAAIiM,GAAa,OAAQjM,KAAK,CAC5C,KAAM,CAACkM,GAAMC,EAAK,EAAIF,GAAajM,EAAC,EAC9BoM,GAAUxL,EAAG+K,EAAOO,EAAI,EAG9BtL,EAAGgL,EAAcM,GAAME,EAAO,EAG9BxL,EAAGwL,GAASD,GAAOR,CAAK,EAKxB,MAAMU,EAAWhC,EAAUD,EAAG,EAC9B3J,EAAG2L,GAAS5B,EAAa6B,CAAQ,EACjC,MAAMC,GAAcjC,IACpB5J,EAAG2L,GAAS3B,CAAc,EAG1BhK,EAAG4L,EAAU7B,EAAa6B,CAAQ,EAClC5L,EAAG4L,EAAU5B,EAAgB6B,EAAW,EACxC7L,EAAG6L,GAAa9B,EAAa6B,CAAQ,EACrC5L,EAAG6L,GAAa7B,EAAgB6B,EAAW,EAG3C1L,EAAGyL,EAAUF,GAAOR,CAAK,EACzB/K,EAAG0L,GAAaH,GAAOR,CAAK,CAC9B,CACA,OAAA/K,EAAGuE,EAAOlE,GAAWuK,CAAY,EACjC5K,EAAGuE,EAAO3D,GAAIkE,EAAE,EAET,CACL,MAAOP,EACP,OAAQf,EACZ,CACA,CAYA,SAASmI,GAAIjG,EAAOzG,EAAO8G,EAAQ,CACjC,IAAIrG,EAAMqG,EAAO,OACbC,EAAS,EACT4F,EAAS,CAAA,EACTC,EAAa,CAAA,EACjB,KAAO7F,EAAStG,GAAK,CACnB,IAAIR,EAAQwG,EACRoG,EAAc,KACd3M,EAAY,KACZ4M,EAAc,EACd5F,EAAkB,KAClBC,EAAe,GACnB,KAAOJ,EAAStG,GAAO,EAAEoM,EAAc5M,EAAM,GAAG6G,EAAOC,CAAM,EAAE,CAAC,IAG9D6F,EAAW,KAAK9F,EAAOC,GAAQ,CAAC,EAElC,KAAOA,EAAStG,IAAQP,EAAY2M,GAAe5M,EAAM,GAAG6G,EAAOC,CAAM,EAAE,CAAC,IAE1E8F,EAAc,KACd5M,EAAQC,EAGJD,EAAM,WACRkH,EAAe,EACfD,EAAkBjH,GACTkH,GAAgB,GACzBA,IAEFJ,IACA+F,IAEF,GAAI3F,EAAe,EAIjBJ,GAAU+F,EACN/F,EAAStG,IACXmM,EAAW,KAAK9F,EAAOC,CAAM,CAAC,EAC9BA,SAEG,CAGD6F,EAAW,OAAS,IACtBD,EAAO,KAAKI,GAAezC,GAAMtK,EAAO4M,CAAU,CAAC,EACnDA,EAAa,CAAA,GAIf7F,GAAUI,EACV2F,GAAe3F,EAGf,MAAM6F,EAAQ9F,EAAgB,EACxB+F,EAAYnG,EAAO,MAAMC,EAAS+F,EAAa/F,CAAM,EAC3D4F,EAAO,KAAKI,GAAeC,EAAOhN,EAAOiN,CAAS,CAAC,CACrD,CACF,CAGA,OAAIL,EAAW,OAAS,GACtBD,EAAO,KAAKI,GAAezC,GAAMtK,EAAO4M,CAAU,CAAC,EAE9CD,CACT,CAUA,SAASI,GAAeC,EAAOhN,EAAO8G,EAAQ,CAC5C,MAAMoG,EAAWpG,EAAO,CAAC,EAAE,EACrBqG,EAASrG,EAAOA,EAAO,OAAS,CAAC,EAAE,EACnCmC,EAAQjJ,EAAM,MAAMkN,EAAUC,CAAM,EAC1C,OAAO,IAAIH,EAAM/D,EAAOnC,CAAM,CAChC,CAMA,MAAMsG,EAAO,CACX,QAAS,KACT,OAAQ,KACR,WAAY,CAAA,EACZ,YAAa,CAAA,EACb,cAAe,CAAA,EACf,YAAa,EACf,EAgHA,SAASC,IAAO,CAEdD,EAAK,QAAUhI,GAAOgI,EAAK,aAAa,EACxC,QAASjN,EAAI,EAAGA,EAAIiN,EAAK,WAAW,OAAQjN,IAC1CiN,EAAK,WAAWjN,CAAC,EAAE,CAAC,EAAE,CACpB,QAASiN,EAAK,OACpB,CAAK,EAIHA,EAAK,OAAS1C,GAAO0C,EAAK,QAAQ,MAAM,EACxC,QAASjN,EAAI,EAAGA,EAAIiN,EAAK,YAAY,OAAQjN,IAC3CiN,EAAK,YAAYjN,CAAC,EAAE,CAAC,EAAE,CACrB,QAASiN,EAAK,QACd,OAAQA,EAAK,MACnB,CAAK,EAEH,OAAAA,EAAK,YAAc,GACZA,CACT,CAOA,SAASE,GAAS5G,EAAK,CACrB,OAAK0G,EAAK,aACRC,GAAI,EAECX,GAAIU,EAAK,OAAO,MAAO1G,EAAKF,GAAM4G,EAAK,QAAQ,MAAO1G,CAAG,CAAC,CACnE,CACA4G,GAAS,KAAO9G,GCtvDhB,SAAS+G,GAAWC,EAAM,CACxB,OAAOA,EAAK,QAAQ,KAAM,OAAO,EAAE,QAAQ,KAAM,MAAM,EAAE,QAAQ,KAAM,MAAM,CAC/E,CACA,SAASC,GAAWnE,EAAM,CACxB,OAAOA,EAAK,QAAQ,KAAM,QAAQ,CACpC,CACA,SAASoE,GAAmBhE,EAAY,CACtC,MAAM9J,EAAS,CAAA,EACf,UAAW+N,KAAQjE,EAAY,CAC7B,IAAIX,EAAMW,EAAWiE,CAAI,EAAI,GAC7B/N,EAAO,KAAK,GAAG+N,CAAI,KAAKF,GAAW1E,CAAG,CAAC,GAAG,CAC5C,CACA,OAAOnJ,EAAO,KAAK,GAAG,CACxB,CACA,SAASyI,GAAc,CACrB,QAAAmB,EACA,WAAAE,EACA,QAAAD,CACF,EAAG,CACD,MAAO,IAAID,CAAO,IAAIkE,GAAmBhE,CAAU,CAAC,IAAI6D,GAAW9D,CAAO,CAAC,KAAKD,CAAO,GACzF,CAWA,SAASoE,GAAWlH,EAAK0B,EAAO,GAAI,CAClCA,EAAO,IAAID,GAAQC,EAAMC,EAAa,EACtC,MAAMvB,EAASwG,GAAS5G,CAAG,EACrB9G,EAAS,CAAA,EACf,QAASO,EAAI,EAAGA,EAAI2G,EAAO,OAAQ3G,IAAK,CACtC,MAAMJ,EAAQ+G,EAAO3G,CAAC,EAClBJ,EAAM,IAAM,MAAQqI,EAAK,IAAI,OAAO,EACtCxI,EAAO,KAAK;AAAA,CAAQ,EACX,CAACG,EAAM,QAAU,CAACqI,EAAK,MAAMrI,CAAK,EAC3CH,EAAO,KAAK2N,GAAWxN,EAAM,SAAQ,CAAE,CAAC,EAExCH,EAAO,KAAKwI,EAAK,OAAOrI,CAAK,CAAC,CAElC,CACA,OAAOH,EAAO,KAAK,EAAE,CACvB,CACK,OAAO,UAAU,SACpB,OAAO,eAAe,OAAO,UAAW,UAAW,CACjD,SAAU,GACV,MAAO,SAAiBsJ,EAAS,CAC/B,OAAO0E,GAAW,KAAM1E,CAAO,CACjC,CACJ,CAAG,ECoSHhL,EAAS2P,EAAG,EC9VL,MAAMC,WAAqB,KAAM,CACvC,YAAYC,EAAS,CACpB,MAAMA,CAAO,EACb,KAAK,KAAO,cACb,CACD,CAMO,MAAMC,WAAmB,KAAM,CACrC,YAAYD,EAAS,CACpB,MAAK,EACL,KAAK,KAAO,aACZ,KAAK,QAAUA,CAChB,CACD,CAKA,MAAME,GAAkBC,GAAgB,WAAW,eAAiB,OACjE,IAAIF,GAAWE,CAAY,EAC3B,IAAI,aAAaA,CAAY,EAK1BC,GAAmBC,GAAU,CAClC,MAAMC,EAASD,EAAO,SAAW,OAC9BH,GAAgB,6BAA6B,EAC7CG,EAAO,OAEV,OAAOC,aAAkB,MAAQA,EAASJ,GAAgBI,CAAM,CACjE,EAEe,SAASC,GAASC,EAASrF,EAAS,CAClD,KAAM,CACL,aAAAsF,EACA,SAAAC,EACA,QAAAV,EACA,aAAAW,EAAe,CAAC,WAAY,YAAY,CAC1C,EAAKxF,EAEJ,IAAIyF,EACAC,EA8DJ,MAAMC,EA5DiB,IAAI,QAAQ,CAACC,EAASC,IAAW,CACvD,GAAI,OAAOP,GAAiB,UAAY,KAAK,KAAKA,CAAY,IAAM,EACnE,MAAM,IAAI,UAAU,4DAA4DA,CAAY,IAAI,EAGjG,GAAItF,EAAQ,OAAQ,CACnB,KAAM,CAAC,OAAAkF,CAAM,EAAIlF,EACbkF,EAAO,SACVW,EAAOZ,GAAiBC,CAAM,CAAC,EAGhCQ,EAAe,IAAM,CACpBG,EAAOZ,GAAiBC,CAAM,CAAC,CAChC,EAEAA,EAAO,iBAAiB,QAASQ,EAAc,CAAC,KAAM,EAAI,CAAC,CAC5D,CAEA,GAAIJ,IAAiB,OAAO,kBAAmB,CAC9CD,EAAQ,KAAKO,EAASC,CAAM,EAC5B,MACD,CAGA,MAAMC,EAAe,IAAIlB,GAEzBa,EAAQD,EAAa,WAAW,KAAK,OAAW,IAAM,CACrD,GAAID,EAAU,CACb,GAAI,CACHK,EAAQL,EAAQ,CAAE,CACnB,OAASQ,EAAO,CACfF,EAAOE,CAAK,CACb,CAEA,MACD,CAEI,OAAOV,EAAQ,QAAW,YAC7BA,EAAQ,OAAM,EAGXR,IAAY,GACfe,EAAO,EACGf,aAAmB,MAC7BgB,EAAOhB,CAAO,GAEdiB,EAAa,QAAUjB,GAAW,2BAA2BS,CAAY,gBACzEO,EAAOC,CAAY,EAErB,EAAGR,CAAY,GAEd,SAAY,CACZ,GAAI,CACHM,EAAQ,MAAMP,CAAO,CACtB,OAASU,EAAO,CACfF,EAAOE,CAAK,CACb,CACD,GAAC,CACF,CAAC,EAEwC,QAAQ,IAAM,CACtDJ,EAAkB,MAAK,EACnBD,GAAgB1F,EAAQ,QAC3BA,EAAQ,OAAO,oBAAoB,QAAS0F,CAAY,CAE1D,CAAC,EAED,OAAAC,EAAkB,MAAQ,IAAM,CAC/BH,EAAa,aAAa,KAAK,OAAWC,CAAK,EAC/CA,EAAQ,MACT,EAEOE,CACR,CCvHe,SAASK,GAAWC,EAAOlG,EAAOmG,EAAY,CACzD,IAAI9H,EAAQ,EACR+H,EAAQF,EAAM,OAClB,KAAOE,EAAQ,GAAG,CACd,MAAMC,EAAO,KAAK,MAAMD,EAAQ,CAAC,EACjC,IAAIE,EAAKjI,EAAQgI,EACbF,EAAWD,EAAMI,CAAE,EAAGtG,CAAK,GAAK,GAChC3B,EAAQ,EAAEiI,EACVF,GAASC,EAAO,GAGhBD,EAAQC,CAEhB,CACA,OAAOhI,CACX,CChBe,MAAMkI,EAAc,CAC/BC,GAAS,CAAA,EACT,QAAQ/C,EAAKxD,EAAS,CAClBA,EAAU,CACN,SAAU,EACV,GAAGA,CACf,EACQ,MAAMwG,EAAU,CACZ,SAAUxG,EAAQ,SAClB,GAAIA,EAAQ,GACZ,IAAAwD,CACZ,EACQ,GAAI,KAAK,OAAS,GAAK,KAAK+C,GAAO,KAAK,KAAO,CAAC,EAAE,UAAYvG,EAAQ,SAAU,CAC5E,KAAKuG,GAAO,KAAKC,CAAO,EACxB,MACJ,CACA,MAAMrI,EAAQ6H,GAAW,KAAKO,GAAQC,EAAS,CAACrJ,EAAGC,IAAMA,EAAE,SAAWD,EAAE,QAAQ,EAChF,KAAKoJ,GAAO,OAAOpI,EAAO,EAAGqI,CAAO,CACxC,CACA,YAAYC,EAAIC,EAAU,CACtB,MAAMvI,EAAQ,KAAKoI,GAAO,UAAWC,GAAYA,EAAQ,KAAOC,CAAE,EAClE,GAAItI,IAAU,GACV,MAAM,IAAI,eAAe,oCAAoCsI,CAAE,wBAAwB,EAE3F,KAAM,CAACE,CAAI,EAAI,KAAKJ,GAAO,OAAOpI,EAAO,CAAC,EAC1C,KAAK,QAAQwI,EAAK,IAAK,CAAE,SAAAD,EAAU,GAAAD,EAAI,CAC3C,CACA,SAAU,CAEN,OADa,KAAKF,GAAO,MAAK,GACjB,GACjB,CACA,OAAOvG,EAAS,CACZ,OAAO,KAAKuG,GAAO,OAAQC,GAAYA,EAAQ,WAAaxG,EAAQ,QAAQ,EAAE,IAAKwG,GAAYA,EAAQ,GAAG,CAC9G,CACA,IAAI,MAAO,CACP,OAAO,KAAKD,GAAO,MACvB,CACJ,CChCe,MAAMK,WAAeC,EAAa,CAC7CC,GACAC,GACAC,GAAiB,EACjBC,GACAC,GACAC,GAAe,EACfC,GACAC,GACAd,GACAe,GACAC,GAAW,EAEXC,GACAC,GACAC,GAEAC,GAAc,GAMd,QAEA,YAAY3H,EAAS,CAYjB,GAXA,MAAK,EAELA,EAAU,CACN,0BAA2B,GAC3B,YAAa,OAAO,kBACpB,SAAU,EACV,YAAa,OAAO,kBACpB,UAAW,GACX,WAAYsG,GACZ,GAAGtG,CACf,EACY,EAAE,OAAOA,EAAQ,aAAgB,UAAYA,EAAQ,aAAe,GACpE,MAAM,IAAI,UAAU,gEAAgEA,EAAQ,aAAa,YAAc,EAAE,OAAO,OAAOA,EAAQ,WAAW,GAAG,EAEjK,GAAIA,EAAQ,WAAa,QAAa,EAAE,OAAO,SAASA,EAAQ,QAAQ,GAAKA,EAAQ,UAAY,GAC7F,MAAM,IAAI,UAAU,2DAA2DA,EAAQ,UAAU,YAAc,EAAE,OAAO,OAAOA,EAAQ,QAAQ,GAAG,EAEtJ,KAAK8G,GAA6B9G,EAAQ,0BAC1C,KAAK+G,GAAqB/G,EAAQ,cAAgB,OAAO,mBAAqBA,EAAQ,WAAa,EACnG,KAAKiH,GAAejH,EAAQ,YAC5B,KAAKkH,GAAYlH,EAAQ,SACzB,KAAKuG,GAAS,IAAIvG,EAAQ,WAC1B,KAAKsH,GAActH,EAAQ,WAC3B,KAAK,YAAcA,EAAQ,YAC3B,KAAK,QAAUA,EAAQ,QACvB,KAAK0H,GAAkB1H,EAAQ,iBAAmB,GAClD,KAAKyH,GAAYzH,EAAQ,YAAc,EAC3C,CACA,GAAI4H,IAA4B,CAC5B,OAAO,KAAKb,IAAsB,KAAKC,GAAiB,KAAKC,EACjE,CACA,GAAIY,IAA8B,CAC9B,OAAO,KAAKN,GAAW,KAAKC,EAChC,CACAM,IAAQ,CACJ,KAAKP,KACL,KAAKQ,GAAkB,EACvB,KAAK,KAAK,MAAM,CACpB,CACAC,IAAoB,CAChB,KAAKC,GAAW,EAChB,KAAKC,GAA2B,EAChC,KAAKb,GAAa,MACtB,CACA,GAAIc,IAAoB,CACpB,MAAMC,EAAM,KAAK,IAAG,EACpB,GAAI,KAAKhB,KAAgB,OAAW,CAChC,MAAMiB,EAAQ,KAAKlB,GAAeiB,EAClC,GAAIC,EAAQ,EAGR,KAAKrB,GAAkB,KAAKF,GAA8B,KAAKS,GAAW,MAI1E,QAAI,KAAKF,KAAe,SACpB,KAAKA,GAAa,WAAW,IAAM,CAC/B,KAAKW,GAAiB,CAC1B,EAAGK,CAAK,GAEL,EAEf,CACA,MAAO,EACX,CACAN,IAAqB,CACjB,GAAI,KAAKxB,GAAO,OAAS,EAGrB,OAAI,KAAKa,IACL,cAAc,KAAKA,EAAW,EAElC,KAAKA,GAAc,OACnB,KAAK,KAAK,OAAO,EACb,KAAKG,KAAa,GAClB,KAAK,KAAK,MAAM,EAEb,GAEX,GAAI,CAAC,KAAKE,GAAW,CACjB,MAAMa,EAAwB,CAAC,KAAKH,GACpC,GAAI,KAAKP,IAA6B,KAAKC,GAA6B,CACpE,MAAMU,EAAM,KAAKhC,GAAO,QAAO,EAC/B,OAAKgC,GAGL,KAAK,KAAK,QAAQ,EAClBA,EAAG,EACCD,GACA,KAAKJ,GAA2B,EAE7B,IAPI,EAQf,CACJ,CACA,MAAO,EACX,CACAA,IAA8B,CACtB,KAAKnB,IAAsB,KAAKK,KAAgB,SAGpD,KAAKA,GAAc,YAAY,IAAM,CACjC,KAAKa,GAAW,CACpB,EAAG,KAAKf,EAAS,EACjB,KAAKC,GAAe,KAAK,IAAG,EAAK,KAAKD,GAC1C,CACAe,IAAc,CACN,KAAKjB,KAAmB,GAAK,KAAKO,KAAa,GAAK,KAAKH,KACzD,cAAc,KAAKA,EAAW,EAC9B,KAAKA,GAAc,QAEvB,KAAKJ,GAAiB,KAAKF,GAA6B,KAAKS,GAAW,EACxE,KAAKiB,GAAa,CACtB,CAIAA,IAAgB,CAEZ,KAAO,KAAKT,GAAkB,GAAI,CACtC,CACA,IAAI,aAAc,CACd,OAAO,KAAKP,EAChB,CACA,IAAI,YAAYiB,EAAgB,CAC5B,GAAI,EAAE,OAAOA,GAAmB,UAAYA,GAAkB,GAC1D,MAAM,IAAI,UAAU,gEAAgEA,CAAc,OAAO,OAAOA,CAAc,GAAG,EAErI,KAAKjB,GAAeiB,EACpB,KAAKD,GAAa,CACtB,CACA,KAAME,GAAcxD,EAAQ,CACxB,OAAO,IAAI,QAAQ,CAACyD,EAAU9C,IAAW,CACrCX,EAAO,iBAAiB,QAAS,IAAM,CACnCW,EAAOX,EAAO,MAAM,CACxB,EAAG,CAAE,KAAM,GAAM,CACrB,CAAC,CACL,CAqCA,YAAYuB,EAAIC,EAAU,CACtB,KAAKH,GAAO,YAAYE,EAAIC,CAAQ,CACxC,CACA,MAAM,IAAIkC,EAAW5I,EAAU,GAAI,CAE/B,OAAAA,EAAQ,MAAQ,KAAK2H,MAAe,SAAQ,EAC5C3H,EAAU,CACN,QAAS,KAAK,QACd,eAAgB,KAAK0H,GACrB,GAAG1H,CACf,EACe,IAAI,QAAQ,CAAC4F,EAASC,IAAW,CACpC,KAAKU,GAAO,QAAQ,SAAY,CAC5B,KAAKgB,KACL,GAAI,CACAvH,EAAQ,QAAQ,eAAc,EAC9B,KAAKgH,KACL,IAAI6B,EAAYD,EAAU,CAAE,OAAQ5I,EAAQ,MAAM,CAAE,EAChDA,EAAQ,UACR6I,EAAYzD,GAAS,QAAQ,QAAQyD,CAAS,EAAG,CAAE,aAAc7I,EAAQ,QAAS,GAElFA,EAAQ,SACR6I,EAAY,QAAQ,KAAK,CAACA,EAAW,KAAKH,GAAc1I,EAAQ,MAAM,CAAC,CAAC,GAE5E,MAAMtJ,EAAS,MAAMmS,EACrBjD,EAAQlP,CAAM,EACd,KAAK,KAAK,YAAaA,CAAM,CACjC,OACOqP,EAAO,CACV,GAAIA,aAAiBnB,IAAgB,CAAC5E,EAAQ,eAAgB,CAC1D4F,EAAO,EACP,MACJ,CACAC,EAAOE,CAAK,EACZ,KAAK,KAAK,QAASA,CAAK,CAC5B,QAAA,CAEI,KAAK+B,GAAK,CACd,CACJ,EAAG9H,CAAO,EACV,KAAK,KAAK,KAAK,EACf,KAAK+H,GAAkB,CAC3B,CAAC,CACL,CACA,MAAM,OAAOe,EAAW9I,EAAS,CAC7B,OAAO,QAAQ,IAAI8I,EAAU,IAAI,MAAOF,GAAc,KAAK,IAAIA,EAAW5I,CAAO,CAAC,CAAC,CACvF,CAIA,OAAQ,CACJ,OAAK,KAAKyH,IAGV,KAAKA,GAAY,GACjB,KAAKe,GAAa,EACX,MAJI,IAKf,CAIA,OAAQ,CACJ,KAAKf,GAAY,EACrB,CAIA,OAAQ,CACJ,KAAKlB,GAAS,IAAI,KAAKe,EAC3B,CAMA,MAAM,SAAU,CAER,KAAKf,GAAO,OAAS,GAGzB,MAAM,KAAKwC,GAAS,OAAO,CAC/B,CAQA,MAAM,eAAeC,EAAO,CAEpB,KAAKzC,GAAO,KAAOyC,GAGvB,MAAM,KAAKD,GAAS,OAAQ,IAAM,KAAKxC,GAAO,KAAOyC,CAAK,CAC9D,CAMA,MAAM,QAAS,CAEP,KAAKzB,KAAa,GAAK,KAAKhB,GAAO,OAAS,GAGhD,MAAM,KAAKwC,GAAS,MAAM,CAC9B,CACA,KAAMA,GAASE,EAAOC,EAAQ,CAC1B,OAAO,IAAI,QAAQtD,GAAW,CAC1B,MAAMuD,EAAW,IAAM,CACfD,GAAU,CAACA,MAGf,KAAK,IAAID,EAAOE,CAAQ,EACxBvD,EAAO,EACX,EACA,KAAK,GAAGqD,EAAOE,CAAQ,CAC3B,CAAC,CACL,CAIA,IAAI,MAAO,CACP,OAAO,KAAK5C,GAAO,IACvB,CAMA,OAAOvG,EAAS,CAEZ,OAAO,KAAKuG,GAAO,OAAOvG,CAAO,EAAE,MACvC,CAIA,IAAI,SAAU,CACV,OAAO,KAAKuH,EAChB,CAIA,IAAI,UAAW,CACX,OAAO,KAAKE,EAChB,CACJ,CC/Vc,IAAIb,GAAO,CAAE,YAAa,CAAC,CAAE,ECY3C5R,EAASoU,EAAG,EAwHZpU,EAASqU,EAAE,EC9HXrU,EAASsU,EAAG,EAmCGnU,EAAE,cAAc,sFC1C9B,SAASoU,EAAEpU,EAAE,CAAmDqU,EAAA,QAAerU,EAAC,CAAoH,GAAe,OAAO,KAApB,IAAyB,KAAKsU,IAAM,UAAU,CAAC,OAAO,UAAU,CAAC,IAAIF,EAAE,CAAC,IAAI,UAAU,CAAc,OAAO,OAApB,MAA4B,UAAU,CAAC,QAAQA,EAAE,EAAEpU,EAAE,CAAC,KAAK,MAAM,SAAS,GAAG,EAAE8B,EAAE,EAAEA,EAAE9B,EAAE,QAAQ,CAAC,OAAO,sBAAsB,EAAE8B,EAAE,OAAO,sBAAsB,OAAO9B,EAAE8B,CAAC,EAAE,uBAAuB,EAAE,OAAO,qBAAqB,OAAO9B,EAAE8B,CAAC,EAAE,sBAAsB,GAAG,OAAO9B,EAAE8B,CAAC,EAAE,6BAA6B,EAAE,OAAO,wBAAwB,OAAO,sBAAsB,SAAS9B,EAAE8B,EAAE,CAAC,IAAIyS,EAAG,IAAI,KAAA,EAAM,QAAO,EAAGC,EAAE,KAAK,IAAI,EAAE,IAAID,EAAEH,EAAE,EAAEnK,EAAE,OAAO,YAAY,UAAU,CAACjK,EAAEuU,EAAEC,CAAC,CAAC,GAAGA,CAAC,EAAE,OAAOJ,EAAEG,EAAEC,EAAEvK,CAAC,GAAG,OAAO,uBAAuB,OAAO,qBAAqB,SAASmK,EAAE,CAAC,aAAaA,CAAC,CAAC,EAAE,GAAC,CAAE,CAAC,EAAEpU,EAAE,CAAA,EAAG,SAAS8B,EAAEyS,EAAE,CAAC,IAAIC,EAAExU,EAAEuU,CAAC,EAAE,GAAYC,IAAT,OAAW,OAAOA,EAAE,QAAQ,IAAIvK,EAAEjK,EAAEuU,CAAC,EAAE,CAAC,QAAQ,CAAA,CAAE,EAAE,OAAOH,EAAEG,CAAC,EAAEtK,EAAEA,EAAE,QAAQnI,CAAC,EAAEmI,EAAE,OAAO,CAACnI,EAAE,EAAE,SAASsS,EAAEpU,EAAE,CAAC,QAAQuU,KAAKvU,EAAE8B,EAAE,EAAE9B,EAAEuU,CAAC,GAAG,CAACzS,EAAE,EAAEsS,EAAEG,CAAC,GAAG,OAAO,eAAeH,EAAEG,EAAE,CAAC,WAAW,GAAG,IAAIvU,EAAEuU,CAAC,CAAC,CAAC,CAAC,EAAEzS,EAAE,EAAE,SAASsS,EAAEpU,EAAE,CAAC,OAAO,OAAO,UAAU,eAAe,KAAKoU,EAAEpU,CAAC,CAAC,EAAE8B,EAAE,EAAE,SAASsS,EAAE,CAAc,OAAO,OAApB,KAA4B,OAAO,aAAa,OAAO,eAAeA,EAAE,OAAO,YAAY,CAAC,MAAM,QAAQ,CAAC,EAAE,OAAO,eAAeA,EAAE,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,IAAIG,EAAE,CAAA,EAAG,OAAO,UAAU,CAAczS,EAAE,EAAEyS,CAAC,EAAEzS,EAAE,EAAEyS,EAAE,CAAC,QAAQ,UAAU,CAAC,OAAOnT,EAAC,EAAE,SAAS,UAAU,CAAC,OAAOqT,EAAC,EAAE,MAAM,UAAU,CAAC,OAAOC,EAAC,EAAE,UAAU,UAAU,CAAC,OAAOC,EAAC,EAAE,WAAW,UAAU,CAAC,OAAOC,EAAC,EAAE,UAAU,UAAU,CAAC,OAAOC,EAAC,EAAE,OAAO,UAAU,CAAC,OAAOC,EAAE,EAAE,QAAQ,UAAU,CAAC,OAAOC,EAAC,EAAE,OAAO,UAAU,CAAC,OAAOC,EAAC,EAAE,MAAM,UAAU,CAAC,OAAOC,EAAC,EAAE,WAAW,UAAU,CAAC,OAAOC,EAAC,EAAE,SAAS,UAAU,CAAC,OAAOC,EAAC,EAAE,MAAM,UAAU,CAAC,OAAO3T,CAAC,EAAE,WAAW,UAAU,CAAC,OAAOuK,EAAC,CAAC,CAAC,EAAE,IAAIqI,EAAEpU,EAAEwU,EAAE,aAAavK,EAAE,KAAKmL,EAAe,OAAO,OAApB,KAA4B,iBAAiB,OAAO,SAASpN,EAAEoM,EAAEtS,EAAE,CAAC,GAAG9B,EAAEA,EAAEoU,EAAEtS,CAAC,MAAM,CAAC,GAAG,CAACsT,EAAE,OAAO,GAAG,CAAC,OAAO,aAAa,GAAG,OAAOZ,EAAE,GAAG,EAAE,OAAOJ,CAAC,CAAC,EAAEnK,EAAE,UAAUnI,CAAC,CAAC,MAAS,CAAA,CAAE,CAAC,CAAC,IAAIN,EAAE,CAAC,OAAO,SAAS4S,EAAE,CAAC,QAAQpU,KAAKoU,EAAEpM,EAAEhI,EAAEoU,EAAEpU,CAAC,CAAC,CAAC,EAAE,IAAIgI,EAAE,IAAI,SAAS,EAAE,CAAC,GAAGoM,EAAE,OAAOA,EAAE,CAAC,EAAE,GAAGgB,EAAE,CAAC,GAAG,CAAC,IAAItT,EAAE,OAAO,aAAa,GAAG,OAAO0S,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,MAAS,CAAC,MAAM,CAAC,OAAO1S,EAAE,KAAK,MAAMA,CAAC,EAAE,MAAM,CAAC,EAAE,aAAa,SAASsS,EAAE,CAACI,EAAEJ,CAAC,EAAE,YAAY,SAAStS,EAAE,CAACA,IAAIA,EAAE,CAAA,GAAIsS,EAAEtS,EAAE,OAAO9B,EAAE8B,EAAE,MAAM,CAAC,EAAE,SAASuT,EAAEjB,EAAE,CAAC,OAAOiB,EAAc,OAAO,QAAnB,YAAqC,OAAO,OAAO,UAAxB,SAAiC,SAASjB,EAAE,CAAC,OAAO,OAAOA,CAAC,EAAE,SAASA,EAAE,CAAC,OAAOA,GAAe,OAAO,QAAnB,YAA2BA,EAAE,cAAc,QAAQA,IAAI,OAAO,UAAU,SAAS,OAAOA,CAAC,EAAEiB,EAAEjB,CAAC,CAAC,CAAC,SAASkB,EAAElB,EAAEpU,EAAE,EAAQA,GAAN,MAASA,EAAEoU,EAAE,UAAUpU,EAAEoU,EAAE,QAAQ,QAAQtS,EAAE,EAAEyS,EAAE,IAAI,MAAMvU,CAAC,EAAE8B,EAAE9B,EAAE8B,IAAIyS,EAAEzS,CAAC,EAAEsS,EAAEtS,CAAC,EAAE,OAAOyS,CAAC,CAAC,IAAIgB,EAAE,CAAC,KAAK,IAAI,QAAQ,IAAI,cAAc,IAAI,cAAc,IAAI,eAAe,IAAI,gBAAgB,IAAI,iBAAiB,IAAI,SAAS,IAAI,MAAM,IAAI,UAAU,IAAI,KAAK,IAAI,YAAY,IAAI,SAAS,GAAG,EAAEC,EAAE,SAASpB,EAAE,CAAC,IAAIpU,EAAE,CAAA,EAAG8B,EAAE,SAASsS,EAAEtS,EAAE,CAACsS,IAAI,MAAM,QAAQA,CAAC,EAAEA,EAAE,CAACA,CAAC,GAAG,SAAS,SAASA,EAAE,EAAEtS,EAAEsS,EAAE,MAAM,WAAW,EAAE,CAACA,CAAC,GAAG,SAAS,SAASA,EAAE,CAACA,EAAEA,EAAE,YAAW,EAAOpU,EAAE,QAAQoU,CAAC,GAAf,IAAkBpU,EAAE,KAAKoU,CAAC,CAAC,EAAC,CAAE,GAAG,EAAE,OAAOtS,EAAEsS,EAAE,YAAY,EAAE,EAAEtS,EAAEsS,EAAE,KAAK,EAAE,EAAEtS,EAAEsS,EAAE,SAAS,EAAE,EAAEtS,EAAEsS,EAAE,UAAU,EAAE,EAAEpU,EAAE,KAAK,GAAG,CAAC,EAAE,SAASyV,EAAErB,EAAE,CAAC,IAAIpU,EAAE8B,GAAE,SAASsS,EAAEpU,EAAE,CAAC,IAAI8B,EAAe,OAAO,OAApB,KAA4BsS,EAAE,OAAO,QAAQ,GAAGA,EAAE,YAAY,EAAE,GAAG,CAACtS,EAAE,CAAC,GAAG,MAAM,QAAQsS,CAAC,IAAItS,GAAE,SAASsS,EAAEpU,GAAE,CAAC,GAAGoU,EAAE,CAAC,GAAa,OAAOA,GAAjB,SAAmB,OAAOkB,EAAElB,EAAEpU,EAAC,EAAE,IAAI8B,EAAE,OAAO,UAAU,SAAS,KAAKsS,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,OAAiBtS,IAAX,UAAcsS,EAAE,cAActS,EAAEsS,EAAE,YAAY,MAActS,IAAR,OAAmBA,IAAR,MAAU,MAAM,KAAKsS,CAAC,EAAgBtS,IAAd,aAAiB,2CAA2C,KAAKA,CAAC,EAAEwT,EAAElB,EAAEpU,EAAC,EAAE,MAAM,CAAC,GAAEoU,CAAC,IAAIpU,EAAgC,CAAC8B,IAAIsS,EAAEtS,GAAG,IAAIyS,EAAE,EAAEC,EAAE,UAAU,GAAG,MAAM,CAAC,EAAEA,EAAE,EAAE,UAAU,CAAC,OAAOD,GAAGH,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,MAAMA,EAAEG,GAAG,CAAC,CAAC,EAAE,EAAE,SAASH,EAAE,CAAC,MAAMA,CAAC,EAAE,EAAEI,CAAC,CAAC,CAAC,MAAM,IAAI,UAAU;AAAA,mFAAuI,CAAC,CAAC,IAAIvK,EAAEmL,GAAE,GAAGpN,GAAE,GAAG,MAAM,CAAC,EAAE,UAAU,CAAClG,EAAEA,EAAE,KAAKsS,CAAC,CAAC,EAAE,EAAE,UAAU,CAAC,IAAIA,EAAEtS,EAAE,KAAI,EAAG,OAAOsT,GAAEhB,EAAE,KAAKA,CAAC,EAAE,EAAE,SAASA,EAAE,CAACpM,GAAE,GAAGiC,EAAEmK,CAAC,EAAE,EAAE,UAAU,CAAC,GAAG,CAACgB,IAAStT,EAAE,QAAR,MAAgBA,EAAE,QAAQ,QAAA,CAAS,GAAGkG,GAAE,MAAMiC,CAAC,CAAC,CAAC,CAAC,GAAE,OAAO,oBAAoBmK,CAAC,CAAC,EAAE,GAAG,CAAC,IAAItS,EAAE,EAAC,EAAG,EAAE9B,EAAE8B,EAAE,EAAC,GAAI,MAAM,CAAC,IAAIyS,EAAEvU,EAAE,MAAMwU,EAAEJ,EAAEG,CAAC,EAAEH,EAAEG,CAAC,EAAEC,GAAca,EAAEb,CAAC,IAAd,SAAgBiB,EAAEjB,CAAC,EAAEA,CAAC,CAAC,OAAOJ,EAAE,CAACtS,EAAE,EAAEsS,CAAC,CAAC,QAAA,CAAStS,EAAE,GAAG,CAAC,OAAO,OAAO,OAAOsS,CAAC,CAAC,CAAC,IAAIsB,EAAEC,GAAE5J,GAAE,SAASqI,EAAE,CAAC,GAAG,CAACA,EAAE,WAAW,OAAOA,EAAE,QAAQpU,KAAKoU,EAAE,WAAW,GAAGA,EAAE,OAAO,CAAC,IAAItS,EAAEsS,EAAE,OAAOpU,CAAC,EAAE,QAAQuU,KAAKgB,EAAEzT,EAAEyS,CAAC,EAAEzS,EAAEyT,EAAEhB,CAAC,CAAC,EAAE,OAAOzS,EAAEyT,EAAEhB,CAAC,CAAC,EAAEzS,EAAE,cAAcA,EAAE,YAAY,IAAIA,EAAE,YAAY,QAAQ9B,CAAC,EAAE8B,EAAE,QAAQA,EAAE,MAAM,CAAC,EAAEA,EAAE,QAAQA,EAAE,MAAM,CAAC,EAAE,OAAOA,EAAE,MAAMA,EAAE,OAAOA,EAAE,KAAK,IAAIA,EAAE,WAAWA,EAAE,SAAS,GAAGA,EAAE,SAASA,EAAE,SAAS,QAAQ,CAAC,EAAEA,EAAE,OAAO0T,EAAE1T,CAAC,CAAC,CAAC,OAAO2T,EAAErB,CAAC,CAAC,EAAEwB,EAAE,CAAC,KAAK,WAAW,gBAAgB,aAAa,WAAW,+BAA+B,cAAc,MAAM,SAAS,eAAe,WAAW,QAAQ,MAAM,aAAa,QAAQ,QAAQ,EAAEC,EAAE,CAAA,EAAG,SAASC,IAAG,CAACH,GAAE,GAAGD,EAAElU,EAAE,IAAI,YAAY,CAAC,CAAC,IAAI0T,GAAE,CAAC,IAAI,SAASd,EAAE,CAACuB,IAAGG,GAAC,EAAG,IAAI9V,EAAEoU,EAAE,GAAGsB,IAAIA,EAAEG,GAAGH,EAAE1V,CAAC,IAAI0V,EAAE1V,CAAC,EAAE,GAAG0V,EAAE1V,CAAC,GAAG,EAAEwB,EAAE,IAAI,OAAOxB,CAAC,EAAEwB,EAAE,IAAI,aAAakU,CAAC,CAAC,EAAE,IAAI,SAAStB,EAAE,CAAC,GAAGuB,IAAGG,GAAC,EAAG,CAACJ,EAAE,CAACG,EAAE,CAAA,EAAG,QAAQ7V,EAAE,CAAA,EAAG8B,EAAE,KAAK,IAAIsS,EAAEwB,EAAE,MAAM,EAAErB,EAAE,EAAEA,EAAEzS,EAAEyS,IAAIsB,EAAED,EAAErB,CAAC,CAAC,EAAE,UAAUzS,EAAEyS,GAAG,EAAE,EAAE,EAAE,EAAEvU,EAAE,KAAK4V,EAAErB,CAAC,CAAC,EAAE,OAAOvU,CAAC,CAAC,IAAIwU,EAAEJ,EAAEnK,EAAE,CAAA,EAAG,QAAQmL,KAAKM,EAAEA,EAAE,eAAeN,CAAC,GAAGnL,EAAE,KAAKmL,CAAC,EAAE,IAAIpN,EAAEiC,EAAE,MAAM,SAASmK,EAAEpU,EAAE,CAAC,OAAO0V,EAAEtB,CAAC,EAAEsB,EAAE1V,CAAC,CAAC,EAAC,EAAG,QAAO,EAAG,MAAM,EAAEwU,CAAC,EAAEa,EAAE7T,EAAE,IAAI,MAAM,EAAE,OAAO6T,GAAOrN,EAAE,QAAQqN,CAAC,GAAf,KAAmBrN,EAAE,IAAG,EAAGA,EAAE,KAAKqN,CAAC,GAAGrN,CAAC,CAAC,EAAE+N,GAAE,CAAC,SAAS,+zBAA+zB,OAAO,2gBAA2gB,MAAM,uQAAuQ,MAAM,w7BAAw7B,OAAO,4uDAA4uD,QAAQ,+gCAA+gC,QAAQ,yaAAya,OAAO,wxFAAwxF,OAAO,0kCAA0kC,OAAO,uSAAuS,QAAQ,++CAA++C,EAAE,SAAS9N,EAAEmM,EAAEpU,EAAE8B,EAAEyS,EAAEC,EAAEvK,EAAEmL,EAAEpN,EAAE,CAAC,IAAIxG,EAAE6T,EAAc,OAAOjB,GAAnB,WAAqBA,EAAE,QAAQA,EAAE,OAAGpU,IAAIqV,EAAE,OAAOrV,EAAEqV,EAAE,gBAAgBvT,EAAEuT,EAAE,UAAU,IAAylB,CAAC,QAAQjB,EAAE,QAAQiB,CAAC,CAAC,CAAC,IAAIW,GAAE/N,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,OAAO,SAAS,EAAE,EAAE,MAAM,CAAC,KAAK,MAAM,EAAE,WAAW,CAAC,KAAK,MAAM,SAAS,EAAE,EAAE,eAAe,CAAC,KAAK,OAAO,QAAQ,UAAU,CAAC,MAAM,CAAA,CAAE,CAAC,CAAC,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,UAAU,CAAC,KAAK,KAAK8N,EAAC,CAAC,GAAG,UAAU,CAAC,IAAI3B,EAAE,KAAKpU,EAAEoU,EAAE,MAAM,GAAG,OAAOpU,EAAE,MAAM,CAAC,YAAY,qBAAqB,MAAM,CAAC,KAAK,SAAS,CAAC,EAAEoU,EAAE,GAAGA,EAAE,YAAY,SAAStS,EAAE,CAAC,OAAO9B,EAAE,SAAS,CAAC,IAAI8B,EAAE,GAAG,MAAM,CAAC,oBAAoB,GAAG,6BAA6BA,EAAE,IAAIsS,EAAE,eAAe,EAAE,EAAE,MAAM,CAAC,MAAMtS,EAAE,IAAIsS,EAAE,eAAe,GAAGA,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,KAAK,MAAM,KAAK,SAAS,aAAatS,EAAE,KAAK,gBAAgBA,EAAE,IAAIsS,EAAE,eAAe,GAAG,aAAaA,EAAE,KAAK,WAAWtS,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,SAAS9B,EAAE,CAAC,OAAOoU,EAAE,MAAM,QAAQtS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC9B,EAAE,MAAM,CAAC,MAAM,CAAC,cAAc,MAAM,EAAE,SAAS,CAAC,UAAUoU,EAAE,GAAGA,EAAE,KAAKtS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAEsS,EAAE,GAAG,GAAG,EAAEpU,EAAE,OAAO,CAAC,YAAY,wBAAwB,MAAM,CAAC,gBAAgBoU,EAAE,KAAK,EAAE,MAAM,CAAC,cAAc,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,EAAG,CAAC,CAAC,GAAG,CAAA,CAAoB,EAAEhT,GAAE4U,GAAE,QAAQ,SAASC,GAAE7B,EAAEpU,EAAE,CAAC,GAAG,EAAEoU,aAAapU,GAAG,MAAM,IAAI,UAAU,mCAAmC,CAAC,CAAC,SAASkW,GAAE9B,EAAE,CAAC,IAAIpU,GAAE,SAASoU,EAAEpU,EAAE,CAAC,GAAaqV,EAAEjB,CAAC,GAAb,UAAgB,CAACA,EAAE,OAAOA,EAAE,IAAItS,EAAEsS,EAAE,OAAO,WAAW,EAAE,GAAYtS,IAAT,OAAW,CAAC,IAAIyS,EAAEzS,EAAE,KAAKsS,EAAE,QAAQ,EAAE,GAAaiB,EAAEd,CAAC,GAAb,SAAe,OAAOA,EAAE,MAAM,IAAI,UAAU,8CAA8C,CAAC,CAAC,OAAO,OAAOH,CAAC,CAAC,GAAEA,CAAC,EAAE,OAAgBiB,EAAErV,CAAC,GAAb,SAAeA,EAAEA,EAAE,EAAE,CAAC,SAASmW,GAAE/B,EAAEpU,EAAE,CAAC,QAAQ8B,EAAE,EAAEA,EAAE9B,EAAE,OAAO8B,IAAI,CAAC,IAAIyS,EAAEvU,EAAE8B,CAAC,EAAEyS,EAAE,WAAWA,EAAE,YAAY,GAAGA,EAAE,aAAa,GAAG,UAAUA,IAAIA,EAAE,SAAS,IAAI,OAAO,eAAeH,EAAE8B,GAAE3B,EAAE,GAAG,EAAEA,CAAC,CAAC,CAAC,CAAC,SAAS6B,EAAEhC,EAAEpU,EAAE8B,EAAE,CAAC,OAAO9B,GAAGmW,GAAE/B,EAAE,UAAUpU,CAAC,EAAY,OAAO,eAAeoU,EAAE,YAAY,CAAC,SAAS,EAAE,CAAC,EAAEA,CAAC,CAAC,IAAIiC,GAAE,OAAO,eAAe,UAAU,CAAC,IAAIjC,EAAEpU,EAAE8B,EAAE,CAAA,EAAGyS,EAAE,GAAGC,EAAE,UAAU,OAAO,GAAG,CAACA,EAAE,MAAM,GAAG,QAAQvK,EAAE,GAAG,EAAEsK,EAAEC,GAAG,CAAC,IAAIY,EAAE,OAAO,UAAUb,CAAC,CAAC,EAAE,GAAG,CAAC,SAASa,CAAC,GAAGA,EAAE,GAAGA,EAAE,SAAS,KAAK,MAAMA,CAAC,GAAGA,EAAE,MAAM,WAAW,uBAAuBA,CAAC,EAAEA,GAAG,MAAMtT,EAAE,KAAKsT,CAAC,GAAGhB,EAAE,QAAQgB,GAAG,QAAQ,IAAIpV,EAAEoV,EAAE,KAAK,MAAMtT,EAAE,KAAKsS,EAAEpU,CAAC,IAAIuU,EAAE,IAAIC,GAAG1S,EAAE,OAAO,SAASmI,GAAG,OAAO,aAAa,MAAM,KAAKnI,CAAC,EAAEA,EAAE,OAAO,EAAE,CAAC,OAAOmI,CAAC,EAAE,SAASqM,GAAElC,EAAE,CAAC,IAAIpU,EAAEoU,EAAE,MAAM,GAAG,EAAE,KAAK,SAASA,EAAE,CAAC,MAAM,KAAK,OAAOA,CAAC,CAAC,EAAC,EAAG,OAAOiC,GAAE,MAAM,KAAKrW,CAAC,CAAC,CAAC,SAASuW,GAAEnC,EAAE,CAAC,OAAOA,EAAE,QAAQ,SAASA,EAAEpU,EAAE,CAAC,OAAWoU,EAAE,QAAQpU,CAAC,IAAhB,IAAmBoU,EAAE,KAAKpU,CAAC,EAAEoU,CAAC,GAAG,CAAA,CAAE,CAAC,CAAC,SAASoC,GAAEpC,EAAEpU,EAAE,CAAC,IAAI8B,EAAEyU,GAAEnC,CAAC,EAAEG,EAAEgC,GAAEvW,CAAC,EAAE,OAAO8B,EAAE,QAAQ,SAASsS,EAAE,CAAC,OAAOG,EAAE,QAAQH,CAAC,GAAG,CAAC,EAAC,CAAE,CAAC,SAASqC,GAAErC,EAAEpU,EAAE,CAAC,IAAI8B,EAAE,GAAG,QAAQyS,KAAKH,EAAE,CAAC,IAAII,EAAEJ,EAAEG,CAAC,EAAEtK,EAAEuK,EAAE,OAAO,UAAU,eAAe,KAAKxU,EAAEuU,CAAC,IAAItK,EAAEjK,EAAEuU,CAAC,GAAcc,EAAEpL,CAAC,IAAd,WAAkBA,EAAEwM,GAAEjC,EAAEvK,CAAC,GAAGnI,EAAEyS,CAAC,EAAEtK,CAAC,CAAC,OAAOnI,CAAC,CAAC,SAAS4U,GAAEtC,EAAEpU,EAAE,CAAC,IAAI8B,EAAe,OAAO,OAApB,KAA4BsS,EAAE,OAAO,QAAQ,GAAGA,EAAE,YAAY,EAAE,GAAG,CAACtS,EAAE,CAAC,GAAG,MAAM,QAAQsS,CAAC,IAAItS,GAAE,SAASsS,EAAEpU,EAAE,CAAC,GAAGoU,EAAE,CAAC,GAAa,OAAOA,GAAjB,SAAmB,OAAOuC,GAAEvC,EAAEpU,CAAC,EAAE,IAAI8B,EAAE,OAAO,UAAU,SAAS,KAAKsS,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,OAAiBtS,IAAX,UAAcsS,EAAE,cAActS,EAAEsS,EAAE,YAAY,MAActS,IAAR,OAAmBA,IAAR,MAAU,MAAM,KAAKsS,CAAC,EAAgBtS,IAAd,aAAiB,2CAA2C,KAAKA,CAAC,EAAE6U,GAAEvC,EAAEpU,CAAC,EAAE,MAAM,CAAC,GAAEoU,CAAC,IAAIpU,EAAgC,CAAC8B,IAAIsS,EAAEtS,GAAG,IAAIyS,EAAE,EAAEC,EAAE,UAAU,GAAG,MAAM,CAAC,EAAEA,EAAE,EAAE,UAAU,CAAC,OAAOD,GAAGH,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,MAAMA,EAAEG,GAAG,CAAC,CAAC,EAAE,EAAE,SAASH,EAAE,CAAC,MAAMA,CAAC,EAAEqB,CAAG,CAAC,CAAC,MAAM,IAAI,UAAU;AAAA,mFAAuI,CAAC,CAAC,IAAIxL,EAAEmL,EAAE,GAAGpN,EAAE,GAAG,MAAM,CAAC,EAAE,UAAU,CAAClG,EAAEA,EAAE,KAAKsS,CAAC,CAAC,EAAE,EAAE,UAAU,CAAC,IAAIA,EAAEtS,EAAE,KAAI,EAAG,OAAOsT,EAAEhB,EAAE,KAAKA,CAAC,EAAE,EAAE,SAASA,EAAE,CAACpM,EAAE,GAAGiC,EAAEmK,CAAC,EAAE,EAAE,UAAU,CAAC,GAAG,CAACgB,GAAStT,EAAE,QAAR,MAAgBA,EAAE,QAAQ,QAAA,CAAS,GAAGkG,EAAE,MAAMiC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS0M,GAAEvC,EAAEpU,EAAE,EAAQA,GAAN,MAASA,EAAEoU,EAAE,UAAUpU,EAAEoU,EAAE,QAAQ,QAAQtS,EAAE,EAAEyS,EAAE,IAAI,MAAMvU,CAAC,EAAE8B,EAAE9B,EAAE8B,IAAIyS,EAAEzS,CAAC,EAAEsS,EAAEtS,CAAC,EAAE,OAAOyS,CAAC,CAAC,IAAIqC,GAAE,4CAA4CC,GAAE,CAAC,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,OAAO,EAAEjC,IAAE,UAAU,CAAC,OAAOwB,GAAG,SAAShC,EAAEpU,EAAE,CAAC,IAAI8B,EAAE,UAAU,OAAO,GAAY,UAAU,CAAC,IAApB,OAAsB,UAAU,CAAC,EAAE,CAAA,EAAGyS,EAAEzS,EAAE,mBAAmB0S,EAAE1S,EAAE,QAAQmI,EAAEnI,EAAE,QAAQsT,EAAEtT,EAAE,OAAOkG,EAAElG,EAAE,OAAON,EAAEM,EAAE,aAAauT,EAAW7T,IAAT,OAAW,GAAGA,EAAEyU,GAAE,KAAK7B,CAAC,EAAE,KAAK,MAAMrI,GAAE/L,CAAC,EAAE,KAAK,cAAcuU,GAAG,KAAK,KAAK,SAASC,GAAG,KAAK,KAAK,SAASvK,GAAG,KAAK,KAAK,QAAQmL,GAAG,CAAA,EAAG,KAAK,QAAQpN,GAAGkN,GAAE,IAAIG,CAAC,EAAE,KAAK,QAAQ,CAAA,EAAG,KAAK,cAAc,CAAA,EAAG,KAAK,WAAW,CAAA,EAAG,KAAK,YAAY,CAAA,EAAG,KAAK,gBAAgB,CAAC,GAAG,SAAS,KAAK,SAAS,OAAO,CAAA,CAAE,EAAE,KAAK,gBAAgB,CAAC,GAAG,SAAS,KAAK,SAAS,OAAO,CAAA,CAAE,EAAE,KAAK,aAAa,CAAA,EAAG,KAAK,WAAU,EAAG,OAAO,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,aAAa,MAAM,UAAU,CAAC,IAAIjB,EAAE,KAAKpU,EAAE,KAAK,MAAM,WAAW,GAAG,KAAK,WAAWA,GAAGA,EAAEA,EAAE,QAAQ,SAASA,EAAE,CAAC,OAAOoU,EAAE,SAAS,SAASpU,EAAE,EAAE,CAAC,KAAK,MAAM,SAASA,EAAE8B,EAAE,CAAC,IAAIyS,EAAEH,EAAE,SAAS,QAAQpU,EAAE,EAAE,EAAEwU,EAAEJ,EAAE,SAAS,QAAQtS,EAAE,EAAE,EAAE,OAAOyS,EAAEC,EAAE,GAAGD,EAAEC,EAAE,EAAE,CAAC,EAAC,GAAIxU,EAAE,SAAS,SAASA,EAAE,CAAC,GAAGoU,EAAE,iBAAiBpU,EAAE,EAAE,EAAE,CAAC,IAAI8B,EAAE,CAAC,GAAG9B,EAAE,GAAG,KAAKA,EAAE,KAAK,OAAO,CAAA,CAAE,EAAEA,EAAE,OAAO,SAAS,SAASA,EAAE,CAAC,IAAIuU,EAAEH,EAAE,SAASpU,CAAC,EAAEuU,GAAGzS,EAAE,OAAO,KAAKyS,CAAC,CAAC,EAAC,EAAGzS,EAAE,OAAO,QAAQsS,EAAE,YAAY,KAAKtS,CAAC,CAAC,CAAC,EAAC,EAAG,KAAK,iBAAiB,QAAQ,EAAE,CAAC,GAAG,KAAK,QAAQ,OAAO,EAAE,CAAC,IAAIA,EAAEyS,EAAEmC,GAAE,KAAK,OAAO,EAAE,GAAG,CAAC,IAAInC,EAAE,IAAI,EAAEzS,EAAEyS,EAAE,KAAK,MAAM,CAAC,IAAIC,EAAE1S,EAAE,MAAM,KAAK,eAAe0S,CAAC,CAAC,CAAC,OAAOJ,EAAE,CAACG,EAAE,EAAEH,CAAC,CAAC,SAASG,EAAE,GAAG,CAAC,CAAC,KAAK,gBAAgB,OAAO,QAAQ,KAAK,YAAY,KAAK,KAAK,eAAe,CAAC,CAAC,KAAK,iBAAiB,QAAQ,IAAI,KAAK,QAAQ,QAAQ,KAAK,QAAQ,KAAK,SAASvU,EAAE,CAAC,IAAI8B,EAAEyS,EAAEmC,GAAEtC,EAAE,gBAAgB,MAAM,EAAE,GAAG,CAAC,IAAIG,EAAE,EAAC,EAAG,EAAEzS,EAAEyS,EAAE,EAAC,GAAI,MAAM,CAAC,IAAIC,EAAE1S,EAAE,MAAM,GAAG0S,EAAE,KAAKxU,EAAE,OAAO,KAAKoU,EAAE,gBAAgB,OAAO,KAAKI,CAAC,CAAC,CAAC,OAAOJ,EAAE,CAACG,EAAE,EAAEH,CAAC,CAAC,QAAA,CAASG,EAAE,EAAC,CAAE,CAACH,EAAE,SAASpU,CAAC,GAAGoU,EAAE,gBAAgB,OAAO,KAAKA,EAAE,MAAMpU,CAAC,CAAC,CAAC,IAAI,KAAK,gBAAgB,OAAO,QAAQ,KAAK,YAAY,QAAQ,KAAK,eAAe,EAAE,CAAC,EAAE,CAAC,IAAI,YAAY,MAAM,SAASoU,EAAEpU,EAAE,CAAC,IAAI8B,EAAEsS,EAAE,MAAMwC,EAAC,EAAE,GAAG9U,IAAIsS,EAAEtS,EAAE,CAAC,EAAEA,EAAE,CAAC,IAAI9B,EAAE,SAAS8B,EAAE,CAAC,EAAE,EAAE,IAAI,KAAK,MAAM,QAAQ,eAAesS,CAAC,IAAIA,EAAE,KAAK,MAAM,QAAQA,CAAC,GAAG,KAAK,QAAQ,eAAeA,CAAC,EAAE,CAAC,IAAIG,EAAE,KAAK,QAAQH,CAAC,EAAE,OAAOpU,EAAEuU,EAAE,QAAQvU,CAAC,EAAEuU,CAAC,CAAC,OAAO,KAAK,cAAc,eAAeH,CAAC,EAAE,KAAK,cAAcA,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,aAAa,MAAM,UAAU,CAAC,OAAO,KAAK,WAAW,CAAC,EAAE,CAAC,IAAI,QAAQ,MAAM,SAASA,EAAE,CAAC,KAAK,MAAM,QAAQ,eAAeA,CAAC,IAAIA,EAAE,KAAK,MAAM,QAAQA,CAAC,GAAG,IAAIpU,EAAE,KAAK,QAAQoU,CAAC,EAAE,GAAG,CAACpU,EAAE,MAAM,IAAI,MAAM,6BAA6BoU,CAAC,EAAE,OAAOpU,CAAC,CAAC,EAAE,CAAC,IAAI,aAAa,MAAM,UAAU,CAAC,IAAIoU,EAAE,KAAK,QAAQ,OAAO,KAAK,KAAK,OAAO,EAAE,CAAC,CAAC,EAAE,GAAG,CAACA,EAAE,MAAM,IAAI,MAAM,yBAAyB,EAAE,OAAOA,CAAC,CAAC,EAAE,CAAC,IAAI,WAAW,MAAM,SAASA,EAAE,CAAC,OAAO,KAAK,MAAM,QAAQ,eAAeA,CAAC,IAAIA,EAAE,KAAK,MAAM,QAAQA,CAAC,GAAG,CAAC,CAAC,KAAK,QAAQA,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,cAAc,MAAM,SAASA,EAAE,CAAC,OAAO,KAAK,cAAc,eAAeA,CAAC,EAAE,KAAK,cAAcA,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,SAAS,MAAM,SAASA,EAAEpU,EAAE,CAAC,IAAI8B,EAAE,KAAK,GAAG9B,IAAIA,EAAE,IAAI,CAACoU,EAAE,OAAO,OAAO,KAAK,GAAQA,GAAL,KAAcA,GAAN,KAAQ,MAAM,CAAC,KAAK,MAAM,IAAI,CAAC,EAAE,IAAIG,EAAEC,EAAEJ,EAAE,YAAW,EAAG,MAAM,cAAc,EAAEI,EAAE,OAAO,IAAIA,EAAE,CAACA,EAAE,CAAC,EAAEA,EAAE,CAAC,CAAC,GAAGD,EAAEC,EAAE,KAAK,SAASJ,EAAE,CAAC,QAAQpU,EAAE8B,EAAE,QAAQyS,EAAEzS,EAAE,aAAa0S,EAAE,EAAEvK,EAAE,UAAU,CAAC,IAAInI,GAAEsS,EAAEgB,EAAC,EAAE,GAAGZ,IAAID,EAAEzS,EAAC,IAAIyS,EAAEzS,EAAC,EAAE,CAAA,GAAI,EAAEyS,EAAEA,EAAEzS,EAAC,GAAG,QAAQ,CAAC,IAAImI,EAAE,CAAA,EAAG,QAAQjC,MAAKuM,EAAE,QAAQ,GAAGA,EAAE,OAAO,GAAGvU,EAAE,CAAC,IAAIwB,EAAExB,EAAEgI,EAAC,EAAEqN,GAAE7T,EAAE,MAAM,OAAO8T,GAAElB,EAAE,OAAO,EAAEI,CAAC,EAAEe,GAAEF,GAAE,QAAQC,EAAC,EAAE,GAAOC,IAAJ,GAAM,CAAC,IAAIC,GAAED,GAAE,EAAED,IAAGtN,KAAIwN,GAAE,GAAGjB,EAAE,QAAQ,KAAK/S,CAAC,EAAE+S,EAAE,OAAOvM,EAAC,EAAExG,EAAEyI,EAAEjC,EAAC,EAAEwN,EAAC,CAAC,CAACjB,EAAE,QAAQ,MAAM,SAASH,GAAEpU,GAAE,CAAC,OAAOiK,EAAEmK,GAAE,EAAE,EAAEnK,EAAEjK,GAAE,EAAE,CAAC,EAAC,CAAE,CAACA,EAAEuU,EAAE,MAAM,EAAEa,GAAE,EAAEA,GAAEhB,EAAE,OAAOgB,KAAInL,IAAI,OAAOsK,EAAE,OAAO,EAAC,EAAG,QAAQ,SAASH,EAAE,CAAC,OAAOA,CAAC,IAAI,IAAInK,EAAE,KAAK,OAAOA,EAAEsK,EAAE,OAAO,EAAEiC,GAAE,MAAM,KAAKjC,CAAC,EAAEA,EAAE,OAAOA,EAAE,CAAC,EAAE,CAAA,IAAKtK,EAAE,OAAOjK,IAAIiK,EAAEA,EAAE,MAAM,EAAEjK,CAAC,GAAGiK,CAAC,CAAC,EAAE,CAAC,IAAI,iBAAiB,MAAM,SAASmK,EAAE,CAAC,IAAIpU,EAAE,OAAO,OAAO,CAAA,EAAGoU,EAAE,CAAC,GAAGA,EAAE,YAAY,CAAC,EAAE,OAAO,EAAE,CAAC,EAAEpU,EAAE,SAASA,EAAE,OAAOwV,EAAExV,CAAC,GAAG,IAAI8B,EAAE,IAAI6S,GAAE3U,CAAC,EAAE,OAAO,KAAK,QAAQ8B,EAAE,EAAE,EAAEA,EAAE,KAAK,gBAAgB,OAAO,KAAKA,CAAC,EAAEA,CAAC,CAAC,EAAE,CAAC,IAAI,WAAW,MAAM,SAASsS,EAAE,CAAC,IAAIpU,EAAE,KAAK8B,EAAE,KAAK,MAAM,OAAOsS,CAAC,EAAE,GAAG,CAAC,KAAK,cAActS,CAAC,EAAE,MAAM,GAAG,IAAIyS,EAAE,IAAII,GAAE7S,CAAC,EAAE,GAAG,KAAK,QAAQsS,CAAC,EAAEG,EAAEA,EAAE,SAAS,KAAK,cAAcA,EAAE,MAAM,EAAEA,GAAGA,EAAE,OAAO,QAAQC,KAAKD,EAAE,OAAO,CAAC,IAAItK,EAAEsK,EAAE,OAAOC,CAAC,EAAEvK,EAAE,SAAS,KAAK,cAAcA,EAAE,MAAM,EAAEA,EAAE,CAAC,OAAOsK,EAAE,WAAWA,EAAE,UAAU,SAAS,SAASzS,EAAE,CAAC9B,EAAE,WAAW8B,CAAC,IAAI9B,EAAE,WAAW8B,CAAC,EAAEsS,EAAE,EAAC,EAAGG,CAAC,CAAC,EAAE,CAAC,IAAI,mBAAmB,MAAM,SAASH,EAAE,CAAC,IAAIpU,EAAE,CAAC,KAAK,UAAU,CAAC,KAAK,SAAS,QAAQ,KAAK,SAAS,QAAQoU,CAAC,EAAE,GAAGtS,EAAE,EAAE,CAAC,KAAK,UAAU,CAAC,KAAK,SAAS,SAAS,KAAK,SAAS,QAAQsS,CAAC,EAAE,GAAG,MAAM,EAAE,CAACpU,GAAG8B,EAAE,CAAC,EAAE,CAAC,IAAI,gBAAgB,MAAM,SAASsS,EAAE,CAAC,MAAM,CAAC,KAAK,eAAe,KAAK,cAAcA,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAC,EAAGO,IAAE,UAAU,CAAC,OAAOyB,GAAG,SAAShC,EAAEpU,EAAE,CAAC,GAAGiW,GAAE,KAAK7B,CAAC,EAAE,KAAK,MAAM,OAAO,OAAO,CAAA,EAAGpU,CAAC,EAAE,KAAK,OAAO,KAAK,KAAK,MAAM,gBAAgB,QAAQ8B,KAAK,KAAK,OAAO,CAAA,EAAG+U,GAAE,CAAC,IAAItC,EAAEsC,GAAE/U,CAAC,EAAE0S,EAAE,KAAK,MAAM,gBAAgBD,CAAC,EAAEtK,EAAE,OAAO,OAAO,CAAA,EAAGjK,CAAC,EAAE,QAAQoV,KAAKZ,EAAEvK,EAAEmL,CAAC,EAAEZ,EAAEY,CAAC,EAAE,OAAOnL,EAAE,gBAAgBA,EAAE,UAAU,SAASnI,CAAC,EAAE,EAAE,KAAK,OAAO,KAAK,IAAIsS,EAAEnK,CAAC,CAAC,CAAC,CAAC,QAAQjC,KAAK,KAAK,WAAWmN,GAAE,KAAK,KAAK,EAAE,KAAK,WAAW,KAAKnN,CAAC,EAAE,KAAK,WAAWA,CAAC,EAAE,KAAK,YAAY,KAAK,MAAM,YAAY,KAAK,WAAW,KAAK,MAAM,YAAY,CAAC,EAAE,OAAO,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,UAAU,MAAM,SAASoM,EAAE,CAAC,OAAOA,GAAaA,GAAV,UAAa,KAAK,OAAO,KAAK,OAAOA,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,cAAc,MAAM,UAAU,CAAC,IAAIA,EAAE,EAAE,mBAAO,KAAK,MAAM,SAAS,QAAQ,CAAC,EAAEpU,EAAE,EAAE,IAAI,GAAG,KAAK,MAAM,SAAS,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAOoU,EAAE,IAAI,EAAE,OAAOpU,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,YAAY,MAAM,UAAU,CAAC,MAAM,CAAC,KAAK,MAAM,EAAE,OAAO,KAAK,WAAW,EAAE,OAAO,OAAO,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAI6U,IAAE,UAAU,CAAC,OAAOuB,GAAG,SAAShC,EAAEpU,EAAE8B,EAAEyS,EAAEC,EAAEvK,EAAEmL,EAAEpN,EAAE,CAACiO,GAAE,KAAK7B,CAAC,EAAE,KAAK,OAAOpU,EAAE,KAAK,QAAQwU,EAAE,KAAK,MAAM1S,EAAE,KAAK,KAAKyS,EAAE,KAAK,UAAUtK,EAAE,KAAK,UAAU,KAAK,WAAU,EAAG,KAAK,SAAS,KAAK,UAAS,EAAG,KAAK,SAAS,KAAK,UAAUjC,CAAC,EAAE,KAAK,QAAQ,KAAK,WAAW,KAAK,MAAWoN,IAAL,GAAOpV,EAAE,WAAW,KAAK,KAAK,UAAUA,EAAE,UAAS,EAAG,OAAO,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,WAAW,MAAM,UAAU,CAAC,OAAO,KAAK,OAAO,QAAQ,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,aAAa,MAAM,UAAU,CAAC,OAAO,KAAK,UAAS,GAAI,KAAK,aAAa,KAAK,UAAS,GAAI,KAAK,SAAS,CAAC,EAAE,CAAC,IAAI,YAAY,MAAM,UAAU,CAAC,MAAM,CAAC,aAAa,KAAK,KAAK,cAAc,KAAK,WAAU,CAAE,CAAC,CAAC,EAAE,CAAC,IAAI,YAAY,MAAM,SAASoU,EAAE,CAAC,IAAIpU,EAAE,CAAA,EAAG,OAAO,KAAK,UAAS,EAAGA,EAAE,CAAC,gBAAgB,OAAO,KAAK,SAAQ,EAAG,MAAM,SAAS,IAAI,eAAe,OAAO,MAAMoU,EAAE,KAAK,OAAOA,EAAE,IAAI,EAAE,KAAK,aAAa,CAAC,KAAK,cAAcpU,EAAE,CAAC,mBAAmB,KAAK,WAAW,aAAa,GAAGoU,IAAIpU,EAAE,KAAK,UAAS,EAAG,OAAO,OAAOA,EAAE,CAAC,SAAS,KAAK,MAAM,IAAIoU,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,EAAE,OAAO,OAAOpU,EAAE,CAAC,MAAMoU,EAAE,KAAK,OAAOA,EAAE,IAAI,CAAC,GAAGpU,CAAC,CAAC,EAAE,CAAC,IAAI,WAAW,MAAM,UAAU,CAAC,OAAO,KAAK,YAAY,GAAG,KAAK,UAAS,EAAG,KAAK,SAAQ,EAAG,OAAO,KAAK,YAAY,GAAG,KAAK,UAAU,KAAK,UAAU,KAAK,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,YAAY,MAAM,UAAU,CAAC,OAAO,KAAK,OAAO,CAAC,EAAE,CAAC,IAAI,YAAY,MAAM,UAAU,CAAC,OAAO,KAAK,WAAW,MAAM,CAAC,EAAE,CAAC,IAAI,YAAY,MAAM,UAAU,CAAC,GAAG,CAAC,KAAK,SAAQ,EAAG,MAAM,MAAM,GAAG,IAAIoU,EAAE,KAAK,WAAW,MAAM,WAAW,KAAK,IAAI,EAAE,OAAgBA,IAAT,QAAYA,CAAC,CAAC,EAAE,CAAC,IAAI,aAAa,MAAM,UAAU,CAAC,OAAO,KAAK,UAAS,EAAG,SAAS,KAAK,YAAY,SAAS,KAAK,UAAS,EAAG,QAAQ,UAAU,CAAC,CAAC,CAAC,CAAC,GAAC,EAAG,SAASe,GAAEf,EAAE,CAAC,IAAIpU,EAAEoU,EAAE,KAAKtS,EAAEsS,EAAE,YAAYG,EAAEH,EAAE,UAAUI,EAAEJ,EAAE,gBAAgBnK,EAAEmK,EAAE,UAAUgB,EAAEhB,EAAE,QAAQpM,EAAEoM,EAAE,OAAO5S,EAAE4S,EAAE,SAASiB,EAAEjB,EAAE,IAAItS,EAAE,CAAC,EAAEwT,EAAE,IAAI,OAAOD,EAAE,GAAG,EAAE,OAAOrN,EAAE,CAAC,GAAGqN,EAAE,KAAKrV,EAAE,OAAOsV,EAAE,UAAUrL,EAAE,OAAOjC,EAAE,SAASxG,CAAC,GAAG+S,IAAIe,GAAG,cAAc,OAAOf,EAAE,GAAG,GAAG,CAAC,GAAGc,EAAE,KAAKrV,EAAE,OAAOsV,EAAE,UAAUrL,EAAE,QAAQmL,EAAE,cAAc,KAAKb,IAAIC,EAAE,EAAE,MAAM,OAAO8B,GAAElB,CAAC,CAAC,EAAE,CAAC,SAAS0B,GAAE1C,EAAEpU,EAAE8B,EAAE,CAAC,OAAO9B,EAAEkW,GAAElW,CAAC,KAAKoU,EAAE,OAAO,eAAeA,EAAEpU,EAAE,CAAC,MAAM8B,EAAE,WAAW,GAAG,aAAa,GAAG,SAAS,EAAE,CAAC,EAAEsS,EAAEpU,CAAC,EAAE8B,EAAEsS,CAAC,CAAC,IAAI2C,GAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,QAAQ,EAAE,EAAE,QAAQ,CAAC,KAAK,QAAQ,QAAQ,EAAE,EAAE,SAAS,CAAC,KAAK,QAAQ,EAAE,KAAK,CAAC,KAAK,OAAO,QAAQ,CAAC,EAAE,IAAI,CAAC,KAAK,OAAO,QAAQ,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,MAAM,EAAE,SAAS,EAAE,EAAE,KAAK,CAAC,KAAK,OAAO,QAAQ,IAAI,EAAE,IAAI,CAAC,KAAK,OAAO,QAAQ,MAAM,CAAC,EAAEC,GAAE,CAAC,QAAQ,CAAC,KAAK,OAAO,QAAQ,CAAC,EAAE,iBAAiB,CAAC,KAAK,OAAO,QAAQ,EAAE,EAAE,UAAU,CAAC,KAAK,OAAO,QAAQ,EAAE,EAAE,MAAM,CAAC,KAAK,OAAO,QAAQ,aAAa,EAAE,MAAM,CAAC,KAAK,OAAO,QAAQ,kBAAkB,EAAE,MAAM,CAAC,KAAK,OAAO,QAAQ,SAAS,EAAE,IAAI,CAAC,KAAK,OAAO,QAAQ,OAAO,EAAE,KAAK,CAAC,KAAK,OAAO,QAAQ,IAAI,EAAE,YAAY,CAAC,KAAK,OAAO,QAAQ,CAAC,EAAE,OAAO,CAAC,KAAK,QAAQ,QAAQ,EAAE,EAAE,aAAa,CAAC,KAAK,QAAQ,QAAQ,EAAE,EAAE,UAAU,CAAC,KAAK,QAAQ,QAAQ,EAAE,EAAE,KAAK,CAAC,KAAK,OAAO,QAAQ,UAAU,CAAC,MAAM,CAAA,CAAE,CAAC,EAAE,YAAY,CAAC,KAAK,QAAQ,QAAQ,EAAE,EAAE,WAAW,CAAC,KAAK,QAAQ,QAAQ,EAAE,EAAE,eAAe,CAAC,KAAK,QAAQ,QAAQ,EAAE,EAAE,cAAc,CAAC,KAAK,QAAQ,QAAQ,EAAE,EAAE,eAAe,CAAC,KAAK,QAAQ,QAAQ,EAAE,EAAE,aAAa,CAAC,KAAK,OAAO,QAAQ,UAAU,CAAC,MAAM,CAAA,CAAE,CAAC,CAAC,EAAE,SAASC,GAAE7C,EAAEpU,EAAE,CAAC,IAAI8B,EAAE,OAAO,KAAKsS,CAAC,EAAE,GAAG,OAAO,sBAAsB,CAAC,IAAIG,EAAE,OAAO,sBAAsBH,CAAC,EAAEpU,IAAIuU,EAAEA,EAAE,QAAQ,SAASvU,EAAE,CAAC,OAAO,OAAO,yBAAyBoU,EAAEpU,CAAC,EAAE,UAAU,EAAC,GAAI8B,EAAE,KAAK,MAAMA,EAAEyS,CAAC,CAAC,CAAC,OAAOzS,CAAC,CAAC,SAASoV,GAAE9C,EAAE,CAAC,QAAQpU,EAAE,EAAEA,EAAE,UAAU,OAAOA,IAAI,CAAC,IAAI8B,EAAQ,UAAU9B,CAAC,GAAjB,KAAmB,UAAUA,CAAC,EAAE,CAAA,EAAGA,EAAE,EAAEiX,GAAE,OAAOnV,CAAC,EAAE,EAAE,EAAE,SAAS,SAAS9B,EAAE,CAAC8W,GAAE1C,EAAEpU,EAAE8B,EAAE9B,CAAC,CAAC,CAAC,EAAC,EAAG,OAAO,0BAA0B,OAAO,iBAAiBoU,EAAE,OAAO,0BAA0BtS,CAAC,CAAC,EAAEmV,GAAE,OAAOnV,CAAC,CAAC,EAAE,SAAS,SAAS9B,EAAE,CAAC,OAAO,eAAeoU,EAAEpU,EAAE,OAAO,yBAAyB8B,EAAE9B,CAAC,CAAC,CAAC,EAAC,CAAE,CAAC,OAAOoU,CAAC,CAAC,IAAIM,GAAEzM,EAAE,CAAC,MAAMiP,GAAEA,GAAE,CAAA,EAAGH,EAAC,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,OAAO,SAAS,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,QAAQ,aAAa,YAAY,EAAE,SAAS,CAAC,KAAK,UAAU,CAAC,OAAO,IAAIlC,GAAE,KAAK,YAAY,KAAK,KAAK,KAAK,IAAI,KAAK,OAAO,KAAK,SAAS,KAAK,QAAQ,KAAK,IAAI,CAAC,EAAE,cAAc,UAAU,CAAC,OAAO,KAAK,YAAY,UAAU,EAAE,MAAM,UAAU,CAAC,OAAO,KAAK,QAAQ,KAAK,YAAY,WAAW,IAAI,EAAE,YAAY,UAAU,CAAC,OAAgB,OAAO,KAAK,OAAtB,SAA4B,KAAK,KAAK,UAAU,KAAK,KAAK,EAAE,KAAK,KAAK,CAAC,EAAE,QAAQ,UAAU,CAAA,EAAG,QAAQ,CAAC,QAAQ,UAAU,CAAC,KAAK,MAAM,QAAQ,KAAK,WAAW,CAAC,EAAE,aAAa,UAAU,CAAC,KAAK,MAAM,aAAa,KAAK,WAAW,CAAC,EAAE,aAAa,UAAU,CAAC,KAAK,MAAM,aAAa,KAAK,WAAW,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,IAAIT,EAAE,KAAKpU,EAAEoU,EAAE,MAAM,GAAG,OAAOA,EAAE,KAAK,UAAUpU,EAAEoU,EAAE,IAAI,CAAC,IAAI,YAAY,YAAY,mBAAmB,MAAM,CAAC,MAAMA,EAAE,KAAK,MAAM,aAAaA,EAAE,KAAK,UAAU,aAAaA,EAAE,KAAK,EAAE,GAAG,CAAC,WAAWA,EAAE,aAAa,WAAWA,EAAE,aAAa,MAAMA,EAAE,OAAO,CAAC,EAAE,CAACpU,EAAE,OAAO,CAAC,MAAMoU,EAAE,KAAK,SAAS,MAAMA,EAAE,KAAK,QAAQ,EAAE,CAACA,EAAE,GAAGA,EAAE,GAAGA,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAEA,EAAE,GAAE,CAAE,GAAG,CAAA,CAAoB,EAAE,QAAQK,GAAExM,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,OAAO,SAAS,EAAE,EAAE,KAAK,CAAC,KAAK,OAAO,SAAS,EAAE,EAAE,GAAG,CAAC,KAAK,OAAO,SAAS,EAAE,EAAE,KAAK,CAAC,KAAK,OAAO,SAAS,EAAE,EAAE,OAAO,CAAC,KAAK,KAAK,EAAE,WAAW,CAAC,KAAK,OAAO,SAAS,EAAE,CAAC,EAAE,QAAQ,CAAC,YAAY,SAASmM,EAAE,CAAC,OAAO,KAAK,WAAW,eAAe,KAAK,WAAW,uBAAuB,KAAK,WAAW,cAAc,IAAIA,EAAE,IAAI,KAAK,WAAW,sBAAsB,IAAI,KAAK,GAAG,4BAA4B,EAAE,CAAC,EAAE,SAAS,CAAC,UAAU,UAAU,CAAC,MAAM,CAAC,CAAC,KAAK,MAAM,EAAE,SAAS,UAAU,CAAC,OAAgB,KAAK,MAAf,QAAmB,EAAE,WAAW,UAAU,CAAC,OAAO,KAAK,OAAO,OAAO,CAAC,EAAE,aAAa,UAAU,CAAC,IAAIA,EAAE,KAAK,OAAO,KAAK,OAAO,KAAK,SAASpU,EAAE,CAAC,MAAM,CAAC,YAAYA,EAAE,UAAU,IAAI6U,GAAE7U,EAAEoU,EAAE,WAAW,KAAKA,EAAE,WAAW,IAAIA,EAAE,WAAW,OAAOA,EAAE,WAAW,SAASA,EAAE,WAAW,aAAaA,EAAE,WAAW,SAAS,CAAC,CAAC,EAAC,CAAE,CAAC,EAAE,WAAW,CAAC,MAAMM,EAAC,CAAC,GAAG,UAAU,CAAC,IAAIN,EAAE,KAAKpU,EAAEoU,EAAE,MAAM,GAAG,OAAOA,EAAE,YAAYA,EAAE,UAAUA,EAAE,YAAYpU,EAAE,UAAU,CAAC,MAAM,CAAC,sBAAsB,GAAG,wBAAwB,CAACoU,EAAE,UAAU,EAAE,MAAM,CAAC,aAAaA,EAAE,KAAK,WAAWA,EAAE,EAAE,CAAC,CAAC,EAAE,CAACpU,EAAE,MAAM,CAAC,YAAY,2BAA2B,EAAE,CAACA,EAAE,KAAK,CAAC,YAAY,2BAA2B,EAAE,CAACoU,EAAE,GAAGA,EAAE,GAAGA,EAAE,KAAK,WAAWA,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAEA,EAAE,GAAG,GAAG,EAAEA,EAAE,GAAGA,EAAE,cAAc,SAAStS,EAAE,CAAC,IAAIyS,EAAEzS,EAAE,YAAY0S,EAAE1S,EAAE,UAAU,MAAM,CAAC0S,EAAE,UAAUxU,EAAE,SAAS,CAAC,IAAIuU,EAAE,GAAG,YAAY,mBAAmB,MAAMH,EAAE,YAAYG,CAAC,EAAE,MAAM,CAAC,aAAaC,EAAE,UAAU,KAAK,SAAS,gBAAgB,QAAQ,gBAAgB,IAAI,eAAe,OAAO,KAAK,SAAS,aAAaD,EAAE,WAAW,MAAMC,EAAE,KAAK,EAAE,GAAG,CAAC,WAAW,SAASxU,EAAE,CAACoU,EAAE,WAAW,QAAQI,EAAE,SAAQ,CAAE,CAAC,EAAE,WAAW,SAASxU,EAAE,CAACoU,EAAE,WAAW,QAAQI,EAAE,SAAQ,CAAE,CAAC,EAAE,MAAM,SAASxU,EAAE,CAACoU,EAAE,WAAW,QAAQI,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAACxU,EAAE,OAAO,CAAC,MAAMwU,EAAE,SAAS,MAAMA,EAAE,QAAQ,EAAE,CAACJ,EAAE,GAAGA,EAAE,GAAGI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAEJ,EAAE,GAAE,CAAE,CAAC,EAAC,EAAGA,EAAE,GAAG,GAAG,EAAEA,EAAE,WAAWA,EAAE,GAAE,EAAGpU,EAAE,MAAM,CAACA,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAKoU,EAAE,KAAK,MAAM,gBAAgB,OAAOA,EAAE,WAAW,OAAO,KAAKA,EAAE,WAAW,KAAK,IAAIA,EAAE,WAAW,GAAG,CAAC,CAAC,EAAEA,EAAE,GAAG,GAAG,EAAEpU,EAAE,MAAM,CAAC,YAAY,6BAA6B,EAAE,CAACoU,EAAE,GAAGA,EAAE,GAAGA,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAEA,EAAE,GAAE,CAAE,GAAG,CAAA,CAAoB,EAAE,QAAQa,GAAEhN,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,OAAO,SAAS,EAAE,CAAC,EAAE,MAAM,CAAC,QAAQ,EAAE,KAAK,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,QAAQ,CAAC,QAAQ,SAASmM,EAAE,CAAC,KAAK,QAAQA,GAAG,KAAK,MAAM,KAAK,MAAM,SAASA,CAAC,EAAE,KAAK,OAAO,CAAC,KAAK,MAAM,CAAC,CAAC,GAAG,UAAU,CAAC,IAAIA,EAAE,KAAKpU,EAAEoU,EAAE,MAAM,GAAG,OAAOpU,EAAE,MAAM,CAAC,MAAM,CAAC,2BAA2B,GAAG,kCAAkCoU,EAAE,MAAM,CAAC,EAAEA,EAAE,GAAG,GAAG,SAAStS,EAAE,CAAC,OAAO9B,EAAE,OAAO,CAAC,IAAI8B,EAAE,MAAM,CAAC,yBAAyB,GAAG,kCAAkCsS,EAAE,MAAMtS,CAAC,CAAC,EAAE,CAAC9B,EAAE,OAAO,CAAC,MAAM,wCAAwC8B,EAAE,GAAG,CAAC,MAAM,SAAS9B,EAAE,CAAC,OAAOoU,EAAE,QAAQtS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAoB,EAAE,QAAQiT,GAAE9M,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,OAAO,SAAS,EAAE,EAAE,MAAM,CAAC,KAAK,OAAO,SAAS,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,OAAO,MAAM,EAAE,SAAS,EAAE,EAAE,cAAc,CAAC,KAAK,QAAQ,QAAQ,EAAE,EAAE,WAAW,CAAC,KAAK,OAAO,SAAS,EAAE,EAAE,UAAU,CAAC,KAAK,OAAO,SAAS,EAAE,EAAE,aAAa,CAAC,KAAK,SAAS,SAAS,EAAE,CAAC,EAAE,SAAS,CAAC,UAAU,UAAU,CAAC,OAAO,KAAK,MAAM,KAAK,MAAM,EAAE,EAAE,gBAAgB,UAAU,CAAC,OAAO,KAAK,UAAU,WAAW,EAAE,eAAe,UAAU,CAAC,OAAO,KAAK,UAAU,SAAS,CAAC,EAAE,WAAW,CAAC,MAAMyM,GAAE,MAAMO,EAAC,CAAC,GAAG,UAAU,CAAC,IAAIb,EAAE,KAAKpU,EAAEoU,EAAE,MAAM,GAAG,OAAOpU,EAAE,MAAM,CAAC,YAAY,oBAAoB,EAAE,CAACoU,EAAE,MAAM,CAACpU,EAAE,MAAM,CAAC,YAAY,0BAA0B,EAAE,CAACA,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAKoU,EAAE,KAAK,MAAMA,EAAE,MAAM,OAAOA,EAAE,WAAW,OAAO,KAAKA,EAAE,WAAW,KAAK,IAAIA,EAAE,WAAW,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAEA,EAAE,GAAG,GAAG,EAAEpU,EAAE,MAAM,CAAC,YAAY,yBAAyB,EAAE,CAACA,EAAE,MAAM,CAAC,YAAY,yBAAyB,EAAE,CAACoU,EAAE,GAAGA,EAAE,GAAGA,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC,EAAEA,EAAE,GAAG,GAAG,EAAEpU,EAAE,MAAM,CAAC,YAAY,+BAA+B,EAAEoU,EAAE,GAAGA,EAAE,iBAAiB,SAAStS,EAAE,CAAC,OAAO9B,EAAE,OAAO,CAAC,IAAI8B,EAAE,YAAY,8BAA8B,EAAE,CAACsS,EAAE,GAAG,IAAIA,EAAE,GAAGtS,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAEsS,EAAE,GAAG,GAAG,EAAEpU,EAAE,MAAM,CAAC,YAAY,8BAA8B,EAAEoU,EAAE,GAAGA,EAAE,gBAAgB,SAAStS,EAAE,CAAC,OAAO9B,EAAE,OAAO,CAAC,IAAI8B,EAAE,YAAY,6BAA6B,EAAE,CAACsS,EAAE,GAAGA,EAAE,GAAGtS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,EAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC9B,EAAE,MAAM,CAAC,YAAY,0BAA0B,EAAE,CAACA,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAKoU,EAAE,KAAK,MAAMA,EAAE,UAAU,OAAOA,EAAE,WAAW,OAAO,KAAKA,EAAE,WAAW,KAAK,IAAIA,EAAE,WAAW,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAEA,EAAE,GAAG,GAAG,EAAEpU,EAAE,MAAM,CAAC,YAAY,yBAAyB,EAAE,CAACA,EAAE,OAAO,CAAC,YAAY,wBAAwB,EAAE,CAACoU,EAAE,GAAGA,EAAE,GAAGA,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAEA,EAAE,GAAG,GAAG,EAAEA,EAAE,cAAcpU,EAAE,MAAM,CAAC,YAAY,0BAA0B,EAAE,CAACA,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAKoU,EAAE,UAAU,IAAI,EAAE,GAAG,CAAC,OAAO,SAASpU,EAAE,CAAC,OAAOoU,EAAE,aAAapU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAEoU,EAAE,GAAE,CAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAA,CAAoB,EAAE,QAAQ+C,GAAElP,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,OAAO,SAAS,EAAE,EAAE,KAAK,CAAC,KAAK,OAAO,SAAS,EAAE,EAAE,UAAU,CAAC,KAAK,QAAQ,QAAQ,EAAE,EAAE,SAAS,CAAC,KAAK,SAAS,SAAS,EAAE,EAAE,YAAY,CAAC,KAAK,SAAS,SAAS,EAAE,EAAE,aAAa,CAAC,KAAK,SAAS,SAAS,EAAE,EAAE,YAAY,CAAC,KAAK,SAAS,SAAS,EAAE,EAAE,UAAU,CAAC,KAAK,SAAS,SAAS,EAAE,EAAE,QAAQ,CAAC,KAAK,SAAS,SAAS,EAAE,CAAC,EAAE,MAAM,CAAC,SAAS,QAAQ,UAAU,YAAY,aAAa,WAAW,EAAE,KAAK,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,SAAS,CAAC,WAAW,UAAU,CAAC,OAAO,KAAK,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,UAAU,CAAC,KAAK,MAAM,SAAS,KAAK,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,UAAU,CAAC,KAAK,MAAM,EAAE,CAAC,EAAE,QAAQ,UAAU,CAAC,IAAImM,EAAE,KAAK,IAAI,cAAc,OAAO,EAAE,KAAK,WAAWA,EAAE,MAAK,CAAE,CAAC,GAAG,UAAU,CAAC,IAAIA,EAAE,KAAKpU,EAAEoU,EAAE,MAAM,GAAG,OAAOpU,EAAE,MAAM,CAAC,YAAY,mBAAmB,EAAE,CAACA,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC,KAAK,QAAQ,QAAQ,UAAU,MAAMoU,EAAE,MAAM,WAAW,OAAO,CAAC,EAAE,MAAM,CAAC,KAAK,OAAO,YAAYA,EAAE,KAAK,OAAO,KAAK,UAAU,oBAAoB,OAAO,YAAY,kBAAkB,aAAa,sBAAsB,mBAAmB,+BAA+B,EAAE,SAAS,CAAC,MAAMA,EAAE,KAAK,EAAE,GAAG,CAAC,QAAQ,CAAC,SAASpU,EAAE,CAAC,MAAM,CAACA,EAAE,KAAK,QAAQ,KAAK,GAAGoU,EAAE,GAAGpU,EAAE,QAAQ,OAAO,GAAGA,EAAE,IAAI,CAAC,OAAO,WAAW,CAAC,GAAG,WAAWA,GAAOA,EAAE,SAAN,EAAa,KAAK,SAASA,EAAE,CAAC,OAAOoU,EAAE,MAAM,YAAYpU,CAAC,CAAC,EAAE,MAAM,KAAK,SAAS,CAAC,EAAE,SAASA,EAAE,CAAC,MAAM,CAACA,EAAE,KAAK,QAAQ,KAAK,GAAGoU,EAAE,GAAGpU,EAAE,QAAQ,QAAQ,GAAGA,EAAE,IAAI,CAAC,QAAQ,YAAY,CAAC,GAAG,WAAWA,GAAOA,EAAE,SAAN,EAAa,KAAK,UAAU,CAAC,OAAOoU,EAAE,MAAM,YAAY,CAAC,EAAE,MAAM,KAAK,SAAS,CAAC,EAAE,SAASpU,EAAE,CAAC,MAAM,CAACA,EAAE,KAAK,QAAQ,KAAK,GAAGoU,EAAE,GAAGpU,EAAE,QAAQ,OAAO,GAAGA,EAAE,IAAI,CAAC,OAAO,WAAW,CAAC,EAAE,KAAK,UAAU,CAAC,OAAOoU,EAAE,MAAM,WAAW,CAAC,EAAE,MAAM,KAAK,SAAS,CAAC,EAAE,SAASpU,EAAE,CAAC,MAAM,CAACA,EAAE,KAAK,QAAQ,KAAK,GAAGoU,EAAE,GAAGpU,EAAE,QAAQ,KAAK,GAAGA,EAAE,IAAI,CAAC,KAAK,SAAS,CAAC,EAAE,KAAK,SAASA,EAAE,CAAC,OAAOoU,EAAE,MAAM,UAAUpU,CAAC,CAAC,EAAE,MAAM,KAAK,SAAS,CAAC,EAAE,SAASA,EAAE,CAAC,MAAM,CAACA,EAAE,KAAK,QAAQ,KAAK,GAAGoU,EAAE,GAAGpU,EAAE,QAAQ,QAAQ,GAAGA,EAAE,IAAI,OAAO,EAAE,KAAK,UAAU,CAAC,OAAOoU,EAAE,MAAM,OAAO,CAAC,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,EAAE,MAAM,SAASpU,EAAE,CAACA,EAAE,OAAO,YAAYoU,EAAE,MAAMpU,EAAE,OAAO,MAAM,CAAC,CAAC,CAAC,EAAEoU,EAAE,GAAG,GAAG,EAAEpU,EAAE,OAAO,CAAC,YAAY,SAAS,MAAM,CAAC,GAAG,iCAAiC,CAAC,EAAE,CAACoU,EAAE,GAAG;AAAA,aAAwF,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA,CAAoB,EAAEY,GAAEmC,GAAE,QAAQ,SAASC,GAAEhD,EAAEpU,EAAE,EAAQA,GAAN,MAASA,EAAEoU,EAAE,UAAUpU,EAAEoU,EAAE,QAAQ,QAAQtS,EAAE,EAAEyS,EAAE,IAAI,MAAMvU,CAAC,EAAE8B,EAAE9B,EAAE8B,IAAIyS,EAAEzS,CAAC,EAAEsS,EAAEtS,CAAC,EAAE,OAAOyS,CAAC,CAACzS,EAAE,GAAG,EAAE,IAAIuV,IAAG,UAAU,CAAC,OAAOjB,GAAG,SAAShC,EAAEpU,EAAE,CAAC,IAAI8B,EAAEyS,EAAE0B,GAAE,KAAK7B,CAAC,EAAE,KAAK,IAAIpU,EAAE,KAAK,MAAMA,EAAE,KAAK,KAAK,SAASA,EAAE,QAAQ,KAAK,YAAY,CAAA,GAAI8B,EAAE,KAAK,aAAa,KAAK,MAAMA,GAAE,SAASsS,EAAE,CAAC,GAAG,MAAM,QAAQA,CAAC,EAAE,OAAOgD,GAAEhD,CAAC,CAAC,GAAEG,EAAE,KAAK,MAAM,YAAY,IAAG,SAASH,EAAE,CAAC,GAAgB,OAAO,OAApB,KAAkCA,EAAE,OAAO,QAAQ,GAAvB,MAAgCA,EAAE,YAAY,GAApB,KAAsB,OAAO,MAAM,KAAKA,CAAC,CAAC,GAAEG,CAAC,IAAG,SAASH,EAAEpU,EAAE,CAAC,GAAGoU,EAAE,CAAC,GAAa,OAAOA,GAAjB,SAAmB,OAAOgD,GAAEhD,EAAEpU,CAAC,EAAE,IAAI8B,EAAE,OAAO,UAAU,SAAS,KAAKsS,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,OAAiBtS,IAAX,UAAcsS,EAAE,cAActS,EAAEsS,EAAE,YAAY,MAActS,IAAR,OAAmBA,IAAR,MAAU,MAAM,KAAKsS,CAAC,EAAgBtS,IAAd,aAAiB,2CAA2C,KAAKA,CAAC,EAAEsV,GAAEhD,EAAEpU,CAAC,EAAE,MAAM,CAAC,GAAEuU,CAAC,IAAG,UAAU,CAAC,MAAM,IAAI,UAAU;AAAA,mFAAsI,CAAC,GAAC,CAAE,EAAE,KAAK,YAAY,KAAK,YAAY,QAAQ,SAASH,EAAE,CAAC,OAAOA,EAAE,OAAO,OAAO,CAAC,IAAI,KAAK,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,OAAO,KAAK,WAAW,EAAE,KAAK,eAAe,KAAK,YAAY,CAAC,EAAE,KAAK,aAAa,KAAK,KAAK,aAAa,KAAK,KAAK,wBAAwB,EAAE,KAAK,gBAAgB,EAAE,GAAG,CAAC,CAAC,IAAI,WAAW,MAAM,UAAU,CAAC,IAAIA,EAAE,KAAK,IAAI,MAAM,OAAO,GAAGA,EAAE,CAAC,QAAQpU,EAAEoU,EAAE,UAAUtS,EAAE,KAAK,mBAAmB,CAAC,EAAEyS,EAAE,EAAEC,EAAE,KAAK,mBAAmB,OAAOD,EAAEC,EAAED,IAAI,CAAC,IAAItK,EAAE,KAAK,mBAAmBsK,CAAC,EAAEa,EAAE,KAAK,IAAI,qBAAqBb,CAAC,EAAE,GAAGa,GAAGA,EAAE,IAAI,UAAU,GAAGpV,EAAE,MAAM8B,EAAEmI,CAAC,CAAC,KAAK,eAAenI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,gBAAgB,IAAI,UAAU,CAAC,OAAO,KAAK,WAAW,CAAC,EAAE,CAAC,IAAI,qBAAqB,IAAI,UAAU,CAAC,OAAO,KAAK,aAAa,CAAC,CAAC,GAAG,SAAS,KAAK,SAAS,OAAO,KAAK,YAAY,CAAC,EAAE,KAAK,YAAY,QAAQ,SAASsS,EAAE,CAAC,OAAOA,EAAE,OAAO,OAAO,CAAC,EAAC,CAAE,CAAC,EAAE,CAAC,IAAI,uBAAuB,IAAI,UAAU,CAAC,OAAO,KAAK,yBAAyB,EAAE,KAAK,mBAAmB,KAAK,uBAAuB,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,gBAAgB,MAAM,SAASA,EAAE,CAAC,IAAIpU,EAAE,KAAK,GAAG,CAAC,KAAK,aAAa,CAAC,IAAI8B,EAAE,KAAK,mBAAmB,QAAQsS,CAAC,EAAEG,EAAE,KAAK,IAAI,qBAAqBzS,CAAC,EAAE,KAAK,IAAI,gBAAe,UAAU,CAAC,GAAGyS,EAAE,CAAC,IAAIzS,EAAEyS,EAAE,IAAI,UAAUH,EAAE,QAAQtS,EAAE,GAAG9B,EAAE,IAAI,MAAM,OAAO,UAAU8B,CAAC,CAAC,KAAI,KAAK,eAAe,KAAK,mBAAmBA,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,WAAW,MAAM,SAASsS,EAAE,CAAC,IAAIpU,EAAE,KAAK,MAAM,OAAOoU,EAAE,KAAK,gBAAgB,EAAE,KAAK,aAAapU,EAAE,KAAK,wBAAwB,EAAE,KAAK,gBAAgB,EAAE,KAAK,mBAAkB,CAAE,CAAC,EAAE,CAAC,IAAI,eAAe,MAAM,SAASoU,EAAE,CAAC,KAAK,aAAaA,EAAE,KAAK,gBAAgB,GAAG,KAAK,wBAAwB,EAAE,CAAC,EAAE,CAAC,IAAI,eAAe,MAAM,SAASA,EAAE,CAAC,KAAK,aAAa,IAAI,CAAC,EAAE,CAAC,IAAI,cAAc,MAAM,UAAU,CAAC,KAAK,gBAAgB,EAAE,KAAK,iBAAiB,GAAG,KAAK,yBAAyB,EAAE,KAAK,wBAAwB,EAAE,KAAK,wBAAwB,EAAE,KAAK,gBAAgB,KAAK,mBAAmB,KAAK,uBAAuB,EAAE,OAAO,OAAO,GAAG,KAAK,mBAAkB,CAAE,CAAC,EAAE,CAAC,IAAI,eAAe,MAAM,UAAU,CAAC,KAAK,gBAAgB,KAAK,aAAa,KAAK,uBAAuB,EAAE,EAAE,KAAK,iBAAiB,GAAG,KAAK,yBAAyB,EAAE,KAAK,yBAAyB,KAAK,mBAAmB,OAAO,KAAK,wBAAwB,KAAK,mBAAmB,OAAO,EAAE,KAAK,gBAAgB,GAAG,KAAK,mBAAkB,CAAE,CAAC,EAAE,CAAC,IAAI,cAAc,MAAM,UAAU,CAAC,GAAO,KAAK,iBAAT,GAAyB,OAAO,KAAK,aAAY,EAAG,IAAIA,EAAE,KAAK,mBAAmB,KAAK,uBAAuB,EAAE,OAAO,OAAOpU,EAAE,KAAK,SAAS,KAAK,gBAAgBA,EAAEoU,IAAIpU,EAAEoU,EAAE,KAAK,UAAU,QAAQtS,EAAE,EAAEA,EAAE9B,EAAE8B,IAAI,KAAK,aAAY,EAAG,KAAK,mBAAkB,CAAE,CAAC,EAAE,CAAC,IAAI,YAAY,MAAM,UAAU,CAAC,IAAIsS,EAAE,KAAK,SAAS,KAAK,gBAAgBA,EAAE,IAAIA,EAAE,KAAK,wBAAwB,EAAE,KAAK,mBAAmB,KAAK,wBAAwB,CAAC,EAAE,OAAO,OAAO,KAAK,SAAS,GAAG,QAAQpU,EAAE,EAAEA,EAAEoU,EAAEpU,IAAI,KAAK,YAAW,EAAG,KAAK,oBAAoB,CAAC,EAAE,CAAC,IAAI,qBAAqB,MAAM,UAAU,CAAC,IAAIoU,EAAE,KAAK,KAAK,aAAa,KAAK,mBAAmB,KAAK,uBAAuB,EAAE,OAAO,KAAK,eAAe,EAAE,KAAK,IAAI,WAAW,UAAU,CAAC,IAAIpU,EAAEoU,EAAE,IAAI,MAAM,OAAOtS,EAAE9B,EAAE,cAAc,4BAA4B,EAAEuU,EAAEvU,EAAE,UAAUA,EAAE,aAAa8B,GAAGA,EAAE,UAAUA,EAAE,aAAayS,EAAEvU,EAAE,YAAYA,EAAE,WAAW8B,EAAE,cAAcA,GAAGA,EAAE,UAAU9B,EAAE,YAAYA,EAAE,WAAW8B,EAAE,aAAa,EAAC,CAAE,CAAC,EAAE,CAAC,IAAI,eAAe,MAAM,SAASsS,EAAE,CAAC,OAAUA,GAAJ,GAAM,EAAE,KAAK,mBAAmBA,CAAC,EAAE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,GAAC,EAAG,SAASkD,GAAGlD,EAAEpU,EAAE,CAAC,IAAI8B,EAAE,OAAO,KAAKsS,CAAC,EAAE,GAAG,OAAO,sBAAsB,CAAC,IAAIG,EAAE,OAAO,sBAAsBH,CAAC,EAAEpU,IAAIuU,EAAEA,EAAE,QAAQ,SAASvU,EAAE,CAAC,OAAO,OAAO,yBAAyBoU,EAAEpU,CAAC,EAAE,UAAU,EAAC,GAAI8B,EAAE,KAAK,MAAMA,EAAEyS,CAAC,CAAC,CAAC,OAAOzS,CAAC,CAAC,SAASyV,GAAGnD,EAAE,CAAC,QAAQpU,EAAE,EAAEA,EAAE,UAAU,OAAOA,IAAI,CAAC,IAAI8B,EAAQ,UAAU9B,CAAC,GAAjB,KAAmB,UAAUA,CAAC,EAAE,CAAA,EAAGA,EAAE,EAAEsX,GAAG,OAAOxV,CAAC,EAAE,EAAE,EAAE,SAAS,SAAS9B,EAAE,CAAC8W,GAAE1C,EAAEpU,EAAE8B,EAAE9B,CAAC,CAAC,CAAC,EAAC,EAAG,OAAO,0BAA0B,OAAO,iBAAiBoU,EAAE,OAAO,0BAA0BtS,CAAC,CAAC,EAAEwV,GAAG,OAAOxV,CAAC,CAAC,EAAE,SAAS,SAAS9B,EAAE,CAAC,OAAO,eAAeoU,EAAEpU,EAAE,OAAO,yBAAyB8B,EAAE9B,CAAC,CAAC,CAAC,EAAC,CAAE,CAAC,OAAOoU,CAAC,CAAC,IAAIoD,GAAG,CAAC,OAAO,SAAS,SAAS,iBAAiB,WAAW,CAAC,OAAO,iBAAiB,OAAO,kBAAkB,QAAQ,oBAAoB,OAAO,gBAAgB,OAAO,mBAAmB,MAAM,eAAe,SAAS,WAAW,OAAO,kBAAkB,QAAQ,UAAU,QAAQ,UAAU,MAAM,QAAQ,OAAO,QAAQ,CAAC,EAAEC,GAAG,CAAC,MAAMF,GAAGA,GAAG,GAAGP,EAAC,EAAE,CAAA,EAAG,CAAC,KAAK,CAAC,KAAK,OAAO,SAAS,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,SAAS,aAAa,EAAE,KAAK,UAAU,CAAC,MAAM,CAAC,WAAW,KAAK,MAAMxV,EAAE,IAAI,MAAM,GAAG,KAAK,YAAY,KAAK,IAAI6V,GAAG,IAAI,CAAC,CAAC,EAAE,SAAS,CAAC,aAAa,UAAU,CAAC,OAAOE,GAAG,CAAC,MAAM,KAAK,eAAe,IAAI,EAAE,KAAK,YAAY,CAAC,EAAE,WAAW,UAAU,CAAC,MAAM,CAAC,OAAO,KAAK,OAAO,KAAK,KAAK,WAAW,IAAI,KAAK,IAAI,aAAa,KAAK,aAAa,UAAU,KAAK,UAAU,cAAc,KAAK,KAAK,aAAa,sBAAsB,KAAK,KAAK,qBAAqB,QAAQ,KAAK,aAAa,KAAK,IAAI,EAAE,QAAQ,KAAK,aAAa,KAAK,IAAI,EAAE,QAAQ,KAAK,aAAa,KAAK,IAAI,CAAC,CAAC,EAAE,UAAU,UAAU,CAAC,MAAM,CAAC,KAAK,KAAK,UAAU,CAAC,EAAE,eAAe,UAAU,CAAC,OAAO,KAAK,SAAS,KAAK,UAAU,IAAI,GAAG,GAAE,UAAU,CAAC,GAAgB,OAAO,SAApB,IAA6B,MAAO,GAAE,IAAInD,EAAE,SAAS,cAAc,KAAK,EAAEA,EAAE,MAAM,MAAM,QAAQA,EAAE,MAAM,OAAO,QAAQA,EAAE,MAAM,SAAS,SAASA,EAAE,MAAM,SAAS,WAAWA,EAAE,MAAM,IAAI,UAAU,SAAS,KAAK,YAAYA,CAAC,EAAE,IAAIpU,EAAEoU,EAAE,YAAYA,EAAE,YAAY,OAAO,SAAS,KAAK,YAAYA,CAAC,EAAEpU,CAAC,IAAG,EAAE,mBAAmB,UAAU,CAAC,OAAO,KAAK,KAAK,kBAAkB,EAAE,WAAW,UAAU,CAAC,OAAO,OAAO,OAAOyW,GAAEe,GAAG,KAAK,IAAI,CAAC,CAAC,EAAE,UAAU,UAAU,CAAC,GAAG,CAAC,OAAO,KAAK,KAAK,MAAM,KAAK,KAAK,CAAC,OAAOpD,EAAE,CAAC,OAAO,QAAQ,MAAM,0BAA0B,KAAK,MAAM,uDAAuD,EAAE,QAAQ,MAAMA,CAAC,EAAE,KAAK,KAAK,WAAU,CAAE,CAAC,EAAE,YAAY,UAAU,CAAC,OAAa,KAAK,KAAK,cAAhB,IAA4B,CAAC,EAAE,MAAM,CAAC,KAAK,UAAU,CAAC,KAAK,aAAa,KAAK,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,SAAS,UAAU,CAAC,KAAK,gBAAgB,CAAC,KAAK,kBAAkB,KAAK,gBAAgB,GAAG,OAAO,sBAAsB,KAAK,cAAc,KAAK,IAAI,CAAC,EAAE,EAAE,cAAc,UAAU,CAAC,KAAK,gBAAgB,GAAG,KAAK,KAAK,SAAQ,CAAE,EAAE,cAAc,SAASA,EAAE,CAAC,KAAK,KAAK,cAAcA,CAAC,CAAC,EAAE,SAAS,SAASA,EAAE,CAAC,KAAK,KAAK,SAASA,CAAC,CAAC,EAAE,aAAa,SAASA,EAAE,CAAC,KAAK,KAAK,aAAaA,CAAC,CAAC,EAAE,aAAa,SAASA,EAAE,CAAC,KAAK,KAAK,aAAaA,CAAC,CAAC,EAAE,YAAY,SAASA,EAAE,CAAC,IAAIpU,EAAE,KAAK,KAAK,gBAAgB,KAAK,KAAK,cAAcoU,GAAG,KAAK,KAAK,kBAAkBpU,GAAGoU,EAAE,gBAAgB,EAAE,aAAa,UAAU,CAAC,KAAK,KAAK,cAAc,EAAE,YAAY,UAAU,CAAC,KAAK,KAAK,aAAa,EAAE,UAAU,SAASA,EAAE,CAAC,KAAK,KAAK,UAAS,EAAGA,EAAE,eAAc,CAAE,EAAE,QAAQ,UAAU,CAAC,KAAK,KAAK,eAAe,KAAK,MAAM,SAAS,KAAK,KAAK,YAAY,EAAEc,GAAE,IAAI,KAAK,KAAK,YAAY,EAAE,EAAE,aAAa,SAASd,EAAE,CAAC,KAAK,MAAM,SAASA,CAAC,EAAEc,GAAE,IAAId,CAAC,CAAC,EAAE,aAAa,SAASA,EAAE,CAACA,EAAE,gBAAe,CAAE,EAAE,aAAa,SAASA,EAAE,CAAC,KAAK,WAAWA,EAAE5S,EAAE,OAAO,CAAC,KAAK4S,CAAC,CAAC,EAAE,KAAK,MAAM,cAAcA,CAAC,CAAC,EAAE,qBAAqB,SAASA,EAAE,CAAC,IAAIpU,EAAE,KAAK,MAAM,cAAcoU,CAAC,EAAE,OAAOpU,GAAG,MAAMA,EAAEA,EAAE,CAAC,EAAEA,CAAC,CAAC,EAAE,WAAW,CAAC,QAAQoB,GAAE,SAASqT,GAAE,QAAQM,GAAE,OAAOC,EAAC,CAAC,EAAE0C,GAAGzP,EAAEwP,IAAI,UAAU,CAAC,IAAIrD,EAAE,KAAKpU,EAAEoU,EAAE,MAAM,GAAG,OAAOpU,EAAE,UAAU,CAAC,YAAY,+BAA+B,MAAMoU,EAAE,YAAY,EAAE,CAACA,EAAE,eAAepU,EAAE,MAAM,CAAC,YAAY,uCAAuC,EAAE,CAACA,EAAE,UAAU,CAAC,MAAM,CAAC,KAAKoU,EAAE,KAAK,KAAKA,EAAE,WAAW,MAAMA,EAAE,MAAM,WAAWA,EAAE,KAAK,cAAc,kBAAkBA,EAAE,KAAK,cAAc,EAAE,GAAG,CAAC,MAAMA,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,EAAEA,EAAE,GAAE,EAAGA,EAAE,GAAG,GAAG,EAAEA,EAAE,GAAG,kBAAkB,UAAU,CAAC,MAAM,CAACA,EAAE,WAAWpU,EAAE,SAAS,CAAC,IAAI,SAAS,MAAM,CAAC,KAAKoU,EAAE,KAAK,KAAKA,EAAE,WAAW,aAAaA,EAAE,UAAU,YAAYA,EAAE,QAAQ,EAAE,GAAG,CAAC,OAAOA,EAAE,SAAS,UAAUA,EAAE,YAAY,WAAWA,EAAE,aAAa,UAAUA,EAAE,YAAY,QAAQA,EAAE,UAAU,MAAMA,EAAE,QAAQ,OAAOA,EAAE,YAAY,CAAC,CAAC,EAAEA,EAAE,IAAI,CAAC,GAAG,CAAC,KAAKA,EAAE,KAAK,KAAKA,EAAE,KAAK,UAAUA,EAAE,UAAU,SAASA,EAAE,QAAQ,CAAC,EAAEA,EAAE,GAAG,GAAG,EAAEpU,EAAE,MAAM,CAAC,IAAI,SAAS,YAAY,oBAAoB,MAAM,CAAC,KAAK,UAAU,EAAE,GAAG,CAAC,OAAOoU,EAAE,QAAQ,CAAC,EAAE,CAACpU,EAAE,MAAM,CAAC,IAAI,gBAAgB,MAAM,CAAC,GAAG,kBAAkB,KAAK,UAAU,gBAAgB,MAAM,CAAC,EAAE,CAACoU,EAAE,GAAG,gBAAgB,EAAEA,EAAE,GAAG,GAAG,EAAEA,EAAE,GAAGA,EAAE,KAAK,oBAAoB,SAAStS,EAAEyS,EAAE,CAAC,OAAOvU,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC,KAAK,OAAO,QAAQ,SAAS,MAAMoU,EAAE,gBAAgBtS,GAAGsS,EAAE,KAAK,gBAAgBA,EAAE,YAAY,WAAW,kEAAkE,CAAC,EAAE,IAAItS,EAAE,GAAG,IAAI,cAAcyS,EAAE,SAAS,GAAG,MAAM,CAAC,KAAKH,EAAE,KAAK,KAAKA,EAAE,WAAW,GAAGtS,EAAE,GAAG,KAAKA,EAAE,KAAK,OAAOA,EAAE,OAAO,cAAcsS,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAEA,EAAE,GAAG,GAAG,EAAEA,EAAE,GAAG,mBAAmB,UAAU,CAAC,MAAM,CAACA,EAAE,YAAYpU,EAAE,MAAM,CAAC,YAAY,uCAAuC,EAAE,CAACA,EAAE,UAAU,CAAC,MAAM,CAAC,KAAKoU,EAAE,KAAK,MAAMA,EAAE,MAAM,MAAMA,EAAE,KAAK,aAAa,aAAaA,EAAE,UAAU,kBAAkBA,EAAE,cAAc,cAAcA,EAAE,WAAW,aAAaA,EAAE,UAAU,iBAAiBA,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAEA,EAAE,GAAE,CAAE,CAAC,GAAG,CAAC,KAAKA,EAAE,KAAK,MAAMA,EAAE,MAAM,MAAMA,EAAE,KAAK,aAAa,UAAUA,EAAE,UAAU,cAAcA,EAAE,cAAc,WAAWA,EAAE,WAAW,UAAUA,EAAE,UAAU,aAAaA,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAA,CAAoB,EAAEU,GAAG4C,GAAG,OAAO,GAAC,EAAGnD,CAAC,GAAC,CAAE,EAAC,oBCuB5y9C,QCpBgBoD,GAAW,eAAe,EAAE,QAAQ,EAAI,EAAE,MAAK,EC2C/D9X,EAAS+X,GAAI9X,GAAK+X,GAAKC,EAAG,EAGhB9X,EAAE,cAAc,EACdA,EAAE,gBAAgB,EAElBA,EAAE,gBAAgB,EAClBA,EAAE,iBAAiB,EAClBA,EAAE,mBAAmB,EACtBA,EAAE,eAAe,EACjBA,EAAE,kBAAkB,EACrBA,EAAE,cAAc,EACbA,EAAE,YAAY,EAChBA,EAAE,iBAAiB,EAClBA,EAAE,SAAS,EACXA,EAAE,SAAS,EACbA,EAAE,OAAO,EACRA,EAAE,QAAQ,EAIpB,IAAI+X,GAAM,IAAK,IAAK,GAAI/X,EAAE,oBAAoB,CAAC,EAC/C,IAAI+X,GAAM,IAAK,IAAK,IAAK/X,EAAE,iBAAiB,CAAC,EAC7C,IAAI+X,GAAM,IAAK,IAAK,IAAK/X,EAAE,wBAAwB,CAAC,EACpD,IAAI+X,GAAM,IAAK,IAAK,GAAI/X,EAAE,kBAAkB,CAAC,EAC7C,IAAI+X,GAAM,IAAK,IAAK,GAAI/X,EAAE,uBAAuB,CAAC,EAClD,IAAI+X,GAAM,GAAI,GAAI,GAAI/X,EAAE,gBAAgB,CAAC,EAsD5BA,EAAE,eAAe,EClBhCH,EAASmY,EAAG,ECxGZnY,EAASoY,EAAG,ECCZpY,EAASqY,EAAE,ECAXrY,EAASK,EAAG,ECOZL,EAASsY,EAAG,EAqHZtY,EAASuY,EAAG,EACkBC,GAAe,GAAI,SAAS,sBAuH1DxY,EAASyY,EAAE,EAmDItY,EAAE,mBAAmB,EAIrBA,EAAE,iEAAiE,EPhT7E,MAAM,UAAU,OACjB,MAAM,UAAU,KAAO,SAASuY,EAAW,CACvC,GAAI,OAAS,KACT,MAAM,IAAI,UAAU,kDAAkD,EAE1E,GAAI,OAAOA,GAAc,WACrB,MAAM,IAAI,UAAU,8BAA8B,EAOtD,QALIC,EAAO,OAAO,IAAI,EAClBC,EAASD,EAAK,SAAW,EACzBE,EAAU,UAAU,CAAC,EACrB9N,EAEK9I,EAAI,EAAGA,EAAI2W,EAAQ3W,IAExB,GADA8I,EAAQ4N,EAAK1W,CAAC,EACVyW,EAAU,KAAKG,EAAS9N,EAAO9I,EAAG0W,CAAI,EACtC,OAAO5N,CAInB,GAGA,QAAU,OAAO,OAAO,aAAgB,WAAY,CACtD,IAAS+N,EAAT,SAAuB7E,EAAO8E,EAAQ,CACpCA,EAASA,GAAU,CACjB,QAAS,GACT,WAAY,GACZ,OAAQ,MACd,EACI,IAAIC,EAAM,SAAS,YAAY,aAAa,EAC5C,OAAAA,EAAI,gBAAgB/E,EAAO8E,EAAO,QAASA,EAAO,WAAYA,EAAO,MAAM,EACpEC,CACT,EAEG,OAAO,OAAO,MAAU,MAC1BF,EAAc,UAAY,OAAO,MAAM,WAGxC,OAAO,YAAcA,CACvB,CQvCA,OAAO,wBAA0B,CAAA,EACjC,OAAO,kBAAoB,CAACrH,EAAIwH,EAAUC,EAAWlN,IAAU,CAC7DmN,GAAe1H,EAAIwH,EAAUC,EAAWlN,CAAK,CAC/C,EACA,SAASmN,GAAe1H,EAAIwH,EAAUC,EAAY,IAAM,CACxD,EAAGlN,EAAO,CACR,MAAMoN,EAAoB,CACxB,mBAAoB,GACpB,UAAW,GACX,GAAGpN,CACP,EACE,GAAI,OAAO,sBAAsByF,CAAE,EAAG,CACpC4H,GAAO,MAAM,oCAAoC5H,CAAE,qBAAqB,EACxE,MACF,CACA,OAAO,sBAAsBA,CAAE,EAAI,CACjC,GAAAA,EACA,SAAAwH,EACA,UAAAC,EACA,GAAGE,CACP,CACA,CA8BA,OAAO,uCAAyC,CAAA,EAChD,OAAO,+BAAiCE,GAuBxC,SAASA,GAA4B7H,EAAIwH,EAAUC,EAAY,IAAM,CACrE,EAAGK,EAAO,QAAS,CACjB,GAAI,OAAO,qCAAqC9H,CAAE,EAAG,CACnD4H,GAAO,MAAM,0CAA0C5H,CAAE,qBAAqB,EAC9E,MACF,CACA,OAAO,qCAAqCA,CAAE,EAAI,CAChD,GAAAA,EACA,SAAAwH,EACA,UAAAC,EACA,KAAAK,CACJ,CACA,CCjEAvZ,EAASwZ,EAAG,EAoRZxZ,EAASyZ,EAAE,EAIFtZ,EAAE,UAAU,EAETuZ,GAAU,OAAQ,oBAAoB,EAElD,OAAO,oCAAsCC,GAAU,OAAQ,0BAA2B,CAAA,CAAE,EAC5F,OAAO,8CAAgDA,GAAU,OAAQ,gCAAiC,CAAA,CAAE,EA8C5G3Z,EAAS4Z,GAAKC,EAAG,EA8FjB7Z,EAAS8Z,EAAG,EAsIZ9Z,EAAS+Z,GAAKH,GAAK3B,EAAG,EAsWtBjY,EAASga,GAAKC,EAAG,EC7vBjB,MAAMC,GAAaC,GAAW,UAAU,EAClCC,GAAoBD,GAAW,YAAY,EACjD,SAASE,GAAaC,EAAO,CAC3B,OAGEA,IAAU,OAASA,EAAQ,IAAMA,IAAU,IAE/C,CAIA,SAASC,GAA0BD,EAAO,CACxC,OAAOA,IAAU,OAASA,EAAQ,GAAKA,IAAU,GACnD,CAIA,MAAME,GAAqBL,GAAW,IAAI,OAAO,gBAAiB,GAAG,CAAC,EAChEM,GAAoBN,GAAW,IAAI,EACzC,SAASA,GAAWjY,EAAO,CACzB,OAAOwY,EACP,SAASA,EAAMJ,EAAO,CACpB,OAAOA,IAAU,MAAQA,EAAQ,IAAMpY,EAAM,KAAK,OAAO,aAAaoY,CAAK,CAAC,CAC9E,CACF,CAOA,MAAMK,IAeH,SAASC,EAAM,CACd,GAAIA,GAAS,KACX,OAAOC,GAET,GAAI,OAAOD,GAAS,WAClB,OAAOE,GAAYF,CAAI,EAEzB,GAAI,OAAOA,GAAS,SAClB,OAAO,MAAM,QAAQA,CAAI,EAAIG,GAAWH,CAAI,EAG1CI,GAEEJ,CACV,EAGI,GAAI,OAAOA,GAAS,SAClB,OAAOK,GAAYL,CAAI,EAEzB,MAAM,IAAI,MAAM,8CAA8C,CAChE,GAEF,SAASG,GAAWG,EAAO,CACzB,MAAMC,EAAS,CAAA,EACf,IAAIhS,EAAQ,GACZ,KAAO,EAAEA,EAAQ+R,EAAM,QACrBC,EAAOhS,CAAK,EAAIwR,GAAQO,EAAM/R,CAAK,CAAC,EAEtC,OAAO2R,GAAYM,CAAG,EACtB,SAASA,KAAOC,EAAY,CAC1B,IAAIC,EAAS,GACb,KAAO,EAAEA,EAASH,EAAO,QACvB,GAAIA,EAAOG,CAAM,EAAE,MAAM,KAAMD,CAAU,EAAG,MAAO,GAErD,MAAO,EACT,CACF,CACA,SAASL,GAAkBN,EAAO,CAChC,MAAMa,EAEJb,EAEF,OAAOI,GAAYU,CAAG,EACtB,SAASA,EAAIC,EAAM,CACjB,MAAMC,EAGJD,EAEF,IAAIjR,EACJ,IAAKA,KAAOkQ,EACV,GAAIgB,EAAalR,CAAG,IAAM+Q,EAAc/Q,CAAG,EAAG,MAAO,GAEvD,MAAO,EACT,CACF,CACA,SAASyQ,GAAYP,EAAO,CAC1B,OAAOI,GAAY/O,CAAI,EACvB,SAASA,EAAK0P,EAAM,CAClB,OAAOA,GAAQA,EAAK,OAASf,CAC/B,CACF,CACA,SAASI,GAAYa,EAAc,CACjC,OAAOjB,EACP,SAASA,EAAM3P,EAAO5B,EAAOyS,EAAQ,CACnC,MAAO,CAAA,EACLC,GAAe9Q,CAAK,GAAK4Q,EAAa,KACpC,KACA5Q,EACA,OAAO5B,GAAU,SAAWA,EAAQ,OACpCyS,GAAU,MAClB,EAEE,CACF,CACA,SAASf,IAAK,CACZ,MAAO,EACT,CACA,SAASgB,GAAe9Q,EAAO,CAC7B,OAAOA,IAAU,MAAQ,OAAOA,GAAU,UAAY,SAAUA,CAClE,CAuxCE4P,GAAQ,CACN,QACA,SACA,WAEA,WACA,oBACA,QACA,iBACA,aAEA,aACA,OACA,gBAEA,oBAEA,oBACA,SACA,OAEA,eACJ,CAAG,EA6YH,MAAMmB,GAAY,CAChB,SAAUC,GACV,QAAS,EACX,EACMlb,GAAS,CACb,SAAUmb,GACV,QAAS,EACX,EACMC,GAAO,CACX,SAAUC,GACV,QAAS,EACX,EACMC,GAAQ,CACZ,SAAUC,GACV,QAAS,EACX,EACMC,GAAsB,CAC1B,SAAUC,GACV,QAAS,EACX,EACMC,GAAc,CAClB,SAAUC,GACV,SAAUC,EACZ,EACMC,GAAmB,CACvB,SAAUC,GACV,SAAUC,EACZ,EACMC,EAAgB,CACpB,SAAUC,GACV,SAAUC,EACZ,EACMzN,EAAO,CAAA,EAMb,IAAI0N,GAAO,GACX,KAAOA,GAAO,KACZ1N,EAAK0N,EAAI,EAAIH,EACbG,KACIA,KAAS,GAAIA,GAAO,GACfA,KAAS,KAAIA,GAAO,IAE/B1N,EAAK,EAAE,EAAIuN,EACXvN,EAAK,EAAE,EAAIuN,EACXvN,EAAK,EAAE,EAAIuN,EACXvN,EAAK,EAAE,EAAIuN,EACXvN,EAAK,EAAE,EAAI,CAACuN,EAAeH,EAAgB,EAC3CpN,EAAK,GAAG,EAAI,CAACuN,EAAeH,EAAgB,EAC5CpN,EAAK,EAAE,EAAI,CAACuN,EAAeN,EAAW,EACtCjN,EAAK,GAAG,EAAI,CAACuN,EAAeN,EAAW,EACvC,SAASO,GAAsBG,EAASC,EAAKC,EAAK,CAChD,MAAMC,EAAO,KACb,IAAIC,EACAC,EACJ,OAAO/U,EACP,SAASA,EAAM+R,EAAO,CACpB,MAAI,CAACiD,GAASjD,CAAK,GAAK,CAACyC,GAAc,KAAKK,EAAMA,EAAK,QAAQ,GAAKI,GAAmBJ,EAAK,MAAM,EACzFD,EAAI7C,CAAK,GAElB2C,EAAQ,MAAM,iBAAiB,EAC/BA,EAAQ,MAAM,sBAAsB,EAC7BQ,EAAMnD,CAAK,EACpB,CACA,SAASmD,EAAMnD,EAAO,CACpB,OAAIiD,GAASjD,CAAK,GAChB2C,EAAQ,QAAQ3C,CAAK,EACdmD,GAELnD,IAAU,IACZ2C,EAAQ,QAAQ3C,CAAK,EACdoD,GAEFP,EAAI7C,CAAK,CAClB,CACA,SAASoD,EAAYpD,EAAO,CAC1B,OAAIA,IAAU,GACL2C,EAAQ,MACbZ,GACAsB,EACAC,CACR,EAAQtD,CAAK,EAELA,IAAU,IAAMA,IAAU,IAAMF,GAAkBE,CAAK,GACzDgD,EAAO,GACPL,EAAQ,QAAQ3C,CAAK,EACdoD,GAEFC,EAAiBrD,CAAK,CAC/B,CACA,SAASsD,EAAetD,EAAO,CAC7B,OAAA2C,EAAQ,QAAQ3C,CAAK,EACrB+C,EAAM,GACCK,CACT,CACA,SAASC,EAAiBrD,EAAO,CAC/B,OAAIgD,GAAQD,GAAOnD,GAAWkD,EAAK,QAAQ,GACzCH,EAAQ,KAAK,sBAAsB,EACnCA,EAAQ,KAAK,iBAAiB,EACvBC,EAAI5C,CAAK,GAEX6C,EAAI7C,CAAK,CAClB,CACF,CACA,SAASkC,GAAoBS,EAASC,EAAKC,EAAK,CAC9C,MAAMC,EAAO,KACb,OAAOS,EACP,SAASA,EAASvD,EAAO,CACvB,OAAIA,IAAU,IAAMA,IAAU,KAAO,CAACmC,GAAY,KAAKW,EAAMA,EAAK,QAAQ,GAAKI,GAAmBJ,EAAK,MAAM,EACpGD,EAAI7C,CAAK,GAElB2C,EAAQ,MAAM,iBAAiB,EAC/BA,EAAQ,MAAM,oBAAoB,EAC3BA,EAAQ,MACbnB,GACAmB,EAAQ,QAAQpc,GAAQoc,EAAQ,QAAQhB,GAAM6B,CAAQ,EAAGX,CAAG,EAC5DA,CACN,EAAM7C,CAAK,EACT,CACA,SAASwD,EAASxD,EAAO,CACvB,OAAA2C,EAAQ,KAAK,oBAAoB,EACjCA,EAAQ,KAAK,iBAAiB,EACvBC,EAAI5C,CAAK,CAClB,CACF,CACA,SAASqC,GAAyBM,EAASC,EAAKC,EAAK,CACnD,MAAMC,EAAO,KACb,IAAIW,EAAS,GACTC,EAAO,GACX,OAAOC,EACP,SAASA,EAAc3D,EAAO,CAC5B,OAAKA,IAAU,IAAMA,IAAU,MAAQsC,GAAiB,KAAKQ,EAAMA,EAAK,QAAQ,GAAK,CAACI,GAAmBJ,EAAK,MAAM,GAClHH,EAAQ,MAAM,iBAAiB,EAC/BA,EAAQ,MAAM,qBAAqB,EACnCc,GAAU,OAAO,cAAczD,CAAK,EACpC2C,EAAQ,QAAQ3C,CAAK,EACd4D,GAEFf,EAAI7C,CAAK,CAClB,CACA,SAAS4D,EAAqB5D,EAAO,CACnC,GAAIJ,GAAWI,CAAK,GAAKyD,EAAO,OAAS,EACvC,OAAAA,GAAU,OAAO,cAAczD,CAAK,EACpC2C,EAAQ,QAAQ3C,CAAK,EACd4D,EAET,GAAI5D,IAAU,GAAI,CAChB,MAAMnP,EAAW4S,EAAO,YAAW,EACnC,GAAI5S,IAAa,QAAUA,IAAa,QACtC,OAAA8R,EAAQ,QAAQ3C,CAAK,EACd6D,CAEX,CACA,OAAOhB,EAAI7C,CAAK,CAClB,CACA,SAAS6D,EAAsB7D,EAAO,CACpC,OAAIA,IAAU,IACZ2C,EAAQ,QAAQ3C,CAAK,EACjB0D,EACKI,GAETJ,EAAO,GACAG,IAEFhB,EAAI7C,CAAK,CAClB,CACA,SAAS8D,EAAc9D,EAAO,CAC5B,OAAOA,IAAU,MAAQD,GAAaC,CAAK,GAAKC,GAA0BD,CAAK,GAAKG,GAAkBH,CAAK,GAAKE,GAAmBF,CAAK,EAAI6C,EAAI7C,CAAK,EAAI2C,EAAQ,QAAQpc,GAAQoc,EAAQ,QAAQhB,GAAMoC,CAAa,EAAGlB,CAAG,EAAE7C,CAAK,CACnO,CACA,SAAS+D,EAAc/D,EAAO,CAC5B,OAAA2C,EAAQ,KAAK,qBAAqB,EAClCA,EAAQ,KAAK,iBAAiB,EACvBC,EAAI5C,CAAK,CAClB,CACF,CACA,SAASyB,GAAkBkB,EAASC,EAAKC,EAAK,CAC5C,IAAI5D,EAAO,EACX,OAAO+E,EACP,SAASA,EAAgBhE,EAAO,CAC9B,OAAKA,IAAU,IAAMA,IAAU,MAAQf,EAAO,GAC5CA,IACA0D,EAAQ,QAAQ3C,CAAK,EACdgE,GAELhE,IAAU,IAAMf,IAAS,GAC3B0D,EAAQ,QAAQ3C,CAAK,EACdiE,GAEFpB,EAAI7C,CAAK,CAClB,CACA,SAASiE,EAAejE,EAAO,CAC7B,OAAOA,IAAU,KAAO6C,EAAI7C,CAAK,EAAI4C,EAAI5C,CAAK,CAChD,CACF,CACA,SAAS0B,GAAeiB,EAASC,EAAKC,EAAK,CACzC,IAAIqB,EACAC,EACAT,EACJ,OAAOU,EACP,SAASA,EAAapE,EAAO,CAC3B,OAAIA,IAAU,IAAMA,IAAU,GACrB2C,EAAQ,MAAMd,GAAOwC,EAAaC,CAAmB,EAAEtE,CAAK,EAEjEA,IAAU,MAAQC,GAA0BD,CAAK,GAAKG,GAAkBH,CAAK,GAAKA,IAAU,IAAME,GAAmBF,CAAK,EACrHqE,EAAYrE,CAAK,GAE1B0D,EAAO,GACPf,EAAQ,QAAQ3C,CAAK,EACdoE,EACT,CACA,SAASE,EAAoBtE,EAAO,CAClC,OAAIA,IAAU,GACZkE,EAA0B,IAE1BC,EAA8BD,EAC9BA,EAA0B,QAE5BvB,EAAQ,QAAQ3C,CAAK,EACdoE,CACT,CACA,SAASC,EAAYrE,EAAO,CAC1B,OAAImE,GAA+BD,GAA2B,CAACR,EACtDb,EAAI7C,CAAK,EAEX4C,EAAI5C,CAAK,CAClB,CACF,CACA,SAAS4B,GAAae,EAASC,EAAK,CAClC,IAAI2B,EAAW,EACXC,EAAY,EAChB,OAAOC,EACP,SAASA,EAAWzE,EAAO,CACzB,OAAIA,IAAU,IACZuE,IACA5B,EAAQ,QAAQ3C,CAAK,EACdyE,GAELzE,IAAU,IAAMwE,EAAYD,EACvBG,EAAkB1E,CAAK,EAE5BA,IAAU,IAAMA,IAAU,IAAMA,IAAU,IAAMA,IAAU,IAAMA,IAAU,IAAMA,IAAU,IAAMA,IAAU,IAAMA,IAAU,IAAMA,IAAU,IAAMA,IAAU,IAAMA,IAAU,IAAMA,IAAU,IAAMA,IAAU,IAAMA,IAAU,IAAMA,IAAU,IACrO2C,EAAQ,MAAMd,GAAOe,EAAK8B,CAAiB,EAAE1E,CAAK,EAEvDA,IAAU,MAAQC,GAA0BD,CAAK,GAAKG,GAAkBH,CAAK,EACxE4C,EAAI5C,CAAK,GAElB2C,EAAQ,QAAQ3C,CAAK,EACdyE,EACT,CACA,SAASC,EAAkB1E,EAAO,CAChC,OAAIA,IAAU,IACZwE,IAEF7B,EAAQ,QAAQ3C,CAAK,EACdyE,CACT,CACF,CACA,SAAS3C,GAAca,EAASC,EAAKC,EAAK,CACxC,OAAO8B,EACP,SAASA,EAAO3E,EAAO,CACrB,OAAIA,IAAU,IAAMA,IAAU,IAAMA,IAAU,IAAMA,IAAU,IAAMA,IAAU,IAAMA,IAAU,IAAMA,IAAU,IAAMA,IAAU,IAAMA,IAAU,IAAMA,IAAU,IAAMA,IAAU,IAAMA,IAAU,KAC5L2C,EAAQ,QAAQ3C,CAAK,EACd2E,GAEL3E,IAAU,IACZ2C,EAAQ,QAAQ3C,CAAK,EACd4E,GAEL5E,IAAU,IACZ2C,EAAQ,QAAQ3C,CAAK,EACd6E,GAIP7E,IAAU,IACVA,IAAU,MAAQC,GAA0BD,CAAK,GAAKG,GAAkBH,CAAK,EAEtE4C,EAAI5C,CAAK,EAEX6C,EAAI7C,CAAK,CAClB,CACA,SAAS6E,EAAkB7E,EAAO,CAChC,OAAIA,IAAU,MAAQA,IAAU,IAAMA,IAAU,IAAMC,GAA0BD,CAAK,GAAKG,GAAkBH,CAAK,EACxG4C,EAAI5C,CAAK,EAEX2E,EAAO3E,CAAK,CACrB,CACA,SAAS4E,EAAkB5E,EAAO,CAChC,OAAOJ,GAAWI,CAAK,EAAI8E,EAAmB9E,CAAK,EAAI6C,EAAI7C,CAAK,CAClE,CACA,SAAS8E,EAAmB9E,EAAO,CACjC,OAAIA,IAAU,IACZ2C,EAAQ,QAAQ3C,CAAK,EACd2E,GAEL/E,GAAWI,CAAK,GAClB2C,EAAQ,QAAQ3C,CAAK,EACd8E,GAEFjC,EAAI7C,CAAK,CAClB,CACF,CACA,SAASgC,GAA4BW,EAASC,EAAKC,EAAK,CACtD,OAAO5U,EACP,SAASA,EAAM+R,EAAO,CACpB,OAAA2C,EAAQ,QAAQ3C,CAAK,EACd+E,CACT,CACA,SAASA,EAAM/E,EAAO,CACpB,OAAOF,GAAkBE,CAAK,EAAI6C,EAAI7C,CAAK,EAAI4C,EAAI5C,CAAK,CAC1D,CACF,CACA,SAASmC,GAAYnC,EAAO,CAC1B,OAAOA,IAAU,MAAQA,IAAU,IAAMA,IAAU,IAAMA,IAAU,IAAMA,IAAU,IAAMA,IAAU,IAAMA,IAAU,KAAOC,GAA0BD,CAAK,CAC3J,CACA,SAASsC,GAAiBtC,EAAO,CAC/B,MAAO,CAACJ,GAAWI,CAAK,CAC1B,CACA,SAASyC,GAAczC,EAAO,CAC5B,MAAO,EAAEA,IAAU,IAAMiD,GAASjD,CAAK,EACzC,CACA,SAASiD,GAASjD,EAAO,CACvB,OAAOA,IAAU,IAAMA,IAAU,IAAMA,IAAU,IAAMA,IAAU,IAAMF,GAAkBE,CAAK,CAChG,CACA,SAASkD,GAAmB8B,EAAQ,CAClC,IAAInW,EAAQmW,EAAO,OACf5d,EAAS,GACb,KAAOyH,KAAS,CACd,MAAMtH,EAAQyd,EAAOnW,CAAK,EAAE,CAAC,EAC7B,IAAKtH,EAAM,OAAS,aAAeA,EAAM,OAAS,eAAiB,CAACA,EAAM,UAAW,CACnFH,EAAS,GACT,KACF,CACA,GAAIG,EAAM,8BAA+B,CACvCH,EAAS,GACT,KACF,CACF,CACA,OAAI4d,EAAO,OAAS,GAAK,CAAC5d,IACxB4d,EAAOA,EAAO,OAAS,CAAC,EAAE,CAAC,EAAE,8BAAgC,IAExD5d,CACT,CAynCwB6d,GAAI,IAAI,ECz0GhCvf,EAASwf,GAAKxH,EAAG,EAgEF7X,EAAE,mBAAmB,ECzKpCH,EAASyf,EAAE,EA0FF,CAEL,GAAGC,GAAS,MA0EZ,YAEWvf,EAAE,cAAc,CA0B7B,ECrMFH,EAAS2f,EAAG,ECgCZ3f,EAAS4f,EAAG,EACZ,KAAM,CAACC,EAAK,EAAIlG,GAAU,OAAQ,SAAU,CAAE,QAAS,MAAM,CAAE,EAAE,QAAQ,MAAM,IAAK,CAAC,GAAK,CAAA,EC7B1F3Z,EAAS8f,EAAG,EA6MEC,GAAS,SAASC,EAAO,CACjC,KAAK,UAAUA,CAAK,CACtB,EAAG,GAAG,ECrNVhV,GAAQ,OAAO,QAAQ,KAAO,GAC9BA,GAAQ,OAAO,QAAQ,MAAQ,CAAE,KAAM,IAAK,KAAM,GAAG,EACrDA,GAAQ,OAAO,QAAQ,SAAW,GAClCA,GAAQ,OAAO,QAAQ,eAAe,EAAI,ECL1C,MAAM7B,GAAQ,CACZ,SAAU,CAKR,UAAW,CACT,OAAO8W,GAAc,KACvB,CACJ,CACA,ECsFAC,GAAA,CACA,KAAA,qBACA,WAAA,CACA,iBAAAC,GAKA,gBAAAC,GACA,eAAAC,GACA,UAAAC,GAGA,kBAAAC,GAEA,iBAAAC,EAAA,EAGA,OAAA,CACAC,GACAC,EAAA,EAGA,MAAA,CACA,MAAA,CACA,KAAA,OACA,SAAA,EAAA,CACA,EAGA,MAAA,CACA,MAAA,CACA,mBAAA,GACA,aAAA,EACA,uBAAA,GACA,kBAAA,GACA,aAAAC,GAAAC,GAAA,KAAA,EAAA,CACA,cAAA,SAAA,KAAA,GAAA,KAAA,KAAA,GAAA,CAAA,EAAA,CACA,CAAA,CAEA,EAEA,SAAA,CACA,OAAA,CACA,OAAA,KAAA,OAAA,QAAA,eAAA,KAAA,SAAA,CACA,EAEA,WAAA,CACA,OAAA,KAAA,KACA,EAEA,cAAA,CACA,OAAA,KAAA,OAAA,QAAA,oBAAA,KAAA,SAAA,CACA,EAEA,qBAAA,CACA,OAAA,KAAA,OAAA,QAAA,mBAAA,KAAA,SAAA,CACA,CAAA,EAGA,MAAA,aAAA,CACA,MAAA,KAAA,eAAA,EACA,MAAA,KAAA,kBAAA,CACA,EAEA,QAAA,CACA,MAAA,gBAAA,CACA,MAAAC,EAAA,MAAA,KAAA,gBACA,GAAAC,EAAA,IAAA,KAAA,KAAA,GACAC,GACA,KAAA,YAAA,EAGAF,IAAA,OACA,KAAA,kBAAAA,EAAA,WAAA,eAAA,EAEA,EAEA,MAAA,mBAAA,EACA,MAAA,KAAA,qBACA,GAAAC,EAAA,IAAA,KAAA,KAAA,GACA,CAAA,GAAAE,GAAA,GAAAD,EAAA,EACA,KAAA,YAAA,GAGA,QAAAE,GAAA,CACAA,EAAA,OAAA,CAEA,WAAAC,GAAA,qCAAAD,EAAA,MAAA,wBAAA,KAAA,KAAA,EAAA,EAEA,WAAA,EAAA,CACA,CACA,CAAA,CACA,EAEA,MAAA,kBAAAE,EAAA,CACA,KAAA,mBAAA,GACA,MAAA,KAAA,OAAA,SAAA,uBAAA,CAAA,mBAAA,KAAA,MAAA,KAAA,KAAA,UAAA,aAAAA,EAAA,EAEA,MAAA,KAAA,kBAAA,CACA,EAEA,MAAA,2BAAAA,EAAA,CACA,KAAA,MAAA,kBAAA,eAAAA,CAAA,EACA,MAAA,KAAA,OAAA,SAAA,4BAAA,CAAA,mBAAA,KAAA,MAAA,KAAA,KAAA,UAAA,gBAAAA,EAAA,CACA,EAEA,EAAAC,EAAA,CAEA","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32]}
\ No newline at end of file
diff --git a/js/SharedAlbumContent-C-cYwLEv.chunk.mjs b/js/SharedAlbumContent-BowPGwCK.chunk.mjs
similarity index 97%
rename from js/SharedAlbumContent-C-cYwLEv.chunk.mjs
rename to js/SharedAlbumContent-BowPGwCK.chunk.mjs
index b9e91ca18e..f979d15577 100644
--- a/js/SharedAlbumContent-C-cYwLEv.chunk.mjs
+++ b/js/SharedAlbumContent-BowPGwCK.chunk.mjs
@@ -1,2 +1,2 @@
-import{t as s}from"./preload-helper-iHri5ttz.chunk.mjs";import{S as i}from"./index-x9vhq81Z.chunk.mjs";import{i as n,A as r,B as m,x as c,C as u}from"./index-6_vkf3an.chunk.mjs";import{N as d}from"./NcActionButton-K4jUGMlW-Bs_jOwCM.chunk.mjs";import{N as h}from"./index-DPkUyJ8g-BELfZN9P.chunk.mjs";import{N as b}from"./NcEmptyContent-BkpeWiV5.chunk.mjs";import{N as p}from"./NcUserBubble-BGfZAi4c-azL-EDwM.chunk.mjs";import{d as f,D as N,e as A,P as F,M as g,n as C}from"./icons-BPrPKxzl.chunk.mjs";import{C as _}from"./CollectionContent-DBHf8FYU.chunk.mjs";import{H as v}from"./HeaderNavigation-6G2FmN95.chunk.mjs";import{P as y}from"./PhotosPicker-CkZuVLOp.chunk.mjs";import{F as k}from"./FetchCollectionContentMixin-B2MWChoj.chunk.mjs";import{F as P}from"./FetchFilesMixin-Ck9H2-jY.chunk.mjs";import"./index-DjIio1qt.chunk.mjs";import"./index-CJ3jRDua.chunk.mjs";import"./index-BSfP607A.chunk.mjs";import"./useHotKey-CPjpPwsD.chunk.mjs";import"./NcProgressBar-D7zYeXBH-Bj5rIFx5.chunk.mjs";import"./createElementId-DhjFt1I9-B2HCdIOx.chunk.mjs";import"./video-B7iCXJqN.chunk.mjs";import"./NcAvatar-DkAX4nqq-B0poB0w8.chunk.mjs";import"./FileComponent-Bw4ZFXMR.chunk.mjs";import"./NcCheckboxRadioSwitch-D4IV4zWy-CSDAL8Yg.chunk.mjs";import"./NcIconToggleSwitch-0NTw7i-t-DOrRmNgh.chunk.mjs";import"./useModelMigration-EhAWvqDD-C15wbtL_.chunk.mjs";import"./FilesSelectionMixin-GHX9hTKF.chunk.mjs";import"./fileFetcher-p0a3IV9C.chunk.mjs";import"./NcSelect-CHc1QupB-BHJEUvv_.chunk.mjs";import"./FilesByMonthMixin-DvgVVt_F.chunk.mjs";import"./collectionFetcher-DyDb1Dp2.chunk.mjs";import"./AbortControllerMixin-CCU9Utyn.chunk.mjs";import"./PhotoSearch-CvX3QQRp.chunk.mjs";const S={name:"SharedAlbumContent",components:{MapMarkerOutline:g,Plus:F,Close:A,DeleteOutline:N,ImagePlusOutline:f,NcEmptyContent:b,NcActions:r,NcActionButton:d,NcActionSeparator:h,NcButton:n,NcUserBubble:p,CollectionContent:_,PhotosPicker:y,HeaderNavigation:v},mixins:[k,P],props:{albumName:{type:String,default:"/"}},setup(){return{isMobile:u()}},data(){return{showAddPhotosModal:!1,loadingCount:0,loadingAddFilesToAlbum:!1,collaboratorTypes:i}},computed:{files(){return this.$store.state.files.files},album(){return this.$store.getters.getSharedAlbum(this.albumName)},albumFileIds(){return this.$store.getters.getSharedAlbumFiles(this.albumName)},albumOriginalName(){return this.albumName.replace(new RegExp(`\\(${this.album?.attributes.collaborators[0].id}\\)$`),"")},albumFileName(){return this.$store.getters.getSharedAlbumName(this.albumName)},removableSelectedFiles(){return(this.$refs.collectionContent?.selectedFileIds).map(t=>this.$store.state.files.files[t]).filter(t=>t.attributes["photos-album-file-origin"]!=="filters").map(t=>t.fileid.toString())}},async mounted(){this.fetchAlbum(),this.fetchAlbumContent()},methods:{async fetchAlbum(){await this.fetchCollection(this.albumFileName,c)},async fetchAlbumContent(){await this.fetchCollectionFiles(this.albumFileName,m)},async handleFilesPicked(t){this.showAddPhotosModal=!1,await this.$store.dispatch("addFilesToCollection",{collectionFileName:this.album.root+this.album.path,fileIdsToAdd:t}),await this.fetchAlbumContent()},async handleRemoveFilesFromAlbum(t){this.$refs.collectionContent?.onUncheckFiles(t),await this.$store.dispatch("removeFilesFromCollection",{collectionFileName:this.album.root+this.album.path,fileIdsToRemove:t})},async handleDeleteAlbum(){await this.$store.dispatch("deleteCollection",{collectionFileName:this.album.root+this.album.path})&&this.$router.push("/sharedalbums")},t:s}};var w=function(){var t=this,o=t._self._c;return o("div",[o("CollectionContent",{ref:"collectionContent",attrs:{collection:t.album,"collection-file-ids":t.albumFileIds,loading:t.loadingCollection||t.loadingCollectionFiles,error:t.errorFetchingCollection||t.errorFetchingCollectionFiles},scopedSlots:t._u([{key:"header",fn:function({selectedFileIds:e,resetSelection:l}){return o("HeaderNavigation",{key:"navigation",attrs:{loading:t.loadingCollectionFiles,params:{albumName:t.albumName},path:"/"+t.albumName,title:t.albumOriginalName},on:{refresh:t.fetchAlbumContent}},[t.album!==void 0&&t.album.attributes.location!==""?o("div",{staticClass:"album__location",attrs:{slot:"subtitle"},slot:"subtitle"},[o("MapMarkerOutline"),t._v(t._s(t.album.attributes.location)+" ⸱ "+t._s(t.t("photos","Shared by"))+" "),o("NcUserBubble",{attrs:{"display-name":t.album.attributes.collaborators[0].label,user:t.album.attributes.collaborators[0].id}})],1):t._e(),o("template",{slot:"default"},[e.length>0?o("NcButton",{attrs:{"aria-label":t.t("photos","Unselect all")},on:{click:l},scopedSlots:t._u([{key:"icon",fn:function(){return[o("Close")]},proxy:!0}],null,!0)},[t._v(" "+t._s(t.t("photos","Unselect all"))+" ")]):t._e()],1),t.album!==void 0?o("template",{slot:"right"},[t.album.attributes.nbItems!==0?o("NcButton",{attrs:{variant:"secondary","aria-label":t.t("photos","Add photos to this album")},on:{click:function(a){t.showAddPhotosModal=!0}}},[o("Plus",{attrs:{slot:"icon"},slot:"icon"}),t._v(" "+t._s(t.t("photos","Add"))+" ")],1):t._e(),o("NcActions",{attrs:{"force-menu":!0,"aria-label":t.t("photos","Open actions menu")}},[t.album.attributes.collaborators[0].type===t.collaboratorTypes.User?o("NcActionButton",{attrs:{"close-after-click":!0},on:{click:t.handleDeleteAlbum}},[t._v(" "+t._s(t.t("photos","Delete album"))+" "),o("DeleteOutline",{attrs:{slot:"icon"},slot:"icon"})],1):t._e(),e.length>0?[o("NcActionSeparator"),t.removableSelectedFiles.length!==0?o("NcActionButton",{attrs:{"close-after-click":!0},on:{click:function(a){return t.handleRemoveFilesFromAlbum(t.removableSelectedFiles)}}},[t._v(" "+t._s(t.t("photos","Remove selection from album"))+" "),o("Close",{attrs:{slot:"icon"},slot:"icon"})],1):t._e()]:t._e()],2)],1):t._e()],2)}}],null,!1,3980949)},[t.album!==void 0&&t.album.attributes.nbItems===0&&!(t.loadingCollectionFiles||t.loadingCollection)?o("NcEmptyContent",{staticClass:"album__empty",attrs:{slot:"empty-content",name:t.t("photos","This album does not have any photos or videos yet!")},slot:"empty-content"},[o("ImagePlusOutline",{attrs:{slot:"icon"},slot:"icon"}),o("NcButton",{staticClass:"album__empty__button",attrs:{slot:"action",variant:"primary","aria-label":t.t("photos","Add photos to this album")},on:{click:function(e){t.showAddPhotosModal=!0}},slot:"action"},[o("Plus",{attrs:{slot:"icon"},slot:"icon"}),t._v(" "+t._s(t.t("photos","Add"))+" ")],1)],1):t._e()],1),t.album!==void 0?o("PhotosPicker",{attrs:{open:t.showAddPhotosModal,name:t.t("photos","Add photos to {albumName}",{albumName:t.albumOriginalName}),destination:t.album.basename,"blacklist-ids":t.albumFileIds,loading:t.loadingAddFilesToAlbum},on:{"update:open":function(e){t.showAddPhotosModal=e},"files-picked":t.handleFilesPicked}}):t._e()],1)},$=[],M=C(S,w,$,!1,null,"52a1b252");const mt=M.exports;export{mt as default};
-//# sourceMappingURL=SharedAlbumContent-C-cYwLEv.chunk.mjs.map
+import{t as s}from"./preload-helper-iHri5ttz.chunk.mjs";import{S as i}from"./index-x9vhq81Z.chunk.mjs";import{i as n,A as r,B as m,x as c,C as u}from"./index-6_vkf3an.chunk.mjs";import{N as d}from"./NcActionButton-K4jUGMlW-Bs_jOwCM.chunk.mjs";import{N as h}from"./index-DPkUyJ8g-BELfZN9P.chunk.mjs";import{N as b}from"./NcEmptyContent-BkpeWiV5.chunk.mjs";import{N as p}from"./NcUserBubble-BGfZAi4c-BGVx_Zba.chunk.mjs";import{d as f,D as N,e as A,P as F,M as g,n as C}from"./icons-BPrPKxzl.chunk.mjs";import{C as _}from"./CollectionContent-DBHf8FYU.chunk.mjs";import{H as v}from"./HeaderNavigation-6G2FmN95.chunk.mjs";import{P as y}from"./PhotosPicker-CkZuVLOp.chunk.mjs";import{F as k}from"./FetchCollectionContentMixin-B2MWChoj.chunk.mjs";import{F as P}from"./FetchFilesMixin-Ck9H2-jY.chunk.mjs";import"./index-DjIio1qt.chunk.mjs";import"./index-CJ3jRDua.chunk.mjs";import"./index-BSfP607A.chunk.mjs";import"./useHotKey-CPjpPwsD.chunk.mjs";import"./NcProgressBar-D7zYeXBH-Bj5rIFx5.chunk.mjs";import"./createElementId-DhjFt1I9-B2HCdIOx.chunk.mjs";import"./video-CFxEyJH4.chunk.mjs";import"./NcAvatar-DkAX4nqq-B0poB0w8.chunk.mjs";import"./FileComponent-Bw4ZFXMR.chunk.mjs";import"./NcCheckboxRadioSwitch-D4IV4zWy-CSDAL8Yg.chunk.mjs";import"./NcIconToggleSwitch-0NTw7i-t-DOrRmNgh.chunk.mjs";import"./useModelMigration-EhAWvqDD-C15wbtL_.chunk.mjs";import"./FilesSelectionMixin-GHX9hTKF.chunk.mjs";import"./fileFetcher-p0a3IV9C.chunk.mjs";import"./NcSelect-CHc1QupB-BHJEUvv_.chunk.mjs";import"./FilesByMonthMixin-DvgVVt_F.chunk.mjs";import"./collectionFetcher-DyDb1Dp2.chunk.mjs";import"./AbortControllerMixin-CCU9Utyn.chunk.mjs";import"./PhotoSearch-CvX3QQRp.chunk.mjs";const S={name:"SharedAlbumContent",components:{MapMarkerOutline:g,Plus:F,Close:A,DeleteOutline:N,ImagePlusOutline:f,NcEmptyContent:b,NcActions:r,NcActionButton:d,NcActionSeparator:h,NcButton:n,NcUserBubble:p,CollectionContent:_,PhotosPicker:y,HeaderNavigation:v},mixins:[k,P],props:{albumName:{type:String,default:"/"}},setup(){return{isMobile:u()}},data(){return{showAddPhotosModal:!1,loadingCount:0,loadingAddFilesToAlbum:!1,collaboratorTypes:i}},computed:{files(){return this.$store.state.files.files},album(){return this.$store.getters.getSharedAlbum(this.albumName)},albumFileIds(){return this.$store.getters.getSharedAlbumFiles(this.albumName)},albumOriginalName(){return this.albumName.replace(new RegExp(`\\(${this.album?.attributes.collaborators[0].id}\\)$`),"")},albumFileName(){return this.$store.getters.getSharedAlbumName(this.albumName)},removableSelectedFiles(){return(this.$refs.collectionContent?.selectedFileIds).map(t=>this.$store.state.files.files[t]).filter(t=>t.attributes["photos-album-file-origin"]!=="filters").map(t=>t.fileid.toString())}},async mounted(){this.fetchAlbum(),this.fetchAlbumContent()},methods:{async fetchAlbum(){await this.fetchCollection(this.albumFileName,c)},async fetchAlbumContent(){await this.fetchCollectionFiles(this.albumFileName,m)},async handleFilesPicked(t){this.showAddPhotosModal=!1,await this.$store.dispatch("addFilesToCollection",{collectionFileName:this.album.root+this.album.path,fileIdsToAdd:t}),await this.fetchAlbumContent()},async handleRemoveFilesFromAlbum(t){this.$refs.collectionContent?.onUncheckFiles(t),await this.$store.dispatch("removeFilesFromCollection",{collectionFileName:this.album.root+this.album.path,fileIdsToRemove:t})},async handleDeleteAlbum(){await this.$store.dispatch("deleteCollection",{collectionFileName:this.album.root+this.album.path})&&this.$router.push("/sharedalbums")},t:s}};var w=function(){var t=this,o=t._self._c;return o("div",[o("CollectionContent",{ref:"collectionContent",attrs:{collection:t.album,"collection-file-ids":t.albumFileIds,loading:t.loadingCollection||t.loadingCollectionFiles,error:t.errorFetchingCollection||t.errorFetchingCollectionFiles},scopedSlots:t._u([{key:"header",fn:function({selectedFileIds:e,resetSelection:l}){return o("HeaderNavigation",{key:"navigation",attrs:{loading:t.loadingCollectionFiles,params:{albumName:t.albumName},path:"/"+t.albumName,title:t.albumOriginalName},on:{refresh:t.fetchAlbumContent}},[t.album!==void 0&&t.album.attributes.location!==""?o("div",{staticClass:"album__location",attrs:{slot:"subtitle"},slot:"subtitle"},[o("MapMarkerOutline"),t._v(t._s(t.album.attributes.location)+" ⸱ "+t._s(t.t("photos","Shared by"))+" "),o("NcUserBubble",{attrs:{"display-name":t.album.attributes.collaborators[0].label,user:t.album.attributes.collaborators[0].id}})],1):t._e(),o("template",{slot:"default"},[e.length>0?o("NcButton",{attrs:{"aria-label":t.t("photos","Unselect all")},on:{click:l},scopedSlots:t._u([{key:"icon",fn:function(){return[o("Close")]},proxy:!0}],null,!0)},[t._v(" "+t._s(t.t("photos","Unselect all"))+" ")]):t._e()],1),t.album!==void 0?o("template",{slot:"right"},[t.album.attributes.nbItems!==0?o("NcButton",{attrs:{variant:"secondary","aria-label":t.t("photos","Add photos to this album")},on:{click:function(a){t.showAddPhotosModal=!0}}},[o("Plus",{attrs:{slot:"icon"},slot:"icon"}),t._v(" "+t._s(t.t("photos","Add"))+" ")],1):t._e(),o("NcActions",{attrs:{"force-menu":!0,"aria-label":t.t("photos","Open actions menu")}},[t.album.attributes.collaborators[0].type===t.collaboratorTypes.User?o("NcActionButton",{attrs:{"close-after-click":!0},on:{click:t.handleDeleteAlbum}},[t._v(" "+t._s(t.t("photos","Delete album"))+" "),o("DeleteOutline",{attrs:{slot:"icon"},slot:"icon"})],1):t._e(),e.length>0?[o("NcActionSeparator"),t.removableSelectedFiles.length!==0?o("NcActionButton",{attrs:{"close-after-click":!0},on:{click:function(a){return t.handleRemoveFilesFromAlbum(t.removableSelectedFiles)}}},[t._v(" "+t._s(t.t("photos","Remove selection from album"))+" "),o("Close",{attrs:{slot:"icon"},slot:"icon"})],1):t._e()]:t._e()],2)],1):t._e()],2)}}],null,!1,3980949)},[t.album!==void 0&&t.album.attributes.nbItems===0&&!(t.loadingCollectionFiles||t.loadingCollection)?o("NcEmptyContent",{staticClass:"album__empty",attrs:{slot:"empty-content",name:t.t("photos","This album does not have any photos or videos yet!")},slot:"empty-content"},[o("ImagePlusOutline",{attrs:{slot:"icon"},slot:"icon"}),o("NcButton",{staticClass:"album__empty__button",attrs:{slot:"action",variant:"primary","aria-label":t.t("photos","Add photos to this album")},on:{click:function(e){t.showAddPhotosModal=!0}},slot:"action"},[o("Plus",{attrs:{slot:"icon"},slot:"icon"}),t._v(" "+t._s(t.t("photos","Add"))+" ")],1)],1):t._e()],1),t.album!==void 0?o("PhotosPicker",{attrs:{open:t.showAddPhotosModal,name:t.t("photos","Add photos to {albumName}",{albumName:t.albumOriginalName}),destination:t.album.basename,"blacklist-ids":t.albumFileIds,loading:t.loadingAddFilesToAlbum},on:{"update:open":function(e){t.showAddPhotosModal=e},"files-picked":t.handleFilesPicked}}):t._e()],1)},$=[],M=C(S,w,$,!1,null,"52a1b252");const mt=M.exports;export{mt as default};
+//# sourceMappingURL=SharedAlbumContent-BowPGwCK.chunk.mjs.map
diff --git a/js/SharedAlbumContent-C-cYwLEv.chunk.mjs.license b/js/SharedAlbumContent-BowPGwCK.chunk.mjs.license
similarity index 100%
rename from js/SharedAlbumContent-C-cYwLEv.chunk.mjs.license
rename to js/SharedAlbumContent-BowPGwCK.chunk.mjs.license
diff --git a/js/SharedAlbumContent-C-cYwLEv.chunk.mjs.map b/js/SharedAlbumContent-BowPGwCK.chunk.mjs.map
similarity index 99%
rename from js/SharedAlbumContent-C-cYwLEv.chunk.mjs.map
rename to js/SharedAlbumContent-BowPGwCK.chunk.mjs.map
index 20d66f4371..22bcfcce21 100644
--- a/js/SharedAlbumContent-C-cYwLEv.chunk.mjs.map
+++ b/js/SharedAlbumContent-BowPGwCK.chunk.mjs.map
@@ -1 +1 @@
-{"version":3,"file":"SharedAlbumContent-C-cYwLEv.chunk.mjs","sources":["../src/views/SharedAlbumContent.vue"],"sourcesContent":["\n\n\t
\n\n\n\n\n\n"],"names":["_sfc_main","MapMarkerOutline","Plus","Close","DeleteOutline","ImagePlusOutline","NcEmptyContent","NcActions","NcActionButton","NcActionSeparator","NcButton","NcUserBubble","CollectionContent","PhotosPicker","HeaderNavigation","FetchCollectionContentMixin","FetchFilesMixin","useIsMobile","ShareType","fileId","file","albumsExtraProps","albumFilesExtraProps","fileIds","translate"],"mappings":"moDAmJA,MAAAA,EAAA,CACA,KAAA,qBACA,WAAA,CACA,iBAAAC,EACA,KAAAC,EACA,MAAAC,EAGA,cAAAC,EACA,iBAAAC,EACA,eAAAC,EACA,UAAAC,EACA,eAAAC,EACA,kBAAAC,EACA,SAAAC,EACA,aAAAC,EACA,kBAAAC,EAEA,aAAAC,EACA,iBAAAC,CAAA,EAGA,OAAA,CACAC,EACAC,CAAA,EAGA,MAAA,CACA,UAAA,CACA,KAAA,OACA,QAAA,GAAA,CACA,EAGA,OAAA,CAEA,MAAA,CACA,SAFAC,EAAA,CAEA,CAEA,EAEA,MAAA,CACA,MAAA,CACA,mBAAA,GACA,aAAA,EACA,uBAAA,GACA,kBAAAC,CAAA,CAEA,EAEA,SAAA,CACA,OAAA,CACA,OAAA,KAAA,OAAA,MAAA,MAAA,KACA,EAEA,OAAA,CACA,OAAA,KAAA,OAAA,QAAA,eAAA,KAAA,SAAA,CACA,EAEA,cAAA,CACA,OAAA,KAAA,OAAA,QAAA,oBAAA,KAAA,SAAA,CACA,EAEA,mBAAA,CACA,OAAA,KAAA,UAAA,QAAA,IAAA,OAAA,MAAA,KAAA,OAAA,WAAA,cAAA,CAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CACA,EAEA,eAAA,CACA,OAAA,KAAA,OAAA,QAAA,mBAAA,KAAA,SAAA,CACA,EAEA,wBAAA,CACA,OAAA,KAAA,MAAA,mBAAA,iBACA,IAAAC,GAAA,KAAA,OAAA,MAAA,MAAA,MAAAA,CAAA,CAAA,EACA,OAAAC,GAAAA,EAAA,WAAA,0BAAA,IAAA,SAAA,EACA,IAAAA,GAAAA,EAAA,OAAA,UAAA,CACA,CAAA,EAGA,MAAA,SAAA,CACA,KAAA,WAAA,EACA,KAAA,kBAAA,CACA,EAEA,QAAA,CACA,MAAA,YAAA,CACA,MAAA,KAAA,gBACA,KAAA,cACAC,CAAA,CAEA,EAEA,MAAA,mBAAA,CACA,MAAA,KAAA,qBAAA,KAAA,cAAAC,CAAA,CACA,EAEA,MAAA,kBAAAC,EAAA,CACA,KAAA,mBAAA,GACA,MAAA,KAAA,OAAA,SAAA,uBAAA,CAAA,mBAAA,KAAA,MAAA,KAAA,KAAA,MAAA,KAAA,aAAAA,EAAA,EAEA,MAAA,KAAA,kBAAA,CACA,EAEA,MAAA,2BAAAA,EAAA,CACA,KAAA,MAAA,mBAAA,eAAAA,CAAA,EACA,MAAA,KAAA,OAAA,SAAA,4BAAA,CAAA,mBAAA,KAAA,MAAA,KAAA,KAAA,MAAA,KAAA,gBAAAA,EAAA,CACA,EAEA,MAAA,mBAAA,CACA,MAAA,KAAA,OAAA,SAAA,mBAAA,CAAA,mBAAA,KAAA,MAAA,KAAA,KAAA,MAAA,KAAA,GAEA,KAAA,QAAA,KAAA,eAAA,CAEA,EAEA,EAAAC,CAAA,CAEA"}
\ No newline at end of file
+{"version":3,"file":"SharedAlbumContent-BowPGwCK.chunk.mjs","sources":["../src/views/SharedAlbumContent.vue"],"sourcesContent":["\n\n\t
\n\n\n\n\n\n"],"names":["_sfc_main","MapMarkerOutline","Plus","Close","DeleteOutline","ImagePlusOutline","NcEmptyContent","NcActions","NcActionButton","NcActionSeparator","NcButton","NcUserBubble","CollectionContent","PhotosPicker","HeaderNavigation","FetchCollectionContentMixin","FetchFilesMixin","useIsMobile","ShareType","fileId","file","albumsExtraProps","albumFilesExtraProps","fileIds","translate"],"mappings":"moDAmJA,MAAAA,EAAA,CACA,KAAA,qBACA,WAAA,CACA,iBAAAC,EACA,KAAAC,EACA,MAAAC,EAGA,cAAAC,EACA,iBAAAC,EACA,eAAAC,EACA,UAAAC,EACA,eAAAC,EACA,kBAAAC,EACA,SAAAC,EACA,aAAAC,EACA,kBAAAC,EAEA,aAAAC,EACA,iBAAAC,CAAA,EAGA,OAAA,CACAC,EACAC,CAAA,EAGA,MAAA,CACA,UAAA,CACA,KAAA,OACA,QAAA,GAAA,CACA,EAGA,OAAA,CAEA,MAAA,CACA,SAFAC,EAAA,CAEA,CAEA,EAEA,MAAA,CACA,MAAA,CACA,mBAAA,GACA,aAAA,EACA,uBAAA,GACA,kBAAAC,CAAA,CAEA,EAEA,SAAA,CACA,OAAA,CACA,OAAA,KAAA,OAAA,MAAA,MAAA,KACA,EAEA,OAAA,CACA,OAAA,KAAA,OAAA,QAAA,eAAA,KAAA,SAAA,CACA,EAEA,cAAA,CACA,OAAA,KAAA,OAAA,QAAA,oBAAA,KAAA,SAAA,CACA,EAEA,mBAAA,CACA,OAAA,KAAA,UAAA,QAAA,IAAA,OAAA,MAAA,KAAA,OAAA,WAAA,cAAA,CAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CACA,EAEA,eAAA,CACA,OAAA,KAAA,OAAA,QAAA,mBAAA,KAAA,SAAA,CACA,EAEA,wBAAA,CACA,OAAA,KAAA,MAAA,mBAAA,iBACA,IAAAC,GAAA,KAAA,OAAA,MAAA,MAAA,MAAAA,CAAA,CAAA,EACA,OAAAC,GAAAA,EAAA,WAAA,0BAAA,IAAA,SAAA,EACA,IAAAA,GAAAA,EAAA,OAAA,UAAA,CACA,CAAA,EAGA,MAAA,SAAA,CACA,KAAA,WAAA,EACA,KAAA,kBAAA,CACA,EAEA,QAAA,CACA,MAAA,YAAA,CACA,MAAA,KAAA,gBACA,KAAA,cACAC,CAAA,CAEA,EAEA,MAAA,mBAAA,CACA,MAAA,KAAA,qBAAA,KAAA,cAAAC,CAAA,CACA,EAEA,MAAA,kBAAAC,EAAA,CACA,KAAA,mBAAA,GACA,MAAA,KAAA,OAAA,SAAA,uBAAA,CAAA,mBAAA,KAAA,MAAA,KAAA,KAAA,MAAA,KAAA,aAAAA,EAAA,EAEA,MAAA,KAAA,kBAAA,CACA,EAEA,MAAA,2BAAAA,EAAA,CACA,KAAA,MAAA,mBAAA,eAAAA,CAAA,EACA,MAAA,KAAA,OAAA,SAAA,4BAAA,CAAA,mBAAA,KAAA,MAAA,KAAA,KAAA,MAAA,KAAA,gBAAAA,EAAA,CACA,EAEA,MAAA,mBAAA,CACA,MAAA,KAAA,OAAA,SAAA,mBAAA,CAAA,mBAAA,KAAA,MAAA,KAAA,KAAA,MAAA,KAAA,GAEA,KAAA,QAAA,KAAA,eAAA,CAEA,EAEA,EAAAC,CAAA,CAEA"}
\ No newline at end of file
diff --git a/js/SharedAlbums-CaDonouZ.chunk.mjs b/js/SharedAlbums-DWrdW3Hz.chunk.mjs
similarity index 91%
rename from js/SharedAlbums-CaDonouZ.chunk.mjs
rename to js/SharedAlbums-DWrdW3Hz.chunk.mjs
index 4d01b0ae6c..e5aad0f741 100644
--- a/js/SharedAlbums-CaDonouZ.chunk.mjs
+++ b/js/SharedAlbums-DWrdW3Hz.chunk.mjs
@@ -1,2 +1,2 @@
-import{h as e,t as a,s as r,k as l}from"./preload-helper-iHri5ttz.chunk.mjs";import{N as i}from"./NcEmptyContent-BkpeWiV5.chunk.mjs";import{N as n}from"./NcUserBubble-BGfZAi4c-azL-EDwM.chunk.mjs";import{I as m,n as u}from"./icons-BPrPKxzl.chunk.mjs";import{C as c,a as b}from"./CollectionsList-6GeFqfGW.chunk.mjs";import{H as p}from"./HeaderNavigation-6G2FmN95.chunk.mjs";import{F as h}from"./FetchCollectionsMixin-BuJ7c1sd.chunk.mjs";import{x as d}from"./index-6_vkf3an.chunk.mjs";import"./createElementId-DhjFt1I9-B2HCdIOx.chunk.mjs";import"./video-B7iCXJqN.chunk.mjs";import"./index-DjIio1qt.chunk.mjs";import"./NcAvatar-DkAX4nqq-B0poB0w8.chunk.mjs";import"./NcActionButton-K4jUGMlW-Bs_jOwCM.chunk.mjs";import"./collectionFetcher-DyDb1Dp2.chunk.mjs";import"./AbortControllerMixin-CCU9Utyn.chunk.mjs";const f={name:"SharedAlbums",components:{ImageMultipleOutline:m,NcEmptyContent:i,CollectionsList:b,CollectionCover:c,HeaderNavigation:p,NcUserBubble:n},filters:{coverUrl(t){return t===-1?"":l(`/apps/photos/api/v1/preview/${t}?x=512&y=512`)},albumOriginalName(t){return t.basename.replace(new RegExp(`\\(${t.attributes.collaborators[0].id}\\)$`),"")}},mixins:[h],computed:{sharedAlbums(){return this.$store.getters.sharedAlbums}},async beforeMount(){this.fetchSharedAlbums()},methods:{fetchSharedAlbums(){this.fetchCollections(`/photos/${r()?.uid}/sharedalbums`,d)},t:a,n:e}};var v=function(){var t=this,s=t._self._c;return s("CollectionsList",{staticClass:"albums-list",attrs:{collections:t.sharedAlbums,loading:t.loadingCollections,error:t.errorFetchingCollections},scopedSlots:t._u([{key:"default",fn:function({collection:o}){return s("CollectionCover",{key:o.basename,attrs:{"parent-route":"/sharedalbums","collection-name":o.basename,"alt-img":t.t("photos","Cover photo for shared album {albumName}",{albumName:o.basename}),"data-test":o.basename,"cover-url":t._f("coverUrl")(o.attributes["last-photo"])}},[s("span",{staticClass:"album__name"},[t._v(" "+t._s(t._f("albumOriginalName")(o))+" ")]),s("div",{staticClass:"album__details",attrs:{slot:"subtitle"},slot:"subtitle"},[t._v(" "+t._s(o.attributes.date)+" ⸱ "+t._s(t.n("photos","%n item","%n photos and videos",o.attributes.nbItems))+" "),s("br"),t._v(" "+t._s(t.t("photos","Shared by"))+" "),s("NcUserBubble",{attrs:{"display-name":o.attributes.collaborators[0].label,user:o.attributes.collaborators[0].id}})],1)])}}])},[s("HeaderNavigation",{key:"navigation",attrs:{slot:"header",loading:t.loadingCollections,title:t.t("photos","Collaborative albums"),"root-title":t.t("photos","Collaborative albums")},on:{refresh:t.fetchSharedAlbums},slot:"header"}),s("NcEmptyContent",{attrs:{slot:"empty-collections-list",name:t.t("photos","There is no album yet!")},slot:"empty-collections-list"},[s("ImageMultipleOutline",{attrs:{slot:"icon"},slot:"icon"})],1)],1)},C=[],_=u(f,v,C,!1,null,"48906c46");const B=_.exports;export{B as default};
-//# sourceMappingURL=SharedAlbums-CaDonouZ.chunk.mjs.map
+import{h as e,t as a,s as r,k as l}from"./preload-helper-iHri5ttz.chunk.mjs";import{N as i}from"./NcEmptyContent-BkpeWiV5.chunk.mjs";import{N as n}from"./NcUserBubble-BGfZAi4c-BGVx_Zba.chunk.mjs";import{I as m,n as u}from"./icons-BPrPKxzl.chunk.mjs";import{C as c,a as b}from"./CollectionsList-CiIbYZgv.chunk.mjs";import{H as p}from"./HeaderNavigation-6G2FmN95.chunk.mjs";import{F as h}from"./FetchCollectionsMixin-BuJ7c1sd.chunk.mjs";import{x as d}from"./index-6_vkf3an.chunk.mjs";import"./createElementId-DhjFt1I9-B2HCdIOx.chunk.mjs";import"./video-CFxEyJH4.chunk.mjs";import"./index-DjIio1qt.chunk.mjs";import"./NcAvatar-DkAX4nqq-B0poB0w8.chunk.mjs";import"./NcActionButton-K4jUGMlW-Bs_jOwCM.chunk.mjs";import"./collectionFetcher-DyDb1Dp2.chunk.mjs";import"./AbortControllerMixin-CCU9Utyn.chunk.mjs";const f={name:"SharedAlbums",components:{ImageMultipleOutline:m,NcEmptyContent:i,CollectionsList:b,CollectionCover:c,HeaderNavigation:p,NcUserBubble:n},filters:{coverUrl(t){return t===-1?"":l(`/apps/photos/api/v1/preview/${t}?x=512&y=512`)},albumOriginalName(t){return t.basename.replace(new RegExp(`\\(${t.attributes.collaborators[0].id}\\)$`),"")}},mixins:[h],computed:{sharedAlbums(){return this.$store.getters.sharedAlbums}},async beforeMount(){this.fetchSharedAlbums()},methods:{fetchSharedAlbums(){this.fetchCollections(`/photos/${r()?.uid}/sharedalbums`,d)},t:a,n:e}};var v=function(){var t=this,s=t._self._c;return s("CollectionsList",{staticClass:"albums-list",attrs:{collections:t.sharedAlbums,loading:t.loadingCollections,error:t.errorFetchingCollections},scopedSlots:t._u([{key:"default",fn:function({collection:o}){return s("CollectionCover",{key:o.basename,attrs:{"parent-route":"/sharedalbums","collection-name":o.basename,"alt-img":t.t("photos","Cover photo for shared album {albumName}",{albumName:o.basename}),"data-test":o.basename,"cover-url":t._f("coverUrl")(o.attributes["last-photo"])}},[s("span",{staticClass:"album__name"},[t._v(" "+t._s(t._f("albumOriginalName")(o))+" ")]),s("div",{staticClass:"album__details",attrs:{slot:"subtitle"},slot:"subtitle"},[t._v(" "+t._s(o.attributes.date)+" ⸱ "+t._s(t.n("photos","%n item","%n photos and videos",o.attributes.nbItems))+" "),s("br"),t._v(" "+t._s(t.t("photos","Shared by"))+" "),s("NcUserBubble",{attrs:{"display-name":o.attributes.collaborators[0].label,user:o.attributes.collaborators[0].id}})],1)])}}])},[s("HeaderNavigation",{key:"navigation",attrs:{slot:"header",loading:t.loadingCollections,title:t.t("photos","Collaborative albums"),"root-title":t.t("photos","Collaborative albums")},on:{refresh:t.fetchSharedAlbums},slot:"header"}),s("NcEmptyContent",{attrs:{slot:"empty-collections-list",name:t.t("photos","There is no album yet!")},slot:"empty-collections-list"},[s("ImageMultipleOutline",{attrs:{slot:"icon"},slot:"icon"})],1)],1)},C=[],_=u(f,v,C,!1,null,"48906c46");const B=_.exports;export{B as default};
+//# sourceMappingURL=SharedAlbums-DWrdW3Hz.chunk.mjs.map
diff --git a/js/SharedAlbums-CaDonouZ.chunk.mjs.license b/js/SharedAlbums-DWrdW3Hz.chunk.mjs.license
similarity index 100%
rename from js/SharedAlbums-CaDonouZ.chunk.mjs.license
rename to js/SharedAlbums-DWrdW3Hz.chunk.mjs.license
diff --git a/js/SharedAlbums-CaDonouZ.chunk.mjs.map b/js/SharedAlbums-DWrdW3Hz.chunk.mjs.map
similarity index 98%
rename from js/SharedAlbums-CaDonouZ.chunk.mjs.map
rename to js/SharedAlbums-DWrdW3Hz.chunk.mjs.map
index f56e117a43..a85b95a52c 100644
--- a/js/SharedAlbums-CaDonouZ.chunk.mjs.map
+++ b/js/SharedAlbums-DWrdW3Hz.chunk.mjs.map
@@ -1 +1 @@
-{"version":3,"file":"SharedAlbums-CaDonouZ.chunk.mjs","sources":["../src/views/SharedAlbums.vue"],"sourcesContent":["\n\n\t\n\t\t\n\n\t\t\n\t\t\t\n\t\t\t\t{{ collection | albumOriginalName }}\n\t\t\t\n\n\t\t\t
\n\t\t\n\n\t\t\n\t\t\t\n\t\t\n\t\n\n\n\n\n\n"],"names":["_sfc_main","ImageMultipleOutline","NcEmptyContent","CollectionsList","CollectionCover","HeaderNavigation","NcUserBubble","lastPhoto","generateUrl","album","FetchCollectionsMixin","getCurrentUser","albumsExtraProps","translate","translatePlural"],"mappings":"myBA0DA,MAAAA,EAAA,CACA,KAAA,eACA,WAAA,CACA,qBAAAC,EACA,eAAAC,EACA,gBAAAC,EACA,gBAAAC,EACA,iBAAAC,EACA,aAAAC,CAAA,EAGA,QAAA,CACA,SAAAC,EAAA,CACA,OAAAA,IAAA,GACA,GAGAC,EAAA,+BAAAD,CAAA,cAAA,CACA,EAEA,kBAAAE,EAAA,CACA,OAAAA,EAAA,SAAA,QAAA,IAAA,OAAA,MAAAA,EAAA,WAAA,cAAA,CAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CACA,CAAA,EAGA,OAAA,CAAAC,CAAA,EAEA,SAAA,CACA,cAAA,CACA,OAAA,KAAA,OAAA,QAAA,YACA,CAAA,EAGA,MAAA,aAAA,CACA,KAAA,kBAAA,CACA,EAEA,QAAA,CACA,mBAAA,CACA,KAAA,iBACA,WAAAC,KAAA,GAAA,gBACAC,CAAA,CAEA,EAEA,EAAAC,EACA,EAAAC,CAAA,CAEA"}
\ No newline at end of file
+{"version":3,"file":"SharedAlbums-DWrdW3Hz.chunk.mjs","sources":["../src/views/SharedAlbums.vue"],"sourcesContent":["\n\n\t\n\t\t\n\n\t\t\n\t\t\t\n\t\t\t\t{{ collection | albumOriginalName }}\n\t\t\t\n\n\t\t\t
\n\t\t\n\n\t\t\n\t\t\t\n\t\t\n\t\n\n\n\n\n\n"],"names":["_sfc_main","ImageMultipleOutline","NcEmptyContent","CollectionsList","CollectionCover","HeaderNavigation","NcUserBubble","lastPhoto","generateUrl","album","FetchCollectionsMixin","getCurrentUser","albumsExtraProps","translate","translatePlural"],"mappings":"myBA0DA,MAAAA,EAAA,CACA,KAAA,eACA,WAAA,CACA,qBAAAC,EACA,eAAAC,EACA,gBAAAC,EACA,gBAAAC,EACA,iBAAAC,EACA,aAAAC,CAAA,EAGA,QAAA,CACA,SAAAC,EAAA,CACA,OAAAA,IAAA,GACA,GAGAC,EAAA,+BAAAD,CAAA,cAAA,CACA,EAEA,kBAAAE,EAAA,CACA,OAAAA,EAAA,SAAA,QAAA,IAAA,OAAA,MAAAA,EAAA,WAAA,cAAA,CAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CACA,CAAA,EAGA,OAAA,CAAAC,CAAA,EAEA,SAAA,CACA,cAAA,CACA,OAAA,KAAA,OAAA,QAAA,YACA,CAAA,EAGA,MAAA,aAAA,CACA,KAAA,kBAAA,CACA,EAEA,QAAA,CACA,mBAAA,CACA,KAAA,iBACA,WAAAC,KAAA,GAAA,gBACAC,CAAA,CAEA,EAEA,EAAAC,EACA,EAAAC,CAAA,CAEA"}
\ No newline at end of file
diff --git a/js/TagsView-BgF4MCPK.chunk.mjs b/js/TagsView-D_SxXf-l.chunk.mjs
similarity index 97%
rename from js/TagsView-BgF4MCPK.chunk.mjs
rename to js/TagsView-D_SxXf-l.chunk.mjs
index dd9fb0a459..b3d56a5045 100644
--- a/js/TagsView-BgF4MCPK.chunk.mjs
+++ b/js/TagsView-D_SxXf-l.chunk.mjs
@@ -1,2 +1,2 @@
-import{a,h as n,t as i,k as l}from"./preload-helper-iHri5ttz.chunk.mjs";import{N as g}from"./NcEmptyContent-BkpeWiV5.chunk.mjs";import{z as c,l as h}from"./index-6_vkf3an.chunk.mjs";import{L as d}from"./video-B7iCXJqN.chunk.mjs";import{I as u,n as r}from"./icons-BPrPKxzl.chunk.mjs";import{A as o}from"./AbortControllerMixin-CCU9Utyn.chunk.mjs";import"./createElementId-DhjFt1I9-B2HCdIOx.chunk.mjs";import"./index-DjIio1qt.chunk.mjs";const m=a({name:"TagCover",components:{RouterLink:d,ImageMultipleOutline:u},mixins:[o],props:{tag:{type:Object,required:!0}},data(){return{loadCover:!1,observer:null}},computed:{tags(){return this.$store.state.systemtags.tags},files(){return this.$store.state.files.files},coverUrl(){return this.loadCover?l(`/core/preview?fileId=${this.tag.attributes["reference-fileid"]}&x=512&y=512&forceIcon=0&a=1`):""},count(){return this.tag.attributes["files-assigned"]}},watch:{loadCover(){this.tag.attributes["files-assigned"]||this.$store.dispatch("fetchTagFiles",{id:this.tag.attributes.id,signal:this.abortController.signal})}},mounted(){this.observer=new IntersectionObserver(t=>{t[0].isIntersecting&&(this.loadCover=!0,this.observer?.disconnect())}),this.observer.observe(this.$el)},methods:{t:i,n}});var p=function(){var t=this,s=t._self._c;return t._self._setupProxy,s("RouterLink",{staticClass:"tag-cover",attrs:{to:`/tags/${t.tag.attributes["display-name"]}`}},[t.tag.attributes["files-assigned"]!==0?s("img",{staticClass:"tag-cover__image",attrs:{src:t.coverUrl}}):s("div",{staticClass:"tag-cover__image tag-cover__image--placeholder"},[s("ImageMultipleOutline",{attrs:{size:128}})],1),s("div",{staticClass:"tag-cover__details"},[s("div",{staticClass:"tag-cover__details__first-line"},[s("h3",{staticClass:"tag-cover__details__name"},[t._v(" "+t._s(t.t("recognize",t.tag.attributes["display-name"]))+" ")])]),s("div",{staticClass:"tag-cover__details__second-line"},[t._v(" "+t._s(t.n("photos","%n photo","%n photos",t.count))+" ")])])])},f=[],_=r(m,p,f,!1,null,"4e0e61e1");const v=_.exports,C=a({name:"TagsView",components:{TagCover:v,NcLoadingIcon:c,NcEmptyContent:g},mixins:[o],data(){return{error:null,loading:!1,showTags:!1}},computed:{files(){return this.$store.state.files.files},tags(){return this.$store.state.systemtags.tags},tagsNames(){return this.$store.state.systemtags.names},tagsList(){return Object.keys(this.tagsNames).map(t=>this.tags[this.tagsNames[t]]).filter(t=>t&&t.attributes.id)},popularTags(){return Object.keys(this.tagsNames).filter(t=>this.tags[this.tagsNames[t]].attributes["files-assigned"]>50).sort((t,s)=>this.tags[this.tagsNames[s]]["files-assigned"]-this.tags[this.tagsNames[t]]["files-assigned"]).slice(0,9).map(t=>this.tags[this.tagsNames[t]])}},async beforeMount(){await this.fetchRootContent()},methods:{async fetchRootContent(){window.OCA.Viewer.close(),this.error=null;try{this.tagsList.length||(this.loading=!0,await this.$store.dispatch("fetchAllTags",{signal:this.abortController.signal}))}catch(t){h.error("Failed to fetch tags",{error:t}),this.error=!0}finally{this.loading=!1}},t:i}});var b=function(){var t=this,s=t._self._c;return t._self._setupProxy,s("div",[t.error?s("NcEmptyContent",{attrs:{name:t.t("photos","An error occurred")}}):t._e(),!t.loading&&t.tagsList.length===0?s("NcEmptyContent",{attrs:{name:t.t("photos","No tags yet"),description:t.t("photos","Photos with tags will show up here")}}):t._e(),t.loading?s("NcLoadingIcon",{staticClass:"loader"}):s("div",{staticClass:"container"},[t.popularTags.length?s("h2",[t._v(" "+t._s(t.t("photos","Popular tags"))+" ")]):t._e(),s("div",{staticClass:"popular-tags"},t._l(t.popularTags,function(e){return s("TagCover",{key:e.attributes.id,attrs:{tag:e}})}),1),t.tagsList.length?s("h2",[t._v(" "+t._s(t.t("photos","All tags"))+" ")]):t._e(),s("div",{staticClass:"tags"},t._l(t.tagsList,function(e){return s("TagCover",{key:e.attributes.id,attrs:{tag:e}})}),1)])],1)},y=[],N=r(C,b,y,!1,null,"cb8dfce8");const A=N.exports;export{A as default};
-//# sourceMappingURL=TagsView-BgF4MCPK.chunk.mjs.map
+import{a,h as n,t as i,k as l}from"./preload-helper-iHri5ttz.chunk.mjs";import{N as g}from"./NcEmptyContent-BkpeWiV5.chunk.mjs";import{z as c,l as h}from"./index-6_vkf3an.chunk.mjs";import{L as d}from"./video-CFxEyJH4.chunk.mjs";import{I as u,n as r}from"./icons-BPrPKxzl.chunk.mjs";import{A as o}from"./AbortControllerMixin-CCU9Utyn.chunk.mjs";import"./createElementId-DhjFt1I9-B2HCdIOx.chunk.mjs";import"./index-DjIio1qt.chunk.mjs";const m=a({name:"TagCover",components:{RouterLink:d,ImageMultipleOutline:u},mixins:[o],props:{tag:{type:Object,required:!0}},data(){return{loadCover:!1,observer:null}},computed:{tags(){return this.$store.state.systemtags.tags},files(){return this.$store.state.files.files},coverUrl(){return this.loadCover?l(`/core/preview?fileId=${this.tag.attributes["reference-fileid"]}&x=512&y=512&forceIcon=0&a=1`):""},count(){return this.tag.attributes["files-assigned"]}},watch:{loadCover(){this.tag.attributes["files-assigned"]||this.$store.dispatch("fetchTagFiles",{id:this.tag.attributes.id,signal:this.abortController.signal})}},mounted(){this.observer=new IntersectionObserver(t=>{t[0].isIntersecting&&(this.loadCover=!0,this.observer?.disconnect())}),this.observer.observe(this.$el)},methods:{t:i,n}});var p=function(){var t=this,s=t._self._c;return t._self._setupProxy,s("RouterLink",{staticClass:"tag-cover",attrs:{to:`/tags/${t.tag.attributes["display-name"]}`}},[t.tag.attributes["files-assigned"]!==0?s("img",{staticClass:"tag-cover__image",attrs:{src:t.coverUrl}}):s("div",{staticClass:"tag-cover__image tag-cover__image--placeholder"},[s("ImageMultipleOutline",{attrs:{size:128}})],1),s("div",{staticClass:"tag-cover__details"},[s("div",{staticClass:"tag-cover__details__first-line"},[s("h3",{staticClass:"tag-cover__details__name"},[t._v(" "+t._s(t.t("recognize",t.tag.attributes["display-name"]))+" ")])]),s("div",{staticClass:"tag-cover__details__second-line"},[t._v(" "+t._s(t.n("photos","%n photo","%n photos",t.count))+" ")])])])},f=[],_=r(m,p,f,!1,null,"4e0e61e1");const v=_.exports,C=a({name:"TagsView",components:{TagCover:v,NcLoadingIcon:c,NcEmptyContent:g},mixins:[o],data(){return{error:null,loading:!1,showTags:!1}},computed:{files(){return this.$store.state.files.files},tags(){return this.$store.state.systemtags.tags},tagsNames(){return this.$store.state.systemtags.names},tagsList(){return Object.keys(this.tagsNames).map(t=>this.tags[this.tagsNames[t]]).filter(t=>t&&t.attributes.id)},popularTags(){return Object.keys(this.tagsNames).filter(t=>this.tags[this.tagsNames[t]].attributes["files-assigned"]>50).sort((t,s)=>this.tags[this.tagsNames[s]]["files-assigned"]-this.tags[this.tagsNames[t]]["files-assigned"]).slice(0,9).map(t=>this.tags[this.tagsNames[t]])}},async beforeMount(){await this.fetchRootContent()},methods:{async fetchRootContent(){window.OCA.Viewer.close(),this.error=null;try{this.tagsList.length||(this.loading=!0,await this.$store.dispatch("fetchAllTags",{signal:this.abortController.signal}))}catch(t){h.error("Failed to fetch tags",{error:t}),this.error=!0}finally{this.loading=!1}},t:i}});var b=function(){var t=this,s=t._self._c;return t._self._setupProxy,s("div",[t.error?s("NcEmptyContent",{attrs:{name:t.t("photos","An error occurred")}}):t._e(),!t.loading&&t.tagsList.length===0?s("NcEmptyContent",{attrs:{name:t.t("photos","No tags yet"),description:t.t("photos","Photos with tags will show up here")}}):t._e(),t.loading?s("NcLoadingIcon",{staticClass:"loader"}):s("div",{staticClass:"container"},[t.popularTags.length?s("h2",[t._v(" "+t._s(t.t("photos","Popular tags"))+" ")]):t._e(),s("div",{staticClass:"popular-tags"},t._l(t.popularTags,function(e){return s("TagCover",{key:e.attributes.id,attrs:{tag:e}})}),1),t.tagsList.length?s("h2",[t._v(" "+t._s(t.t("photos","All tags"))+" ")]):t._e(),s("div",{staticClass:"tags"},t._l(t.tagsList,function(e){return s("TagCover",{key:e.attributes.id,attrs:{tag:e}})}),1)])],1)},y=[],N=r(C,b,y,!1,null,"cb8dfce8");const A=N.exports;export{A as default};
+//# sourceMappingURL=TagsView-D_SxXf-l.chunk.mjs.map
diff --git a/js/TagsView-BgF4MCPK.chunk.mjs.license b/js/TagsView-D_SxXf-l.chunk.mjs.license
similarity index 100%
rename from js/TagsView-BgF4MCPK.chunk.mjs.license
rename to js/TagsView-D_SxXf-l.chunk.mjs.license
diff --git a/js/TagsView-BgF4MCPK.chunk.mjs.map b/js/TagsView-D_SxXf-l.chunk.mjs.map
similarity index 99%
rename from js/TagsView-BgF4MCPK.chunk.mjs.map
rename to js/TagsView-D_SxXf-l.chunk.mjs.map
index 43cf088e14..584561f44b 100644
--- a/js/TagsView-BgF4MCPK.chunk.mjs.map
+++ b/js/TagsView-D_SxXf-l.chunk.mjs.map
@@ -1 +1 @@
-{"version":3,"file":"TagsView-BgF4MCPK.chunk.mjs","sources":["../src/components/TagCover.vue","../src/views/TagsView.vue"],"sourcesContent":["\n\n\n\t\n\t\t\n\t\t
\n\n\n\n\n\n"],"names":["_sfc_main$1","defineComponent","RouterLink","ImageMultipleOutline","AbortControllerMixin","generateUrl","entries","t","l","_sfc_main","TagCover","NcLoadingIcon","NcEmptyContent","tagName","tag","a","b","error","logger"],"mappings":"kbAyCA,MAAAA,EAAAC,EAAA,CACA,KAAA,WAEA,WAAA,CAAA,WACAC,EACA,qBAAAC,CAAA,EAGA,OAAA,CAAAC,CAAA,EAEA,MAAA,CACA,IAAA,CACA,KAAA,OACA,SAAA,EAAA,CACA,EAGA,MAAA,CACA,MAAA,CACA,UAAA,GACA,SAAA,IAAA,CAEA,EAEA,SAAA,CACA,MAAA,CACA,OAAA,KAAA,OAAA,MAAA,WAAA,IACA,EAEA,OAAA,CACA,OAAA,KAAA,OAAA,MAAA,MAAA,KACA,EAEA,UAAA,CACA,OAAA,KAAA,UAGAC,EAAA,wBAAA,KAAA,IAAA,WAAA,kBAAA,CAAA,8BAAA,EAFA,EAGA,EAEA,OAAA,CACA,OAAA,KAAA,IAAA,WAAA,gBAAA,CACA,CAAA,EAGA,MAAA,CACA,WAAA,CACA,KAAA,IAAA,WAAA,gBAAA,GAGA,KAAA,OAAA,SAAA,gBAAA,CAAA,GAAA,KAAA,IAAA,WAAA,GAAA,OAAA,KAAA,gBAAA,OAAA,CACA,CAAA,EAGA,SAAA,CACA,KAAA,SAAA,IAAA,qBAAAC,GAAA,CACAA,EAAA,CAAA,EAAA,iBACA,KAAA,UAAA,GACA,KAAA,UAAA,WAAA,EAEA,CAAA,EACA,KAAA,SAAA,QAAA,KAAA,GAAA,CACA,EAEA,QAAA,CAAA,EACAC,EAAAC,CACA,CAEA,CAAA,6xBCrEAC,EAAAR,EAAA,CACA,KAAA,WACA,WAAA,CACA,SAAAS,EACA,cAAAC,EACA,eAAAC,CAAA,EAGA,OAAA,CAAAR,CAAA,EAEA,MAAA,CACA,MAAA,CACA,MAAA,KACA,QAAA,GACA,SAAA,EAAA,CAEA,EAEA,SAAA,CACA,OAAA,CACA,OAAA,KAAA,OAAA,MAAA,MAAA,KACA,EAEA,MAAA,CACA,OAAA,KAAA,OAAA,MAAA,WAAA,IACA,EAEA,WAAA,CACA,OAAA,KAAA,OAAA,MAAA,WAAA,KACA,EAEA,UAAA,CACA,OAAA,OAAA,KAAA,KAAA,SAAA,EACA,IAAAS,GAAA,KAAA,KAAA,KAAA,UAAAA,CAAA,CAAA,CAAA,EACA,OAAAC,GAAAA,GAAAA,EAAA,WAAA,EAAA,CACA,EAEA,aAAA,CACA,OAAA,OAAA,KAAA,KAAA,SAAA,EACA,OAAAD,GAAA,KAAA,KAAA,KAAA,UAAAA,CAAA,CAAA,EAAA,WAAA,gBAAA,EAAA,EAAA,EACA,KAAA,CAAAE,EAAAC,IAAA,KAAA,KAAA,KAAA,UAAAA,CAAA,CAAA,EAAA,gBAAA,EAAA,KAAA,KAAA,KAAA,UAAAD,CAAA,CAAA,EAAA,gBAAA,CAAA,EACA,MAAA,EAAA,CAAA,EACA,IAAAF,GAAA,KAAA,KAAA,KAAA,UAAAA,CAAA,CAAA,CAAA,CACA,CAAA,EAGA,MAAA,aAAA,CACA,MAAA,KAAA,iBAAA,CACA,EAEA,QAAA,CACA,MAAA,kBAAA,CAEA,OAAA,IAAA,OAAA,MAAA,EAEA,KAAA,MAAA,KAEA,GAAA,CAEA,KAAA,SAAA,SACA,KAAA,QAAA,GACA,MAAA,KAAA,OAAA,SAAA,eAAA,CACA,OAAA,KAAA,gBAAA,MAAA,CACA,EAEA,OAAAI,EAAA,CACAC,EAAA,MAAA,uBAAA,CAAA,MAAAD,CAAA,CAAA,EACA,KAAA,MAAA,EACA,QAAA,CAEA,KAAA,QAAA,EACA,CACA,EAAA,EAEAV,CAAA,CAGA,CAAA"}
\ No newline at end of file
+{"version":3,"file":"TagsView-D_SxXf-l.chunk.mjs","sources":["../src/components/TagCover.vue","../src/views/TagsView.vue"],"sourcesContent":["\n\n\n\t\n\t\t\n\t\t
\n\n\n\n\n\n"],"names":["_sfc_main$1","defineComponent","RouterLink","ImageMultipleOutline","AbortControllerMixin","generateUrl","entries","t","l","_sfc_main","TagCover","NcLoadingIcon","NcEmptyContent","tagName","tag","a","b","error","logger"],"mappings":"kbAyCA,MAAAA,EAAAC,EAAA,CACA,KAAA,WAEA,WAAA,CAAA,WACAC,EACA,qBAAAC,CAAA,EAGA,OAAA,CAAAC,CAAA,EAEA,MAAA,CACA,IAAA,CACA,KAAA,OACA,SAAA,EAAA,CACA,EAGA,MAAA,CACA,MAAA,CACA,UAAA,GACA,SAAA,IAAA,CAEA,EAEA,SAAA,CACA,MAAA,CACA,OAAA,KAAA,OAAA,MAAA,WAAA,IACA,EAEA,OAAA,CACA,OAAA,KAAA,OAAA,MAAA,MAAA,KACA,EAEA,UAAA,CACA,OAAA,KAAA,UAGAC,EAAA,wBAAA,KAAA,IAAA,WAAA,kBAAA,CAAA,8BAAA,EAFA,EAGA,EAEA,OAAA,CACA,OAAA,KAAA,IAAA,WAAA,gBAAA,CACA,CAAA,EAGA,MAAA,CACA,WAAA,CACA,KAAA,IAAA,WAAA,gBAAA,GAGA,KAAA,OAAA,SAAA,gBAAA,CAAA,GAAA,KAAA,IAAA,WAAA,GAAA,OAAA,KAAA,gBAAA,OAAA,CACA,CAAA,EAGA,SAAA,CACA,KAAA,SAAA,IAAA,qBAAAC,GAAA,CACAA,EAAA,CAAA,EAAA,iBACA,KAAA,UAAA,GACA,KAAA,UAAA,WAAA,EAEA,CAAA,EACA,KAAA,SAAA,QAAA,KAAA,GAAA,CACA,EAEA,QAAA,CAAA,EACAC,EAAAC,CACA,CAEA,CAAA,6xBCrEAC,EAAAR,EAAA,CACA,KAAA,WACA,WAAA,CACA,SAAAS,EACA,cAAAC,EACA,eAAAC,CAAA,EAGA,OAAA,CAAAR,CAAA,EAEA,MAAA,CACA,MAAA,CACA,MAAA,KACA,QAAA,GACA,SAAA,EAAA,CAEA,EAEA,SAAA,CACA,OAAA,CACA,OAAA,KAAA,OAAA,MAAA,MAAA,KACA,EAEA,MAAA,CACA,OAAA,KAAA,OAAA,MAAA,WAAA,IACA,EAEA,WAAA,CACA,OAAA,KAAA,OAAA,MAAA,WAAA,KACA,EAEA,UAAA,CACA,OAAA,OAAA,KAAA,KAAA,SAAA,EACA,IAAAS,GAAA,KAAA,KAAA,KAAA,UAAAA,CAAA,CAAA,CAAA,EACA,OAAAC,GAAAA,GAAAA,EAAA,WAAA,EAAA,CACA,EAEA,aAAA,CACA,OAAA,OAAA,KAAA,KAAA,SAAA,EACA,OAAAD,GAAA,KAAA,KAAA,KAAA,UAAAA,CAAA,CAAA,EAAA,WAAA,gBAAA,EAAA,EAAA,EACA,KAAA,CAAAE,EAAAC,IAAA,KAAA,KAAA,KAAA,UAAAA,CAAA,CAAA,EAAA,gBAAA,EAAA,KAAA,KAAA,KAAA,UAAAD,CAAA,CAAA,EAAA,gBAAA,CAAA,EACA,MAAA,EAAA,CAAA,EACA,IAAAF,GAAA,KAAA,KAAA,KAAA,UAAAA,CAAA,CAAA,CAAA,CACA,CAAA,EAGA,MAAA,aAAA,CACA,MAAA,KAAA,iBAAA,CACA,EAEA,QAAA,CACA,MAAA,kBAAA,CAEA,OAAA,IAAA,OAAA,MAAA,EAEA,KAAA,MAAA,KAEA,GAAA,CAEA,KAAA,SAAA,SACA,KAAA,QAAA,GACA,MAAA,KAAA,OAAA,SAAA,eAAA,CACA,OAAA,KAAA,gBAAA,MAAA,CACA,EAEA,OAAAI,EAAA,CACAC,EAAA,MAAA,uBAAA,CAAA,MAAAD,CAAA,CAAA,EACA,KAAA,MAAA,EACA,QAAA,CAEA,KAAA,QAAA,EACA,CACA,EAAA,EAEAV,CAAA,CAGA,CAAA"}
\ No newline at end of file
diff --git a/js/TimelineView-CyTpbG36.chunk.mjs b/js/TimelineView-CTHqOiOb.chunk.mjs
similarity index 96%
rename from js/TimelineView-CyTpbG36.chunk.mjs
rename to js/TimelineView-CTHqOiOb.chunk.mjs
index 108631fa86..41f8e969ae 100644
--- a/js/TimelineView-CyTpbG36.chunk.mjs
+++ b/js/TimelineView-CTHqOiOb.chunk.mjs
@@ -1,2 +1,2 @@
-import{a as F,h as A,t as h,s as n,k as _,F as C,v as w,x as g}from"./preload-helper-iHri5ttz.chunk.mjs";import{m as r}from"./index-DjIio1qt.chunk.mjs";import{z as k,i as p,x as c,T as v,a as N,A as S,v as B,E as u,U as m,C as x}from"./index-6_vkf3an.chunk.mjs";import{P as M,u as P,s as I}from"./filters-6qrbp5yy.chunk.mjs";import{N as O}from"./NcActionButton-K4jUGMlW-Bs_jOwCM.chunk.mjs";import{N as L}from"./NcEmptyContent-BkpeWiV5.chunk.mjs";import{I as $,P as f,n as b,A as T,F as U,e as D,k as Y,o as E,D as V}from"./icons-BPrPKxzl.chunk.mjs";import{A as H}from"./ActionFavorite-u-7FbcqP.chunk.mjs";import{A as y}from"./AlbumForm-BISzN9cQ.chunk.mjs";import{N as R}from"./NcListItem-CaosvdEe-C-ofnpX3.chunk.mjs";import{N as j}from"./NcUserBubble-BGfZAi4c-azL-EDwM.chunk.mjs";import{F as z}from"./FetchCollectionsMixin-BuJ7c1sd.chunk.mjs";import{F as Q}from"./FileComponent-Bw4ZFXMR.chunk.mjs";import{F as q,a as J}from"./FilesSelectionMixin-GHX9hTKF.chunk.mjs";import{H as G}from"./HeaderNavigation-6G2FmN95.chunk.mjs";import{F as K}from"./FetchFilesMixin-Ck9H2-jY.chunk.mjs";import{F as W}from"./FilesByMonthMixin-DvgVVt_F.chunk.mjs";import"./index-K61t94YW.chunk.mjs";import"./NcSelect-CHc1QupB-BHJEUvv_.chunk.mjs";import"./NcAvatar-DkAX4nqq-B0poB0w8.chunk.mjs";import"./useModelMigration-EhAWvqDD-C15wbtL_.chunk.mjs";import"./PhotosFiltersInput-Rq4vPTbx.chunk.mjs";import"./NcDateTimePicker-BnrbGiT7.chunk.mjs";import"./useFormatDateTime-DyMeKy1D.chunk.mjs";import"./createElementId-DhjFt1I9-B2HCdIOx.chunk.mjs";import"./NcDateTime-enXYuwj8-T7oCJafb.chunk.mjs";import"./collectionFetcher-DyDb1Dp2.chunk.mjs";import"./video-B7iCXJqN.chunk.mjs";import"./NcTextField-Czr9S6YO-RwCaeh-_.chunk.mjs";import"./index-x9vhq81Z.chunk.mjs";import"./NcSelectUsers-B4w9UC_d-BckswLS_.chunk.mjs";import"./FetchCollectionContentMixin-B2MWChoj.chunk.mjs";import"./AbortControllerMixin-CCU9Utyn.chunk.mjs";import"./NcVNodes-Cmft-jHc.chunk.mjs";import"./NcCheckboxRadioSwitch-D4IV4zWy-CSDAL8Yg.chunk.mjs";import"./NcIconToggleSwitch-0NTw7i-t-DOrRmNgh.chunk.mjs";import"./fileFetcher-p0a3IV9C.chunk.mjs";import"./PhotoSearch-CvX3QQRp.chunk.mjs";const X=F({name:"AlbumPicker",components:{Plus:f,ImageMultipleOutline:$,NcButton:p,NcListItem:R,NcLoadingIcon:k,NcUserBubble:j,AlbumForm:y},filters:{toCoverUrl(e){return _(`/apps/photos/api/v1/preview/${e}?x=64&y=64`)}},mixins:[z],data(){return{showAlbumCreationForm:!1}},computed:{albums(){return this.$store.getters.albums},sharedAlbums(){return this.$store.getters.sharedAlbums},allAlbums(){return[...Object.values(this.albums),...Object.values(this.sharedAlbums)]}},mounted(){this.fetchAlbumList()},methods:{async fetchAlbumList(){await this.fetchCollections(`/photos/${n()?.uid}/albums`,c),await this.fetchCollections(`/photos/${n()?.uid}/sharedalbums`,c)},albumCreatedHandler(){this.showAlbumCreationForm=!1,this.fetchAlbumList()},pickAlbum(e){this.$emit("album-picked",e)},isSharedAlbum(e){return e.path.match(/^\/photos\/.+\/sharedalbums\//)!==null},originalName(e){return this.isSharedAlbum(e)?e.basename.replace(new RegExp(`\\(${e.attributes.collaborators[0].id}\\)$`),""):e.basename},t:h,n:A}});var Z=function(){var e=this,t=e._self._c;return e._self._setupProxy,e.showAlbumCreationForm?t("AlbumForm",{attrs:{"display-back-button":!0,title:e.t("photos","New album")},on:{back:function(o){e.showAlbumCreationForm=!1},done:e.albumCreatedHandler}}):t("div",{staticClass:"album-picker"},[t("h2",[e._v(" "+e._s(e.t("photos","Add to Album"))+" "),e.loadingCollections?t("NcLoadingIcon",{staticClass:"loading-icon"}):e._e()],1),t("ul",{staticClass:"albums-container"},e._l(e.allAlbums,function(o){return t("NcListItem",{key:o.attributes.filename,staticClass:"album",attrs:{name:e.originalName(o),"aria-label":e.t("photos","Add selection to album {albumName}",{albumName:o.basename})},on:{click:function(s){return e.pickAlbum(o)}},scopedSlots:e._u([{key:"subname",fn:function(){return[e._v(" "+e._s(e.n("photos","%n item","%n photos and videos",o.attributes.nbItems))+" "),e.isSharedAlbum(o)?[e._v(" ⸱ "+e._s(e.t("photos","Shared by"))+" "),t("NcUserBubble",{attrs:{"display-name":o.attributes.collaborators[0].label,user:o.attributes.collaborators[0].id}})]:e._e()]},proxy:!0}],null,!0)},[t("template",{slot:"icon"},[o.attributes["last-photo"]!==-1?t("img",{staticClass:"album__image",attrs:{src:e._f("toCoverUrl")(o.attributes["last-photo"])}}):t("div",{staticClass:"album__image album__image--placeholder"},[t("ImageMultipleOutline",{attrs:{size:32}})],1)])],2)}),1),t("NcButton",{staticClass:"new-album-button",attrs:{"aria-label":e.t("photos","Create a new album."),variant:"tertiary"},on:{click:function(o){e.showAlbumCreationForm=!0}},scopedSlots:e._u([{key:"icon",fn:function(){return[t("Plus")]},proxy:!0}],null,!1,1489515321)},[e._v(" "+e._s(e.t("photos","Create new album"))+" ")])],1)},ee=[],te=b(X,Z,ee,!1,null,"9619a86f");const oe=te.exports;async function d(e,t){await v.head(e);const o=document.createElement("a");o.download=t??"",o.href=e,o.click()}function se(e,t){const o=e.split("/").filter(Boolean),s=t.split("/").filter(Boolean);let i="";for(const[a,l]of o.entries()){if(a>=t.length||l!==s[a])break;i=`${i}${i===""?"":"/"}${l}`}return i}async function ie(e){let t;if(e.length===1)if(e[0].type===C.File){await d(e[0].encodedSource,e[0].displayname);return}else t=new URL(e[0].encodedSource),t.searchParams.append("accept","zip");else{t=new URL(e[0].encodedSource);let o=t.pathname;for(const i of e.slice(1))o=se(o,new URL(i.encodedSource).pathname);t.pathname=o;const s=e.map(i=>decodeURIComponent(i.encodedSource.slice(t.href.length+1)));t.searchParams.append("accept","zip"),t.searchParams.append("files",JSON.stringify(s))}t.pathname.at(-1)!=="/"&&(t.pathname=`${t.pathname}/`),await d(t.href)}const ae={name:"TimelineView",components:{DeleteOutline:V,PlusBoxMultipleOutline:E,DownloadOutline:Y,Close:D,Plus:f,FolderAlertOutline:U,NcEmptyContent:L,NcModal:B,NcActions:S,NcActionButton:O,NcButton:p,AlbumForm:y,AlbumPicker:oe,FilesListViewer:J,FileComponent:Q,ActionFavorite:H,HeaderNavigation:G,PhotosSourceLocationsSettings:M,AlertCircleOutline:T},filters:{dateMonth(e){return r(e,"YYYYMM").format("MMMM")},dateYear(e){return r(e,"YYYYMM").format("YYYY")}},mixins:[K,q,W],beforeRouteLeave(e,t,o){this.appContent?.scrollTo(0,0),o(),Object.keys(this.selectedFilters).forEach(s=>{this.selectedFilters[s]=[]})},props:{onlyFavorites:{type:Boolean,default:!1},mimesType:{type:Array,default:()=>N},onThisDay:{type:Boolean,default:!1},rootTitle:{type:String,required:!0}},setup(){const e=x(),t=P(),{selectedFilters:o,filtersQuery:s}=I(t);return{isMobile:e,selectedFilters:o,filtersQuery:s}},data(){return{loadingCount:0,showAlbumCreationForm:!1,showAlbumPicker:!1,appContent:document.getElementById("app-content-vue"),showFilters:!1}},computed:{files(){return this.$store.state.files.files},createAlbumButtonLabel(){return Object.keys(this.selectedFilters).length>0?this.t("photos","Create new album from filters"):this.t("photos","Create new album")}},watch:{filtersQuery(){this.resetFetchFilesState(),this.getContent()}},mounted(){g(m,this.handleUserConfigChange)},destroyed(){w(m,this.handleUserConfigChange)},methods:{getContent(){this.fetchFiles({mimesType:this.mimesType,onThisDay:this.onThisDay,onlyFavorites:this.onlyFavorites,extraFilters:this.filtersQuery})},openViewer(e){window.OCA.Viewer.open({fileInfo:u(this.files[e]),list:Object.values(this.fileIdsByMonth).flat().map(t=>u(this.files[t]))})},openUploader(){},async addSelectionToAlbum(e){this.showAlbumPicker=!1,await this.$store.dispatch("addFilesToCollection",{collectionFileName:e.root+e.path,fileIdsToAdd:this.selectedFileIds})},async deleteSelection(){const e=this.selectedFileIds;this.onUncheckFiles(e),this.fetchedFileIds=this.fetchedFileIds.filter(t=>!e.includes(t)),await this.$store.dispatch("deleteFiles",e)},handleUserConfigChange({key:e}){e==="photosSourceFolders"&&this.resetFetchFilesState()},handleFormCreationDone({album:e}){this.showAlbumCreationForm=!1,this.$router.push(`/albums/${e.basename}`)},downloadSelectedFiles(){const e=this.selectedFileIds;this.onUncheckFiles(e),ie(e.map(t=>this.files[t]))},t:h}};var le=function(){var e=this,t=e._self._c;return e.errorFetchingFiles?t("div",{staticClass:"timeline__empty-content"},[e.errorFetchingFiles===404?t("NcEmptyContent",{attrs:{name:e.t("photos","One of the source folders does not exist")}},[t("FolderAlertOutline",{attrs:{slot:"icon"},slot:"icon"}),t("PhotosSourceLocationsSettings",{staticClass:"timeline__update_source_directory",attrs:{slot:"action"},slot:"action"})],1):t("NcEmptyContent",{attrs:{name:e.t("photos","An error occurred")}},[t("AlertCircleOutline",{attrs:{slot:"icon"},slot:"icon"})],1)],1):t("div",{staticClass:"timeline"},[t("HeaderNavigation",{key:"navigation",attrs:{loading:e.loadingCount>0,path:"/",title:e.rootTitle,"root-title":e.rootTitle},on:{refresh:e.resetFetchFilesState}},[t("div",{staticClass:"timeline__header__left"},[e.selectedFileIds.length===0?t("NcButton",{ref:"newAlbumButton",attrs:{"aria-label":e.createAlbumButtonLabel,"data-cy-header-action":"create-album"},on:{click:function(o){e.showAlbumCreationForm=!0}},scopedSlots:e._u([{key:"icon",fn:function(){return[t("PlusBoxMultipleOutline")]},proxy:!0}],null,!1,2448450972)},[e._v(" "+e._s(e.createAlbumButtonLabel)+" ")]):[t("NcButton",{attrs:{"close-after-click":!0,variant:"primary","aria-label":e.t("photos","Add to album"),"data-cy-header-action":"add-to-album"},on:{click:function(o){e.showAlbumPicker=!0}},scopedSlots:e._u([{key:"icon",fn:function(){return[t("Plus")]},proxy:!0},e.isMobile?null:{key:"default",fn:function(){return[e._v(" "+e._s(e.t("photos","Add to album"))+" ")]},proxy:!0}],null,!0)}),e.selectedFileIds.length>0?t("NcButton",{attrs:{"aria-label":e.t("photos","Unselect all"),"data-cy-header-action":"unselect-all"},on:{click:e.resetSelection},scopedSlots:e._u([{key:"icon",fn:function(){return[t("Close")]},proxy:!0},e.isMobile?null:{key:"default",fn:function(){return[e._v(" "+e._s(e.t("photos","Unselect all"))+" ")]},proxy:!0}],null,!0)}):e._e(),t("NcActions",{attrs:{"aria-label":e.t("photos","Open actions menu")}},[t("NcActionButton",{attrs:{"data-cy-header-action":"download-selection","close-after-click":!0,"aria-label":e.t("photos","Download selected files")},on:{click:e.downloadSelectedFiles},scopedSlots:e._u([{key:"icon",fn:function(){return[t("DownloadOutline")]},proxy:!0}])},[e._v(" "+e._s(e.t("photos","Download selected files"))+" ")]),t("ActionFavorite",{attrs:{"selected-file-ids":e.selectedFileIds}}),t("NcActionButton",{attrs:{"close-after-click":!0,"aria-label":e.t("photos","Delete selection"),"data-cy-header-action":"delete-selection"},on:{click:e.deleteSelection},scopedSlots:e._u([{key:"icon",fn:function(){return[t("DeleteOutline")]},proxy:!0}])},[e._v(" "+e._s(e.t("photos","Delete selection"))+" ")])],1)]],2)]),t("FilesListViewer",{ref:"filesListViewer",staticClass:"timeline__file-list",attrs:{"container-element":e.appContent,"file-ids-by-section":e.fileIdsByMonth,sections:e.monthsList,loading:e.loadingFiles,"base-height":e.isMobile?120:200,"empty-message":e.t("photos","No photos or videos in here")},on:{"need-content":e.getContent},scopedSlots:e._u([{key:"default",fn:function({file:o,isHeader:s}){return[s?t("h2",{staticClass:"section-header",attrs:{id:`file-picker-section-header-${o.id}`}},[t("b",[e._v(e._s(e._f("dateMonth")(o.id)))]),e._v(" "+e._s(e._f("dateYear")(o.id))+" ")]):t("FileComponent",{attrs:{file:e.files[o.id],"allow-selection":!0,selected:e.selection[o.id]===!0},on:{click:e.openViewer,"select-toggled":e.onFileSelectToggle}})]}}])}),e.showAlbumCreationForm?t("NcModal",{key:"albumCreationForm",attrs:{"label-id":"new-album-form","set-return-focus":e.$refs.newAlbumButton?.$el},on:{close:function(o){e.showAlbumCreationForm=!1}}},[t("h2",{staticClass:"timeline__heading"},[e._v(" "+e._s(e.t("photos","New album"))+" ")]),t("AlbumForm",{attrs:{"filters-value":e.selectedFilters},on:{done:e.handleFormCreationDone}})],1):e._e(),e.showAlbumPicker?t("NcModal",{key:"albumPicker",attrs:{"label-id":"album-picker"},on:{close:function(o){e.showAlbumPicker=!1}}},[t("AlbumPicker",{on:{"album-picked":e.addSelectionToAlbum}})],1):e._e()],1)},ne=[],re=b(ae,le,ne,!1,null,"0b7f1d5e");const qe=re.exports;export{qe as default};
-//# sourceMappingURL=TimelineView-CyTpbG36.chunk.mjs.map
+import{a as F,h as A,t as h,s as n,k as _,F as C,v as w,x as g}from"./preload-helper-iHri5ttz.chunk.mjs";import{m as r}from"./index-DjIio1qt.chunk.mjs";import{z as k,i as p,x as c,T as v,a as N,A as S,v as B,E as u,U as m,C as x}from"./index-6_vkf3an.chunk.mjs";import{P as M,u as P,s as I}from"./filters-DiWkMIga.chunk.mjs";import{N as O}from"./NcActionButton-K4jUGMlW-Bs_jOwCM.chunk.mjs";import{N as L}from"./NcEmptyContent-BkpeWiV5.chunk.mjs";import{I as $,P as f,n as b,A as T,F as U,e as D,k as Y,o as E,D as V}from"./icons-BPrPKxzl.chunk.mjs";import{A as H}from"./ActionFavorite-u-7FbcqP.chunk.mjs";import{A as y}from"./AlbumForm-DNYy3ar8.chunk.mjs";import{N as R}from"./NcListItem-CaosvdEe-C-ofnpX3.chunk.mjs";import{N as j}from"./NcUserBubble-BGfZAi4c-BGVx_Zba.chunk.mjs";import{F as z}from"./FetchCollectionsMixin-BuJ7c1sd.chunk.mjs";import{F as Q}from"./FileComponent-Bw4ZFXMR.chunk.mjs";import{F as q,a as J}from"./FilesSelectionMixin-GHX9hTKF.chunk.mjs";import{H as G}from"./HeaderNavigation-6G2FmN95.chunk.mjs";import{F as K}from"./FetchFilesMixin-Ck9H2-jY.chunk.mjs";import{F as W}from"./FilesByMonthMixin-DvgVVt_F.chunk.mjs";import"./index-K61t94YW.chunk.mjs";import"./NcSelect-CHc1QupB-BHJEUvv_.chunk.mjs";import"./NcAvatar-DkAX4nqq-B0poB0w8.chunk.mjs";import"./useModelMigration-EhAWvqDD-C15wbtL_.chunk.mjs";import"./PhotosFiltersInput-BJ4kTX4C.chunk.mjs";import"./NcDateTimePicker-BnrbGiT7.chunk.mjs";import"./useFormatDateTime-DyMeKy1D.chunk.mjs";import"./createElementId-DhjFt1I9-B2HCdIOx.chunk.mjs";import"./NcDateTime-enXYuwj8-T7oCJafb.chunk.mjs";import"./collectionFetcher-DyDb1Dp2.chunk.mjs";import"./video-CFxEyJH4.chunk.mjs";import"./NcTextField-Czr9S6YO-RwCaeh-_.chunk.mjs";import"./index-x9vhq81Z.chunk.mjs";import"./NcSelectUsers-B4w9UC_d-BckswLS_.chunk.mjs";import"./FetchCollectionContentMixin-B2MWChoj.chunk.mjs";import"./AbortControllerMixin-CCU9Utyn.chunk.mjs";import"./NcVNodes-Cmft-jHc.chunk.mjs";import"./NcCheckboxRadioSwitch-D4IV4zWy-CSDAL8Yg.chunk.mjs";import"./NcIconToggleSwitch-0NTw7i-t-DOrRmNgh.chunk.mjs";import"./fileFetcher-p0a3IV9C.chunk.mjs";import"./PhotoSearch-CvX3QQRp.chunk.mjs";const X=F({name:"AlbumPicker",components:{Plus:f,ImageMultipleOutline:$,NcButton:p,NcListItem:R,NcLoadingIcon:k,NcUserBubble:j,AlbumForm:y},filters:{toCoverUrl(e){return _(`/apps/photos/api/v1/preview/${e}?x=64&y=64`)}},mixins:[z],data(){return{showAlbumCreationForm:!1}},computed:{albums(){return this.$store.getters.albums},sharedAlbums(){return this.$store.getters.sharedAlbums},allAlbums(){return[...Object.values(this.albums),...Object.values(this.sharedAlbums)]}},mounted(){this.fetchAlbumList()},methods:{async fetchAlbumList(){await this.fetchCollections(`/photos/${n()?.uid}/albums`,c),await this.fetchCollections(`/photos/${n()?.uid}/sharedalbums`,c)},albumCreatedHandler(){this.showAlbumCreationForm=!1,this.fetchAlbumList()},pickAlbum(e){this.$emit("album-picked",e)},isSharedAlbum(e){return e.path.match(/^\/photos\/.+\/sharedalbums\//)!==null},originalName(e){return this.isSharedAlbum(e)?e.basename.replace(new RegExp(`\\(${e.attributes.collaborators[0].id}\\)$`),""):e.basename},t:h,n:A}});var Z=function(){var e=this,t=e._self._c;return e._self._setupProxy,e.showAlbumCreationForm?t("AlbumForm",{attrs:{"display-back-button":!0,title:e.t("photos","New album")},on:{back:function(o){e.showAlbumCreationForm=!1},done:e.albumCreatedHandler}}):t("div",{staticClass:"album-picker"},[t("h2",[e._v(" "+e._s(e.t("photos","Add to Album"))+" "),e.loadingCollections?t("NcLoadingIcon",{staticClass:"loading-icon"}):e._e()],1),t("ul",{staticClass:"albums-container"},e._l(e.allAlbums,function(o){return t("NcListItem",{key:o.attributes.filename,staticClass:"album",attrs:{name:e.originalName(o),"aria-label":e.t("photos","Add selection to album {albumName}",{albumName:o.basename})},on:{click:function(s){return e.pickAlbum(o)}},scopedSlots:e._u([{key:"subname",fn:function(){return[e._v(" "+e._s(e.n("photos","%n item","%n photos and videos",o.attributes.nbItems))+" "),e.isSharedAlbum(o)?[e._v(" ⸱ "+e._s(e.t("photos","Shared by"))+" "),t("NcUserBubble",{attrs:{"display-name":o.attributes.collaborators[0].label,user:o.attributes.collaborators[0].id}})]:e._e()]},proxy:!0}],null,!0)},[t("template",{slot:"icon"},[o.attributes["last-photo"]!==-1?t("img",{staticClass:"album__image",attrs:{src:e._f("toCoverUrl")(o.attributes["last-photo"])}}):t("div",{staticClass:"album__image album__image--placeholder"},[t("ImageMultipleOutline",{attrs:{size:32}})],1)])],2)}),1),t("NcButton",{staticClass:"new-album-button",attrs:{"aria-label":e.t("photos","Create a new album."),variant:"tertiary"},on:{click:function(o){e.showAlbumCreationForm=!0}},scopedSlots:e._u([{key:"icon",fn:function(){return[t("Plus")]},proxy:!0}],null,!1,1489515321)},[e._v(" "+e._s(e.t("photos","Create new album"))+" ")])],1)},ee=[],te=b(X,Z,ee,!1,null,"9619a86f");const oe=te.exports;async function d(e,t){await v.head(e);const o=document.createElement("a");o.download=t??"",o.href=e,o.click()}function se(e,t){const o=e.split("/").filter(Boolean),s=t.split("/").filter(Boolean);let i="";for(const[a,l]of o.entries()){if(a>=t.length||l!==s[a])break;i=`${i}${i===""?"":"/"}${l}`}return i}async function ie(e){let t;if(e.length===1)if(e[0].type===C.File){await d(e[0].encodedSource,e[0].displayname);return}else t=new URL(e[0].encodedSource),t.searchParams.append("accept","zip");else{t=new URL(e[0].encodedSource);let o=t.pathname;for(const i of e.slice(1))o=se(o,new URL(i.encodedSource).pathname);t.pathname=o;const s=e.map(i=>decodeURIComponent(i.encodedSource.slice(t.href.length+1)));t.searchParams.append("accept","zip"),t.searchParams.append("files",JSON.stringify(s))}t.pathname.at(-1)!=="/"&&(t.pathname=`${t.pathname}/`),await d(t.href)}const ae={name:"TimelineView",components:{DeleteOutline:V,PlusBoxMultipleOutline:E,DownloadOutline:Y,Close:D,Plus:f,FolderAlertOutline:U,NcEmptyContent:L,NcModal:B,NcActions:S,NcActionButton:O,NcButton:p,AlbumForm:y,AlbumPicker:oe,FilesListViewer:J,FileComponent:Q,ActionFavorite:H,HeaderNavigation:G,PhotosSourceLocationsSettings:M,AlertCircleOutline:T},filters:{dateMonth(e){return r(e,"YYYYMM").format("MMMM")},dateYear(e){return r(e,"YYYYMM").format("YYYY")}},mixins:[K,q,W],beforeRouteLeave(e,t,o){this.appContent?.scrollTo(0,0),o(),Object.keys(this.selectedFilters).forEach(s=>{this.selectedFilters[s]=[]})},props:{onlyFavorites:{type:Boolean,default:!1},mimesType:{type:Array,default:()=>N},onThisDay:{type:Boolean,default:!1},rootTitle:{type:String,required:!0}},setup(){const e=x(),t=P(),{selectedFilters:o,filtersQuery:s}=I(t);return{isMobile:e,selectedFilters:o,filtersQuery:s}},data(){return{loadingCount:0,showAlbumCreationForm:!1,showAlbumPicker:!1,appContent:document.getElementById("app-content-vue"),showFilters:!1}},computed:{files(){return this.$store.state.files.files},createAlbumButtonLabel(){return Object.keys(this.selectedFilters).length>0?this.t("photos","Create new album from filters"):this.t("photos","Create new album")}},watch:{filtersQuery(){this.resetFetchFilesState(),this.getContent()}},mounted(){g(m,this.handleUserConfigChange)},destroyed(){w(m,this.handleUserConfigChange)},methods:{getContent(){this.fetchFiles({mimesType:this.mimesType,onThisDay:this.onThisDay,onlyFavorites:this.onlyFavorites,extraFilters:this.filtersQuery})},openViewer(e){window.OCA.Viewer.open({fileInfo:u(this.files[e]),list:Object.values(this.fileIdsByMonth).flat().map(t=>u(this.files[t]))})},openUploader(){},async addSelectionToAlbum(e){this.showAlbumPicker=!1,await this.$store.dispatch("addFilesToCollection",{collectionFileName:e.root+e.path,fileIdsToAdd:this.selectedFileIds})},async deleteSelection(){const e=this.selectedFileIds;this.onUncheckFiles(e),this.fetchedFileIds=this.fetchedFileIds.filter(t=>!e.includes(t)),await this.$store.dispatch("deleteFiles",e)},handleUserConfigChange({key:e}){e==="photosSourceFolders"&&this.resetFetchFilesState()},handleFormCreationDone({album:e}){this.showAlbumCreationForm=!1,this.$router.push(`/albums/${e.basename}`)},downloadSelectedFiles(){const e=this.selectedFileIds;this.onUncheckFiles(e),ie(e.map(t=>this.files[t]))},t:h}};var le=function(){var e=this,t=e._self._c;return e.errorFetchingFiles?t("div",{staticClass:"timeline__empty-content"},[e.errorFetchingFiles===404?t("NcEmptyContent",{attrs:{name:e.t("photos","One of the source folders does not exist")}},[t("FolderAlertOutline",{attrs:{slot:"icon"},slot:"icon"}),t("PhotosSourceLocationsSettings",{staticClass:"timeline__update_source_directory",attrs:{slot:"action"},slot:"action"})],1):t("NcEmptyContent",{attrs:{name:e.t("photos","An error occurred")}},[t("AlertCircleOutline",{attrs:{slot:"icon"},slot:"icon"})],1)],1):t("div",{staticClass:"timeline"},[t("HeaderNavigation",{key:"navigation",attrs:{loading:e.loadingCount>0,path:"/",title:e.rootTitle,"root-title":e.rootTitle},on:{refresh:e.resetFetchFilesState}},[t("div",{staticClass:"timeline__header__left"},[e.selectedFileIds.length===0?t("NcButton",{ref:"newAlbumButton",attrs:{"aria-label":e.createAlbumButtonLabel,"data-cy-header-action":"create-album"},on:{click:function(o){e.showAlbumCreationForm=!0}},scopedSlots:e._u([{key:"icon",fn:function(){return[t("PlusBoxMultipleOutline")]},proxy:!0}],null,!1,2448450972)},[e._v(" "+e._s(e.createAlbumButtonLabel)+" ")]):[t("NcButton",{attrs:{"close-after-click":!0,variant:"primary","aria-label":e.t("photos","Add to album"),"data-cy-header-action":"add-to-album"},on:{click:function(o){e.showAlbumPicker=!0}},scopedSlots:e._u([{key:"icon",fn:function(){return[t("Plus")]},proxy:!0},e.isMobile?null:{key:"default",fn:function(){return[e._v(" "+e._s(e.t("photos","Add to album"))+" ")]},proxy:!0}],null,!0)}),e.selectedFileIds.length>0?t("NcButton",{attrs:{"aria-label":e.t("photos","Unselect all"),"data-cy-header-action":"unselect-all"},on:{click:e.resetSelection},scopedSlots:e._u([{key:"icon",fn:function(){return[t("Close")]},proxy:!0},e.isMobile?null:{key:"default",fn:function(){return[e._v(" "+e._s(e.t("photos","Unselect all"))+" ")]},proxy:!0}],null,!0)}):e._e(),t("NcActions",{attrs:{"aria-label":e.t("photos","Open actions menu")}},[t("NcActionButton",{attrs:{"data-cy-header-action":"download-selection","close-after-click":!0,"aria-label":e.t("photos","Download selected files")},on:{click:e.downloadSelectedFiles},scopedSlots:e._u([{key:"icon",fn:function(){return[t("DownloadOutline")]},proxy:!0}])},[e._v(" "+e._s(e.t("photos","Download selected files"))+" ")]),t("ActionFavorite",{attrs:{"selected-file-ids":e.selectedFileIds}}),t("NcActionButton",{attrs:{"close-after-click":!0,"aria-label":e.t("photos","Delete selection"),"data-cy-header-action":"delete-selection"},on:{click:e.deleteSelection},scopedSlots:e._u([{key:"icon",fn:function(){return[t("DeleteOutline")]},proxy:!0}])},[e._v(" "+e._s(e.t("photos","Delete selection"))+" ")])],1)]],2)]),t("FilesListViewer",{ref:"filesListViewer",staticClass:"timeline__file-list",attrs:{"container-element":e.appContent,"file-ids-by-section":e.fileIdsByMonth,sections:e.monthsList,loading:e.loadingFiles,"base-height":e.isMobile?120:200,"empty-message":e.t("photos","No photos or videos in here")},on:{"need-content":e.getContent},scopedSlots:e._u([{key:"default",fn:function({file:o,isHeader:s}){return[s?t("h2",{staticClass:"section-header",attrs:{id:`file-picker-section-header-${o.id}`}},[t("b",[e._v(e._s(e._f("dateMonth")(o.id)))]),e._v(" "+e._s(e._f("dateYear")(o.id))+" ")]):t("FileComponent",{attrs:{file:e.files[o.id],"allow-selection":!0,selected:e.selection[o.id]===!0},on:{click:e.openViewer,"select-toggled":e.onFileSelectToggle}})]}}])}),e.showAlbumCreationForm?t("NcModal",{key:"albumCreationForm",attrs:{"label-id":"new-album-form","set-return-focus":e.$refs.newAlbumButton?.$el},on:{close:function(o){e.showAlbumCreationForm=!1}}},[t("h2",{staticClass:"timeline__heading"},[e._v(" "+e._s(e.t("photos","New album"))+" ")]),t("AlbumForm",{attrs:{"filters-value":e.selectedFilters},on:{done:e.handleFormCreationDone}})],1):e._e(),e.showAlbumPicker?t("NcModal",{key:"albumPicker",attrs:{"label-id":"album-picker"},on:{close:function(o){e.showAlbumPicker=!1}}},[t("AlbumPicker",{on:{"album-picked":e.addSelectionToAlbum}})],1):e._e()],1)},ne=[],re=b(ae,le,ne,!1,null,"0b7f1d5e");const qe=re.exports;export{qe as default};
+//# sourceMappingURL=TimelineView-CTHqOiOb.chunk.mjs.map
diff --git a/js/TimelineView-CyTpbG36.chunk.mjs.license b/js/TimelineView-CTHqOiOb.chunk.mjs.license
similarity index 100%
rename from js/TimelineView-CyTpbG36.chunk.mjs.license
rename to js/TimelineView-CTHqOiOb.chunk.mjs.license
diff --git a/js/TimelineView-CyTpbG36.chunk.mjs.map b/js/TimelineView-CTHqOiOb.chunk.mjs.map
similarity index 99%
rename from js/TimelineView-CyTpbG36.chunk.mjs.map
rename to js/TimelineView-CTHqOiOb.chunk.mjs.map
index 4ca32fa4c1..899daca856 100644
--- a/js/TimelineView-CyTpbG36.chunk.mjs.map
+++ b/js/TimelineView-CTHqOiOb.chunk.mjs.map
@@ -1 +1 @@
-{"version":3,"file":"TimelineView-CyTpbG36.chunk.mjs","sources":["../src/components/Albums/AlbumPicker.vue","../src/services/downloadFiles.ts","../src/views/TimelineView.vue"],"sourcesContent":["\n\n\t
\n\t\t
\n\t\t\t{{ t('photos', 'Add to Album') }}\n\t\t\t\n\t\t
\n\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t{{ t('photos', 'Create new album') }}\n\t\t\n\t
\n\n\t\n\n\n\n\n\n","/**\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport axios from '@nextcloud/axios'\nimport {\n\ttype Node,\n\n\tFileType,\n} from '@nextcloud/files'\n\n/**\n * Trigger downloading a file.\n *\n * @param url The url of the asset to download\n * @param name Optionally the recommended name of the download (browsers might ignore it)\n */\nasync function triggerDownload(url: string, name?: string) {\n\t// try to see if the resource is still available\n\tawait axios.head(url)\n\n\tconst hiddenElement = document.createElement('a')\n\thiddenElement.download = name ?? ''\n\thiddenElement.href = url\n\thiddenElement.click()\n}\n\n/**\n * Find the longest common path prefix of both input paths\n *\n * @param first The first path\n * @param second The second path\n */\nfunction longestCommonPath(first: string, second: string): string {\n\tconst firstSegments = first.split('/').filter(Boolean)\n\tconst secondSegments = second.split('/').filter(Boolean)\n\tlet base = ''\n\tfor (const [index, segment] of firstSegments.entries()) {\n\t\tif (index >= second.length) {\n\t\t\tbreak\n\t\t}\n\t\tif (segment !== secondSegments[index]) {\n\t\t\tbreak\n\t\t}\n\t\tconst sep = base === '' ? '' : '/'\n\t\tbase = `${base}${sep}${segment}`\n\t}\n\treturn base\n}\n\n/**\n * Download the given nodes.\n *\n * If only one node is given, it will be downloaded directly.\n * If multiple nodes are given, they will be zipped and downloaded.\n *\n * @param nodes The node(s) to download\n */\nexport async function downloadFiles(nodes: Node[]) {\n\tlet url: URL\n\n\tif (nodes.length === 1) {\n\t\tif (nodes[0]!.type === FileType.File) {\n\t\t\tawait triggerDownload(nodes[0]!.encodedSource, nodes[0]!.displayname)\n\t\t\treturn\n\t\t} else {\n\t\t\turl = new URL(nodes[0]!.encodedSource)\n\t\t\turl.searchParams.append('accept', 'zip')\n\t\t}\n\t} else {\n\t\turl = new URL(nodes[0]!.encodedSource)\n\t\tlet base = url.pathname\n\t\tfor (const node of nodes.slice(1)) {\n\t\t\tbase = longestCommonPath(base, (new URL(node.encodedSource).pathname))\n\t\t}\n\t\turl.pathname = base\n\n\t\t// The URL contains the path encoded so we need to decode as the query.append will re-encode it\n\t\tconst filenames = nodes.map((node) => decodeURIComponent(node.encodedSource.slice(url.href.length + 1)))\n\t\turl.searchParams.append('accept', 'zip')\n\t\turl.searchParams.append('files', JSON.stringify(filenames))\n\t}\n\n\tif (url.pathname.at(-1) !== '/') {\n\t\turl.pathname = `${url.pathname}/`\n\t}\n\n\tawait triggerDownload(url.href)\n}\n","\n\n\n\t\n\t
\n\n\n\n\n\n"],"names":["_sfc_main$1","defineComponent","Plus","ImageMultipleOutline","NcButton","NcListItem","NcLoadingIcon","NcUserBubble","AlbumForm","fileId","generateUrl","FetchCollectionsMixin","getCurrentUser","albumsExtraProps","album","translate","translatePlural","triggerDownload","url","name","axios","hiddenElement","longestCommonPath","first","second","firstSegments","secondSegments","base","index","segment","downloadFiles","nodes","FileType","node","filenames","_sfc_main","DeleteOutline","PlusBoxMultipleOutline","DownloadOutline","Close","FolderAlertOutline","NcEmptyContent","NcModal","NcActions","NcActionButton","AlbumPicker","FilesListViewer","FileComponent","ActionFavorite","HeaderNavigation","PhotosSourceLocationsSettings","AlertCircleOutline","date","moment","FetchFilesMixin","FilesSelectionMixin","FilesByMonthMixin","to","from","next","key","allMimes","isMobile","useIsMobile","filtersStore","useFilterStore","selectedFilters","filtersQuery","storeToRefs","subscribe","configChangedEvent","unsubscribe","toViewerFileInfo","fileIds","fileid","t"],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"TimelineView-CTHqOiOb.chunk.mjs","sources":["../src/components/Albums/AlbumPicker.vue","../src/services/downloadFiles.ts","../src/views/TimelineView.vue"],"sourcesContent":["\n\n\t
\n\t\t
\n\t\t\t{{ t('photos', 'Add to Album') }}\n\t\t\t\n\t\t
\n\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t{{ t('photos', 'Create new album') }}\n\t\t\n\t
\n\n\t\n\n\n\n\n\n","/**\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport axios from '@nextcloud/axios'\nimport {\n\ttype Node,\n\n\tFileType,\n} from '@nextcloud/files'\n\n/**\n * Trigger downloading a file.\n *\n * @param url The url of the asset to download\n * @param name Optionally the recommended name of the download (browsers might ignore it)\n */\nasync function triggerDownload(url: string, name?: string) {\n\t// try to see if the resource is still available\n\tawait axios.head(url)\n\n\tconst hiddenElement = document.createElement('a')\n\thiddenElement.download = name ?? ''\n\thiddenElement.href = url\n\thiddenElement.click()\n}\n\n/**\n * Find the longest common path prefix of both input paths\n *\n * @param first The first path\n * @param second The second path\n */\nfunction longestCommonPath(first: string, second: string): string {\n\tconst firstSegments = first.split('/').filter(Boolean)\n\tconst secondSegments = second.split('/').filter(Boolean)\n\tlet base = ''\n\tfor (const [index, segment] of firstSegments.entries()) {\n\t\tif (index >= second.length) {\n\t\t\tbreak\n\t\t}\n\t\tif (segment !== secondSegments[index]) {\n\t\t\tbreak\n\t\t}\n\t\tconst sep = base === '' ? '' : '/'\n\t\tbase = `${base}${sep}${segment}`\n\t}\n\treturn base\n}\n\n/**\n * Download the given nodes.\n *\n * If only one node is given, it will be downloaded directly.\n * If multiple nodes are given, they will be zipped and downloaded.\n *\n * @param nodes The node(s) to download\n */\nexport async function downloadFiles(nodes: Node[]) {\n\tlet url: URL\n\n\tif (nodes.length === 1) {\n\t\tif (nodes[0]!.type === FileType.File) {\n\t\t\tawait triggerDownload(nodes[0]!.encodedSource, nodes[0]!.displayname)\n\t\t\treturn\n\t\t} else {\n\t\t\turl = new URL(nodes[0]!.encodedSource)\n\t\t\turl.searchParams.append('accept', 'zip')\n\t\t}\n\t} else {\n\t\turl = new URL(nodes[0]!.encodedSource)\n\t\tlet base = url.pathname\n\t\tfor (const node of nodes.slice(1)) {\n\t\t\tbase = longestCommonPath(base, (new URL(node.encodedSource).pathname))\n\t\t}\n\t\turl.pathname = base\n\n\t\t// The URL contains the path encoded so we need to decode as the query.append will re-encode it\n\t\tconst filenames = nodes.map((node) => decodeURIComponent(node.encodedSource.slice(url.href.length + 1)))\n\t\turl.searchParams.append('accept', 'zip')\n\t\turl.searchParams.append('files', JSON.stringify(filenames))\n\t}\n\n\tif (url.pathname.at(-1) !== '/') {\n\t\turl.pathname = `${url.pathname}/`\n\t}\n\n\tawait triggerDownload(url.href)\n}\n","\n\n\n\t\n\t
\n\n\n\n\n\n"],"names":["_sfc_main$1","defineComponent","Plus","ImageMultipleOutline","NcButton","NcListItem","NcLoadingIcon","NcUserBubble","AlbumForm","fileId","generateUrl","FetchCollectionsMixin","getCurrentUser","albumsExtraProps","album","translate","translatePlural","triggerDownload","url","name","axios","hiddenElement","longestCommonPath","first","second","firstSegments","secondSegments","base","index","segment","downloadFiles","nodes","FileType","node","filenames","_sfc_main","DeleteOutline","PlusBoxMultipleOutline","DownloadOutline","Close","FolderAlertOutline","NcEmptyContent","NcModal","NcActions","NcActionButton","AlbumPicker","FilesListViewer","FileComponent","ActionFavorite","HeaderNavigation","PhotosSourceLocationsSettings","AlertCircleOutline","date","moment","FetchFilesMixin","FilesSelectionMixin","FilesByMonthMixin","to","from","next","key","allMimes","isMobile","useIsMobile","filtersStore","useFilterStore","selectedFilters","filtersQuery","storeToRefs","subscribe","configChangedEvent","unsubscribe","toViewerFileInfo","fileIds","fileid","t"],"mappings":"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"}
\ No newline at end of file
diff --git a/js/UnassignedFaces-DPR7OX7H.chunk.mjs b/js/UnassignedFaces-CdWdf2bI.chunk.mjs
similarity index 94%
rename from js/UnassignedFaces-DPR7OX7H.chunk.mjs
rename to js/UnassignedFaces-CdWdf2bI.chunk.mjs
index 5ced971bb3..dffe8639f8 100644
--- a/js/UnassignedFaces-DPR7OX7H.chunk.mjs
+++ b/js/UnassignedFaces-CdWdf2bI.chunk.mjs
@@ -1,2 +1,2 @@
-import{t as n,V as a}from"./preload-helper-iHri5ttz.chunk.mjs";import{N as l}from"./NcActionButton-K4jUGMlW-Bs_jOwCM.chunk.mjs";import{h as r,A as c,z as d,l as s,E as i}from"./index-6_vkf3an.chunk.mjs";import{N as f}from"./NcEmptyContent-BkpeWiV5.chunk.mjs";import{g as u,f as h,A as p,k as m,S as F,a as v,n as g}from"./icons-BPrPKxzl.chunk.mjs";import{F as _}from"./FaceMergeForm-jH2ieXCc.chunk.mjs";import{F as w}from"./FileComponent-Bw4ZFXMR.chunk.mjs";import{F as C,a as y}from"./FilesSelectionMixin-GHX9hTKF.chunk.mjs";import{F as S}from"./FaceCover-3afTUpDo.chunk.mjs";import{F as k}from"./FetchFilesMixin-Ck9H2-jY.chunk.mjs";import"./index-DjIio1qt.chunk.mjs";import"./createElementId-DhjFt1I9-B2HCdIOx.chunk.mjs";import"./NcCheckboxRadioSwitch-D4IV4zWy-CSDAL8Yg.chunk.mjs";import"./NcIconToggleSwitch-0NTw7i-t-DOrRmNgh.chunk.mjs";import"./useModelMigration-EhAWvqDD-C15wbtL_.chunk.mjs";import"./fileFetcher-p0a3IV9C.chunk.mjs";import"./AbortControllerMixin-CCU9Utyn.chunk.mjs";import"./PhotoSearch-CvX3QQRp.chunk.mjs";const A={name:"UnassignedFaces",components:{Star:v,StarOutline:F,DownloadOutline:m,AlertCircleOutline:p,ArrowLeft:h,FaceMergeForm:_,FilesListViewer:y,FileComponent:w,NcLoadingIcon:d,NcEmptyContent:f,NcActions:c,NcActionButton:l,NcDialog:r,AccountSwitchOutline:u},directives:{focus(t){a.nextTick(()=>t.focus())}},mixins:[S,k,C],data(){return{showMoveModal:!1,loadingCount:0,appContent:document.getElementById("app-content-vue")}},computed:{files(){return this.$store.state.files.files},unassignedFiles(){return this.$store.state.faces.unassignedFiles},faceFileIds(){return this.unassignedFiles||[]},shouldFavoriteSelection(){return this.selectedFileIds.some(t=>this.$store.state.files.files[t].attributes.favorite===0)}},mounted(){this.fetchUnassignedFaces()},methods:{openViewer(t){window.OCA.Viewer.open({fileInfo:i(this.files[t]),list:this.faceFileIds.map(e=>i(this.files[e]))})},async handleMove(t,e){try{this.loadingCount++,await this.$store.dispatch("moveFilesToFace",{oldFace:null,faceName:t,fileIdsToMove:e}),this.showMoveModal=!1}catch(o){s.error("Failed to move selection",{error:o})}finally{this.loadingCount--}},async favoriteSelection(){try{this.loadingCount++,await this.$store.dispatch("toggleFavoriteForFiles",{fileIds:this.selectedFileIds,favoriteState:!0})}catch(t){s.error("Failed to favorite selection",{error:t})}finally{this.loadingCount--}},async unFavoriteSelection(){try{this.loadingCount++,await this.$store.dispatch("toggleFavoriteForFiles",{fileIds:this.selectedFileIds,favoriteState:!1})}catch(t){s.error("Failed to unfavorite selection",{error:t})}finally{this.loadingCount--}},async downloadSelection(){try{this.loadingCount++,await this.$store.dispatch("downloadFiles",this.selectedFileIds)}catch(t){s.error("Faile to download selection",{error:t})}finally{this.loadingCount--}},t:n}};var M=function(){var t=this,e=t._self._c;return t.errorFetchingFiles?e("NcEmptyContent",{scopedSlots:t._u([{key:"icon",fn:function(){return[e("AlertCircleOutline")]},proxy:!0}],null,!1,2159780319)},[t._v(" "+t._s(t.t("photos","An error occurred"))+" ")]):e("div",{staticClass:"face"},[e("div",{staticClass:"face__header"},[e("div",{staticClass:"face__header__left"},[e("NcActions",[e("NcActionButton",{on:{click:function(o){return t.$router.push("/faces/")}},scopedSlots:t._u([{key:"icon",fn:function(){return[e("ArrowLeft")]},proxy:!0}])},[t._v(t._s(t.t("photos","Back"))+" ")])],1),e("div",{staticClass:"face__header__title"},[e("h2",{staticClass:"face-name"},[t._v(" "+t._s(t.t("photos","Unassigned faces"))+" ")])]),t.loadingCount>0||t.loadingFaces?e("NcLoadingIcon"):t._e()],1),e("div",{staticClass:"face__header__actions"},[e("NcActions",{attrs:{"force-menu":!0}},[t.selectedFileIds.length?[e("NcActionButton",{attrs:{"close-after-click":!0,"aria-label":t.t("photos","Download selected files")},on:{click:t.downloadSelection}},[e("DownloadOutline",{attrs:{slot:"icon"},slot:"icon"}),t._v(" "+t._s(t.t("photos","Download selected photos"))+" ")],1),t.shouldFavoriteSelection?e("NcActionButton",{attrs:{"close-after-click":!0,"aria-label":t.t("photos","Mark selection as favorite")},on:{click:t.favoriteSelection}},[e("StarOutline",{attrs:{slot:"icon"},slot:"icon"}),t._v(" "+t._s(t.t("photos","Favorite"))+" ")],1):e("NcActionButton",{attrs:{"close-after-click":!0,"aria-label":t.t("photos","Remove selection from favorites")},on:{click:t.unFavoriteSelection}},[e("Star",{attrs:{slot:"icon"},slot:"icon"}),t._v(" "+t._s(t.t("photos","Remove from favorites"))+" ")],1),e("NcActionButton",{attrs:{"close-after-click":!0},on:{click:function(o){t.showMoveModal=!0}},scopedSlots:t._u([{key:"icon",fn:function(){return[e("AccountSwitchOutline")]},proxy:!0}],null,!1,1476410576)},[t._v(" "+t._s(t.n("photos","Move photo to a different person","Move photos to a different person",t.selectedFileIds.length))+" ")])]:t._e()],2)],1)]),e("FilesListViewer",{staticClass:"face__photos",attrs:{"container-element":t.appContent,"file-ids":t.faceFileIds,loading:t.loadingFiles||t.loadingFaces},scopedSlots:t._u([{key:"default",fn:function({file:o}){return e("FileComponent",{attrs:{file:t.files[o.id],"allow-selection":!0,selected:t.selection[o.id]===!0},on:{click:t.openViewer,"select-toggled":t.onFileSelectToggle}})}}])}),t.showMoveModal?e("NcDialog",{attrs:{name:t.t("photos","Move to different person"),"close-on-click-outside":"",size:"normal"},on:{closing:function(o){t.showMoveModal=!1}}},[e("FaceMergeForm",{attrs:{"first-face":"-1"},on:{select:function(o){return t.handleMove(o,t.selectedFileIds)}}})],1):t._e()],1)},N=[],I=g(A,M,N,!1,null,"48c90f2c");const K=I.exports;export{K as default};
-//# sourceMappingURL=UnassignedFaces-DPR7OX7H.chunk.mjs.map
+import{t as n,V as a}from"./preload-helper-iHri5ttz.chunk.mjs";import{N as l}from"./NcActionButton-K4jUGMlW-Bs_jOwCM.chunk.mjs";import{h as r,A as c,z as d,l as s,E as i}from"./index-6_vkf3an.chunk.mjs";import{N as f}from"./NcEmptyContent-BkpeWiV5.chunk.mjs";import{g as u,f as h,A as p,k as m,S as F,a as v,n as g}from"./icons-BPrPKxzl.chunk.mjs";import{F as _}from"./FaceMergeForm-CjFfdbB1.chunk.mjs";import{F as w}from"./FileComponent-Bw4ZFXMR.chunk.mjs";import{F as C,a as y}from"./FilesSelectionMixin-GHX9hTKF.chunk.mjs";import{F as S}from"./FaceCover-CwQK1LWo.chunk.mjs";import{F as k}from"./FetchFilesMixin-Ck9H2-jY.chunk.mjs";import"./index-DjIio1qt.chunk.mjs";import"./createElementId-DhjFt1I9-B2HCdIOx.chunk.mjs";import"./NcCheckboxRadioSwitch-D4IV4zWy-CSDAL8Yg.chunk.mjs";import"./NcIconToggleSwitch-0NTw7i-t-DOrRmNgh.chunk.mjs";import"./useModelMigration-EhAWvqDD-C15wbtL_.chunk.mjs";import"./fileFetcher-p0a3IV9C.chunk.mjs";import"./AbortControllerMixin-CCU9Utyn.chunk.mjs";import"./PhotoSearch-CvX3QQRp.chunk.mjs";const A={name:"UnassignedFaces",components:{Star:v,StarOutline:F,DownloadOutline:m,AlertCircleOutline:p,ArrowLeft:h,FaceMergeForm:_,FilesListViewer:y,FileComponent:w,NcLoadingIcon:d,NcEmptyContent:f,NcActions:c,NcActionButton:l,NcDialog:r,AccountSwitchOutline:u},directives:{focus(t){a.nextTick(()=>t.focus())}},mixins:[S,k,C],data(){return{showMoveModal:!1,loadingCount:0,appContent:document.getElementById("app-content-vue")}},computed:{files(){return this.$store.state.files.files},unassignedFiles(){return this.$store.state.faces.unassignedFiles},faceFileIds(){return this.unassignedFiles||[]},shouldFavoriteSelection(){return this.selectedFileIds.some(t=>this.$store.state.files.files[t].attributes.favorite===0)}},mounted(){this.fetchUnassignedFaces()},methods:{openViewer(t){window.OCA.Viewer.open({fileInfo:i(this.files[t]),list:this.faceFileIds.map(e=>i(this.files[e]))})},async handleMove(t,e){try{this.loadingCount++,await this.$store.dispatch("moveFilesToFace",{oldFace:null,faceName:t,fileIdsToMove:e}),this.showMoveModal=!1}catch(o){s.error("Failed to move selection",{error:o})}finally{this.loadingCount--}},async favoriteSelection(){try{this.loadingCount++,await this.$store.dispatch("toggleFavoriteForFiles",{fileIds:this.selectedFileIds,favoriteState:!0})}catch(t){s.error("Failed to favorite selection",{error:t})}finally{this.loadingCount--}},async unFavoriteSelection(){try{this.loadingCount++,await this.$store.dispatch("toggleFavoriteForFiles",{fileIds:this.selectedFileIds,favoriteState:!1})}catch(t){s.error("Failed to unfavorite selection",{error:t})}finally{this.loadingCount--}},async downloadSelection(){try{this.loadingCount++,await this.$store.dispatch("downloadFiles",this.selectedFileIds)}catch(t){s.error("Faile to download selection",{error:t})}finally{this.loadingCount--}},t:n}};var M=function(){var t=this,e=t._self._c;return t.errorFetchingFiles?e("NcEmptyContent",{scopedSlots:t._u([{key:"icon",fn:function(){return[e("AlertCircleOutline")]},proxy:!0}],null,!1,2159780319)},[t._v(" "+t._s(t.t("photos","An error occurred"))+" ")]):e("div",{staticClass:"face"},[e("div",{staticClass:"face__header"},[e("div",{staticClass:"face__header__left"},[e("NcActions",[e("NcActionButton",{on:{click:function(o){return t.$router.push("/faces/")}},scopedSlots:t._u([{key:"icon",fn:function(){return[e("ArrowLeft")]},proxy:!0}])},[t._v(t._s(t.t("photos","Back"))+" ")])],1),e("div",{staticClass:"face__header__title"},[e("h2",{staticClass:"face-name"},[t._v(" "+t._s(t.t("photos","Unassigned faces"))+" ")])]),t.loadingCount>0||t.loadingFaces?e("NcLoadingIcon"):t._e()],1),e("div",{staticClass:"face__header__actions"},[e("NcActions",{attrs:{"force-menu":!0}},[t.selectedFileIds.length?[e("NcActionButton",{attrs:{"close-after-click":!0,"aria-label":t.t("photos","Download selected files")},on:{click:t.downloadSelection}},[e("DownloadOutline",{attrs:{slot:"icon"},slot:"icon"}),t._v(" "+t._s(t.t("photos","Download selected photos"))+" ")],1),t.shouldFavoriteSelection?e("NcActionButton",{attrs:{"close-after-click":!0,"aria-label":t.t("photos","Mark selection as favorite")},on:{click:t.favoriteSelection}},[e("StarOutline",{attrs:{slot:"icon"},slot:"icon"}),t._v(" "+t._s(t.t("photos","Favorite"))+" ")],1):e("NcActionButton",{attrs:{"close-after-click":!0,"aria-label":t.t("photos","Remove selection from favorites")},on:{click:t.unFavoriteSelection}},[e("Star",{attrs:{slot:"icon"},slot:"icon"}),t._v(" "+t._s(t.t("photos","Remove from favorites"))+" ")],1),e("NcActionButton",{attrs:{"close-after-click":!0},on:{click:function(o){t.showMoveModal=!0}},scopedSlots:t._u([{key:"icon",fn:function(){return[e("AccountSwitchOutline")]},proxy:!0}],null,!1,1476410576)},[t._v(" "+t._s(t.n("photos","Move photo to a different person","Move photos to a different person",t.selectedFileIds.length))+" ")])]:t._e()],2)],1)]),e("FilesListViewer",{staticClass:"face__photos",attrs:{"container-element":t.appContent,"file-ids":t.faceFileIds,loading:t.loadingFiles||t.loadingFaces},scopedSlots:t._u([{key:"default",fn:function({file:o}){return e("FileComponent",{attrs:{file:t.files[o.id],"allow-selection":!0,selected:t.selection[o.id]===!0},on:{click:t.openViewer,"select-toggled":t.onFileSelectToggle}})}}])}),t.showMoveModal?e("NcDialog",{attrs:{name:t.t("photos","Move to different person"),"close-on-click-outside":"",size:"normal"},on:{closing:function(o){t.showMoveModal=!1}}},[e("FaceMergeForm",{attrs:{"first-face":"-1"},on:{select:function(o){return t.handleMove(o,t.selectedFileIds)}}})],1):t._e()],1)},N=[],I=g(A,M,N,!1,null,"05be48a5");const K=I.exports;export{K as default};
+//# sourceMappingURL=UnassignedFaces-CdWdf2bI.chunk.mjs.map
diff --git a/js/UnassignedFaces-DPR7OX7H.chunk.mjs.license b/js/UnassignedFaces-CdWdf2bI.chunk.mjs.license
similarity index 100%
rename from js/UnassignedFaces-DPR7OX7H.chunk.mjs.license
rename to js/UnassignedFaces-CdWdf2bI.chunk.mjs.license
diff --git a/js/UnassignedFaces-DPR7OX7H.chunk.mjs.map b/js/UnassignedFaces-CdWdf2bI.chunk.mjs.map
similarity index 79%
rename from js/UnassignedFaces-DPR7OX7H.chunk.mjs.map
rename to js/UnassignedFaces-CdWdf2bI.chunk.mjs.map
index e483e01bad..b3faf948ee 100644
--- a/js/UnassignedFaces-DPR7OX7H.chunk.mjs.map
+++ b/js/UnassignedFaces-CdWdf2bI.chunk.mjs.map
@@ -1 +1 @@
-{"version":3,"file":"UnassignedFaces-DPR7OX7H.chunk.mjs","sources":["../src/views/UnassignedFaces.vue"],"sourcesContent":["\n\n\t\n\t\n\t\t\n\t\t\t\n\t\t\n\t\t{{ t('photos', 'An error occurred') }}\n\t\n\n\t
\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ t('photos', 'Download selected photos') }}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ t('photos', 'Favorite') }}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ t('photos', 'Remove from favorites') }}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ n('photos', 'Move photo to a different person', 'Move photos to a different person', selectedFileIds.length) }}\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t
\n\n\t\t\n\t\t\t\n\t\t\n\n\t\t\n\t\t\t\n\t\t\n\t
\n\n\n\n\n\n"],"names":["_sfc_main","Star","StarOutline","DownloadOutline","AlertCircleOutline","ArrowLeft","FaceMergeForm","FilesListViewer","FileComponent","NcLoadingIcon","NcEmptyContent","NcActions","NcActionButton","NcDialog","AccountSwitchOutline","el","Vue","FetchFacesMixin","FetchFilesMixin","FilesSelectionMixin","fileId","toViewerFileInfo","faceName","fileIds","error","logger","t"],"mappings":"ogCAsHA,MAAAA,EAAA,CACA,KAAA,kBACA,WAAA,CACA,KAAAC,EACA,YAAAC,EACA,gBAAAC,EACA,mBAAAC,EACA,UAAAC,EACA,cAAAC,EACA,gBAAAC,EACA,cAAAC,EACA,cAAAC,EACA,eAAAC,EACA,UAAAC,EACA,eAAAC,EACA,SAAAC,EACA,qBAAAC,CAAA,EAGA,WAAA,CACA,MAAAC,EAAA,CACAC,EAAA,SAAA,IAAAD,EAAA,MAAA,CAAA,CACA,CAAA,EAGA,OAAA,CACAE,EACAC,EACAC,CAAA,EAGA,MAAA,CACA,MAAA,CACA,cAAA,GACA,aAAA,EACA,WAAA,SAAA,eAAA,iBAAA,CAAA,CAEA,EAEA,SAAA,CACA,OAAA,CACA,OAAA,KAAA,OAAA,MAAA,MAAA,KACA,EAEA,iBAAA,CACA,OAAA,KAAA,OAAA,MAAA,MAAA,eACA,EAEA,aAAA,CACA,OAAA,KAAA,iBAAA,CAAA,CACA,EAEA,yBAAA,CAEA,OAAA,KAAA,gBAAA,KAAAC,GAAA,KAAA,OAAA,MAAA,MAAA,MAAAA,CAAA,EAAA,WAAA,WAAA,CAAA,CACA,CAAA,EAGA,SAAA,CACA,KAAA,qBAAA,CACA,EAEA,QAAA,CACA,WAAAA,EAAA,CACA,OAAA,IAAA,OAAA,KAAA,CACA,SAAAC,EAAA,KAAA,MAAAD,CAAA,CAAA,EACA,KAAA,KAAA,YAAA,IAAAA,GAAAC,EAAA,KAAA,MAAAD,CAAA,CAAA,CAAA,CAAA,CACA,CACA,EAEA,MAAA,WAAAE,EAAAC,EAAA,CACA,GAAA,CACA,KAAA,eACA,MAAA,KAAA,OAAA,SAAA,kBAAA,CAAA,QAAA,KAAA,SAAAD,EAAA,cAAAC,EAAA,EACA,KAAA,cAAA,EACA,OAAAC,EAAA,CACAC,EAAA,MAAA,2BAAA,CAAA,MAAAD,CAAA,CAAA,CACA,QAAA,CACA,KAAA,cACA,CACA,EAEA,MAAA,mBAAA,CACA,GAAA,CACA,KAAA,eACA,MAAA,KAAA,OAAA,SAAA,yBAAA,CAAA,QAAA,KAAA,gBAAA,cAAA,GAAA,CACA,OAAAA,EAAA,CACAC,EAAA,MAAA,+BAAA,CAAA,MAAAD,CAAA,CAAA,CACA,QAAA,CACA,KAAA,cACA,CACA,EAEA,MAAA,qBAAA,CACA,GAAA,CACA,KAAA,eACA,MAAA,KAAA,OAAA,SAAA,yBAAA,CAAA,QAAA,KAAA,gBAAA,cAAA,GAAA,CACA,OAAAA,EAAA,CACAC,EAAA,MAAA,iCAAA,CAAA,MAAAD,CAAA,CAAA,CACA,QAAA,CACA,KAAA,cACA,CACA,EAEA,MAAA,mBAAA,CACA,GAAA,CACA,KAAA,eACA,MAAA,KAAA,OAAA,SAAA,gBAAA,KAAA,eAAA,CACA,OAAAA,EAAA,CACAC,EAAA,MAAA,8BAAA,CAAA,MAAAD,CAAA,CAAA,CACA,QAAA,CACA,KAAA,cACA,CACA,EAAA,EAEAE,CAAA,CAEA"}
\ No newline at end of file
+{"version":3,"file":"UnassignedFaces-CdWdf2bI.chunk.mjs","sources":["../src/views/UnassignedFaces.vue"],"sourcesContent":["\n\n\t\n\t\n\t\t\n\t\t\t\n\t\t\n\t\t{{ t('photos', 'An error occurred') }}\n\t\n\n\t
\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ t('photos', 'Download selected photos') }}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ t('photos', 'Favorite') }}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ t('photos', 'Remove from favorites') }}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ n('photos', 'Move photo to a different person', 'Move photos to a different person', selectedFileIds.length) }}\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t
\n\n\t\t\n\t\t\t\n\t\t\n\n\t\t\n\t\t\t\n\t\t\n\t
\n\n\n\n\n\n"],"names":["_sfc_main","Star","StarOutline","DownloadOutline","AlertCircleOutline","ArrowLeft","FaceMergeForm","FilesListViewer","FileComponent","NcLoadingIcon","NcEmptyContent","NcActions","NcActionButton","NcDialog","AccountSwitchOutline","el","Vue","FetchFacesMixin","FetchFilesMixin","FilesSelectionMixin","fileId","toViewerFileInfo","faceName","fileIds","error","logger","t"],"mappings":"ogCAsHA,MAAAA,EAAA,CACA,KAAA,kBACA,WAAA,CACA,KAAAC,EACA,YAAAC,EACA,gBAAAC,EACA,mBAAAC,EACA,UAAAC,EACA,cAAAC,EACA,gBAAAC,EACA,cAAAC,EACA,cAAAC,EACA,eAAAC,EACA,UAAAC,EACA,eAAAC,EACA,SAAAC,EACA,qBAAAC,CAAA,EAGA,WAAA,CACA,MAAAC,EAAA,CACAC,EAAA,SAAA,IAAAD,EAAA,MAAA,CAAA,CACA,CAAA,EAGA,OAAA,CACAE,EACAC,EACAC,CAAA,EAGA,MAAA,CACA,MAAA,CACA,cAAA,GACA,aAAA,EACA,WAAA,SAAA,eAAA,iBAAA,CAAA,CAEA,EAEA,SAAA,CACA,OAAA,CACA,OAAA,KAAA,OAAA,MAAA,MAAA,KACA,EAEA,iBAAA,CACA,OAAA,KAAA,OAAA,MAAA,MAAA,eACA,EAEA,aAAA,CACA,OAAA,KAAA,iBAAA,CAAA,CACA,EAEA,yBAAA,CAEA,OAAA,KAAA,gBAAA,KAAAC,GAAA,KAAA,OAAA,MAAA,MAAA,MAAAA,CAAA,EAAA,WAAA,WAAA,CAAA,CACA,CAAA,EAGA,SAAA,CACA,KAAA,qBAAA,CACA,EAEA,QAAA,CACA,WAAAA,EAAA,CACA,OAAA,IAAA,OAAA,KAAA,CACA,SAAAC,EAAA,KAAA,MAAAD,CAAA,CAAA,EACA,KAAA,KAAA,YAAA,IAAAA,GAAAC,EAAA,KAAA,MAAAD,CAAA,CAAA,CAAA,CAAA,CACA,CACA,EAEA,MAAA,WAAAE,EAAAC,EAAA,CACA,GAAA,CACA,KAAA,eACA,MAAA,KAAA,OAAA,SAAA,kBAAA,CAAA,QAAA,KAAA,SAAAD,EAAA,cAAAC,EAAA,EACA,KAAA,cAAA,EACA,OAAAC,EAAA,CACAC,EAAA,MAAA,2BAAA,CAAA,MAAAD,CAAA,CAAA,CACA,QAAA,CACA,KAAA,cACA,CACA,EAEA,MAAA,mBAAA,CACA,GAAA,CACA,KAAA,eACA,MAAA,KAAA,OAAA,SAAA,yBAAA,CAAA,QAAA,KAAA,gBAAA,cAAA,GAAA,CACA,OAAAA,EAAA,CACAC,EAAA,MAAA,+BAAA,CAAA,MAAAD,CAAA,CAAA,CACA,QAAA,CACA,KAAA,cACA,CACA,EAEA,MAAA,qBAAA,CACA,GAAA,CACA,KAAA,eACA,MAAA,KAAA,OAAA,SAAA,yBAAA,CAAA,QAAA,KAAA,gBAAA,cAAA,GAAA,CACA,OAAAA,EAAA,CACAC,EAAA,MAAA,iCAAA,CAAA,MAAAD,CAAA,CAAA,CACA,QAAA,CACA,KAAA,cACA,CACA,EAEA,MAAA,mBAAA,CACA,GAAA,CACA,KAAA,eACA,MAAA,KAAA,OAAA,SAAA,gBAAA,KAAA,eAAA,CACA,OAAAA,EAAA,CACAC,EAAA,MAAA,8BAAA,CAAA,MAAAD,CAAA,CAAA,CACA,QAAA,CACA,KAAA,cACA,CACA,EAAA,EAEAE,CAAA,CAEA"}
\ No newline at end of file
diff --git a/js/filters-6qrbp5yy.chunk.mjs b/js/filters-DiWkMIga.chunk.mjs
similarity index 99%
rename from js/filters-6qrbp5yy.chunk.mjs
rename to js/filters-DiWkMIga.chunk.mjs
index 3b2f3f0b2e..cc6a4a0ca6 100644
--- a/js/filters-6qrbp5yy.chunk.mjs
+++ b/js/filters-DiWkMIga.chunk.mjs
@@ -1,5 +1,5 @@
-import{a2 as Rt,i as pt,a3 as Nt,l as Mt}from"./index-6_vkf3an.chunk.mjs";import{N as dt,O as A,j as tt,Q as Bt,R as C,S as ft,T as Q,U as ht,w as _t,J as Jt,c as gt,W as G,X as Ht,Y as Qt,Z as Gt,z as zt,B as R,a as yt,t as N}from"./preload-helper-iHri5ttz.chunk.mjs";import{d as Wt}from"./index-K61t94YW.chunk.mjs";import{e as qt,t as Yt,n as mt,P as Xt,u as Kt}from"./icons-BPrPKxzl.chunk.mjs";import{f as at}from"./PhotosFiltersInput-Rq4vPTbx.chunk.mjs";function Zt(){return bt().__VUE_DEVTOOLS_GLOBAL_HOOK__}function bt(){return typeof navigator<"u"&&typeof window<"u"?window:typeof globalThis<"u"?globalThis:{}}const te=typeof Proxy=="function",ee="devtools-plugin:setup",oe="plugin:settings:set";let L,X;function se(){var t;return L!==void 0||(typeof window<"u"&&window.performance?(L=!0,X=window.performance):typeof globalThis<"u"&&!((t=globalThis.perf_hooks)===null||t===void 0)&&t.performance?(L=!0,X=globalThis.perf_hooks.performance):L=!1),L}function ne(){return se()?X.now():Date.now()}class re{constructor(e,s){this.target=null,this.targetQueue=[],this.onQueue=[],this.plugin=e,this.hook=s;const o={};if(e.settings)for(const a in e.settings){const r=e.settings[a];o[a]=r.defaultValue}const n=`__vue-devtools-plugin-settings__${e.id}`;let i=Object.assign({},o);try{const a=localStorage.getItem(n),r=JSON.parse(a);Object.assign(i,r)}catch{}this.fallbacks={getSettings(){return i},setSettings(a){try{localStorage.setItem(n,JSON.stringify(a))}catch{}i=a},now(){return ne()}},s&&s.on(oe,(a,r)=>{a===this.plugin.id&&this.fallbacks.setSettings(r)}),this.proxiedOn=new Proxy({},{get:(a,r)=>this.target?this.target.on[r]:(...c)=>{this.onQueue.push({method:r,args:c})}}),this.proxiedTarget=new Proxy({},{get:(a,r)=>this.target?this.target[r]:r==="on"?this.proxiedOn:Object.keys(this.fallbacks).includes(r)?(...c)=>(this.targetQueue.push({method:r,args:c,resolve:()=>{}}),this.fallbacks[r](...c)):(...c)=>new Promise(p=>{this.targetQueue.push({method:r,args:c,resolve:p})})})}async setRealTarget(e){this.target=e;for(const s of this.onQueue)this.target.on[s.method](...s.args);for(const s of this.targetQueue)s.resolve(await this.target[s.method](...s.args))}}function vt(t,e){const s=t,o=bt(),n=Zt(),i=te&&s.enableEarlyProxy;if(n&&(o.__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__||!i))n.emit(ee,t,e);else{const a=i?new re(s,n):null;(o.__VUE_DEVTOOLS_PLUGINS__=o.__VUE_DEVTOOLS_PLUGINS__||[]).push({pluginDescriptor:s,setupFn:e,proxy:a}),a&&e(a.proxiedTarget)}}let Ot;const U=t=>Ot=t,St=Symbol();function K(t){return t&&typeof t=="object"&&Object.prototype.toString.call(t)==="[object Object]"&&typeof t.toJSON!="function"}var v;(function(t){t.direct="direct",t.patchObject="patch object",t.patchFunction="patch function"})(v||(v={}));const P=typeof window<"u",it=typeof window=="object"&&window.window===window?window:typeof self=="object"&&self.self===self?self:typeof R=="object"&&R.global===R?R:typeof globalThis=="object"?globalThis:{HTMLElement:null};function ae(t,{autoBom:e=!1}={}){return e&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(t.type)?new Blob(["\uFEFF",t],{type:t.type}):t}function et(t,e,s){const o=new XMLHttpRequest;o.open("GET",t),o.responseType="blob",o.onload=function(){$t(o.response,e,s)},o.onerror=function(){console.error("could not download file")},o.send()}function wt(t){const e=new XMLHttpRequest;e.open("HEAD",t,!1);try{e.send()}catch{}return e.status>=200&&e.status<=299}function M(t){try{t.dispatchEvent(new MouseEvent("click"))}catch{const e=document.createEvent("MouseEvents");e.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),t.dispatchEvent(e)}}const B=typeof navigator=="object"?navigator:{userAgent:""},Et=/Macintosh/.test(B.userAgent)&&/AppleWebKit/.test(B.userAgent)&&!/Safari/.test(B.userAgent),$t=P?typeof HTMLAnchorElement<"u"&&"download"in HTMLAnchorElement.prototype&&!Et?ie:"msSaveOrOpenBlob"in B?ce:le:()=>{};function ie(t,e="download",s){const o=document.createElement("a");o.download=e,o.rel="noopener",typeof t=="string"?(o.href=t,o.origin!==location.origin?wt(o.href)?et(t,e,s):(o.target="_blank",M(o)):M(o)):(o.href=URL.createObjectURL(t),setTimeout(function(){URL.revokeObjectURL(o.href)},4e4),setTimeout(function(){M(o)},0))}function ce(t,e="download",s){if(typeof t=="string")if(wt(t))et(t,e,s);else{const o=document.createElement("a");o.href=t,o.target="_blank",setTimeout(function(){M(o)})}else navigator.msSaveOrOpenBlob(ae(t,s),e)}function le(t,e,s,o){if(o=o||open("","_blank"),o&&(o.document.title=o.document.body.innerText="downloading..."),typeof t=="string")return et(t,e,s);const n=t.type==="application/octet-stream",i=/constructor/i.test(String(it.HTMLElement))||"safari"in it,a=/CriOS\/[\d]+/.test(navigator.userAgent);if((a||n&&i||Et)&&typeof FileReader<"u"){const r=new FileReader;r.onloadend=function(){let c=r.result;if(typeof c!="string")throw o=null,new Error("Wrong reader.result type");c=a?c:c.replace(/^data:[^;]*;/,"data:attachment/file;"),o?o.location.href=c:location.assign(c),o=null},r.readAsDataURL(t)}else{const r=URL.createObjectURL(t);o?o.location.assign(r):location.href=r,o=null,setTimeout(function(){URL.revokeObjectURL(r)},4e4)}}function d(t,e){const s="🍍 "+t;typeof __VUE_DEVTOOLS_TOAST__=="function"?__VUE_DEVTOOLS_TOAST__(s,e):e==="error"?console.error(s):e==="warn"?console.warn(s):console.log(s)}function ot(t){return"_a"in t&&"install"in t}function Pt(){if(!("clipboard"in navigator))return d("Your browser doesn't support the Clipboard API","error"),!0}function Ft(t){return t instanceof Error&&t.message.toLowerCase().includes("document is not focused")?(d('You need to activate the "Emulate a focused page" setting in the "Rendering" panel of devtools.',"warn"),!0):!1}async function ue(t){if(!Pt())try{await navigator.clipboard.writeText(JSON.stringify(t.state.value)),d("Global state copied to clipboard.")}catch(e){if(Ft(e))return;d("Failed to serialize the state. Check the console for more details.","error"),console.error(e)}}async function pe(t){if(!Pt())try{Tt(t,JSON.parse(await navigator.clipboard.readText())),d("Global state pasted from clipboard.")}catch(e){if(Ft(e))return;d("Failed to deserialize the state from clipboard. Check the console for more details.","error"),console.error(e)}}async function de(t){try{$t(new Blob([JSON.stringify(t.state.value)],{type:"text/plain;charset=utf-8"}),"pinia-state.json")}catch(e){d("Failed to export the state as JSON. Check the console for more details.","error"),console.error(e)}}let O;function fe(){O||(O=document.createElement("input"),O.type="file",O.accept=".json");function t(){return new Promise((e,s)=>{O.onchange=async()=>{const o=O.files;if(!o)return e(null);const n=o.item(0);return e(n?{text:await n.text(),file:n}:null)},O.oncancel=()=>e(null),O.onerror=s,O.click()})}return t}async function he(t){try{const e=await fe()();if(!e)return;const{text:s,file:o}=e;Tt(t,JSON.parse(s)),d(`Global state imported from "${o.name}".`)}catch(e){d("Failed to import the state from JSON. Check the console for more details.","error"),console.error(e)}}function Tt(t,e){for(const s in e){const o=t.state.value[s];o?Object.assign(o,e[s]):t.state.value[s]=e[s]}}function m(t){return{_custom:{display:t}}}const kt="🍍 Pinia (root)",J="_root";function _e(t){return ot(t)?{id:J,label:kt}:{id:t.$id,label:t.$id}}function ge(t){if(ot(t)){const s=Array.from(t._s.keys()),o=t._s;return{state:s.map(n=>({editable:!0,key:n,value:t.state.value[n]})),getters:s.filter(n=>o.get(n)._getters).map(n=>{const i=o.get(n);return{editable:!1,key:n,value:i._getters.reduce((a,r)=>(a[r]=i[r],a),{})}})}}const e={state:Object.keys(t.$state).map(s=>({editable:!0,key:s,value:t.$state[s]}))};return t._getters&&t._getters.length&&(e.getters=t._getters.map(s=>({editable:!1,key:s,value:t[s]}))),t._customProperties.size&&(e.customProperties=Array.from(t._customProperties).map(s=>({editable:!0,key:s,value:t[s]}))),e}function ye(t){return t?Array.isArray(t)?t.reduce((e,s)=>(e.keys.push(s.key),e.operations.push(s.type),e.oldValue[s.key]=s.oldValue,e.newValue[s.key]=s.newValue,e),{oldValue:{},keys:[],operations:[],newValue:{}}):{operation:m(t.type),key:m(t.key),oldValue:t.oldValue,newValue:t.newValue}:{}}function me(t){switch(t){case v.direct:return"mutation";case v.patchFunction:return"$patch";case v.patchObject:return"$patch";default:return"unknown"}}let I=!0;const H=[],$="pinia:mutations",f="pinia",{assign:be}=Object,z=t=>"🍍 "+t;function ve(t,e){vt({id:"dev.esm.pinia",label:"Pinia 🍍",logo:"https://pinia.vuejs.org/logo.svg",packageName:"pinia",homepage:"https://pinia.vuejs.org",componentStateTypes:H,app:t},s=>{typeof s.now!="function"&&d("You seem to be using an outdated version of Vue Devtools. Are you still using the Beta release instead of the stable one? You can find the links at https://devtools.vuejs.org/guide/installation.html."),s.addTimelineLayer({id:$,label:"Pinia 🍍",color:15064968}),s.addInspector({id:f,label:"Pinia 🍍",icon:"storage",treeFilterPlaceholder:"Search stores",actions:[{icon:"content_copy",action:()=>{ue(e)},tooltip:"Serialize and copy the state"},{icon:"content_paste",action:async()=>{await pe(e),s.sendInspectorTree(f),s.sendInspectorState(f)},tooltip:"Replace the state with the content of your clipboard"},{icon:"save",action:()=>{de(e)},tooltip:"Save the state as a JSON file"},{icon:"folder_open",action:async()=>{await he(e),s.sendInspectorTree(f),s.sendInspectorState(f)},tooltip:"Import the state from a JSON file"}],nodeActions:[{icon:"restore",tooltip:'Reset the state (with "$reset")',action:o=>{const n=e._s.get(o);n?typeof n.$reset!="function"?d(`Cannot reset "${o}" store because it doesn't have a "$reset" method implemented.`,"warn"):(n.$reset(),d(`Store "${o}" reset.`)):d(`Cannot reset "${o}" store because it wasn't found.`,"warn")}}]}),s.on.inspectComponent((o,n)=>{const i=o.componentInstance&&o.componentInstance.proxy;if(i&&i._pStores){const a=o.componentInstance.proxy._pStores;Object.values(a).forEach(r=>{o.instanceData.state.push({type:z(r.$id),key:"state",editable:!0,value:r._isOptionsAPI?{_custom:{value:G(r.$state),actions:[{icon:"restore",tooltip:"Reset the state of this store",action:()=>r.$reset()}]}}:Object.keys(r.$state).reduce((c,p)=>(c[p]=r.$state[p],c),{})}),r._getters&&r._getters.length&&o.instanceData.state.push({type:z(r.$id),key:"getters",editable:!1,value:r._getters.reduce((c,p)=>{try{c[p]=r[p]}catch(g){c[p]=g}return c},{})})})}}),s.on.getInspectorTree(o=>{if(o.app===t&&o.inspectorId===f){let n=[e];n=n.concat(Array.from(e._s.values())),o.rootNodes=(o.filter?n.filter(i=>"$id"in i?i.$id.toLowerCase().includes(o.filter.toLowerCase()):kt.toLowerCase().includes(o.filter.toLowerCase())):n).map(_e)}}),globalThis.$pinia=e,s.on.getInspectorState(o=>{if(o.app===t&&o.inspectorId===f){const n=o.nodeId===J?e:e._s.get(o.nodeId);if(!n)return;n&&(o.nodeId!==J&&(globalThis.$store=G(n)),o.state=ge(n))}}),s.on.editInspectorState((o,n)=>{if(o.app===t&&o.inspectorId===f){const i=o.nodeId===J?e:e._s.get(o.nodeId);if(!i)return d(`store "${o.nodeId}" not found`,"error");const{path:a}=o;ot(i)?a.unshift("state"):(a.length!==1||!i._customProperties.has(a[0])||a[0]in i.$state)&&a.unshift("$state"),I=!1,o.set(i,a,o.state.value),I=!0}}),s.on.editComponentState(o=>{if(o.type.startsWith("🍍")){const n=o.type.replace(/^🍍\s*/,""),i=e._s.get(n);if(!i)return d(`store "${n}" not found`,"error");const{path:a}=o;if(a[0]!=="state")return d(`Invalid path for store "${n}":
+import{a2 as Rt,i as pt,a3 as Nt,l as Mt}from"./index-6_vkf3an.chunk.mjs";import{N as dt,O as A,j as tt,Q as Bt,R as C,S as ft,T as Q,U as ht,w as _t,J as Jt,c as gt,W as G,X as Ht,Y as Qt,Z as Gt,z as zt,B as R,a as yt,t as N}from"./preload-helper-iHri5ttz.chunk.mjs";import{d as Wt}from"./index-K61t94YW.chunk.mjs";import{e as qt,t as Yt,n as mt,P as Xt,u as Kt}from"./icons-BPrPKxzl.chunk.mjs";import{f as at}from"./PhotosFiltersInput-BJ4kTX4C.chunk.mjs";function Zt(){return bt().__VUE_DEVTOOLS_GLOBAL_HOOK__}function bt(){return typeof navigator<"u"&&typeof window<"u"?window:typeof globalThis<"u"?globalThis:{}}const te=typeof Proxy=="function",ee="devtools-plugin:setup",oe="plugin:settings:set";let L,X;function se(){var t;return L!==void 0||(typeof window<"u"&&window.performance?(L=!0,X=window.performance):typeof globalThis<"u"&&!((t=globalThis.perf_hooks)===null||t===void 0)&&t.performance?(L=!0,X=globalThis.perf_hooks.performance):L=!1),L}function ne(){return se()?X.now():Date.now()}class re{constructor(e,s){this.target=null,this.targetQueue=[],this.onQueue=[],this.plugin=e,this.hook=s;const o={};if(e.settings)for(const a in e.settings){const r=e.settings[a];o[a]=r.defaultValue}const n=`__vue-devtools-plugin-settings__${e.id}`;let i=Object.assign({},o);try{const a=localStorage.getItem(n),r=JSON.parse(a);Object.assign(i,r)}catch{}this.fallbacks={getSettings(){return i},setSettings(a){try{localStorage.setItem(n,JSON.stringify(a))}catch{}i=a},now(){return ne()}},s&&s.on(oe,(a,r)=>{a===this.plugin.id&&this.fallbacks.setSettings(r)}),this.proxiedOn=new Proxy({},{get:(a,r)=>this.target?this.target.on[r]:(...c)=>{this.onQueue.push({method:r,args:c})}}),this.proxiedTarget=new Proxy({},{get:(a,r)=>this.target?this.target[r]:r==="on"?this.proxiedOn:Object.keys(this.fallbacks).includes(r)?(...c)=>(this.targetQueue.push({method:r,args:c,resolve:()=>{}}),this.fallbacks[r](...c)):(...c)=>new Promise(p=>{this.targetQueue.push({method:r,args:c,resolve:p})})})}async setRealTarget(e){this.target=e;for(const s of this.onQueue)this.target.on[s.method](...s.args);for(const s of this.targetQueue)s.resolve(await this.target[s.method](...s.args))}}function vt(t,e){const s=t,o=bt(),n=Zt(),i=te&&s.enableEarlyProxy;if(n&&(o.__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__||!i))n.emit(ee,t,e);else{const a=i?new re(s,n):null;(o.__VUE_DEVTOOLS_PLUGINS__=o.__VUE_DEVTOOLS_PLUGINS__||[]).push({pluginDescriptor:s,setupFn:e,proxy:a}),a&&e(a.proxiedTarget)}}let Ot;const U=t=>Ot=t,St=Symbol();function K(t){return t&&typeof t=="object"&&Object.prototype.toString.call(t)==="[object Object]"&&typeof t.toJSON!="function"}var v;(function(t){t.direct="direct",t.patchObject="patch object",t.patchFunction="patch function"})(v||(v={}));const P=typeof window<"u",it=typeof window=="object"&&window.window===window?window:typeof self=="object"&&self.self===self?self:typeof R=="object"&&R.global===R?R:typeof globalThis=="object"?globalThis:{HTMLElement:null};function ae(t,{autoBom:e=!1}={}){return e&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(t.type)?new Blob(["\uFEFF",t],{type:t.type}):t}function et(t,e,s){const o=new XMLHttpRequest;o.open("GET",t),o.responseType="blob",o.onload=function(){$t(o.response,e,s)},o.onerror=function(){console.error("could not download file")},o.send()}function wt(t){const e=new XMLHttpRequest;e.open("HEAD",t,!1);try{e.send()}catch{}return e.status>=200&&e.status<=299}function M(t){try{t.dispatchEvent(new MouseEvent("click"))}catch{const e=document.createEvent("MouseEvents");e.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),t.dispatchEvent(e)}}const B=typeof navigator=="object"?navigator:{userAgent:""},Et=/Macintosh/.test(B.userAgent)&&/AppleWebKit/.test(B.userAgent)&&!/Safari/.test(B.userAgent),$t=P?typeof HTMLAnchorElement<"u"&&"download"in HTMLAnchorElement.prototype&&!Et?ie:"msSaveOrOpenBlob"in B?ce:le:()=>{};function ie(t,e="download",s){const o=document.createElement("a");o.download=e,o.rel="noopener",typeof t=="string"?(o.href=t,o.origin!==location.origin?wt(o.href)?et(t,e,s):(o.target="_blank",M(o)):M(o)):(o.href=URL.createObjectURL(t),setTimeout(function(){URL.revokeObjectURL(o.href)},4e4),setTimeout(function(){M(o)},0))}function ce(t,e="download",s){if(typeof t=="string")if(wt(t))et(t,e,s);else{const o=document.createElement("a");o.href=t,o.target="_blank",setTimeout(function(){M(o)})}else navigator.msSaveOrOpenBlob(ae(t,s),e)}function le(t,e,s,o){if(o=o||open("","_blank"),o&&(o.document.title=o.document.body.innerText="downloading..."),typeof t=="string")return et(t,e,s);const n=t.type==="application/octet-stream",i=/constructor/i.test(String(it.HTMLElement))||"safari"in it,a=/CriOS\/[\d]+/.test(navigator.userAgent);if((a||n&&i||Et)&&typeof FileReader<"u"){const r=new FileReader;r.onloadend=function(){let c=r.result;if(typeof c!="string")throw o=null,new Error("Wrong reader.result type");c=a?c:c.replace(/^data:[^;]*;/,"data:attachment/file;"),o?o.location.href=c:location.assign(c),o=null},r.readAsDataURL(t)}else{const r=URL.createObjectURL(t);o?o.location.assign(r):location.href=r,o=null,setTimeout(function(){URL.revokeObjectURL(r)},4e4)}}function d(t,e){const s="🍍 "+t;typeof __VUE_DEVTOOLS_TOAST__=="function"?__VUE_DEVTOOLS_TOAST__(s,e):e==="error"?console.error(s):e==="warn"?console.warn(s):console.log(s)}function ot(t){return"_a"in t&&"install"in t}function Pt(){if(!("clipboard"in navigator))return d("Your browser doesn't support the Clipboard API","error"),!0}function Ft(t){return t instanceof Error&&t.message.toLowerCase().includes("document is not focused")?(d('You need to activate the "Emulate a focused page" setting in the "Rendering" panel of devtools.',"warn"),!0):!1}async function ue(t){if(!Pt())try{await navigator.clipboard.writeText(JSON.stringify(t.state.value)),d("Global state copied to clipboard.")}catch(e){if(Ft(e))return;d("Failed to serialize the state. Check the console for more details.","error"),console.error(e)}}async function pe(t){if(!Pt())try{Tt(t,JSON.parse(await navigator.clipboard.readText())),d("Global state pasted from clipboard.")}catch(e){if(Ft(e))return;d("Failed to deserialize the state from clipboard. Check the console for more details.","error"),console.error(e)}}async function de(t){try{$t(new Blob([JSON.stringify(t.state.value)],{type:"text/plain;charset=utf-8"}),"pinia-state.json")}catch(e){d("Failed to export the state as JSON. Check the console for more details.","error"),console.error(e)}}let O;function fe(){O||(O=document.createElement("input"),O.type="file",O.accept=".json");function t(){return new Promise((e,s)=>{O.onchange=async()=>{const o=O.files;if(!o)return e(null);const n=o.item(0);return e(n?{text:await n.text(),file:n}:null)},O.oncancel=()=>e(null),O.onerror=s,O.click()})}return t}async function he(t){try{const e=await fe()();if(!e)return;const{text:s,file:o}=e;Tt(t,JSON.parse(s)),d(`Global state imported from "${o.name}".`)}catch(e){d("Failed to import the state from JSON. Check the console for more details.","error"),console.error(e)}}function Tt(t,e){for(const s in e){const o=t.state.value[s];o?Object.assign(o,e[s]):t.state.value[s]=e[s]}}function m(t){return{_custom:{display:t}}}const kt="🍍 Pinia (root)",J="_root";function _e(t){return ot(t)?{id:J,label:kt}:{id:t.$id,label:t.$id}}function ge(t){if(ot(t)){const s=Array.from(t._s.keys()),o=t._s;return{state:s.map(n=>({editable:!0,key:n,value:t.state.value[n]})),getters:s.filter(n=>o.get(n)._getters).map(n=>{const i=o.get(n);return{editable:!1,key:n,value:i._getters.reduce((a,r)=>(a[r]=i[r],a),{})}})}}const e={state:Object.keys(t.$state).map(s=>({editable:!0,key:s,value:t.$state[s]}))};return t._getters&&t._getters.length&&(e.getters=t._getters.map(s=>({editable:!1,key:s,value:t[s]}))),t._customProperties.size&&(e.customProperties=Array.from(t._customProperties).map(s=>({editable:!0,key:s,value:t[s]}))),e}function ye(t){return t?Array.isArray(t)?t.reduce((e,s)=>(e.keys.push(s.key),e.operations.push(s.type),e.oldValue[s.key]=s.oldValue,e.newValue[s.key]=s.newValue,e),{oldValue:{},keys:[],operations:[],newValue:{}}):{operation:m(t.type),key:m(t.key),oldValue:t.oldValue,newValue:t.newValue}:{}}function me(t){switch(t){case v.direct:return"mutation";case v.patchFunction:return"$patch";case v.patchObject:return"$patch";default:return"unknown"}}let I=!0;const H=[],$="pinia:mutations",f="pinia",{assign:be}=Object,z=t=>"🍍 "+t;function ve(t,e){vt({id:"dev.esm.pinia",label:"Pinia 🍍",logo:"https://pinia.vuejs.org/logo.svg",packageName:"pinia",homepage:"https://pinia.vuejs.org",componentStateTypes:H,app:t},s=>{typeof s.now!="function"&&d("You seem to be using an outdated version of Vue Devtools. Are you still using the Beta release instead of the stable one? You can find the links at https://devtools.vuejs.org/guide/installation.html."),s.addTimelineLayer({id:$,label:"Pinia 🍍",color:15064968}),s.addInspector({id:f,label:"Pinia 🍍",icon:"storage",treeFilterPlaceholder:"Search stores",actions:[{icon:"content_copy",action:()=>{ue(e)},tooltip:"Serialize and copy the state"},{icon:"content_paste",action:async()=>{await pe(e),s.sendInspectorTree(f),s.sendInspectorState(f)},tooltip:"Replace the state with the content of your clipboard"},{icon:"save",action:()=>{de(e)},tooltip:"Save the state as a JSON file"},{icon:"folder_open",action:async()=>{await he(e),s.sendInspectorTree(f),s.sendInspectorState(f)},tooltip:"Import the state from a JSON file"}],nodeActions:[{icon:"restore",tooltip:'Reset the state (with "$reset")',action:o=>{const n=e._s.get(o);n?typeof n.$reset!="function"?d(`Cannot reset "${o}" store because it doesn't have a "$reset" method implemented.`,"warn"):(n.$reset(),d(`Store "${o}" reset.`)):d(`Cannot reset "${o}" store because it wasn't found.`,"warn")}}]}),s.on.inspectComponent((o,n)=>{const i=o.componentInstance&&o.componentInstance.proxy;if(i&&i._pStores){const a=o.componentInstance.proxy._pStores;Object.values(a).forEach(r=>{o.instanceData.state.push({type:z(r.$id),key:"state",editable:!0,value:r._isOptionsAPI?{_custom:{value:G(r.$state),actions:[{icon:"restore",tooltip:"Reset the state of this store",action:()=>r.$reset()}]}}:Object.keys(r.$state).reduce((c,p)=>(c[p]=r.$state[p],c),{})}),r._getters&&r._getters.length&&o.instanceData.state.push({type:z(r.$id),key:"getters",editable:!1,value:r._getters.reduce((c,p)=>{try{c[p]=r[p]}catch(g){c[p]=g}return c},{})})})}}),s.on.getInspectorTree(o=>{if(o.app===t&&o.inspectorId===f){let n=[e];n=n.concat(Array.from(e._s.values())),o.rootNodes=(o.filter?n.filter(i=>"$id"in i?i.$id.toLowerCase().includes(o.filter.toLowerCase()):kt.toLowerCase().includes(o.filter.toLowerCase())):n).map(_e)}}),globalThis.$pinia=e,s.on.getInspectorState(o=>{if(o.app===t&&o.inspectorId===f){const n=o.nodeId===J?e:e._s.get(o.nodeId);if(!n)return;n&&(o.nodeId!==J&&(globalThis.$store=G(n)),o.state=ge(n))}}),s.on.editInspectorState((o,n)=>{if(o.app===t&&o.inspectorId===f){const i=o.nodeId===J?e:e._s.get(o.nodeId);if(!i)return d(`store "${o.nodeId}" not found`,"error");const{path:a}=o;ot(i)?a.unshift("state"):(a.length!==1||!i._customProperties.has(a[0])||a[0]in i.$state)&&a.unshift("$state"),I=!1,o.set(i,a,o.state.value),I=!0}}),s.on.editComponentState(o=>{if(o.type.startsWith("🍍")){const n=o.type.replace(/^🍍\s*/,""),i=e._s.get(n);if(!i)return d(`store "${n}" not found`,"error");const{path:a}=o;if(a[0]!=="state")return d(`Invalid path for store "${n}":
${a}
Only state can be modified.`);a[0]="$state",I=!1,o.set(i,a,o.state.value),I=!0}})})}function Oe(t,e){H.includes(z(e.$id))||H.push(z(e.$id)),vt({id:"dev.esm.pinia",label:"Pinia 🍍",logo:"https://pinia.vuejs.org/logo.svg",packageName:"pinia",homepage:"https://pinia.vuejs.org",componentStateTypes:H,app:t,settings:{logStoreChanges:{label:"Notify about new/deleted stores",type:"boolean",defaultValue:!0}}},s=>{const o=typeof s.now=="function"?s.now.bind(s):Date.now;e.$onAction(({after:a,onError:r,name:c,args:p})=>{const g=It++;s.addTimelineEvent({layerId:$,event:{time:o(),title:"🛫 "+c,subtitle:"start",data:{store:m(e.$id),action:m(c),args:p},groupId:g}}),a(b=>{w=void 0,s.addTimelineEvent({layerId:$,event:{time:o(),title:"🛬 "+c,subtitle:"end",data:{store:m(e.$id),action:m(c),args:p,result:b},groupId:g}})}),r(b=>{w=void 0,s.addTimelineEvent({layerId:$,event:{time:o(),logType:"error",title:"💥 "+c,subtitle:"end",data:{store:m(e.$id),action:m(c),args:p,error:b},groupId:g}})})},!0),e._customProperties.forEach(a=>{_t(()=>Ht(e[a]),(r,c)=>{s.notifyComponentUpdate(),s.sendInspectorState(f),I&&s.addTimelineEvent({layerId:$,event:{time:o(),title:"Change",subtitle:a,data:{newValue:r,oldValue:c},groupId:w}})},{deep:!0})}),e.$subscribe(({events:a,type:r},c)=>{if(s.notifyComponentUpdate(),s.sendInspectorState(f),!I)return;const p={time:o(),title:me(r),data:be({store:m(e.$id)},ye(a)),groupId:w};r===v.patchFunction?p.subtitle="⤵️":r===v.patchObject?p.subtitle="🧩":a&&!Array.isArray(a)&&(p.subtitle=a.type),a&&(p.data["rawEvent(s)"]={_custom:{display:"DebuggerEvent",type:"object",tooltip:"raw DebuggerEvent[]",value:a}}),s.addTimelineEvent({layerId:$,event:p})},{detached:!0,flush:"sync"});const n=e._hotUpdate;e._hotUpdate=C(a=>{n(a),s.addTimelineEvent({layerId:$,event:{time:o(),title:"🔥 "+e.$id,subtitle:"HMR update",data:{store:m(e.$id),info:m("HMR update")}}}),s.notifyComponentUpdate(),s.sendInspectorTree(f),s.sendInspectorState(f)});const{$dispose:i}=e;e.$dispose=()=>{i(),s.notifyComponentUpdate(),s.sendInspectorTree(f),s.sendInspectorState(f),s.getSettings().logStoreChanges&&d(`Disposed "${e.$id}" store 🗑`)},s.notifyComponentUpdate(),s.sendInspectorTree(f),s.sendInspectorState(f),s.getSettings().logStoreChanges&&d(`"${e.$id}" store installed 🆕`)})}let It=0,w;function ct(t,e,s){const o=e.reduce((n,i)=>(n[i]=G(t)[i],n),{});for(const n in o)t[n]=function(){const i=It,a=s?new Proxy(t,{get(...c){return w=i,Reflect.get(...c)},set(...c){return w=i,Reflect.set(...c)}}):t;w=i;const r=o[n].apply(a,arguments);return w=void 0,r}}function Se({app:t,store:e,options:s}){if(!e.$id.startsWith("__hot:")){if(e._isOptionsAPI=!!s.state,!e._p._testing){ct(e,Object.keys(s.actions),e._isOptionsAPI);const o=e._hotUpdate;G(e)._hotUpdate=function(n){o.apply(this,arguments),ct(e,Object.keys(n._hmrPayload.actions),!!e._isOptionsAPI)}}Oe(t,e)}}function Je(){const t=ft(!0),e=t.run(()=>tt({}));let s=[];const o=C({install(n){U(o)},use(n){return this._a,s.push(n),this},_p:s,_a:null,_e:t,_s:new Map,state:e});return typeof __VUE_PROD_DEVTOOLS__<"u"&&__VUE_PROD_DEVTOOLS__&&P&&typeof Proxy<"u"&&o.use(Se),o}const jt=()=>{};function lt(t,e,s,o=jt){t.push(e);const n=()=>{const i=t.indexOf(e);i>-1&&(t.splice(i,1),o())};return!s&&Qt()&&Gt(n),n}function k(t,...e){t.slice().forEach(s=>{s(...e)})}const we=t=>t(),ut=Symbol(),Y=Symbol();function Z(t,e){t instanceof Map&&e instanceof Map?e.forEach((s,o)=>t.set(o,s)):t instanceof Set&&e instanceof Set&&e.forEach(t.add,t);for(const s in e){if(!e.hasOwnProperty(s))continue;const o=e[s],n=t[s];K(n)&&K(o)&&t.hasOwnProperty(s)&&!Q(o)&&!ht(o)?t[s]=Z(n,o):t[s]=o}return t}const Ee=Symbol();function $e(t){return!K(t)||!t.hasOwnProperty(Ee)}const{assign:S}=Object;function Pe(t){return!!(Q(t)&&t.effect)}function Fe(t,e,s,o){const{state:n,actions:i,getters:a}=e,r=s.state.value[t];let c;function p(){r||A(s.state.value,t,n?n():{});const g=dt(s.state.value[t]);return S(g,i,Object.keys(a||{}).reduce((b,F)=>(b[F]=C(gt(()=>{U(s);const E=s._s.get(t);if(E._r)return a[F].call(E,E)})),b),{}))}return c=Dt(t,p,e,s,o,!0),c}function Dt(t,e,s={},o,n,i){let a;const r=S({actions:{}},s),c={deep:!0};let p,g,b=[],F=[],E;const T=o.state.value[t];!i&&!T&&A(o.state.value,t,{});const Vt=tt({});let st;function nt(l){let u;p=g=!1,typeof l=="function"?(l(o.state.value[t]),u={type:v.patchFunction,storeId:t,events:E}):(Z(o.state.value[t],l),u={type:v.patchObject,payload:l,storeId:t,events:E});const _=st=Symbol();Jt().then(()=>{st===_&&(p=!0)}),g=!0,k(b,u,o.state.value[t])}const Lt=i?function(){const{state:l}=s,u=l?l():{};this.$patch(_=>{S(_,u)})}:jt;function At(){a.stop(),b=[],F=[],o._s.delete(t)}const rt=(l,u="")=>{if(ut in l)return l[Y]=u,l;const _=function(){U(o);const x=Array.from(arguments),D=[],q=[];function Ut(y){D.push(y)}function xt(y){q.push(y)}k(F,{args:x,name:_[Y],store:h,after:Ut,onError:xt});let V;try{V=l.apply(this&&this.$id===t?this:h,x)}catch(y){throw k(q,y),y}return V instanceof Promise?V.then(y=>(k(D,y),y)).catch(y=>(k(q,y),Promise.reject(y))):(k(D,V),V)};return _[ut]=!0,_[Y]=u,_},Ct=C({actions:{},getters:{},state:[],hotState:Vt}),W={_p:o,$id:t,$onAction:lt.bind(null,F),$patch:nt,$reset:Lt,$subscribe(l,u={}){const _=lt(b,l,u.detached,()=>x()),x=a.run(()=>_t(()=>o.state.value[t],D=>{(u.flush==="sync"?g:p)&&l({storeId:t,type:v.direct,events:E},D)},S({},c,u)));return _},$dispose:At};W._r=!1;const h=Bt(typeof __VUE_PROD_DEVTOOLS__<"u"&&__VUE_PROD_DEVTOOLS__&&P?S({_hmrPayload:Ct,_customProperties:C(new Set)},W):W);o._s.set(t,h);const j=(o._a&&o._a.runWithContext||we)(()=>o._e.run(()=>(a=ft()).run(()=>e({action:rt}))));for(const l in j){const u=j[l];if(Q(u)&&!Pe(u)||ht(u))i||(T&&$e(u)&&(Q(u)?u.value=T[l]:Z(u,T[l])),A(o.state.value[t],l,u));else if(typeof u=="function"){const _=rt(u,l);A(j,l,_),r.actions[l]=u}}if(Object.keys(j).forEach(l=>{A(h,l,j[l])}),Object.defineProperty(h,"$state",{get:()=>o.state.value[t],set:l=>{nt(u=>{S(u,l)})}}),typeof __VUE_PROD_DEVTOOLS__<"u"&&__VUE_PROD_DEVTOOLS__&&P){const l={writable:!0,configurable:!0,enumerable:!1};["_p","_hmrPayload","_getters","_customProperties"].forEach(u=>{Object.defineProperty(h,u,S({value:h[u]},l))})}return h._r=!0,o._p.forEach(l=>{if(typeof __VUE_PROD_DEVTOOLS__<"u"&&__VUE_PROD_DEVTOOLS__&&P){const u=a.run(()=>l({store:h,app:o._a,pinia:o,options:r}));Object.keys(u||{}).forEach(_=>h._customProperties.add(_)),S(h,u)}else S(h,a.run(()=>l({store:h,app:o._a,pinia:o,options:r})))}),T&&i&&s.hydrate&&s.hydrate(h.$state,T),p=!0,g=!0,h}function Te(t,e,s){let o,n;const i=typeof e=="function";o=t,n=i?s:e;function a(r,c){const p=Rt();return r=r||(p?zt(St,null):null),r&&U(r),r=Ot,r._s.has(o)||(i?Dt(o,e,n,r):Fe(o,n,r)),r._s.get(o)}return a.$id=o,a}function He(t){return dt(t)}const Qe=function(t){t.mixin({beforeCreate(){const e=this.$options;if(e.pinia){const s=e.pinia;if(!this._provided){const o={};Object.defineProperty(this,"_provided",{get:()=>o,set:n=>Object.assign(o,n)})}this._provided[St]=s,this.$pinia||(this.$pinia=s),s._a=this,P&&U(s),typeof __VUE_PROD_DEVTOOLS__<"u"&&__VUE_PROD_DEVTOOLS__&&P&&ve(s._a,s)}else!this.$pinia&&e.parent&&e.parent.$pinia&&(this.$pinia=e.parent.$pinia)},destroyed(){delete this._pStores}})},ke=yt({name:"PhotosFolder",components:{NcButton:pt,FolderOutline:Yt,Close:qt},props:{path:{type:String,required:!0},canDelete:{type:Boolean,default:!1},rootFolderLabel:{type:String,required:!0},rootFolderIcon:{type:Object,required:!0}},emits:["remove-folder"],computed:{folderName(){return this.path==="/"?this.rootFolderLabel:this.path.split("/").pop()},subname(){switch((this.path.match(/\//g)??[]).length){case 1:return"";case 2:return this.path.split("/").splice(0,2).join("/");default:return this.path.split("/").splice(0,3).join("/")}}},methods:{emitRemoveSourceFolder(){this.$emit("remove-folder")},t:N}});var Ie=function(){var t=this,e=t._self._c;return t._self._setupProxy,e("div",{staticClass:"folder"},[t.path==="/"?e(t.rootFolderIcon,{tag:"component"}):e("FolderOutline"),e("span",{staticClass:"folder__info"},[e("div",{staticClass:"folder__path"},[t._v(t._s(t.folderName))]),t.subname!==""?e("div",[t._v(" "+t._s(t.subname)+" ")]):t._e()]),t.canDelete?e("NcButton",{attrs:{variant:"tertiary","aria-label":t.t("photos","Delete source directory")},on:{click:t.emitRemoveSourceFolder},scopedSlots:t._u([{key:"icon",fn:function(){return[e("Close",{attrs:{size:20}})]},proxy:!0}],null,!1,2121748766)}):t._e()],1)},je=[],De=mt(ke,Ie,je,!1,null,"74f30535");const Ve=De.exports,Le=yt({name:"PhotosSourceLocationsSettings",components:{NcButton:pt,PhotosFolder:Ve,Plus:Xt},data(){return{FolderMultipleOutline:Kt}},computed:{photosSourceFolders(){return this.$store.state.userConfig.photosSourceFolders}},methods:{debounceAddSourceFolder:Wt(function(...t){this.addSourceFolder(...t)},200,{immediate:!1}),async openFilePicker(t){return Nt(t).setMultiSelect(!1).addMimeTypeFilter("httpd/unix-directory").allowDirectories().addButton({label:N("photos","Pick folder"),callback:e=>Mt.debug("Picked",{nodes:e})}).build().pick()},async addSourceFolder(){const t=await this.openFilePicker(N("photos","Select a source folder for your media"));this.photosSourceFolders.includes(t)||this.$store.dispatch("updateUserConfig",{key:"photosSourceFolders",value:[...this.photosSourceFolders,t]})},removeSourceFolder(t){const e=[...this.photosSourceFolders];e.splice(t,1),this.$store.dispatch("updateUserConfig",{key:"photosSourceFolders",value:e})},t:N}});var Ae=function(){var t=this,e=t._self._c;return t._self._setupProxy,e("div",{staticClass:"photos-locations"},[e("div",{staticClass:"photos-locations__title"},[t._v(" "+t._s(t.t("photos","Media folders"))+" ")]),e("div",{staticClass:"photos-locations__description"},[t._v(" "+t._s(t.t("photos","Choose the folders from where photos and videos are shown."))+" ")]),e("ul",{staticClass:"photos-locations__list"},t._l(t.photosSourceFolders,function(s,o){return e("li",{key:o},[e("PhotosFolder",{attrs:{path:s,"can-delete":t.photosSourceFolders.length!==1,"root-folder-label":t.t("photos","All folders"),"root-folder-icon":t.FolderMultipleOutline},on:{"remove-folder":function(n){return t.removeSourceFolder(o)}}})],1)}),0),e("NcButton",{attrs:{"aria-label":t.t("photos","Add a Photos source for the timelines"),wide:!0},on:{click:t.debounceAddSourceFolder},scopedSlots:t._u([{key:"icon",fn:function(){return[e("Plus",{attrs:{size:20}})]},proxy:!0}])},[t._v(" "+t._s(t.t("photos","Add folder"))+" ")])],1)},Ce=[],Ue=mt(Le,Ae,Ce,!1,null,"55d997fb");const Ge=Ue.exports,ze=Te("filters",()=>{const t=tt(at.reduce((s,o)=>({...s,[o.id]:[]}),{})),e=gt(()=>Object.entries(t.value).filter(([,s])=>s.length>0).map(([s,o])=>at.find(n=>n.id===s)?.getQuery(o)).join(`
`));return{selectedFilters:t,filtersQuery:e}});export{Ge as P,Qe as a,Je as c,He as s,ze as u};
-//# sourceMappingURL=filters-6qrbp5yy.chunk.mjs.map
+//# sourceMappingURL=filters-DiWkMIga.chunk.mjs.map
diff --git a/js/filters-6qrbp5yy.chunk.mjs.license b/js/filters-DiWkMIga.chunk.mjs.license
similarity index 100%
rename from js/filters-6qrbp5yy.chunk.mjs.license
rename to js/filters-DiWkMIga.chunk.mjs.license
diff --git a/js/filters-6qrbp5yy.chunk.mjs.map b/js/filters-DiWkMIga.chunk.mjs.map
similarity index 99%
rename from js/filters-6qrbp5yy.chunk.mjs.map
rename to js/filters-DiWkMIga.chunk.mjs.map
index 16673c26fc..8dd945194f 100644
--- a/js/filters-6qrbp5yy.chunk.mjs.map
+++ b/js/filters-DiWkMIga.chunk.mjs.map
@@ -1 +1 @@
-{"version":3,"file":"filters-6qrbp5yy.chunk.mjs","sources":["../node_modules/@vue/devtools-api/lib/esm/env.js","../node_modules/@vue/devtools-api/lib/esm/const.js","../node_modules/@vue/devtools-api/lib/esm/time.js","../node_modules/@vue/devtools-api/lib/esm/proxy.js","../node_modules/@vue/devtools-api/lib/esm/index.js","../node_modules/pinia/dist/pinia.mjs","../src/components/Settings/PhotosFolder.vue","../src/components/Settings/PhotosSourceLocationsSettings.vue","../src/store/filters.ts"],"sourcesContent":["export function getDevtoolsGlobalHook() {\n return getTarget().__VUE_DEVTOOLS_GLOBAL_HOOK__;\n}\nexport function getTarget() {\n // @ts-expect-error navigator and windows are not available in all environments\n return (typeof navigator !== 'undefined' && typeof window !== 'undefined')\n ? window\n : typeof globalThis !== 'undefined'\n ? globalThis\n : {};\n}\nexport const isProxyAvailable = typeof Proxy === 'function';\n","export const HOOK_SETUP = 'devtools-plugin:setup';\nexport const HOOK_PLUGIN_SETTINGS_SET = 'plugin:settings:set';\n","let supported;\nlet perf;\nexport function isPerformanceSupported() {\n var _a;\n if (supported !== undefined) {\n return supported;\n }\n if (typeof window !== 'undefined' && window.performance) {\n supported = true;\n perf = window.performance;\n }\n else if (typeof globalThis !== 'undefined' && ((_a = globalThis.perf_hooks) === null || _a === void 0 ? void 0 : _a.performance)) {\n supported = true;\n perf = globalThis.perf_hooks.performance;\n }\n else {\n supported = false;\n }\n return supported;\n}\nexport function now() {\n return isPerformanceSupported() ? perf.now() : Date.now();\n}\n","import { HOOK_PLUGIN_SETTINGS_SET } from './const.js';\nimport { now } from './time.js';\nexport class ApiProxy {\n constructor(plugin, hook) {\n this.target = null;\n this.targetQueue = [];\n this.onQueue = [];\n this.plugin = plugin;\n this.hook = hook;\n const defaultSettings = {};\n if (plugin.settings) {\n for (const id in plugin.settings) {\n const item = plugin.settings[id];\n defaultSettings[id] = item.defaultValue;\n }\n }\n const localSettingsSaveId = `__vue-devtools-plugin-settings__${plugin.id}`;\n let currentSettings = Object.assign({}, defaultSettings);\n try {\n const raw = localStorage.getItem(localSettingsSaveId);\n const data = JSON.parse(raw);\n Object.assign(currentSettings, data);\n }\n catch (e) {\n // noop\n }\n this.fallbacks = {\n getSettings() {\n return currentSettings;\n },\n setSettings(value) {\n try {\n localStorage.setItem(localSettingsSaveId, JSON.stringify(value));\n }\n catch (e) {\n // noop\n }\n currentSettings = value;\n },\n now() {\n return now();\n },\n };\n if (hook) {\n hook.on(HOOK_PLUGIN_SETTINGS_SET, (pluginId, value) => {\n if (pluginId === this.plugin.id) {\n this.fallbacks.setSettings(value);\n }\n });\n }\n this.proxiedOn = new Proxy({}, {\n get: (_target, prop) => {\n if (this.target) {\n return this.target.on[prop];\n }\n else {\n return (...args) => {\n this.onQueue.push({\n method: prop,\n args,\n });\n };\n }\n },\n });\n this.proxiedTarget = new Proxy({}, {\n get: (_target, prop) => {\n if (this.target) {\n return this.target[prop];\n }\n else if (prop === 'on') {\n return this.proxiedOn;\n }\n else if (Object.keys(this.fallbacks).includes(prop)) {\n return (...args) => {\n this.targetQueue.push({\n method: prop,\n args,\n resolve: () => { },\n });\n return this.fallbacks[prop](...args);\n };\n }\n else {\n return (...args) => {\n return new Promise((resolve) => {\n this.targetQueue.push({\n method: prop,\n args,\n resolve,\n });\n });\n };\n }\n },\n });\n }\n async setRealTarget(target) {\n this.target = target;\n for (const item of this.onQueue) {\n this.target.on[item.method](...item.args);\n }\n for (const item of this.targetQueue) {\n item.resolve(await this.target[item.method](...item.args));\n }\n }\n}\n","import { getDevtoolsGlobalHook, getTarget, isProxyAvailable } from './env.js';\nimport { HOOK_SETUP } from './const.js';\nimport { ApiProxy } from './proxy.js';\nexport * from './api/index.js';\nexport * from './plugin.js';\nexport * from './time.js';\nexport function setupDevtoolsPlugin(pluginDescriptor, setupFn) {\n const descriptor = pluginDescriptor;\n const target = getTarget();\n const hook = getDevtoolsGlobalHook();\n const enableProxy = isProxyAvailable && descriptor.enableEarlyProxy;\n if (hook && (target.__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__ || !enableProxy)) {\n hook.emit(HOOK_SETUP, pluginDescriptor, setupFn);\n }\n else {\n const proxy = enableProxy ? new ApiProxy(descriptor, hook) : null;\n const list = target.__VUE_DEVTOOLS_PLUGINS__ = target.__VUE_DEVTOOLS_PLUGINS__ || [];\n list.push({\n pluginDescriptor: descriptor,\n setupFn,\n proxy,\n });\n if (proxy) {\n setupFn(proxy.proxiedTarget);\n }\n }\n}\n","/*!\n * pinia v2.3.1\n * (c) 2025 Eduardo San Martin Morote\n * @license MIT\n */\nimport { hasInjectionContext, inject, toRaw, watch, unref, markRaw, effectScope, ref, isVue2, isRef, isReactive, set, getCurrentScope, onScopeDispose, getCurrentInstance, reactive, toRef, del, nextTick, computed, toRefs } from 'vue-demi';\nimport { setupDevtoolsPlugin } from '@vue/devtools-api';\n\n/**\n * setActivePinia must be called to handle SSR at the top of functions like\n * `fetch`, `setup`, `serverPrefetch` and others\n */\nlet activePinia;\n/**\n * Sets or unsets the active pinia. Used in SSR and internally when calling\n * actions and getters\n *\n * @param pinia - Pinia instance\n */\n// @ts-expect-error: cannot constrain the type of the return\nconst setActivePinia = (pinia) => (activePinia = pinia);\n/**\n * Get the currently active pinia if there is any.\n */\nconst getActivePinia = () => (hasInjectionContext() && inject(piniaSymbol)) || activePinia;\nconst piniaSymbol = ((process.env.NODE_ENV !== 'production') ? Symbol('pinia') : /* istanbul ignore next */ Symbol());\n\nfunction isPlainObject(\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\no) {\n return (o &&\n typeof o === 'object' &&\n Object.prototype.toString.call(o) === '[object Object]' &&\n typeof o.toJSON !== 'function');\n}\n// type DeepReadonly = { readonly [P in keyof T]: DeepReadonly }\n// TODO: can we change these to numbers?\n/**\n * Possible types for SubscriptionCallback\n */\nvar MutationType;\n(function (MutationType) {\n /**\n * Direct mutation of the state:\n *\n * - `store.name = 'new name'`\n * - `store.$state.name = 'new name'`\n * - `store.list.push('new item')`\n */\n MutationType[\"direct\"] = \"direct\";\n /**\n * Mutated the state with `$patch` and an object\n *\n * - `store.$patch({ name: 'newName' })`\n */\n MutationType[\"patchObject\"] = \"patch object\";\n /**\n * Mutated the state with `$patch` and a function\n *\n * - `store.$patch(state => state.name = 'newName')`\n */\n MutationType[\"patchFunction\"] = \"patch function\";\n // maybe reset? for $state = {} and $reset\n})(MutationType || (MutationType = {}));\n\nconst IS_CLIENT = typeof window !== 'undefined';\n\n/*\n * FileSaver.js A saveAs() FileSaver implementation.\n *\n * Originally by Eli Grey, adapted as an ESM module by Eduardo San Martin\n * Morote.\n *\n * License : MIT\n */\n// The one and only way of getting global scope in all environments\n// https://stackoverflow.com/q/3277182/1008999\nconst _global = /*#__PURE__*/ (() => typeof window === 'object' && window.window === window\n ? window\n : typeof self === 'object' && self.self === self\n ? self\n : typeof global === 'object' && global.global === global\n ? global\n : typeof globalThis === 'object'\n ? globalThis\n : { HTMLElement: null })();\nfunction bom(blob, { autoBom = false } = {}) {\n // prepend BOM for UTF-8 XML and text/* types (including HTML)\n // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF\n if (autoBom &&\n /^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(blob.type)) {\n return new Blob([String.fromCharCode(0xfeff), blob], { type: blob.type });\n }\n return blob;\n}\nfunction download(url, name, opts) {\n const xhr = new XMLHttpRequest();\n xhr.open('GET', url);\n xhr.responseType = 'blob';\n xhr.onload = function () {\n saveAs(xhr.response, name, opts);\n };\n xhr.onerror = function () {\n console.error('could not download file');\n };\n xhr.send();\n}\nfunction corsEnabled(url) {\n const xhr = new XMLHttpRequest();\n // use sync to avoid popup blocker\n xhr.open('HEAD', url, false);\n try {\n xhr.send();\n }\n catch (e) { }\n return xhr.status >= 200 && xhr.status <= 299;\n}\n// `a.click()` doesn't work for all browsers (#465)\nfunction click(node) {\n try {\n node.dispatchEvent(new MouseEvent('click'));\n }\n catch (e) {\n const evt = document.createEvent('MouseEvents');\n evt.initMouseEvent('click', true, true, window, 0, 0, 0, 80, 20, false, false, false, false, 0, null);\n node.dispatchEvent(evt);\n }\n}\nconst _navigator = typeof navigator === 'object' ? navigator : { userAgent: '' };\n// Detect WebView inside a native macOS app by ruling out all browsers\n// We just need to check for 'Safari' because all other browsers (besides Firefox) include that too\n// https://www.whatismybrowser.com/guides/the-latest-user-agent/macos\nconst isMacOSWebView = /*#__PURE__*/ (() => /Macintosh/.test(_navigator.userAgent) &&\n /AppleWebKit/.test(_navigator.userAgent) &&\n !/Safari/.test(_navigator.userAgent))();\nconst saveAs = !IS_CLIENT\n ? () => { } // noop\n : // Use download attribute first if possible (#193 Lumia mobile) unless this is a macOS WebView or mini program\n typeof HTMLAnchorElement !== 'undefined' &&\n 'download' in HTMLAnchorElement.prototype &&\n !isMacOSWebView\n ? downloadSaveAs\n : // Use msSaveOrOpenBlob as a second approach\n 'msSaveOrOpenBlob' in _navigator\n ? msSaveAs\n : // Fallback to using FileReader and a popup\n fileSaverSaveAs;\nfunction downloadSaveAs(blob, name = 'download', opts) {\n const a = document.createElement('a');\n a.download = name;\n a.rel = 'noopener'; // tabnabbing\n // TODO: detect chrome extensions & packaged apps\n // a.target = '_blank'\n if (typeof blob === 'string') {\n // Support regular links\n a.href = blob;\n if (a.origin !== location.origin) {\n if (corsEnabled(a.href)) {\n download(blob, name, opts);\n }\n else {\n a.target = '_blank';\n click(a);\n }\n }\n else {\n click(a);\n }\n }\n else {\n // Support blobs\n a.href = URL.createObjectURL(blob);\n setTimeout(function () {\n URL.revokeObjectURL(a.href);\n }, 4e4); // 40s\n setTimeout(function () {\n click(a);\n }, 0);\n }\n}\nfunction msSaveAs(blob, name = 'download', opts) {\n if (typeof blob === 'string') {\n if (corsEnabled(blob)) {\n download(blob, name, opts);\n }\n else {\n const a = document.createElement('a');\n a.href = blob;\n a.target = '_blank';\n setTimeout(function () {\n click(a);\n });\n }\n }\n else {\n // @ts-ignore: works on windows\n navigator.msSaveOrOpenBlob(bom(blob, opts), name);\n }\n}\nfunction fileSaverSaveAs(blob, name, opts, popup) {\n // Open a popup immediately do go around popup blocker\n // Mostly only available on user interaction and the fileReader is async so...\n popup = popup || open('', '_blank');\n if (popup) {\n popup.document.title = popup.document.body.innerText = 'downloading...';\n }\n if (typeof blob === 'string')\n return download(blob, name, opts);\n const force = blob.type === 'application/octet-stream';\n const isSafari = /constructor/i.test(String(_global.HTMLElement)) || 'safari' in _global;\n const isChromeIOS = /CriOS\\/[\\d]+/.test(navigator.userAgent);\n if ((isChromeIOS || (force && isSafari) || isMacOSWebView) &&\n typeof FileReader !== 'undefined') {\n // Safari doesn't allow downloading of blob URLs\n const reader = new FileReader();\n reader.onloadend = function () {\n let url = reader.result;\n if (typeof url !== 'string') {\n popup = null;\n throw new Error('Wrong reader.result type');\n }\n url = isChromeIOS\n ? url\n : url.replace(/^data:[^;]*;/, 'data:attachment/file;');\n if (popup) {\n popup.location.href = url;\n }\n else {\n location.assign(url);\n }\n popup = null; // reverse-tabnabbing #460\n };\n reader.readAsDataURL(blob);\n }\n else {\n const url = URL.createObjectURL(blob);\n if (popup)\n popup.location.assign(url);\n else\n location.href = url;\n popup = null; // reverse-tabnabbing #460\n setTimeout(function () {\n URL.revokeObjectURL(url);\n }, 4e4); // 40s\n }\n}\n\n/**\n * Shows a toast or console.log\n *\n * @param message - message to log\n * @param type - different color of the tooltip\n */\nfunction toastMessage(message, type) {\n const piniaMessage = '🍍 ' + message;\n if (typeof __VUE_DEVTOOLS_TOAST__ === 'function') {\n // No longer available :(\n __VUE_DEVTOOLS_TOAST__(piniaMessage, type);\n }\n else if (type === 'error') {\n console.error(piniaMessage);\n }\n else if (type === 'warn') {\n console.warn(piniaMessage);\n }\n else {\n console.log(piniaMessage);\n }\n}\nfunction isPinia(o) {\n return '_a' in o && 'install' in o;\n}\n\n/**\n * This file contain devtools actions, they are not Pinia actions.\n */\n// ---\nfunction checkClipboardAccess() {\n if (!('clipboard' in navigator)) {\n toastMessage(`Your browser doesn't support the Clipboard API`, 'error');\n return true;\n }\n}\nfunction checkNotFocusedError(error) {\n if (error instanceof Error &&\n error.message.toLowerCase().includes('document is not focused')) {\n toastMessage('You need to activate the \"Emulate a focused page\" setting in the \"Rendering\" panel of devtools.', 'warn');\n return true;\n }\n return false;\n}\nasync function actionGlobalCopyState(pinia) {\n if (checkClipboardAccess())\n return;\n try {\n await navigator.clipboard.writeText(JSON.stringify(pinia.state.value));\n toastMessage('Global state copied to clipboard.');\n }\n catch (error) {\n if (checkNotFocusedError(error))\n return;\n toastMessage(`Failed to serialize the state. Check the console for more details.`, 'error');\n console.error(error);\n }\n}\nasync function actionGlobalPasteState(pinia) {\n if (checkClipboardAccess())\n return;\n try {\n loadStoresState(pinia, JSON.parse(await navigator.clipboard.readText()));\n toastMessage('Global state pasted from clipboard.');\n }\n catch (error) {\n if (checkNotFocusedError(error))\n return;\n toastMessage(`Failed to deserialize the state from clipboard. Check the console for more details.`, 'error');\n console.error(error);\n }\n}\nasync function actionGlobalSaveState(pinia) {\n try {\n saveAs(new Blob([JSON.stringify(pinia.state.value)], {\n type: 'text/plain;charset=utf-8',\n }), 'pinia-state.json');\n }\n catch (error) {\n toastMessage(`Failed to export the state as JSON. Check the console for more details.`, 'error');\n console.error(error);\n }\n}\nlet fileInput;\nfunction getFileOpener() {\n if (!fileInput) {\n fileInput = document.createElement('input');\n fileInput.type = 'file';\n fileInput.accept = '.json';\n }\n function openFile() {\n return new Promise((resolve, reject) => {\n fileInput.onchange = async () => {\n const files = fileInput.files;\n if (!files)\n return resolve(null);\n const file = files.item(0);\n if (!file)\n return resolve(null);\n return resolve({ text: await file.text(), file });\n };\n // @ts-ignore: TODO: changed from 4.3 to 4.4\n fileInput.oncancel = () => resolve(null);\n fileInput.onerror = reject;\n fileInput.click();\n });\n }\n return openFile;\n}\nasync function actionGlobalOpenStateFile(pinia) {\n try {\n const open = getFileOpener();\n const result = await open();\n if (!result)\n return;\n const { text, file } = result;\n loadStoresState(pinia, JSON.parse(text));\n toastMessage(`Global state imported from \"${file.name}\".`);\n }\n catch (error) {\n toastMessage(`Failed to import the state from JSON. Check the console for more details.`, 'error');\n console.error(error);\n }\n}\nfunction loadStoresState(pinia, state) {\n for (const key in state) {\n const storeState = pinia.state.value[key];\n // store is already instantiated, patch it\n if (storeState) {\n Object.assign(storeState, state[key]);\n }\n else {\n // store is not instantiated, set the initial state\n pinia.state.value[key] = state[key];\n }\n }\n}\n\nfunction formatDisplay(display) {\n return {\n _custom: {\n display,\n },\n };\n}\nconst PINIA_ROOT_LABEL = '🍍 Pinia (root)';\nconst PINIA_ROOT_ID = '_root';\nfunction formatStoreForInspectorTree(store) {\n return isPinia(store)\n ? {\n id: PINIA_ROOT_ID,\n label: PINIA_ROOT_LABEL,\n }\n : {\n id: store.$id,\n label: store.$id,\n };\n}\nfunction formatStoreForInspectorState(store) {\n if (isPinia(store)) {\n const storeNames = Array.from(store._s.keys());\n const storeMap = store._s;\n const state = {\n state: storeNames.map((storeId) => ({\n editable: true,\n key: storeId,\n value: store.state.value[storeId],\n })),\n getters: storeNames\n .filter((id) => storeMap.get(id)._getters)\n .map((id) => {\n const store = storeMap.get(id);\n return {\n editable: false,\n key: id,\n value: store._getters.reduce((getters, key) => {\n getters[key] = store[key];\n return getters;\n }, {}),\n };\n }),\n };\n return state;\n }\n const state = {\n state: Object.keys(store.$state).map((key) => ({\n editable: true,\n key,\n value: store.$state[key],\n })),\n };\n // avoid adding empty getters\n if (store._getters && store._getters.length) {\n state.getters = store._getters.map((getterName) => ({\n editable: false,\n key: getterName,\n value: store[getterName],\n }));\n }\n if (store._customProperties.size) {\n state.customProperties = Array.from(store._customProperties).map((key) => ({\n editable: true,\n key,\n value: store[key],\n }));\n }\n return state;\n}\nfunction formatEventData(events) {\n if (!events)\n return {};\n if (Array.isArray(events)) {\n // TODO: handle add and delete for arrays and objects\n return events.reduce((data, event) => {\n data.keys.push(event.key);\n data.operations.push(event.type);\n data.oldValue[event.key] = event.oldValue;\n data.newValue[event.key] = event.newValue;\n return data;\n }, {\n oldValue: {},\n keys: [],\n operations: [],\n newValue: {},\n });\n }\n else {\n return {\n operation: formatDisplay(events.type),\n key: formatDisplay(events.key),\n oldValue: events.oldValue,\n newValue: events.newValue,\n };\n }\n}\nfunction formatMutationType(type) {\n switch (type) {\n case MutationType.direct:\n return 'mutation';\n case MutationType.patchFunction:\n return '$patch';\n case MutationType.patchObject:\n return '$patch';\n default:\n return 'unknown';\n }\n}\n\n// timeline can be paused when directly changing the state\nlet isTimelineActive = true;\nconst componentStateTypes = [];\nconst MUTATIONS_LAYER_ID = 'pinia:mutations';\nconst INSPECTOR_ID = 'pinia';\nconst { assign: assign$1 } = Object;\n/**\n * Gets the displayed name of a store in devtools\n *\n * @param id - id of the store\n * @returns a formatted string\n */\nconst getStoreType = (id) => '🍍 ' + id;\n/**\n * Add the pinia plugin without any store. Allows displaying a Pinia plugin tab\n * as soon as it is added to the application.\n *\n * @param app - Vue application\n * @param pinia - pinia instance\n */\nfunction registerPiniaDevtools(app, pinia) {\n setupDevtoolsPlugin({\n id: 'dev.esm.pinia',\n label: 'Pinia 🍍',\n logo: 'https://pinia.vuejs.org/logo.svg',\n packageName: 'pinia',\n homepage: 'https://pinia.vuejs.org',\n componentStateTypes,\n app,\n }, (api) => {\n if (typeof api.now !== 'function') {\n toastMessage('You seem to be using an outdated version of Vue Devtools. Are you still using the Beta release instead of the stable one? You can find the links at https://devtools.vuejs.org/guide/installation.html.');\n }\n api.addTimelineLayer({\n id: MUTATIONS_LAYER_ID,\n label: `Pinia 🍍`,\n color: 0xe5df88,\n });\n api.addInspector({\n id: INSPECTOR_ID,\n label: 'Pinia 🍍',\n icon: 'storage',\n treeFilterPlaceholder: 'Search stores',\n actions: [\n {\n icon: 'content_copy',\n action: () => {\n actionGlobalCopyState(pinia);\n },\n tooltip: 'Serialize and copy the state',\n },\n {\n icon: 'content_paste',\n action: async () => {\n await actionGlobalPasteState(pinia);\n api.sendInspectorTree(INSPECTOR_ID);\n api.sendInspectorState(INSPECTOR_ID);\n },\n tooltip: 'Replace the state with the content of your clipboard',\n },\n {\n icon: 'save',\n action: () => {\n actionGlobalSaveState(pinia);\n },\n tooltip: 'Save the state as a JSON file',\n },\n {\n icon: 'folder_open',\n action: async () => {\n await actionGlobalOpenStateFile(pinia);\n api.sendInspectorTree(INSPECTOR_ID);\n api.sendInspectorState(INSPECTOR_ID);\n },\n tooltip: 'Import the state from a JSON file',\n },\n ],\n nodeActions: [\n {\n icon: 'restore',\n tooltip: 'Reset the state (with \"$reset\")',\n action: (nodeId) => {\n const store = pinia._s.get(nodeId);\n if (!store) {\n toastMessage(`Cannot reset \"${nodeId}\" store because it wasn't found.`, 'warn');\n }\n else if (typeof store.$reset !== 'function') {\n toastMessage(`Cannot reset \"${nodeId}\" store because it doesn't have a \"$reset\" method implemented.`, 'warn');\n }\n else {\n store.$reset();\n toastMessage(`Store \"${nodeId}\" reset.`);\n }\n },\n },\n ],\n });\n api.on.inspectComponent((payload, ctx) => {\n const proxy = (payload.componentInstance &&\n payload.componentInstance.proxy);\n if (proxy && proxy._pStores) {\n const piniaStores = payload.componentInstance.proxy._pStores;\n Object.values(piniaStores).forEach((store) => {\n payload.instanceData.state.push({\n type: getStoreType(store.$id),\n key: 'state',\n editable: true,\n value: store._isOptionsAPI\n ? {\n _custom: {\n value: toRaw(store.$state),\n actions: [\n {\n icon: 'restore',\n tooltip: 'Reset the state of this store',\n action: () => store.$reset(),\n },\n ],\n },\n }\n : // NOTE: workaround to unwrap transferred refs\n Object.keys(store.$state).reduce((state, key) => {\n state[key] = store.$state[key];\n return state;\n }, {}),\n });\n if (store._getters && store._getters.length) {\n payload.instanceData.state.push({\n type: getStoreType(store.$id),\n key: 'getters',\n editable: false,\n value: store._getters.reduce((getters, key) => {\n try {\n getters[key] = store[key];\n }\n catch (error) {\n // @ts-expect-error: we just want to show it in devtools\n getters[key] = error;\n }\n return getters;\n }, {}),\n });\n }\n });\n }\n });\n api.on.getInspectorTree((payload) => {\n if (payload.app === app && payload.inspectorId === INSPECTOR_ID) {\n let stores = [pinia];\n stores = stores.concat(Array.from(pinia._s.values()));\n payload.rootNodes = (payload.filter\n ? stores.filter((store) => '$id' in store\n ? store.$id\n .toLowerCase()\n .includes(payload.filter.toLowerCase())\n : PINIA_ROOT_LABEL.toLowerCase().includes(payload.filter.toLowerCase()))\n : stores).map(formatStoreForInspectorTree);\n }\n });\n // Expose pinia instance as $pinia to window\n globalThis.$pinia = pinia;\n api.on.getInspectorState((payload) => {\n if (payload.app === app && payload.inspectorId === INSPECTOR_ID) {\n const inspectedStore = payload.nodeId === PINIA_ROOT_ID\n ? pinia\n : pinia._s.get(payload.nodeId);\n if (!inspectedStore) {\n // this could be the selected store restored for a different project\n // so it's better not to say anything here\n return;\n }\n if (inspectedStore) {\n // Expose selected store as $store to window\n if (payload.nodeId !== PINIA_ROOT_ID)\n globalThis.$store = toRaw(inspectedStore);\n payload.state = formatStoreForInspectorState(inspectedStore);\n }\n }\n });\n api.on.editInspectorState((payload, ctx) => {\n if (payload.app === app && payload.inspectorId === INSPECTOR_ID) {\n const inspectedStore = payload.nodeId === PINIA_ROOT_ID\n ? pinia\n : pinia._s.get(payload.nodeId);\n if (!inspectedStore) {\n return toastMessage(`store \"${payload.nodeId}\" not found`, 'error');\n }\n const { path } = payload;\n if (!isPinia(inspectedStore)) {\n // access only the state\n if (path.length !== 1 ||\n !inspectedStore._customProperties.has(path[0]) ||\n path[0] in inspectedStore.$state) {\n path.unshift('$state');\n }\n }\n else {\n // Root access, we can omit the `.value` because the devtools API does it for us\n path.unshift('state');\n }\n isTimelineActive = false;\n payload.set(inspectedStore, path, payload.state.value);\n isTimelineActive = true;\n }\n });\n api.on.editComponentState((payload) => {\n if (payload.type.startsWith('🍍')) {\n const storeId = payload.type.replace(/^🍍\\s*/, '');\n const store = pinia._s.get(storeId);\n if (!store) {\n return toastMessage(`store \"${storeId}\" not found`, 'error');\n }\n const { path } = payload;\n if (path[0] !== 'state') {\n return toastMessage(`Invalid path for store \"${storeId}\":\\n${path}\\nOnly state can be modified.`);\n }\n // rewrite the first entry to be able to directly set the state as\n // well as any other path\n path[0] = '$state';\n isTimelineActive = false;\n payload.set(store, path, payload.state.value);\n isTimelineActive = true;\n }\n });\n });\n}\nfunction addStoreToDevtools(app, store) {\n if (!componentStateTypes.includes(getStoreType(store.$id))) {\n componentStateTypes.push(getStoreType(store.$id));\n }\n setupDevtoolsPlugin({\n id: 'dev.esm.pinia',\n label: 'Pinia 🍍',\n logo: 'https://pinia.vuejs.org/logo.svg',\n packageName: 'pinia',\n homepage: 'https://pinia.vuejs.org',\n componentStateTypes,\n app,\n settings: {\n logStoreChanges: {\n label: 'Notify about new/deleted stores',\n type: 'boolean',\n defaultValue: true,\n },\n // useEmojis: {\n // label: 'Use emojis in messages ⚡️',\n // type: 'boolean',\n // defaultValue: true,\n // },\n },\n }, (api) => {\n // gracefully handle errors\n const now = typeof api.now === 'function' ? api.now.bind(api) : Date.now;\n store.$onAction(({ after, onError, name, args }) => {\n const groupId = runningActionId++;\n api.addTimelineEvent({\n layerId: MUTATIONS_LAYER_ID,\n event: {\n time: now(),\n title: '🛫 ' + name,\n subtitle: 'start',\n data: {\n store: formatDisplay(store.$id),\n action: formatDisplay(name),\n args,\n },\n groupId,\n },\n });\n after((result) => {\n activeAction = undefined;\n api.addTimelineEvent({\n layerId: MUTATIONS_LAYER_ID,\n event: {\n time: now(),\n title: '🛬 ' + name,\n subtitle: 'end',\n data: {\n store: formatDisplay(store.$id),\n action: formatDisplay(name),\n args,\n result,\n },\n groupId,\n },\n });\n });\n onError((error) => {\n activeAction = undefined;\n api.addTimelineEvent({\n layerId: MUTATIONS_LAYER_ID,\n event: {\n time: now(),\n logType: 'error',\n title: '💥 ' + name,\n subtitle: 'end',\n data: {\n store: formatDisplay(store.$id),\n action: formatDisplay(name),\n args,\n error,\n },\n groupId,\n },\n });\n });\n }, true);\n store._customProperties.forEach((name) => {\n watch(() => unref(store[name]), (newValue, oldValue) => {\n api.notifyComponentUpdate();\n api.sendInspectorState(INSPECTOR_ID);\n if (isTimelineActive) {\n api.addTimelineEvent({\n layerId: MUTATIONS_LAYER_ID,\n event: {\n time: now(),\n title: 'Change',\n subtitle: name,\n data: {\n newValue,\n oldValue,\n },\n groupId: activeAction,\n },\n });\n }\n }, { deep: true });\n });\n store.$subscribe(({ events, type }, state) => {\n api.notifyComponentUpdate();\n api.sendInspectorState(INSPECTOR_ID);\n if (!isTimelineActive)\n return;\n // rootStore.state[store.id] = state\n const eventData = {\n time: now(),\n title: formatMutationType(type),\n data: assign$1({ store: formatDisplay(store.$id) }, formatEventData(events)),\n groupId: activeAction,\n };\n if (type === MutationType.patchFunction) {\n eventData.subtitle = '⤵️';\n }\n else if (type === MutationType.patchObject) {\n eventData.subtitle = '🧩';\n }\n else if (events && !Array.isArray(events)) {\n eventData.subtitle = events.type;\n }\n if (events) {\n eventData.data['rawEvent(s)'] = {\n _custom: {\n display: 'DebuggerEvent',\n type: 'object',\n tooltip: 'raw DebuggerEvent[]',\n value: events,\n },\n };\n }\n api.addTimelineEvent({\n layerId: MUTATIONS_LAYER_ID,\n event: eventData,\n });\n }, { detached: true, flush: 'sync' });\n const hotUpdate = store._hotUpdate;\n store._hotUpdate = markRaw((newStore) => {\n hotUpdate(newStore);\n api.addTimelineEvent({\n layerId: MUTATIONS_LAYER_ID,\n event: {\n time: now(),\n title: '🔥 ' + store.$id,\n subtitle: 'HMR update',\n data: {\n store: formatDisplay(store.$id),\n info: formatDisplay(`HMR update`),\n },\n },\n });\n // update the devtools too\n api.notifyComponentUpdate();\n api.sendInspectorTree(INSPECTOR_ID);\n api.sendInspectorState(INSPECTOR_ID);\n });\n const { $dispose } = store;\n store.$dispose = () => {\n $dispose();\n api.notifyComponentUpdate();\n api.sendInspectorTree(INSPECTOR_ID);\n api.sendInspectorState(INSPECTOR_ID);\n api.getSettings().logStoreChanges &&\n toastMessage(`Disposed \"${store.$id}\" store 🗑`);\n };\n // trigger an update so it can display new registered stores\n api.notifyComponentUpdate();\n api.sendInspectorTree(INSPECTOR_ID);\n api.sendInspectorState(INSPECTOR_ID);\n api.getSettings().logStoreChanges &&\n toastMessage(`\"${store.$id}\" store installed 🆕`);\n });\n}\nlet runningActionId = 0;\nlet activeAction;\n/**\n * Patches a store to enable action grouping in devtools by wrapping the store with a Proxy that is passed as the\n * context of all actions, allowing us to set `runningAction` on each access and effectively associating any state\n * mutation to the action.\n *\n * @param store - store to patch\n * @param actionNames - list of actionst to patch\n */\nfunction patchActionForGrouping(store, actionNames, wrapWithProxy) {\n // original actions of the store as they are given by pinia. We are going to override them\n const actions = actionNames.reduce((storeActions, actionName) => {\n // use toRaw to avoid tracking #541\n storeActions[actionName] = toRaw(store)[actionName];\n return storeActions;\n }, {});\n for (const actionName in actions) {\n store[actionName] = function () {\n // the running action id is incremented in a before action hook\n const _actionId = runningActionId;\n const trackedStore = wrapWithProxy\n ? new Proxy(store, {\n get(...args) {\n activeAction = _actionId;\n return Reflect.get(...args);\n },\n set(...args) {\n activeAction = _actionId;\n return Reflect.set(...args);\n },\n })\n : store;\n // For Setup Stores we need https://github.com/tc39/proposal-async-context\n activeAction = _actionId;\n const retValue = actions[actionName].apply(trackedStore, arguments);\n // this is safer as async actions in Setup Stores would associate mutations done outside of the action\n activeAction = undefined;\n return retValue;\n };\n }\n}\n/**\n * pinia.use(devtoolsPlugin)\n */\nfunction devtoolsPlugin({ app, store, options }) {\n // HMR module\n if (store.$id.startsWith('__hot:')) {\n return;\n }\n // detect option api vs setup api\n store._isOptionsAPI = !!options.state;\n // Do not overwrite actions mocked by @pinia/testing (#2298)\n if (!store._p._testing) {\n patchActionForGrouping(store, Object.keys(options.actions), store._isOptionsAPI);\n // Upgrade the HMR to also update the new actions\n const originalHotUpdate = store._hotUpdate;\n toRaw(store)._hotUpdate = function (newStore) {\n originalHotUpdate.apply(this, arguments);\n patchActionForGrouping(store, Object.keys(newStore._hmrPayload.actions), !!store._isOptionsAPI);\n };\n }\n addStoreToDevtools(app, \n // FIXME: is there a way to allow the assignment from Store to StoreGeneric?\n store);\n}\n\n/**\n * Creates a Pinia instance to be used by the application\n */\nfunction createPinia() {\n const scope = effectScope(true);\n // NOTE: here we could check the window object for a state and directly set it\n // if there is anything like it with Vue 3 SSR\n const state = scope.run(() => ref({}));\n let _p = [];\n // plugins added before calling app.use(pinia)\n let toBeInstalled = [];\n const pinia = markRaw({\n install(app) {\n // this allows calling useStore() outside of a component setup after\n // installing pinia's plugin\n setActivePinia(pinia);\n if (!isVue2) {\n pinia._a = app;\n app.provide(piniaSymbol, pinia);\n app.config.globalProperties.$pinia = pinia;\n /* istanbul ignore else */\n if ((((process.env.NODE_ENV !== 'production') || (typeof __VUE_PROD_DEVTOOLS__ !== 'undefined' && __VUE_PROD_DEVTOOLS__)) && !(process.env.NODE_ENV === 'test')) && IS_CLIENT) {\n registerPiniaDevtools(app, pinia);\n }\n toBeInstalled.forEach((plugin) => _p.push(plugin));\n toBeInstalled = [];\n }\n },\n use(plugin) {\n if (!this._a && !isVue2) {\n toBeInstalled.push(plugin);\n }\n else {\n _p.push(plugin);\n }\n return this;\n },\n _p,\n // it's actually undefined here\n // @ts-expect-error\n _a: null,\n _e: scope,\n _s: new Map(),\n state,\n });\n // pinia devtools rely on dev only features so they cannot be forced unless\n // the dev build of Vue is used. Avoid old browsers like IE11.\n if ((((process.env.NODE_ENV !== 'production') || (typeof __VUE_PROD_DEVTOOLS__ !== 'undefined' && __VUE_PROD_DEVTOOLS__)) && !(process.env.NODE_ENV === 'test')) && IS_CLIENT && typeof Proxy !== 'undefined') {\n pinia.use(devtoolsPlugin);\n }\n return pinia;\n}\n/**\n * Dispose a Pinia instance by stopping its effectScope and removing the state, plugins and stores. This is mostly\n * useful in tests, with both a testing pinia or a regular pinia and in applications that use multiple pinia instances.\n * Once disposed, the pinia instance cannot be used anymore.\n *\n * @param pinia - pinia instance\n */\nfunction disposePinia(pinia) {\n pinia._e.stop();\n pinia._s.clear();\n pinia._p.splice(0);\n pinia.state.value = {};\n // @ts-expect-error: non valid\n pinia._a = null;\n}\n\n/**\n * Checks if a function is a `StoreDefinition`.\n *\n * @param fn - object to test\n * @returns true if `fn` is a StoreDefinition\n */\nconst isUseStore = (fn) => {\n return typeof fn === 'function' && typeof fn.$id === 'string';\n};\n/**\n * Mutates in place `newState` with `oldState` to _hot update_ it. It will\n * remove any key not existing in `newState` and recursively merge plain\n * objects.\n *\n * @param newState - new state object to be patched\n * @param oldState - old state that should be used to patch newState\n * @returns - newState\n */\nfunction patchObject(newState, oldState) {\n // no need to go through symbols because they cannot be serialized anyway\n for (const key in oldState) {\n const subPatch = oldState[key];\n // skip the whole sub tree\n if (!(key in newState)) {\n continue;\n }\n const targetValue = newState[key];\n if (isPlainObject(targetValue) &&\n isPlainObject(subPatch) &&\n !isRef(subPatch) &&\n !isReactive(subPatch)) {\n newState[key] = patchObject(targetValue, subPatch);\n }\n else {\n // objects are either a bit more complex (e.g. refs) or primitives, so we\n // just set the whole thing\n if (isVue2) {\n set(newState, key, subPatch);\n }\n else {\n newState[key] = subPatch;\n }\n }\n }\n return newState;\n}\n/**\n * Creates an _accept_ function to pass to `import.meta.hot` in Vite applications.\n *\n * @example\n * ```js\n * const useUser = defineStore(...)\n * if (import.meta.hot) {\n * import.meta.hot.accept(acceptHMRUpdate(useUser, import.meta.hot))\n * }\n * ```\n *\n * @param initialUseStore - return of the defineStore to hot update\n * @param hot - `import.meta.hot`\n */\nfunction acceptHMRUpdate(initialUseStore, hot) {\n // strip as much as possible from iife.prod\n if (!(process.env.NODE_ENV !== 'production')) {\n return () => { };\n }\n return (newModule) => {\n const pinia = hot.data.pinia || initialUseStore._pinia;\n if (!pinia) {\n // this store is still not used\n return;\n }\n // preserve the pinia instance across loads\n hot.data.pinia = pinia;\n // console.log('got data', newStore)\n for (const exportName in newModule) {\n const useStore = newModule[exportName];\n // console.log('checking for', exportName)\n if (isUseStore(useStore) && pinia._s.has(useStore.$id)) {\n // console.log('Accepting update for', useStore.$id)\n const id = useStore.$id;\n if (id !== initialUseStore.$id) {\n console.warn(`The id of the store changed from \"${initialUseStore.$id}\" to \"${id}\". Reloading.`);\n // return import.meta.hot.invalidate()\n return hot.invalidate();\n }\n const existingStore = pinia._s.get(id);\n if (!existingStore) {\n console.log(`[Pinia]: skipping hmr because store doesn't exist yet`);\n return;\n }\n useStore(pinia, existingStore);\n }\n }\n };\n}\n\nconst noop = () => { };\nfunction addSubscription(subscriptions, callback, detached, onCleanup = noop) {\n subscriptions.push(callback);\n const removeSubscription = () => {\n const idx = subscriptions.indexOf(callback);\n if (idx > -1) {\n subscriptions.splice(idx, 1);\n onCleanup();\n }\n };\n if (!detached && getCurrentScope()) {\n onScopeDispose(removeSubscription);\n }\n return removeSubscription;\n}\nfunction triggerSubscriptions(subscriptions, ...args) {\n subscriptions.slice().forEach((callback) => {\n callback(...args);\n });\n}\n\nconst fallbackRunWithContext = (fn) => fn();\n/**\n * Marks a function as an action for `$onAction`\n * @internal\n */\nconst ACTION_MARKER = Symbol();\n/**\n * Action name symbol. Allows to add a name to an action after defining it\n * @internal\n */\nconst ACTION_NAME = Symbol();\nfunction mergeReactiveObjects(target, patchToApply) {\n // Handle Map instances\n if (target instanceof Map && patchToApply instanceof Map) {\n patchToApply.forEach((value, key) => target.set(key, value));\n }\n else if (target instanceof Set && patchToApply instanceof Set) {\n // Handle Set instances\n patchToApply.forEach(target.add, target);\n }\n // no need to go through symbols because they cannot be serialized anyway\n for (const key in patchToApply) {\n if (!patchToApply.hasOwnProperty(key))\n continue;\n const subPatch = patchToApply[key];\n const targetValue = target[key];\n if (isPlainObject(targetValue) &&\n isPlainObject(subPatch) &&\n target.hasOwnProperty(key) &&\n !isRef(subPatch) &&\n !isReactive(subPatch)) {\n // NOTE: here I wanted to warn about inconsistent types but it's not possible because in setup stores one might\n // start the value of a property as a certain type e.g. a Map, and then for some reason, during SSR, change that\n // to `undefined`. When trying to hydrate, we want to override the Map with `undefined`.\n target[key] = mergeReactiveObjects(targetValue, subPatch);\n }\n else {\n // @ts-expect-error: subPatch is a valid value\n target[key] = subPatch;\n }\n }\n return target;\n}\nconst skipHydrateSymbol = (process.env.NODE_ENV !== 'production')\n ? Symbol('pinia:skipHydration')\n : /* istanbul ignore next */ Symbol();\n/**\n * Tells Pinia to skip the hydration process of a given object. This is useful in setup stores (only) when you return a\n * stateful object in the store but it isn't really state. e.g. returning a router instance in a setup store.\n *\n * @param obj - target object\n * @returns obj\n */\nfunction skipHydrate(obj) {\n return Object.defineProperty(obj, skipHydrateSymbol, {});\n}\n/**\n * Returns whether a value should be hydrated\n *\n * @param obj - target variable\n * @returns true if `obj` should be hydrated\n */\nfunction shouldHydrate(obj) {\n return !isPlainObject(obj) || !obj.hasOwnProperty(skipHydrateSymbol);\n}\nconst { assign } = Object;\nfunction isComputed(o) {\n return !!(isRef(o) && o.effect);\n}\nfunction createOptionsStore(id, options, pinia, hot) {\n const { state, actions, getters } = options;\n const initialState = pinia.state.value[id];\n let store;\n function setup() {\n if (!initialState && (!(process.env.NODE_ENV !== 'production') || !hot)) {\n /* istanbul ignore if */\n if (isVue2) {\n set(pinia.state.value, id, state ? state() : {});\n }\n else {\n pinia.state.value[id] = state ? state() : {};\n }\n }\n // avoid creating a state in pinia.state.value\n const localState = (process.env.NODE_ENV !== 'production') && hot\n ? // use ref() to unwrap refs inside state TODO: check if this is still necessary\n toRefs(ref(state ? state() : {}).value)\n : toRefs(pinia.state.value[id]);\n return assign(localState, actions, Object.keys(getters || {}).reduce((computedGetters, name) => {\n if ((process.env.NODE_ENV !== 'production') && name in localState) {\n console.warn(`[🍍]: A getter cannot have the same name as another state property. Rename one of them. Found with \"${name}\" in store \"${id}\".`);\n }\n computedGetters[name] = markRaw(computed(() => {\n setActivePinia(pinia);\n // it was created just before\n const store = pinia._s.get(id);\n // allow cross using stores\n /* istanbul ignore if */\n if (isVue2 && !store._r)\n return;\n // @ts-expect-error\n // return getters![name].call(context, context)\n // TODO: avoid reading the getter while assigning with a global variable\n return getters[name].call(store, store);\n }));\n return computedGetters;\n }, {}));\n }\n store = createSetupStore(id, setup, options, pinia, hot, true);\n return store;\n}\nfunction createSetupStore($id, setup, options = {}, pinia, hot, isOptionsStore) {\n let scope;\n const optionsForPlugin = assign({ actions: {} }, options);\n /* istanbul ignore if */\n if ((process.env.NODE_ENV !== 'production') && !pinia._e.active) {\n throw new Error('Pinia destroyed');\n }\n // watcher options for $subscribe\n const $subscribeOptions = { deep: true };\n /* istanbul ignore else */\n if ((process.env.NODE_ENV !== 'production') && !isVue2) {\n $subscribeOptions.onTrigger = (event) => {\n /* istanbul ignore else */\n if (isListening) {\n debuggerEvents = event;\n // avoid triggering this while the store is being built and the state is being set in pinia\n }\n else if (isListening == false && !store._hotUpdating) {\n // let patch send all the events together later\n /* istanbul ignore else */\n if (Array.isArray(debuggerEvents)) {\n debuggerEvents.push(event);\n }\n else {\n console.error('🍍 debuggerEvents should be an array. This is most likely an internal Pinia bug.');\n }\n }\n };\n }\n // internal state\n let isListening; // set to true at the end\n let isSyncListening; // set to true at the end\n let subscriptions = [];\n let actionSubscriptions = [];\n let debuggerEvents;\n const initialState = pinia.state.value[$id];\n // avoid setting the state for option stores if it is set\n // by the setup\n if (!isOptionsStore && !initialState && (!(process.env.NODE_ENV !== 'production') || !hot)) {\n /* istanbul ignore if */\n if (isVue2) {\n set(pinia.state.value, $id, {});\n }\n else {\n pinia.state.value[$id] = {};\n }\n }\n const hotState = ref({});\n // avoid triggering too many listeners\n // https://github.com/vuejs/pinia/issues/1129\n let activeListener;\n function $patch(partialStateOrMutator) {\n let subscriptionMutation;\n isListening = isSyncListening = false;\n // reset the debugger events since patches are sync\n /* istanbul ignore else */\n if ((process.env.NODE_ENV !== 'production')) {\n debuggerEvents = [];\n }\n if (typeof partialStateOrMutator === 'function') {\n partialStateOrMutator(pinia.state.value[$id]);\n subscriptionMutation = {\n type: MutationType.patchFunction,\n storeId: $id,\n events: debuggerEvents,\n };\n }\n else {\n mergeReactiveObjects(pinia.state.value[$id], partialStateOrMutator);\n subscriptionMutation = {\n type: MutationType.patchObject,\n payload: partialStateOrMutator,\n storeId: $id,\n events: debuggerEvents,\n };\n }\n const myListenerId = (activeListener = Symbol());\n nextTick().then(() => {\n if (activeListener === myListenerId) {\n isListening = true;\n }\n });\n isSyncListening = true;\n // because we paused the watcher, we need to manually call the subscriptions\n triggerSubscriptions(subscriptions, subscriptionMutation, pinia.state.value[$id]);\n }\n const $reset = isOptionsStore\n ? function $reset() {\n const { state } = options;\n const newState = state ? state() : {};\n // we use a patch to group all changes into one single subscription\n this.$patch(($state) => {\n // @ts-expect-error: FIXME: shouldn't error?\n assign($state, newState);\n });\n }\n : /* istanbul ignore next */\n (process.env.NODE_ENV !== 'production')\n ? () => {\n throw new Error(`🍍: Store \"${$id}\" is built using the setup syntax and does not implement $reset().`);\n }\n : noop;\n function $dispose() {\n scope.stop();\n subscriptions = [];\n actionSubscriptions = [];\n pinia._s.delete($id);\n }\n /**\n * Helper that wraps function so it can be tracked with $onAction\n * @param fn - action to wrap\n * @param name - name of the action\n */\n const action = (fn, name = '') => {\n if (ACTION_MARKER in fn) {\n fn[ACTION_NAME] = name;\n return fn;\n }\n const wrappedAction = function () {\n setActivePinia(pinia);\n const args = Array.from(arguments);\n const afterCallbackList = [];\n const onErrorCallbackList = [];\n function after(callback) {\n afterCallbackList.push(callback);\n }\n function onError(callback) {\n onErrorCallbackList.push(callback);\n }\n // @ts-expect-error\n triggerSubscriptions(actionSubscriptions, {\n args,\n name: wrappedAction[ACTION_NAME],\n store,\n after,\n onError,\n });\n let ret;\n try {\n ret = fn.apply(this && this.$id === $id ? this : store, args);\n // handle sync errors\n }\n catch (error) {\n triggerSubscriptions(onErrorCallbackList, error);\n throw error;\n }\n if (ret instanceof Promise) {\n return ret\n .then((value) => {\n triggerSubscriptions(afterCallbackList, value);\n return value;\n })\n .catch((error) => {\n triggerSubscriptions(onErrorCallbackList, error);\n return Promise.reject(error);\n });\n }\n // trigger after callbacks\n triggerSubscriptions(afterCallbackList, ret);\n return ret;\n };\n wrappedAction[ACTION_MARKER] = true;\n wrappedAction[ACTION_NAME] = name; // will be set later\n // @ts-expect-error: we are intentionally limiting the returned type to just Fn\n // because all the added properties are internals that are exposed through `$onAction()` only\n return wrappedAction;\n };\n const _hmrPayload = /*#__PURE__*/ markRaw({\n actions: {},\n getters: {},\n state: [],\n hotState,\n });\n const partialStore = {\n _p: pinia,\n // _s: scope,\n $id,\n $onAction: addSubscription.bind(null, actionSubscriptions),\n $patch,\n $reset,\n $subscribe(callback, options = {}) {\n const removeSubscription = addSubscription(subscriptions, callback, options.detached, () => stopWatcher());\n const stopWatcher = scope.run(() => watch(() => pinia.state.value[$id], (state) => {\n if (options.flush === 'sync' ? isSyncListening : isListening) {\n callback({\n storeId: $id,\n type: MutationType.direct,\n events: debuggerEvents,\n }, state);\n }\n }, assign({}, $subscribeOptions, options)));\n return removeSubscription;\n },\n $dispose,\n };\n /* istanbul ignore if */\n if (isVue2) {\n // start as non ready\n partialStore._r = false;\n }\n const store = reactive((process.env.NODE_ENV !== 'production') || ((((process.env.NODE_ENV !== 'production') || (typeof __VUE_PROD_DEVTOOLS__ !== 'undefined' && __VUE_PROD_DEVTOOLS__)) && !(process.env.NODE_ENV === 'test')) && IS_CLIENT)\n ? assign({\n _hmrPayload,\n _customProperties: markRaw(new Set()), // devtools custom properties\n }, partialStore\n // must be added later\n // setupStore\n )\n : partialStore);\n // store the partial store now so the setup of stores can instantiate each other before they are finished without\n // creating infinite loops.\n pinia._s.set($id, store);\n const runWithContext = (pinia._a && pinia._a.runWithContext) || fallbackRunWithContext;\n // TODO: idea create skipSerialize that marks properties as non serializable and they are skipped\n const setupStore = runWithContext(() => pinia._e.run(() => (scope = effectScope()).run(() => setup({ action }))));\n // overwrite existing actions to support $onAction\n for (const key in setupStore) {\n const prop = setupStore[key];\n if ((isRef(prop) && !isComputed(prop)) || isReactive(prop)) {\n // mark it as a piece of state to be serialized\n if ((process.env.NODE_ENV !== 'production') && hot) {\n set(hotState.value, key, toRef(setupStore, key));\n // createOptionStore directly sets the state in pinia.state.value so we\n // can just skip that\n }\n else if (!isOptionsStore) {\n // in setup stores we must hydrate the state and sync pinia state tree with the refs the user just created\n if (initialState && shouldHydrate(prop)) {\n if (isRef(prop)) {\n prop.value = initialState[key];\n }\n else {\n // probably a reactive object, lets recursively assign\n // @ts-expect-error: prop is unknown\n mergeReactiveObjects(prop, initialState[key]);\n }\n }\n // transfer the ref to the pinia state to keep everything in sync\n /* istanbul ignore if */\n if (isVue2) {\n set(pinia.state.value[$id], key, prop);\n }\n else {\n pinia.state.value[$id][key] = prop;\n }\n }\n /* istanbul ignore else */\n if ((process.env.NODE_ENV !== 'production')) {\n _hmrPayload.state.push(key);\n }\n // action\n }\n else if (typeof prop === 'function') {\n const actionValue = (process.env.NODE_ENV !== 'production') && hot ? prop : action(prop, key);\n // this a hot module replacement store because the hotUpdate method needs\n // to do it with the right context\n /* istanbul ignore if */\n if (isVue2) {\n set(setupStore, key, actionValue);\n }\n else {\n // @ts-expect-error\n setupStore[key] = actionValue;\n }\n /* istanbul ignore else */\n if ((process.env.NODE_ENV !== 'production')) {\n _hmrPayload.actions[key] = prop;\n }\n // list actions so they can be used in plugins\n // @ts-expect-error\n optionsForPlugin.actions[key] = prop;\n }\n else if ((process.env.NODE_ENV !== 'production')) {\n // add getters for devtools\n if (isComputed(prop)) {\n _hmrPayload.getters[key] = isOptionsStore\n ? // @ts-expect-error\n options.getters[key]\n : prop;\n if (IS_CLIENT) {\n const getters = setupStore._getters ||\n // @ts-expect-error: same\n (setupStore._getters = markRaw([]));\n getters.push(key);\n }\n }\n }\n }\n // add the state, getters, and action properties\n /* istanbul ignore if */\n if (isVue2) {\n Object.keys(setupStore).forEach((key) => {\n set(store, key, setupStore[key]);\n });\n }\n else {\n assign(store, setupStore);\n // allows retrieving reactive objects with `storeToRefs()`. Must be called after assigning to the reactive object.\n // Make `storeToRefs()` work with `reactive()` #799\n assign(toRaw(store), setupStore);\n }\n // use this instead of a computed with setter to be able to create it anywhere\n // without linking the computed lifespan to wherever the store is first\n // created.\n Object.defineProperty(store, '$state', {\n get: () => ((process.env.NODE_ENV !== 'production') && hot ? hotState.value : pinia.state.value[$id]),\n set: (state) => {\n /* istanbul ignore if */\n if ((process.env.NODE_ENV !== 'production') && hot) {\n throw new Error('cannot set hotState');\n }\n $patch(($state) => {\n // @ts-expect-error: FIXME: shouldn't error?\n assign($state, state);\n });\n },\n });\n // add the hotUpdate before plugins to allow them to override it\n /* istanbul ignore else */\n if ((process.env.NODE_ENV !== 'production')) {\n store._hotUpdate = markRaw((newStore) => {\n store._hotUpdating = true;\n newStore._hmrPayload.state.forEach((stateKey) => {\n if (stateKey in store.$state) {\n const newStateTarget = newStore.$state[stateKey];\n const oldStateSource = store.$state[stateKey];\n if (typeof newStateTarget === 'object' &&\n isPlainObject(newStateTarget) &&\n isPlainObject(oldStateSource)) {\n patchObject(newStateTarget, oldStateSource);\n }\n else {\n // transfer the ref\n newStore.$state[stateKey] = oldStateSource;\n }\n }\n // patch direct access properties to allow store.stateProperty to work as\n // store.$state.stateProperty\n set(store, stateKey, toRef(newStore.$state, stateKey));\n });\n // remove deleted state properties\n Object.keys(store.$state).forEach((stateKey) => {\n if (!(stateKey in newStore.$state)) {\n del(store, stateKey);\n }\n });\n // avoid devtools logging this as a mutation\n isListening = false;\n isSyncListening = false;\n pinia.state.value[$id] = toRef(newStore._hmrPayload, 'hotState');\n isSyncListening = true;\n nextTick().then(() => {\n isListening = true;\n });\n for (const actionName in newStore._hmrPayload.actions) {\n const actionFn = newStore[actionName];\n set(store, actionName, action(actionFn, actionName));\n }\n // TODO: does this work in both setup and option store?\n for (const getterName in newStore._hmrPayload.getters) {\n const getter = newStore._hmrPayload.getters[getterName];\n const getterValue = isOptionsStore\n ? // special handling of options api\n computed(() => {\n setActivePinia(pinia);\n return getter.call(store, store);\n })\n : getter;\n set(store, getterName, getterValue);\n }\n // remove deleted getters\n Object.keys(store._hmrPayload.getters).forEach((key) => {\n if (!(key in newStore._hmrPayload.getters)) {\n del(store, key);\n }\n });\n // remove old actions\n Object.keys(store._hmrPayload.actions).forEach((key) => {\n if (!(key in newStore._hmrPayload.actions)) {\n del(store, key);\n }\n });\n // update the values used in devtools and to allow deleting new properties later on\n store._hmrPayload = newStore._hmrPayload;\n store._getters = newStore._getters;\n store._hotUpdating = false;\n });\n }\n if ((((process.env.NODE_ENV !== 'production') || (typeof __VUE_PROD_DEVTOOLS__ !== 'undefined' && __VUE_PROD_DEVTOOLS__)) && !(process.env.NODE_ENV === 'test')) && IS_CLIENT) {\n const nonEnumerable = {\n writable: true,\n configurable: true,\n // avoid warning on devtools trying to display this property\n enumerable: false,\n };\n ['_p', '_hmrPayload', '_getters', '_customProperties'].forEach((p) => {\n Object.defineProperty(store, p, assign({ value: store[p] }, nonEnumerable));\n });\n }\n /* istanbul ignore if */\n if (isVue2) {\n // mark the store as ready before plugins\n store._r = true;\n }\n // apply all plugins\n pinia._p.forEach((extender) => {\n /* istanbul ignore else */\n if ((((process.env.NODE_ENV !== 'production') || (typeof __VUE_PROD_DEVTOOLS__ !== 'undefined' && __VUE_PROD_DEVTOOLS__)) && !(process.env.NODE_ENV === 'test')) && IS_CLIENT) {\n const extensions = scope.run(() => extender({\n store: store,\n app: pinia._a,\n pinia,\n options: optionsForPlugin,\n }));\n Object.keys(extensions || {}).forEach((key) => store._customProperties.add(key));\n assign(store, extensions);\n }\n else {\n assign(store, scope.run(() => extender({\n store: store,\n app: pinia._a,\n pinia,\n options: optionsForPlugin,\n })));\n }\n });\n if ((process.env.NODE_ENV !== 'production') &&\n store.$state &&\n typeof store.$state === 'object' &&\n typeof store.$state.constructor === 'function' &&\n !store.$state.constructor.toString().includes('[native code]')) {\n console.warn(`[🍍]: The \"state\" must be a plain object. It cannot be\\n` +\n `\\tstate: () => new MyClass()\\n` +\n `Found in store \"${store.$id}\".`);\n }\n // only apply hydrate to option stores with an initial state in pinia\n if (initialState &&\n isOptionsStore &&\n options.hydrate) {\n options.hydrate(store.$state, initialState);\n }\n isListening = true;\n isSyncListening = true;\n return store;\n}\n// allows unused stores to be tree shaken\n/*! #__NO_SIDE_EFFECTS__ */\nfunction defineStore(\n// TODO: add proper types from above\nidOrOptions, setup, setupOptions) {\n let id;\n let options;\n const isSetupStore = typeof setup === 'function';\n if (typeof idOrOptions === 'string') {\n id = idOrOptions;\n // the option store setup will contain the actual options in this case\n options = isSetupStore ? setupOptions : setup;\n }\n else {\n options = idOrOptions;\n id = idOrOptions.id;\n if ((process.env.NODE_ENV !== 'production') && typeof id !== 'string') {\n throw new Error(`[🍍]: \"defineStore()\" must be passed a store id as its first argument.`);\n }\n }\n function useStore(pinia, hot) {\n const hasContext = hasInjectionContext();\n pinia =\n // in test mode, ignore the argument provided as we can always retrieve a\n // pinia instance with getActivePinia()\n ((process.env.NODE_ENV === 'test') && activePinia && activePinia._testing ? null : pinia) ||\n (hasContext ? inject(piniaSymbol, null) : null);\n if (pinia)\n setActivePinia(pinia);\n if ((process.env.NODE_ENV !== 'production') && !activePinia) {\n throw new Error(`[🍍]: \"getActivePinia()\" was called but there was no active Pinia. Are you trying to use a store before calling \"app.use(pinia)\"?\\n` +\n `See https://pinia.vuejs.org/core-concepts/outside-component-usage.html for help.\\n` +\n `This will fail in production.`);\n }\n pinia = activePinia;\n if (!pinia._s.has(id)) {\n // creating the store registers it in `pinia._s`\n if (isSetupStore) {\n createSetupStore(id, setup, options, pinia);\n }\n else {\n createOptionsStore(id, options, pinia);\n }\n /* istanbul ignore else */\n if ((process.env.NODE_ENV !== 'production')) {\n // @ts-expect-error: not the right inferred type\n useStore._pinia = pinia;\n }\n }\n const store = pinia._s.get(id);\n if ((process.env.NODE_ENV !== 'production') && hot) {\n const hotId = '__hot:' + id;\n const newStore = isSetupStore\n ? createSetupStore(hotId, setup, options, pinia, true)\n : createOptionsStore(hotId, assign({}, options), pinia, true);\n hot._hotUpdate(newStore);\n // cleanup the state properties and the store from the cache\n delete pinia.state.value[hotId];\n pinia._s.delete(hotId);\n }\n if ((process.env.NODE_ENV !== 'production') && IS_CLIENT) {\n const currentInstance = getCurrentInstance();\n // save stores in instances to access them devtools\n if (currentInstance &&\n currentInstance.proxy &&\n // avoid adding stores that are just built for hot module replacement\n !hot) {\n const vm = currentInstance.proxy;\n const cache = '_pStores' in vm ? vm._pStores : (vm._pStores = {});\n cache[id] = store;\n }\n }\n // StoreGeneric cannot be casted towards Store\n return store;\n }\n useStore.$id = id;\n return useStore;\n}\n\nlet mapStoreSuffix = 'Store';\n/**\n * Changes the suffix added by `mapStores()`. Can be set to an empty string.\n * Defaults to `\"Store\"`. Make sure to extend the MapStoresCustomization\n * interface if you are using TypeScript.\n *\n * @param suffix - new suffix\n */\nfunction setMapStoreSuffix(suffix // could be 'Store' but that would be annoying for JS\n) {\n mapStoreSuffix = suffix;\n}\n/**\n * Allows using stores without the composition API (`setup()`) by generating an\n * object to be spread in the `computed` field of a component. It accepts a list\n * of store definitions.\n *\n * @example\n * ```js\n * export default {\n * computed: {\n * // other computed properties\n * ...mapStores(useUserStore, useCartStore)\n * },\n *\n * created() {\n * this.userStore // store with id \"user\"\n * this.cartStore // store with id \"cart\"\n * }\n * }\n * ```\n *\n * @param stores - list of stores to map to an object\n */\nfunction mapStores(...stores) {\n if ((process.env.NODE_ENV !== 'production') && Array.isArray(stores[0])) {\n console.warn(`[🍍]: Directly pass all stores to \"mapStores()\" without putting them in an array:\\n` +\n `Replace\\n` +\n `\\tmapStores([useAuthStore, useCartStore])\\n` +\n `with\\n` +\n `\\tmapStores(useAuthStore, useCartStore)\\n` +\n `This will fail in production if not fixed.`);\n stores = stores[0];\n }\n return stores.reduce((reduced, useStore) => {\n // @ts-expect-error: $id is added by defineStore\n reduced[useStore.$id + mapStoreSuffix] = function () {\n return useStore(this.$pinia);\n };\n return reduced;\n }, {});\n}\n/**\n * Allows using state and getters from one store without using the composition\n * API (`setup()`) by generating an object to be spread in the `computed` field\n * of a component.\n *\n * @param useStore - store to map from\n * @param keysOrMapper - array or object\n */\nfunction mapState(useStore, keysOrMapper) {\n return Array.isArray(keysOrMapper)\n ? keysOrMapper.reduce((reduced, key) => {\n reduced[key] = function () {\n // @ts-expect-error: FIXME: should work?\n return useStore(this.$pinia)[key];\n };\n return reduced;\n }, {})\n : Object.keys(keysOrMapper).reduce((reduced, key) => {\n // @ts-expect-error\n reduced[key] = function () {\n const store = useStore(this.$pinia);\n const storeKey = keysOrMapper[key];\n // for some reason TS is unable to infer the type of storeKey to be a\n // function\n return typeof storeKey === 'function'\n ? storeKey.call(this, store)\n : // @ts-expect-error: FIXME: should work?\n store[storeKey];\n };\n return reduced;\n }, {});\n}\n/**\n * Alias for `mapState()`. You should use `mapState()` instead.\n * @deprecated use `mapState()` instead.\n */\nconst mapGetters = mapState;\n/**\n * Allows directly using actions from your store without using the composition\n * API (`setup()`) by generating an object to be spread in the `methods` field\n * of a component.\n *\n * @param useStore - store to map from\n * @param keysOrMapper - array or object\n */\nfunction mapActions(useStore, keysOrMapper) {\n return Array.isArray(keysOrMapper)\n ? keysOrMapper.reduce((reduced, key) => {\n // @ts-expect-error\n reduced[key] = function (...args) {\n // @ts-expect-error: FIXME: should work?\n return useStore(this.$pinia)[key](...args);\n };\n return reduced;\n }, {})\n : Object.keys(keysOrMapper).reduce((reduced, key) => {\n // @ts-expect-error\n reduced[key] = function (...args) {\n // @ts-expect-error: FIXME: should work?\n return useStore(this.$pinia)[keysOrMapper[key]](...args);\n };\n return reduced;\n }, {});\n}\n/**\n * Allows using state and getters from one store without using the composition\n * API (`setup()`) by generating an object to be spread in the `computed` field\n * of a component.\n *\n * @param useStore - store to map from\n * @param keysOrMapper - array or object\n */\nfunction mapWritableState(useStore, keysOrMapper) {\n return Array.isArray(keysOrMapper)\n ? keysOrMapper.reduce((reduced, key) => {\n reduced[key] = {\n get() {\n return useStore(this.$pinia)[key];\n },\n set(value) {\n return (useStore(this.$pinia)[key] = value);\n },\n };\n return reduced;\n }, {})\n : Object.keys(keysOrMapper).reduce((reduced, key) => {\n reduced[key] = {\n get() {\n return useStore(this.$pinia)[keysOrMapper[key]];\n },\n set(value) {\n return (useStore(this.$pinia)[keysOrMapper[key]] = value);\n },\n };\n return reduced;\n }, {});\n}\n\n/**\n * Creates an object of references with all the state, getters, and plugin-added\n * state properties of the store. Similar to `toRefs()` but specifically\n * designed for Pinia stores so methods and non reactive properties are\n * completely ignored.\n *\n * @param store - store to extract the refs from\n */\nfunction storeToRefs(store) {\n // See https://github.com/vuejs/pinia/issues/852\n // It's easier to just use toRefs() even if it includes more stuff\n if (isVue2) {\n // @ts-expect-error: toRefs include methods and others\n return toRefs(store);\n }\n else {\n const rawStore = toRaw(store);\n const refs = {};\n for (const key in rawStore) {\n const value = rawStore[key];\n // There is no native method to check for a computed\n // https://github.com/vuejs/core/pull/4165\n if (value.effect) {\n // @ts-expect-error: too hard to type correctly\n refs[key] =\n // ...\n computed({\n get: () => store[key],\n set(value) {\n store[key] = value;\n },\n });\n }\n else if (isRef(value) || isReactive(value)) {\n // @ts-expect-error: the key is state or getter\n refs[key] =\n // ---\n toRef(store, key);\n }\n }\n return refs;\n }\n}\n\n/**\n * Vue 2 Plugin that must be installed for pinia to work. Note **you don't need\n * this plugin if you are using Nuxt.js**. Use the `buildModule` instead:\n * https://pinia.vuejs.org/ssr/nuxt.html.\n *\n * @example\n * ```js\n * import Vue from 'vue'\n * import { PiniaVuePlugin, createPinia } from 'pinia'\n *\n * Vue.use(PiniaVuePlugin)\n * const pinia = createPinia()\n *\n * new Vue({\n * el: '#app',\n * // ...\n * pinia,\n * })\n * ```\n *\n * @param _Vue - `Vue` imported from 'vue'.\n */\nconst PiniaVuePlugin = function (_Vue) {\n // Equivalent of\n // app.config.globalProperties.$pinia = pinia\n _Vue.mixin({\n beforeCreate() {\n const options = this.$options;\n if (options.pinia) {\n const pinia = options.pinia;\n // HACK: taken from provide(): https://github.com/vuejs/composition-api/blob/main/src/apis/inject.ts#L31\n /* istanbul ignore else */\n if (!this._provided) {\n const provideCache = {};\n Object.defineProperty(this, '_provided', {\n get: () => provideCache,\n set: (v) => Object.assign(provideCache, v),\n });\n }\n this._provided[piniaSymbol] = pinia;\n // propagate the pinia instance in an SSR friendly way\n // avoid adding it to nuxt twice\n /* istanbul ignore else */\n if (!this.$pinia) {\n this.$pinia = pinia;\n }\n pinia._a = this;\n if (IS_CLIENT) {\n // this allows calling useStore() outside of a component setup after\n // installing pinia's plugin\n setActivePinia(pinia);\n }\n if ((((process.env.NODE_ENV !== 'production') || (typeof __VUE_PROD_DEVTOOLS__ !== 'undefined' && __VUE_PROD_DEVTOOLS__)) && !(process.env.NODE_ENV === 'test')) && IS_CLIENT) {\n registerPiniaDevtools(pinia._a, pinia);\n }\n }\n else if (!this.$pinia && options.parent && options.parent.$pinia) {\n this.$pinia = options.parent.$pinia;\n }\n },\n destroyed() {\n delete this._pStores;\n },\n });\n};\n\nexport { MutationType, PiniaVuePlugin, acceptHMRUpdate, createPinia, defineStore, disposePinia, getActivePinia, mapActions, mapGetters, mapState, mapStores, mapWritableState, setActivePinia, setMapStoreSuffix, shouldHydrate, skipHydrate, storeToRefs };\n","\n\n\n\t
\n\t\t\n\t\t\n\t\t\n\t\t\t
{{ folderName }}
\n\t\t\t
\n\t\t\t\t{{ subname }}\n\t\t\t
\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t
\n\n\n\n\n\n","\n\n\n\t
\n\t\t
\n\t\t\t{{ t('photos', 'Media folders') }}\n\t\t
\n\t\t
\n\t\t\t{{ t('photos', 'Choose the folders from where photos and videos are shown.') }}\n\t\t
\n\n\n\n\n\n","/**\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { defineStore } from 'pinia'\nimport { computed, ref } from 'vue'\nimport filters from '../services/PhotosFilters/index.ts'\n\nexport default defineStore('filters', () => {\n\tconst selectedFilters = ref>(filters.reduce((acc, filter) => ({ ...acc, [filter.id]: [] }), {}))\n\n\tconst filtersQuery = computed(() => {\n\t\treturn Object.entries(selectedFilters.value)\n\t\t\t.filter(([, values]) => values.length > 0)\n\t\t\t.map(([key, values]) => filters.find((filter) => filter.id === key)?.getQuery(values))\n\t\t\t.join('\\n')\n\t})\n\n\treturn { selectedFilters, filtersQuery }\n})\n"],"names":["getDevtoolsGlobalHook","getTarget","isProxyAvailable","HOOK_SETUP","HOOK_PLUGIN_SETTINGS_SET","supported","perf","isPerformanceSupported","_a","now","ApiProxy","plugin","hook","defaultSettings","id","item","localSettingsSaveId","currentSettings","raw","data","value","pluginId","_target","prop","args","resolve","target","setupDevtoolsPlugin","pluginDescriptor","setupFn","descriptor","enableProxy","proxy","activePinia","setActivePinia","pinia","piniaSymbol","isPlainObject","o","MutationType","IS_CLIENT","_global","global","bom","blob","autoBom","download","url","name","opts","xhr","saveAs","corsEnabled","click","node","evt","_navigator","isMacOSWebView","downloadSaveAs","msSaveAs","fileSaverSaveAs","a","popup","force","isSafari","isChromeIOS","reader","toastMessage","message","type","piniaMessage","isPinia","checkClipboardAccess","checkNotFocusedError","error","actionGlobalCopyState","actionGlobalPasteState","loadStoresState","actionGlobalSaveState","fileInput","getFileOpener","openFile","reject","files","file","actionGlobalOpenStateFile","result","open","text","state","key","storeState","formatDisplay","display","PINIA_ROOT_LABEL","PINIA_ROOT_ID","formatStoreForInspectorTree","store","formatStoreForInspectorState","storeNames","storeMap","storeId","getters","getterName","formatEventData","events","event","formatMutationType","isTimelineActive","componentStateTypes","MUTATIONS_LAYER_ID","INSPECTOR_ID","assign$1","getStoreType","registerPiniaDevtools","app","api","nodeId","payload","ctx","piniaStores","toRaw","stores","inspectedStore","path","addStoreToDevtools","after","onError","groupId","runningActionId","activeAction","watch","unref","newValue","oldValue","eventData","hotUpdate","markRaw","newStore","$dispose","patchActionForGrouping","actionNames","wrapWithProxy","actions","storeActions","actionName","_actionId","trackedStore","retValue","devtoolsPlugin","options","originalHotUpdate","createPinia","scope","effectScope","ref","_p","noop","addSubscription","subscriptions","callback","detached","onCleanup","removeSubscription","idx","getCurrentScope","onScopeDispose","triggerSubscriptions","fallbackRunWithContext","fn","ACTION_MARKER","ACTION_NAME","mergeReactiveObjects","patchToApply","subPatch","targetValue","isRef","isReactive","skipHydrateSymbol","shouldHydrate","obj","assign","isComputed","createOptionsStore","hot","initialState","setup","set","localState","toRefs","computedGetters","computed","createSetupStore","$id","isOptionsStore","optionsForPlugin","$subscribeOptions","isListening","isSyncListening","actionSubscriptions","debuggerEvents","hotState","activeListener","$patch","partialStateOrMutator","subscriptionMutation","myListenerId","nextTick","$reset","newState","$state","action","wrappedAction","afterCallbackList","onErrorCallbackList","ret","_hmrPayload","partialStore","stopWatcher","reactive","setupStore","actionValue","nonEnumerable","p","extender","extensions","defineStore","idOrOptions","setupOptions","isSetupStore","useStore","hasContext","hasInjectionContext","inject","storeToRefs","PiniaVuePlugin","_Vue","provideCache","v","_sfc_main$1","defineComponent","NcButton","FolderOutline","Close","t","_sfc_main","PhotosFolder","Plus","FolderMultipleOutline","debounce","title","getFilePickerBuilder","nodes","logger","pickedFolder","index","folders","useFilterStore","selectedFilters","filters","acc","filter","filtersQuery","values"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5]}
\ No newline at end of file
+{"version":3,"file":"filters-DiWkMIga.chunk.mjs","sources":["../node_modules/@vue/devtools-api/lib/esm/env.js","../node_modules/@vue/devtools-api/lib/esm/const.js","../node_modules/@vue/devtools-api/lib/esm/time.js","../node_modules/@vue/devtools-api/lib/esm/proxy.js","../node_modules/@vue/devtools-api/lib/esm/index.js","../node_modules/pinia/dist/pinia.mjs","../src/components/Settings/PhotosFolder.vue","../src/components/Settings/PhotosSourceLocationsSettings.vue","../src/store/filters.ts"],"sourcesContent":["export function getDevtoolsGlobalHook() {\n return getTarget().__VUE_DEVTOOLS_GLOBAL_HOOK__;\n}\nexport function getTarget() {\n // @ts-expect-error navigator and windows are not available in all environments\n return (typeof navigator !== 'undefined' && typeof window !== 'undefined')\n ? window\n : typeof globalThis !== 'undefined'\n ? globalThis\n : {};\n}\nexport const isProxyAvailable = typeof Proxy === 'function';\n","export const HOOK_SETUP = 'devtools-plugin:setup';\nexport const HOOK_PLUGIN_SETTINGS_SET = 'plugin:settings:set';\n","let supported;\nlet perf;\nexport function isPerformanceSupported() {\n var _a;\n if (supported !== undefined) {\n return supported;\n }\n if (typeof window !== 'undefined' && window.performance) {\n supported = true;\n perf = window.performance;\n }\n else if (typeof globalThis !== 'undefined' && ((_a = globalThis.perf_hooks) === null || _a === void 0 ? void 0 : _a.performance)) {\n supported = true;\n perf = globalThis.perf_hooks.performance;\n }\n else {\n supported = false;\n }\n return supported;\n}\nexport function now() {\n return isPerformanceSupported() ? perf.now() : Date.now();\n}\n","import { HOOK_PLUGIN_SETTINGS_SET } from './const.js';\nimport { now } from './time.js';\nexport class ApiProxy {\n constructor(plugin, hook) {\n this.target = null;\n this.targetQueue = [];\n this.onQueue = [];\n this.plugin = plugin;\n this.hook = hook;\n const defaultSettings = {};\n if (plugin.settings) {\n for (const id in plugin.settings) {\n const item = plugin.settings[id];\n defaultSettings[id] = item.defaultValue;\n }\n }\n const localSettingsSaveId = `__vue-devtools-plugin-settings__${plugin.id}`;\n let currentSettings = Object.assign({}, defaultSettings);\n try {\n const raw = localStorage.getItem(localSettingsSaveId);\n const data = JSON.parse(raw);\n Object.assign(currentSettings, data);\n }\n catch (e) {\n // noop\n }\n this.fallbacks = {\n getSettings() {\n return currentSettings;\n },\n setSettings(value) {\n try {\n localStorage.setItem(localSettingsSaveId, JSON.stringify(value));\n }\n catch (e) {\n // noop\n }\n currentSettings = value;\n },\n now() {\n return now();\n },\n };\n if (hook) {\n hook.on(HOOK_PLUGIN_SETTINGS_SET, (pluginId, value) => {\n if (pluginId === this.plugin.id) {\n this.fallbacks.setSettings(value);\n }\n });\n }\n this.proxiedOn = new Proxy({}, {\n get: (_target, prop) => {\n if (this.target) {\n return this.target.on[prop];\n }\n else {\n return (...args) => {\n this.onQueue.push({\n method: prop,\n args,\n });\n };\n }\n },\n });\n this.proxiedTarget = new Proxy({}, {\n get: (_target, prop) => {\n if (this.target) {\n return this.target[prop];\n }\n else if (prop === 'on') {\n return this.proxiedOn;\n }\n else if (Object.keys(this.fallbacks).includes(prop)) {\n return (...args) => {\n this.targetQueue.push({\n method: prop,\n args,\n resolve: () => { },\n });\n return this.fallbacks[prop](...args);\n };\n }\n else {\n return (...args) => {\n return new Promise((resolve) => {\n this.targetQueue.push({\n method: prop,\n args,\n resolve,\n });\n });\n };\n }\n },\n });\n }\n async setRealTarget(target) {\n this.target = target;\n for (const item of this.onQueue) {\n this.target.on[item.method](...item.args);\n }\n for (const item of this.targetQueue) {\n item.resolve(await this.target[item.method](...item.args));\n }\n }\n}\n","import { getDevtoolsGlobalHook, getTarget, isProxyAvailable } from './env.js';\nimport { HOOK_SETUP } from './const.js';\nimport { ApiProxy } from './proxy.js';\nexport * from './api/index.js';\nexport * from './plugin.js';\nexport * from './time.js';\nexport function setupDevtoolsPlugin(pluginDescriptor, setupFn) {\n const descriptor = pluginDescriptor;\n const target = getTarget();\n const hook = getDevtoolsGlobalHook();\n const enableProxy = isProxyAvailable && descriptor.enableEarlyProxy;\n if (hook && (target.__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__ || !enableProxy)) {\n hook.emit(HOOK_SETUP, pluginDescriptor, setupFn);\n }\n else {\n const proxy = enableProxy ? new ApiProxy(descriptor, hook) : null;\n const list = target.__VUE_DEVTOOLS_PLUGINS__ = target.__VUE_DEVTOOLS_PLUGINS__ || [];\n list.push({\n pluginDescriptor: descriptor,\n setupFn,\n proxy,\n });\n if (proxy) {\n setupFn(proxy.proxiedTarget);\n }\n }\n}\n","/*!\n * pinia v2.3.1\n * (c) 2025 Eduardo San Martin Morote\n * @license MIT\n */\nimport { hasInjectionContext, inject, toRaw, watch, unref, markRaw, effectScope, ref, isVue2, isRef, isReactive, set, getCurrentScope, onScopeDispose, getCurrentInstance, reactive, toRef, del, nextTick, computed, toRefs } from 'vue-demi';\nimport { setupDevtoolsPlugin } from '@vue/devtools-api';\n\n/**\n * setActivePinia must be called to handle SSR at the top of functions like\n * `fetch`, `setup`, `serverPrefetch` and others\n */\nlet activePinia;\n/**\n * Sets or unsets the active pinia. Used in SSR and internally when calling\n * actions and getters\n *\n * @param pinia - Pinia instance\n */\n// @ts-expect-error: cannot constrain the type of the return\nconst setActivePinia = (pinia) => (activePinia = pinia);\n/**\n * Get the currently active pinia if there is any.\n */\nconst getActivePinia = () => (hasInjectionContext() && inject(piniaSymbol)) || activePinia;\nconst piniaSymbol = ((process.env.NODE_ENV !== 'production') ? Symbol('pinia') : /* istanbul ignore next */ Symbol());\n\nfunction isPlainObject(\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\no) {\n return (o &&\n typeof o === 'object' &&\n Object.prototype.toString.call(o) === '[object Object]' &&\n typeof o.toJSON !== 'function');\n}\n// type DeepReadonly = { readonly [P in keyof T]: DeepReadonly }\n// TODO: can we change these to numbers?\n/**\n * Possible types for SubscriptionCallback\n */\nvar MutationType;\n(function (MutationType) {\n /**\n * Direct mutation of the state:\n *\n * - `store.name = 'new name'`\n * - `store.$state.name = 'new name'`\n * - `store.list.push('new item')`\n */\n MutationType[\"direct\"] = \"direct\";\n /**\n * Mutated the state with `$patch` and an object\n *\n * - `store.$patch({ name: 'newName' })`\n */\n MutationType[\"patchObject\"] = \"patch object\";\n /**\n * Mutated the state with `$patch` and a function\n *\n * - `store.$patch(state => state.name = 'newName')`\n */\n MutationType[\"patchFunction\"] = \"patch function\";\n // maybe reset? for $state = {} and $reset\n})(MutationType || (MutationType = {}));\n\nconst IS_CLIENT = typeof window !== 'undefined';\n\n/*\n * FileSaver.js A saveAs() FileSaver implementation.\n *\n * Originally by Eli Grey, adapted as an ESM module by Eduardo San Martin\n * Morote.\n *\n * License : MIT\n */\n// The one and only way of getting global scope in all environments\n// https://stackoverflow.com/q/3277182/1008999\nconst _global = /*#__PURE__*/ (() => typeof window === 'object' && window.window === window\n ? window\n : typeof self === 'object' && self.self === self\n ? self\n : typeof global === 'object' && global.global === global\n ? global\n : typeof globalThis === 'object'\n ? globalThis\n : { HTMLElement: null })();\nfunction bom(blob, { autoBom = false } = {}) {\n // prepend BOM for UTF-8 XML and text/* types (including HTML)\n // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF\n if (autoBom &&\n /^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(blob.type)) {\n return new Blob([String.fromCharCode(0xfeff), blob], { type: blob.type });\n }\n return blob;\n}\nfunction download(url, name, opts) {\n const xhr = new XMLHttpRequest();\n xhr.open('GET', url);\n xhr.responseType = 'blob';\n xhr.onload = function () {\n saveAs(xhr.response, name, opts);\n };\n xhr.onerror = function () {\n console.error('could not download file');\n };\n xhr.send();\n}\nfunction corsEnabled(url) {\n const xhr = new XMLHttpRequest();\n // use sync to avoid popup blocker\n xhr.open('HEAD', url, false);\n try {\n xhr.send();\n }\n catch (e) { }\n return xhr.status >= 200 && xhr.status <= 299;\n}\n// `a.click()` doesn't work for all browsers (#465)\nfunction click(node) {\n try {\n node.dispatchEvent(new MouseEvent('click'));\n }\n catch (e) {\n const evt = document.createEvent('MouseEvents');\n evt.initMouseEvent('click', true, true, window, 0, 0, 0, 80, 20, false, false, false, false, 0, null);\n node.dispatchEvent(evt);\n }\n}\nconst _navigator = typeof navigator === 'object' ? navigator : { userAgent: '' };\n// Detect WebView inside a native macOS app by ruling out all browsers\n// We just need to check for 'Safari' because all other browsers (besides Firefox) include that too\n// https://www.whatismybrowser.com/guides/the-latest-user-agent/macos\nconst isMacOSWebView = /*#__PURE__*/ (() => /Macintosh/.test(_navigator.userAgent) &&\n /AppleWebKit/.test(_navigator.userAgent) &&\n !/Safari/.test(_navigator.userAgent))();\nconst saveAs = !IS_CLIENT\n ? () => { } // noop\n : // Use download attribute first if possible (#193 Lumia mobile) unless this is a macOS WebView or mini program\n typeof HTMLAnchorElement !== 'undefined' &&\n 'download' in HTMLAnchorElement.prototype &&\n !isMacOSWebView\n ? downloadSaveAs\n : // Use msSaveOrOpenBlob as a second approach\n 'msSaveOrOpenBlob' in _navigator\n ? msSaveAs\n : // Fallback to using FileReader and a popup\n fileSaverSaveAs;\nfunction downloadSaveAs(blob, name = 'download', opts) {\n const a = document.createElement('a');\n a.download = name;\n a.rel = 'noopener'; // tabnabbing\n // TODO: detect chrome extensions & packaged apps\n // a.target = '_blank'\n if (typeof blob === 'string') {\n // Support regular links\n a.href = blob;\n if (a.origin !== location.origin) {\n if (corsEnabled(a.href)) {\n download(blob, name, opts);\n }\n else {\n a.target = '_blank';\n click(a);\n }\n }\n else {\n click(a);\n }\n }\n else {\n // Support blobs\n a.href = URL.createObjectURL(blob);\n setTimeout(function () {\n URL.revokeObjectURL(a.href);\n }, 4e4); // 40s\n setTimeout(function () {\n click(a);\n }, 0);\n }\n}\nfunction msSaveAs(blob, name = 'download', opts) {\n if (typeof blob === 'string') {\n if (corsEnabled(blob)) {\n download(blob, name, opts);\n }\n else {\n const a = document.createElement('a');\n a.href = blob;\n a.target = '_blank';\n setTimeout(function () {\n click(a);\n });\n }\n }\n else {\n // @ts-ignore: works on windows\n navigator.msSaveOrOpenBlob(bom(blob, opts), name);\n }\n}\nfunction fileSaverSaveAs(blob, name, opts, popup) {\n // Open a popup immediately do go around popup blocker\n // Mostly only available on user interaction and the fileReader is async so...\n popup = popup || open('', '_blank');\n if (popup) {\n popup.document.title = popup.document.body.innerText = 'downloading...';\n }\n if (typeof blob === 'string')\n return download(blob, name, opts);\n const force = blob.type === 'application/octet-stream';\n const isSafari = /constructor/i.test(String(_global.HTMLElement)) || 'safari' in _global;\n const isChromeIOS = /CriOS\\/[\\d]+/.test(navigator.userAgent);\n if ((isChromeIOS || (force && isSafari) || isMacOSWebView) &&\n typeof FileReader !== 'undefined') {\n // Safari doesn't allow downloading of blob URLs\n const reader = new FileReader();\n reader.onloadend = function () {\n let url = reader.result;\n if (typeof url !== 'string') {\n popup = null;\n throw new Error('Wrong reader.result type');\n }\n url = isChromeIOS\n ? url\n : url.replace(/^data:[^;]*;/, 'data:attachment/file;');\n if (popup) {\n popup.location.href = url;\n }\n else {\n location.assign(url);\n }\n popup = null; // reverse-tabnabbing #460\n };\n reader.readAsDataURL(blob);\n }\n else {\n const url = URL.createObjectURL(blob);\n if (popup)\n popup.location.assign(url);\n else\n location.href = url;\n popup = null; // reverse-tabnabbing #460\n setTimeout(function () {\n URL.revokeObjectURL(url);\n }, 4e4); // 40s\n }\n}\n\n/**\n * Shows a toast or console.log\n *\n * @param message - message to log\n * @param type - different color of the tooltip\n */\nfunction toastMessage(message, type) {\n const piniaMessage = '🍍 ' + message;\n if (typeof __VUE_DEVTOOLS_TOAST__ === 'function') {\n // No longer available :(\n __VUE_DEVTOOLS_TOAST__(piniaMessage, type);\n }\n else if (type === 'error') {\n console.error(piniaMessage);\n }\n else if (type === 'warn') {\n console.warn(piniaMessage);\n }\n else {\n console.log(piniaMessage);\n }\n}\nfunction isPinia(o) {\n return '_a' in o && 'install' in o;\n}\n\n/**\n * This file contain devtools actions, they are not Pinia actions.\n */\n// ---\nfunction checkClipboardAccess() {\n if (!('clipboard' in navigator)) {\n toastMessage(`Your browser doesn't support the Clipboard API`, 'error');\n return true;\n }\n}\nfunction checkNotFocusedError(error) {\n if (error instanceof Error &&\n error.message.toLowerCase().includes('document is not focused')) {\n toastMessage('You need to activate the \"Emulate a focused page\" setting in the \"Rendering\" panel of devtools.', 'warn');\n return true;\n }\n return false;\n}\nasync function actionGlobalCopyState(pinia) {\n if (checkClipboardAccess())\n return;\n try {\n await navigator.clipboard.writeText(JSON.stringify(pinia.state.value));\n toastMessage('Global state copied to clipboard.');\n }\n catch (error) {\n if (checkNotFocusedError(error))\n return;\n toastMessage(`Failed to serialize the state. Check the console for more details.`, 'error');\n console.error(error);\n }\n}\nasync function actionGlobalPasteState(pinia) {\n if (checkClipboardAccess())\n return;\n try {\n loadStoresState(pinia, JSON.parse(await navigator.clipboard.readText()));\n toastMessage('Global state pasted from clipboard.');\n }\n catch (error) {\n if (checkNotFocusedError(error))\n return;\n toastMessage(`Failed to deserialize the state from clipboard. Check the console for more details.`, 'error');\n console.error(error);\n }\n}\nasync function actionGlobalSaveState(pinia) {\n try {\n saveAs(new Blob([JSON.stringify(pinia.state.value)], {\n type: 'text/plain;charset=utf-8',\n }), 'pinia-state.json');\n }\n catch (error) {\n toastMessage(`Failed to export the state as JSON. Check the console for more details.`, 'error');\n console.error(error);\n }\n}\nlet fileInput;\nfunction getFileOpener() {\n if (!fileInput) {\n fileInput = document.createElement('input');\n fileInput.type = 'file';\n fileInput.accept = '.json';\n }\n function openFile() {\n return new Promise((resolve, reject) => {\n fileInput.onchange = async () => {\n const files = fileInput.files;\n if (!files)\n return resolve(null);\n const file = files.item(0);\n if (!file)\n return resolve(null);\n return resolve({ text: await file.text(), file });\n };\n // @ts-ignore: TODO: changed from 4.3 to 4.4\n fileInput.oncancel = () => resolve(null);\n fileInput.onerror = reject;\n fileInput.click();\n });\n }\n return openFile;\n}\nasync function actionGlobalOpenStateFile(pinia) {\n try {\n const open = getFileOpener();\n const result = await open();\n if (!result)\n return;\n const { text, file } = result;\n loadStoresState(pinia, JSON.parse(text));\n toastMessage(`Global state imported from \"${file.name}\".`);\n }\n catch (error) {\n toastMessage(`Failed to import the state from JSON. Check the console for more details.`, 'error');\n console.error(error);\n }\n}\nfunction loadStoresState(pinia, state) {\n for (const key in state) {\n const storeState = pinia.state.value[key];\n // store is already instantiated, patch it\n if (storeState) {\n Object.assign(storeState, state[key]);\n }\n else {\n // store is not instantiated, set the initial state\n pinia.state.value[key] = state[key];\n }\n }\n}\n\nfunction formatDisplay(display) {\n return {\n _custom: {\n display,\n },\n };\n}\nconst PINIA_ROOT_LABEL = '🍍 Pinia (root)';\nconst PINIA_ROOT_ID = '_root';\nfunction formatStoreForInspectorTree(store) {\n return isPinia(store)\n ? {\n id: PINIA_ROOT_ID,\n label: PINIA_ROOT_LABEL,\n }\n : {\n id: store.$id,\n label: store.$id,\n };\n}\nfunction formatStoreForInspectorState(store) {\n if (isPinia(store)) {\n const storeNames = Array.from(store._s.keys());\n const storeMap = store._s;\n const state = {\n state: storeNames.map((storeId) => ({\n editable: true,\n key: storeId,\n value: store.state.value[storeId],\n })),\n getters: storeNames\n .filter((id) => storeMap.get(id)._getters)\n .map((id) => {\n const store = storeMap.get(id);\n return {\n editable: false,\n key: id,\n value: store._getters.reduce((getters, key) => {\n getters[key] = store[key];\n return getters;\n }, {}),\n };\n }),\n };\n return state;\n }\n const state = {\n state: Object.keys(store.$state).map((key) => ({\n editable: true,\n key,\n value: store.$state[key],\n })),\n };\n // avoid adding empty getters\n if (store._getters && store._getters.length) {\n state.getters = store._getters.map((getterName) => ({\n editable: false,\n key: getterName,\n value: store[getterName],\n }));\n }\n if (store._customProperties.size) {\n state.customProperties = Array.from(store._customProperties).map((key) => ({\n editable: true,\n key,\n value: store[key],\n }));\n }\n return state;\n}\nfunction formatEventData(events) {\n if (!events)\n return {};\n if (Array.isArray(events)) {\n // TODO: handle add and delete for arrays and objects\n return events.reduce((data, event) => {\n data.keys.push(event.key);\n data.operations.push(event.type);\n data.oldValue[event.key] = event.oldValue;\n data.newValue[event.key] = event.newValue;\n return data;\n }, {\n oldValue: {},\n keys: [],\n operations: [],\n newValue: {},\n });\n }\n else {\n return {\n operation: formatDisplay(events.type),\n key: formatDisplay(events.key),\n oldValue: events.oldValue,\n newValue: events.newValue,\n };\n }\n}\nfunction formatMutationType(type) {\n switch (type) {\n case MutationType.direct:\n return 'mutation';\n case MutationType.patchFunction:\n return '$patch';\n case MutationType.patchObject:\n return '$patch';\n default:\n return 'unknown';\n }\n}\n\n// timeline can be paused when directly changing the state\nlet isTimelineActive = true;\nconst componentStateTypes = [];\nconst MUTATIONS_LAYER_ID = 'pinia:mutations';\nconst INSPECTOR_ID = 'pinia';\nconst { assign: assign$1 } = Object;\n/**\n * Gets the displayed name of a store in devtools\n *\n * @param id - id of the store\n * @returns a formatted string\n */\nconst getStoreType = (id) => '🍍 ' + id;\n/**\n * Add the pinia plugin without any store. Allows displaying a Pinia plugin tab\n * as soon as it is added to the application.\n *\n * @param app - Vue application\n * @param pinia - pinia instance\n */\nfunction registerPiniaDevtools(app, pinia) {\n setupDevtoolsPlugin({\n id: 'dev.esm.pinia',\n label: 'Pinia 🍍',\n logo: 'https://pinia.vuejs.org/logo.svg',\n packageName: 'pinia',\n homepage: 'https://pinia.vuejs.org',\n componentStateTypes,\n app,\n }, (api) => {\n if (typeof api.now !== 'function') {\n toastMessage('You seem to be using an outdated version of Vue Devtools. Are you still using the Beta release instead of the stable one? You can find the links at https://devtools.vuejs.org/guide/installation.html.');\n }\n api.addTimelineLayer({\n id: MUTATIONS_LAYER_ID,\n label: `Pinia 🍍`,\n color: 0xe5df88,\n });\n api.addInspector({\n id: INSPECTOR_ID,\n label: 'Pinia 🍍',\n icon: 'storage',\n treeFilterPlaceholder: 'Search stores',\n actions: [\n {\n icon: 'content_copy',\n action: () => {\n actionGlobalCopyState(pinia);\n },\n tooltip: 'Serialize and copy the state',\n },\n {\n icon: 'content_paste',\n action: async () => {\n await actionGlobalPasteState(pinia);\n api.sendInspectorTree(INSPECTOR_ID);\n api.sendInspectorState(INSPECTOR_ID);\n },\n tooltip: 'Replace the state with the content of your clipboard',\n },\n {\n icon: 'save',\n action: () => {\n actionGlobalSaveState(pinia);\n },\n tooltip: 'Save the state as a JSON file',\n },\n {\n icon: 'folder_open',\n action: async () => {\n await actionGlobalOpenStateFile(pinia);\n api.sendInspectorTree(INSPECTOR_ID);\n api.sendInspectorState(INSPECTOR_ID);\n },\n tooltip: 'Import the state from a JSON file',\n },\n ],\n nodeActions: [\n {\n icon: 'restore',\n tooltip: 'Reset the state (with \"$reset\")',\n action: (nodeId) => {\n const store = pinia._s.get(nodeId);\n if (!store) {\n toastMessage(`Cannot reset \"${nodeId}\" store because it wasn't found.`, 'warn');\n }\n else if (typeof store.$reset !== 'function') {\n toastMessage(`Cannot reset \"${nodeId}\" store because it doesn't have a \"$reset\" method implemented.`, 'warn');\n }\n else {\n store.$reset();\n toastMessage(`Store \"${nodeId}\" reset.`);\n }\n },\n },\n ],\n });\n api.on.inspectComponent((payload, ctx) => {\n const proxy = (payload.componentInstance &&\n payload.componentInstance.proxy);\n if (proxy && proxy._pStores) {\n const piniaStores = payload.componentInstance.proxy._pStores;\n Object.values(piniaStores).forEach((store) => {\n payload.instanceData.state.push({\n type: getStoreType(store.$id),\n key: 'state',\n editable: true,\n value: store._isOptionsAPI\n ? {\n _custom: {\n value: toRaw(store.$state),\n actions: [\n {\n icon: 'restore',\n tooltip: 'Reset the state of this store',\n action: () => store.$reset(),\n },\n ],\n },\n }\n : // NOTE: workaround to unwrap transferred refs\n Object.keys(store.$state).reduce((state, key) => {\n state[key] = store.$state[key];\n return state;\n }, {}),\n });\n if (store._getters && store._getters.length) {\n payload.instanceData.state.push({\n type: getStoreType(store.$id),\n key: 'getters',\n editable: false,\n value: store._getters.reduce((getters, key) => {\n try {\n getters[key] = store[key];\n }\n catch (error) {\n // @ts-expect-error: we just want to show it in devtools\n getters[key] = error;\n }\n return getters;\n }, {}),\n });\n }\n });\n }\n });\n api.on.getInspectorTree((payload) => {\n if (payload.app === app && payload.inspectorId === INSPECTOR_ID) {\n let stores = [pinia];\n stores = stores.concat(Array.from(pinia._s.values()));\n payload.rootNodes = (payload.filter\n ? stores.filter((store) => '$id' in store\n ? store.$id\n .toLowerCase()\n .includes(payload.filter.toLowerCase())\n : PINIA_ROOT_LABEL.toLowerCase().includes(payload.filter.toLowerCase()))\n : stores).map(formatStoreForInspectorTree);\n }\n });\n // Expose pinia instance as $pinia to window\n globalThis.$pinia = pinia;\n api.on.getInspectorState((payload) => {\n if (payload.app === app && payload.inspectorId === INSPECTOR_ID) {\n const inspectedStore = payload.nodeId === PINIA_ROOT_ID\n ? pinia\n : pinia._s.get(payload.nodeId);\n if (!inspectedStore) {\n // this could be the selected store restored for a different project\n // so it's better not to say anything here\n return;\n }\n if (inspectedStore) {\n // Expose selected store as $store to window\n if (payload.nodeId !== PINIA_ROOT_ID)\n globalThis.$store = toRaw(inspectedStore);\n payload.state = formatStoreForInspectorState(inspectedStore);\n }\n }\n });\n api.on.editInspectorState((payload, ctx) => {\n if (payload.app === app && payload.inspectorId === INSPECTOR_ID) {\n const inspectedStore = payload.nodeId === PINIA_ROOT_ID\n ? pinia\n : pinia._s.get(payload.nodeId);\n if (!inspectedStore) {\n return toastMessage(`store \"${payload.nodeId}\" not found`, 'error');\n }\n const { path } = payload;\n if (!isPinia(inspectedStore)) {\n // access only the state\n if (path.length !== 1 ||\n !inspectedStore._customProperties.has(path[0]) ||\n path[0] in inspectedStore.$state) {\n path.unshift('$state');\n }\n }\n else {\n // Root access, we can omit the `.value` because the devtools API does it for us\n path.unshift('state');\n }\n isTimelineActive = false;\n payload.set(inspectedStore, path, payload.state.value);\n isTimelineActive = true;\n }\n });\n api.on.editComponentState((payload) => {\n if (payload.type.startsWith('🍍')) {\n const storeId = payload.type.replace(/^🍍\\s*/, '');\n const store = pinia._s.get(storeId);\n if (!store) {\n return toastMessage(`store \"${storeId}\" not found`, 'error');\n }\n const { path } = payload;\n if (path[0] !== 'state') {\n return toastMessage(`Invalid path for store \"${storeId}\":\\n${path}\\nOnly state can be modified.`);\n }\n // rewrite the first entry to be able to directly set the state as\n // well as any other path\n path[0] = '$state';\n isTimelineActive = false;\n payload.set(store, path, payload.state.value);\n isTimelineActive = true;\n }\n });\n });\n}\nfunction addStoreToDevtools(app, store) {\n if (!componentStateTypes.includes(getStoreType(store.$id))) {\n componentStateTypes.push(getStoreType(store.$id));\n }\n setupDevtoolsPlugin({\n id: 'dev.esm.pinia',\n label: 'Pinia 🍍',\n logo: 'https://pinia.vuejs.org/logo.svg',\n packageName: 'pinia',\n homepage: 'https://pinia.vuejs.org',\n componentStateTypes,\n app,\n settings: {\n logStoreChanges: {\n label: 'Notify about new/deleted stores',\n type: 'boolean',\n defaultValue: true,\n },\n // useEmojis: {\n // label: 'Use emojis in messages ⚡️',\n // type: 'boolean',\n // defaultValue: true,\n // },\n },\n }, (api) => {\n // gracefully handle errors\n const now = typeof api.now === 'function' ? api.now.bind(api) : Date.now;\n store.$onAction(({ after, onError, name, args }) => {\n const groupId = runningActionId++;\n api.addTimelineEvent({\n layerId: MUTATIONS_LAYER_ID,\n event: {\n time: now(),\n title: '🛫 ' + name,\n subtitle: 'start',\n data: {\n store: formatDisplay(store.$id),\n action: formatDisplay(name),\n args,\n },\n groupId,\n },\n });\n after((result) => {\n activeAction = undefined;\n api.addTimelineEvent({\n layerId: MUTATIONS_LAYER_ID,\n event: {\n time: now(),\n title: '🛬 ' + name,\n subtitle: 'end',\n data: {\n store: formatDisplay(store.$id),\n action: formatDisplay(name),\n args,\n result,\n },\n groupId,\n },\n });\n });\n onError((error) => {\n activeAction = undefined;\n api.addTimelineEvent({\n layerId: MUTATIONS_LAYER_ID,\n event: {\n time: now(),\n logType: 'error',\n title: '💥 ' + name,\n subtitle: 'end',\n data: {\n store: formatDisplay(store.$id),\n action: formatDisplay(name),\n args,\n error,\n },\n groupId,\n },\n });\n });\n }, true);\n store._customProperties.forEach((name) => {\n watch(() => unref(store[name]), (newValue, oldValue) => {\n api.notifyComponentUpdate();\n api.sendInspectorState(INSPECTOR_ID);\n if (isTimelineActive) {\n api.addTimelineEvent({\n layerId: MUTATIONS_LAYER_ID,\n event: {\n time: now(),\n title: 'Change',\n subtitle: name,\n data: {\n newValue,\n oldValue,\n },\n groupId: activeAction,\n },\n });\n }\n }, { deep: true });\n });\n store.$subscribe(({ events, type }, state) => {\n api.notifyComponentUpdate();\n api.sendInspectorState(INSPECTOR_ID);\n if (!isTimelineActive)\n return;\n // rootStore.state[store.id] = state\n const eventData = {\n time: now(),\n title: formatMutationType(type),\n data: assign$1({ store: formatDisplay(store.$id) }, formatEventData(events)),\n groupId: activeAction,\n };\n if (type === MutationType.patchFunction) {\n eventData.subtitle = '⤵️';\n }\n else if (type === MutationType.patchObject) {\n eventData.subtitle = '🧩';\n }\n else if (events && !Array.isArray(events)) {\n eventData.subtitle = events.type;\n }\n if (events) {\n eventData.data['rawEvent(s)'] = {\n _custom: {\n display: 'DebuggerEvent',\n type: 'object',\n tooltip: 'raw DebuggerEvent[]',\n value: events,\n },\n };\n }\n api.addTimelineEvent({\n layerId: MUTATIONS_LAYER_ID,\n event: eventData,\n });\n }, { detached: true, flush: 'sync' });\n const hotUpdate = store._hotUpdate;\n store._hotUpdate = markRaw((newStore) => {\n hotUpdate(newStore);\n api.addTimelineEvent({\n layerId: MUTATIONS_LAYER_ID,\n event: {\n time: now(),\n title: '🔥 ' + store.$id,\n subtitle: 'HMR update',\n data: {\n store: formatDisplay(store.$id),\n info: formatDisplay(`HMR update`),\n },\n },\n });\n // update the devtools too\n api.notifyComponentUpdate();\n api.sendInspectorTree(INSPECTOR_ID);\n api.sendInspectorState(INSPECTOR_ID);\n });\n const { $dispose } = store;\n store.$dispose = () => {\n $dispose();\n api.notifyComponentUpdate();\n api.sendInspectorTree(INSPECTOR_ID);\n api.sendInspectorState(INSPECTOR_ID);\n api.getSettings().logStoreChanges &&\n toastMessage(`Disposed \"${store.$id}\" store 🗑`);\n };\n // trigger an update so it can display new registered stores\n api.notifyComponentUpdate();\n api.sendInspectorTree(INSPECTOR_ID);\n api.sendInspectorState(INSPECTOR_ID);\n api.getSettings().logStoreChanges &&\n toastMessage(`\"${store.$id}\" store installed 🆕`);\n });\n}\nlet runningActionId = 0;\nlet activeAction;\n/**\n * Patches a store to enable action grouping in devtools by wrapping the store with a Proxy that is passed as the\n * context of all actions, allowing us to set `runningAction` on each access and effectively associating any state\n * mutation to the action.\n *\n * @param store - store to patch\n * @param actionNames - list of actionst to patch\n */\nfunction patchActionForGrouping(store, actionNames, wrapWithProxy) {\n // original actions of the store as they are given by pinia. We are going to override them\n const actions = actionNames.reduce((storeActions, actionName) => {\n // use toRaw to avoid tracking #541\n storeActions[actionName] = toRaw(store)[actionName];\n return storeActions;\n }, {});\n for (const actionName in actions) {\n store[actionName] = function () {\n // the running action id is incremented in a before action hook\n const _actionId = runningActionId;\n const trackedStore = wrapWithProxy\n ? new Proxy(store, {\n get(...args) {\n activeAction = _actionId;\n return Reflect.get(...args);\n },\n set(...args) {\n activeAction = _actionId;\n return Reflect.set(...args);\n },\n })\n : store;\n // For Setup Stores we need https://github.com/tc39/proposal-async-context\n activeAction = _actionId;\n const retValue = actions[actionName].apply(trackedStore, arguments);\n // this is safer as async actions in Setup Stores would associate mutations done outside of the action\n activeAction = undefined;\n return retValue;\n };\n }\n}\n/**\n * pinia.use(devtoolsPlugin)\n */\nfunction devtoolsPlugin({ app, store, options }) {\n // HMR module\n if (store.$id.startsWith('__hot:')) {\n return;\n }\n // detect option api vs setup api\n store._isOptionsAPI = !!options.state;\n // Do not overwrite actions mocked by @pinia/testing (#2298)\n if (!store._p._testing) {\n patchActionForGrouping(store, Object.keys(options.actions), store._isOptionsAPI);\n // Upgrade the HMR to also update the new actions\n const originalHotUpdate = store._hotUpdate;\n toRaw(store)._hotUpdate = function (newStore) {\n originalHotUpdate.apply(this, arguments);\n patchActionForGrouping(store, Object.keys(newStore._hmrPayload.actions), !!store._isOptionsAPI);\n };\n }\n addStoreToDevtools(app, \n // FIXME: is there a way to allow the assignment from Store to StoreGeneric?\n store);\n}\n\n/**\n * Creates a Pinia instance to be used by the application\n */\nfunction createPinia() {\n const scope = effectScope(true);\n // NOTE: here we could check the window object for a state and directly set it\n // if there is anything like it with Vue 3 SSR\n const state = scope.run(() => ref({}));\n let _p = [];\n // plugins added before calling app.use(pinia)\n let toBeInstalled = [];\n const pinia = markRaw({\n install(app) {\n // this allows calling useStore() outside of a component setup after\n // installing pinia's plugin\n setActivePinia(pinia);\n if (!isVue2) {\n pinia._a = app;\n app.provide(piniaSymbol, pinia);\n app.config.globalProperties.$pinia = pinia;\n /* istanbul ignore else */\n if ((((process.env.NODE_ENV !== 'production') || (typeof __VUE_PROD_DEVTOOLS__ !== 'undefined' && __VUE_PROD_DEVTOOLS__)) && !(process.env.NODE_ENV === 'test')) && IS_CLIENT) {\n registerPiniaDevtools(app, pinia);\n }\n toBeInstalled.forEach((plugin) => _p.push(plugin));\n toBeInstalled = [];\n }\n },\n use(plugin) {\n if (!this._a && !isVue2) {\n toBeInstalled.push(plugin);\n }\n else {\n _p.push(plugin);\n }\n return this;\n },\n _p,\n // it's actually undefined here\n // @ts-expect-error\n _a: null,\n _e: scope,\n _s: new Map(),\n state,\n });\n // pinia devtools rely on dev only features so they cannot be forced unless\n // the dev build of Vue is used. Avoid old browsers like IE11.\n if ((((process.env.NODE_ENV !== 'production') || (typeof __VUE_PROD_DEVTOOLS__ !== 'undefined' && __VUE_PROD_DEVTOOLS__)) && !(process.env.NODE_ENV === 'test')) && IS_CLIENT && typeof Proxy !== 'undefined') {\n pinia.use(devtoolsPlugin);\n }\n return pinia;\n}\n/**\n * Dispose a Pinia instance by stopping its effectScope and removing the state, plugins and stores. This is mostly\n * useful in tests, with both a testing pinia or a regular pinia and in applications that use multiple pinia instances.\n * Once disposed, the pinia instance cannot be used anymore.\n *\n * @param pinia - pinia instance\n */\nfunction disposePinia(pinia) {\n pinia._e.stop();\n pinia._s.clear();\n pinia._p.splice(0);\n pinia.state.value = {};\n // @ts-expect-error: non valid\n pinia._a = null;\n}\n\n/**\n * Checks if a function is a `StoreDefinition`.\n *\n * @param fn - object to test\n * @returns true if `fn` is a StoreDefinition\n */\nconst isUseStore = (fn) => {\n return typeof fn === 'function' && typeof fn.$id === 'string';\n};\n/**\n * Mutates in place `newState` with `oldState` to _hot update_ it. It will\n * remove any key not existing in `newState` and recursively merge plain\n * objects.\n *\n * @param newState - new state object to be patched\n * @param oldState - old state that should be used to patch newState\n * @returns - newState\n */\nfunction patchObject(newState, oldState) {\n // no need to go through symbols because they cannot be serialized anyway\n for (const key in oldState) {\n const subPatch = oldState[key];\n // skip the whole sub tree\n if (!(key in newState)) {\n continue;\n }\n const targetValue = newState[key];\n if (isPlainObject(targetValue) &&\n isPlainObject(subPatch) &&\n !isRef(subPatch) &&\n !isReactive(subPatch)) {\n newState[key] = patchObject(targetValue, subPatch);\n }\n else {\n // objects are either a bit more complex (e.g. refs) or primitives, so we\n // just set the whole thing\n if (isVue2) {\n set(newState, key, subPatch);\n }\n else {\n newState[key] = subPatch;\n }\n }\n }\n return newState;\n}\n/**\n * Creates an _accept_ function to pass to `import.meta.hot` in Vite applications.\n *\n * @example\n * ```js\n * const useUser = defineStore(...)\n * if (import.meta.hot) {\n * import.meta.hot.accept(acceptHMRUpdate(useUser, import.meta.hot))\n * }\n * ```\n *\n * @param initialUseStore - return of the defineStore to hot update\n * @param hot - `import.meta.hot`\n */\nfunction acceptHMRUpdate(initialUseStore, hot) {\n // strip as much as possible from iife.prod\n if (!(process.env.NODE_ENV !== 'production')) {\n return () => { };\n }\n return (newModule) => {\n const pinia = hot.data.pinia || initialUseStore._pinia;\n if (!pinia) {\n // this store is still not used\n return;\n }\n // preserve the pinia instance across loads\n hot.data.pinia = pinia;\n // console.log('got data', newStore)\n for (const exportName in newModule) {\n const useStore = newModule[exportName];\n // console.log('checking for', exportName)\n if (isUseStore(useStore) && pinia._s.has(useStore.$id)) {\n // console.log('Accepting update for', useStore.$id)\n const id = useStore.$id;\n if (id !== initialUseStore.$id) {\n console.warn(`The id of the store changed from \"${initialUseStore.$id}\" to \"${id}\". Reloading.`);\n // return import.meta.hot.invalidate()\n return hot.invalidate();\n }\n const existingStore = pinia._s.get(id);\n if (!existingStore) {\n console.log(`[Pinia]: skipping hmr because store doesn't exist yet`);\n return;\n }\n useStore(pinia, existingStore);\n }\n }\n };\n}\n\nconst noop = () => { };\nfunction addSubscription(subscriptions, callback, detached, onCleanup = noop) {\n subscriptions.push(callback);\n const removeSubscription = () => {\n const idx = subscriptions.indexOf(callback);\n if (idx > -1) {\n subscriptions.splice(idx, 1);\n onCleanup();\n }\n };\n if (!detached && getCurrentScope()) {\n onScopeDispose(removeSubscription);\n }\n return removeSubscription;\n}\nfunction triggerSubscriptions(subscriptions, ...args) {\n subscriptions.slice().forEach((callback) => {\n callback(...args);\n });\n}\n\nconst fallbackRunWithContext = (fn) => fn();\n/**\n * Marks a function as an action for `$onAction`\n * @internal\n */\nconst ACTION_MARKER = Symbol();\n/**\n * Action name symbol. Allows to add a name to an action after defining it\n * @internal\n */\nconst ACTION_NAME = Symbol();\nfunction mergeReactiveObjects(target, patchToApply) {\n // Handle Map instances\n if (target instanceof Map && patchToApply instanceof Map) {\n patchToApply.forEach((value, key) => target.set(key, value));\n }\n else if (target instanceof Set && patchToApply instanceof Set) {\n // Handle Set instances\n patchToApply.forEach(target.add, target);\n }\n // no need to go through symbols because they cannot be serialized anyway\n for (const key in patchToApply) {\n if (!patchToApply.hasOwnProperty(key))\n continue;\n const subPatch = patchToApply[key];\n const targetValue = target[key];\n if (isPlainObject(targetValue) &&\n isPlainObject(subPatch) &&\n target.hasOwnProperty(key) &&\n !isRef(subPatch) &&\n !isReactive(subPatch)) {\n // NOTE: here I wanted to warn about inconsistent types but it's not possible because in setup stores one might\n // start the value of a property as a certain type e.g. a Map, and then for some reason, during SSR, change that\n // to `undefined`. When trying to hydrate, we want to override the Map with `undefined`.\n target[key] = mergeReactiveObjects(targetValue, subPatch);\n }\n else {\n // @ts-expect-error: subPatch is a valid value\n target[key] = subPatch;\n }\n }\n return target;\n}\nconst skipHydrateSymbol = (process.env.NODE_ENV !== 'production')\n ? Symbol('pinia:skipHydration')\n : /* istanbul ignore next */ Symbol();\n/**\n * Tells Pinia to skip the hydration process of a given object. This is useful in setup stores (only) when you return a\n * stateful object in the store but it isn't really state. e.g. returning a router instance in a setup store.\n *\n * @param obj - target object\n * @returns obj\n */\nfunction skipHydrate(obj) {\n return Object.defineProperty(obj, skipHydrateSymbol, {});\n}\n/**\n * Returns whether a value should be hydrated\n *\n * @param obj - target variable\n * @returns true if `obj` should be hydrated\n */\nfunction shouldHydrate(obj) {\n return !isPlainObject(obj) || !obj.hasOwnProperty(skipHydrateSymbol);\n}\nconst { assign } = Object;\nfunction isComputed(o) {\n return !!(isRef(o) && o.effect);\n}\nfunction createOptionsStore(id, options, pinia, hot) {\n const { state, actions, getters } = options;\n const initialState = pinia.state.value[id];\n let store;\n function setup() {\n if (!initialState && (!(process.env.NODE_ENV !== 'production') || !hot)) {\n /* istanbul ignore if */\n if (isVue2) {\n set(pinia.state.value, id, state ? state() : {});\n }\n else {\n pinia.state.value[id] = state ? state() : {};\n }\n }\n // avoid creating a state in pinia.state.value\n const localState = (process.env.NODE_ENV !== 'production') && hot\n ? // use ref() to unwrap refs inside state TODO: check if this is still necessary\n toRefs(ref(state ? state() : {}).value)\n : toRefs(pinia.state.value[id]);\n return assign(localState, actions, Object.keys(getters || {}).reduce((computedGetters, name) => {\n if ((process.env.NODE_ENV !== 'production') && name in localState) {\n console.warn(`[🍍]: A getter cannot have the same name as another state property. Rename one of them. Found with \"${name}\" in store \"${id}\".`);\n }\n computedGetters[name] = markRaw(computed(() => {\n setActivePinia(pinia);\n // it was created just before\n const store = pinia._s.get(id);\n // allow cross using stores\n /* istanbul ignore if */\n if (isVue2 && !store._r)\n return;\n // @ts-expect-error\n // return getters![name].call(context, context)\n // TODO: avoid reading the getter while assigning with a global variable\n return getters[name].call(store, store);\n }));\n return computedGetters;\n }, {}));\n }\n store = createSetupStore(id, setup, options, pinia, hot, true);\n return store;\n}\nfunction createSetupStore($id, setup, options = {}, pinia, hot, isOptionsStore) {\n let scope;\n const optionsForPlugin = assign({ actions: {} }, options);\n /* istanbul ignore if */\n if ((process.env.NODE_ENV !== 'production') && !pinia._e.active) {\n throw new Error('Pinia destroyed');\n }\n // watcher options for $subscribe\n const $subscribeOptions = { deep: true };\n /* istanbul ignore else */\n if ((process.env.NODE_ENV !== 'production') && !isVue2) {\n $subscribeOptions.onTrigger = (event) => {\n /* istanbul ignore else */\n if (isListening) {\n debuggerEvents = event;\n // avoid triggering this while the store is being built and the state is being set in pinia\n }\n else if (isListening == false && !store._hotUpdating) {\n // let patch send all the events together later\n /* istanbul ignore else */\n if (Array.isArray(debuggerEvents)) {\n debuggerEvents.push(event);\n }\n else {\n console.error('🍍 debuggerEvents should be an array. This is most likely an internal Pinia bug.');\n }\n }\n };\n }\n // internal state\n let isListening; // set to true at the end\n let isSyncListening; // set to true at the end\n let subscriptions = [];\n let actionSubscriptions = [];\n let debuggerEvents;\n const initialState = pinia.state.value[$id];\n // avoid setting the state for option stores if it is set\n // by the setup\n if (!isOptionsStore && !initialState && (!(process.env.NODE_ENV !== 'production') || !hot)) {\n /* istanbul ignore if */\n if (isVue2) {\n set(pinia.state.value, $id, {});\n }\n else {\n pinia.state.value[$id] = {};\n }\n }\n const hotState = ref({});\n // avoid triggering too many listeners\n // https://github.com/vuejs/pinia/issues/1129\n let activeListener;\n function $patch(partialStateOrMutator) {\n let subscriptionMutation;\n isListening = isSyncListening = false;\n // reset the debugger events since patches are sync\n /* istanbul ignore else */\n if ((process.env.NODE_ENV !== 'production')) {\n debuggerEvents = [];\n }\n if (typeof partialStateOrMutator === 'function') {\n partialStateOrMutator(pinia.state.value[$id]);\n subscriptionMutation = {\n type: MutationType.patchFunction,\n storeId: $id,\n events: debuggerEvents,\n };\n }\n else {\n mergeReactiveObjects(pinia.state.value[$id], partialStateOrMutator);\n subscriptionMutation = {\n type: MutationType.patchObject,\n payload: partialStateOrMutator,\n storeId: $id,\n events: debuggerEvents,\n };\n }\n const myListenerId = (activeListener = Symbol());\n nextTick().then(() => {\n if (activeListener === myListenerId) {\n isListening = true;\n }\n });\n isSyncListening = true;\n // because we paused the watcher, we need to manually call the subscriptions\n triggerSubscriptions(subscriptions, subscriptionMutation, pinia.state.value[$id]);\n }\n const $reset = isOptionsStore\n ? function $reset() {\n const { state } = options;\n const newState = state ? state() : {};\n // we use a patch to group all changes into one single subscription\n this.$patch(($state) => {\n // @ts-expect-error: FIXME: shouldn't error?\n assign($state, newState);\n });\n }\n : /* istanbul ignore next */\n (process.env.NODE_ENV !== 'production')\n ? () => {\n throw new Error(`🍍: Store \"${$id}\" is built using the setup syntax and does not implement $reset().`);\n }\n : noop;\n function $dispose() {\n scope.stop();\n subscriptions = [];\n actionSubscriptions = [];\n pinia._s.delete($id);\n }\n /**\n * Helper that wraps function so it can be tracked with $onAction\n * @param fn - action to wrap\n * @param name - name of the action\n */\n const action = (fn, name = '') => {\n if (ACTION_MARKER in fn) {\n fn[ACTION_NAME] = name;\n return fn;\n }\n const wrappedAction = function () {\n setActivePinia(pinia);\n const args = Array.from(arguments);\n const afterCallbackList = [];\n const onErrorCallbackList = [];\n function after(callback) {\n afterCallbackList.push(callback);\n }\n function onError(callback) {\n onErrorCallbackList.push(callback);\n }\n // @ts-expect-error\n triggerSubscriptions(actionSubscriptions, {\n args,\n name: wrappedAction[ACTION_NAME],\n store,\n after,\n onError,\n });\n let ret;\n try {\n ret = fn.apply(this && this.$id === $id ? this : store, args);\n // handle sync errors\n }\n catch (error) {\n triggerSubscriptions(onErrorCallbackList, error);\n throw error;\n }\n if (ret instanceof Promise) {\n return ret\n .then((value) => {\n triggerSubscriptions(afterCallbackList, value);\n return value;\n })\n .catch((error) => {\n triggerSubscriptions(onErrorCallbackList, error);\n return Promise.reject(error);\n });\n }\n // trigger after callbacks\n triggerSubscriptions(afterCallbackList, ret);\n return ret;\n };\n wrappedAction[ACTION_MARKER] = true;\n wrappedAction[ACTION_NAME] = name; // will be set later\n // @ts-expect-error: we are intentionally limiting the returned type to just Fn\n // because all the added properties are internals that are exposed through `$onAction()` only\n return wrappedAction;\n };\n const _hmrPayload = /*#__PURE__*/ markRaw({\n actions: {},\n getters: {},\n state: [],\n hotState,\n });\n const partialStore = {\n _p: pinia,\n // _s: scope,\n $id,\n $onAction: addSubscription.bind(null, actionSubscriptions),\n $patch,\n $reset,\n $subscribe(callback, options = {}) {\n const removeSubscription = addSubscription(subscriptions, callback, options.detached, () => stopWatcher());\n const stopWatcher = scope.run(() => watch(() => pinia.state.value[$id], (state) => {\n if (options.flush === 'sync' ? isSyncListening : isListening) {\n callback({\n storeId: $id,\n type: MutationType.direct,\n events: debuggerEvents,\n }, state);\n }\n }, assign({}, $subscribeOptions, options)));\n return removeSubscription;\n },\n $dispose,\n };\n /* istanbul ignore if */\n if (isVue2) {\n // start as non ready\n partialStore._r = false;\n }\n const store = reactive((process.env.NODE_ENV !== 'production') || ((((process.env.NODE_ENV !== 'production') || (typeof __VUE_PROD_DEVTOOLS__ !== 'undefined' && __VUE_PROD_DEVTOOLS__)) && !(process.env.NODE_ENV === 'test')) && IS_CLIENT)\n ? assign({\n _hmrPayload,\n _customProperties: markRaw(new Set()), // devtools custom properties\n }, partialStore\n // must be added later\n // setupStore\n )\n : partialStore);\n // store the partial store now so the setup of stores can instantiate each other before they are finished without\n // creating infinite loops.\n pinia._s.set($id, store);\n const runWithContext = (pinia._a && pinia._a.runWithContext) || fallbackRunWithContext;\n // TODO: idea create skipSerialize that marks properties as non serializable and they are skipped\n const setupStore = runWithContext(() => pinia._e.run(() => (scope = effectScope()).run(() => setup({ action }))));\n // overwrite existing actions to support $onAction\n for (const key in setupStore) {\n const prop = setupStore[key];\n if ((isRef(prop) && !isComputed(prop)) || isReactive(prop)) {\n // mark it as a piece of state to be serialized\n if ((process.env.NODE_ENV !== 'production') && hot) {\n set(hotState.value, key, toRef(setupStore, key));\n // createOptionStore directly sets the state in pinia.state.value so we\n // can just skip that\n }\n else if (!isOptionsStore) {\n // in setup stores we must hydrate the state and sync pinia state tree with the refs the user just created\n if (initialState && shouldHydrate(prop)) {\n if (isRef(prop)) {\n prop.value = initialState[key];\n }\n else {\n // probably a reactive object, lets recursively assign\n // @ts-expect-error: prop is unknown\n mergeReactiveObjects(prop, initialState[key]);\n }\n }\n // transfer the ref to the pinia state to keep everything in sync\n /* istanbul ignore if */\n if (isVue2) {\n set(pinia.state.value[$id], key, prop);\n }\n else {\n pinia.state.value[$id][key] = prop;\n }\n }\n /* istanbul ignore else */\n if ((process.env.NODE_ENV !== 'production')) {\n _hmrPayload.state.push(key);\n }\n // action\n }\n else if (typeof prop === 'function') {\n const actionValue = (process.env.NODE_ENV !== 'production') && hot ? prop : action(prop, key);\n // this a hot module replacement store because the hotUpdate method needs\n // to do it with the right context\n /* istanbul ignore if */\n if (isVue2) {\n set(setupStore, key, actionValue);\n }\n else {\n // @ts-expect-error\n setupStore[key] = actionValue;\n }\n /* istanbul ignore else */\n if ((process.env.NODE_ENV !== 'production')) {\n _hmrPayload.actions[key] = prop;\n }\n // list actions so they can be used in plugins\n // @ts-expect-error\n optionsForPlugin.actions[key] = prop;\n }\n else if ((process.env.NODE_ENV !== 'production')) {\n // add getters for devtools\n if (isComputed(prop)) {\n _hmrPayload.getters[key] = isOptionsStore\n ? // @ts-expect-error\n options.getters[key]\n : prop;\n if (IS_CLIENT) {\n const getters = setupStore._getters ||\n // @ts-expect-error: same\n (setupStore._getters = markRaw([]));\n getters.push(key);\n }\n }\n }\n }\n // add the state, getters, and action properties\n /* istanbul ignore if */\n if (isVue2) {\n Object.keys(setupStore).forEach((key) => {\n set(store, key, setupStore[key]);\n });\n }\n else {\n assign(store, setupStore);\n // allows retrieving reactive objects with `storeToRefs()`. Must be called after assigning to the reactive object.\n // Make `storeToRefs()` work with `reactive()` #799\n assign(toRaw(store), setupStore);\n }\n // use this instead of a computed with setter to be able to create it anywhere\n // without linking the computed lifespan to wherever the store is first\n // created.\n Object.defineProperty(store, '$state', {\n get: () => ((process.env.NODE_ENV !== 'production') && hot ? hotState.value : pinia.state.value[$id]),\n set: (state) => {\n /* istanbul ignore if */\n if ((process.env.NODE_ENV !== 'production') && hot) {\n throw new Error('cannot set hotState');\n }\n $patch(($state) => {\n // @ts-expect-error: FIXME: shouldn't error?\n assign($state, state);\n });\n },\n });\n // add the hotUpdate before plugins to allow them to override it\n /* istanbul ignore else */\n if ((process.env.NODE_ENV !== 'production')) {\n store._hotUpdate = markRaw((newStore) => {\n store._hotUpdating = true;\n newStore._hmrPayload.state.forEach((stateKey) => {\n if (stateKey in store.$state) {\n const newStateTarget = newStore.$state[stateKey];\n const oldStateSource = store.$state[stateKey];\n if (typeof newStateTarget === 'object' &&\n isPlainObject(newStateTarget) &&\n isPlainObject(oldStateSource)) {\n patchObject(newStateTarget, oldStateSource);\n }\n else {\n // transfer the ref\n newStore.$state[stateKey] = oldStateSource;\n }\n }\n // patch direct access properties to allow store.stateProperty to work as\n // store.$state.stateProperty\n set(store, stateKey, toRef(newStore.$state, stateKey));\n });\n // remove deleted state properties\n Object.keys(store.$state).forEach((stateKey) => {\n if (!(stateKey in newStore.$state)) {\n del(store, stateKey);\n }\n });\n // avoid devtools logging this as a mutation\n isListening = false;\n isSyncListening = false;\n pinia.state.value[$id] = toRef(newStore._hmrPayload, 'hotState');\n isSyncListening = true;\n nextTick().then(() => {\n isListening = true;\n });\n for (const actionName in newStore._hmrPayload.actions) {\n const actionFn = newStore[actionName];\n set(store, actionName, action(actionFn, actionName));\n }\n // TODO: does this work in both setup and option store?\n for (const getterName in newStore._hmrPayload.getters) {\n const getter = newStore._hmrPayload.getters[getterName];\n const getterValue = isOptionsStore\n ? // special handling of options api\n computed(() => {\n setActivePinia(pinia);\n return getter.call(store, store);\n })\n : getter;\n set(store, getterName, getterValue);\n }\n // remove deleted getters\n Object.keys(store._hmrPayload.getters).forEach((key) => {\n if (!(key in newStore._hmrPayload.getters)) {\n del(store, key);\n }\n });\n // remove old actions\n Object.keys(store._hmrPayload.actions).forEach((key) => {\n if (!(key in newStore._hmrPayload.actions)) {\n del(store, key);\n }\n });\n // update the values used in devtools and to allow deleting new properties later on\n store._hmrPayload = newStore._hmrPayload;\n store._getters = newStore._getters;\n store._hotUpdating = false;\n });\n }\n if ((((process.env.NODE_ENV !== 'production') || (typeof __VUE_PROD_DEVTOOLS__ !== 'undefined' && __VUE_PROD_DEVTOOLS__)) && !(process.env.NODE_ENV === 'test')) && IS_CLIENT) {\n const nonEnumerable = {\n writable: true,\n configurable: true,\n // avoid warning on devtools trying to display this property\n enumerable: false,\n };\n ['_p', '_hmrPayload', '_getters', '_customProperties'].forEach((p) => {\n Object.defineProperty(store, p, assign({ value: store[p] }, nonEnumerable));\n });\n }\n /* istanbul ignore if */\n if (isVue2) {\n // mark the store as ready before plugins\n store._r = true;\n }\n // apply all plugins\n pinia._p.forEach((extender) => {\n /* istanbul ignore else */\n if ((((process.env.NODE_ENV !== 'production') || (typeof __VUE_PROD_DEVTOOLS__ !== 'undefined' && __VUE_PROD_DEVTOOLS__)) && !(process.env.NODE_ENV === 'test')) && IS_CLIENT) {\n const extensions = scope.run(() => extender({\n store: store,\n app: pinia._a,\n pinia,\n options: optionsForPlugin,\n }));\n Object.keys(extensions || {}).forEach((key) => store._customProperties.add(key));\n assign(store, extensions);\n }\n else {\n assign(store, scope.run(() => extender({\n store: store,\n app: pinia._a,\n pinia,\n options: optionsForPlugin,\n })));\n }\n });\n if ((process.env.NODE_ENV !== 'production') &&\n store.$state &&\n typeof store.$state === 'object' &&\n typeof store.$state.constructor === 'function' &&\n !store.$state.constructor.toString().includes('[native code]')) {\n console.warn(`[🍍]: The \"state\" must be a plain object. It cannot be\\n` +\n `\\tstate: () => new MyClass()\\n` +\n `Found in store \"${store.$id}\".`);\n }\n // only apply hydrate to option stores with an initial state in pinia\n if (initialState &&\n isOptionsStore &&\n options.hydrate) {\n options.hydrate(store.$state, initialState);\n }\n isListening = true;\n isSyncListening = true;\n return store;\n}\n// allows unused stores to be tree shaken\n/*! #__NO_SIDE_EFFECTS__ */\nfunction defineStore(\n// TODO: add proper types from above\nidOrOptions, setup, setupOptions) {\n let id;\n let options;\n const isSetupStore = typeof setup === 'function';\n if (typeof idOrOptions === 'string') {\n id = idOrOptions;\n // the option store setup will contain the actual options in this case\n options = isSetupStore ? setupOptions : setup;\n }\n else {\n options = idOrOptions;\n id = idOrOptions.id;\n if ((process.env.NODE_ENV !== 'production') && typeof id !== 'string') {\n throw new Error(`[🍍]: \"defineStore()\" must be passed a store id as its first argument.`);\n }\n }\n function useStore(pinia, hot) {\n const hasContext = hasInjectionContext();\n pinia =\n // in test mode, ignore the argument provided as we can always retrieve a\n // pinia instance with getActivePinia()\n ((process.env.NODE_ENV === 'test') && activePinia && activePinia._testing ? null : pinia) ||\n (hasContext ? inject(piniaSymbol, null) : null);\n if (pinia)\n setActivePinia(pinia);\n if ((process.env.NODE_ENV !== 'production') && !activePinia) {\n throw new Error(`[🍍]: \"getActivePinia()\" was called but there was no active Pinia. Are you trying to use a store before calling \"app.use(pinia)\"?\\n` +\n `See https://pinia.vuejs.org/core-concepts/outside-component-usage.html for help.\\n` +\n `This will fail in production.`);\n }\n pinia = activePinia;\n if (!pinia._s.has(id)) {\n // creating the store registers it in `pinia._s`\n if (isSetupStore) {\n createSetupStore(id, setup, options, pinia);\n }\n else {\n createOptionsStore(id, options, pinia);\n }\n /* istanbul ignore else */\n if ((process.env.NODE_ENV !== 'production')) {\n // @ts-expect-error: not the right inferred type\n useStore._pinia = pinia;\n }\n }\n const store = pinia._s.get(id);\n if ((process.env.NODE_ENV !== 'production') && hot) {\n const hotId = '__hot:' + id;\n const newStore = isSetupStore\n ? createSetupStore(hotId, setup, options, pinia, true)\n : createOptionsStore(hotId, assign({}, options), pinia, true);\n hot._hotUpdate(newStore);\n // cleanup the state properties and the store from the cache\n delete pinia.state.value[hotId];\n pinia._s.delete(hotId);\n }\n if ((process.env.NODE_ENV !== 'production') && IS_CLIENT) {\n const currentInstance = getCurrentInstance();\n // save stores in instances to access them devtools\n if (currentInstance &&\n currentInstance.proxy &&\n // avoid adding stores that are just built for hot module replacement\n !hot) {\n const vm = currentInstance.proxy;\n const cache = '_pStores' in vm ? vm._pStores : (vm._pStores = {});\n cache[id] = store;\n }\n }\n // StoreGeneric cannot be casted towards Store\n return store;\n }\n useStore.$id = id;\n return useStore;\n}\n\nlet mapStoreSuffix = 'Store';\n/**\n * Changes the suffix added by `mapStores()`. Can be set to an empty string.\n * Defaults to `\"Store\"`. Make sure to extend the MapStoresCustomization\n * interface if you are using TypeScript.\n *\n * @param suffix - new suffix\n */\nfunction setMapStoreSuffix(suffix // could be 'Store' but that would be annoying for JS\n) {\n mapStoreSuffix = suffix;\n}\n/**\n * Allows using stores without the composition API (`setup()`) by generating an\n * object to be spread in the `computed` field of a component. It accepts a list\n * of store definitions.\n *\n * @example\n * ```js\n * export default {\n * computed: {\n * // other computed properties\n * ...mapStores(useUserStore, useCartStore)\n * },\n *\n * created() {\n * this.userStore // store with id \"user\"\n * this.cartStore // store with id \"cart\"\n * }\n * }\n * ```\n *\n * @param stores - list of stores to map to an object\n */\nfunction mapStores(...stores) {\n if ((process.env.NODE_ENV !== 'production') && Array.isArray(stores[0])) {\n console.warn(`[🍍]: Directly pass all stores to \"mapStores()\" without putting them in an array:\\n` +\n `Replace\\n` +\n `\\tmapStores([useAuthStore, useCartStore])\\n` +\n `with\\n` +\n `\\tmapStores(useAuthStore, useCartStore)\\n` +\n `This will fail in production if not fixed.`);\n stores = stores[0];\n }\n return stores.reduce((reduced, useStore) => {\n // @ts-expect-error: $id is added by defineStore\n reduced[useStore.$id + mapStoreSuffix] = function () {\n return useStore(this.$pinia);\n };\n return reduced;\n }, {});\n}\n/**\n * Allows using state and getters from one store without using the composition\n * API (`setup()`) by generating an object to be spread in the `computed` field\n * of a component.\n *\n * @param useStore - store to map from\n * @param keysOrMapper - array or object\n */\nfunction mapState(useStore, keysOrMapper) {\n return Array.isArray(keysOrMapper)\n ? keysOrMapper.reduce((reduced, key) => {\n reduced[key] = function () {\n // @ts-expect-error: FIXME: should work?\n return useStore(this.$pinia)[key];\n };\n return reduced;\n }, {})\n : Object.keys(keysOrMapper).reduce((reduced, key) => {\n // @ts-expect-error\n reduced[key] = function () {\n const store = useStore(this.$pinia);\n const storeKey = keysOrMapper[key];\n // for some reason TS is unable to infer the type of storeKey to be a\n // function\n return typeof storeKey === 'function'\n ? storeKey.call(this, store)\n : // @ts-expect-error: FIXME: should work?\n store[storeKey];\n };\n return reduced;\n }, {});\n}\n/**\n * Alias for `mapState()`. You should use `mapState()` instead.\n * @deprecated use `mapState()` instead.\n */\nconst mapGetters = mapState;\n/**\n * Allows directly using actions from your store without using the composition\n * API (`setup()`) by generating an object to be spread in the `methods` field\n * of a component.\n *\n * @param useStore - store to map from\n * @param keysOrMapper - array or object\n */\nfunction mapActions(useStore, keysOrMapper) {\n return Array.isArray(keysOrMapper)\n ? keysOrMapper.reduce((reduced, key) => {\n // @ts-expect-error\n reduced[key] = function (...args) {\n // @ts-expect-error: FIXME: should work?\n return useStore(this.$pinia)[key](...args);\n };\n return reduced;\n }, {})\n : Object.keys(keysOrMapper).reduce((reduced, key) => {\n // @ts-expect-error\n reduced[key] = function (...args) {\n // @ts-expect-error: FIXME: should work?\n return useStore(this.$pinia)[keysOrMapper[key]](...args);\n };\n return reduced;\n }, {});\n}\n/**\n * Allows using state and getters from one store without using the composition\n * API (`setup()`) by generating an object to be spread in the `computed` field\n * of a component.\n *\n * @param useStore - store to map from\n * @param keysOrMapper - array or object\n */\nfunction mapWritableState(useStore, keysOrMapper) {\n return Array.isArray(keysOrMapper)\n ? keysOrMapper.reduce((reduced, key) => {\n reduced[key] = {\n get() {\n return useStore(this.$pinia)[key];\n },\n set(value) {\n return (useStore(this.$pinia)[key] = value);\n },\n };\n return reduced;\n }, {})\n : Object.keys(keysOrMapper).reduce((reduced, key) => {\n reduced[key] = {\n get() {\n return useStore(this.$pinia)[keysOrMapper[key]];\n },\n set(value) {\n return (useStore(this.$pinia)[keysOrMapper[key]] = value);\n },\n };\n return reduced;\n }, {});\n}\n\n/**\n * Creates an object of references with all the state, getters, and plugin-added\n * state properties of the store. Similar to `toRefs()` but specifically\n * designed for Pinia stores so methods and non reactive properties are\n * completely ignored.\n *\n * @param store - store to extract the refs from\n */\nfunction storeToRefs(store) {\n // See https://github.com/vuejs/pinia/issues/852\n // It's easier to just use toRefs() even if it includes more stuff\n if (isVue2) {\n // @ts-expect-error: toRefs include methods and others\n return toRefs(store);\n }\n else {\n const rawStore = toRaw(store);\n const refs = {};\n for (const key in rawStore) {\n const value = rawStore[key];\n // There is no native method to check for a computed\n // https://github.com/vuejs/core/pull/4165\n if (value.effect) {\n // @ts-expect-error: too hard to type correctly\n refs[key] =\n // ...\n computed({\n get: () => store[key],\n set(value) {\n store[key] = value;\n },\n });\n }\n else if (isRef(value) || isReactive(value)) {\n // @ts-expect-error: the key is state or getter\n refs[key] =\n // ---\n toRef(store, key);\n }\n }\n return refs;\n }\n}\n\n/**\n * Vue 2 Plugin that must be installed for pinia to work. Note **you don't need\n * this plugin if you are using Nuxt.js**. Use the `buildModule` instead:\n * https://pinia.vuejs.org/ssr/nuxt.html.\n *\n * @example\n * ```js\n * import Vue from 'vue'\n * import { PiniaVuePlugin, createPinia } from 'pinia'\n *\n * Vue.use(PiniaVuePlugin)\n * const pinia = createPinia()\n *\n * new Vue({\n * el: '#app',\n * // ...\n * pinia,\n * })\n * ```\n *\n * @param _Vue - `Vue` imported from 'vue'.\n */\nconst PiniaVuePlugin = function (_Vue) {\n // Equivalent of\n // app.config.globalProperties.$pinia = pinia\n _Vue.mixin({\n beforeCreate() {\n const options = this.$options;\n if (options.pinia) {\n const pinia = options.pinia;\n // HACK: taken from provide(): https://github.com/vuejs/composition-api/blob/main/src/apis/inject.ts#L31\n /* istanbul ignore else */\n if (!this._provided) {\n const provideCache = {};\n Object.defineProperty(this, '_provided', {\n get: () => provideCache,\n set: (v) => Object.assign(provideCache, v),\n });\n }\n this._provided[piniaSymbol] = pinia;\n // propagate the pinia instance in an SSR friendly way\n // avoid adding it to nuxt twice\n /* istanbul ignore else */\n if (!this.$pinia) {\n this.$pinia = pinia;\n }\n pinia._a = this;\n if (IS_CLIENT) {\n // this allows calling useStore() outside of a component setup after\n // installing pinia's plugin\n setActivePinia(pinia);\n }\n if ((((process.env.NODE_ENV !== 'production') || (typeof __VUE_PROD_DEVTOOLS__ !== 'undefined' && __VUE_PROD_DEVTOOLS__)) && !(process.env.NODE_ENV === 'test')) && IS_CLIENT) {\n registerPiniaDevtools(pinia._a, pinia);\n }\n }\n else if (!this.$pinia && options.parent && options.parent.$pinia) {\n this.$pinia = options.parent.$pinia;\n }\n },\n destroyed() {\n delete this._pStores;\n },\n });\n};\n\nexport { MutationType, PiniaVuePlugin, acceptHMRUpdate, createPinia, defineStore, disposePinia, getActivePinia, mapActions, mapGetters, mapState, mapStores, mapWritableState, setActivePinia, setMapStoreSuffix, shouldHydrate, skipHydrate, storeToRefs };\n","\n\n\n\t
\n\t\t\n\t\t\n\t\t\n\t\t\t
{{ folderName }}
\n\t\t\t
\n\t\t\t\t{{ subname }}\n\t\t\t
\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t
\n\n\n\n\n\n","\n\n\n\t
\n\t\t
\n\t\t\t{{ t('photos', 'Media folders') }}\n\t\t
\n\t\t
\n\t\t\t{{ t('photos', 'Choose the folders from where photos and videos are shown.') }}\n\t\t
\n\n\n\n\n\n","/**\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { defineStore } from 'pinia'\nimport { computed, ref } from 'vue'\nimport filters from '../services/PhotosFilters/index.ts'\n\nexport default defineStore('filters', () => {\n\tconst selectedFilters = ref>(filters.reduce((acc, filter) => ({ ...acc, [filter.id]: [] }), {}))\n\n\tconst filtersQuery = computed(() => {\n\t\treturn Object.entries(selectedFilters.value)\n\t\t\t.filter(([, values]) => values.length > 0)\n\t\t\t.map(([key, values]) => filters.find((filter) => filter.id === key)?.getQuery(values))\n\t\t\t.join('\\n')\n\t})\n\n\treturn { selectedFilters, filtersQuery }\n})\n"],"names":["getDevtoolsGlobalHook","getTarget","isProxyAvailable","HOOK_SETUP","HOOK_PLUGIN_SETTINGS_SET","supported","perf","isPerformanceSupported","_a","now","ApiProxy","plugin","hook","defaultSettings","id","item","localSettingsSaveId","currentSettings","raw","data","value","pluginId","_target","prop","args","resolve","target","setupDevtoolsPlugin","pluginDescriptor","setupFn","descriptor","enableProxy","proxy","activePinia","setActivePinia","pinia","piniaSymbol","isPlainObject","o","MutationType","IS_CLIENT","_global","global","bom","blob","autoBom","download","url","name","opts","xhr","saveAs","corsEnabled","click","node","evt","_navigator","isMacOSWebView","downloadSaveAs","msSaveAs","fileSaverSaveAs","a","popup","force","isSafari","isChromeIOS","reader","toastMessage","message","type","piniaMessage","isPinia","checkClipboardAccess","checkNotFocusedError","error","actionGlobalCopyState","actionGlobalPasteState","loadStoresState","actionGlobalSaveState","fileInput","getFileOpener","openFile","reject","files","file","actionGlobalOpenStateFile","result","open","text","state","key","storeState","formatDisplay","display","PINIA_ROOT_LABEL","PINIA_ROOT_ID","formatStoreForInspectorTree","store","formatStoreForInspectorState","storeNames","storeMap","storeId","getters","getterName","formatEventData","events","event","formatMutationType","isTimelineActive","componentStateTypes","MUTATIONS_LAYER_ID","INSPECTOR_ID","assign$1","getStoreType","registerPiniaDevtools","app","api","nodeId","payload","ctx","piniaStores","toRaw","stores","inspectedStore","path","addStoreToDevtools","after","onError","groupId","runningActionId","activeAction","watch","unref","newValue","oldValue","eventData","hotUpdate","markRaw","newStore","$dispose","patchActionForGrouping","actionNames","wrapWithProxy","actions","storeActions","actionName","_actionId","trackedStore","retValue","devtoolsPlugin","options","originalHotUpdate","createPinia","scope","effectScope","ref","_p","noop","addSubscription","subscriptions","callback","detached","onCleanup","removeSubscription","idx","getCurrentScope","onScopeDispose","triggerSubscriptions","fallbackRunWithContext","fn","ACTION_MARKER","ACTION_NAME","mergeReactiveObjects","patchToApply","subPatch","targetValue","isRef","isReactive","skipHydrateSymbol","shouldHydrate","obj","assign","isComputed","createOptionsStore","hot","initialState","setup","set","localState","toRefs","computedGetters","computed","createSetupStore","$id","isOptionsStore","optionsForPlugin","$subscribeOptions","isListening","isSyncListening","actionSubscriptions","debuggerEvents","hotState","activeListener","$patch","partialStateOrMutator","subscriptionMutation","myListenerId","nextTick","$reset","newState","$state","action","wrappedAction","afterCallbackList","onErrorCallbackList","ret","_hmrPayload","partialStore","stopWatcher","reactive","setupStore","actionValue","nonEnumerable","p","extender","extensions","defineStore","idOrOptions","setupOptions","isSetupStore","useStore","hasContext","hasInjectionContext","inject","storeToRefs","PiniaVuePlugin","_Vue","provideCache","v","_sfc_main$1","defineComponent","NcButton","FolderOutline","Close","t","_sfc_main","PhotosFolder","Plus","FolderMultipleOutline","debounce","title","getFilePickerBuilder","nodes","logger","pickedFolder","index","folders","useFilterStore","selectedFilters","filters","acc","filter","filtersQuery","values"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5]}
\ No newline at end of file
diff --git a/js/photos-main.mjs b/js/photos-main.mjs
index 249bc497ca..6004f54961 100644
--- a/js/photos-main.mjs
+++ b/js/photos-main.mjs
@@ -1,2 +1,2 @@
-import{G as h,v as z,x as V,V as f,a as d,ab as L,c as n,w as S,A as E,a5 as D,z as H,a4 as R,ac as W,Q as G,f as j,t as r,k as x,s as _,h as U,i as v}from"./preload-helper-iHri5ttz.chunk.mjs";import{P as K,u as q,s as J,a as Q,c as X}from"./filters-6qrbp5yy.chunk.mjs";import{N as Y,a as Z,d as tt,m as et,e as ot,v as at,i as st,s as it,b as nt,r as B}from"./video-B7iCXJqN.chunk.mjs";import{n as l,ai as rt,K as $,aj as lt,ak as ct,ad as pt,C as ut,al as dt,am as mt,L as ft,$ as gt,ah as y,an as ht,ao as _t,q as vt,a3 as yt,l as g,H as b,i as Nt,p as I}from"./index-6_vkf3an.chunk.mjs";import{N as xt,u as St,A as bt,a as Bt,b as It}from"./NcFormBoxButton-BlS280R1-CT5HUra0.chunk.mjs";import{u as kt}from"./useHotKey-CPjpPwsD.chunk.mjs";import{n as N,y as Ft,H as At,M as Ct,z as wt,B as Lt,G as $t,V as Pt,J as Ot,T as Mt,K as Tt,S as zt,a as Vt,b as Et,L as Dt,l as Ht,N as Rt,I as Wt,O as Gt,t as jt,Q as Ut,R as Kt,U as qt,W as Jt,X as Qt,Y as Xt,Z as Yt,_ as Zt,h as te,$ as ee}from"./icons-BPrPKxzl.chunk.mjs";import{P as oe,a as ae}from"./PhotosFiltersInput-Rq4vPTbx.chunk.mjs";import{c as P}from"./createElementId-DhjFt1I9-B2HCdIOx.chunk.mjs";import{N as se}from"./NcIconToggleSwitch-0NTw7i-t-DOrRmNgh.chunk.mjs";import{d as ie}from"./index-K61t94YW.chunk.mjs";import"./index-DjIio1qt.chunk.mjs";import"./NcSelect-CHc1QupB-BHJEUvv_.chunk.mjs";import"./NcAvatar-DkAX4nqq-B0poB0w8.chunk.mjs";import"./NcActionButton-K4jUGMlW-Bs_jOwCM.chunk.mjs";import"./useModelMigration-EhAWvqDD-C15wbtL_.chunk.mjs";import"./NcVNodes-Cmft-jHc.chunk.mjs";import"./NcDateTimePicker-BnrbGiT7.chunk.mjs";import"./useFormatDateTime-DyMeKy1D.chunk.mjs";import"./NcDateTime-enXYuwj8-T7oCJafb.chunk.mjs";import"./collectionFetcher-DyDb1Dp2.chunk.mjs";const ne={name:"NcAppNavigationList"};var re=function(){var t=this,e=t._self._c;return e("ul",{staticClass:"app-navigation-list"},[t._t("default")],2)},le=[],ce=l(ne,re,le,!1,null,"058e6060");const pe=ce.exports,ue={name:"NcAppNavigation",components:{NcAppNavigationList:pe,NcAppNavigationToggle:xt},inject:{setHasAppNavigation:{default:()=>()=>f.util.warn("NcAppNavigation is not mounted inside NcContent, this is probably an error."),from:"NcContent:setHasAppNavigation"}},props:{ariaLabel:{type:String,default:""},ariaLabelledby:{type:String,default:""}},setup(){return{isMobile:ut(),isLegacy34:pt}},data(){return{open:!this.isMobile,focusTrap:null}},watch:{isMobile(t){this.open=!t,this.toggleFocusTrap()},open(t){this.toggleFocusTrap(),h("navigation-toggled",{open:t})}},mounted(){this.setHasAppNavigation(!0),V("toggle-navigation",this.toggleNavigationByEventBus),h("navigation-toggled",{open:this.open}),this.focusTrap=lt(this.$refs.appNavigationContainer,{allowOutsideClick:!0,clickOutsideDeactivates:()=>(this.isMobile&&(this.focusTrap.deactivate({returnFocus:!1}),this.toggleNavigation(!1)),!1),fallbackFocus:this.$refs.appNavigationContainer,trapStack:ct(),escapeDeactivates:!1}),this.toggleFocusTrap(),kt("n",this.onKeyDown,{prevent:!0,stop:!0})},unmounted(){this.setHasAppNavigation(!1),z("toggle-navigation",this.toggleNavigationByEventBus),this.focusTrap.deactivate()},methods:{async toggleNavigation(t){if(this.open===t){h("navigation-toggled",{open:this.open});return}this.open=typeof t>"u"?!this.open:t;const e=getComputedStyle(document.body),o=parseInt(e.getPropertyValue("--animation-quick"))||100;this.open&&(await this.$nextTick(),this.focusFirstElement()),setTimeout(()=>{h("navigation-toggled",{open:this.open})},1.5*o)},toggleNavigationByEventBus({open:t}){this.toggleNavigation(t)},toggleFocusTrap(){this.isMobile&&this.open?this.focusTrap.activate():this.focusTrap.deactivate()},handleEsc(){this.isMobile&&this.open&&this.toggleNavigation(!1)},focusFirstElement(){const t=rt(this.$refs.appNavigationContainer)[0];t&&(t.focus(),$.debug("Focusing first element in the navigation",{element:t}))},onKeyDown(t){if(t.key==="n"){if(!this.open){this.toggleNavigation(!0);return}this.isFocusWithinNavigation()&&this.toggleNavigation(!1)}},isFocusWithinNavigation(){const t=document.activeElement;return this.$refs.appNavigationContainer?.contains(t)}}};var de=function(){var t=this,e=t._self._c;return e("div",{ref:"appNavigationContainer",staticClass:"app-navigation",class:{"app-navigation--close":!t.open,"app-navigation--legacy":t.isLegacy34}},[e("nav",{staticClass:"app-navigation__content",attrs:{id:"app-navigation-vue","aria-hidden":t.open?"false":"true","aria-label":t.ariaLabel||void 0,"aria-labelledby":t.ariaLabelledby||void 0,inert:!t.open||void 0},on:{keydown:function(o){return!o.type.indexOf("key")&&t._k(o.keyCode,"esc",27,o.key,["Esc","Escape"])?null:t.handleEsc.apply(null,arguments)}}},[e("div",{staticClass:"app-navigation__search"},[t._t("search")],2),e("div",{staticClass:"app-navigation__body",class:{"app-navigation__body--no-list":!t.$scopedSlots.list}},[t._t("default")],2),t.$scopedSlots.list?e("NcAppNavigationList",{staticClass:"app-navigation__list"},[t._t("list")],2):t._e(),t._t("footer")],2),e("NcAppNavigationToggle",{attrs:{open:t.open},on:{"update:open":t.toggleNavigation}})],1)},me=[],fe=l(ue,de,me,!1,null,"58cc03e4");const ge=fe.exports,he=d({__name:"NcAppSettingsSection",props:{name:null,description:null,id:null,order:null},setup(t){const e=t,o=L(),{registerSection:a,unregisterSection:s}=St(),i=H(bt),c=n(()=>"settings-section_"+e.id);return S(()=>e.id,()=>{/^[a-z0-9\-_]+$/.test(e.id)||$.warn(`Invalid id prop: ${e.id}. Only alphanumeric, dash and underscore are allowed.`)},{immediate:!0}),S([()=>e.id,()=>e.name,()=>e.order],([m,p,u],[T,,])=>{s(T),a(m,p,u,o?.icon?.())}),E(()=>{a(e.id,e.name,e.order,o?.icon?.())}),D(()=>{s(e.id)}),{__sfc:!0,props:e,slots:o,registerSection:a,unregisterSection:s,legacy:i,htmlId:c}}});var _e=function(){var t=this,e=t._self._c,o=t._self._setupProxy;return e("section",{staticClass:"app-settings-section",class:{"app-settings-section__legacy":o.legacy},attrs:{id:o.htmlId,"aria-labelledby":`${o.htmlId}--label`}},[e("h3",{staticClass:"app-settings-section__name",attrs:{id:`${o.htmlId}--label`}},[t._v(" "+t._s(t.name)+" ")]),e("div",{staticClass:"app-settings-section__description"},[t._v(" "+t._s(t.description)+" ")]),e("div",{staticClass:"app-settings-section__content"},[t._t("default")],2),t._e()],2)},ve=[],ye=l(he,_e,ve,!1,null,"06cd755d");const Ne=ye.exports,xe=d({__name:"NcFormBox",props:{row:{type:Boolean,default:!1}},setup(t){const e=W();return R(dt,{isInFormBox:!0,formBoxItemClass:e.ncFormBox__item}),{__sfc:!0,style:e}}}),Se="_ncFormBox_OjStT",be="_ncFormBox_row_Qlk-j",Be="_ncFormBox__item_ayS-H",Ie="_ncFormBox_col_VaIn3",ke={"material-design-icon":"_material-design-icon_zDurS",ncFormBox:Se,ncFormBox_row:be,ncFormBox__item:Be,ncFormBox_col:Ie};var Fe=function(){var t=this,e=t._self._c;return t._self._setupProxy,e("div",{class:[t.$style.ncFormBox,t.row?t.$style.ncFormBox_row:t.$style.ncFormBox_col]},[t._t("default",null,{itemClass:t.$style.ncFormBox__item})],2)},Ae=[];const k={$style:ke};function Ce(t){for(var e in k)this[e]=k[e]}var we=l(xe,Fe,Ae,!1,Ce,null);const O=we.exports,Le={inheritAttrs:!1},$e=d({...Le,__name:"NcFormBoxItem",props:{tag:null,label:{default:void 0},description:{default:void 0},invertedAccent:{type:Boolean,default:!1},itemClasses:{default:void 0}},emits:["click"],setup(t){const e=t,o=L(),{formBoxItemClass:a}=mt(),s=P();return{__sfc:!0,props:e,slots:o,formBoxItemClass:a,descriptionId:s,hasDescription:()=>!!e.description||!!o.description,isLegacy32:ft}}}),Pe="_formBoxItem_TcR5F",Oe="_formBoxItem_legacy_z5RqX",Me="_formBoxItem_inverted_MA48p",Te="_formBoxItem__element_bHzJ1",ze="_formBoxItem__description_pBmbK",Ve="_formBoxItem__content_SawhG",Ee="_formBoxItem__icon_4AJit",De={"material-design-icon":"_material-design-icon_4S2t9",formBoxItem:Pe,formBoxItem_legacy:Oe,formBoxItem_inverted:Me,formBoxItem__element:Te,formBoxItem__description:ze,formBoxItem__content:Ve,formBoxItem__icon:Ee};var He=function(){var t=this,e=t._self._c,o=t._self._setupProxy;return e("div",{class:[t.$style.formBoxItem,o.formBoxItemClass,{[t.$style.formBoxItem_inverted]:t.invertedAccent&&o.hasDescription(),[t.$style.formBoxItem_legacy]:o.isLegacy32}]},[e("span",{class:t.$style.formBoxItem__content},[e(t.tag,t._b({tag:"component",class:[t.$style.formBoxItem__element,t.itemClasses],on:{click:function(a){return t.$emit("click",a)}}},"component",t.$attrs,!1),[t._t("default",function(){return[t._v(" "+t._s(t.label||"⚠️ Label is missing")+" ")]},{descriptionId:o.descriptionId})],2),o.hasDescription()?e("span",{class:t.$style.formBoxItem__description,attrs:{id:o.descriptionId}},[t._t("description",function(){return[t._v(" "+t._s(t.description)+" ")]})],2):t._e()],1),e("span",{class:t.$style.formBoxItem__icon},[t._t("icon",function(){return[t._v(" ⚠️ Icon is missing ")]},{descriptionId:o.descriptionId})],2)])},Re=[];const F={$style:De};function We(t){for(var e in F)this[e]=F[e]}var Ge=l($e,He,Re,!1,We,null);const M=Ge.exports,je={model:{prop:"modelValue",event:"update:modelValue"}},Ue=d({...je,__name:"NcFormBoxSwitch",props:{label:{default:void 0},description:{default:void 0},disabled:{type:Boolean,default:!1},modelValue:{type:Boolean}},emits:["enable","disable","update:modelValue"],setup(t,{emit:e}){const o=t,a=gt(o,"modelValue",e,{passive:!0}),s=P();return S(a,()=>{a.value?e("enable"):e("disable")},{flush:"sync"}),{__sfc:!0,props:o,emit:e,model:a,inputId:s,NcFormBoxItem:M,NcIconToggleSwitch:se}}}),Ke="_formBoxSwitch__input_TjVsq",qe={"material-design-icon":"_material-design-icon_32xhW",formBoxSwitch__input:Ke};var Je=function(){var t=this,e=t._self._c,o=t._self._setupProxy;return e(o.NcFormBoxItem,{attrs:{tag:"label",for:o.inputId},scopedSlots:t._u([t.$slots.default||t.label?{key:"default",fn:function(){return[t._t("default",function(){return[t._v(" "+t._s(t.label)+" ")]})]},proxy:!0}:null,t.$slots.description||t.description?{key:"description",fn:function(){return[t._t("description",function(){return[t._v(" "+t._s(t.description)+" ")]})]},proxy:!0}:null,{key:"icon",fn:function({descriptionId:a}){return[e("input",{directives:[{name:"model",rawName:"v-model",value:o.model,expression:"model"}],class:t.$style.formBoxSwitch__input,attrs:{id:o.inputId,type:"checkbox",role:"switch","aria-describedby":a,disabled:t.disabled},domProps:{checked:Array.isArray(o.model)?t._i(o.model,null)>-1:o.model},on:{change:function(s){var i=o.model,c=s.target,m=!!c.checked;if(Array.isArray(i)){var p=null,u=t._i(i,p);c.checked?u<0&&(o.model=i.concat([p])):u>-1&&(o.model=i.slice(0,u).concat(i.slice(u+1)))}else o.model=m}}}),e(o.NcIconToggleSwitch,{attrs:{checked:t.modelValue,inline:""}})]}}],null,!0)})},Qe=[];const A={$style:qe};function Xe(t){for(var e in A)this[e]=A[e]}var Ye=l(Ue,Je,Qe,!1,Xe,null);const Ze=Ye.exports,to={name:"CroppedLayoutSettings",components:{NcFormBoxSwitch:Ze,NcFormBox:O},computed:{croppedLayout(){return this.$store.state.userConfig.croppedLayout}},methods:{updateSetting(t){this.$store.dispatch("updateUserConfig",{key:"croppedLayout",value:t})}}};var eo=function(){var t=this,e=t._self._c;return e("NcFormBox",[e("NcFormBoxSwitch",{attrs:{"model-value":t.croppedLayout,label:t.t("photos","Squared photos view")},on:{"update:modelValue":t.updateSetting}})],1)},oo=[],ao=N(to,eo,oo,!1,null,null);const so=ao.exports;function io(t){const e=G(t),o="$router"in j().proxy.$root,a=n(()=>o&&e.to?"RouterLink":e.href?"a":"button"),s=n(()=>a.value==="RouterLink"||a.value==="a"),i=n(()=>a.value==="a"),c=n(()=>a.value==="RouterLink"),m=n(()=>a.value==="button"),p=n(()=>{if(a.value==="RouterLink")return{to:e.to,activeClass:"active",...e.additionalAttrs?.("RouterLink")??{}};if(a.value==="a")return{href:e.href,target:e.target,download:e.download||void 0,rel:"nofollow noreferrer noopener",...e.additionalAttrs?.("a")??{}};if(a.value==="button")return{type:e.type||"button",disabled:e.disabled,...e.additionalAttrs?.("button")??{}}});return{tag:a,isLink:s,isHyperLink:i,isRouterLink:c,isButton:m,attrs:p}}const no=d({__name:"NcFormBoxButton",props:{label:{default:void 0},description:{default:void 0},invertedAccent:{type:Boolean,default:!1},to:{default:void 0},href:{default:void 0},target:{default:void 0},disabled:{type:Boolean,default:!1}},emits:["click"],setup(t){const e=t,{tag:o,attrs:a,isLink:s}=io({to:y(()=>e.to),href:y(()=>e.href),target:y(()=>e.target),disabled:y(()=>e.disabled)}),i=n(()=>{if(s.value)return e.target==="_blank"?ht:_t});return{__sfc:!0,props:e,tag:o,attrs:a,isLink:s,icon:i,NcFormBoxItem:M,NcIconSvgWrapper:vt}}}),ro="_formBoxButton_DGIeJ",lo={"material-design-icon":"_material-design-icon_nhhXo",formBoxButton:ro};var co=function(){var t=this,e=t._self._c,o=t._self._setupProxy;return e(o.NcFormBoxItem,t._b({attrs:{tag:o.tag,"item-classes":["button-vue",t.$style.formBoxButton],"inverted-accent":t.invertedAccent,tabindex:"0"},on:{click:function(a){return t.$emit("click",a)}},scopedSlots:t._u([t.$scopedSlots.default||t.label?{key:"default",fn:function(){return[t._t("default",function(){return[t._v(" "+t._s(t.label)+" ")]})]},proxy:!0}:null,t.$scopedSlots.description||t.description?{key:"description",fn:function(){return[t._t("description",function(){return[t._v(" "+t._s(t.description)+" ")]})]},proxy:!0}:null,t.$scopedSlots.icon||o.icon?{key:"icon",fn:function(){return[t._t("icon",function(){return[o.icon?e(o.NcIconSvgWrapper,{attrs:{path:o.icon,inline:""}}):t._e()]})]},proxy:!0}:null],null,!0)},"NcFormBoxItem",o.attrs,!1))},po=[];const C={$style:lo};function uo(t){for(var e in C)this[e]=C[e]}var mo=l(no,co,po,!1,uo,null);const fo=mo.exports,go=d({name:"PhotosUploadLocationSettings",components:{NcFormBox:O,NcFormBoxButton:fo,FolderOpenOutline:Ft},data(){return{HomeOutline:At}},computed:{photosLocation(){return this.$store.state.userConfig.photosLocation},photosLocationName(){return this.photosLocation==="/"?r("photos","Home"):this.photosLocation}},methods:{debounceSelectPhotosFolder:ie(function(){this.selectPhotosFolder()}),async selectPhotosFolder(){const t=await this.openFilePicker(r("photos","Select the default upload location for your media"));this.updatePhotosFolder(t)},async openFilePicker(t){return yt(t).setMultiSelect(!1).addMimeTypeFilter("httpd/unix-directory").allowDirectories().startAt(this.photosLocation).addButton({label:r("photos","Pick folder"),callback:e=>g.debug("Picked",{nodes:e})}).build().pick()},updatePhotosFolder(t){this.$store.dispatch("updateUserConfig",{key:"photosLocation",value:t})},t:r}});var ho=function(){var t=this,e=t._self._c;return t._self._setupProxy,e("div",{staticClass:"photos-location"},[e("NcFormBox",[e("NcFormBoxButton",{attrs:{description:t.photosLocationName,"inverted-accent":!0},on:{click:t.debounceSelectPhotosFolder},scopedSlots:t._u([{key:"icon",fn:function(){return[e("FolderOpenOutline",{attrs:{size:20}})]},proxy:!0}])},[t._v(" "+t._s(t.t("photos","Upload folder"))+" ")])],1)],1)},_o=[],vo=N(go,ho,_o,!1,null,"872fbb5c");const yo=vo.exports,No={name:"SettingsDialog",components:{NcAppSettingsDialog:Bt,NcAppSettingsSection:Ne,CroppedLayoutSettings:so,PhotosSourceLocationsSettings:K,PhotosUploadLocationSettings:yo},props:{open:{type:Boolean,default:!1}},methods:{onClose(){this.$emit("update:open",!1)},t:r}};var xo=function(){var t=this,e=t._self._c;return e("NcAppSettingsDialog",{attrs:{open:t.open,name:t.t("photos","Photos settings"),legacy:!1},on:{"update:open":t.onClose}},[e("NcAppSettingsSection",{attrs:{id:"layout-settings",name:t.t("photos","General")}},[e("PhotosSourceLocationsSettings"),e("PhotosUploadLocationSettings"),e("CroppedLayoutSettings")],1)],1)},So=[],bo=N(No,xo,So,!1,null,null);const Bo=bo.exports,w=b("photos","appStoreEnabled",!1),Io={name:"PhotosApp",components:{AccountBoxMultiple:ee,AccountBoxMultipleOutline:te,CogOutline:Zt,CalendarToday:Yt,CalendarTodayOutline:Xt,Camera:Qt,CameraOutline:Jt,AccountGroup:qt,AccountGroupOutline:Kt,Folder:Ut,FolderOutline:jt,ImageMultiple:Gt,ImageMultipleOutline:Wt,ImageIcon:Rt,ImageOutline:Ht,ShareVariant:Dt,ShareVariantOutline:Et,Star:Vt,StarOutline:zt,Tag:Tt,TagOutline:Mt,VideoIcon:Ot,VideoOutline:Pt,MapIcon:$t,MapOutline:Lt,MapMarker:wt,MapMarkerOutline:Ct,NcAppContent:Z,NcAppNavigation:ge,NcAppNavigationItem:It,NcButton:Nt,NcContent:Y,SettingsDialog:Bo,PhotosFiltersInput:ae,PhotosFiltersDisplay:oe},setup(){const t=q(),{selectedFilters:e}=J(t);return{selectedFilters:e}},data(){return{svgplaceholder:it,imgplaceholder:st,videoplaceholder:at,areTagsInstalled:ot,showLocationMenuEntry:_()===null?!1:_().isAdmin&&w||et,showPeopleMenuEntry:_()===null?!1:_().isAdmin&&b("photos","showPeopleMenuEntry",!0)&&w||tt,openedSettings:!1}},computed:{isTimelineView(){return["all_media","photos","videos"].includes(this.$store.state.route.name||"")}},async beforeMount(){const t=b("photos","nomedia-paths",[]);this.$store.dispatch("setNomediaPaths",t),g.debug("Known .nomedia and .noimage paths",{files:t}),"serviceWorker"in navigator?window.addEventListener("load",()=>{navigator.serviceWorker.register(x("/apps/photos/service-worker.js",{},{noRewrite:!0}),{scope:x("/apps/photos")}).then(e=>{g.debug("SW registered: ",{registration:e})}).catch(e=>{g.error("SW registration failed: ",{registrationError:e})})}):g.debug("Service Worker is not enabled on this browser.")},beforeDestroy(){window.removeEventListener("load",()=>{navigator.serviceWorker.register(x("/apps/photos/service-worker.js",{},{noRewrite:!0}))})},methods:{showSettings(){this.openedSettings=!0},selectFilter(t){this.selectedFilters[t.filterId].push(t.value)},deselectFilter(t){const e=this.selectedFilters[t.filterId].indexOf(t.value);e!==-1&&this.selectedFilters[t.filterId].splice(e,1)},t:r}};var ko=function(){var t=this,e=t._self._c;return e("NcContent",{attrs:{"app-name":"photos"}},[e("NcAppNavigation",{attrs:{"aria-label":t.t("photos","Photos")},scopedSlots:t._u([t.isTimelineView?{key:"search",fn:function(){return[e("PhotosFiltersInput",{attrs:{"selected-filters":t.selectedFilters},on:{"select-filter":t.selectFilter}}),e("PhotosFiltersDisplay",{attrs:{"selected-filters":t.selectedFilters},on:{"deselect-filter":t.deselectFilter}})]},proxy:!0}:null,{key:"list",fn:function(){return[e("NcAppNavigationItem",{staticClass:"app-navigation__all_media",attrs:{to:{name:"all_media"},name:t.t("photos","All media"),"data-id-app-nav-item":"all-media",exact:""},scopedSlots:t._u([{key:"icon",fn:function({active:o}){return[o?e("ImageIcon",{attrs:{size:20}}):e("ImageOutline",{attrs:{size:20}})]}}])}),e("NcAppNavigationItem",{attrs:{to:"/photos",name:t.t("photos","Photos"),"data-id-app-nav-item":"photos"},scopedSlots:t._u([{key:"icon",fn:function({active:o}){return[o?e("Camera",{attrs:{size:20}}):e("CameraOutline",{attrs:{size:20}})]}}])}),e("NcAppNavigationItem",{attrs:{to:"/videos",name:t.t("photos","Videos"),"data-id-app-nav-item":"videos"},scopedSlots:t._u([{key:"icon",fn:function({active:o}){return[o?e("VideoIcon",{attrs:{size:20}}):e("VideoOutline",{attrs:{size:20}})]}}])}),e("NcAppNavigationItem",{attrs:{to:{name:"albums"},name:t.t("photos","Albums"),"data-id-app-nav-item":"albums"},scopedSlots:t._u([{key:"icon",fn:function({active:o}){return[o?e("ImageMultiple",{attrs:{size:20}}):e("ImageMultipleOutline",{attrs:{size:20}})]}}])}),e("NcAppNavigationItem",{attrs:{to:{name:"sharedAlbums"},name:t.t("photos","Collaborative albums"),"data-id-app-nav-item":"sharedalbums"},scopedSlots:t._u([{key:"icon",fn:function({active:o}){return[o?e("AccountGroup",{attrs:{size:20}}):e("AccountGroupOutline",{attrs:{size:20}})]}}])}),t.showPeopleMenuEntry?e("NcAppNavigationItem",{attrs:{to:{name:"faces"},name:t.t("photos","People"),"data-id-app-nav-item":"faces"},scopedSlots:t._u([{key:"icon",fn:function({active:o}){return[o?e("AccountBoxMultiple",{attrs:{size:20}}):e("AccountBoxMultipleOutline",{attrs:{size:20}})]}}],null,!1,3295904880)}):t._e(),e("NcAppNavigationItem",{attrs:{to:{name:"folders"},name:t.t("photos","Folders"),"data-id-app-nav-item":"folders"},scopedSlots:t._u([{key:"icon",fn:function({active:o}){return[o?e("Folder",{attrs:{size:20}}):e("FolderOutline",{attrs:{size:20}})]}}])}),e("NcAppNavigationItem",{attrs:{to:"/favorites",name:t.t("photos","Favorites"),"data-id-app-nav-item":"favorites"},scopedSlots:t._u([{key:"icon",fn:function({active:o}){return[o?e("Star",{attrs:{size:20}}):e("StarOutline",{attrs:{size:20}})]}}])}),e("NcAppNavigationItem",{attrs:{to:{name:"thisday"},name:t.t("photos","On this day"),"data-id-app-nav-item":"this-day"},scopedSlots:t._u([{key:"icon",fn:function({active:o}){return[o?e("CalendarToday",{attrs:{size:20}}):e("CalendarTodayOutline",{attrs:{size:20}})]}}])}),e("NcAppNavigationItem",{attrs:{to:{name:"shared"},name:t.t("photos","Shared with you"),"data-id-app-nav-item":"shared"},scopedSlots:t._u([{key:"icon",fn:function({active:o}){return[o?e("ShareVariant",{attrs:{size:20}}):e("ShareVariantOutline",{attrs:{size:20}})]}}])}),t.areTagsInstalled?e("NcAppNavigationItem",{attrs:{to:{name:"tags"},name:t.t("photos","Tags"),"data-id-app-nav-item":"tags"},scopedSlots:t._u([{key:"icon",fn:function({active:o}){return[o?e("Tag",{attrs:{size:20}}):e("TagOutline",{attrs:{size:20}})]}}],null,!1,346180464)}):t._e(),e("NcAppNavigationItem",{attrs:{to:{name:"places"},name:t.t("photos","Places"),"data-id-app-nav-item":"places"},scopedSlots:t._u([{key:"icon",fn:function({active:o}){return[o?e("MapMarker",{attrs:{size:20}}):e("MapMarkerOutline",{attrs:{size:20}})]}}])}),t.showLocationMenuEntry?e("NcAppNavigationItem",{attrs:{to:{name:"maps"},name:t.t("photos","Map"),"data-id-app-nav-item":"maps"},scopedSlots:t._u([{key:"icon",fn:function({active:o}){return[o?e("MapIcon",{attrs:{size:20}}):e("MapOutline",{attrs:{size:20}})]}}],null,!1,257739259)}):t._e()]},proxy:!0},{key:"footer",fn:function(){return[e("div",{staticClass:"app-navigation__footer"},[e("NcButton",{attrs:{variant:"tertiary",alignment:"start",wide:""},on:{click:t.showSettings},scopedSlots:t._u([{key:"icon",fn:function(){return[e("CogOutline",{attrs:{size:20}})]},proxy:!0}])},[t._v(" "+t._s(t.t("photos","Photos settings"))+" ")])],1)]},proxy:!0}],null,!0)}),e("NcAppContent",[e("RouterView"),e("span",{staticClass:"hidden-visually",attrs:{role:"none"},domProps:{innerHTML:t._s(t.svgplaceholder)}}),e("span",{staticClass:"hidden-visually",attrs:{role:"none"},domProps:{innerHTML:t._s(t.imgplaceholder)}}),e("span",{staticClass:"hidden-visually",attrs:{role:"none"},domProps:{innerHTML:t._s(t.videoplaceholder)}})],1),e("SettingsDialog",{attrs:{open:t.openedSettings},on:{"update:open":function(o){t.openedSettings=o}}})],1)},Fo=[],Ao=N(Io,ko,Fo,!1,null,null);const Co=Ao.exports;nt.sync(I,B),f.prototype.t=r,f.prototype.n=U,v("nc:metadata-photos-size"),v("nc:metadata-files-live-photo"),v("nc:metadata-blurhash"),v("nc:metadata-photos-original_date_time"),f.use(Q),new f({el:"#content",name:"PhotosRoot",router:B,store:I,pinia:X(),render:t=>t(Co)});
+import{G as h,v as z,x as V,V as f,a as d,ab as L,c as n,w as S,A as E,a5 as D,z as H,a4 as R,ac as W,Q as G,f as j,t as r,k as x,s as _,h as U,i as v}from"./preload-helper-iHri5ttz.chunk.mjs";import{P as K,u as q,s as J,a as Q,c as X}from"./filters-DiWkMIga.chunk.mjs";import{N as Y,a as Z,d as tt,m as et,e as ot,v as at,i as st,s as it,b as nt,r as B}from"./video-CFxEyJH4.chunk.mjs";import{n as l,ai as rt,K as $,aj as lt,ak as ct,ad as pt,C as ut,al as dt,am as mt,L as ft,$ as gt,ah as y,an as ht,ao as _t,q as vt,a3 as yt,l as g,H as b,i as Nt,p as I}from"./index-6_vkf3an.chunk.mjs";import{N as xt,u as St,A as bt,a as Bt,b as It}from"./NcFormBoxButton-BlS280R1-SHqQNUOS.chunk.mjs";import{u as kt}from"./useHotKey-CPjpPwsD.chunk.mjs";import{n as N,y as Ft,H as At,M as Ct,z as wt,B as Lt,G as $t,V as Pt,J as Ot,T as Mt,K as Tt,S as zt,a as Vt,b as Et,L as Dt,l as Ht,N as Rt,I as Wt,O as Gt,t as jt,Q as Ut,R as Kt,U as qt,W as Jt,X as Qt,Y as Xt,Z as Yt,_ as Zt,h as te,$ as ee}from"./icons-BPrPKxzl.chunk.mjs";import{P as oe,a as ae}from"./PhotosFiltersInput-BJ4kTX4C.chunk.mjs";import{c as P}from"./createElementId-DhjFt1I9-B2HCdIOx.chunk.mjs";import{N as se}from"./NcIconToggleSwitch-0NTw7i-t-DOrRmNgh.chunk.mjs";import{d as ie}from"./index-K61t94YW.chunk.mjs";import"./index-DjIio1qt.chunk.mjs";import"./NcSelect-CHc1QupB-BHJEUvv_.chunk.mjs";import"./NcAvatar-DkAX4nqq-B0poB0w8.chunk.mjs";import"./NcActionButton-K4jUGMlW-Bs_jOwCM.chunk.mjs";import"./useModelMigration-EhAWvqDD-C15wbtL_.chunk.mjs";import"./NcVNodes-Cmft-jHc.chunk.mjs";import"./NcDateTimePicker-BnrbGiT7.chunk.mjs";import"./useFormatDateTime-DyMeKy1D.chunk.mjs";import"./NcDateTime-enXYuwj8-T7oCJafb.chunk.mjs";import"./collectionFetcher-DyDb1Dp2.chunk.mjs";const ne={name:"NcAppNavigationList"};var re=function(){var t=this,e=t._self._c;return e("ul",{staticClass:"app-navigation-list"},[t._t("default")],2)},le=[],ce=l(ne,re,le,!1,null,"058e6060");const pe=ce.exports,ue={name:"NcAppNavigation",components:{NcAppNavigationList:pe,NcAppNavigationToggle:xt},inject:{setHasAppNavigation:{default:()=>()=>f.util.warn("NcAppNavigation is not mounted inside NcContent, this is probably an error."),from:"NcContent:setHasAppNavigation"}},props:{ariaLabel:{type:String,default:""},ariaLabelledby:{type:String,default:""}},setup(){return{isMobile:ut(),isLegacy34:pt}},data(){return{open:!this.isMobile,focusTrap:null}},watch:{isMobile(t){this.open=!t,this.toggleFocusTrap()},open(t){this.toggleFocusTrap(),h("navigation-toggled",{open:t})}},mounted(){this.setHasAppNavigation(!0),V("toggle-navigation",this.toggleNavigationByEventBus),h("navigation-toggled",{open:this.open}),this.focusTrap=lt(this.$refs.appNavigationContainer,{allowOutsideClick:!0,clickOutsideDeactivates:()=>(this.isMobile&&(this.focusTrap.deactivate({returnFocus:!1}),this.toggleNavigation(!1)),!1),fallbackFocus:this.$refs.appNavigationContainer,trapStack:ct(),escapeDeactivates:!1}),this.toggleFocusTrap(),kt("n",this.onKeyDown,{prevent:!0,stop:!0})},unmounted(){this.setHasAppNavigation(!1),z("toggle-navigation",this.toggleNavigationByEventBus),this.focusTrap.deactivate()},methods:{async toggleNavigation(t){if(this.open===t){h("navigation-toggled",{open:this.open});return}this.open=typeof t>"u"?!this.open:t;const e=getComputedStyle(document.body),o=parseInt(e.getPropertyValue("--animation-quick"))||100;this.open&&(await this.$nextTick(),this.focusFirstElement()),setTimeout(()=>{h("navigation-toggled",{open:this.open})},1.5*o)},toggleNavigationByEventBus({open:t}){this.toggleNavigation(t)},toggleFocusTrap(){this.isMobile&&this.open?this.focusTrap.activate():this.focusTrap.deactivate()},handleEsc(){this.isMobile&&this.open&&this.toggleNavigation(!1)},focusFirstElement(){const t=rt(this.$refs.appNavigationContainer)[0];t&&(t.focus(),$.debug("Focusing first element in the navigation",{element:t}))},onKeyDown(t){if(t.key==="n"){if(!this.open){this.toggleNavigation(!0);return}this.isFocusWithinNavigation()&&this.toggleNavigation(!1)}},isFocusWithinNavigation(){const t=document.activeElement;return this.$refs.appNavigationContainer?.contains(t)}}};var de=function(){var t=this,e=t._self._c;return e("div",{ref:"appNavigationContainer",staticClass:"app-navigation",class:{"app-navigation--close":!t.open,"app-navigation--legacy":t.isLegacy34}},[e("nav",{staticClass:"app-navigation__content",attrs:{id:"app-navigation-vue","aria-hidden":t.open?"false":"true","aria-label":t.ariaLabel||void 0,"aria-labelledby":t.ariaLabelledby||void 0,inert:!t.open||void 0},on:{keydown:function(o){return!o.type.indexOf("key")&&t._k(o.keyCode,"esc",27,o.key,["Esc","Escape"])?null:t.handleEsc.apply(null,arguments)}}},[e("div",{staticClass:"app-navigation__search"},[t._t("search")],2),e("div",{staticClass:"app-navigation__body",class:{"app-navigation__body--no-list":!t.$scopedSlots.list}},[t._t("default")],2),t.$scopedSlots.list?e("NcAppNavigationList",{staticClass:"app-navigation__list"},[t._t("list")],2):t._e(),t._t("footer")],2),e("NcAppNavigationToggle",{attrs:{open:t.open},on:{"update:open":t.toggleNavigation}})],1)},me=[],fe=l(ue,de,me,!1,null,"58cc03e4");const ge=fe.exports,he=d({__name:"NcAppSettingsSection",props:{name:null,description:null,id:null,order:null},setup(t){const e=t,o=L(),{registerSection:a,unregisterSection:s}=St(),i=H(bt),c=n(()=>"settings-section_"+e.id);return S(()=>e.id,()=>{/^[a-z0-9\-_]+$/.test(e.id)||$.warn(`Invalid id prop: ${e.id}. Only alphanumeric, dash and underscore are allowed.`)},{immediate:!0}),S([()=>e.id,()=>e.name,()=>e.order],([m,p,u],[T,,])=>{s(T),a(m,p,u,o?.icon?.())}),E(()=>{a(e.id,e.name,e.order,o?.icon?.())}),D(()=>{s(e.id)}),{__sfc:!0,props:e,slots:o,registerSection:a,unregisterSection:s,legacy:i,htmlId:c}}});var _e=function(){var t=this,e=t._self._c,o=t._self._setupProxy;return e("section",{staticClass:"app-settings-section",class:{"app-settings-section__legacy":o.legacy},attrs:{id:o.htmlId,"aria-labelledby":`${o.htmlId}--label`}},[e("h3",{staticClass:"app-settings-section__name",attrs:{id:`${o.htmlId}--label`}},[t._v(" "+t._s(t.name)+" ")]),e("div",{staticClass:"app-settings-section__description"},[t._v(" "+t._s(t.description)+" ")]),e("div",{staticClass:"app-settings-section__content"},[t._t("default")],2),t._e()],2)},ve=[],ye=l(he,_e,ve,!1,null,"06cd755d");const Ne=ye.exports,xe=d({__name:"NcFormBox",props:{row:{type:Boolean,default:!1}},setup(t){const e=W();return R(dt,{isInFormBox:!0,formBoxItemClass:e.ncFormBox__item}),{__sfc:!0,style:e}}}),Se="_ncFormBox_OjStT",be="_ncFormBox_row_Qlk-j",Be="_ncFormBox__item_ayS-H",Ie="_ncFormBox_col_VaIn3",ke={"material-design-icon":"_material-design-icon_zDurS",ncFormBox:Se,ncFormBox_row:be,ncFormBox__item:Be,ncFormBox_col:Ie};var Fe=function(){var t=this,e=t._self._c;return t._self._setupProxy,e("div",{class:[t.$style.ncFormBox,t.row?t.$style.ncFormBox_row:t.$style.ncFormBox_col]},[t._t("default",null,{itemClass:t.$style.ncFormBox__item})],2)},Ae=[];const k={$style:ke};function Ce(t){for(var e in k)this[e]=k[e]}var we=l(xe,Fe,Ae,!1,Ce,null);const O=we.exports,Le={inheritAttrs:!1},$e=d({...Le,__name:"NcFormBoxItem",props:{tag:null,label:{default:void 0},description:{default:void 0},invertedAccent:{type:Boolean,default:!1},itemClasses:{default:void 0}},emits:["click"],setup(t){const e=t,o=L(),{formBoxItemClass:a}=mt(),s=P();return{__sfc:!0,props:e,slots:o,formBoxItemClass:a,descriptionId:s,hasDescription:()=>!!e.description||!!o.description,isLegacy32:ft}}}),Pe="_formBoxItem_TcR5F",Oe="_formBoxItem_legacy_z5RqX",Me="_formBoxItem_inverted_MA48p",Te="_formBoxItem__element_bHzJ1",ze="_formBoxItem__description_pBmbK",Ve="_formBoxItem__content_SawhG",Ee="_formBoxItem__icon_4AJit",De={"material-design-icon":"_material-design-icon_4S2t9",formBoxItem:Pe,formBoxItem_legacy:Oe,formBoxItem_inverted:Me,formBoxItem__element:Te,formBoxItem__description:ze,formBoxItem__content:Ve,formBoxItem__icon:Ee};var He=function(){var t=this,e=t._self._c,o=t._self._setupProxy;return e("div",{class:[t.$style.formBoxItem,o.formBoxItemClass,{[t.$style.formBoxItem_inverted]:t.invertedAccent&&o.hasDescription(),[t.$style.formBoxItem_legacy]:o.isLegacy32}]},[e("span",{class:t.$style.formBoxItem__content},[e(t.tag,t._b({tag:"component",class:[t.$style.formBoxItem__element,t.itemClasses],on:{click:function(a){return t.$emit("click",a)}}},"component",t.$attrs,!1),[t._t("default",function(){return[t._v(" "+t._s(t.label||"⚠️ Label is missing")+" ")]},{descriptionId:o.descriptionId})],2),o.hasDescription()?e("span",{class:t.$style.formBoxItem__description,attrs:{id:o.descriptionId}},[t._t("description",function(){return[t._v(" "+t._s(t.description)+" ")]})],2):t._e()],1),e("span",{class:t.$style.formBoxItem__icon},[t._t("icon",function(){return[t._v(" ⚠️ Icon is missing ")]},{descriptionId:o.descriptionId})],2)])},Re=[];const F={$style:De};function We(t){for(var e in F)this[e]=F[e]}var Ge=l($e,He,Re,!1,We,null);const M=Ge.exports,je={model:{prop:"modelValue",event:"update:modelValue"}},Ue=d({...je,__name:"NcFormBoxSwitch",props:{label:{default:void 0},description:{default:void 0},disabled:{type:Boolean,default:!1},modelValue:{type:Boolean}},emits:["enable","disable","update:modelValue"],setup(t,{emit:e}){const o=t,a=gt(o,"modelValue",e,{passive:!0}),s=P();return S(a,()=>{a.value?e("enable"):e("disable")},{flush:"sync"}),{__sfc:!0,props:o,emit:e,model:a,inputId:s,NcFormBoxItem:M,NcIconToggleSwitch:se}}}),Ke="_formBoxSwitch__input_TjVsq",qe={"material-design-icon":"_material-design-icon_32xhW",formBoxSwitch__input:Ke};var Je=function(){var t=this,e=t._self._c,o=t._self._setupProxy;return e(o.NcFormBoxItem,{attrs:{tag:"label",for:o.inputId},scopedSlots:t._u([t.$slots.default||t.label?{key:"default",fn:function(){return[t._t("default",function(){return[t._v(" "+t._s(t.label)+" ")]})]},proxy:!0}:null,t.$slots.description||t.description?{key:"description",fn:function(){return[t._t("description",function(){return[t._v(" "+t._s(t.description)+" ")]})]},proxy:!0}:null,{key:"icon",fn:function({descriptionId:a}){return[e("input",{directives:[{name:"model",rawName:"v-model",value:o.model,expression:"model"}],class:t.$style.formBoxSwitch__input,attrs:{id:o.inputId,type:"checkbox",role:"switch","aria-describedby":a,disabled:t.disabled},domProps:{checked:Array.isArray(o.model)?t._i(o.model,null)>-1:o.model},on:{change:function(s){var i=o.model,c=s.target,m=!!c.checked;if(Array.isArray(i)){var p=null,u=t._i(i,p);c.checked?u<0&&(o.model=i.concat([p])):u>-1&&(o.model=i.slice(0,u).concat(i.slice(u+1)))}else o.model=m}}}),e(o.NcIconToggleSwitch,{attrs:{checked:t.modelValue,inline:""}})]}}],null,!0)})},Qe=[];const A={$style:qe};function Xe(t){for(var e in A)this[e]=A[e]}var Ye=l(Ue,Je,Qe,!1,Xe,null);const Ze=Ye.exports,to={name:"CroppedLayoutSettings",components:{NcFormBoxSwitch:Ze,NcFormBox:O},computed:{croppedLayout(){return this.$store.state.userConfig.croppedLayout}},methods:{updateSetting(t){this.$store.dispatch("updateUserConfig",{key:"croppedLayout",value:t})}}};var eo=function(){var t=this,e=t._self._c;return e("NcFormBox",[e("NcFormBoxSwitch",{attrs:{"model-value":t.croppedLayout,label:t.t("photos","Squared photos view")},on:{"update:modelValue":t.updateSetting}})],1)},oo=[],ao=N(to,eo,oo,!1,null,null);const so=ao.exports;function io(t){const e=G(t),o="$router"in j().proxy.$root,a=n(()=>o&&e.to?"RouterLink":e.href?"a":"button"),s=n(()=>a.value==="RouterLink"||a.value==="a"),i=n(()=>a.value==="a"),c=n(()=>a.value==="RouterLink"),m=n(()=>a.value==="button"),p=n(()=>{if(a.value==="RouterLink")return{to:e.to,activeClass:"active",...e.additionalAttrs?.("RouterLink")??{}};if(a.value==="a")return{href:e.href,target:e.target,download:e.download||void 0,rel:"nofollow noreferrer noopener",...e.additionalAttrs?.("a")??{}};if(a.value==="button")return{type:e.type||"button",disabled:e.disabled,...e.additionalAttrs?.("button")??{}}});return{tag:a,isLink:s,isHyperLink:i,isRouterLink:c,isButton:m,attrs:p}}const no=d({__name:"NcFormBoxButton",props:{label:{default:void 0},description:{default:void 0},invertedAccent:{type:Boolean,default:!1},to:{default:void 0},href:{default:void 0},target:{default:void 0},disabled:{type:Boolean,default:!1}},emits:["click"],setup(t){const e=t,{tag:o,attrs:a,isLink:s}=io({to:y(()=>e.to),href:y(()=>e.href),target:y(()=>e.target),disabled:y(()=>e.disabled)}),i=n(()=>{if(s.value)return e.target==="_blank"?ht:_t});return{__sfc:!0,props:e,tag:o,attrs:a,isLink:s,icon:i,NcFormBoxItem:M,NcIconSvgWrapper:vt}}}),ro="_formBoxButton_DGIeJ",lo={"material-design-icon":"_material-design-icon_nhhXo",formBoxButton:ro};var co=function(){var t=this,e=t._self._c,o=t._self._setupProxy;return e(o.NcFormBoxItem,t._b({attrs:{tag:o.tag,"item-classes":["button-vue",t.$style.formBoxButton],"inverted-accent":t.invertedAccent,tabindex:"0"},on:{click:function(a){return t.$emit("click",a)}},scopedSlots:t._u([t.$scopedSlots.default||t.label?{key:"default",fn:function(){return[t._t("default",function(){return[t._v(" "+t._s(t.label)+" ")]})]},proxy:!0}:null,t.$scopedSlots.description||t.description?{key:"description",fn:function(){return[t._t("description",function(){return[t._v(" "+t._s(t.description)+" ")]})]},proxy:!0}:null,t.$scopedSlots.icon||o.icon?{key:"icon",fn:function(){return[t._t("icon",function(){return[o.icon?e(o.NcIconSvgWrapper,{attrs:{path:o.icon,inline:""}}):t._e()]})]},proxy:!0}:null],null,!0)},"NcFormBoxItem",o.attrs,!1))},po=[];const C={$style:lo};function uo(t){for(var e in C)this[e]=C[e]}var mo=l(no,co,po,!1,uo,null);const fo=mo.exports,go=d({name:"PhotosUploadLocationSettings",components:{NcFormBox:O,NcFormBoxButton:fo,FolderOpenOutline:Ft},data(){return{HomeOutline:At}},computed:{photosLocation(){return this.$store.state.userConfig.photosLocation},photosLocationName(){return this.photosLocation==="/"?r("photos","Home"):this.photosLocation}},methods:{debounceSelectPhotosFolder:ie(function(){this.selectPhotosFolder()}),async selectPhotosFolder(){const t=await this.openFilePicker(r("photos","Select the default upload location for your media"));this.updatePhotosFolder(t)},async openFilePicker(t){return yt(t).setMultiSelect(!1).addMimeTypeFilter("httpd/unix-directory").allowDirectories().startAt(this.photosLocation).addButton({label:r("photos","Pick folder"),callback:e=>g.debug("Picked",{nodes:e})}).build().pick()},updatePhotosFolder(t){this.$store.dispatch("updateUserConfig",{key:"photosLocation",value:t})},t:r}});var ho=function(){var t=this,e=t._self._c;return t._self._setupProxy,e("div",{staticClass:"photos-location"},[e("NcFormBox",[e("NcFormBoxButton",{attrs:{description:t.photosLocationName,"inverted-accent":!0},on:{click:t.debounceSelectPhotosFolder},scopedSlots:t._u([{key:"icon",fn:function(){return[e("FolderOpenOutline",{attrs:{size:20}})]},proxy:!0}])},[t._v(" "+t._s(t.t("photos","Upload folder"))+" ")])],1)],1)},_o=[],vo=N(go,ho,_o,!1,null,"872fbb5c");const yo=vo.exports,No={name:"SettingsDialog",components:{NcAppSettingsDialog:Bt,NcAppSettingsSection:Ne,CroppedLayoutSettings:so,PhotosSourceLocationsSettings:K,PhotosUploadLocationSettings:yo},props:{open:{type:Boolean,default:!1}},methods:{onClose(){this.$emit("update:open",!1)},t:r}};var xo=function(){var t=this,e=t._self._c;return e("NcAppSettingsDialog",{attrs:{open:t.open,name:t.t("photos","Photos settings"),legacy:!1},on:{"update:open":t.onClose}},[e("NcAppSettingsSection",{attrs:{id:"layout-settings",name:t.t("photos","General")}},[e("PhotosSourceLocationsSettings"),e("PhotosUploadLocationSettings"),e("CroppedLayoutSettings")],1)],1)},So=[],bo=N(No,xo,So,!1,null,null);const Bo=bo.exports,w=b("photos","appStoreEnabled",!1),Io={name:"PhotosApp",components:{AccountBoxMultiple:ee,AccountBoxMultipleOutline:te,CogOutline:Zt,CalendarToday:Yt,CalendarTodayOutline:Xt,Camera:Qt,CameraOutline:Jt,AccountGroup:qt,AccountGroupOutline:Kt,Folder:Ut,FolderOutline:jt,ImageMultiple:Gt,ImageMultipleOutline:Wt,ImageIcon:Rt,ImageOutline:Ht,ShareVariant:Dt,ShareVariantOutline:Et,Star:Vt,StarOutline:zt,Tag:Tt,TagOutline:Mt,VideoIcon:Ot,VideoOutline:Pt,MapIcon:$t,MapOutline:Lt,MapMarker:wt,MapMarkerOutline:Ct,NcAppContent:Z,NcAppNavigation:ge,NcAppNavigationItem:It,NcButton:Nt,NcContent:Y,SettingsDialog:Bo,PhotosFiltersInput:ae,PhotosFiltersDisplay:oe},setup(){const t=q(),{selectedFilters:e}=J(t);return{selectedFilters:e}},data(){return{svgplaceholder:it,imgplaceholder:st,videoplaceholder:at,areTagsInstalled:ot,showLocationMenuEntry:_()===null?!1:_().isAdmin&&w||et,showPeopleMenuEntry:_()===null?!1:_().isAdmin&&b("photos","showPeopleMenuEntry",!0)&&w||tt,openedSettings:!1}},computed:{isTimelineView(){return["all_media","photos","videos"].includes(this.$store.state.route.name||"")}},async beforeMount(){const t=b("photos","nomedia-paths",[]);this.$store.dispatch("setNomediaPaths",t),g.debug("Known .nomedia and .noimage paths",{files:t}),"serviceWorker"in navigator?window.addEventListener("load",()=>{navigator.serviceWorker.register(x("/apps/photos/service-worker.js",{},{noRewrite:!0}),{scope:x("/apps/photos")}).then(e=>{g.debug("SW registered: ",{registration:e})}).catch(e=>{g.error("SW registration failed: ",{registrationError:e})})}):g.debug("Service Worker is not enabled on this browser.")},beforeDestroy(){window.removeEventListener("load",()=>{navigator.serviceWorker.register(x("/apps/photos/service-worker.js",{},{noRewrite:!0}))})},methods:{showSettings(){this.openedSettings=!0},selectFilter(t){this.selectedFilters[t.filterId].push(t.value)},deselectFilter(t){const e=this.selectedFilters[t.filterId].indexOf(t.value);e!==-1&&this.selectedFilters[t.filterId].splice(e,1)},t:r}};var ko=function(){var t=this,e=t._self._c;return e("NcContent",{attrs:{"app-name":"photos"}},[e("NcAppNavigation",{attrs:{"aria-label":t.t("photos","Photos")},scopedSlots:t._u([t.isTimelineView?{key:"search",fn:function(){return[e("PhotosFiltersInput",{attrs:{"selected-filters":t.selectedFilters},on:{"select-filter":t.selectFilter}}),e("PhotosFiltersDisplay",{attrs:{"selected-filters":t.selectedFilters},on:{"deselect-filter":t.deselectFilter}})]},proxy:!0}:null,{key:"list",fn:function(){return[e("NcAppNavigationItem",{staticClass:"app-navigation__all_media",attrs:{to:{name:"all_media"},name:t.t("photos","All media"),"data-id-app-nav-item":"all-media",exact:""},scopedSlots:t._u([{key:"icon",fn:function({active:o}){return[o?e("ImageIcon",{attrs:{size:20}}):e("ImageOutline",{attrs:{size:20}})]}}])}),e("NcAppNavigationItem",{attrs:{to:"/photos",name:t.t("photos","Photos"),"data-id-app-nav-item":"photos"},scopedSlots:t._u([{key:"icon",fn:function({active:o}){return[o?e("Camera",{attrs:{size:20}}):e("CameraOutline",{attrs:{size:20}})]}}])}),e("NcAppNavigationItem",{attrs:{to:"/videos",name:t.t("photos","Videos"),"data-id-app-nav-item":"videos"},scopedSlots:t._u([{key:"icon",fn:function({active:o}){return[o?e("VideoIcon",{attrs:{size:20}}):e("VideoOutline",{attrs:{size:20}})]}}])}),e("NcAppNavigationItem",{attrs:{to:{name:"albums"},name:t.t("photos","Albums"),"data-id-app-nav-item":"albums"},scopedSlots:t._u([{key:"icon",fn:function({active:o}){return[o?e("ImageMultiple",{attrs:{size:20}}):e("ImageMultipleOutline",{attrs:{size:20}})]}}])}),e("NcAppNavigationItem",{attrs:{to:{name:"sharedAlbums"},name:t.t("photos","Collaborative albums"),"data-id-app-nav-item":"sharedalbums"},scopedSlots:t._u([{key:"icon",fn:function({active:o}){return[o?e("AccountGroup",{attrs:{size:20}}):e("AccountGroupOutline",{attrs:{size:20}})]}}])}),t.showPeopleMenuEntry?e("NcAppNavigationItem",{attrs:{to:{name:"faces"},name:t.t("photos","People"),"data-id-app-nav-item":"faces"},scopedSlots:t._u([{key:"icon",fn:function({active:o}){return[o?e("AccountBoxMultiple",{attrs:{size:20}}):e("AccountBoxMultipleOutline",{attrs:{size:20}})]}}],null,!1,3295904880)}):t._e(),e("NcAppNavigationItem",{attrs:{to:{name:"folders"},name:t.t("photos","Folders"),"data-id-app-nav-item":"folders"},scopedSlots:t._u([{key:"icon",fn:function({active:o}){return[o?e("Folder",{attrs:{size:20}}):e("FolderOutline",{attrs:{size:20}})]}}])}),e("NcAppNavigationItem",{attrs:{to:"/favorites",name:t.t("photos","Favorites"),"data-id-app-nav-item":"favorites"},scopedSlots:t._u([{key:"icon",fn:function({active:o}){return[o?e("Star",{attrs:{size:20}}):e("StarOutline",{attrs:{size:20}})]}}])}),e("NcAppNavigationItem",{attrs:{to:{name:"thisday"},name:t.t("photos","On this day"),"data-id-app-nav-item":"this-day"},scopedSlots:t._u([{key:"icon",fn:function({active:o}){return[o?e("CalendarToday",{attrs:{size:20}}):e("CalendarTodayOutline",{attrs:{size:20}})]}}])}),e("NcAppNavigationItem",{attrs:{to:{name:"shared"},name:t.t("photos","Shared with you"),"data-id-app-nav-item":"shared"},scopedSlots:t._u([{key:"icon",fn:function({active:o}){return[o?e("ShareVariant",{attrs:{size:20}}):e("ShareVariantOutline",{attrs:{size:20}})]}}])}),t.areTagsInstalled?e("NcAppNavigationItem",{attrs:{to:{name:"tags"},name:t.t("photos","Tags"),"data-id-app-nav-item":"tags"},scopedSlots:t._u([{key:"icon",fn:function({active:o}){return[o?e("Tag",{attrs:{size:20}}):e("TagOutline",{attrs:{size:20}})]}}],null,!1,346180464)}):t._e(),e("NcAppNavigationItem",{attrs:{to:{name:"places"},name:t.t("photos","Places"),"data-id-app-nav-item":"places"},scopedSlots:t._u([{key:"icon",fn:function({active:o}){return[o?e("MapMarker",{attrs:{size:20}}):e("MapMarkerOutline",{attrs:{size:20}})]}}])}),t.showLocationMenuEntry?e("NcAppNavigationItem",{attrs:{to:{name:"maps"},name:t.t("photos","Map"),"data-id-app-nav-item":"maps"},scopedSlots:t._u([{key:"icon",fn:function({active:o}){return[o?e("MapIcon",{attrs:{size:20}}):e("MapOutline",{attrs:{size:20}})]}}],null,!1,257739259)}):t._e()]},proxy:!0},{key:"footer",fn:function(){return[e("div",{staticClass:"app-navigation__footer"},[e("NcButton",{attrs:{variant:"tertiary",alignment:"start",wide:""},on:{click:t.showSettings},scopedSlots:t._u([{key:"icon",fn:function(){return[e("CogOutline",{attrs:{size:20}})]},proxy:!0}])},[t._v(" "+t._s(t.t("photos","Photos settings"))+" ")])],1)]},proxy:!0}],null,!0)}),e("NcAppContent",[e("RouterView"),e("span",{staticClass:"hidden-visually",attrs:{role:"none"},domProps:{innerHTML:t._s(t.svgplaceholder)}}),e("span",{staticClass:"hidden-visually",attrs:{role:"none"},domProps:{innerHTML:t._s(t.imgplaceholder)}}),e("span",{staticClass:"hidden-visually",attrs:{role:"none"},domProps:{innerHTML:t._s(t.videoplaceholder)}})],1),e("SettingsDialog",{attrs:{open:t.openedSettings},on:{"update:open":function(o){t.openedSettings=o}}})],1)},Fo=[],Ao=N(Io,ko,Fo,!1,null,null);const Co=Ao.exports;nt.sync(I,B),f.prototype.t=r,f.prototype.n=U,v("nc:metadata-photos-size"),v("nc:metadata-files-live-photo"),v("nc:metadata-blurhash"),v("nc:metadata-photos-original_date_time"),f.use(Q),new f({el:"#content",name:"PhotosRoot",router:B,store:I,pinia:X(),render:t=>t(Co)});
//# sourceMappingURL=photos-main.mjs.map
diff --git a/js/photos-public.mjs b/js/photos-public.mjs
index f6c892ab1e..8a20cdbbc5 100644
--- a/js/photos-public.mjs
+++ b/js/photos-public.mjs
@@ -1,2 +1,2 @@
-import{k as r,t as i,V as s,h as p}from"./preload-helper-iHri5ttz.chunk.mjs";import{N as l,a as c,v as d,i as v,s as h,b as m,r as n}from"./video-B7iCXJqN.chunk.mjs";import{l as t,p as a}from"./index-6_vkf3an.chunk.mjs";import{n as u}from"./icons-BPrPKxzl.chunk.mjs";import"./index-DjIio1qt.chunk.mjs";const g={name:"PhotosAppPublic",components:{NcAppContent:c,NcContent:l},data(){return{svgplaceholder:h,imgplaceholder:v,videoplaceholder:d}},async beforeMount(){"serviceWorker"in navigator?window.addEventListener("load",async()=>{try{const e=r("/apps/photos/service-worker.js",{},{noRewrite:!0}),o=await navigator.serviceWorker.register(e,{scope:r("/apps/photos")});t.debug("SW registered: ",{registration:o})}catch(e){t.error("SW registration failed: ",{error:e})}}):t.debug("Service Worker is not enabled on this browser.")},beforeDestroy(){window.removeEventListener("load",()=>{navigator.serviceWorker.register(r("/apps/photos/service-worker.js",{},{noRewrite:!0}))})}};var w=function(){var e=this,o=e._self._c;return o("NcContent",{attrs:{"app-name":"photos"}},[o("input",{attrs:{id:"isPublic",type:"hidden",name:"isPublic",value:"1"}}),o("NcAppContent",[o("router-view"),o("span",{staticClass:"hidden-visually",attrs:{role:"none"},domProps:{innerHTML:e._s(e.svgplaceholder)}}),o("span",{staticClass:"hidden-visually",attrs:{role:"none"},domProps:{innerHTML:e._s(e.imgplaceholder)}}),o("span",{staticClass:"hidden-visually",attrs:{role:"none"},domProps:{innerHTML:e._s(e.videoplaceholder)}})],1)],1)},y=[],b=u(g,w,y,!1,null,null);const f=b.exports;m.sync(a,n),s.prototype.t=i,s.prototype.n=p,new s({el:"#content",name:"PhotosRoot",router:n,store:a,render:e=>e(f)});
+import{k as r,t as i,V as s,h as p}from"./preload-helper-iHri5ttz.chunk.mjs";import{N as l,a as c,v as d,i as v,s as h,b as m,r as n}from"./video-CFxEyJH4.chunk.mjs";import{l as t,p as a}from"./index-6_vkf3an.chunk.mjs";import{n as u}from"./icons-BPrPKxzl.chunk.mjs";import"./index-DjIio1qt.chunk.mjs";const g={name:"PhotosAppPublic",components:{NcAppContent:c,NcContent:l},data(){return{svgplaceholder:h,imgplaceholder:v,videoplaceholder:d}},async beforeMount(){"serviceWorker"in navigator?window.addEventListener("load",async()=>{try{const e=r("/apps/photos/service-worker.js",{},{noRewrite:!0}),o=await navigator.serviceWorker.register(e,{scope:r("/apps/photos")});t.debug("SW registered: ",{registration:o})}catch(e){t.error("SW registration failed: ",{error:e})}}):t.debug("Service Worker is not enabled on this browser.")},beforeDestroy(){window.removeEventListener("load",()=>{navigator.serviceWorker.register(r("/apps/photos/service-worker.js",{},{noRewrite:!0}))})}};var w=function(){var e=this,o=e._self._c;return o("NcContent",{attrs:{"app-name":"photos"}},[o("input",{attrs:{id:"isPublic",type:"hidden",name:"isPublic",value:"1"}}),o("NcAppContent",[o("router-view"),o("span",{staticClass:"hidden-visually",attrs:{role:"none"},domProps:{innerHTML:e._s(e.svgplaceholder)}}),o("span",{staticClass:"hidden-visually",attrs:{role:"none"},domProps:{innerHTML:e._s(e.imgplaceholder)}}),o("span",{staticClass:"hidden-visually",attrs:{role:"none"},domProps:{innerHTML:e._s(e.videoplaceholder)}})],1)],1)},y=[],b=u(g,w,y,!1,null,null);const f=b.exports;m.sync(a,n),s.prototype.t=i,s.prototype.n=p,new s({el:"#content",name:"PhotosRoot",router:n,store:a,render:e=>e(f)});
//# sourceMappingURL=photos-public.mjs.map
diff --git a/js/video-B7iCXJqN.chunk.mjs b/js/video-CFxEyJH4.chunk.mjs
similarity index 96%
rename from js/video-B7iCXJqN.chunk.mjs
rename to js/video-CFxEyJH4.chunk.mjs
index 717fe116a5..2cfff52a3f 100644
--- a/js/video-B7iCXJqN.chunk.mjs
+++ b/js/video-CFxEyJH4.chunk.mjs
@@ -1,4 +1,4 @@
-const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=[window.OC.filePath('photos', '', 'js/FoldersView-C_fBOmEW.chunk.mjs'),window.OC.filePath('photos', '', 'js/index-DjIio1qt.chunk.mjs'),window.OC.filePath('photos', '', 'js/preload-helper-iHri5ttz.chunk.mjs'),window.OC.filePath('photos', '', 'js/index-DPkUyJ8g-BELfZN9P.chunk.mjs'),window.OC.filePath('photos', '', 'js/index-CJ3jRDua.chunk.mjs'),window.OC.filePath('photos', '', 'js/index-6_vkf3an.chunk.mjs'),window.OC.filePath('photos', '', 'css/index-C7Iz8Ftf.chunk.css'),window.OC.filePath('photos', '', 'js/index-BSfP607A.chunk.mjs'),window.OC.filePath('photos', '', 'js/useHotKey-CPjpPwsD.chunk.mjs'),window.OC.filePath('photos', '', 'js/NcActionButton-K4jUGMlW-Bs_jOwCM.chunk.mjs'),window.OC.filePath('photos', '', 'css/NcActionButton-K4jUGMlW-C5hQOKlY.chunk.css'),window.OC.filePath('photos', '', 'js/NcProgressBar-D7zYeXBH-Bj5rIFx5.chunk.mjs'),window.OC.filePath('photos', '', 'css/NcProgressBar-D7zYeXBH-B3qS3u7h.chunk.css'),window.OC.filePath('photos', '', 'css/index-DPkUyJ8g-DojRXbl-.chunk.css'),window.OC.filePath('photos', '', 'js/NcEmptyContent-BkpeWiV5.chunk.mjs'),window.OC.filePath('photos', '', 'js/createElementId-DhjFt1I9-B2HCdIOx.chunk.mjs'),window.OC.filePath('photos', '', 'css/NcEmptyContent-BC9mI1uc.chunk.css'),window.OC.filePath('photos', '', 'js/icons-BPrPKxzl.chunk.mjs'),window.OC.filePath('photos', '', 'js/AbortControllerMixin-CCU9Utyn.chunk.mjs'),window.OC.filePath('photos', '', 'js/HeaderNavigation-6G2FmN95.chunk.mjs'),window.OC.filePath('photos', '', 'css/HeaderNavigation-DKt_N0pA.chunk.css'),window.OC.filePath('photos', '', 'js/fileFetcher-p0a3IV9C.chunk.mjs'),window.OC.filePath('photos', '', 'css/FoldersView-B04JCDvS.chunk.css'),window.OC.filePath('photos', '', 'js/AlbumsView-Bs2JAhOX.chunk.mjs'),window.OC.filePath('photos', '', 'js/AlbumForm-BISzN9cQ.chunk.mjs'),window.OC.filePath('photos', '', 'js/NcTextField-Czr9S6YO-RwCaeh-_.chunk.mjs'),window.OC.filePath('photos', '', 'js/useModelMigration-EhAWvqDD-C15wbtL_.chunk.mjs'),window.OC.filePath('photos', '', 'css/NcTextField-Czr9S6YO-D1A0OHZV.chunk.css'),window.OC.filePath('photos', '', 'js/PhotosFiltersInput-Rq4vPTbx.chunk.mjs'),window.OC.filePath('photos', '', 'js/NcSelect-CHc1QupB-BHJEUvv_.chunk.mjs'),window.OC.filePath('photos', '', 'js/NcAvatar-DkAX4nqq-B0poB0w8.chunk.mjs'),window.OC.filePath('photos', '', 'css/NcAvatar-DkAX4nqq-DVe3PkvC.chunk.css'),window.OC.filePath('photos', '', 'css/NcSelect-CHc1QupB-DLpTMg8e.chunk.css'),window.OC.filePath('photos', '', 'js/NcDateTimePicker-BnrbGiT7.chunk.mjs'),window.OC.filePath('photos', '', 'js/useFormatDateTime-DyMeKy1D.chunk.mjs'),window.OC.filePath('photos', '', 'css/NcDateTimePicker-CNYlXgY4.chunk.css'),window.OC.filePath('photos', '', 'js/NcDateTime-enXYuwj8-T7oCJafb.chunk.mjs'),window.OC.filePath('photos', '', 'js/collectionFetcher-DyDb1Dp2.chunk.mjs'),window.OC.filePath('photos', '', 'css/PhotosFiltersInput-B5iZrGH_.chunk.css'),window.OC.filePath('photos', '', 'js/index-x9vhq81Z.chunk.mjs'),window.OC.filePath('photos', '', 'js/NcSelectUsers-B4w9UC_d-BckswLS_.chunk.mjs'),window.OC.filePath('photos', '', 'css/NcSelectUsers-B4w9UC_d-Bqm1U-mO.chunk.css'),window.OC.filePath('photos', '', 'js/FetchCollectionContentMixin-B2MWChoj.chunk.mjs'),window.OC.filePath('photos', '', 'css/AlbumForm-Bqiyh85-.chunk.css'),window.OC.filePath('photos', '', 'js/CollectionsList-6GeFqfGW.chunk.mjs'),window.OC.filePath('photos', '', 'css/CollectionsList-q-liS-Eo.chunk.css'),window.OC.filePath('photos', '', 'js/FetchCollectionsMixin-BuJ7c1sd.chunk.mjs'),window.OC.filePath('photos', '', 'css/AlbumsView-Bo_gBDuH.chunk.css'),window.OC.filePath('photos', '', 'js/AlbumContent-DJLi1OS6.chunk.mjs'),window.OC.filePath('photos', '', 'js/ActionFavorite-u-7FbcqP.chunk.mjs'),window.OC.filePath('photos', '', 'js/CollectionContent-DBHf8FYU.chunk.mjs'),window.OC.filePath('photos', '', 'js/FileComponent-Bw4ZFXMR.chunk.mjs'),window.OC.filePath('photos', '', 'js/NcCheckboxRadioSwitch-D4IV4zWy-CSDAL8Yg.chunk.mjs'),window.OC.filePath('photos', '', 'js/NcIconToggleSwitch-0NTw7i-t-DOrRmNgh.chunk.mjs'),window.OC.filePath('photos', '', 'css/NcIconToggleSwitch-0NTw7i-t-DMlwu5Oq.chunk.css'),window.OC.filePath('photos', '', 'css/NcCheckboxRadioSwitch-D4IV4zWy-DeHTumo-.chunk.css'),window.OC.filePath('photos', '', 'css/FileComponent-BNcqW4Yv.chunk.css'),window.OC.filePath('photos', '', 'js/FilesSelectionMixin-GHX9hTKF.chunk.mjs'),window.OC.filePath('photos', '', 'css/FilesSelectionMixin-Ir2RfRYO.chunk.css'),window.OC.filePath('photos', '', 'css/CollectionContent-C1_-ozju.chunk.css'),window.OC.filePath('photos', '', 'js/PhotosPicker-CkZuVLOp.chunk.mjs'),window.OC.filePath('photos', '', 'js/FetchFilesMixin-Ck9H2-jY.chunk.mjs'),window.OC.filePath('photos', '', 'js/PhotoSearch-CvX3QQRp.chunk.mjs'),window.OC.filePath('photos', '', 'js/FilesByMonthMixin-DvgVVt_F.chunk.mjs'),window.OC.filePath('photos', '', 'css/PhotosPicker-CBgqwEfM.chunk.css'),window.OC.filePath('photos', '', 'css/AlbumContent-DK8T_yqs.chunk.css'),window.OC.filePath('photos', '', 'js/SharedAlbums-CaDonouZ.chunk.mjs'),window.OC.filePath('photos', '', 'js/NcUserBubble-BGfZAi4c-azL-EDwM.chunk.mjs'),window.OC.filePath('photos', '', 'css/NcUserBubble-BGfZAi4c-DuGeWNEo.chunk.css'),window.OC.filePath('photos', '', 'css/SharedAlbums-KlGsfAoO.chunk.css'),window.OC.filePath('photos', '', 'js/SharedAlbumContent-C-cYwLEv.chunk.mjs'),window.OC.filePath('photos', '', 'css/SharedAlbumContent-Bh3mAuG2.chunk.css'),window.OC.filePath('photos', '', 'js/PublicAlbumContent-CZkNPobM.chunk.mjs'),window.OC.filePath('photos', '', 'js/NcBreadcrumbs-CesoXxTs-DQcjiANF.chunk.mjs'),window.OC.filePath('photos', '', 'js/index-K61t94YW.chunk.mjs'),window.OC.filePath('photos', '', 'css/NcBreadcrumbs-CesoXxTs-BCkv901s.chunk.css'),window.OC.filePath('photos', '', 'js/NcFormBoxButton-BlS280R1-CT5HUra0.chunk.mjs'),window.OC.filePath('photos', '', 'js/NcVNodes-Cmft-jHc.chunk.mjs'),window.OC.filePath('photos', '', 'css/NcFormBoxButton-BlS280R1-CYrntL-K.chunk.css'),window.OC.filePath('photos', '', 'js/NcColorPicker-CF17dQ48.chunk.mjs'),window.OC.filePath('photos', '', 'css/NcColorPicker-CGUSYoK-.chunk.css'),window.OC.filePath('photos', '', 'js/NcListItem-CaosvdEe-C-ofnpX3.chunk.mjs'),window.OC.filePath('photos', '', 'css/NcListItem-CaosvdEe-C3Kz0E5D.chunk.css'),window.OC.filePath('photos', '', 'css/PublicAlbumContent-BhhKBiWs.chunk.css'),window.OC.filePath('photos', '', 'js/PlacesView-DehMSNPa.chunk.mjs'),window.OC.filePath('photos', '', 'css/PlacesView-CVBtM1GJ.chunk.css'),window.OC.filePath('photos', '', 'js/PlaceContent-DiOKK3xC.chunk.mjs'),window.OC.filePath('photos', '', 'css/PlaceContent-Dr0VitMb.chunk.css'),window.OC.filePath('photos', '', 'js/TagsView-BgF4MCPK.chunk.mjs'),window.OC.filePath('photos', '', 'css/TagsView-BI4e7UBA.chunk.css'),window.OC.filePath('photos', '', 'js/TagContent-ByqiRs_T.chunk.mjs'),window.OC.filePath('photos', '', 'css/TagContent-CpS5SFBW.chunk.css'),window.OC.filePath('photos', '', 'js/TimelineView-CyTpbG36.chunk.mjs'),window.OC.filePath('photos', '', 'js/filters-6qrbp5yy.chunk.mjs'),window.OC.filePath('photos', '', 'css/filters-D1F-E22a.chunk.css'),window.OC.filePath('photos', '', 'css/TimelineView-DvQyF6E4.chunk.css'),window.OC.filePath('photos', '', 'js/FacesView-CFu4Sz2m.chunk.mjs'),window.OC.filePath('photos', '', 'js/FaceCover-3afTUpDo.chunk.mjs'),window.OC.filePath('photos', '', 'css/FaceCover-6clLcByg.chunk.css'),window.OC.filePath('photos', '', 'css/FacesView-Mhp0Ya-r.chunk.css'),window.OC.filePath('photos', '', 'js/FaceContent-Dg4dQHfZ.chunk.mjs'),window.OC.filePath('photos', '', 'js/FaceMergeForm-jH2ieXCc.chunk.mjs'),window.OC.filePath('photos', '', 'css/FaceMergeForm-DL6EU9Jq.chunk.css'),window.OC.filePath('photos', '', 'css/FaceContent-TewAtNqP.chunk.css'),window.OC.filePath('photos', '', 'js/UnassignedFaces-DPR7OX7H.chunk.mjs'),window.OC.filePath('photos', '', 'css/UnassignedFaces-C0VFhzuK.chunk.css')])))=>i.map(i=>d[i]);
+const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=[window.OC.filePath('photos', '', 'js/FoldersView-QKtkg9q6.chunk.mjs'),window.OC.filePath('photos', '', 'js/index-DjIio1qt.chunk.mjs'),window.OC.filePath('photos', '', 'js/preload-helper-iHri5ttz.chunk.mjs'),window.OC.filePath('photos', '', 'js/index-DPkUyJ8g-BELfZN9P.chunk.mjs'),window.OC.filePath('photos', '', 'js/index-CJ3jRDua.chunk.mjs'),window.OC.filePath('photos', '', 'js/index-6_vkf3an.chunk.mjs'),window.OC.filePath('photos', '', 'css/index-C7Iz8Ftf.chunk.css'),window.OC.filePath('photos', '', 'js/index-BSfP607A.chunk.mjs'),window.OC.filePath('photos', '', 'js/useHotKey-CPjpPwsD.chunk.mjs'),window.OC.filePath('photos', '', 'js/NcActionButton-K4jUGMlW-Bs_jOwCM.chunk.mjs'),window.OC.filePath('photos', '', 'css/NcActionButton-K4jUGMlW-C5hQOKlY.chunk.css'),window.OC.filePath('photos', '', 'js/NcProgressBar-D7zYeXBH-Bj5rIFx5.chunk.mjs'),window.OC.filePath('photos', '', 'css/NcProgressBar-D7zYeXBH-B3qS3u7h.chunk.css'),window.OC.filePath('photos', '', 'css/index-DPkUyJ8g-DojRXbl-.chunk.css'),window.OC.filePath('photos', '', 'js/NcEmptyContent-BkpeWiV5.chunk.mjs'),window.OC.filePath('photos', '', 'js/createElementId-DhjFt1I9-B2HCdIOx.chunk.mjs'),window.OC.filePath('photos', '', 'css/NcEmptyContent-BC9mI1uc.chunk.css'),window.OC.filePath('photos', '', 'js/icons-BPrPKxzl.chunk.mjs'),window.OC.filePath('photos', '', 'js/AbortControllerMixin-CCU9Utyn.chunk.mjs'),window.OC.filePath('photos', '', 'js/HeaderNavigation-6G2FmN95.chunk.mjs'),window.OC.filePath('photos', '', 'css/HeaderNavigation-DKt_N0pA.chunk.css'),window.OC.filePath('photos', '', 'js/fileFetcher-p0a3IV9C.chunk.mjs'),window.OC.filePath('photos', '', 'css/FoldersView-CGyVHMUI.chunk.css'),window.OC.filePath('photos', '', 'js/AlbumsView-CPC_3yRI.chunk.mjs'),window.OC.filePath('photos', '', 'js/AlbumForm-DNYy3ar8.chunk.mjs'),window.OC.filePath('photos', '', 'js/NcTextField-Czr9S6YO-RwCaeh-_.chunk.mjs'),window.OC.filePath('photos', '', 'js/useModelMigration-EhAWvqDD-C15wbtL_.chunk.mjs'),window.OC.filePath('photos', '', 'css/NcTextField-Czr9S6YO-D1A0OHZV.chunk.css'),window.OC.filePath('photos', '', 'js/PhotosFiltersInput-BJ4kTX4C.chunk.mjs'),window.OC.filePath('photos', '', 'js/NcSelect-CHc1QupB-BHJEUvv_.chunk.mjs'),window.OC.filePath('photos', '', 'js/NcAvatar-DkAX4nqq-B0poB0w8.chunk.mjs'),window.OC.filePath('photos', '', 'css/NcAvatar-DkAX4nqq-DVe3PkvC.chunk.css'),window.OC.filePath('photos', '', 'css/NcSelect-CHc1QupB-DLpTMg8e.chunk.css'),window.OC.filePath('photos', '', 'js/NcDateTimePicker-BnrbGiT7.chunk.mjs'),window.OC.filePath('photos', '', 'js/useFormatDateTime-DyMeKy1D.chunk.mjs'),window.OC.filePath('photos', '', 'css/NcDateTimePicker-CNYlXgY4.chunk.css'),window.OC.filePath('photos', '', 'js/NcDateTime-enXYuwj8-T7oCJafb.chunk.mjs'),window.OC.filePath('photos', '', 'js/collectionFetcher-DyDb1Dp2.chunk.mjs'),window.OC.filePath('photos', '', 'css/PhotosFiltersInput-B5iZrGH_.chunk.css'),window.OC.filePath('photos', '', 'js/index-x9vhq81Z.chunk.mjs'),window.OC.filePath('photos', '', 'js/NcSelectUsers-B4w9UC_d-BckswLS_.chunk.mjs'),window.OC.filePath('photos', '', 'css/NcSelectUsers-B4w9UC_d-Bqm1U-mO.chunk.css'),window.OC.filePath('photos', '', 'js/FetchCollectionContentMixin-B2MWChoj.chunk.mjs'),window.OC.filePath('photos', '', 'css/AlbumForm-Bqiyh85-.chunk.css'),window.OC.filePath('photos', '', 'js/CollectionsList-CiIbYZgv.chunk.mjs'),window.OC.filePath('photos', '', 'css/CollectionsList-q-liS-Eo.chunk.css'),window.OC.filePath('photos', '', 'js/FetchCollectionsMixin-BuJ7c1sd.chunk.mjs'),window.OC.filePath('photos', '', 'css/AlbumsView-Bo_gBDuH.chunk.css'),window.OC.filePath('photos', '', 'js/AlbumContent-BKBA5ISE.chunk.mjs'),window.OC.filePath('photos', '', 'js/ActionFavorite-u-7FbcqP.chunk.mjs'),window.OC.filePath('photos', '', 'js/CollectionContent-DBHf8FYU.chunk.mjs'),window.OC.filePath('photos', '', 'js/FileComponent-Bw4ZFXMR.chunk.mjs'),window.OC.filePath('photos', '', 'js/NcCheckboxRadioSwitch-D4IV4zWy-CSDAL8Yg.chunk.mjs'),window.OC.filePath('photos', '', 'js/NcIconToggleSwitch-0NTw7i-t-DOrRmNgh.chunk.mjs'),window.OC.filePath('photos', '', 'css/NcIconToggleSwitch-0NTw7i-t-DMlwu5Oq.chunk.css'),window.OC.filePath('photos', '', 'css/NcCheckboxRadioSwitch-D4IV4zWy-DeHTumo-.chunk.css'),window.OC.filePath('photos', '', 'css/FileComponent-BNcqW4Yv.chunk.css'),window.OC.filePath('photos', '', 'js/FilesSelectionMixin-GHX9hTKF.chunk.mjs'),window.OC.filePath('photos', '', 'css/FilesSelectionMixin-Ir2RfRYO.chunk.css'),window.OC.filePath('photos', '', 'css/CollectionContent-C1_-ozju.chunk.css'),window.OC.filePath('photos', '', 'js/PhotosPicker-CkZuVLOp.chunk.mjs'),window.OC.filePath('photos', '', 'js/FetchFilesMixin-Ck9H2-jY.chunk.mjs'),window.OC.filePath('photos', '', 'js/PhotoSearch-CvX3QQRp.chunk.mjs'),window.OC.filePath('photos', '', 'js/FilesByMonthMixin-DvgVVt_F.chunk.mjs'),window.OC.filePath('photos', '', 'css/PhotosPicker-CBgqwEfM.chunk.css'),window.OC.filePath('photos', '', 'css/AlbumContent-DK8T_yqs.chunk.css'),window.OC.filePath('photos', '', 'js/SharedAlbums-DWrdW3Hz.chunk.mjs'),window.OC.filePath('photos', '', 'js/NcUserBubble-BGfZAi4c-BGVx_Zba.chunk.mjs'),window.OC.filePath('photos', '', 'css/NcUserBubble-BGfZAi4c-DuGeWNEo.chunk.css'),window.OC.filePath('photos', '', 'css/SharedAlbums-KlGsfAoO.chunk.css'),window.OC.filePath('photos', '', 'js/SharedAlbumContent-BowPGwCK.chunk.mjs'),window.OC.filePath('photos', '', 'css/SharedAlbumContent-Bh3mAuG2.chunk.css'),window.OC.filePath('photos', '', 'js/PublicAlbumContent-D54gCfLM.chunk.mjs'),window.OC.filePath('photos', '', 'js/NcBreadcrumbs-CesoXxTs-DQcjiANF.chunk.mjs'),window.OC.filePath('photos', '', 'js/index-K61t94YW.chunk.mjs'),window.OC.filePath('photos', '', 'css/NcBreadcrumbs-CesoXxTs-BCkv901s.chunk.css'),window.OC.filePath('photos', '', 'js/NcFormBoxButton-BlS280R1-SHqQNUOS.chunk.mjs'),window.OC.filePath('photos', '', 'js/NcVNodes-Cmft-jHc.chunk.mjs'),window.OC.filePath('photos', '', 'css/NcFormBoxButton-BlS280R1-CYrntL-K.chunk.css'),window.OC.filePath('photos', '', 'js/NcColorPicker-CF17dQ48.chunk.mjs'),window.OC.filePath('photos', '', 'css/NcColorPicker-CGUSYoK-.chunk.css'),window.OC.filePath('photos', '', 'js/NcListItem-CaosvdEe-C-ofnpX3.chunk.mjs'),window.OC.filePath('photos', '', 'css/NcListItem-CaosvdEe-C3Kz0E5D.chunk.css'),window.OC.filePath('photos', '', 'css/PublicAlbumContent-BhhKBiWs.chunk.css'),window.OC.filePath('photos', '', 'js/PlacesView-BYizGYrO.chunk.mjs'),window.OC.filePath('photos', '', 'css/PlacesView-CVBtM1GJ.chunk.css'),window.OC.filePath('photos', '', 'js/PlaceContent-DiOKK3xC.chunk.mjs'),window.OC.filePath('photos', '', 'css/PlaceContent-Dr0VitMb.chunk.css'),window.OC.filePath('photos', '', 'js/TagsView-D_SxXf-l.chunk.mjs'),window.OC.filePath('photos', '', 'css/TagsView-BI4e7UBA.chunk.css'),window.OC.filePath('photos', '', 'js/TagContent-ByqiRs_T.chunk.mjs'),window.OC.filePath('photos', '', 'css/TagContent-CpS5SFBW.chunk.css'),window.OC.filePath('photos', '', 'js/TimelineView-CTHqOiOb.chunk.mjs'),window.OC.filePath('photos', '', 'js/filters-DiWkMIga.chunk.mjs'),window.OC.filePath('photos', '', 'css/filters-D1F-E22a.chunk.css'),window.OC.filePath('photos', '', 'css/TimelineView-DvQyF6E4.chunk.css'),window.OC.filePath('photos', '', 'js/FacesView-C3d2jLrb.chunk.mjs'),window.OC.filePath('photos', '', 'js/FaceCover-CwQK1LWo.chunk.mjs'),window.OC.filePath('photos', '', 'css/FaceCover-CriYllrK.chunk.css'),window.OC.filePath('photos', '', 'css/FacesView-Gits2579.chunk.css'),window.OC.filePath('photos', '', 'js/FaceContent-3Ggm0lDl.chunk.mjs'),window.OC.filePath('photos', '', 'js/FaceMergeForm-CjFfdbB1.chunk.mjs'),window.OC.filePath('photos', '', 'css/FaceMergeForm-DL6EU9Jq.chunk.css'),window.OC.filePath('photos', '', 'css/FaceContent-CAptWSQn.chunk.css'),window.OC.filePath('photos', '', 'js/UnassignedFaces-CdWdf2bI.chunk.mjs'),window.OC.filePath('photos', '', 'css/UnassignedFaces-CC9Q8Tw4.chunk.css')])))=>i.map(i=>d[i]);
import{z as Re,ad as Me,G as Y,ae as Oe,V as H,k as Q,t as x,_ as E}from"./preload-helper-iHri5ttz.chunk.mjs";import{b as Le}from"./index-DjIio1qt.chunk.mjs";import{n as B,K as I,H as lt,r as Qt,ap as $e,aq as Ve,C as bt,i as te,t as ee,ar as je,q as Ie,ad as He,as as Be,at as qe}from"./index-6_vkf3an.chunk.mjs";const Ne="photos",Te="6.0.0";var ht={},Dt;function Fe(){if(Dt)return ht;Dt=1,ht.sync=function(e,n,i){var r=(i||{}).moduleName||"route";e.registerModule(r,{namespaced:!0,state:t(n.currentRoute),mutations:{ROUTE_CHANGED:function(p,f){e.state[r]=t(f.to,f.from)}}});var a=!1,o,s=e.watch(function(p){return p[r]},function(p){var f=p.fullPath;f!==o&&(o!=null&&(a=!0,n.push(p)),o=f)},{sync:!0}),l=n.afterEach(function(p,f){if(a){a=!1;return}o=p.fullPath,e.commit(r+"/ROUTE_CHANGED",{to:p,from:f})});return function(){l?.(),s?.(),e.unregisterModule(r)}};function t(e,n){var i={name:e.name,path:e.path,hash:e.hash,query:e.query,params:e.params,fullPath:e.fullPath,meta:e.meta};return n&&(i.from=t(n)),Object.freeze(i)}return ht}var pr=Fe(),Ue=Object.defineProperty,Ze=Object.defineProperties,Ge=Object.getOwnPropertyDescriptors,tt=Object.getOwnPropertySymbols,ne=Object.prototype.hasOwnProperty,ie=Object.prototype.propertyIsEnumerable,At=(t,e,n)=>e in t?Ue(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,Ke=(t,e)=>{for(var n in e||(e={}))ne.call(e,n)&&At(t,n,e[n]);if(tt)for(var n of tt(e))ie.call(e,n)&&At(t,n,e[n]);return t},We=(t,e)=>Ze(t,Ge(e)),Xe=(t,e)=>{var n={};for(var i in t)ne.call(t,i)&&e.indexOf(i)<0&&(n[i]=t[i]);if(t!=null&&tt)for(var i of tt(t))e.indexOf(i)<0&&ie.call(t,i)&&(n[i]=t[i]);return n};function re(t,e,n,i,r,a,o,s){var l=typeof t=="function"?t.options:t;e&&(l.render=e,l.staticRenderFns=n,l._compiled=!0);var p;if(r&&(p=r),p)if(l.functional){l._injectStyles=p;var f=l.render;l.render=function(v,h){return p.call(h),f(v,h)}}else{var m=l.beforeCreate;l.beforeCreate=m?[].concat(m,p):[p]}return{exports:t,options:l}}const Je={name:"splitpanes",props:{horizontal:{type:Boolean},pushOtherPanes:{type:Boolean,default:!0},dblClickSplitter:{type:Boolean,default:!0},rtl:{type:Boolean,default:!1},firstSplitter:{type:Boolean}},provide(){return{requestUpdate:this.requestUpdate,onPaneAdd:this.onPaneAdd,onPaneRemove:this.onPaneRemove,onPaneClick:this.onPaneClick}},data:()=>({container:null,ready:!1,panes:[],touch:{mouseDown:!1,dragging:!1,activeSplitter:null},splitterTaps:{splitter:null,timeoutId:null}}),computed:{panesCount(){return this.panes.length},indexedPanes(){return this.panes.reduce((t,e)=>(t[e.id]=e)&&t,{})}},methods:{updatePaneComponents(){this.panes.forEach(t=>{t.update&&t.update({[this.horizontal?"height":"width"]:`${this.indexedPanes[t.id].size}%`})})},bindEvents(){document.addEventListener("mousemove",this.onMouseMove,{passive:!1}),document.addEventListener("mouseup",this.onMouseUp),"ontouchstart"in window&&(document.addEventListener("touchmove",this.onMouseMove,{passive:!1}),document.addEventListener("touchend",this.onMouseUp))},unbindEvents(){document.removeEventListener("mousemove",this.onMouseMove,{passive:!1}),document.removeEventListener("mouseup",this.onMouseUp),"ontouchstart"in window&&(document.removeEventListener("touchmove",this.onMouseMove,{passive:!1}),document.removeEventListener("touchend",this.onMouseUp))},onMouseDown(t,e){this.bindEvents(),this.touch.mouseDown=!0,this.touch.activeSplitter=e},onMouseMove(t){this.touch.mouseDown&&(t.preventDefault(),this.touch.dragging=!0,this.calculatePanesSize(this.getCurrentMouseDrag(t)),this.$emit("resize",this.panes.map(e=>({min:e.min,max:e.max,size:e.size}))))},onMouseUp(){this.touch.dragging&&this.$emit("resized",this.panes.map(t=>({min:t.min,max:t.max,size:t.size}))),this.touch.mouseDown=!1,setTimeout(()=>{this.touch.dragging=!1,this.unbindEvents()},100)},onSplitterClick(t,e){"ontouchstart"in window&&(t.preventDefault(),this.dblClickSplitter&&(this.splitterTaps.splitter===e?(clearTimeout(this.splitterTaps.timeoutId),this.splitterTaps.timeoutId=null,this.onSplitterDblClick(t,e),this.splitterTaps.splitter=null):(this.splitterTaps.splitter=e,this.splitterTaps.timeoutId=setTimeout(()=>{this.splitterTaps.splitter=null},500)))),this.touch.dragging||this.$emit("splitter-click",this.panes[e])},onSplitterDblClick(t,e){let n=0;this.panes=this.panes.map((i,r)=>(i.size=r===e?i.max:i.min,r!==e&&(n+=i.min),i)),this.panes[e].size-=n,this.$emit("pane-maximize",this.panes[e])},onPaneClick(t,e){this.$emit("pane-click",this.indexedPanes[e])},getCurrentMouseDrag(t){const e=this.container.getBoundingClientRect(),{clientX:n,clientY:i}="ontouchstart"in window&&t.touches?t.touches[0]:t;return{x:n-e.left,y:i-e.top}},getCurrentDragPercentage(t){t=t[this.horizontal?"y":"x"];const e=this.container[this.horizontal?"clientHeight":"clientWidth"];return this.rtl&&!this.horizontal&&(t=e-t),t*100/e},calculatePanesSize(t){const e=this.touch.activeSplitter;let n={prevPanesSize:this.sumPrevPanesSize(e),nextPanesSize:this.sumNextPanesSize(e),prevReachedMinPanes:0,nextReachedMinPanes:0};const i=0+(this.pushOtherPanes?0:n.prevPanesSize),r=100-(this.pushOtherPanes?0:n.nextPanesSize),a=Math.max(Math.min(this.getCurrentDragPercentage(t),r),i);let o=[e,e+1],s=this.panes[o[0]]||null,l=this.panes[o[1]]||null;const p=s.max<100&&a>=s.max+n.prevPanesSize,f=l.max<100&&a<=100-(l.max+this.sumNextPanesSize(e+1));if(p||f){p?(s.size=s.max,l.size=Math.max(100-s.max-n.prevPanesSize-n.nextPanesSize,0)):(s.size=Math.max(100-l.max-n.prevPanesSize-this.sumNextPanesSize(e+1),0),l.size=l.max);return}if(this.pushOtherPanes){const m=this.doPushOtherPanes(n,a);if(!m)return;({sums:n,panesToResize:o}=m),s=this.panes[o[0]]||null,l=this.panes[o[1]]||null}s!==null&&(s.size=Math.min(Math.max(a-n.prevPanesSize-n.prevReachedMinPanes,s.min),s.max)),l!==null&&(l.size=Math.min(Math.max(100-a-n.nextPanesSize-n.nextReachedMinPanes,l.min),l.max))},doPushOtherPanes(t,e){const n=this.touch.activeSplitter,i=[n,n+1];return e{a>i[0]&&a<=n&&(r.size=r.min,t.prevReachedMinPanes+=r.min)}),t.prevPanesSize=this.sumPrevPanesSize(i[0]),i[0]===void 0)?(t.prevReachedMinPanes=0,this.panes[0].size=this.panes[0].min,this.panes.forEach((r,a)=>{a>0&&a<=n&&(r.size=r.min,t.prevReachedMinPanes+=r.min)}),this.panes[i[1]].size=100-t.prevReachedMinPanes-this.panes[0].min-t.prevPanesSize-t.nextPanesSize,null):e>100-t.nextPanesSize-this.panes[i[1]].min&&(i[1]=this.findNextExpandedPane(n).index,t.nextReachedMinPanes=0,i[1]>n+1&&this.panes.forEach((r,a)=>{a>n&&a{a=n+1&&(r.size=r.min,t.nextReachedMinPanes+=r.min)}),this.panes[i[0]].size=100-t.prevPanesSize-t.nextReachedMinPanes-this.panes[this.panesCount-1].min-t.nextPanesSize,null):{sums:t,panesToResize:i}},sumPrevPanesSize(t){return this.panes.reduce((e,n,i)=>e+(ie+(i>t+1?n.size:0),0)},findPrevExpandedPane(t){return[...this.panes].reverse().find(e=>e.indexe.min)||{}},findNextExpandedPane(t){return this.panes.find(e=>e.index>t+1&&e.size>e.min)||{}},checkSplitpanesNodes(){Array.from(this.container.children).forEach(t=>{const e=t.classList.contains("splitpanes__pane"),n=t.classList.contains("splitpanes__splitter");if(!e&&!n){t.parentNode.removeChild(t),console.warn("Splitpanes: Only elements are allowed at the root of . One of your DOM nodes was removed.");return}})},addSplitter(t,e,n=!1){const i=t-1,r=document.createElement("div");r.classList.add("splitpanes__splitter"),n||(r.onmousedown=a=>this.onMouseDown(a,i),typeof window<"u"&&"ontouchstart"in window&&(r.ontouchstart=a=>this.onMouseDown(a,i)),r.onclick=a=>this.onSplitterClick(a,i+1)),this.dblClickSplitter&&(r.ondblclick=a=>this.onSplitterDblClick(a,i+1)),e.parentNode.insertBefore(r,e)},removeSplitter(t){t.onmousedown=void 0,t.onclick=void 0,t.ondblclick=void 0,t.parentNode.removeChild(t)},redoSplitters(){const t=Array.from(this.container.children);t.forEach(n=>{n.className.includes("splitpanes__splitter")&&this.removeSplitter(n)});let e=0;t.forEach(n=>{n.className.includes("splitpanes__pane")&&(!e&&this.firstSplitter?this.addSplitter(e,n,!0):e&&this.addSplitter(e,n),e++)})},requestUpdate(t){var e=t,{target:n}=e,i=Xe(e,["target"]);const r=this.indexedPanes[n._uid];Object.entries(i).forEach(([a,o])=>r[a]=o)},onPaneAdd(t){let e=-1;Array.from(t.$el.parentNode.children).some(r=>(r.className.includes("splitpanes__pane")&&e++,r===t.$el));const n=parseFloat(t.minSize),i=parseFloat(t.maxSize);this.panes.splice(e,0,{id:t._uid,index:e,min:isNaN(n)?0:n,max:isNaN(i)?100:i,size:t.size===null?null:parseFloat(t.size),givenSize:t.size,update:t.update}),this.panes.forEach((r,a)=>r.index=a),this.ready&&this.$nextTick(()=>{this.redoSplitters(),this.resetPaneSizes({addedPane:this.panes[e]}),this.$emit("pane-add",{index:e,panes:this.panes.map(r=>({min:r.min,max:r.max,size:r.size}))})})},onPaneRemove(t){const e=this.panes.findIndex(i=>i.id===t._uid),n=this.panes.splice(e,1)[0];this.panes.forEach((i,r)=>i.index=r),this.$nextTick(()=>{this.redoSplitters(),this.resetPaneSizes({removedPane:We(Ke({},n),{index:e})}),this.$emit("pane-remove",{removed:n,panes:this.panes.map(i=>({min:i.min,max:i.max,size:i.size}))})})},resetPaneSizes(t={}){!t.addedPane&&!t.removedPane?this.initialPanesSizing():this.panes.some(e=>e.givenSize!==null||e.min||e.max<100)?this.equalizeAfterAddOrRemove(t):this.equalize(),this.ready&&this.$emit("resized",this.panes.map(e=>({min:e.min,max:e.max,size:e.size})))},equalize(){const t=100/this.panesCount;let e=0,n=[],i=[];this.panes.forEach(r=>{r.size=Math.max(Math.min(t,r.max),r.min),e-=r.size,r.size>=r.max&&n.push(r.id),r.size<=r.min&&i.push(r.id)}),e>.1&&this.readjustSizes(e,n,i)},initialPanesSizing(){100/this.panesCount;let t=100,e=[],n=[],i=0;this.panes.forEach(a=>{t-=a.size,a.size!==null&&i++,a.size>=a.max&&e.push(a.id),a.size<=a.min&&n.push(a.id)});let r=100;t>.1&&(this.panes.forEach(a=>{a.size===null&&(a.size=Math.max(Math.min(t/(this.panesCount-i),a.max),a.min)),r-=a.size}),r>.1&&this.readjustSizes(t,e,n))},equalizeAfterAddOrRemove({addedPane:t,removedPane:e}={}){let n=100/this.panesCount,i=0,r=[],a=[];t&&t.givenSize!==null&&(n=(100-t.givenSize)/(this.panesCount-1)),this.panes.forEach(o=>{i-=o.size,o.size>=o.max&&r.push(o.id),o.size<=o.min&&a.push(o.id)}),!(Math.abs(i)<.1)&&(this.panes.forEach(o=>{t&&t.givenSize!==null&&t.id===o.id||(o.size=Math.max(Math.min(n,o.max),o.min)),i-=o.size,o.size>=o.max&&r.push(o.id),o.size<=o.min&&a.push(o.id)}),i>.1&&this.readjustSizes(i,r,a))},readjustSizes(t,e,n){let i;t>0?i=t/(this.panesCount-e.length):i=t/(this.panesCount-n.length),this.panes.forEach((r,a)=>{if(t>0&&!e.includes(r.id)){const o=Math.max(Math.min(r.size+i,r.max),r.min),s=o-r.size;t-=s,r.size=o}else if(!n.includes(r.id)){const o=Math.max(Math.min(r.size+i,r.max),r.min),s=o-r.size;t-=s,r.size=o}r.update({[this.horizontal?"height":"width"]:`${this.indexedPanes[r.id].size}%`})}),Math.abs(t)>.1&&this.$nextTick(()=>{this.ready&&console.warn("Splitpanes: Could not resize panes correctly due to their constraints.")})}},watch:{panes:{deep:!0,immediate:!1,handler(){this.updatePaneComponents()}},horizontal(){this.updatePaneComponents()},firstSplitter(){this.redoSplitters()},dblClickSplitter(t){[...this.container.querySelectorAll(".splitpanes__splitter")].forEach((e,n)=>{e.ondblclick=t?i=>this.onSplitterDblClick(i,n):void 0})}},beforeDestroy(){this.ready=!1},mounted(){this.container=this.$refs.container,this.checkSplitpanesNodes(),this.redoSplitters(),this.resetPaneSizes(),this.$emit("ready"),this.ready=!0},render(t){return t("div",{ref:"container",class:["splitpanes",`splitpanes--${this.horizontal?"horizontal":"vertical"}`,{"splitpanes--dragging":this.touch.dragging}]},this.$slots.default)}};let Ye,Qe;const kt={};var tn=re(Je,Ye,Qe,!1,en);function en(t){for(let e in kt)this[e]=kt[e]}var nn=(function(){return tn.exports})(),rn=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"splitpanes__pane",style:t.style,on:{click:function(i){return t.onPaneClick(i,t._uid)}}},[t._t("default")],2)},an=[];const on={name:"pane",inject:["requestUpdate","onPaneAdd","onPaneRemove","onPaneClick"],props:{size:{type:[Number,String],default:null},minSize:{type:[Number,String],default:0},maxSize:{type:[Number,String],default:100}},data:()=>({style:{}}),mounted(){this.onPaneAdd(this)},beforeDestroy(){this.onPaneRemove(this)},methods:{update(t){this.style=t}},computed:{sizeNumber(){return this.size||this.size===0?parseFloat(this.size):null},minSizeNumber(){return parseFloat(this.minSize)},maxSizeNumber(){return parseFloat(this.maxSize)}},watch:{sizeNumber(t){this.requestUpdate({target:this,size:t})},minSizeNumber(t){this.requestUpdate({target:this,min:t})},maxSizeNumber(t){this.requestUpdate({target:this,max:t})}}},Nt={};var sn=re(on,rn,an,!1,ln);function ln(t){for(let e in Nt)this[e]=Nt[e]}var pn=(function(){return sn.exports})();const cn={name:"ArrowLeftIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}};var un=function(){var t=this,e=t._self._c;return e("span",t._b({staticClass:"material-design-icon arrow-left-icon",attrs:{"aria-hidden":t.title?null:"true","aria-label":t.title,role:"img"},on:{click:function(n){return t.$emit("click",n)}}},"span",t.$attrs,!1),[e("svg",{staticClass:"material-design-icon__svg",attrs:{fill:t.fillColor,width:t.size,height:t.size,viewBox:"0 0 24 24"}},[e("path",{attrs:{d:"M20,11V13H8L13.5,18.5L12.08,19.92L4.16,12L12.08,4.08L13.5,5.5L8,11H20Z"}},[t.title?e("title",[t._v(t._s(t.title))]):t._e()])])])},hn=[],dn=B(cn,un,hn,!1,null,null);const fn=dn.exports,mn={name:"ArrowRightIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}};var vn=function(){var t=this,e=t._self._c;return e("span",t._b({staticClass:"material-design-icon arrow-right-icon",attrs:{"aria-hidden":t.title?null:"true","aria-label":t.title,role:"img"},on:{click:function(n){return t.$emit("click",n)}}},"span",t.$attrs,!1),[e("svg",{staticClass:"material-design-icon__svg",attrs:{fill:t.fillColor,width:t.size,height:t.size,viewBox:"0 0 24 24"}},[e("path",{attrs:{d:"M4,11V13H16L10.5,18.5L11.92,19.92L19.84,12L11.92,4.08L10.5,5.5L16,11H4Z"}},[t.title?e("title",[t._v(t._s(t.title))]):t._e()])])])},gn=[],yn=B(mn,vn,gn,!1,null,null);const wn=yn.exports;function xn(t){let e=!1,n;return(...i)=>(e||(e=!0,n=t(...i)),n)}let ae="missing-app-name";try{ae=Ne}catch{I.error("The `@nextcloud/vue` library was used without setting / replacing the `appName`.")}const bn=ae;let oe="";try{oe=Te}catch{I.error("The `@nextcloud/vue` library was used without setting / replacing the `appVersion`.")}const cr=oe;function se(){return Re("appName",bn)}const Cn=xn(()=>{const t=lt("core","apps",[]),e=se();return t.find(({id:n})=>n===e)?.name??e});Qt($e);const le=Oe(),zn={name:"NcAppContentDetailsToggle",components:{ArrowRight:wn,ArrowLeft:fn,NcButton:te},setup(){return{isRtl:le,isMobile:bt()}},computed:{title(){return ee("Go back to the list")}},watch:{isMobile:function(){this.toggleAppNavigationButton(this.isMobile)}},mounted(){this.toggleAppNavigationButton(this.isMobile)},beforeDestroy(){this.isMobile&&this.toggleAppNavigationButton(!1)},methods:{toggleAppNavigationButton(t=!0){const e=document.querySelector(".app-navigation .app-navigation-toggle");e&&(e.style.display=t?"none":null,t===!0&&Y("toggle-navigation",{open:!1}))}}};var _n=function(){var t=this,e=t._self._c;return e("NcButton",{staticClass:"app-details-toggle",class:{"app-details-toggle--mobile":t.isMobile},attrs:{"aria-label":t.title,title:t.title,variant:"tertiary"},scopedSlots:t._u([{key:"icon",fn:function(){return[t.isRtl?e("ArrowLeft",{attrs:{size:20}}):e("ArrowRight",{attrs:{size:20}})]},proxy:!0}])})},En=[],Sn=B(zn,_n,En,!1,null,"d0b1a8bc");const Pn=Sn.exports,Tt=Me("nextcloud").persist().build(),Dn=Le().theming?.name??"Nextcloud",An={name:"NcAppContent",components:{NcAppContentDetailsToggle:Pn,Pane:pn,Splitpanes:nn},props:{allowSwipeNavigation:{type:Boolean,default:!0},disableSwipe:{type:Boolean,default:!1},listSize:{type:Number,default:20},listMinWidth:{type:Number,default:15},listMaxWidth:{type:Number,default:40},paneConfigKey:{type:String,default:""},showDetails:{type:Boolean,default:!0},layout:{type:String,default:"vertical-split",validator(t){return["no-split","vertical-split","horizontal-split"].includes(t)}},pageHeading:{type:String,default:null},pageTitle:{type:String,default:null}},emits:["update:showDetails","resize-list","resize:list"],setup(){return{appName:se(),localizedAppName:Cn(),isMobile:bt(),isRtl:le}},data(){return{contentHeight:0,swiping:{},listPaneSize:this.restorePaneConfig()}},computed:{paneConfigID(){if(this.paneConfigKey!=="")return`pane-list-size-${this.paneConfigKey}`;try{return`pane-list-size-${this.appName}`}catch{return I.info("[NcAppContent]: falling back to global nextcloud pane config"),"pane-list-size-nextcloud"}},detailsPaneSize(){return this.listPaneSize?100-this.listPaneSize:this.paneDefaults.details.size},paneDefaults(){return{list:{size:this.listSize,min:this.listMinWidth,max:this.listMaxWidth},details:{size:100-this.listSize,min:100-this.listMaxWidth,max:100-this.listMinWidth}}},realPageTitle(){const t=new Set;if(this.pageTitle)for(const e of this.pageTitle.split(" - "))t.add(e);else if(this.pageHeading){for(const e of this.pageHeading.split(" - "))t.add(e);t.size>0&&t.add(this.localizedAppName)}else return null;return t.add(Dn),[...t.values()].join(" - ")}},watch:{realPageTitle:{immediate:!0,handler(){this.realPageTitle!==null&&(document.title=this.realPageTitle)}},paneConfigKey:{immediate:!0,handler(){this.restorePaneConfig()}}},mounted(){this.allowSwipeNavigation&&!this.disableSwipe&&(this.swiping=Ve(this.$el,{onSwipeEnd:this.handleSwipe})),this.restorePaneConfig()},methods:{handleSwipe(t,e){Math.abs(this.swiping.lengthX)>70&&(this.swiping.coordsStart.x<300/2&&e==="right"?Y("toggle-navigation",{open:!0}):this.swiping.coordsStart.x<300*1.5&&e==="left"&&Y("toggle-navigation",{open:!1}))},handlePaneResize(t){const e=parseInt(t[0].size,10);Tt.setItem(this.paneConfigID,JSON.stringify(e)),this.listPaneSize=e,this.$emit("resize:list",{size:e}),this.$emit("resize-list",{size:e}),I.debug("AppContent pane config",{size:e})},restorePaneConfig(){const t=parseInt(Tt.getItem(this.paneConfigID),10);if(!isNaN(t)&&t!==this.listPaneSize)return I.debug("AppContent pane config",t),this.listPaneSize=t,t},hideDetails(){this.$emit("update:showDetails",!1)}}};var kn=function(){var t=this,e=t._self._c;return e("main",{staticClass:"app-content no-snapper",class:{"app-content--has-list":!!t.$scopedSlots.list},attrs:{id:"app-content-vue"}},[t.pageHeading?e("h1",{staticClass:"hidden-visually"},[t._v(" "+t._s(t.pageHeading)+" ")]):t._e(),t.$scopedSlots.list?[t.isMobile||t.layout==="no-split"?e("div",{staticClass:"app-content-wrapper app-content-wrapper--no-split",class:{"app-content-wrapper--show-details":t.showDetails,"app-content-wrapper--show-list":!t.showDetails,"app-content-wrapper--mobile":t.isMobile}},[t.showDetails?e("NcAppContentDetailsToggle",{nativeOn:{click:function(n){return n.stopPropagation(),n.preventDefault(),t.hideDetails.apply(null,arguments)}}}):t._e(),e("div",{directives:[{name:"show",rawName:"v-show",value:!t.showDetails,expression:"!showDetails"}],staticClass:"app-content-wrapper__list"},[t._t("list")],2),t.showDetails?t._t("default"):t._e()],2):t.layout==="vertical-split"||t.layout==="horizontal-split"?e("div",{staticClass:"app-content-wrapper"},[e("Splitpanes",{staticClass:"default-theme",class:{"splitpanes--horizontal":t.layout==="horizontal-split","splitpanes--vertical":t.layout==="vertical-split"},attrs:{horizontal:t.layout==="horizontal-split",rtl:t.isRtl},on:{resized:t.handlePaneResize}},[e("Pane",{staticClass:"splitpanes__pane-list",attrs:{size:t.listPaneSize||t.paneDefaults.list.size,"min-size":t.paneDefaults.list.min,"max-size":t.paneDefaults.list.max}},[t._t("list")],2),e("Pane",{staticClass:"splitpanes__pane-details",attrs:{size:t.detailsPaneSize,"min-size":t.paneDefaults.details.min,"max-size":t.paneDefaults.details.max}},[t._t("default")],2)],1)],1):t._e()]:t._e(),t.$scopedSlots.list?t._e():t._t("default")],2)},Nn=[],Tn=B(An,kn,Nn,!1,null,"342489c9");const ur=Tn.exports;let Rn="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict",Mn=(t=21)=>{let e="",n=t|0;for(;n--;)e+=Rn[Math.random()*64|0];return e};function Z(t){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Z=function(e){return typeof e}:Z=function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Z(t)}var pe={selector:"vue-portal-target-".concat(Mn())},On=function(t){return pe.selector=t},dt=typeof window<"u"&&(typeof document>"u"?"undefined":Z(document))!==void 0,Ln=H.extend({abstract:!0,name:"PortalOutlet",props:["nodes","tag"],data:function(t){return{updatedNodes:t.nodes}},render:function(t){var e=this.updatedNodes&&this.updatedNodes();return e?e.length===1&&!e[0].text?e:t(this.tag||"DIV",e):t()},destroyed:function(){var t=this.$el;t&&t.parentNode.removeChild(t)}}),ce=H.extend({name:"VueSimplePortal",props:{disabled:{type:Boolean},prepend:{type:Boolean},selector:{type:String,default:function(){return"#".concat(pe.selector)}},tag:{type:String,default:"DIV"}},render:function(t){if(this.disabled){var e=this.$scopedSlots&&this.$scopedSlots.default();return e?e.length<2&&!e[0].text?e:t(this.tag,e):t()}return t()},created:function(){this.getTargetEl()||this.insertTargetEl()},updated:function(){var t=this;this.$nextTick(function(){!t.disabled&&t.slotFn!==t.$scopedSlots.default&&(t.container.updatedNodes=t.$scopedSlots.default),t.slotFn=t.$scopedSlots.default})},beforeDestroy:function(){this.unmount()},watch:{disabled:{immediate:!0,handler:function(t){t?this.unmount():this.$nextTick(this.mount)}}},methods:{getTargetEl:function(){if(dt)return document.querySelector(this.selector)},insertTargetEl:function(){if(dt){var t=document.querySelector("body"),e=document.createElement(this.tag);e.id=this.selector.substring(1),t.appendChild(e)}},mount:function(){if(dt){var t=this.getTargetEl(),e=document.createElement("DIV");this.prepend&&t.firstChild?t.insertBefore(e,t.firstChild):t.appendChild(e),this.container=new Ln({el:e,parent:this,propsData:{tag:this.tag,nodes:this.$scopedSlots.default}})}},unmount:function(){this.container&&(this.container.$destroy(),delete this.container)}}});function $n(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};t.component(e.name||"portal",ce),e.defaultSelector&&On(e.defaultSelector)}typeof window<"u"&&window.Vue&&window.Vue===H&&H.use($n),Qt(je);const Vn=`\\n