aboutsummaryrefslogtreecommitdiffstats
path: root/dist
diff options
context:
space:
mode:
authorskjnldsv <skjnldsv@protonmail.com>2024-06-14 11:01:06 +0200
committerJohn Molakvoæ <skjnldsv@users.noreply.github.com>2024-06-14 11:02:27 +0200
commite4aee6fbc3219e127c230d6bb00313ebdc6778a5 (patch)
tree97f9bb0d7e6d8db0e4894b7b4d3c502f3d97e2bc /dist
parent949a26c37fe3e4d10deb7dbfb2ce155c0d822123 (diff)
downloadnextcloud-server-e4aee6fbc3219e127c230d6bb00313ebdc6778a5.tar.gz
nextcloud-server-e4aee6fbc3219e127c230d6bb00313ebdc6778a5.zip
fix(comments): vue-material-design-icons imports
Signed-off-by: skjnldsv <skjnldsv@protonmail.com>
Diffstat (limited to 'dist')
-rw-r--r--dist/7462-7462.js4
-rw-r--r--dist/7462-7462.js.map2
-rw-r--r--dist/comments-comments-app.js4
-rw-r--r--dist/comments-comments-app.js.map2
-rw-r--r--dist/comments-comments-tab.js4
-rw-r--r--dist/comments-comments-tab.js.map2
6 files changed, 9 insertions, 9 deletions
diff --git a/dist/7462-7462.js b/dist/7462-7462.js
index 3a71ce97863..98cfc373db1 100644
--- a/dist/7462-7462.js
+++ b/dist/7462-7462.js
@@ -1,3 +1,3 @@
/*! For license information please see 7462-7462.js.LICENSE.txt */
-"use strict";(self.webpackChunknextcloud=self.webpackChunknextcloud||[]).push([[7462],{10396:(e,n,o)=>{o.d(n,{A:()=>d});var a=o(85168),i=o(70395),s=o(80486),r=o(10767),c=o(96689),m=o(96763);const d={props:{id:{type:Number,default:null},message:{type:String,default:""},resourceId:{type:[String,Number],required:!0},resourceType:{type:String,default:"files"}},data:()=>({deleted:!1,editing:!1,loading:!1}),methods:{onEdit(){this.editing=!0},onEditCancel(){this.editing=!1,this.updateLocalMessage(this.message)},async onEditComment(e){this.loading=!0;try{await(0,r.A)(this.resourceType,this.resourceId,this.id,e),c.A.debug("Comment edited",{resourceType:this.resourceType,resourceId:this.resourceId,id:this.id,message:e}),this.$emit("update:message",e),this.editing=!1}catch(e){(0,a.Qg)(t("comments","An error occurred while trying to edit the comment")),m.error(e)}finally{this.loading=!1}},onDeleteWithUndo(){this.deleted=!0;const e=setTimeout(this.onDelete,a.Br);(0,a._h)(t("comments","Comment deleted"),(()=>{clearTimeout(e),this.deleted=!1}))},async onDelete(){try{await(0,s.A)(this.resourceType,this.resourceId,this.id),c.A.debug("Comment deleted",{resourceType:this.resourceType,resourceId:this.resourceId,id:this.id}),this.$emit("delete",this.id)}catch(e){(0,a.Qg)(t("comments","An error occurred while trying to delete the comment")),m.error(e),this.deleted=!1}},async onNewComment(e){this.loading=!0;try{const t=await(0,i.A)(this.resourceType,this.resourceId,e);c.A.debug("New comment posted",{resourceType:this.resourceType,resourceId:this.resourceId,newComment:t}),this.$emit("new",t),this.$emit("update:message",""),this.localMessage=""}catch(e){(0,a.Qg)(t("comments","An error occurred while trying to create the comment")),m.error(e)}finally{this.loading=!1}}}}},80486:(t,e,n)=>{n.d(e,{A:()=>a});var o=n(35550);async function a(t,e,n){const a=["",t,e,n].join("/");await o.A.deleteFile(a)}},10767:(t,e,n)=>{n.d(e,{A:()=>a});var o=n(35550);async function a(t,e,n,a){const i=["",t,e,n].join("/");return await o.A.customRequest(i,Object.assign({method:"PROPPATCH",data:'<?xml version="1.0"?>\n\t\t\t<d:propertyupdate\n\t\t\t\txmlns:d="DAV:"\n\t\t\t\txmlns:oc="http://owncloud.org/ns">\n\t\t\t<d:set>\n\t\t\t\t<d:prop>\n\t\t\t\t\t<oc:message>'.concat(a,"</oc:message>\n\t\t\t\t</d:prop>\n\t\t\t</d:set>\n\t\t\t</d:propertyupdate>")}))}},70395:(t,e,n)=>{n.d(e,{A:()=>c});var o=n(21777),a=n(17003),i=n(51195),s=n(26287),r=n(35550);async function c(t,e,n){const c=["",t,e].join("/"),m=await s.A.post((0,a.e)()+c,{actorDisplayName:(0,o.HW)().displayName,actorId:(0,o.HW)().uid,actorType:"users",creationDateTime:(new Date).toUTCString(),message:n,objectType:t,verb:"comment"}),d=c+"/"+parseInt(m.headers["content-location"].split("/").pop()),l=await r.A.stat(d,{details:!0}),A=l.data.props;return A.actorDisplayName=(0,i.j)(A.actorDisplayName,2),A.message=(0,i.j)(A.message,2),l.data}},51195:(t,e,n)=>{function o(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;const n=new DOMParser;let o=t;for(let t=0;t<e;t++)o=n.parseFromString(o,"text/html").documentElement.textContent;return o}n.d(e,{j:()=>o})},70452:(t,e,n)=>{n.d(e,{A:()=>r});var o=n(26287),a=n(21777),i=n(38613),s=n(99498);const r=(0,n(85471).pM)({props:{resourceId:{type:Number,required:!0},resourceType:{type:String,default:"files"}},data:()=>({editorData:{actorDisplayName:(0,a.HW)().displayName,actorId:(0,a.HW)().uid,key:"editor"},userData:{}}),methods:{async autoComplete(t,e){const{data:n}=await o.A.get((0,s.KT)("core/autocomplete/get"),{params:{search:t,itemType:"files",itemId:this.resourceId,sorter:"commenters|share-recipients",limit:(0,i.C)("comments","maxAutoCompleteResults")}});return n.ocs.data.forEach((t=>{this.userData[t.id]=t})),e(Object.values(this.userData))},genMentionsData(t){return Object.values(t).flat().forEach((t=>{var e;this.userData[t.mentionId]={icon:"icon-user",id:t.mentionId,label:t.mentionDisplayName,source:"users",primary:(null===(e=(0,a.HW)())||void 0===e?void 0:e.uid)===t.mentionId}})),this.userData}}})},29369:(t,e,n)=>{n.d(e,{A:()=>u});var o=n(21777),a=n(53334),i=n(51651),s=n(63420),r=n(24764),c=n(10501),m=n(41944),d=n(9518),l=n(80701),A=(n(9191),n(24325),n(11037),n(93919),n(16356)),p=n(10396);const u={name:"Comment",components:{NcActionButton:s.A,NcActions:r.A,NcActionSeparator:c.A,ArrowRight,NcAvatar:m.A,NcButton:d.A,Moment:A.A,NcRichContenteditable:()=>Promise.all([n.e(4208),n.e(5528)]).then(n.bind(n,95528))},mixins:[l.Ay,p.A],inheritAttrs:!1,props:{actorDisplayName:{type:String,required:!0},actorId:{type:String,required:!0},creationDateTime:{type:String,default:null},editor:{type:Boolean,default:!1},autoComplete:{type:Function,required:!0},tag:{type:String,default:"div"}},data:()=>({expanded:!1,localMessage:"",submitted:!1}),computed:{isOwnComment(){return(0,o.HW)().uid===this.actorId},renderedContent(){return this.isEmptyMessage?"":this.renderContent(this.localMessage)},isEmptyMessage(){return!this.localMessage||""===this.localMessage.trim()},timestamp(){return parseInt((0,i.A)(this.creationDateTime).format("x"),10)/1e3}},watch:{message(t){this.updateLocalMessage(t)}},beforeMount(){this.updateLocalMessage(this.message)},methods:{t:a.Tl,updateLocalMessage(t){this.localMessage=t.toString(),this.submitted=!1},onSubmit(){if(""!==this.localMessage.trim())return this.editor?(this.onNewComment(this.localMessage.trim()),void this.$nextTick((()=>{this.$refs.editor.$el.focus()}))):void this.onEditComment(this.localMessage.trim())},onExpand(){this.expanded=!0}}}},28164:(t,e,n)=>{n.d(e,{A:()=>a});var o=n(51651);const a={name:"Moment",props:{timestamp:{type:Number,required:!0},format:{type:String,default:"LLL"}},computed:{title(){return o.A.unix(this.timestamp).format(this.format)},formatted(){return o.A.unix(this.timestamp).fromNow()}}}},27980:(t,e,n)=>{n.d(e,{X:()=>o,Y:()=>a});var o=function(){var t=this,e=t._self._c;return e(t.tag,{directives:[{name:"show",rawName:"v-show",value:!t.deleted,expression:"!deleted"}],tag:"component",staticClass:"comment",class:{"comment--loading":t.loading}},[e("div",{staticClass:"comment__side"},[e("NcAvatar",{staticClass:"comment__avatar",attrs:{"display-name":t.actorDisplayName,user:t.actorId,size:32}})],1),t._v(" "),e("div",{staticClass:"comment__body"},[e("div",{staticClass:"comment__header"},[e("span",{staticClass:"comment__author"},[t._v(t._s(t.actorDisplayName))]),t._v(" "),t.isOwnComment&&t.id&&!t.loading?e("NcActions",{staticClass:"comment__actions"},[t.editing?e("NcActionButton",{on:{click:t.onEditCancel},scopedSlots:t._u([{key:"icon",fn:function(){return[e("IconClose",{attrs:{size:20}})]},proxy:!0}],null,!1,2888946197)},[t._v("\n\t\t\t\t\t"+t._s(t.t("comments","Cancel edit"))+"\n\t\t\t\t")]):[e("NcActionButton",{attrs:{"close-after-click":""},on:{click:t.onEdit},scopedSlots:t._u([{key:"icon",fn:function(){return[e("IconEdit",{attrs:{size:20}})]},proxy:!0}],null,!1,649782975)},[t._v("\n\t\t\t\t\t\t"+t._s(t.t("comments","Edit comment"))+"\n\t\t\t\t\t")]),t._v(" "),e("NcActionSeparator"),t._v(" "),e("NcActionButton",{attrs:{"close-after-click":""},on:{click:t.onDeleteWithUndo},scopedSlots:t._u([{key:"icon",fn:function(){return[e("IconDelete",{attrs:{size:20}})]},proxy:!0}],null,!1,881161434)},[t._v("\n\t\t\t\t\t\t"+t._s(t.t("comments","Delete comment"))+"\n\t\t\t\t\t")])]],2):t._e(),t._v(" "),t.id&&t.loading?e("div",{staticClass:"comment_loading icon-loading-small"}):t.creationDateTime?e("Moment",{staticClass:"comment__timestamp",attrs:{timestamp:t.timestamp}}):t._e()],1),t._v(" "),t.editor||t.editing?e("form",{staticClass:"comment__editor",on:{submit:function(t){t.preventDefault()}}},[e("div",{staticClass:"comment__editor-group"},[e("NcRichContenteditable",{ref:"editor",attrs:{"auto-complete":t.autoComplete,contenteditable:!t.loading,label:t.editor?t.t("comments","New comment"):t.t("comments","Edit comment"),placeholder:t.t("comments","Write a comment …"),value:t.localMessage,"user-data":t.userData,"aria-describedby":"tab-comments__editor-description"},on:{"update:value":t.updateLocalMessage,submit:t.onSubmit}}),t._v(" "),e("div",{staticClass:"comment__submit"},[e("NcButton",{attrs:{type:"tertiary-no-background","native-type":"submit","aria-label":t.t("comments","Post comment"),disabled:t.isEmptyMessage},on:{click:t.onSubmit},scopedSlots:t._u([{key:"icon",fn:function(){return[t.loading?e("NcLoadingIcon"):e("IconArrowRight",{attrs:{size:20}})]},proxy:!0}],null,!1,758946661)})],1)],1),t._v(" "),e("div",{staticClass:"comment__editor-description",attrs:{id:"tab-comments__editor-description"}},[t._v("\n\t\t\t\t"+t._s(t.t("comments","@ for mentions, : for emoji, / for smart picker"))+"\n\t\t\t")])]):e("div",{staticClass:"comment__message",class:{"comment__message--expanded":t.expanded},domProps:{innerHTML:t._s(t.renderedContent)},on:{click:t.onExpand}})])])},a=[]},21295:(t,e,n)=>{n.d(e,{X:()=>o,Y:()=>a});var o=function(){var t=this;return(0,t._self._c)("span",{staticClass:"live-relative-timestamp",attrs:{"data-timestamp":1e3*t.timestamp,title:t.title}},[t._v(t._s(t.formatted))])},a=[]},45278:(t,e,n)=>{n.d(e,{A:()=>r});var o=n(71354),a=n.n(o),i=n(76314),s=n.n(i)()(a());s.push([t.id,".comment[data-v-47c0e61c]{display:flex;gap:8px;padding:5px 10px}.comment__side[data-v-47c0e61c]{display:flex;align-items:flex-start;padding-top:6px}.comment__body[data-v-47c0e61c]{display:flex;flex-grow:1;flex-direction:column}.comment__header[data-v-47c0e61c]{display:flex;align-items:center;min-height:44px}.comment__actions[data-v-47c0e61c]{margin-left:10px !important}.comment__author[data-v-47c0e61c]{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:var(--color-text-maxcontrast)}.comment_loading[data-v-47c0e61c],.comment__timestamp[data-v-47c0e61c]{margin-left:auto;text-align:right;white-space:nowrap;color:var(--color-text-maxcontrast)}.comment__editor-group[data-v-47c0e61c]{position:relative}.comment__editor-description[data-v-47c0e61c]{color:var(--color-text-maxcontrast);padding-block:var(--default-grid-baseline)}.comment__submit[data-v-47c0e61c]{position:absolute !important;bottom:0;right:0}.comment__message[data-v-47c0e61c]{white-space:pre-wrap;word-break:break-word;max-height:70px;overflow:hidden;margin-top:-6px}.comment__message--expanded[data-v-47c0e61c]{max-height:none;overflow:visible}.rich-contenteditable__input[data-v-47c0e61c]{min-height:44px;margin:0;padding:10px}","",{version:3,sources:["webpack://./apps/comments/src/components/Comment.vue"],names:[],mappings:"AAKA,0BACC,YAAA,CACA,OAAA,CACA,gBAAA,CAEA,gCACC,YAAA,CACA,sBAAA,CACA,eAAA,CAGD,gCACC,YAAA,CACA,WAAA,CACA,qBAAA,CAGD,kCACC,YAAA,CACA,kBAAA,CACA,eAAA,CAGD,mCACC,2BAAA,CAGD,kCACC,eAAA,CACA,kBAAA,CACA,sBAAA,CACA,mCAAA,CAGD,uEAEC,gBAAA,CACA,gBAAA,CACA,kBAAA,CACA,mCAAA,CAGD,wCACC,iBAAA,CAGD,8CACC,mCAAA,CACA,0CAAA,CAGD,kCACC,4BAAA,CACA,QAAA,CACA,OAAA,CAGD,mCACC,oBAAA,CACA,qBAAA,CACA,eAAA,CACA,eAAA,CACA,eAAA,CACA,6CACC,eAAA,CACA,gBAAA,CAKH,8CACC,eAAA,CACA,QAAA,CACA,YA3EiB",sourcesContent:['\n@use "sass:math";\n\n$comment-padding: 10px;\n\n.comment {\n\tdisplay: flex;\n\tgap: 8px;\n\tpadding: 5px $comment-padding;\n\n\t&__side {\n\t\tdisplay: flex;\n\t\talign-items: flex-start;\n\t\tpadding-top: 6px;\n\t}\n\n\t&__body {\n\t\tdisplay: flex;\n\t\tflex-grow: 1;\n\t\tflex-direction: column;\n\t}\n\n\t&__header {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tmin-height: 44px;\n\t}\n\n\t&__actions {\n\t\tmargin-left: $comment-padding !important;\n\t}\n\n\t&__author {\n\t\toverflow: hidden;\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n\n\t&_loading,\n\t&__timestamp {\n\t\tmargin-left: auto;\n\t\ttext-align: right;\n\t\twhite-space: nowrap;\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n\n\t&__editor-group {\n\t\tposition: relative;\n\t}\n\n\t&__editor-description {\n\t\tcolor: var(--color-text-maxcontrast);\n\t\tpadding-block: var(--default-grid-baseline);\n\t}\n\n\t&__submit {\n\t\tposition: absolute !important;\n\t\tbottom: 0;\n\t\tright: 0;\n\t}\n\n\t&__message {\n\t\twhite-space: pre-wrap;\n\t\tword-break: break-word;\n\t\tmax-height: 70px;\n\t\toverflow: hidden;\n\t\tmargin-top: -6px;\n\t\t&--expanded {\n\t\t\tmax-height: none;\n\t\t\toverflow: visible;\n\t\t}\n\t}\n}\n\n.rich-contenteditable__input {\n\tmin-height: 44px;\n\tmargin: 0;\n\tpadding: $comment-padding;\n}\n\n'],sourceRoot:""}]);const r=s},89073:(t,e,n)=>{var o=n(85072),a=n.n(o),i=n(97825),s=n.n(i),r=n(77659),c=n.n(r),m=n(55056),d=n.n(m),l=n(10540),A=n.n(l),p=n(41113),u=n.n(p),C=n(45278),g={};g.styleTagTransform=u(),g.setAttributes=d(),g.insert=c().bind(null,"head"),g.domAPI=s(),g.insertStyleElement=A(),a()(C.A,g),C.A&&C.A.locals&&C.A.locals},65463:(t,e,n)=>{n.d(e,{A:()=>i});var o=n(27980),a=n(54416);n(28372);const i=(0,n(14486).A)(a.A,o.X,o.Y,!1,null,"47c0e61c",null).exports},16356:(t,e,n)=>{n.d(e,{A:()=>i});var o=n(21295),a=n(52547);const i=(0,n(14486).A)(a.A,o.X,o.Y,!1,null,null,null).exports},54416:(t,e,n)=>{n.d(e,{A:()=>o});const o=n(29369).A},52547:(t,e,n)=>{n.d(e,{A:()=>o});const o=n(28164).A},28372:(t,e,n)=>{n(89073)}}]);
-//# sourceMappingURL=7462-7462.js.map?v=d38151a6cdda03d0d4da \ No newline at end of file
+"use strict";(self.webpackChunknextcloud=self.webpackChunknextcloud||[]).push([[7462],{10396:(e,n,a)=>{a.d(n,{A:()=>d});var o=a(85168),i=a(70395),s=a(80486),r=a(10767),c=a(96689),m=a(96763);const d={props:{id:{type:Number,default:null},message:{type:String,default:""},resourceId:{type:[String,Number],required:!0},resourceType:{type:String,default:"files"}},data:()=>({deleted:!1,editing:!1,loading:!1}),methods:{onEdit(){this.editing=!0},onEditCancel(){this.editing=!1,this.updateLocalMessage(this.message)},async onEditComment(e){this.loading=!0;try{await(0,r.A)(this.resourceType,this.resourceId,this.id,e),c.A.debug("Comment edited",{resourceType:this.resourceType,resourceId:this.resourceId,id:this.id,message:e}),this.$emit("update:message",e),this.editing=!1}catch(e){(0,o.Qg)(t("comments","An error occurred while trying to edit the comment")),m.error(e)}finally{this.loading=!1}},onDeleteWithUndo(){this.deleted=!0;const e=setTimeout(this.onDelete,o.Br);(0,o._h)(t("comments","Comment deleted"),(()=>{clearTimeout(e),this.deleted=!1}))},async onDelete(){try{await(0,s.A)(this.resourceType,this.resourceId,this.id),c.A.debug("Comment deleted",{resourceType:this.resourceType,resourceId:this.resourceId,id:this.id}),this.$emit("delete",this.id)}catch(e){(0,o.Qg)(t("comments","An error occurred while trying to delete the comment")),m.error(e),this.deleted=!1}},async onNewComment(e){this.loading=!0;try{const t=await(0,i.A)(this.resourceType,this.resourceId,e);c.A.debug("New comment posted",{resourceType:this.resourceType,resourceId:this.resourceId,newComment:t}),this.$emit("new",t),this.$emit("update:message",""),this.localMessage=""}catch(e){(0,o.Qg)(t("comments","An error occurred while trying to create the comment")),m.error(e)}finally{this.loading=!1}}}}},80486:(t,e,n)=>{n.d(e,{A:()=>o});var a=n(35550);async function o(t,e,n){const o=["",t,e,n].join("/");await a.A.deleteFile(o)}},10767:(t,e,n)=>{n.d(e,{A:()=>o});var a=n(35550);async function o(t,e,n,o){const i=["",t,e,n].join("/");return await a.A.customRequest(i,Object.assign({method:"PROPPATCH",data:'<?xml version="1.0"?>\n\t\t\t<d:propertyupdate\n\t\t\t\txmlns:d="DAV:"\n\t\t\t\txmlns:oc="http://owncloud.org/ns">\n\t\t\t<d:set>\n\t\t\t\t<d:prop>\n\t\t\t\t\t<oc:message>'.concat(o,"</oc:message>\n\t\t\t\t</d:prop>\n\t\t\t</d:set>\n\t\t\t</d:propertyupdate>")}))}},70395:(t,e,n)=>{n.d(e,{A:()=>c});var a=n(21777),o=n(17003),i=n(51195),s=n(26287),r=n(35550);async function c(t,e,n){const c=["",t,e].join("/"),m=await s.A.post((0,o.e)()+c,{actorDisplayName:(0,a.HW)().displayName,actorId:(0,a.HW)().uid,actorType:"users",creationDateTime:(new Date).toUTCString(),message:n,objectType:t,verb:"comment"}),d=c+"/"+parseInt(m.headers["content-location"].split("/").pop()),l=await r.A.stat(d,{details:!0}),A=l.data.props;return A.actorDisplayName=(0,i.j)(A.actorDisplayName,2),A.message=(0,i.j)(A.message,2),l.data}},51195:(t,e,n)=>{function a(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;const n=new DOMParser;let a=t;for(let t=0;t<e;t++)a=n.parseFromString(a,"text/html").documentElement.textContent;return a}n.d(e,{j:()=>a})},70452:(t,e,n)=>{n.d(e,{A:()=>r});var a=n(26287),o=n(21777),i=n(38613),s=n(99498);const r=(0,n(85471).pM)({props:{resourceId:{type:Number,required:!0},resourceType:{type:String,default:"files"}},data:()=>({editorData:{actorDisplayName:(0,o.HW)().displayName,actorId:(0,o.HW)().uid,key:"editor"},userData:{}}),methods:{async autoComplete(t,e){const{data:n}=await a.A.get((0,s.KT)("core/autocomplete/get"),{params:{search:t,itemType:"files",itemId:this.resourceId,sorter:"commenters|share-recipients",limit:(0,i.C)("comments","maxAutoCompleteResults")}});return n.ocs.data.forEach((t=>{this.userData[t.id]=t})),e(Object.values(this.userData))},genMentionsData(t){return Object.values(t).flat().forEach((t=>{var e;this.userData[t.mentionId]={icon:"icon-user",id:t.mentionId,label:t.mentionDisplayName,source:"users",primary:(null===(e=(0,o.HW)())||void 0===e?void 0:e.uid)===t.mentionId}})),this.userData}}})},29369:(t,e,n)=>{n.d(e,{A:()=>_});var a=n(21777),o=n(53334),i=n(51651),s=n(63420),r=n(24764),c=n(10501),m=n(41944),d=n(9518),l=n(80701),A=n(9191),p=n(24325),u=n(11037),C=n(93919),g=n(16356),h=n(10396);const _={name:"Comment",components:{IconArrowRight:A.A,IconClose:p.A,IconDelete:u.A,IconEdit:C.A,Moment:g.A,NcActionButton:s.A,NcActions:r.A,NcActionSeparator:c.A,NcAvatar:m.A,NcButton:d.A,NcRichContenteditable:()=>Promise.all([n.e(4208),n.e(5528)]).then(n.bind(n,95528))},mixins:[l.Ay,h.A],inheritAttrs:!1,props:{actorDisplayName:{type:String,required:!0},actorId:{type:String,required:!0},creationDateTime:{type:String,default:null},editor:{type:Boolean,default:!1},autoComplete:{type:Function,required:!0},tag:{type:String,default:"div"}},data:()=>({expanded:!1,localMessage:"",submitted:!1}),computed:{isOwnComment(){return(0,a.HW)().uid===this.actorId},renderedContent(){return this.isEmptyMessage?"":this.renderContent(this.localMessage)},isEmptyMessage(){return!this.localMessage||""===this.localMessage.trim()},timestamp(){return parseInt((0,i.A)(this.creationDateTime).format("x"),10)/1e3}},watch:{message(t){this.updateLocalMessage(t)}},beforeMount(){this.updateLocalMessage(this.message)},methods:{t:o.Tl,updateLocalMessage(t){this.localMessage=t.toString(),this.submitted=!1},onSubmit(){if(""!==this.localMessage.trim())return this.editor?(this.onNewComment(this.localMessage.trim()),void this.$nextTick((()=>{this.$refs.editor.$el.focus()}))):void this.onEditComment(this.localMessage.trim())},onExpand(){this.expanded=!0}}}},28164:(t,e,n)=>{n.d(e,{A:()=>o});var a=n(51651);const o={name:"Moment",props:{timestamp:{type:Number,required:!0},format:{type:String,default:"LLL"}},computed:{title(){return a.A.unix(this.timestamp).format(this.format)},formatted(){return a.A.unix(this.timestamp).fromNow()}}}},4235:(t,e,n)=>{n.d(e,{X:()=>a,Y:()=>o});var a=function(){var t=this,e=t._self._c;return e(t.tag,{directives:[{name:"show",rawName:"v-show",value:!t.deleted,expression:"!deleted"}],tag:"component",staticClass:"comment",class:{"comment--loading":t.loading}},[e("div",{staticClass:"comment__side"},[e("NcAvatar",{staticClass:"comment__avatar",attrs:{"display-name":t.actorDisplayName,user:t.actorId,size:32}})],1),t._v(" "),e("div",{staticClass:"comment__body"},[e("div",{staticClass:"comment__header"},[e("span",{staticClass:"comment__author"},[t._v(t._s(t.actorDisplayName))]),t._v(" "),t.isOwnComment&&t.id&&!t.loading?e("NcActions",{staticClass:"comment__actions"},[t.editing?e("NcActionButton",{on:{click:t.onEditCancel},scopedSlots:t._u([{key:"icon",fn:function(){return[e("IconClose",{attrs:{size:20}})]},proxy:!0}],null,!1,2888946197)},[t._v("\n\t\t\t\t\t"+t._s(t.t("comments","Cancel edit"))+"\n\t\t\t\t")]):[e("NcActionButton",{attrs:{"close-after-click":""},on:{click:t.onEdit},scopedSlots:t._u([{key:"icon",fn:function(){return[e("IconEdit",{attrs:{size:20}})]},proxy:!0}],null,!1,649782975)},[t._v("\n\t\t\t\t\t\t"+t._s(t.t("comments","Edit comment"))+"\n\t\t\t\t\t")]),t._v(" "),e("NcActionSeparator"),t._v(" "),e("NcActionButton",{attrs:{"close-after-click":""},on:{click:t.onDeleteWithUndo},scopedSlots:t._u([{key:"icon",fn:function(){return[e("IconDelete",{attrs:{size:20}})]},proxy:!0}],null,!1,881161434)},[t._v("\n\t\t\t\t\t\t"+t._s(t.t("comments","Delete comment"))+"\n\t\t\t\t\t")])]],2):t._e(),t._v(" "),t.id&&t.loading?e("div",{staticClass:"comment_loading icon-loading-small"}):t.creationDateTime?e("Moment",{staticClass:"comment__timestamp",attrs:{timestamp:t.timestamp}}):t._e()],1),t._v(" "),t.editor||t.editing?e("form",{staticClass:"comment__editor",on:{submit:function(t){t.preventDefault()}}},[e("div",{staticClass:"comment__editor-group"},[e("NcRichContenteditable",{ref:"editor",attrs:{"auto-complete":t.autoComplete,contenteditable:!t.loading,label:t.editor?t.t("comments","New comment"):t.t("comments","Edit comment"),placeholder:t.t("comments","Write a comment …"),value:t.localMessage,"user-data":t.userData,"aria-describedby":"tab-comments__editor-description"},on:{"update:value":t.updateLocalMessage,submit:t.onSubmit}}),t._v(" "),e("div",{staticClass:"comment__submit"},[e("NcButton",{attrs:{type:"tertiary-no-background","native-type":"submit","aria-label":t.t("comments","Post comment"),disabled:t.isEmptyMessage},on:{click:t.onSubmit},scopedSlots:t._u([{key:"icon",fn:function(){return[t.loading?e("NcLoadingIcon"):e("IconArrowRight",{attrs:{size:20}})]},proxy:!0}],null,!1,758946661)})],1)],1),t._v(" "),e("div",{staticClass:"comment__editor-description",attrs:{id:"tab-comments__editor-description"}},[t._v("\n\t\t\t\t"+t._s(t.t("comments","@ for mentions, : for emoji, / for smart picker"))+"\n\t\t\t")])]):e("div",{staticClass:"comment__message",class:{"comment__message--expanded":t.expanded},domProps:{innerHTML:t._s(t.renderedContent)},on:{click:t.onExpand}})])])},o=[]},21295:(t,e,n)=>{n.d(e,{X:()=>a,Y:()=>o});var a=function(){var t=this;return(0,t._self._c)("span",{staticClass:"live-relative-timestamp",attrs:{"data-timestamp":1e3*t.timestamp,title:t.title}},[t._v(t._s(t.formatted))])},o=[]},92167:(t,e,n)=>{n.d(e,{A:()=>r});var a=n(71354),o=n.n(a),i=n(76314),s=n.n(i)()(o());s.push([t.id,".comment[data-v-a54c4126]{display:flex;gap:8px;padding:5px 10px}.comment__side[data-v-a54c4126]{display:flex;align-items:flex-start;padding-top:6px}.comment__body[data-v-a54c4126]{display:flex;flex-grow:1;flex-direction:column}.comment__header[data-v-a54c4126]{display:flex;align-items:center;min-height:44px}.comment__actions[data-v-a54c4126]{margin-left:10px !important}.comment__author[data-v-a54c4126]{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:var(--color-text-maxcontrast)}.comment_loading[data-v-a54c4126],.comment__timestamp[data-v-a54c4126]{margin-left:auto;text-align:right;white-space:nowrap;color:var(--color-text-maxcontrast)}.comment__editor-group[data-v-a54c4126]{position:relative}.comment__editor-description[data-v-a54c4126]{color:var(--color-text-maxcontrast);padding-block:var(--default-grid-baseline)}.comment__submit[data-v-a54c4126]{position:absolute !important;bottom:0;right:0}.comment__message[data-v-a54c4126]{white-space:pre-wrap;word-break:break-word;max-height:70px;overflow:hidden;margin-top:-6px}.comment__message--expanded[data-v-a54c4126]{max-height:none;overflow:visible}.rich-contenteditable__input[data-v-a54c4126]{min-height:44px;margin:0;padding:10px}","",{version:3,sources:["webpack://./apps/comments/src/components/Comment.vue"],names:[],mappings:"AAKA,0BACC,YAAA,CACA,OAAA,CACA,gBAAA,CAEA,gCACC,YAAA,CACA,sBAAA,CACA,eAAA,CAGD,gCACC,YAAA,CACA,WAAA,CACA,qBAAA,CAGD,kCACC,YAAA,CACA,kBAAA,CACA,eAAA,CAGD,mCACC,2BAAA,CAGD,kCACC,eAAA,CACA,kBAAA,CACA,sBAAA,CACA,mCAAA,CAGD,uEAEC,gBAAA,CACA,gBAAA,CACA,kBAAA,CACA,mCAAA,CAGD,wCACC,iBAAA,CAGD,8CACC,mCAAA,CACA,0CAAA,CAGD,kCACC,4BAAA,CACA,QAAA,CACA,OAAA,CAGD,mCACC,oBAAA,CACA,qBAAA,CACA,eAAA,CACA,eAAA,CACA,eAAA,CACA,6CACC,eAAA,CACA,gBAAA,CAKH,8CACC,eAAA,CACA,QAAA,CACA,YA3EiB",sourcesContent:['\n@use "sass:math";\n\n$comment-padding: 10px;\n\n.comment {\n\tdisplay: flex;\n\tgap: 8px;\n\tpadding: 5px $comment-padding;\n\n\t&__side {\n\t\tdisplay: flex;\n\t\talign-items: flex-start;\n\t\tpadding-top: 6px;\n\t}\n\n\t&__body {\n\t\tdisplay: flex;\n\t\tflex-grow: 1;\n\t\tflex-direction: column;\n\t}\n\n\t&__header {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tmin-height: 44px;\n\t}\n\n\t&__actions {\n\t\tmargin-left: $comment-padding !important;\n\t}\n\n\t&__author {\n\t\toverflow: hidden;\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n\n\t&_loading,\n\t&__timestamp {\n\t\tmargin-left: auto;\n\t\ttext-align: right;\n\t\twhite-space: nowrap;\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n\n\t&__editor-group {\n\t\tposition: relative;\n\t}\n\n\t&__editor-description {\n\t\tcolor: var(--color-text-maxcontrast);\n\t\tpadding-block: var(--default-grid-baseline);\n\t}\n\n\t&__submit {\n\t\tposition: absolute !important;\n\t\tbottom: 0;\n\t\tright: 0;\n\t}\n\n\t&__message {\n\t\twhite-space: pre-wrap;\n\t\tword-break: break-word;\n\t\tmax-height: 70px;\n\t\toverflow: hidden;\n\t\tmargin-top: -6px;\n\t\t&--expanded {\n\t\t\tmax-height: none;\n\t\t\toverflow: visible;\n\t\t}\n\t}\n}\n\n.rich-contenteditable__input {\n\tmin-height: 44px;\n\tmargin: 0;\n\tpadding: $comment-padding;\n}\n\n'],sourceRoot:""}]);const r=s},82772:(t,e,n)=>{var a=n(85072),o=n.n(a),i=n(97825),s=n.n(i),r=n(77659),c=n.n(r),m=n(55056),d=n.n(m),l=n(10540),A=n.n(l),p=n(41113),u=n.n(p),C=n(92167),g={};g.styleTagTransform=u(),g.setAttributes=d(),g.insert=c().bind(null,"head"),g.domAPI=s(),g.insertStyleElement=A(),o()(C.A,g),C.A&&C.A.locals&&C.A.locals},65463:(t,e,n)=>{n.d(e,{A:()=>i});var a=n(4235),o=n(54416);n(465);const i=(0,n(14486).A)(o.A,a.X,a.Y,!1,null,"a54c4126",null).exports},16356:(t,e,n)=>{n.d(e,{A:()=>i});var a=n(21295),o=n(52547);const i=(0,n(14486).A)(o.A,a.X,a.Y,!1,null,null,null).exports},54416:(t,e,n)=>{n.d(e,{A:()=>a});const a=n(29369).A},52547:(t,e,n)=>{n.d(e,{A:()=>a});const a=n(28164).A},465:(t,e,n)=>{n(82772)}}]);
+//# sourceMappingURL=7462-7462.js.map?v=9c58610aebad939f1ce8 \ No newline at end of file
diff --git a/dist/7462-7462.js.map b/dist/7462-7462.js.map
index 08ef2c4f3f1..20bd91ccc4f 100644
--- a/dist/7462-7462.js.map
+++ b/dist/7462-7462.js.map
@@ -1 +1 @@
-{"version":3,"file":"7462-7462.js?v=d38151a6cdda03d0d4da","mappings":"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","sources":["webpack:///nextcloud/apps/comments/src/mixins/CommentMixin.js","webpack:///nextcloud/apps/comments/src/services/DeleteComment.js","webpack:///nextcloud/apps/comments/src/services/EditComment.js","webpack:///nextcloud/apps/comments/src/services/NewComment.js","webpack:///nextcloud/apps/comments/src/utils/decodeHtmlEntities.js","webpack:///nextcloud/apps/comments/src/mixins/CommentView.ts","webpack:///nextcloud/apps/comments/src/components/Comment.vue","webpack:///nextcloud/apps/comments/src/components/Moment.vue","webpack://nextcloud/./apps/comments/src/components/Comment.vue?d1f7","webpack://nextcloud/./apps/comments/src/components/Moment.vue?135d","webpack:///nextcloud/apps/comments/src/components/Comment.vue?vue&type=style&index=0&id=47c0e61c&prod&lang=scss&scoped=true","webpack://nextcloud/./apps/comments/src/components/Comment.vue?be0c","webpack://nextcloud/./apps/comments/src/components/Comment.vue?7f26","webpack://nextcloud/./apps/comments/src/components/Moment.vue?9b20","webpack:///nextcloud/apps/comments/src/components/Comment.vue?vue&type=script&lang=js","webpack:///nextcloud/apps/comments/src/components/Moment.vue?vue&type=script&lang=js"],"sourcesContent":["/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { showError, showUndo, TOAST_UNDO_TIMEOUT } from '@nextcloud/dialogs'\nimport NewComment from '../services/NewComment.js'\nimport DeleteComment from '../services/DeleteComment.js'\nimport EditComment from '../services/EditComment.js'\nimport logger from '../logger.js'\n\nexport default {\n\tprops: {\n\t\tid: {\n\t\t\ttype: Number,\n\t\t\tdefault: null,\n\t\t},\n\t\tmessage: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\tresourceId: {\n\t\t\ttype: [String, Number],\n\t\t\trequired: true,\n\t\t},\n\t\tresourceType: {\n\t\t\ttype: String,\n\t\t\tdefault: 'files',\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tdeleted: false,\n\t\t\tediting: false,\n\t\t\tloading: false,\n\t\t}\n\t},\n\n\tmethods: {\n\t\t// EDITION\n\t\tonEdit() {\n\t\t\tthis.editing = true\n\t\t},\n\t\tonEditCancel() {\n\t\t\tthis.editing = false\n\t\t\t// Restore original value\n\t\t\tthis.updateLocalMessage(this.message)\n\t\t},\n\t\tasync onEditComment(message) {\n\t\t\tthis.loading = true\n\t\t\ttry {\n\t\t\t\tawait EditComment(this.resourceType, this.resourceId, this.id, message)\n\t\t\t\tlogger.debug('Comment edited', { resourceType: this.resourceType, resourceId: this.resourceId, id: this.id, message })\n\t\t\t\tthis.$emit('update:message', message)\n\t\t\t\tthis.editing = false\n\t\t\t} catch (error) {\n\t\t\t\tshowError(t('comments', 'An error occurred while trying to edit the comment'))\n\t\t\t\tconsole.error(error)\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\n\t\t// DELETION\n\t\tonDeleteWithUndo() {\n\t\t\tthis.deleted = true\n\t\t\tconst timeOutDelete = setTimeout(this.onDelete, TOAST_UNDO_TIMEOUT)\n\t\t\tshowUndo(t('comments', 'Comment deleted'), () => {\n\t\t\t\tclearTimeout(timeOutDelete)\n\t\t\t\tthis.deleted = false\n\t\t\t})\n\t\t},\n\t\tasync onDelete() {\n\t\t\ttry {\n\t\t\t\tawait DeleteComment(this.resourceType, this.resourceId, this.id)\n\t\t\t\tlogger.debug('Comment deleted', { resourceType: this.resourceType, resourceId: this.resourceId, id: this.id })\n\t\t\t\tthis.$emit('delete', this.id)\n\t\t\t} catch (error) {\n\t\t\t\tshowError(t('comments', 'An error occurred while trying to delete the comment'))\n\t\t\t\tconsole.error(error)\n\t\t\t\tthis.deleted = false\n\t\t\t}\n\t\t},\n\n\t\t// CREATION\n\t\tasync onNewComment(message) {\n\t\t\tthis.loading = true\n\t\t\ttry {\n\t\t\t\tconst newComment = await NewComment(this.resourceType, this.resourceId, message)\n\t\t\t\tlogger.debug('New comment posted', { resourceType: this.resourceType, resourceId: this.resourceId, newComment })\n\t\t\t\tthis.$emit('new', newComment)\n\n\t\t\t\t// Clear old content\n\t\t\t\tthis.$emit('update:message', '')\n\t\t\t\tthis.localMessage = ''\n\t\t\t} catch (error) {\n\t\t\t\tshowError(t('comments', 'An error occurred while trying to create the comment'))\n\t\t\t\tconsole.error(error)\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\t},\n}\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport client from './DavClient.js'\n\n/**\n * Delete a comment\n *\n * @param {string} resourceType the resource type\n * @param {number} resourceId the resource ID\n * @param {number} commentId the comment iD\n */\nexport default async function(resourceType, resourceId, commentId) {\n\tconst commentPath = ['', resourceType, resourceId, commentId].join('/')\n\n\t// Fetch newly created comment data\n\tawait client.deleteFile(commentPath)\n}\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport client from './DavClient.js'\n\n/**\n * Edit an existing comment\n *\n * @param {string} resourceType the resource type\n * @param {number} resourceId the resource ID\n * @param {number} commentId the comment iD\n * @param {string} message the message content\n */\nexport default async function(resourceType, resourceId, commentId, message) {\n\tconst commentPath = ['', resourceType, resourceId, commentId].join('/')\n\n\treturn await client.customRequest(commentPath, Object.assign({\n\t\tmethod: 'PROPPATCH',\n\t\tdata: `<?xml version=\"1.0\"?>\n\t\t\t<d:propertyupdate\n\t\t\t\txmlns:d=\"DAV:\"\n\t\t\t\txmlns:oc=\"http://owncloud.org/ns\">\n\t\t\t<d:set>\n\t\t\t\t<d:prop>\n\t\t\t\t\t<oc:message>${message}</oc:message>\n\t\t\t\t</d:prop>\n\t\t\t</d:set>\n\t\t\t</d:propertyupdate>`,\n\t}))\n}\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { getRootPath } from '../utils/davUtils.js'\nimport { decodeHtmlEntities } from '../utils/decodeHtmlEntities.js'\nimport axios from '@nextcloud/axios'\nimport client from './DavClient.js'\n\n/**\n * Retrieve the comments list\n *\n * @param {string} resourceType the resource type\n * @param {number} resourceId the resource ID\n * @param {string} message the message\n * @return {object} the new comment\n */\nexport default async function(resourceType, resourceId, message) {\n\tconst resourcePath = ['', resourceType, resourceId].join('/')\n\n\tconst response = await axios.post(getRootPath() + resourcePath, {\n\t\tactorDisplayName: getCurrentUser().displayName,\n\t\tactorId: getCurrentUser().uid,\n\t\tactorType: 'users',\n\t\tcreationDateTime: (new Date()).toUTCString(),\n\t\tmessage,\n\t\tobjectType: resourceType,\n\t\tverb: 'comment',\n\t})\n\n\t// Retrieve comment id from resource location\n\tconst commentId = parseInt(response.headers['content-location'].split('/').pop())\n\tconst commentPath = resourcePath + '/' + commentId\n\n\t// Fetch newly created comment data\n\tconst comment = await client.stat(commentPath, {\n\t\tdetails: true,\n\t})\n\n\tconst props = comment.data.props\n\t// Decode twice to handle potentially double-encoded entities\n\t// FIXME Remove this once https://github.com/nextcloud/server/issues/29306\n\t// is resolved\n\tprops.actorDisplayName = decodeHtmlEntities(props.actorDisplayName, 2)\n\tprops.message = decodeHtmlEntities(props.message, 2)\n\n\treturn comment.data\n}\n","/**\n * @copyright Copyright (c) 2021 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/**\n * @param {any} value -\n * @param {any} passes -\n */\nexport function decodeHtmlEntities(value, passes = 1) {\n\tconst parser = new DOMParser()\n\tlet decoded = value\n\tfor (let i = 0; i < passes; i++) {\n\t\tdecoded = parser.parseFromString(decoded, 'text/html').documentElement.textContent\n\t}\n\treturn decoded\n}\n","import axios from '@nextcloud/axios';\nimport { getCurrentUser } from '@nextcloud/auth';\nimport { loadState } from '@nextcloud/initial-state';\nimport { generateOcsUrl } from '@nextcloud/router';\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n props: {\n resourceId: {\n type: Number,\n required: true,\n },\n resourceType: {\n type: String,\n default: 'files',\n },\n },\n data() {\n return {\n editorData: {\n actorDisplayName: getCurrentUser().displayName,\n actorId: getCurrentUser().uid,\n key: 'editor',\n },\n userData: {},\n };\n },\n methods: {\n /**\n * Autocomplete @mentions\n *\n * @param {string} search the query\n * @param {Function} callback the callback to process the results with\n */\n async autoComplete(search, callback) {\n const { data } = await axios.get(generateOcsUrl('core/autocomplete/get'), {\n params: {\n search,\n itemType: 'files',\n itemId: this.resourceId,\n sorter: 'commenters|share-recipients',\n limit: loadState('comments', 'maxAutoCompleteResults'),\n },\n });\n // Save user data so it can be used by the editor to replace mentions\n data.ocs.data.forEach(user => { this.userData[user.id] = user; });\n return callback(Object.values(this.userData));\n },\n /**\n * Make sure we have all mentions as Array of objects\n *\n * @param mentions the mentions list\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n genMentionsData(mentions) {\n Object.values(mentions)\n .flat()\n .forEach(mention => {\n this.userData[mention.mentionId] = {\n // TODO: support groups\n icon: 'icon-user',\n id: mention.mentionId,\n label: mention.mentionDisplayName,\n source: 'users',\n primary: getCurrentUser()?.uid === mention.mentionId,\n };\n });\n return this.userData;\n },\n },\n});\n","<!--\n - @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n<template>\n\t<component :is=\"tag\"\n\t\tv-show=\"!deleted\"\n\t\t:class=\"{'comment--loading': loading}\"\n\t\tclass=\"comment\">\n\t\t<!-- Comment header toolbar -->\n\t\t<div class=\"comment__side\">\n\t\t\t<!-- Author -->\n\t\t\t<NcAvatar class=\"comment__avatar\"\n\t\t\t\t:display-name=\"actorDisplayName\"\n\t\t\t\t:user=\"actorId\"\n\t\t\t\t:size=\"32\" />\n\t\t</div>\n\t\t<div class=\"comment__body\">\n\t\t\t<div class=\"comment__header\">\n\t\t\t\t<span class=\"comment__author\">{{ actorDisplayName }}</span>\n\n\t\t\t\t<!-- Comment actions,\n\t\t\t\t\tshow if we have a message id and current user is author -->\n\t\t\t\t<NcActions v-if=\"isOwnComment && id && !loading\" class=\"comment__actions\">\n\t\t\t\t\t<template v-if=\"!editing\">\n\t\t\t\t\t\t<NcActionButton close-after-click\n\t\t\t\t\t\t\t@click=\"onEdit\">\n\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t<IconEdit :size=\"20\" />\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t{{ t('comments', 'Edit comment') }}\n\t\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t\t<NcActionSeparator />\n\t\t\t\t\t\t<NcActionButton close-after-click\n\t\t\t\t\t\t\t@click=\"onDeleteWithUndo\">\n\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t<IconDelete :size=\"20\" />\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t{{ t('comments', 'Delete comment') }}\n\t\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t</template>\n\n\t\t\t\t\t<NcActionButton v-else @click=\"onEditCancel\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<IconClose :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t{{ t('comments', 'Cancel edit') }}\n\t\t\t\t\t</NcActionButton>\n\t\t\t\t</NcActions>\n\n\t\t\t\t<!-- Show loading if we're editing or deleting, not on new ones -->\n\t\t\t\t<div v-if=\"id && loading\" class=\"comment_loading icon-loading-small\" />\n\n\t\t\t\t<!-- Relative time to the comment creation -->\n\t\t\t\t<Moment v-else-if=\"creationDateTime\" class=\"comment__timestamp\" :timestamp=\"timestamp\" />\n\t\t\t</div>\n\n\t\t\t<!-- Message editor -->\n\t\t\t<form v-if=\"editor || editing\" class=\"comment__editor\" @submit.prevent>\n\t\t\t\t<div class=\"comment__editor-group\">\n\t\t\t\t\t<NcRichContenteditable ref=\"editor\"\n\t\t\t\t\t\t:auto-complete=\"autoComplete\"\n\t\t\t\t\t\t:contenteditable=\"!loading\"\n\t\t\t\t\t\t:label=\"editor ? t('comments', 'New comment') : t('comments', 'Edit comment')\"\n\t\t\t\t\t\t:placeholder=\"t('comments', 'Write a comment …')\"\n\t\t\t\t\t\t:value=\"localMessage\"\n\t\t\t\t\t\t:user-data=\"userData\"\n\t\t\t\t\t\taria-describedby=\"tab-comments__editor-description\"\n\t\t\t\t\t\t@update:value=\"updateLocalMessage\"\n\t\t\t\t\t\t@submit=\"onSubmit\" />\n\t\t\t\t\t<div class=\"comment__submit\">\n\t\t\t\t\t\t<NcButton type=\"tertiary-no-background\"\n\t\t\t\t\t\t\tnative-type=\"submit\"\n\t\t\t\t\t\t\t:aria-label=\"t('comments', 'Post comment')\"\n\t\t\t\t\t\t\t:disabled=\"isEmptyMessage\"\n\t\t\t\t\t\t\t@click=\"onSubmit\">\n\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t<NcLoadingIcon v-if=\"loading\" />\n\t\t\t\t\t\t\t\t<IconArrowRight v-else :size=\"20\" />\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t</NcButton>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div id=\"tab-comments__editor-description\" class=\"comment__editor-description\">\n\t\t\t\t\t{{ t('comments', '@ for mentions, : for emoji, / for smart picker') }}\n\t\t\t\t</div>\n\t\t\t</form>\n\n\t\t\t<!-- Message content -->\n\t\t\t<!-- The html is escaped and sanitized before rendering -->\n\t\t\t<!-- eslint-disable vue/no-v-html-->\n\t\t\t<div v-else\n\t\t\t\t:class=\"{'comment__message--expanded': expanded}\"\n\t\t\t\tclass=\"comment__message\"\n\t\t\t\t@click=\"onExpand\"\n\t\t\t\tv-html=\"renderedContent\" />\n\t\t\t<!-- eslint-enable vue/no-v-html-->\n\t\t</div>\n\t</component>\n</template>\n\n<script>\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { translate as t } from '@nextcloud/l10n'\nimport moment from '@nextcloud/moment'\n\nimport NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton.js'\nimport NcActions from '@nextcloud/vue/dist/Components/NcActions.js'\nimport NcActionSeparator from '@nextcloud/vue/dist/Components/NcActionSeparator.js'\nimport NcAvatar from '@nextcloud/vue/dist/Components/NcAvatar.js'\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\nimport RichEditorMixin from '@nextcloud/vue/dist/Mixins/richEditor.js'\n\nimport IconArrowRight from 'vue-material-design-icons/ArrowRight.vue'\nimport IconClose from 'vue-material-design-icons/Close.vue'\nimport IconDelete from 'vue-material-design-icons/Delete.vue'\nimport IconEdit from 'vue-material-design-icons/Pencil.vue'\n\nimport Moment from './Moment.vue'\nimport CommentMixin from '../mixins/CommentMixin.js'\n\n// Dynamic loading\nconst NcRichContenteditable = () => import('@nextcloud/vue/dist/Components/NcRichContenteditable.js')\n\nexport default {\n\tname: 'Comment',\n\n\tcomponents: {\n\t\tNcActionButton,\n\t\tNcActions,\n\t\tNcActionSeparator,\n\t\tArrowRight,\n\t\tNcAvatar,\n\t\tNcButton,\n\t\tMoment,\n\t\tNcRichContenteditable,\n\t},\n\tmixins: [RichEditorMixin, CommentMixin],\n\n\tinheritAttrs: false,\n\n\tprops: {\n\t\tactorDisplayName: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tactorId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tcreationDateTime: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Force the editor display\n\t\t */\n\t\teditor: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Provide the autocompletion data\n\t\t */\n\t\tautoComplete: {\n\t\t\ttype: Function,\n\t\t\trequired: true,\n\t\t},\n\n\t\ttag: {\n\t\t\ttype: String,\n\t\t\tdefault: 'div',\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\texpanded: false,\n\t\t\t// Only change data locally and update the original\n\t\t\t// parent data when the request is sent and resolved\n\t\t\tlocalMessage: '',\n\t\t\tsubmitted: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\n\t\t/**\n\t\t * Is the current user the author of this comment\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisOwnComment() {\n\t\t\treturn getCurrentUser().uid === this.actorId\n\t\t},\n\n\t\t/**\n\t\t * Rendered content as html string\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\trenderedContent() {\n\t\t\tif (this.isEmptyMessage) {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\treturn this.renderContent(this.localMessage)\n\t\t},\n\n\t\tisEmptyMessage() {\n\t\t\treturn !this.localMessage || this.localMessage.trim() === ''\n\t\t},\n\n\t\ttimestamp() {\n\t\t\t// seconds, not milliseconds\n\t\t\treturn parseInt(moment(this.creationDateTime).format('x'), 10) / 1000\n\t\t},\n\t},\n\n\twatch: {\n\t\t// If the data change, update the local value\n\t\tmessage(message) {\n\t\t\tthis.updateLocalMessage(message)\n\t\t},\n\t},\n\n\tbeforeMount() {\n\t\t// Init localMessage\n\t\tthis.updateLocalMessage(this.message)\n\t},\n\n\tmethods: {\n\t\tt,\n\n\t\t/**\n\t\t * Update local Message on outer change\n\t\t *\n\t\t * @param {string} message the message to set\n\t\t */\n\t\tupdateLocalMessage(message) {\n\t\t\tthis.localMessage = message.toString()\n\t\t\tthis.submitted = false\n\t\t},\n\n\t\t/**\n\t\t * Dispatch message between edit and create\n\t\t */\n\t\tonSubmit() {\n\t\t\t// Do not submit if message is empty\n\t\t\tif (this.localMessage.trim() === '') {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (this.editor) {\n\t\t\t\tthis.onNewComment(this.localMessage.trim())\n\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t// Focus the editor again\n\t\t\t\t\tthis.$refs.editor.$el.focus()\n\t\t\t\t})\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.onEditComment(this.localMessage.trim())\n\t\t},\n\n\t\tonExpand() {\n\t\t\tthis.expanded = true\n\t\t},\n\t},\n\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@use \"sass:math\";\n\n$comment-padding: 10px;\n\n.comment {\n\tdisplay: flex;\n\tgap: 8px;\n\tpadding: 5px $comment-padding;\n\n\t&__side {\n\t\tdisplay: flex;\n\t\talign-items: flex-start;\n\t\tpadding-top: 6px;\n\t}\n\n\t&__body {\n\t\tdisplay: flex;\n\t\tflex-grow: 1;\n\t\tflex-direction: column;\n\t}\n\n\t&__header {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tmin-height: 44px;\n\t}\n\n\t&__actions {\n\t\tmargin-left: $comment-padding !important;\n\t}\n\n\t&__author {\n\t\toverflow: hidden;\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n\n\t&_loading,\n\t&__timestamp {\n\t\tmargin-left: auto;\n\t\ttext-align: right;\n\t\twhite-space: nowrap;\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n\n\t&__editor-group {\n\t\tposition: relative;\n\t}\n\n\t&__editor-description {\n\t\tcolor: var(--color-text-maxcontrast);\n\t\tpadding-block: var(--default-grid-baseline);\n\t}\n\n\t&__submit {\n\t\tposition: absolute !important;\n\t\tbottom: 0;\n\t\tright: 0;\n\t}\n\n\t&__message {\n\t\twhite-space: pre-wrap;\n\t\tword-break: break-word;\n\t\tmax-height: 70px;\n\t\toverflow: hidden;\n\t\tmargin-top: -6px;\n\t\t&--expanded {\n\t\t\tmax-height: none;\n\t\t\toverflow: visible;\n\t\t}\n\t}\n}\n\n.rich-contenteditable__input {\n\tmin-height: 44px;\n\tmargin: 0;\n\tpadding: $comment-padding;\n}\n\n</style>\n","<!-- TODO: Move to vue components -->\n\n<template>\n\t<span class=\"live-relative-timestamp\" :data-timestamp=\"timestamp * 1000\" :title=\"title\">{{ formatted }}</span>\n</template>\n\n<script>\nimport moment from '@nextcloud/moment'\n\nexport default {\n\tname: 'Moment',\n\tprops: {\n\t\ttimestamp: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\t\tformat: {\n\t\t\ttype: String,\n\t\t\tdefault: 'LLL',\n\t\t},\n\t},\n\tcomputed: {\n\t\ttitle() {\n\t\t\treturn moment.unix(this.timestamp).format(this.format)\n\t\t},\n\t\tformatted() {\n\t\t\treturn moment.unix(this.timestamp).fromNow()\n\t\t},\n\t},\n}\n</script>\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c(_vm.tag,{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.deleted),expression:\"!deleted\"}],tag:\"component\",staticClass:\"comment\",class:{'comment--loading': _vm.loading}},[_c('div',{staticClass:\"comment__side\"},[_c('NcAvatar',{staticClass:\"comment__avatar\",attrs:{\"display-name\":_vm.actorDisplayName,\"user\":_vm.actorId,\"size\":32}})],1),_vm._v(\" \"),_c('div',{staticClass:\"comment__body\"},[_c('div',{staticClass:\"comment__header\"},[_c('span',{staticClass:\"comment__author\"},[_vm._v(_vm._s(_vm.actorDisplayName))]),_vm._v(\" \"),(_vm.isOwnComment && _vm.id && !_vm.loading)?_c('NcActions',{staticClass:\"comment__actions\"},[(!_vm.editing)?[_c('NcActionButton',{attrs:{\"close-after-click\":\"\"},on:{\"click\":_vm.onEdit},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('IconEdit',{attrs:{\"size\":20}})]},proxy:true}],null,false,649782975)},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('comments', 'Edit comment'))+\"\\n\\t\\t\\t\\t\\t\")]),_vm._v(\" \"),_c('NcActionSeparator'),_vm._v(\" \"),_c('NcActionButton',{attrs:{\"close-after-click\":\"\"},on:{\"click\":_vm.onDeleteWithUndo},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('IconDelete',{attrs:{\"size\":20}})]},proxy:true}],null,false,881161434)},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('comments', 'Delete comment'))+\"\\n\\t\\t\\t\\t\\t\")])]:_c('NcActionButton',{on:{\"click\":_vm.onEditCancel},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('IconClose',{attrs:{\"size\":20}})]},proxy:true}],null,false,2888946197)},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('comments', 'Cancel edit'))+\"\\n\\t\\t\\t\\t\")])],2):_vm._e(),_vm._v(\" \"),(_vm.id && _vm.loading)?_c('div',{staticClass:\"comment_loading icon-loading-small\"}):(_vm.creationDateTime)?_c('Moment',{staticClass:\"comment__timestamp\",attrs:{\"timestamp\":_vm.timestamp}}):_vm._e()],1),_vm._v(\" \"),(_vm.editor || _vm.editing)?_c('form',{staticClass:\"comment__editor\",on:{\"submit\":function($event){$event.preventDefault();}}},[_c('div',{staticClass:\"comment__editor-group\"},[_c('NcRichContenteditable',{ref:\"editor\",attrs:{\"auto-complete\":_vm.autoComplete,\"contenteditable\":!_vm.loading,\"label\":_vm.editor ? _vm.t('comments', 'New comment') : _vm.t('comments', 'Edit comment'),\"placeholder\":_vm.t('comments', 'Write a comment …'),\"value\":_vm.localMessage,\"user-data\":_vm.userData,\"aria-describedby\":\"tab-comments__editor-description\"},on:{\"update:value\":_vm.updateLocalMessage,\"submit\":_vm.onSubmit}}),_vm._v(\" \"),_c('div',{staticClass:\"comment__submit\"},[_c('NcButton',{attrs:{\"type\":\"tertiary-no-background\",\"native-type\":\"submit\",\"aria-label\":_vm.t('comments', 'Post comment'),\"disabled\":_vm.isEmptyMessage},on:{\"click\":_vm.onSubmit},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [(_vm.loading)?_c('NcLoadingIcon'):_c('IconArrowRight',{attrs:{\"size\":20}})]},proxy:true}],null,false,758946661)})],1)],1),_vm._v(\" \"),_c('div',{staticClass:\"comment__editor-description\",attrs:{\"id\":\"tab-comments__editor-description\"}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('comments', '@ for mentions, : for emoji, / for smart picker'))+\"\\n\\t\\t\\t\")])]):_c('div',{staticClass:\"comment__message\",class:{'comment__message--expanded': _vm.expanded},domProps:{\"innerHTML\":_vm._s(_vm.renderedContent)},on:{\"click\":_vm.onExpand}})])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('span',{staticClass:\"live-relative-timestamp\",attrs:{\"data-timestamp\":_vm.timestamp * 1000,\"title\":_vm.title}},[_vm._v(_vm._s(_vm.formatted))])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.comment[data-v-47c0e61c]{display:flex;gap:8px;padding:5px 10px}.comment__side[data-v-47c0e61c]{display:flex;align-items:flex-start;padding-top:6px}.comment__body[data-v-47c0e61c]{display:flex;flex-grow:1;flex-direction:column}.comment__header[data-v-47c0e61c]{display:flex;align-items:center;min-height:44px}.comment__actions[data-v-47c0e61c]{margin-left:10px !important}.comment__author[data-v-47c0e61c]{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:var(--color-text-maxcontrast)}.comment_loading[data-v-47c0e61c],.comment__timestamp[data-v-47c0e61c]{margin-left:auto;text-align:right;white-space:nowrap;color:var(--color-text-maxcontrast)}.comment__editor-group[data-v-47c0e61c]{position:relative}.comment__editor-description[data-v-47c0e61c]{color:var(--color-text-maxcontrast);padding-block:var(--default-grid-baseline)}.comment__submit[data-v-47c0e61c]{position:absolute !important;bottom:0;right:0}.comment__message[data-v-47c0e61c]{white-space:pre-wrap;word-break:break-word;max-height:70px;overflow:hidden;margin-top:-6px}.comment__message--expanded[data-v-47c0e61c]{max-height:none;overflow:visible}.rich-contenteditable__input[data-v-47c0e61c]{min-height:44px;margin:0;padding:10px}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/comments/src/components/Comment.vue\"],\"names\":[],\"mappings\":\"AAKA,0BACC,YAAA,CACA,OAAA,CACA,gBAAA,CAEA,gCACC,YAAA,CACA,sBAAA,CACA,eAAA,CAGD,gCACC,YAAA,CACA,WAAA,CACA,qBAAA,CAGD,kCACC,YAAA,CACA,kBAAA,CACA,eAAA,CAGD,mCACC,2BAAA,CAGD,kCACC,eAAA,CACA,kBAAA,CACA,sBAAA,CACA,mCAAA,CAGD,uEAEC,gBAAA,CACA,gBAAA,CACA,kBAAA,CACA,mCAAA,CAGD,wCACC,iBAAA,CAGD,8CACC,mCAAA,CACA,0CAAA,CAGD,kCACC,4BAAA,CACA,QAAA,CACA,OAAA,CAGD,mCACC,oBAAA,CACA,qBAAA,CACA,eAAA,CACA,eAAA,CACA,eAAA,CACA,6CACC,eAAA,CACA,gBAAA,CAKH,8CACC,eAAA,CACA,QAAA,CACA,YA3EiB\",\"sourcesContent\":[\"\\n@use \\\"sass:math\\\";\\n\\n$comment-padding: 10px;\\n\\n.comment {\\n\\tdisplay: flex;\\n\\tgap: 8px;\\n\\tpadding: 5px $comment-padding;\\n\\n\\t&__side {\\n\\t\\tdisplay: flex;\\n\\t\\talign-items: flex-start;\\n\\t\\tpadding-top: 6px;\\n\\t}\\n\\n\\t&__body {\\n\\t\\tdisplay: flex;\\n\\t\\tflex-grow: 1;\\n\\t\\tflex-direction: column;\\n\\t}\\n\\n\\t&__header {\\n\\t\\tdisplay: flex;\\n\\t\\talign-items: center;\\n\\t\\tmin-height: 44px;\\n\\t}\\n\\n\\t&__actions {\\n\\t\\tmargin-left: $comment-padding !important;\\n\\t}\\n\\n\\t&__author {\\n\\t\\toverflow: hidden;\\n\\t\\twhite-space: nowrap;\\n\\t\\ttext-overflow: ellipsis;\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t}\\n\\n\\t&_loading,\\n\\t&__timestamp {\\n\\t\\tmargin-left: auto;\\n\\t\\ttext-align: right;\\n\\t\\twhite-space: nowrap;\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t}\\n\\n\\t&__editor-group {\\n\\t\\tposition: relative;\\n\\t}\\n\\n\\t&__editor-description {\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\tpadding-block: var(--default-grid-baseline);\\n\\t}\\n\\n\\t&__submit {\\n\\t\\tposition: absolute !important;\\n\\t\\tbottom: 0;\\n\\t\\tright: 0;\\n\\t}\\n\\n\\t&__message {\\n\\t\\twhite-space: pre-wrap;\\n\\t\\tword-break: break-word;\\n\\t\\tmax-height: 70px;\\n\\t\\toverflow: hidden;\\n\\t\\tmargin-top: -6px;\\n\\t\\t&--expanded {\\n\\t\\t\\tmax-height: none;\\n\\t\\t\\toverflow: visible;\\n\\t\\t}\\n\\t}\\n}\\n\\n.rich-contenteditable__input {\\n\\tmin-height: 44px;\\n\\tmargin: 0;\\n\\tpadding: $comment-padding;\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comment.vue?vue&type=style&index=0&id=47c0e61c&prod&lang=scss&scoped=true\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comment.vue?vue&type=style&index=0&id=47c0e61c&prod&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Comment.vue?vue&type=template&id=47c0e61c&scoped=true\"\nimport script from \"./Comment.vue?vue&type=script&lang=js\"\nexport * from \"./Comment.vue?vue&type=script&lang=js\"\nimport style0 from \"./Comment.vue?vue&type=style&index=0&id=47c0e61c&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"47c0e61c\",\n null\n \n)\n\nexport default component.exports","import { render, staticRenderFns } from \"./Moment.vue?vue&type=template&id=57999be6\"\nimport script from \"./Moment.vue?vue&type=script&lang=js\"\nexport * from \"./Moment.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comment.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comment.vue?vue&type=script&lang=js\"","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Moment.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Moment.vue?vue&type=script&lang=js\""],"names":["props","id","type","Number","default","message","String","resourceId","required","resourceType","data","deleted","editing","loading","methods","onEdit","this","onEditCancel","updateLocalMessage","onEditComment","EditComment","logger","debug","$emit","error","showError","t","console","onDeleteWithUndo","timeOutDelete","setTimeout","onDelete","TOAST_UNDO_TIMEOUT","showUndo","clearTimeout","DeleteComment","onNewComment","newComment","NewComment","localMessage","async","commentId","commentPath","join","client","deleteFile","customRequest","Object","assign","method","concat","resourcePath","response","axios","post","getRootPath","actorDisplayName","getCurrentUser","displayName","actorId","uid","actorType","creationDateTime","Date","toUTCString","objectType","verb","parseInt","headers","split","pop","comment","stat","details","decodeHtmlEntities","value","passes","arguments","length","undefined","parser","DOMParser","decoded","i","parseFromString","documentElement","textContent","defineComponent","editorData","key","userData","autoComplete","search","callback","get","generateOcsUrl","params","itemType","itemId","sorter","limit","loadState","ocs","forEach","user","values","genMentionsData","mentions","flat","mention","_getCurrentUser","mentionId","icon","label","mentionDisplayName","source","primary","name","components","NcActionButton","NcActions","NcActionSeparator","ArrowRight","NcAvatar","NcButton","Moment","NcRichContenteditable","mixins","RichEditorMixin","CommentMixin","inheritAttrs","editor","Boolean","Function","tag","expanded","submitted","computed","isOwnComment","renderedContent","isEmptyMessage","renderContent","trim","timestamp","moment","format","watch","beforeMount","toString","onSubmit","$nextTick","$refs","$el","focus","onExpand","title","unix","formatted","fromNow","render","_vm","_c","_self","directives","rawName","expression","staticClass","class","attrs","_v","_s","on","scopedSlots","_u","fn","proxy","_e","$event","preventDefault","ref","domProps","staticRenderFns","___CSS_LOADER_EXPORT___","push","module","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","locals"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"file":"7462-7462.js?v=9c58610aebad939f1ce8","mappings":"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","sources":["webpack:///nextcloud/apps/comments/src/mixins/CommentMixin.js","webpack:///nextcloud/apps/comments/src/services/DeleteComment.js","webpack:///nextcloud/apps/comments/src/services/EditComment.js","webpack:///nextcloud/apps/comments/src/services/NewComment.js","webpack:///nextcloud/apps/comments/src/utils/decodeHtmlEntities.js","webpack:///nextcloud/apps/comments/src/mixins/CommentView.ts","webpack:///nextcloud/apps/comments/src/components/Comment.vue","webpack:///nextcloud/apps/comments/src/components/Moment.vue","webpack://nextcloud/./apps/comments/src/components/Comment.vue?d1f7","webpack://nextcloud/./apps/comments/src/components/Moment.vue?135d","webpack:///nextcloud/apps/comments/src/components/Comment.vue?vue&type=style&index=0&id=a54c4126&prod&lang=scss&scoped=true","webpack://nextcloud/./apps/comments/src/components/Comment.vue?c3f8","webpack://nextcloud/./apps/comments/src/components/Comment.vue?7f26","webpack://nextcloud/./apps/comments/src/components/Moment.vue?9b20","webpack:///nextcloud/apps/comments/src/components/Comment.vue?vue&type=script&lang=js","webpack:///nextcloud/apps/comments/src/components/Moment.vue?vue&type=script&lang=js"],"sourcesContent":["/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { showError, showUndo, TOAST_UNDO_TIMEOUT } from '@nextcloud/dialogs'\nimport NewComment from '../services/NewComment.js'\nimport DeleteComment from '../services/DeleteComment.js'\nimport EditComment from '../services/EditComment.js'\nimport logger from '../logger.js'\n\nexport default {\n\tprops: {\n\t\tid: {\n\t\t\ttype: Number,\n\t\t\tdefault: null,\n\t\t},\n\t\tmessage: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\tresourceId: {\n\t\t\ttype: [String, Number],\n\t\t\trequired: true,\n\t\t},\n\t\tresourceType: {\n\t\t\ttype: String,\n\t\t\tdefault: 'files',\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tdeleted: false,\n\t\t\tediting: false,\n\t\t\tloading: false,\n\t\t}\n\t},\n\n\tmethods: {\n\t\t// EDITION\n\t\tonEdit() {\n\t\t\tthis.editing = true\n\t\t},\n\t\tonEditCancel() {\n\t\t\tthis.editing = false\n\t\t\t// Restore original value\n\t\t\tthis.updateLocalMessage(this.message)\n\t\t},\n\t\tasync onEditComment(message) {\n\t\t\tthis.loading = true\n\t\t\ttry {\n\t\t\t\tawait EditComment(this.resourceType, this.resourceId, this.id, message)\n\t\t\t\tlogger.debug('Comment edited', { resourceType: this.resourceType, resourceId: this.resourceId, id: this.id, message })\n\t\t\t\tthis.$emit('update:message', message)\n\t\t\t\tthis.editing = false\n\t\t\t} catch (error) {\n\t\t\t\tshowError(t('comments', 'An error occurred while trying to edit the comment'))\n\t\t\t\tconsole.error(error)\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\n\t\t// DELETION\n\t\tonDeleteWithUndo() {\n\t\t\tthis.deleted = true\n\t\t\tconst timeOutDelete = setTimeout(this.onDelete, TOAST_UNDO_TIMEOUT)\n\t\t\tshowUndo(t('comments', 'Comment deleted'), () => {\n\t\t\t\tclearTimeout(timeOutDelete)\n\t\t\t\tthis.deleted = false\n\t\t\t})\n\t\t},\n\t\tasync onDelete() {\n\t\t\ttry {\n\t\t\t\tawait DeleteComment(this.resourceType, this.resourceId, this.id)\n\t\t\t\tlogger.debug('Comment deleted', { resourceType: this.resourceType, resourceId: this.resourceId, id: this.id })\n\t\t\t\tthis.$emit('delete', this.id)\n\t\t\t} catch (error) {\n\t\t\t\tshowError(t('comments', 'An error occurred while trying to delete the comment'))\n\t\t\t\tconsole.error(error)\n\t\t\t\tthis.deleted = false\n\t\t\t}\n\t\t},\n\n\t\t// CREATION\n\t\tasync onNewComment(message) {\n\t\t\tthis.loading = true\n\t\t\ttry {\n\t\t\t\tconst newComment = await NewComment(this.resourceType, this.resourceId, message)\n\t\t\t\tlogger.debug('New comment posted', { resourceType: this.resourceType, resourceId: this.resourceId, newComment })\n\t\t\t\tthis.$emit('new', newComment)\n\n\t\t\t\t// Clear old content\n\t\t\t\tthis.$emit('update:message', '')\n\t\t\t\tthis.localMessage = ''\n\t\t\t} catch (error) {\n\t\t\t\tshowError(t('comments', 'An error occurred while trying to create the comment'))\n\t\t\t\tconsole.error(error)\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\t},\n}\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport client from './DavClient.js'\n\n/**\n * Delete a comment\n *\n * @param {string} resourceType the resource type\n * @param {number} resourceId the resource ID\n * @param {number} commentId the comment iD\n */\nexport default async function(resourceType, resourceId, commentId) {\n\tconst commentPath = ['', resourceType, resourceId, commentId].join('/')\n\n\t// Fetch newly created comment data\n\tawait client.deleteFile(commentPath)\n}\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport client from './DavClient.js'\n\n/**\n * Edit an existing comment\n *\n * @param {string} resourceType the resource type\n * @param {number} resourceId the resource ID\n * @param {number} commentId the comment iD\n * @param {string} message the message content\n */\nexport default async function(resourceType, resourceId, commentId, message) {\n\tconst commentPath = ['', resourceType, resourceId, commentId].join('/')\n\n\treturn await client.customRequest(commentPath, Object.assign({\n\t\tmethod: 'PROPPATCH',\n\t\tdata: `<?xml version=\"1.0\"?>\n\t\t\t<d:propertyupdate\n\t\t\t\txmlns:d=\"DAV:\"\n\t\t\t\txmlns:oc=\"http://owncloud.org/ns\">\n\t\t\t<d:set>\n\t\t\t\t<d:prop>\n\t\t\t\t\t<oc:message>${message}</oc:message>\n\t\t\t\t</d:prop>\n\t\t\t</d:set>\n\t\t\t</d:propertyupdate>`,\n\t}))\n}\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { getRootPath } from '../utils/davUtils.js'\nimport { decodeHtmlEntities } from '../utils/decodeHtmlEntities.js'\nimport axios from '@nextcloud/axios'\nimport client from './DavClient.js'\n\n/**\n * Retrieve the comments list\n *\n * @param {string} resourceType the resource type\n * @param {number} resourceId the resource ID\n * @param {string} message the message\n * @return {object} the new comment\n */\nexport default async function(resourceType, resourceId, message) {\n\tconst resourcePath = ['', resourceType, resourceId].join('/')\n\n\tconst response = await axios.post(getRootPath() + resourcePath, {\n\t\tactorDisplayName: getCurrentUser().displayName,\n\t\tactorId: getCurrentUser().uid,\n\t\tactorType: 'users',\n\t\tcreationDateTime: (new Date()).toUTCString(),\n\t\tmessage,\n\t\tobjectType: resourceType,\n\t\tverb: 'comment',\n\t})\n\n\t// Retrieve comment id from resource location\n\tconst commentId = parseInt(response.headers['content-location'].split('/').pop())\n\tconst commentPath = resourcePath + '/' + commentId\n\n\t// Fetch newly created comment data\n\tconst comment = await client.stat(commentPath, {\n\t\tdetails: true,\n\t})\n\n\tconst props = comment.data.props\n\t// Decode twice to handle potentially double-encoded entities\n\t// FIXME Remove this once https://github.com/nextcloud/server/issues/29306\n\t// is resolved\n\tprops.actorDisplayName = decodeHtmlEntities(props.actorDisplayName, 2)\n\tprops.message = decodeHtmlEntities(props.message, 2)\n\n\treturn comment.data\n}\n","/**\n * @copyright Copyright (c) 2021 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/**\n * @param {any} value -\n * @param {any} passes -\n */\nexport function decodeHtmlEntities(value, passes = 1) {\n\tconst parser = new DOMParser()\n\tlet decoded = value\n\tfor (let i = 0; i < passes; i++) {\n\t\tdecoded = parser.parseFromString(decoded, 'text/html').documentElement.textContent\n\t}\n\treturn decoded\n}\n","import axios from '@nextcloud/axios';\nimport { getCurrentUser } from '@nextcloud/auth';\nimport { loadState } from '@nextcloud/initial-state';\nimport { generateOcsUrl } from '@nextcloud/router';\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n props: {\n resourceId: {\n type: Number,\n required: true,\n },\n resourceType: {\n type: String,\n default: 'files',\n },\n },\n data() {\n return {\n editorData: {\n actorDisplayName: getCurrentUser().displayName,\n actorId: getCurrentUser().uid,\n key: 'editor',\n },\n userData: {},\n };\n },\n methods: {\n /**\n * Autocomplete @mentions\n *\n * @param {string} search the query\n * @param {Function} callback the callback to process the results with\n */\n async autoComplete(search, callback) {\n const { data } = await axios.get(generateOcsUrl('core/autocomplete/get'), {\n params: {\n search,\n itemType: 'files',\n itemId: this.resourceId,\n sorter: 'commenters|share-recipients',\n limit: loadState('comments', 'maxAutoCompleteResults'),\n },\n });\n // Save user data so it can be used by the editor to replace mentions\n data.ocs.data.forEach(user => { this.userData[user.id] = user; });\n return callback(Object.values(this.userData));\n },\n /**\n * Make sure we have all mentions as Array of objects\n *\n * @param mentions the mentions list\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n genMentionsData(mentions) {\n Object.values(mentions)\n .flat()\n .forEach(mention => {\n this.userData[mention.mentionId] = {\n // TODO: support groups\n icon: 'icon-user',\n id: mention.mentionId,\n label: mention.mentionDisplayName,\n source: 'users',\n primary: getCurrentUser()?.uid === mention.mentionId,\n };\n });\n return this.userData;\n },\n },\n});\n","<!--\n - @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n<template>\n\t<component :is=\"tag\"\n\t\tv-show=\"!deleted\"\n\t\t:class=\"{'comment--loading': loading}\"\n\t\tclass=\"comment\">\n\t\t<!-- Comment header toolbar -->\n\t\t<div class=\"comment__side\">\n\t\t\t<!-- Author -->\n\t\t\t<NcAvatar class=\"comment__avatar\"\n\t\t\t\t:display-name=\"actorDisplayName\"\n\t\t\t\t:user=\"actorId\"\n\t\t\t\t:size=\"32\" />\n\t\t</div>\n\t\t<div class=\"comment__body\">\n\t\t\t<div class=\"comment__header\">\n\t\t\t\t<span class=\"comment__author\">{{ actorDisplayName }}</span>\n\n\t\t\t\t<!-- Comment actions,\n\t\t\t\t\tshow if we have a message id and current user is author -->\n\t\t\t\t<NcActions v-if=\"isOwnComment && id && !loading\" class=\"comment__actions\">\n\t\t\t\t\t<template v-if=\"!editing\">\n\t\t\t\t\t\t<NcActionButton close-after-click\n\t\t\t\t\t\t\t@click=\"onEdit\">\n\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t<IconEdit :size=\"20\" />\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t{{ t('comments', 'Edit comment') }}\n\t\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t\t<NcActionSeparator />\n\t\t\t\t\t\t<NcActionButton close-after-click\n\t\t\t\t\t\t\t@click=\"onDeleteWithUndo\">\n\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t<IconDelete :size=\"20\" />\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t{{ t('comments', 'Delete comment') }}\n\t\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t</template>\n\n\t\t\t\t\t<NcActionButton v-else @click=\"onEditCancel\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<IconClose :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t{{ t('comments', 'Cancel edit') }}\n\t\t\t\t\t</NcActionButton>\n\t\t\t\t</NcActions>\n\n\t\t\t\t<!-- Show loading if we're editing or deleting, not on new ones -->\n\t\t\t\t<div v-if=\"id && loading\" class=\"comment_loading icon-loading-small\" />\n\n\t\t\t\t<!-- Relative time to the comment creation -->\n\t\t\t\t<Moment v-else-if=\"creationDateTime\" class=\"comment__timestamp\" :timestamp=\"timestamp\" />\n\t\t\t</div>\n\n\t\t\t<!-- Message editor -->\n\t\t\t<form v-if=\"editor || editing\" class=\"comment__editor\" @submit.prevent>\n\t\t\t\t<div class=\"comment__editor-group\">\n\t\t\t\t\t<NcRichContenteditable ref=\"editor\"\n\t\t\t\t\t\t:auto-complete=\"autoComplete\"\n\t\t\t\t\t\t:contenteditable=\"!loading\"\n\t\t\t\t\t\t:label=\"editor ? t('comments', 'New comment') : t('comments', 'Edit comment')\"\n\t\t\t\t\t\t:placeholder=\"t('comments', 'Write a comment …')\"\n\t\t\t\t\t\t:value=\"localMessage\"\n\t\t\t\t\t\t:user-data=\"userData\"\n\t\t\t\t\t\taria-describedby=\"tab-comments__editor-description\"\n\t\t\t\t\t\t@update:value=\"updateLocalMessage\"\n\t\t\t\t\t\t@submit=\"onSubmit\" />\n\t\t\t\t\t<div class=\"comment__submit\">\n\t\t\t\t\t\t<NcButton type=\"tertiary-no-background\"\n\t\t\t\t\t\t\tnative-type=\"submit\"\n\t\t\t\t\t\t\t:aria-label=\"t('comments', 'Post comment')\"\n\t\t\t\t\t\t\t:disabled=\"isEmptyMessage\"\n\t\t\t\t\t\t\t@click=\"onSubmit\">\n\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t<NcLoadingIcon v-if=\"loading\" />\n\t\t\t\t\t\t\t\t<IconArrowRight v-else :size=\"20\" />\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t</NcButton>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div id=\"tab-comments__editor-description\" class=\"comment__editor-description\">\n\t\t\t\t\t{{ t('comments', '@ for mentions, : for emoji, / for smart picker') }}\n\t\t\t\t</div>\n\t\t\t</form>\n\n\t\t\t<!-- Message content -->\n\t\t\t<!-- The html is escaped and sanitized before rendering -->\n\t\t\t<!-- eslint-disable vue/no-v-html-->\n\t\t\t<div v-else\n\t\t\t\t:class=\"{'comment__message--expanded': expanded}\"\n\t\t\t\tclass=\"comment__message\"\n\t\t\t\t@click=\"onExpand\"\n\t\t\t\tv-html=\"renderedContent\" />\n\t\t\t<!-- eslint-enable vue/no-v-html-->\n\t\t</div>\n\t</component>\n</template>\n\n<script>\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { translate as t } from '@nextcloud/l10n'\nimport moment from '@nextcloud/moment'\n\nimport NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton.js'\nimport NcActions from '@nextcloud/vue/dist/Components/NcActions.js'\nimport NcActionSeparator from '@nextcloud/vue/dist/Components/NcActionSeparator.js'\nimport NcAvatar from '@nextcloud/vue/dist/Components/NcAvatar.js'\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\nimport RichEditorMixin from '@nextcloud/vue/dist/Mixins/richEditor.js'\n\nimport IconArrowRight from 'vue-material-design-icons/ArrowRight.vue'\nimport IconClose from 'vue-material-design-icons/Close.vue'\nimport IconDelete from 'vue-material-design-icons/Delete.vue'\nimport IconEdit from 'vue-material-design-icons/Pencil.vue'\n\nimport Moment from './Moment.vue'\nimport CommentMixin from '../mixins/CommentMixin.js'\n\n// Dynamic loading\nconst NcRichContenteditable = () => import('@nextcloud/vue/dist/Components/NcRichContenteditable.js')\n\nexport default {\n\tname: 'Comment',\n\n\tcomponents: {\n\t\tIconArrowRight,\n\t\tIconClose,\n\t\tIconDelete,\n\t\tIconEdit,\n\t\tMoment,\n\t\tNcActionButton,\n\t\tNcActions,\n\t\tNcActionSeparator,\n\t\tNcAvatar,\n\t\tNcButton,\n\t\tNcRichContenteditable,\n\t},\n\tmixins: [RichEditorMixin, CommentMixin],\n\n\tinheritAttrs: false,\n\n\tprops: {\n\t\tactorDisplayName: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tactorId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tcreationDateTime: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Force the editor display\n\t\t */\n\t\teditor: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Provide the autocompletion data\n\t\t */\n\t\tautoComplete: {\n\t\t\ttype: Function,\n\t\t\trequired: true,\n\t\t},\n\n\t\ttag: {\n\t\t\ttype: String,\n\t\t\tdefault: 'div',\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\texpanded: false,\n\t\t\t// Only change data locally and update the original\n\t\t\t// parent data when the request is sent and resolved\n\t\t\tlocalMessage: '',\n\t\t\tsubmitted: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\n\t\t/**\n\t\t * Is the current user the author of this comment\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisOwnComment() {\n\t\t\treturn getCurrentUser().uid === this.actorId\n\t\t},\n\n\t\t/**\n\t\t * Rendered content as html string\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\trenderedContent() {\n\t\t\tif (this.isEmptyMessage) {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\treturn this.renderContent(this.localMessage)\n\t\t},\n\n\t\tisEmptyMessage() {\n\t\t\treturn !this.localMessage || this.localMessage.trim() === ''\n\t\t},\n\n\t\ttimestamp() {\n\t\t\t// seconds, not milliseconds\n\t\t\treturn parseInt(moment(this.creationDateTime).format('x'), 10) / 1000\n\t\t},\n\t},\n\n\twatch: {\n\t\t// If the data change, update the local value\n\t\tmessage(message) {\n\t\t\tthis.updateLocalMessage(message)\n\t\t},\n\t},\n\n\tbeforeMount() {\n\t\t// Init localMessage\n\t\tthis.updateLocalMessage(this.message)\n\t},\n\n\tmethods: {\n\t\tt,\n\n\t\t/**\n\t\t * Update local Message on outer change\n\t\t *\n\t\t * @param {string} message the message to set\n\t\t */\n\t\tupdateLocalMessage(message) {\n\t\t\tthis.localMessage = message.toString()\n\t\t\tthis.submitted = false\n\t\t},\n\n\t\t/**\n\t\t * Dispatch message between edit and create\n\t\t */\n\t\tonSubmit() {\n\t\t\t// Do not submit if message is empty\n\t\t\tif (this.localMessage.trim() === '') {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (this.editor) {\n\t\t\t\tthis.onNewComment(this.localMessage.trim())\n\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t// Focus the editor again\n\t\t\t\t\tthis.$refs.editor.$el.focus()\n\t\t\t\t})\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.onEditComment(this.localMessage.trim())\n\t\t},\n\n\t\tonExpand() {\n\t\t\tthis.expanded = true\n\t\t},\n\t},\n\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@use \"sass:math\";\n\n$comment-padding: 10px;\n\n.comment {\n\tdisplay: flex;\n\tgap: 8px;\n\tpadding: 5px $comment-padding;\n\n\t&__side {\n\t\tdisplay: flex;\n\t\talign-items: flex-start;\n\t\tpadding-top: 6px;\n\t}\n\n\t&__body {\n\t\tdisplay: flex;\n\t\tflex-grow: 1;\n\t\tflex-direction: column;\n\t}\n\n\t&__header {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tmin-height: 44px;\n\t}\n\n\t&__actions {\n\t\tmargin-left: $comment-padding !important;\n\t}\n\n\t&__author {\n\t\toverflow: hidden;\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n\n\t&_loading,\n\t&__timestamp {\n\t\tmargin-left: auto;\n\t\ttext-align: right;\n\t\twhite-space: nowrap;\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n\n\t&__editor-group {\n\t\tposition: relative;\n\t}\n\n\t&__editor-description {\n\t\tcolor: var(--color-text-maxcontrast);\n\t\tpadding-block: var(--default-grid-baseline);\n\t}\n\n\t&__submit {\n\t\tposition: absolute !important;\n\t\tbottom: 0;\n\t\tright: 0;\n\t}\n\n\t&__message {\n\t\twhite-space: pre-wrap;\n\t\tword-break: break-word;\n\t\tmax-height: 70px;\n\t\toverflow: hidden;\n\t\tmargin-top: -6px;\n\t\t&--expanded {\n\t\t\tmax-height: none;\n\t\t\toverflow: visible;\n\t\t}\n\t}\n}\n\n.rich-contenteditable__input {\n\tmin-height: 44px;\n\tmargin: 0;\n\tpadding: $comment-padding;\n}\n\n</style>\n","<!-- TODO: Move to vue components -->\n\n<template>\n\t<span class=\"live-relative-timestamp\" :data-timestamp=\"timestamp * 1000\" :title=\"title\">{{ formatted }}</span>\n</template>\n\n<script>\nimport moment from '@nextcloud/moment'\n\nexport default {\n\tname: 'Moment',\n\tprops: {\n\t\ttimestamp: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\t\tformat: {\n\t\t\ttype: String,\n\t\t\tdefault: 'LLL',\n\t\t},\n\t},\n\tcomputed: {\n\t\ttitle() {\n\t\t\treturn moment.unix(this.timestamp).format(this.format)\n\t\t},\n\t\tformatted() {\n\t\t\treturn moment.unix(this.timestamp).fromNow()\n\t\t},\n\t},\n}\n</script>\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c(_vm.tag,{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.deleted),expression:\"!deleted\"}],tag:\"component\",staticClass:\"comment\",class:{'comment--loading': _vm.loading}},[_c('div',{staticClass:\"comment__side\"},[_c('NcAvatar',{staticClass:\"comment__avatar\",attrs:{\"display-name\":_vm.actorDisplayName,\"user\":_vm.actorId,\"size\":32}})],1),_vm._v(\" \"),_c('div',{staticClass:\"comment__body\"},[_c('div',{staticClass:\"comment__header\"},[_c('span',{staticClass:\"comment__author\"},[_vm._v(_vm._s(_vm.actorDisplayName))]),_vm._v(\" \"),(_vm.isOwnComment && _vm.id && !_vm.loading)?_c('NcActions',{staticClass:\"comment__actions\"},[(!_vm.editing)?[_c('NcActionButton',{attrs:{\"close-after-click\":\"\"},on:{\"click\":_vm.onEdit},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('IconEdit',{attrs:{\"size\":20}})]},proxy:true}],null,false,649782975)},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('comments', 'Edit comment'))+\"\\n\\t\\t\\t\\t\\t\")]),_vm._v(\" \"),_c('NcActionSeparator'),_vm._v(\" \"),_c('NcActionButton',{attrs:{\"close-after-click\":\"\"},on:{\"click\":_vm.onDeleteWithUndo},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('IconDelete',{attrs:{\"size\":20}})]},proxy:true}],null,false,881161434)},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('comments', 'Delete comment'))+\"\\n\\t\\t\\t\\t\\t\")])]:_c('NcActionButton',{on:{\"click\":_vm.onEditCancel},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('IconClose',{attrs:{\"size\":20}})]},proxy:true}],null,false,2888946197)},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('comments', 'Cancel edit'))+\"\\n\\t\\t\\t\\t\")])],2):_vm._e(),_vm._v(\" \"),(_vm.id && _vm.loading)?_c('div',{staticClass:\"comment_loading icon-loading-small\"}):(_vm.creationDateTime)?_c('Moment',{staticClass:\"comment__timestamp\",attrs:{\"timestamp\":_vm.timestamp}}):_vm._e()],1),_vm._v(\" \"),(_vm.editor || _vm.editing)?_c('form',{staticClass:\"comment__editor\",on:{\"submit\":function($event){$event.preventDefault();}}},[_c('div',{staticClass:\"comment__editor-group\"},[_c('NcRichContenteditable',{ref:\"editor\",attrs:{\"auto-complete\":_vm.autoComplete,\"contenteditable\":!_vm.loading,\"label\":_vm.editor ? _vm.t('comments', 'New comment') : _vm.t('comments', 'Edit comment'),\"placeholder\":_vm.t('comments', 'Write a comment …'),\"value\":_vm.localMessage,\"user-data\":_vm.userData,\"aria-describedby\":\"tab-comments__editor-description\"},on:{\"update:value\":_vm.updateLocalMessage,\"submit\":_vm.onSubmit}}),_vm._v(\" \"),_c('div',{staticClass:\"comment__submit\"},[_c('NcButton',{attrs:{\"type\":\"tertiary-no-background\",\"native-type\":\"submit\",\"aria-label\":_vm.t('comments', 'Post comment'),\"disabled\":_vm.isEmptyMessage},on:{\"click\":_vm.onSubmit},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [(_vm.loading)?_c('NcLoadingIcon'):_c('IconArrowRight',{attrs:{\"size\":20}})]},proxy:true}],null,false,758946661)})],1)],1),_vm._v(\" \"),_c('div',{staticClass:\"comment__editor-description\",attrs:{\"id\":\"tab-comments__editor-description\"}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('comments', '@ for mentions, : for emoji, / for smart picker'))+\"\\n\\t\\t\\t\")])]):_c('div',{staticClass:\"comment__message\",class:{'comment__message--expanded': _vm.expanded},domProps:{\"innerHTML\":_vm._s(_vm.renderedContent)},on:{\"click\":_vm.onExpand}})])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('span',{staticClass:\"live-relative-timestamp\",attrs:{\"data-timestamp\":_vm.timestamp * 1000,\"title\":_vm.title}},[_vm._v(_vm._s(_vm.formatted))])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.comment[data-v-a54c4126]{display:flex;gap:8px;padding:5px 10px}.comment__side[data-v-a54c4126]{display:flex;align-items:flex-start;padding-top:6px}.comment__body[data-v-a54c4126]{display:flex;flex-grow:1;flex-direction:column}.comment__header[data-v-a54c4126]{display:flex;align-items:center;min-height:44px}.comment__actions[data-v-a54c4126]{margin-left:10px !important}.comment__author[data-v-a54c4126]{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:var(--color-text-maxcontrast)}.comment_loading[data-v-a54c4126],.comment__timestamp[data-v-a54c4126]{margin-left:auto;text-align:right;white-space:nowrap;color:var(--color-text-maxcontrast)}.comment__editor-group[data-v-a54c4126]{position:relative}.comment__editor-description[data-v-a54c4126]{color:var(--color-text-maxcontrast);padding-block:var(--default-grid-baseline)}.comment__submit[data-v-a54c4126]{position:absolute !important;bottom:0;right:0}.comment__message[data-v-a54c4126]{white-space:pre-wrap;word-break:break-word;max-height:70px;overflow:hidden;margin-top:-6px}.comment__message--expanded[data-v-a54c4126]{max-height:none;overflow:visible}.rich-contenteditable__input[data-v-a54c4126]{min-height:44px;margin:0;padding:10px}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/comments/src/components/Comment.vue\"],\"names\":[],\"mappings\":\"AAKA,0BACC,YAAA,CACA,OAAA,CACA,gBAAA,CAEA,gCACC,YAAA,CACA,sBAAA,CACA,eAAA,CAGD,gCACC,YAAA,CACA,WAAA,CACA,qBAAA,CAGD,kCACC,YAAA,CACA,kBAAA,CACA,eAAA,CAGD,mCACC,2BAAA,CAGD,kCACC,eAAA,CACA,kBAAA,CACA,sBAAA,CACA,mCAAA,CAGD,uEAEC,gBAAA,CACA,gBAAA,CACA,kBAAA,CACA,mCAAA,CAGD,wCACC,iBAAA,CAGD,8CACC,mCAAA,CACA,0CAAA,CAGD,kCACC,4BAAA,CACA,QAAA,CACA,OAAA,CAGD,mCACC,oBAAA,CACA,qBAAA,CACA,eAAA,CACA,eAAA,CACA,eAAA,CACA,6CACC,eAAA,CACA,gBAAA,CAKH,8CACC,eAAA,CACA,QAAA,CACA,YA3EiB\",\"sourcesContent\":[\"\\n@use \\\"sass:math\\\";\\n\\n$comment-padding: 10px;\\n\\n.comment {\\n\\tdisplay: flex;\\n\\tgap: 8px;\\n\\tpadding: 5px $comment-padding;\\n\\n\\t&__side {\\n\\t\\tdisplay: flex;\\n\\t\\talign-items: flex-start;\\n\\t\\tpadding-top: 6px;\\n\\t}\\n\\n\\t&__body {\\n\\t\\tdisplay: flex;\\n\\t\\tflex-grow: 1;\\n\\t\\tflex-direction: column;\\n\\t}\\n\\n\\t&__header {\\n\\t\\tdisplay: flex;\\n\\t\\talign-items: center;\\n\\t\\tmin-height: 44px;\\n\\t}\\n\\n\\t&__actions {\\n\\t\\tmargin-left: $comment-padding !important;\\n\\t}\\n\\n\\t&__author {\\n\\t\\toverflow: hidden;\\n\\t\\twhite-space: nowrap;\\n\\t\\ttext-overflow: ellipsis;\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t}\\n\\n\\t&_loading,\\n\\t&__timestamp {\\n\\t\\tmargin-left: auto;\\n\\t\\ttext-align: right;\\n\\t\\twhite-space: nowrap;\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t}\\n\\n\\t&__editor-group {\\n\\t\\tposition: relative;\\n\\t}\\n\\n\\t&__editor-description {\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\tpadding-block: var(--default-grid-baseline);\\n\\t}\\n\\n\\t&__submit {\\n\\t\\tposition: absolute !important;\\n\\t\\tbottom: 0;\\n\\t\\tright: 0;\\n\\t}\\n\\n\\t&__message {\\n\\t\\twhite-space: pre-wrap;\\n\\t\\tword-break: break-word;\\n\\t\\tmax-height: 70px;\\n\\t\\toverflow: hidden;\\n\\t\\tmargin-top: -6px;\\n\\t\\t&--expanded {\\n\\t\\t\\tmax-height: none;\\n\\t\\t\\toverflow: visible;\\n\\t\\t}\\n\\t}\\n}\\n\\n.rich-contenteditable__input {\\n\\tmin-height: 44px;\\n\\tmargin: 0;\\n\\tpadding: $comment-padding;\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comment.vue?vue&type=style&index=0&id=a54c4126&prod&lang=scss&scoped=true\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comment.vue?vue&type=style&index=0&id=a54c4126&prod&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Comment.vue?vue&type=template&id=a54c4126&scoped=true\"\nimport script from \"./Comment.vue?vue&type=script&lang=js\"\nexport * from \"./Comment.vue?vue&type=script&lang=js\"\nimport style0 from \"./Comment.vue?vue&type=style&index=0&id=a54c4126&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"a54c4126\",\n null\n \n)\n\nexport default component.exports","import { render, staticRenderFns } from \"./Moment.vue?vue&type=template&id=57999be6\"\nimport script from \"./Moment.vue?vue&type=script&lang=js\"\nexport * from \"./Moment.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comment.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comment.vue?vue&type=script&lang=js\"","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Moment.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Moment.vue?vue&type=script&lang=js\""],"names":["props","id","type","Number","default","message","String","resourceId","required","resourceType","data","deleted","editing","loading","methods","onEdit","this","onEditCancel","updateLocalMessage","onEditComment","EditComment","logger","debug","$emit","error","showError","t","console","onDeleteWithUndo","timeOutDelete","setTimeout","onDelete","TOAST_UNDO_TIMEOUT","showUndo","clearTimeout","DeleteComment","onNewComment","newComment","NewComment","localMessage","async","commentId","commentPath","join","client","deleteFile","customRequest","Object","assign","method","concat","resourcePath","response","axios","post","getRootPath","actorDisplayName","getCurrentUser","displayName","actorId","uid","actorType","creationDateTime","Date","toUTCString","objectType","verb","parseInt","headers","split","pop","comment","stat","details","decodeHtmlEntities","value","passes","arguments","length","undefined","parser","DOMParser","decoded","i","parseFromString","documentElement","textContent","defineComponent","editorData","key","userData","autoComplete","search","callback","get","generateOcsUrl","params","itemType","itemId","sorter","limit","loadState","ocs","forEach","user","values","genMentionsData","mentions","flat","mention","_getCurrentUser","mentionId","icon","label","mentionDisplayName","source","primary","name","components","IconArrowRight","IconClose","IconDelete","IconEdit","Moment","NcActionButton","NcActions","NcActionSeparator","NcAvatar","NcButton","NcRichContenteditable","mixins","RichEditorMixin","CommentMixin","inheritAttrs","editor","Boolean","Function","tag","expanded","submitted","computed","isOwnComment","renderedContent","isEmptyMessage","renderContent","trim","timestamp","moment","format","watch","beforeMount","toString","onSubmit","$nextTick","$refs","$el","focus","onExpand","title","unix","formatted","fromNow","render","_vm","_c","_self","directives","rawName","expression","staticClass","class","attrs","_v","_s","on","scopedSlots","_u","fn","proxy","_e","$event","preventDefault","ref","domProps","staticRenderFns","___CSS_LOADER_EXPORT___","push","module","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","locals"],"sourceRoot":""} \ No newline at end of file
diff --git a/dist/comments-comments-app.js b/dist/comments-comments-app.js
index 9fa3564d0f1..df2d0fe8578 100644
--- a/dist/comments-comments-app.js
+++ b/dist/comments-comments-app.js
@@ -1,3 +1,3 @@
/*! For license information please see comments-comments-app.js.LICENSE.txt */
-(()=>{var e,n,r,o={11717:(e,n,r)=>{"use strict";var o=r(53334),s=r(21777),i=r(85471),a=r(85168),c=r(80284),l=r(96763);function u(t){return u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},u(t)}function p(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function h(t){return function(t){if(Array.isArray(t)){for(var e=0,n=new Array(t.length);e<t.length;e++)n[e]=t[e];return n}}(t)||function(t){if(Symbol.iterator in Object(t)||"[object Arguments]"===Object.prototype.toString.call(t))return Array.from(t)}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}()}function d(t,e){if(t===e)return!0;if("object"===u(t)){for(var n in t)if(!d(t[n],e[n]))return!1;return!0}return!1}var m=function(){function t(e,n,r){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.el=e,this.observer=null,this.frozen=!1,this.createObserver(n,r)}var e,n;return e=t,n=[{key:"createObserver",value:function(t,e){var n=this;if(this.observer&&this.destroyObserver(),!this.frozen){var r;if(this.options="function"==typeof(r=t)?{callback:r}:r,this.callback=function(t,e){n.options.callback(t,e),t&&n.options.once&&(n.frozen=!0,n.destroyObserver())},this.callback&&this.options.throttle){var o=(this.options.throttleOptions||{}).leading;this.callback=function(t,e){var n,r,o,s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=function(i){for(var a=arguments.length,c=new Array(a>1?a-1:0),l=1;l<a;l++)c[l-1]=arguments[l];if(o=c,!n||i!==r){var u=s.leading;"function"==typeof u&&(u=u(i,r)),n&&i===r||!u||t.apply(void 0,[i].concat(h(o))),r=i,clearTimeout(n),n=setTimeout((function(){t.apply(void 0,[i].concat(h(o))),n=0}),e)}};return i._clear=function(){clearTimeout(n),n=null},i}(this.callback,this.options.throttle,{leading:function(t){return"both"===o||"visible"===o&&t||"hidden"===o&&!t}})}this.oldResult=void 0,this.observer=new IntersectionObserver((function(t){var e=t[0];if(t.length>1){var r=t.find((function(t){return t.isIntersecting}));r&&(e=r)}if(n.callback){var o=e.isIntersecting&&e.intersectionRatio>=n.threshold;if(o===n.oldResult)return;n.oldResult=o,n.callback(o,e)}}),this.options.intersection),e.context.$nextTick((function(){n.observer&&n.observer.observe(n.el)}))}}},{key:"destroyObserver",value:function(){this.observer&&(this.observer.disconnect(),this.observer=null),this.callback&&this.callback._clear&&(this.callback._clear(),this.callback=null)}},{key:"threshold",get:function(){return this.options.intersection&&"number"==typeof this.options.intersection.threshold?this.options.intersection.threshold:0}}],n&&p(e.prototype,n),t}();function f(t,e,n){var r=e.value;if(r)if("undefined"==typeof IntersectionObserver)l.warn("[vue-observe-visibility] IntersectionObserver API is not available in your browser. Please install this polyfill: https://github.com/w3c/IntersectionObserver/tree/master/polyfill");else{var o=new m(t,r,n);t._vue_visibilityState=o}}function g(t){var e=t._vue_visibilityState;e&&(e.destroyObserver(),delete t._vue_visibilityState)}var v={bind:f,update:function(t,e,n){var r=e.value;if(!d(r,e.oldValue)){var o=t._vue_visibilityState;r?o?o.createObserver(r,n):f(t,{value:r},n):g(t)}},unbind:g},A={version:"1.0.0",install:function(t){t.directive("observe-visibility",v)}},b=null;"undefined"!=typeof window?b=window.Vue:void 0!==r.g&&(b=r.g.Vue),b&&b.use(A);const y=A;var C=r(10833),w=r(9518);const _={name:"RefreshIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}};var x=r(14486);const O=(0,x.A)(_,(function(){var t=this,e=t._self._c;return e("span",t._b({staticClass:"material-design-icon refresh-icon",attrs:{"aria-hidden":!t.title||null,"aria-label":t.title,role:"img"},on:{click:function(e){return t.$emit("click",e)}}},"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:"M17.65,6.35C16.2,4.9 14.21,4 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20C15.73,20 18.84,17.45 19.73,14H17.65C16.83,16.33 14.61,18 12,18A6,6 0 0,1 6,12A6,6 0 0,1 12,6C13.66,6 15.14,6.69 16.22,7.78L13,11H20V4L17.65,6.35Z"}},[t.title?e("title",[t._v(t._s(t.title))]):t._e()])])])}),[],!1,null,null,null).exports,S={name:"MessageReplyTextIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}},j=(0,x.A)(S,(function(){var t=this,e=t._self._c;return e("span",t._b({staticClass:"material-design-icon message-reply-text-icon",attrs:{"aria-hidden":!t.title||null,"aria-label":t.title,role:"img"},on:{click:function(e){return t.$emit("click",e)}}},"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:"M18,8H6V6H18V8M18,11H6V9H18V11M18,14H6V12H18V14M22,4A2,2 0 0,0 20,2H4A2,2 0 0,0 2,4V16A2,2 0 0,0 4,18H18L22,22V4Z"}},[t.title?e("title",[t._v(t._s(t.title))]):t._e()])])])}),[],!1,null,null,null).exports;var k=r(76162),E=r(51651),T=r(63420),M=r(24764),N=r(10501),I=r(41944),P=r(80701);r(9191),r(24325),r(11037),r(93919);const R={name:"Moment",props:{timestamp:{type:Number,required:!0},format:{type:String,default:"LLL"}},computed:{title(){return E.A.unix(this.timestamp).format(this.format)},formatted(){return E.A.unix(this.timestamp).fromNow()}}},$=(0,x.A)(R,(function(){var t=this;return(0,t._self._c)("span",{staticClass:"live-relative-timestamp",attrs:{"data-timestamp":1e3*t.timestamp,title:t.title}},[t._v(t._s(t.formatted))])}),[],!1,null,null,null).exports;var D=r(99498);const L=function(){return(0,D.dC)("dav/comments")};function B(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;const n=new DOMParser;let r=t;for(let t=0;t<e;t++)r=n.parseFromString(r,"text/html").documentElement.textContent;return r}var W=r(26287),z=r(44719);const H=(0,z.UU)(L()),q=t=>{H.setHeaders({"X-Requested-With":"XMLHttpRequest",requesttoken:null!=t?t:""})};(0,s.zo)(q),q((0,s.do)());const V=H,G=(0,r(53529).YK)().setApp("comments").detectUser().build();var F=r(96763);const U={props:{id:{type:Number,default:null},message:{type:String,default:""},resourceId:{type:[String,Number],required:!0},resourceType:{type:String,default:"files"}},data:()=>({deleted:!1,editing:!1,loading:!1}),methods:{onEdit(){this.editing=!0},onEditCancel(){this.editing=!1,this.updateLocalMessage(this.message)},async onEditComment(e){this.loading=!0;try{await async function(t,e,n,r){const o=["",t,e,n].join("/");return await V.customRequest(o,Object.assign({method:"PROPPATCH",data:'<?xml version="1.0"?>\n\t\t\t<d:propertyupdate\n\t\t\t\txmlns:d="DAV:"\n\t\t\t\txmlns:oc="http://owncloud.org/ns">\n\t\t\t<d:set>\n\t\t\t\t<d:prop>\n\t\t\t\t\t<oc:message>'.concat(r,"</oc:message>\n\t\t\t\t</d:prop>\n\t\t\t</d:set>\n\t\t\t</d:propertyupdate>")}))}(this.resourceType,this.resourceId,this.id,e),G.debug("Comment edited",{resourceType:this.resourceType,resourceId:this.resourceId,id:this.id,message:e}),this.$emit("update:message",e),this.editing=!1}catch(e){(0,a.Qg)(t("comments","An error occurred while trying to edit the comment")),F.error(e)}finally{this.loading=!1}},onDeleteWithUndo(){this.deleted=!0;const e=setTimeout(this.onDelete,a.Br);(0,a._h)(t("comments","Comment deleted"),(()=>{clearTimeout(e),this.deleted=!1}))},async onDelete(){try{await async function(t,e,n){const r=["",t,e,n].join("/");await V.deleteFile(r)}(this.resourceType,this.resourceId,this.id),G.debug("Comment deleted",{resourceType:this.resourceType,resourceId:this.resourceId,id:this.id}),this.$emit("delete",this.id)}catch(e){(0,a.Qg)(t("comments","An error occurred while trying to delete the comment")),F.error(e),this.deleted=!1}},async onNewComment(e){this.loading=!0;try{const t=await async function(t,e,n){const r=["",t,e].join("/"),o=await W.A.post(L()+r,{actorDisplayName:(0,s.HW)().displayName,actorId:(0,s.HW)().uid,actorType:"users",creationDateTime:(new Date).toUTCString(),message:n,objectType:t,verb:"comment"}),i=r+"/"+parseInt(o.headers["content-location"].split("/").pop()),a=await V.stat(i,{details:!0}),c=a.data.props;return c.actorDisplayName=B(c.actorDisplayName,2),c.message=B(c.message,2),a.data}(this.resourceType,this.resourceId,e);G.debug("New comment posted",{resourceType:this.resourceType,resourceId:this.resourceId,newComment:t}),this.$emit("new",t),this.$emit("update:message",""),this.localMessage=""}catch(e){(0,a.Qg)(t("comments","An error occurred while trying to create the comment")),F.error(e)}finally{this.loading=!1}}}},Q={name:"Comment",components:{NcActionButton:T.A,NcActions:M.A,NcActionSeparator:N.A,ArrowRight,NcAvatar:I.A,NcButton:w.A,Moment:$,NcRichContenteditable:()=>Promise.all([r.e(4208),r.e(5528)]).then(r.bind(r,95528))},mixins:[P.Ay,U],inheritAttrs:!1,props:{actorDisplayName:{type:String,required:!0},actorId:{type:String,required:!0},creationDateTime:{type:String,default:null},editor:{type:Boolean,default:!1},autoComplete:{type:Function,required:!0},tag:{type:String,default:"div"}},data:()=>({expanded:!1,localMessage:"",submitted:!1}),computed:{isOwnComment(){return(0,s.HW)().uid===this.actorId},renderedContent(){return this.isEmptyMessage?"":this.renderContent(this.localMessage)},isEmptyMessage(){return!this.localMessage||""===this.localMessage.trim()},timestamp(){return parseInt((0,E.A)(this.creationDateTime).format("x"),10)/1e3}},watch:{message(t){this.updateLocalMessage(t)}},beforeMount(){this.updateLocalMessage(this.message)},methods:{t:o.Tl,updateLocalMessage(t){this.localMessage=t.toString(),this.submitted=!1},onSubmit(){if(""!==this.localMessage.trim())return this.editor?(this.onNewComment(this.localMessage.trim()),void this.$nextTick((()=>{this.$refs.editor.$el.focus()}))):void this.onEditComment(this.localMessage.trim())},onExpand(){this.expanded=!0}}};var Y=r(85072),Z=r.n(Y),X=r(97825),K=r.n(X),J=r(77659),tt=r.n(J),et=r(55056),nt=r.n(et),rt=r(10540),ot=r.n(rt),st=r(41113),it=r.n(st),at=r(45278),ct={};ct.styleTagTransform=it(),ct.setAttributes=nt(),ct.insert=tt().bind(null,"head"),ct.domAPI=K(),ct.insertStyleElement=ot(),Z()(at.A,ct),at.A&&at.A.locals&&at.A.locals;const lt=(0,x.A)(Q,(function(){var t=this,e=t._self._c;return e(t.tag,{directives:[{name:"show",rawName:"v-show",value:!t.deleted,expression:"!deleted"}],tag:"component",staticClass:"comment",class:{"comment--loading":t.loading}},[e("div",{staticClass:"comment__side"},[e("NcAvatar",{staticClass:"comment__avatar",attrs:{"display-name":t.actorDisplayName,user:t.actorId,size:32}})],1),t._v(" "),e("div",{staticClass:"comment__body"},[e("div",{staticClass:"comment__header"},[e("span",{staticClass:"comment__author"},[t._v(t._s(t.actorDisplayName))]),t._v(" "),t.isOwnComment&&t.id&&!t.loading?e("NcActions",{staticClass:"comment__actions"},[t.editing?e("NcActionButton",{on:{click:t.onEditCancel},scopedSlots:t._u([{key:"icon",fn:function(){return[e("IconClose",{attrs:{size:20}})]},proxy:!0}],null,!1,2888946197)},[t._v("\n\t\t\t\t\t"+t._s(t.t("comments","Cancel edit"))+"\n\t\t\t\t")]):[e("NcActionButton",{attrs:{"close-after-click":""},on:{click:t.onEdit},scopedSlots:t._u([{key:"icon",fn:function(){return[e("IconEdit",{attrs:{size:20}})]},proxy:!0}],null,!1,649782975)},[t._v("\n\t\t\t\t\t\t"+t._s(t.t("comments","Edit comment"))+"\n\t\t\t\t\t")]),t._v(" "),e("NcActionSeparator"),t._v(" "),e("NcActionButton",{attrs:{"close-after-click":""},on:{click:t.onDeleteWithUndo},scopedSlots:t._u([{key:"icon",fn:function(){return[e("IconDelete",{attrs:{size:20}})]},proxy:!0}],null,!1,881161434)},[t._v("\n\t\t\t\t\t\t"+t._s(t.t("comments","Delete comment"))+"\n\t\t\t\t\t")])]],2):t._e(),t._v(" "),t.id&&t.loading?e("div",{staticClass:"comment_loading icon-loading-small"}):t.creationDateTime?e("Moment",{staticClass:"comment__timestamp",attrs:{timestamp:t.timestamp}}):t._e()],1),t._v(" "),t.editor||t.editing?e("form",{staticClass:"comment__editor",on:{submit:function(t){t.preventDefault()}}},[e("div",{staticClass:"comment__editor-group"},[e("NcRichContenteditable",{ref:"editor",attrs:{"auto-complete":t.autoComplete,contenteditable:!t.loading,label:t.editor?t.t("comments","New comment"):t.t("comments","Edit comment"),placeholder:t.t("comments","Write a comment …"),value:t.localMessage,"user-data":t.userData,"aria-describedby":"tab-comments__editor-description"},on:{"update:value":t.updateLocalMessage,submit:t.onSubmit}}),t._v(" "),e("div",{staticClass:"comment__submit"},[e("NcButton",{attrs:{type:"tertiary-no-background","native-type":"submit","aria-label":t.t("comments","Post comment"),disabled:t.isEmptyMessage},on:{click:t.onSubmit},scopedSlots:t._u([{key:"icon",fn:function(){return[t.loading?e("NcLoadingIcon"):e("IconArrowRight",{attrs:{size:20}})]},proxy:!0}],null,!1,758946661)})],1)],1),t._v(" "),e("div",{staticClass:"comment__editor-description",attrs:{id:"tab-comments__editor-description"}},[t._v("\n\t\t\t\t"+t._s(t.t("comments","@ for mentions, : for emoji, / for smart picker"))+"\n\t\t\t")])]):e("div",{staticClass:"comment__message",class:{"comment__message--expanded":t.expanded},domProps:{innerHTML:t._s(t.renderedContent)},on:{click:t.onExpand}})])])}),[],!1,null,"47c0e61c",null).exports;var ut=r(68928);const pt={"[:alnum:]":["\\p{L}\\p{Nl}\\p{Nd}",!0],"[:alpha:]":["\\p{L}\\p{Nl}",!0],"[:ascii:]":["\\x00-\\x7f",!1],"[:blank:]":["\\p{Zs}\\t",!0],"[:cntrl:]":["\\p{Cc}",!0],"[:digit:]":["\\p{Nd}",!0],"[:graph:]":["\\p{Z}\\p{C}",!0,!0],"[:lower:]":["\\p{Ll}",!0],"[:print:]":["\\p{C}",!0],"[:punct:]":["\\p{P}",!0],"[:space:]":["\\p{Z}\\t\\r\\n\\v\\f",!0],"[:upper:]":["\\p{Lu}",!0],"[:word:]":["\\p{L}\\p{Nl}\\p{Nd}\\p{Pc}",!0],"[:xdigit:]":["A-Fa-f0-9",!1]},ht=t=>t.replace(/[[\]\\-]/g,"\\$&"),dt=t=>t.join(""),mt=(t,e)=>{const n=e;if("["!==t.charAt(n))throw new Error("not in a brace expression");const r=[],o=[];let s=n+1,i=!1,a=!1,c=!1,l=!1,u=n,p="";t:for(;s<t.length;){const e=t.charAt(s);if("!"!==e&&"^"!==e||s!==n+1){if("]"===e&&i&&!c){u=s+1;break}if(i=!0,"\\"!==e||c){if("["===e&&!c)for(const[e,[i,c,l]]of Object.entries(pt))if(t.startsWith(e,s)){if(p)return["$.",!1,t.length-n,!0];s+=e.length,l?o.push(i):r.push(i),a=a||c;continue t}c=!1,p?(e>p?r.push(ht(p)+"-"+ht(e)):e===p&&r.push(ht(e)),p="",s++):t.startsWith("-]",s+1)?(r.push(ht(e+"-")),s+=2):t.startsWith("-",s+1)?(p=e,s+=2):(r.push(ht(e)),s++)}else c=!0,s++}else l=!0,s++}if(u<s)return["",!1,0,!1];if(!r.length&&!o.length)return["$.",!1,t.length-n,!0];if(0===o.length&&1===r.length&&/^\\?.$/.test(r[0])&&!l){return[(h=2===r[0].length?r[0].slice(-1):r[0],h.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")),!1,u-n,!1]}var h;const d="["+(l?"^":"")+dt(r)+"]",m="["+(l?"":"^")+dt(o)+"]";return[r.length&&o.length?"("+d+"|"+m+")":r.length?d:m,a,u-n,!0]};var ft=r(65606),gt=r(96763);const vt=(t,e,n={})=>(Qt(e),!(!n.nocomment&&"#"===e.charAt(0))&&new Xt(e,n).match(t)),At=/^\*+([^+@!?\*\[\(]*)$/,bt=t=>e=>!e.startsWith(".")&&e.endsWith(t),yt=t=>e=>e.endsWith(t),Ct=t=>(t=t.toLowerCase(),e=>!e.startsWith(".")&&e.toLowerCase().endsWith(t)),wt=t=>(t=t.toLowerCase(),e=>e.toLowerCase().endsWith(t)),_t=/^\*+\.\*+$/,xt=t=>!t.startsWith(".")&&t.includes("."),Ot=t=>"."!==t&&".."!==t&&t.includes("."),St=/^\.\*+$/,jt=t=>"."!==t&&".."!==t&&t.startsWith("."),kt=/^\*+$/,Et=t=>0!==t.length&&!t.startsWith("."),Tt=t=>0!==t.length&&"."!==t&&".."!==t,Mt=/^\?+([^+@!?\*\[\(]*)?$/,Nt=([t,e=""])=>{const n=$t([t]);return e?(e=e.toLowerCase(),t=>n(t)&&t.toLowerCase().endsWith(e)):n},It=([t,e=""])=>{const n=Dt([t]);return e?(e=e.toLowerCase(),t=>n(t)&&t.toLowerCase().endsWith(e)):n},Pt=([t,e=""])=>{const n=Dt([t]);return e?t=>n(t)&&t.endsWith(e):n},Rt=([t,e=""])=>{const n=$t([t]);return e?t=>n(t)&&t.endsWith(e):n},$t=([t])=>{const e=t.length;return t=>t.length===e&&!t.startsWith(".")},Dt=([t])=>{const e=t.length;return t=>t.length===e&&"."!==t&&".."!==t},Lt="object"==typeof ft&&ft?"object"==typeof ft.env&&ft.env&&ft.env.__MINIMATCH_TESTING_PLATFORM__||ft.platform:"posix";vt.sep="win32"===Lt?"\\":"/";const Bt=Symbol("globstar **");vt.GLOBSTAR=Bt;const Wt={"!":{open:"(?:(?!(?:",close:"))[^/]*?)"},"?":{open:"(?:",close:")?"},"+":{open:"(?:",close:")+"},"*":{open:"(?:",close:")*"},"@":{open:"(?:",close:")"}},zt="[^/]",Ht=zt+"*?",qt=t=>t.split("").reduce(((t,e)=>(t[e]=!0,t)),{}),Vt=qt("().*{}+?[]^$\\!"),Gt=qt("[.(");vt.filter=(t,e={})=>n=>vt(n,t,e);const Ft=(t,e={})=>Object.assign({},t,e);vt.defaults=t=>{if(!t||"object"!=typeof t||!Object.keys(t).length)return vt;const e=vt;return Object.assign(((n,r,o={})=>e(n,r,Ft(t,o))),{Minimatch:class extends e.Minimatch{constructor(e,n={}){super(e,Ft(t,n))}static defaults(n){return e.defaults(Ft(t,n)).Minimatch}},unescape:(n,r={})=>e.unescape(n,Ft(t,r)),escape:(n,r={})=>e.escape(n,Ft(t,r)),filter:(n,r={})=>e.filter(n,Ft(t,r)),defaults:n=>e.defaults(Ft(t,n)),makeRe:(n,r={})=>e.makeRe(n,Ft(t,r)),braceExpand:(n,r={})=>e.braceExpand(n,Ft(t,r)),match:(n,r,o={})=>e.match(n,r,Ft(t,o)),sep:e.sep,GLOBSTAR:Bt})};const Ut=(t,e={})=>(Qt(t),e.nobrace||!/\{(?:(?!\{).)*\}/.test(t)?[t]:ut(t));vt.braceExpand=Ut;const Qt=t=>{if("string"!=typeof t)throw new TypeError("invalid pattern");if(t.length>65536)throw new TypeError("pattern is too long")};vt.makeRe=(t,e={})=>new Xt(t,e).makeRe(),vt.match=(t,e,n={})=>{const r=new Xt(e,n);return t=t.filter((t=>r.match(t))),r.options.nonull&&!t.length&&t.push(e),t};const Yt=/[?*]|[+@!]\(.*?\)|\[|\]/,Zt=t=>t.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&");class Xt{options;set;pattern;windowsPathsNoEscape;nonegate;negate;comment;empty;preserveMultipleSlashes;partial;globSet;globParts;nocase;isWindows;platform;windowsNoMagicRoot;regexp;constructor(t,e={}){Qt(t),e=e||{},this.options=e,this.pattern=t,this.platform=e.platform||Lt,this.isWindows="win32"===this.platform,this.windowsPathsNoEscape=!!e.windowsPathsNoEscape||!1===e.allowWindowsEscape,this.windowsPathsNoEscape&&(this.pattern=this.pattern.replace(/\\/g,"/")),this.preserveMultipleSlashes=!!e.preserveMultipleSlashes,this.regexp=null,this.negate=!1,this.nonegate=!!e.nonegate,this.comment=!1,this.empty=!1,this.partial=!!e.partial,this.nocase=!!this.options.nocase,this.windowsNoMagicRoot=void 0!==e.windowsNoMagicRoot?e.windowsNoMagicRoot:!(!this.isWindows||!this.nocase),this.globSet=[],this.globParts=[],this.set=[],this.make()}hasMagic(){if(this.options.magicalBraces&&this.set.length>1)return!0;for(const t of this.set)for(const e of t)if("string"!=typeof e)return!0;return!1}debug(...t){}make(){const t=this.pattern,e=this.options;if(!e.nocomment&&"#"===t.charAt(0))return void(this.comment=!0);if(!t)return void(this.empty=!0);this.parseNegate(),this.globSet=[...new Set(this.braceExpand())],e.debug&&(this.debug=(...t)=>gt.error(...t)),this.debug(this.pattern,this.globSet);const n=this.globSet.map((t=>this.slashSplit(t)));this.globParts=this.preprocess(n),this.debug(this.pattern,this.globParts);let r=this.globParts.map(((t,e,n)=>{if(this.isWindows&&this.windowsNoMagicRoot){const e=!(""!==t[0]||""!==t[1]||"?"!==t[2]&&Yt.test(t[2])||Yt.test(t[3])),n=/^[a-z]:/i.test(t[0]);if(e)return[...t.slice(0,4),...t.slice(4).map((t=>this.parse(t)))];if(n)return[t[0],...t.slice(1).map((t=>this.parse(t)))]}return t.map((t=>this.parse(t)))}));if(this.debug(this.pattern,r),this.set=r.filter((t=>-1===t.indexOf(!1))),this.isWindows)for(let t=0;t<this.set.length;t++){const e=this.set[t];""===e[0]&&""===e[1]&&"?"===this.globParts[t][2]&&"string"==typeof e[3]&&/^[a-z]:$/i.test(e[3])&&(e[2]="?")}this.debug(this.pattern,this.set)}preprocess(t){if(this.options.noglobstar)for(let e=0;e<t.length;e++)for(let n=0;n<t[e].length;n++)"**"===t[e][n]&&(t[e][n]="*");const{optimizationLevel:e=1}=this.options;return e>=2?(t=this.firstPhasePreProcess(t),t=this.secondPhasePreProcess(t)):t=e>=1?this.levelOneOptimize(t):this.adjascentGlobstarOptimize(t),t}adjascentGlobstarOptimize(t){return t.map((t=>{let e=-1;for(;-1!==(e=t.indexOf("**",e+1));){let n=e;for(;"**"===t[n+1];)n++;n!==e&&t.splice(e,n-e)}return t}))}levelOneOptimize(t){return t.map((t=>0===(t=t.reduce(((t,e)=>{const n=t[t.length-1];return"**"===e&&"**"===n?t:".."===e&&n&&".."!==n&&"."!==n&&"**"!==n?(t.pop(),t):(t.push(e),t)}),[])).length?[""]:t))}levelTwoFileOptimize(t){Array.isArray(t)||(t=this.slashSplit(t));let e=!1;do{if(e=!1,!this.preserveMultipleSlashes){for(let n=1;n<t.length-1;n++){const r=t[n];1===n&&""===r&&""===t[0]||"."!==r&&""!==r||(e=!0,t.splice(n,1),n--)}"."!==t[0]||2!==t.length||"."!==t[1]&&""!==t[1]||(e=!0,t.pop())}let n=0;for(;-1!==(n=t.indexOf("..",n+1));){const r=t[n-1];r&&"."!==r&&".."!==r&&"**"!==r&&(e=!0,t.splice(n-1,2),n-=2)}}while(e);return 0===t.length?[""]:t}firstPhasePreProcess(t){let e=!1;do{e=!1;for(let n of t){let r=-1;for(;-1!==(r=n.indexOf("**",r+1));){let o=r;for(;"**"===n[o+1];)o++;o>r&&n.splice(r+1,o-r);let s=n[r+1];const i=n[r+2],a=n[r+3];if(".."!==s)continue;if(!i||"."===i||".."===i||!a||"."===a||".."===a)continue;e=!0,n.splice(r,1);const c=n.slice(0);c[r]="**",t.push(c),r--}if(!this.preserveMultipleSlashes){for(let t=1;t<n.length-1;t++){const r=n[t];1===t&&""===r&&""===n[0]||"."!==r&&""!==r||(e=!0,n.splice(t,1),t--)}"."!==n[0]||2!==n.length||"."!==n[1]&&""!==n[1]||(e=!0,n.pop())}let o=0;for(;-1!==(o=n.indexOf("..",o+1));){const t=n[o-1];if(t&&"."!==t&&".."!==t&&"**"!==t){e=!0;const t=1===o&&"**"===n[o+1]?["."]:[];n.splice(o-1,2,...t),0===n.length&&n.push(""),o-=2}}}}while(e);return t}secondPhasePreProcess(t){for(let e=0;e<t.length-1;e++)for(let n=e+1;n<t.length;n++){const r=this.partsMatch(t[e],t[n],!this.preserveMultipleSlashes);r&&(t[e]=r,t[n]=[])}return t.filter((t=>t.length))}partsMatch(t,e,n=!1){let r=0,o=0,s=[],i="";for(;r<t.length&&o<e.length;)if(t[r]===e[o])s.push("b"===i?e[o]:t[r]),r++,o++;else if(n&&"**"===t[r]&&e[o]===t[r+1])s.push(t[r]),r++;else if(n&&"**"===e[o]&&t[r]===e[o+1])s.push(e[o]),o++;else if("*"!==t[r]||!e[o]||!this.options.dot&&e[o].startsWith(".")||"**"===e[o]){if("*"!==e[o]||!t[r]||!this.options.dot&&t[r].startsWith(".")||"**"===t[r])return!1;if("a"===i)return!1;i="b",s.push(e[o]),r++,o++}else{if("b"===i)return!1;i="a",s.push(t[r]),r++,o++}return t.length===e.length&&s}parseNegate(){if(this.nonegate)return;const t=this.pattern;let e=!1,n=0;for(let r=0;r<t.length&&"!"===t.charAt(r);r++)e=!e,n++;n&&(this.pattern=t.slice(n)),this.negate=e}matchOne(t,e,n=!1){const r=this.options;if(this.isWindows){const n=""===t[0]&&""===t[1]&&"?"===t[2]&&"string"==typeof t[3]&&/^[a-z]:$/i.test(t[3]),r=""===e[0]&&""===e[1]&&"?"===e[2]&&"string"==typeof e[3]&&/^[a-z]:$/i.test(e[3]);if(n&&r){const n=t[3],r=e[3];n.toLowerCase()===r.toLowerCase()&&(t[3]=r)}else if(r&&"string"==typeof t[0]){const n=e[3],r=t[0];n.toLowerCase()===r.toLowerCase()&&(e[3]=r,e=e.slice(3))}else if(n&&"string"==typeof e[0]){const n=t[3];n.toLowerCase()===e[0].toLowerCase()&&(e[0]=n,t=t.slice(3))}}const{optimizationLevel:o=1}=this.options;o>=2&&(t=this.levelTwoFileOptimize(t)),this.debug("matchOne",this,{file:t,pattern:e}),this.debug("matchOne",t.length,e.length);for(var s=0,i=0,a=t.length,c=e.length;s<a&&i<c;s++,i++){this.debug("matchOne loop");var l=e[i],u=t[s];if(this.debug(e,l,u),!1===l)return!1;if(l===Bt){this.debug("GLOBSTAR",[e,l,u]);var p=s,h=i+1;if(h===c){for(this.debug("** at the end");s<a;s++)if("."===t[s]||".."===t[s]||!r.dot&&"."===t[s].charAt(0))return!1;return!0}for(;p<a;){var d=t[p];if(this.debug("\nglobstar while",t,p,e,h,d),this.matchOne(t.slice(p),e.slice(h),n))return this.debug("globstar found match!",p,a,d),!0;if("."===d||".."===d||!r.dot&&"."===d.charAt(0)){this.debug("dot detected!",t,p,e,h);break}this.debug("globstar swallow a segment, and continue"),p++}return!(!n||(this.debug("\n>>> no match, partial?",t,p,e,h),p!==a))}let o;if("string"==typeof l?(o=u===l,this.debug("string match",l,u,o)):(o=l.test(u),this.debug("pattern match",l,u,o)),!o)return!1}if(s===a&&i===c)return!0;if(s===a)return n;if(i===c)return s===a-1&&""===t[s];throw new Error("wtf?")}braceExpand(){return Ut(this.pattern,this.options)}parse(t){Qt(t);const e=this.options;if("**"===t)return Bt;if(""===t)return"";let n,r=null;(n=t.match(kt))?r=e.dot?Tt:Et:(n=t.match(At))?r=(e.nocase?e.dot?wt:Ct:e.dot?yt:bt)(n[1]):(n=t.match(Mt))?r=(e.nocase?e.dot?It:Nt:e.dot?Pt:Rt)(n):(n=t.match(_t))?r=e.dot?Ot:xt:(n=t.match(St))&&(r=jt);let o="",s=!1,i=!1;const a=[],c=[];let l,u=!1,p=!1,h="."===t.charAt(0),d=e.dot||h;const m=t=>"."===t.charAt(0)?"":e.dot?"(?!(?:^|\\/)\\.{1,2}(?:$|\\/))":"(?!\\.)",f=()=>{if(u){switch(u){case"*":o+=Ht,s=!0;break;case"?":o+=zt,s=!0;break;default:o+="\\"+u}this.debug("clearStateChar %j %j",u,o),u=!1}};for(let n,r=0;r<t.length&&(n=t.charAt(r));r++)if(this.debug("%s\t%s %s %j",t,r,o,n),i){if("/"===n)return!1;Vt[n]&&(o+="\\"),o+=n,i=!1}else switch(n){case"/":return!1;case"\\":f(),i=!0;continue;case"?":case"*":case"+":case"@":case"!":this.debug("%s\t%s %s %j <-- stateChar",t,r,o,n),this.debug("call clearStateChar %j",u),f(),u=n,e.noext&&f();continue;case"(":{if(!u){o+="\\(";continue}const e={type:u,start:r-1,reStart:o.length,open:Wt[u].open,close:Wt[u].close};this.debug(this.pattern,"\t",e),a.push(e),o+=e.open,0===e.start&&"!"!==e.type&&(h=!0,o+=m(t.slice(r+1))),this.debug("plType %j %j",u,o),u=!1;continue}case")":{const t=a[a.length-1];if(!t){o+="\\)";continue}a.pop(),f(),s=!0,l=t,o+=l.close,"!"===l.type&&c.push(Object.assign(l,{reEnd:o.length}));continue}case"|":{const e=a[a.length-1];if(!e){o+="\\|";continue}f(),o+="|",0===e.start&&"!"!==e.type&&(h=!0,o+=m(t.slice(r+1)));continue}case"[":f();const[d,g,v,A]=mt(t,r);v?(o+=d,p=p||g,r+=v-1,s=s||A):o+="\\[";continue;case"]":o+="\\"+n;continue;default:f(),o+=Zt(n)}for(l=a.pop();l;l=a.pop()){let t;t=o.slice(l.reStart+l.open.length),this.debug(this.pattern,"setting tail",o,l),t=t.replace(/((?:\\{2}){0,64})(\\?)\|/g,((t,e,n)=>(n||(n="\\"),e+e+n+"|"))),this.debug("tail=%j\n %s",t,t,l,o);const e="*"===l.type?Ht:"?"===l.type?zt:"\\"+l.type;s=!0,o=o.slice(0,l.reStart)+e+"\\("+t}f(),i&&(o+="\\\\");const g=Gt[o.charAt(0)];for(let t=c.length-1;t>-1;t--){const e=c[t],n=o.slice(0,e.reStart),r=o.slice(e.reStart,e.reEnd-8);let s=o.slice(e.reEnd);const i=o.slice(e.reEnd-8,e.reEnd)+s,a=n.split(")").length,l=n.split("(").length-a;let u=s;for(let t=0;t<l;t++)u=u.replace(/\)[+*?]?/,"");s=u,o=n+r+s+(""===s?"(?:$|\\/)":"")+i}if(""!==o&&s&&(o="(?=.)"+o),g&&(o=(h?"":d?"(?!(?:^|\\/)\\.{1,2}(?:$|\\/))":"(?!\\.)")+o),!e.nocase||s||e.nocaseMagicOnly||(s=t.toUpperCase()!==t.toLowerCase()),!s)return o.replace(/\\(.)/g,"$1");const v=(e.nocase?"i":"")+(p?"u":"");try{const e=r?{_glob:t,_src:o,test:r}:{_glob:t,_src:o};return Object.assign(new RegExp("^"+o+"$",v),e)}catch(t){return this.debug("invalid regexp",t),new RegExp("$.")}}makeRe(){if(this.regexp||!1===this.regexp)return this.regexp;const t=this.set;if(!t.length)return this.regexp=!1,this.regexp;const e=this.options,n=e.noglobstar?Ht:e.dot?"(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?":"(?:(?!(?:\\/|^)\\.).)*?",r=e.nocase?"i":"";let o=t.map((t=>{const e=t.map((t=>"string"==typeof t?Zt(t):t===Bt?Bt:t._src));return e.forEach(((t,r)=>{const o=e[r+1],s=e[r-1];t===Bt&&s!==Bt&&(void 0===s?void 0!==o&&o!==Bt?e[r+1]="(?:\\/|"+n+"\\/)?"+o:e[r]=n:void 0===o?e[r-1]=s+"(?:\\/|"+n+")?":o!==Bt&&(e[r-1]=s+"(?:\\/|\\/"+n+"\\/)"+o,e[r+1]=Bt))})),e.filter((t=>t!==Bt)).join("/")})).join("|");o="^(?:"+o+")$",this.negate&&(o="^(?!"+o+").*$");try{this.regexp=new RegExp(o,r)}catch(t){this.regexp=!1}return this.regexp}slashSplit(t){return this.preserveMultipleSlashes?t.split("/"):this.isWindows&&/^\/\/[^\/]+/.test(t)?["",...t.split(/\/+/)]:t.split(/\/+/)}match(t,e=this.partial){if(this.debug("match",t,this.pattern),this.comment)return!1;if(this.empty)return""===t;if("/"===t&&e)return!0;const n=this.options;this.isWindows&&(t=t.split("\\").join("/"));const r=this.slashSplit(t);this.debug(this.pattern,"split",r);const o=this.set;this.debug(this.pattern,"set",o);let s=r[r.length-1];if(!s)for(let t=r.length-2;!s&&t>=0;t--)s=r[t];for(let t=0;t<o.length;t++){const i=o[t];let a=r;if(n.matchBase&&1===i.length&&(a=[s]),this.matchOne(a,i,e))return!!n.flipNegate||!this.negate}return!n.flipNegate&&this.negate}static defaults(t){return vt.defaults(t).Minimatch}}function Kt(t){const e={};for(const n of t.keys())e[n]=t.get(n);return e}vt.Minimatch=Xt,vt.escape=(t,{windowsPathsNoEscape:e=!1}={})=>e?t.replace(/[?*()[\]]/g,"[$&]"):t.replace(/[?*()[\]\\]/g,"\\$&"),vt.unescape=(t,{windowsPathsNoEscape:e=!1}={})=>e?t.replace(/\[([^\/\\])\]/g,"$1"):t.replace(/((?!\\).|^)\[([^\/\\])\]/g,"$1$2").replace(/\\([^\/])/g,"$1");var Jt,te=r(12692);r(86454),r(26602),Error,function(t){t.Array="array",t.Object="object",t.Original="original"}(Jt||(Jt={}));const ee=async function(t,e){var n;let{resourceType:r,resourceId:o}=t;const s=["",r,o].join("/"),i=e.datetime?"<oc:datetime>".concat(e.datetime.toISOString(),"</oc:datetime>"):"",a=await V.customRequest(s,Object.assign({method:"REPORT",data:'<?xml version="1.0"?>\n\t\t\t<oc:filter-comments\n\t\t\t\txmlns:d="DAV:"\n\t\t\t\txmlns:oc="http://owncloud.org/ns"\n\t\t\t\txmlns:nc="http://nextcloud.org/ns"\n\t\t\t\txmlns:ocs="http://open-collaboration-services.org/ns">\n\t\t\t\t<oc:limit>'.concat(null!==(n=e.limit)&&void 0!==n?n:20,"</oc:limit>\n\t\t\t\t<oc:offset>").concat(e.offset||0,"</oc:offset>\n\t\t\t\t").concat(i,"\n\t\t\t</oc:filter-comments>")},e)),c=await a.text(),l=await(0,z.h4)(c);return function(t,e,n=!1){return n?{data:e,headers:t.headers?Kt(t.headers):{},status:t.status,statusText:t.statusText}:e}(a,ne(l,!0),!0)},ne=function(t){let e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const{multistatus:{response:n}}=t;return n.map((t=>{const n=t.propstat.prop;return function(t,e,n=!1){const{getlastmodified:r=null,getcontentlength:o="0",resourcetype:s=null,getcontenttype:i=null,getetag:a=null}=t,c=s&&"object"==typeof s&&void 0!==s.collection?"directory":"file",l={filename:e,basename:te.basename(e),lastmod:r,size:parseInt(o,10),type:c,etag:"string"==typeof a?a.replace(/"/g,""):null};return"file"===c&&(l.mime=i&&"string"==typeof i?i.split(";")[0]:""),n&&(l.props=t),l}(n,n.id.toString(),e)}))};var re=r(38613);const oe=(0,i.pM)({props:{resourceId:{type:Number,required:!0},resourceType:{type:String,default:"files"}},data:()=>({editorData:{actorDisplayName:(0,s.HW)().displayName,actorId:(0,s.HW)().uid,key:"editor"},userData:{}}),methods:{async autoComplete(t,e){const{data:n}=await W.A.get((0,D.KT)("core/autocomplete/get"),{params:{search:t,itemType:"files",itemId:this.resourceId,sorter:"commenters|share-recipients",limit:(0,re.C)("comments","maxAutoCompleteResults")}});return n.ocs.data.forEach((t=>{this.userData[t.id]=t})),e(Object.values(this.userData))},genMentionsData(t){return Object.values(t).flat().forEach((t=>{var e;this.userData[t.mentionId]={icon:"icon-user",id:t.mentionId,label:t.mentionDisplayName,source:"users",primary:(null===(e=(0,s.HW)())||void 0===e?void 0:e.uid)===t.mentionId}})),this.userData}}});var se=r(96763);i.Ay.use(c.Ay),i.Ay.use(y);const ie={name:"Comments",components:{Comment:lt,NcEmptyContent:C.A,NcButton:w.A,RefreshIcon:O,MessageReplyTextIcon:j,AlertCircleOutlineIcon:k.A},mixins:[oe],data:()=>({error:"",loading:!1,done:!1,resourceId:null,offset:0,comments:[],cancelRequest:()=>{},Comment:lt,userData:{}}),computed:{hasComments(){return this.comments.length>0},isFirstLoading(){return this.loading&&0===this.offset}},methods:{t:o.Tl,async onVisibilityChange(t){if(t)try{await((t,e,n)=>{const r=["",t,e].join("/"),o=n.toUTCString();return V.customRequest(r,{method:"PROPPATCH",data:'<?xml version="1.0"?>\n\t\t\t<d:propertyupdate\n\t\t\t\txmlns:d="DAV:"\n\t\t\t\txmlns:oc="http://owncloud.org/ns">\n\t\t\t<d:set>\n\t\t\t\t<d:prop>\n\t\t\t\t\t<oc:readMarker>'.concat(o,"</oc:readMarker>\n\t\t\t\t</d:prop>\n\t\t\t</d:set>\n\t\t\t</d:propertyupdate>")})})(this.resourceType,this.resourceId,new Date)}catch(t){(0,a.Qg)(t.message||(0,o.Tl)("comments","Failed to mark comments as read"))}},async update(t){this.resourceId=t,this.resetState(),this.getComments()},onScrollBottomReached(){this.error||this.done||this.loading||this.getComments()},async getComments(){this.cancelRequest("cancel");try{this.loading=!0,this.error="";const{request:t,abort:e}=function(t){const e=new AbortController,n=e.signal;return{request:async function(e,r){return await t(e,Object.assign({signal:n},r))},abort:()=>e.abort()}}(ee);this.cancelRequest=e;const{data:n}=await t({resourceType:this.resourceType,resourceId:this.resourceId},{offset:this.offset})||{data:[]};this.logger.debug("Processed ".concat(n.length," comments"),{comments:n}),n.length<20&&(this.done=!0),this.comments.push(...n),this.offset+=20}catch(t){if("cancel"===t.message)return;this.error=(0,o.Tl)("comments","Unable to load the comments list"),se.error("Error loading the comments list",t)}finally{this.loading=!1}},onNewComment(t){this.comments.unshift(t)},onDelete(t){const e=this.comments.findIndex((e=>e.props.id===t));e>-1?this.comments.splice(e,1):se.error("Could not find the deleted comment in the list",t)},resetState(){this.error="",this.loading=!1,this.done=!1,this.offset=0,this.comments=[]}}};var ae=r(18038),ce={};ce.styleTagTransform=it(),ce.setAttributes=nt(),ce.insert=tt().bind(null,"head"),ce.domAPI=K(),ce.insertStyleElement=ot(),Z()(ae.A,ce),ae.A&&ae.A.locals&&ae.A.locals;const le=(0,x.A)(ie,(function(){var t=this,e=t._self._c;return e("div",{directives:[{name:"observe-visibility",rawName:"v-observe-visibility",value:t.onVisibilityChange,expression:"onVisibilityChange"}],staticClass:"comments",class:{"icon-loading":t.isFirstLoading}},[e("Comment",t._b({staticClass:"comments__writer",attrs:{"auto-complete":t.autoComplete,"resource-type":t.resourceType,editor:!0,"user-data":t.userData,"resource-id":t.resourceId},on:{new:t.onNewComment}},"Comment",t.editorData,!1)),t._v(" "),t.isFirstLoading?t._e():[!t.hasComments&&t.done?e("NcEmptyContent",{staticClass:"comments__empty",attrs:{name:t.t("comments","No comments yet, start the conversation!")},scopedSlots:t._u([{key:"icon",fn:function(){return[e("MessageReplyTextIcon")]},proxy:!0}],null,!1,1033639148)}):e("ul",t._l(t.comments,(function(n){return e("Comment",t._b({key:n.props.id,staticClass:"comments__list",attrs:{tag:"li","auto-complete":t.autoComplete,"resource-type":t.resourceType,message:n.props.message,"resource-id":t.resourceId,"user-data":t.genMentionsData(n.props.mentions)},on:{"update:message":function(e){return t.$set(n.props,"message",e)},delete:t.onDelete}},"Comment",n.props,!1))})),1),t._v(" "),t.loading&&!t.isFirstLoading?e("div",{staticClass:"comments__info icon-loading"}):t.hasComments&&t.done?e("div",{staticClass:"comments__info"},[t._v("\n\t\t\t"+t._s(t.t("comments","No more messages"))+"\n\t\t")]):t.error?[e("NcEmptyContent",{staticClass:"comments__error",attrs:{name:t.error},scopedSlots:t._u([{key:"icon",fn:function(){return[e("AlertCircleOutlineIcon")]},proxy:!0}],null,!1,66050004)}),t._v(" "),e("NcButton",{staticClass:"comments__retry",on:{click:t.getComments},scopedSlots:t._u([{key:"icon",fn:function(){return[e("RefreshIcon")]},proxy:!0}],null,!1,3924573781)},[t._v("\n\t\t\t\t"+t._s(t.t("comments","Retry"))+"\n\t\t\t")])]:t._e()]],2)}),[],!1,null,"b2489a3c",null).exports;r.nc=btoa((0,s.do)()),i.Ay.mixin({data:()=>({logger:G}),methods:{t:o.Tl,n:o.zw}});var ue=r(96763);window.OCA&&!window.OCA.Comments&&Object.assign(window.OCA,{Comments:{}}),Object.assign(window.OCA.Comments,{View:class{constructor(){var t;let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"files",n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return n={...n,propsData:{...null!==(t=n.propsData)&&void 0!==t?t:{},resourceType:e}},new(i.Ay.extend(le))(n)}}}),ue.debug("OCA.Comments.View initialized")},8505:t=>{"use strict";function e(t,e,o){t instanceof RegExp&&(t=n(t,o)),e instanceof RegExp&&(e=n(e,o));var s=r(t,e,o);return s&&{start:s[0],end:s[1],pre:o.slice(0,s[0]),body:o.slice(s[0]+t.length,s[1]),post:o.slice(s[1]+e.length)}}function n(t,e){var n=e.match(t);return n?n[0]:null}function r(t,e,n){var r,o,s,i,a,c=n.indexOf(t),l=n.indexOf(e,c+1),u=c;if(c>=0&&l>0){if(t===e)return[c,l];for(r=[],s=n.length;u>=0&&!a;)u==c?(r.push(u),c=n.indexOf(t,u+1)):1==r.length?a=[r.pop(),l]:((o=r.pop())<s&&(s=o,i=l),l=n.indexOf(e,u+1)),u=c<l&&c>=0?c:l;r.length&&(a=[s,i])}return a}t.exports=e,e.range=r},68928:(t,e,n)=>{var r=n(8505);t.exports=function(t){return t?("{}"===t.substr(0,2)&&(t="\\{\\}"+t.substr(2)),g(function(t){return t.split("\\\\").join(o).split("\\{").join(s).split("\\}").join(i).split("\\,").join(a).split("\\.").join(c)}(t),!0).map(u)):[]};var o="\0SLASH"+Math.random()+"\0",s="\0OPEN"+Math.random()+"\0",i="\0CLOSE"+Math.random()+"\0",a="\0COMMA"+Math.random()+"\0",c="\0PERIOD"+Math.random()+"\0";function l(t){return parseInt(t,10)==t?parseInt(t,10):t.charCodeAt(0)}function u(t){return t.split(o).join("\\").split(s).join("{").split(i).join("}").split(a).join(",").split(c).join(".")}function p(t){if(!t)return[""];var e=[],n=r("{","}",t);if(!n)return t.split(",");var o=n.pre,s=n.body,i=n.post,a=o.split(",");a[a.length-1]+="{"+s+"}";var c=p(i);return i.length&&(a[a.length-1]+=c.shift(),a.push.apply(a,c)),e.push.apply(e,a),e}function h(t){return"{"+t+"}"}function d(t){return/^-?0\d/.test(t)}function m(t,e){return t<=e}function f(t,e){return t>=e}function g(t,e){var n=[],o=r("{","}",t);if(!o)return[t];var s=o.pre,a=o.post.length?g(o.post,!1):[""];if(/\$$/.test(o.pre))for(var c=0;c<a.length;c++){var u=s+"{"+o.body+"}"+a[c];n.push(u)}else{var v,A,b=/^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(o.body),y=/^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(o.body),C=b||y,w=o.body.indexOf(",")>=0;if(!C&&!w)return o.post.match(/,.*\}/)?g(t=o.pre+"{"+o.body+i+o.post):[t];if(C)v=o.body.split(/\.\./);else if(1===(v=p(o.body)).length&&1===(v=g(v[0],!1).map(h)).length)return a.map((function(t){return o.pre+v[0]+t}));if(C){var _=l(v[0]),x=l(v[1]),O=Math.max(v[0].length,v[1].length),S=3==v.length?Math.abs(l(v[2])):1,j=m;x<_&&(S*=-1,j=f);var k=v.some(d);A=[];for(var E=_;j(E,x);E+=S){var T;if(y)"\\"===(T=String.fromCharCode(E))&&(T="");else if(T=String(E),k){var M=O-T.length;if(M>0){var N=new Array(M+1).join("0");T=E<0?"-"+N+T.slice(1):N+T}}A.push(T)}}else{A=[];for(var I=0;I<v.length;I++)A.push.apply(A,g(v[I],!1))}for(I=0;I<A.length;I++)for(c=0;c<a.length;c++)u=s+A[I]+a[c],(!e||C||u)&&n.push(u)}return n}},45278:(t,e,n)=>{"use strict";n.d(e,{A:()=>a});var r=n(71354),o=n.n(r),s=n(76314),i=n.n(s)()(o());i.push([t.id,".comment[data-v-47c0e61c]{display:flex;gap:8px;padding:5px 10px}.comment__side[data-v-47c0e61c]{display:flex;align-items:flex-start;padding-top:6px}.comment__body[data-v-47c0e61c]{display:flex;flex-grow:1;flex-direction:column}.comment__header[data-v-47c0e61c]{display:flex;align-items:center;min-height:44px}.comment__actions[data-v-47c0e61c]{margin-left:10px !important}.comment__author[data-v-47c0e61c]{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:var(--color-text-maxcontrast)}.comment_loading[data-v-47c0e61c],.comment__timestamp[data-v-47c0e61c]{margin-left:auto;text-align:right;white-space:nowrap;color:var(--color-text-maxcontrast)}.comment__editor-group[data-v-47c0e61c]{position:relative}.comment__editor-description[data-v-47c0e61c]{color:var(--color-text-maxcontrast);padding-block:var(--default-grid-baseline)}.comment__submit[data-v-47c0e61c]{position:absolute !important;bottom:0;right:0}.comment__message[data-v-47c0e61c]{white-space:pre-wrap;word-break:break-word;max-height:70px;overflow:hidden;margin-top:-6px}.comment__message--expanded[data-v-47c0e61c]{max-height:none;overflow:visible}.rich-contenteditable__input[data-v-47c0e61c]{min-height:44px;margin:0;padding:10px}","",{version:3,sources:["webpack://./apps/comments/src/components/Comment.vue"],names:[],mappings:"AAKA,0BACC,YAAA,CACA,OAAA,CACA,gBAAA,CAEA,gCACC,YAAA,CACA,sBAAA,CACA,eAAA,CAGD,gCACC,YAAA,CACA,WAAA,CACA,qBAAA,CAGD,kCACC,YAAA,CACA,kBAAA,CACA,eAAA,CAGD,mCACC,2BAAA,CAGD,kCACC,eAAA,CACA,kBAAA,CACA,sBAAA,CACA,mCAAA,CAGD,uEAEC,gBAAA,CACA,gBAAA,CACA,kBAAA,CACA,mCAAA,CAGD,wCACC,iBAAA,CAGD,8CACC,mCAAA,CACA,0CAAA,CAGD,kCACC,4BAAA,CACA,QAAA,CACA,OAAA,CAGD,mCACC,oBAAA,CACA,qBAAA,CACA,eAAA,CACA,eAAA,CACA,eAAA,CACA,6CACC,eAAA,CACA,gBAAA,CAKH,8CACC,eAAA,CACA,QAAA,CACA,YA3EiB",sourcesContent:['\n@use "sass:math";\n\n$comment-padding: 10px;\n\n.comment {\n\tdisplay: flex;\n\tgap: 8px;\n\tpadding: 5px $comment-padding;\n\n\t&__side {\n\t\tdisplay: flex;\n\t\talign-items: flex-start;\n\t\tpadding-top: 6px;\n\t}\n\n\t&__body {\n\t\tdisplay: flex;\n\t\tflex-grow: 1;\n\t\tflex-direction: column;\n\t}\n\n\t&__header {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tmin-height: 44px;\n\t}\n\n\t&__actions {\n\t\tmargin-left: $comment-padding !important;\n\t}\n\n\t&__author {\n\t\toverflow: hidden;\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n\n\t&_loading,\n\t&__timestamp {\n\t\tmargin-left: auto;\n\t\ttext-align: right;\n\t\twhite-space: nowrap;\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n\n\t&__editor-group {\n\t\tposition: relative;\n\t}\n\n\t&__editor-description {\n\t\tcolor: var(--color-text-maxcontrast);\n\t\tpadding-block: var(--default-grid-baseline);\n\t}\n\n\t&__submit {\n\t\tposition: absolute !important;\n\t\tbottom: 0;\n\t\tright: 0;\n\t}\n\n\t&__message {\n\t\twhite-space: pre-wrap;\n\t\tword-break: break-word;\n\t\tmax-height: 70px;\n\t\toverflow: hidden;\n\t\tmargin-top: -6px;\n\t\t&--expanded {\n\t\t\tmax-height: none;\n\t\t\toverflow: visible;\n\t\t}\n\t}\n}\n\n.rich-contenteditable__input {\n\tmin-height: 44px;\n\tmargin: 0;\n\tpadding: $comment-padding;\n}\n\n'],sourceRoot:""}]);const a=i},18038:(t,e,n)=>{"use strict";n.d(e,{A:()=>a});var r=n(71354),o=n.n(r),s=n(76314),i=n.n(s)()(o());i.push([t.id,".comments[data-v-b2489a3c]{min-height:100%;display:flex;flex-direction:column}.comments__empty[data-v-b2489a3c],.comments__error[data-v-b2489a3c]{flex:1 0}.comments__retry[data-v-b2489a3c]{margin:0 auto}.comments__info[data-v-b2489a3c]{height:60px;color:var(--color-text-maxcontrast);text-align:center;line-height:60px}","",{version:3,sources:["webpack://./apps/comments/src/views/Comments.vue"],names:[],mappings:"AACA,2BACC,eAAA,CACA,YAAA,CACA,qBAAA,CAEA,oEAEC,QAAA,CAGD,kCACC,aAAA,CAGD,iCACC,WAAA,CACA,mCAAA,CACA,iBAAA,CACA,gBAAA",sourcesContent:["\n.comments {\n\tmin-height: 100%;\n\tdisplay: flex;\n\tflex-direction: column;\n\n\t&__empty,\n\t&__error {\n\t\tflex: 1 0;\n\t}\n\n\t&__retry {\n\t\tmargin: 0 auto;\n\t}\n\n\t&__info {\n\t\theight: 60px;\n\t\tcolor: var(--color-text-maxcontrast);\n\t\ttext-align: center;\n\t\tline-height: 60px;\n\t}\n}\n"],sourceRoot:""}]);const a=i},86454:(t,e,n)=>{"use strict";const r=n(43918),o=n(32923),s=n(8904);t.exports={XMLParser:o,XMLValidator:r,XMLBuilder:s}},26602:t=>{"use strict";function e(t){return e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},e(t)}function n(t){var e="function"==typeof Map?new Map:void 0;return n=function(t){if(null===t||(n=t,-1===Function.toString.call(n).indexOf("[native code]")))return t;var n;if("function"!=typeof t)throw new TypeError("Super expression must either be null or a function");if(void 0!==e){if(e.has(t))return e.get(t);e.set(t,i)}function i(){return r(t,arguments,s(this).constructor)}return i.prototype=Object.create(t.prototype,{constructor:{value:i,enumerable:!1,writable:!0,configurable:!0}}),o(i,t)},n(t)}function r(t,e,n){return r=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(t){return!1}}()?Reflect.construct:function(t,e,n){var r=[null];r.push.apply(r,e);var s=new(Function.bind.apply(t,r));return n&&o(s,n.prototype),s},r.apply(null,arguments)}function o(t,e){return o=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t},o(t,e)}function s(t){return s=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)},s(t)}var i=function(t){function n(t){var r;return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,n),(r=function(t,n){return!n||"object"!==e(n)&&"function"!=typeof n?function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t):n}(this,s(n).call(this,t))).name="ObjectPrototypeMutationError",r}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&o(t,e)}(n,t),n}(n(Error));function a(t,n){for(var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){},o=n.split("."),s=o.length,i=function(e){var n=o[e];if(!t)return{v:void 0};if("+"===n){if(Array.isArray(t))return{v:t.map((function(n,s){var i=o.slice(e+1);return i.length>0?a(n,i.join("."),r):r(t,s,o,e)}))};var s=o.slice(0,e).join(".");throw new Error("Object at wildcard (".concat(s,") is not an array"))}t=r(t,n,o,e)},c=0;c<s;c++){var l=i(c);if("object"===e(l))return l.v}return t}function c(t,e){return t.length===e+1}t.exports={set:function(t,n,r){if("object"!=e(t)||null===t)return t;if(void 0===n)return t;if("number"==typeof n)return t[n]=r,t[n];try{return a(t,n,(function(t,e,n,o){if(t===Reflect.getPrototypeOf({}))throw new i("Attempting to mutate Object.prototype");if(!t[e]){var s=Number.isInteger(Number(n[o+1])),a="+"===n[o+1];t[e]=s||a?[]:{}}return c(n,o)&&(t[e]=r),t[e]}))}catch(e){if(e instanceof i)throw e;return t}},get:function(t,n){if("object"!=e(t)||null===t)return t;if(void 0===n)return t;if("number"==typeof n)return t[n];try{return a(t,n,(function(t,e){return t[e]}))}catch(e){return t}},has:function(t,n){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if("object"!=e(t)||null===t)return!1;if(void 0===n)return!1;if("number"==typeof n)return n in t;try{var o=!1;return a(t,n,(function(t,e,n,s){if(!c(n,s))return t&&t[e];o=r.own?t.hasOwnProperty(e):e in t})),o}catch(t){return!1}},hasOwn:function(t,e,n){return this.has(t,e,n||{own:!0})},isIn:function(t,n,r){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};if("object"!=e(t)||null===t)return!1;if(void 0===n)return!1;try{var s=!1,i=!1;return a(t,n,(function(t,n,o,a){return s=s||t===r||!!t&&t[n]===r,i=c(o,a)&&"object"===e(t)&&n in t,t&&t[n]})),o.validPath?s&&i:s}catch(t){return!1}},ObjectPrototypeMutationError:i}},12692:(t,e,n)=>{"use strict";var r=n(65606),o=n(40537),s=function(t){return"string"==typeof t};function i(t,e){for(var n=[],r=0;r<t.length;r++){var o=t[r];o&&"."!==o&&(".."===o?n.length&&".."!==n[n.length-1]?n.pop():e&&n.push(".."):n.push(o))}return n}var a=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/,c={};function l(t){return a.exec(t).slice(1)}c.resolve=function(){for(var t="",e=!1,n=arguments.length-1;n>=-1&&!e;n--){var o=n>=0?arguments[n]:r.cwd();if(!s(o))throw new TypeError("Arguments to path.resolve must be strings");o&&(t=o+"/"+t,e="/"===o.charAt(0))}return(e?"/":"")+(t=i(t.split("/"),!e).join("/"))||"."},c.normalize=function(t){var e=c.isAbsolute(t),n="/"===t.substr(-1);return(t=i(t.split("/"),!e).join("/"))||e||(t="."),t&&n&&(t+="/"),(e?"/":"")+t},c.isAbsolute=function(t){return"/"===t.charAt(0)},c.join=function(){for(var t="",e=0;e<arguments.length;e++){var n=arguments[e];if(!s(n))throw new TypeError("Arguments to path.join must be strings");n&&(t+=t?"/"+n:n)}return c.normalize(t)},c.relative=function(t,e){function n(t){for(var e=0;e<t.length&&""===t[e];e++);for(var n=t.length-1;n>=0&&""===t[n];n--);return e>n?[]:t.slice(e,n+1)}t=c.resolve(t).substr(1),e=c.resolve(e).substr(1);for(var r=n(t.split("/")),o=n(e.split("/")),s=Math.min(r.length,o.length),i=s,a=0;a<s;a++)if(r[a]!==o[a]){i=a;break}var l=[];for(a=i;a<r.length;a++)l.push("..");return(l=l.concat(o.slice(i))).join("/")},c._makeLong=function(t){return t},c.dirname=function(t){var e=l(t),n=e[0],r=e[1];return n||r?(r&&(r=r.substr(0,r.length-1)),n+r):"."},c.basename=function(t,e){var n=l(t)[2];return e&&n.substr(-1*e.length)===e&&(n=n.substr(0,n.length-e.length)),n},c.extname=function(t){return l(t)[3]},c.format=function(t){if(!o.isObject(t))throw new TypeError("Parameter 'pathObject' must be an object, not "+typeof t);var e=t.root||"";if(!s(e))throw new TypeError("'pathObject.root' must be a string or undefined, not "+typeof t.root);return(t.dir?t.dir+c.sep:"")+(t.base||"")},c.parse=function(t){if(!s(t))throw new TypeError("Parameter 'pathString' must be a string, not "+typeof t);var e=l(t);if(!e||4!==e.length)throw new TypeError("Invalid path '"+t+"'");return e[1]=e[1]||"",e[2]=e[2]||"",e[3]=e[3]||"",{root:e[0],dir:e[0]+e[1].slice(0,e[1].length-1),base:e[2],ext:e[3],name:e[2].slice(0,e[2].length-e[3].length)}},c.sep="/",c.delimiter=":",t.exports=c}},s={};function i(t){var e=s[t];if(void 0!==e)return e.exports;var n=s[t]={id:t,loaded:!1,exports:{}};return o[t].call(n.exports,n,n.exports,i),n.loaded=!0,n.exports}i.m=o,e=[],i.O=(t,n,r,o)=>{if(!n){var s=1/0;for(u=0;u<e.length;u++){n=e[u][0],r=e[u][1],o=e[u][2];for(var a=!0,c=0;c<n.length;c++)(!1&o||s>=o)&&Object.keys(i.O).every((t=>i.O[t](n[c])))?n.splice(c--,1):(a=!1,o<s&&(s=o));if(a){e.splice(u--,1);var l=r();void 0!==l&&(t=l)}}return t}o=o||0;for(var u=e.length;u>0&&e[u-1][2]>o;u--)e[u]=e[u-1];e[u]=[n,r,o]},i.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return i.d(e,{a:e}),e},i.d=(t,e)=>{for(var n in e)i.o(e,n)&&!i.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},i.f={},i.e=t=>Promise.all(Object.keys(i.f).reduce(((e,n)=>(i.f[n](t,e),e)),[])),i.u=t=>t+"-"+t+".js?v="+{1110:"2909496e7e35d6258214",5528:"110b147bc8680f8c83f4",8902:"bb2f9be8a039f8db7e58"}[t],i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),i.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n={},r="nextcloud:",i.l=(t,e,o,s)=>{if(n[t])n[t].push(e);else{var a,c;if(void 0!==o)for(var l=document.getElementsByTagName("script"),u=0;u<l.length;u++){var p=l[u];if(p.getAttribute("src")==t||p.getAttribute("data-webpack")==r+o){a=p;break}}a||(c=!0,(a=document.createElement("script")).charset="utf-8",a.timeout=120,i.nc&&a.setAttribute("nonce",i.nc),a.setAttribute("data-webpack",r+o),a.src=t),n[t]=[e];var h=(e,r)=>{a.onerror=a.onload=null,clearTimeout(d);var o=n[t];if(delete n[t],a.parentNode&&a.parentNode.removeChild(a),o&&o.forEach((t=>t(r))),e)return e(r)},d=setTimeout(h.bind(null,void 0,{type:"timeout",target:a}),12e4);a.onerror=h.bind(null,a.onerror),a.onload=h.bind(null,a.onload),c&&document.head.appendChild(a)}},i.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i.nmd=t=>(t.paths=[],t.children||(t.children=[]),t),i.j=7062,(()=>{var t;i.g.importScripts&&(t=i.g.location+"");var e=i.g.document;if(!t&&e&&(e.currentScript&&(t=e.currentScript.src),!t)){var n=e.getElementsByTagName("script");if(n.length)for(var r=n.length-1;r>-1&&(!t||!/^http(s?):/.test(t));)t=n[r--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),i.p=t})(),(()=>{i.b=document.baseURI||self.location.href;var t={7062:0};i.f.j=(e,n)=>{var r=i.o(t,e)?t[e]:void 0;if(0!==r)if(r)n.push(r[2]);else{var o=new Promise(((n,o)=>r=t[e]=[n,o]));n.push(r[2]=o);var s=i.p+i.u(e),a=new Error;i.l(s,(n=>{if(i.o(t,e)&&(0!==(r=t[e])&&(t[e]=void 0),r)){var o=n&&("load"===n.type?"missing":n.type),s=n&&n.target&&n.target.src;a.message="Loading chunk "+e+" failed.\n("+o+": "+s+")",a.name="ChunkLoadError",a.type=o,a.request=s,r[1](a)}}),"chunk-"+e,e)}},i.O.j=e=>0===t[e];var e=(e,n)=>{var r,o,s=n[0],a=n[1],c=n[2],l=0;if(s.some((e=>0!==t[e]))){for(r in a)i.o(a,r)&&(i.m[r]=a[r]);if(c)var u=c(i)}for(e&&e(n);l<s.length;l++)o=s[l],i.o(t,o)&&t[o]&&t[o][0](),t[o]=0;return i.O(u)},n=self.webpackChunknextcloud=self.webpackChunknextcloud||[];n.forEach(e.bind(null,0)),n.push=e.bind(null,n.push.bind(n))})(),i.nc=void 0;var a=i.O(void 0,[4208],(()=>i(11717)));a=i.O(a)})();
-//# sourceMappingURL=comments-comments-app.js.map?v=479b277a4a9e3e8672fc \ No newline at end of file
+(()=>{var e,n,r,o={59379:(e,n,r)=>{"use strict";var o=r(53334),s=r(21777),i=r(85471),a=r(85168),c=r(80284),l=r(96763);function u(t){return u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},u(t)}function p(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function h(t){return function(t){if(Array.isArray(t)){for(var e=0,n=new Array(t.length);e<t.length;e++)n[e]=t[e];return n}}(t)||function(t){if(Symbol.iterator in Object(t)||"[object Arguments]"===Object.prototype.toString.call(t))return Array.from(t)}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}()}function d(t,e){if(t===e)return!0;if("object"===u(t)){for(var n in t)if(!d(t[n],e[n]))return!1;return!0}return!1}var m=function(){function t(e,n,r){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.el=e,this.observer=null,this.frozen=!1,this.createObserver(n,r)}var e,n;return e=t,n=[{key:"createObserver",value:function(t,e){var n=this;if(this.observer&&this.destroyObserver(),!this.frozen){var r;if(this.options="function"==typeof(r=t)?{callback:r}:r,this.callback=function(t,e){n.options.callback(t,e),t&&n.options.once&&(n.frozen=!0,n.destroyObserver())},this.callback&&this.options.throttle){var o=(this.options.throttleOptions||{}).leading;this.callback=function(t,e){var n,r,o,s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=function(i){for(var a=arguments.length,c=new Array(a>1?a-1:0),l=1;l<a;l++)c[l-1]=arguments[l];if(o=c,!n||i!==r){var u=s.leading;"function"==typeof u&&(u=u(i,r)),n&&i===r||!u||t.apply(void 0,[i].concat(h(o))),r=i,clearTimeout(n),n=setTimeout((function(){t.apply(void 0,[i].concat(h(o))),n=0}),e)}};return i._clear=function(){clearTimeout(n),n=null},i}(this.callback,this.options.throttle,{leading:function(t){return"both"===o||"visible"===o&&t||"hidden"===o&&!t}})}this.oldResult=void 0,this.observer=new IntersectionObserver((function(t){var e=t[0];if(t.length>1){var r=t.find((function(t){return t.isIntersecting}));r&&(e=r)}if(n.callback){var o=e.isIntersecting&&e.intersectionRatio>=n.threshold;if(o===n.oldResult)return;n.oldResult=o,n.callback(o,e)}}),this.options.intersection),e.context.$nextTick((function(){n.observer&&n.observer.observe(n.el)}))}}},{key:"destroyObserver",value:function(){this.observer&&(this.observer.disconnect(),this.observer=null),this.callback&&this.callback._clear&&(this.callback._clear(),this.callback=null)}},{key:"threshold",get:function(){return this.options.intersection&&"number"==typeof this.options.intersection.threshold?this.options.intersection.threshold:0}}],n&&p(e.prototype,n),t}();function f(t,e,n){var r=e.value;if(r)if("undefined"==typeof IntersectionObserver)l.warn("[vue-observe-visibility] IntersectionObserver API is not available in your browser. Please install this polyfill: https://github.com/w3c/IntersectionObserver/tree/master/polyfill");else{var o=new m(t,r,n);t._vue_visibilityState=o}}function g(t){var e=t._vue_visibilityState;e&&(e.destroyObserver(),delete t._vue_visibilityState)}var v={bind:f,update:function(t,e,n){var r=e.value;if(!d(r,e.oldValue)){var o=t._vue_visibilityState;r?o?o.createObserver(r,n):f(t,{value:r},n):g(t)}},unbind:g},A={version:"1.0.0",install:function(t){t.directive("observe-visibility",v)}},b=null;"undefined"!=typeof window?b=window.Vue:void 0!==r.g&&(b=r.g.Vue),b&&b.use(A);const y=A;var C=r(10833),w=r(9518);const _={name:"RefreshIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}};var x=r(14486);const O=(0,x.A)(_,(function(){var t=this,e=t._self._c;return e("span",t._b({staticClass:"material-design-icon refresh-icon",attrs:{"aria-hidden":!t.title||null,"aria-label":t.title,role:"img"},on:{click:function(e){return t.$emit("click",e)}}},"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:"M17.65,6.35C16.2,4.9 14.21,4 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20C15.73,20 18.84,17.45 19.73,14H17.65C16.83,16.33 14.61,18 12,18A6,6 0 0,1 6,12A6,6 0 0,1 12,6C13.66,6 15.14,6.69 16.22,7.78L13,11H20V4L17.65,6.35Z"}},[t.title?e("title",[t._v(t._s(t.title))]):t._e()])])])}),[],!1,null,null,null).exports,S={name:"MessageReplyTextIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}},j=(0,x.A)(S,(function(){var t=this,e=t._self._c;return e("span",t._b({staticClass:"material-design-icon message-reply-text-icon",attrs:{"aria-hidden":!t.title||null,"aria-label":t.title,role:"img"},on:{click:function(e){return t.$emit("click",e)}}},"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:"M18,8H6V6H18V8M18,11H6V9H18V11M18,14H6V12H18V14M22,4A2,2 0 0,0 20,2H4A2,2 0 0,0 2,4V16A2,2 0 0,0 4,18H18L22,22V4Z"}},[t.title?e("title",[t._v(t._s(t.title))]):t._e()])])])}),[],!1,null,null,null).exports;var k=r(76162),E=r(51651),T=r(63420),M=r(24764),N=r(10501),I=r(41944),P=r(80701),R=r(9191),$=r(24325),D=r(11037),L=r(93919);const B={name:"Moment",props:{timestamp:{type:Number,required:!0},format:{type:String,default:"LLL"}},computed:{title(){return E.A.unix(this.timestamp).format(this.format)},formatted(){return E.A.unix(this.timestamp).fromNow()}}},W=(0,x.A)(B,(function(){var t=this;return(0,t._self._c)("span",{staticClass:"live-relative-timestamp",attrs:{"data-timestamp":1e3*t.timestamp,title:t.title}},[t._v(t._s(t.formatted))])}),[],!1,null,null,null).exports;var z=r(99498);const H=function(){return(0,z.dC)("dav/comments")};function q(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;const n=new DOMParser;let r=t;for(let t=0;t<e;t++)r=n.parseFromString(r,"text/html").documentElement.textContent;return r}var V=r(26287),G=r(44719);const F=(0,G.UU)(H()),U=t=>{F.setHeaders({"X-Requested-With":"XMLHttpRequest",requesttoken:null!=t?t:""})};(0,s.zo)(U),U((0,s.do)());const Q=F,Y=(0,r(53529).YK)().setApp("comments").detectUser().build();var Z=r(96763);const X={props:{id:{type:Number,default:null},message:{type:String,default:""},resourceId:{type:[String,Number],required:!0},resourceType:{type:String,default:"files"}},data:()=>({deleted:!1,editing:!1,loading:!1}),methods:{onEdit(){this.editing=!0},onEditCancel(){this.editing=!1,this.updateLocalMessage(this.message)},async onEditComment(e){this.loading=!0;try{await async function(t,e,n,r){const o=["",t,e,n].join("/");return await Q.customRequest(o,Object.assign({method:"PROPPATCH",data:'<?xml version="1.0"?>\n\t\t\t<d:propertyupdate\n\t\t\t\txmlns:d="DAV:"\n\t\t\t\txmlns:oc="http://owncloud.org/ns">\n\t\t\t<d:set>\n\t\t\t\t<d:prop>\n\t\t\t\t\t<oc:message>'.concat(r,"</oc:message>\n\t\t\t\t</d:prop>\n\t\t\t</d:set>\n\t\t\t</d:propertyupdate>")}))}(this.resourceType,this.resourceId,this.id,e),Y.debug("Comment edited",{resourceType:this.resourceType,resourceId:this.resourceId,id:this.id,message:e}),this.$emit("update:message",e),this.editing=!1}catch(e){(0,a.Qg)(t("comments","An error occurred while trying to edit the comment")),Z.error(e)}finally{this.loading=!1}},onDeleteWithUndo(){this.deleted=!0;const e=setTimeout(this.onDelete,a.Br);(0,a._h)(t("comments","Comment deleted"),(()=>{clearTimeout(e),this.deleted=!1}))},async onDelete(){try{await async function(t,e,n){const r=["",t,e,n].join("/");await Q.deleteFile(r)}(this.resourceType,this.resourceId,this.id),Y.debug("Comment deleted",{resourceType:this.resourceType,resourceId:this.resourceId,id:this.id}),this.$emit("delete",this.id)}catch(e){(0,a.Qg)(t("comments","An error occurred while trying to delete the comment")),Z.error(e),this.deleted=!1}},async onNewComment(e){this.loading=!0;try{const t=await async function(t,e,n){const r=["",t,e].join("/"),o=await V.A.post(H()+r,{actorDisplayName:(0,s.HW)().displayName,actorId:(0,s.HW)().uid,actorType:"users",creationDateTime:(new Date).toUTCString(),message:n,objectType:t,verb:"comment"}),i=r+"/"+parseInt(o.headers["content-location"].split("/").pop()),a=await Q.stat(i,{details:!0}),c=a.data.props;return c.actorDisplayName=q(c.actorDisplayName,2),c.message=q(c.message,2),a.data}(this.resourceType,this.resourceId,e);Y.debug("New comment posted",{resourceType:this.resourceType,resourceId:this.resourceId,newComment:t}),this.$emit("new",t),this.$emit("update:message",""),this.localMessage=""}catch(e){(0,a.Qg)(t("comments","An error occurred while trying to create the comment")),Z.error(e)}finally{this.loading=!1}}}},K={name:"Comment",components:{IconArrowRight:R.A,IconClose:$.A,IconDelete:D.A,IconEdit:L.A,Moment:W,NcActionButton:T.A,NcActions:M.A,NcActionSeparator:N.A,NcAvatar:I.A,NcButton:w.A,NcRichContenteditable:()=>Promise.all([r.e(4208),r.e(5528)]).then(r.bind(r,95528))},mixins:[P.Ay,X],inheritAttrs:!1,props:{actorDisplayName:{type:String,required:!0},actorId:{type:String,required:!0},creationDateTime:{type:String,default:null},editor:{type:Boolean,default:!1},autoComplete:{type:Function,required:!0},tag:{type:String,default:"div"}},data:()=>({expanded:!1,localMessage:"",submitted:!1}),computed:{isOwnComment(){return(0,s.HW)().uid===this.actorId},renderedContent(){return this.isEmptyMessage?"":this.renderContent(this.localMessage)},isEmptyMessage(){return!this.localMessage||""===this.localMessage.trim()},timestamp(){return parseInt((0,E.A)(this.creationDateTime).format("x"),10)/1e3}},watch:{message(t){this.updateLocalMessage(t)}},beforeMount(){this.updateLocalMessage(this.message)},methods:{t:o.Tl,updateLocalMessage(t){this.localMessage=t.toString(),this.submitted=!1},onSubmit(){if(""!==this.localMessage.trim())return this.editor?(this.onNewComment(this.localMessage.trim()),void this.$nextTick((()=>{this.$refs.editor.$el.focus()}))):void this.onEditComment(this.localMessage.trim())},onExpand(){this.expanded=!0}}};var J=r(85072),tt=r.n(J),et=r(97825),nt=r.n(et),rt=r(77659),ot=r.n(rt),st=r(55056),it=r.n(st),at=r(10540),ct=r.n(at),lt=r(41113),ut=r.n(lt),pt=r(92167),ht={};ht.styleTagTransform=ut(),ht.setAttributes=it(),ht.insert=ot().bind(null,"head"),ht.domAPI=nt(),ht.insertStyleElement=ct(),tt()(pt.A,ht),pt.A&&pt.A.locals&&pt.A.locals;const dt=(0,x.A)(K,(function(){var t=this,e=t._self._c;return e(t.tag,{directives:[{name:"show",rawName:"v-show",value:!t.deleted,expression:"!deleted"}],tag:"component",staticClass:"comment",class:{"comment--loading":t.loading}},[e("div",{staticClass:"comment__side"},[e("NcAvatar",{staticClass:"comment__avatar",attrs:{"display-name":t.actorDisplayName,user:t.actorId,size:32}})],1),t._v(" "),e("div",{staticClass:"comment__body"},[e("div",{staticClass:"comment__header"},[e("span",{staticClass:"comment__author"},[t._v(t._s(t.actorDisplayName))]),t._v(" "),t.isOwnComment&&t.id&&!t.loading?e("NcActions",{staticClass:"comment__actions"},[t.editing?e("NcActionButton",{on:{click:t.onEditCancel},scopedSlots:t._u([{key:"icon",fn:function(){return[e("IconClose",{attrs:{size:20}})]},proxy:!0}],null,!1,2888946197)},[t._v("\n\t\t\t\t\t"+t._s(t.t("comments","Cancel edit"))+"\n\t\t\t\t")]):[e("NcActionButton",{attrs:{"close-after-click":""},on:{click:t.onEdit},scopedSlots:t._u([{key:"icon",fn:function(){return[e("IconEdit",{attrs:{size:20}})]},proxy:!0}],null,!1,649782975)},[t._v("\n\t\t\t\t\t\t"+t._s(t.t("comments","Edit comment"))+"\n\t\t\t\t\t")]),t._v(" "),e("NcActionSeparator"),t._v(" "),e("NcActionButton",{attrs:{"close-after-click":""},on:{click:t.onDeleteWithUndo},scopedSlots:t._u([{key:"icon",fn:function(){return[e("IconDelete",{attrs:{size:20}})]},proxy:!0}],null,!1,881161434)},[t._v("\n\t\t\t\t\t\t"+t._s(t.t("comments","Delete comment"))+"\n\t\t\t\t\t")])]],2):t._e(),t._v(" "),t.id&&t.loading?e("div",{staticClass:"comment_loading icon-loading-small"}):t.creationDateTime?e("Moment",{staticClass:"comment__timestamp",attrs:{timestamp:t.timestamp}}):t._e()],1),t._v(" "),t.editor||t.editing?e("form",{staticClass:"comment__editor",on:{submit:function(t){t.preventDefault()}}},[e("div",{staticClass:"comment__editor-group"},[e("NcRichContenteditable",{ref:"editor",attrs:{"auto-complete":t.autoComplete,contenteditable:!t.loading,label:t.editor?t.t("comments","New comment"):t.t("comments","Edit comment"),placeholder:t.t("comments","Write a comment …"),value:t.localMessage,"user-data":t.userData,"aria-describedby":"tab-comments__editor-description"},on:{"update:value":t.updateLocalMessage,submit:t.onSubmit}}),t._v(" "),e("div",{staticClass:"comment__submit"},[e("NcButton",{attrs:{type:"tertiary-no-background","native-type":"submit","aria-label":t.t("comments","Post comment"),disabled:t.isEmptyMessage},on:{click:t.onSubmit},scopedSlots:t._u([{key:"icon",fn:function(){return[t.loading?e("NcLoadingIcon"):e("IconArrowRight",{attrs:{size:20}})]},proxy:!0}],null,!1,758946661)})],1)],1),t._v(" "),e("div",{staticClass:"comment__editor-description",attrs:{id:"tab-comments__editor-description"}},[t._v("\n\t\t\t\t"+t._s(t.t("comments","@ for mentions, : for emoji, / for smart picker"))+"\n\t\t\t")])]):e("div",{staticClass:"comment__message",class:{"comment__message--expanded":t.expanded},domProps:{innerHTML:t._s(t.renderedContent)},on:{click:t.onExpand}})])])}),[],!1,null,"a54c4126",null).exports;var mt=r(68928);const ft={"[:alnum:]":["\\p{L}\\p{Nl}\\p{Nd}",!0],"[:alpha:]":["\\p{L}\\p{Nl}",!0],"[:ascii:]":["\\x00-\\x7f",!1],"[:blank:]":["\\p{Zs}\\t",!0],"[:cntrl:]":["\\p{Cc}",!0],"[:digit:]":["\\p{Nd}",!0],"[:graph:]":["\\p{Z}\\p{C}",!0,!0],"[:lower:]":["\\p{Ll}",!0],"[:print:]":["\\p{C}",!0],"[:punct:]":["\\p{P}",!0],"[:space:]":["\\p{Z}\\t\\r\\n\\v\\f",!0],"[:upper:]":["\\p{Lu}",!0],"[:word:]":["\\p{L}\\p{Nl}\\p{Nd}\\p{Pc}",!0],"[:xdigit:]":["A-Fa-f0-9",!1]},gt=t=>t.replace(/[[\]\\-]/g,"\\$&"),vt=t=>t.join(""),At=(t,e)=>{const n=e;if("["!==t.charAt(n))throw new Error("not in a brace expression");const r=[],o=[];let s=n+1,i=!1,a=!1,c=!1,l=!1,u=n,p="";t:for(;s<t.length;){const e=t.charAt(s);if("!"!==e&&"^"!==e||s!==n+1){if("]"===e&&i&&!c){u=s+1;break}if(i=!0,"\\"!==e||c){if("["===e&&!c)for(const[e,[i,c,l]]of Object.entries(ft))if(t.startsWith(e,s)){if(p)return["$.",!1,t.length-n,!0];s+=e.length,l?o.push(i):r.push(i),a=a||c;continue t}c=!1,p?(e>p?r.push(gt(p)+"-"+gt(e)):e===p&&r.push(gt(e)),p="",s++):t.startsWith("-]",s+1)?(r.push(gt(e+"-")),s+=2):t.startsWith("-",s+1)?(p=e,s+=2):(r.push(gt(e)),s++)}else c=!0,s++}else l=!0,s++}if(u<s)return["",!1,0,!1];if(!r.length&&!o.length)return["$.",!1,t.length-n,!0];if(0===o.length&&1===r.length&&/^\\?.$/.test(r[0])&&!l){return[(h=2===r[0].length?r[0].slice(-1):r[0],h.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")),!1,u-n,!1]}var h;const d="["+(l?"^":"")+vt(r)+"]",m="["+(l?"":"^")+vt(o)+"]";return[r.length&&o.length?"("+d+"|"+m+")":r.length?d:m,a,u-n,!0]};var bt=r(65606),yt=r(96763);const Ct=(t,e,n={})=>(Kt(e),!(!n.nocomment&&"#"===e.charAt(0))&&new ee(e,n).match(t)),wt=/^\*+([^+@!?\*\[\(]*)$/,_t=t=>e=>!e.startsWith(".")&&e.endsWith(t),xt=t=>e=>e.endsWith(t),Ot=t=>(t=t.toLowerCase(),e=>!e.startsWith(".")&&e.toLowerCase().endsWith(t)),St=t=>(t=t.toLowerCase(),e=>e.toLowerCase().endsWith(t)),jt=/^\*+\.\*+$/,kt=t=>!t.startsWith(".")&&t.includes("."),Et=t=>"."!==t&&".."!==t&&t.includes("."),Tt=/^\.\*+$/,Mt=t=>"."!==t&&".."!==t&&t.startsWith("."),Nt=/^\*+$/,It=t=>0!==t.length&&!t.startsWith("."),Pt=t=>0!==t.length&&"."!==t&&".."!==t,Rt=/^\?+([^+@!?\*\[\(]*)?$/,$t=([t,e=""])=>{const n=Wt([t]);return e?(e=e.toLowerCase(),t=>n(t)&&t.toLowerCase().endsWith(e)):n},Dt=([t,e=""])=>{const n=zt([t]);return e?(e=e.toLowerCase(),t=>n(t)&&t.toLowerCase().endsWith(e)):n},Lt=([t,e=""])=>{const n=zt([t]);return e?t=>n(t)&&t.endsWith(e):n},Bt=([t,e=""])=>{const n=Wt([t]);return e?t=>n(t)&&t.endsWith(e):n},Wt=([t])=>{const e=t.length;return t=>t.length===e&&!t.startsWith(".")},zt=([t])=>{const e=t.length;return t=>t.length===e&&"."!==t&&".."!==t},Ht="object"==typeof bt&&bt?"object"==typeof bt.env&&bt.env&&bt.env.__MINIMATCH_TESTING_PLATFORM__||bt.platform:"posix";Ct.sep="win32"===Ht?"\\":"/";const qt=Symbol("globstar **");Ct.GLOBSTAR=qt;const Vt={"!":{open:"(?:(?!(?:",close:"))[^/]*?)"},"?":{open:"(?:",close:")?"},"+":{open:"(?:",close:")+"},"*":{open:"(?:",close:")*"},"@":{open:"(?:",close:")"}},Gt="[^/]",Ft=Gt+"*?",Ut=t=>t.split("").reduce(((t,e)=>(t[e]=!0,t)),{}),Qt=Ut("().*{}+?[]^$\\!"),Yt=Ut("[.(");Ct.filter=(t,e={})=>n=>Ct(n,t,e);const Zt=(t,e={})=>Object.assign({},t,e);Ct.defaults=t=>{if(!t||"object"!=typeof t||!Object.keys(t).length)return Ct;const e=Ct;return Object.assign(((n,r,o={})=>e(n,r,Zt(t,o))),{Minimatch:class extends e.Minimatch{constructor(e,n={}){super(e,Zt(t,n))}static defaults(n){return e.defaults(Zt(t,n)).Minimatch}},unescape:(n,r={})=>e.unescape(n,Zt(t,r)),escape:(n,r={})=>e.escape(n,Zt(t,r)),filter:(n,r={})=>e.filter(n,Zt(t,r)),defaults:n=>e.defaults(Zt(t,n)),makeRe:(n,r={})=>e.makeRe(n,Zt(t,r)),braceExpand:(n,r={})=>e.braceExpand(n,Zt(t,r)),match:(n,r,o={})=>e.match(n,r,Zt(t,o)),sep:e.sep,GLOBSTAR:qt})};const Xt=(t,e={})=>(Kt(t),e.nobrace||!/\{(?:(?!\{).)*\}/.test(t)?[t]:mt(t));Ct.braceExpand=Xt;const Kt=t=>{if("string"!=typeof t)throw new TypeError("invalid pattern");if(t.length>65536)throw new TypeError("pattern is too long")};Ct.makeRe=(t,e={})=>new ee(t,e).makeRe(),Ct.match=(t,e,n={})=>{const r=new ee(e,n);return t=t.filter((t=>r.match(t))),r.options.nonull&&!t.length&&t.push(e),t};const Jt=/[?*]|[+@!]\(.*?\)|\[|\]/,te=t=>t.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&");class ee{options;set;pattern;windowsPathsNoEscape;nonegate;negate;comment;empty;preserveMultipleSlashes;partial;globSet;globParts;nocase;isWindows;platform;windowsNoMagicRoot;regexp;constructor(t,e={}){Kt(t),e=e||{},this.options=e,this.pattern=t,this.platform=e.platform||Ht,this.isWindows="win32"===this.platform,this.windowsPathsNoEscape=!!e.windowsPathsNoEscape||!1===e.allowWindowsEscape,this.windowsPathsNoEscape&&(this.pattern=this.pattern.replace(/\\/g,"/")),this.preserveMultipleSlashes=!!e.preserveMultipleSlashes,this.regexp=null,this.negate=!1,this.nonegate=!!e.nonegate,this.comment=!1,this.empty=!1,this.partial=!!e.partial,this.nocase=!!this.options.nocase,this.windowsNoMagicRoot=void 0!==e.windowsNoMagicRoot?e.windowsNoMagicRoot:!(!this.isWindows||!this.nocase),this.globSet=[],this.globParts=[],this.set=[],this.make()}hasMagic(){if(this.options.magicalBraces&&this.set.length>1)return!0;for(const t of this.set)for(const e of t)if("string"!=typeof e)return!0;return!1}debug(...t){}make(){const t=this.pattern,e=this.options;if(!e.nocomment&&"#"===t.charAt(0))return void(this.comment=!0);if(!t)return void(this.empty=!0);this.parseNegate(),this.globSet=[...new Set(this.braceExpand())],e.debug&&(this.debug=(...t)=>yt.error(...t)),this.debug(this.pattern,this.globSet);const n=this.globSet.map((t=>this.slashSplit(t)));this.globParts=this.preprocess(n),this.debug(this.pattern,this.globParts);let r=this.globParts.map(((t,e,n)=>{if(this.isWindows&&this.windowsNoMagicRoot){const e=!(""!==t[0]||""!==t[1]||"?"!==t[2]&&Jt.test(t[2])||Jt.test(t[3])),n=/^[a-z]:/i.test(t[0]);if(e)return[...t.slice(0,4),...t.slice(4).map((t=>this.parse(t)))];if(n)return[t[0],...t.slice(1).map((t=>this.parse(t)))]}return t.map((t=>this.parse(t)))}));if(this.debug(this.pattern,r),this.set=r.filter((t=>-1===t.indexOf(!1))),this.isWindows)for(let t=0;t<this.set.length;t++){const e=this.set[t];""===e[0]&&""===e[1]&&"?"===this.globParts[t][2]&&"string"==typeof e[3]&&/^[a-z]:$/i.test(e[3])&&(e[2]="?")}this.debug(this.pattern,this.set)}preprocess(t){if(this.options.noglobstar)for(let e=0;e<t.length;e++)for(let n=0;n<t[e].length;n++)"**"===t[e][n]&&(t[e][n]="*");const{optimizationLevel:e=1}=this.options;return e>=2?(t=this.firstPhasePreProcess(t),t=this.secondPhasePreProcess(t)):t=e>=1?this.levelOneOptimize(t):this.adjascentGlobstarOptimize(t),t}adjascentGlobstarOptimize(t){return t.map((t=>{let e=-1;for(;-1!==(e=t.indexOf("**",e+1));){let n=e;for(;"**"===t[n+1];)n++;n!==e&&t.splice(e,n-e)}return t}))}levelOneOptimize(t){return t.map((t=>0===(t=t.reduce(((t,e)=>{const n=t[t.length-1];return"**"===e&&"**"===n?t:".."===e&&n&&".."!==n&&"."!==n&&"**"!==n?(t.pop(),t):(t.push(e),t)}),[])).length?[""]:t))}levelTwoFileOptimize(t){Array.isArray(t)||(t=this.slashSplit(t));let e=!1;do{if(e=!1,!this.preserveMultipleSlashes){for(let n=1;n<t.length-1;n++){const r=t[n];1===n&&""===r&&""===t[0]||"."!==r&&""!==r||(e=!0,t.splice(n,1),n--)}"."!==t[0]||2!==t.length||"."!==t[1]&&""!==t[1]||(e=!0,t.pop())}let n=0;for(;-1!==(n=t.indexOf("..",n+1));){const r=t[n-1];r&&"."!==r&&".."!==r&&"**"!==r&&(e=!0,t.splice(n-1,2),n-=2)}}while(e);return 0===t.length?[""]:t}firstPhasePreProcess(t){let e=!1;do{e=!1;for(let n of t){let r=-1;for(;-1!==(r=n.indexOf("**",r+1));){let o=r;for(;"**"===n[o+1];)o++;o>r&&n.splice(r+1,o-r);let s=n[r+1];const i=n[r+2],a=n[r+3];if(".."!==s)continue;if(!i||"."===i||".."===i||!a||"."===a||".."===a)continue;e=!0,n.splice(r,1);const c=n.slice(0);c[r]="**",t.push(c),r--}if(!this.preserveMultipleSlashes){for(let t=1;t<n.length-1;t++){const r=n[t];1===t&&""===r&&""===n[0]||"."!==r&&""!==r||(e=!0,n.splice(t,1),t--)}"."!==n[0]||2!==n.length||"."!==n[1]&&""!==n[1]||(e=!0,n.pop())}let o=0;for(;-1!==(o=n.indexOf("..",o+1));){const t=n[o-1];if(t&&"."!==t&&".."!==t&&"**"!==t){e=!0;const t=1===o&&"**"===n[o+1]?["."]:[];n.splice(o-1,2,...t),0===n.length&&n.push(""),o-=2}}}}while(e);return t}secondPhasePreProcess(t){for(let e=0;e<t.length-1;e++)for(let n=e+1;n<t.length;n++){const r=this.partsMatch(t[e],t[n],!this.preserveMultipleSlashes);r&&(t[e]=r,t[n]=[])}return t.filter((t=>t.length))}partsMatch(t,e,n=!1){let r=0,o=0,s=[],i="";for(;r<t.length&&o<e.length;)if(t[r]===e[o])s.push("b"===i?e[o]:t[r]),r++,o++;else if(n&&"**"===t[r]&&e[o]===t[r+1])s.push(t[r]),r++;else if(n&&"**"===e[o]&&t[r]===e[o+1])s.push(e[o]),o++;else if("*"!==t[r]||!e[o]||!this.options.dot&&e[o].startsWith(".")||"**"===e[o]){if("*"!==e[o]||!t[r]||!this.options.dot&&t[r].startsWith(".")||"**"===t[r])return!1;if("a"===i)return!1;i="b",s.push(e[o]),r++,o++}else{if("b"===i)return!1;i="a",s.push(t[r]),r++,o++}return t.length===e.length&&s}parseNegate(){if(this.nonegate)return;const t=this.pattern;let e=!1,n=0;for(let r=0;r<t.length&&"!"===t.charAt(r);r++)e=!e,n++;n&&(this.pattern=t.slice(n)),this.negate=e}matchOne(t,e,n=!1){const r=this.options;if(this.isWindows){const n=""===t[0]&&""===t[1]&&"?"===t[2]&&"string"==typeof t[3]&&/^[a-z]:$/i.test(t[3]),r=""===e[0]&&""===e[1]&&"?"===e[2]&&"string"==typeof e[3]&&/^[a-z]:$/i.test(e[3]);if(n&&r){const n=t[3],r=e[3];n.toLowerCase()===r.toLowerCase()&&(t[3]=r)}else if(r&&"string"==typeof t[0]){const n=e[3],r=t[0];n.toLowerCase()===r.toLowerCase()&&(e[3]=r,e=e.slice(3))}else if(n&&"string"==typeof e[0]){const n=t[3];n.toLowerCase()===e[0].toLowerCase()&&(e[0]=n,t=t.slice(3))}}const{optimizationLevel:o=1}=this.options;o>=2&&(t=this.levelTwoFileOptimize(t)),this.debug("matchOne",this,{file:t,pattern:e}),this.debug("matchOne",t.length,e.length);for(var s=0,i=0,a=t.length,c=e.length;s<a&&i<c;s++,i++){this.debug("matchOne loop");var l=e[i],u=t[s];if(this.debug(e,l,u),!1===l)return!1;if(l===qt){this.debug("GLOBSTAR",[e,l,u]);var p=s,h=i+1;if(h===c){for(this.debug("** at the end");s<a;s++)if("."===t[s]||".."===t[s]||!r.dot&&"."===t[s].charAt(0))return!1;return!0}for(;p<a;){var d=t[p];if(this.debug("\nglobstar while",t,p,e,h,d),this.matchOne(t.slice(p),e.slice(h),n))return this.debug("globstar found match!",p,a,d),!0;if("."===d||".."===d||!r.dot&&"."===d.charAt(0)){this.debug("dot detected!",t,p,e,h);break}this.debug("globstar swallow a segment, and continue"),p++}return!(!n||(this.debug("\n>>> no match, partial?",t,p,e,h),p!==a))}let o;if("string"==typeof l?(o=u===l,this.debug("string match",l,u,o)):(o=l.test(u),this.debug("pattern match",l,u,o)),!o)return!1}if(s===a&&i===c)return!0;if(s===a)return n;if(i===c)return s===a-1&&""===t[s];throw new Error("wtf?")}braceExpand(){return Xt(this.pattern,this.options)}parse(t){Kt(t);const e=this.options;if("**"===t)return qt;if(""===t)return"";let n,r=null;(n=t.match(Nt))?r=e.dot?Pt:It:(n=t.match(wt))?r=(e.nocase?e.dot?St:Ot:e.dot?xt:_t)(n[1]):(n=t.match(Rt))?r=(e.nocase?e.dot?Dt:$t:e.dot?Lt:Bt)(n):(n=t.match(jt))?r=e.dot?Et:kt:(n=t.match(Tt))&&(r=Mt);let o="",s=!1,i=!1;const a=[],c=[];let l,u=!1,p=!1,h="."===t.charAt(0),d=e.dot||h;const m=t=>"."===t.charAt(0)?"":e.dot?"(?!(?:^|\\/)\\.{1,2}(?:$|\\/))":"(?!\\.)",f=()=>{if(u){switch(u){case"*":o+=Ft,s=!0;break;case"?":o+=Gt,s=!0;break;default:o+="\\"+u}this.debug("clearStateChar %j %j",u,o),u=!1}};for(let n,r=0;r<t.length&&(n=t.charAt(r));r++)if(this.debug("%s\t%s %s %j",t,r,o,n),i){if("/"===n)return!1;Qt[n]&&(o+="\\"),o+=n,i=!1}else switch(n){case"/":return!1;case"\\":f(),i=!0;continue;case"?":case"*":case"+":case"@":case"!":this.debug("%s\t%s %s %j <-- stateChar",t,r,o,n),this.debug("call clearStateChar %j",u),f(),u=n,e.noext&&f();continue;case"(":{if(!u){o+="\\(";continue}const e={type:u,start:r-1,reStart:o.length,open:Vt[u].open,close:Vt[u].close};this.debug(this.pattern,"\t",e),a.push(e),o+=e.open,0===e.start&&"!"!==e.type&&(h=!0,o+=m(t.slice(r+1))),this.debug("plType %j %j",u,o),u=!1;continue}case")":{const t=a[a.length-1];if(!t){o+="\\)";continue}a.pop(),f(),s=!0,l=t,o+=l.close,"!"===l.type&&c.push(Object.assign(l,{reEnd:o.length}));continue}case"|":{const e=a[a.length-1];if(!e){o+="\\|";continue}f(),o+="|",0===e.start&&"!"!==e.type&&(h=!0,o+=m(t.slice(r+1)));continue}case"[":f();const[d,g,v,A]=At(t,r);v?(o+=d,p=p||g,r+=v-1,s=s||A):o+="\\[";continue;case"]":o+="\\"+n;continue;default:f(),o+=te(n)}for(l=a.pop();l;l=a.pop()){let t;t=o.slice(l.reStart+l.open.length),this.debug(this.pattern,"setting tail",o,l),t=t.replace(/((?:\\{2}){0,64})(\\?)\|/g,((t,e,n)=>(n||(n="\\"),e+e+n+"|"))),this.debug("tail=%j\n %s",t,t,l,o);const e="*"===l.type?Ft:"?"===l.type?Gt:"\\"+l.type;s=!0,o=o.slice(0,l.reStart)+e+"\\("+t}f(),i&&(o+="\\\\");const g=Yt[o.charAt(0)];for(let t=c.length-1;t>-1;t--){const e=c[t],n=o.slice(0,e.reStart),r=o.slice(e.reStart,e.reEnd-8);let s=o.slice(e.reEnd);const i=o.slice(e.reEnd-8,e.reEnd)+s,a=n.split(")").length,l=n.split("(").length-a;let u=s;for(let t=0;t<l;t++)u=u.replace(/\)[+*?]?/,"");s=u,o=n+r+s+(""===s?"(?:$|\\/)":"")+i}if(""!==o&&s&&(o="(?=.)"+o),g&&(o=(h?"":d?"(?!(?:^|\\/)\\.{1,2}(?:$|\\/))":"(?!\\.)")+o),!e.nocase||s||e.nocaseMagicOnly||(s=t.toUpperCase()!==t.toLowerCase()),!s)return o.replace(/\\(.)/g,"$1");const v=(e.nocase?"i":"")+(p?"u":"");try{const e=r?{_glob:t,_src:o,test:r}:{_glob:t,_src:o};return Object.assign(new RegExp("^"+o+"$",v),e)}catch(t){return this.debug("invalid regexp",t),new RegExp("$.")}}makeRe(){if(this.regexp||!1===this.regexp)return this.regexp;const t=this.set;if(!t.length)return this.regexp=!1,this.regexp;const e=this.options,n=e.noglobstar?Ft:e.dot?"(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?":"(?:(?!(?:\\/|^)\\.).)*?",r=e.nocase?"i":"";let o=t.map((t=>{const e=t.map((t=>"string"==typeof t?te(t):t===qt?qt:t._src));return e.forEach(((t,r)=>{const o=e[r+1],s=e[r-1];t===qt&&s!==qt&&(void 0===s?void 0!==o&&o!==qt?e[r+1]="(?:\\/|"+n+"\\/)?"+o:e[r]=n:void 0===o?e[r-1]=s+"(?:\\/|"+n+")?":o!==qt&&(e[r-1]=s+"(?:\\/|\\/"+n+"\\/)"+o,e[r+1]=qt))})),e.filter((t=>t!==qt)).join("/")})).join("|");o="^(?:"+o+")$",this.negate&&(o="^(?!"+o+").*$");try{this.regexp=new RegExp(o,r)}catch(t){this.regexp=!1}return this.regexp}slashSplit(t){return this.preserveMultipleSlashes?t.split("/"):this.isWindows&&/^\/\/[^\/]+/.test(t)?["",...t.split(/\/+/)]:t.split(/\/+/)}match(t,e=this.partial){if(this.debug("match",t,this.pattern),this.comment)return!1;if(this.empty)return""===t;if("/"===t&&e)return!0;const n=this.options;this.isWindows&&(t=t.split("\\").join("/"));const r=this.slashSplit(t);this.debug(this.pattern,"split",r);const o=this.set;this.debug(this.pattern,"set",o);let s=r[r.length-1];if(!s)for(let t=r.length-2;!s&&t>=0;t--)s=r[t];for(let t=0;t<o.length;t++){const i=o[t];let a=r;if(n.matchBase&&1===i.length&&(a=[s]),this.matchOne(a,i,e))return!!n.flipNegate||!this.negate}return!n.flipNegate&&this.negate}static defaults(t){return Ct.defaults(t).Minimatch}}function ne(t){const e={};for(const n of t.keys())e[n]=t.get(n);return e}Ct.Minimatch=ee,Ct.escape=(t,{windowsPathsNoEscape:e=!1}={})=>e?t.replace(/[?*()[\]]/g,"[$&]"):t.replace(/[?*()[\]\\]/g,"\\$&"),Ct.unescape=(t,{windowsPathsNoEscape:e=!1}={})=>e?t.replace(/\[([^\/\\])\]/g,"$1"):t.replace(/((?!\\).|^)\[([^\/\\])\]/g,"$1$2").replace(/\\([^\/])/g,"$1");var re,oe=r(12692);r(86454),r(26602),Error,function(t){t.Array="array",t.Object="object",t.Original="original"}(re||(re={}));const se=async function(t,e){var n;let{resourceType:r,resourceId:o}=t;const s=["",r,o].join("/"),i=e.datetime?"<oc:datetime>".concat(e.datetime.toISOString(),"</oc:datetime>"):"",a=await Q.customRequest(s,Object.assign({method:"REPORT",data:'<?xml version="1.0"?>\n\t\t\t<oc:filter-comments\n\t\t\t\txmlns:d="DAV:"\n\t\t\t\txmlns:oc="http://owncloud.org/ns"\n\t\t\t\txmlns:nc="http://nextcloud.org/ns"\n\t\t\t\txmlns:ocs="http://open-collaboration-services.org/ns">\n\t\t\t\t<oc:limit>'.concat(null!==(n=e.limit)&&void 0!==n?n:20,"</oc:limit>\n\t\t\t\t<oc:offset>").concat(e.offset||0,"</oc:offset>\n\t\t\t\t").concat(i,"\n\t\t\t</oc:filter-comments>")},e)),c=await a.text(),l=await(0,G.h4)(c);return function(t,e,n=!1){return n?{data:e,headers:t.headers?ne(t.headers):{},status:t.status,statusText:t.statusText}:e}(a,ie(l,!0),!0)},ie=function(t){let e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const{multistatus:{response:n}}=t;return n.map((t=>{const n=t.propstat.prop;return function(t,e,n=!1){const{getlastmodified:r=null,getcontentlength:o="0",resourcetype:s=null,getcontenttype:i=null,getetag:a=null}=t,c=s&&"object"==typeof s&&void 0!==s.collection?"directory":"file",l={filename:e,basename:oe.basename(e),lastmod:r,size:parseInt(o,10),type:c,etag:"string"==typeof a?a.replace(/"/g,""):null};return"file"===c&&(l.mime=i&&"string"==typeof i?i.split(";")[0]:""),n&&(l.props=t),l}(n,n.id.toString(),e)}))};var ae=r(38613);const ce=(0,i.pM)({props:{resourceId:{type:Number,required:!0},resourceType:{type:String,default:"files"}},data:()=>({editorData:{actorDisplayName:(0,s.HW)().displayName,actorId:(0,s.HW)().uid,key:"editor"},userData:{}}),methods:{async autoComplete(t,e){const{data:n}=await V.A.get((0,z.KT)("core/autocomplete/get"),{params:{search:t,itemType:"files",itemId:this.resourceId,sorter:"commenters|share-recipients",limit:(0,ae.C)("comments","maxAutoCompleteResults")}});return n.ocs.data.forEach((t=>{this.userData[t.id]=t})),e(Object.values(this.userData))},genMentionsData(t){return Object.values(t).flat().forEach((t=>{var e;this.userData[t.mentionId]={icon:"icon-user",id:t.mentionId,label:t.mentionDisplayName,source:"users",primary:(null===(e=(0,s.HW)())||void 0===e?void 0:e.uid)===t.mentionId}})),this.userData}}});var le=r(96763);i.Ay.use(c.Ay),i.Ay.use(y);const ue={name:"Comments",components:{Comment:dt,NcEmptyContent:C.A,NcButton:w.A,RefreshIcon:O,MessageReplyTextIcon:j,AlertCircleOutlineIcon:k.A},mixins:[ce],data:()=>({error:"",loading:!1,done:!1,resourceId:null,offset:0,comments:[],cancelRequest:()=>{},Comment:dt,userData:{}}),computed:{hasComments(){return this.comments.length>0},isFirstLoading(){return this.loading&&0===this.offset}},methods:{t:o.Tl,async onVisibilityChange(t){if(t)try{await((t,e,n)=>{const r=["",t,e].join("/"),o=n.toUTCString();return Q.customRequest(r,{method:"PROPPATCH",data:'<?xml version="1.0"?>\n\t\t\t<d:propertyupdate\n\t\t\t\txmlns:d="DAV:"\n\t\t\t\txmlns:oc="http://owncloud.org/ns">\n\t\t\t<d:set>\n\t\t\t\t<d:prop>\n\t\t\t\t\t<oc:readMarker>'.concat(o,"</oc:readMarker>\n\t\t\t\t</d:prop>\n\t\t\t</d:set>\n\t\t\t</d:propertyupdate>")})})(this.resourceType,this.resourceId,new Date)}catch(t){(0,a.Qg)(t.message||(0,o.Tl)("comments","Failed to mark comments as read"))}},async update(t){this.resourceId=t,this.resetState(),this.getComments()},onScrollBottomReached(){this.error||this.done||this.loading||this.getComments()},async getComments(){this.cancelRequest("cancel");try{this.loading=!0,this.error="";const{request:t,abort:e}=function(t){const e=new AbortController,n=e.signal;return{request:async function(e,r){return await t(e,Object.assign({signal:n},r))},abort:()=>e.abort()}}(se);this.cancelRequest=e;const{data:n}=await t({resourceType:this.resourceType,resourceId:this.resourceId},{offset:this.offset})||{data:[]};this.logger.debug("Processed ".concat(n.length," comments"),{comments:n}),n.length<20&&(this.done=!0),this.comments.push(...n),this.offset+=20}catch(t){if("cancel"===t.message)return;this.error=(0,o.Tl)("comments","Unable to load the comments list"),le.error("Error loading the comments list",t)}finally{this.loading=!1}},onNewComment(t){this.comments.unshift(t)},onDelete(t){const e=this.comments.findIndex((e=>e.props.id===t));e>-1?this.comments.splice(e,1):le.error("Could not find the deleted comment in the list",t)},resetState(){this.error="",this.loading=!1,this.done=!1,this.offset=0,this.comments=[]}}};var pe=r(18038),he={};he.styleTagTransform=ut(),he.setAttributes=it(),he.insert=ot().bind(null,"head"),he.domAPI=nt(),he.insertStyleElement=ct(),tt()(pe.A,he),pe.A&&pe.A.locals&&pe.A.locals;const de=(0,x.A)(ue,(function(){var t=this,e=t._self._c;return e("div",{directives:[{name:"observe-visibility",rawName:"v-observe-visibility",value:t.onVisibilityChange,expression:"onVisibilityChange"}],staticClass:"comments",class:{"icon-loading":t.isFirstLoading}},[e("Comment",t._b({staticClass:"comments__writer",attrs:{"auto-complete":t.autoComplete,"resource-type":t.resourceType,editor:!0,"user-data":t.userData,"resource-id":t.resourceId},on:{new:t.onNewComment}},"Comment",t.editorData,!1)),t._v(" "),t.isFirstLoading?t._e():[!t.hasComments&&t.done?e("NcEmptyContent",{staticClass:"comments__empty",attrs:{name:t.t("comments","No comments yet, start the conversation!")},scopedSlots:t._u([{key:"icon",fn:function(){return[e("MessageReplyTextIcon")]},proxy:!0}],null,!1,1033639148)}):e("ul",t._l(t.comments,(function(n){return e("Comment",t._b({key:n.props.id,staticClass:"comments__list",attrs:{tag:"li","auto-complete":t.autoComplete,"resource-type":t.resourceType,message:n.props.message,"resource-id":t.resourceId,"user-data":t.genMentionsData(n.props.mentions)},on:{"update:message":function(e){return t.$set(n.props,"message",e)},delete:t.onDelete}},"Comment",n.props,!1))})),1),t._v(" "),t.loading&&!t.isFirstLoading?e("div",{staticClass:"comments__info icon-loading"}):t.hasComments&&t.done?e("div",{staticClass:"comments__info"},[t._v("\n\t\t\t"+t._s(t.t("comments","No more messages"))+"\n\t\t")]):t.error?[e("NcEmptyContent",{staticClass:"comments__error",attrs:{name:t.error},scopedSlots:t._u([{key:"icon",fn:function(){return[e("AlertCircleOutlineIcon")]},proxy:!0}],null,!1,66050004)}),t._v(" "),e("NcButton",{staticClass:"comments__retry",on:{click:t.getComments},scopedSlots:t._u([{key:"icon",fn:function(){return[e("RefreshIcon")]},proxy:!0}],null,!1,3924573781)},[t._v("\n\t\t\t\t"+t._s(t.t("comments","Retry"))+"\n\t\t\t")])]:t._e()]],2)}),[],!1,null,"b2489a3c",null).exports;r.nc=btoa((0,s.do)()),i.Ay.mixin({data:()=>({logger:Y}),methods:{t:o.Tl,n:o.zw}});var me=r(96763);window.OCA&&!window.OCA.Comments&&Object.assign(window.OCA,{Comments:{}}),Object.assign(window.OCA.Comments,{View:class{constructor(){var t;let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"files",n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return n={...n,propsData:{...null!==(t=n.propsData)&&void 0!==t?t:{},resourceType:e}},new(i.Ay.extend(de))(n)}}}),me.debug("OCA.Comments.View initialized")},8505:t=>{"use strict";function e(t,e,o){t instanceof RegExp&&(t=n(t,o)),e instanceof RegExp&&(e=n(e,o));var s=r(t,e,o);return s&&{start:s[0],end:s[1],pre:o.slice(0,s[0]),body:o.slice(s[0]+t.length,s[1]),post:o.slice(s[1]+e.length)}}function n(t,e){var n=e.match(t);return n?n[0]:null}function r(t,e,n){var r,o,s,i,a,c=n.indexOf(t),l=n.indexOf(e,c+1),u=c;if(c>=0&&l>0){if(t===e)return[c,l];for(r=[],s=n.length;u>=0&&!a;)u==c?(r.push(u),c=n.indexOf(t,u+1)):1==r.length?a=[r.pop(),l]:((o=r.pop())<s&&(s=o,i=l),l=n.indexOf(e,u+1)),u=c<l&&c>=0?c:l;r.length&&(a=[s,i])}return a}t.exports=e,e.range=r},68928:(t,e,n)=>{var r=n(8505);t.exports=function(t){return t?("{}"===t.substr(0,2)&&(t="\\{\\}"+t.substr(2)),g(function(t){return t.split("\\\\").join(o).split("\\{").join(s).split("\\}").join(i).split("\\,").join(a).split("\\.").join(c)}(t),!0).map(u)):[]};var o="\0SLASH"+Math.random()+"\0",s="\0OPEN"+Math.random()+"\0",i="\0CLOSE"+Math.random()+"\0",a="\0COMMA"+Math.random()+"\0",c="\0PERIOD"+Math.random()+"\0";function l(t){return parseInt(t,10)==t?parseInt(t,10):t.charCodeAt(0)}function u(t){return t.split(o).join("\\").split(s).join("{").split(i).join("}").split(a).join(",").split(c).join(".")}function p(t){if(!t)return[""];var e=[],n=r("{","}",t);if(!n)return t.split(",");var o=n.pre,s=n.body,i=n.post,a=o.split(",");a[a.length-1]+="{"+s+"}";var c=p(i);return i.length&&(a[a.length-1]+=c.shift(),a.push.apply(a,c)),e.push.apply(e,a),e}function h(t){return"{"+t+"}"}function d(t){return/^-?0\d/.test(t)}function m(t,e){return t<=e}function f(t,e){return t>=e}function g(t,e){var n=[],o=r("{","}",t);if(!o)return[t];var s=o.pre,a=o.post.length?g(o.post,!1):[""];if(/\$$/.test(o.pre))for(var c=0;c<a.length;c++){var u=s+"{"+o.body+"}"+a[c];n.push(u)}else{var v,A,b=/^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(o.body),y=/^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(o.body),C=b||y,w=o.body.indexOf(",")>=0;if(!C&&!w)return o.post.match(/,.*\}/)?g(t=o.pre+"{"+o.body+i+o.post):[t];if(C)v=o.body.split(/\.\./);else if(1===(v=p(o.body)).length&&1===(v=g(v[0],!1).map(h)).length)return a.map((function(t){return o.pre+v[0]+t}));if(C){var _=l(v[0]),x=l(v[1]),O=Math.max(v[0].length,v[1].length),S=3==v.length?Math.abs(l(v[2])):1,j=m;x<_&&(S*=-1,j=f);var k=v.some(d);A=[];for(var E=_;j(E,x);E+=S){var T;if(y)"\\"===(T=String.fromCharCode(E))&&(T="");else if(T=String(E),k){var M=O-T.length;if(M>0){var N=new Array(M+1).join("0");T=E<0?"-"+N+T.slice(1):N+T}}A.push(T)}}else{A=[];for(var I=0;I<v.length;I++)A.push.apply(A,g(v[I],!1))}for(I=0;I<A.length;I++)for(c=0;c<a.length;c++)u=s+A[I]+a[c],(!e||C||u)&&n.push(u)}return n}},92167:(t,e,n)=>{"use strict";n.d(e,{A:()=>a});var r=n(71354),o=n.n(r),s=n(76314),i=n.n(s)()(o());i.push([t.id,".comment[data-v-a54c4126]{display:flex;gap:8px;padding:5px 10px}.comment__side[data-v-a54c4126]{display:flex;align-items:flex-start;padding-top:6px}.comment__body[data-v-a54c4126]{display:flex;flex-grow:1;flex-direction:column}.comment__header[data-v-a54c4126]{display:flex;align-items:center;min-height:44px}.comment__actions[data-v-a54c4126]{margin-left:10px !important}.comment__author[data-v-a54c4126]{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:var(--color-text-maxcontrast)}.comment_loading[data-v-a54c4126],.comment__timestamp[data-v-a54c4126]{margin-left:auto;text-align:right;white-space:nowrap;color:var(--color-text-maxcontrast)}.comment__editor-group[data-v-a54c4126]{position:relative}.comment__editor-description[data-v-a54c4126]{color:var(--color-text-maxcontrast);padding-block:var(--default-grid-baseline)}.comment__submit[data-v-a54c4126]{position:absolute !important;bottom:0;right:0}.comment__message[data-v-a54c4126]{white-space:pre-wrap;word-break:break-word;max-height:70px;overflow:hidden;margin-top:-6px}.comment__message--expanded[data-v-a54c4126]{max-height:none;overflow:visible}.rich-contenteditable__input[data-v-a54c4126]{min-height:44px;margin:0;padding:10px}","",{version:3,sources:["webpack://./apps/comments/src/components/Comment.vue"],names:[],mappings:"AAKA,0BACC,YAAA,CACA,OAAA,CACA,gBAAA,CAEA,gCACC,YAAA,CACA,sBAAA,CACA,eAAA,CAGD,gCACC,YAAA,CACA,WAAA,CACA,qBAAA,CAGD,kCACC,YAAA,CACA,kBAAA,CACA,eAAA,CAGD,mCACC,2BAAA,CAGD,kCACC,eAAA,CACA,kBAAA,CACA,sBAAA,CACA,mCAAA,CAGD,uEAEC,gBAAA,CACA,gBAAA,CACA,kBAAA,CACA,mCAAA,CAGD,wCACC,iBAAA,CAGD,8CACC,mCAAA,CACA,0CAAA,CAGD,kCACC,4BAAA,CACA,QAAA,CACA,OAAA,CAGD,mCACC,oBAAA,CACA,qBAAA,CACA,eAAA,CACA,eAAA,CACA,eAAA,CACA,6CACC,eAAA,CACA,gBAAA,CAKH,8CACC,eAAA,CACA,QAAA,CACA,YA3EiB",sourcesContent:['\n@use "sass:math";\n\n$comment-padding: 10px;\n\n.comment {\n\tdisplay: flex;\n\tgap: 8px;\n\tpadding: 5px $comment-padding;\n\n\t&__side {\n\t\tdisplay: flex;\n\t\talign-items: flex-start;\n\t\tpadding-top: 6px;\n\t}\n\n\t&__body {\n\t\tdisplay: flex;\n\t\tflex-grow: 1;\n\t\tflex-direction: column;\n\t}\n\n\t&__header {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tmin-height: 44px;\n\t}\n\n\t&__actions {\n\t\tmargin-left: $comment-padding !important;\n\t}\n\n\t&__author {\n\t\toverflow: hidden;\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n\n\t&_loading,\n\t&__timestamp {\n\t\tmargin-left: auto;\n\t\ttext-align: right;\n\t\twhite-space: nowrap;\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n\n\t&__editor-group {\n\t\tposition: relative;\n\t}\n\n\t&__editor-description {\n\t\tcolor: var(--color-text-maxcontrast);\n\t\tpadding-block: var(--default-grid-baseline);\n\t}\n\n\t&__submit {\n\t\tposition: absolute !important;\n\t\tbottom: 0;\n\t\tright: 0;\n\t}\n\n\t&__message {\n\t\twhite-space: pre-wrap;\n\t\tword-break: break-word;\n\t\tmax-height: 70px;\n\t\toverflow: hidden;\n\t\tmargin-top: -6px;\n\t\t&--expanded {\n\t\t\tmax-height: none;\n\t\t\toverflow: visible;\n\t\t}\n\t}\n}\n\n.rich-contenteditable__input {\n\tmin-height: 44px;\n\tmargin: 0;\n\tpadding: $comment-padding;\n}\n\n'],sourceRoot:""}]);const a=i},18038:(t,e,n)=>{"use strict";n.d(e,{A:()=>a});var r=n(71354),o=n.n(r),s=n(76314),i=n.n(s)()(o());i.push([t.id,".comments[data-v-b2489a3c]{min-height:100%;display:flex;flex-direction:column}.comments__empty[data-v-b2489a3c],.comments__error[data-v-b2489a3c]{flex:1 0}.comments__retry[data-v-b2489a3c]{margin:0 auto}.comments__info[data-v-b2489a3c]{height:60px;color:var(--color-text-maxcontrast);text-align:center;line-height:60px}","",{version:3,sources:["webpack://./apps/comments/src/views/Comments.vue"],names:[],mappings:"AACA,2BACC,eAAA,CACA,YAAA,CACA,qBAAA,CAEA,oEAEC,QAAA,CAGD,kCACC,aAAA,CAGD,iCACC,WAAA,CACA,mCAAA,CACA,iBAAA,CACA,gBAAA",sourcesContent:["\n.comments {\n\tmin-height: 100%;\n\tdisplay: flex;\n\tflex-direction: column;\n\n\t&__empty,\n\t&__error {\n\t\tflex: 1 0;\n\t}\n\n\t&__retry {\n\t\tmargin: 0 auto;\n\t}\n\n\t&__info {\n\t\theight: 60px;\n\t\tcolor: var(--color-text-maxcontrast);\n\t\ttext-align: center;\n\t\tline-height: 60px;\n\t}\n}\n"],sourceRoot:""}]);const a=i},86454:(t,e,n)=>{"use strict";const r=n(43918),o=n(32923),s=n(8904);t.exports={XMLParser:o,XMLValidator:r,XMLBuilder:s}},26602:t=>{"use strict";function e(t){return e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},e(t)}function n(t){var e="function"==typeof Map?new Map:void 0;return n=function(t){if(null===t||(n=t,-1===Function.toString.call(n).indexOf("[native code]")))return t;var n;if("function"!=typeof t)throw new TypeError("Super expression must either be null or a function");if(void 0!==e){if(e.has(t))return e.get(t);e.set(t,i)}function i(){return r(t,arguments,s(this).constructor)}return i.prototype=Object.create(t.prototype,{constructor:{value:i,enumerable:!1,writable:!0,configurable:!0}}),o(i,t)},n(t)}function r(t,e,n){return r=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(t){return!1}}()?Reflect.construct:function(t,e,n){var r=[null];r.push.apply(r,e);var s=new(Function.bind.apply(t,r));return n&&o(s,n.prototype),s},r.apply(null,arguments)}function o(t,e){return o=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t},o(t,e)}function s(t){return s=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)},s(t)}var i=function(t){function n(t){var r;return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,n),(r=function(t,n){return!n||"object"!==e(n)&&"function"!=typeof n?function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t):n}(this,s(n).call(this,t))).name="ObjectPrototypeMutationError",r}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&o(t,e)}(n,t),n}(n(Error));function a(t,n){for(var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){},o=n.split("."),s=o.length,i=function(e){var n=o[e];if(!t)return{v:void 0};if("+"===n){if(Array.isArray(t))return{v:t.map((function(n,s){var i=o.slice(e+1);return i.length>0?a(n,i.join("."),r):r(t,s,o,e)}))};var s=o.slice(0,e).join(".");throw new Error("Object at wildcard (".concat(s,") is not an array"))}t=r(t,n,o,e)},c=0;c<s;c++){var l=i(c);if("object"===e(l))return l.v}return t}function c(t,e){return t.length===e+1}t.exports={set:function(t,n,r){if("object"!=e(t)||null===t)return t;if(void 0===n)return t;if("number"==typeof n)return t[n]=r,t[n];try{return a(t,n,(function(t,e,n,o){if(t===Reflect.getPrototypeOf({}))throw new i("Attempting to mutate Object.prototype");if(!t[e]){var s=Number.isInteger(Number(n[o+1])),a="+"===n[o+1];t[e]=s||a?[]:{}}return c(n,o)&&(t[e]=r),t[e]}))}catch(e){if(e instanceof i)throw e;return t}},get:function(t,n){if("object"!=e(t)||null===t)return t;if(void 0===n)return t;if("number"==typeof n)return t[n];try{return a(t,n,(function(t,e){return t[e]}))}catch(e){return t}},has:function(t,n){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if("object"!=e(t)||null===t)return!1;if(void 0===n)return!1;if("number"==typeof n)return n in t;try{var o=!1;return a(t,n,(function(t,e,n,s){if(!c(n,s))return t&&t[e];o=r.own?t.hasOwnProperty(e):e in t})),o}catch(t){return!1}},hasOwn:function(t,e,n){return this.has(t,e,n||{own:!0})},isIn:function(t,n,r){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};if("object"!=e(t)||null===t)return!1;if(void 0===n)return!1;try{var s=!1,i=!1;return a(t,n,(function(t,n,o,a){return s=s||t===r||!!t&&t[n]===r,i=c(o,a)&&"object"===e(t)&&n in t,t&&t[n]})),o.validPath?s&&i:s}catch(t){return!1}},ObjectPrototypeMutationError:i}},12692:(t,e,n)=>{"use strict";var r=n(65606),o=n(40537),s=function(t){return"string"==typeof t};function i(t,e){for(var n=[],r=0;r<t.length;r++){var o=t[r];o&&"."!==o&&(".."===o?n.length&&".."!==n[n.length-1]?n.pop():e&&n.push(".."):n.push(o))}return n}var a=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/,c={};function l(t){return a.exec(t).slice(1)}c.resolve=function(){for(var t="",e=!1,n=arguments.length-1;n>=-1&&!e;n--){var o=n>=0?arguments[n]:r.cwd();if(!s(o))throw new TypeError("Arguments to path.resolve must be strings");o&&(t=o+"/"+t,e="/"===o.charAt(0))}return(e?"/":"")+(t=i(t.split("/"),!e).join("/"))||"."},c.normalize=function(t){var e=c.isAbsolute(t),n="/"===t.substr(-1);return(t=i(t.split("/"),!e).join("/"))||e||(t="."),t&&n&&(t+="/"),(e?"/":"")+t},c.isAbsolute=function(t){return"/"===t.charAt(0)},c.join=function(){for(var t="",e=0;e<arguments.length;e++){var n=arguments[e];if(!s(n))throw new TypeError("Arguments to path.join must be strings");n&&(t+=t?"/"+n:n)}return c.normalize(t)},c.relative=function(t,e){function n(t){for(var e=0;e<t.length&&""===t[e];e++);for(var n=t.length-1;n>=0&&""===t[n];n--);return e>n?[]:t.slice(e,n+1)}t=c.resolve(t).substr(1),e=c.resolve(e).substr(1);for(var r=n(t.split("/")),o=n(e.split("/")),s=Math.min(r.length,o.length),i=s,a=0;a<s;a++)if(r[a]!==o[a]){i=a;break}var l=[];for(a=i;a<r.length;a++)l.push("..");return(l=l.concat(o.slice(i))).join("/")},c._makeLong=function(t){return t},c.dirname=function(t){var e=l(t),n=e[0],r=e[1];return n||r?(r&&(r=r.substr(0,r.length-1)),n+r):"."},c.basename=function(t,e){var n=l(t)[2];return e&&n.substr(-1*e.length)===e&&(n=n.substr(0,n.length-e.length)),n},c.extname=function(t){return l(t)[3]},c.format=function(t){if(!o.isObject(t))throw new TypeError("Parameter 'pathObject' must be an object, not "+typeof t);var e=t.root||"";if(!s(e))throw new TypeError("'pathObject.root' must be a string or undefined, not "+typeof t.root);return(t.dir?t.dir+c.sep:"")+(t.base||"")},c.parse=function(t){if(!s(t))throw new TypeError("Parameter 'pathString' must be a string, not "+typeof t);var e=l(t);if(!e||4!==e.length)throw new TypeError("Invalid path '"+t+"'");return e[1]=e[1]||"",e[2]=e[2]||"",e[3]=e[3]||"",{root:e[0],dir:e[0]+e[1].slice(0,e[1].length-1),base:e[2],ext:e[3],name:e[2].slice(0,e[2].length-e[3].length)}},c.sep="/",c.delimiter=":",t.exports=c}},s={};function i(t){var e=s[t];if(void 0!==e)return e.exports;var n=s[t]={id:t,loaded:!1,exports:{}};return o[t].call(n.exports,n,n.exports,i),n.loaded=!0,n.exports}i.m=o,e=[],i.O=(t,n,r,o)=>{if(!n){var s=1/0;for(u=0;u<e.length;u++){n=e[u][0],r=e[u][1],o=e[u][2];for(var a=!0,c=0;c<n.length;c++)(!1&o||s>=o)&&Object.keys(i.O).every((t=>i.O[t](n[c])))?n.splice(c--,1):(a=!1,o<s&&(s=o));if(a){e.splice(u--,1);var l=r();void 0!==l&&(t=l)}}return t}o=o||0;for(var u=e.length;u>0&&e[u-1][2]>o;u--)e[u]=e[u-1];e[u]=[n,r,o]},i.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return i.d(e,{a:e}),e},i.d=(t,e)=>{for(var n in e)i.o(e,n)&&!i.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},i.f={},i.e=t=>Promise.all(Object.keys(i.f).reduce(((e,n)=>(i.f[n](t,e),e)),[])),i.u=t=>t+"-"+t+".js?v="+{1110:"2909496e7e35d6258214",5528:"110b147bc8680f8c83f4",8902:"bb2f9be8a039f8db7e58"}[t],i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),i.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n={},r="nextcloud:",i.l=(t,e,o,s)=>{if(n[t])n[t].push(e);else{var a,c;if(void 0!==o)for(var l=document.getElementsByTagName("script"),u=0;u<l.length;u++){var p=l[u];if(p.getAttribute("src")==t||p.getAttribute("data-webpack")==r+o){a=p;break}}a||(c=!0,(a=document.createElement("script")).charset="utf-8",a.timeout=120,i.nc&&a.setAttribute("nonce",i.nc),a.setAttribute("data-webpack",r+o),a.src=t),n[t]=[e];var h=(e,r)=>{a.onerror=a.onload=null,clearTimeout(d);var o=n[t];if(delete n[t],a.parentNode&&a.parentNode.removeChild(a),o&&o.forEach((t=>t(r))),e)return e(r)},d=setTimeout(h.bind(null,void 0,{type:"timeout",target:a}),12e4);a.onerror=h.bind(null,a.onerror),a.onload=h.bind(null,a.onload),c&&document.head.appendChild(a)}},i.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i.nmd=t=>(t.paths=[],t.children||(t.children=[]),t),i.j=7062,(()=>{var t;i.g.importScripts&&(t=i.g.location+"");var e=i.g.document;if(!t&&e&&(e.currentScript&&(t=e.currentScript.src),!t)){var n=e.getElementsByTagName("script");if(n.length)for(var r=n.length-1;r>-1&&(!t||!/^http(s?):/.test(t));)t=n[r--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),i.p=t})(),(()=>{i.b=document.baseURI||self.location.href;var t={7062:0};i.f.j=(e,n)=>{var r=i.o(t,e)?t[e]:void 0;if(0!==r)if(r)n.push(r[2]);else{var o=new Promise(((n,o)=>r=t[e]=[n,o]));n.push(r[2]=o);var s=i.p+i.u(e),a=new Error;i.l(s,(n=>{if(i.o(t,e)&&(0!==(r=t[e])&&(t[e]=void 0),r)){var o=n&&("load"===n.type?"missing":n.type),s=n&&n.target&&n.target.src;a.message="Loading chunk "+e+" failed.\n("+o+": "+s+")",a.name="ChunkLoadError",a.type=o,a.request=s,r[1](a)}}),"chunk-"+e,e)}},i.O.j=e=>0===t[e];var e=(e,n)=>{var r,o,s=n[0],a=n[1],c=n[2],l=0;if(s.some((e=>0!==t[e]))){for(r in a)i.o(a,r)&&(i.m[r]=a[r]);if(c)var u=c(i)}for(e&&e(n);l<s.length;l++)o=s[l],i.o(t,o)&&t[o]&&t[o][0](),t[o]=0;return i.O(u)},n=self.webpackChunknextcloud=self.webpackChunknextcloud||[];n.forEach(e.bind(null,0)),n.push=e.bind(null,n.push.bind(n))})(),i.nc=void 0;var a=i.O(void 0,[4208],(()=>i(59379)));a=i.O(a)})();
+//# sourceMappingURL=comments-comments-app.js.map?v=6a2b6eba5237dd34eb0b \ No newline at end of file
diff --git a/dist/comments-comments-app.js.map b/dist/comments-comments-app.js.map
index d2cd84d4007..81e0f259250 100644
--- a/dist/comments-comments-app.js.map
+++ b/dist/comments-comments-app.js.map
@@ -1 +1 @@
-{"version":3,"file":"comments-comments-app.js?v=479b277a4a9e3e8672fc","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/webpack/runtime/load script","webpack:///nextcloud/node_modules/vue-observe-visibility/dist/vue-observe-visibility.esm.js","webpack:///nextcloud/node_modules/vue-material-design-icons/Refresh.vue","webpack:///nextcloud/node_modules/vue-material-design-icons/Refresh.vue?vue&type=script&lang=js","webpack://nextcloud/./node_modules/vue-material-design-icons/Refresh.vue?0940","webpack:///nextcloud/node_modules/vue-material-design-icons/Refresh.vue?vue&type=template&id=7301d745","webpack:///nextcloud/node_modules/vue-material-design-icons/MessageReplyText.vue?vue&type=script&lang=js","webpack:///nextcloud/node_modules/vue-material-design-icons/MessageReplyText.vue","webpack://nextcloud/./node_modules/vue-material-design-icons/MessageReplyText.vue?2121","webpack:///nextcloud/node_modules/vue-material-design-icons/MessageReplyText.vue?vue&type=template&id=5b37a4cf","webpack:///nextcloud/apps/comments/src/components/Moment.vue","webpack:///nextcloud/apps/comments/src/components/Moment.vue?vue&type=script&lang=js","webpack://nextcloud/./apps/comments/src/components/Moment.vue?9b20","webpack://nextcloud/./apps/comments/src/components/Moment.vue?135d","webpack:///nextcloud/apps/comments/src/utils/davUtils.js","webpack:///nextcloud/apps/comments/src/utils/decodeHtmlEntities.js","webpack:///nextcloud/apps/comments/src/services/DavClient.js","webpack:///nextcloud/apps/comments/src/logger.js","webpack:///nextcloud/apps/comments/src/mixins/CommentMixin.js","webpack:///nextcloud/apps/comments/src/services/EditComment.js","webpack:///nextcloud/apps/comments/src/services/DeleteComment.js","webpack:///nextcloud/apps/comments/src/services/NewComment.js","webpack:///nextcloud/apps/comments/src/components/Comment.vue?vue&type=script&lang=js","webpack:///nextcloud/apps/comments/src/components/Comment.vue","webpack://nextcloud/./apps/comments/src/components/Comment.vue?be0c","webpack://nextcloud/./apps/comments/src/components/Comment.vue?7f26","webpack://nextcloud/./apps/comments/src/components/Comment.vue?d1f7","webpack:///nextcloud/node_modules/webdav/node_modules/minimatch/dist/mjs/brace-expressions.js","webpack:///nextcloud/node_modules/webdav/node_modules/minimatch/dist/mjs/index.js","webpack:///nextcloud/node_modules/webdav/dist/node/tools/headers.js","webpack:///nextcloud/node_modules/webdav/node_modules/minimatch/dist/mjs/escape.js","webpack:///nextcloud/node_modules/webdav/node_modules/minimatch/dist/mjs/unescape.js","webpack:///nextcloud/node_modules/webdav/dist/node/tools/dav.js","webpack:///nextcloud/node_modules/layerr/dist/layerr.js","webpack:///nextcloud/apps/comments/src/services/GetComments.ts","webpack:///nextcloud/node_modules/webdav/dist/node/response.js","webpack:///nextcloud/apps/comments/src/mixins/CommentView.ts","webpack:///nextcloud/apps/comments/src/views/Comments.vue","webpack:///nextcloud/apps/comments/src/views/Comments.vue?vue&type=script&lang=js","webpack:///nextcloud/apps/comments/src/services/ReadComments.ts","webpack:///nextcloud/apps/comments/src/utils/cancelableRequest.js","webpack://nextcloud/./apps/comments/src/views/Comments.vue?ec1a","webpack://nextcloud/./apps/comments/src/views/Comments.vue?f45b","webpack://nextcloud/./apps/comments/src/views/Comments.vue?0e41","webpack:///nextcloud/apps/comments/src/services/CommentsInstance.js","webpack:///nextcloud/apps/comments/src/comments-app.js","webpack:///nextcloud/node_modules/balanced-match/index.js","webpack:///nextcloud/node_modules/brace-expansion/index.js","webpack:///nextcloud/apps/comments/src/components/Comment.vue?vue&type=style&index=0&id=47c0e61c&prod&lang=scss&scoped=true","webpack:///nextcloud/apps/comments/src/views/Comments.vue?vue&type=style&index=0&id=b2489a3c&prod&lang=scss&scoped=true","webpack:///nextcloud/node_modules/fast-xml-parser/src/fxp.js","webpack:///nextcloud/node_modules/nested-property/dist/nested-property.js","webpack:///nextcloud/node_modules/path-posix/index.js","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/ensure chunk","webpack:///nextcloud/webpack/runtime/get javascript chunk filename","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/publicPath","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"nextcloud:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","function _typeof(obj) {\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n return arr2;\n }\n}\n\nfunction _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\n\nfunction processOptions(value) {\n var options;\n\n if (typeof value === 'function') {\n // Simple options (callback-only)\n options = {\n callback: value\n };\n } else {\n // Options object\n options = value;\n }\n\n return options;\n}\nfunction throttle(callback, delay) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var timeout;\n var lastState;\n var currentArgs;\n\n var throttled = function throttled(state) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n currentArgs = args;\n if (timeout && state === lastState) return;\n var leading = options.leading;\n\n if (typeof leading === 'function') {\n leading = leading(state, lastState);\n }\n\n if ((!timeout || state !== lastState) && leading) {\n callback.apply(void 0, [state].concat(_toConsumableArray(currentArgs)));\n }\n\n lastState = state;\n clearTimeout(timeout);\n timeout = setTimeout(function () {\n callback.apply(void 0, [state].concat(_toConsumableArray(currentArgs)));\n timeout = 0;\n }, delay);\n };\n\n throttled._clear = function () {\n clearTimeout(timeout);\n timeout = null;\n };\n\n return throttled;\n}\nfunction deepEqual(val1, val2) {\n if (val1 === val2) return true;\n\n if (_typeof(val1) === 'object') {\n for (var key in val1) {\n if (!deepEqual(val1[key], val2[key])) {\n return false;\n }\n }\n\n return true;\n }\n\n return false;\n}\n\nvar VisibilityState =\n/*#__PURE__*/\nfunction () {\n function VisibilityState(el, options, vnode) {\n _classCallCheck(this, VisibilityState);\n\n this.el = el;\n this.observer = null;\n this.frozen = false;\n this.createObserver(options, vnode);\n }\n\n _createClass(VisibilityState, [{\n key: \"createObserver\",\n value: function createObserver(options, vnode) {\n var _this = this;\n\n if (this.observer) {\n this.destroyObserver();\n }\n\n if (this.frozen) return;\n this.options = processOptions(options);\n\n this.callback = function (result, entry) {\n _this.options.callback(result, entry);\n\n if (result && _this.options.once) {\n _this.frozen = true;\n\n _this.destroyObserver();\n }\n }; // Throttle\n\n\n if (this.callback && this.options.throttle) {\n var _ref = this.options.throttleOptions || {},\n _leading = _ref.leading;\n\n this.callback = throttle(this.callback, this.options.throttle, {\n leading: function leading(state) {\n return _leading === 'both' || _leading === 'visible' && state || _leading === 'hidden' && !state;\n }\n });\n }\n\n this.oldResult = undefined;\n this.observer = new IntersectionObserver(function (entries) {\n var entry = entries[0];\n\n if (entries.length > 1) {\n var intersectingEntry = entries.find(function (e) {\n return e.isIntersecting;\n });\n\n if (intersectingEntry) {\n entry = intersectingEntry;\n }\n }\n\n if (_this.callback) {\n // Use isIntersecting if possible because browsers can report isIntersecting as true, but intersectionRatio as 0, when something very slowly enters the viewport.\n var result = entry.isIntersecting && entry.intersectionRatio >= _this.threshold;\n if (result === _this.oldResult) return;\n _this.oldResult = result;\n\n _this.callback(result, entry);\n }\n }, this.options.intersection); // Wait for the element to be in document\n\n vnode.context.$nextTick(function () {\n if (_this.observer) {\n _this.observer.observe(_this.el);\n }\n });\n }\n }, {\n key: \"destroyObserver\",\n value: function destroyObserver() {\n if (this.observer) {\n this.observer.disconnect();\n this.observer = null;\n } // Cancel throttled call\n\n\n if (this.callback && this.callback._clear) {\n this.callback._clear();\n\n this.callback = null;\n }\n }\n }, {\n key: \"threshold\",\n get: function get() {\n return this.options.intersection && typeof this.options.intersection.threshold === 'number' ? this.options.intersection.threshold : 0;\n }\n }]);\n\n return VisibilityState;\n}();\n\nfunction bind(el, _ref2, vnode) {\n var value = _ref2.value;\n if (!value) return;\n\n if (typeof IntersectionObserver === 'undefined') {\n console.warn('[vue-observe-visibility] IntersectionObserver API is not available in your browser. Please install this polyfill: https://github.com/w3c/IntersectionObserver/tree/master/polyfill');\n } else {\n var state = new VisibilityState(el, value, vnode);\n el._vue_visibilityState = state;\n }\n}\n\nfunction update(el, _ref3, vnode) {\n var value = _ref3.value,\n oldValue = _ref3.oldValue;\n if (deepEqual(value, oldValue)) return;\n var state = el._vue_visibilityState;\n\n if (!value) {\n unbind(el);\n return;\n }\n\n if (state) {\n state.createObserver(value, vnode);\n } else {\n bind(el, {\n value: value\n }, vnode);\n }\n}\n\nfunction unbind(el) {\n var state = el._vue_visibilityState;\n\n if (state) {\n state.destroyObserver();\n delete el._vue_visibilityState;\n }\n}\n\nvar ObserveVisibility = {\n bind: bind,\n update: update,\n unbind: unbind\n};\n\nfunction install(Vue) {\n Vue.directive('observe-visibility', ObserveVisibility);\n /* -- Add more components here -- */\n}\n/* -- Plugin definition & Auto-install -- */\n\n/* You shouldn't have to modify the code below */\n// Plugin\n\nvar plugin = {\n // eslint-disable-next-line no-undef\n version: \"1.0.0\",\n install: install\n};\n\nvar GlobalVue = null;\n\nif (typeof window !== 'undefined') {\n GlobalVue = window.Vue;\n} else if (typeof global !== 'undefined') {\n GlobalVue = global.Vue;\n}\n\nif (GlobalVue) {\n GlobalVue.use(plugin);\n}\n\nexport default plugin;\nexport { ObserveVisibility, install };\n","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : true\"\n :aria-label=\"title\"\n class=\"material-design-icon refresh-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M17.65,6.35C16.2,4.9 14.21,4 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20C15.73,20 18.84,17.45 19.73,14H17.65C16.83,16.33 14.61,18 12,18A6,6 0 0,1 6,12A6,6 0 0,1 12,6C13.66,6 15.14,6.69 16.22,7.78L13,11H20V4L17.65,6.35Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"RefreshIcon\",\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}\n</script>","import mod from \"-!../vue-loader/lib/index.js??vue-loader-options!./Refresh.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../vue-loader/lib/index.js??vue-loader-options!./Refresh.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Refresh.vue?vue&type=template&id=7301d745\"\nimport script from \"./Refresh.vue?vue&type=script&lang=js\"\nexport * from \"./Refresh.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('span',_vm._b({staticClass:\"material-design-icon refresh-icon\",attrs:{\"aria-hidden\":_vm.title ? null : true,\"aria-label\":_vm.title,\"role\":\"img\"},on:{\"click\":function($event){return _vm.$emit('click', $event)}}},'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\":\"M17.65,6.35C16.2,4.9 14.21,4 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20C15.73,20 18.84,17.45 19.73,14H17.65C16.83,16.33 14.61,18 12,18A6,6 0 0,1 6,12A6,6 0 0,1 12,6C13.66,6 15.14,6.69 16.22,7.78L13,11H20V4L17.65,6.35Z\"}},[(_vm.title)?_c('title',[_vm._v(_vm._s(_vm.title))]):_vm._e()])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../vue-loader/lib/index.js??vue-loader-options!./MessageReplyText.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../vue-loader/lib/index.js??vue-loader-options!./MessageReplyText.vue?vue&type=script&lang=js\"","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : true\"\n :aria-label=\"title\"\n class=\"material-design-icon message-reply-text-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M18,8H6V6H18V8M18,11H6V9H18V11M18,14H6V12H18V14M22,4A2,2 0 0,0 20,2H4A2,2 0 0,0 2,4V16A2,2 0 0,0 4,18H18L22,22V4Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"MessageReplyTextIcon\",\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}\n</script>","import { render, staticRenderFns } from \"./MessageReplyText.vue?vue&type=template&id=5b37a4cf\"\nimport script from \"./MessageReplyText.vue?vue&type=script&lang=js\"\nexport * from \"./MessageReplyText.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('span',_vm._b({staticClass:\"material-design-icon message-reply-text-icon\",attrs:{\"aria-hidden\":_vm.title ? null : true,\"aria-label\":_vm.title,\"role\":\"img\"},on:{\"click\":function($event){return _vm.$emit('click', $event)}}},'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\":\"M18,8H6V6H18V8M18,11H6V9H18V11M18,14H6V12H18V14M22,4A2,2 0 0,0 20,2H4A2,2 0 0,0 2,4V16A2,2 0 0,0 4,18H18L22,22V4Z\"}},[(_vm.title)?_c('title',[_vm._v(_vm._s(_vm.title))]):_vm._e()])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!-- TODO: Move to vue components -->\n\n<template>\n\t<span class=\"live-relative-timestamp\" :data-timestamp=\"timestamp * 1000\" :title=\"title\">{{ formatted }}</span>\n</template>\n\n<script>\nimport moment from '@nextcloud/moment'\n\nexport default {\n\tname: 'Moment',\n\tprops: {\n\t\ttimestamp: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\t\tformat: {\n\t\t\ttype: String,\n\t\t\tdefault: 'LLL',\n\t\t},\n\t},\n\tcomputed: {\n\t\ttitle() {\n\t\t\treturn moment.unix(this.timestamp).format(this.format)\n\t\t},\n\t\tformatted() {\n\t\t\treturn moment.unix(this.timestamp).fromNow()\n\t\t},\n\t},\n}\n</script>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Moment.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Moment.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Moment.vue?vue&type=template&id=57999be6\"\nimport script from \"./Moment.vue?vue&type=script&lang=js\"\nexport * from \"./Moment.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('span',{staticClass:\"live-relative-timestamp\",attrs:{\"data-timestamp\":_vm.timestamp * 1000,\"title\":_vm.title}},[_vm._v(_vm._s(_vm.formatted))])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { generateRemoteUrl } from '@nextcloud/router'\n\nconst getRootPath = function() {\n\treturn generateRemoteUrl('dav/comments')\n}\n\nexport { getRootPath }\n","/**\n * @copyright Copyright (c) 2021 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/**\n * @param {any} value -\n * @param {any} passes -\n */\nexport function decodeHtmlEntities(value, passes = 1) {\n\tconst parser = new DOMParser()\n\tlet decoded = value\n\tfor (let i = 0; i < passes; i++) {\n\t\tdecoded = parser.parseFromString(decoded, 'text/html').documentElement.textContent\n\t}\n\treturn decoded\n}\n","/**\n * @copyright Copyright (c) 2021 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { createClient } from 'webdav'\nimport { getRootPath } from '../utils/davUtils.js'\nimport { getRequestToken, onRequestTokenUpdate } from '@nextcloud/auth'\n\n// init webdav client\nconst client = createClient(getRootPath())\n\n// set CSRF token header\nconst setHeaders = (token) => {\n client.setHeaders({\n // Add this so the server knows it is an request from the browser\n 'X-Requested-With': 'XMLHttpRequest',\n // Inject user auth\n requesttoken: token ?? '',\n })\n}\n\n// refresh headers when request token changes\nonRequestTokenUpdate(setHeaders)\nsetHeaders(getRequestToken())\n\nexport default client\n","/**\n * @copyright Copyright (c) 2023 Lucas Azevedo <lhs_azevedo@hotmail.com>\n *\n * @author Lucas Azevedo <lhs_azevedo@hotmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { getLoggerBuilder } from '@nextcloud/logger'\n\nexport default getLoggerBuilder()\n\t.setApp('comments')\n\t.detectUser()\n\t.build()\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { showError, showUndo, TOAST_UNDO_TIMEOUT } from '@nextcloud/dialogs'\nimport NewComment from '../services/NewComment.js'\nimport DeleteComment from '../services/DeleteComment.js'\nimport EditComment from '../services/EditComment.js'\nimport logger from '../logger.js'\n\nexport default {\n\tprops: {\n\t\tid: {\n\t\t\ttype: Number,\n\t\t\tdefault: null,\n\t\t},\n\t\tmessage: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\tresourceId: {\n\t\t\ttype: [String, Number],\n\t\t\trequired: true,\n\t\t},\n\t\tresourceType: {\n\t\t\ttype: String,\n\t\t\tdefault: 'files',\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tdeleted: false,\n\t\t\tediting: false,\n\t\t\tloading: false,\n\t\t}\n\t},\n\n\tmethods: {\n\t\t// EDITION\n\t\tonEdit() {\n\t\t\tthis.editing = true\n\t\t},\n\t\tonEditCancel() {\n\t\t\tthis.editing = false\n\t\t\t// Restore original value\n\t\t\tthis.updateLocalMessage(this.message)\n\t\t},\n\t\tasync onEditComment(message) {\n\t\t\tthis.loading = true\n\t\t\ttry {\n\t\t\t\tawait EditComment(this.resourceType, this.resourceId, this.id, message)\n\t\t\t\tlogger.debug('Comment edited', { resourceType: this.resourceType, resourceId: this.resourceId, id: this.id, message })\n\t\t\t\tthis.$emit('update:message', message)\n\t\t\t\tthis.editing = false\n\t\t\t} catch (error) {\n\t\t\t\tshowError(t('comments', 'An error occurred while trying to edit the comment'))\n\t\t\t\tconsole.error(error)\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\n\t\t// DELETION\n\t\tonDeleteWithUndo() {\n\t\t\tthis.deleted = true\n\t\t\tconst timeOutDelete = setTimeout(this.onDelete, TOAST_UNDO_TIMEOUT)\n\t\t\tshowUndo(t('comments', 'Comment deleted'), () => {\n\t\t\t\tclearTimeout(timeOutDelete)\n\t\t\t\tthis.deleted = false\n\t\t\t})\n\t\t},\n\t\tasync onDelete() {\n\t\t\ttry {\n\t\t\t\tawait DeleteComment(this.resourceType, this.resourceId, this.id)\n\t\t\t\tlogger.debug('Comment deleted', { resourceType: this.resourceType, resourceId: this.resourceId, id: this.id })\n\t\t\t\tthis.$emit('delete', this.id)\n\t\t\t} catch (error) {\n\t\t\t\tshowError(t('comments', 'An error occurred while trying to delete the comment'))\n\t\t\t\tconsole.error(error)\n\t\t\t\tthis.deleted = false\n\t\t\t}\n\t\t},\n\n\t\t// CREATION\n\t\tasync onNewComment(message) {\n\t\t\tthis.loading = true\n\t\t\ttry {\n\t\t\t\tconst newComment = await NewComment(this.resourceType, this.resourceId, message)\n\t\t\t\tlogger.debug('New comment posted', { resourceType: this.resourceType, resourceId: this.resourceId, newComment })\n\t\t\t\tthis.$emit('new', newComment)\n\n\t\t\t\t// Clear old content\n\t\t\t\tthis.$emit('update:message', '')\n\t\t\t\tthis.localMessage = ''\n\t\t\t} catch (error) {\n\t\t\t\tshowError(t('comments', 'An error occurred while trying to create the comment'))\n\t\t\t\tconsole.error(error)\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\t},\n}\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport client from './DavClient.js'\n\n/**\n * Edit an existing comment\n *\n * @param {string} resourceType the resource type\n * @param {number} resourceId the resource ID\n * @param {number} commentId the comment iD\n * @param {string} message the message content\n */\nexport default async function(resourceType, resourceId, commentId, message) {\n\tconst commentPath = ['', resourceType, resourceId, commentId].join('/')\n\n\treturn await client.customRequest(commentPath, Object.assign({\n\t\tmethod: 'PROPPATCH',\n\t\tdata: `<?xml version=\"1.0\"?>\n\t\t\t<d:propertyupdate\n\t\t\t\txmlns:d=\"DAV:\"\n\t\t\t\txmlns:oc=\"http://owncloud.org/ns\">\n\t\t\t<d:set>\n\t\t\t\t<d:prop>\n\t\t\t\t\t<oc:message>${message}</oc:message>\n\t\t\t\t</d:prop>\n\t\t\t</d:set>\n\t\t\t</d:propertyupdate>`,\n\t}))\n}\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport client from './DavClient.js'\n\n/**\n * Delete a comment\n *\n * @param {string} resourceType the resource type\n * @param {number} resourceId the resource ID\n * @param {number} commentId the comment iD\n */\nexport default async function(resourceType, resourceId, commentId) {\n\tconst commentPath = ['', resourceType, resourceId, commentId].join('/')\n\n\t// Fetch newly created comment data\n\tawait client.deleteFile(commentPath)\n}\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { getRootPath } from '../utils/davUtils.js'\nimport { decodeHtmlEntities } from '../utils/decodeHtmlEntities.js'\nimport axios from '@nextcloud/axios'\nimport client from './DavClient.js'\n\n/**\n * Retrieve the comments list\n *\n * @param {string} resourceType the resource type\n * @param {number} resourceId the resource ID\n * @param {string} message the message\n * @return {object} the new comment\n */\nexport default async function(resourceType, resourceId, message) {\n\tconst resourcePath = ['', resourceType, resourceId].join('/')\n\n\tconst response = await axios.post(getRootPath() + resourcePath, {\n\t\tactorDisplayName: getCurrentUser().displayName,\n\t\tactorId: getCurrentUser().uid,\n\t\tactorType: 'users',\n\t\tcreationDateTime: (new Date()).toUTCString(),\n\t\tmessage,\n\t\tobjectType: resourceType,\n\t\tverb: 'comment',\n\t})\n\n\t// Retrieve comment id from resource location\n\tconst commentId = parseInt(response.headers['content-location'].split('/').pop())\n\tconst commentPath = resourcePath + '/' + commentId\n\n\t// Fetch newly created comment data\n\tconst comment = await client.stat(commentPath, {\n\t\tdetails: true,\n\t})\n\n\tconst props = comment.data.props\n\t// Decode twice to handle potentially double-encoded entities\n\t// FIXME Remove this once https://github.com/nextcloud/server/issues/29306\n\t// is resolved\n\tprops.actorDisplayName = decodeHtmlEntities(props.actorDisplayName, 2)\n\tprops.message = decodeHtmlEntities(props.message, 2)\n\n\treturn comment.data\n}\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comment.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comment.vue?vue&type=script&lang=js\"","<!--\n - @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n<template>\n\t<component :is=\"tag\"\n\t\tv-show=\"!deleted\"\n\t\t:class=\"{'comment--loading': loading}\"\n\t\tclass=\"comment\">\n\t\t<!-- Comment header toolbar -->\n\t\t<div class=\"comment__side\">\n\t\t\t<!-- Author -->\n\t\t\t<NcAvatar class=\"comment__avatar\"\n\t\t\t\t:display-name=\"actorDisplayName\"\n\t\t\t\t:user=\"actorId\"\n\t\t\t\t:size=\"32\" />\n\t\t</div>\n\t\t<div class=\"comment__body\">\n\t\t\t<div class=\"comment__header\">\n\t\t\t\t<span class=\"comment__author\">{{ actorDisplayName }}</span>\n\n\t\t\t\t<!-- Comment actions,\n\t\t\t\t\tshow if we have a message id and current user is author -->\n\t\t\t\t<NcActions v-if=\"isOwnComment && id && !loading\" class=\"comment__actions\">\n\t\t\t\t\t<template v-if=\"!editing\">\n\t\t\t\t\t\t<NcActionButton close-after-click\n\t\t\t\t\t\t\t@click=\"onEdit\">\n\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t<IconEdit :size=\"20\" />\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t{{ t('comments', 'Edit comment') }}\n\t\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t\t<NcActionSeparator />\n\t\t\t\t\t\t<NcActionButton close-after-click\n\t\t\t\t\t\t\t@click=\"onDeleteWithUndo\">\n\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t<IconDelete :size=\"20\" />\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t{{ t('comments', 'Delete comment') }}\n\t\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t</template>\n\n\t\t\t\t\t<NcActionButton v-else @click=\"onEditCancel\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<IconClose :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t{{ t('comments', 'Cancel edit') }}\n\t\t\t\t\t</NcActionButton>\n\t\t\t\t</NcActions>\n\n\t\t\t\t<!-- Show loading if we're editing or deleting, not on new ones -->\n\t\t\t\t<div v-if=\"id && loading\" class=\"comment_loading icon-loading-small\" />\n\n\t\t\t\t<!-- Relative time to the comment creation -->\n\t\t\t\t<Moment v-else-if=\"creationDateTime\" class=\"comment__timestamp\" :timestamp=\"timestamp\" />\n\t\t\t</div>\n\n\t\t\t<!-- Message editor -->\n\t\t\t<form v-if=\"editor || editing\" class=\"comment__editor\" @submit.prevent>\n\t\t\t\t<div class=\"comment__editor-group\">\n\t\t\t\t\t<NcRichContenteditable ref=\"editor\"\n\t\t\t\t\t\t:auto-complete=\"autoComplete\"\n\t\t\t\t\t\t:contenteditable=\"!loading\"\n\t\t\t\t\t\t:label=\"editor ? t('comments', 'New comment') : t('comments', 'Edit comment')\"\n\t\t\t\t\t\t:placeholder=\"t('comments', 'Write a comment …')\"\n\t\t\t\t\t\t:value=\"localMessage\"\n\t\t\t\t\t\t:user-data=\"userData\"\n\t\t\t\t\t\taria-describedby=\"tab-comments__editor-description\"\n\t\t\t\t\t\t@update:value=\"updateLocalMessage\"\n\t\t\t\t\t\t@submit=\"onSubmit\" />\n\t\t\t\t\t<div class=\"comment__submit\">\n\t\t\t\t\t\t<NcButton type=\"tertiary-no-background\"\n\t\t\t\t\t\t\tnative-type=\"submit\"\n\t\t\t\t\t\t\t:aria-label=\"t('comments', 'Post comment')\"\n\t\t\t\t\t\t\t:disabled=\"isEmptyMessage\"\n\t\t\t\t\t\t\t@click=\"onSubmit\">\n\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t<NcLoadingIcon v-if=\"loading\" />\n\t\t\t\t\t\t\t\t<IconArrowRight v-else :size=\"20\" />\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t</NcButton>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div id=\"tab-comments__editor-description\" class=\"comment__editor-description\">\n\t\t\t\t\t{{ t('comments', '@ for mentions, : for emoji, / for smart picker') }}\n\t\t\t\t</div>\n\t\t\t</form>\n\n\t\t\t<!-- Message content -->\n\t\t\t<!-- The html is escaped and sanitized before rendering -->\n\t\t\t<!-- eslint-disable vue/no-v-html-->\n\t\t\t<div v-else\n\t\t\t\t:class=\"{'comment__message--expanded': expanded}\"\n\t\t\t\tclass=\"comment__message\"\n\t\t\t\t@click=\"onExpand\"\n\t\t\t\tv-html=\"renderedContent\" />\n\t\t\t<!-- eslint-enable vue/no-v-html-->\n\t\t</div>\n\t</component>\n</template>\n\n<script>\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { translate as t } from '@nextcloud/l10n'\nimport moment from '@nextcloud/moment'\n\nimport NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton.js'\nimport NcActions from '@nextcloud/vue/dist/Components/NcActions.js'\nimport NcActionSeparator from '@nextcloud/vue/dist/Components/NcActionSeparator.js'\nimport NcAvatar from '@nextcloud/vue/dist/Components/NcAvatar.js'\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\nimport RichEditorMixin from '@nextcloud/vue/dist/Mixins/richEditor.js'\n\nimport IconArrowRight from 'vue-material-design-icons/ArrowRight.vue'\nimport IconClose from 'vue-material-design-icons/Close.vue'\nimport IconDelete from 'vue-material-design-icons/Delete.vue'\nimport IconEdit from 'vue-material-design-icons/Pencil.vue'\n\nimport Moment from './Moment.vue'\nimport CommentMixin from '../mixins/CommentMixin.js'\n\n// Dynamic loading\nconst NcRichContenteditable = () => import('@nextcloud/vue/dist/Components/NcRichContenteditable.js')\n\nexport default {\n\tname: 'Comment',\n\n\tcomponents: {\n\t\tNcActionButton,\n\t\tNcActions,\n\t\tNcActionSeparator,\n\t\tArrowRight,\n\t\tNcAvatar,\n\t\tNcButton,\n\t\tMoment,\n\t\tNcRichContenteditable,\n\t},\n\tmixins: [RichEditorMixin, CommentMixin],\n\n\tinheritAttrs: false,\n\n\tprops: {\n\t\tactorDisplayName: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tactorId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tcreationDateTime: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Force the editor display\n\t\t */\n\t\teditor: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Provide the autocompletion data\n\t\t */\n\t\tautoComplete: {\n\t\t\ttype: Function,\n\t\t\trequired: true,\n\t\t},\n\n\t\ttag: {\n\t\t\ttype: String,\n\t\t\tdefault: 'div',\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\texpanded: false,\n\t\t\t// Only change data locally and update the original\n\t\t\t// parent data when the request is sent and resolved\n\t\t\tlocalMessage: '',\n\t\t\tsubmitted: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\n\t\t/**\n\t\t * Is the current user the author of this comment\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisOwnComment() {\n\t\t\treturn getCurrentUser().uid === this.actorId\n\t\t},\n\n\t\t/**\n\t\t * Rendered content as html string\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\trenderedContent() {\n\t\t\tif (this.isEmptyMessage) {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\treturn this.renderContent(this.localMessage)\n\t\t},\n\n\t\tisEmptyMessage() {\n\t\t\treturn !this.localMessage || this.localMessage.trim() === ''\n\t\t},\n\n\t\ttimestamp() {\n\t\t\t// seconds, not milliseconds\n\t\t\treturn parseInt(moment(this.creationDateTime).format('x'), 10) / 1000\n\t\t},\n\t},\n\n\twatch: {\n\t\t// If the data change, update the local value\n\t\tmessage(message) {\n\t\t\tthis.updateLocalMessage(message)\n\t\t},\n\t},\n\n\tbeforeMount() {\n\t\t// Init localMessage\n\t\tthis.updateLocalMessage(this.message)\n\t},\n\n\tmethods: {\n\t\tt,\n\n\t\t/**\n\t\t * Update local Message on outer change\n\t\t *\n\t\t * @param {string} message the message to set\n\t\t */\n\t\tupdateLocalMessage(message) {\n\t\t\tthis.localMessage = message.toString()\n\t\t\tthis.submitted = false\n\t\t},\n\n\t\t/**\n\t\t * Dispatch message between edit and create\n\t\t */\n\t\tonSubmit() {\n\t\t\t// Do not submit if message is empty\n\t\t\tif (this.localMessage.trim() === '') {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (this.editor) {\n\t\t\t\tthis.onNewComment(this.localMessage.trim())\n\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t// Focus the editor again\n\t\t\t\t\tthis.$refs.editor.$el.focus()\n\t\t\t\t})\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.onEditComment(this.localMessage.trim())\n\t\t},\n\n\t\tonExpand() {\n\t\t\tthis.expanded = true\n\t\t},\n\t},\n\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@use \"sass:math\";\n\n$comment-padding: 10px;\n\n.comment {\n\tdisplay: flex;\n\tgap: 8px;\n\tpadding: 5px $comment-padding;\n\n\t&__side {\n\t\tdisplay: flex;\n\t\talign-items: flex-start;\n\t\tpadding-top: 6px;\n\t}\n\n\t&__body {\n\t\tdisplay: flex;\n\t\tflex-grow: 1;\n\t\tflex-direction: column;\n\t}\n\n\t&__header {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tmin-height: 44px;\n\t}\n\n\t&__actions {\n\t\tmargin-left: $comment-padding !important;\n\t}\n\n\t&__author {\n\t\toverflow: hidden;\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n\n\t&_loading,\n\t&__timestamp {\n\t\tmargin-left: auto;\n\t\ttext-align: right;\n\t\twhite-space: nowrap;\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n\n\t&__editor-group {\n\t\tposition: relative;\n\t}\n\n\t&__editor-description {\n\t\tcolor: var(--color-text-maxcontrast);\n\t\tpadding-block: var(--default-grid-baseline);\n\t}\n\n\t&__submit {\n\t\tposition: absolute !important;\n\t\tbottom: 0;\n\t\tright: 0;\n\t}\n\n\t&__message {\n\t\twhite-space: pre-wrap;\n\t\tword-break: break-word;\n\t\tmax-height: 70px;\n\t\toverflow: hidden;\n\t\tmargin-top: -6px;\n\t\t&--expanded {\n\t\t\tmax-height: none;\n\t\t\toverflow: visible;\n\t\t}\n\t}\n}\n\n.rich-contenteditable__input {\n\tmin-height: 44px;\n\tmargin: 0;\n\tpadding: $comment-padding;\n}\n\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comment.vue?vue&type=style&index=0&id=47c0e61c&prod&lang=scss&scoped=true\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comment.vue?vue&type=style&index=0&id=47c0e61c&prod&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Comment.vue?vue&type=template&id=47c0e61c&scoped=true\"\nimport script from \"./Comment.vue?vue&type=script&lang=js\"\nexport * from \"./Comment.vue?vue&type=script&lang=js\"\nimport style0 from \"./Comment.vue?vue&type=style&index=0&id=47c0e61c&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"47c0e61c\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c(_vm.tag,{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.deleted),expression:\"!deleted\"}],tag:\"component\",staticClass:\"comment\",class:{'comment--loading': _vm.loading}},[_c('div',{staticClass:\"comment__side\"},[_c('NcAvatar',{staticClass:\"comment__avatar\",attrs:{\"display-name\":_vm.actorDisplayName,\"user\":_vm.actorId,\"size\":32}})],1),_vm._v(\" \"),_c('div',{staticClass:\"comment__body\"},[_c('div',{staticClass:\"comment__header\"},[_c('span',{staticClass:\"comment__author\"},[_vm._v(_vm._s(_vm.actorDisplayName))]),_vm._v(\" \"),(_vm.isOwnComment && _vm.id && !_vm.loading)?_c('NcActions',{staticClass:\"comment__actions\"},[(!_vm.editing)?[_c('NcActionButton',{attrs:{\"close-after-click\":\"\"},on:{\"click\":_vm.onEdit},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('IconEdit',{attrs:{\"size\":20}})]},proxy:true}],null,false,649782975)},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('comments', 'Edit comment'))+\"\\n\\t\\t\\t\\t\\t\")]),_vm._v(\" \"),_c('NcActionSeparator'),_vm._v(\" \"),_c('NcActionButton',{attrs:{\"close-after-click\":\"\"},on:{\"click\":_vm.onDeleteWithUndo},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('IconDelete',{attrs:{\"size\":20}})]},proxy:true}],null,false,881161434)},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('comments', 'Delete comment'))+\"\\n\\t\\t\\t\\t\\t\")])]:_c('NcActionButton',{on:{\"click\":_vm.onEditCancel},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('IconClose',{attrs:{\"size\":20}})]},proxy:true}],null,false,2888946197)},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('comments', 'Cancel edit'))+\"\\n\\t\\t\\t\\t\")])],2):_vm._e(),_vm._v(\" \"),(_vm.id && _vm.loading)?_c('div',{staticClass:\"comment_loading icon-loading-small\"}):(_vm.creationDateTime)?_c('Moment',{staticClass:\"comment__timestamp\",attrs:{\"timestamp\":_vm.timestamp}}):_vm._e()],1),_vm._v(\" \"),(_vm.editor || _vm.editing)?_c('form',{staticClass:\"comment__editor\",on:{\"submit\":function($event){$event.preventDefault();}}},[_c('div',{staticClass:\"comment__editor-group\"},[_c('NcRichContenteditable',{ref:\"editor\",attrs:{\"auto-complete\":_vm.autoComplete,\"contenteditable\":!_vm.loading,\"label\":_vm.editor ? _vm.t('comments', 'New comment') : _vm.t('comments', 'Edit comment'),\"placeholder\":_vm.t('comments', 'Write a comment …'),\"value\":_vm.localMessage,\"user-data\":_vm.userData,\"aria-describedby\":\"tab-comments__editor-description\"},on:{\"update:value\":_vm.updateLocalMessage,\"submit\":_vm.onSubmit}}),_vm._v(\" \"),_c('div',{staticClass:\"comment__submit\"},[_c('NcButton',{attrs:{\"type\":\"tertiary-no-background\",\"native-type\":\"submit\",\"aria-label\":_vm.t('comments', 'Post comment'),\"disabled\":_vm.isEmptyMessage},on:{\"click\":_vm.onSubmit},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [(_vm.loading)?_c('NcLoadingIcon'):_c('IconArrowRight',{attrs:{\"size\":20}})]},proxy:true}],null,false,758946661)})],1)],1),_vm._v(\" \"),_c('div',{staticClass:\"comment__editor-description\",attrs:{\"id\":\"tab-comments__editor-description\"}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('comments', '@ for mentions, : for emoji, / for smart picker'))+\"\\n\\t\\t\\t\")])]):_c('div',{staticClass:\"comment__message\",class:{'comment__message--expanded': _vm.expanded},domProps:{\"innerHTML\":_vm._s(_vm.renderedContent)},on:{\"click\":_vm.onExpand}})])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","// translate the various posix character classes into unicode properties\n// this works across all unicode locales\n// { <posix class>: [<translation>, /u flag required, negated]\nconst posixClasses = {\n '[:alnum:]': ['\\\\p{L}\\\\p{Nl}\\\\p{Nd}', true],\n '[:alpha:]': ['\\\\p{L}\\\\p{Nl}', true],\n '[:ascii:]': ['\\\\x' + '00-\\\\x' + '7f', false],\n '[:blank:]': ['\\\\p{Zs}\\\\t', true],\n '[:cntrl:]': ['\\\\p{Cc}', true],\n '[:digit:]': ['\\\\p{Nd}', true],\n '[:graph:]': ['\\\\p{Z}\\\\p{C}', true, true],\n '[:lower:]': ['\\\\p{Ll}', true],\n '[:print:]': ['\\\\p{C}', true],\n '[:punct:]': ['\\\\p{P}', true],\n '[:space:]': ['\\\\p{Z}\\\\t\\\\r\\\\n\\\\v\\\\f', true],\n '[:upper:]': ['\\\\p{Lu}', true],\n '[:word:]': ['\\\\p{L}\\\\p{Nl}\\\\p{Nd}\\\\p{Pc}', true],\n '[:xdigit:]': ['A-Fa-f0-9', false],\n};\n// only need to escape a few things inside of brace expressions\n// escapes: [ \\ ] -\nconst braceEscape = (s) => s.replace(/[[\\]\\\\-]/g, '\\\\$&');\n// escape all regexp magic characters\nconst regexpEscape = (s) => s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n// everything has already been escaped, we just have to join\nconst rangesToString = (ranges) => ranges.join('');\n// takes a glob string at a posix brace expression, and returns\n// an equivalent regular expression source, and boolean indicating\n// whether the /u flag needs to be applied, and the number of chars\n// consumed to parse the character class.\n// This also removes out of order ranges, and returns ($.) if the\n// entire class just no good.\nexport const parseClass = (glob, position) => {\n const pos = position;\n /* c8 ignore start */\n if (glob.charAt(pos) !== '[') {\n throw new Error('not in a brace expression');\n }\n /* c8 ignore stop */\n const ranges = [];\n const negs = [];\n let i = pos + 1;\n let sawStart = false;\n let uflag = false;\n let escaping = false;\n let negate = false;\n let endPos = pos;\n let rangeStart = '';\n WHILE: while (i < glob.length) {\n const c = glob.charAt(i);\n if ((c === '!' || c === '^') && i === pos + 1) {\n negate = true;\n i++;\n continue;\n }\n if (c === ']' && sawStart && !escaping) {\n endPos = i + 1;\n break;\n }\n sawStart = true;\n if (c === '\\\\') {\n if (!escaping) {\n escaping = true;\n i++;\n continue;\n }\n // escaped \\ char, fall through and treat like normal char\n }\n if (c === '[' && !escaping) {\n // either a posix class, a collation equivalent, or just a [\n for (const [cls, [unip, u, neg]] of Object.entries(posixClasses)) {\n if (glob.startsWith(cls, i)) {\n // invalid, [a-[] is fine, but not [a-[:alpha]]\n if (rangeStart) {\n return ['$.', false, glob.length - pos, true];\n }\n i += cls.length;\n if (neg)\n negs.push(unip);\n else\n ranges.push(unip);\n uflag = uflag || u;\n continue WHILE;\n }\n }\n }\n // now it's just a normal character, effectively\n escaping = false;\n if (rangeStart) {\n // throw this range away if it's not valid, but others\n // can still match.\n if (c > rangeStart) {\n ranges.push(braceEscape(rangeStart) + '-' + braceEscape(c));\n }\n else if (c === rangeStart) {\n ranges.push(braceEscape(c));\n }\n rangeStart = '';\n i++;\n continue;\n }\n // now might be the start of a range.\n // can be either c-d or c-] or c<more...>] or c] at this point\n if (glob.startsWith('-]', i + 1)) {\n ranges.push(braceEscape(c + '-'));\n i += 2;\n continue;\n }\n if (glob.startsWith('-', i + 1)) {\n rangeStart = c;\n i += 2;\n continue;\n }\n // not the start of a range, just a single character\n ranges.push(braceEscape(c));\n i++;\n }\n if (endPos < i) {\n // didn't see the end of the class, not a valid class,\n // but might still be valid as a literal match.\n return ['', false, 0, false];\n }\n // if we got no ranges and no negates, then we have a range that\n // cannot possibly match anything, and that poisons the whole glob\n if (!ranges.length && !negs.length) {\n return ['$.', false, glob.length - pos, true];\n }\n // if we got one positive range, and it's a single character, then that's\n // not actually a magic pattern, it's just that one literal character.\n // we should not treat that as \"magic\", we should just return the literal\n // character. [_] is a perfectly valid way to escape glob magic chars.\n if (negs.length === 0 &&\n ranges.length === 1 &&\n /^\\\\?.$/.test(ranges[0]) &&\n !negate) {\n const r = ranges[0].length === 2 ? ranges[0].slice(-1) : ranges[0];\n return [regexpEscape(r), false, endPos - pos, false];\n }\n const sranges = '[' + (negate ? '^' : '') + rangesToString(ranges) + ']';\n const snegs = '[' + (negate ? '' : '^') + rangesToString(negs) + ']';\n const comb = ranges.length && negs.length\n ? '(' + sranges + '|' + snegs + ')'\n : ranges.length\n ? sranges\n : snegs;\n return [comb, uflag, endPos - pos, true];\n};\n//# sourceMappingURL=brace-expressions.js.map","import expand from 'brace-expansion';\nimport { parseClass } from './brace-expressions.js';\nimport { escape } from './escape.js';\nimport { unescape } from './unescape.js';\nexport const minimatch = (p, pattern, options = {}) => {\n assertValidPattern(pattern);\n // shortcut: comments match nothing.\n if (!options.nocomment && pattern.charAt(0) === '#') {\n return false;\n }\n return new Minimatch(pattern, options).match(p);\n};\nexport default minimatch;\n// Optimized checking for the most common glob patterns.\nconst starDotExtRE = /^\\*+([^+@!?\\*\\[\\(]*)$/;\nconst starDotExtTest = (ext) => (f) => !f.startsWith('.') && f.endsWith(ext);\nconst starDotExtTestDot = (ext) => (f) => f.endsWith(ext);\nconst starDotExtTestNocase = (ext) => {\n ext = ext.toLowerCase();\n return (f) => !f.startsWith('.') && f.toLowerCase().endsWith(ext);\n};\nconst starDotExtTestNocaseDot = (ext) => {\n ext = ext.toLowerCase();\n return (f) => f.toLowerCase().endsWith(ext);\n};\nconst starDotStarRE = /^\\*+\\.\\*+$/;\nconst starDotStarTest = (f) => !f.startsWith('.') && f.includes('.');\nconst starDotStarTestDot = (f) => f !== '.' && f !== '..' && f.includes('.');\nconst dotStarRE = /^\\.\\*+$/;\nconst dotStarTest = (f) => f !== '.' && f !== '..' && f.startsWith('.');\nconst starRE = /^\\*+$/;\nconst starTest = (f) => f.length !== 0 && !f.startsWith('.');\nconst starTestDot = (f) => f.length !== 0 && f !== '.' && f !== '..';\nconst qmarksRE = /^\\?+([^+@!?\\*\\[\\(]*)?$/;\nconst qmarksTestNocase = ([$0, ext = '']) => {\n const noext = qmarksTestNoExt([$0]);\n if (!ext)\n return noext;\n ext = ext.toLowerCase();\n return (f) => noext(f) && f.toLowerCase().endsWith(ext);\n};\nconst qmarksTestNocaseDot = ([$0, ext = '']) => {\n const noext = qmarksTestNoExtDot([$0]);\n if (!ext)\n return noext;\n ext = ext.toLowerCase();\n return (f) => noext(f) && f.toLowerCase().endsWith(ext);\n};\nconst qmarksTestDot = ([$0, ext = '']) => {\n const noext = qmarksTestNoExtDot([$0]);\n return !ext ? noext : (f) => noext(f) && f.endsWith(ext);\n};\nconst qmarksTest = ([$0, ext = '']) => {\n const noext = qmarksTestNoExt([$0]);\n return !ext ? noext : (f) => noext(f) && f.endsWith(ext);\n};\nconst qmarksTestNoExt = ([$0]) => {\n const len = $0.length;\n return (f) => f.length === len && !f.startsWith('.');\n};\nconst qmarksTestNoExtDot = ([$0]) => {\n const len = $0.length;\n return (f) => f.length === len && f !== '.' && f !== '..';\n};\n/* c8 ignore start */\nconst defaultPlatform = (typeof process === 'object' && process\n ? (typeof process.env === 'object' &&\n process.env &&\n process.env.__MINIMATCH_TESTING_PLATFORM__) ||\n process.platform\n : 'posix');\nconst path = {\n win32: { sep: '\\\\' },\n posix: { sep: '/' },\n};\n/* c8 ignore stop */\nexport const sep = defaultPlatform === 'win32' ? path.win32.sep : path.posix.sep;\nminimatch.sep = sep;\nexport const GLOBSTAR = Symbol('globstar **');\nminimatch.GLOBSTAR = GLOBSTAR;\nconst plTypes = {\n '!': { open: '(?:(?!(?:', close: '))[^/]*?)' },\n '?': { open: '(?:', close: ')?' },\n '+': { open: '(?:', close: ')+' },\n '*': { open: '(?:', close: ')*' },\n '@': { open: '(?:', close: ')' },\n};\n// any single thing other than /\n// don't need to escape / when using new RegExp()\nconst qmark = '[^/]';\n// * => any number of characters\nconst star = qmark + '*?';\n// ** when dots are allowed. Anything goes, except .. and .\n// not (^ or / followed by one or two dots followed by $ or /),\n// followed by anything, any number of times.\nconst twoStarDot = '(?:(?!(?:\\\\/|^)(?:\\\\.{1,2})($|\\\\/)).)*?';\n// not a ^ or / followed by a dot,\n// followed by anything, any number of times.\nconst twoStarNoDot = '(?:(?!(?:\\\\/|^)\\\\.).)*?';\n// \"abc\" -> { a:true, b:true, c:true }\nconst charSet = (s) => s.split('').reduce((set, c) => {\n set[c] = true;\n return set;\n}, {});\n// characters that need to be escaped in RegExp.\nconst reSpecials = charSet('().*{}+?[]^$\\\\!');\n// characters that indicate we have to add the pattern start\nconst addPatternStartSet = charSet('[.(');\nexport const filter = (pattern, options = {}) => (p) => minimatch(p, pattern, options);\nminimatch.filter = filter;\nconst ext = (a, b = {}) => Object.assign({}, a, b);\nexport const defaults = (def) => {\n if (!def || typeof def !== 'object' || !Object.keys(def).length) {\n return minimatch;\n }\n const orig = minimatch;\n const m = (p, pattern, options = {}) => orig(p, pattern, ext(def, options));\n return Object.assign(m, {\n Minimatch: class Minimatch extends orig.Minimatch {\n constructor(pattern, options = {}) {\n super(pattern, ext(def, options));\n }\n static defaults(options) {\n return orig.defaults(ext(def, options)).Minimatch;\n }\n },\n unescape: (s, options = {}) => orig.unescape(s, ext(def, options)),\n escape: (s, options = {}) => orig.escape(s, ext(def, options)),\n filter: (pattern, options = {}) => orig.filter(pattern, ext(def, options)),\n defaults: (options) => orig.defaults(ext(def, options)),\n makeRe: (pattern, options = {}) => orig.makeRe(pattern, ext(def, options)),\n braceExpand: (pattern, options = {}) => orig.braceExpand(pattern, ext(def, options)),\n match: (list, pattern, options = {}) => orig.match(list, pattern, ext(def, options)),\n sep: orig.sep,\n GLOBSTAR: GLOBSTAR,\n });\n};\nminimatch.defaults = defaults;\n// Brace expansion:\n// a{b,c}d -> abd acd\n// a{b,}c -> abc ac\n// a{0..3}d -> a0d a1d a2d a3d\n// a{b,c{d,e}f}g -> abg acdfg acefg\n// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg\n//\n// Invalid sets are not expanded.\n// a{2..}b -> a{2..}b\n// a{b}c -> a{b}c\nexport const braceExpand = (pattern, options = {}) => {\n assertValidPattern(pattern);\n // Thanks to Yeting Li <https://github.com/yetingli> for\n // improving this regexp to avoid a ReDOS vulnerability.\n if (options.nobrace || !/\\{(?:(?!\\{).)*\\}/.test(pattern)) {\n // shortcut. no need to expand.\n return [pattern];\n }\n return expand(pattern);\n};\nminimatch.braceExpand = braceExpand;\nconst MAX_PATTERN_LENGTH = 1024 * 64;\nconst assertValidPattern = (pattern) => {\n if (typeof pattern !== 'string') {\n throw new TypeError('invalid pattern');\n }\n if (pattern.length > MAX_PATTERN_LENGTH) {\n throw new TypeError('pattern is too long');\n }\n};\n// parse a component of the expanded set.\n// At this point, no pattern may contain \"/\" in it\n// so we're going to return a 2d array, where each entry is the full\n// pattern, split on '/', and then turned into a regular expression.\n// A regexp is made at the end which joins each array with an\n// escaped /, and another full one which joins each regexp with |.\n//\n// Following the lead of Bash 4.1, note that \"**\" only has special meaning\n// when it is the *only* thing in a path portion. Otherwise, any series\n// of * is equivalent to a single *. Globstar behavior is enabled by\n// default, and can be disabled by setting options.noglobstar.\nexport const makeRe = (pattern, options = {}) => new Minimatch(pattern, options).makeRe();\nminimatch.makeRe = makeRe;\nexport const match = (list, pattern, options = {}) => {\n const mm = new Minimatch(pattern, options);\n list = list.filter(f => mm.match(f));\n if (mm.options.nonull && !list.length) {\n list.push(pattern);\n }\n return list;\n};\nminimatch.match = match;\n// replace stuff like \\* with *\nconst globUnescape = (s) => s.replace(/\\\\(.)/g, '$1');\nconst globMagic = /[?*]|[+@!]\\(.*?\\)|\\[|\\]/;\nconst regExpEscape = (s) => s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\nexport class Minimatch {\n options;\n set;\n pattern;\n windowsPathsNoEscape;\n nonegate;\n negate;\n comment;\n empty;\n preserveMultipleSlashes;\n partial;\n globSet;\n globParts;\n nocase;\n isWindows;\n platform;\n windowsNoMagicRoot;\n regexp;\n constructor(pattern, options = {}) {\n assertValidPattern(pattern);\n options = options || {};\n this.options = options;\n this.pattern = pattern;\n this.platform = options.platform || defaultPlatform;\n this.isWindows = this.platform === 'win32';\n this.windowsPathsNoEscape =\n !!options.windowsPathsNoEscape || options.allowWindowsEscape === false;\n if (this.windowsPathsNoEscape) {\n this.pattern = this.pattern.replace(/\\\\/g, '/');\n }\n this.preserveMultipleSlashes = !!options.preserveMultipleSlashes;\n this.regexp = null;\n this.negate = false;\n this.nonegate = !!options.nonegate;\n this.comment = false;\n this.empty = false;\n this.partial = !!options.partial;\n this.nocase = !!this.options.nocase;\n this.windowsNoMagicRoot =\n options.windowsNoMagicRoot !== undefined\n ? options.windowsNoMagicRoot\n : !!(this.isWindows && this.nocase);\n this.globSet = [];\n this.globParts = [];\n this.set = [];\n // make the set of regexps etc.\n this.make();\n }\n hasMagic() {\n if (this.options.magicalBraces && this.set.length > 1) {\n return true;\n }\n for (const pattern of this.set) {\n for (const part of pattern) {\n if (typeof part !== 'string')\n return true;\n }\n }\n return false;\n }\n debug(..._) { }\n make() {\n const pattern = this.pattern;\n const options = this.options;\n // empty patterns and comments match nothing.\n if (!options.nocomment && pattern.charAt(0) === '#') {\n this.comment = true;\n return;\n }\n if (!pattern) {\n this.empty = true;\n return;\n }\n // step 1: figure out negation, etc.\n this.parseNegate();\n // step 2: expand braces\n this.globSet = [...new Set(this.braceExpand())];\n if (options.debug) {\n this.debug = (...args) => console.error(...args);\n }\n this.debug(this.pattern, this.globSet);\n // step 3: now we have a set, so turn each one into a series of\n // path-portion matching patterns.\n // These will be regexps, except in the case of \"**\", which is\n // set to the GLOBSTAR object for globstar behavior,\n // and will not contain any / characters\n //\n // First, we preprocess to make the glob pattern sets a bit simpler\n // and deduped. There are some perf-killing patterns that can cause\n // problems with a glob walk, but we can simplify them down a bit.\n const rawGlobParts = this.globSet.map(s => this.slashSplit(s));\n this.globParts = this.preprocess(rawGlobParts);\n this.debug(this.pattern, this.globParts);\n // glob --> regexps\n let set = this.globParts.map((s, _, __) => {\n if (this.isWindows && this.windowsNoMagicRoot) {\n // check if it's a drive or unc path.\n const isUNC = s[0] === '' &&\n s[1] === '' &&\n (s[2] === '?' || !globMagic.test(s[2])) &&\n !globMagic.test(s[3]);\n const isDrive = /^[a-z]:/i.test(s[0]);\n if (isUNC) {\n return [...s.slice(0, 4), ...s.slice(4).map(ss => this.parse(ss))];\n }\n else if (isDrive) {\n return [s[0], ...s.slice(1).map(ss => this.parse(ss))];\n }\n }\n return s.map(ss => this.parse(ss));\n });\n this.debug(this.pattern, set);\n // filter out everything that didn't compile properly.\n this.set = set.filter(s => s.indexOf(false) === -1);\n // do not treat the ? in UNC paths as magic\n if (this.isWindows) {\n for (let i = 0; i < this.set.length; i++) {\n const p = this.set[i];\n if (p[0] === '' &&\n p[1] === '' &&\n this.globParts[i][2] === '?' &&\n typeof p[3] === 'string' &&\n /^[a-z]:$/i.test(p[3])) {\n p[2] = '?';\n }\n }\n }\n this.debug(this.pattern, this.set);\n }\n // various transforms to equivalent pattern sets that are\n // faster to process in a filesystem walk. The goal is to\n // eliminate what we can, and push all ** patterns as far\n // to the right as possible, even if it increases the number\n // of patterns that we have to process.\n preprocess(globParts) {\n // if we're not in globstar mode, then turn all ** into *\n if (this.options.noglobstar) {\n for (let i = 0; i < globParts.length; i++) {\n for (let j = 0; j < globParts[i].length; j++) {\n if (globParts[i][j] === '**') {\n globParts[i][j] = '*';\n }\n }\n }\n }\n const { optimizationLevel = 1 } = this.options;\n if (optimizationLevel >= 2) {\n // aggressive optimization for the purpose of fs walking\n globParts = this.firstPhasePreProcess(globParts);\n globParts = this.secondPhasePreProcess(globParts);\n }\n else if (optimizationLevel >= 1) {\n // just basic optimizations to remove some .. parts\n globParts = this.levelOneOptimize(globParts);\n }\n else {\n globParts = this.adjascentGlobstarOptimize(globParts);\n }\n return globParts;\n }\n // just get rid of adjascent ** portions\n adjascentGlobstarOptimize(globParts) {\n return globParts.map(parts => {\n let gs = -1;\n while (-1 !== (gs = parts.indexOf('**', gs + 1))) {\n let i = gs;\n while (parts[i + 1] === '**') {\n i++;\n }\n if (i !== gs) {\n parts.splice(gs, i - gs);\n }\n }\n return parts;\n });\n }\n // get rid of adjascent ** and resolve .. portions\n levelOneOptimize(globParts) {\n return globParts.map(parts => {\n parts = parts.reduce((set, part) => {\n const prev = set[set.length - 1];\n if (part === '**' && prev === '**') {\n return set;\n }\n if (part === '..') {\n if (prev && prev !== '..' && prev !== '.' && prev !== '**') {\n set.pop();\n return set;\n }\n }\n set.push(part);\n return set;\n }, []);\n return parts.length === 0 ? [''] : parts;\n });\n }\n levelTwoFileOptimize(parts) {\n if (!Array.isArray(parts)) {\n parts = this.slashSplit(parts);\n }\n let didSomething = false;\n do {\n didSomething = false;\n // <pre>/<e>/<rest> -> <pre>/<rest>\n if (!this.preserveMultipleSlashes) {\n for (let i = 1; i < parts.length - 1; i++) {\n const p = parts[i];\n // don't squeeze out UNC patterns\n if (i === 1 && p === '' && parts[0] === '')\n continue;\n if (p === '.' || p === '') {\n didSomething = true;\n parts.splice(i, 1);\n i--;\n }\n }\n if (parts[0] === '.' &&\n parts.length === 2 &&\n (parts[1] === '.' || parts[1] === '')) {\n didSomething = true;\n parts.pop();\n }\n }\n // <pre>/<p>/../<rest> -> <pre>/<rest>\n let dd = 0;\n while (-1 !== (dd = parts.indexOf('..', dd + 1))) {\n const p = parts[dd - 1];\n if (p && p !== '.' && p !== '..' && p !== '**') {\n didSomething = true;\n parts.splice(dd - 1, 2);\n dd -= 2;\n }\n }\n } while (didSomething);\n return parts.length === 0 ? [''] : parts;\n }\n // First phase: single-pattern processing\n // <pre> is 1 or more portions\n // <rest> is 1 or more portions\n // <p> is any portion other than ., .., '', or **\n // <e> is . or ''\n //\n // **/.. is *brutal* for filesystem walking performance, because\n // it effectively resets the recursive walk each time it occurs,\n // and ** cannot be reduced out by a .. pattern part like a regexp\n // or most strings (other than .., ., and '') can be.\n //\n // <pre>/**/../<p>/<p>/<rest> -> {<pre>/../<p>/<p>/<rest>,<pre>/**/<p>/<p>/<rest>}\n // <pre>/<e>/<rest> -> <pre>/<rest>\n // <pre>/<p>/../<rest> -> <pre>/<rest>\n // **/**/<rest> -> **/<rest>\n //\n // **/*/<rest> -> */**/<rest> <== not valid because ** doesn't follow\n // this WOULD be allowed if ** did follow symlinks, or * didn't\n firstPhasePreProcess(globParts) {\n let didSomething = false;\n do {\n didSomething = false;\n // <pre>/**/../<p>/<p>/<rest> -> {<pre>/../<p>/<p>/<rest>,<pre>/**/<p>/<p>/<rest>}\n for (let parts of globParts) {\n let gs = -1;\n while (-1 !== (gs = parts.indexOf('**', gs + 1))) {\n let gss = gs;\n while (parts[gss + 1] === '**') {\n // <pre>/**/**/<rest> -> <pre>/**/<rest>\n gss++;\n }\n // eg, if gs is 2 and gss is 4, that means we have 3 **\n // parts, and can remove 2 of them.\n if (gss > gs) {\n parts.splice(gs + 1, gss - gs);\n }\n let next = parts[gs + 1];\n const p = parts[gs + 2];\n const p2 = parts[gs + 3];\n if (next !== '..')\n continue;\n if (!p ||\n p === '.' ||\n p === '..' ||\n !p2 ||\n p2 === '.' ||\n p2 === '..') {\n continue;\n }\n didSomething = true;\n // edit parts in place, and push the new one\n parts.splice(gs, 1);\n const other = parts.slice(0);\n other[gs] = '**';\n globParts.push(other);\n gs--;\n }\n // <pre>/<e>/<rest> -> <pre>/<rest>\n if (!this.preserveMultipleSlashes) {\n for (let i = 1; i < parts.length - 1; i++) {\n const p = parts[i];\n // don't squeeze out UNC patterns\n if (i === 1 && p === '' && parts[0] === '')\n continue;\n if (p === '.' || p === '') {\n didSomething = true;\n parts.splice(i, 1);\n i--;\n }\n }\n if (parts[0] === '.' &&\n parts.length === 2 &&\n (parts[1] === '.' || parts[1] === '')) {\n didSomething = true;\n parts.pop();\n }\n }\n // <pre>/<p>/../<rest> -> <pre>/<rest>\n let dd = 0;\n while (-1 !== (dd = parts.indexOf('..', dd + 1))) {\n const p = parts[dd - 1];\n if (p && p !== '.' && p !== '..' && p !== '**') {\n didSomething = true;\n const needDot = dd === 1 && parts[dd + 1] === '**';\n const splin = needDot ? ['.'] : [];\n parts.splice(dd - 1, 2, ...splin);\n if (parts.length === 0)\n parts.push('');\n dd -= 2;\n }\n }\n }\n } while (didSomething);\n return globParts;\n }\n // second phase: multi-pattern dedupes\n // {<pre>/*/<rest>,<pre>/<p>/<rest>} -> <pre>/*/<rest>\n // {<pre>/<rest>,<pre>/<rest>} -> <pre>/<rest>\n // {<pre>/**/<rest>,<pre>/<rest>} -> <pre>/**/<rest>\n //\n // {<pre>/**/<rest>,<pre>/**/<p>/<rest>} -> <pre>/**/<rest>\n // ^-- not valid because ** doens't follow symlinks\n secondPhasePreProcess(globParts) {\n for (let i = 0; i < globParts.length - 1; i++) {\n for (let j = i + 1; j < globParts.length; j++) {\n const matched = this.partsMatch(globParts[i], globParts[j], !this.preserveMultipleSlashes);\n if (!matched)\n continue;\n globParts[i] = matched;\n globParts[j] = [];\n }\n }\n return globParts.filter(gs => gs.length);\n }\n partsMatch(a, b, emptyGSMatch = false) {\n let ai = 0;\n let bi = 0;\n let result = [];\n let which = '';\n while (ai < a.length && bi < b.length) {\n if (a[ai] === b[bi]) {\n result.push(which === 'b' ? b[bi] : a[ai]);\n ai++;\n bi++;\n }\n else if (emptyGSMatch && a[ai] === '**' && b[bi] === a[ai + 1]) {\n result.push(a[ai]);\n ai++;\n }\n else if (emptyGSMatch && b[bi] === '**' && a[ai] === b[bi + 1]) {\n result.push(b[bi]);\n bi++;\n }\n else if (a[ai] === '*' &&\n b[bi] &&\n (this.options.dot || !b[bi].startsWith('.')) &&\n b[bi] !== '**') {\n if (which === 'b')\n return false;\n which = 'a';\n result.push(a[ai]);\n ai++;\n bi++;\n }\n else if (b[bi] === '*' &&\n a[ai] &&\n (this.options.dot || !a[ai].startsWith('.')) &&\n a[ai] !== '**') {\n if (which === 'a')\n return false;\n which = 'b';\n result.push(b[bi]);\n ai++;\n bi++;\n }\n else {\n return false;\n }\n }\n // if we fall out of the loop, it means they two are identical\n // as long as their lengths match\n return a.length === b.length && result;\n }\n parseNegate() {\n if (this.nonegate)\n return;\n const pattern = this.pattern;\n let negate = false;\n let negateOffset = 0;\n for (let i = 0; i < pattern.length && pattern.charAt(i) === '!'; i++) {\n negate = !negate;\n negateOffset++;\n }\n if (negateOffset)\n this.pattern = pattern.slice(negateOffset);\n this.negate = negate;\n }\n // set partial to true to test if, for example,\n // \"/a/b\" matches the start of \"/*/b/*/d\"\n // Partial means, if you run out of file before you run\n // out of pattern, then that's fine, as long as all\n // the parts match.\n matchOne(file, pattern, partial = false) {\n const options = this.options;\n // a UNC pattern like //?/c:/* can match a path like c:/x\n // and vice versa\n if (this.isWindows) {\n const fileUNC = file[0] === '' &&\n file[1] === '' &&\n file[2] === '?' &&\n typeof file[3] === 'string' &&\n /^[a-z]:$/i.test(file[3]);\n const patternUNC = pattern[0] === '' &&\n pattern[1] === '' &&\n pattern[2] === '?' &&\n typeof pattern[3] === 'string' &&\n /^[a-z]:$/i.test(pattern[3]);\n if (fileUNC && patternUNC) {\n const fd = file[3];\n const pd = pattern[3];\n if (fd.toLowerCase() === pd.toLowerCase()) {\n file[3] = pd;\n }\n }\n else if (patternUNC && typeof file[0] === 'string') {\n const pd = pattern[3];\n const fd = file[0];\n if (pd.toLowerCase() === fd.toLowerCase()) {\n pattern[3] = fd;\n pattern = pattern.slice(3);\n }\n }\n else if (fileUNC && typeof pattern[0] === 'string') {\n const fd = file[3];\n if (fd.toLowerCase() === pattern[0].toLowerCase()) {\n pattern[0] = fd;\n file = file.slice(3);\n }\n }\n }\n // resolve and reduce . and .. portions in the file as well.\n // dont' need to do the second phase, because it's only one string[]\n const { optimizationLevel = 1 } = this.options;\n if (optimizationLevel >= 2) {\n file = this.levelTwoFileOptimize(file);\n }\n this.debug('matchOne', this, { file, pattern });\n this.debug('matchOne', file.length, pattern.length);\n for (var fi = 0, pi = 0, fl = file.length, pl = pattern.length; fi < fl && pi < pl; fi++, pi++) {\n this.debug('matchOne loop');\n var p = pattern[pi];\n var f = file[fi];\n this.debug(pattern, p, f);\n // should be impossible.\n // some invalid regexp stuff in the set.\n /* c8 ignore start */\n if (p === false) {\n return false;\n }\n /* c8 ignore stop */\n if (p === GLOBSTAR) {\n this.debug('GLOBSTAR', [pattern, p, f]);\n // \"**\"\n // a/**/b/**/c would match the following:\n // a/b/x/y/z/c\n // a/x/y/z/b/c\n // a/b/x/b/x/c\n // a/b/c\n // To do this, take the rest of the pattern after\n // the **, and see if it would match the file remainder.\n // If so, return success.\n // If not, the ** \"swallows\" a segment, and try again.\n // This is recursively awful.\n //\n // a/**/b/**/c matching a/b/x/y/z/c\n // - a matches a\n // - doublestar\n // - matchOne(b/x/y/z/c, b/**/c)\n // - b matches b\n // - doublestar\n // - matchOne(x/y/z/c, c) -> no\n // - matchOne(y/z/c, c) -> no\n // - matchOne(z/c, c) -> no\n // - matchOne(c, c) yes, hit\n var fr = fi;\n var pr = pi + 1;\n if (pr === pl) {\n this.debug('** at the end');\n // a ** at the end will just swallow the rest.\n // We have found a match.\n // however, it will not swallow /.x, unless\n // options.dot is set.\n // . and .. are *never* matched by **, for explosively\n // exponential reasons.\n for (; fi < fl; fi++) {\n if (file[fi] === '.' ||\n file[fi] === '..' ||\n (!options.dot && file[fi].charAt(0) === '.'))\n return false;\n }\n return true;\n }\n // ok, let's see if we can swallow whatever we can.\n while (fr < fl) {\n var swallowee = file[fr];\n this.debug('\\nglobstar while', file, fr, pattern, pr, swallowee);\n // XXX remove this slice. Just pass the start index.\n if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) {\n this.debug('globstar found match!', fr, fl, swallowee);\n // found a match.\n return true;\n }\n else {\n // can't swallow \".\" or \"..\" ever.\n // can only swallow \".foo\" when explicitly asked.\n if (swallowee === '.' ||\n swallowee === '..' ||\n (!options.dot && swallowee.charAt(0) === '.')) {\n this.debug('dot detected!', file, fr, pattern, pr);\n break;\n }\n // ** swallows a segment, and continue.\n this.debug('globstar swallow a segment, and continue');\n fr++;\n }\n }\n // no match was found.\n // However, in partial mode, we can't say this is necessarily over.\n /* c8 ignore start */\n if (partial) {\n // ran out of file\n this.debug('\\n>>> no match, partial?', file, fr, pattern, pr);\n if (fr === fl) {\n return true;\n }\n }\n /* c8 ignore stop */\n return false;\n }\n // something other than **\n // non-magic patterns just have to match exactly\n // patterns with magic have been turned into regexps.\n let hit;\n if (typeof p === 'string') {\n hit = f === p;\n this.debug('string match', p, f, hit);\n }\n else {\n hit = p.test(f);\n this.debug('pattern match', p, f, hit);\n }\n if (!hit)\n return false;\n }\n // Note: ending in / means that we'll get a final \"\"\n // at the end of the pattern. This can only match a\n // corresponding \"\" at the end of the file.\n // If the file ends in /, then it can only match a\n // a pattern that ends in /, unless the pattern just\n // doesn't have any more for it. But, a/b/ should *not*\n // match \"a/b/*\", even though \"\" matches against the\n // [^/]*? pattern, except in partial mode, where it might\n // simply not be reached yet.\n // However, a/b/ should still satisfy a/*\n // now either we fell off the end of the pattern, or we're done.\n if (fi === fl && pi === pl) {\n // ran out of pattern and filename at the same time.\n // an exact hit!\n return true;\n }\n else if (fi === fl) {\n // ran out of file, but still had pattern left.\n // this is ok if we're doing the match as part of\n // a glob fs traversal.\n return partial;\n }\n else if (pi === pl) {\n // ran out of pattern, still have file left.\n // this is only acceptable if we're on the very last\n // empty segment of a file with a trailing slash.\n // a/* should match a/b/\n return fi === fl - 1 && file[fi] === '';\n /* c8 ignore start */\n }\n else {\n // should be unreachable.\n throw new Error('wtf?');\n }\n /* c8 ignore stop */\n }\n braceExpand() {\n return braceExpand(this.pattern, this.options);\n }\n parse(pattern) {\n assertValidPattern(pattern);\n const options = this.options;\n // shortcuts\n if (pattern === '**')\n return GLOBSTAR;\n if (pattern === '')\n return '';\n // far and away, the most common glob pattern parts are\n // *, *.*, and *.<ext> Add a fast check method for those.\n let m;\n let fastTest = null;\n if ((m = pattern.match(starRE))) {\n fastTest = options.dot ? starTestDot : starTest;\n }\n else if ((m = pattern.match(starDotExtRE))) {\n fastTest = (options.nocase\n ? options.dot\n ? starDotExtTestNocaseDot\n : starDotExtTestNocase\n : options.dot\n ? starDotExtTestDot\n : starDotExtTest)(m[1]);\n }\n else if ((m = pattern.match(qmarksRE))) {\n fastTest = (options.nocase\n ? options.dot\n ? qmarksTestNocaseDot\n : qmarksTestNocase\n : options.dot\n ? qmarksTestDot\n : qmarksTest)(m);\n }\n else if ((m = pattern.match(starDotStarRE))) {\n fastTest = options.dot ? starDotStarTestDot : starDotStarTest;\n }\n else if ((m = pattern.match(dotStarRE))) {\n fastTest = dotStarTest;\n }\n let re = '';\n let hasMagic = false;\n let escaping = false;\n // ? => one single character\n const patternListStack = [];\n const negativeLists = [];\n let stateChar = false;\n let uflag = false;\n let pl;\n // . and .. never match anything that doesn't start with .,\n // even when options.dot is set. However, if the pattern\n // starts with ., then traversal patterns can match.\n let dotTravAllowed = pattern.charAt(0) === '.';\n let dotFileAllowed = options.dot || dotTravAllowed;\n const patternStart = () => dotTravAllowed\n ? ''\n : dotFileAllowed\n ? '(?!(?:^|\\\\/)\\\\.{1,2}(?:$|\\\\/))'\n : '(?!\\\\.)';\n const subPatternStart = (p) => p.charAt(0) === '.'\n ? ''\n : options.dot\n ? '(?!(?:^|\\\\/)\\\\.{1,2}(?:$|\\\\/))'\n : '(?!\\\\.)';\n const clearStateChar = () => {\n if (stateChar) {\n // we had some state-tracking character\n // that wasn't consumed by this pass.\n switch (stateChar) {\n case '*':\n re += star;\n hasMagic = true;\n break;\n case '?':\n re += qmark;\n hasMagic = true;\n break;\n default:\n re += '\\\\' + stateChar;\n break;\n }\n this.debug('clearStateChar %j %j', stateChar, re);\n stateChar = false;\n }\n };\n for (let i = 0, c; i < pattern.length && (c = pattern.charAt(i)); i++) {\n this.debug('%s\\t%s %s %j', pattern, i, re, c);\n // skip over any that are escaped.\n if (escaping) {\n // completely not allowed, even escaped.\n // should be impossible.\n /* c8 ignore start */\n if (c === '/') {\n return false;\n }\n /* c8 ignore stop */\n if (reSpecials[c]) {\n re += '\\\\';\n }\n re += c;\n escaping = false;\n continue;\n }\n switch (c) {\n // Should already be path-split by now.\n /* c8 ignore start */\n case '/': {\n return false;\n }\n /* c8 ignore stop */\n case '\\\\':\n clearStateChar();\n escaping = true;\n continue;\n // the various stateChar values\n // for the \"extglob\" stuff.\n case '?':\n case '*':\n case '+':\n case '@':\n case '!':\n this.debug('%s\\t%s %s %j <-- stateChar', pattern, i, re, c);\n // if we already have a stateChar, then it means\n // that there was something like ** or +? in there.\n // Handle the stateChar, then proceed with this one.\n this.debug('call clearStateChar %j', stateChar);\n clearStateChar();\n stateChar = c;\n // if extglob is disabled, then +(asdf|foo) isn't a thing.\n // just clear the statechar *now*, rather than even diving into\n // the patternList stuff.\n if (options.noext)\n clearStateChar();\n continue;\n case '(': {\n if (!stateChar) {\n re += '\\\\(';\n continue;\n }\n const plEntry = {\n type: stateChar,\n start: i - 1,\n reStart: re.length,\n open: plTypes[stateChar].open,\n close: plTypes[stateChar].close,\n };\n this.debug(this.pattern, '\\t', plEntry);\n patternListStack.push(plEntry);\n // negation is (?:(?!(?:js)(?:<rest>))[^/]*)\n re += plEntry.open;\n // next entry starts with a dot maybe?\n if (plEntry.start === 0 && plEntry.type !== '!') {\n dotTravAllowed = true;\n re += subPatternStart(pattern.slice(i + 1));\n }\n this.debug('plType %j %j', stateChar, re);\n stateChar = false;\n continue;\n }\n case ')': {\n const plEntry = patternListStack[patternListStack.length - 1];\n if (!plEntry) {\n re += '\\\\)';\n continue;\n }\n patternListStack.pop();\n // closing an extglob\n clearStateChar();\n hasMagic = true;\n pl = plEntry;\n // negation is (?:(?!js)[^/]*)\n // The others are (?:<pattern>)<type>\n re += pl.close;\n if (pl.type === '!') {\n negativeLists.push(Object.assign(pl, { reEnd: re.length }));\n }\n continue;\n }\n case '|': {\n const plEntry = patternListStack[patternListStack.length - 1];\n if (!plEntry) {\n re += '\\\\|';\n continue;\n }\n clearStateChar();\n re += '|';\n // next subpattern can start with a dot?\n if (plEntry.start === 0 && plEntry.type !== '!') {\n dotTravAllowed = true;\n re += subPatternStart(pattern.slice(i + 1));\n }\n continue;\n }\n // these are mostly the same in regexp and glob\n case '[':\n // swallow any state-tracking char before the [\n clearStateChar();\n const [src, needUflag, consumed, magic] = parseClass(pattern, i);\n if (consumed) {\n re += src;\n uflag = uflag || needUflag;\n i += consumed - 1;\n hasMagic = hasMagic || magic;\n }\n else {\n re += '\\\\[';\n }\n continue;\n case ']':\n re += '\\\\' + c;\n continue;\n default:\n // swallow any state char that wasn't consumed\n clearStateChar();\n re += regExpEscape(c);\n break;\n } // switch\n } // for\n // handle the case where we had a +( thing at the *end*\n // of the pattern.\n // each pattern list stack adds 3 chars, and we need to go through\n // and escape any | chars that were passed through as-is for the regexp.\n // Go through and escape them, taking care not to double-escape any\n // | chars that were already escaped.\n for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) {\n let tail;\n tail = re.slice(pl.reStart + pl.open.length);\n this.debug(this.pattern, 'setting tail', re, pl);\n // maybe some even number of \\, then maybe 1 \\, followed by a |\n tail = tail.replace(/((?:\\\\{2}){0,64})(\\\\?)\\|/g, (_, $1, $2) => {\n if (!$2) {\n // the | isn't already escaped, so escape it.\n $2 = '\\\\';\n // should already be done\n /* c8 ignore start */\n }\n /* c8 ignore stop */\n // need to escape all those slashes *again*, without escaping the\n // one that we need for escaping the | character. As it works out,\n // escaping an even number of slashes can be done by simply repeating\n // it exactly after itself. That's why this trick works.\n //\n // I am sorry that you have to see this.\n return $1 + $1 + $2 + '|';\n });\n this.debug('tail=%j\\n %s', tail, tail, pl, re);\n const t = pl.type === '*' ? star : pl.type === '?' ? qmark : '\\\\' + pl.type;\n hasMagic = true;\n re = re.slice(0, pl.reStart) + t + '\\\\(' + tail;\n }\n // handle trailing things that only matter at the very end.\n clearStateChar();\n if (escaping) {\n // trailing \\\\\n re += '\\\\\\\\';\n }\n // only need to apply the nodot start if the re starts with\n // something that could conceivably capture a dot\n const addPatternStart = addPatternStartSet[re.charAt(0)];\n // Hack to work around lack of negative lookbehind in JS\n // A pattern like: *.!(x).!(y|z) needs to ensure that a name\n // like 'a.xyz.yz' doesn't match. So, the first negative\n // lookahead, has to look ALL the way ahead, to the end of\n // the pattern.\n for (let n = negativeLists.length - 1; n > -1; n--) {\n const nl = negativeLists[n];\n const nlBefore = re.slice(0, nl.reStart);\n const nlFirst = re.slice(nl.reStart, nl.reEnd - 8);\n let nlAfter = re.slice(nl.reEnd);\n const nlLast = re.slice(nl.reEnd - 8, nl.reEnd) + nlAfter;\n // Handle nested stuff like *(*.js|!(*.json)), where open parens\n // mean that we should *not* include the ) in the bit that is considered\n // \"after\" the negated section.\n const closeParensBefore = nlBefore.split(')').length;\n const openParensBefore = nlBefore.split('(').length - closeParensBefore;\n let cleanAfter = nlAfter;\n for (let i = 0; i < openParensBefore; i++) {\n cleanAfter = cleanAfter.replace(/\\)[+*?]?/, '');\n }\n nlAfter = cleanAfter;\n const dollar = nlAfter === '' ? '(?:$|\\\\/)' : '';\n re = nlBefore + nlFirst + nlAfter + dollar + nlLast;\n }\n // if the re is not \"\" at this point, then we need to make sure\n // it doesn't match against an empty path part.\n // Otherwise a/* will match a/, which it should not.\n if (re !== '' && hasMagic) {\n re = '(?=.)' + re;\n }\n if (addPatternStart) {\n re = patternStart() + re;\n }\n // if it's nocase, and the lcase/uppercase don't match, it's magic\n if (options.nocase && !hasMagic && !options.nocaseMagicOnly) {\n hasMagic = pattern.toUpperCase() !== pattern.toLowerCase();\n }\n // skip the regexp for non-magical patterns\n // unescape anything in it, though, so that it'll be\n // an exact match against a file etc.\n if (!hasMagic) {\n return globUnescape(re);\n }\n const flags = (options.nocase ? 'i' : '') + (uflag ? 'u' : '');\n try {\n const ext = fastTest\n ? {\n _glob: pattern,\n _src: re,\n test: fastTest,\n }\n : {\n _glob: pattern,\n _src: re,\n };\n return Object.assign(new RegExp('^' + re + '$', flags), ext);\n /* c8 ignore start */\n }\n catch (er) {\n // should be impossible\n // If it was an invalid regular expression, then it can't match\n // anything. This trick looks for a character after the end of\n // the string, which is of course impossible, except in multi-line\n // mode, but it's not a /m regex.\n this.debug('invalid regexp', er);\n return new RegExp('$.');\n }\n /* c8 ignore stop */\n }\n makeRe() {\n if (this.regexp || this.regexp === false)\n return this.regexp;\n // at this point, this.set is a 2d array of partial\n // pattern strings, or \"**\".\n //\n // It's better to use .match(). This function shouldn't\n // be used, really, but it's pretty convenient sometimes,\n // when you just want to work with a regex.\n const set = this.set;\n if (!set.length) {\n this.regexp = false;\n return this.regexp;\n }\n const options = this.options;\n const twoStar = options.noglobstar\n ? star\n : options.dot\n ? twoStarDot\n : twoStarNoDot;\n const flags = options.nocase ? 'i' : '';\n // regexpify non-globstar patterns\n // if ** is only item, then we just do one twoStar\n // if ** is first, and there are more, prepend (\\/|twoStar\\/)? to next\n // if ** is last, append (\\/twoStar|) to previous\n // if ** is in the middle, append (\\/|\\/twoStar\\/) to previous\n // then filter out GLOBSTAR symbols\n let re = set\n .map(pattern => {\n const pp = pattern.map(p => typeof p === 'string'\n ? regExpEscape(p)\n : p === GLOBSTAR\n ? GLOBSTAR\n : p._src);\n pp.forEach((p, i) => {\n const next = pp[i + 1];\n const prev = pp[i - 1];\n if (p !== GLOBSTAR || prev === GLOBSTAR) {\n return;\n }\n if (prev === undefined) {\n if (next !== undefined && next !== GLOBSTAR) {\n pp[i + 1] = '(?:\\\\/|' + twoStar + '\\\\/)?' + next;\n }\n else {\n pp[i] = twoStar;\n }\n }\n else if (next === undefined) {\n pp[i - 1] = prev + '(?:\\\\/|' + twoStar + ')?';\n }\n else if (next !== GLOBSTAR) {\n pp[i - 1] = prev + '(?:\\\\/|\\\\/' + twoStar + '\\\\/)' + next;\n pp[i + 1] = GLOBSTAR;\n }\n });\n return pp.filter(p => p !== GLOBSTAR).join('/');\n })\n .join('|');\n // must match entire pattern\n // ending in a * or ** will make it less strict.\n re = '^(?:' + re + ')$';\n // can match anything, as long as it's not this.\n if (this.negate)\n re = '^(?!' + re + ').*$';\n try {\n this.regexp = new RegExp(re, flags);\n /* c8 ignore start */\n }\n catch (ex) {\n // should be impossible\n this.regexp = false;\n }\n /* c8 ignore stop */\n return this.regexp;\n }\n slashSplit(p) {\n // if p starts with // on windows, we preserve that\n // so that UNC paths aren't broken. Otherwise, any number of\n // / characters are coalesced into one, unless\n // preserveMultipleSlashes is set to true.\n if (this.preserveMultipleSlashes) {\n return p.split('/');\n }\n else if (this.isWindows && /^\\/\\/[^\\/]+/.test(p)) {\n // add an extra '' for the one we lose\n return ['', ...p.split(/\\/+/)];\n }\n else {\n return p.split(/\\/+/);\n }\n }\n match(f, partial = this.partial) {\n this.debug('match', f, this.pattern);\n // short-circuit in the case of busted things.\n // comments, etc.\n if (this.comment) {\n return false;\n }\n if (this.empty) {\n return f === '';\n }\n if (f === '/' && partial) {\n return true;\n }\n const options = this.options;\n // windows: need to use /, not \\\n if (this.isWindows) {\n f = f.split('\\\\').join('/');\n }\n // treat the test path as a set of pathparts.\n const ff = this.slashSplit(f);\n this.debug(this.pattern, 'split', ff);\n // just ONE of the pattern sets in this.set needs to match\n // in order for it to be valid. If negating, then just one\n // match means that we have failed.\n // Either way, return on the first hit.\n const set = this.set;\n this.debug(this.pattern, 'set', set);\n // Find the basename of the path by looking for the last non-empty segment\n let filename = ff[ff.length - 1];\n if (!filename) {\n for (let i = ff.length - 2; !filename && i >= 0; i--) {\n filename = ff[i];\n }\n }\n for (let i = 0; i < set.length; i++) {\n const pattern = set[i];\n let file = ff;\n if (options.matchBase && pattern.length === 1) {\n file = [filename];\n }\n const hit = this.matchOne(file, pattern, partial);\n if (hit) {\n if (options.flipNegate) {\n return true;\n }\n return !this.negate;\n }\n }\n // didn't get any hits. this is success if it's a negative\n // pattern, failure otherwise.\n if (options.flipNegate) {\n return false;\n }\n return this.negate;\n }\n static defaults(def) {\n return minimatch.defaults(def).Minimatch;\n }\n}\n/* c8 ignore start */\nexport { escape } from './escape.js';\nexport { unescape } from './unescape.js';\n/* c8 ignore stop */\nminimatch.Minimatch = Minimatch;\nminimatch.escape = escape;\nminimatch.unescape = unescape;\n//# sourceMappingURL=index.js.map","export function convertResponseHeaders(headers) {\n const output = {};\n for (const key of headers.keys()) {\n output[key] = headers.get(key);\n }\n return output;\n}\nexport function mergeHeaders(...headerPayloads) {\n if (headerPayloads.length === 0)\n return {};\n const headerKeys = {};\n return headerPayloads.reduce((output, headers) => {\n Object.keys(headers).forEach(header => {\n const lowerHeader = header.toLowerCase();\n if (headerKeys.hasOwnProperty(lowerHeader)) {\n output[headerKeys[lowerHeader]] = headers[header];\n }\n else {\n headerKeys[lowerHeader] = header;\n output[header] = headers[header];\n }\n });\n return output;\n }, {});\n}\n","/**\n * Escape all magic characters in a glob pattern.\n *\n * If the {@link windowsPathsNoEscape | GlobOptions.windowsPathsNoEscape}\n * option is used, then characters are escaped by wrapping in `[]`, because\n * a magic character wrapped in a character class can only be satisfied by\n * that exact character. In this mode, `\\` is _not_ escaped, because it is\n * not interpreted as a magic character, but instead as a path separator.\n */\nexport const escape = (s, { windowsPathsNoEscape = false, } = {}) => {\n // don't need to escape +@! because we escape the parens\n // that make those magic, and escaping ! as [!] isn't valid,\n // because [!]] is a valid glob class meaning not ']'.\n return windowsPathsNoEscape\n ? s.replace(/[?*()[\\]]/g, '[$&]')\n : s.replace(/[?*()[\\]\\\\]/g, '\\\\$&');\n};\n//# sourceMappingURL=escape.js.map","/**\n * Un-escape a string that has been escaped with {@link escape}.\n *\n * If the {@link windowsPathsNoEscape} option is used, then square-brace\n * escapes are removed, but not backslash escapes. For example, it will turn\n * the string `'[*]'` into `*`, but it will not turn `'\\\\*'` into `'*'`,\n * becuase `\\` is a path separator in `windowsPathsNoEscape` mode.\n *\n * When `windowsPathsNoEscape` is not set, then both brace escapes and\n * backslash escapes are removed.\n *\n * Slashes (and backslashes in `windowsPathsNoEscape` mode) cannot be escaped\n * or unescaped.\n */\nexport const unescape = (s, { windowsPathsNoEscape = false, } = {}) => {\n return windowsPathsNoEscape\n ? s.replace(/\\[([^\\/\\\\])\\]/g, '$1')\n : s.replace(/((?!\\\\).|^)\\[([^\\/\\\\])\\]/g, '$1$2').replace(/\\\\([^\\/])/g, '$1');\n};\n//# sourceMappingURL=unescape.js.map","import path from \"path-posix\";\nimport { XMLParser } from \"fast-xml-parser\";\nimport nestedProp from \"nested-property\";\nimport { encodePath, normalisePath } from \"./path.js\";\nvar PropertyType;\n(function (PropertyType) {\n PropertyType[\"Array\"] = \"array\";\n PropertyType[\"Object\"] = \"object\";\n PropertyType[\"Original\"] = \"original\";\n})(PropertyType || (PropertyType = {}));\nfunction getParser() {\n return new XMLParser({\n removeNSPrefix: true,\n numberParseOptions: {\n hex: true,\n leadingZeros: false\n }\n // We don't use the processors here as decoding is done manually\n // later on - decoding early would break some path checks.\n });\n}\nfunction getPropertyOfType(obj, prop, type = PropertyType.Original) {\n const val = nestedProp.get(obj, prop);\n if (type === \"array\" && Array.isArray(val) === false) {\n return [val];\n }\n else if (type === \"object\" && Array.isArray(val)) {\n return val[0];\n }\n return val;\n}\nfunction normaliseResponse(response) {\n const output = Object.assign({}, response);\n // Only either status OR propstat is allowed\n if (output.status) {\n nestedProp.set(output, \"status\", getPropertyOfType(output, \"status\", PropertyType.Object));\n }\n else {\n nestedProp.set(output, \"propstat\", getPropertyOfType(output, \"propstat\", PropertyType.Object));\n nestedProp.set(output, \"propstat.prop\", getPropertyOfType(output, \"propstat.prop\", PropertyType.Object));\n }\n return output;\n}\nfunction normaliseResult(result) {\n const { multistatus } = result;\n if (multistatus === \"\") {\n return {\n multistatus: {\n response: []\n }\n };\n }\n if (!multistatus) {\n throw new Error(\"Invalid response: No root multistatus found\");\n }\n const output = {\n multistatus: Array.isArray(multistatus) ? multistatus[0] : multistatus\n };\n nestedProp.set(output, \"multistatus.response\", getPropertyOfType(output, \"multistatus.response\", PropertyType.Array));\n nestedProp.set(output, \"multistatus.response\", nestedProp.get(output, \"multistatus.response\").map(response => normaliseResponse(response)));\n return output;\n}\n/**\n * Parse an XML response from a WebDAV service,\n * converting it to an internal DAV result\n * @param xml The raw XML string\n * @returns A parsed and processed DAV result\n */\nexport function parseXML(xml) {\n return new Promise(resolve => {\n const result = getParser().parse(xml);\n resolve(normaliseResult(result));\n });\n}\n/**\n * Get a file stat result from given DAV properties\n * @param props DAV properties\n * @param filename The filename for the file stat\n * @param isDetailed Whether or not the raw props of the resource should be returned\n * @returns A file stat result\n */\nexport function prepareFileFromProps(props, filename, isDetailed = false) {\n // Last modified time, raw size, item type and mime\n const { getlastmodified: lastMod = null, getcontentlength: rawSize = \"0\", resourcetype: resourceType = null, getcontenttype: mimeType = null, getetag: etag = null } = props;\n const type = resourceType &&\n typeof resourceType === \"object\" &&\n typeof resourceType.collection !== \"undefined\"\n ? \"directory\"\n : \"file\";\n const stat = {\n filename,\n basename: path.basename(filename),\n lastmod: lastMod,\n size: parseInt(rawSize, 10),\n type,\n etag: typeof etag === \"string\" ? etag.replace(/\"/g, \"\") : null\n };\n if (type === \"file\") {\n stat.mime = mimeType && typeof mimeType === \"string\" ? mimeType.split(\";\")[0] : \"\";\n }\n if (isDetailed) {\n stat.props = props;\n }\n return stat;\n}\n/**\n * Parse a DAV result for file stats\n * @param result The resulting DAV response\n * @param filename The filename that was stat'd\n * @param isDetailed Whether or not the raw props of\n * the resource should be returned\n * @returns A file stat result\n */\nexport function parseStat(result, filename, isDetailed = false) {\n let responseItem = null;\n try {\n // should be a propstat response, if not the if below will throw an error\n if (result.multistatus.response[0].propstat) {\n responseItem = result.multistatus.response[0];\n }\n }\n catch (e) {\n /* ignore */\n }\n if (!responseItem) {\n throw new Error(\"Failed getting item stat: bad response\");\n }\n const { propstat: { prop: props, status: statusLine } } = responseItem;\n // As defined in https://tools.ietf.org/html/rfc2068#section-6.1\n const [_, statusCodeStr, statusText] = statusLine.split(\" \", 3);\n const statusCode = parseInt(statusCodeStr, 10);\n if (statusCode >= 400) {\n const err = new Error(`Invalid response: ${statusCode} ${statusText}`);\n err.status = statusCode;\n throw err;\n }\n const filePath = normalisePath(filename);\n return prepareFileFromProps(props, filePath, isDetailed);\n}\n/**\n * Parse a DAV result for a search request\n *\n * @param result The resulting DAV response\n * @param searchArbiter The collection path that was searched\n * @param isDetailed Whether or not the raw props of the resource should be returned\n */\nexport function parseSearch(result, searchArbiter, isDetailed) {\n const response = {\n truncated: false,\n results: []\n };\n response.truncated = result.multistatus.response.some(v => {\n return ((v.status || v.propstat?.status).split(\" \", 3)?.[1] === \"507\" &&\n v.href.replace(/\\/$/, \"\").endsWith(encodePath(searchArbiter).replace(/\\/$/, \"\")));\n });\n result.multistatus.response.forEach(result => {\n if (result.propstat === undefined) {\n return;\n }\n const filename = result.href.split(\"/\").map(decodeURIComponent).join(\"/\");\n response.results.push(prepareFileFromProps(result.propstat.prop, filename, isDetailed));\n });\n return response;\n}\n/**\n * Translate a disk quota indicator to a recognised\n * value (includes \"unlimited\" and \"unknown\")\n * @param value The quota indicator, eg. \"-3\"\n * @returns The value in bytes, or another indicator\n */\nexport function translateDiskSpace(value) {\n switch (value.toString()) {\n case \"-3\":\n return \"unlimited\";\n case \"-2\":\n /* falls-through */\n case \"-1\":\n // -1 is non-computed\n return \"unknown\";\n default:\n return parseInt(value, 10);\n }\n}\n","import { assertError, isError } from \"./error.js\";\nimport { parseArguments } from \"./tools.js\";\nexport class Layerr extends Error {\n constructor(errorOptionsOrMessage, messageText) {\n const args = [...arguments];\n const { options, shortMessage } = parseArguments(args);\n let message = shortMessage;\n if (options.cause) {\n message = `${message}: ${options.cause.message}`;\n }\n super(message);\n this.message = message;\n if (options.name && typeof options.name === \"string\") {\n this.name = options.name;\n }\n else {\n this.name = \"Layerr\";\n }\n if (options.cause) {\n Object.defineProperty(this, \"_cause\", { value: options.cause });\n }\n Object.defineProperty(this, \"_info\", { value: {} });\n if (options.info && typeof options.info === \"object\") {\n Object.assign(this._info, options.info);\n }\n if (Error.captureStackTrace) {\n const ctor = options.constructorOpt || this.constructor;\n Error.captureStackTrace(this, ctor);\n }\n }\n static cause(err) {\n assertError(err);\n if (!err._cause)\n return null;\n return isError(err._cause) ? err._cause : null;\n }\n static fullStack(err) {\n assertError(err);\n const cause = Layerr.cause(err);\n if (cause) {\n return `${err.stack}\\ncaused by: ${Layerr.fullStack(cause)}`;\n }\n return err.stack;\n }\n static info(err) {\n assertError(err);\n const output = {};\n const cause = Layerr.cause(err);\n if (cause) {\n Object.assign(output, Layerr.info(cause));\n }\n if (err._info) {\n Object.assign(output, err._info);\n }\n return output;\n }\n cause() {\n return Layerr.cause(this);\n }\n toString() {\n let output = this.name || this.constructor.name || this.constructor.prototype.name;\n if (this.message) {\n output = `${output}: ${this.message}`;\n }\n return output;\n }\n}\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport { parseXML } from 'webdav';\n// https://github.com/perry-mitchell/webdav-client/issues/339\nimport { processResponsePayload } from 'webdav/dist/node/response.js';\nimport { prepareFileFromProps } from 'webdav/dist/node/tools/dav.js';\nimport client from './DavClient.js';\nexport const DEFAULT_LIMIT = 20;\n/**\n * Retrieve the comments list\n *\n * @param {object} data destructuring object\n * @param {string} data.resourceType the resource type\n * @param {number} data.resourceId the resource ID\n * @param {object} [options] optional options for axios\n * @param {number} [options.offset] the pagination offset\n * @param {number} [options.limit] the pagination limit, defaults to 20\n * @param {Date} [options.datetime] optional date to query\n * @return {{data: object[]}} the comments list\n */\nexport const getComments = async function ({ resourceType, resourceId }, options) {\n const resourcePath = ['', resourceType, resourceId].join('/');\n const datetime = options.datetime ? `<oc:datetime>${options.datetime.toISOString()}</oc:datetime>` : '';\n const response = await client.customRequest(resourcePath, Object.assign({\n method: 'REPORT',\n data: `<?xml version=\"1.0\"?>\n\t\t\t<oc:filter-comments\n\t\t\t\txmlns:d=\"DAV:\"\n\t\t\t\txmlns:oc=\"http://owncloud.org/ns\"\n\t\t\t\txmlns:nc=\"http://nextcloud.org/ns\"\n\t\t\t\txmlns:ocs=\"http://open-collaboration-services.org/ns\">\n\t\t\t\t<oc:limit>${options.limit ?? DEFAULT_LIMIT}</oc:limit>\n\t\t\t\t<oc:offset>${options.offset || 0}</oc:offset>\n\t\t\t\t${datetime}\n\t\t\t</oc:filter-comments>`,\n }, options));\n const responseData = await response.text();\n const result = await parseXML(responseData);\n const stat = getDirectoryFiles(result, true);\n return processResponsePayload(response, stat, true);\n};\n// https://github.com/perry-mitchell/webdav-client/blob/8d9694613c978ce7404e26a401c39a41f125f87f/source/operations/directoryContents.ts\nconst getDirectoryFiles = function (result, isDetailed = false) {\n // Extract the response items (directory contents)\n const { multistatus: { response: responseItems }, } = result;\n // Map all items to a consistent output structure (results)\n return responseItems.map(item => {\n // Each item should contain a stat object\n const props = item.propstat.prop;\n return prepareFileFromProps(props, props.id.toString(), isDetailed);\n });\n};\n","import minimatch from \"minimatch\";\nimport { convertResponseHeaders } from \"./tools/headers.js\";\nexport function createErrorFromResponse(response, prefix = \"\") {\n const err = new Error(`${prefix}Invalid response: ${response.status} ${response.statusText}`);\n err.status = response.status;\n err.response = response;\n return err;\n}\nexport function handleResponseCode(context, response) {\n const { status } = response;\n if (status === 401 && context.digest)\n return response;\n if (status >= 400) {\n const err = createErrorFromResponse(response);\n throw err;\n }\n return response;\n}\nexport function processGlobFilter(files, glob) {\n return files.filter(file => minimatch(file.filename, glob, { matchBase: true }));\n}\n/**\n * Process a response payload (eg. from `customRequest`) and\n * prepare it for further processing. Exposed for custom\n * request handling.\n * @param response The response for a request\n * @param data The data returned\n * @param isDetailed Whether or not a detailed result is\n * requested\n * @returns The response data, or a detailed response object\n * if required\n */\nexport function processResponsePayload(response, data, isDetailed = false) {\n return isDetailed\n ? {\n data,\n headers: response.headers ? convertResponseHeaders(response.headers) : {},\n status: response.status,\n statusText: response.statusText\n }\n : data;\n}\n","import axios from '@nextcloud/axios';\nimport { getCurrentUser } from '@nextcloud/auth';\nimport { loadState } from '@nextcloud/initial-state';\nimport { generateOcsUrl } from '@nextcloud/router';\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n props: {\n resourceId: {\n type: Number,\n required: true,\n },\n resourceType: {\n type: String,\n default: 'files',\n },\n },\n data() {\n return {\n editorData: {\n actorDisplayName: getCurrentUser().displayName,\n actorId: getCurrentUser().uid,\n key: 'editor',\n },\n userData: {},\n };\n },\n methods: {\n /**\n * Autocomplete @mentions\n *\n * @param {string} search the query\n * @param {Function} callback the callback to process the results with\n */\n async autoComplete(search, callback) {\n const { data } = await axios.get(generateOcsUrl('core/autocomplete/get'), {\n params: {\n search,\n itemType: 'files',\n itemId: this.resourceId,\n sorter: 'commenters|share-recipients',\n limit: loadState('comments', 'maxAutoCompleteResults'),\n },\n });\n // Save user data so it can be used by the editor to replace mentions\n data.ocs.data.forEach(user => { this.userData[user.id] = user; });\n return callback(Object.values(this.userData));\n },\n /**\n * Make sure we have all mentions as Array of objects\n *\n * @param mentions the mentions list\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n genMentionsData(mentions) {\n Object.values(mentions)\n .flat()\n .forEach(mention => {\n this.userData[mention.mentionId] = {\n // TODO: support groups\n icon: 'icon-user',\n id: mention.mentionId,\n label: mention.mentionDisplayName,\n source: 'users',\n primary: getCurrentUser()?.uid === mention.mentionId,\n };\n });\n return this.userData;\n },\n },\n});\n","<!--\n - @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n - @author Richard Steinmetz <richard@steinmetz.cloud>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div v-observe-visibility=\"onVisibilityChange\"\n\t\tclass=\"comments\"\n\t\t:class=\"{ 'icon-loading': isFirstLoading }\">\n\t\t<!-- Editor -->\n\t\t<Comment v-bind=\"editorData\"\n\t\t\t:auto-complete=\"autoComplete\"\n\t\t\t:resource-type=\"resourceType\"\n\t\t\t:editor=\"true\"\n\t\t\t:user-data=\"userData\"\n\t\t\t:resource-id=\"resourceId\"\n\t\t\tclass=\"comments__writer\"\n\t\t\t@new=\"onNewComment\" />\n\n\t\t<template v-if=\"!isFirstLoading\">\n\t\t\t<NcEmptyContent v-if=\"!hasComments && done\"\n\t\t\t\tclass=\"comments__empty\"\n\t\t\t\t:name=\"t('comments', 'No comments yet, start the conversation!')\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<MessageReplyTextIcon />\n\t\t\t\t</template>\n\t\t\t</NcEmptyContent>\n\t\t\t<ul v-else>\n\t\t\t\t<!-- Comments -->\n\t\t\t\t<Comment v-for=\"comment in comments\"\n\t\t\t\t\t:key=\"comment.props.id\"\n\t\t\t\t\ttag=\"li\"\n\t\t\t\t\tv-bind=\"comment.props\"\n\t\t\t\t\t:auto-complete=\"autoComplete\"\n\t\t\t\t\t:resource-type=\"resourceType\"\n\t\t\t\t\t:message.sync=\"comment.props.message\"\n\t\t\t\t\t:resource-id=\"resourceId\"\n\t\t\t\t\t:user-data=\"genMentionsData(comment.props.mentions)\"\n\t\t\t\t\tclass=\"comments__list\"\n\t\t\t\t\t@delete=\"onDelete\" />\n\t\t\t</ul>\n\n\t\t\t<!-- Loading more message -->\n\t\t\t<div v-if=\"loading && !isFirstLoading\" class=\"comments__info icon-loading\" />\n\n\t\t\t<div v-else-if=\"hasComments && done\" class=\"comments__info\">\n\t\t\t\t{{ t('comments', 'No more messages') }}\n\t\t\t</div>\n\n\t\t\t<!-- Error message -->\n\t\t\t<template v-else-if=\"error\">\n\t\t\t\t<NcEmptyContent class=\"comments__error\" :name=\"error\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<AlertCircleOutlineIcon />\n\t\t\t\t\t</template>\n\t\t\t\t</NcEmptyContent>\n\t\t\t\t<NcButton class=\"comments__retry\" @click=\"getComments\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<RefreshIcon />\n\t\t\t\t\t</template>\n\t\t\t\t\t{{ t('comments', 'Retry') }}\n\t\t\t\t</NcButton>\n\t\t\t</template>\n\t\t</template>\n\t</div>\n</template>\n\n<script>\nimport { showError } from '@nextcloud/dialogs'\nimport { translate as t } from '@nextcloud/l10n'\nimport VTooltip from 'v-tooltip'\nimport Vue from 'vue'\nimport VueObserveVisibility from 'vue-observe-visibility'\n\nimport NcEmptyContent from '@nextcloud/vue/dist/Components/NcEmptyContent.js'\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\nimport RefreshIcon from 'vue-material-design-icons/Refresh.vue'\nimport MessageReplyTextIcon from 'vue-material-design-icons/MessageReplyText.vue'\nimport AlertCircleOutlineIcon from 'vue-material-design-icons/AlertCircleOutline.vue'\n\nimport Comment from '../components/Comment.vue'\nimport { getComments, DEFAULT_LIMIT } from '../services/GetComments.ts'\nimport cancelableRequest from '../utils/cancelableRequest.js'\nimport { markCommentsAsRead } from '../services/ReadComments.ts'\nimport CommentView from '../mixins/CommentView'\n\nVue.use(VTooltip)\nVue.use(VueObserveVisibility)\n\nexport default {\n\tname: 'Comments',\n\n\tcomponents: {\n\t\tComment,\n\t\tNcEmptyContent,\n\t\tNcButton,\n\t\tRefreshIcon,\n\t\tMessageReplyTextIcon,\n\t\tAlertCircleOutlineIcon,\n\t},\n\n\tmixins: [CommentView],\n\n\tdata() {\n\t\treturn {\n\t\t\terror: '',\n\t\t\tloading: false,\n\t\t\tdone: false,\n\n\t\t\tresourceId: null,\n\t\t\toffset: 0,\n\t\t\tcomments: [],\n\n\t\t\tcancelRequest: () => {},\n\n\t\t\tComment,\n\t\t\tuserData: {},\n\t\t}\n\t},\n\n\tcomputed: {\n\t\thasComments() {\n\t\t\treturn this.comments.length > 0\n\t\t},\n\t\tisFirstLoading() {\n\t\t\treturn this.loading && this.offset === 0\n\t\t},\n\t},\n\n\tmethods: {\n\t\tt,\n\n\t\tasync onVisibilityChange(isVisible) {\n\t\t\tif (isVisible) {\n\t\t\t\ttry {\n\t\t\t\t\tawait markCommentsAsRead(this.resourceType, this.resourceId, new Date())\n\t\t\t\t} catch (e) {\n\t\t\t\t\tshowError(e.message || t('comments', 'Failed to mark comments as read'))\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Update current resourceId and fetch new data\n\t\t *\n\t\t * @param {number} resourceId the current resourceId (fileId...)\n\t\t */\n\t\tasync update(resourceId) {\n\t\t\tthis.resourceId = resourceId\n\t\t\tthis.resetState()\n\t\t\tthis.getComments()\n\t\t},\n\n\t\t/**\n\t\t * Ran when the bottom of the tab is reached\n\t\t */\n\t\tonScrollBottomReached() {\n\t\t\t/**\n\t\t\t * Do not fetch more if we:\n\t\t\t * - are showing an error\n\t\t\t * - already fetched everything\n\t\t\t * - are currently loading\n\t\t\t */\n\t\t\tif (this.error || this.done || this.loading) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.getComments()\n\t\t},\n\n\t\t/**\n\t\t * Get the existing shares infos\n\t\t */\n\t\tasync getComments() {\n\t\t\t// Cancel any ongoing request\n\t\t\tthis.cancelRequest('cancel')\n\n\t\t\ttry {\n\t\t\t\tthis.loading = true\n\t\t\t\tthis.error = ''\n\n\t\t\t\t// Init cancellable request\n\t\t\t\tconst { request, abort } = cancelableRequest(getComments)\n\t\t\t\tthis.cancelRequest = abort\n\n\t\t\t\t// Fetch comments\n\t\t\t\tconst { data: comments } = await request({\n\t\t\t\t\tresourceType: this.resourceType,\n\t\t\t\t\tresourceId: this.resourceId,\n\t\t\t\t}, { offset: this.offset }) || { data: [] }\n\n\t\t\t\tthis.logger.debug(`Processed ${comments.length} comments`, { comments })\n\n\t\t\t\t// We received less than the requested amount,\n\t\t\t\t// we're done fetching comments\n\t\t\t\tif (comments.length < DEFAULT_LIMIT) {\n\t\t\t\t\tthis.done = true\n\t\t\t\t}\n\n\t\t\t\t// Insert results\n\t\t\t\tthis.comments.push(...comments)\n\n\t\t\t\t// Increase offset for next fetch\n\t\t\t\tthis.offset += DEFAULT_LIMIT\n\t\t\t} catch (error) {\n\t\t\t\tif (error.message === 'cancel') {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tthis.error = t('comments', 'Unable to load the comments list')\n\t\t\t\tconsole.error('Error loading the comments list', error)\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Add newly created comment to the list\n\t\t *\n\t\t * @param {object} comment the new comment\n\t\t */\n\t\tonNewComment(comment) {\n\t\t\tthis.comments.unshift(comment)\n\t\t},\n\n\t\t/**\n\t\t * Remove deleted comment from the list\n\t\t *\n\t\t * @param {number} id the deleted comment\n\t\t */\n\t\tonDelete(id) {\n\t\t\tconst index = this.comments.findIndex(comment => comment.props.id === id)\n\t\t\tif (index > -1) {\n\t\t\t\tthis.comments.splice(index, 1)\n\t\t\t} else {\n\t\t\t\tconsole.error('Could not find the deleted comment in the list', id)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Reset the current view to its default state\n\t\t */\n\t\tresetState() {\n\t\t\tthis.error = ''\n\t\t\tthis.loading = false\n\t\t\tthis.done = false\n\t\t\tthis.offset = 0\n\t\t\tthis.comments = []\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.comments {\n\tmin-height: 100%;\n\tdisplay: flex;\n\tflex-direction: column;\n\n\t&__empty,\n\t&__error {\n\t\tflex: 1 0;\n\t}\n\n\t&__retry {\n\t\tmargin: 0 auto;\n\t}\n\n\t&__info {\n\t\theight: 60px;\n\t\tcolor: var(--color-text-maxcontrast);\n\t\ttext-align: center;\n\t\tline-height: 60px;\n\t}\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comments.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comments.vue?vue&type=script&lang=js\"","/**\n * @copyright 2023 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport client from './DavClient.js';\n/**\n * Mark comments older than the date timestamp as read\n *\n * @param resourceType the resource type\n * @param resourceId the resource ID\n * @param date the date object\n */\nexport const markCommentsAsRead = (resourceType, resourceId, date) => {\n const resourcePath = ['', resourceType, resourceId].join('/');\n const readMarker = date.toUTCString();\n return client.customRequest(resourcePath, {\n method: 'PROPPATCH',\n data: `<?xml version=\"1.0\"?>\n\t\t\t<d:propertyupdate\n\t\t\t\txmlns:d=\"DAV:\"\n\t\t\t\txmlns:oc=\"http://owncloud.org/ns\">\n\t\t\t<d:set>\n\t\t\t\t<d:prop>\n\t\t\t\t\t<oc:readMarker>${readMarker}</oc:readMarker>\n\t\t\t\t</d:prop>\n\t\t\t</d:set>\n\t\t\t</d:propertyupdate>`,\n });\n};\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/**\n * Creates a cancelable axios 'request object'.\n *\n * @param {Function} request the axios promise request\n * @return {object}\n */\nconst cancelableRequest = function(request) {\n\tconst controller = new AbortController()\n\tconst signal = controller.signal\n\n\t/**\n\t * Execute the request\n\t *\n\t * @param {string} url the url to send the request to\n\t * @param {object} [options] optional config for the request\n\t */\n\tconst fetch = async function(url, options) {\n\t\tconst response = await request(\n\t\t\turl,\n\t\t\tObject.assign({ signal }, options)\n\t\t)\n\t\treturn response\n\t}\n\n\treturn {\n\t\trequest: fetch,\n\t\tabort: () => controller.abort(),\n\t}\n}\n\nexport default cancelableRequest\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comments.vue?vue&type=style&index=0&id=b2489a3c&prod&lang=scss&scoped=true\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comments.vue?vue&type=style&index=0&id=b2489a3c&prod&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Comments.vue?vue&type=template&id=b2489a3c&scoped=true\"\nimport script from \"./Comments.vue?vue&type=script&lang=js\"\nexport * from \"./Comments.vue?vue&type=script&lang=js\"\nimport style0 from \"./Comments.vue?vue&type=style&index=0&id=b2489a3c&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"b2489a3c\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{directives:[{name:\"observe-visibility\",rawName:\"v-observe-visibility\",value:(_vm.onVisibilityChange),expression:\"onVisibilityChange\"}],staticClass:\"comments\",class:{ 'icon-loading': _vm.isFirstLoading }},[_c('Comment',_vm._b({staticClass:\"comments__writer\",attrs:{\"auto-complete\":_vm.autoComplete,\"resource-type\":_vm.resourceType,\"editor\":true,\"user-data\":_vm.userData,\"resource-id\":_vm.resourceId},on:{\"new\":_vm.onNewComment}},'Comment',_vm.editorData,false)),_vm._v(\" \"),(!_vm.isFirstLoading)?[(!_vm.hasComments && _vm.done)?_c('NcEmptyContent',{staticClass:\"comments__empty\",attrs:{\"name\":_vm.t('comments', 'No comments yet, start the conversation!')},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('MessageReplyTextIcon')]},proxy:true}],null,false,1033639148)}):_c('ul',_vm._l((_vm.comments),function(comment){return _c('Comment',_vm._b({key:comment.props.id,staticClass:\"comments__list\",attrs:{\"tag\":\"li\",\"auto-complete\":_vm.autoComplete,\"resource-type\":_vm.resourceType,\"message\":comment.props.message,\"resource-id\":_vm.resourceId,\"user-data\":_vm.genMentionsData(comment.props.mentions)},on:{\"update:message\":function($event){return _vm.$set(comment.props, \"message\", $event)},\"delete\":_vm.onDelete}},'Comment',comment.props,false))}),1),_vm._v(\" \"),(_vm.loading && !_vm.isFirstLoading)?_c('div',{staticClass:\"comments__info icon-loading\"}):(_vm.hasComments && _vm.done)?_c('div',{staticClass:\"comments__info\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('comments', 'No more messages'))+\"\\n\\t\\t\")]):(_vm.error)?[_c('NcEmptyContent',{staticClass:\"comments__error\",attrs:{\"name\":_vm.error},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('AlertCircleOutlineIcon')]},proxy:true}],null,false,66050004)}),_vm._v(\" \"),_c('NcButton',{staticClass:\"comments__retry\",on:{\"click\":_vm.getComments},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('RefreshIcon')]},proxy:true}],null,false,3924573781)},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('comments', 'Retry'))+\"\\n\\t\\t\\t\")])]:_vm._e()]:_vm._e()],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { translate as t, translatePlural as n } from '@nextcloud/l10n'\nimport { getRequestToken } from '@nextcloud/auth'\nimport Vue from 'vue'\nimport CommentsApp from '../views/Comments.vue'\nimport logger from '../logger.js'\n\n// eslint-disable-next-line camelcase\n__webpack_nonce__ = btoa(getRequestToken())\n\n// Add translates functions\nVue.mixin({\n\tdata() {\n\t\treturn {\n\t\t\tlogger,\n\t\t}\n\t},\n\tmethods: {\n\t\tt,\n\t\tn,\n\t},\n})\n\nexport default class CommentInstance {\n\n\t/**\n\t * Initialize a new Comments instance for the desired type\n\t *\n\t * @param {string} resourceType the comments endpoint type\n\t * @param {object} options the vue options (propsData, parent, el...)\n\t */\n\tconstructor(resourceType = 'files', options = {}) {\n\t\t// Merge options and set `resourceType` property\n\t\toptions = {\n\t\t\t...options,\n\t\t\tpropsData: {\n\t\t\t\t...(options.propsData ?? {}),\n\t\t\t\tresourceType,\n\t\t\t},\n\t\t}\n\t\t// Init Comments component\n\t\tconst View = Vue.extend(CommentsApp)\n\t\treturn new View(options)\n\t}\n\n}\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport CommentsInstance from './services/CommentsInstance.js'\n\n// Init Comments\nif (window.OCA && !window.OCA.Comments) {\n\tObject.assign(window.OCA, { Comments: {} })\n}\n\n// Init Comments App view\nObject.assign(window.OCA.Comments, { View: CommentsInstance })\nconsole.debug('OCA.Comments.View initialized')\n","'use strict';\nmodule.exports = balanced;\nfunction balanced(a, b, str) {\n if (a instanceof RegExp) a = maybeMatch(a, str);\n if (b instanceof RegExp) b = maybeMatch(b, str);\n\n var r = range(a, b, str);\n\n return r && {\n start: r[0],\n end: r[1],\n pre: str.slice(0, r[0]),\n body: str.slice(r[0] + a.length, r[1]),\n post: str.slice(r[1] + b.length)\n };\n}\n\nfunction maybeMatch(reg, str) {\n var m = str.match(reg);\n return m ? m[0] : null;\n}\n\nbalanced.range = range;\nfunction range(a, b, str) {\n var begs, beg, left, right, result;\n var ai = str.indexOf(a);\n var bi = str.indexOf(b, ai + 1);\n var i = ai;\n\n if (ai >= 0 && bi > 0) {\n if(a===b) {\n return [ai, bi];\n }\n begs = [];\n left = str.length;\n\n while (i >= 0 && !result) {\n if (i == ai) {\n begs.push(i);\n ai = str.indexOf(a, i + 1);\n } else if (begs.length == 1) {\n result = [ begs.pop(), bi ];\n } else {\n beg = begs.pop();\n if (beg < left) {\n left = beg;\n right = bi;\n }\n\n bi = str.indexOf(b, i + 1);\n }\n\n i = ai < bi && ai >= 0 ? ai : bi;\n }\n\n if (begs.length) {\n result = [ left, right ];\n }\n }\n\n return result;\n}\n","var balanced = require('balanced-match');\n\nmodule.exports = expandTop;\n\nvar escSlash = '\\0SLASH'+Math.random()+'\\0';\nvar escOpen = '\\0OPEN'+Math.random()+'\\0';\nvar escClose = '\\0CLOSE'+Math.random()+'\\0';\nvar escComma = '\\0COMMA'+Math.random()+'\\0';\nvar escPeriod = '\\0PERIOD'+Math.random()+'\\0';\n\nfunction numeric(str) {\n return parseInt(str, 10) == str\n ? parseInt(str, 10)\n : str.charCodeAt(0);\n}\n\nfunction escapeBraces(str) {\n return str.split('\\\\\\\\').join(escSlash)\n .split('\\\\{').join(escOpen)\n .split('\\\\}').join(escClose)\n .split('\\\\,').join(escComma)\n .split('\\\\.').join(escPeriod);\n}\n\nfunction unescapeBraces(str) {\n return str.split(escSlash).join('\\\\')\n .split(escOpen).join('{')\n .split(escClose).join('}')\n .split(escComma).join(',')\n .split(escPeriod).join('.');\n}\n\n\n// Basically just str.split(\",\"), but handling cases\n// where we have nested braced sections, which should be\n// treated as individual members, like {a,{b,c},d}\nfunction parseCommaParts(str) {\n if (!str)\n return [''];\n\n var parts = [];\n var m = balanced('{', '}', str);\n\n if (!m)\n return str.split(',');\n\n var pre = m.pre;\n var body = m.body;\n var post = m.post;\n var p = pre.split(',');\n\n p[p.length-1] += '{' + body + '}';\n var postParts = parseCommaParts(post);\n if (post.length) {\n p[p.length-1] += postParts.shift();\n p.push.apply(p, postParts);\n }\n\n parts.push.apply(parts, p);\n\n return parts;\n}\n\nfunction expandTop(str) {\n if (!str)\n return [];\n\n // I don't know why Bash 4.3 does this, but it does.\n // Anything starting with {} will have the first two bytes preserved\n // but *only* at the top level, so {},a}b will not expand to anything,\n // but a{},b}c will be expanded to [a}c,abc].\n // One could argue that this is a bug in Bash, but since the goal of\n // this module is to match Bash's rules, we escape a leading {}\n if (str.substr(0, 2) === '{}') {\n str = '\\\\{\\\\}' + str.substr(2);\n }\n\n return expand(escapeBraces(str), true).map(unescapeBraces);\n}\n\nfunction embrace(str) {\n return '{' + str + '}';\n}\nfunction isPadded(el) {\n return /^-?0\\d/.test(el);\n}\n\nfunction lte(i, y) {\n return i <= y;\n}\nfunction gte(i, y) {\n return i >= y;\n}\n\nfunction expand(str, isTop) {\n var expansions = [];\n\n var m = balanced('{', '}', str);\n if (!m) return [str];\n\n // no need to expand pre, since it is guaranteed to be free of brace-sets\n var pre = m.pre;\n var post = m.post.length\n ? expand(m.post, false)\n : [''];\n\n if (/\\$$/.test(m.pre)) { \n for (var k = 0; k < post.length; k++) {\n var expansion = pre+ '{' + m.body + '}' + post[k];\n expansions.push(expansion);\n }\n } else {\n var isNumericSequence = /^-?\\d+\\.\\.-?\\d+(?:\\.\\.-?\\d+)?$/.test(m.body);\n var isAlphaSequence = /^[a-zA-Z]\\.\\.[a-zA-Z](?:\\.\\.-?\\d+)?$/.test(m.body);\n var isSequence = isNumericSequence || isAlphaSequence;\n var isOptions = m.body.indexOf(',') >= 0;\n if (!isSequence && !isOptions) {\n // {a},b}\n if (m.post.match(/,.*\\}/)) {\n str = m.pre + '{' + m.body + escClose + m.post;\n return expand(str);\n }\n return [str];\n }\n\n var n;\n if (isSequence) {\n n = m.body.split(/\\.\\./);\n } else {\n n = parseCommaParts(m.body);\n if (n.length === 1) {\n // x{{a,b}}y ==> x{a}y x{b}y\n n = expand(n[0], false).map(embrace);\n if (n.length === 1) {\n return post.map(function(p) {\n return m.pre + n[0] + p;\n });\n }\n }\n }\n\n // at this point, n is the parts, and we know it's not a comma set\n // with a single entry.\n var N;\n\n if (isSequence) {\n var x = numeric(n[0]);\n var y = numeric(n[1]);\n var width = Math.max(n[0].length, n[1].length)\n var incr = n.length == 3\n ? Math.abs(numeric(n[2]))\n : 1;\n var test = lte;\n var reverse = y < x;\n if (reverse) {\n incr *= -1;\n test = gte;\n }\n var pad = n.some(isPadded);\n\n N = [];\n\n for (var i = x; test(i, y); i += incr) {\n var c;\n if (isAlphaSequence) {\n c = String.fromCharCode(i);\n if (c === '\\\\')\n c = '';\n } else {\n c = String(i);\n if (pad) {\n var need = width - c.length;\n if (need > 0) {\n var z = new Array(need + 1).join('0');\n if (i < 0)\n c = '-' + z + c.slice(1);\n else\n c = z + c;\n }\n }\n }\n N.push(c);\n }\n } else {\n N = [];\n\n for (var j = 0; j < n.length; j++) {\n N.push.apply(N, expand(n[j], false));\n }\n }\n\n for (var j = 0; j < N.length; j++) {\n for (var k = 0; k < post.length; k++) {\n var expansion = pre + N[j] + post[k];\n if (!isTop || isSequence || expansion)\n expansions.push(expansion);\n }\n }\n }\n\n return expansions;\n}\n\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.comment[data-v-47c0e61c]{display:flex;gap:8px;padding:5px 10px}.comment__side[data-v-47c0e61c]{display:flex;align-items:flex-start;padding-top:6px}.comment__body[data-v-47c0e61c]{display:flex;flex-grow:1;flex-direction:column}.comment__header[data-v-47c0e61c]{display:flex;align-items:center;min-height:44px}.comment__actions[data-v-47c0e61c]{margin-left:10px !important}.comment__author[data-v-47c0e61c]{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:var(--color-text-maxcontrast)}.comment_loading[data-v-47c0e61c],.comment__timestamp[data-v-47c0e61c]{margin-left:auto;text-align:right;white-space:nowrap;color:var(--color-text-maxcontrast)}.comment__editor-group[data-v-47c0e61c]{position:relative}.comment__editor-description[data-v-47c0e61c]{color:var(--color-text-maxcontrast);padding-block:var(--default-grid-baseline)}.comment__submit[data-v-47c0e61c]{position:absolute !important;bottom:0;right:0}.comment__message[data-v-47c0e61c]{white-space:pre-wrap;word-break:break-word;max-height:70px;overflow:hidden;margin-top:-6px}.comment__message--expanded[data-v-47c0e61c]{max-height:none;overflow:visible}.rich-contenteditable__input[data-v-47c0e61c]{min-height:44px;margin:0;padding:10px}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/comments/src/components/Comment.vue\"],\"names\":[],\"mappings\":\"AAKA,0BACC,YAAA,CACA,OAAA,CACA,gBAAA,CAEA,gCACC,YAAA,CACA,sBAAA,CACA,eAAA,CAGD,gCACC,YAAA,CACA,WAAA,CACA,qBAAA,CAGD,kCACC,YAAA,CACA,kBAAA,CACA,eAAA,CAGD,mCACC,2BAAA,CAGD,kCACC,eAAA,CACA,kBAAA,CACA,sBAAA,CACA,mCAAA,CAGD,uEAEC,gBAAA,CACA,gBAAA,CACA,kBAAA,CACA,mCAAA,CAGD,wCACC,iBAAA,CAGD,8CACC,mCAAA,CACA,0CAAA,CAGD,kCACC,4BAAA,CACA,QAAA,CACA,OAAA,CAGD,mCACC,oBAAA,CACA,qBAAA,CACA,eAAA,CACA,eAAA,CACA,eAAA,CACA,6CACC,eAAA,CACA,gBAAA,CAKH,8CACC,eAAA,CACA,QAAA,CACA,YA3EiB\",\"sourcesContent\":[\"\\n@use \\\"sass:math\\\";\\n\\n$comment-padding: 10px;\\n\\n.comment {\\n\\tdisplay: flex;\\n\\tgap: 8px;\\n\\tpadding: 5px $comment-padding;\\n\\n\\t&__side {\\n\\t\\tdisplay: flex;\\n\\t\\talign-items: flex-start;\\n\\t\\tpadding-top: 6px;\\n\\t}\\n\\n\\t&__body {\\n\\t\\tdisplay: flex;\\n\\t\\tflex-grow: 1;\\n\\t\\tflex-direction: column;\\n\\t}\\n\\n\\t&__header {\\n\\t\\tdisplay: flex;\\n\\t\\talign-items: center;\\n\\t\\tmin-height: 44px;\\n\\t}\\n\\n\\t&__actions {\\n\\t\\tmargin-left: $comment-padding !important;\\n\\t}\\n\\n\\t&__author {\\n\\t\\toverflow: hidden;\\n\\t\\twhite-space: nowrap;\\n\\t\\ttext-overflow: ellipsis;\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t}\\n\\n\\t&_loading,\\n\\t&__timestamp {\\n\\t\\tmargin-left: auto;\\n\\t\\ttext-align: right;\\n\\t\\twhite-space: nowrap;\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t}\\n\\n\\t&__editor-group {\\n\\t\\tposition: relative;\\n\\t}\\n\\n\\t&__editor-description {\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\tpadding-block: var(--default-grid-baseline);\\n\\t}\\n\\n\\t&__submit {\\n\\t\\tposition: absolute !important;\\n\\t\\tbottom: 0;\\n\\t\\tright: 0;\\n\\t}\\n\\n\\t&__message {\\n\\t\\twhite-space: pre-wrap;\\n\\t\\tword-break: break-word;\\n\\t\\tmax-height: 70px;\\n\\t\\toverflow: hidden;\\n\\t\\tmargin-top: -6px;\\n\\t\\t&--expanded {\\n\\t\\t\\tmax-height: none;\\n\\t\\t\\toverflow: visible;\\n\\t\\t}\\n\\t}\\n}\\n\\n.rich-contenteditable__input {\\n\\tmin-height: 44px;\\n\\tmargin: 0;\\n\\tpadding: $comment-padding;\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.comments[data-v-b2489a3c]{min-height:100%;display:flex;flex-direction:column}.comments__empty[data-v-b2489a3c],.comments__error[data-v-b2489a3c]{flex:1 0}.comments__retry[data-v-b2489a3c]{margin:0 auto}.comments__info[data-v-b2489a3c]{height:60px;color:var(--color-text-maxcontrast);text-align:center;line-height:60px}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/comments/src/views/Comments.vue\"],\"names\":[],\"mappings\":\"AACA,2BACC,eAAA,CACA,YAAA,CACA,qBAAA,CAEA,oEAEC,QAAA,CAGD,kCACC,aAAA,CAGD,iCACC,WAAA,CACA,mCAAA,CACA,iBAAA,CACA,gBAAA\",\"sourcesContent\":[\"\\n.comments {\\n\\tmin-height: 100%;\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\n\\t&__empty,\\n\\t&__error {\\n\\t\\tflex: 1 0;\\n\\t}\\n\\n\\t&__retry {\\n\\t\\tmargin: 0 auto;\\n\\t}\\n\\n\\t&__info {\\n\\t\\theight: 60px;\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\ttext-align: center;\\n\\t\\tline-height: 60px;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","'use strict';\n\nconst validator = require('./validator');\nconst XMLParser = require('./xmlparser/XMLParser');\nconst XMLBuilder = require('./xmlbuilder/json2xml');\n\nmodule.exports = {\n XMLParser: XMLParser,\n XMLValidator: validator,\n XMLBuilder: XMLBuilder\n}","/**\n* @license nested-property https://github.com/cosmosio/nested-property\n*\n* The MIT License (MIT)\n*\n* Copyright (c) 2014-2020 Olivier Scherrer <pode.fr@gmail.com>\n*/\n\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _wrapNativeSuper(Class) { var _cache = typeof Map === \"function\" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== \"function\") { throw new TypeError(\"Super expression must either be null or a function\"); } if (typeof _cache !== \"undefined\") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }\n\nfunction _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _isNativeFunction(fn) { return Function.toString.call(fn).indexOf(\"[native code]\") !== -1; }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nvar ARRAY_WILDCARD = \"+\";\nvar PATH_DELIMITER = \".\";\n\nvar ObjectPrototypeMutationError = /*#__PURE__*/function (_Error) {\n _inherits(ObjectPrototypeMutationError, _Error);\n\n function ObjectPrototypeMutationError(params) {\n var _this;\n\n _classCallCheck(this, ObjectPrototypeMutationError);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(ObjectPrototypeMutationError).call(this, params));\n _this.name = \"ObjectPrototypeMutationError\";\n return _this;\n }\n\n return ObjectPrototypeMutationError;\n}(_wrapNativeSuper(Error));\n\nmodule.exports = {\n set: setNestedProperty,\n get: getNestedProperty,\n has: hasNestedProperty,\n hasOwn: function hasOwn(object, property, options) {\n return this.has(object, property, options || {\n own: true\n });\n },\n isIn: isInNestedProperty,\n ObjectPrototypeMutationError: ObjectPrototypeMutationError\n};\n/**\n * Get the property of an object nested in one or more objects or array\n * Given an object such as a.b.c.d = 5, getNestedProperty(a, \"b.c.d\") will return 5.\n * It also works through arrays. Given a nested array such as a[0].b = 5, getNestedProperty(a, \"0.b\") will return 5.\n * For accessing nested properties through all items in an array, you may use the array wildcard \"+\".\n * For instance, getNestedProperty([{a:1}, {a:2}, {a:3}], \"+.a\") will return [1, 2, 3]\n * @param {Object} object the object to get the property from\n * @param {String} property the path to the property as a string\n * @returns the object or the the property value if found\n */\n\nfunction getNestedProperty(object, property) {\n if (_typeof(object) != \"object\" || object === null) {\n return object;\n }\n\n if (typeof property == \"undefined\") {\n return object;\n }\n\n if (typeof property == \"number\") {\n return object[property];\n }\n\n try {\n return traverse(object, property, function _getNestedProperty(currentObject, currentProperty) {\n return currentObject[currentProperty];\n });\n } catch (err) {\n return object;\n }\n}\n/**\n * Tell if a nested object has a given property (or array a given index)\n * given an object such as a.b.c.d = 5, hasNestedProperty(a, \"b.c.d\") will return true.\n * It also returns true if the property is in the prototype chain.\n * @param {Object} object the object to get the property from\n * @param {String} property the path to the property as a string\n * @param {Object} options:\n * - own: set to reject properties from the prototype\n * @returns true if has (property in object), false otherwise\n */\n\n\nfunction hasNestedProperty(object, property) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (_typeof(object) != \"object\" || object === null) {\n return false;\n }\n\n if (typeof property == \"undefined\") {\n return false;\n }\n\n if (typeof property == \"number\") {\n return property in object;\n }\n\n try {\n var has = false;\n traverse(object, property, function _hasNestedProperty(currentObject, currentProperty, segments, index) {\n if (isLastSegment(segments, index)) {\n if (options.own) {\n has = currentObject.hasOwnProperty(currentProperty);\n } else {\n has = currentProperty in currentObject;\n }\n } else {\n return currentObject && currentObject[currentProperty];\n }\n });\n return has;\n } catch (err) {\n return false;\n }\n}\n/**\n * Set the property of an object nested in one or more objects\n * If the property doesn't exist, it gets created.\n * @param {Object} object\n * @param {String} property\n * @param value the value to set\n * @returns object if no assignment was made or the value if the assignment was made\n */\n\n\nfunction setNestedProperty(object, property, value) {\n if (_typeof(object) != \"object\" || object === null) {\n return object;\n }\n\n if (typeof property == \"undefined\") {\n return object;\n }\n\n if (typeof property == \"number\") {\n object[property] = value;\n return object[property];\n }\n\n try {\n return traverse(object, property, function _setNestedProperty(currentObject, currentProperty, segments, index) {\n if (currentObject === Reflect.getPrototypeOf({})) {\n throw new ObjectPrototypeMutationError(\"Attempting to mutate Object.prototype\");\n }\n\n if (!currentObject[currentProperty]) {\n var nextPropIsNumber = Number.isInteger(Number(segments[index + 1]));\n var nextPropIsArrayWildcard = segments[index + 1] === ARRAY_WILDCARD;\n\n if (nextPropIsNumber || nextPropIsArrayWildcard) {\n currentObject[currentProperty] = [];\n } else {\n currentObject[currentProperty] = {};\n }\n }\n\n if (isLastSegment(segments, index)) {\n currentObject[currentProperty] = value;\n }\n\n return currentObject[currentProperty];\n });\n } catch (err) {\n if (err instanceof ObjectPrototypeMutationError) {\n // rethrow\n throw err;\n } else {\n return object;\n }\n }\n}\n/**\n * Tell if an object is on the path to a nested property\n * If the object is on the path, and the path exists, it returns true, and false otherwise.\n * @param {Object} object to get the nested property from\n * @param {String} property name of the nested property\n * @param {Object} objectInPath the object to check\n * @param {Object} options:\n * - validPath: return false if the path is invalid, even if the object is in the path\n * @returns {boolean} true if the object is on the path\n */\n\n\nfunction isInNestedProperty(object, property, objectInPath) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n\n if (_typeof(object) != \"object\" || object === null) {\n return false;\n }\n\n if (typeof property == \"undefined\") {\n return false;\n }\n\n try {\n var isIn = false,\n pathExists = false;\n traverse(object, property, function _isInNestedProperty(currentObject, currentProperty, segments, index) {\n isIn = isIn || currentObject === objectInPath || !!currentObject && currentObject[currentProperty] === objectInPath;\n pathExists = isLastSegment(segments, index) && _typeof(currentObject) === \"object\" && currentProperty in currentObject;\n return currentObject && currentObject[currentProperty];\n });\n\n if (options.validPath) {\n return isIn && pathExists;\n } else {\n return isIn;\n }\n } catch (err) {\n return false;\n }\n}\n\nfunction traverse(object, path) {\n var callback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {};\n var segments = path.split(PATH_DELIMITER);\n var length = segments.length;\n\n var _loop = function _loop(idx) {\n var currentSegment = segments[idx];\n\n if (!object) {\n return {\n v: void 0\n };\n }\n\n if (currentSegment === ARRAY_WILDCARD) {\n if (Array.isArray(object)) {\n return {\n v: object.map(function (value, index) {\n var remainingSegments = segments.slice(idx + 1);\n\n if (remainingSegments.length > 0) {\n return traverse(value, remainingSegments.join(PATH_DELIMITER), callback);\n } else {\n return callback(object, index, segments, idx);\n }\n })\n };\n } else {\n var pathToHere = segments.slice(0, idx).join(PATH_DELIMITER);\n throw new Error(\"Object at wildcard (\".concat(pathToHere, \") is not an array\"));\n }\n } else {\n object = callback(object, currentSegment, segments, idx);\n }\n };\n\n for (var idx = 0; idx < length; idx++) {\n var _ret = _loop(idx);\n\n if (_typeof(_ret) === \"object\") return _ret.v;\n }\n\n return object;\n}\n\nfunction isLastSegment(segments, index) {\n return segments.length === index + 1;\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\nvar util = require('util');\nvar isString = function (x) {\n return typeof x === 'string';\n};\n\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n var res = [];\n for (var i = 0; i < parts.length; i++) {\n var p = parts[i];\n\n // ignore empty parts\n if (!p || p === '.')\n continue;\n\n if (p === '..') {\n if (res.length && res[res.length - 1] !== '..') {\n res.pop();\n } else if (allowAboveRoot) {\n res.push('..');\n }\n } else {\n res.push(p);\n }\n }\n\n return res;\n}\n\n// Split a filename into [root, dir, basename, ext], unix version\n// 'root' is just a slash, or nothing.\nvar splitPathRe =\n /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\nvar posix = {};\n\n\nfunction posixSplitPath(filename) {\n return splitPathRe.exec(filename).slice(1);\n}\n\n\n// path.resolve([from ...], to)\n// posix version\nposix.resolve = function() {\n var resolvedPath = '',\n resolvedAbsolute = false;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path = (i >= 0) ? arguments[i] : process.cwd();\n\n // Skip empty and invalid entries\n if (!isString(path)) {\n throw new TypeError('Arguments to path.resolve must be strings');\n } else if (!path) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charAt(0) === '/';\n }\n\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n\n // Normalize the path\n resolvedPath = normalizeArray(resolvedPath.split('/'),\n !resolvedAbsolute).join('/');\n\n return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n};\n\n// path.normalize(path)\n// posix version\nposix.normalize = function(path) {\n var isAbsolute = posix.isAbsolute(path),\n trailingSlash = path.substr(-1) === '/';\n\n // Normalize the path\n path = normalizeArray(path.split('/'), !isAbsolute).join('/');\n\n if (!path && !isAbsolute) {\n path = '.';\n }\n if (path && trailingSlash) {\n path += '/';\n }\n\n return (isAbsolute ? '/' : '') + path;\n};\n\n// posix version\nposix.isAbsolute = function(path) {\n return path.charAt(0) === '/';\n};\n\n// posix version\nposix.join = function() {\n var path = '';\n for (var i = 0; i < arguments.length; i++) {\n var segment = arguments[i];\n if (!isString(segment)) {\n throw new TypeError('Arguments to path.join must be strings');\n }\n if (segment) {\n if (!path) {\n path += segment;\n } else {\n path += '/' + segment;\n }\n }\n }\n return posix.normalize(path);\n};\n\n\n// path.relative(from, to)\n// posix version\nposix.relative = function(from, to) {\n from = posix.resolve(from).substr(1);\n to = posix.resolve(to).substr(1);\n\n function trim(arr) {\n var start = 0;\n for (; start < arr.length; start++) {\n if (arr[start] !== '') break;\n }\n\n var end = arr.length - 1;\n for (; end >= 0; end--) {\n if (arr[end] !== '') break;\n }\n\n if (start > end) return [];\n return arr.slice(start, end + 1);\n }\n\n var fromParts = trim(from.split('/'));\n var toParts = trim(to.split('/'));\n\n var length = Math.min(fromParts.length, toParts.length);\n var samePartsLength = length;\n for (var i = 0; i < length; i++) {\n if (fromParts[i] !== toParts[i]) {\n samePartsLength = i;\n break;\n }\n }\n\n var outputParts = [];\n for (var i = samePartsLength; i < fromParts.length; i++) {\n outputParts.push('..');\n }\n\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n return outputParts.join('/');\n};\n\n\nposix._makeLong = function(path) {\n return path;\n};\n\n\nposix.dirname = function(path) {\n var result = posixSplitPath(path),\n root = result[0],\n dir = result[1];\n\n if (!root && !dir) {\n // No dirname whatsoever\n return '.';\n }\n\n if (dir) {\n // It has a dirname, strip trailing slash\n dir = dir.substr(0, dir.length - 1);\n }\n\n return root + dir;\n};\n\n\nposix.basename = function(path, ext) {\n var f = posixSplitPath(path)[2];\n // TODO: make this comparison case-insensitive on windows?\n if (ext && f.substr(-1 * ext.length) === ext) {\n f = f.substr(0, f.length - ext.length);\n }\n return f;\n};\n\n\nposix.extname = function(path) {\n return posixSplitPath(path)[3];\n};\n\n\nposix.format = function(pathObject) {\n if (!util.isObject(pathObject)) {\n throw new TypeError(\n \"Parameter 'pathObject' must be an object, not \" + typeof pathObject\n );\n }\n\n var root = pathObject.root || '';\n\n if (!isString(root)) {\n throw new TypeError(\n \"'pathObject.root' must be a string or undefined, not \" +\n typeof pathObject.root\n );\n }\n\n var dir = pathObject.dir ? pathObject.dir + posix.sep : '';\n var base = pathObject.base || '';\n return dir + base;\n};\n\n\nposix.parse = function(pathString) {\n if (!isString(pathString)) {\n throw new TypeError(\n \"Parameter 'pathString' must be a string, not \" + typeof pathString\n );\n }\n var allParts = posixSplitPath(pathString);\n if (!allParts || allParts.length !== 4) {\n throw new TypeError(\"Invalid path '\" + pathString + \"'\");\n }\n allParts[1] = allParts[1] || '';\n allParts[2] = allParts[2] || '';\n allParts[3] = allParts[3] || '';\n\n return {\n root: allParts[0],\n dir: allParts[0] + allParts[1].slice(0, allParts[1].length - 1),\n base: allParts[2],\n ext: allParts[3],\n name: allParts[2].slice(0, allParts[2].length - allParts[3].length)\n };\n};\n\n\nposix.sep = '/';\nposix.delimiter = ':';\n\n module.exports = posix;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + chunkId + \"-\" + chunkId + \".js?v=\" + {\"1110\":\"2909496e7e35d6258214\",\"5528\":\"110b147bc8680f8c83f4\",\"8902\":\"bb2f9be8a039f8db7e58\"}[chunkId] + \"\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 7062;","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src;\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) {\n\t\t\tvar i = scripts.length - 1;\n\t\t\twhile (i > -1 && (!scriptUrl || !/^http(s?):/.test(scriptUrl))) scriptUrl = scripts[i--].src;\n\t\t}\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t7062: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\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__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [4208], () => (__webpack_require__(11717)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","inProgress","dataWebpackPrefix","_typeof","obj","Symbol","iterator","constructor","prototype","_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","_toConsumableArray","arr","Array","isArray","arr2","_arrayWithoutHoles","iter","toString","call","from","_iterableToArray","TypeError","_nonIterableSpread","deepEqual","val1","val2","VisibilityState","el","options","vnode","instance","Constructor","_classCallCheck","this","observer","frozen","createObserver","protoProps","value","_this","destroyObserver","callback","result","entry","once","throttle","_leading","throttleOptions","leading","delay","timeout","lastState","currentArgs","arguments","undefined","throttled","state","_len","args","_key","apply","concat","clearTimeout","setTimeout","_clear","oldResult","IntersectionObserver","entries","intersectingEntry","find","e","isIntersecting","intersectionRatio","threshold","intersection","context","$nextTick","observe","disconnect","get","bind","_ref2","console","warn","_vue_visibilityState","unbind","ObserveVisibility","update","_ref3","oldValue","version","install","Vue","directive","GlobalVue","window","g","use","name","emits","title","type","String","fillColor","default","size","Number","_vm","_c","_self","_b","staticClass","attrs","on","$event","$emit","$attrs","_v","_s","_e","timestamp","required","format","computed","moment","unix","formatted","fromNow","getRootPath","generateRemoteUrl","decodeHtmlEntities","passes","parser","DOMParser","decoded","parseFromString","documentElement","textContent","client","createClient","setHeaders","token","requesttoken","onRequestTokenUpdate","getRequestToken","getLoggerBuilder","setApp","detectUser","build","id","message","resourceId","resourceType","data","deleted","editing","loading","methods","onEdit","onEditCancel","updateLocalMessage","onEditComment","async","commentId","commentPath","join","customRequest","assign","method","EditComment","logger","debug","error","showError","t","onDeleteWithUndo","timeOutDelete","onDelete","TOAST_UNDO_TIMEOUT","showUndo","deleteFile","DeleteComment","onNewComment","newComment","resourcePath","response","axios","post","actorDisplayName","getCurrentUser","displayName","actorId","uid","actorType","creationDateTime","Date","toUTCString","objectType","verb","parseInt","headers","split","pop","comment","stat","details","NewComment","localMessage","components","NcActionButton","NcActions","NcActionSeparator","ArrowRight","NcAvatar","NcButton","Moment","NcRichContenteditable","mixins","RichEditorMixin","CommentMixin","inheritAttrs","editor","Boolean","autoComplete","Function","tag","expanded","submitted","isOwnComment","renderedContent","isEmptyMessage","renderContent","trim","watch","beforeMount","onSubmit","$refs","$el","focus","onExpand","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","locals","directives","rawName","expression","class","scopedSlots","_u","fn","proxy","preventDefault","ref","userData","domProps","posixClasses","braceEscape","s","replace","rangesToString","ranges","parseClass","glob","position","pos","charAt","Error","negs","sawStart","uflag","escaping","negate","endPos","rangeStart","WHILE","c","cls","unip","u","neg","startsWith","push","test","slice","sranges","snegs","p","pattern","assertValidPattern","nocomment","Minimatch","match","starDotExtRE","starDotExtTest","ext","f","endsWith","starDotExtTestDot","starDotExtTestNocase","toLowerCase","starDotExtTestNocaseDot","starDotStarRE","starDotStarTest","includes","starDotStarTestDot","dotStarRE","dotStarTest","starRE","starTest","starTestDot","qmarksRE","qmarksTestNocase","$0","noext","qmarksTestNoExt","qmarksTestNocaseDot","qmarksTestNoExtDot","qmarksTestDot","qmarksTest","len","defaultPlatform","process","env","__MINIMATCH_TESTING_PLATFORM__","platform","sep","GLOBSTAR","plTypes","open","close","qmark","star","charSet","reduce","set","reSpecials","addPatternStartSet","filter","a","b","defaults","def","keys","orig","super","unescape","escape","makeRe","braceExpand","list","nobrace","mm","nonull","globMagic","regExpEscape","windowsPathsNoEscape","nonegate","empty","preserveMultipleSlashes","partial","globSet","globParts","nocase","isWindows","windowsNoMagicRoot","regexp","allowWindowsEscape","make","hasMagic","magicalBraces","part","_","parseNegate","Set","rawGlobParts","map","slashSplit","preprocess","__","isUNC","isDrive","ss","parse","indexOf","noglobstar","j","optimizationLevel","firstPhasePreProcess","secondPhasePreProcess","levelOneOptimize","adjascentGlobstarOptimize","parts","gs","splice","prev","levelTwoFileOptimize","didSomething","dd","gss","next","p2","other","splin","matched","partsMatch","emptyGSMatch","ai","bi","which","dot","negateOffset","matchOne","file","fileUNC","patternUNC","fd","pd","fi","pi","fl","pl","fr","pr","swallowee","hit","m","fastTest","re","patternListStack","negativeLists","stateChar","dotTravAllowed","dotFileAllowed","subPatternStart","clearStateChar","plEntry","start","reStart","reEnd","src","needUflag","consumed","magic","tail","$1","$2","addPatternStart","n","nl","nlBefore","nlFirst","nlAfter","nlLast","closeParensBefore","openParensBefore","cleanAfter","nocaseMagicOnly","toUpperCase","flags","_glob","_src","RegExp","er","twoStar","pp","forEach","ex","ff","filename","matchBase","flipNegate","convertResponseHeaders","output","PropertyType","getComments","_ref","_options$limit","datetime","toISOString","limit","offset","responseData","text","parseXML","isDetailed","status","statusText","processResponsePayload","getDirectoryFiles","multistatus","responseItems","item","propstat","prop","getlastmodified","lastMod","getcontentlength","rawSize","resourcetype","getcontenttype","mimeType","getetag","etag","collection","basename","lastmod","mime","prepareFileFromProps","defineComponent","editorData","search","generateOcsUrl","params","itemType","itemId","sorter","loadState","ocs","user","values","genMentionsData","mentions","flat","mention","_getCurrentUser","mentionId","icon","label","mentionDisplayName","source","primary","VTooltip","VueObserveVisibility","Comment","NcEmptyContent","RefreshIcon","MessageReplyTextIcon","AlertCircleOutlineIcon","CommentView","done","comments","cancelRequest","hasComments","isFirstLoading","onVisibilityChange","isVisible","markCommentsAsRead","date","readMarker","resetState","onScrollBottomReached","request","abort","controller","AbortController","signal","url","cancelableRequest","unshift","index","findIndex","_l","$set","__webpack_nonce__","btoa","mixin","OCA","Comments","View","_options$propsData","propsData","extend","CommentsApp","balanced","str","maybeMatch","r","range","end","pre","body","reg","begs","beg","left","right","module","exports","substr","expand","escSlash","escOpen","escClose","escComma","escPeriod","escapeBraces","unescapeBraces","Math","random","numeric","charCodeAt","parseCommaParts","postParts","shift","embrace","isPadded","lte","y","gte","isTop","expansions","k","expansion","N","isNumericSequence","isAlphaSequence","isSequence","isOptions","x","width","max","incr","abs","pad","some","fromCharCode","need","z","___CSS_LOADER_EXPORT___","validator","XMLParser","XMLBuilder","XMLValidator","_wrapNativeSuper","Class","_cache","Map","has","Wrapper","_construct","_getPrototypeOf","create","_setPrototypeOf","Parent","Reflect","construct","sham","Proxy","_isNativeReflectConstruct","o","setPrototypeOf","__proto__","getPrototypeOf","ObjectPrototypeMutationError","_Error","self","ReferenceError","_assertThisInitialized","_possibleConstructorReturn","subClass","superClass","_inherits","traverse","object","path","segments","_loop","idx","currentSegment","v","remainingSegments","pathToHere","_ret","isLastSegment","property","currentObject","currentProperty","nextPropIsNumber","isInteger","nextPropIsArrayWildcard","err","own","hasOwnProperty","hasOwn","isIn","objectInPath","pathExists","validPath","util","isString","normalizeArray","allowAboveRoot","res","splitPathRe","posix","posixSplitPath","exec","resolve","resolvedPath","resolvedAbsolute","cwd","normalize","isAbsolute","trailingSlash","segment","relative","to","fromParts","toParts","min","samePartsLength","outputParts","_makeLong","dirname","root","dir","extname","pathObject","isObject","base","pathString","allParts","delimiter","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","loaded","__webpack_modules__","O","chunkIds","priority","notFulfilled","Infinity","fulfilled","every","getter","__esModule","d","definition","chunkId","Promise","all","promises","globalThis","l","script","needAttach","scripts","document","getElementsByTagName","getAttribute","createElement","charset","nc","setAttribute","onScriptComplete","event","onerror","onload","doneFns","parentNode","removeChild","head","appendChild","toStringTag","nmd","paths","children","scriptUrl","importScripts","location","currentScript","baseURI","href","installedChunks","installedChunkData","promise","reject","errorType","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"file":"comments-comments-app.js?v=6a2b6eba5237dd34eb0b","mappings":";UAAIA,ECAAC,EACAC,wGCDJ,SAASC,EAAQC,GAWf,OATED,EADoB,mBAAXE,QAAoD,iBAApBA,OAAOC,SACtC,SAAUF,GAClB,cAAcA,CAChB,EAEU,SAAUA,GAClB,OAAOA,GAAyB,mBAAXC,QAAyBD,EAAIG,cAAgBF,QAAUD,IAAQC,OAAOG,UAAY,gBAAkBJ,CAC3H,EAGKD,EAAQC,EACjB,CAQA,SAASK,EAAkBC,EAAQC,GACjC,IAAK,IAAIC,EAAI,EAAGA,EAAID,EAAME,OAAQD,IAAK,CACrC,IAAIE,EAAaH,EAAMC,GACvBE,EAAWC,WAAaD,EAAWC,aAAc,EACjDD,EAAWE,cAAe,EACtB,UAAWF,IAAYA,EAAWG,UAAW,GACjDC,OAAOC,eAAeT,EAAQI,EAAWM,IAAKN,EAChD,CACF,CAQA,SAASO,EAAmBC,GAC1B,OAGF,SAA4BA,GAC1B,GAAIC,MAAMC,QAAQF,GAAM,CACtB,IAAK,IAAIV,EAAI,EAAGa,EAAO,IAAIF,MAAMD,EAAIT,QAASD,EAAIU,EAAIT,OAAQD,IAAKa,EAAKb,GAAKU,EAAIV,GAEjF,OAAOa,CACT,CACF,CATSC,CAAmBJ,IAW5B,SAA0BK,GACxB,GAAItB,OAAOC,YAAYY,OAAOS,IAAkD,uBAAzCT,OAAOV,UAAUoB,SAASC,KAAKF,GAAgC,OAAOJ,MAAMO,KAAKH,EAC1H,CAboCI,CAAiBT,IAerD,WACE,MAAM,IAAIU,UAAU,kDACtB,CAjB6DC,EAC7D,CAuEA,SAASC,EAAUC,EAAMC,GACvB,GAAID,IAASC,EAAM,OAAO,EAE1B,GAAsB,WAAlBjC,EAAQgC,GAAoB,CAC9B,IAAK,IAAIf,KAAOe,EACd,IAAKD,EAAUC,EAAKf,GAAMgB,EAAKhB,IAC7B,OAAO,EAIX,OAAO,CACT,CAEA,OAAO,CACT,CAEA,IAAIiB,EAEJ,WACE,SAASA,EAAgBC,EAAIC,EAASC,IAlHxC,SAAyBC,EAAUC,GACjC,KAAMD,aAAoBC,GACxB,MAAM,IAAIV,UAAU,oCAExB,CA+GIW,CAAgBC,KAAMP,GAEtBO,KAAKN,GAAKA,EACVM,KAAKC,SAAW,KAChBD,KAAKE,QAAS,EACdF,KAAKG,eAAeR,EAASC,EAC/B,CAzGF,IAAsBE,EAAaM,EAiMjC,OAjMoBN,EA2GPL,EA3GoBW,EA2GH,CAAC,CAC7B5B,IAAK,iBACL6B,MAAO,SAAwBV,EAASC,GACtC,IAAIU,EAAQN,KAMZ,GAJIA,KAAKC,UACPD,KAAKO,mBAGHP,KAAKE,OAAT,CA1FN,IAAwBG,EAwGlB,GAbAL,KAAKL,QAxFY,mBAHCU,EA2FYV,GAtFtB,CACRa,SAAUH,GAIFA,EAmFRL,KAAKQ,SAAW,SAAUC,EAAQC,GAChCJ,EAAMX,QAAQa,SAASC,EAAQC,GAE3BD,GAAUH,EAAMX,QAAQgB,OAC1BL,EAAMJ,QAAS,EAEfI,EAAMC,kBAEV,EAGIP,KAAKQ,UAAYR,KAAKL,QAAQiB,SAAU,CAC1C,IACIC,GADOb,KAAKL,QAAQmB,iBAAmB,CAAC,GACxBC,QAEpBf,KAAKQ,SA7Fb,SAAkBA,EAAUQ,GAC1B,IACIC,EACAC,EACAC,EAHAxB,EAAUyB,UAAUnD,OAAS,QAAsBoD,IAAjBD,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAK/EE,EAAY,SAAmBC,GACjC,IAAK,IAAIC,EAAOJ,UAAUnD,OAAQwD,EAAO,IAAI9C,MAAM6C,EAAO,EAAIA,EAAO,EAAI,GAAIE,EAAO,EAAGA,EAAOF,EAAME,IAClGD,EAAKC,EAAO,GAAKN,UAAUM,GAI7B,GADAP,EAAcM,GACVR,GAAWM,IAAUL,EAAzB,CACA,IAAIH,EAAUpB,EAAQoB,QAEC,mBAAZA,IACTA,EAAUA,EAAQQ,EAAOL,IAGrBD,GAAWM,IAAUL,IAAcH,GACvCP,EAASmB,WAAM,EAAQ,CAACJ,GAAOK,OAAOnD,EAAmB0C,KAG3DD,EAAYK,EACZM,aAAaZ,GACbA,EAAUa,YAAW,WACnBtB,EAASmB,WAAM,EAAQ,CAACJ,GAAOK,OAAOnD,EAAmB0C,KACzDF,EAAU,CACZ,GAAGD,EAhBuC,CAiB5C,EAOA,OALAM,EAAUS,OAAS,WACjBF,aAAaZ,GACbA,EAAU,IACZ,EAEOK,CACT,CAwDwBV,CAASZ,KAAKQ,SAAUR,KAAKL,QAAQiB,SAAU,CAC7DG,QAAS,SAAiBQ,GACxB,MAAoB,SAAbV,GAAoC,YAAbA,GAA0BU,GAAsB,WAAbV,IAA0BU,CAC7F,GAEJ,CAEAvB,KAAKgC,eAAYX,EACjBrB,KAAKC,SAAW,IAAIgC,sBAAqB,SAAUC,GACjD,IAAIxB,EAAQwB,EAAQ,GAEpB,GAAIA,EAAQjE,OAAS,EAAG,CACtB,IAAIkE,EAAoBD,EAAQE,MAAK,SAAUC,GAC7C,OAAOA,EAAEC,cACX,IAEIH,IACFzB,EAAQyB,EAEZ,CAEA,GAAI7B,EAAME,SAAU,CAElB,IAAIC,EAASC,EAAM4B,gBAAkB5B,EAAM6B,mBAAqBjC,EAAMkC,UACtE,GAAI/B,IAAWH,EAAM0B,UAAW,OAChC1B,EAAM0B,UAAYvB,EAElBH,EAAME,SAASC,EAAQC,EACzB,CACF,GAAGV,KAAKL,QAAQ8C,cAEhB7C,EAAM8C,QAAQC,WAAU,WAClBrC,EAAML,UACRK,EAAML,SAAS2C,QAAQtC,EAAMZ,GAEjC,GArDuB,CAsDzB,GACC,CACDlB,IAAK,kBACL6B,MAAO,WACDL,KAAKC,WACPD,KAAKC,SAAS4C,aACd7C,KAAKC,SAAW,MAIdD,KAAKQ,UAAYR,KAAKQ,SAASuB,SACjC/B,KAAKQ,SAASuB,SAEd/B,KAAKQ,SAAW,KAEpB,GACC,CACDhC,IAAK,YACLsE,IAAK,WACH,OAAO9C,KAAKL,QAAQ8C,cAA+D,iBAAxCzC,KAAKL,QAAQ8C,aAAaD,UAAyBxC,KAAKL,QAAQ8C,aAAaD,UAAY,CACtI,IA7LEpC,GAAYvC,EAAkBiC,EAAYlC,UAAWwC,GAgMlDX,CACT,CAjGA,GAmGA,SAASsD,EAAKrD,EAAIsD,EAAOpD,GACvB,IAAIS,EAAQ2C,EAAM3C,MAClB,GAAKA,EAEL,GAAoC,oBAAzB4B,qBACTgB,EAAQC,KAAK,0LACR,CACL,IAAI3B,EAAQ,IAAI9B,EAAgBC,EAAIW,EAAOT,GAC3CF,EAAGyD,qBAAuB5B,CAC5B,CACF,CAsBA,SAAS6B,EAAO1D,GACd,IAAI6B,EAAQ7B,EAAGyD,qBAEX5B,IACFA,EAAMhB,yBACCb,EAAGyD,qBAEd,CAEA,IAAIE,EAAoB,CACtBN,KAAMA,EACNO,OA/BF,SAAgB5D,EAAI6D,EAAO3D,GACzB,IAAIS,EAAQkD,EAAMlD,MAElB,IAAIf,EAAUe,EADCkD,EAAMC,UACrB,CACA,IAAIjC,EAAQ7B,EAAGyD,qBAEV9C,EAKDkB,EACFA,EAAMpB,eAAeE,EAAOT,GAE5BmD,EAAKrD,EAAI,CACPW,MAAOA,GACNT,GATHwD,EAAO1D,EAJ6B,CAexC,EAcE0D,OAAQA,GAYN,EAAS,CAEXK,QAAS,QACTC,QAZF,SAAiBC,GACfA,EAAIC,UAAU,qBAAsBP,EAEtC,GAYIQ,EAAY,KAEM,oBAAXC,OACTD,EAAYC,OAAOH,SACQ,IAAX,EAAAI,IAChBF,EAAY,EAAAE,EAAOJ,KAGjBE,GACFA,EAAUG,IAAI,GAGhB,mCCxRA,MCpB0G,EDoB1G,CACEC,KAAM,cACNC,MAAO,CAAC,SACRnG,MAAO,CACLoG,MAAO,CACLC,KAAMC,QAERC,UAAW,CACTF,KAAMC,OACNE,QAAS,gBAEXC,KAAM,CACJJ,KAAMK,OACNF,QAAS,qBEff,SAXgB,OACd,GCRW,WAAkB,IAAIG,EAAI1E,KAAK2E,EAAGD,EAAIE,MAAMD,GAAG,OAAOA,EAAG,OAAOD,EAAIG,GAAG,CAACC,YAAY,oCAAoCC,MAAM,CAAC,eAAcL,EAAIP,OAAQ,KAAY,aAAaO,EAAIP,MAAM,KAAO,OAAOa,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOP,EAAIQ,MAAM,QAASD,EAAO,IAAI,OAAOP,EAAIS,QAAO,GAAO,CAACR,EAAG,MAAM,CAACG,YAAY,4BAA4BC,MAAM,CAAC,KAAOL,EAAIJ,UAAU,MAAQI,EAAIF,KAAK,OAASE,EAAIF,KAAK,QAAU,cAAc,CAACG,EAAG,OAAO,CAACI,MAAM,CAAC,EAAI,uNAAuN,CAAEL,EAAS,MAAEC,EAAG,QAAQ,CAACD,EAAIU,GAAGV,EAAIW,GAAGX,EAAIP,UAAUO,EAAIY,UACnuB,GACsB,IDSpB,EACA,KACA,KACA,MAI8B,QElBmF,ECoBnH,CACErB,KAAM,uBACNC,MAAO,CAAC,SACRnG,MAAO,CACLoG,MAAO,CACLC,KAAMC,QAERC,UAAW,CACTF,KAAMC,OACNE,QAAS,gBAEXC,KAAM,CACJJ,KAAMK,OACNF,QAAS,MCff,GAXgB,OACd,GCRW,WAAkB,IAAIG,EAAI1E,KAAK2E,EAAGD,EAAIE,MAAMD,GAAG,OAAOA,EAAG,OAAOD,EAAIG,GAAG,CAACC,YAAY,+CAA+CC,MAAM,CAAC,eAAcL,EAAIP,OAAQ,KAAY,aAAaO,EAAIP,MAAM,KAAO,OAAOa,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOP,EAAIQ,MAAM,QAASD,EAAO,IAAI,OAAOP,EAAIS,QAAO,GAAO,CAACR,EAAG,MAAM,CAACG,YAAY,4BAA4BC,MAAM,CAAC,KAAOL,EAAIJ,UAAU,MAAQI,EAAIF,KAAK,OAASE,EAAIF,KAAK,QAAU,cAAc,CAACG,EAAG,OAAO,CAACI,MAAM,CAAC,EAAI,sHAAsH,CAAEL,EAAS,MAAEC,EAAG,QAAQ,CAACD,EAAIU,GAAGV,EAAIW,GAAGX,EAAIP,UAAUO,EAAIY,UAC7oB,GACsB,IDSpB,EACA,KACA,KACA,MAI8B,oIEThC,MCTkL,EDSlL,CACArB,KAAA,SACAlG,MAAA,CACAwH,UAAA,CACAnB,KAAAK,OACAe,UAAA,GAEAC,OAAA,CACArB,KAAAC,OACAE,QAAA,QAGAmB,SAAA,CACAvB,KAAAA,GACA,OAAAwB,EAAAA,EAAAC,KAAA,KAAAL,WAAAE,OAAA,KAAAA,OACA,EACAI,SAAAA,GACA,OAAAF,EAAAA,EAAAC,KAAA,KAAAL,WAAAO,SACA,IETA,GAXgB,OACd,GCRW,WAAkB,IAAIpB,EAAI1E,KAAqB,OAAO2E,EAApBD,EAAIE,MAAMD,IAAa,OAAO,CAACG,YAAY,0BAA0BC,MAAM,CAAC,iBAAiC,IAAhBL,EAAIa,UAAiB,MAAQb,EAAIP,QAAQ,CAACO,EAAIU,GAAGV,EAAIW,GAAGX,EAAImB,aACxM,GACsB,IDSpB,EACA,KACA,KACA,MAI8B,uBEMhC,MAAME,EAAc,WACnB,OAAOC,EAAAA,EAAAA,IAAkB,eAC1B,ECAO,SAASC,EAAmB5F,GAAmB,IAAZ6F,EAAM9E,UAAAnD,OAAA,QAAAoD,IAAAD,UAAA,GAAAA,UAAA,GAAG,EAClD,MAAM+E,EAAS,IAAIC,UACnB,IAAIC,EAAUhG,EACd,IAAK,IAAIrC,EAAI,EAAGA,EAAIkI,EAAQlI,IAC3BqI,EAAUF,EAAOG,gBAAgBD,EAAS,aAAaE,gBAAgBC,YAExE,OAAOH,CACR,2BCNA,MAAMI,GAASC,EAAAA,EAAAA,IAAaX,KAGtBY,EAAcC,IAClBH,EAAOE,WAAW,CAEhB,mBAAoB,iBAEpBE,aAAcD,QAAAA,EAAS,IACvB,GAIJE,EAAAA,EAAAA,IAAqBH,GACrBA,GAAWI,EAAAA,EAAAA,OAEX,UCnBA,GAAeC,WAAAA,MACbC,OAAO,YACPC,aACAC,uBCCF,SACCpJ,MAAO,CACNqJ,GAAI,CACHhD,KAAMK,OACNF,QAAS,MAEV8C,QAAS,CACRjD,KAAMC,OACNE,QAAS,IAEV+C,WAAY,CACXlD,KAAM,CAACC,OAAQI,QACfe,UAAU,GAEX+B,aAAc,CACbnD,KAAMC,OACNE,QAAS,UAIXiD,KAAIA,KACI,CACNC,SAAS,EACTC,SAAS,EACTC,SAAS,IAIXC,QAAS,CAERC,MAAAA,GACC7H,KAAK0H,SAAU,CAChB,EACAI,YAAAA,GACC9H,KAAK0H,SAAU,EAEf1H,KAAK+H,mBAAmB/H,KAAKqH,QAC9B,EACA,mBAAMW,CAAcX,GACnBrH,KAAK2H,SAAU,EACf,UCpCYM,eAAeV,EAAcD,EAAYY,EAAWb,GAClE,MAAMc,EAAc,CAAC,GAAIZ,EAAcD,EAAYY,GAAWE,KAAK,KAEnE,aAAa3B,EAAO4B,cAAcF,EAAa7J,OAAOgK,OAAO,CAC5DC,OAAQ,YACRf,KAAM,8KAAF5F,OAMayF,EAAO,iFAK1B,CDqBUmB,CAAYxI,KAAKuH,aAAcvH,KAAKsH,WAAYtH,KAAKoH,GAAIC,GAC/DoB,EAAOC,MAAM,iBAAkB,CAAEnB,aAAcvH,KAAKuH,aAAcD,WAAYtH,KAAKsH,WAAYF,GAAIpH,KAAKoH,GAAIC,YAC5GrH,KAAKkF,MAAM,iBAAkBmC,GAC7BrH,KAAK0H,SAAU,CAChB,CAAE,MAAOiB,IACRC,EAAAA,EAAAA,IAAUC,EAAE,WAAY,uDACxB5F,EAAQ0F,MAAMA,EACf,CAAE,QACD3I,KAAK2H,SAAU,CAChB,CACD,EAGAmB,gBAAAA,GACC9I,KAAKyH,SAAU,EACf,MAAMsB,EAAgBjH,WAAW9B,KAAKgJ,SAAUC,EAAAA,KAChDC,EAAAA,EAAAA,IAASL,EAAE,WAAY,oBAAoB,KAC1ChH,aAAakH,GACb/I,KAAKyH,SAAU,CAAK,GAEtB,EACA,cAAMuB,GACL,UE5DYf,eAAeV,EAAcD,EAAYY,GACvD,MAAMC,EAAc,CAAC,GAAIZ,EAAcD,EAAYY,GAAWE,KAAK,WAG7D3B,EAAO0C,WAAWhB,EACzB,CFwDUiB,CAAcpJ,KAAKuH,aAAcvH,KAAKsH,WAAYtH,KAAKoH,IAC7DqB,EAAOC,MAAM,kBAAmB,CAAEnB,aAAcvH,KAAKuH,aAAcD,WAAYtH,KAAKsH,WAAYF,GAAIpH,KAAKoH,KACzGpH,KAAKkF,MAAM,SAAUlF,KAAKoH,GAC3B,CAAE,MAAOuB,IACRC,EAAAA,EAAAA,IAAUC,EAAE,WAAY,yDACxB5F,EAAQ0F,MAAMA,GACd3I,KAAKyH,SAAU,CAChB,CACD,EAGA,kBAAM4B,CAAahC,GAClBrH,KAAK2H,SAAU,EACf,IACC,MAAM2B,QGtEKrB,eAAeV,EAAcD,EAAYD,GACvD,MAAMkC,EAAe,CAAC,GAAIhC,EAAcD,GAAYc,KAAK,KAEnDoB,QAAiBC,EAAAA,EAAMC,KAAK3D,IAAgBwD,EAAc,CAC/DI,kBAAkBC,EAAAA,EAAAA,MAAiBC,YACnCC,SAASF,EAAAA,EAAAA,MAAiBG,IAC1BC,UAAW,QACXC,kBAAmB,IAAIC,MAAQC,cAC/B9C,UACA+C,WAAY7C,EACZ8C,KAAM,YAKDlC,EAAcoB,EAAe,IADjBe,SAASd,EAASe,QAAQ,oBAAoBC,MAAM,KAAKC,OAIrEC,QAAgBjE,EAAOkE,KAAKxC,EAAa,CAC9CyC,SAAS,IAGJ7M,EAAQ2M,EAAQlD,KAAKzJ,MAO3B,OAHAA,EAAM4L,iBAAmB1D,EAAmBlI,EAAM4L,iBAAkB,GACpE5L,EAAMsJ,QAAUpB,EAAmBlI,EAAMsJ,QAAS,GAE3CqD,EAAQlD,IAChB,CHwC6BqD,CAAW7K,KAAKuH,aAAcvH,KAAKsH,WAAYD,GACxEoB,EAAOC,MAAM,qBAAsB,CAAEnB,aAAcvH,KAAKuH,aAAcD,WAAYtH,KAAKsH,WAAYgC,eACnGtJ,KAAKkF,MAAM,MAAOoE,GAGlBtJ,KAAKkF,MAAM,iBAAkB,IAC7BlF,KAAK8K,aAAe,EACrB,CAAE,MAAOnC,IACRC,EAAAA,EAAAA,IAAUC,EAAE,WAAY,yDACxB5F,EAAQ0F,MAAMA,EACf,CAAE,QACD3I,KAAK2H,SAAU,CAChB,CACD,IIvHiL,EC6InL,CACA1D,KAAA,UAEA8G,WAAA,CACAC,eAAA,IACAC,UAAA,IACAC,WAAA,IACAC,SAAA,IACAC,OAAA,EACAC,eAAA,IACAC,UAAA,IACAC,kBAAA,IACAC,SAAA,IACAC,SAAA,IACAC,sBAhBAA,IAAA,0DAkBAC,OAAA,CAAAC,EAAAA,GAAAC,GAEAC,cAAA,EAEA/N,MAAA,CACA4L,iBAAA,CACAvF,KAAAC,OACAmB,UAAA,GAEAsE,QAAA,CACA1F,KAAAC,OACAmB,UAAA,GAEAyE,iBAAA,CACA7F,KAAAC,OACAE,QAAA,MAMAwH,OAAA,CACA3H,KAAA4H,QACAzH,SAAA,GAMA0H,aAAA,CACA7H,KAAA8H,SACA1G,UAAA,GAGA2G,IAAA,CACA/H,KAAAC,OACAE,QAAA,QAIAiD,KAAAA,KACA,CACA4E,UAAA,EAGAtB,aAAA,GACAuB,WAAA,IAIA3G,SAAA,CAOA4G,YAAAA,GACA,OAAA1C,EAAAA,EAAAA,MAAAG,MAAA,KAAAD,OACA,EAOAyC,eAAAA,GACA,YAAAC,eACA,GAEA,KAAAC,cAAA,KAAA3B,aACA,EAEA0B,cAAAA,GACA,YAAA1B,cAAA,UAAAA,aAAA4B,MACA,EAEAnH,SAAAA,GAEA,OAAA+E,UAAA3E,EAAAA,EAAAA,GAAA,KAAAsE,kBAAAxE,OAAA,YACA,GAGAkH,MAAA,CAEAtF,OAAAA,CAAAA,GACA,KAAAU,mBAAAV,EACA,GAGAuF,WAAAA,GAEA,KAAA7E,mBAAA,KAAAV,QACA,EAEAO,QAAA,CACAiB,EAAA,KAOAd,kBAAAA,CAAAV,GACA,KAAAyD,aAAAzD,EAAArI,WACA,KAAAqN,WAAA,CACA,EAKAQ,QAAAA,GAEA,aAAA/B,aAAA4B,OAIA,YAAAX,QACA,KAAA1C,aAAA,KAAAyB,aAAA4B,aACA,KAAA/J,WAAA,KAEA,KAAAmK,MAAAf,OAAAgB,IAAAC,OAAA,UAIA,KAAAhF,cAAA,KAAA8C,aAAA4B,OACA,EAEAO,QAAAA,GACA,KAAAb,UAAA,CACA,4JCpRIzM,GAAU,CAAC,EAEfA,GAAQuN,kBAAoB,KAC5BvN,GAAQwN,cAAgB,KAElBxN,GAAQyN,OAAS,UAAc,KAAM,QAE3CzN,GAAQ0N,OAAS,KACjB1N,GAAQ2N,mBAAqB,KAEhB,KAAI,KAAS3N,IAKJ,MAAW,KAAQ4N,QAAS,KAAQA,OCP1D,UAXgB,OACd,GCTW,WAAkB,IAAI7I,EAAI1E,KAAK2E,EAAGD,EAAIE,MAAMD,GAAG,OAAOA,EAAGD,EAAIyH,IAAI,CAACqB,WAAW,CAAC,CAACvJ,KAAK,OAAOwJ,QAAQ,SAASpN,OAAQqE,EAAI+C,QAASiG,WAAW,aAAavB,IAAI,YAAYrH,YAAY,UAAU6I,MAAM,CAAC,mBAAoBjJ,EAAIiD,UAAU,CAAChD,EAAG,MAAM,CAACG,YAAY,iBAAiB,CAACH,EAAG,WAAW,CAACG,YAAY,kBAAkBC,MAAM,CAAC,eAAeL,EAAIiF,iBAAiB,KAAOjF,EAAIoF,QAAQ,KAAO,OAAO,GAAGpF,EAAIU,GAAG,KAAKT,EAAG,MAAM,CAACG,YAAY,iBAAiB,CAACH,EAAG,MAAM,CAACG,YAAY,mBAAmB,CAACH,EAAG,OAAO,CAACG,YAAY,mBAAmB,CAACJ,EAAIU,GAAGV,EAAIW,GAAGX,EAAIiF,qBAAqBjF,EAAIU,GAAG,KAAMV,EAAI4H,cAAgB5H,EAAI0C,KAAO1C,EAAIiD,QAAShD,EAAG,YAAY,CAACG,YAAY,oBAAoB,CAAGJ,EAAIgD,QAAyoB/C,EAAG,iBAAiB,CAACK,GAAG,CAAC,MAAQN,EAAIoD,cAAc8F,YAAYlJ,EAAImJ,GAAG,CAAC,CAACrP,IAAI,OAAOsP,GAAG,WAAW,MAAO,CAACnJ,EAAG,YAAY,CAACI,MAAM,CAAC,KAAO,MAAM,EAAEgJ,OAAM,IAAO,MAAK,EAAM,aAAa,CAACrJ,EAAIU,GAAG,eAAeV,EAAIW,GAAGX,EAAImE,EAAE,WAAY,gBAAgB,gBAAp3B,CAAClE,EAAG,iBAAiB,CAACI,MAAM,CAAC,oBAAoB,IAAIC,GAAG,CAAC,MAAQN,EAAImD,QAAQ+F,YAAYlJ,EAAImJ,GAAG,CAAC,CAACrP,IAAI,OAAOsP,GAAG,WAAW,MAAO,CAACnJ,EAAG,WAAW,CAACI,MAAM,CAAC,KAAO,MAAM,EAAEgJ,OAAM,IAAO,MAAK,EAAM,YAAY,CAACrJ,EAAIU,GAAG,iBAAiBV,EAAIW,GAAGX,EAAImE,EAAE,WAAY,iBAAiB,kBAAkBnE,EAAIU,GAAG,KAAKT,EAAG,qBAAqBD,EAAIU,GAAG,KAAKT,EAAG,iBAAiB,CAACI,MAAM,CAAC,oBAAoB,IAAIC,GAAG,CAAC,MAAQN,EAAIoE,kBAAkB8E,YAAYlJ,EAAImJ,GAAG,CAAC,CAACrP,IAAI,OAAOsP,GAAG,WAAW,MAAO,CAACnJ,EAAG,aAAa,CAACI,MAAM,CAAC,KAAO,MAAM,EAAEgJ,OAAM,IAAO,MAAK,EAAM,YAAY,CAACrJ,EAAIU,GAAG,iBAAiBV,EAAIW,GAAGX,EAAImE,EAAE,WAAY,mBAAmB,oBAAwR,GAAGnE,EAAIY,KAAKZ,EAAIU,GAAG,KAAMV,EAAI0C,IAAM1C,EAAIiD,QAAShD,EAAG,MAAM,CAACG,YAAY,uCAAwCJ,EAAIuF,iBAAkBtF,EAAG,SAAS,CAACG,YAAY,qBAAqBC,MAAM,CAAC,UAAYL,EAAIa,aAAab,EAAIY,MAAM,GAAGZ,EAAIU,GAAG,KAAMV,EAAIqH,QAAUrH,EAAIgD,QAAS/C,EAAG,OAAO,CAACG,YAAY,kBAAkBE,GAAG,CAAC,OAAS,SAASC,GAAQA,EAAO+I,gBAAiB,IAAI,CAACrJ,EAAG,MAAM,CAACG,YAAY,yBAAyB,CAACH,EAAG,wBAAwB,CAACsJ,IAAI,SAASlJ,MAAM,CAAC,gBAAgBL,EAAIuH,aAAa,iBAAmBvH,EAAIiD,QAAQ,MAAQjD,EAAIqH,OAASrH,EAAImE,EAAE,WAAY,eAAiBnE,EAAImE,EAAE,WAAY,gBAAgB,YAAcnE,EAAImE,EAAE,WAAY,qBAAqB,MAAQnE,EAAIoG,aAAa,YAAYpG,EAAIwJ,SAAS,mBAAmB,oCAAoClJ,GAAG,CAAC,eAAeN,EAAIqD,mBAAmB,OAASrD,EAAImI,YAAYnI,EAAIU,GAAG,KAAKT,EAAG,MAAM,CAACG,YAAY,mBAAmB,CAACH,EAAG,WAAW,CAACI,MAAM,CAAC,KAAO,yBAAyB,cAAc,SAAS,aAAaL,EAAImE,EAAE,WAAY,gBAAgB,SAAWnE,EAAI8H,gBAAgBxH,GAAG,CAAC,MAAQN,EAAImI,UAAUe,YAAYlJ,EAAImJ,GAAG,CAAC,CAACrP,IAAI,OAAOsP,GAAG,WAAW,MAAO,CAAEpJ,EAAIiD,QAAShD,EAAG,iBAAiBA,EAAG,iBAAiB,CAACI,MAAM,CAAC,KAAO,MAAM,EAAEgJ,OAAM,IAAO,MAAK,EAAM,cAAc,IAAI,GAAGrJ,EAAIU,GAAG,KAAKT,EAAG,MAAM,CAACG,YAAY,8BAA8BC,MAAM,CAAC,GAAK,qCAAqC,CAACL,EAAIU,GAAG,aAAaV,EAAIW,GAAGX,EAAImE,EAAE,WAAY,oDAAoD,gBAAgBlE,EAAG,MAAM,CAACG,YAAY,mBAAmB6I,MAAM,CAAC,6BAA8BjJ,EAAI0H,UAAU+B,SAAS,CAAC,UAAYzJ,EAAIW,GAAGX,EAAI6H,kBAAkBvH,GAAG,CAAC,MAAQN,EAAIuI,eAC/qG,GACsB,IDUpB,EACA,KACA,WACA,MAI8B,wBEhBhC,MAAMmB,GAAe,CACjB,YAAa,CAAC,wBAAwB,GACtC,YAAa,CAAC,iBAAiB,GAC/B,YAAa,CAAC,eAAyB,GACvC,YAAa,CAAC,cAAc,GAC5B,YAAa,CAAC,WAAW,GACzB,YAAa,CAAC,WAAW,GACzB,YAAa,CAAC,gBAAgB,GAAM,GACpC,YAAa,CAAC,WAAW,GACzB,YAAa,CAAC,UAAU,GACxB,YAAa,CAAC,UAAU,GACxB,YAAa,CAAC,yBAAyB,GACvC,YAAa,CAAC,WAAW,GACzB,WAAY,CAAC,+BAA+B,GAC5C,aAAc,CAAC,aAAa,IAI1BC,GAAeC,GAAMA,EAAEC,QAAQ,YAAa,QAI5CC,GAAkBC,GAAWA,EAAOrG,KAAK,IAOlCsG,GAAa,CAACC,EAAMC,KAC7B,MAAMC,EAAMD,EAEZ,GAAyB,MAArBD,EAAKG,OAAOD,GACZ,MAAM,IAAIE,MAAM,6BAGpB,MAAMN,EAAS,GACTO,EAAO,GACb,IAAIhR,EAAI6Q,EAAM,EACVI,GAAW,EACXC,GAAQ,EACRC,GAAW,EACXC,GAAS,EACTC,EAASR,EACTS,EAAa,GACjBC,EAAO,KAAOvR,EAAI2Q,EAAK1Q,QAAQ,CAC3B,MAAMuR,EAAIb,EAAKG,OAAO9Q,GACtB,GAAW,MAANwR,GAAmB,MAANA,GAAcxR,IAAM6Q,EAAM,EAA5C,CAKA,GAAU,MAANW,GAAaP,IAAaE,EAAU,CACpCE,EAASrR,EAAI,EACb,KACJ,CAEA,GADAiR,GAAW,EACD,OAANO,GACKL,EADT,CAQA,GAAU,MAANK,IAAcL,EAEd,IAAK,MAAOM,GAAMC,EAAMC,EAAGC,MAAStR,OAAO4D,QAAQkM,IAC/C,GAAIO,EAAKkB,WAAWJ,EAAKzR,GAAI,CAEzB,GAAIsR,EACA,MAAO,CAAC,MAAM,EAAOX,EAAK1Q,OAAS4Q,GAAK,GAE5C7Q,GAAKyR,EAAIxR,OACL2R,EACAZ,EAAKc,KAAKJ,GAEVjB,EAAOqB,KAAKJ,GAChBR,EAAQA,GAASS,EACjB,SAASJ,CACb,CAIRJ,GAAW,EACPG,GAGIE,EAAIF,EACJb,EAAOqB,KAAKzB,GAAYiB,GAAc,IAAMjB,GAAYmB,IAEnDA,IAAMF,GACXb,EAAOqB,KAAKzB,GAAYmB,IAE5BF,EAAa,GACbtR,KAKA2Q,EAAKkB,WAAW,KAAM7R,EAAI,IAC1ByQ,EAAOqB,KAAKzB,GAAYmB,EAAI,MAC5BxR,GAAK,GAGL2Q,EAAKkB,WAAW,IAAK7R,EAAI,IACzBsR,EAAaE,EACbxR,GAAK,IAITyQ,EAAOqB,KAAKzB,GAAYmB,IACxBxR,IAhDA,MALQmR,GAAW,EACXnR,GATR,MAHIoR,GAAS,EACTpR,GAgER,CACA,GAAIqR,EAASrR,EAGT,MAAO,CAAC,IAAI,EAAO,GAAG,GAI1B,IAAKyQ,EAAOxQ,SAAW+Q,EAAK/Q,OACxB,MAAO,CAAC,MAAM,EAAO0Q,EAAK1Q,OAAS4Q,GAAK,GAM5C,GAAoB,IAAhBG,EAAK/Q,QACa,IAAlBwQ,EAAOxQ,QACP,SAAS8R,KAAKtB,EAAO,MACpBW,EAAQ,CAET,MAAO,EAjHOd,EAgHiB,IAArBG,EAAO,GAAGxQ,OAAewQ,EAAO,GAAGuB,OAAO,GAAKvB,EAAO,GAhH5CH,EAAEC,QAAQ,2BAA4B,UAiHjC,EAAOc,EAASR,GAAK,EAClD,CAlHiB,IAACP,EAmHlB,MAAM2B,EAAU,KAAOb,EAAS,IAAM,IAAMZ,GAAeC,GAAU,IAC/DyB,EAAQ,KAAOd,EAAS,GAAK,KAAOZ,GAAeQ,GAAQ,IAMjE,MAAO,CALMP,EAAOxQ,QAAU+Q,EAAK/Q,OAC7B,IAAMgS,EAAU,IAAMC,EAAQ,IAC9BzB,EAAOxQ,OACHgS,EACAC,EACIhB,EAAOG,EAASR,GAAK,EAAK,8BC7IrC,MAAM,GAAY,CAACsB,EAAGC,EAASzQ,EAAU,CAAC,KAC7C0Q,GAAmBD,MAEdzQ,EAAQ2Q,WAAmC,MAAtBF,EAAQtB,OAAO,KAGlC,IAAIyB,GAAUH,EAASzQ,GAAS6Q,MAAML,IAI3CM,GAAe,wBACfC,GAAkBC,GAASC,IAAOA,EAAEf,WAAW,MAAQe,EAAEC,SAASF,GAClEG,GAAqBH,GAASC,GAAMA,EAAEC,SAASF,GAC/CI,GAAwBJ,IAC1BA,EAAMA,EAAIK,cACFJ,IAAOA,EAAEf,WAAW,MAAQe,EAAEI,cAAcH,SAASF,IAE3DM,GAA2BN,IAC7BA,EAAMA,EAAIK,cACFJ,GAAMA,EAAEI,cAAcH,SAASF,IAErCO,GAAgB,aAChBC,GAAmBP,IAAOA,EAAEf,WAAW,MAAQe,EAAEQ,SAAS,KAC1DC,GAAsBT,GAAY,MAANA,GAAmB,OAANA,GAAcA,EAAEQ,SAAS,KAClEE,GAAY,UACZC,GAAeX,GAAY,MAANA,GAAmB,OAANA,GAAcA,EAAEf,WAAW,KAC7D2B,GAAS,QACTC,GAAYb,GAAmB,IAAbA,EAAE3S,SAAiB2S,EAAEf,WAAW,KAClD6B,GAAed,GAAmB,IAAbA,EAAE3S,QAAsB,MAAN2S,GAAmB,OAANA,EACpDe,GAAW,yBACXC,GAAmB,EAAEC,EAAIlB,EAAM,OACjC,MAAMmB,EAAQC,GAAgB,CAACF,IAC/B,OAAKlB,GAELA,EAAMA,EAAIK,cACFJ,GAAMkB,EAAMlB,IAAMA,EAAEI,cAAcH,SAASF,IAFxCmB,CAE4C,EAErDE,GAAsB,EAAEH,EAAIlB,EAAM,OACpC,MAAMmB,EAAQG,GAAmB,CAACJ,IAClC,OAAKlB,GAELA,EAAMA,EAAIK,cACFJ,GAAMkB,EAAMlB,IAAMA,EAAEI,cAAcH,SAASF,IAFxCmB,CAE4C,EAErDI,GAAgB,EAAEL,EAAIlB,EAAM,OAC9B,MAAMmB,EAAQG,GAAmB,CAACJ,IAClC,OAAQlB,EAAeC,GAAMkB,EAAMlB,IAAMA,EAAEC,SAASF,GAAtCmB,CAA0C,EAEtDK,GAAa,EAAEN,EAAIlB,EAAM,OAC3B,MAAMmB,EAAQC,GAAgB,CAACF,IAC/B,OAAQlB,EAAeC,GAAMkB,EAAMlB,IAAMA,EAAEC,SAASF,GAAtCmB,CAA0C,EAEtDC,GAAkB,EAAEF,MACtB,MAAMO,EAAMP,EAAG5T,OACf,OAAQ2S,GAAMA,EAAE3S,SAAWmU,IAAQxB,EAAEf,WAAW,IAAI,EAElDoC,GAAqB,EAAEJ,MACzB,MAAMO,EAAMP,EAAG5T,OACf,OAAQ2S,GAAMA,EAAE3S,SAAWmU,GAAa,MAANxB,GAAmB,OAANA,CAAU,EAGvDyB,GAAsC,iBAAZC,IAAwBA,GAC1B,iBAAhBA,GAAQC,KACdD,GAAQC,KACRD,GAAQC,IAAIC,gCACZF,GAAQG,SACV,QAON,GAAUC,IAD6B,UAApBL,GAJD,KACA,IAKX,MAAMM,GAAWlV,OAAO,eAC/B,GAAUkV,SAAWA,GACrB,MAAMC,GAAU,CACZ,IAAK,CAAEC,KAAM,YAAaC,MAAO,aACjC,IAAK,CAAED,KAAM,MAAOC,MAAO,MAC3B,IAAK,CAAED,KAAM,MAAOC,MAAO,MAC3B,IAAK,CAAED,KAAM,MAAOC,MAAO,MAC3B,IAAK,CAAED,KAAM,MAAOC,MAAO,MAIzBC,GAAQ,OAERC,GAAOD,GAAQ,KASfE,GAAW3E,GAAMA,EAAE9D,MAAM,IAAI0I,QAAO,CAACC,EAAK3D,KAC5C2D,EAAI3D,IAAK,EACF2D,IACR,CAAC,GAEEC,GAAaH,GAAQ,mBAErBI,GAAqBJ,GAAQ,OAEnC,GAAUK,OADY,CAAClD,EAASzQ,EAAU,CAAC,IAAOwQ,GAAM,GAAUA,EAAGC,EAASzQ,GAE9E,MAAMgR,GAAM,CAAC4C,EAAGC,EAAI,CAAC,IAAMlV,OAAOgK,OAAO,CAAC,EAAGiL,EAAGC,GA2BhD,GAAUC,SA1BeC,IACrB,IAAKA,GAAsB,iBAARA,IAAqBpV,OAAOqV,KAAKD,GAAKzV,OACrD,OAAO,GAEX,MAAM2V,EAAO,GAEb,OAAOtV,OAAOgK,QADJ,CAAC6H,EAAGC,EAASzQ,EAAU,CAAC,IAAMiU,EAAKzD,EAAGC,EAASO,GAAI+C,EAAK/T,KAC1C,CACpB4Q,UAAW,cAAwBqD,EAAKrD,UACpC,WAAA5S,CAAYyS,EAASzQ,EAAU,CAAC,GAC5BkU,MAAMzD,EAASO,GAAI+C,EAAK/T,GAC5B,CACA,eAAO8T,CAAS9T,GACZ,OAAOiU,EAAKH,SAAS9C,GAAI+C,EAAK/T,IAAU4Q,SAC5C,GAEJuD,SAAU,CAACxF,EAAG3O,EAAU,CAAC,IAAMiU,EAAKE,SAASxF,EAAGqC,GAAI+C,EAAK/T,IACzDoU,OAAQ,CAACzF,EAAG3O,EAAU,CAAC,IAAMiU,EAAKG,OAAOzF,EAAGqC,GAAI+C,EAAK/T,IACrD2T,OAAQ,CAAClD,EAASzQ,EAAU,CAAC,IAAMiU,EAAKN,OAAOlD,EAASO,GAAI+C,EAAK/T,IACjE8T,SAAW9T,GAAYiU,EAAKH,SAAS9C,GAAI+C,EAAK/T,IAC9CqU,OAAQ,CAAC5D,EAASzQ,EAAU,CAAC,IAAMiU,EAAKI,OAAO5D,EAASO,GAAI+C,EAAK/T,IACjEsU,YAAa,CAAC7D,EAASzQ,EAAU,CAAC,IAAMiU,EAAKK,YAAY7D,EAASO,GAAI+C,EAAK/T,IAC3E6Q,MAAO,CAAC0D,EAAM9D,EAASzQ,EAAU,CAAC,IAAMiU,EAAKpD,MAAM0D,EAAM9D,EAASO,GAAI+C,EAAK/T,IAC3E+S,IAAKkB,EAAKlB,IACVC,SAAUA,IACZ,EAaC,MAAMsB,GAAc,CAAC7D,EAASzQ,EAAU,CAAC,KAC5C0Q,GAAmBD,GAGfzQ,EAAQwU,UAAY,mBAAmBpE,KAAKK,GAErC,CAACA,GAEL,GAAOA,IAElB,GAAU6D,YAAcA,GACxB,MACM5D,GAAsBD,IACxB,GAAuB,iBAAZA,EACP,MAAM,IAAIhR,UAAU,mBAExB,GAAIgR,EAAQnS,OALW,MAMnB,MAAM,IAAImB,UAAU,sBACxB,EAcJ,GAAU4U,OADY,CAAC5D,EAASzQ,EAAU,CAAC,IAAM,IAAI4Q,GAAUH,EAASzQ,GAASqU,SAUjF,GAAUxD,MARW,CAAC0D,EAAM9D,EAASzQ,EAAU,CAAC,KAC5C,MAAMyU,EAAK,IAAI7D,GAAUH,EAASzQ,GAKlC,OAJAuU,EAAOA,EAAKZ,QAAO1C,GAAKwD,EAAG5D,MAAMI,KAC7BwD,EAAGzU,QAAQ0U,SAAWH,EAAKjW,QAC3BiW,EAAKpE,KAAKM,GAEP8D,CAAI,EAIf,MACMI,GAAY,0BACZC,GAAgBjG,GAAMA,EAAEC,QAAQ,2BAA4B,QAC3D,MAAMgC,GACT5Q,QACAwT,IACA/C,QACAoE,qBACAC,SACArF,OACA1E,QACAgK,MACAC,wBACAC,QACAC,QACAC,UACAC,OACAC,UACAvC,SACAwC,mBACAC,OACA,WAAAvX,CAAYyS,EAASzQ,EAAU,CAAC,GAC5B0Q,GAAmBD,GACnBzQ,EAAUA,GAAW,CAAC,EACtBK,KAAKL,QAAUA,EACfK,KAAKoQ,QAAUA,EACfpQ,KAAKyS,SAAW9S,EAAQ8S,UAAYJ,GACpCrS,KAAKgV,UAA8B,UAAlBhV,KAAKyS,SACtBzS,KAAKwU,uBACC7U,EAAQ6U,uBAAuD,IAA/B7U,EAAQwV,mBAC1CnV,KAAKwU,uBACLxU,KAAKoQ,QAAUpQ,KAAKoQ,QAAQ7B,QAAQ,MAAO,MAE/CvO,KAAK2U,0BAA4BhV,EAAQgV,wBACzC3U,KAAKkV,OAAS,KACdlV,KAAKoP,QAAS,EACdpP,KAAKyU,WAAa9U,EAAQ8U,SAC1BzU,KAAK0K,SAAU,EACf1K,KAAK0U,OAAQ,EACb1U,KAAK4U,UAAYjV,EAAQiV,QACzB5U,KAAK+U,SAAW/U,KAAKL,QAAQoV,OAC7B/U,KAAKiV,wBAC8B5T,IAA/B1B,EAAQsV,mBACFtV,EAAQsV,sBACLjV,KAAKgV,YAAahV,KAAK+U,QACpC/U,KAAK6U,QAAU,GACf7U,KAAK8U,UAAY,GACjB9U,KAAKmT,IAAM,GAEXnT,KAAKoV,MACT,CACA,QAAAC,GACI,GAAIrV,KAAKL,QAAQ2V,eAAiBtV,KAAKmT,IAAIlV,OAAS,EAChD,OAAO,EAEX,IAAK,MAAMmS,KAAWpQ,KAAKmT,IACvB,IAAK,MAAMoC,KAAQnF,EACf,GAAoB,iBAATmF,EACP,OAAO,EAGnB,OAAO,CACX,CACA,KAAA7M,IAAS8M,GAAK,CACd,IAAAJ,GACI,MAAMhF,EAAUpQ,KAAKoQ,QACfzQ,EAAUK,KAAKL,QAErB,IAAKA,EAAQ2Q,WAAmC,MAAtBF,EAAQtB,OAAO,GAErC,YADA9O,KAAK0K,SAAU,GAGnB,IAAK0F,EAED,YADApQ,KAAK0U,OAAQ,GAIjB1U,KAAKyV,cAELzV,KAAK6U,QAAU,IAAI,IAAIa,IAAI1V,KAAKiU,gBAC5BtU,EAAQ+I,QACR1I,KAAK0I,MAAQ,IAAIjH,IAAS,GAAQkH,SAASlH,IAE/CzB,KAAK0I,MAAM1I,KAAKoQ,QAASpQ,KAAK6U,SAU9B,MAAMc,EAAe3V,KAAK6U,QAAQe,KAAItH,GAAKtO,KAAK6V,WAAWvH,KAC3DtO,KAAK8U,UAAY9U,KAAK8V,WAAWH,GACjC3V,KAAK0I,MAAM1I,KAAKoQ,QAASpQ,KAAK8U,WAE9B,IAAI3B,EAAMnT,KAAK8U,UAAUc,KAAI,CAACtH,EAAGkH,EAAGO,KAChC,GAAI/V,KAAKgV,WAAahV,KAAKiV,mBAAoB,CAE3C,MAAMe,IAAiB,KAAT1H,EAAE,IACH,KAATA,EAAE,IACQ,MAATA,EAAE,IAAegG,GAAUvE,KAAKzB,EAAE,KAClCgG,GAAUvE,KAAKzB,EAAE,KAChB2H,EAAU,WAAWlG,KAAKzB,EAAE,IAClC,GAAI0H,EACA,MAAO,IAAI1H,EAAE0B,MAAM,EAAG,MAAO1B,EAAE0B,MAAM,GAAG4F,KAAIM,GAAMlW,KAAKmW,MAAMD,MAE5D,GAAID,EACL,MAAO,CAAC3H,EAAE,MAAOA,EAAE0B,MAAM,GAAG4F,KAAIM,GAAMlW,KAAKmW,MAAMD,KAEzD,CACA,OAAO5H,EAAEsH,KAAIM,GAAMlW,KAAKmW,MAAMD,IAAI,IAMtC,GAJAlW,KAAK0I,MAAM1I,KAAKoQ,QAAS+C,GAEzBnT,KAAKmT,IAAMA,EAAIG,QAAOhF,IAA2B,IAAtBA,EAAE8H,SAAQ,KAEjCpW,KAAKgV,UACL,IAAK,IAAIhX,EAAI,EAAGA,EAAIgC,KAAKmT,IAAIlV,OAAQD,IAAK,CACtC,MAAMmS,EAAInQ,KAAKmT,IAAInV,GACN,KAATmS,EAAE,IACO,KAATA,EAAE,IACuB,MAAzBnQ,KAAK8U,UAAU9W,GAAG,IACF,iBAATmS,EAAE,IACT,YAAYJ,KAAKI,EAAE,MACnBA,EAAE,GAAK,IAEf,CAEJnQ,KAAK0I,MAAM1I,KAAKoQ,QAASpQ,KAAKmT,IAClC,CAMA,UAAA2C,CAAWhB,GAEP,GAAI9U,KAAKL,QAAQ0W,WACb,IAAK,IAAIrY,EAAI,EAAGA,EAAI8W,EAAU7W,OAAQD,IAClC,IAAK,IAAIsY,EAAI,EAAGA,EAAIxB,EAAU9W,GAAGC,OAAQqY,IACb,OAApBxB,EAAU9W,GAAGsY,KACbxB,EAAU9W,GAAGsY,GAAK,KAKlC,MAAM,kBAAEC,EAAoB,GAAMvW,KAAKL,QAavC,OAZI4W,GAAqB,GAErBzB,EAAY9U,KAAKwW,qBAAqB1B,GACtCA,EAAY9U,KAAKyW,sBAAsB3B,IAIvCA,EAFKyB,GAAqB,EAEdvW,KAAK0W,iBAAiB5B,GAGtB9U,KAAK2W,0BAA0B7B,GAExCA,CACX,CAEA,yBAAA6B,CAA0B7B,GACtB,OAAOA,EAAUc,KAAIgB,IACjB,IAAIC,GAAM,EACV,MAAQ,KAAOA,EAAKD,EAAMR,QAAQ,KAAMS,EAAK,KAAK,CAC9C,IAAI7Y,EAAI6Y,EACR,KAAwB,OAAjBD,EAAM5Y,EAAI,IACbA,IAEAA,IAAM6Y,GACND,EAAME,OAAOD,EAAI7Y,EAAI6Y,EAE7B,CACA,OAAOD,CAAK,GAEpB,CAEA,gBAAAF,CAAiB5B,GACb,OAAOA,EAAUc,KAAIgB,GAeO,KAdxBA,EAAQA,EAAM1D,QAAO,CAACC,EAAKoC,KACvB,MAAMwB,EAAO5D,EAAIA,EAAIlV,OAAS,GAC9B,MAAa,OAATsX,GAA0B,OAATwB,EACV5D,EAEE,OAAToC,GACIwB,GAAiB,OAATA,GAA0B,MAATA,GAAyB,OAATA,GACzC5D,EAAI1I,MACG0I,IAGfA,EAAIrD,KAAKyF,GACFpC,EAAG,GACX,KACUlV,OAAe,CAAC,IAAM2Y,GAE3C,CACA,oBAAAI,CAAqBJ,GACZjY,MAAMC,QAAQgY,KACfA,EAAQ5W,KAAK6V,WAAWe,IAE5B,IAAIK,GAAe,EACnB,EAAG,CAGC,GAFAA,GAAe,GAEVjX,KAAK2U,wBAAyB,CAC/B,IAAK,IAAI3W,EAAI,EAAGA,EAAI4Y,EAAM3Y,OAAS,EAAGD,IAAK,CACvC,MAAMmS,EAAIyG,EAAM5Y,GAEN,IAANA,GAAiB,KAANmS,GAAyB,KAAbyG,EAAM,IAEvB,MAANzG,GAAmB,KAANA,IACb8G,GAAe,EACfL,EAAME,OAAO9Y,EAAG,GAChBA,IAER,CACiB,MAAb4Y,EAAM,IACW,IAAjBA,EAAM3Y,QACQ,MAAb2Y,EAAM,IAA2B,KAAbA,EAAM,KAC3BK,GAAe,EACfL,EAAMnM,MAEd,CAEA,IAAIyM,EAAK,EACT,MAAQ,KAAOA,EAAKN,EAAMR,QAAQ,KAAMc,EAAK,KAAK,CAC9C,MAAM/G,EAAIyG,EAAMM,EAAK,GACjB/G,GAAW,MAANA,GAAmB,OAANA,GAAoB,OAANA,IAChC8G,GAAe,EACfL,EAAME,OAAOI,EAAK,EAAG,GACrBA,GAAM,EAEd,CACJ,OAASD,GACT,OAAwB,IAAjBL,EAAM3Y,OAAe,CAAC,IAAM2Y,CACvC,CAmBA,oBAAAJ,CAAqB1B,GACjB,IAAImC,GAAe,EACnB,EAAG,CACCA,GAAe,EAEf,IAAK,IAAIL,KAAS9B,EAAW,CACzB,IAAI+B,GAAM,EACV,MAAQ,KAAOA,EAAKD,EAAMR,QAAQ,KAAMS,EAAK,KAAK,CAC9C,IAAIM,EAAMN,EACV,KAA0B,OAAnBD,EAAMO,EAAM,IAEfA,IAIAA,EAAMN,GACND,EAAME,OAAOD,EAAK,EAAGM,EAAMN,GAE/B,IAAIO,EAAOR,EAAMC,EAAK,GACtB,MAAM1G,EAAIyG,EAAMC,EAAK,GACfQ,EAAKT,EAAMC,EAAK,GACtB,GAAa,OAATO,EACA,SACJ,IAAKjH,GACK,MAANA,GACM,OAANA,IACCkH,GACM,MAAPA,GACO,OAAPA,EACA,SAEJJ,GAAe,EAEfL,EAAME,OAAOD,EAAI,GACjB,MAAMS,EAAQV,EAAM5G,MAAM,GAC1BsH,EAAMT,GAAM,KACZ/B,EAAUhF,KAAKwH,GACfT,GACJ,CAEA,IAAK7W,KAAK2U,wBAAyB,CAC/B,IAAK,IAAI3W,EAAI,EAAGA,EAAI4Y,EAAM3Y,OAAS,EAAGD,IAAK,CACvC,MAAMmS,EAAIyG,EAAM5Y,GAEN,IAANA,GAAiB,KAANmS,GAAyB,KAAbyG,EAAM,IAEvB,MAANzG,GAAmB,KAANA,IACb8G,GAAe,EACfL,EAAME,OAAO9Y,EAAG,GAChBA,IAER,CACiB,MAAb4Y,EAAM,IACW,IAAjBA,EAAM3Y,QACQ,MAAb2Y,EAAM,IAA2B,KAAbA,EAAM,KAC3BK,GAAe,EACfL,EAAMnM,MAEd,CAEA,IAAIyM,EAAK,EACT,MAAQ,KAAOA,EAAKN,EAAMR,QAAQ,KAAMc,EAAK,KAAK,CAC9C,MAAM/G,EAAIyG,EAAMM,EAAK,GACrB,GAAI/G,GAAW,MAANA,GAAmB,OAANA,GAAoB,OAANA,EAAY,CAC5C8G,GAAe,EACf,MACMM,EADiB,IAAPL,GAA8B,OAAlBN,EAAMM,EAAK,GACf,CAAC,KAAO,GAChCN,EAAME,OAAOI,EAAK,EAAG,KAAMK,GACN,IAAjBX,EAAM3Y,QACN2Y,EAAM9G,KAAK,IACfoH,GAAM,CACV,CACJ,CACJ,CACJ,OAASD,GACT,OAAOnC,CACX,CAQA,qBAAA2B,CAAsB3B,GAClB,IAAK,IAAI9W,EAAI,EAAGA,EAAI8W,EAAU7W,OAAS,EAAGD,IACtC,IAAK,IAAIsY,EAAItY,EAAI,EAAGsY,EAAIxB,EAAU7W,OAAQqY,IAAK,CAC3C,MAAMkB,EAAUxX,KAAKyX,WAAW3C,EAAU9W,GAAI8W,EAAUwB,IAAKtW,KAAK2U,yBAC7D6C,IAEL1C,EAAU9W,GAAKwZ,EACf1C,EAAUwB,GAAK,GACnB,CAEJ,OAAOxB,EAAUxB,QAAOuD,GAAMA,EAAG5Y,QACrC,CACA,UAAAwZ,CAAWlE,EAAGC,EAAGkE,GAAe,GAC5B,IAAIC,EAAK,EACLC,EAAK,EACLnX,EAAS,GACToX,EAAQ,GACZ,KAAOF,EAAKpE,EAAEtV,QAAU2Z,EAAKpE,EAAEvV,QAC3B,GAAIsV,EAAEoE,KAAQnE,EAAEoE,GACZnX,EAAOqP,KAAe,MAAV+H,EAAgBrE,EAAEoE,GAAMrE,EAAEoE,IACtCA,IACAC,SAEC,GAAIF,GAA0B,OAAVnE,EAAEoE,IAAgBnE,EAAEoE,KAAQrE,EAAEoE,EAAK,GACxDlX,EAAOqP,KAAKyD,EAAEoE,IACdA,SAEC,GAAID,GAA0B,OAAVlE,EAAEoE,IAAgBrE,EAAEoE,KAAQnE,EAAEoE,EAAK,GACxDnX,EAAOqP,KAAK0D,EAAEoE,IACdA,SAEC,GAAc,MAAVrE,EAAEoE,KACPnE,EAAEoE,KACD5X,KAAKL,QAAQmY,KAAQtE,EAAEoE,GAAI/H,WAAW,MAC7B,OAAV2D,EAAEoE,GAQD,IAAc,MAAVpE,EAAEoE,KACPrE,EAAEoE,KACD3X,KAAKL,QAAQmY,KAAQvE,EAAEoE,GAAI9H,WAAW,MAC7B,OAAV0D,EAAEoE,GASF,OAAO,EARP,GAAc,MAAVE,EACA,OAAO,EACXA,EAAQ,IACRpX,EAAOqP,KAAK0D,EAAEoE,IACdD,IACAC,GAIJ,KArBoB,CAChB,GAAc,MAAVC,EACA,OAAO,EACXA,EAAQ,IACRpX,EAAOqP,KAAKyD,EAAEoE,IACdA,IACAC,GACJ,CAkBJ,OAAOrE,EAAEtV,SAAWuV,EAAEvV,QAAUwC,CACpC,CACA,WAAAgV,GACI,GAAIzV,KAAKyU,SACL,OACJ,MAAMrE,EAAUpQ,KAAKoQ,QACrB,IAAIhB,GAAS,EACT2I,EAAe,EACnB,IAAK,IAAI/Z,EAAI,EAAGA,EAAIoS,EAAQnS,QAAgC,MAAtBmS,EAAQtB,OAAO9Q,GAAYA,IAC7DoR,GAAUA,EACV2I,IAEAA,IACA/X,KAAKoQ,QAAUA,EAAQJ,MAAM+H,IACjC/X,KAAKoP,OAASA,CAClB,CAMA,QAAA4I,CAASC,EAAM7H,EAASwE,GAAU,GAC9B,MAAMjV,EAAUK,KAAKL,QAGrB,GAAIK,KAAKgV,UAAW,CAChB,MAAMkD,EAAsB,KAAZD,EAAK,IACL,KAAZA,EAAK,IACO,MAAZA,EAAK,IACc,iBAAZA,EAAK,IACZ,YAAYlI,KAAKkI,EAAK,IACpBE,EAA4B,KAAf/H,EAAQ,IACR,KAAfA,EAAQ,IACO,MAAfA,EAAQ,IACc,iBAAfA,EAAQ,IACf,YAAYL,KAAKK,EAAQ,IAC7B,GAAI8H,GAAWC,EAAY,CACvB,MAAMC,EAAKH,EAAK,GACVI,EAAKjI,EAAQ,GACfgI,EAAGpH,gBAAkBqH,EAAGrH,gBACxBiH,EAAK,GAAKI,EAElB,MACK,GAAIF,GAAiC,iBAAZF,EAAK,GAAiB,CAChD,MAAMI,EAAKjI,EAAQ,GACbgI,EAAKH,EAAK,GACZI,EAAGrH,gBAAkBoH,EAAGpH,gBACxBZ,EAAQ,GAAKgI,EACbhI,EAAUA,EAAQJ,MAAM,GAEhC,MACK,GAAIkI,GAAiC,iBAAf9H,EAAQ,GAAiB,CAChD,MAAMgI,EAAKH,EAAK,GACZG,EAAGpH,gBAAkBZ,EAAQ,GAAGY,gBAChCZ,EAAQ,GAAKgI,EACbH,EAAOA,EAAKjI,MAAM,GAE1B,CACJ,CAGA,MAAM,kBAAEuG,EAAoB,GAAMvW,KAAKL,QACnC4W,GAAqB,IACrB0B,EAAOjY,KAAKgX,qBAAqBiB,IAErCjY,KAAK0I,MAAM,WAAY1I,KAAM,CAAEiY,OAAM7H,YACrCpQ,KAAK0I,MAAM,WAAYuP,EAAKha,OAAQmS,EAAQnS,QAC5C,IAAK,IAAIqa,EAAK,EAAGC,EAAK,EAAGC,EAAKP,EAAKha,OAAQwa,EAAKrI,EAAQnS,OAAQqa,EAAKE,GAAMD,EAAKE,EAAIH,IAAMC,IAAM,CAC5FvY,KAAK0I,MAAM,iBACX,IAAIyH,EAAIC,EAAQmI,GACZ3H,EAAIqH,EAAKK,GAKb,GAJAtY,KAAK0I,MAAM0H,EAASD,EAAGS,IAIb,IAANT,EACA,OAAO,EAGX,GAAIA,IAAMwC,GAAU,CAChB3S,KAAK0I,MAAM,WAAY,CAAC0H,EAASD,EAAGS,IAuBpC,IAAI8H,EAAKJ,EACLK,EAAKJ,EAAK,EACd,GAAII,IAAOF,EAAI,CAQX,IAPAzY,KAAK0I,MAAM,iBAOJ4P,EAAKE,EAAIF,IACZ,GAAiB,MAAbL,EAAKK,IACQ,OAAbL,EAAKK,KACH3Y,EAAQmY,KAA8B,MAAvBG,EAAKK,GAAIxJ,OAAO,GACjC,OAAO,EAEf,OAAO,CACX,CAEA,KAAO4J,EAAKF,GAAI,CACZ,IAAII,EAAYX,EAAKS,GAGrB,GAFA1Y,KAAK0I,MAAM,mBAAoBuP,EAAMS,EAAItI,EAASuI,EAAIC,GAElD5Y,KAAKgY,SAASC,EAAKjI,MAAM0I,GAAKtI,EAAQJ,MAAM2I,GAAK/D,GAGjD,OAFA5U,KAAK0I,MAAM,wBAAyBgQ,EAAIF,EAAII,IAErC,EAKP,GAAkB,MAAdA,GACc,OAAdA,IACEjZ,EAAQmY,KAA+B,MAAxBc,EAAU9J,OAAO,GAAa,CAC/C9O,KAAK0I,MAAM,gBAAiBuP,EAAMS,EAAItI,EAASuI,GAC/C,KACJ,CAEA3Y,KAAK0I,MAAM,4CACXgQ,GAER,CAIA,SAAI9D,IAEA5U,KAAK0I,MAAM,2BAA4BuP,EAAMS,EAAItI,EAASuI,GACtDD,IAAOF,GAMnB,CAIA,IAAIK,EASJ,GARiB,iBAAN1I,GACP0I,EAAMjI,IAAMT,EACZnQ,KAAK0I,MAAM,eAAgByH,EAAGS,EAAGiI,KAGjCA,EAAM1I,EAAEJ,KAAKa,GACb5Q,KAAK0I,MAAM,gBAAiByH,EAAGS,EAAGiI,KAEjCA,EACD,OAAO,CACf,CAYA,GAAIP,IAAOE,GAAMD,IAAOE,EAGpB,OAAO,EAEN,GAAIH,IAAOE,EAIZ,OAAO5D,EAEN,GAAI2D,IAAOE,EAKZ,OAAOH,IAAOE,EAAK,GAAkB,KAAbP,EAAKK,GAK7B,MAAM,IAAIvJ,MAAM,OAGxB,CACA,WAAAkF,GACI,OAAOA,GAAYjU,KAAKoQ,QAASpQ,KAAKL,QAC1C,CACA,KAAAwW,CAAM/F,GACFC,GAAmBD,GACnB,MAAMzQ,EAAUK,KAAKL,QAErB,GAAgB,OAAZyQ,EACA,OAAOuC,GACX,GAAgB,KAAZvC,EACA,MAAO,GAGX,IAAI0I,EACAC,EAAW,MACVD,EAAI1I,EAAQI,MAAMgB,KACnBuH,EAAWpZ,EAAQmY,IAAMpG,GAAcD,IAEjCqH,EAAI1I,EAAQI,MAAMC,KACxBsI,GAAYpZ,EAAQoV,OACdpV,EAAQmY,IACJ7G,GACAF,GACJpR,EAAQmY,IACJhH,GACAJ,IAAgBoI,EAAE,KAEtBA,EAAI1I,EAAQI,MAAMmB,KACxBoH,GAAYpZ,EAAQoV,OACdpV,EAAQmY,IACJ9F,GACAJ,GACJjS,EAAQmY,IACJ5F,GACAC,IAAY2G,IAEhBA,EAAI1I,EAAQI,MAAMU,KACxB6H,EAAWpZ,EAAQmY,IAAMzG,GAAqBF,IAExC2H,EAAI1I,EAAQI,MAAMc,OACxByH,EAAWxH,IAEf,IAAIyH,EAAK,GACL3D,GAAW,EACXlG,GAAW,EAEf,MAAM8J,EAAmB,GACnBC,EAAgB,GACtB,IAEIT,EAFAU,GAAY,EACZjK,GAAQ,EAKRkK,EAAuC,MAAtBhJ,EAAQtB,OAAO,GAChCuK,EAAiB1Z,EAAQmY,KAAOsB,EACpC,MAKME,EAAmBnJ,GAAsB,MAAhBA,EAAErB,OAAO,GAClC,GACAnP,EAAQmY,IACJ,iCACA,UACJyB,EAAiB,KACnB,GAAIJ,EAAW,CAGX,OAAQA,GACJ,IAAK,IACDH,GAAMhG,GACNqC,GAAW,EACX,MACJ,IAAK,IACD2D,GAAMjG,GACNsC,GAAW,EACX,MACJ,QACI2D,GAAM,KAAOG,EAGrBnZ,KAAK0I,MAAM,uBAAwByQ,EAAWH,GAC9CG,GAAY,CAChB,GAEJ,IAAK,IAAW3J,EAAPxR,EAAI,EAAMA,EAAIoS,EAAQnS,SAAWuR,EAAIY,EAAQtB,OAAO9Q,IAAKA,IAG9D,GAFAgC,KAAK0I,MAAM,eAAgB0H,EAASpS,EAAGgb,EAAIxJ,GAEvCL,EAAJ,CAII,GAAU,MAANK,EACA,OAAO,EAGP4D,GAAW5D,KACXwJ,GAAM,MAEVA,GAAMxJ,EACNL,GAAW,CAEf,MACA,OAAQK,GAGJ,IAAK,IACD,OAAO,EAGX,IAAK,KACD+J,IACApK,GAAW,EACX,SAGJ,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACDnP,KAAK0I,MAAM,6BAA8B0H,EAASpS,EAAGgb,EAAIxJ,GAIzDxP,KAAK0I,MAAM,yBAA0ByQ,GACrCI,IACAJ,EAAY3J,EAIR7P,EAAQmS,OACRyH,IACJ,SACJ,IAAK,IAAK,CACN,IAAKJ,EAAW,CACZH,GAAM,MACN,QACJ,CACA,MAAMQ,EAAU,CACZpV,KAAM+U,EACNM,MAAOzb,EAAI,EACX0b,QAASV,EAAG/a,OACZ4U,KAAMD,GAAQuG,GAAWtG,KACzBC,MAAOF,GAAQuG,GAAWrG,OAE9B9S,KAAK0I,MAAM1I,KAAKoQ,QAAS,KAAMoJ,GAC/BP,EAAiBnJ,KAAK0J,GAEtBR,GAAMQ,EAAQ3G,KAEQ,IAAlB2G,EAAQC,OAAgC,MAAjBD,EAAQpV,OAC/BgV,GAAiB,EACjBJ,GAAMM,EAAgBlJ,EAAQJ,MAAMhS,EAAI,KAE5CgC,KAAK0I,MAAM,eAAgByQ,EAAWH,GACtCG,GAAY,EACZ,QACJ,CACA,IAAK,IAAK,CACN,MAAMK,EAAUP,EAAiBA,EAAiBhb,OAAS,GAC3D,IAAKub,EAAS,CACVR,GAAM,MACN,QACJ,CACAC,EAAiBxO,MAEjB8O,IACAlE,GAAW,EACXoD,EAAKe,EAGLR,GAAMP,EAAG3F,MACO,MAAZ2F,EAAGrU,MACH8U,EAAcpJ,KAAKxR,OAAOgK,OAAOmQ,EAAI,CAAEkB,MAAOX,EAAG/a,UAErD,QACJ,CACA,IAAK,IAAK,CACN,MAAMub,EAAUP,EAAiBA,EAAiBhb,OAAS,GAC3D,IAAKub,EAAS,CACVR,GAAM,MACN,QACJ,CACAO,IACAP,GAAM,IAEgB,IAAlBQ,EAAQC,OAAgC,MAAjBD,EAAQpV,OAC/BgV,GAAiB,EACjBJ,GAAMM,EAAgBlJ,EAAQJ,MAAMhS,EAAI,KAE5C,QACJ,CAEA,IAAK,IAEDub,IACA,MAAOK,EAAKC,EAAWC,EAAUC,GAASrL,GAAW0B,EAASpS,GAC1D8b,GACAd,GAAMY,EACN1K,EAAQA,GAAS2K,EACjB7b,GAAK8b,EAAW,EAChBzE,EAAWA,GAAY0E,GAGvBf,GAAM,MAEV,SACJ,IAAK,IACDA,GAAM,KAAOxJ,EACb,SACJ,QAEI+J,IACAP,GAAMzE,GAAa/E,GAU/B,IAAKiJ,EAAKQ,EAAiBxO,MAAOgO,EAAIA,EAAKQ,EAAiBxO,MAAO,CAC/D,IAAIuP,EACJA,EAAOhB,EAAGhJ,MAAMyI,EAAGiB,QAAUjB,EAAG5F,KAAK5U,QACrC+B,KAAK0I,MAAM1I,KAAKoQ,QAAS,eAAgB4I,EAAIP,GAE7CuB,EAAOA,EAAKzL,QAAQ,6BAA6B,CAACiH,EAAGyE,EAAIC,KAChDA,IAEDA,EAAK,MAWFD,EAAKA,EAAKC,EAAK,OAE1Bla,KAAK0I,MAAM,iBAAkBsR,EAAMA,EAAMvB,EAAIO,GAC7C,MAAMnQ,EAAgB,MAAZ4P,EAAGrU,KAAe4O,GAAmB,MAAZyF,EAAGrU,KAAe2O,GAAQ,KAAO0F,EAAGrU,KACvEiR,GAAW,EACX2D,EAAKA,EAAGhJ,MAAM,EAAGyI,EAAGiB,SAAW7Q,EAAI,MAAQmR,CAC/C,CAEAT,IACIpK,IAEA6J,GAAM,QAIV,MAAMmB,EAAkB9G,GAAmB2F,EAAGlK,OAAO,IAMrD,IAAK,IAAIsL,EAAIlB,EAAcjb,OAAS,EAAGmc,GAAK,EAAGA,IAAK,CAChD,MAAMC,EAAKnB,EAAckB,GACnBE,EAAWtB,EAAGhJ,MAAM,EAAGqK,EAAGX,SAC1Ba,EAAUvB,EAAGhJ,MAAMqK,EAAGX,QAASW,EAAGV,MAAQ,GAChD,IAAIa,EAAUxB,EAAGhJ,MAAMqK,EAAGV,OAC1B,MAAMc,EAASzB,EAAGhJ,MAAMqK,EAAGV,MAAQ,EAAGU,EAAGV,OAASa,EAI5CE,EAAoBJ,EAAS9P,MAAM,KAAKvM,OACxC0c,EAAmBL,EAAS9P,MAAM,KAAKvM,OAASyc,EACtD,IAAIE,EAAaJ,EACjB,IAAK,IAAIxc,EAAI,EAAGA,EAAI2c,EAAkB3c,IAClC4c,EAAaA,EAAWrM,QAAQ,WAAY,IAEhDiM,EAAUI,EAEV5B,EAAKsB,EAAWC,EAAUC,GADC,KAAZA,EAAiB,YAAc,IACDC,CACjD,CAiBA,GAbW,KAAPzB,GAAa3D,IACb2D,EAAK,QAAUA,GAEfmB,IACAnB,GA5OuBI,EACrB,GACAC,EACI,iCACA,WAwOgBL,IAGtBrZ,EAAQoV,QAAWM,GAAa1V,EAAQkb,kBACxCxF,EAAWjF,EAAQ0K,gBAAkB1K,EAAQY,gBAK5CqE,EACD,OAAoB2D,EA/4BFzK,QAAQ,SAAU,MAi5BxC,MAAMwM,GAASpb,EAAQoV,OAAS,IAAM,KAAO7F,EAAQ,IAAM,IAC3D,IACI,MAAMyB,EAAMoI,EACN,CACEiC,MAAO5K,EACP6K,KAAMjC,EACNjJ,KAAMgJ,GAER,CACEiC,MAAO5K,EACP6K,KAAMjC,GAEd,OAAO1a,OAAOgK,OAAO,IAAI4S,OAAO,IAAMlC,EAAK,IAAK+B,GAAQpK,EAE5D,CACA,MAAOwK,GAOH,OADAnb,KAAK0I,MAAM,iBAAkByS,GACtB,IAAID,OAAO,KACtB,CAEJ,CACA,MAAAlH,GACI,GAAIhU,KAAKkV,SAA0B,IAAhBlV,KAAKkV,OACpB,OAAOlV,KAAKkV,OAOhB,MAAM/B,EAAMnT,KAAKmT,IACjB,IAAKA,EAAIlV,OAEL,OADA+B,KAAKkV,QAAS,EACPlV,KAAKkV,OAEhB,MAAMvV,EAAUK,KAAKL,QACfyb,EAAUzb,EAAQ0W,WAClBrD,GACArT,EAAQmY,IA5hCH,0CAGE,0BA4hCPiD,EAAQpb,EAAQoV,OAAS,IAAM,GAOrC,IAAIiE,EAAK7F,EACJyC,KAAIxF,IACL,MAAMiL,EAAKjL,EAAQwF,KAAIzF,GAAkB,iBAANA,EAC7BoE,GAAapE,GACbA,IAAMwC,GACFA,GACAxC,EAAE8K,OAuBZ,OAtBAI,EAAGC,SAAQ,CAACnL,EAAGnS,KACX,MAAMoZ,EAAOiE,EAAGrd,EAAI,GACd+Y,EAAOsE,EAAGrd,EAAI,GAChBmS,IAAMwC,IAAYoE,IAASpE,UAGlBtR,IAAT0V,OACa1V,IAAT+V,GAAsBA,IAASzE,GAC/B0I,EAAGrd,EAAI,GAAK,UAAYod,EAAU,QAAUhE,EAG5CiE,EAAGrd,GAAKod,OAGE/Z,IAAT+V,EACLiE,EAAGrd,EAAI,GAAK+Y,EAAO,UAAYqE,EAAU,KAEpChE,IAASzE,KACd0I,EAAGrd,EAAI,GAAK+Y,EAAO,aAAeqE,EAAU,OAAShE,EACrDiE,EAAGrd,EAAI,GAAK2U,IAChB,IAEG0I,EAAG/H,QAAOnD,GAAKA,IAAMwC,KAAUvK,KAAK,IAAI,IAE9CA,KAAK,KAGV4Q,EAAK,OAASA,EAAK,KAEfhZ,KAAKoP,SACL4J,EAAK,OAASA,EAAK,QACvB,IACIhZ,KAAKkV,OAAS,IAAIgG,OAAOlC,EAAI+B,EAEjC,CACA,MAAOQ,GAEHvb,KAAKkV,QAAS,CAClB,CAEA,OAAOlV,KAAKkV,MAChB,CACA,UAAAW,CAAW1F,GAKP,OAAInQ,KAAK2U,wBACExE,EAAE3F,MAAM,KAEVxK,KAAKgV,WAAa,cAAcjF,KAAKI,GAEnC,CAAC,MAAOA,EAAE3F,MAAM,QAGhB2F,EAAE3F,MAAM,MAEvB,CACA,KAAAgG,CAAMI,EAAGgE,EAAU5U,KAAK4U,SAIpB,GAHA5U,KAAK0I,MAAM,QAASkI,EAAG5Q,KAAKoQ,SAGxBpQ,KAAK0K,QACL,OAAO,EAEX,GAAI1K,KAAK0U,MACL,MAAa,KAAN9D,EAEX,GAAU,MAANA,GAAagE,EACb,OAAO,EAEX,MAAMjV,EAAUK,KAAKL,QAEjBK,KAAKgV,YACLpE,EAAIA,EAAEpG,MAAM,MAAMpC,KAAK,MAG3B,MAAMoT,EAAKxb,KAAK6V,WAAWjF,GAC3B5Q,KAAK0I,MAAM1I,KAAKoQ,QAAS,QAASoL,GAKlC,MAAMrI,EAAMnT,KAAKmT,IACjBnT,KAAK0I,MAAM1I,KAAKoQ,QAAS,MAAO+C,GAEhC,IAAIsI,EAAWD,EAAGA,EAAGvd,OAAS,GAC9B,IAAKwd,EACD,IAAK,IAAIzd,EAAIwd,EAAGvd,OAAS,GAAIwd,GAAYzd,GAAK,EAAGA,IAC7Cyd,EAAWD,EAAGxd,GAGtB,IAAK,IAAIA,EAAI,EAAGA,EAAImV,EAAIlV,OAAQD,IAAK,CACjC,MAAMoS,EAAU+C,EAAInV,GACpB,IAAIia,EAAOuD,EAKX,GAJI7b,EAAQ+b,WAAgC,IAAnBtL,EAAQnS,SAC7Bga,EAAO,CAACwD,IAEAzb,KAAKgY,SAASC,EAAM7H,EAASwE,GAErC,QAAIjV,EAAQgc,aAGJ3b,KAAKoP,MAErB,CAGA,OAAIzP,EAAQgc,YAGL3b,KAAKoP,MAChB,CACA,eAAOqE,CAASC,GACZ,OAAO,GAAUD,SAASC,GAAKnD,SACnC,EC/vCG,SAASqL,GAAuBrR,GACnC,MAAMsR,EAAS,CAAC,EAChB,IAAK,MAAMrd,KAAO+L,EAAQoJ,OACtBkI,EAAOrd,GAAO+L,EAAQzH,IAAItE,GAE9B,OAAOqd,CACX,CD+vCA,GAAUtL,UAAYA,GACtB,GAAUwD,OE7vCY,CAACzF,GAAKkG,wBAAuB,GAAW,CAAC,IAIpDA,EACDlG,EAAEC,QAAQ,aAAc,QACxBD,EAAEC,QAAQ,eAAgB,QFwvCpC,GAAUuF,SGzvCc,CAACxF,GAAKkG,wBAAuB,GAAW,CAAC,IACtDA,EACDlG,EAAEC,QAAQ,iBAAkB,MAC5BD,EAAEC,QAAQ,4BAA6B,QAAQA,QAAQ,aAAc,UCb3EuN,iCCFwB/M,MDG5B,SAAW+M,GACPA,EAAoB,MAAI,QACxBA,EAAqB,OAAI,SACzBA,EAAuB,SAAI,UAC9B,CAJD,CAIGA,KAAiBA,GAAe,CAAC,IEiB7B,MAaMC,GAAc9T,eAAA+T,EAA8Crc,GAAS,IAAAsc,EAAA,IAAvC,aAAE1U,EAAY,WAAED,GAAY0U,EACnE,MAAMzS,EAAe,CAAC,GAAIhC,EAAcD,GAAYc,KAAK,KACnD8T,EAAWvc,EAAQuc,SAAW,gBAAHta,OAAmBjC,EAAQuc,SAASC,cAAa,kBAAmB,GAC/F3S,QAAiB/C,EAAO4B,cAAckB,EAAcjL,OAAOgK,OAAO,CACpEC,OAAQ,SACRf,KAAM,sPAAF5F,OAMiB,QANjBqa,EAMItc,EAAQyc,aAAK,IAAAH,EAAAA,EAxBA,GAwBiB,oCAAAra,OAC7BjC,EAAQ0c,QAAU,EAAC,0BAAAza,OAC9Bsa,EAAQ,kCAEPvc,IACG2c,QAAqB9S,EAAS+S,OAC9B9b,QAAe+b,EAAAA,EAAAA,IAASF,GAE9B,OC1BG,SAAgC9S,EAAUhC,EAAMiV,GAAa,GAChE,OAAOA,EACD,CACEjV,OACA+C,QAASf,EAASe,QAAUqR,GAAuBpS,EAASe,SAAW,CAAC,EACxEmS,OAAQlT,EAASkT,OACjBC,WAAYnT,EAASmT,YAEvBnV,CACV,CDiBWoV,CAAuBpT,EADjBqT,GAAkBpc,GAAQ,IACO,EAClD,EAEMoc,GAAoB,SAAUpc,GAA4B,IAApBgc,EAAUrb,UAAAnD,OAAA,QAAAoD,IAAAD,UAAA,IAAAA,UAAA,GAElD,MAAQ0b,aAAetT,SAAUuT,IAAqBtc,EAEtD,OAAOsc,EAAcnH,KAAIoH,IAErB,MAAMjf,EAAQif,EAAKC,SAASC,KAC5B,OFaD,SAA8Bnf,EAAO0d,EAAUgB,GAAa,GAE/D,MAAQU,gBAAiBC,EAAU,KAAMC,iBAAkBC,EAAU,IAAKC,aAAchW,EAAe,KAAMiW,eAAgBC,EAAW,KAAMC,QAASC,EAAO,MAAS5f,EACjKqG,EAAOmD,GACe,iBAAjBA,QAC4B,IAA5BA,EAAaqW,WAClB,YACA,OACAjT,EAAO,CACT8Q,WACAoC,SAAU,YAAcpC,GACxBqC,QAASV,EACT5Y,KAAM8F,SAASgT,EAAS,IACxBlZ,OACAuZ,KAAsB,iBAATA,EAAoBA,EAAKpP,QAAQ,KAAM,IAAM,MAQ9D,MANa,SAATnK,IACAuG,EAAKoT,KAAON,GAAgC,iBAAbA,EAAwBA,EAASjT,MAAM,KAAK,GAAK,IAEhFiS,IACA9R,EAAK5M,MAAQA,GAEV4M,CACX,CEpCeqT,CAAqBjgB,EAAOA,EAAMqJ,GAAGpI,WAAYyd,EAAW,GAE3E,kBEjEA,UAAewB,EAAAA,EAAAA,IAAgB,CAC3BlgB,MAAO,CACHuJ,WAAY,CACRlD,KAAMK,OACNe,UAAU,GAEd+B,aAAc,CACVnD,KAAMC,OACNE,QAAS,UAGjBiD,KAAIA,KACO,CACH0W,WAAY,CACRvU,kBAAkBC,EAAAA,EAAAA,MAAiBC,YACnCC,SAASF,EAAAA,EAAAA,MAAiBG,IAC1BvL,IAAK,UAET0P,SAAU,CAAC,IAGnBtG,QAAS,CAOL,kBAAMqE,CAAakS,EAAQ3d,GACvB,MAAM,KAAEgH,SAAeiC,EAAAA,EAAM3G,KAAIsb,EAAAA,EAAAA,IAAe,yBAA0B,CACtEC,OAAQ,CACJF,SACAG,SAAU,QACVC,OAAQve,KAAKsH,WACbkX,OAAQ,8BACRpC,OAAOqC,EAAAA,GAAAA,GAAU,WAAY,6BAKrC,OADAjX,EAAKkX,IAAIlX,KAAK8T,SAAQqD,IAAU3e,KAAKkO,SAASyQ,EAAKvX,IAAMuX,CAAI,IACtDne,EAASlC,OAAOsgB,OAAO5e,KAAKkO,UACvC,EAOA2Q,eAAAA,CAAgBC,GAaZ,OAZAxgB,OAAOsgB,OAAOE,GACTC,OACAzD,SAAQ0D,IAAW,IAAAC,EACpBjf,KAAKkO,SAAS8Q,EAAQE,WAAa,CAE/BC,KAAM,YACN/X,GAAI4X,EAAQE,UACZE,MAAOJ,EAAQK,mBACfC,OAAQ,QACRC,SAAyB,QAAhBN,GAAArV,EAAAA,EAAAA,aAAgB,IAAAqV,OAAA,EAAhBA,EAAkBlV,OAAQiV,EAAQE,UAC9C,IAEElf,KAAKkO,QAChB,qBCqCRvK,EAAAA,GAAAK,IAAAwb,EAAAA,IACA7b,EAAAA,GAAAK,IAAAyb,GAEA,MC3GoL,GD2GpL,CACAxb,KAAA,WAEA8G,WAAA,CACA2U,QAAA,GACAC,eAAA,IACAlU,SAAA,IACAmU,YAAA,EACAC,qBAAA,EACAC,uBAAAA,EAAAA,GAGAnU,OAAA,CAAAoU,IAEAvY,KAAAA,KACA,CACAmB,MAAA,GACAhB,SAAA,EACAqY,MAAA,EAEA1Y,WAAA,KACA+U,OAAA,EACA4D,SAAA,GAEAC,cAAAA,OAEAR,QAAA,GACAxR,SAAA,KAIAxI,SAAA,CACAya,WAAAA,GACA,YAAAF,SAAAhiB,OAAA,CACA,EACAmiB,cAAAA,GACA,YAAAzY,SAAA,SAAA0U,MACA,GAGAzU,QAAA,CACAiB,EAAA,KAEA,wBAAAwX,CAAAC,GACA,GAAAA,EACA,SE3HkCC,EAAChZ,EAAcD,EAAYkZ,KACzD,MAAMjX,EAAe,CAAC,GAAIhC,EAAcD,GAAYc,KAAK,KACnDqY,EAAaD,EAAKrW,cACxB,OAAO1D,EAAO4B,cAAckB,EAAc,CACtChB,OAAQ,YACRf,KAAM,iLAAF5F,OAMU6e,EAAU,mFAI1B,EF6GNF,CAAA,KAAAhZ,aAAA,KAAAD,WAAA,IAAA4C,KACA,OAAA7H,IACAuG,EAAAA,EAAAA,IAAAvG,EAAAgF,UAAAwB,EAAAA,EAAAA,IAAA,8CACA,CAEA,EAOA,YAAAvF,CAAAgE,GACA,KAAAA,WAAAA,EACA,KAAAoZ,aACA,KAAA3E,aACA,EAKA4E,qBAAAA,GAOA,KAAAhY,OAAA,KAAAqX,MAAA,KAAArY,SAGA,KAAAoU,aACA,EAKA,iBAAAA,GAEA,KAAAmE,cAAA,UAEA,IACA,KAAAvY,SAAA,EACA,KAAAgB,MAAA,GAGA,cAAAiY,EAAA,MAAAC,GG3K0B,SAASD,GAClC,MAAME,EAAa,IAAIC,gBACjBC,EAASF,EAAWE,OAgB1B,MAAO,CACNJ,QATa3Y,eAAegZ,EAAKthB,GAKjC,aAJuBihB,EACtBK,EACA3iB,OAAOgK,OAAO,CAAE0Y,UAAUrhB,GAG5B,EAICkhB,MAAOA,IAAMC,EAAWD,QAE1B,CHqJAK,CAAAnF,IACA,KAAAmE,cAAAW,EAGA,MAAArZ,KAAAyY,SAAAW,EAAA,CACArZ,aAAA,KAAAA,aACAD,WAAA,KAAAA,YACA,CAAA+U,OAAA,KAAAA,UAAA,CAAA7U,KAAA,IAEA,KAAAiB,OAAAC,MAAA,aAAA9G,OAAAqe,EAAAhiB,OAAA,cAAAgiB,aAIAA,EAAAhiB,OH1L6B,KG2L7B,KAAA+hB,MAAA,GAIA,KAAAC,SAAAnQ,QAAAmQ,GAGA,KAAA5D,QHlM6B,EGmM7B,OAAA1T,GACA,cAAAA,EAAAtB,QACA,OAEA,KAAAsB,OAAAE,EAAAA,EAAAA,IAAA,+CACA5F,GAAA0F,MAAA,kCAAAA,EACA,SACA,KAAAhB,SAAA,CACA,CACA,EAOA0B,YAAAA,CAAAqB,GACA,KAAAuV,SAAAkB,QAAAzW,EACA,EAOA1B,QAAAA,CAAA5B,GACA,MAAAga,EAAA,KAAAnB,SAAAoB,WAAA3W,GAAAA,EAAA3M,MAAAqJ,KAAAA,IACAga,GAAA,EACA,KAAAnB,SAAAnJ,OAAAsK,EAAA,GAEAne,GAAA0F,MAAA,iDAAAvB,EAEA,EAKAsZ,UAAAA,GACA,KAAA/X,MAAA,GACA,KAAAhB,SAAA,EACA,KAAAqY,MAAA,EACA,KAAA3D,OAAA,EACA,KAAA4D,SAAA,EACA,oBI7PI,GAAU,CAAC,EAEf,GAAQ/S,kBAAoB,KAC5B,GAAQC,cAAgB,KAElB,GAAQC,OAAS,UAAc,KAAM,QAE3C,GAAQC,OAAS,KACjB,GAAQC,mBAAqB,KAEhB,KAAI,KAAS,IAKJ,MAAW,KAAQC,QAAS,KAAQA,OCP1D,UAXgB,OACd,ICTW,WAAkB,IAAI7I,EAAI1E,KAAK2E,EAAGD,EAAIE,MAAMD,GAAG,OAAOA,EAAG,MAAM,CAAC6I,WAAW,CAAC,CAACvJ,KAAK,qBAAqBwJ,QAAQ,uBAAuBpN,MAAOqE,EAAI2b,mBAAoB3S,WAAW,uBAAuB5I,YAAY,WAAW6I,MAAM,CAAE,eAAgBjJ,EAAI0b,iBAAkB,CAACzb,EAAG,UAAUD,EAAIG,GAAG,CAACC,YAAY,mBAAmBC,MAAM,CAAC,gBAAgBL,EAAIuH,aAAa,gBAAgBvH,EAAI6C,aAAa,QAAS,EAAK,YAAY7C,EAAIwJ,SAAS,cAAcxJ,EAAI4C,YAAYtC,GAAG,CAAC,IAAMN,EAAI2E,eAAe,UAAU3E,EAAIwZ,YAAW,IAAQxZ,EAAIU,GAAG,KAAOV,EAAI0b,eAAy+C1b,EAAIY,KAA79C,EAAGZ,EAAIyb,aAAezb,EAAIsb,KAAMrb,EAAG,iBAAiB,CAACG,YAAY,kBAAkBC,MAAM,CAAC,KAAOL,EAAImE,EAAE,WAAY,6CAA6C+E,YAAYlJ,EAAImJ,GAAG,CAAC,CAACrP,IAAI,OAAOsP,GAAG,WAAW,MAAO,CAACnJ,EAAG,wBAAwB,EAAEoJ,OAAM,IAAO,MAAK,EAAM,cAAcpJ,EAAG,KAAKD,EAAI4c,GAAI5c,EAAIub,UAAU,SAASvV,GAAS,OAAO/F,EAAG,UAAUD,EAAIG,GAAG,CAACrG,IAAIkM,EAAQ3M,MAAMqJ,GAAGtC,YAAY,iBAAiBC,MAAM,CAAC,IAAM,KAAK,gBAAgBL,EAAIuH,aAAa,gBAAgBvH,EAAI6C,aAAa,QAAUmD,EAAQ3M,MAAMsJ,QAAQ,cAAc3C,EAAI4C,WAAW,YAAY5C,EAAIma,gBAAgBnU,EAAQ3M,MAAM+gB,WAAW9Z,GAAG,CAAC,iBAAiB,SAASC,GAAQ,OAAOP,EAAI6c,KAAK7W,EAAQ3M,MAAO,UAAWkH,EAAO,EAAE,OAASP,EAAIsE,WAAW,UAAU0B,EAAQ3M,OAAM,GAAO,IAAG,GAAG2G,EAAIU,GAAG,KAAMV,EAAIiD,UAAYjD,EAAI0b,eAAgBzb,EAAG,MAAM,CAACG,YAAY,gCAAiCJ,EAAIyb,aAAezb,EAAIsb,KAAMrb,EAAG,MAAM,CAACG,YAAY,kBAAkB,CAACJ,EAAIU,GAAG,WAAWV,EAAIW,GAAGX,EAAImE,EAAE,WAAY,qBAAqB,YAAanE,EAAIiE,MAAO,CAAChE,EAAG,iBAAiB,CAACG,YAAY,kBAAkBC,MAAM,CAAC,KAAOL,EAAIiE,OAAOiF,YAAYlJ,EAAImJ,GAAG,CAAC,CAACrP,IAAI,OAAOsP,GAAG,WAAW,MAAO,CAACnJ,EAAG,0BAA0B,EAAEoJ,OAAM,IAAO,MAAK,EAAM,YAAYrJ,EAAIU,GAAG,KAAKT,EAAG,WAAW,CAACG,YAAY,kBAAkBE,GAAG,CAAC,MAAQN,EAAIqX,aAAanO,YAAYlJ,EAAImJ,GAAG,CAAC,CAACrP,IAAI,OAAOsP,GAAG,WAAW,MAAO,CAACnJ,EAAG,eAAe,EAAEoJ,OAAM,IAAO,MAAK,EAAM,aAAa,CAACrJ,EAAIU,GAAG,aAAaV,EAAIW,GAAGX,EAAImE,EAAE,WAAY,UAAU,eAAenE,EAAIY,OAAgB,EAC/hE,GACsB,IDUpB,EACA,KACA,WACA,MAI8B,QEUhCkc,EAAAA,GAAoBC,MAAK1a,EAAAA,EAAAA,OAGzBpD,EAAAA,GAAI+d,MAAM,CACTla,KAAIA,KACI,CACNiB,OAAMA,IAGRb,QAAS,CACRiB,EAAC,KACDuR,EAACA,EAAAA,sBCfCtW,OAAO6d,MAAQ7d,OAAO6d,IAAIC,UAC7BtjB,OAAOgK,OAAOxE,OAAO6d,IAAK,CAAEC,SAAU,CAAC,IAIxCtjB,OAAOgK,OAAOxE,OAAO6d,IAAIC,SAAU,CAAEC,KDctB,MAQdlkB,WAAAA,GAAkD,IAAAmkB,EAAA,IAAtCva,EAAYnG,UAAAnD,OAAA,QAAAoD,IAAAD,UAAA,GAAAA,UAAA,GAAG,QAASzB,EAAOyB,UAAAnD,OAAA,QAAAoD,IAAAD,UAAA,GAAAA,UAAA,GAAG,CAAC,EAW9C,OATAzB,EAAU,IACNA,EACHoiB,UAAW,IACW,QAArBD,EAAIniB,EAAQoiB,iBAAS,IAAAD,EAAAA,EAAI,CAAC,EAC1Bva,iBAKK,IADM5D,EAAAA,GAAIqe,OAAOC,IACjB,CAAStiB,EACjB,KCjCDsD,GAAQyF,MAAM,wDC7Bd,SAASwZ,EAAS3O,EAAGC,EAAG2O,GAClB5O,aAAa2H,SAAQ3H,EAAI6O,EAAW7O,EAAG4O,IACvC3O,aAAa0H,SAAQ1H,EAAI4O,EAAW5O,EAAG2O,IAE3C,IAAIE,EAAIC,EAAM/O,EAAGC,EAAG2O,GAEpB,OAAOE,GAAK,CACV5I,MAAO4I,EAAE,GACTE,IAAKF,EAAE,GACPG,IAAKL,EAAInS,MAAM,EAAGqS,EAAE,IACpBI,KAAMN,EAAInS,MAAMqS,EAAE,GAAK9O,EAAEtV,OAAQokB,EAAE,IACnC3Y,KAAMyY,EAAInS,MAAMqS,EAAE,GAAK7O,EAAEvV,QAE7B,CAEA,SAASmkB,EAAWM,EAAKP,GACvB,IAAIrJ,EAAIqJ,EAAI3R,MAAMkS,GAClB,OAAO5J,EAAIA,EAAE,GAAK,IACpB,CAGA,SAASwJ,EAAM/O,EAAGC,EAAG2O,GACnB,IAAIQ,EAAMC,EAAKC,EAAMC,EAAOriB,EACxBkX,EAAKwK,EAAI/L,QAAQ7C,GACjBqE,EAAKuK,EAAI/L,QAAQ5C,EAAGmE,EAAK,GACzB3Z,EAAI2Z,EAER,GAAIA,GAAM,GAAKC,EAAK,EAAG,CACrB,GAAGrE,IAAIC,EACL,MAAO,CAACmE,EAAIC,GAKd,IAHA+K,EAAO,GACPE,EAAOV,EAAIlkB,OAEJD,GAAK,IAAMyC,GACZzC,GAAK2Z,GACPgL,EAAK7S,KAAK9R,GACV2Z,EAAKwK,EAAI/L,QAAQ7C,EAAGvV,EAAI,IACA,GAAf2kB,EAAK1kB,OACdwC,EAAS,CAAEkiB,EAAKlY,MAAOmN,KAEvBgL,EAAMD,EAAKlY,OACDoY,IACRA,EAAOD,EACPE,EAAQlL,GAGVA,EAAKuK,EAAI/L,QAAQ5C,EAAGxV,EAAI,IAG1BA,EAAI2Z,EAAKC,GAAMD,GAAM,EAAIA,EAAKC,EAG5B+K,EAAK1kB,SACPwC,EAAS,CAAEoiB,EAAMC,GAErB,CAEA,OAAOriB,CACT,CA5DAsiB,EAAOC,QAAUd,EAqBjBA,EAASI,MAAQA,mBCtBjB,IAAIJ,EAAW,EAAQ,MAEvBa,EAAOC,QA6DP,SAAmBb,GACjB,OAAKA,GASoB,OAArBA,EAAIc,OAAO,EAAG,KAChBd,EAAM,SAAWA,EAAIc,OAAO,IAGvBC,EA7DT,SAAsBf,GACpB,OAAOA,EAAI3X,MAAM,QAAQpC,KAAK+a,GACnB3Y,MAAM,OAAOpC,KAAKgb,GAClB5Y,MAAM,OAAOpC,KAAKib,GAClB7Y,MAAM,OAAOpC,KAAKkb,GAClB9Y,MAAM,OAAOpC,KAAKmb,EAC/B,CAuDgBC,CAAarB,IAAM,GAAMvM,IAAI6N,IAZlC,EAaX,EA1EA,IAAIN,EAAW,UAAUO,KAAKC,SAAS,KACnCP,EAAU,SAASM,KAAKC,SAAS,KACjCN,EAAW,UAAUK,KAAKC,SAAS,KACnCL,EAAW,UAAUI,KAAKC,SAAS,KACnCJ,EAAY,WAAWG,KAAKC,SAAS,KAEzC,SAASC,EAAQzB,GACf,OAAO7X,SAAS6X,EAAK,KAAOA,EACxB7X,SAAS6X,EAAK,IACdA,EAAI0B,WAAW,EACrB,CAUA,SAASJ,EAAetB,GACtB,OAAOA,EAAI3X,MAAM2Y,GAAU/a,KAAK,MACrBoC,MAAM4Y,GAAShb,KAAK,KACpBoC,MAAM6Y,GAAUjb,KAAK,KACrBoC,MAAM8Y,GAAUlb,KAAK,KACrBoC,MAAM+Y,GAAWnb,KAAK,IACnC,CAMA,SAAS0b,EAAgB3B,GACvB,IAAKA,EACH,MAAO,CAAC,IAEV,IAAIvL,EAAQ,GACRkC,EAAIoJ,EAAS,IAAK,IAAKC,GAE3B,IAAKrJ,EACH,OAAOqJ,EAAI3X,MAAM,KAEnB,IAAIgY,EAAM1J,EAAE0J,IACRC,EAAO3J,EAAE2J,KACT/Y,EAAOoP,EAAEpP,KACTyG,EAAIqS,EAAIhY,MAAM,KAElB2F,EAAEA,EAAElS,OAAO,IAAM,IAAMwkB,EAAO,IAC9B,IAAIsB,EAAYD,EAAgBpa,GAQhC,OAPIA,EAAKzL,SACPkS,EAAEA,EAAElS,OAAO,IAAM8lB,EAAUC,QAC3B7T,EAAEL,KAAKnO,MAAMwO,EAAG4T,IAGlBnN,EAAM9G,KAAKnO,MAAMiV,EAAOzG,GAEjByG,CACT,CAmBA,SAASqN,EAAQ9B,GACf,MAAO,IAAMA,EAAM,GACrB,CACA,SAAS+B,EAASxkB,GAChB,MAAO,SAASqQ,KAAKrQ,EACvB,CAEA,SAASykB,EAAInmB,EAAGomB,GACd,OAAOpmB,GAAKomB,CACd,CACA,SAASC,EAAIrmB,EAAGomB,GACd,OAAOpmB,GAAKomB,CACd,CAEA,SAASlB,EAAOf,EAAKmC,GACnB,IAAIC,EAAa,GAEbzL,EAAIoJ,EAAS,IAAK,IAAKC,GAC3B,IAAKrJ,EAAG,MAAO,CAACqJ,GAGhB,IAAIK,EAAM1J,EAAE0J,IACR9Y,EAAOoP,EAAEpP,KAAKzL,OACdilB,EAAOpK,EAAEpP,MAAM,GACf,CAAC,IAEL,GAAI,MAAMqG,KAAK+I,EAAE0J,KACf,IAAK,IAAIgC,EAAI,EAAGA,EAAI9a,EAAKzL,OAAQumB,IAAK,CACpC,IAAIC,EAAYjC,EAAK,IAAM1J,EAAE2J,KAAO,IAAM/Y,EAAK8a,GAC/CD,EAAWzU,KAAK2U,EAClB,KACK,CACL,IAaIrK,EAkBAsK,EA/BAC,EAAoB,iCAAiC5U,KAAK+I,EAAE2J,MAC5DmC,EAAkB,uCAAuC7U,KAAK+I,EAAE2J,MAChEoC,EAAaF,GAAqBC,EAClCE,EAAYhM,EAAE2J,KAAKrM,QAAQ,MAAQ,EACvC,IAAKyO,IAAeC,EAElB,OAAIhM,EAAEpP,KAAK8G,MAAM,SAER0S,EADPf,EAAMrJ,EAAE0J,IAAM,IAAM1J,EAAE2J,KAAOY,EAAWvK,EAAEpP,MAGrC,CAACyY,GAIV,GAAI0C,EACFzK,EAAItB,EAAE2J,KAAKjY,MAAM,aAGjB,GAAiB,KADjB4P,EAAI0J,EAAgBhL,EAAE2J,OAChBxkB,QAGa,KADjBmc,EAAI8I,EAAO9I,EAAE,IAAI,GAAOxE,IAAIqO,IACtBhmB,OACJ,OAAOyL,EAAKkM,KAAI,SAASzF,GACvB,OAAO2I,EAAE0J,IAAMpI,EAAE,GAAKjK,CACxB,IASN,GAAI0U,EAAY,CACd,IAAIE,EAAInB,EAAQxJ,EAAE,IACdgK,EAAIR,EAAQxJ,EAAE,IACd4K,EAAQtB,KAAKuB,IAAI7K,EAAE,GAAGnc,OAAQmc,EAAE,GAAGnc,QACnCinB,EAAmB,GAAZ9K,EAAEnc,OACTylB,KAAKyB,IAAIvB,EAAQxJ,EAAE,KACnB,EACArK,EAAOoU,EACGC,EAAIW,IAEhBG,IAAS,EACTnV,EAAOsU,GAET,IAAIe,EAAMhL,EAAEiL,KAAKnB,GAEjBQ,EAAI,GAEJ,IAAK,IAAI1mB,EAAI+mB,EAAGhV,EAAK/R,EAAGomB,GAAIpmB,GAAKknB,EAAM,CACrC,IAAI1V,EACJ,GAAIoV,EAEQ,QADVpV,EAAInL,OAAOihB,aAAatnB,MAEtBwR,EAAI,SAGN,GADAA,EAAInL,OAAOrG,GACPonB,EAAK,CACP,IAAIG,EAAOP,EAAQxV,EAAEvR,OACrB,GAAIsnB,EAAO,EAAG,CACZ,IAAIC,EAAI,IAAI7mB,MAAM4mB,EAAO,GAAGnd,KAAK,KAE/BoH,EADExR,EAAI,EACF,IAAMwnB,EAAIhW,EAAEQ,MAAM,GAElBwV,EAAIhW,CACZ,CACF,CAEFkV,EAAE5U,KAAKN,EACT,CACF,KAAO,CACLkV,EAAI,GAEJ,IAAK,IAAIpO,EAAI,EAAGA,EAAI8D,EAAEnc,OAAQqY,IAC5BoO,EAAE5U,KAAKnO,MAAM+iB,EAAGxB,EAAO9I,EAAE9D,IAAI,GAEjC,CAEA,IAASA,EAAI,EAAGA,EAAIoO,EAAEzmB,OAAQqY,IAC5B,IAASkO,EAAI,EAAGA,EAAI9a,EAAKzL,OAAQumB,IAC3BC,EAAYjC,EAAMkC,EAAEpO,GAAK5M,EAAK8a,KAC7BF,GAASO,GAAcJ,IAC1BF,EAAWzU,KAAK2U,EAGxB,CAEA,OAAOF,CACT,oFCtMIkB,QAA0B,GAA4B,KAE1DA,EAAwB3V,KAAK,CAACiT,EAAO3b,GAAI,8rCAA+rC,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,wDAAwD,MAAQ,GAAG,SAAW,udAAud,eAAiB,CAAC,+1CAAi2C,WAAa,MAExqG,4FCJIqe,QAA0B,GAA4B,KAE1DA,EAAwB3V,KAAK,CAACiT,EAAO3b,GAAI,kUAAmU,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,oDAAoD,MAAQ,GAAG,SAAW,wHAAwH,eAAiB,CAAC,uTAAuT,WAAa,MAE/5B,wCCLA,MAAMse,EAAY,EAAQ,OACpBC,EAAY,EAAQ,OACpBC,EAAa,EAAQ,MAE3B7C,EAAOC,QAAU,CACf2C,UAAWA,EACXE,aAAcH,EACdE,WAAYA,2BCAd,SAASroB,EAAQC,GAAmV,OAAtOD,EAArD,mBAAXE,QAAoD,iBAApBA,OAAOC,SAAmC,SAAiBF,GAAO,cAAcA,CAAK,EAAsB,SAAiBA,GAAO,OAAOA,GAAyB,mBAAXC,QAAyBD,EAAIG,cAAgBF,QAAUD,IAAQC,OAAOG,UAAY,gBAAkBJ,CAAK,EAAYD,EAAQC,EAAM,CAUzX,SAASsoB,EAAiBC,GAAS,IAAIC,EAAwB,mBAARC,IAAqB,IAAIA,SAAQ5kB,EAA8nB,OAAnnBykB,EAAmB,SAA0BC,GAAS,GAAc,OAAVA,IAMlIjY,EANuKiY,GAMjG,IAAzD7Z,SAASlN,SAASC,KAAK6O,GAAIsI,QAAQ,kBAN+H,OAAO2P,EAMjN,IAA2BjY,EAN6L,GAAqB,mBAAViY,EAAwB,MAAM,IAAI3mB,UAAU,sDAAyD,QAAsB,IAAX4mB,EAAwB,CAAE,GAAIA,EAAOE,IAAIH,GAAQ,OAAOC,EAAOljB,IAAIijB,GAAQC,EAAO7S,IAAI4S,EAAOI,EAAU,CAAE,SAASA,IAAY,OAAOC,EAAWL,EAAO3kB,UAAWilB,EAAgBrmB,MAAMrC,YAAc,CAAkJ,OAAhJwoB,EAAQvoB,UAAYU,OAAOgoB,OAAOP,EAAMnoB,UAAW,CAAED,YAAa,CAAE0C,MAAO8lB,EAAShoB,YAAY,EAAOE,UAAU,EAAMD,cAAc,KAAkBmoB,EAAgBJ,EAASJ,EAAQ,EAAUD,EAAiBC,EAAQ,CAEtvB,SAASK,EAAWI,EAAQ/kB,EAAMskB,GAAqV,OAAhQK,EAEvH,WAAuC,GAAuB,oBAAZK,UAA4BA,QAAQC,UAAW,OAAO,EAAO,GAAID,QAAQC,UAAUC,KAAM,OAAO,EAAO,GAAqB,mBAAVC,MAAsB,OAAO,EAAM,IAAiF,OAA3E1c,KAAKtM,UAAUoB,SAASC,KAAKwnB,QAAQC,UAAUxc,KAAM,IAAI,WAAa,MAAY,CAAM,CAAE,MAAO7H,GAAK,OAAO,CAAO,CAAE,CAFpRwkB,GAA4CJ,QAAQC,UAAiC,SAAoBF,EAAQ/kB,EAAMskB,GAAS,IAAIxS,EAAI,CAAC,MAAOA,EAAEzD,KAAKnO,MAAM4R,EAAG9R,GAAO,IAAsD5B,EAAW,IAA/CqM,SAASnJ,KAAKpB,MAAM6kB,EAAQjT,IAA6F,OAAnDwS,GAAOQ,EAAgB1mB,EAAUkmB,EAAMnoB,WAAmBiC,CAAU,EAAYumB,EAAWzkB,MAAM,KAAMP,UAAY,CAMja,SAASmlB,EAAgBO,EAAG3W,GAA+G,OAA1GoW,EAAkBjoB,OAAOyoB,gBAAkB,SAAyBD,EAAG3W,GAAsB,OAAjB2W,EAAEE,UAAY7W,EAAU2W,CAAG,EAAUP,EAAgBO,EAAG3W,EAAI,CAEzK,SAASkW,EAAgBS,GAAwJ,OAAnJT,EAAkB/nB,OAAOyoB,eAAiBzoB,OAAO2oB,eAAiB,SAAyBH,GAAK,OAAOA,EAAEE,WAAa1oB,OAAO2oB,eAAeH,EAAI,EAAUT,EAAgBS,EAAI,CAE5M,IAGII,EAA4C,SAAUC,GAGxD,SAASD,EAA6B7I,GACpC,IAAI/d,EAMJ,OAjCJ,SAAyBT,EAAUC,GAAe,KAAMD,aAAoBC,GAAgB,MAAM,IAAIV,UAAU,oCAAwC,CA6BpJW,CAAgBC,KAAMknB,IAEtB5mB,EA7BJ,SAAoC8mB,EAAMnoB,GAAQ,OAAIA,GAA2B,WAAlB1B,EAAQ0B,IAAsC,mBAATA,EAEpG,SAAgCmoB,GAAQ,QAAa,IAATA,EAAmB,MAAM,IAAIC,eAAe,6DAAgE,OAAOD,CAAM,CAFnBE,CAAuBF,GAAtCnoB,CAA6C,CA6BpKsoB,CAA2BvnB,KAAMqmB,EAAgBa,GAA8BjoB,KAAKe,KAAMqe,KAC5Fpa,KAAO,+BACN3D,CACT,CAEA,OA9BF,SAAmBknB,EAAUC,GAAc,GAA0B,mBAAfA,GAA4C,OAAfA,EAAuB,MAAM,IAAIroB,UAAU,sDAAyDooB,EAAS5pB,UAAYU,OAAOgoB,OAAOmB,GAAcA,EAAW7pB,UAAW,CAAED,YAAa,CAAE0C,MAAOmnB,EAAUnpB,UAAU,EAAMD,cAAc,KAAeqpB,GAAYlB,EAAgBiB,EAAUC,EAAa,CAkB9XC,CAAUR,EAA8BC,GAYjCD,CACT,CAdgD,CAc9CpB,EAAiB/W,QA6LnB,SAAS4Y,EAASC,EAAQC,GAoCxB,IAnCA,IAAIrnB,EAAWY,UAAUnD,OAAS,QAAsBoD,IAAjBD,UAAU,GAAmBA,UAAU,GAAK,WAAa,EAC5F0mB,EAAWD,EAAKrd,MA/MD,KAgNfvM,EAAS6pB,EAAS7pB,OAElB8pB,EAAQ,SAAeC,GACzB,IAAIC,EAAiBH,EAASE,GAE9B,IAAKJ,EACH,MAAO,CACLM,OAAG,GAIP,GA5NiB,MA4NbD,EAAmC,CACrC,GAAItpB,MAAMC,QAAQgpB,GAChB,MAAO,CACLM,EAAGN,EAAOhS,KAAI,SAAUvV,EAAO+gB,GAC7B,IAAI+G,EAAoBL,EAAS9X,MAAMgY,EAAM,GAE7C,OAAIG,EAAkBlqB,OAAS,EACtB0pB,EAAStnB,EAAO8nB,EAAkB/f,KAlOlC,KAkOwD5H,GAExDA,EAASonB,EAAQxG,EAAO0G,EAAUE,EAE7C,KAGF,IAAII,EAAaN,EAAS9X,MAAM,EAAGgY,GAAK5f,KAzO3B,KA0Ob,MAAM,IAAI2G,MAAM,uBAAuBnN,OAAOwmB,EAAY,qBAE9D,CACER,EAASpnB,EAASonB,EAAQK,EAAgBH,EAAUE,EAExD,EAESA,EAAM,EAAGA,EAAM/pB,EAAQ+pB,IAAO,CACrC,IAAIK,EAAON,EAAMC,GAEjB,GAAsB,WAAlBzqB,EAAQ8qB,GAAoB,OAAOA,EAAKH,CAC9C,CAEA,OAAON,CACT,CAEA,SAASU,EAAcR,EAAU1G,GAC/B,OAAO0G,EAAS7pB,SAAWmjB,EAAQ,CACrC,CA1OA2B,EAAOC,QAAU,CACf7P,IAkGF,SAA2ByU,EAAQW,EAAUloB,GAC3C,GAAuB,UAAnB9C,EAAQqqB,IAAkC,OAAXA,EACjC,OAAOA,EAGT,QAAuB,IAAZW,EACT,OAAOX,EAGT,GAAuB,iBAAZW,EAET,OADAX,EAAOW,GAAYloB,EACZunB,EAAOW,GAGhB,IACE,OAAOZ,EAASC,EAAQW,GAAU,SAA4BC,EAAeC,EAAiBX,EAAU1G,GACtG,GAAIoH,IAAkB/B,QAAQQ,eAAe,CAAC,GAC5C,MAAM,IAAIC,EAA6B,yCAGzC,IAAKsB,EAAcC,GAAkB,CACnC,IAAIC,EAAmBjkB,OAAOkkB,UAAUlkB,OAAOqjB,EAAS1G,EAAQ,KAC5DwH,EA5IS,MA4IiBd,EAAS1G,EAAQ,GAG7CoH,EAAcC,GADZC,GAAoBE,EACW,GAEA,CAAC,CAEtC,CAMA,OAJIN,EAAcR,EAAU1G,KAC1BoH,EAAcC,GAAmBpoB,GAG5BmoB,EAAcC,EACvB,GACF,CAAE,MAAOI,GACP,GAAIA,aAAe3B,EAEjB,MAAM2B,EAEN,OAAOjB,CAEX,CACF,EA9IE9kB,IAqBF,SAA2B8kB,EAAQW,GACjC,GAAuB,UAAnBhrB,EAAQqqB,IAAkC,OAAXA,EACjC,OAAOA,EAGT,QAAuB,IAAZW,EACT,OAAOX,EAGT,GAAuB,iBAAZW,EACT,OAAOX,EAAOW,GAGhB,IACE,OAAOZ,EAASC,EAAQW,GAAU,SAA4BC,EAAeC,GAC3E,OAAOD,EAAcC,EACvB,GACF,CAAE,MAAOI,GACP,OAAOjB,CACT,CACF,EAxCE1B,IAqDF,SAA2B0B,EAAQW,GACjC,IAAI5oB,EAAUyB,UAAUnD,OAAS,QAAsBoD,IAAjBD,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAEnF,GAAuB,UAAnB7D,EAAQqqB,IAAkC,OAAXA,EACjC,OAAO,EAGT,QAAuB,IAAZW,EACT,OAAO,EAGT,GAAuB,iBAAZA,EACT,OAAOA,KAAYX,EAGrB,IACE,IAAI1B,GAAM,EAYV,OAXAyB,EAASC,EAAQW,GAAU,SAA4BC,EAAeC,EAAiBX,EAAU1G,GAC/F,IAAIkH,EAAcR,EAAU1G,GAO1B,OAAOoH,GAAiBA,EAAcC,GALpCvC,EADEvmB,EAAQmpB,IACJN,EAAcO,eAAeN,GAE7BA,KAAmBD,CAK/B,IACOtC,CACT,CAAE,MAAO2C,GACP,OAAO,CACT,CACF,EApFEG,OAAQ,SAAgBpB,EAAQW,EAAU5oB,GACxC,OAAOK,KAAKkmB,IAAI0B,EAAQW,EAAU5oB,GAAW,CAC3CmpB,KAAK,GAET,EACAG,KAoJF,SAA4BrB,EAAQW,EAAUW,GAC5C,IAAIvpB,EAAUyB,UAAUnD,OAAS,QAAsBoD,IAAjBD,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAEnF,GAAuB,UAAnB7D,EAAQqqB,IAAkC,OAAXA,EACjC,OAAO,EAGT,QAAuB,IAAZW,EACT,OAAO,EAGT,IACE,IAAIU,GAAO,EACPE,GAAa,EAOjB,OANAxB,EAASC,EAAQW,GAAU,SAA6BC,EAAeC,EAAiBX,EAAU1G,GAGhG,OAFA6H,EAAOA,GAAQT,IAAkBU,KAAkBV,GAAiBA,EAAcC,KAAqBS,EACvGC,EAAab,EAAcR,EAAU1G,IAAqC,WAA3B7jB,EAAQirB,IAA+BC,KAAmBD,EAClGA,GAAiBA,EAAcC,EACxC,IAEI9oB,EAAQypB,UACHH,GAAQE,EAERF,CAEX,CAAE,MAAOJ,GACP,OAAO,CACT,CACF,EA/KE3B,6BAA8BA,gDCtC5BmC,EAAO,EAAQ,OACfC,EAAW,SAAUvE,GACvB,MAAoB,iBAANA,CAChB,EAOA,SAASwE,EAAe3S,EAAO4S,GAE7B,IADA,IAAIC,EAAM,GACDzrB,EAAI,EAAGA,EAAI4Y,EAAM3Y,OAAQD,IAAK,CACrC,IAAImS,EAAIyG,EAAM5Y,GAGTmS,GAAW,MAANA,IAGA,OAANA,EACEsZ,EAAIxrB,QAAkC,OAAxBwrB,EAAIA,EAAIxrB,OAAS,GACjCwrB,EAAIhf,MACK+e,GACTC,EAAI3Z,KAAK,MAGX2Z,EAAI3Z,KAAKK,GAEb,CAEA,OAAOsZ,CACT,CAIA,IAAIC,EACA,gEACAC,EAAQ,CAAC,EAGb,SAASC,EAAenO,GACtB,OAAOiO,EAAYG,KAAKpO,GAAUzL,MAAM,EAC1C,CAKA2Z,EAAMG,QAAU,WAId,IAHA,IAAIC,EAAe,GACfC,GAAmB,EAEdhsB,EAAIoD,UAAUnD,OAAS,EAAGD,IAAM,IAAMgsB,EAAkBhsB,IAAK,CACpE,IAAI6pB,EAAQ7pB,GAAK,EAAKoD,UAAUpD,GAAKsU,EAAQ2X,MAG7C,IAAKX,EAASzB,GACZ,MAAM,IAAIzoB,UAAU,6CACVyoB,IAIZkC,EAAelC,EAAO,IAAMkC,EAC5BC,EAAsC,MAAnBnC,EAAK/Y,OAAO,GACjC,CASA,OAASkb,EAAmB,IAAM,KAHlCD,EAAeR,EAAeQ,EAAavf,MAAM,MAClBwf,GAAkB5hB,KAAK,OAEG,GAC3D,EAIAuhB,EAAMO,UAAY,SAASrC,GACzB,IAAIsC,EAAaR,EAAMQ,WAAWtC,GAC9BuC,EAAoC,MAApBvC,EAAK5E,QAAQ,GAYjC,OATA4E,EAAO0B,EAAe1B,EAAKrd,MAAM,MAAO2f,GAAY/hB,KAAK,OAE3C+hB,IACZtC,EAAO,KAELA,GAAQuC,IACVvC,GAAQ,MAGFsC,EAAa,IAAM,IAAMtC,CACnC,EAGA8B,EAAMQ,WAAa,SAAStC,GAC1B,MAA0B,MAAnBA,EAAK/Y,OAAO,EACrB,EAGA6a,EAAMvhB,KAAO,WAEX,IADA,IAAIyf,EAAO,GACF7pB,EAAI,EAAGA,EAAIoD,UAAUnD,OAAQD,IAAK,CACzC,IAAIqsB,EAAUjpB,UAAUpD,GACxB,IAAKsrB,EAASe,GACZ,MAAM,IAAIjrB,UAAU,0CAElBirB,IAIAxC,GAHGA,EAGK,IAAMwC,EAFNA,EAKd,CACA,OAAOV,EAAMO,UAAUrC,EACzB,EAKA8B,EAAMW,SAAW,SAASprB,EAAMqrB,GAI9B,SAAS7d,EAAKhO,GAEZ,IADA,IAAI+a,EAAQ,EACLA,EAAQ/a,EAAIT,QACE,KAAfS,EAAI+a,GADiBA,KAK3B,IADA,IAAI8I,EAAM7jB,EAAIT,OAAS,EAChBskB,GAAO,GACK,KAAb7jB,EAAI6jB,GADOA,KAIjB,OAAI9I,EAAQ8I,EAAY,GACjB7jB,EAAIsR,MAAMyJ,EAAO8I,EAAM,EAChC,CAhBArjB,EAAOyqB,EAAMG,QAAQ5qB,GAAM+jB,OAAO,GAClCsH,EAAKZ,EAAMG,QAAQS,GAAItH,OAAO,GAsB9B,IALA,IAAIuH,EAAY9d,EAAKxN,EAAKsL,MAAM,MAC5BigB,EAAU/d,EAAK6d,EAAG/f,MAAM,MAExBvM,EAASylB,KAAKgH,IAAIF,EAAUvsB,OAAQwsB,EAAQxsB,QAC5C0sB,EAAkB1sB,EACbD,EAAI,EAAGA,EAAIC,EAAQD,IAC1B,GAAIwsB,EAAUxsB,KAAOysB,EAAQzsB,GAAI,CAC/B2sB,EAAkB3sB,EAClB,KACF,CAGF,IAAI4sB,EAAc,GAClB,IAAS5sB,EAAI2sB,EAAiB3sB,EAAIwsB,EAAUvsB,OAAQD,IAClD4sB,EAAY9a,KAAK,MAKnB,OAFA8a,EAAcA,EAAYhpB,OAAO6oB,EAAQza,MAAM2a,KAE5BviB,KAAK,IAC1B,EAGAuhB,EAAMkB,UAAY,SAAShD,GACzB,OAAOA,CACT,EAGA8B,EAAMmB,QAAU,SAASjD,GACvB,IAAIpnB,EAASmpB,EAAe/B,GACxBkD,EAAOtqB,EAAO,GACduqB,EAAMvqB,EAAO,GAEjB,OAAKsqB,GAASC,GAKVA,IAEFA,EAAMA,EAAI/H,OAAO,EAAG+H,EAAI/sB,OAAS,IAG5B8sB,EAAOC,GARL,GASX,EAGArB,EAAM9L,SAAW,SAASgK,EAAMlX,GAC9B,IAAIC,EAAIgZ,EAAe/B,GAAM,GAK7B,OAHIlX,GAAOC,EAAEqS,QAAQ,EAAItS,EAAI1S,UAAY0S,IACvCC,EAAIA,EAAEqS,OAAO,EAAGrS,EAAE3S,OAAS0S,EAAI1S,SAE1B2S,CACT,EAGA+Y,EAAMsB,QAAU,SAASpD,GACvB,OAAO+B,EAAe/B,GAAM,EAC9B,EAGA8B,EAAMlkB,OAAS,SAASylB,GACtB,IAAK7B,EAAK8B,SAASD,GACjB,MAAM,IAAI9rB,UACN,wDAA0D8rB,GAIhE,IAAIH,EAAOG,EAAWH,MAAQ,GAE9B,IAAKzB,EAASyB,GACZ,MAAM,IAAI3rB,UACN,+DACO8rB,EAAWH,MAMxB,OAFUG,EAAWF,IAAME,EAAWF,IAAMrB,EAAMjX,IAAM,KAC7CwY,EAAWE,MAAQ,GAEhC,EAGAzB,EAAMxT,MAAQ,SAASkV,GACrB,IAAK/B,EAAS+B,GACZ,MAAM,IAAIjsB,UACN,uDAAyDisB,GAG/D,IAAIC,EAAW1B,EAAeyB,GAC9B,IAAKC,GAAgC,IAApBA,EAASrtB,OACxB,MAAM,IAAImB,UAAU,iBAAmBisB,EAAa,KAMtD,OAJAC,EAAS,GAAKA,EAAS,IAAM,GAC7BA,EAAS,GAAKA,EAAS,IAAM,GAC7BA,EAAS,GAAKA,EAAS,IAAM,GAEtB,CACLP,KAAMO,EAAS,GACfN,IAAKM,EAAS,GAAKA,EAAS,GAAGtb,MAAM,EAAGsb,EAAS,GAAGrtB,OAAS,GAC7DmtB,KAAME,EAAS,GACf3a,IAAK2a,EAAS,GACdrnB,KAAMqnB,EAAS,GAAGtb,MAAM,EAAGsb,EAAS,GAAGrtB,OAASqtB,EAAS,GAAGrtB,QAEhE,EAGA0rB,EAAMjX,IAAM,IACZiX,EAAM4B,UAAY,IAEhBxI,EAAOC,QAAU2G,IChRf6B,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBrqB,IAAjBsqB,EACH,OAAOA,EAAa3I,QAGrB,IAAID,EAASyI,EAAyBE,GAAY,CACjDtkB,GAAIskB,EACJE,QAAQ,EACR5I,QAAS,CAAC,GAUX,OANA6I,EAAoBH,GAAUzsB,KAAK8jB,EAAOC,QAASD,EAAQA,EAAOC,QAASyI,GAG3E1I,EAAO6I,QAAS,EAGT7I,EAAOC,OACf,CAGAyI,EAAoB3S,EAAI+S,EtD5BpBzuB,EAAW,GACfquB,EAAoBK,EAAI,CAACrrB,EAAQsrB,EAAUje,EAAIke,KAC9C,IAAGD,EAAH,CAMA,IAAIE,EAAeC,IACnB,IAASluB,EAAI,EAAGA,EAAIZ,EAASa,OAAQD,IAAK,CACrC+tB,EAAW3uB,EAASY,GAAG,GACvB8P,EAAK1Q,EAASY,GAAG,GACjBguB,EAAW5uB,EAASY,GAAG,GAE3B,IAJA,IAGImuB,GAAY,EACP7V,EAAI,EAAGA,EAAIyV,EAAS9tB,OAAQqY,MACpB,EAAX0V,GAAsBC,GAAgBD,IAAa1tB,OAAOqV,KAAK8X,EAAoBK,GAAGM,OAAO5tB,GAASitB,EAAoBK,EAAEttB,GAAKutB,EAASzV,MAC9IyV,EAASjV,OAAOR,IAAK,IAErB6V,GAAY,EACTH,EAAWC,IAAcA,EAAeD,IAG7C,GAAGG,EAAW,CACb/uB,EAAS0Z,OAAO9Y,IAAK,GACrB,IAAIqkB,EAAIvU,SACEzM,IAANghB,IAAiB5hB,EAAS4hB,EAC/B,CACD,CACA,OAAO5hB,CArBP,CAJCurB,EAAWA,GAAY,EACvB,IAAI,IAAIhuB,EAAIZ,EAASa,OAAQD,EAAI,GAAKZ,EAASY,EAAI,GAAG,GAAKguB,EAAUhuB,IAAKZ,EAASY,GAAKZ,EAASY,EAAI,GACrGZ,EAASY,GAAK,CAAC+tB,EAAUje,EAAIke,EAuBjB,EuD3BdP,EAAoBrR,EAAK2I,IACxB,IAAIsJ,EAAStJ,GAAUA,EAAOuJ,WAC7B,IAAOvJ,EAAiB,QACxB,IAAM,EAEP,OADA0I,EAAoBc,EAAEF,EAAQ,CAAE9Y,EAAG8Y,IAC5BA,CAAM,ECLdZ,EAAoBc,EAAI,CAACvJ,EAASwJ,KACjC,IAAI,IAAIhuB,KAAOguB,EACXf,EAAoB3E,EAAE0F,EAAYhuB,KAASitB,EAAoB3E,EAAE9D,EAASxkB,IAC5EF,OAAOC,eAAeykB,EAASxkB,EAAK,CAAEL,YAAY,EAAM2E,IAAK0pB,EAAWhuB,IAE1E,ECNDitB,EAAoB7a,EAAI,CAAC,EAGzB6a,EAAoBppB,EAAKoqB,GACjBC,QAAQC,IAAIruB,OAAOqV,KAAK8X,EAAoB7a,GAAGsC,QAAO,CAAC0Z,EAAUpuB,KACvEitB,EAAoB7a,EAAEpS,GAAKiuB,EAASG,GAC7BA,IACL,KCNJnB,EAAoB9b,EAAK8c,GAEZA,EAAU,IAAMA,EAAU,SAAW,CAAC,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,wBAAwBA,GCH9IhB,EAAoB1nB,EAAI,WACvB,GAA0B,iBAAf8oB,WAAyB,OAAOA,WAC3C,IACC,OAAO7sB,MAAQ,IAAIkM,SAAS,cAAb,EAChB,CAAE,MAAO7J,GACR,GAAsB,iBAAXyB,OAAqB,OAAOA,MACxC,CACA,CAPuB,GCAxB2nB,EAAoB3E,EAAI,CAACtpB,EAAK0f,IAAU5e,OAAOV,UAAUmrB,eAAe9pB,KAAKzB,EAAK0f,G3DA9E7f,EAAa,CAAC,EACdC,EAAoB,aAExBmuB,EAAoBqB,EAAI,CAAC7L,EAAKjB,EAAMxhB,EAAKiuB,KACxC,GAAGpvB,EAAW4jB,GAAQ5jB,EAAW4jB,GAAKnR,KAAKkQ,OAA3C,CACA,IAAI+M,EAAQC,EACZ,QAAW3rB,IAAR7C,EAEF,IADA,IAAIyuB,EAAUC,SAASC,qBAAqB,UACpCnvB,EAAI,EAAGA,EAAIivB,EAAQhvB,OAAQD,IAAK,CACvC,IAAIsQ,EAAI2e,EAAQjvB,GAChB,GAAGsQ,EAAE8e,aAAa,QAAUnM,GAAO3S,EAAE8e,aAAa,iBAAmB9vB,EAAoBkB,EAAK,CAAEuuB,EAASze,EAAG,KAAO,CACpH,CAEGye,IACHC,GAAa,GACbD,EAASG,SAASG,cAAc,WAEzBC,QAAU,QACjBP,EAAO9rB,QAAU,IACbwqB,EAAoB8B,IACvBR,EAAOS,aAAa,QAAS/B,EAAoB8B,IAElDR,EAAOS,aAAa,eAAgBlwB,EAAoBkB,GAExDuuB,EAAOnT,IAAMqH,GAEd5jB,EAAW4jB,GAAO,CAACjB,GACnB,IAAIyN,EAAmB,CAAC1W,EAAM2W,KAE7BX,EAAOY,QAAUZ,EAAOa,OAAS,KACjC/rB,aAAaZ,GACb,IAAI4sB,EAAUxwB,EAAW4jB,GAIzB,UAHO5jB,EAAW4jB,GAClB8L,EAAOe,YAAcf,EAAOe,WAAWC,YAAYhB,GACnDc,GAAWA,EAAQvS,SAASxN,GAAQA,EAAG4f,KACpC3W,EAAM,OAAOA,EAAK2W,EAAM,EAExBzsB,EAAUa,WAAW2rB,EAAiB1qB,KAAK,UAAM1B,EAAW,CAAE+C,KAAM,UAAWtG,OAAQivB,IAAW,MACtGA,EAAOY,QAAUF,EAAiB1qB,KAAK,KAAMgqB,EAAOY,SACpDZ,EAAOa,OAASH,EAAiB1qB,KAAK,KAAMgqB,EAAOa,QACnDZ,GAAcE,SAASc,KAAKC,YAAYlB,EApCkB,CAoCX,E4DvChDtB,EAAoBpJ,EAAKW,IACH,oBAAXvlB,QAA0BA,OAAOywB,aAC1C5vB,OAAOC,eAAeykB,EAASvlB,OAAOywB,YAAa,CAAE7tB,MAAO,WAE7D/B,OAAOC,eAAeykB,EAAS,aAAc,CAAE3iB,OAAO,GAAO,ECL9DorB,EAAoB0C,IAAOpL,IAC1BA,EAAOqL,MAAQ,GACVrL,EAAOsL,WAAUtL,EAAOsL,SAAW,IACjCtL,GCHR0I,EAAoBnV,EAAI,WCAxB,IAAIgY,EACA7C,EAAoB1nB,EAAEwqB,gBAAeD,EAAY7C,EAAoB1nB,EAAEyqB,SAAW,IACtF,IAAItB,EAAWzB,EAAoB1nB,EAAEmpB,SACrC,IAAKoB,GAAapB,IACbA,EAASuB,gBACZH,EAAYpB,EAASuB,cAAc7U,MAC/B0U,GAAW,CACf,IAAIrB,EAAUC,EAASC,qBAAqB,UAC5C,GAAGF,EAAQhvB,OAEV,IADA,IAAID,EAAIivB,EAAQhvB,OAAS,EAClBD,GAAK,KAAOswB,IAAc,aAAave,KAAKue,KAAaA,EAAYrB,EAAQjvB,KAAK4b,GAE3F,CAID,IAAK0U,EAAW,MAAM,IAAIvf,MAAM,yDAChCuf,EAAYA,EAAU/f,QAAQ,OAAQ,IAAIA,QAAQ,QAAS,IAAIA,QAAQ,YAAa,KACpFkd,EAAoBtb,EAAIme,YClBxB7C,EAAoBjY,EAAI0Z,SAASwB,SAAWtH,KAAKoH,SAASG,KAK1D,IAAIC,EAAkB,CACrB,KAAM,GAGPnD,EAAoB7a,EAAE0F,EAAI,CAACmW,EAASG,KAElC,IAAIiC,EAAqBpD,EAAoB3E,EAAE8H,EAAiBnC,GAAWmC,EAAgBnC,QAAWprB,EACtG,GAA0B,IAAvBwtB,EAGF,GAAGA,EACFjC,EAAS9c,KAAK+e,EAAmB,QAC3B,CAGL,IAAIC,EAAU,IAAIpC,SAAQ,CAAC5C,EAASiF,IAAYF,EAAqBD,EAAgBnC,GAAW,CAAC3C,EAASiF,KAC1GnC,EAAS9c,KAAK+e,EAAmB,GAAKC,GAGtC,IAAI7N,EAAMwK,EAAoBtb,EAAIsb,EAAoB9b,EAAE8c,GAEpD9jB,EAAQ,IAAIoG,MAgBhB0c,EAAoBqB,EAAE7L,GAfFyM,IACnB,GAAGjC,EAAoB3E,EAAE8H,EAAiBnC,KAEf,KAD1BoC,EAAqBD,EAAgBnC,MACRmC,EAAgBnC,QAAWprB,GACrDwtB,GAAoB,CACtB,IAAIG,EAAYtB,IAAyB,SAAfA,EAAMtpB,KAAkB,UAAYspB,EAAMtpB,MAChE6qB,EAAUvB,GAASA,EAAM5vB,QAAU4vB,EAAM5vB,OAAO8b,IACpDjR,EAAMtB,QAAU,iBAAmBolB,EAAU,cAAgBuC,EAAY,KAAOC,EAAU,IAC1FtmB,EAAM1E,KAAO,iBACb0E,EAAMvE,KAAO4qB,EACbrmB,EAAMiY,QAAUqO,EAChBJ,EAAmB,GAAGlmB,EACvB,CACD,GAEwC,SAAW8jB,EAASA,EAE/D,CACD,EAWFhB,EAAoBK,EAAExV,EAAKmW,GAA0C,IAA7BmC,EAAgBnC,GAGxD,IAAIyC,EAAuB,CAACC,EAA4B3nB,KACvD,IAKIkkB,EAAUe,EALVV,EAAWvkB,EAAK,GAChB4nB,EAAc5nB,EAAK,GACnB6nB,EAAU7nB,EAAK,GAGIxJ,EAAI,EAC3B,GAAG+tB,EAAS1G,MAAMje,GAAgC,IAAxBwnB,EAAgBxnB,KAAa,CACtD,IAAIskB,KAAY0D,EACZ3D,EAAoB3E,EAAEsI,EAAa1D,KACrCD,EAAoB3S,EAAE4S,GAAY0D,EAAY1D,IAGhD,GAAG2D,EAAS,IAAI5uB,EAAS4uB,EAAQ5D,EAClC,CAEA,IADG0D,GAA4BA,EAA2B3nB,GACrDxJ,EAAI+tB,EAAS9tB,OAAQD,IACzByuB,EAAUV,EAAS/tB,GAChBytB,EAAoB3E,EAAE8H,EAAiBnC,IAAYmC,EAAgBnC,IACrEmC,EAAgBnC,GAAS,KAE1BmC,EAAgBnC,GAAW,EAE5B,OAAOhB,EAAoBK,EAAErrB,EAAO,EAGjC6uB,EAAqBlI,KAA4B,sBAAIA,KAA4B,uBAAK,GAC1FkI,EAAmBhU,QAAQ4T,EAAqBnsB,KAAK,KAAM,IAC3DusB,EAAmBxf,KAAOof,EAAqBnsB,KAAK,KAAMusB,EAAmBxf,KAAK/M,KAAKusB,QCvFvF7D,EAAoB8B,QAAKlsB,ECGzB,IAAIkuB,EAAsB9D,EAAoBK,OAAEzqB,EAAW,CAAC,OAAO,IAAOoqB,EAAoB,SAC9F8D,EAAsB9D,EAAoBK,EAAEyD","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/webpack/runtime/load script","webpack:///nextcloud/node_modules/vue-observe-visibility/dist/vue-observe-visibility.esm.js","webpack:///nextcloud/node_modules/vue-material-design-icons/Refresh.vue","webpack:///nextcloud/node_modules/vue-material-design-icons/Refresh.vue?vue&type=script&lang=js","webpack://nextcloud/./node_modules/vue-material-design-icons/Refresh.vue?0940","webpack:///nextcloud/node_modules/vue-material-design-icons/Refresh.vue?vue&type=template&id=7301d745","webpack:///nextcloud/node_modules/vue-material-design-icons/MessageReplyText.vue?vue&type=script&lang=js","webpack:///nextcloud/node_modules/vue-material-design-icons/MessageReplyText.vue","webpack://nextcloud/./node_modules/vue-material-design-icons/MessageReplyText.vue?2121","webpack:///nextcloud/node_modules/vue-material-design-icons/MessageReplyText.vue?vue&type=template&id=5b37a4cf","webpack:///nextcloud/apps/comments/src/components/Moment.vue","webpack:///nextcloud/apps/comments/src/components/Moment.vue?vue&type=script&lang=js","webpack://nextcloud/./apps/comments/src/components/Moment.vue?9b20","webpack://nextcloud/./apps/comments/src/components/Moment.vue?135d","webpack:///nextcloud/apps/comments/src/utils/davUtils.js","webpack:///nextcloud/apps/comments/src/utils/decodeHtmlEntities.js","webpack:///nextcloud/apps/comments/src/services/DavClient.js","webpack:///nextcloud/apps/comments/src/logger.js","webpack:///nextcloud/apps/comments/src/mixins/CommentMixin.js","webpack:///nextcloud/apps/comments/src/services/EditComment.js","webpack:///nextcloud/apps/comments/src/services/DeleteComment.js","webpack:///nextcloud/apps/comments/src/services/NewComment.js","webpack:///nextcloud/apps/comments/src/components/Comment.vue?vue&type=script&lang=js","webpack:///nextcloud/apps/comments/src/components/Comment.vue","webpack://nextcloud/./apps/comments/src/components/Comment.vue?c3f8","webpack://nextcloud/./apps/comments/src/components/Comment.vue?7f26","webpack://nextcloud/./apps/comments/src/components/Comment.vue?d1f7","webpack:///nextcloud/node_modules/webdav/node_modules/minimatch/dist/mjs/brace-expressions.js","webpack:///nextcloud/node_modules/webdav/node_modules/minimatch/dist/mjs/index.js","webpack:///nextcloud/node_modules/webdav/dist/node/tools/headers.js","webpack:///nextcloud/node_modules/webdav/node_modules/minimatch/dist/mjs/escape.js","webpack:///nextcloud/node_modules/webdav/node_modules/minimatch/dist/mjs/unescape.js","webpack:///nextcloud/node_modules/webdav/dist/node/tools/dav.js","webpack:///nextcloud/node_modules/layerr/dist/layerr.js","webpack:///nextcloud/apps/comments/src/services/GetComments.ts","webpack:///nextcloud/node_modules/webdav/dist/node/response.js","webpack:///nextcloud/apps/comments/src/mixins/CommentView.ts","webpack:///nextcloud/apps/comments/src/views/Comments.vue","webpack:///nextcloud/apps/comments/src/views/Comments.vue?vue&type=script&lang=js","webpack:///nextcloud/apps/comments/src/services/ReadComments.ts","webpack:///nextcloud/apps/comments/src/utils/cancelableRequest.js","webpack://nextcloud/./apps/comments/src/views/Comments.vue?ec1a","webpack://nextcloud/./apps/comments/src/views/Comments.vue?f45b","webpack://nextcloud/./apps/comments/src/views/Comments.vue?0e41","webpack:///nextcloud/apps/comments/src/services/CommentsInstance.js","webpack:///nextcloud/apps/comments/src/comments-app.js","webpack:///nextcloud/node_modules/balanced-match/index.js","webpack:///nextcloud/node_modules/brace-expansion/index.js","webpack:///nextcloud/apps/comments/src/components/Comment.vue?vue&type=style&index=0&id=a54c4126&prod&lang=scss&scoped=true","webpack:///nextcloud/apps/comments/src/views/Comments.vue?vue&type=style&index=0&id=b2489a3c&prod&lang=scss&scoped=true","webpack:///nextcloud/node_modules/fast-xml-parser/src/fxp.js","webpack:///nextcloud/node_modules/nested-property/dist/nested-property.js","webpack:///nextcloud/node_modules/path-posix/index.js","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/ensure chunk","webpack:///nextcloud/webpack/runtime/get javascript chunk filename","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/publicPath","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"nextcloud:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","function _typeof(obj) {\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n return arr2;\n }\n}\n\nfunction _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\n\nfunction processOptions(value) {\n var options;\n\n if (typeof value === 'function') {\n // Simple options (callback-only)\n options = {\n callback: value\n };\n } else {\n // Options object\n options = value;\n }\n\n return options;\n}\nfunction throttle(callback, delay) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var timeout;\n var lastState;\n var currentArgs;\n\n var throttled = function throttled(state) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n currentArgs = args;\n if (timeout && state === lastState) return;\n var leading = options.leading;\n\n if (typeof leading === 'function') {\n leading = leading(state, lastState);\n }\n\n if ((!timeout || state !== lastState) && leading) {\n callback.apply(void 0, [state].concat(_toConsumableArray(currentArgs)));\n }\n\n lastState = state;\n clearTimeout(timeout);\n timeout = setTimeout(function () {\n callback.apply(void 0, [state].concat(_toConsumableArray(currentArgs)));\n timeout = 0;\n }, delay);\n };\n\n throttled._clear = function () {\n clearTimeout(timeout);\n timeout = null;\n };\n\n return throttled;\n}\nfunction deepEqual(val1, val2) {\n if (val1 === val2) return true;\n\n if (_typeof(val1) === 'object') {\n for (var key in val1) {\n if (!deepEqual(val1[key], val2[key])) {\n return false;\n }\n }\n\n return true;\n }\n\n return false;\n}\n\nvar VisibilityState =\n/*#__PURE__*/\nfunction () {\n function VisibilityState(el, options, vnode) {\n _classCallCheck(this, VisibilityState);\n\n this.el = el;\n this.observer = null;\n this.frozen = false;\n this.createObserver(options, vnode);\n }\n\n _createClass(VisibilityState, [{\n key: \"createObserver\",\n value: function createObserver(options, vnode) {\n var _this = this;\n\n if (this.observer) {\n this.destroyObserver();\n }\n\n if (this.frozen) return;\n this.options = processOptions(options);\n\n this.callback = function (result, entry) {\n _this.options.callback(result, entry);\n\n if (result && _this.options.once) {\n _this.frozen = true;\n\n _this.destroyObserver();\n }\n }; // Throttle\n\n\n if (this.callback && this.options.throttle) {\n var _ref = this.options.throttleOptions || {},\n _leading = _ref.leading;\n\n this.callback = throttle(this.callback, this.options.throttle, {\n leading: function leading(state) {\n return _leading === 'both' || _leading === 'visible' && state || _leading === 'hidden' && !state;\n }\n });\n }\n\n this.oldResult = undefined;\n this.observer = new IntersectionObserver(function (entries) {\n var entry = entries[0];\n\n if (entries.length > 1) {\n var intersectingEntry = entries.find(function (e) {\n return e.isIntersecting;\n });\n\n if (intersectingEntry) {\n entry = intersectingEntry;\n }\n }\n\n if (_this.callback) {\n // Use isIntersecting if possible because browsers can report isIntersecting as true, but intersectionRatio as 0, when something very slowly enters the viewport.\n var result = entry.isIntersecting && entry.intersectionRatio >= _this.threshold;\n if (result === _this.oldResult) return;\n _this.oldResult = result;\n\n _this.callback(result, entry);\n }\n }, this.options.intersection); // Wait for the element to be in document\n\n vnode.context.$nextTick(function () {\n if (_this.observer) {\n _this.observer.observe(_this.el);\n }\n });\n }\n }, {\n key: \"destroyObserver\",\n value: function destroyObserver() {\n if (this.observer) {\n this.observer.disconnect();\n this.observer = null;\n } // Cancel throttled call\n\n\n if (this.callback && this.callback._clear) {\n this.callback._clear();\n\n this.callback = null;\n }\n }\n }, {\n key: \"threshold\",\n get: function get() {\n return this.options.intersection && typeof this.options.intersection.threshold === 'number' ? this.options.intersection.threshold : 0;\n }\n }]);\n\n return VisibilityState;\n}();\n\nfunction bind(el, _ref2, vnode) {\n var value = _ref2.value;\n if (!value) return;\n\n if (typeof IntersectionObserver === 'undefined') {\n console.warn('[vue-observe-visibility] IntersectionObserver API is not available in your browser. Please install this polyfill: https://github.com/w3c/IntersectionObserver/tree/master/polyfill');\n } else {\n var state = new VisibilityState(el, value, vnode);\n el._vue_visibilityState = state;\n }\n}\n\nfunction update(el, _ref3, vnode) {\n var value = _ref3.value,\n oldValue = _ref3.oldValue;\n if (deepEqual(value, oldValue)) return;\n var state = el._vue_visibilityState;\n\n if (!value) {\n unbind(el);\n return;\n }\n\n if (state) {\n state.createObserver(value, vnode);\n } else {\n bind(el, {\n value: value\n }, vnode);\n }\n}\n\nfunction unbind(el) {\n var state = el._vue_visibilityState;\n\n if (state) {\n state.destroyObserver();\n delete el._vue_visibilityState;\n }\n}\n\nvar ObserveVisibility = {\n bind: bind,\n update: update,\n unbind: unbind\n};\n\nfunction install(Vue) {\n Vue.directive('observe-visibility', ObserveVisibility);\n /* -- Add more components here -- */\n}\n/* -- Plugin definition & Auto-install -- */\n\n/* You shouldn't have to modify the code below */\n// Plugin\n\nvar plugin = {\n // eslint-disable-next-line no-undef\n version: \"1.0.0\",\n install: install\n};\n\nvar GlobalVue = null;\n\nif (typeof window !== 'undefined') {\n GlobalVue = window.Vue;\n} else if (typeof global !== 'undefined') {\n GlobalVue = global.Vue;\n}\n\nif (GlobalVue) {\n GlobalVue.use(plugin);\n}\n\nexport default plugin;\nexport { ObserveVisibility, install };\n","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : true\"\n :aria-label=\"title\"\n class=\"material-design-icon refresh-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M17.65,6.35C16.2,4.9 14.21,4 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20C15.73,20 18.84,17.45 19.73,14H17.65C16.83,16.33 14.61,18 12,18A6,6 0 0,1 6,12A6,6 0 0,1 12,6C13.66,6 15.14,6.69 16.22,7.78L13,11H20V4L17.65,6.35Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"RefreshIcon\",\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}\n</script>","import mod from \"-!../vue-loader/lib/index.js??vue-loader-options!./Refresh.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../vue-loader/lib/index.js??vue-loader-options!./Refresh.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Refresh.vue?vue&type=template&id=7301d745\"\nimport script from \"./Refresh.vue?vue&type=script&lang=js\"\nexport * from \"./Refresh.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('span',_vm._b({staticClass:\"material-design-icon refresh-icon\",attrs:{\"aria-hidden\":_vm.title ? null : true,\"aria-label\":_vm.title,\"role\":\"img\"},on:{\"click\":function($event){return _vm.$emit('click', $event)}}},'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\":\"M17.65,6.35C16.2,4.9 14.21,4 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20C15.73,20 18.84,17.45 19.73,14H17.65C16.83,16.33 14.61,18 12,18A6,6 0 0,1 6,12A6,6 0 0,1 12,6C13.66,6 15.14,6.69 16.22,7.78L13,11H20V4L17.65,6.35Z\"}},[(_vm.title)?_c('title',[_vm._v(_vm._s(_vm.title))]):_vm._e()])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../vue-loader/lib/index.js??vue-loader-options!./MessageReplyText.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../vue-loader/lib/index.js??vue-loader-options!./MessageReplyText.vue?vue&type=script&lang=js\"","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : true\"\n :aria-label=\"title\"\n class=\"material-design-icon message-reply-text-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M18,8H6V6H18V8M18,11H6V9H18V11M18,14H6V12H18V14M22,4A2,2 0 0,0 20,2H4A2,2 0 0,0 2,4V16A2,2 0 0,0 4,18H18L22,22V4Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"MessageReplyTextIcon\",\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}\n</script>","import { render, staticRenderFns } from \"./MessageReplyText.vue?vue&type=template&id=5b37a4cf\"\nimport script from \"./MessageReplyText.vue?vue&type=script&lang=js\"\nexport * from \"./MessageReplyText.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('span',_vm._b({staticClass:\"material-design-icon message-reply-text-icon\",attrs:{\"aria-hidden\":_vm.title ? null : true,\"aria-label\":_vm.title,\"role\":\"img\"},on:{\"click\":function($event){return _vm.$emit('click', $event)}}},'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\":\"M18,8H6V6H18V8M18,11H6V9H18V11M18,14H6V12H18V14M22,4A2,2 0 0,0 20,2H4A2,2 0 0,0 2,4V16A2,2 0 0,0 4,18H18L22,22V4Z\"}},[(_vm.title)?_c('title',[_vm._v(_vm._s(_vm.title))]):_vm._e()])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!-- TODO: Move to vue components -->\n\n<template>\n\t<span class=\"live-relative-timestamp\" :data-timestamp=\"timestamp * 1000\" :title=\"title\">{{ formatted }}</span>\n</template>\n\n<script>\nimport moment from '@nextcloud/moment'\n\nexport default {\n\tname: 'Moment',\n\tprops: {\n\t\ttimestamp: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\t\tformat: {\n\t\t\ttype: String,\n\t\t\tdefault: 'LLL',\n\t\t},\n\t},\n\tcomputed: {\n\t\ttitle() {\n\t\t\treturn moment.unix(this.timestamp).format(this.format)\n\t\t},\n\t\tformatted() {\n\t\t\treturn moment.unix(this.timestamp).fromNow()\n\t\t},\n\t},\n}\n</script>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Moment.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Moment.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Moment.vue?vue&type=template&id=57999be6\"\nimport script from \"./Moment.vue?vue&type=script&lang=js\"\nexport * from \"./Moment.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('span',{staticClass:\"live-relative-timestamp\",attrs:{\"data-timestamp\":_vm.timestamp * 1000,\"title\":_vm.title}},[_vm._v(_vm._s(_vm.formatted))])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { generateRemoteUrl } from '@nextcloud/router'\n\nconst getRootPath = function() {\n\treturn generateRemoteUrl('dav/comments')\n}\n\nexport { getRootPath }\n","/**\n * @copyright Copyright (c) 2021 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/**\n * @param {any} value -\n * @param {any} passes -\n */\nexport function decodeHtmlEntities(value, passes = 1) {\n\tconst parser = new DOMParser()\n\tlet decoded = value\n\tfor (let i = 0; i < passes; i++) {\n\t\tdecoded = parser.parseFromString(decoded, 'text/html').documentElement.textContent\n\t}\n\treturn decoded\n}\n","/**\n * @copyright Copyright (c) 2021 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { createClient } from 'webdav'\nimport { getRootPath } from '../utils/davUtils.js'\nimport { getRequestToken, onRequestTokenUpdate } from '@nextcloud/auth'\n\n// init webdav client\nconst client = createClient(getRootPath())\n\n// set CSRF token header\nconst setHeaders = (token) => {\n client.setHeaders({\n // Add this so the server knows it is an request from the browser\n 'X-Requested-With': 'XMLHttpRequest',\n // Inject user auth\n requesttoken: token ?? '',\n })\n}\n\n// refresh headers when request token changes\nonRequestTokenUpdate(setHeaders)\nsetHeaders(getRequestToken())\n\nexport default client\n","/**\n * @copyright Copyright (c) 2023 Lucas Azevedo <lhs_azevedo@hotmail.com>\n *\n * @author Lucas Azevedo <lhs_azevedo@hotmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { getLoggerBuilder } from '@nextcloud/logger'\n\nexport default getLoggerBuilder()\n\t.setApp('comments')\n\t.detectUser()\n\t.build()\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { showError, showUndo, TOAST_UNDO_TIMEOUT } from '@nextcloud/dialogs'\nimport NewComment from '../services/NewComment.js'\nimport DeleteComment from '../services/DeleteComment.js'\nimport EditComment from '../services/EditComment.js'\nimport logger from '../logger.js'\n\nexport default {\n\tprops: {\n\t\tid: {\n\t\t\ttype: Number,\n\t\t\tdefault: null,\n\t\t},\n\t\tmessage: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\tresourceId: {\n\t\t\ttype: [String, Number],\n\t\t\trequired: true,\n\t\t},\n\t\tresourceType: {\n\t\t\ttype: String,\n\t\t\tdefault: 'files',\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tdeleted: false,\n\t\t\tediting: false,\n\t\t\tloading: false,\n\t\t}\n\t},\n\n\tmethods: {\n\t\t// EDITION\n\t\tonEdit() {\n\t\t\tthis.editing = true\n\t\t},\n\t\tonEditCancel() {\n\t\t\tthis.editing = false\n\t\t\t// Restore original value\n\t\t\tthis.updateLocalMessage(this.message)\n\t\t},\n\t\tasync onEditComment(message) {\n\t\t\tthis.loading = true\n\t\t\ttry {\n\t\t\t\tawait EditComment(this.resourceType, this.resourceId, this.id, message)\n\t\t\t\tlogger.debug('Comment edited', { resourceType: this.resourceType, resourceId: this.resourceId, id: this.id, message })\n\t\t\t\tthis.$emit('update:message', message)\n\t\t\t\tthis.editing = false\n\t\t\t} catch (error) {\n\t\t\t\tshowError(t('comments', 'An error occurred while trying to edit the comment'))\n\t\t\t\tconsole.error(error)\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\n\t\t// DELETION\n\t\tonDeleteWithUndo() {\n\t\t\tthis.deleted = true\n\t\t\tconst timeOutDelete = setTimeout(this.onDelete, TOAST_UNDO_TIMEOUT)\n\t\t\tshowUndo(t('comments', 'Comment deleted'), () => {\n\t\t\t\tclearTimeout(timeOutDelete)\n\t\t\t\tthis.deleted = false\n\t\t\t})\n\t\t},\n\t\tasync onDelete() {\n\t\t\ttry {\n\t\t\t\tawait DeleteComment(this.resourceType, this.resourceId, this.id)\n\t\t\t\tlogger.debug('Comment deleted', { resourceType: this.resourceType, resourceId: this.resourceId, id: this.id })\n\t\t\t\tthis.$emit('delete', this.id)\n\t\t\t} catch (error) {\n\t\t\t\tshowError(t('comments', 'An error occurred while trying to delete the comment'))\n\t\t\t\tconsole.error(error)\n\t\t\t\tthis.deleted = false\n\t\t\t}\n\t\t},\n\n\t\t// CREATION\n\t\tasync onNewComment(message) {\n\t\t\tthis.loading = true\n\t\t\ttry {\n\t\t\t\tconst newComment = await NewComment(this.resourceType, this.resourceId, message)\n\t\t\t\tlogger.debug('New comment posted', { resourceType: this.resourceType, resourceId: this.resourceId, newComment })\n\t\t\t\tthis.$emit('new', newComment)\n\n\t\t\t\t// Clear old content\n\t\t\t\tthis.$emit('update:message', '')\n\t\t\t\tthis.localMessage = ''\n\t\t\t} catch (error) {\n\t\t\t\tshowError(t('comments', 'An error occurred while trying to create the comment'))\n\t\t\t\tconsole.error(error)\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\t},\n}\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport client from './DavClient.js'\n\n/**\n * Edit an existing comment\n *\n * @param {string} resourceType the resource type\n * @param {number} resourceId the resource ID\n * @param {number} commentId the comment iD\n * @param {string} message the message content\n */\nexport default async function(resourceType, resourceId, commentId, message) {\n\tconst commentPath = ['', resourceType, resourceId, commentId].join('/')\n\n\treturn await client.customRequest(commentPath, Object.assign({\n\t\tmethod: 'PROPPATCH',\n\t\tdata: `<?xml version=\"1.0\"?>\n\t\t\t<d:propertyupdate\n\t\t\t\txmlns:d=\"DAV:\"\n\t\t\t\txmlns:oc=\"http://owncloud.org/ns\">\n\t\t\t<d:set>\n\t\t\t\t<d:prop>\n\t\t\t\t\t<oc:message>${message}</oc:message>\n\t\t\t\t</d:prop>\n\t\t\t</d:set>\n\t\t\t</d:propertyupdate>`,\n\t}))\n}\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport client from './DavClient.js'\n\n/**\n * Delete a comment\n *\n * @param {string} resourceType the resource type\n * @param {number} resourceId the resource ID\n * @param {number} commentId the comment iD\n */\nexport default async function(resourceType, resourceId, commentId) {\n\tconst commentPath = ['', resourceType, resourceId, commentId].join('/')\n\n\t// Fetch newly created comment data\n\tawait client.deleteFile(commentPath)\n}\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { getRootPath } from '../utils/davUtils.js'\nimport { decodeHtmlEntities } from '../utils/decodeHtmlEntities.js'\nimport axios from '@nextcloud/axios'\nimport client from './DavClient.js'\n\n/**\n * Retrieve the comments list\n *\n * @param {string} resourceType the resource type\n * @param {number} resourceId the resource ID\n * @param {string} message the message\n * @return {object} the new comment\n */\nexport default async function(resourceType, resourceId, message) {\n\tconst resourcePath = ['', resourceType, resourceId].join('/')\n\n\tconst response = await axios.post(getRootPath() + resourcePath, {\n\t\tactorDisplayName: getCurrentUser().displayName,\n\t\tactorId: getCurrentUser().uid,\n\t\tactorType: 'users',\n\t\tcreationDateTime: (new Date()).toUTCString(),\n\t\tmessage,\n\t\tobjectType: resourceType,\n\t\tverb: 'comment',\n\t})\n\n\t// Retrieve comment id from resource location\n\tconst commentId = parseInt(response.headers['content-location'].split('/').pop())\n\tconst commentPath = resourcePath + '/' + commentId\n\n\t// Fetch newly created comment data\n\tconst comment = await client.stat(commentPath, {\n\t\tdetails: true,\n\t})\n\n\tconst props = comment.data.props\n\t// Decode twice to handle potentially double-encoded entities\n\t// FIXME Remove this once https://github.com/nextcloud/server/issues/29306\n\t// is resolved\n\tprops.actorDisplayName = decodeHtmlEntities(props.actorDisplayName, 2)\n\tprops.message = decodeHtmlEntities(props.message, 2)\n\n\treturn comment.data\n}\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comment.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comment.vue?vue&type=script&lang=js\"","<!--\n - @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n<template>\n\t<component :is=\"tag\"\n\t\tv-show=\"!deleted\"\n\t\t:class=\"{'comment--loading': loading}\"\n\t\tclass=\"comment\">\n\t\t<!-- Comment header toolbar -->\n\t\t<div class=\"comment__side\">\n\t\t\t<!-- Author -->\n\t\t\t<NcAvatar class=\"comment__avatar\"\n\t\t\t\t:display-name=\"actorDisplayName\"\n\t\t\t\t:user=\"actorId\"\n\t\t\t\t:size=\"32\" />\n\t\t</div>\n\t\t<div class=\"comment__body\">\n\t\t\t<div class=\"comment__header\">\n\t\t\t\t<span class=\"comment__author\">{{ actorDisplayName }}</span>\n\n\t\t\t\t<!-- Comment actions,\n\t\t\t\t\tshow if we have a message id and current user is author -->\n\t\t\t\t<NcActions v-if=\"isOwnComment && id && !loading\" class=\"comment__actions\">\n\t\t\t\t\t<template v-if=\"!editing\">\n\t\t\t\t\t\t<NcActionButton close-after-click\n\t\t\t\t\t\t\t@click=\"onEdit\">\n\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t<IconEdit :size=\"20\" />\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t{{ t('comments', 'Edit comment') }}\n\t\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t\t<NcActionSeparator />\n\t\t\t\t\t\t<NcActionButton close-after-click\n\t\t\t\t\t\t\t@click=\"onDeleteWithUndo\">\n\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t<IconDelete :size=\"20\" />\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t{{ t('comments', 'Delete comment') }}\n\t\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t</template>\n\n\t\t\t\t\t<NcActionButton v-else @click=\"onEditCancel\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<IconClose :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t{{ t('comments', 'Cancel edit') }}\n\t\t\t\t\t</NcActionButton>\n\t\t\t\t</NcActions>\n\n\t\t\t\t<!-- Show loading if we're editing or deleting, not on new ones -->\n\t\t\t\t<div v-if=\"id && loading\" class=\"comment_loading icon-loading-small\" />\n\n\t\t\t\t<!-- Relative time to the comment creation -->\n\t\t\t\t<Moment v-else-if=\"creationDateTime\" class=\"comment__timestamp\" :timestamp=\"timestamp\" />\n\t\t\t</div>\n\n\t\t\t<!-- Message editor -->\n\t\t\t<form v-if=\"editor || editing\" class=\"comment__editor\" @submit.prevent>\n\t\t\t\t<div class=\"comment__editor-group\">\n\t\t\t\t\t<NcRichContenteditable ref=\"editor\"\n\t\t\t\t\t\t:auto-complete=\"autoComplete\"\n\t\t\t\t\t\t:contenteditable=\"!loading\"\n\t\t\t\t\t\t:label=\"editor ? t('comments', 'New comment') : t('comments', 'Edit comment')\"\n\t\t\t\t\t\t:placeholder=\"t('comments', 'Write a comment …')\"\n\t\t\t\t\t\t:value=\"localMessage\"\n\t\t\t\t\t\t:user-data=\"userData\"\n\t\t\t\t\t\taria-describedby=\"tab-comments__editor-description\"\n\t\t\t\t\t\t@update:value=\"updateLocalMessage\"\n\t\t\t\t\t\t@submit=\"onSubmit\" />\n\t\t\t\t\t<div class=\"comment__submit\">\n\t\t\t\t\t\t<NcButton type=\"tertiary-no-background\"\n\t\t\t\t\t\t\tnative-type=\"submit\"\n\t\t\t\t\t\t\t:aria-label=\"t('comments', 'Post comment')\"\n\t\t\t\t\t\t\t:disabled=\"isEmptyMessage\"\n\t\t\t\t\t\t\t@click=\"onSubmit\">\n\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t<NcLoadingIcon v-if=\"loading\" />\n\t\t\t\t\t\t\t\t<IconArrowRight v-else :size=\"20\" />\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t</NcButton>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div id=\"tab-comments__editor-description\" class=\"comment__editor-description\">\n\t\t\t\t\t{{ t('comments', '@ for mentions, : for emoji, / for smart picker') }}\n\t\t\t\t</div>\n\t\t\t</form>\n\n\t\t\t<!-- Message content -->\n\t\t\t<!-- The html is escaped and sanitized before rendering -->\n\t\t\t<!-- eslint-disable vue/no-v-html-->\n\t\t\t<div v-else\n\t\t\t\t:class=\"{'comment__message--expanded': expanded}\"\n\t\t\t\tclass=\"comment__message\"\n\t\t\t\t@click=\"onExpand\"\n\t\t\t\tv-html=\"renderedContent\" />\n\t\t\t<!-- eslint-enable vue/no-v-html-->\n\t\t</div>\n\t</component>\n</template>\n\n<script>\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { translate as t } from '@nextcloud/l10n'\nimport moment from '@nextcloud/moment'\n\nimport NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton.js'\nimport NcActions from '@nextcloud/vue/dist/Components/NcActions.js'\nimport NcActionSeparator from '@nextcloud/vue/dist/Components/NcActionSeparator.js'\nimport NcAvatar from '@nextcloud/vue/dist/Components/NcAvatar.js'\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\nimport RichEditorMixin from '@nextcloud/vue/dist/Mixins/richEditor.js'\n\nimport IconArrowRight from 'vue-material-design-icons/ArrowRight.vue'\nimport IconClose from 'vue-material-design-icons/Close.vue'\nimport IconDelete from 'vue-material-design-icons/Delete.vue'\nimport IconEdit from 'vue-material-design-icons/Pencil.vue'\n\nimport Moment from './Moment.vue'\nimport CommentMixin from '../mixins/CommentMixin.js'\n\n// Dynamic loading\nconst NcRichContenteditable = () => import('@nextcloud/vue/dist/Components/NcRichContenteditable.js')\n\nexport default {\n\tname: 'Comment',\n\n\tcomponents: {\n\t\tIconArrowRight,\n\t\tIconClose,\n\t\tIconDelete,\n\t\tIconEdit,\n\t\tMoment,\n\t\tNcActionButton,\n\t\tNcActions,\n\t\tNcActionSeparator,\n\t\tNcAvatar,\n\t\tNcButton,\n\t\tNcRichContenteditable,\n\t},\n\tmixins: [RichEditorMixin, CommentMixin],\n\n\tinheritAttrs: false,\n\n\tprops: {\n\t\tactorDisplayName: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tactorId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tcreationDateTime: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Force the editor display\n\t\t */\n\t\teditor: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Provide the autocompletion data\n\t\t */\n\t\tautoComplete: {\n\t\t\ttype: Function,\n\t\t\trequired: true,\n\t\t},\n\n\t\ttag: {\n\t\t\ttype: String,\n\t\t\tdefault: 'div',\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\texpanded: false,\n\t\t\t// Only change data locally and update the original\n\t\t\t// parent data when the request is sent and resolved\n\t\t\tlocalMessage: '',\n\t\t\tsubmitted: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\n\t\t/**\n\t\t * Is the current user the author of this comment\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisOwnComment() {\n\t\t\treturn getCurrentUser().uid === this.actorId\n\t\t},\n\n\t\t/**\n\t\t * Rendered content as html string\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\trenderedContent() {\n\t\t\tif (this.isEmptyMessage) {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\treturn this.renderContent(this.localMessage)\n\t\t},\n\n\t\tisEmptyMessage() {\n\t\t\treturn !this.localMessage || this.localMessage.trim() === ''\n\t\t},\n\n\t\ttimestamp() {\n\t\t\t// seconds, not milliseconds\n\t\t\treturn parseInt(moment(this.creationDateTime).format('x'), 10) / 1000\n\t\t},\n\t},\n\n\twatch: {\n\t\t// If the data change, update the local value\n\t\tmessage(message) {\n\t\t\tthis.updateLocalMessage(message)\n\t\t},\n\t},\n\n\tbeforeMount() {\n\t\t// Init localMessage\n\t\tthis.updateLocalMessage(this.message)\n\t},\n\n\tmethods: {\n\t\tt,\n\n\t\t/**\n\t\t * Update local Message on outer change\n\t\t *\n\t\t * @param {string} message the message to set\n\t\t */\n\t\tupdateLocalMessage(message) {\n\t\t\tthis.localMessage = message.toString()\n\t\t\tthis.submitted = false\n\t\t},\n\n\t\t/**\n\t\t * Dispatch message between edit and create\n\t\t */\n\t\tonSubmit() {\n\t\t\t// Do not submit if message is empty\n\t\t\tif (this.localMessage.trim() === '') {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (this.editor) {\n\t\t\t\tthis.onNewComment(this.localMessage.trim())\n\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t// Focus the editor again\n\t\t\t\t\tthis.$refs.editor.$el.focus()\n\t\t\t\t})\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.onEditComment(this.localMessage.trim())\n\t\t},\n\n\t\tonExpand() {\n\t\t\tthis.expanded = true\n\t\t},\n\t},\n\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@use \"sass:math\";\n\n$comment-padding: 10px;\n\n.comment {\n\tdisplay: flex;\n\tgap: 8px;\n\tpadding: 5px $comment-padding;\n\n\t&__side {\n\t\tdisplay: flex;\n\t\talign-items: flex-start;\n\t\tpadding-top: 6px;\n\t}\n\n\t&__body {\n\t\tdisplay: flex;\n\t\tflex-grow: 1;\n\t\tflex-direction: column;\n\t}\n\n\t&__header {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tmin-height: 44px;\n\t}\n\n\t&__actions {\n\t\tmargin-left: $comment-padding !important;\n\t}\n\n\t&__author {\n\t\toverflow: hidden;\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n\n\t&_loading,\n\t&__timestamp {\n\t\tmargin-left: auto;\n\t\ttext-align: right;\n\t\twhite-space: nowrap;\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n\n\t&__editor-group {\n\t\tposition: relative;\n\t}\n\n\t&__editor-description {\n\t\tcolor: var(--color-text-maxcontrast);\n\t\tpadding-block: var(--default-grid-baseline);\n\t}\n\n\t&__submit {\n\t\tposition: absolute !important;\n\t\tbottom: 0;\n\t\tright: 0;\n\t}\n\n\t&__message {\n\t\twhite-space: pre-wrap;\n\t\tword-break: break-word;\n\t\tmax-height: 70px;\n\t\toverflow: hidden;\n\t\tmargin-top: -6px;\n\t\t&--expanded {\n\t\t\tmax-height: none;\n\t\t\toverflow: visible;\n\t\t}\n\t}\n}\n\n.rich-contenteditable__input {\n\tmin-height: 44px;\n\tmargin: 0;\n\tpadding: $comment-padding;\n}\n\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comment.vue?vue&type=style&index=0&id=a54c4126&prod&lang=scss&scoped=true\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comment.vue?vue&type=style&index=0&id=a54c4126&prod&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Comment.vue?vue&type=template&id=a54c4126&scoped=true\"\nimport script from \"./Comment.vue?vue&type=script&lang=js\"\nexport * from \"./Comment.vue?vue&type=script&lang=js\"\nimport style0 from \"./Comment.vue?vue&type=style&index=0&id=a54c4126&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"a54c4126\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c(_vm.tag,{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.deleted),expression:\"!deleted\"}],tag:\"component\",staticClass:\"comment\",class:{'comment--loading': _vm.loading}},[_c('div',{staticClass:\"comment__side\"},[_c('NcAvatar',{staticClass:\"comment__avatar\",attrs:{\"display-name\":_vm.actorDisplayName,\"user\":_vm.actorId,\"size\":32}})],1),_vm._v(\" \"),_c('div',{staticClass:\"comment__body\"},[_c('div',{staticClass:\"comment__header\"},[_c('span',{staticClass:\"comment__author\"},[_vm._v(_vm._s(_vm.actorDisplayName))]),_vm._v(\" \"),(_vm.isOwnComment && _vm.id && !_vm.loading)?_c('NcActions',{staticClass:\"comment__actions\"},[(!_vm.editing)?[_c('NcActionButton',{attrs:{\"close-after-click\":\"\"},on:{\"click\":_vm.onEdit},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('IconEdit',{attrs:{\"size\":20}})]},proxy:true}],null,false,649782975)},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('comments', 'Edit comment'))+\"\\n\\t\\t\\t\\t\\t\")]),_vm._v(\" \"),_c('NcActionSeparator'),_vm._v(\" \"),_c('NcActionButton',{attrs:{\"close-after-click\":\"\"},on:{\"click\":_vm.onDeleteWithUndo},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('IconDelete',{attrs:{\"size\":20}})]},proxy:true}],null,false,881161434)},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('comments', 'Delete comment'))+\"\\n\\t\\t\\t\\t\\t\")])]:_c('NcActionButton',{on:{\"click\":_vm.onEditCancel},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('IconClose',{attrs:{\"size\":20}})]},proxy:true}],null,false,2888946197)},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('comments', 'Cancel edit'))+\"\\n\\t\\t\\t\\t\")])],2):_vm._e(),_vm._v(\" \"),(_vm.id && _vm.loading)?_c('div',{staticClass:\"comment_loading icon-loading-small\"}):(_vm.creationDateTime)?_c('Moment',{staticClass:\"comment__timestamp\",attrs:{\"timestamp\":_vm.timestamp}}):_vm._e()],1),_vm._v(\" \"),(_vm.editor || _vm.editing)?_c('form',{staticClass:\"comment__editor\",on:{\"submit\":function($event){$event.preventDefault();}}},[_c('div',{staticClass:\"comment__editor-group\"},[_c('NcRichContenteditable',{ref:\"editor\",attrs:{\"auto-complete\":_vm.autoComplete,\"contenteditable\":!_vm.loading,\"label\":_vm.editor ? _vm.t('comments', 'New comment') : _vm.t('comments', 'Edit comment'),\"placeholder\":_vm.t('comments', 'Write a comment …'),\"value\":_vm.localMessage,\"user-data\":_vm.userData,\"aria-describedby\":\"tab-comments__editor-description\"},on:{\"update:value\":_vm.updateLocalMessage,\"submit\":_vm.onSubmit}}),_vm._v(\" \"),_c('div',{staticClass:\"comment__submit\"},[_c('NcButton',{attrs:{\"type\":\"tertiary-no-background\",\"native-type\":\"submit\",\"aria-label\":_vm.t('comments', 'Post comment'),\"disabled\":_vm.isEmptyMessage},on:{\"click\":_vm.onSubmit},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [(_vm.loading)?_c('NcLoadingIcon'):_c('IconArrowRight',{attrs:{\"size\":20}})]},proxy:true}],null,false,758946661)})],1)],1),_vm._v(\" \"),_c('div',{staticClass:\"comment__editor-description\",attrs:{\"id\":\"tab-comments__editor-description\"}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('comments', '@ for mentions, : for emoji, / for smart picker'))+\"\\n\\t\\t\\t\")])]):_c('div',{staticClass:\"comment__message\",class:{'comment__message--expanded': _vm.expanded},domProps:{\"innerHTML\":_vm._s(_vm.renderedContent)},on:{\"click\":_vm.onExpand}})])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","// translate the various posix character classes into unicode properties\n// this works across all unicode locales\n// { <posix class>: [<translation>, /u flag required, negated]\nconst posixClasses = {\n '[:alnum:]': ['\\\\p{L}\\\\p{Nl}\\\\p{Nd}', true],\n '[:alpha:]': ['\\\\p{L}\\\\p{Nl}', true],\n '[:ascii:]': ['\\\\x' + '00-\\\\x' + '7f', false],\n '[:blank:]': ['\\\\p{Zs}\\\\t', true],\n '[:cntrl:]': ['\\\\p{Cc}', true],\n '[:digit:]': ['\\\\p{Nd}', true],\n '[:graph:]': ['\\\\p{Z}\\\\p{C}', true, true],\n '[:lower:]': ['\\\\p{Ll}', true],\n '[:print:]': ['\\\\p{C}', true],\n '[:punct:]': ['\\\\p{P}', true],\n '[:space:]': ['\\\\p{Z}\\\\t\\\\r\\\\n\\\\v\\\\f', true],\n '[:upper:]': ['\\\\p{Lu}', true],\n '[:word:]': ['\\\\p{L}\\\\p{Nl}\\\\p{Nd}\\\\p{Pc}', true],\n '[:xdigit:]': ['A-Fa-f0-9', false],\n};\n// only need to escape a few things inside of brace expressions\n// escapes: [ \\ ] -\nconst braceEscape = (s) => s.replace(/[[\\]\\\\-]/g, '\\\\$&');\n// escape all regexp magic characters\nconst regexpEscape = (s) => s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n// everything has already been escaped, we just have to join\nconst rangesToString = (ranges) => ranges.join('');\n// takes a glob string at a posix brace expression, and returns\n// an equivalent regular expression source, and boolean indicating\n// whether the /u flag needs to be applied, and the number of chars\n// consumed to parse the character class.\n// This also removes out of order ranges, and returns ($.) if the\n// entire class just no good.\nexport const parseClass = (glob, position) => {\n const pos = position;\n /* c8 ignore start */\n if (glob.charAt(pos) !== '[') {\n throw new Error('not in a brace expression');\n }\n /* c8 ignore stop */\n const ranges = [];\n const negs = [];\n let i = pos + 1;\n let sawStart = false;\n let uflag = false;\n let escaping = false;\n let negate = false;\n let endPos = pos;\n let rangeStart = '';\n WHILE: while (i < glob.length) {\n const c = glob.charAt(i);\n if ((c === '!' || c === '^') && i === pos + 1) {\n negate = true;\n i++;\n continue;\n }\n if (c === ']' && sawStart && !escaping) {\n endPos = i + 1;\n break;\n }\n sawStart = true;\n if (c === '\\\\') {\n if (!escaping) {\n escaping = true;\n i++;\n continue;\n }\n // escaped \\ char, fall through and treat like normal char\n }\n if (c === '[' && !escaping) {\n // either a posix class, a collation equivalent, or just a [\n for (const [cls, [unip, u, neg]] of Object.entries(posixClasses)) {\n if (glob.startsWith(cls, i)) {\n // invalid, [a-[] is fine, but not [a-[:alpha]]\n if (rangeStart) {\n return ['$.', false, glob.length - pos, true];\n }\n i += cls.length;\n if (neg)\n negs.push(unip);\n else\n ranges.push(unip);\n uflag = uflag || u;\n continue WHILE;\n }\n }\n }\n // now it's just a normal character, effectively\n escaping = false;\n if (rangeStart) {\n // throw this range away if it's not valid, but others\n // can still match.\n if (c > rangeStart) {\n ranges.push(braceEscape(rangeStart) + '-' + braceEscape(c));\n }\n else if (c === rangeStart) {\n ranges.push(braceEscape(c));\n }\n rangeStart = '';\n i++;\n continue;\n }\n // now might be the start of a range.\n // can be either c-d or c-] or c<more...>] or c] at this point\n if (glob.startsWith('-]', i + 1)) {\n ranges.push(braceEscape(c + '-'));\n i += 2;\n continue;\n }\n if (glob.startsWith('-', i + 1)) {\n rangeStart = c;\n i += 2;\n continue;\n }\n // not the start of a range, just a single character\n ranges.push(braceEscape(c));\n i++;\n }\n if (endPos < i) {\n // didn't see the end of the class, not a valid class,\n // but might still be valid as a literal match.\n return ['', false, 0, false];\n }\n // if we got no ranges and no negates, then we have a range that\n // cannot possibly match anything, and that poisons the whole glob\n if (!ranges.length && !negs.length) {\n return ['$.', false, glob.length - pos, true];\n }\n // if we got one positive range, and it's a single character, then that's\n // not actually a magic pattern, it's just that one literal character.\n // we should not treat that as \"magic\", we should just return the literal\n // character. [_] is a perfectly valid way to escape glob magic chars.\n if (negs.length === 0 &&\n ranges.length === 1 &&\n /^\\\\?.$/.test(ranges[0]) &&\n !negate) {\n const r = ranges[0].length === 2 ? ranges[0].slice(-1) : ranges[0];\n return [regexpEscape(r), false, endPos - pos, false];\n }\n const sranges = '[' + (negate ? '^' : '') + rangesToString(ranges) + ']';\n const snegs = '[' + (negate ? '' : '^') + rangesToString(negs) + ']';\n const comb = ranges.length && negs.length\n ? '(' + sranges + '|' + snegs + ')'\n : ranges.length\n ? sranges\n : snegs;\n return [comb, uflag, endPos - pos, true];\n};\n//# sourceMappingURL=brace-expressions.js.map","import expand from 'brace-expansion';\nimport { parseClass } from './brace-expressions.js';\nimport { escape } from './escape.js';\nimport { unescape } from './unescape.js';\nexport const minimatch = (p, pattern, options = {}) => {\n assertValidPattern(pattern);\n // shortcut: comments match nothing.\n if (!options.nocomment && pattern.charAt(0) === '#') {\n return false;\n }\n return new Minimatch(pattern, options).match(p);\n};\nexport default minimatch;\n// Optimized checking for the most common glob patterns.\nconst starDotExtRE = /^\\*+([^+@!?\\*\\[\\(]*)$/;\nconst starDotExtTest = (ext) => (f) => !f.startsWith('.') && f.endsWith(ext);\nconst starDotExtTestDot = (ext) => (f) => f.endsWith(ext);\nconst starDotExtTestNocase = (ext) => {\n ext = ext.toLowerCase();\n return (f) => !f.startsWith('.') && f.toLowerCase().endsWith(ext);\n};\nconst starDotExtTestNocaseDot = (ext) => {\n ext = ext.toLowerCase();\n return (f) => f.toLowerCase().endsWith(ext);\n};\nconst starDotStarRE = /^\\*+\\.\\*+$/;\nconst starDotStarTest = (f) => !f.startsWith('.') && f.includes('.');\nconst starDotStarTestDot = (f) => f !== '.' && f !== '..' && f.includes('.');\nconst dotStarRE = /^\\.\\*+$/;\nconst dotStarTest = (f) => f !== '.' && f !== '..' && f.startsWith('.');\nconst starRE = /^\\*+$/;\nconst starTest = (f) => f.length !== 0 && !f.startsWith('.');\nconst starTestDot = (f) => f.length !== 0 && f !== '.' && f !== '..';\nconst qmarksRE = /^\\?+([^+@!?\\*\\[\\(]*)?$/;\nconst qmarksTestNocase = ([$0, ext = '']) => {\n const noext = qmarksTestNoExt([$0]);\n if (!ext)\n return noext;\n ext = ext.toLowerCase();\n return (f) => noext(f) && f.toLowerCase().endsWith(ext);\n};\nconst qmarksTestNocaseDot = ([$0, ext = '']) => {\n const noext = qmarksTestNoExtDot([$0]);\n if (!ext)\n return noext;\n ext = ext.toLowerCase();\n return (f) => noext(f) && f.toLowerCase().endsWith(ext);\n};\nconst qmarksTestDot = ([$0, ext = '']) => {\n const noext = qmarksTestNoExtDot([$0]);\n return !ext ? noext : (f) => noext(f) && f.endsWith(ext);\n};\nconst qmarksTest = ([$0, ext = '']) => {\n const noext = qmarksTestNoExt([$0]);\n return !ext ? noext : (f) => noext(f) && f.endsWith(ext);\n};\nconst qmarksTestNoExt = ([$0]) => {\n const len = $0.length;\n return (f) => f.length === len && !f.startsWith('.');\n};\nconst qmarksTestNoExtDot = ([$0]) => {\n const len = $0.length;\n return (f) => f.length === len && f !== '.' && f !== '..';\n};\n/* c8 ignore start */\nconst defaultPlatform = (typeof process === 'object' && process\n ? (typeof process.env === 'object' &&\n process.env &&\n process.env.__MINIMATCH_TESTING_PLATFORM__) ||\n process.platform\n : 'posix');\nconst path = {\n win32: { sep: '\\\\' },\n posix: { sep: '/' },\n};\n/* c8 ignore stop */\nexport const sep = defaultPlatform === 'win32' ? path.win32.sep : path.posix.sep;\nminimatch.sep = sep;\nexport const GLOBSTAR = Symbol('globstar **');\nminimatch.GLOBSTAR = GLOBSTAR;\nconst plTypes = {\n '!': { open: '(?:(?!(?:', close: '))[^/]*?)' },\n '?': { open: '(?:', close: ')?' },\n '+': { open: '(?:', close: ')+' },\n '*': { open: '(?:', close: ')*' },\n '@': { open: '(?:', close: ')' },\n};\n// any single thing other than /\n// don't need to escape / when using new RegExp()\nconst qmark = '[^/]';\n// * => any number of characters\nconst star = qmark + '*?';\n// ** when dots are allowed. Anything goes, except .. and .\n// not (^ or / followed by one or two dots followed by $ or /),\n// followed by anything, any number of times.\nconst twoStarDot = '(?:(?!(?:\\\\/|^)(?:\\\\.{1,2})($|\\\\/)).)*?';\n// not a ^ or / followed by a dot,\n// followed by anything, any number of times.\nconst twoStarNoDot = '(?:(?!(?:\\\\/|^)\\\\.).)*?';\n// \"abc\" -> { a:true, b:true, c:true }\nconst charSet = (s) => s.split('').reduce((set, c) => {\n set[c] = true;\n return set;\n}, {});\n// characters that need to be escaped in RegExp.\nconst reSpecials = charSet('().*{}+?[]^$\\\\!');\n// characters that indicate we have to add the pattern start\nconst addPatternStartSet = charSet('[.(');\nexport const filter = (pattern, options = {}) => (p) => minimatch(p, pattern, options);\nminimatch.filter = filter;\nconst ext = (a, b = {}) => Object.assign({}, a, b);\nexport const defaults = (def) => {\n if (!def || typeof def !== 'object' || !Object.keys(def).length) {\n return minimatch;\n }\n const orig = minimatch;\n const m = (p, pattern, options = {}) => orig(p, pattern, ext(def, options));\n return Object.assign(m, {\n Minimatch: class Minimatch extends orig.Minimatch {\n constructor(pattern, options = {}) {\n super(pattern, ext(def, options));\n }\n static defaults(options) {\n return orig.defaults(ext(def, options)).Minimatch;\n }\n },\n unescape: (s, options = {}) => orig.unescape(s, ext(def, options)),\n escape: (s, options = {}) => orig.escape(s, ext(def, options)),\n filter: (pattern, options = {}) => orig.filter(pattern, ext(def, options)),\n defaults: (options) => orig.defaults(ext(def, options)),\n makeRe: (pattern, options = {}) => orig.makeRe(pattern, ext(def, options)),\n braceExpand: (pattern, options = {}) => orig.braceExpand(pattern, ext(def, options)),\n match: (list, pattern, options = {}) => orig.match(list, pattern, ext(def, options)),\n sep: orig.sep,\n GLOBSTAR: GLOBSTAR,\n });\n};\nminimatch.defaults = defaults;\n// Brace expansion:\n// a{b,c}d -> abd acd\n// a{b,}c -> abc ac\n// a{0..3}d -> a0d a1d a2d a3d\n// a{b,c{d,e}f}g -> abg acdfg acefg\n// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg\n//\n// Invalid sets are not expanded.\n// a{2..}b -> a{2..}b\n// a{b}c -> a{b}c\nexport const braceExpand = (pattern, options = {}) => {\n assertValidPattern(pattern);\n // Thanks to Yeting Li <https://github.com/yetingli> for\n // improving this regexp to avoid a ReDOS vulnerability.\n if (options.nobrace || !/\\{(?:(?!\\{).)*\\}/.test(pattern)) {\n // shortcut. no need to expand.\n return [pattern];\n }\n return expand(pattern);\n};\nminimatch.braceExpand = braceExpand;\nconst MAX_PATTERN_LENGTH = 1024 * 64;\nconst assertValidPattern = (pattern) => {\n if (typeof pattern !== 'string') {\n throw new TypeError('invalid pattern');\n }\n if (pattern.length > MAX_PATTERN_LENGTH) {\n throw new TypeError('pattern is too long');\n }\n};\n// parse a component of the expanded set.\n// At this point, no pattern may contain \"/\" in it\n// so we're going to return a 2d array, where each entry is the full\n// pattern, split on '/', and then turned into a regular expression.\n// A regexp is made at the end which joins each array with an\n// escaped /, and another full one which joins each regexp with |.\n//\n// Following the lead of Bash 4.1, note that \"**\" only has special meaning\n// when it is the *only* thing in a path portion. Otherwise, any series\n// of * is equivalent to a single *. Globstar behavior is enabled by\n// default, and can be disabled by setting options.noglobstar.\nexport const makeRe = (pattern, options = {}) => new Minimatch(pattern, options).makeRe();\nminimatch.makeRe = makeRe;\nexport const match = (list, pattern, options = {}) => {\n const mm = new Minimatch(pattern, options);\n list = list.filter(f => mm.match(f));\n if (mm.options.nonull && !list.length) {\n list.push(pattern);\n }\n return list;\n};\nminimatch.match = match;\n// replace stuff like \\* with *\nconst globUnescape = (s) => s.replace(/\\\\(.)/g, '$1');\nconst globMagic = /[?*]|[+@!]\\(.*?\\)|\\[|\\]/;\nconst regExpEscape = (s) => s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\nexport class Minimatch {\n options;\n set;\n pattern;\n windowsPathsNoEscape;\n nonegate;\n negate;\n comment;\n empty;\n preserveMultipleSlashes;\n partial;\n globSet;\n globParts;\n nocase;\n isWindows;\n platform;\n windowsNoMagicRoot;\n regexp;\n constructor(pattern, options = {}) {\n assertValidPattern(pattern);\n options = options || {};\n this.options = options;\n this.pattern = pattern;\n this.platform = options.platform || defaultPlatform;\n this.isWindows = this.platform === 'win32';\n this.windowsPathsNoEscape =\n !!options.windowsPathsNoEscape || options.allowWindowsEscape === false;\n if (this.windowsPathsNoEscape) {\n this.pattern = this.pattern.replace(/\\\\/g, '/');\n }\n this.preserveMultipleSlashes = !!options.preserveMultipleSlashes;\n this.regexp = null;\n this.negate = false;\n this.nonegate = !!options.nonegate;\n this.comment = false;\n this.empty = false;\n this.partial = !!options.partial;\n this.nocase = !!this.options.nocase;\n this.windowsNoMagicRoot =\n options.windowsNoMagicRoot !== undefined\n ? options.windowsNoMagicRoot\n : !!(this.isWindows && this.nocase);\n this.globSet = [];\n this.globParts = [];\n this.set = [];\n // make the set of regexps etc.\n this.make();\n }\n hasMagic() {\n if (this.options.magicalBraces && this.set.length > 1) {\n return true;\n }\n for (const pattern of this.set) {\n for (const part of pattern) {\n if (typeof part !== 'string')\n return true;\n }\n }\n return false;\n }\n debug(..._) { }\n make() {\n const pattern = this.pattern;\n const options = this.options;\n // empty patterns and comments match nothing.\n if (!options.nocomment && pattern.charAt(0) === '#') {\n this.comment = true;\n return;\n }\n if (!pattern) {\n this.empty = true;\n return;\n }\n // step 1: figure out negation, etc.\n this.parseNegate();\n // step 2: expand braces\n this.globSet = [...new Set(this.braceExpand())];\n if (options.debug) {\n this.debug = (...args) => console.error(...args);\n }\n this.debug(this.pattern, this.globSet);\n // step 3: now we have a set, so turn each one into a series of\n // path-portion matching patterns.\n // These will be regexps, except in the case of \"**\", which is\n // set to the GLOBSTAR object for globstar behavior,\n // and will not contain any / characters\n //\n // First, we preprocess to make the glob pattern sets a bit simpler\n // and deduped. There are some perf-killing patterns that can cause\n // problems with a glob walk, but we can simplify them down a bit.\n const rawGlobParts = this.globSet.map(s => this.slashSplit(s));\n this.globParts = this.preprocess(rawGlobParts);\n this.debug(this.pattern, this.globParts);\n // glob --> regexps\n let set = this.globParts.map((s, _, __) => {\n if (this.isWindows && this.windowsNoMagicRoot) {\n // check if it's a drive or unc path.\n const isUNC = s[0] === '' &&\n s[1] === '' &&\n (s[2] === '?' || !globMagic.test(s[2])) &&\n !globMagic.test(s[3]);\n const isDrive = /^[a-z]:/i.test(s[0]);\n if (isUNC) {\n return [...s.slice(0, 4), ...s.slice(4).map(ss => this.parse(ss))];\n }\n else if (isDrive) {\n return [s[0], ...s.slice(1).map(ss => this.parse(ss))];\n }\n }\n return s.map(ss => this.parse(ss));\n });\n this.debug(this.pattern, set);\n // filter out everything that didn't compile properly.\n this.set = set.filter(s => s.indexOf(false) === -1);\n // do not treat the ? in UNC paths as magic\n if (this.isWindows) {\n for (let i = 0; i < this.set.length; i++) {\n const p = this.set[i];\n if (p[0] === '' &&\n p[1] === '' &&\n this.globParts[i][2] === '?' &&\n typeof p[3] === 'string' &&\n /^[a-z]:$/i.test(p[3])) {\n p[2] = '?';\n }\n }\n }\n this.debug(this.pattern, this.set);\n }\n // various transforms to equivalent pattern sets that are\n // faster to process in a filesystem walk. The goal is to\n // eliminate what we can, and push all ** patterns as far\n // to the right as possible, even if it increases the number\n // of patterns that we have to process.\n preprocess(globParts) {\n // if we're not in globstar mode, then turn all ** into *\n if (this.options.noglobstar) {\n for (let i = 0; i < globParts.length; i++) {\n for (let j = 0; j < globParts[i].length; j++) {\n if (globParts[i][j] === '**') {\n globParts[i][j] = '*';\n }\n }\n }\n }\n const { optimizationLevel = 1 } = this.options;\n if (optimizationLevel >= 2) {\n // aggressive optimization for the purpose of fs walking\n globParts = this.firstPhasePreProcess(globParts);\n globParts = this.secondPhasePreProcess(globParts);\n }\n else if (optimizationLevel >= 1) {\n // just basic optimizations to remove some .. parts\n globParts = this.levelOneOptimize(globParts);\n }\n else {\n globParts = this.adjascentGlobstarOptimize(globParts);\n }\n return globParts;\n }\n // just get rid of adjascent ** portions\n adjascentGlobstarOptimize(globParts) {\n return globParts.map(parts => {\n let gs = -1;\n while (-1 !== (gs = parts.indexOf('**', gs + 1))) {\n let i = gs;\n while (parts[i + 1] === '**') {\n i++;\n }\n if (i !== gs) {\n parts.splice(gs, i - gs);\n }\n }\n return parts;\n });\n }\n // get rid of adjascent ** and resolve .. portions\n levelOneOptimize(globParts) {\n return globParts.map(parts => {\n parts = parts.reduce((set, part) => {\n const prev = set[set.length - 1];\n if (part === '**' && prev === '**') {\n return set;\n }\n if (part === '..') {\n if (prev && prev !== '..' && prev !== '.' && prev !== '**') {\n set.pop();\n return set;\n }\n }\n set.push(part);\n return set;\n }, []);\n return parts.length === 0 ? [''] : parts;\n });\n }\n levelTwoFileOptimize(parts) {\n if (!Array.isArray(parts)) {\n parts = this.slashSplit(parts);\n }\n let didSomething = false;\n do {\n didSomething = false;\n // <pre>/<e>/<rest> -> <pre>/<rest>\n if (!this.preserveMultipleSlashes) {\n for (let i = 1; i < parts.length - 1; i++) {\n const p = parts[i];\n // don't squeeze out UNC patterns\n if (i === 1 && p === '' && parts[0] === '')\n continue;\n if (p === '.' || p === '') {\n didSomething = true;\n parts.splice(i, 1);\n i--;\n }\n }\n if (parts[0] === '.' &&\n parts.length === 2 &&\n (parts[1] === '.' || parts[1] === '')) {\n didSomething = true;\n parts.pop();\n }\n }\n // <pre>/<p>/../<rest> -> <pre>/<rest>\n let dd = 0;\n while (-1 !== (dd = parts.indexOf('..', dd + 1))) {\n const p = parts[dd - 1];\n if (p && p !== '.' && p !== '..' && p !== '**') {\n didSomething = true;\n parts.splice(dd - 1, 2);\n dd -= 2;\n }\n }\n } while (didSomething);\n return parts.length === 0 ? [''] : parts;\n }\n // First phase: single-pattern processing\n // <pre> is 1 or more portions\n // <rest> is 1 or more portions\n // <p> is any portion other than ., .., '', or **\n // <e> is . or ''\n //\n // **/.. is *brutal* for filesystem walking performance, because\n // it effectively resets the recursive walk each time it occurs,\n // and ** cannot be reduced out by a .. pattern part like a regexp\n // or most strings (other than .., ., and '') can be.\n //\n // <pre>/**/../<p>/<p>/<rest> -> {<pre>/../<p>/<p>/<rest>,<pre>/**/<p>/<p>/<rest>}\n // <pre>/<e>/<rest> -> <pre>/<rest>\n // <pre>/<p>/../<rest> -> <pre>/<rest>\n // **/**/<rest> -> **/<rest>\n //\n // **/*/<rest> -> */**/<rest> <== not valid because ** doesn't follow\n // this WOULD be allowed if ** did follow symlinks, or * didn't\n firstPhasePreProcess(globParts) {\n let didSomething = false;\n do {\n didSomething = false;\n // <pre>/**/../<p>/<p>/<rest> -> {<pre>/../<p>/<p>/<rest>,<pre>/**/<p>/<p>/<rest>}\n for (let parts of globParts) {\n let gs = -1;\n while (-1 !== (gs = parts.indexOf('**', gs + 1))) {\n let gss = gs;\n while (parts[gss + 1] === '**') {\n // <pre>/**/**/<rest> -> <pre>/**/<rest>\n gss++;\n }\n // eg, if gs is 2 and gss is 4, that means we have 3 **\n // parts, and can remove 2 of them.\n if (gss > gs) {\n parts.splice(gs + 1, gss - gs);\n }\n let next = parts[gs + 1];\n const p = parts[gs + 2];\n const p2 = parts[gs + 3];\n if (next !== '..')\n continue;\n if (!p ||\n p === '.' ||\n p === '..' ||\n !p2 ||\n p2 === '.' ||\n p2 === '..') {\n continue;\n }\n didSomething = true;\n // edit parts in place, and push the new one\n parts.splice(gs, 1);\n const other = parts.slice(0);\n other[gs] = '**';\n globParts.push(other);\n gs--;\n }\n // <pre>/<e>/<rest> -> <pre>/<rest>\n if (!this.preserveMultipleSlashes) {\n for (let i = 1; i < parts.length - 1; i++) {\n const p = parts[i];\n // don't squeeze out UNC patterns\n if (i === 1 && p === '' && parts[0] === '')\n continue;\n if (p === '.' || p === '') {\n didSomething = true;\n parts.splice(i, 1);\n i--;\n }\n }\n if (parts[0] === '.' &&\n parts.length === 2 &&\n (parts[1] === '.' || parts[1] === '')) {\n didSomething = true;\n parts.pop();\n }\n }\n // <pre>/<p>/../<rest> -> <pre>/<rest>\n let dd = 0;\n while (-1 !== (dd = parts.indexOf('..', dd + 1))) {\n const p = parts[dd - 1];\n if (p && p !== '.' && p !== '..' && p !== '**') {\n didSomething = true;\n const needDot = dd === 1 && parts[dd + 1] === '**';\n const splin = needDot ? ['.'] : [];\n parts.splice(dd - 1, 2, ...splin);\n if (parts.length === 0)\n parts.push('');\n dd -= 2;\n }\n }\n }\n } while (didSomething);\n return globParts;\n }\n // second phase: multi-pattern dedupes\n // {<pre>/*/<rest>,<pre>/<p>/<rest>} -> <pre>/*/<rest>\n // {<pre>/<rest>,<pre>/<rest>} -> <pre>/<rest>\n // {<pre>/**/<rest>,<pre>/<rest>} -> <pre>/**/<rest>\n //\n // {<pre>/**/<rest>,<pre>/**/<p>/<rest>} -> <pre>/**/<rest>\n // ^-- not valid because ** doens't follow symlinks\n secondPhasePreProcess(globParts) {\n for (let i = 0; i < globParts.length - 1; i++) {\n for (let j = i + 1; j < globParts.length; j++) {\n const matched = this.partsMatch(globParts[i], globParts[j], !this.preserveMultipleSlashes);\n if (!matched)\n continue;\n globParts[i] = matched;\n globParts[j] = [];\n }\n }\n return globParts.filter(gs => gs.length);\n }\n partsMatch(a, b, emptyGSMatch = false) {\n let ai = 0;\n let bi = 0;\n let result = [];\n let which = '';\n while (ai < a.length && bi < b.length) {\n if (a[ai] === b[bi]) {\n result.push(which === 'b' ? b[bi] : a[ai]);\n ai++;\n bi++;\n }\n else if (emptyGSMatch && a[ai] === '**' && b[bi] === a[ai + 1]) {\n result.push(a[ai]);\n ai++;\n }\n else if (emptyGSMatch && b[bi] === '**' && a[ai] === b[bi + 1]) {\n result.push(b[bi]);\n bi++;\n }\n else if (a[ai] === '*' &&\n b[bi] &&\n (this.options.dot || !b[bi].startsWith('.')) &&\n b[bi] !== '**') {\n if (which === 'b')\n return false;\n which = 'a';\n result.push(a[ai]);\n ai++;\n bi++;\n }\n else if (b[bi] === '*' &&\n a[ai] &&\n (this.options.dot || !a[ai].startsWith('.')) &&\n a[ai] !== '**') {\n if (which === 'a')\n return false;\n which = 'b';\n result.push(b[bi]);\n ai++;\n bi++;\n }\n else {\n return false;\n }\n }\n // if we fall out of the loop, it means they two are identical\n // as long as their lengths match\n return a.length === b.length && result;\n }\n parseNegate() {\n if (this.nonegate)\n return;\n const pattern = this.pattern;\n let negate = false;\n let negateOffset = 0;\n for (let i = 0; i < pattern.length && pattern.charAt(i) === '!'; i++) {\n negate = !negate;\n negateOffset++;\n }\n if (negateOffset)\n this.pattern = pattern.slice(negateOffset);\n this.negate = negate;\n }\n // set partial to true to test if, for example,\n // \"/a/b\" matches the start of \"/*/b/*/d\"\n // Partial means, if you run out of file before you run\n // out of pattern, then that's fine, as long as all\n // the parts match.\n matchOne(file, pattern, partial = false) {\n const options = this.options;\n // a UNC pattern like //?/c:/* can match a path like c:/x\n // and vice versa\n if (this.isWindows) {\n const fileUNC = file[0] === '' &&\n file[1] === '' &&\n file[2] === '?' &&\n typeof file[3] === 'string' &&\n /^[a-z]:$/i.test(file[3]);\n const patternUNC = pattern[0] === '' &&\n pattern[1] === '' &&\n pattern[2] === '?' &&\n typeof pattern[3] === 'string' &&\n /^[a-z]:$/i.test(pattern[3]);\n if (fileUNC && patternUNC) {\n const fd = file[3];\n const pd = pattern[3];\n if (fd.toLowerCase() === pd.toLowerCase()) {\n file[3] = pd;\n }\n }\n else if (patternUNC && typeof file[0] === 'string') {\n const pd = pattern[3];\n const fd = file[0];\n if (pd.toLowerCase() === fd.toLowerCase()) {\n pattern[3] = fd;\n pattern = pattern.slice(3);\n }\n }\n else if (fileUNC && typeof pattern[0] === 'string') {\n const fd = file[3];\n if (fd.toLowerCase() === pattern[0].toLowerCase()) {\n pattern[0] = fd;\n file = file.slice(3);\n }\n }\n }\n // resolve and reduce . and .. portions in the file as well.\n // dont' need to do the second phase, because it's only one string[]\n const { optimizationLevel = 1 } = this.options;\n if (optimizationLevel >= 2) {\n file = this.levelTwoFileOptimize(file);\n }\n this.debug('matchOne', this, { file, pattern });\n this.debug('matchOne', file.length, pattern.length);\n for (var fi = 0, pi = 0, fl = file.length, pl = pattern.length; fi < fl && pi < pl; fi++, pi++) {\n this.debug('matchOne loop');\n var p = pattern[pi];\n var f = file[fi];\n this.debug(pattern, p, f);\n // should be impossible.\n // some invalid regexp stuff in the set.\n /* c8 ignore start */\n if (p === false) {\n return false;\n }\n /* c8 ignore stop */\n if (p === GLOBSTAR) {\n this.debug('GLOBSTAR', [pattern, p, f]);\n // \"**\"\n // a/**/b/**/c would match the following:\n // a/b/x/y/z/c\n // a/x/y/z/b/c\n // a/b/x/b/x/c\n // a/b/c\n // To do this, take the rest of the pattern after\n // the **, and see if it would match the file remainder.\n // If so, return success.\n // If not, the ** \"swallows\" a segment, and try again.\n // This is recursively awful.\n //\n // a/**/b/**/c matching a/b/x/y/z/c\n // - a matches a\n // - doublestar\n // - matchOne(b/x/y/z/c, b/**/c)\n // - b matches b\n // - doublestar\n // - matchOne(x/y/z/c, c) -> no\n // - matchOne(y/z/c, c) -> no\n // - matchOne(z/c, c) -> no\n // - matchOne(c, c) yes, hit\n var fr = fi;\n var pr = pi + 1;\n if (pr === pl) {\n this.debug('** at the end');\n // a ** at the end will just swallow the rest.\n // We have found a match.\n // however, it will not swallow /.x, unless\n // options.dot is set.\n // . and .. are *never* matched by **, for explosively\n // exponential reasons.\n for (; fi < fl; fi++) {\n if (file[fi] === '.' ||\n file[fi] === '..' ||\n (!options.dot && file[fi].charAt(0) === '.'))\n return false;\n }\n return true;\n }\n // ok, let's see if we can swallow whatever we can.\n while (fr < fl) {\n var swallowee = file[fr];\n this.debug('\\nglobstar while', file, fr, pattern, pr, swallowee);\n // XXX remove this slice. Just pass the start index.\n if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) {\n this.debug('globstar found match!', fr, fl, swallowee);\n // found a match.\n return true;\n }\n else {\n // can't swallow \".\" or \"..\" ever.\n // can only swallow \".foo\" when explicitly asked.\n if (swallowee === '.' ||\n swallowee === '..' ||\n (!options.dot && swallowee.charAt(0) === '.')) {\n this.debug('dot detected!', file, fr, pattern, pr);\n break;\n }\n // ** swallows a segment, and continue.\n this.debug('globstar swallow a segment, and continue');\n fr++;\n }\n }\n // no match was found.\n // However, in partial mode, we can't say this is necessarily over.\n /* c8 ignore start */\n if (partial) {\n // ran out of file\n this.debug('\\n>>> no match, partial?', file, fr, pattern, pr);\n if (fr === fl) {\n return true;\n }\n }\n /* c8 ignore stop */\n return false;\n }\n // something other than **\n // non-magic patterns just have to match exactly\n // patterns with magic have been turned into regexps.\n let hit;\n if (typeof p === 'string') {\n hit = f === p;\n this.debug('string match', p, f, hit);\n }\n else {\n hit = p.test(f);\n this.debug('pattern match', p, f, hit);\n }\n if (!hit)\n return false;\n }\n // Note: ending in / means that we'll get a final \"\"\n // at the end of the pattern. This can only match a\n // corresponding \"\" at the end of the file.\n // If the file ends in /, then it can only match a\n // a pattern that ends in /, unless the pattern just\n // doesn't have any more for it. But, a/b/ should *not*\n // match \"a/b/*\", even though \"\" matches against the\n // [^/]*? pattern, except in partial mode, where it might\n // simply not be reached yet.\n // However, a/b/ should still satisfy a/*\n // now either we fell off the end of the pattern, or we're done.\n if (fi === fl && pi === pl) {\n // ran out of pattern and filename at the same time.\n // an exact hit!\n return true;\n }\n else if (fi === fl) {\n // ran out of file, but still had pattern left.\n // this is ok if we're doing the match as part of\n // a glob fs traversal.\n return partial;\n }\n else if (pi === pl) {\n // ran out of pattern, still have file left.\n // this is only acceptable if we're on the very last\n // empty segment of a file with a trailing slash.\n // a/* should match a/b/\n return fi === fl - 1 && file[fi] === '';\n /* c8 ignore start */\n }\n else {\n // should be unreachable.\n throw new Error('wtf?');\n }\n /* c8 ignore stop */\n }\n braceExpand() {\n return braceExpand(this.pattern, this.options);\n }\n parse(pattern) {\n assertValidPattern(pattern);\n const options = this.options;\n // shortcuts\n if (pattern === '**')\n return GLOBSTAR;\n if (pattern === '')\n return '';\n // far and away, the most common glob pattern parts are\n // *, *.*, and *.<ext> Add a fast check method for those.\n let m;\n let fastTest = null;\n if ((m = pattern.match(starRE))) {\n fastTest = options.dot ? starTestDot : starTest;\n }\n else if ((m = pattern.match(starDotExtRE))) {\n fastTest = (options.nocase\n ? options.dot\n ? starDotExtTestNocaseDot\n : starDotExtTestNocase\n : options.dot\n ? starDotExtTestDot\n : starDotExtTest)(m[1]);\n }\n else if ((m = pattern.match(qmarksRE))) {\n fastTest = (options.nocase\n ? options.dot\n ? qmarksTestNocaseDot\n : qmarksTestNocase\n : options.dot\n ? qmarksTestDot\n : qmarksTest)(m);\n }\n else if ((m = pattern.match(starDotStarRE))) {\n fastTest = options.dot ? starDotStarTestDot : starDotStarTest;\n }\n else if ((m = pattern.match(dotStarRE))) {\n fastTest = dotStarTest;\n }\n let re = '';\n let hasMagic = false;\n let escaping = false;\n // ? => one single character\n const patternListStack = [];\n const negativeLists = [];\n let stateChar = false;\n let uflag = false;\n let pl;\n // . and .. never match anything that doesn't start with .,\n // even when options.dot is set. However, if the pattern\n // starts with ., then traversal patterns can match.\n let dotTravAllowed = pattern.charAt(0) === '.';\n let dotFileAllowed = options.dot || dotTravAllowed;\n const patternStart = () => dotTravAllowed\n ? ''\n : dotFileAllowed\n ? '(?!(?:^|\\\\/)\\\\.{1,2}(?:$|\\\\/))'\n : '(?!\\\\.)';\n const subPatternStart = (p) => p.charAt(0) === '.'\n ? ''\n : options.dot\n ? '(?!(?:^|\\\\/)\\\\.{1,2}(?:$|\\\\/))'\n : '(?!\\\\.)';\n const clearStateChar = () => {\n if (stateChar) {\n // we had some state-tracking character\n // that wasn't consumed by this pass.\n switch (stateChar) {\n case '*':\n re += star;\n hasMagic = true;\n break;\n case '?':\n re += qmark;\n hasMagic = true;\n break;\n default:\n re += '\\\\' + stateChar;\n break;\n }\n this.debug('clearStateChar %j %j', stateChar, re);\n stateChar = false;\n }\n };\n for (let i = 0, c; i < pattern.length && (c = pattern.charAt(i)); i++) {\n this.debug('%s\\t%s %s %j', pattern, i, re, c);\n // skip over any that are escaped.\n if (escaping) {\n // completely not allowed, even escaped.\n // should be impossible.\n /* c8 ignore start */\n if (c === '/') {\n return false;\n }\n /* c8 ignore stop */\n if (reSpecials[c]) {\n re += '\\\\';\n }\n re += c;\n escaping = false;\n continue;\n }\n switch (c) {\n // Should already be path-split by now.\n /* c8 ignore start */\n case '/': {\n return false;\n }\n /* c8 ignore stop */\n case '\\\\':\n clearStateChar();\n escaping = true;\n continue;\n // the various stateChar values\n // for the \"extglob\" stuff.\n case '?':\n case '*':\n case '+':\n case '@':\n case '!':\n this.debug('%s\\t%s %s %j <-- stateChar', pattern, i, re, c);\n // if we already have a stateChar, then it means\n // that there was something like ** or +? in there.\n // Handle the stateChar, then proceed with this one.\n this.debug('call clearStateChar %j', stateChar);\n clearStateChar();\n stateChar = c;\n // if extglob is disabled, then +(asdf|foo) isn't a thing.\n // just clear the statechar *now*, rather than even diving into\n // the patternList stuff.\n if (options.noext)\n clearStateChar();\n continue;\n case '(': {\n if (!stateChar) {\n re += '\\\\(';\n continue;\n }\n const plEntry = {\n type: stateChar,\n start: i - 1,\n reStart: re.length,\n open: plTypes[stateChar].open,\n close: plTypes[stateChar].close,\n };\n this.debug(this.pattern, '\\t', plEntry);\n patternListStack.push(plEntry);\n // negation is (?:(?!(?:js)(?:<rest>))[^/]*)\n re += plEntry.open;\n // next entry starts with a dot maybe?\n if (plEntry.start === 0 && plEntry.type !== '!') {\n dotTravAllowed = true;\n re += subPatternStart(pattern.slice(i + 1));\n }\n this.debug('plType %j %j', stateChar, re);\n stateChar = false;\n continue;\n }\n case ')': {\n const plEntry = patternListStack[patternListStack.length - 1];\n if (!plEntry) {\n re += '\\\\)';\n continue;\n }\n patternListStack.pop();\n // closing an extglob\n clearStateChar();\n hasMagic = true;\n pl = plEntry;\n // negation is (?:(?!js)[^/]*)\n // The others are (?:<pattern>)<type>\n re += pl.close;\n if (pl.type === '!') {\n negativeLists.push(Object.assign(pl, { reEnd: re.length }));\n }\n continue;\n }\n case '|': {\n const plEntry = patternListStack[patternListStack.length - 1];\n if (!plEntry) {\n re += '\\\\|';\n continue;\n }\n clearStateChar();\n re += '|';\n // next subpattern can start with a dot?\n if (plEntry.start === 0 && plEntry.type !== '!') {\n dotTravAllowed = true;\n re += subPatternStart(pattern.slice(i + 1));\n }\n continue;\n }\n // these are mostly the same in regexp and glob\n case '[':\n // swallow any state-tracking char before the [\n clearStateChar();\n const [src, needUflag, consumed, magic] = parseClass(pattern, i);\n if (consumed) {\n re += src;\n uflag = uflag || needUflag;\n i += consumed - 1;\n hasMagic = hasMagic || magic;\n }\n else {\n re += '\\\\[';\n }\n continue;\n case ']':\n re += '\\\\' + c;\n continue;\n default:\n // swallow any state char that wasn't consumed\n clearStateChar();\n re += regExpEscape(c);\n break;\n } // switch\n } // for\n // handle the case where we had a +( thing at the *end*\n // of the pattern.\n // each pattern list stack adds 3 chars, and we need to go through\n // and escape any | chars that were passed through as-is for the regexp.\n // Go through and escape them, taking care not to double-escape any\n // | chars that were already escaped.\n for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) {\n let tail;\n tail = re.slice(pl.reStart + pl.open.length);\n this.debug(this.pattern, 'setting tail', re, pl);\n // maybe some even number of \\, then maybe 1 \\, followed by a |\n tail = tail.replace(/((?:\\\\{2}){0,64})(\\\\?)\\|/g, (_, $1, $2) => {\n if (!$2) {\n // the | isn't already escaped, so escape it.\n $2 = '\\\\';\n // should already be done\n /* c8 ignore start */\n }\n /* c8 ignore stop */\n // need to escape all those slashes *again*, without escaping the\n // one that we need for escaping the | character. As it works out,\n // escaping an even number of slashes can be done by simply repeating\n // it exactly after itself. That's why this trick works.\n //\n // I am sorry that you have to see this.\n return $1 + $1 + $2 + '|';\n });\n this.debug('tail=%j\\n %s', tail, tail, pl, re);\n const t = pl.type === '*' ? star : pl.type === '?' ? qmark : '\\\\' + pl.type;\n hasMagic = true;\n re = re.slice(0, pl.reStart) + t + '\\\\(' + tail;\n }\n // handle trailing things that only matter at the very end.\n clearStateChar();\n if (escaping) {\n // trailing \\\\\n re += '\\\\\\\\';\n }\n // only need to apply the nodot start if the re starts with\n // something that could conceivably capture a dot\n const addPatternStart = addPatternStartSet[re.charAt(0)];\n // Hack to work around lack of negative lookbehind in JS\n // A pattern like: *.!(x).!(y|z) needs to ensure that a name\n // like 'a.xyz.yz' doesn't match. So, the first negative\n // lookahead, has to look ALL the way ahead, to the end of\n // the pattern.\n for (let n = negativeLists.length - 1; n > -1; n--) {\n const nl = negativeLists[n];\n const nlBefore = re.slice(0, nl.reStart);\n const nlFirst = re.slice(nl.reStart, nl.reEnd - 8);\n let nlAfter = re.slice(nl.reEnd);\n const nlLast = re.slice(nl.reEnd - 8, nl.reEnd) + nlAfter;\n // Handle nested stuff like *(*.js|!(*.json)), where open parens\n // mean that we should *not* include the ) in the bit that is considered\n // \"after\" the negated section.\n const closeParensBefore = nlBefore.split(')').length;\n const openParensBefore = nlBefore.split('(').length - closeParensBefore;\n let cleanAfter = nlAfter;\n for (let i = 0; i < openParensBefore; i++) {\n cleanAfter = cleanAfter.replace(/\\)[+*?]?/, '');\n }\n nlAfter = cleanAfter;\n const dollar = nlAfter === '' ? '(?:$|\\\\/)' : '';\n re = nlBefore + nlFirst + nlAfter + dollar + nlLast;\n }\n // if the re is not \"\" at this point, then we need to make sure\n // it doesn't match against an empty path part.\n // Otherwise a/* will match a/, which it should not.\n if (re !== '' && hasMagic) {\n re = '(?=.)' + re;\n }\n if (addPatternStart) {\n re = patternStart() + re;\n }\n // if it's nocase, and the lcase/uppercase don't match, it's magic\n if (options.nocase && !hasMagic && !options.nocaseMagicOnly) {\n hasMagic = pattern.toUpperCase() !== pattern.toLowerCase();\n }\n // skip the regexp for non-magical patterns\n // unescape anything in it, though, so that it'll be\n // an exact match against a file etc.\n if (!hasMagic) {\n return globUnescape(re);\n }\n const flags = (options.nocase ? 'i' : '') + (uflag ? 'u' : '');\n try {\n const ext = fastTest\n ? {\n _glob: pattern,\n _src: re,\n test: fastTest,\n }\n : {\n _glob: pattern,\n _src: re,\n };\n return Object.assign(new RegExp('^' + re + '$', flags), ext);\n /* c8 ignore start */\n }\n catch (er) {\n // should be impossible\n // If it was an invalid regular expression, then it can't match\n // anything. This trick looks for a character after the end of\n // the string, which is of course impossible, except in multi-line\n // mode, but it's not a /m regex.\n this.debug('invalid regexp', er);\n return new RegExp('$.');\n }\n /* c8 ignore stop */\n }\n makeRe() {\n if (this.regexp || this.regexp === false)\n return this.regexp;\n // at this point, this.set is a 2d array of partial\n // pattern strings, or \"**\".\n //\n // It's better to use .match(). This function shouldn't\n // be used, really, but it's pretty convenient sometimes,\n // when you just want to work with a regex.\n const set = this.set;\n if (!set.length) {\n this.regexp = false;\n return this.regexp;\n }\n const options = this.options;\n const twoStar = options.noglobstar\n ? star\n : options.dot\n ? twoStarDot\n : twoStarNoDot;\n const flags = options.nocase ? 'i' : '';\n // regexpify non-globstar patterns\n // if ** is only item, then we just do one twoStar\n // if ** is first, and there are more, prepend (\\/|twoStar\\/)? to next\n // if ** is last, append (\\/twoStar|) to previous\n // if ** is in the middle, append (\\/|\\/twoStar\\/) to previous\n // then filter out GLOBSTAR symbols\n let re = set\n .map(pattern => {\n const pp = pattern.map(p => typeof p === 'string'\n ? regExpEscape(p)\n : p === GLOBSTAR\n ? GLOBSTAR\n : p._src);\n pp.forEach((p, i) => {\n const next = pp[i + 1];\n const prev = pp[i - 1];\n if (p !== GLOBSTAR || prev === GLOBSTAR) {\n return;\n }\n if (prev === undefined) {\n if (next !== undefined && next !== GLOBSTAR) {\n pp[i + 1] = '(?:\\\\/|' + twoStar + '\\\\/)?' + next;\n }\n else {\n pp[i] = twoStar;\n }\n }\n else if (next === undefined) {\n pp[i - 1] = prev + '(?:\\\\/|' + twoStar + ')?';\n }\n else if (next !== GLOBSTAR) {\n pp[i - 1] = prev + '(?:\\\\/|\\\\/' + twoStar + '\\\\/)' + next;\n pp[i + 1] = GLOBSTAR;\n }\n });\n return pp.filter(p => p !== GLOBSTAR).join('/');\n })\n .join('|');\n // must match entire pattern\n // ending in a * or ** will make it less strict.\n re = '^(?:' + re + ')$';\n // can match anything, as long as it's not this.\n if (this.negate)\n re = '^(?!' + re + ').*$';\n try {\n this.regexp = new RegExp(re, flags);\n /* c8 ignore start */\n }\n catch (ex) {\n // should be impossible\n this.regexp = false;\n }\n /* c8 ignore stop */\n return this.regexp;\n }\n slashSplit(p) {\n // if p starts with // on windows, we preserve that\n // so that UNC paths aren't broken. Otherwise, any number of\n // / characters are coalesced into one, unless\n // preserveMultipleSlashes is set to true.\n if (this.preserveMultipleSlashes) {\n return p.split('/');\n }\n else if (this.isWindows && /^\\/\\/[^\\/]+/.test(p)) {\n // add an extra '' for the one we lose\n return ['', ...p.split(/\\/+/)];\n }\n else {\n return p.split(/\\/+/);\n }\n }\n match(f, partial = this.partial) {\n this.debug('match', f, this.pattern);\n // short-circuit in the case of busted things.\n // comments, etc.\n if (this.comment) {\n return false;\n }\n if (this.empty) {\n return f === '';\n }\n if (f === '/' && partial) {\n return true;\n }\n const options = this.options;\n // windows: need to use /, not \\\n if (this.isWindows) {\n f = f.split('\\\\').join('/');\n }\n // treat the test path as a set of pathparts.\n const ff = this.slashSplit(f);\n this.debug(this.pattern, 'split', ff);\n // just ONE of the pattern sets in this.set needs to match\n // in order for it to be valid. If negating, then just one\n // match means that we have failed.\n // Either way, return on the first hit.\n const set = this.set;\n this.debug(this.pattern, 'set', set);\n // Find the basename of the path by looking for the last non-empty segment\n let filename = ff[ff.length - 1];\n if (!filename) {\n for (let i = ff.length - 2; !filename && i >= 0; i--) {\n filename = ff[i];\n }\n }\n for (let i = 0; i < set.length; i++) {\n const pattern = set[i];\n let file = ff;\n if (options.matchBase && pattern.length === 1) {\n file = [filename];\n }\n const hit = this.matchOne(file, pattern, partial);\n if (hit) {\n if (options.flipNegate) {\n return true;\n }\n return !this.negate;\n }\n }\n // didn't get any hits. this is success if it's a negative\n // pattern, failure otherwise.\n if (options.flipNegate) {\n return false;\n }\n return this.negate;\n }\n static defaults(def) {\n return minimatch.defaults(def).Minimatch;\n }\n}\n/* c8 ignore start */\nexport { escape } from './escape.js';\nexport { unescape } from './unescape.js';\n/* c8 ignore stop */\nminimatch.Minimatch = Minimatch;\nminimatch.escape = escape;\nminimatch.unescape = unescape;\n//# sourceMappingURL=index.js.map","export function convertResponseHeaders(headers) {\n const output = {};\n for (const key of headers.keys()) {\n output[key] = headers.get(key);\n }\n return output;\n}\nexport function mergeHeaders(...headerPayloads) {\n if (headerPayloads.length === 0)\n return {};\n const headerKeys = {};\n return headerPayloads.reduce((output, headers) => {\n Object.keys(headers).forEach(header => {\n const lowerHeader = header.toLowerCase();\n if (headerKeys.hasOwnProperty(lowerHeader)) {\n output[headerKeys[lowerHeader]] = headers[header];\n }\n else {\n headerKeys[lowerHeader] = header;\n output[header] = headers[header];\n }\n });\n return output;\n }, {});\n}\n","/**\n * Escape all magic characters in a glob pattern.\n *\n * If the {@link windowsPathsNoEscape | GlobOptions.windowsPathsNoEscape}\n * option is used, then characters are escaped by wrapping in `[]`, because\n * a magic character wrapped in a character class can only be satisfied by\n * that exact character. In this mode, `\\` is _not_ escaped, because it is\n * not interpreted as a magic character, but instead as a path separator.\n */\nexport const escape = (s, { windowsPathsNoEscape = false, } = {}) => {\n // don't need to escape +@! because we escape the parens\n // that make those magic, and escaping ! as [!] isn't valid,\n // because [!]] is a valid glob class meaning not ']'.\n return windowsPathsNoEscape\n ? s.replace(/[?*()[\\]]/g, '[$&]')\n : s.replace(/[?*()[\\]\\\\]/g, '\\\\$&');\n};\n//# sourceMappingURL=escape.js.map","/**\n * Un-escape a string that has been escaped with {@link escape}.\n *\n * If the {@link windowsPathsNoEscape} option is used, then square-brace\n * escapes are removed, but not backslash escapes. For example, it will turn\n * the string `'[*]'` into `*`, but it will not turn `'\\\\*'` into `'*'`,\n * becuase `\\` is a path separator in `windowsPathsNoEscape` mode.\n *\n * When `windowsPathsNoEscape` is not set, then both brace escapes and\n * backslash escapes are removed.\n *\n * Slashes (and backslashes in `windowsPathsNoEscape` mode) cannot be escaped\n * or unescaped.\n */\nexport const unescape = (s, { windowsPathsNoEscape = false, } = {}) => {\n return windowsPathsNoEscape\n ? s.replace(/\\[([^\\/\\\\])\\]/g, '$1')\n : s.replace(/((?!\\\\).|^)\\[([^\\/\\\\])\\]/g, '$1$2').replace(/\\\\([^\\/])/g, '$1');\n};\n//# sourceMappingURL=unescape.js.map","import path from \"path-posix\";\nimport { XMLParser } from \"fast-xml-parser\";\nimport nestedProp from \"nested-property\";\nimport { encodePath, normalisePath } from \"./path.js\";\nvar PropertyType;\n(function (PropertyType) {\n PropertyType[\"Array\"] = \"array\";\n PropertyType[\"Object\"] = \"object\";\n PropertyType[\"Original\"] = \"original\";\n})(PropertyType || (PropertyType = {}));\nfunction getParser() {\n return new XMLParser({\n removeNSPrefix: true,\n numberParseOptions: {\n hex: true,\n leadingZeros: false\n }\n // We don't use the processors here as decoding is done manually\n // later on - decoding early would break some path checks.\n });\n}\nfunction getPropertyOfType(obj, prop, type = PropertyType.Original) {\n const val = nestedProp.get(obj, prop);\n if (type === \"array\" && Array.isArray(val) === false) {\n return [val];\n }\n else if (type === \"object\" && Array.isArray(val)) {\n return val[0];\n }\n return val;\n}\nfunction normaliseResponse(response) {\n const output = Object.assign({}, response);\n // Only either status OR propstat is allowed\n if (output.status) {\n nestedProp.set(output, \"status\", getPropertyOfType(output, \"status\", PropertyType.Object));\n }\n else {\n nestedProp.set(output, \"propstat\", getPropertyOfType(output, \"propstat\", PropertyType.Object));\n nestedProp.set(output, \"propstat.prop\", getPropertyOfType(output, \"propstat.prop\", PropertyType.Object));\n }\n return output;\n}\nfunction normaliseResult(result) {\n const { multistatus } = result;\n if (multistatus === \"\") {\n return {\n multistatus: {\n response: []\n }\n };\n }\n if (!multistatus) {\n throw new Error(\"Invalid response: No root multistatus found\");\n }\n const output = {\n multistatus: Array.isArray(multistatus) ? multistatus[0] : multistatus\n };\n nestedProp.set(output, \"multistatus.response\", getPropertyOfType(output, \"multistatus.response\", PropertyType.Array));\n nestedProp.set(output, \"multistatus.response\", nestedProp.get(output, \"multistatus.response\").map(response => normaliseResponse(response)));\n return output;\n}\n/**\n * Parse an XML response from a WebDAV service,\n * converting it to an internal DAV result\n * @param xml The raw XML string\n * @returns A parsed and processed DAV result\n */\nexport function parseXML(xml) {\n return new Promise(resolve => {\n const result = getParser().parse(xml);\n resolve(normaliseResult(result));\n });\n}\n/**\n * Get a file stat result from given DAV properties\n * @param props DAV properties\n * @param filename The filename for the file stat\n * @param isDetailed Whether or not the raw props of the resource should be returned\n * @returns A file stat result\n */\nexport function prepareFileFromProps(props, filename, isDetailed = false) {\n // Last modified time, raw size, item type and mime\n const { getlastmodified: lastMod = null, getcontentlength: rawSize = \"0\", resourcetype: resourceType = null, getcontenttype: mimeType = null, getetag: etag = null } = props;\n const type = resourceType &&\n typeof resourceType === \"object\" &&\n typeof resourceType.collection !== \"undefined\"\n ? \"directory\"\n : \"file\";\n const stat = {\n filename,\n basename: path.basename(filename),\n lastmod: lastMod,\n size: parseInt(rawSize, 10),\n type,\n etag: typeof etag === \"string\" ? etag.replace(/\"/g, \"\") : null\n };\n if (type === \"file\") {\n stat.mime = mimeType && typeof mimeType === \"string\" ? mimeType.split(\";\")[0] : \"\";\n }\n if (isDetailed) {\n stat.props = props;\n }\n return stat;\n}\n/**\n * Parse a DAV result for file stats\n * @param result The resulting DAV response\n * @param filename The filename that was stat'd\n * @param isDetailed Whether or not the raw props of\n * the resource should be returned\n * @returns A file stat result\n */\nexport function parseStat(result, filename, isDetailed = false) {\n let responseItem = null;\n try {\n // should be a propstat response, if not the if below will throw an error\n if (result.multistatus.response[0].propstat) {\n responseItem = result.multistatus.response[0];\n }\n }\n catch (e) {\n /* ignore */\n }\n if (!responseItem) {\n throw new Error(\"Failed getting item stat: bad response\");\n }\n const { propstat: { prop: props, status: statusLine } } = responseItem;\n // As defined in https://tools.ietf.org/html/rfc2068#section-6.1\n const [_, statusCodeStr, statusText] = statusLine.split(\" \", 3);\n const statusCode = parseInt(statusCodeStr, 10);\n if (statusCode >= 400) {\n const err = new Error(`Invalid response: ${statusCode} ${statusText}`);\n err.status = statusCode;\n throw err;\n }\n const filePath = normalisePath(filename);\n return prepareFileFromProps(props, filePath, isDetailed);\n}\n/**\n * Parse a DAV result for a search request\n *\n * @param result The resulting DAV response\n * @param searchArbiter The collection path that was searched\n * @param isDetailed Whether or not the raw props of the resource should be returned\n */\nexport function parseSearch(result, searchArbiter, isDetailed) {\n const response = {\n truncated: false,\n results: []\n };\n response.truncated = result.multistatus.response.some(v => {\n return ((v.status || v.propstat?.status).split(\" \", 3)?.[1] === \"507\" &&\n v.href.replace(/\\/$/, \"\").endsWith(encodePath(searchArbiter).replace(/\\/$/, \"\")));\n });\n result.multistatus.response.forEach(result => {\n if (result.propstat === undefined) {\n return;\n }\n const filename = result.href.split(\"/\").map(decodeURIComponent).join(\"/\");\n response.results.push(prepareFileFromProps(result.propstat.prop, filename, isDetailed));\n });\n return response;\n}\n/**\n * Translate a disk quota indicator to a recognised\n * value (includes \"unlimited\" and \"unknown\")\n * @param value The quota indicator, eg. \"-3\"\n * @returns The value in bytes, or another indicator\n */\nexport function translateDiskSpace(value) {\n switch (value.toString()) {\n case \"-3\":\n return \"unlimited\";\n case \"-2\":\n /* falls-through */\n case \"-1\":\n // -1 is non-computed\n return \"unknown\";\n default:\n return parseInt(value, 10);\n }\n}\n","import { assertError, isError } from \"./error.js\";\nimport { parseArguments } from \"./tools.js\";\nexport class Layerr extends Error {\n constructor(errorOptionsOrMessage, messageText) {\n const args = [...arguments];\n const { options, shortMessage } = parseArguments(args);\n let message = shortMessage;\n if (options.cause) {\n message = `${message}: ${options.cause.message}`;\n }\n super(message);\n this.message = message;\n if (options.name && typeof options.name === \"string\") {\n this.name = options.name;\n }\n else {\n this.name = \"Layerr\";\n }\n if (options.cause) {\n Object.defineProperty(this, \"_cause\", { value: options.cause });\n }\n Object.defineProperty(this, \"_info\", { value: {} });\n if (options.info && typeof options.info === \"object\") {\n Object.assign(this._info, options.info);\n }\n if (Error.captureStackTrace) {\n const ctor = options.constructorOpt || this.constructor;\n Error.captureStackTrace(this, ctor);\n }\n }\n static cause(err) {\n assertError(err);\n if (!err._cause)\n return null;\n return isError(err._cause) ? err._cause : null;\n }\n static fullStack(err) {\n assertError(err);\n const cause = Layerr.cause(err);\n if (cause) {\n return `${err.stack}\\ncaused by: ${Layerr.fullStack(cause)}`;\n }\n return err.stack;\n }\n static info(err) {\n assertError(err);\n const output = {};\n const cause = Layerr.cause(err);\n if (cause) {\n Object.assign(output, Layerr.info(cause));\n }\n if (err._info) {\n Object.assign(output, err._info);\n }\n return output;\n }\n cause() {\n return Layerr.cause(this);\n }\n toString() {\n let output = this.name || this.constructor.name || this.constructor.prototype.name;\n if (this.message) {\n output = `${output}: ${this.message}`;\n }\n return output;\n }\n}\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport { parseXML } from 'webdav';\n// https://github.com/perry-mitchell/webdav-client/issues/339\nimport { processResponsePayload } from 'webdav/dist/node/response.js';\nimport { prepareFileFromProps } from 'webdav/dist/node/tools/dav.js';\nimport client from './DavClient.js';\nexport const DEFAULT_LIMIT = 20;\n/**\n * Retrieve the comments list\n *\n * @param {object} data destructuring object\n * @param {string} data.resourceType the resource type\n * @param {number} data.resourceId the resource ID\n * @param {object} [options] optional options for axios\n * @param {number} [options.offset] the pagination offset\n * @param {number} [options.limit] the pagination limit, defaults to 20\n * @param {Date} [options.datetime] optional date to query\n * @return {{data: object[]}} the comments list\n */\nexport const getComments = async function ({ resourceType, resourceId }, options) {\n const resourcePath = ['', resourceType, resourceId].join('/');\n const datetime = options.datetime ? `<oc:datetime>${options.datetime.toISOString()}</oc:datetime>` : '';\n const response = await client.customRequest(resourcePath, Object.assign({\n method: 'REPORT',\n data: `<?xml version=\"1.0\"?>\n\t\t\t<oc:filter-comments\n\t\t\t\txmlns:d=\"DAV:\"\n\t\t\t\txmlns:oc=\"http://owncloud.org/ns\"\n\t\t\t\txmlns:nc=\"http://nextcloud.org/ns\"\n\t\t\t\txmlns:ocs=\"http://open-collaboration-services.org/ns\">\n\t\t\t\t<oc:limit>${options.limit ?? DEFAULT_LIMIT}</oc:limit>\n\t\t\t\t<oc:offset>${options.offset || 0}</oc:offset>\n\t\t\t\t${datetime}\n\t\t\t</oc:filter-comments>`,\n }, options));\n const responseData = await response.text();\n const result = await parseXML(responseData);\n const stat = getDirectoryFiles(result, true);\n return processResponsePayload(response, stat, true);\n};\n// https://github.com/perry-mitchell/webdav-client/blob/8d9694613c978ce7404e26a401c39a41f125f87f/source/operations/directoryContents.ts\nconst getDirectoryFiles = function (result, isDetailed = false) {\n // Extract the response items (directory contents)\n const { multistatus: { response: responseItems }, } = result;\n // Map all items to a consistent output structure (results)\n return responseItems.map(item => {\n // Each item should contain a stat object\n const props = item.propstat.prop;\n return prepareFileFromProps(props, props.id.toString(), isDetailed);\n });\n};\n","import minimatch from \"minimatch\";\nimport { convertResponseHeaders } from \"./tools/headers.js\";\nexport function createErrorFromResponse(response, prefix = \"\") {\n const err = new Error(`${prefix}Invalid response: ${response.status} ${response.statusText}`);\n err.status = response.status;\n err.response = response;\n return err;\n}\nexport function handleResponseCode(context, response) {\n const { status } = response;\n if (status === 401 && context.digest)\n return response;\n if (status >= 400) {\n const err = createErrorFromResponse(response);\n throw err;\n }\n return response;\n}\nexport function processGlobFilter(files, glob) {\n return files.filter(file => minimatch(file.filename, glob, { matchBase: true }));\n}\n/**\n * Process a response payload (eg. from `customRequest`) and\n * prepare it for further processing. Exposed for custom\n * request handling.\n * @param response The response for a request\n * @param data The data returned\n * @param isDetailed Whether or not a detailed result is\n * requested\n * @returns The response data, or a detailed response object\n * if required\n */\nexport function processResponsePayload(response, data, isDetailed = false) {\n return isDetailed\n ? {\n data,\n headers: response.headers ? convertResponseHeaders(response.headers) : {},\n status: response.status,\n statusText: response.statusText\n }\n : data;\n}\n","import axios from '@nextcloud/axios';\nimport { getCurrentUser } from '@nextcloud/auth';\nimport { loadState } from '@nextcloud/initial-state';\nimport { generateOcsUrl } from '@nextcloud/router';\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n props: {\n resourceId: {\n type: Number,\n required: true,\n },\n resourceType: {\n type: String,\n default: 'files',\n },\n },\n data() {\n return {\n editorData: {\n actorDisplayName: getCurrentUser().displayName,\n actorId: getCurrentUser().uid,\n key: 'editor',\n },\n userData: {},\n };\n },\n methods: {\n /**\n * Autocomplete @mentions\n *\n * @param {string} search the query\n * @param {Function} callback the callback to process the results with\n */\n async autoComplete(search, callback) {\n const { data } = await axios.get(generateOcsUrl('core/autocomplete/get'), {\n params: {\n search,\n itemType: 'files',\n itemId: this.resourceId,\n sorter: 'commenters|share-recipients',\n limit: loadState('comments', 'maxAutoCompleteResults'),\n },\n });\n // Save user data so it can be used by the editor to replace mentions\n data.ocs.data.forEach(user => { this.userData[user.id] = user; });\n return callback(Object.values(this.userData));\n },\n /**\n * Make sure we have all mentions as Array of objects\n *\n * @param mentions the mentions list\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n genMentionsData(mentions) {\n Object.values(mentions)\n .flat()\n .forEach(mention => {\n this.userData[mention.mentionId] = {\n // TODO: support groups\n icon: 'icon-user',\n id: mention.mentionId,\n label: mention.mentionDisplayName,\n source: 'users',\n primary: getCurrentUser()?.uid === mention.mentionId,\n };\n });\n return this.userData;\n },\n },\n});\n","<!--\n - @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n - @author Richard Steinmetz <richard@steinmetz.cloud>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div v-observe-visibility=\"onVisibilityChange\"\n\t\tclass=\"comments\"\n\t\t:class=\"{ 'icon-loading': isFirstLoading }\">\n\t\t<!-- Editor -->\n\t\t<Comment v-bind=\"editorData\"\n\t\t\t:auto-complete=\"autoComplete\"\n\t\t\t:resource-type=\"resourceType\"\n\t\t\t:editor=\"true\"\n\t\t\t:user-data=\"userData\"\n\t\t\t:resource-id=\"resourceId\"\n\t\t\tclass=\"comments__writer\"\n\t\t\t@new=\"onNewComment\" />\n\n\t\t<template v-if=\"!isFirstLoading\">\n\t\t\t<NcEmptyContent v-if=\"!hasComments && done\"\n\t\t\t\tclass=\"comments__empty\"\n\t\t\t\t:name=\"t('comments', 'No comments yet, start the conversation!')\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<MessageReplyTextIcon />\n\t\t\t\t</template>\n\t\t\t</NcEmptyContent>\n\t\t\t<ul v-else>\n\t\t\t\t<!-- Comments -->\n\t\t\t\t<Comment v-for=\"comment in comments\"\n\t\t\t\t\t:key=\"comment.props.id\"\n\t\t\t\t\ttag=\"li\"\n\t\t\t\t\tv-bind=\"comment.props\"\n\t\t\t\t\t:auto-complete=\"autoComplete\"\n\t\t\t\t\t:resource-type=\"resourceType\"\n\t\t\t\t\t:message.sync=\"comment.props.message\"\n\t\t\t\t\t:resource-id=\"resourceId\"\n\t\t\t\t\t:user-data=\"genMentionsData(comment.props.mentions)\"\n\t\t\t\t\tclass=\"comments__list\"\n\t\t\t\t\t@delete=\"onDelete\" />\n\t\t\t</ul>\n\n\t\t\t<!-- Loading more message -->\n\t\t\t<div v-if=\"loading && !isFirstLoading\" class=\"comments__info icon-loading\" />\n\n\t\t\t<div v-else-if=\"hasComments && done\" class=\"comments__info\">\n\t\t\t\t{{ t('comments', 'No more messages') }}\n\t\t\t</div>\n\n\t\t\t<!-- Error message -->\n\t\t\t<template v-else-if=\"error\">\n\t\t\t\t<NcEmptyContent class=\"comments__error\" :name=\"error\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<AlertCircleOutlineIcon />\n\t\t\t\t\t</template>\n\t\t\t\t</NcEmptyContent>\n\t\t\t\t<NcButton class=\"comments__retry\" @click=\"getComments\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<RefreshIcon />\n\t\t\t\t\t</template>\n\t\t\t\t\t{{ t('comments', 'Retry') }}\n\t\t\t\t</NcButton>\n\t\t\t</template>\n\t\t</template>\n\t</div>\n</template>\n\n<script>\nimport { showError } from '@nextcloud/dialogs'\nimport { translate as t } from '@nextcloud/l10n'\nimport VTooltip from 'v-tooltip'\nimport Vue from 'vue'\nimport VueObserveVisibility from 'vue-observe-visibility'\n\nimport NcEmptyContent from '@nextcloud/vue/dist/Components/NcEmptyContent.js'\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\nimport RefreshIcon from 'vue-material-design-icons/Refresh.vue'\nimport MessageReplyTextIcon from 'vue-material-design-icons/MessageReplyText.vue'\nimport AlertCircleOutlineIcon from 'vue-material-design-icons/AlertCircleOutline.vue'\n\nimport Comment from '../components/Comment.vue'\nimport { getComments, DEFAULT_LIMIT } from '../services/GetComments.ts'\nimport cancelableRequest from '../utils/cancelableRequest.js'\nimport { markCommentsAsRead } from '../services/ReadComments.ts'\nimport CommentView from '../mixins/CommentView'\n\nVue.use(VTooltip)\nVue.use(VueObserveVisibility)\n\nexport default {\n\tname: 'Comments',\n\n\tcomponents: {\n\t\tComment,\n\t\tNcEmptyContent,\n\t\tNcButton,\n\t\tRefreshIcon,\n\t\tMessageReplyTextIcon,\n\t\tAlertCircleOutlineIcon,\n\t},\n\n\tmixins: [CommentView],\n\n\tdata() {\n\t\treturn {\n\t\t\terror: '',\n\t\t\tloading: false,\n\t\t\tdone: false,\n\n\t\t\tresourceId: null,\n\t\t\toffset: 0,\n\t\t\tcomments: [],\n\n\t\t\tcancelRequest: () => {},\n\n\t\t\tComment,\n\t\t\tuserData: {},\n\t\t}\n\t},\n\n\tcomputed: {\n\t\thasComments() {\n\t\t\treturn this.comments.length > 0\n\t\t},\n\t\tisFirstLoading() {\n\t\t\treturn this.loading && this.offset === 0\n\t\t},\n\t},\n\n\tmethods: {\n\t\tt,\n\n\t\tasync onVisibilityChange(isVisible) {\n\t\t\tif (isVisible) {\n\t\t\t\ttry {\n\t\t\t\t\tawait markCommentsAsRead(this.resourceType, this.resourceId, new Date())\n\t\t\t\t} catch (e) {\n\t\t\t\t\tshowError(e.message || t('comments', 'Failed to mark comments as read'))\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Update current resourceId and fetch new data\n\t\t *\n\t\t * @param {number} resourceId the current resourceId (fileId...)\n\t\t */\n\t\tasync update(resourceId) {\n\t\t\tthis.resourceId = resourceId\n\t\t\tthis.resetState()\n\t\t\tthis.getComments()\n\t\t},\n\n\t\t/**\n\t\t * Ran when the bottom of the tab is reached\n\t\t */\n\t\tonScrollBottomReached() {\n\t\t\t/**\n\t\t\t * Do not fetch more if we:\n\t\t\t * - are showing an error\n\t\t\t * - already fetched everything\n\t\t\t * - are currently loading\n\t\t\t */\n\t\t\tif (this.error || this.done || this.loading) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.getComments()\n\t\t},\n\n\t\t/**\n\t\t * Get the existing shares infos\n\t\t */\n\t\tasync getComments() {\n\t\t\t// Cancel any ongoing request\n\t\t\tthis.cancelRequest('cancel')\n\n\t\t\ttry {\n\t\t\t\tthis.loading = true\n\t\t\t\tthis.error = ''\n\n\t\t\t\t// Init cancellable request\n\t\t\t\tconst { request, abort } = cancelableRequest(getComments)\n\t\t\t\tthis.cancelRequest = abort\n\n\t\t\t\t// Fetch comments\n\t\t\t\tconst { data: comments } = await request({\n\t\t\t\t\tresourceType: this.resourceType,\n\t\t\t\t\tresourceId: this.resourceId,\n\t\t\t\t}, { offset: this.offset }) || { data: [] }\n\n\t\t\t\tthis.logger.debug(`Processed ${comments.length} comments`, { comments })\n\n\t\t\t\t// We received less than the requested amount,\n\t\t\t\t// we're done fetching comments\n\t\t\t\tif (comments.length < DEFAULT_LIMIT) {\n\t\t\t\t\tthis.done = true\n\t\t\t\t}\n\n\t\t\t\t// Insert results\n\t\t\t\tthis.comments.push(...comments)\n\n\t\t\t\t// Increase offset for next fetch\n\t\t\t\tthis.offset += DEFAULT_LIMIT\n\t\t\t} catch (error) {\n\t\t\t\tif (error.message === 'cancel') {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tthis.error = t('comments', 'Unable to load the comments list')\n\t\t\t\tconsole.error('Error loading the comments list', error)\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Add newly created comment to the list\n\t\t *\n\t\t * @param {object} comment the new comment\n\t\t */\n\t\tonNewComment(comment) {\n\t\t\tthis.comments.unshift(comment)\n\t\t},\n\n\t\t/**\n\t\t * Remove deleted comment from the list\n\t\t *\n\t\t * @param {number} id the deleted comment\n\t\t */\n\t\tonDelete(id) {\n\t\t\tconst index = this.comments.findIndex(comment => comment.props.id === id)\n\t\t\tif (index > -1) {\n\t\t\t\tthis.comments.splice(index, 1)\n\t\t\t} else {\n\t\t\t\tconsole.error('Could not find the deleted comment in the list', id)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Reset the current view to its default state\n\t\t */\n\t\tresetState() {\n\t\t\tthis.error = ''\n\t\t\tthis.loading = false\n\t\t\tthis.done = false\n\t\t\tthis.offset = 0\n\t\t\tthis.comments = []\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.comments {\n\tmin-height: 100%;\n\tdisplay: flex;\n\tflex-direction: column;\n\n\t&__empty,\n\t&__error {\n\t\tflex: 1 0;\n\t}\n\n\t&__retry {\n\t\tmargin: 0 auto;\n\t}\n\n\t&__info {\n\t\theight: 60px;\n\t\tcolor: var(--color-text-maxcontrast);\n\t\ttext-align: center;\n\t\tline-height: 60px;\n\t}\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comments.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comments.vue?vue&type=script&lang=js\"","/**\n * @copyright 2023 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport client from './DavClient.js';\n/**\n * Mark comments older than the date timestamp as read\n *\n * @param resourceType the resource type\n * @param resourceId the resource ID\n * @param date the date object\n */\nexport const markCommentsAsRead = (resourceType, resourceId, date) => {\n const resourcePath = ['', resourceType, resourceId].join('/');\n const readMarker = date.toUTCString();\n return client.customRequest(resourcePath, {\n method: 'PROPPATCH',\n data: `<?xml version=\"1.0\"?>\n\t\t\t<d:propertyupdate\n\t\t\t\txmlns:d=\"DAV:\"\n\t\t\t\txmlns:oc=\"http://owncloud.org/ns\">\n\t\t\t<d:set>\n\t\t\t\t<d:prop>\n\t\t\t\t\t<oc:readMarker>${readMarker}</oc:readMarker>\n\t\t\t\t</d:prop>\n\t\t\t</d:set>\n\t\t\t</d:propertyupdate>`,\n });\n};\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/**\n * Creates a cancelable axios 'request object'.\n *\n * @param {Function} request the axios promise request\n * @return {object}\n */\nconst cancelableRequest = function(request) {\n\tconst controller = new AbortController()\n\tconst signal = controller.signal\n\n\t/**\n\t * Execute the request\n\t *\n\t * @param {string} url the url to send the request to\n\t * @param {object} [options] optional config for the request\n\t */\n\tconst fetch = async function(url, options) {\n\t\tconst response = await request(\n\t\t\turl,\n\t\t\tObject.assign({ signal }, options)\n\t\t)\n\t\treturn response\n\t}\n\n\treturn {\n\t\trequest: fetch,\n\t\tabort: () => controller.abort(),\n\t}\n}\n\nexport default cancelableRequest\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comments.vue?vue&type=style&index=0&id=b2489a3c&prod&lang=scss&scoped=true\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comments.vue?vue&type=style&index=0&id=b2489a3c&prod&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Comments.vue?vue&type=template&id=b2489a3c&scoped=true\"\nimport script from \"./Comments.vue?vue&type=script&lang=js\"\nexport * from \"./Comments.vue?vue&type=script&lang=js\"\nimport style0 from \"./Comments.vue?vue&type=style&index=0&id=b2489a3c&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"b2489a3c\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{directives:[{name:\"observe-visibility\",rawName:\"v-observe-visibility\",value:(_vm.onVisibilityChange),expression:\"onVisibilityChange\"}],staticClass:\"comments\",class:{ 'icon-loading': _vm.isFirstLoading }},[_c('Comment',_vm._b({staticClass:\"comments__writer\",attrs:{\"auto-complete\":_vm.autoComplete,\"resource-type\":_vm.resourceType,\"editor\":true,\"user-data\":_vm.userData,\"resource-id\":_vm.resourceId},on:{\"new\":_vm.onNewComment}},'Comment',_vm.editorData,false)),_vm._v(\" \"),(!_vm.isFirstLoading)?[(!_vm.hasComments && _vm.done)?_c('NcEmptyContent',{staticClass:\"comments__empty\",attrs:{\"name\":_vm.t('comments', 'No comments yet, start the conversation!')},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('MessageReplyTextIcon')]},proxy:true}],null,false,1033639148)}):_c('ul',_vm._l((_vm.comments),function(comment){return _c('Comment',_vm._b({key:comment.props.id,staticClass:\"comments__list\",attrs:{\"tag\":\"li\",\"auto-complete\":_vm.autoComplete,\"resource-type\":_vm.resourceType,\"message\":comment.props.message,\"resource-id\":_vm.resourceId,\"user-data\":_vm.genMentionsData(comment.props.mentions)},on:{\"update:message\":function($event){return _vm.$set(comment.props, \"message\", $event)},\"delete\":_vm.onDelete}},'Comment',comment.props,false))}),1),_vm._v(\" \"),(_vm.loading && !_vm.isFirstLoading)?_c('div',{staticClass:\"comments__info icon-loading\"}):(_vm.hasComments && _vm.done)?_c('div',{staticClass:\"comments__info\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('comments', 'No more messages'))+\"\\n\\t\\t\")]):(_vm.error)?[_c('NcEmptyContent',{staticClass:\"comments__error\",attrs:{\"name\":_vm.error},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('AlertCircleOutlineIcon')]},proxy:true}],null,false,66050004)}),_vm._v(\" \"),_c('NcButton',{staticClass:\"comments__retry\",on:{\"click\":_vm.getComments},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('RefreshIcon')]},proxy:true}],null,false,3924573781)},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('comments', 'Retry'))+\"\\n\\t\\t\\t\")])]:_vm._e()]:_vm._e()],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { translate as t, translatePlural as n } from '@nextcloud/l10n'\nimport { getRequestToken } from '@nextcloud/auth'\nimport Vue from 'vue'\nimport CommentsApp from '../views/Comments.vue'\nimport logger from '../logger.js'\n\n// eslint-disable-next-line camelcase\n__webpack_nonce__ = btoa(getRequestToken())\n\n// Add translates functions\nVue.mixin({\n\tdata() {\n\t\treturn {\n\t\t\tlogger,\n\t\t}\n\t},\n\tmethods: {\n\t\tt,\n\t\tn,\n\t},\n})\n\nexport default class CommentInstance {\n\n\t/**\n\t * Initialize a new Comments instance for the desired type\n\t *\n\t * @param {string} resourceType the comments endpoint type\n\t * @param {object} options the vue options (propsData, parent, el...)\n\t */\n\tconstructor(resourceType = 'files', options = {}) {\n\t\t// Merge options and set `resourceType` property\n\t\toptions = {\n\t\t\t...options,\n\t\t\tpropsData: {\n\t\t\t\t...(options.propsData ?? {}),\n\t\t\t\tresourceType,\n\t\t\t},\n\t\t}\n\t\t// Init Comments component\n\t\tconst View = Vue.extend(CommentsApp)\n\t\treturn new View(options)\n\t}\n\n}\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport CommentsInstance from './services/CommentsInstance.js'\n\n// Init Comments\nif (window.OCA && !window.OCA.Comments) {\n\tObject.assign(window.OCA, { Comments: {} })\n}\n\n// Init Comments App view\nObject.assign(window.OCA.Comments, { View: CommentsInstance })\nconsole.debug('OCA.Comments.View initialized')\n","'use strict';\nmodule.exports = balanced;\nfunction balanced(a, b, str) {\n if (a instanceof RegExp) a = maybeMatch(a, str);\n if (b instanceof RegExp) b = maybeMatch(b, str);\n\n var r = range(a, b, str);\n\n return r && {\n start: r[0],\n end: r[1],\n pre: str.slice(0, r[0]),\n body: str.slice(r[0] + a.length, r[1]),\n post: str.slice(r[1] + b.length)\n };\n}\n\nfunction maybeMatch(reg, str) {\n var m = str.match(reg);\n return m ? m[0] : null;\n}\n\nbalanced.range = range;\nfunction range(a, b, str) {\n var begs, beg, left, right, result;\n var ai = str.indexOf(a);\n var bi = str.indexOf(b, ai + 1);\n var i = ai;\n\n if (ai >= 0 && bi > 0) {\n if(a===b) {\n return [ai, bi];\n }\n begs = [];\n left = str.length;\n\n while (i >= 0 && !result) {\n if (i == ai) {\n begs.push(i);\n ai = str.indexOf(a, i + 1);\n } else if (begs.length == 1) {\n result = [ begs.pop(), bi ];\n } else {\n beg = begs.pop();\n if (beg < left) {\n left = beg;\n right = bi;\n }\n\n bi = str.indexOf(b, i + 1);\n }\n\n i = ai < bi && ai >= 0 ? ai : bi;\n }\n\n if (begs.length) {\n result = [ left, right ];\n }\n }\n\n return result;\n}\n","var balanced = require('balanced-match');\n\nmodule.exports = expandTop;\n\nvar escSlash = '\\0SLASH'+Math.random()+'\\0';\nvar escOpen = '\\0OPEN'+Math.random()+'\\0';\nvar escClose = '\\0CLOSE'+Math.random()+'\\0';\nvar escComma = '\\0COMMA'+Math.random()+'\\0';\nvar escPeriod = '\\0PERIOD'+Math.random()+'\\0';\n\nfunction numeric(str) {\n return parseInt(str, 10) == str\n ? parseInt(str, 10)\n : str.charCodeAt(0);\n}\n\nfunction escapeBraces(str) {\n return str.split('\\\\\\\\').join(escSlash)\n .split('\\\\{').join(escOpen)\n .split('\\\\}').join(escClose)\n .split('\\\\,').join(escComma)\n .split('\\\\.').join(escPeriod);\n}\n\nfunction unescapeBraces(str) {\n return str.split(escSlash).join('\\\\')\n .split(escOpen).join('{')\n .split(escClose).join('}')\n .split(escComma).join(',')\n .split(escPeriod).join('.');\n}\n\n\n// Basically just str.split(\",\"), but handling cases\n// where we have nested braced sections, which should be\n// treated as individual members, like {a,{b,c},d}\nfunction parseCommaParts(str) {\n if (!str)\n return [''];\n\n var parts = [];\n var m = balanced('{', '}', str);\n\n if (!m)\n return str.split(',');\n\n var pre = m.pre;\n var body = m.body;\n var post = m.post;\n var p = pre.split(',');\n\n p[p.length-1] += '{' + body + '}';\n var postParts = parseCommaParts(post);\n if (post.length) {\n p[p.length-1] += postParts.shift();\n p.push.apply(p, postParts);\n }\n\n parts.push.apply(parts, p);\n\n return parts;\n}\n\nfunction expandTop(str) {\n if (!str)\n return [];\n\n // I don't know why Bash 4.3 does this, but it does.\n // Anything starting with {} will have the first two bytes preserved\n // but *only* at the top level, so {},a}b will not expand to anything,\n // but a{},b}c will be expanded to [a}c,abc].\n // One could argue that this is a bug in Bash, but since the goal of\n // this module is to match Bash's rules, we escape a leading {}\n if (str.substr(0, 2) === '{}') {\n str = '\\\\{\\\\}' + str.substr(2);\n }\n\n return expand(escapeBraces(str), true).map(unescapeBraces);\n}\n\nfunction embrace(str) {\n return '{' + str + '}';\n}\nfunction isPadded(el) {\n return /^-?0\\d/.test(el);\n}\n\nfunction lte(i, y) {\n return i <= y;\n}\nfunction gte(i, y) {\n return i >= y;\n}\n\nfunction expand(str, isTop) {\n var expansions = [];\n\n var m = balanced('{', '}', str);\n if (!m) return [str];\n\n // no need to expand pre, since it is guaranteed to be free of brace-sets\n var pre = m.pre;\n var post = m.post.length\n ? expand(m.post, false)\n : [''];\n\n if (/\\$$/.test(m.pre)) { \n for (var k = 0; k < post.length; k++) {\n var expansion = pre+ '{' + m.body + '}' + post[k];\n expansions.push(expansion);\n }\n } else {\n var isNumericSequence = /^-?\\d+\\.\\.-?\\d+(?:\\.\\.-?\\d+)?$/.test(m.body);\n var isAlphaSequence = /^[a-zA-Z]\\.\\.[a-zA-Z](?:\\.\\.-?\\d+)?$/.test(m.body);\n var isSequence = isNumericSequence || isAlphaSequence;\n var isOptions = m.body.indexOf(',') >= 0;\n if (!isSequence && !isOptions) {\n // {a},b}\n if (m.post.match(/,.*\\}/)) {\n str = m.pre + '{' + m.body + escClose + m.post;\n return expand(str);\n }\n return [str];\n }\n\n var n;\n if (isSequence) {\n n = m.body.split(/\\.\\./);\n } else {\n n = parseCommaParts(m.body);\n if (n.length === 1) {\n // x{{a,b}}y ==> x{a}y x{b}y\n n = expand(n[0], false).map(embrace);\n if (n.length === 1) {\n return post.map(function(p) {\n return m.pre + n[0] + p;\n });\n }\n }\n }\n\n // at this point, n is the parts, and we know it's not a comma set\n // with a single entry.\n var N;\n\n if (isSequence) {\n var x = numeric(n[0]);\n var y = numeric(n[1]);\n var width = Math.max(n[0].length, n[1].length)\n var incr = n.length == 3\n ? Math.abs(numeric(n[2]))\n : 1;\n var test = lte;\n var reverse = y < x;\n if (reverse) {\n incr *= -1;\n test = gte;\n }\n var pad = n.some(isPadded);\n\n N = [];\n\n for (var i = x; test(i, y); i += incr) {\n var c;\n if (isAlphaSequence) {\n c = String.fromCharCode(i);\n if (c === '\\\\')\n c = '';\n } else {\n c = String(i);\n if (pad) {\n var need = width - c.length;\n if (need > 0) {\n var z = new Array(need + 1).join('0');\n if (i < 0)\n c = '-' + z + c.slice(1);\n else\n c = z + c;\n }\n }\n }\n N.push(c);\n }\n } else {\n N = [];\n\n for (var j = 0; j < n.length; j++) {\n N.push.apply(N, expand(n[j], false));\n }\n }\n\n for (var j = 0; j < N.length; j++) {\n for (var k = 0; k < post.length; k++) {\n var expansion = pre + N[j] + post[k];\n if (!isTop || isSequence || expansion)\n expansions.push(expansion);\n }\n }\n }\n\n return expansions;\n}\n\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.comment[data-v-a54c4126]{display:flex;gap:8px;padding:5px 10px}.comment__side[data-v-a54c4126]{display:flex;align-items:flex-start;padding-top:6px}.comment__body[data-v-a54c4126]{display:flex;flex-grow:1;flex-direction:column}.comment__header[data-v-a54c4126]{display:flex;align-items:center;min-height:44px}.comment__actions[data-v-a54c4126]{margin-left:10px !important}.comment__author[data-v-a54c4126]{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:var(--color-text-maxcontrast)}.comment_loading[data-v-a54c4126],.comment__timestamp[data-v-a54c4126]{margin-left:auto;text-align:right;white-space:nowrap;color:var(--color-text-maxcontrast)}.comment__editor-group[data-v-a54c4126]{position:relative}.comment__editor-description[data-v-a54c4126]{color:var(--color-text-maxcontrast);padding-block:var(--default-grid-baseline)}.comment__submit[data-v-a54c4126]{position:absolute !important;bottom:0;right:0}.comment__message[data-v-a54c4126]{white-space:pre-wrap;word-break:break-word;max-height:70px;overflow:hidden;margin-top:-6px}.comment__message--expanded[data-v-a54c4126]{max-height:none;overflow:visible}.rich-contenteditable__input[data-v-a54c4126]{min-height:44px;margin:0;padding:10px}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/comments/src/components/Comment.vue\"],\"names\":[],\"mappings\":\"AAKA,0BACC,YAAA,CACA,OAAA,CACA,gBAAA,CAEA,gCACC,YAAA,CACA,sBAAA,CACA,eAAA,CAGD,gCACC,YAAA,CACA,WAAA,CACA,qBAAA,CAGD,kCACC,YAAA,CACA,kBAAA,CACA,eAAA,CAGD,mCACC,2BAAA,CAGD,kCACC,eAAA,CACA,kBAAA,CACA,sBAAA,CACA,mCAAA,CAGD,uEAEC,gBAAA,CACA,gBAAA,CACA,kBAAA,CACA,mCAAA,CAGD,wCACC,iBAAA,CAGD,8CACC,mCAAA,CACA,0CAAA,CAGD,kCACC,4BAAA,CACA,QAAA,CACA,OAAA,CAGD,mCACC,oBAAA,CACA,qBAAA,CACA,eAAA,CACA,eAAA,CACA,eAAA,CACA,6CACC,eAAA,CACA,gBAAA,CAKH,8CACC,eAAA,CACA,QAAA,CACA,YA3EiB\",\"sourcesContent\":[\"\\n@use \\\"sass:math\\\";\\n\\n$comment-padding: 10px;\\n\\n.comment {\\n\\tdisplay: flex;\\n\\tgap: 8px;\\n\\tpadding: 5px $comment-padding;\\n\\n\\t&__side {\\n\\t\\tdisplay: flex;\\n\\t\\talign-items: flex-start;\\n\\t\\tpadding-top: 6px;\\n\\t}\\n\\n\\t&__body {\\n\\t\\tdisplay: flex;\\n\\t\\tflex-grow: 1;\\n\\t\\tflex-direction: column;\\n\\t}\\n\\n\\t&__header {\\n\\t\\tdisplay: flex;\\n\\t\\talign-items: center;\\n\\t\\tmin-height: 44px;\\n\\t}\\n\\n\\t&__actions {\\n\\t\\tmargin-left: $comment-padding !important;\\n\\t}\\n\\n\\t&__author {\\n\\t\\toverflow: hidden;\\n\\t\\twhite-space: nowrap;\\n\\t\\ttext-overflow: ellipsis;\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t}\\n\\n\\t&_loading,\\n\\t&__timestamp {\\n\\t\\tmargin-left: auto;\\n\\t\\ttext-align: right;\\n\\t\\twhite-space: nowrap;\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t}\\n\\n\\t&__editor-group {\\n\\t\\tposition: relative;\\n\\t}\\n\\n\\t&__editor-description {\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\tpadding-block: var(--default-grid-baseline);\\n\\t}\\n\\n\\t&__submit {\\n\\t\\tposition: absolute !important;\\n\\t\\tbottom: 0;\\n\\t\\tright: 0;\\n\\t}\\n\\n\\t&__message {\\n\\t\\twhite-space: pre-wrap;\\n\\t\\tword-break: break-word;\\n\\t\\tmax-height: 70px;\\n\\t\\toverflow: hidden;\\n\\t\\tmargin-top: -6px;\\n\\t\\t&--expanded {\\n\\t\\t\\tmax-height: none;\\n\\t\\t\\toverflow: visible;\\n\\t\\t}\\n\\t}\\n}\\n\\n.rich-contenteditable__input {\\n\\tmin-height: 44px;\\n\\tmargin: 0;\\n\\tpadding: $comment-padding;\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.comments[data-v-b2489a3c]{min-height:100%;display:flex;flex-direction:column}.comments__empty[data-v-b2489a3c],.comments__error[data-v-b2489a3c]{flex:1 0}.comments__retry[data-v-b2489a3c]{margin:0 auto}.comments__info[data-v-b2489a3c]{height:60px;color:var(--color-text-maxcontrast);text-align:center;line-height:60px}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/comments/src/views/Comments.vue\"],\"names\":[],\"mappings\":\"AACA,2BACC,eAAA,CACA,YAAA,CACA,qBAAA,CAEA,oEAEC,QAAA,CAGD,kCACC,aAAA,CAGD,iCACC,WAAA,CACA,mCAAA,CACA,iBAAA,CACA,gBAAA\",\"sourcesContent\":[\"\\n.comments {\\n\\tmin-height: 100%;\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\n\\t&__empty,\\n\\t&__error {\\n\\t\\tflex: 1 0;\\n\\t}\\n\\n\\t&__retry {\\n\\t\\tmargin: 0 auto;\\n\\t}\\n\\n\\t&__info {\\n\\t\\theight: 60px;\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\ttext-align: center;\\n\\t\\tline-height: 60px;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","'use strict';\n\nconst validator = require('./validator');\nconst XMLParser = require('./xmlparser/XMLParser');\nconst XMLBuilder = require('./xmlbuilder/json2xml');\n\nmodule.exports = {\n XMLParser: XMLParser,\n XMLValidator: validator,\n XMLBuilder: XMLBuilder\n}","/**\n* @license nested-property https://github.com/cosmosio/nested-property\n*\n* The MIT License (MIT)\n*\n* Copyright (c) 2014-2020 Olivier Scherrer <pode.fr@gmail.com>\n*/\n\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _wrapNativeSuper(Class) { var _cache = typeof Map === \"function\" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== \"function\") { throw new TypeError(\"Super expression must either be null or a function\"); } if (typeof _cache !== \"undefined\") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }\n\nfunction _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _isNativeFunction(fn) { return Function.toString.call(fn).indexOf(\"[native code]\") !== -1; }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nvar ARRAY_WILDCARD = \"+\";\nvar PATH_DELIMITER = \".\";\n\nvar ObjectPrototypeMutationError = /*#__PURE__*/function (_Error) {\n _inherits(ObjectPrototypeMutationError, _Error);\n\n function ObjectPrototypeMutationError(params) {\n var _this;\n\n _classCallCheck(this, ObjectPrototypeMutationError);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(ObjectPrototypeMutationError).call(this, params));\n _this.name = \"ObjectPrototypeMutationError\";\n return _this;\n }\n\n return ObjectPrototypeMutationError;\n}(_wrapNativeSuper(Error));\n\nmodule.exports = {\n set: setNestedProperty,\n get: getNestedProperty,\n has: hasNestedProperty,\n hasOwn: function hasOwn(object, property, options) {\n return this.has(object, property, options || {\n own: true\n });\n },\n isIn: isInNestedProperty,\n ObjectPrototypeMutationError: ObjectPrototypeMutationError\n};\n/**\n * Get the property of an object nested in one or more objects or array\n * Given an object such as a.b.c.d = 5, getNestedProperty(a, \"b.c.d\") will return 5.\n * It also works through arrays. Given a nested array such as a[0].b = 5, getNestedProperty(a, \"0.b\") will return 5.\n * For accessing nested properties through all items in an array, you may use the array wildcard \"+\".\n * For instance, getNestedProperty([{a:1}, {a:2}, {a:3}], \"+.a\") will return [1, 2, 3]\n * @param {Object} object the object to get the property from\n * @param {String} property the path to the property as a string\n * @returns the object or the the property value if found\n */\n\nfunction getNestedProperty(object, property) {\n if (_typeof(object) != \"object\" || object === null) {\n return object;\n }\n\n if (typeof property == \"undefined\") {\n return object;\n }\n\n if (typeof property == \"number\") {\n return object[property];\n }\n\n try {\n return traverse(object, property, function _getNestedProperty(currentObject, currentProperty) {\n return currentObject[currentProperty];\n });\n } catch (err) {\n return object;\n }\n}\n/**\n * Tell if a nested object has a given property (or array a given index)\n * given an object such as a.b.c.d = 5, hasNestedProperty(a, \"b.c.d\") will return true.\n * It also returns true if the property is in the prototype chain.\n * @param {Object} object the object to get the property from\n * @param {String} property the path to the property as a string\n * @param {Object} options:\n * - own: set to reject properties from the prototype\n * @returns true if has (property in object), false otherwise\n */\n\n\nfunction hasNestedProperty(object, property) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (_typeof(object) != \"object\" || object === null) {\n return false;\n }\n\n if (typeof property == \"undefined\") {\n return false;\n }\n\n if (typeof property == \"number\") {\n return property in object;\n }\n\n try {\n var has = false;\n traverse(object, property, function _hasNestedProperty(currentObject, currentProperty, segments, index) {\n if (isLastSegment(segments, index)) {\n if (options.own) {\n has = currentObject.hasOwnProperty(currentProperty);\n } else {\n has = currentProperty in currentObject;\n }\n } else {\n return currentObject && currentObject[currentProperty];\n }\n });\n return has;\n } catch (err) {\n return false;\n }\n}\n/**\n * Set the property of an object nested in one or more objects\n * If the property doesn't exist, it gets created.\n * @param {Object} object\n * @param {String} property\n * @param value the value to set\n * @returns object if no assignment was made or the value if the assignment was made\n */\n\n\nfunction setNestedProperty(object, property, value) {\n if (_typeof(object) != \"object\" || object === null) {\n return object;\n }\n\n if (typeof property == \"undefined\") {\n return object;\n }\n\n if (typeof property == \"number\") {\n object[property] = value;\n return object[property];\n }\n\n try {\n return traverse(object, property, function _setNestedProperty(currentObject, currentProperty, segments, index) {\n if (currentObject === Reflect.getPrototypeOf({})) {\n throw new ObjectPrototypeMutationError(\"Attempting to mutate Object.prototype\");\n }\n\n if (!currentObject[currentProperty]) {\n var nextPropIsNumber = Number.isInteger(Number(segments[index + 1]));\n var nextPropIsArrayWildcard = segments[index + 1] === ARRAY_WILDCARD;\n\n if (nextPropIsNumber || nextPropIsArrayWildcard) {\n currentObject[currentProperty] = [];\n } else {\n currentObject[currentProperty] = {};\n }\n }\n\n if (isLastSegment(segments, index)) {\n currentObject[currentProperty] = value;\n }\n\n return currentObject[currentProperty];\n });\n } catch (err) {\n if (err instanceof ObjectPrototypeMutationError) {\n // rethrow\n throw err;\n } else {\n return object;\n }\n }\n}\n/**\n * Tell if an object is on the path to a nested property\n * If the object is on the path, and the path exists, it returns true, and false otherwise.\n * @param {Object} object to get the nested property from\n * @param {String} property name of the nested property\n * @param {Object} objectInPath the object to check\n * @param {Object} options:\n * - validPath: return false if the path is invalid, even if the object is in the path\n * @returns {boolean} true if the object is on the path\n */\n\n\nfunction isInNestedProperty(object, property, objectInPath) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n\n if (_typeof(object) != \"object\" || object === null) {\n return false;\n }\n\n if (typeof property == \"undefined\") {\n return false;\n }\n\n try {\n var isIn = false,\n pathExists = false;\n traverse(object, property, function _isInNestedProperty(currentObject, currentProperty, segments, index) {\n isIn = isIn || currentObject === objectInPath || !!currentObject && currentObject[currentProperty] === objectInPath;\n pathExists = isLastSegment(segments, index) && _typeof(currentObject) === \"object\" && currentProperty in currentObject;\n return currentObject && currentObject[currentProperty];\n });\n\n if (options.validPath) {\n return isIn && pathExists;\n } else {\n return isIn;\n }\n } catch (err) {\n return false;\n }\n}\n\nfunction traverse(object, path) {\n var callback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {};\n var segments = path.split(PATH_DELIMITER);\n var length = segments.length;\n\n var _loop = function _loop(idx) {\n var currentSegment = segments[idx];\n\n if (!object) {\n return {\n v: void 0\n };\n }\n\n if (currentSegment === ARRAY_WILDCARD) {\n if (Array.isArray(object)) {\n return {\n v: object.map(function (value, index) {\n var remainingSegments = segments.slice(idx + 1);\n\n if (remainingSegments.length > 0) {\n return traverse(value, remainingSegments.join(PATH_DELIMITER), callback);\n } else {\n return callback(object, index, segments, idx);\n }\n })\n };\n } else {\n var pathToHere = segments.slice(0, idx).join(PATH_DELIMITER);\n throw new Error(\"Object at wildcard (\".concat(pathToHere, \") is not an array\"));\n }\n } else {\n object = callback(object, currentSegment, segments, idx);\n }\n };\n\n for (var idx = 0; idx < length; idx++) {\n var _ret = _loop(idx);\n\n if (_typeof(_ret) === \"object\") return _ret.v;\n }\n\n return object;\n}\n\nfunction isLastSegment(segments, index) {\n return segments.length === index + 1;\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\nvar util = require('util');\nvar isString = function (x) {\n return typeof x === 'string';\n};\n\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n var res = [];\n for (var i = 0; i < parts.length; i++) {\n var p = parts[i];\n\n // ignore empty parts\n if (!p || p === '.')\n continue;\n\n if (p === '..') {\n if (res.length && res[res.length - 1] !== '..') {\n res.pop();\n } else if (allowAboveRoot) {\n res.push('..');\n }\n } else {\n res.push(p);\n }\n }\n\n return res;\n}\n\n// Split a filename into [root, dir, basename, ext], unix version\n// 'root' is just a slash, or nothing.\nvar splitPathRe =\n /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\nvar posix = {};\n\n\nfunction posixSplitPath(filename) {\n return splitPathRe.exec(filename).slice(1);\n}\n\n\n// path.resolve([from ...], to)\n// posix version\nposix.resolve = function() {\n var resolvedPath = '',\n resolvedAbsolute = false;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path = (i >= 0) ? arguments[i] : process.cwd();\n\n // Skip empty and invalid entries\n if (!isString(path)) {\n throw new TypeError('Arguments to path.resolve must be strings');\n } else if (!path) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charAt(0) === '/';\n }\n\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n\n // Normalize the path\n resolvedPath = normalizeArray(resolvedPath.split('/'),\n !resolvedAbsolute).join('/');\n\n return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n};\n\n// path.normalize(path)\n// posix version\nposix.normalize = function(path) {\n var isAbsolute = posix.isAbsolute(path),\n trailingSlash = path.substr(-1) === '/';\n\n // Normalize the path\n path = normalizeArray(path.split('/'), !isAbsolute).join('/');\n\n if (!path && !isAbsolute) {\n path = '.';\n }\n if (path && trailingSlash) {\n path += '/';\n }\n\n return (isAbsolute ? '/' : '') + path;\n};\n\n// posix version\nposix.isAbsolute = function(path) {\n return path.charAt(0) === '/';\n};\n\n// posix version\nposix.join = function() {\n var path = '';\n for (var i = 0; i < arguments.length; i++) {\n var segment = arguments[i];\n if (!isString(segment)) {\n throw new TypeError('Arguments to path.join must be strings');\n }\n if (segment) {\n if (!path) {\n path += segment;\n } else {\n path += '/' + segment;\n }\n }\n }\n return posix.normalize(path);\n};\n\n\n// path.relative(from, to)\n// posix version\nposix.relative = function(from, to) {\n from = posix.resolve(from).substr(1);\n to = posix.resolve(to).substr(1);\n\n function trim(arr) {\n var start = 0;\n for (; start < arr.length; start++) {\n if (arr[start] !== '') break;\n }\n\n var end = arr.length - 1;\n for (; end >= 0; end--) {\n if (arr[end] !== '') break;\n }\n\n if (start > end) return [];\n return arr.slice(start, end + 1);\n }\n\n var fromParts = trim(from.split('/'));\n var toParts = trim(to.split('/'));\n\n var length = Math.min(fromParts.length, toParts.length);\n var samePartsLength = length;\n for (var i = 0; i < length; i++) {\n if (fromParts[i] !== toParts[i]) {\n samePartsLength = i;\n break;\n }\n }\n\n var outputParts = [];\n for (var i = samePartsLength; i < fromParts.length; i++) {\n outputParts.push('..');\n }\n\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n return outputParts.join('/');\n};\n\n\nposix._makeLong = function(path) {\n return path;\n};\n\n\nposix.dirname = function(path) {\n var result = posixSplitPath(path),\n root = result[0],\n dir = result[1];\n\n if (!root && !dir) {\n // No dirname whatsoever\n return '.';\n }\n\n if (dir) {\n // It has a dirname, strip trailing slash\n dir = dir.substr(0, dir.length - 1);\n }\n\n return root + dir;\n};\n\n\nposix.basename = function(path, ext) {\n var f = posixSplitPath(path)[2];\n // TODO: make this comparison case-insensitive on windows?\n if (ext && f.substr(-1 * ext.length) === ext) {\n f = f.substr(0, f.length - ext.length);\n }\n return f;\n};\n\n\nposix.extname = function(path) {\n return posixSplitPath(path)[3];\n};\n\n\nposix.format = function(pathObject) {\n if (!util.isObject(pathObject)) {\n throw new TypeError(\n \"Parameter 'pathObject' must be an object, not \" + typeof pathObject\n );\n }\n\n var root = pathObject.root || '';\n\n if (!isString(root)) {\n throw new TypeError(\n \"'pathObject.root' must be a string or undefined, not \" +\n typeof pathObject.root\n );\n }\n\n var dir = pathObject.dir ? pathObject.dir + posix.sep : '';\n var base = pathObject.base || '';\n return dir + base;\n};\n\n\nposix.parse = function(pathString) {\n if (!isString(pathString)) {\n throw new TypeError(\n \"Parameter 'pathString' must be a string, not \" + typeof pathString\n );\n }\n var allParts = posixSplitPath(pathString);\n if (!allParts || allParts.length !== 4) {\n throw new TypeError(\"Invalid path '\" + pathString + \"'\");\n }\n allParts[1] = allParts[1] || '';\n allParts[2] = allParts[2] || '';\n allParts[3] = allParts[3] || '';\n\n return {\n root: allParts[0],\n dir: allParts[0] + allParts[1].slice(0, allParts[1].length - 1),\n base: allParts[2],\n ext: allParts[3],\n name: allParts[2].slice(0, allParts[2].length - allParts[3].length)\n };\n};\n\n\nposix.sep = '/';\nposix.delimiter = ':';\n\n module.exports = posix;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + chunkId + \"-\" + chunkId + \".js?v=\" + {\"1110\":\"2909496e7e35d6258214\",\"5528\":\"110b147bc8680f8c83f4\",\"8902\":\"bb2f9be8a039f8db7e58\"}[chunkId] + \"\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 7062;","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src;\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) {\n\t\t\tvar i = scripts.length - 1;\n\t\t\twhile (i > -1 && (!scriptUrl || !/^http(s?):/.test(scriptUrl))) scriptUrl = scripts[i--].src;\n\t\t}\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t7062: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\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__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [4208], () => (__webpack_require__(59379)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","inProgress","dataWebpackPrefix","_typeof","obj","Symbol","iterator","constructor","prototype","_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","_toConsumableArray","arr","Array","isArray","arr2","_arrayWithoutHoles","iter","toString","call","from","_iterableToArray","TypeError","_nonIterableSpread","deepEqual","val1","val2","VisibilityState","el","options","vnode","instance","Constructor","_classCallCheck","this","observer","frozen","createObserver","protoProps","value","_this","destroyObserver","callback","result","entry","once","throttle","_leading","throttleOptions","leading","delay","timeout","lastState","currentArgs","arguments","undefined","throttled","state","_len","args","_key","apply","concat","clearTimeout","setTimeout","_clear","oldResult","IntersectionObserver","entries","intersectingEntry","find","e","isIntersecting","intersectionRatio","threshold","intersection","context","$nextTick","observe","disconnect","get","bind","_ref2","console","warn","_vue_visibilityState","unbind","ObserveVisibility","update","_ref3","oldValue","version","install","Vue","directive","GlobalVue","window","g","use","name","emits","title","type","String","fillColor","default","size","Number","_vm","_c","_self","_b","staticClass","attrs","on","$event","$emit","$attrs","_v","_s","_e","timestamp","required","format","computed","moment","unix","formatted","fromNow","getRootPath","generateRemoteUrl","decodeHtmlEntities","passes","parser","DOMParser","decoded","parseFromString","documentElement","textContent","client","createClient","setHeaders","token","requesttoken","onRequestTokenUpdate","getRequestToken","getLoggerBuilder","setApp","detectUser","build","id","message","resourceId","resourceType","data","deleted","editing","loading","methods","onEdit","onEditCancel","updateLocalMessage","onEditComment","async","commentId","commentPath","join","customRequest","assign","method","EditComment","logger","debug","error","showError","t","onDeleteWithUndo","timeOutDelete","onDelete","TOAST_UNDO_TIMEOUT","showUndo","deleteFile","DeleteComment","onNewComment","newComment","resourcePath","response","axios","post","actorDisplayName","getCurrentUser","displayName","actorId","uid","actorType","creationDateTime","Date","toUTCString","objectType","verb","parseInt","headers","split","pop","comment","stat","details","NewComment","localMessage","components","IconArrowRight","IconClose","IconDelete","IconEdit","Moment","NcActionButton","NcActions","NcActionSeparator","NcAvatar","NcButton","NcRichContenteditable","mixins","RichEditorMixin","CommentMixin","inheritAttrs","editor","Boolean","autoComplete","Function","tag","expanded","submitted","isOwnComment","renderedContent","isEmptyMessage","renderContent","trim","watch","beforeMount","onSubmit","$refs","$el","focus","onExpand","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","locals","directives","rawName","expression","class","scopedSlots","_u","fn","proxy","preventDefault","ref","userData","domProps","posixClasses","braceEscape","s","replace","rangesToString","ranges","parseClass","glob","position","pos","charAt","Error","negs","sawStart","uflag","escaping","negate","endPos","rangeStart","WHILE","c","cls","unip","u","neg","startsWith","push","test","slice","sranges","snegs","p","pattern","assertValidPattern","nocomment","Minimatch","match","starDotExtRE","starDotExtTest","ext","f","endsWith","starDotExtTestDot","starDotExtTestNocase","toLowerCase","starDotExtTestNocaseDot","starDotStarRE","starDotStarTest","includes","starDotStarTestDot","dotStarRE","dotStarTest","starRE","starTest","starTestDot","qmarksRE","qmarksTestNocase","$0","noext","qmarksTestNoExt","qmarksTestNocaseDot","qmarksTestNoExtDot","qmarksTestDot","qmarksTest","len","defaultPlatform","process","env","__MINIMATCH_TESTING_PLATFORM__","platform","sep","GLOBSTAR","plTypes","open","close","qmark","star","charSet","reduce","set","reSpecials","addPatternStartSet","filter","a","b","defaults","def","keys","orig","super","unescape","escape","makeRe","braceExpand","list","nobrace","mm","nonull","globMagic","regExpEscape","windowsPathsNoEscape","nonegate","empty","preserveMultipleSlashes","partial","globSet","globParts","nocase","isWindows","windowsNoMagicRoot","regexp","allowWindowsEscape","make","hasMagic","magicalBraces","part","_","parseNegate","Set","rawGlobParts","map","slashSplit","preprocess","__","isUNC","isDrive","ss","parse","indexOf","noglobstar","j","optimizationLevel","firstPhasePreProcess","secondPhasePreProcess","levelOneOptimize","adjascentGlobstarOptimize","parts","gs","splice","prev","levelTwoFileOptimize","didSomething","dd","gss","next","p2","other","splin","matched","partsMatch","emptyGSMatch","ai","bi","which","dot","negateOffset","matchOne","file","fileUNC","patternUNC","fd","pd","fi","pi","fl","pl","fr","pr","swallowee","hit","m","fastTest","re","patternListStack","negativeLists","stateChar","dotTravAllowed","dotFileAllowed","subPatternStart","clearStateChar","plEntry","start","reStart","reEnd","src","needUflag","consumed","magic","tail","$1","$2","addPatternStart","n","nl","nlBefore","nlFirst","nlAfter","nlLast","closeParensBefore","openParensBefore","cleanAfter","nocaseMagicOnly","toUpperCase","flags","_glob","_src","RegExp","er","twoStar","pp","forEach","ex","ff","filename","matchBase","flipNegate","convertResponseHeaders","output","PropertyType","getComments","_ref","_options$limit","datetime","toISOString","limit","offset","responseData","text","parseXML","isDetailed","status","statusText","processResponsePayload","getDirectoryFiles","multistatus","responseItems","item","propstat","prop","getlastmodified","lastMod","getcontentlength","rawSize","resourcetype","getcontenttype","mimeType","getetag","etag","collection","basename","lastmod","mime","prepareFileFromProps","defineComponent","editorData","search","generateOcsUrl","params","itemType","itemId","sorter","loadState","ocs","user","values","genMentionsData","mentions","flat","mention","_getCurrentUser","mentionId","icon","label","mentionDisplayName","source","primary","VTooltip","VueObserveVisibility","Comment","NcEmptyContent","RefreshIcon","MessageReplyTextIcon","AlertCircleOutlineIcon","CommentView","done","comments","cancelRequest","hasComments","isFirstLoading","onVisibilityChange","isVisible","markCommentsAsRead","date","readMarker","resetState","onScrollBottomReached","request","abort","controller","AbortController","signal","url","cancelableRequest","unshift","index","findIndex","_l","$set","__webpack_nonce__","btoa","mixin","OCA","Comments","View","_options$propsData","propsData","extend","CommentsApp","balanced","str","maybeMatch","r","range","end","pre","body","reg","begs","beg","left","right","module","exports","substr","expand","escSlash","escOpen","escClose","escComma","escPeriod","escapeBraces","unescapeBraces","Math","random","numeric","charCodeAt","parseCommaParts","postParts","shift","embrace","isPadded","lte","y","gte","isTop","expansions","k","expansion","N","isNumericSequence","isAlphaSequence","isSequence","isOptions","x","width","max","incr","abs","pad","some","fromCharCode","need","z","___CSS_LOADER_EXPORT___","validator","XMLParser","XMLBuilder","XMLValidator","_wrapNativeSuper","Class","_cache","Map","has","Wrapper","_construct","_getPrototypeOf","create","_setPrototypeOf","Parent","Reflect","construct","sham","Proxy","_isNativeReflectConstruct","o","setPrototypeOf","__proto__","getPrototypeOf","ObjectPrototypeMutationError","_Error","self","ReferenceError","_assertThisInitialized","_possibleConstructorReturn","subClass","superClass","_inherits","traverse","object","path","segments","_loop","idx","currentSegment","v","remainingSegments","pathToHere","_ret","isLastSegment","property","currentObject","currentProperty","nextPropIsNumber","isInteger","nextPropIsArrayWildcard","err","own","hasOwnProperty","hasOwn","isIn","objectInPath","pathExists","validPath","util","isString","normalizeArray","allowAboveRoot","res","splitPathRe","posix","posixSplitPath","exec","resolve","resolvedPath","resolvedAbsolute","cwd","normalize","isAbsolute","trailingSlash","segment","relative","to","fromParts","toParts","min","samePartsLength","outputParts","_makeLong","dirname","root","dir","extname","pathObject","isObject","base","pathString","allParts","delimiter","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","loaded","__webpack_modules__","O","chunkIds","priority","notFulfilled","Infinity","fulfilled","every","getter","__esModule","d","definition","chunkId","Promise","all","promises","globalThis","l","script","needAttach","scripts","document","getElementsByTagName","getAttribute","createElement","charset","nc","setAttribute","onScriptComplete","event","onerror","onload","doneFns","parentNode","removeChild","head","appendChild","toStringTag","nmd","paths","children","scriptUrl","importScripts","location","currentScript","baseURI","href","installedChunks","installedChunkData","promise","reject","errorType","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file
diff --git a/dist/comments-comments-tab.js b/dist/comments-comments-tab.js
index 8eba23536e5..15e4e209bb0 100644
--- a/dist/comments-comments-tab.js
+++ b/dist/comments-comments-tab.js
@@ -1,3 +1,3 @@
/*! For license information please see comments-comments-tab.js.LICENSE.txt */
-(()=>{var e,n,r,o={7041:(e,n,r)=>{"use strict";var o=r(21777),s=r(38613),i=r(51651),a=r(85471),c=r(96689),l=r(44719),u=r(68928);const p={"[:alnum:]":["\\p{L}\\p{Nl}\\p{Nd}",!0],"[:alpha:]":["\\p{L}\\p{Nl}",!0],"[:ascii:]":["\\x00-\\x7f",!1],"[:blank:]":["\\p{Zs}\\t",!0],"[:cntrl:]":["\\p{Cc}",!0],"[:digit:]":["\\p{Nd}",!0],"[:graph:]":["\\p{Z}\\p{C}",!0,!0],"[:lower:]":["\\p{Ll}",!0],"[:print:]":["\\p{C}",!0],"[:punct:]":["\\p{P}",!0],"[:space:]":["\\p{Z}\\t\\r\\n\\v\\f",!0],"[:upper:]":["\\p{Lu}",!0],"[:word:]":["\\p{L}\\p{Nl}\\p{Nd}\\p{Pc}",!0],"[:xdigit:]":["A-Fa-f0-9",!1]},h=t=>t.replace(/[[\]\\-]/g,"\\$&"),f=t=>t.join(""),d=(t,e)=>{const n=e;if("["!==t.charAt(n))throw new Error("not in a brace expression");const r=[],o=[];let s=n+1,i=!1,a=!1,c=!1,l=!1,u=n,d="";t:for(;s<t.length;){const e=t.charAt(s);if("!"!==e&&"^"!==e||s!==n+1){if("]"===e&&i&&!c){u=s+1;break}if(i=!0,"\\"!==e||c){if("["===e&&!c)for(const[e,[i,c,l]]of Object.entries(p))if(t.startsWith(e,s)){if(d)return["$.",!1,t.length-n,!0];s+=e.length,l?o.push(i):r.push(i),a=a||c;continue t}c=!1,d?(e>d?r.push(h(d)+"-"+h(e)):e===d&&r.push(h(e)),d="",s++):t.startsWith("-]",s+1)?(r.push(h(e+"-")),s+=2):t.startsWith("-",s+1)?(d=e,s+=2):(r.push(h(e)),s++)}else c=!0,s++}else l=!0,s++}if(u<s)return["",!1,0,!1];if(!r.length&&!o.length)return["$.",!1,t.length-n,!0];if(0===o.length&&1===r.length&&/^\\?.$/.test(r[0])&&!l){return[(g=2===r[0].length?r[0].slice(-1):r[0],g.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")),!1,u-n,!1]}var g;const m="["+(l?"^":"")+f(r)+"]",b="["+(l?"":"^")+f(o)+"]";return[r.length&&o.length?"("+m+"|"+b+")":r.length?m:b,a,u-n,!0]};var g=r(65606),m=r(96763);const b=(t,e,n={})=>(U(e),!(!n.nocomment&&"#"===e.charAt(0))&&new Y(e,n).match(t)),v=/^\*+([^+@!?\*\[\(]*)$/,y=t=>e=>!e.startsWith(".")&&e.endsWith(t),w=t=>e=>e.endsWith(t),O=t=>(t=t.toLowerCase(),e=>!e.startsWith(".")&&e.toLowerCase().endsWith(t)),j=t=>(t=t.toLowerCase(),e=>e.toLowerCase().endsWith(t)),x=/^\*+\.\*+$/,A=t=>!t.startsWith(".")&&t.includes("."),S=t=>"."!==t&&".."!==t&&t.includes("."),E=/^\.\*+$/,C=t=>"."!==t&&".."!==t&&t.startsWith("."),P=/^\*+$/,M=t=>0!==t.length&&!t.startsWith("."),$=t=>0!==t.length&&"."!==t&&".."!==t,L=/^\?+([^+@!?\*\[\(]*)?$/,T=([t,e=""])=>{const n=W([t]);return e?(e=e.toLowerCase(),t=>n(t)&&t.toLowerCase().endsWith(e)):n},R=([t,e=""])=>{const n=_([t]);return e?(e=e.toLowerCase(),t=>n(t)&&t.toLowerCase().endsWith(e)):n},k=([t,e=""])=>{const n=_([t]);return e?t=>n(t)&&t.endsWith(e):n},N=([t,e=""])=>{const n=W([t]);return e?t=>n(t)&&t.endsWith(e):n},W=([t])=>{const e=t.length;return t=>t.length===e&&!t.startsWith(".")},_=([t])=>{const e=t.length;return t=>t.length===e&&"."!==t&&".."!==t},I="object"==typeof g&&g?"object"==typeof g.env&&g.env&&g.env.__MINIMATCH_TESTING_PLATFORM__||g.platform:"posix";b.sep="win32"===I?"\\":"/";const z=Symbol("globstar **");b.GLOBSTAR=z;const V={"!":{open:"(?:(?!(?:",close:"))[^/]*?)"},"?":{open:"(?:",close:")?"},"+":{open:"(?:",close:")+"},"*":{open:"(?:",close:")*"},"@":{open:"(?:",close:")"}},F="[^/]",H=F+"*?",B=t=>t.split("").reduce(((t,e)=>(t[e]=!0,t)),{}),D=B("().*{}+?[]^$\\!"),G=B("[.(");b.filter=(t,e={})=>n=>b(n,t,e);const Z=(t,e={})=>Object.assign({},t,e);b.defaults=t=>{if(!t||"object"!=typeof t||!Object.keys(t).length)return b;const e=b;return Object.assign(((n,r,o={})=>e(n,r,Z(t,o))),{Minimatch:class extends e.Minimatch{constructor(e,n={}){super(e,Z(t,n))}static defaults(n){return e.defaults(Z(t,n)).Minimatch}},unescape:(n,r={})=>e.unescape(n,Z(t,r)),escape:(n,r={})=>e.escape(n,Z(t,r)),filter:(n,r={})=>e.filter(n,Z(t,r)),defaults:n=>e.defaults(Z(t,n)),makeRe:(n,r={})=>e.makeRe(n,Z(t,r)),braceExpand:(n,r={})=>e.braceExpand(n,Z(t,r)),match:(n,r,o={})=>e.match(n,r,Z(t,o)),sep:e.sep,GLOBSTAR:z})};const q=(t,e={})=>(U(t),e.nobrace||!/\{(?:(?!\{).)*\}/.test(t)?[t]:u(t));b.braceExpand=q;const U=t=>{if("string"!=typeof t)throw new TypeError("invalid pattern");if(t.length>65536)throw new TypeError("pattern is too long")};b.makeRe=(t,e={})=>new Y(t,e).makeRe(),b.match=(t,e,n={})=>{const r=new Y(e,n);return t=t.filter((t=>r.match(t))),r.options.nonull&&!t.length&&t.push(e),t};const X=/[?*]|[+@!]\(.*?\)|\[|\]/,K=t=>t.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&");class Y{options;set;pattern;windowsPathsNoEscape;nonegate;negate;comment;empty;preserveMultipleSlashes;partial;globSet;globParts;nocase;isWindows;platform;windowsNoMagicRoot;regexp;constructor(t,e={}){U(t),e=e||{},this.options=e,this.pattern=t,this.platform=e.platform||I,this.isWindows="win32"===this.platform,this.windowsPathsNoEscape=!!e.windowsPathsNoEscape||!1===e.allowWindowsEscape,this.windowsPathsNoEscape&&(this.pattern=this.pattern.replace(/\\/g,"/")),this.preserveMultipleSlashes=!!e.preserveMultipleSlashes,this.regexp=null,this.negate=!1,this.nonegate=!!e.nonegate,this.comment=!1,this.empty=!1,this.partial=!!e.partial,this.nocase=!!this.options.nocase,this.windowsNoMagicRoot=void 0!==e.windowsNoMagicRoot?e.windowsNoMagicRoot:!(!this.isWindows||!this.nocase),this.globSet=[],this.globParts=[],this.set=[],this.make()}hasMagic(){if(this.options.magicalBraces&&this.set.length>1)return!0;for(const t of this.set)for(const e of t)if("string"!=typeof e)return!0;return!1}debug(...t){}make(){const t=this.pattern,e=this.options;if(!e.nocomment&&"#"===t.charAt(0))return void(this.comment=!0);if(!t)return void(this.empty=!0);this.parseNegate(),this.globSet=[...new Set(this.braceExpand())],e.debug&&(this.debug=(...t)=>m.error(...t)),this.debug(this.pattern,this.globSet);const n=this.globSet.map((t=>this.slashSplit(t)));this.globParts=this.preprocess(n),this.debug(this.pattern,this.globParts);let r=this.globParts.map(((t,e,n)=>{if(this.isWindows&&this.windowsNoMagicRoot){const e=!(""!==t[0]||""!==t[1]||"?"!==t[2]&&X.test(t[2])||X.test(t[3])),n=/^[a-z]:/i.test(t[0]);if(e)return[...t.slice(0,4),...t.slice(4).map((t=>this.parse(t)))];if(n)return[t[0],...t.slice(1).map((t=>this.parse(t)))]}return t.map((t=>this.parse(t)))}));if(this.debug(this.pattern,r),this.set=r.filter((t=>-1===t.indexOf(!1))),this.isWindows)for(let t=0;t<this.set.length;t++){const e=this.set[t];""===e[0]&&""===e[1]&&"?"===this.globParts[t][2]&&"string"==typeof e[3]&&/^[a-z]:$/i.test(e[3])&&(e[2]="?")}this.debug(this.pattern,this.set)}preprocess(t){if(this.options.noglobstar)for(let e=0;e<t.length;e++)for(let n=0;n<t[e].length;n++)"**"===t[e][n]&&(t[e][n]="*");const{optimizationLevel:e=1}=this.options;return e>=2?(t=this.firstPhasePreProcess(t),t=this.secondPhasePreProcess(t)):t=e>=1?this.levelOneOptimize(t):this.adjascentGlobstarOptimize(t),t}adjascentGlobstarOptimize(t){return t.map((t=>{let e=-1;for(;-1!==(e=t.indexOf("**",e+1));){let n=e;for(;"**"===t[n+1];)n++;n!==e&&t.splice(e,n-e)}return t}))}levelOneOptimize(t){return t.map((t=>0===(t=t.reduce(((t,e)=>{const n=t[t.length-1];return"**"===e&&"**"===n?t:".."===e&&n&&".."!==n&&"."!==n&&"**"!==n?(t.pop(),t):(t.push(e),t)}),[])).length?[""]:t))}levelTwoFileOptimize(t){Array.isArray(t)||(t=this.slashSplit(t));let e=!1;do{if(e=!1,!this.preserveMultipleSlashes){for(let n=1;n<t.length-1;n++){const r=t[n];1===n&&""===r&&""===t[0]||"."!==r&&""!==r||(e=!0,t.splice(n,1),n--)}"."!==t[0]||2!==t.length||"."!==t[1]&&""!==t[1]||(e=!0,t.pop())}let n=0;for(;-1!==(n=t.indexOf("..",n+1));){const r=t[n-1];r&&"."!==r&&".."!==r&&"**"!==r&&(e=!0,t.splice(n-1,2),n-=2)}}while(e);return 0===t.length?[""]:t}firstPhasePreProcess(t){let e=!1;do{e=!1;for(let n of t){let r=-1;for(;-1!==(r=n.indexOf("**",r+1));){let o=r;for(;"**"===n[o+1];)o++;o>r&&n.splice(r+1,o-r);let s=n[r+1];const i=n[r+2],a=n[r+3];if(".."!==s)continue;if(!i||"."===i||".."===i||!a||"."===a||".."===a)continue;e=!0,n.splice(r,1);const c=n.slice(0);c[r]="**",t.push(c),r--}if(!this.preserveMultipleSlashes){for(let t=1;t<n.length-1;t++){const r=n[t];1===t&&""===r&&""===n[0]||"."!==r&&""!==r||(e=!0,n.splice(t,1),t--)}"."!==n[0]||2!==n.length||"."!==n[1]&&""!==n[1]||(e=!0,n.pop())}let o=0;for(;-1!==(o=n.indexOf("..",o+1));){const t=n[o-1];if(t&&"."!==t&&".."!==t&&"**"!==t){e=!0;const t=1===o&&"**"===n[o+1]?["."]:[];n.splice(o-1,2,...t),0===n.length&&n.push(""),o-=2}}}}while(e);return t}secondPhasePreProcess(t){for(let e=0;e<t.length-1;e++)for(let n=e+1;n<t.length;n++){const r=this.partsMatch(t[e],t[n],!this.preserveMultipleSlashes);r&&(t[e]=r,t[n]=[])}return t.filter((t=>t.length))}partsMatch(t,e,n=!1){let r=0,o=0,s=[],i="";for(;r<t.length&&o<e.length;)if(t[r]===e[o])s.push("b"===i?e[o]:t[r]),r++,o++;else if(n&&"**"===t[r]&&e[o]===t[r+1])s.push(t[r]),r++;else if(n&&"**"===e[o]&&t[r]===e[o+1])s.push(e[o]),o++;else if("*"!==t[r]||!e[o]||!this.options.dot&&e[o].startsWith(".")||"**"===e[o]){if("*"!==e[o]||!t[r]||!this.options.dot&&t[r].startsWith(".")||"**"===t[r])return!1;if("a"===i)return!1;i="b",s.push(e[o]),r++,o++}else{if("b"===i)return!1;i="a",s.push(t[r]),r++,o++}return t.length===e.length&&s}parseNegate(){if(this.nonegate)return;const t=this.pattern;let e=!1,n=0;for(let r=0;r<t.length&&"!"===t.charAt(r);r++)e=!e,n++;n&&(this.pattern=t.slice(n)),this.negate=e}matchOne(t,e,n=!1){const r=this.options;if(this.isWindows){const n=""===t[0]&&""===t[1]&&"?"===t[2]&&"string"==typeof t[3]&&/^[a-z]:$/i.test(t[3]),r=""===e[0]&&""===e[1]&&"?"===e[2]&&"string"==typeof e[3]&&/^[a-z]:$/i.test(e[3]);if(n&&r){const n=t[3],r=e[3];n.toLowerCase()===r.toLowerCase()&&(t[3]=r)}else if(r&&"string"==typeof t[0]){const n=e[3],r=t[0];n.toLowerCase()===r.toLowerCase()&&(e[3]=r,e=e.slice(3))}else if(n&&"string"==typeof e[0]){const n=t[3];n.toLowerCase()===e[0].toLowerCase()&&(e[0]=n,t=t.slice(3))}}const{optimizationLevel:o=1}=this.options;o>=2&&(t=this.levelTwoFileOptimize(t)),this.debug("matchOne",this,{file:t,pattern:e}),this.debug("matchOne",t.length,e.length);for(var s=0,i=0,a=t.length,c=e.length;s<a&&i<c;s++,i++){this.debug("matchOne loop");var l=e[i],u=t[s];if(this.debug(e,l,u),!1===l)return!1;if(l===z){this.debug("GLOBSTAR",[e,l,u]);var p=s,h=i+1;if(h===c){for(this.debug("** at the end");s<a;s++)if("."===t[s]||".."===t[s]||!r.dot&&"."===t[s].charAt(0))return!1;return!0}for(;p<a;){var f=t[p];if(this.debug("\nglobstar while",t,p,e,h,f),this.matchOne(t.slice(p),e.slice(h),n))return this.debug("globstar found match!",p,a,f),!0;if("."===f||".."===f||!r.dot&&"."===f.charAt(0)){this.debug("dot detected!",t,p,e,h);break}this.debug("globstar swallow a segment, and continue"),p++}return!(!n||(this.debug("\n>>> no match, partial?",t,p,e,h),p!==a))}let o;if("string"==typeof l?(o=u===l,this.debug("string match",l,u,o)):(o=l.test(u),this.debug("pattern match",l,u,o)),!o)return!1}if(s===a&&i===c)return!0;if(s===a)return n;if(i===c)return s===a-1&&""===t[s];throw new Error("wtf?")}braceExpand(){return q(this.pattern,this.options)}parse(t){U(t);const e=this.options;if("**"===t)return z;if(""===t)return"";let n,r=null;(n=t.match(P))?r=e.dot?$:M:(n=t.match(v))?r=(e.nocase?e.dot?j:O:e.dot?w:y)(n[1]):(n=t.match(L))?r=(e.nocase?e.dot?R:T:e.dot?k:N)(n):(n=t.match(x))?r=e.dot?S:A:(n=t.match(E))&&(r=C);let o="",s=!1,i=!1;const a=[],c=[];let l,u=!1,p=!1,h="."===t.charAt(0),f=e.dot||h;const g=t=>"."===t.charAt(0)?"":e.dot?"(?!(?:^|\\/)\\.{1,2}(?:$|\\/))":"(?!\\.)",m=()=>{if(u){switch(u){case"*":o+=H,s=!0;break;case"?":o+=F,s=!0;break;default:o+="\\"+u}this.debug("clearStateChar %j %j",u,o),u=!1}};for(let n,r=0;r<t.length&&(n=t.charAt(r));r++)if(this.debug("%s\t%s %s %j",t,r,o,n),i){if("/"===n)return!1;D[n]&&(o+="\\"),o+=n,i=!1}else switch(n){case"/":return!1;case"\\":m(),i=!0;continue;case"?":case"*":case"+":case"@":case"!":this.debug("%s\t%s %s %j <-- stateChar",t,r,o,n),this.debug("call clearStateChar %j",u),m(),u=n,e.noext&&m();continue;case"(":{if(!u){o+="\\(";continue}const e={type:u,start:r-1,reStart:o.length,open:V[u].open,close:V[u].close};this.debug(this.pattern,"\t",e),a.push(e),o+=e.open,0===e.start&&"!"!==e.type&&(h=!0,o+=g(t.slice(r+1))),this.debug("plType %j %j",u,o),u=!1;continue}case")":{const t=a[a.length-1];if(!t){o+="\\)";continue}a.pop(),m(),s=!0,l=t,o+=l.close,"!"===l.type&&c.push(Object.assign(l,{reEnd:o.length}));continue}case"|":{const e=a[a.length-1];if(!e){o+="\\|";continue}m(),o+="|",0===e.start&&"!"!==e.type&&(h=!0,o+=g(t.slice(r+1)));continue}case"[":m();const[f,b,v,y]=d(t,r);v?(o+=f,p=p||b,r+=v-1,s=s||y):o+="\\[";continue;case"]":o+="\\"+n;continue;default:m(),o+=K(n)}for(l=a.pop();l;l=a.pop()){let t;t=o.slice(l.reStart+l.open.length),this.debug(this.pattern,"setting tail",o,l),t=t.replace(/((?:\\{2}){0,64})(\\?)\|/g,((t,e,n)=>(n||(n="\\"),e+e+n+"|"))),this.debug("tail=%j\n %s",t,t,l,o);const e="*"===l.type?H:"?"===l.type?F:"\\"+l.type;s=!0,o=o.slice(0,l.reStart)+e+"\\("+t}m(),i&&(o+="\\\\");const b=G[o.charAt(0)];for(let t=c.length-1;t>-1;t--){const e=c[t],n=o.slice(0,e.reStart),r=o.slice(e.reStart,e.reEnd-8);let s=o.slice(e.reEnd);const i=o.slice(e.reEnd-8,e.reEnd)+s,a=n.split(")").length,l=n.split("(").length-a;let u=s;for(let t=0;t<l;t++)u=u.replace(/\)[+*?]?/,"");s=u,o=n+r+s+(""===s?"(?:$|\\/)":"")+i}if(""!==o&&s&&(o="(?=.)"+o),b&&(o=(h?"":f?"(?!(?:^|\\/)\\.{1,2}(?:$|\\/))":"(?!\\.)")+o),!e.nocase||s||e.nocaseMagicOnly||(s=t.toUpperCase()!==t.toLowerCase()),!s)return o.replace(/\\(.)/g,"$1");const W=(e.nocase?"i":"")+(p?"u":"");try{const e=r?{_glob:t,_src:o,test:r}:{_glob:t,_src:o};return Object.assign(new RegExp("^"+o+"$",W),e)}catch(t){return this.debug("invalid regexp",t),new RegExp("$.")}}makeRe(){if(this.regexp||!1===this.regexp)return this.regexp;const t=this.set;if(!t.length)return this.regexp=!1,this.regexp;const e=this.options,n=e.noglobstar?H:e.dot?"(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?":"(?:(?!(?:\\/|^)\\.).)*?",r=e.nocase?"i":"";let o=t.map((t=>{const e=t.map((t=>"string"==typeof t?K(t):t===z?z:t._src));return e.forEach(((t,r)=>{const o=e[r+1],s=e[r-1];t===z&&s!==z&&(void 0===s?void 0!==o&&o!==z?e[r+1]="(?:\\/|"+n+"\\/)?"+o:e[r]=n:void 0===o?e[r-1]=s+"(?:\\/|"+n+")?":o!==z&&(e[r-1]=s+"(?:\\/|\\/"+n+"\\/)"+o,e[r+1]=z))})),e.filter((t=>t!==z)).join("/")})).join("|");o="^(?:"+o+")$",this.negate&&(o="^(?!"+o+").*$");try{this.regexp=new RegExp(o,r)}catch(t){this.regexp=!1}return this.regexp}slashSplit(t){return this.preserveMultipleSlashes?t.split("/"):this.isWindows&&/^\/\/[^\/]+/.test(t)?["",...t.split(/\/+/)]:t.split(/\/+/)}match(t,e=this.partial){if(this.debug("match",t,this.pattern),this.comment)return!1;if(this.empty)return""===t;if("/"===t&&e)return!0;const n=this.options;this.isWindows&&(t=t.split("\\").join("/"));const r=this.slashSplit(t);this.debug(this.pattern,"split",r);const o=this.set;this.debug(this.pattern,"set",o);let s=r[r.length-1];if(!s)for(let t=r.length-2;!s&&t>=0;t--)s=r[t];for(let t=0;t<o.length;t++){const i=o[t];let a=r;if(n.matchBase&&1===i.length&&(a=[s]),this.matchOne(a,i,e))return!!n.flipNegate||!this.negate}return!n.flipNegate&&this.negate}static defaults(t){return b.defaults(t).Minimatch}}function J(t){const e={};for(const n of t.keys())e[n]=t.get(n);return e}b.Minimatch=Y,b.escape=(t,{windowsPathsNoEscape:e=!1}={})=>e?t.replace(/[?*()[\]]/g,"[$&]"):t.replace(/[?*()[\]\\]/g,"\\$&"),b.unescape=(t,{windowsPathsNoEscape:e=!1}={})=>e?t.replace(/\[([^\/\\])\]/g,"$1"):t.replace(/((?!\\).|^)\[([^\/\\])\]/g,"$1$2").replace(/\\([^\/])/g,"$1");var Q,tt=r(12692);r(86454),r(26602),Error,function(t){t.Array="array",t.Object="object",t.Original="original"}(Q||(Q={}));var et=r(35550);const nt=function(t){let e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const{multistatus:{response:n}}=t;return n.map((t=>{const n=t.propstat.prop;return function(t,e,n=!1){const{getlastmodified:r=null,getcontentlength:o="0",resourcetype:s=null,getcontenttype:i=null,getetag:a=null}=t,c=s&&"object"==typeof s&&void 0!==s.collection?"directory":"file",l={filename:e,basename:tt.basename(e),lastmod:r,size:parseInt(o,10),type:c,etag:"string"==typeof a?a.replace(/"/g,""):null};return"file"===c&&(l.mime=i&&"string"==typeof i?i.split(";")[0]:""),n&&(l.props=t),l}(n,n.id.toString(),e)}))};let rt,ot;var st;if(r.nc=btoa((0,o.do)()),(0,s.C)("comments","activityEnabled",!1)&&void 0!==(null===(st=OCA)||void 0===st||null===(st=st.Activity)||void 0===st?void 0:st.registerSidebarAction))window.addEventListener("DOMContentLoaded",(function(){window.OCA.Activity.registerSidebarAction({mount:async(t,e)=>{let{context:n,fileInfo:o,reload:s}=e;if(!rt){const{default:t}=await Promise.all([r.e(4208),r.e(7462),r.e(2913)]).then(r.bind(r,72913));rt=a.Ay.extend(t)}ot=new rt({parent:n,propsData:{reloadCallback:s,resourceId:o.id}}),ot.$mount(t),c.A.info("Comments plugin mounted in Activity sidebar action",{fileInfo:o})},unmount:()=>{ot&&ot.$destroy()}}),window.OCA.Activity.registerSidebarEntries((async t=>{let{fileInfo:e,limit:n,offset:o}=t;const{data:s}=await async function(t,e){var n;let{resourceType:r,resourceId:o}=t;const s=["",r,o].join("/"),i=e.datetime?"<oc:datetime>".concat(e.datetime.toISOString(),"</oc:datetime>"):"",a=await et.A.customRequest(s,Object.assign({method:"REPORT",data:'<?xml version="1.0"?>\n\t\t\t<oc:filter-comments\n\t\t\t\txmlns:d="DAV:"\n\t\t\t\txmlns:oc="http://owncloud.org/ns"\n\t\t\t\txmlns:nc="http://nextcloud.org/ns"\n\t\t\t\txmlns:ocs="http://open-collaboration-services.org/ns">\n\t\t\t\t<oc:limit>'.concat(null!==(n=e.limit)&&void 0!==n?n:20,"</oc:limit>\n\t\t\t\t<oc:offset>").concat(e.offset||0,"</oc:offset>\n\t\t\t\t").concat(i,"\n\t\t\t</oc:filter-comments>")},e)),c=await a.text(),u=await(0,l.h4)(c);return function(t,e,n=!1){return n?{data:e,headers:t.headers?J(t.headers):{},status:t.status,statusText:t.statusText}:e}(a,nt(u,!0),!0)}({resourceType:"files",resourceId:e.id},{limit:n,offset:o});c.A.debug("Loaded comments",{fileInfo:e,comments:s});const{default:u}=await Promise.all([r.e(4208),r.e(7462),r.e(1241)]).then(r.bind(r,41241)),p=a.Ay.extend(u);return s.map((t=>({timestamp:(0,i.A)(t.props.creationDateTime).toDate().getTime(),mount(n,r){let{context:o,reload:s}=r;this._CommentsViewInstance=new p({parent:o,propsData:{comment:t,resourceId:e.id,reloadCallback:s}}),this._CommentsViewInstance.$mount(n)},unmount(){this._CommentsViewInstance.$destroy()}})))})),window.OCA.Activity.registerSidebarFilter((t=>"comments"!==t.type)),c.A.info("Comments plugin registered for Activity sidebar action")}));else{let e=null;const n=new OCA.Files.Sidebar.Tab({id:"comments",name:t("comments","Comments"),iconSvg:'<svg xmlns="http://www.w3.org/2000/svg" id="mdi-message-reply-text" viewBox="0 0 24 24"><path d="M18,8H6V6H18V8M18,11H6V9H18V11M18,14H6V12H18V14M22,4A2,2 0 0,0 20,2H4A2,2 0 0,0 2,4V16A2,2 0 0,0 4,18H18L22,22V4Z" /></svg>',async mount(t,n,r){e&&e.$destroy(),e=new OCA.Comments.View("files",{parent:r}),await e.update(n.id),e.$mount(t)},update(t){e.update(t.id)},destroy(){e.$destroy(),e=null},scrollBottomReached(){e.onScrollBottomReached()}});window.addEventListener("DOMContentLoaded",(function(){OCA.Files&&OCA.Files.Sidebar&&OCA.Files.Sidebar.registerTab(n)}))}},96689:(t,e,n)=>{"use strict";n.d(e,{A:()=>r});const r=(0,n(53529).YK)().setApp("comments").detectUser().build()},35550:(t,e,n)=>{"use strict";n.d(e,{A:()=>c});var r=n(44719),o=n(17003),s=n(21777);const i=(0,r.UU)((0,o.e)()),a=t=>{i.setHeaders({"X-Requested-With":"XMLHttpRequest",requesttoken:null!=t?t:""})};(0,s.zo)(a),a((0,s.do)());const c=i},17003:(t,e,n)=>{"use strict";n.d(e,{e:()=>o});var r=n(99498);const o=function(){return(0,r.dC)("dav/comments")}},8505:t=>{"use strict";function e(t,e,o){t instanceof RegExp&&(t=n(t,o)),e instanceof RegExp&&(e=n(e,o));var s=r(t,e,o);return s&&{start:s[0],end:s[1],pre:o.slice(0,s[0]),body:o.slice(s[0]+t.length,s[1]),post:o.slice(s[1]+e.length)}}function n(t,e){var n=e.match(t);return n?n[0]:null}function r(t,e,n){var r,o,s,i,a,c=n.indexOf(t),l=n.indexOf(e,c+1),u=c;if(c>=0&&l>0){if(t===e)return[c,l];for(r=[],s=n.length;u>=0&&!a;)u==c?(r.push(u),c=n.indexOf(t,u+1)):1==r.length?a=[r.pop(),l]:((o=r.pop())<s&&(s=o,i=l),l=n.indexOf(e,u+1)),u=c<l&&c>=0?c:l;r.length&&(a=[s,i])}return a}t.exports=e,e.range=r},68928:(t,e,n)=>{var r=n(8505);t.exports=function(t){return t?("{}"===t.substr(0,2)&&(t="\\{\\}"+t.substr(2)),m(function(t){return t.split("\\\\").join(o).split("\\{").join(s).split("\\}").join(i).split("\\,").join(a).split("\\.").join(c)}(t),!0).map(u)):[]};var o="\0SLASH"+Math.random()+"\0",s="\0OPEN"+Math.random()+"\0",i="\0CLOSE"+Math.random()+"\0",a="\0COMMA"+Math.random()+"\0",c="\0PERIOD"+Math.random()+"\0";function l(t){return parseInt(t,10)==t?parseInt(t,10):t.charCodeAt(0)}function u(t){return t.split(o).join("\\").split(s).join("{").split(i).join("}").split(a).join(",").split(c).join(".")}function p(t){if(!t)return[""];var e=[],n=r("{","}",t);if(!n)return t.split(",");var o=n.pre,s=n.body,i=n.post,a=o.split(",");a[a.length-1]+="{"+s+"}";var c=p(i);return i.length&&(a[a.length-1]+=c.shift(),a.push.apply(a,c)),e.push.apply(e,a),e}function h(t){return"{"+t+"}"}function f(t){return/^-?0\d/.test(t)}function d(t,e){return t<=e}function g(t,e){return t>=e}function m(t,e){var n=[],o=r("{","}",t);if(!o)return[t];var s=o.pre,a=o.post.length?m(o.post,!1):[""];if(/\$$/.test(o.pre))for(var c=0;c<a.length;c++){var u=s+"{"+o.body+"}"+a[c];n.push(u)}else{var b,v,y=/^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(o.body),w=/^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(o.body),O=y||w,j=o.body.indexOf(",")>=0;if(!O&&!j)return o.post.match(/,.*\}/)?m(t=o.pre+"{"+o.body+i+o.post):[t];if(O)b=o.body.split(/\.\./);else if(1===(b=p(o.body)).length&&1===(b=m(b[0],!1).map(h)).length)return a.map((function(t){return o.pre+b[0]+t}));if(O){var x=l(b[0]),A=l(b[1]),S=Math.max(b[0].length,b[1].length),E=3==b.length?Math.abs(l(b[2])):1,C=d;A<x&&(E*=-1,C=g);var P=b.some(f);v=[];for(var M=x;C(M,A);M+=E){var $;if(w)"\\"===($=String.fromCharCode(M))&&($="");else if($=String(M),P){var L=S-$.length;if(L>0){var T=new Array(L+1).join("0");$=M<0?"-"+T+$.slice(1):T+$}}v.push($)}}else{v=[];for(var R=0;R<b.length;R++)v.push.apply(v,m(b[R],!1))}for(R=0;R<v.length;R++)for(c=0;c<a.length;c++)u=s+v[R]+a[c],(!e||O||u)&&n.push(u)}return n}},86454:(t,e,n)=>{"use strict";const r=n(43918),o=n(32923),s=n(8904);t.exports={XMLParser:o,XMLValidator:r,XMLBuilder:s}},26602:t=>{"use strict";function e(t){return e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},e(t)}function n(t){var e="function"==typeof Map?new Map:void 0;return n=function(t){if(null===t||(n=t,-1===Function.toString.call(n).indexOf("[native code]")))return t;var n;if("function"!=typeof t)throw new TypeError("Super expression must either be null or a function");if(void 0!==e){if(e.has(t))return e.get(t);e.set(t,i)}function i(){return r(t,arguments,s(this).constructor)}return i.prototype=Object.create(t.prototype,{constructor:{value:i,enumerable:!1,writable:!0,configurable:!0}}),o(i,t)},n(t)}function r(t,e,n){return r=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(t){return!1}}()?Reflect.construct:function(t,e,n){var r=[null];r.push.apply(r,e);var s=new(Function.bind.apply(t,r));return n&&o(s,n.prototype),s},r.apply(null,arguments)}function o(t,e){return o=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t},o(t,e)}function s(t){return s=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)},s(t)}var i=function(t){function n(t){var r;return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,n),(r=function(t,n){return!n||"object"!==e(n)&&"function"!=typeof n?function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t):n}(this,s(n).call(this,t))).name="ObjectPrototypeMutationError",r}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&o(t,e)}(n,t),n}(n(Error));function a(t,n){for(var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){},o=n.split("."),s=o.length,i=function(e){var n=o[e];if(!t)return{v:void 0};if("+"===n){if(Array.isArray(t))return{v:t.map((function(n,s){var i=o.slice(e+1);return i.length>0?a(n,i.join("."),r):r(t,s,o,e)}))};var s=o.slice(0,e).join(".");throw new Error("Object at wildcard (".concat(s,") is not an array"))}t=r(t,n,o,e)},c=0;c<s;c++){var l=i(c);if("object"===e(l))return l.v}return t}function c(t,e){return t.length===e+1}t.exports={set:function(t,n,r){if("object"!=e(t)||null===t)return t;if(void 0===n)return t;if("number"==typeof n)return t[n]=r,t[n];try{return a(t,n,(function(t,e,n,o){if(t===Reflect.getPrototypeOf({}))throw new i("Attempting to mutate Object.prototype");if(!t[e]){var s=Number.isInteger(Number(n[o+1])),a="+"===n[o+1];t[e]=s||a?[]:{}}return c(n,o)&&(t[e]=r),t[e]}))}catch(e){if(e instanceof i)throw e;return t}},get:function(t,n){if("object"!=e(t)||null===t)return t;if(void 0===n)return t;if("number"==typeof n)return t[n];try{return a(t,n,(function(t,e){return t[e]}))}catch(e){return t}},has:function(t,n){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if("object"!=e(t)||null===t)return!1;if(void 0===n)return!1;if("number"==typeof n)return n in t;try{var o=!1;return a(t,n,(function(t,e,n,s){if(!c(n,s))return t&&t[e];o=r.own?t.hasOwnProperty(e):e in t})),o}catch(t){return!1}},hasOwn:function(t,e,n){return this.has(t,e,n||{own:!0})},isIn:function(t,n,r){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};if("object"!=e(t)||null===t)return!1;if(void 0===n)return!1;try{var s=!1,i=!1;return a(t,n,(function(t,n,o,a){return s=s||t===r||!!t&&t[n]===r,i=c(o,a)&&"object"===e(t)&&n in t,t&&t[n]})),o.validPath?s&&i:s}catch(t){return!1}},ObjectPrototypeMutationError:i}},12692:(t,e,n)=>{"use strict";var r=n(65606),o=n(40537),s=function(t){return"string"==typeof t};function i(t,e){for(var n=[],r=0;r<t.length;r++){var o=t[r];o&&"."!==o&&(".."===o?n.length&&".."!==n[n.length-1]?n.pop():e&&n.push(".."):n.push(o))}return n}var a=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/,c={};function l(t){return a.exec(t).slice(1)}c.resolve=function(){for(var t="",e=!1,n=arguments.length-1;n>=-1&&!e;n--){var o=n>=0?arguments[n]:r.cwd();if(!s(o))throw new TypeError("Arguments to path.resolve must be strings");o&&(t=o+"/"+t,e="/"===o.charAt(0))}return(e?"/":"")+(t=i(t.split("/"),!e).join("/"))||"."},c.normalize=function(t){var e=c.isAbsolute(t),n="/"===t.substr(-1);return(t=i(t.split("/"),!e).join("/"))||e||(t="."),t&&n&&(t+="/"),(e?"/":"")+t},c.isAbsolute=function(t){return"/"===t.charAt(0)},c.join=function(){for(var t="",e=0;e<arguments.length;e++){var n=arguments[e];if(!s(n))throw new TypeError("Arguments to path.join must be strings");n&&(t+=t?"/"+n:n)}return c.normalize(t)},c.relative=function(t,e){function n(t){for(var e=0;e<t.length&&""===t[e];e++);for(var n=t.length-1;n>=0&&""===t[n];n--);return e>n?[]:t.slice(e,n+1)}t=c.resolve(t).substr(1),e=c.resolve(e).substr(1);for(var r=n(t.split("/")),o=n(e.split("/")),s=Math.min(r.length,o.length),i=s,a=0;a<s;a++)if(r[a]!==o[a]){i=a;break}var l=[];for(a=i;a<r.length;a++)l.push("..");return(l=l.concat(o.slice(i))).join("/")},c._makeLong=function(t){return t},c.dirname=function(t){var e=l(t),n=e[0],r=e[1];return n||r?(r&&(r=r.substr(0,r.length-1)),n+r):"."},c.basename=function(t,e){var n=l(t)[2];return e&&n.substr(-1*e.length)===e&&(n=n.substr(0,n.length-e.length)),n},c.extname=function(t){return l(t)[3]},c.format=function(t){if(!o.isObject(t))throw new TypeError("Parameter 'pathObject' must be an object, not "+typeof t);var e=t.root||"";if(!s(e))throw new TypeError("'pathObject.root' must be a string or undefined, not "+typeof t.root);return(t.dir?t.dir+c.sep:"")+(t.base||"")},c.parse=function(t){if(!s(t))throw new TypeError("Parameter 'pathString' must be a string, not "+typeof t);var e=l(t);if(!e||4!==e.length)throw new TypeError("Invalid path '"+t+"'");return e[1]=e[1]||"",e[2]=e[2]||"",e[3]=e[3]||"",{root:e[0],dir:e[0]+e[1].slice(0,e[1].length-1),base:e[2],ext:e[3],name:e[2].slice(0,e[2].length-e[3].length)}},c.sep="/",c.delimiter=":",t.exports=c}},s={};function i(t){var e=s[t];if(void 0!==e)return e.exports;var n=s[t]={id:t,loaded:!1,exports:{}};return o[t].call(n.exports,n,n.exports,i),n.loaded=!0,n.exports}i.m=o,e=[],i.O=(t,n,r,o)=>{if(!n){var s=1/0;for(u=0;u<e.length;u++){n=e[u][0],r=e[u][1],o=e[u][2];for(var a=!0,c=0;c<n.length;c++)(!1&o||s>=o)&&Object.keys(i.O).every((t=>i.O[t](n[c])))?n.splice(c--,1):(a=!1,o<s&&(s=o));if(a){e.splice(u--,1);var l=r();void 0!==l&&(t=l)}}return t}o=o||0;for(var u=e.length;u>0&&e[u-1][2]>o;u--)e[u]=e[u-1];e[u]=[n,r,o]},i.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return i.d(e,{a:e}),e},i.d=(t,e)=>{for(var n in e)i.o(e,n)&&!i.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},i.f={},i.e=t=>Promise.all(Object.keys(i.f).reduce(((e,n)=>(i.f[n](t,e),e)),[])),i.u=t=>t+"-"+t+".js?v="+{1110:"2909496e7e35d6258214",1241:"a4187792299da984916c",2913:"1ccb2adaaea884424d3c",5528:"110b147bc8680f8c83f4",7462:"d38151a6cdda03d0d4da",8902:"bb2f9be8a039f8db7e58"}[t],i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),i.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n={},r="nextcloud:",i.l=(t,e,o,s)=>{if(n[t])n[t].push(e);else{var a,c;if(void 0!==o)for(var l=document.getElementsByTagName("script"),u=0;u<l.length;u++){var p=l[u];if(p.getAttribute("src")==t||p.getAttribute("data-webpack")==r+o){a=p;break}}a||(c=!0,(a=document.createElement("script")).charset="utf-8",a.timeout=120,i.nc&&a.setAttribute("nonce",i.nc),a.setAttribute("data-webpack",r+o),a.src=t),n[t]=[e];var h=(e,r)=>{a.onerror=a.onload=null,clearTimeout(f);var o=n[t];if(delete n[t],a.parentNode&&a.parentNode.removeChild(a),o&&o.forEach((t=>t(r))),e)return e(r)},f=setTimeout(h.bind(null,void 0,{type:"timeout",target:a}),12e4);a.onerror=h.bind(null,a.onerror),a.onload=h.bind(null,a.onload),c&&document.head.appendChild(a)}},i.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i.nmd=t=>(t.paths=[],t.children||(t.children=[]),t),i.j=2122,(()=>{var t;i.g.importScripts&&(t=i.g.location+"");var e=i.g.document;if(!t&&e&&(e.currentScript&&(t=e.currentScript.src),!t)){var n=e.getElementsByTagName("script");if(n.length)for(var r=n.length-1;r>-1&&(!t||!/^http(s?):/.test(t));)t=n[r--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),i.p=t})(),(()=>{i.b=document.baseURI||self.location.href;var t={2122:0};i.f.j=(e,n)=>{var r=i.o(t,e)?t[e]:void 0;if(0!==r)if(r)n.push(r[2]);else{var o=new Promise(((n,o)=>r=t[e]=[n,o]));n.push(r[2]=o);var s=i.p+i.u(e),a=new Error;i.l(s,(n=>{if(i.o(t,e)&&(0!==(r=t[e])&&(t[e]=void 0),r)){var o=n&&("load"===n.type?"missing":n.type),s=n&&n.target&&n.target.src;a.message="Loading chunk "+e+" failed.\n("+o+": "+s+")",a.name="ChunkLoadError",a.type=o,a.request=s,r[1](a)}}),"chunk-"+e,e)}},i.O.j=e=>0===t[e];var e=(e,n)=>{var r,o,s=n[0],a=n[1],c=n[2],l=0;if(s.some((e=>0!==t[e]))){for(r in a)i.o(a,r)&&(i.m[r]=a[r]);if(c)var u=c(i)}for(e&&e(n);l<s.length;l++)o=s[l],i.o(t,o)&&t[o]&&t[o][0](),t[o]=0;return i.O(u)},n=self.webpackChunknextcloud=self.webpackChunknextcloud||[];n.forEach(e.bind(null,0)),n.push=e.bind(null,n.push.bind(n))})(),i.nc=void 0;var a=i.O(void 0,[4208],(()=>i(7041)));a=i.O(a)})();
-//# sourceMappingURL=comments-comments-tab.js.map?v=2ea34fc834d653cf8b67 \ No newline at end of file
+(()=>{var e,n,r,o={7041:(e,n,r)=>{"use strict";var o=r(21777),s=r(38613),i=r(51651),a=r(85471),c=r(96689),l=r(44719),u=r(68928);const p={"[:alnum:]":["\\p{L}\\p{Nl}\\p{Nd}",!0],"[:alpha:]":["\\p{L}\\p{Nl}",!0],"[:ascii:]":["\\x00-\\x7f",!1],"[:blank:]":["\\p{Zs}\\t",!0],"[:cntrl:]":["\\p{Cc}",!0],"[:digit:]":["\\p{Nd}",!0],"[:graph:]":["\\p{Z}\\p{C}",!0,!0],"[:lower:]":["\\p{Ll}",!0],"[:print:]":["\\p{C}",!0],"[:punct:]":["\\p{P}",!0],"[:space:]":["\\p{Z}\\t\\r\\n\\v\\f",!0],"[:upper:]":["\\p{Lu}",!0],"[:word:]":["\\p{L}\\p{Nl}\\p{Nd}\\p{Pc}",!0],"[:xdigit:]":["A-Fa-f0-9",!1]},h=t=>t.replace(/[[\]\\-]/g,"\\$&"),f=t=>t.join(""),d=(t,e)=>{const n=e;if("["!==t.charAt(n))throw new Error("not in a brace expression");const r=[],o=[];let s=n+1,i=!1,a=!1,c=!1,l=!1,u=n,d="";t:for(;s<t.length;){const e=t.charAt(s);if("!"!==e&&"^"!==e||s!==n+1){if("]"===e&&i&&!c){u=s+1;break}if(i=!0,"\\"!==e||c){if("["===e&&!c)for(const[e,[i,c,l]]of Object.entries(p))if(t.startsWith(e,s)){if(d)return["$.",!1,t.length-n,!0];s+=e.length,l?o.push(i):r.push(i),a=a||c;continue t}c=!1,d?(e>d?r.push(h(d)+"-"+h(e)):e===d&&r.push(h(e)),d="",s++):t.startsWith("-]",s+1)?(r.push(h(e+"-")),s+=2):t.startsWith("-",s+1)?(d=e,s+=2):(r.push(h(e)),s++)}else c=!0,s++}else l=!0,s++}if(u<s)return["",!1,0,!1];if(!r.length&&!o.length)return["$.",!1,t.length-n,!0];if(0===o.length&&1===r.length&&/^\\?.$/.test(r[0])&&!l){return[(g=2===r[0].length?r[0].slice(-1):r[0],g.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")),!1,u-n,!1]}var g;const m="["+(l?"^":"")+f(r)+"]",b="["+(l?"":"^")+f(o)+"]";return[r.length&&o.length?"("+m+"|"+b+")":r.length?m:b,a,u-n,!0]};var g=r(65606),m=r(96763);const b=(t,e,n={})=>(U(e),!(!n.nocomment&&"#"===e.charAt(0))&&new Y(e,n).match(t)),v=/^\*+([^+@!?\*\[\(]*)$/,y=t=>e=>!e.startsWith(".")&&e.endsWith(t),w=t=>e=>e.endsWith(t),O=t=>(t=t.toLowerCase(),e=>!e.startsWith(".")&&e.toLowerCase().endsWith(t)),j=t=>(t=t.toLowerCase(),e=>e.toLowerCase().endsWith(t)),x=/^\*+\.\*+$/,A=t=>!t.startsWith(".")&&t.includes("."),S=t=>"."!==t&&".."!==t&&t.includes("."),E=/^\.\*+$/,C=t=>"."!==t&&".."!==t&&t.startsWith("."),P=/^\*+$/,M=t=>0!==t.length&&!t.startsWith("."),$=t=>0!==t.length&&"."!==t&&".."!==t,L=/^\?+([^+@!?\*\[\(]*)?$/,T=([t,e=""])=>{const n=W([t]);return e?(e=e.toLowerCase(),t=>n(t)&&t.toLowerCase().endsWith(e)):n},R=([t,e=""])=>{const n=_([t]);return e?(e=e.toLowerCase(),t=>n(t)&&t.toLowerCase().endsWith(e)):n},k=([t,e=""])=>{const n=_([t]);return e?t=>n(t)&&t.endsWith(e):n},N=([t,e=""])=>{const n=W([t]);return e?t=>n(t)&&t.endsWith(e):n},W=([t])=>{const e=t.length;return t=>t.length===e&&!t.startsWith(".")},_=([t])=>{const e=t.length;return t=>t.length===e&&"."!==t&&".."!==t},I="object"==typeof g&&g?"object"==typeof g.env&&g.env&&g.env.__MINIMATCH_TESTING_PLATFORM__||g.platform:"posix";b.sep="win32"===I?"\\":"/";const z=Symbol("globstar **");b.GLOBSTAR=z;const V={"!":{open:"(?:(?!(?:",close:"))[^/]*?)"},"?":{open:"(?:",close:")?"},"+":{open:"(?:",close:")+"},"*":{open:"(?:",close:")*"},"@":{open:"(?:",close:")"}},F="[^/]",H=F+"*?",B=t=>t.split("").reduce(((t,e)=>(t[e]=!0,t)),{}),D=B("().*{}+?[]^$\\!"),G=B("[.(");b.filter=(t,e={})=>n=>b(n,t,e);const Z=(t,e={})=>Object.assign({},t,e);b.defaults=t=>{if(!t||"object"!=typeof t||!Object.keys(t).length)return b;const e=b;return Object.assign(((n,r,o={})=>e(n,r,Z(t,o))),{Minimatch:class extends e.Minimatch{constructor(e,n={}){super(e,Z(t,n))}static defaults(n){return e.defaults(Z(t,n)).Minimatch}},unescape:(n,r={})=>e.unescape(n,Z(t,r)),escape:(n,r={})=>e.escape(n,Z(t,r)),filter:(n,r={})=>e.filter(n,Z(t,r)),defaults:n=>e.defaults(Z(t,n)),makeRe:(n,r={})=>e.makeRe(n,Z(t,r)),braceExpand:(n,r={})=>e.braceExpand(n,Z(t,r)),match:(n,r,o={})=>e.match(n,r,Z(t,o)),sep:e.sep,GLOBSTAR:z})};const q=(t,e={})=>(U(t),e.nobrace||!/\{(?:(?!\{).)*\}/.test(t)?[t]:u(t));b.braceExpand=q;const U=t=>{if("string"!=typeof t)throw new TypeError("invalid pattern");if(t.length>65536)throw new TypeError("pattern is too long")};b.makeRe=(t,e={})=>new Y(t,e).makeRe(),b.match=(t,e,n={})=>{const r=new Y(e,n);return t=t.filter((t=>r.match(t))),r.options.nonull&&!t.length&&t.push(e),t};const X=/[?*]|[+@!]\(.*?\)|\[|\]/,K=t=>t.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&");class Y{options;set;pattern;windowsPathsNoEscape;nonegate;negate;comment;empty;preserveMultipleSlashes;partial;globSet;globParts;nocase;isWindows;platform;windowsNoMagicRoot;regexp;constructor(t,e={}){U(t),e=e||{},this.options=e,this.pattern=t,this.platform=e.platform||I,this.isWindows="win32"===this.platform,this.windowsPathsNoEscape=!!e.windowsPathsNoEscape||!1===e.allowWindowsEscape,this.windowsPathsNoEscape&&(this.pattern=this.pattern.replace(/\\/g,"/")),this.preserveMultipleSlashes=!!e.preserveMultipleSlashes,this.regexp=null,this.negate=!1,this.nonegate=!!e.nonegate,this.comment=!1,this.empty=!1,this.partial=!!e.partial,this.nocase=!!this.options.nocase,this.windowsNoMagicRoot=void 0!==e.windowsNoMagicRoot?e.windowsNoMagicRoot:!(!this.isWindows||!this.nocase),this.globSet=[],this.globParts=[],this.set=[],this.make()}hasMagic(){if(this.options.magicalBraces&&this.set.length>1)return!0;for(const t of this.set)for(const e of t)if("string"!=typeof e)return!0;return!1}debug(...t){}make(){const t=this.pattern,e=this.options;if(!e.nocomment&&"#"===t.charAt(0))return void(this.comment=!0);if(!t)return void(this.empty=!0);this.parseNegate(),this.globSet=[...new Set(this.braceExpand())],e.debug&&(this.debug=(...t)=>m.error(...t)),this.debug(this.pattern,this.globSet);const n=this.globSet.map((t=>this.slashSplit(t)));this.globParts=this.preprocess(n),this.debug(this.pattern,this.globParts);let r=this.globParts.map(((t,e,n)=>{if(this.isWindows&&this.windowsNoMagicRoot){const e=!(""!==t[0]||""!==t[1]||"?"!==t[2]&&X.test(t[2])||X.test(t[3])),n=/^[a-z]:/i.test(t[0]);if(e)return[...t.slice(0,4),...t.slice(4).map((t=>this.parse(t)))];if(n)return[t[0],...t.slice(1).map((t=>this.parse(t)))]}return t.map((t=>this.parse(t)))}));if(this.debug(this.pattern,r),this.set=r.filter((t=>-1===t.indexOf(!1))),this.isWindows)for(let t=0;t<this.set.length;t++){const e=this.set[t];""===e[0]&&""===e[1]&&"?"===this.globParts[t][2]&&"string"==typeof e[3]&&/^[a-z]:$/i.test(e[3])&&(e[2]="?")}this.debug(this.pattern,this.set)}preprocess(t){if(this.options.noglobstar)for(let e=0;e<t.length;e++)for(let n=0;n<t[e].length;n++)"**"===t[e][n]&&(t[e][n]="*");const{optimizationLevel:e=1}=this.options;return e>=2?(t=this.firstPhasePreProcess(t),t=this.secondPhasePreProcess(t)):t=e>=1?this.levelOneOptimize(t):this.adjascentGlobstarOptimize(t),t}adjascentGlobstarOptimize(t){return t.map((t=>{let e=-1;for(;-1!==(e=t.indexOf("**",e+1));){let n=e;for(;"**"===t[n+1];)n++;n!==e&&t.splice(e,n-e)}return t}))}levelOneOptimize(t){return t.map((t=>0===(t=t.reduce(((t,e)=>{const n=t[t.length-1];return"**"===e&&"**"===n?t:".."===e&&n&&".."!==n&&"."!==n&&"**"!==n?(t.pop(),t):(t.push(e),t)}),[])).length?[""]:t))}levelTwoFileOptimize(t){Array.isArray(t)||(t=this.slashSplit(t));let e=!1;do{if(e=!1,!this.preserveMultipleSlashes){for(let n=1;n<t.length-1;n++){const r=t[n];1===n&&""===r&&""===t[0]||"."!==r&&""!==r||(e=!0,t.splice(n,1),n--)}"."!==t[0]||2!==t.length||"."!==t[1]&&""!==t[1]||(e=!0,t.pop())}let n=0;for(;-1!==(n=t.indexOf("..",n+1));){const r=t[n-1];r&&"."!==r&&".."!==r&&"**"!==r&&(e=!0,t.splice(n-1,2),n-=2)}}while(e);return 0===t.length?[""]:t}firstPhasePreProcess(t){let e=!1;do{e=!1;for(let n of t){let r=-1;for(;-1!==(r=n.indexOf("**",r+1));){let o=r;for(;"**"===n[o+1];)o++;o>r&&n.splice(r+1,o-r);let s=n[r+1];const i=n[r+2],a=n[r+3];if(".."!==s)continue;if(!i||"."===i||".."===i||!a||"."===a||".."===a)continue;e=!0,n.splice(r,1);const c=n.slice(0);c[r]="**",t.push(c),r--}if(!this.preserveMultipleSlashes){for(let t=1;t<n.length-1;t++){const r=n[t];1===t&&""===r&&""===n[0]||"."!==r&&""!==r||(e=!0,n.splice(t,1),t--)}"."!==n[0]||2!==n.length||"."!==n[1]&&""!==n[1]||(e=!0,n.pop())}let o=0;for(;-1!==(o=n.indexOf("..",o+1));){const t=n[o-1];if(t&&"."!==t&&".."!==t&&"**"!==t){e=!0;const t=1===o&&"**"===n[o+1]?["."]:[];n.splice(o-1,2,...t),0===n.length&&n.push(""),o-=2}}}}while(e);return t}secondPhasePreProcess(t){for(let e=0;e<t.length-1;e++)for(let n=e+1;n<t.length;n++){const r=this.partsMatch(t[e],t[n],!this.preserveMultipleSlashes);r&&(t[e]=r,t[n]=[])}return t.filter((t=>t.length))}partsMatch(t,e,n=!1){let r=0,o=0,s=[],i="";for(;r<t.length&&o<e.length;)if(t[r]===e[o])s.push("b"===i?e[o]:t[r]),r++,o++;else if(n&&"**"===t[r]&&e[o]===t[r+1])s.push(t[r]),r++;else if(n&&"**"===e[o]&&t[r]===e[o+1])s.push(e[o]),o++;else if("*"!==t[r]||!e[o]||!this.options.dot&&e[o].startsWith(".")||"**"===e[o]){if("*"!==e[o]||!t[r]||!this.options.dot&&t[r].startsWith(".")||"**"===t[r])return!1;if("a"===i)return!1;i="b",s.push(e[o]),r++,o++}else{if("b"===i)return!1;i="a",s.push(t[r]),r++,o++}return t.length===e.length&&s}parseNegate(){if(this.nonegate)return;const t=this.pattern;let e=!1,n=0;for(let r=0;r<t.length&&"!"===t.charAt(r);r++)e=!e,n++;n&&(this.pattern=t.slice(n)),this.negate=e}matchOne(t,e,n=!1){const r=this.options;if(this.isWindows){const n=""===t[0]&&""===t[1]&&"?"===t[2]&&"string"==typeof t[3]&&/^[a-z]:$/i.test(t[3]),r=""===e[0]&&""===e[1]&&"?"===e[2]&&"string"==typeof e[3]&&/^[a-z]:$/i.test(e[3]);if(n&&r){const n=t[3],r=e[3];n.toLowerCase()===r.toLowerCase()&&(t[3]=r)}else if(r&&"string"==typeof t[0]){const n=e[3],r=t[0];n.toLowerCase()===r.toLowerCase()&&(e[3]=r,e=e.slice(3))}else if(n&&"string"==typeof e[0]){const n=t[3];n.toLowerCase()===e[0].toLowerCase()&&(e[0]=n,t=t.slice(3))}}const{optimizationLevel:o=1}=this.options;o>=2&&(t=this.levelTwoFileOptimize(t)),this.debug("matchOne",this,{file:t,pattern:e}),this.debug("matchOne",t.length,e.length);for(var s=0,i=0,a=t.length,c=e.length;s<a&&i<c;s++,i++){this.debug("matchOne loop");var l=e[i],u=t[s];if(this.debug(e,l,u),!1===l)return!1;if(l===z){this.debug("GLOBSTAR",[e,l,u]);var p=s,h=i+1;if(h===c){for(this.debug("** at the end");s<a;s++)if("."===t[s]||".."===t[s]||!r.dot&&"."===t[s].charAt(0))return!1;return!0}for(;p<a;){var f=t[p];if(this.debug("\nglobstar while",t,p,e,h,f),this.matchOne(t.slice(p),e.slice(h),n))return this.debug("globstar found match!",p,a,f),!0;if("."===f||".."===f||!r.dot&&"."===f.charAt(0)){this.debug("dot detected!",t,p,e,h);break}this.debug("globstar swallow a segment, and continue"),p++}return!(!n||(this.debug("\n>>> no match, partial?",t,p,e,h),p!==a))}let o;if("string"==typeof l?(o=u===l,this.debug("string match",l,u,o)):(o=l.test(u),this.debug("pattern match",l,u,o)),!o)return!1}if(s===a&&i===c)return!0;if(s===a)return n;if(i===c)return s===a-1&&""===t[s];throw new Error("wtf?")}braceExpand(){return q(this.pattern,this.options)}parse(t){U(t);const e=this.options;if("**"===t)return z;if(""===t)return"";let n,r=null;(n=t.match(P))?r=e.dot?$:M:(n=t.match(v))?r=(e.nocase?e.dot?j:O:e.dot?w:y)(n[1]):(n=t.match(L))?r=(e.nocase?e.dot?R:T:e.dot?k:N)(n):(n=t.match(x))?r=e.dot?S:A:(n=t.match(E))&&(r=C);let o="",s=!1,i=!1;const a=[],c=[];let l,u=!1,p=!1,h="."===t.charAt(0),f=e.dot||h;const g=t=>"."===t.charAt(0)?"":e.dot?"(?!(?:^|\\/)\\.{1,2}(?:$|\\/))":"(?!\\.)",m=()=>{if(u){switch(u){case"*":o+=H,s=!0;break;case"?":o+=F,s=!0;break;default:o+="\\"+u}this.debug("clearStateChar %j %j",u,o),u=!1}};for(let n,r=0;r<t.length&&(n=t.charAt(r));r++)if(this.debug("%s\t%s %s %j",t,r,o,n),i){if("/"===n)return!1;D[n]&&(o+="\\"),o+=n,i=!1}else switch(n){case"/":return!1;case"\\":m(),i=!0;continue;case"?":case"*":case"+":case"@":case"!":this.debug("%s\t%s %s %j <-- stateChar",t,r,o,n),this.debug("call clearStateChar %j",u),m(),u=n,e.noext&&m();continue;case"(":{if(!u){o+="\\(";continue}const e={type:u,start:r-1,reStart:o.length,open:V[u].open,close:V[u].close};this.debug(this.pattern,"\t",e),a.push(e),o+=e.open,0===e.start&&"!"!==e.type&&(h=!0,o+=g(t.slice(r+1))),this.debug("plType %j %j",u,o),u=!1;continue}case")":{const t=a[a.length-1];if(!t){o+="\\)";continue}a.pop(),m(),s=!0,l=t,o+=l.close,"!"===l.type&&c.push(Object.assign(l,{reEnd:o.length}));continue}case"|":{const e=a[a.length-1];if(!e){o+="\\|";continue}m(),o+="|",0===e.start&&"!"!==e.type&&(h=!0,o+=g(t.slice(r+1)));continue}case"[":m();const[f,b,v,y]=d(t,r);v?(o+=f,p=p||b,r+=v-1,s=s||y):o+="\\[";continue;case"]":o+="\\"+n;continue;default:m(),o+=K(n)}for(l=a.pop();l;l=a.pop()){let t;t=o.slice(l.reStart+l.open.length),this.debug(this.pattern,"setting tail",o,l),t=t.replace(/((?:\\{2}){0,64})(\\?)\|/g,((t,e,n)=>(n||(n="\\"),e+e+n+"|"))),this.debug("tail=%j\n %s",t,t,l,o);const e="*"===l.type?H:"?"===l.type?F:"\\"+l.type;s=!0,o=o.slice(0,l.reStart)+e+"\\("+t}m(),i&&(o+="\\\\");const b=G[o.charAt(0)];for(let t=c.length-1;t>-1;t--){const e=c[t],n=o.slice(0,e.reStart),r=o.slice(e.reStart,e.reEnd-8);let s=o.slice(e.reEnd);const i=o.slice(e.reEnd-8,e.reEnd)+s,a=n.split(")").length,l=n.split("(").length-a;let u=s;for(let t=0;t<l;t++)u=u.replace(/\)[+*?]?/,"");s=u,o=n+r+s+(""===s?"(?:$|\\/)":"")+i}if(""!==o&&s&&(o="(?=.)"+o),b&&(o=(h?"":f?"(?!(?:^|\\/)\\.{1,2}(?:$|\\/))":"(?!\\.)")+o),!e.nocase||s||e.nocaseMagicOnly||(s=t.toUpperCase()!==t.toLowerCase()),!s)return o.replace(/\\(.)/g,"$1");const W=(e.nocase?"i":"")+(p?"u":"");try{const e=r?{_glob:t,_src:o,test:r}:{_glob:t,_src:o};return Object.assign(new RegExp("^"+o+"$",W),e)}catch(t){return this.debug("invalid regexp",t),new RegExp("$.")}}makeRe(){if(this.regexp||!1===this.regexp)return this.regexp;const t=this.set;if(!t.length)return this.regexp=!1,this.regexp;const e=this.options,n=e.noglobstar?H:e.dot?"(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?":"(?:(?!(?:\\/|^)\\.).)*?",r=e.nocase?"i":"";let o=t.map((t=>{const e=t.map((t=>"string"==typeof t?K(t):t===z?z:t._src));return e.forEach(((t,r)=>{const o=e[r+1],s=e[r-1];t===z&&s!==z&&(void 0===s?void 0!==o&&o!==z?e[r+1]="(?:\\/|"+n+"\\/)?"+o:e[r]=n:void 0===o?e[r-1]=s+"(?:\\/|"+n+")?":o!==z&&(e[r-1]=s+"(?:\\/|\\/"+n+"\\/)"+o,e[r+1]=z))})),e.filter((t=>t!==z)).join("/")})).join("|");o="^(?:"+o+")$",this.negate&&(o="^(?!"+o+").*$");try{this.regexp=new RegExp(o,r)}catch(t){this.regexp=!1}return this.regexp}slashSplit(t){return this.preserveMultipleSlashes?t.split("/"):this.isWindows&&/^\/\/[^\/]+/.test(t)?["",...t.split(/\/+/)]:t.split(/\/+/)}match(t,e=this.partial){if(this.debug("match",t,this.pattern),this.comment)return!1;if(this.empty)return""===t;if("/"===t&&e)return!0;const n=this.options;this.isWindows&&(t=t.split("\\").join("/"));const r=this.slashSplit(t);this.debug(this.pattern,"split",r);const o=this.set;this.debug(this.pattern,"set",o);let s=r[r.length-1];if(!s)for(let t=r.length-2;!s&&t>=0;t--)s=r[t];for(let t=0;t<o.length;t++){const i=o[t];let a=r;if(n.matchBase&&1===i.length&&(a=[s]),this.matchOne(a,i,e))return!!n.flipNegate||!this.negate}return!n.flipNegate&&this.negate}static defaults(t){return b.defaults(t).Minimatch}}function J(t){const e={};for(const n of t.keys())e[n]=t.get(n);return e}b.Minimatch=Y,b.escape=(t,{windowsPathsNoEscape:e=!1}={})=>e?t.replace(/[?*()[\]]/g,"[$&]"):t.replace(/[?*()[\]\\]/g,"\\$&"),b.unescape=(t,{windowsPathsNoEscape:e=!1}={})=>e?t.replace(/\[([^\/\\])\]/g,"$1"):t.replace(/((?!\\).|^)\[([^\/\\])\]/g,"$1$2").replace(/\\([^\/])/g,"$1");var Q,tt=r(12692);r(86454),r(26602),Error,function(t){t.Array="array",t.Object="object",t.Original="original"}(Q||(Q={}));var et=r(35550);const nt=function(t){let e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const{multistatus:{response:n}}=t;return n.map((t=>{const n=t.propstat.prop;return function(t,e,n=!1){const{getlastmodified:r=null,getcontentlength:o="0",resourcetype:s=null,getcontenttype:i=null,getetag:a=null}=t,c=s&&"object"==typeof s&&void 0!==s.collection?"directory":"file",l={filename:e,basename:tt.basename(e),lastmod:r,size:parseInt(o,10),type:c,etag:"string"==typeof a?a.replace(/"/g,""):null};return"file"===c&&(l.mime=i&&"string"==typeof i?i.split(";")[0]:""),n&&(l.props=t),l}(n,n.id.toString(),e)}))};let rt,ot;var st;if(r.nc=btoa((0,o.do)()),(0,s.C)("comments","activityEnabled",!1)&&void 0!==(null===(st=OCA)||void 0===st||null===(st=st.Activity)||void 0===st?void 0:st.registerSidebarAction))window.addEventListener("DOMContentLoaded",(function(){window.OCA.Activity.registerSidebarAction({mount:async(t,e)=>{let{context:n,fileInfo:o,reload:s}=e;if(!rt){const{default:t}=await Promise.all([r.e(4208),r.e(7462),r.e(2913)]).then(r.bind(r,72913));rt=a.Ay.extend(t)}ot=new rt({parent:n,propsData:{reloadCallback:s,resourceId:o.id}}),ot.$mount(t),c.A.info("Comments plugin mounted in Activity sidebar action",{fileInfo:o})},unmount:()=>{ot&&ot.$destroy()}}),window.OCA.Activity.registerSidebarEntries((async t=>{let{fileInfo:e,limit:n,offset:o}=t;const{data:s}=await async function(t,e){var n;let{resourceType:r,resourceId:o}=t;const s=["",r,o].join("/"),i=e.datetime?"<oc:datetime>".concat(e.datetime.toISOString(),"</oc:datetime>"):"",a=await et.A.customRequest(s,Object.assign({method:"REPORT",data:'<?xml version="1.0"?>\n\t\t\t<oc:filter-comments\n\t\t\t\txmlns:d="DAV:"\n\t\t\t\txmlns:oc="http://owncloud.org/ns"\n\t\t\t\txmlns:nc="http://nextcloud.org/ns"\n\t\t\t\txmlns:ocs="http://open-collaboration-services.org/ns">\n\t\t\t\t<oc:limit>'.concat(null!==(n=e.limit)&&void 0!==n?n:20,"</oc:limit>\n\t\t\t\t<oc:offset>").concat(e.offset||0,"</oc:offset>\n\t\t\t\t").concat(i,"\n\t\t\t</oc:filter-comments>")},e)),c=await a.text(),u=await(0,l.h4)(c);return function(t,e,n=!1){return n?{data:e,headers:t.headers?J(t.headers):{},status:t.status,statusText:t.statusText}:e}(a,nt(u,!0),!0)}({resourceType:"files",resourceId:e.id},{limit:n,offset:o});c.A.debug("Loaded comments",{fileInfo:e,comments:s});const{default:u}=await Promise.all([r.e(4208),r.e(7462),r.e(1241)]).then(r.bind(r,41241)),p=a.Ay.extend(u);return s.map((t=>({timestamp:(0,i.A)(t.props.creationDateTime).toDate().getTime(),mount(n,r){let{context:o,reload:s}=r;this._CommentsViewInstance=new p({parent:o,propsData:{comment:t,resourceId:e.id,reloadCallback:s}}),this._CommentsViewInstance.$mount(n)},unmount(){this._CommentsViewInstance.$destroy()}})))})),window.OCA.Activity.registerSidebarFilter((t=>"comments"!==t.type)),c.A.info("Comments plugin registered for Activity sidebar action")}));else{let e=null;const n=new OCA.Files.Sidebar.Tab({id:"comments",name:t("comments","Comments"),iconSvg:'<svg xmlns="http://www.w3.org/2000/svg" id="mdi-message-reply-text" viewBox="0 0 24 24"><path d="M18,8H6V6H18V8M18,11H6V9H18V11M18,14H6V12H18V14M22,4A2,2 0 0,0 20,2H4A2,2 0 0,0 2,4V16A2,2 0 0,0 4,18H18L22,22V4Z" /></svg>',async mount(t,n,r){e&&e.$destroy(),e=new OCA.Comments.View("files",{parent:r}),await e.update(n.id),e.$mount(t)},update(t){e.update(t.id)},destroy(){e.$destroy(),e=null},scrollBottomReached(){e.onScrollBottomReached()}});window.addEventListener("DOMContentLoaded",(function(){OCA.Files&&OCA.Files.Sidebar&&OCA.Files.Sidebar.registerTab(n)}))}},96689:(t,e,n)=>{"use strict";n.d(e,{A:()=>r});const r=(0,n(53529).YK)().setApp("comments").detectUser().build()},35550:(t,e,n)=>{"use strict";n.d(e,{A:()=>c});var r=n(44719),o=n(17003),s=n(21777);const i=(0,r.UU)((0,o.e)()),a=t=>{i.setHeaders({"X-Requested-With":"XMLHttpRequest",requesttoken:null!=t?t:""})};(0,s.zo)(a),a((0,s.do)());const c=i},17003:(t,e,n)=>{"use strict";n.d(e,{e:()=>o});var r=n(99498);const o=function(){return(0,r.dC)("dav/comments")}},8505:t=>{"use strict";function e(t,e,o){t instanceof RegExp&&(t=n(t,o)),e instanceof RegExp&&(e=n(e,o));var s=r(t,e,o);return s&&{start:s[0],end:s[1],pre:o.slice(0,s[0]),body:o.slice(s[0]+t.length,s[1]),post:o.slice(s[1]+e.length)}}function n(t,e){var n=e.match(t);return n?n[0]:null}function r(t,e,n){var r,o,s,i,a,c=n.indexOf(t),l=n.indexOf(e,c+1),u=c;if(c>=0&&l>0){if(t===e)return[c,l];for(r=[],s=n.length;u>=0&&!a;)u==c?(r.push(u),c=n.indexOf(t,u+1)):1==r.length?a=[r.pop(),l]:((o=r.pop())<s&&(s=o,i=l),l=n.indexOf(e,u+1)),u=c<l&&c>=0?c:l;r.length&&(a=[s,i])}return a}t.exports=e,e.range=r},68928:(t,e,n)=>{var r=n(8505);t.exports=function(t){return t?("{}"===t.substr(0,2)&&(t="\\{\\}"+t.substr(2)),m(function(t){return t.split("\\\\").join(o).split("\\{").join(s).split("\\}").join(i).split("\\,").join(a).split("\\.").join(c)}(t),!0).map(u)):[]};var o="\0SLASH"+Math.random()+"\0",s="\0OPEN"+Math.random()+"\0",i="\0CLOSE"+Math.random()+"\0",a="\0COMMA"+Math.random()+"\0",c="\0PERIOD"+Math.random()+"\0";function l(t){return parseInt(t,10)==t?parseInt(t,10):t.charCodeAt(0)}function u(t){return t.split(o).join("\\").split(s).join("{").split(i).join("}").split(a).join(",").split(c).join(".")}function p(t){if(!t)return[""];var e=[],n=r("{","}",t);if(!n)return t.split(",");var o=n.pre,s=n.body,i=n.post,a=o.split(",");a[a.length-1]+="{"+s+"}";var c=p(i);return i.length&&(a[a.length-1]+=c.shift(),a.push.apply(a,c)),e.push.apply(e,a),e}function h(t){return"{"+t+"}"}function f(t){return/^-?0\d/.test(t)}function d(t,e){return t<=e}function g(t,e){return t>=e}function m(t,e){var n=[],o=r("{","}",t);if(!o)return[t];var s=o.pre,a=o.post.length?m(o.post,!1):[""];if(/\$$/.test(o.pre))for(var c=0;c<a.length;c++){var u=s+"{"+o.body+"}"+a[c];n.push(u)}else{var b,v,y=/^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(o.body),w=/^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(o.body),O=y||w,j=o.body.indexOf(",")>=0;if(!O&&!j)return o.post.match(/,.*\}/)?m(t=o.pre+"{"+o.body+i+o.post):[t];if(O)b=o.body.split(/\.\./);else if(1===(b=p(o.body)).length&&1===(b=m(b[0],!1).map(h)).length)return a.map((function(t){return o.pre+b[0]+t}));if(O){var x=l(b[0]),A=l(b[1]),S=Math.max(b[0].length,b[1].length),E=3==b.length?Math.abs(l(b[2])):1,C=d;A<x&&(E*=-1,C=g);var P=b.some(f);v=[];for(var M=x;C(M,A);M+=E){var $;if(w)"\\"===($=String.fromCharCode(M))&&($="");else if($=String(M),P){var L=S-$.length;if(L>0){var T=new Array(L+1).join("0");$=M<0?"-"+T+$.slice(1):T+$}}v.push($)}}else{v=[];for(var R=0;R<b.length;R++)v.push.apply(v,m(b[R],!1))}for(R=0;R<v.length;R++)for(c=0;c<a.length;c++)u=s+v[R]+a[c],(!e||O||u)&&n.push(u)}return n}},86454:(t,e,n)=>{"use strict";const r=n(43918),o=n(32923),s=n(8904);t.exports={XMLParser:o,XMLValidator:r,XMLBuilder:s}},26602:t=>{"use strict";function e(t){return e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},e(t)}function n(t){var e="function"==typeof Map?new Map:void 0;return n=function(t){if(null===t||(n=t,-1===Function.toString.call(n).indexOf("[native code]")))return t;var n;if("function"!=typeof t)throw new TypeError("Super expression must either be null or a function");if(void 0!==e){if(e.has(t))return e.get(t);e.set(t,i)}function i(){return r(t,arguments,s(this).constructor)}return i.prototype=Object.create(t.prototype,{constructor:{value:i,enumerable:!1,writable:!0,configurable:!0}}),o(i,t)},n(t)}function r(t,e,n){return r=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(t){return!1}}()?Reflect.construct:function(t,e,n){var r=[null];r.push.apply(r,e);var s=new(Function.bind.apply(t,r));return n&&o(s,n.prototype),s},r.apply(null,arguments)}function o(t,e){return o=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t},o(t,e)}function s(t){return s=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)},s(t)}var i=function(t){function n(t){var r;return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,n),(r=function(t,n){return!n||"object"!==e(n)&&"function"!=typeof n?function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t):n}(this,s(n).call(this,t))).name="ObjectPrototypeMutationError",r}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&o(t,e)}(n,t),n}(n(Error));function a(t,n){for(var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){},o=n.split("."),s=o.length,i=function(e){var n=o[e];if(!t)return{v:void 0};if("+"===n){if(Array.isArray(t))return{v:t.map((function(n,s){var i=o.slice(e+1);return i.length>0?a(n,i.join("."),r):r(t,s,o,e)}))};var s=o.slice(0,e).join(".");throw new Error("Object at wildcard (".concat(s,") is not an array"))}t=r(t,n,o,e)},c=0;c<s;c++){var l=i(c);if("object"===e(l))return l.v}return t}function c(t,e){return t.length===e+1}t.exports={set:function(t,n,r){if("object"!=e(t)||null===t)return t;if(void 0===n)return t;if("number"==typeof n)return t[n]=r,t[n];try{return a(t,n,(function(t,e,n,o){if(t===Reflect.getPrototypeOf({}))throw new i("Attempting to mutate Object.prototype");if(!t[e]){var s=Number.isInteger(Number(n[o+1])),a="+"===n[o+1];t[e]=s||a?[]:{}}return c(n,o)&&(t[e]=r),t[e]}))}catch(e){if(e instanceof i)throw e;return t}},get:function(t,n){if("object"!=e(t)||null===t)return t;if(void 0===n)return t;if("number"==typeof n)return t[n];try{return a(t,n,(function(t,e){return t[e]}))}catch(e){return t}},has:function(t,n){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if("object"!=e(t)||null===t)return!1;if(void 0===n)return!1;if("number"==typeof n)return n in t;try{var o=!1;return a(t,n,(function(t,e,n,s){if(!c(n,s))return t&&t[e];o=r.own?t.hasOwnProperty(e):e in t})),o}catch(t){return!1}},hasOwn:function(t,e,n){return this.has(t,e,n||{own:!0})},isIn:function(t,n,r){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};if("object"!=e(t)||null===t)return!1;if(void 0===n)return!1;try{var s=!1,i=!1;return a(t,n,(function(t,n,o,a){return s=s||t===r||!!t&&t[n]===r,i=c(o,a)&&"object"===e(t)&&n in t,t&&t[n]})),o.validPath?s&&i:s}catch(t){return!1}},ObjectPrototypeMutationError:i}},12692:(t,e,n)=>{"use strict";var r=n(65606),o=n(40537),s=function(t){return"string"==typeof t};function i(t,e){for(var n=[],r=0;r<t.length;r++){var o=t[r];o&&"."!==o&&(".."===o?n.length&&".."!==n[n.length-1]?n.pop():e&&n.push(".."):n.push(o))}return n}var a=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/,c={};function l(t){return a.exec(t).slice(1)}c.resolve=function(){for(var t="",e=!1,n=arguments.length-1;n>=-1&&!e;n--){var o=n>=0?arguments[n]:r.cwd();if(!s(o))throw new TypeError("Arguments to path.resolve must be strings");o&&(t=o+"/"+t,e="/"===o.charAt(0))}return(e?"/":"")+(t=i(t.split("/"),!e).join("/"))||"."},c.normalize=function(t){var e=c.isAbsolute(t),n="/"===t.substr(-1);return(t=i(t.split("/"),!e).join("/"))||e||(t="."),t&&n&&(t+="/"),(e?"/":"")+t},c.isAbsolute=function(t){return"/"===t.charAt(0)},c.join=function(){for(var t="",e=0;e<arguments.length;e++){var n=arguments[e];if(!s(n))throw new TypeError("Arguments to path.join must be strings");n&&(t+=t?"/"+n:n)}return c.normalize(t)},c.relative=function(t,e){function n(t){for(var e=0;e<t.length&&""===t[e];e++);for(var n=t.length-1;n>=0&&""===t[n];n--);return e>n?[]:t.slice(e,n+1)}t=c.resolve(t).substr(1),e=c.resolve(e).substr(1);for(var r=n(t.split("/")),o=n(e.split("/")),s=Math.min(r.length,o.length),i=s,a=0;a<s;a++)if(r[a]!==o[a]){i=a;break}var l=[];for(a=i;a<r.length;a++)l.push("..");return(l=l.concat(o.slice(i))).join("/")},c._makeLong=function(t){return t},c.dirname=function(t){var e=l(t),n=e[0],r=e[1];return n||r?(r&&(r=r.substr(0,r.length-1)),n+r):"."},c.basename=function(t,e){var n=l(t)[2];return e&&n.substr(-1*e.length)===e&&(n=n.substr(0,n.length-e.length)),n},c.extname=function(t){return l(t)[3]},c.format=function(t){if(!o.isObject(t))throw new TypeError("Parameter 'pathObject' must be an object, not "+typeof t);var e=t.root||"";if(!s(e))throw new TypeError("'pathObject.root' must be a string or undefined, not "+typeof t.root);return(t.dir?t.dir+c.sep:"")+(t.base||"")},c.parse=function(t){if(!s(t))throw new TypeError("Parameter 'pathString' must be a string, not "+typeof t);var e=l(t);if(!e||4!==e.length)throw new TypeError("Invalid path '"+t+"'");return e[1]=e[1]||"",e[2]=e[2]||"",e[3]=e[3]||"",{root:e[0],dir:e[0]+e[1].slice(0,e[1].length-1),base:e[2],ext:e[3],name:e[2].slice(0,e[2].length-e[3].length)}},c.sep="/",c.delimiter=":",t.exports=c}},s={};function i(t){var e=s[t];if(void 0!==e)return e.exports;var n=s[t]={id:t,loaded:!1,exports:{}};return o[t].call(n.exports,n,n.exports,i),n.loaded=!0,n.exports}i.m=o,e=[],i.O=(t,n,r,o)=>{if(!n){var s=1/0;for(u=0;u<e.length;u++){n=e[u][0],r=e[u][1],o=e[u][2];for(var a=!0,c=0;c<n.length;c++)(!1&o||s>=o)&&Object.keys(i.O).every((t=>i.O[t](n[c])))?n.splice(c--,1):(a=!1,o<s&&(s=o));if(a){e.splice(u--,1);var l=r();void 0!==l&&(t=l)}}return t}o=o||0;for(var u=e.length;u>0&&e[u-1][2]>o;u--)e[u]=e[u-1];e[u]=[n,r,o]},i.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return i.d(e,{a:e}),e},i.d=(t,e)=>{for(var n in e)i.o(e,n)&&!i.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},i.f={},i.e=t=>Promise.all(Object.keys(i.f).reduce(((e,n)=>(i.f[n](t,e),e)),[])),i.u=t=>t+"-"+t+".js?v="+{1110:"2909496e7e35d6258214",1241:"a4187792299da984916c",2913:"1ccb2adaaea884424d3c",5528:"110b147bc8680f8c83f4",7462:"9c58610aebad939f1ce8",8902:"bb2f9be8a039f8db7e58"}[t],i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),i.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n={},r="nextcloud:",i.l=(t,e,o,s)=>{if(n[t])n[t].push(e);else{var a,c;if(void 0!==o)for(var l=document.getElementsByTagName("script"),u=0;u<l.length;u++){var p=l[u];if(p.getAttribute("src")==t||p.getAttribute("data-webpack")==r+o){a=p;break}}a||(c=!0,(a=document.createElement("script")).charset="utf-8",a.timeout=120,i.nc&&a.setAttribute("nonce",i.nc),a.setAttribute("data-webpack",r+o),a.src=t),n[t]=[e];var h=(e,r)=>{a.onerror=a.onload=null,clearTimeout(f);var o=n[t];if(delete n[t],a.parentNode&&a.parentNode.removeChild(a),o&&o.forEach((t=>t(r))),e)return e(r)},f=setTimeout(h.bind(null,void 0,{type:"timeout",target:a}),12e4);a.onerror=h.bind(null,a.onerror),a.onload=h.bind(null,a.onload),c&&document.head.appendChild(a)}},i.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i.nmd=t=>(t.paths=[],t.children||(t.children=[]),t),i.j=2122,(()=>{var t;i.g.importScripts&&(t=i.g.location+"");var e=i.g.document;if(!t&&e&&(e.currentScript&&(t=e.currentScript.src),!t)){var n=e.getElementsByTagName("script");if(n.length)for(var r=n.length-1;r>-1&&(!t||!/^http(s?):/.test(t));)t=n[r--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),i.p=t})(),(()=>{i.b=document.baseURI||self.location.href;var t={2122:0};i.f.j=(e,n)=>{var r=i.o(t,e)?t[e]:void 0;if(0!==r)if(r)n.push(r[2]);else{var o=new Promise(((n,o)=>r=t[e]=[n,o]));n.push(r[2]=o);var s=i.p+i.u(e),a=new Error;i.l(s,(n=>{if(i.o(t,e)&&(0!==(r=t[e])&&(t[e]=void 0),r)){var o=n&&("load"===n.type?"missing":n.type),s=n&&n.target&&n.target.src;a.message="Loading chunk "+e+" failed.\n("+o+": "+s+")",a.name="ChunkLoadError",a.type=o,a.request=s,r[1](a)}}),"chunk-"+e,e)}},i.O.j=e=>0===t[e];var e=(e,n)=>{var r,o,s=n[0],a=n[1],c=n[2],l=0;if(s.some((e=>0!==t[e]))){for(r in a)i.o(a,r)&&(i.m[r]=a[r]);if(c)var u=c(i)}for(e&&e(n);l<s.length;l++)o=s[l],i.o(t,o)&&t[o]&&t[o][0](),t[o]=0;return i.O(u)},n=self.webpackChunknextcloud=self.webpackChunknextcloud||[];n.forEach(e.bind(null,0)),n.push=e.bind(null,n.push.bind(n))})(),i.nc=void 0;var a=i.O(void 0,[4208],(()=>i(7041)));a=i.O(a)})();
+//# sourceMappingURL=comments-comments-tab.js.map?v=a78ff48695ceded82249 \ No newline at end of file
diff --git a/dist/comments-comments-tab.js.map b/dist/comments-comments-tab.js.map
index 3897479992b..c31315d7859 100644
--- a/dist/comments-comments-tab.js.map
+++ b/dist/comments-comments-tab.js.map
@@ -1 +1 @@
-{"version":3,"file":"comments-comments-tab.js?v=2ea34fc834d653cf8b67","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/webpack/runtime/load script","webpack:///nextcloud/node_modules/webdav/node_modules/minimatch/dist/mjs/brace-expressions.js","webpack:///nextcloud/node_modules/webdav/node_modules/minimatch/dist/mjs/index.js","webpack:///nextcloud/node_modules/webdav/dist/node/tools/headers.js","webpack:///nextcloud/node_modules/webdav/node_modules/minimatch/dist/mjs/escape.js","webpack:///nextcloud/node_modules/webdav/node_modules/minimatch/dist/mjs/unescape.js","webpack:///nextcloud/node_modules/webdav/dist/node/tools/dav.js","webpack:///nextcloud/node_modules/layerr/dist/layerr.js","webpack:///nextcloud/apps/comments/src/services/GetComments.ts","webpack:///nextcloud/apps/comments/src/comments-activity-tab.ts","webpack:///nextcloud/apps/comments/src/comments-tab.js","webpack:///nextcloud/node_modules/webdav/dist/node/response.js","webpack:///nextcloud/apps/comments/src/logger.js","webpack:///nextcloud/apps/comments/src/services/DavClient.js","webpack:///nextcloud/apps/comments/src/utils/davUtils.js","webpack:///nextcloud/node_modules/balanced-match/index.js","webpack:///nextcloud/node_modules/brace-expansion/index.js","webpack:///nextcloud/node_modules/fast-xml-parser/src/fxp.js","webpack:///nextcloud/node_modules/nested-property/dist/nested-property.js","webpack:///nextcloud/node_modules/path-posix/index.js","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/ensure chunk","webpack:///nextcloud/webpack/runtime/get javascript chunk filename","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/publicPath","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"nextcloud:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// translate the various posix character classes into unicode properties\n// this works across all unicode locales\n// { <posix class>: [<translation>, /u flag required, negated]\nconst posixClasses = {\n '[:alnum:]': ['\\\\p{L}\\\\p{Nl}\\\\p{Nd}', true],\n '[:alpha:]': ['\\\\p{L}\\\\p{Nl}', true],\n '[:ascii:]': ['\\\\x' + '00-\\\\x' + '7f', false],\n '[:blank:]': ['\\\\p{Zs}\\\\t', true],\n '[:cntrl:]': ['\\\\p{Cc}', true],\n '[:digit:]': ['\\\\p{Nd}', true],\n '[:graph:]': ['\\\\p{Z}\\\\p{C}', true, true],\n '[:lower:]': ['\\\\p{Ll}', true],\n '[:print:]': ['\\\\p{C}', true],\n '[:punct:]': ['\\\\p{P}', true],\n '[:space:]': ['\\\\p{Z}\\\\t\\\\r\\\\n\\\\v\\\\f', true],\n '[:upper:]': ['\\\\p{Lu}', true],\n '[:word:]': ['\\\\p{L}\\\\p{Nl}\\\\p{Nd}\\\\p{Pc}', true],\n '[:xdigit:]': ['A-Fa-f0-9', false],\n};\n// only need to escape a few things inside of brace expressions\n// escapes: [ \\ ] -\nconst braceEscape = (s) => s.replace(/[[\\]\\\\-]/g, '\\\\$&');\n// escape all regexp magic characters\nconst regexpEscape = (s) => s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n// everything has already been escaped, we just have to join\nconst rangesToString = (ranges) => ranges.join('');\n// takes a glob string at a posix brace expression, and returns\n// an equivalent regular expression source, and boolean indicating\n// whether the /u flag needs to be applied, and the number of chars\n// consumed to parse the character class.\n// This also removes out of order ranges, and returns ($.) if the\n// entire class just no good.\nexport const parseClass = (glob, position) => {\n const pos = position;\n /* c8 ignore start */\n if (glob.charAt(pos) !== '[') {\n throw new Error('not in a brace expression');\n }\n /* c8 ignore stop */\n const ranges = [];\n const negs = [];\n let i = pos + 1;\n let sawStart = false;\n let uflag = false;\n let escaping = false;\n let negate = false;\n let endPos = pos;\n let rangeStart = '';\n WHILE: while (i < glob.length) {\n const c = glob.charAt(i);\n if ((c === '!' || c === '^') && i === pos + 1) {\n negate = true;\n i++;\n continue;\n }\n if (c === ']' && sawStart && !escaping) {\n endPos = i + 1;\n break;\n }\n sawStart = true;\n if (c === '\\\\') {\n if (!escaping) {\n escaping = true;\n i++;\n continue;\n }\n // escaped \\ char, fall through and treat like normal char\n }\n if (c === '[' && !escaping) {\n // either a posix class, a collation equivalent, or just a [\n for (const [cls, [unip, u, neg]] of Object.entries(posixClasses)) {\n if (glob.startsWith(cls, i)) {\n // invalid, [a-[] is fine, but not [a-[:alpha]]\n if (rangeStart) {\n return ['$.', false, glob.length - pos, true];\n }\n i += cls.length;\n if (neg)\n negs.push(unip);\n else\n ranges.push(unip);\n uflag = uflag || u;\n continue WHILE;\n }\n }\n }\n // now it's just a normal character, effectively\n escaping = false;\n if (rangeStart) {\n // throw this range away if it's not valid, but others\n // can still match.\n if (c > rangeStart) {\n ranges.push(braceEscape(rangeStart) + '-' + braceEscape(c));\n }\n else if (c === rangeStart) {\n ranges.push(braceEscape(c));\n }\n rangeStart = '';\n i++;\n continue;\n }\n // now might be the start of a range.\n // can be either c-d or c-] or c<more...>] or c] at this point\n if (glob.startsWith('-]', i + 1)) {\n ranges.push(braceEscape(c + '-'));\n i += 2;\n continue;\n }\n if (glob.startsWith('-', i + 1)) {\n rangeStart = c;\n i += 2;\n continue;\n }\n // not the start of a range, just a single character\n ranges.push(braceEscape(c));\n i++;\n }\n if (endPos < i) {\n // didn't see the end of the class, not a valid class,\n // but might still be valid as a literal match.\n return ['', false, 0, false];\n }\n // if we got no ranges and no negates, then we have a range that\n // cannot possibly match anything, and that poisons the whole glob\n if (!ranges.length && !negs.length) {\n return ['$.', false, glob.length - pos, true];\n }\n // if we got one positive range, and it's a single character, then that's\n // not actually a magic pattern, it's just that one literal character.\n // we should not treat that as \"magic\", we should just return the literal\n // character. [_] is a perfectly valid way to escape glob magic chars.\n if (negs.length === 0 &&\n ranges.length === 1 &&\n /^\\\\?.$/.test(ranges[0]) &&\n !negate) {\n const r = ranges[0].length === 2 ? ranges[0].slice(-1) : ranges[0];\n return [regexpEscape(r), false, endPos - pos, false];\n }\n const sranges = '[' + (negate ? '^' : '') + rangesToString(ranges) + ']';\n const snegs = '[' + (negate ? '' : '^') + rangesToString(negs) + ']';\n const comb = ranges.length && negs.length\n ? '(' + sranges + '|' + snegs + ')'\n : ranges.length\n ? sranges\n : snegs;\n return [comb, uflag, endPos - pos, true];\n};\n//# sourceMappingURL=brace-expressions.js.map","import expand from 'brace-expansion';\nimport { parseClass } from './brace-expressions.js';\nimport { escape } from './escape.js';\nimport { unescape } from './unescape.js';\nexport const minimatch = (p, pattern, options = {}) => {\n assertValidPattern(pattern);\n // shortcut: comments match nothing.\n if (!options.nocomment && pattern.charAt(0) === '#') {\n return false;\n }\n return new Minimatch(pattern, options).match(p);\n};\nexport default minimatch;\n// Optimized checking for the most common glob patterns.\nconst starDotExtRE = /^\\*+([^+@!?\\*\\[\\(]*)$/;\nconst starDotExtTest = (ext) => (f) => !f.startsWith('.') && f.endsWith(ext);\nconst starDotExtTestDot = (ext) => (f) => f.endsWith(ext);\nconst starDotExtTestNocase = (ext) => {\n ext = ext.toLowerCase();\n return (f) => !f.startsWith('.') && f.toLowerCase().endsWith(ext);\n};\nconst starDotExtTestNocaseDot = (ext) => {\n ext = ext.toLowerCase();\n return (f) => f.toLowerCase().endsWith(ext);\n};\nconst starDotStarRE = /^\\*+\\.\\*+$/;\nconst starDotStarTest = (f) => !f.startsWith('.') && f.includes('.');\nconst starDotStarTestDot = (f) => f !== '.' && f !== '..' && f.includes('.');\nconst dotStarRE = /^\\.\\*+$/;\nconst dotStarTest = (f) => f !== '.' && f !== '..' && f.startsWith('.');\nconst starRE = /^\\*+$/;\nconst starTest = (f) => f.length !== 0 && !f.startsWith('.');\nconst starTestDot = (f) => f.length !== 0 && f !== '.' && f !== '..';\nconst qmarksRE = /^\\?+([^+@!?\\*\\[\\(]*)?$/;\nconst qmarksTestNocase = ([$0, ext = '']) => {\n const noext = qmarksTestNoExt([$0]);\n if (!ext)\n return noext;\n ext = ext.toLowerCase();\n return (f) => noext(f) && f.toLowerCase().endsWith(ext);\n};\nconst qmarksTestNocaseDot = ([$0, ext = '']) => {\n const noext = qmarksTestNoExtDot([$0]);\n if (!ext)\n return noext;\n ext = ext.toLowerCase();\n return (f) => noext(f) && f.toLowerCase().endsWith(ext);\n};\nconst qmarksTestDot = ([$0, ext = '']) => {\n const noext = qmarksTestNoExtDot([$0]);\n return !ext ? noext : (f) => noext(f) && f.endsWith(ext);\n};\nconst qmarksTest = ([$0, ext = '']) => {\n const noext = qmarksTestNoExt([$0]);\n return !ext ? noext : (f) => noext(f) && f.endsWith(ext);\n};\nconst qmarksTestNoExt = ([$0]) => {\n const len = $0.length;\n return (f) => f.length === len && !f.startsWith('.');\n};\nconst qmarksTestNoExtDot = ([$0]) => {\n const len = $0.length;\n return (f) => f.length === len && f !== '.' && f !== '..';\n};\n/* c8 ignore start */\nconst defaultPlatform = (typeof process === 'object' && process\n ? (typeof process.env === 'object' &&\n process.env &&\n process.env.__MINIMATCH_TESTING_PLATFORM__) ||\n process.platform\n : 'posix');\nconst path = {\n win32: { sep: '\\\\' },\n posix: { sep: '/' },\n};\n/* c8 ignore stop */\nexport const sep = defaultPlatform === 'win32' ? path.win32.sep : path.posix.sep;\nminimatch.sep = sep;\nexport const GLOBSTAR = Symbol('globstar **');\nminimatch.GLOBSTAR = GLOBSTAR;\nconst plTypes = {\n '!': { open: '(?:(?!(?:', close: '))[^/]*?)' },\n '?': { open: '(?:', close: ')?' },\n '+': { open: '(?:', close: ')+' },\n '*': { open: '(?:', close: ')*' },\n '@': { open: '(?:', close: ')' },\n};\n// any single thing other than /\n// don't need to escape / when using new RegExp()\nconst qmark = '[^/]';\n// * => any number of characters\nconst star = qmark + '*?';\n// ** when dots are allowed. Anything goes, except .. and .\n// not (^ or / followed by one or two dots followed by $ or /),\n// followed by anything, any number of times.\nconst twoStarDot = '(?:(?!(?:\\\\/|^)(?:\\\\.{1,2})($|\\\\/)).)*?';\n// not a ^ or / followed by a dot,\n// followed by anything, any number of times.\nconst twoStarNoDot = '(?:(?!(?:\\\\/|^)\\\\.).)*?';\n// \"abc\" -> { a:true, b:true, c:true }\nconst charSet = (s) => s.split('').reduce((set, c) => {\n set[c] = true;\n return set;\n}, {});\n// characters that need to be escaped in RegExp.\nconst reSpecials = charSet('().*{}+?[]^$\\\\!');\n// characters that indicate we have to add the pattern start\nconst addPatternStartSet = charSet('[.(');\nexport const filter = (pattern, options = {}) => (p) => minimatch(p, pattern, options);\nminimatch.filter = filter;\nconst ext = (a, b = {}) => Object.assign({}, a, b);\nexport const defaults = (def) => {\n if (!def || typeof def !== 'object' || !Object.keys(def).length) {\n return minimatch;\n }\n const orig = minimatch;\n const m = (p, pattern, options = {}) => orig(p, pattern, ext(def, options));\n return Object.assign(m, {\n Minimatch: class Minimatch extends orig.Minimatch {\n constructor(pattern, options = {}) {\n super(pattern, ext(def, options));\n }\n static defaults(options) {\n return orig.defaults(ext(def, options)).Minimatch;\n }\n },\n unescape: (s, options = {}) => orig.unescape(s, ext(def, options)),\n escape: (s, options = {}) => orig.escape(s, ext(def, options)),\n filter: (pattern, options = {}) => orig.filter(pattern, ext(def, options)),\n defaults: (options) => orig.defaults(ext(def, options)),\n makeRe: (pattern, options = {}) => orig.makeRe(pattern, ext(def, options)),\n braceExpand: (pattern, options = {}) => orig.braceExpand(pattern, ext(def, options)),\n match: (list, pattern, options = {}) => orig.match(list, pattern, ext(def, options)),\n sep: orig.sep,\n GLOBSTAR: GLOBSTAR,\n });\n};\nminimatch.defaults = defaults;\n// Brace expansion:\n// a{b,c}d -> abd acd\n// a{b,}c -> abc ac\n// a{0..3}d -> a0d a1d a2d a3d\n// a{b,c{d,e}f}g -> abg acdfg acefg\n// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg\n//\n// Invalid sets are not expanded.\n// a{2..}b -> a{2..}b\n// a{b}c -> a{b}c\nexport const braceExpand = (pattern, options = {}) => {\n assertValidPattern(pattern);\n // Thanks to Yeting Li <https://github.com/yetingli> for\n // improving this regexp to avoid a ReDOS vulnerability.\n if (options.nobrace || !/\\{(?:(?!\\{).)*\\}/.test(pattern)) {\n // shortcut. no need to expand.\n return [pattern];\n }\n return expand(pattern);\n};\nminimatch.braceExpand = braceExpand;\nconst MAX_PATTERN_LENGTH = 1024 * 64;\nconst assertValidPattern = (pattern) => {\n if (typeof pattern !== 'string') {\n throw new TypeError('invalid pattern');\n }\n if (pattern.length > MAX_PATTERN_LENGTH) {\n throw new TypeError('pattern is too long');\n }\n};\n// parse a component of the expanded set.\n// At this point, no pattern may contain \"/\" in it\n// so we're going to return a 2d array, where each entry is the full\n// pattern, split on '/', and then turned into a regular expression.\n// A regexp is made at the end which joins each array with an\n// escaped /, and another full one which joins each regexp with |.\n//\n// Following the lead of Bash 4.1, note that \"**\" only has special meaning\n// when it is the *only* thing in a path portion. Otherwise, any series\n// of * is equivalent to a single *. Globstar behavior is enabled by\n// default, and can be disabled by setting options.noglobstar.\nexport const makeRe = (pattern, options = {}) => new Minimatch(pattern, options).makeRe();\nminimatch.makeRe = makeRe;\nexport const match = (list, pattern, options = {}) => {\n const mm = new Minimatch(pattern, options);\n list = list.filter(f => mm.match(f));\n if (mm.options.nonull && !list.length) {\n list.push(pattern);\n }\n return list;\n};\nminimatch.match = match;\n// replace stuff like \\* with *\nconst globUnescape = (s) => s.replace(/\\\\(.)/g, '$1');\nconst globMagic = /[?*]|[+@!]\\(.*?\\)|\\[|\\]/;\nconst regExpEscape = (s) => s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\nexport class Minimatch {\n options;\n set;\n pattern;\n windowsPathsNoEscape;\n nonegate;\n negate;\n comment;\n empty;\n preserveMultipleSlashes;\n partial;\n globSet;\n globParts;\n nocase;\n isWindows;\n platform;\n windowsNoMagicRoot;\n regexp;\n constructor(pattern, options = {}) {\n assertValidPattern(pattern);\n options = options || {};\n this.options = options;\n this.pattern = pattern;\n this.platform = options.platform || defaultPlatform;\n this.isWindows = this.platform === 'win32';\n this.windowsPathsNoEscape =\n !!options.windowsPathsNoEscape || options.allowWindowsEscape === false;\n if (this.windowsPathsNoEscape) {\n this.pattern = this.pattern.replace(/\\\\/g, '/');\n }\n this.preserveMultipleSlashes = !!options.preserveMultipleSlashes;\n this.regexp = null;\n this.negate = false;\n this.nonegate = !!options.nonegate;\n this.comment = false;\n this.empty = false;\n this.partial = !!options.partial;\n this.nocase = !!this.options.nocase;\n this.windowsNoMagicRoot =\n options.windowsNoMagicRoot !== undefined\n ? options.windowsNoMagicRoot\n : !!(this.isWindows && this.nocase);\n this.globSet = [];\n this.globParts = [];\n this.set = [];\n // make the set of regexps etc.\n this.make();\n }\n hasMagic() {\n if (this.options.magicalBraces && this.set.length > 1) {\n return true;\n }\n for (const pattern of this.set) {\n for (const part of pattern) {\n if (typeof part !== 'string')\n return true;\n }\n }\n return false;\n }\n debug(..._) { }\n make() {\n const pattern = this.pattern;\n const options = this.options;\n // empty patterns and comments match nothing.\n if (!options.nocomment && pattern.charAt(0) === '#') {\n this.comment = true;\n return;\n }\n if (!pattern) {\n this.empty = true;\n return;\n }\n // step 1: figure out negation, etc.\n this.parseNegate();\n // step 2: expand braces\n this.globSet = [...new Set(this.braceExpand())];\n if (options.debug) {\n this.debug = (...args) => console.error(...args);\n }\n this.debug(this.pattern, this.globSet);\n // step 3: now we have a set, so turn each one into a series of\n // path-portion matching patterns.\n // These will be regexps, except in the case of \"**\", which is\n // set to the GLOBSTAR object for globstar behavior,\n // and will not contain any / characters\n //\n // First, we preprocess to make the glob pattern sets a bit simpler\n // and deduped. There are some perf-killing patterns that can cause\n // problems with a glob walk, but we can simplify them down a bit.\n const rawGlobParts = this.globSet.map(s => this.slashSplit(s));\n this.globParts = this.preprocess(rawGlobParts);\n this.debug(this.pattern, this.globParts);\n // glob --> regexps\n let set = this.globParts.map((s, _, __) => {\n if (this.isWindows && this.windowsNoMagicRoot) {\n // check if it's a drive or unc path.\n const isUNC = s[0] === '' &&\n s[1] === '' &&\n (s[2] === '?' || !globMagic.test(s[2])) &&\n !globMagic.test(s[3]);\n const isDrive = /^[a-z]:/i.test(s[0]);\n if (isUNC) {\n return [...s.slice(0, 4), ...s.slice(4).map(ss => this.parse(ss))];\n }\n else if (isDrive) {\n return [s[0], ...s.slice(1).map(ss => this.parse(ss))];\n }\n }\n return s.map(ss => this.parse(ss));\n });\n this.debug(this.pattern, set);\n // filter out everything that didn't compile properly.\n this.set = set.filter(s => s.indexOf(false) === -1);\n // do not treat the ? in UNC paths as magic\n if (this.isWindows) {\n for (let i = 0; i < this.set.length; i++) {\n const p = this.set[i];\n if (p[0] === '' &&\n p[1] === '' &&\n this.globParts[i][2] === '?' &&\n typeof p[3] === 'string' &&\n /^[a-z]:$/i.test(p[3])) {\n p[2] = '?';\n }\n }\n }\n this.debug(this.pattern, this.set);\n }\n // various transforms to equivalent pattern sets that are\n // faster to process in a filesystem walk. The goal is to\n // eliminate what we can, and push all ** patterns as far\n // to the right as possible, even if it increases the number\n // of patterns that we have to process.\n preprocess(globParts) {\n // if we're not in globstar mode, then turn all ** into *\n if (this.options.noglobstar) {\n for (let i = 0; i < globParts.length; i++) {\n for (let j = 0; j < globParts[i].length; j++) {\n if (globParts[i][j] === '**') {\n globParts[i][j] = '*';\n }\n }\n }\n }\n const { optimizationLevel = 1 } = this.options;\n if (optimizationLevel >= 2) {\n // aggressive optimization for the purpose of fs walking\n globParts = this.firstPhasePreProcess(globParts);\n globParts = this.secondPhasePreProcess(globParts);\n }\n else if (optimizationLevel >= 1) {\n // just basic optimizations to remove some .. parts\n globParts = this.levelOneOptimize(globParts);\n }\n else {\n globParts = this.adjascentGlobstarOptimize(globParts);\n }\n return globParts;\n }\n // just get rid of adjascent ** portions\n adjascentGlobstarOptimize(globParts) {\n return globParts.map(parts => {\n let gs = -1;\n while (-1 !== (gs = parts.indexOf('**', gs + 1))) {\n let i = gs;\n while (parts[i + 1] === '**') {\n i++;\n }\n if (i !== gs) {\n parts.splice(gs, i - gs);\n }\n }\n return parts;\n });\n }\n // get rid of adjascent ** and resolve .. portions\n levelOneOptimize(globParts) {\n return globParts.map(parts => {\n parts = parts.reduce((set, part) => {\n const prev = set[set.length - 1];\n if (part === '**' && prev === '**') {\n return set;\n }\n if (part === '..') {\n if (prev && prev !== '..' && prev !== '.' && prev !== '**') {\n set.pop();\n return set;\n }\n }\n set.push(part);\n return set;\n }, []);\n return parts.length === 0 ? [''] : parts;\n });\n }\n levelTwoFileOptimize(parts) {\n if (!Array.isArray(parts)) {\n parts = this.slashSplit(parts);\n }\n let didSomething = false;\n do {\n didSomething = false;\n // <pre>/<e>/<rest> -> <pre>/<rest>\n if (!this.preserveMultipleSlashes) {\n for (let i = 1; i < parts.length - 1; i++) {\n const p = parts[i];\n // don't squeeze out UNC patterns\n if (i === 1 && p === '' && parts[0] === '')\n continue;\n if (p === '.' || p === '') {\n didSomething = true;\n parts.splice(i, 1);\n i--;\n }\n }\n if (parts[0] === '.' &&\n parts.length === 2 &&\n (parts[1] === '.' || parts[1] === '')) {\n didSomething = true;\n parts.pop();\n }\n }\n // <pre>/<p>/../<rest> -> <pre>/<rest>\n let dd = 0;\n while (-1 !== (dd = parts.indexOf('..', dd + 1))) {\n const p = parts[dd - 1];\n if (p && p !== '.' && p !== '..' && p !== '**') {\n didSomething = true;\n parts.splice(dd - 1, 2);\n dd -= 2;\n }\n }\n } while (didSomething);\n return parts.length === 0 ? [''] : parts;\n }\n // First phase: single-pattern processing\n // <pre> is 1 or more portions\n // <rest> is 1 or more portions\n // <p> is any portion other than ., .., '', or **\n // <e> is . or ''\n //\n // **/.. is *brutal* for filesystem walking performance, because\n // it effectively resets the recursive walk each time it occurs,\n // and ** cannot be reduced out by a .. pattern part like a regexp\n // or most strings (other than .., ., and '') can be.\n //\n // <pre>/**/../<p>/<p>/<rest> -> {<pre>/../<p>/<p>/<rest>,<pre>/**/<p>/<p>/<rest>}\n // <pre>/<e>/<rest> -> <pre>/<rest>\n // <pre>/<p>/../<rest> -> <pre>/<rest>\n // **/**/<rest> -> **/<rest>\n //\n // **/*/<rest> -> */**/<rest> <== not valid because ** doesn't follow\n // this WOULD be allowed if ** did follow symlinks, or * didn't\n firstPhasePreProcess(globParts) {\n let didSomething = false;\n do {\n didSomething = false;\n // <pre>/**/../<p>/<p>/<rest> -> {<pre>/../<p>/<p>/<rest>,<pre>/**/<p>/<p>/<rest>}\n for (let parts of globParts) {\n let gs = -1;\n while (-1 !== (gs = parts.indexOf('**', gs + 1))) {\n let gss = gs;\n while (parts[gss + 1] === '**') {\n // <pre>/**/**/<rest> -> <pre>/**/<rest>\n gss++;\n }\n // eg, if gs is 2 and gss is 4, that means we have 3 **\n // parts, and can remove 2 of them.\n if (gss > gs) {\n parts.splice(gs + 1, gss - gs);\n }\n let next = parts[gs + 1];\n const p = parts[gs + 2];\n const p2 = parts[gs + 3];\n if (next !== '..')\n continue;\n if (!p ||\n p === '.' ||\n p === '..' ||\n !p2 ||\n p2 === '.' ||\n p2 === '..') {\n continue;\n }\n didSomething = true;\n // edit parts in place, and push the new one\n parts.splice(gs, 1);\n const other = parts.slice(0);\n other[gs] = '**';\n globParts.push(other);\n gs--;\n }\n // <pre>/<e>/<rest> -> <pre>/<rest>\n if (!this.preserveMultipleSlashes) {\n for (let i = 1; i < parts.length - 1; i++) {\n const p = parts[i];\n // don't squeeze out UNC patterns\n if (i === 1 && p === '' && parts[0] === '')\n continue;\n if (p === '.' || p === '') {\n didSomething = true;\n parts.splice(i, 1);\n i--;\n }\n }\n if (parts[0] === '.' &&\n parts.length === 2 &&\n (parts[1] === '.' || parts[1] === '')) {\n didSomething = true;\n parts.pop();\n }\n }\n // <pre>/<p>/../<rest> -> <pre>/<rest>\n let dd = 0;\n while (-1 !== (dd = parts.indexOf('..', dd + 1))) {\n const p = parts[dd - 1];\n if (p && p !== '.' && p !== '..' && p !== '**') {\n didSomething = true;\n const needDot = dd === 1 && parts[dd + 1] === '**';\n const splin = needDot ? ['.'] : [];\n parts.splice(dd - 1, 2, ...splin);\n if (parts.length === 0)\n parts.push('');\n dd -= 2;\n }\n }\n }\n } while (didSomething);\n return globParts;\n }\n // second phase: multi-pattern dedupes\n // {<pre>/*/<rest>,<pre>/<p>/<rest>} -> <pre>/*/<rest>\n // {<pre>/<rest>,<pre>/<rest>} -> <pre>/<rest>\n // {<pre>/**/<rest>,<pre>/<rest>} -> <pre>/**/<rest>\n //\n // {<pre>/**/<rest>,<pre>/**/<p>/<rest>} -> <pre>/**/<rest>\n // ^-- not valid because ** doens't follow symlinks\n secondPhasePreProcess(globParts) {\n for (let i = 0; i < globParts.length - 1; i++) {\n for (let j = i + 1; j < globParts.length; j++) {\n const matched = this.partsMatch(globParts[i], globParts[j], !this.preserveMultipleSlashes);\n if (!matched)\n continue;\n globParts[i] = matched;\n globParts[j] = [];\n }\n }\n return globParts.filter(gs => gs.length);\n }\n partsMatch(a, b, emptyGSMatch = false) {\n let ai = 0;\n let bi = 0;\n let result = [];\n let which = '';\n while (ai < a.length && bi < b.length) {\n if (a[ai] === b[bi]) {\n result.push(which === 'b' ? b[bi] : a[ai]);\n ai++;\n bi++;\n }\n else if (emptyGSMatch && a[ai] === '**' && b[bi] === a[ai + 1]) {\n result.push(a[ai]);\n ai++;\n }\n else if (emptyGSMatch && b[bi] === '**' && a[ai] === b[bi + 1]) {\n result.push(b[bi]);\n bi++;\n }\n else if (a[ai] === '*' &&\n b[bi] &&\n (this.options.dot || !b[bi].startsWith('.')) &&\n b[bi] !== '**') {\n if (which === 'b')\n return false;\n which = 'a';\n result.push(a[ai]);\n ai++;\n bi++;\n }\n else if (b[bi] === '*' &&\n a[ai] &&\n (this.options.dot || !a[ai].startsWith('.')) &&\n a[ai] !== '**') {\n if (which === 'a')\n return false;\n which = 'b';\n result.push(b[bi]);\n ai++;\n bi++;\n }\n else {\n return false;\n }\n }\n // if we fall out of the loop, it means they two are identical\n // as long as their lengths match\n return a.length === b.length && result;\n }\n parseNegate() {\n if (this.nonegate)\n return;\n const pattern = this.pattern;\n let negate = false;\n let negateOffset = 0;\n for (let i = 0; i < pattern.length && pattern.charAt(i) === '!'; i++) {\n negate = !negate;\n negateOffset++;\n }\n if (negateOffset)\n this.pattern = pattern.slice(negateOffset);\n this.negate = negate;\n }\n // set partial to true to test if, for example,\n // \"/a/b\" matches the start of \"/*/b/*/d\"\n // Partial means, if you run out of file before you run\n // out of pattern, then that's fine, as long as all\n // the parts match.\n matchOne(file, pattern, partial = false) {\n const options = this.options;\n // a UNC pattern like //?/c:/* can match a path like c:/x\n // and vice versa\n if (this.isWindows) {\n const fileUNC = file[0] === '' &&\n file[1] === '' &&\n file[2] === '?' &&\n typeof file[3] === 'string' &&\n /^[a-z]:$/i.test(file[3]);\n const patternUNC = pattern[0] === '' &&\n pattern[1] === '' &&\n pattern[2] === '?' &&\n typeof pattern[3] === 'string' &&\n /^[a-z]:$/i.test(pattern[3]);\n if (fileUNC && patternUNC) {\n const fd = file[3];\n const pd = pattern[3];\n if (fd.toLowerCase() === pd.toLowerCase()) {\n file[3] = pd;\n }\n }\n else if (patternUNC && typeof file[0] === 'string') {\n const pd = pattern[3];\n const fd = file[0];\n if (pd.toLowerCase() === fd.toLowerCase()) {\n pattern[3] = fd;\n pattern = pattern.slice(3);\n }\n }\n else if (fileUNC && typeof pattern[0] === 'string') {\n const fd = file[3];\n if (fd.toLowerCase() === pattern[0].toLowerCase()) {\n pattern[0] = fd;\n file = file.slice(3);\n }\n }\n }\n // resolve and reduce . and .. portions in the file as well.\n // dont' need to do the second phase, because it's only one string[]\n const { optimizationLevel = 1 } = this.options;\n if (optimizationLevel >= 2) {\n file = this.levelTwoFileOptimize(file);\n }\n this.debug('matchOne', this, { file, pattern });\n this.debug('matchOne', file.length, pattern.length);\n for (var fi = 0, pi = 0, fl = file.length, pl = pattern.length; fi < fl && pi < pl; fi++, pi++) {\n this.debug('matchOne loop');\n var p = pattern[pi];\n var f = file[fi];\n this.debug(pattern, p, f);\n // should be impossible.\n // some invalid regexp stuff in the set.\n /* c8 ignore start */\n if (p === false) {\n return false;\n }\n /* c8 ignore stop */\n if (p === GLOBSTAR) {\n this.debug('GLOBSTAR', [pattern, p, f]);\n // \"**\"\n // a/**/b/**/c would match the following:\n // a/b/x/y/z/c\n // a/x/y/z/b/c\n // a/b/x/b/x/c\n // a/b/c\n // To do this, take the rest of the pattern after\n // the **, and see if it would match the file remainder.\n // If so, return success.\n // If not, the ** \"swallows\" a segment, and try again.\n // This is recursively awful.\n //\n // a/**/b/**/c matching a/b/x/y/z/c\n // - a matches a\n // - doublestar\n // - matchOne(b/x/y/z/c, b/**/c)\n // - b matches b\n // - doublestar\n // - matchOne(x/y/z/c, c) -> no\n // - matchOne(y/z/c, c) -> no\n // - matchOne(z/c, c) -> no\n // - matchOne(c, c) yes, hit\n var fr = fi;\n var pr = pi + 1;\n if (pr === pl) {\n this.debug('** at the end');\n // a ** at the end will just swallow the rest.\n // We have found a match.\n // however, it will not swallow /.x, unless\n // options.dot is set.\n // . and .. are *never* matched by **, for explosively\n // exponential reasons.\n for (; fi < fl; fi++) {\n if (file[fi] === '.' ||\n file[fi] === '..' ||\n (!options.dot && file[fi].charAt(0) === '.'))\n return false;\n }\n return true;\n }\n // ok, let's see if we can swallow whatever we can.\n while (fr < fl) {\n var swallowee = file[fr];\n this.debug('\\nglobstar while', file, fr, pattern, pr, swallowee);\n // XXX remove this slice. Just pass the start index.\n if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) {\n this.debug('globstar found match!', fr, fl, swallowee);\n // found a match.\n return true;\n }\n else {\n // can't swallow \".\" or \"..\" ever.\n // can only swallow \".foo\" when explicitly asked.\n if (swallowee === '.' ||\n swallowee === '..' ||\n (!options.dot && swallowee.charAt(0) === '.')) {\n this.debug('dot detected!', file, fr, pattern, pr);\n break;\n }\n // ** swallows a segment, and continue.\n this.debug('globstar swallow a segment, and continue');\n fr++;\n }\n }\n // no match was found.\n // However, in partial mode, we can't say this is necessarily over.\n /* c8 ignore start */\n if (partial) {\n // ran out of file\n this.debug('\\n>>> no match, partial?', file, fr, pattern, pr);\n if (fr === fl) {\n return true;\n }\n }\n /* c8 ignore stop */\n return false;\n }\n // something other than **\n // non-magic patterns just have to match exactly\n // patterns with magic have been turned into regexps.\n let hit;\n if (typeof p === 'string') {\n hit = f === p;\n this.debug('string match', p, f, hit);\n }\n else {\n hit = p.test(f);\n this.debug('pattern match', p, f, hit);\n }\n if (!hit)\n return false;\n }\n // Note: ending in / means that we'll get a final \"\"\n // at the end of the pattern. This can only match a\n // corresponding \"\" at the end of the file.\n // If the file ends in /, then it can only match a\n // a pattern that ends in /, unless the pattern just\n // doesn't have any more for it. But, a/b/ should *not*\n // match \"a/b/*\", even though \"\" matches against the\n // [^/]*? pattern, except in partial mode, where it might\n // simply not be reached yet.\n // However, a/b/ should still satisfy a/*\n // now either we fell off the end of the pattern, or we're done.\n if (fi === fl && pi === pl) {\n // ran out of pattern and filename at the same time.\n // an exact hit!\n return true;\n }\n else if (fi === fl) {\n // ran out of file, but still had pattern left.\n // this is ok if we're doing the match as part of\n // a glob fs traversal.\n return partial;\n }\n else if (pi === pl) {\n // ran out of pattern, still have file left.\n // this is only acceptable if we're on the very last\n // empty segment of a file with a trailing slash.\n // a/* should match a/b/\n return fi === fl - 1 && file[fi] === '';\n /* c8 ignore start */\n }\n else {\n // should be unreachable.\n throw new Error('wtf?');\n }\n /* c8 ignore stop */\n }\n braceExpand() {\n return braceExpand(this.pattern, this.options);\n }\n parse(pattern) {\n assertValidPattern(pattern);\n const options = this.options;\n // shortcuts\n if (pattern === '**')\n return GLOBSTAR;\n if (pattern === '')\n return '';\n // far and away, the most common glob pattern parts are\n // *, *.*, and *.<ext> Add a fast check method for those.\n let m;\n let fastTest = null;\n if ((m = pattern.match(starRE))) {\n fastTest = options.dot ? starTestDot : starTest;\n }\n else if ((m = pattern.match(starDotExtRE))) {\n fastTest = (options.nocase\n ? options.dot\n ? starDotExtTestNocaseDot\n : starDotExtTestNocase\n : options.dot\n ? starDotExtTestDot\n : starDotExtTest)(m[1]);\n }\n else if ((m = pattern.match(qmarksRE))) {\n fastTest = (options.nocase\n ? options.dot\n ? qmarksTestNocaseDot\n : qmarksTestNocase\n : options.dot\n ? qmarksTestDot\n : qmarksTest)(m);\n }\n else if ((m = pattern.match(starDotStarRE))) {\n fastTest = options.dot ? starDotStarTestDot : starDotStarTest;\n }\n else if ((m = pattern.match(dotStarRE))) {\n fastTest = dotStarTest;\n }\n let re = '';\n let hasMagic = false;\n let escaping = false;\n // ? => one single character\n const patternListStack = [];\n const negativeLists = [];\n let stateChar = false;\n let uflag = false;\n let pl;\n // . and .. never match anything that doesn't start with .,\n // even when options.dot is set. However, if the pattern\n // starts with ., then traversal patterns can match.\n let dotTravAllowed = pattern.charAt(0) === '.';\n let dotFileAllowed = options.dot || dotTravAllowed;\n const patternStart = () => dotTravAllowed\n ? ''\n : dotFileAllowed\n ? '(?!(?:^|\\\\/)\\\\.{1,2}(?:$|\\\\/))'\n : '(?!\\\\.)';\n const subPatternStart = (p) => p.charAt(0) === '.'\n ? ''\n : options.dot\n ? '(?!(?:^|\\\\/)\\\\.{1,2}(?:$|\\\\/))'\n : '(?!\\\\.)';\n const clearStateChar = () => {\n if (stateChar) {\n // we had some state-tracking character\n // that wasn't consumed by this pass.\n switch (stateChar) {\n case '*':\n re += star;\n hasMagic = true;\n break;\n case '?':\n re += qmark;\n hasMagic = true;\n break;\n default:\n re += '\\\\' + stateChar;\n break;\n }\n this.debug('clearStateChar %j %j', stateChar, re);\n stateChar = false;\n }\n };\n for (let i = 0, c; i < pattern.length && (c = pattern.charAt(i)); i++) {\n this.debug('%s\\t%s %s %j', pattern, i, re, c);\n // skip over any that are escaped.\n if (escaping) {\n // completely not allowed, even escaped.\n // should be impossible.\n /* c8 ignore start */\n if (c === '/') {\n return false;\n }\n /* c8 ignore stop */\n if (reSpecials[c]) {\n re += '\\\\';\n }\n re += c;\n escaping = false;\n continue;\n }\n switch (c) {\n // Should already be path-split by now.\n /* c8 ignore start */\n case '/': {\n return false;\n }\n /* c8 ignore stop */\n case '\\\\':\n clearStateChar();\n escaping = true;\n continue;\n // the various stateChar values\n // for the \"extglob\" stuff.\n case '?':\n case '*':\n case '+':\n case '@':\n case '!':\n this.debug('%s\\t%s %s %j <-- stateChar', pattern, i, re, c);\n // if we already have a stateChar, then it means\n // that there was something like ** or +? in there.\n // Handle the stateChar, then proceed with this one.\n this.debug('call clearStateChar %j', stateChar);\n clearStateChar();\n stateChar = c;\n // if extglob is disabled, then +(asdf|foo) isn't a thing.\n // just clear the statechar *now*, rather than even diving into\n // the patternList stuff.\n if (options.noext)\n clearStateChar();\n continue;\n case '(': {\n if (!stateChar) {\n re += '\\\\(';\n continue;\n }\n const plEntry = {\n type: stateChar,\n start: i - 1,\n reStart: re.length,\n open: plTypes[stateChar].open,\n close: plTypes[stateChar].close,\n };\n this.debug(this.pattern, '\\t', plEntry);\n patternListStack.push(plEntry);\n // negation is (?:(?!(?:js)(?:<rest>))[^/]*)\n re += plEntry.open;\n // next entry starts with a dot maybe?\n if (plEntry.start === 0 && plEntry.type !== '!') {\n dotTravAllowed = true;\n re += subPatternStart(pattern.slice(i + 1));\n }\n this.debug('plType %j %j', stateChar, re);\n stateChar = false;\n continue;\n }\n case ')': {\n const plEntry = patternListStack[patternListStack.length - 1];\n if (!plEntry) {\n re += '\\\\)';\n continue;\n }\n patternListStack.pop();\n // closing an extglob\n clearStateChar();\n hasMagic = true;\n pl = plEntry;\n // negation is (?:(?!js)[^/]*)\n // The others are (?:<pattern>)<type>\n re += pl.close;\n if (pl.type === '!') {\n negativeLists.push(Object.assign(pl, { reEnd: re.length }));\n }\n continue;\n }\n case '|': {\n const plEntry = patternListStack[patternListStack.length - 1];\n if (!plEntry) {\n re += '\\\\|';\n continue;\n }\n clearStateChar();\n re += '|';\n // next subpattern can start with a dot?\n if (plEntry.start === 0 && plEntry.type !== '!') {\n dotTravAllowed = true;\n re += subPatternStart(pattern.slice(i + 1));\n }\n continue;\n }\n // these are mostly the same in regexp and glob\n case '[':\n // swallow any state-tracking char before the [\n clearStateChar();\n const [src, needUflag, consumed, magic] = parseClass(pattern, i);\n if (consumed) {\n re += src;\n uflag = uflag || needUflag;\n i += consumed - 1;\n hasMagic = hasMagic || magic;\n }\n else {\n re += '\\\\[';\n }\n continue;\n case ']':\n re += '\\\\' + c;\n continue;\n default:\n // swallow any state char that wasn't consumed\n clearStateChar();\n re += regExpEscape(c);\n break;\n } // switch\n } // for\n // handle the case where we had a +( thing at the *end*\n // of the pattern.\n // each pattern list stack adds 3 chars, and we need to go through\n // and escape any | chars that were passed through as-is for the regexp.\n // Go through and escape them, taking care not to double-escape any\n // | chars that were already escaped.\n for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) {\n let tail;\n tail = re.slice(pl.reStart + pl.open.length);\n this.debug(this.pattern, 'setting tail', re, pl);\n // maybe some even number of \\, then maybe 1 \\, followed by a |\n tail = tail.replace(/((?:\\\\{2}){0,64})(\\\\?)\\|/g, (_, $1, $2) => {\n if (!$2) {\n // the | isn't already escaped, so escape it.\n $2 = '\\\\';\n // should already be done\n /* c8 ignore start */\n }\n /* c8 ignore stop */\n // need to escape all those slashes *again*, without escaping the\n // one that we need for escaping the | character. As it works out,\n // escaping an even number of slashes can be done by simply repeating\n // it exactly after itself. That's why this trick works.\n //\n // I am sorry that you have to see this.\n return $1 + $1 + $2 + '|';\n });\n this.debug('tail=%j\\n %s', tail, tail, pl, re);\n const t = pl.type === '*' ? star : pl.type === '?' ? qmark : '\\\\' + pl.type;\n hasMagic = true;\n re = re.slice(0, pl.reStart) + t + '\\\\(' + tail;\n }\n // handle trailing things that only matter at the very end.\n clearStateChar();\n if (escaping) {\n // trailing \\\\\n re += '\\\\\\\\';\n }\n // only need to apply the nodot start if the re starts with\n // something that could conceivably capture a dot\n const addPatternStart = addPatternStartSet[re.charAt(0)];\n // Hack to work around lack of negative lookbehind in JS\n // A pattern like: *.!(x).!(y|z) needs to ensure that a name\n // like 'a.xyz.yz' doesn't match. So, the first negative\n // lookahead, has to look ALL the way ahead, to the end of\n // the pattern.\n for (let n = negativeLists.length - 1; n > -1; n--) {\n const nl = negativeLists[n];\n const nlBefore = re.slice(0, nl.reStart);\n const nlFirst = re.slice(nl.reStart, nl.reEnd - 8);\n let nlAfter = re.slice(nl.reEnd);\n const nlLast = re.slice(nl.reEnd - 8, nl.reEnd) + nlAfter;\n // Handle nested stuff like *(*.js|!(*.json)), where open parens\n // mean that we should *not* include the ) in the bit that is considered\n // \"after\" the negated section.\n const closeParensBefore = nlBefore.split(')').length;\n const openParensBefore = nlBefore.split('(').length - closeParensBefore;\n let cleanAfter = nlAfter;\n for (let i = 0; i < openParensBefore; i++) {\n cleanAfter = cleanAfter.replace(/\\)[+*?]?/, '');\n }\n nlAfter = cleanAfter;\n const dollar = nlAfter === '' ? '(?:$|\\\\/)' : '';\n re = nlBefore + nlFirst + nlAfter + dollar + nlLast;\n }\n // if the re is not \"\" at this point, then we need to make sure\n // it doesn't match against an empty path part.\n // Otherwise a/* will match a/, which it should not.\n if (re !== '' && hasMagic) {\n re = '(?=.)' + re;\n }\n if (addPatternStart) {\n re = patternStart() + re;\n }\n // if it's nocase, and the lcase/uppercase don't match, it's magic\n if (options.nocase && !hasMagic && !options.nocaseMagicOnly) {\n hasMagic = pattern.toUpperCase() !== pattern.toLowerCase();\n }\n // skip the regexp for non-magical patterns\n // unescape anything in it, though, so that it'll be\n // an exact match against a file etc.\n if (!hasMagic) {\n return globUnescape(re);\n }\n const flags = (options.nocase ? 'i' : '') + (uflag ? 'u' : '');\n try {\n const ext = fastTest\n ? {\n _glob: pattern,\n _src: re,\n test: fastTest,\n }\n : {\n _glob: pattern,\n _src: re,\n };\n return Object.assign(new RegExp('^' + re + '$', flags), ext);\n /* c8 ignore start */\n }\n catch (er) {\n // should be impossible\n // If it was an invalid regular expression, then it can't match\n // anything. This trick looks for a character after the end of\n // the string, which is of course impossible, except in multi-line\n // mode, but it's not a /m regex.\n this.debug('invalid regexp', er);\n return new RegExp('$.');\n }\n /* c8 ignore stop */\n }\n makeRe() {\n if (this.regexp || this.regexp === false)\n return this.regexp;\n // at this point, this.set is a 2d array of partial\n // pattern strings, or \"**\".\n //\n // It's better to use .match(). This function shouldn't\n // be used, really, but it's pretty convenient sometimes,\n // when you just want to work with a regex.\n const set = this.set;\n if (!set.length) {\n this.regexp = false;\n return this.regexp;\n }\n const options = this.options;\n const twoStar = options.noglobstar\n ? star\n : options.dot\n ? twoStarDot\n : twoStarNoDot;\n const flags = options.nocase ? 'i' : '';\n // regexpify non-globstar patterns\n // if ** is only item, then we just do one twoStar\n // if ** is first, and there are more, prepend (\\/|twoStar\\/)? to next\n // if ** is last, append (\\/twoStar|) to previous\n // if ** is in the middle, append (\\/|\\/twoStar\\/) to previous\n // then filter out GLOBSTAR symbols\n let re = set\n .map(pattern => {\n const pp = pattern.map(p => typeof p === 'string'\n ? regExpEscape(p)\n : p === GLOBSTAR\n ? GLOBSTAR\n : p._src);\n pp.forEach((p, i) => {\n const next = pp[i + 1];\n const prev = pp[i - 1];\n if (p !== GLOBSTAR || prev === GLOBSTAR) {\n return;\n }\n if (prev === undefined) {\n if (next !== undefined && next !== GLOBSTAR) {\n pp[i + 1] = '(?:\\\\/|' + twoStar + '\\\\/)?' + next;\n }\n else {\n pp[i] = twoStar;\n }\n }\n else if (next === undefined) {\n pp[i - 1] = prev + '(?:\\\\/|' + twoStar + ')?';\n }\n else if (next !== GLOBSTAR) {\n pp[i - 1] = prev + '(?:\\\\/|\\\\/' + twoStar + '\\\\/)' + next;\n pp[i + 1] = GLOBSTAR;\n }\n });\n return pp.filter(p => p !== GLOBSTAR).join('/');\n })\n .join('|');\n // must match entire pattern\n // ending in a * or ** will make it less strict.\n re = '^(?:' + re + ')$';\n // can match anything, as long as it's not this.\n if (this.negate)\n re = '^(?!' + re + ').*$';\n try {\n this.regexp = new RegExp(re, flags);\n /* c8 ignore start */\n }\n catch (ex) {\n // should be impossible\n this.regexp = false;\n }\n /* c8 ignore stop */\n return this.regexp;\n }\n slashSplit(p) {\n // if p starts with // on windows, we preserve that\n // so that UNC paths aren't broken. Otherwise, any number of\n // / characters are coalesced into one, unless\n // preserveMultipleSlashes is set to true.\n if (this.preserveMultipleSlashes) {\n return p.split('/');\n }\n else if (this.isWindows && /^\\/\\/[^\\/]+/.test(p)) {\n // add an extra '' for the one we lose\n return ['', ...p.split(/\\/+/)];\n }\n else {\n return p.split(/\\/+/);\n }\n }\n match(f, partial = this.partial) {\n this.debug('match', f, this.pattern);\n // short-circuit in the case of busted things.\n // comments, etc.\n if (this.comment) {\n return false;\n }\n if (this.empty) {\n return f === '';\n }\n if (f === '/' && partial) {\n return true;\n }\n const options = this.options;\n // windows: need to use /, not \\\n if (this.isWindows) {\n f = f.split('\\\\').join('/');\n }\n // treat the test path as a set of pathparts.\n const ff = this.slashSplit(f);\n this.debug(this.pattern, 'split', ff);\n // just ONE of the pattern sets in this.set needs to match\n // in order for it to be valid. If negating, then just one\n // match means that we have failed.\n // Either way, return on the first hit.\n const set = this.set;\n this.debug(this.pattern, 'set', set);\n // Find the basename of the path by looking for the last non-empty segment\n let filename = ff[ff.length - 1];\n if (!filename) {\n for (let i = ff.length - 2; !filename && i >= 0; i--) {\n filename = ff[i];\n }\n }\n for (let i = 0; i < set.length; i++) {\n const pattern = set[i];\n let file = ff;\n if (options.matchBase && pattern.length === 1) {\n file = [filename];\n }\n const hit = this.matchOne(file, pattern, partial);\n if (hit) {\n if (options.flipNegate) {\n return true;\n }\n return !this.negate;\n }\n }\n // didn't get any hits. this is success if it's a negative\n // pattern, failure otherwise.\n if (options.flipNegate) {\n return false;\n }\n return this.negate;\n }\n static defaults(def) {\n return minimatch.defaults(def).Minimatch;\n }\n}\n/* c8 ignore start */\nexport { escape } from './escape.js';\nexport { unescape } from './unescape.js';\n/* c8 ignore stop */\nminimatch.Minimatch = Minimatch;\nminimatch.escape = escape;\nminimatch.unescape = unescape;\n//# sourceMappingURL=index.js.map","export function convertResponseHeaders(headers) {\n const output = {};\n for (const key of headers.keys()) {\n output[key] = headers.get(key);\n }\n return output;\n}\nexport function mergeHeaders(...headerPayloads) {\n if (headerPayloads.length === 0)\n return {};\n const headerKeys = {};\n return headerPayloads.reduce((output, headers) => {\n Object.keys(headers).forEach(header => {\n const lowerHeader = header.toLowerCase();\n if (headerKeys.hasOwnProperty(lowerHeader)) {\n output[headerKeys[lowerHeader]] = headers[header];\n }\n else {\n headerKeys[lowerHeader] = header;\n output[header] = headers[header];\n }\n });\n return output;\n }, {});\n}\n","/**\n * Escape all magic characters in a glob pattern.\n *\n * If the {@link windowsPathsNoEscape | GlobOptions.windowsPathsNoEscape}\n * option is used, then characters are escaped by wrapping in `[]`, because\n * a magic character wrapped in a character class can only be satisfied by\n * that exact character. In this mode, `\\` is _not_ escaped, because it is\n * not interpreted as a magic character, but instead as a path separator.\n */\nexport const escape = (s, { windowsPathsNoEscape = false, } = {}) => {\n // don't need to escape +@! because we escape the parens\n // that make those magic, and escaping ! as [!] isn't valid,\n // because [!]] is a valid glob class meaning not ']'.\n return windowsPathsNoEscape\n ? s.replace(/[?*()[\\]]/g, '[$&]')\n : s.replace(/[?*()[\\]\\\\]/g, '\\\\$&');\n};\n//# sourceMappingURL=escape.js.map","/**\n * Un-escape a string that has been escaped with {@link escape}.\n *\n * If the {@link windowsPathsNoEscape} option is used, then square-brace\n * escapes are removed, but not backslash escapes. For example, it will turn\n * the string `'[*]'` into `*`, but it will not turn `'\\\\*'` into `'*'`,\n * becuase `\\` is a path separator in `windowsPathsNoEscape` mode.\n *\n * When `windowsPathsNoEscape` is not set, then both brace escapes and\n * backslash escapes are removed.\n *\n * Slashes (and backslashes in `windowsPathsNoEscape` mode) cannot be escaped\n * or unescaped.\n */\nexport const unescape = (s, { windowsPathsNoEscape = false, } = {}) => {\n return windowsPathsNoEscape\n ? s.replace(/\\[([^\\/\\\\])\\]/g, '$1')\n : s.replace(/((?!\\\\).|^)\\[([^\\/\\\\])\\]/g, '$1$2').replace(/\\\\([^\\/])/g, '$1');\n};\n//# sourceMappingURL=unescape.js.map","import path from \"path-posix\";\nimport { XMLParser } from \"fast-xml-parser\";\nimport nestedProp from \"nested-property\";\nimport { encodePath, normalisePath } from \"./path.js\";\nvar PropertyType;\n(function (PropertyType) {\n PropertyType[\"Array\"] = \"array\";\n PropertyType[\"Object\"] = \"object\";\n PropertyType[\"Original\"] = \"original\";\n})(PropertyType || (PropertyType = {}));\nfunction getParser() {\n return new XMLParser({\n removeNSPrefix: true,\n numberParseOptions: {\n hex: true,\n leadingZeros: false\n }\n // We don't use the processors here as decoding is done manually\n // later on - decoding early would break some path checks.\n });\n}\nfunction getPropertyOfType(obj, prop, type = PropertyType.Original) {\n const val = nestedProp.get(obj, prop);\n if (type === \"array\" && Array.isArray(val) === false) {\n return [val];\n }\n else if (type === \"object\" && Array.isArray(val)) {\n return val[0];\n }\n return val;\n}\nfunction normaliseResponse(response) {\n const output = Object.assign({}, response);\n // Only either status OR propstat is allowed\n if (output.status) {\n nestedProp.set(output, \"status\", getPropertyOfType(output, \"status\", PropertyType.Object));\n }\n else {\n nestedProp.set(output, \"propstat\", getPropertyOfType(output, \"propstat\", PropertyType.Object));\n nestedProp.set(output, \"propstat.prop\", getPropertyOfType(output, \"propstat.prop\", PropertyType.Object));\n }\n return output;\n}\nfunction normaliseResult(result) {\n const { multistatus } = result;\n if (multistatus === \"\") {\n return {\n multistatus: {\n response: []\n }\n };\n }\n if (!multistatus) {\n throw new Error(\"Invalid response: No root multistatus found\");\n }\n const output = {\n multistatus: Array.isArray(multistatus) ? multistatus[0] : multistatus\n };\n nestedProp.set(output, \"multistatus.response\", getPropertyOfType(output, \"multistatus.response\", PropertyType.Array));\n nestedProp.set(output, \"multistatus.response\", nestedProp.get(output, \"multistatus.response\").map(response => normaliseResponse(response)));\n return output;\n}\n/**\n * Parse an XML response from a WebDAV service,\n * converting it to an internal DAV result\n * @param xml The raw XML string\n * @returns A parsed and processed DAV result\n */\nexport function parseXML(xml) {\n return new Promise(resolve => {\n const result = getParser().parse(xml);\n resolve(normaliseResult(result));\n });\n}\n/**\n * Get a file stat result from given DAV properties\n * @param props DAV properties\n * @param filename The filename for the file stat\n * @param isDetailed Whether or not the raw props of the resource should be returned\n * @returns A file stat result\n */\nexport function prepareFileFromProps(props, filename, isDetailed = false) {\n // Last modified time, raw size, item type and mime\n const { getlastmodified: lastMod = null, getcontentlength: rawSize = \"0\", resourcetype: resourceType = null, getcontenttype: mimeType = null, getetag: etag = null } = props;\n const type = resourceType &&\n typeof resourceType === \"object\" &&\n typeof resourceType.collection !== \"undefined\"\n ? \"directory\"\n : \"file\";\n const stat = {\n filename,\n basename: path.basename(filename),\n lastmod: lastMod,\n size: parseInt(rawSize, 10),\n type,\n etag: typeof etag === \"string\" ? etag.replace(/\"/g, \"\") : null\n };\n if (type === \"file\") {\n stat.mime = mimeType && typeof mimeType === \"string\" ? mimeType.split(\";\")[0] : \"\";\n }\n if (isDetailed) {\n stat.props = props;\n }\n return stat;\n}\n/**\n * Parse a DAV result for file stats\n * @param result The resulting DAV response\n * @param filename The filename that was stat'd\n * @param isDetailed Whether or not the raw props of\n * the resource should be returned\n * @returns A file stat result\n */\nexport function parseStat(result, filename, isDetailed = false) {\n let responseItem = null;\n try {\n // should be a propstat response, if not the if below will throw an error\n if (result.multistatus.response[0].propstat) {\n responseItem = result.multistatus.response[0];\n }\n }\n catch (e) {\n /* ignore */\n }\n if (!responseItem) {\n throw new Error(\"Failed getting item stat: bad response\");\n }\n const { propstat: { prop: props, status: statusLine } } = responseItem;\n // As defined in https://tools.ietf.org/html/rfc2068#section-6.1\n const [_, statusCodeStr, statusText] = statusLine.split(\" \", 3);\n const statusCode = parseInt(statusCodeStr, 10);\n if (statusCode >= 400) {\n const err = new Error(`Invalid response: ${statusCode} ${statusText}`);\n err.status = statusCode;\n throw err;\n }\n const filePath = normalisePath(filename);\n return prepareFileFromProps(props, filePath, isDetailed);\n}\n/**\n * Parse a DAV result for a search request\n *\n * @param result The resulting DAV response\n * @param searchArbiter The collection path that was searched\n * @param isDetailed Whether or not the raw props of the resource should be returned\n */\nexport function parseSearch(result, searchArbiter, isDetailed) {\n const response = {\n truncated: false,\n results: []\n };\n response.truncated = result.multistatus.response.some(v => {\n return ((v.status || v.propstat?.status).split(\" \", 3)?.[1] === \"507\" &&\n v.href.replace(/\\/$/, \"\").endsWith(encodePath(searchArbiter).replace(/\\/$/, \"\")));\n });\n result.multistatus.response.forEach(result => {\n if (result.propstat === undefined) {\n return;\n }\n const filename = result.href.split(\"/\").map(decodeURIComponent).join(\"/\");\n response.results.push(prepareFileFromProps(result.propstat.prop, filename, isDetailed));\n });\n return response;\n}\n/**\n * Translate a disk quota indicator to a recognised\n * value (includes \"unlimited\" and \"unknown\")\n * @param value The quota indicator, eg. \"-3\"\n * @returns The value in bytes, or another indicator\n */\nexport function translateDiskSpace(value) {\n switch (value.toString()) {\n case \"-3\":\n return \"unlimited\";\n case \"-2\":\n /* falls-through */\n case \"-1\":\n // -1 is non-computed\n return \"unknown\";\n default:\n return parseInt(value, 10);\n }\n}\n","import { assertError, isError } from \"./error.js\";\nimport { parseArguments } from \"./tools.js\";\nexport class Layerr extends Error {\n constructor(errorOptionsOrMessage, messageText) {\n const args = [...arguments];\n const { options, shortMessage } = parseArguments(args);\n let message = shortMessage;\n if (options.cause) {\n message = `${message}: ${options.cause.message}`;\n }\n super(message);\n this.message = message;\n if (options.name && typeof options.name === \"string\") {\n this.name = options.name;\n }\n else {\n this.name = \"Layerr\";\n }\n if (options.cause) {\n Object.defineProperty(this, \"_cause\", { value: options.cause });\n }\n Object.defineProperty(this, \"_info\", { value: {} });\n if (options.info && typeof options.info === \"object\") {\n Object.assign(this._info, options.info);\n }\n if (Error.captureStackTrace) {\n const ctor = options.constructorOpt || this.constructor;\n Error.captureStackTrace(this, ctor);\n }\n }\n static cause(err) {\n assertError(err);\n if (!err._cause)\n return null;\n return isError(err._cause) ? err._cause : null;\n }\n static fullStack(err) {\n assertError(err);\n const cause = Layerr.cause(err);\n if (cause) {\n return `${err.stack}\\ncaused by: ${Layerr.fullStack(cause)}`;\n }\n return err.stack;\n }\n static info(err) {\n assertError(err);\n const output = {};\n const cause = Layerr.cause(err);\n if (cause) {\n Object.assign(output, Layerr.info(cause));\n }\n if (err._info) {\n Object.assign(output, err._info);\n }\n return output;\n }\n cause() {\n return Layerr.cause(this);\n }\n toString() {\n let output = this.name || this.constructor.name || this.constructor.prototype.name;\n if (this.message) {\n output = `${output}: ${this.message}`;\n }\n return output;\n }\n}\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport { parseXML } from 'webdav';\n// https://github.com/perry-mitchell/webdav-client/issues/339\nimport { processResponsePayload } from 'webdav/dist/node/response.js';\nimport { prepareFileFromProps } from 'webdav/dist/node/tools/dav.js';\nimport client from './DavClient.js';\nexport const DEFAULT_LIMIT = 20;\n/**\n * Retrieve the comments list\n *\n * @param {object} data destructuring object\n * @param {string} data.resourceType the resource type\n * @param {number} data.resourceId the resource ID\n * @param {object} [options] optional options for axios\n * @param {number} [options.offset] the pagination offset\n * @param {number} [options.limit] the pagination limit, defaults to 20\n * @param {Date} [options.datetime] optional date to query\n * @return {{data: object[]}} the comments list\n */\nexport const getComments = async function ({ resourceType, resourceId }, options) {\n const resourcePath = ['', resourceType, resourceId].join('/');\n const datetime = options.datetime ? `<oc:datetime>${options.datetime.toISOString()}</oc:datetime>` : '';\n const response = await client.customRequest(resourcePath, Object.assign({\n method: 'REPORT',\n data: `<?xml version=\"1.0\"?>\n\t\t\t<oc:filter-comments\n\t\t\t\txmlns:d=\"DAV:\"\n\t\t\t\txmlns:oc=\"http://owncloud.org/ns\"\n\t\t\t\txmlns:nc=\"http://nextcloud.org/ns\"\n\t\t\t\txmlns:ocs=\"http://open-collaboration-services.org/ns\">\n\t\t\t\t<oc:limit>${options.limit ?? DEFAULT_LIMIT}</oc:limit>\n\t\t\t\t<oc:offset>${options.offset || 0}</oc:offset>\n\t\t\t\t${datetime}\n\t\t\t</oc:filter-comments>`,\n }, options));\n const responseData = await response.text();\n const result = await parseXML(responseData);\n const stat = getDirectoryFiles(result, true);\n return processResponsePayload(response, stat, true);\n};\n// https://github.com/perry-mitchell/webdav-client/blob/8d9694613c978ce7404e26a401c39a41f125f87f/source/operations/directoryContents.ts\nconst getDirectoryFiles = function (result, isDetailed = false) {\n // Extract the response items (directory contents)\n const { multistatus: { response: responseItems }, } = result;\n // Map all items to a consistent output structure (results)\n return responseItems.map(item => {\n // Each item should contain a stat object\n const props = item.propstat.prop;\n return prepareFileFromProps(props, props.id.toString(), isDetailed);\n });\n};\n","/**\n * @copyright Copyright (c) 2023 Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @author Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport moment from '@nextcloud/moment';\nimport Vue from 'vue';\nimport logger from './logger.js';\nimport { getComments } from './services/GetComments.js';\nlet ActivityTabPluginView;\nlet ActivityTabPluginInstance;\n/**\n * Register the comments plugins for the Activity sidebar\n */\nexport function registerCommentsPlugins() {\n window.OCA.Activity.registerSidebarAction({\n mount: async (el, { context, fileInfo, reload }) => {\n if (!ActivityTabPluginView) {\n const { default: ActivityCommmentAction } = await import('./views/ActivityCommentAction.vue');\n ActivityTabPluginView = Vue.extend(ActivityCommmentAction);\n }\n ActivityTabPluginInstance = new ActivityTabPluginView({\n parent: context,\n propsData: {\n reloadCallback: reload,\n resourceId: fileInfo.id,\n },\n });\n ActivityTabPluginInstance.$mount(el);\n logger.info('Comments plugin mounted in Activity sidebar action', { fileInfo });\n },\n unmount: () => {\n // destroy previous instance if available\n if (ActivityTabPluginInstance) {\n ActivityTabPluginInstance.$destroy();\n }\n },\n });\n window.OCA.Activity.registerSidebarEntries(async ({ fileInfo, limit, offset }) => {\n const { data: comments } = await getComments({ resourceType: 'files', resourceId: fileInfo.id }, { limit, offset });\n logger.debug('Loaded comments', { fileInfo, comments });\n const { default: CommentView } = await import('./views/ActivityCommentEntry.vue');\n const CommentsViewObject = Vue.extend(CommentView);\n return comments.map((comment) => ({\n timestamp: moment(comment.props.creationDateTime).toDate().getTime(),\n mount(element, { context, reload }) {\n this._CommentsViewInstance = new CommentsViewObject({\n parent: context,\n propsData: {\n comment,\n resourceId: fileInfo.id,\n reloadCallback: reload,\n },\n });\n this._CommentsViewInstance.$mount(element);\n },\n unmount() {\n this._CommentsViewInstance.$destroy();\n },\n }));\n });\n window.OCA.Activity.registerSidebarFilter((activity) => activity.type !== 'comments');\n logger.info('Comments plugin registered for Activity sidebar action');\n}\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n// eslint-disable-next-line n/no-missing-import, import/no-unresolved\nimport MessageReplyText from '@mdi/svg/svg/message-reply-text.svg?raw'\nimport { getRequestToken } from '@nextcloud/auth'\nimport { loadState } from '@nextcloud/initial-state'\nimport { registerCommentsPlugins } from './comments-activity-tab.ts'\n\n// @ts-expect-error __webpack_nonce__ is injected by webpack\n__webpack_nonce__ = btoa(getRequestToken())\n\nif (loadState('comments', 'activityEnabled', false) && OCA?.Activity?.registerSidebarAction !== undefined) {\n\t// Do not mount own tab but mount into activity\n\twindow.addEventListener('DOMContentLoaded', function() {\n\t\tregisterCommentsPlugins()\n\t})\n} else {\n\t// Init Comments tab component\n\tlet TabInstance = null\n\tconst commentTab = new OCA.Files.Sidebar.Tab({\n\t\tid: 'comments',\n\t\tname: t('comments', 'Comments'),\n\t\ticonSvg: MessageReplyText,\n\n\t\tasync mount(el, fileInfo, context) {\n\t\t\tif (TabInstance) {\n\t\t\t\tTabInstance.$destroy()\n\t\t\t}\n\t\t\tTabInstance = new OCA.Comments.View('files', {\n\t\t\t\t// Better integration with vue parent component\n\t\t\t\tparent: context,\n\t\t\t})\n\t\t\t// Only mount after we have all the info we need\n\t\t\tawait TabInstance.update(fileInfo.id)\n\t\t\tTabInstance.$mount(el)\n\t\t},\n\t\tupdate(fileInfo) {\n\t\t\tTabInstance.update(fileInfo.id)\n\t\t},\n\t\tdestroy() {\n\t\t\tTabInstance.$destroy()\n\t\t\tTabInstance = null\n\t\t},\n\t\tscrollBottomReached() {\n\t\t\tTabInstance.onScrollBottomReached()\n\t\t},\n\t})\n\n\twindow.addEventListener('DOMContentLoaded', function() {\n\t\tif (OCA.Files && OCA.Files.Sidebar) {\n\t\t\tOCA.Files.Sidebar.registerTab(commentTab)\n\t\t}\n\t})\n}\n","import minimatch from \"minimatch\";\nimport { convertResponseHeaders } from \"./tools/headers.js\";\nexport function createErrorFromResponse(response, prefix = \"\") {\n const err = new Error(`${prefix}Invalid response: ${response.status} ${response.statusText}`);\n err.status = response.status;\n err.response = response;\n return err;\n}\nexport function handleResponseCode(context, response) {\n const { status } = response;\n if (status === 401 && context.digest)\n return response;\n if (status >= 400) {\n const err = createErrorFromResponse(response);\n throw err;\n }\n return response;\n}\nexport function processGlobFilter(files, glob) {\n return files.filter(file => minimatch(file.filename, glob, { matchBase: true }));\n}\n/**\n * Process a response payload (eg. from `customRequest`) and\n * prepare it for further processing. Exposed for custom\n * request handling.\n * @param response The response for a request\n * @param data The data returned\n * @param isDetailed Whether or not a detailed result is\n * requested\n * @returns The response data, or a detailed response object\n * if required\n */\nexport function processResponsePayload(response, data, isDetailed = false) {\n return isDetailed\n ? {\n data,\n headers: response.headers ? convertResponseHeaders(response.headers) : {},\n status: response.status,\n statusText: response.statusText\n }\n : data;\n}\n","/**\n * @copyright Copyright (c) 2023 Lucas Azevedo <lhs_azevedo@hotmail.com>\n *\n * @author Lucas Azevedo <lhs_azevedo@hotmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { getLoggerBuilder } from '@nextcloud/logger'\n\nexport default getLoggerBuilder()\n\t.setApp('comments')\n\t.detectUser()\n\t.build()\n","/**\n * @copyright Copyright (c) 2021 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { createClient } from 'webdav'\nimport { getRootPath } from '../utils/davUtils.js'\nimport { getRequestToken, onRequestTokenUpdate } from '@nextcloud/auth'\n\n// init webdav client\nconst client = createClient(getRootPath())\n\n// set CSRF token header\nconst setHeaders = (token) => {\n client.setHeaders({\n // Add this so the server knows it is an request from the browser\n 'X-Requested-With': 'XMLHttpRequest',\n // Inject user auth\n requesttoken: token ?? '',\n })\n}\n\n// refresh headers when request token changes\nonRequestTokenUpdate(setHeaders)\nsetHeaders(getRequestToken())\n\nexport default client\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { generateRemoteUrl } from '@nextcloud/router'\n\nconst getRootPath = function() {\n\treturn generateRemoteUrl('dav/comments')\n}\n\nexport { getRootPath }\n","'use strict';\nmodule.exports = balanced;\nfunction balanced(a, b, str) {\n if (a instanceof RegExp) a = maybeMatch(a, str);\n if (b instanceof RegExp) b = maybeMatch(b, str);\n\n var r = range(a, b, str);\n\n return r && {\n start: r[0],\n end: r[1],\n pre: str.slice(0, r[0]),\n body: str.slice(r[0] + a.length, r[1]),\n post: str.slice(r[1] + b.length)\n };\n}\n\nfunction maybeMatch(reg, str) {\n var m = str.match(reg);\n return m ? m[0] : null;\n}\n\nbalanced.range = range;\nfunction range(a, b, str) {\n var begs, beg, left, right, result;\n var ai = str.indexOf(a);\n var bi = str.indexOf(b, ai + 1);\n var i = ai;\n\n if (ai >= 0 && bi > 0) {\n if(a===b) {\n return [ai, bi];\n }\n begs = [];\n left = str.length;\n\n while (i >= 0 && !result) {\n if (i == ai) {\n begs.push(i);\n ai = str.indexOf(a, i + 1);\n } else if (begs.length == 1) {\n result = [ begs.pop(), bi ];\n } else {\n beg = begs.pop();\n if (beg < left) {\n left = beg;\n right = bi;\n }\n\n bi = str.indexOf(b, i + 1);\n }\n\n i = ai < bi && ai >= 0 ? ai : bi;\n }\n\n if (begs.length) {\n result = [ left, right ];\n }\n }\n\n return result;\n}\n","var balanced = require('balanced-match');\n\nmodule.exports = expandTop;\n\nvar escSlash = '\\0SLASH'+Math.random()+'\\0';\nvar escOpen = '\\0OPEN'+Math.random()+'\\0';\nvar escClose = '\\0CLOSE'+Math.random()+'\\0';\nvar escComma = '\\0COMMA'+Math.random()+'\\0';\nvar escPeriod = '\\0PERIOD'+Math.random()+'\\0';\n\nfunction numeric(str) {\n return parseInt(str, 10) == str\n ? parseInt(str, 10)\n : str.charCodeAt(0);\n}\n\nfunction escapeBraces(str) {\n return str.split('\\\\\\\\').join(escSlash)\n .split('\\\\{').join(escOpen)\n .split('\\\\}').join(escClose)\n .split('\\\\,').join(escComma)\n .split('\\\\.').join(escPeriod);\n}\n\nfunction unescapeBraces(str) {\n return str.split(escSlash).join('\\\\')\n .split(escOpen).join('{')\n .split(escClose).join('}')\n .split(escComma).join(',')\n .split(escPeriod).join('.');\n}\n\n\n// Basically just str.split(\",\"), but handling cases\n// where we have nested braced sections, which should be\n// treated as individual members, like {a,{b,c},d}\nfunction parseCommaParts(str) {\n if (!str)\n return [''];\n\n var parts = [];\n var m = balanced('{', '}', str);\n\n if (!m)\n return str.split(',');\n\n var pre = m.pre;\n var body = m.body;\n var post = m.post;\n var p = pre.split(',');\n\n p[p.length-1] += '{' + body + '}';\n var postParts = parseCommaParts(post);\n if (post.length) {\n p[p.length-1] += postParts.shift();\n p.push.apply(p, postParts);\n }\n\n parts.push.apply(parts, p);\n\n return parts;\n}\n\nfunction expandTop(str) {\n if (!str)\n return [];\n\n // I don't know why Bash 4.3 does this, but it does.\n // Anything starting with {} will have the first two bytes preserved\n // but *only* at the top level, so {},a}b will not expand to anything,\n // but a{},b}c will be expanded to [a}c,abc].\n // One could argue that this is a bug in Bash, but since the goal of\n // this module is to match Bash's rules, we escape a leading {}\n if (str.substr(0, 2) === '{}') {\n str = '\\\\{\\\\}' + str.substr(2);\n }\n\n return expand(escapeBraces(str), true).map(unescapeBraces);\n}\n\nfunction embrace(str) {\n return '{' + str + '}';\n}\nfunction isPadded(el) {\n return /^-?0\\d/.test(el);\n}\n\nfunction lte(i, y) {\n return i <= y;\n}\nfunction gte(i, y) {\n return i >= y;\n}\n\nfunction expand(str, isTop) {\n var expansions = [];\n\n var m = balanced('{', '}', str);\n if (!m) return [str];\n\n // no need to expand pre, since it is guaranteed to be free of brace-sets\n var pre = m.pre;\n var post = m.post.length\n ? expand(m.post, false)\n : [''];\n\n if (/\\$$/.test(m.pre)) { \n for (var k = 0; k < post.length; k++) {\n var expansion = pre+ '{' + m.body + '}' + post[k];\n expansions.push(expansion);\n }\n } else {\n var isNumericSequence = /^-?\\d+\\.\\.-?\\d+(?:\\.\\.-?\\d+)?$/.test(m.body);\n var isAlphaSequence = /^[a-zA-Z]\\.\\.[a-zA-Z](?:\\.\\.-?\\d+)?$/.test(m.body);\n var isSequence = isNumericSequence || isAlphaSequence;\n var isOptions = m.body.indexOf(',') >= 0;\n if (!isSequence && !isOptions) {\n // {a},b}\n if (m.post.match(/,.*\\}/)) {\n str = m.pre + '{' + m.body + escClose + m.post;\n return expand(str);\n }\n return [str];\n }\n\n var n;\n if (isSequence) {\n n = m.body.split(/\\.\\./);\n } else {\n n = parseCommaParts(m.body);\n if (n.length === 1) {\n // x{{a,b}}y ==> x{a}y x{b}y\n n = expand(n[0], false).map(embrace);\n if (n.length === 1) {\n return post.map(function(p) {\n return m.pre + n[0] + p;\n });\n }\n }\n }\n\n // at this point, n is the parts, and we know it's not a comma set\n // with a single entry.\n var N;\n\n if (isSequence) {\n var x = numeric(n[0]);\n var y = numeric(n[1]);\n var width = Math.max(n[0].length, n[1].length)\n var incr = n.length == 3\n ? Math.abs(numeric(n[2]))\n : 1;\n var test = lte;\n var reverse = y < x;\n if (reverse) {\n incr *= -1;\n test = gte;\n }\n var pad = n.some(isPadded);\n\n N = [];\n\n for (var i = x; test(i, y); i += incr) {\n var c;\n if (isAlphaSequence) {\n c = String.fromCharCode(i);\n if (c === '\\\\')\n c = '';\n } else {\n c = String(i);\n if (pad) {\n var need = width - c.length;\n if (need > 0) {\n var z = new Array(need + 1).join('0');\n if (i < 0)\n c = '-' + z + c.slice(1);\n else\n c = z + c;\n }\n }\n }\n N.push(c);\n }\n } else {\n N = [];\n\n for (var j = 0; j < n.length; j++) {\n N.push.apply(N, expand(n[j], false));\n }\n }\n\n for (var j = 0; j < N.length; j++) {\n for (var k = 0; k < post.length; k++) {\n var expansion = pre + N[j] + post[k];\n if (!isTop || isSequence || expansion)\n expansions.push(expansion);\n }\n }\n }\n\n return expansions;\n}\n\n","'use strict';\n\nconst validator = require('./validator');\nconst XMLParser = require('./xmlparser/XMLParser');\nconst XMLBuilder = require('./xmlbuilder/json2xml');\n\nmodule.exports = {\n XMLParser: XMLParser,\n XMLValidator: validator,\n XMLBuilder: XMLBuilder\n}","/**\n* @license nested-property https://github.com/cosmosio/nested-property\n*\n* The MIT License (MIT)\n*\n* Copyright (c) 2014-2020 Olivier Scherrer <pode.fr@gmail.com>\n*/\n\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _wrapNativeSuper(Class) { var _cache = typeof Map === \"function\" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== \"function\") { throw new TypeError(\"Super expression must either be null or a function\"); } if (typeof _cache !== \"undefined\") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }\n\nfunction _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _isNativeFunction(fn) { return Function.toString.call(fn).indexOf(\"[native code]\") !== -1; }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nvar ARRAY_WILDCARD = \"+\";\nvar PATH_DELIMITER = \".\";\n\nvar ObjectPrototypeMutationError = /*#__PURE__*/function (_Error) {\n _inherits(ObjectPrototypeMutationError, _Error);\n\n function ObjectPrototypeMutationError(params) {\n var _this;\n\n _classCallCheck(this, ObjectPrototypeMutationError);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(ObjectPrototypeMutationError).call(this, params));\n _this.name = \"ObjectPrototypeMutationError\";\n return _this;\n }\n\n return ObjectPrototypeMutationError;\n}(_wrapNativeSuper(Error));\n\nmodule.exports = {\n set: setNestedProperty,\n get: getNestedProperty,\n has: hasNestedProperty,\n hasOwn: function hasOwn(object, property, options) {\n return this.has(object, property, options || {\n own: true\n });\n },\n isIn: isInNestedProperty,\n ObjectPrototypeMutationError: ObjectPrototypeMutationError\n};\n/**\n * Get the property of an object nested in one or more objects or array\n * Given an object such as a.b.c.d = 5, getNestedProperty(a, \"b.c.d\") will return 5.\n * It also works through arrays. Given a nested array such as a[0].b = 5, getNestedProperty(a, \"0.b\") will return 5.\n * For accessing nested properties through all items in an array, you may use the array wildcard \"+\".\n * For instance, getNestedProperty([{a:1}, {a:2}, {a:3}], \"+.a\") will return [1, 2, 3]\n * @param {Object} object the object to get the property from\n * @param {String} property the path to the property as a string\n * @returns the object or the the property value if found\n */\n\nfunction getNestedProperty(object, property) {\n if (_typeof(object) != \"object\" || object === null) {\n return object;\n }\n\n if (typeof property == \"undefined\") {\n return object;\n }\n\n if (typeof property == \"number\") {\n return object[property];\n }\n\n try {\n return traverse(object, property, function _getNestedProperty(currentObject, currentProperty) {\n return currentObject[currentProperty];\n });\n } catch (err) {\n return object;\n }\n}\n/**\n * Tell if a nested object has a given property (or array a given index)\n * given an object such as a.b.c.d = 5, hasNestedProperty(a, \"b.c.d\") will return true.\n * It also returns true if the property is in the prototype chain.\n * @param {Object} object the object to get the property from\n * @param {String} property the path to the property as a string\n * @param {Object} options:\n * - own: set to reject properties from the prototype\n * @returns true if has (property in object), false otherwise\n */\n\n\nfunction hasNestedProperty(object, property) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (_typeof(object) != \"object\" || object === null) {\n return false;\n }\n\n if (typeof property == \"undefined\") {\n return false;\n }\n\n if (typeof property == \"number\") {\n return property in object;\n }\n\n try {\n var has = false;\n traverse(object, property, function _hasNestedProperty(currentObject, currentProperty, segments, index) {\n if (isLastSegment(segments, index)) {\n if (options.own) {\n has = currentObject.hasOwnProperty(currentProperty);\n } else {\n has = currentProperty in currentObject;\n }\n } else {\n return currentObject && currentObject[currentProperty];\n }\n });\n return has;\n } catch (err) {\n return false;\n }\n}\n/**\n * Set the property of an object nested in one or more objects\n * If the property doesn't exist, it gets created.\n * @param {Object} object\n * @param {String} property\n * @param value the value to set\n * @returns object if no assignment was made or the value if the assignment was made\n */\n\n\nfunction setNestedProperty(object, property, value) {\n if (_typeof(object) != \"object\" || object === null) {\n return object;\n }\n\n if (typeof property == \"undefined\") {\n return object;\n }\n\n if (typeof property == \"number\") {\n object[property] = value;\n return object[property];\n }\n\n try {\n return traverse(object, property, function _setNestedProperty(currentObject, currentProperty, segments, index) {\n if (currentObject === Reflect.getPrototypeOf({})) {\n throw new ObjectPrototypeMutationError(\"Attempting to mutate Object.prototype\");\n }\n\n if (!currentObject[currentProperty]) {\n var nextPropIsNumber = Number.isInteger(Number(segments[index + 1]));\n var nextPropIsArrayWildcard = segments[index + 1] === ARRAY_WILDCARD;\n\n if (nextPropIsNumber || nextPropIsArrayWildcard) {\n currentObject[currentProperty] = [];\n } else {\n currentObject[currentProperty] = {};\n }\n }\n\n if (isLastSegment(segments, index)) {\n currentObject[currentProperty] = value;\n }\n\n return currentObject[currentProperty];\n });\n } catch (err) {\n if (err instanceof ObjectPrototypeMutationError) {\n // rethrow\n throw err;\n } else {\n return object;\n }\n }\n}\n/**\n * Tell if an object is on the path to a nested property\n * If the object is on the path, and the path exists, it returns true, and false otherwise.\n * @param {Object} object to get the nested property from\n * @param {String} property name of the nested property\n * @param {Object} objectInPath the object to check\n * @param {Object} options:\n * - validPath: return false if the path is invalid, even if the object is in the path\n * @returns {boolean} true if the object is on the path\n */\n\n\nfunction isInNestedProperty(object, property, objectInPath) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n\n if (_typeof(object) != \"object\" || object === null) {\n return false;\n }\n\n if (typeof property == \"undefined\") {\n return false;\n }\n\n try {\n var isIn = false,\n pathExists = false;\n traverse(object, property, function _isInNestedProperty(currentObject, currentProperty, segments, index) {\n isIn = isIn || currentObject === objectInPath || !!currentObject && currentObject[currentProperty] === objectInPath;\n pathExists = isLastSegment(segments, index) && _typeof(currentObject) === \"object\" && currentProperty in currentObject;\n return currentObject && currentObject[currentProperty];\n });\n\n if (options.validPath) {\n return isIn && pathExists;\n } else {\n return isIn;\n }\n } catch (err) {\n return false;\n }\n}\n\nfunction traverse(object, path) {\n var callback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {};\n var segments = path.split(PATH_DELIMITER);\n var length = segments.length;\n\n var _loop = function _loop(idx) {\n var currentSegment = segments[idx];\n\n if (!object) {\n return {\n v: void 0\n };\n }\n\n if (currentSegment === ARRAY_WILDCARD) {\n if (Array.isArray(object)) {\n return {\n v: object.map(function (value, index) {\n var remainingSegments = segments.slice(idx + 1);\n\n if (remainingSegments.length > 0) {\n return traverse(value, remainingSegments.join(PATH_DELIMITER), callback);\n } else {\n return callback(object, index, segments, idx);\n }\n })\n };\n } else {\n var pathToHere = segments.slice(0, idx).join(PATH_DELIMITER);\n throw new Error(\"Object at wildcard (\".concat(pathToHere, \") is not an array\"));\n }\n } else {\n object = callback(object, currentSegment, segments, idx);\n }\n };\n\n for (var idx = 0; idx < length; idx++) {\n var _ret = _loop(idx);\n\n if (_typeof(_ret) === \"object\") return _ret.v;\n }\n\n return object;\n}\n\nfunction isLastSegment(segments, index) {\n return segments.length === index + 1;\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\nvar util = require('util');\nvar isString = function (x) {\n return typeof x === 'string';\n};\n\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n var res = [];\n for (var i = 0; i < parts.length; i++) {\n var p = parts[i];\n\n // ignore empty parts\n if (!p || p === '.')\n continue;\n\n if (p === '..') {\n if (res.length && res[res.length - 1] !== '..') {\n res.pop();\n } else if (allowAboveRoot) {\n res.push('..');\n }\n } else {\n res.push(p);\n }\n }\n\n return res;\n}\n\n// Split a filename into [root, dir, basename, ext], unix version\n// 'root' is just a slash, or nothing.\nvar splitPathRe =\n /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\nvar posix = {};\n\n\nfunction posixSplitPath(filename) {\n return splitPathRe.exec(filename).slice(1);\n}\n\n\n// path.resolve([from ...], to)\n// posix version\nposix.resolve = function() {\n var resolvedPath = '',\n resolvedAbsolute = false;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path = (i >= 0) ? arguments[i] : process.cwd();\n\n // Skip empty and invalid entries\n if (!isString(path)) {\n throw new TypeError('Arguments to path.resolve must be strings');\n } else if (!path) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charAt(0) === '/';\n }\n\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n\n // Normalize the path\n resolvedPath = normalizeArray(resolvedPath.split('/'),\n !resolvedAbsolute).join('/');\n\n return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n};\n\n// path.normalize(path)\n// posix version\nposix.normalize = function(path) {\n var isAbsolute = posix.isAbsolute(path),\n trailingSlash = path.substr(-1) === '/';\n\n // Normalize the path\n path = normalizeArray(path.split('/'), !isAbsolute).join('/');\n\n if (!path && !isAbsolute) {\n path = '.';\n }\n if (path && trailingSlash) {\n path += '/';\n }\n\n return (isAbsolute ? '/' : '') + path;\n};\n\n// posix version\nposix.isAbsolute = function(path) {\n return path.charAt(0) === '/';\n};\n\n// posix version\nposix.join = function() {\n var path = '';\n for (var i = 0; i < arguments.length; i++) {\n var segment = arguments[i];\n if (!isString(segment)) {\n throw new TypeError('Arguments to path.join must be strings');\n }\n if (segment) {\n if (!path) {\n path += segment;\n } else {\n path += '/' + segment;\n }\n }\n }\n return posix.normalize(path);\n};\n\n\n// path.relative(from, to)\n// posix version\nposix.relative = function(from, to) {\n from = posix.resolve(from).substr(1);\n to = posix.resolve(to).substr(1);\n\n function trim(arr) {\n var start = 0;\n for (; start < arr.length; start++) {\n if (arr[start] !== '') break;\n }\n\n var end = arr.length - 1;\n for (; end >= 0; end--) {\n if (arr[end] !== '') break;\n }\n\n if (start > end) return [];\n return arr.slice(start, end + 1);\n }\n\n var fromParts = trim(from.split('/'));\n var toParts = trim(to.split('/'));\n\n var length = Math.min(fromParts.length, toParts.length);\n var samePartsLength = length;\n for (var i = 0; i < length; i++) {\n if (fromParts[i] !== toParts[i]) {\n samePartsLength = i;\n break;\n }\n }\n\n var outputParts = [];\n for (var i = samePartsLength; i < fromParts.length; i++) {\n outputParts.push('..');\n }\n\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n return outputParts.join('/');\n};\n\n\nposix._makeLong = function(path) {\n return path;\n};\n\n\nposix.dirname = function(path) {\n var result = posixSplitPath(path),\n root = result[0],\n dir = result[1];\n\n if (!root && !dir) {\n // No dirname whatsoever\n return '.';\n }\n\n if (dir) {\n // It has a dirname, strip trailing slash\n dir = dir.substr(0, dir.length - 1);\n }\n\n return root + dir;\n};\n\n\nposix.basename = function(path, ext) {\n var f = posixSplitPath(path)[2];\n // TODO: make this comparison case-insensitive on windows?\n if (ext && f.substr(-1 * ext.length) === ext) {\n f = f.substr(0, f.length - ext.length);\n }\n return f;\n};\n\n\nposix.extname = function(path) {\n return posixSplitPath(path)[3];\n};\n\n\nposix.format = function(pathObject) {\n if (!util.isObject(pathObject)) {\n throw new TypeError(\n \"Parameter 'pathObject' must be an object, not \" + typeof pathObject\n );\n }\n\n var root = pathObject.root || '';\n\n if (!isString(root)) {\n throw new TypeError(\n \"'pathObject.root' must be a string or undefined, not \" +\n typeof pathObject.root\n );\n }\n\n var dir = pathObject.dir ? pathObject.dir + posix.sep : '';\n var base = pathObject.base || '';\n return dir + base;\n};\n\n\nposix.parse = function(pathString) {\n if (!isString(pathString)) {\n throw new TypeError(\n \"Parameter 'pathString' must be a string, not \" + typeof pathString\n );\n }\n var allParts = posixSplitPath(pathString);\n if (!allParts || allParts.length !== 4) {\n throw new TypeError(\"Invalid path '\" + pathString + \"'\");\n }\n allParts[1] = allParts[1] || '';\n allParts[2] = allParts[2] || '';\n allParts[3] = allParts[3] || '';\n\n return {\n root: allParts[0],\n dir: allParts[0] + allParts[1].slice(0, allParts[1].length - 1),\n base: allParts[2],\n ext: allParts[3],\n name: allParts[2].slice(0, allParts[2].length - allParts[3].length)\n };\n};\n\n\nposix.sep = '/';\nposix.delimiter = ':';\n\n module.exports = posix;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + chunkId + \"-\" + chunkId + \".js?v=\" + {\"1110\":\"2909496e7e35d6258214\",\"1241\":\"a4187792299da984916c\",\"2913\":\"1ccb2adaaea884424d3c\",\"5528\":\"110b147bc8680f8c83f4\",\"7462\":\"d38151a6cdda03d0d4da\",\"8902\":\"bb2f9be8a039f8db7e58\"}[chunkId] + \"\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 2122;","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src;\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) {\n\t\t\tvar i = scripts.length - 1;\n\t\t\twhile (i > -1 && (!scriptUrl || !/^http(s?):/.test(scriptUrl))) scriptUrl = scripts[i--].src;\n\t\t}\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t2122: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\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__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [4208], () => (__webpack_require__(7041)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","inProgress","dataWebpackPrefix","posixClasses","braceEscape","s","replace","rangesToString","ranges","join","parseClass","glob","position","pos","charAt","Error","negs","i","sawStart","uflag","escaping","negate","endPos","rangeStart","WHILE","length","c","cls","unip","u","neg","Object","entries","startsWith","push","test","slice","sranges","snegs","p","pattern","options","assertValidPattern","nocomment","Minimatch","match","starDotExtRE","starDotExtTest","ext","f","endsWith","starDotExtTestDot","starDotExtTestNocase","toLowerCase","starDotExtTestNocaseDot","starDotStarRE","starDotStarTest","includes","starDotStarTestDot","dotStarRE","dotStarTest","starRE","starTest","starTestDot","qmarksRE","qmarksTestNocase","$0","noext","qmarksTestNoExt","qmarksTestNocaseDot","qmarksTestNoExtDot","qmarksTestDot","qmarksTest","len","defaultPlatform","process","env","__MINIMATCH_TESTING_PLATFORM__","platform","sep","GLOBSTAR","Symbol","plTypes","open","close","qmark","star","charSet","split","reduce","set","reSpecials","addPatternStartSet","filter","a","b","assign","defaults","def","keys","orig","constructor","super","unescape","escape","makeRe","braceExpand","list","nobrace","TypeError","mm","nonull","globMagic","regExpEscape","windowsPathsNoEscape","nonegate","comment","empty","preserveMultipleSlashes","partial","globSet","globParts","nocase","isWindows","windowsNoMagicRoot","regexp","this","allowWindowsEscape","undefined","make","hasMagic","magicalBraces","part","debug","_","parseNegate","Set","args","console","error","rawGlobParts","map","slashSplit","preprocess","__","isUNC","isDrive","ss","parse","indexOf","noglobstar","j","optimizationLevel","firstPhasePreProcess","secondPhasePreProcess","levelOneOptimize","adjascentGlobstarOptimize","parts","gs","splice","prev","pop","levelTwoFileOptimize","Array","isArray","didSomething","dd","gss","next","p2","other","splin","matched","partsMatch","emptyGSMatch","ai","bi","result","which","dot","negateOffset","matchOne","file","fileUNC","patternUNC","fd","pd","fi","pi","fl","pl","fr","pr","swallowee","hit","m","fastTest","re","patternListStack","negativeLists","stateChar","dotTravAllowed","dotFileAllowed","subPatternStart","clearStateChar","plEntry","type","start","reStart","reEnd","src","needUflag","consumed","magic","tail","$1","$2","t","addPatternStart","n","nl","nlBefore","nlFirst","nlAfter","nlLast","closeParensBefore","openParensBefore","cleanAfter","nocaseMagicOnly","toUpperCase","flags","_glob","_src","RegExp","er","twoStar","pp","forEach","ex","ff","filename","matchBase","flipNegate","convertResponseHeaders","headers","output","key","get","PropertyType","getDirectoryFiles","isDetailed","arguments","multistatus","response","responseItems","item","props","propstat","prop","getlastmodified","lastMod","getcontentlength","rawSize","resourcetype","resourceType","getcontenttype","mimeType","getetag","etag","collection","stat","basename","lastmod","size","parseInt","mime","prepareFileFromProps","id","toString","ActivityTabPluginView","ActivityTabPluginInstance","__webpack_nonce__","btoa","getRequestToken","loadState","_OCA","OCA","Activity","registerSidebarAction","window","addEventListener","mount","async","el","_ref","context","fileInfo","reload","default","ActivityCommmentAction","Vue","extend","parent","propsData","reloadCallback","resourceId","$mount","logger","info","unmount","$destroy","registerSidebarEntries","limit","offset","_ref2","data","comments","_options$limit","resourcePath","datetime","concat","toISOString","client","customRequest","method","responseData","text","parseXML","status","statusText","processResponsePayload","getComments","CommentView","CommentsViewObject","timestamp","moment","creationDateTime","toDate","getTime","element","_ref3","_CommentsViewInstance","registerSidebarFilter","activity","TabInstance","commentTab","Files","Sidebar","Tab","name","iconSvg","Comments","View","update","destroy","scrollBottomReached","onScrollBottomReached","registerTab","getLoggerBuilder","setApp","detectUser","build","createClient","getRootPath","setHeaders","token","requesttoken","onRequestTokenUpdate","generateRemoteUrl","balanced","str","maybeMatch","r","range","end","pre","body","post","reg","begs","beg","left","right","module","exports","substr","expand","escSlash","escOpen","escClose","escComma","escPeriod","escapeBraces","unescapeBraces","Math","random","numeric","charCodeAt","parseCommaParts","postParts","shift","apply","embrace","isPadded","lte","y","gte","isTop","expansions","k","expansion","N","isNumericSequence","isAlphaSequence","isSequence","isOptions","x","width","max","incr","abs","pad","some","String","fromCharCode","need","z","validator","XMLParser","XMLBuilder","XMLValidator","_typeof","obj","iterator","prototype","_wrapNativeSuper","Class","_cache","Map","fn","Function","call","has","Wrapper","_construct","_getPrototypeOf","create","value","enumerable","writable","configurable","_setPrototypeOf","Parent","Reflect","construct","sham","Proxy","Date","e","_isNativeReflectConstruct","instance","bind","o","setPrototypeOf","__proto__","getPrototypeOf","ObjectPrototypeMutationError","_Error","params","_this","Constructor","_classCallCheck","self","ReferenceError","_assertThisInitialized","_possibleConstructorReturn","subClass","superClass","_inherits","traverse","object","path","callback","segments","_loop","idx","currentSegment","v","index","remainingSegments","pathToHere","_ret","isLastSegment","property","currentObject","currentProperty","nextPropIsNumber","Number","isInteger","nextPropIsArrayWildcard","err","own","hasOwnProperty","hasOwn","isIn","objectInPath","pathExists","validPath","util","isString","normalizeArray","allowAboveRoot","res","splitPathRe","posix","posixSplitPath","exec","resolve","resolvedPath","resolvedAbsolute","cwd","normalize","isAbsolute","trailingSlash","segment","relative","from","to","trim","arr","fromParts","toParts","min","samePartsLength","outputParts","_makeLong","dirname","root","dir","extname","format","pathObject","isObject","base","pathString","allParts","delimiter","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","loaded","__webpack_modules__","O","chunkIds","priority","notFulfilled","Infinity","fulfilled","every","getter","__esModule","d","definition","defineProperty","chunkId","Promise","all","promises","g","globalThis","l","url","done","script","needAttach","scripts","document","getElementsByTagName","getAttribute","createElement","charset","timeout","nc","setAttribute","onScriptComplete","event","onerror","onload","clearTimeout","doneFns","parentNode","removeChild","setTimeout","target","head","appendChild","toStringTag","nmd","paths","children","scriptUrl","importScripts","location","currentScript","baseURI","href","installedChunks","installedChunkData","promise","reject","errorType","realSrc","message","request","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"file":"comments-comments-tab.js?v=a78ff48695ceded82249","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/webpack/runtime/load script","webpack:///nextcloud/node_modules/webdav/node_modules/minimatch/dist/mjs/brace-expressions.js","webpack:///nextcloud/node_modules/webdav/node_modules/minimatch/dist/mjs/index.js","webpack:///nextcloud/node_modules/webdav/dist/node/tools/headers.js","webpack:///nextcloud/node_modules/webdav/node_modules/minimatch/dist/mjs/escape.js","webpack:///nextcloud/node_modules/webdav/node_modules/minimatch/dist/mjs/unescape.js","webpack:///nextcloud/node_modules/webdav/dist/node/tools/dav.js","webpack:///nextcloud/node_modules/layerr/dist/layerr.js","webpack:///nextcloud/apps/comments/src/services/GetComments.ts","webpack:///nextcloud/apps/comments/src/comments-activity-tab.ts","webpack:///nextcloud/apps/comments/src/comments-tab.js","webpack:///nextcloud/node_modules/webdav/dist/node/response.js","webpack:///nextcloud/apps/comments/src/logger.js","webpack:///nextcloud/apps/comments/src/services/DavClient.js","webpack:///nextcloud/apps/comments/src/utils/davUtils.js","webpack:///nextcloud/node_modules/balanced-match/index.js","webpack:///nextcloud/node_modules/brace-expansion/index.js","webpack:///nextcloud/node_modules/fast-xml-parser/src/fxp.js","webpack:///nextcloud/node_modules/nested-property/dist/nested-property.js","webpack:///nextcloud/node_modules/path-posix/index.js","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/ensure chunk","webpack:///nextcloud/webpack/runtime/get javascript chunk filename","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/publicPath","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"nextcloud:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// translate the various posix character classes into unicode properties\n// this works across all unicode locales\n// { <posix class>: [<translation>, /u flag required, negated]\nconst posixClasses = {\n '[:alnum:]': ['\\\\p{L}\\\\p{Nl}\\\\p{Nd}', true],\n '[:alpha:]': ['\\\\p{L}\\\\p{Nl}', true],\n '[:ascii:]': ['\\\\x' + '00-\\\\x' + '7f', false],\n '[:blank:]': ['\\\\p{Zs}\\\\t', true],\n '[:cntrl:]': ['\\\\p{Cc}', true],\n '[:digit:]': ['\\\\p{Nd}', true],\n '[:graph:]': ['\\\\p{Z}\\\\p{C}', true, true],\n '[:lower:]': ['\\\\p{Ll}', true],\n '[:print:]': ['\\\\p{C}', true],\n '[:punct:]': ['\\\\p{P}', true],\n '[:space:]': ['\\\\p{Z}\\\\t\\\\r\\\\n\\\\v\\\\f', true],\n '[:upper:]': ['\\\\p{Lu}', true],\n '[:word:]': ['\\\\p{L}\\\\p{Nl}\\\\p{Nd}\\\\p{Pc}', true],\n '[:xdigit:]': ['A-Fa-f0-9', false],\n};\n// only need to escape a few things inside of brace expressions\n// escapes: [ \\ ] -\nconst braceEscape = (s) => s.replace(/[[\\]\\\\-]/g, '\\\\$&');\n// escape all regexp magic characters\nconst regexpEscape = (s) => s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n// everything has already been escaped, we just have to join\nconst rangesToString = (ranges) => ranges.join('');\n// takes a glob string at a posix brace expression, and returns\n// an equivalent regular expression source, and boolean indicating\n// whether the /u flag needs to be applied, and the number of chars\n// consumed to parse the character class.\n// This also removes out of order ranges, and returns ($.) if the\n// entire class just no good.\nexport const parseClass = (glob, position) => {\n const pos = position;\n /* c8 ignore start */\n if (glob.charAt(pos) !== '[') {\n throw new Error('not in a brace expression');\n }\n /* c8 ignore stop */\n const ranges = [];\n const negs = [];\n let i = pos + 1;\n let sawStart = false;\n let uflag = false;\n let escaping = false;\n let negate = false;\n let endPos = pos;\n let rangeStart = '';\n WHILE: while (i < glob.length) {\n const c = glob.charAt(i);\n if ((c === '!' || c === '^') && i === pos + 1) {\n negate = true;\n i++;\n continue;\n }\n if (c === ']' && sawStart && !escaping) {\n endPos = i + 1;\n break;\n }\n sawStart = true;\n if (c === '\\\\') {\n if (!escaping) {\n escaping = true;\n i++;\n continue;\n }\n // escaped \\ char, fall through and treat like normal char\n }\n if (c === '[' && !escaping) {\n // either a posix class, a collation equivalent, or just a [\n for (const [cls, [unip, u, neg]] of Object.entries(posixClasses)) {\n if (glob.startsWith(cls, i)) {\n // invalid, [a-[] is fine, but not [a-[:alpha]]\n if (rangeStart) {\n return ['$.', false, glob.length - pos, true];\n }\n i += cls.length;\n if (neg)\n negs.push(unip);\n else\n ranges.push(unip);\n uflag = uflag || u;\n continue WHILE;\n }\n }\n }\n // now it's just a normal character, effectively\n escaping = false;\n if (rangeStart) {\n // throw this range away if it's not valid, but others\n // can still match.\n if (c > rangeStart) {\n ranges.push(braceEscape(rangeStart) + '-' + braceEscape(c));\n }\n else if (c === rangeStart) {\n ranges.push(braceEscape(c));\n }\n rangeStart = '';\n i++;\n continue;\n }\n // now might be the start of a range.\n // can be either c-d or c-] or c<more...>] or c] at this point\n if (glob.startsWith('-]', i + 1)) {\n ranges.push(braceEscape(c + '-'));\n i += 2;\n continue;\n }\n if (glob.startsWith('-', i + 1)) {\n rangeStart = c;\n i += 2;\n continue;\n }\n // not the start of a range, just a single character\n ranges.push(braceEscape(c));\n i++;\n }\n if (endPos < i) {\n // didn't see the end of the class, not a valid class,\n // but might still be valid as a literal match.\n return ['', false, 0, false];\n }\n // if we got no ranges and no negates, then we have a range that\n // cannot possibly match anything, and that poisons the whole glob\n if (!ranges.length && !negs.length) {\n return ['$.', false, glob.length - pos, true];\n }\n // if we got one positive range, and it's a single character, then that's\n // not actually a magic pattern, it's just that one literal character.\n // we should not treat that as \"magic\", we should just return the literal\n // character. [_] is a perfectly valid way to escape glob magic chars.\n if (negs.length === 0 &&\n ranges.length === 1 &&\n /^\\\\?.$/.test(ranges[0]) &&\n !negate) {\n const r = ranges[0].length === 2 ? ranges[0].slice(-1) : ranges[0];\n return [regexpEscape(r), false, endPos - pos, false];\n }\n const sranges = '[' + (negate ? '^' : '') + rangesToString(ranges) + ']';\n const snegs = '[' + (negate ? '' : '^') + rangesToString(negs) + ']';\n const comb = ranges.length && negs.length\n ? '(' + sranges + '|' + snegs + ')'\n : ranges.length\n ? sranges\n : snegs;\n return [comb, uflag, endPos - pos, true];\n};\n//# sourceMappingURL=brace-expressions.js.map","import expand from 'brace-expansion';\nimport { parseClass } from './brace-expressions.js';\nimport { escape } from './escape.js';\nimport { unescape } from './unescape.js';\nexport const minimatch = (p, pattern, options = {}) => {\n assertValidPattern(pattern);\n // shortcut: comments match nothing.\n if (!options.nocomment && pattern.charAt(0) === '#') {\n return false;\n }\n return new Minimatch(pattern, options).match(p);\n};\nexport default minimatch;\n// Optimized checking for the most common glob patterns.\nconst starDotExtRE = /^\\*+([^+@!?\\*\\[\\(]*)$/;\nconst starDotExtTest = (ext) => (f) => !f.startsWith('.') && f.endsWith(ext);\nconst starDotExtTestDot = (ext) => (f) => f.endsWith(ext);\nconst starDotExtTestNocase = (ext) => {\n ext = ext.toLowerCase();\n return (f) => !f.startsWith('.') && f.toLowerCase().endsWith(ext);\n};\nconst starDotExtTestNocaseDot = (ext) => {\n ext = ext.toLowerCase();\n return (f) => f.toLowerCase().endsWith(ext);\n};\nconst starDotStarRE = /^\\*+\\.\\*+$/;\nconst starDotStarTest = (f) => !f.startsWith('.') && f.includes('.');\nconst starDotStarTestDot = (f) => f !== '.' && f !== '..' && f.includes('.');\nconst dotStarRE = /^\\.\\*+$/;\nconst dotStarTest = (f) => f !== '.' && f !== '..' && f.startsWith('.');\nconst starRE = /^\\*+$/;\nconst starTest = (f) => f.length !== 0 && !f.startsWith('.');\nconst starTestDot = (f) => f.length !== 0 && f !== '.' && f !== '..';\nconst qmarksRE = /^\\?+([^+@!?\\*\\[\\(]*)?$/;\nconst qmarksTestNocase = ([$0, ext = '']) => {\n const noext = qmarksTestNoExt([$0]);\n if (!ext)\n return noext;\n ext = ext.toLowerCase();\n return (f) => noext(f) && f.toLowerCase().endsWith(ext);\n};\nconst qmarksTestNocaseDot = ([$0, ext = '']) => {\n const noext = qmarksTestNoExtDot([$0]);\n if (!ext)\n return noext;\n ext = ext.toLowerCase();\n return (f) => noext(f) && f.toLowerCase().endsWith(ext);\n};\nconst qmarksTestDot = ([$0, ext = '']) => {\n const noext = qmarksTestNoExtDot([$0]);\n return !ext ? noext : (f) => noext(f) && f.endsWith(ext);\n};\nconst qmarksTest = ([$0, ext = '']) => {\n const noext = qmarksTestNoExt([$0]);\n return !ext ? noext : (f) => noext(f) && f.endsWith(ext);\n};\nconst qmarksTestNoExt = ([$0]) => {\n const len = $0.length;\n return (f) => f.length === len && !f.startsWith('.');\n};\nconst qmarksTestNoExtDot = ([$0]) => {\n const len = $0.length;\n return (f) => f.length === len && f !== '.' && f !== '..';\n};\n/* c8 ignore start */\nconst defaultPlatform = (typeof process === 'object' && process\n ? (typeof process.env === 'object' &&\n process.env &&\n process.env.__MINIMATCH_TESTING_PLATFORM__) ||\n process.platform\n : 'posix');\nconst path = {\n win32: { sep: '\\\\' },\n posix: { sep: '/' },\n};\n/* c8 ignore stop */\nexport const sep = defaultPlatform === 'win32' ? path.win32.sep : path.posix.sep;\nminimatch.sep = sep;\nexport const GLOBSTAR = Symbol('globstar **');\nminimatch.GLOBSTAR = GLOBSTAR;\nconst plTypes = {\n '!': { open: '(?:(?!(?:', close: '))[^/]*?)' },\n '?': { open: '(?:', close: ')?' },\n '+': { open: '(?:', close: ')+' },\n '*': { open: '(?:', close: ')*' },\n '@': { open: '(?:', close: ')' },\n};\n// any single thing other than /\n// don't need to escape / when using new RegExp()\nconst qmark = '[^/]';\n// * => any number of characters\nconst star = qmark + '*?';\n// ** when dots are allowed. Anything goes, except .. and .\n// not (^ or / followed by one or two dots followed by $ or /),\n// followed by anything, any number of times.\nconst twoStarDot = '(?:(?!(?:\\\\/|^)(?:\\\\.{1,2})($|\\\\/)).)*?';\n// not a ^ or / followed by a dot,\n// followed by anything, any number of times.\nconst twoStarNoDot = '(?:(?!(?:\\\\/|^)\\\\.).)*?';\n// \"abc\" -> { a:true, b:true, c:true }\nconst charSet = (s) => s.split('').reduce((set, c) => {\n set[c] = true;\n return set;\n}, {});\n// characters that need to be escaped in RegExp.\nconst reSpecials = charSet('().*{}+?[]^$\\\\!');\n// characters that indicate we have to add the pattern start\nconst addPatternStartSet = charSet('[.(');\nexport const filter = (pattern, options = {}) => (p) => minimatch(p, pattern, options);\nminimatch.filter = filter;\nconst ext = (a, b = {}) => Object.assign({}, a, b);\nexport const defaults = (def) => {\n if (!def || typeof def !== 'object' || !Object.keys(def).length) {\n return minimatch;\n }\n const orig = minimatch;\n const m = (p, pattern, options = {}) => orig(p, pattern, ext(def, options));\n return Object.assign(m, {\n Minimatch: class Minimatch extends orig.Minimatch {\n constructor(pattern, options = {}) {\n super(pattern, ext(def, options));\n }\n static defaults(options) {\n return orig.defaults(ext(def, options)).Minimatch;\n }\n },\n unescape: (s, options = {}) => orig.unescape(s, ext(def, options)),\n escape: (s, options = {}) => orig.escape(s, ext(def, options)),\n filter: (pattern, options = {}) => orig.filter(pattern, ext(def, options)),\n defaults: (options) => orig.defaults(ext(def, options)),\n makeRe: (pattern, options = {}) => orig.makeRe(pattern, ext(def, options)),\n braceExpand: (pattern, options = {}) => orig.braceExpand(pattern, ext(def, options)),\n match: (list, pattern, options = {}) => orig.match(list, pattern, ext(def, options)),\n sep: orig.sep,\n GLOBSTAR: GLOBSTAR,\n });\n};\nminimatch.defaults = defaults;\n// Brace expansion:\n// a{b,c}d -> abd acd\n// a{b,}c -> abc ac\n// a{0..3}d -> a0d a1d a2d a3d\n// a{b,c{d,e}f}g -> abg acdfg acefg\n// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg\n//\n// Invalid sets are not expanded.\n// a{2..}b -> a{2..}b\n// a{b}c -> a{b}c\nexport const braceExpand = (pattern, options = {}) => {\n assertValidPattern(pattern);\n // Thanks to Yeting Li <https://github.com/yetingli> for\n // improving this regexp to avoid a ReDOS vulnerability.\n if (options.nobrace || !/\\{(?:(?!\\{).)*\\}/.test(pattern)) {\n // shortcut. no need to expand.\n return [pattern];\n }\n return expand(pattern);\n};\nminimatch.braceExpand = braceExpand;\nconst MAX_PATTERN_LENGTH = 1024 * 64;\nconst assertValidPattern = (pattern) => {\n if (typeof pattern !== 'string') {\n throw new TypeError('invalid pattern');\n }\n if (pattern.length > MAX_PATTERN_LENGTH) {\n throw new TypeError('pattern is too long');\n }\n};\n// parse a component of the expanded set.\n// At this point, no pattern may contain \"/\" in it\n// so we're going to return a 2d array, where each entry is the full\n// pattern, split on '/', and then turned into a regular expression.\n// A regexp is made at the end which joins each array with an\n// escaped /, and another full one which joins each regexp with |.\n//\n// Following the lead of Bash 4.1, note that \"**\" only has special meaning\n// when it is the *only* thing in a path portion. Otherwise, any series\n// of * is equivalent to a single *. Globstar behavior is enabled by\n// default, and can be disabled by setting options.noglobstar.\nexport const makeRe = (pattern, options = {}) => new Minimatch(pattern, options).makeRe();\nminimatch.makeRe = makeRe;\nexport const match = (list, pattern, options = {}) => {\n const mm = new Minimatch(pattern, options);\n list = list.filter(f => mm.match(f));\n if (mm.options.nonull && !list.length) {\n list.push(pattern);\n }\n return list;\n};\nminimatch.match = match;\n// replace stuff like \\* with *\nconst globUnescape = (s) => s.replace(/\\\\(.)/g, '$1');\nconst globMagic = /[?*]|[+@!]\\(.*?\\)|\\[|\\]/;\nconst regExpEscape = (s) => s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\nexport class Minimatch {\n options;\n set;\n pattern;\n windowsPathsNoEscape;\n nonegate;\n negate;\n comment;\n empty;\n preserveMultipleSlashes;\n partial;\n globSet;\n globParts;\n nocase;\n isWindows;\n platform;\n windowsNoMagicRoot;\n regexp;\n constructor(pattern, options = {}) {\n assertValidPattern(pattern);\n options = options || {};\n this.options = options;\n this.pattern = pattern;\n this.platform = options.platform || defaultPlatform;\n this.isWindows = this.platform === 'win32';\n this.windowsPathsNoEscape =\n !!options.windowsPathsNoEscape || options.allowWindowsEscape === false;\n if (this.windowsPathsNoEscape) {\n this.pattern = this.pattern.replace(/\\\\/g, '/');\n }\n this.preserveMultipleSlashes = !!options.preserveMultipleSlashes;\n this.regexp = null;\n this.negate = false;\n this.nonegate = !!options.nonegate;\n this.comment = false;\n this.empty = false;\n this.partial = !!options.partial;\n this.nocase = !!this.options.nocase;\n this.windowsNoMagicRoot =\n options.windowsNoMagicRoot !== undefined\n ? options.windowsNoMagicRoot\n : !!(this.isWindows && this.nocase);\n this.globSet = [];\n this.globParts = [];\n this.set = [];\n // make the set of regexps etc.\n this.make();\n }\n hasMagic() {\n if (this.options.magicalBraces && this.set.length > 1) {\n return true;\n }\n for (const pattern of this.set) {\n for (const part of pattern) {\n if (typeof part !== 'string')\n return true;\n }\n }\n return false;\n }\n debug(..._) { }\n make() {\n const pattern = this.pattern;\n const options = this.options;\n // empty patterns and comments match nothing.\n if (!options.nocomment && pattern.charAt(0) === '#') {\n this.comment = true;\n return;\n }\n if (!pattern) {\n this.empty = true;\n return;\n }\n // step 1: figure out negation, etc.\n this.parseNegate();\n // step 2: expand braces\n this.globSet = [...new Set(this.braceExpand())];\n if (options.debug) {\n this.debug = (...args) => console.error(...args);\n }\n this.debug(this.pattern, this.globSet);\n // step 3: now we have a set, so turn each one into a series of\n // path-portion matching patterns.\n // These will be regexps, except in the case of \"**\", which is\n // set to the GLOBSTAR object for globstar behavior,\n // and will not contain any / characters\n //\n // First, we preprocess to make the glob pattern sets a bit simpler\n // and deduped. There are some perf-killing patterns that can cause\n // problems with a glob walk, but we can simplify them down a bit.\n const rawGlobParts = this.globSet.map(s => this.slashSplit(s));\n this.globParts = this.preprocess(rawGlobParts);\n this.debug(this.pattern, this.globParts);\n // glob --> regexps\n let set = this.globParts.map((s, _, __) => {\n if (this.isWindows && this.windowsNoMagicRoot) {\n // check if it's a drive or unc path.\n const isUNC = s[0] === '' &&\n s[1] === '' &&\n (s[2] === '?' || !globMagic.test(s[2])) &&\n !globMagic.test(s[3]);\n const isDrive = /^[a-z]:/i.test(s[0]);\n if (isUNC) {\n return [...s.slice(0, 4), ...s.slice(4).map(ss => this.parse(ss))];\n }\n else if (isDrive) {\n return [s[0], ...s.slice(1).map(ss => this.parse(ss))];\n }\n }\n return s.map(ss => this.parse(ss));\n });\n this.debug(this.pattern, set);\n // filter out everything that didn't compile properly.\n this.set = set.filter(s => s.indexOf(false) === -1);\n // do not treat the ? in UNC paths as magic\n if (this.isWindows) {\n for (let i = 0; i < this.set.length; i++) {\n const p = this.set[i];\n if (p[0] === '' &&\n p[1] === '' &&\n this.globParts[i][2] === '?' &&\n typeof p[3] === 'string' &&\n /^[a-z]:$/i.test(p[3])) {\n p[2] = '?';\n }\n }\n }\n this.debug(this.pattern, this.set);\n }\n // various transforms to equivalent pattern sets that are\n // faster to process in a filesystem walk. The goal is to\n // eliminate what we can, and push all ** patterns as far\n // to the right as possible, even if it increases the number\n // of patterns that we have to process.\n preprocess(globParts) {\n // if we're not in globstar mode, then turn all ** into *\n if (this.options.noglobstar) {\n for (let i = 0; i < globParts.length; i++) {\n for (let j = 0; j < globParts[i].length; j++) {\n if (globParts[i][j] === '**') {\n globParts[i][j] = '*';\n }\n }\n }\n }\n const { optimizationLevel = 1 } = this.options;\n if (optimizationLevel >= 2) {\n // aggressive optimization for the purpose of fs walking\n globParts = this.firstPhasePreProcess(globParts);\n globParts = this.secondPhasePreProcess(globParts);\n }\n else if (optimizationLevel >= 1) {\n // just basic optimizations to remove some .. parts\n globParts = this.levelOneOptimize(globParts);\n }\n else {\n globParts = this.adjascentGlobstarOptimize(globParts);\n }\n return globParts;\n }\n // just get rid of adjascent ** portions\n adjascentGlobstarOptimize(globParts) {\n return globParts.map(parts => {\n let gs = -1;\n while (-1 !== (gs = parts.indexOf('**', gs + 1))) {\n let i = gs;\n while (parts[i + 1] === '**') {\n i++;\n }\n if (i !== gs) {\n parts.splice(gs, i - gs);\n }\n }\n return parts;\n });\n }\n // get rid of adjascent ** and resolve .. portions\n levelOneOptimize(globParts) {\n return globParts.map(parts => {\n parts = parts.reduce((set, part) => {\n const prev = set[set.length - 1];\n if (part === '**' && prev === '**') {\n return set;\n }\n if (part === '..') {\n if (prev && prev !== '..' && prev !== '.' && prev !== '**') {\n set.pop();\n return set;\n }\n }\n set.push(part);\n return set;\n }, []);\n return parts.length === 0 ? [''] : parts;\n });\n }\n levelTwoFileOptimize(parts) {\n if (!Array.isArray(parts)) {\n parts = this.slashSplit(parts);\n }\n let didSomething = false;\n do {\n didSomething = false;\n // <pre>/<e>/<rest> -> <pre>/<rest>\n if (!this.preserveMultipleSlashes) {\n for (let i = 1; i < parts.length - 1; i++) {\n const p = parts[i];\n // don't squeeze out UNC patterns\n if (i === 1 && p === '' && parts[0] === '')\n continue;\n if (p === '.' || p === '') {\n didSomething = true;\n parts.splice(i, 1);\n i--;\n }\n }\n if (parts[0] === '.' &&\n parts.length === 2 &&\n (parts[1] === '.' || parts[1] === '')) {\n didSomething = true;\n parts.pop();\n }\n }\n // <pre>/<p>/../<rest> -> <pre>/<rest>\n let dd = 0;\n while (-1 !== (dd = parts.indexOf('..', dd + 1))) {\n const p = parts[dd - 1];\n if (p && p !== '.' && p !== '..' && p !== '**') {\n didSomething = true;\n parts.splice(dd - 1, 2);\n dd -= 2;\n }\n }\n } while (didSomething);\n return parts.length === 0 ? [''] : parts;\n }\n // First phase: single-pattern processing\n // <pre> is 1 or more portions\n // <rest> is 1 or more portions\n // <p> is any portion other than ., .., '', or **\n // <e> is . or ''\n //\n // **/.. is *brutal* for filesystem walking performance, because\n // it effectively resets the recursive walk each time it occurs,\n // and ** cannot be reduced out by a .. pattern part like a regexp\n // or most strings (other than .., ., and '') can be.\n //\n // <pre>/**/../<p>/<p>/<rest> -> {<pre>/../<p>/<p>/<rest>,<pre>/**/<p>/<p>/<rest>}\n // <pre>/<e>/<rest> -> <pre>/<rest>\n // <pre>/<p>/../<rest> -> <pre>/<rest>\n // **/**/<rest> -> **/<rest>\n //\n // **/*/<rest> -> */**/<rest> <== not valid because ** doesn't follow\n // this WOULD be allowed if ** did follow symlinks, or * didn't\n firstPhasePreProcess(globParts) {\n let didSomething = false;\n do {\n didSomething = false;\n // <pre>/**/../<p>/<p>/<rest> -> {<pre>/../<p>/<p>/<rest>,<pre>/**/<p>/<p>/<rest>}\n for (let parts of globParts) {\n let gs = -1;\n while (-1 !== (gs = parts.indexOf('**', gs + 1))) {\n let gss = gs;\n while (parts[gss + 1] === '**') {\n // <pre>/**/**/<rest> -> <pre>/**/<rest>\n gss++;\n }\n // eg, if gs is 2 and gss is 4, that means we have 3 **\n // parts, and can remove 2 of them.\n if (gss > gs) {\n parts.splice(gs + 1, gss - gs);\n }\n let next = parts[gs + 1];\n const p = parts[gs + 2];\n const p2 = parts[gs + 3];\n if (next !== '..')\n continue;\n if (!p ||\n p === '.' ||\n p === '..' ||\n !p2 ||\n p2 === '.' ||\n p2 === '..') {\n continue;\n }\n didSomething = true;\n // edit parts in place, and push the new one\n parts.splice(gs, 1);\n const other = parts.slice(0);\n other[gs] = '**';\n globParts.push(other);\n gs--;\n }\n // <pre>/<e>/<rest> -> <pre>/<rest>\n if (!this.preserveMultipleSlashes) {\n for (let i = 1; i < parts.length - 1; i++) {\n const p = parts[i];\n // don't squeeze out UNC patterns\n if (i === 1 && p === '' && parts[0] === '')\n continue;\n if (p === '.' || p === '') {\n didSomething = true;\n parts.splice(i, 1);\n i--;\n }\n }\n if (parts[0] === '.' &&\n parts.length === 2 &&\n (parts[1] === '.' || parts[1] === '')) {\n didSomething = true;\n parts.pop();\n }\n }\n // <pre>/<p>/../<rest> -> <pre>/<rest>\n let dd = 0;\n while (-1 !== (dd = parts.indexOf('..', dd + 1))) {\n const p = parts[dd - 1];\n if (p && p !== '.' && p !== '..' && p !== '**') {\n didSomething = true;\n const needDot = dd === 1 && parts[dd + 1] === '**';\n const splin = needDot ? ['.'] : [];\n parts.splice(dd - 1, 2, ...splin);\n if (parts.length === 0)\n parts.push('');\n dd -= 2;\n }\n }\n }\n } while (didSomething);\n return globParts;\n }\n // second phase: multi-pattern dedupes\n // {<pre>/*/<rest>,<pre>/<p>/<rest>} -> <pre>/*/<rest>\n // {<pre>/<rest>,<pre>/<rest>} -> <pre>/<rest>\n // {<pre>/**/<rest>,<pre>/<rest>} -> <pre>/**/<rest>\n //\n // {<pre>/**/<rest>,<pre>/**/<p>/<rest>} -> <pre>/**/<rest>\n // ^-- not valid because ** doens't follow symlinks\n secondPhasePreProcess(globParts) {\n for (let i = 0; i < globParts.length - 1; i++) {\n for (let j = i + 1; j < globParts.length; j++) {\n const matched = this.partsMatch(globParts[i], globParts[j], !this.preserveMultipleSlashes);\n if (!matched)\n continue;\n globParts[i] = matched;\n globParts[j] = [];\n }\n }\n return globParts.filter(gs => gs.length);\n }\n partsMatch(a, b, emptyGSMatch = false) {\n let ai = 0;\n let bi = 0;\n let result = [];\n let which = '';\n while (ai < a.length && bi < b.length) {\n if (a[ai] === b[bi]) {\n result.push(which === 'b' ? b[bi] : a[ai]);\n ai++;\n bi++;\n }\n else if (emptyGSMatch && a[ai] === '**' && b[bi] === a[ai + 1]) {\n result.push(a[ai]);\n ai++;\n }\n else if (emptyGSMatch && b[bi] === '**' && a[ai] === b[bi + 1]) {\n result.push(b[bi]);\n bi++;\n }\n else if (a[ai] === '*' &&\n b[bi] &&\n (this.options.dot || !b[bi].startsWith('.')) &&\n b[bi] !== '**') {\n if (which === 'b')\n return false;\n which = 'a';\n result.push(a[ai]);\n ai++;\n bi++;\n }\n else if (b[bi] === '*' &&\n a[ai] &&\n (this.options.dot || !a[ai].startsWith('.')) &&\n a[ai] !== '**') {\n if (which === 'a')\n return false;\n which = 'b';\n result.push(b[bi]);\n ai++;\n bi++;\n }\n else {\n return false;\n }\n }\n // if we fall out of the loop, it means they two are identical\n // as long as their lengths match\n return a.length === b.length && result;\n }\n parseNegate() {\n if (this.nonegate)\n return;\n const pattern = this.pattern;\n let negate = false;\n let negateOffset = 0;\n for (let i = 0; i < pattern.length && pattern.charAt(i) === '!'; i++) {\n negate = !negate;\n negateOffset++;\n }\n if (negateOffset)\n this.pattern = pattern.slice(negateOffset);\n this.negate = negate;\n }\n // set partial to true to test if, for example,\n // \"/a/b\" matches the start of \"/*/b/*/d\"\n // Partial means, if you run out of file before you run\n // out of pattern, then that's fine, as long as all\n // the parts match.\n matchOne(file, pattern, partial = false) {\n const options = this.options;\n // a UNC pattern like //?/c:/* can match a path like c:/x\n // and vice versa\n if (this.isWindows) {\n const fileUNC = file[0] === '' &&\n file[1] === '' &&\n file[2] === '?' &&\n typeof file[3] === 'string' &&\n /^[a-z]:$/i.test(file[3]);\n const patternUNC = pattern[0] === '' &&\n pattern[1] === '' &&\n pattern[2] === '?' &&\n typeof pattern[3] === 'string' &&\n /^[a-z]:$/i.test(pattern[3]);\n if (fileUNC && patternUNC) {\n const fd = file[3];\n const pd = pattern[3];\n if (fd.toLowerCase() === pd.toLowerCase()) {\n file[3] = pd;\n }\n }\n else if (patternUNC && typeof file[0] === 'string') {\n const pd = pattern[3];\n const fd = file[0];\n if (pd.toLowerCase() === fd.toLowerCase()) {\n pattern[3] = fd;\n pattern = pattern.slice(3);\n }\n }\n else if (fileUNC && typeof pattern[0] === 'string') {\n const fd = file[3];\n if (fd.toLowerCase() === pattern[0].toLowerCase()) {\n pattern[0] = fd;\n file = file.slice(3);\n }\n }\n }\n // resolve and reduce . and .. portions in the file as well.\n // dont' need to do the second phase, because it's only one string[]\n const { optimizationLevel = 1 } = this.options;\n if (optimizationLevel >= 2) {\n file = this.levelTwoFileOptimize(file);\n }\n this.debug('matchOne', this, { file, pattern });\n this.debug('matchOne', file.length, pattern.length);\n for (var fi = 0, pi = 0, fl = file.length, pl = pattern.length; fi < fl && pi < pl; fi++, pi++) {\n this.debug('matchOne loop');\n var p = pattern[pi];\n var f = file[fi];\n this.debug(pattern, p, f);\n // should be impossible.\n // some invalid regexp stuff in the set.\n /* c8 ignore start */\n if (p === false) {\n return false;\n }\n /* c8 ignore stop */\n if (p === GLOBSTAR) {\n this.debug('GLOBSTAR', [pattern, p, f]);\n // \"**\"\n // a/**/b/**/c would match the following:\n // a/b/x/y/z/c\n // a/x/y/z/b/c\n // a/b/x/b/x/c\n // a/b/c\n // To do this, take the rest of the pattern after\n // the **, and see if it would match the file remainder.\n // If so, return success.\n // If not, the ** \"swallows\" a segment, and try again.\n // This is recursively awful.\n //\n // a/**/b/**/c matching a/b/x/y/z/c\n // - a matches a\n // - doublestar\n // - matchOne(b/x/y/z/c, b/**/c)\n // - b matches b\n // - doublestar\n // - matchOne(x/y/z/c, c) -> no\n // - matchOne(y/z/c, c) -> no\n // - matchOne(z/c, c) -> no\n // - matchOne(c, c) yes, hit\n var fr = fi;\n var pr = pi + 1;\n if (pr === pl) {\n this.debug('** at the end');\n // a ** at the end will just swallow the rest.\n // We have found a match.\n // however, it will not swallow /.x, unless\n // options.dot is set.\n // . and .. are *never* matched by **, for explosively\n // exponential reasons.\n for (; fi < fl; fi++) {\n if (file[fi] === '.' ||\n file[fi] === '..' ||\n (!options.dot && file[fi].charAt(0) === '.'))\n return false;\n }\n return true;\n }\n // ok, let's see if we can swallow whatever we can.\n while (fr < fl) {\n var swallowee = file[fr];\n this.debug('\\nglobstar while', file, fr, pattern, pr, swallowee);\n // XXX remove this slice. Just pass the start index.\n if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) {\n this.debug('globstar found match!', fr, fl, swallowee);\n // found a match.\n return true;\n }\n else {\n // can't swallow \".\" or \"..\" ever.\n // can only swallow \".foo\" when explicitly asked.\n if (swallowee === '.' ||\n swallowee === '..' ||\n (!options.dot && swallowee.charAt(0) === '.')) {\n this.debug('dot detected!', file, fr, pattern, pr);\n break;\n }\n // ** swallows a segment, and continue.\n this.debug('globstar swallow a segment, and continue');\n fr++;\n }\n }\n // no match was found.\n // However, in partial mode, we can't say this is necessarily over.\n /* c8 ignore start */\n if (partial) {\n // ran out of file\n this.debug('\\n>>> no match, partial?', file, fr, pattern, pr);\n if (fr === fl) {\n return true;\n }\n }\n /* c8 ignore stop */\n return false;\n }\n // something other than **\n // non-magic patterns just have to match exactly\n // patterns with magic have been turned into regexps.\n let hit;\n if (typeof p === 'string') {\n hit = f === p;\n this.debug('string match', p, f, hit);\n }\n else {\n hit = p.test(f);\n this.debug('pattern match', p, f, hit);\n }\n if (!hit)\n return false;\n }\n // Note: ending in / means that we'll get a final \"\"\n // at the end of the pattern. This can only match a\n // corresponding \"\" at the end of the file.\n // If the file ends in /, then it can only match a\n // a pattern that ends in /, unless the pattern just\n // doesn't have any more for it. But, a/b/ should *not*\n // match \"a/b/*\", even though \"\" matches against the\n // [^/]*? pattern, except in partial mode, where it might\n // simply not be reached yet.\n // However, a/b/ should still satisfy a/*\n // now either we fell off the end of the pattern, or we're done.\n if (fi === fl && pi === pl) {\n // ran out of pattern and filename at the same time.\n // an exact hit!\n return true;\n }\n else if (fi === fl) {\n // ran out of file, but still had pattern left.\n // this is ok if we're doing the match as part of\n // a glob fs traversal.\n return partial;\n }\n else if (pi === pl) {\n // ran out of pattern, still have file left.\n // this is only acceptable if we're on the very last\n // empty segment of a file with a trailing slash.\n // a/* should match a/b/\n return fi === fl - 1 && file[fi] === '';\n /* c8 ignore start */\n }\n else {\n // should be unreachable.\n throw new Error('wtf?');\n }\n /* c8 ignore stop */\n }\n braceExpand() {\n return braceExpand(this.pattern, this.options);\n }\n parse(pattern) {\n assertValidPattern(pattern);\n const options = this.options;\n // shortcuts\n if (pattern === '**')\n return GLOBSTAR;\n if (pattern === '')\n return '';\n // far and away, the most common glob pattern parts are\n // *, *.*, and *.<ext> Add a fast check method for those.\n let m;\n let fastTest = null;\n if ((m = pattern.match(starRE))) {\n fastTest = options.dot ? starTestDot : starTest;\n }\n else if ((m = pattern.match(starDotExtRE))) {\n fastTest = (options.nocase\n ? options.dot\n ? starDotExtTestNocaseDot\n : starDotExtTestNocase\n : options.dot\n ? starDotExtTestDot\n : starDotExtTest)(m[1]);\n }\n else if ((m = pattern.match(qmarksRE))) {\n fastTest = (options.nocase\n ? options.dot\n ? qmarksTestNocaseDot\n : qmarksTestNocase\n : options.dot\n ? qmarksTestDot\n : qmarksTest)(m);\n }\n else if ((m = pattern.match(starDotStarRE))) {\n fastTest = options.dot ? starDotStarTestDot : starDotStarTest;\n }\n else if ((m = pattern.match(dotStarRE))) {\n fastTest = dotStarTest;\n }\n let re = '';\n let hasMagic = false;\n let escaping = false;\n // ? => one single character\n const patternListStack = [];\n const negativeLists = [];\n let stateChar = false;\n let uflag = false;\n let pl;\n // . and .. never match anything that doesn't start with .,\n // even when options.dot is set. However, if the pattern\n // starts with ., then traversal patterns can match.\n let dotTravAllowed = pattern.charAt(0) === '.';\n let dotFileAllowed = options.dot || dotTravAllowed;\n const patternStart = () => dotTravAllowed\n ? ''\n : dotFileAllowed\n ? '(?!(?:^|\\\\/)\\\\.{1,2}(?:$|\\\\/))'\n : '(?!\\\\.)';\n const subPatternStart = (p) => p.charAt(0) === '.'\n ? ''\n : options.dot\n ? '(?!(?:^|\\\\/)\\\\.{1,2}(?:$|\\\\/))'\n : '(?!\\\\.)';\n const clearStateChar = () => {\n if (stateChar) {\n // we had some state-tracking character\n // that wasn't consumed by this pass.\n switch (stateChar) {\n case '*':\n re += star;\n hasMagic = true;\n break;\n case '?':\n re += qmark;\n hasMagic = true;\n break;\n default:\n re += '\\\\' + stateChar;\n break;\n }\n this.debug('clearStateChar %j %j', stateChar, re);\n stateChar = false;\n }\n };\n for (let i = 0, c; i < pattern.length && (c = pattern.charAt(i)); i++) {\n this.debug('%s\\t%s %s %j', pattern, i, re, c);\n // skip over any that are escaped.\n if (escaping) {\n // completely not allowed, even escaped.\n // should be impossible.\n /* c8 ignore start */\n if (c === '/') {\n return false;\n }\n /* c8 ignore stop */\n if (reSpecials[c]) {\n re += '\\\\';\n }\n re += c;\n escaping = false;\n continue;\n }\n switch (c) {\n // Should already be path-split by now.\n /* c8 ignore start */\n case '/': {\n return false;\n }\n /* c8 ignore stop */\n case '\\\\':\n clearStateChar();\n escaping = true;\n continue;\n // the various stateChar values\n // for the \"extglob\" stuff.\n case '?':\n case '*':\n case '+':\n case '@':\n case '!':\n this.debug('%s\\t%s %s %j <-- stateChar', pattern, i, re, c);\n // if we already have a stateChar, then it means\n // that there was something like ** or +? in there.\n // Handle the stateChar, then proceed with this one.\n this.debug('call clearStateChar %j', stateChar);\n clearStateChar();\n stateChar = c;\n // if extglob is disabled, then +(asdf|foo) isn't a thing.\n // just clear the statechar *now*, rather than even diving into\n // the patternList stuff.\n if (options.noext)\n clearStateChar();\n continue;\n case '(': {\n if (!stateChar) {\n re += '\\\\(';\n continue;\n }\n const plEntry = {\n type: stateChar,\n start: i - 1,\n reStart: re.length,\n open: plTypes[stateChar].open,\n close: plTypes[stateChar].close,\n };\n this.debug(this.pattern, '\\t', plEntry);\n patternListStack.push(plEntry);\n // negation is (?:(?!(?:js)(?:<rest>))[^/]*)\n re += plEntry.open;\n // next entry starts with a dot maybe?\n if (plEntry.start === 0 && plEntry.type !== '!') {\n dotTravAllowed = true;\n re += subPatternStart(pattern.slice(i + 1));\n }\n this.debug('plType %j %j', stateChar, re);\n stateChar = false;\n continue;\n }\n case ')': {\n const plEntry = patternListStack[patternListStack.length - 1];\n if (!plEntry) {\n re += '\\\\)';\n continue;\n }\n patternListStack.pop();\n // closing an extglob\n clearStateChar();\n hasMagic = true;\n pl = plEntry;\n // negation is (?:(?!js)[^/]*)\n // The others are (?:<pattern>)<type>\n re += pl.close;\n if (pl.type === '!') {\n negativeLists.push(Object.assign(pl, { reEnd: re.length }));\n }\n continue;\n }\n case '|': {\n const plEntry = patternListStack[patternListStack.length - 1];\n if (!plEntry) {\n re += '\\\\|';\n continue;\n }\n clearStateChar();\n re += '|';\n // next subpattern can start with a dot?\n if (plEntry.start === 0 && plEntry.type !== '!') {\n dotTravAllowed = true;\n re += subPatternStart(pattern.slice(i + 1));\n }\n continue;\n }\n // these are mostly the same in regexp and glob\n case '[':\n // swallow any state-tracking char before the [\n clearStateChar();\n const [src, needUflag, consumed, magic] = parseClass(pattern, i);\n if (consumed) {\n re += src;\n uflag = uflag || needUflag;\n i += consumed - 1;\n hasMagic = hasMagic || magic;\n }\n else {\n re += '\\\\[';\n }\n continue;\n case ']':\n re += '\\\\' + c;\n continue;\n default:\n // swallow any state char that wasn't consumed\n clearStateChar();\n re += regExpEscape(c);\n break;\n } // switch\n } // for\n // handle the case where we had a +( thing at the *end*\n // of the pattern.\n // each pattern list stack adds 3 chars, and we need to go through\n // and escape any | chars that were passed through as-is for the regexp.\n // Go through and escape them, taking care not to double-escape any\n // | chars that were already escaped.\n for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) {\n let tail;\n tail = re.slice(pl.reStart + pl.open.length);\n this.debug(this.pattern, 'setting tail', re, pl);\n // maybe some even number of \\, then maybe 1 \\, followed by a |\n tail = tail.replace(/((?:\\\\{2}){0,64})(\\\\?)\\|/g, (_, $1, $2) => {\n if (!$2) {\n // the | isn't already escaped, so escape it.\n $2 = '\\\\';\n // should already be done\n /* c8 ignore start */\n }\n /* c8 ignore stop */\n // need to escape all those slashes *again*, without escaping the\n // one that we need for escaping the | character. As it works out,\n // escaping an even number of slashes can be done by simply repeating\n // it exactly after itself. That's why this trick works.\n //\n // I am sorry that you have to see this.\n return $1 + $1 + $2 + '|';\n });\n this.debug('tail=%j\\n %s', tail, tail, pl, re);\n const t = pl.type === '*' ? star : pl.type === '?' ? qmark : '\\\\' + pl.type;\n hasMagic = true;\n re = re.slice(0, pl.reStart) + t + '\\\\(' + tail;\n }\n // handle trailing things that only matter at the very end.\n clearStateChar();\n if (escaping) {\n // trailing \\\\\n re += '\\\\\\\\';\n }\n // only need to apply the nodot start if the re starts with\n // something that could conceivably capture a dot\n const addPatternStart = addPatternStartSet[re.charAt(0)];\n // Hack to work around lack of negative lookbehind in JS\n // A pattern like: *.!(x).!(y|z) needs to ensure that a name\n // like 'a.xyz.yz' doesn't match. So, the first negative\n // lookahead, has to look ALL the way ahead, to the end of\n // the pattern.\n for (let n = negativeLists.length - 1; n > -1; n--) {\n const nl = negativeLists[n];\n const nlBefore = re.slice(0, nl.reStart);\n const nlFirst = re.slice(nl.reStart, nl.reEnd - 8);\n let nlAfter = re.slice(nl.reEnd);\n const nlLast = re.slice(nl.reEnd - 8, nl.reEnd) + nlAfter;\n // Handle nested stuff like *(*.js|!(*.json)), where open parens\n // mean that we should *not* include the ) in the bit that is considered\n // \"after\" the negated section.\n const closeParensBefore = nlBefore.split(')').length;\n const openParensBefore = nlBefore.split('(').length - closeParensBefore;\n let cleanAfter = nlAfter;\n for (let i = 0; i < openParensBefore; i++) {\n cleanAfter = cleanAfter.replace(/\\)[+*?]?/, '');\n }\n nlAfter = cleanAfter;\n const dollar = nlAfter === '' ? '(?:$|\\\\/)' : '';\n re = nlBefore + nlFirst + nlAfter + dollar + nlLast;\n }\n // if the re is not \"\" at this point, then we need to make sure\n // it doesn't match against an empty path part.\n // Otherwise a/* will match a/, which it should not.\n if (re !== '' && hasMagic) {\n re = '(?=.)' + re;\n }\n if (addPatternStart) {\n re = patternStart() + re;\n }\n // if it's nocase, and the lcase/uppercase don't match, it's magic\n if (options.nocase && !hasMagic && !options.nocaseMagicOnly) {\n hasMagic = pattern.toUpperCase() !== pattern.toLowerCase();\n }\n // skip the regexp for non-magical patterns\n // unescape anything in it, though, so that it'll be\n // an exact match against a file etc.\n if (!hasMagic) {\n return globUnescape(re);\n }\n const flags = (options.nocase ? 'i' : '') + (uflag ? 'u' : '');\n try {\n const ext = fastTest\n ? {\n _glob: pattern,\n _src: re,\n test: fastTest,\n }\n : {\n _glob: pattern,\n _src: re,\n };\n return Object.assign(new RegExp('^' + re + '$', flags), ext);\n /* c8 ignore start */\n }\n catch (er) {\n // should be impossible\n // If it was an invalid regular expression, then it can't match\n // anything. This trick looks for a character after the end of\n // the string, which is of course impossible, except in multi-line\n // mode, but it's not a /m regex.\n this.debug('invalid regexp', er);\n return new RegExp('$.');\n }\n /* c8 ignore stop */\n }\n makeRe() {\n if (this.regexp || this.regexp === false)\n return this.regexp;\n // at this point, this.set is a 2d array of partial\n // pattern strings, or \"**\".\n //\n // It's better to use .match(). This function shouldn't\n // be used, really, but it's pretty convenient sometimes,\n // when you just want to work with a regex.\n const set = this.set;\n if (!set.length) {\n this.regexp = false;\n return this.regexp;\n }\n const options = this.options;\n const twoStar = options.noglobstar\n ? star\n : options.dot\n ? twoStarDot\n : twoStarNoDot;\n const flags = options.nocase ? 'i' : '';\n // regexpify non-globstar patterns\n // if ** is only item, then we just do one twoStar\n // if ** is first, and there are more, prepend (\\/|twoStar\\/)? to next\n // if ** is last, append (\\/twoStar|) to previous\n // if ** is in the middle, append (\\/|\\/twoStar\\/) to previous\n // then filter out GLOBSTAR symbols\n let re = set\n .map(pattern => {\n const pp = pattern.map(p => typeof p === 'string'\n ? regExpEscape(p)\n : p === GLOBSTAR\n ? GLOBSTAR\n : p._src);\n pp.forEach((p, i) => {\n const next = pp[i + 1];\n const prev = pp[i - 1];\n if (p !== GLOBSTAR || prev === GLOBSTAR) {\n return;\n }\n if (prev === undefined) {\n if (next !== undefined && next !== GLOBSTAR) {\n pp[i + 1] = '(?:\\\\/|' + twoStar + '\\\\/)?' + next;\n }\n else {\n pp[i] = twoStar;\n }\n }\n else if (next === undefined) {\n pp[i - 1] = prev + '(?:\\\\/|' + twoStar + ')?';\n }\n else if (next !== GLOBSTAR) {\n pp[i - 1] = prev + '(?:\\\\/|\\\\/' + twoStar + '\\\\/)' + next;\n pp[i + 1] = GLOBSTAR;\n }\n });\n return pp.filter(p => p !== GLOBSTAR).join('/');\n })\n .join('|');\n // must match entire pattern\n // ending in a * or ** will make it less strict.\n re = '^(?:' + re + ')$';\n // can match anything, as long as it's not this.\n if (this.negate)\n re = '^(?!' + re + ').*$';\n try {\n this.regexp = new RegExp(re, flags);\n /* c8 ignore start */\n }\n catch (ex) {\n // should be impossible\n this.regexp = false;\n }\n /* c8 ignore stop */\n return this.regexp;\n }\n slashSplit(p) {\n // if p starts with // on windows, we preserve that\n // so that UNC paths aren't broken. Otherwise, any number of\n // / characters are coalesced into one, unless\n // preserveMultipleSlashes is set to true.\n if (this.preserveMultipleSlashes) {\n return p.split('/');\n }\n else if (this.isWindows && /^\\/\\/[^\\/]+/.test(p)) {\n // add an extra '' for the one we lose\n return ['', ...p.split(/\\/+/)];\n }\n else {\n return p.split(/\\/+/);\n }\n }\n match(f, partial = this.partial) {\n this.debug('match', f, this.pattern);\n // short-circuit in the case of busted things.\n // comments, etc.\n if (this.comment) {\n return false;\n }\n if (this.empty) {\n return f === '';\n }\n if (f === '/' && partial) {\n return true;\n }\n const options = this.options;\n // windows: need to use /, not \\\n if (this.isWindows) {\n f = f.split('\\\\').join('/');\n }\n // treat the test path as a set of pathparts.\n const ff = this.slashSplit(f);\n this.debug(this.pattern, 'split', ff);\n // just ONE of the pattern sets in this.set needs to match\n // in order for it to be valid. If negating, then just one\n // match means that we have failed.\n // Either way, return on the first hit.\n const set = this.set;\n this.debug(this.pattern, 'set', set);\n // Find the basename of the path by looking for the last non-empty segment\n let filename = ff[ff.length - 1];\n if (!filename) {\n for (let i = ff.length - 2; !filename && i >= 0; i--) {\n filename = ff[i];\n }\n }\n for (let i = 0; i < set.length; i++) {\n const pattern = set[i];\n let file = ff;\n if (options.matchBase && pattern.length === 1) {\n file = [filename];\n }\n const hit = this.matchOne(file, pattern, partial);\n if (hit) {\n if (options.flipNegate) {\n return true;\n }\n return !this.negate;\n }\n }\n // didn't get any hits. this is success if it's a negative\n // pattern, failure otherwise.\n if (options.flipNegate) {\n return false;\n }\n return this.negate;\n }\n static defaults(def) {\n return minimatch.defaults(def).Minimatch;\n }\n}\n/* c8 ignore start */\nexport { escape } from './escape.js';\nexport { unescape } from './unescape.js';\n/* c8 ignore stop */\nminimatch.Minimatch = Minimatch;\nminimatch.escape = escape;\nminimatch.unescape = unescape;\n//# sourceMappingURL=index.js.map","export function convertResponseHeaders(headers) {\n const output = {};\n for (const key of headers.keys()) {\n output[key] = headers.get(key);\n }\n return output;\n}\nexport function mergeHeaders(...headerPayloads) {\n if (headerPayloads.length === 0)\n return {};\n const headerKeys = {};\n return headerPayloads.reduce((output, headers) => {\n Object.keys(headers).forEach(header => {\n const lowerHeader = header.toLowerCase();\n if (headerKeys.hasOwnProperty(lowerHeader)) {\n output[headerKeys[lowerHeader]] = headers[header];\n }\n else {\n headerKeys[lowerHeader] = header;\n output[header] = headers[header];\n }\n });\n return output;\n }, {});\n}\n","/**\n * Escape all magic characters in a glob pattern.\n *\n * If the {@link windowsPathsNoEscape | GlobOptions.windowsPathsNoEscape}\n * option is used, then characters are escaped by wrapping in `[]`, because\n * a magic character wrapped in a character class can only be satisfied by\n * that exact character. In this mode, `\\` is _not_ escaped, because it is\n * not interpreted as a magic character, but instead as a path separator.\n */\nexport const escape = (s, { windowsPathsNoEscape = false, } = {}) => {\n // don't need to escape +@! because we escape the parens\n // that make those magic, and escaping ! as [!] isn't valid,\n // because [!]] is a valid glob class meaning not ']'.\n return windowsPathsNoEscape\n ? s.replace(/[?*()[\\]]/g, '[$&]')\n : s.replace(/[?*()[\\]\\\\]/g, '\\\\$&');\n};\n//# sourceMappingURL=escape.js.map","/**\n * Un-escape a string that has been escaped with {@link escape}.\n *\n * If the {@link windowsPathsNoEscape} option is used, then square-brace\n * escapes are removed, but not backslash escapes. For example, it will turn\n * the string `'[*]'` into `*`, but it will not turn `'\\\\*'` into `'*'`,\n * becuase `\\` is a path separator in `windowsPathsNoEscape` mode.\n *\n * When `windowsPathsNoEscape` is not set, then both brace escapes and\n * backslash escapes are removed.\n *\n * Slashes (and backslashes in `windowsPathsNoEscape` mode) cannot be escaped\n * or unescaped.\n */\nexport const unescape = (s, { windowsPathsNoEscape = false, } = {}) => {\n return windowsPathsNoEscape\n ? s.replace(/\\[([^\\/\\\\])\\]/g, '$1')\n : s.replace(/((?!\\\\).|^)\\[([^\\/\\\\])\\]/g, '$1$2').replace(/\\\\([^\\/])/g, '$1');\n};\n//# sourceMappingURL=unescape.js.map","import path from \"path-posix\";\nimport { XMLParser } from \"fast-xml-parser\";\nimport nestedProp from \"nested-property\";\nimport { encodePath, normalisePath } from \"./path.js\";\nvar PropertyType;\n(function (PropertyType) {\n PropertyType[\"Array\"] = \"array\";\n PropertyType[\"Object\"] = \"object\";\n PropertyType[\"Original\"] = \"original\";\n})(PropertyType || (PropertyType = {}));\nfunction getParser() {\n return new XMLParser({\n removeNSPrefix: true,\n numberParseOptions: {\n hex: true,\n leadingZeros: false\n }\n // We don't use the processors here as decoding is done manually\n // later on - decoding early would break some path checks.\n });\n}\nfunction getPropertyOfType(obj, prop, type = PropertyType.Original) {\n const val = nestedProp.get(obj, prop);\n if (type === \"array\" && Array.isArray(val) === false) {\n return [val];\n }\n else if (type === \"object\" && Array.isArray(val)) {\n return val[0];\n }\n return val;\n}\nfunction normaliseResponse(response) {\n const output = Object.assign({}, response);\n // Only either status OR propstat is allowed\n if (output.status) {\n nestedProp.set(output, \"status\", getPropertyOfType(output, \"status\", PropertyType.Object));\n }\n else {\n nestedProp.set(output, \"propstat\", getPropertyOfType(output, \"propstat\", PropertyType.Object));\n nestedProp.set(output, \"propstat.prop\", getPropertyOfType(output, \"propstat.prop\", PropertyType.Object));\n }\n return output;\n}\nfunction normaliseResult(result) {\n const { multistatus } = result;\n if (multistatus === \"\") {\n return {\n multistatus: {\n response: []\n }\n };\n }\n if (!multistatus) {\n throw new Error(\"Invalid response: No root multistatus found\");\n }\n const output = {\n multistatus: Array.isArray(multistatus) ? multistatus[0] : multistatus\n };\n nestedProp.set(output, \"multistatus.response\", getPropertyOfType(output, \"multistatus.response\", PropertyType.Array));\n nestedProp.set(output, \"multistatus.response\", nestedProp.get(output, \"multistatus.response\").map(response => normaliseResponse(response)));\n return output;\n}\n/**\n * Parse an XML response from a WebDAV service,\n * converting it to an internal DAV result\n * @param xml The raw XML string\n * @returns A parsed and processed DAV result\n */\nexport function parseXML(xml) {\n return new Promise(resolve => {\n const result = getParser().parse(xml);\n resolve(normaliseResult(result));\n });\n}\n/**\n * Get a file stat result from given DAV properties\n * @param props DAV properties\n * @param filename The filename for the file stat\n * @param isDetailed Whether or not the raw props of the resource should be returned\n * @returns A file stat result\n */\nexport function prepareFileFromProps(props, filename, isDetailed = false) {\n // Last modified time, raw size, item type and mime\n const { getlastmodified: lastMod = null, getcontentlength: rawSize = \"0\", resourcetype: resourceType = null, getcontenttype: mimeType = null, getetag: etag = null } = props;\n const type = resourceType &&\n typeof resourceType === \"object\" &&\n typeof resourceType.collection !== \"undefined\"\n ? \"directory\"\n : \"file\";\n const stat = {\n filename,\n basename: path.basename(filename),\n lastmod: lastMod,\n size: parseInt(rawSize, 10),\n type,\n etag: typeof etag === \"string\" ? etag.replace(/\"/g, \"\") : null\n };\n if (type === \"file\") {\n stat.mime = mimeType && typeof mimeType === \"string\" ? mimeType.split(\";\")[0] : \"\";\n }\n if (isDetailed) {\n stat.props = props;\n }\n return stat;\n}\n/**\n * Parse a DAV result for file stats\n * @param result The resulting DAV response\n * @param filename The filename that was stat'd\n * @param isDetailed Whether or not the raw props of\n * the resource should be returned\n * @returns A file stat result\n */\nexport function parseStat(result, filename, isDetailed = false) {\n let responseItem = null;\n try {\n // should be a propstat response, if not the if below will throw an error\n if (result.multistatus.response[0].propstat) {\n responseItem = result.multistatus.response[0];\n }\n }\n catch (e) {\n /* ignore */\n }\n if (!responseItem) {\n throw new Error(\"Failed getting item stat: bad response\");\n }\n const { propstat: { prop: props, status: statusLine } } = responseItem;\n // As defined in https://tools.ietf.org/html/rfc2068#section-6.1\n const [_, statusCodeStr, statusText] = statusLine.split(\" \", 3);\n const statusCode = parseInt(statusCodeStr, 10);\n if (statusCode >= 400) {\n const err = new Error(`Invalid response: ${statusCode} ${statusText}`);\n err.status = statusCode;\n throw err;\n }\n const filePath = normalisePath(filename);\n return prepareFileFromProps(props, filePath, isDetailed);\n}\n/**\n * Parse a DAV result for a search request\n *\n * @param result The resulting DAV response\n * @param searchArbiter The collection path that was searched\n * @param isDetailed Whether or not the raw props of the resource should be returned\n */\nexport function parseSearch(result, searchArbiter, isDetailed) {\n const response = {\n truncated: false,\n results: []\n };\n response.truncated = result.multistatus.response.some(v => {\n return ((v.status || v.propstat?.status).split(\" \", 3)?.[1] === \"507\" &&\n v.href.replace(/\\/$/, \"\").endsWith(encodePath(searchArbiter).replace(/\\/$/, \"\")));\n });\n result.multistatus.response.forEach(result => {\n if (result.propstat === undefined) {\n return;\n }\n const filename = result.href.split(\"/\").map(decodeURIComponent).join(\"/\");\n response.results.push(prepareFileFromProps(result.propstat.prop, filename, isDetailed));\n });\n return response;\n}\n/**\n * Translate a disk quota indicator to a recognised\n * value (includes \"unlimited\" and \"unknown\")\n * @param value The quota indicator, eg. \"-3\"\n * @returns The value in bytes, or another indicator\n */\nexport function translateDiskSpace(value) {\n switch (value.toString()) {\n case \"-3\":\n return \"unlimited\";\n case \"-2\":\n /* falls-through */\n case \"-1\":\n // -1 is non-computed\n return \"unknown\";\n default:\n return parseInt(value, 10);\n }\n}\n","import { assertError, isError } from \"./error.js\";\nimport { parseArguments } from \"./tools.js\";\nexport class Layerr extends Error {\n constructor(errorOptionsOrMessage, messageText) {\n const args = [...arguments];\n const { options, shortMessage } = parseArguments(args);\n let message = shortMessage;\n if (options.cause) {\n message = `${message}: ${options.cause.message}`;\n }\n super(message);\n this.message = message;\n if (options.name && typeof options.name === \"string\") {\n this.name = options.name;\n }\n else {\n this.name = \"Layerr\";\n }\n if (options.cause) {\n Object.defineProperty(this, \"_cause\", { value: options.cause });\n }\n Object.defineProperty(this, \"_info\", { value: {} });\n if (options.info && typeof options.info === \"object\") {\n Object.assign(this._info, options.info);\n }\n if (Error.captureStackTrace) {\n const ctor = options.constructorOpt || this.constructor;\n Error.captureStackTrace(this, ctor);\n }\n }\n static cause(err) {\n assertError(err);\n if (!err._cause)\n return null;\n return isError(err._cause) ? err._cause : null;\n }\n static fullStack(err) {\n assertError(err);\n const cause = Layerr.cause(err);\n if (cause) {\n return `${err.stack}\\ncaused by: ${Layerr.fullStack(cause)}`;\n }\n return err.stack;\n }\n static info(err) {\n assertError(err);\n const output = {};\n const cause = Layerr.cause(err);\n if (cause) {\n Object.assign(output, Layerr.info(cause));\n }\n if (err._info) {\n Object.assign(output, err._info);\n }\n return output;\n }\n cause() {\n return Layerr.cause(this);\n }\n toString() {\n let output = this.name || this.constructor.name || this.constructor.prototype.name;\n if (this.message) {\n output = `${output}: ${this.message}`;\n }\n return output;\n }\n}\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport { parseXML } from 'webdav';\n// https://github.com/perry-mitchell/webdav-client/issues/339\nimport { processResponsePayload } from 'webdav/dist/node/response.js';\nimport { prepareFileFromProps } from 'webdav/dist/node/tools/dav.js';\nimport client from './DavClient.js';\nexport const DEFAULT_LIMIT = 20;\n/**\n * Retrieve the comments list\n *\n * @param {object} data destructuring object\n * @param {string} data.resourceType the resource type\n * @param {number} data.resourceId the resource ID\n * @param {object} [options] optional options for axios\n * @param {number} [options.offset] the pagination offset\n * @param {number} [options.limit] the pagination limit, defaults to 20\n * @param {Date} [options.datetime] optional date to query\n * @return {{data: object[]}} the comments list\n */\nexport const getComments = async function ({ resourceType, resourceId }, options) {\n const resourcePath = ['', resourceType, resourceId].join('/');\n const datetime = options.datetime ? `<oc:datetime>${options.datetime.toISOString()}</oc:datetime>` : '';\n const response = await client.customRequest(resourcePath, Object.assign({\n method: 'REPORT',\n data: `<?xml version=\"1.0\"?>\n\t\t\t<oc:filter-comments\n\t\t\t\txmlns:d=\"DAV:\"\n\t\t\t\txmlns:oc=\"http://owncloud.org/ns\"\n\t\t\t\txmlns:nc=\"http://nextcloud.org/ns\"\n\t\t\t\txmlns:ocs=\"http://open-collaboration-services.org/ns\">\n\t\t\t\t<oc:limit>${options.limit ?? DEFAULT_LIMIT}</oc:limit>\n\t\t\t\t<oc:offset>${options.offset || 0}</oc:offset>\n\t\t\t\t${datetime}\n\t\t\t</oc:filter-comments>`,\n }, options));\n const responseData = await response.text();\n const result = await parseXML(responseData);\n const stat = getDirectoryFiles(result, true);\n return processResponsePayload(response, stat, true);\n};\n// https://github.com/perry-mitchell/webdav-client/blob/8d9694613c978ce7404e26a401c39a41f125f87f/source/operations/directoryContents.ts\nconst getDirectoryFiles = function (result, isDetailed = false) {\n // Extract the response items (directory contents)\n const { multistatus: { response: responseItems }, } = result;\n // Map all items to a consistent output structure (results)\n return responseItems.map(item => {\n // Each item should contain a stat object\n const props = item.propstat.prop;\n return prepareFileFromProps(props, props.id.toString(), isDetailed);\n });\n};\n","/**\n * @copyright Copyright (c) 2023 Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @author Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport moment from '@nextcloud/moment';\nimport Vue from 'vue';\nimport logger from './logger.js';\nimport { getComments } from './services/GetComments.js';\nlet ActivityTabPluginView;\nlet ActivityTabPluginInstance;\n/**\n * Register the comments plugins for the Activity sidebar\n */\nexport function registerCommentsPlugins() {\n window.OCA.Activity.registerSidebarAction({\n mount: async (el, { context, fileInfo, reload }) => {\n if (!ActivityTabPluginView) {\n const { default: ActivityCommmentAction } = await import('./views/ActivityCommentAction.vue');\n ActivityTabPluginView = Vue.extend(ActivityCommmentAction);\n }\n ActivityTabPluginInstance = new ActivityTabPluginView({\n parent: context,\n propsData: {\n reloadCallback: reload,\n resourceId: fileInfo.id,\n },\n });\n ActivityTabPluginInstance.$mount(el);\n logger.info('Comments plugin mounted in Activity sidebar action', { fileInfo });\n },\n unmount: () => {\n // destroy previous instance if available\n if (ActivityTabPluginInstance) {\n ActivityTabPluginInstance.$destroy();\n }\n },\n });\n window.OCA.Activity.registerSidebarEntries(async ({ fileInfo, limit, offset }) => {\n const { data: comments } = await getComments({ resourceType: 'files', resourceId: fileInfo.id }, { limit, offset });\n logger.debug('Loaded comments', { fileInfo, comments });\n const { default: CommentView } = await import('./views/ActivityCommentEntry.vue');\n const CommentsViewObject = Vue.extend(CommentView);\n return comments.map((comment) => ({\n timestamp: moment(comment.props.creationDateTime).toDate().getTime(),\n mount(element, { context, reload }) {\n this._CommentsViewInstance = new CommentsViewObject({\n parent: context,\n propsData: {\n comment,\n resourceId: fileInfo.id,\n reloadCallback: reload,\n },\n });\n this._CommentsViewInstance.$mount(element);\n },\n unmount() {\n this._CommentsViewInstance.$destroy();\n },\n }));\n });\n window.OCA.Activity.registerSidebarFilter((activity) => activity.type !== 'comments');\n logger.info('Comments plugin registered for Activity sidebar action');\n}\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n// eslint-disable-next-line n/no-missing-import, import/no-unresolved\nimport MessageReplyText from '@mdi/svg/svg/message-reply-text.svg?raw'\nimport { getRequestToken } from '@nextcloud/auth'\nimport { loadState } from '@nextcloud/initial-state'\nimport { registerCommentsPlugins } from './comments-activity-tab.ts'\n\n// @ts-expect-error __webpack_nonce__ is injected by webpack\n__webpack_nonce__ = btoa(getRequestToken())\n\nif (loadState('comments', 'activityEnabled', false) && OCA?.Activity?.registerSidebarAction !== undefined) {\n\t// Do not mount own tab but mount into activity\n\twindow.addEventListener('DOMContentLoaded', function() {\n\t\tregisterCommentsPlugins()\n\t})\n} else {\n\t// Init Comments tab component\n\tlet TabInstance = null\n\tconst commentTab = new OCA.Files.Sidebar.Tab({\n\t\tid: 'comments',\n\t\tname: t('comments', 'Comments'),\n\t\ticonSvg: MessageReplyText,\n\n\t\tasync mount(el, fileInfo, context) {\n\t\t\tif (TabInstance) {\n\t\t\t\tTabInstance.$destroy()\n\t\t\t}\n\t\t\tTabInstance = new OCA.Comments.View('files', {\n\t\t\t\t// Better integration with vue parent component\n\t\t\t\tparent: context,\n\t\t\t})\n\t\t\t// Only mount after we have all the info we need\n\t\t\tawait TabInstance.update(fileInfo.id)\n\t\t\tTabInstance.$mount(el)\n\t\t},\n\t\tupdate(fileInfo) {\n\t\t\tTabInstance.update(fileInfo.id)\n\t\t},\n\t\tdestroy() {\n\t\t\tTabInstance.$destroy()\n\t\t\tTabInstance = null\n\t\t},\n\t\tscrollBottomReached() {\n\t\t\tTabInstance.onScrollBottomReached()\n\t\t},\n\t})\n\n\twindow.addEventListener('DOMContentLoaded', function() {\n\t\tif (OCA.Files && OCA.Files.Sidebar) {\n\t\t\tOCA.Files.Sidebar.registerTab(commentTab)\n\t\t}\n\t})\n}\n","import minimatch from \"minimatch\";\nimport { convertResponseHeaders } from \"./tools/headers.js\";\nexport function createErrorFromResponse(response, prefix = \"\") {\n const err = new Error(`${prefix}Invalid response: ${response.status} ${response.statusText}`);\n err.status = response.status;\n err.response = response;\n return err;\n}\nexport function handleResponseCode(context, response) {\n const { status } = response;\n if (status === 401 && context.digest)\n return response;\n if (status >= 400) {\n const err = createErrorFromResponse(response);\n throw err;\n }\n return response;\n}\nexport function processGlobFilter(files, glob) {\n return files.filter(file => minimatch(file.filename, glob, { matchBase: true }));\n}\n/**\n * Process a response payload (eg. from `customRequest`) and\n * prepare it for further processing. Exposed for custom\n * request handling.\n * @param response The response for a request\n * @param data The data returned\n * @param isDetailed Whether or not a detailed result is\n * requested\n * @returns The response data, or a detailed response object\n * if required\n */\nexport function processResponsePayload(response, data, isDetailed = false) {\n return isDetailed\n ? {\n data,\n headers: response.headers ? convertResponseHeaders(response.headers) : {},\n status: response.status,\n statusText: response.statusText\n }\n : data;\n}\n","/**\n * @copyright Copyright (c) 2023 Lucas Azevedo <lhs_azevedo@hotmail.com>\n *\n * @author Lucas Azevedo <lhs_azevedo@hotmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { getLoggerBuilder } from '@nextcloud/logger'\n\nexport default getLoggerBuilder()\n\t.setApp('comments')\n\t.detectUser()\n\t.build()\n","/**\n * @copyright Copyright (c) 2021 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { createClient } from 'webdav'\nimport { getRootPath } from '../utils/davUtils.js'\nimport { getRequestToken, onRequestTokenUpdate } from '@nextcloud/auth'\n\n// init webdav client\nconst client = createClient(getRootPath())\n\n// set CSRF token header\nconst setHeaders = (token) => {\n client.setHeaders({\n // Add this so the server knows it is an request from the browser\n 'X-Requested-With': 'XMLHttpRequest',\n // Inject user auth\n requesttoken: token ?? '',\n })\n}\n\n// refresh headers when request token changes\nonRequestTokenUpdate(setHeaders)\nsetHeaders(getRequestToken())\n\nexport default client\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { generateRemoteUrl } from '@nextcloud/router'\n\nconst getRootPath = function() {\n\treturn generateRemoteUrl('dav/comments')\n}\n\nexport { getRootPath }\n","'use strict';\nmodule.exports = balanced;\nfunction balanced(a, b, str) {\n if (a instanceof RegExp) a = maybeMatch(a, str);\n if (b instanceof RegExp) b = maybeMatch(b, str);\n\n var r = range(a, b, str);\n\n return r && {\n start: r[0],\n end: r[1],\n pre: str.slice(0, r[0]),\n body: str.slice(r[0] + a.length, r[1]),\n post: str.slice(r[1] + b.length)\n };\n}\n\nfunction maybeMatch(reg, str) {\n var m = str.match(reg);\n return m ? m[0] : null;\n}\n\nbalanced.range = range;\nfunction range(a, b, str) {\n var begs, beg, left, right, result;\n var ai = str.indexOf(a);\n var bi = str.indexOf(b, ai + 1);\n var i = ai;\n\n if (ai >= 0 && bi > 0) {\n if(a===b) {\n return [ai, bi];\n }\n begs = [];\n left = str.length;\n\n while (i >= 0 && !result) {\n if (i == ai) {\n begs.push(i);\n ai = str.indexOf(a, i + 1);\n } else if (begs.length == 1) {\n result = [ begs.pop(), bi ];\n } else {\n beg = begs.pop();\n if (beg < left) {\n left = beg;\n right = bi;\n }\n\n bi = str.indexOf(b, i + 1);\n }\n\n i = ai < bi && ai >= 0 ? ai : bi;\n }\n\n if (begs.length) {\n result = [ left, right ];\n }\n }\n\n return result;\n}\n","var balanced = require('balanced-match');\n\nmodule.exports = expandTop;\n\nvar escSlash = '\\0SLASH'+Math.random()+'\\0';\nvar escOpen = '\\0OPEN'+Math.random()+'\\0';\nvar escClose = '\\0CLOSE'+Math.random()+'\\0';\nvar escComma = '\\0COMMA'+Math.random()+'\\0';\nvar escPeriod = '\\0PERIOD'+Math.random()+'\\0';\n\nfunction numeric(str) {\n return parseInt(str, 10) == str\n ? parseInt(str, 10)\n : str.charCodeAt(0);\n}\n\nfunction escapeBraces(str) {\n return str.split('\\\\\\\\').join(escSlash)\n .split('\\\\{').join(escOpen)\n .split('\\\\}').join(escClose)\n .split('\\\\,').join(escComma)\n .split('\\\\.').join(escPeriod);\n}\n\nfunction unescapeBraces(str) {\n return str.split(escSlash).join('\\\\')\n .split(escOpen).join('{')\n .split(escClose).join('}')\n .split(escComma).join(',')\n .split(escPeriod).join('.');\n}\n\n\n// Basically just str.split(\",\"), but handling cases\n// where we have nested braced sections, which should be\n// treated as individual members, like {a,{b,c},d}\nfunction parseCommaParts(str) {\n if (!str)\n return [''];\n\n var parts = [];\n var m = balanced('{', '}', str);\n\n if (!m)\n return str.split(',');\n\n var pre = m.pre;\n var body = m.body;\n var post = m.post;\n var p = pre.split(',');\n\n p[p.length-1] += '{' + body + '}';\n var postParts = parseCommaParts(post);\n if (post.length) {\n p[p.length-1] += postParts.shift();\n p.push.apply(p, postParts);\n }\n\n parts.push.apply(parts, p);\n\n return parts;\n}\n\nfunction expandTop(str) {\n if (!str)\n return [];\n\n // I don't know why Bash 4.3 does this, but it does.\n // Anything starting with {} will have the first two bytes preserved\n // but *only* at the top level, so {},a}b will not expand to anything,\n // but a{},b}c will be expanded to [a}c,abc].\n // One could argue that this is a bug in Bash, but since the goal of\n // this module is to match Bash's rules, we escape a leading {}\n if (str.substr(0, 2) === '{}') {\n str = '\\\\{\\\\}' + str.substr(2);\n }\n\n return expand(escapeBraces(str), true).map(unescapeBraces);\n}\n\nfunction embrace(str) {\n return '{' + str + '}';\n}\nfunction isPadded(el) {\n return /^-?0\\d/.test(el);\n}\n\nfunction lte(i, y) {\n return i <= y;\n}\nfunction gte(i, y) {\n return i >= y;\n}\n\nfunction expand(str, isTop) {\n var expansions = [];\n\n var m = balanced('{', '}', str);\n if (!m) return [str];\n\n // no need to expand pre, since it is guaranteed to be free of brace-sets\n var pre = m.pre;\n var post = m.post.length\n ? expand(m.post, false)\n : [''];\n\n if (/\\$$/.test(m.pre)) { \n for (var k = 0; k < post.length; k++) {\n var expansion = pre+ '{' + m.body + '}' + post[k];\n expansions.push(expansion);\n }\n } else {\n var isNumericSequence = /^-?\\d+\\.\\.-?\\d+(?:\\.\\.-?\\d+)?$/.test(m.body);\n var isAlphaSequence = /^[a-zA-Z]\\.\\.[a-zA-Z](?:\\.\\.-?\\d+)?$/.test(m.body);\n var isSequence = isNumericSequence || isAlphaSequence;\n var isOptions = m.body.indexOf(',') >= 0;\n if (!isSequence && !isOptions) {\n // {a},b}\n if (m.post.match(/,.*\\}/)) {\n str = m.pre + '{' + m.body + escClose + m.post;\n return expand(str);\n }\n return [str];\n }\n\n var n;\n if (isSequence) {\n n = m.body.split(/\\.\\./);\n } else {\n n = parseCommaParts(m.body);\n if (n.length === 1) {\n // x{{a,b}}y ==> x{a}y x{b}y\n n = expand(n[0], false).map(embrace);\n if (n.length === 1) {\n return post.map(function(p) {\n return m.pre + n[0] + p;\n });\n }\n }\n }\n\n // at this point, n is the parts, and we know it's not a comma set\n // with a single entry.\n var N;\n\n if (isSequence) {\n var x = numeric(n[0]);\n var y = numeric(n[1]);\n var width = Math.max(n[0].length, n[1].length)\n var incr = n.length == 3\n ? Math.abs(numeric(n[2]))\n : 1;\n var test = lte;\n var reverse = y < x;\n if (reverse) {\n incr *= -1;\n test = gte;\n }\n var pad = n.some(isPadded);\n\n N = [];\n\n for (var i = x; test(i, y); i += incr) {\n var c;\n if (isAlphaSequence) {\n c = String.fromCharCode(i);\n if (c === '\\\\')\n c = '';\n } else {\n c = String(i);\n if (pad) {\n var need = width - c.length;\n if (need > 0) {\n var z = new Array(need + 1).join('0');\n if (i < 0)\n c = '-' + z + c.slice(1);\n else\n c = z + c;\n }\n }\n }\n N.push(c);\n }\n } else {\n N = [];\n\n for (var j = 0; j < n.length; j++) {\n N.push.apply(N, expand(n[j], false));\n }\n }\n\n for (var j = 0; j < N.length; j++) {\n for (var k = 0; k < post.length; k++) {\n var expansion = pre + N[j] + post[k];\n if (!isTop || isSequence || expansion)\n expansions.push(expansion);\n }\n }\n }\n\n return expansions;\n}\n\n","'use strict';\n\nconst validator = require('./validator');\nconst XMLParser = require('./xmlparser/XMLParser');\nconst XMLBuilder = require('./xmlbuilder/json2xml');\n\nmodule.exports = {\n XMLParser: XMLParser,\n XMLValidator: validator,\n XMLBuilder: XMLBuilder\n}","/**\n* @license nested-property https://github.com/cosmosio/nested-property\n*\n* The MIT License (MIT)\n*\n* Copyright (c) 2014-2020 Olivier Scherrer <pode.fr@gmail.com>\n*/\n\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _wrapNativeSuper(Class) { var _cache = typeof Map === \"function\" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== \"function\") { throw new TypeError(\"Super expression must either be null or a function\"); } if (typeof _cache !== \"undefined\") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }\n\nfunction _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _isNativeFunction(fn) { return Function.toString.call(fn).indexOf(\"[native code]\") !== -1; }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nvar ARRAY_WILDCARD = \"+\";\nvar PATH_DELIMITER = \".\";\n\nvar ObjectPrototypeMutationError = /*#__PURE__*/function (_Error) {\n _inherits(ObjectPrototypeMutationError, _Error);\n\n function ObjectPrototypeMutationError(params) {\n var _this;\n\n _classCallCheck(this, ObjectPrototypeMutationError);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(ObjectPrototypeMutationError).call(this, params));\n _this.name = \"ObjectPrototypeMutationError\";\n return _this;\n }\n\n return ObjectPrototypeMutationError;\n}(_wrapNativeSuper(Error));\n\nmodule.exports = {\n set: setNestedProperty,\n get: getNestedProperty,\n has: hasNestedProperty,\n hasOwn: function hasOwn(object, property, options) {\n return this.has(object, property, options || {\n own: true\n });\n },\n isIn: isInNestedProperty,\n ObjectPrototypeMutationError: ObjectPrototypeMutationError\n};\n/**\n * Get the property of an object nested in one or more objects or array\n * Given an object such as a.b.c.d = 5, getNestedProperty(a, \"b.c.d\") will return 5.\n * It also works through arrays. Given a nested array such as a[0].b = 5, getNestedProperty(a, \"0.b\") will return 5.\n * For accessing nested properties through all items in an array, you may use the array wildcard \"+\".\n * For instance, getNestedProperty([{a:1}, {a:2}, {a:3}], \"+.a\") will return [1, 2, 3]\n * @param {Object} object the object to get the property from\n * @param {String} property the path to the property as a string\n * @returns the object or the the property value if found\n */\n\nfunction getNestedProperty(object, property) {\n if (_typeof(object) != \"object\" || object === null) {\n return object;\n }\n\n if (typeof property == \"undefined\") {\n return object;\n }\n\n if (typeof property == \"number\") {\n return object[property];\n }\n\n try {\n return traverse(object, property, function _getNestedProperty(currentObject, currentProperty) {\n return currentObject[currentProperty];\n });\n } catch (err) {\n return object;\n }\n}\n/**\n * Tell if a nested object has a given property (or array a given index)\n * given an object such as a.b.c.d = 5, hasNestedProperty(a, \"b.c.d\") will return true.\n * It also returns true if the property is in the prototype chain.\n * @param {Object} object the object to get the property from\n * @param {String} property the path to the property as a string\n * @param {Object} options:\n * - own: set to reject properties from the prototype\n * @returns true if has (property in object), false otherwise\n */\n\n\nfunction hasNestedProperty(object, property) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (_typeof(object) != \"object\" || object === null) {\n return false;\n }\n\n if (typeof property == \"undefined\") {\n return false;\n }\n\n if (typeof property == \"number\") {\n return property in object;\n }\n\n try {\n var has = false;\n traverse(object, property, function _hasNestedProperty(currentObject, currentProperty, segments, index) {\n if (isLastSegment(segments, index)) {\n if (options.own) {\n has = currentObject.hasOwnProperty(currentProperty);\n } else {\n has = currentProperty in currentObject;\n }\n } else {\n return currentObject && currentObject[currentProperty];\n }\n });\n return has;\n } catch (err) {\n return false;\n }\n}\n/**\n * Set the property of an object nested in one or more objects\n * If the property doesn't exist, it gets created.\n * @param {Object} object\n * @param {String} property\n * @param value the value to set\n * @returns object if no assignment was made or the value if the assignment was made\n */\n\n\nfunction setNestedProperty(object, property, value) {\n if (_typeof(object) != \"object\" || object === null) {\n return object;\n }\n\n if (typeof property == \"undefined\") {\n return object;\n }\n\n if (typeof property == \"number\") {\n object[property] = value;\n return object[property];\n }\n\n try {\n return traverse(object, property, function _setNestedProperty(currentObject, currentProperty, segments, index) {\n if (currentObject === Reflect.getPrototypeOf({})) {\n throw new ObjectPrototypeMutationError(\"Attempting to mutate Object.prototype\");\n }\n\n if (!currentObject[currentProperty]) {\n var nextPropIsNumber = Number.isInteger(Number(segments[index + 1]));\n var nextPropIsArrayWildcard = segments[index + 1] === ARRAY_WILDCARD;\n\n if (nextPropIsNumber || nextPropIsArrayWildcard) {\n currentObject[currentProperty] = [];\n } else {\n currentObject[currentProperty] = {};\n }\n }\n\n if (isLastSegment(segments, index)) {\n currentObject[currentProperty] = value;\n }\n\n return currentObject[currentProperty];\n });\n } catch (err) {\n if (err instanceof ObjectPrototypeMutationError) {\n // rethrow\n throw err;\n } else {\n return object;\n }\n }\n}\n/**\n * Tell if an object is on the path to a nested property\n * If the object is on the path, and the path exists, it returns true, and false otherwise.\n * @param {Object} object to get the nested property from\n * @param {String} property name of the nested property\n * @param {Object} objectInPath the object to check\n * @param {Object} options:\n * - validPath: return false if the path is invalid, even if the object is in the path\n * @returns {boolean} true if the object is on the path\n */\n\n\nfunction isInNestedProperty(object, property, objectInPath) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n\n if (_typeof(object) != \"object\" || object === null) {\n return false;\n }\n\n if (typeof property == \"undefined\") {\n return false;\n }\n\n try {\n var isIn = false,\n pathExists = false;\n traverse(object, property, function _isInNestedProperty(currentObject, currentProperty, segments, index) {\n isIn = isIn || currentObject === objectInPath || !!currentObject && currentObject[currentProperty] === objectInPath;\n pathExists = isLastSegment(segments, index) && _typeof(currentObject) === \"object\" && currentProperty in currentObject;\n return currentObject && currentObject[currentProperty];\n });\n\n if (options.validPath) {\n return isIn && pathExists;\n } else {\n return isIn;\n }\n } catch (err) {\n return false;\n }\n}\n\nfunction traverse(object, path) {\n var callback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {};\n var segments = path.split(PATH_DELIMITER);\n var length = segments.length;\n\n var _loop = function _loop(idx) {\n var currentSegment = segments[idx];\n\n if (!object) {\n return {\n v: void 0\n };\n }\n\n if (currentSegment === ARRAY_WILDCARD) {\n if (Array.isArray(object)) {\n return {\n v: object.map(function (value, index) {\n var remainingSegments = segments.slice(idx + 1);\n\n if (remainingSegments.length > 0) {\n return traverse(value, remainingSegments.join(PATH_DELIMITER), callback);\n } else {\n return callback(object, index, segments, idx);\n }\n })\n };\n } else {\n var pathToHere = segments.slice(0, idx).join(PATH_DELIMITER);\n throw new Error(\"Object at wildcard (\".concat(pathToHere, \") is not an array\"));\n }\n } else {\n object = callback(object, currentSegment, segments, idx);\n }\n };\n\n for (var idx = 0; idx < length; idx++) {\n var _ret = _loop(idx);\n\n if (_typeof(_ret) === \"object\") return _ret.v;\n }\n\n return object;\n}\n\nfunction isLastSegment(segments, index) {\n return segments.length === index + 1;\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\nvar util = require('util');\nvar isString = function (x) {\n return typeof x === 'string';\n};\n\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n var res = [];\n for (var i = 0; i < parts.length; i++) {\n var p = parts[i];\n\n // ignore empty parts\n if (!p || p === '.')\n continue;\n\n if (p === '..') {\n if (res.length && res[res.length - 1] !== '..') {\n res.pop();\n } else if (allowAboveRoot) {\n res.push('..');\n }\n } else {\n res.push(p);\n }\n }\n\n return res;\n}\n\n// Split a filename into [root, dir, basename, ext], unix version\n// 'root' is just a slash, or nothing.\nvar splitPathRe =\n /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\nvar posix = {};\n\n\nfunction posixSplitPath(filename) {\n return splitPathRe.exec(filename).slice(1);\n}\n\n\n// path.resolve([from ...], to)\n// posix version\nposix.resolve = function() {\n var resolvedPath = '',\n resolvedAbsolute = false;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path = (i >= 0) ? arguments[i] : process.cwd();\n\n // Skip empty and invalid entries\n if (!isString(path)) {\n throw new TypeError('Arguments to path.resolve must be strings');\n } else if (!path) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charAt(0) === '/';\n }\n\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n\n // Normalize the path\n resolvedPath = normalizeArray(resolvedPath.split('/'),\n !resolvedAbsolute).join('/');\n\n return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n};\n\n// path.normalize(path)\n// posix version\nposix.normalize = function(path) {\n var isAbsolute = posix.isAbsolute(path),\n trailingSlash = path.substr(-1) === '/';\n\n // Normalize the path\n path = normalizeArray(path.split('/'), !isAbsolute).join('/');\n\n if (!path && !isAbsolute) {\n path = '.';\n }\n if (path && trailingSlash) {\n path += '/';\n }\n\n return (isAbsolute ? '/' : '') + path;\n};\n\n// posix version\nposix.isAbsolute = function(path) {\n return path.charAt(0) === '/';\n};\n\n// posix version\nposix.join = function() {\n var path = '';\n for (var i = 0; i < arguments.length; i++) {\n var segment = arguments[i];\n if (!isString(segment)) {\n throw new TypeError('Arguments to path.join must be strings');\n }\n if (segment) {\n if (!path) {\n path += segment;\n } else {\n path += '/' + segment;\n }\n }\n }\n return posix.normalize(path);\n};\n\n\n// path.relative(from, to)\n// posix version\nposix.relative = function(from, to) {\n from = posix.resolve(from).substr(1);\n to = posix.resolve(to).substr(1);\n\n function trim(arr) {\n var start = 0;\n for (; start < arr.length; start++) {\n if (arr[start] !== '') break;\n }\n\n var end = arr.length - 1;\n for (; end >= 0; end--) {\n if (arr[end] !== '') break;\n }\n\n if (start > end) return [];\n return arr.slice(start, end + 1);\n }\n\n var fromParts = trim(from.split('/'));\n var toParts = trim(to.split('/'));\n\n var length = Math.min(fromParts.length, toParts.length);\n var samePartsLength = length;\n for (var i = 0; i < length; i++) {\n if (fromParts[i] !== toParts[i]) {\n samePartsLength = i;\n break;\n }\n }\n\n var outputParts = [];\n for (var i = samePartsLength; i < fromParts.length; i++) {\n outputParts.push('..');\n }\n\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n return outputParts.join('/');\n};\n\n\nposix._makeLong = function(path) {\n return path;\n};\n\n\nposix.dirname = function(path) {\n var result = posixSplitPath(path),\n root = result[0],\n dir = result[1];\n\n if (!root && !dir) {\n // No dirname whatsoever\n return '.';\n }\n\n if (dir) {\n // It has a dirname, strip trailing slash\n dir = dir.substr(0, dir.length - 1);\n }\n\n return root + dir;\n};\n\n\nposix.basename = function(path, ext) {\n var f = posixSplitPath(path)[2];\n // TODO: make this comparison case-insensitive on windows?\n if (ext && f.substr(-1 * ext.length) === ext) {\n f = f.substr(0, f.length - ext.length);\n }\n return f;\n};\n\n\nposix.extname = function(path) {\n return posixSplitPath(path)[3];\n};\n\n\nposix.format = function(pathObject) {\n if (!util.isObject(pathObject)) {\n throw new TypeError(\n \"Parameter 'pathObject' must be an object, not \" + typeof pathObject\n );\n }\n\n var root = pathObject.root || '';\n\n if (!isString(root)) {\n throw new TypeError(\n \"'pathObject.root' must be a string or undefined, not \" +\n typeof pathObject.root\n );\n }\n\n var dir = pathObject.dir ? pathObject.dir + posix.sep : '';\n var base = pathObject.base || '';\n return dir + base;\n};\n\n\nposix.parse = function(pathString) {\n if (!isString(pathString)) {\n throw new TypeError(\n \"Parameter 'pathString' must be a string, not \" + typeof pathString\n );\n }\n var allParts = posixSplitPath(pathString);\n if (!allParts || allParts.length !== 4) {\n throw new TypeError(\"Invalid path '\" + pathString + \"'\");\n }\n allParts[1] = allParts[1] || '';\n allParts[2] = allParts[2] || '';\n allParts[3] = allParts[3] || '';\n\n return {\n root: allParts[0],\n dir: allParts[0] + allParts[1].slice(0, allParts[1].length - 1),\n base: allParts[2],\n ext: allParts[3],\n name: allParts[2].slice(0, allParts[2].length - allParts[3].length)\n };\n};\n\n\nposix.sep = '/';\nposix.delimiter = ':';\n\n module.exports = posix;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + chunkId + \"-\" + chunkId + \".js?v=\" + {\"1110\":\"2909496e7e35d6258214\",\"1241\":\"a4187792299da984916c\",\"2913\":\"1ccb2adaaea884424d3c\",\"5528\":\"110b147bc8680f8c83f4\",\"7462\":\"9c58610aebad939f1ce8\",\"8902\":\"bb2f9be8a039f8db7e58\"}[chunkId] + \"\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 2122;","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src;\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) {\n\t\t\tvar i = scripts.length - 1;\n\t\t\twhile (i > -1 && (!scriptUrl || !/^http(s?):/.test(scriptUrl))) scriptUrl = scripts[i--].src;\n\t\t}\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t2122: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\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__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [4208], () => (__webpack_require__(7041)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","inProgress","dataWebpackPrefix","posixClasses","braceEscape","s","replace","rangesToString","ranges","join","parseClass","glob","position","pos","charAt","Error","negs","i","sawStart","uflag","escaping","negate","endPos","rangeStart","WHILE","length","c","cls","unip","u","neg","Object","entries","startsWith","push","test","slice","sranges","snegs","p","pattern","options","assertValidPattern","nocomment","Minimatch","match","starDotExtRE","starDotExtTest","ext","f","endsWith","starDotExtTestDot","starDotExtTestNocase","toLowerCase","starDotExtTestNocaseDot","starDotStarRE","starDotStarTest","includes","starDotStarTestDot","dotStarRE","dotStarTest","starRE","starTest","starTestDot","qmarksRE","qmarksTestNocase","$0","noext","qmarksTestNoExt","qmarksTestNocaseDot","qmarksTestNoExtDot","qmarksTestDot","qmarksTest","len","defaultPlatform","process","env","__MINIMATCH_TESTING_PLATFORM__","platform","sep","GLOBSTAR","Symbol","plTypes","open","close","qmark","star","charSet","split","reduce","set","reSpecials","addPatternStartSet","filter","a","b","assign","defaults","def","keys","orig","constructor","super","unescape","escape","makeRe","braceExpand","list","nobrace","TypeError","mm","nonull","globMagic","regExpEscape","windowsPathsNoEscape","nonegate","comment","empty","preserveMultipleSlashes","partial","globSet","globParts","nocase","isWindows","windowsNoMagicRoot","regexp","this","allowWindowsEscape","undefined","make","hasMagic","magicalBraces","part","debug","_","parseNegate","Set","args","console","error","rawGlobParts","map","slashSplit","preprocess","__","isUNC","isDrive","ss","parse","indexOf","noglobstar","j","optimizationLevel","firstPhasePreProcess","secondPhasePreProcess","levelOneOptimize","adjascentGlobstarOptimize","parts","gs","splice","prev","pop","levelTwoFileOptimize","Array","isArray","didSomething","dd","gss","next","p2","other","splin","matched","partsMatch","emptyGSMatch","ai","bi","result","which","dot","negateOffset","matchOne","file","fileUNC","patternUNC","fd","pd","fi","pi","fl","pl","fr","pr","swallowee","hit","m","fastTest","re","patternListStack","negativeLists","stateChar","dotTravAllowed","dotFileAllowed","subPatternStart","clearStateChar","plEntry","type","start","reStart","reEnd","src","needUflag","consumed","magic","tail","$1","$2","t","addPatternStart","n","nl","nlBefore","nlFirst","nlAfter","nlLast","closeParensBefore","openParensBefore","cleanAfter","nocaseMagicOnly","toUpperCase","flags","_glob","_src","RegExp","er","twoStar","pp","forEach","ex","ff","filename","matchBase","flipNegate","convertResponseHeaders","headers","output","key","get","PropertyType","getDirectoryFiles","isDetailed","arguments","multistatus","response","responseItems","item","props","propstat","prop","getlastmodified","lastMod","getcontentlength","rawSize","resourcetype","resourceType","getcontenttype","mimeType","getetag","etag","collection","stat","basename","lastmod","size","parseInt","mime","prepareFileFromProps","id","toString","ActivityTabPluginView","ActivityTabPluginInstance","__webpack_nonce__","btoa","getRequestToken","loadState","_OCA","OCA","Activity","registerSidebarAction","window","addEventListener","mount","async","el","_ref","context","fileInfo","reload","default","ActivityCommmentAction","Vue","extend","parent","propsData","reloadCallback","resourceId","$mount","logger","info","unmount","$destroy","registerSidebarEntries","limit","offset","_ref2","data","comments","_options$limit","resourcePath","datetime","concat","toISOString","client","customRequest","method","responseData","text","parseXML","status","statusText","processResponsePayload","getComments","CommentView","CommentsViewObject","timestamp","moment","creationDateTime","toDate","getTime","element","_ref3","_CommentsViewInstance","registerSidebarFilter","activity","TabInstance","commentTab","Files","Sidebar","Tab","name","iconSvg","Comments","View","update","destroy","scrollBottomReached","onScrollBottomReached","registerTab","getLoggerBuilder","setApp","detectUser","build","createClient","getRootPath","setHeaders","token","requesttoken","onRequestTokenUpdate","generateRemoteUrl","balanced","str","maybeMatch","r","range","end","pre","body","post","reg","begs","beg","left","right","module","exports","substr","expand","escSlash","escOpen","escClose","escComma","escPeriod","escapeBraces","unescapeBraces","Math","random","numeric","charCodeAt","parseCommaParts","postParts","shift","apply","embrace","isPadded","lte","y","gte","isTop","expansions","k","expansion","N","isNumericSequence","isAlphaSequence","isSequence","isOptions","x","width","max","incr","abs","pad","some","String","fromCharCode","need","z","validator","XMLParser","XMLBuilder","XMLValidator","_typeof","obj","iterator","prototype","_wrapNativeSuper","Class","_cache","Map","fn","Function","call","has","Wrapper","_construct","_getPrototypeOf","create","value","enumerable","writable","configurable","_setPrototypeOf","Parent","Reflect","construct","sham","Proxy","Date","e","_isNativeReflectConstruct","instance","bind","o","setPrototypeOf","__proto__","getPrototypeOf","ObjectPrototypeMutationError","_Error","params","_this","Constructor","_classCallCheck","self","ReferenceError","_assertThisInitialized","_possibleConstructorReturn","subClass","superClass","_inherits","traverse","object","path","callback","segments","_loop","idx","currentSegment","v","index","remainingSegments","pathToHere","_ret","isLastSegment","property","currentObject","currentProperty","nextPropIsNumber","Number","isInteger","nextPropIsArrayWildcard","err","own","hasOwnProperty","hasOwn","isIn","objectInPath","pathExists","validPath","util","isString","normalizeArray","allowAboveRoot","res","splitPathRe","posix","posixSplitPath","exec","resolve","resolvedPath","resolvedAbsolute","cwd","normalize","isAbsolute","trailingSlash","segment","relative","from","to","trim","arr","fromParts","toParts","min","samePartsLength","outputParts","_makeLong","dirname","root","dir","extname","format","pathObject","isObject","base","pathString","allParts","delimiter","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","loaded","__webpack_modules__","O","chunkIds","priority","notFulfilled","Infinity","fulfilled","every","getter","__esModule","d","definition","defineProperty","chunkId","Promise","all","promises","g","globalThis","l","url","done","script","needAttach","scripts","document","getElementsByTagName","getAttribute","createElement","charset","timeout","nc","setAttribute","onScriptComplete","event","onerror","onload","clearTimeout","doneFns","parentNode","removeChild","setTimeout","target","head","appendChild","toStringTag","nmd","paths","children","scriptUrl","importScripts","location","currentScript","baseURI","href","installedChunks","installedChunkData","promise","reject","errorType","realSrc","message","request","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file