diff --git a/CHANGELOG.md b/CHANGELOG.md index a15ff0e3..a3b05063 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +## Unreleased + +### Fixed +- Fixed a bug that occurred when pasting Neo input blocks that use the child block UI element and have descendants, where the descendants would disappear after updating visible field layout elements for the Neo field + ## 3.9.0 - 2023-09-19 ### Added diff --git a/src/assets/dist/neo-main.js b/src/assets/dist/neo-main.js index 88ec142b..4746de56 100644 --- a/src/assets/dist/neo-main.js +++ b/src/assets/dist/neo-main.js @@ -1,2 +1,2 @@ -(()=>{"use strict";var t={n:e=>{var n=e&&e.__esModule?()=>e.default:()=>e;return t.d(n,{a:n}),n},d:(e,n)=>{for(var i in n)t.o(n,i)&&!t.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:n[i]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e)};const e=jQuery;var n=t.n(e);const i=Garnish;var s=t.n(i);const o=Craft;var a=t.n(o);const l={_stack:[[]],enter(t){let e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if("string"==typeof t&&(t=this.fromFieldName(t)),e){const e=this.getNamespace();e.push(...t),t=e}this._stack.push(t)},enterByFieldName(t){let e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.enter(this.fromFieldName(t),e)},leave(){return this._stack.length>1?this._stack.pop():this.getNamespace()},getNamespace(){return Array.from(this._stack[this._stack.length-1])},parse(t){return"string"==typeof t?t.indexOf("[")>-1?this.fromFieldName(t):t.indexOf("-")>-1?t.split("-"):t.indexOf(".")>-1?t.split("."):t:Array.from(t)},value(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"-";const n=this.getNamespace();return n.push(t),n.join(e)},fieldName(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";const e=this.toFieldName();return e?e+t.replace(/([^'"[\]]+)([^'"]*)/,"[$1]$2"):t},toString(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"-";return this.getNamespace().join(t)},toFieldName(){const t=this.getNamespace();switch(t.length){case 0:return"";case 1:return t[0]}return t[0]+"["+t.slice(1).join("][")+"]"},fromFieldName:t=>t.match(/[^[\]\s]+/g)||[]},c=s().Drag.extend({$container:null,blocks:null,maxTopBlocks:0,_draggeeBlocks:null,init(t,e){void 0===e&&n().isPlainObject(t)&&(e=t,t=null),(e=n().extend({},c.defaults,e)).axis=s().Y_AXIS,this.base(t,e),this.$container=e.container,this.blocks=[],this.maxTopBlocks=e.maxTopBlocks},getHelperTargetX(){return this.$draggee.offset().left},getHelperTargetY(){const t=this.settings.magnetStrength;if(1!==t){const e=this.$draggee.offset().top;return e+(this.mouseY-this.mouseOffsetY-e)/t}return this.base()},getBlockByElement(t){return this.blocks.find((e=>e.$container.is(t)))},getParentBlock(t){const e=t.$container.parent().closest(".ni_block");return e.length>0&&this.getBlockByElement(e)},onDragStart(){const t=this;this._draggeeBlocks=[],this.$draggee.each((function(){t._draggeeBlocks.push(t.getBlockByElement(this))})),this.base(),this._calculateMidpoints()},onDrag(){const t=this._getClosestMidpoint();t&&this._moveDraggeeToBlock(t.block,t.type,t.direction),this.base()},onDragStop(){const t=this;this.$draggee.each((function(){const e=n()(this),i=t.getBlockByElement(e);if(e.parent().is(t.$container))i.setLevel(1);else{const e=t.getParentBlock(i);i.setLevel(e.getLevel()+1)}e.find(".ni_block").each((function(){const e=n()(this),i=t.getBlockByElement(e),s=t.getParentBlock(i);i.setLevel(s.getLevel()+1)}))})),this.returnHelpersToDraggees(),this.base()},addBlock(t){this.blocks.push(t),this.addItems(t.$container)},removeBlock(t){this.blocks=this.blocks.filter((e=>e!==t)),this.removeItems(t.$container)},_getClosestMidpoint(){let t=Number.MAX_VALUE,e=Number.MIN_VALUE,n=null;for(const i of this._currentMidpoints)if(i.direction===c.DIRECTION_UP){this.mouseY-this.mouseOffsetYi.position&&i.position>e&&(e=i.position,n=i)}return n},_calculateMidpoints(){this._draggeeBlockY=this.$draggee.offset().top,this._draggeeBlockHeight=this.$draggee.height()+10,this._currentMidpoints=[];for(const t of this.blocks)if(0===t.$container.closest(this.$draggee).length){const e=this._getBlockMidpoints(t);for(const n of Object.keys(e)){const i=e[n],s=this._draggeeBlockY>i?c.DIRECTION_UP:c.DIRECTION_DOWN;this._currentMidpoints.push({block:t,position:i,type:n,direction:s})}}const t=this.$container.offset().top+this.$container.height()+5;this._currentMidpoints.push({block:null,position:t,type:c.TYPE_END,direction:c.DIRECTION_DOWN})},_getBlockMidpoints(t){const e={};if(!(t.$container.parent().closest(".ni_block.is-collapsed").length>0)){const n=t.$container.offset().top,i=t.isExpanded(),s=t.$container.height(),o=t.$topbarContainer.height(),a=i?t.$childrenContainer.height():0,l=i&&t.$contentContainer.length>0?t.$childrenContainer.length>0?t.$childrenContainer.offset().top-t.$contentContainer.offset().top:t.$contentContainer.height():0,r=this.getParentBlock(t);if(r&&!this._validateDraggeeChildren(r)||(e[c.TYPE_CONTENT]=n+(o+l)/2),a>0&&t.isExpanded()&&this._validateDraggeeChildren(t)){const i=t.getButtons().$container.height();e[c.TYPE_CHILDREN]=n+s-1-(14+i+10)/2}}return e},_moveDraggeeToBlock:function(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:c.TYPE_CONTENT,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:c.DIRECTION_DOWN;const i=t?this.getParentBlock(t):null,s=this._validateDraggeeChildren(i);switch(e){case c.TYPE_CHILDREN:0===this.$draggee.closest(t.$container).length?t.$blocksContainer.append(this.$draggee):s&&t.$container.after(this.$draggee);break;case c.TYPE_END:s&&this.$container.append(this.$draggee);break;default:n===c.DIRECTION_UP?s&&t.$container.before(this.$draggee):t.getBlockType().isParent()&&t.isExpanded()&&this._validateDraggeeChildren(t)?t.$blocksContainer.prepend(this.$draggee):s&&t.$container.after(this.$draggee)}this._updateHelperAppearance(),this._calculateMidpoints()},_validateDraggeeChildren(t){const e=t?t.getField():this._draggeeBlocks[0].getField(),n=e.getMaxLevels();if(n>0){const i=t?t.getLevel():-1,s=this._draggeeBlocks[0].getLevel(),o=t=>t.getLevel()-s+i+1>=n,a=t=>{const n=t.getChildren(e.getBlocks(),!0);return o(t)||n.some(a)};if(this._draggeeBlocks.filter(a).length>0)return!1}if(!t){const t=this,e=this.$container.children(".ni_block:not(.is-disabled)");let n=e.length;for(const t of this._draggeeBlocks)if(!t.getBlockType().getTopLevel())return!1;return e.each((function(){t._draggeeBlocks.includes(t.getBlockByElement(this))&&n--})),!(this.maxTopBlocks>0&&n>=this.maxTopBlocks)}const i=t.getBlockType(),s=i.getMaxChildBlocks(),o=t.$childrenContainer.children(".ni_blocks").children(".ni_block");let a=o.length;const l=[],c=this;if(o.each((function(){const t=c.getBlockByElement(this);c._draggeeBlocks.includes(t)?a--:l.push(t)})),s>0&&a>=s)return!1;const r=[];for(const t of this._draggeeBlocks){if(!i.isValidChildBlock(t))return!1;if(r.includes(t))continue;const e=t.getBlockType(),n=e.getMaxSiblingBlocks();if(0===n)continue;const s=this._draggeeBlocks.filter((t=>t.getBlockType().getHandle()===e.getHandle()));if(l.filter((t=>t.getBlockType().getHandle()===e.getHandle())).length+s.length>n)return!1;r.push(...s)}return!0},_updateHelperAppearance(){for(const t of this.helpers){const e=t.data("neo-b-id"),n=this.blocks.find((t=>t.$container.data("neo-b-id")===e));t.css({width:n.$container.width()+1,height:n.$container.height()})}}},{TYPE_CONTENT:"content",TYPE_CHILDREN:"children",TYPE_END:"end",DIRECTION_UP:"up",DIRECTION_DOWN:"down",defaults:{container:null,magnetStrength:1}}),r=c,d={name:"",errors:[]},h=s().Base.extend({init(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t=Object.assign({},d,t),this._name=t.name,this._errors=t.errors,this._uid=t.uid},getErrors(){return Array.from(this._errors)},getName(){return this._name},getUid(){return this._uid}});function u(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function p(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=typeof t||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e||"default");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==typeof e?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}const b={id:-1,fieldLayoutId:-1,sortOrder:0,name:"",handle:"",maxBlocks:0,maxSiblingBlocks:0,maxChildBlocks:0,groupChildBlockTypes:!0,childBlocks:!1,topLevel:!0,tabs:null,tabNames:[],hasChildBlocksUiElement:!1,creatableByUser:!0,deletableByUser:!0,editableByUser:!0},g=s().Base.extend({init(){var t,e,n,i,s,o;let a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};var l,c;(a=Object.assign({},b,a),this._id=0|a.id,this._fieldLayoutId=0|a.fieldLayoutId,this._sortOrder=0|a.sortOrder,this._name=a.name,this._handle=a.handle,this._description=a.description,this._enabled=a.enabled,this._minBlocks=0|a.minBlocks,this._maxBlocks=0|a.maxBlocks,this._minSiblingBlocks=0|a.maxSiblingBlocks,this._maxSiblingBlocks=0|a.maxSiblingBlocks,this._minChildBlocks=0|a.minChildBlocks,this._maxChildBlocks=0|a.maxChildBlocks,this._groupChildBlockTypes=a.groupChildBlockTypes,this._childBlocks=a.childBlocks,this._topLevel=a.topLevel,this._tabNames=a.tabNames,null!==a.tabs)?this._tabs=null!==(l=null===(c=a.tabs.tabNames)||void 0===c?void 0:c.map((t=>t instanceof h?t:new h({name:t,uid:a.tabs.tabUids[t]}))))&&void 0!==l?l:[]:this._tabs=null;this._html=null!==(t=null===(e=a.tabs)||void 0===e?void 0:e.html)&&void 0!==t?t:"",this._js=null!==(n=null===(i=a.tabs)||void 0===i?void 0:i.js)&&void 0!==n?n:"",this._defaultVisibleLayoutElements=null!==(s=null===(o=a.tabs)||void 0===o?void 0:o.visibleLayoutElements)&&void 0!==s?s:{},this._hasChildBlocksUiElement=a.hasChildBlocksUiElement,this._creatableByUser=a.creatableByUser,this._deletableByUser=a.deletableByUser,this._editableByUser=a.editableByUser},getType:()=>"blockType",getId(){return this._id},getFieldLayoutId(){return this._fieldLayoutId},getSortOrder(){return this._sortOrder},getName(){return this._name},getHandle(){return this._handle},getDescription(){return this._description},getEnabled(){return this._enabled},getMinBlocks(){return this._minBlocks},getMaxBlocks(){return this._maxBlocks},getMinSiblingBlocks(){return this._minSiblingBlocks},getMaxSiblingBlocks(){return this._maxSiblingBlocks},getMinChildBlocks(){return this._minChildBlocks},getMaxChildBlocks(){return this._maxChildBlocks},getGroupChildBlockTypes(){return this._groupChildBlockTypes},getChildBlocks(){return this._childBlocks},getTopLevel(){return this._topLevel},getTabNames(){return this._tabNames},getTabs(){return null!==this._tabs?Array.from(this._tabs):null},async loadTabs(){if(null!==this._tabs)return;const t={namespace:l.toFieldName(),blocks:[{collapsed:!1,enabled:!0,level:1,type:this._id}]},e=await a().sendActionRequest("POST","neo/input/render-blocks",{data:t});if(e.data.success){var n,i;const t=e.data.blocks[0].tabs;this._tabs=null!==(n=null===(i=t.tabNames)||void 0===i?void 0:i.map((e=>new h({name:e,uid:t.tabUids[e]}))))&&void 0!==n?n:[],this._html=t.html,this._js=t.js}},getHtml(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return this._replaceBlockIdPlaceholder(this._html,t)},getJs(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return this._replaceBlockIdPlaceholder(this._js,t)},getDefaultVisibleLayoutElements(){return function(t){for(var e=1;e1&&void 0!==arguments[1]?arguments[1]:null;return null!==e?t.replace(/__NEOBLOCK__/g,e):t},getChildBlockItems(t){const e=t.filter((t=>"group"===t.getType()||this.hasChildBlock(t.getHandle())));return e.filter(((t,n)=>{if("group"===t.getType()){const t=e[n+1];return t&&"group"!==t.getType()}return!0}))},isParent(){const t=this.getChildBlocks();return!0===t||"*"===t||Array.isArray(t)&&t.length>0},hasChildBlock(t){const e=this.getChildBlocks();return!0===e||"*"===e||Array.isArray(e)&&e.includes(t)},isValidChildBlock(t){return this.hasChildBlock(t.getBlockType().getHandle())},hasChildBlocksUiElement(){return this._hasChildBlocksUiElement},isCreatableByUser(){return this._creatableByUser},isDeletableByUser(){return this._deletableByUser},isEditableByUser(){return this._editableByUser}}),_={id:-1,sortOrder:0,alwaysShowDropdown:null,name:""},f=s().Base.extend({init(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t=Object.assign({},_,t),this._id=0|t.id,this._sortOrder=0|t.sortOrder,this._alwaysShowDropdown=t.alwaysShowDropdown,this._name=t.name},getType:()=>"group",getId(){return this._id},getSortOrder(){return this._sortOrder},getName(){return this._name},getAlwaysShowDropdown(){return this._alwaysShowDropdown},isBlank(){return!this._name}});n().fn.insertAt=function(t,e){return this.each((function(){0===t?e.prepend(this):e.children().eq(t-1).after(this)}))};const k={namespace:[],blockType:null,tabs:null,id:null,level:1,buttons:null,enabled:!0,collapsed:!1,modified:!0,showButtons:!0,showBlockTypeHandle:!1},m={},v={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};function B(){let t=this.href||this.src;if(t){const e=t.indexOf("?");t=e<0?t:t.substr(0,e);const n=!Object.prototype.hasOwnProperty.call(m,t);return m[t]=1,n}return!0}function y(t){return t?t.replace(/[&<>"'/]/g,(t=>v[t])):""}function C(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:40;return(t=t||"").length>e?t.slice(0,e-3)+"...":t}const $=s().Base.extend({_templateNs:[],_field:null,_blockType:null,_initialised:!1,_expanded:!0,_enabled:!0,_modified:!0,_initialState:null,_forceModified:!1,_tabs:null,_html:null,_js:null,init(){var t,e,n,i;let s=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},o=arguments.length>1&&void 0!==arguments[1]&&arguments[1];var a,c;(s=Object.assign({},k,s),this._templateNs=l.parse(s.namespace),this._field=s.field,this._blockType=s.blockType,null!==s.tabs)?this._tabs=null!==(a=null===(c=s.tabs.tabNames)||void 0===c?void 0:c.map((t=>t instanceof h?t:new h({name:t,uid:s.tabs.tabUids[t]}))))&&void 0!==a?a:[]:this._tabs=null;this._html=null!==(t=null===(e=s.tabs)||void 0===e?void 0:e.html)&&void 0!==t?t:null,this._js=null!==(n=null===(i=s.tabs)||void 0===i?void 0:i.js)&&void 0!==n?n:null,this._id=s.id,this._enabled=s.enabled&&this._blockType.getEnabled(),this._initialEnabled=s.enabled,this._modified=s.modified,this._showButtons=s.showButtons,this._renderOldChildBlocksContainer=!s.blockType.hasChildBlocksUiElement(),this.$container=o?this._generateElement(s.showBlockTypeHandle):this._field.$container.find("[data-neo-b-id=".concat(this._id,"]"));const r=this.$container.find("[data-neo-b]");this.$bodyContainer=r.filter('[data-neo-b="'.concat(this._id,'.container.body"]')),this.$contentContainer=r.filter('[data-neo-b="'.concat(this._id,'.container.content"]')),this.$topbarContainer=r.filter('[data-neo-b="'.concat(this._id,'.container.topbar"]')),this.$topbarLeftContainer=r.filter('[data-neo-b="'.concat(this._id,'.container.topbarLeft"]')),this.$topbarRightContainer=r.filter('[data-neo-b="'.concat(this._id,'.container.topbarRight"]')),this.$handleContainer=r.filter('[data-neo-b="'.concat(this._id,'.container.handle"]')),this.$tabContainer=this.$contentContainer.children("[data-layout-tab]"),this.$menuContainer=r.filter('[data-neo-b="'.concat(this._id,'.container.menu"]')),this.$previewContainer=r.filter('[data-neo-b="'.concat(this._id,'.container.preview"]')),this.$settingsButton=r.filter('[data-neo-b="'.concat(this._id,'.button.actions"]')),this.$togglerButton=r.filter('[data-neo-b="'.concat(this._id,'.button.toggler"]')),this.$enabledInput=r.filter('[data-neo-b="'.concat(this._id,'.input.enabled"]')),this.$levelInput=r.filter('[data-neo-b="'.concat(this._id,'.input.level"]')),this.$collapsedInput=r.filter('[data-neo-b="'.concat(this._id,'.input.collapsed"]')),this.$status=r.filter('[data-neo-b="'.concat(this._id,'.status"]')),this.$sortOrder=r.filter('[data-neo-b="'.concat(this._id,'.sortOrder"]')),this.$form=this.$container.closest("form"),this.resetButtons(s.buttons);let d=!1;if(this._blockType)for(const t of this._blockType.getTabNames()){const e='[data-neo-b-info="'.concat(t,'"]');this.$tabContainer.filter(e).find("ul.errors").length>0&&(d=!0,this.$tabButton.filter(e).addClass("error"))}this.setLevel(s.level),this.toggleExpansion(!!d||!s.collapsed,!1,!1),this.toggleShowButtons(this._showButtons),this.addListener(this.$topbarContainer,"dblclick","@doubleClickTitle"),this.$container.data("block",this)},_generateElement(){var t;let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];l.enter(this._templateNs);const i=l.toFieldName(),s=l.toString("-");l.leave();const o=this._blockType,c=null!==(t=this._tabs)&&void 0!==t?t:o.getTabs(),r=c.length>0,d=o.isParent(),h="".concat(o.getName()," ").concat(a().t("neo","Actions")),u="neoblock-action-menu-".concat(this._id),p="".concat(o.getName()," ").concat(a().t("neo","Tabs")),b="neoblock-tabs-menu-".concat(this._id),g="".concat(this._templateNs[0],"[").concat(this._templateNs.slice(1,this._templateNs.length-2).join("]["),"][sortOrder]"),_=[];if(_.push('\n
\n \n \n \n ')),isNaN(parseInt(this._id))&&_.push('\n ')),_.push('\n
\n
\n
\n
\n
\n
\n ').concat(o.getName(),'\n
\n
\n  \n
\n
\n
\n
')),(r||d)&&_.push('\n
')),c.length>1){_.push('\n
'));for(let t=0;t').concat(n,""))}_.push('\n
\n
\n \n \n
")}_.push('\n
\n \n \n
\n \n
\n
\n
')),(r||d)&&(_.push('\n
')),r&&_.push('\n
\n ').concat(this.getHtml(),"\n
")),d&&this._renderOldChildBlocksContainer&&_.push('\n
\n
\n
\n \n \n
")),_.push("\n
")),d&&_.push('\n
')),_.push('\n
');const f=n()(_.join(""));return e&&n()("
").addClass("ni_block_topbar_item handle").prop("data-neo-b","".concat(this._id,".container.handle")).append(a().ui.createCopyTextBtn({id:"".concat(s,"-").concat(o.getHandle(),"-attribute"),class:["code","small","light"],value:o.getHandle()})).insertAfter(f.find(".ni_block_topbar_item.title")),f},initUi(){var t;let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];if(!this._initialised){if(this.$foot=n()(this.getJs()).filter(B),s().$bod.append(this.$foot),e&&a().initUiElements(this.$contentContainer),this.$form=this.$container.closest("form"),this.initTabs(),this._settingsMenu=this.$settingsButton.data("trigger")||new(s().DisclosureMenu)(this.$settingsButton),this._settingsMenu.on("show",(()=>{this._field.getBlocks().filter((t=>t.$container.hasClass("active"))).forEach((t=>t.toggleSettingsMenu(!1))),this.$container.addClass("active")})),this._settingsMenu.on("hide",(()=>this.$container.removeClass("active"))),this.$menuContainer=this._settingsMenu.$container,this.addListener(this.$menuContainer.find("[data-action]"),"click",this._handleActionClick),this.addListener(this.$menuContainer.find("[data-action]"),"keydown",this._handleActionKeydown),this.toggleEnabled(this._initialEnabled),this._initialised=!0,null===(t=this._buttons)||void 0===t||t.initUi(),s().requestAnimationFrame((()=>this.updateResponsiveness())),this.$container.on("mousedown",".matrixblock",(function(t){n()(this).addClass("neo-matrixblock")})),this.$container.hasClass("has-errors")&&this.$container.parents(".ni_child-blocks-ui-element").each(((t,e)=>{const i=n()(e).parent(),s=i.closest(".ni_block").data("block"),o=i.index();s.$tabButton.filter(".tab").eq(o).add(s.$tabButton.filter(":not(.tab)").eq(o)).add(s.$container.find("> .ni_block_topbar .tabs_btn")).addClass("has-errors").append(''))})),!this.isNew()){this._initialState={enabled:this._enabled,level:this._level,content:this._getPostData()};const t=()=>this._detectChange(),e=new window.MutationObserver((()=>{setTimeout(t,200),this.getBlockType().isEditableByUser()||this.$container.hasClass("is-disabled-for-user")||this.$container.addClass("is-disabled-for-user")}));e.observe(this.$container[0],{attributes:!0,childList:!0,characterData:!0,subtree:!0}),this.$contentContainer.on("propertychange change click","input, textarea, select, div.redactor-in",t),this.$contentContainer.on("paste input keyup",'input:not([type="hidden"]), textarea, div.redactor-in',t),this._detectChangeObserver=e,this.$menuContainer.find('[data-action="copy"], [data-action="paste"], [data-action="duplicate"]').parent().toggleClass("hidden",!this._blockType.getEnabled())}this.$contentContainer,a().CpFieldInspectPlugin&&a().CpFieldInspectPlugin.addFieldLinks(),this.trigger("initUi")}},initTabs(){const t=this.$container.find("[data-neo-b]");this.$tabsButton=t.filter('[data-neo-b="'.concat(this._id,'.button.tabs"]')),this.$tabsContainer=t.filter('[data-neo-b="'.concat(this._id,'.container.tabs"]')),this.$tabButton=t.filter('[data-neo-b="'.concat(this._id,'.button.tab"]')),this.$tabContainer=this.$contentContainer.children("[data-layout-tab]"),this._tabsMenu=this.$tabsButton.data("trigger")||new(s().DisclosureMenu)(this.$tabsButton),this._tabsMenu.on("show",(()=>this.$container.addClass("active"))),this._tabsMenu.on("hide",(()=>this.$container.removeClass("active"))),this.$tabButton=this.$tabButton.add(this._tabsMenu.$container.find('[data-neo-b="'.concat(this._id,'.button.tab"]'))),this.addListener(this.$tabButton,"click",this["@setTab"]),this.addListener(this.$tabButton,"keydown",this._handleTabKeydown)},getHtml(){return null!==this._html?this._html.replace(/__NEOBLOCK__/g,this._id):this._blockType.getHtml(this._id)},getJs(){return null!==this._js?this._js.replace(/__NEOBLOCK__/g,this._id):this._blockType.getJs(this._id)},destroy(){this._initialised&&(this.$foot.remove(),clearInterval(this._detectChangeInterval),this._detectChangeObserver&&this._detectChangeObserver.disconnect(),this.trigger("destroy"))},getBlockType(){return this._blockType},getId(){return this._id},getDuplicatedBlockId(){var t,e;return null!==(t=null===(e=this.$form.data("elementEditor"))||void 0===e?void 0:e.duplicatedElements[this._id])&&void 0!==t?t:this._id},isTopLevel(){return 1===this._level},getLevel(){return this._level},setLevel(t){this._level=0|t,this.$levelInput.val("0".concat(this._level)),this.$container.toggleClass("is-level-odd",!!(this._level%2)),this.$container.toggleClass("is-level-even",!(this._level%2))},setModified(t){this._modified=t},getButtons(){return this._buttons},getSiteId(){if(!this._siteId){const t=this.$form.find('input[name="siteId"]');this._siteId=t.val()}return this._siteId},getContent(){const t=this._getPostData(),e={},i=(t,i)=>{let s=e;for(let e=0;e0&&void 0!==arguments[0]?arguments[0]:null;null!==(t=e)&&void 0!==t||(e=this._field.getBlocks());const n=this.getLevel();let i=e.indexOf(this),s=null;if(i>=0&&n>1)for(;null===s&&i>0;){const t=e[--i];t.getLevel()===n-1&&(s=t)}return s},getChildren(){var t;let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;null!==(t=e)&&void 0!==t||(e=this._field.getBlocks());const i=this.getLevel();let s=e.indexOf(this);const o=[];if(s>=0){let t=e[++s];for(;t&&t.getLevel()>i;){const a=t.getLevel();(n?a>i:a===i+1)&&o.push(t),t=e[++s]}}return o},getSiblings(){var t;let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return null!==(t=e)&&void 0!==t||(e=this._field.getBlocks()),this.isTopLevel()?e.filter((t=>t.isTopLevel())):this.getParent(e).getChildren(e)},getField(){return this._field},updatePreview(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;t="boolean"==typeof t&&t;const e=this.$childrenContainer.find(".field"),i=this.$contentContainer.find(".field").add(e),o=[];i.each((function(){const e=n()(this),i=e.children(".input"),l=e.data("type"),c=e.children(".heading").children("label").text();if(null===l)return;let r=!1;switch(l){case"craft\\fields\\Assets":{const e=[],s=i.find(".element");s.each((function(){const i=n()(this),o=i.find(".elementthumb");let a=o.children("img").prop("srcset");if(a||(a=o.data("srcset")),e.push('')),!t&&1===s.length){const t=i.find(".title").text();e.push(y(C(t)))}})),r=e.join(" ")}break;case"craft\\fields\\Categories":case"craft\\fields\\Entries":case"craft\\fields\\Tags":case"craft\\fields\\Users":{const t=[];i.find(".element").each((function(){const e=n()(this).find(".title, .label").eq(0).text();t.push(y(C(e)))})),r=t.join(", ")}break;case"craft\\fields\\Checkboxes":{const t=[];i.find('input[type="checkbox"]').each((function(){if(this.checked){const e=n()(this).prop("id"),s=i.find('label[for="'.concat(e,'"]')).text();t.push(y(C(s)))}})),r=t.join(", ")}break;case"craft\\fields\\Color":{const t=i.find('input[type="color"]').val(),e=i.find('input[type="text"]').val(),n=i.find("div.colorhex").text();let s=null;s=t&&e?"background-color: ".concat(t):!t&&e?"background-color: ".concat(e):n?"background-color: ".concat(n):"background-image: repeating-linear-gradient(-45deg, transparent, transparent 2px, #777 2px, #777 3px)",r='
')}break;case"craft\\fields\\Date":{const t=y(i.find(".datewrapper input").val()),e=y(i.find(".timewrapper input").val());r=t&&e?t+" "+e:t||e}break;case"craft\\fields\\Dropdown":r=y(C(i.find("select").children(":selected").text()));break;case"craft\\fields\\Email":r=y(C(i.children('input[type="email"]').val()));break;case"craft\\fields\\Lightswitch":{const t=!!i.find("input").val();r='')+y(C(c))}break;case"craft\\fields\\MultiSelect":case"ttempleton\\categorygroupsfield\\fields\\CategoryGroupsField":{const t=[];i.find("select").children(":selected").each((function(){t.push(n()(this).text())})),r=y(C(t.join(", ")))}break;case"craft\\fields\\Number":case"craft\\fields\\PlainText":r=y(C(i.children('input[type="text"], textarea').val()));break;case"craft\\fields\\RadioButtons":r=y(C(i.find('input[type="radio"]:checked').closest("label").text()));break;case"craft\\redactor\\Field":case"spicyweb\\tinymce\\fields\\TinyMCE":r=y(C(a().getText(i.find("textarea").val())));break;case"craft\\ckeditor\\Field":r=y(C(a().getText(i.find('[role="textbox"]').html())));break;case"craft\\fields\\Url":r=y(C(i.children('input[type="url"]').val()));break;case"craft\\fields\\Matrix":case"verbb\\supertable\\fields\\SuperTableField":{const t=e.find(".field").find('input[type!="hidden"], select, textarea, .label'),i=[];t.each((function(){const t=n()(this);let e=null;t.is("input, textarea")?e=a().getText(s().getInputPostVal(t)):t.is("select")?e=t.find("option:selected").text():t.hasClass("label")&&(e=t.text()),e&&i.push(C(e))})),r=y(i.join(", "))}break;case"typedlinkfield\\fields\\LinkField":case"presseddigital\\linkit\\fields\\LinkitField":{const t=[],e=i.find("select").children(":selected").first(),n=i.find('.linkfield--typeOption:not(.hidden), [class^="linkit--"]:not(.hidden)'),s=n.find('input[type!="hidden"]').val(),o=n.find(".element"),a=i.find('.field[id*="customText"] input, .linkit--customText input').val();if(t.push(C(e.text())),s&&t.push(C(s)),o.length>0){const e=o.find(".title, .label").eq(0).text();t.push(C(e))}a&&t.push(C(a)),r=y(t.join(", "))}break;case"luwes\\codemirror\\fields\\CodeMirrorField":{const t=[];e.find(".CodeMirror-line > span").each((function(){t.push(n()(this).text())})),r=y(t.join(" "));break}case"rias\\positionfieldtype\\fields\\Position":r=y(i.find(".btn.active").prop("title"));break;case"wrav\\oembed\\fields\\OembedField":r=y(C(i.children("input").val()))}r&&o.length<10&&o.push('',r,"")})),this.$previewContainer.html(o.join(""))},isNew(){return/^new/.test(this.getId())},isSelected(){return this.$container.hasClass("is-selected")},collapse(t,e){this.toggleExpansion(!1,t,e)},expand(t,e){this.toggleExpansion(!0,t,e)},toggleExpansion(t,e,n){if(t="boolean"==typeof t?t:!this._expanded,e="boolean"!=typeof e||e,n=!s().prefersReducedMotion()&&("boolean"!=typeof n||n),t!==this._expanded){this._expanded=t,this._expanded||this.updatePreview();const i=this.$menuContainer.find('[data-action="expand"]').parent(),s=this.$menuContainer.find('[data-action="collapse"]').parent();this.$collapsedInput.val(this._expanded?"":"1"),this.$container.toggleClass("is-expanded",this._expanded).toggleClass("is-collapsed",!this._expanded),i.toggleClass("hidden",this._expanded),s.toggleClass("hidden",!this._expanded),this.$previewContainer.toggleClass("hidden",this._expanded);const o={opacity:1,height:(0|this.$contentContainer.outerHeight())+(0|this.$childrenContainer.outerHeight())},a={opacity:0,height:0},l={opacity:"",height:""};n?this.$bodyContainer.css(this._expanded?a:o).velocity(this._expanded?o:a,"fast",(t=>{this._expanded&&this.$bodyContainer.css(l)})):this.$bodyContainer.css(this._expanded?l:a),e&&this.saveExpansion(),this.trigger("toggleExpansion",{expanded:this._expanded})}},isExpanded(){return this._expanded},saveExpansion(){if(!this.isNew()){var t;const e=null!==(t=this.$form.data("elementEditor"))&&void 0!==t&&t.settings.isProvisionalDraft?this.getDuplicatedBlockId():this.getId(),n={expanded:this.isExpanded()?1:0,blockId:e,siteId:this.getSiteId()};a().queue.push((()=>new Promise(((t,e)=>{a().sendActionRequest("POST","neo/input/save-expansion",{data:n}).then(t).catch(e)}))))}},disable(){this.toggleEnabled(!1)},enable(){this.toggleEnabled(!0)},toggleEnabled(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:!this._enabled;const e=this._enabled!==t;this._enabled=t;const n=this._blockType.getEnabled(),i=this._enabled&&n,s=this.$menuContainer.find('[data-action="enable"]').parent(),o=this.$menuContainer.find('[data-action="disable"]').parent();this.$container.toggleClass("is-enabled",i).toggleClass("is-disabled",!i),this.$status.toggleClass("hidden",i),s.toggleClass("hidden",this._enabled||!n),o.toggleClass("hidden",!this._enabled||!n),this.$enabledInput.val(this._enabled?"1":""),e&&this.trigger("toggleEnabled",{enabled:this._enabled})},isEnabled(){return this._enabled},toggleShowButtons(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:!this._showButtons;this.$buttonsContainer.toggleClass("hidden",!t),this.$childrenWarningsContainer.toggleClass("hidden",t)},selectTab(t){this.$tabButton.removeClass("is-selected"),this.$tabContainer.addClass("hidden");const e=this.$tabButton.filter('[data-neo-b-info="'.concat(t,'"]')).addClass("is-selected"),n=e.attr("data-neo-b-tabuid"),i=this.$tabContainer.filter('[data-layout-tab="'.concat(n,'"]')).removeClass("hidden");this.$tabsButton.text(t),a().ElementThumbLoader.retryAll(),this.trigger("selectTab",{tabName:t,$tabButton:e,$tabContainer:i})},updateResponsiveness(){var t,e;const n=s().isMobileBrowser();null!==(t=this._topbarLeftWidth)&&void 0!==t||(this._topbarLeftWidth=this.$topbarLeftContainer.width()-(this._expanded?0:this.$previewContainer.width())-(n?this.$handleContainer.width():0)),null!==(e=this._topbarRightWidth)&&void 0!==e||(this._topbarRightWidth=this.$topbarRightContainer.width());const i=this.$topbarContainer.width()"string"==typeof t?this._field.getBlockTypeByHandle(t):t)).filter((t=>void 0!==t))),s=s.filter((t=>t.isCreatableByUser())),this.updateMenuStates(this._field.getName(),n,this._field.getMaxBlocks(),!0,s,1===this._level?this._field.getMaxTopBlocks():0)},updateMenuStates(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,s=arguments.length>4&&void 0!==arguments[4]&&arguments[4],o=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;i="boolean"!=typeof i||i;const a=!s||0===s.length,l=this.getBlockType(),c=e.filter((t=>t.getBlockType().getHandle()===l.getHandle())),r=l.getMaxBlocks(),d=this.getSiblings(e),h=e.filter((t=>t.isTopLevel())).length,u=n>0&&e.length>=n||o>0&&h>=o||!i,p=u||a,b=r>0&&c.length>=r;let g=u||b;const _=JSON.parse(window.localStorage.getItem("neo:copy:".concat(t))||"{}");let f=u||!_.blocks||!_.field||_.field!==t;const k=this.getParent(e);if((!f||!g)&&k){const t=k.getBlockType().getMaxChildBlocks();if(t>0){var m,v;const n=k.getChildren(e).length,i=null!==(m=null===(v=_.blocks)||void 0===v?void 0:v.length)&&void 0!==m?m:0;f||(f=n+i>t),g||(g=n>=t)}}if(!f||!g){const t=this.getBlockType().getMaxSiblingBlocks();if(t>0){const e=t=>Object.prototype.hasOwnProperty.call(t,"type")?t.type===this.getBlockType().getId():"function"==typeof t.getBlockType&&t.getBlockType().getHandle()===this.getBlockType().getHandle(),n=d.filter(e,this).length,i=_.blocks?_.blocks.filter(e,this).length:0;f||(f=n+i>t),g||(g=n>=t)}}if(!f){const t=e.reduce(((t,e)=>{const n=e.getBlockType(),i=n.getId(),s=t[i]||{blockType:n,count:0};return s.count++,t[i]=s,t}));for(const e of _.blocks){const n=t[e.type];if(n){const t=n.blockType,e=n.count,i=t.getMaxBlocks();f||(f=i>0&&e>=i)}1===e.level&&(f||(f=!s.find((t=>t.getId()===e.type))))}}const B=d.indexOf(this),y=B<=0,C=[-1,d.length-1].includes(B);this.$menuContainer.find('[data-action="moveUp"]').parent().toggleClass("hidden",y),this.$menuContainer.find('[data-action="moveDown"]').parent().toggleClass("hidden",C),this.$menuContainer.find('[data-action="duplicate"]').toggleClass("disabled",g),a?(this.$menuContainer.find('[data-action="add"]').parent().toggleClass("hidden",p),this.$menuContainer.find('[data-action="paste"]').parent().toggleClass("hidden",f)):(this.$menuContainer.find('[data-action="add"]').toggleClass("disabled",p),this.$menuContainer.find('[data-action="paste"]').toggleClass("disabled",f)),this.$menuContainer.children("hr").toggleClass("hidden",0===this.$menuContainer.children("ul:last-child").children("li:not(.hidden)").length)},resetButtons(t){this.$blocksContainer=this.$container.find('[data-neo-b="'.concat(this._id,'.container.blocks"]')),this.$buttonsContainer=this.$container.find('[data-neo-b="'.concat(this._id,'.container.buttons"]')),this.$childrenContainer=this.$container.find('[data-neo-b="'.concat(this._id,'.container.children"]')),this.$childrenWarningsContainer=this.$container.find('[data-neo-b="'.concat(this._id,'.container.childrenWarnings"]')),this.$collapsedChildrenContainer=this.$container.find('[data-neo-b="'.concat(this._id,'.container.collapsedChildren"]')),this._buttons=null!=t?t:new this._field.ButtonClass({$ownerContainer:this.$container,field:this._field,items:this._blockType.getChildBlockItems(this._field.getItems()),maxBlocks:this._field.getMaxBlocks()}),this._buttons&&(this._buttons.on("newBlock",(t=>this.trigger("newBlock",Object.assign(t,{level:this.getLevel()+1})))),this.$buttonsContainer.append(this._buttons.$container),null===this._buttons.$ownerContainer&&(this._buttons.$ownerContainer=this.$container),this._initialised&&this._buttons.initUi())},namespaceId(t){l.enter(this._templateNs);const e="".concat(l.toString("-"),"-").concat(a().formatInputId(t));return l.leave(),e},toggleSettingsMenu(t){var e;null!==(e=t)&&void 0!==e||(t=!this._settingsMenu.isExpanded()),t?this._settingsMenu.show():this._settingsMenu.hide()},_handleActionClick(t){t.preventDefault(),this["@settingSelect"](t)},_handleActionKeydown(t){t.keyCode===s().SPACE_KEY&&(t.preventDefault(),this["@settingSelect"](t))},_handleTabKeydown(t){t.keyCode===s().SPACE_KEY&&this["@setTab"](t)},_detectChange(){const t=this.$form.data("elementEditor");if(null!=t&&t.enableAutosave&&t.settings.draftId&&(this.setModified(!0),this._forceModified=!0),!this._forceModified){const t=this._initialState,e=this._getPostData(),n=!a().compare(e,t.content,!1)||t.enabled!==this._enabled||t.level!==this._level;n!==this._modified&&this.setModified(n)}this.trigger("change")},_getPostData(){const t=s().getPostData(this.$contentContainer),e=Object.keys(t).filter((t=>!t.startsWith("fields[".concat(this._field.getName(),"][blocks][").concat(this._id,"]"))));for(const n of e)delete t[n];return t},"@settingSelect"(t){this._settingsMenu.hide();const e=n()(t.target);if(!e.hasClass("disabled"))switch(e.attr("data-action")){case"collapse":this.collapse();break;case"expand":this.expand();break;case"disable":this.disable(),this.collapse();break;case"enable":this.enable(),this.expand();break;case"moveUp":this.trigger("moveUpBlock",{block:this});break;case"moveDown":this.trigger("moveDownBlock",{block:this});break;case"delete":this.trigger("removeBlock",{block:this});break;case"add":this.trigger("addBlockAbove",{block:this});break;case"copy":this.trigger("copyBlock",{block:this});break;case"paste":this.trigger("pasteBlock",{block:this});break;case"duplicate":this.trigger("duplicateBlock",{block:this})}},"@doubleClickTitle"(t){t.preventDefault();const e=n()(t.target).parent(),i=e.closest(this.$topbarLeftContainer).length>0,s=e.closest(this.$topbarRightContainer).length>0;var o,a;i||s||(null===(o=this.$form.data("elementEditor"))||void 0===o||o.pause(),this.toggleExpansion(),null===(a=this.$form.data("elementEditor"))||void 0===a||a.resume())},"@setTab"(t){t.preventDefault(),this._tabsMenu.hide();const e=n()(t.currentTarget).attr("data-neo-b-info");this.selectTab(e)}},{_totalNewBlocks:0,getNewId(){return"new".concat(this._totalNewBlocks++)}});function T(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=typeof t||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e||"default");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==typeof e?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}const x={$ownerContainer:null,blockTypes:[],groups:[],items:null,maxBlocks:0,maxTopBlocks:0,blocks:null};class w{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};T(this,"_blockTypes",[]),T(this,"_blockTypeGroups",[]),t=Object.assign({},x,t),t.items?(this._items=Array.from(t.items),this._blockTypes=this._items.filter((t=>"blockType"===t.getType())),this._blockTypeGroups=this._items.filter((t=>"group"===t.getType()))):(this._blockTypes=Array.from(t.blockTypes),this._blockTypeGroups=Array.from(t.groups),this._items=[...this._blockTypes,...this._blockTypeGroups].sort(((t,e)=>t.getSortOrder()-e.getSortOrder()))),this.$ownerContainer=t.$ownerContainer,this._field=t.field,this._maxBlocks=0|t.maxBlocks,this._maxTopBlocks=0|t.maxTopBlocks,this.$container=this.renderButtons();const e=this.$container.find("[data-neo-bn]");this.$buttonsContainer=e.filter('[data-neo-bn="container.buttons"]'),this.$menuContainer=e.filter('[data-neo-bn="container.menu"]'),this.$blockButtons=e.filter('[data-neo-bn="button.addBlock"]'),this.$groupButtons=e.filter('[data-neo-bn="button.group"]'),t.blocks&&this.updateState(t.blocks)}renderButtons(){var t;const e=null!==(t=this.$ownerContainer)&&void 0!==t&&t.hasClass("ni_block")?this.$ownerContainer.attr("class").match(/ni_block--([^\s]+)/)[1]:null,i=null!==e&&!this.getField().getBlockTypeByHandle(e).getGroupChildBlockTypes(),s=[];let o=[],l=null,c=!0;const r=()=>{s.push('\n
\n ').concat(l.getName(),'\n
\n ")),c=!1,o=[]};s.push('\n
\n
');for(let t=0;t\n ').concat(e.getName(),"\n ")):(s.push("\n \n ').concat(e.getName(),"\n ")),c=!1)}else"group"===n&&(null!==l&&o.length>0&&r(),l=e.isBlank()||!e.getAlwaysShowDropdown()&&(t+2>=this._items.length||"group"===this._items[t+2].getType())||i?null:e)}null!==l&&o.length>0&&r(),s.push('\n
\n ")),l=null;let d=!1;s.push('\n \n
"),n()(s.join(""))}getField(){return this._field}getBlockTypes(){return Array.from(this._blockTypes)}getBlockTypeGroups(){return Array.from(this._blockTypeGroups)}getBlockTypeByButton(t){const e=t.attr(w.BUTTON_INFO);return this._blockTypes.find((t=>t.getHandle()===e))}updateState(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;e="boolean"!=typeof e||e;const s=this,o=t.filter((t=>t.isTopLevel())).length,a=this._maxBlocks>0&&t.length>=this._maxBlocks,l=this._maxTopBlocks>0&&o>=this._maxTopBlocks,c=a||l||!e;this.$blockButtons.each((function(){const e=n()(this);let o=c;if(!o){const n=t=>t.getBlockType().getHandle()===a.getHandle(),a=s.getBlockTypeByButton(e),l=t.filter(n),c=a.getMaxBlocks(),r=a.getMaxSiblingBlocks(),d=null!==i?i.getChildren(t).filter(n):t.filter((t=>t.isTopLevel()&&t.getBlockType().getHandle()===a.getHandle()));o||(o=c>0&&l.length>=c||r>0&&d.length>=r)}e.toggleClass("disabled",o)})),this.$groupButtons.each((function(){const t=n()(this),e=t.data("menubtn");let i=c;if(!i&&e){const t=e.menu.$options;i=t.length===t.filter(".disabled").length}t.toggleClass("disabled",i)}))}updateResponsiveness(){}}T(w,"BUTTON_INFO","data-neo-bn-info");const E=s().Base.extend({init(t){this._buttons=t,this.$container=this._buttons.$container,this.addListener(this._buttons.$blockButtons,"activate","@newBlock")},initUi(){this._buttons.initUi()},getBlockTypes(){return this._buttons.getBlockTypes()},getGroups(){return this._buttons.getBlockTypeGroups()},getMaxBlocks(){return this._maxBlocks},updateButtonStates(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;this._buttons.updateState(t,e,n)},updateState(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;this._buttons.updateState(t,e,n)},updateResponsiveness(){this._buttons.updateResponsiveness()},getBlockTypeByButton(t){return this._buttons.getBlockTypeByButton(t)},"@newBlock"(t){const e=n()(t.currentTarget).attr(w.BUTTON_INFO),i=this._buttons.getBlockTypes().find((t=>t.getHandle()===e));this.trigger("newBlock",{blockType:i})}});class I extends w{initUi(){if(n()(".menubtn",this.$container).menubtn(),this.updateResponsiveness(),0===this.$buttonsContainer.children().length){const t=this.$container.parent(),e=t.parent(),n=e.children(".ni_blocks");0===n.length||0===n.children().length?e.addClass("hidden"):t.addClass("hidden")}}updateResponsiveness(){this._buttonsContainerWidth||(this._buttonsContainerWidth=this.$buttonsContainer.width());const t=this.$container.width()0&&void 0!==arguments[0]?arguments[0]:{};this.base(new I(t))}});class N extends w{renderButtons(){var t;const e=null!==(t=this.$ownerContainer)&&void 0!==t&&t.hasClass("ni_block")?this.$ownerContainer.attr("class").match(/ni_block--([^\s]+)/)[1]:null,i=null!==e&&!this.getField().getBlockTypeByHandle(e).getGroupChildBlockTypes(),s=[];let o=null;s.push('\n
\n ")),o=null;let l=!1;s.push('\n \n
"),n()(s.join(""))}initUi(){if(n()(".menubtn",this.$container).menubtn(),this.updateResponsiveness(),0===this.$buttonsContainer.find('[data-neo-bn="button.addBlock"]').length){const t=this.$container.parent(),e=t.parent(),n=e.children(".ni_blocks");0===n.length||0===n.children().length?e.addClass("hidden"):t.addClass("hidden")}}}const S=E.extend({init(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.base(new N(t))}});class L extends w{renderButtons(){var t;const e=null!==(t=this.$ownerContainer)&&void 0!==t&&t.hasClass("ni_block")?this.$ownerContainer.attr("class").match(/ni_block--([^\s]+)/)[1]:null,i=null!==e&&!this.getField().getBlockTypeByHandle(e).getGroupChildBlockTypes(),s=[];let o=null;s.push('\n
\n "));let l=!1;s.push('\n \n
"),n()(s.join(""))}initUi(){if(n()(".menubtn",this.$container).menubtn(),this.updateResponsiveness(),0===this.$buttonsContainer.find('[data-neo-bn="button.addBlock"]').length){const t=this.$container.parent(),e=t.parent(),n=e.children(".ni_blocks");0===n.length||0===n.children().length?e.addClass("hidden"):t.addClass("hidden")}}}const M=E.extend({init(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.base(new L(t))}}),D={name:null,namespace:[],blockTypes:[],groups:[],blocks:[],inputId:null,maxBlocks:0,maxTopBlocks:0,minLevels:0,maxLevels:0,ownerId:null},P=s().Base.extend({_templateNs:[],_name:null,_siteId:null,_visibleLayoutElements:{},_newBlockId:0,init(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t=Object.assign({},D,t),this._templateNs=l.parse(t.namespace),this._blockTypes=[],this._groups=t.groups.map((t=>new f(t))),this._blocks=[],this._id=t.id,this._name=t.name,this._minBlocks=t.minBlocks,this._maxBlocks=t.maxBlocks,this._maxTopBlocks=t.maxTopBlocks,this._minLevels=t.minLevels,this._maxLevels=t.maxLevels,this._ownerId=t.ownerId,this._showBlockTypeHandles=t.showBlockTypeHandles;const e=!s().prefersReducedMotion();switch(this._$spinner=n()('
'.concat(e?'
':a().t("neo","Loading"),"
")),t.newBlockMenuStyle){case"grid":this.ButtonClass=S;break;case"list":this.ButtonClass=M;break;default:this.ButtonClass=O}const i=n()('[name="setId"], [name="entryId"], [name="categoryId"]');i.length&&(this._ownerId=i.val()),this.$container=n()("#"+t.inputId);const o={};this._groups.forEach((t=>{o[t.getId()]=!0}));const c={};for(const e of t.blockTypes)if(null===e.groupId||void 0!==o[e.groupId]){const t=new g(e);this._blockTypes.push(t),c[t.getHandle()]=t}this.$form=this.$container.closest("form"),this._siteId=this.$form.find('input[name="siteId"]').val();const d=this.$container.find("[data-neo]");if(this.$blocksContainer=d.filter('[data-neo="container.blocks"]'),this.$buttonsContainer=d.filter('[data-neo="container.buttons"]'),this._buttons=new this.ButtonClass({$ownerContainer:this.$container,field:this,blockTypes:this.getBlockTypes(!0),groups:this.getGroups(),maxBlocks:this.getMaxBlocks(),maxTopBlocks:this.getMaxTopBlocks()}),this.$buttonsContainer.append(this._buttons.$container),this._buttons.on("newBlock",(t=>this["@newBlock"](t))),this._buttons.initUi(),this._blockSort=new r({container:this.$blocksContainer,handle:'[data-neo-b$=".button.move"]',maxTopBlocks:this.getMaxTopBlocks(),filter:()=>this._blockSort.$targetItem.hasClass("is-selected")?this.blockSelect.getSelectedItems():this._blockSort.$targetItem,collapseDraggees:!0,magnetStrength:4,helperLagBase:1.5,helperOpacity:.9,onDragStop:()=>{this._updateBlockOrder(),this._updateButtons()}}),this.blockSelect=new(s().Select)(this.$blocksContainer,null,{multi:!0,vertical:!0,handle:'> .ni_block_topbar [data-neo-b$=".select"]',checkboxMode:!0,selectedClass:"is-selected sel"}),this.$blocksContainer.find(".ni_block").each(((t,e)=>{const i=n()(e),s={};s.id=i.attr("data-neo-b-id"),s.sortOrder=t,s.collapsed=i.hasClass("is-collapsed"),s.enabled=!!i.find('[data-neo-b="'.concat(s.id,'.input.enabled"]')).val(),s.level=parseInt(i.find('[data-neo-b="'.concat(s.id,'.input.level"]')).val()),s.field=this,s.namespace=[...this._templateNs,s.id];const o=i.find('[data-neo-b="'.concat(s.id,'.input.type"]')).val(),a=c[o];if(void 0===a)return void i.remove();s.blockType=a,s.showButtons=!this.atMaxLevels(s.level);const l=new $(s);l.initUi(!1),this._setBlockEvents(l),this._blocks.push(l),this._blockSort.addBlock(l),this.blockSelect.addItems(l.$container)})),this._updateBlockOrder(),this._updateBlockChildren(),this._updateButtons(),this._minBlocks>0){const t=this._minBlocks-this._blocks.length,e=this.getBlockTypes(!0);if(1===e.length&&t>0)for(let t=this._blocks.length;tthis._updateButtons())),this.addListener(this.$container,"resize",(()=>this.updateResponsiveness()));const h="function"==typeof this.$form.data("serializer")?this.$form.data("serializer")():this.$form.serialize();this.$form.data("initialSerializedValue",h),this._setMatrixClassErrors(),this._setBlockTypeClassErrors(),this._blocks.filter((t=>!t.isExpanded())).forEach((t=>t.updatePreview())),this._registerDynamicBlockConditions(),this.trigger("afterInit")},getName(){return this._name},updateResponsiveness(){var t;for(const t of this._blocks){var e;t.updateResponsiveness(),null===(e=t.getButtons())||void 0===e||e.updateResponsiveness()}this._buttons.updateResponsiveness(),null===(t=this._tempButtons)||void 0===t||t.updateResponsiveness()},addBlock(t){var e;let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,a=!(arguments.length>4&&void 0!==arguments[4])||arguments[4];null===(e=this.$form.data("elementEditor"))||void 0===e||e.pause();const l=this._blocks.length;n=n>=0?Math.max(0,Math.min(n,l)):l,o=!s().prefersReducedMotion()&&("boolean"!=typeof o||o);const c=n>0&&this._blocks[n-1],r=n{var e;if(a){const e=t.getBlockType(),s=e.getMinChildBlocks();if(s>0){let t=e.getChildBlocks();if("*"===t&&(t=this.getBlockTypes()),1===t.length){const e=this.getBlockTypeByHandle(t[0]);for(let t=0;ts().requestAnimationFrame((()=>{s().scrollContainerToElement(t.$container),d()})))):d(),this.trigger("addBlock",{block:t,index:n})},removeBlock(t){var e;let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;null===(e=this.$form.data("elementEditor"))||void 0===e||e.pause(),n=!s().prefersReducedMotion()&&("boolean"!=typeof n||n),i="boolean"==typeof i&&i;const o=this._findChildBlocks(this._blocks.indexOf(t));for(const t of o)this.removeBlock(t,!0,!0);t.off(".input"),this._blocks=this._blocks.filter((e=>e!==t)),this._blockSort.removeItems(t.$container),this.blockSelect.removeItems(t.$container),this._destroyTempButtons(),this._updateButtons();const a=()=>{var e;t.$container.remove(),this._updateBlockChildren(),null===(e=this.$form.data("elementEditor"))||void 0===e||e.resume()};n?t.$container.css({opacity:1,marginBottom:10}).velocity({opacity:0,marginBottom:i?10:-t.$container.outerHeight()},"fast",(t=>a())):a(),t.destroy(),this.trigger("removeBlock",{block:t})},_setBlockEvents(t){t.on("removeBlock.input",(e=>{this.getSelectedBlocks().length>1?window.confirm(a().t("neo","Are you sure you want to delete the selected blocks?"))&&this._blockBatch(t,(t=>this.removeBlock(t))):this.removeBlock(t)})),t.on("toggleEnabled.input",(e=>this._blockBatch(t,(t=>t.toggleEnabled(e.enabled))))),t.on("toggleExpansion.input",(e=>this._blockBatch(t,(t=>t.toggleExpansion(e.expanded))))),t.on("moveUpBlock.input",(e=>this._moveBlock(t,"up"))),t.on("moveDownBlock.input",(e=>this._moveBlock(t,"down"))),t.on("newBlock.input",(e=>this["@newBlock"](Object.assign(e,{index:this._getNextBlockIndex(t)})))),t.on("addBlockAbove.input",(t=>this["@addBlockAbove"](t))),t.on("copyBlock.input",(t=>this["@copyBlock"](t))),t.on("pasteBlock.input",(t=>this["@pasteBlock"](t))),t.on("duplicateBlock.input",(t=>this["@duplicateBlock"](t))),t.on("change.input",(()=>this.trigger("change",{block:t})))},_moveBlock(t,e){var n;let i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(!["up","down"].includes(e))return;null===(n=this.$form.data("elementEditor"))||void 0===n||n.pause();const o=t.getSiblings(this.getBlocks()),a=o.indexOf(t),l=a>0&&"up"===e,c=a{d.detach(),l?o[a-1].$container.before(d):o[a+1].$container.after(d)},u=()=>{var t;this._updateBlockOrder(),this._updateButtons(),null===(t=this.$form.data("elementEditor"))||void 0===t||t.resume()};r?d.css({opacity:1,marginBottom:10}).velocity({opacity:0,marginBottom:-d.outerHeight()},"fast",(t=>{h(),d.css({opacity:0,marginBottom:-d.outerHeight()}).velocity({opacity:1,marginBottom:10},"fast",(t=>{u(),s().requestAnimationFrame((()=>s().scrollContainerToElement(d)))}))})):(h(),u())},getBlockByElement(t){return this._blocks.find((e=>e.$container.is(t)))},getBlocks(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return t>0?this._blocks.filter((e=>e.getLevel()===t)):Array.from(this._blocks)},getBlockTypeById(t){return this._blockTypes.find((e=>e.getId()===t))},getBlockTypeByHandle(t){return this._blockTypes.find((e=>e.getHandle()===t))},getBlockTypes(t){return(t="boolean"==typeof t&&t)?this._blockTypes.filter((t=>t.getTopLevel())):Array.from(this._blockTypes)},getGroups(){return Array.from(this._groups)},getItems(){return[...this.getBlockTypes(),...this.getGroups()].sort(((t,e)=>t.getSortOrder()-e.getSortOrder()))},getMaxBlocks(){return this._maxBlocks},getMaxTopBlocks(){return this._maxTopBlocks},getMinLevels(){return this._minLevels},getMaxLevels(){return this._maxLevels},atMaxLevels(t){return this._maxLevels>0&&t+1>this._maxLevels},getSelectedBlocks(){const t=this.blockSelect.getSelectedItems();return this._blocks.filter((e=>e.$container.closest(t).length>0))},getCopiedBlocks(){const t=window.localStorage.getItem("neo:copy:".concat(this._name));if(!t)return[];const{blocks:e}=JSON.parse(t);return e},setVisibleElements(t,e){"string"==typeof e&&(e=JSON.parse(e));null!==this._blocks.find((e=>e.getId()===t))&&(this._visibleLayoutElements[t]=e)},_setMatrixClassErrors(){n()(".ni_block_body .matrix-field .input.errors").each((function(){const t=n()(this),e=t.closest(".ni_block_content_tab").data("neo-b-info"),i=t.closest(".ni_block").find('.tabs .tab[data-neo-b-info="'+e+'"]');i.length&&i.addClass("has-errors")}))},_setBlockTypeClassErrors(){const t=n()(".ni_block .tab.has-errors");t.each((function(){t.parents(".ni_block.is-collapsed").each((function(){n()(this).find("> .ni_block_topbar .title .blocktype").addClass("has-errors")}))}))},_updateBlockOrder(){const t=[];this.$blocksContainer.find(".ni_block").each(((e,n)=>{const i=this.getBlockByElement(n);t.push(i)})),this._blocks=t,this.trigger("updateBlockOrder"),this.trigger("change",{block:null})},_updateBlockChildren(){for(const t of this._blocks){const e=t.$blocksContainer.children(".ni_block"),n=Math.min(e.length,8),i=[];for(let t=0;t
');t.$collapsedChildrenContainer.html(i.join(""))}},_checkMaxChildren(t){if(!t)return!0;const e=t.getBlockType().getMaxChildBlocks();if(e>0){return this._findChildBlocks(t).length0&&void 0!==arguments[0]?arguments[0]:null;if(t=!s().prefersReducedMotion()&&("boolean"!=typeof t||t),this._tempButtons){const e=this._tempButtons;e.off("newBlock"),t?e.$container.css({opacity:1,marginBottom:10}).velocity({opacity:0,marginBottom:-e.$container.outerHeight()},"fast",(t=>e.$container.remove())):e.$container.remove(),this._tempButtons=null,this._tempButtonsBlock=null}},_findPrevBlockOnLevel(t,e){t instanceof $&&(t=this._blocks.indexOf(t));let n=this._blocks[--t],i=Number.MAX_VALUE;for(;n;){const s=n.getLevel();if(s1&&void 0!==arguments[1]?arguments[1]:null;t instanceof $&&(t=this._blocks.indexOf(t)),e="boolean"==typeof e&&e;const n=this._blocks[t];return n?n.getChildren(this._blocks,e):[]},_findParentBlock(t){t instanceof $&&(t=this._blocks.indexOf(t));const e=this._blocks,n=e[t];if(n){const i=n.getLevel();if(i>1){let s=t,o=n;for(;o&&o.getLevel()>=i;)o=e[--s];return o}}return null},_getNextBlockIndex(t){if(void 0===t)return 0;t instanceof $&&(t=this._blocks.indexOf(t));const e=this._findChildBlocks(t,!0),n=e[e.length-1];return(n?this._blocks.indexOf(n):t)+1},_registerDynamicBlockConditions(){setTimeout((()=>{const t=this.$form.data("elementEditor");null==t||t.on("update",(()=>{const e=t.settings.siteId,n={blocks:{},sortOrder:[],fieldId:this._id,ownerCanonicalId:this._ownerId,ownerDraftId:t.settings.draftId,isProvisionalDraft:t.settings.isProvisionalDraft,siteId:e},i={};this._blocks.forEach((t=>{var e;const s=t.$contentContainer.children("[data-layout-tab]:not(.hidden)").data("layout-tab");n.blocks[t.getDuplicatedBlockId()]={selectedTab:null!=s?s:null,visibleLayoutElements:null!==(e=this._visibleLayoutElements[t.getId()])&&void 0!==e?e:{}},n.sortOrder.push(t.getDuplicatedBlockId()),i[t.getDuplicatedBlockId()]=t.getId()})),a().queue.push((()=>new Promise(((e,s)=>{a().sendActionRequest("POST","neo/input/update-visible-elements",{data:n}).then((o=>{if(t.submittingForm)s(Error("Form being resaved"));else{for(const t in o.data.blocks){const e=this._blocks.find((e=>e.getId()===i[t]));this._updateVisibleElements(e,o.data.blocks[t],n.blocks[e.getDuplicatedBlockId()].selectedTabId)}e()}})).catch(s)}))))}))}),200)},_updateVisibleElements(t,e,i){var o,l;let c=n()();const r={};let d=!1;for(let o=0;o",{id:t.namespaceId(l.id),class:"flex-fields","data-id":l.id,"data-layout-tab":l.uid}),l.id!==i&&h.addClass("hidden"),h.appendTo(t.$contentContainer)),c=c.add(h);for(let e=0;e",{class:"hidden","data-layout-element":i.uid,"data-layout-element-placeholder":""});t.length?t.replaceWith(e):e.appendTo(h),d=!0}}}d&&this._updateButtons()}const h=t.$contentContainer.children("[data-layout-tab]").not(c).not('[data-layout-tab=""]');h.length&&(h.remove(),d=!0),c.filter(":not(.hidden)").length||c.first().removeClass("hidden"),this._visibleLayoutElements[t.getId()]=r;const u=null!==(o=null===(l=e.tabs)||void 0===l||null===(l=l.match(/data-neo-b="([0-9]+).container.tabs"/))||void 0===l?void 0:l.pop())&&void 0!==o?o:null,p=u?e.tabs.replaceAll(u,t.getId()):e.tabs,b=n()(p);t.$topbarRightContainer.find(".tabs").empty().append(b),t.initTabs(),t.updateResponsiveness(),a().appendHeadHtml(e.headHtml.replaceAll("__NEOBLOCK__",t.getId())),a().appendBodyHtml(e.bodyHtml.replaceAll("__NEOBLOCK__",t.getId())),d&&e.initialDeltaValues&&Object.assign(this.$form.data("initial-delta-values"),e.initialDeltaValues)},_addSpinnerAfter(t){void 0!==t?t.$container.after(this._$spinner):this.$blocksContainer.prepend(this._$spinner)},_addSpinnerBefore(t){void 0!==t?t.$container.before(this._$spinner):this.$blocksContainer.append(this._$spinner)},_animateSpinnerThen(t){s().prefersReducedMotion()?t():this._$spinner.css({opacity:0,marginBottom:-this._$spinner.outerHeight()}).velocity({opacity:1,marginBottom:10},"fast",(()=>t()))},_removeSpinner(){this._$spinner.remove()},_getNewBlockId(){for(;this.$blocksContainer.find('[data-neo-b-id="new'.concat(this._newBlockId,'"]')).length>0;)this._newBlockId++;return"new".concat(this._newBlockId++)},_duplicate(t,e){var n;null===(n=this.$form.data("elementEditor"))||void 0===n||n.pause(),this._addSpinnerAfter(e),this._animateSpinnerThen((()=>a().postActionRequest("neo/input/render-blocks",t,(t=>{if(t.success&&t.blocks.length>0){var n;const i=[];for(const e of t.blocks){const t=this._getNewBlockId(),n=new $({namespace:[...this._templateNs,t],field:this,blockType:this.getBlockTypeById(e.type),tabs:e.tabs,id:t,level:0|e.level,enabled:!!e.enabled,collapsed:!!e.collapsed,showButtons:!this.atMaxLevels(0|e.level),showBlockTypeHandle:this._showBlockTypeHandles},!0);i.push(n)}let o=this._getNextBlockIndex(e);for(const t of i)this.addBlock(t,o++,t.getLevel(),!1);if(!s().prefersReducedMotion()){const t=i[0];t.$container.css({opacity:0,marginBottom:this._$spinner.outerHeight()-t.$container.outerHeight()+10}).velocity({opacity:1,marginBottom:10},"fast",(e=>s().requestAnimationFrame((()=>s().scrollContainerToElement(t.$container)))))}this._removeSpinner(),null===(n=this.$form.data("elementEditor"))||void 0===n||n.resume()}}))))},async"@newBlock"(t){const e=()=>{const e=this._getNewBlockId(),n=new $({namespace:[...this._templateNs,e],field:this,blockType:t.blockType,id:e,showButtons:!this.atMaxLevels(t.level),showBlockTypeHandle:this._showBlockTypeHandles},!0);this._removeSpinner(),this.addBlock(n,t.index,t.level,t.createChildBlocks,t.createChildBlocks)};if(null!==t.blockType.getTabs())return void e();const n=this.$form.data("elementEditor");try{var i;null==n||n.pause();const s=null!==(i=t.level)&&void 0!==i?i:1;let o,a=!0;for(let e=void 0!==t.index?t.index-1:this._blocks.length-1;e>=0;e--){if(this._blocks[e].getLevel()===s){o=this._blocks[e];break}this._blocks[e].getLevel(){await t.blockType.loadTabs(),e()}))}catch(t){this._removeSpinner(),a().cp.displayError(t)}finally{null==n||n.resume()}},"@addBlockAbove"(t){this._destroyTempButtons();const e=!s().prefersReducedMotion()&&!1!==t.animate,n=t.block,i=this._blocks.indexOf(n),o=this._findParentBlock(i),a=this.getBlocks(),l=new this.ButtonClass({$ownerContainer:n.isTopLevel()?this.$container:n.getParent().$container,field:this,blockTypes:o?[]:this.getBlockTypes(!0),blocks:a,groups:o?[]:this.getGroups(),items:o?o.getBlockType().getChildBlockItems(this.getItems()):null,maxBlocks:this.getMaxBlocks()});n.$container.before(l.$container),l.on("newBlock",(t=>this["@newBlock"]({blockType:t.blockType,index:i,level:n.getLevel()}))),l.initUi(),e&&l.$container.css({opacity:0,marginBottom:-l.$container.outerHeight()}).velocity({opacity:1,marginBottom:10},"fast",(t=>s().requestAnimationFrame((()=>s().scrollContainerToElement(l.$container))))),this._tempButtons=l,this._tempButtonsBlock=this._findParentBlock(n),this._tempButtons.updateButtonStates(a,this._checkMaxChildren(this._tempButtonsBlock),this._tempButtonsBlock)},"@copyBlock"(t){const e=[];let n=0;const i=this._ownerId;this._blockBatch(t.block,(t=>{if(!(n>0&&-1!==e[e.length-1].indexOf(t))){const i=[];i.push(t,...this._findChildBlocks(t,!0)),e.push(i),n+=i.length}}));const s={field:this._name,blocks:[]};for(const t of e){const e=t[0].getLevel()-1;for(const n of t){const t={type:n.getBlockType().getId(),level:n.getLevel()-e,content:n.getContent(),ownerId:i};n.isEnabled()&&(t.enabled=1),n.isExpanded()||(t.collapsed=1),s.blocks.push(t)}}window.localStorage.setItem("neo:copy:".concat(this._name),JSON.stringify(s)),this._updateButtons();const o=1===n?"1 block copied":"{n} blocks copied";a().cp.displayNotice(a().t("neo",o,{n}))},"@pasteBlock"(t){var e;const n=t.block,i=(null!==(e=null==n?void 0:n.getLevel())&&void 0!==e?e:1)-1,s=this.getCopiedBlocks();if(s.length>0){for(const t of s)t.level+=i;l.enter(this._templateNs);const t={namespace:l.toFieldName(),siteId:this._siteId,blocks:s};l.leave(),this._duplicate(t,n)}},"@duplicateBlock"(t){const e=t.block,n=this._blocks.indexOf(e),i=this._findChildBlocks(n,!0),s=this._ownerId,o=t=>({collapsed:0|!t.isExpanded(),content:t.getContent(),enabled:0|t.isEnabled(),level:t.getLevel(),ownerId:s,type:t.getBlockType().getId()});l.enter(this._templateNs);const a={namespace:l.toFieldName(),siteId:this._siteId,blocks:[o(e),...i.map(o)]};l.leave(),this._duplicate(a,e)}});var H;const A=null!==(H=window)&&void 0!==H?H:void 0,U=[];A.Neo={Input:P,inputs:U,createInput(){const t=new P(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{});return U.push(t),t}}})(); +(()=>{"use strict";var t={n:e=>{var n=e&&e.__esModule?()=>e.default:()=>e;return t.d(n,{a:n}),n},d:(e,n)=>{for(var i in n)t.o(n,i)&&!t.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:n[i]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e)};const e=jQuery;var n=t.n(e);const i=Garnish;var s=t.n(i);const o=Craft;var a=t.n(o);const l={_stack:[[]],enter(t){let e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if("string"==typeof t&&(t=this.fromFieldName(t)),e){const e=this.getNamespace();e.push(...t),t=e}this._stack.push(t)},enterByFieldName(t){let e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.enter(this.fromFieldName(t),e)},leave(){return this._stack.length>1?this._stack.pop():this.getNamespace()},getNamespace(){return Array.from(this._stack[this._stack.length-1])},parse(t){return"string"==typeof t?t.indexOf("[")>-1?this.fromFieldName(t):t.indexOf("-")>-1?t.split("-"):t.indexOf(".")>-1?t.split("."):t:Array.from(t)},value(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"-";const n=this.getNamespace();return n.push(t),n.join(e)},fieldName(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";const e=this.toFieldName();return e?e+t.replace(/([^'"[\]]+)([^'"]*)/,"[$1]$2"):t},toString(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"-";return this.getNamespace().join(t)},toFieldName(){const t=this.getNamespace();switch(t.length){case 0:return"";case 1:return t[0]}return t[0]+"["+t.slice(1).join("][")+"]"},fromFieldName:t=>t.match(/[^[\]\s]+/g)||[]},c=s().Drag.extend({$container:null,blocks:null,maxTopBlocks:0,_draggeeBlocks:null,init(t,e){void 0===e&&n().isPlainObject(t)&&(e=t,t=null),(e=n().extend({},c.defaults,e)).axis=s().Y_AXIS,this.base(t,e),this.$container=e.container,this.blocks=[],this.maxTopBlocks=e.maxTopBlocks},getHelperTargetX(){return this.$draggee.offset().left},getHelperTargetY(){const t=this.settings.magnetStrength;if(1!==t){const e=this.$draggee.offset().top;return e+(this.mouseY-this.mouseOffsetY-e)/t}return this.base()},getBlockByElement(t){return this.blocks.find((e=>e.$container.is(t)))},getParentBlock(t){const e=t.$container.parent().closest(".ni_block");return e.length>0&&this.getBlockByElement(e)},onDragStart(){const t=this;this._draggeeBlocks=[],this.$draggee.each((function(){t._draggeeBlocks.push(t.getBlockByElement(this))})),this.base(),this._calculateMidpoints()},onDrag(){const t=this._getClosestMidpoint();t&&this._moveDraggeeToBlock(t.block,t.type,t.direction),this.base()},onDragStop(){const t=this;this.$draggee.each((function(){const e=n()(this),i=t.getBlockByElement(e);if(e.parent().is(t.$container))i.setLevel(1);else{const e=t.getParentBlock(i);i.setLevel(e.getLevel()+1)}e.find(".ni_block").each((function(){const e=n()(this),i=t.getBlockByElement(e),s=t.getParentBlock(i);i.setLevel(s.getLevel()+1)}))})),this.returnHelpersToDraggees(),this.base()},addBlock(t){this.blocks.push(t),this.addItems(t.$container)},removeBlock(t){this.blocks=this.blocks.filter((e=>e!==t)),this.removeItems(t.$container)},_getClosestMidpoint(){let t=Number.MAX_VALUE,e=Number.MIN_VALUE,n=null;for(const i of this._currentMidpoints)if(i.direction===c.DIRECTION_UP){this.mouseY-this.mouseOffsetYi.position&&i.position>e&&(e=i.position,n=i)}return n},_calculateMidpoints(){this._draggeeBlockY=this.$draggee.offset().top,this._draggeeBlockHeight=this.$draggee.height()+10,this._currentMidpoints=[];for(const t of this.blocks)if(0===t.$container.closest(this.$draggee).length){const e=this._getBlockMidpoints(t);for(const n of Object.keys(e)){const i=e[n],s=this._draggeeBlockY>i?c.DIRECTION_UP:c.DIRECTION_DOWN;this._currentMidpoints.push({block:t,position:i,type:n,direction:s})}}const t=this.$container.offset().top+this.$container.height()+5;this._currentMidpoints.push({block:null,position:t,type:c.TYPE_END,direction:c.DIRECTION_DOWN})},_getBlockMidpoints(t){const e={};if(!(t.$container.parent().closest(".ni_block.is-collapsed").length>0)){const n=t.$container.offset().top,i=t.isExpanded(),s=t.$container.height(),o=t.$topbarContainer.height(),a=i?t.$childrenContainer.height():0,l=i&&t.$contentContainer.length>0?t.$childrenContainer.length>0?t.$childrenContainer.offset().top-t.$contentContainer.offset().top:t.$contentContainer.height():0,r=this.getParentBlock(t);if(r&&!this._validateDraggeeChildren(r)||(e[c.TYPE_CONTENT]=n+(o+l)/2),a>0&&t.isExpanded()&&this._validateDraggeeChildren(t)){const i=t.getButtons().$container.height();e[c.TYPE_CHILDREN]=n+s-1-(14+i+10)/2}}return e},_moveDraggeeToBlock:function(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:c.TYPE_CONTENT,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:c.DIRECTION_DOWN;const i=t?this.getParentBlock(t):null,s=this._validateDraggeeChildren(i);switch(e){case c.TYPE_CHILDREN:0===this.$draggee.closest(t.$container).length?t.$blocksContainer.append(this.$draggee):s&&t.$container.after(this.$draggee);break;case c.TYPE_END:s&&this.$container.append(this.$draggee);break;default:n===c.DIRECTION_UP?s&&t.$container.before(this.$draggee):t.getBlockType().isParent()&&t.isExpanded()&&this._validateDraggeeChildren(t)?t.$blocksContainer.prepend(this.$draggee):s&&t.$container.after(this.$draggee)}this._updateHelperAppearance(),this._calculateMidpoints()},_validateDraggeeChildren(t){const e=t?t.getField():this._draggeeBlocks[0].getField(),n=e.getMaxLevels();if(n>0){const i=t?t.getLevel():-1,s=this._draggeeBlocks[0].getLevel(),o=t=>t.getLevel()-s+i+1>=n,a=t=>{const n=t.getChildren(e.getBlocks(),!0);return o(t)||n.some(a)};if(this._draggeeBlocks.filter(a).length>0)return!1}if(!t){const t=this,e=this.$container.children(".ni_block:not(.is-disabled)");let n=e.length;for(const t of this._draggeeBlocks)if(!t.getBlockType().getTopLevel())return!1;return e.each((function(){t._draggeeBlocks.includes(t.getBlockByElement(this))&&n--})),!(this.maxTopBlocks>0&&n>=this.maxTopBlocks)}const i=t.getBlockType(),s=i.getMaxChildBlocks(),o=t.$childrenContainer.children(".ni_blocks").children(".ni_block");let a=o.length;const l=[],c=this;if(o.each((function(){const t=c.getBlockByElement(this);c._draggeeBlocks.includes(t)?a--:l.push(t)})),s>0&&a>=s)return!1;const r=[];for(const t of this._draggeeBlocks){if(!i.isValidChildBlock(t))return!1;if(r.includes(t))continue;const e=t.getBlockType(),n=e.getMaxSiblingBlocks();if(0===n)continue;const s=this._draggeeBlocks.filter((t=>t.getBlockType().getHandle()===e.getHandle()));if(l.filter((t=>t.getBlockType().getHandle()===e.getHandle())).length+s.length>n)return!1;r.push(...s)}return!0},_updateHelperAppearance(){for(const t of this.helpers){const e=t.data("neo-b-id"),n=this.blocks.find((t=>t.$container.data("neo-b-id")===e));t.css({width:n.$container.width()+1,height:n.$container.height()})}}},{TYPE_CONTENT:"content",TYPE_CHILDREN:"children",TYPE_END:"end",DIRECTION_UP:"up",DIRECTION_DOWN:"down",defaults:{container:null,magnetStrength:1}}),r=c,d={name:"",errors:[]},h=s().Base.extend({init(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t=Object.assign({},d,t),this._name=t.name,this._errors=t.errors,this._uid=t.uid},getErrors(){return Array.from(this._errors)},getName(){return this._name},getUid(){return this._uid}});function u(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function p(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=typeof t||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e||"default");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==typeof e?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}const b={id:-1,fieldLayoutId:-1,sortOrder:0,name:"",handle:"",maxBlocks:0,maxSiblingBlocks:0,maxChildBlocks:0,groupChildBlockTypes:!0,childBlocks:!1,topLevel:!0,tabs:null,tabNames:[],hasChildBlocksUiElement:!1,creatableByUser:!0,deletableByUser:!0,editableByUser:!0},g=s().Base.extend({init(){var t,e,n,i,s,o;let a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};var l,c;(a=Object.assign({},b,a),this._id=0|a.id,this._fieldLayoutId=0|a.fieldLayoutId,this._sortOrder=0|a.sortOrder,this._name=a.name,this._handle=a.handle,this._description=a.description,this._enabled=a.enabled,this._minBlocks=0|a.minBlocks,this._maxBlocks=0|a.maxBlocks,this._minSiblingBlocks=0|a.maxSiblingBlocks,this._maxSiblingBlocks=0|a.maxSiblingBlocks,this._minChildBlocks=0|a.minChildBlocks,this._maxChildBlocks=0|a.maxChildBlocks,this._groupChildBlockTypes=a.groupChildBlockTypes,this._childBlocks=a.childBlocks,this._topLevel=a.topLevel,this._tabNames=a.tabNames,null!==a.tabs)?this._tabs=null!==(l=null===(c=a.tabs.tabNames)||void 0===c?void 0:c.map((t=>t instanceof h?t:new h({name:t,uid:a.tabs.tabUids[t]}))))&&void 0!==l?l:[]:this._tabs=null;this._html=null!==(t=null===(e=a.tabs)||void 0===e?void 0:e.html)&&void 0!==t?t:"",this._js=null!==(n=null===(i=a.tabs)||void 0===i?void 0:i.js)&&void 0!==n?n:"",this._defaultVisibleLayoutElements=null!==(s=null===(o=a.tabs)||void 0===o?void 0:o.visibleLayoutElements)&&void 0!==s?s:{},this._hasChildBlocksUiElement=a.hasChildBlocksUiElement,this._creatableByUser=a.creatableByUser,this._deletableByUser=a.deletableByUser,this._editableByUser=a.editableByUser},getType:()=>"blockType",getId(){return this._id},getFieldLayoutId(){return this._fieldLayoutId},getSortOrder(){return this._sortOrder},getName(){return this._name},getHandle(){return this._handle},getDescription(){return this._description},getEnabled(){return this._enabled},getMinBlocks(){return this._minBlocks},getMaxBlocks(){return this._maxBlocks},getMinSiblingBlocks(){return this._minSiblingBlocks},getMaxSiblingBlocks(){return this._maxSiblingBlocks},getMinChildBlocks(){return this._minChildBlocks},getMaxChildBlocks(){return this._maxChildBlocks},getGroupChildBlockTypes(){return this._groupChildBlockTypes},getChildBlocks(){return this._childBlocks},getTopLevel(){return this._topLevel},getTabNames(){return this._tabNames},getTabs(){return null!==this._tabs?Array.from(this._tabs):null},async loadTabs(){if(null!==this._tabs)return;const t={namespace:l.toFieldName(),blocks:[{collapsed:!1,enabled:!0,level:1,type:this._id}]},e=await a().sendActionRequest("POST","neo/input/render-blocks",{data:t});if(e.data.success){var n,i;const t=e.data.blocks[0].tabs;this._tabs=null!==(n=null===(i=t.tabNames)||void 0===i?void 0:i.map((e=>new h({name:e,uid:t.tabUids[e]}))))&&void 0!==n?n:[],this._html=t.html,this._js=t.js}},getHtml(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return this._replaceBlockIdPlaceholder(this._html,t)},getJs(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return this._replaceBlockIdPlaceholder(this._js,t)},getDefaultVisibleLayoutElements(){return function(t){for(var e=1;e1&&void 0!==arguments[1]?arguments[1]:null;return null!==e?t.replace(/__NEOBLOCK__/g,e):t},getChildBlockItems(t){const e=t.filter((t=>"group"===t.getType()||this.hasChildBlock(t.getHandle())));return e.filter(((t,n)=>{if("group"===t.getType()){const t=e[n+1];return t&&"group"!==t.getType()}return!0}))},isParent(){const t=this.getChildBlocks();return!0===t||"*"===t||Array.isArray(t)&&t.length>0},hasChildBlock(t){const e=this.getChildBlocks();return!0===e||"*"===e||Array.isArray(e)&&e.includes(t)},isValidChildBlock(t){return this.hasChildBlock(t.getBlockType().getHandle())},hasChildBlocksUiElement(){return this._hasChildBlocksUiElement},isCreatableByUser(){return this._creatableByUser},isDeletableByUser(){return this._deletableByUser},isEditableByUser(){return this._editableByUser}}),_={id:-1,sortOrder:0,alwaysShowDropdown:null,name:""},f=s().Base.extend({init(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t=Object.assign({},_,t),this._id=0|t.id,this._sortOrder=0|t.sortOrder,this._alwaysShowDropdown=t.alwaysShowDropdown,this._name=t.name},getType:()=>"group",getId(){return this._id},getSortOrder(){return this._sortOrder},getName(){return this._name},getAlwaysShowDropdown(){return this._alwaysShowDropdown},isBlank(){return!this._name}});n().fn.insertAt=function(t,e){return this.each((function(){0===t?e.prepend(this):e.children().eq(t-1).after(this)}))};const k={namespace:[],blockType:null,tabs:null,id:null,level:1,buttons:null,enabled:!0,collapsed:!1,modified:!0,showButtons:!0,showBlockTypeHandle:!1},m={},v={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};function B(){let t=this.href||this.src;if(t){const e=t.indexOf("?");t=e<0?t:t.substr(0,e);const n=!Object.prototype.hasOwnProperty.call(m,t);return m[t]=1,n}return!0}function y(t){return t?t.replace(/[&<>"'/]/g,(t=>v[t])):""}function C(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:40;return(t=t||"").length>e?t.slice(0,e-3)+"...":t}const $=s().Base.extend({_templateNs:[],_field:null,_blockType:null,_initialised:!1,_expanded:!0,_enabled:!0,_modified:!0,_initialState:null,_forceModified:!1,_tabs:null,_html:null,_js:null,init(){var t,e,n,i;let s=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},o=arguments.length>1&&void 0!==arguments[1]&&arguments[1];var a,c;(s=Object.assign({},k,s),this._templateNs=l.parse(s.namespace),this._field=s.field,this._blockType=s.blockType,null!==s.tabs)?this._tabs=null!==(a=null===(c=s.tabs.tabNames)||void 0===c?void 0:c.map((t=>t instanceof h?t:new h({name:t,uid:s.tabs.tabUids[t]}))))&&void 0!==a?a:[]:this._tabs=null;this._html=null!==(t=null===(e=s.tabs)||void 0===e?void 0:e.html)&&void 0!==t?t:null,this._js=null!==(n=null===(i=s.tabs)||void 0===i?void 0:i.js)&&void 0!==n?n:null,this._id=s.id,this._enabled=s.enabled&&this._blockType.getEnabled(),this._initialEnabled=s.enabled,this._modified=s.modified,this._showButtons=s.showButtons,this._renderOldChildBlocksContainer=!s.blockType.hasChildBlocksUiElement(),this.$container=o?this._generateElement(s.showBlockTypeHandle):this._field.$container.find("[data-neo-b-id=".concat(this._id,"]"));const r=this.$container.find("[data-neo-b]");this.$bodyContainer=r.filter('[data-neo-b="'.concat(this._id,'.container.body"]')),this.$contentContainer=r.filter('[data-neo-b="'.concat(this._id,'.container.content"]')),this.$topbarContainer=r.filter('[data-neo-b="'.concat(this._id,'.container.topbar"]')),this.$topbarLeftContainer=r.filter('[data-neo-b="'.concat(this._id,'.container.topbarLeft"]')),this.$topbarRightContainer=r.filter('[data-neo-b="'.concat(this._id,'.container.topbarRight"]')),this.$handleContainer=r.filter('[data-neo-b="'.concat(this._id,'.container.handle"]')),this.$tabContainer=this.$contentContainer.children("[data-layout-tab]"),this.$menuContainer=r.filter('[data-neo-b="'.concat(this._id,'.container.menu"]')),this.$previewContainer=r.filter('[data-neo-b="'.concat(this._id,'.container.preview"]')),this.$settingsButton=r.filter('[data-neo-b="'.concat(this._id,'.button.actions"]')),this.$togglerButton=r.filter('[data-neo-b="'.concat(this._id,'.button.toggler"]')),this.$enabledInput=r.filter('[data-neo-b="'.concat(this._id,'.input.enabled"]')),this.$levelInput=r.filter('[data-neo-b="'.concat(this._id,'.input.level"]')),this.$collapsedInput=r.filter('[data-neo-b="'.concat(this._id,'.input.collapsed"]')),this.$status=r.filter('[data-neo-b="'.concat(this._id,'.status"]')),this.$sortOrder=r.filter('[data-neo-b="'.concat(this._id,'.sortOrder"]')),this.$form=this.$container.closest("form"),this.resetButtons(s.buttons);let d=!1;if(this._blockType)for(const t of this._blockType.getTabNames()){const e='[data-neo-b-info="'.concat(t,'"]');this.$tabContainer.filter(e).find("ul.errors").length>0&&(d=!0,this.$tabButton.filter(e).addClass("error"))}this.setLevel(s.level),this.toggleExpansion(!!d||!s.collapsed,!1,!1),this.toggleShowButtons(this._showButtons),this.addListener(this.$topbarContainer,"dblclick","@doubleClickTitle"),this.$container.data("block",this)},_generateElement(){var t;let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];l.enter(this._templateNs);const i=l.toFieldName(),s=l.toString("-");l.leave();const o=this._blockType,c=null!==(t=this._tabs)&&void 0!==t?t:o.getTabs(),r=c.length>0,d=o.isParent(),h="".concat(o.getName()," ").concat(a().t("neo","Actions")),u="neoblock-action-menu-".concat(this._id),p="".concat(o.getName()," ").concat(a().t("neo","Tabs")),b="neoblock-tabs-menu-".concat(this._id),g="".concat(this._templateNs[0],"[").concat(this._templateNs.slice(1,this._templateNs.length-2).join("]["),"][sortOrder]"),_=[];if(_.push('\n
\n \n \n \n ')),isNaN(parseInt(this._id))&&_.push('\n ')),_.push('\n
\n
\n
\n
\n
\n
\n ').concat(o.getName(),'\n
\n
\n  \n
\n
\n
\n
')),(r||d)&&_.push('\n
')),c.length>1){_.push('\n
'));for(let t=0;t').concat(n,""))}_.push('\n
\n
\n \n \n
")}_.push('\n
\n \n \n
\n \n
\n
\n
')),(r||d)&&(_.push('\n
')),r&&_.push('\n
\n ').concat(this.getHtml(),"\n
")),d&&this._renderOldChildBlocksContainer&&_.push('\n
\n
\n
\n \n \n
")),_.push("\n
")),d&&_.push('\n
')),_.push('\n
');const f=n()(_.join(""));return e&&n()("
").addClass("ni_block_topbar_item handle").prop("data-neo-b","".concat(this._id,".container.handle")).append(a().ui.createCopyTextBtn({id:"".concat(s,"-").concat(o.getHandle(),"-attribute"),class:["code","small","light"],value:o.getHandle()})).insertAfter(f.find(".ni_block_topbar_item.title")),f},initUi(){var t;let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];if(!this._initialised){if(this.$foot=n()(this.getJs()).filter(B),s().$bod.append(this.$foot),e&&a().initUiElements(this.$contentContainer),this.$form=this.$container.closest("form"),this.initTabs(),this._settingsMenu=this.$settingsButton.data("trigger")||new(s().DisclosureMenu)(this.$settingsButton),this._settingsMenu.on("show",(()=>{this._field.getBlocks().filter((t=>t.$container.hasClass("active"))).forEach((t=>t.toggleSettingsMenu(!1))),this.$container.addClass("active")})),this._settingsMenu.on("hide",(()=>this.$container.removeClass("active"))),this.$menuContainer=this._settingsMenu.$container,this.addListener(this.$menuContainer.find("[data-action]"),"click",this._handleActionClick),this.addListener(this.$menuContainer.find("[data-action]"),"keydown",this._handleActionKeydown),this.toggleEnabled(this._initialEnabled),this._initialised=!0,null===(t=this._buttons)||void 0===t||t.initUi(),s().requestAnimationFrame((()=>this.updateResponsiveness())),this.$container.on("mousedown",".matrixblock",(function(t){n()(this).addClass("neo-matrixblock")})),this.$container.hasClass("has-errors")&&this.$container.parents(".ni_child-blocks-ui-element").each(((t,e)=>{const i=n()(e).parent(),s=i.closest(".ni_block").data("block"),o=i.index();s.$tabButton.filter(".tab").eq(o).add(s.$tabButton.filter(":not(.tab)").eq(o)).add(s.$container.find("> .ni_block_topbar .tabs_btn")).addClass("has-errors").append(''))})),!this.isNew()){this._initialState={enabled:this._enabled,level:this._level,content:this._getPostData()};const t=()=>this._detectChange(),e=new window.MutationObserver((()=>{setTimeout(t,200),this.getBlockType().isEditableByUser()||this.$container.hasClass("is-disabled-for-user")||this.$container.addClass("is-disabled-for-user")}));e.observe(this.$container[0],{attributes:!0,childList:!0,characterData:!0,subtree:!0}),this.$contentContainer.on("propertychange change click","input, textarea, select, div.redactor-in",t),this.$contentContainer.on("paste input keyup",'input:not([type="hidden"]), textarea, div.redactor-in',t),this._detectChangeObserver=e,this.$menuContainer.find('[data-action="copy"], [data-action="paste"], [data-action="duplicate"]').parent().toggleClass("hidden",!this._blockType.getEnabled())}this.$contentContainer,a().CpFieldInspectPlugin&&a().CpFieldInspectPlugin.addFieldLinks(),this.trigger("initUi")}},initTabs(){const t=this.$container.find("[data-neo-b]");this.$tabsButton=t.filter('[data-neo-b="'.concat(this._id,'.button.tabs"]')),this.$tabsContainer=t.filter('[data-neo-b="'.concat(this._id,'.container.tabs"]')),this.$tabButton=t.filter('[data-neo-b="'.concat(this._id,'.button.tab"]')),this.$tabContainer=this.$contentContainer.children("[data-layout-tab]"),this._tabsMenu=this.$tabsButton.data("trigger")||new(s().DisclosureMenu)(this.$tabsButton),this._tabsMenu.on("show",(()=>this.$container.addClass("active"))),this._tabsMenu.on("hide",(()=>this.$container.removeClass("active"))),this.$tabButton=this.$tabButton.add(this._tabsMenu.$container.find('[data-neo-b="'.concat(this._id,'.button.tab"]'))),this.addListener(this.$tabButton,"click",this["@setTab"]),this.addListener(this.$tabButton,"keydown",this._handleTabKeydown)},getHtml(){return null!==this._html?this._html.replace(/__NEOBLOCK__/g,this._id):this._blockType.getHtml(this._id)},getJs(){return null!==this._js?this._js.replace(/__NEOBLOCK__/g,this._id):this._blockType.getJs(this._id)},destroy(){this._initialised&&(this.$foot.remove(),clearInterval(this._detectChangeInterval),this._detectChangeObserver&&this._detectChangeObserver.disconnect(),this.trigger("destroy"))},getBlockType(){return this._blockType},getId(){return this._id},getDuplicatedBlockId(){var t,e;return null!==(t=null===(e=this.$form.data("elementEditor"))||void 0===e?void 0:e.duplicatedElements[this._id])&&void 0!==t?t:this._id},isTopLevel(){return 1===this._level},getLevel(){return this._level},setLevel(t){this._level=0|t,this.$levelInput.val("0".concat(this._level)),this.$container.toggleClass("is-level-odd",!!(this._level%2)),this.$container.toggleClass("is-level-even",!(this._level%2))},setModified(t){this._modified=t},getButtons(){return this._buttons},getSiteId(){if(!this._siteId){const t=this.$form.find('input[name="siteId"]');this._siteId=t.val()}return this._siteId},getContent(){const t=this._getPostData(),e={},i=(t,i)=>{let s=e;for(let e=0;e0&&void 0!==arguments[0]?arguments[0]:null;null!==(t=e)&&void 0!==t||(e=this._field.getBlocks());const n=this.getLevel();let i=e.indexOf(this),s=null;if(i>=0&&n>1)for(;null===s&&i>0;){const t=e[--i];t.getLevel()===n-1&&(s=t)}return s},getChildren(){var t;let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;null!==(t=e)&&void 0!==t||(e=this._field.getBlocks());const i=this.getLevel();let s=e.indexOf(this);const o=[];if(s>=0){let t=e[++s];for(;t&&t.getLevel()>i;){const a=t.getLevel();(n?a>i:a===i+1)&&o.push(t),t=e[++s]}}return o},getSiblings(){var t;let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return null!==(t=e)&&void 0!==t||(e=this._field.getBlocks()),this.isTopLevel()?e.filter((t=>t.isTopLevel())):this.getParent(e).getChildren(e)},getField(){return this._field},updatePreview(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;t="boolean"==typeof t&&t;const e=this.$childrenContainer.find(".field"),i=this.$contentContainer.find(".field").add(e),o=[];i.each((function(){const e=n()(this),i=e.children(".input"),l=e.data("type"),c=e.children(".heading").children("label").text();if(null===l)return;let r=!1;switch(l){case"craft\\fields\\Assets":{const e=[],s=i.find(".element");s.each((function(){const i=n()(this),o=i.find(".elementthumb");let a=o.children("img").prop("srcset");if(a||(a=o.data("srcset")),e.push('')),!t&&1===s.length){const t=i.find(".title").text();e.push(y(C(t)))}})),r=e.join(" ")}break;case"craft\\fields\\Categories":case"craft\\fields\\Entries":case"craft\\fields\\Tags":case"craft\\fields\\Users":{const t=[];i.find(".element").each((function(){const e=n()(this).find(".title, .label").eq(0).text();t.push(y(C(e)))})),r=t.join(", ")}break;case"craft\\fields\\Checkboxes":{const t=[];i.find('input[type="checkbox"]').each((function(){if(this.checked){const e=n()(this).prop("id"),s=i.find('label[for="'.concat(e,'"]')).text();t.push(y(C(s)))}})),r=t.join(", ")}break;case"craft\\fields\\Color":{const t=i.find('input[type="color"]').val(),e=i.find('input[type="text"]').val(),n=i.find("div.colorhex").text();let s=null;s=t&&e?"background-color: ".concat(t):!t&&e?"background-color: ".concat(e):n?"background-color: ".concat(n):"background-image: repeating-linear-gradient(-45deg, transparent, transparent 2px, #777 2px, #777 3px)",r='
')}break;case"craft\\fields\\Date":{const t=y(i.find(".datewrapper input").val()),e=y(i.find(".timewrapper input").val());r=t&&e?t+" "+e:t||e}break;case"craft\\fields\\Dropdown":r=y(C(i.find("select").children(":selected").text()));break;case"craft\\fields\\Email":r=y(C(i.children('input[type="email"]').val()));break;case"craft\\fields\\Lightswitch":{const t=!!i.find("input").val();r='')+y(C(c))}break;case"craft\\fields\\MultiSelect":case"ttempleton\\categorygroupsfield\\fields\\CategoryGroupsField":{const t=[];i.find("select").children(":selected").each((function(){t.push(n()(this).text())})),r=y(C(t.join(", ")))}break;case"craft\\fields\\Number":case"craft\\fields\\PlainText":r=y(C(i.children('input[type="text"], textarea').val()));break;case"craft\\fields\\RadioButtons":r=y(C(i.find('input[type="radio"]:checked').closest("label").text()));break;case"craft\\redactor\\Field":case"spicyweb\\tinymce\\fields\\TinyMCE":r=y(C(a().getText(i.find("textarea").val())));break;case"craft\\ckeditor\\Field":r=y(C(a().getText(i.find('[role="textbox"]').html())));break;case"craft\\fields\\Url":r=y(C(i.children('input[type="url"]').val()));break;case"craft\\fields\\Matrix":case"verbb\\supertable\\fields\\SuperTableField":{const t=e.find(".field").find('input[type!="hidden"], select, textarea, .label'),i=[];t.each((function(){const t=n()(this);let e=null;t.is("input, textarea")?e=a().getText(s().getInputPostVal(t)):t.is("select")?e=t.find("option:selected").text():t.hasClass("label")&&(e=t.text()),e&&i.push(C(e))})),r=y(i.join(", "))}break;case"typedlinkfield\\fields\\LinkField":case"presseddigital\\linkit\\fields\\LinkitField":{const t=[],e=i.find("select").children(":selected").first(),n=i.find('.linkfield--typeOption:not(.hidden), [class^="linkit--"]:not(.hidden)'),s=n.find('input[type!="hidden"]').val(),o=n.find(".element"),a=i.find('.field[id*="customText"] input, .linkit--customText input').val();if(t.push(C(e.text())),s&&t.push(C(s)),o.length>0){const e=o.find(".title, .label").eq(0).text();t.push(C(e))}a&&t.push(C(a)),r=y(t.join(", "))}break;case"luwes\\codemirror\\fields\\CodeMirrorField":{const t=[];e.find(".CodeMirror-line > span").each((function(){t.push(n()(this).text())})),r=y(t.join(" "));break}case"rias\\positionfieldtype\\fields\\Position":r=y(i.find(".btn.active").prop("title"));break;case"wrav\\oembed\\fields\\OembedField":r=y(C(i.children("input").val()))}r&&o.length<10&&o.push('',r,"")})),this.$previewContainer.html(o.join(""))},isNew(){return/^new/.test(this.getId())},isSelected(){return this.$container.hasClass("is-selected")},collapse(t,e){this.toggleExpansion(!1,t,e)},expand(t,e){this.toggleExpansion(!0,t,e)},toggleExpansion(t,e,n){if(t="boolean"==typeof t?t:!this._expanded,e="boolean"!=typeof e||e,n=!s().prefersReducedMotion()&&("boolean"!=typeof n||n),t!==this._expanded){this._expanded=t,this._expanded||this.updatePreview();const i=this.$menuContainer.find('[data-action="expand"]').parent(),s=this.$menuContainer.find('[data-action="collapse"]').parent();this.$collapsedInput.val(this._expanded?"":"1"),this.$container.toggleClass("is-expanded",this._expanded).toggleClass("is-collapsed",!this._expanded),i.toggleClass("hidden",this._expanded),s.toggleClass("hidden",!this._expanded),this.$previewContainer.toggleClass("hidden",this._expanded);const o={opacity:1,height:(0|this.$contentContainer.outerHeight())+(0|this.$childrenContainer.outerHeight())},a={opacity:0,height:0},l={opacity:"",height:""};n?this.$bodyContainer.css(this._expanded?a:o).velocity(this._expanded?o:a,"fast",(t=>{this._expanded&&this.$bodyContainer.css(l)})):this.$bodyContainer.css(this._expanded?l:a),e&&this.saveExpansion(),this.trigger("toggleExpansion",{expanded:this._expanded})}},isExpanded(){return this._expanded},saveExpansion(){if(!this.isNew()){var t;const e=null!==(t=this.$form.data("elementEditor"))&&void 0!==t&&t.settings.isProvisionalDraft?this.getDuplicatedBlockId():this.getId(),n={expanded:this.isExpanded()?1:0,blockId:e,siteId:this.getSiteId()};a().queue.push((()=>new Promise(((t,e)=>{a().sendActionRequest("POST","neo/input/save-expansion",{data:n}).then(t).catch(e)}))))}},disable(){this.toggleEnabled(!1)},enable(){this.toggleEnabled(!0)},toggleEnabled(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:!this._enabled;const e=this._enabled!==t;this._enabled=t;const n=this._blockType.getEnabled(),i=this._enabled&&n,s=this.$menuContainer.find('[data-action="enable"]').parent(),o=this.$menuContainer.find('[data-action="disable"]').parent();this.$container.toggleClass("is-enabled",i).toggleClass("is-disabled",!i),this.$status.toggleClass("hidden",i),s.toggleClass("hidden",this._enabled||!n),o.toggleClass("hidden",!this._enabled||!n),this.$enabledInput.val(this._enabled?"1":""),e&&this.trigger("toggleEnabled",{enabled:this._enabled})},isEnabled(){return this._enabled},toggleShowButtons(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:!this._showButtons;this.$buttonsContainer.toggleClass("hidden",!t),this.$childrenWarningsContainer.toggleClass("hidden",t)},selectTab(t){this.$tabButton.removeClass("is-selected"),this.$tabContainer.addClass("hidden");const e=this.$tabButton.filter('[data-neo-b-info="'.concat(t,'"]')).addClass("is-selected"),n=e.attr("data-neo-b-tabuid"),i=this.$tabContainer.filter('[data-layout-tab="'.concat(n,'"]')).removeClass("hidden");this.$tabsButton.text(t),a().ElementThumbLoader.retryAll(),this.trigger("selectTab",{tabName:t,$tabButton:e,$tabContainer:i})},updateResponsiveness(){var t,e;const n=s().isMobileBrowser();null!==(t=this._topbarLeftWidth)&&void 0!==t||(this._topbarLeftWidth=this.$topbarLeftContainer.width()-(this._expanded?0:this.$previewContainer.width())-(n?this.$handleContainer.width():0)),null!==(e=this._topbarRightWidth)&&void 0!==e||(this._topbarRightWidth=this.$topbarRightContainer.width());const i=this.$topbarContainer.width()"string"==typeof t?this._field.getBlockTypeByHandle(t):t)).filter((t=>void 0!==t))),s=s.filter((t=>t.isCreatableByUser())),this.updateMenuStates(this._field.getName(),n,this._field.getMaxBlocks(),!0,s,1===this._level?this._field.getMaxTopBlocks():0)},updateMenuStates(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,s=arguments.length>4&&void 0!==arguments[4]&&arguments[4],o=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;i="boolean"!=typeof i||i;const a=!s||0===s.length,l=this.getBlockType(),c=e.filter((t=>t.getBlockType().getHandle()===l.getHandle())),r=l.getMaxBlocks(),d=this.getSiblings(e),h=e.filter((t=>t.isTopLevel())).length,u=n>0&&e.length>=n||o>0&&h>=o||!i,p=u||a,b=r>0&&c.length>=r;let g=u||b;const _=JSON.parse(window.localStorage.getItem("neo:copy:".concat(t))||"{}");let f=u||!_.blocks||!_.field||_.field!==t;const k=this.getParent(e);if((!f||!g)&&k){const t=k.getBlockType().getMaxChildBlocks();if(t>0){var m,v;const n=k.getChildren(e).length,i=null!==(m=null===(v=_.blocks)||void 0===v?void 0:v.length)&&void 0!==m?m:0;f||(f=n+i>t),g||(g=n>=t)}}if(!f||!g){const t=this.getBlockType().getMaxSiblingBlocks();if(t>0){const e=t=>Object.prototype.hasOwnProperty.call(t,"type")?t.type===this.getBlockType().getId():"function"==typeof t.getBlockType&&t.getBlockType().getHandle()===this.getBlockType().getHandle(),n=d.filter(e,this).length,i=_.blocks?_.blocks.filter(e,this).length:0;f||(f=n+i>t),g||(g=n>=t)}}if(!f){const t=e.reduce(((t,e)=>{const n=e.getBlockType(),i=n.getId(),s=t[i]||{blockType:n,count:0};return s.count++,t[i]=s,t}));for(const e of _.blocks){const n=t[e.type];if(n){const t=n.blockType,e=n.count,i=t.getMaxBlocks();f||(f=i>0&&e>=i)}1===e.level&&(f||(f=!s.find((t=>t.getId()===e.type))))}}const B=d.indexOf(this),y=B<=0,C=[-1,d.length-1].includes(B);this.$menuContainer.find('[data-action="moveUp"]').parent().toggleClass("hidden",y),this.$menuContainer.find('[data-action="moveDown"]').parent().toggleClass("hidden",C),this.$menuContainer.find('[data-action="duplicate"]').toggleClass("disabled",g),a?(this.$menuContainer.find('[data-action="add"]').parent().toggleClass("hidden",p),this.$menuContainer.find('[data-action="paste"]').parent().toggleClass("hidden",f)):(this.$menuContainer.find('[data-action="add"]').toggleClass("disabled",p),this.$menuContainer.find('[data-action="paste"]').toggleClass("disabled",f)),this.$menuContainer.children("hr").toggleClass("hidden",0===this.$menuContainer.children("ul:last-child").children("li:not(.hidden)").length)},resetButtons(t){this.$blocksContainer=this.$container.find('[data-neo-b="'.concat(this._id,'.container.blocks"]')),this.$buttonsContainer=this.$container.find('[data-neo-b="'.concat(this._id,'.container.buttons"]')),this.$childrenContainer=this.$container.find('[data-neo-b="'.concat(this._id,'.container.children"]')),this.$childrenWarningsContainer=this.$container.find('[data-neo-b="'.concat(this._id,'.container.childrenWarnings"]')),this.$collapsedChildrenContainer=this.$container.find('[data-neo-b="'.concat(this._id,'.container.collapsedChildren"]')),this._buttons=null!=t?t:new this._field.ButtonClass({$ownerContainer:this.$container,field:this._field,items:this._blockType.getChildBlockItems(this._field.getItems()),maxBlocks:this._field.getMaxBlocks()}),this._buttons&&(this._buttons.on("newBlock",(t=>this.trigger("newBlock",Object.assign(t,{level:this.getLevel()+1})))),this.$buttonsContainer.append(this._buttons.$container),null===this._buttons.$ownerContainer&&(this._buttons.$ownerContainer=this.$container),this._initialised&&this._buttons.initUi())},namespaceId(t){l.enter(this._templateNs);const e="".concat(l.toString("-"),"-").concat(a().formatInputId(t));return l.leave(),e},toggleSettingsMenu(t){var e;null!==(e=t)&&void 0!==e||(t=!this._settingsMenu.isExpanded()),t?this._settingsMenu.show():this._settingsMenu.hide()},_handleActionClick(t){t.preventDefault(),this["@settingSelect"](t)},_handleActionKeydown(t){t.keyCode===s().SPACE_KEY&&(t.preventDefault(),this["@settingSelect"](t))},_handleTabKeydown(t){t.keyCode===s().SPACE_KEY&&this["@setTab"](t)},_detectChange(){const t=this.$form.data("elementEditor");if(null!=t&&t.enableAutosave&&t.settings.draftId&&(this.setModified(!0),this._forceModified=!0),!this._forceModified){const t=this._initialState,e=this._getPostData(),n=!a().compare(e,t.content,!1)||t.enabled!==this._enabled||t.level!==this._level;n!==this._modified&&this.setModified(n)}this.trigger("change")},_getPostData(){const t=s().getPostData(this.$contentContainer),e=Object.keys(t).filter((t=>!t.startsWith("fields[".concat(this._field.getName(),"][blocks][").concat(this._id,"]"))));for(const n of e)delete t[n];return t},"@settingSelect"(t){this._settingsMenu.hide();const e=n()(t.target);if(!e.hasClass("disabled"))switch(e.attr("data-action")){case"collapse":this.collapse();break;case"expand":this.expand();break;case"disable":this.disable(),this.collapse();break;case"enable":this.enable(),this.expand();break;case"moveUp":this.trigger("moveUpBlock",{block:this});break;case"moveDown":this.trigger("moveDownBlock",{block:this});break;case"delete":this.trigger("removeBlock",{block:this});break;case"add":this.trigger("addBlockAbove",{block:this});break;case"copy":this.trigger("copyBlock",{block:this});break;case"paste":this.trigger("pasteBlock",{block:this});break;case"duplicate":this.trigger("duplicateBlock",{block:this})}},"@doubleClickTitle"(t){t.preventDefault();const e=n()(t.target).parent(),i=e.closest(this.$topbarLeftContainer).length>0,s=e.closest(this.$topbarRightContainer).length>0;var o,a;i||s||(null===(o=this.$form.data("elementEditor"))||void 0===o||o.pause(),this.toggleExpansion(),null===(a=this.$form.data("elementEditor"))||void 0===a||a.resume())},"@setTab"(t){t.preventDefault(),this._tabsMenu.hide();const e=n()(t.currentTarget).attr("data-neo-b-info");this.selectTab(e)}},{_totalNewBlocks:0,getNewId(){return"new".concat(this._totalNewBlocks++)}});function T(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=typeof t||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e||"default");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==typeof e?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}const x={$ownerContainer:null,blockTypes:[],groups:[],items:null,maxBlocks:0,maxTopBlocks:0,blocks:null};class w{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};T(this,"_blockTypes",[]),T(this,"_blockTypeGroups",[]),t=Object.assign({},x,t),t.items?(this._items=Array.from(t.items),this._blockTypes=this._items.filter((t=>"blockType"===t.getType())),this._blockTypeGroups=this._items.filter((t=>"group"===t.getType()))):(this._blockTypes=Array.from(t.blockTypes),this._blockTypeGroups=Array.from(t.groups),this._items=[...this._blockTypes,...this._blockTypeGroups].sort(((t,e)=>t.getSortOrder()-e.getSortOrder()))),this.$ownerContainer=t.$ownerContainer,this._field=t.field,this._maxBlocks=0|t.maxBlocks,this._maxTopBlocks=0|t.maxTopBlocks,this.$container=this.renderButtons();const e=this.$container.find("[data-neo-bn]");this.$buttonsContainer=e.filter('[data-neo-bn="container.buttons"]'),this.$menuContainer=e.filter('[data-neo-bn="container.menu"]'),this.$blockButtons=e.filter('[data-neo-bn="button.addBlock"]'),this.$groupButtons=e.filter('[data-neo-bn="button.group"]'),t.blocks&&this.updateState(t.blocks)}renderButtons(){var t;const e=null!==(t=this.$ownerContainer)&&void 0!==t&&t.hasClass("ni_block")?this.$ownerContainer.attr("class").match(/ni_block--([^\s]+)/)[1]:null,i=null!==e&&!this.getField().getBlockTypeByHandle(e).getGroupChildBlockTypes(),s=[];let o=[],l=null,c=!0;const r=()=>{s.push('\n
\n ').concat(l.getName(),'\n
\n ")),c=!1,o=[]};s.push('\n
\n
');for(let t=0;t\n ').concat(e.getName(),"\n ")):(s.push("\n \n ').concat(e.getName(),"\n ")),c=!1)}else"group"===n&&(null!==l&&o.length>0&&r(),l=e.isBlank()||!e.getAlwaysShowDropdown()&&(t+2>=this._items.length||"group"===this._items[t+2].getType())||i?null:e)}null!==l&&o.length>0&&r(),s.push('\n
\n ")),l=null;let d=!1;s.push('\n \n
"),n()(s.join(""))}getField(){return this._field}getBlockTypes(){return Array.from(this._blockTypes)}getBlockTypeGroups(){return Array.from(this._blockTypeGroups)}getBlockTypeByButton(t){const e=t.attr(w.BUTTON_INFO);return this._blockTypes.find((t=>t.getHandle()===e))}updateState(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;e="boolean"!=typeof e||e;const s=this,o=t.filter((t=>t.isTopLevel())).length,a=this._maxBlocks>0&&t.length>=this._maxBlocks,l=this._maxTopBlocks>0&&o>=this._maxTopBlocks,c=a||l||!e;this.$blockButtons.each((function(){const e=n()(this);let o=c;if(!o){const n=t=>t.getBlockType().getHandle()===a.getHandle(),a=s.getBlockTypeByButton(e),l=t.filter(n),c=a.getMaxBlocks(),r=a.getMaxSiblingBlocks(),d=null!==i?i.getChildren(t).filter(n):t.filter((t=>t.isTopLevel()&&t.getBlockType().getHandle()===a.getHandle()));o||(o=c>0&&l.length>=c||r>0&&d.length>=r)}e.toggleClass("disabled",o)})),this.$groupButtons.each((function(){const t=n()(this),e=t.data("menubtn");let i=c;if(!i&&e){const t=e.menu.$options;i=t.length===t.filter(".disabled").length}t.toggleClass("disabled",i)}))}updateResponsiveness(){}}T(w,"BUTTON_INFO","data-neo-bn-info");const E=s().Base.extend({init(t){this._buttons=t,this.$container=this._buttons.$container,this.addListener(this._buttons.$blockButtons,"activate","@newBlock")},initUi(){this._buttons.initUi()},getBlockTypes(){return this._buttons.getBlockTypes()},getGroups(){return this._buttons.getBlockTypeGroups()},getMaxBlocks(){return this._maxBlocks},updateButtonStates(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;this._buttons.updateState(t,e,n)},updateState(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;this._buttons.updateState(t,e,n)},updateResponsiveness(){this._buttons.updateResponsiveness()},getBlockTypeByButton(t){return this._buttons.getBlockTypeByButton(t)},"@newBlock"(t){const e=n()(t.currentTarget).attr(w.BUTTON_INFO),i=this._buttons.getBlockTypes().find((t=>t.getHandle()===e));this.trigger("newBlock",{blockType:i})}});class I extends w{initUi(){if(n()(".menubtn",this.$container).menubtn(),this.updateResponsiveness(),0===this.$buttonsContainer.children().length){const t=this.$container.parent(),e=t.parent(),n=e.children(".ni_blocks");0===n.length||0===n.children().length?e.addClass("hidden"):t.addClass("hidden")}}updateResponsiveness(){this._buttonsContainerWidth||(this._buttonsContainerWidth=this.$buttonsContainer.width());const t=this.$container.width()0&&void 0!==arguments[0]?arguments[0]:{};this.base(new I(t))}});class N extends w{renderButtons(){var t;const e=null!==(t=this.$ownerContainer)&&void 0!==t&&t.hasClass("ni_block")?this.$ownerContainer.attr("class").match(/ni_block--([^\s]+)/)[1]:null,i=null!==e&&!this.getField().getBlockTypeByHandle(e).getGroupChildBlockTypes(),s=[];let o=null;s.push('\n
\n ")),o=null;let l=!1;s.push('\n \n
"),n()(s.join(""))}initUi(){if(n()(".menubtn",this.$container).menubtn(),this.updateResponsiveness(),0===this.$buttonsContainer.find('[data-neo-bn="button.addBlock"]').length){const t=this.$container.parent(),e=t.parent(),n=e.children(".ni_blocks");0===n.length||0===n.children().length?e.addClass("hidden"):t.addClass("hidden")}}}const S=E.extend({init(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.base(new N(t))}});class L extends w{renderButtons(){var t;const e=null!==(t=this.$ownerContainer)&&void 0!==t&&t.hasClass("ni_block")?this.$ownerContainer.attr("class").match(/ni_block--([^\s]+)/)[1]:null,i=null!==e&&!this.getField().getBlockTypeByHandle(e).getGroupChildBlockTypes(),s=[];let o=null;s.push('\n
\n "));let l=!1;s.push('\n \n
"),n()(s.join(""))}initUi(){if(n()(".menubtn",this.$container).menubtn(),this.updateResponsiveness(),0===this.$buttonsContainer.find('[data-neo-bn="button.addBlock"]').length){const t=this.$container.parent(),e=t.parent(),n=e.children(".ni_blocks");0===n.length||0===n.children().length?e.addClass("hidden"):t.addClass("hidden")}}}const M=E.extend({init(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.base(new L(t))}}),D={name:null,namespace:[],blockTypes:[],groups:[],blocks:[],inputId:null,maxBlocks:0,maxTopBlocks:0,minLevels:0,maxLevels:0,ownerId:null},P=s().Base.extend({_templateNs:[],_name:null,_siteId:null,_visibleLayoutElements:{},_newBlockId:0,init(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t=Object.assign({},D,t),this._templateNs=l.parse(t.namespace),this._blockTypes=[],this._groups=t.groups.map((t=>new f(t))),this._blocks=[],this._id=t.id,this._name=t.name,this._minBlocks=t.minBlocks,this._maxBlocks=t.maxBlocks,this._maxTopBlocks=t.maxTopBlocks,this._minLevels=t.minLevels,this._maxLevels=t.maxLevels,this._ownerId=t.ownerId,this._showBlockTypeHandles=t.showBlockTypeHandles;const e=!s().prefersReducedMotion();switch(this._$spinner=n()('
'.concat(e?'
':a().t("neo","Loading"),"
")),t.newBlockMenuStyle){case"grid":this.ButtonClass=S;break;case"list":this.ButtonClass=M;break;default:this.ButtonClass=O}const i=n()('[name="setId"], [name="entryId"], [name="categoryId"]');i.length&&(this._ownerId=i.val()),this.$container=n()("#"+t.inputId);const o={};this._groups.forEach((t=>{o[t.getId()]=!0}));const c={};for(const e of t.blockTypes)if(null===e.groupId||void 0!==o[e.groupId]){const t=new g(e);this._blockTypes.push(t),c[t.getHandle()]=t}this.$form=this.$container.closest("form"),this._siteId=this.$form.find('input[name="siteId"]').val();const d=this.$container.find("[data-neo]");if(this.$blocksContainer=d.filter('[data-neo="container.blocks"]'),this.$buttonsContainer=d.filter('[data-neo="container.buttons"]'),this._buttons=new this.ButtonClass({$ownerContainer:this.$container,field:this,blockTypes:this.getBlockTypes(!0),groups:this.getGroups(),maxBlocks:this.getMaxBlocks(),maxTopBlocks:this.getMaxTopBlocks()}),this.$buttonsContainer.append(this._buttons.$container),this._buttons.on("newBlock",(t=>this["@newBlock"](t))),this._buttons.initUi(),this._blockSort=new r({container:this.$blocksContainer,handle:'[data-neo-b$=".button.move"]',maxTopBlocks:this.getMaxTopBlocks(),filter:()=>this._blockSort.$targetItem.hasClass("is-selected")?this.blockSelect.getSelectedItems():this._blockSort.$targetItem,collapseDraggees:!0,magnetStrength:4,helperLagBase:1.5,helperOpacity:.9,onDragStop:()=>{this._updateBlockOrder(),this._updateButtons()}}),this.blockSelect=new(s().Select)(this.$blocksContainer,null,{multi:!0,vertical:!0,handle:'> .ni_block_topbar [data-neo-b$=".select"]',checkboxMode:!0,selectedClass:"is-selected sel"}),this.$blocksContainer.find(".ni_block").each(((t,e)=>{const i=n()(e),s={};s.id=i.attr("data-neo-b-id"),s.sortOrder=t,s.collapsed=i.hasClass("is-collapsed"),s.enabled=!!i.find('[data-neo-b="'.concat(s.id,'.input.enabled"]')).val(),s.level=parseInt(i.find('[data-neo-b="'.concat(s.id,'.input.level"]')).val()),s.field=this,s.namespace=[...this._templateNs,s.id];const o=i.find('[data-neo-b="'.concat(s.id,'.input.type"]')).val(),a=c[o];if(void 0===a)return void i.remove();s.blockType=a,s.showButtons=!this.atMaxLevels(s.level);const l=new $(s);l.initUi(!1),this._setBlockEvents(l),this._blocks.push(l),this._blockSort.addBlock(l),this.blockSelect.addItems(l.$container)})),this._updateBlockOrder(),this._updateBlockChildren(),this._updateButtons(),this._minBlocks>0){const t=this._minBlocks-this._blocks.length,e=this.getBlockTypes(!0);if(1===e.length&&t>0)for(let t=this._blocks.length;tthis._updateButtons())),this.addListener(this.$container,"resize",(()=>this.updateResponsiveness()));const h="function"==typeof this.$form.data("serializer")?this.$form.data("serializer")():this.$form.serialize();this.$form.data("initialSerializedValue",h),this._setMatrixClassErrors(),this._setBlockTypeClassErrors(),this._blocks.filter((t=>!t.isExpanded())).forEach((t=>t.updatePreview())),this._registerDynamicBlockConditions(),this.trigger("afterInit")},getName(){return this._name},updateResponsiveness(){var t;for(const t of this._blocks){var e;t.updateResponsiveness(),null===(e=t.getButtons())||void 0===e||e.updateResponsiveness()}this._buttons.updateResponsiveness(),null===(t=this._tempButtons)||void 0===t||t.updateResponsiveness()},addBlock(t){var e;let i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,l=!(arguments.length>4&&void 0!==arguments[4])||arguments[4];null===(e=this.$form.data("elementEditor"))||void 0===e||e.pause();const c=this._blocks.length;i=i>=0?Math.max(0,Math.min(i,c)):c,a=!s().prefersReducedMotion()&&("boolean"!=typeof a||a);const r=i>0&&this._blocks[i-1],d=i{const i=n()(e),s=i.attr("data-layout-tab");h[s]=[],i.children("[data-layout-element]").each(((t,e)=>{h[s].push(n()(e).attr("data-layout-element"))}))})),this._visibleLayoutElements[t.getId()]=h;const u=()=>{var e;if(l){const e=t.getBlockType(),n=e.getMinChildBlocks();if(n>0){let t=e.getChildBlocks();if("*"===t&&(t=this.getBlockTypes()),1===t.length){const e=this.getBlockTypeByHandle(t[0]);for(let t=0;ts().requestAnimationFrame((()=>{s().scrollContainerToElement(t.$container),u()})))):u(),this.trigger("addBlock",{block:t,index:i})},removeBlock(t){var e;let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;null===(e=this.$form.data("elementEditor"))||void 0===e||e.pause(),n=!s().prefersReducedMotion()&&("boolean"!=typeof n||n),i="boolean"==typeof i&&i;const o=this._findChildBlocks(this._blocks.indexOf(t));for(const t of o)this.removeBlock(t,!0,!0);t.off(".input"),this._blocks=this._blocks.filter((e=>e!==t)),this._blockSort.removeItems(t.$container),this.blockSelect.removeItems(t.$container),this._destroyTempButtons(),this._updateButtons();const a=()=>{var e;t.$container.remove(),this._updateBlockChildren(),null===(e=this.$form.data("elementEditor"))||void 0===e||e.resume()};n?t.$container.css({opacity:1,marginBottom:10}).velocity({opacity:0,marginBottom:i?10:-t.$container.outerHeight()},"fast",(t=>a())):a(),t.destroy(),this.trigger("removeBlock",{block:t})},_setBlockEvents(t){t.on("removeBlock.input",(e=>{this.getSelectedBlocks().length>1?window.confirm(a().t("neo","Are you sure you want to delete the selected blocks?"))&&this._blockBatch(t,(t=>this.removeBlock(t))):this.removeBlock(t)})),t.on("toggleEnabled.input",(e=>this._blockBatch(t,(t=>t.toggleEnabled(e.enabled))))),t.on("toggleExpansion.input",(e=>this._blockBatch(t,(t=>t.toggleExpansion(e.expanded))))),t.on("moveUpBlock.input",(e=>this._moveBlock(t,"up"))),t.on("moveDownBlock.input",(e=>this._moveBlock(t,"down"))),t.on("newBlock.input",(e=>this["@newBlock"](Object.assign(e,{index:this._getNextBlockIndex(t)})))),t.on("addBlockAbove.input",(t=>this["@addBlockAbove"](t))),t.on("copyBlock.input",(t=>this["@copyBlock"](t))),t.on("pasteBlock.input",(t=>this["@pasteBlock"](t))),t.on("duplicateBlock.input",(t=>this["@duplicateBlock"](t))),t.on("change.input",(()=>this.trigger("change",{block:t})))},_moveBlock(t,e){var n;let i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(!["up","down"].includes(e))return;null===(n=this.$form.data("elementEditor"))||void 0===n||n.pause();const o=t.getSiblings(this.getBlocks()),a=o.indexOf(t),l=a>0&&"up"===e,c=a{d.detach(),l?o[a-1].$container.before(d):o[a+1].$container.after(d)},u=()=>{var t;this._updateBlockOrder(),this._updateButtons(),null===(t=this.$form.data("elementEditor"))||void 0===t||t.resume()};r?d.css({opacity:1,marginBottom:10}).velocity({opacity:0,marginBottom:-d.outerHeight()},"fast",(t=>{h(),d.css({opacity:0,marginBottom:-d.outerHeight()}).velocity({opacity:1,marginBottom:10},"fast",(t=>{u(),s().requestAnimationFrame((()=>s().scrollContainerToElement(d)))}))})):(h(),u())},getBlockByElement(t){return this._blocks.find((e=>e.$container.is(t)))},getBlocks(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return t>0?this._blocks.filter((e=>e.getLevel()===t)):Array.from(this._blocks)},getBlockTypeById(t){return this._blockTypes.find((e=>e.getId()===t))},getBlockTypeByHandle(t){return this._blockTypes.find((e=>e.getHandle()===t))},getBlockTypes(t){return(t="boolean"==typeof t&&t)?this._blockTypes.filter((t=>t.getTopLevel())):Array.from(this._blockTypes)},getGroups(){return Array.from(this._groups)},getItems(){return[...this.getBlockTypes(),...this.getGroups()].sort(((t,e)=>t.getSortOrder()-e.getSortOrder()))},getMaxBlocks(){return this._maxBlocks},getMaxTopBlocks(){return this._maxTopBlocks},getMinLevels(){return this._minLevels},getMaxLevels(){return this._maxLevels},atMaxLevels(t){return this._maxLevels>0&&t+1>this._maxLevels},getSelectedBlocks(){const t=this.blockSelect.getSelectedItems();return this._blocks.filter((e=>e.$container.closest(t).length>0))},getCopiedBlocks(){const t=window.localStorage.getItem("neo:copy:".concat(this._name));if(!t)return[];const{blocks:e}=JSON.parse(t);return e},setVisibleElements(t,e){"string"==typeof e&&(e=JSON.parse(e));null!==this._blocks.find((e=>e.getId()===t))&&(this._visibleLayoutElements[t]=e)},_setMatrixClassErrors(){n()(".ni_block_body .matrix-field .input.errors").each((function(){const t=n()(this),e=t.closest(".ni_block_content_tab").data("neo-b-info"),i=t.closest(".ni_block").find('.tabs .tab[data-neo-b-info="'+e+'"]');i.length&&i.addClass("has-errors")}))},_setBlockTypeClassErrors(){const t=n()(".ni_block .tab.has-errors");t.each((function(){t.parents(".ni_block.is-collapsed").each((function(){n()(this).find("> .ni_block_topbar .title .blocktype").addClass("has-errors")}))}))},_updateBlockOrder(){const t=[];this.$blocksContainer.find(".ni_block").each(((e,n)=>{const i=this.getBlockByElement(n);t.push(i)})),this._blocks=t,this.trigger("updateBlockOrder"),this.trigger("change",{block:null})},_updateBlockChildren(){for(const t of this._blocks){const e=t.$blocksContainer.children(".ni_block"),n=Math.min(e.length,8),i=[];for(let t=0;t
');t.$collapsedChildrenContainer.html(i.join(""))}},_checkMaxChildren(t){if(!t)return!0;const e=t.getBlockType().getMaxChildBlocks();if(e>0){return this._findChildBlocks(t).length0&&void 0!==arguments[0]?arguments[0]:null;if(t=!s().prefersReducedMotion()&&("boolean"!=typeof t||t),this._tempButtons){const e=this._tempButtons;e.off("newBlock"),t?e.$container.css({opacity:1,marginBottom:10}).velocity({opacity:0,marginBottom:-e.$container.outerHeight()},"fast",(t=>e.$container.remove())):e.$container.remove(),this._tempButtons=null,this._tempButtonsBlock=null}},_findPrevBlockOnLevel(t,e){t instanceof $&&(t=this._blocks.indexOf(t));let n=this._blocks[--t],i=Number.MAX_VALUE;for(;n;){const s=n.getLevel();if(s1&&void 0!==arguments[1]?arguments[1]:null;t instanceof $&&(t=this._blocks.indexOf(t)),e="boolean"==typeof e&&e;const n=this._blocks[t];return n?n.getChildren(this._blocks,e):[]},_findParentBlock(t){t instanceof $&&(t=this._blocks.indexOf(t));const e=this._blocks,n=e[t];if(n){const i=n.getLevel();if(i>1){let s=t,o=n;for(;o&&o.getLevel()>=i;)o=e[--s];return o}}return null},_getNextBlockIndex(t){if(void 0===t)return 0;t instanceof $&&(t=this._blocks.indexOf(t));const e=this._findChildBlocks(t,!0),n=e[e.length-1];return(n?this._blocks.indexOf(n):t)+1},_registerDynamicBlockConditions(){setTimeout((()=>{const t=this.$form.data("elementEditor");null==t||t.on("update",(()=>{const e=t.settings.siteId,n={blocks:{},sortOrder:[],fieldId:this._id,ownerCanonicalId:this._ownerId,ownerDraftId:t.settings.draftId,isProvisionalDraft:t.settings.isProvisionalDraft,siteId:e},i={};this._blocks.forEach((t=>{var e;const s=t.$contentContainer.children("[data-layout-tab]:not(.hidden)").data("layout-tab");n.blocks[t.getDuplicatedBlockId()]={selectedTab:null!=s?s:null,visibleLayoutElements:null!==(e=this._visibleLayoutElements[t.getId()])&&void 0!==e?e:{}},n.sortOrder.push(t.getDuplicatedBlockId()),i[t.getDuplicatedBlockId()]=t.getId()})),a().queue.push((()=>new Promise(((e,s)=>{a().sendActionRequest("POST","neo/input/update-visible-elements",{data:n}).then((o=>{if(t.submittingForm)s(Error("Form being resaved"));else{for(const t in o.data.blocks){const e=this._blocks.find((e=>e.getId()===i[t]));this._updateVisibleElements(e,o.data.blocks[t],n.blocks[e.getDuplicatedBlockId()].selectedTabId)}e()}})).catch(s)}))))}))}),200)},_updateVisibleElements(t,e,i){var o,l;let c=n()();const r={};let d=!1;for(let o=0;o",{id:t.namespaceId(l.id),class:"flex-fields","data-id":l.id,"data-layout-tab":l.uid}),l.id!==i&&h.addClass("hidden"),h.appendTo(t.$contentContainer)),c=c.add(h);for(let e=0;e",{class:"hidden","data-layout-element":i.uid,"data-layout-element-placeholder":""});t.length?t.replaceWith(e):e.appendTo(h),d=!0}}}d&&this._updateButtons()}const h=t.$contentContainer.children("[data-layout-tab]").not(c).not('[data-layout-tab=""]');h.length&&(h.remove(),d=!0),c.filter(":not(.hidden)").length||c.first().removeClass("hidden"),this._visibleLayoutElements[t.getId()]=r;const u=null!==(o=null===(l=e.tabs)||void 0===l||null===(l=l.match(/data-neo-b="([0-9]+).container.tabs"/))||void 0===l?void 0:l.pop())&&void 0!==o?o:null,p=u?e.tabs.replaceAll(u,t.getId()):e.tabs,b=n()(p);t.$topbarRightContainer.find(".tabs").empty().append(b),t.initTabs(),t.updateResponsiveness(),a().appendHeadHtml(e.headHtml.replaceAll("__NEOBLOCK__",t.getId())),a().appendBodyHtml(e.bodyHtml.replaceAll("__NEOBLOCK__",t.getId())),d&&e.initialDeltaValues&&Object.assign(this.$form.data("initial-delta-values"),e.initialDeltaValues)},_addSpinnerAfter(t){void 0!==t?t.$container.after(this._$spinner):this.$blocksContainer.prepend(this._$spinner)},_addSpinnerBefore(t){void 0!==t?t.$container.before(this._$spinner):this.$blocksContainer.append(this._$spinner)},_animateSpinnerThen(t){s().prefersReducedMotion()?t():this._$spinner.css({opacity:0,marginBottom:-this._$spinner.outerHeight()}).velocity({opacity:1,marginBottom:10},"fast",(()=>t()))},_removeSpinner(){this._$spinner.remove()},_getNewBlockId(){for(;this.$blocksContainer.find('[data-neo-b-id="new'.concat(this._newBlockId,'"]')).length>0;)this._newBlockId++;return"new".concat(this._newBlockId++)},_duplicate(t,e){var n;null===(n=this.$form.data("elementEditor"))||void 0===n||n.pause(),this._addSpinnerAfter(e),this._animateSpinnerThen((()=>a().postActionRequest("neo/input/render-blocks",t,(t=>{if(t.success&&t.blocks.length>0){var n;const i=[];for(const e of t.blocks){const t=this._getNewBlockId(),n=new $({namespace:[...this._templateNs,t],field:this,blockType:this.getBlockTypeById(e.type),tabs:e.tabs,id:t,level:0|e.level,enabled:!!e.enabled,collapsed:!!e.collapsed,showButtons:!this.atMaxLevels(0|e.level),showBlockTypeHandle:this._showBlockTypeHandles},!0);i.push(n)}let o=this._getNextBlockIndex(e);for(const t of i)this.addBlock(t,o++,t.getLevel(),!1);if(!s().prefersReducedMotion()){const t=i[0];t.$container.css({opacity:0,marginBottom:this._$spinner.outerHeight()-t.$container.outerHeight()+10}).velocity({opacity:1,marginBottom:10},"fast",(e=>s().requestAnimationFrame((()=>s().scrollContainerToElement(t.$container)))))}this._removeSpinner(),null===(n=this.$form.data("elementEditor"))||void 0===n||n.resume()}}))))},async"@newBlock"(t){const e=()=>{const e=this._getNewBlockId(),n=new $({namespace:[...this._templateNs,e],field:this,blockType:t.blockType,id:e,showButtons:!this.atMaxLevels(t.level),showBlockTypeHandle:this._showBlockTypeHandles},!0);this._removeSpinner(),this.addBlock(n,t.index,t.level,t.createChildBlocks,t.createChildBlocks)};if(null!==t.blockType.getTabs())return void e();const n=this.$form.data("elementEditor");try{var i;null==n||n.pause();const s=null!==(i=t.level)&&void 0!==i?i:1;let o,a=!0;for(let e=void 0!==t.index?t.index-1:this._blocks.length-1;e>=0;e--){if(this._blocks[e].getLevel()===s){o=this._blocks[e];break}this._blocks[e].getLevel(){await t.blockType.loadTabs(),e()}))}catch(t){this._removeSpinner(),a().cp.displayError(t)}finally{null==n||n.resume()}},"@addBlockAbove"(t){this._destroyTempButtons();const e=!s().prefersReducedMotion()&&!1!==t.animate,n=t.block,i=this._blocks.indexOf(n),o=this._findParentBlock(i),a=this.getBlocks(),l=new this.ButtonClass({$ownerContainer:n.isTopLevel()?this.$container:n.getParent().$container,field:this,blockTypes:o?[]:this.getBlockTypes(!0),blocks:a,groups:o?[]:this.getGroups(),items:o?o.getBlockType().getChildBlockItems(this.getItems()):null,maxBlocks:this.getMaxBlocks()});n.$container.before(l.$container),l.on("newBlock",(t=>this["@newBlock"]({blockType:t.blockType,index:i,level:n.getLevel()}))),l.initUi(),e&&l.$container.css({opacity:0,marginBottom:-l.$container.outerHeight()}).velocity({opacity:1,marginBottom:10},"fast",(t=>s().requestAnimationFrame((()=>s().scrollContainerToElement(l.$container))))),this._tempButtons=l,this._tempButtonsBlock=this._findParentBlock(n),this._tempButtons.updateButtonStates(a,this._checkMaxChildren(this._tempButtonsBlock),this._tempButtonsBlock)},"@copyBlock"(t){const e=[];let n=0;const i=this._ownerId;this._blockBatch(t.block,(t=>{if(!(n>0&&-1!==e[e.length-1].indexOf(t))){const i=[];i.push(t,...this._findChildBlocks(t,!0)),e.push(i),n+=i.length}}));const s={field:this._name,blocks:[]};for(const t of e){const e=t[0].getLevel()-1;for(const n of t){const t={type:n.getBlockType().getId(),level:n.getLevel()-e,content:n.getContent(),ownerId:i};n.isEnabled()&&(t.enabled=1),n.isExpanded()||(t.collapsed=1),s.blocks.push(t)}}window.localStorage.setItem("neo:copy:".concat(this._name),JSON.stringify(s)),this._updateButtons();const o=1===n?"1 block copied":"{n} blocks copied";a().cp.displayNotice(a().t("neo",o,{n}))},"@pasteBlock"(t){var e;const n=t.block,i=(null!==(e=null==n?void 0:n.getLevel())&&void 0!==e?e:1)-1,s=this.getCopiedBlocks();if(s.length>0){for(const t of s)t.level+=i;l.enter(this._templateNs);const t={namespace:l.toFieldName(),siteId:this._siteId,blocks:s};l.leave(),this._duplicate(t,n)}},"@duplicateBlock"(t){const e=t.block,n=this._blocks.indexOf(e),i=this._findChildBlocks(n,!0),s=this._ownerId,o=t=>({collapsed:0|!t.isExpanded(),content:t.getContent(),enabled:0|t.isEnabled(),level:t.getLevel(),ownerId:s,type:t.getBlockType().getId()});l.enter(this._templateNs);const a={namespace:l.toFieldName(),siteId:this._siteId,blocks:[o(e),...i.map(o)]};l.leave(),this._duplicate(a,e)}});var H;const A=null!==(H=window)&&void 0!==H?H:void 0,U=[];A.Neo={Input:P,inputs:U,createInput(){const t=new P(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{});return U.push(t),t}}})(); //# sourceMappingURL=neo-main.js.map \ No newline at end of file diff --git a/src/assets/dist/neo-main.js.map b/src/assets/dist/neo-main.js.map index aa2008ac..afb31ed3 100644 --- a/src/assets/dist/neo-main.js.map +++ b/src/assets/dist/neo-main.js.map @@ -1 +1 @@ -{"version":3,"file":"neo-main.js","mappings":"mBACA,IAAIA,EAAsB,CCA1BA,EAAyBC,IACxB,IAAIC,EAASD,GAAUA,EAAOE,WAC7B,IAAOF,EAAiB,QACxB,IAAM,EAEP,OADAD,EAAoBI,EAAEF,EAAQ,CAAEG,EAAGH,IAC5BA,CAAM,ECLdF,EAAwB,CAACM,EAASC,KACjC,IAAI,IAAIC,KAAOD,EACXP,EAAoBS,EAAEF,EAAYC,KAASR,EAAoBS,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDR,EAAwB,CAACc,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,ICAlF,MAAM,EAA+BI,O,aCArC,MAAM,EAA+BC,Q,aCArC,MAAM,EAA+BC,M,aCArC,SAEEC,OAAQ,CAAC,IAETC,KAAAA,CAAOC,GAAuB,IAAbC,IAAIC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,KAAAA,UAAA,GAKnB,GAJwB,iBAAbF,IACTA,EAAWK,KAAKC,cAAcN,IAG5BC,EAAM,CACR,MAAMM,EAASF,KAAKG,eACpBD,EAAOE,QAAQT,GAEfA,EAAWO,CACb,CAEAF,KAAKP,OAAOW,KAAKT,EACnB,EAEAU,gBAAAA,CAAkBC,GAAwB,IAAbV,IAAIC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,KAAAA,UAAA,GAC/BG,KAAKN,MAAMM,KAAKC,cAAcK,GAAYV,EAC5C,EAEAW,KAAAA,GACE,OAAOP,KAAKP,OAAOK,OAAS,EACxBE,KAAKP,OAAOe,MACZR,KAAKG,cACX,EAEAA,YAAAA,GACE,OAAOM,MAAMC,KAAKV,KAAKP,OAAOO,KAAKP,OAAOK,OAAS,GACrD,EAEAa,KAAAA,CAAOC,GACL,MAAqB,iBAAVA,EACLA,EAAMC,QAAQ,MAAQ,EACjBb,KAAKC,cAAcW,GAGxBA,EAAMC,QAAQ,MAAQ,EACjBD,EAAME,MAAM,KAGjBF,EAAMC,QAAQ,MAAQ,EACjBD,EAAME,MAAM,KAGdF,EAGFH,MAAMC,KAAKE,EACpB,EAEAA,KAAAA,CAAOA,GAAwB,IAAjBG,EAASlB,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,IACxB,MAAMF,EAAWK,KAAKG,eAGtB,OAFAR,EAASS,KAAKQ,GAEPjB,EAASC,KAAKmB,EACvB,EAEAT,SAAAA,GAA2B,IAAhBA,EAAST,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,GACrB,MAAMmB,EAAShB,KAAKiB,cAEpB,OAAID,EACKA,EAASV,EAAUY,QAAQ,sBAAuB,UAGpDZ,CACT,EAEAa,QAAAA,GAA2B,IAAjBJ,EAASlB,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,IACpB,OAAOG,KAAKG,eAAeP,KAAKmB,EAClC,EAEAE,WAAAA,GACE,MAAMtB,EAAWK,KAAKG,eAEtB,OAAQR,EAASG,QACf,KAAK,EAAG,MAAO,GACf,KAAK,EAAG,OAAOH,EAAS,GAG1B,OAAOA,EAAS,GAAK,IAAMA,EAASyB,MAAM,GAAGxB,KAAK,MAAQ,GAC5D,EAEAK,cAAeK,GACNA,EAAUe,MAAM,eAAiB,ICnFtCC,EAAY/B,IAAAA,KAAagC,OAAO,CAEpCC,WAAY,KACZC,OAAQ,KACRC,aAAc,EAEdC,eAAgB,KAEhBC,IAAAA,CAAMC,EAAOC,QACa,IAAbA,GAA4BC,IAAAA,cAAgBF,KACrDC,EAAWD,EACXA,EAAQ,OAGVC,EAAWC,IAAAA,OAAS,CAAC,EAAGT,EAAUU,SAAUF,IACnCG,KAAO1C,IAAAA,OAEhBS,KAAKkC,KAAKL,EAAOC,GAEjB9B,KAAKwB,WAAaM,EAASK,UAC3BnC,KAAKyB,OAAS,GACdzB,KAAK0B,aAAeI,EAASJ,YAC/B,EAEAU,gBAAAA,GACE,OAAOpC,KAAKqC,SAASC,SAASC,IAChC,EAEAC,gBAAAA,GACE,MAAMC,EAASzC,KAAK8B,SAASY,eAE7B,GAAe,IAAXD,EAAc,CAChB,MAAME,EAAiB3C,KAAKqC,SAASC,SAASM,IAC9C,OAAOD,GAAmB3C,KAAK6C,OAAS7C,KAAK8C,aAAeH,GAAkBF,CAChF,CAEA,OAAOzC,KAAKkC,MACd,EAEAa,iBAAAA,CAAmBC,GACjB,OAAOhD,KAAKyB,OAAOwB,MAAKC,GAASA,EAAM1B,WAAW2B,GAAGH,IACvD,EAEAI,cAAAA,CAAgBF,GACd,MAAMG,EAAeH,EAAM1B,WAAW8B,SAASC,QAAQ,aAEvD,OAAOF,EAAavD,OAAS,GAAIE,KAAK+C,kBAAkBM,EAC1D,EAEAG,WAAAA,GACE,MAAMC,EAAOzD,KAEbA,KAAK2B,eAAiB,GACtB3B,KAAKqC,SAASqB,MAAK,WACjBD,EAAK9B,eAAevB,KAAKqD,EAAKV,kBAAkB/C,MAClD,IAEAA,KAAKkC,OACLlC,KAAK2D,qBACP,EAEAC,MAAAA,GACE,MAAMC,EAAW7D,KAAK8D,sBAElBD,GACF7D,KAAK+D,oBAAoBF,EAASX,MAAOW,EAASG,KAAMH,EAASI,WAGnEjE,KAAKkC,MACP,EAEAgC,UAAAA,GACE,MAAMT,EAAOzD,KACbA,KAAKqC,SAASqB,MAAK,WACjB,MAAMV,EAASjB,IAAE/B,MACXkD,EAAQO,EAAKV,kBAAkBC,GAGrC,GAFeA,EAAOM,SAASH,GAAGM,EAAKjC,YAGrC0B,EAAMiB,SAAS,OACV,CACL,MAAMC,EAAcX,EAAKL,eAAeF,GAExCA,EAAMiB,SAASC,EAAYC,WAAa,EAC1C,CAEArB,EAAOC,KAAK,aAAaS,MAAK,WAC5B,MAAMY,EAAcvC,IAAE/B,MAChBuE,EAAad,EAAKV,kBAAkBuB,GACpCF,EAAcX,EAAKL,eAAemB,GAExCA,EAAWJ,SAASC,EAAYC,WAAa,EAC/C,GACF,IAEArE,KAAKwE,0BAELxE,KAAKkC,MACP,EAEAuC,QAAAA,CAAUvB,GACRlD,KAAKyB,OAAOrB,KAAK8C,GAEjBlD,KAAK0E,SAASxB,EAAM1B,WACtB,EAEAmD,WAAAA,CAAazB,GACXlD,KAAKyB,OAASzB,KAAKyB,OAAOmD,QAAOC,GAAKA,IAAM3B,IAE5ClD,KAAK8E,YAAY5B,EAAM1B,WACzB,EAEAsC,mBAAAA,GACE,IAAIiB,EAAcC,OAAOC,UACrBC,EAAcF,OAAOG,UACrB5B,EAAU,KAEd,IAAK,MAAMM,KAAY7D,KAAKoF,kBAC1B,GAAIvB,EAASI,YAAc3C,EAAU+D,aAAc,CAChCrF,KAAK6C,OAAS7C,KAAK8C,aAErBe,EAASyB,UAAYzB,EAASyB,SAAWP,IACtDA,EAAclB,EAASyB,SACvB/B,EAAUM,EAEd,KAAO,CACY7D,KAAK6C,OAAS7C,KAAK8C,aAAe9C,KAAKuF,oBAEzC1B,EAASyB,UAAYzB,EAASyB,SAAWJ,IACtDA,EAAcrB,EAASyB,SACvB/B,EAAUM,EAEd,CAGF,OAAON,CACT,EAEAI,mBAAAA,GAGE3D,KAAKwF,eAAiBxF,KAAKqC,SAASC,SAASM,IAC7C5C,KAAKuF,oBAAsBvF,KAAKqC,SAASoD,SAH1B,GAKfzF,KAAKoF,kBAAoB,GAEzB,IAAK,MAAMlC,KAASlD,KAAKyB,OACvB,GAAuD,IAAnDyB,EAAM1B,WAAW+B,QAAQvD,KAAKqC,UAAUvC,OAAc,CACxD,MAAM4F,EAAY1F,KAAK2F,mBAAmBzC,GAE1C,IAAK,MAAMc,KAAQnF,OAAO+G,KAAKF,GAAY,CACzC,MAAMJ,EAAWI,EAAU1B,GACrBC,EAAYjE,KAAKwF,eAAiBF,EACpChE,EAAU+D,aACV/D,EAAUuE,eAEd7F,KAAKoF,kBAAkBhF,KAAK,CAC1B8C,QACAoC,WACAtB,OACAC,aAEJ,CACF,CAGF,MAAM6B,EAAc9F,KAAKwB,WAAWc,SAASM,IAAM5C,KAAKwB,WAAWiE,SAAYM,EAC/E/F,KAAKoF,kBAAkBhF,KAAK,CAC1B8C,MAAO,KACPoC,SAAUQ,EACV9B,KAAM1C,EAAU0E,SAChB/B,UAAW3C,EAAUuE,gBAEzB,EAEAF,kBAAAA,CAAoBzC,GAClB,MAAMwC,EAAY,CAAC,EAQnB,KAF6BxC,EAAM1B,WAAW8B,SAASC,QAAQ,0BAA0BzD,OAAS,GAExE,CACxB,MAAMwC,EAASY,EAAM1B,WAAWc,SAASM,IAEnCqD,EAAa/C,EAAM+C,aAEnBC,EAAchD,EAAM1B,WAAWiE,SAC/BU,EAAejD,EAAMkD,iBAAiBX,SACtCY,EAAiBJ,EAAa/C,EAAMoD,mBAAmBb,SAAW,EAClEc,EAA6BN,GAAc/C,EAAMsD,kBAAkB1G,OAAS,EAE9EoD,EAAMoD,mBAAmBxG,OAAS,EAChCoD,EAAMoD,mBAAmBhE,SAASM,IAAMM,EAAMsD,kBAAkBlE,SAASM,IACzEM,EAAMsD,kBAAkBf,SAH1B,EAKErB,EAAcpE,KAAKoD,eAAeF,GAMxC,GAJKkB,IAAepE,KAAKyG,yBAAyBrC,KAChDsB,EAAUpE,EAAUoF,cAAgBpE,GAAU6D,EAAeI,GAA4B,GAGvFF,EAAiB,GAAKnD,EAAM+C,cAAgBjG,KAAKyG,yBAAyBvD,GAAQ,CACpF,MAAMyD,EAAgBzD,EAAM0D,aAAapF,WAAWiE,SACpDC,EAAUpE,EAAUuF,eAAiBvE,EAAS4D,EA5BnC,GAEC,GA0BoES,EA3BrE,IA2B+F,CAC5G,CACF,CAEA,OAAOjB,CACT,EAEA3B,oBAAqB,SAAUb,GAA4E,IAArEc,EAAInE,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAGyB,EAAUoF,aAAczC,EAASpE,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAGyB,EAAUuE,eACzF,MAAMzB,EAAclB,EAAQlD,KAAKoD,eAAeF,GAAS,KACnD4D,EAAa9G,KAAKyG,yBAAyBrC,GAEjD,OAAQJ,GACN,KAAK1C,EAAUuF,cAC0C,IAAnD7G,KAAKqC,SAASkB,QAAQL,EAAM1B,YAAY1B,OAC1CoD,EAAM6D,iBAAiBC,OAAOhH,KAAKqC,UAC1ByE,GACT5D,EAAM1B,WAAWyF,MAAMjH,KAAKqC,UAE9B,MACF,KAAKf,EAAU0E,SACTc,GACF9G,KAAKwB,WAAWwF,OAAOhH,KAAKqC,UAE9B,MACF,QAEM4B,IAAc3C,EAAU+D,aACtByB,GACF5D,EAAM1B,WAAW0F,OAAOlH,KAAKqC,UAG3Ba,EAAMiE,eAAeC,YAAclE,EAAM+C,cAAgBjG,KAAKyG,yBAAyBvD,GACzFA,EAAM6D,iBAAiBM,QAAQrH,KAAKqC,UAC3ByE,GACT5D,EAAM1B,WAAWyF,MAAMjH,KAAKqC,UAMpCrC,KAAKsH,0BACLtH,KAAK2D,qBACP,EAEA8C,wBAAAA,CAA0BvD,GAExB,MAAMqE,EAAQrE,EAAQA,EAAMsE,WAAaxH,KAAK2B,eAAe,GAAG6F,WAC1DC,EAAYF,EAAMG,eAExB,GAAID,EAAY,EAAG,CACjB,MAAME,EAAczE,EAAQA,EAAMmB,YAAc,EAC1CuD,EAAoB5H,KAAK2B,eAAe,GAAG0C,WAC3CwD,EAAkBhD,GAAKA,EAAER,WAAauD,EAAoBD,EAAc,GAAKF,EAC7EK,EAA8BjD,IAClC,MAAMkD,EAAclD,EAAEmD,YAAYT,EAAMU,aAAa,GAErD,OAAOJ,EAAgBhD,IAAMkD,EAAYG,KAAKJ,EAA4B,EAG5E,GAAI9H,KAAK2B,eAAeiD,OAAOkD,GAA6BhI,OAAS,EACnE,OAAO,CAEX,CAGA,IAAKoD,EAAO,CACV,MAAMO,EAAOzD,KACPmI,EAAYnI,KAAKwB,WAAW4G,SAAS,+BAC3C,IAAIC,EAAiBF,EAAUrI,OAE/B,IAAK,MAAMwI,KAAgBtI,KAAK2B,eAE9B,IAAK2G,EAAanB,eAAeoB,cAC/B,OAAO,EAYX,OAPAJ,EAAUzE,MAAK,WACTD,EAAK9B,eAAe6G,SAAS/E,EAAKV,kBAAkB/C,QACtDqI,GAEJ,MAGIrI,KAAK0B,aAAe,GAAK2G,GAAkBrI,KAAK0B,aAKtD,CAEA,MAAM+G,EAAYvF,EAAMiE,eAClBuB,EAAiBD,EAAUE,oBAE3BC,EAAgB1F,EAAMoD,mBAAmB8B,SAAS,cAAcA,SAAS,aAC/E,IAAIS,EAAkBD,EAAc9I,OACpC,MAAMgJ,EAA+B,GAC/BrF,EAAOzD,KAcb,GAXA4I,EAAclF,MAAK,WACjB,MAAMa,EAAad,EAAKV,kBAAkB/C,MAEtCyD,EAAK9B,eAAe6G,SAASjE,GAC/BsE,IAEAC,EAA6B1I,KAAKmE,EAEtC,IAGImE,EAAiB,GAAKG,GAAmBH,EAC3C,OAAO,EAGT,MAAMK,EAAuB,GAE7B,IAAK,MAAMT,KAAgBtI,KAAK2B,eAAgB,CAE9C,IAAK8G,EAAUO,kBAAkBV,GAC/B,OAAO,EAKT,GAAIS,EAAqBP,SAASF,GAChC,SAGF,MAAMW,EAAmBX,EAAanB,eAChC+B,EAAmBD,EAAiBE,sBAI1C,GAAyB,IAArBD,EACF,SAGF,MAAME,EAAsBpJ,KAAK2B,eAAeiD,QAAOC,GAAKA,EAAEsC,eAAekC,cAAgBJ,EAAiBI,cAG9G,GAF4BP,EAA6BlE,QAAOC,GAAKA,EAAEsC,eAAekC,cAAgBJ,EAAiBI,cAE/FvJ,OAASsJ,EAAoBtJ,OAASoJ,EAC5D,OAAO,EAGTH,EAAqB3I,QAAQgJ,EAC/B,CAEA,OAAO,CACT,EAEA9B,uBAAAA,GACE,IAAK,MAAMgC,KAAWtJ,KAAKuJ,QAAS,CAClC,MAAMC,EAAKF,EAAQG,KAAK,YAClBvG,EAAQlD,KAAKyB,OAAOwB,MAAK4B,GAAKA,EAAErD,WAAWiI,KAAK,cAAgBD,IAEtEF,EAAQI,IAAI,CACVC,MAAOzG,EAAM1B,WAAWmI,QAAU,EAClClE,OAAQvC,EAAM1B,WAAWiE,UAE7B,CACF,GAEC,CAEDiB,aAAc,UACdG,cAAe,WACfb,SAAU,MACVX,aAAc,KACdQ,eAAgB,OAEhB7D,SAAU,CACRG,UAAW,KACXO,eAAgB,KAIpB,ICjYMkH,EAAY,CAChBC,KAAM,GACNC,OAAQ,IAGV,EAAevK,IAAAA,KAAagC,OAAO,CAEjCK,IAAAA,GAAqB,IAAfE,EAAQjC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAC,EAChBiC,EAAWjD,OAAOkL,OAAO,CAAC,EAAGH,EAAW9H,GAExC9B,KAAKgK,MAAQlI,EAAS+H,KACtB7J,KAAKiK,QAAUnI,EAASgI,OACxB9J,KAAKkK,KAAOpI,EAASqI,GACvB,EAEAC,SAAAA,GAAe,OAAO3J,MAAMC,KAAKV,KAAKiK,QAAS,EAE/CI,OAAAA,GAAa,OAAOrK,KAAKgK,KAAM,EAO/BM,MAAAA,GAAY,OAAOtK,KAAKkK,IAAK,I,sqBCrB/B,MAAMN,EAAY,CAChBJ,IAAK,EACLe,eAAgB,EAChBC,UAAW,EACXX,KAAM,GACNY,OAAQ,GACRC,UAAW,EACXxB,iBAAkB,EAClBR,eAAgB,EAChBiC,sBAAsB,EACtBC,aAAa,EACbC,UAAU,EACVC,KAAM,KACNC,SAAU,GACVC,yBAAyB,EACzBC,iBAAiB,EACjBC,iBAAiB,EACjBC,gBAAgB,GAGlB,EAAe5L,IAAAA,KAAagC,OAAO,CAEjCK,IAAAA,GAAqB,IAAAwJ,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA,IAAf3J,EAAQjC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAC,EAoBY,IAAA6L,EAAAC,GAnB5B7J,EAAWjD,OAAOkL,OAAO,CAAC,EAAGH,EAAW9H,GAExC9B,KAAK4L,IAAoB,EAAd9J,EAAS0H,GACpBxJ,KAAK6L,eAA0C,EAAzB/J,EAASyI,cAC/BvK,KAAK8L,WAAkC,EAArBhK,EAAS0I,UAC3BxK,KAAKgK,MAAQlI,EAAS+H,KACtB7J,KAAK+L,QAAUjK,EAAS2I,OACxBzK,KAAKgM,aAAelK,EAASmK,YAC7BjM,KAAKkM,SAAWpK,EAASqK,QACzBnM,KAAKoM,WAAkC,EAArBtK,EAASuK,UAC3BrM,KAAKsM,WAAkC,EAArBxK,EAAS4I,UAC3B1K,KAAKuM,kBAAgD,EAA5BzK,EAASoH,iBAClClJ,KAAKwM,kBAAgD,EAA5B1K,EAASoH,iBAClClJ,KAAKyM,gBAA4C,EAA1B3K,EAAS4K,eAChC1M,KAAK2M,gBAA4C,EAA1B7K,EAAS4G,eAChC1I,KAAK4M,sBAAwB9K,EAAS6I,qBACtC3K,KAAK6M,aAAe/K,EAAS8I,YAC7B5K,KAAK8M,UAAYhL,EAAS+I,SAC1B7K,KAAK+M,UAAYjL,EAASiJ,SACJ,OAAlBjJ,EAASgJ,MACX9K,KAAKgN,MAOJ,QAPStB,EAAyB,QAAzBC,EAAG7J,EAASgJ,KAAKC,gBAAQ,IAAAY,OAAA,EAAtBA,EAAwBsB,KACnCC,GAAOA,aAAeC,EAClBD,EACA,IAAIC,EAAI,CACRtD,KAAMqD,EACN/C,IAAKrI,EAASgJ,KAAKsC,QAAQF,cAEhC,IAAAxB,EAAAA,EAAI,GAEL1L,KAAKgN,MAAQ,KAEfhN,KAAKqN,MAA2B,QAAtBjC,EAAgB,QAAhBC,EAAGvJ,EAASgJ,YAAI,IAAAO,OAAA,EAAbA,EAAeiC,YAAI,IAAAlC,EAAAA,EAAI,GACpCpL,KAAKuN,IAAuB,QAApBjC,EAAgB,QAAhBC,EAAGzJ,EAASgJ,YAAI,IAAAS,OAAA,EAAbA,EAAeiC,UAAE,IAAAlC,EAAAA,EAAI,GAChCtL,KAAKyN,8BAAoE,QAAvCjC,EAAgB,QAAhBC,EAAG3J,EAASgJ,YAAI,IAAAW,OAAA,EAAbA,EAAeiC,6BAAqB,IAAAlC,EAAAA,EAAI,CAAC,EAC9ExL,KAAK2N,yBAA2B7L,EAASkJ,wBACzChL,KAAK4N,iBAAmB9L,EAASmJ,gBACjCjL,KAAK6N,iBAAmB/L,EAASoJ,gBACjClL,KAAK8N,gBAAkBhM,EAASqJ,cAClC,EAEA4C,QAAOA,IAAa,YACpBC,KAAAA,GAAW,OAAOhO,KAAK4L,GAAI,EAC3BqC,gBAAAA,GAAsB,OAAOjO,KAAK6L,cAAe,EACjDqC,YAAAA,GAAkB,OAAOlO,KAAK8L,UAAW,EACzCzB,OAAAA,GAAa,OAAOrK,KAAKgK,KAAM,EAC/BX,SAAAA,GAAe,OAAOrJ,KAAK+L,OAAQ,EACnCoC,cAAAA,GAAoB,OAAOnO,KAAKgM,YAAa,EAC7CoC,UAAAA,GAAgB,OAAOpO,KAAKkM,QAAS,EACrCmC,YAAAA,GAAkB,OAAOrO,KAAKoM,UAAW,EACzCkC,YAAAA,GAAkB,OAAOtO,KAAKsM,UAAW,EACzCiC,mBAAAA,GAAyB,OAAOvO,KAAKuM,iBAAkB,EACvDpD,mBAAAA,GAAyB,OAAOnJ,KAAKwM,iBAAkB,EACvDgC,iBAAAA,GAAuB,OAAOxO,KAAKyM,eAAgB,EACnD9D,iBAAAA,GAAuB,OAAO3I,KAAK2M,eAAgB,EACnD8B,uBAAAA,GAA6B,OAAOzO,KAAK4M,qBAAsB,EAC/D8B,cAAAA,GAAoB,OAAO1O,KAAK6M,YAAa,EAC7CtE,WAAAA,GAAiB,OAAOvI,KAAK8M,SAAU,EACvC6B,WAAAA,GAAiB,OAAO3O,KAAK+M,SAAU,EAEvC6B,OAAAA,GAAa,OAAsB,OAAf5O,KAAKgN,MAAiBvM,MAAMC,KAAKV,KAAKgN,OAAS,IAAK,EACxE,cAAM6B,GACJ,GAAmB,OAAf7O,KAAKgN,MACP,OAGF,MAAMvD,EAAO,CACXqF,UAAWC,EAAG9N,cACdQ,OAAQ,CAAC,CACPuN,WAAW,EACX7C,SAAS,EACT8C,MAAO,EACPjL,KAAMhE,KAAK4L,OAGTsD,QAAuB1P,IAAAA,kBAAwB,OAAQ,0BAA2B,CAAEiK,SAC1F,GAAIyF,EAAezF,KAAK0F,QAAS,KAAAC,EAAAC,EAC/B,MAAMvE,EAAOoE,EAAezF,KAAKhI,OAAO,GAAGqJ,KAC3C9K,KAAKgN,MAKJ,QALSoC,EAAgB,QAAhBC,EAAGvE,EAAKC,gBAAQ,IAAAsE,OAAA,EAAbA,EAAepC,KAC1BC,GAAO,IAAIC,EAAI,CACbtD,KAAMqD,EACN/C,IAAKW,EAAKsC,QAAQF,cAErB,IAAAkC,EAAAA,EAAI,GACLpP,KAAKqN,MAAQvC,EAAKwC,KAClBtN,KAAKuN,IAAMzC,EAAK0C,EAClB,CACF,EAEA8B,OAAAA,GAAyB,IAAhBC,EAAO1P,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,KACjB,OAAOG,KAAKwP,2BAA2BxP,KAAKqN,MAAOkC,EACrD,EAEAE,KAAAA,GAAuB,IAAhBF,EAAO1P,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,KACf,OAAOG,KAAKwP,2BAA2BxP,KAAKuN,IAAKgC,EACnD,EAEAG,+BAAAA,GACE,O,+VAAAC,CAAA,GACK3P,KAAKyN,8BAEZ,EAEA+B,0BAAAA,CAA4BI,GAAuB,IAAhBL,EAAO1P,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,KAC3C,OAAmB,OAAZ0P,EAAmBK,EAAM1O,QAAQ,gBAAiBqO,GAAWK,CACtE,EAEAC,kBAAAA,CAAoBhO,GAClB,MAAMiO,EAAYjO,EAAM+C,QAAOmL,GAA2B,UAAnBA,EAAKhC,WAAyB/N,KAAKgQ,cAAcD,EAAK1G,eAC7F,OAAOyG,EAAUlL,QAAO,CAACmL,EAAME,KAC7B,GAAuB,UAAnBF,EAAKhC,UAAuB,CAC9B,MAAMmC,EAAWJ,EAAUG,EAAI,GAC/B,OAAOC,GAAmC,UAAvBA,EAASnC,SAC9B,CAEA,OAAO,CAAI,GAEf,EAEA3G,QAAAA,GACE,MAAM+I,EAAKnQ,KAAK0O,iBAChB,OAAc,IAAPyB,GAAsB,MAAPA,GAAe1P,MAAM2P,QAAQD,IAAOA,EAAGrQ,OAAS,CACxE,EAEAkQ,aAAAA,CAAevF,GACb,MAAM0F,EAAKnQ,KAAK0O,iBAChB,OAAc,IAAPyB,GAAsB,MAAPA,GAAe1P,MAAM2P,QAAQD,IAAOA,EAAG3H,SAASiC,EACxE,EAEAzB,iBAAAA,CAAmB9F,GACjB,OAAOlD,KAAKgQ,cAAc9M,EAAMiE,eAAekC,YACjD,EAEA2B,uBAAAA,GACE,OAAOhL,KAAK2N,wBACd,EAEA0C,iBAAAA,GACE,OAAOrQ,KAAK4N,gBACd,EAEA0C,iBAAAA,GACE,OAAOtQ,KAAK6N,gBACd,EAEA0C,gBAAAA,GACE,OAAOvQ,KAAK8N,eACd,IC5KIlE,EAAY,CAChBJ,IAAK,EACLgB,UAAW,EACXgG,mBAAoB,KACpB3G,KAAM,IAGR,EAAetK,IAAAA,KAAagC,OAAO,CAEjCK,IAAAA,GAAqB,IAAfE,EAAQjC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAC,EAChBiC,EAAWjD,OAAOkL,OAAO,CAAC,EAAGH,EAAW9H,GAExC9B,KAAK4L,IAAoB,EAAd9J,EAAS0H,GACpBxJ,KAAK8L,WAAkC,EAArBhK,EAAS0I,UAC3BxK,KAAKyQ,oBAAsB3O,EAAS0O,mBACpCxQ,KAAKgK,MAAQlI,EAAS+H,IACxB,EAEAkE,QAAOA,IAAa,QACpBC,KAAAA,GAAW,OAAOhO,KAAK4L,GAAI,EAC3BsC,YAAAA,GAAkB,OAAOlO,KAAK8L,UAAW,EACzCzB,OAAAA,GAAa,OAAOrK,KAAKgK,KAAM,EAC/B0G,qBAAAA,GAA2B,OAAO1Q,KAAKyQ,mBAAoB,EAC3DE,OAAAA,GAAa,OAAQ3Q,KAAKgK,KAAM,ICtBlCjI,IAAAA,GAAK6O,SAAW,SAAUC,EAAOC,GAC/B,OAAO9Q,KAAK0D,MAAK,WACD,IAAVmN,EACFC,EAAQzJ,QAAQrH,MAEhB8Q,EAAQ1I,WAAW2I,GAAGF,EAAQ,GAAG5J,MAAMjH,KAE3C,GACF,ECAA,MAAM4J,EAAY,CAChBkF,UAAW,GACXrG,UAAW,KACXqC,KAAM,KACNtB,GAAI,KACJyF,MAAO,EACP+B,QAAS,KACT7E,SAAS,EACT6C,WAAW,EACXiC,UAAU,EACVC,aAAa,EACbC,qBAAqB,GAGjBC,EAAa,CAAC,EAEdC,EAAa,CACjB,IAAK,QACL,IAAK,OACL,IAAK,OACL,IAAK,SACL,IAAK,QACL,IAAK,UAGP,SAASC,IACP,IAAIC,EAAMvR,KAAKwR,MAAQxR,KAAKyR,IAE5B,GAAIF,EAAK,CACP,MAAMG,EAAaH,EAAI1Q,QAAQ,KAE/B0Q,EAAOG,EAAa,EAAIH,EAAMA,EAAII,OAAO,EAAGD,GAE5C,MAAME,GAAS/S,OAAOM,UAAUC,eAAeC,KAAK+R,EAAYG,GAGhE,OAFAH,EAAWG,GAAO,EAEXK,CACT,CAEA,OAAO,CACT,CAEA,SAASC,EAAaC,GACpB,OAAOA,EAAMA,EAAI5Q,QAAQ,aAAa6Q,GAAKV,EAAWU,KAAM,EAC9D,CAEA,SAASC,EAAQD,GAAW,IAARE,EAACpS,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,GAEtB,OADAkS,EAAIA,GAAK,IACAjS,OAASmS,EAAIF,EAAE3Q,MAAM,EAAG6Q,EAAI,GAAK,MAAQF,CACpD,CAEA,QAAexS,IAAAA,KAAagC,OAAO,CAEjC2Q,YAAa,GACbC,OAAQ,KACRC,WAAY,KACZC,cAAc,EACdC,WAAW,EACXpG,UAAU,EACVqG,WAAW,EACXC,cAAe,KACfC,gBAAgB,EAChBzF,MAAO,KACPK,MAAO,KACPE,IAAK,KAEL3L,IAAAA,GAA8C,IAAAwJ,EAAAC,EAAAC,EAAAC,EAAA,IAAxCzJ,EAAQjC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAC,EAAG6S,EAAe7S,UAAAC,OAAA,QAAAC,IAAAF,UAAA,IAAAA,UAAA,GAMN,IAAA6L,EAAAC,GAL5B7J,EAAWjD,OAAOkL,OAAO,CAAC,EAAGH,EAAW9H,GAExC9B,KAAKkS,YAAcnD,EAAGpO,MAAMmB,EAASgN,WACrC9O,KAAKmS,OAASrQ,EAASyF,MACvBvH,KAAKoS,WAAatQ,EAAS2G,UACL,OAAlB3G,EAASgJ,MACX9K,KAAKgN,MAOJ,QAPStB,EAAyB,QAAzBC,EAAG7J,EAASgJ,KAAKC,gBAAQ,IAAAY,OAAA,EAAtBA,EAAwBsB,KACnCC,GAAOA,aAAeC,EAClBD,EACA,IAAIC,EAAI,CACRtD,KAAMqD,EACN/C,IAAKrI,EAASgJ,KAAKsC,QAAQF,cAEhC,IAAAxB,EAAAA,EAAI,GAEL1L,KAAKgN,MAAQ,KAEfhN,KAAKqN,MAA2B,QAAtBjC,EAAgB,QAAhBC,EAAGvJ,EAASgJ,YAAI,IAAAO,OAAA,EAAbA,EAAeiC,YAAI,IAAAlC,EAAAA,EAAI,KACpCpL,KAAKuN,IAAuB,QAApBjC,EAAgB,QAAhBC,EAAGzJ,EAASgJ,YAAI,IAAAS,OAAA,EAAbA,EAAeiC,UAAE,IAAAlC,EAAAA,EAAI,KAChCtL,KAAK4L,IAAM9J,EAAS0H,GACpBxJ,KAAKkM,SAAWpK,EAASqK,SAAWnM,KAAKoS,WAAWhE,aACpDpO,KAAK2S,gBAAkB7Q,EAASqK,QAChCnM,KAAKuS,UAAYzQ,EAASmP,SAC1BjR,KAAK4S,aAAe9Q,EAASoP,YAC7BlR,KAAK6S,gCAAkC/Q,EAAS2G,UAAUuC,0BAC1DhL,KAAKwB,WAAakR,EACd1S,KAAK8S,iBAAiBhR,EAASqP,qBAC/BnR,KAAKmS,OAAO3Q,WAAWyB,KAAK,kBAAD8P,OAAmB/S,KAAK4L,IAAG,MAE1D,MAAMoH,EAAOhT,KAAKwB,WAAWyB,KAAK,gBAClCjD,KAAKiT,eAAiBD,EAAKpO,OAAO,gBAADmO,OAAiB/S,KAAK4L,IAAG,sBAC1D5L,KAAKwG,kBAAoBwM,EAAKpO,OAAO,gBAADmO,OAAiB/S,KAAK4L,IAAG,yBAC7D5L,KAAKoG,iBAAmB4M,EAAKpO,OAAO,gBAADmO,OAAiB/S,KAAK4L,IAAG,wBAC5D5L,KAAKkT,qBAAuBF,EAAKpO,OAAO,gBAADmO,OAAiB/S,KAAK4L,IAAG,4BAChE5L,KAAKmT,sBAAwBH,EAAKpO,OAAO,gBAADmO,OAAiB/S,KAAK4L,IAAG,6BACjE5L,KAAKoT,iBAAmBJ,EAAKpO,OAAO,gBAADmO,OAAiB/S,KAAK4L,IAAG,wBAC5D5L,KAAKqT,cAAgBrT,KAAKwG,kBAAkB4B,SAAS,qBACrDpI,KAAKsT,eAAiBN,EAAKpO,OAAO,gBAADmO,OAAiB/S,KAAK4L,IAAG,sBAC1D5L,KAAKuT,kBAAoBP,EAAKpO,OAAO,gBAADmO,OAAiB/S,KAAK4L,IAAG,yBAC7D5L,KAAKwT,gBAAkBR,EAAKpO,OAAO,gBAADmO,OAAiB/S,KAAK4L,IAAG,sBAC3D5L,KAAKyT,eAAiBT,EAAKpO,OAAO,gBAADmO,OAAiB/S,KAAK4L,IAAG,sBAC1D5L,KAAK0T,cAAgBV,EAAKpO,OAAO,gBAADmO,OAAiB/S,KAAK4L,IAAG,qBACzD5L,KAAK2T,YAAcX,EAAKpO,OAAO,gBAADmO,OAAiB/S,KAAK4L,IAAG,mBACvD5L,KAAK4T,gBAAkBZ,EAAKpO,OAAO,gBAADmO,OAAiB/S,KAAK4L,IAAG,uBAC3D5L,KAAK6T,QAAUb,EAAKpO,OAAO,gBAADmO,OAAiB/S,KAAK4L,IAAG,cACnD5L,KAAK8T,WAAad,EAAKpO,OAAO,gBAADmO,OAAiB/S,KAAK4L,IAAG,iBACtD5L,KAAK+T,MAAQ/T,KAAKwB,WAAW+B,QAAQ,QACrCvD,KAAKgU,aAAalS,EAASkP,SAE3B,IAAIiD,GAAY,EAChB,GAAIjU,KAAKoS,WACP,IAAK,MAAM8B,KAAWlU,KAAKoS,WAAWzD,cAAe,CACnD,MAAMwF,EAAW,qBAAHpB,OAAwBmB,EAAO,MAEzClU,KAAKqT,cAAczO,OAAOuP,GAAUlR,KAAK,aAAanD,OAAS,IACjEmU,GAAY,EACZjU,KAAKoU,WAAWxP,OAAOuP,GAAUE,SAAS,SAE9C,CAGFrU,KAAKmE,SAASrC,EAASmN,OACvBjP,KAAKsU,kBAAgBL,IAAoBnS,EAASkN,WAAW,GAAO,GACpEhP,KAAKuU,kBAAkBvU,KAAK4S,cAE5B5S,KAAKwU,YAAYxU,KAAKoG,iBAAkB,WAAY,qBACpDpG,KAAKwB,WAAWiI,KAAK,QAASzJ,KAChC,EAEA8S,gBAAAA,GAAsC,IAAA2B,EAAA,IAApBC,EAAU7U,UAAAC,OAAA,QAAAC,IAAAF,UAAA,IAAAA,UAAA,GAC1BkP,EAAGrP,MAAMM,KAAKkS,aACd,MAAMyC,EAAgB5F,EAAG9N,cACnB2T,EAAc7F,EAAG5N,SAAS,KAChC4N,EAAGxO,QAEH,MAAMyD,EAAOhE,KAAKoS,WACZtH,EAAiB,QAAb2J,EAAGzU,KAAKgN,aAAK,IAAAyH,EAAAA,EAAIzQ,EAAK4K,UAC1BiG,EAAU/J,EAAKhL,OAAS,EACxBsH,EAAWpD,EAAKoD,WAChB0N,EAAiB,GAAH/B,OAAM/O,EAAKqG,UAAS,KAAA0I,OAAIvT,IAAAA,EAAQ,MAAO,YACrDuV,EAAe,wBAAHhC,OAA2B/S,KAAK4L,KAC5CoJ,EAAe,GAAHjC,OAAM/O,EAAKqG,UAAS,KAAA0I,OAAIvT,IAAAA,EAAQ,MAAO,SACnDyV,EAAa,sBAAHlC,OAAyB/S,KAAK4L,KACxCsJ,EAAgB,GAAHnC,OAAM/S,KAAKkS,YAAY,GAAE,KAAAa,OAAI/S,KAAKkS,YAAY9Q,MAAM,EAAGpB,KAAKkS,YAAYpS,OAAS,GAAGF,KAAK,MAAK,gBAC3GuV,EAAc,GAkCpB,GAjCAA,EAAY/U,KAAK,0CAAD2S,OACmB/O,EAAKqF,YAAW,QAAA0J,OAAO/S,KAAKoV,WAAa,YAAc,WAAU,KAAArC,OAAK8B,GAAYzN,EAAwB,GAAb,WAAe,KAAA2L,OAAI3L,EAAW,YAAc,GAAE,qBAAA2L,OAAoB/S,KAAK4L,IAAG,uBAAAmH,OAAsB/O,EAAKqG,UAAS,2CAAA0I,OAC7M4B,EAAa,mBAAA5B,OAAkB/O,EAAKqF,YAAW,2CAAA0J,OAC/C4B,EAAa,sBAAA5B,OAAqB/S,KAAKkM,SAAW,IAAM,GAAE,kBAAA6G,OAAiB/S,KAAK4L,IAAG,yDAAAmH,OACnF4B,EAAa,oBAAA5B,OAAmB/S,KAAKqV,OAAM,kBAAAtC,OAAiB/S,KAAK4L,IAAG,uDAAAmH,OACpEmC,EAAa,eAAAnC,OAAc/S,KAAK4L,IAAG,kBAAAmH,OAAiB/S,KAAK4L,IAAG,uBAEzF0J,MAAMC,SAASvV,KAAK4L,OACtBuJ,EAAY/U,KAAK,wCAAD2S,OACe4B,EAAa,wBAAA5B,OAAwB/S,KAAKsS,UAAkB,GAAN,IAAQ,kBAAAS,OAAiB/S,KAAK4L,IAAG,uBAGxHuJ,EAAY/U,KAAK,sDAAD2S,OAC+B/S,KAAK4L,IAAG,iFAAAmH,OACD/S,KAAK4L,IAAG,uFAAAmH,OACN/S,KAAK4L,IAAG,yEAAAmH,OACRvT,IAAAA,EAAQ,MAAO,UAAS,iBAAAuT,OAAgBvT,IAAAA,EAAQ,MAAO,UAAS,0IAAAuT,OAGxE/S,KAAK4L,IAAG,aAAAmH,OAAY/O,EAAKqG,UAAS,6JAAA0I,OAGpC/S,KAAK4L,IAAG,sIAAAmH,OAGC/S,KAAK4L,IAAG,6FAG3DiJ,GAAWzN,IACb+N,EAAY/U,KAAK,yDAAD2S,OACgC/S,KAAK4L,IAAG,4BAGtDd,EAAKhL,OAAS,EAAG,CACnBqV,EAAY/U,KAAK,uDAAD2S,OAC8B/S,KAAK4L,IAAG,sBAEtD,IAAK,IAAIqE,EAAI,EAAGA,EAAInF,EAAKhL,OAAQmQ,IAAK,CACpC,MAAM/C,EAAMpC,EAAKmF,GACXiE,EAAUhH,EAAI7C,UACdmL,EAAStI,EAAI5C,SACnB6K,EAAY/U,KAAK,mCAAD2S,OACS9C,EAAoB,GAAhB,cAAkB,kBAAA8C,OAAiB/S,KAAK4L,IAAG,kCAAAmH,OAAiCmB,EAAO,yBAAAnB,OAAwByC,EAAM,MAAAzC,OAAKmB,EAAO,QAC5J,CAEAiB,EAAY/U,KAAK,0GAAD2S,OAGsCvT,IAAAA,EAAQ,MAAO,QAAO,oBAAAuT,OAAmBkC,EAAU,kBAAAlC,OAAiBiC,EAAY,0CAAAjC,OAAyC/S,KAAK4L,IAAG,+DAAAmH,OACzKjI,EAAK,GAAGT,UAAS,0DAAA0I,OAEVkC,EAAU,iFAG/B,IAAK,IAAIhF,EAAI,EAAGA,EAAInF,EAAKhL,OAAQmQ,IAAK,CACpC,MAAM/C,EAAMpC,EAAKmF,GACXiE,EAAUhH,EAAI7C,UACdmL,EAAStI,EAAI5C,SACnB6K,EAAY/U,KAAK,uDAAD2S,OAEG9C,EAA6B,GAAzB,uBAA2B,sDAAA8C,OAAqDmB,EAAO,kBAAAnB,OAAiB/S,KAAK4L,IAAG,kCAAAmH,OAAiCmB,EAAO,yBAAAnB,OAAwByC,EAAM,MAAAzC,OAAKmB,EAAO,mCAE3N,CAEAiB,EAAY/U,KAAK,0EAInB,CAEA+U,EAAY/U,KAAK,0FAAD2S,OAE+C/S,KAAK4L,IAAG,4DAAAmH,OAC5BvT,IAAAA,EAAQ,MAAO,YAAW,mNAAAuT,OAIsBvT,IAAAA,EAAQ,MAAO,WAAU,qBAAAuT,OAAoBgC,EAAY,kBAAAhC,OAAiB+B,EAAc,0CAAA/B,OAAyC/S,KAAK4L,IAAG,yDAAAmH,OAC7MgC,EAAY,gDAAAhC,OAA+C/S,KAAK4L,IAAG,8DAGtFiJ,GAAWzN,IACb+N,EAAY/U,KAAK,6HAAD2S,OACoGvT,IAAAA,EAAQ,MAAO,YAAW,MAAAuT,OAAKvT,IAAAA,EAAQ,MAAO,YAAW,kJAAAuT,OAC9CvT,IAAAA,EAAQ,MAAO,UAAS,MAAAuT,OAAKvT,IAAAA,EAAQ,MAAO,UAAS,cAGtL2V,EAAY/U,KAAK,4HAAD2S,OACqGvT,IAAAA,EAAQ,MAAO,WAAU,MAAAuT,OAAKvT,IAAAA,EAAQ,MAAO,WAAU,mJAAAuT,OAC1CvT,IAAAA,EAAQ,MAAO,UAAS,MAAAuT,OAAKvT,IAAAA,EAAQ,MAAO,UAAS,gJAAAuT,OACxDvT,IAAAA,EAAQ,MAAO,WAAU,MAAAuT,OAAKvT,IAAAA,EAAQ,MAAO,WAAU,kJAAAuT,OACrDvT,IAAAA,EAAQ,MAAO,aAAY,MAAAuT,OAAKvT,IAAAA,EAAQ,MAAO,aAAY,sNAAAuT,OAI/EvT,IAAAA,EAAQ,MAAO,mBAAkB,MAAAuT,OAAKvT,IAAAA,EAAQ,MAAO,mBAAkB,gIAAAuT,OACrEvT,IAAAA,EAAQ,MAAO,QAAO,MAAAuT,OAAKvT,IAAAA,EAAQ,MAAO,QAAO,iIAAAuT,OAChDvT,IAAAA,EAAQ,MAAO,SAAQ,MAAAuT,OAAKvT,IAAAA,EAAQ,MAAO,SAAQ,qIAAAuT,OAC/CvT,IAAAA,EAAQ,MAAO,SAAQ,MAAAuT,OAAKvT,IAAAA,EAAQ,MAAO,SAAQ,uCAGnKwE,EAAKsM,qBACP6E,EAAY/U,KAAK,sMAAD2S,OAG8GvT,IAAAA,EAAQ,MAAO,UAAS,MAAAuT,OAAKvT,IAAAA,EAAQ,MAAO,UAAS,uCAIrL2V,EAAY/U,KAAK,+KAAD2S,OAKwBvT,IAAAA,EAAQ,MAAO,WAAU,kBAAAuT,OAAiBvT,IAAAA,EAAQ,MAAO,WAAU,gCAAAuT,OAA+B/S,KAAK4L,IAAG,8EAK9IiJ,GAAWzN,KACb+N,EAAY/U,KAAK,oDAAD2S,OAC2B/S,KAAK4L,IAAG,sBAE/CiJ,GACFM,EAAY/U,KAAK,yDAAD2S,OAC8B/S,KAAK4L,IAAG,sCAAAmH,OAChD/S,KAAKsP,UAAS,uBAIlBlI,GAAYpH,KAAK6S,gCACnBsC,EAAY/U,KAAK,0DAAD2S,OAC+B/S,KAAK4L,IAAG,0EAAAmH,OACd/S,KAAK4L,IAAG,0EAAAmH,OAE1B/S,KAAK4L,IAAG,4EAAAmH,OACR/S,KAAK4L,IAAG,mGAAAmH,OACYvT,IAAAA,EAAQ,MAAO,qGAAoG,+CAKhK2V,EAAY/U,KAAK,qBAIfgH,GACF+N,EAAY/U,KAAK,kEAAD2S,OACyC/S,KAAK4L,IAAG,yCAGnEuJ,EAAY/U,KAAK,oDAGjB,MAAMqV,EAAe1T,IAAEoT,EAAYvV,KAAK,KAcxC,OAZI8U,GACF3S,IAAE,UACCsS,SAAS,+BACTnV,KAAK,aAAc,GAAF6T,OAAK/S,KAAK4L,IAAG,sBAC9B5E,OAAOxH,IAAAA,GAASkW,kBAAkB,CACjClM,GAAI,GAAFuJ,OAAK6B,EAAW,KAAA7B,OAAI/O,EAAKqF,YAAW,cACtCsM,MAAO,CAAC,OAAQ,QAAS,SACzB/U,MAAOoD,EAAKqF,eAEbuM,YAAYH,EAAaxS,KAAK,gCAG5BwS,CACT,EAEAI,MAAAA,GAAmC,IAAAC,EAAA,IAA3BC,IAAkBlW,UAAAC,OAAA,QAAAC,IAAAF,UAAA,KAAAA,UAAA,GACxB,IAAIG,KAAKqS,aAAT,CA6DA,GAxDArS,KAAKgW,MAAQjU,IAAE/B,KAAKyP,SAAS7K,OAAO0M,GACpC/R,IAAAA,KAAayH,OAAOhH,KAAKgW,OAErBD,GACFvW,IAAAA,eAAqBQ,KAAKwG,mBAG5BxG,KAAK+T,MAAQ/T,KAAKwB,WAAW+B,QAAQ,QACrCvD,KAAKiW,WAELjW,KAAKkW,cAAgBlW,KAAKwT,gBAAgB/J,KAAK,YAAc,IAAIlK,IAAAA,gBAAuBS,KAAKwT,iBAC7FxT,KAAKkW,cAAcC,GAAG,QAAQ,KAE5BnW,KAAKmS,OACFlK,YACArD,QAAQ1B,GAAUA,EAAM1B,WAAW4U,SAAS,YAC5CC,SAASnT,GAAUA,EAAMoT,oBAAmB,KAC/CtW,KAAKwB,WAAW6S,SAAS,SAAS,IAEpCrU,KAAKkW,cAAcC,GAAG,QAAQ,IAAMnW,KAAKwB,WAAW+U,YAAY,YAEhEvW,KAAKsT,eAAiBtT,KAAKkW,cAAc1U,WACzCxB,KAAKwU,YAAYxU,KAAKsT,eAAerQ,KAAK,iBAAkB,QAASjD,KAAKwW,oBAC1ExW,KAAKwU,YAAYxU,KAAKsT,eAAerQ,KAAK,iBAAkB,UAAWjD,KAAKyW,sBAE5EzW,KAAK0W,cAAc1W,KAAK2S,iBAExB3S,KAAKqS,cAAe,EACP,QAAbyD,EAAA9V,KAAK2W,gBAAQ,IAAAb,GAAbA,EAAeD,SAEftW,IAAAA,uBAA8B,IAAMS,KAAK4W,yBAOzC5W,KAAKwB,WAAW2U,GAAG,YAAa,gBAAgB,SAAUU,GACxD9U,IAAE/B,MAAMqU,SAAS,kBACnB,IAGIrU,KAAKwB,WAAW4U,SAAS,eAC3BpW,KAAKwB,WAAWsV,QAAQ,+BAA+BpT,MAAK,CAACqT,EAAGC,KAC9D,MAAMC,EAAclV,IAAEiV,GAAa1T,SAC7Bc,EAAc6S,EAAY1T,QAAQ,aAAakG,KAAK,SACpDyN,EAAWD,EAAYpG,QAC7BzM,EAAYgQ,WAAWxP,OAAO,QAAQmM,GAAGmG,GACtCC,IAAI/S,EAAYgQ,WAAWxP,OAAO,cAAcmM,GAAGmG,IACnDC,IAAI/S,EAAY5C,WAAWyB,KAAK,iCAChCoR,SAAS,cACTrN,OAAO,uCAAD+L,OAAwCvT,IAAAA,EAAQ,MAAO,SAAQ,aAAY,KAKnFQ,KAAK4R,QAAS,CACjB5R,KAAKwS,cAAgB,CACnBrG,QAASnM,KAAKkM,SACd+C,MAAOjP,KAAKqV,OACZ+B,QAASpX,KAAKqX,gBAGhB,MAAMC,EAAeA,IAAMtX,KAAKuX,gBAC1BC,EAAW,IAAIC,OAAOC,kBAAiB,KAC3CC,WAAWL,EAAc,KAGpBtX,KAAKmH,eAAeoJ,oBAAuBvQ,KAAKwB,WAAW4U,SAAS,yBACvEpW,KAAKwB,WAAW6S,SAAS,uBAC3B,IAGFmD,EAASI,QAAQ5X,KAAKwB,WAAW,GAAI,CACnCqW,YAAY,EACZC,WAAW,EACXC,eAAe,EACfC,SAAS,IAGXhY,KAAKwG,kBAAkB2P,GAAG,8BAA+B,2CAA4CmB,GACrGtX,KAAKwG,kBAAkB2P,GAAG,oBAAqB,wDAAyDmB,GAExGtX,KAAKiY,sBAAwBT,EAG7BxX,KAAKsT,eACFrQ,KAAK,0EACLK,SACA4U,YAAY,UAAWlY,KAAKoS,WAAWhE,aAC5C,CAEcpO,KAAKwG,kBC7ajBhH,IAAAA,sBACFA,IAAAA,qBAA2B2Y,gBD8a3BnY,KAAKoY,QAAQ,SAhGb,CAiGF,EAMAnC,QAAAA,GACE,MAAMjD,EAAOhT,KAAKwB,WAAWyB,KAAK,gBAClCjD,KAAKqY,YAAcrF,EAAKpO,OAAO,gBAADmO,OAAiB/S,KAAK4L,IAAG,mBACvD5L,KAAKsY,eAAiBtF,EAAKpO,OAAO,gBAADmO,OAAiB/S,KAAK4L,IAAG,sBAC1D5L,KAAKoU,WAAapB,EAAKpO,OAAO,gBAADmO,OAAiB/S,KAAK4L,IAAG,kBACtD5L,KAAKqT,cAAgBrT,KAAKwG,kBAAkB4B,SAAS,qBAErDpI,KAAKuY,UAAYvY,KAAKqY,YAAY5O,KAAK,YAAc,IAAIlK,IAAAA,gBAAuBS,KAAKqY,aACrFrY,KAAKuY,UAAUpC,GAAG,QAAQ,IAAMnW,KAAKwB,WAAW6S,SAAS,YACzDrU,KAAKuY,UAAUpC,GAAG,QAAQ,IAAMnW,KAAKwB,WAAW+U,YAAY,YAE5DvW,KAAKoU,WAAapU,KAAKoU,WAAW+C,IAAInX,KAAKuY,UAAU/W,WAAWyB,KAAK,gBAAD8P,OAAiB/S,KAAK4L,IAAG,mBAC7F5L,KAAKwU,YAAYxU,KAAKoU,WAAY,QAASpU,KAAK,YAChDA,KAAKwU,YAAYxU,KAAKoU,WAAY,UAAWpU,KAAKwY,kBACpD,EAKAlJ,OAAAA,GACE,OAAsB,OAAftP,KAAKqN,MACRrN,KAAKqN,MAAMnM,QAAQ,gBAAiBlB,KAAK4L,KACzC5L,KAAKoS,WAAW9C,QAAQtP,KAAK4L,IACnC,EAKA6D,KAAAA,GACE,OAAoB,OAAbzP,KAAKuN,IACRvN,KAAKuN,IAAIrM,QAAQ,gBAAiBlB,KAAK4L,KACvC5L,KAAKoS,WAAW3C,MAAMzP,KAAK4L,IACjC,EAEA6M,OAAAA,GACMzY,KAAKqS,eACPrS,KAAKgW,MAAM0C,SAEXC,cAAc3Y,KAAK4Y,uBAEf5Y,KAAKiY,uBACPjY,KAAKiY,sBAAsBY,aAG7B7Y,KAAKoY,QAAQ,WAEjB,EAEAjR,YAAAA,GACE,OAAOnH,KAAKoS,UACd,EAEApE,KAAAA,GACE,OAAOhO,KAAK4L,GACd,EAOAkN,oBAAAA,GAAwB,IAAAC,EAAAC,EACtB,OAAqE,QAArED,EAAuC,QAAvCC,EAAOhZ,KAAK+T,MAAMtK,KAAK,wBAAgB,IAAAuP,OAAA,EAAhCA,EAAkCC,mBAAmBjZ,KAAK4L,YAAI,IAAAmN,EAAAA,EAAI/Y,KAAK4L,GAChF,EAEAsN,UAAAA,GACE,OAAuB,IAAhBlZ,KAAKqV,MACd,EAEAhR,QAAAA,GACE,OAAOrE,KAAKqV,MACd,EAEAlR,QAAAA,CAAU8K,GACRjP,KAAKqV,OAAiB,EAARpG,EAEdjP,KAAK2T,YAAYwF,IAAI,IAADpG,OAAK/S,KAAKqV,SAC9BrV,KAAKwB,WAAW0W,YAAY,kBAAmBlY,KAAKqV,OAAS,IAC7DrV,KAAKwB,WAAW0W,YAAY,kBAAmBlY,KAAKqV,OAAS,GAC/D,EAEA+D,WAAAA,CAAaC,GACXrZ,KAAKuS,UAAY8G,CACnB,EAEAzS,UAAAA,GACE,OAAO5G,KAAK2W,QACd,EAEA2C,SAAAA,GACE,IAAKtZ,KAAKuZ,QAAS,CACjB,MAAMC,EAAUxZ,KAAK+T,MAAM9Q,KAAK,wBAChCjD,KAAKuZ,QAAUC,EAAQL,KACzB,CAEA,OAAOnZ,KAAKuZ,OACd,EAEAE,UAAAA,GACE,MAAMC,EAAa1Z,KAAKqX,eAClBD,EAAU,CAAC,EAEXuC,EAAWA,CAAC/T,EAAMhF,KACtB,IAAIgZ,EAAaxC,EAEjB,IAAK,IAAInH,EAAI,EAAGA,EAAIrK,EAAK9F,OAAS,EAAGmQ,IAAK,CACxC,MAAMtR,EAAMiH,EAAKqK,GAEZlO,IAAAA,cAAgB6X,EAAWjb,KAAU8B,MAAM2P,QAAQwJ,EAAWjb,MACjEib,EAAWjb,GAAO,CAAC,GAGrBib,EAAaA,EAAWjb,EAC1B,CAGAib,EADYhU,EAAKA,EAAK9F,OAAS,IACbc,CAAK,EAGzB,IAAK,MAAMiZ,KAAWhb,OAAO+G,KAAK8T,GAAa,CAC7C,MACM7P,EADWkF,EAAGpO,MAAMkZ,GACJzY,MAAMpB,KAAKkS,YAAYpS,OAAS,GAGtD,IAAK+J,EAAK/J,OACR,SAKF6Z,EAAS9P,EAFK6P,EAAWG,GAG3B,CAEA,OAAOzC,CACT,EAEA0C,SAAAA,GAA0B,IAAAC,EAAA,IAAftY,EAAM5B,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,KACZ,QAANka,EAAAtY,SAAM,IAAAsY,IAANtY,EAAWzB,KAAKmS,OAAOlK,aACvB,MAAMgH,EAAQjP,KAAKqE,WACnB,IAAIwM,EAAQpP,EAAOZ,QAAQb,MACvBga,EAAc,KAElB,GAAInJ,GAAS,GAAK5B,EAAQ,EACxB,KAAuB,OAAhB+K,GAAwBnJ,EAAQ,GAAG,CACxC,MAAMoJ,EAAexY,IAASoP,GACToJ,EAAa5V,aAEb4K,EAAQ,IAC3B+K,EAAcC,EAElB,CAGF,OAAOD,CACT,EAEAhS,WAAAA,GAAgD,IAAAkS,EAAA,IAAnCzY,EAAM5B,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,KAAMkI,EAAWlI,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,KAClC,QAANqa,EAAAzY,SAAM,IAAAyY,IAANzY,EAAWzB,KAAKmS,OAAOlK,aACvB,MAAMgH,EAAQjP,KAAKqE,WACnB,IAAIwM,EAAQpP,EAAOZ,QAAQb,MAC3B,MAAM4K,EAAc,GAEpB,GAAIiG,GAAS,EAAG,CACd,IAAIoJ,EAAexY,IAASoP,GAE5B,KAAOoJ,GAAgBA,EAAa5V,WAAa4K,GAAO,CACtD,MAAMkL,EAAeF,EAAa5V,YAE9B0D,EAAcoS,EAAelL,EAAQkL,IAAiBlL,EAAQ,IAChErE,EAAYxK,KAAK6Z,GAGnBA,EAAexY,IAASoP,EAC1B,CACF,CAEA,OAAOjG,CACT,EAEAwP,WAAAA,GAA4B,IAAAC,EAAA,IAAf5Y,EAAM5B,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,KAGpB,OAFM,QAANwa,EAAA5Y,SAAM,IAAA4Y,IAAN5Y,EAAWzB,KAAKmS,OAAOlK,aAEhBjI,KAAKkZ,aAAezX,EAAOmD,QAAOC,GAAKA,EAAEqU,eAAgBlZ,KAAK8Z,UAAUrY,GAAQuG,YAAYvG,EACrG,EAEA+F,QAAAA,GACE,OAAOxH,KAAKmS,MACd,EAEAmI,aAAAA,GAAiC,IAAlBC,EAAS1a,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,KACzB0a,EAAiC,kBAAdA,GAA0BA,EAE7C,MAAMC,EAAexa,KAAKsG,mBAAmBrD,KAAK,UAC5CwX,EAAUza,KAAKwG,kBAAkBvD,KAAK,UAAUkU,IAAIqD,GACpDE,EAAc,GAEpBD,EAAQ/W,MAAK,WACX,MAAMiX,EAAS5Y,IAAE/B,MACX4a,EAASD,EAAOvS,SAAS,UACzByS,EAAYF,EAAOlR,KAAK,QACxBqR,EAAQH,EAAOvS,SAAS,YAAYA,SAAS,SAAS2S,OAG5D,GAAkB,OAAdF,EACF,OAGF,IAAIja,GAAQ,EAEZ,OAAQia,GACN,IAAK,wBACH,CACE,MAAMG,EAAS,GACTC,EAAUL,EAAO3X,KAAK,YAE5BgY,EAAQvX,MAAK,WACX,MAAMwX,EAASnZ,IAAE/B,MACXmb,EAAkBD,EAAOjY,KAAK,iBAEpC,IAAImY,EADWD,EAAgB/S,SAAS,OACpBlJ,KAAK,UAQzB,GANKkc,IACHA,EAASD,EAAgB1R,KAAK,WAGhCuR,EAAO5a,KAAK,6BAAD2S,OAA8BqI,EAAM,QAE1Cb,GAAgC,IAAnBU,EAAQnb,OAAc,CACtC,MAAMub,EAAQH,EAAOjY,KAAK,UAAU8X,OAEpCC,EAAO5a,KAAKyR,EAAYG,EAAOqJ,IACjC,CACF,IAEAza,EAAQoa,EAAOpb,KAAK,IACtB,CACA,MACF,IAAK,4BACL,IAAK,yBACL,IAAK,sBACL,IAAK,uBACH,CACE,MAAMob,EAAS,GAEfJ,EAAO3X,KAAK,YAAYS,MAAK,WAC3B,MAAM2X,EAAQtZ,IAAE/B,MAAMiD,KAAK,kBAAkB8N,GAAG,GAAGgK,OACnDC,EAAO5a,KAAKyR,EAAYG,EAAOqJ,IACjC,IAEAza,EAAQoa,EAAOpb,KAAK,KACtB,CACA,MACF,IAAK,4BACH,CACE,MAAMob,EAAS,GAEfJ,EAAO3X,KAAK,0BAA0BS,MAAK,WACzC,GAAI1D,KAAKsb,QAAS,CAChB,MAAM9R,EAAKzH,IAAE/B,MAAMd,KAAK,MAClB4b,EAAQF,EAAO3X,KAAK,cAAD8P,OAAevJ,EAAE,OAAMuR,OAChDC,EAAO5a,KAAKyR,EAAYG,EAAO8I,IACjC,CACF,IAEAla,EAAQoa,EAAOpb,KAAK,KACtB,CACA,MACF,IAAK,uBACH,CACE,MAAM2b,EAAQX,EAAO3X,KAAK,uBAAuBkW,MAC3CqC,EAAYZ,EAAO3X,KAAK,sBAAsBkW,MAC9CsC,EAAWb,EAAO3X,KAAK,gBAAgB8X,OAC7C,IAAIW,EAAa,KAKfA,EAHEH,GAASC,EAGE,qBAAHzI,OAAwBwI,IACxBA,GAASC,EAGN,qBAAHzI,OAAwByI,GACzBC,EAEI,qBAAH1I,OAAwB0I,GAGrB,wGAGf7a,EAAQ,qCAAHmS,OAAwC2I,EAAU,WACzD,CACA,MACF,IAAK,sBACH,CACE,MAAMC,EAAO9J,EAAY+I,EAAO3X,KAAK,sBAAsBkW,OACrDyC,EAAO/J,EAAY+I,EAAO3X,KAAK,sBAAsBkW,OAE3DvY,EAAQ+a,GAAQC,EAAQD,EAAO,IAAMC,EAASD,GAAQC,CACxD,CACA,MACF,IAAK,0BAIDhb,EAAQiR,EAAYG,EAFF4I,EAAO3X,KAAK,UAAUmF,SAAS,aAEZ2S,SAEvC,MACF,IAAK,uBACHna,EAAQiR,EAAYG,EAAO4I,EAAOxS,SAAS,uBAAuB+Q,QAClE,MACF,IAAK,6BACH,CACE,MAAMhN,IAAYyO,EAAO3X,KAAK,SAASkW,MAEvCvY,EAAQ,sBAAAmS,OAAsB5G,EAAU,QAAU,GAAE,aAAc0F,EAAYG,EAAO8I,GACvF,CACA,MACF,IAAK,6BACL,IAAK,+DACH,CACE,MAAME,EAAS,GACGJ,EAAO3X,KAAK,UAAUmF,SAAS,aAEvC1E,MAAK,WACbsX,EAAO5a,KAAK2B,IAAE/B,MAAM+a,OACtB,IAEAna,EAAQiR,EAAYG,EAAOgJ,EAAOpb,KAAK,OACzC,CACA,MACF,IAAK,wBACL,IAAK,2BACHgB,EAAQiR,EAAYG,EAAO4I,EAAOxS,SAAS,gCAAgC+Q,QAC3E,MACF,IAAK,8BAKDvY,EAAQiR,EAAYG,EAHH4I,EAAO3X,KAAK,+BACNM,QAAQ,SAASwX,SAI1C,MACF,IAAK,yBACL,IAAK,qCACHna,EAAQiR,EAAYG,EAAOxS,IAAAA,QAAcob,EAAO3X,KAAK,YAAYkW,SACjE,MACF,IAAK,yBACHvY,EAAQiR,EAAYG,EAAOxS,IAAAA,QAAcob,EAAO3X,KAAK,oBAAoBqK,UACzE,MACF,IAAK,qBACH1M,EAAQiR,EAAYG,EAAO4I,EAAOxS,SAAS,qBAAqB+Q,QAChE,MACF,IAAK,wBACL,IAAK,6CACH,CACE,MACM0C,EADalB,EAAO1X,KAAK,UACDA,KAAK,mDAE7B+X,EAAS,GAEfa,EAAWnY,MAAK,WACd,MAAMoY,EAAY/Z,IAAE/B,MACpB,IAAI+b,EAAW,KAEXD,EAAU3Y,GAAG,mBACf4Y,EAAWvc,IAAAA,QAAcD,IAAAA,gBAAwBuc,IACxCA,EAAU3Y,GAAG,UACtB4Y,EAAWD,EAAU7Y,KAAK,mBAAmB8X,OACpCe,EAAU1F,SAAS,WAE5B2F,EAAWD,EAAUf,QAGnBgB,GACFf,EAAO5a,KAAK4R,EAAO+J,GAEvB,IAEAnb,EAAQiR,EAAYmJ,EAAOpb,KAAK,MAClC,CACA,MACF,IAAK,oCACL,IAAK,8CACH,CACE,MAAMob,EAAS,GACTgB,EAAgBpB,EAAO3X,KAAK,UAAUmF,SAAS,aAAa6T,QAC5DC,EAAiBtB,EAAO3X,KAAK,yEAC7BkZ,EAAkBD,EAAejZ,KAAK,yBAAyBkW,MAC/DiD,EAAkBF,EAAejZ,KAAK,YACtCoZ,EAAazB,EAAO3X,KAAK,6DAA6DkW,MAQ5F,GANA6B,EAAO5a,KAAK4R,EAAOgK,EAAcjB,SAE7BoB,GACFnB,EAAO5a,KAAK4R,EAAOmK,IAGjBC,EAAgBtc,OAAS,EAAG,CAC9B,MAAMub,EAAQe,EAAgBnZ,KAAK,kBAAkB8N,GAAG,GAAGgK,OAE3DC,EAAO5a,KAAK4R,EAAOqJ,GACrB,CAEIgB,GACFrB,EAAO5a,KAAK4R,EAAOqK,IAGrBzb,EAAQiR,EAAYmJ,EAAOpb,KAAK,MAClC,CACA,MACF,IAAK,6CACL,CACE,MAAM0c,EAAQ,GAEd3B,EAAO1X,KAAK,2BAA2BS,MAAK,WAC1C4Y,EAAMlc,KAAK2B,IAAE/B,MAAM+a,OACrB,IAEAna,EAAQiR,EAAYyK,EAAM1c,KAAK,MAC/B,KACF,CACA,IAAK,4CAIHgB,EAAQiR,EAFU+I,EAAO3X,KAAK,eAEA/D,KAAK,UACnC,MAEF,IAAK,oCACH0B,EAAQiR,EAAYG,EAAO4I,EAAOxS,SAAS,SAAS+Q,QAGpDvY,GAAS8Z,EAAY5a,OAAS,IAChC4a,EAAYta,KAAK,iCAAkCQ,EAAO,UAE9D,IAEAZ,KAAKuT,kBAAkBjG,KAAKoN,EAAY9a,KAAK,IAC/C,EAEAgS,KAAAA,GACE,MAAO,OAAO2K,KAAKvc,KAAKgO,QAC1B,EAEAwO,UAAAA,GACE,OAAOxc,KAAKwB,WAAW4U,SAAS,cAClC,EAEAqG,QAAAA,CAAUC,EAAMC,GACd3c,KAAKsU,iBAAgB,EAAOoI,EAAMC,EACpC,EAEAC,MAAAA,CAAQF,EAAMC,GACZ3c,KAAKsU,iBAAgB,EAAMoI,EAAMC,EACnC,EAEArI,eAAAA,CAAiBsI,EAAQF,EAAMC,GAK7B,GAJAC,EAA2B,kBAAXA,EAAuBA,GAAU5c,KAAKsS,UACtDoK,EAAuB,kBAATA,GAAqBA,EACnCC,GAAWpd,IAAAA,yBAAsD,kBAAZod,GAAwBA,GAEzEC,IAAW5c,KAAKsS,UAAW,CAC7BtS,KAAKsS,UAAYsK,EAEZ5c,KAAKsS,WACRtS,KAAKsa,gBAGP,MAAMuC,EAAkB7c,KAAKsT,eAAerQ,KAAK,0BAA0BK,SACrEwZ,EAAoB9c,KAAKsT,eAAerQ,KAAK,4BAA4BK,SAE/EtD,KAAK4T,gBAAgBuF,IAAKnZ,KAAKsS,UAAkB,GAAN,KAC3CtS,KAAKwB,WACF0W,YAAY,cAAelY,KAAKsS,WAChC4F,YAAY,gBAAiBlY,KAAKsS,WAErCuK,EAAgB3E,YAAY,SAAUlY,KAAKsS,WAC3CwK,EAAkB5E,YAAY,UAAWlY,KAAKsS,WAC9CtS,KAAKuT,kBAAkB2E,YAAY,SAAUlY,KAAKsS,WAElD,MAGMyK,EAAc,CAClBC,QAAS,EACTvX,QAL2D,EAAvCzF,KAAKwG,kBAAkByW,gBACkB,EAAxCjd,KAAKsG,mBAAmB2W,gBAMzCC,EAAe,CACnBF,QAAS,EACTvX,OAAQ,GAEJ0X,EAAW,CACfH,QAAS,GACTvX,OAAQ,IAGNkX,EACF3c,KAAKiT,eACFvJ,IAAI1J,KAAKsS,UAAY4K,EAAeH,GACpCK,SAASpd,KAAKsS,UAAYyK,EAAcG,EAAc,QAAQrG,IACzD7W,KAAKsS,WACPtS,KAAKiT,eAAevJ,IAAIyT,EAC1B,IAGJnd,KAAKiT,eAAevJ,IAAI1J,KAAKsS,UAAY6K,EAAWD,GAGlDR,GACF1c,KAAKqd,gBAGPrd,KAAKoY,QAAQ,kBAAmB,CAC9BkF,SAAUtd,KAAKsS,WAEnB,CACF,EAEArM,UAAAA,GACE,OAAOjG,KAAKsS,SACd,EAEA+K,aAAAA,GACE,IAAKrd,KAAK4R,QAAS,KAAA2L,EAGjB,MAAMC,EAA8C,QAAhCD,EAAAvd,KAAK+T,MAAMtK,KAAK,wBAAgB,IAAA8T,GAAhCA,EAAkCzb,SAAS2b,mBAC3Dzd,KAAK8Y,uBACL9Y,KAAKgO,QACHvE,EAAO,CACX6T,SAAUtd,KAAKiG,aAAe,EAAI,EAClCsJ,QAASiO,EACTE,OAAQ1d,KAAKsZ,aAGf9Z,IAAAA,MAAYY,MAAK,IAAM,IAAIud,SAAQ,CAACC,EAASC,KAC3Cre,IAAAA,kBAAwB,OAAQ,2BAA4B,CAAEiK,SAAQqU,KAAKF,GAASG,MAAMF,EAAO,KAErG,CACF,EAEAG,OAAAA,GACEhe,KAAK0W,eAAc,EACrB,EAEAuH,MAAAA,GACEje,KAAK0W,eAAc,EACrB,EAEAA,aAAAA,GAAwC,IAAzBuH,EAAMpe,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,IAAIG,KAAKkM,SAC5B,MAAMgS,EAAele,KAAKkM,WAAa+R,EACvCje,KAAKkM,SAAW+R,EAEhB,MAAME,EAAmBne,KAAKoS,WAAWhE,aACnCgQ,EAAkBpe,KAAKkM,UAAYiS,EACnCE,EAAkBre,KAAKsT,eAAerQ,KAAK,0BAA0BK,SACrEgb,EAAmBte,KAAKsT,eAAerQ,KAAK,2BAA2BK,SAE7EtD,KAAKwB,WACF0W,YAAY,aAAckG,GAC1BlG,YAAY,eAAgBkG,GAE/Bpe,KAAK6T,QAAQqE,YAAY,SAAUkG,GAEnCC,EAAgBnG,YAAY,SAAUlY,KAAKkM,WAAaiS,GACxDG,EAAiBpG,YAAY,UAAWlY,KAAKkM,WAAaiS,GAE1Dne,KAAK0T,cAAcyF,IAAInZ,KAAKkM,SAAW,IAAM,IAEzCgS,GACFle,KAAKoY,QAAQ,gBAAiB,CAC5BjM,QAASnM,KAAKkM,UAGpB,EAEAqS,SAAAA,GACE,OAAOve,KAAKkM,QACd,EAEAqI,iBAAAA,GAA8C,IAA3BiK,EAAI3e,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,IAAIG,KAAK4S,aAC9B5S,KAAKye,kBAAkBvG,YAAY,UAAWsG,GAC9Cxe,KAAK0e,2BAA2BxG,YAAY,SAAUsG,EACxD,EAEAG,SAAAA,CAAWzK,GACTlU,KAAKoU,WAAWmC,YAAY,eAC5BvW,KAAKqT,cAAcgB,SAAS,UAC5B,MAAMD,EAAapU,KAAKoU,WAAWxP,OAAO,qBAADmO,OAAsBmB,EAAO,OAAMG,SAAS,eAC/EmB,EAASpB,EAAWwK,KAAK,qBACzBvL,EAAgBrT,KAAKqT,cACxBzO,OAAO,qBAADmO,OAAsByC,EAAM,OAClCe,YAAY,UACfvW,KAAKqY,YAAY0C,KAAK7G,GACtB1U,IAAAA,mBAAyBqf,WAEzB7e,KAAKoY,QAAQ,YAAa,CAAElE,UAASE,aAAYf,iBACnD,EAEAuD,oBAAAA,GAAwB,IAAAkI,EAAAC,EACtB,MAAMC,EAAkBzf,IAAAA,kBACH,QAArBuf,EAAA9e,KAAKif,wBAAgB,IAAAH,IAArB9e,KAAKif,iBAAqBjf,KAAKkT,qBAAqBvJ,SACjD3J,KAAKsS,UAAY,EAAItS,KAAKuT,kBAAkB5J,UAC5CqV,EAAkBhf,KAAKoT,iBAAiBzJ,QAAU,IAC/B,QAAtBoV,EAAA/e,KAAKkf,yBAAiB,IAAAH,IAAtB/e,KAAKkf,kBAAsBlf,KAAKmT,sBAAsBxJ,SACtD,MAAMwV,EAA2Bnf,KAAKoG,iBAAiBuD,QAAU3J,KAAKif,iBAAmBjf,KAAKkf,kBAE9Flf,KAAKoT,iBAAiB8E,YAAY,SAAU8G,GAC5Chf,KAAKsY,eAAeJ,YAAY,YAAaiH,GAC7Cnf,KAAKqY,YAAYH,YAAY,aAAciH,EAC7C,EAEAC,iBAAAA,GAAqB,IAAAC,EAAAC,EACnB,MAAM7d,EAASzB,KAAKmS,OAAOlK,YACrBsX,EAAkC,QAAnBF,EAAGrf,KAAK8Z,mBAAW,IAAAuF,OAAA,EAAhBA,EAAkBlY,eAC1C,IAAIqY,EAAqD,QAApCF,EAAGC,aAAe,EAAfA,EAAiB7Q,wBAAgB,IAAA4Q,EAAAA,EAAItf,KAAKmS,OAAOsN,eAAc,IAE7D,IAAtBD,GAAoD,MAAtBA,EAChCA,EAAoBxf,KAAKmS,OAAOsN,eAAc,GACrChf,MAAM2P,QAAQoP,KACvBA,EAAoBA,EACjBvS,KAAIyS,GAAoB,iBAAPA,EAAkB1f,KAAKmS,OAAOwN,qBAAqBD,GAAMA,IAE1E9a,QAAO8a,QAAoB,IAAPA,KAKzBF,EAAoBA,EAAkB5a,QAAQ8a,GAAOA,EAAGrP,sBAExDrQ,KAAK4f,iBACH5f,KAAKmS,OAAO9H,UACZ5I,EACAzB,KAAKmS,OAAO7D,gBACZ,EACAkR,EACgB,IAAhBxf,KAAKqV,OAAerV,KAAKmS,OAAO0N,kBAAoB,EAExD,EAGAD,gBAAAA,CAAkBrY,GAAwG,IAAjG9F,EAAM5B,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,GAAI6K,EAAS7K,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,EAAGigB,EAAejgB,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,KAAM2f,EAAiB3f,UAAAC,OAAA,QAAAC,IAAAF,UAAA,IAAAA,UAAA,GAAU6B,EAAY7B,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,EACrHigB,EAA6C,kBAApBA,GAAgCA,EACzD,MAAMC,GAAuBP,GAAkD,IAA7BA,EAAkB1f,OAE9D2I,EAAYzI,KAAKmH,eACjB6Y,EAAeve,EAAOmD,QAAOC,GAAKA,EAAEsC,eAAekC,cAAgBZ,EAAUY,cAC7E4W,EAAgBxX,EAAU6F,eAC1B4R,EAAgBlgB,KAAKoa,YAAY3Y,GAEjC0e,EAAiB1e,EAAOmD,QAAO1B,GAASA,EAAMgW,eAAcpZ,OAK5DsgB,EAHe1V,EAAY,GAAKjJ,EAAO3B,QAAU4K,GAC/BhJ,EAAe,GAAKye,GAAkBze,IAENoe,EAClDO,EAAcD,GAAeL,EAC7BO,EAAeL,EAAgB,GAAKD,EAAalgB,QAAUmgB,EACjE,IAAIM,EAAgBH,GAAeE,EAEnC,MAAME,EAAYC,KAAK9f,MAAM8W,OAAOiJ,aAAaC,QAAQ,YAAD5N,OAAaxL,KAAY,MACjF,IAAIqZ,EAAgBR,IAAgBI,EAAU/e,SAAW+e,EAAUjZ,OAASiZ,EAAUjZ,QAAUA,EAGhG,MAAMnD,EAAcpE,KAAK8Z,UAAUrY,GACnC,KAAMmf,IAAkBL,IAAkBnc,EAAa,CACrD,MAAMsE,EAAiBtE,EAAY+C,eAAewB,oBAElD,GAAID,EAAiB,EAAG,KAAAmY,EAAAC,EACtB,MAAMC,EAAkB3c,EAAY4D,YAAYvG,GAAQ3B,OAClDkhB,EAA0C,QAA3BH,EAAmB,QAAnBC,EAAGN,EAAU/e,cAAM,IAAAqf,OAAA,EAAhBA,EAAkBhhB,cAAM,IAAA+gB,EAAAA,EAAI,EACpDD,IAAAA,EAAkBG,EAAkBC,EAAkBtY,GACtD6X,IAAAA,EAAkBQ,GAAmBrY,EACvC,CACF,CAGA,IAAMkY,IAAiBL,EAAgB,CACrC,MAAMrX,EAAmBlJ,KAAKmH,eAAegC,sBAE7C,GAAID,EAAmB,EAAG,CACxB,MAAM+X,EAAmB/d,GACnBrE,OAAOM,UAAUC,eAAeC,KAAK6D,EAAO,QACvCA,EAAMc,OAAShE,KAAKmH,eAAe6G,QACH,mBAAvB9K,EAAMiE,cACfjE,EAAMiE,eAAekC,cAAgBrJ,KAAKmH,eAAekC,YAM9D6X,EAAoBhB,EAActb,OAAOqc,EAAkBjhB,MAAMF,OACjEqhB,EAAyBX,EAAU/e,OAAS+e,EAAU/e,OAAOmD,OAAOqc,EAAkBjhB,MAAMF,OAAS,EAC3G8gB,IAAAA,EAAkBM,EAAoBC,EAAyBjY,GAC/DqX,IAAAA,EAAkBW,GAAqBhY,EACzC,CACF,CAEA,IAAK0X,EAAe,CAClB,MAAMQ,EAAwB3f,EAAO4f,QAAO,CAACC,EAAGzc,KAC9C,MAAM6a,EAAK7a,EAAEsC,eACPqC,EAAKkW,EAAG1R,QACRuT,EAAID,EAAE9X,IAAO,CAAEf,UAAWiX,EAAI8B,MAAO,GAK3C,OAHAD,EAAEC,QACFF,EAAE9X,GAAM+X,EAEDD,CAAC,IAGV,IAAK,MAAMG,KAAcjB,EAAU/e,OAAQ,CACzC,MAAMigB,EAAoBN,EAAsBK,EAAWzd,MAG3D,GAAI0d,EAAmB,CACrB,MAAMC,EAAiBD,EAAkBjZ,UACnCmZ,EAA2BF,EAAkBF,MAC7CK,EAAqBF,EAAerT,eAG1CsS,IAAAA,EAF0BiB,EAAqB,GAAKD,GAA4BC,EAGlF,CAGyB,IAArBJ,EAAWxS,QACb2R,IAAAA,GAAmBpB,EAAkBvc,MAAKyc,GAAMA,EAAG1R,UAAYyT,EAAWzd,QAE9E,CACF,CAEA,MAAM8d,EAAe5B,EAAcrf,QAAQb,MACrC+hB,EAAgBD,GAAgB,EAChCE,EAAkB,EAAE,EAAG9B,EAAcpgB,OAAS,GAAG0I,SAASsZ,GAEhE9hB,KAAKsT,eAAerQ,KAAK,0BAA0BK,SAAS4U,YAAY,SAAU6J,GAClF/hB,KAAKsT,eAAerQ,KAAK,4BAA4BK,SAAS4U,YAAY,SAAU8J,GACpFhiB,KAAKsT,eAAerQ,KAAK,6BAA6BiV,YAAY,WAAYqI,GAG1ER,GACF/f,KAAKsT,eAAerQ,KAAK,uBAAuBK,SAAS4U,YAAY,SAAUmI,GAC/ErgB,KAAKsT,eAAerQ,KAAK,yBAAyBK,SAAS4U,YAAY,SAAU0I,KAEjF5gB,KAAKsT,eAAerQ,KAAK,uBAAuBiV,YAAY,WAAYmI,GACxErgB,KAAKsT,eAAerQ,KAAK,yBAAyBiV,YAAY,WAAY0I,IAI5E5gB,KAAKsT,eAAelL,SAAS,MAAM8P,YACjC,SACqF,IAArFlY,KAAKsT,eAAelL,SAAS,iBAAiBA,SAAS,mBAAmBtI,OAE9E,EAEAkU,YAAAA,CAAclS,GACZ9B,KAAK+G,iBAAmB/G,KAAKwB,WAAWyB,KAAK,gBAAD8P,OAAiB/S,KAAK4L,IAAG,wBACrE5L,KAAKye,kBAAoBze,KAAKwB,WAAWyB,KAAK,gBAAD8P,OAAiB/S,KAAK4L,IAAG,yBACtE5L,KAAKsG,mBAAqBtG,KAAKwB,WAAWyB,KAAK,gBAAD8P,OAAiB/S,KAAK4L,IAAG,0BACvE5L,KAAK0e,2BAA6B1e,KAAKwB,WAAWyB,KAAK,gBAAD8P,OAAiB/S,KAAK4L,IAAG,kCAC/E5L,KAAKiiB,4BAA8BjiB,KAAKwB,WAAWyB,KAAK,gBAAD8P,OAAiB/S,KAAK4L,IAAG,mCAG9E5L,KAAK2W,SADH,MAAO7U,EACOA,EAEA,IAAI9B,KAAKmS,OAAO+P,YAAY,CAC1CC,gBAAiBniB,KAAKwB,WACtB+F,MAAOvH,KAAKmS,OACZtQ,MAAO7B,KAAKoS,WAAWvC,mBAAmB7P,KAAKmS,OAAOiQ,YACtD1X,UAAW1K,KAAKmS,OAAO7D,iBAIvBtO,KAAK2W,WACP3W,KAAK2W,SAASR,GAAG,YAAYU,GAAK7W,KAAKoY,QAAQ,WAAYvZ,OAAOkL,OAAO8M,EAAG,CAAE5H,MAAOjP,KAAKqE,WAAa,OACvGrE,KAAKye,kBAAkBzX,OAAOhH,KAAK2W,SAASnV,YAEN,OAAlCxB,KAAK2W,SAASwL,kBAChBniB,KAAK2W,SAASwL,gBAAkBniB,KAAKwB,YAGnCxB,KAAKqS,cACPrS,KAAK2W,SAASd,SAGpB,EAEAwM,WAAAA,CAAa7Y,GACXuF,EAAGrP,MAAMM,KAAKkS,aACd,MAAMoQ,EAAe,GAAHvP,OAAMhE,EAAG5N,SAAS,KAAI,KAAA4R,OAAIvT,IAAAA,cAAoBgK,IAEhE,OADAuF,EAAGxO,QACI+hB,CACT,EAEAhM,kBAAAA,CAAoBiM,GAAQ,IAAAC,EACpB,QAANA,EAAAD,SAAM,IAAAC,IAAND,GAAYviB,KAAKkW,cAAcjQ,cAC3Bsc,EACFviB,KAAKkW,cAAcsI,OAEnBxe,KAAKkW,cAAcuM,MAEvB,EAEAjM,kBAAAA,CAAoBK,GAClBA,EAAE6L,iBACF1iB,KAAK,kBAAkB6W,EACzB,EAEAJ,oBAAAA,CAAsBI,GAChBA,EAAE8L,UAAYpjB,IAAAA,YAChBsX,EAAE6L,iBACF1iB,KAAK,kBAAkB6W,GAE3B,EAEA2B,iBAAAA,CAAmB3B,GACbA,EAAE8L,UAAYpjB,IAAAA,WAChBS,KAAK,WAAW6W,EAEpB,EAEAU,aAAAA,GAGE,MAAMqL,EAAgB5iB,KAAK+T,MAAMtK,KAAK,iBAOtC,GALImZ,SAAAA,EAAeC,gBAAkBD,EAAc9gB,SAASghB,UAC1D9iB,KAAKoZ,aAAY,GACjBpZ,KAAKyS,gBAAiB,IAGnBzS,KAAKyS,eAAgB,CACxB,MAAMsQ,EAAU/iB,KAAKwS,cACf4E,EAAUpX,KAAKqX,eAEfpG,GAAYzR,IAAAA,QAAc4X,EAAS2L,EAAQ3L,SAAS,IACxD2L,EAAQ5W,UAAYnM,KAAKkM,UACzB6W,EAAQ9T,QAAUjP,KAAKqV,OAErBpE,IAAajR,KAAKuS,WACpBvS,KAAKoZ,YAAYnI,EAErB,CAEAjR,KAAKoY,QAAQ,SACf,EAEAf,YAAAA,GACE,MAAMD,EAAU7X,IAAAA,YAAoBS,KAAKwG,mBAEnCwc,EAAUnkB,OAAO+G,KAAKwR,GACzBxS,QAAQjG,IAASA,EAAIskB,WAAW,UAADlQ,OAAW/S,KAAKmS,OAAO9H,UAAS,cAAA0I,OAAa/S,KAAK4L,IAAG,QAEvF,IAAK,MAAMjN,KAAOqkB,SACT5L,EAAQzY,GAGjB,OAAOyY,CACT,EAEA,iBAAkBP,GAChB7W,KAAKkW,cAAcuM,OACnB,MAAMS,EAAUnhB,IAAE8U,EAAEsM,QAEpB,IAAKD,EAAQ9M,SAAS,YACpB,OAAQ8M,EAAQtE,KAAK,gBACnB,IAAK,WACH5e,KAAKyc,WACL,MACF,IAAK,SACHzc,KAAK4c,SACL,MACF,IAAK,UACH5c,KAAKge,UACLhe,KAAKyc,WACL,MACF,IAAK,SACHzc,KAAKie,SACLje,KAAK4c,SACL,MACF,IAAK,SACH5c,KAAKoY,QAAQ,cAAe,CAAElV,MAAOlD,OACrC,MACF,IAAK,WACHA,KAAKoY,QAAQ,gBAAiB,CAAElV,MAAOlD,OACvC,MACF,IAAK,SACHA,KAAKoY,QAAQ,cAAe,CAAElV,MAAOlD,OACrC,MACF,IAAK,MACHA,KAAKoY,QAAQ,gBAAiB,CAAElV,MAAOlD,OACvC,MACF,IAAK,OACHA,KAAKoY,QAAQ,YAAa,CAAElV,MAAOlD,OACnC,MACF,IAAK,QACHA,KAAKoY,QAAQ,aAAc,CAAElV,MAAOlD,OACpC,MACF,IAAK,YACHA,KAAKoY,QAAQ,iBAAkB,CAAElV,MAAOlD,OAIhD,EAEA,oBAAqB6W,GACnBA,EAAE6L,iBAEF,MACMU,EADUrhB,IAAE8U,EAAEsM,QACO7f,SACrB+f,EAASD,EAAW7f,QAAQvD,KAAKkT,sBAAsBpT,OAAS,EAChEwjB,EAAUF,EAAW7f,QAAQvD,KAAKmT,uBAAuBrT,OAAS,EAE/C,IAAAyjB,EAAAC,EAApBH,GAAWC,IACkB,QAAhCC,EAAAvjB,KAAK+T,MAAMtK,KAAK,wBAAgB,IAAA8Z,GAAhCA,EAAkCE,QAClCzjB,KAAKsU,kBAC2B,QAAhCkP,EAAAxjB,KAAK+T,MAAMtK,KAAK,wBAAgB,IAAA+Z,GAAhCA,EAAkCE,SAEtC,EAEA,UAAW7M,GACTA,EAAE6L,iBACF1iB,KAAKuY,UAAUkK,OAEf,MACMvO,EADOnS,IAAE8U,EAAE8M,eACI/E,KAAK,mBAE1B5e,KAAK2e,UAAUzK,EACjB,GAEF,CACE0P,gBAAiB,EAKjBC,QAAAA,GACE,MAAO,MAAP9Q,OAAa/S,KAAK4jB,kBACpB,I,wcE/1CF,MAAMha,EAAY,CAChBuY,gBAAiB,KACjB2B,WAAY,GACZC,OAAQ,GACRliB,MAAO,KACP6I,UAAW,EACXhJ,aAAc,EACdD,OAAQ,MAGV,MAAMuiB,EAKJC,WAAAA,GAA4B,IAAfniB,EAAQjC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAC,EAACqkB,EAAA,mBAHZ,IAAEA,EAAA,wBACG,IAGjBpiB,EAAWjD,OAAOkL,OAAO,CAAC,EAAGH,EAAW9H,GAEpCA,EAASD,OACX7B,KAAKmkB,OAAS1jB,MAAMC,KAAKoB,EAASD,OAClC7B,KAAKokB,YAAcpkB,KAAKmkB,OAAOvf,QAAOqL,GAAqB,cAAhBA,EAAElC,YAC7C/N,KAAKqkB,iBAAmBrkB,KAAKmkB,OAAOvf,QAAOqL,GAAqB,UAAhBA,EAAElC,cAElD/N,KAAKokB,YAAc3jB,MAAMC,KAAKoB,EAASgiB,YACvC9jB,KAAKqkB,iBAAmB5jB,MAAMC,KAAKoB,EAASiiB,QAC5C/jB,KAAKmkB,OAAS,IAAInkB,KAAKokB,eAAgBpkB,KAAKqkB,kBAAkBC,MAAK,CAAC9lB,EAAGqG,IAAMrG,EAAE0P,eAAiBrJ,EAAEqJ,kBAGpGlO,KAAKmiB,gBAAkBrgB,EAASqgB,gBAChCniB,KAAKmS,OAASrQ,EAASyF,MACvBvH,KAAKsM,WAAkC,EAArBxK,EAAS4I,UAC3B1K,KAAKukB,cAAwC,EAAxBziB,EAASJ,aAE9B1B,KAAKwB,WAAaxB,KAAKwkB,gBAEvB,MAAMxR,EAAOhT,KAAKwB,WAAWyB,KAAK,iBAClCjD,KAAKye,kBAAoBzL,EAAKpO,OAAO,qCACrC5E,KAAKsT,eAAiBN,EAAKpO,OAAO,kCAClC5E,KAAKykB,cAAgBzR,EAAKpO,OAAO,mCACjC5E,KAAK0kB,cAAgB1R,EAAKpO,OAAO,gCAE7B9C,EAASL,QACXzB,KAAK2kB,YAAY7iB,EAASL,OAE9B,CAOA+iB,aAAAA,GAAiB,IAAAI,EACf,MAAMC,EAAqC,QAApBD,EAAA5kB,KAAKmiB,uBAAe,IAAAyC,GAApBA,EAAsBxO,SAAS,YAClDpW,KAAKmiB,gBAAgBvD,KAAK,SAASvd,MAAM,sBAAsB,GAC/D,KACEyjB,EAA4C,OAAnBD,IAC5B7kB,KAAKwH,WAAWmY,qBAAqBkF,GAAgBpW,0BAClDsW,EAAc,GACpB,IAAIC,EAAiB,GACjBC,EAAe,KACfC,GAAc,EAElB,MAAMC,EAAwBA,KAC5BJ,EAAY3kB,KAAK,qCAAD2S,OACYmS,EAAc,YAAc,GAAE,uDAAAnS,OAClDkS,EAAa5a,UAAS,sEAAA0I,OAGlBiS,EAAeplB,KAAK,IAAG,0CAGnCslB,GAAc,EACdF,EAAiB,EAAE,EAGrBD,EAAY3kB,KAAK,oGAIjB,IAAK,IAAI6P,EAAI,EAAGA,EAAIjQ,KAAKmkB,OAAOrkB,OAAQmQ,IAAK,CAC3C,MAAMF,EAAO/P,KAAKmkB,OAAOlU,GACnBjM,EAAO+L,EAAKhC,UAElB,GAAa,cAAT/J,EAAsB,CAExB,IAAK+L,EAAK3B,eAAiB2B,EAAKM,oBAC9B,SAGF,MAAM+U,EAAYrV,EAAK5B,iBAAmB,WAAH4E,OAAchD,EAAK5B,iBAAgB,KAAM,GAE3D,OAAjB8W,EACFD,EAAe5kB,KAAK,uCAAD2S,OAEXqS,EAAS,iBAAArS,OAAgBhD,EAAK1F,UAAS,oCAAA0I,OAAmCiR,EAAaqB,YAAW,MAAAtS,OAAKhD,EAAK1G,YAAW,MAAA0J,OAAKhD,EAAK1F,UAAS,6BAGlJ0a,EAAY3kB,KAAK,sBAAD2S,OACPqS,EAAS,iBAAArS,OAAgBhD,EAAK1F,UAAS,uBAAA0I,OAAsBmS,EAAc,YAAc,GAAE,oCAAAnS,OAAmCiR,EAAaqB,YAAW,MAAAtS,OAAKhD,EAAK1G,YAAW,oBAAA0J,OAChLhD,EAAK1F,UAAS,0BAElB6a,GAAc,EAElB,KAAoB,UAATlhB,IACY,OAAjBihB,GAAyBD,EAAellB,OAAS,GACnDqlB,IAWAF,EANClV,EAAKY,YAEJZ,EAAKW,0BAA6BT,EAAI,GAAMjQ,KAAKmkB,OAAOrkB,QAA2C,UAAjCE,KAAKmkB,OAAOlU,EAAI,GAAGlC,YAEtF+W,EAEc,KAEA/U,EAGrB,CAEqB,OAAjBkV,GAAyBD,EAAellB,OAAS,GACnDqlB,IAGFJ,EAAY3kB,KAAK,sHAAD2S,OAGRvT,IAAAA,EAAQ,MAAO,eAAc,qBAIrCylB,EAAe,KACf,IAAIK,GAAyB,EAC7BP,EAAY3kB,KAAK,gDAIjB,IAAK,MAAM2P,KAAQ/P,KAAKmkB,OAAQ,CAC9B,MAAMngB,EAAO+L,EAAKhC,UAElB,GAAa,cAAT/J,EAAsB,CAExB,IAAK+L,EAAK3B,eAAiB2B,EAAKM,oBAC9B,SAGmB,OAAjB4U,GAA0BK,IAC5BA,GAAyB,EAEzBP,EAAY3kB,KAAK,uBAAD2S,OACNkS,EAAa5a,UAAS,8CAIlC,MAAM+a,EAAYrV,EAAK5B,iBAAmB,WAAH4E,OAAchD,EAAK5B,iBAAgB,KAAM,GAChF4W,EAAY3kB,KAAK,uCAAD2S,OAENqS,EAAS,iBAAArS,OAAgBhD,EAAK1F,UAAS,oCAAA0I,OAAmCiR,EAAaqB,YAAW,MAAAtS,OAAKhD,EAAK1G,YAAW,wBAAA0J,OACvHhD,EAAK1F,UAAS,2CAG1B,KAAoB,UAATrG,KACY,OAAjBihB,GAAyBK,IAC3BP,EAAY3kB,KAAK,yBAInBklB,GAAyB,EACzBL,EAAelV,EAAKY,WAAamU,EAAyB,KAAO/U,EAE5C,OAAjBkV,GACFF,EAAY3kB,KAAK,wBAIvB,CAOA,OALA2kB,EAAY3kB,KAAK,mDAKV2B,IAAEgjB,EAAYnlB,KAAK,IAC5B,CAEA4H,QAAAA,GACE,OAAOxH,KAAKmS,MACd,CAEAsN,aAAAA,GACE,OAAOhf,MAAMC,KAAKV,KAAKokB,YACzB,CAEAmB,kBAAAA,GACE,OAAO9kB,MAAMC,KAAKV,KAAKqkB,iBACzB,CAEAmB,oBAAAA,CAAsBC,GACpB,MAAMC,EAAWD,EAAQ7G,KAAKoF,EAAaqB,aAE3C,OAAOrlB,KAAKokB,YAAYnhB,MAAKyc,GAAMA,EAAGrW,cAAgBqc,GACxD,CAEAf,WAAAA,GAAgE,IAAnDljB,EAAM5B,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,GAAIigB,EAAejgB,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,KAAMqD,EAAKrD,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,KACxDigB,EAA6C,kBAApBA,GAAgCA,EAEzD,MAAMrc,EAAOzD,KAEPmgB,EAAiB1e,EAAOmD,QAAO1B,GAASA,EAAMgW,eAAcpZ,OAC5D6lB,EAAe3lB,KAAKsM,WAAa,GAAK7K,EAAO3B,QAAUE,KAAKsM,WAC5DsZ,EAAkB5lB,KAAKukB,cAAgB,GAAKpE,GAAkBngB,KAAKukB,cAEnEnE,EAAcuF,GAAgBC,IAAoB9F,EAExD9f,KAAKykB,cAAc/gB,MAAK,WACtB,MAAM+hB,EAAU1jB,IAAE/B,MAClB,IAAI6lB,EAAWzF,EAEf,IAAKyF,EAAU,CACb,MAAMC,EAAmBjhB,GAAKA,EAAEsC,eAAekC,cAAgBZ,EAAUY,YACnEZ,EAAYhF,EAAK+hB,qBAAqBC,GACtCzF,EAAeve,EAAOmD,OAAOkhB,GAC7BC,EAAkBtd,EAAU6F,eAE5BpF,EAAmBT,EAAUU,sBAC7B6c,EAAgC,OAAV9iB,EACxBA,EAAM8E,YAAYvG,GAAQmD,OAAOkhB,GAEjCrkB,EAAOmD,QAAOC,GAAKA,EAAEqU,cAAgBrU,EAAEsC,eAAekC,cAAgBZ,EAAUY,cAEpFwc,IAAAA,EAAcE,EAAkB,GAAK/F,EAAalgB,QAAUimB,GACzD7c,EAAmB,GAAK8c,EAAoBlmB,QAAUoJ,EAC3D,CAEAuc,EAAQvN,YAAY,WAAY2N,EAClC,IAEA7lB,KAAK0kB,cAAchhB,MAAK,WACtB,MAAM+hB,EAAU1jB,IAAE/B,MACZimB,EAAOR,EAAQhc,KAAK,WAC1B,IAAIoc,EAAWzF,EAEf,IAAKyF,GAAYI,EAAM,CACrB,MAAMC,EAAeD,EAAKA,KAAKE,SAC/BN,EAAWK,EAAapmB,SAAWomB,EAAathB,OAAO,aAAa9E,MACtE,CAEA2lB,EAAQvN,YAAY,WAAY2N,EAClC,GACF,CAEAjP,oBAAAA,GAAyB,EAC1BsN,EArPKF,EAAY,cACK,oBAsPvB,MAAMoC,EAAsB7mB,IAAAA,KAAagC,OAAO,CAE9CK,IAAAA,CAAMoP,GACJhR,KAAK2W,SAAW3F,EAChBhR,KAAKwB,WAAaxB,KAAK2W,SAASnV,WAChCxB,KAAKwU,YAAYxU,KAAK2W,SAAS8N,cAAe,WAAY,YAC5D,EAEA5O,MAAAA,GACE7V,KAAK2W,SAASd,QAChB,EAEA4J,aAAAA,GACE,OAAOzf,KAAK2W,SAAS8I,eACvB,EAEA4G,SAAAA,GACE,OAAOrmB,KAAK2W,SAAS4O,oBACvB,EAEAjX,YAAAA,GACE,OAAOtO,KAAKsM,UACd,EAEAga,kBAAAA,GAAuE,IAAnD7kB,EAAM5B,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,GAAIigB,EAAejgB,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,KAAMqD,EAAKrD,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,KAC/DG,KAAK2W,SAASgO,YAAYljB,EAAQqe,EAAiB5c,EACrD,EAEAyhB,WAAAA,GAAgE,IAAnDljB,EAAM5B,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,GAAIigB,EAAejgB,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,KAAMqD,EAAKrD,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,KACxDG,KAAK2W,SAASgO,YAAYljB,EAAQqe,EAAiB5c,EACrD,EAEA0T,oBAAAA,GACE5W,KAAK2W,SAASC,sBAChB,EAEA4O,oBAAAA,CAAsBC,GACpB,OAAOzlB,KAAK2W,SAAS6O,qBAAqBC,EAC5C,EAEA,YAAa5O,GACX,MACM0P,EADUxkB,IAAE8U,EAAE8M,eACY/E,KAAKoF,EAAaqB,aAC5C5c,EAAYzI,KAAK2W,SAAS8I,gBAAgBxc,MAAKyc,GAAMA,EAAGrW,cAAgBkd,IAE9EvmB,KAAKoY,QAAQ,WAAY,CACvB3P,aAEJ,IClTF,MAAM+d,UAAgBxC,EACpBnO,MAAAA,GAKE,GAJA9T,IAAE,WAAY/B,KAAKwB,YAAYilB,UAC/BzmB,KAAK4W,uBAG4C,IAA7C5W,KAAKye,kBAAkBrW,WAAWtI,OAAc,CAClD,MAAMwD,EAAStD,KAAKwB,WAAW8B,SACzBojB,EAAcpjB,EAAOA,SACrBqjB,EAAoBD,EAAYte,SAAS,cAEd,IAA7Bue,EAAkB7mB,QAAwD,IAAxC6mB,EAAkBve,WAAWtI,OACjE4mB,EAAYrS,SAAS,UAErB/Q,EAAO+Q,SAAS,SAEpB,CACF,CAEAuC,oBAAAA,GACE5W,KAAK4mB,yBAAL5mB,KAAK4mB,uBAA2B5mB,KAAKye,kBAAkB9U,SACvD,MAAMkd,EAAW7mB,KAAKwB,WAAWmI,QAAU3J,KAAK4mB,uBAEhD5mB,KAAKye,kBAAkBvG,YAAY,SAAU2O,GAC7C7mB,KAAKsT,eAAe4E,YAAY,UAAW2O,EAC7C,EAGF,QAAeT,EAAoB7kB,OAAO,CACxCK,IAAAA,GAAqB,IAAfE,EAAQjC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAC,EAChBG,KAAKkC,KAAK,IAAIskB,EAAQ1kB,GACxB,IC9BF,MAAMglB,UAAoB9C,EAIxBQ,aAAAA,GAAiB,IAAAI,EACf,MAAMC,EAAqC,QAApBD,EAAA5kB,KAAKmiB,uBAAe,IAAAyC,GAApBA,EAAsBxO,SAAS,YAClDpW,KAAKmiB,gBAAgBvD,KAAK,SAASvd,MAAM,sBAAsB,GAC/D,KACEyjB,EAA4C,OAAnBD,IAC5B7kB,KAAKwH,WAAWmY,qBAAqBkF,GAAgBpW,0BAClDsW,EAAc,GACpB,IAAIE,EAAe,KAEnBF,EAAY3kB,KAAK,qIAAD2S,OAGNvT,IAAAA,EAAQ,MAAO,eAAc,uBAGvCylB,EAAe,KACf,IAAIK,GAAyB,EAC7BP,EAAY3kB,KAAK,kFAGjB,IAAK,MAAM2P,KAAQ/P,KAAKmkB,OAAQ,CAC9B,MAAMngB,EAAO+L,EAAKhC,UAElB,GAAa,cAAT/J,EAAsB,KAAA+iB,EAAAC,EAExB,IAAKjX,EAAK3B,eAAiB2B,EAAKM,oBAC9B,SAGGiV,IACHA,GAAyB,EAEJ,OAAjBL,GACFF,EAAY3kB,KAAK,qBAAD2S,OACVkS,EAAa5a,UAAS,UAG9B0a,EAAY3kB,KAAK,sCAInB,MAAMglB,EAAYrV,EAAK5B,iBAAmB,WAAH4E,OAAchD,EAAK5B,iBAAgB,KAAM,GAC1E8Y,EAAkB,kBAAHlU,OAAqB/S,KAAKwH,WAAW6C,UAAS,KAAA0I,OAAIhD,EAAK1G,aACtE6d,EAAiG,QAAjFH,GAAc,QAAXC,EAAAhnB,KAAKmS,cAAM,IAAA6U,OAAA,EAAXA,EAAaxlB,WAAW+B,QAAQ,QAAQN,KAAK,IAAD8P,OAAKkU,IAAmBnnB,QAAS,SAAC,IAAAinB,GAAAA,EACvGhC,EAAY3kB,KAAK,2CAAD2S,OAEJqS,EAAS,iBAAArS,OAAgBhD,EAAK1F,UAAS,oCAAA0I,OAAmCiR,EAAaqB,YAAW,MAAAtS,OAAKhD,EAAK1G,YAAW,OAE/H6d,EACFnC,EAAY3kB,KAAK,2FAAD2S,OAEQkU,EAAe,uCAGvClC,EAAY3kB,KAAK,gGAKnB2kB,EAAY3kB,KAAK,6BAAD2S,OACEhD,EAAK1F,UAAS,sDAGlC,KAAoB,UAATrG,IACLshB,GACFP,EAAY3kB,KAAK,uBAInBklB,GAAyB,EACzBL,EAAelV,EAAKY,WAAamU,EAAyB,KAAO/U,EAErE,CAOA,OALAgV,EAAY3kB,KAAK,mDAKV2B,IAAEgjB,EAAYnlB,KAAK,IAC5B,CAEAiW,MAAAA,GAKE,GAJA9T,IAAE,WAAY/B,KAAKwB,YAAYilB,UAC/BzmB,KAAK4W,uBAGyE,IAA1E5W,KAAKye,kBAAkBxb,KAAK,mCAAmCnD,OAAc,CAC/E,MAAMwD,EAAStD,KAAKwB,WAAW8B,SACzBojB,EAAcpjB,EAAOA,SACrBqjB,EAAoBD,EAAYte,SAAS,cAEd,IAA7Bue,EAAkB7mB,QAAwD,IAAxC6mB,EAAkBve,WAAWtI,OACjE4mB,EAAYrS,SAAS,UAErB/Q,EAAO+Q,SAAS,SAEpB,CACF,EAGF,QAAe+R,EAAoB7kB,OAAO,CACxCK,IAAAA,GAAqB,IAAfE,EAAQjC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAC,EAChBG,KAAKkC,KAAK,IAAI4kB,EAAYhlB,GAC5B,IC5GF,MAAMqlB,UAAoBnD,EAIxBQ,aAAAA,GAAiB,IAAAI,EACf,MAAMC,EAAqC,QAApBD,EAAA5kB,KAAKmiB,uBAAe,IAAAyC,GAApBA,EAAsBxO,SAAS,YAClDpW,KAAKmiB,gBAAgBvD,KAAK,SAASvd,MAAM,sBAAsB,GAC/D,KACEyjB,EAA4C,OAAnBD,IAC5B7kB,KAAKwH,WAAWmY,qBAAqBkF,GAAgBpW,0BAClDsW,EAAc,GACpB,IAAIE,EAAe,KAEnBF,EAAY3kB,KAAK,+HAAD2S,OAGRvT,IAAAA,EAAQ,MAAO,eAAc,qBAGrC,IAAI8lB,GAAyB,EAC7BP,EAAY3kB,KAAK,gFAGjB,IAAK,MAAM2P,KAAQ/P,KAAKmkB,OAAQ,CAC9B,MAAMngB,EAAO+L,EAAKhC,UAElB,GAAa,cAAT/J,EAAsB,KAAA+iB,EAAAC,EAExB,IAAKjX,EAAK3B,eAAiB2B,EAAKM,oBAC9B,SAGGiV,IACHA,GAAyB,EAEJ,OAAjBL,GACFF,EAAY3kB,KAAK,qBAAD2S,OACVkS,EAAa5a,UAAS,UAG9B0a,EAAY3kB,KAAK,sCAInB,MAAMglB,EAAYrV,EAAK5B,iBAAmB,WAAH4E,OAAchD,EAAK5B,iBAAgB,KAAM,GAC1E8Y,EAAkB,kBAAHlU,OAAqB/S,KAAKwH,WAAW6C,UAAS,KAAA0I,OAAIhD,EAAK1G,aACtE6d,EAAiG,QAAjFH,GAAc,QAAXC,EAAAhnB,KAAKmS,cAAM,IAAA6U,OAAA,EAAXA,EAAaxlB,WAAW+B,QAAQ,QAAQN,KAAK,IAAD8P,OAAKkU,IAAmBnnB,QAAS,SAAC,IAAAinB,GAAAA,EACvGhC,EAAY3kB,KAAK,2CAAD2S,OAEJqS,EAAS,8BAAArS,OAA6BhD,EAAK1F,UAAS,oCAAA0I,OAAmCiR,EAAaqB,YAAW,MAAAtS,OAAKhD,EAAK1G,YAAW,OAE5I6d,EACFnC,EAAY3kB,KAAK,2FAAD2S,OAEQkU,EAAe,uCAGvClC,EAAY3kB,KAAK,gGAKnB2kB,EAAY3kB,KAAK,6BAAD2S,OACEhD,EAAK1F,UAAS,sDAGlC,KAAoB,UAATrG,IACLshB,GACFP,EAAY3kB,KAAK,uBAInBklB,GAAyB,EACzBL,EAAelV,EAAKY,WAAamU,EAAyB,KAAO/U,EAErE,CAOA,OALAgV,EAAY3kB,KAAK,mDAKV2B,IAAEgjB,EAAYnlB,KAAK,IAC5B,CAEAiW,MAAAA,GAKE,GAJA9T,IAAE,WAAY/B,KAAKwB,YAAYilB,UAC/BzmB,KAAK4W,uBAGyE,IAA1E5W,KAAKye,kBAAkBxb,KAAK,mCAAmCnD,OAAc,CAC/E,MAAMwD,EAAStD,KAAKwB,WAAW8B,SACzBojB,EAAcpjB,EAAOA,SACrBqjB,EAAoBD,EAAYte,SAAS,cAEd,IAA7Bue,EAAkB7mB,QAAwD,IAAxC6mB,EAAkBve,WAAWtI,OACjE4mB,EAAYrS,SAAS,UAErB/Q,EAAO+Q,SAAS,SAEpB,CACF,EAGF,QAAe+R,EAAoB7kB,OAAO,CACxCK,IAAAA,GAAqB,IAAfE,EAAQjC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAC,EAChBG,KAAKkC,KAAK,IAAIilB,EAAYrlB,GAC5B,IC9CI8H,EAAY,CAChBC,KAAM,KACNiF,UAAW,GACXgV,WAAY,GACZC,OAAQ,GACRtiB,OAAQ,GACR2lB,QAAS,KACT1c,UAAW,EACXhJ,aAAc,EACd2lB,UAAW,EACX5f,UAAW,EACX6f,QAAS,MAGX,EAAe/nB,IAAAA,KAAagC,OAAO,CAEjC2Q,YAAa,GACblI,MAAO,KACPuP,QAAS,KACTgO,uBAAwB,CAAC,EACzBC,YAAa,EAEb5lB,IAAAA,GAAqB,IAAfE,EAAQjC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAC,EAChBiC,EAAWjD,OAAOkL,OAAO,CAAC,EAAGH,EAAW9H,GAExC9B,KAAKkS,YAAcnD,EAAGpO,MAAMmB,EAASgN,WACrC9O,KAAKokB,YAAc,GACnBpkB,KAAKynB,QAAU3lB,EAASiiB,OAAO9W,KAAIya,GAAS,IAAIC,EAAMD,KACtD1nB,KAAK+Z,QAAU,GACf/Z,KAAK4L,IAAM9J,EAAS0H,GACpBxJ,KAAKgK,MAAQlI,EAAS+H,KACtB7J,KAAKoM,WAAatK,EAASuK,UAC3BrM,KAAKsM,WAAaxK,EAAS4I,UAC3B1K,KAAKukB,cAAgBziB,EAASJ,aAC9B1B,KAAK4nB,WAAa9lB,EAASulB,UAC3BrnB,KAAK6nB,WAAa/lB,EAAS2F,UAC3BzH,KAAK8nB,SAAWhmB,EAASwlB,QACzBtnB,KAAK+nB,sBAAwBjmB,EAASkmB,qBAEtC,MAAMrL,GAAWpd,IAAAA,uBAGjB,OAFAS,KAAKioB,UAAYlmB,IAAE,2BAADgR,OAA4B4J,EAAU,8BAAgCnd,IAAAA,EAAQ,MAAO,WAAU,WAEzGsC,EAASomB,mBACf,IAAK,OACHloB,KAAKkiB,YAAc4E,EACnB,MACF,IAAK,OACH9mB,KAAKkiB,YAAciF,EACnB,MACF,QACEnnB,KAAKkiB,YAAcsE,EAGvB,MAAM2B,EAAiBpmB,IAAE,yDACrBomB,EAAeroB,SACjBE,KAAK8nB,SAAWK,EAAehP,OAGjCnZ,KAAKwB,WAAaO,IAAE,IAAMD,EAASslB,SAEnC,MAAMgB,EAAc,CAAC,EACrBpoB,KAAKynB,QAAQpR,SAAQgS,IACnBD,EAAYC,EAAMra,UAAW,CAAI,IAGnC,MAAMsa,EAAiB,CAAC,EAExB,IAAK,MAAMC,KAAUzmB,EAASgiB,WAE5B,GAAuB,OAAnByE,EAAOC,cAA2D,IAAhCJ,EAAYG,EAAOC,SAA0B,CACjF,MAAM/f,EAAY,IAAIggB,EAAUF,GAChCvoB,KAAKokB,YAAYhkB,KAAKqI,GACtB6f,EAAe7f,EAAUY,aAAeZ,CAC1C,CAGFzI,KAAK+T,MAAQ/T,KAAKwB,WAAW+B,QAAQ,QACrCvD,KAAKuZ,QAAUvZ,KAAK+T,MAAM9Q,KAAK,wBAAwBkW,MAEvD,MAAMnG,EAAOhT,KAAKwB,WAAWyB,KAAK,cAoFlC,GAnFAjD,KAAK+G,iBAAmBiM,EAAKpO,OAAO,iCACpC5E,KAAKye,kBAAoBzL,EAAKpO,OAAO,kCAErC5E,KAAK2W,SAAW,IAAI3W,KAAKkiB,YAAY,CACnCC,gBAAiBniB,KAAKwB,WACtB+F,MAAOvH,KACP8jB,WAAY9jB,KAAKyf,eAAc,GAC/BsE,OAAQ/jB,KAAKqmB,YACb3b,UAAW1K,KAAKsO,eAChB5M,aAAc1B,KAAK6f,oBAGrB7f,KAAKye,kBAAkBzX,OAAOhH,KAAK2W,SAASnV,YAC5CxB,KAAK2W,SAASR,GAAG,YAAYU,GAAK7W,KAAK,aAAa6W,KACpD7W,KAAK2W,SAASd,SAEd7V,KAAK0oB,WAAa,IAAIpnB,EAAU,CAC9Ba,UAAWnC,KAAK+G,iBAChB0D,OAAQ,+BACR/I,aAAc1B,KAAK6f,kBACnBjb,OAAQA,IAEF5E,KAAK0oB,WAAWC,YAAYvS,SAAS,eAChCpW,KAAK4oB,YAAYC,mBAGnB7oB,KAAK0oB,WAAWC,YAEzBG,kBAAkB,EAClBpmB,eAAgB,EAChBqmB,cAAe,IACfC,cAAe,GACf9kB,WAAYA,KACVlE,KAAKipB,oBACLjpB,KAAKkpB,gBAAgB,IAIzBlpB,KAAK4oB,YAAc,IAAIrpB,IAAAA,QAAeS,KAAK+G,iBAAkB,KAAM,CACjEoiB,OAAO,EACPC,UAAU,EACV3e,OAAQ,6CACR4e,cAAc,EACdC,cAAe,oBAGjBtpB,KAAK+G,iBAAiB9D,KAAK,aAAaS,MAAK,CAACuM,EAAGsZ,KAC/C,MAAMvmB,EAASjB,IAAEwnB,GACXC,EAAQ,CAAC,EACfA,EAAMhgB,GAAKxG,EAAO4b,KAAK,iBACvB4K,EAAMhf,UAAYyF,EAClBuZ,EAAMxa,UAAYhM,EAAOoT,SAAS,gBAClCoT,EAAMrd,UAAYnJ,EAAOC,KAAK,gBAAD8P,OAAiByW,EAAMhgB,GAAE,qBAAoB2P,MAC1EqQ,EAAMva,MAAQsG,SAASvS,EAAOC,KAAK,gBAAD8P,OAAiByW,EAAMhgB,GAAE,mBAAkB2P,OAC7EqQ,EAAMjiB,MAAQvH,KACdwpB,EAAM1a,UAAY,IAAI9O,KAAKkS,YAAasX,EAAMhgB,IAE9C,MAAM+c,EAAkBvjB,EAAOC,KAAK,gBAAD8P,OAAiByW,EAAMhgB,GAAE,kBAAiB2P,MACvE1Q,EAAY6f,EAAe/B,GAGjC,QAAyB,IAAd9d,EAET,YADAzF,EAAO0V,SAIT8Q,EAAM/gB,UAAYA,EAClB+gB,EAAMtY,aAAelR,KAAKypB,YAAYD,EAAMva,OAE5C,MAAM/L,EAAQ,IAAIwmB,EAAMF,GACxBtmB,EAAM2S,QAAO,GACb7V,KAAK2pB,gBAAgBzmB,GAErBlD,KAAK+Z,QAAQ3Z,KAAK8C,GAClBlD,KAAK0oB,WAAWjkB,SAASvB,GACzBlD,KAAK4oB,YAAYlkB,SAASxB,EAAM1B,WAAW,IAG7CxB,KAAKipB,oBACLjpB,KAAK4pB,uBACL5pB,KAAKkpB,iBAGDlpB,KAAKoM,WAAa,EAAG,CACvB,MAAMyd,EAAoB7pB,KAAKoM,WAAapM,KAAK+Z,QAAQja,OACnDgqB,EAAqB9pB,KAAKyf,eAAc,GAE9C,GAAkC,IAA9BqK,EAAmBhqB,QAAgB+pB,EAAoB,EACzD,IAAK,IAAI5Z,EAAIjQ,KAAK+Z,QAAQja,OAAQmQ,EAAIjQ,KAAKoM,WAAY6D,IACrDjQ,KAAK,aAAa,CAChByI,UAAWqhB,EAAmB,GAC9BC,mBAAmB,EACnBlZ,MAAOZ,EACPhB,MAAO,GAIf,CAGAjP,KAAKwU,YAAYwV,SAAU,0BAA0B,IAAMhqB,KAAKkpB,mBAEhElpB,KAAKwU,YAAYxU,KAAKwB,WAAY,UAAU,IAAMxB,KAAK4W,yBAEvD,MAAMqT,EAAsD,mBAAlCjqB,KAAK+T,MAAMtK,KAAK,cACtCzJ,KAAK+T,MAAMtK,KAAK,aAAhBzJ,GACAA,KAAK+T,MAAMmW,YACflqB,KAAK+T,MAAMtK,KAAK,yBAA0BwgB,GAG1CjqB,KAAKmqB,wBACLnqB,KAAKoqB,2BAELpqB,KAAK+Z,QACFnV,QAAO1B,IAAUA,EAAM+C,eACvBoQ,SAAQnT,GAASA,EAAMoX,kBAE1Bta,KAAKqqB,kCAELrqB,KAAKoY,QAAQ,YACf,EAEA/N,OAAAA,GACE,OAAOrK,KAAKgK,KACd,EAEA4M,oBAAAA,GAAwB,IAAA0T,EACtB,IAAK,MAAMpnB,KAASlD,KAAK+Z,QAAS,KAAAwQ,EAChCrnB,EAAM0T,uBACY,QAAlB2T,EAAArnB,EAAM0D,oBAAY,IAAA2jB,GAAlBA,EAAoB3T,sBACtB,CAEA5W,KAAK2W,SAASC,uBACG,QAAjB0T,EAAAtqB,KAAKwqB,oBAAY,IAAAF,GAAjBA,EAAmB1T,sBACrB,EAEAnS,QAAAA,CAAUvB,GAAwE,IAAA8V,EAAA,IAAjEnI,EAAKhR,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,IAAI,EAAGoP,EAAKpP,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,EAAG8c,EAAO9c,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,KAAMkqB,IAAiBlqB,UAAAC,OAAA,QAAAC,IAAAF,UAAA,KAAAA,UAAA,GACvC,QAAhCmZ,EAAAhZ,KAAK+T,MAAMtK,KAAK,wBAAgB,IAAAuP,GAAhCA,EAAkCyK,QAClC,MAAMgH,EAAazqB,KAAK+Z,QAAQja,OAChC+Q,EAAQA,GAAS,EAAI6Z,KAAKC,IAAI,EAAGD,KAAKE,IAAI/Z,EAAO4Z,IAAeA,EAChE9N,GAAWpd,IAAAA,yBAAsD,kBAAZod,GAAwBA,GAE7E,MAAMkO,EAAYha,EAAQ,GAAI7Q,KAAK+Z,QAAQlJ,EAAQ,GAC7Cia,EAAYja,EAAQ4Z,GAAazqB,KAAK+Z,QAAQlJ,GAEpD,GAAKga,EAEE,CACL,MAAME,EAAWD,EAAYA,EAAUzmB,WAAa,EAC9C2mB,EAAWH,EAAUxmB,YAAcwmB,EAAU1jB,eAAeC,WAAa,EAAI,GAEnF6H,EAAQyb,KAAKC,IAAII,EAAUL,KAAKE,IAAI3b,EAAO+b,IAE3C,MAAMC,EAAmBjrB,KAAKkrB,sBAAsBra,EAAO5B,GAEvDgc,EACFA,EAAiBzpB,WAAWyF,MAAM/D,EAAM1B,YAExCqpB,EAAU9jB,iBAAiBM,QAAQnE,EAAM1B,WAE7C,MAdExB,KAAK+G,iBAAiBM,QAAQnE,EAAM1B,YAgBtC0B,EAAMiB,SAAS8K,GAEfjP,KAAK+Z,QAAQ3Z,KAAK8C,GAClBlD,KAAK0oB,WAAWjkB,SAASvB,GACzBlD,KAAK4oB,YAAYlkB,SAASxB,EAAM1B,YAEhC0B,EAAM2S,SACN7V,KAAK2pB,gBAAgBzmB,GACrBlD,KAAKmrB,sBACLnrB,KAAKipB,oBACLjpB,KAAK4pB,uBACL5pB,KAAKkpB,iBAELlpB,KAAKunB,uBAAuBrkB,EAAM8K,SAAW9K,EAAMiE,eAAeuI,kCAGlE,MAAM0b,EAA6BA,KAAM,IAAA7N,EACvC,GAAIwM,EAAmB,CACrB,MAAMthB,EAAYvF,EAAMiE,eAClBuF,EAAiBjE,EAAU+F,oBAEjC,GAAI9B,EAAiB,EAAG,CACtB,IAAI2e,EAAkB5iB,EAAUiG,iBAMhC,GAJwB,MAApB2c,IACFA,EAAkBrrB,KAAKyf,iBAGM,IAA3B4L,EAAgBvrB,OAAc,CAChC,MAAMwrB,EAAiBtrB,KAAK2f,qBAAqB0L,EAAgB,IAEjE,IAAK,IAAIpb,EAAI,EAAGA,EAAIvD,EAAgBuD,IAClCjQ,KAAK,aAAa,CAChByI,UAAW6iB,EACXvB,mBAAmB,EACnBlZ,MAAOA,EAAQZ,EAAI,EACnBhB,MAAOA,EAAQ,GAGrB,CACF,CACF,CAEgC,QAAhCsO,EAAAvd,KAAK+T,MAAMtK,KAAK,wBAAgB,IAAA8T,GAAhCA,EAAkCmG,QAAQ,EAGxC/G,EACFzZ,EAAM1B,WACHkI,IAAI,CACHsT,QAAS,EACTuO,cAAgBroB,EAAM1B,WAAWyb,gBAElCG,SAAS,CACRJ,QAAS,EACTuO,aAAc,IACb,QAAQxU,GAAKxX,IAAAA,uBAA8B,KAC5CA,IAAAA,yBAAiC2D,EAAM1B,YACvC4pB,GAA4B,MAGhCA,IAGFprB,KAAKoY,QAAQ,WAAY,CACvBlV,QACA2N,SAEJ,EAEAlM,WAAAA,CAAazB,GAA6C,IAAAqgB,EAAA,IAAtC5G,EAAO9c,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,KAAM2rB,EAAa3rB,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,KAClB,QAAhC0jB,EAAAvjB,KAAK+T,MAAMtK,KAAK,wBAAgB,IAAA8Z,GAAhCA,EAAkCE,QAElC9G,GAAWpd,IAAAA,yBAAsD,kBAAZod,GAAwBA,GAC7E6O,EAAyC,kBAAlBA,GAA8BA,EAErD,MAAM5gB,EAAc5K,KAAKyrB,iBAAiBzrB,KAAK+Z,QAAQlZ,QAAQqC,IAC/D,IAAK,MAAMqB,KAAcqG,EACvB5K,KAAK2E,YAAYJ,GAAY,GAAM,GAGrCrB,EAAMwoB,IAAI,UAEV1rB,KAAK+Z,QAAU/Z,KAAK+Z,QAAQnV,QAAOC,GAAKA,IAAM3B,IAC9ClD,KAAK0oB,WAAW5jB,YAAY5B,EAAM1B,YAClCxB,KAAK4oB,YAAY9jB,YAAY5B,EAAM1B,YAEnCxB,KAAKmrB,sBACLnrB,KAAKkpB,iBAEL,MAAMyC,EAAmBA,KAAM,IAAAnI,EAC7BtgB,EAAM1B,WAAWkX,SACjB1Y,KAAK4pB,uBAC2B,QAAhCpG,EAAAxjB,KAAK+T,MAAMtK,KAAK,wBAAgB,IAAA+Z,GAAhCA,EAAkCE,QAAQ,EAGxC/G,EACFzZ,EAAM1B,WACHkI,IAAI,CACHsT,QAAS,EACTuO,aAAc,KAEfnO,SAAS,CACRJ,QAAS,EACTuO,aAAcC,EAAgB,IAAOtoB,EAAM1B,WAAWyb,eACrD,QAAQlG,GAAK4U,MAElBA,IAGFzoB,EAAMuV,UAENzY,KAAKoY,QAAQ,cAAe,CAC1BlV,SAEJ,EAEAymB,eAAAA,CAAiBzmB,GACfA,EAAMiT,GAAG,qBAAqBY,IACxB/W,KAAK4rB,oBAAoB9rB,OAAS,EAChC2X,OAAOoU,QAAQrsB,IAAAA,EAAQ,MAAO,0DAChCQ,KAAK8rB,YAAY5oB,GAAO2B,GAAK7E,KAAK2E,YAAYE,KAGhD7E,KAAK2E,YAAYzB,EACnB,IAEFA,EAAMiT,GAAG,uBAAuBU,GAAK7W,KAAK8rB,YAAY5oB,GAAO2B,GAAKA,EAAE6R,cAAcG,EAAE1K,aACpFjJ,EAAMiT,GAAG,yBAAyBU,GAAK7W,KAAK8rB,YAAY5oB,GAAO2B,GAAKA,EAAEyP,gBAAgBuC,EAAEyG,cACxFpa,EAAMiT,GAAG,qBAAqBY,GAAK/W,KAAK+rB,WAAW7oB,EAAO,QAC1DA,EAAMiT,GAAG,uBAAuBY,GAAK/W,KAAK+rB,WAAW7oB,EAAO,UAC5DA,EAAMiT,GAAG,kBAAkBU,GAAK7W,KAAK,aAAanB,OAAOkL,OAAO8M,EAAG,CAAEhG,MAAO7Q,KAAKgsB,mBAAmB9oB,QACpGA,EAAMiT,GAAG,uBAAuBU,GAAK7W,KAAK,kBAAkB6W,KAC5D3T,EAAMiT,GAAG,mBAAmBU,GAAK7W,KAAK,cAAc6W,KACpD3T,EAAMiT,GAAG,oBAAoBU,GAAK7W,KAAK,eAAe6W,KACtD3T,EAAMiT,GAAG,wBAAwBU,GAAK7W,KAAK,mBAAmB6W,KAC9D3T,EAAMiT,GAAG,gBAAgB,IAAMnW,KAAKoY,QAAQ,SAAU,CAAElV,WAC1D,EAEA6oB,UAAAA,CAAY7oB,EAAOe,GAA2B,IAAAgoB,EAAA,IAAhBtP,IAAO9c,UAAAC,OAAA,QAAAC,IAAAF,UAAA,KAAAA,UAAA,GACnC,IAAK,CAAC,KAAM,QAAQ2I,SAASvE,GAC3B,OAG8B,QAAhCgoB,EAAAjsB,KAAK+T,MAAMtK,KAAK,wBAAgB,IAAAwiB,GAAhCA,EAAkCxI,QAElC,MAAMyI,EAAWhpB,EAAMkX,YAAYpa,KAAKiI,aAClC4I,EAAQqb,EAASrrB,QAAQqC,GACzBipB,EAAStb,EAAQ,GAAmB,OAAd5M,EACtBmoB,EAAWvb,EAAQqb,EAASpsB,OAAS,GAAmB,SAAdmE,EAEhD,IAAe,IAAX4M,GAAgBsb,IAAWC,EAC7B,OAGF,MAAMC,GAAe9sB,IAAAA,yBAAsD,kBAAZod,GAAwBA,GACjF3Z,EAASE,EAAM1B,WAEf8qB,EAAeA,KACnBtpB,EAAOupB,SAEHJ,EACFD,EAASrb,EAAQ,GAAGrP,WAAW0F,OAAOlE,GAEtCkpB,EAASrb,EAAQ,GAAGrP,WAAWyF,MAAMjE,EACvC,EAGIwpB,EAAgBA,KAAM,IAAAC,EAC1BzsB,KAAKipB,oBACLjpB,KAAKkpB,iBAC2B,QAAhCuD,EAAAzsB,KAAK+T,MAAMtK,KAAK,wBAAgB,IAAAgjB,GAAhCA,EAAkC/I,QAAQ,EAGxC2I,EACFrpB,EACG0G,IAAI,CACHsT,QAAS,EACTuO,aAAc,KAEfnO,SAAS,CACRJ,QAAS,EACTuO,cAAgBvoB,EAAOia,eACtB,QAAQlG,IACTuV,IAEAtpB,EACG0G,IAAI,CACHsT,QAAS,EACTuO,cAAgBvoB,EAAOia,gBAExBG,SAAS,CACRJ,QAAS,EACTuO,aAAc,IACb,QAAQxU,IACTyV,IACAjtB,IAAAA,uBAA8B,IAAMA,IAAAA,yBAAiCyD,IAAQ,GAC7E,KAGRspB,IACAE,IAEJ,EAEAzpB,iBAAAA,CAAmBC,GACjB,OAAOhD,KAAK+Z,QAAQ9W,MAAKC,GAASA,EAAM1B,WAAW2B,GAAGH,IACxD,EAEAiF,SAAAA,GAAsB,IAAXgH,EAAKpP,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,EACjB,OAAOoP,EAAQ,EAAIjP,KAAK+Z,QAAQnV,QAAOC,GAAKA,EAAER,aAAe4K,IAASxO,MAAMC,KAAKV,KAAK+Z,QACxF,EAEA2S,gBAAAA,CAAkBljB,GAChB,OAAOxJ,KAAKokB,YAAYnhB,MAAKyc,GAAMA,EAAG1R,UAAYxE,GACpD,EAEAmW,oBAAAA,CAAsBlV,GACpB,OAAOzK,KAAKokB,YAAYnhB,MAAKyc,GAAMA,EAAGrW,cAAgBoB,GACxD,EAEAgV,aAAAA,CAAekN,GAGb,OAFAA,EAAuC,kBAAjBA,GAA6BA,GAG/C3sB,KAAKokB,YAAYxf,QAAO8a,GAAMA,EAAGnX,gBACjC9H,MAAMC,KAAKV,KAAKokB,YACtB,EAEAiC,SAAAA,GACE,OAAO5lB,MAAMC,KAAKV,KAAKynB,QACzB,EAEArF,QAAAA,GACE,MAAO,IAAIpiB,KAAKyf,mBAAoBzf,KAAKqmB,aAAa/B,MAAK,CAAC9lB,EAAGqG,IAAMrG,EAAE0P,eAAiBrJ,EAAEqJ,gBAC5F,EAEAI,YAAAA,GACE,OAAOtO,KAAKsM,UACd,EAEAuT,eAAAA,GACE,OAAO7f,KAAKukB,aACd,EAEAqI,YAAAA,GACE,OAAO5sB,KAAK4nB,UACd,EAEAlgB,YAAAA,GACE,OAAO1H,KAAK6nB,UACd,EAEA4B,WAAAA,CAAaxa,GACX,OAAOjP,KAAK6nB,WAAa,GAAK5Y,EAAQ,EAAIjP,KAAK6nB,UACjD,EAEA+D,iBAAAA,GACE,MAAMiB,EAAkB7sB,KAAK4oB,YAAYC,mBACzC,OAAO7oB,KAAK+Z,QAAQnV,QAAO1B,GAASA,EAAM1B,WAAW+B,QAAQspB,GAAiB/sB,OAAS,GACzF,EAEAgtB,eAAAA,GACE,MAAMC,EAAWtV,OAAOiJ,aAAaC,QAAQ,YAAD5N,OAAa/S,KAAKgK,QAE9D,IAAK+iB,EACH,MAAO,GAGT,MAAM,OAAEtrB,GAAWgf,KAAK9f,MAAMosB,GAC9B,OAAOtrB,CACT,EAEAurB,kBAAAA,CAAoBzd,EAAS7B,GAEU,iBAA1BA,IACTA,EAAwB+S,KAAK9f,MAAM+M,IAKvB,OAFA1N,KAAK+Z,QAAQ9W,MAAMC,GAAUA,EAAM8K,UAAYuB,MAM7DvP,KAAKunB,uBAAuBhY,GAAW7B,EACzC,EAEAyc,qBAAAA,GAGuBpoB,IAAE,8CAEV2B,MAAK,WAChB,MAAMupB,EAAQlrB,IAAE/B,MAEVktB,EADeD,EAAM1pB,QAAQ,yBACNkG,KAAK,cAE5B0jB,EADmBF,EAAM1pB,QAAQ,aACVN,KAAK,+BAAiCiqB,EAAU,MAEzEC,EAAIrtB,QACNqtB,EAAI9Y,SAAS,aAEjB,GACF,EAEA+V,wBAAAA,GACE,MAAMgD,EAAYrrB,IAAE,6BAEpBqrB,EAAU1pB,MAAK,WACG0pB,EAAUtW,QAAQ,0BAE1BpT,MAAK,WACG3B,IAAE/B,MACViD,KAAK,wCAAwCoR,SAAS,aAC9D,GACF,GACF,EAEA4U,iBAAAA,GACE,MAAMxnB,EAAS,GAEfzB,KAAK+G,iBAAiB9D,KAAK,aAAaS,MAAK,CAACmN,EAAOwc,KACnD,MAAMnqB,EAAQlD,KAAK+C,kBAAkBsqB,GACrC5rB,EAAOrB,KAAK8C,EAAM,IAGpBlD,KAAK+Z,QAAUtY,EACfzB,KAAKoY,QAAQ,oBACbpY,KAAKoY,QAAQ,SAAU,CAAElV,MAAO,MAClC,EAEA0mB,oBAAAA,GACE,IAAK,MAAM1mB,KAASlD,KAAK+Z,QAAS,CAChC,MAAM3R,EAAWlF,EAAM6D,iBAAiBqB,SAAS,aAC3CklB,EAAiB5C,KAAKE,IAAIxiB,EAAStI,OAAQ,GAC3CytB,EAAoB,GAE1B,IAAK,IAAItd,EAAI,EAAGA,EAAIqd,EAAgBrd,IAClCsd,EAAkBntB,KAAK,yDAGzB8C,EAAM+e,4BAA4B3U,KAAKigB,EAAkB3tB,KAAK,IAChE,CACF,EAEA4tB,iBAAAA,CAAmBtqB,GACjB,IAAKA,EACH,OAAO,EAGT,MACMuqB,EADYvqB,EAAMiE,eACMwB,oBAE9B,GAAI8kB,EAAc,EAAG,CAGnB,OAFiBztB,KAAKyrB,iBAAiBvoB,GAEvBpD,OAAS2tB,CAC3B,CAEA,OAAO,CACT,EAEAvE,cAAAA,GAAkB,IAAAwE,EAChB,MAAMjsB,EAASzB,KAAKiI,YACpBjI,KAAK2W,SAAS2P,mBAAmB7kB,GAChB,QAAjBisB,EAAA1tB,KAAKwqB,oBAAY,IAAAkD,GAAjBA,EAAmBpH,mBAAmB7kB,EAAQzB,KAAKwtB,kBAAkBxtB,KAAK2tB,oBAE1E,IAAK,MAAMzqB,KAASzB,EAAQ,KAAAmsB,EAC1B1qB,EAAMkc,oBACY,QAAlBwO,EAAA1qB,EAAM0D,oBAAY,IAAAgnB,GAAlBA,EAAoBtH,mBAAmB7kB,EAAQzB,KAAKwtB,kBAAkBtqB,GAAQA,GAC9EA,EAAMqR,mBAAmBvU,KAAKypB,YAAYvmB,EAAMmB,YAClD,CACF,EAEAynB,WAAAA,CAAa5oB,EAAO2qB,GAClB,MAAMpsB,EAASyB,EAAMsZ,aAAexc,KAAK4rB,oBAAsB,CAAC1oB,GAEhE,IAAK,MAAM2B,KAAKpD,EACdosB,EAAShpB,EAEb,EAEAsmB,mBAAAA,GAAqC,IAAhBxO,EAAO9c,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,KAG7B,GAFA8c,GAAWpd,IAAAA,yBAAsD,kBAAZod,GAAwBA,GAEzE3c,KAAKwqB,aAAc,CACrB,MAAMxZ,EAAUhR,KAAKwqB,aACrBxZ,EAAQ0a,IAAI,YAER/O,EACF3L,EAAQxP,WACLkI,IAAI,CACHsT,QAAS,EACTuO,aAAc,KAEfnO,SAAS,CACRJ,QAAS,EACTuO,cAAgBva,EAAQxP,WAAWyb,eAClC,QAAQpG,GAAK7F,EAAQxP,WAAWkX,WAErC1H,EAAQxP,WAAWkX,SAGrB1Y,KAAKwqB,aAAe,KACpBxqB,KAAK2tB,kBAAoB,IAC3B,CACF,EAEAzC,qBAAAA,CAAuBra,EAAO5B,GACxB4B,aAAiB6Y,IACnB7Y,EAAQ7Q,KAAK+Z,QAAQlZ,QAAQgQ,IAK/B,IAAI3N,EAFWlD,KAAK+Z,UAEClJ,GACjBid,EAAc9oB,OAAOC,UAEzB,KAAO/B,GAAO,CACZ,MAAM6qB,EAAa7qB,EAAMmB,WAEzB,GAAI0pB,EAAaD,EAAa,CAC5B,GAAIC,IAAe9e,EACjB,OAAO/L,EAGT4qB,EAAcC,CAChB,CAEA7qB,EAAQlD,KAAK+Z,UAAUlJ,EACzB,CAEA,OAAO,CACT,EAEA4a,gBAAAA,CAAkB5a,GAA2B,IAApB9I,EAAWlI,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,KACjCgR,aAAiB6Y,IACnB7Y,EAAQ7Q,KAAK+Z,QAAQlZ,QAAQgQ,IAG/B9I,EAAsC,kBAAhBA,GAA4BA,EAClD,MAAM7E,EAAQlD,KAAK+Z,QAAQlJ,GAE3B,OAAO3N,EAAQA,EAAM8E,YAAYhI,KAAK+Z,QAAShS,GAAe,EAChE,EAEAimB,gBAAAA,CAAkBnd,GACZA,aAAiB6Y,IACnB7Y,EAAQ7Q,KAAK+Z,QAAQlZ,QAAQgQ,IAG/B,MAAMpP,EAASzB,KAAK+Z,QACd7W,EAAQzB,EAAOoP,GAErB,GAAI3N,EAAO,CACT,MAAM+L,EAAQ/L,EAAMmB,WAEpB,GAAI4K,EAAQ,EAAG,CACb,IAAIgB,EAAIY,EACJoJ,EAAe/W,EAEnB,KAAO+W,GAAgBA,EAAa5V,YAAc4K,GAChDgL,EAAexY,IAASwO,GAG1B,OAAOgK,CACT,CACF,CAEA,OAAO,IACT,EAEA+R,kBAAAA,CAAoBnb,GAElB,QAAqB,IAAVA,EACT,OAAO,EAGLA,aAAiB6Y,IACnB7Y,EAAQ7Q,KAAK+Z,QAAQlZ,QAAQgQ,IAG/B,MAAM9I,EAAc/H,KAAKyrB,iBAAiB5a,GAAO,GAC3Cod,EAAiBlmB,EAAYA,EAAYjI,OAAS,GAExD,OAAQmuB,EAAiBjuB,KAAK+Z,QAAQlZ,QAAQotB,GAAkBpd,GAAS,CAC3E,EAMAwZ,+BAAAA,GAEE1S,YAAW,KACT,MAAMiL,EAAgB5iB,KAAK+T,MAAMtK,KAAK,iBACtCmZ,SAAAA,EAAezM,GAAG,UAAU,KAC1B,MAAMuH,EAASkF,EAAc9gB,SAAS4b,OAChCjU,EAAO,CACXhI,OAAQ,CAAC,EACT+I,UAAW,GACX0jB,QAASluB,KAAK4L,IACduiB,iBAAkBnuB,KAAK8nB,SACvBsG,aAAcxL,EAAc9gB,SAASghB,QACrCrF,mBAAoBmF,EAAc9gB,SAAS2b,mBAC3CC,UAEI2Q,EAAmB,CAAC,EAC1BruB,KAAK+Z,QAAQ1D,SAASnT,IAAU,IAAAorB,EAC9B,MAAMC,EAAgBrrB,EAAMsD,kBACzB4B,SAAS,kCACTqB,KAAK,cACRA,EAAKhI,OAAOyB,EAAM4V,wBAA0B,CAC1C0V,YAAaD,QAAAA,EAAiB,KAC9B7gB,sBAAiE,QAA5C4gB,EAAEtuB,KAAKunB,uBAAuBrkB,EAAM8K,gBAAQ,IAAAsgB,EAAAA,EAAI,CAAC,GAExE7kB,EAAKe,UAAUpK,KAAK8C,EAAM4V,wBAC1BuV,EAAiBnrB,EAAM4V,wBAA0B5V,EAAM8K,OAAO,IAGhExO,IAAAA,MAAYY,MAAK,IAAM,IAAIud,SAAQ,CAACC,EAASC,KAC3Cre,IAAAA,kBAAwB,OAAQ,oCAAqC,CAAEiK,SACpEqU,MAAM2Q,IAEL,GAAI7L,EAAc8L,eAChB7Q,EAAO8Q,MAAM,2BADf,CAKA,IAAK,MAAMpf,KAAWkf,EAAShlB,KAAKhI,OAAQ,CAC1C,MAAMyB,EAAQlD,KAAK+Z,QAAQ9W,MAAMC,GAAUA,EAAM8K,UAAYqgB,EAAiB9e,KAC9EvP,KAAK4uB,uBACH1rB,EACAurB,EAAShlB,KAAKhI,OAAO8N,GACrB9F,EAAKhI,OAAOyB,EAAM4V,wBAAwByV,cAE9C,CACA3Q,GAVA,CAUS,IAEVG,MAAMF,EAAO,KACf,GACH,GACD,IACL,EAMA+Q,sBAAAA,CAAwB1rB,EAAO2rB,EAAWN,GAAe,IAAAO,EAAAC,EACvD,IAAIC,EAAoBjtB,MACxB,MAAM2L,EAAwB,CAAC,EAC/B,IAAIuhB,GAAkB,EAEtB,IAAK,IAAIhf,EAAI,EAAGA,EAAI4e,EAAUK,gBAAgBpvB,OAAQmQ,IAAK,CACzD,MAAMkf,EAAUN,EAAUK,gBAAgBjf,GAC1C,IAAIoD,EAAgBnQ,EAAMsD,kBAAkB4B,SAAS,qBAAD2K,OAC7Boc,EAAQhlB,IAAG,OAG7BkJ,EAAcvT,SACjBuT,EAAgBtR,IAAE,SAAU,CAC1ByH,GAAItG,EAAMmf,YAAY8M,EAAQ3lB,IAC9BmM,MAAO,cACP,UAAWwZ,EAAQ3lB,GACnB,kBAAmB2lB,EAAQhlB,MAEzBglB,EAAQ3lB,KAAO+kB,GACjBlb,EAAcgB,SAAS,UAEzBhB,EAAc+b,SAASlsB,EAAMsD,oBAG/BwoB,EAAoBA,EAAkB7X,IAAI9D,GAE1C,IAAK,IAAIgc,EAAI,EAAGA,EAAIF,EAAQG,SAASxvB,OAAQuvB,IAAK,CAChD,MAAME,EAAcJ,EAAQG,SAASD,GAErC,IAAyB,IAArBE,EAAYjiB,MAMd,GALKI,EAAsByhB,EAAQhlB,OACjCuD,EAAsByhB,EAAQhlB,KAAO,IAEvCuD,EAAsByhB,EAAQhlB,KAAK/J,KAAKmvB,EAAYplB,KAEpB,iBAArBolB,EAAYjiB,KAAmB,CACxC,MAAMA,EAAOiiB,EAAYjiB,KAAKkiB,WAAW,eAAgBtsB,EAAM8K,SACzDyhB,EAAcpc,EAAcjL,SAAS,yBAAD2K,OACfwc,EAAYplB,IAAG,OAEpCulB,EAAc3tB,IAAEuL,GAClBmiB,EAAY3vB,OACd2vB,EAAYE,YAAYD,GAExBA,EAAYN,SAAS/b,GAEvB7T,IAAAA,eAAqBkwB,GACjBA,EAAYtZ,SAAS,+BACvBlT,EAAM8Q,eAERib,GAAkB,CACpB,MACK,CACL,MAAMQ,EAAcpc,EAAcjL,SAAS,yBAAD2K,OACfwc,EAAYplB,IAAG,OAE1C,IACGslB,EAAY3vB,SACZP,IAAAA,QACCkwB,EACA,mCAEF,CACA,MAAMG,EAAe7tB,IAAE,SAAU,CAC/B4T,MAAO,SACP,sBAAuB4Z,EAAYplB,IACnC,kCAAmC,KAGjCslB,EAAY3vB,OACd2vB,EAAYE,YAAYC,GAExBA,EAAaR,SAAS/b,GAGxB4b,GAAkB,CACpB,CACF,CACF,CAEIA,GACFjvB,KAAKkpB,gBAET,CAIA,MAAM2G,EAAuB3sB,EAAMsD,kBAChC4B,SAAS,qBACT0nB,IAAId,GACJc,IAAI,wBACHD,EAAqB/vB,SACvB+vB,EAAqBnX,SACrBuW,GAAkB,GAIfD,EAAkBpqB,OAAO,iBAAiB9E,QAC7CkvB,EAAkB/S,QAAQ1F,YAAY,UAGxCvW,KAAKunB,uBAAuBrkB,EAAM8K,SAAWN,EAI7C,MAAMqiB,EAAkF,QAAvEjB,EAAiB,QAAjBC,EAAGF,EAAU/jB,YAAI,IAAAikB,GAA+C,QAA/CA,EAAdA,EAAgB1tB,MAAM,+CAAuC,IAAA0tB,OAAA,EAA7DA,EAA+DvuB,aAAK,IAAAsuB,EAAAA,EAAI,KACtFkB,EAAWD,EACblB,EAAU/jB,KAAK0kB,WAAWO,EAAa7sB,EAAM8K,SAC7C6gB,EAAU/jB,KACRmlB,EAAYluB,IAAEiuB,GACQ9sB,EAAMiQ,sBAAsBlQ,KAAK,SACzCitB,QAAQlpB,OAAOipB,GACnC/sB,EAAM+S,WACN/S,EAAM0T,uBAENpX,IAAAA,eAAqBqvB,EAAUsB,SAASX,WAAW,eAAgBtsB,EAAM8K,UACzExO,IAAAA,eAAqBqvB,EAAUuB,SAASZ,WAAW,eAAgBtsB,EAAM8K,UAGrEihB,GAAmBJ,EAAUwB,oBAC/BxxB,OAAOkL,OACL/J,KAAK+T,MAAMtK,KAAK,wBAChBolB,EAAUwB,mBAGhB,EAEAC,gBAAAA,CAAkBptB,QACK,IAAVA,EACTA,EAAM1B,WAAWyF,MAAMjH,KAAKioB,WAE5BjoB,KAAK+G,iBAAiBM,QAAQrH,KAAKioB,UAEvC,EAEAsI,iBAAAA,CAAmBrtB,QACI,IAAVA,EACTA,EAAM1B,WAAW0F,OAAOlH,KAAKioB,WAE7BjoB,KAAK+G,iBAAiBC,OAAOhH,KAAKioB,UAEtC,EAEAuI,mBAAAA,CAAqB3C,GACdtuB,IAAAA,uBAWHsuB,IAVA7tB,KAAKioB,UACFve,IAAI,CACHsT,QAAS,EACTuO,cAAgBvrB,KAAKioB,UAAUhL,gBAEhCG,SAAS,CACRJ,QAAS,EACTuO,aAAc,IACb,QAAQ,IAAMsC,KAIvB,EAEA4C,cAAAA,GACEzwB,KAAKioB,UAAUvP,QACjB,EAEAgY,cAAAA,GACE,KAAO1wB,KAAK+G,iBAAiB9D,KAAK,sBAAD8P,OAAuB/S,KAAKwnB,YAAW,OAAM1nB,OAAS,GACrFE,KAAKwnB,cAGP,MAAO,MAAPzU,OAAa/S,KAAKwnB,cACpB,EAEAmJ,UAAAA,CAAYlnB,EAAMvG,GAAO,IAAA0tB,EACS,QAAhCA,EAAA5wB,KAAK+T,MAAMtK,KAAK,wBAAgB,IAAAmnB,GAAhCA,EAAkCnN,QAClCzjB,KAAKswB,iBAAiBptB,GACtBlD,KAAKwwB,qBAAoB,IAAMhxB,IAAAA,kBAAwB,0BAA2BiK,GAAMoN,IACtF,GAAIA,EAAE1H,SAAW0H,EAAEpV,OAAO3B,OAAS,EAAG,KAAA+wB,EACpC,MAAMC,EAAY,GAElB,IAAK,MAAMC,KAAiBla,EAAEpV,OAAQ,CACpC,MAAMuvB,EAAQhxB,KAAK0wB,iBACbO,EAAW,IAAIvH,EAAM,CACzB5a,UAAW,IAAI9O,KAAKkS,YAAa8e,GACjCzpB,MAAOvH,KACPyI,UAAWzI,KAAK0sB,iBAAiBqE,EAAc/sB,MAC/C8G,KAAMimB,EAAcjmB,KACpBtB,GAAIwnB,EACJ/hB,MAA6B,EAAtB8hB,EAAc9hB,MACrB9C,UAAW4kB,EAAc5kB,QACzB6C,YAAa+hB,EAAc/hB,UAC3BkC,aAAclR,KAAKypB,YAAkC,EAAtBsH,EAAc9hB,OAC7CkC,oBAAqBnR,KAAK+nB,wBACzB,GAEH+I,EAAU1wB,KAAK6wB,EACjB,CAEA,IAAIC,EAAWlxB,KAAKgsB,mBAAmB9oB,GAEvC,IAAK,MAAM+tB,KAAYH,EACrB9wB,KAAKyE,SAASwsB,EAAUC,IAAYD,EAAS5sB,YAAY,GAG3D,IAAK9E,IAAAA,uBAAgC,CACnC,MAAM4xB,EAAaL,EAAU,GAE7BK,EAAW3vB,WACRkI,IAAI,CACHsT,QAAS,EACTuO,aAAcvrB,KAAKioB,UAAUhL,cAAgBkU,EAAW3vB,WAAWyb,cAAgB,KAEpFG,SAAS,CACRJ,QAAS,EACTuO,aAAc,IACb,QAAQxU,GAAKxX,IAAAA,uBAA8B,IAAMA,IAAAA,yBAAiC4xB,EAAW3vB,eACpG,CAEAxB,KAAKywB,iBAC2B,QAAhCI,EAAA7wB,KAAK+T,MAAMtK,KAAK,wBAAgB,IAAAonB,GAAhCA,EAAkCnN,QACpC,MAEJ,EAEA,gBAAM,CAAa7M,GACjB,MAAMua,EAAiBA,KACrB,MAAM7hB,EAAUvP,KAAK0wB,iBACfxtB,EAAQ,IAAIwmB,EAAM,CACtB5a,UAAW,IAAI9O,KAAKkS,YAAa3C,GACjChI,MAAOvH,KACPyI,UAAWoO,EAAEpO,UACbe,GAAI+F,EACJ2B,aAAclR,KAAKypB,YAAY5S,EAAE5H,OACjCkC,oBAAqBnR,KAAK+nB,wBACzB,GAEH/nB,KAAKywB,iBACLzwB,KAAKyE,SAASvB,EAAO2T,EAAEhG,MAAOgG,EAAE5H,MAAO4H,EAAEkT,kBAAmBlT,EAAEkT,kBAAkB,EAGlF,GAA8B,OAA1BlT,EAAEpO,UAAUmG,UAEd,YADAwiB,IAIF,MAAMxO,EAAgB5iB,KAAK+T,MAAMtK,KAAK,iBAEtC,IAAI,IAAA4nB,EACFzO,SAAAA,EAAea,QACf,MAAMxU,EAAe,QAAVoiB,EAAGxa,EAAE5H,aAAK,IAAAoiB,EAAAA,EAAI,EACzB,IAAIC,EACAC,GAAW,EAEf,IAAK,IAAIthB,OAAuB,IAAZ4G,EAAEhG,MAAwBgG,EAAEhG,MAAQ,EAAI7Q,KAAK+Z,QAAQja,OAAS,EAAGmQ,GAAK,EAAGA,IAAK,CAEhG,GAAIjQ,KAAK+Z,QAAQ9J,GAAG5L,aAAe4K,EAAO,CACxCqiB,EAAetxB,KAAK+Z,QAAQ9J,GAC5B,KACF,CAIIjQ,KAAK+Z,QAAQ9J,GAAG5L,WAAa4K,IAC/BqiB,EAAetxB,KAAK+Z,QAAQ9J,EAAI,GAChCshB,GAAW,EAEf,CAEIA,EACFvxB,KAAKswB,iBAAiBgB,GAEtBtxB,KAAKuwB,kBAAkBe,GAGzBtxB,KAAKwwB,qBAAoBgB,gBACjB3a,EAAEpO,UAAUoG,WAClBuiB,GAAgB,GAEpB,CAAE,MAAOK,GACPzxB,KAAKywB,iBACLjxB,IAAAA,GAASkyB,aAAaD,EACxB,CAAE,QACA7O,SAAAA,EAAec,QACjB,CACF,EAEA,iBAAkB7M,GAChB7W,KAAKmrB,sBAEL,MAAMxO,GAAWpd,IAAAA,yBAAgD,IAAdsX,EAAE8F,QAC/CzZ,EAAQ2T,EAAE3T,MACV2N,EAAQ7Q,KAAK+Z,QAAQlZ,QAAQqC,GAC7BI,EAAStD,KAAKguB,iBAAiBnd,GAC/BpP,EAASzB,KAAKiI,YACd+I,EAAU,IAAIhR,KAAKkiB,YAAY,CACnCC,gBAAiBjf,EAAMgW,aAAelZ,KAAKwB,WAAa0B,EAAM4W,YAAYtY,WAC1E+F,MAAOvH,KACP8jB,WAAaxgB,EAAoC,GAA3BtD,KAAKyf,eAAc,GACzChe,SACAsiB,OAASzgB,EAA4B,GAAnBtD,KAAKqmB,YACvBxkB,MAAOyB,EAASA,EAAO6D,eAAe0I,mBAAmB7P,KAAKoiB,YAAc,KAC5E1X,UAAW1K,KAAKsO,iBAGlBpL,EAAM1B,WAAW0F,OAAO8J,EAAQxP,YAEhCwP,EAAQmF,GAAG,YAAYU,GAAK7W,KAAK,aAAa,CAC5CyI,UAAWoO,EAAEpO,UACboI,QACA5B,MAAO/L,EAAMmB,eAGf2M,EAAQ6E,SAEJ8G,GACF3L,EAAQxP,WACLkI,IAAI,CACHsT,QAAS,EACTuO,cAAgBva,EAAQxP,WAAWyb,gBAEpCG,SAAS,CACRJ,QAAS,EACTuO,aAAc,IACb,QAAQxU,GAAKxX,IAAAA,uBAA8B,IAAMA,IAAAA,yBAAiCyR,EAAQxP,gBAGjGxB,KAAKwqB,aAAexZ,EACpBhR,KAAK2tB,kBAAoB3tB,KAAKguB,iBAAiB9qB,GAE/ClD,KAAKwqB,aAAalE,mBAAmB7kB,EAAQzB,KAAKwtB,kBAAkBxtB,KAAK2tB,mBAAoB3tB,KAAK2tB,kBACpG,EAEA,aAAc9W,GAEZ,MAAM8a,EAAc,GACpB,IAAIlH,EAAa,EACjB,MAAMnD,EAAUtnB,KAAK8nB,SAErB9nB,KAAK8rB,YAAYjV,EAAE3T,OAAQA,IAKzB,KAFmBunB,EAAa,IAA6D,IAAxDkH,EAAYA,EAAY7xB,OAAS,GAAGe,QAAQqC,IAEhE,CACf,MAAM0uB,EAAW,GACjBA,EAASxxB,KAAK8C,KAAUlD,KAAKyrB,iBAAiBvoB,GAAO,IACrDyuB,EAAYvxB,KAAKwxB,GACjBnH,GAAcmH,EAAS9xB,MACzB,KAIF,MAAM2J,EAAO,CACXlC,MAAOvH,KAAKgK,MACZvI,OAAQ,IAGV,IAAK,MAAM4mB,KAASsJ,EAAa,CAC/B,MAAME,EAAkBxJ,EAAM,GAAGhkB,WAAa,EAE9C,IAAK,MAAMnB,KAASmlB,EAAO,CACzB,MAAMwG,EAAY,CAChB7qB,KAAMd,EAAMiE,eAAe6G,QAC3BiB,MAAO/L,EAAMmB,WAAawtB,EAC1Bza,QAASlU,EAAMuW,aACf6N,WAGEpkB,EAAMqb,cACRsQ,EAAU1iB,QAAU,GAGjBjJ,EAAM+C,eACT4oB,EAAU7f,UAAY,GAGxBvF,EAAKhI,OAAOrB,KAAKyuB,EACnB,CACF,CAEApX,OAAOiJ,aAAaoR,QAAQ,YAAD/e,OAAa/S,KAAKgK,OAASyW,KAAKsR,UAAUtoB,IAErEzJ,KAAKkpB,iBAEL,MAAM8I,EAAwB,IAAfvH,EAAmB,iBAAmB,oBACrDjrB,IAAAA,GAASyyB,cAAczyB,IAAAA,EAAQ,MAAOwyB,EAAQ,CAAEE,IAClD,EAEA,cAAerb,GAAG,IAAAsb,EAChB,MAAMjvB,EAAQ2T,EAAE3T,MACVkvB,GAA8B,QAAlBD,EAACjvB,aAAK,EAALA,EAAOmB,kBAAU,IAAA8tB,EAAAA,EAAI,GAAK,EACvC1wB,EAASzB,KAAK8sB,kBAEpB,GAAIrrB,EAAO3B,OAAS,EAAG,CACrB,IAAK,MAAM2hB,KAAchgB,EACvBggB,EAAWxS,OAASmjB,EAGtBrjB,EAAGrP,MAAMM,KAAKkS,aAEd,MAAMzI,EAAO,CACXqF,UAAWC,EAAG9N,cACdyc,OAAQ1d,KAAKuZ,QACb9X,UAGFsN,EAAGxO,QAEHP,KAAK2wB,WAAWlnB,EAAMvG,EACxB,CACF,EAEA,kBAAmB2T,GACjB,MAAM3T,EAAQ2T,EAAE3T,MACVmvB,EAAaryB,KAAK+Z,QAAQlZ,QAAQqC,GAClCovB,EAAYtyB,KAAKyrB,iBAAiB4G,GAAY,GAC9C/K,EAAUtnB,KAAK8nB,SAEfyK,EAAervB,IACZ,CACL8L,UAAiC,GAArB9L,EAAM+C,aAClBmR,QAASlU,EAAMuW,aACftN,QAA6B,EAApBjJ,EAAMqb,YACftP,MAAO/L,EAAMmB,WACbijB,UACAtjB,KAAMd,EAAMiE,eAAe6G,UAI/Be,EAAGrP,MAAMM,KAAKkS,aAEd,MAAMzI,EAAO,CACXqF,UAAWC,EAAG9N,cACdyc,OAAQ1d,KAAKuZ,QACb9X,OAAQ,CACN8wB,EAAarvB,MACVovB,EAAUrlB,IAAIslB,KAIrBxjB,EAAGxO,QAEHP,KAAK2wB,WAAWlnB,EAAMvG,EACxB,I,MC/wCF,MAAMsvB,EAAgB,QAATC,EAAGhb,cAAM,IAAAgb,EAAAA,OAAI,EACpBC,EAAS,GAEfF,EAAQG,IAAM,CACZC,MAAK,EACLF,SAEAG,WAAAA,GACE,MAAMjjB,EAAQ,IAAIgjB,EADC/yB,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAC,GAIvB,OAFA6yB,EAAOtyB,KAAKwP,GAELA,CACT,E","sources":["webpack://craft-neo/webpack/bootstrap","webpack://craft-neo/webpack/runtime/compat get default export","webpack://craft-neo/webpack/runtime/define property getters","webpack://craft-neo/webpack/runtime/hasOwnProperty shorthand","webpack://craft-neo/external var \"jQuery\"","webpack://craft-neo/external var \"Garnish\"","webpack://craft-neo/external var \"Craft\"","webpack://craft-neo/./src/assets/src/namespace.js","webpack://craft-neo/./src/assets/src/input/BlockSort.js","webpack://craft-neo/./src/assets/src/input/BlockTypeTab.js","webpack://craft-neo/./src/assets/src/input/BlockType.js","webpack://craft-neo/./src/assets/src/input/Group.js","webpack://craft-neo/./src/assets/src/jquery-extensions.js","webpack://craft-neo/./src/assets/src/input/Block.js","webpack://craft-neo/./src/assets/src/plugins/cpfieldinspect/main.js","webpack://craft-neo/./src/assets/src/input/NewBlockMenu.js","webpack://craft-neo/./src/assets/src/input/Buttons.js","webpack://craft-neo/./src/assets/src/input/ButtonsGrid.js","webpack://craft-neo/./src/assets/src/input/ButtonsList.js","webpack://craft-neo/./src/assets/src/input/Input.js","webpack://craft-neo/./src/assets/src/main.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","const __WEBPACK_NAMESPACE_OBJECT__ = jQuery;","const __WEBPACK_NAMESPACE_OBJECT__ = Garnish;","const __WEBPACK_NAMESPACE_OBJECT__ = Craft;","export default {\n\n _stack: [[]],\n\n enter (segments, join = true) {\n if (typeof segments === 'string') {\n segments = this.fromFieldName(segments)\n }\n\n if (join) {\n const joined = this.getNamespace()\n joined.push(...segments)\n\n segments = joined\n }\n\n this._stack.push(segments)\n },\n\n enterByFieldName (fieldName, join = true) {\n this.enter(this.fromFieldName(fieldName), join)\n },\n\n leave () {\n return this._stack.length > 1\n ? this._stack.pop()\n : this.getNamespace()\n },\n\n getNamespace () {\n return Array.from(this._stack[this._stack.length - 1])\n },\n\n parse (value) {\n if (typeof value === 'string') {\n if (value.indexOf('[') > -1) {\n return this.fromFieldName(value)\n }\n\n if (value.indexOf('-') > -1) {\n return value.split('-')\n }\n\n if (value.indexOf('.') > -1) {\n return value.split('.')\n }\n\n return value\n }\n\n return Array.from(value)\n },\n\n value (value, separator = '-') {\n const segments = this.getNamespace()\n segments.push(value)\n\n return segments.join(separator)\n },\n\n fieldName (fieldName = '') {\n const prefix = this.toFieldName()\n\n if (prefix) {\n return prefix + fieldName.replace(/([^'\"[\\]]+)([^'\"]*)/, '[$1]$2')\n }\n\n return fieldName\n },\n\n toString (separator = '-') {\n return this.getNamespace().join(separator)\n },\n\n toFieldName () {\n const segments = this.getNamespace()\n\n switch (segments.length) {\n case 0: return ''\n case 1: return segments[0]\n }\n\n return segments[0] + '[' + segments.slice(1).join('][') + ']'\n },\n\n fromFieldName (fieldName) {\n return fieldName.match(/[^[\\]\\s]+/g) || []\n }\n}\n","import $ from 'jquery'\nimport Garnish from 'garnish'\n\nconst BlockSort = Garnish.Drag.extend({\n\n $container: null,\n blocks: null,\n maxTopBlocks: 0,\n\n _draggeeBlocks: null,\n\n init (items, settings) {\n if (typeof settings === 'undefined' && $.isPlainObject(items)) {\n settings = items\n items = null\n }\n\n settings = $.extend({}, BlockSort.defaults, settings)\n settings.axis = Garnish.Y_AXIS\n\n this.base(items, settings)\n\n this.$container = settings.container\n this.blocks = []\n this.maxTopBlocks = settings.maxTopBlocks\n },\n\n getHelperTargetX () {\n return this.$draggee.offset().left\n },\n\n getHelperTargetY () {\n const magnet = this.settings.magnetStrength\n\n if (magnet !== 1) {\n const draggeeOffsetY = this.$draggee.offset().top\n return draggeeOffsetY + ((this.mouseY - this.mouseOffsetY - draggeeOffsetY) / magnet)\n }\n\n return this.base()\n },\n\n getBlockByElement ($block) {\n return this.blocks.find(block => block.$container.is($block))\n },\n\n getParentBlock (block) {\n const $parentBlock = block.$container.parent().closest('.ni_block')\n\n return $parentBlock.length > 0 ? this.getBlockByElement($parentBlock) : false\n },\n\n onDragStart () {\n const that = this\n\n this._draggeeBlocks = []\n this.$draggee.each(function () {\n that._draggeeBlocks.push(that.getBlockByElement(this))\n })\n\n this.base()\n this._calculateMidpoints()\n },\n\n onDrag () {\n const midpoint = this._getClosestMidpoint()\n\n if (midpoint) {\n this._moveDraggeeToBlock(midpoint.block, midpoint.type, midpoint.direction)\n }\n\n this.base()\n },\n\n onDragStop () {\n const that = this\n this.$draggee.each(function () {\n const $block = $(this)\n const block = that.getBlockByElement($block)\n const isRoot = $block.parent().is(that.$container)\n\n if (isRoot) {\n block.setLevel(1)\n } else {\n const parentBlock = that.getParentBlock(block)\n\n block.setLevel(parentBlock.getLevel() + 1)\n }\n\n $block.find('.ni_block').each(function () {\n const $childBlock = $(this)\n const childBlock = that.getBlockByElement($childBlock)\n const parentBlock = that.getParentBlock(childBlock)\n\n childBlock.setLevel(parentBlock.getLevel() + 1)\n })\n })\n\n this.returnHelpersToDraggees()\n\n this.base()\n },\n\n addBlock (block) {\n this.blocks.push(block)\n\n this.addItems(block.$container)\n },\n\n removeBlock (block) {\n this.blocks = this.blocks.filter(b => b !== block)\n\n this.removeItems(block.$container)\n },\n\n _getClosestMidpoint () {\n let minDistance = Number.MAX_VALUE\n let maxDistance = Number.MIN_VALUE\n let closest = null\n\n for (const midpoint of this._currentMidpoints) {\n if (midpoint.direction === BlockSort.DIRECTION_UP) {\n const compareY = this.mouseY - this.mouseOffsetY\n\n if (compareY < midpoint.position && midpoint.position < minDistance) {\n minDistance = midpoint.position\n closest = midpoint\n }\n } else {\n const compareY = this.mouseY - this.mouseOffsetY + this._draggeeBlockHeight\n\n if (compareY > midpoint.position && midpoint.position > maxDistance) {\n maxDistance = midpoint.position\n closest = midpoint\n }\n }\n }\n\n return closest\n },\n\n _calculateMidpoints () {\n const margin = 10\n\n this._draggeeBlockY = this.$draggee.offset().top\n this._draggeeBlockHeight = this.$draggee.height() + margin\n\n this._currentMidpoints = []\n\n for (const block of this.blocks) {\n if (block.$container.closest(this.$draggee).length === 0) {\n const midpoints = this._getBlockMidpoints(block)\n\n for (const type of Object.keys(midpoints)) {\n const position = midpoints[type]\n const direction = this._draggeeBlockY > position\n ? BlockSort.DIRECTION_UP\n : BlockSort.DIRECTION_DOWN\n\n this._currentMidpoints.push({\n block,\n position,\n type,\n direction\n })\n }\n }\n }\n\n const endMidpoint = this.$container.offset().top + this.$container.height() + (margin / 2)\n this._currentMidpoints.push({\n block: null,\n position: endMidpoint,\n type: BlockSort.TYPE_END,\n direction: BlockSort.DIRECTION_DOWN\n })\n },\n\n _getBlockMidpoints (block) {\n const midpoints = {}\n\n const border = 1\n const margin = 10\n const padding = 14\n\n const isAncestorCollapsed = (block.$container.parent().closest('.ni_block.is-collapsed').length > 0)\n\n if (!isAncestorCollapsed) {\n const offset = block.$container.offset().top\n\n const isExpanded = block.isExpanded()\n\n const blockHeight = block.$container.height()\n const topbarHeight = block.$topbarContainer.height()\n const childrenHeight = isExpanded ? block.$childrenContainer.height() : 0\n const preChildrenContentHeight = !(isExpanded && block.$contentContainer.length > 0)\n ? 0\n : block.$childrenContainer.length > 0\n ? block.$childrenContainer.offset().top - block.$contentContainer.offset().top\n : block.$contentContainer.height()\n\n const parentBlock = this.getParentBlock(block)\n\n if (!parentBlock || this._validateDraggeeChildren(parentBlock)) {\n midpoints[BlockSort.TYPE_CONTENT] = offset + (topbarHeight + preChildrenContentHeight) / 2\n }\n\n if (childrenHeight > 0 && block.isExpanded() && this._validateDraggeeChildren(block)) {\n const buttonsHeight = block.getButtons().$container.height()\n midpoints[BlockSort.TYPE_CHILDREN] = offset + blockHeight - border - (padding + buttonsHeight + margin) / 2\n }\n }\n\n return midpoints\n },\n\n _moveDraggeeToBlock: function (block, type = BlockSort.TYPE_CONTENT, direction = BlockSort.DIRECTION_DOWN) {\n const parentBlock = block ? this.getParentBlock(block) : null\n const validChild = this._validateDraggeeChildren(parentBlock)\n\n switch (type) {\n case BlockSort.TYPE_CHILDREN:\n if (this.$draggee.closest(block.$container).length === 0) {\n block.$blocksContainer.append(this.$draggee)\n } else if (validChild) {\n block.$container.after(this.$draggee)\n }\n break\n case BlockSort.TYPE_END:\n if (validChild) {\n this.$container.append(this.$draggee)\n }\n break\n default:\n {\n if (direction === BlockSort.DIRECTION_UP) {\n if (validChild) {\n block.$container.before(this.$draggee)\n }\n } else {\n if (block.getBlockType().isParent() && block.isExpanded() && this._validateDraggeeChildren(block)) {\n block.$blocksContainer.prepend(this.$draggee)\n } else if (validChild) {\n block.$container.after(this.$draggee)\n }\n }\n }\n }\n\n this._updateHelperAppearance()\n this._calculateMidpoints()\n },\n\n _validateDraggeeChildren (block) {\n // If any of the draggee blocks would exceed the field's max levels, we can't allow the move\n const field = block ? block.getField() : this._draggeeBlocks[0].getField()\n const maxLevels = field.getMaxLevels()\n\n if (maxLevels > 0) {\n const parentLevel = block ? block.getLevel() : -1\n const firstDraggeeLevel = this._draggeeBlocks[0].getLevel()\n const blockExceedsMax = b => b.getLevel() - firstDraggeeLevel + parentLevel + 1 >= maxLevels\n const blockOrDescendantExceedsMax = b => {\n const descendants = b.getChildren(field.getBlocks(), true)\n\n return blockExceedsMax(b) || descendants.some(blockOrDescendantExceedsMax)\n }\n\n if (this._draggeeBlocks.filter(blockOrDescendantExceedsMax).length > 0) {\n return false\n }\n }\n\n // If no block, then we're checking at the top level\n if (!block) {\n const that = this\n const topBlocks = this.$container.children('.ni_block:not(.is-disabled)')\n let topBlocksCount = topBlocks.length\n\n for (const draggeeBlock of this._draggeeBlocks) {\n // Is this block allowed at the top level?\n if (!draggeeBlock.getBlockType().getTopLevel()) {\n return false\n }\n }\n\n // If the block is already at the top level, don't count it for max top level block check purposes\n topBlocks.each(function () {\n if (that._draggeeBlocks.includes(that.getBlockByElement(this))) {\n topBlocksCount--\n }\n })\n\n // If this move would exceed the field's max top level blocks, we can't allow it\n if (this.maxTopBlocks > 0 && topBlocksCount >= this.maxTopBlocks) {\n return false\n }\n\n return true\n }\n\n const blockType = block.getBlockType()\n const maxChildBlocks = blockType.getMaxChildBlocks()\n\n const blockChildren = block.$childrenContainer.children('.ni_blocks').children('.ni_block')\n let blockChildCount = blockChildren.length\n const blockChildrenWithoutDraggees = []\n const that = this\n\n // If the block is already a child block, don't count it for validation purposes\n blockChildren.each(function () {\n const childBlock = that.getBlockByElement(this)\n\n if (that._draggeeBlocks.includes(childBlock)) {\n blockChildCount--\n } else {\n blockChildrenWithoutDraggees.push(childBlock)\n }\n })\n\n // Check whether the move would make the potential parent block exceed its max child blocks\n if (maxChildBlocks > 0 && blockChildCount >= maxChildBlocks) {\n return false\n }\n\n const checkedDraggeeBlocks = []\n\n for (const draggeeBlock of this._draggeeBlocks) {\n // Check whether the block is a valid child block for the parent's block type\n if (!blockType.isValidChildBlock(draggeeBlock)) {\n return false\n }\n\n // Check whether this move would cause any max sibling block type violations, unless we\n // checked this block already\n if (checkedDraggeeBlocks.includes(draggeeBlock)) {\n continue\n }\n\n const draggeeBlockType = draggeeBlock.getBlockType()\n const maxSiblingBlocks = draggeeBlockType.getMaxSiblingBlocks()\n\n // Also don't bother checking for max sibling block type violations if max sibling\n // blocks hasn't been set\n if (maxSiblingBlocks === 0) {\n continue\n }\n\n const draggeeBlocksOfType = this._draggeeBlocks.filter(b => b.getBlockType().getHandle() === draggeeBlockType.getHandle())\n const siblingBlocksOfType = blockChildrenWithoutDraggees.filter(b => b.getBlockType().getHandle() === draggeeBlockType.getHandle())\n\n if (siblingBlocksOfType.length + draggeeBlocksOfType.length > maxSiblingBlocks) {\n return false\n }\n\n checkedDraggeeBlocks.push(...draggeeBlocksOfType)\n }\n\n return true\n },\n\n _updateHelperAppearance () {\n for (const $helper of this.helpers) {\n const id = $helper.data('neo-b-id')\n const block = this.blocks.find(b => b.$container.data('neo-b-id') === id)\n\n $helper.css({\n width: block.$container.width() + 1,\n height: block.$container.height()\n })\n }\n }\n\n}, {\n\n TYPE_CONTENT: 'content',\n TYPE_CHILDREN: 'children',\n TYPE_END: 'end',\n DIRECTION_UP: 'up',\n DIRECTION_DOWN: 'down',\n\n defaults: {\n container: null,\n magnetStrength: 1\n }\n})\n\nexport default BlockSort\n","import Garnish from 'garnish'\n\nconst _defaults = {\n name: '',\n errors: []\n}\n\nexport default Garnish.Base.extend({\n\n init (settings = {}) {\n settings = Object.assign({}, _defaults, settings)\n\n this._name = settings.name\n this._errors = settings.errors\n this._uid = settings.uid\n },\n\n getErrors () { return Array.from(this._errors) },\n\n getName () { return this._name },\n\n /**\n * @public\n * @since 3.7.0\n * @returns this tab's UID\n */\n getUid () { return this._uid }\n})\n","import Garnish from 'garnish'\nimport Craft from 'craft'\nimport NS from '../namespace'\nimport Tab from './BlockTypeTab'\n\nconst _defaults = {\n id: -1,\n fieldLayoutId: -1,\n sortOrder: 0,\n name: '',\n handle: '',\n maxBlocks: 0,\n maxSiblingBlocks: 0,\n maxChildBlocks: 0,\n groupChildBlockTypes: true,\n childBlocks: false,\n topLevel: true,\n tabs: null,\n tabNames: [],\n hasChildBlocksUiElement: false,\n creatableByUser: true,\n deletableByUser: true,\n editableByUser: true\n}\n\nexport default Garnish.Base.extend({\n\n init (settings = {}) {\n settings = Object.assign({}, _defaults, settings)\n\n this._id = settings.id | 0\n this._fieldLayoutId = settings.fieldLayoutId | 0\n this._sortOrder = settings.sortOrder | 0\n this._name = settings.name\n this._handle = settings.handle\n this._description = settings.description\n this._enabled = settings.enabled\n this._minBlocks = settings.minBlocks | 0\n this._maxBlocks = settings.maxBlocks | 0\n this._minSiblingBlocks = settings.maxSiblingBlocks | 0\n this._maxSiblingBlocks = settings.maxSiblingBlocks | 0\n this._minChildBlocks = settings.minChildBlocks | 0\n this._maxChildBlocks = settings.maxChildBlocks | 0\n this._groupChildBlockTypes = settings.groupChildBlockTypes\n this._childBlocks = settings.childBlocks\n this._topLevel = settings.topLevel\n this._tabNames = settings.tabNames\n if (settings.tabs !== null) {\n this._tabs = settings.tabs.tabNames?.map(\n tab => tab instanceof Tab\n ? tab\n : new Tab({\n name: tab,\n uid: settings.tabs.tabUids[tab]\n })\n ) ?? []\n } else {\n this._tabs = null\n }\n this._html = settings.tabs?.html ?? ''\n this._js = settings.tabs?.js ?? ''\n this._defaultVisibleLayoutElements = settings.tabs?.visibleLayoutElements ?? {}\n this._hasChildBlocksUiElement = settings.hasChildBlocksUiElement\n this._creatableByUser = settings.creatableByUser\n this._deletableByUser = settings.deletableByUser\n this._editableByUser = settings.editableByUser\n },\n\n getType () { return 'blockType' },\n getId () { return this._id },\n getFieldLayoutId () { return this._fieldLayoutId },\n getSortOrder () { return this._sortOrder },\n getName () { return this._name },\n getHandle () { return this._handle },\n getDescription () { return this._description },\n getEnabled () { return this._enabled },\n getMinBlocks () { return this._minBlocks },\n getMaxBlocks () { return this._maxBlocks },\n getMinSiblingBlocks () { return this._minSiblingBlocks },\n getMaxSiblingBlocks () { return this._maxSiblingBlocks },\n getMinChildBlocks () { return this._minChildBlocks },\n getMaxChildBlocks () { return this._maxChildBlocks },\n getGroupChildBlockTypes () { return this._groupChildBlockTypes },\n getChildBlocks () { return this._childBlocks },\n getTopLevel () { return this._topLevel },\n getTabNames () { return this._tabNames },\n\n getTabs () { return this._tabs !== null ? Array.from(this._tabs) : null },\n async loadTabs () {\n if (this._tabs !== null) {\n return\n }\n\n const data = {\n namespace: NS.toFieldName(),\n blocks: [{\n collapsed: false,\n enabled: true,\n level: 1,\n type: this._id\n }]\n }\n const renderedBlocks = await Craft.sendActionRequest('POST', 'neo/input/render-blocks', { data })\n if (renderedBlocks.data.success) {\n const tabs = renderedBlocks.data.blocks[0].tabs\n this._tabs = tabs.tabNames?.map(\n tab => new Tab({\n name: tab,\n uid: tabs.tabUids[tab]\n })\n ) ?? []\n this._html = tabs.html\n this._js = tabs.js\n }\n },\n\n getHtml (blockId = null) {\n return this._replaceBlockIdPlaceholder(this._html, blockId)\n },\n\n getJs (blockId = null) {\n return this._replaceBlockIdPlaceholder(this._js, blockId)\n },\n\n getDefaultVisibleLayoutElements () {\n return {\n ...this._defaultVisibleLayoutElements\n }\n },\n\n _replaceBlockIdPlaceholder (input, blockId = null) {\n return blockId !== null ? input.replace(/__NEOBLOCK__/g, blockId) : input\n },\n\n getChildBlockItems (items) {\n const firstPass = items.filter(item => item.getType() === 'group' || this.hasChildBlock(item.getHandle()))\n return firstPass.filter((item, i) => {\n if (item.getType() === 'group') {\n const nextItem = firstPass[i + 1]\n return nextItem && nextItem.getType() !== 'group'\n }\n\n return true\n })\n },\n\n isParent () {\n const cb = this.getChildBlocks()\n return cb === true || cb === '*' || (Array.isArray(cb) && cb.length > 0)\n },\n\n hasChildBlock (handle) {\n const cb = this.getChildBlocks()\n return cb === true || cb === '*' || (Array.isArray(cb) && cb.includes(handle))\n },\n\n isValidChildBlock (block) {\n return this.hasChildBlock(block.getBlockType().getHandle())\n },\n\n hasChildBlocksUiElement () {\n return this._hasChildBlocksUiElement\n },\n\n isCreatableByUser () {\n return this._creatableByUser\n },\n\n isDeletableByUser () {\n return this._deletableByUser\n },\n\n isEditableByUser () {\n return this._editableByUser\n }\n})\n","import Garnish from 'garnish'\n\nconst _defaults = {\n id: -1,\n sortOrder: 0,\n alwaysShowDropdown: null,\n name: ''\n}\n\nexport default Garnish.Base.extend({\n\n init (settings = {}) {\n settings = Object.assign({}, _defaults, settings)\n\n this._id = settings.id | 0\n this._sortOrder = settings.sortOrder | 0\n this._alwaysShowDropdown = settings.alwaysShowDropdown\n this._name = settings.name\n },\n\n getType () { return 'group' },\n getId () { return this._id },\n getSortOrder () { return this._sortOrder },\n getName () { return this._name },\n getAlwaysShowDropdown () { return this._alwaysShowDropdown },\n isBlank () { return !this._name }\n})\n","import $ from 'jquery'\n\n// @see http://stackoverflow.com/a/12903503/556609\n$.fn.insertAt = function (index, $parent) {\n return this.each(function () {\n if (index === 0) {\n $parent.prepend(this)\n } else {\n $parent.children().eq(index - 1).after(this)\n }\n })\n}\n","import $ from 'jquery'\nimport '../jquery-extensions'\n\nimport Garnish from 'garnish'\nimport Craft from 'craft'\n\nimport NS from '../namespace'\nimport Tab from './BlockTypeTab'\n\nimport { addFieldLinks } from '../plugins/cpfieldinspect/main'\n\nconst _defaults = {\n namespace: [],\n blockType: null,\n tabs: null,\n id: null,\n level: 1,\n buttons: null,\n enabled: true,\n collapsed: false,\n modified: true,\n showButtons: true,\n showBlockTypeHandle: false\n}\n\nconst _resources = {}\n\nconst _escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '/': '/'\n}\n\nfunction _resourceFilter () {\n let url = this.href || this.src\n\n if (url) {\n const paramIndex = url.indexOf('?')\n\n url = (paramIndex < 0 ? url : url.substr(0, paramIndex))\n\n const isNew = !Object.prototype.hasOwnProperty.call(_resources, url)\n _resources[url] = 1\n\n return isNew\n }\n\n return true\n}\n\nfunction _escapeHTML (str) {\n return str ? str.replace(/[&<>\"'/]/g, s => _escapeMap[s]) : ''\n}\n\nfunction _limit (s, l = 40) {\n s = s || ''\n return s.length > l ? s.slice(0, l - 3) + '...' : s\n}\n\nexport default Garnish.Base.extend({\n\n _templateNs: [],\n _field: null,\n _blockType: null,\n _initialised: false,\n _expanded: true,\n _enabled: true,\n _modified: true,\n _initialState: null,\n _forceModified: false,\n _tabs: null,\n _html: null,\n _js: null,\n\n init (settings = {}, generateElement = false) {\n settings = Object.assign({}, _defaults, settings)\n\n this._templateNs = NS.parse(settings.namespace)\n this._field = settings.field\n this._blockType = settings.blockType\n if (settings.tabs !== null) {\n this._tabs = settings.tabs.tabNames?.map(\n tab => tab instanceof Tab\n ? tab\n : new Tab({\n name: tab,\n uid: settings.tabs.tabUids[tab]\n })\n ) ?? []\n } else {\n this._tabs = null\n }\n this._html = settings.tabs?.html ?? null\n this._js = settings.tabs?.js ?? null\n this._id = settings.id\n this._enabled = settings.enabled && this._blockType.getEnabled()\n this._initialEnabled = settings.enabled\n this._modified = settings.modified\n this._showButtons = settings.showButtons\n this._renderOldChildBlocksContainer = !settings.blockType.hasChildBlocksUiElement()\n this.$container = generateElement\n ? this._generateElement(settings.showBlockTypeHandle)\n : this._field.$container.find(`[data-neo-b-id=${this._id}]`)\n\n const $neo = this.$container.find('[data-neo-b]')\n this.$bodyContainer = $neo.filter(`[data-neo-b=\"${this._id}.container.body\"]`)\n this.$contentContainer = $neo.filter(`[data-neo-b=\"${this._id}.container.content\"]`)\n this.$topbarContainer = $neo.filter(`[data-neo-b=\"${this._id}.container.topbar\"]`)\n this.$topbarLeftContainer = $neo.filter(`[data-neo-b=\"${this._id}.container.topbarLeft\"]`)\n this.$topbarRightContainer = $neo.filter(`[data-neo-b=\"${this._id}.container.topbarRight\"]`)\n this.$handleContainer = $neo.filter(`[data-neo-b=\"${this._id}.container.handle\"]`)\n this.$tabContainer = this.$contentContainer.children('[data-layout-tab]')\n this.$menuContainer = $neo.filter(`[data-neo-b=\"${this._id}.container.menu\"]`)\n this.$previewContainer = $neo.filter(`[data-neo-b=\"${this._id}.container.preview\"]`)\n this.$settingsButton = $neo.filter(`[data-neo-b=\"${this._id}.button.actions\"]`)\n this.$togglerButton = $neo.filter(`[data-neo-b=\"${this._id}.button.toggler\"]`)\n this.$enabledInput = $neo.filter(`[data-neo-b=\"${this._id}.input.enabled\"]`)\n this.$levelInput = $neo.filter(`[data-neo-b=\"${this._id}.input.level\"]`)\n this.$collapsedInput = $neo.filter(`[data-neo-b=\"${this._id}.input.collapsed\"]`)\n this.$status = $neo.filter(`[data-neo-b=\"${this._id}.status\"]`)\n this.$sortOrder = $neo.filter(`[data-neo-b=\"${this._id}.sortOrder\"]`)\n this.$form = this.$container.closest('form')\n this.resetButtons(settings.buttons)\n\n let hasErrors = false\n if (this._blockType) {\n for (const tabName of this._blockType.getTabNames()) {\n const selector = `[data-neo-b-info=\"${tabName}\"]`\n\n if (this.$tabContainer.filter(selector).find('ul.errors').length > 0) {\n hasErrors = true\n this.$tabButton.filter(selector).addClass('error')\n }\n }\n }\n\n this.setLevel(settings.level)\n this.toggleExpansion(hasErrors ? true : !settings.collapsed, false, false)\n this.toggleShowButtons(this._showButtons)\n\n this.addListener(this.$topbarContainer, 'dblclick', '@doubleClickTitle')\n this.$container.data('block', this)\n },\n\n _generateElement (showHandle = false) {\n NS.enter(this._templateNs)\n const baseInputName = NS.toFieldName()\n const baseInputId = NS.toString('-')\n NS.leave()\n\n const type = this._blockType\n const tabs = this._tabs ?? type.getTabs()\n const hasTabs = tabs.length > 0\n const isParent = type.isParent()\n const actionBtnLabel = `${type.getName()} ${Craft.t('neo', 'Actions')}`\n const actionMenuId = `neoblock-action-menu-${this._id}`\n const tabsBtnLabel = `${type.getName()} ${Craft.t('neo', 'Tabs')}`\n const tabsMenuId = `neoblock-tabs-menu-${this._id}`\n const sortOrderName = `${this._templateNs[0]}[${this._templateNs.slice(1, this._templateNs.length - 2).join('][')}][sortOrder]`\n const elementHtml = []\n elementHtml.push(`\n
\n \n \n \n `)\n\n if (isNaN(parseInt(this._id))) {\n elementHtml.push(`\n `)\n }\n\n elementHtml.push(`\n
\n
\n
\n
\n
\n
\n ${type.getName()}\n
\n
\n  \n
\n
\n
\n
`)\n\n if (hasTabs || isParent) {\n elementHtml.push(`\n
`)\n }\n\n if (tabs.length > 1) {\n elementHtml.push(`\n
`)\n\n for (let i = 0; i < tabs.length; i++) {\n const tab = tabs[i]\n const tabName = tab.getName()\n const tabUid = tab.getUid()\n elementHtml.push(`\n ${tabName}`)\n }\n\n elementHtml.push(`\n
\n
\n \n
\n
    `)\n\n for (let i = 0; i < tabs.length; i++) {\n const tab = tabs[i]\n const tabName = tab.getName()\n const tabUid = tab.getUid()\n elementHtml.push(`\n
  • \n ${tabName}\n
  • `)\n }\n\n elementHtml.push(`\n
\n
\n
`)\n }\n\n elementHtml.push(`\n
\n
\n
\n
\n
\n
\n \n
\n \n
\n `)\n\n if (type.isDeletableByUser()) {\n elementHtml.push(`\n
\n `)\n }\n\n elementHtml.push(`\n
\n
\n
\n
\n \n
\n
\n
`)\n\n if (hasTabs || isParent) {\n elementHtml.push(`\n
`)\n\n if (hasTabs) {\n elementHtml.push(`\n
\n ${this.getHtml()}\n
`)\n }\n\n if (isParent && this._renderOldChildBlocksContainer) {\n elementHtml.push(`\n
\n
\n
\n
\n
\n

${Craft.t('neo', \"This Neo field's maximum number of levels has been reached, so no child blocks can be added here.\")}

\n
\n
`)\n }\n\n elementHtml.push(`\n
`)\n }\n\n if (isParent) {\n elementHtml.push(`\n
`)\n }\n\n elementHtml.push(`\n
`)\n\n const $elementHtml = $(elementHtml.join(''))\n\n if (showHandle) {\n $('
')\n .addClass('ni_block_topbar_item handle')\n .prop('data-neo-b', `${this._id}.container.handle`)\n .append(Craft.ui.createCopyTextBtn({\n id: `${baseInputId}-${type.getHandle()}-attribute`,\n class: ['code', 'small', 'light'],\n value: type.getHandle()\n }))\n .insertAfter($elementHtml.find('.ni_block_topbar_item.title'))\n }\n\n return $elementHtml\n },\n\n initUi (callInitUiElements = true) {\n if (this._initialised) {\n // Nothing to do here\n return\n }\n\n this.$foot = $(this.getJs()).filter(_resourceFilter)\n Garnish.$bod.append(this.$foot)\n\n if (callInitUiElements) {\n Craft.initUiElements(this.$contentContainer)\n }\n\n this.$form = this.$container.closest('form')\n this.initTabs()\n\n this._settingsMenu = this.$settingsButton.data('trigger') || new Garnish.DisclosureMenu(this.$settingsButton)\n this._settingsMenu.on('show', () => {\n // Make sure all other blocks in the field have their settings menus closed\n this._field\n .getBlocks()\n .filter((block) => block.$container.hasClass('active'))\n .forEach((block) => block.toggleSettingsMenu(false))\n this.$container.addClass('active')\n })\n this._settingsMenu.on('hide', () => this.$container.removeClass('active'))\n\n this.$menuContainer = this._settingsMenu.$container\n this.addListener(this.$menuContainer.find('[data-action]'), 'click', this._handleActionClick)\n this.addListener(this.$menuContainer.find('[data-action]'), 'keydown', this._handleActionKeydown)\n\n this.toggleEnabled(this._initialEnabled)\n\n this._initialised = true\n this._buttons?.initUi()\n\n Garnish.requestAnimationFrame(() => this.updateResponsiveness())\n\n // For Matrix blocks inside a Neo block, this listener adds a class name to the block for Neo to style.\n // Neo applies its own styles to Matrix blocks in an effort to improve the visibility of them, however\n // when dragging a Matrix block these styles get lost (since a dragged Matrix block loses its context of\n // being inside a Neo block). Adding this class name to blocks before they are dragged means that the\n // dragged Matrix block can still have the Neo-specific styles.\n this.$container.on('mousedown', '.matrixblock', function (e) {\n $(this).addClass('neo-matrixblock')\n })\n\n // If this block has errors and is nested somewhere in a child blocks UI element, set errors on ancestors' tabs\n if (this.$container.hasClass('has-errors')) {\n this.$container.parents('.ni_child-blocks-ui-element').each((_, cbuiElement) => {\n const $tabContent = $(cbuiElement).parent()\n const parentBlock = $tabContent.closest('.ni_block').data('block')\n const tabIndex = $tabContent.index()\n parentBlock.$tabButton.filter('.tab').eq(tabIndex) // Desktop tab buttons\n .add(parentBlock.$tabButton.filter(':not(.tab)').eq(tabIndex)) // Mobile tab buttons\n .add(parentBlock.$container.find('> .ni_block_topbar .tabs_btn')) // Mobile tab dropdown button\n .addClass('has-errors')\n .append(``)\n })\n }\n\n // Setting up field and block property watching\n if (!this.isNew()) {\n this._initialState = {\n enabled: this._enabled,\n level: this._level,\n content: this._getPostData()\n }\n\n const detectChange = () => this._detectChange()\n const observer = new window.MutationObserver(() => {\n setTimeout(detectChange, 200)\n\n // Ensure blocks that are supposed to be non-editable by the user remain so\n if (!this.getBlockType().isEditableByUser() && !this.$container.hasClass('is-disabled-for-user')) {\n this.$container.addClass('is-disabled-for-user')\n }\n })\n\n observer.observe(this.$container[0], {\n attributes: true,\n childList: true,\n characterData: true,\n subtree: true\n })\n\n this.$contentContainer.on('propertychange change click', 'input, textarea, select, div.redactor-in', detectChange)\n this.$contentContainer.on('paste input keyup', 'input:not([type=\"hidden\"]), textarea, div.redactor-in', detectChange)\n\n this._detectChangeObserver = observer\n\n // Hide the copy/paste/clone options if the block type is disabled\n this.$menuContainer\n .find('[data-action=\"copy\"], [data-action=\"paste\"], [data-action=\"duplicate\"]')\n .parent()\n .toggleClass('hidden', !this._blockType.getEnabled())\n }\n\n addFieldLinks(this.$contentContainer)\n\n this.trigger('initUi')\n },\n\n /**\n * @public\n * @since 3.7.0\n */\n initTabs () {\n const $neo = this.$container.find('[data-neo-b]')\n this.$tabsButton = $neo.filter(`[data-neo-b=\"${this._id}.button.tabs\"]`)\n this.$tabsContainer = $neo.filter(`[data-neo-b=\"${this._id}.container.tabs\"]`)\n this.$tabButton = $neo.filter(`[data-neo-b=\"${this._id}.button.tab\"]`)\n this.$tabContainer = this.$contentContainer.children('[data-layout-tab]')\n\n this._tabsMenu = this.$tabsButton.data('trigger') || new Garnish.DisclosureMenu(this.$tabsButton)\n this._tabsMenu.on('show', () => this.$container.addClass('active'))\n this._tabsMenu.on('hide', () => this.$container.removeClass('active'))\n\n this.$tabButton = this.$tabButton.add(this._tabsMenu.$container.find(`[data-neo-b=\"${this._id}.button.tab\"]`))\n this.addListener(this.$tabButton, 'click', this['@setTab'])\n this.addListener(this.$tabButton, 'keydown', this._handleTabKeydown)\n },\n\n /**\n * @since 3.9.0\n */\n getHtml () {\n return this._html !== null\n ? this._html.replace(/__NEOBLOCK__/g, this._id)\n : this._blockType.getHtml(this._id)\n },\n\n /**\n * @since 3.9.0\n */\n getJs () {\n return this._js !== null\n ? this._js.replace(/__NEOBLOCK__/g, this._id)\n : this._blockType.getJs(this._id)\n },\n\n destroy () {\n if (this._initialised) {\n this.$foot.remove()\n\n clearInterval(this._detectChangeInterval)\n\n if (this._detectChangeObserver) {\n this._detectChangeObserver.disconnect()\n }\n\n this.trigger('destroy')\n }\n },\n\n getBlockType () {\n return this._blockType\n },\n\n getId () {\n return this._id\n },\n\n /**\n * @public\n * @returns the ID of the duplicate block, or the ID of this block if it hasn't been duplicated\n * @since 3.7.0\n */\n getDuplicatedBlockId () {\n return this.$form.data('elementEditor')?.duplicatedElements[this._id] ?? this._id\n },\n\n isTopLevel () {\n return this._level === 1\n },\n\n getLevel () {\n return this._level\n },\n\n setLevel (level) {\n this._level = level | 0\n\n this.$levelInput.val(`0${this._level}`)\n this.$container.toggleClass('is-level-odd', !!(this._level % 2))\n this.$container.toggleClass('is-level-even', !(this._level % 2))\n },\n\n setModified (isModified) {\n this._modified = isModified\n },\n\n getButtons () {\n return this._buttons\n },\n\n getSiteId () {\n if (!this._siteId) {\n const $siteId = this.$form.find('input[name=\"siteId\"]')\n this._siteId = $siteId.val()\n }\n\n return this._siteId\n },\n\n getContent () {\n const rawContent = this._getPostData()\n const content = {}\n\n const setValue = (keys, value) => {\n let currentSet = content\n\n for (let i = 0; i < keys.length - 1; i++) {\n const key = keys[i]\n\n if (!$.isPlainObject(currentSet[key]) && !Array.isArray(currentSet[key])) {\n currentSet[key] = {}\n }\n\n currentSet = currentSet[key]\n }\n\n const key = keys[keys.length - 1]\n currentSet[key] = value\n }\n\n for (const rawName of Object.keys(rawContent)) {\n const fullName = NS.parse(rawName)\n const name = fullName.slice(this._templateNs.length + 1) // Adding 1 because content is NS'd under [fields]\n\n // Make sure empty arrays (which can happen with level, enabled, etc. when using the child blocks UI element) are ignored\n if (!name.length) {\n continue\n }\n\n const value = rawContent[rawName]\n\n setValue(name, value)\n }\n\n return content\n },\n\n getParent (blocks = null) {\n blocks ??= this._field.getBlocks()\n const level = this.getLevel()\n let index = blocks.indexOf(this)\n let blockParent = null\n\n if (index >= 0 && level > 1) {\n while (blockParent === null && index > 0) {\n const currentBlock = blocks[--index]\n const currentLevel = currentBlock.getLevel()\n\n if (currentLevel === level - 1) {\n blockParent = currentBlock\n }\n }\n }\n\n return blockParent\n },\n\n getChildren (blocks = null, descendants = null) {\n blocks ??= this._field.getBlocks()\n const level = this.getLevel()\n let index = blocks.indexOf(this)\n const childBlocks = []\n\n if (index >= 0) {\n let currentBlock = blocks[++index]\n\n while (currentBlock && currentBlock.getLevel() > level) {\n const currentLevel = currentBlock.getLevel()\n\n if (descendants ? currentLevel > level : currentLevel === level + 1) {\n childBlocks.push(currentBlock)\n }\n\n currentBlock = blocks[++index]\n }\n }\n\n return childBlocks\n },\n\n getSiblings (blocks = null) {\n blocks ??= this._field.getBlocks()\n\n return this.isTopLevel() ? blocks.filter(b => b.isTopLevel()) : this.getParent(blocks).getChildren(blocks)\n },\n\n getField () {\n return this._field\n },\n\n updatePreview (condensed = null) {\n condensed = typeof condensed === 'boolean' ? condensed : false\n\n const $childFields = this.$childrenContainer.find('.field')\n const $fields = this.$contentContainer.find('.field').add($childFields)\n const previewText = []\n\n $fields.each(function () {\n const $field = $(this)\n const $input = $field.children('.input')\n const fieldType = $field.data('type')\n const label = $field.children('.heading').children('label').text()\n\n // We rely on knowing the field type to know how to generate its preview, so if we don't know, skip it.\n if (fieldType === null) {\n return\n }\n\n let value = false\n\n switch (fieldType) {\n case 'craft\\\\fields\\\\Assets':\n {\n const values = []\n const $assets = $input.find('.element')\n\n $assets.each(function () {\n const $asset = $(this)\n const $thumbContainer = $asset.find('.elementthumb')\n const $thumb = $thumbContainer.children('img')\n let srcset = $thumb.prop('srcset')\n\n if (!srcset) {\n srcset = $thumbContainer.data('srcset')\n }\n\n values.push(``)\n\n if (!condensed && $assets.length === 1) {\n const title = $asset.find('.title').text()\n\n values.push(_escapeHTML(_limit(title)))\n }\n })\n\n value = values.join(' ')\n }\n break\n case 'craft\\\\fields\\\\Categories':\n case 'craft\\\\fields\\\\Entries':\n case 'craft\\\\fields\\\\Tags':\n case 'craft\\\\fields\\\\Users':\n {\n const values = []\n\n $input.find('.element').each(function () {\n const title = $(this).find('.title, .label').eq(0).text()\n values.push(_escapeHTML(_limit(title)))\n })\n\n value = values.join(', ')\n }\n break\n case 'craft\\\\fields\\\\Checkboxes':\n {\n const values = []\n\n $input.find('input[type=\"checkbox\"]').each(function () {\n if (this.checked) {\n const id = $(this).prop('id')\n const label = $input.find(`label[for=\"${id}\"]`).text()\n values.push(_escapeHTML(_limit(label)))\n }\n })\n\n value = values.join(', ')\n }\n break\n case 'craft\\\\fields\\\\Color':\n {\n const color = $input.find('input[type=\"color\"]').val()\n const colorText = $input.find('input[type=\"text\"]').val()\n const colorRev = $input.find('div.colorhex').text()\n let background = null\n\n if (color && colorText) {\n // Set the selected color. `colorText` must also be checked, even though it's not used, because\n // the color type field may still store a color value even if the text field has been cleared.\n background = `background-color: ${color}`\n } else if (!color && colorText) {\n // When a block is initially collapsed, the color type field will not have been set, so the text\n // field value will need to be used.\n background = `background-color: ${colorText}`\n } else if (colorRev) {\n // Entry revisions will hav a div rather than an input, so use that.\n background = `background-color: ${colorRev}`\n } else {\n // No color value has been set for the field.\n background = 'background-image: repeating-linear-gradient(-45deg, transparent, transparent 2px, #777 2px, #777 3px)'\n }\n\n value = `
`\n }\n break\n case 'craft\\\\fields\\\\Date':\n {\n const date = _escapeHTML($input.find('.datewrapper input').val())\n const time = _escapeHTML($input.find('.timewrapper input').val())\n\n value = date && time ? (date + ' ' + time) : (date || time)\n }\n break\n case 'craft\\\\fields\\\\Dropdown':\n {\n const $selected = $input.find('select').children(':selected')\n\n value = _escapeHTML(_limit($selected.text()))\n }\n break\n case 'craft\\\\fields\\\\Email':\n value = _escapeHTML(_limit($input.children('input[type=\"email\"]').val()))\n break\n case 'craft\\\\fields\\\\Lightswitch':\n {\n const enabled = !!$input.find('input').val()\n\n value = `` + _escapeHTML(_limit(label))\n }\n break\n case 'craft\\\\fields\\\\MultiSelect':\n case 'ttempleton\\\\categorygroupsfield\\\\fields\\\\CategoryGroupsField':\n {\n const values = []\n const $selected = $input.find('select').children(':selected')\n\n $selected.each(function () {\n values.push($(this).text())\n })\n\n value = _escapeHTML(_limit(values.join(', ')))\n }\n break\n case 'craft\\\\fields\\\\Number':\n case 'craft\\\\fields\\\\PlainText':\n value = _escapeHTML(_limit($input.children('input[type=\"text\"], textarea').val()))\n break\n case 'craft\\\\fields\\\\RadioButtons':\n {\n const $checked = $input.find('input[type=\"radio\"]:checked')\n const label = $checked.closest('label').text()\n\n value = _escapeHTML(_limit(label))\n }\n break\n case 'craft\\\\redactor\\\\Field':\n case 'spicyweb\\\\tinymce\\\\fields\\\\TinyMCE':\n value = _escapeHTML(_limit(Craft.getText($input.find('textarea').val())))\n break\n case 'craft\\\\ckeditor\\\\Field':\n value = _escapeHTML(_limit(Craft.getText($input.find('[role=\"textbox\"]').html())))\n break\n case 'craft\\\\fields\\\\Url':\n value = _escapeHTML(_limit($input.children('input[type=\"url\"]').val()))\n break\n case 'craft\\\\fields\\\\Matrix':\n case 'verbb\\\\supertable\\\\fields\\\\SuperTableField':\n {\n const $subFields = $field.find('.field')\n const $subInputs = $subFields.find('input[type!=\"hidden\"], select, textarea, .label')\n\n const values = []\n\n $subInputs.each(function () {\n const $subInput = $(this)\n let subValue = null\n\n if ($subInput.is('input, textarea')) {\n subValue = Craft.getText(Garnish.getInputPostVal($subInput))\n } else if ($subInput.is('select')) {\n subValue = $subInput.find('option:selected').text()\n } else if ($subInput.hasClass('label')) {\n // TODO check for lightswitch maybe?\n subValue = $subInput.text()\n }\n\n if (subValue) {\n values.push(_limit(subValue))\n }\n })\n\n value = _escapeHTML(values.join(', '))\n }\n break\n case 'typedlinkfield\\\\fields\\\\LinkField':\n case 'presseddigital\\\\linkit\\\\fields\\\\LinkitField':\n {\n const values = []\n const $selectedType = $input.find('select').children(':selected').first()\n const $visibleOption = $input.find('.linkfield--typeOption:not(.hidden), [class^=\"linkit--\"]:not(.hidden)')\n const visibleInputVal = $visibleOption.find('input[type!=\"hidden\"]').val()\n const $visibleElement = $visibleOption.find('.element')\n const customText = $input.find('.field[id*=\"customText\"] input, .linkit--customText input').val()\n\n values.push(_limit($selectedType.text()))\n\n if (visibleInputVal) {\n values.push(_limit(visibleInputVal))\n }\n\n if ($visibleElement.length > 0) {\n const title = $visibleElement.find('.title, .label').eq(0).text()\n\n values.push(_limit(title))\n }\n\n if (customText) {\n values.push(_limit(customText))\n }\n\n value = _escapeHTML(values.join(', '))\n }\n break\n case 'luwes\\\\codemirror\\\\fields\\\\CodeMirrorField':\n {\n const lines = []\n\n $field.find('.CodeMirror-line > span').each(function () {\n lines.push($(this).text())\n })\n\n value = _escapeHTML(lines.join(' '))\n break\n }\n case 'rias\\\\positionfieldtype\\\\fields\\\\Position':\n {\n const $selected = $input.find('.btn.active')\n\n value = _escapeHTML($selected.prop('title'))\n break\n }\n case 'wrav\\\\oembed\\\\fields\\\\OembedField':\n value = _escapeHTML(_limit($input.children('input').val()))\n }\n\n if (value && previewText.length < 10) {\n previewText.push('', value, '')\n }\n })\n\n this.$previewContainer.html(previewText.join(''))\n },\n\n isNew () {\n return /^new/.test(this.getId())\n },\n\n isSelected () {\n return this.$container.hasClass('is-selected')\n },\n\n collapse (save, animate) {\n this.toggleExpansion(false, save, animate)\n },\n\n expand (save, animate) {\n this.toggleExpansion(true, save, animate)\n },\n\n toggleExpansion (expand, save, animate) {\n expand = typeof expand === 'boolean' ? expand : !this._expanded\n save = typeof save === 'boolean' ? save : true\n animate = !Garnish.prefersReducedMotion() && (typeof animate === 'boolean' ? animate : true)\n\n if (expand !== this._expanded) {\n this._expanded = expand\n\n if (!this._expanded) {\n this.updatePreview()\n }\n\n const expandContainer = this.$menuContainer.find('[data-action=\"expand\"]').parent()\n const collapseContainer = this.$menuContainer.find('[data-action=\"collapse\"]').parent()\n\n this.$collapsedInput.val(!this._expanded ? '1' : '')\n this.$container\n .toggleClass('is-expanded', this._expanded)\n .toggleClass('is-collapsed', !this._expanded)\n\n expandContainer.toggleClass('hidden', this._expanded)\n collapseContainer.toggleClass('hidden', !this._expanded)\n this.$previewContainer.toggleClass('hidden', this._expanded)\n\n const contentHeight = this.$contentContainer.outerHeight() | 0\n const childrenHeight = this.$childrenContainer.outerHeight() | 0\n\n const expandedCss = {\n opacity: 1,\n height: contentHeight + childrenHeight\n }\n const collapsedCss = {\n opacity: 0,\n height: 0\n }\n const clearCss = {\n opacity: '',\n height: ''\n }\n\n if (animate) {\n this.$bodyContainer\n .css(this._expanded ? collapsedCss : expandedCss)\n .velocity(this._expanded ? expandedCss : collapsedCss, 'fast', e => {\n if (this._expanded) {\n this.$bodyContainer.css(clearCss)\n }\n })\n } else {\n this.$bodyContainer.css(this._expanded ? clearCss : collapsedCss)\n }\n\n if (save) {\n this.saveExpansion()\n }\n\n this.trigger('toggleExpansion', {\n expanded: this._expanded\n })\n }\n },\n\n isExpanded () {\n return this._expanded\n },\n\n saveExpansion () {\n if (!this.isNew()) {\n // Use the duplicated block ID if we're on a new provisional draft\n // The server-side code will also apply the new state to the canonical block\n const sentBlockId = this.$form.data('elementEditor')?.settings.isProvisionalDraft\n ? this.getDuplicatedBlockId()\n : this.getId()\n const data = {\n expanded: this.isExpanded() ? 1 : 0,\n blockId: sentBlockId,\n siteId: this.getSiteId()\n }\n\n Craft.queue.push(() => new Promise((resolve, reject) => {\n Craft.sendActionRequest('POST', 'neo/input/save-expansion', { data }).then(resolve).catch(reject)\n }))\n }\n },\n\n disable () {\n this.toggleEnabled(false)\n },\n\n enable () {\n this.toggleEnabled(true)\n },\n\n toggleEnabled (enable = !this._enabled) {\n const triggerEvent = this._enabled !== enable\n this._enabled = enable\n\n const blockTypeEnabled = this._blockType.getEnabled()\n const actuallyEnabled = this._enabled && blockTypeEnabled\n const enableContainer = this.$menuContainer.find('[data-action=\"enable\"]').parent()\n const disableContainer = this.$menuContainer.find('[data-action=\"disable\"]').parent()\n\n this.$container\n .toggleClass('is-enabled', actuallyEnabled)\n .toggleClass('is-disabled', !actuallyEnabled)\n\n this.$status.toggleClass('hidden', actuallyEnabled)\n\n enableContainer.toggleClass('hidden', this._enabled || !blockTypeEnabled)\n disableContainer.toggleClass('hidden', !this._enabled || !blockTypeEnabled)\n\n this.$enabledInput.val(this._enabled ? '1' : '')\n\n if (triggerEvent) {\n this.trigger('toggleEnabled', {\n enabled: this._enabled\n })\n }\n },\n\n isEnabled () {\n return this._enabled\n },\n\n toggleShowButtons (show = !this._showButtons) {\n this.$buttonsContainer.toggleClass('hidden', !show)\n this.$childrenWarningsContainer.toggleClass('hidden', show)\n },\n\n selectTab (tabName) {\n this.$tabButton.removeClass('is-selected')\n this.$tabContainer.addClass('hidden')\n const $tabButton = this.$tabButton.filter(`[data-neo-b-info=\"${tabName}\"]`).addClass('is-selected')\n const tabUid = $tabButton.attr('data-neo-b-tabuid')\n const $tabContainer = this.$tabContainer\n .filter(`[data-layout-tab=\"${tabUid}\"]`)\n .removeClass('hidden')\n this.$tabsButton.text(tabName)\n Craft.ElementThumbLoader.retryAll()\n\n this.trigger('selectTab', { tabName, $tabButton, $tabContainer })\n },\n\n updateResponsiveness () {\n const isMobileBrowser = Garnish.isMobileBrowser()\n this._topbarLeftWidth ??= this.$topbarLeftContainer.width() -\n (this._expanded ? 0 : this.$previewContainer.width()) -\n (isMobileBrowser ? this.$handleContainer.width() : 0)\n this._topbarRightWidth ??= this.$topbarRightContainer.width()\n const hasRoomForIndividualTabs = this.$topbarContainer.width() < this._topbarLeftWidth + this._topbarRightWidth\n\n this.$handleContainer.toggleClass('hidden', isMobileBrowser)\n this.$tabsContainer.toggleClass('invisible', hasRoomForIndividualTabs)\n this.$tabsButton.toggleClass('invisible', !hasRoomForIndividualTabs)\n },\n\n updateActionsMenu () {\n const blocks = this._field.getBlocks()\n const parentBlockType = this.getParent()?.getBlockType()\n let allowedBlockTypes = parentBlockType?.getChildBlocks() ?? this._field.getBlockTypes(true)\n\n if (allowedBlockTypes === true || allowedBlockTypes === '*') {\n allowedBlockTypes = this._field.getBlockTypes(false)\n } else if (Array.isArray(allowedBlockTypes)) {\n allowedBlockTypes = allowedBlockTypes\n .map(bt => typeof bt === 'string' ? this._field.getBlockTypeByHandle(bt) : bt)\n // In case any otherwise valid block types are being filtered out by the event or conditions\n .filter(bt => typeof bt !== 'undefined')\n }\n\n // Finally, only allow block types that are allowed to be created by the current user\n // This is safe since allowedBlockTypes is only used to check if paste/add block actions should be disabled\n allowedBlockTypes = allowedBlockTypes.filter((bt) => bt.isCreatableByUser())\n\n this.updateMenuStates(\n this._field.getName(),\n blocks,\n this._field.getMaxBlocks(),\n true,\n allowedBlockTypes,\n this._level === 1 ? this._field.getMaxTopBlocks() : 0\n )\n },\n\n // Deprecated in 3.0.4; use `updateActionsMenu()` instead\n updateMenuStates (field, blocks = [], maxBlocks = 0, additionalCheck = null, allowedBlockTypes = false, maxTopBlocks = 0) {\n additionalCheck = typeof additionalCheck === 'boolean' ? additionalCheck : true\n const noAllowedBlockTypes = !allowedBlockTypes || allowedBlockTypes.length === 0\n\n const blockType = this.getBlockType()\n const blocksOfType = blocks.filter(b => b.getBlockType().getHandle() === blockType.getHandle())\n const maxBlockTypes = blockType.getMaxBlocks()\n const siblingBlocks = this.getSiblings(blocks)\n\n const totalTopBlocks = blocks.filter(block => block.isTopLevel()).length\n\n const maxBlocksMet = maxBlocks > 0 && blocks.length >= maxBlocks\n const maxTopBlocksMet = maxTopBlocks > 0 && totalTopBlocks >= maxTopBlocks\n\n const allDisabled = maxBlocksMet || maxTopBlocksMet || !additionalCheck\n const addDisabled = allDisabled || noAllowedBlockTypes\n const typeDisabled = maxBlockTypes > 0 && blocksOfType.length >= maxBlockTypes\n let cloneDisabled = allDisabled || typeDisabled\n\n const pasteData = JSON.parse(window.localStorage.getItem(`neo:copy:${field}`) || '{}')\n let pasteDisabled = allDisabled || !pasteData.blocks || !pasteData.field || pasteData.field !== field\n\n // Test to see if pasting/cloning would exceed the parent's max child blocks\n const parentBlock = this.getParent(blocks)\n if ((!pasteDisabled || !cloneDisabled) && parentBlock) {\n const maxChildBlocks = parentBlock.getBlockType().getMaxChildBlocks()\n\n if (maxChildBlocks > 0) {\n const childBlockCount = parentBlock.getChildren(blocks).length\n const pasteBlockCount = pasteData.blocks?.length ?? 0\n pasteDisabled ||= childBlockCount + pasteBlockCount > maxChildBlocks\n cloneDisabled ||= childBlockCount >= maxChildBlocks\n }\n }\n\n // Test to see if pasting would exceed this block's max sibling blocks\n if (!(pasteDisabled && cloneDisabled)) {\n const maxSiblingBlocks = this.getBlockType().getMaxSiblingBlocks()\n\n if (maxSiblingBlocks > 0) {\n const hasSameBlockType = block => {\n if (Object.prototype.hasOwnProperty.call(block, 'type')) {\n return block.type === this.getBlockType().getId()\n } else if (typeof block.getBlockType === 'function') {\n return block.getBlockType().getHandle() === this.getBlockType().getHandle()\n }\n\n return false\n }\n\n const siblingBlockCount = siblingBlocks.filter(hasSameBlockType, this).length\n const pasteSiblingBlockCount = pasteData.blocks ? pasteData.blocks.filter(hasSameBlockType, this).length : 0\n pasteDisabled ||= siblingBlockCount + pasteSiblingBlockCount > maxSiblingBlocks\n cloneDisabled ||= siblingBlockCount >= maxSiblingBlocks\n }\n }\n\n if (!pasteDisabled) {\n const currentBlockTypesById = blocks.reduce((m, b) => {\n const bt = b.getBlockType()\n const id = bt.getId()\n const v = m[id] || { blockType: bt, count: 0 }\n\n v.count++\n m[id] = v\n\n return m\n })\n\n for (const pasteBlock of pasteData.blocks) {\n const pasteBlockTypeObj = currentBlockTypesById[pasteBlock.type]\n\n // Test to see if any max block types properties will be violated\n if (pasteBlockTypeObj) {\n const pasteBlockType = pasteBlockTypeObj.blockType\n const currentBlocksOfTypeCount = pasteBlockTypeObj.count\n const maxPasteBlockTypes = pasteBlockType.getMaxBlocks()\n const pasteTypeDisabled = maxPasteBlockTypes > 0 && currentBlocksOfTypeCount >= maxPasteBlockTypes\n\n pasteDisabled ||= pasteTypeDisabled\n }\n\n // Test to see if the top level paste blocks have a block type that is allowed to be pasted here\n if (pasteBlock.level === 1) {\n pasteDisabled ||= !allowedBlockTypes.find(bt => bt.getId() === pasteBlock.type)\n }\n }\n }\n\n const siblingIndex = siblingBlocks.indexOf(this)\n const disableMoveUp = siblingIndex <= 0\n const disableMoveDown = [-1, siblingBlocks.length - 1].includes(siblingIndex)\n\n this.$menuContainer.find('[data-action=\"moveUp\"]').parent().toggleClass('hidden', disableMoveUp)\n this.$menuContainer.find('[data-action=\"moveDown\"]').parent().toggleClass('hidden', disableMoveDown)\n this.$menuContainer.find('[data-action=\"duplicate\"]').toggleClass('disabled', cloneDisabled)\n\n // Paste/add actions should be hidden if there is no chance of them being enabled later\n if (noAllowedBlockTypes) {\n this.$menuContainer.find('[data-action=\"add\"]').parent().toggleClass('hidden', addDisabled)\n this.$menuContainer.find('[data-action=\"paste\"]').parent().toggleClass('hidden', pasteDisabled)\n } else {\n this.$menuContainer.find('[data-action=\"add\"]').toggleClass('disabled', addDisabled)\n this.$menuContainer.find('[data-action=\"paste\"]').toggleClass('disabled', pasteDisabled)\n }\n\n // If there are no visible items in the second list, hide the separator as well\n this.$menuContainer.children('hr').toggleClass(\n 'hidden',\n this.$menuContainer.children('ul:last-child').children('li:not(.hidden)').length === 0\n )\n },\n\n resetButtons (settings) {\n this.$blocksContainer = this.$container.find(`[data-neo-b=\"${this._id}.container.blocks\"]`)\n this.$buttonsContainer = this.$container.find(`[data-neo-b=\"${this._id}.container.buttons\"]`)\n this.$childrenContainer = this.$container.find(`[data-neo-b=\"${this._id}.container.children\"]`)\n this.$childrenWarningsContainer = this.$container.find(`[data-neo-b=\"${this._id}.container.childrenWarnings\"]`)\n this.$collapsedChildrenContainer = this.$container.find(`[data-neo-b=\"${this._id}.container.collapsedChildren\"]`)\n\n if (typeof settings !== 'undefined' && settings !== null) {\n this._buttons = settings\n } else {\n this._buttons = new this._field.ButtonClass({\n $ownerContainer: this.$container,\n field: this._field,\n items: this._blockType.getChildBlockItems(this._field.getItems()),\n maxBlocks: this._field.getMaxBlocks()\n })\n }\n\n if (this._buttons) {\n this._buttons.on('newBlock', e => this.trigger('newBlock', Object.assign(e, { level: this.getLevel() + 1 })))\n this.$buttonsContainer.append(this._buttons.$container)\n\n if (this._buttons.$ownerContainer === null) {\n this._buttons.$ownerContainer = this.$container\n }\n\n if (this._initialised) {\n this._buttons.initUi()\n }\n }\n },\n\n namespaceId (id) {\n NS.enter(this._templateNs)\n const namespacedId = `${NS.toString('-')}-${Craft.formatInputId(id)}`\n NS.leave()\n return namespacedId\n },\n\n toggleSettingsMenu (toggle) {\n toggle ??= !this._settingsMenu.isExpanded()\n if (toggle) {\n this._settingsMenu.show()\n } else {\n this._settingsMenu.hide()\n }\n },\n\n _handleActionClick (e) {\n e.preventDefault()\n this['@settingSelect'](e)\n },\n\n _handleActionKeydown (e) {\n if (e.keyCode === Garnish.SPACE_KEY) {\n e.preventDefault()\n this['@settingSelect'](e)\n }\n },\n\n _handleTabKeydown (e) {\n if (e.keyCode === Garnish.SPACE_KEY) {\n this['@setTab'](e)\n }\n },\n\n _detectChange () {\n // When editing a draft and autosave is enabled, we need to force modified to be set, or\n // returning the block to its original values will cause it not to be resaved.\n const elementEditor = this.$form.data('elementEditor')\n\n if (elementEditor?.enableAutosave && elementEditor.settings.draftId) {\n this.setModified(true)\n this._forceModified = true\n }\n\n if (!this._forceModified) {\n const initial = this._initialState\n const content = this._getPostData()\n\n const modified = !Craft.compare(content, initial.content, false) ||\n initial.enabled !== this._enabled ||\n initial.level !== this._level\n\n if (modified !== this._modified) {\n this.setModified(modified)\n }\n }\n\n this.trigger('change')\n },\n\n _getPostData () {\n const content = Garnish.getPostData(this.$contentContainer)\n // Remove keys associated with child block subfields (occurs when using child blocks UI element)\n const badKeys = Object.keys(content)\n .filter((key) => !key.startsWith(`fields[${this._field.getName()}][blocks][${this._id}]`))\n\n for (const key of badKeys) {\n delete content[key]\n }\n\n return content\n },\n\n '@settingSelect' (e) {\n this._settingsMenu.hide()\n const $option = $(e.target)\n\n if (!$option.hasClass('disabled')) {\n switch ($option.attr('data-action')) {\n case 'collapse':\n this.collapse()\n break\n case 'expand':\n this.expand()\n break\n case 'disable':\n this.disable()\n this.collapse()\n break\n case 'enable':\n this.enable()\n this.expand()\n break\n case 'moveUp':\n this.trigger('moveUpBlock', { block: this })\n break\n case 'moveDown':\n this.trigger('moveDownBlock', { block: this })\n break\n case 'delete':\n this.trigger('removeBlock', { block: this })\n break\n case 'add':\n this.trigger('addBlockAbove', { block: this })\n break\n case 'copy':\n this.trigger('copyBlock', { block: this })\n break\n case 'paste':\n this.trigger('pasteBlock', { block: this })\n break\n case 'duplicate':\n this.trigger('duplicateBlock', { block: this })\n break\n }\n }\n },\n\n '@doubleClickTitle' (e) {\n e.preventDefault()\n\n const $target = $(e.target)\n const $checkFrom = $target.parent()\n const isLeft = $checkFrom.closest(this.$topbarLeftContainer).length > 0\n const isRight = $checkFrom.closest(this.$topbarRightContainer).length > 0\n\n if (!isLeft && !isRight) {\n this.$form.data('elementEditor')?.pause()\n this.toggleExpansion()\n this.$form.data('elementEditor')?.resume()\n }\n },\n\n '@setTab' (e) {\n e.preventDefault()\n this._tabsMenu.hide()\n\n const $tab = $(e.currentTarget)\n const tabName = $tab.attr('data-neo-b-info')\n\n this.selectTab(tabName)\n }\n},\n{\n _totalNewBlocks: 0,\n\n /**\n * @deprecated in 3.9.0\n */\n getNewId () {\n return `new${this._totalNewBlocks++}`\n }\n})\n","import Craft from 'craft'\n\nexport function addFieldLinks ($element) {\n if (Craft.CpFieldInspectPlugin) {\n Craft.CpFieldInspectPlugin.addFieldLinks()\n }\n}\n","import $ from 'jquery'\nimport Craft from 'craft'\nimport Garnish from 'garnish'\n\nconst _defaults = {\n $ownerContainer: null,\n blockTypes: [],\n groups: [],\n items: null,\n maxBlocks: 0,\n maxTopBlocks: 0,\n blocks: null\n}\n\nclass NewBlockMenu {\n static BUTTON_INFO = 'data-neo-bn-info'\n _blockTypes = []\n _blockTypeGroups = []\n\n constructor (settings = {}) {\n settings = Object.assign({}, _defaults, settings)\n\n if (settings.items) {\n this._items = Array.from(settings.items)\n this._blockTypes = this._items.filter(i => i.getType() === 'blockType')\n this._blockTypeGroups = this._items.filter(i => i.getType() === 'group')\n } else {\n this._blockTypes = Array.from(settings.blockTypes)\n this._blockTypeGroups = Array.from(settings.groups)\n this._items = [...this._blockTypes, ...this._blockTypeGroups].sort((a, b) => a.getSortOrder() - b.getSortOrder())\n }\n\n this.$ownerContainer = settings.$ownerContainer\n this._field = settings.field\n this._maxBlocks = settings.maxBlocks | 0\n this._maxTopBlocks = settings.maxTopBlocks | 0\n\n this.$container = this.renderButtons()\n\n const $neo = this.$container.find('[data-neo-bn]')\n this.$buttonsContainer = $neo.filter('[data-neo-bn=\"container.buttons\"]')\n this.$menuContainer = $neo.filter('[data-neo-bn=\"container.menu\"]')\n this.$blockButtons = $neo.filter('[data-neo-bn=\"button.addBlock\"]')\n this.$groupButtons = $neo.filter('[data-neo-bn=\"button.group\"]')\n\n if (settings.blocks) {\n this.updateState(settings.blocks)\n }\n }\n\n /**\n * @since 3.6.0\n * @protected\n * @returns string\n */\n renderButtons () {\n const ownerBlockType = this.$ownerContainer?.hasClass('ni_block')\n ? this.$ownerContainer.attr('class').match(/ni_block--([^\\s]+)/)[1]\n : null\n const ungroupChildBlockTypes = ownerBlockType !== null &&\n !this.getField().getBlockTypeByHandle(ownerBlockType).getGroupChildBlockTypes()\n const buttonsHtml = []\n let blockTypesHtml = []\n let currentGroup = null\n let firstButton = true\n\n const generateGroupDropdown = () => {\n buttonsHtml.push(`\n
\n ${currentGroup.getName()}\n
\n
\n
    ${blockTypesHtml.join('')}\n
\n
`)\n firstButton = false\n blockTypesHtml = []\n }\n\n buttonsHtml.push(`\n
\n
`)\n\n for (let i = 0; i < this._items.length; i++) {\n const item = this._items[i]\n const type = item.getType()\n\n if (type === 'blockType') {\n // Ignore disabled block types, or block types for which the current user isn't allowed to create blocks\n if (!item.getEnabled() || !item.isCreatableByUser()) {\n continue\n }\n\n const titleAttr = item.getDescription() ? ` title=\"${item.getDescription()}\"` : ''\n\n if (currentGroup !== null) {\n blockTypesHtml.push(`\n
  • \n ${item.getName()}\n
  • `)\n } else {\n buttonsHtml.push(`\n \n ${item.getName()}\n `)\n firstButton = false\n }\n } else if (type === 'group') {\n if (currentGroup !== null && blockTypesHtml.length > 0) {\n generateGroupDropdown()\n }\n\n if (\n // Don't show dropdowns for groups with blank names, as they're just used to end the previous group\n (item.isBlank()) ||\n // Don't show dropdowns if we're not forcing them to show, and there's only one block type in this group\n (!item.getAlwaysShowDropdown() && ((i + 2) >= this._items.length || this._items[i + 2].getType() === 'group')) ||\n // Don't show dropdowns if the block type is set not to group child block types\n (ungroupChildBlockTypes)\n ) {\n currentGroup = null\n } else {\n currentGroup = item\n }\n }\n }\n\n if (currentGroup !== null && blockTypesHtml.length > 0) {\n generateGroupDropdown()\n }\n\n buttonsHtml.push(`\n
    \n
    \n ${Craft.t('neo', 'Add a block')}\n
    `)\n\n // Menu, for views where the buttons would exceed the editor width\n currentGroup = null\n let lastGroupHadBlockTypes = false\n buttonsHtml.push(`\n
    \n
      `)\n\n for (const item of this._items) {\n const type = item.getType()\n\n if (type === 'blockType') {\n // Ignore disabled block types, or block types for which the current user isn't allowed to create blocks\n if (!item.getEnabled() || !item.isCreatableByUser()) {\n continue\n }\n\n if (currentGroup !== null && !lastGroupHadBlockTypes) {\n lastGroupHadBlockTypes = true\n\n buttonsHtml.push(`\n
      ${currentGroup.getName()}
      \n
        `)\n }\n\n const titleAttr = item.getDescription() ? ` title=\"${item.getDescription()}\"` : ''\n buttonsHtml.push(`\n
      • \n \n ${item.getName()}\n \n
      • `)\n } else if (type === 'group') {\n if (currentGroup === null || lastGroupHadBlockTypes) {\n buttonsHtml.push(`\n
      `)\n }\n\n lastGroupHadBlockTypes = false\n currentGroup = item.isBlank() || ungroupChildBlockTypes ? null : item\n\n if (currentGroup === null) {\n buttonsHtml.push(`\n
        `)\n }\n }\n }\n\n buttonsHtml.push(`\n
      \n
    \n
    `)\n\n return $(buttonsHtml.join(''))\n }\n\n getField () {\n return this._field\n }\n\n getBlockTypes () {\n return Array.from(this._blockTypes)\n }\n\n getBlockTypeGroups () {\n return Array.from(this._blockTypeGroups)\n }\n\n getBlockTypeByButton ($button) {\n const btHandle = $button.attr(NewBlockMenu.BUTTON_INFO)\n\n return this._blockTypes.find(bt => bt.getHandle() === btHandle)\n }\n\n updateState (blocks = [], additionalCheck = null, block = null) {\n additionalCheck = typeof additionalCheck === 'boolean' ? additionalCheck : true\n\n const that = this\n\n const totalTopBlocks = blocks.filter(block => block.isTopLevel()).length\n const maxBlocksMet = this._maxBlocks > 0 && blocks.length >= this._maxBlocks\n const maxTopBlocksMet = this._maxTopBlocks > 0 && totalTopBlocks >= this._maxTopBlocks\n\n const allDisabled = maxBlocksMet || maxTopBlocksMet || !additionalCheck\n\n this.$blockButtons.each(function () {\n const $button = $(this)\n let disabled = allDisabled\n\n if (!disabled) {\n const blockHasSameType = b => b.getBlockType().getHandle() === blockType.getHandle()\n const blockType = that.getBlockTypeByButton($button)\n const blocksOfType = blocks.filter(blockHasSameType)\n const maxBlocksOfType = blockType.getMaxBlocks()\n\n const maxSiblingBlocks = blockType.getMaxSiblingBlocks()\n const siblingBlocksOfType = block !== null\n ? block.getChildren(blocks).filter(blockHasSameType)\n // This is at the top level\n : blocks.filter(b => b.isTopLevel() && b.getBlockType().getHandle() === blockType.getHandle())\n\n disabled ||= (maxBlocksOfType > 0 && blocksOfType.length >= maxBlocksOfType) ||\n (maxSiblingBlocks > 0 && siblingBlocksOfType.length >= maxSiblingBlocks)\n }\n\n $button.toggleClass('disabled', disabled)\n })\n\n this.$groupButtons.each(function () {\n const $button = $(this)\n const menu = $button.data('menubtn')\n let disabled = allDisabled\n\n if (!disabled && menu) {\n const $menuButtons = menu.menu.$options\n disabled = $menuButtons.length === $menuButtons.filter('.disabled').length\n }\n\n $button.toggleClass('disabled', disabled)\n })\n }\n\n updateResponsiveness () {}\n}\n\nconst GarnishNewBlockMenu = Garnish.Base.extend({\n\n init (buttons) {\n this._buttons = buttons\n this.$container = this._buttons.$container\n this.addListener(this._buttons.$blockButtons, 'activate', '@newBlock')\n },\n\n initUi () {\n this._buttons.initUi()\n },\n\n getBlockTypes () {\n return this._buttons.getBlockTypes()\n },\n\n getGroups () {\n return this._buttons.getBlockTypeGroups()\n },\n\n getMaxBlocks () {\n return this._maxBlocks\n },\n\n updateButtonStates (blocks = [], additionalCheck = null, block = null) {\n this._buttons.updateState(blocks, additionalCheck, block)\n },\n\n updateState (blocks = [], additionalCheck = null, block = null) {\n this._buttons.updateState(blocks, additionalCheck, block)\n },\n\n updateResponsiveness () {\n this._buttons.updateResponsiveness()\n },\n\n getBlockTypeByButton ($button) {\n return this._buttons.getBlockTypeByButton($button)\n },\n\n '@newBlock' (e) {\n const $button = $(e.currentTarget)\n const blockTypeHandle = $button.attr(NewBlockMenu.BUTTON_INFO)\n const blockType = this._buttons.getBlockTypes().find(bt => bt.getHandle() === blockTypeHandle)\n\n this.trigger('newBlock', {\n blockType\n })\n }\n})\n\nexport { NewBlockMenu, GarnishNewBlockMenu }\n","import $ from 'jquery'\nimport { NewBlockMenu, GarnishNewBlockMenu } from './NewBlockMenu'\n\nclass Buttons extends NewBlockMenu {\n initUi () {\n $('.menubtn', this.$container).menubtn()\n this.updateResponsiveness()\n\n // If no buttons were rendered (e.g. if all valid block types are disabled for the user), hide the button container\n if (this.$buttonsContainer.children().length === 0) {\n const parent = this.$container.parent()\n const grandParent = parent.parent()\n const childrenContainer = grandParent.children('.ni_blocks')\n\n if (childrenContainer.length === 0 || childrenContainer.children().length === 0) {\n grandParent.addClass('hidden')\n } else {\n parent.addClass('hidden')\n }\n }\n }\n\n updateResponsiveness () {\n this._buttonsContainerWidth ||= this.$buttonsContainer.width()\n const isMobile = this.$container.width() < this._buttonsContainerWidth\n\n this.$buttonsContainer.toggleClass('hidden', isMobile)\n this.$menuContainer.toggleClass('hidden', !isMobile)\n }\n}\n\nexport default GarnishNewBlockMenu.extend({\n init (settings = {}) {\n this.base(new Buttons(settings))\n }\n})\n","import $ from 'jquery'\nimport Craft from 'craft'\nimport { NewBlockMenu, GarnishNewBlockMenu } from './NewBlockMenu'\n\nclass ButtonsGrid extends NewBlockMenu {\n /**\n * @inheritdoc\n */\n renderButtons () {\n const ownerBlockType = this.$ownerContainer?.hasClass('ni_block')\n ? this.$ownerContainer.attr('class').match(/ni_block--([^\\s]+)/)[1]\n : null\n const ungroupChildBlockTypes = ownerBlockType !== null &&\n !this.getField().getBlockTypeByHandle(ownerBlockType).getGroupChildBlockTypes()\n const buttonsHtml = []\n let currentGroup = null\n\n buttonsHtml.push(`\n
    \n
    \n ${Craft.t('neo', 'Add a block')}\n
    `)\n\n currentGroup = null\n let lastGroupHadBlockTypes = false\n buttonsHtml.push(`\n
    `)\n\n for (const item of this._items) {\n const type = item.getType()\n\n if (type === 'blockType') {\n // Ignore disabled block types, or block types for which the current user isn't allowed to create blocks\n if (!item.getEnabled() || !item.isCreatableByUser()) {\n continue\n }\n\n if (!lastGroupHadBlockTypes) {\n lastGroupHadBlockTypes = true\n\n if (currentGroup !== null) {\n buttonsHtml.push(`\n
    ${currentGroup.getName()}
    `)\n }\n\n buttonsHtml.push(`\n
      `)\n }\n\n const titleAttr = item.getDescription() ? ` title=\"${item.getDescription()}\"` : ''\n const blockTypeIconId = `fields-ni-icon-${this.getField().getName()}-${item.getHandle()}`\n const hasBlockTypeIcon = this._field?.$container.closest('form').find(`#${blockTypeIconId}`).length > 0 ?? false\n buttonsHtml.push(`\n
    • \n `)\n\n if (hasBlockTypeIcon) {\n buttonsHtml.push(`\n \n \n `)\n } else {\n buttonsHtml.push(`\n
      \n
      `)\n }\n\n buttonsHtml.push(`\n ${item.getName()}\n \n
    • `)\n } else if (type === 'group') {\n if (lastGroupHadBlockTypes) {\n buttonsHtml.push(`\n
    `)\n }\n\n lastGroupHadBlockTypes = false\n currentGroup = item.isBlank() || ungroupChildBlockTypes ? null : item\n }\n }\n\n buttonsHtml.push(`\n \n
    \n
    `)\n\n return $(buttonsHtml.join(''))\n }\n\n initUi () {\n $('.menubtn', this.$container).menubtn()\n this.updateResponsiveness()\n\n // If no buttons were rendered (e.g. if all valid block types are disabled for the user), hide the button container\n if (this.$buttonsContainer.find('[data-neo-bn=\"button.addBlock\"]').length === 0) {\n const parent = this.$container.parent()\n const grandParent = parent.parent()\n const childrenContainer = grandParent.children('.ni_blocks')\n\n if (childrenContainer.length === 0 || childrenContainer.children().length === 0) {\n grandParent.addClass('hidden')\n } else {\n parent.addClass('hidden')\n }\n }\n }\n}\n\nexport default GarnishNewBlockMenu.extend({\n init (settings = {}) {\n this.base(new ButtonsGrid(settings))\n }\n})\n","import $ from 'jquery'\nimport Craft from 'craft'\nimport { NewBlockMenu, GarnishNewBlockMenu } from './NewBlockMenu'\n\nclass ButtonsList extends NewBlockMenu {\n /**\n * @inheritdoc\n */\n renderButtons () {\n const ownerBlockType = this.$ownerContainer?.hasClass('ni_block')\n ? this.$ownerContainer.attr('class').match(/ni_block--([^\\s]+)/)[1]\n : null\n const ungroupChildBlockTypes = ownerBlockType !== null &&\n !this.getField().getBlockTypeByHandle(ownerBlockType).getGroupChildBlockTypes()\n const buttonsHtml = []\n let currentGroup = null\n\n buttonsHtml.push(`\n
    \n
    \n ${Craft.t('neo', 'Add a block')}\n
    `)\n\n let lastGroupHadBlockTypes = false\n buttonsHtml.push(`\n
    `)\n\n for (const item of this._items) {\n const type = item.getType()\n\n if (type === 'blockType') {\n // Ignore disabled block types, or block types for which the current user isn't allowed to create blocks\n if (!item.getEnabled() || !item.isCreatableByUser()) {\n continue\n }\n\n if (!lastGroupHadBlockTypes) {\n lastGroupHadBlockTypes = true\n\n if (currentGroup !== null) {\n buttonsHtml.push(`\n
    ${currentGroup.getName()}
    `)\n }\n\n buttonsHtml.push(`\n
      `)\n }\n\n const titleAttr = item.getDescription() ? ` title=\"${item.getDescription()}\"` : ''\n const blockTypeIconId = `fields-ni-icon-${this.getField().getName()}-${item.getHandle()}`\n const hasBlockTypeIcon = this._field?.$container.closest('form').find(`#${blockTypeIconId}`).length > 0 ?? false\n buttonsHtml.push(`\n
    • \n `)\n\n if (hasBlockTypeIcon) {\n buttonsHtml.push(`\n \n \n `)\n } else {\n buttonsHtml.push(`\n
      \n
      `)\n }\n\n buttonsHtml.push(`\n ${item.getName()}\n \n
    • `)\n } else if (type === 'group') {\n if (lastGroupHadBlockTypes) {\n buttonsHtml.push(`\n
    `)\n }\n\n lastGroupHadBlockTypes = false\n currentGroup = item.isBlank() || ungroupChildBlockTypes ? null : item\n }\n }\n\n buttonsHtml.push(`\n \n
    \n
    `)\n\n return $(buttonsHtml.join(''))\n }\n\n initUi () {\n $('.menubtn', this.$container).menubtn()\n this.updateResponsiveness()\n\n // If no buttons were rendered (e.g. if all valid block types are disabled for the user), hide the button container\n if (this.$buttonsContainer.find('[data-neo-bn=\"button.addBlock\"]').length === 0) {\n const parent = this.$container.parent()\n const grandParent = parent.parent()\n const childrenContainer = grandParent.children('.ni_blocks')\n\n if (childrenContainer.length === 0 || childrenContainer.children().length === 0) {\n grandParent.addClass('hidden')\n } else {\n parent.addClass('hidden')\n }\n }\n }\n}\n\nexport default GarnishNewBlockMenu.extend({\n init (settings = {}) {\n this.base(new ButtonsList(settings))\n }\n})\n","/*\nThe `_registerDynamicBlockConditions()` and `_updateVisibleElements()` methods are based on a large\nsection of `Craft.ElementEditor.saveDraft()` from Craft CMS 4.3.6.1, by Pixel & Tonic, Inc.\nhttps://github.com/craftcms/cms/blob/4.3.6.1/src/web/assets/cp/src/js/ElementEditor.js#L1144\nCraft CMS is released under the terms of the Craft License, a copy of which is included below.\nhttps://github.com/craftcms/cms/blob/4.3.6.1/LICENSE.md\n\nCopyright © Pixel & Tonic\n\nPermission is hereby granted to any person obtaining a copy of this software\n(the “Software”) to use, copy, modify, merge, publish and/or distribute copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\n\n1. **Don’t plagiarize.** The above copyright notice and this license shall be\n included in all copies or substantial portions of the Software.\n\n2. **Don’t use the same license on more than one project.** Each licensed copy\n of the Software shall be actively installed in no more than one production\n environment at a time.\n\n3. **Don’t mess with the licensing features.** Software features related to\n licensing shall not be altered or circumvented in any way, including (but\n not limited to) license validation, payment prompts, feature restrictions,\n and update eligibility.\n\n4. **Pay up.** Payment shall be made immediately upon receipt of any notice,\n prompt, reminder, or other message indicating that a payment is owed.\n\n5. **Follow the law.** All use of the Software shall not violate any applicable\n law or regulation, nor infringe the rights of any other person or entity.\n\nFailure to comply with the foregoing conditions will automatically and\nimmediately result in termination of the permission granted hereby. This\nlicense does not include any right to receive updates to the Software or\ntechnical support. Licensees bear all risk related to the quality and\nperformance of the Software and any modifications made or obtained to it,\nincluding liability for actual and consequential harm, such as loss or\ncorruption of data, and any necessary service, repair, or correction.\n\nTHE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER\nLIABILITY, INCLUDING SPECIAL, INCIDENTAL AND CONSEQUENTIAL DAMAGES, WHETHER IN\nAN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\nimport $ from 'jquery'\nimport Garnish from 'garnish'\nimport Craft from 'craft'\n\nimport NS from '../namespace'\n\nimport BlockSort from './BlockSort'\nimport BlockType from './BlockType'\nimport Group from './Group'\nimport Block from './Block'\nimport Buttons from './Buttons'\nimport ButtonsGrid from './ButtonsGrid'\nimport ButtonsList from './ButtonsList'\n\nimport './styles/input.scss'\n\nconst _defaults = {\n name: null,\n namespace: [],\n blockTypes: [],\n groups: [],\n blocks: [],\n inputId: null,\n maxBlocks: 0,\n maxTopBlocks: 0,\n minLevels: 0,\n maxLevels: 0,\n ownerId: null\n}\n\nexport default Garnish.Base.extend({\n\n _templateNs: [],\n _name: null,\n _siteId: null,\n _visibleLayoutElements: {},\n _newBlockId: 0,\n\n init (settings = {}) {\n settings = Object.assign({}, _defaults, settings)\n\n this._templateNs = NS.parse(settings.namespace)\n this._blockTypes = []\n this._groups = settings.groups.map(gInfo => new Group(gInfo))\n this._blocks = []\n this._id = settings.id\n this._name = settings.name\n this._minBlocks = settings.minBlocks\n this._maxBlocks = settings.maxBlocks\n this._maxTopBlocks = settings.maxTopBlocks\n this._minLevels = settings.minLevels\n this._maxLevels = settings.maxLevels\n this._ownerId = settings.ownerId\n this._showBlockTypeHandles = settings.showBlockTypeHandles\n\n const animate = !Garnish.prefersReducedMotion()\n this._$spinner = $(`
    ${animate ? '
    ' : Craft.t('neo', 'Loading')}
    `)\n\n switch (settings.newBlockMenuStyle) {\n case 'grid':\n this.ButtonClass = ButtonsGrid\n break\n case 'list':\n this.ButtonClass = ButtonsList\n break\n default:\n this.ButtonClass = Buttons\n }\n\n const ownerIdElement = $('[name=\"setId\"], [name=\"entryId\"], [name=\"categoryId\"]')\n if (ownerIdElement.length) {\n this._ownerId = ownerIdElement.val()\n }\n\n this.$container = $('#' + settings.inputId)\n\n const setGroupIds = {}\n this._groups.forEach(group => {\n setGroupIds[group.getId()] = true\n })\n\n const tempBlockTypes = {}\n\n for (const btInfo of settings.blockTypes) {\n // Filter out the block type if its group isn't included\n if (btInfo.groupId === null || typeof setGroupIds[btInfo.groupId] !== 'undefined') {\n const blockType = new BlockType(btInfo)\n this._blockTypes.push(blockType)\n tempBlockTypes[blockType.getHandle()] = blockType\n }\n }\n\n this.$form = this.$container.closest('form')\n this._siteId = this.$form.find('input[name=\"siteId\"]').val()\n\n const $neo = this.$container.find('[data-neo]')\n this.$blocksContainer = $neo.filter('[data-neo=\"container.blocks\"]')\n this.$buttonsContainer = $neo.filter('[data-neo=\"container.buttons\"]')\n\n this._buttons = new this.ButtonClass({\n $ownerContainer: this.$container,\n field: this,\n blockTypes: this.getBlockTypes(true),\n groups: this.getGroups(),\n maxBlocks: this.getMaxBlocks(),\n maxTopBlocks: this.getMaxTopBlocks()\n })\n\n this.$buttonsContainer.append(this._buttons.$container)\n this._buttons.on('newBlock', e => this['@newBlock'](e))\n this._buttons.initUi()\n\n this._blockSort = new BlockSort({\n container: this.$blocksContainer,\n handle: '[data-neo-b$=\".button.move\"]',\n maxTopBlocks: this.getMaxTopBlocks(),\n filter: () => {\n // Only return all the selected items if the target item is selected\n if (this._blockSort.$targetItem.hasClass('is-selected')) {\n return this.blockSelect.getSelectedItems()\n }\n\n return this._blockSort.$targetItem\n },\n collapseDraggees: true,\n magnetStrength: 4,\n helperLagBase: 1.5,\n helperOpacity: 0.9,\n onDragStop: () => {\n this._updateBlockOrder()\n this._updateButtons()\n }\n })\n\n this.blockSelect = new Garnish.Select(this.$blocksContainer, null, {\n multi: true,\n vertical: true,\n handle: '> .ni_block_topbar [data-neo-b$=\".select\"]',\n checkboxMode: true,\n selectedClass: 'is-selected sel'\n })\n\n this.$blocksContainer.find('.ni_block').each((i, blockDiv) => {\n const $block = $(blockDiv)\n const bInfo = {}\n bInfo.id = $block.attr('data-neo-b-id')\n bInfo.sortOrder = i\n bInfo.collapsed = $block.hasClass('is-collapsed')\n bInfo.enabled = !!$block.find(`[data-neo-b=\"${bInfo.id}.input.enabled\"]`).val()\n bInfo.level = parseInt($block.find(`[data-neo-b=\"${bInfo.id}.input.level\"]`).val())\n bInfo.field = this\n bInfo.namespace = [...this._templateNs, bInfo.id]\n\n const blockTypeHandle = $block.find(`[data-neo-b=\"${bInfo.id}.input.type\"]`).val()\n const blockType = tempBlockTypes[blockTypeHandle]\n\n // If the block type data isn't there, it's been filtered out and the blocks shouldn't be included\n if (typeof blockType === 'undefined') {\n $block.remove()\n return\n }\n\n bInfo.blockType = blockType\n bInfo.showButtons = !this.atMaxLevels(bInfo.level)\n\n const block = new Block(bInfo)\n block.initUi(false)\n this._setBlockEvents(block)\n\n this._blocks.push(block)\n this._blockSort.addBlock(block)\n this.blockSelect.addItems(block.$container)\n })\n\n this._updateBlockOrder()\n this._updateBlockChildren()\n this._updateButtons()\n\n // Create any required top level blocks, if this field has only one top level block type\n if (this._minBlocks > 0) {\n const missingBlockCount = this._minBlocks - this._blocks.length\n const topLevelBlockTypes = this.getBlockTypes(true)\n\n if (topLevelBlockTypes.length === 1 && missingBlockCount > 0) {\n for (let i = this._blocks.length; i < this._minBlocks; i++) {\n this['@newBlock']({\n blockType: topLevelBlockTypes[0],\n createChildBlocks: false,\n index: i,\n level: 1\n })\n }\n }\n }\n\n // Make sure menu states (for pasting blocks) are updated when changing browser tabs\n this.addListener(document, 'visibilitychange.input', () => this._updateButtons())\n\n this.addListener(this.$container, 'resize', () => this.updateResponsiveness())\n\n const serialized = typeof this.$form.data('serializer') === 'function'\n ? this.$form.data('serializer')()\n : this.$form.serialize()\n this.$form.data('initialSerializedValue', serialized)\n\n // Add error highlight for Matrix fields within Neo\n this._setMatrixClassErrors()\n this._setBlockTypeClassErrors()\n\n this._blocks\n .filter(block => !block.isExpanded())\n .forEach(block => block.updatePreview())\n\n this._registerDynamicBlockConditions()\n\n this.trigger('afterInit')\n },\n\n getName () {\n return this._name\n },\n\n updateResponsiveness () {\n for (const block of this._blocks) {\n block.updateResponsiveness()\n block.getButtons()?.updateResponsiveness()\n }\n\n this._buttons.updateResponsiveness()\n this._tempButtons?.updateResponsiveness()\n },\n\n addBlock (block, index = -1, level = 1, animate = null, createChildBlocks = true) {\n this.$form.data('elementEditor')?.pause()\n const blockCount = this._blocks.length\n index = index >= 0 ? Math.max(0, Math.min(index, blockCount)) : blockCount\n animate = !Garnish.prefersReducedMotion() && (typeof animate === 'boolean' ? animate : true)\n\n const prevBlock = index > 0 ? this._blocks[index - 1] : false\n const nextBlock = index < blockCount ? this._blocks[index] : false\n\n if (!prevBlock) {\n this.$blocksContainer.prepend(block.$container)\n } else {\n const minLevel = nextBlock ? nextBlock.getLevel() : 1\n const maxLevel = prevBlock.getLevel() + (prevBlock.getBlockType().isParent() ? 1 : 0)\n\n level = Math.max(minLevel, Math.min(level, maxLevel))\n\n const prevBlockOnLevel = this._findPrevBlockOnLevel(index, level)\n\n if (prevBlockOnLevel) {\n prevBlockOnLevel.$container.after(block.$container)\n } else {\n prevBlock.$blocksContainer.prepend(block.$container)\n }\n }\n\n block.setLevel(level)\n\n this._blocks.push(block)\n this._blockSort.addBlock(block)\n this.blockSelect.addItems(block.$container)\n\n block.initUi()\n this._setBlockEvents(block)\n this._destroyTempButtons()\n this._updateBlockOrder()\n this._updateBlockChildren()\n this._updateButtons()\n\n this._visibleLayoutElements[block.getId()] = block.getBlockType().getDefaultVisibleLayoutElements()\n\n // Create any required child blocks, if this block has only one child block type\n const createChildBlocksIfAllowed = () => {\n if (createChildBlocks) {\n const blockType = block.getBlockType()\n const minChildBlocks = blockType.getMinChildBlocks()\n\n if (minChildBlocks > 0) {\n let childBlockTypes = blockType.getChildBlocks()\n\n if (childBlockTypes === '*') {\n childBlockTypes = this.getBlockTypes()\n }\n\n if (childBlockTypes.length === 1) {\n const childBlockType = this.getBlockTypeByHandle(childBlockTypes[0])\n\n for (let i = 0; i < minChildBlocks; i++) {\n this['@newBlock']({\n blockType: childBlockType,\n createChildBlocks: false,\n index: index + i + 1,\n level: level + 1\n })\n }\n }\n }\n }\n\n this.$form.data('elementEditor')?.resume()\n }\n\n if (animate) {\n block.$container\n .css({\n opacity: 0,\n marginBottom: -(block.$container.outerHeight())\n })\n .velocity({\n opacity: 1,\n marginBottom: 10\n }, 'fast', _ => Garnish.requestAnimationFrame(() => {\n Garnish.scrollContainerToElement(block.$container)\n createChildBlocksIfAllowed()\n }))\n } else {\n createChildBlocksIfAllowed()\n }\n\n this.trigger('addBlock', {\n block,\n index\n })\n },\n\n removeBlock (block, animate = null, _delayAnimate = null) {\n this.$form.data('elementEditor')?.pause()\n\n animate = !Garnish.prefersReducedMotion() && (typeof animate === 'boolean' ? animate : true)\n _delayAnimate = typeof _delayAnimate === 'boolean' ? _delayAnimate : false\n\n const childBlocks = this._findChildBlocks(this._blocks.indexOf(block))\n for (const childBlock of childBlocks) {\n this.removeBlock(childBlock, true, true)\n }\n\n block.off('.input')\n\n this._blocks = this._blocks.filter(b => b !== block)\n this._blockSort.removeItems(block.$container)\n this.blockSelect.removeItems(block.$container)\n\n this._destroyTempButtons()\n this._updateButtons()\n\n const finishTheRemoval = () => {\n block.$container.remove()\n this._updateBlockChildren()\n this.$form.data('elementEditor')?.resume()\n }\n\n if (animate) {\n block.$container\n .css({\n opacity: 1,\n marginBottom: 10\n })\n .velocity({\n opacity: 0,\n marginBottom: _delayAnimate ? 10 : -(block.$container.outerHeight())\n }, 'fast', _ => finishTheRemoval())\n } else {\n finishTheRemoval()\n }\n\n block.destroy()\n\n this.trigger('removeBlock', {\n block\n })\n },\n\n _setBlockEvents (block) {\n block.on('removeBlock.input', _ => {\n if (this.getSelectedBlocks().length > 1) {\n if (window.confirm(Craft.t('neo', 'Are you sure you want to delete the selected blocks?'))) {\n this._blockBatch(block, b => this.removeBlock(b))\n }\n } else {\n this.removeBlock(block)\n }\n })\n block.on('toggleEnabled.input', e => this._blockBatch(block, b => b.toggleEnabled(e.enabled)))\n block.on('toggleExpansion.input', e => this._blockBatch(block, b => b.toggleExpansion(e.expanded)))\n block.on('moveUpBlock.input', _ => this._moveBlock(block, 'up'))\n block.on('moveDownBlock.input', _ => this._moveBlock(block, 'down'))\n block.on('newBlock.input', e => this['@newBlock'](Object.assign(e, { index: this._getNextBlockIndex(block) })))\n block.on('addBlockAbove.input', e => this['@addBlockAbove'](e))\n block.on('copyBlock.input', e => this['@copyBlock'](e))\n block.on('pasteBlock.input', e => this['@pasteBlock'](e))\n block.on('duplicateBlock.input', e => this['@duplicateBlock'](e))\n block.on('change.input', () => this.trigger('change', { block }))\n },\n\n _moveBlock (block, direction, animate = true) {\n if (!['up', 'down'].includes(direction)) {\n return\n }\n\n this.$form.data('elementEditor')?.pause()\n\n const siblings = block.getSiblings(this.getBlocks())\n const index = siblings.indexOf(block)\n const moveUp = index > 0 && direction === 'up'\n const moveDown = index < siblings.length - 1 && direction === 'down'\n\n if (index === -1 || moveUp === moveDown) {\n return\n }\n\n const animateMove = !Garnish.prefersReducedMotion() && (typeof animate === 'boolean' ? animate : true)\n const $block = block.$container\n\n const startTheMove = () => {\n $block.detach()\n\n if (moveUp) {\n siblings[index - 1].$container.before($block)\n } else {\n siblings[index + 1].$container.after($block)\n }\n }\n\n const finishTheMove = () => {\n this._updateBlockOrder()\n this._updateButtons()\n this.$form.data('elementEditor')?.resume()\n }\n\n if (animateMove) {\n $block\n .css({\n opacity: 1,\n marginBottom: 10\n })\n .velocity({\n opacity: 0,\n marginBottom: -($block.outerHeight())\n }, 'fast', _ => {\n startTheMove()\n\n $block\n .css({\n opacity: 0,\n marginBottom: -($block.outerHeight())\n })\n .velocity({\n opacity: 1,\n marginBottom: 10\n }, 'fast', _ => {\n finishTheMove()\n Garnish.requestAnimationFrame(() => Garnish.scrollContainerToElement($block))\n })\n })\n } else {\n startTheMove()\n finishTheMove()\n }\n },\n\n getBlockByElement ($block) {\n return this._blocks.find(block => block.$container.is($block))\n },\n\n getBlocks (level = 0) {\n return level > 0 ? this._blocks.filter(b => b.getLevel() === level) : Array.from(this._blocks)\n },\n\n getBlockTypeById (id) {\n return this._blockTypes.find(bt => bt.getId() === id)\n },\n\n getBlockTypeByHandle (handle) {\n return this._blockTypes.find(bt => bt.getHandle() === handle)\n },\n\n getBlockTypes (topLevelOnly) {\n topLevelOnly = typeof topLevelOnly === 'boolean' ? topLevelOnly : false\n\n return topLevelOnly\n ? this._blockTypes.filter(bt => bt.getTopLevel())\n : Array.from(this._blockTypes)\n },\n\n getGroups () {\n return Array.from(this._groups)\n },\n\n getItems () {\n return [...this.getBlockTypes(), ...this.getGroups()].sort((a, b) => a.getSortOrder() - b.getSortOrder())\n },\n\n getMaxBlocks () {\n return this._maxBlocks\n },\n\n getMaxTopBlocks () {\n return this._maxTopBlocks\n },\n\n getMinLevels () {\n return this._minLevels\n },\n\n getMaxLevels () {\n return this._maxLevels\n },\n\n atMaxLevels (level) {\n return this._maxLevels > 0 && level + 1 > this._maxLevels\n },\n\n getSelectedBlocks () {\n const $selectedBlocks = this.blockSelect.getSelectedItems()\n return this._blocks.filter(block => block.$container.closest($selectedBlocks).length > 0)\n },\n\n getCopiedBlocks () {\n const copyData = window.localStorage.getItem(`neo:copy:${this._name}`)\n\n if (!copyData) {\n return []\n }\n\n const { blocks } = JSON.parse(copyData)\n return blocks\n },\n\n setVisibleElements (blockId, visibleLayoutElements) {\n // visibleLayoutElements might (will probably) be a JSON-encoded string\n if (typeof visibleLayoutElements === 'string') {\n visibleLayoutElements = JSON.parse(visibleLayoutElements)\n }\n\n const block = this._blocks.find((block) => block.getId() === blockId)\n\n if (block === null) {\n return\n }\n\n this._visibleLayoutElements[blockId] = visibleLayoutElements\n },\n\n _setMatrixClassErrors () {\n // TODO: will need probably need to find a method within php instead of JS\n // temp solution for now.\n const matrixErrors = $('.ni_block_body .matrix-field .input.errors')\n\n matrixErrors.each(function () {\n const _this = $(this)\n const tabContainer = _this.closest('.ni_block_content_tab')\n const tabData = tabContainer.data('neo-b-info')\n const closestContainer = _this.closest('.ni_block')\n const bar = closestContainer.find('.tabs .tab[data-neo-b-info=\"' + tabData + '\"]')\n\n if (bar.length) {\n bar.addClass('has-errors')\n }\n })\n },\n\n _setBlockTypeClassErrors () {\n const tabErrors = $('.ni_block .tab.has-errors')\n\n tabErrors.each(function () {\n const parents = tabErrors.parents('.ni_block.is-collapsed')\n\n parents.each(function () {\n const _this = $(this)\n _this.find('> .ni_block_topbar .title .blocktype').addClass('has-errors')\n })\n })\n },\n\n _updateBlockOrder () {\n const blocks = []\n\n this.$blocksContainer.find('.ni_block').each((index, element) => {\n const block = this.getBlockByElement(element)\n blocks.push(block)\n })\n\n this._blocks = blocks\n this.trigger('updateBlockOrder')\n this.trigger('change', { block: null })\n },\n\n _updateBlockChildren () {\n for (const block of this._blocks) {\n const children = block.$blocksContainer.children('.ni_block')\n const collapsedCount = Math.min(children.length, 8) // Any more than 8 and it's a little too big\n const collapsedChildren = []\n\n for (let i = 0; i < collapsedCount; i++) {\n collapsedChildren.push('
    ')\n }\n\n block.$collapsedChildrenContainer.html(collapsedChildren.join(''))\n }\n },\n\n _checkMaxChildren (block) {\n if (!block) {\n return true\n }\n\n const blockType = block.getBlockType()\n const maxChildren = blockType.getMaxChildBlocks()\n\n if (maxChildren > 0) {\n const children = this._findChildBlocks(block)\n\n return children.length < maxChildren\n }\n\n return true\n },\n\n _updateButtons () {\n const blocks = this.getBlocks()\n this._buttons.updateButtonStates(blocks)\n this._tempButtons?.updateButtonStates(blocks, this._checkMaxChildren(this._tempButtonsBlock))\n\n for (const block of blocks) {\n block.updateActionsMenu()\n block.getButtons()?.updateButtonStates(blocks, this._checkMaxChildren(block), block)\n block.toggleShowButtons(!this.atMaxLevels(block.getLevel()))\n }\n },\n\n _blockBatch (block, callback) {\n const blocks = block.isSelected() ? this.getSelectedBlocks() : [block]\n\n for (const b of blocks) {\n callback(b)\n }\n },\n\n _destroyTempButtons (animate = null) {\n animate = !Garnish.prefersReducedMotion() && (typeof animate === 'boolean' ? animate : true)\n\n if (this._tempButtons) {\n const buttons = this._tempButtons\n buttons.off('newBlock')\n\n if (animate) {\n buttons.$container\n .css({\n opacity: 1,\n marginBottom: 10\n })\n .velocity({\n opacity: 0,\n marginBottom: -(buttons.$container.outerHeight())\n }, 'fast', e => buttons.$container.remove())\n } else {\n buttons.$container.remove()\n }\n\n this._tempButtons = null\n this._tempButtonsBlock = null\n }\n },\n\n _findPrevBlockOnLevel (index, level) {\n if (index instanceof Block) {\n index = this._blocks.indexOf(index)\n }\n\n const blocks = this._blocks\n\n let block = blocks[--index]\n let lowestLevel = Number.MAX_VALUE\n\n while (block) {\n const blockLevel = block.getLevel()\n\n if (blockLevel < lowestLevel) {\n if (blockLevel === level) {\n return block\n }\n\n lowestLevel = blockLevel\n }\n\n block = this._blocks[--index]\n }\n\n return false\n },\n\n _findChildBlocks (index, descendants = null) {\n if (index instanceof Block) {\n index = this._blocks.indexOf(index)\n }\n\n descendants = (typeof descendants === 'boolean' ? descendants : false)\n const block = this._blocks[index]\n\n return block ? block.getChildren(this._blocks, descendants) : []\n },\n\n _findParentBlock (index) {\n if (index instanceof Block) {\n index = this._blocks.indexOf(index)\n }\n\n const blocks = this._blocks\n const block = blocks[index]\n\n if (block) {\n const level = block.getLevel()\n\n if (level > 1) {\n let i = index\n let currentBlock = block\n\n while (currentBlock && currentBlock.getLevel() >= level) {\n currentBlock = blocks[--i]\n }\n\n return currentBlock\n }\n }\n\n return null\n },\n\n _getNextBlockIndex (index) {\n // If undefined, then there's no previous block and the 'next' block will be the first block\n if (typeof index === 'undefined') {\n return 0\n }\n\n if (index instanceof Block) {\n index = this._blocks.indexOf(index)\n }\n\n const descendants = this._findChildBlocks(index, true)\n const lastDescendant = descendants[descendants.length - 1]\n\n return (lastDescendant ? this._blocks.indexOf(lastDescendant) : index) + 1\n },\n\n /**\n * TODO: hopefully remove this in the Craft 5 version\n * @private\n */\n _registerDynamicBlockConditions () {\n // A small timeout to let the element editor initialise\n setTimeout(() => {\n const elementEditor = this.$form.data('elementEditor')\n elementEditor?.on('update', () => {\n const siteId = elementEditor.settings.siteId\n const data = {\n blocks: {},\n sortOrder: [],\n fieldId: this._id,\n ownerCanonicalId: this._ownerId,\n ownerDraftId: elementEditor.settings.draftId,\n isProvisionalDraft: elementEditor.settings.isProvisionalDraft,\n siteId\n }\n const originalBlockIds = {}\n this._blocks.forEach((block) => {\n const selectedTabId = block.$contentContainer\n .children('[data-layout-tab]:not(.hidden)')\n .data('layout-tab')\n data.blocks[block.getDuplicatedBlockId()] = {\n selectedTab: selectedTabId ?? null,\n visibleLayoutElements: this._visibleLayoutElements[block.getId()] ?? {}\n }\n data.sortOrder.push(block.getDuplicatedBlockId())\n originalBlockIds[block.getDuplicatedBlockId()] = block.getId()\n })\n\n Craft.queue.push(() => new Promise((resolve, reject) => {\n Craft.sendActionRequest('POST', 'neo/input/update-visible-elements', { data })\n .then((response) => {\n // If the draft's been updated since, ignore the response, since we'll get a new one soon anyway\n if (elementEditor.submittingForm) {\n reject(Error('Form being resaved'))\n return\n }\n\n for (const blockId in response.data.blocks) {\n const block = this._blocks.find((block) => block.getId() === originalBlockIds[blockId])\n this._updateVisibleElements(\n block,\n response.data.blocks[blockId],\n data.blocks[block.getDuplicatedBlockId()].selectedTabId\n )\n }\n resolve()\n })\n .catch(reject)\n }))\n })\n }, 200)\n },\n\n /**\n * TODO: hopefully remove this in the Craft 5 version\n * @private\n */\n _updateVisibleElements (block, blockData, selectedTabId) {\n let $allTabContainers = $()\n const visibleLayoutElements = {}\n let changedElements = false\n\n for (let i = 0; i < blockData.missingElements.length; i++) {\n const tabInfo = blockData.missingElements[i]\n let $tabContainer = block.$contentContainer.children(\n `[data-layout-tab=\"${tabInfo.uid}\"]`\n )\n\n if (!$tabContainer.length) {\n $tabContainer = $('
    ', {\n id: block.namespaceId(tabInfo.id),\n class: 'flex-fields',\n 'data-id': tabInfo.id,\n 'data-layout-tab': tabInfo.uid\n })\n if (tabInfo.id !== selectedTabId) {\n $tabContainer.addClass('hidden')\n }\n $tabContainer.appendTo(block.$contentContainer)\n }\n\n $allTabContainers = $allTabContainers.add($tabContainer)\n\n for (let j = 0; j < tabInfo.elements.length; j++) {\n const elementInfo = tabInfo.elements[j]\n\n if (elementInfo.html !== false) {\n if (!visibleLayoutElements[tabInfo.uid]) {\n visibleLayoutElements[tabInfo.uid] = []\n }\n visibleLayoutElements[tabInfo.uid].push(elementInfo.uid)\n\n if (typeof elementInfo.html === 'string') {\n const html = elementInfo.html.replaceAll('__NEOBLOCK__', block.getId())\n const $oldElement = $tabContainer.children(\n `[data-layout-element=\"${elementInfo.uid}\"]`\n )\n const $newElement = $(html)\n if ($oldElement.length) {\n $oldElement.replaceWith($newElement)\n } else {\n $newElement.appendTo($tabContainer)\n }\n Craft.initUiElements($newElement)\n if ($newElement.hasClass('ni_child-blocks-ui-element')) {\n block.resetButtons()\n }\n changedElements = true\n }\n } else {\n const $oldElement = $tabContainer.children(\n `[data-layout-element=\"${elementInfo.uid}\"]`\n )\n if (\n !$oldElement.length ||\n !Garnish.hasAttr(\n $oldElement,\n 'data-layout-element-placeholder'\n )\n ) {\n const $placeholder = $('
    ', {\n class: 'hidden',\n 'data-layout-element': elementInfo.uid,\n 'data-layout-element-placeholder': ''\n })\n\n if ($oldElement.length) {\n $oldElement.replaceWith($placeholder)\n } else {\n $placeholder.appendTo($tabContainer)\n }\n\n changedElements = true\n }\n }\n }\n\n if (changedElements) {\n this._updateButtons()\n }\n }\n\n // Remove any unused tab content containers\n // (`[data-layout-tab=\"\"]` == unconditional containers, so ignore those)\n const $unusedTabContainers = block.$contentContainer\n .children('[data-layout-tab]')\n .not($allTabContainers)\n .not('[data-layout-tab=\"\"]')\n if ($unusedTabContainers.length) {\n $unusedTabContainers.remove()\n changedElements = true\n }\n\n // Make the first tab visible if no others are\n if (!$allTabContainers.filter(':not(.hidden)').length) {\n $allTabContainers.first().removeClass('hidden')\n }\n\n this._visibleLayoutElements[block.getId()] = visibleLayoutElements\n\n // Update the tabs\n // Unfortunately can't use `block.getDuplicatedBlockId()` because it doesn't work here for new blocks\n const idToReplace = blockData.tabs?.match(/data-neo-b=\"([0-9]+).container.tabs\"/)?.pop() ?? null\n const tabsHtml = idToReplace\n ? blockData.tabs.replaceAll(idToReplace, block.getId())\n : blockData.tabs\n const $tabsHtml = $(tabsHtml)\n const $tabsOuterContainer = block.$topbarRightContainer.find('.tabs')\n $tabsOuterContainer.empty().append($tabsHtml)\n block.initTabs()\n block.updateResponsiveness()\n\n Craft.appendHeadHtml(blockData.headHtml.replaceAll('__NEOBLOCK__', block.getId()))\n Craft.appendBodyHtml(blockData.bodyHtml.replaceAll('__NEOBLOCK__', block.getId()))\n\n // Did any layout elements get added or removed?\n if (changedElements && blockData.initialDeltaValues) {\n Object.assign(\n this.$form.data('initial-delta-values'),\n blockData.initialDeltaValues\n )\n }\n },\n\n _addSpinnerAfter (block) {\n if (typeof block !== 'undefined') {\n block.$container.after(this._$spinner)\n } else {\n this.$blocksContainer.prepend(this._$spinner)\n }\n },\n\n _addSpinnerBefore (block) {\n if (typeof block !== 'undefined') {\n block.$container.before(this._$spinner)\n } else {\n this.$blocksContainer.append(this._$spinner)\n }\n },\n\n _animateSpinnerThen (callback) {\n if (!Garnish.prefersReducedMotion()) {\n this._$spinner\n .css({\n opacity: 0,\n marginBottom: -(this._$spinner.outerHeight())\n })\n .velocity({\n opacity: 1,\n marginBottom: 10\n }, 'fast', () => callback())\n } else {\n callback()\n }\n },\n\n _removeSpinner () {\n this._$spinner.remove()\n },\n\n _getNewBlockId () {\n while (this.$blocksContainer.find(`[data-neo-b-id=\"new${this._newBlockId}\"]`).length > 0) {\n this._newBlockId++\n }\n\n return `new${this._newBlockId++}`\n },\n\n _duplicate (data, block) {\n this.$form.data('elementEditor')?.pause()\n this._addSpinnerAfter(block)\n this._animateSpinnerThen(() => Craft.postActionRequest('neo/input/render-blocks', data, e => {\n if (e.success && e.blocks.length > 0) {\n const newBlocks = []\n\n for (const renderedBlock of e.blocks) {\n const newId = this._getNewBlockId()\n const newBlock = new Block({\n namespace: [...this._templateNs, newId],\n field: this,\n blockType: this.getBlockTypeById(renderedBlock.type),\n tabs: renderedBlock.tabs,\n id: newId,\n level: renderedBlock.level | 0,\n enabled: !!renderedBlock.enabled,\n collapsed: !!renderedBlock.collapsed,\n showButtons: !this.atMaxLevels(renderedBlock.level | 0),\n showBlockTypeHandle: this._showBlockTypeHandles\n }, true)\n\n newBlocks.push(newBlock)\n }\n\n let newIndex = this._getNextBlockIndex(block)\n\n for (const newBlock of newBlocks) {\n this.addBlock(newBlock, newIndex++, newBlock.getLevel(), false)\n }\n\n if (!Garnish.prefersReducedMotion()) {\n const firstBlock = newBlocks[0]\n\n firstBlock.$container\n .css({\n opacity: 0,\n marginBottom: this._$spinner.outerHeight() - firstBlock.$container.outerHeight() + 10\n })\n .velocity({\n opacity: 1,\n marginBottom: 10\n }, 'fast', _ => Garnish.requestAnimationFrame(() => Garnish.scrollContainerToElement(firstBlock.$container)))\n }\n\n this._removeSpinner()\n this.$form.data('elementEditor')?.resume()\n }\n }))\n },\n\n async '@newBlock' (e) {\n const createTheBlock = () => {\n const blockId = this._getNewBlockId()\n const block = new Block({\n namespace: [...this._templateNs, blockId],\n field: this,\n blockType: e.blockType,\n id: blockId,\n showButtons: !this.atMaxLevels(e.level),\n showBlockTypeHandle: this._showBlockTypeHandles\n }, true)\n\n this._removeSpinner()\n this.addBlock(block, e.index, e.level, e.createChildBlocks, e.createChildBlocks)\n }\n\n if (e.blockType.getTabs() !== null) {\n createTheBlock()\n return\n }\n\n const elementEditor = this.$form.data('elementEditor')\n\n try {\n elementEditor?.pause()\n const level = e.level ?? 1\n let siblingBlock\n let addAfter = true\n\n for (let i = typeof e.index !== 'undefined' ? e.index - 1 : this._blocks.length - 1; i >= 0; i--) {\n // Look for the previous block at the same level as the new block, to add the spinner after\n if (this._blocks[i].getLevel() === level) {\n siblingBlock = this._blocks[i]\n break\n }\n\n // If we've gone to a lower level, any future block we find at the same level won't be a\n // sibling of the new block, so we need to add the spinner before the last block we checked\n if (this._blocks[i].getLevel() < level) {\n siblingBlock = this._blocks[i + 1]\n addAfter = false\n }\n }\n\n if (addAfter) {\n this._addSpinnerAfter(siblingBlock)\n } else {\n this._addSpinnerBefore(siblingBlock)\n }\n\n this._animateSpinnerThen(async () => {\n await e.blockType.loadTabs()\n createTheBlock()\n })\n } catch (error) {\n this._removeSpinner()\n Craft.cp.displayError(error)\n } finally {\n elementEditor?.resume()\n }\n },\n\n '@addBlockAbove' (e) {\n this._destroyTempButtons()\n\n const animate = !Garnish.prefersReducedMotion() && e.animate !== false\n const block = e.block\n const index = this._blocks.indexOf(block)\n const parent = this._findParentBlock(index)\n const blocks = this.getBlocks()\n const buttons = new this.ButtonClass({\n $ownerContainer: block.isTopLevel() ? this.$container : block.getParent().$container,\n field: this,\n blockTypes: !parent ? this.getBlockTypes(true) : [],\n blocks,\n groups: !parent ? this.getGroups() : [],\n items: parent ? parent.getBlockType().getChildBlockItems(this.getItems()) : null,\n maxBlocks: this.getMaxBlocks()\n })\n\n block.$container.before(buttons.$container)\n\n buttons.on('newBlock', e => this['@newBlock']({\n blockType: e.blockType,\n index,\n level: block.getLevel()\n }))\n\n buttons.initUi()\n\n if (animate) {\n buttons.$container\n .css({\n opacity: 0,\n marginBottom: -(buttons.$container.outerHeight())\n })\n .velocity({\n opacity: 1,\n marginBottom: 10\n }, 'fast', _ => Garnish.requestAnimationFrame(() => Garnish.scrollContainerToElement(buttons.$container)))\n }\n\n this._tempButtons = buttons\n this._tempButtonsBlock = this._findParentBlock(block)\n\n this._tempButtons.updateButtonStates(blocks, this._checkMaxChildren(this._tempButtonsBlock), this._tempButtonsBlock)\n },\n\n '@copyBlock' (e) {\n // Get the selected blocks and their descendants\n const blockGroups = []\n let blockCount = 0\n const ownerId = this._ownerId\n\n this._blockBatch(e.block, (block) => {\n // To prevent block descendants from being copied multiple times, determine whether the current block has\n // been added to the most recently added group.\n const blockAdded = blockCount > 0 && blockGroups[blockGroups.length - 1].indexOf(block) !== -1\n\n if (!blockAdded) {\n const newGroup = []\n newGroup.push(block, ...this._findChildBlocks(block, true))\n blockGroups.push(newGroup)\n blockCount += newGroup.length\n }\n })\n\n // Collect the relevant data from those blocks to be stored for pasting\n const data = {\n field: this._name,\n blocks: []\n }\n\n for (const group of blockGroups) {\n const firstBlockLevel = group[0].getLevel() - 1\n\n for (const block of group) {\n const blockData = {\n type: block.getBlockType().getId(),\n level: block.getLevel() - firstBlockLevel,\n content: block.getContent(),\n ownerId\n }\n\n if (block.isEnabled()) {\n blockData.enabled = 1\n }\n\n if (!block.isExpanded()) {\n blockData.collapsed = 1\n }\n\n data.blocks.push(blockData)\n }\n }\n\n window.localStorage.setItem(`neo:copy:${this._name}`, JSON.stringify(data))\n\n this._updateButtons()\n\n const notice = blockCount === 1 ? '1 block copied' : '{n} blocks copied'\n Craft.cp.displayNotice(Craft.t('neo', notice, { n: blockCount }))\n },\n\n '@pasteBlock' (e) {\n const block = e.block\n const baseLevel = (block?.getLevel() ?? 1) - 1\n const blocks = this.getCopiedBlocks()\n\n if (blocks.length > 0) {\n for (const pasteBlock of blocks) {\n pasteBlock.level += baseLevel\n }\n\n NS.enter(this._templateNs)\n\n const data = {\n namespace: NS.toFieldName(),\n siteId: this._siteId,\n blocks\n }\n\n NS.leave()\n\n this._duplicate(data, block)\n }\n },\n\n '@duplicateBlock' (e) {\n const block = e.block\n const blockIndex = this._blocks.indexOf(block)\n const subBlocks = this._findChildBlocks(blockIndex, true)\n const ownerId = this._ownerId\n\n const getBlockData = block => {\n return {\n collapsed: !block.isExpanded() | 0,\n content: block.getContent(),\n enabled: block.isEnabled() | 0,\n level: block.getLevel(),\n ownerId,\n type: block.getBlockType().getId()\n }\n }\n\n NS.enter(this._templateNs)\n\n const data = {\n namespace: NS.toFieldName(),\n siteId: this._siteId,\n blocks: [\n getBlockData(block),\n ...subBlocks.map(getBlockData)\n ]\n }\n\n NS.leave()\n\n this._duplicate(data, block)\n }\n})\n","import Input from './input/Input'\n\nconst context = window ?? this\nconst inputs = []\n\ncontext.Neo = {\n Input,\n inputs,\n\n createInput (settings = {}) {\n const input = new Input(settings)\n inputs.push(input)\n\n return input\n }\n}\n"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","jQuery","Garnish","Craft","_stack","enter","segments","join","arguments","length","undefined","this","fromFieldName","joined","getNamespace","push","enterByFieldName","fieldName","leave","pop","Array","from","parse","value","indexOf","split","separator","prefix","toFieldName","replace","toString","slice","match","BlockSort","extend","$container","blocks","maxTopBlocks","_draggeeBlocks","init","items","settings","$","defaults","axis","base","container","getHelperTargetX","$draggee","offset","left","getHelperTargetY","magnet","magnetStrength","draggeeOffsetY","top","mouseY","mouseOffsetY","getBlockByElement","$block","find","block","is","getParentBlock","$parentBlock","parent","closest","onDragStart","that","each","_calculateMidpoints","onDrag","midpoint","_getClosestMidpoint","_moveDraggeeToBlock","type","direction","onDragStop","setLevel","parentBlock","getLevel","$childBlock","childBlock","returnHelpersToDraggees","addBlock","addItems","removeBlock","filter","b","removeItems","minDistance","Number","MAX_VALUE","maxDistance","MIN_VALUE","_currentMidpoints","DIRECTION_UP","position","_draggeeBlockHeight","_draggeeBlockY","height","midpoints","_getBlockMidpoints","keys","DIRECTION_DOWN","endMidpoint","margin","TYPE_END","isExpanded","blockHeight","topbarHeight","$topbarContainer","childrenHeight","$childrenContainer","preChildrenContentHeight","$contentContainer","_validateDraggeeChildren","TYPE_CONTENT","buttonsHeight","getButtons","TYPE_CHILDREN","validChild","$blocksContainer","append","after","before","getBlockType","isParent","prepend","_updateHelperAppearance","field","getField","maxLevels","getMaxLevels","parentLevel","firstDraggeeLevel","blockExceedsMax","blockOrDescendantExceedsMax","descendants","getChildren","getBlocks","some","topBlocks","children","topBlocksCount","draggeeBlock","getTopLevel","includes","blockType","maxChildBlocks","getMaxChildBlocks","blockChildren","blockChildCount","blockChildrenWithoutDraggees","checkedDraggeeBlocks","isValidChildBlock","draggeeBlockType","maxSiblingBlocks","getMaxSiblingBlocks","draggeeBlocksOfType","getHandle","$helper","helpers","id","data","css","width","_defaults","name","errors","assign","_name","_errors","_uid","uid","getErrors","getName","getUid","fieldLayoutId","sortOrder","handle","maxBlocks","groupChildBlockTypes","childBlocks","topLevel","tabs","tabNames","hasChildBlocksUiElement","creatableByUser","deletableByUser","editableByUser","_settings$tabs$html","_settings$tabs","_settings$tabs$js","_settings$tabs2","_settings$tabs$visibl","_settings$tabs3","_settings$tabs$tabNam","_settings$tabs$tabNam2","_id","_fieldLayoutId","_sortOrder","_handle","_description","description","_enabled","enabled","_minBlocks","minBlocks","_maxBlocks","_minSiblingBlocks","_maxSiblingBlocks","_minChildBlocks","minChildBlocks","_maxChildBlocks","_groupChildBlockTypes","_childBlocks","_topLevel","_tabNames","_tabs","map","tab","Tab","tabUids","_html","html","_js","js","_defaultVisibleLayoutElements","visibleLayoutElements","_hasChildBlocksUiElement","_creatableByUser","_deletableByUser","_editableByUser","getType","getId","getFieldLayoutId","getSortOrder","getDescription","getEnabled","getMinBlocks","getMaxBlocks","getMinSiblingBlocks","getMinChildBlocks","getGroupChildBlockTypes","getChildBlocks","getTabNames","getTabs","loadTabs","namespace","NS","collapsed","level","renderedBlocks","success","_tabs$tabNames$map","_tabs$tabNames","getHtml","blockId","_replaceBlockIdPlaceholder","getJs","getDefaultVisibleLayoutElements","_objectSpread","input","getChildBlockItems","firstPass","item","hasChildBlock","i","nextItem","cb","isArray","isCreatableByUser","isDeletableByUser","isEditableByUser","alwaysShowDropdown","_alwaysShowDropdown","getAlwaysShowDropdown","isBlank","insertAt","index","$parent","eq","buttons","modified","showButtons","showBlockTypeHandle","_resources","_escapeMap","_resourceFilter","url","href","src","paramIndex","substr","isNew","_escapeHTML","str","s","_limit","l","_templateNs","_field","_blockType","_initialised","_expanded","_modified","_initialState","_forceModified","generateElement","_initialEnabled","_showButtons","_renderOldChildBlocksContainer","_generateElement","concat","$neo","$bodyContainer","$topbarLeftContainer","$topbarRightContainer","$handleContainer","$tabContainer","$menuContainer","$previewContainer","$settingsButton","$togglerButton","$enabledInput","$levelInput","$collapsedInput","$status","$sortOrder","$form","resetButtons","hasErrors","tabName","selector","$tabButton","addClass","toggleExpansion","toggleShowButtons","addListener","_this$_tabs","showHandle","baseInputName","baseInputId","hasTabs","actionBtnLabel","actionMenuId","tabsBtnLabel","tabsMenuId","sortOrderName","elementHtml","_collapsed","_level","isNaN","parseInt","tabUid","$elementHtml","createCopyTextBtn","class","insertAfter","initUi","_this$_buttons","callInitUiElements","$foot","initTabs","_settingsMenu","on","hasClass","forEach","toggleSettingsMenu","removeClass","_handleActionClick","_handleActionKeydown","toggleEnabled","_buttons","updateResponsiveness","e","parents","_","cbuiElement","$tabContent","tabIndex","add","content","_getPostData","detectChange","_detectChange","observer","window","MutationObserver","setTimeout","observe","attributes","childList","characterData","subtree","_detectChangeObserver","toggleClass","addFieldLinks","trigger","$tabsButton","$tabsContainer","_tabsMenu","_handleTabKeydown","destroy","remove","clearInterval","_detectChangeInterval","disconnect","getDuplicatedBlockId","_this$$form$data$dupl","_this$$form$data","duplicatedElements","isTopLevel","val","setModified","isModified","getSiteId","_siteId","$siteId","getContent","rawContent","setValue","currentSet","rawName","getParent","_blocks","blockParent","currentBlock","_blocks2","currentLevel","getSiblings","_blocks3","updatePreview","condensed","$childFields","$fields","previewText","$field","$input","fieldType","label","text","values","$assets","$asset","$thumbContainer","srcset","title","checked","color","colorText","colorRev","background","date","time","$subInputs","$subInput","subValue","$selectedType","first","$visibleOption","visibleInputVal","$visibleElement","customText","lines","test","isSelected","collapse","save","animate","expand","expandContainer","collapseContainer","expandedCss","opacity","outerHeight","collapsedCss","clearCss","velocity","saveExpansion","expanded","_this$$form$data2","sentBlockId","isProvisionalDraft","siteId","Promise","resolve","reject","then","catch","disable","enable","triggerEvent","blockTypeEnabled","actuallyEnabled","enableContainer","disableContainer","isEnabled","show","$buttonsContainer","$childrenWarningsContainer","selectTab","attr","retryAll","_this$_topbarLeftWidt","_this$_topbarRightWid","isMobileBrowser","_topbarLeftWidth","_topbarRightWidth","hasRoomForIndividualTabs","updateActionsMenu","_this$getParent","_parentBlockType$getC","parentBlockType","allowedBlockTypes","getBlockTypes","bt","getBlockTypeByHandle","updateMenuStates","getMaxTopBlocks","additionalCheck","noAllowedBlockTypes","blocksOfType","maxBlockTypes","siblingBlocks","totalTopBlocks","allDisabled","addDisabled","typeDisabled","cloneDisabled","pasteData","JSON","localStorage","getItem","pasteDisabled","_pasteData$blocks$len","_pasteData$blocks","childBlockCount","pasteBlockCount","hasSameBlockType","siblingBlockCount","pasteSiblingBlockCount","currentBlockTypesById","reduce","m","v","count","pasteBlock","pasteBlockTypeObj","pasteBlockType","currentBlocksOfTypeCount","maxPasteBlockTypes","siblingIndex","disableMoveUp","disableMoveDown","$collapsedChildrenContainer","ButtonClass","$ownerContainer","getItems","namespaceId","namespacedId","toggle","_toggle","hide","preventDefault","keyCode","elementEditor","enableAutosave","draftId","initial","badKeys","startsWith","$option","target","$checkFrom","isLeft","isRight","_this$$form$data3","_this$$form$data4","pause","resume","currentTarget","_totalNewBlocks","getNewId","blockTypes","groups","NewBlockMenu","constructor","_defineProperty","_items","_blockTypes","_blockTypeGroups","sort","_maxTopBlocks","renderButtons","$blockButtons","$groupButtons","updateState","_this$$ownerContainer","ownerBlockType","ungroupChildBlockTypes","buttonsHtml","blockTypesHtml","currentGroup","firstButton","generateGroupDropdown","titleAttr","BUTTON_INFO","lastGroupHadBlockTypes","getBlockTypeGroups","getBlockTypeByButton","$button","btHandle","maxBlocksMet","maxTopBlocksMet","disabled","blockHasSameType","maxBlocksOfType","siblingBlocksOfType","menu","$menuButtons","$options","GarnishNewBlockMenu","getGroups","updateButtonStates","blockTypeHandle","Buttons","menubtn","grandParent","childrenContainer","_buttonsContainerWidth","isMobile","ButtonsGrid","_ref","_this$_field","blockTypeIconId","hasBlockTypeIcon","ButtonsList","inputId","minLevels","ownerId","_visibleLayoutElements","_newBlockId","_groups","gInfo","Group","_minLevels","_maxLevels","_ownerId","_showBlockTypeHandles","showBlockTypeHandles","_$spinner","newBlockMenuStyle","ownerIdElement","setGroupIds","group","tempBlockTypes","btInfo","groupId","BlockType","_blockSort","$targetItem","blockSelect","getSelectedItems","collapseDraggees","helperLagBase","helperOpacity","_updateBlockOrder","_updateButtons","multi","vertical","checkboxMode","selectedClass","blockDiv","bInfo","atMaxLevels","Block","_setBlockEvents","_updateBlockChildren","missingBlockCount","topLevelBlockTypes","createChildBlocks","document","serialized","serialize","_setMatrixClassErrors","_setBlockTypeClassErrors","_registerDynamicBlockConditions","_this$_tempButtons","_block$getButtons","_tempButtons","blockCount","Math","max","min","prevBlock","nextBlock","minLevel","maxLevel","prevBlockOnLevel","_findPrevBlockOnLevel","_destroyTempButtons","createChildBlocksIfAllowed","childBlockTypes","childBlockType","marginBottom","_delayAnimate","_findChildBlocks","off","finishTheRemoval","getSelectedBlocks","confirm","_blockBatch","_moveBlock","_getNextBlockIndex","_this$$form$data5","siblings","moveUp","moveDown","animateMove","startTheMove","detach","finishTheMove","_this$$form$data6","getBlockTypeById","topLevelOnly","getMinLevels","$selectedBlocks","getCopiedBlocks","copyData","setVisibleElements","_this","tabData","bar","tabErrors","element","collapsedCount","collapsedChildren","_checkMaxChildren","maxChildren","_this$_tempButtons2","_tempButtonsBlock","_block$getButtons2","callback","lowestLevel","blockLevel","_findParentBlock","lastDescendant","fieldId","ownerCanonicalId","ownerDraftId","originalBlockIds","_this$_visibleLayoutE","selectedTabId","selectedTab","response","submittingForm","Error","_updateVisibleElements","blockData","_blockData$tabs$match","_blockData$tabs","$allTabContainers","changedElements","missingElements","tabInfo","appendTo","j","elements","elementInfo","replaceAll","$oldElement","$newElement","replaceWith","$placeholder","$unusedTabContainers","not","idToReplace","tabsHtml","$tabsHtml","empty","headHtml","bodyHtml","initialDeltaValues","_addSpinnerAfter","_addSpinnerBefore","_animateSpinnerThen","_removeSpinner","_getNewBlockId","_duplicate","_this$$form$data7","_this$$form$data8","newBlocks","renderedBlock","newId","newBlock","newIndex","firstBlock","createTheBlock","_e$level","siblingBlock","addAfter","async","error","displayError","blockGroups","newGroup","firstBlockLevel","setItem","stringify","notice","displayNotice","n","_block$getLevel","baseLevel","blockIndex","subBlocks","getBlockData","context","_window","inputs","Neo","Input","createInput"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"neo-main.js","mappings":"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","sources":["webpack://craft-neo/webpack/bootstrap","webpack://craft-neo/webpack/runtime/compat get default export","webpack://craft-neo/webpack/runtime/define property getters","webpack://craft-neo/webpack/runtime/hasOwnProperty shorthand","webpack://craft-neo/external var \"jQuery\"","webpack://craft-neo/external var \"Garnish\"","webpack://craft-neo/external var \"Craft\"","webpack://craft-neo/./src/assets/src/namespace.js","webpack://craft-neo/./src/assets/src/input/BlockSort.js","webpack://craft-neo/./src/assets/src/input/BlockTypeTab.js","webpack://craft-neo/./src/assets/src/input/BlockType.js","webpack://craft-neo/./src/assets/src/input/Group.js","webpack://craft-neo/./src/assets/src/jquery-extensions.js","webpack://craft-neo/./src/assets/src/input/Block.js","webpack://craft-neo/./src/assets/src/plugins/cpfieldinspect/main.js","webpack://craft-neo/./src/assets/src/input/NewBlockMenu.js","webpack://craft-neo/./src/assets/src/input/Buttons.js","webpack://craft-neo/./src/assets/src/input/ButtonsGrid.js","webpack://craft-neo/./src/assets/src/input/ButtonsList.js","webpack://craft-neo/./src/assets/src/input/Input.js","webpack://craft-neo/./src/assets/src/main.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","const __WEBPACK_NAMESPACE_OBJECT__ = jQuery;","const __WEBPACK_NAMESPACE_OBJECT__ = Garnish;","const __WEBPACK_NAMESPACE_OBJECT__ = Craft;","export default {\n\n _stack: [[]],\n\n enter (segments, join = true) {\n if (typeof segments === 'string') {\n segments = this.fromFieldName(segments)\n }\n\n if (join) {\n const joined = this.getNamespace()\n joined.push(...segments)\n\n segments = joined\n }\n\n this._stack.push(segments)\n },\n\n enterByFieldName (fieldName, join = true) {\n this.enter(this.fromFieldName(fieldName), join)\n },\n\n leave () {\n return this._stack.length > 1\n ? this._stack.pop()\n : this.getNamespace()\n },\n\n getNamespace () {\n return Array.from(this._stack[this._stack.length - 1])\n },\n\n parse (value) {\n if (typeof value === 'string') {\n if (value.indexOf('[') > -1) {\n return this.fromFieldName(value)\n }\n\n if (value.indexOf('-') > -1) {\n return value.split('-')\n }\n\n if (value.indexOf('.') > -1) {\n return value.split('.')\n }\n\n return value\n }\n\n return Array.from(value)\n },\n\n value (value, separator = '-') {\n const segments = this.getNamespace()\n segments.push(value)\n\n return segments.join(separator)\n },\n\n fieldName (fieldName = '') {\n const prefix = this.toFieldName()\n\n if (prefix) {\n return prefix + fieldName.replace(/([^'\"[\\]]+)([^'\"]*)/, '[$1]$2')\n }\n\n return fieldName\n },\n\n toString (separator = '-') {\n return this.getNamespace().join(separator)\n },\n\n toFieldName () {\n const segments = this.getNamespace()\n\n switch (segments.length) {\n case 0: return ''\n case 1: return segments[0]\n }\n\n return segments[0] + '[' + segments.slice(1).join('][') + ']'\n },\n\n fromFieldName (fieldName) {\n return fieldName.match(/[^[\\]\\s]+/g) || []\n }\n}\n","import $ from 'jquery'\nimport Garnish from 'garnish'\n\nconst BlockSort = Garnish.Drag.extend({\n\n $container: null,\n blocks: null,\n maxTopBlocks: 0,\n\n _draggeeBlocks: null,\n\n init (items, settings) {\n if (typeof settings === 'undefined' && $.isPlainObject(items)) {\n settings = items\n items = null\n }\n\n settings = $.extend({}, BlockSort.defaults, settings)\n settings.axis = Garnish.Y_AXIS\n\n this.base(items, settings)\n\n this.$container = settings.container\n this.blocks = []\n this.maxTopBlocks = settings.maxTopBlocks\n },\n\n getHelperTargetX () {\n return this.$draggee.offset().left\n },\n\n getHelperTargetY () {\n const magnet = this.settings.magnetStrength\n\n if (magnet !== 1) {\n const draggeeOffsetY = this.$draggee.offset().top\n return draggeeOffsetY + ((this.mouseY - this.mouseOffsetY - draggeeOffsetY) / magnet)\n }\n\n return this.base()\n },\n\n getBlockByElement ($block) {\n return this.blocks.find(block => block.$container.is($block))\n },\n\n getParentBlock (block) {\n const $parentBlock = block.$container.parent().closest('.ni_block')\n\n return $parentBlock.length > 0 ? this.getBlockByElement($parentBlock) : false\n },\n\n onDragStart () {\n const that = this\n\n this._draggeeBlocks = []\n this.$draggee.each(function () {\n that._draggeeBlocks.push(that.getBlockByElement(this))\n })\n\n this.base()\n this._calculateMidpoints()\n },\n\n onDrag () {\n const midpoint = this._getClosestMidpoint()\n\n if (midpoint) {\n this._moveDraggeeToBlock(midpoint.block, midpoint.type, midpoint.direction)\n }\n\n this.base()\n },\n\n onDragStop () {\n const that = this\n this.$draggee.each(function () {\n const $block = $(this)\n const block = that.getBlockByElement($block)\n const isRoot = $block.parent().is(that.$container)\n\n if (isRoot) {\n block.setLevel(1)\n } else {\n const parentBlock = that.getParentBlock(block)\n\n block.setLevel(parentBlock.getLevel() + 1)\n }\n\n $block.find('.ni_block').each(function () {\n const $childBlock = $(this)\n const childBlock = that.getBlockByElement($childBlock)\n const parentBlock = that.getParentBlock(childBlock)\n\n childBlock.setLevel(parentBlock.getLevel() + 1)\n })\n })\n\n this.returnHelpersToDraggees()\n\n this.base()\n },\n\n addBlock (block) {\n this.blocks.push(block)\n\n this.addItems(block.$container)\n },\n\n removeBlock (block) {\n this.blocks = this.blocks.filter(b => b !== block)\n\n this.removeItems(block.$container)\n },\n\n _getClosestMidpoint () {\n let minDistance = Number.MAX_VALUE\n let maxDistance = Number.MIN_VALUE\n let closest = null\n\n for (const midpoint of this._currentMidpoints) {\n if (midpoint.direction === BlockSort.DIRECTION_UP) {\n const compareY = this.mouseY - this.mouseOffsetY\n\n if (compareY < midpoint.position && midpoint.position < minDistance) {\n minDistance = midpoint.position\n closest = midpoint\n }\n } else {\n const compareY = this.mouseY - this.mouseOffsetY + this._draggeeBlockHeight\n\n if (compareY > midpoint.position && midpoint.position > maxDistance) {\n maxDistance = midpoint.position\n closest = midpoint\n }\n }\n }\n\n return closest\n },\n\n _calculateMidpoints () {\n const margin = 10\n\n this._draggeeBlockY = this.$draggee.offset().top\n this._draggeeBlockHeight = this.$draggee.height() + margin\n\n this._currentMidpoints = []\n\n for (const block of this.blocks) {\n if (block.$container.closest(this.$draggee).length === 0) {\n const midpoints = this._getBlockMidpoints(block)\n\n for (const type of Object.keys(midpoints)) {\n const position = midpoints[type]\n const direction = this._draggeeBlockY > position\n ? BlockSort.DIRECTION_UP\n : BlockSort.DIRECTION_DOWN\n\n this._currentMidpoints.push({\n block,\n position,\n type,\n direction\n })\n }\n }\n }\n\n const endMidpoint = this.$container.offset().top + this.$container.height() + (margin / 2)\n this._currentMidpoints.push({\n block: null,\n position: endMidpoint,\n type: BlockSort.TYPE_END,\n direction: BlockSort.DIRECTION_DOWN\n })\n },\n\n _getBlockMidpoints (block) {\n const midpoints = {}\n\n const border = 1\n const margin = 10\n const padding = 14\n\n const isAncestorCollapsed = (block.$container.parent().closest('.ni_block.is-collapsed').length > 0)\n\n if (!isAncestorCollapsed) {\n const offset = block.$container.offset().top\n\n const isExpanded = block.isExpanded()\n\n const blockHeight = block.$container.height()\n const topbarHeight = block.$topbarContainer.height()\n const childrenHeight = isExpanded ? block.$childrenContainer.height() : 0\n const preChildrenContentHeight = !(isExpanded && block.$contentContainer.length > 0)\n ? 0\n : block.$childrenContainer.length > 0\n ? block.$childrenContainer.offset().top - block.$contentContainer.offset().top\n : block.$contentContainer.height()\n\n const parentBlock = this.getParentBlock(block)\n\n if (!parentBlock || this._validateDraggeeChildren(parentBlock)) {\n midpoints[BlockSort.TYPE_CONTENT] = offset + (topbarHeight + preChildrenContentHeight) / 2\n }\n\n if (childrenHeight > 0 && block.isExpanded() && this._validateDraggeeChildren(block)) {\n const buttonsHeight = block.getButtons().$container.height()\n midpoints[BlockSort.TYPE_CHILDREN] = offset + blockHeight - border - (padding + buttonsHeight + margin) / 2\n }\n }\n\n return midpoints\n },\n\n _moveDraggeeToBlock: function (block, type = BlockSort.TYPE_CONTENT, direction = BlockSort.DIRECTION_DOWN) {\n const parentBlock = block ? this.getParentBlock(block) : null\n const validChild = this._validateDraggeeChildren(parentBlock)\n\n switch (type) {\n case BlockSort.TYPE_CHILDREN:\n if (this.$draggee.closest(block.$container).length === 0) {\n block.$blocksContainer.append(this.$draggee)\n } else if (validChild) {\n block.$container.after(this.$draggee)\n }\n break\n case BlockSort.TYPE_END:\n if (validChild) {\n this.$container.append(this.$draggee)\n }\n break\n default:\n {\n if (direction === BlockSort.DIRECTION_UP) {\n if (validChild) {\n block.$container.before(this.$draggee)\n }\n } else {\n if (block.getBlockType().isParent() && block.isExpanded() && this._validateDraggeeChildren(block)) {\n block.$blocksContainer.prepend(this.$draggee)\n } else if (validChild) {\n block.$container.after(this.$draggee)\n }\n }\n }\n }\n\n this._updateHelperAppearance()\n this._calculateMidpoints()\n },\n\n _validateDraggeeChildren (block) {\n // If any of the draggee blocks would exceed the field's max levels, we can't allow the move\n const field = block ? block.getField() : this._draggeeBlocks[0].getField()\n const maxLevels = field.getMaxLevels()\n\n if (maxLevels > 0) {\n const parentLevel = block ? block.getLevel() : -1\n const firstDraggeeLevel = this._draggeeBlocks[0].getLevel()\n const blockExceedsMax = b => b.getLevel() - firstDraggeeLevel + parentLevel + 1 >= maxLevels\n const blockOrDescendantExceedsMax = b => {\n const descendants = b.getChildren(field.getBlocks(), true)\n\n return blockExceedsMax(b) || descendants.some(blockOrDescendantExceedsMax)\n }\n\n if (this._draggeeBlocks.filter(blockOrDescendantExceedsMax).length > 0) {\n return false\n }\n }\n\n // If no block, then we're checking at the top level\n if (!block) {\n const that = this\n const topBlocks = this.$container.children('.ni_block:not(.is-disabled)')\n let topBlocksCount = topBlocks.length\n\n for (const draggeeBlock of this._draggeeBlocks) {\n // Is this block allowed at the top level?\n if (!draggeeBlock.getBlockType().getTopLevel()) {\n return false\n }\n }\n\n // If the block is already at the top level, don't count it for max top level block check purposes\n topBlocks.each(function () {\n if (that._draggeeBlocks.includes(that.getBlockByElement(this))) {\n topBlocksCount--\n }\n })\n\n // If this move would exceed the field's max top level blocks, we can't allow it\n if (this.maxTopBlocks > 0 && topBlocksCount >= this.maxTopBlocks) {\n return false\n }\n\n return true\n }\n\n const blockType = block.getBlockType()\n const maxChildBlocks = blockType.getMaxChildBlocks()\n\n const blockChildren = block.$childrenContainer.children('.ni_blocks').children('.ni_block')\n let blockChildCount = blockChildren.length\n const blockChildrenWithoutDraggees = []\n const that = this\n\n // If the block is already a child block, don't count it for validation purposes\n blockChildren.each(function () {\n const childBlock = that.getBlockByElement(this)\n\n if (that._draggeeBlocks.includes(childBlock)) {\n blockChildCount--\n } else {\n blockChildrenWithoutDraggees.push(childBlock)\n }\n })\n\n // Check whether the move would make the potential parent block exceed its max child blocks\n if (maxChildBlocks > 0 && blockChildCount >= maxChildBlocks) {\n return false\n }\n\n const checkedDraggeeBlocks = []\n\n for (const draggeeBlock of this._draggeeBlocks) {\n // Check whether the block is a valid child block for the parent's block type\n if (!blockType.isValidChildBlock(draggeeBlock)) {\n return false\n }\n\n // Check whether this move would cause any max sibling block type violations, unless we\n // checked this block already\n if (checkedDraggeeBlocks.includes(draggeeBlock)) {\n continue\n }\n\n const draggeeBlockType = draggeeBlock.getBlockType()\n const maxSiblingBlocks = draggeeBlockType.getMaxSiblingBlocks()\n\n // Also don't bother checking for max sibling block type violations if max sibling\n // blocks hasn't been set\n if (maxSiblingBlocks === 0) {\n continue\n }\n\n const draggeeBlocksOfType = this._draggeeBlocks.filter(b => b.getBlockType().getHandle() === draggeeBlockType.getHandle())\n const siblingBlocksOfType = blockChildrenWithoutDraggees.filter(b => b.getBlockType().getHandle() === draggeeBlockType.getHandle())\n\n if (siblingBlocksOfType.length + draggeeBlocksOfType.length > maxSiblingBlocks) {\n return false\n }\n\n checkedDraggeeBlocks.push(...draggeeBlocksOfType)\n }\n\n return true\n },\n\n _updateHelperAppearance () {\n for (const $helper of this.helpers) {\n const id = $helper.data('neo-b-id')\n const block = this.blocks.find(b => b.$container.data('neo-b-id') === id)\n\n $helper.css({\n width: block.$container.width() + 1,\n height: block.$container.height()\n })\n }\n }\n\n}, {\n\n TYPE_CONTENT: 'content',\n TYPE_CHILDREN: 'children',\n TYPE_END: 'end',\n DIRECTION_UP: 'up',\n DIRECTION_DOWN: 'down',\n\n defaults: {\n container: null,\n magnetStrength: 1\n }\n})\n\nexport default BlockSort\n","import Garnish from 'garnish'\n\nconst _defaults = {\n name: '',\n errors: []\n}\n\nexport default Garnish.Base.extend({\n\n init (settings = {}) {\n settings = Object.assign({}, _defaults, settings)\n\n this._name = settings.name\n this._errors = settings.errors\n this._uid = settings.uid\n },\n\n getErrors () { return Array.from(this._errors) },\n\n getName () { return this._name },\n\n /**\n * @public\n * @since 3.7.0\n * @returns this tab's UID\n */\n getUid () { return this._uid }\n})\n","import Garnish from 'garnish'\nimport Craft from 'craft'\nimport NS from '../namespace'\nimport Tab from './BlockTypeTab'\n\nconst _defaults = {\n id: -1,\n fieldLayoutId: -1,\n sortOrder: 0,\n name: '',\n handle: '',\n maxBlocks: 0,\n maxSiblingBlocks: 0,\n maxChildBlocks: 0,\n groupChildBlockTypes: true,\n childBlocks: false,\n topLevel: true,\n tabs: null,\n tabNames: [],\n hasChildBlocksUiElement: false,\n creatableByUser: true,\n deletableByUser: true,\n editableByUser: true\n}\n\nexport default Garnish.Base.extend({\n\n init (settings = {}) {\n settings = Object.assign({}, _defaults, settings)\n\n this._id = settings.id | 0\n this._fieldLayoutId = settings.fieldLayoutId | 0\n this._sortOrder = settings.sortOrder | 0\n this._name = settings.name\n this._handle = settings.handle\n this._description = settings.description\n this._enabled = settings.enabled\n this._minBlocks = settings.minBlocks | 0\n this._maxBlocks = settings.maxBlocks | 0\n this._minSiblingBlocks = settings.maxSiblingBlocks | 0\n this._maxSiblingBlocks = settings.maxSiblingBlocks | 0\n this._minChildBlocks = settings.minChildBlocks | 0\n this._maxChildBlocks = settings.maxChildBlocks | 0\n this._groupChildBlockTypes = settings.groupChildBlockTypes\n this._childBlocks = settings.childBlocks\n this._topLevel = settings.topLevel\n this._tabNames = settings.tabNames\n if (settings.tabs !== null) {\n this._tabs = settings.tabs.tabNames?.map(\n tab => tab instanceof Tab\n ? tab\n : new Tab({\n name: tab,\n uid: settings.tabs.tabUids[tab]\n })\n ) ?? []\n } else {\n this._tabs = null\n }\n this._html = settings.tabs?.html ?? ''\n this._js = settings.tabs?.js ?? ''\n this._defaultVisibleLayoutElements = settings.tabs?.visibleLayoutElements ?? {}\n this._hasChildBlocksUiElement = settings.hasChildBlocksUiElement\n this._creatableByUser = settings.creatableByUser\n this._deletableByUser = settings.deletableByUser\n this._editableByUser = settings.editableByUser\n },\n\n getType () { return 'blockType' },\n getId () { return this._id },\n getFieldLayoutId () { return this._fieldLayoutId },\n getSortOrder () { return this._sortOrder },\n getName () { return this._name },\n getHandle () { return this._handle },\n getDescription () { return this._description },\n getEnabled () { return this._enabled },\n getMinBlocks () { return this._minBlocks },\n getMaxBlocks () { return this._maxBlocks },\n getMinSiblingBlocks () { return this._minSiblingBlocks },\n getMaxSiblingBlocks () { return this._maxSiblingBlocks },\n getMinChildBlocks () { return this._minChildBlocks },\n getMaxChildBlocks () { return this._maxChildBlocks },\n getGroupChildBlockTypes () { return this._groupChildBlockTypes },\n getChildBlocks () { return this._childBlocks },\n getTopLevel () { return this._topLevel },\n getTabNames () { return this._tabNames },\n\n getTabs () { return this._tabs !== null ? Array.from(this._tabs) : null },\n async loadTabs () {\n if (this._tabs !== null) {\n return\n }\n\n const data = {\n namespace: NS.toFieldName(),\n blocks: [{\n collapsed: false,\n enabled: true,\n level: 1,\n type: this._id\n }]\n }\n const renderedBlocks = await Craft.sendActionRequest('POST', 'neo/input/render-blocks', { data })\n if (renderedBlocks.data.success) {\n const tabs = renderedBlocks.data.blocks[0].tabs\n this._tabs = tabs.tabNames?.map(\n tab => new Tab({\n name: tab,\n uid: tabs.tabUids[tab]\n })\n ) ?? []\n this._html = tabs.html\n this._js = tabs.js\n }\n },\n\n getHtml (blockId = null) {\n return this._replaceBlockIdPlaceholder(this._html, blockId)\n },\n\n getJs (blockId = null) {\n return this._replaceBlockIdPlaceholder(this._js, blockId)\n },\n\n getDefaultVisibleLayoutElements () {\n return {\n ...this._defaultVisibleLayoutElements\n }\n },\n\n _replaceBlockIdPlaceholder (input, blockId = null) {\n return blockId !== null ? input.replace(/__NEOBLOCK__/g, blockId) : input\n },\n\n getChildBlockItems (items) {\n const firstPass = items.filter(item => item.getType() === 'group' || this.hasChildBlock(item.getHandle()))\n return firstPass.filter((item, i) => {\n if (item.getType() === 'group') {\n const nextItem = firstPass[i + 1]\n return nextItem && nextItem.getType() !== 'group'\n }\n\n return true\n })\n },\n\n isParent () {\n const cb = this.getChildBlocks()\n return cb === true || cb === '*' || (Array.isArray(cb) && cb.length > 0)\n },\n\n hasChildBlock (handle) {\n const cb = this.getChildBlocks()\n return cb === true || cb === '*' || (Array.isArray(cb) && cb.includes(handle))\n },\n\n isValidChildBlock (block) {\n return this.hasChildBlock(block.getBlockType().getHandle())\n },\n\n hasChildBlocksUiElement () {\n return this._hasChildBlocksUiElement\n },\n\n isCreatableByUser () {\n return this._creatableByUser\n },\n\n isDeletableByUser () {\n return this._deletableByUser\n },\n\n isEditableByUser () {\n return this._editableByUser\n }\n})\n","import Garnish from 'garnish'\n\nconst _defaults = {\n id: -1,\n sortOrder: 0,\n alwaysShowDropdown: null,\n name: ''\n}\n\nexport default Garnish.Base.extend({\n\n init (settings = {}) {\n settings = Object.assign({}, _defaults, settings)\n\n this._id = settings.id | 0\n this._sortOrder = settings.sortOrder | 0\n this._alwaysShowDropdown = settings.alwaysShowDropdown\n this._name = settings.name\n },\n\n getType () { return 'group' },\n getId () { return this._id },\n getSortOrder () { return this._sortOrder },\n getName () { return this._name },\n getAlwaysShowDropdown () { return this._alwaysShowDropdown },\n isBlank () { return !this._name }\n})\n","import $ from 'jquery'\n\n// @see http://stackoverflow.com/a/12903503/556609\n$.fn.insertAt = function (index, $parent) {\n return this.each(function () {\n if (index === 0) {\n $parent.prepend(this)\n } else {\n $parent.children().eq(index - 1).after(this)\n }\n })\n}\n","import $ from 'jquery'\nimport '../jquery-extensions'\n\nimport Garnish from 'garnish'\nimport Craft from 'craft'\n\nimport NS from '../namespace'\nimport Tab from './BlockTypeTab'\n\nimport { addFieldLinks } from '../plugins/cpfieldinspect/main'\n\nconst _defaults = {\n namespace: [],\n blockType: null,\n tabs: null,\n id: null,\n level: 1,\n buttons: null,\n enabled: true,\n collapsed: false,\n modified: true,\n showButtons: true,\n showBlockTypeHandle: false\n}\n\nconst _resources = {}\n\nconst _escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '/': '/'\n}\n\nfunction _resourceFilter () {\n let url = this.href || this.src\n\n if (url) {\n const paramIndex = url.indexOf('?')\n\n url = (paramIndex < 0 ? url : url.substr(0, paramIndex))\n\n const isNew = !Object.prototype.hasOwnProperty.call(_resources, url)\n _resources[url] = 1\n\n return isNew\n }\n\n return true\n}\n\nfunction _escapeHTML (str) {\n return str ? str.replace(/[&<>\"'/]/g, s => _escapeMap[s]) : ''\n}\n\nfunction _limit (s, l = 40) {\n s = s || ''\n return s.length > l ? s.slice(0, l - 3) + '...' : s\n}\n\nexport default Garnish.Base.extend({\n\n _templateNs: [],\n _field: null,\n _blockType: null,\n _initialised: false,\n _expanded: true,\n _enabled: true,\n _modified: true,\n _initialState: null,\n _forceModified: false,\n _tabs: null,\n _html: null,\n _js: null,\n\n init (settings = {}, generateElement = false) {\n settings = Object.assign({}, _defaults, settings)\n\n this._templateNs = NS.parse(settings.namespace)\n this._field = settings.field\n this._blockType = settings.blockType\n if (settings.tabs !== null) {\n this._tabs = settings.tabs.tabNames?.map(\n tab => tab instanceof Tab\n ? tab\n : new Tab({\n name: tab,\n uid: settings.tabs.tabUids[tab]\n })\n ) ?? []\n } else {\n this._tabs = null\n }\n this._html = settings.tabs?.html ?? null\n this._js = settings.tabs?.js ?? null\n this._id = settings.id\n this._enabled = settings.enabled && this._blockType.getEnabled()\n this._initialEnabled = settings.enabled\n this._modified = settings.modified\n this._showButtons = settings.showButtons\n this._renderOldChildBlocksContainer = !settings.blockType.hasChildBlocksUiElement()\n this.$container = generateElement\n ? this._generateElement(settings.showBlockTypeHandle)\n : this._field.$container.find(`[data-neo-b-id=${this._id}]`)\n\n const $neo = this.$container.find('[data-neo-b]')\n this.$bodyContainer = $neo.filter(`[data-neo-b=\"${this._id}.container.body\"]`)\n this.$contentContainer = $neo.filter(`[data-neo-b=\"${this._id}.container.content\"]`)\n this.$topbarContainer = $neo.filter(`[data-neo-b=\"${this._id}.container.topbar\"]`)\n this.$topbarLeftContainer = $neo.filter(`[data-neo-b=\"${this._id}.container.topbarLeft\"]`)\n this.$topbarRightContainer = $neo.filter(`[data-neo-b=\"${this._id}.container.topbarRight\"]`)\n this.$handleContainer = $neo.filter(`[data-neo-b=\"${this._id}.container.handle\"]`)\n this.$tabContainer = this.$contentContainer.children('[data-layout-tab]')\n this.$menuContainer = $neo.filter(`[data-neo-b=\"${this._id}.container.menu\"]`)\n this.$previewContainer = $neo.filter(`[data-neo-b=\"${this._id}.container.preview\"]`)\n this.$settingsButton = $neo.filter(`[data-neo-b=\"${this._id}.button.actions\"]`)\n this.$togglerButton = $neo.filter(`[data-neo-b=\"${this._id}.button.toggler\"]`)\n this.$enabledInput = $neo.filter(`[data-neo-b=\"${this._id}.input.enabled\"]`)\n this.$levelInput = $neo.filter(`[data-neo-b=\"${this._id}.input.level\"]`)\n this.$collapsedInput = $neo.filter(`[data-neo-b=\"${this._id}.input.collapsed\"]`)\n this.$status = $neo.filter(`[data-neo-b=\"${this._id}.status\"]`)\n this.$sortOrder = $neo.filter(`[data-neo-b=\"${this._id}.sortOrder\"]`)\n this.$form = this.$container.closest('form')\n this.resetButtons(settings.buttons)\n\n let hasErrors = false\n if (this._blockType) {\n for (const tabName of this._blockType.getTabNames()) {\n const selector = `[data-neo-b-info=\"${tabName}\"]`\n\n if (this.$tabContainer.filter(selector).find('ul.errors').length > 0) {\n hasErrors = true\n this.$tabButton.filter(selector).addClass('error')\n }\n }\n }\n\n this.setLevel(settings.level)\n this.toggleExpansion(hasErrors ? true : !settings.collapsed, false, false)\n this.toggleShowButtons(this._showButtons)\n\n this.addListener(this.$topbarContainer, 'dblclick', '@doubleClickTitle')\n this.$container.data('block', this)\n },\n\n _generateElement (showHandle = false) {\n NS.enter(this._templateNs)\n const baseInputName = NS.toFieldName()\n const baseInputId = NS.toString('-')\n NS.leave()\n\n const type = this._blockType\n const tabs = this._tabs ?? type.getTabs()\n const hasTabs = tabs.length > 0\n const isParent = type.isParent()\n const actionBtnLabel = `${type.getName()} ${Craft.t('neo', 'Actions')}`\n const actionMenuId = `neoblock-action-menu-${this._id}`\n const tabsBtnLabel = `${type.getName()} ${Craft.t('neo', 'Tabs')}`\n const tabsMenuId = `neoblock-tabs-menu-${this._id}`\n const sortOrderName = `${this._templateNs[0]}[${this._templateNs.slice(1, this._templateNs.length - 2).join('][')}][sortOrder]`\n const elementHtml = []\n elementHtml.push(`\n
    \n \n \n \n `)\n\n if (isNaN(parseInt(this._id))) {\n elementHtml.push(`\n `)\n }\n\n elementHtml.push(`\n
    \n
    \n
    \n
    \n
    \n
    \n ${type.getName()}\n
    \n
    \n  \n
    \n
    \n
    \n
    `)\n\n if (hasTabs || isParent) {\n elementHtml.push(`\n
    `)\n }\n\n if (tabs.length > 1) {\n elementHtml.push(`\n
    `)\n\n for (let i = 0; i < tabs.length; i++) {\n const tab = tabs[i]\n const tabName = tab.getName()\n const tabUid = tab.getUid()\n elementHtml.push(`\n ${tabName}`)\n }\n\n elementHtml.push(`\n
    \n
    \n \n
    \n
      `)\n\n for (let i = 0; i < tabs.length; i++) {\n const tab = tabs[i]\n const tabName = tab.getName()\n const tabUid = tab.getUid()\n elementHtml.push(`\n
    • \n ${tabName}\n
    • `)\n }\n\n elementHtml.push(`\n
    \n
    \n
    `)\n }\n\n elementHtml.push(`\n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n \n
    \n `)\n\n if (type.isDeletableByUser()) {\n elementHtml.push(`\n
    \n `)\n }\n\n elementHtml.push(`\n
    \n
    \n
    \n
    \n \n
    \n
    \n
    `)\n\n if (hasTabs || isParent) {\n elementHtml.push(`\n
    `)\n\n if (hasTabs) {\n elementHtml.push(`\n
    \n ${this.getHtml()}\n
    `)\n }\n\n if (isParent && this._renderOldChildBlocksContainer) {\n elementHtml.push(`\n
    \n
    \n
    \n
    \n
    \n

    ${Craft.t('neo', \"This Neo field's maximum number of levels has been reached, so no child blocks can be added here.\")}

    \n
    \n
    `)\n }\n\n elementHtml.push(`\n
    `)\n }\n\n if (isParent) {\n elementHtml.push(`\n
    `)\n }\n\n elementHtml.push(`\n
    `)\n\n const $elementHtml = $(elementHtml.join(''))\n\n if (showHandle) {\n $('
    ')\n .addClass('ni_block_topbar_item handle')\n .prop('data-neo-b', `${this._id}.container.handle`)\n .append(Craft.ui.createCopyTextBtn({\n id: `${baseInputId}-${type.getHandle()}-attribute`,\n class: ['code', 'small', 'light'],\n value: type.getHandle()\n }))\n .insertAfter($elementHtml.find('.ni_block_topbar_item.title'))\n }\n\n return $elementHtml\n },\n\n initUi (callInitUiElements = true) {\n if (this._initialised) {\n // Nothing to do here\n return\n }\n\n this.$foot = $(this.getJs()).filter(_resourceFilter)\n Garnish.$bod.append(this.$foot)\n\n if (callInitUiElements) {\n Craft.initUiElements(this.$contentContainer)\n }\n\n this.$form = this.$container.closest('form')\n this.initTabs()\n\n this._settingsMenu = this.$settingsButton.data('trigger') || new Garnish.DisclosureMenu(this.$settingsButton)\n this._settingsMenu.on('show', () => {\n // Make sure all other blocks in the field have their settings menus closed\n this._field\n .getBlocks()\n .filter((block) => block.$container.hasClass('active'))\n .forEach((block) => block.toggleSettingsMenu(false))\n this.$container.addClass('active')\n })\n this._settingsMenu.on('hide', () => this.$container.removeClass('active'))\n\n this.$menuContainer = this._settingsMenu.$container\n this.addListener(this.$menuContainer.find('[data-action]'), 'click', this._handleActionClick)\n this.addListener(this.$menuContainer.find('[data-action]'), 'keydown', this._handleActionKeydown)\n\n this.toggleEnabled(this._initialEnabled)\n\n this._initialised = true\n this._buttons?.initUi()\n\n Garnish.requestAnimationFrame(() => this.updateResponsiveness())\n\n // For Matrix blocks inside a Neo block, this listener adds a class name to the block for Neo to style.\n // Neo applies its own styles to Matrix blocks in an effort to improve the visibility of them, however\n // when dragging a Matrix block these styles get lost (since a dragged Matrix block loses its context of\n // being inside a Neo block). Adding this class name to blocks before they are dragged means that the\n // dragged Matrix block can still have the Neo-specific styles.\n this.$container.on('mousedown', '.matrixblock', function (e) {\n $(this).addClass('neo-matrixblock')\n })\n\n // If this block has errors and is nested somewhere in a child blocks UI element, set errors on ancestors' tabs\n if (this.$container.hasClass('has-errors')) {\n this.$container.parents('.ni_child-blocks-ui-element').each((_, cbuiElement) => {\n const $tabContent = $(cbuiElement).parent()\n const parentBlock = $tabContent.closest('.ni_block').data('block')\n const tabIndex = $tabContent.index()\n parentBlock.$tabButton.filter('.tab').eq(tabIndex) // Desktop tab buttons\n .add(parentBlock.$tabButton.filter(':not(.tab)').eq(tabIndex)) // Mobile tab buttons\n .add(parentBlock.$container.find('> .ni_block_topbar .tabs_btn')) // Mobile tab dropdown button\n .addClass('has-errors')\n .append(``)\n })\n }\n\n // Setting up field and block property watching\n if (!this.isNew()) {\n this._initialState = {\n enabled: this._enabled,\n level: this._level,\n content: this._getPostData()\n }\n\n const detectChange = () => this._detectChange()\n const observer = new window.MutationObserver(() => {\n setTimeout(detectChange, 200)\n\n // Ensure blocks that are supposed to be non-editable by the user remain so\n if (!this.getBlockType().isEditableByUser() && !this.$container.hasClass('is-disabled-for-user')) {\n this.$container.addClass('is-disabled-for-user')\n }\n })\n\n observer.observe(this.$container[0], {\n attributes: true,\n childList: true,\n characterData: true,\n subtree: true\n })\n\n this.$contentContainer.on('propertychange change click', 'input, textarea, select, div.redactor-in', detectChange)\n this.$contentContainer.on('paste input keyup', 'input:not([type=\"hidden\"]), textarea, div.redactor-in', detectChange)\n\n this._detectChangeObserver = observer\n\n // Hide the copy/paste/clone options if the block type is disabled\n this.$menuContainer\n .find('[data-action=\"copy\"], [data-action=\"paste\"], [data-action=\"duplicate\"]')\n .parent()\n .toggleClass('hidden', !this._blockType.getEnabled())\n }\n\n addFieldLinks(this.$contentContainer)\n\n this.trigger('initUi')\n },\n\n /**\n * @public\n * @since 3.7.0\n */\n initTabs () {\n const $neo = this.$container.find('[data-neo-b]')\n this.$tabsButton = $neo.filter(`[data-neo-b=\"${this._id}.button.tabs\"]`)\n this.$tabsContainer = $neo.filter(`[data-neo-b=\"${this._id}.container.tabs\"]`)\n this.$tabButton = $neo.filter(`[data-neo-b=\"${this._id}.button.tab\"]`)\n this.$tabContainer = this.$contentContainer.children('[data-layout-tab]')\n\n this._tabsMenu = this.$tabsButton.data('trigger') || new Garnish.DisclosureMenu(this.$tabsButton)\n this._tabsMenu.on('show', () => this.$container.addClass('active'))\n this._tabsMenu.on('hide', () => this.$container.removeClass('active'))\n\n this.$tabButton = this.$tabButton.add(this._tabsMenu.$container.find(`[data-neo-b=\"${this._id}.button.tab\"]`))\n this.addListener(this.$tabButton, 'click', this['@setTab'])\n this.addListener(this.$tabButton, 'keydown', this._handleTabKeydown)\n },\n\n /**\n * @since 3.9.0\n */\n getHtml () {\n return this._html !== null\n ? this._html.replace(/__NEOBLOCK__/g, this._id)\n : this._blockType.getHtml(this._id)\n },\n\n /**\n * @since 3.9.0\n */\n getJs () {\n return this._js !== null\n ? this._js.replace(/__NEOBLOCK__/g, this._id)\n : this._blockType.getJs(this._id)\n },\n\n destroy () {\n if (this._initialised) {\n this.$foot.remove()\n\n clearInterval(this._detectChangeInterval)\n\n if (this._detectChangeObserver) {\n this._detectChangeObserver.disconnect()\n }\n\n this.trigger('destroy')\n }\n },\n\n getBlockType () {\n return this._blockType\n },\n\n getId () {\n return this._id\n },\n\n /**\n * @public\n * @returns the ID of the duplicate block, or the ID of this block if it hasn't been duplicated\n * @since 3.7.0\n */\n getDuplicatedBlockId () {\n return this.$form.data('elementEditor')?.duplicatedElements[this._id] ?? this._id\n },\n\n isTopLevel () {\n return this._level === 1\n },\n\n getLevel () {\n return this._level\n },\n\n setLevel (level) {\n this._level = level | 0\n\n this.$levelInput.val(`0${this._level}`)\n this.$container.toggleClass('is-level-odd', !!(this._level % 2))\n this.$container.toggleClass('is-level-even', !(this._level % 2))\n },\n\n setModified (isModified) {\n this._modified = isModified\n },\n\n getButtons () {\n return this._buttons\n },\n\n getSiteId () {\n if (!this._siteId) {\n const $siteId = this.$form.find('input[name=\"siteId\"]')\n this._siteId = $siteId.val()\n }\n\n return this._siteId\n },\n\n getContent () {\n const rawContent = this._getPostData()\n const content = {}\n\n const setValue = (keys, value) => {\n let currentSet = content\n\n for (let i = 0; i < keys.length - 1; i++) {\n const key = keys[i]\n\n if (!$.isPlainObject(currentSet[key]) && !Array.isArray(currentSet[key])) {\n currentSet[key] = {}\n }\n\n currentSet = currentSet[key]\n }\n\n const key = keys[keys.length - 1]\n currentSet[key] = value\n }\n\n for (const rawName of Object.keys(rawContent)) {\n const fullName = NS.parse(rawName)\n const name = fullName.slice(this._templateNs.length + 1) // Adding 1 because content is NS'd under [fields]\n\n // Make sure empty arrays (which can happen with level, enabled, etc. when using the child blocks UI element) are ignored\n if (!name.length) {\n continue\n }\n\n const value = rawContent[rawName]\n\n setValue(name, value)\n }\n\n return content\n },\n\n getParent (blocks = null) {\n blocks ??= this._field.getBlocks()\n const level = this.getLevel()\n let index = blocks.indexOf(this)\n let blockParent = null\n\n if (index >= 0 && level > 1) {\n while (blockParent === null && index > 0) {\n const currentBlock = blocks[--index]\n const currentLevel = currentBlock.getLevel()\n\n if (currentLevel === level - 1) {\n blockParent = currentBlock\n }\n }\n }\n\n return blockParent\n },\n\n getChildren (blocks = null, descendants = null) {\n blocks ??= this._field.getBlocks()\n const level = this.getLevel()\n let index = blocks.indexOf(this)\n const childBlocks = []\n\n if (index >= 0) {\n let currentBlock = blocks[++index]\n\n while (currentBlock && currentBlock.getLevel() > level) {\n const currentLevel = currentBlock.getLevel()\n\n if (descendants ? currentLevel > level : currentLevel === level + 1) {\n childBlocks.push(currentBlock)\n }\n\n currentBlock = blocks[++index]\n }\n }\n\n return childBlocks\n },\n\n getSiblings (blocks = null) {\n blocks ??= this._field.getBlocks()\n\n return this.isTopLevel() ? blocks.filter(b => b.isTopLevel()) : this.getParent(blocks).getChildren(blocks)\n },\n\n getField () {\n return this._field\n },\n\n updatePreview (condensed = null) {\n condensed = typeof condensed === 'boolean' ? condensed : false\n\n const $childFields = this.$childrenContainer.find('.field')\n const $fields = this.$contentContainer.find('.field').add($childFields)\n const previewText = []\n\n $fields.each(function () {\n const $field = $(this)\n const $input = $field.children('.input')\n const fieldType = $field.data('type')\n const label = $field.children('.heading').children('label').text()\n\n // We rely on knowing the field type to know how to generate its preview, so if we don't know, skip it.\n if (fieldType === null) {\n return\n }\n\n let value = false\n\n switch (fieldType) {\n case 'craft\\\\fields\\\\Assets':\n {\n const values = []\n const $assets = $input.find('.element')\n\n $assets.each(function () {\n const $asset = $(this)\n const $thumbContainer = $asset.find('.elementthumb')\n const $thumb = $thumbContainer.children('img')\n let srcset = $thumb.prop('srcset')\n\n if (!srcset) {\n srcset = $thumbContainer.data('srcset')\n }\n\n values.push(``)\n\n if (!condensed && $assets.length === 1) {\n const title = $asset.find('.title').text()\n\n values.push(_escapeHTML(_limit(title)))\n }\n })\n\n value = values.join(' ')\n }\n break\n case 'craft\\\\fields\\\\Categories':\n case 'craft\\\\fields\\\\Entries':\n case 'craft\\\\fields\\\\Tags':\n case 'craft\\\\fields\\\\Users':\n {\n const values = []\n\n $input.find('.element').each(function () {\n const title = $(this).find('.title, .label').eq(0).text()\n values.push(_escapeHTML(_limit(title)))\n })\n\n value = values.join(', ')\n }\n break\n case 'craft\\\\fields\\\\Checkboxes':\n {\n const values = []\n\n $input.find('input[type=\"checkbox\"]').each(function () {\n if (this.checked) {\n const id = $(this).prop('id')\n const label = $input.find(`label[for=\"${id}\"]`).text()\n values.push(_escapeHTML(_limit(label)))\n }\n })\n\n value = values.join(', ')\n }\n break\n case 'craft\\\\fields\\\\Color':\n {\n const color = $input.find('input[type=\"color\"]').val()\n const colorText = $input.find('input[type=\"text\"]').val()\n const colorRev = $input.find('div.colorhex').text()\n let background = null\n\n if (color && colorText) {\n // Set the selected color. `colorText` must also be checked, even though it's not used, because\n // the color type field may still store a color value even if the text field has been cleared.\n background = `background-color: ${color}`\n } else if (!color && colorText) {\n // When a block is initially collapsed, the color type field will not have been set, so the text\n // field value will need to be used.\n background = `background-color: ${colorText}`\n } else if (colorRev) {\n // Entry revisions will hav a div rather than an input, so use that.\n background = `background-color: ${colorRev}`\n } else {\n // No color value has been set for the field.\n background = 'background-image: repeating-linear-gradient(-45deg, transparent, transparent 2px, #777 2px, #777 3px)'\n }\n\n value = `
    `\n }\n break\n case 'craft\\\\fields\\\\Date':\n {\n const date = _escapeHTML($input.find('.datewrapper input').val())\n const time = _escapeHTML($input.find('.timewrapper input').val())\n\n value = date && time ? (date + ' ' + time) : (date || time)\n }\n break\n case 'craft\\\\fields\\\\Dropdown':\n {\n const $selected = $input.find('select').children(':selected')\n\n value = _escapeHTML(_limit($selected.text()))\n }\n break\n case 'craft\\\\fields\\\\Email':\n value = _escapeHTML(_limit($input.children('input[type=\"email\"]').val()))\n break\n case 'craft\\\\fields\\\\Lightswitch':\n {\n const enabled = !!$input.find('input').val()\n\n value = `` + _escapeHTML(_limit(label))\n }\n break\n case 'craft\\\\fields\\\\MultiSelect':\n case 'ttempleton\\\\categorygroupsfield\\\\fields\\\\CategoryGroupsField':\n {\n const values = []\n const $selected = $input.find('select').children(':selected')\n\n $selected.each(function () {\n values.push($(this).text())\n })\n\n value = _escapeHTML(_limit(values.join(', ')))\n }\n break\n case 'craft\\\\fields\\\\Number':\n case 'craft\\\\fields\\\\PlainText':\n value = _escapeHTML(_limit($input.children('input[type=\"text\"], textarea').val()))\n break\n case 'craft\\\\fields\\\\RadioButtons':\n {\n const $checked = $input.find('input[type=\"radio\"]:checked')\n const label = $checked.closest('label').text()\n\n value = _escapeHTML(_limit(label))\n }\n break\n case 'craft\\\\redactor\\\\Field':\n case 'spicyweb\\\\tinymce\\\\fields\\\\TinyMCE':\n value = _escapeHTML(_limit(Craft.getText($input.find('textarea').val())))\n break\n case 'craft\\\\ckeditor\\\\Field':\n value = _escapeHTML(_limit(Craft.getText($input.find('[role=\"textbox\"]').html())))\n break\n case 'craft\\\\fields\\\\Url':\n value = _escapeHTML(_limit($input.children('input[type=\"url\"]').val()))\n break\n case 'craft\\\\fields\\\\Matrix':\n case 'verbb\\\\supertable\\\\fields\\\\SuperTableField':\n {\n const $subFields = $field.find('.field')\n const $subInputs = $subFields.find('input[type!=\"hidden\"], select, textarea, .label')\n\n const values = []\n\n $subInputs.each(function () {\n const $subInput = $(this)\n let subValue = null\n\n if ($subInput.is('input, textarea')) {\n subValue = Craft.getText(Garnish.getInputPostVal($subInput))\n } else if ($subInput.is('select')) {\n subValue = $subInput.find('option:selected').text()\n } else if ($subInput.hasClass('label')) {\n // TODO check for lightswitch maybe?\n subValue = $subInput.text()\n }\n\n if (subValue) {\n values.push(_limit(subValue))\n }\n })\n\n value = _escapeHTML(values.join(', '))\n }\n break\n case 'typedlinkfield\\\\fields\\\\LinkField':\n case 'presseddigital\\\\linkit\\\\fields\\\\LinkitField':\n {\n const values = []\n const $selectedType = $input.find('select').children(':selected').first()\n const $visibleOption = $input.find('.linkfield--typeOption:not(.hidden), [class^=\"linkit--\"]:not(.hidden)')\n const visibleInputVal = $visibleOption.find('input[type!=\"hidden\"]').val()\n const $visibleElement = $visibleOption.find('.element')\n const customText = $input.find('.field[id*=\"customText\"] input, .linkit--customText input').val()\n\n values.push(_limit($selectedType.text()))\n\n if (visibleInputVal) {\n values.push(_limit(visibleInputVal))\n }\n\n if ($visibleElement.length > 0) {\n const title = $visibleElement.find('.title, .label').eq(0).text()\n\n values.push(_limit(title))\n }\n\n if (customText) {\n values.push(_limit(customText))\n }\n\n value = _escapeHTML(values.join(', '))\n }\n break\n case 'luwes\\\\codemirror\\\\fields\\\\CodeMirrorField':\n {\n const lines = []\n\n $field.find('.CodeMirror-line > span').each(function () {\n lines.push($(this).text())\n })\n\n value = _escapeHTML(lines.join(' '))\n break\n }\n case 'rias\\\\positionfieldtype\\\\fields\\\\Position':\n {\n const $selected = $input.find('.btn.active')\n\n value = _escapeHTML($selected.prop('title'))\n break\n }\n case 'wrav\\\\oembed\\\\fields\\\\OembedField':\n value = _escapeHTML(_limit($input.children('input').val()))\n }\n\n if (value && previewText.length < 10) {\n previewText.push('', value, '')\n }\n })\n\n this.$previewContainer.html(previewText.join(''))\n },\n\n isNew () {\n return /^new/.test(this.getId())\n },\n\n isSelected () {\n return this.$container.hasClass('is-selected')\n },\n\n collapse (save, animate) {\n this.toggleExpansion(false, save, animate)\n },\n\n expand (save, animate) {\n this.toggleExpansion(true, save, animate)\n },\n\n toggleExpansion (expand, save, animate) {\n expand = typeof expand === 'boolean' ? expand : !this._expanded\n save = typeof save === 'boolean' ? save : true\n animate = !Garnish.prefersReducedMotion() && (typeof animate === 'boolean' ? animate : true)\n\n if (expand !== this._expanded) {\n this._expanded = expand\n\n if (!this._expanded) {\n this.updatePreview()\n }\n\n const expandContainer = this.$menuContainer.find('[data-action=\"expand\"]').parent()\n const collapseContainer = this.$menuContainer.find('[data-action=\"collapse\"]').parent()\n\n this.$collapsedInput.val(!this._expanded ? '1' : '')\n this.$container\n .toggleClass('is-expanded', this._expanded)\n .toggleClass('is-collapsed', !this._expanded)\n\n expandContainer.toggleClass('hidden', this._expanded)\n collapseContainer.toggleClass('hidden', !this._expanded)\n this.$previewContainer.toggleClass('hidden', this._expanded)\n\n const contentHeight = this.$contentContainer.outerHeight() | 0\n const childrenHeight = this.$childrenContainer.outerHeight() | 0\n\n const expandedCss = {\n opacity: 1,\n height: contentHeight + childrenHeight\n }\n const collapsedCss = {\n opacity: 0,\n height: 0\n }\n const clearCss = {\n opacity: '',\n height: ''\n }\n\n if (animate) {\n this.$bodyContainer\n .css(this._expanded ? collapsedCss : expandedCss)\n .velocity(this._expanded ? expandedCss : collapsedCss, 'fast', e => {\n if (this._expanded) {\n this.$bodyContainer.css(clearCss)\n }\n })\n } else {\n this.$bodyContainer.css(this._expanded ? clearCss : collapsedCss)\n }\n\n if (save) {\n this.saveExpansion()\n }\n\n this.trigger('toggleExpansion', {\n expanded: this._expanded\n })\n }\n },\n\n isExpanded () {\n return this._expanded\n },\n\n saveExpansion () {\n if (!this.isNew()) {\n // Use the duplicated block ID if we're on a new provisional draft\n // The server-side code will also apply the new state to the canonical block\n const sentBlockId = this.$form.data('elementEditor')?.settings.isProvisionalDraft\n ? this.getDuplicatedBlockId()\n : this.getId()\n const data = {\n expanded: this.isExpanded() ? 1 : 0,\n blockId: sentBlockId,\n siteId: this.getSiteId()\n }\n\n Craft.queue.push(() => new Promise((resolve, reject) => {\n Craft.sendActionRequest('POST', 'neo/input/save-expansion', { data }).then(resolve).catch(reject)\n }))\n }\n },\n\n disable () {\n this.toggleEnabled(false)\n },\n\n enable () {\n this.toggleEnabled(true)\n },\n\n toggleEnabled (enable = !this._enabled) {\n const triggerEvent = this._enabled !== enable\n this._enabled = enable\n\n const blockTypeEnabled = this._blockType.getEnabled()\n const actuallyEnabled = this._enabled && blockTypeEnabled\n const enableContainer = this.$menuContainer.find('[data-action=\"enable\"]').parent()\n const disableContainer = this.$menuContainer.find('[data-action=\"disable\"]').parent()\n\n this.$container\n .toggleClass('is-enabled', actuallyEnabled)\n .toggleClass('is-disabled', !actuallyEnabled)\n\n this.$status.toggleClass('hidden', actuallyEnabled)\n\n enableContainer.toggleClass('hidden', this._enabled || !blockTypeEnabled)\n disableContainer.toggleClass('hidden', !this._enabled || !blockTypeEnabled)\n\n this.$enabledInput.val(this._enabled ? '1' : '')\n\n if (triggerEvent) {\n this.trigger('toggleEnabled', {\n enabled: this._enabled\n })\n }\n },\n\n isEnabled () {\n return this._enabled\n },\n\n toggleShowButtons (show = !this._showButtons) {\n this.$buttonsContainer.toggleClass('hidden', !show)\n this.$childrenWarningsContainer.toggleClass('hidden', show)\n },\n\n selectTab (tabName) {\n this.$tabButton.removeClass('is-selected')\n this.$tabContainer.addClass('hidden')\n const $tabButton = this.$tabButton.filter(`[data-neo-b-info=\"${tabName}\"]`).addClass('is-selected')\n const tabUid = $tabButton.attr('data-neo-b-tabuid')\n const $tabContainer = this.$tabContainer\n .filter(`[data-layout-tab=\"${tabUid}\"]`)\n .removeClass('hidden')\n this.$tabsButton.text(tabName)\n Craft.ElementThumbLoader.retryAll()\n\n this.trigger('selectTab', { tabName, $tabButton, $tabContainer })\n },\n\n updateResponsiveness () {\n const isMobileBrowser = Garnish.isMobileBrowser()\n this._topbarLeftWidth ??= this.$topbarLeftContainer.width() -\n (this._expanded ? 0 : this.$previewContainer.width()) -\n (isMobileBrowser ? this.$handleContainer.width() : 0)\n this._topbarRightWidth ??= this.$topbarRightContainer.width()\n const hasRoomForIndividualTabs = this.$topbarContainer.width() < this._topbarLeftWidth + this._topbarRightWidth\n\n this.$handleContainer.toggleClass('hidden', isMobileBrowser)\n this.$tabsContainer.toggleClass('invisible', hasRoomForIndividualTabs)\n this.$tabsButton.toggleClass('invisible', !hasRoomForIndividualTabs)\n },\n\n updateActionsMenu () {\n const blocks = this._field.getBlocks()\n const parentBlockType = this.getParent()?.getBlockType()\n let allowedBlockTypes = parentBlockType?.getChildBlocks() ?? this._field.getBlockTypes(true)\n\n if (allowedBlockTypes === true || allowedBlockTypes === '*') {\n allowedBlockTypes = this._field.getBlockTypes(false)\n } else if (Array.isArray(allowedBlockTypes)) {\n allowedBlockTypes = allowedBlockTypes\n .map(bt => typeof bt === 'string' ? this._field.getBlockTypeByHandle(bt) : bt)\n // In case any otherwise valid block types are being filtered out by the event or conditions\n .filter(bt => typeof bt !== 'undefined')\n }\n\n // Finally, only allow block types that are allowed to be created by the current user\n // This is safe since allowedBlockTypes is only used to check if paste/add block actions should be disabled\n allowedBlockTypes = allowedBlockTypes.filter((bt) => bt.isCreatableByUser())\n\n this.updateMenuStates(\n this._field.getName(),\n blocks,\n this._field.getMaxBlocks(),\n true,\n allowedBlockTypes,\n this._level === 1 ? this._field.getMaxTopBlocks() : 0\n )\n },\n\n // Deprecated in 3.0.4; use `updateActionsMenu()` instead\n updateMenuStates (field, blocks = [], maxBlocks = 0, additionalCheck = null, allowedBlockTypes = false, maxTopBlocks = 0) {\n additionalCheck = typeof additionalCheck === 'boolean' ? additionalCheck : true\n const noAllowedBlockTypes = !allowedBlockTypes || allowedBlockTypes.length === 0\n\n const blockType = this.getBlockType()\n const blocksOfType = blocks.filter(b => b.getBlockType().getHandle() === blockType.getHandle())\n const maxBlockTypes = blockType.getMaxBlocks()\n const siblingBlocks = this.getSiblings(blocks)\n\n const totalTopBlocks = blocks.filter(block => block.isTopLevel()).length\n\n const maxBlocksMet = maxBlocks > 0 && blocks.length >= maxBlocks\n const maxTopBlocksMet = maxTopBlocks > 0 && totalTopBlocks >= maxTopBlocks\n\n const allDisabled = maxBlocksMet || maxTopBlocksMet || !additionalCheck\n const addDisabled = allDisabled || noAllowedBlockTypes\n const typeDisabled = maxBlockTypes > 0 && blocksOfType.length >= maxBlockTypes\n let cloneDisabled = allDisabled || typeDisabled\n\n const pasteData = JSON.parse(window.localStorage.getItem(`neo:copy:${field}`) || '{}')\n let pasteDisabled = allDisabled || !pasteData.blocks || !pasteData.field || pasteData.field !== field\n\n // Test to see if pasting/cloning would exceed the parent's max child blocks\n const parentBlock = this.getParent(blocks)\n if ((!pasteDisabled || !cloneDisabled) && parentBlock) {\n const maxChildBlocks = parentBlock.getBlockType().getMaxChildBlocks()\n\n if (maxChildBlocks > 0) {\n const childBlockCount = parentBlock.getChildren(blocks).length\n const pasteBlockCount = pasteData.blocks?.length ?? 0\n pasteDisabled ||= childBlockCount + pasteBlockCount > maxChildBlocks\n cloneDisabled ||= childBlockCount >= maxChildBlocks\n }\n }\n\n // Test to see if pasting would exceed this block's max sibling blocks\n if (!(pasteDisabled && cloneDisabled)) {\n const maxSiblingBlocks = this.getBlockType().getMaxSiblingBlocks()\n\n if (maxSiblingBlocks > 0) {\n const hasSameBlockType = block => {\n if (Object.prototype.hasOwnProperty.call(block, 'type')) {\n return block.type === this.getBlockType().getId()\n } else if (typeof block.getBlockType === 'function') {\n return block.getBlockType().getHandle() === this.getBlockType().getHandle()\n }\n\n return false\n }\n\n const siblingBlockCount = siblingBlocks.filter(hasSameBlockType, this).length\n const pasteSiblingBlockCount = pasteData.blocks ? pasteData.blocks.filter(hasSameBlockType, this).length : 0\n pasteDisabled ||= siblingBlockCount + pasteSiblingBlockCount > maxSiblingBlocks\n cloneDisabled ||= siblingBlockCount >= maxSiblingBlocks\n }\n }\n\n if (!pasteDisabled) {\n const currentBlockTypesById = blocks.reduce((m, b) => {\n const bt = b.getBlockType()\n const id = bt.getId()\n const v = m[id] || { blockType: bt, count: 0 }\n\n v.count++\n m[id] = v\n\n return m\n })\n\n for (const pasteBlock of pasteData.blocks) {\n const pasteBlockTypeObj = currentBlockTypesById[pasteBlock.type]\n\n // Test to see if any max block types properties will be violated\n if (pasteBlockTypeObj) {\n const pasteBlockType = pasteBlockTypeObj.blockType\n const currentBlocksOfTypeCount = pasteBlockTypeObj.count\n const maxPasteBlockTypes = pasteBlockType.getMaxBlocks()\n const pasteTypeDisabled = maxPasteBlockTypes > 0 && currentBlocksOfTypeCount >= maxPasteBlockTypes\n\n pasteDisabled ||= pasteTypeDisabled\n }\n\n // Test to see if the top level paste blocks have a block type that is allowed to be pasted here\n if (pasteBlock.level === 1) {\n pasteDisabled ||= !allowedBlockTypes.find(bt => bt.getId() === pasteBlock.type)\n }\n }\n }\n\n const siblingIndex = siblingBlocks.indexOf(this)\n const disableMoveUp = siblingIndex <= 0\n const disableMoveDown = [-1, siblingBlocks.length - 1].includes(siblingIndex)\n\n this.$menuContainer.find('[data-action=\"moveUp\"]').parent().toggleClass('hidden', disableMoveUp)\n this.$menuContainer.find('[data-action=\"moveDown\"]').parent().toggleClass('hidden', disableMoveDown)\n this.$menuContainer.find('[data-action=\"duplicate\"]').toggleClass('disabled', cloneDisabled)\n\n // Paste/add actions should be hidden if there is no chance of them being enabled later\n if (noAllowedBlockTypes) {\n this.$menuContainer.find('[data-action=\"add\"]').parent().toggleClass('hidden', addDisabled)\n this.$menuContainer.find('[data-action=\"paste\"]').parent().toggleClass('hidden', pasteDisabled)\n } else {\n this.$menuContainer.find('[data-action=\"add\"]').toggleClass('disabled', addDisabled)\n this.$menuContainer.find('[data-action=\"paste\"]').toggleClass('disabled', pasteDisabled)\n }\n\n // If there are no visible items in the second list, hide the separator as well\n this.$menuContainer.children('hr').toggleClass(\n 'hidden',\n this.$menuContainer.children('ul:last-child').children('li:not(.hidden)').length === 0\n )\n },\n\n resetButtons (settings) {\n this.$blocksContainer = this.$container.find(`[data-neo-b=\"${this._id}.container.blocks\"]`)\n this.$buttonsContainer = this.$container.find(`[data-neo-b=\"${this._id}.container.buttons\"]`)\n this.$childrenContainer = this.$container.find(`[data-neo-b=\"${this._id}.container.children\"]`)\n this.$childrenWarningsContainer = this.$container.find(`[data-neo-b=\"${this._id}.container.childrenWarnings\"]`)\n this.$collapsedChildrenContainer = this.$container.find(`[data-neo-b=\"${this._id}.container.collapsedChildren\"]`)\n\n if (typeof settings !== 'undefined' && settings !== null) {\n this._buttons = settings\n } else {\n this._buttons = new this._field.ButtonClass({\n $ownerContainer: this.$container,\n field: this._field,\n items: this._blockType.getChildBlockItems(this._field.getItems()),\n maxBlocks: this._field.getMaxBlocks()\n })\n }\n\n if (this._buttons) {\n this._buttons.on('newBlock', e => this.trigger('newBlock', Object.assign(e, { level: this.getLevel() + 1 })))\n this.$buttonsContainer.append(this._buttons.$container)\n\n if (this._buttons.$ownerContainer === null) {\n this._buttons.$ownerContainer = this.$container\n }\n\n if (this._initialised) {\n this._buttons.initUi()\n }\n }\n },\n\n namespaceId (id) {\n NS.enter(this._templateNs)\n const namespacedId = `${NS.toString('-')}-${Craft.formatInputId(id)}`\n NS.leave()\n return namespacedId\n },\n\n toggleSettingsMenu (toggle) {\n toggle ??= !this._settingsMenu.isExpanded()\n if (toggle) {\n this._settingsMenu.show()\n } else {\n this._settingsMenu.hide()\n }\n },\n\n _handleActionClick (e) {\n e.preventDefault()\n this['@settingSelect'](e)\n },\n\n _handleActionKeydown (e) {\n if (e.keyCode === Garnish.SPACE_KEY) {\n e.preventDefault()\n this['@settingSelect'](e)\n }\n },\n\n _handleTabKeydown (e) {\n if (e.keyCode === Garnish.SPACE_KEY) {\n this['@setTab'](e)\n }\n },\n\n _detectChange () {\n // When editing a draft and autosave is enabled, we need to force modified to be set, or\n // returning the block to its original values will cause it not to be resaved.\n const elementEditor = this.$form.data('elementEditor')\n\n if (elementEditor?.enableAutosave && elementEditor.settings.draftId) {\n this.setModified(true)\n this._forceModified = true\n }\n\n if (!this._forceModified) {\n const initial = this._initialState\n const content = this._getPostData()\n\n const modified = !Craft.compare(content, initial.content, false) ||\n initial.enabled !== this._enabled ||\n initial.level !== this._level\n\n if (modified !== this._modified) {\n this.setModified(modified)\n }\n }\n\n this.trigger('change')\n },\n\n _getPostData () {\n const content = Garnish.getPostData(this.$contentContainer)\n // Remove keys associated with child block subfields (occurs when using child blocks UI element)\n const badKeys = Object.keys(content)\n .filter((key) => !key.startsWith(`fields[${this._field.getName()}][blocks][${this._id}]`))\n\n for (const key of badKeys) {\n delete content[key]\n }\n\n return content\n },\n\n '@settingSelect' (e) {\n this._settingsMenu.hide()\n const $option = $(e.target)\n\n if (!$option.hasClass('disabled')) {\n switch ($option.attr('data-action')) {\n case 'collapse':\n this.collapse()\n break\n case 'expand':\n this.expand()\n break\n case 'disable':\n this.disable()\n this.collapse()\n break\n case 'enable':\n this.enable()\n this.expand()\n break\n case 'moveUp':\n this.trigger('moveUpBlock', { block: this })\n break\n case 'moveDown':\n this.trigger('moveDownBlock', { block: this })\n break\n case 'delete':\n this.trigger('removeBlock', { block: this })\n break\n case 'add':\n this.trigger('addBlockAbove', { block: this })\n break\n case 'copy':\n this.trigger('copyBlock', { block: this })\n break\n case 'paste':\n this.trigger('pasteBlock', { block: this })\n break\n case 'duplicate':\n this.trigger('duplicateBlock', { block: this })\n break\n }\n }\n },\n\n '@doubleClickTitle' (e) {\n e.preventDefault()\n\n const $target = $(e.target)\n const $checkFrom = $target.parent()\n const isLeft = $checkFrom.closest(this.$topbarLeftContainer).length > 0\n const isRight = $checkFrom.closest(this.$topbarRightContainer).length > 0\n\n if (!isLeft && !isRight) {\n this.$form.data('elementEditor')?.pause()\n this.toggleExpansion()\n this.$form.data('elementEditor')?.resume()\n }\n },\n\n '@setTab' (e) {\n e.preventDefault()\n this._tabsMenu.hide()\n\n const $tab = $(e.currentTarget)\n const tabName = $tab.attr('data-neo-b-info')\n\n this.selectTab(tabName)\n }\n},\n{\n _totalNewBlocks: 0,\n\n /**\n * @deprecated in 3.9.0\n */\n getNewId () {\n return `new${this._totalNewBlocks++}`\n }\n})\n","import Craft from 'craft'\n\nexport function addFieldLinks ($element) {\n if (Craft.CpFieldInspectPlugin) {\n Craft.CpFieldInspectPlugin.addFieldLinks()\n }\n}\n","import $ from 'jquery'\nimport Craft from 'craft'\nimport Garnish from 'garnish'\n\nconst _defaults = {\n $ownerContainer: null,\n blockTypes: [],\n groups: [],\n items: null,\n maxBlocks: 0,\n maxTopBlocks: 0,\n blocks: null\n}\n\nclass NewBlockMenu {\n static BUTTON_INFO = 'data-neo-bn-info'\n _blockTypes = []\n _blockTypeGroups = []\n\n constructor (settings = {}) {\n settings = Object.assign({}, _defaults, settings)\n\n if (settings.items) {\n this._items = Array.from(settings.items)\n this._blockTypes = this._items.filter(i => i.getType() === 'blockType')\n this._blockTypeGroups = this._items.filter(i => i.getType() === 'group')\n } else {\n this._blockTypes = Array.from(settings.blockTypes)\n this._blockTypeGroups = Array.from(settings.groups)\n this._items = [...this._blockTypes, ...this._blockTypeGroups].sort((a, b) => a.getSortOrder() - b.getSortOrder())\n }\n\n this.$ownerContainer = settings.$ownerContainer\n this._field = settings.field\n this._maxBlocks = settings.maxBlocks | 0\n this._maxTopBlocks = settings.maxTopBlocks | 0\n\n this.$container = this.renderButtons()\n\n const $neo = this.$container.find('[data-neo-bn]')\n this.$buttonsContainer = $neo.filter('[data-neo-bn=\"container.buttons\"]')\n this.$menuContainer = $neo.filter('[data-neo-bn=\"container.menu\"]')\n this.$blockButtons = $neo.filter('[data-neo-bn=\"button.addBlock\"]')\n this.$groupButtons = $neo.filter('[data-neo-bn=\"button.group\"]')\n\n if (settings.blocks) {\n this.updateState(settings.blocks)\n }\n }\n\n /**\n * @since 3.6.0\n * @protected\n * @returns string\n */\n renderButtons () {\n const ownerBlockType = this.$ownerContainer?.hasClass('ni_block')\n ? this.$ownerContainer.attr('class').match(/ni_block--([^\\s]+)/)[1]\n : null\n const ungroupChildBlockTypes = ownerBlockType !== null &&\n !this.getField().getBlockTypeByHandle(ownerBlockType).getGroupChildBlockTypes()\n const buttonsHtml = []\n let blockTypesHtml = []\n let currentGroup = null\n let firstButton = true\n\n const generateGroupDropdown = () => {\n buttonsHtml.push(`\n
    \n ${currentGroup.getName()}\n
    \n
    \n
      ${blockTypesHtml.join('')}\n
    \n
    `)\n firstButton = false\n blockTypesHtml = []\n }\n\n buttonsHtml.push(`\n
    \n
    `)\n\n for (let i = 0; i < this._items.length; i++) {\n const item = this._items[i]\n const type = item.getType()\n\n if (type === 'blockType') {\n // Ignore disabled block types, or block types for which the current user isn't allowed to create blocks\n if (!item.getEnabled() || !item.isCreatableByUser()) {\n continue\n }\n\n const titleAttr = item.getDescription() ? ` title=\"${item.getDescription()}\"` : ''\n\n if (currentGroup !== null) {\n blockTypesHtml.push(`\n
  • \n ${item.getName()}\n
  • `)\n } else {\n buttonsHtml.push(`\n \n ${item.getName()}\n `)\n firstButton = false\n }\n } else if (type === 'group') {\n if (currentGroup !== null && blockTypesHtml.length > 0) {\n generateGroupDropdown()\n }\n\n if (\n // Don't show dropdowns for groups with blank names, as they're just used to end the previous group\n (item.isBlank()) ||\n // Don't show dropdowns if we're not forcing them to show, and there's only one block type in this group\n (!item.getAlwaysShowDropdown() && ((i + 2) >= this._items.length || this._items[i + 2].getType() === 'group')) ||\n // Don't show dropdowns if the block type is set not to group child block types\n (ungroupChildBlockTypes)\n ) {\n currentGroup = null\n } else {\n currentGroup = item\n }\n }\n }\n\n if (currentGroup !== null && blockTypesHtml.length > 0) {\n generateGroupDropdown()\n }\n\n buttonsHtml.push(`\n
    \n
    \n ${Craft.t('neo', 'Add a block')}\n
    `)\n\n // Menu, for views where the buttons would exceed the editor width\n currentGroup = null\n let lastGroupHadBlockTypes = false\n buttonsHtml.push(`\n
    \n
      `)\n\n for (const item of this._items) {\n const type = item.getType()\n\n if (type === 'blockType') {\n // Ignore disabled block types, or block types for which the current user isn't allowed to create blocks\n if (!item.getEnabled() || !item.isCreatableByUser()) {\n continue\n }\n\n if (currentGroup !== null && !lastGroupHadBlockTypes) {\n lastGroupHadBlockTypes = true\n\n buttonsHtml.push(`\n
      ${currentGroup.getName()}
      \n
        `)\n }\n\n const titleAttr = item.getDescription() ? ` title=\"${item.getDescription()}\"` : ''\n buttonsHtml.push(`\n
      • \n \n ${item.getName()}\n \n
      • `)\n } else if (type === 'group') {\n if (currentGroup === null || lastGroupHadBlockTypes) {\n buttonsHtml.push(`\n
      `)\n }\n\n lastGroupHadBlockTypes = false\n currentGroup = item.isBlank() || ungroupChildBlockTypes ? null : item\n\n if (currentGroup === null) {\n buttonsHtml.push(`\n
        `)\n }\n }\n }\n\n buttonsHtml.push(`\n
      \n
    \n
    `)\n\n return $(buttonsHtml.join(''))\n }\n\n getField () {\n return this._field\n }\n\n getBlockTypes () {\n return Array.from(this._blockTypes)\n }\n\n getBlockTypeGroups () {\n return Array.from(this._blockTypeGroups)\n }\n\n getBlockTypeByButton ($button) {\n const btHandle = $button.attr(NewBlockMenu.BUTTON_INFO)\n\n return this._blockTypes.find(bt => bt.getHandle() === btHandle)\n }\n\n updateState (blocks = [], additionalCheck = null, block = null) {\n additionalCheck = typeof additionalCheck === 'boolean' ? additionalCheck : true\n\n const that = this\n\n const totalTopBlocks = blocks.filter(block => block.isTopLevel()).length\n const maxBlocksMet = this._maxBlocks > 0 && blocks.length >= this._maxBlocks\n const maxTopBlocksMet = this._maxTopBlocks > 0 && totalTopBlocks >= this._maxTopBlocks\n\n const allDisabled = maxBlocksMet || maxTopBlocksMet || !additionalCheck\n\n this.$blockButtons.each(function () {\n const $button = $(this)\n let disabled = allDisabled\n\n if (!disabled) {\n const blockHasSameType = b => b.getBlockType().getHandle() === blockType.getHandle()\n const blockType = that.getBlockTypeByButton($button)\n const blocksOfType = blocks.filter(blockHasSameType)\n const maxBlocksOfType = blockType.getMaxBlocks()\n\n const maxSiblingBlocks = blockType.getMaxSiblingBlocks()\n const siblingBlocksOfType = block !== null\n ? block.getChildren(blocks).filter(blockHasSameType)\n // This is at the top level\n : blocks.filter(b => b.isTopLevel() && b.getBlockType().getHandle() === blockType.getHandle())\n\n disabled ||= (maxBlocksOfType > 0 && blocksOfType.length >= maxBlocksOfType) ||\n (maxSiblingBlocks > 0 && siblingBlocksOfType.length >= maxSiblingBlocks)\n }\n\n $button.toggleClass('disabled', disabled)\n })\n\n this.$groupButtons.each(function () {\n const $button = $(this)\n const menu = $button.data('menubtn')\n let disabled = allDisabled\n\n if (!disabled && menu) {\n const $menuButtons = menu.menu.$options\n disabled = $menuButtons.length === $menuButtons.filter('.disabled').length\n }\n\n $button.toggleClass('disabled', disabled)\n })\n }\n\n updateResponsiveness () {}\n}\n\nconst GarnishNewBlockMenu = Garnish.Base.extend({\n\n init (buttons) {\n this._buttons = buttons\n this.$container = this._buttons.$container\n this.addListener(this._buttons.$blockButtons, 'activate', '@newBlock')\n },\n\n initUi () {\n this._buttons.initUi()\n },\n\n getBlockTypes () {\n return this._buttons.getBlockTypes()\n },\n\n getGroups () {\n return this._buttons.getBlockTypeGroups()\n },\n\n getMaxBlocks () {\n return this._maxBlocks\n },\n\n updateButtonStates (blocks = [], additionalCheck = null, block = null) {\n this._buttons.updateState(blocks, additionalCheck, block)\n },\n\n updateState (blocks = [], additionalCheck = null, block = null) {\n this._buttons.updateState(blocks, additionalCheck, block)\n },\n\n updateResponsiveness () {\n this._buttons.updateResponsiveness()\n },\n\n getBlockTypeByButton ($button) {\n return this._buttons.getBlockTypeByButton($button)\n },\n\n '@newBlock' (e) {\n const $button = $(e.currentTarget)\n const blockTypeHandle = $button.attr(NewBlockMenu.BUTTON_INFO)\n const blockType = this._buttons.getBlockTypes().find(bt => bt.getHandle() === blockTypeHandle)\n\n this.trigger('newBlock', {\n blockType\n })\n }\n})\n\nexport { NewBlockMenu, GarnishNewBlockMenu }\n","import $ from 'jquery'\nimport { NewBlockMenu, GarnishNewBlockMenu } from './NewBlockMenu'\n\nclass Buttons extends NewBlockMenu {\n initUi () {\n $('.menubtn', this.$container).menubtn()\n this.updateResponsiveness()\n\n // If no buttons were rendered (e.g. if all valid block types are disabled for the user), hide the button container\n if (this.$buttonsContainer.children().length === 0) {\n const parent = this.$container.parent()\n const grandParent = parent.parent()\n const childrenContainer = grandParent.children('.ni_blocks')\n\n if (childrenContainer.length === 0 || childrenContainer.children().length === 0) {\n grandParent.addClass('hidden')\n } else {\n parent.addClass('hidden')\n }\n }\n }\n\n updateResponsiveness () {\n this._buttonsContainerWidth ||= this.$buttonsContainer.width()\n const isMobile = this.$container.width() < this._buttonsContainerWidth\n\n this.$buttonsContainer.toggleClass('hidden', isMobile)\n this.$menuContainer.toggleClass('hidden', !isMobile)\n }\n}\n\nexport default GarnishNewBlockMenu.extend({\n init (settings = {}) {\n this.base(new Buttons(settings))\n }\n})\n","import $ from 'jquery'\nimport Craft from 'craft'\nimport { NewBlockMenu, GarnishNewBlockMenu } from './NewBlockMenu'\n\nclass ButtonsGrid extends NewBlockMenu {\n /**\n * @inheritdoc\n */\n renderButtons () {\n const ownerBlockType = this.$ownerContainer?.hasClass('ni_block')\n ? this.$ownerContainer.attr('class').match(/ni_block--([^\\s]+)/)[1]\n : null\n const ungroupChildBlockTypes = ownerBlockType !== null &&\n !this.getField().getBlockTypeByHandle(ownerBlockType).getGroupChildBlockTypes()\n const buttonsHtml = []\n let currentGroup = null\n\n buttonsHtml.push(`\n
    \n
    \n ${Craft.t('neo', 'Add a block')}\n
    `)\n\n currentGroup = null\n let lastGroupHadBlockTypes = false\n buttonsHtml.push(`\n
    `)\n\n for (const item of this._items) {\n const type = item.getType()\n\n if (type === 'blockType') {\n // Ignore disabled block types, or block types for which the current user isn't allowed to create blocks\n if (!item.getEnabled() || !item.isCreatableByUser()) {\n continue\n }\n\n if (!lastGroupHadBlockTypes) {\n lastGroupHadBlockTypes = true\n\n if (currentGroup !== null) {\n buttonsHtml.push(`\n
    ${currentGroup.getName()}
    `)\n }\n\n buttonsHtml.push(`\n
      `)\n }\n\n const titleAttr = item.getDescription() ? ` title=\"${item.getDescription()}\"` : ''\n const blockTypeIconId = `fields-ni-icon-${this.getField().getName()}-${item.getHandle()}`\n const hasBlockTypeIcon = this._field?.$container.closest('form').find(`#${blockTypeIconId}`).length > 0 ?? false\n buttonsHtml.push(`\n
    • \n `)\n\n if (hasBlockTypeIcon) {\n buttonsHtml.push(`\n \n \n `)\n } else {\n buttonsHtml.push(`\n
      \n
      `)\n }\n\n buttonsHtml.push(`\n ${item.getName()}\n \n
    • `)\n } else if (type === 'group') {\n if (lastGroupHadBlockTypes) {\n buttonsHtml.push(`\n
    `)\n }\n\n lastGroupHadBlockTypes = false\n currentGroup = item.isBlank() || ungroupChildBlockTypes ? null : item\n }\n }\n\n buttonsHtml.push(`\n \n
    \n
    `)\n\n return $(buttonsHtml.join(''))\n }\n\n initUi () {\n $('.menubtn', this.$container).menubtn()\n this.updateResponsiveness()\n\n // If no buttons were rendered (e.g. if all valid block types are disabled for the user), hide the button container\n if (this.$buttonsContainer.find('[data-neo-bn=\"button.addBlock\"]').length === 0) {\n const parent = this.$container.parent()\n const grandParent = parent.parent()\n const childrenContainer = grandParent.children('.ni_blocks')\n\n if (childrenContainer.length === 0 || childrenContainer.children().length === 0) {\n grandParent.addClass('hidden')\n } else {\n parent.addClass('hidden')\n }\n }\n }\n}\n\nexport default GarnishNewBlockMenu.extend({\n init (settings = {}) {\n this.base(new ButtonsGrid(settings))\n }\n})\n","import $ from 'jquery'\nimport Craft from 'craft'\nimport { NewBlockMenu, GarnishNewBlockMenu } from './NewBlockMenu'\n\nclass ButtonsList extends NewBlockMenu {\n /**\n * @inheritdoc\n */\n renderButtons () {\n const ownerBlockType = this.$ownerContainer?.hasClass('ni_block')\n ? this.$ownerContainer.attr('class').match(/ni_block--([^\\s]+)/)[1]\n : null\n const ungroupChildBlockTypes = ownerBlockType !== null &&\n !this.getField().getBlockTypeByHandle(ownerBlockType).getGroupChildBlockTypes()\n const buttonsHtml = []\n let currentGroup = null\n\n buttonsHtml.push(`\n
    \n
    \n ${Craft.t('neo', 'Add a block')}\n
    `)\n\n let lastGroupHadBlockTypes = false\n buttonsHtml.push(`\n
    `)\n\n for (const item of this._items) {\n const type = item.getType()\n\n if (type === 'blockType') {\n // Ignore disabled block types, or block types for which the current user isn't allowed to create blocks\n if (!item.getEnabled() || !item.isCreatableByUser()) {\n continue\n }\n\n if (!lastGroupHadBlockTypes) {\n lastGroupHadBlockTypes = true\n\n if (currentGroup !== null) {\n buttonsHtml.push(`\n
    ${currentGroup.getName()}
    `)\n }\n\n buttonsHtml.push(`\n
      `)\n }\n\n const titleAttr = item.getDescription() ? ` title=\"${item.getDescription()}\"` : ''\n const blockTypeIconId = `fields-ni-icon-${this.getField().getName()}-${item.getHandle()}`\n const hasBlockTypeIcon = this._field?.$container.closest('form').find(`#${blockTypeIconId}`).length > 0 ?? false\n buttonsHtml.push(`\n
    • \n `)\n\n if (hasBlockTypeIcon) {\n buttonsHtml.push(`\n \n \n `)\n } else {\n buttonsHtml.push(`\n
      \n
      `)\n }\n\n buttonsHtml.push(`\n ${item.getName()}\n \n
    • `)\n } else if (type === 'group') {\n if (lastGroupHadBlockTypes) {\n buttonsHtml.push(`\n
    `)\n }\n\n lastGroupHadBlockTypes = false\n currentGroup = item.isBlank() || ungroupChildBlockTypes ? null : item\n }\n }\n\n buttonsHtml.push(`\n \n
    \n
    `)\n\n return $(buttonsHtml.join(''))\n }\n\n initUi () {\n $('.menubtn', this.$container).menubtn()\n this.updateResponsiveness()\n\n // If no buttons were rendered (e.g. if all valid block types are disabled for the user), hide the button container\n if (this.$buttonsContainer.find('[data-neo-bn=\"button.addBlock\"]').length === 0) {\n const parent = this.$container.parent()\n const grandParent = parent.parent()\n const childrenContainer = grandParent.children('.ni_blocks')\n\n if (childrenContainer.length === 0 || childrenContainer.children().length === 0) {\n grandParent.addClass('hidden')\n } else {\n parent.addClass('hidden')\n }\n }\n }\n}\n\nexport default GarnishNewBlockMenu.extend({\n init (settings = {}) {\n this.base(new ButtonsList(settings))\n }\n})\n","/*\nThe `_registerDynamicBlockConditions()` and `_updateVisibleElements()` methods are based on a large\nsection of `Craft.ElementEditor.saveDraft()` from Craft CMS 4.3.6.1, by Pixel & Tonic, Inc.\nhttps://github.com/craftcms/cms/blob/4.3.6.1/src/web/assets/cp/src/js/ElementEditor.js#L1144\nCraft CMS is released under the terms of the Craft License, a copy of which is included below.\nhttps://github.com/craftcms/cms/blob/4.3.6.1/LICENSE.md\n\nCopyright © Pixel & Tonic\n\nPermission is hereby granted to any person obtaining a copy of this software\n(the “Software”) to use, copy, modify, merge, publish and/or distribute copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\n\n1. **Don’t plagiarize.** The above copyright notice and this license shall be\n included in all copies or substantial portions of the Software.\n\n2. **Don’t use the same license on more than one project.** Each licensed copy\n of the Software shall be actively installed in no more than one production\n environment at a time.\n\n3. **Don’t mess with the licensing features.** Software features related to\n licensing shall not be altered or circumvented in any way, including (but\n not limited to) license validation, payment prompts, feature restrictions,\n and update eligibility.\n\n4. **Pay up.** Payment shall be made immediately upon receipt of any notice,\n prompt, reminder, or other message indicating that a payment is owed.\n\n5. **Follow the law.** All use of the Software shall not violate any applicable\n law or regulation, nor infringe the rights of any other person or entity.\n\nFailure to comply with the foregoing conditions will automatically and\nimmediately result in termination of the permission granted hereby. This\nlicense does not include any right to receive updates to the Software or\ntechnical support. Licensees bear all risk related to the quality and\nperformance of the Software and any modifications made or obtained to it,\nincluding liability for actual and consequential harm, such as loss or\ncorruption of data, and any necessary service, repair, or correction.\n\nTHE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER\nLIABILITY, INCLUDING SPECIAL, INCIDENTAL AND CONSEQUENTIAL DAMAGES, WHETHER IN\nAN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\nimport $ from 'jquery'\nimport Garnish from 'garnish'\nimport Craft from 'craft'\n\nimport NS from '../namespace'\n\nimport BlockSort from './BlockSort'\nimport BlockType from './BlockType'\nimport Group from './Group'\nimport Block from './Block'\nimport Buttons from './Buttons'\nimport ButtonsGrid from './ButtonsGrid'\nimport ButtonsList from './ButtonsList'\n\nimport './styles/input.scss'\n\nconst _defaults = {\n name: null,\n namespace: [],\n blockTypes: [],\n groups: [],\n blocks: [],\n inputId: null,\n maxBlocks: 0,\n maxTopBlocks: 0,\n minLevels: 0,\n maxLevels: 0,\n ownerId: null\n}\n\nexport default Garnish.Base.extend({\n\n _templateNs: [],\n _name: null,\n _siteId: null,\n _visibleLayoutElements: {},\n _newBlockId: 0,\n\n init (settings = {}) {\n settings = Object.assign({}, _defaults, settings)\n\n this._templateNs = NS.parse(settings.namespace)\n this._blockTypes = []\n this._groups = settings.groups.map(gInfo => new Group(gInfo))\n this._blocks = []\n this._id = settings.id\n this._name = settings.name\n this._minBlocks = settings.minBlocks\n this._maxBlocks = settings.maxBlocks\n this._maxTopBlocks = settings.maxTopBlocks\n this._minLevels = settings.minLevels\n this._maxLevels = settings.maxLevels\n this._ownerId = settings.ownerId\n this._showBlockTypeHandles = settings.showBlockTypeHandles\n\n const animate = !Garnish.prefersReducedMotion()\n this._$spinner = $(`
    ${animate ? '
    ' : Craft.t('neo', 'Loading')}
    `)\n\n switch (settings.newBlockMenuStyle) {\n case 'grid':\n this.ButtonClass = ButtonsGrid\n break\n case 'list':\n this.ButtonClass = ButtonsList\n break\n default:\n this.ButtonClass = Buttons\n }\n\n const ownerIdElement = $('[name=\"setId\"], [name=\"entryId\"], [name=\"categoryId\"]')\n if (ownerIdElement.length) {\n this._ownerId = ownerIdElement.val()\n }\n\n this.$container = $('#' + settings.inputId)\n\n const setGroupIds = {}\n this._groups.forEach(group => {\n setGroupIds[group.getId()] = true\n })\n\n const tempBlockTypes = {}\n\n for (const btInfo of settings.blockTypes) {\n // Filter out the block type if its group isn't included\n if (btInfo.groupId === null || typeof setGroupIds[btInfo.groupId] !== 'undefined') {\n const blockType = new BlockType(btInfo)\n this._blockTypes.push(blockType)\n tempBlockTypes[blockType.getHandle()] = blockType\n }\n }\n\n this.$form = this.$container.closest('form')\n this._siteId = this.$form.find('input[name=\"siteId\"]').val()\n\n const $neo = this.$container.find('[data-neo]')\n this.$blocksContainer = $neo.filter('[data-neo=\"container.blocks\"]')\n this.$buttonsContainer = $neo.filter('[data-neo=\"container.buttons\"]')\n\n this._buttons = new this.ButtonClass({\n $ownerContainer: this.$container,\n field: this,\n blockTypes: this.getBlockTypes(true),\n groups: this.getGroups(),\n maxBlocks: this.getMaxBlocks(),\n maxTopBlocks: this.getMaxTopBlocks()\n })\n\n this.$buttonsContainer.append(this._buttons.$container)\n this._buttons.on('newBlock', e => this['@newBlock'](e))\n this._buttons.initUi()\n\n this._blockSort = new BlockSort({\n container: this.$blocksContainer,\n handle: '[data-neo-b$=\".button.move\"]',\n maxTopBlocks: this.getMaxTopBlocks(),\n filter: () => {\n // Only return all the selected items if the target item is selected\n if (this._blockSort.$targetItem.hasClass('is-selected')) {\n return this.blockSelect.getSelectedItems()\n }\n\n return this._blockSort.$targetItem\n },\n collapseDraggees: true,\n magnetStrength: 4,\n helperLagBase: 1.5,\n helperOpacity: 0.9,\n onDragStop: () => {\n this._updateBlockOrder()\n this._updateButtons()\n }\n })\n\n this.blockSelect = new Garnish.Select(this.$blocksContainer, null, {\n multi: true,\n vertical: true,\n handle: '> .ni_block_topbar [data-neo-b$=\".select\"]',\n checkboxMode: true,\n selectedClass: 'is-selected sel'\n })\n\n this.$blocksContainer.find('.ni_block').each((i, blockDiv) => {\n const $block = $(blockDiv)\n const bInfo = {}\n bInfo.id = $block.attr('data-neo-b-id')\n bInfo.sortOrder = i\n bInfo.collapsed = $block.hasClass('is-collapsed')\n bInfo.enabled = !!$block.find(`[data-neo-b=\"${bInfo.id}.input.enabled\"]`).val()\n bInfo.level = parseInt($block.find(`[data-neo-b=\"${bInfo.id}.input.level\"]`).val())\n bInfo.field = this\n bInfo.namespace = [...this._templateNs, bInfo.id]\n\n const blockTypeHandle = $block.find(`[data-neo-b=\"${bInfo.id}.input.type\"]`).val()\n const blockType = tempBlockTypes[blockTypeHandle]\n\n // If the block type data isn't there, it's been filtered out and the blocks shouldn't be included\n if (typeof blockType === 'undefined') {\n $block.remove()\n return\n }\n\n bInfo.blockType = blockType\n bInfo.showButtons = !this.atMaxLevels(bInfo.level)\n\n const block = new Block(bInfo)\n block.initUi(false)\n this._setBlockEvents(block)\n\n this._blocks.push(block)\n this._blockSort.addBlock(block)\n this.blockSelect.addItems(block.$container)\n })\n\n this._updateBlockOrder()\n this._updateBlockChildren()\n this._updateButtons()\n\n // Create any required top level blocks, if this field has only one top level block type\n if (this._minBlocks > 0) {\n const missingBlockCount = this._minBlocks - this._blocks.length\n const topLevelBlockTypes = this.getBlockTypes(true)\n\n if (topLevelBlockTypes.length === 1 && missingBlockCount > 0) {\n for (let i = this._blocks.length; i < this._minBlocks; i++) {\n this['@newBlock']({\n blockType: topLevelBlockTypes[0],\n createChildBlocks: false,\n index: i,\n level: 1\n })\n }\n }\n }\n\n // Make sure menu states (for pasting blocks) are updated when changing browser tabs\n this.addListener(document, 'visibilitychange.input', () => this._updateButtons())\n\n this.addListener(this.$container, 'resize', () => this.updateResponsiveness())\n\n const serialized = typeof this.$form.data('serializer') === 'function'\n ? this.$form.data('serializer')()\n : this.$form.serialize()\n this.$form.data('initialSerializedValue', serialized)\n\n // Add error highlight for Matrix fields within Neo\n this._setMatrixClassErrors()\n this._setBlockTypeClassErrors()\n\n this._blocks\n .filter(block => !block.isExpanded())\n .forEach(block => block.updatePreview())\n\n this._registerDynamicBlockConditions()\n\n this.trigger('afterInit')\n },\n\n getName () {\n return this._name\n },\n\n updateResponsiveness () {\n for (const block of this._blocks) {\n block.updateResponsiveness()\n block.getButtons()?.updateResponsiveness()\n }\n\n this._buttons.updateResponsiveness()\n this._tempButtons?.updateResponsiveness()\n },\n\n addBlock (block, index = -1, level = 1, animate = null, createChildBlocks = true) {\n this.$form.data('elementEditor')?.pause()\n const blockCount = this._blocks.length\n index = index >= 0 ? Math.max(0, Math.min(index, blockCount)) : blockCount\n animate = !Garnish.prefersReducedMotion() && (typeof animate === 'boolean' ? animate : true)\n\n const prevBlock = index > 0 ? this._blocks[index - 1] : false\n const nextBlock = index < blockCount ? this._blocks[index] : false\n\n if (!prevBlock) {\n this.$blocksContainer.prepend(block.$container)\n } else {\n const minLevel = nextBlock ? nextBlock.getLevel() : 1\n const maxLevel = prevBlock.getLevel() + (prevBlock.getBlockType().isParent() ? 1 : 0)\n\n level = Math.max(minLevel, Math.min(level, maxLevel))\n\n const prevBlockOnLevel = this._findPrevBlockOnLevel(index, level)\n\n if (prevBlockOnLevel) {\n prevBlockOnLevel.$container.after(block.$container)\n } else {\n prevBlock.$blocksContainer.prepend(block.$container)\n }\n }\n\n block.setLevel(level)\n\n this._blocks.push(block)\n this._blockSort.addBlock(block)\n this.blockSelect.addItems(block.$container)\n\n block.initUi()\n this._setBlockEvents(block)\n this._destroyTempButtons()\n this._updateBlockOrder()\n this._updateBlockChildren()\n this._updateButtons()\n\n // Construct the block's visible layout elements, since they might not be the default visible\n // layout elements for the block type, e.g. if pasting a block\n const visibleLayoutElements = {}\n block.$contentContainer.children('[data-layout-tab]').each((_, layoutTab) => {\n const $layoutTab = $(layoutTab)\n const tabUid = $layoutTab.attr('data-layout-tab')\n visibleLayoutElements[tabUid] = []\n $layoutTab.children('[data-layout-element]').each((_, layoutElement) => {\n visibleLayoutElements[tabUid].push($(layoutElement).attr('data-layout-element'))\n })\n })\n this._visibleLayoutElements[block.getId()] = visibleLayoutElements\n\n // Create any required child blocks, if this block has only one child block type\n const createChildBlocksIfAllowed = () => {\n if (createChildBlocks) {\n const blockType = block.getBlockType()\n const minChildBlocks = blockType.getMinChildBlocks()\n\n if (minChildBlocks > 0) {\n let childBlockTypes = blockType.getChildBlocks()\n\n if (childBlockTypes === '*') {\n childBlockTypes = this.getBlockTypes()\n }\n\n if (childBlockTypes.length === 1) {\n const childBlockType = this.getBlockTypeByHandle(childBlockTypes[0])\n\n for (let i = 0; i < minChildBlocks; i++) {\n this['@newBlock']({\n blockType: childBlockType,\n createChildBlocks: false,\n index: index + i + 1,\n level: level + 1\n })\n }\n }\n }\n }\n\n this.$form.data('elementEditor')?.resume()\n }\n\n if (animate) {\n block.$container\n .css({\n opacity: 0,\n marginBottom: -(block.$container.outerHeight())\n })\n .velocity({\n opacity: 1,\n marginBottom: 10\n }, 'fast', _ => Garnish.requestAnimationFrame(() => {\n Garnish.scrollContainerToElement(block.$container)\n createChildBlocksIfAllowed()\n }))\n } else {\n createChildBlocksIfAllowed()\n }\n\n this.trigger('addBlock', {\n block,\n index\n })\n },\n\n removeBlock (block, animate = null, _delayAnimate = null) {\n this.$form.data('elementEditor')?.pause()\n\n animate = !Garnish.prefersReducedMotion() && (typeof animate === 'boolean' ? animate : true)\n _delayAnimate = typeof _delayAnimate === 'boolean' ? _delayAnimate : false\n\n const childBlocks = this._findChildBlocks(this._blocks.indexOf(block))\n for (const childBlock of childBlocks) {\n this.removeBlock(childBlock, true, true)\n }\n\n block.off('.input')\n\n this._blocks = this._blocks.filter(b => b !== block)\n this._blockSort.removeItems(block.$container)\n this.blockSelect.removeItems(block.$container)\n\n this._destroyTempButtons()\n this._updateButtons()\n\n const finishTheRemoval = () => {\n block.$container.remove()\n this._updateBlockChildren()\n this.$form.data('elementEditor')?.resume()\n }\n\n if (animate) {\n block.$container\n .css({\n opacity: 1,\n marginBottom: 10\n })\n .velocity({\n opacity: 0,\n marginBottom: _delayAnimate ? 10 : -(block.$container.outerHeight())\n }, 'fast', _ => finishTheRemoval())\n } else {\n finishTheRemoval()\n }\n\n block.destroy()\n\n this.trigger('removeBlock', {\n block\n })\n },\n\n _setBlockEvents (block) {\n block.on('removeBlock.input', _ => {\n if (this.getSelectedBlocks().length > 1) {\n if (window.confirm(Craft.t('neo', 'Are you sure you want to delete the selected blocks?'))) {\n this._blockBatch(block, b => this.removeBlock(b))\n }\n } else {\n this.removeBlock(block)\n }\n })\n block.on('toggleEnabled.input', e => this._blockBatch(block, b => b.toggleEnabled(e.enabled)))\n block.on('toggleExpansion.input', e => this._blockBatch(block, b => b.toggleExpansion(e.expanded)))\n block.on('moveUpBlock.input', _ => this._moveBlock(block, 'up'))\n block.on('moveDownBlock.input', _ => this._moveBlock(block, 'down'))\n block.on('newBlock.input', e => this['@newBlock'](Object.assign(e, { index: this._getNextBlockIndex(block) })))\n block.on('addBlockAbove.input', e => this['@addBlockAbove'](e))\n block.on('copyBlock.input', e => this['@copyBlock'](e))\n block.on('pasteBlock.input', e => this['@pasteBlock'](e))\n block.on('duplicateBlock.input', e => this['@duplicateBlock'](e))\n block.on('change.input', () => this.trigger('change', { block }))\n },\n\n _moveBlock (block, direction, animate = true) {\n if (!['up', 'down'].includes(direction)) {\n return\n }\n\n this.$form.data('elementEditor')?.pause()\n\n const siblings = block.getSiblings(this.getBlocks())\n const index = siblings.indexOf(block)\n const moveUp = index > 0 && direction === 'up'\n const moveDown = index < siblings.length - 1 && direction === 'down'\n\n if (index === -1 || moveUp === moveDown) {\n return\n }\n\n const animateMove = !Garnish.prefersReducedMotion() && (typeof animate === 'boolean' ? animate : true)\n const $block = block.$container\n\n const startTheMove = () => {\n $block.detach()\n\n if (moveUp) {\n siblings[index - 1].$container.before($block)\n } else {\n siblings[index + 1].$container.after($block)\n }\n }\n\n const finishTheMove = () => {\n this._updateBlockOrder()\n this._updateButtons()\n this.$form.data('elementEditor')?.resume()\n }\n\n if (animateMove) {\n $block\n .css({\n opacity: 1,\n marginBottom: 10\n })\n .velocity({\n opacity: 0,\n marginBottom: -($block.outerHeight())\n }, 'fast', _ => {\n startTheMove()\n\n $block\n .css({\n opacity: 0,\n marginBottom: -($block.outerHeight())\n })\n .velocity({\n opacity: 1,\n marginBottom: 10\n }, 'fast', _ => {\n finishTheMove()\n Garnish.requestAnimationFrame(() => Garnish.scrollContainerToElement($block))\n })\n })\n } else {\n startTheMove()\n finishTheMove()\n }\n },\n\n getBlockByElement ($block) {\n return this._blocks.find(block => block.$container.is($block))\n },\n\n getBlocks (level = 0) {\n return level > 0 ? this._blocks.filter(b => b.getLevel() === level) : Array.from(this._blocks)\n },\n\n getBlockTypeById (id) {\n return this._blockTypes.find(bt => bt.getId() === id)\n },\n\n getBlockTypeByHandle (handle) {\n return this._blockTypes.find(bt => bt.getHandle() === handle)\n },\n\n getBlockTypes (topLevelOnly) {\n topLevelOnly = typeof topLevelOnly === 'boolean' ? topLevelOnly : false\n\n return topLevelOnly\n ? this._blockTypes.filter(bt => bt.getTopLevel())\n : Array.from(this._blockTypes)\n },\n\n getGroups () {\n return Array.from(this._groups)\n },\n\n getItems () {\n return [...this.getBlockTypes(), ...this.getGroups()].sort((a, b) => a.getSortOrder() - b.getSortOrder())\n },\n\n getMaxBlocks () {\n return this._maxBlocks\n },\n\n getMaxTopBlocks () {\n return this._maxTopBlocks\n },\n\n getMinLevels () {\n return this._minLevels\n },\n\n getMaxLevels () {\n return this._maxLevels\n },\n\n atMaxLevels (level) {\n return this._maxLevels > 0 && level + 1 > this._maxLevels\n },\n\n getSelectedBlocks () {\n const $selectedBlocks = this.blockSelect.getSelectedItems()\n return this._blocks.filter(block => block.$container.closest($selectedBlocks).length > 0)\n },\n\n getCopiedBlocks () {\n const copyData = window.localStorage.getItem(`neo:copy:${this._name}`)\n\n if (!copyData) {\n return []\n }\n\n const { blocks } = JSON.parse(copyData)\n return blocks\n },\n\n setVisibleElements (blockId, visibleLayoutElements) {\n // visibleLayoutElements might (will probably) be a JSON-encoded string\n if (typeof visibleLayoutElements === 'string') {\n visibleLayoutElements = JSON.parse(visibleLayoutElements)\n }\n\n const block = this._blocks.find((block) => block.getId() === blockId)\n\n if (block === null) {\n return\n }\n\n this._visibleLayoutElements[blockId] = visibleLayoutElements\n },\n\n _setMatrixClassErrors () {\n // TODO: will need probably need to find a method within php instead of JS\n // temp solution for now.\n const matrixErrors = $('.ni_block_body .matrix-field .input.errors')\n\n matrixErrors.each(function () {\n const _this = $(this)\n const tabContainer = _this.closest('.ni_block_content_tab')\n const tabData = tabContainer.data('neo-b-info')\n const closestContainer = _this.closest('.ni_block')\n const bar = closestContainer.find('.tabs .tab[data-neo-b-info=\"' + tabData + '\"]')\n\n if (bar.length) {\n bar.addClass('has-errors')\n }\n })\n },\n\n _setBlockTypeClassErrors () {\n const tabErrors = $('.ni_block .tab.has-errors')\n\n tabErrors.each(function () {\n const parents = tabErrors.parents('.ni_block.is-collapsed')\n\n parents.each(function () {\n const _this = $(this)\n _this.find('> .ni_block_topbar .title .blocktype').addClass('has-errors')\n })\n })\n },\n\n _updateBlockOrder () {\n const blocks = []\n\n this.$blocksContainer.find('.ni_block').each((index, element) => {\n const block = this.getBlockByElement(element)\n blocks.push(block)\n })\n\n this._blocks = blocks\n this.trigger('updateBlockOrder')\n this.trigger('change', { block: null })\n },\n\n _updateBlockChildren () {\n for (const block of this._blocks) {\n const children = block.$blocksContainer.children('.ni_block')\n const collapsedCount = Math.min(children.length, 8) // Any more than 8 and it's a little too big\n const collapsedChildren = []\n\n for (let i = 0; i < collapsedCount; i++) {\n collapsedChildren.push('
    ')\n }\n\n block.$collapsedChildrenContainer.html(collapsedChildren.join(''))\n }\n },\n\n _checkMaxChildren (block) {\n if (!block) {\n return true\n }\n\n const blockType = block.getBlockType()\n const maxChildren = blockType.getMaxChildBlocks()\n\n if (maxChildren > 0) {\n const children = this._findChildBlocks(block)\n\n return children.length < maxChildren\n }\n\n return true\n },\n\n _updateButtons () {\n const blocks = this.getBlocks()\n this._buttons.updateButtonStates(blocks)\n this._tempButtons?.updateButtonStates(blocks, this._checkMaxChildren(this._tempButtonsBlock))\n\n for (const block of blocks) {\n block.updateActionsMenu()\n block.getButtons()?.updateButtonStates(blocks, this._checkMaxChildren(block), block)\n block.toggleShowButtons(!this.atMaxLevels(block.getLevel()))\n }\n },\n\n _blockBatch (block, callback) {\n const blocks = block.isSelected() ? this.getSelectedBlocks() : [block]\n\n for (const b of blocks) {\n callback(b)\n }\n },\n\n _destroyTempButtons (animate = null) {\n animate = !Garnish.prefersReducedMotion() && (typeof animate === 'boolean' ? animate : true)\n\n if (this._tempButtons) {\n const buttons = this._tempButtons\n buttons.off('newBlock')\n\n if (animate) {\n buttons.$container\n .css({\n opacity: 1,\n marginBottom: 10\n })\n .velocity({\n opacity: 0,\n marginBottom: -(buttons.$container.outerHeight())\n }, 'fast', e => buttons.$container.remove())\n } else {\n buttons.$container.remove()\n }\n\n this._tempButtons = null\n this._tempButtonsBlock = null\n }\n },\n\n _findPrevBlockOnLevel (index, level) {\n if (index instanceof Block) {\n index = this._blocks.indexOf(index)\n }\n\n const blocks = this._blocks\n\n let block = blocks[--index]\n let lowestLevel = Number.MAX_VALUE\n\n while (block) {\n const blockLevel = block.getLevel()\n\n if (blockLevel < lowestLevel) {\n if (blockLevel === level) {\n return block\n }\n\n lowestLevel = blockLevel\n }\n\n block = this._blocks[--index]\n }\n\n return false\n },\n\n _findChildBlocks (index, descendants = null) {\n if (index instanceof Block) {\n index = this._blocks.indexOf(index)\n }\n\n descendants = (typeof descendants === 'boolean' ? descendants : false)\n const block = this._blocks[index]\n\n return block ? block.getChildren(this._blocks, descendants) : []\n },\n\n _findParentBlock (index) {\n if (index instanceof Block) {\n index = this._blocks.indexOf(index)\n }\n\n const blocks = this._blocks\n const block = blocks[index]\n\n if (block) {\n const level = block.getLevel()\n\n if (level > 1) {\n let i = index\n let currentBlock = block\n\n while (currentBlock && currentBlock.getLevel() >= level) {\n currentBlock = blocks[--i]\n }\n\n return currentBlock\n }\n }\n\n return null\n },\n\n _getNextBlockIndex (index) {\n // If undefined, then there's no previous block and the 'next' block will be the first block\n if (typeof index === 'undefined') {\n return 0\n }\n\n if (index instanceof Block) {\n index = this._blocks.indexOf(index)\n }\n\n const descendants = this._findChildBlocks(index, true)\n const lastDescendant = descendants[descendants.length - 1]\n\n return (lastDescendant ? this._blocks.indexOf(lastDescendant) : index) + 1\n },\n\n /**\n * TODO: hopefully remove this in the Craft 5 version\n * @private\n */\n _registerDynamicBlockConditions () {\n // A small timeout to let the element editor initialise\n setTimeout(() => {\n const elementEditor = this.$form.data('elementEditor')\n elementEditor?.on('update', () => {\n const siteId = elementEditor.settings.siteId\n const data = {\n blocks: {},\n sortOrder: [],\n fieldId: this._id,\n ownerCanonicalId: this._ownerId,\n ownerDraftId: elementEditor.settings.draftId,\n isProvisionalDraft: elementEditor.settings.isProvisionalDraft,\n siteId\n }\n const originalBlockIds = {}\n this._blocks.forEach((block) => {\n const selectedTabId = block.$contentContainer\n .children('[data-layout-tab]:not(.hidden)')\n .data('layout-tab')\n data.blocks[block.getDuplicatedBlockId()] = {\n selectedTab: selectedTabId ?? null,\n visibleLayoutElements: this._visibleLayoutElements[block.getId()] ?? {}\n }\n data.sortOrder.push(block.getDuplicatedBlockId())\n originalBlockIds[block.getDuplicatedBlockId()] = block.getId()\n })\n\n Craft.queue.push(() => new Promise((resolve, reject) => {\n Craft.sendActionRequest('POST', 'neo/input/update-visible-elements', { data })\n .then((response) => {\n // If the draft's been updated since, ignore the response, since we'll get a new one soon anyway\n if (elementEditor.submittingForm) {\n reject(Error('Form being resaved'))\n return\n }\n\n for (const blockId in response.data.blocks) {\n const block = this._blocks.find((block) => block.getId() === originalBlockIds[blockId])\n this._updateVisibleElements(\n block,\n response.data.blocks[blockId],\n data.blocks[block.getDuplicatedBlockId()].selectedTabId\n )\n }\n resolve()\n })\n .catch(reject)\n }))\n })\n }, 200)\n },\n\n /**\n * TODO: hopefully remove this in the Craft 5 version\n * @private\n */\n _updateVisibleElements (block, blockData, selectedTabId) {\n let $allTabContainers = $()\n const visibleLayoutElements = {}\n let changedElements = false\n\n for (let i = 0; i < blockData.missingElements.length; i++) {\n const tabInfo = blockData.missingElements[i]\n let $tabContainer = block.$contentContainer.children(\n `[data-layout-tab=\"${tabInfo.uid}\"]`\n )\n\n if (!$tabContainer.length) {\n $tabContainer = $('
    ', {\n id: block.namespaceId(tabInfo.id),\n class: 'flex-fields',\n 'data-id': tabInfo.id,\n 'data-layout-tab': tabInfo.uid\n })\n if (tabInfo.id !== selectedTabId) {\n $tabContainer.addClass('hidden')\n }\n $tabContainer.appendTo(block.$contentContainer)\n }\n\n $allTabContainers = $allTabContainers.add($tabContainer)\n\n for (let j = 0; j < tabInfo.elements.length; j++) {\n const elementInfo = tabInfo.elements[j]\n\n if (elementInfo.html !== false) {\n if (!visibleLayoutElements[tabInfo.uid]) {\n visibleLayoutElements[tabInfo.uid] = []\n }\n visibleLayoutElements[tabInfo.uid].push(elementInfo.uid)\n\n if (typeof elementInfo.html === 'string') {\n const html = elementInfo.html.replaceAll('__NEOBLOCK__', block.getId())\n const $oldElement = $tabContainer.children(\n `[data-layout-element=\"${elementInfo.uid}\"]`\n )\n const $newElement = $(html)\n if ($oldElement.length) {\n $oldElement.replaceWith($newElement)\n } else {\n $newElement.appendTo($tabContainer)\n }\n Craft.initUiElements($newElement)\n if ($newElement.hasClass('ni_child-blocks-ui-element')) {\n block.resetButtons()\n }\n changedElements = true\n }\n } else {\n const $oldElement = $tabContainer.children(\n `[data-layout-element=\"${elementInfo.uid}\"]`\n )\n if (\n !$oldElement.length ||\n !Garnish.hasAttr(\n $oldElement,\n 'data-layout-element-placeholder'\n )\n ) {\n const $placeholder = $('
    ', {\n class: 'hidden',\n 'data-layout-element': elementInfo.uid,\n 'data-layout-element-placeholder': ''\n })\n\n if ($oldElement.length) {\n $oldElement.replaceWith($placeholder)\n } else {\n $placeholder.appendTo($tabContainer)\n }\n\n changedElements = true\n }\n }\n }\n\n if (changedElements) {\n this._updateButtons()\n }\n }\n\n // Remove any unused tab content containers\n // (`[data-layout-tab=\"\"]` == unconditional containers, so ignore those)\n const $unusedTabContainers = block.$contentContainer\n .children('[data-layout-tab]')\n .not($allTabContainers)\n .not('[data-layout-tab=\"\"]')\n if ($unusedTabContainers.length) {\n $unusedTabContainers.remove()\n changedElements = true\n }\n\n // Make the first tab visible if no others are\n if (!$allTabContainers.filter(':not(.hidden)').length) {\n $allTabContainers.first().removeClass('hidden')\n }\n\n this._visibleLayoutElements[block.getId()] = visibleLayoutElements\n\n // Update the tabs\n // Unfortunately can't use `block.getDuplicatedBlockId()` because it doesn't work here for new blocks\n const idToReplace = blockData.tabs?.match(/data-neo-b=\"([0-9]+).container.tabs\"/)?.pop() ?? null\n const tabsHtml = idToReplace\n ? blockData.tabs.replaceAll(idToReplace, block.getId())\n : blockData.tabs\n const $tabsHtml = $(tabsHtml)\n const $tabsOuterContainer = block.$topbarRightContainer.find('.tabs')\n $tabsOuterContainer.empty().append($tabsHtml)\n block.initTabs()\n block.updateResponsiveness()\n\n Craft.appendHeadHtml(blockData.headHtml.replaceAll('__NEOBLOCK__', block.getId()))\n Craft.appendBodyHtml(blockData.bodyHtml.replaceAll('__NEOBLOCK__', block.getId()))\n\n // Did any layout elements get added or removed?\n if (changedElements && blockData.initialDeltaValues) {\n Object.assign(\n this.$form.data('initial-delta-values'),\n blockData.initialDeltaValues\n )\n }\n },\n\n _addSpinnerAfter (block) {\n if (typeof block !== 'undefined') {\n block.$container.after(this._$spinner)\n } else {\n this.$blocksContainer.prepend(this._$spinner)\n }\n },\n\n _addSpinnerBefore (block) {\n if (typeof block !== 'undefined') {\n block.$container.before(this._$spinner)\n } else {\n this.$blocksContainer.append(this._$spinner)\n }\n },\n\n _animateSpinnerThen (callback) {\n if (!Garnish.prefersReducedMotion()) {\n this._$spinner\n .css({\n opacity: 0,\n marginBottom: -(this._$spinner.outerHeight())\n })\n .velocity({\n opacity: 1,\n marginBottom: 10\n }, 'fast', () => callback())\n } else {\n callback()\n }\n },\n\n _removeSpinner () {\n this._$spinner.remove()\n },\n\n _getNewBlockId () {\n while (this.$blocksContainer.find(`[data-neo-b-id=\"new${this._newBlockId}\"]`).length > 0) {\n this._newBlockId++\n }\n\n return `new${this._newBlockId++}`\n },\n\n _duplicate (data, block) {\n this.$form.data('elementEditor')?.pause()\n this._addSpinnerAfter(block)\n this._animateSpinnerThen(() => Craft.postActionRequest('neo/input/render-blocks', data, e => {\n if (e.success && e.blocks.length > 0) {\n const newBlocks = []\n\n for (const renderedBlock of e.blocks) {\n const newId = this._getNewBlockId()\n const newBlock = new Block({\n namespace: [...this._templateNs, newId],\n field: this,\n blockType: this.getBlockTypeById(renderedBlock.type),\n tabs: renderedBlock.tabs,\n id: newId,\n level: renderedBlock.level | 0,\n enabled: !!renderedBlock.enabled,\n collapsed: !!renderedBlock.collapsed,\n showButtons: !this.atMaxLevels(renderedBlock.level | 0),\n showBlockTypeHandle: this._showBlockTypeHandles\n }, true)\n\n newBlocks.push(newBlock)\n }\n\n let newIndex = this._getNextBlockIndex(block)\n\n for (const newBlock of newBlocks) {\n this.addBlock(newBlock, newIndex++, newBlock.getLevel(), false)\n }\n\n if (!Garnish.prefersReducedMotion()) {\n const firstBlock = newBlocks[0]\n\n firstBlock.$container\n .css({\n opacity: 0,\n marginBottom: this._$spinner.outerHeight() - firstBlock.$container.outerHeight() + 10\n })\n .velocity({\n opacity: 1,\n marginBottom: 10\n }, 'fast', _ => Garnish.requestAnimationFrame(() => Garnish.scrollContainerToElement(firstBlock.$container)))\n }\n\n this._removeSpinner()\n this.$form.data('elementEditor')?.resume()\n }\n }))\n },\n\n async '@newBlock' (e) {\n const createTheBlock = () => {\n const blockId = this._getNewBlockId()\n const block = new Block({\n namespace: [...this._templateNs, blockId],\n field: this,\n blockType: e.blockType,\n id: blockId,\n showButtons: !this.atMaxLevels(e.level),\n showBlockTypeHandle: this._showBlockTypeHandles\n }, true)\n\n this._removeSpinner()\n this.addBlock(block, e.index, e.level, e.createChildBlocks, e.createChildBlocks)\n }\n\n if (e.blockType.getTabs() !== null) {\n createTheBlock()\n return\n }\n\n const elementEditor = this.$form.data('elementEditor')\n\n try {\n elementEditor?.pause()\n const level = e.level ?? 1\n let siblingBlock\n let addAfter = true\n\n for (let i = typeof e.index !== 'undefined' ? e.index - 1 : this._blocks.length - 1; i >= 0; i--) {\n // Look for the previous block at the same level as the new block, to add the spinner after\n if (this._blocks[i].getLevel() === level) {\n siblingBlock = this._blocks[i]\n break\n }\n\n // If we've gone to a lower level, any future block we find at the same level won't be a\n // sibling of the new block, so we need to add the spinner before the last block we checked\n if (this._blocks[i].getLevel() < level) {\n siblingBlock = this._blocks[i + 1]\n addAfter = false\n }\n }\n\n if (addAfter) {\n this._addSpinnerAfter(siblingBlock)\n } else {\n this._addSpinnerBefore(siblingBlock)\n }\n\n this._animateSpinnerThen(async () => {\n await e.blockType.loadTabs()\n createTheBlock()\n })\n } catch (error) {\n this._removeSpinner()\n Craft.cp.displayError(error)\n } finally {\n elementEditor?.resume()\n }\n },\n\n '@addBlockAbove' (e) {\n this._destroyTempButtons()\n\n const animate = !Garnish.prefersReducedMotion() && e.animate !== false\n const block = e.block\n const index = this._blocks.indexOf(block)\n const parent = this._findParentBlock(index)\n const blocks = this.getBlocks()\n const buttons = new this.ButtonClass({\n $ownerContainer: block.isTopLevel() ? this.$container : block.getParent().$container,\n field: this,\n blockTypes: !parent ? this.getBlockTypes(true) : [],\n blocks,\n groups: !parent ? this.getGroups() : [],\n items: parent ? parent.getBlockType().getChildBlockItems(this.getItems()) : null,\n maxBlocks: this.getMaxBlocks()\n })\n\n block.$container.before(buttons.$container)\n\n buttons.on('newBlock', e => this['@newBlock']({\n blockType: e.blockType,\n index,\n level: block.getLevel()\n }))\n\n buttons.initUi()\n\n if (animate) {\n buttons.$container\n .css({\n opacity: 0,\n marginBottom: -(buttons.$container.outerHeight())\n })\n .velocity({\n opacity: 1,\n marginBottom: 10\n }, 'fast', _ => Garnish.requestAnimationFrame(() => Garnish.scrollContainerToElement(buttons.$container)))\n }\n\n this._tempButtons = buttons\n this._tempButtonsBlock = this._findParentBlock(block)\n\n this._tempButtons.updateButtonStates(blocks, this._checkMaxChildren(this._tempButtonsBlock), this._tempButtonsBlock)\n },\n\n '@copyBlock' (e) {\n // Get the selected blocks and their descendants\n const blockGroups = []\n let blockCount = 0\n const ownerId = this._ownerId\n\n this._blockBatch(e.block, (block) => {\n // To prevent block descendants from being copied multiple times, determine whether the current block has\n // been added to the most recently added group.\n const blockAdded = blockCount > 0 && blockGroups[blockGroups.length - 1].indexOf(block) !== -1\n\n if (!blockAdded) {\n const newGroup = []\n newGroup.push(block, ...this._findChildBlocks(block, true))\n blockGroups.push(newGroup)\n blockCount += newGroup.length\n }\n })\n\n // Collect the relevant data from those blocks to be stored for pasting\n const data = {\n field: this._name,\n blocks: []\n }\n\n for (const group of blockGroups) {\n const firstBlockLevel = group[0].getLevel() - 1\n\n for (const block of group) {\n const blockData = {\n type: block.getBlockType().getId(),\n level: block.getLevel() - firstBlockLevel,\n content: block.getContent(),\n ownerId\n }\n\n if (block.isEnabled()) {\n blockData.enabled = 1\n }\n\n if (!block.isExpanded()) {\n blockData.collapsed = 1\n }\n\n data.blocks.push(blockData)\n }\n }\n\n window.localStorage.setItem(`neo:copy:${this._name}`, JSON.stringify(data))\n\n this._updateButtons()\n\n const notice = blockCount === 1 ? '1 block copied' : '{n} blocks copied'\n Craft.cp.displayNotice(Craft.t('neo', notice, { n: blockCount }))\n },\n\n '@pasteBlock' (e) {\n const block = e.block\n const baseLevel = (block?.getLevel() ?? 1) - 1\n const blocks = this.getCopiedBlocks()\n\n if (blocks.length > 0) {\n for (const pasteBlock of blocks) {\n pasteBlock.level += baseLevel\n }\n\n NS.enter(this._templateNs)\n\n const data = {\n namespace: NS.toFieldName(),\n siteId: this._siteId,\n blocks\n }\n\n NS.leave()\n\n this._duplicate(data, block)\n }\n },\n\n '@duplicateBlock' (e) {\n const block = e.block\n const blockIndex = this._blocks.indexOf(block)\n const subBlocks = this._findChildBlocks(blockIndex, true)\n const ownerId = this._ownerId\n\n const getBlockData = block => {\n return {\n collapsed: !block.isExpanded() | 0,\n content: block.getContent(),\n enabled: block.isEnabled() | 0,\n level: block.getLevel(),\n ownerId,\n type: block.getBlockType().getId()\n }\n }\n\n NS.enter(this._templateNs)\n\n const data = {\n namespace: NS.toFieldName(),\n siteId: this._siteId,\n blocks: [\n getBlockData(block),\n ...subBlocks.map(getBlockData)\n ]\n }\n\n NS.leave()\n\n this._duplicate(data, block)\n }\n})\n","import Input from './input/Input'\n\nconst context = window ?? this\nconst inputs = []\n\ncontext.Neo = {\n Input,\n inputs,\n\n createInput (settings = {}) {\n const input = new Input(settings)\n inputs.push(input)\n\n return input\n }\n}\n"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","jQuery","Garnish","Craft","_stack","enter","segments","join","arguments","length","undefined","this","fromFieldName","joined","getNamespace","push","enterByFieldName","fieldName","leave","pop","Array","from","parse","value","indexOf","split","separator","prefix","toFieldName","replace","toString","slice","match","BlockSort","extend","$container","blocks","maxTopBlocks","_draggeeBlocks","init","items","settings","$","defaults","axis","base","container","getHelperTargetX","$draggee","offset","left","getHelperTargetY","magnet","magnetStrength","draggeeOffsetY","top","mouseY","mouseOffsetY","getBlockByElement","$block","find","block","is","getParentBlock","$parentBlock","parent","closest","onDragStart","that","each","_calculateMidpoints","onDrag","midpoint","_getClosestMidpoint","_moveDraggeeToBlock","type","direction","onDragStop","setLevel","parentBlock","getLevel","$childBlock","childBlock","returnHelpersToDraggees","addBlock","addItems","removeBlock","filter","b","removeItems","minDistance","Number","MAX_VALUE","maxDistance","MIN_VALUE","_currentMidpoints","DIRECTION_UP","position","_draggeeBlockHeight","_draggeeBlockY","height","midpoints","_getBlockMidpoints","keys","DIRECTION_DOWN","endMidpoint","margin","TYPE_END","isExpanded","blockHeight","topbarHeight","$topbarContainer","childrenHeight","$childrenContainer","preChildrenContentHeight","$contentContainer","_validateDraggeeChildren","TYPE_CONTENT","buttonsHeight","getButtons","TYPE_CHILDREN","validChild","$blocksContainer","append","after","before","getBlockType","isParent","prepend","_updateHelperAppearance","field","getField","maxLevels","getMaxLevels","parentLevel","firstDraggeeLevel","blockExceedsMax","blockOrDescendantExceedsMax","descendants","getChildren","getBlocks","some","topBlocks","children","topBlocksCount","draggeeBlock","getTopLevel","includes","blockType","maxChildBlocks","getMaxChildBlocks","blockChildren","blockChildCount","blockChildrenWithoutDraggees","checkedDraggeeBlocks","isValidChildBlock","draggeeBlockType","maxSiblingBlocks","getMaxSiblingBlocks","draggeeBlocksOfType","getHandle","$helper","helpers","id","data","css","width","_defaults","name","errors","assign","_name","_errors","_uid","uid","getErrors","getName","getUid","fieldLayoutId","sortOrder","handle","maxBlocks","groupChildBlockTypes","childBlocks","topLevel","tabs","tabNames","hasChildBlocksUiElement","creatableByUser","deletableByUser","editableByUser","_settings$tabs$html","_settings$tabs","_settings$tabs$js","_settings$tabs2","_settings$tabs$visibl","_settings$tabs3","_settings$tabs$tabNam","_settings$tabs$tabNam2","_id","_fieldLayoutId","_sortOrder","_handle","_description","description","_enabled","enabled","_minBlocks","minBlocks","_maxBlocks","_minSiblingBlocks","_maxSiblingBlocks","_minChildBlocks","minChildBlocks","_maxChildBlocks","_groupChildBlockTypes","_childBlocks","_topLevel","_tabNames","_tabs","map","tab","Tab","tabUids","_html","html","_js","js","_defaultVisibleLayoutElements","visibleLayoutElements","_hasChildBlocksUiElement","_creatableByUser","_deletableByUser","_editableByUser","getType","getId","getFieldLayoutId","getSortOrder","getDescription","getEnabled","getMinBlocks","getMaxBlocks","getMinSiblingBlocks","getMinChildBlocks","getGroupChildBlockTypes","getChildBlocks","getTabNames","getTabs","loadTabs","namespace","NS","collapsed","level","renderedBlocks","success","_tabs$tabNames$map","_tabs$tabNames","getHtml","blockId","_replaceBlockIdPlaceholder","getJs","getDefaultVisibleLayoutElements","_objectSpread","input","getChildBlockItems","firstPass","item","hasChildBlock","i","nextItem","cb","isArray","isCreatableByUser","isDeletableByUser","isEditableByUser","alwaysShowDropdown","_alwaysShowDropdown","getAlwaysShowDropdown","isBlank","insertAt","index","$parent","eq","buttons","modified","showButtons","showBlockTypeHandle","_resources","_escapeMap","_resourceFilter","url","href","src","paramIndex","substr","isNew","_escapeHTML","str","s","_limit","l","_templateNs","_field","_blockType","_initialised","_expanded","_modified","_initialState","_forceModified","generateElement","_initialEnabled","_showButtons","_renderOldChildBlocksContainer","_generateElement","concat","$neo","$bodyContainer","$topbarLeftContainer","$topbarRightContainer","$handleContainer","$tabContainer","$menuContainer","$previewContainer","$settingsButton","$togglerButton","$enabledInput","$levelInput","$collapsedInput","$status","$sortOrder","$form","resetButtons","hasErrors","tabName","selector","$tabButton","addClass","toggleExpansion","toggleShowButtons","addListener","_this$_tabs","showHandle","baseInputName","baseInputId","hasTabs","actionBtnLabel","actionMenuId","tabsBtnLabel","tabsMenuId","sortOrderName","elementHtml","_collapsed","_level","isNaN","parseInt","tabUid","$elementHtml","createCopyTextBtn","class","insertAfter","initUi","_this$_buttons","callInitUiElements","$foot","initTabs","_settingsMenu","on","hasClass","forEach","toggleSettingsMenu","removeClass","_handleActionClick","_handleActionKeydown","toggleEnabled","_buttons","updateResponsiveness","e","parents","_","cbuiElement","$tabContent","tabIndex","add","content","_getPostData","detectChange","_detectChange","observer","window","MutationObserver","setTimeout","observe","attributes","childList","characterData","subtree","_detectChangeObserver","toggleClass","addFieldLinks","trigger","$tabsButton","$tabsContainer","_tabsMenu","_handleTabKeydown","destroy","remove","clearInterval","_detectChangeInterval","disconnect","getDuplicatedBlockId","_this$$form$data$dupl","_this$$form$data","duplicatedElements","isTopLevel","val","setModified","isModified","getSiteId","_siteId","$siteId","getContent","rawContent","setValue","currentSet","rawName","getParent","_blocks","blockParent","currentBlock","_blocks2","currentLevel","getSiblings","_blocks3","updatePreview","condensed","$childFields","$fields","previewText","$field","$input","fieldType","label","text","values","$assets","$asset","$thumbContainer","srcset","title","checked","color","colorText","colorRev","background","date","time","$subInputs","$subInput","subValue","$selectedType","first","$visibleOption","visibleInputVal","$visibleElement","customText","lines","test","isSelected","collapse","save","animate","expand","expandContainer","collapseContainer","expandedCss","opacity","outerHeight","collapsedCss","clearCss","velocity","saveExpansion","expanded","_this$$form$data2","sentBlockId","isProvisionalDraft","siteId","Promise","resolve","reject","then","catch","disable","enable","triggerEvent","blockTypeEnabled","actuallyEnabled","enableContainer","disableContainer","isEnabled","show","$buttonsContainer","$childrenWarningsContainer","selectTab","attr","retryAll","_this$_topbarLeftWidt","_this$_topbarRightWid","isMobileBrowser","_topbarLeftWidth","_topbarRightWidth","hasRoomForIndividualTabs","updateActionsMenu","_this$getParent","_parentBlockType$getC","parentBlockType","allowedBlockTypes","getBlockTypes","bt","getBlockTypeByHandle","updateMenuStates","getMaxTopBlocks","additionalCheck","noAllowedBlockTypes","blocksOfType","maxBlockTypes","siblingBlocks","totalTopBlocks","allDisabled","addDisabled","typeDisabled","cloneDisabled","pasteData","JSON","localStorage","getItem","pasteDisabled","_pasteData$blocks$len","_pasteData$blocks","childBlockCount","pasteBlockCount","hasSameBlockType","siblingBlockCount","pasteSiblingBlockCount","currentBlockTypesById","reduce","m","v","count","pasteBlock","pasteBlockTypeObj","pasteBlockType","currentBlocksOfTypeCount","maxPasteBlockTypes","siblingIndex","disableMoveUp","disableMoveDown","$collapsedChildrenContainer","ButtonClass","$ownerContainer","getItems","namespaceId","namespacedId","toggle","_toggle","hide","preventDefault","keyCode","elementEditor","enableAutosave","draftId","initial","badKeys","startsWith","$option","target","$checkFrom","isLeft","isRight","_this$$form$data3","_this$$form$data4","pause","resume","currentTarget","_totalNewBlocks","getNewId","blockTypes","groups","NewBlockMenu","constructor","_defineProperty","_items","_blockTypes","_blockTypeGroups","sort","_maxTopBlocks","renderButtons","$blockButtons","$groupButtons","updateState","_this$$ownerContainer","ownerBlockType","ungroupChildBlockTypes","buttonsHtml","blockTypesHtml","currentGroup","firstButton","generateGroupDropdown","titleAttr","BUTTON_INFO","lastGroupHadBlockTypes","getBlockTypeGroups","getBlockTypeByButton","$button","btHandle","maxBlocksMet","maxTopBlocksMet","disabled","blockHasSameType","maxBlocksOfType","siblingBlocksOfType","menu","$menuButtons","$options","GarnishNewBlockMenu","getGroups","updateButtonStates","blockTypeHandle","Buttons","menubtn","grandParent","childrenContainer","_buttonsContainerWidth","isMobile","ButtonsGrid","_ref","_this$_field","blockTypeIconId","hasBlockTypeIcon","ButtonsList","inputId","minLevels","ownerId","_visibleLayoutElements","_newBlockId","_groups","gInfo","Group","_minLevels","_maxLevels","_ownerId","_showBlockTypeHandles","showBlockTypeHandles","_$spinner","newBlockMenuStyle","ownerIdElement","setGroupIds","group","tempBlockTypes","btInfo","groupId","BlockType","_blockSort","$targetItem","blockSelect","getSelectedItems","collapseDraggees","helperLagBase","helperOpacity","_updateBlockOrder","_updateButtons","multi","vertical","checkboxMode","selectedClass","blockDiv","bInfo","atMaxLevels","Block","_setBlockEvents","_updateBlockChildren","missingBlockCount","topLevelBlockTypes","createChildBlocks","document","serialized","serialize","_setMatrixClassErrors","_setBlockTypeClassErrors","_registerDynamicBlockConditions","_this$_tempButtons","_block$getButtons","_tempButtons","blockCount","Math","max","min","prevBlock","nextBlock","minLevel","maxLevel","prevBlockOnLevel","_findPrevBlockOnLevel","_destroyTempButtons","layoutTab","$layoutTab","layoutElement","createChildBlocksIfAllowed","childBlockTypes","childBlockType","marginBottom","_delayAnimate","_findChildBlocks","off","finishTheRemoval","getSelectedBlocks","confirm","_blockBatch","_moveBlock","_getNextBlockIndex","_this$$form$data5","siblings","moveUp","moveDown","animateMove","startTheMove","detach","finishTheMove","_this$$form$data6","getBlockTypeById","topLevelOnly","getMinLevels","$selectedBlocks","getCopiedBlocks","copyData","setVisibleElements","_this","tabData","bar","tabErrors","element","collapsedCount","collapsedChildren","_checkMaxChildren","maxChildren","_this$_tempButtons2","_tempButtonsBlock","_block$getButtons2","callback","lowestLevel","blockLevel","_findParentBlock","lastDescendant","fieldId","ownerCanonicalId","ownerDraftId","originalBlockIds","_this$_visibleLayoutE","selectedTabId","selectedTab","response","submittingForm","Error","_updateVisibleElements","blockData","_blockData$tabs$match","_blockData$tabs","$allTabContainers","changedElements","missingElements","tabInfo","appendTo","j","elements","elementInfo","replaceAll","$oldElement","$newElement","replaceWith","$placeholder","$unusedTabContainers","not","idToReplace","tabsHtml","$tabsHtml","empty","headHtml","bodyHtml","initialDeltaValues","_addSpinnerAfter","_addSpinnerBefore","_animateSpinnerThen","_removeSpinner","_getNewBlockId","_duplicate","_this$$form$data7","_this$$form$data8","newBlocks","renderedBlock","newId","newBlock","newIndex","firstBlock","createTheBlock","_e$level","siblingBlock","addAfter","async","error","displayError","blockGroups","newGroup","firstBlockLevel","setItem","stringify","notice","displayNotice","n","_block$getLevel","baseLevel","blockIndex","subBlocks","getBlockData","context","_window","inputs","Neo","Input","createInput"],"sourceRoot":""} \ No newline at end of file diff --git a/src/assets/src/input/Input.js b/src/assets/src/input/Input.js index 0c12bb4b..ba3c5d14 100644 --- a/src/assets/src/input/Input.js +++ b/src/assets/src/input/Input.js @@ -318,7 +318,18 @@ export default Garnish.Base.extend({ this._updateBlockChildren() this._updateButtons() - this._visibleLayoutElements[block.getId()] = block.getBlockType().getDefaultVisibleLayoutElements() + // Construct the block's visible layout elements, since they might not be the default visible + // layout elements for the block type, e.g. if pasting a block + const visibleLayoutElements = {} + block.$contentContainer.children('[data-layout-tab]').each((_, layoutTab) => { + const $layoutTab = $(layoutTab) + const tabUid = $layoutTab.attr('data-layout-tab') + visibleLayoutElements[tabUid] = [] + $layoutTab.children('[data-layout-element]').each((_, layoutElement) => { + visibleLayoutElements[tabUid].push($(layoutElement).attr('data-layout-element')) + }) + }) + this._visibleLayoutElements[block.getId()] = visibleLayoutElements // Create any required child blocks, if this block has only one child block type const createChildBlocksIfAllowed = () => {