").appendTo(this.$promptChoices).find("input");this.addListener(l,"click",function(){r.removeClass("disabled")})}this.addListener(r,"activate",function(t){var e=$(t.currentTarget).parents(".modal").find("input[name=promptAction]:checked").val(),i=this.$promptApplyToRemainingCheckbox.prop("checked");this._selectPromptChoice(e,i)}),this.addListener(a,"activate",function(){var t=this.$promptApplyToRemainingCheckbox.prop("checked");this._selectPromptChoice("cancel",t)}),s&&(this.$promptApplyToRemainingContainer.show(),this.$promptApplyToRemainingLabel.html(" "+Craft.t("app","Apply this to the {number} remaining conflicts?",{number:s}))),this.modal.show(),this.modal.removeListener(Garnish.Modal.$shade,"click"),this.addListener(Garnish.Modal.$shade,"click","_cancelPrompt")},_selectPromptChoice:function(t,e){this.$prompt.fadeOut("fast",()=>{this.modal.hide(),this._promptCallback(t,e)})},_cancelPrompt:function(){this._selectPromptChoice("cancel",!0)}})},3374:function(){Craft.BaseUploader=Garnish.Base.extend({allowedKinds:null,$element:null,$fileInput:null,settings:null,fsType:null,formData:{},events:{},_rejectedFiles:{},_extensionList:null,_inProgressCounter:0,init:function(t,e){this._rejectedFiles={size:[],type:[],limit:[]},this.$element=t,this.settings=$.extend({},Craft.BaseUploader.defaults,e),this.formData=this.settings.formData,this.$fileInput=this.settings.fileInput||t,this.events=this.settings.events,this.settings.url||(this.settings.url=this.settings.replace?Craft.getActionUrl(this.settings.replaceAction):Craft.getActionUrl(this.settings.createAction)),this.settings.allowedKinds&&this.settings.allowedKinds.length&&("string"==typeof this.settings.allowedKinds&&(this.settings.allowedKinds=[this.settings.allowedKinds]),this.allowedKinds=this.settings.allowedKinds,delete this.settings.allowedKinds)},setParams:function(t){void 0!==Craft.csrfTokenName&&void 0!==Craft.csrfTokenValue&&(t[Craft.csrfTokenName]=Craft.csrfTokenValue),this.formData=t},getInProgress:function(){return this._inProgressCounter},isLastUpload:function(){return this.getInProgress()<2},processErrorMessages:function(){var t;this._rejectedFiles.type.length&&(t=1===this._rejectedFiles.type.length?"The file {files} could not be uploaded. The allowed file kinds are: {kinds}.":"The files {files} could not be uploaded. The allowed file kinds are: {kinds}.",t=Craft.t("app",t,{files:this._rejectedFiles.type.join(", "),kinds:this.allowedKinds.join(", ")}),this._rejectedFiles.type=[],Craft.cp.displayError(t)),this._rejectedFiles.size.length&&(t=1===this._rejectedFiles.size.length?"The file {files} could not be uploaded, because it exceeds the maximum upload size of {size}.":"The files {files} could not be uploaded, because they exceeded the maximum upload size of {size}.",t=Craft.t("app",t,{files:this._rejectedFiles.size.join(", "),size:this.humanFileSize(this.settings.maxFileSize)}),this._rejectedFiles.size=[],Craft.cp.displayError(t)),this._rejectedFiles.limit.length&&(t=1===this._rejectedFiles.limit.length?"The file {files} could not be uploaded, because the field limit has been reached.":"The files {files} could not be uploaded, because the field limit has been reached.",t=Craft.t("app",t,{files:this._rejectedFiles.limit.join(", ")}),this._rejectedFiles.limit=[],Craft.cp.displayError(t))},humanFileSize:function(t){var e=1024;if(t=e);return t.toFixed(1)+" "+["kB","MB","GB","TB","PB","EB","ZB","YB"][i]},_createExtensionList:function(){this._extensionList=[];for(var t=0;t'),this.$showPasswordToggle.addClass("password-toggle"),this.$showPasswordToggle.insertAfter(this.$passwordInput),this.initInputFocusEvents(this.$passwordInput),this.addListener(this.$showPasswordToggle,"click","onClick"),this.hidePassword(),this.addListener(this.$passwordWrapper.closest("form"),"submit","hidePassword")},setCurrentInput:function(t){this.$currentInput&&(t.insertAfter(this.$currentInput),this.$currentInput.detach(),t.focus(),t.val(this.$currentInput.val())),this.$currentInput=t,this.addListener(this.$currentInput,"keypress,keyup,change,blur","onInputChange")},updateToggleLabel:function(t){this.$showPasswordToggle.text(t)},initInputFocusEvents:function(t){this.addListener(t,"focus",function(){this.$passwordWrapper.addClass("focus")}),this.addListener(t,"blur",function(){this.$passwordWrapper.removeClass("focus")})},showPassword:function(){this.showingPassword||(this.$textInput||(this.$textInput=this.$passwordInput.clone(!0),this.$textInput.attr({type:"text",autocapitalize:"off"}),this.initInputFocusEvents(this.$textInput)),this.setCurrentInput(this.$textInput),this.updateToggleLabel(Craft.t("app","Hide")),this.showingPassword=!0)},hidePassword:function(){!1!==this.showingPassword&&(this.setCurrentInput(this.$passwordInput),this.updateToggleLabel(Craft.t("app","Show")),this.showingPassword=!1)},togglePassword:function(){this.showingPassword?this.hidePassword():this.showPassword(),this.settings.onToggleInput(this.$currentInput)},onInputChange:function(){this.$currentInput.val()?this.$showPasswordToggle.removeClass("invisible"):this.$showPasswordToggle.addClass("invisible")},onClick:function(t){if(this.$currentInput[0].setSelectionRange){var e=this.$currentInput[0].selectionStart,i=this.$currentInput[0].selectionEnd;this.togglePassword(),this.$currentInput[0].setSelectionRange(e,i)}else this.togglePassword()},destroy:function(){this.$passwordInput.removeData("passwordInput"),this.base()}},{defaults:{onToggleInput:$.noop}})},3617:function(){Craft.EntryIndex=Craft.BaseElementIndex.extend({publishableSections:null,$newEntryBtnGroup:null,$newEntryBtn:null,init:function(t,e,i){this.publishableSections=[],this.on("selectSource",this.updateButton.bind(this)),this.on("selectSite",this.updateButton.bind(this)),this.base(t,e,i)},afterInit:function(){const t=this.$sources.toArray().map(t=>$(t).data("handle")).filter(t=>!!t);this.publishableSections=Craft.publishableSections.filter(e=>t.includes(e.handle)),this.base()},getDefaultSourceKey:function(){if("index"===this.settings.context&&"undefined"!=typeof defaultSectionHandle){if("singles"===defaultSectionHandle)return"singles";for(let t=0;te.handle===t);let s;this.$newEntryBtnGroup=$('');const n="new-entry-menu-"+Craft.randomString(10),a=this.publishableSections.filter(t=>t.sites.includes(this.siteId));if(i){const t="index"===this.settings.context?Craft.uppercaseFirst(Craft.t("app","New {type}",{type:Craft.elementTypeNames["CraftCms\\Cms\\Entry\\Elements\\Entry"][2]})):Craft.t("app","New {section} entry",{section:i.name}),r="index"===this.settings.context?Craft.t("app","New entry in the {section} section",{section:i.name}):t,o="index"===this.settings.context?"link":null;this.$newEntryBtn=Craft.ui.createButton({label:t,ariaLabel:r,spinner:!0,role:o}).addClass("submit add icon").appendTo(this.$newEntryBtnGroup),this.addListener(this.$newEntryBtn,"click mousedown",t=>{if("index"===this.settings.context&&("click"===t.type&&Garnish.isCtrlKeyPressed(t)||"mousedown"===t.type&&1===t.originalEvent.button)){const t={};e&&(t.type=e),window.open(Craft.getUrl(`entries/${i.handle}/new`,t))}else"click"===t.type&&this._createEntry(i.id,e)}),a.length>1&&(s=$("",{type:"button",class:"btn submit menubtn btngroup-btn-last","aria-controls":n,"data-disclosure-trigger":"","aria-label":Craft.t("app","New entry, choose a section")}).appendTo(this.$newEntryBtnGroup))}else a.length>0&&(this.$newEntryBtn=s=Craft.ui.createButton({label:Craft.uppercaseFirst(Craft.t("app","New {type}",{type:Craft.elementTypeNames["CraftCms\\Cms\\Entry\\Elements\\Entry"][2]})),ariaLabel:Craft.t("app","New entry, choose a section"),spinner:!0}).addClass("submit add icon menubtn btngroup-btn-last").attr("aria-controls",n).attr("data-disclosure-trigger","").appendTo(this.$newEntryBtnGroup));if(this.addButton(this.$newEntryBtnGroup),s){const t=$("",{id:n,class:"menu menu--disclosure"}).appendTo(this.$newEntryBtnGroup),e=$("
").appendTo(t);for(const t of this.publishableSections){const n="index"===this.settings.context?"link":"button";if("index"===this.settings.context&&t.sites.includes(this.siteId)||"index"!==this.settings.context&&t!==i&&t.sites.includes(this.siteId)){const i=$("").appendTo(e),a=$("",{role:"button"===n?"button":null,href:Craft.getUrl(`entries/${t.handle}/new`),type:"button"===n?"button":null,text:Craft.t("app","New {section} entry",{section:t.name})}).appendTo(i);this.addListener(a,"activate",e=>{e.originalEvent.preventDefault(),s.data("trigger").hide(),this._createEntry(t.id)}),"button"===n&&this.addListener(a,"keydown",e=>{e.keyCode===Garnish.SPACE_KEY&&(e.preventDefault(),s.data("trigger").hide(),this._createEntry(t.id))})}}new Garnish.DisclosureMenu(s)}}if("index"===this.settings.context){let e=`content/${this.settings.page??"entries"}`;t&&(e+="/"+t),Craft.setPath(e)}},_createEntry:function(t,e){if(this.$newEntryBtn.hasClass("loading"))return void console.warn("New entry creation already in progress.");const i=this.publishableSections.find(e=>e.id===t);if(!i)throw`Invalid section ID: ${t}`;this.$newEntryBtn.addClass("loading"),Craft.sendActionRequest("POST","entries/create",{data:{siteId:this.siteId,section:i.handle,type:e}}).then(({data:t})=>{"index"===this.settings.context?document.location.href=Craft.getUrl(t.cpEditUrl,{fresh:1}):Craft.createElementEditor(this.elementType,{siteId:this.siteId,elementId:t.entry.id,draftId:t.entry.draftId,params:{fresh:1,updateSearchIndexImmediately:1}}).on("submit",e=>{this.clearSearch(!1),this.startSearching(),this.$search.val(e.data.title),this.searchText=e.data.title,this.selectElementAfterUpdate(t.entry.id),this.updateElements()})}).finally(()=>{this.$newEntryBtn.removeClass("loading")})},canPaste:function(t){if(!this.$source.data("sectionId"))return!1;const e=this.$source.data("entryTypeIds")||[];for(const i of t)if(!e.includes(i.data.entryTypeId))return!1;return!0},pasteAttributes:function(){return{sectionId:this.$source.data("sectionId"),placeInStructure:!0}}}),Craft.registerElementIndexClass("CraftCms\\Cms\\Entry\\Elements\\Entry",Craft.EntryIndex)},3729:function(){Craft.IntervalManager=Garnish.Base.extend({_intervalId:null,init:function(t){this.setSettings(t,Craft.IntervalManager.defaults)},start:function(){this._intervalId=setInterval(()=>{this.settings.onInterval()},this.settings.interval)},stop:function(){clearInterval(this._intervalId),this._intervalId=null}},{defaults:{interval:5e3,onInterval:$.noop}})},3785:function(){Craft.Preview=Garnish.Base.extend({elementEditor:null,tabManager:null,hasTabs:!1,$shade:null,editorId:null,$editorContainer:null,$editorHeader:null,$editorToolbar:null,$tabContainer:null,$content:null,$spinner:null,$editorFooter:null,$saveBtn:null,$dragHandle:null,$previewWrapper:null,$previewContainer:null,$previewSkipLink:null,$bumperLink:null,$notifier:null,$iframeContainer:null,$previewHeader:null,$targetBtn:null,$targetMenu:null,$deviceTypeContainer:null,$orientationBtn:null,$refreshBtn:null,$deviceMask:null,$devicePreviewContainer:null,$iframe:null,iframeLoaded:!1,isActive:!1,isVisible:!1,activeTarget:0,animationDuration:"slow",currentDeviceType:"desktop",deviceOrientation:null,deviceWidth:"",deviceHeight:"",deviceMaskDimensions:{phone:{width:375,height:753},tablet:{width:768,height:1110}},draftId:null,url:null,iframeHeight:null,scrollTop:null,scrollLeft:null,dragger:null,dragStartEditorWidth:null,_editorWidth:null,_editorWidthInPx:null,init:function(t){this.setSettings(t,Craft.Preview.defaults),this.editorWidth=Craft.getLocalStorage("LivePreview.editorWidth",Craft.Preview.defaultEditorWidth),Craft.Preview.instances.push(this),this.settings.standaloneMode&&this.open(!1)},get editorWidth(){return this._editorWidth},get editorWidthInPx(){return this._editorWidthInPx},set editorWidth(t){let e;t>=1?(e=t,t/=Garnish.$win.width()):e=Math.round(t*Garnish.$win.width()),e",{class:"modal-shade dark"}).appendTo(Garnish.$bod),this.$previewWrapper=$("",{role:"dialog","aria-modal":"true","aria-labelledby":"lp-preview-heading"}).appendTo(Garnish.$bod),this.$modalLabel=$("",{id:"lp-preview-heading",class:"visually-hidden",html:Craft.t("app","Preview")}).appendTo(this.$previewWrapper),this.$editorContainer=$("",{id:this.editorId,class:"lp-editor-container"}).appendTo(this.$previewWrapper),this.$previewContainer=$("",{class:"lp-preview-container",id:"lp-preview-container"}).appendTo(this.$previewWrapper),this.$notifier=$("",{class:"visually-hidden",role:"status"}).appendTo(this.$previewContainer),this.$editorHeader=$("",{class:"lp-editor-header"}).appendTo(this.$editorContainer),!this.settings.standaloneMode){const t=$("",{type:"button",class:"btn lp-close-btn","data-icon":"xmark",title:Craft.t("app","Close Preview"),"aria-label":Craft.t("app","Close Preview")}).appendTo(this.$editorHeader);this.addListener(t,"click","close")}this.$editorToolbar=$("",{class:"lp-toolbar"}).appendTo(this.$editorHeader),this.$tabContainer=$("",{class:"pane-tabs"}).appendTo(this.$editorToolbar),this.$content=$("",{class:"lp-content loading"}).appendTo(this.$editorContainer).append($("",{class:"spinner"})),this.$editorFooter=$("",{class:"flex flex-nowrap"}).appendTo(this.$editorContainer),this.$dragHandle=$("",{class:"lp-draghandle"}).appendTo(Garnish.$bod),$("",{class:"flex-grow"}).appendTo(this.$editorHeader),this.$spinner=$("",{class:"spinner hidden",title:Craft.t("app","Saving")}).appendTo(this.$editorHeader),this.$statusMessage=$("",{class:"visually-hidden","aria-live":"polite"}).appendTo(this.$editorHeader),this.$previewSkipLink=$("",{class:"skip-link btn hidden",href:"#lp-preview-container",html:t}).appendTo(this.$editorHeader),this.$previewHeader=$("",{class:"lp-preview-header"}).appendTo(this.$previewContainer),this._buildDeviceTypeFieldset(),$('').appendTo(this.$previewHeader);const e=$('').appendTo(this.$previewHeader);this.$orientationBtn=$("",{type:"button",class:"btn disabled","data-icon":"rotate","aria-disabled":"true",text:Craft.t("app","Rotate"),"aria-label":Craft.t("app","Rotate")}).appendTo(e),this.addListener(this.$orientationBtn,"click","switchOrientation"),this.$refreshBtn=$("",{type:"button",class:"btn",text:Craft.t("app","Refresh"),"data-icon":"refresh"}).appendTo(e),this.addListener(this.$refreshBtn,"click",()=>{this.updateIframe(!1,!0)}),this.deviceOrientation=Craft.getLocalStorage("LivePreview.orientation"),this.$iframeContainer=$("",{class:"lp-iframe-container"}).appendTo(this.$previewContainer),this.$devicePreviewContainer=$("",{class:"lp-device-preview-container"}).appendTo(this.$iframeContainer),this.$deviceMask=$("",{class:"lp-device-mask"}).appendTo(this.$iframeContainer),this.$bumperLink=$("",{class:"skip-link btn lp-preview-container__bumper-link",html:t,href:"#lp-preview-container"}),this.$bumperLink.appendTo(this.$previewContainer),this.dragger=new Garnish.BaseDrag(this.$dragHandle,{axis:Garnish.X_AXIS,onDragStart:this._onDragStart.bind(this),onDrag:this._onDrag.bind(this),onDragStop:this._onDragStop.bind(this)})},_loadElementEditor:async function(){let t;await this.settings.onBeforeLoad(),this.cancelToken=axios.CancelToken.source();try{t=await Craft.sendActionRequest("GET","elements/edit",{params:{elementType:this.settings.elementType,elementId:this.settings.elementId,draftId:this.settings.draftId,revisionId:this.settings.revisionId,siteId:this.settings.siteId},cancelToken:this.cancelToken.token,headers:{"X-Craft-Container-Id":this.editorId,"X-Craft-Namespace":this.namespace}})}catch(t){if(!this.ignoreFailedRequest)throw Craft.cp.displayError(),t;return void(this.ignoreFailedRequest=!1)}finally{this.$content.removeClass("loading"),this.cancelToken=null}const{data:e}=t;if(this.namespace=e.namespace,this.settings.standaloneMode){if(e.actionMenu){const t=Craft.namespaceId("action-menu-label",this.namespace),i=Craft.namespaceId("action-menu",this.namespace);$("",{id:t,class:"visually-hidden",text:Craft.t("app","Actions")}).appendTo(this.$editorHeader);const s=$("",{class:"btn action-btn header-btn",type:"button",title:Craft.t("app","Actions"),"aria-controls":i,"aria-describedby":t,"data-disclosure-trigger":"true"}).appendTo(this.$editorHeader);$(e.actionMenu).appendTo(this.$editorHeader),s.disclosureMenu()}e.editUrl&&$("",{target:"_blank",class:"btn header-btn",title:Craft.t("app","Open in a new tab"),"aria-label":Craft.t("app","Open in a new tab"),"data-icon":"external",href:e.editUrl}).appendTo(this.$editorHeader)}if(this.$content.html(e.content),this.$saveBtn=Craft.ui.createSubmitButton({label:Craft.t("app","Save"),spinner:!0}).appendTo(this.$editorFooter),this.updateTabs(e.tabs),e.formAttributes&&Craft.setElementAttributes(this.$editorContainer,e.formAttributes),this.$editorContainer.data("delta-names",t.data.deltaNames),this.$editorContainer.data("initial-delta-values",t.data.initialDeltaValues),this.$editorContainer.data("initialSerializedValue",this.$editorContainer.serialize()),await Craft.appendHeadHtml(e.headHtml),await Craft.appendBodyHtml(e.bodyHtml),Craft.initUiElements(this.$editorContainer),this.elementEditor=new Craft.ElementEditor(this.$editorContainer,Object.assign({namespace:this.namespace,$contentContainer:this.$content,$actionBtn:this.$saveBtn,$spinnerContainer:this.$editorHeader,updateTabs:t=>this.updateTabs(t),getTabManager:()=>this.tabManager,handleSubmitResponse:t=>{this.settings.redirectUrl?document.location.href=this.settings.redirectUrl:window.location.reload()},handleSubmitError:async t=>{this.$saveBtn.addClass("loading"),await(async()=>{})(),await this.elementEditor.refreshContent({[this.elementEditor.namespaceInputName("prevalidate")]:1}),this.$saveBtn.removeClass("loading")},autosaveDrafts:!0,saveParams:{setEnabled:0}},this.$editorContainer.data("elementEditorSettings"))),this.elementEditor.on("afterSaveDraft",({response:t})=>{this.trigger("afterSaveDraft",{response:t})}),this.elementEditor.on("update",()=>{this.updateIframe()}),this.elementEditor.on("beforeSubmit",()=>{this.$saveBtn.addClass("loading")}),this.elementEditor.on("afterSubmit",()=>{this.$saveBtn.removeClass("loading")}),Craft.cp.elementThumbLoader.load(this.$content),Craft.setFocusWithin(this.$content),this.elementEditor.settings.previewTargets.length>1){const t=$('').insertAfter(this.$deviceTypeContainer);this.$targetBtn=$("",{type:"button",class:"btn menubtn",text:this.elementEditor.settings.previewTargets[0].label}).insertAfter(t),this.$targetMenu=$("",{class:"menu lp-target-menu"}).insertAfter(this.$targetBtn);const e=$("
`;const i=new Garnish.HUD(t,e,{hudClass:"hud revision-status-hud",onHide:function(){i.destroy()}});i.$mainContainer.find(".refresh-btn").on("click",()=>{window.location.reload()})},_saveSuccessMessage:function(){return this.settings.isProvisionalDraft||this.settings.isUnpublishedDraft?Craft.t("app","Your changes have been stored."):Craft.t("app","The draft has been saved.")},_saveFailMessage:function(){return this.settings.isProvisionalDraft||this.settings.isUnpublishedDraft?Craft.t("app","Your changes could not be stored."):Craft.t("app","The draft could not be saved.")},spinners:function(){return this.$spinner},showSpinner:function(){this.spinners().removeClass("hidden")},hideSpinner:function(){this.spinners().addClass("hidden")},statusIcons:function(){return this.$statusIcon},createEditMetaAction:function(){if(!this.isFullPage)return;const t=$("#action-menu").disclosureMenu().data("disclosureMenu"),e=t.getFirstDestructiveGroup(),i=t.addGroup(null,!0,e),s=t.addItem({type:"button",icon:async()=>await Craft.ui.icon("edit"),label:Craft.t("app","Edit draft settings")},i);this.addListener(s,"click","showMetaModal")},createPreviewLink:function(t,e){const i=$("",{href:this.getTokenizedPreviewUrl(t.url,null,!1),text:e||Craft.t("app","View"),target:"_blank",data:{targetUrl:t.url,targetLabel:t.label}});return this.addListener(i,"click",()=>{decodeURIComponent(i.attr("href")).match(/\bpreview\/create-token\b/)&&setTimeout(()=>{this.activatePreviewToken()},1)}),this.previewLinks.push(i),i},updatePreviewLinks:function(){this.previewLinks.forEach(t=>{this.updatePreviewLinkHref(t),this.activatedPreviewToken&&this.removeListener(t,"click")})},updatePreviewLinkHref:function(t){t.attr("href",this.getTokenizedPreviewUrl(t.data("targetUrl"),null,!1))},activatePreviewToken:function(){this.activatedPreviewToken=!0,this.updatePreviewLinks()},createShareMenu:function(t){const e=$("",{type:"button",class:"view-btn btn menubtn",text:Craft.t("app","View")}).appendTo(t),i=$("",{class:"menu"}).appendTo(t),s=$("
").appendTo(i);this.settings.previewTargets.forEach(t=>{$("").append(this.createPreviewLink(t,t.label)).appendTo(s)}),new Garnish.MenuBtn(e)},getPreviewTokenParams:function(){const t={elementType:this.settings.elementType,canonicalId:this.settings.canonicalId,siteId:this.settings.siteId,revisionId:this.settings.revisionId,previewToken:this.settings.hashedPreviewToken};return this.settings.draftId&&!this.settings.isProvisionalDraft&&(t.draftId=this.settings.draftId),t},getPreviewToken:function(){return this.previewTokenQueue.push(()=>new Promise((t,e)=>{this.activatedPreviewToken?t(this.settings.previewToken):Craft.sendActionRequest("POST","preview/create-token",{data:this.getPreviewTokenParams()}).then(()=>{this.activatePreviewToken(),t(this.settings.previewToken)}).catch(e)}))},getTokenizedPreviewUrl:function(t,e,i=!0){const s={},n=this.settings.previewParamValue&&(e||!this.settings.isLive);if(n&&(s[e||"x-craft-preview"]=this.settings.previewParamValue),this.settings.siteToken&&(s[Craft.siteToken]=this.settings.siteToken),!n){const e=Craft.getUrl(t,s);return i?new Promise(t=>{t(e)}):e}if(!this.settings.previewToken||!this.settings.hashedPreviewToken)throw"Missing preview token";s[Craft.tokenParam]=this.settings.previewToken;const a=Craft.getUrl(t,s);if(this.activatedPreviewToken)return i?new Promise(t=>{t(a)}):a;if(i)return new Promise((t,e)=>{this.getPreviewToken().then(()=>{t(a)}).catch(e)});const r=this.getPreviewTokenParams();return r.redirect=a,Craft.getActionUrl("preview/create-token",r)},getPreview:function(){if(this.preview&&!this.preview.isVisible&&this.preview.elementEditor?.settings.updatedTimestamp!==this.settings.updatedTimestamp&&(this.preview.destroy(),delete this.preview),!this.preview){let t;this.preview=new Craft.Preview({elementType:this.settings.elementType,elementId:this.settings.isProvisionalDraft?this.settings.canonicalId:this.settings.elementId,draftId:this.settings.isProvisionalDraft?null:this.settings.draftId,revisionId:this.settings.revisionId,siteId:this.settings.siteId,onBeforeLoad:async()=>{await this.checkForm(!1,!0)}}),this.preview.on("open",()=>{t=this.settings.updatedTimestamp,this.pause()}),this.preview.on("close",async()=>{this.$previewBtn&&this.$previewBtn.focus(),this.settings.updatedTimestamp!==t&&await this.refreshContent();const e=this.preview.tabManager?.getSelectedTabIndex()??null;null!==e&&this.tabManager?.selectTab(e),this.resume()}),this.preview.on("afterSaveDraft",({response:t})=>{this._handleSaveDraftResponse(t)})}return this.preview},openPreview:async function(){if(!Garnish.hasAttr(this.$previewBtn,"aria-disabled")){this.$previewBtn.attr("aria-disabled",!0);try{const t=this.getPreview();await t.open();const e=this.tabManager?.getSelectedTabIndex()??null;null!==e&&t.tabManager?.selectTab(e)}finally{this.$previewBtn.removeAttr("aria-disabled")}}},ensureIsDraftOrRevision:function(t){return new Promise((e,i)=>{if(this.settings.draftId||this.settings.revisionId)e();else{if(t&&this.serializeForm(!0)===this.$container.data("initialSerializedValue"))return void e();this.saveDraft().then(e).catch(i)}})},async setFormValue(t,e){if(this.settings.revisionId)throw"Unable to set form values on a revision.";return await this.checkForm(),!this.$container.serialize().split("&").includes(`${encodeURIComponent(t)}=${encodeURIComponent(e)}`)&&($("",{type:"hidden",name:t,value:e}).prependTo(this.$container),this.settings.canCreateDrafts&&await this.saveDraft(),!0)},async markDeltaNameAsModified(t){let e=this.$container.data("modified-delta-names")||[];e.includes(t)||(e.push(t),this.$container.data("modified-delta-names",e),await this.saveDraft())},serializeForm:function(t){let e=this.$container.serialize();if(t&&!this.settings.isUnpublishedDraft){const t=encodeURIComponent(this.namespaceInputName("action")),i=encodeURIComponent(this.namespaceInputName("redirect"));e=e.replace(new RegExp(`&${Craft.escapeRegex(t)}=[^&]*`),""),e=e.replace(new RegExp(`&${Craft.escapeRegex(i)}=[^&]*`),"")}e=e.replace(/&elementindex-[^&]*/g,"");const i={serialized:e};return this.trigger("serializeForm",{data:i}),i.serialized},checkForm:function(t,e=null){return this.queue.push(()=>new Promise((i,s)=>{if(this.settings.revisionId)return void i();if(this.savingDraft&&this.saveDraftCallbacks.push(async()=>{try{await this.checkForm(t,e)}catch(t){return void s(t)}i()}),void 0===this.$container.data("initialSerializedValue"))return void setTimeout(async()=>{try{await this.checkForm(t,e)}catch(t){return void s(t)}i()},500);const n=this.serializeForm(!0);t||n!==(this.lastSerializedValue||this.$container.data("initialSerializedValue"))?(e??this.enableAutosave)&&this.settings.canCreateDrafts?this._saveDraftInternal(n).then(i).catch(t=>{console.warn("Couldn’t save draft:",t),s(t)}):this.updateFieldLayout(n).then(i).catch(t=>{console.warn("Couldn’t update field layout:",t),s(t)}):i()}))},async refreshContent(t){this.settings.visibleLayoutElements={},this.settings.staticLayoutElements={};const e=[this.serializeForm(!0)];e.push($.param({[this.namespaceInputName("applyParams")]:0})),t&&!$.isEmptyObject(t)&&e.push($.param(t)),await this.updateFieldLayout(e.join("&"))},isPreviewActive:function(){return this.preview&&this.preview.isActive},saveDraft:function(){return this.queue.push(()=>new Promise((t,e)=>{this._saveDraftInternal(this.serializeForm(!0)).then(t).catch(e)}))},_saveDraftInternal:async function(t){if(this.submittingForm)throw"Form already being submitted.";if(this.savingDraft)throw"Draft already being saved.";this.lastSerializedValue=t,this.savingDraft=!0,this.saveDraftCallbacks=[],this.failed=!1,this.httpStatus=null,this.httpError=null,this.cancelToken=axios.CancelToken.source(),this.statusIcons().velocity("stop").css("opacity","").removeClass("hidden invisible checkmark-icon alert-icon fade-out").addClass("hidden"),this.$saveMetaBtn&&this.$saveMetaBtn.addClass("active");const[e]=Craft.findModifiedDeltaNames(this.$container.data("initialSerializedValue"),t,this.$container.data("delta-names"),this.$container.data("initial-delta-values"),this.$container.data("modified-delta-names"),!0),i=this.prepareData(t,null,!0);let s=$();for(const t of e){const e=s=s.add(this.$container.find(`.field[data-base-input-name="${$.escapeSelector(t)}"]`));s=s.add(e).add(e.parentsUntil(this.$container,".field"))}i.push($.param({[this.namespaceInputName("visibleLayoutElements")]:this.settings.visibleLayoutElements}),$.param({[this.namespaceInputName("staticLayoutElements")]:this.settings.staticLayoutElements})),!this.settings.isProvisionalDraft&&this.settings.draftId||i.push(`${this.namespaceInputName("provisional")}=1`);const n=this.$contentContainer.children("[data-layout-tab]:not(.hidden)").data("id");let a;n&&i.push(`${this.namespaceInputName("selectedTab")}=${n}`);try{a=await Craft.sendActionRequest("POST","elements/save-draft",{cancelToken:this.cancelToken.token,headers:this._saveHeaders,data:i.join("&")})}catch(t){this._afterSaveDraft();const e=this.ignoreFailedRequest;if(this.ignoreFailedRequest=!1,!e)throw this.failed=!0,t&&t.response&&(this.httpStatus=t.response.status,this.httpError=t.response.data?t.response.data.message:null),this._showFailStatus(),t}finally{this.savingDraft=!1;const t=[...this.saveDraftCallbacks];this.saveDraftCallbacks=[];for(const e of t)await e()}this._afterSaveDraft(),this.settings.previewParamValue=a.data.previewParamValue,await this._afterUpdateFieldLayout(t,n,a);const r={};if(a.data.deltaNames?.length){let t=this.$container.data("delta-names");t=Array.isArray(t)?[...t]:[];const e=[];for(const i of a.data.deltaNames)-1===t.indexOf(i)&&(t.push(i),e.push(i));if(e.length){this.$container.data("delta-names",t);const i=Craft.groupParams(this.serializeForm(),e);for(const[t,e]of Object.entries(i))for(const t of e){const[e,i]=t.split("=",2);r[decodeURIComponent(e)]=decodeURIComponent(i)}}}this._handleSaveDraftResponse(a),$.isPlainObject(a.data.draftElementUids)&&(this.draftElementUids={...this.draftElementUids,...a.data.draftElementUids});const o=a.data.modifiedAttributes.map(t=>[`[name="${t=this.namespaceInputName(t)}"]`,`[name^="${t}["]`]).flat().join(",");s=s.add(this.$contentContainer.find(o).parentsUntil(this.$container,".flex-fields > .field")).add(this.$sidebar?.find(o).closest(".field")).not(".no-status,:has(> .status-badge)");for(let t=0;t",{class:"status-badge modified","aria-hidden":"true",title:Craft.t("app","This field has been modified.")}).append($("",{class:"visually-hidden",html:Craft.t("app","This field has been modified.")})));this.afterUpdate(this.lastSerializedValue,r),this.trigger("afterSaveDraft",{response:a}),Craft.broadcaster&&Craft.broadcaster.postMessage({pageId:Craft.pageId,event:"saveDraft",canonicalId:this.settings.canonicalId,draftId:this.settings.draftId,isProvisionalDraft:this.settings.isProvisionalDraft})},_handleSaveDraftResponse(t){const e=!this.settings.draftId;e&&(this.settings.isProvisionalDraft=!0),this.isFullPage&&(t.data.title&&this.$container.find(".screen-title").text(t.data.title),t.data.docTitle&&(document.title=t.data.docTitle)),this.newSiteIds&&(this.newSiteIds.forEach(t=>{const e=this.settings.additionalSites.find(e=>e.siteId==t),i=!e||void 0===e.enabledByDefault||e.enabledByDefault;Craft.cp.showSiteCrumbMenuItem(t),Craft.cp.setSiteCrumbMenuItemStatus(t,i?"enabled":"disabled")}),this.newSiteIds=null),this.settings.isProvisionalDraft?e&&(this.$container.find("input.action-input").attr("value","elements/apply-draft"),this.settings.elementId=t.data.elementId,this.settings.draftId=t.data.draftId,this.settings.isLive=!1,this.previewToken=null,this.initForProvisionalDraft()):(this.settings.draftName=t.data.draftName,this.isFullPage&&Craft.cp.updateContext(t.data.draftName,t.data.creator?Craft.t("app","Saved {timestamp} by {creator}",{timestamp:t.data.timestamp,creator:t.data.creator}):Craft.t("app","Saved {timestamp}",{timestamp:t.data.timestamp}))),t.data.previewTargets&&JSON.stringify(t.data.previewTargets)!==JSON.stringify(this.settings.previewTargets)&&this.updatePreviewTargets(t.data.previewTargets),e&&(this.updatePreviewLinks(),this.trigger("createProvisionalDraft")),this.$nameTextInput&&this.checkMetaValues(),$.isPlainObject(t.data.draftElementIds)&&(this.draftElementIds={...this.draftElementIds,...t.data.draftElementIds}),this.settings.updatedTimestamp=t.data.updatedTimestamp,this.settings.canonicalUpdatedTimestamp=t.data.canonicalUpdatedTimestamp},_afterSaveDraft:function(){this.$saveMetaBtn&&this.$saveMetaBtn.removeClass("active")},_showFailStatus:function(){this.statusIcons().velocity("stop").css("opacity","").removeClass("hidden checkmark-icon").addClass("alert-icon"),this.setStatusMessage(this._saveFailMessage())},updateFieldLayout:async function(t){if(this.submittingForm)throw"Form already being submitted.";this.lastSerializedValue=t,this.cancelToken=axios.CancelToken.source();let e=this.prepareData(t);const i={[this.namespaceInputName("visibleLayoutElements")]:this.settings.visibleLayoutElements,[this.namespaceInputName("staticLayoutElements")]:this.settings.staticLayoutElements};this.settings.isProvisionalDraft&&(i[this.namespaceInputName("provisional")]=1);const s=this.$contentContainer.children("[data-layout-tab]:not(.hidden)").data("id");let n;s&&(i[this.namespaceInputName("selectedTab")]=s),e+=`&${$.param(i)}`;try{n=await Craft.sendActionRequest("POST","elements/update-field-layout",{cancelToken:this.cancelToken.token,headers:this._saveHeaders,data:e})}catch(t){this._afterSaveDraft();const e=this.ignoreFailedRequest;if(this.ignoreFailedRequest=!1,!e)throw this.failed=!0,t&&t.response&&(this.httpStatus=t.response.status,this.httpError=t.response.data?t.response.data.message:null),this._showFailStatus(),t}await this._afterUpdateFieldLayout(t,s,n)},prepareData:function(t,e=()=>{},i=!1){const s=Craft.findDeltaData(this.$container.data("initialSerializedValue"),t,this.$container.data("delta-names"),e,this.$container.data("initial-delta-values"),this.$container.data("modified-delta-names"),!0);if(this.settings.draftId&&(s.push(`${this.namespaceInputName("draftId")}=${this.settings.draftId}`),this.settings.isProvisionalDraft&&s.push(`${this.namespaceInputName("provisional")}=1`)),null!==this.settings.draftName&&s.push(`${this.namespaceInputName("draftName")}=${encodeURIComponent(this.settings.draftName)}`),null!==this.settings.fieldId&&s.push(`${this.namespaceInputName("fieldId")}=${this.settings.fieldId}`),null!==this.settings.ownerId&&s.push(`${this.namespaceInputName("ownerId")}=${this.settings.ownerId}`),this.settings.saveParams)for(const[t,e]of Object.entries(this.settings.saveParams))s.push(`${this.namespaceInputName(t)}=${e}`);return i?s:s.join("&")},get _saveHeaders(){const t={"content-type":"application/x-www-form-urlencoded"};return this.namespace&&(t["X-Craft-Namespace"]=this.namespace),t},getDraftElementId(t){return t==this.settings.canonicalId?this.settings.elementId:this.draftElementIds[t]||t},getDraftElementUid(t){return this.draftElementUids[t]||t},updatePreviewTargets:function(t){t.forEach(t=>{const e=this.settings.previewTargets.find(e=>e.label===t.label);e&&(e.url=t.url);const i=this.previewLinks.find(e=>e.data("targetLabel")===t.label);i&&(i.data("targetUrl",t.url),this.updatePreviewLinkHref(i))})},async _afterUpdateFieldLayout(t,e,i){const s=this.serializeForm(!0)===t,n=this.$contentContainer.children("[data-layout-tab]:not(.hidden)").data("id");let a=$();const r={},o={};let l=!1;for(const t of i.data.missingElements){let i=this.$contentContainer.children(`[data-layout-tab="${t.uid}"]`);i.length||(i=$("",{id:this.namespaceId(t.id),class:"flex-fields","data-id":t.id,"data-layout-tab":t.uid}),t.id!==e&&i.addClass("hidden"),i.appendTo(this.$contentContainer)),a=a.add(i);for(const e of t.elements)if(!1!==e.html){if(r[t.uid]||(r[t.uid]=[]),r[t.uid].push(e.uid),e.static&&(o[t.uid]||(o[t.uid]=[]),o[t.uid].push(e.uid)),"string"==typeof e.html){const t=i.children(`[data-layout-element="${e.uid}"]`),s=$(e.html);t.length?t.replaceWith(s):s.appendTo(i),Craft.cp.elementThumbLoader.load(s),l=!0}}else{const t=i.children(`[data-layout-element="${e.uid}"]`);if(!t.length||!Garnish.hasAttr(t,"data-layout-element-placeholder")){const s=$("",{class:"hidden","data-layout-element":e.uid,"data-layout-element-placeholder":""});t.length?t.replaceWith(s):s.appendTo(i),l=!0}}}const h=this.$contentContainer.children("[data-layout-tab]").not(a).not('[data-layout-tab=""]');if(h.length&&(h.remove(),l=!0),a.filter(":not(.hidden)").length||a.first().removeClass("hidden"),this.settings.visibleLayoutElements=r,this.settings.staticLayoutElements=o,(this.settings.updateTabs??(this.isFullPage?t=>Craft.cp.updateTabs(t):()=>{}))(i.data.tabs),e&&n&&e!==n){const t=this.tabManager;if(t){const e=t.$tabs.filter(`[data-id="${n}"]`);e.length?t.selectTab(e):t.selectTab(t.$tabs.first())}}await Craft.appendHeadHtml(i.data.headHtml),await Craft.appendBodyHtml(i.data.bodyHtml),Craft.initUiElements(this.$contentContainer),l&&(i.data.initialDeltaValues&&Object.assign(this.$container.data("initial-delta-values"),i.data.initialDeltaValues),s&&(this.lastSerializedValue=this.serializeForm(!0))),this.handleDismissibleTips()},afterUpdate:function(t,e={}){this.$container.data("initialSerializedValue",t),this.$container.data("initial-delta-values",e);const i=this.statusIcons().velocity("stop").css("opacity","").removeClass("hidden").addClass("checkmark-icon");this.setStatusMessage(this._saveSuccessMessage()),this.settings.autosaveDrafts||i.velocity("stop").velocity({opacity:0},{delay:2e3,complete:()=>{i.addClass("hidden")}}),this.trigger("update"),(this.settings.isProvisionalDraft||this.settings.isUnpublishedDraft)&&Craft.broadcaster&&Craft.broadcaster.postMessage({event:"saveElement",id:this.settings.canonicalId})},setStatusMessage:function(t){this.statusIcons().attr("title",t),Craft.cp.announce(t)},showMetaModal:function(){this.metaModal?this.metaModal.show():this.createMetaModal(),Garnish.isMobileBrowser(!0)||setTimeout(()=>{this.$nameTextInput.focus()},100)},createMetaModal:function(){const t=$("",{class:"modal fitted"}),e=$("",{class:"body"}).appendTo(t),i=$('
").appendTo(this.$menu);for(var e in this.options)if(this.options.hasOwnProperty(e)){var i=this.options[e];if("-"===i)Za()("").appendTo(this.$menu),t=Za()("
").appendTo(this.$container)[0]},addItem:function(t,e,i=!1){const s=this.createItem(t);e||(e=this.$container.children("ul").last().get(0)||this.addGroup()),i?e.prepend(s):e.append(s);const n=s.querySelector("a, button");return this.toggleItem(n,!t.hidden),this.updateVisibility(),n},addItems:function(t,e){for(const i of t)this.addItem(i,e)},addHr:function(t){const e=document.createElement("hr");return this.isPadded("hr")&&(e.className="padded"),t?t.parentNode.insertBefore(e,t):this.$container.append(e),e},getFirstDestructiveGroup:function(){return this.$container.children("ul:has([data-destructive]):first").get(0)},addGroup:function(t=null,e=!0,i=null){const s=this.isPadded();if(t){const e=document.createElement("h3");e.classList.add("h6"),s&&e.classList.add("padded"),e.textContent=t,i?i.parentNode.insertBefore(e,i):this.$container.append(e)}const n=document.createElement("ul");return s&&(n.className="padded"),i?i.parentNode.insertBefore(n,i):this.$container.append(n),e&&(n.previousElementSibling&&"HR"!==n.previousElementSibling.nodeName&&!n.previousElementSibling.classList.contains("search-container")&&this.addHr(n),n.nextElementSibling&&"HR"!==n.nextElementSibling&&this.addHr(n.nextElementSibling)),this.updateVisibility(),n},toggleItem(t,e){void 0===e&&(e=t.parentNode.classList.contains("hidden")),e?this.showItem(t):this.hideItem(t)},showItem(t){t.parentNode.classList.remove("hidden"),this.updateVisibility(),this.isExpanded()&&this.setContainerPosition()},hideItem(t){t.parentNode.classList.add("hidden"),this.updateVisibility(),this.isExpanded()&&this.setContainerPosition()},toggleGroup(t){t.querySelectorAll("li:not(.hidden):not(.filtered)").length?t.classList.remove("hidden"):t.classList.add("hidden")},removeItem(t){const e=t.parentNode,i=e.parentNode;e.remove(),0===i.querySelectorAll(":scope > li").length&&i.remove(),this.updateVisibility(),this.isExpanded()&&this.setContainerPosition()},updateHrVisibility(){this.updateVisibility()},updateVisibility(){this.$container.children("ul,.menu-group").each((t,e)=>{this.toggleGroup(e)}),this.$container.find("hr").each((t,e)=>{const i=Za()(e),s=i.prevUntil("h3,hr").filter(":not(.hidden):not(.filtered)"),n=i.nextUntil("h3,hr").filter(":not(.hidden):not(.filtered)");s.length&&n.length?i.removeClass("hidden"):i.addClass("hidden")}),this.$container.find("h3").each((t,e)=>{const i=Za()(e);i.nextUntil("h3,hr").filter(":not(.hidden):not(.filtered)").length?i.removeClass("hidden"):i.addClass("hidden")})},hasVisibleItems:function(){return!!this.$container.find("li:not(.hidden)").length},destroy:function(){this.$trigger.removeData("trigger"),yr.DisclosureMenu.instances=yr.DisclosureMenu.instances.filter(t=>t!==this),this.base()},_alignLeft:function(){this.$container.css({left:Math.max(this._alignmentElementOffset.left,0),right:"auto"})},_alignRight:function(){const t=this._viewportWidth-(this._alignmentElementOffset.left+this._alignmentElementWidth);this.$container.css({right:Math.max(t,0),left:"auto"})},_alignCenter:function(){const t=Math.round(this._alignmentElementOffset.left+this._alignmentElementWidth/2-this._menuWidth/2);this.$container.css({left:Math.max(t,0),right:"auto"})}},{defaults:{position:null,windowSpacing:5,withSearchInput:!1},instances:[]}),lr=sr.extend({targetItemWidth:null,targetItemHeight:null,targetItemPositionInDraggee:null,$draggee:null,otherItems:null,totalOtherItems:null,helpers:null,helperTargets:null,helperPositions:null,helperLagIncrement:null,updateHelperPosProxy:null,updateHelperPosFrame:null,lastMouseX:null,lastMouseY:null,_returningHelpersToDraggees:!1,init:function(t,e){void 0===e&&Za().isPlainObject(t)&&(e=t,t=null),e=Za().extend({},yr.Drag.defaults,e),this.base(t,e)},allowDragging:function(){return!this._returningHelpersToDraggees},startDragging:function(){this.onBeforeDragStart(),this.helpers=[],this.helperTargets=[],this.helperPositions=[],this.lastMouseX=this.lastMouseY=null,this.targetItemWidth=this.$targetItem.outerWidth(),this.targetItemHeight=this.$targetItem.outerHeight(),this.draggeeDisplay=this.$targetItem.css("display"),this.setDraggee(this.findDraggee()),this.otherItems=[];for(var t=0;t{t.velocity("fadeOut",{duration:yr.FX_DURATION,complete:function(){t.remove()}})})},onReturnHelpersToDraggees:function(){yr.requestAnimationFrame(function(){this.trigger("returnHelpersToDraggees"),this.settings.onReturnHelpersToDraggees()}.bind(this))},_createHelper:function(t){var e=this.$draggee.eq(t),i=e.clone().addClass("draghelper");e.parents("#content").length&&i.addClass("drag-in-content"),e.parents(".slideout-container").length&&i.addClass("drag-in-slideout"),this.settings.copyDraggeeInputValuesToHelper&&yr.copyInputValues(e,i),i.find("[name]").attr("name",""),i.outerWidth(Math.ceil(e.outerWidth())).outerHeight(Math.ceil(e.outerHeight())).css({margin:0,"pointer-events":"none"}),this.settings.helper&&(i="function"==typeof this.settings.helper?this.settings.helper(i,t):Za()(this.settings.helper).append(i)),i.appendTo(yr.$bod);const s=this._getHelperTarget(t,!0);i.css({position:"absolute",top:s.top,left:s.left,zIndex:this.settings.helperBaseZindex+this.$draggee.length-t,display:this.draggeeDisplay}),1!=this.settings.helperOpacity&&i.css("opacity",this.settings.helperOpacity),this.helperPositions[t]={top:s.top,left:s.left},this.helpers.push(i)},_updateHelperPos:function(){if(this.mouseX!==this.lastMouseX||this.mouseY!==this.lastMouseY){for(this._updateHelperPos._i=0;this._updateHelperPos._i1&&this._getItemIndex(this.$draggee[0])>this._getItemIndex(this.$draggee[1])&&this.$draggee.first().insertBefore(this.$draggee[1]),this.$insertion=this.createInsertion(),this._placeInsertionWithDraggee(),this.closestItem=null,this._clearMidpoints(),this.settings.container)for(this.$heightedContainer=Za()(this.settings.container);!this.$heightedContainer.height();)this.$heightedContainer=this.$heightedContainer.parent();this._precalculateMidpoints(),this.base()},onDrag:function(){this.$heightedContainer&&!yr.hitTest(this.mouseX,this.mouseY,this.$heightedContainer)?this.closestItem&&(this.closestItem=null,this._removeInsertion()):this.closestItem!==(this.closestItem=this._getClosestItem())&&null!==this.closestItem&&this._updateInsertion(),this.base()},onDragStop:function(){this._removeInsertion(),this.settings.moveTargetItemToFront||0===this.targetItemPositionInDraggee||this.$targetItem.insertAfter(this.$draggee.eq(this.targetItemPositionInDraggee)),this.returnHelpersToDraggees(),this.base(),this.$items=Za()().add(this.$items),this.newDraggeeIndexes=this._getDraggeeIndexes(),this.newDraggeeIndexes.join(",")!==this.oldDraggeeIndexes.join(",")&&this.onSortChange()},onInsertionPointChange:function(){yr.requestAnimationFrame(function(){this.trigger("insertionPointChange"),this.settings.onInsertionPointChange()}.bind(this))},onSortChange:function(){yr.requestAnimationFrame(function(){this.trigger("sortChange"),this.settings.onSortChange()}.bind(this))},_precalculateMidpoints:function(){this._allMidpoints=new Map;const t=window.pageXOffset,e=window.pageYOffset;this.$items.each((i,s)=>{const n=s.getBoundingClientRect();this._allMidpoints.set(s,{x:n.left+t+n.width/2,y:n.top+e+n.height/2,width:n.width,height:n.height,top:n.top+e,bottom:n.bottom+e})})},_getVisibleItems:function(){const t=window.pageYOffset,e=t+window.innerHeight,i=[];return this.$items.each((s,n)=>{if(this.$draggee&&Za().contains(this.$draggee[0],n))return;const a=this._allMidpoints.get(n);a&&a.bottom>=t-300&&a.top<=e+300&&i.push(n)}),i},_getItemIndex:function(t){return this.$items.index(t)},_getDraggeeIndexes:function(){for(var t=[],e=0;e200?this._getVisibleItems():null;if(this.settings.removeDraggee?this.insertionVisible&&this._testForClosestItem(this.$insertion[0]):this._testForClosestItem(this.$draggee[0]),this._getClosestItem._closestItem&&(this._getClosestItem._midpoint=this._getItemMidpoint(this._getClosestItem._closestItem)),this.settings.axis!==yr.Y_AXIS&&(this._getClosestItem._startXDist=this._getClosestItem._lastXDist=this._getClosestItem._closestItem?Math.abs(this._getClosestItem._midpoint.x-this.draggeeVirtualMidpointX):null),this.settings.axis!==yr.X_AXIS&&(this._getClosestItem._startYDist=this._getClosestItem._lastYDist=this._getClosestItem._closestItem?Math.abs(this._getClosestItem._midpoint.y-this.draggeeVirtualMidpointY):null),t)for(let e=0;ethis._getClosestItem._lastXDist)&&(this.settings.axis===yr.X_AXIS||null!==this._getClosestItem._lastYDist&&this._getClosestItem._yDist>this._getClosestItem._lastYDist)||(this.settings.axis!==yr.Y_AXIS&&(this._getClosestItem._lastXDist=this._getClosestItem._xDist),this.settings.axis!==yr.X_AXIS&&(this._getClosestItem._lastYDist=this._getClosestItem._yDist),(this.canInsertBefore(this._getClosestItem._$otherItem)||this.canInsertAfter(this._getClosestItem._$otherItem))&&this._testForClosestItem(this._getClosestItem._$otherItem[0])),this._getClosestItem._$otherItem=this.getPrevItem(this._getClosestItem._$otherItem);for(this.settings.axis!==yr.Y_AXIS&&(this._getClosestItem._lastXDist=this._getClosestItem._startXDist),this.settings.axis!==yr.X_AXIS&&(this._getClosestItem._lastYDist=this._getClosestItem._startYDist),this._getClosestItem._$otherItem=this.getNextItem(this.$draggee.last());this._getClosestItem._$otherItem;)this._getClosestItem._midpoint=this._getItemMidpoint(this._getClosestItem._$otherItem[0]),this.settings.axis!==yr.Y_AXIS&&(this._getClosestItem._xDist=Math.abs(this._getClosestItem._midpoint.x-this.draggeeVirtualMidpointX)),this.settings.axis!==yr.X_AXIS&&(this._getClosestItem._yDist=Math.abs(this._getClosestItem._midpoint.y-this.draggeeVirtualMidpointY)),(this.settings.axis===yr.Y_AXIS||null!==this._getClosestItem._lastXDist&&this._getClosestItem._xDist>this._getClosestItem._lastXDist)&&(this.settings.axis===yr.X_AXIS||null!==this._getClosestItem._lastYDist&&this._getClosestItem._yDist>this._getClosestItem._lastYDist)||(this.settings.axis!==yr.Y_AXIS&&(this._getClosestItem._lastXDist=this._getClosestItem._xDist),this.settings.axis!==yr.X_AXIS&&(this._getClosestItem._lastYDist=this._getClosestItem._yDist),(this.canInsertBefore(this._getClosestItem._$otherItem)||this.canInsertAfter(this._getClosestItem._$otherItem))&&this._testForClosestItem(this._getClosestItem._$otherItem[0])),this._getClosestItem._$otherItem=this.getNextItem(this._getClosestItem._$otherItem)}return this._getClosestItem._closestItem===this.$draggee[0]||this.insertionVisible&&this._getClosestItem._closestItem===this.$insertion[0]?null:this._getClosestItem._closestItem},_clearMidpoints:function(){this._midpointVersion++,this._$prevItem=null},_getItemMidpoint:function(t){return this._allMidpoints&&this._allMidpoints.has(t)?this._allMidpoints.get(t):(Za().data(t,"midpointVersion")!==this._midpointVersion&&(this._getItemMidpoint._repositionDraggee=!this.settings.axis&&(!this.settings.removeDraggee||this.insertionVisible)&&t!==this.$draggee[0]&&(!this.$insertion||t!==this.$insertion.get(0)),this._getItemMidpoint._repositionDraggee?(this._$prevItem||(this._$prevItem=(this.insertionVisible?this.$insertion:this.$draggee).first().prev(),this._$draggeeParent=(this.insertionVisible?this.$insertion:this.$draggee).first().parent()),this._moveDraggeeToItem(t),this.settings.removeDraggee?this._getItemMidpoint._$item=this.$insertion:this._getItemMidpoint._$item=this.$draggee):this._getItemMidpoint._$item=Za()(t),this._getItemMidpoint._offset=this._getItemMidpoint._$item.offset(),Za().data(t,"midpoint",{x:this._getItemMidpoint._offset.left+this._getItemMidpoint._$item.outerWidth()/2,y:this._getItemMidpoint._offset.top+this._getItemMidpoint._$item.outerHeight()/2}),Za().data(t,"midpointVersion",this._midpointVersion),delete this._getItemMidpoint._$item,delete this._getItemMidpoint._offset,this._getItemMidpoint._repositionDraggee&&(this._$prevItem.length?this.$draggee.insertAfter(this._$prevItem):this.$draggee.prependTo(this._$draggeeParent),this._placeInsertionWithDraggee())),Za().data(t,"midpoint"))},_testForClosestItem:function(t){switch(this._testForClosestItem._midpoint=this._getItemMidpoint(t),this._testForClosestItem._mouseDistX=Math.abs(this._testForClosestItem._midpoint.x-this.draggeeVirtualMidpointX),this._testForClosestItem._mouseDistY=Math.abs(this._testForClosestItem._midpoint.y-this.draggeeVirtualMidpointY),this.settings.axis){case yr.X_AXIS:this._testForClosestItem._mouseDist=this._testForClosestItem._mouseDistX;break;case yr.Y_AXIS:this._testForClosestItem._mouseDist=this._testForClosestItem._mouseDistY;break;default:this._testForClosestItem._mouseDist=Math.sqrt(this._testForClosestItem._mouseDistX**2+this._testForClosestItem._mouseDistY**2)}(null===this._getClosestItem._closestItem||this._testForClosestItem._mouseDist{const e=t.getBoundingClientRect();this._allMidpoints.set(t,{x:e.left+s+e.width/2,y:e.top+n+e.height/2,width:e.width,height:e.height,top:e.top+n,bottom:e.bottom+n})})}else this._clearMidpoints();this.onInsertionPointChange()},_moveDraggeeToItem:function(t){this.canInsertAfter(Za()(t))&&this.$draggee.parent()[0]===Za()(t).parent()[0]&&this.$draggee.index()!0,canInsertAfter:()=>!0}}),ur=ir.extend({handlers:null,init:function(){this.handlers=[],this.addListener(yr.$bod,"keyup",function(t){t.keyCode===yr.ESC_KEY&&this.escapeLatest(t)})},register:function(t,e){this.handlers.push({obj:t,func:e})},unregister:function(t){for(var e=this.handlers.length-1;e>=0;e--)this.handlers[e].obj===t&&this.handlers.splice(e,1)},escapeLatest:function(t){if(this.handlers.length){var e=this.handlers.pop();("function"==typeof e.func?e.func:e.obj[e.func]).call(e.obj,t),"function"==typeof e.obj.trigger&&e.obj.trigger("escape")}}}),pr=ir.extend({$trigger:null,$fixedTriggerParent:null,$hud:null,$tip:null,$body:null,$header:null,$footer:null,$mainContainer:null,$main:null,$shade:null,$nextFocusableElement:null,showing:!1,orientation:null,updatingSizeAndPosition:!1,windowWidth:null,windowHeight:null,scrollTop:null,scrollLeft:null,mainWidth:null,mainHeight:null,init:function(t,e="",i={}){this.$trigger=Za()(t),Za().isPlainObject(e)&&(i=e,e=""),this.setSettings(i,yr.HUD.defaults),this.on("show",this.settings.onShow),this.on("hide",this.settings.onHide),this.on("submit",this.settings.onSubmit),this.$trigger.attr("aria-expanded","false"),void 0===yr.HUD.activeHUDs&&(yr.HUD.activeHUDs={}),this.settings.withShade&&(this.$shade=Za()("",{class:this.settings.shadeClass})),this.$hud=Za()("",{class:this.settings.hudClass}).data("hud",this),this.$tip=Za()("",{class:this.settings.tipClass}).appendTo(this.$hud),this.$body=Za()("",{class:this.settings.bodyClass}).appendTo(this.$hud),this.$mainContainer=Za()("",{class:this.settings.mainContainerClass}).appendTo(this.$body),this.$main=Za()("",{class:this.settings.mainClass}).appendTo(this.$mainContainer),this.updateBody(e);var s=this.$trigger;do{if("fixed"===s.css("position")){this.$fixedTriggerParent=s;break}s=s.offsetParent()}while(s.length&&"HTML"!==s.prop("nodeName"));this.$fixedTriggerParent?this.$hud.css("position","fixed"):this.$hud.css("position","absolute"),this.addListener(this.$body,"submit","_handleSubmit"),this.settings.withShade&&this.settings.hideOnShadeClick&&this.addListener(this.$shade,"tap,click","hide"),this.settings.closeBtn&&this.addListener(this.settings.closeBtn,"activate","hide"),this.addListener(yr.$win,"resize","updateSizeAndPosition"),this.$fixedTriggerParent||this.addListener(yr.$scrollContainer,"scroll","updateSizeAndPosition"),this.settings.listenToMainResize&&this.addListener(this.$main,"resize","updateSizeAndPosition"),this.addListener(this.$trigger,"keydown",t=>{if(t.keyCode===yr.TAB_KEY&&!t.shiftKey&&this.showing){const e=yr.getKeyboardFocusableElements(this.$hud).first();e.length&&(t.preventDefault(),e.focus())}}),this.addListener(this.$hud,"keydown",function(t){const{keyCode:e}=t;if(e!==yr.TAB_KEY)return;const i=yr.getKeyboardFocusableElements(this.$hud),s=i.index(t.target);0===s&&t.shiftKey?(t.preventDefault(),this.$trigger.focus()):s===i.length-1&&!t.shiftKey&&this.$nextFocusableElement&&(t.preventDefault(),this.$nextFocusableElement.focus())}),this.settings.showOnInit?(this.$hud.css("opacity",0),this.show(),this.$hud.css("opacity",1)):(this.$hud.appendTo(yr.$bod),this.hideContainer()),yr.HUD.instances.push(this)},updateBody:function(t){this.$main.html(""),this.$header&&(this.$hud.removeClass("has-header"),this.$header.remove(),this.$header=null),this.$footer&&(this.$hud.removeClass("has-footer"),this.$footer.remove(),this.$footer=null),this.$main.append(t);var e=this.$main.find("."+this.settings.headerClass+":first"),i=this.$main.find("."+this.settings.footerClass+":first");e.length&&(this.$header=e.insertBefore(this.$mainContainer),this.$hud.addClass("has-header")),i.length&&(this.$footer=i.insertAfter(this.$mainContainer),this.$hud.addClass("has-footer"))},show:function(t){if(t&&t.stopPropagation&&t.stopPropagation(),this.showing)return;if(this.settings.closeOtherHUDs)for(var e in yr.HUD.activeHUDs)yr.HUD.activeHUDs.hasOwnProperty(e)&&yr.HUD.activeHUDs[e].hide();document.activeElement!==document.body&&Za()(document.activeElement).blur(),this.settings.withShade&&(this.$shade.appendTo(yr.$bod),this.$shade.show()),this.$hud.appendTo(yr.$bod),this.$trigger.attr("aria-expanded","true"),this.showContainer(),this.showing=!0,yr.HUD.activeHUDs[this._namespace]=this,yr.uiLayerManager.addLayer(this.$hud),this.settings.hideOnEsc&&yr.uiLayerManager.registerShortcut(yr.ESC_KEY,this.hide.bind(this));const i=yr.$bod.find(":focusable"),s=i.index(this.$trigger[0]);-1!==s&&i.length>s+1&&(this.$nextFocusableElement=i.eq(s+1),this.addListener(this.$nextFocusableElement,"keydown",t=>{if(t.keyCode===yr.TAB_KEY&&t.shiftKey){const e=yr.getKeyboardFocusableElements(this.$hud).last();e.length&&(t.preventDefault(),e.focus())}})),this.onShow(),this.enable(),this.updateRecords()&&(this.$hud.css("top",yr.$scrollContainer.scrollTop()),this.updateSizeAndPosition(!0))},showContainer:function(){this.$hud.show()},onShow:function(){this.trigger("show")},updateRecords:function(){let t=!1;t=this.windowWidth!==(this.windowWidth=yr.$win.width())||t,t=this.windowHeight!==(this.windowHeight=yr.$win.height())||t,t=this.scrollTop!==(this.scrollTop=yr.$scrollContainer.scrollTop())||t,t=this.scrollLeft!==(this.scrollLeft=yr.$scrollContainer.scrollLeft())||t,t=this.mainWidth!==(this.mainWidth=this.$main.outerWidth())||t,t=this.mainHeight!==(this.mainHeight=this.$main.outerHeight())||t;const e=this.$trigger.scrollParent();return e.get(0)!==yr.$scrollContainer.get(0)&&(t=this.spWidth!==(this.spWidth=e.width())||t,t=this.spHeight!==(this.spHeight=e.height())||t,t=this.spScrollTop!==(this.spScrollTop=e.scrollTop())||t,t=this.spScrollLeft!==(this.spScrollLeft=e.scrollLeft())||t),t},updateSizeAndPosition:function(t){(!0===t||this.updateRecords()&&!this.updatingSizeAndPosition)&&(this.updatingSizeAndPosition=!0,yr.requestAnimationFrame(this.updateSizeAndPositionInternal.bind(this)))},updateSizeAndPositionInternal:function(){var t,e,i,s,n,a,r,o,l,h;s=yr.$win.scrollLeft(),n=yr.$win.scrollTop(),t=this.$trigger.outerWidth(),e=this.$trigger.outerHeight(),i=this.$trigger.offset(),this.$fixedTriggerParent?(i.left-=s,i.top-=n,a=i,s=0,n=0,r=0,o=0):(a=yr.getOffset(this.$trigger),r=yr.$scrollContainer.scrollLeft(),o=yr.$scrollContainer.scrollTop()),i.right=i.left+t,i.bottom=i.top+e,a.right=a.left+t,a.bottom=a.top+e,this.$hud.css({width:""}),this.$mainContainer.css({height:"","overflow-x":"","overflow-y":""}),l=this.$body.width(),h=this.$body.height();var d,c,u={bottom:this.windowHeight+o-a.bottom,top:a.top-o,right:this.windowWidth+r-a.right,left:a.left-r};this.orientation=null;for(var p=0;p=g){this.orientation=f;break}(!this.orientation||u[f]>u[this.orientation])&&(this.orientation=f)}if(this.orientation&&-1!==Za().inArray(this.orientation,["bottom","top","right","left"])||(this.orientation="bottom"),this.tipClass&&this.$tip.removeClass(this.tipClass),this.tipClass=this.settings.tipClass+"-"+yr.HUD.tipClasses[this.orientation],this.$tip.addClass(this.tipClass),"top"===this.orientation||"bottom"===this.orientation?(d=this.windowWidth-2*this.settings.windowSpacing,c=u[this.orientation]-this.settings.windowSpacing-this.settings.triggerSpacing):(d=u[this.orientation]-this.settings.windowSpacing-this.settings.triggerSpacing,c=this.windowHeight-2*this.settings.windowSpacing),dd||ld?d:this.settings.minBodyWidth,this.$hud.width(l),this.mainWidth>d&&this.$mainContainer.css("overflow-x","scroll"),h=this.$body.height()),h>c||hc?c:this.settings.minBodyHeight;this.$header&&(m-=this.$header.outerHeight()),this.$footer&&(m-=this.$footer.outerHeight()),this.$mainContainer.height(m),this.mainHeight>m&&this.$mainContainer.css("overflow-y","scroll")}let b,$,C;this.$hud.css({"border-top-left-radius":"","border-top-right-radius":"","boredr-bottom-right-radius":"","border-bottom-left-radius":""});const v=parseInt(this.$hud.css("border-radius"));if("top"===this.orientation||"bottom"===this.orientation){var w=this.windowWidth+s-(l+this.settings.windowSpacing),_=s+this.settings.windowSpacing;b=i.left+Math.round(t/2),$=b-Math.round(l/2),$>w&&($=w),$<_&&($=_),this.$hud.css("left",$);const e=yr.within(b-$-this.settings.tipWidth/2,0,l-this.settings.tipWidth);this.$tip.css({left:e,top:""}),"top"===this.orientation?(C=i.top-(h+this.settings.triggerSpacing),this.$hud.css("top",C)):(C=i.bottom+this.settings.triggerSpacing,this.$hud.css("top",C));const n="top"===this.orientation?"bottom":"top";el-v-this.settings.tipWidth&&this.$hud.css(`border-${n}-right-radius`,2)}else{var y=this.windowHeight+n-(h+this.settings.windowSpacing),S=n+this.settings.windowSpacing;b=i.top+Math.round(e/2),C=b-Math.round(h/2),C>y&&(C=y),Ch-v-this.settings.tipWidth&&this.$hud.css(`border-bottom-${s}-radius`,2)}this.updatingSizeAndPosition=!1,this.trigger("updateSizeAndPosition")},hide:function(){this.showing&&(this.disable(),this.$trigger.attr("aria-expanded","false"),this.hideContainer(),this.settings.withShade&&this.$shade.hide(),this.showing=!1,delete yr.HUD.activeHUDs[this._namespace],yr.uiLayerManager.removeLayer(),yr.focusIsInside(this.$hud)&&this.$trigger.focus(),this.$nextFocusableElement&&(this.removeListener(this.$nextFocusableElement,"keydown"),this.$nextFocusableElement=null),this.onHide())},hideContainer:function(){this.$hud.hide()},onHide:function(){this.trigger("hide")},toggle:function(){this.showing?this.hide():this.show()},submit:function(){this.onSubmit()},onSubmit:function(){this.trigger("submit")},_handleSubmit:function(t){t.preventDefault(),this.submit()},destroy:function(){this.$hud&&this.$hud.remove(),this.settings.withShade&&this.$shade&&this.$shade.remove(),yr.HUD.instances=yr.HUD.instances.filter(t=>t!==this),this.base()}},{tipClasses:{bottom:"top",top:"bottom",right:"left",left:"right"},defaults:{shadeClass:"hud-shade",hudClass:"hud",tipClass:"tip",bodyClass:"body",headerClass:"hud-header",footerClass:"hud-footer",mainContainerClass:"main-container",mainClass:"main",orientations:["bottom","top","right","left"],triggerSpacing:10,windowSpacing:10,tipWidth:30,minBodyWidth:200,minBodyHeight:0,withShade:!0,onShow:Za().noop,onHide:Za().noop,onSubmit:Za().noop,closeBtn:null,listenToMainResize:!0,showOnInit:!0,closeOtherHUDs:!0,hideOnEsc:!0,hideOnShadeClick:!0},instances:[]}),fr=ir.extend({$btn:null,menu:null,showingMenu:!1,disabled:!0,observer:null,searchStr:"",clearSearchStrTimeout:null,init:function(t,e,i){if(void 0===i&&Za().isPlainObject(e)&&(i=e,e=null),this.$btn=Za()(t),!this.$btn.length)return void console.warn("Menu button instantiated without a DOM element.");let s;this.$btn.data("menubtn")?(e||(s=this.$btn.data("menubtn").menu.$container),console.warn("Double-instantiating a menu button on an element"),this.$btn.data("menubtn").destroy()):e||(s=this.$btn.next(".menu").detach()),this.$btn.data("menubtn",this),this.setSettings(i,yr.MenuBtn.defaults),this.menu=e||new yr.CustomSelect(s),this.menu.$anchor=Za()(this.settings.menuAnchor||this.$btn),this.menu.on("optionselect",function(t){this.onOptionSelect(t.selectedOption)}.bind(this)),this.menu.on("hide",()=>{this.clearSearchStr()}),this.menu.on("show",()=>{this.clearSearchStr()}),this.$btn.attr({role:"combobox","aria-controls":this.menu.menuId,"aria-haspopup":"listbox","aria-expanded":"false"});const n=this.$btn.attr("aria-labelledby");!this.menu.$container.attr("aria-labelledby")&&n&&this.menu.$container.attr("aria-labelledby",n),this.menu.on("hide",this.onMenuHide.bind(this)),this.addListener(this.$btn,"mousedown","onMouseDown"),this.addListener(this.$btn,"keydown","onKeyDown"),this.addListener(this.$btn,"blur","onBlur"),this.observer=new MutationObserver(t=>{for(const e of t)if("attributes"===e.type&&"disabled"===e.attributeName){this.handleStatusChange();break}}),this.observer.observe(this.$btn[0],{attributes:!0}),this.handleStatusChange()},onBlur:function(){this.showingMenu&&yr.requestAnimationFrame(function(){Za().contains(this.menu.$container.get(0),document.activeElement)||this.hideMenu()}.bind(this))},onKeyDown:function(t){if(!yr.isCtrlKeyPressed(t)){if(t.key&&(t.key.match(/^[^ ]$/)||this.searchStr.length&&" "===t.key)){let e;this.showingMenu||(this.showMenu(),e=this.menu.$options.filter(".sel:first"),0===e.length&&(e=this.menu.$options.first())),this.searchStr+=t.key.toLowerCase();for(let t=0;t{this.clearSearchStr()},1e3))}if(this.showingMenu)switch(t.keyCode){case yr.RETURN_KEY:case yr.SPACE_KEY:case yr.TAB_KEY:{t.keyCode!==yr.TAB_KEY&&t.preventDefault();const e=this.menu.$options.filter(".hover");e.length>0?e.get(0).click():this.hideMenu();break}case yr.UP_KEY:case yr.PAGE_UP_KEY:{t.preventDefault();const e=t.keyCode===yr.UP_KEY?1:10;this.moveFocusUp(e);break}case yr.DOWN_KEY:case yr.PAGE_DOWN_KEY:{t.preventDefault();const e=t.keyCode===yr.DOWN_KEY?1:10;this.moveFocusDown(e);break}case yr.HOME_KEY:t.preventDefault(),this.focusFirstOption();break;case yr.END_KEY:t.preventDefault(),this.focusLastOption()}else switch(t.keyCode){case yr.RETURN_KEY:case yr.SPACE_KEY:case yr.DOWN_KEY:t.preventDefault(),this.showMenu(),this.focusSelectedOption();break;case yr.UP_KEY:case yr.HOME_KEY:t.preventDefault(),this.showMenu(),this.focusFirstOption();break;case yr.END_KEY:t.preventDefault(),this.showMenu(),this.focusLastOption()}}},clearSearchStr:function(){this.searchStr="",this.clearSearchStrTimeout&&(clearTimeout(this.clearSearchStrTimeout),this.clearSearchStrTimeout=null)},focusOption:function(t){t.hasClass("hover")||(this.menu.$options.removeClass("hover"),this.menu.$ariaOptions.attr("aria-selected","false"),t.addClass("hover"),this.$btn.attr("aria-activedescendant",t.parent("li").attr("id")),yr.scrollContainerToElement(this.menu.$container,t))},focusSelectedOption:function(){let t=this.menu.$options.filter(".sel:first");t.length?this.focusOption(t):this.focusFirstOption()},focusFirstOption:function(){const t=this.menu.$options.first();this.focusOption(t)},focusLastOption:function(){const t=this.menu.$options.last();this.focusOption(t)},moveFocusUp:function(t){const e=this.menu.$options.filter(".hover");if(e.length){const i=this.menu.$options.index(e[0]);let s=this.menu.$options.eq(Math.max(i-t,0));for(;s.hasClass("disabled")&&i-t>=0;)t++,s=this.menu.$options.eq(Math.max(i-t,0));this.focusOption(s)}else this.focusFirstOption()},moveFocusDown:function(t){const e=this.menu.$options.filter(".hover");if(e.length){const i=this.menu.$options.index(e[0]);let s=this.menu.$options.eq(Math.min(i+t,this.menu.$options.length-1));for(;s.hasClass("disabled")&&i+t<=this.menu.$options.length-1;)t++,s=this.menu.$options.eq(Math.min(i+t,this.menu.$options.length-1));this.focusOption(s)}else this.focusFirstOption()},onMouseDown:function(t){yr.isPrimaryClick(t)&&"INPUT"!==t.target.nodeName&&(t.preventDefault(),this.showingMenu?this.hideMenu():this.showMenu())},showMenu:function(){this.disabled||(this.menu.show(),this.$btn.addClass("active"),this.$btn.focus(),this.$btn.attr("aria-expanded","true"),this.showingMenu=!0,setTimeout(function(){this.addListener(yr.$doc,"mousedown","onMouseDown")}.bind(this),1))},hideMenu:function(){this.menu.hide()},onMenuHide:function(){this.$btn.removeClass("active"),this.$btn.attr({"aria-expanded":"false","aria-activedescendant":null}),this.showingMenu=!1,this.removeListener(yr.$doc,"mousedown")},onOptionSelect:function(t){this.settings.onOptionSelect(t),this.trigger("optionSelect",{option:t})},enable:function(){this.$btn&&this.$btn.removeAttr("disabled")},disable:function(){this.$btn&&this.$btn.attr("disabled","disabled")},handleStatusChange:function(){this.$btn&&(yr.hasAttr(this.$btn[0],"disabled")||"true"===this.$btn.attr("aria-disabled")?(this.disabled=!0,this.$btn.addClass("disabled")):(this.disabled=!1,this.$btn.removeClass("disabled")))},destroy:function(){this.menu.destroy(),this.$btn.removeData("menubtn"),this.observer.disconnect(),this.observer=null,this.base()}},{defaults:{menuAnchor:null,onOptionSelect:Za().noop}}),gr=ir.extend({$container:null,elements:null,focussedElement:null,blurTimeout:null,init:function(t,e){this.$container=Za()(t),this.setSettings(e,yr.MixedInput.defaults),this.elements=[],this.$container.attr("tabindex",0),this.addListener(this.$container,"focus","onFocus")},getElementIndex:function(t){return Za().inArray(t,this.elements)},isText:function(t){return"INPUT"===t.prop("nodeName")},onFocus:function(){if(this.elements.length){var t=this.elements[this.elements.length-1];this.setFocus(t),this.isText(t)&&this.setCaretPos(t,t.val().length)}else this.addTextElement()},addTextElement:function(t,e=!0){var i=new mr(this);return this.addElement(i.$input,t,e),i.setWidth(),i},addElement:function(t,e,i=!0){if(void 0===e)if(this.focussedElement){var s=this.focussedElement,n=this.getElementIndex(s);if(this.isText(s)){var a=s.prop("selectionStart"),r=s.prop("selectionEnd"),o=s.val(),l=o.substring(0,a),h=o.substring(r);if(l&&h){s.val(l).trigger("change");var d=new mr(this);d.$input.val(h).trigger("change"),this.addElement(d.$input,n+1),e=n+1}else e=l?n+1:n}else e=n+1}else e=this.elements.length;void 0!==this.elements[e]?(t.insertBefore(this.elements[e]),this.elements.splice(e,0,t)):(e=this.elements.length,this.$container.append(t),this.elements.push(t)),this.isText(t)||(0!==e&&this.isText(this.elements[e-1])||(this.addTextElement(e),e++),e!==this.elements.length-1&&this.isText(this.elements[e+1])||this.addTextElement(e+1)),this.addListener(t,"click",function(){this.setFocus(t)}),i&&setTimeout(function(){this.setFocus(t)}.bind(this),1)},removeElement:function(t){var e=this.getElementIndex(t);if(-1!==e){if(this.elements.splice(e,1),!this.isText(t)){var i=this.elements[e-1],s=this.elements[e];if(this.isText(i)&&this.isText(s)){var n=i.val(),a=n+s.val();i.val(a).trigger("change"),this.removeElement(s),this.setFocus(i),this.setCaretPos(i,n.length)}}t.remove()}},setFocus:function(t){this.$container.addClass("focus"),this.focussedElement?this.blurFocussedElement():this.$container.attr("tabindex","-1"),t.attr("tabindex","0"),t.focus(),this.focussedElement=t,this.addListener(t,"blur",function(){this.blurTimeout=setTimeout(function(){this.focussedElement===t&&(this.blurFocussedElement(),this.focussedElement=null,this.$container.removeClass("focus"),this.$container.attr("tabindex","0"))}.bind(this),1)})},blurFocussedElement:function(){this.removeListener(this.focussedElement,"blur"),this.focussedElement.attr("tabindex","-1")},focusPreviousElement:function(t){var e=this.getElementIndex(t);if(e>0){var i=this.elements[e-1];if(this.setFocus(i),this.isText(i)){var s=i.val().length;this.setCaretPos(i,s)}}},focusNextElement:function(t){var e=this.getElementIndex(t);if(e').appendTo(this.parentInput.$container),this.$input.css("margin-right",2-mr.padding+"px"),this.setWidth(!0),this.addListener(this.$input,"focus","onFocus"),this.addListener(this.$input,"blur","onBlur"),this.addListener(this.$input,"keydown","onKeyDown"),this.addListener(this.$input,"change","checkInput")},getIndex:function(){return this.parentInput.getElementIndex(this.$input)},buildStage:function(){this.$stage=Za()("").appendTo(yr.$bod),this.$stage.css({position:"absolute",top:-9999,left:-9999,wordWrap:"nowrap"}),yr.copyTextStyles(this.$input,this.$stage)},getTextWidth:function(t){return this.$stage||this.buildStage(),t&&(t=(t=(t=(t=t.replace(/&/g,"&")).replace(//g,">")).replace(/ /g," ")),this.$stage.html(t),this.stageWidth=this.$stage.width(),this.stageWidth},onFocus:function(){this.focussed=!0,this.interval=setInterval(this.checkInput.bind(this),yr.NiceText.interval),this.checkInput()},onBlur:function(){this.focussed=!1,clearInterval(this.interval),this.checkInput()},onKeyDown:function(t){switch(setTimeout(this.checkInput.bind(this),1),t.keyCode){case yr.LEFT_KEY:yr.isCtrlKeyPressed(t)?(t.preventDefault(),this.parentInput.focusStart()):0===this.$input.prop("selectionStart")&&0===this.$input.prop("selectionEnd")&&this.parentInput.focusPreviousElement(this.$input);break;case yr.RIGHT_KEY:yr.isCtrlKeyPressed(t)?(t.preventDefault(),this.parentInput.focusEnd()):this.$input.prop("selectionStart")===this.val.length&&this.$input.prop("selectionEnd")===this.val.length&&this.parentInput.focusNextElement(this.$input);break;case yr.BACKSPACE_KEY:case yr.DELETE_KEY:0===this.$input.prop("selectionStart")&&0===this.$input.prop("selectionEnd")&&(this.parentInput.focusPreviousElement(this.$input),t.preventDefault())}},getVal:function(){return this.val=this.$input.val(),this.val},setVal:function(t){this.$input.val(t),this.checkInput()},checkInput:function(){var t=this.val!==this.getVal();return t&&(this.setWidth(),this.onChange()),t},setWidth:function(t=!1){if(this.stageWidth!==this.getTextWidth(this.val)||t){var e=this.stageWidth+mr.padding;this.$input.width(e)}},onChange:Za().noop},{padding:20}),br=ir.extend({$container:null,$shade:null,$triggerElement:null,$liveRegion:Za()(''),visible:!1,dragger:null,desiredWidth:null,desiredHeight:null,resizeDragger:null,resizeStartWidth:null,resizeStartHeight:null,init:function(t,e){void 0===e&&Za().isPlainObject(t)&&(e=t,t=null),this.setSettings(e,yr.Modal.defaults),this.$shade=Za()(''),t?this.$shade.insertBefore(t):this.$shade.appendTo(yr.$bod),t&&(this.setContainer(t),yr.addModalAttributes(t),this.settings.autoShow&&this.show()),this.settings.triggerElement||(this.settings.triggerElement=yr.getFocusedElement()),yr.Modal.instances.push(this)},addLiveRegion:function(){this.$container&&this.$liveRegion.appendTo(this.$container)},setContainer:function(t){if(this.$container=Za()(t),this.$container.data("modal")&&(console.warn("Double-instantiating a modal on an element"),this.$container.data("modal").destroy()),this.$container.data("modal",this),this.settings.draggable&&(this.dragger=new yr.DragMove(this.$container,{handle:this.settings.dragHandleSelector?this.$container.find(this.settings.dragHandleSelector):this.$container})),this.settings.resizable){var e=Za()('').appendTo(this.$container).append('');this.resizeDragger=new yr.BaseDrag(e,{onDragStart:this._handleResizeStart.bind(this),onDrag:this._handleResize.bind(this)})}this.addLiveRegion(),this.addListener(this.$container,"click",function(t){t.stopPropagation()}),this.visible&&this.show()},show:function(){this.settings.closeOtherModals&&yr.Modal.visibleModal&&yr.Modal.visibleModal!==this&&yr.Modal.visibleModal.hide(),this.$container&&(this.$shade.appendTo(yr.$bod).velocity("stop"),this.$container.appendTo(yr.$bod).velocity("stop"),this.$container.show(),this.updateSizeAndPosition(),this.$shade.velocity("fadeIn",{duration:50,complete:function(){this.$container.velocity("fadeIn",{complete:function(){this.updateSizeAndPosition(),yr.setFocusWithin(this.$container),this.onFadeIn()}.bind(this)})}.bind(this)}),this.settings.hideOnShadeClick&&this.addListener(this.$shade,"click","hide"),yr.trapFocusWithin(this.$container),this.addListener(yr.$win,"resize","_handleWindowResize")),this.enable(),this.visible||(this.visible=!0,yr.Modal.visibleModal=this,yr.uiLayerManager.addLayer(this.$container),yr.hideModalBackgroundLayers(),this.settings.hideOnEsc&&yr.uiLayerManager.registerShortcut(yr.ESC_KEY,()=>{this.trigger("escape"),this.hide()}),yr.$bod.addClass("no-scroll"),this.onShow())},onShow:function(){this.trigger("show"),this.settings.onShow()},quickShow:function(){this.show(),this.$container&&(this.$container.velocity("stop"),this.$container.show().css("opacity",1),this.$shade.velocity("stop"),this.$shade.show().css("opacity",1))},hide:function(t){this.visible&&(this.disable(),t&&t.stopPropagation(),this.$container&&(this.$container.velocity("stop").velocity("fadeOut",{duration:yr.FX_DURATION}),this.$shade.velocity("stop").velocity("fadeOut",{duration:yr.FX_DURATION,complete:this.onFadeOut.bind(this)}),this.settings.hideOnShadeClick&&this.removeListener(this.$shade,"click"),this.removeListener(yr.$win,"resize")),this.visible=!1,yr.$bod.removeClass("no-scroll"),yr.Modal.visibleModal=null,yr.uiLayerManager.removeLayer(),yr.resetModalBackgroundLayerVisibility(),this.onHide(),setTimeout(()=>{let t=this.$triggerElement??this.settings.triggerElement;if("function"==typeof t&&(t=t()),t instanceof jQuery||(t=Za()(t)),t?.is(":hidden")){const e=t.closest(".menu--disclosure");if(e.length){const i=e.attr("id");t=Za()(`[aria-controls="${i}"]`)}else t=null}t?.length?t.focus():console.error("There is no trigger element set for this modal. Set one with modal.$triggerElement = $(...)")},200))},onHide:function(){this.trigger("hide"),this.settings.onHide()},quickHide:function(){this.hide(),this.$container&&(this.$container.velocity("stop"),this.$container.css("opacity",0).hide(),this.$shade.velocity("stop"),this.$shade.css("opacity",0).hide(),this.onFadeOut())},updateSizeAndPosition:function(){this.$container&&(this.$container.css({width:this.desiredWidth?Math.max(this.desiredWidth,200):"",height:this.desiredHeight?Math.max(this.desiredHeight,200):"","min-width":"","min-height":""}),this.updateSizeAndPosition._windowWidth=yr.$win.width(),this.updateSizeAndPosition._width=Math.min(this.getWidth(),this.updateSizeAndPosition._windowWidth-2*this.settings.minGutter),this.$container.css({width:this.updateSizeAndPosition._width,"min-width":this.updateSizeAndPosition._width,left:Math.round((this.updateSizeAndPosition._windowWidth-this.updateSizeAndPosition._width)/2)}),this.updateSizeAndPosition._windowHeight=yr.$win.height(),this.updateSizeAndPosition._height=Math.min(this.getHeight(),this.updateSizeAndPosition._windowHeight-2*this.settings.minGutter),this.$container.css({height:this.updateSizeAndPosition._height,"min-height":this.updateSizeAndPosition._height,top:Math.round((this.updateSizeAndPosition._windowHeight-this.updateSizeAndPosition._height)/2)}),this.trigger("updateSizeAndPosition"))},onFadeIn:function(){this.trigger("fadeIn"),this.settings.onFadeIn()},onFadeOut:function(){this.trigger("fadeOut"),this.settings.onFadeOut()},getHeight:function(){if(!this.$container)throw"Attempted to get the height of a modal whose container has not been set.";return this.visible||this.$container.show(),this.getHeight._height=this.$container.outerHeight(),this.visible||this.$container.hide(),this.getHeight._height},getWidth:function(){if(!this.$container)throw"Attempted to get the width of a modal whose container has not been set.";return this.visible||this.$container.show(),this.getWidth._width=this.$container.outerWidth()+1,this.visible||this.$container.hide(),this.getWidth._width},_handleWindowResize:function(t){t.target===window&&this.updateSizeAndPosition()},_handleResizeStart:function(){this.resizeStartWidth=this.getWidth(),this.resizeStartHeight=this.getHeight()},_handleResize:function(){yr.ltr?this.desiredWidth=this.resizeStartWidth+2*this.resizeDragger.mouseDistX:this.desiredWidth=this.resizeStartWidth-2*this.resizeDragger.mouseDistX,this.desiredHeight=this.resizeStartHeight+2*this.resizeDragger.mouseDistY,this.updateSizeAndPosition()},destroy:function(){this.$container&&this.$container.removeData("modal").remove(),this.$shade&&this.$shade.remove(),this.dragger&&this.dragger.destroy(),this.resizeDragger&&this.resizeDragger.destroy(),yr.Modal.instances=yr.Modal.instances.filter(t=>t!==this),this.base()}},{relativeElemPadding:8,defaults:{autoShow:!0,draggable:!1,dragHandleSelector:null,resizable:!1,minGutter:10,onShow:Za().noop,onHide:Za().noop,onFadeIn:Za().noop,onFadeOut:Za().noop,closeOtherModals:!1,hideOnEsc:!0,hideOnShadeClick:!0,triggerElement:null,shadeClass:"modal-shade"},instances:[],visibleModal:null}),$r=ir.extend({$btn:null,$btnLabel:null,$liveRegion:null,defaultMessage:null,busyMessage:null,failureMessage:null,retryMessage:null,successMessage:null,init:function(t,e){this.setSettings(e,yr.MultiFunctionBtn.defaults),this.$btn=Za()(t),this.$btn.data("multifunction-btn")&&(console.warn("Double-instantiating a multi-function button on an element"),this.$btn.data("multifunction-btn").destroy()),this.$btnLabel=this.$btn.find(".label"),this.defaultMessage=this.$btnLabel.text(),"status"===this.$btn.prev().attr("role")?this.$liveRegion=this.$btn.prev():(this.$liveRegion=Za()("",{class:"visually-hidden",role:"status"}),this.$btn.before(this.$liveRegion)),this.busyMessage=this.$btn.data("busy-message")?this.$btn.data("busy-message"):Craft.t("app","Loading"),this.failureMessage=this.$btn.data("failure-message"),this.retryMessage=this.$btn.data("retry-message"),this.successMessage=this.$btn.data("success-message")?this.$btn.data("success-message"):Craft.t("app","Success")},busyEvent:function(){this.$btn.addClass(this.settings.busyClass),this.busyMessage&&this.updateMessages(this.busyMessage)},failureEvent:function(){this.endBusyState(),(this.failureMessage||this.retryMessage)&&(this.failureMessage&&this.updateMessages(this.failureMessage),this.retryMessage&&(this.failureMessage?setTimeout(()=>{this.updateMessages(this.retryMessage)},this.settings.failureMessageDuration):this.updateMessages(this.retryMessage)))},successEvent:function(){this.endBusyState(),this.successMessage&&this.updateMessages(this.successMessage)},updateMessages:function(t){this.$liveRegion.text(t),this.settings.changeButtonText&&this.$btnLabel.text(t),setTimeout(()=>{this.$liveRegion.text()===t&&this.$liveRegion.empty()},this.settings.clearLiveRegionTimeout)},endBusyState:function(){this.$btn.removeClass(this.settings.busyClass)},destroy:function(){this.$btn.removeData("multifunction-btn"),this.base()}},{defaults:{busyClass:"loading",clearLiveRegionTimeout:2500,failureMessageDuration:3e3,changeButtonText:!1}}),Cr=ir.extend({$input:null,$hint:null,$stage:null,$charsLeft:null,autoHeight:null,maxLength:null,showCharsLeft:!1,showingHint:!1,val:null,inputBoxSizing:"content-box",width:null,height:null,minHeight:null,initialized:!1,init:function(t,e){this.$input=Za()(t),this.settings=Za().extend({},yr.NiceText.defaults,e),this.isVisible()?this.initialize():this.addListener(yr.$win,"resize","initializeIfVisible")},isVisible:function(){return this.$input.height()>0},initialize:function(){this.initialized||(this.initialized=!0,this.removeListener(yr.$win,"resize"),this.maxLength=this.$input.attr("maxlength"),this.maxLength&&(this.maxLength=parseInt(this.maxLength)),this.maxLength&&(this.settings.showCharsLeft||yr.hasAttr(this.$input,"data-show-chars-left"))&&(this.showCharsLeft=!0,this.$input.removeAttr("maxlength")),this.$input.data("nicetext")&&(console.warn("Double-instantiating a transparent text input on an element"),this.$input.data("nicetext").destroy()),this.$input.data("nicetext",this),this.getVal(),this.autoHeight=this.settings.autoHeight&&"TEXTAREA"===this.$input.prop("nodeName"),this.autoHeight&&(this.minHeight=this.getHeightForValue(""),this.updateHeight(),this.width=this.$input.width(),this.addListener(yr.$win,"resize","updateHeightIfWidthChanged")),this.settings.hint&&(this.$hintContainer=Za()('').insertBefore(this.$input),this.$hint=Za()('
').appendTo(this.$sourceSettingsOuterContainer),this.$footer=Za()('').appendTo(i),this.$footerBtnContainer=Za()('').appendTo(this.$footer),this.$cancelBtn=Za()("",{type:"button",class:"btn",text:Craft.t("app","Cancel")}).appendTo(this.$footerBtnContainer),this.$saveBtn=Craft.ui.createSubmitButton({class:"disabled",label:Craft.t("app","Save"),spinner:!0}).appendTo(this.$footerBtnContainer),this.$loadingSpinner=Za()('').appendTo(this.$sourceSettingsContainer),this.setContainer(i),this.show(),Craft.sendActionRequest("POST","element-index-settings/get-customize-sources-modal-data",{data:{elementType:this.elementIndex.elementType}}).then(async t=>{this.$saveBtn.removeClass("disabled"),await this.buildModal(t.data),Ir.setFocusWithin(this.$sourcesSidebarContent)}).finally(()=>{this.$loadingSpinner.remove()}),this.addListener(this.$cancelBtn,"click","hide"),this.addListener(this.$saveBtn,"click","save"),this.addListener(this.$container,"submit","save")},buildModal:async function(t){this.multiPage=t.multiPage,this.baseSortOptions=t.baseSortOptions,this.defaultSortOptions=t.defaultSortOptions,this.availableTableAttributes=t.availableTableAttributes,this.customFieldAttributes=t.customFieldAttributes,this.elementTypeName=t.elementTypeName,this.conditionBuilderHtml=t.conditionBuilderHtml,this.conditionBuilderJs=t.conditionBuilderJs,this.sites=t.sites,this.userGroups=t.userGroups,this.viewModes=t.viewModes,t.headHtml&&await Craft.appendHeadHtml(t.headHtml),t.bodyHtml&&await Craft.appendBodyHtml(t.bodyHtml),this.multiPage&&(await this.createPagesSidebar(t),Za()("",{type:"button",class:"cs-back-btn",title:Craft.t("app","Back to pages"),"aria-label":Craft.t("app","Back to pages")}).append(Za()('').html(await Craft.ui.icon("chevron-left"))).prependTo(this.$sourcesHeader).on("activate",()=>{this.setSelectedScreen(this.$pagesSidebar)})),Craft.hasMousePointerEvents()?this.sourceDrag=new Craft.CustomizeSourcesModal.SourceDrag(this,{handle:".move"}):this.$sourcesSidebar.find(".cs-item .move").hide(),this.sources=[];for(let e=0;e",{class:"btn add icon dashed menubtn",type:"button",title:Craft.t("app","Source actions"),"aria-label":Craft.t("app","Source actions"),"aria-controls":"cs-source-actions","data-disclosure-trigger":"true"}).appendTo(this.$sourcesSidebarContent),this.$sourceMenu=Za()("",{id:"cs-source-actions",class:"menu menu--disclosure"}).appendTo(this.$sourcesSidebarContent),this.sourceMenu=new Ir.DisclosureMenu(this.$newSourceBtn);const e=t=>{const e=this.addSource(t,!0);Ir.scrollContainerToElement(this.$sourcesSidebarContent,e.$item),e.select(),this.sourceMenu.hide()};this.sourceMenu.addItem({label:Craft.t("app","New heading"),onActivate:()=>{e({type:"heading"}),this.focusLabelInput()}}),t.conditionBuilderHtml&&this.sourceMenu.addItem({label:Craft.t("app","New custom source"),onActivate:()=>{const t=this.baseSortOptions.slice(0);t.push(...this.defaultSortOptions),e({type:"custom",key:`custom:${Craft.uuid()}`,sortOptions:t,defaultSort:[t[0].attr,t[1].defaultDir],tableAttributes:[],availableTableAttributes:[]}),this.focusLabelInput()}})},createPagesSidebar:async function(t){this.$sourcesSidebar.removeClass("cs-selected-screen");const e=`cs-header-${Math.floor(1e6*Math.random())}`;this.$pagesSidebar=Za()("",{class:"cs-sidebar cs-selected-screen",role:"navigation","aria-labelledby":e}).insertBefore(this.$sourcesSidebar),Za()('').appendTo(this.$pagesSidebar).append(Za()("",{id:e,class:"h3"}).text(Craft.t("app","Pages"))),this.$pagesSidebarContent=Za()('').appendTo(this.$pagesSidebar),this.$pagesSidebarItems=Za()('').appendTo(this.$pagesSidebarContent),Craft.hasMousePointerEvents()?this.pageDrag=new Ir.DragSort({handle:".move",axis:"y"}):this.$pagesSidebar.find(".cs-item .move").hide(),this.pages=[];const i=Craft.uniqueArray(t.sources.map(t=>t.page));for(const e of i){const i=t.pageSettings?t.pageSettings[e]?.icon:null;await this.addPage(e,i)}!this.selectedPage&&this.pages.length&&this.pages[0].select(),this.$newPageBtn=Za()("",{class:"btn add icon dashed",type:"button",text:Craft.t("app","New page")}).appendTo(this.$pagesSidebarContent),this.$newPageBtn.on("activate",()=>{new Craft.CustomizeSourcesModal.PageSettingsModal(this,{triggerElement:this.$newPageBtn,validateName:t=>""===Craft.CustomizeSourcesModal.Page.nameId(t??"")?Craft.t("yii","{attribute} cannot be blank.",{attribute:Craft.t("app","Page Name")}):!!this.isPageNameUnique(t)||Craft.t("app","Another page already has that name."),onSave:async(t,e)=>{await this.addPage(t,e,!0)}})})},isPageNameUnique:function(t,e){const i=Craft.CustomizeSourcesModal.Page.nameId(t);return!this.pages.find(t=>t!==e&&Craft.CustomizeSourcesModal.Page.nameId(t.name)===i)},addPage:async function(t,e=null,i=!1){const s=Za()('').appendTo(this.$pagesSidebarItems),n=Za()('').attr({tabindex:"0",role:"button"}).append(Za()('').html(e?await Craft.ui.icon(e):"")).append(Za()("",{id:`cs-item-label-${Math.floor(1e6*Math.random())}`,class:"label",text:t})).appendTo(s);Craft.hasMousePointerEvents()&&Za()(``).appendTo(s),Za()("",{type:"hidden",name:`pageSettings[${t}][icon]`,value:e||"","data-icon-input":"true"}).appendTo(s);const a=new Craft.CustomizeSourcesModal.Page(this,s,n,t,e,i);return this.pageDrag?.addItems(s),this.elementIndex.settings.page&&Craft.CustomizeSourcesModal.Page.nameId(this.elementIndex.settings.page)===Craft.CustomizeSourcesModal.Page.nameId(t)&&a.select(),this.pages.push(a),this.updatePageActionButtons(),i&&Craft.cp.announce(Craft.t("app","Success")),a},focusLabelInput:function(){this.selectedSource.$labelInput.focus()},getSourceName:function(){return this.selectedSource?this.selectedSource.sourceData.label:this.sources[0].sourceData.label},getSourceContainer:function(t,e=!0){return void 0===this.sourceContainers[t]&&e&&(this.sourceContainers[t]=Za()(''),this.$newSourceBtn?this.sourceContainers[t].insertBefore(this.$newSourceBtn):this.sourceContainers[t].appendTo(this.$sourcesSidebarContent),this.multiPage&&t!==this.selectedPage.name&&this.sourceContainers[t].addClass("hidden")),this.sourceContainers[t]},addSource:function(t,e){const i=t.page??this.selectedPage?.name??"__DEFAULT__";t.page=i;const s="heading"===t.type,n=this.getSourceContainer(i),a=Za()('').appendTo(n),r=Za()('').attr({tabindex:"0",role:"button"}).append(Za()("",{id:`cs-item-label-${Math.floor(1e6*Math.random())}`,class:"label"})).append(Za()('')).appendTo(a);s&&!t.key&&(t.key=`heading:${Craft.uuid()}`);const o=Za()("",{type:"hidden",name:"sourceOrder[]",value:t.key}).appendTo(a);let l;return Craft.hasMousePointerEvents()&&Za()(``).appendTo(a),s?(a.addClass("cs-item--heading"),Za()('').attr("name",`sources[${t.key}][heading]`).val(t.heading).appendTo(a),l=new Craft.CustomizeSourcesModal.Heading(this,a,r,o,t,e),l.updateItemLabel(t.heading)):(l="native"===t.type?new Craft.CustomizeSourcesModal.Source(this,a,r,o,t,e):new Craft.CustomizeSourcesModal.CustomSource(this,a,r,o,t,e),l.updateItemLabel(t.label),t.data?.handle&&l.updateItemHandle(t.data.handle),t.key===this.elementIndex.rootSourceKey&&l.select()),this.sourceDrag?.addItems(a),this.sources.push(l),this.updateSourceActionButtons(),e&&Craft.cp.announce(Craft.t("app","Success")),l},updatePageActionButtons:function(){for(const t of this.pages)t.updateActionButton()},updateSourceActionButtons:function(){for(const t of this.sources)t.updateActionButton()},setSelectedScreen:function(t){this.$body.width()>=700||(this.$pagesSidebar?.removeClass("cs-selected-screen"),this.$sourcesSidebar.removeClass("cs-selected-screen"),this.$sourceSettingsOuterContainer.removeClass("cs-selected-screen"),t.addClass("cs-selected-screen"),Craft.setFocusWithin(t))},save:function(t){if(t&&t.preventDefault(),!this.$saveBtn.hasClass("disabled")&&!this.$saveBtn.hasClass("loading")){if(this.$saveBtn.addClass("loading"),this.multiPage&&this.pages.some(t=>""===t.name))return Craft.cp.displayError(Craft.t("yii","{attribute} cannot be blank.",{attribute:Craft.t("app","Page Name")})),void this.$saveBtn.removeClass("loading");Craft.sendActionRequest("POST","element-index-settings/save-customize-sources-modal-settings",{data:this.$container.serialize()+`&elementType=${this.elementIndex.elementType}`}).then(async({data:t})=>{let e=null;this.selectedSource&&this.selectedSource.sourceData.key&&!t.disabledSourceKeys.includes(this.selectedSource.sourceData.key)?e=this.selectedSource.sourceData.key:this.elementIndex.sourceKey||(e=this.elementIndex.$visibleSources.first().data("key")),e&&await this.elementIndex.asyncSelectSourceByKey(e),window.location.reload()}).catch(t=>{Craft.cp.displayError(t?.response?.data?.message)}).finally(()=>{this.$saveBtn.removeClass("loading")})}},destroy:function(){const t=[...this.sources];for(const e of t)e.destroy();if(this.pages){const t=[...this.pages];for(const e of t)e.destroy()}this.sourceMenu&&(this.sourceMenu.destroy(),this.$sourceMenu.remove()),this.base()}}),Craft.CustomizeSourcesModal.PageSettingsModal=Ir.Modal.extend({modal:null,name:null,icon:null,init:function(t,e,i,s){"object"==typeof e&&(s=e,e=null),this.modal=t,this.name=e,this.icon=i;const n=Za()('').appendTo(Ir.$bod),a=Za()('').appendTo(n),r=Craft.ui.createTextField({label:Craft.t("app","Page Name"),value:this.name,required:!0}).appendTo(a),o=Craft.ui.createIconPickerField({label:Craft.t("app","Icon"),value:this.icon}).appendTo(a),l=Za()('').appendTo(n),h=Craft.ui.createButton({label:Craft.t("app","Cancel")}).appendTo(l);Craft.ui.createSubmitButton({label:Craft.t("app","Save")}).appendTo(l);const d=r.find(".text");d.on("input",()=>{this.name=d.val()}),o.find(".icon-picker").data("iconpicker").on("change",t=>{this.icon=t.iconName}),h.on("activate",()=>{this.hide()}),n.on("submit",t=>{if(t.preventDefault(),this.settings.validateName){const t=this.settings.validateName(this.name);if(!0!==t)return Craft.ui.addErrorsToField(r,[t]),this.updateSizeAndPosition(),void d.focus();this.settings.onSave&&this.settings.onSave(this.name,this.icon),this.hide()}}),this.base(n,s)},onFadeOut:function(){this.base(),this.destroy()}}),Craft.CustomizeSourcesModal.SourceDrag=Ir.DragSort.extend({modal:null,activePage:null,init:function(t,e={}){this.modal=t,e.filter=()=>this.$targetItem.hasClass("cs-item--heading")?this.$targetItem.add(this.$targetItem.nextUntil(".cs-item--heading")):this.$targetItem,this.modal.multiPage||(e.axis="y"),this.base(e)},onDragStart:function(){this.activePage=null,this.base()},onDrag:function(){if(this.modal.multiPage){this.onDrag._activePage=null;for(const t of this.modal.pages)if(t!==this.modal.selectedPage&&Ir.hitTest(this.mouseX,this.mouseY,t.$item)){this.onDrag._activePage=t;break}(this.activePage&&this.onDrag._activePage!==this.activePage||!this.activePage&&null!==this.onDrag._activePage)&&(this.activePage&&this.activePage.$item.removeClass("active"),this.onDrag._activePage?(this.activePage=this.onDrag._activePage,this.activePage.$item.addClass("active")):this.activePage=null)}this.base()},onDragStop:function(){this.activePage&&(this.$draggee.each((t,e)=>{Za()(e).data("source").moveToPage(this.activePage)}),this.$draggee.show().css("visibility",""),this.activePage.$item.removeClass("active"),this.fadeOutHelpers()),this.base()},returnHelpersToDraggees:function(){this.activePage||this.base()}}),Craft.CustomizeSourcesModal.Page=Ir.Base.extend({modal:null,actionMenu:null,$item:null,$itemButton:null,$actionBtn:null,$actionMenu:null,_name:null,_icon:null,isNew:null,moveUpBtn:null,moveDownBtn:null,removeBtn:null,init:function(t,e,i,s,n,a){this.modal=t,this.$item=e,this.$itemButton=i,this._name=s,this._icon=n,this.isNew=a,this.$item.data("page",this),this.createActionMenu(),this.addListener(this.$itemButton,"activate",this.select)},createActionMenu:function(){this.$actionBtn=Za()("",{class:"btn action-btn",type:"button",title:Craft.t("app","Actions"),"aria-label":Craft.t("app","Actions"),"aria-describedby":this.$item.find(".label").attr("id"),"aria-controls":"cs-source-actions","data-disclosure-trigger":"true"}).insertAfter(this.$item.find(".cs-item__btn")),this.$actionMenu=Za()("",{id:"cs-source-actions",class:"menu menu--disclosure"}).appendTo(this.$item),this.actionMenu=new Ir.DisclosureMenu(this.$actionBtn),this.moveUpBtn=this.actionMenu.addItem({icon:"arrow-up",label:Craft.t("app","Move up"),onActivate:()=>{const t=this.getPrevPage();t&&this.$item.insertBefore(t.$item)}}),this.moveDownBtn=this.actionMenu.addItem({icon:"arrow-down",label:Craft.t("app","Move down"),onActivate:()=>{const t=this.getNextPage();t&&this.$item.insertAfter(t.$item)}}),this.actionMenu.addItem({icon:"gear",label:Craft.t("app","Page settings"),onActivate:()=>{new Craft.CustomizeSourcesModal.PageSettingsModal(this,this.name,this.icon,{triggerElement:this.$actionBtn,validateName:t=>""===Craft.CustomizeSourcesModal.Page.nameId(t??"")?Craft.t("yii","{attribute} cannot be blank.",{attribute:Craft.t("app","Page Name")}):!!this.modal.isPageNameUnique(t,this)||Craft.t("app","Another page already has that name."),onSave:(t,e)=>{this.name=t,this.icon=e}})}}),this.removeBtn=this.actionMenu.addItem({icon:"trash",label:Craft.t("app","Remove page"),destructive:!0,onActivate:()=>{confirm(Craft.t("app","Are you sure you want to remove the page “{name}”?",{name:this.name}))&&this.destroy()}}),this.actionMenu.on("show",()=>{this.updateActionButton()})},updateActionButton:function(){this.actionMenu.toggleItem(this.moveUpBtn,!!this.getPrevPage()),this.actionMenu.toggleItem(this.moveDownBtn,!!this.getNextPage()),this.actionMenu.toggleItem(this.removeBtn,this.modal.pages.length>1),this.actionMenu.hasVisibleItems()?this.$actionBtn.removeClass("hidden"):this.$actionBtn.addClass("hidden")},getPrevPage:function(){return this.$item.prev(".cs-item").data("page")},getNextPage:function(){return this.$item.next(".cs-item").data("page")},getSourceContainer:function(t=!0){return this.modal.getSourceContainer(this.name,t)},isSelected:function(){return this.modal.selectedPage===this},select:function(){this.modal.setSelectedScreen(this.modal.$sourcesSidebar),this.isSelected()||(this.modal.selectedPage&&this.modal.selectedPage.deselect(),this.$item.addClass("sel"),this.$itemButton.attr({"aria-current":"true"}),this.modal.sourceContainers[this.name]&&this.modal.sourceContainers[this.name].removeClass("hidden"),this.modal.selectedPage=this,this.modal.$sourceSettingsContainer.scrollTop(0))},deselect:function(){this.$item.removeClass("sel"),this.$itemButton.attr({"aria-current":"false"}),this.modal.sourceContainers[this.name]&&this.modal.sourceContainers[this.name].addClass("hidden"),this.modal.selectedSource&&this.modal.selectedSource.deselect(),this.modal.selectedPage=null},set name(t){if(t===this.name)return;this.$item.find(".label").text(t),this.$item.find("[data-icon-input]").attr("name",`pageSettings[${t}][icon]`);const e=this.getSourceContainer(!1);e&&(this.modal.sourceContainers[t]=e,delete this.modal.sourceContainers[this.name],e.find(".cs-item").each((e,i)=>{Za()(i).data("source").$pageInput.val(t)})),this._name=t},get name(){return this._name},set icon(t){if(t===this.icon)return;this.$item.find("[data-icon-input]").val(t||"");const e=this.$item.find(".cp-icon");t?Craft.ui.icon(t).then(t=>{e.html(t)}):e.html(""),this._icon=t},get icon(){return this._icon},destroy:function(){this.modal.pageDrag?.removeItems(this.$item),this.modal.pages=this.modal.pages.filter(t=>t!==this);let t=this.$item.prev(".cs-item");t.length||(t=this.$item.next(".cs-item"));const e=t.data("page");this.isSelected()&&(this.deselect(),e?.select()),e?.$actionBtn.focus();const i=this.getSourceContainer(!1);if(i){if(e){const t=e.getSourceContainer(),s=i.children();for(let i=0;it.replace(/[^\p{L}\p{N}\p{M}]/gu,"").toLowerCase()}),Craft.CustomizeSourcesModal.BaseSource=Ir.Base.extend({modal:null,actionMenu:null,$item:null,$itemButton:null,$itemInput:null,$pageInput:null,$actionBtn:null,$actionMenu:null,$settingsContainer:null,sourceData:null,isNew:null,moveUpBtn:null,moveDownBtn:null,init:function(t,e,i,s,n,a){this.modal=t,this.$item=e,this.$itemButton=i,this.$itemInput=s,this.sourceData=n,this.isNew=a,this.$item.data("source",this),this.createActionMenu(),this.modal.multiPage&&(this.$pageInput=Za()("",{type:"hidden",name:`sourcePages[${this.sourceData.key}]`,value:n.page}).appendTo(this.$item)),this.addListener(this.$itemButton,"activate",this.select)},createActionMenu:function(){this.$actionBtn=Za()("",{class:"btn action-btn",type:"button",title:Craft.t("app","Actions"),"aria-label":Craft.t("app","Actions"),"aria-describedby":this.$item.find(".label").attr("id"),"aria-controls":"cs-source-actions","data-disclosure-trigger":"true"}).insertAfter(this.$item.find(".cs-item__btn")),this.$actionMenu=Za()("",{id:"cs-source-actions",class:"menu menu--disclosure"}).appendTo(this.$item),this.actionMenu=new Ir.DisclosureMenu(this.$actionBtn),this.moveUpBtn=this.actionMenu.addItem({icon:"arrow-up",label:Craft.t("app","Move up"),onActivate:()=>{const t=this.getPrevSource();t&&this.$item.insertBefore(t.$item)}}),this.moveDownBtn=this.actionMenu.addItem({icon:"arrow-down",label:Craft.t("app","Move down"),onActivate:()=>{const t=this.getNextSource();t&&this.$item.insertAfter(t.$item)}}),(this.isHeading()||this.isCustomSource())&&this.actionMenu.addItem({icon:"trash",label:Craft.t("app",this.isHeading()?"Remove heading":"Delete custom source"),destructive:!0,onActivate:()=>{this.destroy()}}),this.actionMenu.on("show",()=>{this.updateActionButton()})},getPrevSource:function(){return this.$item.prev(".cs-item").data("source")},getNextSource:function(){return this.$item.next(".cs-item").data("source")},updateActionButton:function(){if(this.actionMenu.toggleItem(this.moveUpBtn,!!this.getPrevSource()),this.actionMenu.toggleItem(this.moveDownBtn,!!this.getNextSource()),this.modal.multiPage){const t=this.$pageInput.val();let e=this.$actionMenu.find("[data-cs-multi-page-list]");e.length||(this.actionMenu.addHr(),e=Za()(this.actionMenu.addList()).attr("data-cs-multi-page-list","true")),e.html(""),this.modal.pages.forEach(i=>{if(i.name!==t){const t=this.actionMenu.addItem({icon:i.icon?async()=>await Craft.ui.icon(i.icon):null,label:Craft.t("app","Move to {page}",{page:i.name})},e[0]);Za()(t).on("activate",()=>{this.actionMenu.hide(),this.moveToPage(i)})}}),this.$actionMenu.find("[cs-multi-page-action]").remove()}this.actionMenu.hasVisibleItems()?this.$actionBtn.removeClass("hidden"):this.$actionBtn.addClass("hidden")},isHeading:function(){return!1},isCustomSource:function(){return!1},isSelected:function(){return this.modal.selectedSource===this},select:function(){this.modal.setSelectedScreen(this.modal.$sourceSettingsOuterContainer),this.isSelected()||(this.modal.selectedSource&&this.modal.selectedSource.deselect(),this.$item.addClass("sel"),this.$itemButton.attr({"aria-current":"true"}),this.modal.selectedSource=this,this.$settingsContainer?this.$settingsContainer.removeClass("hidden"):(this.$settingsContainer=Za()("").appendTo(this.modal.$sourceSettingsContainer),this.createSettings(this.$settingsContainer)),this.modal.$sourceSettingsContainer.scrollTop(0))},createSettings:async function(){},getIndexSourceItem:function(){},deselect:function(){this.$item.removeClass("sel"),this.$itemButton.attr({"aria-current":"false"}),this.modal.selectedSource=null,this.$settingsContainer.addClass("hidden")},updateItemLabel:function(t){t?this.$itemButton.find(".label").text(t):this.$itemButton.find(".label").html(" ")},updateItemHandle:function(t){t?this.$itemButton.find(".handle").text(t):this.$itemButton.find(".handle").empty()},moveToPage:function(t){this.$item.appendTo(this.modal.getSourceContainer(t.name)),this.$pageInput.val(t.name),this.isSelected()&&this.deselect(),this.modal.updateSourceActionButtons()},destroy:function(){if(this.modal.sourceDrag?.removeItems(this.$item),this.modal.sources=this.modal.sources.filter(t=>t!==this),this.isSelected()){this.deselect();let t=this.$item.prev(".cs-item");t.length||(t=this.$item.next(".cs-item")),t.length&&t.data("source").select(),Ir.setFocusWithin(this.modal.$sourceSettingsContainer)}this.$item.data("source",null),this.$item.remove(),this.actionMenu.destroy(),this.$actionMenu.remove(),this.$settingsContainer&&this.$settingsContainer.remove(),this.modal.updateSourceActionButtons(),this.base()}}),Craft.CustomizeSourcesModal.Source=Craft.CustomizeSourcesModal.BaseSource.extend({$viewModeInput:null,viewModeListbox:null,$sortAttributeSelect:null,$sortDirectionPicker:null,$sortDirectionInput:null,sortDirectionListbox:null,createSettings:async function(t){Craft.ui.createLightswitchField({label:Craft.t("app","Enabled"),name:`sources[${this.sourceData.key}][enabled]`,on:!this.sourceData.disabled}).appendTo(t),this.createViewModeField(t),this.createSortField(t),this.createTableAttributesField(t)},createViewModeField:function(t){const e=Za()("",{class:"btngroup btngroup--exclusive","aria-label":Craft.t("app","View mode options")}),i=this.modal.viewModes.filter(t=>!t.structuresOnly||this.sourceData.structureId);let s=this.sourceData.defaultViewMode;s&&i.some(t=>t.mode===s)||(s=i[0]?.mode);for(const t of i){const i=Za()("",{type:"button",class:"btn",title:t.title,"aria-label":t.title,"data-mode":t.mode}).appendTo(e);Za()("",{class:"cp-icon small"}).append(t.iconSvg).appendTo(i),t.mode===s?i.addClass("active").attr("aria-pressed","true"):i.attr("aria-pressed","false")}e.children("button:last").addClass("btngroup-btn-last"),this.$viewModeInput=Za()("",{type:"hidden",name:`sources[${this.sourceData.key}][defaultViewMode]`,value:this.sourceData.defaultViewMode}).appendTo(e),this.viewModeListbox=new Craft.Listbox(e,{onChange:t=>{this.$viewModeInput.val(t.data("mode"))}}),Craft.ui.createField(e,{label:Craft.t("app","Default View Mode"),fieldset:!0}).appendTo(t).addClass("view-mode-field")},createSortField:function(t){const e=Za()(''),i=this.sourceData.sortOptions.sort((t,e)=>t.label===e.label?0:t.label("structure"===e.attr?t.structure.push(e):e.attr.startsWith("field:")?t.field.push(e):t.attribute.push(e),t),{structure:[],attribute:[],field:[]});s.field.length&&s.field.unshift({optgroup:Craft.t("app","Fields")});const n=Craft.ui.createSelect({name:`sources[${this.sourceData.key}][defaultSort][0]`,options:[...s.structure,...s.attribute,...s.field].map(t=>t.optgroup?t:{label:t.label,value:t.attr}),value:this.sourceData.defaultSort[0]}).addClass("fullwidth").appendTo(Za()("").appendTo(e));this.$sortAttributeSelect=n.children("select").attr("aria-label",Craft.t("app","Sort attribute")),this.$sortDirectionPicker=Za()("",{class:"btngroup btngroup--exclusive","aria-label":Craft.t("app","Sort direction")}).append(Za()("",{type:"button",class:"btn",title:Craft.t("app","Sort ascending"),"aria-label":Craft.t("app","Sort ascending"),"aria-pressed":"false","data-icon":"asc","data-dir":"asc"})).append(Za()("",{type:"button",class:"btn",title:Craft.t("app","Sort descending"),"aria-label":Craft.t("app","Sort descending"),"aria-pressed":"false","data-icon":"desc","data-dir":"desc"})).appendTo(e),this.$sortDirectionInput=Za()("",{type:"hidden",name:`sources[${this.sourceData.key}][defaultSort][1]`}).appendTo(e),this.sortDirectionListbox=new Craft.Listbox(this.$sortDirectionPicker,{onChange:t=>{this.$sortDirectionInput.val(t.data("dir"))}}),this.$sortAttributeSelect.on("change",()=>{this.handleSortAttributeChange()}),this.handleSortAttributeChange(!0),Craft.ui.createField(e,{label:Craft.t("app","Default Sort"),fieldset:!0}).appendTo(t).addClass("sort-field")},handleSortAttributeChange:function(t){const e=this.$sortAttributeSelect.val();if("structure"===e)this.sortDirectionListbox.select(0),this.sortDirectionListbox.disable(),this.$sortDirectionPicker.addClass("disabled");else{this.sortDirectionListbox.enable(),this.$sortDirectionPicker.removeClass("disabled");const i=t?this.sourceData.defaultSort[1]:this.sourceData.sortOptions.find(t=>t.attr===e).defaultDir;this.sortDirectionListbox.select("asc"===i?0:1)}},createTableAttributesField:function(t){const e=this.availableTableAttributes().sort((t,e)=>t[1]===e[1]?0:t[1]",{type:"hidden",name:i,value:""}).appendTo(t),Craft.ui.createSortableCheckboxSelectField({label:Craft.t("app","Default Table Columns"),instructions:Craft.t("app","Choose which table columns should be visible for this source by default."),name:i,options:e.map(([t,e])=>({label:e,value:t})),values:this.sourceData.tableAttributes.map(([t])=>t)}).appendTo(t)},availableTableAttributes:function(){const t=this.modal.availableTableAttributes.slice(0);return t.push(...this.sourceData.availableTableAttributes),t},getIndexSourceItem:function(){const t=this.modal.elementIndex.getSourceByKey(this.sourceData.key);if(t)return t.closest("li")}}),Craft.CustomizeSourcesModal.CustomSource=Craft.CustomizeSourcesModal.Source.extend({$labelInput:null,isCustomSource:function(){return!0},createSettings:async function(t){const e=Craft.ui.createTextField({label:Craft.t("app","Label"),name:`sources[${this.sourceData.key}][label]`,value:this.sourceData.label}).appendTo(t);this.$labelInput=e.find(".text");const i=`condition${Math.floor(1e6*Math.random())}`,s=t=>t.replace(/__ID__/g,i).replace(/__SOURCE_KEY__(?=-)/g,Craft.formatInputId(this.sourceData.key)).replace(/__SOURCE_KEY__/g,this.sourceData.key),n=this.sourceData.conditionBuilderHtml||s(this.modal.conditionBuilderHtml),a=this.sourceData.conditionBuilderJs||s(this.modal.conditionBuilderJs);Craft.ui.createField(Za()("").append(n),{id:"criteria",label:Craft.t("app","{type} Criteria",{type:this.modal.elementTypeName})}).appendTo(t),a&&await Craft.appendBodyHtml(a),this.createSortField(t),this.createTableAttributesField(t),this.createViewModeField(t),Craft.sites.length>1&&Craft.ui.createCheckboxSelectField({label:Craft.t("app","Sites"),instructions:Craft.t("app","Choose which sites this source should be visible for."),name:`sources[${this.sourceData.key}][sites]`,options:Craft.sites.map(t=>({label:t.name,value:t.uid})),values:this.sourceData.sites||"*",showAllOption:!0}).appendTo(t),this.modal.userGroups.length&&Craft.ui.createCheckboxSelectField({label:Craft.t("app","User Groups"),instructions:Craft.t("app","Choose which user groups should have access to this source."),name:`sources[${this.sourceData.key}][userGroups]`,options:this.modal.userGroups,values:this.sourceData.userGroups||"*",showAllOption:!0}).appendTo(t),this.addListener(this.$labelInput,"input","handleLabelInputChange")},availableTableAttributes:function(){const t=this.base();if(this.isNew){let e=[],i=[];this.modal.customFieldAttributes.forEach(t=>{-1==e.indexOf(t[0])&&(e.push(t[0]),i.push(t))}),t.push(...i)}return t},handleLabelInputChange:function(){this.updateItemLabel(this.$labelInput.val())},getIndexSourceItem:function(){let t,e=this.base();if(e?t=e.find(".label"):(t=Za()("",{class:"label"}),e=Za()("").append(Za()("",{"data-key":this.sourceData.key}).append(t))),this.$labelInput){let e=this.$labelInput.val().trim();""===e&&(e=Craft.t("app","(blank)")),t.text(e)}return e}}),Craft.CustomizeSourcesModal.Heading=Craft.CustomizeSourcesModal.BaseSource.extend({$labelInput:null,isHeading:function(){return!0},createSettings:async function(t){const e=Craft.ui.createTextField({label:Craft.t("app","Heading"),name:`sources[${this.sourceData.key}][heading]`,instructions:Craft.t("app","This can be left blank if you just want an unlabeled separator."),value:this.sourceData.heading||""}).appendTo(t);this.$labelInput=e.find(".text"),this.addListener(this.$labelInput,"input","handleLabelInputChange")},handleLabelInputChange:function(){this.updateItemLabel(this.$labelInput.val())},updateItemLabel:function(t){this.$itemButton.find(".label").html((t?Craft.escapeHtml(t):`${Craft.t("app","(blank)")}`)+" ")},getIndexSourceItem:function(){const t=(this.$labelInput?this.$labelInput.val():null)||this.sourceData.heading||"";return Za()('').append(Za()("").text(t)).append("
")}}),__webpack_require__(4634),__webpack_require__(7064),__webpack_require__(4931),__webpack_require__(7729),__webpack_require__(2611),__webpack_require__(9576),__webpack_require__(3912),__webpack_require__(7634),__webpack_require__(7805);const xr={stubThis:t=>t};class Er extends Error{constructor({message:t,code:e,cause:i,name:s}){super(t,{cause:i}),Object.defineProperty(this,"code",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.name=s??i.name,this.code=e}}const Mr=new class{constructor(){Object.defineProperty(this,"controller",{enumerable:!0,configurable:!0,writable:!0,value:void 0})}createNewAbortSignal(){if(this.controller){const t=new Error("Cancelling existing WebAuthn API call for new one");t.name="AbortError",this.controller.abort(t)}const t=new AbortController;return this.controller=t,t.signal}cancelCeremony(){if(this.controller){const t=new Error("Manually cancelling existing WebAuthn API call");t.name="AbortError",this.controller.abort(t),this.controller=void 0}}};function Ar(t){const e=new Uint8Array(t);let i="";for(const t of e)i+=String.fromCharCode(t);return btoa(i).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}function kr(t){const e=t.replace(/-/g,"+").replace(/_/g,"/"),i=(4-e.length%4)%4,s=e.padEnd(e.length+i,"="),n=atob(s),a=new ArrayBuffer(n.length),r=new Uint8Array(a);for(let t=0;tt;function Dr(t){const{id:e}=t;return{...t,id:kr(e),transports:t.transports}}const Br=["cross-platform","platform"];function Lr(t){if(t&&!(Br.indexOf(t)<0))return t}Craft.ElevatedSessionManager=Garnish.Base.extend({fetchingTimeout:!1,loginModal:null,showingLoginModal:!1,onSuccess:null,onCancel:null,success:!1,async requireElevatedSession(t,e,i){let s;this.onSuccess=t,this.onCancel=e,this.fetchingTimeout=!0;try{s=(await Craft.sendActionRequest("POST","users/get-elevated-session-timeout")).data}finally{this.fetchingTimeout=!1}!1===s.timeout||s.timeout>=(i||Craft.ElevatedSessionManager.minSafeElevatedSessionTimeout)?this.onSuccess():this.showLoginModal()},async showLoginModal(){if(this.showingLoginModal)return;this.showingLoginModal=!0,this.loginModal&&this.loginModal.destroy();const{data:t}=await Craft.sendActionRequest("POST","users/login-modal",{data:{email:Craft.userEmail,forElevatedSession:!0}}),e=$(t.html);this.loginModal=new Garnish.Modal(e,{closeOtherModals:!1,shadeClass:"modal-shade dark login-modal-shade",onFadeIn:async()=>{Craft.initUiElements(e),new Craft.LoginForm(e.find(".login-container"),{showPasskeyBtn:Craft.userHasPasskeys,onLogin:()=>{this.success=!0,this.loginModal.hide()}}),await Craft.appendHeadHtml(t.headHtml),await Craft.appendBodyHtml(t.bodyHtml)},onFadeOut:()=>{this.loginModal.destroy(),this.loginModal=null},onHide:()=>{this.showingLoginModal=!1,this.success?this.onSuccess():this.onCancel&&this.onCancel()}})}},{minSafeElevatedSessionTimeout:5}),Craft.elevatedSessionManager=new Craft.ElevatedSessionManager,__webpack_require__(3617),__webpack_require__(505),__webpack_require__(8073),__webpack_require__(6376),__webpack_require__(2476),__webpack_require__(7442),__webpack_require__(8153),__webpack_require__(8793),__webpack_require__(9773),Craft.FieldToggle=Garnish.Base.extend({$toggle:null,targetPrefix:null,targetSelector:null,reverseTargetSelector:null,_$target:null,_$reverseTarget:null,type:null,init:function(t){switch(this.$toggle=$(t),this.$toggle.data("fieldtoggle")&&(console.warn("Double-instantiating a field toggle on an element"),this.$toggle.data("fieldtoggle").destroy()),this.$toggle.data("fieldtoggle",this),this.type=this.getType(),"select"===this.type||"fieldset"===this.type||Garnish.hasAttr(this.$toggle,"data-target-prefix")?this.targetPrefix=this.$toggle.attr("data-target-prefix")||"":(this.targetSelector=this.normalizeTargetSelector(this.$toggle.data("target")),this.reverseTargetSelector=this.normalizeTargetSelector(this.$toggle.data("reverse-target"))),this.findTargets(),this.type){case"button":this._isButtonToggle()&&(this._$target.attr("id")||this._$target.attr("id",`toggle-target-${Math.floor(1e6*Math.random())}`),this.$toggle.attr("aria-controls",this._$target.attr("id")),this._updateButtonExpanded()),this.addListener(this.$toggle,"activate","onToggleChange");break;case"fieldset":this.addListener(this.$toggle.find("input"),"change","onToggleChange");break;default:this.addListener(this.$toggle,"change",()=>{this.onToggleChange(),"radio"===this.$toggle.attr("type")&&$(`input[type="radio"][name="${this.$toggle.attr("name")}"]`).not(this.$toggle).each((t,e)=>{$(e).data("fieldtoggle")?.onToggleChange()})}),this.onToggleChange()}},normalizeTargetSelector:function(t){return t&&!t.match(/^[#\.]/)&&(t="#"+t),t},getType:function(){let t=this._toggleNodeName();if("INPUT"===t&&["checkbox","radio"].includes(this.$toggle.attr("type"))||"checkbox"===this.$toggle.attr("role")||"switch"===this.$toggle.attr("role"))return"checkbox";switch(t){case"SELECT":return Garnish.hasAttr(this.$toggle,"data-boolean-menu")?"booleanMenu":"select";case"BUTTON":case"A":return"button";default:return"fieldset"}},findTargets:function(){null!==this.targetPrefix?this._$target=$(this.normalizeTargetSelector(this.targetPrefix+(this.getToggleVal()||""))):(this.targetSelector&&(this._$target=$(this.targetSelector)),this.reverseTargetSelector&&(this._$reverseTarget=$(this.reverseTargetSelector)))},getToggleVal:function(){if("checkbox"===this.type&&null===this.targetPrefix)return void 0!==this.$toggle.prop("checked")?this.$toggle.prop("checked"):"true"===this.$toggle.attr("aria-checked");if("booleanMenu"===this.type){const t=this.$toggle.data("boolean");if(void 0!==t)return t;const e=this.$toggle.val();return e&&"0"!==e}return"fieldset"===this.type?this.normalizeToggleVal(this.$toggle.find("input:checked:first").val()):this.normalizeToggleVal(this.$toggle.val())},normalizeToggleVal:function(t){return t?t.replace(/[^\w]+/g,"-"):null},onToggleChange:async function(t=!1){const e=this.$toggle.data("selectize");e&&""===this.$toggle.val()&&(await Craft.sleep(1),e.isOpen)||("select"===this.type||"fieldset"===this.type?(this.hideTarget(this._$target),this.findTargets(),this.showTarget(this._$target)):(this.findTargets(),"button"===this.type?this.onToggleChange._show=this._buttonIsCollapsed():"checkbox"===this.type&&null!==this.targetPrefix?this.onToggleChange._show=this.$toggle.prop("checked"):this.onToggleChange._show=!!this.getToggleVal(),this.onToggleChange._show?(this.showTarget(this._$target),this.hideTarget(this._$reverseTarget)):(this.hideTarget(this._$target),this.showTarget(this._$reverseTarget)),delete this.onToggleChange._show),this.trigger("toggleChange"))},showTarget:function(t){if(t&&t.length){if(this.showTarget._currentHeight=t.height(),t.removeClass("hidden"),"select"!==this.type&&"fieldset"!==this.type){"button"===this.type&&(this.$toggle.removeClass("collapsed"),this.$toggle.addClass("expanded"),this._isButtonToggle()&&this._updateButtonExpanded());for(let e=0;e{"SPAN"!==t.prop("nodeName")&&(t.height("auto"),this.showTarget._targetHeight=t.height(),t.css({height:this.showTarget._currentHeight,overflow:"hidden"}),t.velocity("stop"),t.velocity({height:this.showTarget._targetHeight},"fast",function(){t.css({height:"",overflow:""})}))})(t.eq(e));delete this.showTarget._targetHeight}delete this.showTarget._currentHeight,Garnish.$win.trigger("resize")}},hideTarget:function(t){if(t&&t.length)if("select"===this.type||"fieldset"===this.type)t.addClass("hidden");else{"button"===this.type&&(this.$toggle.removeClass("expanded"),this.$toggle.addClass("collapsed"),this._isButtonToggle()&&this._updateButtonExpanded());for(let e=0;e{t.hasClass("hidden")||("SPAN"===t.prop("nodeName")?t.addClass("hidden"):(t.css("overflow","hidden"),t.velocity("stop"),t.velocity({height:0},"fast",function(){t.addClass("hidden")})))})(t.eq(e))}},_toggleNodeName:function(){return this.$toggle.prop("nodeName")},_isButtonToggle:function(){return"BUTTON"===this._toggleNodeName()},_buttonIsCollapsed:function(){return this.$toggle.hasClass("collapsed")||!this.$toggle.hasClass("expanded")},_updateButtonExpanded(){this.$toggle.attr("aria-expanded",this._buttonIsCollapsed()?"false":"true")},destroy:function(){this.$toggle.removeData("fieldtoggle"),this.base()}}),__webpack_require__(6033),__webpack_require__(6229),__webpack_require__(2804),__webpack_require__(2755),__webpack_require__(9562),__webpack_require__(4774),__webpack_require__(7253),__webpack_require__(8628),__webpack_require__(3729),__webpack_require__(4049),__webpack_require__(3977),__webpack_require__(1713),__webpack_require__(1016),__webpack_require__(4571),Craft.LoginForm=Garnish.Base.extend({$container:null,$form:null,$spinner:null,$usernameInput:null,$passwordInput:null,$rememberMeCheckbox:null,$forgotPasswordLink:null,$submitBtn:null,submitBtn:null,$errors:null,$altMethodContainer:null,$passkeyBtn:null,passkeyBtn:null,modal:null,resetPasswordForm:null,validateOnInput:!1,async init(t,e){this.$container=$(t),this.$pane=this.$container.find(".login-form-container"),this.$form=this.$container.find(".login-form"),this.$usernameInput=this.$form.find(".login-username"),this.$passwordInput=this.$form.find(".login-password"),this.$rememberMeCheckbox=this.$form.find(".login-remember-me"),this.$forgotPasswordLink=this.$form.find(".login-forgot-password"),this.$submitBtn=this.$form.find("button.submit"),this.$errors=this.$container.find(".login-errors"),this.$altMethodContainer=this.$container.find(".alternative-login-methods"),this.$passkeyBtn=this.$altMethodContainer.find(".login-passkey-btn"),this.setSettings(e,Craft.LoginForm.defaults),this.modal=this.$container.closest(".modal").data("modal"),this.submitBtn=new Garnish.MultiFunctionBtn(this.$submitBtn,{changeButtonText:!0}),this.passkeyBtn=new Garnish.MultiFunctionBtn(this.$passkeyBtn),this.$spinner=document.createElement("craft-spinner"),this.$spinner.setAttribute("visible",!1),this.$spinner.classList.add("center-absolute"),$(this.$spinner).insertAfter(this.$form),new Craft.PasswordInput(this.$passwordInput,{onToggleInput:t=>{this.removeListener(this.$passwordInput,"input"),this.$passwordInput=t,this.addListener(this.$passwordInput,"input","onInput")}}),this.addListener(this.$usernameInput,"input","onInput"),this.addListener(this.$passwordInput,"input","onInput"),this.addListener(this.$forgotPasswordLink,"activate","showResetPasswordForm"),this.addListener(this.$form,"submit","onSubmit"),Garnish.isMobileBrowser()||(this.$usernameInput.val()?this.$passwordInput.focus():this.$usernameInput.focus()),this.settings.showPasskeyBtn&&Tr()&&await(Tr()?PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable():new Promise(t=>t(!1)))&&(this.$passkeyBtn.removeClass("hidden"),this.onResize(),this.addListener(this.$passkeyBtn,"activate",()=>{this.loginWithPasskey()})),this.$altMethodContainer.children().filter(".btn:not(.hidden)").length&&(this.$altMethodContainer.removeClass("hidden"),Garnish.$win.trigger("resize"))},validate(){const t=Craft.LoginForm.validateUsernameOrEmail(this.$usernameInput.val());if(!0!==t)return t;const e=this.$passwordInput.val().length;return eCraft.maxPasswordLength)||Craft.t("yii","{attribute} should contain at most {max, number} {max, plural, one{character} other{characters}}.",{attribute:Craft.t("app","Password"),max:Craft.maxPasswordLength})},onInput(){this.validateOnInput&&!0===this.validate()&&this.clearErrors()},onSubmit(t){t.preventDefault();const e=this.validate();if(!0!==e)return this.showError(e),void(this.validateOnInput=!0);this.clearErrors(),this.submitBtn.busyEvent();const i={loginName:this.$usernameInput.val(),password:this.$passwordInput.val(),rememberMe:this.$rememberMeCheckbox.prop("checked")?"1":""};Craft.sendActionRequest("POST","users/login",{data:i}).then(({data:t})=>{t.authMethod?this.show2faForm(t):(this.submitBtn.successEvent(),this.settings.onLogin(t.returnUrl))}).catch(t=>{this.submitBtn.failureEvent(),Garnish.shake(this.$form,"left"),this.showError(t?.response?.data?.message||Craft.t("app","A server error occurred.")),this.submitBtn.failureEvent()})},showResetPasswordForm(){this.clearErrors(),this.$form.addClass("hidden"),this.resetPasswordForm||(this.resetPasswordForm=new Craft.LoginForm.ResetPasswordForm(this,this.$container)),this.resetPasswordForm.$form.removeClass("hidden"),this.resetPasswordForm.$usernameInput.val(this.$usernameInput.val()),Garnish.isMobileBrowser()||this.resetPasswordForm.$usernameInput.focus(),this.onResize()},async show2faForm(t){this.clearErrors(),this.$form.addClass("hidden");const e=$(t.authForm).insertAfter(this.$form);if(await Craft.appendHeadHtml(t.headHtml),await Craft.appendBodyHtml(t.bodyHtml),Craft.initUiElements(e),Craft.createAuthFormHandler(t.authMethod,e,()=>{this.settings.onLogin(t.returnUrl)},t=>{this.showError(t)}),Garnish.isMobileBrowser()||setTimeout(()=>{e.find(":focusable:first").focus()},100),t.otherMethods.length){const i=$("").insertAfter(e),s=$('').insertAfter(i),n=$('').appendTo(s),a=$("
").appendTo(n);for(const e of t.otherMethods)$("").append($("",{text:e.name,"data-method":e.class,class:"menu-item"})).appendTo(a);const r=$("",{type:"button","aria-controls":"login-alt-menu",class:"menu-toggle",html:Craft.t("app","Try another way")}).appendTo(s),o=new Garnish.DisclosureMenu(r);a.find("button").on("activate",t=>{const n=this.$pane.outerHeight();this.$pane.outerHeight(n),this.$spinner.visible=!0,this.$spinner.focus(),o.hide(),e.remove(),i.remove(),s.remove(),Craft.sendActionRequest("post","users/auth-form",{data:{method:$(t.target).data("method")}}).then(({data:t})=>{this.$pane.removeAttr("style"),this.show2faForm(t)}).finally(()=>{this.$spinner.visible=!1})})}this.onResize()},showError(t,e=null){this.clearErrors(),e=e||this.$errors.first(),$('
'+t+"
").appendTo(e).velocity("fadeIn"),e.removeClass("hidden"),Craft.cp.announce(t),this.onResize()},clearErrors(){this.$errors.empty().addClass("hidden"),this.onResize()},onResize(){this.modal&&Garnish.requestAnimationFrame(()=>{this.modal.updateSizeAndPosition()})},async loginWithPasskey(){if(!this.$passkeyBtn.hasClass("loading")){this.passkeyBtn.busyEvent();try{const t=await Craft.sendActionRequest("POST","auth/passkey-request-options"),e=await async function(t){!t.optionsJSON&&t.challenge&&(console.warn("startAuthentication() was not called correctly. It will try to continue with the provided options, but this call should be refactored to use the expected call structure instead. See https://simplewebauthn.dev/docs/packages/browser#typeerror-cannot-read-properties-of-undefined-reading-challenge for more information."),t={optionsJSON:t});const{optionsJSON:e,useBrowserAutofill:i=!1,verifyBrowserAutofillInput:s=!0}=t;if(!Tr())throw new Error("WebAuthn is not supported in this browser");let n;0!==e.allowCredentials?.length&&(n=e.allowCredentials?.map(Dr));const a={...e,challenge:kr(e.challenge),allowCredentials:n},r={};if(i){if(!await function(){if(!Tr())return Pr(new Promise(t=>t(!1)));const t=globalThis.PublicKeyCredential;return Pr(void 0===t?.isConditionalMediationAvailable?new Promise(t=>t(!1)):t.isConditionalMediationAvailable())}())throw Error("Browser does not support WebAuthn autofill");if(document.querySelectorAll("input[autocomplete$='webauthn']").length<1&&s)throw Error('No with "webauthn" as the only or last value in its `autocomplete` attribute was detected');r.mediation="conditional",a.allowCredentials=[]}let o;r.publicKey=a,r.signal=Mr.createNewAbortSignal();try{o=await navigator.credentials.get(r)}catch(t){throw function({error:t,options:e}){const{publicKey:i}=e;if(!i)throw Error("options was missing required publicKey property");if("AbortError"===t.name){if(e.signal instanceof AbortSignal)return new Er({message:"Authentication ceremony was sent an abort signal",code:"ERROR_CEREMONY_ABORTED",cause:t})}else{if("NotAllowedError"===t.name)return new Er({message:t.message,code:"ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY",cause:t});if("SecurityError"===t.name){const e=globalThis.location.hostname;if("localhost"!==(s=e)&&!/^((xn--[a-z0-9-]+|[a-z0-9]+(-[a-z0-9]+)*)\.)+([a-z]{2,}|xn--[a-z0-9-]+)$/i.test(s))return new Er({message:`${globalThis.location.hostname} is an invalid domain`,code:"ERROR_INVALID_DOMAIN",cause:t});if(i.rpId!==e)return new Er({message:`The RP ID "${i.rpId}" is invalid for this domain`,code:"ERROR_INVALID_RP_ID",cause:t})}else if("UnknownError"===t.name)return new Er({message:"The authenticator was unable to process the specified options, or could not create a new assertion signature",code:"ERROR_AUTHENTICATOR_GENERAL_ERROR",cause:t})}var s;return t}({error:t,options:r})}if(!o)throw new Error("Authentication was not completed");const{id:l,rawId:h,response:d,type:c}=o;let u;return d.userHandle&&(u=Ar(d.userHandle)),{id:l,rawId:Ar(h),response:{authenticatorData:Ar(d.authenticatorData),clientDataJSON:Ar(d.clientDataJSON),signature:Ar(d.signature),userHandle:u},type:c,clientExtensionResults:o.getClientExtensionResults(),authenticatorAttachment:Lr(o.authenticatorAttachment)}}({optionsJSON:JSON.parse(t.data.options)}),i=await Craft.sendActionRequest("POST","users/login-with-passkey",{data:{requestOptions:t.data.options,response:JSON.stringify(e)}});this.passkeyBtn.successEvent(),this.settings.onLogin(i.data.returnUrl)}catch(t){const e=t?.response?.data?.message;this.passkeyBtn.failureEvent(),e&&this.showError(e)}finally{this.passkeyBtn.endBusyState()}}}},{validateUsernameOrEmail(t){return 0===t.length?Craft.useEmailAsUsername?Craft.t("app","Invalid email."):Craft.t("app","Invalid username or email."):!(Craft.useEmailAsUsername&&!t.match(".+@.+..+"))||Craft.t("app","Invalid email.")},defaults:{showPasskeyBtn:!0,onLogin:t=>{window.location.href=t}}}),Craft.LoginForm.ResetPasswordForm=Garnish.Base.extend({loginForm:null,$container:null,$form:null,$usernameInput:null,$submitBtn:null,$errors:null,$backBtn:null,validateOnInput:!1,init(t,e){this.loginForm=t,this.$container=$(e),this.$form=this.$container.find(".login-reset-password").removeClass("hidden"),this.$usernameInput=this.$form.find(".login-username"),this.$submitBtn=this.$form.find("button.submit"),this.$errors=this.$form.find(".login-errors"),this.$backBtn=this.$form.find(".login-reset-back-btn"),this.addListener(this.$usernameInput,"input","onInput"),this.addListener(this.$form,"submit","onSubmit"),this.addListener(this.$backBtn,"activate","showLoginForm")},validate(){return Craft.LoginForm.validateUsernameOrEmail(this.$usernameInput.val())},onInput(){this.validateOnInput&&!0===this.validate()&&this.loginForm.clearErrors()},onSubmit(t){t.preventDefault();const e=this.validate();if(!0!==e)return this.loginForm.showError(e,this.$errors),void(this.validateOnInput=!0);this.loginForm.clearErrors(),this.$submitBtn.addClass("loading"),Craft.cp.announce(Craft.t("app","Loading"));const i={loginName:this.$usernameInput.val()};Craft.sendActionRequest("POST","users/send-password-reset-email",{data:i}).then(t=>{new Craft.LoginForm.ResetPasswordForm.MessageSentModal}).catch(t=>{this.loginForm.showError(t&&t.response&&t.response.data&&t.response.data.message||Craft.t("app","A server error occurred."),this.$errors)}).finally(()=>{this.$submitBtn.removeClass("loading")})},showLoginForm(){this.loginForm.clearErrors(),this.$form.addClass("hidden"),this.loginForm.$form.removeClass("hidden"),this.loginForm.$usernameInput.val(this.$usernameInput.val()),Garnish.isMobileBrowser()||this.loginForm.$usernameInput.focus(),this.loginForm.onResize()}}),Craft.LoginForm.ResetPasswordForm.MessageSentModal=Garnish.Modal.extend({init(){const t=$('
'+Craft.t("app","Check your email for instructions to reset your password.")+"