From 84831dcf3a557fd5225ebdc887b93089cb080be5 Mon Sep 17 00:00:00 2001 From: BlackVortexAI Date: Sun, 23 Aug 2026 17:30:20 +0200 Subject: [PATCH] Unify Regional LoRA scope editing --- js/bv_nodepack.core.js | 50 +++++++++---------- tests/regional_lora_v3_picker.test.mjs | 32 ++++++++---- tests/regional_v3_m0_resource_picker.test.mjs | 11 ++-- ui/src/index.css | 4 +- ui/src/regional/LoraV3EditorWindow.tsx | 6 +-- ui/src/regional/LoraV3ResourcePickerPanel.tsx | 28 +++++------ ui/src/regional/RegionalEditor.tsx | 8 +-- ui/src/regional/loraV3Ui.tsx | 14 +++--- ui/src/ui/components/ResourcePicker.tsx | 1 - 9 files changed, 80 insertions(+), 74 deletions(-) diff --git a/js/bv_nodepack.core.js b/js/bv_nodepack.core.js index 4e2db78..895b036 100644 --- a/js/bv_nodepack.core.js +++ b/js/bv_nodepack.core.js @@ -1,4 +1,4 @@ -var iy=Object.defineProperty;var ay=(e,t,r)=>t in e?iy(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var I=(e,t,r)=>ay(e,typeof t!="symbol"?t+"":t,r);import{app as ly}from"../../scripts/app.js";import{api as sy}from"../../scripts/api.js";var fr=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function cy(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var cg={exports:{}},Rs={},ug={exports:{}},xe={};/** +var dy=Object.defineProperty;var fy=(e,t,r)=>t in e?dy(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var I=(e,t,r)=>fy(e,typeof t!="symbol"?t+"":t,r);import{app as py}from"../../scripts/app.js";import{api as hy}from"../../scripts/api.js";var fr=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function gy(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var ag={exports:{}},Rs={},lg={exports:{}},xe={};/** * @license React * react.production.min.js * @@ -6,7 +6,7 @@ var iy=Object.defineProperty;var ay=(e,t,r)=>t in e?iy(e,t,{enumerable:!0,config * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var Ta=Symbol.for("react.element"),uy=Symbol.for("react.portal"),dy=Symbol.for("react.fragment"),fy=Symbol.for("react.strict_mode"),py=Symbol.for("react.profiler"),hy=Symbol.for("react.provider"),gy=Symbol.for("react.context"),by=Symbol.for("react.forward_ref"),vy=Symbol.for("react.suspense"),my=Symbol.for("react.memo"),xy=Symbol.for("react.lazy"),qf=Symbol.iterator;function yy(e){return e===null||typeof e!="object"?null:(e=qf&&e[qf]||e["@@iterator"],typeof e=="function"?e:null)}var dg={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},fg=Object.assign,pg={};function ai(e,t,r){this.props=e,this.context=t,this.refs=pg,this.updater=r||dg}ai.prototype.isReactComponent={};ai.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")};ai.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function hg(){}hg.prototype=ai.prototype;function bd(e,t,r){this.props=e,this.context=t,this.refs=pg,this.updater=r||dg}var vd=bd.prototype=new hg;vd.constructor=bd;fg(vd,ai.prototype);vd.isPureReactComponent=!0;var Jf=Array.isArray,gg=Object.prototype.hasOwnProperty,md={current:null},bg={key:!0,ref:!0,__self:!0,__source:!0};function vg(e,t,r){var o,n={},i=null,a=null;if(t!=null)for(o in t.ref!==void 0&&(a=t.ref),t.key!==void 0&&(i=""+t.key),t)gg.call(t,o)&&!bg.hasOwnProperty(o)&&(n[o]=t[o]);var l=arguments.length-2;if(l===1)n.children=r;else if(1t in e?iy(e,t,{enumerable:!0,config * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var Ty=m,Ry=Symbol.for("react.element"),Sy=Symbol.for("react.fragment"),Ly=Object.prototype.hasOwnProperty,Cy=Ty.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,Ny={key:!0,ref:!0,__self:!0,__source:!0};function xg(e,t,r){var o,n={},i=null,a=null;r!==void 0&&(i=""+r),t.key!==void 0&&(i=""+t.key),t.ref!==void 0&&(a=t.ref);for(o in t)Ly.call(t,o)&&!Ny.hasOwnProperty(o)&&(n[o]=t[o]);if(e&&e.defaultProps)for(o in t=e.defaultProps,t)n[o]===void 0&&(n[o]=t[o]);return{$$typeof:Ry,type:e,key:i,ref:a,props:n,_owner:Cy.current}}Rs.Fragment=Sy;Rs.jsx=xg;Rs.jsxs=xg;cg.exports=Rs;var s=cg.exports,qi={},yg={exports:{}},er={},_g={exports:{}},wg={};/** + */var Oy=m,My=Symbol.for("react.element"),Ay=Symbol.for("react.fragment"),Dy=Object.prototype.hasOwnProperty,Iy=Oy.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,jy={key:!0,ref:!0,__self:!0,__source:!0};function bg(e,t,r){var o,n={},i=null,a=null;r!==void 0&&(i=""+r),t.key!==void 0&&(i=""+t.key),t.ref!==void 0&&(a=t.ref);for(o in t)Dy.call(t,o)&&!jy.hasOwnProperty(o)&&(n[o]=t[o]);if(e&&e.defaultProps)for(o in t=e.defaultProps,t)n[o]===void 0&&(n[o]=t[o]);return{$$typeof:My,type:e,key:i,ref:a,props:n,_owner:Iy.current}}Rs.Fragment=Ay;Rs.jsx=bg;Rs.jsxs=bg;ag.exports=Rs;var s=ag.exports,qi={},vg={exports:{}},er={},mg={exports:{}},xg={};/** * @license React * scheduler.production.min.js * @@ -22,7 +22,7 @@ var iy=Object.defineProperty;var ay=(e,t,r)=>t in e?iy(e,t,{enumerable:!0,config * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */(function(e){function t(D,W){var F=D.length;D.push(W);e:for(;0>>1,X=D[ie];if(0>>1;ien(Y,F))Qn(oe,Y)?(D[ie]=oe,D[Q]=F,ie=Q):(D[ie]=Y,D[Z]=F,ie=Z);else if(Qn(oe,F))D[ie]=oe,D[Q]=F,ie=Q;else break e}}return W}function n(D,W){var F=D.sortIndex-W.sortIndex;return F!==0?F:D.id-W.id}if(typeof performance=="object"&&typeof performance.now=="function"){var i=performance;e.unstable_now=function(){return i.now()}}else{var a=Date,l=a.now();e.unstable_now=function(){return a.now()-l}}var c=[],u=[],d=1,f=null,p=3,g=!1,x=!1,w=!1,k=typeof setTimeout=="function"?setTimeout:null,b=typeof clearTimeout=="function"?clearTimeout:null,h=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function v(D){for(var W=r(u);W!==null;){if(W.callback===null)o(u);else if(W.startTime<=D)o(u),W.sortIndex=W.expirationTime,t(c,W);else break;W=r(u)}}function _(D){if(w=!1,v(D),!x)if(r(c)!==null)x=!0,R(y);else{var W=r(u);W!==null&&M(_,W.startTime-D)}}function y(D,W){x=!1,w&&(w=!1,b(z),z=-1),g=!0;var F=p;try{for(v(W),f=r(c);f!==null&&(!(f.expirationTime>W)||D&&!B());){var ie=f.callback;if(typeof ie=="function"){f.callback=null,p=f.priorityLevel;var X=ie(f.expirationTime<=W);W=e.unstable_now(),typeof X=="function"?f.callback=X:f===r(c)&&o(c),v(W)}else o(c);f=r(c)}if(f!==null)var q=!0;else{var Z=r(u);Z!==null&&M(_,Z.startTime-W),q=!1}return q}finally{f=null,p=F,g=!1}}var T=!1,S=null,z=-1,N=5,P=-1;function B(){return!(e.unstable_now()-PD||125ie?(D.sortIndex=F,t(u,D),r(c)===null&&D===r(u)&&(w?(b(z),z=-1):w=!0,M(_,F-ie))):(D.sortIndex=X,t(c,D),x||g||(x=!0,R(y))),D},e.unstable_shouldYield=B,e.unstable_wrapCallback=function(D){var W=p;return function(){var F=p;p=W;try{return D.apply(this,arguments)}finally{p=F}}}})(wg);_g.exports=wg;var Oy=_g.exports;/** + */(function(e){function t(D,W){var F=D.length;D.push(W);e:for(;0>>1,X=D[ne];if(0>>1;nen(Y,F))Qn(oe,Y)?(D[ne]=oe,D[Q]=F,ne=Q):(D[ne]=Y,D[Z]=F,ne=Z);else if(Qn(oe,F))D[ne]=oe,D[Q]=F,ne=Q;else break e}}return W}function n(D,W){var F=D.sortIndex-W.sortIndex;return F!==0?F:D.id-W.id}if(typeof performance=="object"&&typeof performance.now=="function"){var i=performance;e.unstable_now=function(){return i.now()}}else{var a=Date,l=a.now();e.unstable_now=function(){return a.now()-l}}var c=[],u=[],d=1,f=null,p=3,g=!1,x=!1,w=!1,k=typeof setTimeout=="function"?setTimeout:null,b=typeof clearTimeout=="function"?clearTimeout:null,h=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function v(D){for(var W=r(u);W!==null;){if(W.callback===null)o(u);else if(W.startTime<=D)o(u),W.sortIndex=W.expirationTime,t(c,W);else break;W=r(u)}}function _(D){if(w=!1,v(D),!x)if(r(c)!==null)x=!0,R(y);else{var W=r(u);W!==null&&M(_,W.startTime-D)}}function y(D,W){x=!1,w&&(w=!1,b(z),z=-1),g=!0;var F=p;try{for(v(W),f=r(c);f!==null&&(!(f.expirationTime>W)||D&&!P());){var ne=f.callback;if(typeof ne=="function"){f.callback=null,p=f.priorityLevel;var X=ne(f.expirationTime<=W);W=e.unstable_now(),typeof X=="function"?f.callback=X:f===r(c)&&o(c),v(W)}else o(c);f=r(c)}if(f!==null)var q=!0;else{var Z=r(u);Z!==null&&M(_,Z.startTime-W),q=!1}return q}finally{f=null,p=F,g=!1}}var T=!1,S=null,z=-1,N=5,B=-1;function P(){return!(e.unstable_now()-BD||125ne?(D.sortIndex=F,t(u,D),r(c)===null&&D===r(u)&&(w?(b(z),z=-1):w=!0,M(_,F-ne))):(D.sortIndex=X,t(c,D),x||g||(x=!0,R(y))),D},e.unstable_shouldYield=P,e.unstable_wrapCallback=function(D){var W=p;return function(){var F=p;p=W;try{return D.apply(this,arguments)}finally{p=F}}}})(xg);mg.exports=xg;var Py=mg.exports;/** * @license React * react-dom.production.min.js * @@ -30,18 +30,18 @@ var iy=Object.defineProperty;var ay=(e,t,r)=>t in e?iy(e,t,{enumerable:!0,config * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var My=m,Qt=Oy;function K(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,r=1;r"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Qc=Object.prototype.hasOwnProperty,Ay=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,Qf={},ep={};function Dy(e){return Qc.call(ep,e)?!0:Qc.call(Qf,e)?!1:Ay.test(e)?ep[e]=!0:(Qf[e]=!0,!1)}function Iy(e,t,r,o){if(r!==null&&r.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return o?!1:r!==null?!r.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function jy(e,t,r,o){if(t===null||typeof t>"u"||Iy(e,t,r,o))return!0;if(o)return!1;if(r!==null)switch(r.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function Dt(e,t,r,o,n,i,a){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=o,this.attributeNamespace=n,this.mustUseProperty=r,this.propertyName=e,this.type=t,this.sanitizeURL=i,this.removeEmptyString=a}var xt={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){xt[e]=new Dt(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];xt[t]=new Dt(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){xt[e]=new Dt(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){xt[e]=new Dt(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){xt[e]=new Dt(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){xt[e]=new Dt(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){xt[e]=new Dt(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){xt[e]=new Dt(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){xt[e]=new Dt(e,5,!1,e.toLowerCase(),null,!1,!1)});var yd=/[\-:]([a-z])/g;function _d(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(yd,_d);xt[t]=new Dt(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(yd,_d);xt[t]=new Dt(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(yd,_d);xt[t]=new Dt(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){xt[e]=new Dt(e,1,!1,e.toLowerCase(),null,!1,!1)});xt.xlinkHref=new Dt("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){xt[e]=new Dt(e,1,!1,e.toLowerCase(),null,!0,!0)});function wd(e,t,r,o){var n=xt.hasOwnProperty(t)?xt[t]:null;(n!==null?n.type!==0:o||!(2"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Zc=Object.prototype.hasOwnProperty,zy=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,qf={},Jf={};function Fy(e){return Zc.call(Jf,e)?!0:Zc.call(qf,e)?!1:zy.test(e)?Jf[e]=!0:(qf[e]=!0,!1)}function Uy(e,t,r,o){if(r!==null&&r.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return o?!1:r!==null?!r.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function Vy(e,t,r,o){if(t===null||typeof t>"u"||Uy(e,t,r,o))return!0;if(o)return!1;if(r!==null)switch(r.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function Dt(e,t,r,o,n,i,a){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=o,this.attributeNamespace=n,this.mustUseProperty=r,this.propertyName=e,this.type=t,this.sanitizeURL=i,this.removeEmptyString=a}var xt={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){xt[e]=new Dt(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];xt[t]=new Dt(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){xt[e]=new Dt(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){xt[e]=new Dt(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){xt[e]=new Dt(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){xt[e]=new Dt(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){xt[e]=new Dt(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){xt[e]=new Dt(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){xt[e]=new Dt(e,5,!1,e.toLowerCase(),null,!1,!1)});var xd=/[\-:]([a-z])/g;function yd(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(xd,yd);xt[t]=new Dt(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(xd,yd);xt[t]=new Dt(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(xd,yd);xt[t]=new Dt(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){xt[e]=new Dt(e,1,!1,e.toLowerCase(),null,!1,!1)});xt.xlinkHref=new Dt("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){xt[e]=new Dt(e,1,!1,e.toLowerCase(),null,!0,!0)});function _d(e,t,r,o){var n=xt.hasOwnProperty(t)?xt[t]:null;(n!==null?n.type!==0:o||!(2l||n[a]!==i[l]){var c=` -`+n[a].replace(" at new "," at ");return e.displayName&&c.includes("")&&(c=c.replace("",e.displayName)),c}while(1<=a&&0<=l);break}}}finally{dc=!1,Error.prepareStackTrace=r}return(e=e?e.displayName||e.name:"")?Si(e):""}function By(e){switch(e.tag){case 5:return Si(e.type);case 16:return Si("Lazy");case 13:return Si("Suspense");case 19:return Si("SuspenseList");case 0:case 2:case 15:return e=fc(e.type,!1),e;case 11:return e=fc(e.type.render,!1),e;case 1:return e=fc(e.type,!0),e;default:return""}}function ou(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case Sn:return"Fragment";case Rn:return"Portal";case eu:return"Profiler";case kd:return"StrictMode";case tu:return"Suspense";case ru:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case Tg:return(e.displayName||"Context")+".Consumer";case Eg:return(e._context.displayName||"Context")+".Provider";case Ed:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case Td:return t=e.displayName||null,t!==null?t:ou(e.type)||"Memo";case uo:t=e._payload,e=e._init;try{return ou(e(t))}catch{}}return null}function Py(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return ou(t);case 8:return t===kd?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function No(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function Sg(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function zy(e){var t=Sg(e)?"checked":"value",r=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),o=""+e[t];if(!e.hasOwnProperty(t)&&typeof r<"u"&&typeof r.get=="function"&&typeof r.set=="function"){var n=r.get,i=r.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return n.call(this)},set:function(a){o=""+a,i.call(this,a)}}),Object.defineProperty(e,t,{enumerable:r.enumerable}),{getValue:function(){return o},setValue:function(a){o=""+a},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function Ua(e){e._valueTracker||(e._valueTracker=zy(e))}function Lg(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var r=t.getValue(),o="";return e&&(o=Sg(e)?e.checked?"true":"false":e.value),e=o,e!==r?(t.setValue(e),!0):!1}function Ml(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function nu(e,t){var r=t.checked;return Xe({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:r??e._wrapperState.initialChecked})}function rp(e,t){var r=t.defaultValue==null?"":t.defaultValue,o=t.checked!=null?t.checked:t.defaultChecked;r=No(t.value!=null?t.value:r),e._wrapperState={initialChecked:o,initialValue:r,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function Cg(e,t){t=t.checked,t!=null&&wd(e,"checked",t,!1)}function iu(e,t){Cg(e,t);var r=No(t.value),o=t.type;if(r!=null)o==="number"?(r===0&&e.value===""||e.value!=r)&&(e.value=""+r):e.value!==""+r&&(e.value=""+r);else if(o==="submit"||o==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?au(e,t.type,r):t.hasOwnProperty("defaultValue")&&au(e,t.type,No(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function op(e,t,r){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var o=t.type;if(!(o!=="submit"&&o!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,r||t===e.value||(e.value=t),e.defaultValue=t}r=e.name,r!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,r!==""&&(e.name=r)}function au(e,t,r){(t!=="number"||Ml(e.ownerDocument)!==e)&&(r==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+r&&(e.defaultValue=""+r))}var Li=Array.isArray;function Pn(e,t,r,o){if(e=e.options,t){t={};for(var n=0;n"+t.valueOf().toString()+"",t=Va.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function Zi(e,t){if(t){var r=e.firstChild;if(r&&r===e.lastChild&&r.nodeType===3){r.nodeValue=t;return}}e.textContent=t}var Di={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},Fy=["Webkit","ms","Moz","O"];Object.keys(Di).forEach(function(e){Fy.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Di[t]=Di[e]})});function Ag(e,t,r){return t==null||typeof t=="boolean"||t===""?"":r||typeof t!="number"||t===0||Di.hasOwnProperty(e)&&Di[e]?(""+t).trim():t+"px"}function Dg(e,t){e=e.style;for(var r in t)if(t.hasOwnProperty(r)){var o=r.indexOf("--")===0,n=Ag(r,t[r],o);r==="float"&&(r="cssFloat"),o?e.setProperty(r,n):e[r]=n}}var Uy=Xe({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function cu(e,t){if(t){if(Uy[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(K(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(K(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(K(61))}if(t.style!=null&&typeof t.style!="object")throw Error(K(62))}}function uu(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var du=null;function Rd(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var fu=null,zn=null,Fn=null;function ap(e){if(e=La(e)){if(typeof fu!="function")throw Error(K(280));var t=e.stateNode;t&&(t=Os(t),fu(e.stateNode,e.type,t))}}function Ig(e){zn?Fn?Fn.push(e):Fn=[e]:zn=e}function jg(){if(zn){var e=zn,t=Fn;if(Fn=zn=null,ap(e),t)for(e=0;e>>=0,e===0?32:31-(Zy(e)/Qy|0)|0}var Wa=64,Ha=4194304;function Ci(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function jl(e,t){var r=e.pendingLanes;if(r===0)return 0;var o=0,n=e.suspendedLanes,i=e.pingedLanes,a=r&268435455;if(a!==0){var l=a&~n;l!==0?o=Ci(l):(i&=a,i!==0&&(o=Ci(i)))}else a=r&~n,a!==0?o=Ci(a):i!==0&&(o=Ci(i));if(o===0)return 0;if(t!==0&&t!==o&&!(t&n)&&(n=o&-o,i=t&-t,n>=i||n===16&&(i&4194240)!==0))return t;if(o&4&&(o|=r&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=o;0r;r++)t.push(e);return t}function Ra(e,t,r){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-kr(t),e[t]=r}function o_(e,t){var r=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var o=e.eventTimes;for(e=e.expirationTimes;0=ji),gp=" ",bp=!1;function rb(e,t){switch(e){case"keyup":return O_.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function ob(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Ln=!1;function A_(e,t){switch(e){case"compositionend":return ob(t);case"keypress":return t.which!==32?null:(bp=!0,gp);case"textInput":return e=t.data,e===gp&&bp?null:e;default:return null}}function D_(e,t){if(Ln)return e==="compositionend"||!Dd&&rb(e,t)?(e=eb(),hl=Od=bo=null,Ln=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:r,offset:t-e};e=o}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=yp(r)}}function lb(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?lb(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function sb(){for(var e=window,t=Ml();t instanceof e.HTMLIFrameElement;){try{var r=typeof t.contentWindow.location.href=="string"}catch{r=!1}if(r)e=t.contentWindow;else break;t=Ml(e.document)}return t}function Id(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}function W_(e){var t=sb(),r=e.focusedElem,o=e.selectionRange;if(t!==r&&r&&r.ownerDocument&&lb(r.ownerDocument.documentElement,r)){if(o!==null&&Id(r)){if(t=o.start,e=o.end,e===void 0&&(e=t),"selectionStart"in r)r.selectionStart=t,r.selectionEnd=Math.min(e,r.value.length);else if(e=(t=r.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var n=r.textContent.length,i=Math.min(o.start,n);o=o.end===void 0?i:Math.min(o.end,n),!e.extend&&i>o&&(n=o,o=i,i=n),n=_p(r,i);var a=_p(r,o);n&&a&&(e.rangeCount!==1||e.anchorNode!==n.node||e.anchorOffset!==n.offset||e.focusNode!==a.node||e.focusOffset!==a.offset)&&(t=t.createRange(),t.setStart(n.node,n.offset),e.removeAllRanges(),i>o?(e.addRange(t),e.extend(a.node,a.offset)):(t.setEnd(a.node,a.offset),e.addRange(t)))}}for(t=[],e=r;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof r.focus=="function"&&r.focus(),r=0;r=document.documentMode,Cn=null,mu=null,Pi=null,xu=!1;function wp(e,t,r){var o=r.window===r?r.document:r.nodeType===9?r:r.ownerDocument;xu||Cn==null||Cn!==Ml(o)||(o=Cn,"selectionStart"in o&&Id(o)?o={start:o.selectionStart,end:o.selectionEnd}:(o=(o.ownerDocument&&o.ownerDocument.defaultView||window).getSelection(),o={anchorNode:o.anchorNode,anchorOffset:o.anchorOffset,focusNode:o.focusNode,focusOffset:o.focusOffset}),Pi&&na(Pi,o)||(Pi=o,o=zl(mu,"onSelect"),0Mn||(e.current=Tu[Mn],Tu[Mn]=null,Mn--)}function Be(e,t){Mn++,Tu[Mn]=e.current,e.current=t}var Oo={},Ct=Ao(Oo),Ut=Ao(!1),on=Oo;function Gn(e,t){var r=e.type.contextTypes;if(!r)return Oo;var o=e.stateNode;if(o&&o.__reactInternalMemoizedUnmaskedChildContext===t)return o.__reactInternalMemoizedMaskedChildContext;var n={},i;for(i in r)n[i]=t[i];return o&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=n),n}function Vt(e){return e=e.childContextTypes,e!=null}function Ul(){ze(Ut),ze(Ct)}function Cp(e,t,r){if(Ct.current!==Oo)throw Error(K(168));Be(Ct,t),Be(Ut,r)}function vb(e,t,r){var o=e.stateNode;if(t=t.childContextTypes,typeof o.getChildContext!="function")return r;o=o.getChildContext();for(var n in o)if(!(n in t))throw Error(K(108,Py(e)||"Unknown",n));return Xe({},r,o)}function Vl(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Oo,on=Ct.current,Be(Ct,e),Be(Ut,Ut.current),!0}function Np(e,t,r){var o=e.stateNode;if(!o)throw Error(K(169));r?(e=vb(e,t,on),o.__reactInternalMemoizedMergedChildContext=e,ze(Ut),ze(Ct),Be(Ct,e)):ze(Ut),Be(Ut,r)}var $r=null,Ms=!1,Rc=!1;function mb(e){$r===null?$r=[e]:$r.push(e)}function tw(e){Ms=!0,mb(e)}function Do(){if(!Rc&&$r!==null){Rc=!0;var e=0,t=Oe;try{var r=$r;for(Oe=1;e>=a,n-=a,Gr=1<<32-kr(t)+n|r<z?(N=S,S=null):N=S.sibling;var P=p(b,S,v[z],_);if(P===null){S===null&&(S=N);break}e&&S&&P.alternate===null&&t(b,S),h=i(P,h,z),T===null?y=P:T.sibling=P,T=P,S=N}if(z===v.length)return r(b,S),Ve&&Uo(b,z),y;if(S===null){for(;zz?(N=S,S=null):N=S.sibling;var B=p(b,S,P.value,_);if(B===null){S===null&&(S=N);break}e&&S&&B.alternate===null&&t(b,S),h=i(B,h,z),T===null?y=B:T.sibling=B,T=B,S=N}if(P.done)return r(b,S),Ve&&Uo(b,z),y;if(S===null){for(;!P.done;z++,P=v.next())P=f(b,P.value,_),P!==null&&(h=i(P,h,z),T===null?y=P:T.sibling=P,T=P);return Ve&&Uo(b,z),y}for(S=o(b,S);!P.done;z++,P=v.next())P=g(S,b,z,P.value,_),P!==null&&(e&&P.alternate!==null&&S.delete(P.key===null?z:P.key),h=i(P,h,z),T===null?y=P:T.sibling=P,T=P);return e&&S.forEach(function(O){return t(b,O)}),Ve&&Uo(b,z),y}function k(b,h,v,_){if(typeof v=="object"&&v!==null&&v.type===Sn&&v.key===null&&(v=v.props.children),typeof v=="object"&&v!==null){switch(v.$$typeof){case Fa:e:{for(var y=v.key,T=h;T!==null;){if(T.key===y){if(y=v.type,y===Sn){if(T.tag===7){r(b,T.sibling),h=n(T,v.props.children),h.return=b,b=h;break e}}else if(T.elementType===y||typeof y=="object"&&y!==null&&y.$$typeof===uo&&Ap(y)===T.type){r(b,T.sibling),h=n(T,v.props),h.ref=yi(b,T,v),h.return=b,b=h;break e}r(b,T);break}else t(b,T);T=T.sibling}v.type===Sn?(h=Zo(v.props.children,b.mode,_,v.key),h.return=b,b=h):(_=wl(v.type,v.key,v.props,null,b.mode,_),_.ref=yi(b,h,v),_.return=b,b=_)}return a(b);case Rn:e:{for(T=v.key;h!==null;){if(h.key===T)if(h.tag===4&&h.stateNode.containerInfo===v.containerInfo&&h.stateNode.implementation===v.implementation){r(b,h.sibling),h=n(h,v.children||[]),h.return=b,b=h;break e}else{r(b,h);break}else t(b,h);h=h.sibling}h=Dc(v,b.mode,_),h.return=b,b=h}return a(b);case uo:return T=v._init,k(b,h,T(v._payload),_)}if(Li(v))return x(b,h,v,_);if(gi(v))return w(b,h,v,_);Ja(b,v)}return typeof v=="string"&&v!==""||typeof v=="number"?(v=""+v,h!==null&&h.tag===6?(r(b,h.sibling),h=n(h,v),h.return=b,b=h):(r(b,h),h=Ac(v,b.mode,_),h.return=b,b=h),a(b)):r(b,h)}return k}var qn=wb(!0),kb=wb(!1),$l=Ao(null),Yl=null,In=null,zd=null;function Fd(){zd=In=Yl=null}function Ud(e){var t=$l.current;ze($l),e._currentValue=t}function Lu(e,t,r){for(;e!==null;){var o=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,o!==null&&(o.childLanes|=t)):o!==null&&(o.childLanes&t)!==t&&(o.childLanes|=t),e===r)break;e=e.return}}function Vn(e,t){Yl=e,zd=In=null,e=e.dependencies,e!==null&&e.firstContext!==null&&(e.lanes&t&&(zt=!0),e.firstContext=null)}function pr(e){var t=e._currentValue;if(zd!==e)if(e={context:e,memoizedValue:t,next:null},In===null){if(Yl===null)throw Error(K(308));In=e,Yl.dependencies={lanes:0,firstContext:e}}else In=In.next=e;return t}var Xo=null;function Vd(e){Xo===null?Xo=[e]:Xo.push(e)}function Eb(e,t,r,o){var n=t.interleaved;return n===null?(r.next=r,Vd(t)):(r.next=n.next,n.next=r),t.interleaved=r,no(e,o)}function no(e,t){e.lanes|=t;var r=e.alternate;for(r!==null&&(r.lanes|=t),r=e,e=e.return;e!==null;)e.childLanes|=t,r=e.alternate,r!==null&&(r.childLanes|=t),r=e,e=e.return;return r.tag===3?r.stateNode:null}var fo=!1;function Wd(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Tb(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function Zr(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function To(e,t,r){var o=e.updateQueue;if(o===null)return null;if(o=o.shared,ke&2){var n=o.pending;return n===null?t.next=t:(t.next=n.next,n.next=t),o.pending=t,no(e,r)}return n=o.interleaved,n===null?(t.next=t,Vd(o)):(t.next=n.next,n.next=t),o.interleaved=t,no(e,r)}function bl(e,t,r){if(t=t.updateQueue,t!==null&&(t=t.shared,(r&4194240)!==0)){var o=t.lanes;o&=e.pendingLanes,r|=o,t.lanes=r,Ld(e,r)}}function Dp(e,t){var r=e.updateQueue,o=e.alternate;if(o!==null&&(o=o.updateQueue,r===o)){var n=null,i=null;if(r=r.firstBaseUpdate,r!==null){do{var a={eventTime:r.eventTime,lane:r.lane,tag:r.tag,payload:r.payload,callback:r.callback,next:null};i===null?n=i=a:i=i.next=a,r=r.next}while(r!==null);i===null?n=i=t:i=i.next=t}else n=i=t;r={baseState:o.baseState,firstBaseUpdate:n,lastBaseUpdate:i,shared:o.shared,effects:o.effects},e.updateQueue=r;return}e=r.lastBaseUpdate,e===null?r.firstBaseUpdate=t:e.next=t,r.lastBaseUpdate=t}function Xl(e,t,r,o){var n=e.updateQueue;fo=!1;var i=n.firstBaseUpdate,a=n.lastBaseUpdate,l=n.shared.pending;if(l!==null){n.shared.pending=null;var c=l,u=c.next;c.next=null,a===null?i=u:a.next=u,a=c;var d=e.alternate;d!==null&&(d=d.updateQueue,l=d.lastBaseUpdate,l!==a&&(l===null?d.firstBaseUpdate=u:l.next=u,d.lastBaseUpdate=c))}if(i!==null){var f=n.baseState;a=0,d=u=c=null,l=i;do{var p=l.lane,g=l.eventTime;if((o&p)===p){d!==null&&(d=d.next={eventTime:g,lane:0,tag:l.tag,payload:l.payload,callback:l.callback,next:null});e:{var x=e,w=l;switch(p=t,g=r,w.tag){case 1:if(x=w.payload,typeof x=="function"){f=x.call(g,f,p);break e}f=x;break e;case 3:x.flags=x.flags&-65537|128;case 0:if(x=w.payload,p=typeof x=="function"?x.call(g,f,p):x,p==null)break e;f=Xe({},f,p);break e;case 2:fo=!0}}l.callback!==null&&l.lane!==0&&(e.flags|=64,p=n.effects,p===null?n.effects=[l]:p.push(l))}else g={eventTime:g,lane:p,tag:l.tag,payload:l.payload,callback:l.callback,next:null},d===null?(u=d=g,c=f):d=d.next=g,a|=p;if(l=l.next,l===null){if(l=n.shared.pending,l===null)break;p=l,l=p.next,p.next=null,n.lastBaseUpdate=p,n.shared.pending=null}}while(!0);if(d===null&&(c=f),n.baseState=c,n.firstBaseUpdate=u,n.lastBaseUpdate=d,t=n.shared.interleaved,t!==null){n=t;do a|=n.lane,n=n.next;while(n!==t)}else i===null&&(n.shared.lanes=0);ln|=a,e.lanes=a,e.memoizedState=f}}function Ip(e,t,r){if(e=t.effects,t.effects=null,e!==null)for(t=0;tr?r:4,e(!0);var o=Lc.transition;Lc.transition={};try{e(!1),t()}finally{Oe=r,Lc.transition=o}}function Vb(){return hr().memoizedState}function iw(e,t,r){var o=So(e);if(r={lane:o,action:r,hasEagerState:!1,eagerState:null,next:null},Wb(e))Hb(t,r);else if(r=Eb(e,t,r,o),r!==null){var n=Mt();Er(r,e,o,n),$b(r,t,o)}}function aw(e,t,r){var o=So(e),n={lane:o,action:r,hasEagerState:!1,eagerState:null,next:null};if(Wb(e))Hb(t,n);else{var i=e.alternate;if(e.lanes===0&&(i===null||i.lanes===0)&&(i=t.lastRenderedReducer,i!==null))try{var a=t.lastRenderedState,l=i(a,r);if(n.hasEagerState=!0,n.eagerState=l,Tr(l,a)){var c=t.interleaved;c===null?(n.next=n,Vd(t)):(n.next=c.next,c.next=n),t.interleaved=n;return}}catch{}finally{}r=Eb(e,t,n,o),r!==null&&(n=Mt(),Er(r,e,o,n),$b(r,t,o))}}function Wb(e){var t=e.alternate;return e===Ye||t!==null&&t===Ye}function Hb(e,t){zi=Kl=!0;var r=e.pending;r===null?t.next=t:(t.next=r.next,r.next=t),e.pending=t}function $b(e,t,r){if(r&4194240){var o=t.lanes;o&=e.pendingLanes,r|=o,t.lanes=r,Ld(e,r)}}var ql={readContext:pr,useCallback:_t,useContext:_t,useEffect:_t,useImperativeHandle:_t,useInsertionEffect:_t,useLayoutEffect:_t,useMemo:_t,useReducer:_t,useRef:_t,useState:_t,useDebugValue:_t,useDeferredValue:_t,useTransition:_t,useMutableSource:_t,useSyncExternalStore:_t,useId:_t,unstable_isNewReconciler:!1},lw={readContext:pr,useCallback:function(e,t){return Or().memoizedState=[e,t===void 0?null:t],e},useContext:pr,useEffect:Bp,useImperativeHandle:function(e,t,r){return r=r!=null?r.concat([e]):null,ml(4194308,4,Bb.bind(null,t,e),r)},useLayoutEffect:function(e,t){return ml(4194308,4,e,t)},useInsertionEffect:function(e,t){return ml(4,2,e,t)},useMemo:function(e,t){var r=Or();return t=t===void 0?null:t,e=e(),r.memoizedState=[e,t],e},useReducer:function(e,t,r){var o=Or();return t=r!==void 0?r(t):t,o.memoizedState=o.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},o.queue=e,e=e.dispatch=iw.bind(null,Ye,e),[o.memoizedState,e]},useRef:function(e){var t=Or();return e={current:e},t.memoizedState=e},useState:jp,useDebugValue:Jd,useDeferredValue:function(e){return Or().memoizedState=e},useTransition:function(){var e=jp(!1),t=e[0];return e=nw.bind(null,e[1]),Or().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,r){var o=Ye,n=Or();if(Ve){if(r===void 0)throw Error(K(407));r=r()}else{if(r=t(),ht===null)throw Error(K(349));an&30||Cb(o,t,r)}n.memoizedState=r;var i={value:r,getSnapshot:t};return n.queue=i,Bp(Ob.bind(null,o,i,e),[e]),o.flags|=2048,fa(9,Nb.bind(null,o,i,r,t),void 0,null),r},useId:function(){var e=Or(),t=ht.identifierPrefix;if(Ve){var r=Kr,o=Gr;r=(o&~(1<<32-kr(o)-1)).toString(32)+r,t=":"+t+"R"+r,r=ua++,0")&&(c=c.replace("",e.displayName)),c}while(1<=a&&0<=l);break}}}finally{uc=!1,Error.prepareStackTrace=r}return(e=e?e.displayName||e.name:"")?Li(e):""}function Wy(e){switch(e.tag){case 5:return Li(e.type);case 16:return Li("Lazy");case 13:return Li("Suspense");case 19:return Li("SuspenseList");case 0:case 2:case 15:return e=dc(e.type,!1),e;case 11:return e=dc(e.type.render,!1),e;case 1:return e=dc(e.type,!0),e;default:return""}}function ru(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case Sn:return"Fragment";case Rn:return"Portal";case Qc:return"Profiler";case wd:return"StrictMode";case eu:return"Suspense";case tu:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case wg:return(e.displayName||"Context")+".Consumer";case _g:return(e._context.displayName||"Context")+".Provider";case kd:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case Ed:return t=e.displayName||null,t!==null?t:ru(e.type)||"Memo";case uo:t=e._payload,e=e._init;try{return ru(e(t))}catch{}}return null}function Hy(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return ru(t);case 8:return t===wd?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function No(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function Eg(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function $y(e){var t=Eg(e)?"checked":"value",r=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),o=""+e[t];if(!e.hasOwnProperty(t)&&typeof r<"u"&&typeof r.get=="function"&&typeof r.set=="function"){var n=r.get,i=r.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return n.call(this)},set:function(a){o=""+a,i.call(this,a)}}),Object.defineProperty(e,t,{enumerable:r.enumerable}),{getValue:function(){return o},setValue:function(a){o=""+a},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function Va(e){e._valueTracker||(e._valueTracker=$y(e))}function Tg(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var r=t.getValue(),o="";return e&&(o=Eg(e)?e.checked?"true":"false":e.value),e=o,e!==r?(t.setValue(e),!0):!1}function Al(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function ou(e,t){var r=t.checked;return Xe({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:r??e._wrapperState.initialChecked})}function Qf(e,t){var r=t.defaultValue==null?"":t.defaultValue,o=t.checked!=null?t.checked:t.defaultChecked;r=No(t.value!=null?t.value:r),e._wrapperState={initialChecked:o,initialValue:r,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function Rg(e,t){t=t.checked,t!=null&&_d(e,"checked",t,!1)}function nu(e,t){Rg(e,t);var r=No(t.value),o=t.type;if(r!=null)o==="number"?(r===0&&e.value===""||e.value!=r)&&(e.value=""+r):e.value!==""+r&&(e.value=""+r);else if(o==="submit"||o==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?iu(e,t.type,r):t.hasOwnProperty("defaultValue")&&iu(e,t.type,No(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function ep(e,t,r){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var o=t.type;if(!(o!=="submit"&&o!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,r||t===e.value||(e.value=t),e.defaultValue=t}r=e.name,r!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,r!==""&&(e.name=r)}function iu(e,t,r){(t!=="number"||Al(e.ownerDocument)!==e)&&(r==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+r&&(e.defaultValue=""+r))}var Ci=Array.isArray;function Bn(e,t,r,o){if(e=e.options,t){t={};for(var n=0;n"+t.valueOf().toString()+"",t=Wa.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function Zi(e,t){if(t){var r=e.firstChild;if(r&&r===e.lastChild&&r.nodeType===3){r.nodeValue=t;return}}e.textContent=t}var Ii={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},Yy=["Webkit","ms","Moz","O"];Object.keys(Ii).forEach(function(e){Yy.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Ii[t]=Ii[e]})});function Ng(e,t,r){return t==null||typeof t=="boolean"||t===""?"":r||typeof t!="number"||t===0||Ii.hasOwnProperty(e)&&Ii[e]?(""+t).trim():t+"px"}function Og(e,t){e=e.style;for(var r in t)if(t.hasOwnProperty(r)){var o=r.indexOf("--")===0,n=Ng(r,t[r],o);r==="float"&&(r="cssFloat"),o?e.setProperty(r,n):e[r]=n}}var Xy=Xe({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function su(e,t){if(t){if(Xy[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(K(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(K(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(K(61))}if(t.style!=null&&typeof t.style!="object")throw Error(K(62))}}function cu(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var uu=null;function Td(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var du=null,zn=null,Fn=null;function op(e){if(e=La(e)){if(typeof du!="function")throw Error(K(280));var t=e.stateNode;t&&(t=Os(t),du(e.stateNode,e.type,t))}}function Mg(e){zn?Fn?Fn.push(e):Fn=[e]:zn=e}function Ag(){if(zn){var e=zn,t=Fn;if(Fn=zn=null,op(e),t)for(e=0;e>>=0,e===0?32:31-(n_(e)/i_|0)|0}var Ha=64,$a=4194304;function Ni(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function Pl(e,t){var r=e.pendingLanes;if(r===0)return 0;var o=0,n=e.suspendedLanes,i=e.pingedLanes,a=r&268435455;if(a!==0){var l=a&~n;l!==0?o=Ni(l):(i&=a,i!==0&&(o=Ni(i)))}else a=r&~n,a!==0?o=Ni(a):i!==0&&(o=Ni(i));if(o===0)return 0;if(t!==0&&t!==o&&!(t&n)&&(n=o&-o,i=t&-t,n>=i||n===16&&(i&4194240)!==0))return t;if(o&4&&(o|=r&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=o;0r;r++)t.push(e);return t}function Ra(e,t,r){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-wr(t),e[t]=r}function c_(e,t){var r=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var o=e.eventTimes;for(e=e.expirationTimes;0=Pi),fp=" ",pp=!1;function Qg(e,t){switch(e){case"keyup":return P_.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function eb(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Ln=!1;function z_(e,t){switch(e){case"compositionend":return eb(t);case"keypress":return t.which!==32?null:(pp=!0,fp);case"textInput":return e=t.data,e===fp&&pp?null:e;default:return null}}function F_(e,t){if(Ln)return e==="compositionend"||!Ad&&Qg(e,t)?(e=Jg(),gl=Nd=bo=null,Ln=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:r,offset:t-e};e=o}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=vp(r)}}function nb(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?nb(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function ib(){for(var e=window,t=Al();t instanceof e.HTMLIFrameElement;){try{var r=typeof t.contentWindow.location.href=="string"}catch{r=!1}if(r)e=t.contentWindow;else break;t=Al(e.document)}return t}function Dd(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}function K_(e){var t=ib(),r=e.focusedElem,o=e.selectionRange;if(t!==r&&r&&r.ownerDocument&&nb(r.ownerDocument.documentElement,r)){if(o!==null&&Dd(r)){if(t=o.start,e=o.end,e===void 0&&(e=t),"selectionStart"in r)r.selectionStart=t,r.selectionEnd=Math.min(e,r.value.length);else if(e=(t=r.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var n=r.textContent.length,i=Math.min(o.start,n);o=o.end===void 0?i:Math.min(o.end,n),!e.extend&&i>o&&(n=o,o=i,i=n),n=mp(r,i);var a=mp(r,o);n&&a&&(e.rangeCount!==1||e.anchorNode!==n.node||e.anchorOffset!==n.offset||e.focusNode!==a.node||e.focusOffset!==a.offset)&&(t=t.createRange(),t.setStart(n.node,n.offset),e.removeAllRanges(),i>o?(e.addRange(t),e.extend(a.node,a.offset)):(t.setEnd(a.node,a.offset),e.addRange(t)))}}for(t=[],e=r;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof r.focus=="function"&&r.focus(),r=0;r=document.documentMode,Cn=null,vu=null,zi=null,mu=!1;function xp(e,t,r){var o=r.window===r?r.document:r.nodeType===9?r:r.ownerDocument;mu||Cn==null||Cn!==Al(o)||(o=Cn,"selectionStart"in o&&Dd(o)?o={start:o.selectionStart,end:o.selectionEnd}:(o=(o.ownerDocument&&o.ownerDocument.defaultView||window).getSelection(),o={anchorNode:o.anchorNode,anchorOffset:o.anchorOffset,focusNode:o.focusNode,focusOffset:o.focusOffset}),zi&&na(zi,o)||(zi=o,o=Fl(vu,"onSelect"),0Mn||(e.current=Eu[Mn],Eu[Mn]=null,Mn--)}function Pe(e,t){Mn++,Eu[Mn]=e.current,e.current=t}var Oo={},Ct=Ao(Oo),Ut=Ao(!1),on=Oo;function Gn(e,t){var r=e.type.contextTypes;if(!r)return Oo;var o=e.stateNode;if(o&&o.__reactInternalMemoizedUnmaskedChildContext===t)return o.__reactInternalMemoizedMaskedChildContext;var n={},i;for(i in r)n[i]=t[i];return o&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=n),n}function Vt(e){return e=e.childContextTypes,e!=null}function Vl(){ze(Ut),ze(Ct)}function Rp(e,t,r){if(Ct.current!==Oo)throw Error(K(168));Pe(Ct,t),Pe(Ut,r)}function hb(e,t,r){var o=e.stateNode;if(t=t.childContextTypes,typeof o.getChildContext!="function")return r;o=o.getChildContext();for(var n in o)if(!(n in t))throw Error(K(108,Hy(e)||"Unknown",n));return Xe({},r,o)}function Wl(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Oo,on=Ct.current,Pe(Ct,e),Pe(Ut,Ut.current),!0}function Sp(e,t,r){var o=e.stateNode;if(!o)throw Error(K(169));r?(e=hb(e,t,on),o.__reactInternalMemoizedMergedChildContext=e,ze(Ut),ze(Ct),Pe(Ct,e)):ze(Ut),Pe(Ut,r)}var $r=null,Ms=!1,Tc=!1;function gb(e){$r===null?$r=[e]:$r.push(e)}function lw(e){Ms=!0,gb(e)}function Do(){if(!Tc&&$r!==null){Tc=!0;var e=0,t=Oe;try{var r=$r;for(Oe=1;e>=a,n-=a,Gr=1<<32-wr(t)+n|r<z?(N=S,S=null):N=S.sibling;var B=p(b,S,v[z],_);if(B===null){S===null&&(S=N);break}e&&S&&B.alternate===null&&t(b,S),h=i(B,h,z),T===null?y=B:T.sibling=B,T=B,S=N}if(z===v.length)return r(b,S),Ve&&Uo(b,z),y;if(S===null){for(;zz?(N=S,S=null):N=S.sibling;var P=p(b,S,B.value,_);if(P===null){S===null&&(S=N);break}e&&S&&P.alternate===null&&t(b,S),h=i(P,h,z),T===null?y=P:T.sibling=P,T=P,S=N}if(B.done)return r(b,S),Ve&&Uo(b,z),y;if(S===null){for(;!B.done;z++,B=v.next())B=f(b,B.value,_),B!==null&&(h=i(B,h,z),T===null?y=B:T.sibling=B,T=B);return Ve&&Uo(b,z),y}for(S=o(b,S);!B.done;z++,B=v.next())B=g(S,b,z,B.value,_),B!==null&&(e&&B.alternate!==null&&S.delete(B.key===null?z:B.key),h=i(B,h,z),T===null?y=B:T.sibling=B,T=B);return e&&S.forEach(function(O){return t(b,O)}),Ve&&Uo(b,z),y}function k(b,h,v,_){if(typeof v=="object"&&v!==null&&v.type===Sn&&v.key===null&&(v=v.props.children),typeof v=="object"&&v!==null){switch(v.$$typeof){case Ua:e:{for(var y=v.key,T=h;T!==null;){if(T.key===y){if(y=v.type,y===Sn){if(T.tag===7){r(b,T.sibling),h=n(T,v.props.children),h.return=b,b=h;break e}}else if(T.elementType===y||typeof y=="object"&&y!==null&&y.$$typeof===uo&&Np(y)===T.type){r(b,T.sibling),h=n(T,v.props),h.ref=_i(b,T,v),h.return=b,b=h;break e}r(b,T);break}else t(b,T);T=T.sibling}v.type===Sn?(h=Zo(v.props.children,b.mode,_,v.key),h.return=b,b=h):(_=kl(v.type,v.key,v.props,null,b.mode,_),_.ref=_i(b,h,v),_.return=b,b=_)}return a(b);case Rn:e:{for(T=v.key;h!==null;){if(h.key===T)if(h.tag===4&&h.stateNode.containerInfo===v.containerInfo&&h.stateNode.implementation===v.implementation){r(b,h.sibling),h=n(h,v.children||[]),h.return=b,b=h;break e}else{r(b,h);break}else t(b,h);h=h.sibling}h=Ac(v,b.mode,_),h.return=b,b=h}return a(b);case uo:return T=v._init,k(b,h,T(v._payload),_)}if(Ci(v))return x(b,h,v,_);if(bi(v))return w(b,h,v,_);Za(b,v)}return typeof v=="string"&&v!==""||typeof v=="number"?(v=""+v,h!==null&&h.tag===6?(r(b,h.sibling),h=n(h,v),h.return=b,b=h):(r(b,h),h=Mc(v,b.mode,_),h.return=b,b=h),a(b)):r(b,h)}return k}var qn=xb(!0),yb=xb(!1),Yl=Ao(null),Xl=null,In=null,Bd=null;function zd(){Bd=In=Xl=null}function Fd(e){var t=Yl.current;ze(Yl),e._currentValue=t}function Su(e,t,r){for(;e!==null;){var o=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,o!==null&&(o.childLanes|=t)):o!==null&&(o.childLanes&t)!==t&&(o.childLanes|=t),e===r)break;e=e.return}}function Vn(e,t){Xl=e,Bd=In=null,e=e.dependencies,e!==null&&e.firstContext!==null&&(e.lanes&t&&(zt=!0),e.firstContext=null)}function pr(e){var t=e._currentValue;if(Bd!==e)if(e={context:e,memoizedValue:t,next:null},In===null){if(Xl===null)throw Error(K(308));In=e,Xl.dependencies={lanes:0,firstContext:e}}else In=In.next=e;return t}var Xo=null;function Ud(e){Xo===null?Xo=[e]:Xo.push(e)}function _b(e,t,r,o){var n=t.interleaved;return n===null?(r.next=r,Ud(t)):(r.next=n.next,n.next=r),t.interleaved=r,no(e,o)}function no(e,t){e.lanes|=t;var r=e.alternate;for(r!==null&&(r.lanes|=t),r=e,e=e.return;e!==null;)e.childLanes|=t,r=e.alternate,r!==null&&(r.childLanes|=t),r=e,e=e.return;return r.tag===3?r.stateNode:null}var fo=!1;function Vd(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function wb(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function Zr(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function To(e,t,r){var o=e.updateQueue;if(o===null)return null;if(o=o.shared,ke&2){var n=o.pending;return n===null?t.next=t:(t.next=n.next,n.next=t),o.pending=t,no(e,r)}return n=o.interleaved,n===null?(t.next=t,Ud(o)):(t.next=n.next,n.next=t),o.interleaved=t,no(e,r)}function vl(e,t,r){if(t=t.updateQueue,t!==null&&(t=t.shared,(r&4194240)!==0)){var o=t.lanes;o&=e.pendingLanes,r|=o,t.lanes=r,Sd(e,r)}}function Op(e,t){var r=e.updateQueue,o=e.alternate;if(o!==null&&(o=o.updateQueue,r===o)){var n=null,i=null;if(r=r.firstBaseUpdate,r!==null){do{var a={eventTime:r.eventTime,lane:r.lane,tag:r.tag,payload:r.payload,callback:r.callback,next:null};i===null?n=i=a:i=i.next=a,r=r.next}while(r!==null);i===null?n=i=t:i=i.next=t}else n=i=t;r={baseState:o.baseState,firstBaseUpdate:n,lastBaseUpdate:i,shared:o.shared,effects:o.effects},e.updateQueue=r;return}e=r.lastBaseUpdate,e===null?r.firstBaseUpdate=t:e.next=t,r.lastBaseUpdate=t}function Gl(e,t,r,o){var n=e.updateQueue;fo=!1;var i=n.firstBaseUpdate,a=n.lastBaseUpdate,l=n.shared.pending;if(l!==null){n.shared.pending=null;var c=l,u=c.next;c.next=null,a===null?i=u:a.next=u,a=c;var d=e.alternate;d!==null&&(d=d.updateQueue,l=d.lastBaseUpdate,l!==a&&(l===null?d.firstBaseUpdate=u:l.next=u,d.lastBaseUpdate=c))}if(i!==null){var f=n.baseState;a=0,d=u=c=null,l=i;do{var p=l.lane,g=l.eventTime;if((o&p)===p){d!==null&&(d=d.next={eventTime:g,lane:0,tag:l.tag,payload:l.payload,callback:l.callback,next:null});e:{var x=e,w=l;switch(p=t,g=r,w.tag){case 1:if(x=w.payload,typeof x=="function"){f=x.call(g,f,p);break e}f=x;break e;case 3:x.flags=x.flags&-65537|128;case 0:if(x=w.payload,p=typeof x=="function"?x.call(g,f,p):x,p==null)break e;f=Xe({},f,p);break e;case 2:fo=!0}}l.callback!==null&&l.lane!==0&&(e.flags|=64,p=n.effects,p===null?n.effects=[l]:p.push(l))}else g={eventTime:g,lane:p,tag:l.tag,payload:l.payload,callback:l.callback,next:null},d===null?(u=d=g,c=f):d=d.next=g,a|=p;if(l=l.next,l===null){if(l=n.shared.pending,l===null)break;p=l,l=p.next,p.next=null,n.lastBaseUpdate=p,n.shared.pending=null}}while(!0);if(d===null&&(c=f),n.baseState=c,n.firstBaseUpdate=u,n.lastBaseUpdate=d,t=n.shared.interleaved,t!==null){n=t;do a|=n.lane,n=n.next;while(n!==t)}else i===null&&(n.shared.lanes=0);ln|=a,e.lanes=a,e.memoizedState=f}}function Mp(e,t,r){if(e=t.effects,t.effects=null,e!==null)for(t=0;tr?r:4,e(!0);var o=Sc.transition;Sc.transition={};try{e(!1),t()}finally{Oe=r,Sc.transition=o}}function zb(){return hr().memoizedState}function dw(e,t,r){var o=So(e);if(r={lane:o,action:r,hasEagerState:!1,eagerState:null,next:null},Fb(e))Ub(t,r);else if(r=_b(e,t,r,o),r!==null){var n=Mt();kr(r,e,o,n),Vb(r,t,o)}}function fw(e,t,r){var o=So(e),n={lane:o,action:r,hasEagerState:!1,eagerState:null,next:null};if(Fb(e))Ub(t,n);else{var i=e.alternate;if(e.lanes===0&&(i===null||i.lanes===0)&&(i=t.lastRenderedReducer,i!==null))try{var a=t.lastRenderedState,l=i(a,r);if(n.hasEagerState=!0,n.eagerState=l,Er(l,a)){var c=t.interleaved;c===null?(n.next=n,Ud(t)):(n.next=c.next,c.next=n),t.interleaved=n;return}}catch{}finally{}r=_b(e,t,n,o),r!==null&&(n=Mt(),kr(r,e,o,n),Vb(r,t,o))}}function Fb(e){var t=e.alternate;return e===Ye||t!==null&&t===Ye}function Ub(e,t){Fi=ql=!0;var r=e.pending;r===null?t.next=t:(t.next=r.next,r.next=t),e.pending=t}function Vb(e,t,r){if(r&4194240){var o=t.lanes;o&=e.pendingLanes,r|=o,t.lanes=r,Sd(e,r)}}var Jl={readContext:pr,useCallback:_t,useContext:_t,useEffect:_t,useImperativeHandle:_t,useInsertionEffect:_t,useLayoutEffect:_t,useMemo:_t,useReducer:_t,useRef:_t,useState:_t,useDebugValue:_t,useDeferredValue:_t,useTransition:_t,useMutableSource:_t,useSyncExternalStore:_t,useId:_t,unstable_isNewReconciler:!1},pw={readContext:pr,useCallback:function(e,t){return Or().memoizedState=[e,t===void 0?null:t],e},useContext:pr,useEffect:Dp,useImperativeHandle:function(e,t,r){return r=r!=null?r.concat([e]):null,xl(4194308,4,Db.bind(null,t,e),r)},useLayoutEffect:function(e,t){return xl(4194308,4,e,t)},useInsertionEffect:function(e,t){return xl(4,2,e,t)},useMemo:function(e,t){var r=Or();return t=t===void 0?null:t,e=e(),r.memoizedState=[e,t],e},useReducer:function(e,t,r){var o=Or();return t=r!==void 0?r(t):t,o.memoizedState=o.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},o.queue=e,e=e.dispatch=dw.bind(null,Ye,e),[o.memoizedState,e]},useRef:function(e){var t=Or();return e={current:e},t.memoizedState=e},useState:Ap,useDebugValue:qd,useDeferredValue:function(e){return Or().memoizedState=e},useTransition:function(){var e=Ap(!1),t=e[0];return e=uw.bind(null,e[1]),Or().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,r){var o=Ye,n=Or();if(Ve){if(r===void 0)throw Error(K(407));r=r()}else{if(r=t(),ht===null)throw Error(K(349));an&30||Rb(o,t,r)}n.memoizedState=r;var i={value:r,getSnapshot:t};return n.queue=i,Dp(Lb.bind(null,o,i,e),[e]),o.flags|=2048,fa(9,Sb.bind(null,o,i,r,t),void 0,null),r},useId:function(){var e=Or(),t=ht.identifierPrefix;if(Ve){var r=Kr,o=Gr;r=(o&~(1<<32-wr(o)-1)).toString(32)+r,t=":"+t+"R"+r,r=ua++,0<\/script>",e=e.removeChild(e.firstChild)):typeof o.is=="string"?e=a.createElement(r,{is:o.is}):(e=a.createElement(r),r==="select"&&(a=e,o.multiple?a.multiple=!0:o.size&&(a.size=o.size))):e=a.createElementNS(e,r),e[Dr]=t,e[la]=o,tv(e,t,!1,!1),t.stateNode=e;e:{switch(a=uu(r,o),r){case"dialog":Pe("cancel",e),Pe("close",e),n=o;break;case"iframe":case"object":case"embed":Pe("load",e),n=o;break;case"video":case"audio":for(n=0;nQn&&(t.flags|=128,o=!0,_i(i,!1),t.lanes=4194304)}else{if(!o)if(e=Gl(a),e!==null){if(t.flags|=128,o=!0,r=e.updateQueue,r!==null&&(t.updateQueue=r,t.flags|=4),_i(i,!0),i.tail===null&&i.tailMode==="hidden"&&!a.alternate&&!Ve)return wt(t),null}else 2*Je()-i.renderingStartTime>Qn&&r!==1073741824&&(t.flags|=128,o=!0,_i(i,!1),t.lanes=4194304);i.isBackwards?(a.sibling=t.child,t.child=a):(r=i.last,r!==null?r.sibling=a:t.child=a,i.last=a)}return i.tail!==null?(t=i.tail,i.rendering=t,i.tail=t.sibling,i.renderingStartTime=Je(),t.sibling=null,r=$e.current,Be($e,o?r&1|2:r&1),t):(wt(t),null);case 22:case 23:return of(),o=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==o&&(t.flags|=8192),o&&t.mode&1?Gt&1073741824&&(wt(t),t.subtreeFlags&6&&(t.flags|=8192)):wt(t),null;case 24:return null;case 25:return null}throw Error(K(156,t.tag))}function gw(e,t){switch(Bd(t),t.tag){case 1:return Vt(t.type)&&Ul(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return Jn(),ze(Ut),ze(Ct),Yd(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return $d(t),null;case 13:if(ze($e),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(K(340));Kn()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return ze($e),null;case 4:return Jn(),null;case 10:return Ud(t.type._context),null;case 22:case 23:return of(),null;case 24:return null;default:return null}}var Qa=!1,St=!1,bw=typeof WeakSet=="function"?WeakSet:Set,ae=null;function jn(e,t){var r=e.ref;if(r!==null)if(typeof r=="function")try{r(null)}catch(o){Ge(e,t,o)}else r.current=null}function Bu(e,t,r){try{r()}catch(o){Ge(e,t,o)}}var Gp=!1;function vw(e,t){if(yu=Bl,e=sb(),Id(e)){if("selectionStart"in e)var r={start:e.selectionStart,end:e.selectionEnd};else e:{r=(r=e.ownerDocument)&&r.defaultView||window;var o=r.getSelection&&r.getSelection();if(o&&o.rangeCount!==0){r=o.anchorNode;var n=o.anchorOffset,i=o.focusNode;o=o.focusOffset;try{r.nodeType,i.nodeType}catch{r=null;break e}var a=0,l=-1,c=-1,u=0,d=0,f=e,p=null;t:for(;;){for(var g;f!==r||n!==0&&f.nodeType!==3||(l=a+n),f!==i||o!==0&&f.nodeType!==3||(c=a+o),f.nodeType===3&&(a+=f.nodeValue.length),(g=f.firstChild)!==null;)p=f,f=g;for(;;){if(f===e)break t;if(p===r&&++u===n&&(l=a),p===i&&++d===o&&(c=a),(g=f.nextSibling)!==null)break;f=p,p=f.parentNode}f=g}r=l===-1||c===-1?null:{start:l,end:c}}else r=null}r=r||{start:0,end:0}}else r=null;for(_u={focusedElem:e,selectionRange:r},Bl=!1,ae=t;ae!==null;)if(t=ae,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,ae=e;else for(;ae!==null;){t=ae;try{var x=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(x!==null){var w=x.memoizedProps,k=x.memoizedState,b=t.stateNode,h=b.getSnapshotBeforeUpdate(t.elementType===t.type?w:xr(t.type,w),k);b.__reactInternalSnapshotBeforeUpdate=h}break;case 3:var v=t.stateNode.containerInfo;v.nodeType===1?v.textContent="":v.nodeType===9&&v.documentElement&&v.removeChild(v.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(K(163))}}catch(_){Ge(t,t.return,_)}if(e=t.sibling,e!==null){e.return=t.return,ae=e;break}ae=t.return}return x=Gp,Gp=!1,x}function Fi(e,t,r){var o=t.updateQueue;if(o=o!==null?o.lastEffect:null,o!==null){var n=o=o.next;do{if((n.tag&e)===e){var i=n.destroy;n.destroy=void 0,i!==void 0&&Bu(t,r,i)}n=n.next}while(n!==o)}}function Is(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var r=t=t.next;do{if((r.tag&e)===e){var o=r.create;r.destroy=o()}r=r.next}while(r!==t)}}function Pu(e){var t=e.ref;if(t!==null){var r=e.stateNode;switch(e.tag){case 5:e=r;break;default:e=r}typeof t=="function"?t(e):t.current=e}}function nv(e){var t=e.alternate;t!==null&&(e.alternate=null,nv(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[Dr],delete t[la],delete t[Eu],delete t[Q_],delete t[ew])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function iv(e){return e.tag===5||e.tag===3||e.tag===4}function Kp(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||iv(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function zu(e,t,r){var o=e.tag;if(o===5||o===6)e=e.stateNode,t?r.nodeType===8?r.parentNode.insertBefore(e,t):r.insertBefore(e,t):(r.nodeType===8?(t=r.parentNode,t.insertBefore(e,r)):(t=r,t.appendChild(e)),r=r._reactRootContainer,r!=null||t.onclick!==null||(t.onclick=Fl));else if(o!==4&&(e=e.child,e!==null))for(zu(e,t,r),e=e.sibling;e!==null;)zu(e,t,r),e=e.sibling}function Fu(e,t,r){var o=e.tag;if(o===5||o===6)e=e.stateNode,t?r.insertBefore(e,t):r.appendChild(e);else if(o!==4&&(e=e.child,e!==null))for(Fu(e,t,r),e=e.sibling;e!==null;)Fu(e,t,r),e=e.sibling}var bt=null,yr=!1;function so(e,t,r){for(r=r.child;r!==null;)av(e,t,r),r=r.sibling}function av(e,t,r){if(Br&&typeof Br.onCommitFiberUnmount=="function")try{Br.onCommitFiberUnmount(Ss,r)}catch{}switch(r.tag){case 5:St||jn(r,t);case 6:var o=bt,n=yr;bt=null,so(e,t,r),bt=o,yr=n,bt!==null&&(yr?(e=bt,r=r.stateNode,e.nodeType===8?e.parentNode.removeChild(r):e.removeChild(r)):bt.removeChild(r.stateNode));break;case 18:bt!==null&&(yr?(e=bt,r=r.stateNode,e.nodeType===8?Tc(e.parentNode,r):e.nodeType===1&&Tc(e,r),ra(e)):Tc(bt,r.stateNode));break;case 4:o=bt,n=yr,bt=r.stateNode.containerInfo,yr=!0,so(e,t,r),bt=o,yr=n;break;case 0:case 11:case 14:case 15:if(!St&&(o=r.updateQueue,o!==null&&(o=o.lastEffect,o!==null))){n=o=o.next;do{var i=n,a=i.destroy;i=i.tag,a!==void 0&&(i&2||i&4)&&Bu(r,t,a),n=n.next}while(n!==o)}so(e,t,r);break;case 1:if(!St&&(jn(r,t),o=r.stateNode,typeof o.componentWillUnmount=="function"))try{o.props=r.memoizedProps,o.state=r.memoizedState,o.componentWillUnmount()}catch(l){Ge(r,t,l)}so(e,t,r);break;case 21:so(e,t,r);break;case 22:r.mode&1?(St=(o=St)||r.memoizedState!==null,so(e,t,r),St=o):so(e,t,r);break;default:so(e,t,r)}}function qp(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var r=e.stateNode;r===null&&(r=e.stateNode=new bw),t.forEach(function(o){var n=Rw.bind(null,e,o);r.has(o)||(r.add(o),o.then(n,n))})}}function mr(e,t){var r=t.deletions;if(r!==null)for(var o=0;on&&(n=a),o&=~i}if(o=n,o=Je()-o,o=(120>o?120:480>o?480:1080>o?1080:1920>o?1920:3e3>o?3e3:4320>o?4320:1960*xw(o/1960))-o,10e?16:e,vo===null)var o=!1;else{if(e=vo,vo=null,Ql=0,ke&6)throw Error(K(331));var n=ke;for(ke|=4,ae=e.current;ae!==null;){var i=ae,a=i.child;if(ae.flags&16){var l=i.deletions;if(l!==null){for(var c=0;cJe()-tf?Jo(e,0):ef|=r),Wt(e,t)}function hv(e,t){t===0&&(e.mode&1?(t=Ha,Ha<<=1,!(Ha&130023424)&&(Ha=4194304)):t=1);var r=Mt();e=no(e,t),e!==null&&(Ra(e,t,r),Wt(e,r))}function Tw(e){var t=e.memoizedState,r=0;t!==null&&(r=t.retryLane),hv(e,r)}function Rw(e,t){var r=0;switch(e.tag){case 13:var o=e.stateNode,n=e.memoizedState;n!==null&&(r=n.retryLane);break;case 19:o=e.stateNode;break;default:throw Error(K(314))}o!==null&&o.delete(t),hv(e,r)}var gv;gv=function(e,t,r){if(e!==null)if(e.memoizedProps!==t.pendingProps||Ut.current)zt=!0;else{if(!(e.lanes&r)&&!(t.flags&128))return zt=!1,pw(e,t,r);zt=!!(e.flags&131072)}else zt=!1,Ve&&t.flags&1048576&&xb(t,Hl,t.index);switch(t.lanes=0,t.tag){case 2:var o=t.type;xl(e,t),e=t.pendingProps;var n=Gn(t,Ct.current);Vn(t,r),n=Gd(null,t,o,e,n,r);var i=Kd();return t.flags|=1,typeof n=="object"&&n!==null&&typeof n.render=="function"&&n.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,Vt(o)?(i=!0,Vl(t)):i=!1,t.memoizedState=n.state!==null&&n.state!==void 0?n.state:null,Wd(t),n.updater=Ds,t.stateNode=n,n._reactInternals=t,Nu(t,o,e,r),t=Au(null,t,o,!0,i,r)):(t.tag=0,Ve&&i&&jd(t),Nt(null,t,n,r),t=t.child),t;case 16:o=t.elementType;e:{switch(xl(e,t),e=t.pendingProps,n=o._init,o=n(o._payload),t.type=o,n=t.tag=Lw(o),e=xr(o,e),n){case 0:t=Mu(null,t,o,e,r);break e;case 1:t=$p(null,t,o,e,r);break e;case 11:t=Wp(null,t,o,e,r);break e;case 14:t=Hp(null,t,o,xr(o.type,e),r);break e}throw Error(K(306,o,""))}return t;case 0:return o=t.type,n=t.pendingProps,n=t.elementType===o?n:xr(o,n),Mu(e,t,o,n,r);case 1:return o=t.type,n=t.pendingProps,n=t.elementType===o?n:xr(o,n),$p(e,t,o,n,r);case 3:e:{if(Zb(t),e===null)throw Error(K(387));o=t.pendingProps,i=t.memoizedState,n=i.element,Tb(e,t),Xl(t,o,null,r);var a=t.memoizedState;if(o=a.element,i.isDehydrated)if(i={element:o,isDehydrated:!1,cache:a.cache,pendingSuspenseBoundaries:a.pendingSuspenseBoundaries,transitions:a.transitions},t.updateQueue.baseState=i,t.memoizedState=i,t.flags&256){n=Zn(Error(K(423)),t),t=Yp(e,t,o,r,n);break e}else if(o!==n){n=Zn(Error(K(424)),t),t=Yp(e,t,o,r,n);break e}else for(Jt=Eo(t.stateNode.containerInfo.firstChild),Zt=t,Ve=!0,_r=null,r=kb(t,null,o,r),t.child=r;r;)r.flags=r.flags&-3|4096,r=r.sibling;else{if(Kn(),o===n){t=io(e,t,r);break e}Nt(e,t,o,r)}t=t.child}return t;case 5:return Rb(t),e===null&&Su(t),o=t.type,n=t.pendingProps,i=e!==null?e.memoizedProps:null,a=n.children,wu(o,n)?a=null:i!==null&&wu(o,i)&&(t.flags|=32),Jb(e,t),Nt(e,t,a,r),t.child;case 6:return e===null&&Su(t),null;case 13:return Qb(e,t,r);case 4:return Hd(t,t.stateNode.containerInfo),o=t.pendingProps,e===null?t.child=qn(t,null,o,r):Nt(e,t,o,r),t.child;case 11:return o=t.type,n=t.pendingProps,n=t.elementType===o?n:xr(o,n),Wp(e,t,o,n,r);case 7:return Nt(e,t,t.pendingProps,r),t.child;case 8:return Nt(e,t,t.pendingProps.children,r),t.child;case 12:return Nt(e,t,t.pendingProps.children,r),t.child;case 10:e:{if(o=t.type._context,n=t.pendingProps,i=t.memoizedProps,a=n.value,Be($l,o._currentValue),o._currentValue=a,i!==null)if(Tr(i.value,a)){if(i.children===n.children&&!Ut.current){t=io(e,t,r);break e}}else for(i=t.child,i!==null&&(i.return=t);i!==null;){var l=i.dependencies;if(l!==null){a=i.child;for(var c=l.firstContext;c!==null;){if(c.context===o){if(i.tag===1){c=Zr(-1,r&-r),c.tag=2;var u=i.updateQueue;if(u!==null){u=u.shared;var d=u.pending;d===null?c.next=c:(c.next=d.next,d.next=c),u.pending=c}}i.lanes|=r,c=i.alternate,c!==null&&(c.lanes|=r),Lu(i.return,r,t),l.lanes|=r;break}c=c.next}}else if(i.tag===10)a=i.type===t.type?null:i.child;else if(i.tag===18){if(a=i.return,a===null)throw Error(K(341));a.lanes|=r,l=a.alternate,l!==null&&(l.lanes|=r),Lu(a,r,t),a=i.sibling}else a=i.child;if(a!==null)a.return=i;else for(a=i;a!==null;){if(a===t){a=null;break}if(i=a.sibling,i!==null){i.return=a.return,a=i;break}a=a.return}i=a}Nt(e,t,n.children,r),t=t.child}return t;case 9:return n=t.type,o=t.pendingProps.children,Vn(t,r),n=pr(n),o=o(n),t.flags|=1,Nt(e,t,o,r),t.child;case 14:return o=t.type,n=xr(o,t.pendingProps),n=xr(o.type,n),Hp(e,t,o,n,r);case 15:return Kb(e,t,t.type,t.pendingProps,r);case 17:return o=t.type,n=t.pendingProps,n=t.elementType===o?n:xr(o,n),xl(e,t),t.tag=1,Vt(o)?(e=!0,Vl(t)):e=!1,Vn(t,r),Yb(t,o,n),Nu(t,o,n,r),Au(null,t,o,!0,e,r);case 19:return ev(e,t,r);case 22:return qb(e,t,r)}throw Error(K(156,t.tag))};function bv(e,t){return Wg(e,t)}function Sw(e,t,r,o){this.tag=e,this.key=r,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=o,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function ur(e,t,r,o){return new Sw(e,t,r,o)}function af(e){return e=e.prototype,!(!e||!e.isReactComponent)}function Lw(e){if(typeof e=="function")return af(e)?1:0;if(e!=null){if(e=e.$$typeof,e===Ed)return 11;if(e===Td)return 14}return 2}function Lo(e,t){var r=e.alternate;return r===null?(r=ur(e.tag,t,e.key,e.mode),r.elementType=e.elementType,r.type=e.type,r.stateNode=e.stateNode,r.alternate=e,e.alternate=r):(r.pendingProps=t,r.type=e.type,r.flags=0,r.subtreeFlags=0,r.deletions=null),r.flags=e.flags&14680064,r.childLanes=e.childLanes,r.lanes=e.lanes,r.child=e.child,r.memoizedProps=e.memoizedProps,r.memoizedState=e.memoizedState,r.updateQueue=e.updateQueue,t=e.dependencies,r.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},r.sibling=e.sibling,r.index=e.index,r.ref=e.ref,r}function wl(e,t,r,o,n,i){var a=2;if(o=e,typeof e=="function")af(e)&&(a=1);else if(typeof e=="string")a=5;else e:switch(e){case Sn:return Zo(r.children,n,i,t);case kd:a=8,n|=8;break;case eu:return e=ur(12,r,t,n|2),e.elementType=eu,e.lanes=i,e;case tu:return e=ur(13,r,t,n),e.elementType=tu,e.lanes=i,e;case ru:return e=ur(19,r,t,n),e.elementType=ru,e.lanes=i,e;case Rg:return Bs(r,n,i,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case Eg:a=10;break e;case Tg:a=9;break e;case Ed:a=11;break e;case Td:a=14;break e;case uo:a=16,o=null;break e}throw Error(K(130,e==null?e:typeof e,""))}return t=ur(a,r,t,n),t.elementType=e,t.type=o,t.lanes=i,t}function Zo(e,t,r,o){return e=ur(7,e,o,t),e.lanes=r,e}function Bs(e,t,r,o){return e=ur(22,e,o,t),e.elementType=Rg,e.lanes=r,e.stateNode={isHidden:!1},e}function Ac(e,t,r){return e=ur(6,e,null,t),e.lanes=r,e}function Dc(e,t,r){return t=ur(4,e.children!==null?e.children:[],e.key,t),t.lanes=r,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Cw(e,t,r,o,n){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=hc(0),this.expirationTimes=hc(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=hc(0),this.identifierPrefix=o,this.onRecoverableError=n,this.mutableSourceEagerHydrationData=null}function lf(e,t,r,o,n,i,a,l,c){return e=new Cw(e,t,r,l,c),t===1?(t=1,i===!0&&(t|=8)):t=0,i=ur(3,null,null,t),e.current=i,i.stateNode=e,i.memoizedState={element:o,isDehydrated:r,cache:null,transitions:null,pendingSuspenseBoundaries:null},Wd(i),e}function Nw(e,t,r){var o=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(yv)}catch(e){console.error(e)}}yv(),yg.exports=er;var Ur=yg.exports,ci,nh=Ur;ci=qi.createRoot=nh.createRoot,qi.hydrateRoot=nh.hydrateRoot;function ct(){return ly}function qr(){return sy}function _v(e){if(!e||typeof e!="object")return null;const t=e,r=t.rootGraph;if(r&&typeof r=="object")return r;const o=t.graph;return o&&typeof o=="object"?o:e}function wv(e){return e._nodes??e.nodes??[]}function Iw(e){return e._groups??e.groups??[]}function jw(e){if(e.subgraph&&typeof e.subgraph=="object")return e.subgraph;if(typeof e.getSubgraph=="function")try{return e.getSubgraph()??null}catch{return null}return null}function kv(e,t){const r=new Set,o=[{graph:e,path:[]}];for(;o.length;){const{graph:n,path:i}=o.pop(),a=n;if(!r.has(a)){r.add(a),t(n,i);for(const l of wv(n)){const c=jw(l);c&&o.push({graph:c,path:i.concat([{node:l,graph:n,depth:i.length+1}])})}}}}function Bw(){return globalThis.crypto?.randomUUID?.()??`bv-group-${Date.now()}-${Math.random().toString(16).slice(2)}`}function Pw(e,t){const r=e;r.flags??(r.flags={});let o=typeof r.flags.bvGroupId=="string"?r.flags.bvGroupId:"";if(!o||t.has(o)){do o=Bw();while(t.has(o));r.flags.bvGroupId=o}return t.add(o),o}function rs(e){const t=_v(e);if(!t)return[];const r=[],o=new Set;return kv(t,(n,i)=>{for(const a of Iw(n)){const c=[...i.map(u=>String(u.node.title||u.node.type||u.node.id)),String(a.title||"Untitled Group")].join(" / ");r.push({group:a,graph:n,path:i,id:Pw(a,o),pathLabel:c})}}),r}function zw(e,t){const r=_v(e);if(!r)return[];const o=[];return kv(r,(n,i)=>{for(const a of wv(n))Ev(a,t)&&o.push({node:a,graph:n,path:i})}),o}function Ev(e,t){const r=String(t);return[e.type,e.comfyClass,e.title,e.constructor?.name].filter(n=>typeof n=="string"&&n.length>0).map(String).includes(r)}const ei="bv-control-config-changed";function Fw(){return{version:2,forceActive:!1,controls:[]}}function df(e){var r;const t=ct()?.rootGraph;t&&(t.extra??(t.extra={}),(r=t.extra).bv_settings??(r.bv_settings={}),t.extra.bv_settings.controlConfig=e,t.setDirtyCanvas?.(!0,!0),window.dispatchEvent(new CustomEvent(ei,{detail:e})))}function cn(){const e=ct()?.rootGraph?.extra?.bv_settings?.controlConfig;return e?.version===2?e:Fw()}function Uw(e,t=()=>!1){const r=e.group.nodes??e.group._nodes;if(Array.isArray(r)){const l=r.filter(c=>c&&typeof c=="object"&&!t(c));if(l.length>0)return l}const[o,n]=e.group.pos||[0,0],[i,a]=e.group.size||[0,0];return(e.graph._nodes??e.graph.nodes??[]).filter(l=>{if(t(l))return!1;const[c,u]=l.pos||[0,0],[d,f]=l.size||[0,0];return c+d/2>=o&&c+d/2<=o+i&&u+f/2>=n&&u+f/2<=n+a})}const ih={activate:3,mute:2,bypass:1},ah=e=>e.charAt(0).toUpperCase()+e.slice(1);function Tv(e){const t=new Map;for(const o of e.controls??[])if(o.enabled)for(const n of o.assignments??[]){if(n.unresolved)continue;const i=t.get(n.groupId)??[];i.push({controlId:o.id,controlName:o.name,action:n.action,groupId:n.groupId,groupPath:n.groupPath||n.groupTitle||n.groupId}),t.set(n.groupId,i)}const r=[];for(const o of t.values()){if(new Set(o.map(i=>i.action)).size<2)continue;const n=o.reduce((i,a)=>ih[a.action]>ih[i]?a.action:i,o[0].action);r.push({groupId:o[0].groupId,groupPath:o[0].groupPath,winnerAction:n,entries:o})}return r}function Vw(e){if(!e.length)return"✓ No active conflicts";if(e.length>1)return`⚠ ${e.length} active control conflicts`;const t=e[0],r=[...new Set(t.entries.filter(o=>o.action!==t.winnerAction).map(o=>o.action))].join(", ");return`⚠ ${t.groupPath}: ${ah(t.winnerAction)} overrides ${r.split(", ").map(ah).join(", ")}`}function Rv({children:e}){const t=m.useRef();if(!t.current){const r=document.createElement("div");r.className="bv-ui bv-ui-portal",t.current=r}return m.useEffect(()=>(document.body.append(t.current),()=>t.current?.remove()),[]),Ur.createPortal(e,t.current)}function Io({open:e,anchor:t,children:r,onClose:o,className:n="",matchWidth:i=!1}){const a=m.useRef(null),[l,c]=m.useState({left:0,top:0,visibility:"hidden"});return m.useLayoutEffect(()=>{if(!e)return;const u=()=>{const p=t.current?.getBoundingClientRect(),g=a.current?.getBoundingClientRect();if(!p||!g)return;const x=8,w=6,k=i?Math.min(Math.max(p.width,240),window.innerWidth-x*2):void 0,b=k??g.width,h=Math.max(x,Math.min(p.left,window.innerWidth-b-x)),v=p.bottom+w,_=v+g.height<=window.innerHeight-x?v:Math.max(x,p.top-g.height-w);c({left:h,top:_,width:k,visibility:"visible"})};u();const d=requestAnimationFrame(u),f=new ResizeObserver(u);return t.current&&f.observe(t.current),a.current&&f.observe(a.current),window.addEventListener("resize",u),window.addEventListener("scroll",u,!0),()=>{cancelAnimationFrame(d),f.disconnect(),window.removeEventListener("resize",u),window.removeEventListener("scroll",u,!0)}},[t,i,e]),m.useEffect(()=>{if(!e)return;const u=f=>{const p=f.target;!t.current?.contains(p)&&!a.current?.contains(p)&&o?.()},d=f=>{f.key==="Escape"&&o?.()};return document.addEventListener("pointerdown",u),document.addEventListener("keydown",d),()=>{document.removeEventListener("pointerdown",u),document.removeEventListener("keydown",d)}},[t,o,e]),e?s.jsx(Rv,{children:s.jsx("div",{ref:a,className:`bv-anchored-popover ${n}`.trim(),style:l,children:r})}):null}function ff({density:e="compact",className:t="",children:r}){return s.jsx("div",{className:`bv-density-${e} ${t}`.trim(),children:r})}function ne({intent:e="secondary",icon:t,iconOnly:r=!1,loading:o=!1,density:n,className:i="",children:a,disabled:l,...c}){return s.jsxs("button",{...c,disabled:l||o,className:`bv-button ${e} ${n?`bv-density-${n}`:""} ${r?"icon-only":""} ${i}`.trim(),children:[o?s.jsx("span",{className:"bv-spinner"}):r?t??a:t,!r&&a]})}function Ww({actions:e,onClose:t}){return s.jsx("div",{className:"bv-menu-content",role:"menu",children:e.map(r=>s.jsxs(Re.Fragment,{children:[r.separatorBefore&&s.jsx("hr",{}),s.jsxs("button",{type:"button",role:"menuitem",disabled:r.disabled,className:r.danger?"danger":"",onClick:()=>{r.onSelect(),t?.()},children:[r.icon,s.jsx("span",{children:r.label}),r.shortcut&&s.jsx("kbd",{children:r.shortcut})]})]},r.id))})}function pf({label:e,actions:t,intent:r="secondary",icon:o,density:n}){const[i,a]=m.useState(!1),l=m.useRef(null);return s.jsxs("div",{className:"bv-menu-button",ref:l,children:[s.jsxs(ne,{intent:r,icon:o,density:n,"aria-haspopup":"menu","aria-expanded":i,onClick:()=>a(!i),children:[e,s.jsx("span",{className:"bv-chevron"})]}),s.jsx(Io,{open:i,anchor:l,onClose:()=>a(!1),className:"bv-menu",children:s.jsx(Ww,{actions:t,onClose:()=>a(!1)})})]})}function Hw({items:e,orientation:t="horizontal",label:r="Tools",overflow:o=[],density:n}){return s.jsxs("div",{className:`bv-toolbar ${t}`,role:"toolbar","aria-orientation":t,"aria-label":r,children:[e.map((i,a)=>s.jsxs(Re.Fragment,{children:[a>0&&i.group!==e[a-1].group&&s.jsx("span",{className:"bv-toolbar-divider"}),s.jsx(ne,{intent:"ghost",density:n,icon:i.icon,iconOnly:t==="vertical","aria-label":i.label,"aria-pressed":i.active,disabled:i.disabled,className:i.active?"active":"",onClick:i.onSelect,children:i.label})]},i.id)),o.length>0&&s.jsx(pf,{label:"More",actions:o,intent:"ghost",density:n})]})}function lh({items:e,compact:t=!1}){return s.jsx("dl",{className:`bv-definition-list ${t?"compact":""}`,children:e.map((r,o)=>s.jsxs("div",{className:"bv-definition-row",children:[s.jsx("dt",{children:r.term}),s.jsx("dd",{children:r.description})]},o))})}function Vs({label:e,summary:t,icon:r,children:o,popover:n,className:i=""}){const[a,l]=m.useState(!1),c=m.useRef(null);return s.jsxs("div",{ref:c,className:`bv-adaptive-field ${i}`.trim(),children:[s.jsx("div",{className:"bv-adaptive-inline",children:o}),s.jsxs(ne,{type:"button",intent:"secondary",className:"bv-adaptive-trigger",icon:r,"aria-haspopup":"dialog","aria-expanded":a,onClick:()=>l(!0),children:[s.jsx("span",{className:"bv-adaptive-summary",children:t}),s.jsx("span",{"aria-hidden":"true",children:"↗"})]}),s.jsxs(Io,{open:a,anchor:c,onClose:()=>l(!1),className:"bv-adaptive-popover",children:[s.jsxs("header",{children:[s.jsx("strong",{children:e}),s.jsx(ne,{type:"button",intent:"ghost",icon:"×",iconOnly:!0,"aria-label":`Close ${e} editor`,onClick:()=>l(!1)})]}),s.jsx("div",{children:n})]})]})}function Na({open:e,title:t,description:r,children:o,footer:n,onClose:i,modal:a=!0,size:l="medium"}){return e?s.jsx(Rv,{children:s.jsx("div",{className:`bv-dialog-layer ${a?"modal":"modeless"}`,role:a?"presentation":void 0,onPointerDown:c=>{a&&c.target===c.currentTarget&&i()},children:s.jsxs("section",{className:`bv-dialog ${l}`,role:"dialog","aria-modal":a,"aria-label":t,children:[s.jsxs("header",{children:[s.jsxs("div",{children:[s.jsx("h2",{children:t}),r&&s.jsx("p",{children:r})]}),s.jsx(ne,{intent:"ghost",icon:"×",iconOnly:!0,"aria-label":"Close",onClick:i})]}),s.jsx("div",{className:"bv-dialog-body",children:o}),n&&s.jsx("footer",{children:n})]})})}):null}function hf({open:e,editorName:t,onSave:r,onDiscard:o,onKeep:n}){return s.jsx(Na,{open:e,title:"Unsaved changes",description:`${t} contains execution changes that have not been saved.`,onClose:n,size:"small",footer:s.jsxs(s.Fragment,{children:[s.jsx(ne,{intent:"ghost",onClick:n,children:"Keep editing"}),s.jsx(ne,{intent:"secondary",onClick:o,children:"Discard"}),s.jsx(ne,{intent:"primary",onClick:r,children:"Save"})]}),children:s.jsx("p",{children:"Save the current draft, discard it, or return to the editor."})})}function gf(){const[e,t]=m.useState(null),r=n=>t({confirmLabel:"Continue",danger:!1,...n}),o=s.jsx(Na,{open:!!e,title:e?.title??"Confirm action",onClose:()=>t(null),size:"small",footer:s.jsxs(s.Fragment,{children:[s.jsx(ne,{intent:"ghost",onClick:()=>t(null),children:"Cancel"}),s.jsx(ne,{intent:e?.danger?"danger":"primary",onClick:()=>{const n=e?.action;t(null),n?.()},children:e?.confirmLabel})]}),children:e?.message&&s.jsx("p",{children:e.message})});return{confirm:r,dialog:o}}function sh({trigger:e,children:t,open:r,onOpen:o}){const[n,i]=m.useState(!1),a=m.useRef(null),l=r??n,c=u=>{i(u),o?.(u)};return s.jsxs("span",{ref:a,className:"bv-popover-host",children:[e({open:l,toggle:()=>c(!l)}),s.jsx(Io,{open:l,anchor:a,onClose:()=>c(!1),className:"bv-popover",children:t})]})}function Ws({items:e,onReorder:t,onRemove:r,renderActions:o,initialExpanded:n=[]}){const[i,a]=m.useState(n),[l,c]=m.useState();return s.jsx("div",{className:"bv-sortable-list",children:e.map(u=>s.jsxs("article",{draggable:!u.disabled,onDragStart:()=>c(u.id),onDragOver:d=>d.preventDefault(),onDrop:()=>{if(!l||l===u.id)return;const d=[...e],f=d.findIndex(x=>x.id===l),p=d.findIndex(x=>x.id===u.id),[g]=d.splice(f,1);d.splice(p,0,g),t(d),c(void 0)},children:[s.jsxs("header",{children:[s.jsx("button",{type:"button",className:"bv-drag-handle","aria-label":`Reorder ${String(u.title)}`,children:"⠿"}),s.jsxs("div",{children:[s.jsx("strong",{children:u.title}),u.description&&s.jsx("small",{children:u.description})]}),o?.(u),s.jsxs("span",{className:"bv-segmented-actions",children:[r&&s.jsx(ne,{intent:"ghost",iconOnly:!0,"aria-label":`Remove ${String(u.title)}`,title:"Remove",onClick:()=>r(u.id),children:"×"}),u.content&&s.jsx(ne,{intent:"ghost",icon:s.jsx("span",{className:"bv-chevron"}),iconOnly:!0,"aria-label":`${i.includes(u.id)?"Collapse":"Expand"} ${String(u.title)}`,"aria-expanded":i.includes(u.id),onClick:()=>a(d=>d.includes(u.id)?d.filter(f=>f!==u.id):[...d,u.id])})]})]}),u.summary&&s.jsx("div",{className:"bv-sortable-summary",children:u.summary}),u.content&&i.includes(u.id)&&s.jsx("div",{className:"bv-sortable-content",children:u.content})]},u.id))})}const it=Re.forwardRef(function({type:t="button",...r},o){return s.jsx("button",{...r,type:t,ref:o})}),$w=Re.forwardRef(function(t,r){return s.jsx("input",{...t,ref:r})});function zr({tone:e="neutral",title:t,children:r,icon:o,actions:n,onClose:i}){return s.jsxs("aside",{className:`bv-callout ${e}`,role:e==="danger"?"alert":"status",children:[o&&s.jsx("span",{className:"bv-callout-icon",children:o}),s.jsxs("div",{children:[t&&s.jsx("strong",{children:t}),s.jsx("div",{children:r}),n&&s.jsx("div",{className:"bv-callout-actions",children:n})]}),i&&s.jsx(ne,{intent:"ghost",iconOnly:!0,"aria-label":"Close",onClick:i,children:"×"})]})}function Sv({children:e,tone:t="neutral",dot:r=!1}){return s.jsx("span",{className:`bv-badge ${t} ${r?"dot":""}`,children:e})}function Hs({icon:e,title:t,description:r,actions:o}){return s.jsxs("div",{className:"bv-empty-state",children:[e,s.jsx("strong",{children:t}),r&&s.jsx("p",{children:r}),o]})}function Yw({tone:e="neutral",title:t,children:r,onClose:o,duration:n=0}){const i=m.useRef(),a=m.useCallback(()=>{i.current&&window.clearTimeout(i.current)},[]),l=m.useCallback(()=>{a(),n&&(i.current=window.setTimeout(o,n))},[n,o,a]);return m.useEffect(()=>(l(),a),[l,a]),s.jsxs("div",{className:`bv-toast ${e}`,role:"status",tabIndex:0,onPointerEnter:a,onPointerLeave:l,onFocus:a,onBlur:l,children:[s.jsxs("div",{children:[s.jsx("strong",{children:t}),r&&s.jsx("p",{children:r})]}),s.jsx(ne,{intent:"ghost",iconOnly:!0,"aria-label":"Dismiss",onClick:o,children:"×"})]})}function ui(){return(ui=Object.assign||function(e){for(var t=1;t=0||(n[r]=e[r]);return n}function Wi(e){var t=m.useRef(e),r=m.useRef(function(o){t.current&&t.current(o)});return t.current=e,r.current}var ti=function(e,t,r){return t===void 0&&(t=0),r===void 0&&(r=1),e>r?r:e0:v.buttons>0)&&i.current?a(ch(i.current,v,u.current)):(h(!1),c())},b=function(){h(!1),c()};function h(v){var _=d.current,y=$u(i.current),T=v?y.addEventListener:y.removeEventListener;T(_?"touchmove":"mousemove",k),T(_?"touchend":"mouseup",b)}return[function(v){var _=v.nativeEvent,y=i.current;if(y&&(uh(_),!function(S,z){return z&&!Hi(S)}(_,d.current)&&y)){if(Hi(_)){d.current=!0;var T=_.changedTouches||[];T.length&&(u.current=T[0].identifier)}y.focus(),a(ch(y,_,u.current)),h(!0)}},function(v){var _=v.which||v.keyCode;_<37||_>40||(v.preventDefault(),l({left:_===39?.05:_===37?-.05:0,top:_===40?.05:_===38?-.05:0}))},function(v){var _=v.which||v.keyCode;_>=37&&_<=40&&c()},h]},[l,a,c]),p=f[0],g=f[1],x=f[2],w=f[3];return m.useEffect(function(){return w},[w]),Re.createElement("div",ui({},n,{onTouchStart:p,onMouseDown:p,className:"react-colorful__interactive",ref:i,onKeyDown:g,onKeyUp:x,tabIndex:0,role:"slider"}))}),Oa=function(e){return e.filter(Boolean).join(" ")},mf=function(e){var t=e.color,r=e.left,o=e.top,n=o===void 0?.5:o,i=Oa(["react-colorful__pointer",e.className]);return Re.createElement("div",{className:i,style:{top:100*n+"%",left:100*r+"%"}},Re.createElement("div",{className:"react-colorful__pointer-fill",style:{backgroundColor:t}}))},pt=function(e,t,r){return t===void 0&&(t=0),r===void 0&&(r=Math.pow(10,t)),Math.round(r*e)/r},Lv=function(e){return Kw(Yu(e))},Yu=function(e){return e[0]==="#"&&(e=e.substring(1)),e.length<6?{r:parseInt(e[0]+e[0],16),g:parseInt(e[1]+e[1],16),b:parseInt(e[2]+e[2],16),a:e.length===4?pt(parseInt(e[3]+e[3],16)/255,2):1}:{r:parseInt(e.substring(0,2),16),g:parseInt(e.substring(2,4),16),b:parseInt(e.substring(4,6),16),a:e.length===8?pt(parseInt(e.substring(6,8),16)/255,2):1}},Cv=function(e){return Gw(Xw(e))},Nv=function(e){var t=e.s,r=e.v,o=e.a,n=(200-t)*r/100;return{h:pt(e.h),s:pt(n>0&&n<200?t*r/100/(n<=100?n:200-n)*100:0),l:pt(n/2),a:pt(o,2)}},Xu=function(e){var t=Nv(e);return"hsl("+t.h+", "+t.s+"%, "+t.l+"%)"},Ic=function(e){var t=Nv(e);return"hsla("+t.h+", "+t.s+"%, "+t.l+"%, "+t.a+")"},Xw=function(e){var t=e.h,r=e.s,o=e.v,n=e.a;t=t/360*6,r/=100,o/=100;var i=Math.floor(t),a=o*(1-r),l=o*(1-(t-i)*r),c=o*(1-(1-t+i)*r),u=i%6;return{r:pt(255*[o,l,a,a,c,o][u]),g:pt(255*[c,o,o,l,a,a][u]),b:pt(255*[a,a,c,o,o,l][u]),a:pt(n,2)}},rl=function(e){var t=e.toString(16);return t.length<2?"0"+t:t},Gw=function(e){var t=e.r,r=e.g,o=e.b,n=e.a,i=n<1?rl(pt(255*n)):"";return"#"+rl(t)+rl(r)+rl(o)+i},Kw=function(e){var t=e.r,r=e.g,o=e.b,n=e.a,i=Math.max(t,r,o),a=i-Math.min(t,r,o),l=a?i===t?(r-o)/a:i===r?2+(o-t)/a:4+(t-r)/a:0;return{h:pt(60*(l<0?l+6:l)),s:pt(i?a/i*100:0),v:pt(i/255*100),a:n}},Ov=Re.memo(function(e){var t=e.hue,r=e.onChange,o=e.onChangeEnd,n=Oa(["react-colorful__hue",e.className]);return Re.createElement("div",{className:n},Re.createElement(vf,{onMove:function(i){r({h:360*i.left})},onKey:function(i){r({h:ti(t+360*i.left,0,360)})},onEnd:o,"aria-label":"Hue","aria-valuenow":pt(t),"aria-valuemax":"360","aria-valuemin":"0"},Re.createElement(mf,{className:"react-colorful__hue-pointer",left:t/360,color:Xu({h:t,s:100,v:100,a:1})})))}),Mv=Re.memo(function(e){var t=e.hsva,r=e.onChange,o=e.onChangeEnd,n={backgroundColor:Xu({h:t.h,s:100,v:100,a:1})};return Re.createElement("div",{className:"react-colorful__saturation",style:n},Re.createElement(vf,{onMove:function(i){r({s:100*i.left,v:100-100*i.top})},onKey:function(i){r({s:ti(t.s+100*i.left,0,100),v:ti(t.v-100*i.top,0,100)})},onEnd:o,"aria-label":"Color","aria-valuetext":"Saturation "+pt(t.s)+"%, Brightness "+pt(t.v)+"%"},Re.createElement(mf,{className:"react-colorful__saturation-pointer",top:1-t.v/100,left:t.s/100,color:Xu(t)})))}),Av=function(e,t){if(e===t)return!0;for(var r in e)if(e[r]!==t[r])return!1;return!0},Dv=function(e,t){return e.toLowerCase()===t.toLowerCase()||Av(Yu(e),Yu(t))};function Iv(e,t,r,o){var n=Wi(r),i=Wi(o),a=m.useState(function(){return e.toHsva(t)}),l=a[0],c=a[1],u=m.useRef({color:t,hsva:l}),d=m.useRef(!1);m.useEffect(function(){if(!e.equal(t,u.current.color)){var g=e.toHsva(t);u.current={hsva:g,color:t},c(g),d.current=!1}},[t,e]),m.useEffect(function(){var g;Av(l,u.current.hsva)||e.equal(g=e.fromHsva(l),u.current.color)||(u.current={hsva:l,color:g},n(g),d.current=!0)},[l,e,n]);var f=m.useCallback(function(g){c(function(x){return Object.assign({},x,g)})},[]),p=m.useCallback(function(){d.current&&(d.current=!1,i(u.current.color))},[i]);return[l,f,p]}var qw=typeof window<"u"?m.useLayoutEffect:m.useEffect,Jw=function(){return typeof __webpack_nonce__<"u"?__webpack_nonce__:void 0},dh=new WeakMap,jv=function(e){qw(function(){var t=e.current;if(typeof document<"u"&&t){var r=t.getRootNode?t.getRootNode():t.ownerDocument,o=r&&("head"in r||"host"in r)?r:t.ownerDocument;if(!dh.has(o)){var n="head"in o?o.head:o,i=(n.ownerDocument||document).createElement("style");i.innerHTML=`.react-colorful{position:relative;display:flex;flex-direction:column;width:200px;height:200px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.react-colorful__saturation{position:relative;flex-grow:1;border-color:transparent;border-bottom:12px solid #000;border-radius:8px 8px 0 0;background-image:linear-gradient(0deg,#000,transparent),linear-gradient(90deg,#fff,hsla(0,0%,100%,0))}.react-colorful__alpha-gradient,.react-colorful__pointer-fill{content:"";position:absolute;left:0;top:0;right:0;bottom:0;pointer-events:none;border-radius:inherit}.react-colorful__alpha-gradient,.react-colorful__saturation{box-shadow:inset 0 0 0 1px rgba(0,0,0,.05)}.react-colorful__alpha,.react-colorful__hue{position:relative;height:24px}.react-colorful__hue{background:linear-gradient(90deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red)}.react-colorful__last-control{border-radius:0 0 8px 8px}.react-colorful__interactive{position:absolute;left:0;top:0;right:0;bottom:0;border-radius:inherit;outline:none;touch-action:none}.react-colorful__pointer{position:absolute;z-index:1;box-sizing:border-box;width:28px;height:28px;transform:translate(-50%,-50%);background-color:#fff;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 4px rgba(0,0,0,.2)}.react-colorful__interactive:focus .react-colorful__pointer{transform:translate(-50%,-50%) scale(1.1)}.react-colorful__alpha,.react-colorful__alpha-pointer{background-color:#fff;background-image:url('data:image/svg+xml;charset=utf-8,')}.react-colorful__saturation-pointer{z-index:3}.react-colorful__hue-pointer{z-index:2}`;var a=Jw();a&&i.setAttribute("nonce",a),dh.set(o,i),n.appendChild(i)}}},[])},Zw=function(e){var t=e.className,r=e.colorModel,o=e.color,n=o===void 0?r.defaultColor:o,i=e.onChange,a=e.onChangeEnd,l=bf(e,["className","colorModel","color","onChange","onChangeEnd"]),c=m.useRef(null);jv(c);var u=Iv(r,n,i,a),d=u[0],f=u[1],p=u[2],g=Oa(["react-colorful",t]);return Re.createElement("div",ui({},l,{ref:c,className:g}),Re.createElement(Mv,{hsva:d,onChange:f,onChangeEnd:p}),Re.createElement(Ov,{hue:d.h,onChange:f,onChangeEnd:p,className:"react-colorful__last-control"}))},Qw={defaultColor:"000",toHsva:Lv,fromHsva:function(e){return Cv({h:e.h,s:e.s,v:e.v,a:1})},equal:Dv},e0=function(e){return Re.createElement(Zw,ui({},e,{colorModel:Qw}))},t0=function(e){var t=e.className,r=e.hsva,o=e.onChange,n=e.onChangeEnd,i={backgroundImage:"linear-gradient(90deg, "+Ic(Object.assign({},r,{a:0}))+", "+Ic(Object.assign({},r,{a:1}))+")"},a=Oa(["react-colorful__alpha",t]),l=pt(100*r.a);return Re.createElement("div",{className:a},Re.createElement("div",{className:"react-colorful__alpha-gradient",style:i}),Re.createElement(vf,{onMove:function(c){o({a:c.left})},onKey:function(c){o({a:ti(r.a+c.left)})},onEnd:n,"aria-label":"Alpha","aria-valuetext":l+"%","aria-valuenow":l,"aria-valuemin":"0","aria-valuemax":"100"},Re.createElement(mf,{className:"react-colorful__alpha-pointer",left:r.a,color:Ic(r)})))},r0=function(e){var t=e.className,r=e.colorModel,o=e.color,n=o===void 0?r.defaultColor:o,i=e.onChange,a=e.onChangeEnd,l=bf(e,["className","colorModel","color","onChange","onChangeEnd"]),c=m.useRef(null);jv(c);var u=Iv(r,n,i,a),d=u[0],f=u[1],p=u[2],g=Oa(["react-colorful",t]);return Re.createElement("div",ui({},l,{ref:c,className:g}),Re.createElement(Mv,{hsva:d,onChange:f,onChangeEnd:p}),Re.createElement(Ov,{hue:d.h,onChange:f,onChangeEnd:p}),Re.createElement(t0,{hsva:d,onChange:f,onChangeEnd:p,className:"react-colorful__last-control"}))},o0={defaultColor:"0001",toHsva:Lv,fromHsva:Cv,equal:Dv},n0=function(e){return Re.createElement(r0,ui({},e,{colorModel:o0}))},Bv={},dt=fr&&fr.__assign||function(){return dt=Object.assign||function(e){for(var t,r=1,o=arguments.length;r<\/script>",e=e.removeChild(e.firstChild)):typeof o.is=="string"?e=a.createElement(r,{is:o.is}):(e=a.createElement(r),r==="select"&&(a=e,o.multiple?a.multiple=!0:o.size&&(a.size=o.size))):e=a.createElementNS(e,r),e[Dr]=t,e[la]=o,Zb(e,t,!1,!1),t.stateNode=e;e:{switch(a=cu(r,o),r){case"dialog":Be("cancel",e),Be("close",e),n=o;break;case"iframe":case"object":case"embed":Be("load",e),n=o;break;case"video":case"audio":for(n=0;nQn&&(t.flags|=128,o=!0,wi(i,!1),t.lanes=4194304)}else{if(!o)if(e=Kl(a),e!==null){if(t.flags|=128,o=!0,r=e.updateQueue,r!==null&&(t.updateQueue=r,t.flags|=4),wi(i,!0),i.tail===null&&i.tailMode==="hidden"&&!a.alternate&&!Ve)return wt(t),null}else 2*Je()-i.renderingStartTime>Qn&&r!==1073741824&&(t.flags|=128,o=!0,wi(i,!1),t.lanes=4194304);i.isBackwards?(a.sibling=t.child,t.child=a):(r=i.last,r!==null?r.sibling=a:t.child=a,i.last=a)}return i.tail!==null?(t=i.tail,i.rendering=t,i.tail=t.sibling,i.renderingStartTime=Je(),t.sibling=null,r=$e.current,Pe($e,o?r&1|2:r&1),t):(wt(t),null);case 22:case 23:return rf(),o=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==o&&(t.flags|=8192),o&&t.mode&1?Gt&1073741824&&(wt(t),t.subtreeFlags&6&&(t.flags|=8192)):wt(t),null;case 24:return null;case 25:return null}throw Error(K(156,t.tag))}function _w(e,t){switch(jd(t),t.tag){case 1:return Vt(t.type)&&Vl(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return Jn(),ze(Ut),ze(Ct),$d(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return Hd(t),null;case 13:if(ze($e),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(K(340));Kn()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return ze($e),null;case 4:return Jn(),null;case 10:return Fd(t.type._context),null;case 22:case 23:return rf(),null;case 24:return null;default:return null}}var el=!1,St=!1,ww=typeof WeakSet=="function"?WeakSet:Set,ae=null;function jn(e,t){var r=e.ref;if(r!==null)if(typeof r=="function")try{r(null)}catch(o){Ge(e,t,o)}else r.current=null}function ju(e,t,r){try{r()}catch(o){Ge(e,t,o)}}var $p=!1;function kw(e,t){if(xu=Bl,e=ib(),Dd(e)){if("selectionStart"in e)var r={start:e.selectionStart,end:e.selectionEnd};else e:{r=(r=e.ownerDocument)&&r.defaultView||window;var o=r.getSelection&&r.getSelection();if(o&&o.rangeCount!==0){r=o.anchorNode;var n=o.anchorOffset,i=o.focusNode;o=o.focusOffset;try{r.nodeType,i.nodeType}catch{r=null;break e}var a=0,l=-1,c=-1,u=0,d=0,f=e,p=null;t:for(;;){for(var g;f!==r||n!==0&&f.nodeType!==3||(l=a+n),f!==i||o!==0&&f.nodeType!==3||(c=a+o),f.nodeType===3&&(a+=f.nodeValue.length),(g=f.firstChild)!==null;)p=f,f=g;for(;;){if(f===e)break t;if(p===r&&++u===n&&(l=a),p===i&&++d===o&&(c=a),(g=f.nextSibling)!==null)break;f=p,p=f.parentNode}f=g}r=l===-1||c===-1?null:{start:l,end:c}}else r=null}r=r||{start:0,end:0}}else r=null;for(yu={focusedElem:e,selectionRange:r},Bl=!1,ae=t;ae!==null;)if(t=ae,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,ae=e;else for(;ae!==null;){t=ae;try{var x=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(x!==null){var w=x.memoizedProps,k=x.memoizedState,b=t.stateNode,h=b.getSnapshotBeforeUpdate(t.elementType===t.type?w:mr(t.type,w),k);b.__reactInternalSnapshotBeforeUpdate=h}break;case 3:var v=t.stateNode.containerInfo;v.nodeType===1?v.textContent="":v.nodeType===9&&v.documentElement&&v.removeChild(v.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(K(163))}}catch(_){Ge(t,t.return,_)}if(e=t.sibling,e!==null){e.return=t.return,ae=e;break}ae=t.return}return x=$p,$p=!1,x}function Ui(e,t,r){var o=t.updateQueue;if(o=o!==null?o.lastEffect:null,o!==null){var n=o=o.next;do{if((n.tag&e)===e){var i=n.destroy;n.destroy=void 0,i!==void 0&&ju(t,r,i)}n=n.next}while(n!==o)}}function Is(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var r=t=t.next;do{if((r.tag&e)===e){var o=r.create;r.destroy=o()}r=r.next}while(r!==t)}}function Pu(e){var t=e.ref;if(t!==null){var r=e.stateNode;switch(e.tag){case 5:e=r;break;default:e=r}typeof t=="function"?t(e):t.current=e}}function tv(e){var t=e.alternate;t!==null&&(e.alternate=null,tv(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[Dr],delete t[la],delete t[ku],delete t[iw],delete t[aw])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function rv(e){return e.tag===5||e.tag===3||e.tag===4}function Yp(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||rv(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Bu(e,t,r){var o=e.tag;if(o===5||o===6)e=e.stateNode,t?r.nodeType===8?r.parentNode.insertBefore(e,t):r.insertBefore(e,t):(r.nodeType===8?(t=r.parentNode,t.insertBefore(e,r)):(t=r,t.appendChild(e)),r=r._reactRootContainer,r!=null||t.onclick!==null||(t.onclick=Ul));else if(o!==4&&(e=e.child,e!==null))for(Bu(e,t,r),e=e.sibling;e!==null;)Bu(e,t,r),e=e.sibling}function zu(e,t,r){var o=e.tag;if(o===5||o===6)e=e.stateNode,t?r.insertBefore(e,t):r.appendChild(e);else if(o!==4&&(e=e.child,e!==null))for(zu(e,t,r),e=e.sibling;e!==null;)zu(e,t,r),e=e.sibling}var bt=null,xr=!1;function so(e,t,r){for(r=r.child;r!==null;)ov(e,t,r),r=r.sibling}function ov(e,t,r){if(Pr&&typeof Pr.onCommitFiberUnmount=="function")try{Pr.onCommitFiberUnmount(Ss,r)}catch{}switch(r.tag){case 5:St||jn(r,t);case 6:var o=bt,n=xr;bt=null,so(e,t,r),bt=o,xr=n,bt!==null&&(xr?(e=bt,r=r.stateNode,e.nodeType===8?e.parentNode.removeChild(r):e.removeChild(r)):bt.removeChild(r.stateNode));break;case 18:bt!==null&&(xr?(e=bt,r=r.stateNode,e.nodeType===8?Ec(e.parentNode,r):e.nodeType===1&&Ec(e,r),ra(e)):Ec(bt,r.stateNode));break;case 4:o=bt,n=xr,bt=r.stateNode.containerInfo,xr=!0,so(e,t,r),bt=o,xr=n;break;case 0:case 11:case 14:case 15:if(!St&&(o=r.updateQueue,o!==null&&(o=o.lastEffect,o!==null))){n=o=o.next;do{var i=n,a=i.destroy;i=i.tag,a!==void 0&&(i&2||i&4)&&ju(r,t,a),n=n.next}while(n!==o)}so(e,t,r);break;case 1:if(!St&&(jn(r,t),o=r.stateNode,typeof o.componentWillUnmount=="function"))try{o.props=r.memoizedProps,o.state=r.memoizedState,o.componentWillUnmount()}catch(l){Ge(r,t,l)}so(e,t,r);break;case 21:so(e,t,r);break;case 22:r.mode&1?(St=(o=St)||r.memoizedState!==null,so(e,t,r),St=o):so(e,t,r);break;default:so(e,t,r)}}function Xp(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var r=e.stateNode;r===null&&(r=e.stateNode=new ww),t.forEach(function(o){var n=Mw.bind(null,e,o);r.has(o)||(r.add(o),o.then(n,n))})}}function vr(e,t){var r=t.deletions;if(r!==null)for(var o=0;on&&(n=a),o&=~i}if(o=n,o=Je()-o,o=(120>o?120:480>o?480:1080>o?1080:1920>o?1920:3e3>o?3e3:4320>o?4320:1960*Tw(o/1960))-o,10e?16:e,vo===null)var o=!1;else{if(e=vo,vo=null,es=0,ke&6)throw Error(K(331));var n=ke;for(ke|=4,ae=e.current;ae!==null;){var i=ae,a=i.child;if(ae.flags&16){var l=i.deletions;if(l!==null){for(var c=0;cJe()-ef?Jo(e,0):Qd|=r),Wt(e,t)}function dv(e,t){t===0&&(e.mode&1?(t=$a,$a<<=1,!($a&130023424)&&($a=4194304)):t=1);var r=Mt();e=no(e,t),e!==null&&(Ra(e,t,r),Wt(e,r))}function Ow(e){var t=e.memoizedState,r=0;t!==null&&(r=t.retryLane),dv(e,r)}function Mw(e,t){var r=0;switch(e.tag){case 13:var o=e.stateNode,n=e.memoizedState;n!==null&&(r=n.retryLane);break;case 19:o=e.stateNode;break;default:throw Error(K(314))}o!==null&&o.delete(t),dv(e,r)}var fv;fv=function(e,t,r){if(e!==null)if(e.memoizedProps!==t.pendingProps||Ut.current)zt=!0;else{if(!(e.lanes&r)&&!(t.flags&128))return zt=!1,xw(e,t,r);zt=!!(e.flags&131072)}else zt=!1,Ve&&t.flags&1048576&&bb(t,$l,t.index);switch(t.lanes=0,t.tag){case 2:var o=t.type;yl(e,t),e=t.pendingProps;var n=Gn(t,Ct.current);Vn(t,r),n=Xd(null,t,o,e,n,r);var i=Gd();return t.flags|=1,typeof n=="object"&&n!==null&&typeof n.render=="function"&&n.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,Vt(o)?(i=!0,Wl(t)):i=!1,t.memoizedState=n.state!==null&&n.state!==void 0?n.state:null,Vd(t),n.updater=Ds,t.stateNode=n,n._reactInternals=t,Cu(t,o,e,r),t=Mu(null,t,o,!0,i,r)):(t.tag=0,Ve&&i&&Id(t),Nt(null,t,n,r),t=t.child),t;case 16:o=t.elementType;e:{switch(yl(e,t),e=t.pendingProps,n=o._init,o=n(o._payload),t.type=o,n=t.tag=Dw(o),e=mr(o,e),n){case 0:t=Ou(null,t,o,e,r);break e;case 1:t=Vp(null,t,o,e,r);break e;case 11:t=Fp(null,t,o,e,r);break e;case 14:t=Up(null,t,o,mr(o.type,e),r);break e}throw Error(K(306,o,""))}return t;case 0:return o=t.type,n=t.pendingProps,n=t.elementType===o?n:mr(o,n),Ou(e,t,o,n,r);case 1:return o=t.type,n=t.pendingProps,n=t.elementType===o?n:mr(o,n),Vp(e,t,o,n,r);case 3:e:{if(Kb(t),e===null)throw Error(K(387));o=t.pendingProps,i=t.memoizedState,n=i.element,wb(e,t),Gl(t,o,null,r);var a=t.memoizedState;if(o=a.element,i.isDehydrated)if(i={element:o,isDehydrated:!1,cache:a.cache,pendingSuspenseBoundaries:a.pendingSuspenseBoundaries,transitions:a.transitions},t.updateQueue.baseState=i,t.memoizedState=i,t.flags&256){n=Zn(Error(K(423)),t),t=Wp(e,t,o,r,n);break e}else if(o!==n){n=Zn(Error(K(424)),t),t=Wp(e,t,o,r,n);break e}else for(Jt=Eo(t.stateNode.containerInfo.firstChild),Zt=t,Ve=!0,yr=null,r=yb(t,null,o,r),t.child=r;r;)r.flags=r.flags&-3|4096,r=r.sibling;else{if(Kn(),o===n){t=io(e,t,r);break e}Nt(e,t,o,r)}t=t.child}return t;case 5:return kb(t),e===null&&Ru(t),o=t.type,n=t.pendingProps,i=e!==null?e.memoizedProps:null,a=n.children,_u(o,n)?a=null:i!==null&&_u(o,i)&&(t.flags|=32),Gb(e,t),Nt(e,t,a,r),t.child;case 6:return e===null&&Ru(t),null;case 13:return qb(e,t,r);case 4:return Wd(t,t.stateNode.containerInfo),o=t.pendingProps,e===null?t.child=qn(t,null,o,r):Nt(e,t,o,r),t.child;case 11:return o=t.type,n=t.pendingProps,n=t.elementType===o?n:mr(o,n),Fp(e,t,o,n,r);case 7:return Nt(e,t,t.pendingProps,r),t.child;case 8:return Nt(e,t,t.pendingProps.children,r),t.child;case 12:return Nt(e,t,t.pendingProps.children,r),t.child;case 10:e:{if(o=t.type._context,n=t.pendingProps,i=t.memoizedProps,a=n.value,Pe(Yl,o._currentValue),o._currentValue=a,i!==null)if(Er(i.value,a)){if(i.children===n.children&&!Ut.current){t=io(e,t,r);break e}}else for(i=t.child,i!==null&&(i.return=t);i!==null;){var l=i.dependencies;if(l!==null){a=i.child;for(var c=l.firstContext;c!==null;){if(c.context===o){if(i.tag===1){c=Zr(-1,r&-r),c.tag=2;var u=i.updateQueue;if(u!==null){u=u.shared;var d=u.pending;d===null?c.next=c:(c.next=d.next,d.next=c),u.pending=c}}i.lanes|=r,c=i.alternate,c!==null&&(c.lanes|=r),Su(i.return,r,t),l.lanes|=r;break}c=c.next}}else if(i.tag===10)a=i.type===t.type?null:i.child;else if(i.tag===18){if(a=i.return,a===null)throw Error(K(341));a.lanes|=r,l=a.alternate,l!==null&&(l.lanes|=r),Su(a,r,t),a=i.sibling}else a=i.child;if(a!==null)a.return=i;else for(a=i;a!==null;){if(a===t){a=null;break}if(i=a.sibling,i!==null){i.return=a.return,a=i;break}a=a.return}i=a}Nt(e,t,n.children,r),t=t.child}return t;case 9:return n=t.type,o=t.pendingProps.children,Vn(t,r),n=pr(n),o=o(n),t.flags|=1,Nt(e,t,o,r),t.child;case 14:return o=t.type,n=mr(o,t.pendingProps),n=mr(o.type,n),Up(e,t,o,n,r);case 15:return Yb(e,t,t.type,t.pendingProps,r);case 17:return o=t.type,n=t.pendingProps,n=t.elementType===o?n:mr(o,n),yl(e,t),t.tag=1,Vt(o)?(e=!0,Wl(t)):e=!1,Vn(t,r),Wb(t,o,n),Cu(t,o,n,r),Mu(null,t,o,!0,e,r);case 19:return Jb(e,t,r);case 22:return Xb(e,t,r)}throw Error(K(156,t.tag))};function pv(e,t){return Fg(e,t)}function Aw(e,t,r,o){this.tag=e,this.key=r,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=o,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function ur(e,t,r,o){return new Aw(e,t,r,o)}function nf(e){return e=e.prototype,!(!e||!e.isReactComponent)}function Dw(e){if(typeof e=="function")return nf(e)?1:0;if(e!=null){if(e=e.$$typeof,e===kd)return 11;if(e===Ed)return 14}return 2}function Lo(e,t){var r=e.alternate;return r===null?(r=ur(e.tag,t,e.key,e.mode),r.elementType=e.elementType,r.type=e.type,r.stateNode=e.stateNode,r.alternate=e,e.alternate=r):(r.pendingProps=t,r.type=e.type,r.flags=0,r.subtreeFlags=0,r.deletions=null),r.flags=e.flags&14680064,r.childLanes=e.childLanes,r.lanes=e.lanes,r.child=e.child,r.memoizedProps=e.memoizedProps,r.memoizedState=e.memoizedState,r.updateQueue=e.updateQueue,t=e.dependencies,r.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},r.sibling=e.sibling,r.index=e.index,r.ref=e.ref,r}function kl(e,t,r,o,n,i){var a=2;if(o=e,typeof e=="function")nf(e)&&(a=1);else if(typeof e=="string")a=5;else e:switch(e){case Sn:return Zo(r.children,n,i,t);case wd:a=8,n|=8;break;case Qc:return e=ur(12,r,t,n|2),e.elementType=Qc,e.lanes=i,e;case eu:return e=ur(13,r,t,n),e.elementType=eu,e.lanes=i,e;case tu:return e=ur(19,r,t,n),e.elementType=tu,e.lanes=i,e;case kg:return Ps(r,n,i,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case _g:a=10;break e;case wg:a=9;break e;case kd:a=11;break e;case Ed:a=14;break e;case uo:a=16,o=null;break e}throw Error(K(130,e==null?e:typeof e,""))}return t=ur(a,r,t,n),t.elementType=e,t.type=o,t.lanes=i,t}function Zo(e,t,r,o){return e=ur(7,e,o,t),e.lanes=r,e}function Ps(e,t,r,o){return e=ur(22,e,o,t),e.elementType=kg,e.lanes=r,e.stateNode={isHidden:!1},e}function Mc(e,t,r){return e=ur(6,e,null,t),e.lanes=r,e}function Ac(e,t,r){return t=ur(4,e.children!==null?e.children:[],e.key,t),t.lanes=r,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Iw(e,t,r,o,n){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=pc(0),this.expirationTimes=pc(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=pc(0),this.identifierPrefix=o,this.onRecoverableError=n,this.mutableSourceEagerHydrationData=null}function af(e,t,r,o,n,i,a,l,c){return e=new Iw(e,t,r,l,c),t===1?(t=1,i===!0&&(t|=8)):t=0,i=ur(3,null,null,t),e.current=i,i.stateNode=e,i.memoizedState={element:o,isDehydrated:r,cache:null,transitions:null,pendingSuspenseBoundaries:null},Vd(i),e}function jw(e,t,r){var o=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(vv)}catch(e){console.error(e)}}vv(),vg.exports=er;var Ur=vg.exports,ui,th=Ur;ui=qi.createRoot=th.createRoot,qi.hydrateRoot=th.hydrateRoot;function ct(){return py}function qr(){return hy}function mv(e){if(!e||typeof e!="object")return null;const t=e,r=t.rootGraph;if(r&&typeof r=="object")return r;const o=t.graph;return o&&typeof o=="object"?o:e}function xv(e){return e._nodes??e.nodes??[]}function Uw(e){return e._groups??e.groups??[]}function Vw(e){if(e.subgraph&&typeof e.subgraph=="object")return e.subgraph;if(typeof e.getSubgraph=="function")try{return e.getSubgraph()??null}catch{return null}return null}function yv(e,t){const r=new Set,o=[{graph:e,path:[]}];for(;o.length;){const{graph:n,path:i}=o.pop(),a=n;if(!r.has(a)){r.add(a),t(n,i);for(const l of xv(n)){const c=Vw(l);c&&o.push({graph:c,path:i.concat([{node:l,graph:n,depth:i.length+1}])})}}}}function Ww(){return globalThis.crypto?.randomUUID?.()??`bv-group-${Date.now()}-${Math.random().toString(16).slice(2)}`}function Hw(e,t){const r=e;r.flags??(r.flags={});let o=typeof r.flags.bvGroupId=="string"?r.flags.bvGroupId:"";if(!o||t.has(o)){do o=Ww();while(t.has(o));r.flags.bvGroupId=o}return t.add(o),o}function os(e){const t=mv(e);if(!t)return[];const r=[],o=new Set;return yv(t,(n,i)=>{for(const a of Uw(n)){const c=[...i.map(u=>String(u.node.title||u.node.type||u.node.id)),String(a.title||"Untitled Group")].join(" / ");r.push({group:a,graph:n,path:i,id:Hw(a,o),pathLabel:c})}}),r}function $w(e,t){const r=mv(e);if(!r)return[];const o=[];return yv(r,(n,i)=>{for(const a of xv(n))_v(a,t)&&o.push({node:a,graph:n,path:i})}),o}function _v(e,t){const r=String(t);return[e.type,e.comfyClass,e.title,e.constructor?.name].filter(n=>typeof n=="string"&&n.length>0).map(String).includes(r)}const ei="bv-control-config-changed";function Yw(){return{version:2,forceActive:!1,controls:[]}}function uf(e){var r;const t=ct()?.rootGraph;t&&(t.extra??(t.extra={}),(r=t.extra).bv_settings??(r.bv_settings={}),t.extra.bv_settings.controlConfig=e,t.setDirtyCanvas?.(!0,!0),window.dispatchEvent(new CustomEvent(ei,{detail:e})))}function cn(){const e=ct()?.rootGraph?.extra?.bv_settings?.controlConfig;return e?.version===2?e:Yw()}function Xw(e,t=()=>!1){const r=e.group.nodes??e.group._nodes;if(Array.isArray(r)){const l=r.filter(c=>c&&typeof c=="object"&&!t(c));if(l.length>0)return l}const[o,n]=e.group.pos||[0,0],[i,a]=e.group.size||[0,0];return(e.graph._nodes??e.graph.nodes??[]).filter(l=>{if(t(l))return!1;const[c,u]=l.pos||[0,0],[d,f]=l.size||[0,0];return c+d/2>=o&&c+d/2<=o+i&&u+f/2>=n&&u+f/2<=n+a})}const rh={activate:3,mute:2,bypass:1},oh=e=>e.charAt(0).toUpperCase()+e.slice(1);function wv(e){const t=new Map;for(const o of e.controls??[])if(o.enabled)for(const n of o.assignments??[]){if(n.unresolved)continue;const i=t.get(n.groupId)??[];i.push({controlId:o.id,controlName:o.name,action:n.action,groupId:n.groupId,groupPath:n.groupPath||n.groupTitle||n.groupId}),t.set(n.groupId,i)}const r=[];for(const o of t.values()){if(new Set(o.map(i=>i.action)).size<2)continue;const n=o.reduce((i,a)=>rh[a.action]>rh[i]?a.action:i,o[0].action);r.push({groupId:o[0].groupId,groupPath:o[0].groupPath,winnerAction:n,entries:o})}return r}function Gw(e){if(!e.length)return"✓ No active conflicts";if(e.length>1)return`⚠ ${e.length} active control conflicts`;const t=e[0],r=[...new Set(t.entries.filter(o=>o.action!==t.winnerAction).map(o=>o.action))].join(", ");return`⚠ ${t.groupPath}: ${oh(t.winnerAction)} overrides ${r.split(", ").map(oh).join(", ")}`}function kv({children:e}){const t=m.useRef();if(!t.current){const r=document.createElement("div");r.className="bv-ui bv-ui-portal",t.current=r}return m.useEffect(()=>(document.body.append(t.current),()=>t.current?.remove()),[]),Ur.createPortal(e,t.current)}function Io({open:e,anchor:t,children:r,onClose:o,className:n="",matchWidth:i=!1}){const a=m.useRef(null),[l,c]=m.useState({left:0,top:0,visibility:"hidden"});return m.useLayoutEffect(()=>{if(!e)return;const u=()=>{const p=t.current?.getBoundingClientRect(),g=a.current?.getBoundingClientRect();if(!p||!g)return;const x=8,w=6,k=i?Math.min(Math.max(p.width,240),window.innerWidth-x*2):void 0,b=k??g.width,h=Math.max(x,Math.min(p.left,window.innerWidth-b-x)),v=p.bottom+w,_=v+g.height<=window.innerHeight-x?v:Math.max(x,p.top-g.height-w);c({left:h,top:_,width:k,visibility:"visible"})};u();const d=requestAnimationFrame(u),f=new ResizeObserver(u);return t.current&&f.observe(t.current),a.current&&f.observe(a.current),window.addEventListener("resize",u),window.addEventListener("scroll",u,!0),()=>{cancelAnimationFrame(d),f.disconnect(),window.removeEventListener("resize",u),window.removeEventListener("scroll",u,!0)}},[t,i,e]),m.useEffect(()=>{if(!e)return;const u=f=>{const p=f.target;!t.current?.contains(p)&&!a.current?.contains(p)&&o?.()},d=f=>{f.key==="Escape"&&o?.()};return document.addEventListener("pointerdown",u),document.addEventListener("keydown",d),()=>{document.removeEventListener("pointerdown",u),document.removeEventListener("keydown",d)}},[t,o,e]),e?s.jsx(kv,{children:s.jsx("div",{ref:a,className:`bv-anchored-popover ${n}`.trim(),style:l,children:r})}):null}function df({density:e="compact",className:t="",children:r}){return s.jsx("div",{className:`bv-density-${e} ${t}`.trim(),children:r})}function ie({intent:e="secondary",icon:t,iconOnly:r=!1,loading:o=!1,density:n,className:i="",children:a,disabled:l,...c}){return s.jsxs("button",{...c,disabled:l||o,className:`bv-button ${e} ${n?`bv-density-${n}`:""} ${r?"icon-only":""} ${i}`.trim(),children:[o?s.jsx("span",{className:"bv-spinner"}):r?t??a:t,!r&&a]})}function Kw({actions:e,onClose:t}){return s.jsx("div",{className:"bv-menu-content",role:"menu",children:e.map(r=>s.jsxs(Re.Fragment,{children:[r.separatorBefore&&s.jsx("hr",{}),s.jsxs("button",{type:"button",role:"menuitem",disabled:r.disabled,className:r.danger?"danger":"",onClick:()=>{r.onSelect(),t?.()},children:[r.icon,s.jsx("span",{children:r.label}),r.shortcut&&s.jsx("kbd",{children:r.shortcut})]})]},r.id))})}function ff({label:e,actions:t,intent:r="secondary",icon:o,density:n}){const[i,a]=m.useState(!1),l=m.useRef(null);return s.jsxs("div",{className:"bv-menu-button",ref:l,children:[s.jsxs(ie,{intent:r,icon:o,density:n,"aria-haspopup":"menu","aria-expanded":i,onClick:()=>a(!i),children:[e,s.jsx("span",{className:"bv-chevron"})]}),s.jsx(Io,{open:i,anchor:l,onClose:()=>a(!1),className:"bv-menu",children:s.jsx(Kw,{actions:t,onClose:()=>a(!1)})})]})}function qw({items:e,orientation:t="horizontal",label:r="Tools",overflow:o=[],density:n}){return s.jsxs("div",{className:`bv-toolbar ${t}`,role:"toolbar","aria-orientation":t,"aria-label":r,children:[e.map((i,a)=>s.jsxs(Re.Fragment,{children:[a>0&&i.group!==e[a-1].group&&s.jsx("span",{className:"bv-toolbar-divider"}),s.jsx(ie,{intent:"ghost",density:n,icon:i.icon,iconOnly:t==="vertical","aria-label":i.label,"aria-pressed":i.active,disabled:i.disabled,className:i.active?"active":"",onClick:i.onSelect,children:i.label})]},i.id)),o.length>0&&s.jsx(ff,{label:"More",actions:o,intent:"ghost",density:n})]})}function nh({items:e,compact:t=!1}){return s.jsx("dl",{className:`bv-definition-list ${t?"compact":""}`,children:e.map((r,o)=>s.jsxs("div",{className:"bv-definition-row",children:[s.jsx("dt",{children:r.term}),s.jsx("dd",{children:r.description})]},o))})}function Vs({label:e,summary:t,icon:r,children:o,popover:n,className:i=""}){const[a,l]=m.useState(!1),c=m.useRef(null);return s.jsxs("div",{ref:c,className:`bv-adaptive-field ${i}`.trim(),children:[s.jsx("div",{className:"bv-adaptive-inline",children:o}),s.jsxs(ie,{type:"button",intent:"secondary",className:"bv-adaptive-trigger",icon:r,"aria-haspopup":"dialog","aria-expanded":a,onClick:()=>l(!0),children:[s.jsx("span",{className:"bv-adaptive-summary",children:t}),s.jsx("span",{"aria-hidden":"true",children:"↗"})]}),s.jsxs(Io,{open:a,anchor:c,onClose:()=>l(!1),className:"bv-adaptive-popover",children:[s.jsxs("header",{children:[s.jsx("strong",{children:e}),s.jsx(ie,{type:"button",intent:"ghost",icon:"×",iconOnly:!0,"aria-label":`Close ${e} editor`,onClick:()=>l(!1)})]}),s.jsx("div",{children:n})]})]})}function Na({open:e,title:t,description:r,children:o,footer:n,onClose:i,modal:a=!0,size:l="medium"}){return e?s.jsx(kv,{children:s.jsx("div",{className:`bv-dialog-layer ${a?"modal":"modeless"}`,role:a?"presentation":void 0,onPointerDown:c=>{a&&c.target===c.currentTarget&&i()},children:s.jsxs("section",{className:`bv-dialog ${l}`,role:"dialog","aria-modal":a,"aria-label":t,children:[s.jsxs("header",{children:[s.jsxs("div",{children:[s.jsx("h2",{children:t}),r&&s.jsx("p",{children:r})]}),s.jsx(ie,{intent:"ghost",icon:"×",iconOnly:!0,"aria-label":"Close",onClick:i})]}),s.jsx("div",{className:"bv-dialog-body",children:o}),n&&s.jsx("footer",{children:n})]})})}):null}function pf({open:e,editorName:t,onSave:r,onDiscard:o,onKeep:n}){return s.jsx(Na,{open:e,title:"Unsaved changes",description:`${t} contains execution changes that have not been saved.`,onClose:n,size:"small",footer:s.jsxs(s.Fragment,{children:[s.jsx(ie,{intent:"ghost",onClick:n,children:"Keep editing"}),s.jsx(ie,{intent:"secondary",onClick:o,children:"Discard"}),s.jsx(ie,{intent:"primary",onClick:r,children:"Save"})]}),children:s.jsx("p",{children:"Save the current draft, discard it, or return to the editor."})})}function hf(){const[e,t]=m.useState(null),r=n=>t({confirmLabel:"Continue",danger:!1,...n}),o=s.jsx(Na,{open:!!e,title:e?.title??"Confirm action",onClose:()=>t(null),size:"small",footer:s.jsxs(s.Fragment,{children:[s.jsx(ie,{intent:"ghost",onClick:()=>t(null),children:"Cancel"}),s.jsx(ie,{intent:e?.danger?"danger":"primary",onClick:()=>{const n=e?.action;t(null),n?.()},children:e?.confirmLabel})]}),children:e?.message&&s.jsx("p",{children:e.message})});return{confirm:r,dialog:o}}function ih({trigger:e,children:t,open:r,onOpen:o}){const[n,i]=m.useState(!1),a=m.useRef(null),l=r??n,c=u=>{i(u),o?.(u)};return s.jsxs("span",{ref:a,className:"bv-popover-host",children:[e({open:l,toggle:()=>c(!l)}),s.jsx(Io,{open:l,anchor:a,onClose:()=>c(!1),className:"bv-popover",children:t})]})}function Ws({items:e,onReorder:t,onRemove:r,renderActions:o,initialExpanded:n=[]}){const[i,a]=m.useState(n),[l,c]=m.useState();return s.jsx("div",{className:"bv-sortable-list",children:e.map(u=>s.jsxs("article",{draggable:!u.disabled,onDragStart:()=>c(u.id),onDragOver:d=>d.preventDefault(),onDrop:()=>{if(!l||l===u.id)return;const d=[...e],f=d.findIndex(x=>x.id===l),p=d.findIndex(x=>x.id===u.id),[g]=d.splice(f,1);d.splice(p,0,g),t(d),c(void 0)},children:[s.jsxs("header",{children:[s.jsx("button",{type:"button",className:"bv-drag-handle","aria-label":`Reorder ${String(u.title)}`,children:"⠿"}),s.jsxs("div",{children:[s.jsx("strong",{children:u.title}),u.description&&s.jsx("small",{children:u.description})]}),o?.(u),s.jsxs("span",{className:"bv-segmented-actions",children:[r&&s.jsx(ie,{intent:"ghost",iconOnly:!0,"aria-label":`Remove ${String(u.title)}`,title:"Remove",onClick:()=>r(u.id),children:"×"}),u.content&&s.jsx(ie,{intent:"ghost",icon:s.jsx("span",{className:"bv-chevron"}),iconOnly:!0,"aria-label":`${i.includes(u.id)?"Collapse":"Expand"} ${String(u.title)}`,"aria-expanded":i.includes(u.id),onClick:()=>a(d=>d.includes(u.id)?d.filter(f=>f!==u.id):[...d,u.id])})]})]}),u.summary&&s.jsx("div",{className:"bv-sortable-summary",children:u.summary}),u.content&&i.includes(u.id)&&s.jsx("div",{className:"bv-sortable-content",children:u.content})]},u.id))})}const it=Re.forwardRef(function({type:t="button",...r},o){return s.jsx("button",{...r,type:t,ref:o})}),Jw=Re.forwardRef(function(t,r){return s.jsx("input",{...t,ref:r})});function zr({tone:e="neutral",title:t,children:r,icon:o,actions:n,onClose:i}){return s.jsxs("aside",{className:`bv-callout ${e}`,role:e==="danger"?"alert":"status",children:[o&&s.jsx("span",{className:"bv-callout-icon",children:o}),s.jsxs("div",{children:[t&&s.jsx("strong",{children:t}),s.jsx("div",{children:r}),n&&s.jsx("div",{className:"bv-callout-actions",children:n})]}),i&&s.jsx(ie,{intent:"ghost",iconOnly:!0,"aria-label":"Close",onClick:i,children:"×"})]})}function Ev({children:e,tone:t="neutral",dot:r=!1}){return s.jsx("span",{className:`bv-badge ${t} ${r?"dot":""}`,children:e})}function Hs({icon:e,title:t,description:r,actions:o}){return s.jsxs("div",{className:"bv-empty-state",children:[e,s.jsx("strong",{children:t}),r&&s.jsx("p",{children:r}),o]})}function Zw({tone:e="neutral",title:t,children:r,onClose:o,duration:n=0}){const i=m.useRef(),a=m.useCallback(()=>{i.current&&window.clearTimeout(i.current)},[]),l=m.useCallback(()=>{a(),n&&(i.current=window.setTimeout(o,n))},[n,o,a]);return m.useEffect(()=>(l(),a),[l,a]),s.jsxs("div",{className:`bv-toast ${e}`,role:"status",tabIndex:0,onPointerEnter:a,onPointerLeave:l,onFocus:a,onBlur:l,children:[s.jsxs("div",{children:[s.jsx("strong",{children:t}),r&&s.jsx("p",{children:r})]}),s.jsx(ie,{intent:"ghost",iconOnly:!0,"aria-label":"Dismiss",onClick:o,children:"×"})]})}function di(){return(di=Object.assign||function(e){for(var t=1;t=0||(n[r]=e[r]);return n}function Hi(e){var t=m.useRef(e),r=m.useRef(function(o){t.current&&t.current(o)});return t.current=e,r.current}var ti=function(e,t,r){return t===void 0&&(t=0),r===void 0&&(r=1),e>r?r:e0:v.buttons>0)&&i.current?a(ah(i.current,v,u.current)):(h(!1),c())},b=function(){h(!1),c()};function h(v){var _=d.current,y=Hu(i.current),T=v?y.addEventListener:y.removeEventListener;T(_?"touchmove":"mousemove",k),T(_?"touchend":"mouseup",b)}return[function(v){var _=v.nativeEvent,y=i.current;if(y&&(lh(_),!function(S,z){return z&&!$i(S)}(_,d.current)&&y)){if($i(_)){d.current=!0;var T=_.changedTouches||[];T.length&&(u.current=T[0].identifier)}y.focus(),a(ah(y,_,u.current)),h(!0)}},function(v){var _=v.which||v.keyCode;_<37||_>40||(v.preventDefault(),l({left:_===39?.05:_===37?-.05:0,top:_===40?.05:_===38?-.05:0}))},function(v){var _=v.which||v.keyCode;_>=37&&_<=40&&c()},h]},[l,a,c]),p=f[0],g=f[1],x=f[2],w=f[3];return m.useEffect(function(){return w},[w]),Re.createElement("div",di({},n,{onTouchStart:p,onMouseDown:p,className:"react-colorful__interactive",ref:i,onKeyDown:g,onKeyUp:x,tabIndex:0,role:"slider"}))}),Oa=function(e){return e.filter(Boolean).join(" ")},vf=function(e){var t=e.color,r=e.left,o=e.top,n=o===void 0?.5:o,i=Oa(["react-colorful__pointer",e.className]);return Re.createElement("div",{className:i,style:{top:100*n+"%",left:100*r+"%"}},Re.createElement("div",{className:"react-colorful__pointer-fill",style:{backgroundColor:t}}))},pt=function(e,t,r){return t===void 0&&(t=0),r===void 0&&(r=Math.pow(10,t)),Math.round(r*e)/r},Tv=function(e){return t0($u(e))},$u=function(e){return e[0]==="#"&&(e=e.substring(1)),e.length<6?{r:parseInt(e[0]+e[0],16),g:parseInt(e[1]+e[1],16),b:parseInt(e[2]+e[2],16),a:e.length===4?pt(parseInt(e[3]+e[3],16)/255,2):1}:{r:parseInt(e.substring(0,2),16),g:parseInt(e.substring(2,4),16),b:parseInt(e.substring(4,6),16),a:e.length===8?pt(parseInt(e.substring(6,8),16)/255,2):1}},Rv=function(e){return e0(Qw(e))},Sv=function(e){var t=e.s,r=e.v,o=e.a,n=(200-t)*r/100;return{h:pt(e.h),s:pt(n>0&&n<200?t*r/100/(n<=100?n:200-n)*100:0),l:pt(n/2),a:pt(o,2)}},Yu=function(e){var t=Sv(e);return"hsl("+t.h+", "+t.s+"%, "+t.l+"%)"},Dc=function(e){var t=Sv(e);return"hsla("+t.h+", "+t.s+"%, "+t.l+"%, "+t.a+")"},Qw=function(e){var t=e.h,r=e.s,o=e.v,n=e.a;t=t/360*6,r/=100,o/=100;var i=Math.floor(t),a=o*(1-r),l=o*(1-(t-i)*r),c=o*(1-(1-t+i)*r),u=i%6;return{r:pt(255*[o,l,a,a,c,o][u]),g:pt(255*[c,o,o,l,a,a][u]),b:pt(255*[a,a,c,o,o,l][u]),a:pt(n,2)}},ol=function(e){var t=e.toString(16);return t.length<2?"0"+t:t},e0=function(e){var t=e.r,r=e.g,o=e.b,n=e.a,i=n<1?ol(pt(255*n)):"";return"#"+ol(t)+ol(r)+ol(o)+i},t0=function(e){var t=e.r,r=e.g,o=e.b,n=e.a,i=Math.max(t,r,o),a=i-Math.min(t,r,o),l=a?i===t?(r-o)/a:i===r?2+(o-t)/a:4+(t-r)/a:0;return{h:pt(60*(l<0?l+6:l)),s:pt(i?a/i*100:0),v:pt(i/255*100),a:n}},Lv=Re.memo(function(e){var t=e.hue,r=e.onChange,o=e.onChangeEnd,n=Oa(["react-colorful__hue",e.className]);return Re.createElement("div",{className:n},Re.createElement(bf,{onMove:function(i){r({h:360*i.left})},onKey:function(i){r({h:ti(t+360*i.left,0,360)})},onEnd:o,"aria-label":"Hue","aria-valuenow":pt(t),"aria-valuemax":"360","aria-valuemin":"0"},Re.createElement(vf,{className:"react-colorful__hue-pointer",left:t/360,color:Yu({h:t,s:100,v:100,a:1})})))}),Cv=Re.memo(function(e){var t=e.hsva,r=e.onChange,o=e.onChangeEnd,n={backgroundColor:Yu({h:t.h,s:100,v:100,a:1})};return Re.createElement("div",{className:"react-colorful__saturation",style:n},Re.createElement(bf,{onMove:function(i){r({s:100*i.left,v:100-100*i.top})},onKey:function(i){r({s:ti(t.s+100*i.left,0,100),v:ti(t.v-100*i.top,0,100)})},onEnd:o,"aria-label":"Color","aria-valuetext":"Saturation "+pt(t.s)+"%, Brightness "+pt(t.v)+"%"},Re.createElement(vf,{className:"react-colorful__saturation-pointer",top:1-t.v/100,left:t.s/100,color:Yu(t)})))}),Nv=function(e,t){if(e===t)return!0;for(var r in e)if(e[r]!==t[r])return!1;return!0},Ov=function(e,t){return e.toLowerCase()===t.toLowerCase()||Nv($u(e),$u(t))};function Mv(e,t,r,o){var n=Hi(r),i=Hi(o),a=m.useState(function(){return e.toHsva(t)}),l=a[0],c=a[1],u=m.useRef({color:t,hsva:l}),d=m.useRef(!1);m.useEffect(function(){if(!e.equal(t,u.current.color)){var g=e.toHsva(t);u.current={hsva:g,color:t},c(g),d.current=!1}},[t,e]),m.useEffect(function(){var g;Nv(l,u.current.hsva)||e.equal(g=e.fromHsva(l),u.current.color)||(u.current={hsva:l,color:g},n(g),d.current=!0)},[l,e,n]);var f=m.useCallback(function(g){c(function(x){return Object.assign({},x,g)})},[]),p=m.useCallback(function(){d.current&&(d.current=!1,i(u.current.color))},[i]);return[l,f,p]}var r0=typeof window<"u"?m.useLayoutEffect:m.useEffect,o0=function(){return typeof __webpack_nonce__<"u"?__webpack_nonce__:void 0},sh=new WeakMap,Av=function(e){r0(function(){var t=e.current;if(typeof document<"u"&&t){var r=t.getRootNode?t.getRootNode():t.ownerDocument,o=r&&("head"in r||"host"in r)?r:t.ownerDocument;if(!sh.has(o)){var n="head"in o?o.head:o,i=(n.ownerDocument||document).createElement("style");i.innerHTML=`.react-colorful{position:relative;display:flex;flex-direction:column;width:200px;height:200px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.react-colorful__saturation{position:relative;flex-grow:1;border-color:transparent;border-bottom:12px solid #000;border-radius:8px 8px 0 0;background-image:linear-gradient(0deg,#000,transparent),linear-gradient(90deg,#fff,hsla(0,0%,100%,0))}.react-colorful__alpha-gradient,.react-colorful__pointer-fill{content:"";position:absolute;left:0;top:0;right:0;bottom:0;pointer-events:none;border-radius:inherit}.react-colorful__alpha-gradient,.react-colorful__saturation{box-shadow:inset 0 0 0 1px rgba(0,0,0,.05)}.react-colorful__alpha,.react-colorful__hue{position:relative;height:24px}.react-colorful__hue{background:linear-gradient(90deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red)}.react-colorful__last-control{border-radius:0 0 8px 8px}.react-colorful__interactive{position:absolute;left:0;top:0;right:0;bottom:0;border-radius:inherit;outline:none;touch-action:none}.react-colorful__pointer{position:absolute;z-index:1;box-sizing:border-box;width:28px;height:28px;transform:translate(-50%,-50%);background-color:#fff;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 4px rgba(0,0,0,.2)}.react-colorful__interactive:focus .react-colorful__pointer{transform:translate(-50%,-50%) scale(1.1)}.react-colorful__alpha,.react-colorful__alpha-pointer{background-color:#fff;background-image:url('data:image/svg+xml;charset=utf-8,')}.react-colorful__saturation-pointer{z-index:3}.react-colorful__hue-pointer{z-index:2}`;var a=o0();a&&i.setAttribute("nonce",a),sh.set(o,i),n.appendChild(i)}}},[])},n0=function(e){var t=e.className,r=e.colorModel,o=e.color,n=o===void 0?r.defaultColor:o,i=e.onChange,a=e.onChangeEnd,l=gf(e,["className","colorModel","color","onChange","onChangeEnd"]),c=m.useRef(null);Av(c);var u=Mv(r,n,i,a),d=u[0],f=u[1],p=u[2],g=Oa(["react-colorful",t]);return Re.createElement("div",di({},l,{ref:c,className:g}),Re.createElement(Cv,{hsva:d,onChange:f,onChangeEnd:p}),Re.createElement(Lv,{hue:d.h,onChange:f,onChangeEnd:p,className:"react-colorful__last-control"}))},i0={defaultColor:"000",toHsva:Tv,fromHsva:function(e){return Rv({h:e.h,s:e.s,v:e.v,a:1})},equal:Ov},a0=function(e){return Re.createElement(n0,di({},e,{colorModel:i0}))},l0=function(e){var t=e.className,r=e.hsva,o=e.onChange,n=e.onChangeEnd,i={backgroundImage:"linear-gradient(90deg, "+Dc(Object.assign({},r,{a:0}))+", "+Dc(Object.assign({},r,{a:1}))+")"},a=Oa(["react-colorful__alpha",t]),l=pt(100*r.a);return Re.createElement("div",{className:a},Re.createElement("div",{className:"react-colorful__alpha-gradient",style:i}),Re.createElement(bf,{onMove:function(c){o({a:c.left})},onKey:function(c){o({a:ti(r.a+c.left)})},onEnd:n,"aria-label":"Alpha","aria-valuetext":l+"%","aria-valuenow":l,"aria-valuemin":"0","aria-valuemax":"100"},Re.createElement(vf,{className:"react-colorful__alpha-pointer",left:r.a,color:Dc(r)})))},s0=function(e){var t=e.className,r=e.colorModel,o=e.color,n=o===void 0?r.defaultColor:o,i=e.onChange,a=e.onChangeEnd,l=gf(e,["className","colorModel","color","onChange","onChangeEnd"]),c=m.useRef(null);Av(c);var u=Mv(r,n,i,a),d=u[0],f=u[1],p=u[2],g=Oa(["react-colorful",t]);return Re.createElement("div",di({},l,{ref:c,className:g}),Re.createElement(Cv,{hsva:d,onChange:f,onChangeEnd:p}),Re.createElement(Lv,{hue:d.h,onChange:f,onChangeEnd:p}),Re.createElement(l0,{hsva:d,onChange:f,onChangeEnd:p,className:"react-colorful__last-control"}))},c0={defaultColor:"0001",toHsva:Tv,fromHsva:Rv,equal:Ov},u0=function(e){return Re.createElement(s0,di({},e,{colorModel:c0}))},Dv={},dt=fr&&fr.__assign||function(){return dt=Object.assign||function(e){for(var t,r=1,o=arguments.length;r-1){M.current.stack=he.slice(0,ot+1);var nt=M.current.stack.length;if(nt>bh){var ye=nt-bh;M.current.stack=he.slice(ye,nt),M.current.offset=Math.max(M.current.offset-ye,0)}}var We=Date.now();if(de){var me=M.current.stack[M.current.offset];if(me&&We-me.timestamp-1){M.current.stack=he.slice(0,ot+1);var nt=M.current.stack.length;if(nt>ph){var ye=nt-ph;M.current.stack=he.slice(ye,nt),M.current.offset=Math.max(M.current.offset-ye,0)}}var We=Date.now();if(ue){var me=M.current.stack[M.current.offset];if(me&&We-me.timestamp=ot&&He<=nt&&Ht.startsWith(fe)?Ht.substring(fe.length):Ht}).join(` `);if(se!==ye){var We=he[ot];le({value:ye,selectionStart:We?.startsWith(fe)?$-fe.length:$,selectionEnd:pe-(se.length-ye.length)})}}else if($!==pe){var he=Z(se,$),me=he.length-1,we=Z(se,pe).length-1,We=he[me];le({value:se.split(` -`).map(function(hi,Ba){return Ba>=me&&Ba<=we?fe+hi:hi}).join(` -`),selectionStart:We&&/\S/.test(We)?$+fe.length:$,selectionEnd:pe+fe.length*(we-me+1)})}else{var qe=$+fe.length;le({value:se.substring(0,$)+fe+se.substring(pe),selectionStart:qe,selectionEnd:qe})}else if(G.key==="Backspace"){var gt=$!==pe,Sr=se.substring(0,$);if(Sr.endsWith(fe)&&!gt){G.preventDefault();var qe=$-fe.length;le({value:se.substring(0,$-fe.length)+se.substring(pe),selectionStart:qe,selectionEnd:qe})}}else if(G.key==="Enter"){if($===pe){var yt=Z(se,$).pop(),yn=yt?.match(/^\s+/);if(yn?.[0]){G.preventDefault();var pi=` -`+yn[0],qe=$+pi.length;le({value:se.substring(0,$)+pi+se.substring(pe),selectionStart:qe,selectionEnd:qe})}}}else if(G.keyCode===fh||G.keyCode===ph||G.keyCode===hh||G.keyCode===gh){var rr=void 0;G.keyCode===fh&&G.shiftKey?rr=["(",")"]:G.keyCode===ph?G.shiftKey?rr=["{","}"]:rr=["[","]"]:G.keyCode===hh?G.shiftKey?rr=['"','"']:rr=["'","'"]:G.keyCode===gh&&!G.shiftKey&&(rr=["`","`"]),$!==pe&&rr&&(G.preventDefault(),le({value:se.substring(0,$)+rr[0]+se.substring($,pe)+rr[1]+se.substring(pe),selectionStart:$,selectionEnd:pe+2}))}else(jc?G.metaKey&&G.keyCode===ol:G.ctrlKey&&G.keyCode===ol)&&!G.shiftKey&&!G.altKey?(G.preventDefault(),Ce()):(jc?G.metaKey&&G.keyCode===ol&&G.shiftKey:f0?G.ctrlKey&&G.keyCode===c0:G.ctrlKey&&G.keyCode===ol&&G.shiftKey)&&!G.altKey?(G.preventDefault(),Ee()):G.keyCode===u0&&G.ctrlKey&&(!jc||G.shiftKey)&&(G.preventDefault(),ie(function(Ht){return!Ht}))}},It=function(G){var de=G.currentTarget,se=de.value,$=de.selectionStart,pe=de.selectionEnd;Y({value:se,selectionStart:$,selectionEnd:pe},!0),v(se)};return nr.useEffect(function(){Q()},[Q]),nr.useImperativeHandle(r,function(){return{get session(){return{history:M.current}},set session(G){M.current=G.history}}},[]),nr.createElement("div",dt({},R,{style:dt(dt({},ki.container),P)}),nr.createElement("pre",dt({className:S,"aria-hidden":"true",style:dt(dt(dt({},ki.editor),ki.highlight),X)},typeof q=="string"?{dangerouslySetInnerHTML:{__html:q+"
"}}:{children:q})),nr.createElement("textarea",{ref:function(G){return D.current=G},style:dt(dt(dt({},ki.editor),ki.textarea),X),className:kl+(E?" ".concat(E):""),id:A,value:C,onChange:It,onKeyDown:ve,onClick:w,onKeyUp:h,onFocus:k,onBlur:x,disabled:n,form:i,maxLength:f,minLength:p,name:g,placeholder:T,readOnly:z,required:N,autoFocus:o,autoCapitalize:"off",autoComplete:"off",autoCorrect:"off",spellCheck:!1,"data-gramm":!1}),nr.createElement("style",{dangerouslySetInnerHTML:{__html:p0}}))}),ki={container:{position:"relative",textAlign:"left",boxSizing:"border-box",padding:0,overflow:"hidden"},textarea:{position:"absolute",top:0,left:0,height:"100%",width:"100%",resize:"none",color:"inherit",overflow:"hidden",MozOsxFontSmoothing:"grayscale",WebkitFontSmoothing:"antialiased",WebkitTextFillColor:"transparent"},highlight:{position:"relative",pointerEvents:"none"},editor:{margin:0,border:0,background:"none",boxSizing:"inherit",display:"inherit",fontFamily:"inherit",fontSize:"inherit",fontStyle:"inherit",fontVariantLigatures:"inherit",fontWeight:"inherit",letterSpacing:"inherit",lineHeight:"inherit",tabSize:"inherit",textIndent:"inherit",textRendering:"inherit",textTransform:"inherit",whiteSpace:"pre-wrap",wordBreak:"keep-all",overflowWrap:"break-word"}};Bv.default=h0;var g0={exports:{}};(function(e){var t=typeof window<"u"?window:typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope?self:{};/** +`).map(function(gi,Ba){return Ba>=me&&Ba<=we?fe+gi:gi}).join(` +`),selectionStart:We&&/\S/.test(We)?$+fe.length:$,selectionEnd:pe+fe.length*(we-me+1)})}else{var qe=$+fe.length;le({value:se.substring(0,$)+fe+se.substring(pe),selectionStart:qe,selectionEnd:qe})}else if(G.key==="Backspace"){var gt=$!==pe,Sr=se.substring(0,$);if(Sr.endsWith(fe)&&!gt){G.preventDefault();var qe=$-fe.length;le({value:se.substring(0,$-fe.length)+se.substring(pe),selectionStart:qe,selectionEnd:qe})}}else if(G.key==="Enter"){if($===pe){var yt=Z(se,$).pop(),yn=yt?.match(/^\s+/);if(yn?.[0]){G.preventDefault();var hi=` +`+yn[0],qe=$+hi.length;le({value:se.substring(0,$)+hi+se.substring(pe),selectionStart:qe,selectionEnd:qe})}}}else if(G.keyCode===ch||G.keyCode===uh||G.keyCode===dh||G.keyCode===fh){var rr=void 0;G.keyCode===ch&&G.shiftKey?rr=["(",")"]:G.keyCode===uh?G.shiftKey?rr=["{","}"]:rr=["[","]"]:G.keyCode===dh?G.shiftKey?rr=['"','"']:rr=["'","'"]:G.keyCode===fh&&!G.shiftKey&&(rr=["`","`"]),$!==pe&&rr&&(G.preventDefault(),le({value:se.substring(0,$)+rr[0]+se.substring($,pe)+rr[1]+se.substring(pe),selectionStart:$,selectionEnd:pe+2}))}else(Ic?G.metaKey&&G.keyCode===nl:G.ctrlKey&&G.keyCode===nl)&&!G.shiftKey&&!G.altKey?(G.preventDefault(),Ce()):(Ic?G.metaKey&&G.keyCode===nl&&G.shiftKey:m0?G.ctrlKey&&G.keyCode===g0:G.ctrlKey&&G.keyCode===nl&&G.shiftKey)&&!G.altKey?(G.preventDefault(),Ee()):G.keyCode===b0&&G.ctrlKey&&(!Ic||G.shiftKey)&&(G.preventDefault(),ne(function(Ht){return!Ht}))}},It=function(G){var ue=G.currentTarget,se=ue.value,$=ue.selectionStart,pe=ue.selectionEnd;Y({value:se,selectionStart:$,selectionEnd:pe},!0),v(se)};return nr.useEffect(function(){Q()},[Q]),nr.useImperativeHandle(r,function(){return{get session(){return{history:M.current}},set session(G){M.current=G.history}}},[]),nr.createElement("div",dt({},R,{style:dt(dt({},Ei.container),B)}),nr.createElement("pre",dt({className:S,"aria-hidden":"true",style:dt(dt(dt({},Ei.editor),Ei.highlight),X)},typeof q=="string"?{dangerouslySetInnerHTML:{__html:q+"
"}}:{children:q})),nr.createElement("textarea",{ref:function(G){return D.current=G},style:dt(dt(dt({},Ei.editor),Ei.textarea),X),className:El+(E?" ".concat(E):""),id:A,value:C,onChange:It,onKeyDown:ve,onClick:w,onKeyUp:h,onFocus:k,onBlur:x,disabled:n,form:i,maxLength:f,minLength:p,name:g,placeholder:T,readOnly:z,required:N,autoFocus:o,autoCapitalize:"off",autoComplete:"off",autoCorrect:"off",spellCheck:!1,"data-gramm":!1}),nr.createElement("style",{dangerouslySetInnerHTML:{__html:x0}}))}),Ei={container:{position:"relative",textAlign:"left",boxSizing:"border-box",padding:0,overflow:"hidden"},textarea:{position:"absolute",top:0,left:0,height:"100%",width:"100%",resize:"none",color:"inherit",overflow:"hidden",MozOsxFontSmoothing:"grayscale",WebkitFontSmoothing:"antialiased",WebkitTextFillColor:"transparent"},highlight:{position:"relative",pointerEvents:"none"},editor:{margin:0,border:0,background:"none",boxSizing:"inherit",display:"inherit",fontFamily:"inherit",fontSize:"inherit",fontStyle:"inherit",fontVariantLigatures:"inherit",fontWeight:"inherit",letterSpacing:"inherit",lineHeight:"inherit",tabSize:"inherit",textIndent:"inherit",textRendering:"inherit",textTransform:"inherit",whiteSpace:"pre-wrap",wordBreak:"keep-all",overflowWrap:"break-word"}};Dv.default=y0;var _0={exports:{}};(function(e){var t=typeof window<"u"?window:typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope?self:{};/** * Prism: Lightweight, robust, elegant syntax highlighting * * @license MIT * @author Lea Verou * @namespace * @public - */var r=function(o){var n=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,i=0,a={},l={manual:o.Prism&&o.Prism.manual,disableWorkerMessageHandler:o.Prism&&o.Prism.disableWorkerMessageHandler,util:{encode:function h(v){return v instanceof c?new c(v.type,h(v.content),v.alias):Array.isArray(v)?v.map(h):v.replace(/&/g,"&").replace(/"u")return null;if(document.currentScript&&document.currentScript.tagName==="SCRIPT")return document.currentScript;try{throw new Error}catch(y){var h=(/at [^(\r\n]*\((.*):[^:]+:[^:]+\)$/i.exec(y.stack)||[])[1];if(h){var v=document.getElementsByTagName("script");for(var _ in v)if(v[_].src==h)return v[_]}return null}},isActive:function(h,v,_){for(var y="no-"+v;h;){var T=h.classList;if(T.contains(v))return!0;if(T.contains(y))return!1;h=h.parentElement}return!!_}},languages:{plain:a,plaintext:a,text:a,txt:a,extend:function(h,v){var _=l.util.clone(l.languages[h]);for(var y in v)_[y]=v[y];return _},insertBefore:function(h,v,_,y){y=y||l.languages;var T=y[h],S={};for(var z in T)if(T.hasOwnProperty(z)){if(z==v)for(var N in _)_.hasOwnProperty(N)&&(S[N]=_[N]);_.hasOwnProperty(z)||(S[z]=T[z])}var P=y[h];return y[h]=S,l.languages.DFS(l.languages,function(B,O){O===P&&B!=h&&(this[B]=S)}),S},DFS:function h(v,_,y,T){T=T||{};var S=l.util.objId;for(var z in v)if(v.hasOwnProperty(z)){_.call(v,z,v[z],y||z);var N=v[z],P=l.util.type(N);P==="Object"&&!T[S(N)]?(T[S(N)]=!0,h(N,_,null,T)):P==="Array"&&!T[S(N)]&&(T[S(N)]=!0,h(N,_,z,T))}}},plugins:{},highlightAll:function(h,v){l.highlightAllUnder(document,h,v)},highlightAllUnder:function(h,v,_){var y={callback:_,container:h,selector:'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'};l.hooks.run("before-highlightall",y),y.elements=Array.prototype.slice.apply(y.container.querySelectorAll(y.selector)),l.hooks.run("before-all-elements-highlight",y);for(var T=0,S;S=y.elements[T++];)l.highlightElement(S,v===!0,y.callback)},highlightElement:function(h,v,_){var y=l.util.getLanguage(h),T=l.languages[y];l.util.setLanguage(h,y);var S=h.parentElement;S&&S.nodeName.toLowerCase()==="pre"&&l.util.setLanguage(S,y);var z=h.textContent,N={element:h,language:y,grammar:T,code:z};function P(O){N.highlightedCode=O,l.hooks.run("before-insert",N),N.element.innerHTML=N.highlightedCode,l.hooks.run("after-highlight",N),l.hooks.run("complete",N),_&&_.call(N.element)}if(l.hooks.run("before-sanity-check",N),S=N.element.parentElement,S&&S.nodeName.toLowerCase()==="pre"&&!S.hasAttribute("tabindex")&&S.setAttribute("tabindex","0"),!N.code){l.hooks.run("complete",N),_&&_.call(N.element);return}if(l.hooks.run("before-highlight",N),!N.grammar){P(l.util.encode(N.code));return}if(v&&o.Worker){var B=new Worker(l.filename);B.onmessage=function(O){P(O.data)},B.postMessage(JSON.stringify({language:N.language,code:N.code,immediateClose:!0}))}else P(l.highlight(N.code,N.grammar,N.language))},highlight:function(h,v,_){var y={code:h,grammar:v,language:_};if(l.hooks.run("before-tokenize",y),!y.grammar)throw new Error('The language "'+y.language+'" has no grammar.');return y.tokens=l.tokenize(y.code,y.grammar),l.hooks.run("after-tokenize",y),c.stringify(l.util.encode(y.tokens),y.language)},tokenize:function(h,v){var _=v.rest;if(_){for(var y in _)v[y]=_[y];delete v.rest}var T=new f;return p(T,T.head,h),d(h,T,v,T.head,0),x(T)},hooks:{all:{},add:function(h,v){var _=l.hooks.all;_[h]=_[h]||[],_[h].push(v)},run:function(h,v){var _=l.hooks.all[h];if(!(!_||!_.length))for(var y=0,T;T=_[y++];)T(v)}},Token:c};o.Prism=l;function c(h,v,_,y){this.type=h,this.content=v,this.alias=_,this.length=(y||"").length|0}c.stringify=function h(v,_){if(typeof v=="string")return v;if(Array.isArray(v)){var y="";return v.forEach(function(P){y+=h(P,_)}),y}var T={type:v.type,content:h(v.content,_),tag:"span",classes:["token",v.type],attributes:{},language:_},S=v.alias;S&&(Array.isArray(S)?Array.prototype.push.apply(T.classes,S):T.classes.push(S)),l.hooks.run("wrap",T);var z="";for(var N in T.attributes)z+=" "+N+'="'+(T.attributes[N]||"").replace(/"/g,""")+'"';return"<"+T.tag+' class="'+T.classes.join(" ")+'"'+z+">"+T.content+""};function u(h,v,_,y){h.lastIndex=v;var T=h.exec(_);if(T&&y&&T[1]){var S=T[1].length;T.index+=S,T[0]=T[0].slice(S)}return T}function d(h,v,_,y,T,S){for(var z in _)if(!(!_.hasOwnProperty(z)||!_[z])){var N=_[z];N=Array.isArray(N)?N:[N];for(var P=0;P=S.reach);W+=D.value.length,D=D.next){var F=D.value;if(v.length>h.length)return;if(!(F instanceof c)){var ie=1,X;if(A){if(X=u(M,W,h,E),!X||X.index>=h.length)break;var Q=X.index,q=X.index+X[0].length,Z=W;for(Z+=D.value.length;Q>=Z;)D=D.next,Z+=D.value.length;if(Z-=D.value.length,W=Z,D.value instanceof c)continue;for(var Y=D;Y!==v.tail&&(ZS.reach&&(S.reach=Ee);var ve=D.prev;le&&(ve=p(v,ve,le),W+=le.length),g(v,ve,ie);var It=new c(z,O?l.tokenize(oe,O):oe,C,oe);if(D=p(v,ve,It),Ce&&p(v,D,Ce),ie>1){var G={cause:z+","+P,reach:Ee};d(h,v,_,D.prev,W,G),S&&G.reach>S.reach&&(S.reach=G.reach)}}}}}}function f(){var h={value:null,prev:null,next:null},v={value:null,prev:h,next:null};h.next=v,this.head=h,this.tail=v,this.length=0}function p(h,v,_){var y=v.next,T={value:_,prev:v,next:y};return v.next=T,y.prev=T,h.length++,T}function g(h,v,_){for(var y=v.next,T=0;T<_&&y!==h.tail;T++)y=y.next;v.next=y,y.prev=v,h.length-=T}function x(h){for(var v=[],_=h.head.next;_!==h.tail;)v.push(_.value),_=_.next;return v}if(!o.document)return o.addEventListener&&(l.disableWorkerMessageHandler||o.addEventListener("message",function(h){var v=JSON.parse(h.data),_=v.language,y=v.code,T=v.immediateClose;o.postMessage(l.highlight(y,l.languages[_],_)),T&&o.close()},!1)),l;var w=l.util.currentScript();w&&(l.filename=w.src,w.hasAttribute("data-manual")&&(l.manual=!0));function k(){l.manual||l.highlightAll()}if(!l.manual){var b=document.readyState;b==="loading"||b==="interactive"&&w&&w.defer?document.addEventListener("DOMContentLoaded",k):window.requestAnimationFrame?window.requestAnimationFrame(k):window.setTimeout(k,16)}return l}(t);e.exports&&(e.exports=r),typeof fr<"u"&&(fr.Prism=r),r.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},r.languages.markup.tag.inside["attr-value"].inside.entity=r.languages.markup.entity,r.languages.markup.doctype.inside["internal-subset"].inside=r.languages.markup,r.hooks.add("wrap",function(o){o.type==="entity"&&(o.attributes.title=o.content.replace(/&/,"&"))}),Object.defineProperty(r.languages.markup.tag,"addInlined",{value:function(n,i){var a={};a["language-"+i]={pattern:/(^$)/i,lookbehind:!0,inside:r.languages[i]},a.cdata=/^$/i;var l={"included-cdata":{pattern://i,inside:a}};l["language-"+i]={pattern:/[\s\S]+/,inside:r.languages[i]};var c={};c[n]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,function(){return n}),"i"),lookbehind:!0,greedy:!0,inside:l},r.languages.insertBefore("markup","cdata",c)}}),Object.defineProperty(r.languages.markup.tag,"addAttribute",{value:function(o,n){r.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+o+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[n,"language-"+n],inside:r.languages[n]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),r.languages.html=r.languages.markup,r.languages.mathml=r.languages.markup,r.languages.svg=r.languages.markup,r.languages.xml=r.languages.extend("markup",{}),r.languages.ssml=r.languages.xml,r.languages.atom=r.languages.xml,r.languages.rss=r.languages.xml,function(o){var n=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;o.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:"+/[^;{\s"']|\s+(?!\s)/.source+"|"+n.source+")*?"+/(?:;|(?=\s*\{))/.source),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+n.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+n.source+"$"),alias:"url"}}},selector:{pattern:RegExp(`(^|[{}\\s])[^{}\\s](?:[^{};"'\\s]|\\s+(?![\\s{])|`+n.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:n,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},o.languages.css.atrule.inside.rest=o.languages.css;var i=o.languages.markup;i&&(i.tag.addInlined("style","css"),i.tag.addAttribute("style","css"))}(r),r.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},r.languages.javascript=r.languages.extend("clike",{"class-name":[r.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+(/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source)+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),r.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,r.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source+/\//.source+"(?:"+/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source+"|"+/(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source+")"+/(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:r.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:r.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:r.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:r.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:r.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),r.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:r.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),r.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),r.languages.markup&&(r.languages.markup.tag.addInlined("script","javascript"),r.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),r.languages.js=r.languages.javascript,function(){if(typeof r>"u"||typeof document>"u")return;Element.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector);var o="Loading…",n=function(w,k){return"✖ Error "+w+" while fetching file: "+k},i="✖ Error: File does not exist or is empty",a={js:"javascript",py:"python",rb:"ruby",ps1:"powershell",psm1:"powershell",sh:"bash",bat:"batch",h:"c",tex:"latex"},l="data-src-status",c="loading",u="loaded",d="failed",f="pre[data-src]:not(["+l+'="'+u+'"]):not(['+l+'="'+c+'"])';function p(w,k,b){var h=new XMLHttpRequest;h.open("GET",w,!0),h.onreadystatechange=function(){h.readyState==4&&(h.status<400&&h.responseText?k(h.responseText):h.status>=400?b(n(h.status,h.statusText)):b(i))},h.send(null)}function g(w){var k=/^\s*(\d+)\s*(?:(,)\s*(?:(\d+)\s*)?)?$/.exec(w||"");if(k){var b=Number(k[1]),h=k[2],v=k[3];return h?v?[b,Number(v)]:[b,void 0]:[b,b]}}r.hooks.add("before-highlightall",function(w){w.selector+=", "+f}),r.hooks.add("before-sanity-check",function(w){var k=w.element;if(k.matches(f)){w.code="",k.setAttribute(l,c);var b=k.appendChild(document.createElement("CODE"));b.textContent=o;var h=k.getAttribute("data-src"),v=w.language;if(v==="none"){var _=(/\.(\w+)$/.exec(h)||[,"none"])[1];v=a[_]||_}r.util.setLanguage(b,v),r.util.setLanguage(k,v);var y=r.plugins.autoloader;y&&y.loadLanguages(v),p(h,function(T){k.setAttribute(l,u);var S=g(k.getAttribute("data-range"));if(S){var z=T.split(/\r\n?|\n/g),N=S[0],P=S[1]==null?z.length:S[1];N<0&&(N+=z.length),N=Math.max(0,Math.min(N-1,z.length)),P<0&&(P+=z.length),P=Math.max(0,Math.min(P,z.length)),T=z.slice(N,P).join(` -`),k.hasAttribute("data-start")||k.setAttribute("data-start",String(N+1))}b.textContent=T,r.highlightElement(b)},function(T){k.setAttribute(l,d),b.textContent=T})}}),r.plugins.fileHighlight={highlight:function(k){for(var b=(k||document).querySelectorAll(f),h=0,v;v=b[h++];)r.highlightElement(v)}};var x=!1;r.fileHighlight=function(){x||(console.warn("Prism.fileHighlight is deprecated. Use `Prism.plugins.fileHighlight.highlight` instead."),x=!0),r.plugins.fileHighlight.highlight.apply(this,arguments)}}()})(g0);Prism.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}};Prism.languages.webmanifest=Prism.languages.json;function Ko({children:e,minimum:t=165,className:r=""}){return s.jsx("div",{className:`bv-field-grid ${r}`.trim(),style:{"--bv-field-grid-min":`${t}px`},children:e})}function gr({label:e,help:t,error:r,required:o,icon:n,className:i="",children:a}){return s.jsxs("label",{className:`bv-control-field ${r?"is-error":""} ${i}`.trim(),children:[s.jsxs("span",{className:"bv-control-label",children:[n&&s.jsx("span",{className:"bv-field-icon",children:n}),s.jsx("span",{children:e}),o&&s.jsx("span",{"aria-hidden":"true",children:" *"})]}),a,r?s.jsx("small",{className:"bv-control-message is-error",children:r}):t&&s.jsx("small",{className:"bv-control-help bv-control-help-overlay",children:t})]})}function un({label:e,help:t,error:r,icon:o,suffix:n,onValue:i,className:a="",...l}){const c=(u=!1)=>s.jsxs("span",{className:"bv-input-shell",children:[o&&s.jsx("span",{className:"bv-field-icon","aria-hidden":"true",children:o}),s.jsx("input",{...l,id:u&&l.id?`${l.id}-expanded`:l.id,"aria-label":u?e:l["aria-label"],"aria-invalid":!!r,onChange:d=>i?.(d.target.value)}),n&&s.jsx("span",{className:"bv-field-suffix",children:n})]});return s.jsx(gr,{label:e,help:t,error:r,className:a,children:s.jsx(Vs,{label:e,summary:String(l.value??l.defaultValue??l.placeholder??"Edit value"),icon:o,popover:c(!0),children:c()})})}function b0({label:e,help:t,error:r,icon:o,resize:n="vertical",onValue:i,className:a="",...l}){const c=(d=!1)=>s.jsxs("span",{className:`bv-textarea-shell resize-${n}`,children:[o&&s.jsx("span",{className:"bv-field-icon","aria-hidden":"true",children:o}),s.jsx("textarea",{...l,id:d&&l.id?`${l.id}-expanded`:l.id,"aria-label":d?e:l["aria-label"],"aria-invalid":!!r,onChange:f=>i?.(f.target.value)})]}),u=String(l.value??l.defaultValue??l.placeholder??"Edit text");return s.jsx(gr,{label:e,help:t,error:r,className:`bv-textarea-field ${a}`,children:s.jsx(Vs,{label:e,summary:u,icon:o,popover:c(!0),children:c()})})}const v0=m.forwardRef(function(t,r){return s.jsx("textarea",{...t,ref:r})});function Bt({label:e,value:t,min:r,max:o,step:n,unit:i,icon:a,help:l,slider:c=!0,onValue:u,className:d=""}){const f=m.useId(),[p,g]=m.useState(String(t));m.useEffect(()=>g(String(t)),[t]);const x=T=>Math.max(r,Math.min(o,T)),w=()=>{const T=Number(p);Number.isFinite(T)?u(x(T)):g(String(t))},k=`${Math.max(0,Math.min(100,(t-r)/Math.max(Number.EPSILON,o-r)*100))}%`,b=T=>s.jsxs("div",{className:"bv-number-box",children:[a&&s.jsx("span",{className:"bv-field-icon","aria-hidden":"true",children:a}),s.jsx("input",{id:T,value:p,inputMode:Number.isInteger(n)?"numeric":"decimal",onChange:S=>g(S.target.value),onBlur:w,onKeyDown:S=>{S.key==="Enter"&&S.currentTarget.blur(),S.key==="Escape"&&g(String(t))}}),i&&s.jsx("span",{className:"bv-number-unit",children:i})]}),h=s.jsxs("div",{className:"bv-number-slider",style:{"--bubble-left":k},children:[s.jsxs("output",{children:[t,i??""]}),s.jsx("input",{className:"bv-number-track",type:"range",min:r,max:o,step:n,value:t,style:{"--range-fill":k},"aria-labelledby":`${f}-label`,onChange:T=>u(x(+T.target.value))})]}),v=s.jsxs("div",{className:"bv-number-ticks",children:[s.jsx("span",{children:r}),s.jsx("span",{children:o})]}),_=s.jsxs(s.Fragment,{children:[s.jsxs("div",{className:"bv-number-value-row",children:[c&&h,b(f)]}),c&&v]}),y=s.jsxs("div",{className:"bv-number-popup",children:[c&&h,b(`${f}-expanded`),c&&v]});return s.jsxs("div",{className:`bv-number-field ${c?"has-slider":"direct-only"} ${d}`.trim(),children:[s.jsx("label",{id:`${f}-label`,htmlFor:f,children:e}),s.jsx(Vs,{label:e,summary:`${t}${i??""}`,icon:a,popover:y,children:_}),l&&s.jsx("small",{className:"bv-control-help bv-control-help-overlay",children:l})]})}function Pv({label:e,value:t,options:r,onValue:o,disabled:n,className:i=""}){const[a,l]=m.useState(!1),c=m.useRef(null),u=r.find(d=>d.value===t);return s.jsxs("div",{ref:c,className:`bv-select-popover ${i}`.trim(),children:[s.jsxs("button",{type:"button",className:"bv-select-trigger",disabled:n,"aria-label":e,"aria-haspopup":"listbox","aria-expanded":a,onClick:()=>l(d=>!d),children:[s.jsx("span",{children:u?.label??"Select…"}),s.jsx("span",{className:"bv-chevron","aria-hidden":"true"})]}),s.jsx(Io,{open:a,anchor:c,onClose:()=>l(!1),className:"bv-select-menu",matchWidth:!0,children:s.jsx("div",{role:"listbox","aria-label":e,children:r.map(d=>s.jsxs("button",{type:"button",role:"option","aria-selected":d.value===t,disabled:d.disabled,onClick:f=>{o(d.value,{shiftKey:f.shiftKey}),l(!1)},children:[d.icon,s.jsx("span",{children:d.label})]},d.value))})})]})}function tt({label:e,value:t,options:r,onValue:o,help:n,disabled:i}){return s.jsx(gr,{label:e,help:n,children:s.jsx(Pv,{label:e,value:t,options:r,onValue:o,disabled:i})})}function m0({label:e,value:t,options:r,onValue:o,disabled:n,className:i=""}){return s.jsx(Pv,{label:e,value:t,options:r,onValue:o,disabled:n,className:`bv-density-compact ${i}`})}function Qr({label:e,checked:t,onValue:r,help:o,disabled:n}){return s.jsxs("label",{className:"bv-checkbox-field",children:[s.jsx("input",{type:"checkbox",checked:t,disabled:n,onChange:i=>r(i.target.checked)}),s.jsx("span",{className:"bv-checkbox-mark","aria-hidden":"true"}),s.jsxs("span",{children:[s.jsx("strong",{children:e}),o&&s.jsx("small",{children:o})]})]})}function $s({label:e,value:t,onValue:r,trueLabel:o="True",falseLabel:n="False",help:i}){return s.jsx(gr,{label:e,help:i,children:s.jsxs("button",{type:"button",role:"switch","aria-checked":t,className:"bv-toggle",onClick:()=>r(!t),children:[s.jsx("span",{className:"bv-toggle-track",children:s.jsx("span",{})}),s.jsx("strong",{children:t?o:n})]})})}function zv({label:e,value:t,options:r,onValue:o,minSelected:n=0,help:i}){const[a,l]=m.useState(!1),c=m.useRef(null),u=d=>{const f=t.includes(d);f&&t.length<=n||o(f?t.filter(p=>p!==d):[...t,d])};return s.jsx(gr,{label:e,help:i,children:s.jsxs("div",{ref:c,className:"bv-tag-select",children:[s.jsxs("button",{type:"button",className:"bv-tag-select-trigger","aria-haspopup":"listbox","aria-expanded":a,onClick:()=>l(d=>!d),children:[s.jsx("span",{className:"bv-tag-values",children:t.map(d=>s.jsx("span",{className:"bv-tag",children:r.find(f=>f.value===d)?.label??d},d))}),s.jsx("span",{className:"bv-chevron","aria-hidden":"true"})]}),s.jsx(Io,{open:a,anchor:c,onClose:()=>l(!1),className:"bv-select-menu bv-tag-select-menu",matchWidth:!0,children:s.jsx("div",{role:"listbox","aria-label":e,"aria-multiselectable":"true",children:r.map(d=>{const f=t.includes(d.value),p=f&&t.length<=n;return s.jsxs("button",{type:"button",role:"option","aria-selected":f,disabled:d.disabled||p,onClick:()=>u(d.value),children:[s.jsx("span",{className:"bv-tag-select-check","aria-hidden":"true",children:f?"✓":""}),s.jsx("span",{children:d.label})]},d.value)})})})]})})}function x0({label:e,value:t,onValue:r,onClear:o}){const[n,i]=m.useState(!1);return s.jsx(gr,{label:e,children:s.jsxs("span",{className:"bv-input-shell",children:[s.jsx("input",{type:n?"text":"password",value:t,autoComplete:"off",onChange:a=>r(a.target.value)}),s.jsx(ne,{type:"button",intent:"ghost",className:"bv-field-action",onClick:()=>i(!n),children:n?"Hide":"Show"}),s.jsx(ne,{type:"button",intent:"ghost",className:"bv-field-action",onClick:()=>{r(""),o?.()},children:"Clear"})]})})}function y0({label:e,value:t,onValue:r,alpha:o=!1,help:n}){const[i,a]=m.useState(!1),l=m.useRef(null),c=/^#[0-9a-f]{6}([0-9a-f]{2})?$/i.test(t),u=o?n0:e0,d=s.jsx("input",{value:t,"aria-label":`${e} hexadecimal value`,spellCheck:!1,onChange:p=>r(p.target.value)}),f=s.jsxs("div",{className:"bv-color-expanded",children:[d,s.jsx(u,{color:c?t:o?"#8D70FFFF":"#8D70FF",onChange:r})]});return s.jsx(gr,{label:e,help:n,error:c?void 0:"Enter a valid hexadecimal color.",children:s.jsx(Vs,{label:e,summary:t,icon:s.jsx("span",{className:"bv-color-dot",style:{background:c?t:"#000"}}),popover:f,children:s.jsxs("div",{ref:l,className:"bv-color-field",children:[s.jsx("button",{type:"button",className:"bv-color-swatch",style:{background:c?t:"#000"},onClick:()=>a(!i),"aria-label":`${e}: ${t}`,"aria-haspopup":"dialog","aria-expanded":i}),d,s.jsx(Io,{open:i,anchor:l,onClose:()=>a(!1),className:"bv-color-popover",children:f})]})})})}function os({items:e,value:t,onValue:r,exclusive:o=!1}){const n=i=>r(t.includes(i)?t.filter(a=>a!==i):o?[i]:[...t,i]);return s.jsx("div",{className:"bv-accordion",children:e.map(i=>s.jsxs("section",{className:i.disabled?"disabled":"",children:[s.jsxs("button",{type:"button","aria-expanded":t.includes(i.id),disabled:i.disabled,onClick:()=>n(i.id),children:[s.jsx("span",{children:i.title}),s.jsx("span",{className:"bv-chevron"})]}),t.includes(i.id)&&s.jsx("div",{children:i.content})]},i.id))})}function Ys({collectors:e,collectorId:t,resourceId:r,resolved:o=!0,onCollector:n,onResource:i}){const a=e.find(d=>d.id===t),l=a?.resources.find(d=>d.id===r),c=!!(t||r),u=c&&(!o||!a||!l);return s.jsxs("div",{className:`bv-resource-picker ${u?"is-unresolved":""}`,children:[s.jsx("div",{className:"bv-resource-picker-summary",children:u?"Unresolved resource selection":a&&l?`${a.label} / ${l.label}`:"No resource selected"}),s.jsxs(Ko,{minimum:130,children:[s.jsx(tt,{label:"Collector",value:t,options:[{value:"",label:"Select collector"},...e.map(d=>({value:d.id,label:d.label}))],onValue:n}),s.jsx(tt,{label:"Resource",value:r,disabled:!a,options:[{value:"",label:"Select resource"},...(a?.resources??[]).map(d=>({value:d.id,label:d.label}))],onValue:i})]})]})}const vh=["#E45756","#4C78A8","#54A24B","#F2CF5B","#B279A2","#FF9DA6"],Fv=e=>vh[e%vh.length],Ot=()=>crypto.randomUUID(),mh=()=>({schema:"bv.regional",version:2,document_id:Ot(),title:"Regional Prompt",canvas:{width:1024,height:1024},prompts:{global:{positive_source:"",negative_source:""},background:{positive_source:"",negative_source:""}},negative_mode:"auto",overlap:{mode:"joint"},regions:[]}),_0=e=>({id:Ot(),name:`Region ${e+1}`,parent_region_id:null,enabled:!0,usage:"generation",strength:1,priority:e,prompts:{positive_source:"",negative_source:""},mask:{feather:.01},geometry:[],authoring:{visible:!0,locked:!1,color:Fv(e)}}),Kt=e=>structuredClone(e);function w0(e,t){return{...e,document_id:t}}const sr=(e,t=0)=>e.authoring??{name:`${e.type==="rect"?"Rectangle":e.type==="ellipse"?"Ellipse":e.type==="polygon"?"Polygon":e.type==="raster_mask"?"Raster":"Brush"} ${t+1}`,visible:!0,locked:!1},Pt=e=>e.layer_id??e.id,Ma=e=>e.mask_group_id??Pt(e);function Uv(e,t){const r=new Map;for(const o of e){const n=t(o),i=r.get(n);i?i.push(o):r.set(n,[o])}return[...r].map(([o,n],i)=>({id:o,geometries:n,authoring:sr(n[0],i),enabled:n.some(a=>a.enabled!==!1)}))}function Mr(e){return Uv(e.geometry,Pt)}function k0(e){return Uv(e,Ma)}function dn(e){const t=typeof e=="string"?JSON.parse(e):Kt(e);if(t?.schema!=="bv.regional"||![1,2].includes(t?.version)||!Array.isArray(t?.regions))throw new Error("Not a valid BV_REGIONAL document");if(t.version===1){for(const r of t.regions)r.usage="generation";t.version=2}for(const r of t.regions){if(!["generation","detailer","both"].includes(r.usage))throw new Error(`Invalid region usage: ${r.usage}`);const o=r.geometry.find(n=>!n.layer_id)?.id;r.geometry.forEach((n,i)=>{n.enabled??(n.enabled=!0),n.layer_id??(n.layer_id=o??n.id),n.authoring??(n.authoring=sr(n,i)),n.type==="brush_stroke"&&(n.shape??(n.shape="round"),n.pressure_mode??(n.pressure_mode="constant"))})}return t}function Vv(e){const t=new Map;for(const r of e){const o=Ma(r);t.has(o)||t.set(o,r)}return[...t.values()].every(r=>r.operation==="add")}function Gu(e,t){return Vv(e.filter(r=>r.id!==t))}function xh({value:e,onCommit:t}){const[r,o]=m.useState(!1),[n,i]=m.useState(e);if(!r)return s.jsx("span",{className:"layer-name",title:e,onDoubleClick:l=>{l.stopPropagation(),i(e),o(!0)},children:e});const a=()=>{const l=n.trim();l&&t(l),o(!1)};return s.jsx($w,{className:"inline-name",autoFocus:!0,value:n,onChange:l=>i(l.target.value),onBlur:a,onClick:l=>l.stopPropagation(),onKeyDown:l=>{l.stopPropagation(),l.key==="Enter"&&a(),l.key==="Escape"&&o(!1)}})}function Xt({name:e}){const t={"chevron-right":s.jsx("path",{d:"m9 6 6 6-6 6"}),"chevron-down":s.jsx("path",{d:"m6 9 6 6 6-6"}),eye:s.jsxs(s.Fragment,{children:[s.jsx("path",{d:"M2.5 12s3.5-6 9.5-6 9.5 6 9.5 6-3.5 6-9.5 6-9.5-6-9.5-6Z"}),s.jsx("circle",{cx:"12",cy:"12",r:"2.5"})]}),"eye-off":s.jsxs(s.Fragment,{children:[s.jsx("path",{d:"M3 3l18 18"}),s.jsx("path",{d:"M10.6 6.15A9.8 9.8 0 0 1 12 6c6 0 9.5 6 9.5 6a14.3 14.3 0 0 1-2.05 2.7M6.05 6.05C3.75 7.65 2.5 12 2.5 12s3.5 6 9.5 6a9.4 9.4 0 0 0 3.1-.52"}),s.jsx("path",{d:"M9.9 9.9a3 3 0 0 0 4.2 4.2"})]}),lock:s.jsxs(s.Fragment,{children:[s.jsx("rect",{x:"5",y:"10",width:"14",height:"10",rx:"2"}),s.jsx("path",{d:"M8 10V7a4 4 0 0 1 8 0v3"})]}),unlock:s.jsxs(s.Fragment,{children:[s.jsx("rect",{x:"5",y:"10",width:"14",height:"10",rx:"2"}),s.jsx("path",{d:"M8 10V7a4 4 0 0 1 7.4-2.1"})]}),check:s.jsx("path",{d:"m6 12 4 4 8-9"}),more:s.jsxs(s.Fragment,{children:[s.jsx("circle",{cx:"5",cy:"12",r:"1"}),s.jsx("circle",{cx:"12",cy:"12",r:"1"}),s.jsx("circle",{cx:"19",cy:"12",r:"1"})]}),plus:s.jsx("path",{d:"M12 5v14M5 12h14"}),split:s.jsxs(s.Fragment,{children:[s.jsx("path",{d:"M7 5v5a2 2 0 0 0 2 2h6a2 2 0 0 1 2 2v5"}),s.jsx("path",{d:"m4 8 3 3 3-3M14 16l3 3 3-3"})]}),trash:s.jsxs(s.Fragment,{children:[s.jsx("path",{d:"M4 7h16M9 7V4h6v3M7 7l1 13h8l1-13"}),s.jsx("path",{d:"M10 11v5M14 11v5"})]})};return s.jsx("svg",{className:"tree-control-icon",viewBox:"0 0 24 24","aria-hidden":"true",children:t[e]})}function E0(e){const[t,r]=m.useState(()=>new Set),[o,n]=m.useState(()=>new Set(e.selectedRegionId?[e.selectedRegionId]:[])),[i,a]=m.useState(null),[l,c]=m.useState(null),u=b=>r(h=>{const v=new Set(h);return v.has(b)?v.delete(b):v.add(b),v}),d=b=>n(h=>{const v=new Set(h);return v.has(b)?v.delete(b):v.add(b),v});m.useEffect(()=>{e.selectedRegionId&&n(b=>b.has(e.selectedRegionId)?b:new Set([...b,e.selectedRegionId]))},[e.selectedRegionId]);const f=b=>b.kind==="region"?`region:${b.regionId}`:b.kind==="layer"?`layer:${b.regionId}:${b.layerId}`:`geometry:${b.regionId}:${b.layerId}:${b.geometryId}`,p=(b,h)=>{a(b),h.dataTransfer.effectAllowed="move",h.dataTransfer.setData("text/plain",f(b))},g=(b,h)=>{if(!i||i.kind!==b.kind||b.kind==="layer"&&i.kind==="geometry")return"inside";const v=h.currentTarget.getBoundingClientRect();return h.clientY({onDragOver:h=>{i&&(h.preventDefault(),h.dataTransfer.dropEffect="move",c(`${f(b)}:${g(b,h)}`))},onDragLeave:h=>{h.currentTarget.contains(h.relatedTarget)||c(null)},onDrop:h=>{h.preventDefault(),i&&e.onTreeMove({source:i,target:b,position:g(b,h)}),a(null),c(null)}}),w=b=>{const h=l?.split(":")??[];return l?.startsWith(`${f(b)}:`)?` drop-target drop-${h[h.length-1]}`:""},k=e.regions.find(b=>b.id===e.selectedRegionId)??null;return s.jsxs("aside",{className:"layers",children:[s.jsxs("div",{className:"panel-toolbar",children:[s.jsxs(it,{className:"panel-tool primary",title:"Add region","aria-label":"Add region",onClick:e.onAddRegion,children:[s.jsx(Xt,{name:"plus"}),s.jsx("span",{children:"Region"})]}),s.jsx(it,{className:"panel-tool",title:"Split disconnected areas in the selected layer","aria-label":"Split disconnected areas",disabled:!e.canSplitDisconnectedAreas,onClick:e.onSplitDisconnectedAreas,children:s.jsx(Xt,{name:"split"})}),s.jsx("span",{className:"panel-toolbar-spacer"}),s.jsx(it,{className:"panel-tool danger",title:"Delete selected region","aria-label":"Delete selected region",disabled:!k,onClick:()=>k&&e.onDeleteRegion(k.id),children:s.jsx(Xt,{name:"trash"})})]}),e.regions.map(b=>{const h=b.id===e.selectedRegionId,v=o.has(b.id),_={kind:"region",regionId:b.id};return s.jsxs("section",{className:`region-group ${h?"selected":""}`,"aria-expanded":v,children:[s.jsxs("div",{className:`region-row${w(_)}`,...x(_),onClick:()=>e.onSelectRegion(b.id),children:[s.jsx(it,{className:"tree-drag-handle",draggable:!0,"aria-label":`Move ${b.name}`,title:"Drag to reorder; Alt + arrow keys also move",onDragStart:y=>p(_,y),onDragEnd:()=>{a(null),c(null)},onKeyDown:y=>{y.altKey&&y.key==="ArrowUp"&&(y.preventDefault(),e.onMoveRegion(b.id,-1)),y.altKey&&y.key==="ArrowDown"&&(y.preventDefault(),e.onMoveRegion(b.id,1))},onClick:y=>y.stopPropagation(),children:"⠿"}),s.jsx(it,{className:"region-expand","aria-expanded":v,title:v?"Collapse region":"Expand region",onClick:y=>{y.stopPropagation(),d(b.id)},children:s.jsx(Xt,{name:v?"chevron-down":"chevron-right"})}),s.jsx("i",{style:{background:b.authoring.color}}),s.jsx(xh,{value:b.name,onCommit:y=>e.onRenameRegion(b.id,y)}),s.jsx("span",{className:"region-usage",title:"Region usage",children:b.usage==="generation"?"GEN":b.usage==="detailer"?"DET":"BOTH"}),s.jsxs("span",{className:"priority",title:"Priority",children:["P",b.priority]}),s.jsx(it,{className:`tree-icon-button${b.authoring.visible?"":" deviant"}`,title:b.authoring.visible?"Hide region in editor":"Show region in editor","aria-pressed":b.authoring.visible,onClick:y=>{y.stopPropagation(),e.onToggleRegion(b.id,"visible")},children:s.jsx(Xt,{name:b.authoring.visible?"eye":"eye-off"})}),s.jsx(it,{className:`tree-icon-button${b.authoring.locked?" deviant":""}`,title:b.authoring.locked?"Unlock region":"Lock region","aria-pressed":b.authoring.locked,onClick:y=>{y.stopPropagation(),e.onToggleRegion(b.id,"locked")},children:s.jsx(Xt,{name:b.authoring.locked?"lock":"unlock"})}),s.jsx(it,{className:`tree-check${b.enabled?"":" deviant"}`,role:"checkbox","aria-checked":b.enabled,title:b.enabled?"Disable region output":"Enable region output",onClick:y=>{y.stopPropagation(),e.onToggleRegion(b.id,"enabled")},children:b.enabled&&s.jsx(Xt,{name:"check"})})]}),v&&s.jsx("div",{className:"geometry-layers",children:[...Mr(b)].reverse().map(y=>{const T=e.selectedLayerIds.includes(y.id),S=y.id===e.selectedLayerId,z=new Set(y.geometries.map(E=>E.type)),N=new Set(y.geometries.map(Ma)).size,P=z.size>1||N>1?"◈":y.geometries[0].type==="rect"?"▭":y.geometries[0].type==="ellipse"?"◯":y.geometries[0].type==="polygon"?"⬠":y.geometries[0].type==="raster_mask"?"▦":"✎",B=t.has(y.id),O={kind:"layer",regionId:b.id,layerId:y.id};return s.jsxs("div",{className:"geometry-tree-item",children:[s.jsxs("div",{className:`geometry-row ${T&&!e.selectedGeometryId?"selected":""} ${S?"primary-selection":""}${w(O)}`,...x(O),onClick:E=>e.onSelectLayer(b.id,y.id,E.shiftKey?"range":E.ctrlKey||E.metaKey?"toggle":"replace"),children:[s.jsx(it,{className:"tree-drag-handle",draggable:!0,"aria-label":`Move ${y.authoring.name}`,title:"Drag layer; Alt + arrow keys also move",onDragStart:E=>p(O,E),onDragEnd:()=>{a(null),c(null)},onKeyDown:E=>{E.altKey&&E.key==="ArrowUp"&&(E.preventDefault(),e.onMoveLayer(y.id,1)),E.altKey&&E.key==="ArrowDown"&&(E.preventDefault(),e.onMoveLayer(y.id,-1))},onClick:E=>E.stopPropagation(),children:"⠿"}),s.jsx(it,{className:"layer-expand","aria-expanded":B,title:B?"Collapse operations":"Expand operations",onClick:E=>{E.stopPropagation(),u(y.id)},children:s.jsx(Xt,{name:B?"chevron-down":"chevron-right"})}),s.jsxs("span",{title:`${y.geometries.length} operations · ${N} mask group${N===1?"":"s"}`,children:[P,y.geometries.some(E=>E.operation==="subtract")?"−":""]}),s.jsx(xh,{value:y.authoring.name,onCommit:E=>e.onRenameLayer(y.id,E)}),s.jsx(it,{className:`tree-icon-button${y.authoring.visible?"":" deviant"}`,title:y.authoring.visible?"Hide in editor":"Show in editor","aria-pressed":y.authoring.visible,onClick:E=>{E.stopPropagation(),e.onToggleLayer(y.id,"visible")},children:s.jsx(Xt,{name:y.authoring.visible?"eye":"eye-off"})}),s.jsx(it,{className:`tree-icon-button${y.authoring.locked?" deviant":""}`,title:y.authoring.locked?"Unlock layer":"Lock layer","aria-pressed":y.authoring.locked,onClick:E=>{E.stopPropagation(),e.onToggleLayer(y.id,"locked")},children:s.jsx(Xt,{name:y.authoring.locked?"lock":"unlock"})}),s.jsx(it,{className:`tree-check${y.enabled?"":" deviant"}`,role:"checkbox","aria-checked":y.enabled,title:y.enabled?"Disable mask output":"Enable mask output",onClick:E=>{E.stopPropagation(),e.onToggleLayer(y.id,"enabled")},children:y.enabled&&s.jsx(Xt,{name:"check"})}),s.jsxs("details",{className:"layer-overflow",onClick:E=>E.stopPropagation(),children:[s.jsx("summary",{title:"Layer actions","aria-label":"Layer actions",children:s.jsx(Xt,{name:"more"})}),s.jsxs("div",{children:[s.jsx(it,{onClick:E=>{E.currentTarget.closest("details").removeAttribute("open"),e.onDuplicateLayer(y.id)},children:"Duplicate layer"}),s.jsx(it,{className:"danger",onClick:E=>{E.currentTarget.closest("details").removeAttribute("open"),e.onDeleteLayer(y.id)},children:"Delete layer"})]})]})]}),B&&s.jsx("div",{className:"geometry-operations",children:y.geometries.map((E,A)=>{const C={kind:"geometry",regionId:b.id,layerId:y.id,geometryId:E.id};return s.jsxs("div",{className:`geometry-operation ${e.selectedGeometryId===E.id?"selected":""}${w(C)}`,...x(C),children:[s.jsx(it,{className:"tree-drag-handle",draggable:!0,"aria-label":`Move ${sr(E,A).name}`,title:"Drag operation",onDragStart:R=>p(C,R),onDragEnd:()=>{a(null),c(null)},children:"⠿"}),s.jsxs(it,{className:"geometry-operation-select",onClick:()=>e.onSelectGeometry(b.id,y.id,E.id),children:[s.jsx("span",{className:`operation-kind ${E.operation}`,children:E.operation==="add"?"+":"−"}),s.jsx("span",{children:sr(E,A).name}),s.jsx("small",{children:E.type.replace("_"," ")})]}),s.jsx(it,{className:`tree-icon-button${E.enabled!==!1?"":" deviant"}`,title:E.enabled!==!1?"Disable operation":"Enable operation","aria-pressed":E.enabled!==!1,onClick:()=>e.onToggleGeometry(E.id),children:s.jsx(Xt,{name:E.enabled!==!1?"eye":"eye-off"})}),s.jsx(it,{className:"danger",disabled:!Gu(y.geometries,E.id),title:Gu(y.geometries,E.id)?"Delete operation":"Additive base: remove dependent subtract operations first",onClick:()=>e.onDeleteGeometry(E.id),children:"×"})]},E.id)})})]},y.id)})})]},b.id)})]})}const yh=({name:e})=>e==="select"?s.jsx("svg",{viewBox:"0 0 24 24",children:s.jsx("path",{d:"M5 3l13 9-6 1 4 7-3 1-4-7-4 4z"})}):e.startsWith("rect")?s.jsxs("svg",{viewBox:"0 0 24 24",children:[s.jsx("rect",{x:"4",y:"5",width:"16",height:"14",rx:"1"}),s.jsx("path",{d:e.endsWith("subtract")?"M16 17h6":"M16 17h6M19 14v6"})]}):e.startsWith("ellipse")?s.jsxs("svg",{viewBox:"0 0 24 24",children:[s.jsx("ellipse",{cx:"11",cy:"12",rx:"8",ry:"6"}),s.jsx("path",{d:e.endsWith("subtract")?"M16 18h6":"M16 18h6M19 15v6"})]}):e.startsWith("polygon")?s.jsxs("svg",{viewBox:"0 0 24 24",children:[s.jsx("path",{d:"M4 18L7 5l12 3 1 11z"}),s.jsx("path",{d:e.endsWith("subtract")?"M16 18h6":"M16 18h6M19 15v6"})]}):e==="brush-add"?s.jsxs("svg",{viewBox:"0 0 24 24",children:[s.jsx("path",{d:"M14 4l6 6-9 9H5v-6z"}),s.jsx("path",{d:"M16 17h6M19 14v6"})]}):e==="brush-subtract"?s.jsxs("svg",{viewBox:"0 0 24 24",children:[s.jsx("path",{d:"M14 4l6 6-9 9H5v-6z"}),s.jsx("path",{d:"M16 17h6"})]}):s.jsxs("svg",{viewBox:"0 0 24 24",children:[s.jsx("circle",{cx:"12",cy:"12",r:"3"}),s.jsx("path",{d:"M12 2v3M12 19v3M2 12h3M19 12h3M5 5l2 2M17 17l2 2M19 5l-2 2M7 17l-2 2"})]});function T0({tool:e,brush:t,canSubtract:r,canvas:o,onTool:n,onBrush:i}){const[a,l]=m.useState(!1),c=e.startsWith("brush"),u=[{id:"select",title:"Select and transform"},{id:"rect-add",title:"Add rectangle"},{id:"rect-subtract",title:"Subtract rectangle from selected layer"},{id:"ellipse-add",title:"Add ellipse"},{id:"ellipse-subtract",title:"Subtract ellipse from selected layer"},{id:"polygon-add",title:"Add polygon (click points, Enter or double-click to close)"},{id:"polygon-subtract",title:"Subtract polygon from selected layer"},{id:"brush-add",title:"Add brush stroke"},{id:"brush-subtract",title:"Subtract from selected layer"}];return s.jsxs("div",{className:"artboard-tools",onPointerDown:d=>d.stopPropagation(),onPointerUp:d=>d.stopPropagation(),onWheel:d=>d.stopPropagation(),children:[s.jsx(Hw,{orientation:"vertical",density:"compact",label:"Regional drawing tools",items:[...u.map(d=>({id:d.id,label:d.title,icon:s.jsx(yh,{name:d.id}),active:e===d.id,disabled:d.id.endsWith("subtract")&&!r,onSelect:()=>{n(d.id),d.id.startsWith("brush")||l(!1)},group:d.id.split("-")[0]})),...c?[{id:"brush-settings",label:"Brush settings",icon:s.jsx(yh,{name:"settings"}),active:a,onSelect:()=>l(d=>!d),group:"settings"}]:[]]}),c&&a&&s.jsxs("div",{className:"brush-flyout",children:[s.jsxs("header",{children:[s.jsx("strong",{children:"Brush"}),s.jsx(ne,{intent:"ghost",iconOnly:!0,"aria-label":"Close brush settings",onClick:()=>l(!1),children:"×"})]}),s.jsx(Bt,{label:"Brush size",value:t.size,min:.005,max:.25,step:.005,unit:`${Math.round(t.size*Math.min(o.width,o.height))} px`,onValue:d=>i({...t,size:d})}),s.jsx(Bt,{label:"Hardness",value:t.hardness,min:0,max:1,step:.05,unit:"×",onValue:d=>i({...t,hardness:d})}),s.jsx(Bt,{label:"Opacity",value:t.opacity,min:.05,max:1,step:.05,unit:"×",onValue:d=>i({...t,opacity:d})}),s.jsx(tt,{label:"Shape",value:t.shape,onValue:d=>i({...t,shape:d}),options:[{value:"round",label:"Round"},{value:"square",label:"Square"}]}),s.jsx(tt,{label:"Pressure",value:t.pressureMode,onValue:d=>i({...t,pressureMode:d}),options:[{value:"constant",label:"Constant"},{value:"stylus",label:"Stylus"}]})]})]})}const R0=({control:e,groups:t,conflicts:r,onChange:o})=>{const n=a=>a.charAt(0).toUpperCase()+a.slice(1),i=a=>{const l=t.find(c=>c.id===a);!l||e.assignments.some(c=>c.groupId===a)||o({...e,assignments:[...e.assignments,{groupId:a,groupPath:l.pathLabel,groupTitle:String(l.group.title||""),action:"bypass"}]})};return s.jsxs("section",{className:"bv-control-card",children:[s.jsxs("div",{className:"bv-control-title",children:[s.jsx(un,{label:"Control name",value:e.name,onValue:a=>o({...e,name:a})}),s.jsxs("span",{children:[e.assignments.length," groups"]}),s.jsx(ne,{intent:"danger",onClick:()=>o(null),children:"Delete"})]}),s.jsx("div",{className:"bv-assignments",children:e.assignments.map((a,l)=>{const c=r.find(f=>f.groupId===a.groupId),u=c?.entries.filter(f=>f.action===c.winnerAction).map(f=>f.controlName).join(", "),d=c?a.action===c.winnerAction?`Overrides ${[...new Set(c.entries.filter(f=>f.action!==c.winnerAction).map(f=>n(f.action)))].join(", ")}`:`Overridden by ${n(c.winnerAction)} from ${u}`:"";return s.jsxs("div",{className:a.unresolved?"unresolved":c?"conflict":"",children:[s.jsxs("span",{children:[a.unresolved?"⚠ ":"",a.groupPath,d&&s.jsxs("small",{children:["⚠ ",d]})]}),s.jsx(tt,{label:"Action",value:a.action,options:[{value:"activate",label:"Activate"},{value:"mute",label:"Mute"},{value:"bypass",label:"Bypass"}],onValue:f=>o({...e,assignments:e.assignments.map((p,g)=>g===l?{...p,action:f}:p)})}),s.jsx(ne,{intent:"ghost",iconOnly:!0,"aria-label":"Remove assignment",onClick:()=>o({...e,assignments:e.assignments.filter((f,p)=>p!==l)}),children:"×"})]},a.groupId)})}),s.jsx(tt,{label:"Add group",value:"",onValue:i,options:[{value:"",label:"Choose group…"},...t.map(a=>({value:a.id,label:a.pathLabel}))]})]})},S0=100;function Xs(e,t=r=>structuredClone(r)){const[r,o]=m.useState(()=>t(e)),[n,i]=m.useState([]),[a,l]=m.useState([]),c=m.useRef(r);c.current=r;const u=m.useCallback(x=>{o(w=>{const k=typeof x=="function"?x(t(w)):x;return i(b=>[...b.slice(-99),t(w)]),l([]),t(k)})},[t]),d=m.useCallback((x,w=!1)=>{o(t(x)),w&&(i([]),l([]))},[t]),f=m.useCallback(()=>{i(x=>{if(!x.length)return x;const w=x[x.length-1];return l(k=>[t(c.current),...k].slice(0,S0)),o(t(w)),x.slice(0,-1)})},[t]),p=m.useCallback(()=>{l(x=>{if(!x.length)return x;const w=x[0];return i(k=>[...k.slice(-99),t(c.current)]),o(t(w)),x.slice(1)})},[t]),g=m.useCallback(()=>{i([]),l([])},[]);return{value:r,commit:u,replace:d,undo:f,redo:p,clear:g,canUndo:n.length>0,canRedo:a.length>0}}const L0=e=>e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement||e instanceof HTMLElement&&e.isContentEditable;function Gs(e,t=!0){m.useEffect(()=>{if(!t)return;const r=a=>{if(L0(a.target)||!a.ctrlKey||a.altKey)return null;const l=a.key.toLowerCase();return l==="y"||l==="z"&&a.shiftKey?"redo":l==="z"?"undo":null},o=a=>{a.preventDefault(),a.stopImmediatePropagation()},n=a=>{const l=r(a);l&&(o(a),l==="undo"&&e.canUndo?e.undo():l==="redo"&&e.canRedo&&e.redo())},i=a=>{r(a)&&o(a)};return window.addEventListener("keydown",n,{capture:!0}),window.addEventListener("keyup",i,{capture:!0}),()=>{window.removeEventListener("keydown",n,{capture:!0}),window.removeEventListener("keyup",i,{capture:!0})}},[t,e.canRedo,e.canUndo,e.redo,e.undo])}function C0(){return globalThis.crypto?.randomUUID?.()??`bv-control-${Date.now()}-${Math.random().toString(16).slice(2)}`}const N0=()=>{const e=m.useMemo(()=>{const d=cn(),f=new Set(rs(ct()).map(p=>p.id));return{...d,controls:d.controls.map(p=>({...p,assignments:p.assignments.map(g=>({...g,unresolved:!f.has(g.groupId)}))}))}},[]),t=Xs(e),r=t.value,o=d=>t.commit(d);Gs(t),m.useEffect(()=>{const d=f=>{const p=f.detail,g=new Map(p.controls.map(w=>[w.id,w.enabled])),x={...r,controls:r.controls.map(w=>g.has(w.id)?{...w,enabled:g.get(w.id)}:w)};JSON.stringify(x)!==JSON.stringify(r)&&t.replace(x)};return window.addEventListener(ei,d),()=>window.removeEventListener(ei,d)},[r,t.replace]);const n=m.useMemo(()=>rs(ct()),[r]),i=m.useMemo(()=>Tv(r),[r]),a=m.useRef(!1);m.useEffect(()=>{if(!a.current){a.current=!0;return}const d=window.setTimeout(()=>{const f=r.controls.map(g=>g.name.trim());if(f.some(g=>!g)||new Set(f).size!==f.length)return;const p=new Set(n.map(g=>g.id));df({...r,controls:r.controls.map(g=>({...g,name:g.name.trim(),assignments:g.assignments.map(x=>({...x,unresolved:!p.has(x.groupId)}))}))})},250);return()=>window.clearTimeout(d)},[r,n]);const l=(d,f)=>{o({...r,controls:f?r.controls.map((p,g)=>g===d?f:p):r.controls.filter((p,g)=>g!==d)})},c=()=>{let d="New Control",f=2;for(;r.controls.some(p=>p.name===d);)d=`New Control ${f++}`;o({...r,controls:[...r.controls,{id:C0(),name:d,enabled:!0,assignments:[]}]})},u=r.controls.map((d,f)=>({id:d.id,title:d.name||"Unnamed control",description:`${d.assignments.length} assignment${d.assignments.length===1?"":"s"}`,content:s.jsx(R0,{control:d,groups:n,conflicts:i,onChange:p=>l(f,p)})}));return s.jsxs("div",{className:"bv-ui-stack",children:[s.jsx(Qr,{label:"Force active after releasing restrictions",checked:r.forceActive,onValue:d=>o({...r,forceActive:d})}),s.jsx("div",{className:"bv-controls",children:s.jsx(Ws,{items:u,onReorder:d=>o({...r,controls:d.map(f=>r.controls.find(p=>p.id===f.id)).filter(Boolean)}),onRemove:d=>o({...r,controls:r.controls.filter(f=>f.id!==d)})})}),s.jsxs("footer",{className:"bv-ui-inline-footer",children:[s.jsx(Sv,{tone:"success",dot:!0,children:"Autosaved"}),s.jsx(ne,{intent:"ghost",disabled:!t.canUndo,onClick:t.undo,children:"Undo"}),s.jsx(ne,{intent:"ghost",disabled:!t.canRedo,onClick:t.redo,children:"Redo"}),s.jsx(ne,{onClick:c,children:"Add Control"})]})]})},qo=new Map,ns=new Map;function xf(e,t={}){const r=t.key?qo.get(t.key):void 0;if(r)return r.activate(e),r.close;const o=document.createElement("div");o.className="bv-ui",o.dataset.bvUiMount="true",document.body.append(o);const n=ci(o);let i=!1,a=0,l=e;const c=()=>{i||(i=!0,t.key&&qo.get(t.key)?.close===c&&qo.delete(t.key),n.unmount(),o.remove())},u=g=>{g&&(l=g),a+=1,document.body.append(o),o.querySelector(".bv-managed-window")?.dispatchEvent(new Event("bv-ui-activate")),n.render(l(c,a))},d=()=>o.querySelector(".bv-managed-window")?.dispatchEvent(new Event("bv-ui-minimize")),f=()=>{const g=o.querySelector(".bv-managed-window"),x=g?.getBoundingClientRect();return{mode:g?.classList.contains("workspace")?"workspace":"floating",geometry:x?{x:x.left,y:x.top,width:x.width,height:x.height}:void 0}},p=g=>o.querySelector(".bv-managed-window")?.dispatchEvent(new CustomEvent("bv-ui-set-window-state",{detail:g}));if(t.key){const g={activate:u,minimize:d,state:f,setState:p,close:c};qo.set(t.key,g);const x=ns.get(t.key);x&&(ns.delete(t.key),requestAnimationFrame(()=>g.setState(x)))}return n.render(l(c,a)),c}function yf(e,t,r,o){if(e===t)return qo.get(e)?.activate();const n=qo.get(e),i=n?.state(),a=qo.get(t);i&&ns.set(t,i),a?a.activate():r(),i&&a&&(ns.delete(t),requestAnimationFrame(()=>a.setState(i))),o?n?.close():n?.minimize()}const Wv="BV.NodePack.UI.Size",Hv="BV.NodePack.UI.ReducedEffects",_f="BV.NodePack.UI.WindowSwitchMode";let Oi="keep",$v;const Ku=new Set,O0=e=>e==="replace"?"replace":"keep",ri=()=>Oi,M0=e=>{$v=e},A0=e=>(Ku.add(e),()=>Ku.delete(e));function wf(e,t=!0){return Oi=O0(e),t&&$v?.(Oi),Ku.forEach(r=>r(Oi)),Oi}const D0=["bv-ui-size-compact","bv-ui-size-default","bv-ui-size-large"];function I0(e){return e==="compact"||e==="large"?e:"default"}function Yv(e,t=document.documentElement){const r=I0(e);return t.classList.remove(...D0),t.classList.add(`bv-ui-size-${r}`),r}function Xv(e,t=document.documentElement){return t.classList.toggle("bv-ui-reduced-effects",!!e),!!e}function j0(e){Yv(e?.getSettingValue?.(Wv,"default")),Xv(e?.getSettingValue?.(Hv,!1)),wf(e?.getSettingValue?.(_f,"keep"),!1)}function B0(e,t,r,o){const n=e.x+e.width,i=e.y+e.height;let a=e.x,l=e.y,c=e.width,u=e.height;return r.includes("e")&&(c=Math.max(o.width,e.width+t.x)),r.includes("s")&&(u=Math.max(o.height,e.height+t.y)),r.includes("w")&&(c=Math.max(o.width,e.width-t.x),a=n-c),r.includes("n")&&(u=Math.max(o.height,e.height-t.y),l=i-u),{x:a,y:l,width:c,height:u}}function P0(e,t,r){const o={...e};for(const n of["x","y","width","height"])r?.[n]!==void 0&&r[n]!==t?.[n]&&(o[n]=r[n]);return o}function z0(e,t,r,o=12,n=128){const i=e??{left:0,right:r.width,bottom:r.height,height:r.height},l=t.filter(c=>c.width>0&&c.height>=i.height*.45&&c.rightc.left-u.left||u.right-c.right).reduce((c,u)=>u.left<=c+4?Math.max(c,u.right):c,i.left);return{left:Math.round(Math.max(i.left+n,l)+o),bottom:Math.round(Math.max(o,r.height-i.bottom+o))}}const Qo=[];let _h=!1;const F0=e=>e.isConnected&&!e.hidden&&e.offsetParent!==null;function U0(e){const t=Qo.filter(F0);if(t.length<2)return;const r=document.activeElement instanceof Element?t.findIndex(n=>n===document.activeElement||n.contains(document.activeElement)):-1,o=r<0?t.length-1:(r+(e?-1:1)+t.length)%t.length;t[o].dispatchEvent(new CustomEvent("bv-ui-activate"))}function V0(){_h||(_h=!0,window.addEventListener("keydown",e=>{e.key!=="Tab"||!e.ctrlKey||e.altKey||e.metaKey||(e.preventDefault(),e.stopImmediatePropagation(),U0(e.shiftKey))},!0))}function W0(e){return V0(),Qo.push(e),()=>{const t=Qo.indexOf(e);t>=0&&Qo.splice(t,1)}}function wh(e){const t=Qo.indexOf(e);t>=0&&Qo.splice(t,1),Qo.push(e)}const Gv="bvWindowMenuVisible",oi="bv-window-menu-visibility-changed",H0=e=>!["BV Smart Pipe","BV Smart Pipe Merge"].includes(e);function mn(e){const t=e?.properties?.[Gv];return typeof t=="boolean"?t:H0(String(e?.type??e?.comfyClass??""))}function di(e,t){e&&(e.properties??(e.properties={}),e.properties[Gv]=!!t,e.graph?.setDirtyCanvas?.(!0,!0),window.dispatchEvent(new CustomEvent(oi,{detail:{node:e,visible:!!t}})))}function $0(e){return window.addEventListener(oi,e),()=>window.removeEventListener(oi,e)}let qu=0;window.addEventListener(oi,()=>qu++);function Aa(e){return m.useSyncExternalStore($0,()=>qu,()=>qu),mn(e)}const Y0=(e,t)=>String(e?.id??e?._id??e?.extra?.uuid??t);function kf(e,t){const r=[],o=(n,i,a,l=new Set)=>{if(!n||l.has(n))return;const c=new Set(l);c.add(n);const u=Y0(n,i.length?i[i.length-1]:"root");for(const d of n._nodes??n.nodes??[]){const f=String(d.id),p=[...i,u];t(d)&&r.push({node:d,graph:n,path:p,key:`${p.join("/")}:${f}`,breadcrumb:a.join(" › ")});const g=d.subgraph??(()=>{try{return d.getSubgraph?.()}catch{return null}})();g&&o(g,[...p,f],[...a,String(d.title||d.type||`#${f}`)],c)}};return o(e,[],[]),r}function ha(e,t){return kf(e,r=>r===t)[0]?.key??String(t?.id??"")}const is="bv-toggle-toolbar-window-launcher";function X0({getColumns:e}){const[t,r]=m.useState({left:0,top:0}),[o,n]=m.useState(!1),[i,a]=m.useState(!1),[,l]=m.useState(0),c=m.useRef(null),u=m.useRef(),d=m.useRef(),f=m.useRef(0),p=()=>{u.current&&window.clearTimeout(u.current),d.current&&window.clearTimeout(d.current)},g=(v,_)=>{const y=v.getBoundingClientRect(),T=Math.min(Math.max(1,_)*220,window.innerWidth-24),S=Math.min(420,window.innerHeight-84),z=Math.max(12,Math.min(y.left,window.innerWidth-T-12)),N=y.bottom+6+S<=window.innerHeight-12?y.bottom+6:Math.max(12,y.top-S-6);return{left:z,top:N}},x=m.useCallback((v,_)=>{p(),u.current=window.setTimeout(()=>{if(document.body.classList.contains("bv-toolbar-no-editor")&&document.body.classList.contains("bv-toolbar-no-quick"))return;const y=[...document.querySelectorAll(".bv-regional-action")].filter(S=>S.offsetParent!==null),T=_?.offsetParent?_:y[0];T&&(a(!1),r(g(T,e(!1).filter(S=>S.items.length).length)),n(!0))},v)},[e]),w=m.useCallback(()=>x(180),[x]),k=m.useCallback(()=>{u.current&&window.clearTimeout(u.current);const v=Math.max(280,f.current-Date.now());d.current=window.setTimeout(()=>{c.current?.matches(":hover")||(n(!1),a(!1))},v)},[]);m.useEffect(()=>{const v=new Map,_=()=>{for(const T of document.querySelectorAll(".bv-regional-action")){if(v.has(T))continue;const S=()=>w(),z=()=>k();T.addEventListener("pointerenter",S),T.addEventListener("pointerleave",z);const N=()=>{T.removeEventListener("pointerenter",S),T.removeEventListener("pointerleave",z)};v.set(T,N)}};_();const y=new MutationObserver(_);return y.observe(document.body,{childList:!0,subtree:!0}),()=>{y.disconnect(),v.forEach(T=>T()),p()}},[k,w]),m.useEffect(()=>{if(!o)return;const v=_=>{_.key==="Escape"&&(n(!1),a(!1))};return window.addEventListener("keydown",v),()=>window.removeEventListener("keydown",v)},[o]),m.useEffect(()=>{const v=_=>o?(n(!1),a(!1)):x(0,_.detail?.anchor);return window.addEventListener(is,v),()=>window.removeEventListener(is,v)},[o,x]),m.useEffect(()=>{const v=()=>l(_=>_+1);return window.addEventListener(oi,v),()=>window.removeEventListener(oi,v)},[]);const b=v=>{p(),f.current=Date.now()+700;const _=c.current?.getBoundingClientRect();a(v),requestAnimationFrame(()=>requestAnimationFrame(()=>{const y=c.current?.getBoundingClientRect();!_||!y||r(T=>({...T,top:Math.max(12,Math.min(window.innerHeight-y.height-12,T.top+_.bottom-y.bottom))}))}))};if(!o)return null;const h=e(i).filter(v=>v.items.length);return Ur.createPortal(s.jsxs("div",{ref:c,className:"bv-toolbar-window-launcher bv-ui bv-density-compact",style:{left:t.left,top:t.top,"--bv-launcher-columns":Math.max(1,h.length)},role:"dialog","aria-label":"BV window launcher",onPointerEnter:p,onPointerLeave:k,children:[s.jsx("div",{className:"bv-toolbar-window-launcher__body",children:h.length?h.map(v=>s.jsxs("section",{children:[s.jsx("h3",{children:v.label}),s.jsx("div",{children:v.items.map(_=>s.jsxs("div",{className:`bv-toolbar-launcher-row ${_.hidden?"is-hidden":""}`,children:[s.jsxs(ne,{intent:"ghost",disabled:_.disabled,onClick:()=>{n(!1),a(!1),_.onSelect()},children:[s.jsx("span",{children:_.label}),_.meta&&s.jsx("small",{children:_.meta})]}),_.secondary&&s.jsx("button",{type:"button",className:"bv-toolbar-launcher-secondary",title:_.secondary.label,"aria-label":_.secondary.label,onClick:()=>{n(!1),a(!1),_.secondary?.onSelect()},children:"✎"}),_.hidden&&_.onReveal&&s.jsx("button",{type:"button",className:"bv-toolbar-launcher-reveal",title:"Show in BV window menus","aria-label":`Show ${_.label} in BV window menus`,onClick:_.onReveal,children:"◉"})]},_.id))})]},v.id)):s.jsxs("div",{className:"bv-toolbar-launcher-empty",children:[s.jsx("strong",{children:"No visible BV windows"}),s.jsx("span",{children:"Show hidden nodes to restore one."})]})}),s.jsx("footer",{children:s.jsx($s,{label:"Show hidden nodes",value:i,trueLabel:"Shown",falseLabel:"Hidden",onValue:b})})]}),document.body)}var fi=class{constructor(){I(this,"attributes");I(this,"nameToAttribute");this.attributes=[],this.nameToAttribute=new Map}addWithAll(e,t,r,o){const n=new te(e,t,r,o);return this.attributes.push(n),this.nameToAttribute.set(e,n),n}addInherited(e,t){return this.addWithAll(e,t,void 0,!1)}add(e,t,r){return this.addWithAll(e,void 0,t,r)}getAttributes(){return this.attributes}getModelName(e){const t=this.nameToAttribute.get(e);if(t!==void 0)return t.modelName}toJson(e,t){for(const r of this.attributes){const o=t[r.name];(r.alwaysWriteJson||o!==r.defaultValue)&&(e[r.name]=o)}}fromJson(e,t){for(const r of this.attributes){let o=e[r.name];o===void 0&&r.alias&&(o=e[r.alias]),o===void 0?t[r.name]=r.defaultValue:t[r.name]=o}}update(e,t){for(const r of this.attributes)if(Object.prototype.hasOwnProperty.call(e,r.name)){const o=e[r.name];o===void 0?delete t[r.name]:t[r.name]=o}}setDefaults(e){for(const t of this.attributes)e[t.name]=t.defaultValue}pairAttributes(e,t){for(const r of t.attributes)if(r.modelName&&this.nameToAttribute.has(r.modelName)){const o=this.nameToAttribute.get(r.modelName);o.setpairedAttr(r),r.setpairedAttr(o),o.setPairedType(e)}}toTypescriptInterface(e,t){const r=[],o=this.attributes.sort((n,i)=>n.name.localeCompare(i.name));r.push("export interface I"+e+"Attributes {");for(let n=0;n"u")return null;if(document.currentScript&&document.currentScript.tagName==="SCRIPT")return document.currentScript;try{throw new Error}catch(y){var h=(/at [^(\r\n]*\((.*):[^:]+:[^:]+\)$/i.exec(y.stack)||[])[1];if(h){var v=document.getElementsByTagName("script");for(var _ in v)if(v[_].src==h)return v[_]}return null}},isActive:function(h,v,_){for(var y="no-"+v;h;){var T=h.classList;if(T.contains(v))return!0;if(T.contains(y))return!1;h=h.parentElement}return!!_}},languages:{plain:a,plaintext:a,text:a,txt:a,extend:function(h,v){var _=l.util.clone(l.languages[h]);for(var y in v)_[y]=v[y];return _},insertBefore:function(h,v,_,y){y=y||l.languages;var T=y[h],S={};for(var z in T)if(T.hasOwnProperty(z)){if(z==v)for(var N in _)_.hasOwnProperty(N)&&(S[N]=_[N]);_.hasOwnProperty(z)||(S[z]=T[z])}var B=y[h];return y[h]=S,l.languages.DFS(l.languages,function(P,O){O===B&&P!=h&&(this[P]=S)}),S},DFS:function h(v,_,y,T){T=T||{};var S=l.util.objId;for(var z in v)if(v.hasOwnProperty(z)){_.call(v,z,v[z],y||z);var N=v[z],B=l.util.type(N);B==="Object"&&!T[S(N)]?(T[S(N)]=!0,h(N,_,null,T)):B==="Array"&&!T[S(N)]&&(T[S(N)]=!0,h(N,_,z,T))}}},plugins:{},highlightAll:function(h,v){l.highlightAllUnder(document,h,v)},highlightAllUnder:function(h,v,_){var y={callback:_,container:h,selector:'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'};l.hooks.run("before-highlightall",y),y.elements=Array.prototype.slice.apply(y.container.querySelectorAll(y.selector)),l.hooks.run("before-all-elements-highlight",y);for(var T=0,S;S=y.elements[T++];)l.highlightElement(S,v===!0,y.callback)},highlightElement:function(h,v,_){var y=l.util.getLanguage(h),T=l.languages[y];l.util.setLanguage(h,y);var S=h.parentElement;S&&S.nodeName.toLowerCase()==="pre"&&l.util.setLanguage(S,y);var z=h.textContent,N={element:h,language:y,grammar:T,code:z};function B(O){N.highlightedCode=O,l.hooks.run("before-insert",N),N.element.innerHTML=N.highlightedCode,l.hooks.run("after-highlight",N),l.hooks.run("complete",N),_&&_.call(N.element)}if(l.hooks.run("before-sanity-check",N),S=N.element.parentElement,S&&S.nodeName.toLowerCase()==="pre"&&!S.hasAttribute("tabindex")&&S.setAttribute("tabindex","0"),!N.code){l.hooks.run("complete",N),_&&_.call(N.element);return}if(l.hooks.run("before-highlight",N),!N.grammar){B(l.util.encode(N.code));return}if(v&&o.Worker){var P=new Worker(l.filename);P.onmessage=function(O){B(O.data)},P.postMessage(JSON.stringify({language:N.language,code:N.code,immediateClose:!0}))}else B(l.highlight(N.code,N.grammar,N.language))},highlight:function(h,v,_){var y={code:h,grammar:v,language:_};if(l.hooks.run("before-tokenize",y),!y.grammar)throw new Error('The language "'+y.language+'" has no grammar.');return y.tokens=l.tokenize(y.code,y.grammar),l.hooks.run("after-tokenize",y),c.stringify(l.util.encode(y.tokens),y.language)},tokenize:function(h,v){var _=v.rest;if(_){for(var y in _)v[y]=_[y];delete v.rest}var T=new f;return p(T,T.head,h),d(h,T,v,T.head,0),x(T)},hooks:{all:{},add:function(h,v){var _=l.hooks.all;_[h]=_[h]||[],_[h].push(v)},run:function(h,v){var _=l.hooks.all[h];if(!(!_||!_.length))for(var y=0,T;T=_[y++];)T(v)}},Token:c};o.Prism=l;function c(h,v,_,y){this.type=h,this.content=v,this.alias=_,this.length=(y||"").length|0}c.stringify=function h(v,_){if(typeof v=="string")return v;if(Array.isArray(v)){var y="";return v.forEach(function(B){y+=h(B,_)}),y}var T={type:v.type,content:h(v.content,_),tag:"span",classes:["token",v.type],attributes:{},language:_},S=v.alias;S&&(Array.isArray(S)?Array.prototype.push.apply(T.classes,S):T.classes.push(S)),l.hooks.run("wrap",T);var z="";for(var N in T.attributes)z+=" "+N+'="'+(T.attributes[N]||"").replace(/"/g,""")+'"';return"<"+T.tag+' class="'+T.classes.join(" ")+'"'+z+">"+T.content+""};function u(h,v,_,y){h.lastIndex=v;var T=h.exec(_);if(T&&y&&T[1]){var S=T[1].length;T.index+=S,T[0]=T[0].slice(S)}return T}function d(h,v,_,y,T,S){for(var z in _)if(!(!_.hasOwnProperty(z)||!_[z])){var N=_[z];N=Array.isArray(N)?N:[N];for(var B=0;B=S.reach);W+=D.value.length,D=D.next){var F=D.value;if(v.length>h.length)return;if(!(F instanceof c)){var ne=1,X;if(A){if(X=u(M,W,h,E),!X||X.index>=h.length)break;var Q=X.index,q=X.index+X[0].length,Z=W;for(Z+=D.value.length;Q>=Z;)D=D.next,Z+=D.value.length;if(Z-=D.value.length,W=Z,D.value instanceof c)continue;for(var Y=D;Y!==v.tail&&(ZS.reach&&(S.reach=Ee);var ve=D.prev;le&&(ve=p(v,ve,le),W+=le.length),g(v,ve,ne);var It=new c(z,O?l.tokenize(oe,O):oe,C,oe);if(D=p(v,ve,It),Ce&&p(v,D,Ce),ne>1){var G={cause:z+","+B,reach:Ee};d(h,v,_,D.prev,W,G),S&&G.reach>S.reach&&(S.reach=G.reach)}}}}}}function f(){var h={value:null,prev:null,next:null},v={value:null,prev:h,next:null};h.next=v,this.head=h,this.tail=v,this.length=0}function p(h,v,_){var y=v.next,T={value:_,prev:v,next:y};return v.next=T,y.prev=T,h.length++,T}function g(h,v,_){for(var y=v.next,T=0;T<_&&y!==h.tail;T++)y=y.next;v.next=y,y.prev=v,h.length-=T}function x(h){for(var v=[],_=h.head.next;_!==h.tail;)v.push(_.value),_=_.next;return v}if(!o.document)return o.addEventListener&&(l.disableWorkerMessageHandler||o.addEventListener("message",function(h){var v=JSON.parse(h.data),_=v.language,y=v.code,T=v.immediateClose;o.postMessage(l.highlight(y,l.languages[_],_)),T&&o.close()},!1)),l;var w=l.util.currentScript();w&&(l.filename=w.src,w.hasAttribute("data-manual")&&(l.manual=!0));function k(){l.manual||l.highlightAll()}if(!l.manual){var b=document.readyState;b==="loading"||b==="interactive"&&w&&w.defer?document.addEventListener("DOMContentLoaded",k):window.requestAnimationFrame?window.requestAnimationFrame(k):window.setTimeout(k,16)}return l}(t);e.exports&&(e.exports=r),typeof fr<"u"&&(fr.Prism=r),r.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},r.languages.markup.tag.inside["attr-value"].inside.entity=r.languages.markup.entity,r.languages.markup.doctype.inside["internal-subset"].inside=r.languages.markup,r.hooks.add("wrap",function(o){o.type==="entity"&&(o.attributes.title=o.content.replace(/&/,"&"))}),Object.defineProperty(r.languages.markup.tag,"addInlined",{value:function(n,i){var a={};a["language-"+i]={pattern:/(^$)/i,lookbehind:!0,inside:r.languages[i]},a.cdata=/^$/i;var l={"included-cdata":{pattern://i,inside:a}};l["language-"+i]={pattern:/[\s\S]+/,inside:r.languages[i]};var c={};c[n]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,function(){return n}),"i"),lookbehind:!0,greedy:!0,inside:l},r.languages.insertBefore("markup","cdata",c)}}),Object.defineProperty(r.languages.markup.tag,"addAttribute",{value:function(o,n){r.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+o+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[n,"language-"+n],inside:r.languages[n]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),r.languages.html=r.languages.markup,r.languages.mathml=r.languages.markup,r.languages.svg=r.languages.markup,r.languages.xml=r.languages.extend("markup",{}),r.languages.ssml=r.languages.xml,r.languages.atom=r.languages.xml,r.languages.rss=r.languages.xml,function(o){var n=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;o.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:"+/[^;{\s"']|\s+(?!\s)/.source+"|"+n.source+")*?"+/(?:;|(?=\s*\{))/.source),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+n.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+n.source+"$"),alias:"url"}}},selector:{pattern:RegExp(`(^|[{}\\s])[^{}\\s](?:[^{};"'\\s]|\\s+(?![\\s{])|`+n.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:n,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},o.languages.css.atrule.inside.rest=o.languages.css;var i=o.languages.markup;i&&(i.tag.addInlined("style","css"),i.tag.addAttribute("style","css"))}(r),r.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},r.languages.javascript=r.languages.extend("clike",{"class-name":[r.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+(/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source)+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),r.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,r.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source+/\//.source+"(?:"+/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source+"|"+/(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source+")"+/(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:r.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:r.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:r.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:r.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:r.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),r.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:r.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),r.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),r.languages.markup&&(r.languages.markup.tag.addInlined("script","javascript"),r.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),r.languages.js=r.languages.javascript,function(){if(typeof r>"u"||typeof document>"u")return;Element.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector);var o="Loading…",n=function(w,k){return"✖ Error "+w+" while fetching file: "+k},i="✖ Error: File does not exist or is empty",a={js:"javascript",py:"python",rb:"ruby",ps1:"powershell",psm1:"powershell",sh:"bash",bat:"batch",h:"c",tex:"latex"},l="data-src-status",c="loading",u="loaded",d="failed",f="pre[data-src]:not(["+l+'="'+u+'"]):not(['+l+'="'+c+'"])';function p(w,k,b){var h=new XMLHttpRequest;h.open("GET",w,!0),h.onreadystatechange=function(){h.readyState==4&&(h.status<400&&h.responseText?k(h.responseText):h.status>=400?b(n(h.status,h.statusText)):b(i))},h.send(null)}function g(w){var k=/^\s*(\d+)\s*(?:(,)\s*(?:(\d+)\s*)?)?$/.exec(w||"");if(k){var b=Number(k[1]),h=k[2],v=k[3];return h?v?[b,Number(v)]:[b,void 0]:[b,b]}}r.hooks.add("before-highlightall",function(w){w.selector+=", "+f}),r.hooks.add("before-sanity-check",function(w){var k=w.element;if(k.matches(f)){w.code="",k.setAttribute(l,c);var b=k.appendChild(document.createElement("CODE"));b.textContent=o;var h=k.getAttribute("data-src"),v=w.language;if(v==="none"){var _=(/\.(\w+)$/.exec(h)||[,"none"])[1];v=a[_]||_}r.util.setLanguage(b,v),r.util.setLanguage(k,v);var y=r.plugins.autoloader;y&&y.loadLanguages(v),p(h,function(T){k.setAttribute(l,u);var S=g(k.getAttribute("data-range"));if(S){var z=T.split(/\r\n?|\n/g),N=S[0],B=S[1]==null?z.length:S[1];N<0&&(N+=z.length),N=Math.max(0,Math.min(N-1,z.length)),B<0&&(B+=z.length),B=Math.max(0,Math.min(B,z.length)),T=z.slice(N,B).join(` +`),k.hasAttribute("data-start")||k.setAttribute("data-start",String(N+1))}b.textContent=T,r.highlightElement(b)},function(T){k.setAttribute(l,d),b.textContent=T})}}),r.plugins.fileHighlight={highlight:function(k){for(var b=(k||document).querySelectorAll(f),h=0,v;v=b[h++];)r.highlightElement(v)}};var x=!1;r.fileHighlight=function(){x||(console.warn("Prism.fileHighlight is deprecated. Use `Prism.plugins.fileHighlight.highlight` instead."),x=!0),r.plugins.fileHighlight.highlight.apply(this,arguments)}}()})(_0);Prism.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}};Prism.languages.webmanifest=Prism.languages.json;function Ko({children:e,minimum:t=165,className:r=""}){return s.jsx("div",{className:`bv-field-grid ${r}`.trim(),style:{"--bv-field-grid-min":`${t}px`},children:e})}function Tr({label:e,help:t,error:r,required:o,icon:n,className:i="",children:a}){return s.jsxs("label",{className:`bv-control-field ${r?"is-error":""} ${i}`.trim(),children:[s.jsxs("span",{className:"bv-control-label",children:[n&&s.jsx("span",{className:"bv-field-icon",children:n}),s.jsx("span",{children:e}),o&&s.jsx("span",{"aria-hidden":"true",children:" *"})]}),a,r?s.jsx("small",{className:"bv-control-message is-error",children:r}):t&&s.jsx("small",{className:"bv-control-help bv-control-help-overlay",children:t})]})}function un({label:e,help:t,error:r,icon:o,suffix:n,onValue:i,className:a="",...l}){const c=(u=!1)=>s.jsxs("span",{className:"bv-input-shell",children:[o&&s.jsx("span",{className:"bv-field-icon","aria-hidden":"true",children:o}),s.jsx("input",{...l,id:u&&l.id?`${l.id}-expanded`:l.id,"aria-label":u?e:l["aria-label"],"aria-invalid":!!r,onChange:d=>i?.(d.target.value)}),n&&s.jsx("span",{className:"bv-field-suffix",children:n})]});return s.jsx(Tr,{label:e,help:t,error:r,className:a,children:s.jsx(Vs,{label:e,summary:String(l.value??l.defaultValue??l.placeholder??"Edit value"),icon:o,popover:c(!0),children:c()})})}function w0({label:e,help:t,error:r,icon:o,resize:n="vertical",onValue:i,className:a="",...l}){const c=(d=!1)=>s.jsxs("span",{className:`bv-textarea-shell resize-${n}`,children:[o&&s.jsx("span",{className:"bv-field-icon","aria-hidden":"true",children:o}),s.jsx("textarea",{...l,id:d&&l.id?`${l.id}-expanded`:l.id,"aria-label":d?e:l["aria-label"],"aria-invalid":!!r,onChange:f=>i?.(f.target.value)})]}),u=String(l.value??l.defaultValue??l.placeholder??"Edit text");return s.jsx(Tr,{label:e,help:t,error:r,className:`bv-textarea-field ${a}`,children:s.jsx(Vs,{label:e,summary:u,icon:o,popover:c(!0),children:c()})})}const k0=m.forwardRef(function(t,r){return s.jsx("textarea",{...t,ref:r})});function Pt({label:e,value:t,min:r,max:o,step:n,unit:i,icon:a,help:l,slider:c=!0,onValue:u,className:d=""}){const f=m.useId(),[p,g]=m.useState(String(t));m.useEffect(()=>g(String(t)),[t]);const x=T=>Math.max(r,Math.min(o,T)),w=()=>{const T=Number(p);Number.isFinite(T)?u(x(T)):g(String(t))},k=`${Math.max(0,Math.min(100,(t-r)/Math.max(Number.EPSILON,o-r)*100))}%`,b=T=>s.jsxs("div",{className:"bv-number-box",children:[a&&s.jsx("span",{className:"bv-field-icon","aria-hidden":"true",children:a}),s.jsx("input",{id:T,value:p,inputMode:Number.isInteger(n)?"numeric":"decimal",onChange:S=>g(S.target.value),onBlur:w,onKeyDown:S=>{S.key==="Enter"&&S.currentTarget.blur(),S.key==="Escape"&&g(String(t))}}),i&&s.jsx("span",{className:"bv-number-unit",children:i})]}),h=s.jsxs("div",{className:"bv-number-slider",style:{"--bubble-left":k},children:[s.jsxs("output",{children:[t,i??""]}),s.jsx("input",{className:"bv-number-track",type:"range",min:r,max:o,step:n,value:t,style:{"--range-fill":k},"aria-labelledby":`${f}-label`,onChange:T=>u(x(+T.target.value))})]}),v=s.jsxs("div",{className:"bv-number-ticks",children:[s.jsx("span",{children:r}),s.jsx("span",{children:o})]}),_=s.jsxs(s.Fragment,{children:[s.jsxs("div",{className:"bv-number-value-row",children:[c&&h,b(f)]}),c&&v]}),y=s.jsxs("div",{className:"bv-number-popup",children:[c&&h,b(`${f}-expanded`),c&&v]});return s.jsxs("div",{className:`bv-number-field ${c?"has-slider":"direct-only"} ${d}`.trim(),children:[s.jsx("label",{id:`${f}-label`,htmlFor:f,children:e}),s.jsx(Vs,{label:e,summary:`${t}${i??""}`,icon:a,popover:y,children:_}),l&&s.jsx("small",{className:"bv-control-help bv-control-help-overlay",children:l})]})}function Iv({label:e,value:t,options:r,onValue:o,disabled:n,className:i=""}){const[a,l]=m.useState(!1),c=m.useRef(null),u=r.find(d=>d.value===t);return s.jsxs("div",{ref:c,className:`bv-select-popover ${i}`.trim(),children:[s.jsxs("button",{type:"button",className:"bv-select-trigger",disabled:n,"aria-label":e,"aria-haspopup":"listbox","aria-expanded":a,onClick:()=>l(d=>!d),children:[s.jsx("span",{children:u?.label??"Select…"}),s.jsx("span",{className:"bv-chevron","aria-hidden":"true"})]}),s.jsx(Io,{open:a,anchor:c,onClose:()=>l(!1),className:"bv-select-menu",matchWidth:!0,children:s.jsx("div",{role:"listbox","aria-label":e,children:r.map(d=>s.jsxs("button",{type:"button",role:"option","aria-selected":d.value===t,disabled:d.disabled,onClick:f=>{o(d.value,{shiftKey:f.shiftKey}),l(!1)},children:[d.icon,s.jsx("span",{children:d.label})]},d.value))})})]})}function tt({label:e,value:t,options:r,onValue:o,help:n,disabled:i}){return s.jsx(Tr,{label:e,help:n,children:s.jsx(Iv,{label:e,value:t,options:r,onValue:o,disabled:i})})}function E0({label:e,value:t,options:r,onValue:o,disabled:n,className:i=""}){return s.jsx(Iv,{label:e,value:t,options:r,onValue:o,disabled:n,className:`bv-density-compact ${i}`})}function Qr({label:e,checked:t,onValue:r,help:o,disabled:n}){return s.jsxs("label",{className:"bv-checkbox-field",children:[s.jsx("input",{type:"checkbox",checked:t,disabled:n,onChange:i=>r(i.target.checked)}),s.jsx("span",{className:"bv-checkbox-mark","aria-hidden":"true"}),s.jsxs("span",{children:[s.jsx("strong",{children:e}),o&&s.jsx("small",{children:o})]})]})}function $s({label:e,value:t,onValue:r,trueLabel:o="True",falseLabel:n="False",help:i}){return s.jsx(Tr,{label:e,help:i,children:s.jsxs("button",{type:"button",role:"switch","aria-checked":t,className:"bv-toggle",onClick:()=>r(!t),children:[s.jsx("span",{className:"bv-toggle-track",children:s.jsx("span",{})}),s.jsx("strong",{children:t?o:n})]})})}function T0({label:e,value:t,options:r,onValue:o,minSelected:n=0,help:i}){const[a,l]=m.useState(!1),c=m.useRef(null),u=d=>{const f=t.includes(d);f&&t.length<=n||o(f?t.filter(p=>p!==d):[...t,d])};return s.jsx(Tr,{label:e,help:i,children:s.jsxs("div",{ref:c,className:"bv-tag-select",children:[s.jsxs("button",{type:"button",className:"bv-tag-select-trigger","aria-haspopup":"listbox","aria-expanded":a,onClick:()=>l(d=>!d),children:[s.jsx("span",{className:"bv-tag-values",children:t.map(d=>s.jsx("span",{className:"bv-tag",children:r.find(f=>f.value===d)?.label??d},d))}),s.jsx("span",{className:"bv-chevron","aria-hidden":"true"})]}),s.jsx(Io,{open:a,anchor:c,onClose:()=>l(!1),className:"bv-select-menu bv-tag-select-menu",matchWidth:!0,children:s.jsx("div",{role:"listbox","aria-label":e,"aria-multiselectable":"true",children:r.map(d=>{const f=t.includes(d.value),p=f&&t.length<=n;return s.jsxs("button",{type:"button",role:"option","aria-selected":f,disabled:d.disabled||p,onClick:()=>u(d.value),children:[s.jsx("span",{className:"bv-tag-select-check","aria-hidden":"true",children:f?"✓":""}),s.jsx("span",{children:d.label})]},d.value)})})})]})})}function R0({label:e,value:t,onValue:r,onClear:o}){const[n,i]=m.useState(!1);return s.jsx(Tr,{label:e,children:s.jsxs("span",{className:"bv-input-shell",children:[s.jsx("input",{type:n?"text":"password",value:t,autoComplete:"off",onChange:a=>r(a.target.value)}),s.jsx(ie,{type:"button",intent:"ghost",className:"bv-field-action",onClick:()=>i(!n),children:n?"Hide":"Show"}),s.jsx(ie,{type:"button",intent:"ghost",className:"bv-field-action",onClick:()=>{r(""),o?.()},children:"Clear"})]})})}function S0({label:e,value:t,onValue:r,alpha:o=!1,help:n}){const[i,a]=m.useState(!1),l=m.useRef(null),c=/^#[0-9a-f]{6}([0-9a-f]{2})?$/i.test(t),u=o?u0:a0,d=s.jsx("input",{value:t,"aria-label":`${e} hexadecimal value`,spellCheck:!1,onChange:p=>r(p.target.value)}),f=s.jsxs("div",{className:"bv-color-expanded",children:[d,s.jsx(u,{color:c?t:o?"#8D70FFFF":"#8D70FF",onChange:r})]});return s.jsx(Tr,{label:e,help:n,error:c?void 0:"Enter a valid hexadecimal color.",children:s.jsx(Vs,{label:e,summary:t,icon:s.jsx("span",{className:"bv-color-dot",style:{background:c?t:"#000"}}),popover:f,children:s.jsxs("div",{ref:l,className:"bv-color-field",children:[s.jsx("button",{type:"button",className:"bv-color-swatch",style:{background:c?t:"#000"},onClick:()=>a(!i),"aria-label":`${e}: ${t}`,"aria-haspopup":"dialog","aria-expanded":i}),d,s.jsx(Io,{open:i,anchor:l,onClose:()=>a(!1),className:"bv-color-popover",children:f})]})})})}function ns({items:e,value:t,onValue:r,exclusive:o=!1}){const n=i=>r(t.includes(i)?t.filter(a=>a!==i):o?[i]:[...t,i]);return s.jsx("div",{className:"bv-accordion",children:e.map(i=>s.jsxs("section",{className:i.disabled?"disabled":"",children:[s.jsxs("button",{type:"button","aria-expanded":t.includes(i.id),disabled:i.disabled,onClick:()=>n(i.id),children:[s.jsx("span",{children:i.title}),s.jsx("span",{className:"bv-chevron"})]}),t.includes(i.id)&&s.jsx("div",{children:i.content})]},i.id))})}function mf({collectors:e,collectorId:t,resourceId:r,resolved:o=!0,onCollector:n,onResource:i}){const a=e.find(d=>d.id===t),l=a?.resources.find(d=>d.id===r),c=!!(t||r),u=c&&(!o||!a||!l);return s.jsx("div",{className:`bv-resource-picker ${u?"is-unresolved":""}`,children:s.jsxs(Ko,{minimum:130,children:[s.jsx(tt,{label:"Collector",value:t,options:[{value:"",label:"Select collector"},...e.map(d=>({value:d.id,label:d.label}))],onValue:n}),s.jsx(tt,{label:"Resource",value:r,disabled:!a,options:[{value:"",label:"Select resource"},...(a?.resources??[]).map(d=>({value:d.id,label:d.label}))],onValue:i})]})})}const hh=["#E45756","#4C78A8","#54A24B","#F2CF5B","#B279A2","#FF9DA6"],jv=e=>hh[e%hh.length],Ot=()=>crypto.randomUUID(),gh=()=>({schema:"bv.regional",version:2,document_id:Ot(),title:"Regional Prompt",canvas:{width:1024,height:1024},prompts:{global:{positive_source:"",negative_source:""},background:{positive_source:"",negative_source:""}},negative_mode:"auto",overlap:{mode:"joint"},regions:[]}),L0=e=>({id:Ot(),name:`Region ${e+1}`,parent_region_id:null,enabled:!0,usage:"generation",strength:1,priority:e,prompts:{positive_source:"",negative_source:""},mask:{feather:.01},geometry:[],authoring:{visible:!0,locked:!1,color:jv(e)}}),Kt=e=>structuredClone(e);function C0(e,t){return{...e,document_id:t}}const sr=(e,t=0)=>e.authoring??{name:`${e.type==="rect"?"Rectangle":e.type==="ellipse"?"Ellipse":e.type==="polygon"?"Polygon":e.type==="raster_mask"?"Raster":"Brush"} ${t+1}`,visible:!0,locked:!1},Bt=e=>e.layer_id??e.id,Ma=e=>e.mask_group_id??Bt(e);function Pv(e,t){const r=new Map;for(const o of e){const n=t(o),i=r.get(n);i?i.push(o):r.set(n,[o])}return[...r].map(([o,n],i)=>({id:o,geometries:n,authoring:sr(n[0],i),enabled:n.some(a=>a.enabled!==!1)}))}function Mr(e){return Pv(e.geometry,Bt)}function N0(e){return Pv(e,Ma)}function dn(e){const t=typeof e=="string"?JSON.parse(e):Kt(e);if(t?.schema!=="bv.regional"||![1,2].includes(t?.version)||!Array.isArray(t?.regions))throw new Error("Not a valid BV_REGIONAL document");if(t.version===1){for(const r of t.regions)r.usage="generation";t.version=2}for(const r of t.regions){if(!["generation","detailer","both"].includes(r.usage))throw new Error(`Invalid region usage: ${r.usage}`);const o=r.geometry.find(n=>!n.layer_id)?.id;r.geometry.forEach((n,i)=>{n.enabled??(n.enabled=!0),n.layer_id??(n.layer_id=o??n.id),n.authoring??(n.authoring=sr(n,i)),n.type==="brush_stroke"&&(n.shape??(n.shape="round"),n.pressure_mode??(n.pressure_mode="constant"))})}return t}function Bv(e){const t=new Map;for(const r of e){const o=Ma(r);t.has(o)||t.set(o,r)}return[...t.values()].every(r=>r.operation==="add")}function Xu(e,t){return Bv(e.filter(r=>r.id!==t))}function bh({value:e,onCommit:t}){const[r,o]=m.useState(!1),[n,i]=m.useState(e);if(!r)return s.jsx("span",{className:"layer-name",title:e,onDoubleClick:l=>{l.stopPropagation(),i(e),o(!0)},children:e});const a=()=>{const l=n.trim();l&&t(l),o(!1)};return s.jsx(Jw,{className:"inline-name",autoFocus:!0,value:n,onChange:l=>i(l.target.value),onBlur:a,onClick:l=>l.stopPropagation(),onKeyDown:l=>{l.stopPropagation(),l.key==="Enter"&&a(),l.key==="Escape"&&o(!1)}})}function Xt({name:e}){const t={"chevron-right":s.jsx("path",{d:"m9 6 6 6-6 6"}),"chevron-down":s.jsx("path",{d:"m6 9 6 6 6-6"}),eye:s.jsxs(s.Fragment,{children:[s.jsx("path",{d:"M2.5 12s3.5-6 9.5-6 9.5 6 9.5 6-3.5 6-9.5 6-9.5-6-9.5-6Z"}),s.jsx("circle",{cx:"12",cy:"12",r:"2.5"})]}),"eye-off":s.jsxs(s.Fragment,{children:[s.jsx("path",{d:"M3 3l18 18"}),s.jsx("path",{d:"M10.6 6.15A9.8 9.8 0 0 1 12 6c6 0 9.5 6 9.5 6a14.3 14.3 0 0 1-2.05 2.7M6.05 6.05C3.75 7.65 2.5 12 2.5 12s3.5 6 9.5 6a9.4 9.4 0 0 0 3.1-.52"}),s.jsx("path",{d:"M9.9 9.9a3 3 0 0 0 4.2 4.2"})]}),lock:s.jsxs(s.Fragment,{children:[s.jsx("rect",{x:"5",y:"10",width:"14",height:"10",rx:"2"}),s.jsx("path",{d:"M8 10V7a4 4 0 0 1 8 0v3"})]}),unlock:s.jsxs(s.Fragment,{children:[s.jsx("rect",{x:"5",y:"10",width:"14",height:"10",rx:"2"}),s.jsx("path",{d:"M8 10V7a4 4 0 0 1 7.4-2.1"})]}),check:s.jsx("path",{d:"m6 12 4 4 8-9"}),more:s.jsxs(s.Fragment,{children:[s.jsx("circle",{cx:"5",cy:"12",r:"1"}),s.jsx("circle",{cx:"12",cy:"12",r:"1"}),s.jsx("circle",{cx:"19",cy:"12",r:"1"})]}),plus:s.jsx("path",{d:"M12 5v14M5 12h14"}),split:s.jsxs(s.Fragment,{children:[s.jsx("path",{d:"M7 5v5a2 2 0 0 0 2 2h6a2 2 0 0 1 2 2v5"}),s.jsx("path",{d:"m4 8 3 3 3-3M14 16l3 3 3-3"})]}),trash:s.jsxs(s.Fragment,{children:[s.jsx("path",{d:"M4 7h16M9 7V4h6v3M7 7l1 13h8l1-13"}),s.jsx("path",{d:"M10 11v5M14 11v5"})]})};return s.jsx("svg",{className:"tree-control-icon",viewBox:"0 0 24 24","aria-hidden":"true",children:t[e]})}function O0(e){const[t,r]=m.useState(()=>new Set),[o,n]=m.useState(()=>new Set(e.selectedRegionId?[e.selectedRegionId]:[])),[i,a]=m.useState(null),[l,c]=m.useState(null),u=b=>r(h=>{const v=new Set(h);return v.has(b)?v.delete(b):v.add(b),v}),d=b=>n(h=>{const v=new Set(h);return v.has(b)?v.delete(b):v.add(b),v});m.useEffect(()=>{e.selectedRegionId&&n(b=>b.has(e.selectedRegionId)?b:new Set([...b,e.selectedRegionId]))},[e.selectedRegionId]);const f=b=>b.kind==="region"?`region:${b.regionId}`:b.kind==="layer"?`layer:${b.regionId}:${b.layerId}`:`geometry:${b.regionId}:${b.layerId}:${b.geometryId}`,p=(b,h)=>{a(b),h.dataTransfer.effectAllowed="move",h.dataTransfer.setData("text/plain",f(b))},g=(b,h)=>{if(!i||i.kind!==b.kind||b.kind==="layer"&&i.kind==="geometry")return"inside";const v=h.currentTarget.getBoundingClientRect();return h.clientY({onDragOver:h=>{i&&(h.preventDefault(),h.dataTransfer.dropEffect="move",c(`${f(b)}:${g(b,h)}`))},onDragLeave:h=>{h.currentTarget.contains(h.relatedTarget)||c(null)},onDrop:h=>{h.preventDefault(),i&&e.onTreeMove({source:i,target:b,position:g(b,h)}),a(null),c(null)}}),w=b=>{const h=l?.split(":")??[];return l?.startsWith(`${f(b)}:`)?` drop-target drop-${h[h.length-1]}`:""},k=e.regions.find(b=>b.id===e.selectedRegionId)??null;return s.jsxs("aside",{className:"layers",children:[s.jsxs("div",{className:"panel-toolbar",children:[s.jsxs(it,{className:"panel-tool primary",title:"Add region","aria-label":"Add region",onClick:e.onAddRegion,children:[s.jsx(Xt,{name:"plus"}),s.jsx("span",{children:"Region"})]}),s.jsx(it,{className:"panel-tool",title:"Split disconnected areas in the selected layer","aria-label":"Split disconnected areas",disabled:!e.canSplitDisconnectedAreas,onClick:e.onSplitDisconnectedAreas,children:s.jsx(Xt,{name:"split"})}),s.jsx("span",{className:"panel-toolbar-spacer"}),s.jsx(it,{className:"panel-tool danger",title:"Delete selected region","aria-label":"Delete selected region",disabled:!k,onClick:()=>k&&e.onDeleteRegion(k.id),children:s.jsx(Xt,{name:"trash"})})]}),e.regions.map(b=>{const h=b.id===e.selectedRegionId,v=o.has(b.id),_={kind:"region",regionId:b.id};return s.jsxs("section",{className:`region-group ${h?"selected":""}`,"aria-expanded":v,children:[s.jsxs("div",{className:`region-row${w(_)}`,...x(_),onClick:()=>e.onSelectRegion(b.id),children:[s.jsx(it,{className:"tree-drag-handle",draggable:!0,"aria-label":`Move ${b.name}`,title:"Drag to reorder; Alt + arrow keys also move",onDragStart:y=>p(_,y),onDragEnd:()=>{a(null),c(null)},onKeyDown:y=>{y.altKey&&y.key==="ArrowUp"&&(y.preventDefault(),e.onMoveRegion(b.id,-1)),y.altKey&&y.key==="ArrowDown"&&(y.preventDefault(),e.onMoveRegion(b.id,1))},onClick:y=>y.stopPropagation(),children:"⠿"}),s.jsx(it,{className:"region-expand","aria-expanded":v,title:v?"Collapse region":"Expand region",onClick:y=>{y.stopPropagation(),d(b.id)},children:s.jsx(Xt,{name:v?"chevron-down":"chevron-right"})}),s.jsx("i",{style:{background:b.authoring.color}}),s.jsx(bh,{value:b.name,onCommit:y=>e.onRenameRegion(b.id,y)}),s.jsx("span",{className:"region-usage",title:"Region usage",children:b.usage==="generation"?"GEN":b.usage==="detailer"?"DET":"BOTH"}),s.jsxs("span",{className:"priority",title:"Priority",children:["P",b.priority]}),s.jsx(it,{className:`tree-icon-button${b.authoring.visible?"":" deviant"}`,title:b.authoring.visible?"Hide region in editor":"Show region in editor","aria-pressed":b.authoring.visible,onClick:y=>{y.stopPropagation(),e.onToggleRegion(b.id,"visible")},children:s.jsx(Xt,{name:b.authoring.visible?"eye":"eye-off"})}),s.jsx(it,{className:`tree-icon-button${b.authoring.locked?" deviant":""}`,title:b.authoring.locked?"Unlock region":"Lock region","aria-pressed":b.authoring.locked,onClick:y=>{y.stopPropagation(),e.onToggleRegion(b.id,"locked")},children:s.jsx(Xt,{name:b.authoring.locked?"lock":"unlock"})}),s.jsx(it,{className:`tree-check${b.enabled?"":" deviant"}`,role:"checkbox","aria-checked":b.enabled,title:b.enabled?"Disable region output":"Enable region output",onClick:y=>{y.stopPropagation(),e.onToggleRegion(b.id,"enabled")},children:b.enabled&&s.jsx(Xt,{name:"check"})})]}),v&&s.jsx("div",{className:"geometry-layers",children:[...Mr(b)].reverse().map(y=>{const T=e.selectedLayerIds.includes(y.id),S=y.id===e.selectedLayerId,z=new Set(y.geometries.map(E=>E.type)),N=new Set(y.geometries.map(Ma)).size,B=z.size>1||N>1?"◈":y.geometries[0].type==="rect"?"▭":y.geometries[0].type==="ellipse"?"◯":y.geometries[0].type==="polygon"?"⬠":y.geometries[0].type==="raster_mask"?"▦":"✎",P=t.has(y.id),O={kind:"layer",regionId:b.id,layerId:y.id};return s.jsxs("div",{className:"geometry-tree-item",children:[s.jsxs("div",{className:`geometry-row ${T&&!e.selectedGeometryId?"selected":""} ${S?"primary-selection":""}${w(O)}`,...x(O),onClick:E=>e.onSelectLayer(b.id,y.id,E.shiftKey?"range":E.ctrlKey||E.metaKey?"toggle":"replace"),children:[s.jsx(it,{className:"tree-drag-handle",draggable:!0,"aria-label":`Move ${y.authoring.name}`,title:"Drag layer; Alt + arrow keys also move",onDragStart:E=>p(O,E),onDragEnd:()=>{a(null),c(null)},onKeyDown:E=>{E.altKey&&E.key==="ArrowUp"&&(E.preventDefault(),e.onMoveLayer(y.id,1)),E.altKey&&E.key==="ArrowDown"&&(E.preventDefault(),e.onMoveLayer(y.id,-1))},onClick:E=>E.stopPropagation(),children:"⠿"}),s.jsx(it,{className:"layer-expand","aria-expanded":P,title:P?"Collapse operations":"Expand operations",onClick:E=>{E.stopPropagation(),u(y.id)},children:s.jsx(Xt,{name:P?"chevron-down":"chevron-right"})}),s.jsxs("span",{title:`${y.geometries.length} operations · ${N} mask group${N===1?"":"s"}`,children:[B,y.geometries.some(E=>E.operation==="subtract")?"−":""]}),s.jsx(bh,{value:y.authoring.name,onCommit:E=>e.onRenameLayer(y.id,E)}),s.jsx(it,{className:`tree-icon-button${y.authoring.visible?"":" deviant"}`,title:y.authoring.visible?"Hide in editor":"Show in editor","aria-pressed":y.authoring.visible,onClick:E=>{E.stopPropagation(),e.onToggleLayer(y.id,"visible")},children:s.jsx(Xt,{name:y.authoring.visible?"eye":"eye-off"})}),s.jsx(it,{className:`tree-icon-button${y.authoring.locked?" deviant":""}`,title:y.authoring.locked?"Unlock layer":"Lock layer","aria-pressed":y.authoring.locked,onClick:E=>{E.stopPropagation(),e.onToggleLayer(y.id,"locked")},children:s.jsx(Xt,{name:y.authoring.locked?"lock":"unlock"})}),s.jsx(it,{className:`tree-check${y.enabled?"":" deviant"}`,role:"checkbox","aria-checked":y.enabled,title:y.enabled?"Disable mask output":"Enable mask output",onClick:E=>{E.stopPropagation(),e.onToggleLayer(y.id,"enabled")},children:y.enabled&&s.jsx(Xt,{name:"check"})}),s.jsxs("details",{className:"layer-overflow",onClick:E=>E.stopPropagation(),children:[s.jsx("summary",{title:"Layer actions","aria-label":"Layer actions",children:s.jsx(Xt,{name:"more"})}),s.jsxs("div",{children:[s.jsx(it,{onClick:E=>{E.currentTarget.closest("details").removeAttribute("open"),e.onDuplicateLayer(y.id)},children:"Duplicate layer"}),s.jsx(it,{className:"danger",onClick:E=>{E.currentTarget.closest("details").removeAttribute("open"),e.onDeleteLayer(y.id)},children:"Delete layer"})]})]})]}),P&&s.jsx("div",{className:"geometry-operations",children:y.geometries.map((E,A)=>{const C={kind:"geometry",regionId:b.id,layerId:y.id,geometryId:E.id};return s.jsxs("div",{className:`geometry-operation ${e.selectedGeometryId===E.id?"selected":""}${w(C)}`,...x(C),children:[s.jsx(it,{className:"tree-drag-handle",draggable:!0,"aria-label":`Move ${sr(E,A).name}`,title:"Drag operation",onDragStart:R=>p(C,R),onDragEnd:()=>{a(null),c(null)},children:"⠿"}),s.jsxs(it,{className:"geometry-operation-select",onClick:()=>e.onSelectGeometry(b.id,y.id,E.id),children:[s.jsx("span",{className:`operation-kind ${E.operation}`,children:E.operation==="add"?"+":"−"}),s.jsx("span",{children:sr(E,A).name}),s.jsx("small",{children:E.type.replace("_"," ")})]}),s.jsx(it,{className:`tree-icon-button${E.enabled!==!1?"":" deviant"}`,title:E.enabled!==!1?"Disable operation":"Enable operation","aria-pressed":E.enabled!==!1,onClick:()=>e.onToggleGeometry(E.id),children:s.jsx(Xt,{name:E.enabled!==!1?"eye":"eye-off"})}),s.jsx(it,{className:"danger",disabled:!Xu(y.geometries,E.id),title:Xu(y.geometries,E.id)?"Delete operation":"Additive base: remove dependent subtract operations first",onClick:()=>e.onDeleteGeometry(E.id),children:"×"})]},E.id)})})]},y.id)})})]},b.id)})]})}const vh=({name:e})=>e==="select"?s.jsx("svg",{viewBox:"0 0 24 24",children:s.jsx("path",{d:"M5 3l13 9-6 1 4 7-3 1-4-7-4 4z"})}):e.startsWith("rect")?s.jsxs("svg",{viewBox:"0 0 24 24",children:[s.jsx("rect",{x:"4",y:"5",width:"16",height:"14",rx:"1"}),s.jsx("path",{d:e.endsWith("subtract")?"M16 17h6":"M16 17h6M19 14v6"})]}):e.startsWith("ellipse")?s.jsxs("svg",{viewBox:"0 0 24 24",children:[s.jsx("ellipse",{cx:"11",cy:"12",rx:"8",ry:"6"}),s.jsx("path",{d:e.endsWith("subtract")?"M16 18h6":"M16 18h6M19 15v6"})]}):e.startsWith("polygon")?s.jsxs("svg",{viewBox:"0 0 24 24",children:[s.jsx("path",{d:"M4 18L7 5l12 3 1 11z"}),s.jsx("path",{d:e.endsWith("subtract")?"M16 18h6":"M16 18h6M19 15v6"})]}):e==="brush-add"?s.jsxs("svg",{viewBox:"0 0 24 24",children:[s.jsx("path",{d:"M14 4l6 6-9 9H5v-6z"}),s.jsx("path",{d:"M16 17h6M19 14v6"})]}):e==="brush-subtract"?s.jsxs("svg",{viewBox:"0 0 24 24",children:[s.jsx("path",{d:"M14 4l6 6-9 9H5v-6z"}),s.jsx("path",{d:"M16 17h6"})]}):s.jsxs("svg",{viewBox:"0 0 24 24",children:[s.jsx("circle",{cx:"12",cy:"12",r:"3"}),s.jsx("path",{d:"M12 2v3M12 19v3M2 12h3M19 12h3M5 5l2 2M17 17l2 2M19 5l-2 2M7 17l-2 2"})]});function M0({tool:e,brush:t,canSubtract:r,canvas:o,onTool:n,onBrush:i}){const[a,l]=m.useState(!1),c=e.startsWith("brush"),u=[{id:"select",title:"Select and transform"},{id:"rect-add",title:"Add rectangle"},{id:"rect-subtract",title:"Subtract rectangle from selected layer"},{id:"ellipse-add",title:"Add ellipse"},{id:"ellipse-subtract",title:"Subtract ellipse from selected layer"},{id:"polygon-add",title:"Add polygon (click points, Enter or double-click to close)"},{id:"polygon-subtract",title:"Subtract polygon from selected layer"},{id:"brush-add",title:"Add brush stroke"},{id:"brush-subtract",title:"Subtract from selected layer"}];return s.jsxs("div",{className:"artboard-tools",onPointerDown:d=>d.stopPropagation(),onPointerUp:d=>d.stopPropagation(),onWheel:d=>d.stopPropagation(),children:[s.jsx(qw,{orientation:"vertical",density:"compact",label:"Regional drawing tools",items:[...u.map(d=>({id:d.id,label:d.title,icon:s.jsx(vh,{name:d.id}),active:e===d.id,disabled:d.id.endsWith("subtract")&&!r,onSelect:()=>{n(d.id),d.id.startsWith("brush")||l(!1)},group:d.id.split("-")[0]})),...c?[{id:"brush-settings",label:"Brush settings",icon:s.jsx(vh,{name:"settings"}),active:a,onSelect:()=>l(d=>!d),group:"settings"}]:[]]}),c&&a&&s.jsxs("div",{className:"brush-flyout",children:[s.jsxs("header",{children:[s.jsx("strong",{children:"Brush"}),s.jsx(ie,{intent:"ghost",iconOnly:!0,"aria-label":"Close brush settings",onClick:()=>l(!1),children:"×"})]}),s.jsx(Pt,{label:"Brush size",value:t.size,min:.005,max:.25,step:.005,unit:`${Math.round(t.size*Math.min(o.width,o.height))} px`,onValue:d=>i({...t,size:d})}),s.jsx(Pt,{label:"Hardness",value:t.hardness,min:0,max:1,step:.05,unit:"×",onValue:d=>i({...t,hardness:d})}),s.jsx(Pt,{label:"Opacity",value:t.opacity,min:.05,max:1,step:.05,unit:"×",onValue:d=>i({...t,opacity:d})}),s.jsx(tt,{label:"Shape",value:t.shape,onValue:d=>i({...t,shape:d}),options:[{value:"round",label:"Round"},{value:"square",label:"Square"}]}),s.jsx(tt,{label:"Pressure",value:t.pressureMode,onValue:d=>i({...t,pressureMode:d}),options:[{value:"constant",label:"Constant"},{value:"stylus",label:"Stylus"}]})]})]})}const A0=({control:e,groups:t,conflicts:r,onChange:o})=>{const n=a=>a.charAt(0).toUpperCase()+a.slice(1),i=a=>{const l=t.find(c=>c.id===a);!l||e.assignments.some(c=>c.groupId===a)||o({...e,assignments:[...e.assignments,{groupId:a,groupPath:l.pathLabel,groupTitle:String(l.group.title||""),action:"bypass"}]})};return s.jsxs("section",{className:"bv-control-card",children:[s.jsxs("div",{className:"bv-control-title",children:[s.jsx(un,{label:"Control name",value:e.name,onValue:a=>o({...e,name:a})}),s.jsxs("span",{children:[e.assignments.length," groups"]}),s.jsx(ie,{intent:"danger",onClick:()=>o(null),children:"Delete"})]}),s.jsx("div",{className:"bv-assignments",children:e.assignments.map((a,l)=>{const c=r.find(f=>f.groupId===a.groupId),u=c?.entries.filter(f=>f.action===c.winnerAction).map(f=>f.controlName).join(", "),d=c?a.action===c.winnerAction?`Overrides ${[...new Set(c.entries.filter(f=>f.action!==c.winnerAction).map(f=>n(f.action)))].join(", ")}`:`Overridden by ${n(c.winnerAction)} from ${u}`:"";return s.jsxs("div",{className:a.unresolved?"unresolved":c?"conflict":"",children:[s.jsxs("span",{children:[a.unresolved?"⚠ ":"",a.groupPath,d&&s.jsxs("small",{children:["⚠ ",d]})]}),s.jsx(tt,{label:"Action",value:a.action,options:[{value:"activate",label:"Activate"},{value:"mute",label:"Mute"},{value:"bypass",label:"Bypass"}],onValue:f=>o({...e,assignments:e.assignments.map((p,g)=>g===l?{...p,action:f}:p)})}),s.jsx(ie,{intent:"ghost",iconOnly:!0,"aria-label":"Remove assignment",onClick:()=>o({...e,assignments:e.assignments.filter((f,p)=>p!==l)}),children:"×"})]},a.groupId)})}),s.jsx(tt,{label:"Add group",value:"",onValue:i,options:[{value:"",label:"Choose group…"},...t.map(a=>({value:a.id,label:a.pathLabel}))]})]})},D0=100;function Ys(e,t=r=>structuredClone(r)){const[r,o]=m.useState(()=>t(e)),[n,i]=m.useState([]),[a,l]=m.useState([]),c=m.useRef(r);c.current=r;const u=m.useCallback(x=>{o(w=>{const k=typeof x=="function"?x(t(w)):x;return i(b=>[...b.slice(-99),t(w)]),l([]),t(k)})},[t]),d=m.useCallback((x,w=!1)=>{o(t(x)),w&&(i([]),l([]))},[t]),f=m.useCallback(()=>{i(x=>{if(!x.length)return x;const w=x[x.length-1];return l(k=>[t(c.current),...k].slice(0,D0)),o(t(w)),x.slice(0,-1)})},[t]),p=m.useCallback(()=>{l(x=>{if(!x.length)return x;const w=x[0];return i(k=>[...k.slice(-99),t(c.current)]),o(t(w)),x.slice(1)})},[t]),g=m.useCallback(()=>{i([]),l([])},[]);return{value:r,commit:u,replace:d,undo:f,redo:p,clear:g,canUndo:n.length>0,canRedo:a.length>0}}const I0=e=>e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement||e instanceof HTMLElement&&e.isContentEditable;function Xs(e,t=!0){m.useEffect(()=>{if(!t)return;const r=a=>{if(I0(a.target)||!a.ctrlKey||a.altKey)return null;const l=a.key.toLowerCase();return l==="y"||l==="z"&&a.shiftKey?"redo":l==="z"?"undo":null},o=a=>{a.preventDefault(),a.stopImmediatePropagation()},n=a=>{const l=r(a);l&&(o(a),l==="undo"&&e.canUndo?e.undo():l==="redo"&&e.canRedo&&e.redo())},i=a=>{r(a)&&o(a)};return window.addEventListener("keydown",n,{capture:!0}),window.addEventListener("keyup",i,{capture:!0}),()=>{window.removeEventListener("keydown",n,{capture:!0}),window.removeEventListener("keyup",i,{capture:!0})}},[t,e.canRedo,e.canUndo,e.redo,e.undo])}function j0(){return globalThis.crypto?.randomUUID?.()??`bv-control-${Date.now()}-${Math.random().toString(16).slice(2)}`}const P0=()=>{const e=m.useMemo(()=>{const d=cn(),f=new Set(os(ct()).map(p=>p.id));return{...d,controls:d.controls.map(p=>({...p,assignments:p.assignments.map(g=>({...g,unresolved:!f.has(g.groupId)}))}))}},[]),t=Ys(e),r=t.value,o=d=>t.commit(d);Xs(t),m.useEffect(()=>{const d=f=>{const p=f.detail,g=new Map(p.controls.map(w=>[w.id,w.enabled])),x={...r,controls:r.controls.map(w=>g.has(w.id)?{...w,enabled:g.get(w.id)}:w)};JSON.stringify(x)!==JSON.stringify(r)&&t.replace(x)};return window.addEventListener(ei,d),()=>window.removeEventListener(ei,d)},[r,t.replace]);const n=m.useMemo(()=>os(ct()),[r]),i=m.useMemo(()=>wv(r),[r]),a=m.useRef(!1);m.useEffect(()=>{if(!a.current){a.current=!0;return}const d=window.setTimeout(()=>{const f=r.controls.map(g=>g.name.trim());if(f.some(g=>!g)||new Set(f).size!==f.length)return;const p=new Set(n.map(g=>g.id));uf({...r,controls:r.controls.map(g=>({...g,name:g.name.trim(),assignments:g.assignments.map(x=>({...x,unresolved:!p.has(x.groupId)}))}))})},250);return()=>window.clearTimeout(d)},[r,n]);const l=(d,f)=>{o({...r,controls:f?r.controls.map((p,g)=>g===d?f:p):r.controls.filter((p,g)=>g!==d)})},c=()=>{let d="New Control",f=2;for(;r.controls.some(p=>p.name===d);)d=`New Control ${f++}`;o({...r,controls:[...r.controls,{id:j0(),name:d,enabled:!0,assignments:[]}]})},u=r.controls.map((d,f)=>({id:d.id,title:d.name||"Unnamed control",description:`${d.assignments.length} assignment${d.assignments.length===1?"":"s"}`,content:s.jsx(A0,{control:d,groups:n,conflicts:i,onChange:p=>l(f,p)})}));return s.jsxs("div",{className:"bv-ui-stack",children:[s.jsx(Qr,{label:"Force active after releasing restrictions",checked:r.forceActive,onValue:d=>o({...r,forceActive:d})}),s.jsx("div",{className:"bv-controls",children:s.jsx(Ws,{items:u,onReorder:d=>o({...r,controls:d.map(f=>r.controls.find(p=>p.id===f.id)).filter(Boolean)}),onRemove:d=>o({...r,controls:r.controls.filter(f=>f.id!==d)})})}),s.jsxs("footer",{className:"bv-ui-inline-footer",children:[s.jsx(Ev,{tone:"success",dot:!0,children:"Autosaved"}),s.jsx(ie,{intent:"ghost",disabled:!t.canUndo,onClick:t.undo,children:"Undo"}),s.jsx(ie,{intent:"ghost",disabled:!t.canRedo,onClick:t.redo,children:"Redo"}),s.jsx(ie,{onClick:c,children:"Add Control"})]})]})},qo=new Map,is=new Map;function xf(e,t={}){const r=t.key?qo.get(t.key):void 0;if(r)return r.activate(e),r.close;const o=document.createElement("div");o.className="bv-ui",o.dataset.bvUiMount="true",document.body.append(o);const n=ui(o);let i=!1,a=0,l=e;const c=()=>{i||(i=!0,t.key&&qo.get(t.key)?.close===c&&qo.delete(t.key),n.unmount(),o.remove())},u=g=>{g&&(l=g),a+=1,document.body.append(o),o.querySelector(".bv-managed-window")?.dispatchEvent(new Event("bv-ui-activate")),n.render(l(c,a))},d=()=>o.querySelector(".bv-managed-window")?.dispatchEvent(new Event("bv-ui-minimize")),f=()=>{const g=o.querySelector(".bv-managed-window"),x=g?.getBoundingClientRect();return{mode:g?.classList.contains("workspace")?"workspace":"floating",geometry:x?{x:x.left,y:x.top,width:x.width,height:x.height}:void 0}},p=g=>o.querySelector(".bv-managed-window")?.dispatchEvent(new CustomEvent("bv-ui-set-window-state",{detail:g}));if(t.key){const g={activate:u,minimize:d,state:f,setState:p,close:c};qo.set(t.key,g);const x=is.get(t.key);x&&(is.delete(t.key),requestAnimationFrame(()=>g.setState(x)))}return n.render(l(c,a)),c}function yf(e,t,r,o){if(e===t)return qo.get(e)?.activate();const n=qo.get(e),i=n?.state(),a=qo.get(t);i&&is.set(t,i),a?a.activate():r(),i&&a&&(is.delete(t),requestAnimationFrame(()=>a.setState(i))),o?n?.close():n?.minimize()}const zv="BV.NodePack.UI.Size",Fv="BV.NodePack.UI.ReducedEffects",_f="BV.NodePack.UI.WindowSwitchMode";let Mi="keep",Uv;const Gu=new Set,B0=e=>e==="replace"?"replace":"keep",ri=()=>Mi,z0=e=>{Uv=e},F0=e=>(Gu.add(e),()=>Gu.delete(e));function wf(e,t=!0){return Mi=B0(e),t&&Uv?.(Mi),Gu.forEach(r=>r(Mi)),Mi}const U0=["bv-ui-size-compact","bv-ui-size-default","bv-ui-size-large"];function V0(e){return e==="compact"||e==="large"?e:"default"}function Vv(e,t=document.documentElement){const r=V0(e);return t.classList.remove(...U0),t.classList.add(`bv-ui-size-${r}`),r}function Wv(e,t=document.documentElement){return t.classList.toggle("bv-ui-reduced-effects",!!e),!!e}function W0(e){Vv(e?.getSettingValue?.(zv,"default")),Wv(e?.getSettingValue?.(Fv,!1)),wf(e?.getSettingValue?.(_f,"keep"),!1)}function H0(e,t,r,o){const n=e.x+e.width,i=e.y+e.height;let a=e.x,l=e.y,c=e.width,u=e.height;return r.includes("e")&&(c=Math.max(o.width,e.width+t.x)),r.includes("s")&&(u=Math.max(o.height,e.height+t.y)),r.includes("w")&&(c=Math.max(o.width,e.width-t.x),a=n-c),r.includes("n")&&(u=Math.max(o.height,e.height-t.y),l=i-u),{x:a,y:l,width:c,height:u}}function $0(e,t,r){const o={...e};for(const n of["x","y","width","height"])r?.[n]!==void 0&&r[n]!==t?.[n]&&(o[n]=r[n]);return o}function Y0(e,t,r,o=12,n=128){const i=e??{left:0,right:r.width,bottom:r.height,height:r.height},l=t.filter(c=>c.width>0&&c.height>=i.height*.45&&c.rightc.left-u.left||u.right-c.right).reduce((c,u)=>u.left<=c+4?Math.max(c,u.right):c,i.left);return{left:Math.round(Math.max(i.left+n,l)+o),bottom:Math.round(Math.max(o,r.height-i.bottom+o))}}const Qo=[];let mh=!1;const X0=e=>e.isConnected&&!e.hidden&&e.offsetParent!==null;function G0(e){const t=Qo.filter(X0);if(t.length<2)return;const r=document.activeElement instanceof Element?t.findIndex(n=>n===document.activeElement||n.contains(document.activeElement)):-1,o=r<0?t.length-1:(r+(e?-1:1)+t.length)%t.length;t[o].dispatchEvent(new CustomEvent("bv-ui-activate"))}function K0(){mh||(mh=!0,window.addEventListener("keydown",e=>{e.key!=="Tab"||!e.ctrlKey||e.altKey||e.metaKey||(e.preventDefault(),e.stopImmediatePropagation(),G0(e.shiftKey))},!0))}function q0(e){return K0(),Qo.push(e),()=>{const t=Qo.indexOf(e);t>=0&&Qo.splice(t,1)}}function xh(e){const t=Qo.indexOf(e);t>=0&&Qo.splice(t,1),Qo.push(e)}const Hv="bvWindowMenuVisible",oi="bv-window-menu-visibility-changed",J0=e=>!["BV Smart Pipe","BV Smart Pipe Merge"].includes(e);function mn(e){const t=e?.properties?.[Hv];return typeof t=="boolean"?t:J0(String(e?.type??e?.comfyClass??""))}function fi(e,t){e&&(e.properties??(e.properties={}),e.properties[Hv]=!!t,e.graph?.setDirtyCanvas?.(!0,!0),window.dispatchEvent(new CustomEvent(oi,{detail:{node:e,visible:!!t}})))}function Z0(e){return window.addEventListener(oi,e),()=>window.removeEventListener(oi,e)}let Ku=0;window.addEventListener(oi,()=>Ku++);function Aa(e){return m.useSyncExternalStore(Z0,()=>Ku,()=>Ku),mn(e)}const Q0=(e,t)=>String(e?.id??e?._id??e?.extra?.uuid??t);function kf(e,t){const r=[],o=(n,i,a,l=new Set)=>{if(!n||l.has(n))return;const c=new Set(l);c.add(n);const u=Q0(n,i.length?i[i.length-1]:"root");for(const d of n._nodes??n.nodes??[]){const f=String(d.id),p=[...i,u];t(d)&&r.push({node:d,graph:n,path:p,key:`${p.join("/")}:${f}`,breadcrumb:a.join(" › ")});const g=d.subgraph??(()=>{try{return d.getSubgraph?.()}catch{return null}})();g&&o(g,[...p,f],[...a,String(d.title||d.type||`#${f}`)],c)}};return o(e,[],[]),r}function ha(e,t){return kf(e,r=>r===t)[0]?.key??String(t?.id??"")}const as="bv-toggle-toolbar-window-launcher";function e1({getColumns:e}){const[t,r]=m.useState({left:0,top:0}),[o,n]=m.useState(!1),[i,a]=m.useState(!1),[,l]=m.useState(0),c=m.useRef(null),u=m.useRef(),d=m.useRef(),f=m.useRef(0),p=()=>{u.current&&window.clearTimeout(u.current),d.current&&window.clearTimeout(d.current)},g=(v,_)=>{const y=v.getBoundingClientRect(),T=Math.min(Math.max(1,_)*220,window.innerWidth-24),S=Math.min(420,window.innerHeight-84),z=Math.max(12,Math.min(y.left,window.innerWidth-T-12)),N=y.bottom+6+S<=window.innerHeight-12?y.bottom+6:Math.max(12,y.top-S-6);return{left:z,top:N}},x=m.useCallback((v,_)=>{p(),u.current=window.setTimeout(()=>{if(document.body.classList.contains("bv-toolbar-no-editor")&&document.body.classList.contains("bv-toolbar-no-quick"))return;const y=[...document.querySelectorAll(".bv-regional-action")].filter(S=>S.offsetParent!==null),T=_?.offsetParent?_:y[0];T&&(a(!1),r(g(T,e(!1).filter(S=>S.items.length).length)),n(!0))},v)},[e]),w=m.useCallback(()=>x(180),[x]),k=m.useCallback(()=>{u.current&&window.clearTimeout(u.current);const v=Math.max(280,f.current-Date.now());d.current=window.setTimeout(()=>{c.current?.matches(":hover")||(n(!1),a(!1))},v)},[]);m.useEffect(()=>{const v=new Map,_=()=>{for(const T of document.querySelectorAll(".bv-regional-action")){if(v.has(T))continue;const S=()=>w(),z=()=>k();T.addEventListener("pointerenter",S),T.addEventListener("pointerleave",z);const N=()=>{T.removeEventListener("pointerenter",S),T.removeEventListener("pointerleave",z)};v.set(T,N)}};_();const y=new MutationObserver(_);return y.observe(document.body,{childList:!0,subtree:!0}),()=>{y.disconnect(),v.forEach(T=>T()),p()}},[k,w]),m.useEffect(()=>{if(!o)return;const v=_=>{_.key==="Escape"&&(n(!1),a(!1))};return window.addEventListener("keydown",v),()=>window.removeEventListener("keydown",v)},[o]),m.useEffect(()=>{const v=_=>o?(n(!1),a(!1)):x(0,_.detail?.anchor);return window.addEventListener(as,v),()=>window.removeEventListener(as,v)},[o,x]),m.useEffect(()=>{const v=()=>l(_=>_+1);return window.addEventListener(oi,v),()=>window.removeEventListener(oi,v)},[]);const b=v=>{p(),f.current=Date.now()+700;const _=c.current?.getBoundingClientRect();a(v),requestAnimationFrame(()=>requestAnimationFrame(()=>{const y=c.current?.getBoundingClientRect();!_||!y||r(T=>({...T,top:Math.max(12,Math.min(window.innerHeight-y.height-12,T.top+_.bottom-y.bottom))}))}))};if(!o)return null;const h=e(i).filter(v=>v.items.length);return Ur.createPortal(s.jsxs("div",{ref:c,className:"bv-toolbar-window-launcher bv-ui bv-density-compact",style:{left:t.left,top:t.top,"--bv-launcher-columns":Math.max(1,h.length)},role:"dialog","aria-label":"BV window launcher",onPointerEnter:p,onPointerLeave:k,children:[s.jsx("div",{className:"bv-toolbar-window-launcher__body",children:h.length?h.map(v=>s.jsxs("section",{children:[s.jsx("h3",{children:v.label}),s.jsx("div",{children:v.items.map(_=>s.jsxs("div",{className:`bv-toolbar-launcher-row ${_.hidden?"is-hidden":""}`,children:[s.jsxs(ie,{intent:"ghost",disabled:_.disabled,onClick:()=>{n(!1),a(!1),_.onSelect()},children:[s.jsx("span",{children:_.label}),_.meta&&s.jsx("small",{children:_.meta})]}),_.secondary&&s.jsx("button",{type:"button",className:"bv-toolbar-launcher-secondary",title:_.secondary.label,"aria-label":_.secondary.label,onClick:()=>{n(!1),a(!1),_.secondary?.onSelect()},children:"✎"}),_.hidden&&_.onReveal&&s.jsx("button",{type:"button",className:"bv-toolbar-launcher-reveal",title:"Show in BV window menus","aria-label":`Show ${_.label} in BV window menus`,onClick:_.onReveal,children:"◉"})]},_.id))})]},v.id)):s.jsxs("div",{className:"bv-toolbar-launcher-empty",children:[s.jsx("strong",{children:"No visible BV windows"}),s.jsx("span",{children:"Show hidden nodes to restore one."})]})}),s.jsx("footer",{children:s.jsx($s,{label:"Show hidden nodes",value:i,trueLabel:"Shown",falseLabel:"Hidden",onValue:b})})]}),document.body)}var pi=class{constructor(){I(this,"attributes");I(this,"nameToAttribute");this.attributes=[],this.nameToAttribute=new Map}addWithAll(e,t,r,o){const n=new te(e,t,r,o);return this.attributes.push(n),this.nameToAttribute.set(e,n),n}addInherited(e,t){return this.addWithAll(e,t,void 0,!1)}add(e,t,r){return this.addWithAll(e,void 0,t,r)}getAttributes(){return this.attributes}getModelName(e){const t=this.nameToAttribute.get(e);if(t!==void 0)return t.modelName}toJson(e,t){for(const r of this.attributes){const o=t[r.name];(r.alwaysWriteJson||o!==r.defaultValue)&&(e[r.name]=o)}}fromJson(e,t){for(const r of this.attributes){let o=e[r.name];o===void 0&&r.alias&&(o=e[r.alias]),o===void 0?t[r.name]=r.defaultValue:t[r.name]=o}}update(e,t){for(const r of this.attributes)if(Object.prototype.hasOwnProperty.call(e,r.name)){const o=e[r.name];o===void 0?delete t[r.name]:t[r.name]=o}}setDefaults(e){for(const t of this.attributes)e[t.name]=t.defaultValue}pairAttributes(e,t){for(const r of t.attributes)if(r.modelName&&this.nameToAttribute.has(r.modelName)){const o=this.nameToAttribute.get(r.modelName);o.setpairedAttr(r),r.setpairedAttr(o),o.setPairedType(e)}}toTypescriptInterface(e,t){const r=[],o=this.attributes.sort((n,i)=>n.name.localeCompare(i.name));r.push("export interface I"+e+"Attributes {");for(let n=0;ntypeof t=="object"&&t!==null&&"value"in t?{value:t.value,label:t.label!==void 0?t.label:String(t.value)}:{value:t,label:typeof t=="string"?t.charAt(0).toUpperCase()+t.slice(1):String(t)}),this}getValues(){return this.values!==void 0?this.values:this.pairedAttr?.values}setRequired(){return this.required=!0,this}setFixed(){return this.fixed=!0,this}setpairedAttr(e){this.pairedAttr=e}setPairedType(e){this.pairedType=e}},I(Ri,"NUMBER","number"),I(Ri,"STRING","string"),I(Ri,"BOOLEAN","boolean"),Ri),ge=class Wo{constructor(t,r,o,n){I(this,"x");I(this,"y");I(this,"width");I(this,"height");this.x=t,this.y=r,this.width=o,this.height=n}static empty(){return new Wo(0,0,0,0)}static fromJson(t){return new Wo(t.x,t.y,t.width,t.height)}toJson(){return{x:this.x,y:this.y,width:this.width,height:this.height}}snap(t){this.x=Math.round(this.x/t)*t,this.y=Math.round(this.y/t)*t,this.width=Math.round(this.width/t)*t,this.height=Math.round(this.height/t)*t}static getBoundingClientRect(t){const{x:r,y:o,width:n,height:i}=t.getBoundingClientRect();return new Wo(r,o,n,i)}static fromDomRect(t){return new Wo(t.x,t.y,t.width,t.height)}relativeTo(t){return new Wo(this.x-t.x,this.y-t.y,this.width,this.height)}clone(){return new Wo(this.x,this.y,this.width,this.height)}equals(t){return this.x===t?.x&&this.y===t?.y&&this.width===t?.width&&this.height===t?.height}equalsWhenRounded(t){if(!t)return!1;const r=.5;return Math.abs(this.x-t.x)t.width&&(this.width=t.width),this.height>t.height&&(this.height=t.height),this.xt.getRight()&&(this.x=t.getRight()-this.width),this.getBottom()>t.getBottom()&&(this.y=t.getBottom()-this.height),this.x=.25&&r<.75&&o>=.25&&o<.75)return De.CENTER;const i=o>=r,a=o>=1-r;return i?a?De.BOTTOM:De.LEFT:a?De.RIGHT:De.TOP}getName(){return this.name}getOrientation(){return this.orientation}getDockRect(t){return this===De.TOP?new ge(t.x,t.y,t.width,t.height/2):this===De.BOTTOM?new ge(t.x,t.getBottom()-t.height/2,t.width,t.height/2):this===De.LEFT?new ge(t.x,t.y,t.width/2,t.height):this===De.RIGHT?new ge(t.getRight()-t.width/2,t.y,t.width/2,t.height):t.clone()}toString(){return"(DockLocation: name="+this.name+", orientation="+this.orientation+")"}},I(De,"values",new Map),I(De,"TOP",new De("top",_e.VERT,0)),I(De,"BOTTOM",new De("bottom",_e.VERT,1)),I(De,"LEFT",new De("left",_e.HORZ,0)),I(De,"RIGHT",new De("right",_e.HORZ,1)),I(De,"CENTER",new De("center",_e.VERT,0)),De),ce,re=(ce=class{static group(t){return new Kv(t)}static addTab(t,r,o,n,i){return new Fe(ce.ADD_TAB,{json:t,toNode:r,location:o.getName(),index:n,select:i})}static addNode(t,r,o,n,i){return this.addTab(t,r,o,n,i)}static moveNode(t,r,o,n,i){return new Fe(ce.MOVE_NODE,{fromNode:t,toNode:r,location:o.getName(),index:n,select:i})}static deleteTab(t){return new Fe(ce.DELETE_TAB,{node:t})}static deleteTabset(t){return new Fe(ce.DELETE_TABSET,{node:t})}static renameTab(t,r){return new Fe(ce.RENAME_TAB,{node:t,text:r})}static setTabPinned(t,r){return new Fe(ce.SET_TAB_PINNED,{node:t,pinned:r})}static setBorderType(t,r){return new Fe(ce.SET_BORDER_TYPE,{node:t,borderType:r})}static selectTab(t){return new Fe(ce.SELECT_TAB,{tabNode:t})}static setActiveTabset(t,r){return new Fe(ce.SET_ACTIVE_TABSET,{tabsetNode:t,layoutId:r})}static adjustWeights(t,r){return new Fe(ce.ADJUST_WEIGHTS,{nodeId:t,weights:r})}static adjustBorderSplit(t,r){return new Fe(ce.ADJUST_BORDER_SPLIT,{node:t,size:r})}static maximizeToggle(t,r){return new Fe(ce.MAXIMIZE_TOGGLE,{node:t,layoutId:r})}static updateModelAttributes(t){return new Fe(ce.UPDATE_MODEL_ATTRIBUTES,{json:t})}static updateNodeAttributes(t,r){return new Fe(ce.UPDATE_NODE_ATTRIBUTES,{node:t,json:r})}static updateSubLayoutAttributes(t,r){return new Fe(ce.UPDATE_SUBLAYOUT_ATTRIBUTES,{layoutId:t,json:r})}static popoutTab(t,r="window"){return new Fe(ce.POPOUT_TAB,{node:t,type:r})}static popoutTabset(t,r="window"){return new Fe(ce.POPOUT_TABSET,{node:t,type:r})}static closePopout(t){return new Fe(ce.CLOSE_POPOUT,{layoutId:t})}static movePopoutToFront(t){return new Fe(ce.MOVE_POPOUT_TO_FRONT,{layoutId:t})}static moveFloat(t,r){return new Fe(ce.MOVE_FLOAT,{layoutId:t,rect:r})}static popoutFloat(t,r){return new Fe(ce.POPOUT_FLOAT,{layoutId:t,rect:r})}static dockFloatToLayout(t,r,o,n){return new Fe(ce.DOCK_FLOAT_TO_LAYOUT,{layoutId:t,toNode:r,location:o.getName(),index:n})}static createPopout(t,r,o){return this.createSubLayout(t,r,o)}static createSubLayout(t,r,o){return new Fe(ce.CREATE_SUBLAYOUT,{layout:t,rect:r,type:o})}},I(ce,"ADD_TAB","FlexLayout_AddTab"),I(ce,"DELETE_TAB","FlexLayout_DeleteTab"),I(ce,"RENAME_TAB","FlexLayout_RenameTab"),I(ce,"SET_TAB_PINNED","FlexLayout_SetTabPinned"),I(ce,"SET_BORDER_TYPE","FlexLayout_SetBorderType"),I(ce,"SELECT_TAB","FlexLayout_SelectTab"),I(ce,"MOVE_NODE","FlexLayout_MoveNode"),I(ce,"DELETE_TABSET","FlexLayout_DeleteTabset"),I(ce,"SET_ACTIVE_TABSET","FlexLayout_SetActiveTabset"),I(ce,"ADJUST_WEIGHTS","FlexLayout_AdjustWeights"),I(ce,"ADJUST_BORDER_SPLIT","FlexLayout_AdjustBorderSplit"),I(ce,"MAXIMIZE_TOGGLE","FlexLayout_MaximizeToggle"),I(ce,"UPDATE_MODEL_ATTRIBUTES","FlexLayout_UpdateModelAttributes"),I(ce,"UPDATE_NODE_ATTRIBUTES","FlexLayout_UpdateNodeAttributes"),I(ce,"UPDATE_SUBLAYOUT_ATTRIBUTES","FlexLayout_UpdateSubLayoutAttributes"),I(ce,"POPOUT_TAB","FlexLayout_PopoutTab"),I(ce,"POPOUT_TABSET","FlexLayout_PopoutTabset"),I(ce,"CLOSE_POPOUT","FlexLayout_ClosePopout"),I(ce,"MOVE_POPOUT_TO_FRONT","FlexLayout_MoveFloatToFront"),I(ce,"MOVE_FLOAT","FlexLayout_MoveFloat"),I(ce,"DOCK_FLOAT_TO_LAYOUT","FlexLayout_DockFloatToLayout"),I(ce,"POPOUT_FLOAT","FlexLayout_PopoutFloat"),I(ce,"CREATE_SUBLAYOUT","FlexLayout_CreateSubLayout"),I(ce,"GROUP","FlexLayout_Group"),ce),Fe=class{constructor(e,t){I(this,"type");I(this,"data");I(this,"adjusting");this.type=e,this.data=t,this.adjusting=!1}setAdjusting(e){return this.adjusting=e,this}isAdjusting(){return this.adjusting}toJSON(){return{type:this.type,data:this.data}}},Kv=class extends Fe{constructor(t){super(re.GROUP,t);I(this,"actions");this.actions=t}},Rt=class{constructor(e,t,r,o,n){I(this,"node");I(this,"rect");I(this,"location");I(this,"index");I(this,"className");this.node=e,this.rect=t,this.location=r,this.index=o,this.className=n}},U=function(e){return e.FLEXLAYOUT__BORDER="flexlayout__border",e.FLEXLAYOUT__BORDER_="flexlayout__border_",e.FLEXLAYOUT__BORDER_TAB_CONTENTS="flexlayout__border_tab_contents",e.FLEXLAYOUT__BORDER_TAB_OVERLAY="flexlayout__border_tab_overlay",e.FLEXLAYOUT__BORDER_TAB_OVERLAY_="flexlayout__border_tab_overlay_",e.FLEXLAYOUT__BORDER_BUTTON="flexlayout__border_button",e.FLEXLAYOUT__BORDER_BUTTON_="flexlayout__border_button_",e.FLEXLAYOUT__BORDER_BUTTON_CONTENT="flexlayout__border_button_content",e.FLEXLAYOUT__BORDER_BUTTON_LEADING="flexlayout__border_button_leading",e.FLEXLAYOUT__BORDER_BUTTON_TRAILING="flexlayout__border_button_trailing",e.FLEXLAYOUT__BORDER_BUTTON__SELECTED="flexlayout__border_button--selected",e.FLEXLAYOUT__BORDER_BUTTON__UNSELECTED="flexlayout__border_button--unselected",e.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON_OVERFLOW="flexlayout__border_toolbar_button_overflow",e.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON_OVERFLOW_="flexlayout__border_toolbar_button_overflow_",e.FLEXLAYOUT__BORDER_INNER="flexlayout__border_inner",e.FLEXLAYOUT__BORDER_INNER_="flexlayout__border_inner_",e.FLEXLAYOUT__BORDER_INNER_TAB_CONTAINER="flexlayout__border_inner_tab_container",e.FLEXLAYOUT__BORDER_INNER_TAB_CONTAINER_="flexlayout__border_inner_tab_container_",e.FLEXLAYOUT__BORDER_INNER_TAB_CONTAINER_LEFT_DOWN="flexlayout__border_inner_tab_container_left_down",e.FLEXLAYOUT__BORDER_TAB_DIVIDER="flexlayout__border_tab_divider",e.FLEXLAYOUT__BORDER_LEADING="flexlayout__border_leading",e.FLEXLAYOUT__BORDER_SIZER="flexlayout__border_sizer",e.FLEXLAYOUT__BORDER_TOOLBAR="flexlayout__border_toolbar",e.FLEXLAYOUT__BORDER_TOOLBAR_="flexlayout__border_toolbar_",e.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON="flexlayout__border_toolbar_button",e.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON_FLOAT="flexlayout__border_toolbar_button-float",e.FLEXLAYOUT__DRAG_RECT="flexlayout__drag_rect",e.FLEXLAYOUT__EDGE_RECT="flexlayout__edge_rect",e.FLEXLAYOUT__EDGE_RECT_TOP="flexlayout__edge_rect_top",e.FLEXLAYOUT__EDGE_RECT_LEFT="flexlayout__edge_rect_left",e.FLEXLAYOUT__EDGE_RECT_BOTTOM="flexlayout__edge_rect_bottom",e.FLEXLAYOUT__EDGE_RECT_RIGHT="flexlayout__edge_rect_right",e.FLEXLAYOUT__ERROR_BOUNDARY_CONTAINER="flexlayout__error_boundary_container",e.FLEXLAYOUT__ERROR_BOUNDARY_CONTENT="flexlayout__error_boundary_content",e.FLEXLAYOUT__FLOAT_WINDOW="flexlayout__float_window",e.FLEXLAYOUT__FLOAT_WINDOW_HEADER="flexlayout__float_window_header",e.FLEXLAYOUT__FLOAT_WINDOW_HEADER_TITLE="flexlayout__float_window_header_title",e.FLEXLAYOUT__FLOAT_WINDOW_CONTENT="flexlayout__float_window_content",e.FLEXLAYOUT__FLOAT_WINDOW_DRAG_HANDLE="flexlayout__float_window_drag_handle",e.FLEXLAYOUT__FLOAT_WINDOW_BUTTON="flexlayout__float_window_button",e.FLEXLAYOUT__FLOATING_WINDOW_CONTENT="flexlayout__floating_window_content",e.FLEXLAYOUT__LAYOUT="flexlayout__layout",e.FLEXLAYOUT__LAYOUT_METRICS="flexlayout__layout_metrics",e.FLEXLAYOUT__LAYOUT_MOVEABLES_HOME="flexlayout__layout_moveables_home",e.FLEXLAYOUT__LAYOUT_OVERLAY="flexlayout__layout_overlay",e.FLEXLAYOUT__LAYOUT_TAB_STAMPS="flexlayout__layout_tab_stamps",e.FLEXLAYOUT__LAYOUT_MAIN="flexlayout__layout_main",e.FLEXLAYOUT__LAYOUT_BORDER_CONTAINER="flexlayout__layout_border_container",e.FLEXLAYOUT__LAYOUT_BORDER_CONTAINER_INNER="flexlayout__layout_border_container_inner",e.FLEXLAYOUT__OUTLINE_RECT="flexlayout__outline_rect",e.FLEXLAYOUT__OUTLINE_RECT_EDGE="flexlayout__outline_rect_edge",e.FLEXLAYOUT__SPLITTER="flexlayout__splitter",e.FLEXLAYOUT__SPLITTER_="flexlayout__splitter_",e.FLEXLAYOUT__SPLITTER_BORDER="flexlayout__splitter_border",e.FLEXLAYOUT__SPLITTER_DRAG="flexlayout__splitter_drag",e.FLEXLAYOUT__SPLITTER_HANDLE="flexlayout__splitter_handle",e.FLEXLAYOUT__SPLITTER_HANDLE_HORZ="flexlayout__splitter_handle_horz",e.FLEXLAYOUT__SPLITTER_HANDLE_VERT="flexlayout__splitter_handle_vert",e.FLEXLAYOUT__ROW="flexlayout__row",e.FLEXLAYOUT__TAB="flexlayout__tab",e.FLEXLAYOUT__TAB_MOVEABLE="flexlayout__tab_moveable",e.FLEXLAYOUT__TAB_OVERLAY="flexlayout__tab_overlay",e.FLEXLAYOUT__TAB_OVERLAY_RAISED="flexlayout__tab_overlay_raised",e.FLEXLAYOUT__TAB_LAYOUT_CONTAINER="flexlayout__tab_layout_container",e.FLEXLAYOUT__TAB_LAYOUT_CONTAINER_USER="flexlayout__tab_layout_container_user",e.FLEXLAYOUT__TABSET="flexlayout__tabset",e.FLEXLAYOUT__TABSET_CONTAINER="flexlayout__tabset_container",e.FLEXLAYOUT__TABSET_MAXIMIZED="flexlayout__tabset-maximized",e.FLEXLAYOUT__TABSET_SELECTED="flexlayout__tabset-selected",e.FLEXLAYOUT__TABSET_TAB_SPACER="flexlayout__tabset_tab_spacer",e.FLEXLAYOUT__TABSET_TAB_DIVIDER="flexlayout__tabset_tab_divider",e.FLEXLAYOUT__TABSET_TAB_DIVIDER_SELECTED_BEFORE="flexlayout__tabset_tab_divider_selected_before",e.FLEXLAYOUT__TABSET_TAB_DIVIDER_SELECTED_AFTER="flexlayout__tabset_tab_divider_selected_after",e.FLEXLAYOUT__TABSET_TAB_DIVIDER_INNER="flexlayout__tabset_tab_divider_inner",e.FLEXLAYOUT__TABSET_CONTENT="flexlayout__tabset_content",e.FLEXLAYOUT__TABSET_TABBAR_INNER="flexlayout__tabset_tabbar_inner",e.FLEXLAYOUT__TABSET_TABBAR_INNER_="flexlayout__tabset_tabbar_inner_",e.FLEXLAYOUT__TABSET_LEADING="flexlayout__tabset_leading",e.FLEXLAYOUT__TABSET_TABBAR_INNER_TAB_CONTAINER="flexlayout__tabset_tabbar_inner_tab_container",e.FLEXLAYOUT__TABSET_TABBAR_INNER_TAB_CONTAINER_="flexlayout__tabset_tabbar_inner_tab_container_",e.FLEXLAYOUT__TABSET_TABBAR_OUTER="flexlayout__tabset_tabbar_outer",e.FLEXLAYOUT__TABSET_TABBAR_OUTER_="flexlayout__tabset_tabbar_outer_",e.FLEXLAYOUT__TAB_BORDER="flexlayout__tab_border",e.FLEXLAYOUT__TAB_BORDER_="flexlayout__tab_border_",e.FLEXLAYOUT__TAB_BORDER_OVERLAY="flexlayout__tab_border_overlay",e.FLEXLAYOUT__TAB_BUTTON="flexlayout__tab_button",e.FLEXLAYOUT__TAB_BUTTON_STRETCH="flexlayout__tab_button_stretch",e.FLEXLAYOUT__TAB_BUTTON_CONTENT="flexlayout__tab_button_content",e.FLEXLAYOUT__TAB_BUTTON_LEADING="flexlayout__tab_button_leading",e.FLEXLAYOUT__TAB_BUTTON_OVERFLOW="flexlayout__tab_button_overflow",e.FLEXLAYOUT__TAB_BUTTON_PIN="flexlayout__tab_button_pin",e.FLEXLAYOUT__TAB_BUTTON_OVERFLOW_COUNT="flexlayout__tab_button_overflow_count",e.FLEXLAYOUT__TAB_BUTTON_TEXTBOX="flexlayout__tab_button_textbox",e.FLEXLAYOUT__TAB_BUTTON_TRAILING="flexlayout__tab_button_trailing",e.FLEXLAYOUT__TAB_BUTTON_STAMP="flexlayout__tab_button_stamp",e.FLEXLAYOUT__TAB_TOOLBAR="flexlayout__tab_toolbar",e.FLEXLAYOUT__TAB_TOOLBAR_BUTTON="flexlayout__tab_toolbar_button",e.FLEXLAYOUT__TAB_TOOLBAR_ICON="flexlayout__tab_toolbar_icon",e.FLEXLAYOUT__TAB_TOOLBAR_BUTTON_="flexlayout__tab_toolbar_button-",e.FLEXLAYOUT__TAB_TOOLBAR_BUTTON_FLOAT="flexlayout__tab_toolbar_button-float",e.FLEXLAYOUT__TAB_TOOLBAR_STICKY_BUTTONS_CONTAINER="flexlayout__tab_toolbar_sticky_buttons_container",e.FLEXLAYOUT__TAB_TOOLBAR_BUTTON_CLOSE="flexlayout__tab_toolbar_button-close",e.FLEXLAYOUT__POPUP_MENU_CONTAINER="flexlayout__popup_menu_container",e.FLEXLAYOUT__POPUP_MENU_ITEM="flexlayout__popup_menu_item",e.FLEXLAYOUT__POPUP_MENU_ITEM__SELECTED="flexlayout__popup_menu_item--selected",e.FLEXLAYOUT__POPUP_MENU_ITEM__DISABLED="flexlayout__popup_menu_item--disabled",e.FLEXLAYOUT__POPUP_MENU_DIVIDER="flexlayout__popup_menu_divider",e.FLEXLAYOUT__POPUP_MENU="flexlayout__popup_menu",e.FLEXLAYOUT__MINI_SCROLLBAR="flexlayout__mini_scrollbar",e.FLEXLAYOUT__MINI_SCROLLBAR_CONTAINER="flexlayout__mini_scrollbar_container",e}({}),Ks=class{constructor(e){I(this,"model");I(this,"attributes");I(this,"parent");I(this,"children");I(this,"rect");I(this,"path");I(this,"listeners");this.model=e,this.attributes={},this.children=[],this.rect=ge.empty(),this.listeners=new Map,this.path=""}getId(){let e=this.attributes.id;return e!==void 0||(e=this.model.nextUniqueId(),this.setId(e)),e}getModel(){return this.model}getType(){return this.attributes.type}getParent(){return this.parent}getChildren(){return this.children}getRect(){return this.rect}getPath(){return this.path}isCloseable(){for(let e=0;er.some(a=>a.toLowerCase()===i);return e.key.toLowerCase()===o.toLowerCase()&&e.ctrlKey===n("ctrl")&&e.shiftKey===n("shift")&&e.altKey===n("alt")&&e.metaKey===n("meta")}function ga(e){return e.ctrlKey||e.shiftKey||e.altKey||e.metaKey}function K0(e){return{...G0,...e}}function Co(e){return e?.replace(/\bctrl\b/i,"Control")}function Zv(e){e&&(e.querySelector('a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])')??e).focus()}function ba(e){let t=!1;return e.nativeEvent instanceof MouseEvent&&(e.nativeEvent.button!==0||e.ctrlKey||e.altKey||e.metaKey||e.shiftKey)&&(t=!0),t}function El(e,t){const r=[...kh("iframe",t),...kh("webview",t)];for(const o of r)o.style.pointerEvents=e?"auto":"none"}function kh(e,t){return[...t.getElementsByTagName(e)]}var Tl=!1;function as(e,t,r,o,n){Tl=!0,t.preventDefault();const i=u=>{u.preventDefault(),r(u.clientX,u.clientY)},a=()=>{e.removeEventListener("pointermove",i),e.removeEventListener("pointerup",c),e.removeEventListener("pointercancel",l)},l=u=>{u.preventDefault(),a(),Tl=!1,n()},c=()=>{a(),Tl=!1,o()};e.addEventListener("pointermove",i),e.addEventListener("pointerup",c),e.addEventListener("pointercancel",l)}function Qv(e){let t;return e.getController().getModel().visitNodes(r=>{r instanceof Le&&r.getSubLayoutId()===e.getLayoutId()&&(t=r.getLayout())}),t}function em(e,t){const r=t.getType();if(r==="window")return e.isAllowedInWindow();if(r==="float")return!0;if(r==="tab"){const o=Qv(t);return!(o&&o.getType()==="window"&&!o.isMainLayout()&&!e.isAllowedInWindow()||tm(e))}return!1}function tm(e){return e instanceof Le?e.getSubLayoutId()!==void 0:e.getChildren().some(t=>tm(t))}function Eh(e,t){const r=e.getAttribute("style");return r===t.getAttribute("style")?!1:(r?t.setAttribute("style",r):t.removeAttribute("style"),!0)}function q0(){const e=navigator.userAgent;return e.includes("Safari")&&!e.includes("Chrome")&&!e.includes("Chromium")}function J0(e=window){const t=e.document;return{scrollTop:e.pageYOffset||t.documentElement.scrollTop||t.body.scrollTop||0,scrollLeft:e.pageXOffset||t.documentElement.scrollLeft||t.body.scrollLeft||0,fullHeight:Math.max(t.body.scrollHeight,t.documentElement.scrollHeight,t.body.offsetHeight,t.documentElement.offsetHeight,t.body.clientHeight,t.documentElement.clientHeight),fullWidth:Math.max(t.body.scrollWidth,t.documentElement.scrollWidth,t.body.offsetWidth,t.documentElement.offsetWidth,t.body.clientWidth,t.documentElement.clientWidth),viewportHeight:e.innerHeight||t.documentElement.clientHeight,viewportWidth:e.innerWidth||t.documentElement.clientWidth}}var Ie,Ue=(Ie=class extends Ks{constructor(r,o){super(r);I(this,"layout");I(this,"minHeight");I(this,"minWidth");I(this,"maxHeight");I(this,"maxWidth");this.minHeight=1,this.minWidth=1,this.maxHeight=Yr,this.maxWidth=Yr,Ie.attributeDefinitions.fromJson(o,this.attributes),r.addNode(this)}static fromJson(r,o,n){const i=new Ie(o,r);if(r.children!=null){for(const a of r.children)if(a.type===Ne.TYPE){const l=Ne.fromJson(a,o,n);i.addChild(l)}else if(a.type===Ie.TYPE){const l=Ie.fromJson(a,o,n);i.addChild(l)}}return i}getWeight(){return this.attributes.weight}toJson(){const r={};Ie.attributeDefinitions.toJson(r,this.attributes),r.children=[];for(const o of this.children)r.children.push(o.toJson());return r}getLayout(){return this.layout?this.layout:super.getLayout()}setLayout(r){this.layout=r}setWeight(r){this.attributes.weight=r}getSplitterBounds(r){const o=this.getOrientation()===_e.HORZ,n=this.getChildren(),i=this.model.getSplitterSize(),a=n[0].getRect(),l=n[n.length-1].getRect();let c=o?[a.x,l.getRight()]:[a.y,l.getBottom()];const u=o?[a.x,l.getRight()]:[a.y,l.getBottom()];for(let d=0;d0&&(c[0]+=i,u[0]+=i)}for(let d=n.length-1;d>=r;d--){const f=n[d];c[1]-=(o?f.getMinWidth():f.getMinHeight())+i,u[1]-=(o?Math.max(f.getMinWidth(),f.getMaxWidth()):Math.max(f.getMinHeight(),f.getMaxHeight()))+i}return c=[Math.max(u[1],c[0]),Math.min(u[0],c[1])],c[0]>c[1]&&(c=[c[0],c[0]]),c}getSplitterInitials(r){const o=this.getOrientation()===_e.HORZ,n=this.getChildren(),i=this.model.getSplitterSize(),a=[];let l=0;for(let d=0;df?(g=u[r]+p-f,u[r]=f):u[r]+=p;for(let x=r-1;x>=0;x--){const w=c[x],k=l?w.getMinWidth():w.getMinHeight();if(u[x]-p>k){u[x]-=p;break}else p-=u[x]-k,u[x]=k}for(let x=r+1;xf?(g=u[r-1]+p-f,u[r-1]=f):u[r-1]+=p;for(let x=r;xk){u[x]-=p;break}else p-=u[x]-k,u[x]=k}for(let x=r-1;x>=0;x--){const w=c[x],k=l?w.getMaxWidth():w.getMaxHeight();if(u[x]+gMath.max(.1,d)*100/i)}getMinWidth(){return this.minWidth}getMinHeight(){return this.minHeight}getMaxWidth(){return this.maxWidth}getMaxHeight(){return this.maxHeight}calcMinMaxSize(){this.minHeight=1,this.minWidth=1,this.maxHeight=Yr,this.maxWidth=Yr;let r=!0;for(const o of this.children){const n=o;n.calcMinMaxSize();const i=Math.max(n.getMinHeight(),n.getMaxHeight()),a=Math.max(n.getMinWidth(),n.getMaxWidth());this.getOrientation()===_e.VERT?(this.minHeight+=n.getMinHeight(),this.maxHeight+=i,r||(this.minHeight+=this.model.getSplitterSize(),this.maxHeight+=this.model.getSplitterSize()),this.minWidth=Math.max(this.minWidth,n.getMinWidth()),this.maxWidth=Math.min(this.maxWidth,a)):(this.minWidth+=n.getMinWidth(),this.maxWidth+=a,r||(this.minWidth+=this.model.getSplitterSize(),this.maxWidth+=this.model.getSplitterSize()),this.minHeight=Math.max(this.minHeight,n.getMinHeight()),this.maxHeight=Math.min(this.maxHeight,i)),r=!1}this.maxWidth=Math.max(this.maxWidth,this.minWidth),this.maxHeight=Math.max(this.maxHeight,this.minHeight)}tidy(){let r=0;for(;ru/2-f&&athis.rect.getRight()-d&&a>u/2-f&&ac/2-f&&lthis.rect.getBottom()-d&&l>c/2-f&&ld+f.getWeight(),0);c===0&&(c=100),l.setWeight(c/3);const u=!this.model.isRootOrientationVertical();if(i===ee.CENTER)n===-1?this.addChild(l,this.children.length):this.addChild(l,n);else if(u&&i===ee.LEFT||!u&&i===ee.TOP)this.addChild(l,0);else if(u&&i===ee.RIGHT||!u&&i===ee.BOTTOM)this.addChild(l);else if(u&&i===ee.TOP||!u&&i===ee.LEFT){const d=new Ie(this.model,{}),f=new Ie(this.model,{});f.setWeight(75),l.setWeight(25);for(const p of this.children)f.addChild(p);this.removeAll(),d.addChild(l),d.addChild(f),this.addChild(d)}else if(u&&i===ee.BOTTOM||!u&&i===ee.RIGHT){const d=new Ie(this.model,{}),f=new Ie(this.model,{});f.setWeight(75),l.setWeight(25);for(const p of this.children)f.addChild(p);this.removeAll(),d.addChild(f),d.addChild(l),this.addChild(d)}l instanceof Ne&&this.model.setActiveTabset(l,this.getLayoutId()),this.model.tidy()}isEnableDrop(){return!0}getAttributeDefinitions(){return Ie.attributeDefinitions}updateAttrs(r){Ie.attributeDefinitions.update(r,this.attributes)}static getAttributeDefinitions(){return lt.ensureAttributePairing(),Ie.attributeDefinitions}static createAttributeDefinitions(){const r=new fi;return r.add("type",Ie.TYPE,!0).setType(te.STRING).setFixed(),r.add("id",void 0).setType(te.STRING).setDescription("the unique id of the row, if left undefined a uuid will be assigned"),r.add("weight",100).setType(te.NUMBER).setDescription("relative weight for sizing of this row in parent row"),r}},I(Ie,"TYPE","row"),I(Ie,"attributeDefinitions",Ie.createAttributeDefinitions()),Ie),vt,Ne=(vt=class extends Ks{constructor(r,o){super(r);I(this,"tabStripRect",ge.empty());I(this,"contentRect",ge.empty());I(this,"calculatedMinHeight");I(this,"calculatedMinWidth");I(this,"calculatedMaxHeight");I(this,"calculatedMaxWidth");this.calculatedMinHeight=0,this.calculatedMinWidth=0,this.calculatedMaxHeight=0,this.calculatedMaxWidth=0,vt.attributeDefinitions.fromJson(o,this.attributes),r.addNode(this)}static fromJson(r,o,n){const i=new vt(o,r);if(r.children!=null)for(const a of r.children){const l=Le.fromJson(a,o);i.addChild(l)}return i.children.length===0?i.setSelected(-1):i.getSelected()>=i.children.length&&i.setSelected(i.children.length-1),r.maximized&&r.maximized===!0&&n.setMaximizedTabSet(i),r.active&&r.active===!0&&n.setActiveTabSet(i),i}getName(){return this.getAttr("name")}isEnableActiveIcon(){return this.getAttr("enableActiveIcon")}getSelected(){const r=this.attributes.selected;return r!==void 0?r:-1}getSelectedNode(){const r=this.getSelected();if(r!==-1)return this.children[r]}getPinnedRunLength(){let r=0;for(const o of this.children)if(o.isPinned())r++;else break;return r}getWeight(){return this.getAttr("weight")}getAttrMinWidth(){return this.getAttr("minWidth")}getAttrMinHeight(){return this.getAttr("minHeight")}getMinWidth(){return this.calculatedMinWidth}getMinHeight(){return this.calculatedMinHeight}getAttrMaxWidth(){return this.getAttr("maxWidth")}getAttrMaxHeight(){return this.getAttr("maxHeight")}getMaxWidth(){return this.calculatedMaxWidth}getMaxHeight(){return this.calculatedMaxHeight}isCloseable(){let r=this.isEnableClose();return r&&(r=super.isCloseable()),r}getConfig(){return this.attributes.config}isMaximized(){return this.model.getMaximizedTabset(this.getLayoutId())===this}isActive(){return this.model.getActiveTabset(this.getLayoutId())===this}isEnableDeleteWhenEmpty(){return this.getAttr("enableDeleteWhenEmpty")}isEnableDrop(){return this.getAttr("enableDrop")}isEnableTabStrip(){return this.getAttr("enableTabStrip")}isEnableTabWrap(){return this.getAttr("enableTabWrap")}isEnableDrag(){return this.getAttr("enableDrag")}isEnableDivide(){return this.getAttr("enableDivide")}isEnableMaximize(){return this.getAttr("enableMaximize")}isEnableClose(){return this.getAttr("enableClose")}isEnableCloseButton(){return this.getAttr("enableCloseButton")}isEnableSingleTabStretch(){return this.getAttr("enableSingleTabStretch")}isAutoSelectTab(){return this.getAttr("autoSelectTab")}isEnableTabScrollbar(){return this.getAttr("enableTabScrollbar")}getClassNameTabStrip(){return this.getAttr("classNameTabStrip")}getTabLocation(){return this.getAttr("tabLocation")}toJson(){const r={};return vt.attributeDefinitions.toJson(r,this.attributes),r.children=this.children.map(o=>o.toJson()),this.isActive()&&(r.active=!0),this.isMaximized()&&(r.maximized=!0),r}calcMinMaxSize(){this.calculatedMinHeight=this.getAttrMinHeight(),this.calculatedMinWidth=this.getAttrMinWidth(),this.calculatedMaxHeight=this.getAttrMaxHeight(),this.calculatedMaxWidth=this.getAttrMaxWidth();for(const r of this.children){const o=r;this.calculatedMinWidth=Math.max(this.calculatedMinWidth,o.getMinWidth()),this.calculatedMinHeight=Math.max(this.calculatedMinHeight,o.getMinHeight()),this.calculatedMaxWidth=Math.min(this.calculatedMaxWidth,o.getMaxWidth()),this.calculatedMaxHeight=Math.min(this.calculatedMaxHeight,o.getMaxHeight())}this.calculatedMinHeight+=this.tabStripRect.height,this.calculatedMaxHeight+=this.tabStripRect.height,this.calculatedMaxWidth=Math.max(this.calculatedMaxWidth,this.calculatedMinWidth),this.calculatedMaxHeight=Math.max(this.calculatedMaxHeight,this.calculatedMinHeight)}canMaximize(){return this.isEnableMaximize()?this.getModel().getMaximizedTabset(this.getLayoutId())===this?!0:!(this.getParent()===this.getModel().getRootRow(this.getLayoutId())&&this.getModel().getRootRow(this.getLayoutId()).getChildren().length===1):!1}setContentRect(r){this.contentRect=r}getContentRect(){return this.contentRect}setTabStripRect(r){this.tabStripRect=r}getTabStripRect(){return this.tabStripRect}setWeight(r){this.attributes.weight=r}setSelected(r){this.attributes.selected=r}canDrop(r,o,n,i=!1){let a;const l=this.getLayout();if(r===this){const c=ee.CENTER,u=this.tabStripRect;a=new Rt(this,u,c,-1,U.FLEXLAYOUT__OUTLINE_RECT)}else{if(this.getLayoutId()!==lt.MAIN_LAYOUT_ID&&!em(r,l))return;if(this.contentRect.contains(o,n)){let c=ee.CENTER;if(this.model.getMaximizedTabset(this.getLayoutId())===void 0){const d=!i&&this.isEnableDrop(),f=this.isEnableDivide();if(!d&&!f)return;d&&f?c=ee.getLocation(this.contentRect,o,n):d?c=ee.CENTER:c=ee.getLocation(this.contentRect,o,n,!0)}const u=c.getDockRect(this.rect);a=new Rt(this,u,c,-1,U.FLEXLAYOUT__OUTLINE_RECT)}else if(this.tabStripRect!=null&&this.tabStripRect.contains(o,n)){let c,u,d;if(this.children.length===0)c=this.tabStripRect.clone(),u=c.y+3,d=c.height-4,c.width=2;else{let f=this.children[0];c=f.getTabRect(),u=c.y,d=c.height;let p=this.tabStripRect.x;for(let g=0;g0){const c=this.getPinnedRunLength(),u=r instanceof Le&&r.isPinned()?Math.min(a.index,c):Math.max(a.index,c);if(u!==a.index){let d;if(u0&&n--,a===ee.CENTER){let u=n;u===-1&&(u=this.children.length);const d=this.getPinnedRunLength();if(r instanceof Le?u=r.isPinned()?Math.min(u,d):Math.max(u,d):u=Math.max(u,d),r instanceof Le)this.addChild(r,u),i||i!==!1&&this.isAutoSelectTab()?this.setSelected(u):Rl(this,u);else if(r instanceof Ue){const f=u;r.forEachNode((p,g)=>{p instanceof Le&&(this.addChild(p,u),u++)},0),Rl(this,f,u-f)}else{const f=u;for(let p=0;p0&&this.setSelected(0)}this.model.setActiveTabset(this,this.parent.getLayoutId())}else{let u=r;if(r instanceof Le){const p=this.model.getOnCreateTabSet();u=new vt(this.model,p?p(r):{}),u.addChild(r)}else if(r instanceof Ue){const p=this.getParent();if(r.getOrientation()===p.getOrientation()&&(o.getOrientation()===p.getOrientation()||o===ee.CENTER)){const g=new Ue(this.model,{});g.addChild(r),u=g}}else u=r;const d=this.parent,f=d.getChildren().indexOf(this);if(d.getOrientation()===a.orientation)u.setWeight(this.getWeight()/2),this.setWeight(this.getWeight()/2),d.addChild(u,f+a.indexPlus);else{const p=new Ue(this.model,{});if(p.setWeight(this.getWeight()),p.addChild(this),this.setWeight(50),r instanceof Ue&&r.getChildren().length>0&&r.getOrientation()!==d.getOrientation()){const g=r.getChildren(),x=g.reduce((k,b)=>k+b.getWeight(),0);let w=a.indexPlus;for(const k of g)k.setWeight(x===0?50/g.length:50*k.getWeight()/x),p.addChild(k,w++)}else u.setWeight(50),p.addChild(u,a.indexPlus);d.removeChild(this),d.addChild(p,f)}u instanceof vt&&this.model.setActiveTabset(u,this.getLayoutId())}this.model.tidy()}updateAttrs(r){vt.attributeDefinitions.update(r,this.attributes)}getAttributeDefinitions(){return vt.attributeDefinitions}static getAttributeDefinitions(){return lt.ensureAttributePairing(),vt.attributeDefinitions}static createAttributeDefinitions(){const r=new fi;return r.add("type",vt.TYPE,!0).setType(te.STRING).setFixed(),r.add("id",void 0).setType(te.STRING).setDescription("the unique id of the tab set, if left undefined a uuid will be assigned"),r.add("weight",100).setType(te.NUMBER).setDescription("relative weight for sizing of this tabset in parent row"),r.add("selected",0).setType(te.NUMBER).setDescription("index of selected/visible tab in tabset; -1 means no tab selected"),r.add("name",void 0).setType(te.STRING).setDescription("an accessible label for the tab strip (used as the tablist's aria-label; not displayed visually)"),r.add("config",void 0).setType("any").setDescription("a place to hold json config used in your own code"),r.addInherited("enableDeleteWhenEmpty","tabSetEnableDeleteWhenEmpty").setDescription("whether to delete this tabset when it has no tabs"),r.addInherited("enableDrop","tabSetEnableDrop").setDescription("whether tabs can be dropped into this tabset"),r.addInherited("enableDrag","tabSetEnableDrag").setDescription("whether the user can drag tabs out of this tabset"),r.addInherited("enableDivide","tabSetEnableDivide").setDescription("whether dropping on an edge of this tabset splits it to create a new tabset"),r.addInherited("enableMaximize","tabSetEnableMaximize").setDescription("whether the tabset can be maximized to fill the layout via the maximize button"),r.addInherited("enableClose","tabSetEnableClose").setDescription("whether this tabset can be closed"),r.addInherited("enableCloseButton","tabSetEnableCloseButton").setDescription("if the tabset can be closed then show a close button"),r.addInherited("enableSingleTabStretch","tabSetEnableSingleTabStretch").setDescription("if the tabset has only a single tab then stretch the single tab to fill area and display in a header style"),r.addInherited("classNameTabStrip","tabSetClassNameTabStrip").setDescription("a class name to apply to the tab strip"),r.addInherited("enableTabStrip","tabSetEnableTabStrip").setDescription("when enabled the tabset shows a tab strip and can host multiple tabs; when disabled the strip is hidden"),r.addInherited("minWidth","tabSetMinWidth").setDescription("minimum width (in px) for this tabset"),r.addInherited("minHeight","tabSetMinHeight").setDescription("minimum height (in px) for this tabset"),r.addInherited("maxWidth","tabSetMaxWidth").setDescription("maximum width (in px) for this tabset"),r.addInherited("maxHeight","tabSetMaxHeight").setDescription("maximum height (in px) for this tabset"),r.addInherited("enableTabWrap","tabSetEnableTabWrap").setDescription("wrap tabs onto multiple lines"),r.addInherited("tabLocation","tabSetTabLocation").setDescription("the location of the tabs either top or bottom"),r.addInherited("autoSelectTab","tabSetAutoSelectTab").setDescription("whether to select new/moved tabs in tabset"),r.addInherited("enableActiveIcon","tabSetEnableActiveIcon").setDescription("whether the active icon (*) should be displayed when the tabset is active"),r.addInherited("enableTabScrollbar","tabSetEnableTabScrollbar").setDescription("whether to show a mini scrollbar for the tabs"),r}},I(vt,"TYPE","tabset"),I(vt,"attributeDefinitions",vt.createAttributeDefinitions()),vt);function Rl(e,t,r=1){const o=e.getSelected();r>0&&o!==-1&&t<=o&&e.setSelected(o+r)}function ls(e,t){if(e!==void 0&&(e instanceof Ne||e instanceof Ke)){const r=e.getSelected();r!==-1&&(t===r&&e.getChildren().length>0?t>=e.getChildren().length&&e.setSelected(e.getChildren().length-1):tr||e.setSelected(-1))}}function En(){return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,e=>(e^crypto.getRandomValues(new Uint8Array(1))[0]&15>>e/4).toString(16))}var kt,Ke=(kt=class extends Ks{constructor(r,o,n){super(n);I(this,"contentRect",ge.empty());I(this,"tabHeaderRect",ge.empty());I(this,"location");this.location=r,this.attributes.id=`border_${r.getName()}`,kt.attributeDefinitions.fromJson(o,this.attributes),n.addNode(this)}static fromJson(r,o){const n=ee.getByName(r.location),i=new kt(n,r,o);return r.children&&(i.children=r.children.map(a=>{const l=Le.fromJson(a,o);return l.setParent(i),l})),i.getSelected()>=i.children.length&&i.setSelected(i.children.length-1),i}getLocation(){return this.location}getClassName(){return this.getAttr("className")}isHorizontal(){return this.location.orientation===_e.HORZ}getSize(){const r=this.getAttr("size"),o=this.getSelected();if(o===-1)return r;{const n=this.children[o],i=this.isHorizontal()?n.getAttr("borderWidth"):n.getAttr("borderHeight");return i===-1?r:i}}getMinSize(){const r=this.getSelectedNode();let o=this.getAttr("minSize");if(r){const n=this.isHorizontal()?r.getMinWidth():r.getMinHeight();o=Math.max(o,n)}return o}getMaxSize(){const r=this.getSelectedNode();let o=this.getAttr("maxSize");if(r){const n=this.isHorizontal()?r.getMaxWidth():r.getMaxHeight();o=Math.min(o,n)}return o}getSelected(){return this.attributes.selected}isAutoHide(){return this.getAttr("enableAutoHide")}getBorderType(){return this.getAttr("borderType")}isOverlay(){return this.getAttr("borderType")==="overlay"}setBorderType(r){this.attributes.borderType=r}getSelectedNode(){if(this.getSelected()!==-1)return this.children[this.getSelected()]}getOrientation(){return this.location.getOrientation()}getConfig(){return this.attributes.config}isMaximized(){return!1}isShowing(){return this.attributes.show}toJson(){const r={location:"bottom"};return kt.attributeDefinitions.toJson(r,this.attributes),r.location=this.location.getName(),r.children=this.children.map(o=>o.toJson()),r}isAutoSelectTabWhenOpen(){return this.getAttr("autoSelectTabWhenOpen")}isAutoSelectTabWhenClosed(){return this.getAttr("autoSelectTabWhenClosed")}isAutoSelectTab(r){return r==null&&(r=this.getSelected()!==-1),r?this.isAutoSelectTabWhenOpen():this.isAutoSelectTabWhenClosed()}isEnableTabScrollbar(){return this.getAttr("enableTabScrollbar")}setSelected(r){this.attributes.selected=r}setTabHeaderRect(r){this.tabHeaderRect=r}getRect(){return this.tabHeaderRect}getContentRect(){return this.contentRect}setContentRect(r){this.contentRect=r}isEnableDrop(){return this.getAttr("enableDrop")}setSize(r){const o=this.getSelected();if(o===-1)this.attributes.size=r;else{const n=this.children[o];(this.isHorizontal()?n.getAttr("borderWidth"):n.getAttr("borderHeight"))===-1?this.attributes.size=r:this.isHorizontal()?n.setBorderWidth(r):n.setBorderHeight(r)}}updateAttrs(r){kt.attributeDefinitions.update(r,this.attributes)}remove(r){const o=this.removeChild(r);this.getSelected()!==-1&&ls(this,o)}canDrop(r,o,n,i=!1){if(!(r instanceof Le))return;let a;const l=ee.CENTER;if(this.tabHeaderRect.contains(o,n)){if(this.location.orientation===_e.VERT)if(this.children.length>0){let c=this.children[0],u=c.getTabRect();const d=u.y,f=u.height;let p=this.tabHeaderRect.x;for(let g=0;g=p&&o0){let c=this.children[0],u=c.getTabRect();const d=u.x,f=u.width;let p=this.tabHeaderRect.y;for(let g=0;g=p&&n0&&n--;let c=n;c===-1&&(c=this.children.length),this.addChild(r,c),i||i!==!1&&this.isAutoSelectTab()?this.setSelected(c):Rl(this,c),this.model.tidy()}getSplitterBounds(r=!1){const o=[0,0],n=this.model.getRootRow(lt.MAIN_LAYOUT_ID),i=n.getRect();if(i.width===0&&i.height===0)return o;const a=r?this.getMinSize():0,l=r?this.getMaxSize():99999,c=this.model.getSplitterSize();if(this.location===ee.TOP){o[0]=this.tabHeaderRect.getBottom()+a;const u=this.tabHeaderRect.getBottom()+l;o[1]=Math.max(o[0],i.getBottom()-n.getMinHeight()-c),o[1]=Math.min(o[1],u)}else if(this.location===ee.LEFT){o[0]=this.tabHeaderRect.getRight()+a;const u=this.tabHeaderRect.getRight()+l;o[1]=Math.max(o[0],i.getRight()-n.getMinWidth()-c),o[1]=Math.min(o[1],u)}else if(this.location===ee.BOTTOM){o[1]=this.tabHeaderRect.y-a-c;const u=this.tabHeaderRect.y-l-c;o[0]=Math.min(o[1],i.y+n.getMinHeight()),o[0]=Math.max(o[0],u)}else if(this.location===ee.RIGHT){o[1]=this.tabHeaderRect.x-a-c;const u=this.tabHeaderRect.x-l-c;o[0]=Math.min(o[1],i.x+n.getMinWidth()),o[0]=Math.max(o[0],u)}return o}calculateSplit(r,o){const n=this.getSplitterBounds();return this.location===ee.BOTTOM||this.location===ee.RIGHT?Math.max(0,n[1]-o):Math.max(0,o-n[0])}getAttributeDefinitions(){return kt.attributeDefinitions}static getAttributeDefinitions(){return lt.ensureAttributePairing(),kt.attributeDefinitions}static createAttributeDefinitions(){const r=new fi;return r.add("type",kt.TYPE,!0).setType(te.STRING).setFixed(),r.add("selected",-1).setType(te.NUMBER).setDescription("index of selected/visible tab in border; -1 means no tab selected"),r.add("borderType","split").setType(te.STRING).setValues(["split","overlay"]).setDescription(`the border display type: 'split' splits the main layout to make room when a tab is selected; 'overlay' shows +`)}},Si,te=(Si=class{constructor(e,t,r,o){I(this,"name");I(this,"alias");I(this,"modelName");I(this,"pairedAttr");I(this,"pairedType");I(this,"defaultValue");I(this,"alwaysWriteJson");I(this,"type");I(this,"required");I(this,"fixed");I(this,"description");I(this,"values");this.name=e,this.alias=void 0,this.modelName=t,this.defaultValue=r,this.alwaysWriteJson=o,this.required=!1,this.fixed=!1,this.type="any"}setType(e){return this.type=e,this}getEffectiveType(){return this.type!=="any"?this.type:this.pairedAttr?.type}setAlias(e){return this.alias=e,this}setDescription(e){this.description=e}setValues(e){return this.values=e.map(t=>typeof t=="object"&&t!==null&&"value"in t?{value:t.value,label:t.label!==void 0?t.label:String(t.value)}:{value:t,label:typeof t=="string"?t.charAt(0).toUpperCase()+t.slice(1):String(t)}),this}getValues(){return this.values!==void 0?this.values:this.pairedAttr?.values}setRequired(){return this.required=!0,this}setFixed(){return this.fixed=!0,this}setpairedAttr(e){this.pairedAttr=e}setPairedType(e){this.pairedType=e}},I(Si,"NUMBER","number"),I(Si,"STRING","string"),I(Si,"BOOLEAN","boolean"),Si),ge=class Wo{constructor(t,r,o,n){I(this,"x");I(this,"y");I(this,"width");I(this,"height");this.x=t,this.y=r,this.width=o,this.height=n}static empty(){return new Wo(0,0,0,0)}static fromJson(t){return new Wo(t.x,t.y,t.width,t.height)}toJson(){return{x:this.x,y:this.y,width:this.width,height:this.height}}snap(t){this.x=Math.round(this.x/t)*t,this.y=Math.round(this.y/t)*t,this.width=Math.round(this.width/t)*t,this.height=Math.round(this.height/t)*t}static getBoundingClientRect(t){const{x:r,y:o,width:n,height:i}=t.getBoundingClientRect();return new Wo(r,o,n,i)}static fromDomRect(t){return new Wo(t.x,t.y,t.width,t.height)}relativeTo(t){return new Wo(this.x-t.x,this.y-t.y,this.width,this.height)}clone(){return new Wo(this.x,this.y,this.width,this.height)}equals(t){return this.x===t?.x&&this.y===t?.y&&this.width===t?.width&&this.height===t?.height}equalsWhenRounded(t){if(!t)return!1;const r=.5;return Math.abs(this.x-t.x)t.width&&(this.width=t.width),this.height>t.height&&(this.height=t.height),this.xt.getRight()&&(this.x=t.getRight()-this.width),this.getBottom()>t.getBottom()&&(this.y=t.getBottom()-this.height),this.x=.25&&r<.75&&o>=.25&&o<.75)return De.CENTER;const i=o>=r,a=o>=1-r;return i?a?De.BOTTOM:De.LEFT:a?De.RIGHT:De.TOP}getName(){return this.name}getOrientation(){return this.orientation}getDockRect(t){return this===De.TOP?new ge(t.x,t.y,t.width,t.height/2):this===De.BOTTOM?new ge(t.x,t.getBottom()-t.height/2,t.width,t.height/2):this===De.LEFT?new ge(t.x,t.y,t.width/2,t.height):this===De.RIGHT?new ge(t.getRight()-t.width/2,t.y,t.width/2,t.height):t.clone()}toString(){return"(DockLocation: name="+this.name+", orientation="+this.orientation+")"}},I(De,"values",new Map),I(De,"TOP",new De("top",_e.VERT,0)),I(De,"BOTTOM",new De("bottom",_e.VERT,1)),I(De,"LEFT",new De("left",_e.HORZ,0)),I(De,"RIGHT",new De("right",_e.HORZ,1)),I(De,"CENTER",new De("center",_e.VERT,0)),De),ce,re=(ce=class{static group(t){return new $v(t)}static addTab(t,r,o,n,i){return new Fe(ce.ADD_TAB,{json:t,toNode:r,location:o.getName(),index:n,select:i})}static addNode(t,r,o,n,i){return this.addTab(t,r,o,n,i)}static moveNode(t,r,o,n,i){return new Fe(ce.MOVE_NODE,{fromNode:t,toNode:r,location:o.getName(),index:n,select:i})}static deleteTab(t){return new Fe(ce.DELETE_TAB,{node:t})}static deleteTabset(t){return new Fe(ce.DELETE_TABSET,{node:t})}static renameTab(t,r){return new Fe(ce.RENAME_TAB,{node:t,text:r})}static setTabPinned(t,r){return new Fe(ce.SET_TAB_PINNED,{node:t,pinned:r})}static setBorderType(t,r){return new Fe(ce.SET_BORDER_TYPE,{node:t,borderType:r})}static selectTab(t){return new Fe(ce.SELECT_TAB,{tabNode:t})}static setActiveTabset(t,r){return new Fe(ce.SET_ACTIVE_TABSET,{tabsetNode:t,layoutId:r})}static adjustWeights(t,r){return new Fe(ce.ADJUST_WEIGHTS,{nodeId:t,weights:r})}static adjustBorderSplit(t,r){return new Fe(ce.ADJUST_BORDER_SPLIT,{node:t,size:r})}static maximizeToggle(t,r){return new Fe(ce.MAXIMIZE_TOGGLE,{node:t,layoutId:r})}static updateModelAttributes(t){return new Fe(ce.UPDATE_MODEL_ATTRIBUTES,{json:t})}static updateNodeAttributes(t,r){return new Fe(ce.UPDATE_NODE_ATTRIBUTES,{node:t,json:r})}static updateSubLayoutAttributes(t,r){return new Fe(ce.UPDATE_SUBLAYOUT_ATTRIBUTES,{layoutId:t,json:r})}static popoutTab(t,r="window"){return new Fe(ce.POPOUT_TAB,{node:t,type:r})}static popoutTabset(t,r="window"){return new Fe(ce.POPOUT_TABSET,{node:t,type:r})}static closePopout(t){return new Fe(ce.CLOSE_POPOUT,{layoutId:t})}static movePopoutToFront(t){return new Fe(ce.MOVE_POPOUT_TO_FRONT,{layoutId:t})}static moveFloat(t,r){return new Fe(ce.MOVE_FLOAT,{layoutId:t,rect:r})}static popoutFloat(t,r){return new Fe(ce.POPOUT_FLOAT,{layoutId:t,rect:r})}static dockFloatToLayout(t,r,o,n){return new Fe(ce.DOCK_FLOAT_TO_LAYOUT,{layoutId:t,toNode:r,location:o.getName(),index:n})}static createPopout(t,r,o){return this.createSubLayout(t,r,o)}static createSubLayout(t,r,o){return new Fe(ce.CREATE_SUBLAYOUT,{layout:t,rect:r,type:o})}},I(ce,"ADD_TAB","FlexLayout_AddTab"),I(ce,"DELETE_TAB","FlexLayout_DeleteTab"),I(ce,"RENAME_TAB","FlexLayout_RenameTab"),I(ce,"SET_TAB_PINNED","FlexLayout_SetTabPinned"),I(ce,"SET_BORDER_TYPE","FlexLayout_SetBorderType"),I(ce,"SELECT_TAB","FlexLayout_SelectTab"),I(ce,"MOVE_NODE","FlexLayout_MoveNode"),I(ce,"DELETE_TABSET","FlexLayout_DeleteTabset"),I(ce,"SET_ACTIVE_TABSET","FlexLayout_SetActiveTabset"),I(ce,"ADJUST_WEIGHTS","FlexLayout_AdjustWeights"),I(ce,"ADJUST_BORDER_SPLIT","FlexLayout_AdjustBorderSplit"),I(ce,"MAXIMIZE_TOGGLE","FlexLayout_MaximizeToggle"),I(ce,"UPDATE_MODEL_ATTRIBUTES","FlexLayout_UpdateModelAttributes"),I(ce,"UPDATE_NODE_ATTRIBUTES","FlexLayout_UpdateNodeAttributes"),I(ce,"UPDATE_SUBLAYOUT_ATTRIBUTES","FlexLayout_UpdateSubLayoutAttributes"),I(ce,"POPOUT_TAB","FlexLayout_PopoutTab"),I(ce,"POPOUT_TABSET","FlexLayout_PopoutTabset"),I(ce,"CLOSE_POPOUT","FlexLayout_ClosePopout"),I(ce,"MOVE_POPOUT_TO_FRONT","FlexLayout_MoveFloatToFront"),I(ce,"MOVE_FLOAT","FlexLayout_MoveFloat"),I(ce,"DOCK_FLOAT_TO_LAYOUT","FlexLayout_DockFloatToLayout"),I(ce,"POPOUT_FLOAT","FlexLayout_PopoutFloat"),I(ce,"CREATE_SUBLAYOUT","FlexLayout_CreateSubLayout"),I(ce,"GROUP","FlexLayout_Group"),ce),Fe=class{constructor(e,t){I(this,"type");I(this,"data");I(this,"adjusting");this.type=e,this.data=t,this.adjusting=!1}setAdjusting(e){return this.adjusting=e,this}isAdjusting(){return this.adjusting}toJSON(){return{type:this.type,data:this.data}}},$v=class extends Fe{constructor(t){super(re.GROUP,t);I(this,"actions");this.actions=t}},Rt=class{constructor(e,t,r,o,n){I(this,"node");I(this,"rect");I(this,"location");I(this,"index");I(this,"className");this.node=e,this.rect=t,this.location=r,this.index=o,this.className=n}},U=function(e){return e.FLEXLAYOUT__BORDER="flexlayout__border",e.FLEXLAYOUT__BORDER_="flexlayout__border_",e.FLEXLAYOUT__BORDER_TAB_CONTENTS="flexlayout__border_tab_contents",e.FLEXLAYOUT__BORDER_TAB_OVERLAY="flexlayout__border_tab_overlay",e.FLEXLAYOUT__BORDER_TAB_OVERLAY_="flexlayout__border_tab_overlay_",e.FLEXLAYOUT__BORDER_BUTTON="flexlayout__border_button",e.FLEXLAYOUT__BORDER_BUTTON_="flexlayout__border_button_",e.FLEXLAYOUT__BORDER_BUTTON_CONTENT="flexlayout__border_button_content",e.FLEXLAYOUT__BORDER_BUTTON_LEADING="flexlayout__border_button_leading",e.FLEXLAYOUT__BORDER_BUTTON_TRAILING="flexlayout__border_button_trailing",e.FLEXLAYOUT__BORDER_BUTTON__SELECTED="flexlayout__border_button--selected",e.FLEXLAYOUT__BORDER_BUTTON__UNSELECTED="flexlayout__border_button--unselected",e.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON_OVERFLOW="flexlayout__border_toolbar_button_overflow",e.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON_OVERFLOW_="flexlayout__border_toolbar_button_overflow_",e.FLEXLAYOUT__BORDER_INNER="flexlayout__border_inner",e.FLEXLAYOUT__BORDER_INNER_="flexlayout__border_inner_",e.FLEXLAYOUT__BORDER_INNER_TAB_CONTAINER="flexlayout__border_inner_tab_container",e.FLEXLAYOUT__BORDER_INNER_TAB_CONTAINER_="flexlayout__border_inner_tab_container_",e.FLEXLAYOUT__BORDER_INNER_TAB_CONTAINER_LEFT_DOWN="flexlayout__border_inner_tab_container_left_down",e.FLEXLAYOUT__BORDER_TAB_DIVIDER="flexlayout__border_tab_divider",e.FLEXLAYOUT__BORDER_LEADING="flexlayout__border_leading",e.FLEXLAYOUT__BORDER_SIZER="flexlayout__border_sizer",e.FLEXLAYOUT__BORDER_TOOLBAR="flexlayout__border_toolbar",e.FLEXLAYOUT__BORDER_TOOLBAR_="flexlayout__border_toolbar_",e.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON="flexlayout__border_toolbar_button",e.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON_FLOAT="flexlayout__border_toolbar_button-float",e.FLEXLAYOUT__DRAG_RECT="flexlayout__drag_rect",e.FLEXLAYOUT__EDGE_RECT="flexlayout__edge_rect",e.FLEXLAYOUT__EDGE_RECT_TOP="flexlayout__edge_rect_top",e.FLEXLAYOUT__EDGE_RECT_LEFT="flexlayout__edge_rect_left",e.FLEXLAYOUT__EDGE_RECT_BOTTOM="flexlayout__edge_rect_bottom",e.FLEXLAYOUT__EDGE_RECT_RIGHT="flexlayout__edge_rect_right",e.FLEXLAYOUT__ERROR_BOUNDARY_CONTAINER="flexlayout__error_boundary_container",e.FLEXLAYOUT__ERROR_BOUNDARY_CONTENT="flexlayout__error_boundary_content",e.FLEXLAYOUT__FLOAT_WINDOW="flexlayout__float_window",e.FLEXLAYOUT__FLOAT_WINDOW_HEADER="flexlayout__float_window_header",e.FLEXLAYOUT__FLOAT_WINDOW_HEADER_TITLE="flexlayout__float_window_header_title",e.FLEXLAYOUT__FLOAT_WINDOW_CONTENT="flexlayout__float_window_content",e.FLEXLAYOUT__FLOAT_WINDOW_DRAG_HANDLE="flexlayout__float_window_drag_handle",e.FLEXLAYOUT__FLOAT_WINDOW_BUTTON="flexlayout__float_window_button",e.FLEXLAYOUT__FLOATING_WINDOW_CONTENT="flexlayout__floating_window_content",e.FLEXLAYOUT__LAYOUT="flexlayout__layout",e.FLEXLAYOUT__LAYOUT_METRICS="flexlayout__layout_metrics",e.FLEXLAYOUT__LAYOUT_MOVEABLES_HOME="flexlayout__layout_moveables_home",e.FLEXLAYOUT__LAYOUT_OVERLAY="flexlayout__layout_overlay",e.FLEXLAYOUT__LAYOUT_TAB_STAMPS="flexlayout__layout_tab_stamps",e.FLEXLAYOUT__LAYOUT_MAIN="flexlayout__layout_main",e.FLEXLAYOUT__LAYOUT_BORDER_CONTAINER="flexlayout__layout_border_container",e.FLEXLAYOUT__LAYOUT_BORDER_CONTAINER_INNER="flexlayout__layout_border_container_inner",e.FLEXLAYOUT__OUTLINE_RECT="flexlayout__outline_rect",e.FLEXLAYOUT__OUTLINE_RECT_EDGE="flexlayout__outline_rect_edge",e.FLEXLAYOUT__SPLITTER="flexlayout__splitter",e.FLEXLAYOUT__SPLITTER_="flexlayout__splitter_",e.FLEXLAYOUT__SPLITTER_BORDER="flexlayout__splitter_border",e.FLEXLAYOUT__SPLITTER_DRAG="flexlayout__splitter_drag",e.FLEXLAYOUT__SPLITTER_HANDLE="flexlayout__splitter_handle",e.FLEXLAYOUT__SPLITTER_HANDLE_HORZ="flexlayout__splitter_handle_horz",e.FLEXLAYOUT__SPLITTER_HANDLE_VERT="flexlayout__splitter_handle_vert",e.FLEXLAYOUT__ROW="flexlayout__row",e.FLEXLAYOUT__TAB="flexlayout__tab",e.FLEXLAYOUT__TAB_MOVEABLE="flexlayout__tab_moveable",e.FLEXLAYOUT__TAB_OVERLAY="flexlayout__tab_overlay",e.FLEXLAYOUT__TAB_OVERLAY_RAISED="flexlayout__tab_overlay_raised",e.FLEXLAYOUT__TAB_LAYOUT_CONTAINER="flexlayout__tab_layout_container",e.FLEXLAYOUT__TAB_LAYOUT_CONTAINER_USER="flexlayout__tab_layout_container_user",e.FLEXLAYOUT__TABSET="flexlayout__tabset",e.FLEXLAYOUT__TABSET_CONTAINER="flexlayout__tabset_container",e.FLEXLAYOUT__TABSET_MAXIMIZED="flexlayout__tabset-maximized",e.FLEXLAYOUT__TABSET_SELECTED="flexlayout__tabset-selected",e.FLEXLAYOUT__TABSET_TAB_SPACER="flexlayout__tabset_tab_spacer",e.FLEXLAYOUT__TABSET_TAB_DIVIDER="flexlayout__tabset_tab_divider",e.FLEXLAYOUT__TABSET_TAB_DIVIDER_SELECTED_BEFORE="flexlayout__tabset_tab_divider_selected_before",e.FLEXLAYOUT__TABSET_TAB_DIVIDER_SELECTED_AFTER="flexlayout__tabset_tab_divider_selected_after",e.FLEXLAYOUT__TABSET_TAB_DIVIDER_INNER="flexlayout__tabset_tab_divider_inner",e.FLEXLAYOUT__TABSET_CONTENT="flexlayout__tabset_content",e.FLEXLAYOUT__TABSET_TABBAR_INNER="flexlayout__tabset_tabbar_inner",e.FLEXLAYOUT__TABSET_TABBAR_INNER_="flexlayout__tabset_tabbar_inner_",e.FLEXLAYOUT__TABSET_LEADING="flexlayout__tabset_leading",e.FLEXLAYOUT__TABSET_TABBAR_INNER_TAB_CONTAINER="flexlayout__tabset_tabbar_inner_tab_container",e.FLEXLAYOUT__TABSET_TABBAR_INNER_TAB_CONTAINER_="flexlayout__tabset_tabbar_inner_tab_container_",e.FLEXLAYOUT__TABSET_TABBAR_OUTER="flexlayout__tabset_tabbar_outer",e.FLEXLAYOUT__TABSET_TABBAR_OUTER_="flexlayout__tabset_tabbar_outer_",e.FLEXLAYOUT__TAB_BORDER="flexlayout__tab_border",e.FLEXLAYOUT__TAB_BORDER_="flexlayout__tab_border_",e.FLEXLAYOUT__TAB_BORDER_OVERLAY="flexlayout__tab_border_overlay",e.FLEXLAYOUT__TAB_BUTTON="flexlayout__tab_button",e.FLEXLAYOUT__TAB_BUTTON_STRETCH="flexlayout__tab_button_stretch",e.FLEXLAYOUT__TAB_BUTTON_CONTENT="flexlayout__tab_button_content",e.FLEXLAYOUT__TAB_BUTTON_LEADING="flexlayout__tab_button_leading",e.FLEXLAYOUT__TAB_BUTTON_OVERFLOW="flexlayout__tab_button_overflow",e.FLEXLAYOUT__TAB_BUTTON_PIN="flexlayout__tab_button_pin",e.FLEXLAYOUT__TAB_BUTTON_OVERFLOW_COUNT="flexlayout__tab_button_overflow_count",e.FLEXLAYOUT__TAB_BUTTON_TEXTBOX="flexlayout__tab_button_textbox",e.FLEXLAYOUT__TAB_BUTTON_TRAILING="flexlayout__tab_button_trailing",e.FLEXLAYOUT__TAB_BUTTON_STAMP="flexlayout__tab_button_stamp",e.FLEXLAYOUT__TAB_TOOLBAR="flexlayout__tab_toolbar",e.FLEXLAYOUT__TAB_TOOLBAR_BUTTON="flexlayout__tab_toolbar_button",e.FLEXLAYOUT__TAB_TOOLBAR_ICON="flexlayout__tab_toolbar_icon",e.FLEXLAYOUT__TAB_TOOLBAR_BUTTON_="flexlayout__tab_toolbar_button-",e.FLEXLAYOUT__TAB_TOOLBAR_BUTTON_FLOAT="flexlayout__tab_toolbar_button-float",e.FLEXLAYOUT__TAB_TOOLBAR_STICKY_BUTTONS_CONTAINER="flexlayout__tab_toolbar_sticky_buttons_container",e.FLEXLAYOUT__TAB_TOOLBAR_BUTTON_CLOSE="flexlayout__tab_toolbar_button-close",e.FLEXLAYOUT__POPUP_MENU_CONTAINER="flexlayout__popup_menu_container",e.FLEXLAYOUT__POPUP_MENU_ITEM="flexlayout__popup_menu_item",e.FLEXLAYOUT__POPUP_MENU_ITEM__SELECTED="flexlayout__popup_menu_item--selected",e.FLEXLAYOUT__POPUP_MENU_ITEM__DISABLED="flexlayout__popup_menu_item--disabled",e.FLEXLAYOUT__POPUP_MENU_DIVIDER="flexlayout__popup_menu_divider",e.FLEXLAYOUT__POPUP_MENU="flexlayout__popup_menu",e.FLEXLAYOUT__MINI_SCROLLBAR="flexlayout__mini_scrollbar",e.FLEXLAYOUT__MINI_SCROLLBAR_CONTAINER="flexlayout__mini_scrollbar_container",e}({}),Gs=class{constructor(e){I(this,"model");I(this,"attributes");I(this,"parent");I(this,"children");I(this,"rect");I(this,"path");I(this,"listeners");this.model=e,this.attributes={},this.children=[],this.rect=ge.empty(),this.listeners=new Map,this.path=""}getId(){let e=this.attributes.id;return e!==void 0||(e=this.model.nextUniqueId(),this.setId(e)),e}getModel(){return this.model}getType(){return this.attributes.type}getParent(){return this.parent}getChildren(){return this.children}getRect(){return this.rect}getPath(){return this.path}isCloseable(){for(let e=0;er.some(a=>a.toLowerCase()===i);return e.key.toLowerCase()===o.toLowerCase()&&e.ctrlKey===n("ctrl")&&e.shiftKey===n("shift")&&e.altKey===n("alt")&&e.metaKey===n("meta")}function ga(e){return e.ctrlKey||e.shiftKey||e.altKey||e.metaKey}function r1(e){return{...t1,...e}}function Co(e){return e?.replace(/\bctrl\b/i,"Control")}function Gv(e){e&&(e.querySelector('a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])')??e).focus()}function ba(e){let t=!1;return e.nativeEvent instanceof MouseEvent&&(e.nativeEvent.button!==0||e.ctrlKey||e.altKey||e.metaKey||e.shiftKey)&&(t=!0),t}function Tl(e,t){const r=[...yh("iframe",t),...yh("webview",t)];for(const o of r)o.style.pointerEvents=e?"auto":"none"}function yh(e,t){return[...t.getElementsByTagName(e)]}var Rl=!1;function ls(e,t,r,o,n){Rl=!0,t.preventDefault();const i=u=>{u.preventDefault(),r(u.clientX,u.clientY)},a=()=>{e.removeEventListener("pointermove",i),e.removeEventListener("pointerup",c),e.removeEventListener("pointercancel",l)},l=u=>{u.preventDefault(),a(),Rl=!1,n()},c=()=>{a(),Rl=!1,o()};e.addEventListener("pointermove",i),e.addEventListener("pointerup",c),e.addEventListener("pointercancel",l)}function Kv(e){let t;return e.getController().getModel().visitNodes(r=>{r instanceof Le&&r.getSubLayoutId()===e.getLayoutId()&&(t=r.getLayout())}),t}function qv(e,t){const r=t.getType();if(r==="window")return e.isAllowedInWindow();if(r==="float")return!0;if(r==="tab"){const o=Kv(t);return!(o&&o.getType()==="window"&&!o.isMainLayout()&&!e.isAllowedInWindow()||Jv(e))}return!1}function Jv(e){return e instanceof Le?e.getSubLayoutId()!==void 0:e.getChildren().some(t=>Jv(t))}function _h(e,t){const r=e.getAttribute("style");return r===t.getAttribute("style")?!1:(r?t.setAttribute("style",r):t.removeAttribute("style"),!0)}function o1(){const e=navigator.userAgent;return e.includes("Safari")&&!e.includes("Chrome")&&!e.includes("Chromium")}function n1(e=window){const t=e.document;return{scrollTop:e.pageYOffset||t.documentElement.scrollTop||t.body.scrollTop||0,scrollLeft:e.pageXOffset||t.documentElement.scrollLeft||t.body.scrollLeft||0,fullHeight:Math.max(t.body.scrollHeight,t.documentElement.scrollHeight,t.body.offsetHeight,t.documentElement.offsetHeight,t.body.clientHeight,t.documentElement.clientHeight),fullWidth:Math.max(t.body.scrollWidth,t.documentElement.scrollWidth,t.body.offsetWidth,t.documentElement.offsetWidth,t.body.clientWidth,t.documentElement.clientWidth),viewportHeight:e.innerHeight||t.documentElement.clientHeight,viewportWidth:e.innerWidth||t.documentElement.clientWidth}}var Ie,Ue=(Ie=class extends Gs{constructor(r,o){super(r);I(this,"layout");I(this,"minHeight");I(this,"minWidth");I(this,"maxHeight");I(this,"maxWidth");this.minHeight=1,this.minWidth=1,this.maxHeight=Yr,this.maxWidth=Yr,Ie.attributeDefinitions.fromJson(o,this.attributes),r.addNode(this)}static fromJson(r,o,n){const i=new Ie(o,r);if(r.children!=null){for(const a of r.children)if(a.type===Ne.TYPE){const l=Ne.fromJson(a,o,n);i.addChild(l)}else if(a.type===Ie.TYPE){const l=Ie.fromJson(a,o,n);i.addChild(l)}}return i}getWeight(){return this.attributes.weight}toJson(){const r={};Ie.attributeDefinitions.toJson(r,this.attributes),r.children=[];for(const o of this.children)r.children.push(o.toJson());return r}getLayout(){return this.layout?this.layout:super.getLayout()}setLayout(r){this.layout=r}setWeight(r){this.attributes.weight=r}getSplitterBounds(r){const o=this.getOrientation()===_e.HORZ,n=this.getChildren(),i=this.model.getSplitterSize(),a=n[0].getRect(),l=n[n.length-1].getRect();let c=o?[a.x,l.getRight()]:[a.y,l.getBottom()];const u=o?[a.x,l.getRight()]:[a.y,l.getBottom()];for(let d=0;d0&&(c[0]+=i,u[0]+=i)}for(let d=n.length-1;d>=r;d--){const f=n[d];c[1]-=(o?f.getMinWidth():f.getMinHeight())+i,u[1]-=(o?Math.max(f.getMinWidth(),f.getMaxWidth()):Math.max(f.getMinHeight(),f.getMaxHeight()))+i}return c=[Math.max(u[1],c[0]),Math.min(u[0],c[1])],c[0]>c[1]&&(c=[c[0],c[0]]),c}getSplitterInitials(r){const o=this.getOrientation()===_e.HORZ,n=this.getChildren(),i=this.model.getSplitterSize(),a=[];let l=0;for(let d=0;df?(g=u[r]+p-f,u[r]=f):u[r]+=p;for(let x=r-1;x>=0;x--){const w=c[x],k=l?w.getMinWidth():w.getMinHeight();if(u[x]-p>k){u[x]-=p;break}else p-=u[x]-k,u[x]=k}for(let x=r+1;xf?(g=u[r-1]+p-f,u[r-1]=f):u[r-1]+=p;for(let x=r;xk){u[x]-=p;break}else p-=u[x]-k,u[x]=k}for(let x=r-1;x>=0;x--){const w=c[x],k=l?w.getMaxWidth():w.getMaxHeight();if(u[x]+gMath.max(.1,d)*100/i)}getMinWidth(){return this.minWidth}getMinHeight(){return this.minHeight}getMaxWidth(){return this.maxWidth}getMaxHeight(){return this.maxHeight}calcMinMaxSize(){this.minHeight=1,this.minWidth=1,this.maxHeight=Yr,this.maxWidth=Yr;let r=!0;for(const o of this.children){const n=o;n.calcMinMaxSize();const i=Math.max(n.getMinHeight(),n.getMaxHeight()),a=Math.max(n.getMinWidth(),n.getMaxWidth());this.getOrientation()===_e.VERT?(this.minHeight+=n.getMinHeight(),this.maxHeight+=i,r||(this.minHeight+=this.model.getSplitterSize(),this.maxHeight+=this.model.getSplitterSize()),this.minWidth=Math.max(this.minWidth,n.getMinWidth()),this.maxWidth=Math.min(this.maxWidth,a)):(this.minWidth+=n.getMinWidth(),this.maxWidth+=a,r||(this.minWidth+=this.model.getSplitterSize(),this.maxWidth+=this.model.getSplitterSize()),this.minHeight=Math.max(this.minHeight,n.getMinHeight()),this.maxHeight=Math.min(this.maxHeight,i)),r=!1}this.maxWidth=Math.max(this.maxWidth,this.minWidth),this.maxHeight=Math.max(this.maxHeight,this.minHeight)}tidy(){let r=0;for(;ru/2-f&&athis.rect.getRight()-d&&a>u/2-f&&ac/2-f&&lthis.rect.getBottom()-d&&l>c/2-f&&ld+f.getWeight(),0);c===0&&(c=100),l.setWeight(c/3);const u=!this.model.isRootOrientationVertical();if(i===ee.CENTER)n===-1?this.addChild(l,this.children.length):this.addChild(l,n);else if(u&&i===ee.LEFT||!u&&i===ee.TOP)this.addChild(l,0);else if(u&&i===ee.RIGHT||!u&&i===ee.BOTTOM)this.addChild(l);else if(u&&i===ee.TOP||!u&&i===ee.LEFT){const d=new Ie(this.model,{}),f=new Ie(this.model,{});f.setWeight(75),l.setWeight(25);for(const p of this.children)f.addChild(p);this.removeAll(),d.addChild(l),d.addChild(f),this.addChild(d)}else if(u&&i===ee.BOTTOM||!u&&i===ee.RIGHT){const d=new Ie(this.model,{}),f=new Ie(this.model,{});f.setWeight(75),l.setWeight(25);for(const p of this.children)f.addChild(p);this.removeAll(),d.addChild(f),d.addChild(l),this.addChild(d)}l instanceof Ne&&this.model.setActiveTabset(l,this.getLayoutId()),this.model.tidy()}isEnableDrop(){return!0}getAttributeDefinitions(){return Ie.attributeDefinitions}updateAttrs(r){Ie.attributeDefinitions.update(r,this.attributes)}static getAttributeDefinitions(){return lt.ensureAttributePairing(),Ie.attributeDefinitions}static createAttributeDefinitions(){const r=new pi;return r.add("type",Ie.TYPE,!0).setType(te.STRING).setFixed(),r.add("id",void 0).setType(te.STRING).setDescription("the unique id of the row, if left undefined a uuid will be assigned"),r.add("weight",100).setType(te.NUMBER).setDescription("relative weight for sizing of this row in parent row"),r}},I(Ie,"TYPE","row"),I(Ie,"attributeDefinitions",Ie.createAttributeDefinitions()),Ie),vt,Ne=(vt=class extends Gs{constructor(r,o){super(r);I(this,"tabStripRect",ge.empty());I(this,"contentRect",ge.empty());I(this,"calculatedMinHeight");I(this,"calculatedMinWidth");I(this,"calculatedMaxHeight");I(this,"calculatedMaxWidth");this.calculatedMinHeight=0,this.calculatedMinWidth=0,this.calculatedMaxHeight=0,this.calculatedMaxWidth=0,vt.attributeDefinitions.fromJson(o,this.attributes),r.addNode(this)}static fromJson(r,o,n){const i=new vt(o,r);if(r.children!=null)for(const a of r.children){const l=Le.fromJson(a,o);i.addChild(l)}return i.children.length===0?i.setSelected(-1):i.getSelected()>=i.children.length&&i.setSelected(i.children.length-1),r.maximized&&r.maximized===!0&&n.setMaximizedTabSet(i),r.active&&r.active===!0&&n.setActiveTabSet(i),i}getName(){return this.getAttr("name")}isEnableActiveIcon(){return this.getAttr("enableActiveIcon")}getSelected(){const r=this.attributes.selected;return r!==void 0?r:-1}getSelectedNode(){const r=this.getSelected();if(r!==-1)return this.children[r]}getPinnedRunLength(){let r=0;for(const o of this.children)if(o.isPinned())r++;else break;return r}getWeight(){return this.getAttr("weight")}getAttrMinWidth(){return this.getAttr("minWidth")}getAttrMinHeight(){return this.getAttr("minHeight")}getMinWidth(){return this.calculatedMinWidth}getMinHeight(){return this.calculatedMinHeight}getAttrMaxWidth(){return this.getAttr("maxWidth")}getAttrMaxHeight(){return this.getAttr("maxHeight")}getMaxWidth(){return this.calculatedMaxWidth}getMaxHeight(){return this.calculatedMaxHeight}isCloseable(){let r=this.isEnableClose();return r&&(r=super.isCloseable()),r}getConfig(){return this.attributes.config}isMaximized(){return this.model.getMaximizedTabset(this.getLayoutId())===this}isActive(){return this.model.getActiveTabset(this.getLayoutId())===this}isEnableDeleteWhenEmpty(){return this.getAttr("enableDeleteWhenEmpty")}isEnableDrop(){return this.getAttr("enableDrop")}isEnableTabStrip(){return this.getAttr("enableTabStrip")}isEnableTabWrap(){return this.getAttr("enableTabWrap")}isEnableDrag(){return this.getAttr("enableDrag")}isEnableDivide(){return this.getAttr("enableDivide")}isEnableMaximize(){return this.getAttr("enableMaximize")}isEnableClose(){return this.getAttr("enableClose")}isEnableCloseButton(){return this.getAttr("enableCloseButton")}isEnableSingleTabStretch(){return this.getAttr("enableSingleTabStretch")}isAutoSelectTab(){return this.getAttr("autoSelectTab")}isEnableTabScrollbar(){return this.getAttr("enableTabScrollbar")}getClassNameTabStrip(){return this.getAttr("classNameTabStrip")}getTabLocation(){return this.getAttr("tabLocation")}toJson(){const r={};return vt.attributeDefinitions.toJson(r,this.attributes),r.children=this.children.map(o=>o.toJson()),this.isActive()&&(r.active=!0),this.isMaximized()&&(r.maximized=!0),r}calcMinMaxSize(){this.calculatedMinHeight=this.getAttrMinHeight(),this.calculatedMinWidth=this.getAttrMinWidth(),this.calculatedMaxHeight=this.getAttrMaxHeight(),this.calculatedMaxWidth=this.getAttrMaxWidth();for(const r of this.children){const o=r;this.calculatedMinWidth=Math.max(this.calculatedMinWidth,o.getMinWidth()),this.calculatedMinHeight=Math.max(this.calculatedMinHeight,o.getMinHeight()),this.calculatedMaxWidth=Math.min(this.calculatedMaxWidth,o.getMaxWidth()),this.calculatedMaxHeight=Math.min(this.calculatedMaxHeight,o.getMaxHeight())}this.calculatedMinHeight+=this.tabStripRect.height,this.calculatedMaxHeight+=this.tabStripRect.height,this.calculatedMaxWidth=Math.max(this.calculatedMaxWidth,this.calculatedMinWidth),this.calculatedMaxHeight=Math.max(this.calculatedMaxHeight,this.calculatedMinHeight)}canMaximize(){return this.isEnableMaximize()?this.getModel().getMaximizedTabset(this.getLayoutId())===this?!0:!(this.getParent()===this.getModel().getRootRow(this.getLayoutId())&&this.getModel().getRootRow(this.getLayoutId()).getChildren().length===1):!1}setContentRect(r){this.contentRect=r}getContentRect(){return this.contentRect}setTabStripRect(r){this.tabStripRect=r}getTabStripRect(){return this.tabStripRect}setWeight(r){this.attributes.weight=r}setSelected(r){this.attributes.selected=r}canDrop(r,o,n,i=!1){let a;const l=this.getLayout();if(r===this){const c=ee.CENTER,u=this.tabStripRect;a=new Rt(this,u,c,-1,U.FLEXLAYOUT__OUTLINE_RECT)}else{if(this.getLayoutId()!==lt.MAIN_LAYOUT_ID&&!qv(r,l))return;if(this.contentRect.contains(o,n)){let c=ee.CENTER;if(this.model.getMaximizedTabset(this.getLayoutId())===void 0){const d=!i&&this.isEnableDrop(),f=this.isEnableDivide();if(!d&&!f)return;d&&f?c=ee.getLocation(this.contentRect,o,n):d?c=ee.CENTER:c=ee.getLocation(this.contentRect,o,n,!0)}const u=c.getDockRect(this.rect);a=new Rt(this,u,c,-1,U.FLEXLAYOUT__OUTLINE_RECT)}else if(this.tabStripRect!=null&&this.tabStripRect.contains(o,n)){let c,u,d;if(this.children.length===0)c=this.tabStripRect.clone(),u=c.y+3,d=c.height-4,c.width=2;else{let f=this.children[0];c=f.getTabRect(),u=c.y,d=c.height;let p=this.tabStripRect.x;for(let g=0;g0){const c=this.getPinnedRunLength(),u=r instanceof Le&&r.isPinned()?Math.min(a.index,c):Math.max(a.index,c);if(u!==a.index){let d;if(u0&&n--,a===ee.CENTER){let u=n;u===-1&&(u=this.children.length);const d=this.getPinnedRunLength();if(r instanceof Le?u=r.isPinned()?Math.min(u,d):Math.max(u,d):u=Math.max(u,d),r instanceof Le)this.addChild(r,u),i||i!==!1&&this.isAutoSelectTab()?this.setSelected(u):Sl(this,u);else if(r instanceof Ue){const f=u;r.forEachNode((p,g)=>{p instanceof Le&&(this.addChild(p,u),u++)},0),Sl(this,f,u-f)}else{const f=u;for(let p=0;p0&&this.setSelected(0)}this.model.setActiveTabset(this,this.parent.getLayoutId())}else{let u=r;if(r instanceof Le){const p=this.model.getOnCreateTabSet();u=new vt(this.model,p?p(r):{}),u.addChild(r)}else if(r instanceof Ue){const p=this.getParent();if(r.getOrientation()===p.getOrientation()&&(o.getOrientation()===p.getOrientation()||o===ee.CENTER)){const g=new Ue(this.model,{});g.addChild(r),u=g}}else u=r;const d=this.parent,f=d.getChildren().indexOf(this);if(d.getOrientation()===a.orientation)u.setWeight(this.getWeight()/2),this.setWeight(this.getWeight()/2),d.addChild(u,f+a.indexPlus);else{const p=new Ue(this.model,{});if(p.setWeight(this.getWeight()),p.addChild(this),this.setWeight(50),r instanceof Ue&&r.getChildren().length>0&&r.getOrientation()!==d.getOrientation()){const g=r.getChildren(),x=g.reduce((k,b)=>k+b.getWeight(),0);let w=a.indexPlus;for(const k of g)k.setWeight(x===0?50/g.length:50*k.getWeight()/x),p.addChild(k,w++)}else u.setWeight(50),p.addChild(u,a.indexPlus);d.removeChild(this),d.addChild(p,f)}u instanceof vt&&this.model.setActiveTabset(u,this.getLayoutId())}this.model.tidy()}updateAttrs(r){vt.attributeDefinitions.update(r,this.attributes)}getAttributeDefinitions(){return vt.attributeDefinitions}static getAttributeDefinitions(){return lt.ensureAttributePairing(),vt.attributeDefinitions}static createAttributeDefinitions(){const r=new pi;return r.add("type",vt.TYPE,!0).setType(te.STRING).setFixed(),r.add("id",void 0).setType(te.STRING).setDescription("the unique id of the tab set, if left undefined a uuid will be assigned"),r.add("weight",100).setType(te.NUMBER).setDescription("relative weight for sizing of this tabset in parent row"),r.add("selected",0).setType(te.NUMBER).setDescription("index of selected/visible tab in tabset; -1 means no tab selected"),r.add("name",void 0).setType(te.STRING).setDescription("an accessible label for the tab strip (used as the tablist's aria-label; not displayed visually)"),r.add("config",void 0).setType("any").setDescription("a place to hold json config used in your own code"),r.addInherited("enableDeleteWhenEmpty","tabSetEnableDeleteWhenEmpty").setDescription("whether to delete this tabset when it has no tabs"),r.addInherited("enableDrop","tabSetEnableDrop").setDescription("whether tabs can be dropped into this tabset"),r.addInherited("enableDrag","tabSetEnableDrag").setDescription("whether the user can drag tabs out of this tabset"),r.addInherited("enableDivide","tabSetEnableDivide").setDescription("whether dropping on an edge of this tabset splits it to create a new tabset"),r.addInherited("enableMaximize","tabSetEnableMaximize").setDescription("whether the tabset can be maximized to fill the layout via the maximize button"),r.addInherited("enableClose","tabSetEnableClose").setDescription("whether this tabset can be closed"),r.addInherited("enableCloseButton","tabSetEnableCloseButton").setDescription("if the tabset can be closed then show a close button"),r.addInherited("enableSingleTabStretch","tabSetEnableSingleTabStretch").setDescription("if the tabset has only a single tab then stretch the single tab to fill area and display in a header style"),r.addInherited("classNameTabStrip","tabSetClassNameTabStrip").setDescription("a class name to apply to the tab strip"),r.addInherited("enableTabStrip","tabSetEnableTabStrip").setDescription("when enabled the tabset shows a tab strip and can host multiple tabs; when disabled the strip is hidden"),r.addInherited("minWidth","tabSetMinWidth").setDescription("minimum width (in px) for this tabset"),r.addInherited("minHeight","tabSetMinHeight").setDescription("minimum height (in px) for this tabset"),r.addInherited("maxWidth","tabSetMaxWidth").setDescription("maximum width (in px) for this tabset"),r.addInherited("maxHeight","tabSetMaxHeight").setDescription("maximum height (in px) for this tabset"),r.addInherited("enableTabWrap","tabSetEnableTabWrap").setDescription("wrap tabs onto multiple lines"),r.addInherited("tabLocation","tabSetTabLocation").setDescription("the location of the tabs either top or bottom"),r.addInherited("autoSelectTab","tabSetAutoSelectTab").setDescription("whether to select new/moved tabs in tabset"),r.addInherited("enableActiveIcon","tabSetEnableActiveIcon").setDescription("whether the active icon (*) should be displayed when the tabset is active"),r.addInherited("enableTabScrollbar","tabSetEnableTabScrollbar").setDescription("whether to show a mini scrollbar for the tabs"),r}},I(vt,"TYPE","tabset"),I(vt,"attributeDefinitions",vt.createAttributeDefinitions()),vt);function Sl(e,t,r=1){const o=e.getSelected();r>0&&o!==-1&&t<=o&&e.setSelected(o+r)}function ss(e,t){if(e!==void 0&&(e instanceof Ne||e instanceof Ke)){const r=e.getSelected();r!==-1&&(t===r&&e.getChildren().length>0?t>=e.getChildren().length&&e.setSelected(e.getChildren().length-1):tr||e.setSelected(-1))}}function En(){return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,e=>(e^crypto.getRandomValues(new Uint8Array(1))[0]&15>>e/4).toString(16))}var kt,Ke=(kt=class extends Gs{constructor(r,o,n){super(n);I(this,"contentRect",ge.empty());I(this,"tabHeaderRect",ge.empty());I(this,"location");this.location=r,this.attributes.id=`border_${r.getName()}`,kt.attributeDefinitions.fromJson(o,this.attributes),n.addNode(this)}static fromJson(r,o){const n=ee.getByName(r.location),i=new kt(n,r,o);return r.children&&(i.children=r.children.map(a=>{const l=Le.fromJson(a,o);return l.setParent(i),l})),i.getSelected()>=i.children.length&&i.setSelected(i.children.length-1),i}getLocation(){return this.location}getClassName(){return this.getAttr("className")}isHorizontal(){return this.location.orientation===_e.HORZ}getSize(){const r=this.getAttr("size"),o=this.getSelected();if(o===-1)return r;{const n=this.children[o],i=this.isHorizontal()?n.getAttr("borderWidth"):n.getAttr("borderHeight");return i===-1?r:i}}getMinSize(){const r=this.getSelectedNode();let o=this.getAttr("minSize");if(r){const n=this.isHorizontal()?r.getMinWidth():r.getMinHeight();o=Math.max(o,n)}return o}getMaxSize(){const r=this.getSelectedNode();let o=this.getAttr("maxSize");if(r){const n=this.isHorizontal()?r.getMaxWidth():r.getMaxHeight();o=Math.min(o,n)}return o}getSelected(){return this.attributes.selected}isAutoHide(){return this.getAttr("enableAutoHide")}getBorderType(){return this.getAttr("borderType")}isOverlay(){return this.getAttr("borderType")==="overlay"}setBorderType(r){this.attributes.borderType=r}getSelectedNode(){if(this.getSelected()!==-1)return this.children[this.getSelected()]}getOrientation(){return this.location.getOrientation()}getConfig(){return this.attributes.config}isMaximized(){return!1}isShowing(){return this.attributes.show}toJson(){const r={location:"bottom"};return kt.attributeDefinitions.toJson(r,this.attributes),r.location=this.location.getName(),r.children=this.children.map(o=>o.toJson()),r}isAutoSelectTabWhenOpen(){return this.getAttr("autoSelectTabWhenOpen")}isAutoSelectTabWhenClosed(){return this.getAttr("autoSelectTabWhenClosed")}isAutoSelectTab(r){return r==null&&(r=this.getSelected()!==-1),r?this.isAutoSelectTabWhenOpen():this.isAutoSelectTabWhenClosed()}isEnableTabScrollbar(){return this.getAttr("enableTabScrollbar")}setSelected(r){this.attributes.selected=r}setTabHeaderRect(r){this.tabHeaderRect=r}getRect(){return this.tabHeaderRect}getContentRect(){return this.contentRect}setContentRect(r){this.contentRect=r}isEnableDrop(){return this.getAttr("enableDrop")}setSize(r){const o=this.getSelected();if(o===-1)this.attributes.size=r;else{const n=this.children[o];(this.isHorizontal()?n.getAttr("borderWidth"):n.getAttr("borderHeight"))===-1?this.attributes.size=r:this.isHorizontal()?n.setBorderWidth(r):n.setBorderHeight(r)}}updateAttrs(r){kt.attributeDefinitions.update(r,this.attributes)}remove(r){const o=this.removeChild(r);this.getSelected()!==-1&&ss(this,o)}canDrop(r,o,n,i=!1){if(!(r instanceof Le))return;let a;const l=ee.CENTER;if(this.tabHeaderRect.contains(o,n)){if(this.location.orientation===_e.VERT)if(this.children.length>0){let c=this.children[0],u=c.getTabRect();const d=u.y,f=u.height;let p=this.tabHeaderRect.x;for(let g=0;g=p&&o0){let c=this.children[0],u=c.getTabRect();const d=u.x,f=u.width;let p=this.tabHeaderRect.y;for(let g=0;g=p&&n0&&n--;let c=n;c===-1&&(c=this.children.length),this.addChild(r,c),i||i!==!1&&this.isAutoSelectTab()?this.setSelected(c):Sl(this,c),this.model.tidy()}getSplitterBounds(r=!1){const o=[0,0],n=this.model.getRootRow(lt.MAIN_LAYOUT_ID),i=n.getRect();if(i.width===0&&i.height===0)return o;const a=r?this.getMinSize():0,l=r?this.getMaxSize():99999,c=this.model.getSplitterSize();if(this.location===ee.TOP){o[0]=this.tabHeaderRect.getBottom()+a;const u=this.tabHeaderRect.getBottom()+l;o[1]=Math.max(o[0],i.getBottom()-n.getMinHeight()-c),o[1]=Math.min(o[1],u)}else if(this.location===ee.LEFT){o[0]=this.tabHeaderRect.getRight()+a;const u=this.tabHeaderRect.getRight()+l;o[1]=Math.max(o[0],i.getRight()-n.getMinWidth()-c),o[1]=Math.min(o[1],u)}else if(this.location===ee.BOTTOM){o[1]=this.tabHeaderRect.y-a-c;const u=this.tabHeaderRect.y-l-c;o[0]=Math.min(o[1],i.y+n.getMinHeight()),o[0]=Math.max(o[0],u)}else if(this.location===ee.RIGHT){o[1]=this.tabHeaderRect.x-a-c;const u=this.tabHeaderRect.x-l-c;o[0]=Math.min(o[1],i.x+n.getMinWidth()),o[0]=Math.max(o[0],u)}return o}calculateSplit(r,o){const n=this.getSplitterBounds();return this.location===ee.BOTTOM||this.location===ee.RIGHT?Math.max(0,n[1]-o):Math.max(0,o-n[0])}getAttributeDefinitions(){return kt.attributeDefinitions}static getAttributeDefinitions(){return lt.ensureAttributePairing(),kt.attributeDefinitions}static createAttributeDefinitions(){const r=new pi;return r.add("type",kt.TYPE,!0).setType(te.STRING).setFixed(),r.add("selected",-1).setType(te.NUMBER).setDescription("index of selected/visible tab in border; -1 means no tab selected"),r.add("borderType","split").setType(te.STRING).setValues(["split","overlay"]).setDescription(`the border display type: 'split' splits the main layout to make room when a tab is selected; 'overlay' shows the selected tab's panel as an overlay on top of the main layout area, and the tab is deselected by a pointer-down in the main layout area (Visual Studio style auto hide). Set via Actions.setBorderType. Not related to enableAutoHide (which hides the border strip when it has zero tabs)`),r.add("show",!0).setType(te.BOOLEAN).setDescription("show/hide this border"),r.add("config",void 0).setType("any").setDescription("a place to hold json config used in your own code"),r.addInherited("enableDrop","borderEnableDrop").setDescription("whether tabs can be dropped into this border"),r.addInherited("className","borderClassName").setDescription("class applied to the border container"),r.addInherited("autoSelectTabWhenOpen","borderAutoSelectTabWhenOpen").setDescription("whether to select new/moved tabs in border when the border is already open"),r.addInherited("autoSelectTabWhenClosed","borderAutoSelectTabWhenClosed").setDescription("whether to select new/moved tabs in border when the border is currently closed"),r.addInherited("size","borderSize").setDescription("size of the tab area when selected"),r.addInherited("minSize","borderMinSize").setDescription("the minimum size of the tab area"),r.addInherited("maxSize","borderMaxSize").setDescription("the maximum size of the tab area"),r.addInherited("enableAutoHide","borderEnableAutoHide").setDescription(`hide border if it has zero tabs; not related to the borderType 'overlay' mode (Visual Studio - style auto hide), see the borderType attribute`),r.addInherited("enableTabScrollbar","borderEnableTabScrollbar").setDescription("whether to show a mini scrollbar for the tabs"),r}},I(kt,"TYPE","border"),I(kt,"attributeDefinitions",kt.createAttributeDefinitions()),kt),Th=class rm{constructor(t){I(this,"borders");I(this,"borderMap");this.borders=[],this.borderMap=new Map}static fromJson(t,r){const o=new rm(r);o.borders=t.map(n=>Ke.fromJson(n,r));for(const n of o.borders)o.borderMap.set(n.getLocation(),n);return o}toJson(){return this.borders.map(t=>t.toJson())}getBorders(){return this.borders}getBorderMap(){return this.borderMap}forEachNode(t){for(const r of this.borders){t(r,0);for(const o of r.getChildren())o.forEachNode(t,1)}}setPaths(){for(const t of this.borders){const r="/border/"+t.getLocation().getName();t.setPath(r);let o=0;for(const n of t.getChildren())n.setPath(r+"/t"+o),o++}}findDropTargetNode(t,r,o,n=!1){for(const i of this.borders)if(i.isShowing()){const a=i.canDrop(t,r,o,n);if(a!==void 0)return a}}},en=function(e){return e[e.Visible=1]="Visible",e[e.Always=2]="Always",e[e.Selected=3]="Selected",e}({}),qt,wn=(qt=class{constructor(t,r,o,n,i){I(this,"_layoutId");I(this,"_type");I(this,"_rect");I(this,"_path");I(this,"attributes");I(this,"_controller");I(this,"_rootRow");I(this,"_maximizedTabSet");I(this,"_activeTabSet");I(this,"_toExportRectFunction");this.attributes={},qt.attributeDefinitions.fromJson(i??{},this.attributes),this._layoutId=t,this._type=o,this._rect=n,this._toExportRectFunction=(a,l)=>a,t===lt.MAIN_LAYOUT_ID?this._path="":this._path="/sublayout"+r}getPath(){return this._path}visitNodes(t){this.getRootRow()?.forEachNode(t,0)}isMainLayout(){return this._layoutId===lt.MAIN_LAYOUT_ID}getLayoutId(){return this._layoutId}getType(){return this._type}getName(){return this.getAttr("name")}getAttr(t){return this.attributes[t]}getAttributeDefinitions(){return qt.attributeDefinitions}updateAttrs(t){qt.attributeDefinitions.update(t,this.attributes)}getRect(){return this._rect}getWindow(){return this._controller?.getCurrentWindow()}setType(t){this._type=t}getController(){return this._controller}getRootRow(){return this._rootRow}getMaximizedTabSet(){return this._maximizedTabSet}getActiveTabSet(){return this._activeTabSet}setRect(t){this._rect=t}setController(t){this._controller=t}getWindowId(){return this._controller?.getWindowId()}setRootRow(t){t?.setLayout(this),this._rootRow=t}setMaximizedTabSet(t){this._maximizedTabSet=t}setActiveTabSet(t){this._activeTabSet=t}getToExportRectFunction(){return this._toExportRectFunction}setToExportRectFunction(t){this._toExportRectFunction=t}static getAttributeDefinitions(){return qt.attributeDefinitions}static createAttributeDefinitions(){const t=new fi;return t.add("name",void 0).setType(te.STRING).setDescription("the name of the sub layout, e.g. as shown in the model explorer"),t}toJson(){this.getType()==="window"&&this.getWindow()&&this.getWindow().screenTop>-1e4&&this.setRect(new ge(this.getWindow().screenLeft,this.getWindow().screenTop,this.getWindow().outerWidth,this.getWindow().outerHeight));const t={type:this.getType(),layout:this.getRootRow().toJson(),rect:this.getType()==="tab"?void 0:this.getRect().toJson()};return qt.attributeDefinitions.toJson(t,this.attributes),t}static fromJson(t,r,o){const n=r.getLayouts().size,i=t.rect?ge.fromJson(t.rect):new ge(50+50*n,50+50*n,600,400);i.snap(1);const a=o===lt.MAIN_LAYOUT_ID?0:r.getNextSubLayoutId(),l=new qt(o,a,t.type||"window",i,t);return l.setRootRow(Ue.fromJson(t.layout,r,l)),l}},I(qt,"attributeDefinitions",qt.createAttributeDefinitions()),qt),Yr=99999,be,lt=(be=class{constructor(){I(this,"attributes");I(this,"layouts");I(this,"borders");I(this,"changeListeners");I(this,"idMap");I(this,"mainLayout");I(this,"adoptedFromModel");I(this,"splitterSize");I(this,"onAllowDrop");I(this,"onCreateTabSet");I(this,"nextSubLayoutId");this.attributes={},this.layouts=new Map,this.borders=new Th(this),this.idMap=new Map,this.changeListeners=[],this.nextSubLayoutId=1,this.mainLayout=new wn(be.MAIN_LAYOUT_ID,0,"window",ge.empty()),this.layouts.set(be.MAIN_LAYOUT_ID,this.mainLayout),this.splitterSize=8}static ensureAttributePairing(){be.attributePairingDone||(be.attributePairingDone=!0,be.attributeDefinitions.pairAttributes("RowNode",Ue.getAttributeDefinitions()),be.attributeDefinitions.pairAttributes("TabSetNode",Ne.getAttributeDefinitions()),be.attributeDefinitions.pairAttributes("TabNode",Le.getAttributeDefinitions()),be.attributeDefinitions.pairAttributes("BorderNode",Ke.getAttributeDefinitions()))}doAction(t){for(const o of[...this.changeListeners])typeof o!="function"&&o.onBeforeAction?.(t);const r=this.applyAction(t);this.updateIdMap();for(const o of[...this.changeListeners])typeof o=="function"?o(t):o.onAfterAction?.(t);return r}applyAction(t){let r;switch(t.type){case re.ADD_TAB:{const o=new Le(this,t.data.json,!0),n=this.idMap.get(t.data.toNode);(n instanceof Ne||n instanceof Ke||n instanceof Ue)&&(n.drop(o,ee.getByName(t.data.location),t.data.index,t.data.select),r=o);break}case re.MOVE_NODE:{const o=this.idMap.get(t.data.fromNode);if(o instanceof Le||o instanceof Ne||o instanceof Ue){o===this.getMaximizedTabset(o.getLayoutId())&&this.layouts.get(o.getLayoutId()).setMaximizedTabSet(void 0);const n=this.idMap.get(t.data.toNode);(n instanceof Ne||n instanceof Ke||n instanceof Ue)&&n.drop(o,ee.getByName(t.data.location),t.data.index,t.data.select)}break}case re.DELETE_TAB:{const o=this.idMap.get(t.data.node);o instanceof Le&&o.delete();break}case re.DELETE_TABSET:{const o=this.idMap.get(t.data.node);if(o instanceof Ne){const n=[...o.getChildren()];for(let i=0;i{u instanceof Le&&u.getSubLayoutId()!==void 0&&(c=!0)},0),c||(this.layouts.delete(o.getLayoutId()),o.setRootRow(void 0),l.setLayout(void 0),n.drop(l,i,t.data.index))}}}break}case re.GROUP:{const o=t;for(const n of o.actions)this.applyAction(n);break}}return r}getActiveTabset(t=be.MAIN_LAYOUT_ID){const r=this.layouts.get(t);if(r&&r.getActiveTabSet()&&this.getNodeById(r.getActiveTabSet().getId()))return r.getActiveTabSet()}getMaximizedTabset(t=be.MAIN_LAYOUT_ID){return this.layouts.get(t)?.getMaximizedTabSet()}getRootRow(t=be.MAIN_LAYOUT_ID){return this.layouts.get(t)?.getRootRow()}isRootOrientationVertical(){return this.attributes.rootOrientationVertical}isEnableRotateBorderIcons(){return this.attributes.enableRotateBorderIcons}getBorderLeftTabDirection(){return this.attributes.borderLeftTabDirection}getBorderSet(){return this.borders}visitNodes(t){this.borders.forEachNode(t);for(const[r,o]of this.layouts)o.getRootRow().forEachNode(t,0)}visitLayoutNodes(t,r){this.layouts.has(t)&&(t===be.MAIN_LAYOUT_ID&&this.borders.forEachNode(r),this.layouts.get(t).visitNodes(r))}getNodeById(t){return this.idMap.get(t)}getFirstTabSet(t=this.layouts.get(be.MAIN_LAYOUT_ID).getRootRow()){const r=t.getChildren()[0];if(r instanceof Ne)return r;if(r instanceof Ue)return this.getFirstTabSet(r)}static fromJson(t,r){be.ensureAttributePairing();const o=new be;be.attributeDefinitions.fromJson(t.global??{},o.attributes),t.borders&&(o.borders=Th.fromJson(t.borders,o));const n=t.subLayouts||t.popouts;if(n)for(const i in n){const a=n[i],l=wn.fromJson(a,o,i);o.layouts.set(i,l)}return o.mainLayout.setRootRow(Ue.fromJson(t.layout,o,o.mainLayout)),o.tidy(),r&&(o.adoptedFromModel=r,r.adoptedFromModel=void 0,o.visitNodes(i=>{if(i instanceof Le){const a=r.getNodeById(i.getId());a instanceof Le&&i.adoptViewState(a)}})),o}getAdoptedFromModel(){return this.adoptedFromModel}toJson(){const t={};be.attributeDefinitions.toJson(t,this.attributes),this.visitNodes(o=>{o.fireEvent("save",{})});const r={};for(const[o,n]of this.layouts)o!==be.MAIN_LAYOUT_ID&&(r[o]=n.toJson());return{global:t,borders:this.borders.toJson(),layout:this.mainLayout.getRootRow().toJson(),subLayouts:r}}getSplitterSize(){return this.splitterSize}setSplitterSize(t){this.splitterSize=t}isEnableEdgeDock(){return this.attributes.enableEdgeDock}isEnableEdgeDockIndicators(){return this.attributes.enableEdgeDockIndicators}setOnAllowDrop(t){this.onAllowDrop=t}setOnCreateTabSet(t){this.onCreateTabSet=t}addChangeListener(t){this.changeListeners.push(t)}removeChangeListener(t){const r=this.changeListeners.findIndex(o=>o===t);r!==-1&&this.changeListeners.splice(r,1)}toString(){return JSON.stringify(this.toJson())}getMainLayout(){return this.mainLayout}getLayouts(){return this.layouts}sortLayouts(){const t={window:1,tab:2,float:3},r=Array.from(this.getLayouts().values()).sort((o,n)=>t[o.getType()]-t[n.getType()]);this.layouts.clear(),r.forEach(o=>this.layouts.set(o.getLayoutId(),o))}setActiveTabset(t,r){const o=this.layouts.get(r);o&&(t?o.setActiveTabSet(t):o.setActiveTabSet(void 0))}setMaximizedTabset(t,r){const o=this.layouts.get(r);o&&(t?o.setMaximizedTabSet(t):o.setMaximizedTabSet(void 0))}updateIdMap(){this.idMap.clear(),this.visitNodes(t=>{this.idMap.set(t.getId(),t)})}addNode(t){const r=t.getId();if(this.idMap.has(r))throw new Error(`Error: each node must have a unique id, duplicate id:${t.getId()}`);this.idMap.set(r,t)}findDropTargetNode(t,r,o,n,i=!1){if(t===be.MAIN_LAYOUT_ID){for(const l of this.borders.getBorders())if(l.isShowing()&&l.isOverlay()&&l.getSelected()!==-1&&l.getContentRect()?.contains(o,n)){const c=l.canDrop(r,o,n,i);if(c!==void 0)return c}}let a=this.layouts.get(t).getRootRow().findDropTargetNode(t,r,o,n,i);return a===void 0&&t===be.MAIN_LAYOUT_ID&&(a=this.borders.findDropTargetNode(r,o,n,i)),a}tidy(){for(const[t,r]of this.layouts)r.getRootRow().tidy()}updateAttrs(t){be.attributeDefinitions.update(t,this.attributes)}nextUniqueId(){return"#"+En()}getAttribute(t){return this.attributes[t]}getOnAllowDrop(){return this.onAllowDrop}getOnCreateTabSet(){return this.onCreateTabSet}getNextSubLayoutId(){return this.nextSubLayoutId++}static getGlobalAttributeDefinitions(){return be.ensureAttributePairing(),be.attributeDefinitions}static toTypescriptInterfaces(){be.ensureAttributePairing();const t=[];return t.push(be.attributeDefinitions.toTypescriptInterface("Global",void 0)),t.push(Ue.getAttributeDefinitions().toTypescriptInterface("Row",be.attributeDefinitions)),t.push(Ne.getAttributeDefinitions().toTypescriptInterface("TabSet",be.attributeDefinitions)),t.push(Le.getAttributeDefinitions().toTypescriptInterface("Tab",be.attributeDefinitions)),t.push(Ke.getAttributeDefinitions().toTypescriptInterface("Border",be.attributeDefinitions)),t.push(wn.getAttributeDefinitions().toTypescriptInterface("SubLayout",void 0)),t.join(` -`)}static createAttributeDefinitions(){const t=new fi;return t.add("enableEdgeDock",!0).setType(te.BOOLEAN).setDescription("enable docking to the edges of the layout"),t.add("enableEdgeDockIndicators",!0).setType(te.BOOLEAN).setDescription("show the edge indicators when dragging"),t.add("rootOrientationVertical",!1).setType(te.BOOLEAN).setDescription("the top level 'row' will layout horizontally by default, set this option true to make it layout vertically"),t.add("enableRotateBorderIcons",!0).setType(te.BOOLEAN).setDescription("boolean indicating if tab icons should rotate with the text in the left and right borders"),t.add("tabEnableClose",!0).setType(te.BOOLEAN),t.add("tabCloseType",1).setType("ICloseType").setValues([{value:en.Visible,label:"Visible"},{value:en.Always,label:"Always"},{value:en.Selected,label:"Selected"}]),t.add("tabEnablePopout",!1).setType(te.BOOLEAN).setAlias("tabEnableFloat"),t.add("tabEnablePopoutIcon",!0).setType(te.BOOLEAN),t.add("tabEnablePopoutFloatIcon",!1).setType(te.BOOLEAN),t.add("tabEnablePopoutOverlay",!1).setType(te.BOOLEAN),t.add("tabEnableDrag",!0).setType(te.BOOLEAN),t.add("tabEnableRename",!0).setType(te.BOOLEAN),t.add("tabEnablePin",!0).setType(te.BOOLEAN),t.add("tabContentClassName",void 0).setType(te.STRING),t.add("tabClassName",void 0).setType(te.STRING),t.add("tabIcon",void 0).setType(te.STRING),t.add("tabEnableRenderOnDemand",!0).setType(te.BOOLEAN),t.add("tabBorderWidth",-1).setType(te.NUMBER),t.add("tabBorderHeight",-1).setType(te.NUMBER),t.add("tabEnableScrollbars",!0).setType(te.BOOLEAN),t.add("tabSetEnableDeleteWhenEmpty",!0).setType(te.BOOLEAN),t.add("tabSetEnableDrop",!0).setType(te.BOOLEAN),t.add("tabSetEnableDrag",!0).setType(te.BOOLEAN),t.add("tabSetEnableDivide",!0).setType(te.BOOLEAN),t.add("tabSetEnableMaximize",!0).setType(te.BOOLEAN),t.add("tabSetEnableClose",!0).setType(te.BOOLEAN),t.add("tabSetEnableCloseButton",!1).setType(te.BOOLEAN),t.add("tabSetEnableSingleTabStretch",!1).setType(te.BOOLEAN),t.add("tabSetAutoSelectTab",!0).setType(te.BOOLEAN),t.add("tabSetEnableActiveIcon",!1).setType(te.BOOLEAN),t.add("tabSetClassNameTabStrip",void 0).setType(te.STRING),t.add("tabSetEnableTabStrip",!0).setType(te.BOOLEAN),t.add("tabSetEnableTabWrap",!1).setType(te.BOOLEAN),t.add("tabSetTabLocation","top").setType("ITabLocation").setValues(["top","bottom"]),t.add("tabMinWidth",1).setType(te.NUMBER),t.add("tabMinHeight",1).setType(te.NUMBER),t.add("tabSetMinWidth",1).setType(te.NUMBER),t.add("tabSetMinHeight",1).setType(te.NUMBER),t.add("tabMaxWidth",Yr).setType(te.NUMBER),t.add("tabMaxHeight",Yr).setType(te.NUMBER),t.add("tabSetMaxWidth",Yr).setType(te.NUMBER),t.add("tabSetMaxHeight",Yr).setType(te.NUMBER),t.add("tabSetEnableTabScrollbar",!1).setType(te.BOOLEAN),t.add("borderSize",200).setType(te.NUMBER),t.add("borderMinSize",1).setType(te.NUMBER),t.add("borderMaxSize",Yr).setType(te.NUMBER),t.add("borderEnableDrop",!0).setType(te.BOOLEAN),t.add("borderAutoSelectTabWhenOpen",!0).setType(te.BOOLEAN),t.add("borderAutoSelectTabWhenClosed",!1).setType(te.BOOLEAN),t.add("borderClassName",void 0).setType(te.STRING),t.add("borderEnableAutoHide",!1).setType(te.BOOLEAN),t.add("borderEnableTabScrollbar",!1).setType(te.BOOLEAN),t.add("borderLeftTabDirection","up").setType("IBorderTabDirection").setValues(["up","down"]).setDescription("the direction the left border tabs read: 'up' (default, text reads bottom to top) or 'down' (text reads top to bottom like the right border)"),t}},I(be,"MAIN_LAYOUT_ID","__main_layout_id__"),I(be,"attributeDefinitions",be.createAttributeDefinitions()),I(be,"attributePairingDone",!1),be),Et,Le=(Et=class extends Ks{constructor(r,o,n=!0){super(r);I(this,"tabRect",ge.empty());I(this,"renderedName");I(this,"extra");I(this,"visible");I(this,"rendered");I(this,"moveableElement");I(this,"tabStamp");I(this,"scrollTop");I(this,"scrollLeft");this.extra={},this.moveableElement=null,this.tabStamp=null,this.rendered=!1,this.visible=!1,Et.attributeDefinitions.fromJson(o,this.attributes),n===!0&&r.addNode(this)}static fromJson(r,o,n=!0){return new Et(o,r,n)}getName(){return this.getAttr("name")}getIcon(){return this.getAttr("icon")}getSubLayoutId(){return this.getAttr("subLayoutId")}getHelpText(){return this.getAttr("helpText")}getComponent(){return this.getAttr("component")}getAltName(){return this.getAttr("altName")}getWindowId(){const r=this.getLayout();if(r)return r.getWindowId()}getConfig(){return this.attributes.config}getExtraData(){return this.extra}isPoppedOut(){return this.getLayoutId()!==lt.MAIN_LAYOUT_ID}isSelected(){return this.getParent().getSelectedNode()===this}isPinned(){return this.getAttr("pinned")}isCloseable(){if(this.isPinned())return!1;let r=this.isEnableClose();if(r&&this.getSubLayoutId()){const o=this.model.getLayouts().get(this.getSubLayoutId());o&&(r=o.getRootRow().isCloseable())}return r}isAllowedInWindow(){let r=this.isEnablePopout();if(r&&this.getSubLayoutId()){const o=this.model.getLayouts().get(this.getSubLayoutId());o&&(r=o.getRootRow().isAllowedInWindow())}return r}isEnableClose(){return this.getAttr("enableClose")}isEnableScrollbars(){return this.getAttr("enableScrollbars")}getCloseType(){return this.getAttr("closeType")}isEnablePopout(){return this.getAttr("enablePopout")}isEnablePopoutIcon(){return this.getAttr("enablePopoutIcon")}isEnablePopoutFloatIcon(){return this.getAttr("enablePopoutFloatIcon")}isEnablePopoutOverlay(){return this.getAttr("enablePopoutOverlay")}isEnableDrag(){return this.getAttr("enableDrag")}isEnableRename(){return this.getAttr("enableRename")}isEnablePin(){return this.getAttr("enablePin")}isEnableWindowReMount(){return this.getAttr("enableWindowReMount")}getClassName(){return this.getAttr("className")}getContentClassName(){return this.getAttr("contentClassName")}getTabSetClassName(){return this.getAttr("tabsetClassName")}isEnableRenderOnDemand(){return this.getAttr("enableRenderOnDemand")}getMinWidth(){return this.getAttr("minWidth")}getMinHeight(){return this.getAttr("minHeight")}getMaxWidth(){return this.getAttr("maxWidth")}getMaxHeight(){return this.getAttr("maxHeight")}getBorderWidth(){return this.getAttr("borderWidth")}getBorderHeight(){return this.getAttr("borderHeight")}isVisible(){return this.visible}toJson(){const r={};return Et.attributeDefinitions.toJson(r,this.attributes),r}saveScrollPosition(){this.moveableElement&&(this.scrollLeft=this.moveableElement.scrollLeft,this.scrollTop=this.moveableElement.scrollTop)}restoreScrollPosition(){(this.scrollTop||this.scrollLeft)&&requestAnimationFrame(()=>{this.moveableElement&&(this.moveableElement.scrollTop=this.scrollTop??0,this.moveableElement.scrollLeft=this.scrollLeft??0)})}setRect(r){r.equalsWhenRounded(this.rect)||this.fireEvent("resize",{rect:r}),this.rect=r}setVisible(r){r!==this.visible&&(this.visible=r,this.fireEvent("visibility",{visible:r}))}setScrollTop(r){this.scrollTop=r}setScrollLeft(r){this.scrollLeft=r}isRendered(){return this.rendered}setRendered(r){this.rendered=r}getTabRect(){return this.tabRect}setTabRect(r){this.tabRect=r}getTabStamp(){return this.tabStamp}setTabStamp(r){this.tabStamp=r}getMoveableElement(){return this.moveableElement===null&&(this.moveableElement=document.createElement("div"),this.moveableElement.className=U.FLEXLAYOUT__TAB_MOVEABLE),this.moveableElement}setMoveableElement(r){this.moveableElement=r}setRenderedName(r){this.renderedName=r}getNameForOverflowMenu(){const r=this.getAttr("altName");return r!==void 0?r:this.renderedName}setName(r){this.attributes.name=r}setPinned(r){this.attributes.pinned=r}delete(){this.parent.remove(this),this.deleteSubLayout(),this.fireEvent("close",{})}adoptViewState(r){this.moveableElement=r.moveableElement,r.moveableElement=null,this.tabStamp=r.tabStamp,this.scrollTop=r.scrollTop,this.scrollLeft=r.scrollLeft,this.rendered=r.rendered,this.visible=r.visible,this.rect=r.rect,this.tabRect=r.tabRect,this.extra=r.extra}deleteSubLayout(){const r=this.getSubLayoutId();if(r){const o=this.model.getLayouts().get(r);this.model.getLayouts().delete(r),o&&o.getRootRow()?.forEachNode(n=>{n instanceof Et&&(n.deleteSubLayout(),n.fireEvent("close",{}))},0)}}updateAttrs(r){Et.attributeDefinitions.update(r,this.attributes)}getAttributeDefinitions(){return Et.attributeDefinitions}setBorderWidth(r){this.attributes.borderWidth=r}setBorderHeight(r){this.attributes.borderHeight=r}static getAttributeDefinitions(){return lt.ensureAttributePairing(),Et.attributeDefinitions}static createAttributeDefinitions(){const r=new fi;return r.add("type",Et.TYPE,!0).setType(te.STRING).setFixed(),r.add("id",void 0).setType(te.STRING).setDescription("the unique id of the tab, if left undefined a uuid will be assigned"),r.add("name","[Unnamed Tab]").setType(te.STRING).setDescription("name of tab to be displayed in the tab button"),r.add("component",void 0).setType(te.STRING).setDescription("string identifying which component to render in this tab (used in the layout factory function)"),r.add("subLayoutId",void 0).setType(te.STRING).setDescription(`the Id of the sub layout to render in this tab, defined in the subLayouts section of the model json (if + style auto hide), see the borderType attribute`),r.addInherited("enableTabScrollbar","borderEnableTabScrollbar").setDescription("whether to show a mini scrollbar for the tabs"),r}},I(kt,"TYPE","border"),I(kt,"attributeDefinitions",kt.createAttributeDefinitions()),kt),wh=class Zv{constructor(t){I(this,"borders");I(this,"borderMap");this.borders=[],this.borderMap=new Map}static fromJson(t,r){const o=new Zv(r);o.borders=t.map(n=>Ke.fromJson(n,r));for(const n of o.borders)o.borderMap.set(n.getLocation(),n);return o}toJson(){return this.borders.map(t=>t.toJson())}getBorders(){return this.borders}getBorderMap(){return this.borderMap}forEachNode(t){for(const r of this.borders){t(r,0);for(const o of r.getChildren())o.forEachNode(t,1)}}setPaths(){for(const t of this.borders){const r="/border/"+t.getLocation().getName();t.setPath(r);let o=0;for(const n of t.getChildren())n.setPath(r+"/t"+o),o++}}findDropTargetNode(t,r,o,n=!1){for(const i of this.borders)if(i.isShowing()){const a=i.canDrop(t,r,o,n);if(a!==void 0)return a}}},en=function(e){return e[e.Visible=1]="Visible",e[e.Always=2]="Always",e[e.Selected=3]="Selected",e}({}),qt,wn=(qt=class{constructor(t,r,o,n,i){I(this,"_layoutId");I(this,"_type");I(this,"_rect");I(this,"_path");I(this,"attributes");I(this,"_controller");I(this,"_rootRow");I(this,"_maximizedTabSet");I(this,"_activeTabSet");I(this,"_toExportRectFunction");this.attributes={},qt.attributeDefinitions.fromJson(i??{},this.attributes),this._layoutId=t,this._type=o,this._rect=n,this._toExportRectFunction=(a,l)=>a,t===lt.MAIN_LAYOUT_ID?this._path="":this._path="/sublayout"+r}getPath(){return this._path}visitNodes(t){this.getRootRow()?.forEachNode(t,0)}isMainLayout(){return this._layoutId===lt.MAIN_LAYOUT_ID}getLayoutId(){return this._layoutId}getType(){return this._type}getName(){return this.getAttr("name")}getAttr(t){return this.attributes[t]}getAttributeDefinitions(){return qt.attributeDefinitions}updateAttrs(t){qt.attributeDefinitions.update(t,this.attributes)}getRect(){return this._rect}getWindow(){return this._controller?.getCurrentWindow()}setType(t){this._type=t}getController(){return this._controller}getRootRow(){return this._rootRow}getMaximizedTabSet(){return this._maximizedTabSet}getActiveTabSet(){return this._activeTabSet}setRect(t){this._rect=t}setController(t){this._controller=t}getWindowId(){return this._controller?.getWindowId()}setRootRow(t){t?.setLayout(this),this._rootRow=t}setMaximizedTabSet(t){this._maximizedTabSet=t}setActiveTabSet(t){this._activeTabSet=t}getToExportRectFunction(){return this._toExportRectFunction}setToExportRectFunction(t){this._toExportRectFunction=t}static getAttributeDefinitions(){return qt.attributeDefinitions}static createAttributeDefinitions(){const t=new pi;return t.add("name",void 0).setType(te.STRING).setDescription("the name of the sub layout, e.g. as shown in the model explorer"),t}toJson(){this.getType()==="window"&&this.getWindow()&&this.getWindow().screenTop>-1e4&&this.setRect(new ge(this.getWindow().screenLeft,this.getWindow().screenTop,this.getWindow().outerWidth,this.getWindow().outerHeight));const t={type:this.getType(),layout:this.getRootRow().toJson(),rect:this.getType()==="tab"?void 0:this.getRect().toJson()};return qt.attributeDefinitions.toJson(t,this.attributes),t}static fromJson(t,r,o){const n=r.getLayouts().size,i=t.rect?ge.fromJson(t.rect):new ge(50+50*n,50+50*n,600,400);i.snap(1);const a=o===lt.MAIN_LAYOUT_ID?0:r.getNextSubLayoutId(),l=new qt(o,a,t.type||"window",i,t);return l.setRootRow(Ue.fromJson(t.layout,r,l)),l}},I(qt,"attributeDefinitions",qt.createAttributeDefinitions()),qt),Yr=99999,be,lt=(be=class{constructor(){I(this,"attributes");I(this,"layouts");I(this,"borders");I(this,"changeListeners");I(this,"idMap");I(this,"mainLayout");I(this,"adoptedFromModel");I(this,"splitterSize");I(this,"onAllowDrop");I(this,"onCreateTabSet");I(this,"nextSubLayoutId");this.attributes={},this.layouts=new Map,this.borders=new wh(this),this.idMap=new Map,this.changeListeners=[],this.nextSubLayoutId=1,this.mainLayout=new wn(be.MAIN_LAYOUT_ID,0,"window",ge.empty()),this.layouts.set(be.MAIN_LAYOUT_ID,this.mainLayout),this.splitterSize=8}static ensureAttributePairing(){be.attributePairingDone||(be.attributePairingDone=!0,be.attributeDefinitions.pairAttributes("RowNode",Ue.getAttributeDefinitions()),be.attributeDefinitions.pairAttributes("TabSetNode",Ne.getAttributeDefinitions()),be.attributeDefinitions.pairAttributes("TabNode",Le.getAttributeDefinitions()),be.attributeDefinitions.pairAttributes("BorderNode",Ke.getAttributeDefinitions()))}doAction(t){for(const o of[...this.changeListeners])typeof o!="function"&&o.onBeforeAction?.(t);const r=this.applyAction(t);this.updateIdMap();for(const o of[...this.changeListeners])typeof o=="function"?o(t):o.onAfterAction?.(t);return r}applyAction(t){let r;switch(t.type){case re.ADD_TAB:{const o=new Le(this,t.data.json,!0),n=this.idMap.get(t.data.toNode);(n instanceof Ne||n instanceof Ke||n instanceof Ue)&&(n.drop(o,ee.getByName(t.data.location),t.data.index,t.data.select),r=o);break}case re.MOVE_NODE:{const o=this.idMap.get(t.data.fromNode);if(o instanceof Le||o instanceof Ne||o instanceof Ue){o===this.getMaximizedTabset(o.getLayoutId())&&this.layouts.get(o.getLayoutId()).setMaximizedTabSet(void 0);const n=this.idMap.get(t.data.toNode);(n instanceof Ne||n instanceof Ke||n instanceof Ue)&&n.drop(o,ee.getByName(t.data.location),t.data.index,t.data.select)}break}case re.DELETE_TAB:{const o=this.idMap.get(t.data.node);o instanceof Le&&o.delete();break}case re.DELETE_TABSET:{const o=this.idMap.get(t.data.node);if(o instanceof Ne){const n=[...o.getChildren()];for(let i=0;i{u instanceof Le&&u.getSubLayoutId()!==void 0&&(c=!0)},0),c||(this.layouts.delete(o.getLayoutId()),o.setRootRow(void 0),l.setLayout(void 0),n.drop(l,i,t.data.index))}}}break}case re.GROUP:{const o=t;for(const n of o.actions)this.applyAction(n);break}}return r}getActiveTabset(t=be.MAIN_LAYOUT_ID){const r=this.layouts.get(t);if(r&&r.getActiveTabSet()&&this.getNodeById(r.getActiveTabSet().getId()))return r.getActiveTabSet()}getMaximizedTabset(t=be.MAIN_LAYOUT_ID){return this.layouts.get(t)?.getMaximizedTabSet()}getRootRow(t=be.MAIN_LAYOUT_ID){return this.layouts.get(t)?.getRootRow()}isRootOrientationVertical(){return this.attributes.rootOrientationVertical}isEnableRotateBorderIcons(){return this.attributes.enableRotateBorderIcons}getBorderLeftTabDirection(){return this.attributes.borderLeftTabDirection}getBorderSet(){return this.borders}visitNodes(t){this.borders.forEachNode(t);for(const[r,o]of this.layouts)o.getRootRow().forEachNode(t,0)}visitLayoutNodes(t,r){this.layouts.has(t)&&(t===be.MAIN_LAYOUT_ID&&this.borders.forEachNode(r),this.layouts.get(t).visitNodes(r))}getNodeById(t){return this.idMap.get(t)}getFirstTabSet(t=this.layouts.get(be.MAIN_LAYOUT_ID).getRootRow()){const r=t.getChildren()[0];if(r instanceof Ne)return r;if(r instanceof Ue)return this.getFirstTabSet(r)}static fromJson(t,r){be.ensureAttributePairing();const o=new be;be.attributeDefinitions.fromJson(t.global??{},o.attributes),t.borders&&(o.borders=wh.fromJson(t.borders,o));const n=t.subLayouts||t.popouts;if(n)for(const i in n){const a=n[i],l=wn.fromJson(a,o,i);o.layouts.set(i,l)}return o.mainLayout.setRootRow(Ue.fromJson(t.layout,o,o.mainLayout)),o.tidy(),r&&(o.adoptedFromModel=r,r.adoptedFromModel=void 0,o.visitNodes(i=>{if(i instanceof Le){const a=r.getNodeById(i.getId());a instanceof Le&&i.adoptViewState(a)}})),o}getAdoptedFromModel(){return this.adoptedFromModel}toJson(){const t={};be.attributeDefinitions.toJson(t,this.attributes),this.visitNodes(o=>{o.fireEvent("save",{})});const r={};for(const[o,n]of this.layouts)o!==be.MAIN_LAYOUT_ID&&(r[o]=n.toJson());return{global:t,borders:this.borders.toJson(),layout:this.mainLayout.getRootRow().toJson(),subLayouts:r}}getSplitterSize(){return this.splitterSize}setSplitterSize(t){this.splitterSize=t}isEnableEdgeDock(){return this.attributes.enableEdgeDock}isEnableEdgeDockIndicators(){return this.attributes.enableEdgeDockIndicators}setOnAllowDrop(t){this.onAllowDrop=t}setOnCreateTabSet(t){this.onCreateTabSet=t}addChangeListener(t){this.changeListeners.push(t)}removeChangeListener(t){const r=this.changeListeners.findIndex(o=>o===t);r!==-1&&this.changeListeners.splice(r,1)}toString(){return JSON.stringify(this.toJson())}getMainLayout(){return this.mainLayout}getLayouts(){return this.layouts}sortLayouts(){const t={window:1,tab:2,float:3},r=Array.from(this.getLayouts().values()).sort((o,n)=>t[o.getType()]-t[n.getType()]);this.layouts.clear(),r.forEach(o=>this.layouts.set(o.getLayoutId(),o))}setActiveTabset(t,r){const o=this.layouts.get(r);o&&(t?o.setActiveTabSet(t):o.setActiveTabSet(void 0))}setMaximizedTabset(t,r){const o=this.layouts.get(r);o&&(t?o.setMaximizedTabSet(t):o.setMaximizedTabSet(void 0))}updateIdMap(){this.idMap.clear(),this.visitNodes(t=>{this.idMap.set(t.getId(),t)})}addNode(t){const r=t.getId();if(this.idMap.has(r))throw new Error(`Error: each node must have a unique id, duplicate id:${t.getId()}`);this.idMap.set(r,t)}findDropTargetNode(t,r,o,n,i=!1){if(t===be.MAIN_LAYOUT_ID){for(const l of this.borders.getBorders())if(l.isShowing()&&l.isOverlay()&&l.getSelected()!==-1&&l.getContentRect()?.contains(o,n)){const c=l.canDrop(r,o,n,i);if(c!==void 0)return c}}let a=this.layouts.get(t).getRootRow().findDropTargetNode(t,r,o,n,i);return a===void 0&&t===be.MAIN_LAYOUT_ID&&(a=this.borders.findDropTargetNode(r,o,n,i)),a}tidy(){for(const[t,r]of this.layouts)r.getRootRow().tidy()}updateAttrs(t){be.attributeDefinitions.update(t,this.attributes)}nextUniqueId(){return"#"+En()}getAttribute(t){return this.attributes[t]}getOnAllowDrop(){return this.onAllowDrop}getOnCreateTabSet(){return this.onCreateTabSet}getNextSubLayoutId(){return this.nextSubLayoutId++}static getGlobalAttributeDefinitions(){return be.ensureAttributePairing(),be.attributeDefinitions}static toTypescriptInterfaces(){be.ensureAttributePairing();const t=[];return t.push(be.attributeDefinitions.toTypescriptInterface("Global",void 0)),t.push(Ue.getAttributeDefinitions().toTypescriptInterface("Row",be.attributeDefinitions)),t.push(Ne.getAttributeDefinitions().toTypescriptInterface("TabSet",be.attributeDefinitions)),t.push(Le.getAttributeDefinitions().toTypescriptInterface("Tab",be.attributeDefinitions)),t.push(Ke.getAttributeDefinitions().toTypescriptInterface("Border",be.attributeDefinitions)),t.push(wn.getAttributeDefinitions().toTypescriptInterface("SubLayout",void 0)),t.join(` +`)}static createAttributeDefinitions(){const t=new pi;return t.add("enableEdgeDock",!0).setType(te.BOOLEAN).setDescription("enable docking to the edges of the layout"),t.add("enableEdgeDockIndicators",!0).setType(te.BOOLEAN).setDescription("show the edge indicators when dragging"),t.add("rootOrientationVertical",!1).setType(te.BOOLEAN).setDescription("the top level 'row' will layout horizontally by default, set this option true to make it layout vertically"),t.add("enableRotateBorderIcons",!0).setType(te.BOOLEAN).setDescription("boolean indicating if tab icons should rotate with the text in the left and right borders"),t.add("tabEnableClose",!0).setType(te.BOOLEAN),t.add("tabCloseType",1).setType("ICloseType").setValues([{value:en.Visible,label:"Visible"},{value:en.Always,label:"Always"},{value:en.Selected,label:"Selected"}]),t.add("tabEnablePopout",!1).setType(te.BOOLEAN).setAlias("tabEnableFloat"),t.add("tabEnablePopoutIcon",!0).setType(te.BOOLEAN),t.add("tabEnablePopoutFloatIcon",!1).setType(te.BOOLEAN),t.add("tabEnablePopoutOverlay",!1).setType(te.BOOLEAN),t.add("tabEnableDrag",!0).setType(te.BOOLEAN),t.add("tabEnableRename",!0).setType(te.BOOLEAN),t.add("tabEnablePin",!0).setType(te.BOOLEAN),t.add("tabContentClassName",void 0).setType(te.STRING),t.add("tabClassName",void 0).setType(te.STRING),t.add("tabIcon",void 0).setType(te.STRING),t.add("tabEnableRenderOnDemand",!0).setType(te.BOOLEAN),t.add("tabBorderWidth",-1).setType(te.NUMBER),t.add("tabBorderHeight",-1).setType(te.NUMBER),t.add("tabEnableScrollbars",!0).setType(te.BOOLEAN),t.add("tabSetEnableDeleteWhenEmpty",!0).setType(te.BOOLEAN),t.add("tabSetEnableDrop",!0).setType(te.BOOLEAN),t.add("tabSetEnableDrag",!0).setType(te.BOOLEAN),t.add("tabSetEnableDivide",!0).setType(te.BOOLEAN),t.add("tabSetEnableMaximize",!0).setType(te.BOOLEAN),t.add("tabSetEnableClose",!0).setType(te.BOOLEAN),t.add("tabSetEnableCloseButton",!1).setType(te.BOOLEAN),t.add("tabSetEnableSingleTabStretch",!1).setType(te.BOOLEAN),t.add("tabSetAutoSelectTab",!0).setType(te.BOOLEAN),t.add("tabSetEnableActiveIcon",!1).setType(te.BOOLEAN),t.add("tabSetClassNameTabStrip",void 0).setType(te.STRING),t.add("tabSetEnableTabStrip",!0).setType(te.BOOLEAN),t.add("tabSetEnableTabWrap",!1).setType(te.BOOLEAN),t.add("tabSetTabLocation","top").setType("ITabLocation").setValues(["top","bottom"]),t.add("tabMinWidth",1).setType(te.NUMBER),t.add("tabMinHeight",1).setType(te.NUMBER),t.add("tabSetMinWidth",1).setType(te.NUMBER),t.add("tabSetMinHeight",1).setType(te.NUMBER),t.add("tabMaxWidth",Yr).setType(te.NUMBER),t.add("tabMaxHeight",Yr).setType(te.NUMBER),t.add("tabSetMaxWidth",Yr).setType(te.NUMBER),t.add("tabSetMaxHeight",Yr).setType(te.NUMBER),t.add("tabSetEnableTabScrollbar",!1).setType(te.BOOLEAN),t.add("borderSize",200).setType(te.NUMBER),t.add("borderMinSize",1).setType(te.NUMBER),t.add("borderMaxSize",Yr).setType(te.NUMBER),t.add("borderEnableDrop",!0).setType(te.BOOLEAN),t.add("borderAutoSelectTabWhenOpen",!0).setType(te.BOOLEAN),t.add("borderAutoSelectTabWhenClosed",!1).setType(te.BOOLEAN),t.add("borderClassName",void 0).setType(te.STRING),t.add("borderEnableAutoHide",!1).setType(te.BOOLEAN),t.add("borderEnableTabScrollbar",!1).setType(te.BOOLEAN),t.add("borderLeftTabDirection","up").setType("IBorderTabDirection").setValues(["up","down"]).setDescription("the direction the left border tabs read: 'up' (default, text reads bottom to top) or 'down' (text reads top to bottom like the right border)"),t}},I(be,"MAIN_LAYOUT_ID","__main_layout_id__"),I(be,"attributeDefinitions",be.createAttributeDefinitions()),I(be,"attributePairingDone",!1),be),Et,Le=(Et=class extends Gs{constructor(r,o,n=!0){super(r);I(this,"tabRect",ge.empty());I(this,"renderedName");I(this,"extra");I(this,"visible");I(this,"rendered");I(this,"moveableElement");I(this,"tabStamp");I(this,"scrollTop");I(this,"scrollLeft");this.extra={},this.moveableElement=null,this.tabStamp=null,this.rendered=!1,this.visible=!1,Et.attributeDefinitions.fromJson(o,this.attributes),n===!0&&r.addNode(this)}static fromJson(r,o,n=!0){return new Et(o,r,n)}getName(){return this.getAttr("name")}getIcon(){return this.getAttr("icon")}getSubLayoutId(){return this.getAttr("subLayoutId")}getHelpText(){return this.getAttr("helpText")}getComponent(){return this.getAttr("component")}getAltName(){return this.getAttr("altName")}getWindowId(){const r=this.getLayout();if(r)return r.getWindowId()}getConfig(){return this.attributes.config}getExtraData(){return this.extra}isPoppedOut(){return this.getLayoutId()!==lt.MAIN_LAYOUT_ID}isSelected(){return this.getParent().getSelectedNode()===this}isPinned(){return this.getAttr("pinned")}isCloseable(){if(this.isPinned())return!1;let r=this.isEnableClose();if(r&&this.getSubLayoutId()){const o=this.model.getLayouts().get(this.getSubLayoutId());o&&(r=o.getRootRow().isCloseable())}return r}isAllowedInWindow(){let r=this.isEnablePopout();if(r&&this.getSubLayoutId()){const o=this.model.getLayouts().get(this.getSubLayoutId());o&&(r=o.getRootRow().isAllowedInWindow())}return r}isEnableClose(){return this.getAttr("enableClose")}isEnableScrollbars(){return this.getAttr("enableScrollbars")}getCloseType(){return this.getAttr("closeType")}isEnablePopout(){return this.getAttr("enablePopout")}isEnablePopoutIcon(){return this.getAttr("enablePopoutIcon")}isEnablePopoutFloatIcon(){return this.getAttr("enablePopoutFloatIcon")}isEnablePopoutOverlay(){return this.getAttr("enablePopoutOverlay")}isEnableDrag(){return this.getAttr("enableDrag")}isEnableRename(){return this.getAttr("enableRename")}isEnablePin(){return this.getAttr("enablePin")}isEnableWindowReMount(){return this.getAttr("enableWindowReMount")}getClassName(){return this.getAttr("className")}getContentClassName(){return this.getAttr("contentClassName")}getTabSetClassName(){return this.getAttr("tabsetClassName")}isEnableRenderOnDemand(){return this.getAttr("enableRenderOnDemand")}getMinWidth(){return this.getAttr("minWidth")}getMinHeight(){return this.getAttr("minHeight")}getMaxWidth(){return this.getAttr("maxWidth")}getMaxHeight(){return this.getAttr("maxHeight")}getBorderWidth(){return this.getAttr("borderWidth")}getBorderHeight(){return this.getAttr("borderHeight")}isVisible(){return this.visible}toJson(){const r={};return Et.attributeDefinitions.toJson(r,this.attributes),r}saveScrollPosition(){this.moveableElement&&(this.scrollLeft=this.moveableElement.scrollLeft,this.scrollTop=this.moveableElement.scrollTop)}restoreScrollPosition(){(this.scrollTop||this.scrollLeft)&&requestAnimationFrame(()=>{this.moveableElement&&(this.moveableElement.scrollTop=this.scrollTop??0,this.moveableElement.scrollLeft=this.scrollLeft??0)})}setRect(r){r.equalsWhenRounded(this.rect)||this.fireEvent("resize",{rect:r}),this.rect=r}setVisible(r){r!==this.visible&&(this.visible=r,this.fireEvent("visibility",{visible:r}))}setScrollTop(r){this.scrollTop=r}setScrollLeft(r){this.scrollLeft=r}isRendered(){return this.rendered}setRendered(r){this.rendered=r}getTabRect(){return this.tabRect}setTabRect(r){this.tabRect=r}getTabStamp(){return this.tabStamp}setTabStamp(r){this.tabStamp=r}getMoveableElement(){return this.moveableElement===null&&(this.moveableElement=document.createElement("div"),this.moveableElement.className=U.FLEXLAYOUT__TAB_MOVEABLE),this.moveableElement}setMoveableElement(r){this.moveableElement=r}setRenderedName(r){this.renderedName=r}getNameForOverflowMenu(){const r=this.getAttr("altName");return r!==void 0?r:this.renderedName}setName(r){this.attributes.name=r}setPinned(r){this.attributes.pinned=r}delete(){this.parent.remove(this),this.deleteSubLayout(),this.fireEvent("close",{})}adoptViewState(r){this.moveableElement=r.moveableElement,r.moveableElement=null,this.tabStamp=r.tabStamp,this.scrollTop=r.scrollTop,this.scrollLeft=r.scrollLeft,this.rendered=r.rendered,this.visible=r.visible,this.rect=r.rect,this.tabRect=r.tabRect,this.extra=r.extra}deleteSubLayout(){const r=this.getSubLayoutId();if(r){const o=this.model.getLayouts().get(r);this.model.getLayouts().delete(r),o&&o.getRootRow()?.forEachNode(n=>{n instanceof Et&&(n.deleteSubLayout(),n.fireEvent("close",{}))},0)}}updateAttrs(r){Et.attributeDefinitions.update(r,this.attributes)}getAttributeDefinitions(){return Et.attributeDefinitions}setBorderWidth(r){this.attributes.borderWidth=r}setBorderHeight(r){this.attributes.borderHeight=r}static getAttributeDefinitions(){return lt.ensureAttributePairing(),Et.attributeDefinitions}static createAttributeDefinitions(){const r=new pi;return r.add("type",Et.TYPE,!0).setType(te.STRING).setFixed(),r.add("id",void 0).setType(te.STRING).setDescription("the unique id of the tab, if left undefined a uuid will be assigned"),r.add("name","[Unnamed Tab]").setType(te.STRING).setDescription("name of tab to be displayed in the tab button"),r.add("component",void 0).setType(te.STRING).setDescription("string identifying which component to render in this tab (used in the layout factory function)"),r.add("subLayoutId",void 0).setType(te.STRING).setDescription(`the Id of the sub layout to render in this tab, defined in the subLayouts section of the model json (if component is also defined then use the component in the factory to render the sublayout)`),r.add("altName",void 0).setType(te.STRING).setDescription("the name used in the overflow menu when the tab has no name (e.g. an icon-only tab)"),r.add("helpText",void 0).setType(te.STRING).setDescription("help text for the tab to be displayed upon tab hover"),r.add("config",void 0).setType("any").setDescription("a place to hold json config for the hosted component"),r.add("tabsetClassName",void 0).setType(te.STRING).setDescription("class applied to parent tabset when this is the only tab and it is stretched to fill the tabset"),r.add("enableWindowReMount",!1).setType(te.BOOLEAN).setDescription("if enabled the tab will re-mount when popped out/in"),r.add("pinned",!1).setType(te.BOOLEAN).setDescription(`whether the tab is pinned; pinned tabs are grouped at the start of the tabstrip, cannot be closed via the ui, and cannot be dragged out of their tabset (they can be reordered within the pinned group). Set via Actions.setTabPinned. Only applies to tabs in tabsets (not borders); pinned tabs should be listed first in the json`),r.addInherited("enableClose","tabEnableClose").setDescription("whether the tab can be closed by the user via its close button"),r.addInherited("closeType","tabCloseType").setDescription("when the tab's close button is active: Visible (default) active if selected or hovered (note: mobile doesnt support hovered), Always: always active, Selected only active on selected tab (clicking on the x button on a non-selected tab will just select it)"),r.addInherited("enableDrag","tabEnableDrag").setDescription("whether the user can drag the tab to a new location"),r.addInherited("enableRename","tabEnableRename").setDescription("whether the user can rename the tab by double clicking"),r.addInherited("enablePin","tabEnablePin").setDescription("whether the user can pin/unpin the tab via the context menu"),r.addInherited("className","tabClassName").setDescription("class applied to tab button"),r.addInherited("contentClassName","tabContentClassName").setDescription("class applied to tab content"),r.addInherited("icon","tabIcon").setDescription("the tab icon"),r.addInherited("enableRenderOnDemand","tabEnableRenderOnDemand").setDescription("whether to avoid rendering component until tab is visible"),r.addInherited("enablePopout","tabEnablePopout").setAlias("enableFloat").setDescription("enable window popout (in popout capable browser), to show an icon in the tabset header also set the enablePopoutIcon attribute"),r.addInherited("enablePopoutIcon","tabEnablePopoutIcon").setDescription("whether to show the popout icon in the tabset header if this tab enables popouts"),r.addInherited("enablePopoutFloatIcon","tabEnablePopoutFloatIcon").setDescription("whether to show the popout float icon in the tabset header if this tab enables floating popouts"),r.addInherited("enablePopoutOverlay","tabEnablePopoutOverlay").setDescription(`if this tab will not work correctly in a popout window when the main window is backgrounded (inactive) - then enabling this option will gray out this tab`),r.addInherited("borderWidth","tabBorderWidth").setDescription("the width of this tab when shown in a border; -1 uses the border's default size"),r.addInherited("borderHeight","tabBorderHeight").setDescription("the height of this tab when shown in a border; -1 uses the border's default size"),r.addInherited("minWidth","tabMinWidth").setDescription("the minimum width (in px) of this tab"),r.addInherited("minHeight","tabMinHeight").setDescription("the minimum height (in px) of this tab"),r.addInherited("maxWidth","tabMaxWidth").setDescription("the maximum width (in px) of this tab"),r.addInherited("maxHeight","tabMaxHeight").setDescription("the maximum height (in px) of this tab"),r.addInherited("enableScrollbars","tabEnableScrollbars").setDescription("whether the tab will be hosted in a scrollable container"),r}},I(Et,"TYPE","tab"),I(Et,"attributeDefinitions",Et.createAttributeDefinitions()),Et),lo={width:"1em",height:"1em",display:"flex",alignItems:"center"},Sl=()=>s.jsxs("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:lo,viewBox:"0 0 24 24",children:[s.jsx("path",{fill:"none",d:"M0 0h24v24H0z"}),s.jsx("path",{stroke:"var(--color-icon)",fill:"var(--color-icon)",d:"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"})]});Sl.displayName="CloseIcon";var om=()=>s.jsxs("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:lo,viewBox:"0 0 24 24",fill:"var(--color-icon)",children:[s.jsx("path",{fill:"none",d:"M0 0h24v24H0z"}),s.jsx("path",{transform:"rotate(45 12 12)",d:"M16 9V4h1a1 1 0 000-2H7a1 1 0 000 2h1v5c0 1.66-1.34 3-3 3v2h5.97v7l1 1 1-1v-7H19v-2c-1.66 0-3-1.34-3-3z"})]});om.displayName="PinIcon";var nm=()=>s.jsxs("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:lo,viewBox:"0 0 24 24",fill:"var(--color-icon)",children:[s.jsx("path",{d:"M0 0h24v24H0z",fill:"none"}),s.jsx("path",{stroke:"var(--color-icon)",d:"M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z"})]});nm.displayName="MaximizeIcon";var im=()=>s.jsxs("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:lo,viewBox:"0 0 24 24",fill:"var(--color-icon)",children:[s.jsx("path",{d:"M0 0h24v24H0z",fill:"none"}),s.jsx("path",{stroke:"var(--color-icon)",d:"M7 10l5 5 5-5z"})]});im.displayName="OverflowIcon";var am=()=>s.jsx("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:{display:"block",width:10,height:10},preserveAspectRatio:"none",viewBox:"0 0 100 100",children:s.jsx("path",{fill:"var(--color-edge-icon)",stroke:"var(--color-edge-icon)",d:"M10 30 L90 30 l-40 40 Z"})});am.displayName="EdgeIcon";var Ju=()=>s.jsxs("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:lo,viewBox:"0 0 20 20",fill:"var(--color-icon)",children:[s.jsx("path",{d:"M11 3a1 1 0 100 2h2.586l-6.293 6.293a1 1 0 101.414 1.414L15 6.414V9a1 1 0 102 0V4a1 1 0 00-1-1h-5z"}),s.jsx("path",{d:"M5 5a2 2 0 00-2 2v8a2 2 0 002 2h8a2 2 0 002-2v-3a1 1 0 10-2 0v3H5V7h3a1 1 0 000-2H5z"})]});Ju.displayName="PopoutIcon";var lm=()=>s.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 -960 960 960",style:lo,fill:"var(--color-icon)",children:s.jsx("path",{d:"M360-280q-33 0-56.5-23.5T280-360v-400q0-33 23.5-56.5T360-840h400q33 0 56.5 23.5T840-760v400q0 33-23.5 56.5T760-280H360Zm0-80h400v-400H360v400ZM200-200v80q-33 0-56.5-23.5T120-200h80Zm-80-80v-80h80v80h-80Zm0-160v-80h80v80h-80Zm0-160v-80h80v80h-80Zm160 480v-80h80v80h-80Zm160 0v-80h80v80h-80Zm160 0v-80h80v80h-80Z"})});lm.displayName="PopoutFloatIcon";var sm=()=>s.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",style:lo,fill:"var(--color-icon)",children:s.jsx("path",{d:"M4 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm0 6a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm0 6a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm6-12a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm0 6a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm0 6a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm6-12a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm0 6a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm0 6a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"})});sm.displayName="GripIcon";var cm=()=>s.jsxs("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:lo,viewBox:"0 0 24 24",fill:"var(--color-icon)",children:[s.jsx("path",{d:"M0 0h24v24H0z",fill:"none"}),s.jsx("path",{stroke:"var(--color-icon)",d:"M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h3v-2h-5v5zm2-11V5h-2v5h5V8h-3z"})]});cm.displayName="RestoreIcon";var um=()=>s.jsx("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:lo,height:"24px",viewBox:"0 -960 960 960",width:"24px",children:s.jsx("path",{fill:"var(--color-icon)",stroke:"var(--color-icon)",d:"M440-120v-264L254-197l-57-57 187-186H120v-80h264L197-706l57-57 186 187v-264h80v264l186-187 57 57-187 186h264v80H576l187 186-57 57-186-187v264h-80Z"})});um.displayName="AsterickIcon";var dm=e=>{const{controller:t,show:r}=e;return s.jsx("div",{"aria-hidden":"true",className:t.getClassName(U.FLEXLAYOUT__LAYOUT_OVERLAY),style:{display:r?"flex":"none"}})};dm.displayName="Overlay";var Me=function(e){return e.Close_Tab="Close",e.Pinned_Tab="Pinned",e.Rename_Tab="Rename tab",e.Close_Tabset="Close tab set",e.Active_Tabset="Active tab set",e.Move_Tabset="Move tab set",e.Move_Tabs="Move tabs (?)",e.Maximize="Maximize tab set",e.Restore="Restore tab set",e.Popout_Tab="Popout selected tab",e.Popout_Tab_Float="Float selected tab",e.Popout_Float_To_Window="Popout panel",e.Dock_Float_To_Layout="Drag into another layout",e.Dock_Float_Tabs="Dock tabs (?)",e.Overflow_Menu_Tooltip="Hidden tabs",e.Splitter="Resize",e.Error_rendering_component="Error rendering component",e.Error_rendering_component_retry="Retry",e.Menu_Rename="Rename",e.Menu_Pin="Pin",e.Menu_Unpin="Unpin",e.Menu_Popout="Popout",e.Menu_Float="Float",e.Menu_Popout_Tabset="Pop out tabset",e.Menu_Float_Tabset="Float tabset",e.Menu_Maximize="Maximize",e.Menu_Restore="Restore",e.Menu_Overlay="Overlay",e.Menu_Split="Split",e.Menu_Close_All="Close All",e.Menu_Close_Right="Close to the Right",e.Menu_Close_Others="Close Others",e}({}),va=e=>{const{controller:t,tabNode:r}=e,o=t.getClassName,n=o(U.FLEXLAYOUT__TAB_BUTTON_STAMP),i=Ef(t,r),a=i.content?s.jsx("div",{className:o(U.FLEXLAYOUT__TAB_BUTTON_CONTENT),children:i.content}):r.getNameForOverflowMenu(),l=i.leading?s.jsx("div",{className:o(U.FLEXLAYOUT__TAB_BUTTON_LEADING),children:i.leading}):null;return s.jsxs("div",{className:n,title:r.getHelpText(),children:[l,a]})};va.displayName="TabButtonStamp";var Z0=500;function qs(e){return typeof e.getBoundingClientRect=="function"}function fm(e){return e.container?e.container:qs(e.anchor)?e.anchor.ownerDocument.body:document.body}function Q0(e){if(qs(e))return e.getBoundingClientRect();if("right"in e&&"bottom"in e)return e;const t=e;return new DOMRect(t.x,t.y,0,0)}function e1(e,t){const r=t,{left:o,right:n,top:i,bottom:a}=e,l={};return(o+n)/2{const{anchor:t,items:r,onSelect:o,onClose:n,renderItem:i,title:a}=e,l=e.classNameMapper??(b=>b),c=fm(e),u=m.useRef(null),d=m.useRef(null),f=m.useRef({buffer:"",timer:void 0});m.useEffect(()=>()=>{f.current.timer&&clearTimeout(f.current.timer)},[]);const p=m.useCallback(b=>{b.disabled||((b.onSelect??o)?.(b),n())},[o,n]);m.useEffect(()=>{(d.current?.querySelector('[role="menuitem"]:not([aria-disabled="true"])')??d.current)?.focus();const b=e.returnFocusTo??(qs(t)?t:void 0);return()=>{b?.focus?.()}},[]),m.useEffect(()=>{const b=c.ownerDocument,h=v=>{u.current?.contains(v.target)||n()};return b.addEventListener("pointerdown",h),()=>b.removeEventListener("pointerdown",h)},[c,n]);const g=b=>{const h=Array.from(d.current?.querySelectorAll('[role="menuitem"]:not([aria-disabled="true"])')??[]),v=b.target.closest?.('[role="menuitem"]'),_=v?h.indexOf(v):-1;if(b.key==="Escape"||b.key==="Tab")n(),b.preventDefault();else if(b.key==="ArrowDown"||b.key==="ArrowUp")h.length>0&&h[(_+(b.key==="ArrowDown"?1:-1)+h.length)%h.length]?.focus(),b.preventDefault();else if(b.key==="Home"||b.key==="End")(b.key==="Home"?h[0]:h[h.length-1])?.focus(),b.preventDefault();else if(b.key.length===1&&b.key!==" "&&!b.ctrlKey&&!b.metaKey&&!b.altKey){const y=f.current;y.timer&&clearTimeout(y.timer),y.buffer+=b.key.toLowerCase(),y.timer=setTimeout(()=>{y.buffer=""},Z0);const T=[...y.buffer].every(N=>N===y.buffer[0]),S=T?y.buffer[0]:y.buffer,z=T?_+1:Math.max(_,0);for(let N=0;N({select:()=>p(b),close:n}),w=b=>s.jsx("div",{className:l(U.FLEXLAYOUT__POPUP_MENU_ITEM)+(b.disabled?" "+l(U.FLEXLAYOUT__POPUP_MENU_ITEM__DISABLED):""),role:"menuitem",tabIndex:-1,"aria-disabled":b.disabled||void 0,onClick:h=>{p(b),h.stopPropagation()},children:b.content??s.jsxs(s.Fragment,{children:[b.icon,b.label]})},b.key),k=s.jsx("div",{ref:u,className:l(U.FLEXLAYOUT__POPUP_MENU_CONTAINER),style:e1(Q0(t),c.getBoundingClientRect()),children:s.jsx("div",{ref:d,className:l(U.FLEXLAYOUT__POPUP_MENU),role:"menu","aria-label":a,tabIndex:0,onKeyDown:g,"data-layout-path":"/popup-menu",children:r.map((b,h)=>b.type==="divider"?s.jsx("div",{className:l(U.FLEXLAYOUT__POPUP_MENU_DIVIDER),role:"separator"},b.key):i?i(b,h,x(b)):w(b))})});return Ur.createPortal(k,c)};function t1(e){const t=fm(e),r=qs(e.anchor)?e.anchor.getBoundingClientRect():e.anchor,o=t.ownerDocument.createElement("div");t.appendChild(o);const n=ci(o);let i=!1;const a=()=>{i||(i=!0,n.unmount(),o.remove(),e.onClose())};return n.render(s.jsx(pm,{...e,anchor:r,container:t,onClose:a})),a}function hm(e,t,r,o,n,i){const a=n.getClassName,l=r.map(u=>({key:u.node.getId()}));n.showOverlayOnAllWindows(!0);const c=(u,d,f)=>{const p=r[d];let g=a(U.FLEXLAYOUT__POPUP_MENU_ITEM);return t.getSelected()===p.index&&(g+=" "+a(U.FLEXLAYOUT__POPUP_MENU_ITEM__SELECTED)),s.jsx("div",{className:g,role:"menuitem","aria-label":p.node.getNameForOverflowMenu(),tabIndex:-1,"data-layout-path":"/popup-menu/tb"+d,onClick:x=>{f.select(),x.stopPropagation()},draggable:!0,onDragStart:x=>{x.stopPropagation(),n.getDragDropManager().setDragNode(x.nativeEvent,p.node),setTimeout(()=>f.close(),0)},onDragEnd:()=>n.getDragDropManager().onDragEnded(),title:p.node.getHelpText(),children:s.jsx(va,{tabNode:p.node,controller:n})},u.key)};return t1({anchor:e,container:n.getRootDiv()??void 0,classNameMapper:a,returnFocusTo:e,title:n.i18nName(Me.Overflow_Menu_Tooltip),items:l,onSelect:u=>{const d=l.indexOf(u);d>=0&&o(r[d])},renderItem:c,onClose:()=>{n.showOverlayOnAllWindows(!1),i?.()}})}pm.displayName="PopupMenu";var gm=e=>{const{controller:t,tabNode:r,selected:o,path:n}=e,i=m.useRef(null),a=m.useRef(null),l=t.getIcons(),c=t.getKeyMap(),u=t.getEditingTab()===r,d=m.useCallback(F=>{i.current=F,t.registerMeasurable(r,"tabbutton",F)},[t,r]);m.useLayoutEffect(()=>{u&&a.current.select()},[u]),m.useEffect(()=>{if(u){const F=t.getCurrentDocument().body,ie=X=>{X.target!==a.current&&t.setEditingTab(void 0)};return F.addEventListener("pointerdown",ie),()=>F.removeEventListener("pointerdown",ie)}},[u,t]);const f=F=>{r.isEnableDrag()?(F.stopPropagation(),t.getDragDropManager().setDragNode(F.nativeEvent,r)):F.preventDefault()},p=F=>{t.getDragDropManager().onDragEnded()},g=F=>{ba(F)&&t.auxMouseClick(r,F)},x=F=>{t.showContextMenu(r,F)},w=()=>{r.isSelected()||t.doAction(re.selectTab(r.getId()))},k=F=>{const ie=i.current?.closest('[role="tablist"]');if(ie){const X=Array.from(ie.querySelectorAll('[role="tab"]'));X[X.indexOf(i.current)+F]?.focus()}},b=()=>{const F=i.current.ownerDocument,ie=()=>Zv(F.getElementById(Lt("flexlayout-tab-",r.getId())));o?ie():(w(),requestAnimationFrame(ie))},h=F=>{u||(eo(F,c.focusTabToggle)?(b(),F.preventDefault()):F.key==="Enter"||F.key===" "?(o?b():w(),F.preventDefault()):(F.key==="ArrowLeft"||F.key==="ArrowUp")&&!ga(F)?(k(-1),F.preventDefault()):(F.key==="ArrowRight"||F.key==="ArrowDown")&&!ga(F)?(k(1),F.preventDefault()):eo(F,c.closeTab)&&r.isCloseable()?(k(1),t.doAction(re.deleteTab(r.getId())),F.preventDefault()):eo(F,c.renameTab)&&r.isEnableRename()&&(_(),F.preventDefault()))},v=F=>{r.isEnableRename()&&(_(),F.stopPropagation())},_=()=>{t.setEditingTab(r)},y=()=>{const F=r.getCloseType();return!!(o||F===en.Always||F===en.Visible&&window.matchMedia&&window.matchMedia("(hover: hover) and (pointer: fine)").matches)},T=F=>{y()&&(t.doAction(re.deleteTab(r.getId())),F.stopPropagation())},S=F=>{F.stopPropagation()},z=F=>{F.stopPropagation()},N=F=>{F.code==="Escape"?(t.setEditingTab(void 0),i.current?.focus()):(F.code==="Enter"||F.code==="NumpadEnter")&&(t.setEditingTab(void 0),t.doAction(re.renameTab(r.getId(),F.target.value)),i.current?.focus())},P=t.getClassName,B=r.getParent(),O=B.isEnableSingleTabStretch()&&B.getChildren().length===1,E=O?U.FLEXLAYOUT__TAB_BUTTON_STRETCH:U.FLEXLAYOUT__TAB_BUTTON;let A=P(E);A+=" "+P(E+"_"+B.getTabLocation()),O||(o?A+=" "+P(E+"--selected"):A+=" "+P(E+"--unselected")),r.isPinned()&&(A+=" "+P(E+"--pinned")),r.getClassName()!==void 0&&(A+=" "+r.getClassName());const C=Ef(t,r),R=o||B.getSelectedNode()===void 0&&B.getChildren()[0]===r,M=[Co(c.focusTabToggle),r.isCloseable()?Co(c.closeTab):void 0,r.isEnableRename()?Co(c.renameTab):void 0].filter(Boolean).join(" ")||void 0;let D=C.content?s.jsx("div",{className:P(U.FLEXLAYOUT__TAB_BUTTON_CONTENT),children:C.content}):null;const W=C.leading?s.jsx("div",{className:P(U.FLEXLAYOUT__TAB_BUTTON_LEADING),children:C.leading}):null;if(u&&(D=s.jsx("input",{ref:a,className:P(U.FLEXLAYOUT__TAB_BUTTON_TEXTBOX),"data-layout-path":n+"/textbox",type:"text","aria-label":t.i18nName(Me.Rename_Tab),autoFocus:!0,defaultValue:r.getName(),onKeyDown:N,onPointerDown:z})),r.isPinned()){const F=t.i18nName(Me.Pinned_Tab);C.buttons.push(s.jsx("div",{"data-layout-path":n+"/button/pin",title:F,"aria-hidden":"true",className:P(U.FLEXLAYOUT__TAB_BUTTON_PIN),children:typeof l.pin=="function"?l.pin(r):l.pin},"pin"))}if(r.isCloseable()&&!O){const F=t.i18nName(Me.Close_Tab);C.buttons.push(s.jsx("div",{"data-layout-path":n+"/button/close",title:F,"aria-hidden":"true",className:P(U.FLEXLAYOUT__TAB_BUTTON_TRAILING),onPointerDown:S,onClick:T,children:typeof l.close=="function"?l.close(r):l.close},"close"))}return s.jsxs("div",{ref:d,id:Lt("flexlayout-tabbutton-",r.getId()),role:u?void 0:"tab","aria-selected":u?void 0:o,"aria-controls":u?void 0:Lt("flexlayout-tab-",r.getId()),"aria-label":u?void 0:r.isPinned()?C.name+" ("+t.i18nName(Me.Pinned_Tab)+")":C.name,"aria-keyshortcuts":u?void 0:M,tabIndex:u?-1:R?0:-1,onKeyDown:h,"data-layout-path":n,className:A,onClick:w,onAuxClick:g,onContextMenu:x,title:r.getHelpText(),draggable:!0,onDragStart:f,onDragEnd:p,onDoubleClick:v,children:[W,D,C.buttons]})};gm.displayName="TabButton";var bm=(e,t,r,o,n,i,a)=>{const[l,c]=m.useState([]),[u,d]=m.useState(!1),[f,p]=m.useState(!1),g=m.useRef(!1),x=m.useRef(void 0),w=m.useRef([]),k=m.useRef(0),b=m.useRef(!1);m.useEffect(()=>()=>{x.current!==void 0&&clearTimeout(x.current)},[]),m.useLayoutEffect(()=>{w.current=l});const h=m.useCallback(q=>{r===_e.HORZ?o.current.scrollLeft=q:o.current.scrollTop=q},[r,o]),v=m.useCallback(q=>r===_e.HORZ?q.scrollLeft:q.scrollTop,[r]),_=m.useCallback(q=>r===_e.HORZ?q.clientWidth:q.clientHeight,[r]),y=m.useCallback(q=>r===_e.HORZ?q.scrollWidth:q.scrollHeight,[r]),T=m.useCallback(q=>r===_e.HORZ?q.width:q.height,[r]),S=m.useCallback(q=>r===_e.HORZ?q.x:q.y,[r]),z=m.useCallback(q=>r===_e.HORZ?q.right:q.bottom,[r]),N=m.useCallback(()=>{const q=[];if(o.current){const Z=o.current,Y=Z.getBoundingClientRect(),Q=S(Y)-1,oe=z(Y)+1,le=Z.firstElementChild;let Ce=0;Array.from(le.children).forEach(Ee=>{const ve=Ee.getBoundingClientRect();Ee.classList.contains(a)&&((S(ve)oe)&&q.push(Ce),Ce++)})}return q},[a,o,S,z]),P=m.useCallback(()=>{if(o.current&&n.current){const q=o.current,Z=n.current,Y=_(q),Q=y(q),oe=v(q);if(Q>Y&&Q>0){let le=Y*Y/Q,Ce=0;le<20&&(Ce=20-le,le=20);const Ee=oe*(Y-Ce)/Q;r===_e.HORZ?(Z.style.width=le+"px",Z.style.left=Ee+"px"):(Z.style.height=le+"px",Z.style.top=Ee+"px"),Z.style.display="block"}else Z.style.display="none";r===_e.HORZ?Z.style.bottom="0px":Z.style.right="0px"}},[r,o,n,_,y,v]),B=m.useCallback((q=!1)=>{const Z=N(),Y=Z.length>0;Y!==u&&d(Y),q?c(Z):x.current===void 0&&(x.current=setTimeout(()=>{const Q=N();r1(Q,w.current)||c(Q),x.current=void 0},100))},[N,u]),O=m.useCallback(()=>{const q=t.getSelectedNode();if(q&&o.current){const Z=e.getBoundingClientRect(o.current),Y=o.current.ownerDocument.getElementById(Lt("flexlayout-tabbutton-",q.getId()));if(!Y)return;const Q=e.getBoundingClientRect(Y);let oe=S(Z)-S(Q);oe>0||T(Q)>T(Z)?(h(v(o.current)-oe),b.current=!0):(oe=z(Q)-z(Z),oe>0&&(h(v(o.current)+oe),b.current=!0))}},[t,e,o,S,z,T,v,h]),E=m.useCallback(()=>{if(o.current){const q=o.current;let Z=0;for(const Q of Array.from(q.children))Z+=_(Q);const Y=Z+(f?10:0)>_(o.current);Y!==f&&p(Y)}},[o,f,_]),A=m.useCallback(()=>{b.current||(g.current=!0),b.current=!1,P(),B()},[P,B]),C=m.useCallback((q,Z)=>{if(o.current&&n.current){const Y=o.current,Q=n.current,oe=_(Y),le=y(Y),Ce=_(Q),Ee=Y.getBoundingClientRect();let ve;if(r===_e.HORZ?ve=q-Ee.x-k.current:ve=Z-Ee.y-k.current,ve=Math.max(0,Math.min(le-Ce,ve)),oe>0){const It=ve*le/oe;h(It)}}},[o,n,r,_,y,h]),R=m.useCallback(()=>{},[]),M=m.useCallback(()=>{},[]),D=m.useCallback(q=>{q.stopPropagation(),n.current.setPointerCapture(q.pointerId);const Z=n.current.getBoundingClientRect();r===_e.HORZ?k.current=q.clientX-Z.x:k.current=q.clientY-Z.y,as(q.currentTarget.ownerDocument,q,C,R,M)},[n,r,C,R,M]),W=m.useCallback(q=>{if(o.current){if(t.getChildren().length===0)return;let Z;if(Math.abs(q.deltaY)>0){Z=-q.deltaY,q.deltaMode===1&&(Z*=40);const Y=v(o.current)-Z,Q=y(o.current)-_(o.current);h(Math.max(0,Math.min(Q,Y))),q.stopPropagation()}}},[t,o,v,y,_,h]),F=m.useCallback(q=>{q.preventDefault()},[]),ie=t.getId(),X=t.getSelectedNode();return m.useLayoutEffect(()=>{o.current&&h(0)},[ie,o,h]),m.useLayoutEffect(()=>{g.current=!1},[X]),m.useLayoutEffect(()=>{E(),g.current===!1&&O(),P(),B(!0),requestAnimationFrame(()=>{B()})},[E,O,P,B,r,X]),m.useLayoutEffect(()=>{const q=o.current;if(!q)return;const Z=new q.ownerDocument.defaultView.ResizeObserver(()=>{g.current=!1,E(),O(),P(),B()});return Z.observe(q),()=>Z.disconnect()},[E,O,P,B,o]),m.useEffect(()=>{if(t instanceof Ne&&t.isEnableTabWrap())return;const q=i.current;return q?.addEventListener("wheel",F,{passive:!1}),()=>{q?.removeEventListener("wheel",F)}}),{userControlledPositionRef:g,onScroll:A,onScrollPointerDown:D,hiddenTabs:l,onMouseWheel:W,isDockStickyButtons:f,isShowHiddenTabs:u}};function r1(e,t){return e.length===t.length&&e.every((r,o)=>r===t[o])}var vm=e=>{const{tabsetNode:t,controller:r}=e,o=m.useRef(null),n=m.useRef(null),i=m.useRef(null),a=m.useRef(null),l=m.useRef(null),c=m.useRef(null),u=m.useRef(null),d=m.useRef(null),[f,p]=m.useState(!1),g=m.useRef(null),x=r.getIcons();m.useEffect(()=>()=>g.current?.(),[]);const{userControlledPositionRef:w,onScroll:k,onScrollPointerDown:b,hiddenTabs:h,onMouseWheel:v,isDockStickyButtons:_,isShowHiddenTabs:y}=bm(r,t,_e.HORZ,a,i,n,r.getClassName(U.FLEXLAYOUT__TAB_BUTTON)),T=m.useCallback($=>{o.current=$,r.registerMeasurable(t,"tabset",$)},[r,t]),S=m.useCallback($=>{n.current=$,r.registerMeasurable(t,"tabstrip",$)},[r,t]),z=m.useCallback($=>{l.current=$,r.registerMeasurable(t,"tabsetcontent",$)},[r,t]),N=$=>{const pe=r.getShowOverflowMenu(),fe=h.map(he=>({index:he,node:t.getChildren()[he]}));if(pe!==void 0)pe(t,$,fe,P);else{const he=u.current;p(!0),g.current=hm(he,t,fe,P,r,()=>{p(!1),g.current=null})}$.stopPropagation()},P=$=>{r.doAction(re.selectTab($.node.getId())),w.current=!1},B=$=>{r.getEditingTab()?$.preventDefault():t.isEnableDrag()?($.stopPropagation(),r.getDragDropManager().setDragNode($.nativeEvent,t)):$.preventDefault()},O=$=>{!ba($)&&!t.isActive()&&r.doAction(re.setActiveTabset(t.getId(),r.getLayoutId()))},E=$=>{ba($)&&r.auxMouseClick(t,$)},A=$=>{r.showContextMenu(t,$)},C=$=>{$.stopPropagation()},R=$=>{t.canMaximize()&&r.maximize(t),$.stopPropagation()},M=$=>{r.doAction(re.deleteTabset(t.getId())),$.stopPropagation()},D=$=>{r.doAction(re.deleteTab(t.getChildren()[0].getId())),$.stopPropagation()},W=$=>{q!==void 0&&r.doAction(re.popoutTab(q.getId(),"window")),$.stopPropagation()},F=$=>{q!==void 0&&r.doAction(re.popoutTab(q.getId(),"float")),$.stopPropagation()},ie=$=>{t.canMaximize()&&r.maximize(t)},X=r.getClassName,q=t.getSelectedNode(),Z=t.getPath(),Y=()=>{const $=[];let pe=!1;if(t.isEnableTabStrip()){const fe=t.isEnableSingleTabStretch()&&t.getChildren().length===1;for(let he=0;he{let $,pe=[],fe=[];const he={leading:$,stickyButtons:pe,buttons:fe,overflowPosition:void 0};r.customizeTabSet(t,he),$=he.leading,pe=he.stickyButtons,fe=he.buttons;const ot=t.isEnableSingleTabStretch()&&t.getChildren().length===1;let nt=ot&&t.getChildren()[0].isCloseable()||t.isCloseable();nt=nt&&t.isEnableCloseButton(),he.overflowPosition===void 0&&(he.overflowPosition=pe.length);let ye;if(pe.length>0&&(!t.isEnableTabWrap()&&(_||ot)?fe=[...pe,...fe]:ye=s.jsx("div",{ref:d,onPointerDown:C,onDragStart:me=>{me.preventDefault()},className:X(U.FLEXLAYOUT__TAB_TOOLBAR_STICKY_BUTTONS_CONTAINER),children:pe},"sticky_buttons_container")),!t.isEnableTabWrap()&&y){const me=r.i18nName(Me.Overflow_Menu_Tooltip);let we;if(typeof x.more=="function"){const qe=h.map(gt=>({index:gt,node:t.getChildren()[gt]}));we=x.more(t,qe)}else we=s.jsxs(s.Fragment,{children:[x.more,s.jsx("div",{className:X(U.FLEXLAYOUT__TAB_BUTTON_OVERFLOW_COUNT),children:h.length>0?h.length:""})]});fe.splice(Math.min(he.overflowPosition,fe.length),0,s.jsx("button",{tabIndex:0,"data-layout-path":Z+"/button/overflow","aria-haspopup":"menu","aria-expanded":f,"aria-label":me,ref:u,className:X(U.FLEXLAYOUT__TAB_TOOLBAR_BUTTON)+" "+X(U.FLEXLAYOUT__TAB_BUTTON_OVERFLOW),title:me,onClick:N,onPointerDown:C,children:we},"overflowbutton"))}if(q!==void 0&&!q.isPinned()){if(q.isEnablePopoutFloatIcon()){const me=r.i18nName(Me.Popout_Tab_Float);fe.push(s.jsx("button",{tabIndex:0,"data-layout-path":Z+"/button/popout-float",title:me,"aria-label":me,className:X(U.FLEXLAYOUT__TAB_TOOLBAR_BUTTON)+" "+X(U.FLEXLAYOUT__TAB_TOOLBAR_BUTTON_FLOAT),onClick:F,onPointerDown:C,children:typeof x.popoutFloat=="function"?x.popoutFloat(q):x.popoutFloat},"popout-float"))}if(r.isSupportsPopout()&&q.isAllowedInWindow()&&q.isEnablePopoutIcon()){const me=r.i18nName(Me.Popout_Tab);fe.push(s.jsx("button",{tabIndex:0,"data-layout-path":Z+"/button/popout",title:me,"aria-label":me,className:X(U.FLEXLAYOUT__TAB_TOOLBAR_BUTTON)+" "+X(U.FLEXLAYOUT__TAB_TOOLBAR_BUTTON_FLOAT),onClick:W,onPointerDown:C,children:typeof x.popout=="function"?x.popout(q):x.popout},"popout"))}}if(t.canMaximize()){const me=r.i18nName(Me.Restore),we=r.i18nName(Me.Maximize);fe.push(s.jsx("button",{tabIndex:0,"data-layout-path":Z+"/button/max",title:t.isMaximized()?me:we,"aria-label":t.isMaximized()?me:we,"aria-pressed":t.isMaximized(),className:X(U.FLEXLAYOUT__TAB_TOOLBAR_BUTTON)+" "+X(U.FLEXLAYOUT__TAB_TOOLBAR_BUTTON_+(t.isMaximized()?"max":"min")),onClick:R,onPointerDown:C,children:t.isMaximized()?typeof x.restore=="function"?x.restore(t):x.restore:typeof x.maximize=="function"?x.maximize(t):x.maximize},"max"))}if(!t.isMaximized()&&nt){const me=ot?r.i18nName(Me.Close_Tab):r.i18nName(Me.Close_Tabset);fe.push(s.jsx("button",{tabIndex:0,"data-layout-path":Z+"/button/close",title:me,"aria-label":me,className:X(U.FLEXLAYOUT__TAB_TOOLBAR_BUTTON)+" "+X(U.FLEXLAYOUT__TAB_TOOLBAR_BUTTON_CLOSE),onClick:ot?D:M,onPointerDown:C,children:typeof x.closeTabset=="function"?x.closeTabset(t):x.closeTabset},"close"))}if(t.isActive()&&t.isEnableActiveIcon()){const me=r.i18nName(Me.Active_Tabset);fe.push(s.jsx("div",{"data-layout-path":Z+"/button/active",title:me,"aria-hidden":"true",className:X(U.FLEXLAYOUT__TAB_TOOLBAR_ICON),children:typeof x.activeTabset=="function"?x.activeTabset(t):x.activeTabset},"active"))}const We=s.jsx("div",{ref:c,className:X(U.FLEXLAYOUT__TAB_TOOLBAR),onPointerDown:C,onDragStart:me=>{me.preventDefault()},children:fe},"buttonbar");return{leading:$,buttonbar:We,stickyBar:ye}},oe=($,pe,fe,he)=>{let ot;const nt=r.getKeyMap(),ye=[Co(nt.focusNextTabset),Co(nt.focusPreviousTabset)].filter(Boolean).join(" ")||void 0,We=r.getEditingTab()?.getParent()===t,me=We?void 0:"tablist";let we=X(U.FLEXLAYOUT__TABSET_TABBAR_OUTER);t.getClassNameTabStrip()!==void 0&&(we+=" "+t.getClassNameTabStrip()),we+=" "+U.FLEXLAYOUT__TABSET_TABBAR_OUTER_+t.getTabLocation(),t.isActive()&&(we+=" "+X(U.FLEXLAYOUT__TABSET_SELECTED)),t.isMaximized()&&(we+=" "+X(U.FLEXLAYOUT__TABSET_MAXIMIZED));const qe=t.isEnableSingleTabStretch()&&t.getChildren().length===1;if(qe){const Sr=t.getChildren()[0];Sr.getTabSetClassName()!==void 0&&(we+=" "+Sr.getTabSetClassName())}let gt;if(pe&&(gt=s.jsx("div",{className:X(U.FLEXLAYOUT__TABSET_LEADING),children:pe})),t.isEnableTabWrap())t.isEnableTabStrip()&&(ot=s.jsxs("div",{className:we,style:{flexWrap:"wrap",gap:"1px",marginTop:"2px"},ref:S,"data-layout-path":Z+"/tabstrip",onPointerDown:O,onDoubleClick:ie,onContextMenu:A,onClick:E,onAuxClick:E,draggable:!0,onDragStart:B,children:[gt,s.jsx("div",{role:me,"aria-orientation":We?void 0:"horizontal","aria-label":We?void 0:t.getName(),"aria-keyshortcuts":We?void 0:ye,style:{display:"contents"},children:$}),he,s.jsx("div",{style:{flexGrow:1,display:"flex",justifyContent:"flex-end"},children:fe})]}));else if(t.isEnableTabStrip()){let Sr;t.isEnableTabScrollbar()&&(Sr=s.jsx("div",{ref:i,"aria-hidden":"true",className:X(U.FLEXLAYOUT__MINI_SCROLLBAR),onPointerDown:b})),ot=s.jsxs("div",{className:we,ref:S,"data-layout-path":Z+"/tabstrip",onPointerDown:O,onDoubleClick:ie,onContextMenu:A,onClick:E,onAuxClick:E,draggable:!0,onWheel:v,onDragStart:B,children:[gt,s.jsxs("div",{className:X(U.FLEXLAYOUT__MINI_SCROLLBAR_CONTAINER),children:[s.jsxs("div",{ref:a,className:X(U.FLEXLAYOUT__TABSET_TABBAR_INNER)+" "+X(U.FLEXLAYOUT__TABSET_TABBAR_INNER_+t.getTabLocation()),style:{overflowX:"auto",overflowY:"hidden"},onScroll:k,children:[s.jsx("div",{style:{width:qe?"100%":"none"},role:me,"aria-orientation":We?void 0:"horizontal","aria-label":We?void 0:t.getName(),"aria-keyshortcuts":We?void 0:ye,className:X(U.FLEXLAYOUT__TABSET_TABBAR_INNER_TAB_CONTAINER)+" "+X(U.FLEXLAYOUT__TABSET_TABBAR_INNER_TAB_CONTAINER_+t.getTabLocation()),children:$}),he]}),Sr]}),fe]})}return ot},le=$=>{let pe;if(t.getChildren().length===0){const he=r.getTabSetPlaceHolderCallback();he&&(pe=he(t))}let fe=s.jsx("div",{ref:z,className:X(U.FLEXLAYOUT__TABSET_CONTENT),children:pe});return t.getTabLocation()==="top"?fe=s.jsxs(s.Fragment,{children:[$,fe]}):fe=s.jsxs(s.Fragment,{children:[fe,$]}),fe},Ce=Y(),{leading:Ee,buttonbar:ve,stickyBar:It}=Q(),G=le(oe(Ce,Ee,ve,It)),de={flexGrow:Math.max(1,t.getWeight()*1e3),minWidth:t.getMinWidth(),minHeight:t.getMinHeight(),maxWidth:t.getMaxWidth(),maxHeight:t.getMaxHeight()};t.getModel().getMaximizedTabset(r.getLayoutId())!==void 0&&!t.isMaximized()&&(de.display="none");const se=s.jsx("div",{ref:T,className:X(U.FLEXLAYOUT__TABSET_CONTAINER),style:de,children:s.jsx("div",{className:X(U.FLEXLAYOUT__TABSET),"data-layout-path":Z,children:G})});return t.isMaximized()&&r.getMainElement()?Ur.createPortal(s.jsx("div",{style:{position:"absolute",display:"flex",top:0,left:0,bottom:0,right:0},children:se}),r.getMainElement()):se};vm.displayName="TabSet";var $i=e=>{const{controller:t,node:r,index:o,horizontal:n}=e,i=m.useRef(null),a=m.useRef(null),l=m.useRef([]),c=m.useRef(void 0),u=m.useRef(void 0),d=m.useRef(0),f=m.useRef(0),p=m.useRef({initialSizes:[],sum:0,startPosition:0}),g=m.useCallback(O=>{O.preventDefault(),O.stopImmediatePropagation()},[]);m.useEffect(()=>{const O=i.current,E=a.current;return O?.addEventListener("touchstart",g,{passive:!1}),E?.addEventListener("touchstart",g,{passive:!1}),()=>{O?.removeEventListener("touchstart",g),E?.removeEventListener("touchstart",g)}},[g]);const x=O=>{O.stopPropagation(),r instanceof Ue&&(p.current=r.getSplitterInitials(o)),El(!1,t.getCurrentDocument()),as(O.currentTarget.ownerDocument,O,b,h,k),l.current=r instanceof Ke?r.getSplitterBounds(!0):r.getSplitterBounds(o);const E=t.getRootDiv();c.current=t.getCurrentDocument().createElement("div"),c.current.style.flexDirection=n?"row":"column",c.current.className=t.getClassName(U.FLEXLAYOUT__SPLITTER_DRAG)+(r instanceof Ke?" "+t.getClassName(U.FLEXLAYOUT__SPLITTER_BORDER):""),c.current.style.cursor=r.getOrientation()===_e.VERT?"ns-resize":"ew-resize",u.current=t.getCurrentDocument().createElement("div"),u.current.className=y(U.FLEXLAYOUT__SPLITTER_HANDLE)+" "+y(n?U.FLEXLAYOUT__SPLITTER_HANDLE_HORZ:U.FLEXLAYOUT__SPLITTER_HANDLE_VERT),c.current.appendChild(u.current);const A=i.current.getBoundingClientRect(),C=new ge(A.x-t.getDomRect().x,A.y-t.getDomRect().y,A.width,A.height);d.current=O.clientX-A.x,f.current=O.clientY-A.y,C.positionElement(c.current),E&&E.appendChild(c.current)},w=O=>{if(ga(O))return;let E=0;if(n?(O.key==="ArrowLeft"&&(E=-10),O.key==="ArrowRight"&&(E=10)):(O.key==="ArrowUp"&&(E=-10),O.key==="ArrowDown"&&(E=10)),E!==0)if(O.preventDefault(),r instanceof Ke){const A=r.getLocation(),C=A===ee.BOTTOM||A===ee.RIGHT?-E:E,R=Math.max(r.getMinSize(),Math.min(r.getMaxSize(),r.getSize()+C));t.doAction(re.adjustBorderSplit(r.getId(),R))}else{const A=r.getSplitterInitials(o);if(A.sum<=0)return;const C=r.getSplitterBounds(o),R=Math.max(C[0],Math.min(C[1],A.startPosition+E)),M=r.calculateSplit(o,R,A.initialSizes,A.sum,A.startPosition);t.doAction(re.adjustWeights(r.getId(),M))}},k=()=>{const O=t.getRootDiv();O&&c.current&&O.removeChild(c.current),c.current=void 0,El(!0,t.getCurrentDocument())},b=(O,E)=>{if(c.current){const A=t.getDomRect();if(!A)return;r.getOrientation()===_e.VERT?c.current.style.top=_(E-A.y-f.current)+"px":c.current.style.left=_(O-A.x-d.current)+"px",t.isRealtimeResize()&&v(!0)}},h=()=>{if(c.current){v(!1);const O=t.getRootDiv();O&&c.current&&O.removeChild(c.current),c.current=void 0}El(!0,t.getCurrentDocument())},v=O=>{(()=>{if(c.current){let A;if(r.getOrientation()===_e.VERT?A=c.current.offsetTop:A=c.current.offsetLeft,r instanceof Ke){const C=r.calculateSplit(r,A);t.doAction(re.adjustBorderSplit(r.getId(),C).setAdjusting(O))}else{const C=p.current;if(C.sum<=0)return;const R=r.calculateSplit(o,A,C.initialSizes,C.sum,C.startPosition);t.doAction(re.adjustWeights(r.getId(),R).setAdjusting(O))}}})()},_=O=>{const E=l.current;let A=O;return OE[1]&&(A=E[1]),A},y=t.getClassName,T={cursor:n?"ew-resize":"ns-resize",flexDirection:n?"column":"row"};let S=y(U.FLEXLAYOUT__SPLITTER)+" "+y(U.FLEXLAYOUT__SPLITTER_+r.getOrientation().getName());r instanceof Ke?S+=" "+y(U.FLEXLAYOUT__SPLITTER_BORDER):r.getModel().getMaximizedTabset(t.getLayoutId())!==void 0&&(T.display="none"),Jv()||(T["--splitter-active-size"]="30px");let z,N,P,B;if(r instanceof Ue){const O=r.getRect(),E=r.getChildren()[o-1],A=n?O.width:O.height;if(E&&A>0){const C=E.getRect();z=Math.round((n?C.getRight()-O.x:C.getBottom()-O.y)/A*100),N=0,P=100,B=z+"%"}}else z=Math.round(r.getSize()),N=Math.round(r.getMinSize()),P=Math.round(r.getMaxSize()),B=z+"px";return s.jsx("div",{className:S,style:T,ref:i,role:"separator","aria-label":t.i18nName(Me.Splitter),"aria-orientation":n?"vertical":"horizontal","aria-valuenow":z,"aria-valuemin":N,"aria-valuemax":P,"aria-valuetext":B,tabIndex:0,onKeyDown:w,"data-layout-path":r.getPath()+"/s"+(o-1),onPointerDown:x,children:s.jsx("div",{className:y(U.FLEXLAYOUT__SPLITTER_HANDLE)+" "+y(n?U.FLEXLAYOUT__SPLITTER_HANDLE_HORZ:U.FLEXLAYOUT__SPLITTER_HANDLE_VERT)})})};$i.displayName="Splitter";var Tf=e=>{const{controller:t,rowNode:r}=e,o=m.useRef(null),n=r.getOrientation()===_e.HORZ,i=m.useCallback(u=>{o.current=u,t.registerMeasurable(r,"row",u)},[t,r]),a=[];let l=0;for(const u of r.getChildren())l>0&&a.push(s.jsx($i,{controller:t,node:r,index:l,horizontal:n},"splitter"+l)),u instanceof Ue?a.push(s.jsx(Tf,{controller:t,rowNode:u},u.getId())):u instanceof Ne&&a.push(s.jsx(vm,{controller:t,tabsetNode:u},u.getId())),l++;const c={flexGrow:Math.max(1,r.getWeight()*1e3),minWidth:r.getMinWidth(),minHeight:r.getMinHeight(),maxWidth:r.getMaxWidth(),maxHeight:r.getMaxHeight()};return n?c.flexDirection="row":c.flexDirection="column",s.jsx("div",{ref:i,className:t.getClassName(U.FLEXLAYOUT__ROW),style:c,children:a})};Tf.displayName="Row";var mm=e=>{const{controller:t,selected:r,tabNode:o}=e,n=m.useRef(null),i=m.useRef(!0),a=m.useCallback(()=>{const g=o.getParent();g instanceof Ne&&(g.isActive()||t.doAction(re.setActiveTabset(g.getId(),t.getLayoutId())))},[o,t]),l=o.getParent(),c=t.getKeyMap().focusTabToggle,u=g=>{if(eo(g,c)){const x=g.currentTarget.ownerDocument.getElementById(Lt("flexlayout-tabbutton-",o.getId()));x&&(x.focus(),g.preventDefault(),g.stopPropagation())}};m.useLayoutEffect(()=>{const g=o.getMoveableElement(),x=n.current.ownerDocument,w=g.ownerDocument!==x;w&&x.adoptNode(g),g.parentElement!==n.current&&n.current.appendChild(g),w&&t.redrawLayoutAndTabContent();const k=()=>{o.saveScrollPosition()};g.addEventListener("scroll",k);const b=n.current;return b&&b.addEventListener("pointerdown",a),()=>{b&&b.removeEventListener("pointerdown",a),g.removeEventListener("scroll",k),g.isConnected||(t.getModel().getNodeById(o.getId())&&(o.isEnableWindowReMount()||t.getMainController()?.getMoveablesHome()?.appendChild(g)),o.setVisible(!1))}},[o,t,a]),m.useEffect(()=>{o.isSelected()&&i.current&&(o.restoreScrollPosition(),i.current=!1)}),m.useLayoutEffect(()=>(t.registerTabPanel(o,n.current),()=>{t.registerTabPanel(o,null)}),[t,o]);const d=t.getClassName;let f=null;if(r&&document.hidden&&o.isEnablePopoutOverlay()){const g={};l.getContentRect().styleWithPosition(g);let x=d(U.FLEXLAYOUT__TAB_OVERLAY);l instanceof Ke&&l.isOverlay()&&(x+=" "+d(U.FLEXLAYOUT__TAB_OVERLAY_RAISED)),f=s.jsx("div",{style:g,className:x})}let p=d(U.FLEXLAYOUT__TAB);return l instanceof Ke&&(p+=" "+d(U.FLEXLAYOUT__TAB_BORDER),p+=" "+d(U.FLEXLAYOUT__TAB_BORDER_+l.getLocation().getName()),l.isOverlay()&&(p+=" "+d(U.FLEXLAYOUT__TAB_BORDER_OVERLAY))),o.getContentClassName()!==void 0&&(p+=" "+o.getContentClassName()),s.jsxs(s.Fragment,{children:[f,s.jsx("div",{ref:n,id:Lt("flexlayout-tab-",o.getId()),role:"tabpanel","aria-labelledby":Lt("flexlayout-tabbutton-",o.getId()),"aria-keyshortcuts":Co(c),tabIndex:-1,onKeyDown:c?u:void 0,className:p,"data-layout-path":o.getPath()})]})};mm.displayName="Tab";var o1=class extends m.Component{constructor(t){super(t);I(this,"retry",()=>{this.setState({hasError:!1})});this.state={hasError:!1}}static getDerivedStateFromError(t){return{hasError:!0}}componentDidCatch(t,r){console.debug(t),console.debug(r)}render(){return this.state.hasError?s.jsx("div",{className:U.FLEXLAYOUT__ERROR_BOUNDARY_CONTAINER,children:s.jsx("div",{role:"alert",className:U.FLEXLAYOUT__ERROR_BOUNDARY_CONTENT,children:s.jsxs("div",{style:{display:"flex",flexDirection:"column",alignItems:"center"},children:[this.props.message,s.jsx("p",{children:s.jsx("button",{tabIndex:0,onClick:this.retry,children:this.props.retryText})})]})})}):this.props.children}},xm=m.memo(({controller:e,tabNode:t})=>{xm.displayName="TabContentRenderer";let r;if(t.getComponent())r=e.getFactory()(t);else if(t.getSubLayoutId()){const o=t.getModel().getLayouts().get(t.getSubLayoutId());r=s.jsxs("div",{className:e.getClassName(U.FLEXLAYOUT__TAB_LAYOUT_CONTAINER),children:[s.jsx(ma,{...e.getProps(),layoutId:t.getSubLayoutId(),path:t.getPath()+o.getPath(),mainLayoutController:e.getMainController()}),";"]})}return s.jsx(o1,{message:e.i18nName(Me.Error_rendering_component),retryText:e.i18nName(Me.Error_rendering_component_retry),children:r})},n1);function n1(e,t){return!(t.visible&&(e.windowId!==t.windowId||e.fullRedrawRevision!==t.fullRedrawRevision||e.parentRedrawRevision!==t.parentRedrawRevision||e.tabNode!==t.tabNode||t.tabNode.getSubLayoutId()!==void 0))}var Te,i1=(Te=class{constructor(t){I(this,"_controller");I(this,"_dragEnterCount",0);I(this,"_dragging",!1);I(this,"_active",!1);I(this,"_dropInfo");I(this,"_outlineDiv");I(this,"_mainController");I(this,"setDragNode",(t,r)=>{if(Te.dragState=new nl(this._controller.getMainController(),"internal",r,void 0,void 0),t.dataTransfer.setData("text/plain","--flexlayout--"),t.dataTransfer.effectAllowed="copyMove",t.dataTransfer.dropEffect="move",this._dragEnterCount=0,this._controller.getModel().sortLayouts(),r instanceof Ne){let o=!1,n=this._controller.i18nName(Me.Move_Tabset);if(r.getChildren().length>0&&(n=this._controller.i18nName(Me.Move_Tabs).replace("?",String(r.getChildren().length))),this._controller.getProps().onRenderDragRect){const i=this._controller.getProps().onRenderDragRect(n,r,void 0);i&&(this.setDragComponent(t,i,10,10),o=!0)}o||this.setDragComponent(t,n,10,10)}else{const o=t.target;if(o&&typeof o.getBoundingClientRect=="function"){const n=o.getBoundingClientRect(),i=t.clientX-n.left,a=t.clientY-n.top,l=r?.getParent(),c=l instanceof Ke&&l.getOrientation()===_e.HORZ,u=c?10:i,d=c?10:a;let f=!1;if(this._controller.getProps().onRenderDragRect){const p=s.jsx(va,{controller:this._controller,tabNode:r},r.getId()),g=this._controller.getProps().onRenderDragRect(p,r,void 0);g&&(this.setDragComponent(t,g,u,d),f=!0)}f||(q0()?this.setDragComponent(t,s.jsx(va,{tabNode:r,controller:this._controller}),u,d):t.dataTransfer.setDragImage(r.getTabStamp(),u,d))}}});I(this,"onDragEnterRaw",t=>{this._dragEnterCount++,this.updateActive(t)});I(this,"onDragLeaveRaw",t=>{this._dragEnterCount--,this.updateActive(t)});I(this,"onDragEnter",t=>{if(!Te.dragState&&this._controller.getProps().onExternalDrag){const r=this._controller.getProps().onExternalDrag(t);if(r){const o=Le.fromJson(r.json,this._controller.getModel(),!1);Te.dragState=new nl(this._controller.getMainController(),"external",o,r.json,r.onDrop)}}if(this._mainController===Te.dragState?.mainLayoutController&&!(Te.dragState?.dockFloatToMain&&!this.isDockTarget())&&Te.dragState){t.preventDefault(),this._dropInfo=void 0;const r=this._controller.getRootDiv(),o=this._controller.getCurrentDocument();this._outlineDiv=o.createElement("div"),this._outlineDiv.className=this._controller.getClassName(U.FLEXLAYOUT__OUTLINE_RECT),this._outlineDiv.style.visibility="hidden";const n=this._controller.getTabDragSpeed();this._outlineDiv.style.transition=`top ${n}s, left ${n}s, width ${n}s, height ${n}s`,r.appendChild(this._outlineDiv),this._dragging=!0,this._controller.showOverlayOnAllWindows(!0),this._controller.getModel().getMaximizedTabset(this._controller.getLayoutId())===void 0&&this._controller.setState({showEdges:this._controller.getModel().isEnableEdgeDock()});const i=this._controller.getRootDiv().getBoundingClientRect();new ge(t.clientX-i.left,t.clientY-i.top,1,1).positionElement(this._outlineDiv)}});I(this,"onDragOver",t=>{if(this._mainController===Te.dragState?.mainLayoutController&&!(Te.dragState?.dockFloatToMain&&!this.isDockTarget())&&this._active){if(Te.dragState?.dockFloatToMain){const i=t.target;if(i&&Te.dragState.sourceFloatElement?.contains(i)){this._dropInfo=void 0;return}}const r=this._controller.getRootDiv()?.getBoundingClientRect(),o={x:t.clientX-(r?.left??0),y:t.clientY-(r?.top??0)};Te.dragState.dockFloatToMain||this._controller.checkForBorderToShow(o.x,o.y);const n=this._controller.getModel().findDropTargetNode(this._controller.getLayoutId(),Te.dragState.dragNode,o.x,o.y,this.isExcludeCenter());if(n){if(Te.dragState.dockFloatToMain&&(n.location===ee.CENTER||!(n.node instanceof Ne)&&!(n.node instanceof Ue)))return;t.preventDefault(),this._dropInfo=n,this._outlineDiv&&(this._outlineDiv.className=this._controller.getClassName(n.className),n.rect.positionElement(this._outlineDiv),this._outlineDiv.style.visibility="visible")}}});I(this,"onDragLeave",t=>{if(this._mainController===Te.dragState?.mainLayoutController&&(this.clearDragLocalVisuals(),this._controller.isMainLayout())){let r=!1;for(const[,o]of this._controller.getModel().getLayouts())if(o.getController()&&o.getController().getDragDropManager().isDragging()){r=!0;break}r===!1&&this.clearDragMain()}});I(this,"onDrop",t=>{if(this._mainController===Te.dragState?.mainLayoutController&&!(Te.dragState?.dockFloatToMain&&!this.isDockTarget())){if(this._active){t.preventDefault();const r=Te.dragState;if(this._dropInfo&&r.dockFloatToMain){const o=t.target;o&&r.sourceFloatElement?.contains(o)&&(this._dropInfo=void 0)}if(this._dropInfo)if(r.dragJson!==void 0){const o=this._controller.doAction(re.addTab(r.dragJson,this._dropInfo.node.getId(),this._dropInfo.location,this._dropInfo.index));r.fnNewNodeDropped!==void 0&&r.fnNewNodeDropped(o,t)}else r.dragNode!==void 0&&(r.dockFloatToMain?this._controller.doAction(re.dockFloatToLayout(r.floatLayoutId,this._dropInfo.node.getId(),this._dropInfo.location,this._dropInfo.index)):this._controller.doAction(re.moveNode(r.dragNode.getId(),this._dropInfo.node.getId(),this._dropInfo.location,this._dropInfo.index)));this.clearDragMain(),Te.dragState=void 0}this._dragEnterCount=0}});this._controller=t,this._mainController=t.getMainController()}isDockTarget(){return this._controller.getLayout().getLayoutId()!==Te.dragState?.floatLayoutId}isExcludeCenter(){if(Te.dragState?.dockFloatToMain)return!0;const t=Te.dragState?.dragNode;return t instanceof Ne?!t.isEnableClose()||t.getPinnedRunLength()>0:!1}addTabWithDragAndDrop(t,r,o){const n=Le.fromJson(r,this._controller.getModel(),!1);Te.dragState=new nl(this._controller.getMainController(),"add",n,r,o)}onDragEnded(){this.clearDragMain(),Te.dragState=void 0}moveTabWithDragAndDrop(t,r){this.setDragNode(t,r)}startDockLayoutDrag(t,r,o){const n=r.getRootRow();Te.dragState=new nl(this._controller.getMainController(),"float",n,void 0,void 0,!0,r.getLayoutId(),o),t.dataTransfer.setData("text/plain","--flexlayout--"),t.dataTransfer.effectAllowed="copyMove",t.dataTransfer.dropEffect="move",this._dragEnterCount=0,this._controller.getModel().sortLayouts();let i=0;r.getRootRow()?.forEachNode(c=>{c instanceof Le&&i++},0);const a=this._controller.i18nName(Me.Dock_Float_Tabs).replace("?",String(i));let l=!1;if(this._controller.getProps().onRenderDragRect){const c=this._controller.getProps().onRenderDragRect(a,n,void 0);c&&(this.setDragComponent(t,c,10,10),l=!0)}l||this.setDragComponent(t,a,10,10)}setDragComponent(t,r,o,n){const i=s.jsx("div",{style:{position:"unset"},className:this._controller.getClassName(U.FLEXLAYOUT__LAYOUT)+" "+this._controller.getClassName(U.FLEXLAYOUT__DRAG_RECT),children:r}),a=this._controller.getCurrentDocument(),l=a.createElement("div");l.setAttribute("data-layout-path","/drag-rectangle"),l.style.position="absolute",l.style.left="-10000px",l.style.top="-10000px",a.body.appendChild(l);const c=ci(l);Ur.flushSync(()=>c.render(i)),t.dataTransfer.setDragImage(l,o,n),setTimeout(()=>{c.unmount(),a.body.removeChild(l)},0)}updateActive(t){const r=Array.from(this._controller.getModel().getLayouts().values()),o=Te.dragState?.dockFloatToMain===!0;let n,i;for(let a=r.length-1;a>=0;a--){const l=r[a];if(o&&l.getLayoutId()===Te.dragState?.floatLayoutId)continue;const c=l.getController()?.getDragDropManager();c&&c.getDragEnterCount()>0&&(l.getType()==="tab"?i=l:!n&&!i&&(n=l))}if(i){const a=Qv(i);(n===a||!n)&&(n=i)}n&&n.getController().getDragDropManager().setActive(!0,t);for(const a of r)a!==n&&a.getController()?.getDragDropManager().setActive(!1,t)}setActive(t,r){this._active!==t&&(this._active=t,this._active?this.onDragEnter(r):this.onDragLeave(r))}clearDragMain(){this._controller.showOverlayOnAllWindows(!1);for(const[,t]of this._controller.getModel().getLayouts())t.getController()&&t.getController().getDragDropManager().clearDragLocal()}clearDragLocal(){this._dragEnterCount=0,this._active=!1,this.clearDragLocalVisuals()}clearDragLocalVisuals(){this._controller.setState({showEdges:!1}),this._dragging=!1,this._outlineDiv&&(this._controller.getRootDiv().removeChild(this._outlineDiv),this._outlineDiv=void 0)}getDragEnterCount(){return this._dragEnterCount}isDragging(){return this._dragging}},I(Te,"dragState"),Te),nl=class{constructor(e,t,r,o,n,i=!1,a=void 0,l=void 0){I(this,"mainLayoutController");I(this,"dragSource");I(this,"dragNode");I(this,"dragJson");I(this,"fnNewNodeDropped");I(this,"dockFloatToMain");I(this,"floatLayoutId");I(this,"sourceFloatElement");this.mainLayoutController=e,this.dragSource=t,this.dragNode=r,this.dragJson=o,this.fnNewNodeDropped=n,this.dockFloatToMain=i,this.floatLayoutId=a,this.sourceFloatElement=l}},ym=({controller:e})=>{const t=[],r=e.getIcons().edgeArrow;if(e.getState().showEdges&&e.getModel().isEnableEdgeDockIndicators()){const o=e.getModel().getRootRow(e.getLayoutId()).getRect(),n=100,i=10,a=100/2,l=e.getClassName(U.FLEXLAYOUT__EDGE_RECT),c=50;t.push(s.jsx("div",{"aria-hidden":"true",style:{top:0,left:o.width/2-a,width:n,height:i,borderBottomLeftRadius:c,borderBottomRightRadius:c},className:l+" "+e.getClassName(U.FLEXLAYOUT__EDGE_RECT_TOP),children:s.jsx("div",{style:{transform:"rotate(180deg)"},children:r})},"North")),t.push(s.jsx("div",{"aria-hidden":"true",style:{top:o.height/2-a,left:0,width:i,height:n,borderTopRightRadius:c,borderBottomRightRadius:c},className:l+" "+e.getClassName(U.FLEXLAYOUT__EDGE_RECT_LEFT),children:s.jsx("div",{style:{transform:"rotate(90deg)"},children:r})},"West")),t.push(s.jsx("div",{"aria-hidden":"true",style:{top:o.height-i,left:o.width/2-a,width:n,height:i,borderTopLeftRadius:c,borderTopRightRadius:c},className:l+" "+e.getClassName(U.FLEXLAYOUT__EDGE_RECT_BOTTOM),children:s.jsx("div",{children:r})},"South")),t.push(s.jsx("div",{"aria-hidden":"true",style:{top:o.height/2-a,left:o.width-i,width:i,height:n,borderTopLeftRadius:c,borderBottomLeftRadius:c},className:l+" "+e.getClassName(U.FLEXLAYOUT__EDGE_RECT_RIGHT),children:s.jsx("div",{style:{transform:"rotate(-90deg)"},children:r})},"East"))}return s.jsx(s.Fragment,{children:t})};ym.displayName="EdgeIndicators";var a1=2e3,l1=750,_m=e=>{const{title:t,controller:r,layout:o,url:n,onCloseLayout:i,children:a}=e,l=m.useRef(null),[c,u]=m.useState(void 0),[d,f]=m.useState(void 0),[p,g]=m.useState(void 0),x=m.useMemo(()=>new Map,[]),w=m.useRef(!1),k=m.useRef(null),b=m.useRef(null),h=m.useRef(new Map);if(m.useLayoutEffect(()=>{!w.current&&c&&(w.current=!0,r.redrawLayout(),d1(x))},[c,r,x]),m.useLayoutEffect(()=>{const v=()=>{if(l.current){const _=l.current;l.current=null,_.close()}};if(!l.current){const _=o.getLayoutId(),y=o.getRect();l.current=window.open(n,_,`left=${y.x},top=${y.y},width=${y.width},height=${y.height}`),l.current?(window.addEventListener("beforeunload",v),l.current.addEventListener("load",()=>{if(l.current){l.current.focus(),l.current.resizeTo(y.width,y.height),l.current.moveTo(y.x,y.y);const T=l.current;T.resizeBy(y.width-T.outerWidth,y.height-T.outerHeight),T.moveBy(y.x-T.screenLeft,y.y-T.screenTop);const S=l.current.document;f(l.current),g(S),S.title=t,document.documentElement.lang&&(S.documentElement.lang=document.documentElement.lang),document.documentElement.dir&&(S.documentElement.dir=document.documentElement.dir);const z=S.createElement("div");z.className=U.FLEXLAYOUT__FLOATING_WINDOW_CONTENT,S.body.appendChild(z),r.getProps().onPopoutOpen?.(o,l.current,S),u1(S,x).then(()=>{u(z)}),k.current=new MutationObserver(N=>s1(N,S,x)),k.current.observe(document.head,{childList:!0,subtree:!0,characterData:!0}),b.current=S.defaultView?.setInterval(()=>{f1(x,h.current)},l1)??null,l.current.addEventListener("beforeunload",()=>{l.current&&(r.getProps().onPopoutClose?.(o,l.current,S),i(o),l.current=null,k.current?.disconnect(),k.current=null,b.current!=null&&(S.defaultView?.clearInterval(b.current),b.current=null))})}})):(console.warn(`Unable to open window ${n}`),i(o))}return()=>{window.removeEventListener("beforeunload",v),l.current?.close(),l.current=null,k.current?.disconnect(),k.current=null,b.current!=null&&(b.current=null)}},[]),c!==void 0){const v=r.getProps().renderPopoutContent;let _=a;return v&&p&&(_=v({children:a,layout:o,popoutWindow:d??window,popoutDocument:p})),Ur.createPortal(_,c)}else return null};function s1(e,t,r){for(const o of e)if(o.type==="childList"&&o.target===document.head){for(const n of o.addedNodes)(n instanceof HTMLLinkElement||n instanceof HTMLStyleElement)&&wm(t,n,r);for(const n of o.removedNodes)if(n instanceof HTMLLinkElement||n instanceof HTMLStyleElement){const i=r.get(n);i&&(i.remove(),r.delete(n))}}else{const n=c1(o.target),i=n&&r.get(n);n&&i&&Js(n,i)}}function c1(e){let t=e instanceof HTMLElement?e:e.parentNode;for(;t&&!(t instanceof HTMLStyleElement);)t=t.parentNode;return t instanceof HTMLStyleElement?t:void 0}function u1(e,t){const r=[],o=document.querySelectorAll('style, link[rel="stylesheet"]');for(const n of o)wm(e,n,t,r);return Promise.all(r)}function wm(e,t,r,o){if(t instanceof HTMLLinkElement){const n=t.cloneNode(!0);e.head.appendChild(n),r.set(t,n),o&&o.push(new Promise(i=>{let a=!1;const l=c=>{a||(a=!0,i(c))};n.onload=()=>l(!0),n.onerror=()=>l(!1),e.defaultView?.setTimeout(()=>l(!1),a1)}))}else if(t instanceof HTMLStyleElement)try{const n=t.cloneNode(!0);e.head.appendChild(n),Js(t,n),r.set(t,n)}catch{}}function Js(e,t){const r=e.textContent??"";if(r.trim()!=="")t.textContent=r;else try{t.textContent="";const o=e.sheet?.cssRules;if(o)for(const n of o)t.sheet.insertRule(n.cssText,t.sheet.cssRules.length)}catch{}}function d1(e){for(const[t,r]of e)t instanceof HTMLStyleElement&&Js(t,r)}function f1(e,t){for(const[r,o]of e){if(!(r instanceof HTMLStyleElement)||(r.textContent??"").trim()!=="")continue;let n=0;try{n=r.sheet?.cssRules.length??0}catch{}n!==t.get(r)&&(t.set(r,n),Js(r,o))}}_m.displayName="PopoutWindow";var co=10,Nr=-4,ir=8,kn=12,Rh=12,p1=150,h1=25,g1=e=>{const{controller:t,layout:r,children:o}=e,[n,i]=m.useState(r.getRect()),a=m.useRef(ge.empty()),l=t.getClassName,c=m.useRef(null),u=m.useRef(null),d=m.useRef(null),f=m.useRef(null),p=m.useRef(null),g=m.useRef(null),x=m.useRef(null),w=m.useRef(null),k=m.useRef(null),b=m.useRef(null),h=m.useRef(!1),v=m.useRef(void 0);m.useEffect(()=>{a.current=n},[n]),m.useEffect(()=>{requestAnimationFrame(()=>{i(r.getRect())})},[r]);const _=m.useCallback(C=>{const R=t.getCurrentWindow()??window,M=ge.fromDomRect(t.getRootDiv().getBoundingClientRect());let D;if(t.getProps().constrainFloatPanels)D=new ge(0,0,M.width,M.height);else{const F=J0(R),ie=Math.max(F.fullWidth,R.innerWidth),X=Math.max(F.fullHeight,R.innerHeight);D=new ge(-M.x,-M.y,ie,X)}const W=C.clone();return W.clamp(D),W},[t]),y=m.useCallback(C=>{C.preventDefault(),C.stopImmediatePropagation()},[]);m.useEffect(()=>{const C=[u,d,f,p,g,x,w,k,b].map(R=>R.current).filter(R=>R!==null);return C.forEach(R=>R.addEventListener("touchstart",y,{passive:!1})),()=>{C.forEach(R=>R.removeEventListener("touchstart",y))}},[y]);const T=m.useRef(!1);m.useLayoutEffect(()=>{if(!T.current){T.current=!0;const C=_(n);C.equals(n)||(i(C),r.setRect(C))}},[_,n,r]),m.useEffect(()=>{const C=()=>{const W=[...t.getModel().getLayouts()],F=W[W.length-1][1];r!==F&&(h.current=!0)},R=t.getCurrentWindow()??window,M=()=>{h.current&&(v.current=R.setTimeout(()=>{v.current=void 0,t.moveWindowToFront(r.getLayoutId())},10),h.current=!1)},D=c.current;return D&&(D.addEventListener("pointerdown",C,{capture:!0}),D.addEventListener("pointerup",M)),()=>{D&&(D.removeEventListener("pointerdown",C,{capture:!0}),D.removeEventListener("pointerup",M)),v.current!==void 0&&(R.clearTimeout(v.current),v.current=void 0)}},[t,r]);const S=C=>{C.stopPropagation();const R={x:C.clientX-n.x,y:C.clientY-n.y};t.showOverlayOnAllWindows(!0),as(t.getCurrentDocument()??document,C,(M,D)=>{h.current&&(t.moveWindowToFront(r.getLayoutId()),h.current=!1);const W=new ge(M-R.x,D-R.y,n.width,n.height),F=_(W);i(F),t.doAction(re.moveFloat(r.getLayoutId(),F).setAdjusting(!0))},()=>{t.doAction(re.moveFloat(r.getLayoutId(),a.current).setAdjusting(!1)),t.redrawLayout(),t.showOverlayOnAllWindows(!1)},()=>{t.doAction(re.moveFloat(r.getLayoutId(),a.current).setAdjusting(!1)),t.redrawLayout(),t.showOverlayOnAllWindows(!1)})},z=t.getIcons(),N=t.isSupportsPopout()&&r.getRootRow()?.isAllowedInWindow()===!0,P=C=>{C.stopPropagation(),r.getRootRow()?.getChildren().length?t.getDragDropManager().startDockLayoutDrag(C.nativeEvent,r,c.current??void 0):C.preventDefault()},B=C=>{t.getDragDropManager().onDragEnded()},O=C=>{C.stopPropagation()},E=C=>{C.stopPropagation();const R=t.getScreenRect(r.getRect());t.doAction(re.popoutFloat(r.getLayoutId(),R.toJson()))},A=(C,R)=>{const M=n,D={x:C.clientX,y:C.clientY};t.showOverlayOnAllWindows(!0),as(t.getCurrentDocument()??document,C,(W,F)=>{const ie=W-D.x,X=F-D.y;let q=M.x,Z=M.y,Y=M.width,Q=M.height;R.includes("n")&&(Z+=X,Q-=X),R.includes("s")&&(Q+=X),R.includes("w")&&(q+=ie,Y-=ie),R.includes("e")&&(Y+=ie);const oe=new ge(q,Z,Math.max(p1,Y),Math.max(h1,Q)),le=_(oe);i(le),t.doAction(re.moveFloat(r.getLayoutId(),le).setAdjusting(!0))},()=>{t.doAction(re.moveFloat(r.getLayoutId(),a.current).setAdjusting(!1)),t.redrawLayout(),t.showOverlayOnAllWindows(!1)},()=>{t.doAction(re.moveFloat(r.getLayoutId(),a.current).setAdjusting(!1)),t.redrawLayout(),t.showOverlayOnAllWindows(!1)}),C.stopPropagation()};return s.jsxs("div",{ref:c,className:l(U.FLEXLAYOUT__FLOAT_WINDOW),style:{left:n.x,top:n.y,width:n.width,height:n.height,position:"absolute"},children:[s.jsxs("div",{ref:u,className:l(U.FLEXLAYOUT__FLOAT_WINDOW_HEADER),onPointerDown:S,children:[s.jsx("div",{"data-layout-path":"/floatwindow/drag-handle",className:l(U.FLEXLAYOUT__FLOAT_WINDOW_DRAG_HANDLE),draggable:!0,title:t.i18nName(Me.Dock_Float_To_Layout),"aria-label":t.i18nName(Me.Dock_Float_To_Layout),onDragStart:P,onDragEnd:B,onPointerDown:O,children:z.dragToDock}),s.jsx("div",{style:{flexGrow:1,display:"flex",justifyContent:"center",alignItems:"center",minWidth:0,overflow:"hidden"},children:r.getName()!==void 0?s.jsx("span",{"data-layout-path":"/floatwindow/title",className:l(U.FLEXLAYOUT__FLOAT_WINDOW_HEADER_TITLE),title:r.getName(),children:r.getName()}):s.jsx("div",{style:{width:50,height:8,display:"flex",flexDirection:"column",justifyContent:"space-around",opacity:.5},children:s.jsx("div",{style:{height:2,backgroundColor:"gray",borderRadius:1}})})}),N&&s.jsx("button",{type:"button","data-layout-path":"/floatwindow/button/popout",className:l(U.FLEXLAYOUT__FLOAT_WINDOW_BUTTON),title:t.i18nName(Me.Popout_Float_To_Window),"aria-label":t.i18nName(Me.Popout_Float_To_Window),onClick:E,onPointerDown:O,children:z.popoutFloatWindow})]}),s.jsx("div",{className:l(U.FLEXLAYOUT__FLOAT_WINDOW_CONTENT),children:o}),s.jsx("div",{ref:d,style:{position:"absolute",zIndex:co,top:Nr,left:ir,right:ir,height:ir,cursor:"ns-resize"},onPointerDown:C=>A(C,"n")}),s.jsx("div",{ref:x,style:{position:"absolute",zIndex:co,bottom:Nr,left:ir,right:ir,height:ir,cursor:"ns-resize"},onPointerDown:C=>A(C,"s")}),s.jsx("div",{ref:p,style:{position:"absolute",zIndex:co,top:ir,bottom:ir,right:Nr,width:ir,cursor:"ew-resize"},onPointerDown:C=>A(C,"e")}),s.jsx("div",{ref:k,style:{position:"absolute",zIndex:co,top:ir,bottom:ir,left:Nr,width:ir,cursor:"ew-resize"},onPointerDown:C=>A(C,"w")}),s.jsx("div",{ref:b,style:{position:"absolute",zIndex:co,top:Nr,left:Nr,width:kn,height:kn,cursor:"nwse-resize"},onPointerDown:C=>A(C,"nw")}),s.jsx("div",{ref:f,style:{position:"absolute",zIndex:co,top:Nr,right:Nr,width:kn,height:kn,cursor:"nesw-resize"},onPointerDown:C=>A(C,"ne")}),s.jsx("div",{ref:w,style:{position:"absolute",zIndex:co,bottom:Nr,left:Nr,width:kn,height:kn,cursor:"nesw-resize"},onPointerDown:C=>A(C,"sw")}),s.jsx("div",{ref:g,style:{position:"absolute",zIndex:co,bottom:0,right:0,width:Rh,height:Rh,cursor:"nwse-resize"},onPointerDown:C=>A(C,"se")})]})},km=({controller:e})=>{const t=[],r=e.getModel().getLayouts();let o=0,n=2e3;for(const[i,a]of r)a.isMainLayout()||(a.getType()==="window"&&e.isSupportsPopout()?(t.push(s.jsx(_m,{controller:e,layout:a,title:e.getPopoutWindowName()+" "+o,url:e.getPopoutURL()+"?id="+encodeURIComponent(i),onCloseLayout:e.onCloseLayout,children:s.jsx("div",{className:e.getProps().popoutClassName,children:s.jsx(ma,{...e.getProps(),layoutId:i,path:a.getPath(),mainLayoutController:e})})},i)),o++):a.getType()==="float"&&(t.push(s.jsx(g1,{controller:e,layout:a,zIndex:n,onCloseLayout:e.onCloseLayout,children:s.jsx(ma,{...e.getProps(),layoutId:i,path:a.getPath(),mainLayoutController:e})},i+"float")),n++));return s.jsx(s.Fragment,{children:t})};km.displayName="FloatingWindowContainer";var Em=e=>{const{controller:t,tabNode:r,selected:o,border:n,icons:i,path:a}=e,l=m.useRef(null),c=m.useRef(null),u=t.getKeyMap(),d=M=>{r.isEnableDrag()?(M.stopPropagation(),t.getDragDropManager().setDragNode(M.nativeEvent,r)):M.preventDefault()},f=M=>{M.stopPropagation(),t.getDragDropManager().onDragEnded()},p=M=>{ba(M)&&t.auxMouseClick(r,M)},g=M=>{t.showContextMenu(r,M)},x=()=>{t.doAction(re.selectTab(r.getId()))},w=M=>{const D=l.current?.closest('[role="tablist"]');if(D){const W=Array.from(D.querySelectorAll('[role="tab"]'));W[W.indexOf(l.current)+M]?.focus()}},k=()=>{const M=l.current.ownerDocument,D=()=>Zv(M.getElementById(Lt("flexlayout-tab-",r.getId())));o?D():(x(),requestAnimationFrame(D))},b=M=>{t.getEditingTab()!==r&&(eo(M,u.focusTabToggle)?(k(),M.preventDefault()):M.key==="Enter"||M.key===" "?(x(),M.preventDefault()):(M.key==="ArrowLeft"||M.key==="ArrowUp")&&!ga(M)?(w(-1),M.preventDefault()):(M.key==="ArrowRight"||M.key==="ArrowDown")&&!ga(M)?(w(1),M.preventDefault()):eo(M,u.closeTab)&&r.isCloseable()&&(w(1),t.doAction(re.deleteTab(r.getId())),M.preventDefault()))},h=()=>{const M=r.getCloseType();return!!(o||M===en.Always||M===en.Visible&&window.matchMedia&&window.matchMedia("(hover: hover) and (pointer: fine)").matches)},v=M=>{h()&&(t.doAction(re.deleteTab(r.getId())),M.stopPropagation())},_=M=>{M.stopPropagation()},y=()=>{if(o)return!0;const M=r.getParent();return M instanceof Ke&&M.getSelected()===-1&&M.getChildren()[0]===r},T=t.getEditingTab()===r,S=m.useCallback(M=>{l.current=M,t.registerMeasurable(r,"tabbutton",M)},[t,r]);m.useLayoutEffect(()=>{T&&c.current.select()},[T]),m.useEffect(()=>{if(T){const M=t.getCurrentDocument().body,D=W=>{W.target!==c.current&&t.setEditingTab(void 0)};return M.addEventListener("pointerdown",D),()=>M.removeEventListener("pointerdown",D)}},[T,t]);const z=M=>{M.stopPropagation()},N=M=>{M.code==="Escape"?(t.setEditingTab(void 0),l.current?.focus()):(M.code==="Enter"||M.code==="NumpadEnter")&&(t.setEditingTab(void 0),t.doAction(re.renameTab(r.getId(),M.target.value)),l.current?.focus())},P=t.getClassName;let B=P(U.FLEXLAYOUT__BORDER_BUTTON)+" "+P(U.FLEXLAYOUT__BORDER_BUTTON_+n);o?B+=" "+P(U.FLEXLAYOUT__BORDER_BUTTON__SELECTED):B+=" "+P(U.FLEXLAYOUT__BORDER_BUTTON__UNSELECTED),r.getClassName()!==void 0&&(B+=" "+r.getClassName());let O=0;r.getModel().isEnableRotateBorderIcons()===!1&&(n==="left"?O=r.getModel().getBorderLeftTabDirection()==="down"?-90:90:n==="right"&&(O=-90));const E=Ef(t,r,O);let A=E.content?s.jsx("div",{className:P(U.FLEXLAYOUT__BORDER_BUTTON_CONTENT),children:E.content}):null;const C=E.leading?s.jsx("div",{className:P(U.FLEXLAYOUT__BORDER_BUTTON_LEADING),children:E.leading}):null;if(T&&(A=s.jsx("input",{ref:c,className:P(U.FLEXLAYOUT__TAB_BUTTON_TEXTBOX),"data-layout-path":a+"/textbox",type:"text","aria-label":t.i18nName(Me.Rename_Tab),autoFocus:!0,defaultValue:r.getName(),onKeyDown:N,onPointerDown:z})),r.isCloseable()){const M=t.i18nName(Me.Close_Tab);E.buttons.push(s.jsx("div",{"data-layout-path":a+"/button/close",title:M,"aria-hidden":"true",className:P(U.FLEXLAYOUT__BORDER_BUTTON_TRAILING),onPointerDown:_,onClick:v,children:typeof i.close=="function"?i.close(r):i.close},"close"))}const R=[Co(u.focusTabToggle),r.isCloseable()?Co(u.closeTab):void 0].filter(Boolean).join(" ")||void 0;return s.jsxs("div",{ref:S,id:Lt("flexlayout-tabbutton-",r.getId()),role:T?void 0:"tab","aria-selected":T?void 0:o,"aria-controls":T?void 0:Lt("flexlayout-tab-",r.getId()),"aria-label":T?void 0:E.name,"aria-keyshortcuts":T?void 0:R,tabIndex:T?-1:y()?0:-1,onKeyDown:b,"data-layout-path":a,className:B,onClick:x,onAuxClick:p,onContextMenu:g,title:r.getHelpText(),draggable:!0,onDragStart:d,onDragEnd:f,children:[C,A,E.buttons]})};Em.displayName="BorderButton";var Tm=e=>{const{borderNode:t,controller:r,size:o}=e,n=m.useRef(null),i=m.useRef(null),a=m.useRef(null),l=m.useRef(null),c=m.useRef(null),u=m.useRef(null),[d,f]=m.useState(!1),p=m.useRef(null),g=r.getIcons();m.useEffect(()=>()=>p.current?.(),[]);const{userControlledPositionRef:x,onScroll:w,onScrollPointerDown:k,hiddenTabs:b,onMouseWheel:h,isDockStickyButtons:v,isShowHiddenTabs:_}=bm(r,t,_e.flip(t.getOrientation()),u,a,n,r.getClassName(U.FLEXLAYOUT__BORDER_BUTTON)),y=m.useCallback(oe=>{n.current=oe,r.registerMeasurable(t,"borderheader",oe)},[r,t]),T=oe=>{ba(oe)&&r.auxMouseClick(t,oe)},S=oe=>{r.showContextMenu(t,oe)},z=oe=>{oe.stopPropagation()},N=oe=>{const le=r.getShowOverflowMenu(),Ce=b.map(Ee=>({index:Ee,node:t.getChildren()[Ee]}));if(le!==void 0)le(t,oe,Ce,P);else{const Ee=l.current;f(!0),p.current=hm(Ee,t,Ce,P,r,()=>{f(!1),p.current=null})}oe.stopPropagation()},P=oe=>{r.doAction(re.selectTab(oe.node.getId())),x.current=!1},B=oe=>{const le=t.getChildren()[t.getSelected()];le!==void 0&&r.doAction(re.popoutTab(le.getId(),"window")),oe.stopPropagation()},O=oe=>{const le=t.getChildren()[t.getSelected()];le!==void 0&&r.doAction(re.popoutTab(le.getId(),"float")),oe.stopPropagation()},E=r.getClassName,A=()=>{const oe=[];for(let le=0;le{let oe,le=[],Ce=[],Ee;const ve={leading:oe,buttons:le,stickyButtons:Ce,overflowPosition:void 0};if(r.customizeTabSet(t,ve),oe=ve.leading,Ce=ve.stickyButtons,le=ve.buttons,ve.overflowPosition===void 0&&(ve.overflowPosition=Ce.length),Ce.length>0&&(v?le=[...Ce,...le]:Ee=s.jsx("div",{ref:c,onPointerDown:z,onDragStart:de=>{de.preventDefault()},className:E(U.FLEXLAYOUT__TAB_TOOLBAR_STICKY_BUTTONS_CONTAINER),children:Ce},"sticky_buttons_container")),_){const de=r.i18nName(Me.Overflow_Menu_Tooltip);let se;if(typeof g.more=="function"){const $=b.map(pe=>({index:pe,node:t.getChildren()[pe]}));se=g.more(t,$)}else se=s.jsxs(s.Fragment,{children:[g.more,s.jsx("div",{className:E(U.FLEXLAYOUT__TAB_BUTTON_OVERFLOW_COUNT),children:b.length>0?b.length:""})]});le.splice(Math.min(ve.overflowPosition,le.length),0,s.jsx("button",{tabIndex:0,"aria-haspopup":"menu","aria-expanded":d,"aria-label":de,ref:l,className:E(U.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON)+" "+E(U.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON_OVERFLOW)+" "+E(U.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON_OVERFLOW_+t.getLocation().getName()),title:de,onClick:N,onPointerDown:z,children:se},"overflowbutton"))}const It=t.getSelected();if(It!==-1){const de=t.getChildren()[It];if(de!==void 0&&r.isMainLayout()){if(de.isEnablePopoutFloatIcon()){const se=r.i18nName(Me.Popout_Tab_Float);le.push(s.jsx("button",{tabIndex:0,title:se,"aria-label":se,className:E(U.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON)+" "+E(U.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON_FLOAT),onClick:O,onPointerDown:z,children:typeof g.popoutFloat=="function"?g.popoutFloat(de):g.popoutFloat},"popout-float"))}if(r.isSupportsPopout()&&de.isEnablePopoutIcon()&&de.isAllowedInWindow()){const se=r.i18nName(Me.Popout_Tab);le.push(s.jsx("button",{tabIndex:0,title:se,"aria-label":se,className:E(U.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON)+" "+E(U.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON_FLOAT),onClick:B,onPointerDown:z,children:typeof g.popout=="function"?g.popout(de):g.popout},"popout"))}}}const G=s.jsx("div",{ref:i,className:E(U.FLEXLAYOUT__BORDER_TOOLBAR)+" "+E(U.FLEXLAYOUT__BORDER_TOOLBAR_+t.getLocation().getName()),children:le},"toolbar");return{leading:oe,toolbar:G,stickyBar:Ee}},R=A(),{leading:M,toolbar:D,stickyBar:W}=C();let F=E(U.FLEXLAYOUT__BORDER)+" "+E(U.FLEXLAYOUT__BORDER_+t.getLocation().getName());t.getClassName()!==void 0&&(F+=" "+t.getClassName());let ie,X;const q=o-1;t.getLocation()===ee.LEFT?(ie=r.getModel().getBorderLeftTabDirection()==="down"?{left:"100%",top:0}:{right:"100%",top:0},X={width:q,overflowY:"auto"}):t.getLocation()===ee.RIGHT?(ie={left:"100%",top:0},X={width:q,overflowY:"auto"}):(ie={left:0},X={height:q,overflowX:"auto"});let Z;t.isEnableTabScrollbar()&&(Z=s.jsx("div",{ref:a,"aria-hidden":"true",className:E(U.FLEXLAYOUT__MINI_SCROLLBAR),onPointerDown:k}));let Y;M&&(Y=s.jsx("div",{className:E(U.FLEXLAYOUT__BORDER_LEADING),children:M}));const Q=E(U.FLEXLAYOUT__BORDER_INNER_TAB_CONTAINER)+" "+E(U.FLEXLAYOUT__BORDER_INNER_TAB_CONTAINER_+t.getLocation().getName())+(t.getLocation()===ee.LEFT&&r.getModel().getBorderLeftTabDirection()==="down"?" "+E(U.FLEXLAYOUT__BORDER_INNER_TAB_CONTAINER_LEFT_DOWN):"");return s.jsxs("div",{ref:y,style:{display:"flex",flexDirection:t.getOrientation()===_e.VERT?"row":"column"},className:F,"data-layout-path":t.getPath(),onClick:T,onAuxClick:T,onContextMenu:S,onWheel:h,children:[Y,s.jsxs("div",{className:E(U.FLEXLAYOUT__MINI_SCROLLBAR_CONTAINER),children:[s.jsxs("div",{ref:u,className:E(U.FLEXLAYOUT__BORDER_INNER)+" "+E(U.FLEXLAYOUT__BORDER_INNER_+t.getLocation().getName()),style:X,onScroll:w,children:[s.jsx("div",{style:ie,role:r.getEditingTab()?.getParent()===t?void 0:"tablist","aria-orientation":r.getEditingTab()?.getParent()!==t&&(t.getLocation()===ee.LEFT||t.getLocation()===ee.RIGHT)?"vertical":void 0,className:Q,children:R}),W]}),Z]}),D]})};Tm.displayName="BorderTabSet";function Rm(e){const{controller:t,borderNode:r,show:o}=e,n=m.useRef(null),i=m.useCallback(d=>{n.current=d,t.registerMeasurable(r,"bordercontent",d)},[t,r]);let a=!0;const l={};r.getOrientation()===_e.HORZ?(l.width=r.getSize(),l.minWidth=r.getMinSize(),l.maxWidth=r.getMaxSize()):(l.height=r.getSize(),l.minHeight=r.getMinSize(),l.maxHeight=r.getMaxSize(),a=!1);const c=t.getClassName(U.FLEXLAYOUT__BORDER_TAB_CONTENTS),u=r.getLocation()===ee.LEFT||r.getLocation()===ee.TOP;if(r.isOverlay()){l.display="flex";const d={display:o?"flex":"none"};if(a){const p=t.getModel();for(const g of p.getBorderSet().getBorders())if(g!==r&&g.isOverlay()&&g.isShowing()&&g.getSelected()!==-1){const x=g.getSize()+p.getSplitterSize();g.getLocation()===ee.TOP?d.top=x:g.getLocation()===ee.BOTTOM&&(d.bottom=x)}}const f=t.getClassName(U.FLEXLAYOUT__BORDER_TAB_OVERLAY)+" "+t.getClassName(U.FLEXLAYOUT__BORDER_TAB_OVERLAY_+r.getLocation().getName());return s.jsxs("div",{className:f,style:d,children:[u&&s.jsx("div",{ref:i,style:l,className:c}),o&&s.jsx($i,{controller:t,node:r,index:0,horizontal:a}),!u&&s.jsx("div",{ref:i,style:l,className:c})]})}return l.display=o?"flex":"none",u?s.jsxs(s.Fragment,{children:[s.jsx("div",{ref:i,style:l,className:c}),o&&s.jsx($i,{controller:t,node:r,index:0,horizontal:a})]}):s.jsxs(s.Fragment,{children:[o&&s.jsx($i,{controller:t,node:r,index:0,horizontal:a}),s.jsx("div",{ref:i,style:l,className:c})]})}Rm.displayName="BorderTab";var Sm=({controller:e,inner:t})=>{const r=e.getClassName(U.FLEXLAYOUT__LAYOUT_MAIN),o=e.getModel().getBorderSet().getBorderMap();if(e.isMainLayout()&&o.size>0){const n=s.jsx("div",{className:r,ref:e.getMainRef(),children:t}),i=new Map,a=new Map;for(const[d,f]of ee.values){const p=o.get(f);p&&p.isShowing()&&(!p.isAutoHide()||p.isAutoHide()&&(p.getChildren().length>0||e.getState().showHiddenBorder===f))&&(i.set(f,s.jsx(Tm,{controller:e,borderNode:p,size:e.getState().calculatedBorderBarSize})),a.set(f,s.jsx(Rm,{controller:e,borderNode:p,show:p.getSelected()!==-1})))}const l=e.getClassName(U.FLEXLAYOUT__LAYOUT_BORDER_CONTAINER),c=e.getClassName(U.FLEXLAYOUT__LAYOUT_BORDER_CONTAINER_INNER),u=s.jsxs("div",{className:c,style:{flexDirection:"column"},children:[a.get(ee.TOP),s.jsxs("div",{className:c,style:{flexDirection:"row"},children:[a.get(ee.LEFT),n,a.get(ee.RIGHT)]}),a.get(ee.BOTTOM)]});return s.jsxs("div",{className:l,style:{flexDirection:"column"},children:[i.get(ee.TOP),s.jsxs("div",{className:c,style:{flexDirection:"row"},children:[i.get(ee.LEFT),u,i.get(ee.RIGHT)]}),i.get(ee.BOTTOM)]})}else return s.jsx("div",{className:r,ref:e.getMainRef(),style:{position:"absolute",top:0,left:0,bottom:0,right:0,display:"flex"},children:t})};Sm.displayName="BorderContainer";var Lm=m.memo(e=>{Lm.displayName="DragTabButton";const{controller:t,tabNode:r}=e,o=m.useRef(null);m.useEffect(()=>{r.setTabStamp(o.current)},[r]);const n=t.getClassName,i=n(U.FLEXLAYOUT__DRAG_RECT);return s.jsx("div",{ref:o,className:i,children:s.jsx(va,{controller:t,tabNode:r},r.getId())})},b1);function b1(e,t){return t.dragging}var ma=m.forwardRef((e,t)=>{ma.displayName="LayoutInternal";const[r,o]=m.useState({editingTab:void 0,showEdges:!1,showOverlay:!1,calculatedBorderBarSize:29,layoutRedrawRevision:0,fullRedrawRevision:0,showHiddenBorder:ee.CENTER}),n=m.useCallback(P=>{o(B=>({...B,...typeof P=="function"?P(B,e):P}))},[e]),i=m.useRef(null),[a,l]=m.useState(0),c=m.useRef(null),u=m.useRef(null),d=m.useRef(null),f=m.useRef(null),p=m.useMemo(()=>new v1(e,r,n),[]);p.setProps(e),p.setStateRaw(r),p.setSetState(n),p.setLayoutRef(i),p.setMoveablesHomeRef(c),p.setFindBorderBarSizeRef(u),p.setFindSplitterSizeRef(d),p.setMainRef(f);const g=e.model.getLayouts().get(p.getLayoutId());g.setController(p),m.useImperativeHandle(t,()=>p,[p]),m.useLayoutEffect(()=>{const P=p.syncLayoutMetrics();if(p.positionTabPanels(),p.isMainLayout()&&p.updateLayoutMetrics(),p.isReLayout()&&(p.redrawLayout(),p.setReLayout(!1)),i.current&&p.getCurrentDocument()!==void 0&&p.getCurrentDocument()!==i.current.ownerDocument&&l(B=>B+1),P){const B=i.current?.ownerDocument.defaultView??window,O=B.requestAnimationFrame(()=>{p.syncLayoutMetrics(),p.positionTabPanels(),p.isReLayout()&&(p.redrawLayout(),p.setReLayout(!1))});return()=>B.cancelAnimationFrame(O)}}),m.useEffect(()=>{const P=i.current.ownerDocument,B=P.defaultView;p.setCurrentDocument(P),p.setCurrentWindow(B);const O=new B.ResizeObserver(()=>{p.updateRect(),p.syncLayoutMetrics(),p.positionTabPanels(),p.updateLayoutMetrics(),p.isReLayout()&&(p.redrawLayout(),p.setReLayout(!1))});O.observe(i.current),p.setGeometryResizeObserver(O),u.current&&O.observe(u.current),d.current&&O.observe(d.current);const E=()=>{p.updateRect()};B.addEventListener("resize",E);const A=()=>{for(const[C,R]of p.getProps().model.getLayouts()){const M=R.getController();M&&M.redrawLayout()}};return p.isMainLayout()&&(document.addEventListener("visibilitychange",A),P.addEventListener("pointerdown",p.onOverlayBorderPointerDown,!0),P.addEventListener("keydown",p.onOverlayBorderKeyDown)),(p.isMainLayout()||p.getLayout()?.getType()==="window")&&P.addEventListener("keydown",p.onTabsetNavKeyDown),()=>{p.setGeometryResizeObserver(void 0),O.disconnect(),B.removeEventListener("resize",E),document.removeEventListener("visibilitychange",A),P.removeEventListener("pointerdown",p.onOverlayBorderPointerDown,!0),P.removeEventListener("keydown",p.onOverlayBorderKeyDown),P.removeEventListener("keydown",p.onTabsetNavKeyDown)}},[p,a]),m.useEffect(()=>{let P;if(!p.isMainLayout()&&p.getLayout().getType()==="window"){const B=p.getProps().mainLayoutController?.getRootDiv();if(B){const O=B,E=i.current;Eh(O,E),P=new MutationObserver(()=>{Eh(O,E)&&p.redrawLayout()}),P.observe(O,{attributeFilter:["style"]})}}return()=>{P&&P.disconnect()}},[p]),m.useEffect(()=>{const P=e.model;if(g.setToExportRectFunction((B,O)=>O==="window"?p.getScreenRect(B):p.getRelativeRect(B)),p.setLayout(g),p.isMainLayout()){const B={onAfterAction:p.onModelChange};return P.addChangeListener(B),()=>{P.removeChangeListener(B)}}},[e.model,p,g]);const x=p.isMainLayout()?s.jsxs("div",{className:p.getClassName(U.FLEXLAYOUT__LAYOUT_METRICS),children:[s.jsx("div",{ref:u,className:p.getClassName(U.FLEXLAYOUT__BORDER_SIZER),children:"FindBorderBarSize"},"findBorderBarSize"),s.jsx("div",{ref:d,className:p.getClassName(U.FLEXLAYOUT__SPLITTER_+"horz")},"findSplitterSize")]}):null;if(!i.current)return s.jsx("div",{ref:i,className:p.getClassName(U.FLEXLAYOUT__LAYOUT),children:x});const w=e.model,k=p.getLayoutId();w.getRootRow(k).calcMinMaxSize(),w.getRootRow(k).setPaths(e.path||""),p.isMainLayout()&&w.getBorderSet().setPaths();const b=s.jsx(dm,{controller:p,show:r.showOverlay},"__overlay__"),h=p.renderLayout(),v=s.jsx(Sm,{controller:p,inner:h}),_=p.renderTabContainers(),y=p.reorderComponents(_,p.getOrderedTabIds());let T=null,S=null,z=null,N=null;return p.isMainLayout()&&(T=s.jsx(km,{controller:p}),S=p.reorderComponents(p.renderTabContents(),p.getOrderedTabMoveableIds()),z=s.jsx("div",{"aria-hidden":"true",className:p.getClassName(U.FLEXLAYOUT__LAYOUT_TAB_STAMPS),children:p.renderDragTabButtons()},"__dragTabButtons__"),N=s.jsx("div",{ref:c,className:p.getClassName(U.FLEXLAYOUT__LAYOUT_MOVEABLES_HOME)},"__moveables_home__")),s.jsxs("div",{ref:i,className:p.getClassName(U.FLEXLAYOUT__LAYOUT),onDragEnter:p.getDragDropManager().onDragEnterRaw,onDragLeave:p.getDragDropManager().onDragLeaveRaw,onDragOver:p.getDragDropManager().onDragOver,onDrop:p.getDragDropManager().onDrop,children:[x,N,b,v,y,S,T,z]})}),Jr,v1=(Jr=class{constructor(t,r,o){I(this,"_props");I(this,"_state");I(this,"_setState");I(this,"_layoutRef");I(this,"_moveablesHomeRef");I(this,"_findBorderBarSizeRef");I(this,"_findSplitterSizeRef");I(this,"_mainRef");I(this,"_orderedTabIds");I(this,"_orderedTabMoveableIds");I(this,"_currentDocument");I(this,"_currentWindow");I(this,"_showOverlay",!1);I(this,"_supportsPopout");I(this,"_popoutURL");I(this,"_icons");I(this,"_dragDropManager");I(this,"_layoutId");I(this,"_layout");I(this,"_mainController");I(this,"_popoutWindowName");I(this,"_cachedLayoutDOMRect");I(this,"_reLayout");I(this,"_measurables",new Map);I(this,"_tabPanels",new Map);I(this,"_lastRect",ge.empty());I(this,"_lastSplitterSize",8);I(this,"_geometryResizeObserver");I(this,"updateRect",()=>{if(this._layoutRef.current){let t=this._layoutRef.current;if(!this._layout.isMainLayout()&&this._layout.getType()==="float"){const o=t.closest("."+this.getClassName(U.FLEXLAYOUT__FLOAT_WINDOW));o instanceof HTMLDivElement&&(t=o)}let r=ge.fromDomRect(t.getBoundingClientRect());if(!this._layout.isMainLayout()&&this._layout.getType()==="float"){const o=this._mainController.getDomRect();r=r.relativeTo(o)}!r.equalsWhenRounded(this._lastRect)&&r.width!==0&&r.height!==0&&(this._lastRect=r,this._layout.setRect(r),this.redrawLayout())}});I(this,"onModelChange",t=>{const r=t instanceof Kv?t.actions:[t];for(const o of r)if(o.type==re.DELETE_TAB&&this._state.showHiddenBorder!==ee.CENTER&&this._props.model.getBorderSet().getBorderMap().get(this._state.showHiddenBorder).getChildren().length===0){this._setState({showHiddenBorder:ee.CENTER});break}if(t.isAdjusting()&&(t.type===re.ADJUST_WEIGHTS||t.type===re.ADJUST_BORDER_SPLIT)){t.type===re.ADJUST_WEIGHTS?this.applyAdjustingWeights(t):this.applyAdjustingBorderSplit(t),this._props.onModelChange&&this._props.onModelChange(this._props.model,t);return}this.redrawLayout(),this._props.onModelChange&&this._props.onModelChange(this._props.model,t)});I(this,"onOverlayBorderPointerDown",t=>{const r=this._props.model.getBorderSet().getBorders().filter(l=>l.isOverlay()&&l.getSelected()!==-1);if(r.length===0||t.target?.closest?.("."+this.getClassName(U.FLEXLAYOUT__POPUP_MENU_CONTAINER)+",."+this.getClassName(U.FLEXLAYOUT__FLOAT_WINDOW)+",."+this.getClassName(U.FLEXLAYOUT__FLOATING_WINDOW_CONTENT)+",."+this.getClassName(U.FLEXLAYOUT__BORDER_TAB_OVERLAY)))return;const o=this.getDomRect();if(!o)return;const n=t.clientX-o.x,i=t.clientY-o.y,a=this._props.model.getRootRow(lt.MAIN_LAYOUT_ID)?.getRect();if(!(!a||!a.contains(n,i)))for(const l of r)l.getContentRect()?.contains(n,i)||this.closeOverlayBorder(l)});I(this,"onOverlayBorderKeyDown",t=>{if(!eo(t,this.getKeyMap().closeOverlayBorder))return;const r=this._currentDocument?.activeElement;if(!r)return;const o=this._props.model.getBorderSet().getBorders().filter(n=>n.isOverlay()&&n.getSelected()!==-1);for(const n of o){const i=n.getSelectedNode(),a=this._currentDocument.getElementById(Lt("flexlayout-tab-",i.getId())),l=this._currentDocument.getElementById(Lt("flexlayout-tabbutton-",i.getId()));if(a&&a.contains(r)||r===l){this.closeOverlayBorder(n),t.preventDefault();break}}});I(this,"onTabsetNavKeyDown",t=>{if(t.defaultPrevented)return;const r=this.getKeyMap();let o;if(eo(t,r.focusNextTabset))o=1;else if(eo(t,r.focusPreviousTabset))o=-1;else return;this.focusAdjacentTabset(o)&&t.preventDefault()});I(this,"updateLayoutMetrics",()=>{if(this._findBorderBarSizeRef.current){const t=this._findBorderBarSizeRef.current.getBoundingClientRect().height;Math.abs(t-this._state.calculatedBorderBarSize)>.5&&this.setState({calculatedBorderBarSize:t})}if(this._findSplitterSizeRef.current){const t=this._findSplitterSizeRef.current.getBoundingClientRect().width;Math.abs(t-this._lastSplitterSize)>.5&&(this._lastSplitterSize=t,this._props.model.setSplitterSize(t),this.redrawLayout())}});I(this,"getClassName",t=>this._props.classNameMapper===void 0?t:this._props.classNameMapper(t));I(this,"onCloseLayout",t=>{this.doAction(re.closePopout(t.getLayoutId()))});this._props=t,this._state=r,this._setState=o,this._orderedTabIds=[],this._orderedTabMoveableIds=[],this._supportsPopout=t.supportsPopout!==void 0?t.supportsPopout:x1,this._popoutURL=t.popoutURL?t.popoutURL:"popout.html",this._icons={...m1,...t.icons},this._layoutId=t.layoutId?t.layoutId:lt.MAIN_LAYOUT_ID,this._mainController=t.mainLayoutController?t.mainLayoutController:this,this._dragDropManager=new i1(this),this._layout=t.model.getLayouts().get(this._layoutId),this._layout.setController(this),this._popoutWindowName=t.popoutWindowName||"Popout Window",this._reLayout=!1}renderLayout(){return this._cachedLayoutDOMRect=void 0,s.jsxs(s.Fragment,{children:[s.jsx(Tf,{controller:this,rowNode:this._props.model.getRootRow(this._layoutId)},"__row__"),s.jsx(ym,{controller:this})]})}renderTabContainers(){const t=new Map;return this._props.model.visitLayoutNodes(this._layoutId,r=>{if(r instanceof Le){const o=r,n=o.isSelected(),i=o.isRendered(),a=o.isEnableRenderOnDemand();(i||n||!a)&&t.set(o.getId(),s.jsx(mm,{controller:this,tabNode:o,selected:n},o.getId()))}}),t}renderTabContents(){const t=new Map;for(const[r,o]of this._props.model.getLayouts())this._props.model.visitLayoutNodes(r,n=>{if(n instanceof Le){const i=n,a=i.isSelected(),l=i.isRendered(),c=i.isEnableRenderOnDemand(),u=i.getParent().getContentRect(),d=a||!c;if(l||d&&u.width>0&&u.height>0){const f=i.getMoveableElement();f.style.overflow=i.isEnableScrollbars()?"auto":"hidden";const p=o.getWindowId()||"",g=i.getId()+(i.isEnableWindowReMount()?p:"");t.set(i.getId(),Ur.createPortal(s.jsx(xm,{controller:this,tabNode:i,windowId:p,visible:d,fullRedrawRevision:this._state.fullRedrawRevision,parentRedrawRevision:this._props.parentRedrawRevision},g),f,g)),i.setRendered(!0)}}});return t}renderDragTabButtons(){const t=[];return this._props.model.visitNodes(r=>{if(r instanceof Le){const o=r;t.push(s.jsx(Lm,{controller:this,tabNode:o,dragging:Tl},o.getId()))}}),t}redrawLayout(){this._mainController?.setState(t=>({layoutRedrawRevision:t.layoutRedrawRevision+1}))}redrawLayoutAndTabContent(){this._mainController?.setState(t=>({fullRedrawRevision:t.fullRedrawRevision+1}))}doAction(t){if(this._props.onAction!==void 0){const r=this._props.onAction(t);return r!==void 0?this._props.model.doAction(r):void 0}else return this._props.model.doAction(t)}applyMeasuredGeometry(){this.syncLayoutMetrics(),this.positionTabPanels(),this.isReLayout()&&(this.redrawLayout(),this.setReLayout(!1))}applyAdjustingWeights(t){const r=this._props.model.getNodeById(t.data.nodeId);if(!(r instanceof Ue)){this.redrawLayout();return}const o=t.data.weights,n=r.getChildren();for(let i=0;it.has(i)),n=new Set(o);for(const i of t.keys())n.has(i)||o.push(i);return r.splice(0,r.length,...o),r.map(i=>t.get(i))}checkForBorderToShow(t,r){const o=this.getBoundingClientRect(this._mainRef.current),n=o.getCenter(),i=10,a=100/2;let l=!1;this._props.model.isEnableEdgeDock()&&this._state.showHiddenBorder===ee.CENTER&&(r>n.y-a&&rn.x-a&&t=o.getRight()-i?c=ee.RIGHT:r<=o.y+i?c=ee.TOP:r>=o.getBottom()-i&&(c=ee.BOTTOM)),c!==this._state.showHiddenBorder&&this.setState({showHiddenBorder:c})}closeOverlayBorder(t){const r=t.getSelectedNode();if(r===void 0)return;const o=this._currentDocument,n=o?.getElementById(Lt("flexlayout-tab-",r.getId())),i=!!o&&!!n&&n.contains(o.activeElement);this.doAction(re.selectTab(r.getId())),i&&o.getElementById(Lt("flexlayout-tabbutton-",r.getId()))?.focus()}focusAdjacentTabset(t){const r=this._currentDocument,o=r?.activeElement;if(!r||!o||!this.getRootDiv()?.contains(o))return!1;const n=o.tagName;if(n==="INPUT"||n==="TEXTAREA"||o.isContentEditable||o.closest('[role="menu"]')||this._props.model.getMaximizedTabset(this._layoutId)!==void 0)return!1;const i=[];if(this._props.model.visitLayoutNodes(this._layoutId,u=>{u instanceof Ne&&u.getSelectedNode()!==void 0&&i.push(u)}),i.length<2)return!1;const a=u=>this._measurables.get("tabset:"+u.getId())?.element.contains(o)?!0:!!r.getElementById(Lt("flexlayout-tab-",u.getSelectedNode().getId()))?.contains(o);let l=i.findIndex(a);if(l===-1){const u=this._props.model.getActiveTabset(this._layoutId);l=u!==void 0?i.indexOf(u):0,l===-1&&(l=0)}const c=i[(l+t+i.length)%i.length];return r.getElementById(Lt("flexlayout-tabbutton-",c.getSelectedNode().getId()))?.focus(),this.doAction(re.setActiveTabset(c.getId(),this._layoutId)),!0}registerMeasurable(t,r,o){const n=r+":"+t.getId(),i=this._measurables.get(n);o?this._measurables.set(n,{kind:r,node:t,element:o}):this._measurables.delete(n),r!=="tabbutton"&&(i&&this._geometryResizeObserver?.unobserve(i.element),o&&this._geometryResizeObserver?.observe(o))}setGeometryResizeObserver(t){if(this._geometryResizeObserver=t,t)for(const{kind:r,element:o}of this._measurables.values())r!=="tabbutton"&&t.observe(o)}syncLayoutMetrics(){this._cachedLayoutDOMRect=void 0;let t=!1;for(const{kind:r,node:o,element:n}of this._measurables.values()){if(!n.isConnected)continue;const i=this.getBoundingClientRect(n);switch(r){case"row":case"tabset":i.equalsWhenRounded(o.getRect())||(o.setRect(i),t=!0);break;case"tabstrip":i.equalsWhenRounded(o.getTabStripRect())||(o.setTabStripRect(i),t=!0);break;case"tabsetcontent":{const a=o;if(!isNaN(i.x)&&!a.getContentRect().equalsWhenRounded(i)){const l=a.getContentRect().width>0&&a.getContentRect().height>0;a.setContentRect(i),t=!0,!l&&i.width>0&&i.height>0&&this.setReLayout(!0)}break}case"tabbutton":i.equalsWhenRounded(o.getTabRect())||(o.setTabRect(i),t=!0);break;case"borderheader":i.equalsWhenRounded(o.getRect())||(o.setTabHeaderRect(i),t=!0);break;case"bordercontent":{const a=o;if(!isNaN(i.x)&&i.width>0&&!a.getContentRect().equalsWhenRounded(i)){const l=a.getContentRect().width>0&&a.getContentRect().height>0;a.setContentRect(i),t=!0,!l&&i.height>0&&this.setReLayout(!0)}break}}}return t}registerTabPanel(t,r){r?this._tabPanels.set(t.getId(),{node:t,element:r}):this._tabPanels.delete(t.getId())}positionTabPanels(){for(const{node:t,element:r}of this._tabPanels.values()){const o=t.getParent(),n=o.getContentRect();let i=t.isSelected();o instanceof Ne?this._props.model.getMaximizedTabset(this._layoutId)!==void 0&&!o.isMaximized()&&(i=!1):o instanceof Ke&&(o.isShowing()||(i=!1)),n.positionElement(r),r.style.display=i?"":"none",t.setRect(n),t.setVisible(i)}}addTabWithDragAndDrop(t,r,o){this._dragDropManager.addTabWithDragAndDrop(t,r,o)}moveTabWithDragAndDrop(t,r){this._dragDropManager.moveTabWithDragAndDrop(t,r)}setDragComponent(t,r,o,n){this._dragDropManager.setDragComponent(t,r,o,n)}getMoveablesHome(){return this._moveablesHomeRef.current}getProps(){return this._props}getKeyMap(){return K0(this._props.keyMap)}setProps(t){this._props=t}getState(){return this._state}setStateRaw(t){this._state=t}setState(t){this._setState(t)}setSetState(t){this._setState=t}setLayoutRef(t){this._layoutRef=t}setMoveablesHomeRef(t){this._moveablesHomeRef=t}setFindBorderBarSizeRef(t){this._findBorderBarSizeRef=t}setFindSplitterSizeRef(t){this._findSplitterSizeRef=t}getMainRef(){return this._mainRef}setMainRef(t){this._mainRef=t}getOrderedTabIds(){return this._orderedTabIds}getOrderedTabMoveableIds(){return this._orderedTabMoveableIds}getCurrentDocument(){return this._currentDocument}setCurrentDocument(t){this._currentDocument=t}getCurrentWindow(){return this._currentWindow}setCurrentWindow(t){this._currentWindow=t,t&&!Jr.Windows.has(t)&&Jr.Windows.set(t,En())}getWindowId(){if(this.getCurrentWindow())return Jr.Windows.get(this.getCurrentWindow())}isSupportsPopout(){return this._supportsPopout}getPopoutURL(){return this._popoutURL}getIcons(){return this._icons}getDragDropManager(){return this._dragDropManager}getLayoutId(){return this._layoutId}getLayout(){return this._layout}setLayout(t){this._layout=t}getMainController(){return this._mainController}isMainLayout(){return this._layout.isMainLayout()}getPopoutWindowName(){return this._popoutWindowName}isReLayout(){return this._reLayout}setReLayout(t){this._reLayout=t}getBoundingClientRect(t){const r=this.getDomRect();return r?ge.getBoundingClientRect(t).relativeTo(r):ge.empty()}getLayoutRef(){return this._layoutRef.current}getDomRect(){return this._cachedLayoutDOMRect!==void 0?this._cachedLayoutDOMRect:this._layoutRef.current?(this._cachedLayoutDOMRect=ge.fromDomRect(this._layoutRef.current.getBoundingClientRect()),this._cachedLayoutDOMRect):ge.empty()}getRootDiv(){return this._layoutRef.current}getMainElement(){return this._mainRef.current}getFactory(){return this._props.factory}isRealtimeResize(){return this._props.realtimeResize??!1}setEditingTab(t){this.setState({editingTab:t})}getEditingTab(){return this._state.editingTab}getModel(){return this._props.model}getTabDragSpeed(){return this._props.tabDragSpeed?this._props.tabDragSpeed:.3}getScreenRect(t){const r=t.clone(),o=this.getDomRect(),n=this._currentWindow.outerHeight-this._currentWindow.innerHeight,i=this._currentWindow.outerWidth-this._currentWindow.innerWidth,a=n>=0&&n<=200?n:60,l=i>=0&&i<=100?i:2;return r.x=this._currentWindow.screenX+this._currentWindow.scrollX+l/2+o.x+r.x,r.y=this._currentWindow.screenY+this._currentWindow.scrollY+(a-l/2)+o.y+r.y,r.height+=a,r.width+=l,r}getRelativeRect(t){const r=t.clone();if(!this._layout.isMainLayout()){const o=this._layout.getRect();r.x+=o.x,r.y+=o.y}return r}moveWindowToFront(t){this.doAction(re.movePopoutToFront(t))}addTabToTabSet(t,r){if(this._props.model.getNodeById(t)!==void 0)return this.doAction(re.addTab(r,t,ee.CENTER,-1))}addTabToActiveTabSet(t){const r=this._props.model.getActiveTabset(this._layoutId);if(r!==void 0)return this.doAction(re.addTab(t,r.getId(),ee.CENTER,-1))}maximize(t){this.doAction(re.maximizeToggle(t.getId(),this.getLayoutId()))}customizeTab(t,r){this._props.onRenderTab&&this._props.onRenderTab(t,r)}customizeTabSet(t,r){this._props.onRenderTabSet&&this._props.onRenderTabSet(t,r)}i18nName(t,r){let o;return this._props.i18nMapper&&(o=this._props.i18nMapper(t,r)),o===void 0&&(o=t+(r===void 0?"":r)),o}getShowOverflowMenu(){return this._props.onShowOverflowMenu}getTabSetPlaceHolderCallback(){return this._props.onTabSetPlaceHolder}showContextMenu(t,r){this._props.onContextMenu&&this._props.onContextMenu(t,r)}auxMouseClick(t,r){this._props.onAuxMouseClick&&this._props.onAuxMouseClick(t,r)}showOverlay(t){this._showOverlay!==t&&(this._showOverlay=t,this.setState({showOverlay:t}),El(!t,this._currentDocument))}showOverlayOnAllWindows(t){for(const[,r]of this._props.model.getLayouts())r.getController()&&r.getController().showOverlay(t)}},I(Jr,"Windows",new WeakMap),Jr),m1={close:s.jsx(Sl,{}),pin:s.jsx(om,{}),closeTabset:s.jsx(Sl,{}),closeFloatPopout:s.jsx(Sl,{}),popout:s.jsx(Ju,{}),popoutFloat:s.jsx(lm,{}),maximize:s.jsx(nm,{}),restore:s.jsx(cm,{}),more:s.jsx(im,{}),edgeArrow:s.jsx(am,{}),activeTabset:s.jsx(um,{}),dragToDock:s.jsx(sm,{}),popoutFloatWindow:s.jsx(Ju,{})},x1=Jv(),Cm=m.forwardRef((e,t)=>{const r=m.useRef(null),o=m.useRef(e.model),n=m.useRef(0);o.current!==e.model&&(e.model.getAdoptedFromModel()!==o.current&&n.current++,o.current=e.model),Cm.displayName="Layout",m.useImperativeHandle(t,()=>({redraw:()=>{r.current?.redrawLayoutAndTabContent()},addTabToTabSet:(a,l)=>r.current?.addTabToTabSet(a,l),addTabWithDragAndDrop:(a,l,c)=>{r.current?.addTabWithDragAndDrop(a,l,c)},moveTabWithDragAndDrop:(a,l)=>{r.current?.moveTabWithDragAndDrop(a,l)},addTabToActiveTabSet:a=>r.current?.addTabToActiveTabSet(a),setDragComponent:(a,l,c,u)=>{r.current?.setDragComponent(a,l,c,u)},editTabName:a=>{const l=r.current?.getModel().getNodeById(a);l instanceof Le&&l.isEnableRename()&&l.getLayout().getController()?.setEditingTab(l)},getRootDiv:()=>r.current.getRootDiv()}));const i={};return s.jsx(ma,{ref:r,...e,parentRedrawRevision:i},n.current)});const Sh=20,y1="bv-nodepack:layout-profiles:v1:",Rf=new Map,Zu="bv-layout-session-changed",Nm=e=>`${y1}${e}`;function Sf(e){try{const t=JSON.parse(localStorage.getItem(Nm(e))??"");if(t?.schemaVersion===1&&Array.isArray(t.profiles))return t}catch{}return{schemaVersion:1,profiles:[]}}function Om(e,t){localStorage.setItem(Nm(e),JSON.stringify(t))}const _1=e=>{const t=e.trim();if(t.length<1||t.length>40)throw new Error("Layout name must contain 1 to 40 characters.");return t};function Lh(e){const t=Sf(e.editorType),r=_1(e.name),o=e.id??crypto.randomUUID();if(t.profiles.find(l=>l.name.localeCompare(r,void 0,{sensitivity:"accent"})===0&&l.id!==o))throw new Error("A layout with this name already exists.");const i={...e,id:o,name:r,schemaVersion:1,updatedAt:new Date().toISOString()},a=t.profiles.some(l=>l.id===o)?t.profiles.map(l=>l.id===o?i:l):[...t.profiles,i];if(a.length>Sh)throw new Error(`A maximum of ${Sh} layouts can be saved for this editor.`);return Om(e.editorType,{schemaVersion:1,profiles:a,selectedId:o}),i}function w1(e,t){const r=Sf(e);Om(e,{...r,profiles:r.profiles.filter(o=>o.id!==t),selectedId:r.selectedId===t?void 0:r.selectedId})}function Ll(e,t,r,o,n=!0){Rf.set(e,{layout:structuredClone(t),status:r,profileId:o}),n&&window.dispatchEvent(new CustomEvent(Zu,{detail:{key:e}}))}function Mi(e){const t=Rf.get(e);return t?structuredClone(t):void 0}function k1(e){Rf.delete(e)}function E1(e,t){return e.editorType===t.editorType&&e.editorVersion===t.editorVersion&&e.library===t.library&&e.signature===t.signature}const Ch="flexlayout-react@0.10.5";function T1(e){return{global:{tabEnableClose:!1,tabEnablePopout:!1,tabEnablePopoutIcon:!1,tabEnablePopoutFloatIcon:!0,tabSetMinWidth:180,tabSetMinHeight:130},borders:[],layout:{type:"row",children:e.map(t=>({type:"tabset",weight:t.weight,minWidth:t.minWidth,children:[{type:"tab",id:t.id,name:t.title,component:t.id,enablePopoutFloatIcon:!0}]}))}}}const R1=new Set([re.MOVE_NODE,re.DELETE_TAB,re.DELETE_TABSET,re.RENAME_TAB]),S1=e=>R1.has(e.type)?"modified":"adjusted";function L1(e){k1(e)}function Mm({storageId:e,panels:t,resetSignal:r=0,defaultModel:o,onStatus:n}){const i=JSON.stringify({panels:t.map(f=>`${f.id}:${f.weight}`),defaultModel:o}),a=m.useMemo(()=>o??T1(t),[i]),[l,c]=m.useState(()=>lt.fromJson(Mi(e)?.layout??a)),u=m.useMemo(()=>new Map(t.map(f=>[f.id,f.content])),[t]);m.useEffect(()=>{const f=Mi(e);c(lt.fromJson(f?.layout??a)),n?.(f?.status??"saved")},[a,i,e]),m.useEffect(()=>{r&&(L1(e),c(lt.fromJson(a)),n?.("saved"))},[a,r,e]),m.useEffect(()=>{const f=p=>{if(p.detail?.key!==e)return;const g=Mi(e);g&&(c(lt.fromJson(g.layout)),n?.(g.status))};return window.addEventListener(Zu,f),()=>window.removeEventListener(Zu,f)},[n,e]);const d=f=>f.type===re.POPOUT_TAB&&f.data.type==="float"&&l.getNodeById(f.data.node)?.getLayoutId()!==lt.MAIN_LAYOUT_ID?void 0:f;return s.jsx("div",{className:"bv-ui-dock flexlayout__theme_dark",children:s.jsx(Cm,{model:l,factory:f=>u.get(f.getComponent()??"")??null,constrainFloatPanels:!0,onAction:d,onModelChange:(f,p)=>{c(f);const g=Mi(e),x=g?.status==="modified"?"modified":S1(p);Ll(e,f.toJson(),x,g?.profileId,!1),n?.(x)}})})}let go=[];const Qu=new Set,Am=()=>Qu.forEach(e=>e());function Ir(e){const t=e.id??`${e.title}:${e.message??""}`,r=go.findIndex(n=>n.id===t),o={...e,id:t};return go=r>=0?[...go.slice(0,r),o,...go.slice(r+1)]:[...go,o].slice(-3),Am(),t}function C1(e){go=go.filter(t=>t.id!==e),Am()}const N1=e=>(Qu.add(e),()=>Qu.delete(e)),Nh=()=>go;function O1(){const e=m.useSyncExternalStore(N1,Nh,Nh),t=m.useCallback(()=>{const r=document.getElementById("bv-global-toast-stack");if(!r)return;const o=[...document.querySelectorAll(".comfyui-bottom-panel,.bottom-panel,.actionbar,[class*='bottom'][class*='toolbar'],#graph-canvas-container [role='toolbar'],#bv-ui-window-shelf")].filter(i=>i.offsetParent!==null).map(i=>i.getBoundingClientRect()).filter(i=>i.bottom>window.innerHeight-160),n=Math.max(16,...o.map(i=>Math.max(0,window.innerHeight-i.top+8)));r.style.setProperty("--bv-toast-bottom",`${n}px`)},[]);return m.useEffect(()=>{const r=o=>{const n=o.detail;n?.title&&Ir({title:n.title,message:n.message,tone:n.tone??"neutral",duration:n.duration??4500})};return window.addEventListener("bv-show-toast",r),()=>window.removeEventListener("bv-show-toast",r)},[]),m.useEffect(()=>{t();const r=new ResizeObserver(t),o=new MutationObserver(t);return document.querySelectorAll("body *").forEach(n=>{n.offsetParent!==null&&n.getBoundingClientRect().bottom>window.innerHeight-180&&r.observe(n)}),o.observe(document.body,{childList:!0,subtree:!0}),window.addEventListener("resize",t),()=>{r.disconnect(),o.disconnect(),window.removeEventListener("resize",t)}},[t]),e.length?Ur.createPortal(s.jsx("div",{id:"bv-global-toast-stack",className:"bv-ui bv-density-compact bv-toast-stack bv-global-toast-stack","aria-live":"polite",children:e.map(r=>s.jsx(Yw,{tone:r.tone,title:r.title,duration:r.duration,onClose:()=>C1(r.id),children:r.message},r.id))}),document.body):null}const Ar=({children:e,className:t=""})=>s.jsx("svg",{className:t,viewBox:"0 0 24 24","aria-hidden":"true",children:e}),Dm=()=>s.jsx("svg",{className:"bv-brand-cyclone",viewBox:"0 0 32 32","aria-hidden":"true",children:s.jsx("path",{d:"M11.08 2.736a2 2 0 0 1-.286 2.814A12.99 12.99 0 0 0 6 15.64c0 5.525 4.475 10 10 10s10-4.475 10-10a7 7 0 0 0-14 0c0 2.215 1.785 4 4 4s4-1.785 4-4c0-.555-.445-1-1-1s-1 .445-1 1a2 2 0 1 1-4 0c0-2.765 2.235-5 5-5s5 2.235 5 5c0 4.425-3.575 8-8 8s-8-3.575-8-8c0-6.075 4.925-11 11-11s11 4.925 11 11c0 7.735-6.265 14-14 14s-14-6.265-14-14C2 10.313 4.45 5.563 8.266 2.45a2 2 0 0 1 2.814.286"})}),Im=m.createContext({narrow:!1,minimal:!1,menuOverflow:!1}),jm=()=>m.useContext(Im);function M1(e){const t=e.mode==="workspace",r=m.useRef(null),[o,n]=m.useState(1/0),[i,a]=m.useState(!1),l=m.useRef(null);m.useEffect(()=>{const u=r.current;if(!u)return;const d=new ResizeObserver(f=>n(f[0]?.contentRect.width??u.clientWidth));return d.observe(u),()=>d.disconnect()},[]);const c=m.useMemo(()=>({narrow:o<760,minimal:o<620,menuOverflow:o<520}),[o]);return s.jsx(Im.Provider,{value:c,children:s.jsxs("header",{ref:r,className:`bv-ui-window-header bv-density-compact ${c.narrow?"is-narrow":""} ${c.minimal?"is-minimal":""} ${c.menuOverflow?"is-menu-overflow":""}`.trim(),onPointerDown:e.onPointerDown,children:[s.jsxs("div",{className:"bv-ui-window-identity",children:[s.jsx("span",{className:"bv-ui-window-icon",children:s.jsx(Dm,{})}),s.jsxs("strong",{className:"bv-ui-window-title",children:[s.jsx("span",{className:"bv-ui-window-title-full",children:e.title}),e.shortTitle&&s.jsx("span",{className:"bv-ui-window-title-short",children:e.shortTitle})]}),e.context&&s.jsx("div",{className:"bv-ui-window-context",children:e.context})]}),s.jsx("div",{className:"bv-ui-window-center",children:e.center}),s.jsxs("div",{className:"bv-ui-window-controls",children:[s.jsx("button",{type:"button",className:"bv-ui-window-control",title:"Choose BV window","aria-label":"Choose BV window",onClick:u=>window.dispatchEvent(new CustomEvent(is,{detail:{anchor:u.currentTarget}})),children:s.jsxs(Ar,{children:[s.jsx("rect",{x:"4",y:"5",width:"7",height:"6",rx:"1"}),s.jsx("rect",{x:"13",y:"5",width:"7",height:"6",rx:"1"}),s.jsx("rect",{x:"4",y:"13",width:"7",height:"6",rx:"1"}),s.jsx("rect",{x:"13",y:"13",width:"7",height:"6",rx:"1"})]})}),e.onMenuVisible&&(c.minimal?s.jsxs("div",{ref:l,className:"bv-window-header-utility",children:[s.jsx("button",{type:"button",className:"bv-ui-window-control","aria-label":"More window actions","aria-expanded":i,onClick:()=>a(u=>!u),children:"•••"}),s.jsx(Io,{open:i,anchor:l,onClose:()=>a(!1),className:"bv-window-navigator-menu",children:s.jsx("button",{type:"button",className:"bv-window-visibility-menu-action",onClick:()=>{e.onMenuVisible?.(!e.menuVisible),a(!1)},children:e.menuVisible?"Hide from BV window menus":"Show in BV window menus"})})]}):s.jsx("button",{type:"button",className:"bv-ui-window-control bv-ui-window-control--visibility",title:e.menuVisible?"Hide this node from BV window menus":"Show this node in BV window menus","aria-label":e.menuVisible?"Hide this node from BV window menus":"Show this node in BV window menus","aria-pressed":e.menuVisible,onClick:()=>e.onMenuVisible?.(!e.menuVisible),children:e.menuVisible?s.jsxs(Ar,{children:[s.jsx("path",{d:"M2.5 12s3.5-5 9.5-5 9.5 5 9.5 5-3.5 5-9.5 5-9.5-5-9.5-5Z"}),s.jsx("circle",{cx:"12",cy:"12",r:"2.5"})]}):s.jsx(Ar,{children:s.jsx("path",{d:"m4 4 16 16M9.5 7.4A10.8 10.8 0 0 1 12 7c6 0 9.5 5 9.5 5a16 16 0 0 1-2.2 2.5M6.2 8.3A15.2 15.2 0 0 0 2.5 12s3.5 5 9.5 5c1 0 2-.2 2.8-.4"})})})),s.jsx("button",{type:"button",className:"bv-ui-window-control",title:"Minimize","aria-label":"Minimize window",onClick:e.onMinimize,children:s.jsx(Ar,{children:s.jsx("path",{d:"M7 16.5h10"})})}),e.allowWorkspace!==!1&&s.jsx("button",{type:"button",className:"bv-ui-window-control",title:t?"Restore floating window":"Maximize to workspace","aria-label":t?"Restore floating window":"Maximize to workspace",onClick:e.onMode,children:t?s.jsxs(Ar,{children:[s.jsx("rect",{x:"4.5",y:"7.5",width:"12",height:"12",rx:"1.5"}),s.jsx("path",{d:"M7.5 7.5v-3h12v12h-3"})]}):s.jsx(Ar,{children:s.jsx("rect",{x:"5",y:"5",width:"14",height:"14",rx:"1.5"})})}),s.jsx("button",{type:"button",className:"bv-ui-window-control bv-ui-window-control--close",title:"Close","aria-label":"Close window",onClick:e.onClose,children:s.jsx(Ar,{children:s.jsx("path",{d:"m7 7 10 10M17 7 7 17"})})})]})]})})}const Ei=(e,t)=>{const r=Math.max(280,window.innerWidth-32),o=Math.max(240,window.innerHeight-32),n=Math.min(t.width,420,r),i=Math.min(t.height,o),a=Math.max(n,Math.min(e.width,r)),l=Math.max(i,Math.min(e.height,o));return{x:Math.max(16,Math.min(e.x,window.innerWidth-a-16)),y:Math.max(16,Math.min(e.y,window.innerHeight-l-16)),width:a,height:l}};function xn({open:e,title:t,shortTitle:r,context:o,center:n,children:i,status:a,actions:l,activationToken:c=0,allowWorkspace:u=!0,initialMode:d="floating",initialGeometry:f,minSize:p={width:360,height:240},mode:g,className:x="",bodyClassName:w="",menuVisible:k,onMenuVisible:b,onClose:h,onGeometry:v,onModeChange:_}){const y=r??(t==="BV Regional Editor"?"Reg. Editor":t==="Regional Quick Edit"?"Quick Edit":void 0),T=()=>Ei({x:Math.max(16,(window.innerWidth-(f?.width??760))/2),y:Math.max(16,(window.innerHeight-(f?.height??640))/2),width:f?.width??760,height:f?.height??640,...f},p),[S,z]=m.useState(u?d:"floating"),[N,P]=m.useState(!1),[B,O]=m.useState(T),E=g??S,A=m.useRef(null),C=m.useRef(null),R=m.useRef(B),M=m.useRef(f),D=m.useRef();m.useEffect(()=>{R.current=B},[B]),m.useEffect(()=>{e&&P(!1)},[e]),m.useEffect(()=>{const Y=A.current;if(!(!e||!Y))return C.current=document.activeElement instanceof HTMLElement&&!Y.contains(document.activeElement)?document.activeElement:C.current,W0(Y)},[e]),m.useEffect(()=>{const Y=A.current;if(!Y)return;const Q=()=>{P(!1),requestAnimationFrame(()=>Y.focus({preventScroll:!0}))},oe=()=>P(!0);return Y.addEventListener("bv-ui-activate",Q),Y.addEventListener("bv-ui-minimize",oe),()=>{Y.removeEventListener("bv-ui-activate",Q),Y.removeEventListener("bv-ui-minimize",oe)}},[]),m.useEffect(()=>{const Y=A.current;if(!Y)return;const Q=oe=>{const le=oe.detail;u&&le?.mode&&(z(le.mode),_?.(le.mode)),le?.mode==="floating"&&le.geometry&&O(Ei(le.geometry,p))};return Y.addEventListener("bv-ui-set-window-state",Q),()=>Y.removeEventListener("bv-ui-set-window-state",Q)},[u,p.height,p.width,_]),m.useEffect(()=>{e&&(P(!1),requestAnimationFrame(()=>A.current?.focus({preventScroll:!0})))},[c,e]),m.useEffect(()=>{const Y=M.current;M.current=f,f&&O(Q=>Ei(P0(Q,Y,f),p))},[f?.height,f?.width,f?.x,f?.y,p.height,p.width]),m.useEffect(()=>{if(!e)return;const Y=()=>O(Q=>Ei(Q,p));return window.addEventListener("resize",Y),()=>window.removeEventListener("resize",Y)},[p.height,p.width,e]);const W=Y=>{E!=="floating"||Y.button!==0||Y.target.closest("button,input,select,textarea")||(D.current={pointerId:Y.pointerId,startX:Y.clientX,startY:Y.clientY,kind:"move",x:B.x,y:B.y},Y.currentTarget.setPointerCapture(Y.pointerId),Y.preventDefault())},F=Y=>Q=>{E!=="floating"||Q.button!==0||(D.current={pointerId:Q.pointerId,startX:Q.clientX,startY:Q.clientY,kind:"resize",direction:Y,geometry:B},Q.currentTarget.setPointerCapture(Q.pointerId),Q.preventDefault(),Q.stopPropagation())},ie=Y=>{const Q=D.current;if(!Q||Q.pointerId!==Y.pointerId)return;const oe={x:Y.clientX-Q.startX,y:Y.clientY-Q.startY},le={...p,width:Math.min(p.width,420)};O(Ce=>Ei(Q.kind==="move"?{...Ce,x:Q.x+oe.x,y:Q.y+oe.y}:B0(Q.geometry,oe,Q.direction,le),p))},X=Y=>{D.current?.pointerId===Y.pointerId&&(D.current=void 0,requestAnimationFrame(()=>v?.(R.current)))};if(!e)return null;const q=E==="workspace"?void 0:{left:B.x,top:B.y,width:B.width,height:B.height},Z=()=>{h(),requestAnimationFrame(()=>C.current?.focus({preventScroll:!0}))};return s.jsxs(s.Fragment,{children:[N&&s.jsx(Zs,{title:t,onRestore:()=>P(!1),onClose:Z}),s.jsxs("div",{ref:A,tabIndex:-1,hidden:N,className:`bv-managed-window ${E} ${x}`.trim(),role:"dialog","aria-modal":E==="workspace","aria-label":t,style:q,onPointerDownCapture:()=>A.current&&wh(A.current),onFocusCapture:()=>A.current&&wh(A.current),onPointerMove:ie,onPointerUp:X,onPointerCancel:X,onKeyDown:Y=>{if(Y.key==="Escape"&&![...document.querySelectorAll(".bv-anchored-popover,[role='listbox'],[role='menu']")].some(oe=>oe.offsetParent!==null)){Y.preventDefault(),Y.stopPropagation(),Z();return}Y.stopPropagation()},children:[s.jsxs("div",{className:"bv-managed-window-surface",children:[s.jsx(M1,{title:t,shortTitle:y,context:o,center:n,mode:E,allowWorkspace:u,menuVisible:k,onMenuVisible:b,onMode:()=>{if(!u)return;const Y=E==="workspace"?"floating":"workspace";z(Y),_?.(Y)},onMinimize:()=>P(!0),onClose:Z,onPointerDown:W}),s.jsx("div",{className:`bv-managed-window-body ${w}`.trim(),children:i}),(a||l)&&s.jsx(A1,{status:a??null,actions:l,stacked:E==="floating"&&B.width<700,minimal:E==="floating"&&B.width<470})]}),E==="floating"&&["n","ne","e","se","s","sw","w","nw"].map(Y=>s.jsx("div",{className:`bv-window-resize-handle ${Y}`,"aria-hidden":"true",onPointerDown:F(Y)},Y))]})]})}function A1({status:e,actions:t,warning:r=!1,stacked:o=!1,minimal:n=!1}){return s.jsxs("footer",{className:`bv-ui-window-footer${r?" has-warning":""}${o?" is-stacked":""}${n?" is-minimal":""}`,children:[s.jsx("div",{className:"bv-ui-window-status",children:e}),t&&s.jsx("div",{className:"bv-ui-window-footer-actions",children:t})]})}function Lf({primary:e,secondary:t,overflow:r=[]}){return s.jsxs("div",{className:"bv-footer-action-set",children:[t&&s.jsx("div",{className:"bv-footer-secondary-actions",children:t}),r.length>0&&s.jsx(pf,{label:"More",actions:r,intent:"ghost",density:"compact"}),s.jsx("div",{className:"bv-footer-primary-action",children:e})]})}function Zs({title:e,onRestore:t,onClose:r}){const o=m.useMemo(()=>{let n=document.getElementById("bv-ui-window-shelf");return n||(n=document.createElement("div"),n.id="bv-ui-window-shelf",n.className="bv-ui-window-shelf",document.body.append(n)),n},[]);return m.useEffect(()=>{const n="#graph-canvas, .graph-canvas-container, nav, aside, [role='navigation'], .side-tool-bar-container, .side-bar-panel",i=()=>{const f=document.querySelector("#graph-canvas, .graph-canvas-container")?.getBoundingClientRect()??null,p=[...document.querySelectorAll("nav, aside, [role='navigation'], .side-tool-bar-container, .side-bar-panel")].map(x=>x.getBoundingClientRect()),g=z0(f,p,{width:window.innerWidth,height:window.innerHeight});o.style.setProperty("--bv-ui-window-shelf-left",`${g.left}px`),o.style.setProperty("--bv-ui-window-shelf-bottom",`${g.bottom}px`)},a=new ResizeObserver(i),l=new Set,c=()=>document.querySelectorAll(n).forEach(d=>{l.has(d)||(l.add(d),a.observe(d))}),u=new MutationObserver(()=>{c(),i()});return c(),u.observe(document.body,{childList:!0,subtree:!0}),window.addEventListener("resize",i),i(),()=>{u.disconnect(),a.disconnect(),window.removeEventListener("resize",i)}},[o]),m.useEffect(()=>()=>{requestAnimationFrame(()=>{o.childElementCount||o.remove()})},[o]),Ur.createPortal(s.jsxs("div",{className:"bv-ui-window-shelf-item",children:[s.jsxs("button",{type:"button",className:"bv-ui-window-shelf-restore",onClick:t,title:`Restore ${e}`,children:[s.jsx("span",{className:"bv-ui-window-shelf-icon",children:s.jsx(Dm,{})}),s.jsx("span",{children:e})]}),r&&s.jsx("button",{type:"button",className:"bv-ui-window-shelf-close","aria-label":`Close ${e}`,title:`Close ${e}`,onClick:r,children:s.jsx(Ar,{children:s.jsx("path",{d:"m7 7 10 10M17 7 7 17"})})})]}),o)}function Da({label:e,value:t,options:r,onNavigate:o}){const n=m.useSyncExternalStore(A0,ri,ri),i=n==="keep",a=jm(),[l,c]=m.useState(!1),u=m.useRef(null),d=r.filter(k=>k.value!==t);if(!d.length)return null;const f=i?"Keep current window when switching. Hold Shift to replace once.":"Replace current window when switching. Hold Shift to keep once.",p=a.minimal,g=a.narrow,x=s.jsx(m0,{className:"bv-window-node-select",label:e,value:"",options:d,onValue:(k,b)=>o(k,b.shiftKey?i:!i)}),w=s.jsxs("button",{type:"button",role:"switch","aria-label":f,"aria-checked":i,className:"bv-window-switch-mode",title:f,onClick:()=>wf(i?"replace":"keep"),children:[s.jsx("span",{className:"bv-toggle-track",children:s.jsx("span",{})}),s.jsx("span",{"aria-hidden":"true",children:i?"Keep":"Replace"})]});return s.jsxs("div",{className:"bv-window-navigator",children:[!p&&x,!g&&w,g&&s.jsxs("div",{ref:u,className:"bv-window-navigator-overflow",children:[s.jsx("button",{type:"button","aria-label":"More window navigation options","aria-expanded":l,onClick:()=>c(k=>!k),children:"•••"}),s.jsx(Io,{open:l,anchor:u,onClose:()=>c(!1),className:"bv-window-navigator-menu",children:s.jsxs("div",{className:"bv-window-navigator-panel",children:[p&&s.jsx("div",{className:"bv-window-navigator-panel-row is-node",children:x}),s.jsxs("div",{className:"bv-window-navigator-panel-row is-mode",children:[s.jsx("span",{children:"Keep current window"}),w]})]})})]})]})}function Bm({onClick:e,storageId:t,editorType:r="regional"}){const[o,n]=m.useState(null),[i,a]=m.useState(""),[l,c]=m.useState(0),u=gf();if(!t)return s.jsxs("button",{type:"button",className:"bv-ui-button bv-ui-button--secondary bv-ui-window-reset",title:"Restore the default panel arrangement",onClick:e,children:[s.jsx(Ar,{children:s.jsx("path",{d:"M4.9 9A7.5 7.5 0 1 1 5 15M4 4v5h5"})}),s.jsx("span",{children:"Reset layout"})]});const d=Sf(r),f=Mi(t),p=d.profiles.find(h=>h.id===f?.profileId),g=()=>c(h=>h+1),x=()=>{if(!f)return;const h=Lh({id:o==="rename"?p?.id:void 0,name:i,editorType:r,editorVersion:"1",library:Ch,signature:`${r}:v1`,layout:f.layout});Ll(t,f.layout,"saved",h.id),n(null),g()},w={editorType:r,editorVersion:"1",library:Ch,signature:`${r}:v1`},k=(h,v)=>f?.status==="modified"?u.confirm({title:"Replace modified layout?",message:`Structural panel changes in this session will be discarded when switching to ${h}.`,confirmLabel:"Switch layout",danger:!0,action:v}):v(),b=[{id:"factory",label:"Factory layout",onSelect:()=>k("Factory",e)},...d.profiles.map(h=>{const v=E1(h,w);return{id:h.id,label:`${h.name}${v?"":" · Incompatible"}`,onSelect:()=>k(h.name,()=>{if(!v){e(),Ir({title:"Layout could not be loaded",message:"The saved layout belongs to an incompatible editor version. Factory layout was restored.",tone:"warning",duration:5e3});return}Ll(t,h.layout,"saved",h.id)})}}),{id:"save-as",label:"Save as new layout…",disabled:!f,onSelect:()=>{a(""),n("save")}},...p?[{id:"update",label:`Update ${p.name}`,onSelect:()=>{f&&(Lh({...p,layout:f.layout}),Ll(t,f.layout,"saved",p.id),g())}},{id:"rename",label:"Rename layout…",onSelect:()=>{a(p.name),n("rename")}},{id:"delete",label:"Delete layout",danger:!0,onSelect:()=>{w1(r,p.id),e(),g()}}]:[]];return s.jsxs(s.Fragment,{children:[s.jsx(pf,{label:`${p?.name??"Factory"}${f?.status&&f.status!=="saved"?` · ${f.status[0].toUpperCase()}${f.status.slice(1)}`:""}`,icon:s.jsx(Ar,{children:s.jsx("path",{d:"M4 5h16v14H4zM8 5v14M8 10h12"})}),actions:b}),s.jsx(Na,{open:!!o,title:o==="rename"?"Rename layout":"Save layout",onClose:()=>n(null),footer:s.jsx(ne,{intent:"primary",onClick:x,children:o==="rename"?"Rename":"Save layout"}),children:s.jsx(un,{label:"Layout name",value:i,maxLength:40,onValue:a})}),u.dialog]})}const Pm=new Map;let zm;function to(e,t){const r=String(t);r&&Pm.set(e,r),r&&e!=="quick"&&(zm=e)}function D1(){return zm}function $o(e){return Pm.get(e)}function ss({label:e,value:t,onImport:r,allowImport:o=!0}){const[n,i]=m.useState(!1),[a,l]=m.useState(""),[c,u]=m.useState(""),d=async()=>{try{await navigator.clipboard.writeText(JSON.stringify(t,null,2)),Ir({title:"Draft copied",message:`${e} draft JSON was copied to the clipboard.`,tone:"success",duration:4e3})}catch{Ir({title:"Clipboard unavailable",message:"Copy the draft from the import/export dialog instead.",tone:"warning",duration:4e3}),l(JSON.stringify(t,null,2)),i(!0)}},f=()=>{try{const g=JSON.parse(a);r(g),i(!1),u("")}catch(g){u(g instanceof Error?g.message:"Invalid draft JSON")}},p=()=>{l(""),u(""),i(!0)};return s.jsxs(s.Fragment,{children:[s.jsx(ne,{intent:"ghost",onClick:d,children:"Copy draft"}),o&&s.jsx(ne,{intent:"ghost",onClick:p,children:"Import draft"}),s.jsx(Na,{open:n,title:`Import ${e} draft`,description:"Imported JSON updates only the editor draft. Save explicitly to update the workflow.",onClose:()=>i(!1),footer:s.jsxs(s.Fragment,{children:[s.jsx(ne,{intent:"ghost",iconOnly:!0,"aria-label":"Paste from clipboard",title:"Paste from clipboard",onClick:async()=>{try{l(await navigator.clipboard.readText())}catch{u("Clipboard permission was not granted.")}},children:"⌘"}),s.jsx(ne,{intent:"primary",onClick:f,children:"Import draft"})]}),children:s.jsx(b0,{label:"Draft JSON",value:a,rows:14,resize:"vertical",error:c,onValue:l})})]})}const Vr=(e,t)=>JSON.stringify(e)===JSON.stringify(t),Bo=e=>e?.id??e?.key;function ed(e,t,r,o="draft"){if(Vr(r,e))return{ok:!0,value:structuredClone(t)};if(Vr(t,e))return{ok:!0,value:structuredClone(r)};if(Vr(t,r))return{ok:!0,value:structuredClone(t)};if(Array.isArray(e)&&Array.isArray(t)&&Array.isArray(r)){if(![...e,...t,...r].every(w=>Bo(w)!=null))return{ok:!1,reason:`Concurrent list change at ${o}`};const n=e.map(Bo),i=t.map(Bo),a=r.map(Bo),l=!Vr(n,i.filter(w=>n.includes(w))),c=!Vr(n,a.filter(w=>n.includes(w)));if(l&&c&&!Vr(i,a))return{ok:!1,reason:`Concurrent reorder at ${o}`};const u=new Map(e.map(w=>[Bo(w),w])),d=new Map(t.map(w=>[Bo(w),w])),f=new Map(r.map(w=>[Bo(w),w])),p=l?i:a,g=[...p,...i,...a].filter((w,k,b)=>b.indexOf(w)===k),x=[];for(const w of g){const k=u.get(w),b=d.get(w),h=f.get(w);if(k&&b&&!h&&!Vr(k,b))return{ok:!1,reason:`Edited item ${w} was removed externally`};if(k&&!b&&h&&!Vr(k,h))return{ok:!1,reason:`Removed item ${w} changed externally`};if(!b&&!h)continue;if(!k){if(b&&h&&!Vr(b,h))return{ok:!1,reason:`Item ${w} was added differently`};x.push(structuredClone(b??h));continue}if(!b||!h){x.push(structuredClone(b??h));continue}const v=ed(k,b,h,`${o}.${w}`);if(!v.ok)return v;x.push(v.value)}return{ok:!0,value:x}}if(e&&t&&r&&typeof e=="object"&&typeof t=="object"&&typeof r=="object"){const n={};for(const i of new Set([...Object.keys(e),...Object.keys(t),...Object.keys(r)])){const a=ed(e[i],t[i],r[i],`${o}.${i}`);if(!a.ok)return a;n[i]=a.value}return{ok:!0,value:n}}return{ok:!1,reason:`Concurrent value change at ${o}`}}function I1(){const[e,t]=m.useState(cn);m.useEffect(()=>{const o=n=>t(n.detail);return window.addEventListener(ei,o),()=>window.removeEventListener(ei,o)},[]);const r=(o,n)=>df({...e,controls:e.controls.map(i=>i.id===o?{...i,enabled:n}:i)});return e.controls.length?s.jsx("div",{className:"bv-control-live-list",children:e.controls.map(o=>s.jsx(Qr,{label:o.name,checked:o.enabled,onValue:n=>r(o.id,n)},o.id))}):s.jsx(zr,{tone:"info",title:"No controls configured",children:"Create a control in Configuration before using live workflow states."})}const j1=({open:e,onClose:t,hasControlNodes:r=!0})=>{const[o,n]=m.useState(0),i=cn().controls.length>0,a=m.useMemo(()=>({global:{tabEnableClose:!1,tabEnableDrag:!1,tabEnablePopout:!1,tabEnablePopoutIcon:!1,tabEnableFloat:!1},borders:[],layout:{type:"row",children:[{type:"tabset",selected:i?0:1,children:[{type:"tab",id:"control-center-controls",name:"Controls",component:"controls",enableClose:!1,enableDrag:!1},{type:"tab",id:"control-center-configuration",name:"Configuration",component:"configuration",enableClose:!1,enableDrag:!1}]}]}}),[i]);return s.jsxs(xn,{open:e,title:"BV Control Center",shortTitle:"Control Center",initialGeometry:{width:860,height:640},minSize:{width:420,height:360},onClose:t,status:"Workflow-wide controls are saved automatically.",actions:s.jsx(Bm,{storageId:"control-center",editorType:"control-center",onClick:()=>n(l=>l+1)}),children:[!r&&s.jsx(zr,{tone:"warning",title:"No Control Center nodes in workflow",children:"The workflow configuration is still available. Closing this window makes it unavailable until a Control Center node is added."}),s.jsx(Mm,{storageId:"control-center",resetSignal:o+(i?0:1),defaultModel:a,panels:[{id:"controls",title:"Controls",weight:1,content:s.jsx(I1,{})},{id:"configuration",title:"Configuration",weight:1,content:s.jsx(N0,{})}]})]})},Fm=()=>globalThis.__bvSmartPipeEditorBridge??{},Cf=e=>String(e?.type??e?.comfyClass??""),Bc=e=>Cf(e)==="BV Smart Pipe Merge"?"merge":"pipe",cs=()=>ct().rootGraph??ct().graph,Oh=()=>kf(cs(),e=>["BV Smart Pipe","BV Smart Pipe Merge"].includes(Cf(e)));function B1(){const[e,t]=m.useState([]),[r,o]=m.useState(null),[n,i]=m.useState(0),[a,l]=m.useState({}),c=m.useRef(new Map),[u,d]=m.useState(null),f=()=>({mode:"floating",geometry:{x:Math.max(16,(window.innerWidth-860)/2),y:Math.max(16,(window.innerHeight-650)/2),width:860,height:650}}),p=k=>`${k.kind}:${ha(cs(),k.node)}`,g=(k,b)=>c.current.get(k)?.dirty?d({key:k,action:b}):b(),x=(k,b)=>{const h=p(k),v=r,_=()=>{to(k.kind,ha(cs(),k.node)),t(y=>{const T=b&&v&&v!==h?y.filter(S=>S.key!==v):y;return T.some(S=>S.key===h)?T:[...T,{key:h,target:k}]}),l(y=>({...y,[h]:v&&y[v]?structuredClone(y[v]):y[h]??f()})),o(h),i(y=>y+1)};b&&v&&v!==h?g(v,_):_()},w=k=>g(k,()=>{c.current.delete(k),t(b=>b.filter(h=>h.key!==k)),l(b=>{const h={...b};return delete h[k],h}),o(b=>b===k?null:b)});return m.useEffect(()=>{const k=b=>{const h=b.detail;h?.node&&x({node:h.node,kind:h.kind??Bc(h.node)},ri()==="replace")};return window.addEventListener("bv-open-smart-pipe-editor",k),()=>window.removeEventListener("bv-open-smart-pipe-editor",k)}),s.jsxs(s.Fragment,{children:[e.map(k=>{const b=a[k.key]??f();return s.jsx(P1,{sessionKey:k.key,target:k.target,open:k.key===r,activation:n,presentation:b,onPresentation:h=>l(v=>({...v,[k.key]:h})),onActions:h=>c.current.set(k.key,h),onClose:()=>w(k.key),onRemap:h=>t(v=>v.map(_=>_.key===k.key?{..._,target:{node:h,kind:Bc(h)}}:_)),onNavigate:(h,v)=>x({node:h,kind:Bc(h)},v)},k.key)}),e.filter(k=>k.key!==r).map(k=>s.jsx(Zs,{title:`${k.target.kind==="merge"?"Smart Pipe Merge":"Smart Pipe Editor"} · ${k.target.node.title||`#${k.target.node.id}`}`,onRestore:()=>x(k.target,!1),onClose:()=>w(k.key)},`shelf:${k.key}`)),s.jsx(hf,{open:!!u,editorName:"Smart Pipe editor",onKeep:()=>d(null),onDiscard:()=>{const k=u;k&&c.current.get(k.key)?.discard(),d(null),k?.action()},onSave:()=>{const k=u;k&&c.current.get(k.key)?.save(),d(null),k?.action()}})]})}function P1({sessionKey:e,target:t,open:r,activation:o,presentation:n,onPresentation:i,onActions:a,onClose:l,onRemap:c,onNavigate:u}){const d=Fm()[t.kind],f=m.useMemo(()=>d?.read(t.node)??{},[d,t.node]),p=Xs(f),g=p.value;Gs(p);const x=m.useRef(structuredClone(f)),w=m.useRef(!1),[k,b]=m.useState(null),h=m.useMemo(()=>ha(cs(),t.node),[t.node]);m.useEffect(()=>{const B=()=>{const O=Oh().find(C=>C.key===h);if(!O){b("missing");return}if(O.node!==t.node){c(O.node);return}if(w.current)return;const E=d?.read(t.node)??{};if(JSON.stringify(E)===JSON.stringify(x.current))return;if(!p.canUndo){x.current=structuredClone(E),p.replace(E,!0),b(null);return}const A=ed(x.current,g,E);A.ok?(x.current=structuredClone(E),p.replace(A.value)):b(A.reason)};return qr().addEventListener("graphChanged",B),()=>qr().removeEventListener("graphChanged",B)},[d,g,p.canUndo,p.replace,c,t.node,h]);const v=Aa(t.node),_=Oh(),y=_.filter(B=>mn(B.node)).map(B=>({value:B.key,label:`${B.breadcrumb?`${B.breadcrumb} › `:""}${B.node.title||Cf(B.node)} · #${B.node.id}`})),T=B=>p.commit(O=>(B(O),O)),S=t.kind==="pipe"?d?.validation?.(t.node,g)??[]:[],z=()=>{w.current=!0;try{d?.save(t.node,g);const B=d?.read(t.node)??g;x.current=structuredClone(B),p.replace(B,!0),b(null)}finally{w.current=!1}},N=()=>{const B=d?.read(t.node)??{};x.current=structuredClone(B),p.replace(B,!0),b(null)};m.useEffect(()=>{a({dirty:p.canUndo,save:z,discard:N})},[d,g,p.canUndo,p.replace,a,e,t.node]);const P=s.jsx(Da,{label:"Smart Pipe node",value:_.find(B=>B.node===t.node)?.key??"",options:y,onNavigate:(B,O)=>{const E=_.find(A=>A.key===B);E&&u(E.node,O)}});return s.jsx(xn,{open:r,activationToken:o,title:t.kind==="merge"?"Smart Pipe Merge":"Smart Pipe Editor",shortTitle:"Smart Pipe",menuVisible:v,onMenuVisible:B=>di(t.node,B),context:P,mode:n.mode,initialGeometry:n.geometry,onModeChange:B=>i({...n,mode:B}),onGeometry:B=>i({...n,geometry:B}),minSize:{width:420,height:360},onClose:l,status:S.length?"Required inputs missing":p.canUndo?"Unsaved changes":"Saved",actions:s.jsx(Lf,{primary:s.jsx(ne,{intent:"primary",onClick:z,children:"Save"}),secondary:s.jsxs(s.Fragment,{children:[s.jsx(ne,{disabled:!p.canUndo,onClick:N,children:"Discard"}),s.jsx(ss,{label:t.kind==="merge"?"Smart Pipe Merge":"Smart Pipe",value:{schema:"bv.editor-draft",version:1,type:t.kind,data:g},onImport:B=>{if(B?.schema!=="bv.editor-draft"||B?.version!==1||B?.type!==t.kind||!B?.data)throw new Error("Draft type or version does not match this editor.");p.replace(B.data)}})]}),overflow:[{id:"undo",label:"Undo",disabled:!p.canUndo,onSelect:p.undo},{id:"redo",label:"Redo",disabled:!p.canRedo,onSelect:p.redo}]}),children:k?s.jsxs(zr,{tone:"danger",title:k==="missing"?"Node no longer exists":"Smart Pipe changed externally",children:[k==="missing"?"This draft cannot be saved because its workflow node was removed.":"An external change could not be migrated safely. Reload the editor to discard the incompatible draft.",s.jsxs("div",{className:"bv-callout-actions",children:[s.jsx(ss,{label:t.kind==="merge"?"Smart Pipe Merge":"Smart Pipe",value:{schema:"bv.editor-draft",version:1,type:t.kind,data:g},onImport:()=>{},allowImport:!1}),s.jsx(ne,{onClick:()=>{if(k==="missing")l();else{const B=d?.read(t.node)??{};x.current=structuredClone(B),p.replace(B,!0),b(null)}},children:k==="missing"?"Close window":"Reload editor"})]})]}):t.kind==="pipe"?s.jsx(z1,{node:t.node,draft:g,update:T}):s.jsx(F1,{draft:g,update:T})})}function z1({node:e,draft:t,update:r}){const o=Fm().pipe,[n,i]=m.useState(()=>o?.predecessor(e)??{value:"Start new pipe",options:[]}),a=o?.validation?.(e,t)??[];m.useEffect(()=>{const f=()=>i(o?.predecessor(e)??{value:"Start new pipe",options:[]});qr().addEventListener("graphChanged",f);const p=window.setInterval(f,750);return()=>{qr().removeEventListener("graphChanged",f),window.clearInterval(p)}},[o,e]);const l=t.definition?.localSlots??[],c=t.projection?.inheritedSlots??[],u=[...l.map((f,p)=>({id:f.id,title:f.name||"New slot",description:"Local · input required",summary:f.type||"*",content:s.jsxs("div",{className:"bv-ui-stack",children:[s.jsx(un,{label:"Name",value:f.name??"",onValue:g=>r(x=>{x.definition.localSlots[p].name=g})}),s.jsx(un,{label:"Type",value:f.type??"*",onValue:g=>r(x=>{x.definition.localSlots[p].type=g||"*"})}),s.jsx(Qr,{label:"Expose output",checked:!!f.showOutput,onValue:g=>r(x=>{x.definition.localSlots[p].showOutput=g})})]})})),...c.map((f,p)=>({id:f.id,title:f.name||f.id,description:"Inherited override",content:s.jsxs("div",{className:"bv-ui-stack",children:[s.jsx(Qr,{label:"Expose input",checked:!!f.showInput,onValue:g=>r(x=>{x.projection.inheritedSlots[p].showInput=g})}),s.jsx(Qr,{label:"Expose output",checked:!!f.showOutput,onValue:g=>r(x=>{x.projection.inheritedSlots[p].showOutput=g})})]})}))],d=()=>r(f=>{f.definition.localSlots.push({id:crypto.randomUUID(),name:"new_slot",ordinal:f.definition.nextOrdinal++,type:"*",showInput:!0,showOutput:!1})});return s.jsxs("div",{className:"bv-ui-stack",children:[s.jsx(tt,{label:"Pipe predecessor",value:n.value,options:n.options.length?n.options:[{value:n.value,label:n.value}],onValue:f=>{o?.setPredecessor(e,f),i(o?.predecessor(e)??{value:f,options:n.options})}}),a.length>0&&s.jsx(zr,{tone:"danger",title:"Required Smart Pipe inputs are missing",children:a.map(f=>s.jsx("div",{children:f.message},f.id))}),s.jsx(ne,{onClick:d,children:"Add slot"}),u.length?s.jsx(Ws,{items:u,onReorder:f=>r(p=>{const g=new Map(p.definition.localSlots.map(x=>[x.id,x]));p.definition.localSlots=f.map(x=>g.get(x.id)).filter(Boolean)}),onRemove:f=>r(p=>{p.definition.localSlots=p.definition.localSlots.filter(g=>g.id!==f),p.projection.inheritedSlots=p.projection.inheritedSlots.filter(g=>g.id!==f)})}):s.jsx(Hs,{title:"No slots",description:"Add a local slot or connect a predecessor."})]})}function F1({draft:e,update:t}){const r=e.sources??[],[o,n]=m.useState(""),i=r.map(c=>({id:c.key,title:c.label||c.key,description:c.mode==="wired"?"Wired":"Wireless"})),a=e.candidates?.find(c=>c.address===o),l=()=>{a&&(t(c=>c.sources.push({key:`pipe_${String(c.sources.length+1).padStart(3,"0")}`,mode:"wireless",address:a.address,label:a.label})),n(""))};return s.jsxs("div",{className:"bv-ui-stack",children:[s.jsxs("div",{className:"bv-ui-inline-footer bv-smart-pipe-merge-source",children:[s.jsx(tt,{label:"Wireless source",value:o,options:(e.candidates??[]).map(c=>({value:c.address,label:c.label})),onValue:n}),s.jsx(ne,{disabled:!a,onClick:l,children:"Add"})]}),i.length?s.jsx(Ws,{items:i,onReorder:c=>t(u=>{const d=new Map(u.sources.map(f=>[f.key,f]));u.sources=c.map(f=>d.get(f.id)).filter(Boolean)}),onRemove:c=>t(u=>{u.sources=u.sources.filter(d=>d.key!==c)})}):s.jsx(Hs,{title:"No merge sources",description:"Connect a pipe or add a wireless source."})]})}const U1=`:root{--bv-primary-color: #1345b7;--bv-secondary-color: #24212b;--bv-text-color: #f2eef8;--bv-accent-color: #d35d71;--bv-bg-color: #1e1c24;--bv-border-color: rgba(231,225,247,.2);--bv-muted-text-color: #aaa2b5;--bv-layer-window:1400;--bv-layer-shelf:1410;--bv-layer-flyout:1500;--bv-layer-modal:1550;--bv-layer-toast:1600}:root.comfy-theme-light #bv-root{--bv-primary-color: #1345b7;--bv-secondary-color: #34495e;--bv-text-color: #2c3e50;--bv-accent-color: #c0392b;--bv-bg-color: #ecf0f1;--bv-border-color: #bdc3c7;--bv-muted-text-color: #7f8c8d}.bv-modal{position:fixed;inset:0;z-index:var(--bv-layer-modal);display:grid;place-items:center;padding:24px;background:#0009;font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif;color:var(--bv-text-color)}.bv-modal *{box-sizing:border-box}:root{--bv-ui-scale:1.125}:root.bv-ui-size-compact{--bv-ui-scale:1}:root.bv-ui-size-default{--bv-ui-scale:1.125}:root.bv-ui-size-large{--bv-ui-scale:1.25}.bv-ui,#bv-root,.bv-ui-portal,.bv-completion-popup{--bv-ui-bg:#121116;--bv-ui-surface:#1e1c24;--bv-ui-surface-raised:#24212b;--bv-ui-input:#17161b;--bv-ui-text:#f2eef8;--bv-ui-muted:#aaa2b5;--bv-ui-border:rgba(231,225,247,.14);--bv-ui-border-hover:rgba(231,225,247,.25);--bv-ui-accent:#1345b7;--bv-ui-accent-hover:#4c74c9;--bv-ui-accent-light:#5a7dcd;--bv-ui-accent-soft:#b2c2e6;--bv-ui-accent-rgb:19,69,183;--bv-ui-danger:#d35d71;--bv-ui-warning:#e9b65f;--bv-ui-success:#55c994;--bv-ui-control-height-comfortable:calc(42px * var(--bv-ui-scale));--bv-ui-control-height-compact:calc(30px * var(--bv-ui-scale));--bv-ui-control-height:var(--bv-ui-control-height-compact);--bv-ui-field-gap-comfortable:calc(6px * var(--bv-ui-scale));--bv-ui-field-gap-compact:calc(4px * var(--bv-ui-scale));--bv-ui-field-gap:var(--bv-ui-field-gap-compact);--bv-ui-content-padding-comfortable:calc(11px * var(--bv-ui-scale));--bv-ui-content-padding-compact:calc(8px * var(--bv-ui-scale));--bv-ui-content-padding:var(--bv-ui-content-padding-compact);--bv-ui-row-height-comfortable:calc(38px * var(--bv-ui-scale));--bv-ui-row-height-compact:calc(30px * var(--bv-ui-scale));--bv-ui-row-height:var(--bv-ui-row-height-compact);--bv-ui-textarea-height-comfortable:calc(100px * var(--bv-ui-scale));--bv-ui-textarea-height-compact:calc(76px * var(--bv-ui-scale));--bv-ui-textarea-height:var(--bv-ui-textarea-height-compact);--bv-ui-check-size-comfortable:calc(18px * var(--bv-ui-scale));--bv-ui-check-size-compact:calc(16px * var(--bv-ui-scale));--bv-ui-check-size:var(--bv-ui-check-size-compact);--bv-ui-radius-sm:calc(2px * var(--bv-ui-scale));--bv-ui-radius:calc(4px * var(--bv-ui-scale));--bv-ui-radius-lg:calc(6px * var(--bv-ui-scale));color:var(--bv-ui-text);font:calc(12px * var(--bv-ui-scale))/1.45 system-ui,-apple-system,"Segoe UI",sans-serif}.bv-density-comfortable{--bv-ui-control-height:var(--bv-ui-control-height-comfortable);--bv-ui-field-gap:var(--bv-ui-field-gap-comfortable);--bv-ui-content-padding:var(--bv-ui-content-padding-comfortable);--bv-ui-row-height:var(--bv-ui-row-height-comfortable);--bv-ui-textarea-height:var(--bv-ui-textarea-height-comfortable);--bv-ui-check-size:var(--bv-ui-check-size-comfortable)}.bv-density-compact{--bv-ui-control-height:var(--bv-ui-control-height-compact);--bv-ui-field-gap:var(--bv-ui-field-gap-compact);--bv-ui-content-padding:var(--bv-ui-content-padding-compact);--bv-ui-row-height:var(--bv-ui-row-height-compact);--bv-ui-textarea-height:var(--bv-ui-textarea-height-compact);--bv-ui-check-size:var(--bv-ui-check-size-compact)}:is(.bv-ui,#bv-root,.bv-ui-portal),:is(.bv-ui,#bv-root,.bv-ui-portal) *,:is(.bv-ui,#bv-root,.bv-ui-portal) *:before,:is(.bv-ui,#bv-root,.bv-ui-portal) *:after{box-sizing:border-box}:is(.bv-ui,#bv-root,.bv-ui-portal) :where(button,input,select,textarea){box-sizing:border-box;margin:0;font:inherit;color:inherit;letter-spacing:inherit}:is(.bv-ui,#bv-root,.bv-ui-portal) :where(button){appearance:none}.bv-ui-dialog{width:min(680px,calc(100vw - 32px));max-height:min(86vh,900px);margin:auto;padding:0;overflow:hidden;color:var(--bv-ui-text);background:var(--bv-ui-surface);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius-lg);box-shadow:0 28px 90px #000c}.bv-ui-dialog--small{width:min(480px,calc(100vw - 32px))}.bv-ui-dialog--large{width:min(1040px,calc(100vw - 32px))}.bv-ui-dialog::backdrop{background:#08070a9e}.bv-ui-overlay{position:fixed;z-index:var(--bv-layer-modal);inset:0;display:grid;place-items:center;padding:16px;background:#08070a9e}.bv-ui-overlay--modeless{pointer-events:none;place-items:start end;background:transparent}.bv-ui-overlay--modeless>.bv-ui-dialog{pointer-events:auto}.bv-ui-dialog__header{display:flex;align-items:flex-start;gap:16px;padding:calc(15px * var(--bv-ui-scale)) calc(17px * var(--bv-ui-scale));background:var(--bv-ui-surface-raised);border-bottom:1px solid var(--bv-ui-border)}.bv-ui-dialog__header>div{min-width:0;flex:1}.bv-ui-dialog__header h2,.bv-ui-dialog__header p{margin:0}.bv-ui-dialog__header h2{font-size:calc(16px * var(--bv-ui-scale));line-height:1.3}.bv-ui-dialog__header p{margin-top:4px;color:var(--bv-ui-muted);font-size:calc(11px * var(--bv-ui-scale))}.bv-ui-dialog__body{display:grid;gap:calc(13px * var(--bv-ui-scale));max-height:calc(86vh - 132px);padding:calc(17px * var(--bv-ui-scale));overflow:auto}.bv-ui-dialog__footer{display:flex;justify-content:flex-end;flex-wrap:wrap;gap:calc(8px * var(--bv-ui-scale));padding:calc(11px * var(--bv-ui-scale)) calc(17px * var(--bv-ui-scale));background:var(--bv-ui-surface-raised);border-top:1px solid var(--bv-ui-border)}.bv-ui-button{display:inline-flex;align-items:center;justify-content:center;gap:7px;min-height:var(--bv-ui-control-height);padding:0 calc(13px * var(--bv-ui-scale));color:var(--bv-ui-text);background:var(--bv-ui-surface-raised);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius);cursor:pointer;transition:background-color .12s ease,border-color .12s ease,transform .08s ease}.bv-ui-button:hover:not(:disabled){background:#302d39;border-color:var(--bv-ui-border-hover)}.bv-ui-button:active:not(:disabled){transform:translateY(1px)}.bv-ui-button:focus-visible{outline:3px solid rgba(var(--bv-ui-accent-rgb),.25);outline-offset:2px}.bv-ui-button:disabled{opacity:.43;cursor:not-allowed}.bv-ui-button--primary{background:var(--bv-ui-accent);border-color:var(--bv-ui-accent-hover)}.bv-ui-button--primary:hover:not(:disabled){background:var(--bv-ui-accent-hover)}.bv-ui-button--ghost{color:var(--bv-ui-muted);background:transparent;border-color:transparent}.bv-ui-button--ghost:hover:not(:disabled){color:var(--bv-ui-text);background:#ffffff0f}.bv-ui-button--danger{background:#d35d7121;border-color:#d35d7152;color:#f19aa8}.bv-ui-button--icon{width:var(--bv-ui-control-height);padding:0;font-size:calc(20px * var(--bv-ui-scale));line-height:1}.bv-ui-field{display:grid;gap:calc(6px * var(--bv-ui-scale));min-width:0}.bv-ui-field__label{color:var(--bv-ui-muted);font-size:calc(11px * var(--bv-ui-scale))}.bv-ui-field__description{color:var(--bv-ui-muted);font-size:calc(10px * var(--bv-ui-scale));line-height:1.4}.bv-ui .bv-ui-field input,.bv-ui .bv-ui-field select,.bv-ui .bv-ui-field textarea{width:100%;min-height:var(--bv-ui-control-height);padding:0 calc(11px * var(--bv-ui-scale));color:var(--bv-ui-text);background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius);outline:0}.bv-ui .bv-ui-field textarea{min-height:120px;padding-block:10px;resize:vertical}.bv-ui .bv-ui-field input:focus,.bv-ui .bv-ui-field select:focus,.bv-ui .bv-ui-field textarea:focus{border-color:var(--bv-ui-accent);box-shadow:0 0 0 3px rgba(var(--bv-ui-accent-rgb),.18)}.bv-ui-status{min-height:1.45em;margin:0;color:var(--bv-ui-muted);font-size:calc(10px * var(--bv-ui-scale))}.bv-ui-status--error{color:#f19aa8}.bv-ui-card-list{display:grid;gap:calc(10px * var(--bv-ui-scale))}.bv-ui-card-list>.bv-detailer-card{background:#12111675;border-color:var(--bv-ui-border);border-radius:var(--bv-ui-radius-lg)}.bv-ui-stack{display:grid;gap:calc(13px * var(--bv-ui-scale));min-width:0}.bv-ui-inline-footer{display:flex;justify-content:flex-end;flex-wrap:wrap;gap:calc(8px * var(--bv-ui-scale));padding-top:calc(12px * var(--bv-ui-scale));border-top:1px solid var(--bv-ui-border)}.bv-smart-pipe-merge-source{align-items:end;justify-content:flex-start}.bv-smart-pipe-merge-source>.bv-control-field{flex:1 1 260px;min-width:min(260px,100%)}.bv-smart-pipe-merge-source>.bv-button{flex:0 0 auto}.inspector-tabs{position:sticky;z-index:3;top:0;display:flex;align-items:stretch;gap:2px;min-height:34px;padding:0 8px;background:var(--bv-ui-surface-raised);border-bottom:1px solid var(--bv-ui-border)}.inspector-tabs button{position:relative;min-width:0;min-height:34px;padding:0 10px;overflow:hidden;color:var(--bv-ui-muted);text-overflow:ellipsis;white-space:nowrap;background:transparent!important;border:0!important;border-radius:0!important;box-shadow:none!important;cursor:pointer}.inspector-tabs button:hover:not(:disabled){color:var(--bv-ui-text);background:#ffffff09!important}.inspector-tabs button[aria-selected=true]{color:var(--bv-ui-text)}.inspector-tabs button[aria-selected=true]:after{content:"";position:absolute;right:0;bottom:-1px;left:0;height:2px;background:var(--bv-ui-accent)}.inspector-tabs button:disabled{opacity:.38;cursor:not-allowed}.inspector-tab-panel[hidden]{display:none}.inspector-tab-panel{min-width:0}:root.bv-ui-reduced-effects .bv-ui *,:root.bv-ui-reduced-effects .bv-ui *:before,:root.bv-ui-reduced-effects .bv-ui *:after,:root.bv-ui-reduced-effects #bv-root *,:root.bv-ui-reduced-effects #bv-root *:before,:root.bv-ui-reduced-effects #bv-root *:after{animation:none!important;transition:none!important;backdrop-filter:none!important;filter:none!important}.bv-regional-dock-host{display:block!important;min-width:0;min-height:0}.bv-ui-dock{position:relative;width:100%;height:100%;min-width:0;min-height:0;overflow:hidden;--flexlayout-font-family:system-ui,-apple-system,"Segoe UI",sans-serif;--flexlayout-font-size:calc(12px * var(--bv-ui-scale));--flexlayout-color-text:var(--bv-ui-text);--flexlayout-color-background:var(--bv-ui-input);--flexlayout-color-base:var(--bv-ui-input);--flexlayout-color-1:var(--bv-ui-surface);--flexlayout-color-2:var(--bv-ui-surface-raised);--flexlayout-color-3:#20283a;--flexlayout-color-4:#263655;--flexlayout-color-5:#0a2665;--flexlayout-color-6:#0d3080;--flexlayout-color-focus:var(--bv-ui-accent);--flexlayout-color-icon:var(--bv-ui-muted);--flexlayout-color-splitter:rgba(231,225,247,.08);--flexlayout-color-splitter-hover:#4c74c9;--flexlayout-color-splitter-drag:#5a7dcd;--flexlayout-color-splitter-handle:#b2c2e6;--flexlayout-color-drag1:#7d97d7;--flexlayout-color-drag2:#5a7dcd;--flexlayout-color-drag1-background:rgba(var(--bv-ui-accent-rgb),.2);--flexlayout-color-drag2-background:rgba(var(--bv-ui-accent-rgb),.18);--flexlayout-color-drag-rect-border:#5a7dcd;--flexlayout-color-drag-rect-background:var(--bv-ui-surface-raised);--flexlayout-color-drag-rect:var(--bv-ui-text);--flexlayout-color-edge-marker:rgba(var(--bv-ui-accent-rgb),.72);--flexlayout-color-edge-icon:#fff;--flexlayout-color-toolbar-button-hover:rgba(var(--bv-ui-accent-rgb),.16);--flexlayout-splitter-size:9px;--flexlayout-splitter-active-size:13px;--flexlayout-splitter-handle-visibility:visible}.bv-ui-dock .flexlayout__splitter{transition:background-color .12s ease,box-shadow .12s ease}.bv-ui-dock .flexlayout__splitter:hover{box-shadow:0 0 12px rgba(var(--bv-ui-accent-rgb),.32)}.bv-ui-dock .flexlayout__splitter_handle_horz{width:2px;height:34px;opacity:.72}.bv-ui-dock .flexlayout__splitter_handle_vert{width:34px;height:2px;opacity:.72}.bv-ui-dock .flexlayout__tabset_tabbar_outer{height:calc(37px * var(--bv-ui-scale));padding:calc(8px * var(--bv-ui-scale)) 6px 0;background:var(--bv-ui-surface-raised);border-bottom:1px solid var(--bv-ui-border)}.bv-ui-dock .flexlayout__tabset_tabbar_inner{height:calc(29px * var(--bv-ui-scale));gap:2px;align-items:stretch}.bv-ui-dock .flexlayout__tab_button{position:relative;min-height:calc(29px * var(--bv-ui-scale));padding:0 calc(10px * var(--bv-ui-scale));color:var(--bv-ui-muted);background:transparent;border:1px solid transparent;border-bottom:0;border-radius:var(--bv-ui-radius-sm) var(--bv-ui-radius-sm) 0 0}.bv-ui-dock .flexlayout__tab_button--selected{color:var(--bv-ui-text);background:#fff1;border-color:#ffffff0b}.bv-ui-dock .flexlayout__tab_button--selected:after{content:"";position:absolute;right:-1px;bottom:-1px;left:-1px;height:2px;background:var(--bv-ui-accent)}.bv-ui-dock .flexlayout__tab_toolbar_button{width:29px;height:29px;padding:6px;color:var(--bv-ui-muted);border:0;background:transparent}.bv-ui-dock .flexlayout__float_window_content .flexlayout__tab_toolbar_button-float{display:none}.bv-ui-dock .flexlayout__tab{overflow:hidden;background:var(--bv-ui-surface)}.bv-ui-dock .bv-regional-work,.bv-ui-dock aside{width:100%;height:100%;min-width:0;min-height:0}.bv-dialog{width:min(900px,92vw);max-height:84vh}.bv-rack{width:100%;max-height:84vh;overflow:auto;padding:calc(18px * var(--bv-ui-scale));border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius-lg);background:var(--bv-ui-surface);box-shadow:0 18px 60px #0009}.bv-rack header,.bv-rack footer,.bv-control-title,.bv-assignments>div{display:flex;align-items:center;gap:10px}.bv-rack header{justify-content:space-between;border-bottom:1px solid #ffffff20;margin-bottom:16px}.bv-rack h2{margin:0}.bv-rack p{margin-top:4px;color:var(--bv-muted-text-color)}.bv-force{display:flex;gap:8px;padding:10px 12px;background:#ffffff08;border-radius:var(--bv-ui-radius)}.bv-controls{display:grid;gap:12px;margin:16px 0}.bv-control-card{border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius-lg);padding:calc(12px * var(--bv-ui-scale));background:#ffffff09}.bv-control-title input{flex:1;font-weight:650}.bv-control-title span{color:var(--bv-muted-text-color)}.bv-assignments{display:grid;gap:6px;margin:10px 0}.bv-assignments>div span{flex:1}.bv-assignments>div span small{display:block;margin-top:3px;color:#ffbd66}.bv-assignments .conflict{border-left:2px solid #ffbd66;padding-left:8px}.bv-assignments .unresolved{color:#ff9f7a}.bv-rack input,.bv-rack select,.bv-rack button{min-height:var(--bv-ui-control-height);color:inherit;background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius);padding:7px 9px}.bv-rack button{cursor:pointer}.bv-rack button.primary{background:var(--bv-ui-accent);border-color:var(--bv-ui-accent-hover)}.bv-rack footer{justify-content:flex-end}.bv-regional-shell{position:fixed;z-index:var(--bv-layer-window);box-sizing:border-box;display:flex;flex-direction:column;min-width:0;min-height:0;resize:none;overflow:hidden;color:var(--bv-ui-text);background:var(--bv-ui-surface);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius-lg);box-shadow:0 20px 70px #000b;font:calc(12px * var(--bv-ui-scale))/1.4 system-ui,-apple-system,"Segoe UI",sans-serif}.bv-regional-shell.floating{resize:both;box-shadow:0 14px 48px #000c}.bv-regional-shell *{box-sizing:border-box}.bv-regional-shell header,.bv-regional-shell nav,.bv-regional-shell footer{display:flex;align-items:center;gap:8px;padding:9px 12px;border-bottom:1px solid #ffffff18}.bv-regional-shell header strong{font-size:16px}.bv-regional-shell .window-drag-handle{display:flex;flex:1;align-items:center;justify-content:center;gap:6px;min-width:150px;padding:4px 10px;border-radius:var(--bv-ui-radius-sm)}.bv-regional-shell .window-drag-handle>span{color:var(--bv-muted-text-color);font-size:18px}.bv-regional-shell.floating header,.bv-regional-shell.floating .window-drag-handle{cursor:move;user-select:none;touch-action:none}.bv-regional-shell.floating .window-drag-handle:hover{background:#ffffff0b}.bv-regional-shell nav .spacer{flex:1}.bv-brush-options{display:flex;align-items:center;gap:14px;padding:7px 12px;border-bottom:1px solid #ffffff18;background:#ffffff05}.bv-brush-options label{display:flex;align-items:center;gap:6px}.bv-brush-options input[type=range]{width:110px;padding:0}.bv-brush-options output{min-width:48px;color:var(--bv-muted-text-color)}.bv-regional-shell main{display:grid;grid-template-columns:190px minmax(300px,1fr) 290px;flex:1;min-height:0}.bv-regional-shell aside{overflow:auto;padding:10px;border-right:1px solid #ffffff18}.bv-regional-shell .inspector{display:grid;align-content:start;gap:10px;border:0;border-left:1px solid #ffffff18}.bv-regional-shell .inspector label{display:grid;gap:4px}.region-row{display:flex;align-items:center;gap:8px;margin-top:6px;padding:7px;border:1px solid transparent;border-radius:var(--bv-ui-radius-sm);cursor:pointer}.region-row.selected{border-color:var(--bv-primary-color);background:#ffffff0b}.region-row i{width:12px;height:12px;border-radius:50%}.region-row span{flex:1;overflow:hidden;text-overflow:ellipsis}.region-row button,.geometry-row button{padding:2px 4px;border:0;background:transparent}.region-group{border:1px solid transparent;border-radius:var(--bv-ui-radius);margin-top:6px}.region-group.selected{border-color:#fff2;background:#ffffff05}.geometry-layers{padding:0 5px 6px 20px}.geometry-row{display:grid;grid-template-columns:20px minmax(0,1fr) 24px 24px 20px;align-items:center;gap:3px;padding:4px;border-radius:var(--bv-ui-radius-sm);cursor:pointer;color:var(--bv-muted-text-color)}.geometry-row.selected{color:var(--bv-text-color);background:#ffffff12;outline:1px solid var(--bv-primary-color)}.geometry-row.selected:not(.primary-selection){outline-color:color-mix(in srgb,var(--bv-primary-color) 55%,transparent)}.geometry-row span:nth-child(2){overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bv-regional-work{position:relative;min-width:0;min-height:0;overflow:hidden;background:#0f1114}.artboard-viewport{position:absolute;inset:0;overflow:hidden;touch-action:none;user-select:none}.artboard-viewport.pan-ready{cursor:grab}.artboard-viewport.pan-ready:active{cursor:grabbing}.artboard-stage{position:absolute;top:0;left:0;transform-origin:0 0;will-change:transform}.bv-regional-canvas{position:relative;background-color:#24282d;background-image:linear-gradient(45deg,#2c3137 25%,transparent 25%),linear-gradient(-45deg,#2c3137 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#2c3137 75%),linear-gradient(-45deg,transparent 75%,#2c3137 75%);background-size:24px 24px;background-position:0 0,0 12px,12px -12px,-12px 0;touch-action:none;user-select:none;box-shadow:0 4px 28px #000a}.bv-background-image{position:absolute;inset:0;background-size:cover;background-repeat:no-repeat;pointer-events:none}.bv-composition,.bv-selection-overlay,.bv-tool-preview{position:absolute;inset:0;width:100%;height:100%}.bv-composition{pointer-events:none}.bv-selection-overlay,.bv-tool-preview{overflow:visible;pointer-events:none}.bv-tool-preview .tool-preview-shape{fill:color-mix(in srgb,#55e6ff 15%,transparent);stroke:#55e6ff;stroke-width:2.5;vector-effect:non-scaling-stroke;filter:drop-shadow(0 0 2px #000)}.bv-tool-preview .tool-preview-shape.subtract{fill:color-mix(in srgb,#ff5f6d 18%,transparent);stroke:#ff5f6d;stroke-dasharray:8 5}.bv-tool-preview path.tool-preview-shape{fill:none;stroke-opacity:.75}.bv-tool-preview .tool-preview-vertex{fill:#55e6ff;stroke:#071014;stroke-width:1.5;vector-effect:non-scaling-stroke}.bv-tool-preview .tool-preview-vertex.subtract{fill:#ff5f6d}.bv-selection-overlay .tool-preview-size{fill:#fff;font:600 12px sans-serif;text-anchor:end;paint-order:stroke;stroke:#101419;stroke-width:4px;stroke-linejoin:round;vector-effect:non-scaling-stroke}.bv-selection-overlay .rect-bounds{fill:none;stroke:#fff;stroke-width:2;vector-effect:non-scaling-stroke}.bv-selection-overlay .brush-bounds{fill:rgba(var(--bv-ui-accent-rgb),.035);stroke:var(--bv-ui-accent);stroke-width:2;stroke-dasharray:7 5;vector-effect:non-scaling-stroke;filter:drop-shadow(0 0 3px rgba(var(--bv-ui-accent-rgb),.45))}.bv-selection-overlay .resize-handle{pointer-events:all}.bv-selection-overlay .resize-handle-hit{fill:transparent;stroke:none}.bv-selection-overlay .resize-handle-visible{fill:var(--bv-ui-accent);stroke:#f7f3ff;stroke-width:1.5;vector-effect:non-scaling-stroke;filter:drop-shadow(0 1px 2px #000b)}.bv-selection-overlay .resize-handle-nw,.bv-selection-overlay .resize-handle-se{cursor:nwse-resize}.bv-selection-overlay .resize-handle-ne,.bv-selection-overlay .resize-handle-sw{cursor:nesw-resize}.bv-selection-overlay .resize-handle-n,.bv-selection-overlay .resize-handle-s{cursor:ns-resize}.bv-selection-overlay .resize-handle-e,.bv-selection-overlay .resize-handle-w{cursor:ew-resize}.brush-cursor{position:absolute;translate:-50% -50%;display:grid;place-items:center;border:1px solid white;outline:1px solid #0009;pointer-events:none}.brush-cursor.round{border-radius:50%}.brush-cursor i{display:block;border:1px dashed #fff9}.brush-cursor.round i{border-radius:50%}.bv-regional-canvas.tool-brush-add,.bv-regional-canvas.tool-brush-subtract{cursor:none}.bounds-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px}.bounds-grid label{min-width:0}.bounds-grid input{width:100%}.layer-actions{display:grid;grid-template-columns:1fr 1fr;gap:6px}.bv-regional-shell details{border:1px solid #ffffff18;border-radius:var(--bv-ui-radius-sm);padding:7px}.bv-regional-shell details summary{cursor:pointer}.bv-regional-shell details[open] summary{margin-bottom:8px}.bv-regional-shell footer{justify-content:space-between;border-top:1px solid #ffffff18;border-bottom:0}.bv-regional-shell footer.has-warning{color:#ffcc7a}.bv-regional-shell footer span:first-child{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bv-regional-shell .option-section label>small{color:var(--bv-muted-text-color)}.bv-panel-header{display:flex;align-items:center;gap:var(--bv-ui-content-padding);min-height:var(--bv-ui-row-height);padding:var(--bv-ui-field-gap) var(--bv-ui-content-padding);color:var(--bv-ui-text);background:var(--bv-ui-surface-raised);border-bottom:1px solid var(--bv-ui-border)}.bv-panel-header>div:not(.bv-panel-actions){display:grid;flex:1;min-width:0;gap:1px}.bv-panel-header strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bv-panel-header small{color:var(--bv-ui-muted);font-size:.84em}.bv-panel-header-icon{width:20px;height:20px;flex:none;padding:2px;color:var(--bv-ui-accent-soft);fill:none;stroke:currentColor;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}.bv-panel-actions{display:flex;align-items:center;justify-content:flex-end;gap:var(--bv-ui-field-gap);margin-left:auto}.bv-panel-header .bv-panel-actions .bv-button svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round}.bv-panel-footer{display:flex;align-items:center;justify-content:space-between;gap:var(--bv-ui-content-padding);min-height:var(--bv-ui-row-height);padding:var(--bv-ui-field-gap) var(--bv-ui-content-padding);color:var(--bv-ui-muted);background:var(--bv-ui-surface-raised);border-top:1px solid var(--bv-ui-border)}.bv-panel-status{min-width:0}.bv-panel-footer .bv-panel-actions{flex:none}.bv-quick-prompt-body{display:grid;grid-template-rows:auto auto minmax(0,1fr);gap:var(--bv-ui-content-padding);min-height:0;height:100%}.bv-prompt-editor-fields{display:grid;grid-template-rows:minmax(120px,3fr) minmax(100px,2fr);gap:var(--bv-ui-content-padding);min-width:0;min-height:0;height:100%}.bv-prompt-editor-fields>.bv-control-field{display:grid;grid-template-rows:auto minmax(0,1fr);align-self:stretch;align-content:stretch;min-height:0}.bv-prompt-editor-fields .bv-adaptive-field,.bv-prompt-editor-fields .bv-textarea-shell{min-height:0;height:100%}.bv-prompt-editor-fields textarea{min-height:0!important;max-height:none;height:100%;resize:none}.bv-regional-action{display:inline-flex!important;align-items:center;justify-content:center;width:38px;min-width:38px;height:36px;padding:0!important;color:#d8d8dc!important;background:#18191c!important;border:1px solid #ffffff1f!important;border-radius:var(--bv-ui-radius-sm)!important;box-shadow:inset 0 1px #ffffff0a;transition:background-color .12s ease,border-color .12s ease}.bv-regional-action:hover{color:#fff!important;background:#292a2f!important;border-color:#ffffff35!important}.bv-regional-action>i{display:none!important}.bv-regional-action:before{content:"";display:block;width:20px;height:20px;background-color:currentColor;mask-repeat:no-repeat;mask-position:center;mask-size:contain;-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;-webkit-mask-size:contain}.bv-regional-action-editor:before{mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='black' d='M4 3h16a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2Zm0 5v11h4V8H4Zm6 0v11h10V8H10Zm0-3v1h10V5H10ZM4 5v1h4V5H4Z'/%3E%3C/svg%3E");-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='black' d='M4 3h16a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2Zm0 5v11h4V8H4Zm6 0v11h10V8H10Zm0-3v1h10V5H10ZM4 5v1h4V5H4Z'/%3E%3C/svg%3E")}.bv-regional-action-quick:before{mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='black' d='M5 3h9v2H5v14h14v-9h2v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2Zm13.7-.7 3 3L11 16H8v-3L18.7 2.3Zm0 2.8L10 13.8V14h.2l8.7-8.9-.2-.2Z'/%3E%3C/svg%3E");-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='black' d='M5 3h9v2H5v14h14v-9h2v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2Zm13.7-.7 3 3L11 16H8v-3L18.7 2.3Zm0 2.8L10 13.8V14h.2l8.7-8.9-.2-.2Z'/%3E%3C/svg%3E")}.bv-regional-action-menu{width:18px!important;min-width:18px!important;margin-left:-3px;border-radius:0 var(--bv-ui-radius-sm) var(--bv-ui-radius-sm) 0!important}.bv-regional-action-quick{border-radius:var(--bv-ui-radius-sm) 0 0 var(--bv-ui-radius-sm)!important}.bv-regional-action-menu:before{width:10px;height:10px;mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='black' d='m6 9 6 6 6-6Z'/%3E%3C/svg%3E");-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='black' d='m6 9 6 6 6-6Z'/%3E%3C/svg%3E")}.bv-toolbar-window-launcher{position:fixed;z-index:var(--bv-layer-flyout);display:grid;grid-template-rows:minmax(0,1fr) auto;max-width:calc(100vw - 24px);max-height:min(420px,calc(100vh - 84px));overflow:hidden;color:var(--bv-ui-text);background:var(--bv-ui-surface-raised);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius);box-shadow:0 18px 48px #000c}.bv-toolbar-window-launcher__body{display:grid;grid-template-columns:repeat(var(--bv-launcher-columns),minmax(180px,210px));min-height:0;overflow:auto}.bv-toolbar-window-launcher section{display:grid;grid-template-rows:auto minmax(0,1fr);min-width:0;padding:3px}.bv-toolbar-window-launcher section+section{border-left:1px solid var(--bv-ui-border)}.bv-toolbar-window-launcher h3{margin:0;padding:4px 6px 5px;color:var(--bv-ui-muted);font-size:calc(9px * var(--bv-ui-scale));font-weight:650;letter-spacing:.04em;text-transform:uppercase}.bv-toolbar-window-launcher section>div{display:grid;align-content:start;gap:1px;min-height:0;overflow-y:auto}.bv-toolbar-launcher-row{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center}.bv-toolbar-launcher-row.is-hidden{opacity:.68}.bv-toolbar-launcher-reveal{width:26px;height:26px;padding:0;color:var(--bv-ui-muted);background:transparent;border:0;border-radius:var(--bv-ui-radius-xs);cursor:pointer}.bv-toolbar-launcher-reveal:hover{color:var(--bv-ui-text);background:var(--bv-ui-surface-hover)}.bv-toolbar-window-launcher .bv-button{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;justify-content:stretch;justify-items:start;gap:8px;min-width:0;min-height:26px;padding:2px 6px;text-align:left}.bv-toolbar-window-launcher .bv-button>span,.bv-toolbar-window-launcher .bv-button>small{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bv-toolbar-window-launcher .bv-button>small{justify-self:end;color:var(--bv-ui-muted);font-size:calc(9px * var(--bv-ui-scale))}.bv-toolbar-window-launcher .bv-button:disabled{opacity:.55}.bv-toolbar-window-launcher>footer{position:sticky;bottom:0;padding:5px 8px;background:var(--bv-ui-surface-raised);border-top:1px solid var(--bv-ui-border)}.bv-toolbar-launcher-empty{display:grid;gap:3px;padding:18px;color:var(--bv-ui-muted)}@media (max-width:760px){.bv-toolbar-window-launcher{width:min(320px,calc(100vw - 24px))}.bv-toolbar-window-launcher__body{grid-template-columns:minmax(190px,1fr)}.bv-toolbar-window-launcher section+section{border-top:1px solid var(--bv-ui-border);border-left:0}}.bv-toolbar-window-launcher{z-index:var(--bv-layer-flyout)}.bv-completion-popup{position:fixed;z-index:var(--bv-layer-flyout);max-height:calc(240px * var(--bv-ui-scale));overflow:auto;padding:4px;color:var(--bv-ui-text);background:var(--bv-ui-input);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius);box-shadow:0 10px 32px #000c;font:calc(12px * var(--bv-ui-scale))/1.4 system-ui,-apple-system,"Segoe UI",sans-serif}.bv-completion-popup button{display:grid;width:100%;gap:0;padding:5px 8px;color:var(--bv-ui-text);text-align:left;background:transparent;border:0;border-radius:var(--bv-ui-radius-sm);cursor:pointer}.bv-completion-popup .bv-button{min-height:0;justify-content:stretch;justify-items:start}.bv-completion-popup button:hover,.bv-completion-popup button.active{background:rgba(var(--bv-ui-accent-rgb),.24);color:var(--bv-ui-text)}.bv-completion-popup button:hover small,.bv-completion-popup button.active small{color:#dcefff}.bv-completion-popup small{overflow:hidden;color:var(--bv-ui-muted);font-size:calc(10px * var(--bv-ui-scale));text-overflow:ellipsis;white-space:nowrap}.completion-menu{min-width:320px}.completion-dataset-picker{display:grid;gap:6px;padding:5px 8px 8px}.completion-dataset-picker>label{display:grid;grid-template-columns:auto minmax(0,1fr) auto auto;align-items:center;gap:7px}.completion-dataset-picker>label span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.completion-dataset-picker>label small{color:var(--bv-muted-text-color)}.completion-dataset-picker .dataset-error{color:#ffaca6;white-space:normal}.bv-settings-datasets{display:grid;gap:8px;width:min(680px,100%)}.bv-settings-datasets>small{color:var(--descrip-text, #a1a1aa)}.bv-settings-datasets>div{display:grid;gap:6px}.bv-settings-datasets label{display:grid;grid-template-columns:auto minmax(0,1fr) auto auto;align-items:center;gap:9px;padding:7px 9px;border:1px solid var(--border-color, #ffffff24);border-radius:var(--bv-ui-radius)}.bv-settings-datasets label span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bv-settings-datasets label small{color:var(--descrip-text, #a1a1aa)}.bv-settings-datasets .dataset-error{color:#ffaca6}.dataset-order{display:inline-flex;gap:3px}.dataset-order button{min-width:24px;padding:1px 5px}.bv-regional-error{margin:20px;padding:15px;color:#ffaca6;border:1px solid #ff756d;border-radius:var(--bv-ui-radius)}.editor-menus{display:flex;align-items:center;gap:2px}.menu-item{position:relative}.editor-menus>.menu-item>button{padding:4px 7px;border-color:transparent;background:transparent}.menu-popover,.toolbar-popover{position:absolute;z-index:20;top:calc(100% + 5px);left:0;display:grid;min-width:230px;padding:7px;border:1px solid var(--bv-border-color);border-radius:var(--bv-ui-radius);background:var(--comfy-menu-bg, #20242a);box-shadow:0 12px 35px #000b}.menu-popover button{display:flex;justify-content:space-between;border-color:transparent;background:transparent;text-align:left}.menu-popover button:hover{background:#ffffff12}.menu-popover hr{width:100%;border:0;border-top:1px solid #ffffff18}.menu-popover kbd{color:var(--bv-muted-text-color)}.view-menu label{display:grid;grid-template-columns:1fr auto;gap:7px}.view-menu input{grid-column:1 / -1;width:100%;padding:0}.view-menu small{padding:5px 7px;color:var(--bv-muted-text-color)}.help-menu{width:min(680px,calc(100vw - 40px));grid-template-columns:repeat(2,minmax(280px,1fr));gap:18px}.help-section{min-width:0}.help-section strong{display:block;margin-bottom:8px}.help-section dl{display:grid;grid-template-columns:minmax(135px,auto) minmax(110px,1fr);gap:5px 12px;margin:0}.help-section dt{color:#8fd2ff;white-space:nowrap}.help-section dd{min-width:0;margin:0;color:var(--bv-muted-text-color)}@media (max-width: 720px){.help-menu{width:calc(100vw - 40px);grid-template-columns:1fr;max-height:calc(100vh - 90px);overflow:auto}}.help-button{width:29px;border-radius:50%!important}.toolbar-popover-anchor{position:relative}.toolbar-popover{right:0;left:auto;gap:7px}.toolbar-popover label{display:grid;grid-template-columns:65px 1fr;align-items:center}.toolbar-popover input{width:120px!important}.panel-splitter{position:relative;cursor:col-resize;background:#ffffff0b;border-left:1px solid #ffffff12;border-right:1px solid #0008}.panel-splitter:hover,.panel-splitter:active{background:var(--bv-primary-color)}.bv-regional-shell main>aside{min-width:0}.bv-regional-shell .layers{display:flex;flex-direction:column;padding:8px}.panel-toolbar{display:flex;align-items:center;gap:3px;margin-bottom:7px;padding:4px;background:#ffffff06;border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.panel-toolbar-spacer{flex:1}.panel-toolbar .panel-tool{display:flex;align-items:center;justify-content:center;gap:5px;min-width:28px;height:28px;min-height:28px;padding:0 6px;color:var(--bv-ui-muted);background:transparent;border:1px solid transparent;border-radius:var(--bv-ui-radius-sm)}.panel-toolbar .panel-tool.primary{color:var(--bv-ui-accent-soft);background:rgba(var(--bv-ui-accent-rgb),.11);border-color:rgba(var(--bv-ui-accent-rgb),.2)}.panel-toolbar .panel-tool:hover:not(:disabled){color:var(--bv-ui-text);background:#fff1;border-color:#ffffff14}.panel-toolbar .panel-tool.danger:not(:disabled){color:#e68f8a}.panel-toolbar .panel-tool:disabled{opacity:.35;cursor:default}.panel-toolbar .panel-tool .tree-control-icon{width:15px;height:15px}.panel-toolbar .panel-tool span{flex:none}.region-row{position:relative;display:grid;grid-template-columns:18px 20px 14px minmax(55px,1fr) auto auto 25px 27px 20px}.region-row .region-expand{display:grid;place-items:center;width:20px;min-width:20px;height:24px;min-height:24px;padding:0;color:var(--bv-ui-muted)}.region-row .region-usage{flex:none;color:var(--bv-muted-text-color);font-size:10px;letter-spacing:.03em}.region-row .priority{flex:none;color:var(--bv-muted-text-color);font-size:11px}.layer-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.inline-name{min-width:0;width:100%;padding:2px 4px!important}.geometry-row{position:relative;margin-bottom:3px}.geometry-tree-item{margin-bottom:4px}.geometry-row{grid-template-columns:18px 20px 22px minmax(0,1fr) 25px 27px 20px 24px;margin-bottom:0}.geometry-row .layer-expand{display:grid;place-items:center;width:20px;min-width:20px;height:24px;min-height:24px;padding:0;color:var(--bv-ui-muted)}.bv-regional-shell .tree-control-icon{display:block;width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.75;stroke-linecap:round;stroke-linejoin:round;pointer-events:none}.bv-regional-shell .tree-control-icon circle[r="1"]{fill:currentColor;stroke:none}.bv-regional-shell .tree-icon-button{display:grid;place-items:center;width:24px;min-width:24px;height:24px;min-height:24px;padding:0;color:var(--bv-ui-muted);background:transparent;border:0;border-radius:var(--bv-ui-radius-sm)}.bv-regional-shell .tree-icon-button:hover{color:var(--bv-ui-text);background:#ffffff0e}.bv-regional-shell .tree-icon-button.deviant{color:#e2b96e;background:#e2b96e13}.bv-regional-shell .tree-icon-button.deviant:hover{color:#f0cc88;background:#e2b96e21}.bv-regional-shell .tree-check{display:grid;place-items:center;align-self:center;width:16px;min-width:16px;height:16px;min-height:16px;padding:0;color:var(--bv-ui-muted);background:transparent;border:1px solid color-mix(in srgb,var(--bv-ui-muted) 72%,transparent);border-radius:var(--bv-ui-radius-sm);box-shadow:none}.bv-regional-shell .tree-check[aria-checked=true]{color:var(--bv-ui-muted);border-color:color-mix(in srgb,var(--bv-ui-muted) 72%,transparent);background:transparent}.bv-regional-shell .tree-check.deviant{color:#e2b96e;border-color:#e2b96eb8;background:#e2b96e13}.bv-regional-shell .tree-check:hover{color:var(--bv-ui-text);border-color:var(--bv-ui-text);background:#ffffff09}.bv-regional-shell .tree-check.deviant:hover{color:#f0cc88;border-color:#e2b96e;background:#e2b96e21}.bv-regional-shell .tree-check .tree-control-icon{width:13px;height:13px;stroke-width:2.2}.bv-regional-shell .layer-overflow{position:relative;margin:0;padding:0!important;border:0!important;border-radius:0}.bv-regional-shell .layer-overflow>summary{display:grid;place-items:center;width:24px;height:24px;margin:0!important;padding:0;color:var(--bv-ui-muted);border-radius:var(--bv-ui-radius-sm);cursor:pointer;list-style:none}.bv-regional-shell .layer-overflow>summary::-webkit-details-marker{display:none}.bv-regional-shell .layer-overflow>summary:hover,.bv-regional-shell .layer-overflow[open]>summary{color:var(--bv-ui-text);background:#ffffff12}.bv-regional-shell .layer-overflow>div{position:absolute;z-index:30;top:calc(100% + 4px);right:0;display:grid;gap:2px;min-width:142px;padding:4px;background:var(--bv-ui-surface-raised);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius);box-shadow:0 10px 28px #00000061}.bv-regional-shell .layer-overflow>div>button{width:100%;min-height:28px;padding:4px 8px;text-align:left;white-space:nowrap}.geometry-operations{position:relative;display:grid;gap:2px;margin:2px 0 5px 20px;padding-left:12px;border-left:1px solid rgba(var(--bv-ui-accent-rgb),.28)}.geometry-operation{position:relative;display:grid;grid-template-columns:18px minmax(0,1fr) 24px 24px;align-items:center;gap:3px;min-height:32px;padding:3px 4px;color:var(--bv-ui-muted);border:1px solid transparent;border-radius:var(--bv-ui-radius-sm)}.geometry-operation:hover{color:var(--bv-ui-text);background:#ffffff0b}.geometry-operation.selected{color:var(--bv-ui-text);background:rgba(var(--bv-ui-accent-rgb),.14);border-color:rgba(var(--bv-ui-accent-rgb),.36);box-shadow:inset 2px 0 0 var(--bv-ui-accent)}.geometry-operation-select{display:grid!important;grid-template-columns:22px minmax(0,1fr) auto;align-items:center;gap:5px;min-width:0;min-height:24px;padding:0!important;color:inherit;text-align:left;background:transparent!important;border:0!important;box-shadow:none!important}.geometry-operation-select>span:nth-child(2){overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.geometry-operation small{color:var(--bv-ui-muted);font-size:calc(9px * var(--bv-ui-scale));text-transform:capitalize}.geometry-operation>button:not(.geometry-operation-select){display:grid;place-items:center;min-width:24px;min-height:24px;padding:0;background:transparent;border:0}.operation-kind{display:grid;place-items:center;width:20px;height:20px;border-radius:var(--bv-ui-radius-sm);font-weight:800}.operation-kind.add{color:var(--bv-ui-accent-soft);background:rgba(var(--bv-ui-accent-rgb),.16)}.operation-kind.subtract{color:#f0c275;background:#e9b65f21}.bv-regional-shell .tree-drag-handle{display:grid;place-items:center;width:18px;min-width:18px;height:24px;min-height:24px;padding:0;color:var(--bv-ui-muted);background:transparent;border:0;border-radius:var(--bv-ui-radius-sm);cursor:grab;opacity:.62}.bv-regional-shell .tree-drag-handle:hover{color:var(--bv-ui-text);background:#ffffff12;opacity:1}.bv-regional-shell .tree-drag-handle:active{cursor:grabbing}.drop-target.drop-inside{background:rgba(var(--bv-ui-accent-rgb),.14)!important;outline:1px solid rgba(var(--bv-ui-accent-rgb),.7)!important}.drop-target.drop-before:before,.drop-target.drop-after:after{content:"";position:absolute;z-index:4;left:4px;right:4px;height:2px;background:var(--bv-ui-accent);border-radius:var(--bv-ui-radius-sm);box-shadow:0 0 0 2px rgba(var(--bv-ui-accent-rgb),.12)}.drop-target.drop-before:before{top:-2px}.drop-target.drop-after:after{bottom:-2px}.option-section{display:grid;gap:8px;padding:10px 0;border-bottom:1px solid #ffffff18}.option-section:first-child{padding-top:0}.option-section h3{margin:0;font-size:14px}.option-hint{padding:10px;border:1px dashed #ffffff22;border-radius:var(--bv-ui-radius-sm);color:var(--bv-muted-text-color)}.inspector details textarea{min-height:90px}.stroke-width-meta{color:var(--bv-muted-text-color);font-variant-numeric:tabular-nums}.inspector-density{width:100%;height:100%;min-height:0}.region-color-control{display:block;padding:8px;border:1px solid #ffffff18;border-radius:var(--bv-ui-radius)}.region-color-split{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:end}.region-color-split>.bv-button{width:30px;min-width:30px;margin-bottom:1px;margin-left:-1px;border-radius:0 var(--bv-ui-radius) var(--bv-ui-radius) 0}.region-color-split>.bv-control-field .bv-color-field{border-radius:var(--bv-ui-radius) 0 0 var(--bv-ui-radius)}.region-color-control>.bv-control-field{min-width:0}.region-color-control>.bv-button{align-self:center}.bv-regional-shell header{min-height:38px;padding:5px 8px;gap:7px}.bv-regional-shell header strong{font-size:13px;white-space:nowrap}.menu-popover{font-size:13px;line-height:1.25}.menu-popover button{min-height:27px;padding:5px 7px}.menu-popover small{padding:5px 7px;color:var(--bv-muted-text-color)}.artboard-menu{gap:7px}.artboard-menu label{display:grid;grid-template-columns:65px 1fr;align-items:center}.artboard-menu input{width:130px}.bv-regional-shell[hidden]{display:none!important}.bv-managed-window{position:fixed;z-index:var(--bv-layer-window);min-width:0;min-height:0;overflow:visible;color:var(--bv-ui-text);border-radius:var(--bv-ui-radius);box-shadow:0 20px 70px #000b;outline:0}.bv-managed-window-surface{display:grid;grid-template-rows:auto minmax(0,1fr) auto;width:100%;height:100%;overflow:hidden;background:var(--bv-ui-surface);border:1px solid var(--bv-ui-border-hover);border-radius:inherit}.bv-managed-window[hidden]{display:none!important}.bv-managed-window.floating{resize:none}.bv-managed-window.workspace{left:24px;top:58px;width:calc(100vw - 48px);height:calc(100vh - 82px);border-radius:var(--bv-ui-radius);resize:none}.bv-managed-window-body{min-width:0;min-height:0;padding:var(--bv-ui-content-padding);overflow:auto}.bv-managed-window.floating>.bv-ui-window-header{cursor:move;user-select:none;touch-action:none}.bv-managed-window .bv-ui-window-header button,.bv-managed-window .bv-ui-window-header select{cursor:pointer;user-select:auto}.bv-window-resize-handle{position:absolute;z-index:8;touch-action:none}.bv-window-resize-handle.n,.bv-window-resize-handle.s{right:10px;left:10px;height:5px;cursor:ns-resize}.bv-window-resize-handle.n{top:0}.bv-window-resize-handle.s{bottom:0}.bv-window-resize-handle.e,.bv-window-resize-handle.w{top:10px;bottom:10px;width:5px;cursor:ew-resize}.bv-window-resize-handle.e{right:0}.bv-window-resize-handle.w{left:0}.bv-window-resize-handle.ne,.bv-window-resize-handle.nw,.bv-window-resize-handle.se,.bv-window-resize-handle.sw{width:10px;height:10px}.bv-window-resize-handle.ne,.bv-window-resize-handle.sw{cursor:nesw-resize}.bv-window-resize-handle.nw,.bv-window-resize-handle.se{cursor:nwse-resize}.bv-window-resize-handle.n,.bv-window-resize-handle.ne,.bv-window-resize-handle.nw{top:0}.bv-window-resize-handle.s,.bv-window-resize-handle.se,.bv-window-resize-handle.sw{bottom:0}.bv-window-resize-handle.e,.bv-window-resize-handle.ne,.bv-window-resize-handle.se{right:0}.bv-window-resize-handle.w,.bv-window-resize-handle.nw,.bv-window-resize-handle.sw{left:0}.bv-ui-window-header{display:grid!important;grid-template-columns:minmax(320px,1fr) auto minmax(180px,1fr);align-items:center;gap:calc(8px * var(--bv-ui-scale));min-height:calc(34px * var(--bv-ui-scale))!important;padding:calc(2px * var(--bv-ui-scale)) calc(6px * var(--bv-ui-scale))!important;background:var(--bv-ui-surface-raised);border-bottom:1px solid var(--bv-ui-border)!important}.bv-managed-window .bv-ui-window-header{grid-template-columns:minmax(0,1fr) auto}.bv-managed-window .bv-ui-window-center:empty{display:none}.bv-managed-window .bv-ui-window-header:has(.bv-ui-window-center:not(:empty)){grid-template-columns:minmax(250px,1fr) auto minmax(78px,1fr)}.bv-regional-window-body{display:flex;flex-direction:column;min-width:0;min-height:0;padding:0;overflow:hidden}.bv-regional-window-body>.bv-regional-dock-host{flex:1;min-height:0}.bv-ui-window-identity{display:flex;align-items:center;gap:calc(7px * var(--bv-ui-scale));min-width:0;overflow:visible}.bv-ui-window-icon{display:grid;place-items:center;width:calc(25px * var(--bv-ui-scale));height:calc(25px * var(--bv-ui-scale));flex:0 0 calc(25px * var(--bv-ui-scale));color:var(--bv-ui-accent-soft);background:rgba(var(--bv-ui-accent-rgb),.13);border:1px solid rgba(var(--bv-ui-accent-rgb),.22);border-radius:var(--bv-ui-radius-sm)}.bv-ui-window-icon svg,.bv-ui-window-reset svg,.bv-ui-window-shelf-icon svg{width:calc(16px * var(--bv-ui-scale));height:calc(16px * var(--bv-ui-scale));fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}.bv-ui-window-icon .bv-brand-cyclone,.bv-ui-window-shelf-icon .bv-brand-cyclone{color:var(--bv-ui-accent-light);fill:currentColor;stroke:none}.bv-ui-window-title{flex:0 1 auto;min-width:0;overflow:hidden;font-size:calc(13px * var(--bv-ui-scale));text-overflow:ellipsis;white-space:nowrap}.bv-ui-window-title-short{display:none}@container bv-window-header (max-width:900px){.bv-ui-window-title:has(.bv-ui-window-title-short) .bv-ui-window-title-full{display:none}.bv-ui-window-title-short{display:inline}}.bv-ui-window-context{display:flex;align-items:center;gap:calc(5px * var(--bv-ui-scale));min-width:0;overflow:visible;color:var(--bv-ui-muted);font-size:calc(10px * var(--bv-ui-scale))}.bv-regional-shell .bv-ui-window-context select{width:min(240px,100%);min-width:0;height:auto;padding:0 18px 0 calc(5px * var(--bv-ui-scale));color:var(--bv-ui-muted);background-color:transparent;border:0;border-radius:0;font:inherit;text-overflow:ellipsis}.bv-regional-shell .bv-ui-window-context .bv-select-shell{width:min(240px,100%);min-height:calc(22px * var(--bv-ui-scale));overflow:visible;background:#ffffff06;border-color:var(--bv-ui-border);border-radius:var(--bv-ui-radius-sm);box-shadow:none}.bv-regional-shell .bv-ui-window-context .bv-select-shell:hover{background:#ffffff0b;border-color:var(--bv-ui-border)}.bv-regional-shell .bv-ui-window-context .bv-select-shell:focus-within{background:rgba(var(--bv-ui-accent-rgb),.07);border-color:rgba(var(--bv-ui-accent-rgb),.34);box-shadow:none}.bv-regional-shell .bv-ui-window-context .bv-select-shell:focus-within select{border-color:transparent;box-shadow:none;outline:0}.bv-regional-shell .bv-ui-window-context .bv-select-shell>.bv-chevron{right:calc(7px * var(--bv-ui-scale));color:var(--bv-ui-muted)}.bv-ui-window-center{display:flex;align-self:stretch;align-items:center;justify-content:center;min-width:0}.bv-ui-window-center .editor-menus{justify-content:center}.editor-menu-label-short{display:none}@container bv-window-header (max-width:560px){.editor-menu-label-full{display:none}.editor-menu-label-short{display:inline}.bv-ui-window-center .editor-menus .bv-button{min-width:22px;padding-inline:5px}}.bv-ui-window-controls{display:flex;align-items:center;justify-content:flex-end;gap:2px}.bv-ui-window-control{display:grid;place-items:center;width:calc(24px * var(--bv-ui-scale));height:calc(24px * var(--bv-ui-scale));min-height:0;padding:0;color:var(--bv-ui-muted);background:transparent;border:1px solid transparent;border-radius:var(--bv-ui-radius-sm);font-size:inherit}.bv-ui-window-control svg{width:calc(14px * var(--bv-ui-scale));height:calc(14px * var(--bv-ui-scale));fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}.bv-ui-window-control:hover{color:var(--bv-ui-text);background:#ffffff12;border-color:#e7e1f714}.bv-ui-window-control--close:hover{color:#ffd8df;background:#ee6f8321;border-color:#ee6f8333}.bv-regional-shell.floating .bv-ui-window-header{cursor:move;user-select:none;touch-action:none}.bv-regional-shell .bv-ui-window-header button,.bv-regional-shell .bv-ui-window-header select{cursor:pointer;user-select:auto}.bv-ui-window-footer{container:bv-window-footer / inline-size;display:grid!important;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:calc(10px * var(--bv-ui-scale));min-height:calc(38px * var(--bv-ui-scale));padding:calc(4px * var(--bv-ui-scale)) calc(7px * var(--bv-ui-scale)) calc(4px * var(--bv-ui-scale)) calc(9px * var(--bv-ui-scale))!important;background:#211f27;border-top:1px solid var(--bv-ui-border)!important;border-bottom:0!important}.bv-ui-window-status{display:flex;align-items:center;gap:var(--bv-ui-field-gap);min-width:0;overflow:hidden;color:var(--bv-ui-muted);font-size:calc(10px * var(--bv-ui-scale));white-space:nowrap;text-overflow:ellipsis}.bv-ui-window-status>span:first-child{overflow:hidden;min-width:0;text-overflow:ellipsis;white-space:nowrap}.bv-ui-window-footer.has-warning .bv-ui-window-status{color:#e9b65f}.bv-ui-window-footer-actions{display:flex;align-items:center;gap:calc(7px * var(--bv-ui-scale));margin-left:auto}.bv-ui-window-footer-actions .bv-button{white-space:nowrap}.bv-ui-window-footer-actions .bv-button>svg{width:calc(16px * var(--bv-ui-scale));height:calc(16px * var(--bv-ui-scale));flex:none;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}.bv-footer-action-set,.bv-footer-secondary-actions{display:flex;align-items:center;gap:5px}.bv-footer-action-set>.bv-menu-button{display:none}.bv-ui-window-footer.is-stacked{grid-template-columns:1fr}.bv-ui-window-footer.is-stacked .bv-ui-window-footer-actions{width:100%;margin-left:0;justify-content:flex-end}.bv-ui-window-footer.is-minimal .bv-footer-secondary-actions{display:none}.bv-ui-window-footer.is-minimal .bv-footer-action-set>.bv-menu-button{display:block}.bv-ui-window-footer.is-minimal .bv-ui-window-footer-actions>.bv-button:not(:last-child){display:none}.bv-regional-shell .bv-ui-window-reset{min-height:calc(29px * var(--bv-ui-scale));padding:0 calc(9px * var(--bv-ui-scale));font-size:calc(10px * var(--bv-ui-scale))}.bv-ui-window-shelf{position:fixed;z-index:var(--bv-layer-shelf);left:var(--bv-ui-window-shelf-left,calc(14px * var(--bv-ui-scale)));bottom:var(--bv-ui-window-shelf-bottom,calc(14px * var(--bv-ui-scale)));display:flex;align-items:flex-end;gap:calc(7px * var(--bv-ui-scale));pointer-events:none}.bv-ui-window-shelf-item{display:inline-flex;align-items:center;height:calc(36px * var(--bv-ui-scale));color:var(--bv-ui-muted);background:var(--bv-ui-surface-raised);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius);box-shadow:0 8px 24px #0006;font:calc(10px * var(--bv-ui-scale))/1.2 system-ui,-apple-system,"Segoe UI",sans-serif;pointer-events:auto;overflow:hidden}.bv-ui-window-shelf-restore,.bv-ui-window-shelf-close{align-self:stretch;display:inline-flex;align-items:center;color:inherit;background:transparent;border:0}.bv-ui-window-shelf-restore{gap:calc(7px * var(--bv-ui-scale));padding:0 calc(8px * var(--bv-ui-scale)) 0 calc(6px * var(--bv-ui-scale))}.bv-ui-window-shelf-close{padding:0 calc(7px * var(--bv-ui-scale));border-left:1px solid var(--bv-ui-border)}.bv-ui-window-shelf-close svg{width:calc(14px * var(--bv-ui-scale));fill:none;stroke:currentColor;stroke-width:1.7}.bv-ui-window-shelf-item:hover{color:var(--bv-ui-text);background:#2b2832;border-color:rgba(var(--bv-ui-accent-rgb),.3)}.bv-window-navigator{display:flex;align-items:center;gap:3px;min-width:0}.bv-window-navigator .bv-select-popover{width:clamp(112px,18vw,180px)}.bv-window-navigator .bv-select-trigger{min-height:22px;height:22px;padding:0 7px;gap:5px;color:var(--bv-ui-muted);background:#ffffff05;border-color:#e7e1f71a;border-radius:var(--bv-ui-radius-sm);font-size:10px;box-shadow:none}.bv-window-navigator .bv-select-trigger:hover:not(:disabled),.bv-window-navigator .bv-select-trigger[aria-expanded=true]{color:var(--bv-ui-text);background:#ffffff0b;border-color:#e7e1f72e;box-shadow:none}.bv-window-navigator .bv-select-trigger>span:first-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bv-window-navigator .bv-chevron{width:6px;height:6px}.bv-window-switch-mode{display:inline-flex;align-items:center;height:22px;padding:0 4px;color:var(--bv-ui-muted);background:transparent;border:1px solid transparent;border-radius:var(--bv-ui-radius-sm);font:inherit}.bv-window-switch-mode:hover{background:#ffffff0b;border-color:#e7e1f71a}.bv-window-switch-mode>span:last-child{display:none}.bv-window-switch-mode .bv-toggle-track{width:26px;height:14px;padding:1px}.bv-window-switch-mode .bv-toggle-track>span{width:10px;height:10px}.bv-window-switch-mode[aria-checked=true] .bv-toggle-track{background:rgba(var(--bv-ui-accent-rgb),.35);border-color:var(--bv-ui-accent)}.bv-window-switch-mode .bv-toggle-track>span{margin-left:0;transition:margin-left .15s}.bv-window-switch-mode[aria-checked=true] .bv-toggle-track>span{margin-left:auto;translate:0;transform:none;background:var(--bv-ui-accent-soft)}.bv-ui-window-header{container:bv-window-header / inline-size}.bv-window-navigator-overflow{position:relative}.bv-window-navigator-overflow>button{display:grid;place-items:center;width:22px;height:22px;padding:0;color:var(--bv-ui-muted);cursor:pointer;background:transparent;border:1px solid transparent;border-radius:var(--bv-ui-radius-sm)}.bv-window-navigator-overflow>button:hover,.bv-window-navigator-overflow>button[aria-expanded=true]{color:var(--bv-ui-text);background:#ffffff0b;border-color:var(--bv-ui-border)}.bv-window-navigator-menu{color:var(--bv-ui-text);background:var(--bv-ui-surface-raised);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius);box-shadow:0 14px 42px #000b}.bv-window-navigator-panel{display:grid;gap:7px;width:min(260px,calc(100vw - 24px));padding:8px}.bv-window-navigator-panel-row{display:flex;align-items:center;justify-content:space-between;gap:12px;min-width:0;color:var(--bv-ui-muted)}.bv-window-navigator-panel-row.is-node>.bv-select-popover{width:100%}.bv-ui-window-header.is-menu-overflow .bv-ui-window-title-full{display:none}.bv-ui-window-header.is-menu-overflow .bv-ui-window-title-short{display:inline}.bv-ui-window-shelf-icon{display:grid;place-items:center;width:calc(24px * var(--bv-ui-scale));height:calc(24px * var(--bv-ui-scale));color:var(--bv-ui-accent-soft);background:rgba(var(--bv-ui-accent-rgb),.14);border-radius:var(--bv-ui-radius-sm)}.artboard-tools{position:absolute;z-index:12;top:12px;left:12px;display:flex;align-items:flex-start;gap:7px;pointer-events:none}.artboard-tools .bv-toolbar{pointer-events:auto}.zoom-controls{position:absolute;z-index:12;bottom:12px;left:50%;display:flex;gap:3px;padding:4px;border:1px solid #ffffff2b;border-radius:var(--bv-ui-radius);background:color-mix(in srgb,var(--comfy-menu-bg, #20242a) 92%,transparent);box-shadow:0 8px 25px #0009;backdrop-filter:blur(8px);transform:translate(-50%)}.zoom-controls button{min-width:32px;height:28px;padding:3px 8px;border-color:transparent;background:transparent}.zoom-controls button:nth-child(2){min-width:66px}.zoom-controls button:hover{background:#ffffff15}.tool-palette,.brush-flyout{pointer-events:auto;border:1px solid #ffffff2b;border-radius:var(--bv-ui-radius);background:color-mix(in srgb,var(--comfy-menu-bg, #20242a) 92%,transparent);box-shadow:0 8px 25px #0009;backdrop-filter:blur(8px)}.tool-palette{display:grid;gap:3px;padding:4px}.tool-palette button{display:grid;place-items:center;width:34px;height:34px;padding:6px;border-color:transparent;background:transparent}.tool-palette button:hover:not(:disabled){background:#ffffff15}.tool-palette button.active{background:var(--bv-primary-color)}.tool-palette button:disabled{opacity:.3;cursor:not-allowed}.tool-palette svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.brush-flyout{display:grid;width:235px;gap:8px;padding:10px}.brush-flyout header{min-height:0;padding:0 0 5px;border-bottom:1px solid #ffffff18}.brush-flyout header button{margin-left:auto}.brush-flyout label{display:grid;grid-template-columns:1fr auto;align-items:center;gap:4px 8px}.brush-flyout output{color:var(--bv-muted-text-color)}.brush-flyout input[type=range]{grid-column:1 / -1;width:100%;padding:0}.brush-flyout select{grid-column:1 / -1}.fixed-inspector .inspector-tabs{display:none}.bv-ui-dock .flexlayout__float_window{border:1px solid rgba(var(--bv-ui-accent-rgb),.36);border-radius:var(--bv-ui-radius);background:var(--bv-ui-surface);box-shadow:0 18px 48px #00000094,0 0 0 1px #ffffff09}.bv-ui-dock .flexlayout__float_window_header{min-height:31px;padding:6px 8px;color:var(--bv-ui-text);font-family:system-ui,-apple-system,Segoe UI,sans-serif;font-size:calc(12px * var(--bv-ui-scale));line-height:1.35;background:var(--bv-ui-surface-raised);border-bottom:1px solid var(--bv-ui-border)}.bv-ui-dock .flexlayout__float_window_drag_handle{min-width:22px;min-height:22px;padding:0 5px;color:var(--bv-ui-muted);border-radius:var(--bv-ui-radius-sm)}.bv-ui-dock .flexlayout__float_window_drag_handle:hover{color:var(--bv-ui-text);background:rgba(var(--bv-ui-accent-rgb),.14)}.bv-ui-dock .flexlayout__float_window_content{margin:0;background:var(--bv-ui-surface);border-radius:0 0 var(--bv-ui-radius) var(--bv-ui-radius)}.bv-detector-card{display:grid;gap:12px}.bv-detector-card-title{display:grid;min-width:0;gap:2px;margin-right:auto}.bv-detector-card-title strong,.bv-detector-card-title small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bv-detector-card-title small,.bv-detector-impact{color:var(--bv-ui-muted)}.bv-detector-impact{display:block;padding:8px 10px;border-left:2px solid rgba(var(--bv-ui-accent-rgb),.55);background:rgba(var(--bv-ui-accent-rgb),.07)}.bv-ui-empty-state{display:grid;place-items:center;min-height:160px;padding:28px;color:var(--bv-ui-muted);text-align:center;border:1px dashed var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-ui-empty-state strong{color:var(--bv-ui-text)}.bv-ui-empty-state p{margin:4px 0 0}.bv-inspector-section{display:grid;align-content:start;gap:calc(12px * var(--bv-ui-scale));min-width:0;padding:calc(10px * var(--bv-ui-scale))}.bv-inspector-section>h3{margin:0;font-size:calc(13px * var(--bv-ui-scale))}.inspector-tab-panel>.bv-inspector-section+.bv-inspector-section{border-top:1px solid var(--bv-ui-border)}.bv-compact-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,125px),1fr));gap:calc(10px * var(--bv-ui-scale));min-width:0}.bv-inspector-section{container:bv-inspector-section / inline-size}.bv-layer-bounds-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--bv-ui-field-gap);min-width:0}@container bv-inspector-section (max-width:220px){.bv-layer-bounds-grid{grid-template-columns:1fr}}.bv-control-field,.bv-number-field{display:grid;gap:var(--bv-ui-field-gap);min-width:0;color:var(--bv-ui-muted);font-size:calc(11px * var(--bv-ui-scale))}.bv-control-label,.bv-number-field>label{color:var(--bv-ui-muted)}.bv-control-help{color:var(--bv-ui-muted);font-size:calc(10px * var(--bv-ui-scale));line-height:1.4}.bv-select-shell{position:relative;display:block;min-width:0}.bv-select-shell select{width:100%;height:var(--bv-ui-control-height);padding:0 calc(36px * var(--bv-ui-scale)) 0 calc(11px * var(--bv-ui-scale));appearance:none;color:var(--bv-ui-text);background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius);outline:0}.bv-select-shell>svg{position:absolute;top:50%;right:calc(10px * var(--bv-ui-scale));width:calc(16px * var(--bv-ui-scale));height:calc(16px * var(--bv-ui-scale));translate:0 -50%;fill:none;stroke:var(--bv-ui-muted);stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;pointer-events:none}.bv-select-shell:hover{border-color:var(--bv-ui-border-hover)}.bv-number-field{grid-template-columns:minmax(0,1fr)}.bv-number-slider{position:relative;min-width:0;padding-top:calc(9px * var(--bv-ui-scale))}.bv-number-slider output{position:absolute;z-index:2;left:var(--bubble-left,50%);bottom:calc(100% + 4px);translate:-50% 2px;padding:3px 6px;color:var(--bv-ui-text);white-space:nowrap;background:#302c3a;border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius-sm);font-size:calc(10px * var(--bv-ui-scale));opacity:0;pointer-events:none}.bv-number-slider:hover output,.bv-number-slider:focus-within output{opacity:1;translate:-50% 0}.bv-number-track{width:100%;height:18px;margin:0;padding:0!important;appearance:none;background:transparent!important;border:0!important;cursor:pointer}.bv-number-track::-webkit-slider-runnable-track{height:4px;border-radius:999px;background:linear-gradient(90deg,var(--bv-ui-accent) 0 var(--range-fill),rgba(168,161,179,.18) var(--range-fill) 100%)}.bv-number-track::-webkit-slider-thumb{width:16px;height:16px;margin-top:-6px;appearance:none;border:2px solid var(--bv-ui-surface);border-radius:50%;background:var(--bv-ui-accent);box-shadow:0 0 0 1px rgba(var(--bv-ui-accent-rgb),.38)}.bv-number-box{display:flex;min-width:0;height:var(--bv-ui-control-height);overflow:hidden;background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-number-box:focus-within{border-color:var(--bv-ui-accent);box-shadow:0 0 0 3px rgba(var(--bv-ui-accent-rgb),.18)}.bv-number-box input{min-width:0;width:100%;padding:0 calc(10px * var(--bv-ui-scale));color:var(--bv-ui-text);text-align:right;background:transparent;border:0;outline:0;font-variant-numeric:tabular-nums}.bv-number-box>span{display:grid;place-items:center;min-width:calc(34px * var(--bv-ui-scale));padding:0 7px;border-left:1px solid var(--bv-ui-border);background:#ffffff08}.bv-number-ticks{display:flex;justify-content:space-between;color:var(--bv-ui-muted);font-size:calc(9px * var(--bv-ui-scale))}.bv-textarea-shell{display:flex;min-width:0;max-width:100%;min-height:calc(100px * var(--bv-ui-scale));overflow:hidden;background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-textarea-shell:hover{border-color:var(--bv-ui-border-hover)}.bv-textarea-shell:focus-within{border-color:var(--bv-ui-accent);box-shadow:0 0 0 3px rgba(var(--bv-ui-accent-rgb),.18)}.bv-textarea-shell textarea{width:100%;min-width:0;min-height:calc(98px * var(--bv-ui-scale));max-height:360px;padding:calc(9px * var(--bv-ui-scale)) calc(10px * var(--bv-ui-scale));color:var(--bv-ui-text);background:transparent;border:0;outline:0;resize:vertical;font:inherit;line-height:1.45}.bv-control-disclosure{margin:0;padding:0!important;overflow:hidden;border:1px solid var(--bv-ui-border)!important;border-radius:var(--bv-ui-radius)!important}.bv-control-disclosure>summary{position:relative;margin:0!important;padding:calc(9px * var(--bv-ui-scale)) calc(12px * var(--bv-ui-scale));list-style:none}.bv-control-disclosure>summary::-webkit-details-marker{display:none}.bv-control-disclosure>summary:after{content:"›";position:absolute;right:12px;font-size:18px;line-height:1}.bv-control-disclosure[open]>summary:after{transform:rotate(90deg)}.bv-control-disclosure-body{display:grid;gap:calc(10px * var(--bv-ui-scale));padding:calc(10px * var(--bv-ui-scale));border-top:1px solid var(--bv-ui-border)}.bv-control-field{container:bv-control-field / inline-size;display:grid;align-self:start;gap:var(--bv-ui-field-gap);min-width:0;color:var(--bv-ui-muted)}.bv-field-grid,.bv-choice-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,var(--bv-field-grid-min,165px)),1fr));gap:calc(9px * var(--bv-ui-scale));min-width:0}.bv-choice-grid{grid-template-columns:repeat(auto-fit,minmax(min(100%,var(--bv-choice-grid-min,145px)),1fr));gap:var(--bv-ui-field-gap)}.bv-editor-dialog,.bv-card-list,.bv-editor-item-summary{display:grid;gap:calc(10px * var(--bv-ui-scale));min-width:0}.bv-editor-item-compact-summary,.bv-detector-summary{display:flex;align-items:center;gap:calc(6px * var(--bv-ui-scale));min-width:0;color:var(--bv-ui-muted);font-size:calc(10px * var(--bv-ui-scale))}.bv-editor-item-compact-summary>span,.bv-detector-summary>span{max-width:220px;overflow:hidden;padding:2px 6px;text-overflow:ellipsis;white-space:nowrap;background:#ffffff09;border:1px solid var(--bv-ui-border);border-radius:999px}.bv-detector-summary{width:100%}.bv-detector-summary>strong{min-width:90px;color:var(--bv-ui-text)}.bv-detector-summary>span:nth-last-child(1){margin-left:auto}.bv-editor-item-details,.bv-detector-details{display:grid;gap:calc(10px * var(--bv-ui-scale))}.bv-editor-item-actions{display:flex;justify-content:flex-end;gap:var(--bv-ui-field-gap)}.bv-subtle-danger:hover:not(:disabled){color:#f19aa8;background:#d35d711a;border-color:#d35d7129}.bv-editor-impact{color:var(--bv-ui-muted)}.bv-control-label{display:flex;align-items:center;gap:6px;font-size:calc(11px * var(--bv-ui-scale))}.bv-control-help,.bv-control-message{color:var(--bv-ui-muted);font-size:calc(10px * var(--bv-ui-scale));line-height:1.4}.bv-control-message.is-error,.bv-control-field.is-error{color:#f19aa8}.bv-density-compact .bv-control-field,.bv-density-compact .bv-number-field{position:relative}.bv-density-compact .bv-control-help-overlay{position:absolute;z-index:30;top:calc(100% + 4px);left:0;width:max-content;max-width:min(280px,calc(100vw - 24px));padding:5px 7px;opacity:0;color:var(--bv-ui-text);background:#0d0c12;border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius-sm);box-shadow:0 8px 20px #0009;pointer-events:none;transition:opacity .12s ease}.bv-density-compact .bv-control-field:hover>.bv-control-help-overlay,.bv-density-compact .bv-control-field:focus-within>.bv-control-help-overlay,.bv-density-compact .bv-number-field:hover>.bv-control-help-overlay,.bv-density-compact .bv-number-field:focus-within>.bv-control-help-overlay{opacity:1}.bv-input-shell,.bv-select-shell{position:relative;display:flex;align-items:stretch;min-width:0;min-height:var(--bv-ui-control-height);overflow:hidden;color:var(--bv-ui-text);background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-input-shell:focus-within,.bv-select-shell:focus-within,.bv-number-box:focus-within,.bv-textarea-shell:focus-within{border-color:var(--bv-ui-accent);box-shadow:0 0 0 3px rgba(var(--bv-ui-accent-rgb),.18)}.bv-input-shell>input,.bv-select-shell>select{width:100%;min-width:0;min-height:0;padding:0 calc(11px * var(--bv-ui-scale));color:inherit;background:transparent;border:0;outline:0}.bv-select-shell>select{appearance:none;padding-right:36px}.bv-field-icon,.bv-field-suffix,.bv-number-unit{display:grid;place-items:center;flex:0 0 auto;min-width:calc(34px * var(--bv-ui-scale));padding:0 7px;color:var(--bv-ui-muted);background:#ffffff06}.bv-input-shell>.bv-field-icon{border-right:1px solid var(--bv-ui-border)}.bv-field-suffix,.bv-number-unit{border-left:1px solid var(--bv-ui-border)}.bv-chevron{display:inline-block;width:8px;height:8px;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:rotate(45deg) translateY(-2px)}.bv-select-shell>.bv-chevron{position:absolute;top:50%;right:13px;transform:translateY(-65%) rotate(45deg);pointer-events:none}.bv-select-popover{position:relative;min-width:0}.bv-select-trigger{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:var(--bv-ui-field-gap);width:100%;min-height:var(--bv-ui-control-height);padding:0 var(--bv-ui-content-padding);color:var(--bv-ui-text);text-align:left;background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-select-trigger:hover:not(:disabled){border-color:var(--bv-ui-border-hover)}.bv-select-trigger:focus-visible,.bv-select-trigger[aria-expanded=true]{outline:0;border-color:var(--bv-ui-accent);box-shadow:0 0 0 3px rgba(var(--bv-ui-accent-rgb),.18)}.bv-select-trigger>.bv-chevron{justify-self:end}.bv-select-menu{z-index:120;display:grid;gap:2px;max-width:min(360px,calc(100vw - 24px));max-height:min(280px,50vh);padding:var(--bv-ui-field-gap);overflow:auto;color:var(--bv-ui-text);background:var(--bv-ui-surface-raised);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius);box-shadow:0 14px 42px #000b}.bv-select-menu>button{display:flex;align-items:center;gap:var(--bv-ui-field-gap);min-width:100%;min-height:var(--bv-ui-control-height);padding:0 var(--bv-ui-content-padding);color:var(--bv-ui-text);text-align:left;white-space:nowrap;background:transparent;border:1px solid transparent;border-radius:var(--bv-ui-radius)}.bv-select-menu>button:hover:not(:disabled),.bv-select-menu>button[aria-selected=true]{background:rgba(var(--bv-ui-accent-rgb),.14);border-color:rgba(var(--bv-ui-accent-rgb),.22)}.bv-select-menu>button:disabled{color:var(--bv-ui-muted);opacity:.45}.bv-input-shell>.bv-field-action{align-self:stretch;flex:0 0 auto;min-height:0;padding:0 var(--bv-ui-content-padding);color:var(--bv-ui-muted);background:#ffffff06;border:0;border-left:1px solid var(--bv-ui-border);border-radius:0}.bv-input-shell>.bv-field-action:hover:not(:disabled){color:var(--bv-ui-text);background:rgba(var(--bv-ui-accent-rgb),.12)}@container bv-control-field (max-width:220px){.bv-input-shell:has(.bv-field-action){flex-wrap:wrap;overflow:visible}.bv-input-shell:has(.bv-field-action)>input{flex-basis:100%;min-height:var(--bv-ui-control-height)}.bv-input-shell:has(.bv-field-action)>.bv-field-action{flex:1 1 auto;min-height:var(--bv-ui-control-height);border-top:1px solid var(--bv-ui-border)}.bv-input-shell:has(.bv-field-action)>.bv-field-action:first-of-type{border-left:0}.bv-keybinding{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.bv-keybinding>button:first-child{grid-column:1/-1}}.bv-number-field{container:bv-number-field / inline-size;display:grid;gap:var(--bv-ui-field-gap);min-width:0;color:var(--bv-ui-muted);font-size:calc(11px * var(--bv-ui-scale))}.bv-number-value-row{display:grid;grid-template-columns:minmax(0,1fr) minmax(calc(148px * var(--bv-ui-scale)),38%);align-items:center;gap:calc(11px * var(--bv-ui-scale));min-width:0}.bv-number-field.direct-only .bv-number-value-row{grid-template-columns:1fr}.bv-number-box{display:flex;min-width:0;height:var(--bv-ui-control-height);overflow:hidden;color:var(--bv-ui-text);background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-number-box>input{width:100%;min-width:0;min-height:0;padding:0 10px;text-align:right;background:transparent;border:0;outline:0;font-variant-numeric:tabular-nums}.bv-number-ticks{display:flex;justify-content:space-between;width:calc(62% - 6px);font-size:calc(9px * var(--bv-ui-scale))}@container bv-number-field (max-width:380px){.bv-number-field.has-slider .bv-number-value-row{grid-template-columns:1fr}.bv-number-field.has-slider .bv-number-box{grid-row:1;width:min(calc(292px * var(--bv-ui-scale)),100%);justify-self:center}.bv-number-field.has-slider .bv-number-slider{grid-row:2;width:100%}.bv-number-field.has-slider .bv-number-ticks{width:100%}}.bv-textarea-shell{display:flex;min-width:0;max-width:100%;min-height:var(--bv-ui-textarea-height);overflow:hidden;color:var(--bv-ui-text);background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-textarea-shell>textarea{width:100%;min-width:0;min-height:calc(var(--bv-ui-textarea-height) - 2px);max-height:360px;padding:9px 10px;line-height:1.45;background:transparent;border:0;outline:0;resize:vertical;scrollbar-color:rgba(170,162,181,.55) transparent;scrollbar-width:thin}.bv-textarea-shell>textarea::-webkit-scrollbar{width:10px;height:10px}.bv-textarea-shell>textarea::-webkit-scrollbar-track{background:transparent}.bv-textarea-shell>textarea::-webkit-scrollbar-thumb{background:#aaa2b57a;border:2px solid var(--bv-ui-input);border-radius:999px}.bv-textarea-shell>textarea::-webkit-scrollbar-corner{background:var(--bv-ui-input)}.bv-textarea-shell>textarea::-webkit-resizer{background-color:var(--bv-ui-input);background-image:linear-gradient(135deg,transparent 0 48%,rgba(170,162,181,.3) 49% 56%,transparent 57% 65%,rgba(170,162,181,.55) 66% 73%,transparent 74%)}.bv-textarea-shell.resize-none>textarea{resize:none}.bv-textarea-shell.resize-both{max-width:100%;overflow:auto}.bv-textarea-shell.resize-both>textarea{resize:both;max-width:100%}.bv-button{display:inline-flex;align-items:center;justify-content:center;gap:7px;min-height:var(--bv-ui-control-height);padding:0 calc(13px * var(--bv-ui-scale));color:var(--bv-ui-text);background:var(--bv-ui-surface-raised);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius);cursor:pointer}.bv-button:hover:not(:disabled){border-color:var(--bv-ui-border-hover);background:#302d39}.bv-button.primary{background:var(--bv-ui-accent);border-color:var(--bv-ui-accent-hover)}.bv-button.ghost{color:var(--bv-ui-muted);background:transparent;border-color:transparent}.bv-button.danger{color:#f19aa8;background:#d35d7121}.bv-button.warning{color:#f0c275;background:#e9b65f1f}.bv-button.success{color:#83deb6;background:#55c9941f}.bv-button.icon-only{width:var(--bv-ui-control-height);padding:0}.bv-button:disabled{opacity:.42;cursor:not-allowed}.bv-menu-button,.bv-split-button,.bv-popover-host,.bv-rich-select,.bv-search-field,.bv-image-picker{position:relative}.bv-menu,.bv-rich-select-menu,.bv-search-results,.bv-image-picker-menu,.bv-popover{position:absolute;z-index:100;top:calc(100% + 6px);right:0;min-width:220px;padding:5px;color:var(--bv-ui-text);background:var(--bv-ui-surface-raised);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius);box-shadow:0 14px 42px #000b}.bv-menu-content>button,.bv-rich-select-menu>button,.bv-search-results>button,.bv-image-picker-menu>button{display:flex;align-items:center;gap:var(--bv-ui-field-gap);width:100%;padding:var(--bv-ui-field-gap) var(--bv-ui-content-padding);text-align:left;background:transparent;border:0;border-radius:var(--bv-ui-radius)}.bv-menu-content>button:hover,.bv-rich-select-menu>button:hover,.bv-search-results>button:hover,.bv-image-picker-menu>button:hover{background:rgba(var(--bv-ui-accent-rgb),.12)}.bv-menu-content kbd{margin-left:auto}.bv-split-button{display:inline-flex}.bv-split-button>.bv-button:first-child{border-radius:var(--bv-ui-radius) 0 0 var(--bv-ui-radius)}.bv-split-button>.bv-button:nth-child(2){border-radius:0 var(--bv-ui-radius) var(--bv-ui-radius) 0;border-left-color:#fff3}.bv-toggle{display:flex;align-items:center;gap:10px;padding:0;color:var(--bv-ui-text);background:transparent;border:0}.bv-toggle-track{width:42px;height:23px;padding:3px;background:#35313f;border:1px solid var(--bv-ui-border);border-radius:999px}.bv-toggle-track>span{display:block;width:15px;height:15px;background:var(--bv-ui-muted);border-radius:50%;transition:translate .15s}.bv-toggle[aria-checked=true] .bv-toggle-track{background:rgba(var(--bv-ui-accent-rgb),.35);border-color:var(--bv-ui-accent)}.bv-toggle[aria-checked=true] .bv-toggle-track>span{translate:19px;background:var(--bv-ui-accent-soft)}.bv-checkbox-field{display:flex;align-items:flex-start;gap:9px;color:var(--bv-ui-text)}.bv-checkbox-field>input{position:absolute;opacity:0}.bv-checkbox-mark{display:grid;width:var(--bv-ui-check-size);height:var(--bv-ui-check-size);flex:none;border:1px solid var(--bv-ui-muted);border-radius:var(--bv-ui-radius-sm)}.bv-checkbox-field>input:checked+.bv-checkbox-mark{border-color:var(--bv-ui-accent)}.bv-checkbox-field>input:checked+.bv-checkbox-mark:after{content:"";width:8px;height:4px;margin:4px 3px;border-left:2px solid var(--bv-ui-accent);border-bottom:2px solid var(--bv-ui-accent);transform:rotate(-45deg)}.bv-checkbox-field small{display:block;color:var(--bv-ui-muted)}.bv-option-set{display:flex}.bv-option-set>button{min-height:var(--bv-ui-control-height);padding:0 12px;color:var(--bv-ui-muted);background:var(--bv-ui-input);border:1px solid var(--bv-ui-border)}.bv-option-set>button+button{border-left:0}.bv-option-set>button:first-child{border-radius:var(--bv-ui-radius) 0 0 var(--bv-ui-radius)}.bv-option-set>button:last-child{border-radius:0 var(--bv-ui-radius) var(--bv-ui-radius) 0}.bv-option-set>button[aria-checked=true]{z-index:1;color:var(--bv-ui-text);background:rgba(var(--bv-ui-accent-rgb),.2);border-color:var(--bv-ui-accent);box-shadow:inset 0 0 0 1px var(--bv-ui-accent)}.bv-tag-input,.bv-multi-select{padding:var(--bv-ui-field-gap);color:var(--bv-ui-text);background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-tag-values{display:flex;flex-wrap:wrap;gap:var(--bv-ui-field-gap)}.bv-tag{display:inline-flex;align-items:center;gap:4px;padding:var(--bv-ui-field-gap) var(--bv-ui-content-padding);background:rgba(var(--bv-ui-accent-rgb),.16);border:1px solid rgba(var(--bv-ui-accent-rgb),.28);border-radius:var(--bv-ui-radius)}.bv-tag>button{padding:0 2px;color:var(--bv-ui-muted);background:transparent;border:0}.bv-tag-input>input,.bv-multi-select>input{width:100%;min-height:var(--bv-ui-control-height);background:transparent;border:0;outline:0}.bv-tag-select{position:relative;min-width:0}.bv-tag-select-trigger{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:var(--bv-ui-field-gap);width:100%;min-height:var(--bv-ui-control-height);padding:3px var(--bv-ui-content-padding);color:var(--bv-ui-text);text-align:left;background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-tag-select-trigger:hover{border-color:var(--bv-ui-border-hover)}.bv-tag-select-trigger:focus-visible,.bv-tag-select-trigger[aria-expanded=true]{outline:0;border-color:var(--bv-ui-accent);box-shadow:0 0 0 3px #8d70ff2e}.bv-tag-select-trigger>.bv-tag-values{min-width:0;overflow:hidden;flex-wrap:nowrap}.bv-tag-select-trigger .bv-tag{max-width:180px;padding:2px 6px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bv-tag-select-trigger>.bv-chevron{justify-self:end}.bv-tag-select-menu>div>button{grid-template-columns:18px minmax(0,1fr)}.bv-tag-select-menu>div>button>span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bv-tag-select-check{display:grid;place-items:center;width:16px;height:16px;color:var(--bv-ui-accent-soft);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius-sm)}.bv-tag-select-menu button[aria-selected=true] .bv-tag-select-check{background:#8d70ff33;border-color:var(--bv-ui-accent)}.bv-tag-select-menu button:disabled{opacity:.7;cursor:not-allowed}.bv-color-field,.bv-keybinding{position:relative;display:flex;gap:7px}.bv-color-swatch{width:var(--bv-ui-control-height);flex:0 0 var(--bv-ui-control-height);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius)}.bv-color-field>input{flex:1;min-width:0;padding:0 10px;background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-anchored-popover{position:fixed;right:auto;bottom:auto;min-width:0;z-index:var(--bv-layer-flyout)}.bv-color-popover{padding:10px;background:var(--bv-ui-surface-raised);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius);box-shadow:0 14px 34px #0000006b}.bv-color-popover .react-colorful{width:min(240px,calc(100vw - 36px))}.bv-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:var(--bv-ui-field-gap);padding:var(--bv-ui-field-gap);background:var(--bv-ui-surface-raised);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-toolbar.vertical{width:max-content;flex-direction:column}.bv-toolbar-divider{align-self:stretch;border-left:1px solid var(--bv-ui-border)}.bv-toolbar.vertical .bv-toolbar-divider{border-left:0;border-top:1px solid var(--bv-ui-border)}.bv-toolbar .active{color:var(--bv-ui-accent-soft);background:rgba(var(--bv-ui-accent-rgb),.18)}.bv-toolbar .bv-button>svg{width:calc(18px * var(--bv-ui-scale));height:calc(18px * var(--bv-ui-scale));fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.bv-section,.bv-card{min-width:0;color:var(--bv-ui-text)}.bv-section.outlined,.bv-card{border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-section.raised{background:var(--bv-ui-surface-raised);border-radius:var(--bv-ui-radius)}.bv-section>header,.bv-card>header{display:flex;align-items:center;gap:var(--bv-ui-field-gap);padding:var(--bv-ui-content-padding)}.bv-section>header>div,.bv-card>header>div{flex:1;min-width:0}.bv-section h3,.bv-section p{margin:0}.bv-section p,.bv-card small{color:var(--bv-ui-muted)}.bv-section-body,.bv-card>div{padding:var(--bv-ui-content-padding)}.bv-card.interactive{display:block;width:100%;text-align:left;background:transparent}.bv-callout{display:flex;gap:var(--bv-ui-field-gap);padding:var(--bv-ui-content-padding);color:var(--bv-ui-text);background:#ffffff09;border:1px solid var(--bv-ui-border);border-left:3px solid var(--bv-ui-muted);border-radius:var(--bv-ui-radius-sm)}.bv-callout.info{border-left-color:#72a7ff}.bv-callout.success{border-left-color:var(--bv-ui-success)}.bv-callout.warning{border-left-color:var(--bv-ui-warning)}.bv-callout.danger{border-left-color:var(--bv-ui-danger)}.bv-callout>div{flex:1}.bv-badge{display:inline-flex;align-items:center;padding:3px 7px;color:var(--bv-ui-muted);background:#ffffff0f;border-radius:999px;font-size:.85em}.bv-badge.success{color:#83deb6}.bv-badge.warning{color:#f0c275}.bv-badge.danger{color:#f19aa8}.bv-dialog-layer{position:fixed;z-index:var(--bv-layer-modal);inset:0;display:grid;place-items:center;padding:16px}.bv-dialog-layer.modal{background:#08070a9e}.bv-dialog-layer.modeless{place-items:start end;pointer-events:none}.bv-dialog{display:grid;grid-template-rows:auto minmax(0,1fr) auto;width:min(680px,calc(100vw - 32px));max-height:86vh;overflow:hidden;color:var(--bv-ui-text);background:var(--bv-ui-surface);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius-lg);box-shadow:0 28px 90px #000c;pointer-events:auto}.bv-dialog.small{width:min(480px,calc(100vw - 32px))}.bv-dialog.large{width:min(1040px,calc(100vw - 32px))}.bv-dialog>header,.bv-dialog>footer{display:flex;align-items:flex-start;gap:var(--bv-ui-field-gap);padding:var(--bv-ui-content-padding);background:var(--bv-ui-surface-raised)}.bv-dialog>header>div{flex:1}.bv-dialog h2,.bv-dialog p{margin:0}.bv-dialog-body{min-height:0;overflow:auto;padding:var(--bv-ui-content-padding)}.bv-tree{color:var(--bv-ui-text)}.bv-tree-row{display:grid;grid-template-columns:22px auto minmax(0,1fr) auto auto;align-items:center;gap:var(--bv-ui-field-gap);min-height:var(--bv-ui-row-height);padding:var(--bv-ui-field-gap);border:1px solid transparent;border-radius:var(--bv-ui-radius)}.bv-tree [role=treeitem][aria-selected=true]>.bv-tree-row{background:rgba(var(--bv-ui-accent-rgb),.15);border-color:rgba(var(--bv-ui-accent-rgb),.42)}.bv-tree [role=group]{margin-left:17px;padding-left:8px;border-left:1px solid rgba(var(--bv-ui-accent-rgb),.25)}.bv-tree-expander{display:grid;place-items:center;padding:0;color:var(--bv-ui-muted);background:transparent;border:0}.bv-tree [aria-expanded=false]>.bv-tree-row .bv-chevron{transform:rotate(-45deg)}.bv-tree-label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bv-tree-meta{color:var(--bv-ui-muted);font-size:.85em}.bv-showcase{display:grid;grid-template-columns:240px minmax(0,1fr);min-height:100vh;color:var(--bv-ui-text);background:var(--bv-ui-bg)}.bv-showcase>aside{position:sticky;top:0;height:100vh;display:grid;align-content:start;gap:4px;padding:24px 16px;background:var(--bv-ui-surface);border-right:1px solid var(--bv-ui-border)}.bv-showcase>aside a{padding:8px 10px;color:var(--bv-ui-muted);text-decoration:none;border-radius:var(--bv-ui-radius)}.bv-showcase>aside a:hover{color:var(--bv-ui-text);background:#8d70ff1f}.bv-showcase>main{display:grid;gap:22px;width:min(1180px,100%);padding:32px}.bv-showcase>main>header{display:flex;align-items:end;justify-content:space-between;gap:18px}.bv-showcase>main>header>div{min-width:0}.bv-showcase>main>header>.bv-control-field{width:min(320px,100%)}.bv-showcase>main>header h1,.bv-showcase>main>header p{margin:0}.bv-demo-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,260px),1fr));gap:14px}.bv-showcase .bv-section-body{display:grid;gap:14px}.bv-window-contract-demo{container:bv-window-header / inline-size;display:grid;grid-template-rows:auto minmax(100px,1fr) auto;min-width:0;overflow:hidden;background:var(--bv-ui-surface);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius)}.bv-window-contract-demo>.bv-ui-window-header{position:relative}.bv-window-contract-body{display:grid;align-content:center;gap:4px;padding:var(--bv-ui-content-padding);color:var(--bv-ui-muted)}.bv-window-contract-body strong{color:var(--bv-ui-text)}.bv-demo-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.bv-panel-demo{overflow:hidden;background:var(--bv-ui-surface);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-panel-demo>div{padding:var(--bv-ui-content-padding);color:var(--bv-ui-muted)}@media (max-width:760px){.bv-showcase{grid-template-columns:1fr}.bv-showcase>aside{position:relative;display:flex;height:auto;padding:10px;overflow-x:auto}.bv-showcase>aside h2{margin:0 8px 0 0}.bv-showcase>aside a{white-space:nowrap}.bv-showcase>main{padding:12px}.bv-showcase>main>header{align-items:stretch;flex-direction:column}.bv-showcase>main>header>.bv-control-field{width:100%}.bv-toast-stack{right:12px;bottom:12px;left:12px}.bv-toast{width:100%}}.bv-density-compact .bv-toggle-track{width:36px;height:20px;padding:2px}.bv-density-compact .bv-toggle-track>span{width:14px;height:14px}.bv-density-compact .bv-toggle[aria-checked=true] .bv-toggle-track>span{translate:16px}.bv-density-compact .bv-badge{padding:2px 6px}.bv-density-compact .bv-tooltip{padding:4px 7px}.bv-density-compact .bv-menu,.bv-density-compact .bv-rich-select-menu,.bv-density-compact .bv-search-results,.bv-density-compact .bv-image-picker-menu,.bv-density-compact .bv-popover{padding:var(--bv-ui-field-gap)}.bv-card>header>div,.bv-rich-select-trigger>span,.bv-rich-select-menu button>span,.bv-search-results button>span,.bv-image-picker button>span{display:grid;gap:2px}.bv-card>header>div small,.bv-rich-select small,.bv-search-results small,.bv-image-picker small{color:var(--bv-ui-muted);font-size:.84em}.bv-rich-select-trigger,.bv-image-picker-trigger{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:var(--bv-ui-field-gap);width:100%;min-height:var(--bv-ui-control-height);padding:var(--bv-ui-field-gap) var(--bv-ui-content-padding);color:var(--bv-ui-text);text-align:left;background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-rich-select-trigger>.bv-chevron,.bv-image-picker-trigger>.bv-chevron{justify-self:end}.bv-image-picker-control{display:grid;grid-template-columns:minmax(0,1fr) auto auto;align-items:stretch;min-width:0;overflow:hidden;background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-image-picker-control:focus-within{border-color:var(--bv-ui-accent);box-shadow:0 0 0 3px #8d70ff2e}.bv-image-picker-control .bv-image-picker-trigger{min-width:0;padding:var(--bv-ui-field-gap) var(--bv-ui-content-padding);background:transparent;border:0;border-radius:0}.bv-image-preview-action,.bv-image-picker-toggle{align-self:stretch;width:28px!important;min-height:0;padding:0;color:var(--bv-ui-muted);background:transparent;border:0;border-left:1px solid transparent;border-radius:0}.bv-image-preview-action:hover:not(:disabled),.bv-image-picker-toggle:hover:not(:disabled){color:var(--bv-ui-text);background:#8d70ff21;border-left-color:var(--bv-ui-border)}.bv-image-preview-action svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}.bv-image-picker-toggle .bv-chevron{width:7px;height:7px}.bv-search-field .bv-input-shell>span:first-child{display:grid;place-items:center;width:34px;color:var(--bv-ui-muted)}.bv-search-results{left:0;right:auto;width:100%}.bv-keybinding{align-items:stretch}.bv-keybinding>button{min-height:var(--bv-ui-control-height);padding:0 10px;color:var(--bv-ui-text);background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-keybinding>button:first-child{flex:1;text-align:left}.bv-compound-field{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,calc(132px * var(--bv-ui-scale))),1fr));align-self:start;gap:var(--bv-ui-field-gap);min-width:0;margin:0;padding:0;border:0}.bv-compound-field>legend{grid-column:1/-1;margin:0 0 1px;padding:0;color:var(--bv-ui-muted);font-size:calc(11px * var(--bv-ui-scale))}.bv-json-editor{overflow:hidden;color:var(--bv-ui-text);background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-json-toolbar{display:flex;justify-content:flex-end;padding:var(--bv-ui-field-gap);background:var(--bv-ui-surface-raised);border-bottom:1px solid var(--bv-ui-border)}.bv-json-toolbar>button{min-height:28px;padding:0 9px;color:var(--bv-ui-text);background:transparent;border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-json-editor textarea,.bv-json-editor pre{outline:0!important;font:calc(11px * var(--bv-ui-scale))/1.45 var(--bv-ui-font-mono)!important}.bv-progress{display:grid;gap:var(--bv-ui-field-gap)}.bv-progress>div:first-child{display:flex;justify-content:space-between}.bv-progress [role=progressbar]{height:7px;overflow:hidden;background:var(--bv-ui-input);border-radius:999px}.bv-progress [role=progressbar]>span{display:block;height:100%;background:linear-gradient(90deg,var(--bv-ui-accent),var(--bv-ui-accent-light));border-radius:inherit}.bv-empty-state{display:grid;justify-items:center;gap:var(--bv-ui-field-gap);padding:calc(var(--bv-ui-content-padding) * 2);color:var(--bv-ui-muted);text-align:center;border:1px dashed var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-empty-state strong{color:var(--bv-ui-text)}.bv-empty-state p{margin:0}.bv-toast-stack{position:fixed;z-index:1000;right:18px;bottom:18px;display:grid;justify-items:end;gap:8px;max-width:calc(100vw - 24px)}.bv-toast{display:flex;align-items:flex-start;gap:10px;width:min(360px,calc(100vw - 24px));max-width:calc(100vw - 24px);min-width:0;padding:10px 10px 10px 12px;color:var(--bv-ui-text);background:var(--bv-ui-surface-raised);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius);box-shadow:0 12px 30px #0008}.bv-toast>div{flex:1 1 auto;min-width:0}.bv-toast strong{display:block;line-height:1.3}.bv-toast p{margin:4px 0 0;color:var(--bv-ui-muted);line-height:1.4;overflow-wrap:anywhere}.bv-toast>.bv-button{flex:0 0 auto;width:26px;min-width:26px;height:26px;padding:0;margin-top:-3px}.bv-breadcrumbs{display:flex;align-items:center;gap:var(--bv-ui-field-gap);color:var(--bv-ui-muted)}.bv-breadcrumbs button{padding:0;color:var(--bv-ui-accent-soft);background:transparent;border:0}.bv-tabs{container:bv-tabs / inline-size;min-width:0}.bv-tabs>div[role=tablist]{display:flex;align-items:end;min-height:var(--bv-ui-row-height);padding:var(--bv-ui-field-gap) var(--bv-ui-content-padding) 0;background:var(--bv-ui-surface-raised);border-bottom:1px solid var(--bv-ui-border)}.bv-tabs>div[role=tablist]>button{position:relative;min-height:var(--bv-ui-control-height);padding:0 var(--bv-ui-content-padding);color:var(--bv-ui-muted);background:transparent;border:0}.bv-tabs>div[role=tablist]>button[aria-selected=true]{color:var(--bv-ui-text)}.bv-tabs>div[role=tablist]>button[aria-selected=true]:after{content:"";position:absolute;right:0;bottom:0;left:0;height:2px;background:var(--bv-ui-accent)}.bv-tabs>[role=tabpanel]{padding:var(--bv-ui-content-padding)}.bv-tabs.vertical{display:grid;grid-template-columns:auto 1fr}.bv-tabs.vertical>div[role=tablist]{display:flex;flex-direction:column;align-items:stretch;padding:6px 0 6px 6px;border-right:1px solid var(--bv-ui-border);border-bottom:0}.bv-accordion{overflow:hidden;border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-accordion>section+section{border-top:1px solid var(--bv-ui-border)}.bv-accordion>section>button{display:flex;justify-content:space-between;align-items:center;width:100%;min-height:var(--bv-ui-row-height);padding:0 var(--bv-ui-content-padding);color:var(--bv-ui-text);text-align:left;background:var(--bv-ui-surface-raised);border:0}.bv-accordion>section>button .bv-chevron{flex:none;align-self:center;transform-origin:center}.bv-accordion>section>button[aria-expanded=true] .bv-chevron{transform:rotate(225deg)}.bv-accordion>section>div{padding:var(--bv-ui-content-padding)}.bv-pagination{display:flex;align-items:center;gap:3px}.bv-pagination button{min-width:var(--bv-ui-control-height);min-height:var(--bv-ui-control-height);padding:0 8px;color:var(--bv-ui-muted);background:transparent;border:1px solid transparent;border-radius:var(--bv-ui-radius)}.bv-pagination button[aria-current=page]{color:var(--bv-ui-text);background:var(--bv-ui-accent)}.bv-pagination button:hover{border-color:var(--bv-ui-border)}.bv-steps{display:flex;min-width:0;overflow-x:auto;counter-reset:steps;margin:0;padding:0;list-style:none}.bv-steps li{position:relative;display:grid;justify-items:center;gap:5px;flex:1;color:var(--bv-ui-muted)}.bv-steps li:not(:last-child):after{content:"";position:absolute;top:14px;left:calc(50% + 18px);width:calc(100% - 36px);border-top:1px solid var(--bv-ui-border)}.bv-steps li>span{z-index:1;display:grid;place-items:center;width:28px;height:28px;background:var(--bv-ui-surface-raised);border:1px solid var(--bv-ui-border);border-radius:50%}.bv-steps li.current,.bv-steps li.complete{color:var(--bv-ui-text)}.bv-steps li.current>span,.bv-steps li.complete>span{border-color:var(--bv-ui-accent)}.bv-tooltip-host{position:relative;display:inline-flex}.bv-tooltip-host>.bv-tooltip{position:absolute;z-index:110;bottom:calc(100% + 7px);left:50%;width:max-content;max-width:260px;padding:var(--bv-ui-field-gap) var(--bv-ui-content-padding);color:var(--bv-ui-text);background:#0d0c12;border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius-sm);box-shadow:0 8px 20px #0009;translate:-50%;opacity:0;pointer-events:none}.bv-tooltip-host:hover>.bv-tooltip,.bv-tooltip-host:focus-within>.bv-tooltip{opacity:1}.bv-divider{display:flex;align-items:center;gap:9px;color:var(--bv-ui-muted)}.bv-divider:before,.bv-divider:after{content:"";flex:1;border-top:1px solid var(--bv-ui-border)}.bv-divider.vertical{flex-direction:column;align-self:stretch}.bv-divider.vertical:before,.bv-divider.vertical:after{border-top:0;border-left:1px solid var(--bv-ui-border)}.bv-code-block{overflow:hidden;background:#100f16;border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-code-block>header{display:flex;justify-content:space-between;align-items:center;min-height:var(--bv-ui-row-height);padding:0 var(--bv-ui-content-padding);color:var(--bv-ui-muted);background:var(--bv-ui-surface-raised);border-bottom:1px solid var(--bv-ui-border)}.bv-code-block pre{margin:0;padding:var(--bv-ui-content-padding);overflow:auto;font:calc(11px * var(--bv-ui-scale))/1.55 var(--bv-ui-font-mono)}.bv-code-line{display:block;min-height:1.55em}.bv-code-block.line-numbers pre{counter-reset:line}.bv-code-block.line-numbers .bv-code-line:before{counter-increment:line;content:counter(line);display:inline-block;width:2.5em;margin-right:1em;color:#6f6a7b;text-align:right}.bv-definition-list{container:bv-definition-list / inline-size;display:grid;gap:7px;margin:0}.bv-definition-row{display:grid;grid-template-columns:max-content minmax(0,1fr);gap:18px}.bv-definition-list dt{color:var(--bv-ui-muted)}.bv-definition-list dd{margin:0}.bv-table-scroll{overflow:auto;border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-table-scroll table{width:100%;border-collapse:collapse}.bv-table-scroll th,.bv-table-scroll td{padding:var(--bv-ui-content-padding);text-align:left;border-bottom:1px solid var(--bv-ui-border)}.bv-table-scroll th{color:var(--bv-ui-muted);background:var(--bv-ui-surface-raised)}.bv-table-scroll tbody tr:last-child td{border-bottom:0}.bv-table-scroll .numeric{text-align:right}.bv-sortable-list{display:grid;gap:7px}.bv-sortable-list>article{container:bv-sortable-item / inline-size;overflow:hidden;background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-sortable-list article>header{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:5px;min-height:var(--bv-ui-row-height);padding:var(--bv-ui-field-gap)}.bv-sortable-list>article>header>div{display:grid}.bv-sortable-list>article>header small{color:var(--bv-ui-muted)}.bv-drag-handle{width:30px;height:30px;color:var(--bv-ui-muted);background:transparent;border:0;cursor:grab}.bv-segmented-actions{display:inline-flex;align-items:stretch;overflow:hidden;border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-segmented-actions>.bv-button{width:30px;min-width:30px;border:0;border-radius:0}.bv-segmented-actions>.bv-button+.bv-button{border-left:1px solid var(--bv-ui-border)}.bv-segmented-actions .bv-chevron{transition:transform .15s}.bv-segmented-actions .bv-button[aria-expanded=true] .bv-chevron{transform:rotate(225deg)}.bv-sortable-summary,.bv-sortable-content{padding:var(--bv-ui-content-padding);border-top:1px solid var(--bv-ui-border)}.bv-sortable-content{background:#ffffff05}.bv-image-picker-trigger img,.bv-image-picker-menu img{width:42px;height:32px;object-fit:cover;border-radius:var(--bv-ui-radius-sm)}.bv-image-picker-menu{left:0;right:auto;width:100%}.bv-image-preview{position:fixed;z-index:var(--bv-layer-modal);inset:0;display:grid;place-items:center;padding:24px;background:radial-gradient(circle at 50% 42%,#221e2db3,#07060af0 70%);backdrop-filter:blur(3px)}.bv-image-preview-dialog{display:grid;grid-template-rows:auto minmax(0,1fr) auto;width:min(94vw,1600px);max-height:calc(100vh - 48px);overflow:hidden;color:var(--bv-ui-text);background:var(--bv-ui-surface);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius-lg);box-shadow:0 28px 90px #000d}.bv-image-preview-dialog>header{display:flex;align-items:center;gap:var(--bv-ui-content-padding);min-height:var(--bv-ui-row-height);padding:var(--bv-ui-field-gap) var(--bv-ui-content-padding);background:var(--bv-ui-surface-raised);border-bottom:1px solid var(--bv-ui-border)}.bv-image-preview-dialog>header>div{flex:1;min-width:0}.bv-image-preview-dialog h2{margin:0;overflow:hidden;font-size:calc(13px * var(--bv-ui-scale));text-overflow:ellipsis;white-space:nowrap}.bv-image-preview-dialog header small{color:var(--bv-ui-muted)}.bv-image-preview-icon{display:grid;place-items:center;width:26px;height:26px;color:#c7baff;background:#8d70ff21;border:1px solid rgba(141,112,255,.25);border-radius:var(--bv-ui-radius)}.bv-image-preview-icon svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}.bv-image-preview-stage{display:grid;place-items:center;min-height:220px;max-height:calc(100vh - 140px);padding:18px;overflow:auto;background-color:#0d0c11;background-image:linear-gradient(45deg,rgba(255,255,255,.025) 25%,transparent 25%),linear-gradient(-45deg,rgba(255,255,255,.025) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,rgba(255,255,255,.025) 75%),linear-gradient(-45deg,transparent 75%,rgba(255,255,255,.025) 75%);background-position:0 0,0 8px,8px -8px,-8px 0;background-size:16px 16px}.bv-image-preview-stage>img{display:block;max-width:100%;max-height:calc(100vh - 176px);object-fit:contain;border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius);box-shadow:0 18px 50px #000a;transform-origin:center;user-select:none;will-change:transform}.bv-image-preview-stage.is-pannable{cursor:grab}.bv-image-preview-stage.is-dragging{cursor:grabbing}.bv-image-preview-stage:not(.is-dragging)>img{transition:transform .12s ease-out}.bv-image-preview-stage>span{color:var(--bv-ui-muted)}.bv-image-preview-dialog>footer{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:var(--bv-ui-content-padding);min-height:var(--bv-ui-row-height);padding:var(--bv-ui-field-gap) var(--bv-ui-content-padding);color:var(--bv-ui-muted);background:var(--bv-ui-surface-raised);border-top:1px solid var(--bv-ui-border);font-size:calc(10px * var(--bv-ui-scale))}.bv-image-preview-help{overflow:hidden;text-align:center;text-overflow:ellipsis;white-space:nowrap}.bv-image-preview-controls{display:flex;align-items:center;gap:2px}.bv-image-preview-controls .bv-button{min-height:24px}.bv-image-preview-controls .icon-only{width:24px}.bv-image-preview-controls output{width:48px;color:var(--bv-ui-text);text-align:center;font-variant-numeric:tabular-nums}@media (max-width:720px){.bv-image-preview-help{display:none}.bv-image-preview-dialog>footer{grid-template-columns:1fr auto}}.bv-command-palette{display:grid;gap:var(--bv-ui-field-gap)}.bv-command-input>span{display:grid;place-items:center;width:var(--bv-ui-control-height);color:var(--bv-ui-muted)}.bv-command-results{display:grid;gap:2px;max-height:min(420px,60vh);overflow:auto}.bv-command-option{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:var(--bv-ui-content-padding);width:100%;min-height:var(--bv-ui-row-height);padding:var(--bv-ui-field-gap) var(--bv-ui-content-padding);color:var(--bv-ui-text);text-align:left;background:transparent;border:1px solid transparent;border-radius:var(--bv-ui-radius)}.bv-command-option>span{display:grid;min-width:0}.bv-command-option small,.bv-command-option kbd{color:var(--bv-ui-muted)}.bv-command-option:hover,.bv-command-option[aria-selected=true]{background:rgba(var(--bv-ui-accent-rgb),.14);border-color:rgba(var(--bv-ui-accent-rgb),.25)}.bv-command-empty{margin:0;padding:calc(var(--bv-ui-content-padding) * 2);color:var(--bv-ui-muted);text-align:center}.bv-adaptive-field{container:bv-adaptive-field / inline-size;min-width:0}.bv-adaptive-inline{min-width:0}.bv-adaptive-trigger{display:none;width:100%;min-width:0;grid-template-columns:auto minmax(0,1fr) auto;text-align:left}.bv-adaptive-summary{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bv-adaptive-popover{width:min(calc(420px * var(--bv-ui-scale)),calc(100vw - 16px));padding:0;overflow:hidden;background:var(--bv-ui-surface-raised);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius);box-shadow:0 18px 48px #000c}.bv-adaptive-popover>header{display:flex;align-items:center;gap:var(--bv-ui-field-gap);min-height:var(--bv-ui-row-height);padding:var(--bv-ui-field-gap) var(--bv-ui-content-padding);border-bottom:1px solid var(--bv-ui-border)}.bv-adaptive-popover>header>strong{flex:1}.bv-adaptive-popover>div{display:grid;gap:var(--bv-ui-field-gap);padding:var(--bv-ui-content-padding)}.bv-number-popup{display:grid;gap:var(--bv-ui-field-gap)}.bv-number-popup .bv-number-ticks,.bv-number-popup .bv-number-slider{width:100%}.bv-number-popup .bv-number-box{width:min(calc(292px * var(--bv-ui-scale)),100%);justify-self:center}.bv-color-dot{width:14px;height:14px;border:1px solid var(--bv-ui-border-hover);border-radius:50%}.bv-color-expanded{display:grid;gap:var(--bv-ui-content-padding)}.bv-color-expanded>input{width:100%;min-height:var(--bv-ui-control-height);padding:0 var(--bv-ui-content-padding);color:var(--bv-ui-text);background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-color-expanded .react-colorful{width:100%}@container bv-adaptive-field (max-width:220px){.bv-adaptive-inline{display:none}.bv-adaptive-trigger{display:grid}}.bv-select-menu>div,.bv-rich-select-menu>div,.bv-search-results>div,.bv-image-picker-menu>div{display:grid;gap:2px}.bv-select-menu>div>button,.bv-rich-select-menu>div>button,.bv-search-results>div>button,.bv-image-picker-menu>div>button{display:flex;align-items:center;gap:var(--bv-ui-field-gap);width:100%;min-height:var(--bv-ui-control-height);padding:var(--bv-ui-field-gap) var(--bv-ui-content-padding);color:var(--bv-ui-text);text-align:left;background:transparent;border:1px solid transparent;border-radius:var(--bv-ui-radius)}.bv-select-menu>div>button:hover:not(:disabled),.bv-rich-select-menu>div>button:hover:not(:disabled),.bv-search-results>div>button:hover:not(:disabled),.bv-image-picker-menu>div>button:hover:not(:disabled),.bv-select-menu>div>button[aria-selected=true],.bv-rich-select-menu>div>button[aria-selected=true],.bv-image-picker-menu>div>button[aria-selected=true]{background:rgba(var(--bv-ui-accent-rgb),.14);border-color:rgba(var(--bv-ui-accent-rgb),.24)}.bv-select-menu.bv-tag-select-menu>div>button{display:grid;grid-template-columns:18px minmax(0,1fr)}@container bv-tabs (max-width:280px){.bv-tabs:not(.vertical)>div[role=tablist]{align-items:stretch;overflow-x:auto}.bv-tabs:not(.vertical)>div[role=tablist]>button{flex:0 0 auto}.bv-tabs>[role=tabpanel]{min-width:0}}.bv-steps>li{min-width:88px}@container bv-definition-list (max-width:280px){.bv-definition-row{grid-template-columns:1fr;gap:2px}.bv-definition-row+.bv-definition-row{padding-top:var(--bv-ui-field-gap);border-top:1px solid var(--bv-ui-border)}}@container bv-sortable-item (max-width:280px){.bv-sortable-list>article>header{grid-template-columns:auto minmax(0,1fr) repeat(2,auto)}.bv-sortable-list>article>header>.bv-button{grid-row:2}.bv-sortable-list>article>header>div{grid-column:2/-1}}.bv-responsive-lab{display:grid;gap:18px}.bv-resizable-demo{width:min(100%,420px);min-width:150px;max-width:100%;resize:horizontal;overflow:auto;background:#12111680;border:1px dashed var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius)}.bv-resizable-demo>header{display:flex;justify-content:space-between;gap:10px;padding:var(--bv-ui-field-gap) var(--bv-ui-content-padding);color:var(--bv-ui-muted);background:var(--bv-ui-surface-raised);border-bottom:1px solid var(--bv-ui-border)}.bv-resizable-demo>header strong{color:var(--bv-ui-text)}.bv-responsive-state:before{content:"Wide";color:var(--bv-ui-success)}@container (max-width:380px){.bv-responsive-state:before{content:"Medium";color:var(--bv-ui-warning)}}@container (max-width:220px){.bv-responsive-state:before{content:"Minimal";color:var(--bv-ui-accent-soft)}}.bv-resizable-demo>div{display:grid;gap:var(--bv-ui-content-padding);min-width:0;padding:var(--bv-ui-content-padding)}.bv-global-toast-stack{z-index:var(--bv-layer-toast);bottom:var(--bv-toast-bottom,18px)}.bv-window-header-utility{position:relative;display:inline-flex}.bv-window-visibility-menu-action{min-width:190px;padding:7px 9px;color:var(--bv-ui-text);background:transparent;border:0;text-align:left;cursor:pointer}.bv-window-visibility-menu-action:hover{background:var(--bv-ui-surface-hover)}.bv-toolbar-launcher-secondary{width:26px;height:26px;padding:0;color:var(--bv-ui-muted);background:transparent;border:0;border-radius:var(--bv-ui-radius-xs);cursor:pointer}.bv-toolbar-launcher-secondary:hover{color:var(--bv-ui-text);background:var(--bv-ui-surface-hover)}.bv-regional-action-control:before{mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='black' d='M4 6h10v2H4V6Zm14-2h2v6h-2V4ZM4 16h4v2H4v-2Zm8-2h2v6h-2v-6Zm6 2h2v2h-2v-2ZM4 11h2v2H4v-2Zm6-2h2v6h-2V9Zm6 2h4v2h-4v-2Z'/%3E%3C/svg%3E");-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='black' d='M4 6h10v2H4V6Zm14-2h2v6h-2V4ZM4 16h4v2H4v-2Zm8-2h2v6h-2v-6Zm6 2h2v2h-2v-2ZM4 11h2v2H4v-2Zm6-2h2v6h-2V9Zm6 2h4v2h-4v-2Z'/%3E%3C/svg%3E")}.bv-toolbar-no-control .bv-regional-action-control,.bv-toolbar-no-editor .bv-regional-action-editor,.bv-toolbar-no-quick .bv-regional-action-quick,.bv-toolbar-no-overview .bv-regional-action-menu{display:none!important}.bv-tag-select-trigger:focus-visible,.bv-tag-select-trigger[aria-expanded=true],.bv-image-picker-control:focus-within{box-shadow:0 0 0 3px rgba(var(--bv-ui-accent-rgb),.18)}.bv-tag-select-menu button[aria-selected=true] .bv-tag-select-check{background:rgba(var(--bv-ui-accent-rgb),.2)}.bv-showcase>aside a:hover{background:rgba(var(--bv-ui-accent-rgb),.12)}.bv-image-preview-action:hover:not(:disabled),.bv-image-picker-toggle:hover:not(:disabled){background:rgba(var(--bv-ui-accent-rgb),.13)}.bv-image-preview-icon{color:var(--bv-ui-accent-soft);background:rgba(var(--bv-ui-accent-rgb),.13);border-color:rgba(var(--bv-ui-accent-rgb),.25)}.bv-m0-picker-host{position:relative;z-index:1;padding:6px}.bv-m0-picker-panel{display:grid;gap:7px}.bv-m0-picker-panel>.bv-control-field{grid-template-columns:1fr auto;align-items:center}.bv-m0-picker-panel>.bv-control-field>.bv-toggle{justify-self:end}.bv-resource-picker{display:grid;gap:5px}.bv-resource-picker-summary{padding:5px 7px;border:1px solid var(--bv-ui-border);border-radius:4px}.bv-resource-picker.is-unresolved .bv-resource-picker-summary{color:var(--bv-ui-danger);border-color:var(--bv-ui-danger)}.bv-resource-picker .bv-field-grid{align-items:end}.bv-resource-picker .bv-select-trigger{width:100%}.lg-node:has([node-type="BV M0 Fake Resource Collector"]) [node-type="BV M0 Fake Resource Collector"]:has(input[aria-label=collector_id]),.lg-node:has([node-type="BV M0 Fake Resource Collector"]) [node-type="BV M0 Fake Resource Collector"]:has(input[aria-label=resource_a_id]),.lg-node:has([node-type="BV M0 Fake Resource Collector"]) [node-type="BV M0 Fake Resource Collector"]:has(input[aria-label=resource_b_id]),.lg-node:has([node-type="BV M0 Fake Resource Consumer"]) [node-type="BV M0 Fake Resource Consumer"]:has(input[aria-label=collector_id]),.lg-node:has([node-type="BV M0 Fake Resource Consumer"]) [node-type="BV M0 Fake Resource Consumer"]:has(input[aria-label=resource_id]){display:none}.lg-slot:has(circle[fill*=BV_RUNTIME_RESOURCE_PROVIDER_M0],[style*=BV_RUNTIME_RESOURCE_PROVIDER_M0]){display:none!important}.lg-slot:has(circle[fill*=BV_RUNTIME_RESOURCE_PROVIDER],[style*=BV_RUNTIME_RESOURCE_PROVIDER]){display:none!important}.bv-lora-v3-picker-host{position:relative;z-index:1;padding:6px}.bv-lora-v3-picker-panel{display:grid;gap:8px}.bv-lora-v3-picker-panel>section{display:grid;gap:7px;padding:8px;border:1px solid var(--bv-ui-border);border-radius:4px}.bv-optional-lora-scope{display:grid;gap:7px}.bv-lora-v3-scope-picker{display:grid;gap:5px}.bv-lora-v3-window{display:grid;gap:10px;padding:10px;overflow:auto}.lg-node:has([node-type="BV M0 Fake Multi Resource Consumer"]) [node-type="BV M0 Fake Multi Resource Consumer"]:has(input[aria-label=resource_bindings]){display:none}.bv-m0-multi-picker{max-height:520px;overflow:auto}.bv-m0-binding{display:grid;gap:5px;padding:6px;border:1px solid var(--bv-ui-border);border-radius:4px}.bv-m0-binding>header{display:flex;align-items:center;justify-content:space-between}.bv-m0-binding>header button,.bv-m0-add-binding{color:var(--bv-ui-text);background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:4px}.bv-m0-binding>header button{width:24px;height:24px}.bv-m0-add-binding{min-height:28px}`,V1='.flexlayout__theme_light .flexlayout__layout{--color-text: var(--flexlayout-color-text, black);--color-background: var(--flexlayout-color-background, white);--color-base: var(--flexlayout-color-base, white);--color-1: var(--flexlayout-color-1, rgb(97%, 97%, 97%));--color-2: var(--flexlayout-color-2, rgb(94%, 94%, 94%));--color-3: var(--flexlayout-color-3, rgb(91%, 91%, 91%));--color-4: var(--flexlayout-color-4, rgb(88%, 88%, 88%));--color-5: var(--flexlayout-color-5, rgb(85%, 85%, 85%));--color-6: var(--flexlayout-color-6, rgb(82%, 82%, 82%));--color-drag1: var(--flexlayout-color-drag1, rgb(95, 134, 196));--color-drag2: var(--flexlayout-color-drag2, rgb(119, 166, 119));--color-drag1-background: var(--flexlayout-color-drag1-background, rgba(95, 134, 196, .1));--color-drag2-background: var(--flexlayout-color-drag2-background, rgba(119, 166, 119, .075));--font-size: var(--flexlayout-font-size, medium);--font-family: var(--flexlayout-font-family, Roboto, Arial, sans-serif);--font-weight: var(--flexlayout-font-weight, normal);--splitter-size: var(--flexlayout-splitter-size, 8px);--splitter-active-size: var(--flexlayout-splitter-active-size, 8px);--splitter-handle-visibility: var(--flexlayout-splitter-handle-visibility, hidden);--color-overflow: var(--flexlayout-color-overflow, gray);--color-icon: var(--flexlayout-color-icon, gray);--color-focus: var(--flexlayout-color-focus, #3b7de7);--color-tabset-background: var(--flexlayout-color-tabset-background, var(--color-background));--color-tabset-background-selected: var(--flexlayout-color-tabset-background-selected, var(--color-1));--color-tabset-background-maximized: var(--flexlayout-color-tabset-background-maximized, var(--color-2));--color-tabset-divider-line: var(--flexlayout-color-tabset-divider-line, var(--color-4));--color-border-tab-content: var(--flexlayout-color-border-tab-content, var(--color-background));--color-border-background: var(--flexlayout-color-border-background, var(--color-background));--color-border-divider-line: var(--flexlayout-color-border-divider-line, var(--color-4));--color-tab-content: var(--flexlayout-color-tab-content, var(--color-background));--color-tab-selected: var(--flexlayout-color-tab-selected, var(--color-text));--color-tab-selected-background: var(--flexlayout-color-tab-selected-background, var(--color-4));--color-tab-unselected: var(--flexlayout-color-tab-unselected, gray);--color-tab-unselected-background: var(--flexlayout-color-tab-unselected-background, transparent);--color-tab-textbox: var(--flexlayout-color-tab-textbox, var(--color-text));--color-tab-textbox-background: var(--flexlayout-color-tab-textbox-background, var(--color-3));--color-border-tab-selected: var(--flexlayout-color-border-tab-selected, var(--color-text));--color-border-tab-selected-background: var(--flexlayout-color-border-tab-selected-background, var(--color-4));--color-border-tab-unselected: var(--flexlayout-color-border-tab-unselected, gray);--color-border-tab-unselected-background: var(--flexlayout-color-border-tab-unselected-background, var(--color-2));--color-splitter: var(--flexlayout-color-splitter, var(--color-1));--color-splitter-hover: var(--flexlayout-color-splitter-hover, var(--color-4));--color-splitter-drag: var(--flexlayout-color-splitter-drag, var(--color-4));--color-splitter-handle: var(--flexlayout-color-splitter-handle, var(--color-3));--color-drag-rect-border: var(--flexlayout-color-drag-rect-border, #ccc);--color-drag-rect-background: var(--flexlayout-color-drag-rect-background, var(--color-5));--color-drag-rect: var(--flexlayout-color-drag-rect, var(--color-text));--color-popup-border: var(--flexlayout-color-popup-border, var(--color-6));--color-popup-unselected: var(--flexlayout-color-popup-unselected, var(--color-text));--color-popup-unselected-background: var(--flexlayout-color-popup-unselected-background, var(--color-background));--color-popup-selected: var(--flexlayout-color-popup-selected, var(--color-text));--color-popup-selected-background: var(--flexlayout-color-popup-selected-background, var(--color-3));--color-edge-marker: var(--flexlayout-color-edge-marker, #aaa);--color-edge-icon: var(--flexlayout-color-edge-icon, #555);--color-mini-scroll-indicator: var(--flexlayout-color-mini-scroll-indicator, rgba(128, 128, 128, .5));--color-mini-scroll-indicator-hovered: var(--flexlayout-color-mini-scroll-indicator-hovered, rgba(128, 128, 128, .7));--size-mini-scroll-indicator: var(--flexlayout-size-mini-scroll-indicator, 3px);--color-toolbar-button-hover: var(--flexlayout-color-toolbar-button-hover, var(--color-3));--color-float-window-header-background: var(--flexlayout-color-float-window-header-background, var(--color-tabset-background))}.flexlayout__theme_dark .flexlayout__layout{--color-text: var(--flexlayout-color-text, #eeeeee);--color-background: var(--flexlayout-color-background, black);--color-base: var(--flexlayout-color-base, black);--color-1: var(--flexlayout-color-1, rgb(7%, 7%, 7%));--color-2: var(--flexlayout-color-2, rgb(10%, 10%, 10%));--color-3: var(--flexlayout-color-3, rgb(15%, 15%, 15%));--color-4: var(--flexlayout-color-4, #333333);--color-5: var(--flexlayout-color-5, rgb(25%, 25%, 25%));--color-6: var(--flexlayout-color-6, rgb(30%, 30%, 30%));--color-drag1: var(--flexlayout-color-drag1, rgb(207, 232, 255));--color-drag2: var(--flexlayout-color-drag2, rgb(183, 209, 181));--color-drag1-background: var(--flexlayout-color-drag1-background, rgba(128, 128, 128, .15));--color-drag2-background: var(--flexlayout-color-drag2-background, rgba(128, 128, 128, .15));--font-size: var(--flexlayout-font-size, medium);--font-family: var(--flexlayout-font-family, Roboto, Arial, sans-serif);--font-weight: var(--flexlayout-font-weight, normal);--splitter-size: var(--flexlayout-splitter-size, 8px);--splitter-active-size: var(--flexlayout-splitter-active-size, 8px);--splitter-handle-visibility: var(--flexlayout-splitter-handle-visibility, hidden);--color-overflow: var(--flexlayout-color-overflow, gray);--color-icon: var(--flexlayout-color-icon, gray);--color-focus: var(--flexlayout-color-focus, #93c5fd);--color-tabset-background: var(--flexlayout-color-tabset-background, var(--color-1));--color-tabset-background-selected: var(--flexlayout-color-tabset-background-selected, var(--color-1));--color-tabset-background-maximized: var(--flexlayout-color-tabset-background-maximized, var(--color-6));--color-tabset-divider-line: var(--flexlayout-color-tabset-divider-line, var(--color-4));--color-border-tab-content: var(--flexlayout-color-border-tab-content, var(--color-background));--color-border-background: var(--flexlayout-color-border-background, var(--color-1));--color-border-divider-line: var(--flexlayout-color-border-divider-line, var(--color-4));--color-tab-content: var(--flexlayout-color-tab-content, var(--color-background));--color-tab-selected: var(--flexlayout-color-tab-selected, var(--color-text));--color-tab-selected-background: var(--flexlayout-color-tab-selected-background, var(--color-4));--color-tab-unselected: var(--flexlayout-color-tab-unselected, gray);--color-tab-unselected-background: var(--flexlayout-color-tab-unselected-background, transparent);--color-tab-textbox: var(--flexlayout-color-tab-textbox, var(--color-text));--color-tab-textbox-background: var(--flexlayout-color-tab-textbox-background, var(--color-3));--color-border-tab-selected: var(--flexlayout-color-border-tab-selected, var(--color-text));--color-border-tab-selected-background: var(--flexlayout-color-border-tab-selected-background, var(--color-4));--color-border-tab-unselected: var(--flexlayout-color-border-tab-unselected, gray);--color-border-tab-unselected-background: var(--flexlayout-color-border-tab-unselected-background, var(--color-2));--color-splitter: var(--flexlayout-color-splitter, var(--color-2));--color-splitter-hover: var(--flexlayout-color-splitter-hover, var(--color-4));--color-splitter-drag: var(--flexlayout-color-splitter-drag, var(--color-5));--color-splitter-handle: var(--flexlayout-color-splitter-handle, var(--color-3));--color-drag-rect-border: var(--flexlayout-color-drag-rect-border, var(--color-4));--color-drag-rect-background: var(--flexlayout-color-drag-rect-background, var(--color-1));--color-drag-rect: var(--flexlayout-color-drag-rect, var(--color-text));--color-popup-border: var(--flexlayout-color-popup-border, var(--color-6));--color-popup-unselected: var(--flexlayout-color-popup-unselected, var(--color-text));--color-popup-unselected-background: var(--flexlayout-color-popup-unselected-background, var(--color-background));--color-popup-selected: var(--flexlayout-color-popup-selected, var(--color-text));--color-popup-selected-background: var(--flexlayout-color-popup-selected-background, var(--color-4));--color-edge-marker: var(--flexlayout-color-edge-marker, gray);--color-edge-icon: var(--flexlayout-color-edge-icon, #eee);--color-mini-scroll-indicator: var(--flexlayout-color-mini-scroll-indicator, rgba(128, 128, 128, .5));--color-mini-scroll-indicator-hovered: var(--flexlayout-color-mini-scroll-indicator-hovered, rgba(128, 128, 128, .8));--size-mini-scroll-indicator: var(--flexlayout-size-mini-scroll-indicator, 3px);--color-toolbar-button-hover: var(--flexlayout-color-toolbar-button-hover, var(--color-4));--color-float-window-header-background: var(--flexlayout-color-float-window-header-background, var(--color-tabset-background))}.flexlayout__theme_gray .flexlayout__layout{--color-text: var(--flexlayout-color-text, black);--color-background: var(--flexlayout-color-background, white);--color-base: var(--flexlayout-color-base, white);--color-1: var(--flexlayout-color-1, rgb(97%, 97%, 97%));--color-2: var(--flexlayout-color-2, rgb(90%, 90%, 90%));--color-3: var(--flexlayout-color-3, rgb(85%, 85%, 85%));--color-4: var(--flexlayout-color-4, #cccccc);--color-5: var(--flexlayout-color-5, rgb(75%, 75%, 75%));--color-6: var(--flexlayout-color-6, rgb(70%, 70%, 70%));--color-drag1: var(--flexlayout-color-drag1, rgb(95, 134, 196));--color-drag2: var(--flexlayout-color-drag2, rgb(119, 166, 119));--color-drag1-background: var(--flexlayout-color-drag1-background, rgba(95, 134, 196, .1));--color-drag2-background: var(--flexlayout-color-drag2-background, rgba(119, 166, 119, .075));--font-size: var(--flexlayout-font-size, medium);--font-family: var(--flexlayout-font-family, Roboto, Arial, sans-serif);--font-weight: var(--flexlayout-font-weight, normal);--splitter-size: var(--flexlayout-splitter-size, 8px);--splitter-active-size: var(--flexlayout-splitter-active-size, 8px);--splitter-handle-visibility: var(--flexlayout-splitter-handle-visibility, hidden);--color-overflow: var(--flexlayout-color-overflow, gray);--color-icon: var(--flexlayout-color-icon, gray);--color-focus: var(--flexlayout-color-focus, #3b7de7);--color-tabset-background: var(--flexlayout-color-tabset-background, var(--color-1));--color-tabset-background-selected: var(--flexlayout-color-tabset-background-selected, var(--color-1));--color-tabset-background-maximized: var(--flexlayout-color-tabset-background-maximized, var(--color-6));--color-tabset-divider-line: var(--flexlayout-color-tabset-divider-line, var(--color-3));--color-border-tab-content: var(--flexlayout-color-border-tab-content, var(--color-background));--color-border-background: var(--flexlayout-color-border-background, var(--color-1));--color-border-divider-line: var(--flexlayout-color-border-divider-line, var(--color-3));--color-tab-content: var(--flexlayout-color-tab-content, var(--color-background));--color-tab-selected: var(--flexlayout-color-tab-selected, var(--color-text));--color-tab-selected-background: var(--flexlayout-color-tab-selected-background, var(--color-3));--color-tab-unselected: var(--flexlayout-color-tab-unselected, gray);--color-tab-unselected-background: var(--flexlayout-color-tab-unselected-background, transparent);--color-tab-textbox: var(--flexlayout-color-tab-textbox, var(--color-text));--color-tab-textbox-background: var(--flexlayout-color-tab-textbox-background, var(--color-3));--color-border-tab-selected: var(--flexlayout-color-border-tab-selected, var(--color-text));--color-border-tab-selected-background: var(--flexlayout-color-border-tab-selected-background, var(--color-3));--color-border-tab-unselected: var(--flexlayout-color-border-tab-unselected, gray);--color-border-tab-unselected-background: var(--flexlayout-color-border-tab-unselected-background, var(--color-2));--color-splitter: var(--flexlayout-color-splitter, var(--color-2));--color-splitter-hover: var(--flexlayout-color-splitter-hover, var(--color-4));--color-splitter-drag: var(--flexlayout-color-splitter-drag, var(--color-5));--color-splitter-handle: var(--flexlayout-color-splitter-handle, var(--color-3));--color-drag-rect-border: var(--flexlayout-color-drag-rect-border, var(--color-4));--color-drag-rect-background: var(--flexlayout-color-drag-rect-background, var(--color-3));--color-drag-rect: var(--flexlayout-color-drag-rect, var(--color-text));--color-popup-border: var(--flexlayout-color-popup-border, var(--color-6));--color-popup-unselected: var(--flexlayout-color-popup-unselected, var(--color-text));--color-popup-unselected-background: var(--flexlayout-color-popup-unselected-background, var(--color-background));--color-popup-selected: var(--flexlayout-color-popup-selected, var(--color-text));--color-popup-selected-background: var(--flexlayout-color-popup-selected-background, var(--color-3));--color-edge-marker: var(--flexlayout-color-edge-marker, #aaa);--color-edge-icon: var(--flexlayout-color-edge-icon, #555);--color-mini-scroll-indicator: var(--flexlayout-color-mini-scroll-indicator, rgba(128, 128, 128, .5));--color-mini-scroll-indicator-hovered: var(--flexlayout-color-mini-scroll-indicator-hovered, rgba(128, 128, 128, .7));--size-mini-scroll-indicator: var(--flexlayout-size-mini-scroll-indicator, 3px);--color-toolbar-button-hover: var(--flexlayout-color-toolbar-button-hover, var(--color-4));--color-float-window-header-background: var(--flexlayout-color-float-window-header-background, var(--color-tabset-background))}.flexlayout__theme_underline .flexlayout__layout{--color-text: var(--flexlayout-color-text, black);--color-background: var(--flexlayout-color-background, white);--color-base: var(--flexlayout-color-base, white);--color-1: var(--flexlayout-color-1, rgb(98%, 98%, 98%));--color-2: var(--flexlayout-color-2, rgb(96%, 96%, 96%));--color-3: var(--flexlayout-color-3, rgb(93%, 93%, 93%));--color-4: var(--flexlayout-color-4, rgb(90%, 90%, 90%));--color-5: var(--flexlayout-color-5, rgb(87%, 87%, 87%));--color-6: var(--flexlayout-color-6, rgb(84%, 84%, 84%));--color-drag1: var(--flexlayout-color-drag1, rgb(95, 134, 196));--color-drag2: var(--flexlayout-color-drag2, rgb(119, 166, 119));--color-drag1-background: var(--flexlayout-color-drag1-background, rgba(95, 134, 196, .1));--color-drag2-background: var(--flexlayout-color-drag2-background, rgba(119, 166, 119, .075));--font-size: var(--flexlayout-font-size, medium);--font-family: var(--flexlayout-font-family, Roboto, Arial, sans-serif);--font-weight: var(--flexlayout-font-weight, normal);--splitter-size: var(--flexlayout-splitter-size, 8px);--splitter-active-size: var(--flexlayout-splitter-active-size, 8px);--splitter-handle-visibility: var(--flexlayout-splitter-handle-visibility, hidden);--color-overflow: var(--flexlayout-color-overflow, gray);--color-icon: var(--flexlayout-color-icon, gray);--color-focus: var(--flexlayout-color-focus, #3b7de7);--color-tabset-background: var(--flexlayout-color-tabset-background, var(--color-background));--color-tabset-background-selected: var(--flexlayout-color-tabset-background-selected, var(--color-1));--color-tabset-background-maximized: var(--flexlayout-color-tabset-background-maximized, var(--color-6));--color-tabset-divider-line: var(--flexlayout-color-tabset-divider-line, var(--color-3));--color-border-tab-content: var(--flexlayout-color-border-tab-content, var(--color-background));--color-border-background: var(--flexlayout-color-border-background, var(--color-background));--color-border-divider-line: var(--flexlayout-color-border-divider-line, var(--color-3));--color-tab-content: var(--flexlayout-color-tab-content, var(--color-background));--color-tab-selected: var(--flexlayout-color-tab-selected, var(--color-text));--color-tab-selected-background: var(--flexlayout-color-tab-selected-background, transparent);--color-tab-unselected: var(--flexlayout-color-tab-unselected, gray);--color-tab-unselected-background: var(--flexlayout-color-tab-unselected-background, transparent);--color-tab-textbox: var(--flexlayout-color-tab-textbox, var(--color-text));--color-tab-textbox-background: var(--flexlayout-color-tab-textbox-background, var(--color-3));--color-border-tab-selected: var(--flexlayout-color-border-tab-selected, var(--color-text));--color-border-tab-selected-background: var(--flexlayout-color-border-tab-selected-background, transparent);--color-border-tab-unselected: var(--flexlayout-color-border-tab-unselected, gray);--color-border-tab-unselected-background: var(--flexlayout-color-border-tab-unselected-background, transparent);--color-splitter: var(--flexlayout-color-splitter, var(--color-1));--color-splitter-hover: var(--flexlayout-color-splitter-hover, var(--color-4));--color-splitter-drag: var(--flexlayout-color-splitter-drag, var(--color-4));--color-splitter-handle: var(--flexlayout-color-splitter-handle, var(--color-3));--color-drag-rect-border: var(--flexlayout-color-drag-rect-border, var(--color-6));--color-drag-rect-background: var(--flexlayout-color-drag-rect-background, var(--color-4));--color-drag-rect: var(--flexlayout-color-drag-rect, var(--color-text));--color-popup-border: var(--flexlayout-color-popup-border, var(--color-6));--color-popup-unselected: var(--flexlayout-color-popup-unselected, var(--color-text));--color-popup-unselected-background: var(--flexlayout-color-popup-unselected-background, var(--color-background));--color-popup-selected: var(--flexlayout-color-popup-selected, var(--color-text));--color-popup-selected-background: var(--flexlayout-color-popup-selected-background, var(--color-3));--color-edge-marker: var(--flexlayout-color-edge-marker, #aaa);--color-edge-icon: var(--flexlayout-color-edge-icon, #555);--color-underline: var(--flexlayout-color-underline, rgb(65, 105, 225));--color-underline-hover: var(--flexlayout-color-underline-hover, #aaa);--underline_height: 3px;--color-mini-scroll-indicator: var(--flexlayout-color-mini-scroll-indicator, rgba(128, 128, 128, .5));--color-mini-scroll-indicator-hovered: var(--flexlayout-color-mini-scroll-indicator-hovered, rgba(128, 128, 128, .7));--size-mini-scroll-indicator: var(--flexlayout-size-mini-scroll-indicator, 4px);--color-toolbar-button-hover: var(--flexlayout-color-toolbar-button-hover, var(--color-3));--color-float-window-header-background: var(--flexlayout-color-float-window-header-background, var(--color-tabset-background))}.flexlayout__theme_rounded .flexlayout__layout{--color-text: var(--flexlayout-color-text, black);--color-background: var(--flexlayout-color-background, #e9eef6);--color-base: var(--flexlayout-color-base, #f2f6fb);--color-1: var(--flexlayout-color-1, rgb(90.3137254902%, 93.2941176471%, 97.0196078431%));--color-2: var(--flexlayout-color-2, rgb(85.7254901961%, 90.1176470588%, 95.6078431373%));--color-3: var(--flexlayout-color-3, rgb(81.137254902%, 86.9411764706%, 94.1960784314%));--color-4: var(--flexlayout-color-4, rgb(76.5490196078%, 83.7647058824%, 92.7843137255%));--color-5: var(--flexlayout-color-5, rgb(71.9607843137%, 80.5882352941%, 91.3725490196%));--color-6: var(--flexlayout-color-6, rgb(67.3725490196%, 77.4117647059%, 89.9607843137%));--color-drag1: var(--flexlayout-color-drag1, rgb(95, 134, 196));--color-drag2: var(--flexlayout-color-drag2, var(--color-drag1));--color-drag1-background: var(--flexlayout-color-drag1-background, rgba(95, 134, 196, .1));--color-drag2-background: var(--flexlayout-color-drag2-background, var(--color-drag1-background));--font-size: var(--flexlayout-font-size, medium);--font-family: var(--flexlayout-font-family, Roboto, Arial, sans-serif);--font-weight: var(--flexlayout-font-weight, normal);--splitter-size: var(--flexlayout-splitter-size, 8px);--splitter-active-size: var(--flexlayout-splitter-active-size, 8px);--splitter-handle-visibility: var(--flexlayout-splitter-handle-visibility, hidden);--color-overflow: var(--flexlayout-color-overflow, #999db2);--color-icon: var(--flexlayout-color-icon, #999db2);--color-focus: var(--flexlayout-color-focus, #3b7de7);--color-tabset-background: var(--flexlayout-color-tabset-background, white);--color-tabset-background-selected: var(--flexlayout-color-tabset-background-selected, white);--color-tabset-background-maximized: var(--flexlayout-color-tabset-background-maximized, white);--color-tabset-divider-line: var(--flexlayout-color-tabset-divider-line, white);--color-border-tab-content: var(--flexlayout-color-border-tab-content, white);--color-border-background: var(--flexlayout-color-border-background, var(--color-background));--color-border-divider-line: var(--flexlayout-color-border-divider-line, var(--color-background));--color-tab-content: var(--flexlayout-color-tab-content, white);--color-tab-selected: var(--flexlayout-color-tab-selected, var(--color-text));--color-tab-selected-background: var(--flexlayout-color-tab-selected-background, var(--color-2));--color-tab-unselected: var(--flexlayout-color-tab-unselected, gray);--color-tab-unselected-background: var(--flexlayout-color-tab-unselected-background, #d3d4e745);--color-tab-textbox: var(--flexlayout-color-tab-textbox, var(--color-text));--color-tab-textbox-background: var(--flexlayout-color-tab-textbox-background, var(--color-3));--color-border-tab-selected: var(--flexlayout-color-border-tab-selected, var(--color-text));--color-border-tab-selected-background: var(--flexlayout-color-border-tab-selected-background, var(--color-2));--color-border-tab-unselected: var(--flexlayout-color-border-tab-unselected, gray);--color-border-tab-unselected-background: var(--flexlayout-color-border-tab-unselected-background, #d3d4e745);--color-splitter: var(--flexlayout-color-splitter, var(--color-background));--color-splitter-hover: var(--flexlayout-color-splitter-hover, var(--color-2));--color-splitter-drag: var(--flexlayout-color-splitter-drag, var(--color-2));--color-splitter-handle: var(--flexlayout-color-splitter-handle, var(--color-3));--color-drag-rect-border: var(--flexlayout-color-drag-rect-border, #ccc);--color-drag-rect-background: var(--flexlayout-color-drag-rect-background, var(--color-5));--color-drag-rect: var(--flexlayout-color-drag-rect, var(--color-text));--color-popup-border: var(--flexlayout-color-popup-border, var(--color-6));--color-popup-unselected: var(--flexlayout-color-popup-unselected, var(--color-text));--color-popup-unselected-background: var(--flexlayout-color-popup-unselected-background, var(--color-background));--color-popup-selected: var(--flexlayout-color-popup-selected, var(--color-text));--color-popup-selected-background: var(--flexlayout-color-popup-selected-background, var(--color-3));--color-edge-marker: var(--flexlayout-color-edge-marker, #a6bbdf);--color-edge-icon: var(--flexlayout-color-edge-icon, #555);--color-mini-scroll-indicator: var(--flexlayout-color-mini-scroll-indicator, rgba(180, 200, 230, .5));--color-mini-scroll-indicator-hovered: var(--flexlayout-color-mini-scroll-indicator-hovered, rgba(180, 200, 230, .7));--size-mini-scroll-indicator: var(--flexlayout-size-mini-scroll-indicator, 4px);--color-toolbar-button-hover: var(--flexlayout-color-toolbar-button-hover, var(--color-2));--tab-button-radius: var(--flexlayout-tab-button-radius, 10px);--border-button-radius: var(--flexlayout-border-button-radius, 10px);--color-float-window-header-background: var(--flexlayout-color-float-window-header-background, var(--color-tabset-background))}.flexlayout__theme_alpha_light .flexlayout__layout{--color-text: var(--flexlayout-color-text, black);--color-background: var(--flexlayout-color-background, #ffffff);--color-base: var(--flexlayout-color-base, #f9fafb);--color-1: var(--flexlayout-color-1, #ededee);--color-2: var(--flexlayout-color-2, #e5e7eb);--color-3: var(--flexlayout-color-3, #d1d5db);--color-4: var(--flexlayout-color-4, #9ca3af);--color-5: var(--flexlayout-color-5, #6b7280);--color-6: var(--flexlayout-color-6, #4b5563);--color-drag1: var(--flexlayout-color-drag1, rgb(95, 134, 196));--color-drag2: var(--flexlayout-color-drag2, rgb(119, 166, 119));--color-drag1-background: var(--flexlayout-color-drag1-background, rgba(59, 130, 246, .1));--color-drag2-background: var(--flexlayout-color-drag2-background, rgba(16, 185, 129, .075));--font-size: var(--flexlayout-font-size, medium);--font-family: var(--flexlayout-font-family, system-ui, -apple-system, Arial, sans-serif);--font-weight: var(--flexlayout-font-weight, 500);--splitter-size: var(--flexlayout-splitter-size, 8px);--splitter-active-size: var(--flexlayout-splitter-active-size, 8px);--splitter-handle-visibility: var(--flexlayout-splitter-handle-visibility, hidden);--color-overflow: var(--flexlayout-color-overflow, var(--color-5));--color-icon: var(--flexlayout-color-icon, var(--color-5));--color-focus: var(--flexlayout-color-focus, #3b7de7);--color-tabset-background: var(--flexlayout-color-tabset-background, var(--color-1));--color-tabset-background-selected: var(--flexlayout-color-tabset-background-selected, var(--color-1));--color-tabset-background-maximized: var(--flexlayout-color-tabset-background-maximized, var(--color-1));--color-tabset-divider-line: var(--flexlayout-color-tabset-divider-line, var(--color-2));--color-border-tab-content: var(--flexlayout-color-border-tab-content, var(--color-1));--color-border-background: var(--flexlayout-color-border-background, var(--color-1));--color-border-divider-line: var(--flexlayout-color-border-divider-line, var(--color-2));--color-tab-content: var(--flexlayout-color-tab-content, var(--color-background));--color-tab-selected: var(--flexlayout-color-tab-selected, #3b7de7);--color-tab-selected-background: var(--flexlayout-color-tab-selected-background, var(--color-background));--color-tab-unselected: var(--flexlayout-color-tab-unselected, var(--color-5));--color-tab-unselected-background: var(--flexlayout-color-tab-unselected-background, transparent);--color-tab-textbox: var(--flexlayout-color-tab-textbox, var(--color-text));--color-tab-textbox-background: var(--flexlayout-color-tab-textbox-background, var(--color-background));--color-border-tab-selected: var(--flexlayout-color-border-tab-selected, #3b7de7);--color-border-tab-selected-background: var(--flexlayout-color-border-tab-selected-background, var(--color-background));--color-border-tab-unselected: var(--flexlayout-color-border-tab-unselected, var(--color-5));--color-border-tab-unselected-background: var(--flexlayout-color-border-tab-unselected-background, var(--color-1));--color-splitter: var(--flexlayout-color-splitter, var(--color-1));--color-splitter-hover: var(--flexlayout-color-splitter-hover, var(--color-4));--color-splitter-drag: var(--flexlayout-color-splitter-drag, var(--color-4));--color-splitter-handle: var(--flexlayout-color-splitter-handle, var(--color-3));--color-drag-rect-border: var(--flexlayout-color-drag-rect-border, var(--color-3));--color-drag-rect-background: var(--flexlayout-color-drag-rect-background, var(--color-background));--color-drag-rect: var(--flexlayout-color-drag-rect, var(--color-text));--color-popup-border: var(--flexlayout-color-popup-border, var(--color-2));--color-popup-unselected: var(--flexlayout-color-popup-unselected, var(--color-text));--color-popup-unselected-background: var(--flexlayout-color-popup-unselected-background, var(--color-background));--color-popup-selected: var(--flexlayout-color-popup-selected, var(--color-drag1));--color-popup-selected-background: var(--flexlayout-color-popup-selected-background, var(--color-1));--color-edge-marker: var(--flexlayout-color-edge-marker, var(--color-3));--color-edge-icon: var(--flexlayout-color-edge-icon, var(--color-6));--color-mini-scroll-indicator: var(--flexlayout-color-mini-scroll-indicator, rgba(0, 0, 0, .1));--color-mini-scroll-indicator-hovered: var(--flexlayout-color-mini-scroll-indicator-hovered, rgba(0, 0, 0, .3));--size-mini-scroll-indicator: var(--flexlayout-size-mini-scroll-indicator, 4px);--color-toolbar-button-hover: var(--flexlayout-color-toolbar-button-hover, var(--color-2));--tab-button-radius: var(--flexlayout-tab-button-radius, 10px);--border-button-radius: var(--flexlayout-border-button-radius, 5px);--color-float-window-header-background: var(--flexlayout-color-float-window-header-background, var(--color-tabset-background))}.flexlayout__theme_alpha_dark .flexlayout__layout{--color-text: var(--flexlayout-color-text, white);--color-background: var(--flexlayout-color-background, black);--color-base: var(--flexlayout-color-base, #121212);--color-1: var(--flexlayout-color-1, #1c1c1c);--color-2: var(--flexlayout-color-2, #383838);--color-3: var(--flexlayout-color-3, #404040);--color-4: var(--flexlayout-color-4, #525252);--color-5: var(--flexlayout-color-5, #737373);--color-6: var(--flexlayout-color-6, #a3a3a3);--color-drag1: var(--flexlayout-color-drag1, #93c5fd);--color-drag2: var(--flexlayout-color-drag2, #6ee7b7);--color-drag1-background: var(--flexlayout-color-drag1-background, rgba(147, 197, 253, .15));--color-drag2-background: var(--flexlayout-color-drag2-background, rgba(110, 231, 183, .1));--font-size: var(--flexlayout-font-size, medium);--font-family: var(--flexlayout-font-family, system-ui, -apple-system, Arial, sans-serif);--font-weight: var(--flexlayout-font-weight, 500);--splitter-size: var(--flexlayout-splitter-size, 8px);--splitter-active-size: var(--flexlayout-splitter-active-size, 8px);--splitter-handle-visibility: var(--flexlayout-splitter-handle-visibility, hidden);--color-overflow: var(--flexlayout-color-overflow, gray);--color-icon: var(--flexlayout-color-icon, gray);--color-focus: var(--flexlayout-color-focus, #93c5fd);--color-tabset-background: var(--flexlayout-color-tabset-background, var(--color-1));--color-tabset-background-selected: var(--flexlayout-color-tabset-background-selected, var(--color-1));--color-tabset-background-maximized: var(--flexlayout-color-tabset-background-maximized, var(--color-1));--color-tabset-divider-line: var(--flexlayout-color-tabset-divider-line, var(--color-2));--color-border-tab-content: var(--flexlayout-color-border-tab-content, var(--color-1));--color-border-background: var(--flexlayout-color-border-background, var(--color-1));--color-border-divider-line: var(--flexlayout-color-border-divider-line, var(--color-2));--color-tab-content: var(--flexlayout-color-tab-content, var(--color-background));--color-tab-selected: var(--flexlayout-color-tab-selected, #e5e7eb);--color-tab-selected-background: var(--flexlayout-color-tab-selected-background, var(--color-background));--color-tab-unselected: var(--flexlayout-color-tab-unselected, var(--color-5));--color-tab-unselected-background: var(--flexlayout-color-tab-unselected-background, transparent);--color-tab-textbox: var(--flexlayout-color-tab-textbox, var(--color-text));--color-tab-textbox-background: var(--flexlayout-color-tab-textbox-background, var(--color-background));--color-border-tab-selected: var(--flexlayout-color-border-tab-selected, #e5e7eb);--color-border-tab-selected-background: var(--flexlayout-color-border-tab-selected-background, var(--color-background));--color-border-tab-unselected: var(--flexlayout-color-border-tab-unselected, var(--color-5));--color-border-tab-unselected-background: var(--flexlayout-color-border-tab-unselected-background, var(--color-1));--color-splitter: var(--flexlayout-color-splitter, var(--color-1));--color-splitter-hover: var(--flexlayout-color-splitter-hover, var(--color-3));--color-splitter-drag: var(--flexlayout-color-splitter-drag, var(--color-4));--color-splitter-handle: var(--flexlayout-color-splitter-handle, var(--color-3));--color-drag-rect-border: var(--flexlayout-color-drag-rect-border, var(--color-3));--color-drag-rect-background: var(--flexlayout-color-drag-rect-background, var(--color-background));--color-drag-rect: var(--flexlayout-color-drag-rect, var(--color-text));--color-popup-border: var(--flexlayout-color-popup-border, var(--color-2));--color-popup-unselected: var(--flexlayout-color-popup-unselected, var(--color-text));--color-popup-unselected-background: var(--flexlayout-color-popup-unselected-background, var(--color-background));--color-popup-selected: var(--flexlayout-color-popup-selected, #f9fafb);--color-popup-selected-background: var(--flexlayout-color-popup-selected-background, var(--color-1));--color-edge-marker: var(--flexlayout-color-edge-marker, var(--color-3));--color-edge-icon: var(--flexlayout-color-edge-icon, gray);--color-mini-scroll-indicator: var(--flexlayout-color-mini-scroll-indicator, rgba(255, 255, 255, .1));--color-mini-scroll-indicator-hovered: var(--flexlayout-color-mini-scroll-indicator-hovered, rgba(255, 255, 255, .3));--size-mini-scroll-indicator: var(--flexlayout-size-mini-scroll-indicator, 4px);--color-toolbar-button-hover: var(--flexlayout-color-toolbar-button-hover, var(--color-2));--tab-button-radius: var(--flexlayout-tab-button-radius, 10px);--border-button-radius: var(--flexlayout-border-button-radius, 5px);--color-float-window-header-background: var(--flexlayout-color-float-window-header-background, var(--color-tabset-background))}.flexlayout__theme_alpha_rounded .flexlayout__layout{--color-text: var(--flexlayout-color-text, black);--color-background: var(--flexlayout-color-background, #e9eef6);--color-base: var(--flexlayout-color-base, #ffffff);--color-1: var(--flexlayout-color-1, #f1f5f9);--color-2: var(--flexlayout-color-2, #e2e8f0);--color-3: var(--flexlayout-color-3, #cbd5e1);--color-4: var(--flexlayout-color-4, #94a3b8);--color-5: var(--flexlayout-color-5, #64748b);--color-6: var(--flexlayout-color-6, #475569);--color-drag1: var(--flexlayout-color-drag1, rgb(95, 134, 196));--color-drag2: var(--flexlayout-color-drag2, rgb(119, 166, 119));--color-drag1-background: var(--flexlayout-color-drag1-background, rgba(59, 130, 246, .1));--color-drag2-background: var(--flexlayout-color-drag2-background, rgba(16, 185, 129, .075));--font-size: var(--flexlayout-font-size, medium);--font-family: var(--flexlayout-font-family, system-ui, -apple-system, Arial, sans-serif);--font-weight: var(--flexlayout-font-weight, 500);--splitter-size: var(--flexlayout-splitter-size, 8px);--splitter-active-size: var(--flexlayout-splitter-active-size, 8px);--splitter-handle-visibility: var(--flexlayout-splitter-handle-visibility, hidden);--color-overflow: var(--flexlayout-color-overflow, var(--color-4));--color-icon: var(--flexlayout-color-icon, var(--color-4));--color-focus: var(--flexlayout-color-focus, #3b7de7);--color-tabset-background: var(--flexlayout-color-tabset-background, white);--color-tabset-background-selected: var(--flexlayout-color-tabset-background-selected, white);--color-tabset-background-maximized: var(--flexlayout-color-tabset-background-maximized, white);--color-tabset-divider-line: var(--flexlayout-color-tabset-divider-line, white);--color-border-tab-content: var(--flexlayout-color-border-tab-content, white);--color-border-background: var(--flexlayout-color-border-background, var(--color-background));--color-border-divider-line: var(--flexlayout-color-border-divider-line, var(--color-background));--color-tab-content: var(--flexlayout-color-tab-content, white);--color-tab-selected: var(--flexlayout-color-tab-selected, #3b7de7);--color-tab-selected-background: var(--flexlayout-color-tab-selected-background, var(--color-2));--color-tab-unselected: var(--flexlayout-color-tab-unselected, var(--color-4));--color-tab-unselected-background: var(--flexlayout-color-tab-unselected-background, var(--color-1));--color-tab-textbox: var(--flexlayout-color-tab-textbox, var(--color-text));--color-tab-textbox-background: var(--flexlayout-color-tab-textbox-background, var(--color-3));--color-border-tab-selected: var(--flexlayout-color-border-tab-selected, #3b7de7);--color-border-tab-selected-background: var(--flexlayout-color-border-tab-selected-background, var(--color-2));--color-border-tab-unselected: var(--flexlayout-color-border-tab-unselected, var(--color-4));--color-border-tab-unselected-background: var(--flexlayout-color-border-tab-unselected-background, var(--color-1));--color-splitter: var(--flexlayout-color-splitter, var(--color-background));--color-splitter-hover: var(--flexlayout-color-splitter-hover, var(--color-3));--color-splitter-drag: var(--flexlayout-color-splitter-drag, var(--color-3));--color-splitter-handle: var(--flexlayout-color-splitter-handle, var(--color-3));--color-drag-rect-border: var(--flexlayout-color-drag-rect-border, var(--color-3));--color-drag-rect-background: var(--flexlayout-color-drag-rect-background, var(--color-base));--color-drag-rect: var(--flexlayout-color-drag-rect, var(--color-text));--color-popup-border: var(--flexlayout-color-popup-border, var(--color-2));--color-popup-unselected: var(--flexlayout-color-popup-unselected, var(--color-text));--color-popup-unselected-background: var(--flexlayout-color-popup-unselected-background, var(--color-base));--color-popup-selected: var(--flexlayout-color-popup-selected, var(--color-drag1));--color-popup-selected-background: var(--flexlayout-color-popup-selected-background, var(--color-1));--color-edge-marker: var(--flexlayout-color-edge-marker, var(--color-3));--color-edge-icon: var(--flexlayout-color-edge-icon, var(--color-6));--color-mini-scroll-indicator: var(--flexlayout-color-mini-scroll-indicator, rgba(0, 0, 0, .1));--color-mini-scroll-indicator-hovered: var(--flexlayout-color-mini-scroll-indicator-hovered, rgba(0, 0, 0, .2));--size-mini-scroll-indicator: var(--flexlayout-size-mini-scroll-indicator, 4px);--color-toolbar-button-hover: var(--flexlayout-color-toolbar-button-hover, var(--color-1));--tab-button-radius: var(--flexlayout-tab-button-radius, 16px);--border-button-radius: var(--flexlayout-border-button-radius, 16px);--color-float-window-header-background: var(--flexlayout-color-float-window-header-background, var(--color-tabset-background))}.flexlayout__theme_aria .flexlayout__layout{--color-text: var(--flexlayout-color-text, black);--color-background: var(--flexlayout-color-background, #ffffff);--color-base: var(--flexlayout-color-base, #f9fafb);--color-1: var(--flexlayout-color-1, #ededee);--color-2: var(--flexlayout-color-2, #e5e7eb);--color-3: var(--flexlayout-color-3, #d1d5db);--color-4: var(--flexlayout-color-4, #9ca3af);--color-5: var(--flexlayout-color-5, #6b7280);--color-6: var(--flexlayout-color-6, #4b5563);--color-drag1: var(--flexlayout-color-drag1, rgb(95, 134, 196));--color-drag2: var(--flexlayout-color-drag2, rgb(119, 166, 119));--color-drag1-background: var(--flexlayout-color-drag1-background, rgba(59, 130, 246, .1));--color-drag2-background: var(--flexlayout-color-drag2-background, rgba(16, 185, 129, .075));--font-size: var(--flexlayout-font-size, medium);--font-family: var(--flexlayout-font-family, system-ui, -apple-system, Arial, sans-serif);--font-weight: var(--flexlayout-font-weight, 500);--splitter-size: var(--flexlayout-splitter-size, 8px);--splitter-active-size: var(--flexlayout-splitter-active-size, 8px);--splitter-handle-visibility: var(--flexlayout-splitter-handle-visibility, hidden);--color-overflow: var(--flexlayout-color-overflow, var(--color-5));--color-icon: var(--flexlayout-color-icon, var(--color-5));--color-focus: var(--flexlayout-color-focus, #3b7de7);--color-tabset-background: var(--flexlayout-color-tabset-background, var(--color-1));--color-tabset-background-selected: var(--flexlayout-color-tabset-background-selected, var(--color-1));--color-tabset-background-maximized: var(--flexlayout-color-tabset-background-maximized, var(--color-1));--color-tabset-divider-line: var(--flexlayout-color-tabset-divider-line, var(--color-2));--color-border-tab-content: var(--flexlayout-color-border-tab-content, var(--color-1));--color-border-background: var(--flexlayout-color-border-background, var(--color-1));--color-border-divider-line: var(--flexlayout-color-border-divider-line, var(--color-2));--color-tab-content: var(--flexlayout-color-tab-content, var(--color-background));--color-tab-selected: var(--flexlayout-color-tab-selected, #3b7de7);--color-tab-selected-background: var(--flexlayout-color-tab-selected-background, var(--color-background));--color-tab-unselected: var(--flexlayout-color-tab-unselected, var(--color-5));--color-tab-unselected-background: var(--flexlayout-color-tab-unselected-background, transparent);--color-tab-textbox: var(--flexlayout-color-tab-textbox, var(--color-text));--color-tab-textbox-background: var(--flexlayout-color-tab-textbox-background, var(--color-background));--color-border-tab-selected: var(--flexlayout-color-border-tab-selected, #3b7de7);--color-border-tab-selected-background: var(--flexlayout-color-border-tab-selected-background, var(--color-background));--color-border-tab-unselected: var(--flexlayout-color-border-tab-unselected, var(--color-5));--color-border-tab-unselected-background: var(--flexlayout-color-border-tab-unselected-background, var(--color-1));--color-splitter: var(--flexlayout-color-splitter, var(--color-1));--color-splitter-hover: var(--flexlayout-color-splitter-hover, var(--color-4));--color-splitter-drag: var(--flexlayout-color-splitter-drag, var(--color-4));--color-splitter-handle: var(--flexlayout-color-splitter-handle, var(--color-3));--color-drag-rect-border: var(--flexlayout-color-drag-rect-border, var(--color-3));--color-drag-rect-background: var(--flexlayout-color-drag-rect-background, var(--color-background));--color-drag-rect: var(--flexlayout-color-drag-rect, var(--color-text));--color-popup-border: var(--flexlayout-color-popup-border, var(--color-2));--color-popup-unselected: var(--flexlayout-color-popup-unselected, var(--color-text));--color-popup-unselected-background: var(--flexlayout-color-popup-unselected-background, var(--color-background));--color-popup-selected: var(--flexlayout-color-popup-selected, var(--color-drag1));--color-popup-selected-background: var(--flexlayout-color-popup-selected-background, var(--color-1));--color-edge-marker: var(--flexlayout-color-edge-marker, var(--color-3));--color-edge-icon: var(--flexlayout-color-edge-icon, var(--color-6));--color-mini-scroll-indicator: var(--flexlayout-color-mini-scroll-indicator, rgba(0, 0, 0, .1));--color-mini-scroll-indicator-hovered: var(--flexlayout-color-mini-scroll-indicator-hovered, rgba(0, 0, 0, .3));--size-mini-scroll-indicator: var(--flexlayout-size-mini-scroll-indicator, 4px);--color-toolbar-button-hover: var(--flexlayout-color-toolbar-button-hover, var(--color-2));--tab-button-radius: var(--flexlayout-tab-button-radius, 10px);--border-button-radius: var(--flexlayout-border-button-radius, 5px);--color-float-window-header-background: var(--flexlayout-color-float-window-header-background, var(--color-tabset-background))}.flexlayout__theme_aria .flexlayout__layout{--color-tab-selected: var(--flexlayout-color-tab-selected, #2563eb);--color-border-tab-selected: var(--flexlayout-color-border-tab-selected, #2563eb);--color-tab-unselected: var(--flexlayout-color-tab-unselected, var(--color-6));--color-border-tab-unselected: var(--flexlayout-color-border-tab-unselected, var(--color-6))}.flexlayout__layout{inset:0;position:absolute;display:flex;background-color:var(--color-background)}.flexlayout__layout_metrics{position:absolute;top:-30000px}.flexlayout__layout_overlay{inset:0;position:absolute;z-index:1000}.flexlayout__layout_tab_stamps{position:absolute;top:-10000px;z-index:100;display:flex;flex-direction:column;align-items:flex-start}.flexlayout__layout_moveables_home{visibility:hidden;position:absolute;width:100px;height:100px;top:-20000px}.flexlayout__layout_main{display:flex;flex-basis:0px;min-width:0;min-height:0;flex-grow:1;position:relative}.flexlayout__layout_border_container{display:flex;flex-basis:0px;min-width:0;min-height:0;flex-grow:1}.flexlayout__layout_border_container_inner{display:flex;flex-basis:0px;min-width:0;min-height:0;flex-grow:1;position:relative}.flexlayout__splitter{display:flex;align-items:center;justify-content:center;background-color:var(--color-splitter);touch-action:none;z-index:10;position:relative}.flexlayout__splitter:focus-visible{outline:2px solid var(--color-focus);outline-offset:-2px}.flexlayout__splitter_horz{width:var(--splitter-size);min-width:var(--splitter-size)}.flexlayout__splitter_horz:before{content:"";position:absolute;top:0;bottom:0;left:50%;width:var(--splitter-active-size);transform:translate(-50%);z-index:1}.flexlayout__splitter_vert{height:var(--splitter-size);min-height:var(--splitter-size)}.flexlayout__splitter_vert:before{content:"";position:absolute;left:0;right:0;top:50%;height:var(--splitter-active-size);transform:translateY(-50%);z-index:1}@media (hover: hover){.flexlayout__splitter:hover{background-color:var(--color-splitter-hover);transition:background-color ease-in .1s;transition-delay:.05s;border-radius:5px}}.flexlayout__splitter_drag{position:absolute;display:flex;align-items:center;justify-content:center;z-index:1000;border-radius:5px;background-color:var(--color-splitter-drag)}.flexlayout__splitter_handle{background-color:var(--color-splitter-handle);border-radius:3px;visibility:var(--splitter-handle-visibility)}.flexlayout__splitter_handle_horz{width:3px;height:30px}.flexlayout__splitter_handle_vert{width:30px;height:3px}.flexlayout__outline_rect{position:absolute;pointer-events:none;box-sizing:border-box;border:2px solid var(--color-drag1);background:var(--color-drag1-background);border-radius:5px;z-index:1000}.flexlayout__outline_rect_edge{pointer-events:none;border:2px solid var(--color-drag2);background:var(--color-drag2-background);border-radius:5px;z-index:1000;box-sizing:border-box}.flexlayout__edge_rect{position:absolute;z-index:1000;background-color:var(--color-edge-marker);pointer-events:none;display:flex;align-items:center;justify-content:center}.flexlayout__drag_rect{color:var(--color-drag-rect);background-color:var(--color-drag-rect-background);border:2px solid var(--color-drag-rect-border);border-radius:5px;box-sizing:border-box;display:flex;justify-content:center;flex-direction:column;overflow:hidden;padding:.3em .8em;word-wrap:break-word;font-size:var(--font-size);font-family:var(--font-family)}.flexlayout__row{display:flex;flex-basis:0px;min-width:0;min-height:0;position:relative;box-sizing:border-box;overflow:hidden}.flexlayout__tabset{display:flex;flex-direction:column;position:relative;background-color:var(--color-tabset-background);box-sizing:border-box;font-family:var(--font-family);overflow:hidden;flex-grow:1}.flexlayout__tabset_container{display:flex;flex-basis:0px;min-width:0;min-height:0;flex-direction:column;overflow:hidden;flex-grow:1}.flexlayout__tabset_tab_divider{width:4px}.flexlayout__tabset_content{display:flex;flex-basis:0px;min-width:0;min-height:0;flex-grow:1;box-sizing:border-box;position:relative}.flexlayout__tabset_leading{display:flex}.flexlayout__tabset_tabbar_outer{box-sizing:border-box;background-color:var(--color-tabset-background);overflow:hidden;display:flex;align-items:center;min-height:1.5em;font-size:var(--font-size);font-weight:var(--font-weight)}.flexlayout__tabset_tabbar_outer_top{padding:0 2px;border-bottom:1px solid var(--color-tabset-divider-line)}.flexlayout__tabset_tabbar_outer_bottom{padding:0 2px;border-top:1px solid var(--color-tabset-divider-line)}.flexlayout__tabset_tabbar_inner{position:relative;box-sizing:border-box;display:flex;flex-grow:1;scrollbar-width:none}.flexlayout__tabset_tabbar_inner::-webkit-scrollbar{display:none}.flexlayout__tabset_tabbar_inner_tab_container{position:relative;display:flex;padding-left:4px;padding-right:4px;box-sizing:border-box;white-space:nowrap;align-items:center}.flexlayout__tabset_tabbar_inner_tab_container_top{border-top:2px solid transparent}.flexlayout__tabset_tabbar_inner_tab_container_bottom{border-bottom:2px solid transparent}.flexlayout__tabset-selected{background-color:var(--color-tabset-background-selected)}.flexlayout__tabset-maximized{background-color:var(--color-tabset-background-maximized)}.flexlayout__tab_button_stamp{display:inline-flex;align-items:center;gap:.3em;white-space:nowrap;box-sizing:border-box}.flexlayout__tab{overflow:hidden;box-sizing:border-box;background-color:var(--color-tab-content);color:var(--color-text);position:absolute}.flexlayout__tab_moveable{position:relative;height:100%;min-width:1px;min-height:1px;overflow:auto;box-sizing:border-box}.flexlayout__tab_overlay{z-index:20;position:absolute;inset:0;background-color:#0000003d}.flexlayout__tab_border_overlay{z-index:1000}.flexlayout__tab_overlay_raised{z-index:1001}.flexlayout__tab_layout_container{position:relative;height:100%;box-sizing:border-box}.flexlayout__tab_layout_container_user{position:relative;flex-grow:1;box-sizing:border-box}.flexlayout__tab_button{display:flex;gap:.3em;align-items:center;box-sizing:border-box;padding:3px .5em;font-weight:var(--font-weight)}.flexlayout__tab_button:focus-visible{outline:2px solid var(--color-focus);outline-offset:-2px}.flexlayout__tab_button{cursor:pointer}.flexlayout__tab_button_stretch{background-color:transparent;color:var(--color-tab-selected);width:100%;padding:3px 0;text-wrap:nowrap;display:flex;gap:.3em;align-items:center;box-sizing:border-box;cursor:pointer}@media (hover: hover){.flexlayout__tab_button_stretch:hover{color:var(--color-tab-selected)}}.flexlayout__tab_button--selected{background-color:var(--color-tab-selected-background);color:var(--color-tab-selected)}@media (hover: hover){.flexlayout__tab_button:hover{color:var(--color-tab-selected)}}.flexlayout__tab_button--unselected{background-color:var(--color-tab-unselected-background);color:var(--color-tab-unselected)}.flexlayout__tab_button_leading,.flexlayout__tab_button_pin{display:flex}.flexlayout__tab_button_content{display:flex;text-wrap:nowrap}.flexlayout__tab_button_textbox{border:none;font-family:var(--font-family);font-size:var(--font-size);font-weight:var(--font-weight);color:var(--color-tab-textbox);background-color:var(--color-tab-textbox-background);border:1px inset var(--color-1);border-radius:3px;width:10em}.flexlayout__tab_button_textbox:focus{outline:2px solid var(--color-focus);outline-offset:-1px}.flexlayout__tab_button_trailing{display:flex;visibility:hidden;border-radius:4px}.flexlayout__tab_button_trailing:hover{background-color:var(--color-toolbar-button-hover)}@media (hover: hover){.flexlayout__tab_button:hover .flexlayout__tab_button_trailing{visibility:visible}}.flexlayout__tab_button--selected .flexlayout__tab_button_trailing{visibility:visible}.flexlayout__tab_button_overflow{display:flex;align-items:center;border:none;color:var(--color-overflow);font-size:inherit;background-color:transparent;width:2em;overflow:hidden}.flexlayout__tab_toolbar{display:flex;align-items:center;gap:.3em;padding-left:.5em;padding-right:.3em}.flexlayout__tab_toolbar_icon{border:none;outline:none;font-size:inherit;margin:0;background-color:transparent;padding:1px}.flexlayout__tab_toolbar_icon:focus-visible{outline:2px solid var(--color-focus);outline-offset:-2px}.flexlayout__tab_toolbar_button{border:none;outline:none;font-size:inherit;margin:0;background-color:transparent;border-radius:4px;padding:1px}.flexlayout__tab_toolbar_button:focus-visible{outline:2px solid var(--color-focus);outline-offset:-2px}@media (hover: hover){.flexlayout__tab_toolbar_button:hover{background-color:var(--color-toolbar-button-hover)}}.flexlayout__tab_toolbar_sticky_buttons_container{display:flex;gap:.3em;padding-left:5px;align-items:center}.flexlayout__border{box-sizing:border-box;overflow:hidden;display:flex;font-family:var(--font-family);font-size:var(--font-size);font-weight:var(--font-weight);color:var(--color-border);background-color:var(--color-border-background)}.flexlayout__border_tab_contents{box-sizing:border-box;overflow:hidden;background-color:var(--color-border-tab-content)}.flexlayout__border_tab_overlay{position:absolute;z-index:100}.flexlayout__border_tab_overlay_top{top:0;left:0;right:0;flex-direction:column}.flexlayout__border_tab_overlay_bottom{bottom:0;left:0;right:0;flex-direction:column}.flexlayout__border_tab_overlay_left{left:0;top:0;bottom:0;flex-direction:row}.flexlayout__border_tab_overlay_right{right:0;top:0;bottom:0;flex-direction:row}.flexlayout__border_leading{display:flex}.flexlayout__border_top{border-bottom:1px solid var(--color-border-divider-line);align-items:center}.flexlayout__border_bottom{border-top:1px solid var(--color-border-divider-line);align-items:center}.flexlayout__border_left{border-right:1px solid var(--color-border-divider-line);align-content:center;flex-direction:column}.flexlayout__border_right{border-left:1px solid var(--color-border-divider-line);align-content:center;flex-direction:column}.flexlayout__border_inner{position:relative;box-sizing:border-box;align-items:center;display:flex;flex-grow:1;scrollbar-width:none}.flexlayout__border_inner::-webkit-scrollbar{display:none}.flexlayout__border_inner_tab_container{white-space:nowrap;display:flex;align-items:center;padding-left:2px;padding-right:2px;box-sizing:border-box;position:absolute}.flexlayout__border_inner_tab_container_right{transform-origin:top left;transform:rotate(90deg)}.flexlayout__border_inner_tab_container_left{flex-direction:row-reverse;transform-origin:top right;transform:rotate(-90deg)}.flexlayout__border_inner_tab_container_left_down{flex-direction:row;transform-origin:top left;transform:rotate(90deg)}.flexlayout__border_tab_divider{width:4px}.flexlayout__border_button{display:flex;gap:.3em;align-items:center;cursor:pointer;padding:3px .5em;margin:2px 0;box-sizing:border-box;white-space:nowrap;font-weight:var(--font-weight)}.flexlayout__border_button:focus-visible{outline:2px solid var(--color-focus);outline-offset:-2px}.flexlayout__border_button--selected{background-color:var(--color-border-tab-selected-background);color:var(--color-border-tab-selected)}@media (hover: hover){.flexlayout__border_button:hover{color:var(--color-border-tab-selected)}}.flexlayout__border_button--unselected{background-color:var(--color-border-tab-unselected-background);color:var(--color-border-tab-unselected)}.flexlayout__border_button_leading,.flexlayout__border_button_content{display:flex}.flexlayout__border_button_trailing{display:flex;border-radius:4px;visibility:hidden}@media (hover: hover){.flexlayout__border_button:hover .flexlayout__border_button_trailing{visibility:visible}}.flexlayout__border_button--selected .flexlayout__border_button_trailing{visibility:visible}.flexlayout__border_toolbar{display:flex;gap:.3em;align-items:center}.flexlayout__border_toolbar_left,.flexlayout__border_toolbar_right{flex-direction:column;padding-top:.5em;padding-bottom:.3em}.flexlayout__border_toolbar_top,.flexlayout__border_toolbar_bottom{padding-left:.5em;padding-right:.3em}.flexlayout__border_toolbar_button{border:none;outline:none;font-size:inherit;background-color:transparent;border-radius:4px;padding:1px}.flexlayout__border_toolbar_button:focus-visible{outline:2px solid var(--color-focus);outline-offset:-2px}@media (hover: hover){.flexlayout__border_toolbar_button:hover{background-color:var(--color-toolbar-button-hover)}}.flexlayout__border_toolbar_button_overflow{display:flex;align-items:center;border:none;color:var(--color-overflow);font-size:inherit;background-color:transparent;width:1.5em}.flexlayout__popup_menu{font-size:var(--font-size);font-family:var(--font-family);font-weight:var(--font-weight)}.flexlayout__popup_menu_item{padding:2px .5em;white-space:nowrap;cursor:pointer;border-radius:2px}.flexlayout__popup_menu_item:focus-visible{outline:2px solid var(--color-focus);outline-offset:-2px}.flexlayout__popup_menu_item--selected{font-weight:500;background-color:var(--color-tab-selected-background);color:var(--color-tab-selected)}.flexlayout__popup_menu_item--disabled{opacity:.4;cursor:default;pointer-events:none}@media (hover: hover){.flexlayout__popup_menu_item:hover{background-color:var(--color-6)}}.flexlayout__popup_menu_divider{height:1px;margin:4px 2px;background-color:var(--color-popup-border)}.flexlayout__popup_menu_container{box-shadow:inset 0 0 5px #00000026;border:1px solid var(--color-popup-border);color:var(--color-popup-unselected);background:var(--color-popup-unselected-background);border-radius:3px;position:absolute;z-index:3000;max-height:50%;min-width:100px;overflow:auto;padding:2px}.flexlayout__float_window{box-sizing:border-box;background-color:var(--color-tabset-background);border-radius:5px;box-shadow:0 0 10px #00000080;display:flex;flex-direction:column;overflow:hidden;z-index:2000}.flexlayout__float_window_header{display:flex;align-items:center;padding:5px;background-color:var(--color-float-window-header-background);border-bottom:1px solid var(--color-tabset-divider-line);cursor:move;user-select:none;font-family:var(--font-family);font-size:.8em;min-height:15px}.flexlayout__float_window_header_title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.flexlayout__float_window_drag_handle{display:flex;align-items:center;padding:0 4px;opacity:.7;cursor:grab}.flexlayout__float_window_drag_handle:hover{opacity:1}.flexlayout__float_window_drag_handle:active{cursor:grabbing}.flexlayout__float_window_button{display:flex;align-items:center;padding:0 4px;margin:0;border:none;background:none;opacity:.7;cursor:pointer}.flexlayout__float_window_button:hover{opacity:1}.flexlayout__float_window_content{position:relative;overflow:auto;flex-grow:1;display:flex;flex-direction:column;min-height:0;min-width:0;margin:5px}.flexlayout__floating_window _body{height:100%}.flexlayout__floating_window_content{inset:0;position:absolute}.flexlayout__error_boundary_container{inset:0;position:absolute;display:flex;justify-content:center}.flexlayout__error_boundary_content{display:flex;align-items:center}.flexlayout__border_sizer{position:absolute;padding-top:6px;padding-bottom:5px;font-size:var(--font-size);font-family:var(--font-family);font-weight:var(--font-weight)}.flexlayout__mini_scrollbar{position:absolute;background-color:var(--color-mini-scroll-indicator);border-radius:5px;width:var(--size-mini-scroll-indicator);height:var(--size-mini-scroll-indicator);visibility:hidden;opacity:0;transition:opacity .3s ease-in-out,visibility .3s ease-in-out}.flexlayout__mini_scrollbar:hover{background-color:var(--color-mini-scroll-indicator-hovered);transition:background-color .3s ease-in-out}.flexlayout__mini_scrollbar_container{position:relative;display:flex;flex-grow:1;overflow:hidden}@media (hover: hover){.flexlayout__mini_scrollbar_container:hover .flexlayout__mini_scrollbar{opacity:1;visibility:visible}}.flexlayout__theme_dark .flexlayout__tabset-selected{background-image:linear-gradient(var(--color-background),var(--color-4))}.flexlayout__theme_dark .flexlayout__tabset-maximized{background-image:linear-gradient(var(--color-6),var(--color-2))}.flexlayout__theme_dark .flexlayout__tab_top{box-shadow:inset -2px 0 5px #0000001a;border-top-left-radius:3px;border-top-right-radius:3px}.flexlayout__theme_dark .flexlayout__tab_bottom{box-shadow:inset -2px 0 5px #0000001a;border-bottom-left-radius:3px;border-bottom-right-radius:3px}.flexlayout__theme_dark .flexlayout__border_button{box-shadow:inset 0 0 5px #00000026;border-radius:3px}.flexlayout__theme_gray .flexlayout__tabset-selected{background-image:linear-gradient(var(--color-background),var(--color-4))}.flexlayout__theme_gray .flexlayout__tabset-selected{background-image:linear-gradient(var(--color-background),var(--color-3))}.flexlayout__theme_gray .flexlayout__tabset-maximized{background-image:linear-gradient(var(--color-3),var(--color-1))}.flexlayout__theme_gray .flexlayout__tab_button_top{box-shadow:inset -2px 0 5px #0000001a;border-top-left-radius:3px;border-top-right-radius:3px}.flexlayout__theme_gray .flexlayout__tab_button_bottom{box-shadow:inset -2px 0 5px #0000001a;border-bottom-left-radius:3px;border-bottom-right-radius:3px}.flexlayout__theme_gray .flexlayout__border_button{box-shadow:inset 0 0 5px #00000026;border-radius:3px}.flexlayout__theme_underline .flexlayout__tab_button{padding:2px .5em calc(4px - var(--underline_height)) .5em}.flexlayout__theme_underline .flexlayout__tab_button--selected{border-bottom:var(--underline_height) solid var(--color-underline)}.flexlayout__theme_underline .flexlayout__tab_button--unselected{border-bottom:var(--underline_height) solid transparent}.flexlayout__theme_underline .flexlayout__border_button{padding:2px .5em calc(4px - var(--underline_height)) .5em}.flexlayout__theme_underline .flexlayout__border_button--selected{border-bottom:var(--underline_height) solid var(--color-underline)}.flexlayout__theme_underline .flexlayout__border_button--unselected{border-bottom:var(--underline_height) solid transparent}.flexlayout__theme_underline .flexlayout__tabset_tab_divider,.flexlayout__theme_underline .flexlayout__border_tab_divider{width:1px;height:.8em;margin:0 6px;background-color:#ddd}.flexlayout__theme_underline .flexlayout__tab_button_textbox{border:none}.flexlayout__theme_rounded .flexlayout__tabset{padding:3px;border-radius:10px}.flexlayout__theme_rounded .flexlayout__tabset_content{padding:1px 3px 3px;border-bottom-left-radius:10px;border-bottom-right-radius:10px}.flexlayout__theme_rounded .flexlayout__tab_border{border-radius:10px;padding:5px}.flexlayout__theme_rounded .flexlayout__border_tab_contents{border-radius:10px}.flexlayout__theme_rounded .flexlayout__tab_button{border-radius:var(--tab-button-radius);padding:2px .8em}.flexlayout__theme_rounded .flexlayout__border_button{border-radius:var(--border-button-radius);padding:2px .8em}.flexlayout__theme_rounded .flexlayout__tabset_tabbar_outer_top{border-bottom:unset;padding-bottom:1px}.flexlayout__theme_rounded .flexlayout__tabset_tabbar_inner_tab_container_top{border-bottom:2px solid transparent}.flexlayout__theme_rounded .flexlayout__border_bottom{border-top:2px solid var(--color-border-divider-line)}.flexlayout__theme_rounded .flexlayout__border_sizer{padding-bottom:6px}.flexlayout__theme_rounded .flexlayout__tab_button_trailing:hover,.flexlayout__theme_rounded .flexlayout__border_button_trailing:hover{background-color:var(--color-3)}.flexlayout__theme_alpha_light .flexlayout__tab{border:5px solid var(--color-background);border-radius:5px}.flexlayout__theme_alpha_light .flexlayout__splitter_border .flexlayout__splitter_handle{visibility:visible}.flexlayout__theme_alpha_light .flexlayout__tabset_tabbar_outer_top{border-bottom:unset}.flexlayout__theme_alpha_light .flexlayout__tabset_tabbar_outer_bottom{border-top:unset}.flexlayout__theme_alpha_light .flexlayout__tab_button{border-bottom:2px solid transparent;padding:4px 12px}.flexlayout__theme_alpha_light .flexlayout__tab_button--selected:hover{background-color:var(--color-background)}.flexlayout__theme_alpha_light .flexlayout__tabset_tabbar_outer_top .flexlayout__tab_button--selected{border-top-left-radius:var(--tab-button-radius);border-top-right-radius:var(--tab-button-radius)}.flexlayout__theme_alpha_light .flexlayout__tabset_tabbar_outer_bottom .flexlayout__tab_button--selected{border-bottom-left-radius:var(--tab-button-radius);border-bottom-right-radius:var(--tab-button-radius)}.flexlayout__theme_alpha_light .flexlayout__tabset_tab_spacer{width:12px}.flexlayout__theme_alpha_light .flexlayout__tabset_tab_divider,.flexlayout__theme_alpha_light .flexlayout__border_tab_divider{width:2px;border-radius:2px;height:.8em;margin:0 5px;background-color:#ddd}.flexlayout__theme_alpha_light .flexlayout__tabset_tab_divider_selected_before,.flexlayout__theme_alpha_light .flexlayout__tabset_tab_divider_selected_after{width:12px;height:100%;margin:unset;border-radius:unset;background-color:var(--color-tab-selected-background)}.flexlayout__theme_alpha_light .flexlayout__tabset_tab_divider_inner{height:100%}.flexlayout__theme_alpha_light .flexlayout__tabset-selected{--tab-divider-bg: var(--flexlayout-tab-divider-bg, var(--color-tabset-background-selected))}.flexlayout__theme_alpha_light .flexlayout__tabset-maximized{--tab-divider-bg: var(--flexlayout-tab-divider-bg, var(--color-tabset-background-maximized))}.flexlayout__theme_alpha_light .flexlayout__tabset_tabbar_outer_top .flexlayout__tabset_tab_divider_selected_before .flexlayout__tabset_tab_divider_inner{border-bottom-right-radius:var(--tab-button-radius);background-color:var(--tab-divider-bg, var(--color-tabset-background))}.flexlayout__theme_alpha_light .flexlayout__tabset_tabbar_outer_top .flexlayout__tabset_tab_divider_selected_after .flexlayout__tabset_tab_divider_inner{border-bottom-left-radius:var(--tab-button-radius);background-color:var(--tab-divider-bg, var(--color-tabset-background))}.flexlayout__theme_alpha_light .flexlayout__tabset_tabbar_outer_bottom .flexlayout__tabset_tab_divider_selected_before .flexlayout__tabset_tab_divider_inner{border-top-right-radius:var(--tab-button-radius);background-color:var(--tab-divider-bg, var(--color-tabset-background))}.flexlayout__theme_alpha_light .flexlayout__tabset_tabbar_outer_bottom .flexlayout__tabset_tab_divider_selected_after .flexlayout__tabset_tab_divider_inner{border-top-left-radius:var(--tab-button-radius);background-color:var(--tab-divider-bg, var(--color-tabset-background))}.flexlayout__theme_alpha_light .flexlayout__border_button{border-radius:var(--border-button-radius);margin:3px;padding:3px 8px}.flexlayout__theme_alpha_light .flexlayout__border_button--selected{box-shadow:0 1px 2px #0000000d}.flexlayout__theme_alpha_light .flexlayout__border_sizer{padding-bottom:8px}.flexlayout__theme_alpha_light .flexlayout__popup_menu_container{box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f;border:1px solid var(--color-2);padding:4px}.flexlayout__theme_alpha_light .flexlayout__popup_menu_item{border-radius:4px;padding:6px 8px}.flexlayout__theme_alpha_light .flexlayout__popup_menu_item:hover{background-color:var(--color-1)}.flexlayout__theme_alpha_dark .flexlayout__tab{border:5px solid var(--color-background);border-radius:5px}.flexlayout__theme_alpha_dark .flexlayout__splitter_border .flexlayout__splitter_handle{visibility:visible}.flexlayout__theme_alpha_dark .flexlayout__tabset_tabbar_outer_top{border-bottom:unset}.flexlayout__theme_alpha_dark .flexlayout__tabset_tabbar_outer_bottom{border-top:unset}.flexlayout__theme_alpha_dark .flexlayout__tab_button{border-bottom:2px solid transparent;padding:4px 12px}.flexlayout__theme_alpha_dark .flexlayout__tab_button--selected:hover{background-color:var(--color-background)}.flexlayout__theme_alpha_dark .flexlayout__tabset_tabbar_outer_top .flexlayout__tab_button--selected{border-top-left-radius:var(--tab-button-radius);border-top-right-radius:var(--tab-button-radius)}.flexlayout__theme_alpha_dark .flexlayout__tabset_tabbar_outer_bottom .flexlayout__tab_button--selected{border-bottom-left-radius:var(--tab-button-radius);border-bottom-right-radius:var(--tab-button-radius)}.flexlayout__theme_alpha_dark .flexlayout__tabset_tab_spacer{width:12px}.flexlayout__theme_alpha_dark .flexlayout__tabset_tab_divider,.flexlayout__theme_alpha_dark .flexlayout__border_tab_divider{width:2px;border-radius:2px;height:.8em;margin:0 5px;background-color:#333}.flexlayout__theme_alpha_dark .flexlayout__tabset_tab_divider_selected_before,.flexlayout__theme_alpha_dark .flexlayout__tabset_tab_divider_selected_after{width:12px;height:100%;margin:unset;border-radius:unset;background-color:var(--color-tab-selected-background)}.flexlayout__theme_alpha_dark .flexlayout__tabset_tab_divider_inner{height:100%}.flexlayout__theme_alpha_dark .flexlayout__tabset-selected{--tab-divider-bg: var(--flexlayout-tab-divider-bg, var(--color-tabset-background-selected))}.flexlayout__theme_alpha_dark .flexlayout__tabset-maximized{--tab-divider-bg: var(--flexlayout-tab-divider-bg, var(--color-tabset-background-maximized))}.flexlayout__theme_alpha_dark .flexlayout__tabset_tabbar_outer_top .flexlayout__tabset_tab_divider_selected_before .flexlayout__tabset_tab_divider_inner{border-bottom-right-radius:var(--tab-button-radius);background-color:var(--tab-divider-bg, var(--color-tabset-background))}.flexlayout__theme_alpha_dark .flexlayout__tabset_tabbar_outer_top .flexlayout__tabset_tab_divider_selected_after .flexlayout__tabset_tab_divider_inner{border-bottom-left-radius:var(--tab-button-radius);background-color:var(--tab-divider-bg, var(--color-tabset-background))}.flexlayout__theme_alpha_dark .flexlayout__tabset_tabbar_outer_bottom .flexlayout__tabset_tab_divider_selected_before .flexlayout__tabset_tab_divider_inner{border-top-right-radius:var(--tab-button-radius);background-color:var(--tab-divider-bg, var(--color-tabset-background))}.flexlayout__theme_alpha_dark .flexlayout__tabset_tabbar_outer_bottom .flexlayout__tabset_tab_divider_selected_after .flexlayout__tabset_tab_divider_inner{border-top-left-radius:var(--tab-button-radius);background-color:var(--tab-divider-bg, var(--color-tabset-background))}.flexlayout__theme_alpha_dark .flexlayout__splitter{transition:background-color .2s}.flexlayout__theme_alpha_dark .flexlayout__splitter:hover{border-radius:0}.flexlayout__theme_alpha_dark .flexlayout__border_button{border-radius:var(--border-button-radius);margin:3px;padding:3px 8px}.flexlayout__theme_alpha_dark .flexlayout__border_button--selected{box-shadow:0 1px 2px #0003}.flexlayout__theme_alpha_dark .flexlayout__border_sizer{padding-bottom:8px}.flexlayout__theme_alpha_dark .flexlayout__popup_menu_container{box-shadow:0 10px 15px -3px #0006,0 4px 6px -2px #0003;border:1px solid var(--color-2);padding:4px}.flexlayout__theme_alpha_dark .flexlayout__popup_menu_item{border-radius:4px;padding:6px 8px}.flexlayout__theme_alpha_dark .flexlayout__popup_menu_item:hover{background-color:var(--color-1)}.flexlayout__theme_alpha_rounded .flexlayout__tabset{padding:2px;border-radius:12px}.flexlayout__theme_alpha_rounded .flexlayout__splitter_border .flexlayout__splitter_handle{visibility:visible}.flexlayout__theme_alpha_rounded .flexlayout__float_window{background-color:var(--color-2)}.flexlayout__theme_alpha_rounded .flexlayout__float_window_header{background-color:var(--color-2);border-bottom:none}.flexlayout__theme_alpha_rounded .flexlayout__tab_border{border-radius:12px}.flexlayout__theme_alpha_rounded .flexlayout__border_tab_contents{border-radius:var(--tab-button-radius)}.flexlayout__theme_alpha_rounded .flexlayout__tab_button{border-radius:var(--tab-button-radius);padding:4px 12px;margin:2px}.flexlayout__theme_alpha_rounded .flexlayout__border_button{border-radius:var(--border-button-radius);padding:4px 12px;margin:2px}.flexlayout__theme_alpha_rounded .flexlayout__border_sizer{padding-bottom:10px}.flexlayout__theme_alpha_rounded .flexlayout__popup_menu_container{border-radius:8px;box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;border:1px solid var(--color-2);padding:6px}.flexlayout__theme_alpha_rounded .flexlayout__popup_menu_item{border-radius:6px;padding:8px 12px}.flexlayout__theme_alpha_rounded .flexlayout__popup_menu_item:hover{background-color:var(--color-1)}.flexlayout__theme_aria .flexlayout__tab{border:5px solid var(--color-background);border-radius:5px}.flexlayout__theme_aria .flexlayout__splitter_border .flexlayout__splitter_handle{visibility:visible}.flexlayout__theme_aria .flexlayout__tabset_tabbar_outer_top{border-bottom:unset}.flexlayout__theme_aria .flexlayout__tabset_tabbar_outer_bottom{border-top:unset}.flexlayout__theme_aria .flexlayout__tab_button{border-bottom:2px solid transparent;padding:4px 12px}.flexlayout__theme_aria .flexlayout__tab_button--selected:hover{background-color:var(--color-background)}.flexlayout__theme_aria .flexlayout__tabset_tabbar_outer_top .flexlayout__tab_button--selected{border-top-left-radius:var(--tab-button-radius);border-top-right-radius:var(--tab-button-radius)}.flexlayout__theme_aria .flexlayout__tabset_tabbar_outer_bottom .flexlayout__tab_button--selected{border-bottom-left-radius:var(--tab-button-radius);border-bottom-right-radius:var(--tab-button-radius)}.flexlayout__theme_aria .flexlayout__tabset_tab_spacer{width:12px}.flexlayout__theme_aria .flexlayout__tabset_tab_divider,.flexlayout__theme_aria .flexlayout__border_tab_divider{width:2px;border-radius:2px;height:.8em;margin:0 5px;background-color:#ddd}.flexlayout__theme_aria .flexlayout__tabset_tab_divider_selected_before,.flexlayout__theme_aria .flexlayout__tabset_tab_divider_selected_after{width:12px;height:100%;margin:unset;border-radius:unset;background-color:var(--color-tab-selected-background)}.flexlayout__theme_aria .flexlayout__tabset_tab_divider_inner{height:100%}.flexlayout__theme_aria .flexlayout__tabset-selected{--tab-divider-bg: var(--flexlayout-tab-divider-bg, var(--color-tabset-background-selected))}.flexlayout__theme_aria .flexlayout__tabset-maximized{--tab-divider-bg: var(--flexlayout-tab-divider-bg, var(--color-tabset-background-maximized))}.flexlayout__theme_aria .flexlayout__tabset_tabbar_outer_top .flexlayout__tabset_tab_divider_selected_before .flexlayout__tabset_tab_divider_inner{border-bottom-right-radius:var(--tab-button-radius);background-color:var(--tab-divider-bg, var(--color-tabset-background))}.flexlayout__theme_aria .flexlayout__tabset_tabbar_outer_top .flexlayout__tabset_tab_divider_selected_after .flexlayout__tabset_tab_divider_inner{border-bottom-left-radius:var(--tab-button-radius);background-color:var(--tab-divider-bg, var(--color-tabset-background))}.flexlayout__theme_aria .flexlayout__tabset_tabbar_outer_bottom .flexlayout__tabset_tab_divider_selected_before .flexlayout__tabset_tab_divider_inner{border-top-right-radius:var(--tab-button-radius);background-color:var(--tab-divider-bg, var(--color-tabset-background))}.flexlayout__theme_aria .flexlayout__tabset_tabbar_outer_bottom .flexlayout__tabset_tab_divider_selected_after .flexlayout__tabset_tab_divider_inner{border-top-left-radius:var(--tab-button-radius);background-color:var(--tab-divider-bg, var(--color-tabset-background))}.flexlayout__theme_aria .flexlayout__border_button{border-radius:var(--border-button-radius);margin:3px;padding:3px 8px}.flexlayout__theme_aria .flexlayout__border_button--selected{box-shadow:0 1px 2px #0000000d}.flexlayout__theme_aria .flexlayout__border_sizer{padding-bottom:8px}.flexlayout__theme_aria .flexlayout__popup_menu_container{box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f;border:1px solid var(--color-2);padding:4px}.flexlayout__theme_aria .flexlayout__popup_menu_item{border-radius:4px;padding:6px 8px}.flexlayout__theme_aria .flexlayout__popup_menu_item:hover{background-color:var(--color-1)}';function W1(e){return!e||!e.enabled||e.authoring.locked?null:e.id}function H1(e,t,r=3){return Math.hypot(t.x-e.x,t.y-e.y)>=r}function $1(e,t,r,o=12){return e>=3&&Math.hypot(r.x-t.x,r.y-t.y)<=o}function Y1(e){return[...e].sort((t,r)=>r.priority-t.priority)}function X1(e){e.forEach((t,r)=>{t.priority=r})}function G1(e){return e==="draw-brush"}function Mh(e){return[...e].sort((t,r)=>t.priority-r.priority)}const K1=[{id:"nw",x:0,y:0},{id:"n",x:.5,y:0},{id:"ne",x:1,y:0},{id:"e",x:1,y:.5},{id:"se",x:1,y:1},{id:"s",x:.5,y:1},{id:"sw",x:0,y:1},{id:"w",x:0,y:.5}];function q1({geometry:e,canvas:t}){const r=e.operation==="add"?"white":"black";if(e.type==="rect")return s.jsx("rect",{x:e.x*t.width,y:e.y*t.height,width:e.width*t.width,height:e.height*t.height,fill:r});if(e.type==="ellipse")return s.jsx("ellipse",{cx:(e.x+e.width/2)*t.width,cy:(e.y+e.height/2)*t.height,rx:e.width*t.width/2,ry:e.height*t.height/2,fill:r});if(e.type==="polygon")return s.jsx("polygon",{points:e.points.map(c=>`${c.x*t.width},${c.y*t.height}`).join(" "),fill:r});if(e.type==="raster_mask"){const c=`raster-${e.id}`;return s.jsxs(s.Fragment,{children:[s.jsx("defs",{children:s.jsx("mask",{id:c,maskUnits:"userSpaceOnUse",x:"0",y:"0",width:t.width,height:t.height,children:s.jsx("image",{href:e.data_url,x:e.x*t.width,y:e.y*t.height,width:e.width*t.width,height:e.height*t.height,preserveAspectRatio:"none"})})}),s.jsx("rect",{width:t.width,height:t.height,fill:r,mask:`url(#${c})`})]})}const o=e.shape==="square"?"square":"round",n=e.size*Math.min(t.width,t.height),i=`bv-brush-soft-${e.id}`,a=(1-e.hardness)*n/6,l=a>.05?`url(#${i})`:void 0;if(e.points.length===1){const c=e.points[0],u=n*c.pressure,d=e.shape==="square"?s.jsx("rect",{x:c.x*t.width-u/2,y:c.y*t.height-u/2,width:u,height:u,fill:r,fillOpacity:e.opacity,filter:l}):s.jsx("circle",{cx:c.x*t.width,cy:c.y*t.height,r:u/2,fill:r,fillOpacity:e.opacity,filter:l}),f=u*e.hardness;return s.jsxs(s.Fragment,{children:[s.jsx("defs",{children:l&&s.jsx("filter",{id:i,filterUnits:"userSpaceOnUse",x:"0",y:"0",width:t.width,height:t.height,children:s.jsx("feGaussianBlur",{stdDeviation:a})})}),d,f>0&&(e.shape==="square"?s.jsx("rect",{x:c.x*t.width-f/2,y:c.y*t.height-f/2,width:f,height:f,fill:r,fillOpacity:e.opacity}):s.jsx("circle",{cx:c.x*t.width,cy:c.y*t.height,r:f/2,fill:r,fillOpacity:e.opacity}))]})}if((e.pressure_mode??"constant")==="constant"){const c=e.points.map((u,d)=>`${d?"L":"M"}${u.x*t.width},${u.y*t.height}`).join(" ");return s.jsxs(s.Fragment,{children:[s.jsx("defs",{children:l&&s.jsx("filter",{id:i,filterUnits:"userSpaceOnUse",x:"0",y:"0",width:t.width,height:t.height,children:s.jsx("feGaussianBlur",{stdDeviation:a})})}),s.jsx("path",{d:c,fill:"none",stroke:r,strokeOpacity:e.opacity,strokeWidth:n,strokeLinecap:o,strokeLinejoin:o==="round"?"round":"miter",filter:l}),e.hardness>0&&s.jsx("path",{d:c,fill:"none",stroke:r,strokeOpacity:e.opacity,strokeWidth:n*e.hardness,strokeLinecap:o,strokeLinejoin:o==="round"?"round":"miter"})]})}return s.jsx(s.Fragment,{children:e.points.slice(1).map((c,u)=>{const d=e.points[u],f=(d.pressure+c.pressure)/2;return s.jsx("line",{x1:d.x*t.width,y1:d.y*t.height,x2:c.x*t.width,y2:c.y*t.height,stroke:r,strokeOpacity:e.opacity,strokeWidth:n*f,strokeLinecap:o},u)})})}function J1({geometry:e,canvas:t,cursor:r,activePolygon:o}){const n=`tool-preview-shape ${e.operation}`;if(e.type==="rect"||e.type==="raster_mask")return s.jsx("rect",{className:n,x:e.x*t.width,y:e.y*t.height,width:e.width*t.width,height:e.height*t.height});if(e.type==="ellipse")return s.jsx("ellipse",{className:n,cx:(e.x+e.width/2)*t.width,cy:(e.y+e.height/2)*t.height,rx:e.width*t.width/2,ry:e.height*t.height/2});if(e.type==="polygon"){const a=[...e.points,...o&&r?[r]:[]],l=o?s.jsx("polyline",{className:n,points:a.map(c=>`${c.x*t.width},${c.y*t.height}`).join(" ")}):s.jsx("polygon",{className:n,points:a.map(c=>`${c.x*t.width},${c.y*t.height}`).join(" ")});return s.jsxs(s.Fragment,{children:[l,e.points.map((c,u)=>s.jsx("circle",{className:`tool-preview-vertex ${e.operation}`,cx:c.x*t.width,cy:c.y*t.height,r:"4"},u))]})}const i=e.points.map((a,l)=>`${l?"L":"M"}${a.x*t.width},${a.y*t.height}`).join(" ");return s.jsx("path",{className:n,d:i,strokeWidth:e.size*Math.min(t.width,t.height),strokeLinecap:e.shape==="square"?"square":"round"})}function Z1({region:e,geometries:t,canvas:r,opacity:o,resolved:n}){const i=k0(t).filter(u=>u.enabled&&(n||u.geometries.some((d,f)=>sr(d,f).visible))),a=`bv-feather-${e.id}`,l=Math.min(64,Math.round(e.mask.feather*Math.min(r.width,r.height))),c=l/3;return s.jsxs("g",{opacity:o,children:[n&&l>0&&s.jsx("defs",{children:s.jsx("filter",{id:a,filterUnits:"userSpaceOnUse",x:"0",y:"0",width:r.width,height:r.height,children:s.jsx("feGaussianBlur",{stdDeviation:c})})}),s.jsx("g",{filter:n&&l>0?`url(#${a})`:void 0,children:i.map(u=>{const d=`bv-mask-${e.id}-${u.id}`;return s.jsxs("g",{children:[s.jsx("defs",{children:s.jsxs("mask",{id:d,maskUnits:"userSpaceOnUse",x:"0",y:"0",width:r.width,height:r.height,children:[s.jsx("rect",{width:r.width,height:r.height,fill:"black"}),u.geometries.filter((f,p)=>f.enabled!==!1&&(n||sr(f,p).visible)).map(f=>s.jsx(q1,{geometry:f,canvas:r},f.id))]})}),s.jsx("rect",{width:r.width,height:r.height,fill:e.authoring.color,mask:`url(#${d})`})]},u.id)})})]})}function Q1(e){const{document:t,selectedLayerId:r,selectedRegionId:o}=e,n=m.useRef(null),i=m.useRef(null),[a,l]=m.useState({width:1,height:1}),[c,u]=m.useState(e.initialView.zoom),[d,f]=m.useState({x:e.initialView.panX,y:e.initialView.panY}),[p,g]=m.useState(e.initialView.fit),[x,w]=m.useState(!1),k=m.useCallback((O=a)=>Math.max(.02,Math.min(1,(O.width-40)/t.canvas.width,(O.height-40)/t.canvas.height)),[t.canvas.height,t.canvas.width,a]),b=m.useCallback(()=>{u(k()),f({x:0,y:0}),g(!0)},[k]);m.useEffect(()=>{const O=n.current;if(!O)return;const E=new ResizeObserver(A=>{const C=A[0].contentRect,R={width:C.width,height:C.height};l(R),p&&(u(Math.max(.02,Math.min(1,(R.width-40)/t.canvas.width,(R.height-40)/t.canvas.height))),f({x:0,y:0}))});return E.observe(O),()=>E.disconnect()},[t.canvas.height,t.canvas.width,p]),m.useEffect(()=>e.onView({zoom:c,panX:d.x,panY:d.y,fit:p}),[p,d.x,d.y,e.onView,c]),m.useEffect(()=>{const O=A=>{const C=A.target;A.code!=="Space"||C instanceof HTMLInputElement||C instanceof HTMLTextAreaElement||C instanceof HTMLSelectElement||C?.isContentEditable||(A.preventDefault(),A.stopImmediatePropagation(),w(!0))},E=A=>{A.code==="Space"&&(A.preventDefault(),A.stopImmediatePropagation(),w(!1),i.current=null)};return window.addEventListener("keydown",O,!0),window.addEventListener("keyup",E,!0),()=>{window.removeEventListener("keydown",O,!0),window.removeEventListener("keyup",E,!0)}},[]);const h=O=>{let E=[...O.geometry];if(e.draft&&O.id===o){const A=new Set(e.draft.map(C=>C.id));E=E.map(C=>A.has(C.id)?e.draft.find(R=>R.id===C.id):C);for(const C of e.draft)E.some(R=>R.id===C.id)||E.push(C)}return!e.binaryMaskPreview&&e.isolate&&r&&(E=E.filter(A=>Pt(A)===r)),E},v=e.brush.size*Math.min(t.canvas.width,t.canvas.height)/t.canvas.width*100,_=O=>{O.preventDefault();const E=O.currentTarget.getBoundingClientRect(),A=O.clientX-E.left,C=O.clientY-E.top,R=Math.max(.02,Math.min(8,c*Math.exp(-O.deltaY*.0015))),M=R/c;f(D=>({x:A-E.width/2-(A-E.width/2-D.x)*M,y:C-E.height/2-(C-E.height/2-D.y)*M})),u(R),g(!1)},y=O=>{O.button!==1&&!(O.button===0&&x)||(O.preventDefault(),O.stopPropagation(),O.currentTarget.setPointerCapture(O.pointerId),i.current={x:O.clientX,y:O.clientY,panX:d.x,panY:d.y},g(!1))},T=O=>{i.current&&(O.preventDefault(),O.stopPropagation(),f({x:i.current.panX+O.clientX-i.current.x,y:i.current.panY+O.clientY-i.current.y}))},S=O=>{i.current&&(O.preventDefault(),O.stopPropagation(),i.current=null)},z=a.width/2-t.canvas.width*c/2+d.x,N=a.height/2-t.canvas.height*c/2+d.y,P=10/c,B=24/c;return s.jsx("section",{className:"bv-regional-work",children:s.jsxs("div",{ref:n,className:`artboard-viewport ${x?"pan-ready":""}`,onWheel:_,onPointerDownCapture:y,onPointerMoveCapture:T,onPointerUpCapture:S,onPointerCancelCapture:S,children:[s.jsx(T0,{tool:e.tool,brush:e.brush,canSubtract:e.canSubtract,canvas:t.canvas,onTool:e.onTool,onBrush:e.onBrush}),s.jsx("div",{className:"artboard-stage",style:{width:t.canvas.width,height:t.canvas.height,transform:`translate(${z}px, ${N}px) scale(${c})`},children:s.jsxs("div",{className:`bv-regional-canvas tool-${e.tool}`,style:{width:t.canvas.width,height:t.canvas.height},onPointerDown:e.binaryMaskPreview?void 0:e.onPointerDown,onPointerMove:e.binaryMaskPreview?void 0:e.onPointerMove,onPointerUp:e.binaryMaskPreview?void 0:e.onPointerUp,onPointerCancel:e.binaryMaskPreview?void 0:e.onPointerCancel,onPointerLeave:e.onPointerLeave,onDoubleClick:e.binaryMaskPreview?void 0:e.onDoubleClick,children:[e.background&&!e.binaryMaskPreview&&s.jsx("div",{className:"bv-background-image",style:{backgroundImage:`linear-gradient(#0002,#0002), url(${JSON.stringify(e.background)})`,opacity:e.backgroundOpacity}}),s.jsx("svg",{className:"bv-composition",style:e.binaryMaskPreview?{background:"black"}:void 0,viewBox:`0 0 ${t.canvas.width} ${t.canvas.height}`,preserveAspectRatio:"none",children:Y1(t.regions.filter(O=>O.enabled&&(e.binaryMaskPreview||O.authoring.visible))).map(O=>s.jsx(Z1,{region:e.binaryMaskPreview?{...O,authoring:{...O.authoring,color:"#FFFFFF"}}:O,geometries:h(O),canvas:t.canvas,opacity:e.binaryMaskPreview?1:e.displayOpacity,resolved:e.binaryMaskPreview},O.id))}),!e.binaryMaskPreview&&e.draft&&s.jsx("svg",{className:"bv-tool-preview",viewBox:`0 0 ${t.canvas.width} ${t.canvas.height}`,preserveAspectRatio:"none",children:e.draft.map(O=>s.jsx(J1,{geometry:O,canvas:t.canvas,cursor:e.cursor,activePolygon:e.tool.startsWith("polygon")},O.id))}),!e.binaryMaskPreview&&e.selectionBounds&&s.jsxs("svg",{className:"bv-selection-overlay",viewBox:`0 0 ${t.canvas.width} ${t.canvas.height}`,preserveAspectRatio:"none",children:[s.jsx("rect",{className:"brush-bounds",x:e.selectionBounds.x*t.canvas.width,y:e.selectionBounds.y*t.canvas.height,width:e.selectionBounds.width*t.canvas.width,height:e.selectionBounds.height*t.canvas.height}),K1.map(O=>{const E=(e.selectionBounds.x+e.selectionBounds.width*O.x)*t.canvas.width,A=(e.selectionBounds.y+e.selectionBounds.height*O.y)*t.canvas.height;return s.jsxs("g",{"data-handle":O.id,className:`resize-handle resize-handle-${O.id}`,children:[s.jsx("rect",{className:"resize-handle-hit",x:E-B/2,y:A-B/2,width:B,height:B}),s.jsx("rect",{className:"resize-handle-visible",x:E-P/2,y:A-P/2,width:P,height:P,rx:2/c})]},O.id)}),e.draft&&s.jsxs("text",{className:"tool-preview-size",style:{fontSize:12/c},x:(e.selectionBounds.x+e.selectionBounds.width)*t.canvas.width-4/c,y:(e.selectionBounds.y+e.selectionBounds.height)*t.canvas.height-7/c,children:[Math.round(e.selectionBounds.width*t.canvas.width)," × ",Math.round(e.selectionBounds.height*t.canvas.height)," px"]})]}),!e.binaryMaskPreview&&e.cursor&&e.tool.startsWith("brush")&&s.jsx("div",{className:`brush-cursor ${e.brush.shape}`,style:{left:`${e.cursor.x*100}%`,top:`${e.cursor.y*100}%`,width:`${v}%`,aspectRatio:"1"},children:s.jsx("i",{style:{width:`${e.brush.hardness*100}%`,height:`${e.brush.hardness*100}%`}})})]})}),s.jsxs("div",{className:"zoom-controls",onWheel:O=>O.stopPropagation(),children:[s.jsx(ne,{intent:"ghost",title:"Zoom out",onClick:()=>{u(O=>Math.max(.02,O/1.25)),g(!1)},children:"−"}),s.jsxs(ne,{intent:"ghost",title:"100%",onClick:()=>{u(1),f({x:0,y:0}),g(!1)},children:[Math.round(c*100)," %"]}),s.jsx(ne,{intent:"ghost",title:"Zoom in",onClick:()=>{u(O=>Math.min(8,O*1.25)),g(!1)},children:"+"}),s.jsx(ne,{intent:"ghost",title:"Fit to view",onClick:b,children:"Fit"})]})]})})}const Um="BV.NodePack.Completion.Enabled",Vm="BV.NodePack.Completion.Datasets",Wm="BV.NodePack.Completion.Placement",Hm="bv-nodepack:completion-enabled",xa="bv-completion-enabled-changed",ya="bv-completion-placement-changed",Nf="bv-nodepack:completion-datasets",$m="bv-nodepack:completion-placement",us="bv-completion-datasets-changed";let Ym=null,Xm=null,Gm=null;function td(){try{return localStorage.getItem($m)==="field"?"field":"caret"}catch{return"caret"}}function ek(e){Gm=e}function Km(e,t=!1){const r=e==="field"?"field":"caret";try{localStorage.setItem($m,r)}catch{}t&&Gm?.(r),window.dispatchEvent(new CustomEvent(ya,{detail:{placement:r}}))}function qm(){const[e,t]=m.useState(td);return m.useEffect(()=>{const r=o=>t(o.detail?.placement==="field"?"field":"caret");return window.addEventListener(ya,r),()=>window.removeEventListener(ya,r)},[]),e}function Of(){try{return localStorage.getItem(Hm)!=="false"}catch{return!0}}function tk(e){Ym=e}function Jm(e,t=!1){try{localStorage.setItem(Hm,String(e))}catch{}t&&Ym?.(e),window.dispatchEvent(new CustomEvent(xa,{detail:{enabled:e}}))}function Zm(){const[e,t]=m.useState(Of);return m.useEffect(()=>{const r=o=>t(!!o.detail?.enabled);return window.addEventListener(xa,r),()=>window.removeEventListener(xa,r)},[]),e}function Qm(){try{const e=localStorage.getItem(Nf);if(e==null)return null;const t=JSON.parse(e);return Array.isArray(t)?t.map(String):null}catch{return null}}function rk(e){Xm=e}function ex(e,t=!1){const r=[...new Set(e.map(String))];try{localStorage.setItem(Nf,JSON.stringify(r))}catch{}t&&Xm?.(JSON.stringify(r)),window.dispatchEvent(new CustomEvent(us,{detail:{datasets:r}}))}function tx(e){if(e==null||e===""){try{localStorage.removeItem(Nf)}catch{}window.dispatchEvent(new CustomEvent(us,{detail:{datasets:null}}));return}try{const t=typeof e=="string"?JSON.parse(e):e;Array.isArray(t)&&ex(t.map(String))}catch{}}function ok(){const[e,t]=m.useState(Qm);return m.useEffect(()=>{const r=o=>t(o.detail?.datasets??null);return window.addEventListener(us,r),()=>window.removeEventListener(us,r)},[]),e}function rx({onSelectionChange:e}={}){const t=ok(),[r,o]=m.useState([]),[n,i]=m.useState(""),a=async()=>{try{const g=await fetch("/bv_nodepack/completion/status");if(!g.ok)throw new Error(`HTTP ${g.status}`);const x=await g.json();o(Array.isArray(x?.datasets)?x.datasets:[]),i("")}catch(g){i(g instanceof Error?g.message:String(g))}};m.useEffect(()=>{a()},[]);const l=t??r.map(g=>g.id),c=g=>{ex(g,!0),e?.(g)},u=g=>c(l.includes(g)?l.filter(x=>x!==g):[...l,g]),d=(g,x)=>{const w=l.indexOf(g),k=w+x;if(w<0||k<0||k>=l.length)return;const b=[...l];[b[w],b[k]]=[b[k],b[w]],c(b)},f=new Map(r.map(g=>[g.id,g])),p=[...l.map(g=>f.get(g)).filter(g=>!!g),...r.filter(g=>!l.includes(g.id))];return s.jsxs("div",{className:"completion-dataset-picker",children:[s.jsx("strong",{children:"Completion Data"}),s.jsx("small",{children:"Topmost enabled dataset wins when tags are duplicated."}),p.map(g=>{const x=l.indexOf(g.id),w=x>=0;return s.jsxs("div",{children:[s.jsx(Qr,{label:g.name,help:`${(g.bytes/1048576).toFixed(1)} MiB`,checked:w,onValue:()=>u(g.id)}),s.jsxs("span",{className:"dataset-order",children:[s.jsx(ne,{intent:"ghost",iconOnly:!0,disabled:!w||x===0,title:"Move up",onClick:()=>d(g.id,-1),children:"↑"}),s.jsx(ne,{intent:"ghost",iconOnly:!0,disabled:!w||x===l.length-1,title:"Move down",onClick:()=>d(g.id,1),children:"↓"})]})]},g.id)}),!r.length&&!n&&s.jsx("small",{children:"No local CSV/TSV dataset found."}),n&&s.jsxs("small",{className:"dataset-error",children:["Could not load datasets: ",n]}),s.jsx(ne,{onClick:()=>void a(),children:"Reload List"})]})}function nk(e){const t=Zm(),r=qm(),o=e.openMenu,n=m.useRef(null),{menuOverflow:i}=jm(),a=m.useRef(null),l=m.useRef(null);m.useEffect(()=>{const d=f=>{n.current?.contains(f.target)||e.onOpenMenu(null)};return window.addEventListener("pointerdown",d),()=>window.removeEventListener("pointerdown",d)},[e.onOpenMenu]);const c=(d,f,p)=>s.jsx(sh,{open:o===d,onOpen:g=>e.onOpenMenu(g?d:null),trigger:({toggle:g})=>s.jsxs(ne,{intent:"ghost",density:"compact","aria-label":f,title:f,"aria-expanded":o===d,onClick:g,children:[s.jsx("span",{className:"editor-menu-label-full",children:f}),s.jsx("span",{className:"editor-menu-label-short","aria-hidden":"true",children:f==="?"?f:f[0]})]}),children:p}),u=s.jsxs(s.Fragment,{children:[c("file","File",s.jsxs("div",{className:"bv-menu-stack",children:[s.jsx(ne,{intent:"ghost",onClick:()=>{e.onExportDocument(),e.onOpenMenu(null)},children:"Export Document"}),s.jsx(ne,{intent:"ghost",onClick:()=>a.current?.click(),children:"Load and Replace Document"}),s.jsx("hr",{}),s.jsx(ne,{intent:"ghost",onClick:()=>{e.onExportRegions(),e.onOpenMenu(null)},children:"Export Regions"}),s.jsx(ne,{intent:"ghost",onClick:()=>l.current?.click(),children:"Add Regions"})]})),c("edit","Edit",s.jsxs("div",{className:"bv-menu-stack",children:[s.jsxs(ne,{intent:"ghost",disabled:!e.canUndo,onClick:e.onUndo,children:["Undo ",s.jsx("kbd",{children:"Ctrl Z"})]}),s.jsxs(ne,{intent:"ghost",disabled:!e.canRedo,onClick:e.onRedo,children:["Redo ",s.jsx("kbd",{children:"Ctrl Shift Z"})]}),s.jsx(Qr,{label:"Prompt Autocomplete",help:"Optional. Disable it when using another completion extension.",checked:t,onValue:d=>Jm(d,!0)}),s.jsx(tt,{label:"Popup Position",value:r,onValue:d=>Km(d,!0),options:[{value:"caret",label:"At Caret"},{value:"field",label:"Below Text Field"}]}),s.jsx(rx,{})]})),c("view","View",s.jsxs("div",{className:"bv-menu-stack",children:[s.jsx(Bt,{label:"Mask Display",value:e.displayOpacity,min:.05,max:1,step:.05,unit:"×",onValue:e.onDisplayOpacity}),s.jsx(Bt,{label:"Background Image",value:e.backgroundOpacity,min:0,max:1,step:.05,unit:"×",onValue:e.onBackgroundOpacity}),s.jsx(Qr,{label:"Binary Mask Preview",checked:e.binaryMaskPreview,onValue:e.onToggleBinaryMaskPreview}),s.jsx(Qr,{label:"Isolate Selection",checked:e.isolate,disabled:!e.hasSelection,onValue:e.onToggleIsolate}),s.jsx("small",{children:"Affects the editor display only."})]})),c("artboard","Artboard",s.jsxs("div",{className:"bv-menu-stack",children:[s.jsx(Bt,{label:"Width",value:e.canvas.width,min:1,max:32768,step:1,unit:"px",slider:!1,onValue:d=>e.onCanvas({...e.canvas,width:d})}),s.jsx(Bt,{label:"Height",value:e.canvas.height,min:1,max:32768,step:1,unit:"px",slider:!1,onValue:d=>e.onCanvas({...e.canvas,height:d})})]})),c("layers","Layers",s.jsxs("div",{className:"bv-menu-stack",children:[s.jsxs(ne,{intent:"ghost",disabled:!e.canMergeLayers,onClick:()=>{e.onMergeLayers(),e.onOpenMenu(null)},children:["Merge Selected Layers ",s.jsx("kbd",{children:"Ctrl E"})]}),s.jsx("small",{children:"Ctrl-click or Shift-click layers in one region to select them."})]})),c("help","?",s.jsxs("div",{className:"help-menu",children:[s.jsx(lh,{items:[{term:"Ctrl Z",description:"Undo"},{term:"Ctrl Shift Z",description:"Redo"},{term:"Ctrl E",description:"Merge selected layers"},{term:"Escape",description:"Cancel action"},{term:"Delete",description:"Delete layer"},{term:"Shift + Resize",description:"Scale proportionally"},{term:"Space + Drag",description:"Pan artboard"}]}),s.jsx(lh,{items:[{term:"Click",description:"Select layer"},{term:"Ctrl + Click",description:"Add/remove layer selection"},{term:"Shift + Click",description:"Select layer range"},{term:"Drag",description:"Draw or move"},{term:"Mouse wheel",description:"Zoom under cursor"}]})]}))]});return s.jsxs("div",{className:"editor-menus",ref:n,children:[i?s.jsx(sh,{trigger:({toggle:d})=>s.jsx(ne,{intent:"ghost",density:"compact","aria-label":"Editor menus",onClick:d,children:"•••"}),children:s.jsx("div",{className:"editor-menus-overflow-panel",children:u})}):u,s.jsx("input",{hidden:!0,ref:a,type:"file",accept:"application/json,.json",onChange:d=>{const f=d.target.files?.[0];f&&e.onImportDocument(f),d.target.value=""}}),s.jsx("input",{hidden:!0,ref:l,type:"file",accept:"application/json,.json",onChange:d=>{const f=d.target.files?.[0];f&&e.onImportRegions(f),d.target.value=""}})]})}function ox(e,t,r,o=20){const n=Math.max(0,Math.min(e.length,t)),l=e.slice(0,n).match(/(?:^|[,\n;])\s*([^,\n;]*)$/)?.[1]??"",c=l.match(/^\s*/)?.[0].length??0,u=l.slice(c);if(u.trim().length<2)return null;const d=n-l.length+c;return{...r,text:e,caret:n,term:u,start:d,end:n,limit:o}}function nx(e,t,r){const o=e.slice(t.end).match(/^\s*[,;\n]/)?"":", ",n=`${r.insertText}${o}`;return{text:e.slice(0,t.start)+n+e.slice(t.end),caret:t.start+n.length}}async function ix(e,t,r){const o=await Promise.allSettled(t.map(i=>i.suggest(e,r)));if(r.aborted)return[];const n=new Map;return o.forEach(i=>{i.status==="fulfilled"&&i.value.forEach(a=>{n.has(a.id)||n.set(a.id,a)})}),[...n.values()].sort((i,a)=>(a.score??0)-(i.score??0)||i.label.localeCompare(a.label)).slice(0,e.limit)}const ax={id:"bv-local-tags",async suggest(e,t){const r=await fetch("/bv_nodepack/completion/search",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({term:e.term.trim(),limit:e.limit,datasets:Qm()}),signal:t});if(!r.ok)return[];const o=await r.json();return(Array.isArray(o?.results)?o.results:[]).flatMap(i=>{const a=String(i?.insert_text??"").trim();return a?[{id:String(i?.id??`local:${a}`),insertText:a,label:String(i?.label??a),source:String(i?.source??"BV Local Tags"),detail:i?.detail||void 0,category:i?.category||void 0,score:Number(i?.score)||0,metadata:i?.metadata&&typeof i.metadata=="object"?i.metadata:{}}]:[]})}},ik=["fontFamily","fontSize","fontStyle","fontWeight","letterSpacing","lineHeight","textTransform","textIndent","textAlign","wordSpacing","paddingTop","paddingRight","paddingBottom","paddingLeft","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth"];function ak(e,t=e.selectionStart??e.value.length){const r=e.getBoundingClientRect(),o=window.getComputedStyle(e),n=e.offsetWidth||r.width,i=e.offsetHeight||r.height,a=r.width/n,l=r.height/i,c=document.createElement("div");c.setAttribute("aria-hidden","true"),Object.assign(c.style,{position:"fixed",visibility:"hidden",pointerEvents:"none",left:"0",top:"0",width:`${n}px`,height:`${i}px`,boxSizing:o.boxSizing,whiteSpace:"pre-wrap",overflowWrap:"break-word",overflow:"hidden"}),ik.forEach(w=>{c.style[w]=o[w]}),c.textContent=e.value.slice(0,t);const u=document.createElement("span");u.textContent=e.value.slice(t,t+1)||"​",c.append(u),document.body.append(c),c.scrollTop=e.scrollTop,c.scrollLeft=e.scrollLeft;const d=c.getBoundingClientRect(),f=u.getBoundingClientRect(),p=Number.parseFloat(o.lineHeight)||Number.parseFloat(o.fontSize)*1.2||16;c.remove();const g=r.left+(f.left-d.left)*a,x=r.top+(f.top-d.top)*l;return{left:g,top:x,bottom:x+p*l}}function ds(e,t,r=210){const i=e.getBoundingClientRect(),a=t==="caret"?ak(e):{left:i.left,top:i.top,bottom:i.bottom},l=t==="caret"?Math.min(460,Math.max(320,i.width*.8)):i.width,c=Math.max(180,Math.min(l,window.innerWidth-4*2)),u=Math.max(4,Math.min(a.left,window.innerWidth-c-4)),d=a.bottom+4,f=d+r<=window.innerHeight-4?d:Math.max(4,a.top-r-4);return{left:u,top:f,width:c}}function lx({suggestions:e,selected:t,position:r,onAccept:o,onHeight:n}){const i=m.useRef(null);return m.useLayoutEffect(()=>{i.current&&n?.(i.current.offsetHeight)}),s.jsx("div",{ref:i,className:"bv-completion-popup bv-global-completion-popup",style:r,role:"listbox",children:e.map((a,l)=>s.jsxs(ne,{density:"compact",intent:"ghost",className:l===t?"active":"",onPointerDown:c=>{c.preventDefault(),o(l)},children:[s.jsx("span",{children:a.label}),s.jsx("small",{children:[a.category,a.detail,a.source].filter(Boolean).join(" · ")})]},a.id))})}function fs({value:e,onValue:t,completionContext:r,onKeyDown:o,onBlur:n,onSelect:i,...a}){const l=Zm(),c=qm(),u=m.useRef(null),[d,f]=m.useState([]),[p,g]=m.useState(0),[x,w]=m.useState(null),k=m.useRef(null),b=m.useRef(null),h=m.useRef(null),v=m.useRef(210),_=m.useRef(()=>{}),y=()=>{b.current?.abort(),f([]),w(null)},T=()=>{const N=u.current;N&&w(ds(N,c,v.current))},S=(N,P,B=P)=>{if(!l||P!==B)return y();h.current!=null&&window.clearTimeout(h.current),b.current?.abort();const O=ox(N,P,r);if(k.current=O,!O)return y();const E=new AbortController;b.current=E,h.current=window.setTimeout(async()=>{const A=await ix(O,[ax],E.signal);if(E.signal.aborted)return;const C=u.current;f(A),g(0),w(A.length&&C?ds(C,c):null)},120)};_.current=S;const z=(N=p)=>{const P=k.current,B=d[N];if(!P||!B)return;const O=nx(e,P,B);t(O.text),y(),requestAnimationFrame(()=>{u.current?.focus(),u.current?.setSelectionRange(O.caret,O.caret)})};return m.useEffect(()=>{l||y()},[l]),m.useEffect(()=>{const N=()=>{const P=u.current;P&&document.activeElement===P&&_.current(P.value,P.selectionStart,P.selectionEnd)};return document.addEventListener("selectionchange",N),()=>document.removeEventListener("selectionchange",N)},[]),m.useEffect(()=>{x&&T()},[c]),m.useEffect(()=>{if(x)return window.addEventListener("scroll",T,!0),window.addEventListener("resize",T),()=>{window.removeEventListener("scroll",T,!0),window.removeEventListener("resize",T)}},[!!x,c]),m.useEffect(()=>()=>{b.current?.abort(),h.current!=null&&window.clearTimeout(h.current)},[]),s.jsxs(s.Fragment,{children:[s.jsx("span",{className:"bv-textarea-shell resize-vertical",children:s.jsx(v0,{...a,ref:u,value:e,onChange:N=>{t(N.target.value),S(N.target.value,N.target.selectionStart,N.target.selectionEnd)},onSelect:N=>{S(N.currentTarget.value,N.currentTarget.selectionStart,N.currentTarget.selectionEnd),i?.(N)},onKeyDown:N=>{if(d.length){if(N.key==="ArrowDown"||N.key==="ArrowUp"){N.preventDefault(),N.stopPropagation(),g(P=>(P+(N.key==="ArrowDown"?1:-1)+d.length)%d.length);return}if(N.key==="Enter"||N.key==="Tab"){N.preventDefault(),N.stopPropagation(),z();return}if(N.key==="Escape"){N.preventDefault(),N.stopPropagation(),y();return}}o?.(N)},onBlur:N=>{window.setTimeout(y,120),n?.(N)}})}),l&&x&&s.jsx(lx,{suggestions:d,selected:p,position:x,onAccept:z,onHeight:N=>{Math.abs(N-v.current)<1||(v.current=N,T())}})]})}function Ho({label:e,help:t,value:r,onChange:o,children:n,disabled:i,className:a=""}){const l=Re.Children.toArray(n).flatMap(c=>Re.isValidElement(c)?[{value:String(c.props.value??c.props.children??""),label:String(c.props.children??c.props.value??""),disabled:c.props.disabled}]:[]);return s.jsx("div",{className:a,children:s.jsx(tt,{label:e,help:t,value:r,onValue:o,options:l,disabled:i})})}function Tn({onChange:e,...t}){return s.jsx(Bt,{...t,onValue:e})}const Ah=({stacks:e})=>s.jsxs(s.Fragment,{children:[s.jsx("option",{value:"",children:"None"}),e.map(t=>s.jsx("option",{value:t.id,children:t.name},t.id))]}),Pc=({title:e,scope:t,value:r,open:o,onOpen:n,onChange:i})=>s.jsx(os,{value:o?[t]:[],onValue:a=>n(a.includes(t)),items:[{id:t,title:e,content:s.jsxs("div",{className:"bv-prompt-editor-fields",children:[s.jsx(gr,{label:"Positive",children:s.jsx(fs,{value:r.positive_source,onValue:a=>i({...r,positive_source:a}),completionContext:{scope:t,polarity:"positive"}})}),s.jsx(gr,{label:"Negative",children:s.jsx(fs,{value:r.negative_source,onValue:a=>i({...r,negative_source:a}),completionContext:{scope:t,polarity:"negative"}})})]})}]}),lk=({region:e,automaticColor:t,onRegion:r})=>s.jsxs("section",{className:"bv-inspector-section",children:[s.jsx("h3",{children:"Mask & appearance"}),s.jsx(Tn,{label:"Feather",value:e.mask.feather,min:0,max:.5,step:.005,onChange:o=>r(n=>{n.mask.feather=o})}),s.jsx("div",{className:"region-color-control",children:s.jsxs("div",{className:"region-color-split",children:[s.jsx(y0,{label:"Display color",help:"Editor display only. It does not change masks or sampling.",value:e.authoring.color,onValue:o=>r(n=>{n.authoring.color=o.toUpperCase()})}),s.jsx(ne,{density:"compact",intent:"ghost",iconOnly:!0,"aria-label":"Reset display color to automatic",title:"Reset to automatic",disabled:!t||e.authoring.color.toUpperCase()===t,onClick:()=>r(o=>{t&&(o.authoring.color=t)}),children:"↶"})]})})]});function sk(e){const t=e.layer?.geometries.find(n=>n.type==="brush_stroke"),[r,o]=m.useState(e.mode??(e.layer?"selection":e.region?"region":"document"));return m.useEffect(()=>o(e.mode??(e.layer?"selection":e.region?"region":"document")),[e.layer?.id,e.mode,e.region?.id]),s.jsx(ff,{density:"compact",className:"inspector-density",children:s.jsxs("aside",{className:`inspector bv-ui ${e.mode?"fixed-inspector":""}`,children:[s.jsxs("nav",{className:"inspector-tabs",role:"tablist","aria-label":"Inspector context",children:[s.jsx(ne,{intent:"ghost",role:"tab","aria-selected":r==="selection",disabled:!e.layer,onClick:()=>o("selection"),children:"Selection"}),s.jsx(ne,{intent:"ghost",role:"tab","aria-selected":r==="region",disabled:!e.region,onClick:()=>o("region"),children:"Region"}),s.jsx(ne,{intent:"ghost",role:"tab","aria-selected":r==="document",onClick:()=>o("document"),children:"Document"})]}),s.jsxs("div",{className:"inspector-tab-panel",role:"tabpanel",hidden:r!=="selection",children:[e.region&&s.jsx(lk,{region:e.region,automaticColor:e.automaticRegionColor,onRegion:e.onRegion}),e.layer&&e.bounds?s.jsxs("section",{className:"bv-inspector-section",children:[s.jsx("h3",{children:"Layer"}),s.jsx("div",{className:"bv-layer-bounds-grid",children:["x","y","width","height"].map(n=>{const i=n==="x"||n==="width"?e.canvas.width:e.canvas.height;return s.jsx(Tn,{label:n.toUpperCase(),value:Math.round(e.bounds[n]*i),min:0,max:i,step:1,unit:"px",onChange:a=>e.onLayerBounds({...e.bounds,[n]:a/i})},n)})}),t&&s.jsxs(s.Fragment,{children:[s.jsx(Tn,{label:"Stroke width",value:t.size,min:.001,max:1,step:.005,onChange:n=>e.onBrushSetting("size",n),unit:"×"}),s.jsxs("div",{className:"bv-compact-grid",children:[s.jsx(Tn,{label:"Hardness",value:t.hardness,min:0,max:1,step:.05,onChange:n=>e.onBrushSetting("hardness",n)}),s.jsx(Tn,{label:"Opacity",value:t.opacity,min:0,max:1,step:.05,onChange:n=>e.onBrushSetting("opacity",n)})]}),s.jsxs("div",{className:"bv-compact-grid",children:[s.jsxs(Ho,{label:"Shape",value:t.shape??"round",onChange:n=>e.onBrushSetting("shape",n),children:[s.jsx("option",{value:"round",children:"Round"}),s.jsx("option",{value:"square",children:"Square"})]}),s.jsxs(Ho,{label:"Pressure",value:t.pressure_mode??"constant",onChange:n=>e.onBrushSetting("pressure_mode",n),children:[s.jsx("option",{value:"constant",children:"Constant"}),s.jsx("option",{value:"stylus",children:"Stylus"})]})]})]})]}):s.jsx("p",{className:"option-hint",children:"Select a layer to edit its geometry."})]}),s.jsx("div",{className:"inspector-tab-panel",role:"tabpanel",hidden:r!=="region",children:e.region&&s.jsxs("section",{className:"bv-inspector-section",children:[s.jsx("h3",{children:"Region"}),s.jsxs(Ho,{label:"Usage",help:"Controls whether this region participates in the main render, Detailer output, or both.",value:e.region.usage,onChange:n=>e.onRegion(i=>{i.usage=n}),children:[s.jsx("option",{value:"generation",children:"Generation"}),s.jsx("option",{value:"detailer",children:"Detailer only"}),s.jsx("option",{value:"both",children:"Generation + Detailer"})]}),e.loraV3RegionEditor??s.jsx(Ho,{label:"Additional LoRA Stack",help:"Added to the global stack. Source activation and strengths remain unchanged.",value:e.loraBindings.regions[e.region.id]??"",onChange:n=>e.onRegionLoraStack(e.region.id,n||null),children:s.jsx(Ah,{stacks:e.loraStacks})}),s.jsx(Tn,{label:"Strength",value:e.region.strength,min:0,max:10,step:.05,onChange:n=>e.onRegion(i=>{i.strength=n})}),s.jsx(Pc,{title:"Region Prompt",scope:"region",value:e.region.prompts,open:e.promptSections.region,onOpen:n=>e.onPromptSection("region",n),onChange:n=>e.onRegion(i=>{i.prompts=n})})]})}),s.jsx("div",{className:"inspector-tab-panel",role:"tabpanel",hidden:r!=="document",children:s.jsxs("section",{className:"bv-inspector-section",children:[s.jsx("h3",{children:"Document Prompts"}),e.loraV3GlobalEditor??s.jsx(Ho,{label:"Global LoRA Stack",help:"Applied globally and inherited by every region.",value:e.loraBindings.global_stack_id??"",onChange:n=>e.onGlobalLoraStack(n||null),children:s.jsx(Ah,{stacks:e.loraStacks})}),s.jsxs(Ho,{label:"Negative Mode",value:e.negativeMode,onChange:n=>e.onNegativeMode(n),children:[s.jsx("option",{value:"auto",children:"Auto"}),s.jsx("option",{value:"prompt",children:"Prompt"}),s.jsx("option",{value:"zero_out",children:"Zero out"})]}),s.jsx(Pc,{title:"Global",scope:"global",value:e.globalPrompts,open:e.promptSections.global,onOpen:n=>e.onPromptSection("global",n),onChange:e.onGlobalPrompts}),s.jsx(Pc,{title:"Background",scope:"background",value:e.backgroundPrompts,open:e.promptSections.background,onOpen:n=>e.onPromptSection("background",n),onChange:e.onBackgroundPrompts})]})})]})})}const Qe=(e,t=0,r=1)=>Math.max(t,Math.min(r,e));function ck(e,t={width:1,height:1}){if(e.type==="rect"||e.type==="ellipse"||e.type==="raster_mask")return{x:e.x,y:e.y,width:e.width,height:e.height};const r=e.points.map(f=>f.x),o=e.points.map(f=>f.y);if(e.type==="polygon")return{x:Math.min(...r),y:Math.min(...o),width:Math.max(...r)-Math.min(...r),height:Math.max(...o)-Math.min(...o)};const n=Math.min(t.width,t.height),i=e.size*n/t.width/2,a=e.size*n/t.height/2,l=Qe(Math.min(...r)-i),c=Qe(Math.min(...o)-a),u=Qe(Math.max(...r)+i),d=Qe(Math.max(...o)+a);return{x:l,y:c,width:u-l,height:d-c}}function sx(e,t,r){const o=r.x-t.x,n=r.y-t.y;if(o===0&&n===0)return Math.hypot(e.x-t.x,e.y-t.y);const i=Qe(((e.x-t.x)*o+(e.y-t.y)*n)/(o*o+n*n));return Math.hypot(e.x-(t.x+i*o),e.y-(t.y+i*n))}function uk(e,t,r={width:1,height:1}){if(e.type==="rect"||e.type==="raster_mask")return t.x>=e.x&&t.x<=e.x+e.width&&t.y>=e.y&&t.y<=e.y+e.height;if(e.type==="ellipse"){const a=e.width/2,l=e.height/2;return((t.x-e.x-a)/a)**2+((t.y-e.y-l)/l)**2<=1}if(e.type==="polygon"){let a=!1;for(let l=0,c=e.points.length-1;lt.y!=d.y>t.y&&t.x<(d.x-u.x)*(t.y-u.y)/(d.y-u.y)+u.x&&(a=!a)}return a}const o=a=>({...a,x:a.x*r.width,y:a.y*r.height}),n=e.size*Math.min(r.width,r.height)/2,i=o(t);return e.points.length===1?Math.hypot(i.x-e.points[0].x*r.width,i.y-e.points[0].y*r.height)<=n:e.points.slice(1).some((a,l)=>sx(i,o(e.points[l]),o(a))<=n)}function Qs(e,t){const r=e.map(l=>ck(l,t)),o=Math.min(...r.map(l=>l.x)),n=Math.min(...r.map(l=>l.y)),i=Math.max(...r.map(l=>l.x+l.width)),a=Math.max(...r.map(l=>l.y+l.height));return{x:o,y:n,width:i-o,height:a-n}}function Dh(e,t,r,o){const n=Qs(e,o);return t=Qe(t,-n.x,1-n.x-n.width),r=Qe(r,-n.y,1-n.y-n.height),e.map(i=>{const a=Kt(i);return a.type==="rect"||a.type==="ellipse"||a.type==="raster_mask"?(a.x+=t,a.y+=r):a.points=a.points.map(l=>({...l,x:l.x+t,y:l.y+r})),a})}function cx(e,t,r){const o=Qs(e,r);t={x:Qe(t.x,0,.998),y:Qe(t.y,0,.998),width:Qe(t.width,.002,1),height:Qe(t.height,.002,1)},t.width=Math.min(t.width,1-t.x),t.height=Math.min(t.height,1-t.y);const n=t.width/Math.max(o.width,1e-6),i=t.height/Math.max(o.height,1e-6);return e.map(a=>{const l=Kt(a);return l.type==="rect"||l.type==="ellipse"||l.type==="raster_mask"?(l.x=t.x+(l.x-o.x)*n,l.y=t.y+(l.y-o.y)*i,l.width*=n,l.height*=i):(l.points=l.points.map(c=>({...c,x:t.x+(c.x-o.x)*n,y:t.y+(c.y-o.y)*i})),l.type==="brush_stroke"&&(l.size=Qe(l.size*Math.sqrt(n*i),.001,1))),l})}function dk(e,t,r,o,n=!1,i){const a=Qs(e,i);let l=a.x,c=a.y,u=l+a.width,d=c+a.height;if(t.includes("w")&&(l=Qe(l+r,0,u-.002)),t.includes("e")&&(u=Qe(u+r,l+.002,1)),t.includes("n")&&(c=Qe(c+o,0,d-.002)),t.includes("s")&&(d=Qe(d+o,c+.002,1)),n&&t.length===2){const f=a.width/Math.max(a.height,1e-4),p=u-l,g=d-c;if(p/g>f){const x=p/f;t.includes("n")?c=Qe(d-x):d=Qe(c+x)}else{const x=g*f;t.includes("w")?l=Qe(u-x):u=Qe(l+x)}}return cx(e,{x:l,y:c,width:u-l,height:d-c},i)}function fk(e,t,r){return sx(e,t,r)}function pk(e,t=.0015){if(e.length<=2)return e;const r=[e[0]];for(const n of e.slice(1,-1))Math.hypot(n.x-r[r.length-1].x,n.y-r[r.length-1].y)>=t&&r.push(n);r.push(e[e.length-1]);const o=n=>{if(n.length<=2)return n;let i=0,a=0;for(let l=1;li&&(i=c,a=l)}return i<=t?[n[0],n[n.length-1]]:[...o(n.slice(0,a+1)).slice(0,-1),...o(n.slice(a))]};return o(r)}const Ih=e=>e.layer_id??e.id,hk=e=>e.authoring??{name:"Layer",visible:!0,locked:!1};function gk(e,t,r,o){if(o==="replace")return{ids:[t],primary:t,anchor:t};if(o==="toggle"){const l=e.ids.includes(t)?e.ids.filter(c=>c!==t):[...e.ids,t];return{ids:l,primary:l.includes(t)?t:l[l.length-1]??null,anchor:t}}const n=e.anchor&&r.includes(e.anchor)?e.anchor:e.primary;if(!n)return{ids:[t],primary:t,anchor:t};const i=r.indexOf(n),a=r.indexOf(t);return i<0||a<0?{ids:[t],primary:t,anchor:t}:{ids:r.slice(Math.min(i,a),Math.max(i,a)+1),primary:t,anchor:n}}function bk(e,t,r){const o=new Set(t);if(o.size<2||!o.has(r))return!1;const n=e.geometry.find(l=>Ih(l)===r);if(!n)return!1;const i=hk(n);let a=!1;return e.geometry.forEach(l=>{const c=Ih(l);o.has(c)&&(l.mask_group_id??(l.mask_group_id=c),l.layer_id=r,l.authoring={...i},a||(a=c!==r))}),a}function ux(e,t){const r=new Map;e.forEach(o=>{o.mask_group_id&&(r.has(o.mask_group_id)||r.set(o.mask_group_id,t()),o.mask_group_id=r.get(o.mask_group_id))})}const vk="bv-regional-editor-state-v1:",Ze=(e,t)=>typeof e=="number"&&Number.isFinite(e)?e:t,Tt=(e,t,r)=>Math.max(t,Math.min(r,e)),mk=["select","rect-add","rect-subtract","ellipse-add","ellipse-subtract","polygon-add","polygon-subtract","brush-add","brush-subtract"];function dx(e){return`${vk}${e}`}function xk(e,t,r={width:520,height:560}){return{x:Tt(Ze(e.x,t.width-r.width-24),-r.width+52,t.width-52),y:Tt(Ze(e.y,84),72,Math.max(72,t.height-52))}}function ps(e,t){const r=Tt(Ze(e.width,520),Math.min(360,t.width),Math.max(360,t.width-32)),o=Tt(Ze(e.height,640),Math.min(320,t.height),Math.max(320,t.height-32));return{...xk({x:Ze(e.x,t.width-r-24),y:Ze(e.y,84)},t,{width:r}),width:r,height:o}}function jh(e,t){return e.mode==="workspace"?fn({x:24,y:58,width:t.width-48,height:t.height-82},t,"workspace"):e.windows.floating}function fn(e,t,r){const o=Math.min(780,Math.max(320,t.width-16)),n=Math.min(520,Math.max(300,t.height-16)),i=Math.max(o,t.width),a=Math.max(n,t.height),l=Tt(Ze(e.width,o),o,i),c=Tt(Ze(e.height,n),n,a),u=r==="workspace"?8:0;return{x:Tt(Ze(e.x,u),u-l+80,t.width-u-80),y:Tt(Ze(e.y,58),0,t.height-42),width:l,height:c}}function Mf(e={width:window.innerWidth,height:window.innerHeight}){const t=fn({x:24,y:58,width:e.width-48,height:e.height-82},e,"workspace"),r=Math.min(1100,e.width-32),o=Math.min(760,e.height-80),n=fn({x:Math.max(16,e.width-r-32),y:64,width:r,height:o},e,"floating");return{version:1,mode:"workspace",windows:{workspace:t,floating:n},panels:{left:290,right:340},artboard:{zoom:1,panX:0,panY:0,fit:!0},selectedRegionId:null,selectedLayerId:null,displayOpacity:.5,backgroundOpacity:1,isolate:!1,binaryMaskPreview:!1,tool:"select",brush:{size:.04,hardness:.75,opacity:1,shape:"round",pressureMode:"constant"},openMenu:null,promptSections:{region:!1,global:!1,background:!1},quickPromptTarget:"global",quickPromptWindow:ps({x:e.width-544,y:84,width:520,height:640},e)}}function yk(e,t={width:window.innerWidth,height:window.innerHeight}){const r=Mf(t),o=e&&typeof e=="object"?e:{},n=o.mode==="floating"?"floating":"workspace",i=o.windows&&typeof o.windows=="object"?o.windows:r.windows,a=o.panels&&typeof o.panels=="object"?o.panels:r.panels,l=o.artboard&&typeof o.artboard=="object"?o.artboard:r.artboard,c=o.brush&&typeof o.brush=="object"?o.brush:r.brush;return{version:1,mode:n,windows:{workspace:fn(i.workspace??r.windows.workspace,t,"workspace"),floating:fn(i.floating??r.windows.floating,t,"floating")},panels:{left:Tt(Ze(a.left,290),210,620),right:Tt(Ze(a.right,340),210,620)},artboard:{zoom:Tt(Ze(l.zoom,1),.02,8),panX:Ze(l.panX,0),panY:Ze(l.panY,0),fit:typeof l.fit=="boolean"?l.fit:!0},selectedRegionId:typeof o.selectedRegionId=="string"?o.selectedRegionId:null,selectedLayerId:typeof o.selectedLayerId=="string"?o.selectedLayerId:null,displayOpacity:Tt(Ze(o.displayOpacity,.5),.05,1),backgroundOpacity:Tt(Ze(o.backgroundOpacity,1),0,1),isolate:o.isolate===!0,tool:o.tool==="rect"?"rect-add":mk.includes(o.tool)?o.tool:"select",binaryMaskPreview:o.binaryMaskPreview===!0,brush:{size:Tt(Ze(c.size,.04),.001,1),hardness:Tt(Ze(c.hardness,.75),0,1),opacity:Tt(Ze(c.opacity,1),0,1),shape:c.shape==="square"?"square":"round",pressureMode:c.pressureMode==="stylus"?"stylus":"constant"},openMenu:["file","edit","view","artboard","layers","help"].includes(o.openMenu)?o.openMenu:null,promptSections:{region:o.promptSections?.region===!0,global:o.promptSections?.global===!0,background:o.promptSections?.background===!0},quickPromptTarget:typeof o.quickPromptTarget=="string"&&o.quickPromptTarget?o.quickPromptTarget:"global",quickPromptWindow:ps(o.quickPromptWindow??r.quickPromptWindow,t)}}function Cl(e,t=localStorage,r={width:window.innerWidth,height:window.innerHeight}){try{return yk(JSON.parse(t.getItem(dx(e))||"null"),r)}catch{return Mf(r)}}function rd(e,t,r=localStorage){try{return r.setItem(dx(e),JSON.stringify(t)),!0}catch{return!1}}function _k(e,t,r,o=8){if(e.length!==t*r)throw new Error("Alpha buffer size does not match its dimensions");const n=new Int32Array(e.length),i=[];let a=0;const l=new Int32Array(e.length);for(let c=0;c=o&&(n[y]=a,l[d++]=y)}}i.push({label:a,x:f,y:p,width:g-f+1,height:x-p+1,pixels:w})}return{labels:n,areas:i}}const od=(e,t)=>{const r=document.createElement("canvas");return r.width=e,r.height=t,r},wk=e=>new Promise((t,r)=>{const o=new Image;o.onload=()=>t(o),o.onerror=()=>r(new Error("Raster layer image could not be decoded")),o.src=e});async function kk(e,t,r,o){if(e.save(),e.globalCompositeOperation=t.operation==="subtract"?"destination-out":"source-over",e.fillStyle="white",e.strokeStyle="white",t.type==="rect")e.fillRect(t.x*r,t.y*o,t.width*r,t.height*o);else if(t.type==="ellipse")e.beginPath(),e.ellipse((t.x+t.width/2)*r,(t.y+t.height/2)*o,t.width*r/2,t.height*o/2,0,0,Math.PI*2),e.fill();else if(t.type==="polygon")e.beginPath(),t.points.forEach((n,i)=>i?e.lineTo(n.x*r,n.y*o):e.moveTo(n.x*r,n.y*o)),e.closePath(),e.fill();else if(t.type==="raster_mask")e.drawImage(await wk(t.data_url),t.x*r,t.y*o,t.width*r,t.height*o);else{const n=Math.min(r,o),i=t.points,a=t.size*n,l=t.shape==="square"?"square":"round",c=(f,p,g=0)=>{const x=a*f.pressure*p;e.filter=g>0?`blur(${g}px)`:"none",e.beginPath(),t.shape==="square"?e.rect(f.x*r-x/2,f.y*o-x/2,x,x):e.arc(f.x*r,f.y*o,x/2,0,Math.PI*2),e.fill()},u=(f,p=0)=>{e.filter=p>0?`blur(${p}px)`:"none",e.lineCap=l,e.lineJoin=l==="round"?"round":"miter";for(let g=1;g0&&c(i[0],t.hardness)):(u(1,d),t.hardness>0&&u(t.hardness))}e.restore()}async function Ek(e,t,r){const o=od(t,r),n=o.getContext("2d",{willReadFrequently:!0}),i=new Map;e.filter(a=>a.enabled!==!1).forEach(a=>{const l=Ma(a),c=i.get(l);c?c.push(a):i.set(l,[a])});for(const a of i.values()){const l=od(t,r),c=l.getContext("2d");for(const u of a)await kk(c,u,t,r);n.drawImage(l,0,0)}return o}async function Tk(e,t,r){const i=(await Ek(e,t.width,t.height)).getContext("2d",{willReadFrequently:!0}).getImageData(0,0,t.width,t.height),a=new Uint8ClampedArray(t.width*t.height);for(let f=0;ff.pixels>1);if(u.length<2)return[];const d={...e[0].authoring??{name:"Layer",visible:!0,locked:!1}};return u.map((f,p)=>{const g=od(f.width,f.height),x=g.getContext("2d"),w=x.createImageData(f.width,f.height);for(let b=0;b({schema:"bv.regional.lora_bindings",version:1,document_id:e,global_stack_id:null,regions:{}});function Rk(e,t,r){if(!t)return!1;const o=r.filter(n=>n.id===t);return o.length>1&&o[0].nodeId!==e}function Af(e,t){if(e==null||e==="")return ec(t);const r=typeof e=="string"?JSON.parse(e):structuredClone(e);if(r?.schema!=="bv.regional.lora_bindings"||r?.version!==1||typeof r?.regions!="object"||Array.isArray(r.regions))throw new Error("Not a valid BV regional LoRA bindings v1 value");if(r.document_id&&r.document_id!==t)throw new Error("LoRA bindings target a different BV Regional document");const o={};for(const[n,i]of Object.entries(r.regions))typeof i=="string"&&i&&(o[n]=i);return{schema:"bv.regional.lora_bindings",version:1,document_id:t,global_stack_id:typeof r.global_stack_id=="string"&&r.global_stack_id?r.global_stack_id:null,regions:o}}function Hn(e,t){const r=Object.fromEntries(Object.entries(e.regions).filter(([o])=>t.has(o)));return{...e,regions:r}}function zc(e,t){const r=structuredClone(e);return{document:r,loraBindings:structuredClone(Hn(t,new Set(r.regions.map(o=>o.id))))}}function Sk(e,t,r){const o=t.find((c,u)=>t.findIndex(d=>d.id===c.id)!==u);if(o)return[`Duplicate LoRA stack ID: ${o.id}`];const n=t.find((c,u)=>t.findIndex(d=>d.name.localeCompare(c.name,void 0,{sensitivity:"accent"})===0)!==u);if(n)return[`Duplicate LoRA stack name: ${n.name}`];const i=r&&Object.keys(e.regions).find(c=>!r.has(c));if(i)return[`LoRA assignment targets a missing region: ${i}`];const a=new Set(t.map(c=>c.id)),l=[e.global_stack_id,...Object.values(e.regions)].filter(c=>!!c);return l.length?t.length?[...new Set(l.filter(c=>!a.has(c)))].map(c=>`Assigned LoRA stack is missing: ${c}`):["LoRA stacks are assigned, but no BV Named LoRA Stack sources exist in this workflow."]:[]}function Lk(e,t,r){const o=new Map(t.map(i=>[i.id,i.name])),n=[];e.global_stack_id&&n.push(`Global: ${o.get(e.global_stack_id)??"Missing stack"}`);for(const[i,a]of Object.entries(e.regions))n.push(`${r[i]??"Missing region"}: ${o.get(a)??"Missing stack"}`);return n.length?`${n.join(" · ")} · source values unchanged`:"No LoRA stacks assigned"}const hs=(e,t)=>e.regions.find(r=>r.id===t)??null,nd=(e,t)=>e?Mr(e).find(r=>r.id===t)??null:null,id=e=>e.kind==="layer"||e.kind==="geometry"?e.layerId:null;function Ck(e,t){const r=hs(e,t.source.regionId),o=hs(e,t.target.regionId);if(!r||!o||r.authoring.locked||o.authoring.locked||t.source.kind!=="region"&&nd(r,t.source.layerId)?.authoring.locked)return!1;const n=id(t.target);return!(n&&nd(o,n)?.authoring.locked)}function Nk(e,t,r,o){if(!r||o==="inside"){e.geometry.push(...t);return}const n=e.geometry.map((a,l)=>Pt(a)===r?l:-1).filter(a=>a>=0);if(!n.length){e.geometry.push(...t);return}const i=o==="before"?n[n.length-1]+1:n[0];e.geometry.splice(i,0,...t)}function Ok(e,t,r){if(!Ck(e,t))return!1;const o=structuredClone(e.regions),n=()=>e.regions.every(f=>Vv(f.geometry))?!0:(e.regions=o,!1);if(t.source.kind==="region"){if(t.target.kind!=="region"||t.position==="inside"||t.source.regionId===t.target.regionId)return!1;const f=e.regions.findIndex(x=>x.id===t.source.regionId),[p]=e.regions.splice(f,1),g=e.regions.findIndex(x=>x.id===t.target.regionId);return e.regions.splice(t.position==="before"?g:g+1,0,p),e.regions.forEach((x,w)=>{x.priority=w}),n()}const i=hs(e,t.source.regionId),a=hs(e,t.target.regionId);if(t.source.kind==="layer"){const f=t.source;if(t.target.kind==="geometry"||f.layerId===id(t.target))return!1;const p=i.geometry.filter(g=>Pt(g)===f.layerId);return p.length?(i.geometry=i.geometry.filter(g=>Pt(g)!==f.layerId),Nk(a,p,id(t.target),t.position),n()):!1}const l=t.source,c=i.geometry.findIndex(f=>f.id===l.geometryId);if(c<0||t.target.kind==="region"&&t.position!=="inside")return!1;const[u]=i.geometry.splice(c,1);if(t.target.kind==="region")return u.layer_id=r(),delete u.mask_group_id,u.authoring={...sr(u)},a.geometry.push(u),n();const d=t.target.layerId;if((d!==l.layerId||a!==i)&&(u.mask_group_id??(u.mask_group_id=l.layerId),u.layer_id=d,u.authoring={...nd(a,d).authoring}),t.target.kind==="layer"||t.position==="inside"){const f=a.geometry.map((p,g)=>Pt(p)===d?g:-1).filter(p=>p>=0);a.geometry.splice(f.length?f[f.length-1]+1:a.geometry.length,0,u)}else{const f=t.target,p=a.geometry.findIndex(g=>g.id===f.geometryId);a.geometry.splice(t.position==="before"?p:p+1,0,u)}return n()}const fx=e=>e.scope==="global"?"global":`region:${e.document_id}:${e.region_id}`;function px(e,t){return e.scope===t.scope&&(t.scope==="global"||e.document_id===t.document_id&&e.region_id===t.region_id)}function Mk({label:e,help:t,collectors:r,config:o,target:n,resolved:i,onValue:a}){const l=o.entries.find(u=>u.source.kind==="external"&&u.targets.some(d=>px(d,n))),c=l?.source.kind==="external"?l.source.resource_id:"";return s.jsx(gr,{label:e,help:t,children:s.jsxs("div",{className:"bv-lora-v3-scope-picker",children:[s.jsx(Ys,{collectors:r,collectorId:o.collector_id??"",resourceId:c,resolved:!c||i,onCollector:u=>{const d=r.find(f=>f.id===u)?.resources[0]?.id??null;a(u||null,d)},onResource:u=>a(o.collector_id,u||null)}),c&&s.jsx(ne,{density:"compact",intent:"ghost",onClick:()=>a(o.collector_id,null),children:"Clear"})]})})}function Bh(e){const t=fx(e.target),r=e.config.entries.some(i=>i.source.kind==="external"&&i.targets.some(a=>px(a,e.target))),[o,n]=m.useState(r);return m.useEffect(()=>n(r),[r,t]),s.jsxs("div",{className:"bv-optional-lora-scope",children:[s.jsx($s,{label:"Use LoRA",value:o,trueLabel:"Enabled",falseLabel:"Disabled",help:"Show or hide the LoRA assignment for this scope.",onValue:i=>{n(i),i||e.onValue(e.config.collector_id,null)}}),o&&s.jsx(Mk,{...e})]})}function Ak({collectors:e,config:t,resolved:r,targetOptions:o=[],onCollector:n,onResource:i,onTargets:a,onAddExternal:l,onRemove:c}){const u=t.entries.filter(d=>d.source.kind==="external");return s.jsxs("div",{className:"bv-lora-v3-picker-panel",children:[u.map((d,f)=>s.jsxs("section",{children:[s.jsxs("strong",{children:["External LoRA Stack ",f+1]}),s.jsx(Ys,{collectors:e,collectorId:t.collector_id??"",resourceId:d.source.resource_id,resolved:r,onCollector:n,onResource:p=>i(d.id,p)}),a&&o.length>0&&s.jsx(zv,{label:"Assignment targets",value:d.targets.map(p=>fx(p)),options:o,minSelected:1,onValue:p=>a(d.id,p.flatMap(g=>{const x=o.find(w=>w.value===g)?.target;return x?[x]:[]}))})," ",c&&s.jsx(ne,{density:"compact",intent:"ghost",onClick:()=>c(d.id),children:"Remove"})]},d.id)),!u.length&&s.jsx("p",{className:"bv-field-help",children:"No external live stack is configured."}),s.jsx(ne,{intent:"secondary",disabled:!e.some(d=>d.resources.length>0),onClick:l,children:"Add external stack"})]})}const Dk=()=>({version:1,collector_id:null,entries:[]});function Ik(e){const t=typeof e=="string"?JSON.parse(e):e;if(!t||typeof t!="object"||t.version!==1||!Array.isArray(t.entries))throw new Error("Invalid BV Regional LoRA v3 configuration");return structuredClone(t)}const jk=e=>JSON.stringify(e),pn="BV_RUNTIME_RESOURCE_PROVIDER",ni="resource_provider",hx="BV LoRA Stack Collector",Df=(e,t)=>t==null?null:e?._links?.get?.(t)??e?.links?.get?.(t)??e?.links?.[t]??null,gs=e=>e?.findIndex(t=>t?.name===ni||t?.type===pn)??-1;function gx(e){let t=gs(e.outputs);t<0&&e.addOutput&&(e.addOutput(ni,pn),t=gs(e.outputs));const r=e.outputs?.[t];return r&&(r.name=ni,r.type=pn,r.hidden=!0,r.__bvResourceSlot=!0),t}function bx(e){let t=gs(e.inputs);t<0&&e.addInput&&(e.addInput(ni,pn),t=gs(e.inputs));const r=e.inputs?.[t];return r&&(r.name=ni,r.type=pn,r.hidden=!0,r.__bvResourceSlot=!0),t}function _a(e){const t=e.inputs?.find(i=>i.name===ni||i.type===pn),r=Df(e.graph,t?.link);if(!r||String(r.target_id)!==String(e.id))return null;const o=e.graph?.getNodeById?.(r.origin_id),n=o?.outputs?.[Number(r.origin_slot)];return o?.graph===e.graph&&(o?.type===hx||n?.type===pn)?o:null}function Bk(e,t){const r=bx(e);if(r<0)return!1;if(e.inputs?.[r]?.link!=null&&e.disconnectInput?.(r),!t)return!0;if(t.graph!==e.graph)return!1;const o=gx(t);return o<0?!1:(t.connect?.(o,e,r),_a(e)===t)}function Pk(e){return(e.graph?._nodes??[]).filter(t=>t!==e&&t.graph===e.graph&&String(t.comfyClass??t.type)===hx)}const zk=new Set(["BV Regional Native Conditioning","BV Regional Krea 2 Attention","BV Regional Anima Conditioning"]);function Fk(e){const t=e.graph,r=[e],o=new Set([e]),n=[];for(;r.length;){const i=r.shift();for(const a of i?.outputs??[])if(a?.type==="BV_REGIONAL")for(const l of a.links??[]){const c=Df(t,l),u=c&&t?.getNodeById?.(c.target_id);!u||u.graph!==t||o.has(u)||(o.add(u),zk.has(u.type)&&n.push(u),(u.outputs??[]).some(d=>d.type==="BV_REGIONAL")&&r.push(u))}}return n}function Yi(e,t){return[e,...Fk(e)].map(o=>Bk(o,t)).every(Boolean)}function Uk(e){const t=e.graph,r=[e],o=new Set([e]);for(;r.length;){const n=r.shift();for(const i of n?.inputs??[]){if(i?.type!=="BV_REGIONAL")continue;const a=Df(t,i.link),l=a&&t?.getNodeById?.(a.origin_id);if(!(!l||l.graph!==t||o.has(l))){if(["BV Regional LoRA","BV Regional Prompt"].includes(String(l.comfyClass??l.type)))return l;o.add(l),r.push(l)}}}return null}const Vk="BV_RUNTIME_RESOURCE_PROVIDER_M0",ad="BV_RUNTIME_RESOURCE_PROVIDER",ld=e=>e===Vk||e===ad;function If(e){return(e?._nodes??[]).some(t=>t.__bvM0ResourceConsumer===!0&&!!t.properties?.bvM0DebugVisible)}function Wk(e,t){if(!t)return!1;const r=e.graph?.getNodeById?.(t.origin_id),o=e.graph?.getNodeById?.(t.target_id);return r?.outputs?.[t.origin_slot]?.type===ad||o?.inputs?.[t.target_slot]?.type===ad?!0:vx(e,t)?!If(e.graph):!!(r?.outputs?.[t.origin_slot]?.__bvM0VisualHidden||o?.inputs?.[t.target_slot]?.__bvM0VisualHidden)}function vx(e,t){if(!t)return!1;const r=e.graph?.getNodeById?.(t.origin_id),o=e.graph?.getNodeById?.(t.target_id),n=r?.outputs?.[t.origin_slot],i=o?.inputs?.[t.target_slot];return!!((n?.__bvM0ResourceSlot||ld(n?.type))&&(i?.__bvM0ResourceSlot||ld(i?.type)))}function mx(e){if(!e||e.__bvM0DebugAnimation)return;e.__bvM0DebugAnimation=!0;const t=()=>{const r=If(e.graph);if(document.documentElement.classList.toggle("bv-m0-debug-active",r),!r){e.__bvM0DebugAnimation=!1;return}e.setDirty?.(!1,!0),e.setDirtyCanvas?.(!1,!0),requestAnimationFrame(t)};requestAnimationFrame(t)}function xx(e){if(typeof document>"u")return;const t=If(e);document.documentElement.classList.toggle("bv-m0-debug-active",t)}function jf(e){if(!e||e.__bvM0VisibilityInstalled)return;e.__bvM0VisibilityInstalled=!0;const t=e.drawNode,r=e.renderLink;e.renderLink=function(...o){if(Wk(this,o[3]))return;if(!vx(this,o[3]))return r.apply(this,o);const n=this.graph?.getNodeById?.(o[3]?.target_id),i=n?.inputs?.map((c,u)=>({slot:c,index:u})).filter(({slot:c})=>c.__bvM0ResourceSlot)??[],a=n?.__bvM0FanInAnchorSlot??(i.length>1?i[0].index:void 0);a!=null&&n&&((o[3]?.target_slot===a||!n.__bvM0FanInPoint)&&(n.__bvM0FanInPoint=o[2]),o[2]=n.__bvM0FanInPoint);const l=o[0];l.save();try{return l.setLineDash([7,5]),l.lineDashOffset=-((typeof performance>"u"?0:performance.now())/45%12),o[5]=typeof performance>"u"?0:performance.now()/1e3,r.apply(this,o)}finally{l.restore()}},e.drawNode=function(o,n){const i=[];for(const a of[...o.inputs??[],...o.outputs??[]])if(ld(a.type)){for(const l of["name","label","localized_name"]){const c=Object.prototype.hasOwnProperty.call(a,l),u=a[l];Object.defineProperty(a,l,{configurable:!0,writable:!0,value:""}),i.push(()=>c?Object.defineProperty(a,l,{configurable:!0,writable:!0,value:u}):delete a[l])}for(const l of["draw","drawCollapsed"]){if(typeof a[l]!="function")continue;const c=Object.prototype.hasOwnProperty.call(a,l),u=a[l];Object.defineProperty(a,l,{configurable:!0,writable:!0,value:()=>{}}),i.push(()=>c?Object.defineProperty(a,l,{configurable:!0,writable:!0,value:u}):delete a[l])}}try{return t.call(this,o,n)}finally{for(let a=i.length-1;a>=0;a--)i[a]()}}}function Bf(e,t,r){let o=0;const n=(e.__bvM0ElementMarkRevision??0)+1;e.__bvM0ElementMarkRevision=n;const i=()=>{if(e.__bvM0ElementMarkRevision!==n)return;const a=CSS.escape(String(e.id)),l=document.querySelector(`.lg-node[data-node-id="${a}"]`);if(!l){o++<40&&setTimeout(i,50);return}l.classList.add(`bv-m0-${t}`),l.classList.toggle("bv-m0-debug",r);const c=l.querySelectorAll(".lg-slot--input"),u=e.inputs?.map((f,p)=>({slot:f,index:p})).filter(({slot:f})=>f.__bvM0ResourceSlot)??[],d=u.length>1?u[0].index:void 0;c.forEach((f,p)=>f.classList.toggle("bv-m0-port-hidden",!!e.inputs?.[p]?.__bvM0PortHidden||d!=null&&p!==d)),l.classList.toggle("bv-m0-fan-in",d!=null),o++<4&&setTimeout(i,75*o)};i()}const sd="bv-open-regional-lora-editor",Rr=(e,t)=>e.widgets?.find(r=>r.name===t),Ia=e=>String(e?.comfyClass??e?.type??""),yx=(e,t)=>t==null?null:e?._links?.get?.(t)??e?.links?.get?.(t)??e?.links?.[t]??null,wa=e=>{e&&(e.type="converted-widget",e.hidden=!0,e.computeSize=()=>[0,-4],e.element&&(e.element.style.display="none"),e.serializeValue=e.serializeValue??function(){return this.value})},Hk=e=>{e&&!String(e.value??"").trim()&&(e.value=crypto.randomUUID())},_x=()=>{let e=0;const t=()=>{const r=ct().canvas;r?jf(r):e++<40&&setTimeout(t,50)};t()};function wx(e){const t=[],r=new Set,o=[e];for(;o.length;){const n=o.shift();if(!(!n||r.has(n))){r.add(n);for(const i of n.inputs??[]){if(!["lora_registry","registry"].includes(i.name))continue;const a=yx(n.graph,i.link),l=a&&n.graph?.getNodeById?.(a.origin_id);if(!(!l||l.graph!==n.graph)){if(Ia(l)==="BV Named LoRA Stack"){const c=String(Rr(l,"stack_id")?.value??"").trim(),u=String(Rr(l,"name")?.value??"").trim();c&&u&&t.push({id:c,label:u,node:l})}o.push(l)}}}}return t.reverse()}function bs(e){return Pk(e).map(t=>({id:String(Rr(t,"collector_id")?.value??"").trim(),label:String(t.title||"BV LoRA Stack Collector"),resources:wx(t),node:t})).filter(t=>t.id)}function vs(e,t=Ia(e)==="BV Regional Prompt"?"lora_v3_config_json":"config_json"){try{let r=Ik(Rr(e,t)?.value),o=_a(e);const n=o?.__bvLoraCollectorIdRemap?.[String(r.collector_id??"")],i=Object.assign({},...wx(o).map(a=>a.node?.__bvLoraResourceIdRemap??{}));return n&&(r={...r,collector_id:n,entries:r.entries.map(a=>a.source.kind==="external"&&i[a.source.resource_id]?{...a,source:{...a.source,resource_id:i[a.source.resource_id]}}:a)},Pf(e,r,t)),r}catch{return Dk()}}function Pf(e,t,r=Ia(e)==="BV Regional Prompt"?"lora_v3_config_json":"config_json"){const o=Rr(e,r);o&&(o.value=jk(t),o.callback?.(o.value),e.setDirtyCanvas?.(!0,!0))}function $k(e){const t=e?.graph,r=[e],o=new Set;let n=null;for(;r.length&&!n;){const i=r.shift();if(!(!i||o.has(i))){if(o.add(i),Ia(i)==="BV Regional Prompt"){try{const a=JSON.parse(String(Rr(i,"regional_json")?.value??"{}"));n=a.version===3?a.core:a}catch{}break}for(const a of i.inputs??[]){if(a.type!=="BV_REGIONAL")continue;const l=yx(t,a.link),c=l&&t?.getNodeById?.(l.origin_id);c?.graph===t&&r.push(c)}}}return n?.document_id?[{value:"global",label:"Global",target:{scope:"global"}},...(n.regions??[]).map(i=>({value:`region:${n.document_id}:${i.id}`,label:String(i.name||i.id),target:{scope:"region",document_id:String(n.document_id),region_id:String(i.id)}}))]:[{value:"global",label:"Global",target:{scope:"global"}}]}function cd(e,t){const r=_a(e);return!!r&&String(Rr(r,"collector_id")?.value??"")===String(t.collector_id??"")}function Yk(e,t,r,o,n){const i=f=>f.scope===r.scope&&(r.scope==="global"||f.document_id===r.document_id&&f.region_id===r.region_id),a=!!(o&&o!==t.collector_id),l=a?bs(e).find(f=>f.id===o)?.resources[0]?.id:null;let c=t.entries.filter(f=>!f.targets.some(i)).map(f=>a&&f.source.kind==="external"&&l?{...f,source:{...f.source,resource_id:l}}:f);n&&(c=[...c,{id:crypto.randomUUID(),source:{kind:"external",resource_id:n},targets:[r]}]);const u={...t,collector_id:c.some(f=>f.source.kind==="external")?o:null,entries:c},d=bs(e).find(f=>f.id===u.collector_id);return Yi(e,d?.node??null),Pf(e,u),u}function Xk(e){_x();const t=Rr(e,"collector_id");Hk(t);const r=String(t?.value??"").trim(),o=(e.graph?._nodes??[]).find(n=>n!==e&&Ia(n)==="BV LoRA Stack Collector"&&String(Rr(n,"collector_id")?.value??"").trim()===r);if(t&&r&&o){const n=crypto.randomUUID();t.value=n,e.__bvLoraCollectorIdRemap={[r]:n}}wa(t),gx(e),e.__bvRuntimeResourceProvider=!0}function ms(e){_x();const t=bx(e),r=e.inputs?.[t];if(r&&(r.hidden=!0,r.__bvM0VisualHidden=!0,r.__bvM0PortHidden=!0,r.__bvM0ResourceSlot=!0),!_a(e)){const o=Uk(e),n=o&&_a(o);n&&Yi(o,n)}}function Gk(e){if(ms(e),wa(Rr(e,"operation")),wa(Rr(e,"config_json")),!e.widgets?.find(t=>t.name==="open_lora_editor")){const t=e.addWidget?.("button","open_lora_editor",null,()=>window.dispatchEvent(new CustomEvent(sd,{detail:{node:e}})),{serialize:!1});t&&(t.label="Open LoRA Editor",t.serialize=!1)}e.setSize?.([Math.max(e.size?.[0]??0,220),e.computeSize?.()[1]??60])}function Kk(e,t){const r=t.name==="BV LoRA Stack Collector",o=t.name==="BV Regional LoRA",n=["BV Regional Native Conditioning","BV Regional Krea 2 Attention","BV Regional Anima Conditioning"].includes(t.name);if(!r&&!o&&!n)return!1;const i=e.prototype.onNodeCreated,a=e.prototype.onConfigure,l=e.prototype.onConnectionsChange,c=function(){r&&Xk(this),o&&Gk(this),n&&ms(this)};return e.prototype.onNodeCreated=function(){const u=i?.apply(this,arguments);return queueMicrotask(()=>c.call(this)),u},e.prototype.onConfigure=function(){const u=a?.apply(this,arguments);return queueMicrotask(()=>c.call(this)),u},e.prototype.onConnectionsChange=function(){const u=l?.apply(this,arguments);return queueMicrotask(()=>c.call(this)),u},!0}const Po=e=>ha(ct().rootGraph??ct().graph,e),Ph=e=>e?.widgets?.find(t=>t.name==="regional_json"),il=e=>e?.widgets?.find(t=>t.name==="lora_bindings_json"),zh=(e,t)=>e&&t?e.geometry.filter(r=>Pt(r)===t):[],zo=X1,Fc=(e,t)=>{const r=e.currentTarget.getBoundingClientRect();return{x:Math.max(0,Math.min(1,(e.clientX-r.left)/r.width)),y:Math.max(0,Math.min(1,(e.clientY-r.top)/r.height)),pressure:t==="stylus"&&e.pointerType==="pen"?Math.max(.01,e.pressure):1}};function Fh(e,t){const r=URL.createObjectURL(new Blob([JSON.stringify(t,null,2)],{type:"application/json"})),o=document.createElement("a");o.href=r,o.download=e,o.click(),URL.revokeObjectURL(r)}function qk(e){const t=new Map(e.map(r=>[r.id,Ot()]));return Kt(e).map(r=>{r.id=t.get(r.id),r.parent_region_id=r.parent_region_id?t.get(r.parent_region_id)??null:null,ux(r.geometry,Ot);const o=new Map;return r.geometry.forEach(n=>{const i=Pt(n);o.has(i)||o.set(i,Ot()),n.id=Ot(),n.layer_id=o.get(i)}),r})}function Jk({open:e,activationToken:t=0,nodes:r,initialNode:o,backgrounds:n,loraStacks:i,onClose:a}){const[l,c]=m.useState(o),[u,d]=m.useState(null),[f,p]=m.useState(null),[g,x]=m.useState(null),[w,k]=m.useState([]),[b,h]=m.useState(null),[v,_]=m.useState(null),[y,T]=m.useState("select"),[S,z]=m.useState({size:.04,hardness:.75,opacity:1,shape:"round",pressureMode:"constant"}),[N,P]=m.useState(.5),[B,O]=m.useState(1),[E,A]=m.useState(!1),[C,R]=m.useState([]),[M,D]=m.useState([]),[W,F]=m.useState(null),[ie,X]=m.useState(null),[q,Z]=m.useState(""),[Y,Q]=m.useState(()=>Mf()),[oe,le]=m.useState(0),[Ce,Ee]=m.useState([]),[ve,It]=m.useState(()=>ec("")),[G,de]=m.useState(()=>vs(o)),se=gf(),$=m.useRef(null),pe=m.useRef(!1),fe=m.useRef(t),he=m.useRef(null),ot=m.useCallback(L=>Q(j=>{const V=j.artboard;return V.zoom===L.zoom&&V.panX===L.panX&&V.panY===L.panY&&V.fit===L.fit?j:{...j,artboard:L}}),[]),nt=m.useCallback(L=>Q(j=>j.openMenu===L?j:{...j,openMenu:L}),[]);m.useEffect(()=>{const L=pe.current,j=fe.current!==t;if(pe.current=e,fe.current=t,!e||!j)return;const V=o??r[0]??null,H=Po(l),J=Po(V);L&&H&&J!==H&&ri()==="keep"?Ee(ue=>[...new Set([...ue,H])].filter(Se=>Se!==J)):J&&Ee(ue=>ue.filter(Se=>Se!==J)),he.current=L?{mode:Y.mode,geometry:jh(Y,{width:window.innerWidth,height:window.innerHeight})}:null,c(V)},[t,o,r,e]),m.useEffect(()=>{h(null)},[l,e]),m.useEffect(()=>{if(!(!e||!l))try{const L=dn(Ph(l)?.value);L.regions=Mh(L.regions),zo(L.regions);const j=Af(il(l)?.value,L.document_id),V=Hn(j,new Set(L.regions.map(vr=>vr.id))),H=il(l);H&&JSON.stringify(j)!==JSON.stringify(V)&&(H.value=JSON.stringify(V),H.callback?.(H.value),l.graph?.setDirtyCanvas?.(!0,!0));const J=Cl(L.document_id),ue=L.regions.some(vr=>vr.id===J.selectedRegionId)?J.selectedRegionId:L.regions[0]?.id??null,Se=he.current;he.current=null,Se&&(J.mode=Se.mode,J.windows[Se.mode]=Se.geometry);const ut=L.regions.find(vr=>vr.id===ue),$t=ut&&Mr(ut).some(vr=>vr.id===J.selectedLayerId)?J.selectedLayerId:null;Q(J),d(L),It(V),de(vs(l)),p(ue),x($t),k($t?[$t]:[]),_($t),T(J.tool),z(J.brush),P(J.displayOpacity),O(J.backgroundOpacity),A(J.isolate&&!!$t),R([]),D([]),Z("")}catch(L){Z(L instanceof Error?L.message:String(L))}},[l,e]),m.useEffect(()=>{u&&rd(u.document_id,{...Y,selectedRegionId:f,selectedLayerId:g,displayOpacity:N,backgroundOpacity:B,isolate:E,tool:y,brush:S})},[B,S,N,u,E,g,f,y,Y]),m.useEffect(()=>{if(!e)return;const L=()=>Q(j=>({...j,windows:{workspace:fn(j.windows.workspace,{width:window.innerWidth,height:window.innerHeight},"workspace"),floating:fn(j.windows.floating,{width:window.innerWidth,height:window.innerHeight},"floating")}}));return window.addEventListener("resize",L),()=>window.removeEventListener("resize",L)},[e]);const ye=u?.regions.find(L=>L.id===f)??null,We=zh(ye,g),me=b?We.filter(L=>L.id===b):We,we=ye&&g?Mr(ye).find(L=>L.id===g)??null:null,qe=ye?Mr(ye).filter(L=>w.includes(L.id)):[],gt=qe.length>1&&qe.every(L=>!L.authoring.locked),Sr=!!we&&!we.authoring.locked,yt=L=>{x(L),k(L?[L]:[]),_(L),h(null)},yn=(L,j,V)=>{const H=u?.regions.find($t=>$t.id===L);if(!H)return;const J=L===f,ue=[...Mr(H)].reverse().map($t=>$t.id),ut=gk(J?{ids:w,primary:g,anchor:v}:{ids:[],primary:null,anchor:null},j,ue,V);p(L),k(ut.ids),x(ut.primary),_(ut.anchor),A(!1),h(null)},pi=W&&g&&W.every(L=>Pt(L)===g)?$.current&&"commit"in $.current&&$.current.commit==="subtract"?[...me,...W]:W:me,rr=pi.length&&u?Qs(pi,u.canvas):null,Ht=m.useCallback((L,j=!0,V=ve)=>{if(!l)return;j&&u&&(R(Se=>[...Se.slice(-99),zc(u,ve)]),D([]));const H=Hn(V,new Set(L.regions.map(Se=>Se.id)));d(L);const J=Ph(l);J&&(J.value=JSON.stringify(L),J.callback?.(J.value)),It(H);const ue=il(l);ue&&(ue.value=JSON.stringify(H),ue.callback?.(ue.value)),l.graph?.setDirtyCanvas?.(!0,!0)},[u,ve,l]),He=m.useCallback((L,j=!0)=>{if(!u)return;const V=Kt(u);L(V),Ht(V,j)},[u,Ht]),hi=m.useCallback(L=>{if(!l)return;const j=u?Hn(L,new Set(u.regions.map(H=>H.id))):L;It(j);const V=il(l);V&&(V.value=JSON.stringify(j),V.callback?.(V.value)),l.graph?.setDirtyCanvas?.(!0,!0)},[u,l]),Ba=L=>hi({...ve,global_stack_id:L}),zx=(L,j)=>{const V={...ve.regions};j?V[L]=j:delete V[L],hi({...ve,regions:V})},Fx=L=>He(j=>{const V=j.regions.find(H=>H.id===f);V&&L(V)}),jo=(L,j)=>He(V=>{const H=V.regions.find(J=>J.id===f);H&&j(zh(H,L),H)}),br=m.useCallback(()=>{$.current=null,F(null)},[]),Pa=m.useCallback(()=>{if($.current?.mode!=="draw-polygon"||!W?.length)return;const L=W.map(j=>j.type==="polygon"?{...j,points:j.points.filter((V,H,J)=>H===0||Math.hypot(V.x-J[H-1].x,V.y-J[H-1].y)>.001)}:j);if(L.some(j=>j.type!=="polygon"||j.points.length<3))return br();He(j=>{const V=j.regions.find(H=>H.id===f);V&&V.geometry.push(...L)}),br()},[br,W,He,f]),ic=m.useCallback(()=>{if(!u||!C.length)return;const L=C[C.length-1];R(C.slice(0,-1)),D([zc(u,ve),...M]),Ht(Kt(L.document),!1,Kt(L.loraBindings))},[u,M,C,ve,Ht]),ac=m.useCallback(()=>{if(!u||!M.length)return;const L=M[0];D(M.slice(1)),R([...C,zc(u,ve)]),Ht(Kt(L.document),!1,Kt(L.loraBindings))},[u,M,C,ve,Ht]),lc=L=>{jo(L,(j,V)=>{V.geometry=V.geometry.filter(H=>Pt(H)!==L)}),w.includes(L)&&yt(null)},Ux=L=>He(j=>{const V=j.regions.find(J=>J.id===f),H=V?.geometry.find(J=>J.id===L);H&&(H.enabled=H.enabled===!1)}),Vx=L=>{const j=u?.regions.find(V=>V.id===f);if(!j||!Gu(j.geometry,L)){Ir({title:"Operation cannot be removed",message:"This operation is the additive base for later subtract operations. Delete or move those operations first.",tone:"warning",duration:5e3});return}He(V=>{const H=V.regions.find(J=>J.id===f);H&&(H.geometry=H.geometry.filter(J=>J.id!==L))}),b===L&&h(null)},Wf=()=>{if(!f||!g||!gt)return;const L=g;He(j=>{const V=j.regions.find(H=>H.id===f);V&&bk(V,w,L)}),yt(L)},Wx=async()=>{if(!(!u||!f||!g||!we||!Sr))try{const L=await Tk(we.geometries,u.canvas,Ot);if(L.length<2){Ir({title:"Layer was not split",message:"The selected layer contains fewer than two disconnected visible areas.",tone:"info",duration:4500});return}He(V=>{const H=V.regions.find(ue=>ue.id===f);if(!H)return;const J=H.geometry.findIndex(ue=>Pt(ue)===g);H.geometry=H.geometry.filter(ue=>Pt(ue)!==g),H.geometry.splice(Math.max(0,J),0,...L)});const j=L.map(V=>Pt(V));k(j),x(j[0]),_(j[0])}catch(L){Ir({title:"Split failed",message:String(L),tone:"danger",duration:6e3})}};m.useEffect(()=>{if(!e)return;const L=j=>{if(j.key==="Escape"&&$.current){j.preventDefault(),j.stopImmediatePropagation(),br();return}if(j.key==="Enter"&&$.current?.mode==="draw-polygon"){j.preventDefault(),j.stopImmediatePropagation(),Pa();return}if((j.ctrlKey||j.metaKey)&&j.key.toLowerCase()==="e"&>){j.preventDefault(),j.stopImmediatePropagation(),Wf();return}if((j.key==="Delete"||j.key==="Backspace")&&g&&!(j.target instanceof HTMLInputElement||j.target instanceof HTMLTextAreaElement)){j.preventDefault(),j.stopImmediatePropagation(),lc(g);return}!(j.ctrlKey||j.metaKey)||j.key.toLowerCase()!=="z"||(j.preventDefault(),j.stopImmediatePropagation(),j.shiftKey?ac():ic())};return window.addEventListener("keydown",L,!0),()=>window.removeEventListener("keydown",L,!0)},[br,gt,lc,Pa,e,ac,g,w,ic]);const Hx=L=>{if(!u||!ye||ye.authoring.locked)return;const j=Fc(L,S.pressureMode),V=L.target.closest?.("[data-handle]")?.getAttribute("data-handle");if(y==="select"){if(L.currentTarget.setPointerCapture(L.pointerId),F(null),V&&we&&!we.authoring.locked){$.current={mode:"resize",start:j,original:Kt(me),handle:V};return}const or=[...Mr(ye)].reverse().find(Yt=>Yt.enabled&&Yt.authoring.visible&&Yt.geometries.filter(Lr=>Lr.operation==="add").some(Lr=>uk(Lr,j,u.canvas)));yt(or?.id??null),or&&!or.authoring.locked&&($.current={mode:"move",start:j,startScreen:{x:L.clientX,y:L.clientY},original:Kt(or.geometries),started:!1});return}const H=y.endsWith("subtract");if(H&&(!g||we?.authoring.locked))return;if(y.startsWith("polygon")&&$.current?.mode==="draw-polygon"){const or=W?.find(Yt=>Yt.type==="polygon")?.points.length??0;if($1(or,$.current.startScreen,{x:L.clientX,y:L.clientY})){Pa();return}F(Yt=>Yt?.map(Lr=>Lr.type==="polygon"?{...Lr,points:[...Lr.points,j]}:Lr)??null);return}const J=Ot(),ue=H?null:W1(we),Se=H?g:ue??J,ut=y.startsWith("rect")?"Rectangle":y.startsWith("ellipse")?"Ellipse":y.startsWith("polygon")?"Polygon":"Brush",$t=H||ue?we?.authoring:{name:`${ut} ${Mr(ye).length+1}`,visible:!0,locked:!1},vr=H?[...new Set(me.map(Ma))]:[void 0];if(y.startsWith("rect")||y.startsWith("ellipse")){L.currentTarget.setPointerCapture(L.pointerId);const or=y.startsWith("rect")?"rect":"ellipse";F(vr.map((Yt,Lr)=>({id:Lr?Ot():J,layer_id:Se,mask_group_id:Yt,type:or,operation:H?"subtract":"add",enabled:!0,authoring:$t,x:j.x,y:j.y,width:.001,height:.001}))),$.current={mode:"draw-box",start:j,commit:H?"subtract":"add"},H||yt(Se)}else y.startsWith("polygon")?(F(vr.map((or,Yt)=>({id:Yt?Ot():J,layer_id:Se,mask_group_id:or,type:"polygon",operation:H?"subtract":"add",enabled:!0,authoring:$t,points:[j]}))),$.current={mode:"draw-polygon",start:j,startScreen:{x:L.clientX,y:L.clientY},commit:H?"subtract":"add"},H||yt(Se)):(L.currentTarget.setPointerCapture(L.pointerId),F(vr.map((or,Yt)=>({id:Yt?Ot():J,layer_id:Se,mask_group_id:or,type:"brush_stroke",operation:y==="brush-add"?"add":"subtract",enabled:!0,authoring:$t,size:S.size,hardness:S.hardness,opacity:S.opacity,shape:S.shape,pressure_mode:S.pressureMode,points:[j]}))),$.current={mode:"draw-brush",start:j,commit:y==="brush-add"?"add":"subtract"},y==="brush-add"&&yt(Se))},$x=L=>{if(!u)return;const j=Fc(L,S.pressureMode);X(j);const V=$.current;if(V)if(V.mode==="draw-box"&&(W?.[0]?.type==="rect"||W?.[0]?.type==="ellipse"))F(W.map(H=>H.type==="rect"||H.type==="ellipse"?{...H,x:Math.min(V.start.x,j.x),y:Math.min(V.start.y,j.y),width:Math.max(.001,Math.abs(j.x-V.start.x)),height:Math.max(.001,Math.abs(j.y-V.start.y))}:H));else if(V.mode==="draw-brush"&&W?.[0]?.type==="brush_stroke")F(W.map(H=>H.type==="brush_stroke"?{...H,points:[...H.points,j]}:H));else if(V.mode==="move"){if(!V.started&&!H1(V.startScreen,{x:L.clientX,y:L.clientY}))return;V.started=!0,F(Dh(V.original,j.x-V.start.x,j.y-V.start.y,u.canvas))}else V.mode==="resize"&&F(dk(V.original,V.handle,j.x-V.start.x,j.y-V.start.y,L.shiftKey,u.canvas))},Yx=L=>{if(!u||!$.current||!W)return br();const j=$.current,V=Fc(L,S.pressureMode);if(j.mode==="draw-polygon")return;let H=G1(j.mode)?W.map(J=>J.type==="brush_stroke"?{...J,points:pk([...J.points,V])}:J):W;if(j.mode==="draw-box"&&(H[0].type==="rect"||H[0].type==="ellipse")&&(H[0].width<=.002||H[0].height<=.002))return br();He(J=>{const ue=J.regions.find(Se=>Se.id===f);if(ue)if(j.mode.startsWith("draw"))ue.geometry.push(...H);else{const Se=new Map(H.map(ut=>[ut.id,ut]));ue.geometry=ue.geometry.map(ut=>Se.get(ut.id)??ut)}}),br()},Xx=L=>{$.current?.mode==="draw-polygon"&&(L.preventDefault(),Pa())},Gx=(L,j)=>He(V=>{const H=V.regions.findIndex(ue=>ue.id===L),J=H+j;J<0||J>=V.regions.length||([V.regions[H],V.regions[J]]=[V.regions[J],V.regions[H]],zo(V.regions))}),Kx=(L,j)=>jo(L,(V,H)=>{const J=Mr(H),ue=J.findIndex(ut=>ut.id===L),Se=ue+j;Se<0||Se>=J.length||([J[ue],J[Se]]=[J[Se],J[ue]],H.geometry=J.flatMap(ut=>ut.geometries))}),qx=L=>{let j=!1,V=null;if(He(J=>{j=Ok(J,L,()=>V=Ot()),zo(J.regions)}),!j)return;if(p(L.target.regionId),L.source.kind==="region"){yt(null);return}const H=L.source.kind==="layer"?L.source.layerId:L.target.kind==="region"?V:L.target.layerId;x(H),k(H?[H]:[]),_(H),h(L.source.kind==="geometry"?L.source.geometryId:null),A(!1)},Jx=(L,j)=>jo(L,V=>{if(V.length)if(j==="enabled"){const H=!V.some(J=>J.enabled!==!1);V.forEach(J=>{J.enabled=H})}else{const H=!sr(V[0])[j];V.forEach(J=>{J.authoring={...sr(J),[j]:H}})}}),Zx=L=>jo(L,(j,V)=>{const H=Ot(),J=Dh(Kt(j),.02,.02,u.canvas);ux(J,Ot),J.forEach((ue,Se)=>{ue.id=Ot(),ue.layer_id=H,ue.authoring={...sr(ue),name:`${sr(ue).name} Copy`,visible:!0,locked:!1},Se&&(ue.authoring=J[0].authoring)}),V.geometry.push(...J),yt(H)}),Qx=L=>{const j=u?.regions.find(V=>V.id===L);j&&se.confirm({title:`Delete region “${j.name}”?`,message:`This removes ${Mr(j).length} layer(s) and clears child-region parent references.`,confirmLabel:"Delete region",danger:!0,action:()=>{He(V=>{V.regions=V.regions.filter(H=>H.id!==L),V.regions.forEach(H=>{H.parent_region_id===L&&(H.parent_region_id=null)}),zo(V.regions)}),p(u?.regions.find(V=>V.id!==L)?.id??null),yt(null)}})},ey=async L=>{try{if(!u)return;const j=w0(dn(await L.text()),u.document_id);j.regions=Mh(j.regions),zo(j.regions),Ht(j),p(j.regions[0]?.id??null),yt(null)}catch(j){Ir({title:"Document import failed",message:String(j),tone:"danger",duration:6e3})}},ty=async L=>{try{const j=JSON.parse(await L.text());if(j?.schema!=="bv.regions"||![1,2].includes(j?.version)||!Array.isArray(j.regions))throw new Error("Not a BV Regions v1/v2 export");const V=j.version===1?j.regions.map(H=>({...H,usage:"generation"})):j.regions;He(H=>{H.regions.push(...qk(V)),zo(H.regions)})}catch(j){Ir({title:"Region import failed",message:String(j),tone:"danger",duration:6e3})}},ry=Aa(l);if(!e)return null;const Hf=jh(Y,{width:window.innerWidth,height:window.innerHeight}),$f=(L,j,V=!0)=>{const H=Po(l);to("regional",L),L!==H&&(Ee(J=>j?J.filter(ue=>ue!==L):[...new Set([...J,H])].filter(ue=>ue&&ue!==L)),V&&(he.current={mode:Y.mode,geometry:Hf}),c(r.find(J=>Po(J)===L)??null))},oy=u?Sk(ve,i,new Set(u.regions.map(L=>L.id))):[],Yf=G.entries.length&&(!l||!cd(l,G))?["V3 LoRA collector link is unresolved"]:oy,ny=G.entries.length?`${G.entries.length} V3 LoRA assignment${G.entries.length===1?"":"s"}`:u?Lk(ve,i,Object.fromEntries(u.regions.map(L=>[L.id,L.name]))):"",Xf=l?bs(l).filter(L=>L.resources.length>0):[],Gf=l?cd(l,G):!1,Kf=(L,j,V)=>{l&&de(Yk(l,G,L,j,V))},sc=L=>u?s.jsx(sk,{mode:L,region:ye,layer:we,bounds:rr,canvas:u.canvas,automaticRegionColor:ye?Fv(u.regions.indexOf(ye)):null,globalPrompts:u.prompts.global,backgroundPrompts:u.prompts.background,negativeMode:u.negative_mode,promptSections:Y.promptSections,loraBindings:ve,loraStacks:i,loraV3GlobalEditor:s.jsx(Bh,{label:"Global LoRA Stack",help:"Applied globally and inherited by every region.",collectors:Xf,config:G,target:{scope:"global"},resolved:Gf,onValue:(j,V)=>Kf({scope:"global"},j,V)}),loraV3RegionEditor:ye?s.jsx(Bh,{label:"Additional LoRA Stack",help:"Added to the global stack for this region.",collectors:Xf,config:G,target:{scope:"region",document_id:u.document_id,region_id:ye.id},resolved:Gf,onValue:(j,V)=>Kf({scope:"region",document_id:u.document_id,region_id:ye.id},j,V)}):null,onGlobalLoraStack:Ba,onRegionLoraStack:zx,onPromptSection:(j,V)=>Q(H=>({...H,promptSections:{...H.promptSections,[j]:V}})),onNegativeMode:j=>He(V=>{V.negative_mode=j}),onGlobalPrompts:j=>He(V=>{V.prompts.global=j}),onBackgroundPrompts:j=>He(V=>{V.prompts.background=j}),onRegion:Fx,onLayerBounds:j=>g&&jo(g,(V,H)=>{const J=new Map(cx(V,j,u.canvas).map(ue=>[ue.id,ue]));H.geometry=H.geometry.map(ue=>J.get(ue.id)??ue)}),onBrushSetting:(j,V)=>g&&jo(g,H=>H.forEach(J=>{J.type==="brush_stroke"&&Object.assign(J,{[j]:V})}))}):null;return s.jsxs(s.Fragment,{children:[Ce.map(L=>{const j=r.find(V=>Po(V)===L);return j?s.jsx(Zs,{title:`Regional Editor · ${j.title||"BV Regional Prompt"} · #${j.id}`,onRestore:()=>$f(L,!1,!1),onClose:()=>Ee(V=>V.filter(H=>H!==L))},L):null}),s.jsx(xn,{open:e,activationToken:t,title:"BV Regional Editor",menuVisible:ry,onMenuVisible:L=>di(l,L),context:s.jsx(Da,{label:"Regional prompt document",value:Po(l),onNavigate:$f,options:r.filter(L=>mn(L)).map(L=>({value:Po(L),label:`${L.title||"BV Regional Prompt"} · #${L.id}`}))}),center:s.jsx(nk,{openMenu:Y.openMenu,onOpenMenu:nt,displayOpacity:N,backgroundOpacity:B,isolate:E,binaryMaskPreview:Y.binaryMaskPreview,hasSelection:!!g,onDisplayOpacity:P,onBackgroundOpacity:O,onToggleIsolate:()=>A(L=>!L),onToggleBinaryMaskPreview:()=>{br(),Q(L=>({...L,binaryMaskPreview:!L.binaryMaskPreview}))},onExportDocument:()=>u&&Fh(`${u.title||"bv-regional"}.json`,u),onExportRegions:()=>u&&Fh(`${u.title||"bv-regions"}.regions.json`,{schema:"bv.regions",version:2,canvas:u.canvas,regions:u.regions}),onImportDocument:ey,onImportRegions:ty,onUndo:ic,onRedo:ac,canUndo:!!C.length,canRedo:!!M.length,canMergeLayers:gt,onMergeLayers:Wf,canvas:u?.canvas??{width:1024,height:1024},onCanvas:L=>He(j=>{j.canvas=L})}),mode:Y.mode,initialGeometry:Hf,minSize:{width:780,height:520},className:"bv-regional-shell",bodyClassName:"bv-regional-window-body",onModeChange:L=>Q(j=>({...j,mode:L})),onGeometry:L=>Q(j=>({...j,windows:{...j.windows,floating:L}})),onClose:a,status:u?s.jsxs(s.Fragment,{children:[s.jsx("span",{children:Yf[0]?`⚠ ${Yf[0]}`:`✓ ${ny}`}),s.jsxs("span",{children:[u.regions.length," regions · layout adjusted for this session"]})]}):null,actions:u?s.jsx(Bm,{storageId:`regional-editor:${u.document_id}`,editorType:"regional",onClick:()=>le(L=>L+1)}):null,children:q?s.jsx("div",{className:"bv-regional-error",children:q}):u&&s.jsx(s.Fragment,{children:s.jsx("main",{className:"bv-regional-dock-host",children:s.jsx(Mm,{storageId:`regional-editor:${u.document_id}`,resetSignal:oe,defaultModel:{global:{tabEnableClose:!1,tabEnablePopout:!1,tabEnablePopoutIcon:!1,tabEnablePopoutFloatIcon:!0,tabSetMinWidth:180,tabSetMinHeight:120},borders:[],layout:{type:"row",children:[{type:"row",weight:22,minWidth:220,children:[{type:"tabset",weight:55,children:[{type:"tab",id:"regions",name:"Regions",component:"regions",enablePopoutFloatIcon:!0}]},{type:"tabset",weight:45,children:[{type:"tab",id:"selection",name:"Selection",component:"selection",enablePopoutFloatIcon:!0}]}]},{type:"tabset",weight:54,minWidth:320,children:[{type:"tab",id:"canvas",name:"Canvas",component:"canvas",enablePopoutFloatIcon:!0}]},{type:"row",weight:24,minWidth:260,children:[{type:"tabset",weight:65,children:[{type:"tab",id:"global",name:"Global",component:"global",enablePopoutFloatIcon:!0}]},{type:"tabset",weight:35,children:[{type:"tab",id:"region",name:"Region",component:"region",enablePopoutFloatIcon:!0}]}]}]}},panels:[{id:"regions",title:"Regions",weight:22,minWidth:220,content:s.jsx(E0,{regions:u.regions,selectedRegionId:f,selectedLayerId:g,selectedLayerIds:w,selectedGeometryId:b,onSelectRegion:L=>{p(L),yt(null),A(!1)},onSelectLayer:yn,onSelectGeometry:(L,j,V)=>{p(L),x(j),k([j]),_(j),h(V),A(!1)},onToggleGeometry:Ux,onDeleteGeometry:Vx,onAddRegion:()=>He(L=>{const j=_0(L.regions.length);L.regions.unshift(j),zo(L.regions),p(j.id),yt(null)}),onRenameRegion:(L,j)=>He(V=>{V.regions.find(H=>H.id===L).name=j}),onRenameLayer:(L,j)=>jo(L,V=>V.forEach(H=>{H.authoring={...sr(H),name:j}})),onToggleRegion:(L,j)=>He(V=>{const H=V.regions.find(J=>J.id===L);j==="enabled"?H.enabled=!H.enabled:j==="visible"?H.authoring.visible=!H.authoring.visible:H.authoring.locked=!H.authoring.locked}),onToggleLayer:Jx,onMoveRegion:Gx,onMoveLayer:Kx,onTreeMove:qx,onDeleteRegion:Qx,onDeleteLayer:lc,onDuplicateLayer:Zx,canSplitDisconnectedAreas:Sr,onSplitDisconnectedAreas:Wx})},{id:"canvas",title:"Canvas",weight:54,minWidth:320,content:s.jsx(Q1,{document:u,background:n[u.document_id],selectedRegionId:f,selectedLayerId:g,draft:W,selectionBounds:rr,cursor:ie,tool:y,brush:S,canSubtract:!!we&&!we.authoring.locked,displayOpacity:N,backgroundOpacity:B,isolate:E,binaryMaskPreview:Y.binaryMaskPreview,initialView:Y.artboard,onView:ot,onTool:L=>{T(L),br()},onBrush:z,onPointerDown:Hx,onPointerMove:$x,onPointerUp:Yx,onPointerCancel:br,onPointerLeave:()=>{$.current||X(null)},onDoubleClick:Xx},u.document_id)},{id:"global",title:"Global",weight:12,minWidth:240,content:sc("document")},{id:"selection",title:"Selection",weight:12,minWidth:240,content:sc("selection")},{id:"region",title:"Region",weight:12,minWidth:240,content:sc("region")}]})})})}),se.dialog]})}const Fo=e=>ha(ct().rootGraph??ct().graph,e),Uh=e=>e?.widgets?.find(t=>t.name==="regional_json"),Uc=e=>e?.widgets?.find(t=>t.name==="lora_bindings_json"),Zk=(e,t)=>t==="global"||t==="background"||e.regions.some(r=>r.id===t),Qk=(e,t)=>t==="global"?e.prompts.global:t==="background"?e.prompts.background:e.regions.find(r=>r.id===t)?.prompts??e.prompts.global;function eE({open:e,activationToken:t=0,nodes:r,initialNode:o,loraStacks:n,onClose:i,onOpenEditor:a}){const[l,c]=m.useState(o),[u,d]=m.useState(null),[f,p]=m.useState(()=>ec("")),[g,x]=m.useState("global"),[w,k]=m.useState(()=>ps({x:window.innerWidth-544,y:84,width:520,height:640},{width:window.innerWidth,height:window.innerHeight})),[b,h]=m.useState(""),[v,_]=m.useState([]),y=m.useRef(null),T=m.useRef(!1),S=m.useRef(t);m.useEffect(()=>{const R=T.current,M=S.current!==t;if(T.current=e,S.current=t,!e||!M)return;const D=o??r[0]??null,W=Fo(l),F=Fo(D);R&&W&&F!==W&&ri()==="keep"?_(ie=>[...new Set([...ie,W])].filter(X=>X!==F)):F&&_(ie=>ie.filter(X=>X!==F)),y.current=R?w:null,c(D)},[t,o,r,e]),m.useEffect(()=>{if(l)try{const R=dn(Uh(l)?.value),M=Af(Uc(l)?.value,R.document_id),D=Hn(M,new Set(R.regions.map(X=>X.id))),W=Uc(l);W&&JSON.stringify(M)!==JSON.stringify(D)&&(W.value=JSON.stringify(D),W.callback?.(W.value),l.graph?.setDirtyCanvas?.(!0,!0));const F=Cl(R.document_id),ie=Zk(R,F.quickPromptTarget)?F.quickPromptTarget:"global";d(R),p(D),x(ie),k(y.current??F.quickPromptWindow),y.current=null,h("")}catch(R){d(null),h(R instanceof Error?R.message:String(R))}},[l,e]);const z=m.useMemo(()=>u?Qk(u,g):null,[u,g]),N=R=>{if(x(R),!u)return;const M=Cl(u.document_id);rd(u.document_id,{...M,quickPromptTarget:R})},P=R=>{if(!u)return;const M=Cl(u.document_id);rd(u.document_id,{...M,quickPromptWindow:R})},B=R=>{if(!u||!l)return;const M=Kt(u);if(g==="global")M.prompts.global=R;else if(g==="background")M.prompts.background=R;else{const W=M.regions.find(F=>F.id===g);if(!W)return;W.prompts=R}d(M);const D=Uh(l);D&&(D.value=JSON.stringify(M),D.callback?.(D.value)),l.graph?.setDirtyCanvas?.(!0,!0)},O=R=>{if(!u||!l)return;let M;if(g==="global"||g==="background")M={...f,global_stack_id:R};else{const W={...f.regions};R?W[g]=R:delete W[g],M={...f,regions:W}}p(M);const D=Uc(l);D&&(D.value=JSON.stringify(M),D.callback?.(D.value)),l.graph?.setDirtyCanvas?.(!0,!0)},E=g==="global"||g==="background"?f.global_stack_id??"":f.regions[g]??"",A=(R,M,D=!0)=>{const W=Fo(l);to("quick",R),R!==W&&(_(F=>M?F.filter(ie=>ie!==R):[...new Set([...F,W])].filter(ie=>ie&&ie!==R)),y.current=D?w:null,c(r.find(F=>Fo(F)===R)??null))},C=Aa(l);return s.jsxs(s.Fragment,{children:[v.map(R=>{const M=r.find(D=>Fo(D)===R);return M?s.jsx(Zs,{title:`Quick Edit · ${M.title||"BV Regional Prompt"} · #${M.id}`,onRestore:()=>A(R,!1,!1),onClose:()=>_(D=>D.filter(W=>W!==R))},R):null}),s.jsx(xn,{open:e,activationToken:t,title:"Regional Quick Edit",menuVisible:C,onMenuVisible:R=>di(l,R),context:s.jsx(Da,{label:"Regional Prompt Node",value:Fo(l),options:r.filter(R=>mn(R)).map(R=>({value:Fo(R),label:`${R.title||"BV Regional Prompt"} · #${R.id}`})),onNavigate:A}),allowWorkspace:!1,initialGeometry:w,minSize:{width:360,height:320},className:"bv-quick-prompt-window bv-density-compact",onClose:i,onGeometry:R=>{const M=ps(R,{width:window.innerWidth,height:window.innerHeight});k(M),P(M)},status:s.jsx(Sv,{tone:"success",dot:!0,children:"Autosaved"}),actions:s.jsx(ne,{intent:"primary",disabled:!l||!u,onClick:()=>l&&a(l),children:"Open Full Editor"}),children:s.jsx("div",{className:"bv-quick-prompt-body",children:b?s.jsx(zr,{tone:"danger",title:"Prompt document unavailable",children:b}):u&&z&&s.jsxs(s.Fragment,{children:[s.jsx(tt,{label:"Prompt Target",value:g,onValue:N,options:[{value:"global",label:"Global"},{value:"background",label:"Background"},...u.regions.map(R=>({value:R.id,label:R.name}))]}),s.jsx(tt,{label:g==="global"||g==="background"?"Global LoRA Stack":"Additional LoRA Stack",help:g==="global"||g==="background"?"Applied globally and inherited by every region.":"Added to the global stack for this region.",value:E,onValue:R=>O(R||null),options:[{value:"",label:"None"},...n.map(R=>({value:R.id,label:R.name}))]}),s.jsxs("div",{className:"bv-prompt-editor-fields",children:[s.jsx(gr,{label:"Positive",children:s.jsx(fs,{autoFocus:!0,value:z.positive_source,onValue:R=>B({...z,positive_source:R}),completionContext:{scope:g==="global"||g==="background"?g:"region",polarity:"positive"}})}),s.jsx(gr,{label:"Negative",children:s.jsx(fs,{value:z.negative_source,onValue:R=>B({...z,negative_source:R}),completionContext:{scope:g==="global"||g==="background"?g:"region",polarity:"negative"}})})]})]})})})]})}function kx(e,t){const r=t?e.filter(n=>n.enabled!==!1&&(n.usage===t||n.usage==="both"||!n.usage&&t==="generation")):e,o=new Map;for(const n of r)o.set(n.name,(o.get(n.name)??0)+1);return r.map(n=>({...n,label:o.get(n.name)===1?n.name:`${n.name} · ${n.id.slice(0,8)}`}))}function tE(e){const t=new Map;return e.forEach(r=>t.set(r.title,(t.get(r.title)??0)+1)),e.map(r=>({...r,label:t.get(r.title)>1?`${r.title} · #${r.nodeId}`:`${r.title} · #${r.nodeId}`}))}function rE(e,t,r){const o=typeof e=="string"?e:"";return t.some(n=>n.documentId===o)?o:r?t[0]?.documentId??"":""}function oE(e,t,r){tx(r);const o=document.createElement("div");o.className="bv-ui bv-settings-datasets";const n=ci(o),i=rx;return n.render(m.createElement(i,{onSelectionChange:a=>t(JSON.stringify(a))})),o}const mo=new Map;let Ti=null;function nE(e){return e.disabled||e.readOnly||e.closest("#bv-root")||e.dataset.bvAutocomplete==="off"||e.closest('[data-bv-autocomplete="off"]')?!1:e.matches("textarea.comfy-multiline-input")||!!e.closest("[data-node-id]")}function Vh(e){if(mo.has(e)||!nE(e))return;let t=[],r=0,o=null,n=null,i=null,a=null,l=null,c=210;const u=()=>{n?.abort(),n=null,t=[],o=null,l?.unmount(),l=null,a?.remove(),a=null},d=()=>{if(!a)return;const h=ds(e,td(),c);f(h)},f=(h=ds(e,td(),c))=>{a||(a=document.createElement("div"),a.className="bv-ui bv-ui-portal",document.body.append(a),l=ci(a)),l.render(m.createElement(lx,{suggestions:t,selected:r,position:h,onAccept:g,onHeight:v=>{Math.abs(v-c)<1||(c=v,d())}}))},p=()=>f(),g=(h=r)=>{const v=t[h];if(!o||!v)return;const _=nx(e.value,o,v);e.value=_.text,e.dispatchEvent(new InputEvent("input",{bubbles:!0,inputType:"insertText",data:v.insertText})),e.dispatchEvent(new Event("change",{bubbles:!0})),u(),requestAnimationFrame(()=>{e.focus(),e.setSelectionRange(_.caret,_.caret)})},x=()=>{if(!Of()||e.selectionStart!==e.selectionEnd||(i!=null&&window.clearTimeout(i),n?.abort(),o=ox(e.value,e.selectionStart??e.value.length,{scope:"generic",polarity:"positive"}),!o))return u();const h=o;n=new AbortController;const v=n;i=window.setTimeout(async()=>{const _=await ix(h,[ax],v.signal);v.signal.aborted||document.activeElement!==e||(t=_,r=0,_.length?p():u())},120)},w=h=>{t.length&&(h.key==="ArrowDown"||h.key==="ArrowUp"?(h.preventDefault(),h.stopPropagation(),h.stopImmediatePropagation(),r=(r+(h.key==="ArrowDown"?1:-1)+t.length)%t.length,p()):h.key==="Enter"||h.key==="Tab"?(h.preventDefault(),h.stopPropagation(),h.stopImmediatePropagation(),g()):h.key==="Escape"&&(h.preventDefault(),h.stopPropagation(),h.stopImmediatePropagation(),u()))},k=()=>window.setTimeout(()=>{a?.contains(document.activeElement)||u()},120),b=()=>{document.activeElement===e&&x()};e.addEventListener("input",x),e.addEventListener("select",x),document.addEventListener("selectionchange",b),e.addEventListener("keydown",w,!0),e.addEventListener("blur",k),window.addEventListener("resize",d),window.addEventListener("scroll",d,!0),mo.set(e,{close:u,destroy:()=>{u(),e.removeEventListener("input",x),e.removeEventListener("select",x),document.removeEventListener("selectionchange",b),e.removeEventListener("keydown",w,!0),e.removeEventListener("blur",k),window.removeEventListener("resize",d),window.removeEventListener("scroll",d,!0)}})}function Wh(e){e instanceof HTMLTextAreaElement&&Vh(e),e.querySelectorAll?.("textarea").forEach(t=>Vh(t))}function iE(e){(e instanceof HTMLTextAreaElement?[e]:[...e.querySelectorAll?.("textarea")??[]]).forEach(r=>{mo.get(r)?.destroy(),mo.delete(r)})}function aE(){if(Ti)return Ti;Wh(document);const e=new MutationObserver(o=>o.forEach(n=>{n.addedNodes.forEach(i=>{i instanceof Element&&Wh(i)}),n.removedNodes.forEach(i=>{i instanceof Element&&iE(i)})}));e.observe(document.body,{childList:!0,subtree:!0});const t=()=>{Of()||mo.forEach(o=>o.close())},r=()=>mo.forEach(o=>o.close());return window.addEventListener(xa,t),window.addEventListener(ya,r),Ti=()=>{e.disconnect(),window.removeEventListener(xa,t),window.removeEventListener(ya,r),mo.forEach(o=>o.destroy()),mo.clear(),Ti=null},Ti}function Hh(e){return e?.extensionManager?.workflow?.activeWorkflow??e?.workflowManager?.activeWorkflow??e?.graph??null}function lE(e,t,r,o=(i,a)=>globalThis.setInterval(i,a),n=i=>globalThis.clearInterval(i)){const i=Hh(e);let a=!1;const l=()=>{a||Hh(e)===i||(a=!0,r())};t.addEventListener("graphChanged",l);const c=o(l,250);return()=>{t.removeEventListener("graphChanged",l),n(c)}}const Ex=["region","global_influence","background_influence","primary_region_influence","context_regions_json"],sE=e=>Ex.map(t=>e?.find(r=>r.name===t)?.value),cE=e=>Array.isArray(e)&&e.length===Ex.length+1&&e[3]==null&&typeof e[4]=="number"&&typeof e[5]=="string"?[...e.slice(0,3),...e.slice(4)]:e,Wr=(e,t,r,o)=>{const n=Number(e);return Number.isFinite(n)?Math.max(r,Math.min(o,n)):t},Tx=()=>({global_influence:1,background_influence:.35,primary_region_influence:1,context_region_influence:1}),Rx=()=>({roi_padding:.15,threshold:.5,dilation:0,crop_factor:1.5,drop_size:10}),zf=e=>e.filter(t=>t.enabled!==!1&&(t.usage==="detailer"||t.usage==="both")).sort((t,r)=>(t.priority??0)-(r.priority??0)),ud=e=>({schema:"bv.detailer_plan",version:1,jobs:zf(e).map(t=>({region_ids:[t.id],primary_region_id:t.id,mask_composition:"union",prompt_composition:"context",conditioning:Tx(),detector:Rx()}))}),Nl=(e,t)=>{const r=new Set(zf(t).map(i=>i.id));let o;try{o=String(e??"").trim()?JSON.parse(String(e)):ud(t)}catch{o=ud(t)}return{schema:"bv.detailer_plan",version:1,jobs:Array.isArray(o?.jobs)?o.jobs.flatMap(i=>{const a=Array.isArray(i?.region_ids)?[...new Set(i.region_ids.map(String).filter(u=>r.has(u)))]:[];if(!a.length)return[];const l=i.conditioning??{},c=i.detector??{};return[{region_ids:a,primary_region_id:a.includes(String(i.primary_region_id))?String(i.primary_region_id):a[0],mask_composition:["union","intersection","subtract"].includes(i.mask_composition)?i.mask_composition:"union",prompt_composition:i.prompt_composition==="primary"?"primary":"context",...String(i.detector_id??"").trim()?{detector_id:String(i.detector_id).trim()}:{},conditioning:{global_influence:Wr(l.global_influence,1,0,2),background_influence:Wr(l.background_influence,.35,0,2),primary_region_influence:Wr(l.primary_region_influence,1,0,2),context_region_influence:Wr(l.context_region_influence,1,0,2)},detector:{roi_padding:Wr(c.roi_padding,.15,0,2),threshold:Wr(c.threshold,.5,0,1),dilation:Math.round(Wr(c.dilation,0,-512,512)),crop_factor:Wr(c.crop_factor,1.5,1,20),drop_size:Math.round(Wr(c.drop_size,10,1,8192)),...String(c.query??"").trim()?{query:String(c.query).trim()}:{},...Array.isArray(c.labels)?{labels:c.labels.map(String).map(u=>u.trim()).filter(Boolean)}:{}}}]}):[]}},Vc=e=>JSON.stringify(e),uE=e=>structuredClone(e);function dE({regions:e,detectorIds:t,stored:r,save:o,close:n,nodeId:i="",nodes:a=[],onNavigate:l=()=>{},currentNode:c}){const u=zf(e),d=m.useMemo(()=>Nl(r,e),[e,r]),f=Xs(d),p=f.value,[g,x]=m.useState(()=>Vc(d));Gs(f);const w=Vc(p)!==g,[k,b]=m.useState(null),h=()=>{const E=Vc(p);o(E),x(E),f.clear()},v=E=>w?b(()=>E):E(),_=()=>v(n),y=Aa(c),T=m.useMemo(()=>E=>s.jsx(xn,{...E,title:`${E.title} · #${i}`,shortTitle:"Detailer Plan",menuVisible:y,onMenuVisible:A=>di(c,A),onClose:_,context:s.jsx(Da,{label:"Detailer Plan Node",value:i,options:a.map(A=>({value:A.id,label:A.label})),onNavigate:(A,C)=>C?v(()=>l(A,!0)):l(A,!1)})}),[c,w,y,i,a,l]),[S,z]=m.useState([]),N=E=>f.commit(A=>{const C=uE(A);return E(C),C}),P=()=>N(E=>{const A=u[0];A&&E.jobs.push({region_ids:[A.id],primary_region_id:A.id,mask_composition:"union",prompt_composition:"context",conditioning:Tx(),detector:Rx()})}),B=E=>[{value:"",label:"No detector · use composed region mask"},...[...new Set([...E&&!t.includes(E)?[E]:[],...t])].map(A=>({value:A,label:t.includes(A)?A:`Missing · ${A}`}))],O=p.jobs.map((E,A)=>({id:`job-${A}`,title:`Job ${A+1}`,description:E.region_ids.map(C=>u.find(R=>R.id===C)?.name??C).join(" + ")||"No region",summary:s.jsxs("div",{className:"bv-editor-item-compact-summary",children:[s.jsxs("span",{children:[E.region_ids.length," region",E.region_ids.length===1?"":"s"]}),s.jsx("span",{children:E.detector_id||"Composed mask"}),s.jsx("span",{children:E.region_ids.length?"Ready":"Needs region"})]}),content:s.jsxs("div",{className:"bv-editor-item-details",children:[s.jsxs("div",{className:"bv-editor-item-summary",children:[s.jsx(zv,{label:"Regions",value:E.region_ids,minSelected:1,options:u.map(C=>({value:C.id,label:C.name})),onValue:C=>N(R=>{const M=R.jobs[A];M.region_ids=C,C.includes(M.primary_region_id)||(M.primary_region_id=C[0]??"")})}),s.jsxs(Ko,{children:[s.jsx(tt,{label:"Detector assignment",value:E.detector_id??"",options:B(E.detector_id),onValue:C=>N(R=>{R.jobs[A].detector_id=C||void 0})}),E.region_ids.length>1&&s.jsx(tt,{label:"Primary region",value:E.primary_region_id,options:E.region_ids.map(C=>({value:C,label:u.find(R=>R.id===C)?.name??C})),onValue:C=>N(R=>{R.jobs[A].primary_region_id=C})})]})]}),s.jsx(os,{value:S,onValue:z,items:[{id:`composition-${A}`,title:"Mask and prompt composition",content:s.jsxs(Ko,{children:[s.jsx(tt,{label:"Mask composition",value:E.mask_composition,options:[{value:"union",label:"Union"},{value:"intersection",label:"Intersection"},{value:"subtract",label:"Subtract in listed order"}],onValue:C=>N(R=>{R.jobs[A].mask_composition=C})}),s.jsx(tt,{label:"Prompt composition",value:E.prompt_composition,options:[{value:"context",label:"Primary and context regions"},{value:"primary",label:"Primary region only"}],onValue:C=>N(R=>{R.jobs[A].prompt_composition=C})})]})},{id:`conditioning-${A}`,title:"Conditioning strengths",content:s.jsx(Ko,{minimum:150,children:[["Global influence","global_influence"],["Background influence","background_influence"],["Primary region influence","primary_region_influence"],["Context region influence","context_region_influence"]].map(([C,R])=>s.jsx(Bt,{label:C,value:E.conditioning[R],min:0,max:2,step:.05,onValue:M=>N(D=>{D.jobs[A].conditioning[R]=M})},R))})},{id:`detection-${A}`,title:"Detector and ROI settings",content:s.jsxs(Ko,{minimum:150,children:[s.jsx(Bt,{label:"ROI padding",value:E.detector.roi_padding,min:0,max:2,step:.01,onValue:C=>N(R=>{R.jobs[A].detector.roi_padding=C})}),s.jsx(Bt,{label:"Threshold",value:E.detector.threshold,min:0,max:1,step:.01,onValue:C=>N(R=>{R.jobs[A].detector.threshold=C})}),s.jsx(Bt,{label:"Dilation",value:E.detector.dilation,min:-512,max:512,step:1,slider:!1,onValue:C=>N(R=>{R.jobs[A].detector.dilation=C})}),s.jsx(Bt,{label:"Crop factor",value:E.detector.crop_factor,min:1,max:20,step:.1,onValue:C=>N(R=>{R.jobs[A].detector.crop_factor=C})}),s.jsx(Bt,{label:"Drop size",value:E.detector.drop_size,min:1,max:8192,step:1,slider:!1,onValue:C=>N(R=>{R.jobs[A].detector.drop_size=C})}),s.jsx(un,{label:"Detector query",value:E.detector.query??"",onValue:C=>N(R=>{R.jobs[A].detector.query=C.trim()||void 0})}),s.jsx(un,{label:"Accepted labels",value:(E.detector.labels??[]).join(", "),onValue:C=>N(R=>{R.jobs[A].detector.labels=C.split(",").map(M=>M.trim()).filter(Boolean)})})]})}]})]})}));return s.jsxs(s.Fragment,{children:[s.jsx(T,{open:!0,title:"Regional Detailer Plan",initialGeometry:{width:1040,height:720},minSize:{width:420,height:360},onClose:n,status:w?"Unsaved plan changes":"Plan saved",actions:s.jsx(Lf,{primary:s.jsx(ne,{intent:"primary",disabled:p.jobs.some(E=>!E.region_ids.length),onClick:h,children:"Save plan"}),secondary:s.jsxs(s.Fragment,{children:[s.jsx(ne,{onClick:P,disabled:!u.length,children:"Add job"}),s.jsx(ss,{label:"Detailer Plan",value:{schema:"bv.editor-draft",version:1,type:"detailer-plan",data:p},onImport:E=>{if(E?.schema!=="bv.editor-draft"||E?.version!==1||E?.type!=="detailer-plan"||!E?.data)throw new Error("Draft type or version does not match this editor.");f.replace(Nl(E.data,e))}})]}),overflow:[{id:"undo",label:"Undo",disabled:!f.canUndo,onSelect:f.undo},{id:"redo",label:"Redo",disabled:!f.canRedo,onSelect:f.redo},{id:"discard",label:"Discard changes",disabled:!w,onSelect:()=>f.replace(Nl(g,e),!0)},{id:"restore",label:"Restore defaults",onSelect:()=>f.commit(ud(e))}]}),children:s.jsxs(ff,{density:"compact",className:"bv-editor-dialog",children:[!t.length&&p.jobs.length>0&&s.jsx(zr,{tone:"warning",title:"No registered detectors",children:"Jobs can still use their composed region masks. Add detectors in Detector Registry when object detection is required."}),u.length?s.jsx(Ws,{items:O,onReorder:E=>N(A=>{A.jobs=E.map(C=>A.jobs[Number(C.id.slice(4))])}),onRemove:E=>N(A=>{A.jobs.splice(Number(E.slice(4)),1)})}):s.jsx(Hs,{title:"No eligible regions",description:"Enable a region with Detailer or Both usage first."})]})}),s.jsx(hf,{open:!!k,editorName:"Detailer Plan",onKeep:()=>b(null),onDiscard:()=>{const E=k;b(null),E?.()},onSave:()=>{h();const E=k;b(null),E?.()}})]})}const fE=(e,t,r,o,n,i,a,l)=>{xf((c,u)=>m.createElement(dE,{regions:e,detectorIds:t,stored:r,save:o,close:c,activationToken:u,nodeId:n.split(":").slice(1).join(":"),nodes:i,onNavigate:a,currentNode:l}),{key:n})},xs=()=>({schema:"bv.detector_registry_config",version:1,detectors:[]}),Xi=e=>{try{const t=String(e??"").trim()?JSON.parse(String(e)):xs();return{schema:"bv.detector_registry_config",version:1,detectors:Array.isArray(t?.detectors)?t.detectors.flatMap(o=>{const n=String(o?.id??"").trim(),i=String(o?.model_name??"").trim();if(!n||!i)return[];const a=o.provider==="onnx"?"onnx":"ultralytics",l=String(o.sam_model_name??"").trim();return[{id:n,provider:a,model_name:i,...l?{sam_model_name:l,sam_device_mode:["Prefer GPU","CPU"].includes(o.sam_device_mode)?o.sam_device_mode:"AUTO"}:{}}]}):[]}}catch{return xs()}},Wc=e=>JSON.stringify(e);function pE({catalog:e,stored:t,save:r,close:o,nodeId:n="",nodes:i=[],onNavigate:a=()=>{},currentNode:l}){const c=m.useMemo(()=>Xi(t),[t]),u=m.useMemo(()=>new Set(c.detectors.map(R=>R.id)),[c]),d=Xs(c),f=d.value,[p,g]=m.useState(()=>Wc(c));Gs(d);const x=Wc(f)!==p,w=gf(),[k,b]=m.useState(null),h=()=>{const R=Wc(f);r(R),g(R),d.clear()},v=R=>x?b(()=>R):R(),_=()=>v(o),y=Aa(l),T=m.useMemo(()=>R=>s.jsx(xn,{...R,title:`${R.title} · #${n}`,shortTitle:"Registry",menuVisible:y,onMenuVisible:M=>di(l,M),onClose:_,context:s.jsx(Da,{label:"Detector Registry Node",value:n,options:i.map(M=>({value:M.id,label:M.label})),onNavigate:(M,D)=>D?v(()=>a(M,!0)):a(M,!1)})}),[l,x,y,n,i,a]),[S,z]=m.useState([]),N=R=>d.commit(M=>{const D=structuredClone(M);return R(D),D}),P=()=>{let R=f.detectors.length+1,M=`detector-${R}`;for(;f.detectors.some(D=>D.id===M);)M=`detector-${++R}`;return M},B=f.detectors.map(R=>R.id.trim()),O=B.find((R,M)=>R&&B.indexOf(R)!==M),E=f.detectors.some(R=>!R.id.trim()||!R.model_name),A=()=>N(R=>{const M=e.ultralytics.length?"ultralytics":"onnx";R.detectors.push({id:P(),provider:M,model_name:e[M][0]??""})}),C=()=>{f.detectors.length?w.confirm({title:"Clear Detector Registry?",message:"Existing Detailer jobs will keep missing references until reassigned.",confirmLabel:"Clear registry",danger:!0,action:()=>d.commit(xs())}):d.commit(xs())};return s.jsxs(s.Fragment,{children:[s.jsx(T,{open:!0,title:"Detector Registry",initialGeometry:{width:1040,height:720},minSize:{width:420,height:360},onClose:o,status:x?"Unsaved registry changes":"Registry saved",actions:s.jsx(Lf,{primary:s.jsx(ne,{intent:"primary",disabled:!!(O||E),onClick:h,children:"Save registry"}),secondary:s.jsxs(s.Fragment,{children:[s.jsx(ne,{onClick:A,children:"Add detector"}),s.jsx(ss,{label:"Detector Registry",value:{schema:"bv.editor-draft",version:1,type:"detector-registry",data:f},onImport:R=>{if(R?.schema!=="bv.editor-draft"||R?.version!==1||R?.type!=="detector-registry"||!R?.data)throw new Error("Draft type or version does not match this editor.");d.replace(Xi(R.data))}})]}),overflow:[{id:"undo",label:"Undo",disabled:!d.canUndo,onSelect:d.undo},{id:"redo",label:"Redo",disabled:!d.canRedo,onSelect:d.redo},{id:"discard",label:"Discard changes",disabled:!x,onSelect:()=>d.replace(Xi(p),!0)},{id:"clear",label:"Clear registry…",onSelect:C}]}),children:s.jsxs(ff,{density:"compact",className:"bv-editor-dialog",children:[O||E?s.jsx(zr,{tone:"danger",title:"Registry needs attention",children:O?`Detector ID “${O}” is used more than once.`:"Every detector needs a unique ID and a detection model."}):s.jsxs(zr,{tone:"success",title:"Registry valid",children:[f.detectors.length," detector",f.detectors.length===1?"":"s"," ready to save."]}),s.jsxs("div",{className:"bv-card-list",children:[!f.detectors.length&&s.jsx(Hs,{title:"No detectors configured",description:"Add a detector to make it selectable in Regional Detailer jobs."}),s.jsx(os,{value:S,onValue:z,items:f.detectors.map((R,M)=>({id:`detector-${M}`,title:s.jsxs("span",{className:"bv-detector-summary",children:[s.jsx("strong",{children:R.id||"New detector"}),s.jsx("span",{children:R.provider==="onnx"?"ONNX":"Ultralytics"}),s.jsx("span",{children:R.model_name||"No model selected"}),s.jsx("span",{children:R.id.trim()&&R.model_name?"Ready":"Needs attention"})]}),content:s.jsxs("div",{className:"bv-detector-details",children:[s.jsxs("div",{className:"bv-editor-item-actions",children:[s.jsx(ne,{intent:"ghost",onClick:()=>N(D=>{D.detectors.splice(M+1,0,{...D.detectors[M],id:P()})}),children:"Duplicate"}),s.jsx(ne,{intent:"ghost",className:"bv-subtle-danger",onClick:()=>{const D=()=>N(W=>{W.detectors.splice(M,1)});u.has(R.id)?w.confirm({title:`Remove detector “${R.id}”?`,message:"Existing Detailer jobs will show it as missing until reassigned.",confirmLabel:"Remove detector",danger:!0,action:D}):D()},children:"Remove"})]}),s.jsxs(Ko,{children:[s.jsx(un,{label:"Detector ID",value:R.id,readOnly:u.has(R.id),help:u.has(R.id)?"Stable job reference. Create a new detector instead of renaming it.":"Choose once; the ID becomes immutable after saving.",onValue:D=>N(W=>{W.detectors[M].id=D.trim()})}),s.jsx(tt,{label:"Provider",value:R.provider,options:[{value:"ultralytics",label:"Ultralytics"},{value:"onnx",label:"ONNX"}],onValue:D=>N(W=>{const F=W.detectors[M];F.provider=D,F.model_name=e[F.provider][0]??""})}),s.jsx(tt,{label:"Detection model",value:R.model_name,options:e[R.provider].map(D=>({value:D,label:D})),onValue:D=>N(W=>{W.detectors[M].model_name=D})})]}),s.jsx(os,{value:S,onValue:z,items:[{id:`sam-${M}`,title:R.sam_model_name?"SAM refinement enabled":"Optional SAM refinement",content:s.jsxs(Ko,{children:[s.jsx(tt,{label:"SAM model",value:R.sam_model_name??"",options:[{value:"",label:"No SAM refinement"},...e.sam.map(D=>({value:D,label:D}))],onValue:D=>N(W=>{const F=W.detectors[M];F.sam_model_name=D||void 0,D||delete F.sam_device_mode})}),R.sam_model_name&&s.jsx(tt,{label:"Execution device",value:R.sam_device_mode??"AUTO",options:["AUTO","Prefer GPU","CPU"].map(D=>({value:D,label:D})),onValue:D=>N(W=>{W.detectors[M].sam_device_mode=D})})]})}]})]})}))})]})]})}),w.dialog,s.jsx(hf,{open:!!k,editorName:"Detector Registry",onKeep:()=>b(null),onDiscard:()=>{const R=k;b(null),R?.()},onSave:()=>{h();const R=k;b(null),R?.()}})]})}const hE=async(e,t,r,o,n,i,a)=>{const l=await fetch(e.apiURL("/bv_nodepack/detectors/models"));if(!l.ok)throw new Error(`Detector model catalog failed: ${l.status}`);const c=await l.json();xf((u,d)=>m.createElement(pE,{catalog:c,stored:t,save:r,close:u,activationToken:d,nodeId:o.split(":").slice(1).join(":"),nodes:n,onNavigate:i,currentNode:a}),{key:o})},gE=10,bE=(e,t=gE)=>{const r=[...new Set(e.filter(i=>Number.isInteger(i)&&i>=1&&i<=t))],o=r.length?Math.max(...r):0,n=Math.min(t,o+1);return Array.from({length:Math.max(1,n)},(i,a)=>a+1)},vE=new Set(["BV Regional Detailer Mask","BV Regional Detailer Plan","BV Detailer Loop Job Resolver","BV Detector Binding","BV Detector Registry","BV Detailer Loop Detect to SEGS (Impact)","BV Detailer Loop Start","BV Detailer Loop End"]),mE={regional:"regional prompt",detailer_plan:"detailer plan",job_index:"job index",job:"detailer job",job_id:"job ID",job_name:"job name",job_count:"job count",detector_id:"detector ID",detector_count:"detector count",detector_registry:"detector registry",detector_query:"detector query",detector_labels:"detector labels",bbox_detector:"BBOX detector",segm_detector:"segmentation detector",sam_model:"SAM model",has_bbox:"has BBOX",has_segmentation:"has segmentation",has_sam:"has SAM",basic_pipe:"basic pipe",positive:"positive conditioning",negative:"negative conditioning",positive_text:"positive text",negative_text:"negative text",positive_weighted_text:"positive weighted text",negative_weighted_text:"negative weighted text",global_influence:"global influence",background_influence:"background influence",primary_region_influence:"primary region influence",context_regions_json:"context regions",roi_padding:"ROI padding",roi_x:"ROI x",roi_y:"ROI y",roi_width:"ROI width",roi_height:"ROI height",crop_factor:"crop factor",drop_size:"drop size",effective_mask:"effective mask",flow_to_loop_end:"flow to loop end",last_job_index:"last job index",final_image:"final image",current_image:"current image",processed_image:"processed image"},xE={"BV Regional Detailer Mask":{image:"source image",mask:"region mask",summary:"detailer summary"},"BV Regional Detailer Plan":{plan_summary:"plan summary"},"BV Detailer Loop Detect to SEGS (Impact)":{segs:"SEGS"}},Hc=(e,t)=>xE[e]?.[t]??mE[t]??t.split("_").join(" ");function yE({label:e,configured:t,close:r,onSave:o,onDelete:n}){const[i,a]=m.useState(""),[l,c]=m.useState(""),[u,d]=m.useState(!1),f=async p=>{d(!0),c("");try{const g=await p();g?c(g):r()}finally{d(!1)}};return s.jsxs(Na,{open:!0,title:`${e} API Key`,description:"Credentials are stored by the local BV Nodepack backend and are never written into the workflow.",size:"small",onClose:r,footer:s.jsxs(s.Fragment,{children:[s.jsx(ne,{intent:"danger",disabled:!t||u,onClick:()=>f(n),children:"Delete key"}),s.jsx(ne,{intent:"ghost",disabled:u,onClick:r,children:"Cancel"}),s.jsx(ne,{intent:"primary",loading:u,disabled:!i.trim(),onClick:()=>f(()=>o(i)),children:"Save key"})]}),children:[s.jsx(zr,{tone:t?"info":"warning",children:t?"A key is configured. Enter a new key to replace it.":"No key is configured."}),s.jsx(x0,{label:"API key",value:i,onValue:a}),l&&s.jsx(zr,{tone:"danger",children:l})]})}let $c=null;const dd=(e,t=!1)=>((t||!$c)&&($c=fetch(e.apiURL("/bv_nodepack/remote_llm/providers")).then(async r=>{if(!r.ok)throw new Error(await r.text());const o=await r.json();return Array.isArray(o.profiles)?o.profiles:[]})),$c),Xr=(e,t)=>e.widgets?.find(r=>r.name===t),ys=(e,t,r)=>{const o=t.find(l=>l.label===String(Xr(e,"provider_profile")?.value??""));if(!o)return;const n=Xr(e,"custom_endpoint"),i=Xr(e,"model");if(n&&((!o.allow_custom_endpoint||!String(n.value??"").trim())&&(n.value=o.endpoint),n.disabled=!1,n.element&&(n.element.readOnly=!o.allow_custom_endpoint),n.label=o.allow_custom_endpoint?"custom endpoint":"endpoint (managed)",!n.__bvRemoteEndpointHooked)){n.__bvRemoteEndpointHooked=!0;const l=n.callback;n.callback=function(){const c=l?.apply(this,arguments),u=t.find(d=>d.label===String(Xr(e,"provider_profile")?.value??""));return u&&!u.allow_custom_endpoint&&(n.value=u.endpoint),c}}if(i&&r&&r!==o.label){const l=t.find(u=>u.label===r),c=String(i.value??"").trim();(!c||c===l?.default_model)&&(i.value=o.default_model)}const a=Xr(e,"configure_api_key");a&&(a.disabled=o.auth_mode==="none",a.label=o.auth_mode==="none"?"✓ No API key required":`${o.configured?"✓":"⚠"} Configure ${o.label} API Key`),e.setDirtyCanvas?.(!0,!0)},_E=(e,t,r)=>{const o=r.find(n=>n.label===String(Xr(t,"provider_profile")?.value??""))??r[0];o&&o.auth_mode!=="none"&&xf(n=>m.createElement(yE,{label:o.label,configured:o.configured,close:n,onSave:async i=>{const a=await fetch(e.apiURL("/bv_nodepack/remote_llm/api_key"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({profile_id:o.id,api_key:i})});if(!a.ok)return(await a.json().catch(()=>null))?.error??"Could not save API key.";o.configured=!0,ys(t,r),dd(e,!0)},onDelete:async()=>{if(!(await fetch(e.apiURL(`/bv_nodepack/remote_llm/api_key/${encodeURIComponent(o.id)}`),{method:"DELETE"})).ok)return"Could not delete API key.";o.configured=!1,ys(t,r),dd(e,!0)}}))},$h=(e,t)=>{dd(t).then(r=>{let o=String(Xr(e,"provider_profile")?.value??"");const n=Xr(e,"provider_profile");if(n&&!n.__bvRemoteLLMHooked){n.__bvRemoteLLMHooked=!0;const a=n.callback;n.callback=function(l){const c=a?.apply(this,arguments);return ys(e,r,o),o=l,c}}let i=Xr(e,"configure_api_key");i||(i=e.addWidget("button","configure_api_key",null,()=>_E(t,e,r),{serialize:!1}),i.serialize=!1),ys(e,r)}).catch(r=>console.error("BV Remote LLM settings unavailable",r))};function wE({collectors:e,collectorId:t,resourceId:r,resolved:o,debugVisible:n,onCollector:i,onResource:a,onDebug:l}){return s.jsxs("div",{className:"bv-m0-picker-panel",children:[s.jsx($s,{label:"Hidden link debug",value:n,trueLabel:"Visible",falseLabel:"Hidden",onValue:l}),s.jsx(Ys,{collectors:e,collectorId:t,resourceId:r,resolved:o,onCollector:i,onResource:a})]})}function kE({collectors:e,bindings:t,debugVisible:r,onBinding:o,onAdd:n,onRemove:i,onDebug:a}){return s.jsxs("div",{className:"bv-m0-picker-panel bv-m0-multi-picker",children:[s.jsx($s,{label:"Native fan-in debug",value:r,trueLabel:"Dashed links",falseLabel:"Hidden",onValue:a}),t.map((l,c)=>s.jsxs("section",{className:"bv-m0-binding",children:[s.jsxs("header",{children:[s.jsxs("strong",{children:["Binding ",c+1]}),s.jsx(ne,{type:"button",iconOnly:!0,icon:"×",onClick:()=>i(c),"aria-label":`Remove binding ${c+1}`})]}),s.jsx(Ys,{collectors:e,collectorId:l.collector_id,resourceId:l.resource_id,resolved:l.resolved,onCollector:u=>{const d=e.find(f=>f.id===u)?.resources[0];o(c,u,d?.id??"")},onResource:u=>o(c,l.collector_id,u)})]},l.binding_id)),s.jsx(ne,{type:"button",className:"bv-m0-add-binding",disabled:t.length>=20,onClick:n,children:"Add collector binding"})]})}const Fr="BV_RUNTIME_RESOURCE_PROVIDER_M0",ii="resource_provider",tc=20;function _s(e){return e?.findIndex(t=>t?.name===ii||t?.type===Fr)??-1}function Ff(e){let t=_s(e.outputs);t<0&&e.addOutput&&(e.addOutput(ii,Fr),t=_s(e.outputs));const r=e.outputs?.[t];return r&&(r.name=ii,r.type=Fr),t}function Sx(e){let t=_s(e.inputs);t<0&&e.addInput&&(e.addInput(ii,Fr),t=_s(e.inputs));const r=e.inputs?.[t];return r&&(r.name=ii,r.type=Fr),t}function EE(e){return`${ii}_${e}`}function rc(e,t=tc){const r=[];for(let o=1;o<=t;o++){const n=EE(o);let i=e.inputs?.findIndex(l=>l?.name===n)??-1;i<0&&e.addInput&&(e.addInput(n,Fr),i=e.inputs?.findIndex(l=>l?.name===n)??-1);const a=e.inputs?.[i];a&&(a.name=n,a.type=Fr,a.__bvM0ProviderOrdinal=o),r.push(i)}return r}const TE=(e,t)=>t==null?null:e?._links?.get?.(t)??e?.links?.get?.(t)??e?.links?.[t]??null,RE=e=>[...e?._links?.values?.()??[],...e?.links?.values?.()??Object.values(e?.links??{})],Yh=(e,t)=>{if(!t||String(t.target_id)!==String(e.id))return null;const r=e.graph?.getNodeById?.(t.origin_id),o=r?.outputs?.[Number(t.origin_slot)];return r?.graph===e.graph&&(r.__bvM0ResourceProvider===!0||t.type===Fr||o?.type===Fr)?r:null};function SE(e,t,r){const o=e.inputs?.find(a=>a.name===t),n=TE(e.graph,o?.link),i=Yh(e,n);if(i&&(!r||r(i)))return i;if(!r)return null;for(const a of RE(e.graph)){const l=Yh(e,a);if(l&&r(l))return l}return null}const LE="BV M0 Fake Resource Collector",CE="BV M0 Fake Resource Consumer",Lx="BV M0 Fake Multi Resource Consumer",Cx=Fr,NE="a1bdeceb-76ae-4e45-ae36-e5c2664819ce",OE="d97a4268-c02c-42a3-8793-8e578e12e12c",Ae=(e,t)=>e?.widgets?.find(r=>r.name===t),Yc=e=>{e&&(e.type="converted-widget",e.hidden=!0,e.computeSize=()=>[0,-4],e.serializeValue=()=>e.value)},Xc=(e,t)=>(e&&!String(e.value??"").trim()&&(e.value=t??crypto.randomUUID()),String(e?.value??"")),Gc=()=>{let e=0;const t=()=>{const r=ct().canvas;r?jf(r):e++<40&&setTimeout(t,50)};t()};function ME(e){const t=Ae(e,"collector_id"),r=Ae(e,"resource_a_id"),o=Ae(e,"resource_b_id");if(!t||!r||!o||!e.graph||!(e.graph._nodes??[]).find(a=>a!==e&&a.__bvM0ResourceProvider===!0&&String(Ae(a,"collector_id")?.value??"")===String(t.value??"")))return;const i={collector:{[String(t.value)]:crypto.randomUUID()},resources:{[String(r.value)]:crypto.randomUUID(),[String(o.value)]:crypto.randomUUID()}};t.value=i.collector[String(t.value)],r.value=i.resources[String(r.value)],o.value=i.resources[String(o.value)],e.__bvM0IdRemap=i}function oc(e,t,r=""){return SE(e,t,r?o=>String(Ae(o,"collector_id")?.value??"")===r:void 0)}function hn(e){return oc(e,"resource_provider",String(Ae(e,"collector_id")?.value??""))}function ja(e,t){const r=gn(e)[t];return oc(e,`resource_provider_${t+1}`,r?.collector_id??"")}function Xh(e){const t=hn(e),r=t?.__bvM0IdRemap;if(!r)return;const o=Ae(e,"collector_id"),n=Ae(e,"resource_id");o&&r.collector[String(o.value)]&&(o.value=r.collector[String(o.value)]),n&&r.resources[String(n.value)]&&(n.value=r.resources[String(n.value)])}function ka(e){return(e.graph?._nodes??[]).filter(t=>t.__bvM0ResourceProvider===!0&&t.graph===e.graph).map(t=>({id:String(Ae(t,"collector_id")?.value??""),label:String(t.title||`Collector #${t.id}`),resources:[{id:String(Ae(t,"resource_a_id")?.value??""),label:"Alpha"},{id:String(Ae(t,"resource_b_id")?.value??""),label:"Beta"}],node:t})).filter((t,r,o)=>t.id&&o.findIndex(n=>n.id===t.id)===r)}function xo(e){if(!e?.__bvM0ResourceProvider)return;const t=e.graph?._nodes??[],r=e.outputs?.find(n=>n.type===Cx),o=t.some(n=>!!n.properties?.bvM0DebugVisible&&(hn(n)===e||n.inputs?.some((i,a)=>ja(n,a)===e)));r&&(r.hidden=!0,r.__bvM0VisualHidden=!o,r.__bvM0PortHidden=!0,r.__bvM0ResourceSlot=!0),Bf(e,"collector",o)}function gn(e){const t=Ae(e,"resource_bindings");if(!t)return[];try{const r=JSON.parse(String(t.value??"[]"));return Array.isArray(r)?r.slice(0,tc).map(o=>({binding_id:String(o.binding_id||crypto.randomUUID()),collector_id:String(o.collector_id||""),resource_id:String(o.resource_id||""),resolved:!1})):[]}catch{return[]}}function $n(e,t){const r=Ae(e,"resource_bindings");r&&(r.value=JSON.stringify(t.map(({binding_id:o,collector_id:n,resource_id:i})=>({binding_id:o,collector_id:n,resource_id:i}))))}function AE(e){const t=gn(e),r=new Set(t.map(n=>n.binding_id));if((e.graph?._nodes??[]).some(n=>n!==e&&n.type===Lx&&gn(n).some(i=>r.has(i.binding_id)))){for(const n of t)n.binding_id=crypto.randomUUID();$n(e,t)}}function al(e){const t=gn(e);let r=!1;t.forEach((o,n)=>{const i=ja(e,n)?.__bvM0IdRemap;if(!i)return;const a=i.collector[o.collector_id],l=i.resources[o.resource_id];a&&(o.collector_id=a,r=!0),l&&(o.resource_id=l,r=!0)}),r&&$n(e,t)}function Nx(e,t){return["resource_a_id","resource_b_id"].some(r=>String(Ae(e,r)?.value??"")===t)}function Gh(e){const t=Ae(e,"collector_id"),r=Ae(e,"resource_id");if(!t||!r)return;const o=oc(e,"resource_provider",String(t.value??""));if(!!o&&String(t.value??"")===String(Ae(o,"collector_id")?.value??"")&&Nx(o,String(r.value??"")))return;t.value="",r.value="";const i=e.inputs?.findIndex(a=>a.name==="resource_provider")??-1;i>=0&&e.inputs?.[i]?.link!=null&&e.disconnectInput?.(i)}function Kc(e){const t=gn(e),r=rc(e);let o=!1;t.forEach((n,i)=>{const a=oc(e,`resource_provider_${i+1}`,n.collector_id);if(!!a&&Nx(a,n.resource_id))return;n.collector_id="",n.resource_id="",o=!0;const c=r[i];c>=0&&e.inputs?.[c]?.link!=null&&e.disconnectInput?.(c)}),o&&$n(e,t)}function ws(e,t,r=!0){e.properties??(e.properties={}),e.properties.bvM0DebugVisible=t;const o=(e.inputs??[]).map((n,i)=>({input:n,index:i})).filter(({input:n})=>String(n.name??"").startsWith("resource_provider_"));e.__bvM0FanInAnchorSlot=t?o[0]?.index:void 0;for(const{input:n}of o)n.hidden=!0,n.__bvM0ResourceSlot=!0,n.__bvM0VisualHidden=!t,n.__bvM0PortHidden=!0,n.label="";Bf(e,"consumer",t);for(let n=0;n=0&&e.inputs?.[n]?.link!=null&&e.disconnectInput?.(n);const a=ka(e).find(c=>c.id===r)?.node,l=a?Ff(a):-1;a&&n>=0&&l>=0&&a.connect(l,e,n),ws(e,!!e.properties?.bvM0DebugVisible),xo(i)}function Ea(e,t){if(!(t.parentElement?.style.position==="fixed")){t.style.transform="",t.style.maxHeight="",t.style.overflowY="";return}const o=(e.inputs??[]).filter(n=>n.__bvM0ResourceSlot||n.type===Cx).length;t.style.transform=`translateY(-${o*20}px)`,t.style.maxHeight=`${Math.max(120,Number(e.size?.[1]??200)-40)}px`,t.style.overflowY="auto"}function Ox(e,t){[0,50,150,300].forEach(r=>setTimeout(()=>Ea(e,t),r))}function ll(e){if(!Ae(e,"resource_bindings"))return;let r=e.__bvM0PickerHost;if(!r){r=document.createElement("div"),r.className="bv-ui bv-m0-picker-host",r.style.position="relative",r.style.zIndex="1",e.__bvM0PickerHost=r;const n=e.addDOMWidget?.("bv_multi_resource_picker","div",r,{serialize:!1,getMinHeight:()=>Math.max(150,78+gn(e).length*124),onDraw:()=>Ea(e,r),afterResize:()=>Ea(e,r)});n&&(n.serialize=!1)}e.__bvM0PickerRoot??(e.__bvM0PickerRoot=qi.createRoot(r));const o=()=>{const n=ka(e),i=gn(e).map((a,l)=>{const c=ja(e,l);return{...a,resolved:!!c&&String(Ae(c,"collector_id")?.value??"")===a.collector_id}});e.__bvM0PickerRoot.render(s.jsx(kE,{collectors:n,bindings:i,debugVisible:!!e.properties?.bvM0DebugVisible,onDebug:a=>{ws(e,a),o()},onBinding:(a,l,c)=>{i[a]={...i[a],collector_id:l,resource_id:c},$n(e,i),Kh(e,a,l),o()},onAdd:()=>{i.length>=tc||(i.push({binding_id:crypto.randomUUID(),collector_id:"",resource_id:"",resolved:!1}),$n(e,i),o())},onRemove:a=>{const l=rc(e),c=l[a];c>=0&&e.inputs?.[c]?.link!=null&&e.disconnectInput?.(c),i.splice(a,1),$n(e,i);for(let d=a;d=0&&e.inputs?.[u]?.link!=null&&e.disconnectInput?.(u),o()}}))};o(),ws(e,!!e.properties?.bvM0DebugVisible,!1),Ox(e,r)}function qc(e,t){if(e.__bvM0DomRefresh)return;const r=()=>{setTimeout(t,0),setTimeout(t,100)};e.__bvM0DomRefresh=r,qr().addEventListener("executed",r),qr().addEventListener("graphChanged",r);const o=e.onRemoved;e.onRemoved=function(){return qr().removeEventListener("executed",r),qr().removeEventListener("graphChanged",r),o?.apply(this,arguments)}}function fd(e,t,r=!0){e.properties??(e.properties={}),e.properties.bvM0DebugVisible=t;const o=e.inputs?.find(n=>n.name==="resource_provider");o&&(o.hidden=!0,o.__bvM0VisualHidden=!t,o.__bvM0PortHidden=!0,o.__bvM0ResourceSlot=!0,o.label=""),Bf(e,"consumer",t),xo(hn(e)),xx(e.graph),t&&mx(e.graph?.list_of_graphcanvas?.[0]??ct().canvas),r&&e.setDirtyCanvas?.(!0,!0)}function DE(e,t){const r=hn(e),o=Sx(e);o>=0&&e.inputs?.[o]?.link!=null&&e.disconnectInput?.(o);const n=ka(e).find(a=>a.id===t)?.node,i=n?Ff(n):-1;n&&o>=0&&i>=0&&n.connect(i,e,o),fd(e,!!e.properties?.bvM0DebugVisible),xo(r)}function sl(e){const t=Ae(e,"collector_id"),r=Ae(e,"resource_id");if(!t||!r)return;let o=e.__bvM0PickerHost;if(!o){o=document.createElement("div"),o.className="bv-ui bv-m0-picker-host",o.style.position="relative",o.style.zIndex="1",e.__bvM0PickerHost=o;const i=e.addDOMWidget?.("bv_resource_picker","div",o,{serialize:!1,getMinHeight:()=>150,onDraw:()=>Ea(e,o),afterResize:()=>Ea(e,o)});i&&(i.serialize=!1)}e.__bvM0PickerRoot??(e.__bvM0PickerRoot=qi.createRoot(o));const n=()=>{const i=hn(e),a=String(Ae(i,"collector_id")?.value??"");e.__bvM0PickerRoot.render(s.jsx(wE,{collectors:ka(e),collectorId:String(t.value??""),resourceId:String(r.value??""),resolved:!!i&&a===String(t.value??""),debugVisible:!!e.properties?.bvM0DebugVisible,onDebug:l=>{fd(e,l),n()},onCollector:l=>{t.value=l;const c=ka(e).find(u=>u.id===l)?.resources[0];r.value=c?.id??"",DE(e,l),n()},onResource:l=>{r.value=l,n()}}))};n(),fd(e,!!e.properties?.bvM0DebugVisible,!1),Ox(e,o)}function IE(e,t){if(t.name===LE){const r=e.prototype.onNodeCreated,o=e.prototype.onConfigure,n=function(){Gc(),this.__bvM0ResourceProvider=!0,Ff(this),Xc(Ae(this,"collector_id")),Xc(Ae(this,"resource_a_id"),NE),Xc(Ae(this,"resource_b_id"),OE),ME(this),["collector_id","resource_a_id","resource_b_id"].forEach(i=>Yc(Ae(this,i))),qc(this,()=>xo(this)),xo(this)};return e.prototype.onNodeCreated=function(){const i=r?.apply(this,arguments);return queueMicrotask(()=>n.call(this)),i},e.prototype.onConfigure=function(){const i=o?.apply(this,arguments);return queueMicrotask(()=>n.call(this)),i},!0}if(t.name===CE){const r=e.prototype.onNodeCreated,o=e.prototype.onConfigure,n=e.prototype.onConnectionsChange,i=function(){Gc(),this.__bvM0ResourceConsumer=!0,Sx(this),Xh(this),Gh(this),["collector_id","resource_id"].forEach(a=>Yc(Ae(this,a))),qc(this,()=>sl(this)),sl(this),setTimeout(()=>sl(this),0)};return e.prototype.onNodeCreated=function(){const a=r?.apply(this,arguments);return queueMicrotask(()=>i.call(this)),a},e.prototype.onConfigure=function(){const a=o?.apply(this,arguments);return queueMicrotask(()=>i.call(this)),a},e.prototype.onConnectionsChange=function(){const a=hn(this),l=n?.apply(this,arguments);return queueMicrotask(()=>{Xh(this),Gh(this),sl(this),xo(a),xo(hn(this))}),l},!0}if(t.name===Lx){const r=e.prototype.onNodeCreated,o=e.prototype.onConfigure,n=e.prototype.onConnectionsChange,i=function(){Gc(),this.__bvM0ResourceConsumer=!0,rc(this),AE(this),al(this),Kc(this),Yc(Ae(this,"resource_bindings")),qc(this,()=>{al(this),ll(this)}),ll(this),[0,50,150].forEach(a=>setTimeout(()=>{al(this),Kc(this),ll(this)},a))};return e.prototype.onNodeCreated=function(){const a=r?.apply(this,arguments);return queueMicrotask(()=>i.call(this)),a},e.prototype.onConfigure=function(){const a=o?.apply(this,arguments);return queueMicrotask(()=>i.call(this)),a},e.prototype.onConnectionsChange=function(){const a=n?.apply(this,arguments);return queueMicrotask(()=>{al(this),Kc(this),ws(this,!!this.properties?.bvM0DebugVisible,!1),ll(this)}),a},!0}return!1}const qh=(e,t)=>e?.widgets?.find(r=>r.name===t);function jE({open:e,node:t,onClose:r}){const[o,n]=m.useState(()=>vs(t));if(m.useEffect(()=>{e&&t&&n(vs(t))},[t,e]),!t)return null;const i=bs(t).filter(u=>u.resources.length>0),a=cd(t,o),l=$k(t),c=u=>{Pf(t,u),n(u)};return s.jsx(xn,{open:e,title:"BV Regional LoRA Editor",initialGeometry:{width:620,height:520},minSize:{width:420,height:320},onClose:r,children:s.jsxs("div",{className:"bv-ui bv-lora-v3-window",children:[s.jsxs(Ho,{label:"Operation",value:String(qh(t,"operation")?.value??"replace"),onChange:u=>{const d=qh(t,"operation");d&&(d.value=u,d.callback?.(u),t.setDirtyCanvas?.(!0,!0))},children:[s.jsx("option",{value:"replace",children:"Replace"}),s.jsx("option",{value:"merge",children:"Merge"}),s.jsx("option",{value:"subtract",children:"Subtract"}),s.jsx("option",{value:"clear",children:"Clear"})]}),s.jsx(Ak,{collectors:i,config:o,resolved:a,targetOptions:l,onCollector:u=>{const d=i.find(p=>p.id===u),f=d?.resources[0]?.id??"";Yi(t,d?.node??null),c({...o,collector_id:u||null,entries:o.entries.map(p=>p.source.kind==="external"?{...p,source:{...p.source,resource_id:f}}:p)})},onResource:(u,d)=>c({...o,entries:o.entries.map(f=>f.id===u&&f.source.kind==="external"?{...f,source:{...f.source,resource_id:d}}:f)}),onTargets:(u,d)=>c({...o,entries:o.entries.map(f=>f.id===u?{...f,targets:d}:f)}),onAddExternal:()=>{const u=i.find(f=>f.id===o.collector_id)??i[0],d=u?.resources[0];!u||!d||(Yi(t,u.node),c({...o,collector_id:u.id,entries:[...o.entries,{id:crypto.randomUUID(),source:{kind:"external",resource_id:d.id},targets:[{scope:"global"}]}]}))},onRemove:u=>{const d=o.entries.filter(p=>p.id!==u),f={...o,collector_id:d.some(p=>p.source.kind==="external")?o.collector_id:null,entries:d};f.collector_id||Yi(t,null),c(f)}})]})})}const Uf="BV Control Center",ks=0,BE=2,PE=4,Ai="bvControlBaseMode",zE="bv-open-control-rack",Mx=320,FE=48,Jh="bv_control_conflict_status",Jc=new Set;function UE(e){return e==="activate"?{mode:ks,priority:3}:e==="mute"?{mode:BE,priority:2}:{mode:PE,priority:1}}function Zh(e){const t=new Set(rs(ct()).map(r=>r.id));return{...e,controls:e.controls.map(r=>({...r,assignments:r.assignments.map(o=>({...o,unresolved:!t.has(o.groupId)}))}))}}function VE(e){return Uw(e,t=>Ev(t,Uf))}function WE(e){for(const o of Jc){const n=o.properties?.[Ai];o.mode=e.forceActive?ks:typeof n=="number"?n:o.mode,o.properties&&delete o.properties[Ai],o.setDirtyCanvas?.(!0,!0)}Jc.clear();const t=new Map(rs(ct()).map(o=>[o.id,o])),r=new Map;for(const o of e.controls)if(o.enabled)for(const n of o.assignments){const i=t.get(n.groupId);if(i)for(const a of VE(i)){const l=UE(n.action),c=r.get(a);(!c||l.priority>c.priority)&&r.set(a,l)}}for(const[o,n]of r)o.properties??(o.properties={}),typeof o.properties[Ai]!="number"&&(o.properties[Ai]=typeof o.mode=="number"?o.mode:ks),o.mode=n.mode,Jc.add(o),o.setDirtyCanvas?.(!0,!0)}function HE(e,t){const r=e.inputs[t],o=e.widgets?.find(n=>n.name===r.name);o&&e.removeWidget?.(o),r.link!=null&&e.disconnectInput(t),e.removeInput(t)}function $E(e,t){const r=Tv(t),o=Vw(r);let n=e.widgets?.find(i=>i.name===Jh);n||(n=e.addCustomWidget({name:Jh,type:"custom",value:o,y:0,options:{},serialize:!1,computeSize:()=>[0,24],computeLayoutSize:()=>({minHeight:24,maxHeight:24,minWidth:Mx}),mouse:()=>!1,draw(i,a,l,c,u){i.save(),i.beginPath(),i.rect(10,c,Math.max(0,l-20),u),i.clip(),i.fillStyle=this.__bvHasConflict?"#ffbd66":"#8fc9a3",i.font="12px sans-serif",i.textBaseline="middle",i.fillText(String(this.value??""),14,c+u/2),i.restore()}})),n.value=o,n.__bvHasConflict=r.length>0,n.tooltip=r.map(i=>`${i.groupPath}: ${i.winnerAction} wins`).join(` -`)}function Ax(e,t){e.mode=ks,e.properties&&delete e.properties[Ai];let r=e.widgets?.find(c=>c.name==="configure_control_center");r||(r=e.addWidget("button","configure_control_center",null,()=>window.dispatchEvent(new Event(zE)),{serialize:!1})),r.label="Configure Control Center",r.serialize=!1;const o=new Set(t.controls.map(c=>`bvcc_${c.id}`));for(let c=e.inputs.length-1;c>=0;c--){const u=e.inputs[c];u.name.startsWith("bvcc_")&&!o.has(u.name)&&HE(e,c)}for(const c of t.controls){const u=`bvcc_${c.id}`,d=g=>{const x=cn(),w={...x,controls:x.controls.map(k=>k.id===c.id?{...k,enabled:!!g}:k)};df(w)};let f=e.inputs.find(g=>g.name===u);f||(f=e.addInput(u,"BOOLEAN",{label:c.name,nameLocked:!0,widget:{name:u}})),f.label=c.name;let p=e.widgets?.find(g=>g.name===u);p&&!p.__bvControlCallbackBound&&(e.removeWidget?.(p),p=null),p||(p=e.addWidget("toggle",u,c.enabled,d,{on:"ACTIVE",off:"INACTIVE"})),p.__bvControlCallbackBound=!0,p.label=c.name,p.value=c.enabled,p.serialize=!0,p.options??(p.options={}),p.options.on="ACTIVE",p.options.off="INACTIVE",p.callback=d,f.widget={name:u}}$E(e,t);const n=e.widgets?.find(c=>c.name==="bv_control_config_json");n&&(n.value=JSON.stringify(Zh(t)),n.type="converted-widget",n.draw=()=>{},n.hidden=!0,n.options??(n.options={}),n.options.hidden=!0,n.element&&(n.element.style.display="none"),n.computeSize=()=>[0,-4],n.serializeValue=()=>JSON.stringify(Zh(cn()))),e.serialize_widgets=!0;const i=e.size??[0,0],a=e.computeSize?.()??i,l=Math.max(Mx,(a[0]??0)+FE);e.setSize?.([Math.max(i[0]??0,l),a[1]??i[1]??0]),e.setDirtyCanvas?.(!0,!0)}function Dx(e=cn()){for(const{node:t}of zw(ct(),Uf))Ax(t,e);WE(e)}window.addEventListener(ei,e=>Dx(e.detail));ct().registerExtension({name:"bv_nodepack.control_center",async beforeRegisterNodeDef(e,t){if(t.name!==Uf)return;const r=e.prototype.onNodeCreated;e.prototype.onNodeCreated=function(){const o=r?.apply(this,arguments);return Ax(this,cn()),o}},afterConfigureGraph(){Dx()}});const rt=ct(),wr=qr();tk(e=>rt.ui?.settings?.setSettingValue?.(Um,e));rk(e=>rt.ui?.settings?.setSettingValue?.(Vm,e));ek(e=>rt.ui?.settings?.setSettingValue?.(Wm,e));M0(e=>rt.ui?.settings?.setSettingValue?.(_f,e));const pd="bv-open-control-rack",Yn="bv-open-regional-editor",Gi="bv-open-regional-quick-edit",yo="bv-regional-document-changed",Qh="bv-nodepack-styles",Ix="BV.DebugBridge.Enabled";let tn=!1,cl=null;const YE=()=>{const e=rt.extensionManager?.workflow?.activeWorkflow??rt.workflowManager?.activeWorkflow;return String(e?.filename??e?.path??"Current workflow")},jx=async e=>{tn=!!e;const t=await fetch(wr.apiURL("/bv_nodepack/debug/session"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({enabled:tn})});if(!t.ok)throw new Error(`BV Debug Bridge session failed: ${t.status} ${await t.text()}`)},Bx=async()=>{if(!tn)return!1;const e=await rt.graphToPrompt(),t=await fetch(wr.apiURL("/bv_nodepack/debug/snapshot"),{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({prompt:e.output,workflow_name:YE()})});if(!t.ok)throw new Error(`BV Debug Bridge snapshot failed: ${t.status} ${await t.text()}`);return!0},Es=()=>{tn&&(cl!=null&&window.clearTimeout(cl),cl=window.setTimeout(()=>{cl=null,Bx().catch(e=>console.error(e))},600))},jr=e=>{e.type="converted-widget",e.hidden=!0,e.computeSize=()=>[0,-4],e.element&&(e.element.style.display="none")},XE=(e,t,r)=>{if(!t||!r||t===r)return;const o=e.widgets?.indexOf(t)??-1;if(o<0)return;e.widgets.splice(o,1);const n=e.widgets.indexOf(r);e.widgets.splice(n<0?e.widgets.length:n,0,t)},GE=e=>{const t=[e.widgets?.find(r=>r.name==="region_selector"),...e.__bvDetailerContextWidgets??[]].filter(Boolean);for(const r of t){const o=e.widgets?.indexOf(r)??-1;o>=0&&e.widgets.splice(o,1),r.onRemove?.()}e.__bvDetailerContextWidgets=[]},nc=e=>{const t=e.inputs?.find(a=>a.name==="regional"||a.name==="regional_prompt"),r=e.graph??rt.graph,o=t?.link==null?null:r?.links?.[t.link]??r?._links?.get?.(t.link),n=o?r?.getNodeById?.(o.origin_id):null;if(n?.type!=="BV Regional Prompt")return null;const i=n.widgets?.find(a=>a.name==="regional_json")?.value;try{return dn(i)}catch{return null}},KE=e=>{const t=e.graph??rt.graph,r=e.inputs?.find(l=>l.name==="detector_registry"),o=r?.link==null?null:t?.links?.[r.link]??t?._links?.get?.(r.link),n=o?t?.getNodeById?.(o.origin_id):null;if(n?.type!=="BV Detector Registry")return[];const i=n.widgets?.find(l=>l.name==="config_json")?.value,a=Xi(i).detectors.map(l=>l.id);for(const l of n.inputs??[]){if(!String(l.name).startsWith("external_detector_")||l.link==null)continue;const c=t?.links?.[l.link]??t?._links?.get?.(l.link),u=c?t?.getNodeById?.(c.origin_id):null,d=String(u?.widgets?.find(f=>f.name==="detector_id")?.value??"").trim();d&&a.push(d)}return[...new Set(a)].sort((l,c)=>l.localeCompare(c))},Zc=e=>{const t=/^external_detector_(\d+)$/,r=(e.inputs??[]).flatMap(n=>{const i=t.exec(String(n.name));return i&&n.link!=null?[Number(i[1])]:[]}),o=new Set(bE(r));for(let n=(e.inputs?.length??0)-1;n>=0;n--){const i=e.inputs[n],a=t.exec(String(i.name));a&&i.link==null&&!o.has(Number(a[1]))&&e.removeInput(n)}for(const n of[...o].sort((i,a)=>i-a)){const i=`external_detector_${n}`;e.inputs?.some(a=>a.name===i)||e.addInput(i,"BV_DETECTOR_BINDING",{label:`external detector ${n}`,nameLocked:!0})}e.setDirtyCanvas?.(!0,!0)},eg=(e,t)=>{for(const r of e.inputs??[])r.label=Hc(t,String(r.name));for(const r of e.outputs??[])r.label=Hc(t,String(r.name));for(const r of e.widgets??[])String(r.name).startsWith("configure_")||(r.label=Hc(t,String(r.name)));e.setDirtyCanvas?.(!0,!0)},hd=e=>{const t=e.widgets?.find(i=>i.name==="config_json"),r=e.widgets?.find(i=>i.name==="configure_detailer_plan");if(!t||!r)return;jr(t);const o=nc(e),n=o?Nl(t.value,o.regions).jobs.length:0;r.label=o?`Configure Detailer Plan · ${n} Job${n===1?"":"s"}`:"Connect a BV Regional Prompt",r.disabled=!o,e.setDirtyCanvas?.(!0,!0)},tg=e=>{const t=e.widgets?.find(o=>o.name==="config_json");if(!t)return;jr(t);let r=e.widgets?.find(o=>o.name==="configure_detailer_plan");r||(r=e.addWidget("button","configure_detailer_plan",null,()=>{const o=nc(e);o&&(to("detailer",je(e)),fE(o.regions,KE(e),t.value,n=>{t.value=n,hd(e),e.graph?.setDirtyCanvas?.(!0,!0)},`detailer-plan:${je(e)}`,Ft("BV Regional Detailer Plan").filter(mn).map(n=>({id:je(n),label:`${n.title||"BV Regional Detailer Plan"} · #${n.id}`})),(n,i)=>{const a=Ft("BV Regional Detailer Plan").find(c=>je(c)===n),l=a?.widgets?.find(c=>c.name==="configure_detailer_plan");l&&yf(`detailer-plan:${je(e)}`,`detailer-plan:${je(a)}`,()=>l.callback?.(),i)},e))},{serialize:!1}),r.serialize=!1),hd(e)},rg=e=>{try{const t=JSON.parse(String(e??"[]"));return Array.isArray(t)?t.filter(r=>r&&typeof r.region_id=="string").map(r=>({region_id:r.region_id,influence:Math.max(0,Math.min(2,Number.isFinite(+r.influence)?+r.influence:1))})):[]}catch{return[]}},Vf=e=>{if(e.comfyClass!=="BV Regional Detailer Mask"&&e.type!=="BV Regional Detailer Mask")return;const t=e.widgets?.find(d=>d.name==="context_regions_json");if(!t)return;jr(t);const r=nc(e);if(!r)return;for(const d of e.__bvDetailerContextWidgets??[]){const f=e.widgets?.indexOf(d)??-1;f>=0&&e.widgets.splice(f,1),d.onRemove?.()}const o=String(e.widgets?.find(d=>d.name==="region")?.value??""),n=(r?.regions??[]).filter(d=>d.enabled!==!1&&d.id!==o),i=new Set,a=rg(t.value).filter(d=>d.region_id!==o&&!i.has(d.region_id)&&!!i.add(d.region_id));t.value=JSON.stringify(a);const l=[],c=d=>{t.value=JSON.stringify(d),queueMicrotask(()=>Vf(e))};for(let d=0;d<=a.length;d++){const f=a[d],p=new Set(a.filter((k,b)=>b!==d).map(k=>k.region_id)),g=kx(n.filter(k=>!p.has(k.id))),x=f&&!g.some(k=>k.id===f.region_id)?`Missing region · ${f.region_id.slice(0,8)}`:null,w=e.addWidget("combo",`context_region_${d+1}`,f?g.find(k=>k.id===f.region_id)?.label??x??"None":"None",k=>{if(k==="None")return c(a.slice(0,d));const b=g.find(v=>v.label===k);if(!b)return;const h=a.slice();h[d]={region_id:b.id,influence:f?.influence??1},c(h)},{values:["None",...x?[x]:[],...g.map(k=>k.label)],serialize:!1});if(w.label=`context region ${d+1}`,w.serialize=!1,l.push(w),f){const k=e.addWidget("number",`context_influence_${d+1}`,f.influence,b=>{const h=rg(t.value);h[d]&&(h[d].influence=Math.max(0,Math.min(2,+b))),t.value=JSON.stringify(h)},{min:0,max:2,step:.05,precision:2,serialize:!1});k.label=`context influence ${d+1}`,k.serialize=!1,l.push(k)}}e.__bvDetailerContextWidgets=l;const u=e.computeSize?.();u&&e.setSize&&e.setSize([Math.max(e.size?.[0]??0,u[0]),u[1]]),e.setDirtyCanvas?.(!0,!0),e.graph?.setDirtyCanvas?.(!0,!0)},Ol=e=>{const t=e.widgets?.find(d=>d.name==="region"),r=e.widgets?.find(d=>d.name==="region_selector");if(!t||!r)return;const o=nc(e);if(!o){r.options??(r.options={}),r.options.values=["Connect a BV Regional Prompt"],r.value=r.options.values[0],r.disabled=!0,e.setDirtyCanvas?.(!0,!0);return}const n=e.comfyClass==="BV Regional Detailer Mask"||e.type==="BV Regional Detailer Mask"?"detailer":void 0,i=kx(o.regions,n),a=String(t.value??""),l=i.some(d=>d.id===a)?a:a||i[0]?.id||"";t.value=l,e.__bvRegionChoices=i,r.options??(r.options={});const c=l&&!i.some(d=>d.id===l)?`Missing region · ${l.slice(0,8)}`:null;r.options.values=i.length||c?[...c?[c]:[],...i.map(d=>d.label)]:["Connect a BV Regional Prompt"],r.value=i.find(d=>d.id===l)?.label??c??r.options.values[0];const u=e.widgets?.find(d=>d.name==="scope");r.disabled=u&&u.value!=="region"||!i.length,Vf(e),e.setDirtyCanvas?.(!0,!0)},og=e=>{const t=e.widgets?.find(n=>n.name==="region");if(!t)return;jr(t);let r=e.widgets?.find(n=>n.name==="region_selector");r||(r=e.addWidget("combo","region_selector","Connect a BV Regional Prompt",n=>{const i=e.__bvRegionChoices?.find(a=>a.label===n);i&&(t.value=i.id,Vf(e))},{values:["Connect a BV Regional Prompt"],serialize:!1}),r.label="region",r.serialize=!1),(e.comfyClass==="BV Regional Detailer Mask"||e.type==="BV Regional Detailer Mask")&&XE(e,r,e.widgets?.find(n=>n.name==="primary_region_influence"));const o=e.widgets?.find(n=>n.name==="scope");if(o&&!o.__bvRegionSelectorHooked){o.__bvRegionSelectorHooked=!0;const n=o.callback;o.callback=function(){const i=n?.apply(this,arguments);return Ol(e),i}}if(!e.__bvRegionDocumentListener){e.__bvRegionDocumentListener=()=>Ol(e),window.addEventListener(yo,e.__bvRegionDocumentListener);const n=e.onRemoved;e.onRemoved=function(){return window.removeEventListener(yo,e.__bvRegionDocumentListener),n?.apply(this,arguments)}}Ol(e)},Ft=e=>{const t=[],r=o=>{for(const n of o?._nodes??[])n.type===e&&t.push(n),n.subgraph&&r(n.subgraph)};return r(rt.graph),t},rn=()=>{const e=rt.graph,t=[],r=o=>{for(const n of o?._nodes??[])n.type==="BV Regional Prompt"&&t.push(n),n.subgraph&&r(n.subgraph)};return r(e),t},Ki=()=>{const e=Ft("BV Control Center").length>0,t=rn().length>0,r=t||["BV Regional Detailer Plan","BV Detector Registry","BV Smart Pipe","BV Smart Pipe Merge"].some(n=>Ft(n).length>0),o=r||t;document.body.classList.toggle("bv-toolbar-no-control",!e),document.body.classList.toggle("bv-toolbar-no-editor",!r),document.body.classList.toggle("bv-toolbar-no-quick",!t),document.body.classList.toggle("bv-toolbar-no-overview",!o),window.dispatchEvent(new CustomEvent("bv-toolbar-capabilities-changed",{detail:{control:e,quick:t,full:r,overview:o}}))},Px=e=>kf(rt.rootGraph??rt.graph,t=>t===e)[0],je=e=>Px(e)?.key??String(e.id),ul=(e,t)=>{const r=Px(e);return{label:String(e.title||t),meta:`${r?.breadcrumb?`${r.breadcrumb} · `:""}#${e.id}`}},Ts=(e,t,r,o)=>{const n=o.widgets?.find(c=>c.name===r);if(!n||n.disabled)return;const i=je(o),a=$o(e),l=()=>n.callback?.();a&&a!==i?yf(`${t}:${a}`,`${t}:${i}`,l,ri()==="replace"):l(),to(e,i)},ng=(e,t)=>{e==="regional"?window.dispatchEvent(new CustomEvent(Yn,{detail:{node:t}})):e==="detailer"?Ts("detailer","detailer-plan","configure_detailer_plan",t):e==="detector"?Ts("detector","detector-registry","configure_detector_registry",t):window.dispatchEvent(new CustomEvent("bv-open-smart-pipe-editor",{detail:{node:t,kind:e}}))},qE=()=>{const e=[{type:"regional",nodes:rn()},{type:"detailer",nodes:Ft("BV Regional Detailer Plan")},{type:"detector",nodes:Ft("BV Detector Registry")},{type:"pipe",nodes:Ft("BV Smart Pipe")},{type:"merge",nodes:Ft("BV Smart Pipe Merge")}],t=D1(),r=t&&$o(t),o=e.find(i=>i.type===t)?.nodes.find(i=>je(i)===r);if(o){ng(t,o);return}const n=e.flatMap(i=>i.nodes.map(a=>({type:i.type,node:a}))).sort((i,a)=>(Number(i.node.id)||Number.MAX_SAFE_INTEGER)-(Number(a.node.id)||Number.MAX_SAFE_INTEGER))[0];n&&(ng(n.type,n.node),t&&Ir({title:"Previous editor unavailable",message:"Opened the first available BV editor instead.",tone:"warning",duration:4e3}))},gd=()=>{const e=rt.graph,t=[],r=o=>{for(const n of o?._nodes??[]){if(n.type==="BV Named LoRA Stack"){const i=String(n.widgets?.find(l=>l.name==="stack_id")?.value??"").trim(),a=String(n.widgets?.find(l=>l.name==="name")?.value??"").trim();i&&a&&t.push({id:i,name:a,nodeId:String(n.id)})}n.subgraph&&r(n.subgraph)}};return r(e),t.sort((o,n)=>o.name.localeCompare(n.name))},JE=()=>tE(rn().flatMap(e=>{try{const t=dn(e.widgets?.find(r=>r.name==="regional_json")?.value);return[{documentId:t.document_id,nodeId:String(e.id),title:e.title||t.title||"BV Regional Prompt"}]}catch{return[]}})),ig=(e,t=!1)=>{const r=e.widgets?.find(a=>a.name==="document_id"),o=e.widgets?.find(a=>a.name==="target_editor");if(!r||!o)return;const n=JE(),i=rE(r.value,n,t);r.value=i,e.__bvDocumentTargets=n,o.options??(o.options={}),o.options.values=n.length?n.map(a=>a.label):["No BV Regional Prompt available"],o.value=n.find(a=>a.documentId===i)?.label??(i?`Missing target · ${i.slice(0,8)}`:o.options.values[0]),o.disabled=!n.length,e.setDirtyCanvas?.(!0,!0)},ag=(e,t=!1)=>{const r=e.widgets?.find(n=>n.name==="document_id");if(!r)return;jr(r);let o=e.widgets?.find(n=>n.name==="target_editor");if(o||(o=e.addWidget("combo","target_editor","No BV Regional Prompt available",n=>{const i=e.__bvDocumentTargets?.find(a=>a.label===n);i&&(r.value=i.documentId)},{values:["No BV Regional Prompt available"],serialize:!1}),o.label="target_editor",o.serialize=!1),!e.__bvDocumentTargetListener){e.__bvDocumentTargetListener=()=>ig(e,!1),window.addEventListener(yo,e.__bvDocumentTargetListener);const n=e.onRemoved;e.onRemoved=function(){return window.removeEventListener(yo,e.__bvDocumentTargetListener),n?.apply(this,arguments)}}ig(e,t)},lg=(e,t=!1)=>{const r=e.widgets?.find(o=>o.name==="regional_json");if(r)try{const o=t?mh():dn(r.value);!t&&rn().some(a=>{if(a===e)return!1;try{return dn(a.widgets?.find(l=>l.name==="regional_json")?.value).document_id===o.document_id}catch{return!1}})&&(o.document_id=crypto.randomUUID()),r.value=JSON.stringify(o);const i=e.widgets?.find(a=>a.name==="lora_bindings_json");if(i)try{const a={...Af(i.value,t?"":o.document_id),document_id:o.document_id};i.value=JSON.stringify(Hn(a,new Set(o.regions.map(l=>l.id))))}catch{i.value=JSON.stringify(ec(o.document_id))}}catch{r.value=JSON.stringify(mh())}};function ZE(){const[e,t]=m.useState(!1),[r,o]=m.useState(!1),[n,i]=m.useState(!1),[a,l]=m.useState(0),[c,u]=m.useState(!1),[d,f]=m.useState(0),[p,g]=m.useState(null),[x,w]=m.useState([]),[k,b]=m.useState({}),[h,v]=m.useState([]),[_,y]=m.useState(null),T=m.useCallback((S=!1)=>{const z=rn(),N=Ft("BV Regional Detailer Plan"),P=Ft("BV Detector Registry"),B=[...Ft("BV Smart Pipe"),...Ft("BV Smart Pipe Merge")],O=(A,C)=>{const R=!mn(A);return R&&!S?null:{...C,hidden:R,onReveal:R?()=>di(A,!0):void 0}};return[{id:"regional",label:"Regional Prompts",items:z.map(A=>{const C=ul(A,"BV Regional Prompt"),R=$o("regional")===je(A);return O(A,{id:je(A),...C,meta:`${C.meta}${R?" · Last active":""}`,onSelect:()=>window.dispatchEvent(new CustomEvent(Yn,{detail:{node:A}})),secondary:{label:`Quick edit ${C.label}`,onSelect:()=>window.dispatchEvent(new CustomEvent(Gi,{detail:{node:A}}))}})}).filter(Boolean)},{id:"detailer",label:"Detailer Plan",items:N.map(A=>{const C=ul(A,"BV Regional Detailer Plan"),R=A.widgets?.find(D=>D.name==="configure_detailer_plan"),M=$o("detailer")===je(A);return O(A,{id:je(A),...C,disabled:!R||R.disabled,meta:`${C.meta}${R?.disabled?" · Connect Regional Prompt":M?" · Last active":""}`,onSelect:()=>Ts("detailer","detailer-plan","configure_detailer_plan",A)})}).filter(Boolean)},{id:"detector",label:"Detector Registry",items:P.map(A=>{const C=ul(A,"BV Detector Registry"),R=$o("detector")===je(A);return O(A,{id:je(A),...C,meta:`${C.meta}${R?" · Last active":""}`,onSelect:()=>Ts("detector","detector-registry","configure_detector_registry",A)})}).filter(Boolean)},{id:"smart-pipe",label:"Smart Pipes",items:B.map(A=>{const C=String(A.type??A.comfyClass)==="BV Smart Pipe Merge"?"merge":"pipe",R=ul(A,C==="merge"?"Smart Pipe Merge":"Smart Pipe");return O(A,{id:je(A),...R,meta:`${R.meta} · ${C==="merge"?"Merge":"Pipe"}`,onSelect:()=>window.dispatchEvent(new CustomEvent("bv-open-smart-pipe-editor",{detail:{node:A,kind:C}}))})}).filter(Boolean)}]},[]);return m.useEffect(()=>{if(!(!n&&!c))return lE(rt,wr,()=>{i(!1),u(!1)})},[c,n]),m.useEffect(()=>{const S=()=>t(!0);return window.addEventListener(pd,S),()=>window.removeEventListener(pd,S)},[]),m.useEffect(()=>{const S=z=>y(z.detail?.node??null);return window.addEventListener(sd,S),()=>window.removeEventListener(sd,S)},[]),m.useEffect(()=>{const S=z=>o(!!z.detail?.control);return window.addEventListener("bv-toolbar-capabilities-changed",S),Ki(),()=>window.removeEventListener("bv-toolbar-capabilities-changed",S)},[]),m.useEffect(()=>{const S=z=>{const N=z.detail?.node??null,P=rn();v(gd()),w(P);const B=N??P.find(O=>je(O)===$o("quick"))??P[0]??null;B&&to("quick",je(B)),g(B),i(!1),u(!0),f(O=>O+1)};return window.addEventListener(Gi,S),()=>window.removeEventListener(Gi,S)},[]),m.useEffect(()=>{const S=z=>{const N=z.detail?.output,P=N?.bv_regional_background?.[0]?.document_id,B=N?.images?.[N.images.length-1];if(!P||!B)return;const O=new URLSearchParams({filename:B.filename,type:B.type,subfolder:B.subfolder||""});b(E=>({...E,[P]:wr.apiURL(`/view?${O}`)}))};return wr.addEventListener("executed",S),()=>wr.removeEventListener("executed",S)},[]),m.useEffect(()=>{const S=z=>{const N=z.detail?.node??null,P=rn();v(gd()),w(P);const B=N??P.find(O=>je(O)===$o("regional"))??P[0]??null;B&&to("regional",je(B)),g(B),B&&c&&String(p?.id)===String(B.id)&&u(!1),i(!0),l(O=>O+1)};return window.addEventListener(Yn,S),()=>window.removeEventListener(Yn,S)},[c,p]),s.jsxs(s.Fragment,{children:[s.jsx(O1,{}),s.jsx(X0,{getColumns:T}),s.jsx(B1,{}),s.jsx(j1,{open:e,hasControlNodes:r,onClose:()=>t(!1)}),s.jsx(jE,{open:!!_,node:_,onClose:()=>y(null)}),s.jsx(Jk,{open:n,activationToken:a,nodes:x,initialNode:p,backgrounds:k,loraStacks:h,onClose:()=>i(!1)}),s.jsx(eE,{open:c,activationToken:d,nodes:x,initialNode:p,loraStacks:h,onClose:()=>u(!1),onOpenEditor:S=>{to("regional",je(S)),g(S),u(!1),i(!0),l(z=>z+1)}})]})}const sg="bv-root";function QE(){if(!document.getElementById(Qh)){const t=document.createElement("style");t.id=Qh,t.textContent=`${V1} -${U1}`,document.head.appendChild(t)}let e=document.getElementById(sg);e||(e=document.createElement("div"),e.id=sg,document.body.appendChild(e),qi.createRoot(e).render(s.jsx(Re.StrictMode,{children:s.jsx(ZE,{})})))}rt.registerExtension({name:"bv_nodepack.control_rack_portal",setup(){QE(),jf(rt.canvas),j0(rt.ui?.settings),aE(),tn=!!rt.ui?.settings?.getSettingValue?.(Ix,!1),jx(tn).then(()=>{tn&&Es()}).catch(e=>console.error(e)),wr.addEventListener("graphChanged",Es),wr.addEventListener("graphChanged",Ki)}});rt.registerExtension({name:"bv_nodepack.regional_editor",settings:[{id:Wv,name:"BV Interface Size",type:"combo",defaultValue:"default",options:[{text:"Compact",value:"compact"},{text:"Default",value:"default"},{text:"Large",value:"large"}],category:["BV Node Pack","Appearance","Interface size"],tooltip:"Scale every BV-owned interface consistently. Default is the comfortable size; Compact matches the former standard.",onChange:e=>Yv(e)},{id:Hv,name:"Reduce BV Interface Effects",type:"boolean",defaultValue:!1,category:["BV Node Pack","Appearance","Reduced effects"],tooltip:"Disable BV animations, transitions, blur and visual filters without changing ComfyUI's canvas.",onChange:e=>Xv(e)},{id:_f,name:"BV Window Switch Mode",type:"combo",defaultValue:"keep",options:[{text:"Keep current window",value:"keep"},{text:"Replace current window",value:"replace"}],category:["BV Node Pack","Appearance","Window switching"],tooltip:"Choose whether changing the node in a BV editor minimizes or closes the current window. Hold Shift to invert the mode once.",onChange:e=>wf(e,!1)},{id:Ix,name:"Enable BV Debug Bridge",type:"boolean",defaultValue:!1,category:["BV Node Pack","Developer","Enable Debug Bridge"],tooltip:"Expose the current API-format workflow as an in-memory snapshot to loopback clients only.",onChange:e=>{jx(!!e).then(()=>{e&&Es()}).catch(t=>console.error(t))}},{id:Um,name:"Enable BV Prompt Autocomplete",type:"boolean",defaultValue:!0,category:["BV Node Pack","Prompting","Enable autocomplete"],tooltip:"Enable BV-owned prompt completion. Disable this when another autocomplete extension should control prompt fields.",onChange:e=>Jm(!!e)},{id:Wm,name:"Autocomplete Popup Position",type:"combo",defaultValue:"caret",options:[{text:"At Caret",value:"caret"},{text:"Below Text Field",value:"field"}],category:["BV Node Pack","Prompting","Popup position"],tooltip:"Open suggestions at the active caret or below the complete text field.",onChange:e=>Km(e)},{id:Vm,name:"Completion Datasets",type:oE,defaultValue:"",category:["BV Node Pack","Prompting","Completion datasets"],tooltip:"Choose one or more local CSV/TSV datasets for BV Prompt Autocomplete.",onChange:e=>tx(e)}],commands:[{id:"bv.regional.openEditor",label:"Open BV Regional Editor",icon:"icon-[lucide--layers]",function:()=>{window.dispatchEvent(new CustomEvent(Yn))}},{id:"bv.debugBridge.publishSnapshot",label:"Refresh BV Debug Bridge Snapshot",icon:"icon-[lucide--radio-tower]",function:()=>Bx().catch(e=>console.error(e))}],actionBarButtons:[{icon:"icon-[lucide--sliders-horizontal]",class:"bv-regional-action bv-regional-action-control",tooltip:"Open BV Control Center",onClick:()=>window.dispatchEvent(new Event(pd))},{icon:"icon-[lucide--scan-search]",class:"bv-regional-action bv-regional-action-editor",tooltip:"Open last BV editor",onClick:qE},{icon:"icon-[lucide--layers]",class:"bv-regional-action bv-regional-action-quick",tooltip:"Quick edit BV Regional prompts",onClick:()=>window.dispatchEvent(new CustomEvent(Gi))},{icon:"icon-[lucide--chevron-down]",class:"bv-regional-action bv-regional-action-menu",tooltip:"Choose BV window",onClick:()=>window.dispatchEvent(new CustomEvent(is))}],beforeRegisterNodeDef(e,t){if(IE(e,t)||Kk(e,t))return;if(["BV Control Center","BV Regional Prompt","BV Regional Detailer Plan","BV Detector Registry","BV Smart Pipe","BV Smart Pipe Merge"].includes(t.name)){const i=e.prototype.onNodeCreated,a=e.prototype.onRemoved;e.prototype.onNodeCreated=function(){const l=i?.apply(this,arguments);return t.name!=="BV Control Center"&&(this.properties??(this.properties={}),typeof this.properties.bvWindowMenuVisible!="boolean"&&(this.properties.bvWindowMenuVisible=!["BV Smart Pipe","BV Smart Pipe Merge"].includes(t.name))),queueMicrotask(Ki),l},e.prototype.onRemoved=function(){const l=a?.apply(this,arguments);return queueMicrotask(Ki),l}}if(vE.has(t.name)){const i=e.prototype.onNodeCreated,a=e.prototype.onConfigure;e.prototype.onNodeCreated=function(){const l=i?.apply(this,arguments);return queueMicrotask(()=>eg(this,t.name)),l},e.prototype.onConfigure=function(l){const c=a?.call(this,l);return queueMicrotask(()=>eg(this,t.name)),c}}if(t.name==="BV Detector Registry"){const i=u=>{const d=u.widgets?.find(g=>g.name==="config_json");if(!d)return;jr(d);let f=u.widgets?.find(g=>g.name==="configure_detector_registry");f||(f=u.addWidget("button","configure_detector_registry",null,()=>{to("detector",je(u)),hE(wr,d.value,g=>{d.value=g,i(u),u.graph?.setDirtyCanvas?.(!0,!0)},`detector-registry:${je(u)}`,Ft("BV Detector Registry").filter(mn).map(g=>({id:je(g),label:`${g.title||"BV Detector Registry"} · #${g.id}`})),(g,x)=>{const w=Ft("BV Detector Registry").find(b=>je(b)===g),k=w?.widgets?.find(b=>b.name==="configure_detector_registry");k&&yf(`detector-registry:${je(u)}`,`detector-registry:${je(w)}`,()=>k.callback?.(),x)},u).catch(g=>console.error(g))},{serialize:!1}),f.serialize=!1);const p=Xi(d.value).detectors.length;f.label=`Configure Detector Registry · ${p} Detector${p===1?"":"s"}`,u.setDirtyCanvas?.(!0,!0)},a=e.prototype.onNodeCreated,l=e.prototype.onConfigure,c=e.prototype.onConnectionsChange;e.prototype.onNodeCreated=function(){const u=a?.apply(this,arguments);return queueMicrotask(()=>{i(this),Zc(this)}),u},e.prototype.onConfigure=function(){const u=l?.apply(this,arguments);return queueMicrotask(()=>{i(this),Zc(this)}),u},e.prototype.onConnectionsChange=function(){const u=c?.apply(this,arguments);return queueMicrotask(()=>Zc(this)),u};return}if(t.name==="BV Regional Detailer Plan"){const i=e.prototype.onNodeCreated,a=e.prototype.onConfigure,l=e.prototype.onConnectionsChange;e.prototype.onNodeCreated=function(){const c=i?.apply(this,arguments);return queueMicrotask(()=>tg(this)),c},e.prototype.onConfigure=function(){const c=a?.apply(this,arguments);return queueMicrotask(()=>tg(this)),c},e.prototype.onConnectionsChange=function(){const c=l?.apply(this,arguments);return queueMicrotask(()=>hd(this)),c};return}if(t.name==="BV Remote LLM Provider"){const i=e.prototype.onNodeCreated,a=e.prototype.onConfigure;e.prototype.onNodeCreated=function(){const l=i?.apply(this,arguments);return queueMicrotask(()=>$h(this,wr)),l},e.prototype.onConfigure=function(l){Array.isArray(l?.widgets_values)&&l.widgets_values.length>=6&&/^[A-Za-z_][A-Za-z0-9_]*$/.test(String(l.widgets_values[3]??""))&&(l={...l,widgets_values:[...l.widgets_values.slice(0,3),...l.widgets_values.slice(4)]});const c=a?.call(this,l);return queueMicrotask(()=>$h(this,wr)),c};return}if(t.name==="BV Named LoRA Stack"){const i=c=>{const u=c.widgets?.find(f=>f.name==="stack_id");if(!u)return;const d=String(u.value??"").trim();if(!d||Rk(String(c.id),d,gd())){const f=crypto.randomUUID();d&&(c.__bvLoraResourceIdRemap={[d]:f}),u.value=f,c.setDirtyCanvas?.(!0,!0)}jr(u)},a=e.prototype.onNodeCreated,l=e.prototype.onConfigure;e.prototype.onNodeCreated=function(){const c=a?.apply(this,arguments);return i(this),c},e.prototype.onConfigure=function(){const c=l?.apply(this,arguments);return queueMicrotask(()=>i(this)),c};return}if(t.name==="BV Regional Image Send"||t.name==="BV Regional Image Save"){const i=e.prototype.onNodeCreated,a=e.prototype.onConfigure;e.prototype.onNodeCreated=function(){const l=i?.apply(this,arguments);return queueMicrotask(()=>ag(this,!0)),l},e.prototype.onConfigure=function(){const l=a?.apply(this,arguments);return queueMicrotask(()=>ag(this,!1)),l};return}if(["BV Regional Select","BV Regional Deconstructor","BV Regional Detailer Mask"].includes(t.name)){const i=e.prototype.onNodeCreated,a=e.prototype.onConfigure,l=e.prototype.onConnectionsChange;e.prototype.onNodeCreated=function(){const u=i?.apply(this,arguments);return og(this),u};const c=e.prototype.onSerialize;e.prototype.onConfigure=function(u){t.name==="BV Regional Detailer Mask"&&(GE(this),u?.widgets_values&&(u={...u,widgets_values:cE(u.widgets_values)}));const d=a?.call(this,u);return queueMicrotask(()=>og(this)),d},e.prototype.onSerialize=function(u){const d=c?.apply(this,arguments);return t.name==="BV Regional Detailer Mask"&&(u.widgets_values=sE(this.widgets)),d},e.prototype.onConnectionsChange=function(){const u=l?.apply(this,arguments);return queueMicrotask(()=>Ol(this)),u};return}if(t.name!=="BV Regional Prompt")return;const r=e.prototype.onNodeCreated,o=e.prototype.onConfigure;e.prototype.onNodeCreated=function(){const i=r?.apply(this,arguments);lg(this,!0);const a=this.widgets?.find(u=>u.name==="regional_json"),l=this.widgets?.find(u=>u.name==="lora_bindings_json"),c=this.widgets?.find(u=>u.name==="lora_v3_config_json");if(l&&jr(l),c&&wa(c),ms(this),a&&(jr(a),!a.__bvRegionalDocumentHooked)){a.__bvRegionalDocumentHooked=!0;const u=a.callback;a.callback=function(){const d=u?.apply(this,arguments);return window.dispatchEvent(new CustomEvent(yo)),d}}if(!this.widgets?.find(u=>u.name==="open_regional_editor")){const u=this.addWidget("button","open_regional_editor",null,()=>window.dispatchEvent(new CustomEvent(Yn,{detail:{node:this}})),{serialize:!1});u.label="Open Regional Editor",u.serialize=!1}if(!this.widgets?.find(u=>u.name==="quick_edit_regional_prompts")){const u=this.addWidget("button","quick_edit_regional_prompts",null,()=>window.dispatchEvent(new CustomEvent(Gi,{detail:{node:this}})),{serialize:!1});u.label="Quick Edit Prompts",u.serialize=!1}return this.setSize?.([Math.max(this.size?.[0]??0,220),this.computeSize?.()[1]??60]),window.dispatchEvent(new CustomEvent(yo)),i},e.prototype.onConfigure=function(){const i=o?.apply(this,arguments);lg(this,!1);const a=this.widgets?.find(c=>c.name==="lora_bindings_json"),l=this.widgets?.find(c=>c.name==="lora_v3_config_json");return a&&jr(a),l&&wa(l),ms(this),window.dispatchEvent(new CustomEvent(yo)),i};const n=e.prototype.onRemoved;e.prototype.onRemoved=function(){const i=n?.apply(this,arguments);return window.dispatchEvent(new CustomEvent(yo)),i}},afterConfigureGraph(){Es(),queueMicrotask(Ki)}}); + then enabling this option will gray out this tab`),r.addInherited("borderWidth","tabBorderWidth").setDescription("the width of this tab when shown in a border; -1 uses the border's default size"),r.addInherited("borderHeight","tabBorderHeight").setDescription("the height of this tab when shown in a border; -1 uses the border's default size"),r.addInherited("minWidth","tabMinWidth").setDescription("the minimum width (in px) of this tab"),r.addInherited("minHeight","tabMinHeight").setDescription("the minimum height (in px) of this tab"),r.addInherited("maxWidth","tabMaxWidth").setDescription("the maximum width (in px) of this tab"),r.addInherited("maxHeight","tabMaxHeight").setDescription("the maximum height (in px) of this tab"),r.addInherited("enableScrollbars","tabEnableScrollbars").setDescription("whether the tab will be hosted in a scrollable container"),r}},I(Et,"TYPE","tab"),I(Et,"attributeDefinitions",Et.createAttributeDefinitions()),Et),lo={width:"1em",height:"1em",display:"flex",alignItems:"center"},Ll=()=>s.jsxs("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:lo,viewBox:"0 0 24 24",children:[s.jsx("path",{fill:"none",d:"M0 0h24v24H0z"}),s.jsx("path",{stroke:"var(--color-icon)",fill:"var(--color-icon)",d:"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"})]});Ll.displayName="CloseIcon";var Qv=()=>s.jsxs("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:lo,viewBox:"0 0 24 24",fill:"var(--color-icon)",children:[s.jsx("path",{fill:"none",d:"M0 0h24v24H0z"}),s.jsx("path",{transform:"rotate(45 12 12)",d:"M16 9V4h1a1 1 0 000-2H7a1 1 0 000 2h1v5c0 1.66-1.34 3-3 3v2h5.97v7l1 1 1-1v-7H19v-2c-1.66 0-3-1.34-3-3z"})]});Qv.displayName="PinIcon";var em=()=>s.jsxs("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:lo,viewBox:"0 0 24 24",fill:"var(--color-icon)",children:[s.jsx("path",{d:"M0 0h24v24H0z",fill:"none"}),s.jsx("path",{stroke:"var(--color-icon)",d:"M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z"})]});em.displayName="MaximizeIcon";var tm=()=>s.jsxs("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:lo,viewBox:"0 0 24 24",fill:"var(--color-icon)",children:[s.jsx("path",{d:"M0 0h24v24H0z",fill:"none"}),s.jsx("path",{stroke:"var(--color-icon)",d:"M7 10l5 5 5-5z"})]});tm.displayName="OverflowIcon";var rm=()=>s.jsx("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:{display:"block",width:10,height:10},preserveAspectRatio:"none",viewBox:"0 0 100 100",children:s.jsx("path",{fill:"var(--color-edge-icon)",stroke:"var(--color-edge-icon)",d:"M10 30 L90 30 l-40 40 Z"})});rm.displayName="EdgeIcon";var qu=()=>s.jsxs("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:lo,viewBox:"0 0 20 20",fill:"var(--color-icon)",children:[s.jsx("path",{d:"M11 3a1 1 0 100 2h2.586l-6.293 6.293a1 1 0 101.414 1.414L15 6.414V9a1 1 0 102 0V4a1 1 0 00-1-1h-5z"}),s.jsx("path",{d:"M5 5a2 2 0 00-2 2v8a2 2 0 002 2h8a2 2 0 002-2v-3a1 1 0 10-2 0v3H5V7h3a1 1 0 000-2H5z"})]});qu.displayName="PopoutIcon";var om=()=>s.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 -960 960 960",style:lo,fill:"var(--color-icon)",children:s.jsx("path",{d:"M360-280q-33 0-56.5-23.5T280-360v-400q0-33 23.5-56.5T360-840h400q33 0 56.5 23.5T840-760v400q0 33-23.5 56.5T760-280H360Zm0-80h400v-400H360v400ZM200-200v80q-33 0-56.5-23.5T120-200h80Zm-80-80v-80h80v80h-80Zm0-160v-80h80v80h-80Zm0-160v-80h80v80h-80Zm160 480v-80h80v80h-80Zm160 0v-80h80v80h-80Zm160 0v-80h80v80h-80Z"})});om.displayName="PopoutFloatIcon";var nm=()=>s.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",style:lo,fill:"var(--color-icon)",children:s.jsx("path",{d:"M4 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm0 6a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm0 6a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm6-12a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm0 6a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm0 6a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm6-12a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm0 6a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm0 6a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"})});nm.displayName="GripIcon";var im=()=>s.jsxs("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:lo,viewBox:"0 0 24 24",fill:"var(--color-icon)",children:[s.jsx("path",{d:"M0 0h24v24H0z",fill:"none"}),s.jsx("path",{stroke:"var(--color-icon)",d:"M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h3v-2h-5v5zm2-11V5h-2v5h5V8h-3z"})]});im.displayName="RestoreIcon";var am=()=>s.jsx("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:lo,height:"24px",viewBox:"0 -960 960 960",width:"24px",children:s.jsx("path",{fill:"var(--color-icon)",stroke:"var(--color-icon)",d:"M440-120v-264L254-197l-57-57 187-186H120v-80h264L197-706l57-57 186 187v-264h80v264l186-187 57 57-187 186h264v80H576l187 186-57 57-186-187v264h-80Z"})});am.displayName="AsterickIcon";var lm=e=>{const{controller:t,show:r}=e;return s.jsx("div",{"aria-hidden":"true",className:t.getClassName(U.FLEXLAYOUT__LAYOUT_OVERLAY),style:{display:r?"flex":"none"}})};lm.displayName="Overlay";var Me=function(e){return e.Close_Tab="Close",e.Pinned_Tab="Pinned",e.Rename_Tab="Rename tab",e.Close_Tabset="Close tab set",e.Active_Tabset="Active tab set",e.Move_Tabset="Move tab set",e.Move_Tabs="Move tabs (?)",e.Maximize="Maximize tab set",e.Restore="Restore tab set",e.Popout_Tab="Popout selected tab",e.Popout_Tab_Float="Float selected tab",e.Popout_Float_To_Window="Popout panel",e.Dock_Float_To_Layout="Drag into another layout",e.Dock_Float_Tabs="Dock tabs (?)",e.Overflow_Menu_Tooltip="Hidden tabs",e.Splitter="Resize",e.Error_rendering_component="Error rendering component",e.Error_rendering_component_retry="Retry",e.Menu_Rename="Rename",e.Menu_Pin="Pin",e.Menu_Unpin="Unpin",e.Menu_Popout="Popout",e.Menu_Float="Float",e.Menu_Popout_Tabset="Pop out tabset",e.Menu_Float_Tabset="Float tabset",e.Menu_Maximize="Maximize",e.Menu_Restore="Restore",e.Menu_Overlay="Overlay",e.Menu_Split="Split",e.Menu_Close_All="Close All",e.Menu_Close_Right="Close to the Right",e.Menu_Close_Others="Close Others",e}({}),va=e=>{const{controller:t,tabNode:r}=e,o=t.getClassName,n=o(U.FLEXLAYOUT__TAB_BUTTON_STAMP),i=Ef(t,r),a=i.content?s.jsx("div",{className:o(U.FLEXLAYOUT__TAB_BUTTON_CONTENT),children:i.content}):r.getNameForOverflowMenu(),l=i.leading?s.jsx("div",{className:o(U.FLEXLAYOUT__TAB_BUTTON_LEADING),children:i.leading}):null;return s.jsxs("div",{className:n,title:r.getHelpText(),children:[l,a]})};va.displayName="TabButtonStamp";var i1=500;function Ks(e){return typeof e.getBoundingClientRect=="function"}function sm(e){return e.container?e.container:Ks(e.anchor)?e.anchor.ownerDocument.body:document.body}function a1(e){if(Ks(e))return e.getBoundingClientRect();if("right"in e&&"bottom"in e)return e;const t=e;return new DOMRect(t.x,t.y,0,0)}function l1(e,t){const r=t,{left:o,right:n,top:i,bottom:a}=e,l={};return(o+n)/2{const{anchor:t,items:r,onSelect:o,onClose:n,renderItem:i,title:a}=e,l=e.classNameMapper??(b=>b),c=sm(e),u=m.useRef(null),d=m.useRef(null),f=m.useRef({buffer:"",timer:void 0});m.useEffect(()=>()=>{f.current.timer&&clearTimeout(f.current.timer)},[]);const p=m.useCallback(b=>{b.disabled||((b.onSelect??o)?.(b),n())},[o,n]);m.useEffect(()=>{(d.current?.querySelector('[role="menuitem"]:not([aria-disabled="true"])')??d.current)?.focus();const b=e.returnFocusTo??(Ks(t)?t:void 0);return()=>{b?.focus?.()}},[]),m.useEffect(()=>{const b=c.ownerDocument,h=v=>{u.current?.contains(v.target)||n()};return b.addEventListener("pointerdown",h),()=>b.removeEventListener("pointerdown",h)},[c,n]);const g=b=>{const h=Array.from(d.current?.querySelectorAll('[role="menuitem"]:not([aria-disabled="true"])')??[]),v=b.target.closest?.('[role="menuitem"]'),_=v?h.indexOf(v):-1;if(b.key==="Escape"||b.key==="Tab")n(),b.preventDefault();else if(b.key==="ArrowDown"||b.key==="ArrowUp")h.length>0&&h[(_+(b.key==="ArrowDown"?1:-1)+h.length)%h.length]?.focus(),b.preventDefault();else if(b.key==="Home"||b.key==="End")(b.key==="Home"?h[0]:h[h.length-1])?.focus(),b.preventDefault();else if(b.key.length===1&&b.key!==" "&&!b.ctrlKey&&!b.metaKey&&!b.altKey){const y=f.current;y.timer&&clearTimeout(y.timer),y.buffer+=b.key.toLowerCase(),y.timer=setTimeout(()=>{y.buffer=""},i1);const T=[...y.buffer].every(N=>N===y.buffer[0]),S=T?y.buffer[0]:y.buffer,z=T?_+1:Math.max(_,0);for(let N=0;N({select:()=>p(b),close:n}),w=b=>s.jsx("div",{className:l(U.FLEXLAYOUT__POPUP_MENU_ITEM)+(b.disabled?" "+l(U.FLEXLAYOUT__POPUP_MENU_ITEM__DISABLED):""),role:"menuitem",tabIndex:-1,"aria-disabled":b.disabled||void 0,onClick:h=>{p(b),h.stopPropagation()},children:b.content??s.jsxs(s.Fragment,{children:[b.icon,b.label]})},b.key),k=s.jsx("div",{ref:u,className:l(U.FLEXLAYOUT__POPUP_MENU_CONTAINER),style:l1(a1(t),c.getBoundingClientRect()),children:s.jsx("div",{ref:d,className:l(U.FLEXLAYOUT__POPUP_MENU),role:"menu","aria-label":a,tabIndex:0,onKeyDown:g,"data-layout-path":"/popup-menu",children:r.map((b,h)=>b.type==="divider"?s.jsx("div",{className:l(U.FLEXLAYOUT__POPUP_MENU_DIVIDER),role:"separator"},b.key):i?i(b,h,x(b)):w(b))})});return Ur.createPortal(k,c)};function s1(e){const t=sm(e),r=Ks(e.anchor)?e.anchor.getBoundingClientRect():e.anchor,o=t.ownerDocument.createElement("div");t.appendChild(o);const n=ui(o);let i=!1;const a=()=>{i||(i=!0,n.unmount(),o.remove(),e.onClose())};return n.render(s.jsx(cm,{...e,anchor:r,container:t,onClose:a})),a}function um(e,t,r,o,n,i){const a=n.getClassName,l=r.map(u=>({key:u.node.getId()}));n.showOverlayOnAllWindows(!0);const c=(u,d,f)=>{const p=r[d];let g=a(U.FLEXLAYOUT__POPUP_MENU_ITEM);return t.getSelected()===p.index&&(g+=" "+a(U.FLEXLAYOUT__POPUP_MENU_ITEM__SELECTED)),s.jsx("div",{className:g,role:"menuitem","aria-label":p.node.getNameForOverflowMenu(),tabIndex:-1,"data-layout-path":"/popup-menu/tb"+d,onClick:x=>{f.select(),x.stopPropagation()},draggable:!0,onDragStart:x=>{x.stopPropagation(),n.getDragDropManager().setDragNode(x.nativeEvent,p.node),setTimeout(()=>f.close(),0)},onDragEnd:()=>n.getDragDropManager().onDragEnded(),title:p.node.getHelpText(),children:s.jsx(va,{tabNode:p.node,controller:n})},u.key)};return s1({anchor:e,container:n.getRootDiv()??void 0,classNameMapper:a,returnFocusTo:e,title:n.i18nName(Me.Overflow_Menu_Tooltip),items:l,onSelect:u=>{const d=l.indexOf(u);d>=0&&o(r[d])},renderItem:c,onClose:()=>{n.showOverlayOnAllWindows(!1),i?.()}})}cm.displayName="PopupMenu";var dm=e=>{const{controller:t,tabNode:r,selected:o,path:n}=e,i=m.useRef(null),a=m.useRef(null),l=t.getIcons(),c=t.getKeyMap(),u=t.getEditingTab()===r,d=m.useCallback(F=>{i.current=F,t.registerMeasurable(r,"tabbutton",F)},[t,r]);m.useLayoutEffect(()=>{u&&a.current.select()},[u]),m.useEffect(()=>{if(u){const F=t.getCurrentDocument().body,ne=X=>{X.target!==a.current&&t.setEditingTab(void 0)};return F.addEventListener("pointerdown",ne),()=>F.removeEventListener("pointerdown",ne)}},[u,t]);const f=F=>{r.isEnableDrag()?(F.stopPropagation(),t.getDragDropManager().setDragNode(F.nativeEvent,r)):F.preventDefault()},p=F=>{t.getDragDropManager().onDragEnded()},g=F=>{ba(F)&&t.auxMouseClick(r,F)},x=F=>{t.showContextMenu(r,F)},w=()=>{r.isSelected()||t.doAction(re.selectTab(r.getId()))},k=F=>{const ne=i.current?.closest('[role="tablist"]');if(ne){const X=Array.from(ne.querySelectorAll('[role="tab"]'));X[X.indexOf(i.current)+F]?.focus()}},b=()=>{const F=i.current.ownerDocument,ne=()=>Gv(F.getElementById(Lt("flexlayout-tab-",r.getId())));o?ne():(w(),requestAnimationFrame(ne))},h=F=>{u||(eo(F,c.focusTabToggle)?(b(),F.preventDefault()):F.key==="Enter"||F.key===" "?(o?b():w(),F.preventDefault()):(F.key==="ArrowLeft"||F.key==="ArrowUp")&&!ga(F)?(k(-1),F.preventDefault()):(F.key==="ArrowRight"||F.key==="ArrowDown")&&!ga(F)?(k(1),F.preventDefault()):eo(F,c.closeTab)&&r.isCloseable()?(k(1),t.doAction(re.deleteTab(r.getId())),F.preventDefault()):eo(F,c.renameTab)&&r.isEnableRename()&&(_(),F.preventDefault()))},v=F=>{r.isEnableRename()&&(_(),F.stopPropagation())},_=()=>{t.setEditingTab(r)},y=()=>{const F=r.getCloseType();return!!(o||F===en.Always||F===en.Visible&&window.matchMedia&&window.matchMedia("(hover: hover) and (pointer: fine)").matches)},T=F=>{y()&&(t.doAction(re.deleteTab(r.getId())),F.stopPropagation())},S=F=>{F.stopPropagation()},z=F=>{F.stopPropagation()},N=F=>{F.code==="Escape"?(t.setEditingTab(void 0),i.current?.focus()):(F.code==="Enter"||F.code==="NumpadEnter")&&(t.setEditingTab(void 0),t.doAction(re.renameTab(r.getId(),F.target.value)),i.current?.focus())},B=t.getClassName,P=r.getParent(),O=P.isEnableSingleTabStretch()&&P.getChildren().length===1,E=O?U.FLEXLAYOUT__TAB_BUTTON_STRETCH:U.FLEXLAYOUT__TAB_BUTTON;let A=B(E);A+=" "+B(E+"_"+P.getTabLocation()),O||(o?A+=" "+B(E+"--selected"):A+=" "+B(E+"--unselected")),r.isPinned()&&(A+=" "+B(E+"--pinned")),r.getClassName()!==void 0&&(A+=" "+r.getClassName());const C=Ef(t,r),R=o||P.getSelectedNode()===void 0&&P.getChildren()[0]===r,M=[Co(c.focusTabToggle),r.isCloseable()?Co(c.closeTab):void 0,r.isEnableRename()?Co(c.renameTab):void 0].filter(Boolean).join(" ")||void 0;let D=C.content?s.jsx("div",{className:B(U.FLEXLAYOUT__TAB_BUTTON_CONTENT),children:C.content}):null;const W=C.leading?s.jsx("div",{className:B(U.FLEXLAYOUT__TAB_BUTTON_LEADING),children:C.leading}):null;if(u&&(D=s.jsx("input",{ref:a,className:B(U.FLEXLAYOUT__TAB_BUTTON_TEXTBOX),"data-layout-path":n+"/textbox",type:"text","aria-label":t.i18nName(Me.Rename_Tab),autoFocus:!0,defaultValue:r.getName(),onKeyDown:N,onPointerDown:z})),r.isPinned()){const F=t.i18nName(Me.Pinned_Tab);C.buttons.push(s.jsx("div",{"data-layout-path":n+"/button/pin",title:F,"aria-hidden":"true",className:B(U.FLEXLAYOUT__TAB_BUTTON_PIN),children:typeof l.pin=="function"?l.pin(r):l.pin},"pin"))}if(r.isCloseable()&&!O){const F=t.i18nName(Me.Close_Tab);C.buttons.push(s.jsx("div",{"data-layout-path":n+"/button/close",title:F,"aria-hidden":"true",className:B(U.FLEXLAYOUT__TAB_BUTTON_TRAILING),onPointerDown:S,onClick:T,children:typeof l.close=="function"?l.close(r):l.close},"close"))}return s.jsxs("div",{ref:d,id:Lt("flexlayout-tabbutton-",r.getId()),role:u?void 0:"tab","aria-selected":u?void 0:o,"aria-controls":u?void 0:Lt("flexlayout-tab-",r.getId()),"aria-label":u?void 0:r.isPinned()?C.name+" ("+t.i18nName(Me.Pinned_Tab)+")":C.name,"aria-keyshortcuts":u?void 0:M,tabIndex:u?-1:R?0:-1,onKeyDown:h,"data-layout-path":n,className:A,onClick:w,onAuxClick:g,onContextMenu:x,title:r.getHelpText(),draggable:!0,onDragStart:f,onDragEnd:p,onDoubleClick:v,children:[W,D,C.buttons]})};dm.displayName="TabButton";var fm=(e,t,r,o,n,i,a)=>{const[l,c]=m.useState([]),[u,d]=m.useState(!1),[f,p]=m.useState(!1),g=m.useRef(!1),x=m.useRef(void 0),w=m.useRef([]),k=m.useRef(0),b=m.useRef(!1);m.useEffect(()=>()=>{x.current!==void 0&&clearTimeout(x.current)},[]),m.useLayoutEffect(()=>{w.current=l});const h=m.useCallback(q=>{r===_e.HORZ?o.current.scrollLeft=q:o.current.scrollTop=q},[r,o]),v=m.useCallback(q=>r===_e.HORZ?q.scrollLeft:q.scrollTop,[r]),_=m.useCallback(q=>r===_e.HORZ?q.clientWidth:q.clientHeight,[r]),y=m.useCallback(q=>r===_e.HORZ?q.scrollWidth:q.scrollHeight,[r]),T=m.useCallback(q=>r===_e.HORZ?q.width:q.height,[r]),S=m.useCallback(q=>r===_e.HORZ?q.x:q.y,[r]),z=m.useCallback(q=>r===_e.HORZ?q.right:q.bottom,[r]),N=m.useCallback(()=>{const q=[];if(o.current){const Z=o.current,Y=Z.getBoundingClientRect(),Q=S(Y)-1,oe=z(Y)+1,le=Z.firstElementChild;let Ce=0;Array.from(le.children).forEach(Ee=>{const ve=Ee.getBoundingClientRect();Ee.classList.contains(a)&&((S(ve)oe)&&q.push(Ce),Ce++)})}return q},[a,o,S,z]),B=m.useCallback(()=>{if(o.current&&n.current){const q=o.current,Z=n.current,Y=_(q),Q=y(q),oe=v(q);if(Q>Y&&Q>0){let le=Y*Y/Q,Ce=0;le<20&&(Ce=20-le,le=20);const Ee=oe*(Y-Ce)/Q;r===_e.HORZ?(Z.style.width=le+"px",Z.style.left=Ee+"px"):(Z.style.height=le+"px",Z.style.top=Ee+"px"),Z.style.display="block"}else Z.style.display="none";r===_e.HORZ?Z.style.bottom="0px":Z.style.right="0px"}},[r,o,n,_,y,v]),P=m.useCallback((q=!1)=>{const Z=N(),Y=Z.length>0;Y!==u&&d(Y),q?c(Z):x.current===void 0&&(x.current=setTimeout(()=>{const Q=N();c1(Q,w.current)||c(Q),x.current=void 0},100))},[N,u]),O=m.useCallback(()=>{const q=t.getSelectedNode();if(q&&o.current){const Z=e.getBoundingClientRect(o.current),Y=o.current.ownerDocument.getElementById(Lt("flexlayout-tabbutton-",q.getId()));if(!Y)return;const Q=e.getBoundingClientRect(Y);let oe=S(Z)-S(Q);oe>0||T(Q)>T(Z)?(h(v(o.current)-oe),b.current=!0):(oe=z(Q)-z(Z),oe>0&&(h(v(o.current)+oe),b.current=!0))}},[t,e,o,S,z,T,v,h]),E=m.useCallback(()=>{if(o.current){const q=o.current;let Z=0;for(const Q of Array.from(q.children))Z+=_(Q);const Y=Z+(f?10:0)>_(o.current);Y!==f&&p(Y)}},[o,f,_]),A=m.useCallback(()=>{b.current||(g.current=!0),b.current=!1,B(),P()},[B,P]),C=m.useCallback((q,Z)=>{if(o.current&&n.current){const Y=o.current,Q=n.current,oe=_(Y),le=y(Y),Ce=_(Q),Ee=Y.getBoundingClientRect();let ve;if(r===_e.HORZ?ve=q-Ee.x-k.current:ve=Z-Ee.y-k.current,ve=Math.max(0,Math.min(le-Ce,ve)),oe>0){const It=ve*le/oe;h(It)}}},[o,n,r,_,y,h]),R=m.useCallback(()=>{},[]),M=m.useCallback(()=>{},[]),D=m.useCallback(q=>{q.stopPropagation(),n.current.setPointerCapture(q.pointerId);const Z=n.current.getBoundingClientRect();r===_e.HORZ?k.current=q.clientX-Z.x:k.current=q.clientY-Z.y,ls(q.currentTarget.ownerDocument,q,C,R,M)},[n,r,C,R,M]),W=m.useCallback(q=>{if(o.current){if(t.getChildren().length===0)return;let Z;if(Math.abs(q.deltaY)>0){Z=-q.deltaY,q.deltaMode===1&&(Z*=40);const Y=v(o.current)-Z,Q=y(o.current)-_(o.current);h(Math.max(0,Math.min(Q,Y))),q.stopPropagation()}}},[t,o,v,y,_,h]),F=m.useCallback(q=>{q.preventDefault()},[]),ne=t.getId(),X=t.getSelectedNode();return m.useLayoutEffect(()=>{o.current&&h(0)},[ne,o,h]),m.useLayoutEffect(()=>{g.current=!1},[X]),m.useLayoutEffect(()=>{E(),g.current===!1&&O(),B(),P(!0),requestAnimationFrame(()=>{P()})},[E,O,B,P,r,X]),m.useLayoutEffect(()=>{const q=o.current;if(!q)return;const Z=new q.ownerDocument.defaultView.ResizeObserver(()=>{g.current=!1,E(),O(),B(),P()});return Z.observe(q),()=>Z.disconnect()},[E,O,B,P,o]),m.useEffect(()=>{if(t instanceof Ne&&t.isEnableTabWrap())return;const q=i.current;return q?.addEventListener("wheel",F,{passive:!1}),()=>{q?.removeEventListener("wheel",F)}}),{userControlledPositionRef:g,onScroll:A,onScrollPointerDown:D,hiddenTabs:l,onMouseWheel:W,isDockStickyButtons:f,isShowHiddenTabs:u}};function c1(e,t){return e.length===t.length&&e.every((r,o)=>r===t[o])}var pm=e=>{const{tabsetNode:t,controller:r}=e,o=m.useRef(null),n=m.useRef(null),i=m.useRef(null),a=m.useRef(null),l=m.useRef(null),c=m.useRef(null),u=m.useRef(null),d=m.useRef(null),[f,p]=m.useState(!1),g=m.useRef(null),x=r.getIcons();m.useEffect(()=>()=>g.current?.(),[]);const{userControlledPositionRef:w,onScroll:k,onScrollPointerDown:b,hiddenTabs:h,onMouseWheel:v,isDockStickyButtons:_,isShowHiddenTabs:y}=fm(r,t,_e.HORZ,a,i,n,r.getClassName(U.FLEXLAYOUT__TAB_BUTTON)),T=m.useCallback($=>{o.current=$,r.registerMeasurable(t,"tabset",$)},[r,t]),S=m.useCallback($=>{n.current=$,r.registerMeasurable(t,"tabstrip",$)},[r,t]),z=m.useCallback($=>{l.current=$,r.registerMeasurable(t,"tabsetcontent",$)},[r,t]),N=$=>{const pe=r.getShowOverflowMenu(),fe=h.map(he=>({index:he,node:t.getChildren()[he]}));if(pe!==void 0)pe(t,$,fe,B);else{const he=u.current;p(!0),g.current=um(he,t,fe,B,r,()=>{p(!1),g.current=null})}$.stopPropagation()},B=$=>{r.doAction(re.selectTab($.node.getId())),w.current=!1},P=$=>{r.getEditingTab()?$.preventDefault():t.isEnableDrag()?($.stopPropagation(),r.getDragDropManager().setDragNode($.nativeEvent,t)):$.preventDefault()},O=$=>{!ba($)&&!t.isActive()&&r.doAction(re.setActiveTabset(t.getId(),r.getLayoutId()))},E=$=>{ba($)&&r.auxMouseClick(t,$)},A=$=>{r.showContextMenu(t,$)},C=$=>{$.stopPropagation()},R=$=>{t.canMaximize()&&r.maximize(t),$.stopPropagation()},M=$=>{r.doAction(re.deleteTabset(t.getId())),$.stopPropagation()},D=$=>{r.doAction(re.deleteTab(t.getChildren()[0].getId())),$.stopPropagation()},W=$=>{q!==void 0&&r.doAction(re.popoutTab(q.getId(),"window")),$.stopPropagation()},F=$=>{q!==void 0&&r.doAction(re.popoutTab(q.getId(),"float")),$.stopPropagation()},ne=$=>{t.canMaximize()&&r.maximize(t)},X=r.getClassName,q=t.getSelectedNode(),Z=t.getPath(),Y=()=>{const $=[];let pe=!1;if(t.isEnableTabStrip()){const fe=t.isEnableSingleTabStretch()&&t.getChildren().length===1;for(let he=0;he{let $,pe=[],fe=[];const he={leading:$,stickyButtons:pe,buttons:fe,overflowPosition:void 0};r.customizeTabSet(t,he),$=he.leading,pe=he.stickyButtons,fe=he.buttons;const ot=t.isEnableSingleTabStretch()&&t.getChildren().length===1;let nt=ot&&t.getChildren()[0].isCloseable()||t.isCloseable();nt=nt&&t.isEnableCloseButton(),he.overflowPosition===void 0&&(he.overflowPosition=pe.length);let ye;if(pe.length>0&&(!t.isEnableTabWrap()&&(_||ot)?fe=[...pe,...fe]:ye=s.jsx("div",{ref:d,onPointerDown:C,onDragStart:me=>{me.preventDefault()},className:X(U.FLEXLAYOUT__TAB_TOOLBAR_STICKY_BUTTONS_CONTAINER),children:pe},"sticky_buttons_container")),!t.isEnableTabWrap()&&y){const me=r.i18nName(Me.Overflow_Menu_Tooltip);let we;if(typeof x.more=="function"){const qe=h.map(gt=>({index:gt,node:t.getChildren()[gt]}));we=x.more(t,qe)}else we=s.jsxs(s.Fragment,{children:[x.more,s.jsx("div",{className:X(U.FLEXLAYOUT__TAB_BUTTON_OVERFLOW_COUNT),children:h.length>0?h.length:""})]});fe.splice(Math.min(he.overflowPosition,fe.length),0,s.jsx("button",{tabIndex:0,"data-layout-path":Z+"/button/overflow","aria-haspopup":"menu","aria-expanded":f,"aria-label":me,ref:u,className:X(U.FLEXLAYOUT__TAB_TOOLBAR_BUTTON)+" "+X(U.FLEXLAYOUT__TAB_BUTTON_OVERFLOW),title:me,onClick:N,onPointerDown:C,children:we},"overflowbutton"))}if(q!==void 0&&!q.isPinned()){if(q.isEnablePopoutFloatIcon()){const me=r.i18nName(Me.Popout_Tab_Float);fe.push(s.jsx("button",{tabIndex:0,"data-layout-path":Z+"/button/popout-float",title:me,"aria-label":me,className:X(U.FLEXLAYOUT__TAB_TOOLBAR_BUTTON)+" "+X(U.FLEXLAYOUT__TAB_TOOLBAR_BUTTON_FLOAT),onClick:F,onPointerDown:C,children:typeof x.popoutFloat=="function"?x.popoutFloat(q):x.popoutFloat},"popout-float"))}if(r.isSupportsPopout()&&q.isAllowedInWindow()&&q.isEnablePopoutIcon()){const me=r.i18nName(Me.Popout_Tab);fe.push(s.jsx("button",{tabIndex:0,"data-layout-path":Z+"/button/popout",title:me,"aria-label":me,className:X(U.FLEXLAYOUT__TAB_TOOLBAR_BUTTON)+" "+X(U.FLEXLAYOUT__TAB_TOOLBAR_BUTTON_FLOAT),onClick:W,onPointerDown:C,children:typeof x.popout=="function"?x.popout(q):x.popout},"popout"))}}if(t.canMaximize()){const me=r.i18nName(Me.Restore),we=r.i18nName(Me.Maximize);fe.push(s.jsx("button",{tabIndex:0,"data-layout-path":Z+"/button/max",title:t.isMaximized()?me:we,"aria-label":t.isMaximized()?me:we,"aria-pressed":t.isMaximized(),className:X(U.FLEXLAYOUT__TAB_TOOLBAR_BUTTON)+" "+X(U.FLEXLAYOUT__TAB_TOOLBAR_BUTTON_+(t.isMaximized()?"max":"min")),onClick:R,onPointerDown:C,children:t.isMaximized()?typeof x.restore=="function"?x.restore(t):x.restore:typeof x.maximize=="function"?x.maximize(t):x.maximize},"max"))}if(!t.isMaximized()&&nt){const me=ot?r.i18nName(Me.Close_Tab):r.i18nName(Me.Close_Tabset);fe.push(s.jsx("button",{tabIndex:0,"data-layout-path":Z+"/button/close",title:me,"aria-label":me,className:X(U.FLEXLAYOUT__TAB_TOOLBAR_BUTTON)+" "+X(U.FLEXLAYOUT__TAB_TOOLBAR_BUTTON_CLOSE),onClick:ot?D:M,onPointerDown:C,children:typeof x.closeTabset=="function"?x.closeTabset(t):x.closeTabset},"close"))}if(t.isActive()&&t.isEnableActiveIcon()){const me=r.i18nName(Me.Active_Tabset);fe.push(s.jsx("div",{"data-layout-path":Z+"/button/active",title:me,"aria-hidden":"true",className:X(U.FLEXLAYOUT__TAB_TOOLBAR_ICON),children:typeof x.activeTabset=="function"?x.activeTabset(t):x.activeTabset},"active"))}const We=s.jsx("div",{ref:c,className:X(U.FLEXLAYOUT__TAB_TOOLBAR),onPointerDown:C,onDragStart:me=>{me.preventDefault()},children:fe},"buttonbar");return{leading:$,buttonbar:We,stickyBar:ye}},oe=($,pe,fe,he)=>{let ot;const nt=r.getKeyMap(),ye=[Co(nt.focusNextTabset),Co(nt.focusPreviousTabset)].filter(Boolean).join(" ")||void 0,We=r.getEditingTab()?.getParent()===t,me=We?void 0:"tablist";let we=X(U.FLEXLAYOUT__TABSET_TABBAR_OUTER);t.getClassNameTabStrip()!==void 0&&(we+=" "+t.getClassNameTabStrip()),we+=" "+U.FLEXLAYOUT__TABSET_TABBAR_OUTER_+t.getTabLocation(),t.isActive()&&(we+=" "+X(U.FLEXLAYOUT__TABSET_SELECTED)),t.isMaximized()&&(we+=" "+X(U.FLEXLAYOUT__TABSET_MAXIMIZED));const qe=t.isEnableSingleTabStretch()&&t.getChildren().length===1;if(qe){const Sr=t.getChildren()[0];Sr.getTabSetClassName()!==void 0&&(we+=" "+Sr.getTabSetClassName())}let gt;if(pe&&(gt=s.jsx("div",{className:X(U.FLEXLAYOUT__TABSET_LEADING),children:pe})),t.isEnableTabWrap())t.isEnableTabStrip()&&(ot=s.jsxs("div",{className:we,style:{flexWrap:"wrap",gap:"1px",marginTop:"2px"},ref:S,"data-layout-path":Z+"/tabstrip",onPointerDown:O,onDoubleClick:ne,onContextMenu:A,onClick:E,onAuxClick:E,draggable:!0,onDragStart:P,children:[gt,s.jsx("div",{role:me,"aria-orientation":We?void 0:"horizontal","aria-label":We?void 0:t.getName(),"aria-keyshortcuts":We?void 0:ye,style:{display:"contents"},children:$}),he,s.jsx("div",{style:{flexGrow:1,display:"flex",justifyContent:"flex-end"},children:fe})]}));else if(t.isEnableTabStrip()){let Sr;t.isEnableTabScrollbar()&&(Sr=s.jsx("div",{ref:i,"aria-hidden":"true",className:X(U.FLEXLAYOUT__MINI_SCROLLBAR),onPointerDown:b})),ot=s.jsxs("div",{className:we,ref:S,"data-layout-path":Z+"/tabstrip",onPointerDown:O,onDoubleClick:ne,onContextMenu:A,onClick:E,onAuxClick:E,draggable:!0,onWheel:v,onDragStart:P,children:[gt,s.jsxs("div",{className:X(U.FLEXLAYOUT__MINI_SCROLLBAR_CONTAINER),children:[s.jsxs("div",{ref:a,className:X(U.FLEXLAYOUT__TABSET_TABBAR_INNER)+" "+X(U.FLEXLAYOUT__TABSET_TABBAR_INNER_+t.getTabLocation()),style:{overflowX:"auto",overflowY:"hidden"},onScroll:k,children:[s.jsx("div",{style:{width:qe?"100%":"none"},role:me,"aria-orientation":We?void 0:"horizontal","aria-label":We?void 0:t.getName(),"aria-keyshortcuts":We?void 0:ye,className:X(U.FLEXLAYOUT__TABSET_TABBAR_INNER_TAB_CONTAINER)+" "+X(U.FLEXLAYOUT__TABSET_TABBAR_INNER_TAB_CONTAINER_+t.getTabLocation()),children:$}),he]}),Sr]}),fe]})}return ot},le=$=>{let pe;if(t.getChildren().length===0){const he=r.getTabSetPlaceHolderCallback();he&&(pe=he(t))}let fe=s.jsx("div",{ref:z,className:X(U.FLEXLAYOUT__TABSET_CONTENT),children:pe});return t.getTabLocation()==="top"?fe=s.jsxs(s.Fragment,{children:[$,fe]}):fe=s.jsxs(s.Fragment,{children:[fe,$]}),fe},Ce=Y(),{leading:Ee,buttonbar:ve,stickyBar:It}=Q(),G=le(oe(Ce,Ee,ve,It)),ue={flexGrow:Math.max(1,t.getWeight()*1e3),minWidth:t.getMinWidth(),minHeight:t.getMinHeight(),maxWidth:t.getMaxWidth(),maxHeight:t.getMaxHeight()};t.getModel().getMaximizedTabset(r.getLayoutId())!==void 0&&!t.isMaximized()&&(ue.display="none");const se=s.jsx("div",{ref:T,className:X(U.FLEXLAYOUT__TABSET_CONTAINER),style:ue,children:s.jsx("div",{className:X(U.FLEXLAYOUT__TABSET),"data-layout-path":Z,children:G})});return t.isMaximized()&&r.getMainElement()?Ur.createPortal(s.jsx("div",{style:{position:"absolute",display:"flex",top:0,left:0,bottom:0,right:0},children:se}),r.getMainElement()):se};pm.displayName="TabSet";var Yi=e=>{const{controller:t,node:r,index:o,horizontal:n}=e,i=m.useRef(null),a=m.useRef(null),l=m.useRef([]),c=m.useRef(void 0),u=m.useRef(void 0),d=m.useRef(0),f=m.useRef(0),p=m.useRef({initialSizes:[],sum:0,startPosition:0}),g=m.useCallback(O=>{O.preventDefault(),O.stopImmediatePropagation()},[]);m.useEffect(()=>{const O=i.current,E=a.current;return O?.addEventListener("touchstart",g,{passive:!1}),E?.addEventListener("touchstart",g,{passive:!1}),()=>{O?.removeEventListener("touchstart",g),E?.removeEventListener("touchstart",g)}},[g]);const x=O=>{O.stopPropagation(),r instanceof Ue&&(p.current=r.getSplitterInitials(o)),Tl(!1,t.getCurrentDocument()),ls(O.currentTarget.ownerDocument,O,b,h,k),l.current=r instanceof Ke?r.getSplitterBounds(!0):r.getSplitterBounds(o);const E=t.getRootDiv();c.current=t.getCurrentDocument().createElement("div"),c.current.style.flexDirection=n?"row":"column",c.current.className=t.getClassName(U.FLEXLAYOUT__SPLITTER_DRAG)+(r instanceof Ke?" "+t.getClassName(U.FLEXLAYOUT__SPLITTER_BORDER):""),c.current.style.cursor=r.getOrientation()===_e.VERT?"ns-resize":"ew-resize",u.current=t.getCurrentDocument().createElement("div"),u.current.className=y(U.FLEXLAYOUT__SPLITTER_HANDLE)+" "+y(n?U.FLEXLAYOUT__SPLITTER_HANDLE_HORZ:U.FLEXLAYOUT__SPLITTER_HANDLE_VERT),c.current.appendChild(u.current);const A=i.current.getBoundingClientRect(),C=new ge(A.x-t.getDomRect().x,A.y-t.getDomRect().y,A.width,A.height);d.current=O.clientX-A.x,f.current=O.clientY-A.y,C.positionElement(c.current),E&&E.appendChild(c.current)},w=O=>{if(ga(O))return;let E=0;if(n?(O.key==="ArrowLeft"&&(E=-10),O.key==="ArrowRight"&&(E=10)):(O.key==="ArrowUp"&&(E=-10),O.key==="ArrowDown"&&(E=10)),E!==0)if(O.preventDefault(),r instanceof Ke){const A=r.getLocation(),C=A===ee.BOTTOM||A===ee.RIGHT?-E:E,R=Math.max(r.getMinSize(),Math.min(r.getMaxSize(),r.getSize()+C));t.doAction(re.adjustBorderSplit(r.getId(),R))}else{const A=r.getSplitterInitials(o);if(A.sum<=0)return;const C=r.getSplitterBounds(o),R=Math.max(C[0],Math.min(C[1],A.startPosition+E)),M=r.calculateSplit(o,R,A.initialSizes,A.sum,A.startPosition);t.doAction(re.adjustWeights(r.getId(),M))}},k=()=>{const O=t.getRootDiv();O&&c.current&&O.removeChild(c.current),c.current=void 0,Tl(!0,t.getCurrentDocument())},b=(O,E)=>{if(c.current){const A=t.getDomRect();if(!A)return;r.getOrientation()===_e.VERT?c.current.style.top=_(E-A.y-f.current)+"px":c.current.style.left=_(O-A.x-d.current)+"px",t.isRealtimeResize()&&v(!0)}},h=()=>{if(c.current){v(!1);const O=t.getRootDiv();O&&c.current&&O.removeChild(c.current),c.current=void 0}Tl(!0,t.getCurrentDocument())},v=O=>{(()=>{if(c.current){let A;if(r.getOrientation()===_e.VERT?A=c.current.offsetTop:A=c.current.offsetLeft,r instanceof Ke){const C=r.calculateSplit(r,A);t.doAction(re.adjustBorderSplit(r.getId(),C).setAdjusting(O))}else{const C=p.current;if(C.sum<=0)return;const R=r.calculateSplit(o,A,C.initialSizes,C.sum,C.startPosition);t.doAction(re.adjustWeights(r.getId(),R).setAdjusting(O))}}})()},_=O=>{const E=l.current;let A=O;return OE[1]&&(A=E[1]),A},y=t.getClassName,T={cursor:n?"ew-resize":"ns-resize",flexDirection:n?"column":"row"};let S=y(U.FLEXLAYOUT__SPLITTER)+" "+y(U.FLEXLAYOUT__SPLITTER_+r.getOrientation().getName());r instanceof Ke?S+=" "+y(U.FLEXLAYOUT__SPLITTER_BORDER):r.getModel().getMaximizedTabset(t.getLayoutId())!==void 0&&(T.display="none"),Xv()||(T["--splitter-active-size"]="30px");let z,N,B,P;if(r instanceof Ue){const O=r.getRect(),E=r.getChildren()[o-1],A=n?O.width:O.height;if(E&&A>0){const C=E.getRect();z=Math.round((n?C.getRight()-O.x:C.getBottom()-O.y)/A*100),N=0,B=100,P=z+"%"}}else z=Math.round(r.getSize()),N=Math.round(r.getMinSize()),B=Math.round(r.getMaxSize()),P=z+"px";return s.jsx("div",{className:S,style:T,ref:i,role:"separator","aria-label":t.i18nName(Me.Splitter),"aria-orientation":n?"vertical":"horizontal","aria-valuenow":z,"aria-valuemin":N,"aria-valuemax":B,"aria-valuetext":P,tabIndex:0,onKeyDown:w,"data-layout-path":r.getPath()+"/s"+(o-1),onPointerDown:x,children:s.jsx("div",{className:y(U.FLEXLAYOUT__SPLITTER_HANDLE)+" "+y(n?U.FLEXLAYOUT__SPLITTER_HANDLE_HORZ:U.FLEXLAYOUT__SPLITTER_HANDLE_VERT)})})};Yi.displayName="Splitter";var Tf=e=>{const{controller:t,rowNode:r}=e,o=m.useRef(null),n=r.getOrientation()===_e.HORZ,i=m.useCallback(u=>{o.current=u,t.registerMeasurable(r,"row",u)},[t,r]),a=[];let l=0;for(const u of r.getChildren())l>0&&a.push(s.jsx(Yi,{controller:t,node:r,index:l,horizontal:n},"splitter"+l)),u instanceof Ue?a.push(s.jsx(Tf,{controller:t,rowNode:u},u.getId())):u instanceof Ne&&a.push(s.jsx(pm,{controller:t,tabsetNode:u},u.getId())),l++;const c={flexGrow:Math.max(1,r.getWeight()*1e3),minWidth:r.getMinWidth(),minHeight:r.getMinHeight(),maxWidth:r.getMaxWidth(),maxHeight:r.getMaxHeight()};return n?c.flexDirection="row":c.flexDirection="column",s.jsx("div",{ref:i,className:t.getClassName(U.FLEXLAYOUT__ROW),style:c,children:a})};Tf.displayName="Row";var hm=e=>{const{controller:t,selected:r,tabNode:o}=e,n=m.useRef(null),i=m.useRef(!0),a=m.useCallback(()=>{const g=o.getParent();g instanceof Ne&&(g.isActive()||t.doAction(re.setActiveTabset(g.getId(),t.getLayoutId())))},[o,t]),l=o.getParent(),c=t.getKeyMap().focusTabToggle,u=g=>{if(eo(g,c)){const x=g.currentTarget.ownerDocument.getElementById(Lt("flexlayout-tabbutton-",o.getId()));x&&(x.focus(),g.preventDefault(),g.stopPropagation())}};m.useLayoutEffect(()=>{const g=o.getMoveableElement(),x=n.current.ownerDocument,w=g.ownerDocument!==x;w&&x.adoptNode(g),g.parentElement!==n.current&&n.current.appendChild(g),w&&t.redrawLayoutAndTabContent();const k=()=>{o.saveScrollPosition()};g.addEventListener("scroll",k);const b=n.current;return b&&b.addEventListener("pointerdown",a),()=>{b&&b.removeEventListener("pointerdown",a),g.removeEventListener("scroll",k),g.isConnected||(t.getModel().getNodeById(o.getId())&&(o.isEnableWindowReMount()||t.getMainController()?.getMoveablesHome()?.appendChild(g)),o.setVisible(!1))}},[o,t,a]),m.useEffect(()=>{o.isSelected()&&i.current&&(o.restoreScrollPosition(),i.current=!1)}),m.useLayoutEffect(()=>(t.registerTabPanel(o,n.current),()=>{t.registerTabPanel(o,null)}),[t,o]);const d=t.getClassName;let f=null;if(r&&document.hidden&&o.isEnablePopoutOverlay()){const g={};l.getContentRect().styleWithPosition(g);let x=d(U.FLEXLAYOUT__TAB_OVERLAY);l instanceof Ke&&l.isOverlay()&&(x+=" "+d(U.FLEXLAYOUT__TAB_OVERLAY_RAISED)),f=s.jsx("div",{style:g,className:x})}let p=d(U.FLEXLAYOUT__TAB);return l instanceof Ke&&(p+=" "+d(U.FLEXLAYOUT__TAB_BORDER),p+=" "+d(U.FLEXLAYOUT__TAB_BORDER_+l.getLocation().getName()),l.isOverlay()&&(p+=" "+d(U.FLEXLAYOUT__TAB_BORDER_OVERLAY))),o.getContentClassName()!==void 0&&(p+=" "+o.getContentClassName()),s.jsxs(s.Fragment,{children:[f,s.jsx("div",{ref:n,id:Lt("flexlayout-tab-",o.getId()),role:"tabpanel","aria-labelledby":Lt("flexlayout-tabbutton-",o.getId()),"aria-keyshortcuts":Co(c),tabIndex:-1,onKeyDown:c?u:void 0,className:p,"data-layout-path":o.getPath()})]})};hm.displayName="Tab";var u1=class extends m.Component{constructor(t){super(t);I(this,"retry",()=>{this.setState({hasError:!1})});this.state={hasError:!1}}static getDerivedStateFromError(t){return{hasError:!0}}componentDidCatch(t,r){console.debug(t),console.debug(r)}render(){return this.state.hasError?s.jsx("div",{className:U.FLEXLAYOUT__ERROR_BOUNDARY_CONTAINER,children:s.jsx("div",{role:"alert",className:U.FLEXLAYOUT__ERROR_BOUNDARY_CONTENT,children:s.jsxs("div",{style:{display:"flex",flexDirection:"column",alignItems:"center"},children:[this.props.message,s.jsx("p",{children:s.jsx("button",{tabIndex:0,onClick:this.retry,children:this.props.retryText})})]})})}):this.props.children}},gm=m.memo(({controller:e,tabNode:t})=>{gm.displayName="TabContentRenderer";let r;if(t.getComponent())r=e.getFactory()(t);else if(t.getSubLayoutId()){const o=t.getModel().getLayouts().get(t.getSubLayoutId());r=s.jsxs("div",{className:e.getClassName(U.FLEXLAYOUT__TAB_LAYOUT_CONTAINER),children:[s.jsx(ma,{...e.getProps(),layoutId:t.getSubLayoutId(),path:t.getPath()+o.getPath(),mainLayoutController:e.getMainController()}),";"]})}return s.jsx(u1,{message:e.i18nName(Me.Error_rendering_component),retryText:e.i18nName(Me.Error_rendering_component_retry),children:r})},d1);function d1(e,t){return!(t.visible&&(e.windowId!==t.windowId||e.fullRedrawRevision!==t.fullRedrawRevision||e.parentRedrawRevision!==t.parentRedrawRevision||e.tabNode!==t.tabNode||t.tabNode.getSubLayoutId()!==void 0))}var Te,f1=(Te=class{constructor(t){I(this,"_controller");I(this,"_dragEnterCount",0);I(this,"_dragging",!1);I(this,"_active",!1);I(this,"_dropInfo");I(this,"_outlineDiv");I(this,"_mainController");I(this,"setDragNode",(t,r)=>{if(Te.dragState=new il(this._controller.getMainController(),"internal",r,void 0,void 0),t.dataTransfer.setData("text/plain","--flexlayout--"),t.dataTransfer.effectAllowed="copyMove",t.dataTransfer.dropEffect="move",this._dragEnterCount=0,this._controller.getModel().sortLayouts(),r instanceof Ne){let o=!1,n=this._controller.i18nName(Me.Move_Tabset);if(r.getChildren().length>0&&(n=this._controller.i18nName(Me.Move_Tabs).replace("?",String(r.getChildren().length))),this._controller.getProps().onRenderDragRect){const i=this._controller.getProps().onRenderDragRect(n,r,void 0);i&&(this.setDragComponent(t,i,10,10),o=!0)}o||this.setDragComponent(t,n,10,10)}else{const o=t.target;if(o&&typeof o.getBoundingClientRect=="function"){const n=o.getBoundingClientRect(),i=t.clientX-n.left,a=t.clientY-n.top,l=r?.getParent(),c=l instanceof Ke&&l.getOrientation()===_e.HORZ,u=c?10:i,d=c?10:a;let f=!1;if(this._controller.getProps().onRenderDragRect){const p=s.jsx(va,{controller:this._controller,tabNode:r},r.getId()),g=this._controller.getProps().onRenderDragRect(p,r,void 0);g&&(this.setDragComponent(t,g,u,d),f=!0)}f||(o1()?this.setDragComponent(t,s.jsx(va,{tabNode:r,controller:this._controller}),u,d):t.dataTransfer.setDragImage(r.getTabStamp(),u,d))}}});I(this,"onDragEnterRaw",t=>{this._dragEnterCount++,this.updateActive(t)});I(this,"onDragLeaveRaw",t=>{this._dragEnterCount--,this.updateActive(t)});I(this,"onDragEnter",t=>{if(!Te.dragState&&this._controller.getProps().onExternalDrag){const r=this._controller.getProps().onExternalDrag(t);if(r){const o=Le.fromJson(r.json,this._controller.getModel(),!1);Te.dragState=new il(this._controller.getMainController(),"external",o,r.json,r.onDrop)}}if(this._mainController===Te.dragState?.mainLayoutController&&!(Te.dragState?.dockFloatToMain&&!this.isDockTarget())&&Te.dragState){t.preventDefault(),this._dropInfo=void 0;const r=this._controller.getRootDiv(),o=this._controller.getCurrentDocument();this._outlineDiv=o.createElement("div"),this._outlineDiv.className=this._controller.getClassName(U.FLEXLAYOUT__OUTLINE_RECT),this._outlineDiv.style.visibility="hidden";const n=this._controller.getTabDragSpeed();this._outlineDiv.style.transition=`top ${n}s, left ${n}s, width ${n}s, height ${n}s`,r.appendChild(this._outlineDiv),this._dragging=!0,this._controller.showOverlayOnAllWindows(!0),this._controller.getModel().getMaximizedTabset(this._controller.getLayoutId())===void 0&&this._controller.setState({showEdges:this._controller.getModel().isEnableEdgeDock()});const i=this._controller.getRootDiv().getBoundingClientRect();new ge(t.clientX-i.left,t.clientY-i.top,1,1).positionElement(this._outlineDiv)}});I(this,"onDragOver",t=>{if(this._mainController===Te.dragState?.mainLayoutController&&!(Te.dragState?.dockFloatToMain&&!this.isDockTarget())&&this._active){if(Te.dragState?.dockFloatToMain){const i=t.target;if(i&&Te.dragState.sourceFloatElement?.contains(i)){this._dropInfo=void 0;return}}const r=this._controller.getRootDiv()?.getBoundingClientRect(),o={x:t.clientX-(r?.left??0),y:t.clientY-(r?.top??0)};Te.dragState.dockFloatToMain||this._controller.checkForBorderToShow(o.x,o.y);const n=this._controller.getModel().findDropTargetNode(this._controller.getLayoutId(),Te.dragState.dragNode,o.x,o.y,this.isExcludeCenter());if(n){if(Te.dragState.dockFloatToMain&&(n.location===ee.CENTER||!(n.node instanceof Ne)&&!(n.node instanceof Ue)))return;t.preventDefault(),this._dropInfo=n,this._outlineDiv&&(this._outlineDiv.className=this._controller.getClassName(n.className),n.rect.positionElement(this._outlineDiv),this._outlineDiv.style.visibility="visible")}}});I(this,"onDragLeave",t=>{if(this._mainController===Te.dragState?.mainLayoutController&&(this.clearDragLocalVisuals(),this._controller.isMainLayout())){let r=!1;for(const[,o]of this._controller.getModel().getLayouts())if(o.getController()&&o.getController().getDragDropManager().isDragging()){r=!0;break}r===!1&&this.clearDragMain()}});I(this,"onDrop",t=>{if(this._mainController===Te.dragState?.mainLayoutController&&!(Te.dragState?.dockFloatToMain&&!this.isDockTarget())){if(this._active){t.preventDefault();const r=Te.dragState;if(this._dropInfo&&r.dockFloatToMain){const o=t.target;o&&r.sourceFloatElement?.contains(o)&&(this._dropInfo=void 0)}if(this._dropInfo)if(r.dragJson!==void 0){const o=this._controller.doAction(re.addTab(r.dragJson,this._dropInfo.node.getId(),this._dropInfo.location,this._dropInfo.index));r.fnNewNodeDropped!==void 0&&r.fnNewNodeDropped(o,t)}else r.dragNode!==void 0&&(r.dockFloatToMain?this._controller.doAction(re.dockFloatToLayout(r.floatLayoutId,this._dropInfo.node.getId(),this._dropInfo.location,this._dropInfo.index)):this._controller.doAction(re.moveNode(r.dragNode.getId(),this._dropInfo.node.getId(),this._dropInfo.location,this._dropInfo.index)));this.clearDragMain(),Te.dragState=void 0}this._dragEnterCount=0}});this._controller=t,this._mainController=t.getMainController()}isDockTarget(){return this._controller.getLayout().getLayoutId()!==Te.dragState?.floatLayoutId}isExcludeCenter(){if(Te.dragState?.dockFloatToMain)return!0;const t=Te.dragState?.dragNode;return t instanceof Ne?!t.isEnableClose()||t.getPinnedRunLength()>0:!1}addTabWithDragAndDrop(t,r,o){const n=Le.fromJson(r,this._controller.getModel(),!1);Te.dragState=new il(this._controller.getMainController(),"add",n,r,o)}onDragEnded(){this.clearDragMain(),Te.dragState=void 0}moveTabWithDragAndDrop(t,r){this.setDragNode(t,r)}startDockLayoutDrag(t,r,o){const n=r.getRootRow();Te.dragState=new il(this._controller.getMainController(),"float",n,void 0,void 0,!0,r.getLayoutId(),o),t.dataTransfer.setData("text/plain","--flexlayout--"),t.dataTransfer.effectAllowed="copyMove",t.dataTransfer.dropEffect="move",this._dragEnterCount=0,this._controller.getModel().sortLayouts();let i=0;r.getRootRow()?.forEachNode(c=>{c instanceof Le&&i++},0);const a=this._controller.i18nName(Me.Dock_Float_Tabs).replace("?",String(i));let l=!1;if(this._controller.getProps().onRenderDragRect){const c=this._controller.getProps().onRenderDragRect(a,n,void 0);c&&(this.setDragComponent(t,c,10,10),l=!0)}l||this.setDragComponent(t,a,10,10)}setDragComponent(t,r,o,n){const i=s.jsx("div",{style:{position:"unset"},className:this._controller.getClassName(U.FLEXLAYOUT__LAYOUT)+" "+this._controller.getClassName(U.FLEXLAYOUT__DRAG_RECT),children:r}),a=this._controller.getCurrentDocument(),l=a.createElement("div");l.setAttribute("data-layout-path","/drag-rectangle"),l.style.position="absolute",l.style.left="-10000px",l.style.top="-10000px",a.body.appendChild(l);const c=ui(l);Ur.flushSync(()=>c.render(i)),t.dataTransfer.setDragImage(l,o,n),setTimeout(()=>{c.unmount(),a.body.removeChild(l)},0)}updateActive(t){const r=Array.from(this._controller.getModel().getLayouts().values()),o=Te.dragState?.dockFloatToMain===!0;let n,i;for(let a=r.length-1;a>=0;a--){const l=r[a];if(o&&l.getLayoutId()===Te.dragState?.floatLayoutId)continue;const c=l.getController()?.getDragDropManager();c&&c.getDragEnterCount()>0&&(l.getType()==="tab"?i=l:!n&&!i&&(n=l))}if(i){const a=Kv(i);(n===a||!n)&&(n=i)}n&&n.getController().getDragDropManager().setActive(!0,t);for(const a of r)a!==n&&a.getController()?.getDragDropManager().setActive(!1,t)}setActive(t,r){this._active!==t&&(this._active=t,this._active?this.onDragEnter(r):this.onDragLeave(r))}clearDragMain(){this._controller.showOverlayOnAllWindows(!1);for(const[,t]of this._controller.getModel().getLayouts())t.getController()&&t.getController().getDragDropManager().clearDragLocal()}clearDragLocal(){this._dragEnterCount=0,this._active=!1,this.clearDragLocalVisuals()}clearDragLocalVisuals(){this._controller.setState({showEdges:!1}),this._dragging=!1,this._outlineDiv&&(this._controller.getRootDiv().removeChild(this._outlineDiv),this._outlineDiv=void 0)}getDragEnterCount(){return this._dragEnterCount}isDragging(){return this._dragging}},I(Te,"dragState"),Te),il=class{constructor(e,t,r,o,n,i=!1,a=void 0,l=void 0){I(this,"mainLayoutController");I(this,"dragSource");I(this,"dragNode");I(this,"dragJson");I(this,"fnNewNodeDropped");I(this,"dockFloatToMain");I(this,"floatLayoutId");I(this,"sourceFloatElement");this.mainLayoutController=e,this.dragSource=t,this.dragNode=r,this.dragJson=o,this.fnNewNodeDropped=n,this.dockFloatToMain=i,this.floatLayoutId=a,this.sourceFloatElement=l}},bm=({controller:e})=>{const t=[],r=e.getIcons().edgeArrow;if(e.getState().showEdges&&e.getModel().isEnableEdgeDockIndicators()){const o=e.getModel().getRootRow(e.getLayoutId()).getRect(),n=100,i=10,a=100/2,l=e.getClassName(U.FLEXLAYOUT__EDGE_RECT),c=50;t.push(s.jsx("div",{"aria-hidden":"true",style:{top:0,left:o.width/2-a,width:n,height:i,borderBottomLeftRadius:c,borderBottomRightRadius:c},className:l+" "+e.getClassName(U.FLEXLAYOUT__EDGE_RECT_TOP),children:s.jsx("div",{style:{transform:"rotate(180deg)"},children:r})},"North")),t.push(s.jsx("div",{"aria-hidden":"true",style:{top:o.height/2-a,left:0,width:i,height:n,borderTopRightRadius:c,borderBottomRightRadius:c},className:l+" "+e.getClassName(U.FLEXLAYOUT__EDGE_RECT_LEFT),children:s.jsx("div",{style:{transform:"rotate(90deg)"},children:r})},"West")),t.push(s.jsx("div",{"aria-hidden":"true",style:{top:o.height-i,left:o.width/2-a,width:n,height:i,borderTopLeftRadius:c,borderTopRightRadius:c},className:l+" "+e.getClassName(U.FLEXLAYOUT__EDGE_RECT_BOTTOM),children:s.jsx("div",{children:r})},"South")),t.push(s.jsx("div",{"aria-hidden":"true",style:{top:o.height/2-a,left:o.width-i,width:i,height:n,borderTopLeftRadius:c,borderBottomLeftRadius:c},className:l+" "+e.getClassName(U.FLEXLAYOUT__EDGE_RECT_RIGHT),children:s.jsx("div",{style:{transform:"rotate(-90deg)"},children:r})},"East"))}return s.jsx(s.Fragment,{children:t})};bm.displayName="EdgeIndicators";var p1=2e3,h1=750,vm=e=>{const{title:t,controller:r,layout:o,url:n,onCloseLayout:i,children:a}=e,l=m.useRef(null),[c,u]=m.useState(void 0),[d,f]=m.useState(void 0),[p,g]=m.useState(void 0),x=m.useMemo(()=>new Map,[]),w=m.useRef(!1),k=m.useRef(null),b=m.useRef(null),h=m.useRef(new Map);if(m.useLayoutEffect(()=>{!w.current&&c&&(w.current=!0,r.redrawLayout(),m1(x))},[c,r,x]),m.useLayoutEffect(()=>{const v=()=>{if(l.current){const _=l.current;l.current=null,_.close()}};if(!l.current){const _=o.getLayoutId(),y=o.getRect();l.current=window.open(n,_,`left=${y.x},top=${y.y},width=${y.width},height=${y.height}`),l.current?(window.addEventListener("beforeunload",v),l.current.addEventListener("load",()=>{if(l.current){l.current.focus(),l.current.resizeTo(y.width,y.height),l.current.moveTo(y.x,y.y);const T=l.current;T.resizeBy(y.width-T.outerWidth,y.height-T.outerHeight),T.moveBy(y.x-T.screenLeft,y.y-T.screenTop);const S=l.current.document;f(l.current),g(S),S.title=t,document.documentElement.lang&&(S.documentElement.lang=document.documentElement.lang),document.documentElement.dir&&(S.documentElement.dir=document.documentElement.dir);const z=S.createElement("div");z.className=U.FLEXLAYOUT__FLOATING_WINDOW_CONTENT,S.body.appendChild(z),r.getProps().onPopoutOpen?.(o,l.current,S),v1(S,x).then(()=>{u(z)}),k.current=new MutationObserver(N=>g1(N,S,x)),k.current.observe(document.head,{childList:!0,subtree:!0,characterData:!0}),b.current=S.defaultView?.setInterval(()=>{x1(x,h.current)},h1)??null,l.current.addEventListener("beforeunload",()=>{l.current&&(r.getProps().onPopoutClose?.(o,l.current,S),i(o),l.current=null,k.current?.disconnect(),k.current=null,b.current!=null&&(S.defaultView?.clearInterval(b.current),b.current=null))})}})):(console.warn(`Unable to open window ${n}`),i(o))}return()=>{window.removeEventListener("beforeunload",v),l.current?.close(),l.current=null,k.current?.disconnect(),k.current=null,b.current!=null&&(b.current=null)}},[]),c!==void 0){const v=r.getProps().renderPopoutContent;let _=a;return v&&p&&(_=v({children:a,layout:o,popoutWindow:d??window,popoutDocument:p})),Ur.createPortal(_,c)}else return null};function g1(e,t,r){for(const o of e)if(o.type==="childList"&&o.target===document.head){for(const n of o.addedNodes)(n instanceof HTMLLinkElement||n instanceof HTMLStyleElement)&&mm(t,n,r);for(const n of o.removedNodes)if(n instanceof HTMLLinkElement||n instanceof HTMLStyleElement){const i=r.get(n);i&&(i.remove(),r.delete(n))}}else{const n=b1(o.target),i=n&&r.get(n);n&&i&&qs(n,i)}}function b1(e){let t=e instanceof HTMLElement?e:e.parentNode;for(;t&&!(t instanceof HTMLStyleElement);)t=t.parentNode;return t instanceof HTMLStyleElement?t:void 0}function v1(e,t){const r=[],o=document.querySelectorAll('style, link[rel="stylesheet"]');for(const n of o)mm(e,n,t,r);return Promise.all(r)}function mm(e,t,r,o){if(t instanceof HTMLLinkElement){const n=t.cloneNode(!0);e.head.appendChild(n),r.set(t,n),o&&o.push(new Promise(i=>{let a=!1;const l=c=>{a||(a=!0,i(c))};n.onload=()=>l(!0),n.onerror=()=>l(!1),e.defaultView?.setTimeout(()=>l(!1),p1)}))}else if(t instanceof HTMLStyleElement)try{const n=t.cloneNode(!0);e.head.appendChild(n),qs(t,n),r.set(t,n)}catch{}}function qs(e,t){const r=e.textContent??"";if(r.trim()!=="")t.textContent=r;else try{t.textContent="";const o=e.sheet?.cssRules;if(o)for(const n of o)t.sheet.insertRule(n.cssText,t.sheet.cssRules.length)}catch{}}function m1(e){for(const[t,r]of e)t instanceof HTMLStyleElement&&qs(t,r)}function x1(e,t){for(const[r,o]of e){if(!(r instanceof HTMLStyleElement)||(r.textContent??"").trim()!=="")continue;let n=0;try{n=r.sheet?.cssRules.length??0}catch{}n!==t.get(r)&&(t.set(r,n),qs(r,o))}}vm.displayName="PopoutWindow";var co=10,Nr=-4,ir=8,kn=12,kh=12,y1=150,_1=25,w1=e=>{const{controller:t,layout:r,children:o}=e,[n,i]=m.useState(r.getRect()),a=m.useRef(ge.empty()),l=t.getClassName,c=m.useRef(null),u=m.useRef(null),d=m.useRef(null),f=m.useRef(null),p=m.useRef(null),g=m.useRef(null),x=m.useRef(null),w=m.useRef(null),k=m.useRef(null),b=m.useRef(null),h=m.useRef(!1),v=m.useRef(void 0);m.useEffect(()=>{a.current=n},[n]),m.useEffect(()=>{requestAnimationFrame(()=>{i(r.getRect())})},[r]);const _=m.useCallback(C=>{const R=t.getCurrentWindow()??window,M=ge.fromDomRect(t.getRootDiv().getBoundingClientRect());let D;if(t.getProps().constrainFloatPanels)D=new ge(0,0,M.width,M.height);else{const F=n1(R),ne=Math.max(F.fullWidth,R.innerWidth),X=Math.max(F.fullHeight,R.innerHeight);D=new ge(-M.x,-M.y,ne,X)}const W=C.clone();return W.clamp(D),W},[t]),y=m.useCallback(C=>{C.preventDefault(),C.stopImmediatePropagation()},[]);m.useEffect(()=>{const C=[u,d,f,p,g,x,w,k,b].map(R=>R.current).filter(R=>R!==null);return C.forEach(R=>R.addEventListener("touchstart",y,{passive:!1})),()=>{C.forEach(R=>R.removeEventListener("touchstart",y))}},[y]);const T=m.useRef(!1);m.useLayoutEffect(()=>{if(!T.current){T.current=!0;const C=_(n);C.equals(n)||(i(C),r.setRect(C))}},[_,n,r]),m.useEffect(()=>{const C=()=>{const W=[...t.getModel().getLayouts()],F=W[W.length-1][1];r!==F&&(h.current=!0)},R=t.getCurrentWindow()??window,M=()=>{h.current&&(v.current=R.setTimeout(()=>{v.current=void 0,t.moveWindowToFront(r.getLayoutId())},10),h.current=!1)},D=c.current;return D&&(D.addEventListener("pointerdown",C,{capture:!0}),D.addEventListener("pointerup",M)),()=>{D&&(D.removeEventListener("pointerdown",C,{capture:!0}),D.removeEventListener("pointerup",M)),v.current!==void 0&&(R.clearTimeout(v.current),v.current=void 0)}},[t,r]);const S=C=>{C.stopPropagation();const R={x:C.clientX-n.x,y:C.clientY-n.y};t.showOverlayOnAllWindows(!0),ls(t.getCurrentDocument()??document,C,(M,D)=>{h.current&&(t.moveWindowToFront(r.getLayoutId()),h.current=!1);const W=new ge(M-R.x,D-R.y,n.width,n.height),F=_(W);i(F),t.doAction(re.moveFloat(r.getLayoutId(),F).setAdjusting(!0))},()=>{t.doAction(re.moveFloat(r.getLayoutId(),a.current).setAdjusting(!1)),t.redrawLayout(),t.showOverlayOnAllWindows(!1)},()=>{t.doAction(re.moveFloat(r.getLayoutId(),a.current).setAdjusting(!1)),t.redrawLayout(),t.showOverlayOnAllWindows(!1)})},z=t.getIcons(),N=t.isSupportsPopout()&&r.getRootRow()?.isAllowedInWindow()===!0,B=C=>{C.stopPropagation(),r.getRootRow()?.getChildren().length?t.getDragDropManager().startDockLayoutDrag(C.nativeEvent,r,c.current??void 0):C.preventDefault()},P=C=>{t.getDragDropManager().onDragEnded()},O=C=>{C.stopPropagation()},E=C=>{C.stopPropagation();const R=t.getScreenRect(r.getRect());t.doAction(re.popoutFloat(r.getLayoutId(),R.toJson()))},A=(C,R)=>{const M=n,D={x:C.clientX,y:C.clientY};t.showOverlayOnAllWindows(!0),ls(t.getCurrentDocument()??document,C,(W,F)=>{const ne=W-D.x,X=F-D.y;let q=M.x,Z=M.y,Y=M.width,Q=M.height;R.includes("n")&&(Z+=X,Q-=X),R.includes("s")&&(Q+=X),R.includes("w")&&(q+=ne,Y-=ne),R.includes("e")&&(Y+=ne);const oe=new ge(q,Z,Math.max(y1,Y),Math.max(_1,Q)),le=_(oe);i(le),t.doAction(re.moveFloat(r.getLayoutId(),le).setAdjusting(!0))},()=>{t.doAction(re.moveFloat(r.getLayoutId(),a.current).setAdjusting(!1)),t.redrawLayout(),t.showOverlayOnAllWindows(!1)},()=>{t.doAction(re.moveFloat(r.getLayoutId(),a.current).setAdjusting(!1)),t.redrawLayout(),t.showOverlayOnAllWindows(!1)}),C.stopPropagation()};return s.jsxs("div",{ref:c,className:l(U.FLEXLAYOUT__FLOAT_WINDOW),style:{left:n.x,top:n.y,width:n.width,height:n.height,position:"absolute"},children:[s.jsxs("div",{ref:u,className:l(U.FLEXLAYOUT__FLOAT_WINDOW_HEADER),onPointerDown:S,children:[s.jsx("div",{"data-layout-path":"/floatwindow/drag-handle",className:l(U.FLEXLAYOUT__FLOAT_WINDOW_DRAG_HANDLE),draggable:!0,title:t.i18nName(Me.Dock_Float_To_Layout),"aria-label":t.i18nName(Me.Dock_Float_To_Layout),onDragStart:B,onDragEnd:P,onPointerDown:O,children:z.dragToDock}),s.jsx("div",{style:{flexGrow:1,display:"flex",justifyContent:"center",alignItems:"center",minWidth:0,overflow:"hidden"},children:r.getName()!==void 0?s.jsx("span",{"data-layout-path":"/floatwindow/title",className:l(U.FLEXLAYOUT__FLOAT_WINDOW_HEADER_TITLE),title:r.getName(),children:r.getName()}):s.jsx("div",{style:{width:50,height:8,display:"flex",flexDirection:"column",justifyContent:"space-around",opacity:.5},children:s.jsx("div",{style:{height:2,backgroundColor:"gray",borderRadius:1}})})}),N&&s.jsx("button",{type:"button","data-layout-path":"/floatwindow/button/popout",className:l(U.FLEXLAYOUT__FLOAT_WINDOW_BUTTON),title:t.i18nName(Me.Popout_Float_To_Window),"aria-label":t.i18nName(Me.Popout_Float_To_Window),onClick:E,onPointerDown:O,children:z.popoutFloatWindow})]}),s.jsx("div",{className:l(U.FLEXLAYOUT__FLOAT_WINDOW_CONTENT),children:o}),s.jsx("div",{ref:d,style:{position:"absolute",zIndex:co,top:Nr,left:ir,right:ir,height:ir,cursor:"ns-resize"},onPointerDown:C=>A(C,"n")}),s.jsx("div",{ref:x,style:{position:"absolute",zIndex:co,bottom:Nr,left:ir,right:ir,height:ir,cursor:"ns-resize"},onPointerDown:C=>A(C,"s")}),s.jsx("div",{ref:p,style:{position:"absolute",zIndex:co,top:ir,bottom:ir,right:Nr,width:ir,cursor:"ew-resize"},onPointerDown:C=>A(C,"e")}),s.jsx("div",{ref:k,style:{position:"absolute",zIndex:co,top:ir,bottom:ir,left:Nr,width:ir,cursor:"ew-resize"},onPointerDown:C=>A(C,"w")}),s.jsx("div",{ref:b,style:{position:"absolute",zIndex:co,top:Nr,left:Nr,width:kn,height:kn,cursor:"nwse-resize"},onPointerDown:C=>A(C,"nw")}),s.jsx("div",{ref:f,style:{position:"absolute",zIndex:co,top:Nr,right:Nr,width:kn,height:kn,cursor:"nesw-resize"},onPointerDown:C=>A(C,"ne")}),s.jsx("div",{ref:w,style:{position:"absolute",zIndex:co,bottom:Nr,left:Nr,width:kn,height:kn,cursor:"nesw-resize"},onPointerDown:C=>A(C,"sw")}),s.jsx("div",{ref:g,style:{position:"absolute",zIndex:co,bottom:0,right:0,width:kh,height:kh,cursor:"nwse-resize"},onPointerDown:C=>A(C,"se")})]})},xm=({controller:e})=>{const t=[],r=e.getModel().getLayouts();let o=0,n=2e3;for(const[i,a]of r)a.isMainLayout()||(a.getType()==="window"&&e.isSupportsPopout()?(t.push(s.jsx(vm,{controller:e,layout:a,title:e.getPopoutWindowName()+" "+o,url:e.getPopoutURL()+"?id="+encodeURIComponent(i),onCloseLayout:e.onCloseLayout,children:s.jsx("div",{className:e.getProps().popoutClassName,children:s.jsx(ma,{...e.getProps(),layoutId:i,path:a.getPath(),mainLayoutController:e})})},i)),o++):a.getType()==="float"&&(t.push(s.jsx(w1,{controller:e,layout:a,zIndex:n,onCloseLayout:e.onCloseLayout,children:s.jsx(ma,{...e.getProps(),layoutId:i,path:a.getPath(),mainLayoutController:e})},i+"float")),n++));return s.jsx(s.Fragment,{children:t})};xm.displayName="FloatingWindowContainer";var ym=e=>{const{controller:t,tabNode:r,selected:o,border:n,icons:i,path:a}=e,l=m.useRef(null),c=m.useRef(null),u=t.getKeyMap(),d=M=>{r.isEnableDrag()?(M.stopPropagation(),t.getDragDropManager().setDragNode(M.nativeEvent,r)):M.preventDefault()},f=M=>{M.stopPropagation(),t.getDragDropManager().onDragEnded()},p=M=>{ba(M)&&t.auxMouseClick(r,M)},g=M=>{t.showContextMenu(r,M)},x=()=>{t.doAction(re.selectTab(r.getId()))},w=M=>{const D=l.current?.closest('[role="tablist"]');if(D){const W=Array.from(D.querySelectorAll('[role="tab"]'));W[W.indexOf(l.current)+M]?.focus()}},k=()=>{const M=l.current.ownerDocument,D=()=>Gv(M.getElementById(Lt("flexlayout-tab-",r.getId())));o?D():(x(),requestAnimationFrame(D))},b=M=>{t.getEditingTab()!==r&&(eo(M,u.focusTabToggle)?(k(),M.preventDefault()):M.key==="Enter"||M.key===" "?(x(),M.preventDefault()):(M.key==="ArrowLeft"||M.key==="ArrowUp")&&!ga(M)?(w(-1),M.preventDefault()):(M.key==="ArrowRight"||M.key==="ArrowDown")&&!ga(M)?(w(1),M.preventDefault()):eo(M,u.closeTab)&&r.isCloseable()&&(w(1),t.doAction(re.deleteTab(r.getId())),M.preventDefault()))},h=()=>{const M=r.getCloseType();return!!(o||M===en.Always||M===en.Visible&&window.matchMedia&&window.matchMedia("(hover: hover) and (pointer: fine)").matches)},v=M=>{h()&&(t.doAction(re.deleteTab(r.getId())),M.stopPropagation())},_=M=>{M.stopPropagation()},y=()=>{if(o)return!0;const M=r.getParent();return M instanceof Ke&&M.getSelected()===-1&&M.getChildren()[0]===r},T=t.getEditingTab()===r,S=m.useCallback(M=>{l.current=M,t.registerMeasurable(r,"tabbutton",M)},[t,r]);m.useLayoutEffect(()=>{T&&c.current.select()},[T]),m.useEffect(()=>{if(T){const M=t.getCurrentDocument().body,D=W=>{W.target!==c.current&&t.setEditingTab(void 0)};return M.addEventListener("pointerdown",D),()=>M.removeEventListener("pointerdown",D)}},[T,t]);const z=M=>{M.stopPropagation()},N=M=>{M.code==="Escape"?(t.setEditingTab(void 0),l.current?.focus()):(M.code==="Enter"||M.code==="NumpadEnter")&&(t.setEditingTab(void 0),t.doAction(re.renameTab(r.getId(),M.target.value)),l.current?.focus())},B=t.getClassName;let P=B(U.FLEXLAYOUT__BORDER_BUTTON)+" "+B(U.FLEXLAYOUT__BORDER_BUTTON_+n);o?P+=" "+B(U.FLEXLAYOUT__BORDER_BUTTON__SELECTED):P+=" "+B(U.FLEXLAYOUT__BORDER_BUTTON__UNSELECTED),r.getClassName()!==void 0&&(P+=" "+r.getClassName());let O=0;r.getModel().isEnableRotateBorderIcons()===!1&&(n==="left"?O=r.getModel().getBorderLeftTabDirection()==="down"?-90:90:n==="right"&&(O=-90));const E=Ef(t,r,O);let A=E.content?s.jsx("div",{className:B(U.FLEXLAYOUT__BORDER_BUTTON_CONTENT),children:E.content}):null;const C=E.leading?s.jsx("div",{className:B(U.FLEXLAYOUT__BORDER_BUTTON_LEADING),children:E.leading}):null;if(T&&(A=s.jsx("input",{ref:c,className:B(U.FLEXLAYOUT__TAB_BUTTON_TEXTBOX),"data-layout-path":a+"/textbox",type:"text","aria-label":t.i18nName(Me.Rename_Tab),autoFocus:!0,defaultValue:r.getName(),onKeyDown:N,onPointerDown:z})),r.isCloseable()){const M=t.i18nName(Me.Close_Tab);E.buttons.push(s.jsx("div",{"data-layout-path":a+"/button/close",title:M,"aria-hidden":"true",className:B(U.FLEXLAYOUT__BORDER_BUTTON_TRAILING),onPointerDown:_,onClick:v,children:typeof i.close=="function"?i.close(r):i.close},"close"))}const R=[Co(u.focusTabToggle),r.isCloseable()?Co(u.closeTab):void 0].filter(Boolean).join(" ")||void 0;return s.jsxs("div",{ref:S,id:Lt("flexlayout-tabbutton-",r.getId()),role:T?void 0:"tab","aria-selected":T?void 0:o,"aria-controls":T?void 0:Lt("flexlayout-tab-",r.getId()),"aria-label":T?void 0:E.name,"aria-keyshortcuts":T?void 0:R,tabIndex:T?-1:y()?0:-1,onKeyDown:b,"data-layout-path":a,className:P,onClick:x,onAuxClick:p,onContextMenu:g,title:r.getHelpText(),draggable:!0,onDragStart:d,onDragEnd:f,children:[C,A,E.buttons]})};ym.displayName="BorderButton";var _m=e=>{const{borderNode:t,controller:r,size:o}=e,n=m.useRef(null),i=m.useRef(null),a=m.useRef(null),l=m.useRef(null),c=m.useRef(null),u=m.useRef(null),[d,f]=m.useState(!1),p=m.useRef(null),g=r.getIcons();m.useEffect(()=>()=>p.current?.(),[]);const{userControlledPositionRef:x,onScroll:w,onScrollPointerDown:k,hiddenTabs:b,onMouseWheel:h,isDockStickyButtons:v,isShowHiddenTabs:_}=fm(r,t,_e.flip(t.getOrientation()),u,a,n,r.getClassName(U.FLEXLAYOUT__BORDER_BUTTON)),y=m.useCallback(oe=>{n.current=oe,r.registerMeasurable(t,"borderheader",oe)},[r,t]),T=oe=>{ba(oe)&&r.auxMouseClick(t,oe)},S=oe=>{r.showContextMenu(t,oe)},z=oe=>{oe.stopPropagation()},N=oe=>{const le=r.getShowOverflowMenu(),Ce=b.map(Ee=>({index:Ee,node:t.getChildren()[Ee]}));if(le!==void 0)le(t,oe,Ce,B);else{const Ee=l.current;f(!0),p.current=um(Ee,t,Ce,B,r,()=>{f(!1),p.current=null})}oe.stopPropagation()},B=oe=>{r.doAction(re.selectTab(oe.node.getId())),x.current=!1},P=oe=>{const le=t.getChildren()[t.getSelected()];le!==void 0&&r.doAction(re.popoutTab(le.getId(),"window")),oe.stopPropagation()},O=oe=>{const le=t.getChildren()[t.getSelected()];le!==void 0&&r.doAction(re.popoutTab(le.getId(),"float")),oe.stopPropagation()},E=r.getClassName,A=()=>{const oe=[];for(let le=0;le{let oe,le=[],Ce=[],Ee;const ve={leading:oe,buttons:le,stickyButtons:Ce,overflowPosition:void 0};if(r.customizeTabSet(t,ve),oe=ve.leading,Ce=ve.stickyButtons,le=ve.buttons,ve.overflowPosition===void 0&&(ve.overflowPosition=Ce.length),Ce.length>0&&(v?le=[...Ce,...le]:Ee=s.jsx("div",{ref:c,onPointerDown:z,onDragStart:ue=>{ue.preventDefault()},className:E(U.FLEXLAYOUT__TAB_TOOLBAR_STICKY_BUTTONS_CONTAINER),children:Ce},"sticky_buttons_container")),_){const ue=r.i18nName(Me.Overflow_Menu_Tooltip);let se;if(typeof g.more=="function"){const $=b.map(pe=>({index:pe,node:t.getChildren()[pe]}));se=g.more(t,$)}else se=s.jsxs(s.Fragment,{children:[g.more,s.jsx("div",{className:E(U.FLEXLAYOUT__TAB_BUTTON_OVERFLOW_COUNT),children:b.length>0?b.length:""})]});le.splice(Math.min(ve.overflowPosition,le.length),0,s.jsx("button",{tabIndex:0,"aria-haspopup":"menu","aria-expanded":d,"aria-label":ue,ref:l,className:E(U.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON)+" "+E(U.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON_OVERFLOW)+" "+E(U.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON_OVERFLOW_+t.getLocation().getName()),title:ue,onClick:N,onPointerDown:z,children:se},"overflowbutton"))}const It=t.getSelected();if(It!==-1){const ue=t.getChildren()[It];if(ue!==void 0&&r.isMainLayout()){if(ue.isEnablePopoutFloatIcon()){const se=r.i18nName(Me.Popout_Tab_Float);le.push(s.jsx("button",{tabIndex:0,title:se,"aria-label":se,className:E(U.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON)+" "+E(U.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON_FLOAT),onClick:O,onPointerDown:z,children:typeof g.popoutFloat=="function"?g.popoutFloat(ue):g.popoutFloat},"popout-float"))}if(r.isSupportsPopout()&&ue.isEnablePopoutIcon()&&ue.isAllowedInWindow()){const se=r.i18nName(Me.Popout_Tab);le.push(s.jsx("button",{tabIndex:0,title:se,"aria-label":se,className:E(U.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON)+" "+E(U.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON_FLOAT),onClick:P,onPointerDown:z,children:typeof g.popout=="function"?g.popout(ue):g.popout},"popout"))}}}const G=s.jsx("div",{ref:i,className:E(U.FLEXLAYOUT__BORDER_TOOLBAR)+" "+E(U.FLEXLAYOUT__BORDER_TOOLBAR_+t.getLocation().getName()),children:le},"toolbar");return{leading:oe,toolbar:G,stickyBar:Ee}},R=A(),{leading:M,toolbar:D,stickyBar:W}=C();let F=E(U.FLEXLAYOUT__BORDER)+" "+E(U.FLEXLAYOUT__BORDER_+t.getLocation().getName());t.getClassName()!==void 0&&(F+=" "+t.getClassName());let ne,X;const q=o-1;t.getLocation()===ee.LEFT?(ne=r.getModel().getBorderLeftTabDirection()==="down"?{left:"100%",top:0}:{right:"100%",top:0},X={width:q,overflowY:"auto"}):t.getLocation()===ee.RIGHT?(ne={left:"100%",top:0},X={width:q,overflowY:"auto"}):(ne={left:0},X={height:q,overflowX:"auto"});let Z;t.isEnableTabScrollbar()&&(Z=s.jsx("div",{ref:a,"aria-hidden":"true",className:E(U.FLEXLAYOUT__MINI_SCROLLBAR),onPointerDown:k}));let Y;M&&(Y=s.jsx("div",{className:E(U.FLEXLAYOUT__BORDER_LEADING),children:M}));const Q=E(U.FLEXLAYOUT__BORDER_INNER_TAB_CONTAINER)+" "+E(U.FLEXLAYOUT__BORDER_INNER_TAB_CONTAINER_+t.getLocation().getName())+(t.getLocation()===ee.LEFT&&r.getModel().getBorderLeftTabDirection()==="down"?" "+E(U.FLEXLAYOUT__BORDER_INNER_TAB_CONTAINER_LEFT_DOWN):"");return s.jsxs("div",{ref:y,style:{display:"flex",flexDirection:t.getOrientation()===_e.VERT?"row":"column"},className:F,"data-layout-path":t.getPath(),onClick:T,onAuxClick:T,onContextMenu:S,onWheel:h,children:[Y,s.jsxs("div",{className:E(U.FLEXLAYOUT__MINI_SCROLLBAR_CONTAINER),children:[s.jsxs("div",{ref:u,className:E(U.FLEXLAYOUT__BORDER_INNER)+" "+E(U.FLEXLAYOUT__BORDER_INNER_+t.getLocation().getName()),style:X,onScroll:w,children:[s.jsx("div",{style:ne,role:r.getEditingTab()?.getParent()===t?void 0:"tablist","aria-orientation":r.getEditingTab()?.getParent()!==t&&(t.getLocation()===ee.LEFT||t.getLocation()===ee.RIGHT)?"vertical":void 0,className:Q,children:R}),W]}),Z]}),D]})};_m.displayName="BorderTabSet";function wm(e){const{controller:t,borderNode:r,show:o}=e,n=m.useRef(null),i=m.useCallback(d=>{n.current=d,t.registerMeasurable(r,"bordercontent",d)},[t,r]);let a=!0;const l={};r.getOrientation()===_e.HORZ?(l.width=r.getSize(),l.minWidth=r.getMinSize(),l.maxWidth=r.getMaxSize()):(l.height=r.getSize(),l.minHeight=r.getMinSize(),l.maxHeight=r.getMaxSize(),a=!1);const c=t.getClassName(U.FLEXLAYOUT__BORDER_TAB_CONTENTS),u=r.getLocation()===ee.LEFT||r.getLocation()===ee.TOP;if(r.isOverlay()){l.display="flex";const d={display:o?"flex":"none"};if(a){const p=t.getModel();for(const g of p.getBorderSet().getBorders())if(g!==r&&g.isOverlay()&&g.isShowing()&&g.getSelected()!==-1){const x=g.getSize()+p.getSplitterSize();g.getLocation()===ee.TOP?d.top=x:g.getLocation()===ee.BOTTOM&&(d.bottom=x)}}const f=t.getClassName(U.FLEXLAYOUT__BORDER_TAB_OVERLAY)+" "+t.getClassName(U.FLEXLAYOUT__BORDER_TAB_OVERLAY_+r.getLocation().getName());return s.jsxs("div",{className:f,style:d,children:[u&&s.jsx("div",{ref:i,style:l,className:c}),o&&s.jsx(Yi,{controller:t,node:r,index:0,horizontal:a}),!u&&s.jsx("div",{ref:i,style:l,className:c})]})}return l.display=o?"flex":"none",u?s.jsxs(s.Fragment,{children:[s.jsx("div",{ref:i,style:l,className:c}),o&&s.jsx(Yi,{controller:t,node:r,index:0,horizontal:a})]}):s.jsxs(s.Fragment,{children:[o&&s.jsx(Yi,{controller:t,node:r,index:0,horizontal:a}),s.jsx("div",{ref:i,style:l,className:c})]})}wm.displayName="BorderTab";var km=({controller:e,inner:t})=>{const r=e.getClassName(U.FLEXLAYOUT__LAYOUT_MAIN),o=e.getModel().getBorderSet().getBorderMap();if(e.isMainLayout()&&o.size>0){const n=s.jsx("div",{className:r,ref:e.getMainRef(),children:t}),i=new Map,a=new Map;for(const[d,f]of ee.values){const p=o.get(f);p&&p.isShowing()&&(!p.isAutoHide()||p.isAutoHide()&&(p.getChildren().length>0||e.getState().showHiddenBorder===f))&&(i.set(f,s.jsx(_m,{controller:e,borderNode:p,size:e.getState().calculatedBorderBarSize})),a.set(f,s.jsx(wm,{controller:e,borderNode:p,show:p.getSelected()!==-1})))}const l=e.getClassName(U.FLEXLAYOUT__LAYOUT_BORDER_CONTAINER),c=e.getClassName(U.FLEXLAYOUT__LAYOUT_BORDER_CONTAINER_INNER),u=s.jsxs("div",{className:c,style:{flexDirection:"column"},children:[a.get(ee.TOP),s.jsxs("div",{className:c,style:{flexDirection:"row"},children:[a.get(ee.LEFT),n,a.get(ee.RIGHT)]}),a.get(ee.BOTTOM)]});return s.jsxs("div",{className:l,style:{flexDirection:"column"},children:[i.get(ee.TOP),s.jsxs("div",{className:c,style:{flexDirection:"row"},children:[i.get(ee.LEFT),u,i.get(ee.RIGHT)]}),i.get(ee.BOTTOM)]})}else return s.jsx("div",{className:r,ref:e.getMainRef(),style:{position:"absolute",top:0,left:0,bottom:0,right:0,display:"flex"},children:t})};km.displayName="BorderContainer";var Em=m.memo(e=>{Em.displayName="DragTabButton";const{controller:t,tabNode:r}=e,o=m.useRef(null);m.useEffect(()=>{r.setTabStamp(o.current)},[r]);const n=t.getClassName,i=n(U.FLEXLAYOUT__DRAG_RECT);return s.jsx("div",{ref:o,className:i,children:s.jsx(va,{controller:t,tabNode:r},r.getId())})},k1);function k1(e,t){return t.dragging}var ma=m.forwardRef((e,t)=>{ma.displayName="LayoutInternal";const[r,o]=m.useState({editingTab:void 0,showEdges:!1,showOverlay:!1,calculatedBorderBarSize:29,layoutRedrawRevision:0,fullRedrawRevision:0,showHiddenBorder:ee.CENTER}),n=m.useCallback(B=>{o(P=>({...P,...typeof B=="function"?B(P,e):B}))},[e]),i=m.useRef(null),[a,l]=m.useState(0),c=m.useRef(null),u=m.useRef(null),d=m.useRef(null),f=m.useRef(null),p=m.useMemo(()=>new E1(e,r,n),[]);p.setProps(e),p.setStateRaw(r),p.setSetState(n),p.setLayoutRef(i),p.setMoveablesHomeRef(c),p.setFindBorderBarSizeRef(u),p.setFindSplitterSizeRef(d),p.setMainRef(f);const g=e.model.getLayouts().get(p.getLayoutId());g.setController(p),m.useImperativeHandle(t,()=>p,[p]),m.useLayoutEffect(()=>{const B=p.syncLayoutMetrics();if(p.positionTabPanels(),p.isMainLayout()&&p.updateLayoutMetrics(),p.isReLayout()&&(p.redrawLayout(),p.setReLayout(!1)),i.current&&p.getCurrentDocument()!==void 0&&p.getCurrentDocument()!==i.current.ownerDocument&&l(P=>P+1),B){const P=i.current?.ownerDocument.defaultView??window,O=P.requestAnimationFrame(()=>{p.syncLayoutMetrics(),p.positionTabPanels(),p.isReLayout()&&(p.redrawLayout(),p.setReLayout(!1))});return()=>P.cancelAnimationFrame(O)}}),m.useEffect(()=>{const B=i.current.ownerDocument,P=B.defaultView;p.setCurrentDocument(B),p.setCurrentWindow(P);const O=new P.ResizeObserver(()=>{p.updateRect(),p.syncLayoutMetrics(),p.positionTabPanels(),p.updateLayoutMetrics(),p.isReLayout()&&(p.redrawLayout(),p.setReLayout(!1))});O.observe(i.current),p.setGeometryResizeObserver(O),u.current&&O.observe(u.current),d.current&&O.observe(d.current);const E=()=>{p.updateRect()};P.addEventListener("resize",E);const A=()=>{for(const[C,R]of p.getProps().model.getLayouts()){const M=R.getController();M&&M.redrawLayout()}};return p.isMainLayout()&&(document.addEventListener("visibilitychange",A),B.addEventListener("pointerdown",p.onOverlayBorderPointerDown,!0),B.addEventListener("keydown",p.onOverlayBorderKeyDown)),(p.isMainLayout()||p.getLayout()?.getType()==="window")&&B.addEventListener("keydown",p.onTabsetNavKeyDown),()=>{p.setGeometryResizeObserver(void 0),O.disconnect(),P.removeEventListener("resize",E),document.removeEventListener("visibilitychange",A),B.removeEventListener("pointerdown",p.onOverlayBorderPointerDown,!0),B.removeEventListener("keydown",p.onOverlayBorderKeyDown),B.removeEventListener("keydown",p.onTabsetNavKeyDown)}},[p,a]),m.useEffect(()=>{let B;if(!p.isMainLayout()&&p.getLayout().getType()==="window"){const P=p.getProps().mainLayoutController?.getRootDiv();if(P){const O=P,E=i.current;_h(O,E),B=new MutationObserver(()=>{_h(O,E)&&p.redrawLayout()}),B.observe(O,{attributeFilter:["style"]})}}return()=>{B&&B.disconnect()}},[p]),m.useEffect(()=>{const B=e.model;if(g.setToExportRectFunction((P,O)=>O==="window"?p.getScreenRect(P):p.getRelativeRect(P)),p.setLayout(g),p.isMainLayout()){const P={onAfterAction:p.onModelChange};return B.addChangeListener(P),()=>{B.removeChangeListener(P)}}},[e.model,p,g]);const x=p.isMainLayout()?s.jsxs("div",{className:p.getClassName(U.FLEXLAYOUT__LAYOUT_METRICS),children:[s.jsx("div",{ref:u,className:p.getClassName(U.FLEXLAYOUT__BORDER_SIZER),children:"FindBorderBarSize"},"findBorderBarSize"),s.jsx("div",{ref:d,className:p.getClassName(U.FLEXLAYOUT__SPLITTER_+"horz")},"findSplitterSize")]}):null;if(!i.current)return s.jsx("div",{ref:i,className:p.getClassName(U.FLEXLAYOUT__LAYOUT),children:x});const w=e.model,k=p.getLayoutId();w.getRootRow(k).calcMinMaxSize(),w.getRootRow(k).setPaths(e.path||""),p.isMainLayout()&&w.getBorderSet().setPaths();const b=s.jsx(lm,{controller:p,show:r.showOverlay},"__overlay__"),h=p.renderLayout(),v=s.jsx(km,{controller:p,inner:h}),_=p.renderTabContainers(),y=p.reorderComponents(_,p.getOrderedTabIds());let T=null,S=null,z=null,N=null;return p.isMainLayout()&&(T=s.jsx(xm,{controller:p}),S=p.reorderComponents(p.renderTabContents(),p.getOrderedTabMoveableIds()),z=s.jsx("div",{"aria-hidden":"true",className:p.getClassName(U.FLEXLAYOUT__LAYOUT_TAB_STAMPS),children:p.renderDragTabButtons()},"__dragTabButtons__"),N=s.jsx("div",{ref:c,className:p.getClassName(U.FLEXLAYOUT__LAYOUT_MOVEABLES_HOME)},"__moveables_home__")),s.jsxs("div",{ref:i,className:p.getClassName(U.FLEXLAYOUT__LAYOUT),onDragEnter:p.getDragDropManager().onDragEnterRaw,onDragLeave:p.getDragDropManager().onDragLeaveRaw,onDragOver:p.getDragDropManager().onDragOver,onDrop:p.getDragDropManager().onDrop,children:[x,N,b,v,y,S,T,z]})}),Jr,E1=(Jr=class{constructor(t,r,o){I(this,"_props");I(this,"_state");I(this,"_setState");I(this,"_layoutRef");I(this,"_moveablesHomeRef");I(this,"_findBorderBarSizeRef");I(this,"_findSplitterSizeRef");I(this,"_mainRef");I(this,"_orderedTabIds");I(this,"_orderedTabMoveableIds");I(this,"_currentDocument");I(this,"_currentWindow");I(this,"_showOverlay",!1);I(this,"_supportsPopout");I(this,"_popoutURL");I(this,"_icons");I(this,"_dragDropManager");I(this,"_layoutId");I(this,"_layout");I(this,"_mainController");I(this,"_popoutWindowName");I(this,"_cachedLayoutDOMRect");I(this,"_reLayout");I(this,"_measurables",new Map);I(this,"_tabPanels",new Map);I(this,"_lastRect",ge.empty());I(this,"_lastSplitterSize",8);I(this,"_geometryResizeObserver");I(this,"updateRect",()=>{if(this._layoutRef.current){let t=this._layoutRef.current;if(!this._layout.isMainLayout()&&this._layout.getType()==="float"){const o=t.closest("."+this.getClassName(U.FLEXLAYOUT__FLOAT_WINDOW));o instanceof HTMLDivElement&&(t=o)}let r=ge.fromDomRect(t.getBoundingClientRect());if(!this._layout.isMainLayout()&&this._layout.getType()==="float"){const o=this._mainController.getDomRect();r=r.relativeTo(o)}!r.equalsWhenRounded(this._lastRect)&&r.width!==0&&r.height!==0&&(this._lastRect=r,this._layout.setRect(r),this.redrawLayout())}});I(this,"onModelChange",t=>{const r=t instanceof $v?t.actions:[t];for(const o of r)if(o.type==re.DELETE_TAB&&this._state.showHiddenBorder!==ee.CENTER&&this._props.model.getBorderSet().getBorderMap().get(this._state.showHiddenBorder).getChildren().length===0){this._setState({showHiddenBorder:ee.CENTER});break}if(t.isAdjusting()&&(t.type===re.ADJUST_WEIGHTS||t.type===re.ADJUST_BORDER_SPLIT)){t.type===re.ADJUST_WEIGHTS?this.applyAdjustingWeights(t):this.applyAdjustingBorderSplit(t),this._props.onModelChange&&this._props.onModelChange(this._props.model,t);return}this.redrawLayout(),this._props.onModelChange&&this._props.onModelChange(this._props.model,t)});I(this,"onOverlayBorderPointerDown",t=>{const r=this._props.model.getBorderSet().getBorders().filter(l=>l.isOverlay()&&l.getSelected()!==-1);if(r.length===0||t.target?.closest?.("."+this.getClassName(U.FLEXLAYOUT__POPUP_MENU_CONTAINER)+",."+this.getClassName(U.FLEXLAYOUT__FLOAT_WINDOW)+",."+this.getClassName(U.FLEXLAYOUT__FLOATING_WINDOW_CONTENT)+",."+this.getClassName(U.FLEXLAYOUT__BORDER_TAB_OVERLAY)))return;const o=this.getDomRect();if(!o)return;const n=t.clientX-o.x,i=t.clientY-o.y,a=this._props.model.getRootRow(lt.MAIN_LAYOUT_ID)?.getRect();if(!(!a||!a.contains(n,i)))for(const l of r)l.getContentRect()?.contains(n,i)||this.closeOverlayBorder(l)});I(this,"onOverlayBorderKeyDown",t=>{if(!eo(t,this.getKeyMap().closeOverlayBorder))return;const r=this._currentDocument?.activeElement;if(!r)return;const o=this._props.model.getBorderSet().getBorders().filter(n=>n.isOverlay()&&n.getSelected()!==-1);for(const n of o){const i=n.getSelectedNode(),a=this._currentDocument.getElementById(Lt("flexlayout-tab-",i.getId())),l=this._currentDocument.getElementById(Lt("flexlayout-tabbutton-",i.getId()));if(a&&a.contains(r)||r===l){this.closeOverlayBorder(n),t.preventDefault();break}}});I(this,"onTabsetNavKeyDown",t=>{if(t.defaultPrevented)return;const r=this.getKeyMap();let o;if(eo(t,r.focusNextTabset))o=1;else if(eo(t,r.focusPreviousTabset))o=-1;else return;this.focusAdjacentTabset(o)&&t.preventDefault()});I(this,"updateLayoutMetrics",()=>{if(this._findBorderBarSizeRef.current){const t=this._findBorderBarSizeRef.current.getBoundingClientRect().height;Math.abs(t-this._state.calculatedBorderBarSize)>.5&&this.setState({calculatedBorderBarSize:t})}if(this._findSplitterSizeRef.current){const t=this._findSplitterSizeRef.current.getBoundingClientRect().width;Math.abs(t-this._lastSplitterSize)>.5&&(this._lastSplitterSize=t,this._props.model.setSplitterSize(t),this.redrawLayout())}});I(this,"getClassName",t=>this._props.classNameMapper===void 0?t:this._props.classNameMapper(t));I(this,"onCloseLayout",t=>{this.doAction(re.closePopout(t.getLayoutId()))});this._props=t,this._state=r,this._setState=o,this._orderedTabIds=[],this._orderedTabMoveableIds=[],this._supportsPopout=t.supportsPopout!==void 0?t.supportsPopout:R1,this._popoutURL=t.popoutURL?t.popoutURL:"popout.html",this._icons={...T1,...t.icons},this._layoutId=t.layoutId?t.layoutId:lt.MAIN_LAYOUT_ID,this._mainController=t.mainLayoutController?t.mainLayoutController:this,this._dragDropManager=new f1(this),this._layout=t.model.getLayouts().get(this._layoutId),this._layout.setController(this),this._popoutWindowName=t.popoutWindowName||"Popout Window",this._reLayout=!1}renderLayout(){return this._cachedLayoutDOMRect=void 0,s.jsxs(s.Fragment,{children:[s.jsx(Tf,{controller:this,rowNode:this._props.model.getRootRow(this._layoutId)},"__row__"),s.jsx(bm,{controller:this})]})}renderTabContainers(){const t=new Map;return this._props.model.visitLayoutNodes(this._layoutId,r=>{if(r instanceof Le){const o=r,n=o.isSelected(),i=o.isRendered(),a=o.isEnableRenderOnDemand();(i||n||!a)&&t.set(o.getId(),s.jsx(hm,{controller:this,tabNode:o,selected:n},o.getId()))}}),t}renderTabContents(){const t=new Map;for(const[r,o]of this._props.model.getLayouts())this._props.model.visitLayoutNodes(r,n=>{if(n instanceof Le){const i=n,a=i.isSelected(),l=i.isRendered(),c=i.isEnableRenderOnDemand(),u=i.getParent().getContentRect(),d=a||!c;if(l||d&&u.width>0&&u.height>0){const f=i.getMoveableElement();f.style.overflow=i.isEnableScrollbars()?"auto":"hidden";const p=o.getWindowId()||"",g=i.getId()+(i.isEnableWindowReMount()?p:"");t.set(i.getId(),Ur.createPortal(s.jsx(gm,{controller:this,tabNode:i,windowId:p,visible:d,fullRedrawRevision:this._state.fullRedrawRevision,parentRedrawRevision:this._props.parentRedrawRevision},g),f,g)),i.setRendered(!0)}}});return t}renderDragTabButtons(){const t=[];return this._props.model.visitNodes(r=>{if(r instanceof Le){const o=r;t.push(s.jsx(Em,{controller:this,tabNode:o,dragging:Rl},o.getId()))}}),t}redrawLayout(){this._mainController?.setState(t=>({layoutRedrawRevision:t.layoutRedrawRevision+1}))}redrawLayoutAndTabContent(){this._mainController?.setState(t=>({fullRedrawRevision:t.fullRedrawRevision+1}))}doAction(t){if(this._props.onAction!==void 0){const r=this._props.onAction(t);return r!==void 0?this._props.model.doAction(r):void 0}else return this._props.model.doAction(t)}applyMeasuredGeometry(){this.syncLayoutMetrics(),this.positionTabPanels(),this.isReLayout()&&(this.redrawLayout(),this.setReLayout(!1))}applyAdjustingWeights(t){const r=this._props.model.getNodeById(t.data.nodeId);if(!(r instanceof Ue)){this.redrawLayout();return}const o=t.data.weights,n=r.getChildren();for(let i=0;it.has(i)),n=new Set(o);for(const i of t.keys())n.has(i)||o.push(i);return r.splice(0,r.length,...o),r.map(i=>t.get(i))}checkForBorderToShow(t,r){const o=this.getBoundingClientRect(this._mainRef.current),n=o.getCenter(),i=10,a=100/2;let l=!1;this._props.model.isEnableEdgeDock()&&this._state.showHiddenBorder===ee.CENTER&&(r>n.y-a&&rn.x-a&&t=o.getRight()-i?c=ee.RIGHT:r<=o.y+i?c=ee.TOP:r>=o.getBottom()-i&&(c=ee.BOTTOM)),c!==this._state.showHiddenBorder&&this.setState({showHiddenBorder:c})}closeOverlayBorder(t){const r=t.getSelectedNode();if(r===void 0)return;const o=this._currentDocument,n=o?.getElementById(Lt("flexlayout-tab-",r.getId())),i=!!o&&!!n&&n.contains(o.activeElement);this.doAction(re.selectTab(r.getId())),i&&o.getElementById(Lt("flexlayout-tabbutton-",r.getId()))?.focus()}focusAdjacentTabset(t){const r=this._currentDocument,o=r?.activeElement;if(!r||!o||!this.getRootDiv()?.contains(o))return!1;const n=o.tagName;if(n==="INPUT"||n==="TEXTAREA"||o.isContentEditable||o.closest('[role="menu"]')||this._props.model.getMaximizedTabset(this._layoutId)!==void 0)return!1;const i=[];if(this._props.model.visitLayoutNodes(this._layoutId,u=>{u instanceof Ne&&u.getSelectedNode()!==void 0&&i.push(u)}),i.length<2)return!1;const a=u=>this._measurables.get("tabset:"+u.getId())?.element.contains(o)?!0:!!r.getElementById(Lt("flexlayout-tab-",u.getSelectedNode().getId()))?.contains(o);let l=i.findIndex(a);if(l===-1){const u=this._props.model.getActiveTabset(this._layoutId);l=u!==void 0?i.indexOf(u):0,l===-1&&(l=0)}const c=i[(l+t+i.length)%i.length];return r.getElementById(Lt("flexlayout-tabbutton-",c.getSelectedNode().getId()))?.focus(),this.doAction(re.setActiveTabset(c.getId(),this._layoutId)),!0}registerMeasurable(t,r,o){const n=r+":"+t.getId(),i=this._measurables.get(n);o?this._measurables.set(n,{kind:r,node:t,element:o}):this._measurables.delete(n),r!=="tabbutton"&&(i&&this._geometryResizeObserver?.unobserve(i.element),o&&this._geometryResizeObserver?.observe(o))}setGeometryResizeObserver(t){if(this._geometryResizeObserver=t,t)for(const{kind:r,element:o}of this._measurables.values())r!=="tabbutton"&&t.observe(o)}syncLayoutMetrics(){this._cachedLayoutDOMRect=void 0;let t=!1;for(const{kind:r,node:o,element:n}of this._measurables.values()){if(!n.isConnected)continue;const i=this.getBoundingClientRect(n);switch(r){case"row":case"tabset":i.equalsWhenRounded(o.getRect())||(o.setRect(i),t=!0);break;case"tabstrip":i.equalsWhenRounded(o.getTabStripRect())||(o.setTabStripRect(i),t=!0);break;case"tabsetcontent":{const a=o;if(!isNaN(i.x)&&!a.getContentRect().equalsWhenRounded(i)){const l=a.getContentRect().width>0&&a.getContentRect().height>0;a.setContentRect(i),t=!0,!l&&i.width>0&&i.height>0&&this.setReLayout(!0)}break}case"tabbutton":i.equalsWhenRounded(o.getTabRect())||(o.setTabRect(i),t=!0);break;case"borderheader":i.equalsWhenRounded(o.getRect())||(o.setTabHeaderRect(i),t=!0);break;case"bordercontent":{const a=o;if(!isNaN(i.x)&&i.width>0&&!a.getContentRect().equalsWhenRounded(i)){const l=a.getContentRect().width>0&&a.getContentRect().height>0;a.setContentRect(i),t=!0,!l&&i.height>0&&this.setReLayout(!0)}break}}}return t}registerTabPanel(t,r){r?this._tabPanels.set(t.getId(),{node:t,element:r}):this._tabPanels.delete(t.getId())}positionTabPanels(){for(const{node:t,element:r}of this._tabPanels.values()){const o=t.getParent(),n=o.getContentRect();let i=t.isSelected();o instanceof Ne?this._props.model.getMaximizedTabset(this._layoutId)!==void 0&&!o.isMaximized()&&(i=!1):o instanceof Ke&&(o.isShowing()||(i=!1)),n.positionElement(r),r.style.display=i?"":"none",t.setRect(n),t.setVisible(i)}}addTabWithDragAndDrop(t,r,o){this._dragDropManager.addTabWithDragAndDrop(t,r,o)}moveTabWithDragAndDrop(t,r){this._dragDropManager.moveTabWithDragAndDrop(t,r)}setDragComponent(t,r,o,n){this._dragDropManager.setDragComponent(t,r,o,n)}getMoveablesHome(){return this._moveablesHomeRef.current}getProps(){return this._props}getKeyMap(){return r1(this._props.keyMap)}setProps(t){this._props=t}getState(){return this._state}setStateRaw(t){this._state=t}setState(t){this._setState(t)}setSetState(t){this._setState=t}setLayoutRef(t){this._layoutRef=t}setMoveablesHomeRef(t){this._moveablesHomeRef=t}setFindBorderBarSizeRef(t){this._findBorderBarSizeRef=t}setFindSplitterSizeRef(t){this._findSplitterSizeRef=t}getMainRef(){return this._mainRef}setMainRef(t){this._mainRef=t}getOrderedTabIds(){return this._orderedTabIds}getOrderedTabMoveableIds(){return this._orderedTabMoveableIds}getCurrentDocument(){return this._currentDocument}setCurrentDocument(t){this._currentDocument=t}getCurrentWindow(){return this._currentWindow}setCurrentWindow(t){this._currentWindow=t,t&&!Jr.Windows.has(t)&&Jr.Windows.set(t,En())}getWindowId(){if(this.getCurrentWindow())return Jr.Windows.get(this.getCurrentWindow())}isSupportsPopout(){return this._supportsPopout}getPopoutURL(){return this._popoutURL}getIcons(){return this._icons}getDragDropManager(){return this._dragDropManager}getLayoutId(){return this._layoutId}getLayout(){return this._layout}setLayout(t){this._layout=t}getMainController(){return this._mainController}isMainLayout(){return this._layout.isMainLayout()}getPopoutWindowName(){return this._popoutWindowName}isReLayout(){return this._reLayout}setReLayout(t){this._reLayout=t}getBoundingClientRect(t){const r=this.getDomRect();return r?ge.getBoundingClientRect(t).relativeTo(r):ge.empty()}getLayoutRef(){return this._layoutRef.current}getDomRect(){return this._cachedLayoutDOMRect!==void 0?this._cachedLayoutDOMRect:this._layoutRef.current?(this._cachedLayoutDOMRect=ge.fromDomRect(this._layoutRef.current.getBoundingClientRect()),this._cachedLayoutDOMRect):ge.empty()}getRootDiv(){return this._layoutRef.current}getMainElement(){return this._mainRef.current}getFactory(){return this._props.factory}isRealtimeResize(){return this._props.realtimeResize??!1}setEditingTab(t){this.setState({editingTab:t})}getEditingTab(){return this._state.editingTab}getModel(){return this._props.model}getTabDragSpeed(){return this._props.tabDragSpeed?this._props.tabDragSpeed:.3}getScreenRect(t){const r=t.clone(),o=this.getDomRect(),n=this._currentWindow.outerHeight-this._currentWindow.innerHeight,i=this._currentWindow.outerWidth-this._currentWindow.innerWidth,a=n>=0&&n<=200?n:60,l=i>=0&&i<=100?i:2;return r.x=this._currentWindow.screenX+this._currentWindow.scrollX+l/2+o.x+r.x,r.y=this._currentWindow.screenY+this._currentWindow.scrollY+(a-l/2)+o.y+r.y,r.height+=a,r.width+=l,r}getRelativeRect(t){const r=t.clone();if(!this._layout.isMainLayout()){const o=this._layout.getRect();r.x+=o.x,r.y+=o.y}return r}moveWindowToFront(t){this.doAction(re.movePopoutToFront(t))}addTabToTabSet(t,r){if(this._props.model.getNodeById(t)!==void 0)return this.doAction(re.addTab(r,t,ee.CENTER,-1))}addTabToActiveTabSet(t){const r=this._props.model.getActiveTabset(this._layoutId);if(r!==void 0)return this.doAction(re.addTab(t,r.getId(),ee.CENTER,-1))}maximize(t){this.doAction(re.maximizeToggle(t.getId(),this.getLayoutId()))}customizeTab(t,r){this._props.onRenderTab&&this._props.onRenderTab(t,r)}customizeTabSet(t,r){this._props.onRenderTabSet&&this._props.onRenderTabSet(t,r)}i18nName(t,r){let o;return this._props.i18nMapper&&(o=this._props.i18nMapper(t,r)),o===void 0&&(o=t+(r===void 0?"":r)),o}getShowOverflowMenu(){return this._props.onShowOverflowMenu}getTabSetPlaceHolderCallback(){return this._props.onTabSetPlaceHolder}showContextMenu(t,r){this._props.onContextMenu&&this._props.onContextMenu(t,r)}auxMouseClick(t,r){this._props.onAuxMouseClick&&this._props.onAuxMouseClick(t,r)}showOverlay(t){this._showOverlay!==t&&(this._showOverlay=t,this.setState({showOverlay:t}),Tl(!t,this._currentDocument))}showOverlayOnAllWindows(t){for(const[,r]of this._props.model.getLayouts())r.getController()&&r.getController().showOverlay(t)}},I(Jr,"Windows",new WeakMap),Jr),T1={close:s.jsx(Ll,{}),pin:s.jsx(Qv,{}),closeTabset:s.jsx(Ll,{}),closeFloatPopout:s.jsx(Ll,{}),popout:s.jsx(qu,{}),popoutFloat:s.jsx(om,{}),maximize:s.jsx(em,{}),restore:s.jsx(im,{}),more:s.jsx(tm,{}),edgeArrow:s.jsx(rm,{}),activeTabset:s.jsx(am,{}),dragToDock:s.jsx(nm,{}),popoutFloatWindow:s.jsx(qu,{})},R1=Xv(),Tm=m.forwardRef((e,t)=>{const r=m.useRef(null),o=m.useRef(e.model),n=m.useRef(0);o.current!==e.model&&(e.model.getAdoptedFromModel()!==o.current&&n.current++,o.current=e.model),Tm.displayName="Layout",m.useImperativeHandle(t,()=>({redraw:()=>{r.current?.redrawLayoutAndTabContent()},addTabToTabSet:(a,l)=>r.current?.addTabToTabSet(a,l),addTabWithDragAndDrop:(a,l,c)=>{r.current?.addTabWithDragAndDrop(a,l,c)},moveTabWithDragAndDrop:(a,l)=>{r.current?.moveTabWithDragAndDrop(a,l)},addTabToActiveTabSet:a=>r.current?.addTabToActiveTabSet(a),setDragComponent:(a,l,c,u)=>{r.current?.setDragComponent(a,l,c,u)},editTabName:a=>{const l=r.current?.getModel().getNodeById(a);l instanceof Le&&l.isEnableRename()&&l.getLayout().getController()?.setEditingTab(l)},getRootDiv:()=>r.current.getRootDiv()}));const i={};return s.jsx(ma,{ref:r,...e,parentRedrawRevision:i},n.current)});const Eh=20,S1="bv-nodepack:layout-profiles:v1:",Rf=new Map,Ju="bv-layout-session-changed",Rm=e=>`${S1}${e}`;function Sf(e){try{const t=JSON.parse(localStorage.getItem(Rm(e))??"");if(t?.schemaVersion===1&&Array.isArray(t.profiles))return t}catch{}return{schemaVersion:1,profiles:[]}}function Sm(e,t){localStorage.setItem(Rm(e),JSON.stringify(t))}const L1=e=>{const t=e.trim();if(t.length<1||t.length>40)throw new Error("Layout name must contain 1 to 40 characters.");return t};function Th(e){const t=Sf(e.editorType),r=L1(e.name),o=e.id??crypto.randomUUID();if(t.profiles.find(l=>l.name.localeCompare(r,void 0,{sensitivity:"accent"})===0&&l.id!==o))throw new Error("A layout with this name already exists.");const i={...e,id:o,name:r,schemaVersion:1,updatedAt:new Date().toISOString()},a=t.profiles.some(l=>l.id===o)?t.profiles.map(l=>l.id===o?i:l):[...t.profiles,i];if(a.length>Eh)throw new Error(`A maximum of ${Eh} layouts can be saved for this editor.`);return Sm(e.editorType,{schemaVersion:1,profiles:a,selectedId:o}),i}function C1(e,t){const r=Sf(e);Sm(e,{...r,profiles:r.profiles.filter(o=>o.id!==t),selectedId:r.selectedId===t?void 0:r.selectedId})}function Cl(e,t,r,o,n=!0){Rf.set(e,{layout:structuredClone(t),status:r,profileId:o}),n&&window.dispatchEvent(new CustomEvent(Ju,{detail:{key:e}}))}function Ai(e){const t=Rf.get(e);return t?structuredClone(t):void 0}function N1(e){Rf.delete(e)}function O1(e,t){return e.editorType===t.editorType&&e.editorVersion===t.editorVersion&&e.library===t.library&&e.signature===t.signature}const Rh="flexlayout-react@0.10.5";function M1(e){return{global:{tabEnableClose:!1,tabEnablePopout:!1,tabEnablePopoutIcon:!1,tabEnablePopoutFloatIcon:!0,tabSetMinWidth:180,tabSetMinHeight:130},borders:[],layout:{type:"row",children:e.map(t=>({type:"tabset",weight:t.weight,minWidth:t.minWidth,children:[{type:"tab",id:t.id,name:t.title,component:t.id,enablePopoutFloatIcon:!0}]}))}}}const A1=new Set([re.MOVE_NODE,re.DELETE_TAB,re.DELETE_TABSET,re.RENAME_TAB]),D1=e=>A1.has(e.type)?"modified":"adjusted";function I1(e){N1(e)}function Lm({storageId:e,panels:t,resetSignal:r=0,defaultModel:o,onStatus:n}){const i=JSON.stringify({panels:t.map(f=>`${f.id}:${f.weight}`),defaultModel:o}),a=m.useMemo(()=>o??M1(t),[i]),[l,c]=m.useState(()=>lt.fromJson(Ai(e)?.layout??a)),u=m.useMemo(()=>new Map(t.map(f=>[f.id,f.content])),[t]);m.useEffect(()=>{const f=Ai(e);c(lt.fromJson(f?.layout??a)),n?.(f?.status??"saved")},[a,i,e]),m.useEffect(()=>{r&&(I1(e),c(lt.fromJson(a)),n?.("saved"))},[a,r,e]),m.useEffect(()=>{const f=p=>{if(p.detail?.key!==e)return;const g=Ai(e);g&&(c(lt.fromJson(g.layout)),n?.(g.status))};return window.addEventListener(Ju,f),()=>window.removeEventListener(Ju,f)},[n,e]);const d=f=>f.type===re.POPOUT_TAB&&f.data.type==="float"&&l.getNodeById(f.data.node)?.getLayoutId()!==lt.MAIN_LAYOUT_ID?void 0:f;return s.jsx("div",{className:"bv-ui-dock flexlayout__theme_dark",children:s.jsx(Tm,{model:l,factory:f=>u.get(f.getComponent()??"")??null,constrainFloatPanels:!0,onAction:d,onModelChange:(f,p)=>{c(f);const g=Ai(e),x=g?.status==="modified"?"modified":D1(p);Cl(e,f.toJson(),x,g?.profileId,!1),n?.(x)}})})}let go=[];const Zu=new Set,Cm=()=>Zu.forEach(e=>e());function Ir(e){const t=e.id??`${e.title}:${e.message??""}`,r=go.findIndex(n=>n.id===t),o={...e,id:t};return go=r>=0?[...go.slice(0,r),o,...go.slice(r+1)]:[...go,o].slice(-3),Cm(),t}function j1(e){go=go.filter(t=>t.id!==e),Cm()}const P1=e=>(Zu.add(e),()=>Zu.delete(e)),Sh=()=>go;function B1(){const e=m.useSyncExternalStore(P1,Sh,Sh),t=m.useCallback(()=>{const r=document.getElementById("bv-global-toast-stack");if(!r)return;const o=[...document.querySelectorAll(".comfyui-bottom-panel,.bottom-panel,.actionbar,[class*='bottom'][class*='toolbar'],#graph-canvas-container [role='toolbar'],#bv-ui-window-shelf")].filter(i=>i.offsetParent!==null).map(i=>i.getBoundingClientRect()).filter(i=>i.bottom>window.innerHeight-160),n=Math.max(16,...o.map(i=>Math.max(0,window.innerHeight-i.top+8)));r.style.setProperty("--bv-toast-bottom",`${n}px`)},[]);return m.useEffect(()=>{const r=o=>{const n=o.detail;n?.title&&Ir({title:n.title,message:n.message,tone:n.tone??"neutral",duration:n.duration??4500})};return window.addEventListener("bv-show-toast",r),()=>window.removeEventListener("bv-show-toast",r)},[]),m.useEffect(()=>{t();const r=new ResizeObserver(t),o=new MutationObserver(t);return document.querySelectorAll("body *").forEach(n=>{n.offsetParent!==null&&n.getBoundingClientRect().bottom>window.innerHeight-180&&r.observe(n)}),o.observe(document.body,{childList:!0,subtree:!0}),window.addEventListener("resize",t),()=>{r.disconnect(),o.disconnect(),window.removeEventListener("resize",t)}},[t]),e.length?Ur.createPortal(s.jsx("div",{id:"bv-global-toast-stack",className:"bv-ui bv-density-compact bv-toast-stack bv-global-toast-stack","aria-live":"polite",children:e.map(r=>s.jsx(Zw,{tone:r.tone,title:r.title,duration:r.duration,onClose:()=>j1(r.id),children:r.message},r.id))}),document.body):null}const Ar=({children:e,className:t=""})=>s.jsx("svg",{className:t,viewBox:"0 0 24 24","aria-hidden":"true",children:e}),Nm=()=>s.jsx("svg",{className:"bv-brand-cyclone",viewBox:"0 0 32 32","aria-hidden":"true",children:s.jsx("path",{d:"M11.08 2.736a2 2 0 0 1-.286 2.814A12.99 12.99 0 0 0 6 15.64c0 5.525 4.475 10 10 10s10-4.475 10-10a7 7 0 0 0-14 0c0 2.215 1.785 4 4 4s4-1.785 4-4c0-.555-.445-1-1-1s-1 .445-1 1a2 2 0 1 1-4 0c0-2.765 2.235-5 5-5s5 2.235 5 5c0 4.425-3.575 8-8 8s-8-3.575-8-8c0-6.075 4.925-11 11-11s11 4.925 11 11c0 7.735-6.265 14-14 14s-14-6.265-14-14C2 10.313 4.45 5.563 8.266 2.45a2 2 0 0 1 2.814.286"})}),Om=m.createContext({narrow:!1,minimal:!1,menuOverflow:!1}),Mm=()=>m.useContext(Om);function z1(e){const t=e.mode==="workspace",r=m.useRef(null),[o,n]=m.useState(1/0),[i,a]=m.useState(!1),l=m.useRef(null);m.useEffect(()=>{const u=r.current;if(!u)return;const d=new ResizeObserver(f=>n(f[0]?.contentRect.width??u.clientWidth));return d.observe(u),()=>d.disconnect()},[]);const c=m.useMemo(()=>({narrow:o<760,minimal:o<620,menuOverflow:o<520}),[o]);return s.jsx(Om.Provider,{value:c,children:s.jsxs("header",{ref:r,className:`bv-ui-window-header bv-density-compact ${c.narrow?"is-narrow":""} ${c.minimal?"is-minimal":""} ${c.menuOverflow?"is-menu-overflow":""}`.trim(),onPointerDown:e.onPointerDown,children:[s.jsxs("div",{className:"bv-ui-window-identity",children:[s.jsx("span",{className:"bv-ui-window-icon",children:s.jsx(Nm,{})}),s.jsxs("strong",{className:"bv-ui-window-title",children:[s.jsx("span",{className:"bv-ui-window-title-full",children:e.title}),e.shortTitle&&s.jsx("span",{className:"bv-ui-window-title-short",children:e.shortTitle})]}),e.context&&s.jsx("div",{className:"bv-ui-window-context",children:e.context})]}),s.jsx("div",{className:"bv-ui-window-center",children:e.center}),s.jsxs("div",{className:"bv-ui-window-controls",children:[s.jsx("button",{type:"button",className:"bv-ui-window-control",title:"Choose BV window","aria-label":"Choose BV window",onClick:u=>window.dispatchEvent(new CustomEvent(as,{detail:{anchor:u.currentTarget}})),children:s.jsxs(Ar,{children:[s.jsx("rect",{x:"4",y:"5",width:"7",height:"6",rx:"1"}),s.jsx("rect",{x:"13",y:"5",width:"7",height:"6",rx:"1"}),s.jsx("rect",{x:"4",y:"13",width:"7",height:"6",rx:"1"}),s.jsx("rect",{x:"13",y:"13",width:"7",height:"6",rx:"1"})]})}),e.onMenuVisible&&(c.minimal?s.jsxs("div",{ref:l,className:"bv-window-header-utility",children:[s.jsx("button",{type:"button",className:"bv-ui-window-control","aria-label":"More window actions","aria-expanded":i,onClick:()=>a(u=>!u),children:"•••"}),s.jsx(Io,{open:i,anchor:l,onClose:()=>a(!1),className:"bv-window-navigator-menu",children:s.jsx("button",{type:"button",className:"bv-window-visibility-menu-action",onClick:()=>{e.onMenuVisible?.(!e.menuVisible),a(!1)},children:e.menuVisible?"Hide from BV window menus":"Show in BV window menus"})})]}):s.jsx("button",{type:"button",className:"bv-ui-window-control bv-ui-window-control--visibility",title:e.menuVisible?"Hide this node from BV window menus":"Show this node in BV window menus","aria-label":e.menuVisible?"Hide this node from BV window menus":"Show this node in BV window menus","aria-pressed":e.menuVisible,onClick:()=>e.onMenuVisible?.(!e.menuVisible),children:e.menuVisible?s.jsxs(Ar,{children:[s.jsx("path",{d:"M2.5 12s3.5-5 9.5-5 9.5 5 9.5 5-3.5 5-9.5 5-9.5-5-9.5-5Z"}),s.jsx("circle",{cx:"12",cy:"12",r:"2.5"})]}):s.jsx(Ar,{children:s.jsx("path",{d:"m4 4 16 16M9.5 7.4A10.8 10.8 0 0 1 12 7c6 0 9.5 5 9.5 5a16 16 0 0 1-2.2 2.5M6.2 8.3A15.2 15.2 0 0 0 2.5 12s3.5 5 9.5 5c1 0 2-.2 2.8-.4"})})})),s.jsx("button",{type:"button",className:"bv-ui-window-control",title:"Minimize","aria-label":"Minimize window",onClick:e.onMinimize,children:s.jsx(Ar,{children:s.jsx("path",{d:"M7 16.5h10"})})}),e.allowWorkspace!==!1&&s.jsx("button",{type:"button",className:"bv-ui-window-control",title:t?"Restore floating window":"Maximize to workspace","aria-label":t?"Restore floating window":"Maximize to workspace",onClick:e.onMode,children:t?s.jsxs(Ar,{children:[s.jsx("rect",{x:"4.5",y:"7.5",width:"12",height:"12",rx:"1.5"}),s.jsx("path",{d:"M7.5 7.5v-3h12v12h-3"})]}):s.jsx(Ar,{children:s.jsx("rect",{x:"5",y:"5",width:"14",height:"14",rx:"1.5"})})}),s.jsx("button",{type:"button",className:"bv-ui-window-control bv-ui-window-control--close",title:"Close","aria-label":"Close window",onClick:e.onClose,children:s.jsx(Ar,{children:s.jsx("path",{d:"m7 7 10 10M17 7 7 17"})})})]})]})})}const Ti=(e,t)=>{const r=Math.max(280,window.innerWidth-32),o=Math.max(240,window.innerHeight-32),n=Math.min(t.width,420,r),i=Math.min(t.height,o),a=Math.max(n,Math.min(e.width,r)),l=Math.max(i,Math.min(e.height,o));return{x:Math.max(16,Math.min(e.x,window.innerWidth-a-16)),y:Math.max(16,Math.min(e.y,window.innerHeight-l-16)),width:a,height:l}};function xn({open:e,title:t,shortTitle:r,context:o,center:n,children:i,status:a,actions:l,activationToken:c=0,allowWorkspace:u=!0,initialMode:d="floating",initialGeometry:f,minSize:p={width:360,height:240},mode:g,className:x="",bodyClassName:w="",menuVisible:k,onMenuVisible:b,onClose:h,onGeometry:v,onModeChange:_}){const y=r??(t==="BV Regional Editor"?"Reg. Editor":t==="Regional Quick Edit"?"Quick Edit":void 0),T=()=>Ti({x:Math.max(16,(window.innerWidth-(f?.width??760))/2),y:Math.max(16,(window.innerHeight-(f?.height??640))/2),width:f?.width??760,height:f?.height??640,...f},p),[S,z]=m.useState(u?d:"floating"),[N,B]=m.useState(!1),[P,O]=m.useState(T),E=g??S,A=m.useRef(null),C=m.useRef(null),R=m.useRef(P),M=m.useRef(f),D=m.useRef();m.useEffect(()=>{R.current=P},[P]),m.useEffect(()=>{e&&B(!1)},[e]),m.useEffect(()=>{const Y=A.current;if(!(!e||!Y))return C.current=document.activeElement instanceof HTMLElement&&!Y.contains(document.activeElement)?document.activeElement:C.current,q0(Y)},[e]),m.useEffect(()=>{const Y=A.current;if(!Y)return;const Q=()=>{B(!1),requestAnimationFrame(()=>Y.focus({preventScroll:!0}))},oe=()=>B(!0);return Y.addEventListener("bv-ui-activate",Q),Y.addEventListener("bv-ui-minimize",oe),()=>{Y.removeEventListener("bv-ui-activate",Q),Y.removeEventListener("bv-ui-minimize",oe)}},[]),m.useEffect(()=>{const Y=A.current;if(!Y)return;const Q=oe=>{const le=oe.detail;u&&le?.mode&&(z(le.mode),_?.(le.mode)),le?.mode==="floating"&&le.geometry&&O(Ti(le.geometry,p))};return Y.addEventListener("bv-ui-set-window-state",Q),()=>Y.removeEventListener("bv-ui-set-window-state",Q)},[u,p.height,p.width,_]),m.useEffect(()=>{e&&(B(!1),requestAnimationFrame(()=>A.current?.focus({preventScroll:!0})))},[c,e]),m.useEffect(()=>{const Y=M.current;M.current=f,f&&O(Q=>Ti($0(Q,Y,f),p))},[f?.height,f?.width,f?.x,f?.y,p.height,p.width]),m.useEffect(()=>{if(!e)return;const Y=()=>O(Q=>Ti(Q,p));return window.addEventListener("resize",Y),()=>window.removeEventListener("resize",Y)},[p.height,p.width,e]);const W=Y=>{E!=="floating"||Y.button!==0||Y.target.closest("button,input,select,textarea")||(D.current={pointerId:Y.pointerId,startX:Y.clientX,startY:Y.clientY,kind:"move",x:P.x,y:P.y},Y.currentTarget.setPointerCapture(Y.pointerId),Y.preventDefault())},F=Y=>Q=>{E!=="floating"||Q.button!==0||(D.current={pointerId:Q.pointerId,startX:Q.clientX,startY:Q.clientY,kind:"resize",direction:Y,geometry:P},Q.currentTarget.setPointerCapture(Q.pointerId),Q.preventDefault(),Q.stopPropagation())},ne=Y=>{const Q=D.current;if(!Q||Q.pointerId!==Y.pointerId)return;const oe={x:Y.clientX-Q.startX,y:Y.clientY-Q.startY},le={...p,width:Math.min(p.width,420)};O(Ce=>Ti(Q.kind==="move"?{...Ce,x:Q.x+oe.x,y:Q.y+oe.y}:H0(Q.geometry,oe,Q.direction,le),p))},X=Y=>{D.current?.pointerId===Y.pointerId&&(D.current=void 0,requestAnimationFrame(()=>v?.(R.current)))};if(!e)return null;const q=E==="workspace"?void 0:{left:P.x,top:P.y,width:P.width,height:P.height},Z=()=>{h(),requestAnimationFrame(()=>C.current?.focus({preventScroll:!0}))};return s.jsxs(s.Fragment,{children:[N&&s.jsx(Js,{title:t,onRestore:()=>B(!1),onClose:Z}),s.jsxs("div",{ref:A,tabIndex:-1,hidden:N,className:`bv-managed-window ${E} ${x}`.trim(),role:"dialog","aria-modal":E==="workspace","aria-label":t,style:q,onPointerDownCapture:()=>A.current&&xh(A.current),onFocusCapture:()=>A.current&&xh(A.current),onPointerMove:ne,onPointerUp:X,onPointerCancel:X,onKeyDown:Y=>{if(Y.key==="Escape"&&![...document.querySelectorAll(".bv-anchored-popover,[role='listbox'],[role='menu']")].some(oe=>oe.offsetParent!==null)){Y.preventDefault(),Y.stopPropagation(),Z();return}Y.stopPropagation()},children:[s.jsxs("div",{className:"bv-managed-window-surface",children:[s.jsx(z1,{title:t,shortTitle:y,context:o,center:n,mode:E,allowWorkspace:u,menuVisible:k,onMenuVisible:b,onMode:()=>{if(!u)return;const Y=E==="workspace"?"floating":"workspace";z(Y),_?.(Y)},onMinimize:()=>B(!0),onClose:Z,onPointerDown:W}),s.jsx("div",{className:`bv-managed-window-body ${w}`.trim(),children:i}),(a||l)&&s.jsx(F1,{status:a??null,actions:l,stacked:E==="floating"&&P.width<700,minimal:E==="floating"&&P.width<470})]}),E==="floating"&&["n","ne","e","se","s","sw","w","nw"].map(Y=>s.jsx("div",{className:`bv-window-resize-handle ${Y}`,"aria-hidden":"true",onPointerDown:F(Y)},Y))]})]})}function F1({status:e,actions:t,warning:r=!1,stacked:o=!1,minimal:n=!1}){return s.jsxs("footer",{className:`bv-ui-window-footer${r?" has-warning":""}${o?" is-stacked":""}${n?" is-minimal":""}`,children:[s.jsx("div",{className:"bv-ui-window-status",children:e}),t&&s.jsx("div",{className:"bv-ui-window-footer-actions",children:t})]})}function Lf({primary:e,secondary:t,overflow:r=[]}){return s.jsxs("div",{className:"bv-footer-action-set",children:[t&&s.jsx("div",{className:"bv-footer-secondary-actions",children:t}),r.length>0&&s.jsx(ff,{label:"More",actions:r,intent:"ghost",density:"compact"}),s.jsx("div",{className:"bv-footer-primary-action",children:e})]})}function Js({title:e,onRestore:t,onClose:r}){const o=m.useMemo(()=>{let n=document.getElementById("bv-ui-window-shelf");return n||(n=document.createElement("div"),n.id="bv-ui-window-shelf",n.className="bv-ui-window-shelf",document.body.append(n)),n},[]);return m.useEffect(()=>{const n="#graph-canvas, .graph-canvas-container, nav, aside, [role='navigation'], .side-tool-bar-container, .side-bar-panel",i=()=>{const f=document.querySelector("#graph-canvas, .graph-canvas-container")?.getBoundingClientRect()??null,p=[...document.querySelectorAll("nav, aside, [role='navigation'], .side-tool-bar-container, .side-bar-panel")].map(x=>x.getBoundingClientRect()),g=Y0(f,p,{width:window.innerWidth,height:window.innerHeight});o.style.setProperty("--bv-ui-window-shelf-left",`${g.left}px`),o.style.setProperty("--bv-ui-window-shelf-bottom",`${g.bottom}px`)},a=new ResizeObserver(i),l=new Set,c=()=>document.querySelectorAll(n).forEach(d=>{l.has(d)||(l.add(d),a.observe(d))}),u=new MutationObserver(()=>{c(),i()});return c(),u.observe(document.body,{childList:!0,subtree:!0}),window.addEventListener("resize",i),i(),()=>{u.disconnect(),a.disconnect(),window.removeEventListener("resize",i)}},[o]),m.useEffect(()=>()=>{requestAnimationFrame(()=>{o.childElementCount||o.remove()})},[o]),Ur.createPortal(s.jsxs("div",{className:"bv-ui-window-shelf-item",children:[s.jsxs("button",{type:"button",className:"bv-ui-window-shelf-restore",onClick:t,title:`Restore ${e}`,children:[s.jsx("span",{className:"bv-ui-window-shelf-icon",children:s.jsx(Nm,{})}),s.jsx("span",{children:e})]}),r&&s.jsx("button",{type:"button",className:"bv-ui-window-shelf-close","aria-label":`Close ${e}`,title:`Close ${e}`,onClick:r,children:s.jsx(Ar,{children:s.jsx("path",{d:"m7 7 10 10M17 7 7 17"})})})]}),o)}function Da({label:e,value:t,options:r,onNavigate:o}){const n=m.useSyncExternalStore(F0,ri,ri),i=n==="keep",a=Mm(),[l,c]=m.useState(!1),u=m.useRef(null),d=r.filter(k=>k.value!==t);if(!d.length)return null;const f=i?"Keep current window when switching. Hold Shift to replace once.":"Replace current window when switching. Hold Shift to keep once.",p=a.minimal,g=a.narrow,x=s.jsx(E0,{className:"bv-window-node-select",label:e,value:"",options:d,onValue:(k,b)=>o(k,b.shiftKey?i:!i)}),w=s.jsxs("button",{type:"button",role:"switch","aria-label":f,"aria-checked":i,className:"bv-window-switch-mode",title:f,onClick:()=>wf(i?"replace":"keep"),children:[s.jsx("span",{className:"bv-toggle-track",children:s.jsx("span",{})}),s.jsx("span",{"aria-hidden":"true",children:i?"Keep":"Replace"})]});return s.jsxs("div",{className:"bv-window-navigator",children:[!p&&x,!g&&w,g&&s.jsxs("div",{ref:u,className:"bv-window-navigator-overflow",children:[s.jsx("button",{type:"button","aria-label":"More window navigation options","aria-expanded":l,onClick:()=>c(k=>!k),children:"•••"}),s.jsx(Io,{open:l,anchor:u,onClose:()=>c(!1),className:"bv-window-navigator-menu",children:s.jsxs("div",{className:"bv-window-navigator-panel",children:[p&&s.jsx("div",{className:"bv-window-navigator-panel-row is-node",children:x}),s.jsxs("div",{className:"bv-window-navigator-panel-row is-mode",children:[s.jsx("span",{children:"Keep current window"}),w]})]})})]})]})}function Am({onClick:e,storageId:t,editorType:r="regional"}){const[o,n]=m.useState(null),[i,a]=m.useState(""),[l,c]=m.useState(0),u=hf();if(!t)return s.jsxs("button",{type:"button",className:"bv-ui-button bv-ui-button--secondary bv-ui-window-reset",title:"Restore the default panel arrangement",onClick:e,children:[s.jsx(Ar,{children:s.jsx("path",{d:"M4.9 9A7.5 7.5 0 1 1 5 15M4 4v5h5"})}),s.jsx("span",{children:"Reset layout"})]});const d=Sf(r),f=Ai(t),p=d.profiles.find(h=>h.id===f?.profileId),g=()=>c(h=>h+1),x=()=>{if(!f)return;const h=Th({id:o==="rename"?p?.id:void 0,name:i,editorType:r,editorVersion:"1",library:Rh,signature:`${r}:v1`,layout:f.layout});Cl(t,f.layout,"saved",h.id),n(null),g()},w={editorType:r,editorVersion:"1",library:Rh,signature:`${r}:v1`},k=(h,v)=>f?.status==="modified"?u.confirm({title:"Replace modified layout?",message:`Structural panel changes in this session will be discarded when switching to ${h}.`,confirmLabel:"Switch layout",danger:!0,action:v}):v(),b=[{id:"factory",label:"Factory layout",onSelect:()=>k("Factory",e)},...d.profiles.map(h=>{const v=O1(h,w);return{id:h.id,label:`${h.name}${v?"":" · Incompatible"}`,onSelect:()=>k(h.name,()=>{if(!v){e(),Ir({title:"Layout could not be loaded",message:"The saved layout belongs to an incompatible editor version. Factory layout was restored.",tone:"warning",duration:5e3});return}Cl(t,h.layout,"saved",h.id)})}}),{id:"save-as",label:"Save as new layout…",disabled:!f,onSelect:()=>{a(""),n("save")}},...p?[{id:"update",label:`Update ${p.name}`,onSelect:()=>{f&&(Th({...p,layout:f.layout}),Cl(t,f.layout,"saved",p.id),g())}},{id:"rename",label:"Rename layout…",onSelect:()=>{a(p.name),n("rename")}},{id:"delete",label:"Delete layout",danger:!0,onSelect:()=>{C1(r,p.id),e(),g()}}]:[]];return s.jsxs(s.Fragment,{children:[s.jsx(ff,{label:`${p?.name??"Factory"}${f?.status&&f.status!=="saved"?` · ${f.status[0].toUpperCase()}${f.status.slice(1)}`:""}`,icon:s.jsx(Ar,{children:s.jsx("path",{d:"M4 5h16v14H4zM8 5v14M8 10h12"})}),actions:b}),s.jsx(Na,{open:!!o,title:o==="rename"?"Rename layout":"Save layout",onClose:()=>n(null),footer:s.jsx(ie,{intent:"primary",onClick:x,children:o==="rename"?"Rename":"Save layout"}),children:s.jsx(un,{label:"Layout name",value:i,maxLength:40,onValue:a})}),u.dialog]})}const Dm=new Map;let Im;function to(e,t){const r=String(t);r&&Dm.set(e,r),r&&e!=="quick"&&(Im=e)}function U1(){return Im}function $o(e){return Dm.get(e)}function cs({label:e,value:t,onImport:r,allowImport:o=!0}){const[n,i]=m.useState(!1),[a,l]=m.useState(""),[c,u]=m.useState(""),d=async()=>{try{await navigator.clipboard.writeText(JSON.stringify(t,null,2)),Ir({title:"Draft copied",message:`${e} draft JSON was copied to the clipboard.`,tone:"success",duration:4e3})}catch{Ir({title:"Clipboard unavailable",message:"Copy the draft from the import/export dialog instead.",tone:"warning",duration:4e3}),l(JSON.stringify(t,null,2)),i(!0)}},f=()=>{try{const g=JSON.parse(a);r(g),i(!1),u("")}catch(g){u(g instanceof Error?g.message:"Invalid draft JSON")}},p=()=>{l(""),u(""),i(!0)};return s.jsxs(s.Fragment,{children:[s.jsx(ie,{intent:"ghost",onClick:d,children:"Copy draft"}),o&&s.jsx(ie,{intent:"ghost",onClick:p,children:"Import draft"}),s.jsx(Na,{open:n,title:`Import ${e} draft`,description:"Imported JSON updates only the editor draft. Save explicitly to update the workflow.",onClose:()=>i(!1),footer:s.jsxs(s.Fragment,{children:[s.jsx(ie,{intent:"ghost",iconOnly:!0,"aria-label":"Paste from clipboard",title:"Paste from clipboard",onClick:async()=>{try{l(await navigator.clipboard.readText())}catch{u("Clipboard permission was not granted.")}},children:"⌘"}),s.jsx(ie,{intent:"primary",onClick:f,children:"Import draft"})]}),children:s.jsx(w0,{label:"Draft JSON",value:a,rows:14,resize:"vertical",error:c,onValue:l})})]})}const Vr=(e,t)=>JSON.stringify(e)===JSON.stringify(t),Po=e=>e?.id??e?.key;function Qu(e,t,r,o="draft"){if(Vr(r,e))return{ok:!0,value:structuredClone(t)};if(Vr(t,e))return{ok:!0,value:structuredClone(r)};if(Vr(t,r))return{ok:!0,value:structuredClone(t)};if(Array.isArray(e)&&Array.isArray(t)&&Array.isArray(r)){if(![...e,...t,...r].every(w=>Po(w)!=null))return{ok:!1,reason:`Concurrent list change at ${o}`};const n=e.map(Po),i=t.map(Po),a=r.map(Po),l=!Vr(n,i.filter(w=>n.includes(w))),c=!Vr(n,a.filter(w=>n.includes(w)));if(l&&c&&!Vr(i,a))return{ok:!1,reason:`Concurrent reorder at ${o}`};const u=new Map(e.map(w=>[Po(w),w])),d=new Map(t.map(w=>[Po(w),w])),f=new Map(r.map(w=>[Po(w),w])),p=l?i:a,g=[...p,...i,...a].filter((w,k,b)=>b.indexOf(w)===k),x=[];for(const w of g){const k=u.get(w),b=d.get(w),h=f.get(w);if(k&&b&&!h&&!Vr(k,b))return{ok:!1,reason:`Edited item ${w} was removed externally`};if(k&&!b&&h&&!Vr(k,h))return{ok:!1,reason:`Removed item ${w} changed externally`};if(!b&&!h)continue;if(!k){if(b&&h&&!Vr(b,h))return{ok:!1,reason:`Item ${w} was added differently`};x.push(structuredClone(b??h));continue}if(!b||!h){x.push(structuredClone(b??h));continue}const v=Qu(k,b,h,`${o}.${w}`);if(!v.ok)return v;x.push(v.value)}return{ok:!0,value:x}}if(e&&t&&r&&typeof e=="object"&&typeof t=="object"&&typeof r=="object"){const n={};for(const i of new Set([...Object.keys(e),...Object.keys(t),...Object.keys(r)])){const a=Qu(e[i],t[i],r[i],`${o}.${i}`);if(!a.ok)return a;n[i]=a.value}return{ok:!0,value:n}}return{ok:!1,reason:`Concurrent value change at ${o}`}}function V1(){const[e,t]=m.useState(cn);m.useEffect(()=>{const o=n=>t(n.detail);return window.addEventListener(ei,o),()=>window.removeEventListener(ei,o)},[]);const r=(o,n)=>uf({...e,controls:e.controls.map(i=>i.id===o?{...i,enabled:n}:i)});return e.controls.length?s.jsx("div",{className:"bv-control-live-list",children:e.controls.map(o=>s.jsx(Qr,{label:o.name,checked:o.enabled,onValue:n=>r(o.id,n)},o.id))}):s.jsx(zr,{tone:"info",title:"No controls configured",children:"Create a control in Configuration before using live workflow states."})}const W1=({open:e,onClose:t,hasControlNodes:r=!0})=>{const[o,n]=m.useState(0),i=cn().controls.length>0,a=m.useMemo(()=>({global:{tabEnableClose:!1,tabEnableDrag:!1,tabEnablePopout:!1,tabEnablePopoutIcon:!1,tabEnableFloat:!1},borders:[],layout:{type:"row",children:[{type:"tabset",selected:i?0:1,children:[{type:"tab",id:"control-center-controls",name:"Controls",component:"controls",enableClose:!1,enableDrag:!1},{type:"tab",id:"control-center-configuration",name:"Configuration",component:"configuration",enableClose:!1,enableDrag:!1}]}]}}),[i]);return s.jsxs(xn,{open:e,title:"BV Control Center",shortTitle:"Control Center",initialGeometry:{width:860,height:640},minSize:{width:420,height:360},onClose:t,status:"Workflow-wide controls are saved automatically.",actions:s.jsx(Am,{storageId:"control-center",editorType:"control-center",onClick:()=>n(l=>l+1)}),children:[!r&&s.jsx(zr,{tone:"warning",title:"No Control Center nodes in workflow",children:"The workflow configuration is still available. Closing this window makes it unavailable until a Control Center node is added."}),s.jsx(Lm,{storageId:"control-center",resetSignal:o+(i?0:1),defaultModel:a,panels:[{id:"controls",title:"Controls",weight:1,content:s.jsx(V1,{})},{id:"configuration",title:"Configuration",weight:1,content:s.jsx(P0,{})}]})]})},jm=()=>globalThis.__bvSmartPipeEditorBridge??{},Cf=e=>String(e?.type??e?.comfyClass??""),jc=e=>Cf(e)==="BV Smart Pipe Merge"?"merge":"pipe",us=()=>ct().rootGraph??ct().graph,Lh=()=>kf(us(),e=>["BV Smart Pipe","BV Smart Pipe Merge"].includes(Cf(e)));function H1(){const[e,t]=m.useState([]),[r,o]=m.useState(null),[n,i]=m.useState(0),[a,l]=m.useState({}),c=m.useRef(new Map),[u,d]=m.useState(null),f=()=>({mode:"floating",geometry:{x:Math.max(16,(window.innerWidth-860)/2),y:Math.max(16,(window.innerHeight-650)/2),width:860,height:650}}),p=k=>`${k.kind}:${ha(us(),k.node)}`,g=(k,b)=>c.current.get(k)?.dirty?d({key:k,action:b}):b(),x=(k,b)=>{const h=p(k),v=r,_=()=>{to(k.kind,ha(us(),k.node)),t(y=>{const T=b&&v&&v!==h?y.filter(S=>S.key!==v):y;return T.some(S=>S.key===h)?T:[...T,{key:h,target:k}]}),l(y=>({...y,[h]:v&&y[v]?structuredClone(y[v]):y[h]??f()})),o(h),i(y=>y+1)};b&&v&&v!==h?g(v,_):_()},w=k=>g(k,()=>{c.current.delete(k),t(b=>b.filter(h=>h.key!==k)),l(b=>{const h={...b};return delete h[k],h}),o(b=>b===k?null:b)});return m.useEffect(()=>{const k=b=>{const h=b.detail;h?.node&&x({node:h.node,kind:h.kind??jc(h.node)},ri()==="replace")};return window.addEventListener("bv-open-smart-pipe-editor",k),()=>window.removeEventListener("bv-open-smart-pipe-editor",k)}),s.jsxs(s.Fragment,{children:[e.map(k=>{const b=a[k.key]??f();return s.jsx($1,{sessionKey:k.key,target:k.target,open:k.key===r,activation:n,presentation:b,onPresentation:h=>l(v=>({...v,[k.key]:h})),onActions:h=>c.current.set(k.key,h),onClose:()=>w(k.key),onRemap:h=>t(v=>v.map(_=>_.key===k.key?{..._,target:{node:h,kind:jc(h)}}:_)),onNavigate:(h,v)=>x({node:h,kind:jc(h)},v)},k.key)}),e.filter(k=>k.key!==r).map(k=>s.jsx(Js,{title:`${k.target.kind==="merge"?"Smart Pipe Merge":"Smart Pipe Editor"} · ${k.target.node.title||`#${k.target.node.id}`}`,onRestore:()=>x(k.target,!1),onClose:()=>w(k.key)},`shelf:${k.key}`)),s.jsx(pf,{open:!!u,editorName:"Smart Pipe editor",onKeep:()=>d(null),onDiscard:()=>{const k=u;k&&c.current.get(k.key)?.discard(),d(null),k?.action()},onSave:()=>{const k=u;k&&c.current.get(k.key)?.save(),d(null),k?.action()}})]})}function $1({sessionKey:e,target:t,open:r,activation:o,presentation:n,onPresentation:i,onActions:a,onClose:l,onRemap:c,onNavigate:u}){const d=jm()[t.kind],f=m.useMemo(()=>d?.read(t.node)??{},[d,t.node]),p=Ys(f),g=p.value;Xs(p);const x=m.useRef(structuredClone(f)),w=m.useRef(!1),[k,b]=m.useState(null),h=m.useMemo(()=>ha(us(),t.node),[t.node]);m.useEffect(()=>{const P=()=>{const O=Lh().find(C=>C.key===h);if(!O){b("missing");return}if(O.node!==t.node){c(O.node);return}if(w.current)return;const E=d?.read(t.node)??{};if(JSON.stringify(E)===JSON.stringify(x.current))return;if(!p.canUndo){x.current=structuredClone(E),p.replace(E,!0),b(null);return}const A=Qu(x.current,g,E);A.ok?(x.current=structuredClone(E),p.replace(A.value)):b(A.reason)};return qr().addEventListener("graphChanged",P),()=>qr().removeEventListener("graphChanged",P)},[d,g,p.canUndo,p.replace,c,t.node,h]);const v=Aa(t.node),_=Lh(),y=_.filter(P=>mn(P.node)).map(P=>({value:P.key,label:`${P.breadcrumb?`${P.breadcrumb} › `:""}${P.node.title||Cf(P.node)} · #${P.node.id}`})),T=P=>p.commit(O=>(P(O),O)),S=t.kind==="pipe"?d?.validation?.(t.node,g)??[]:[],z=()=>{w.current=!0;try{d?.save(t.node,g);const P=d?.read(t.node)??g;x.current=structuredClone(P),p.replace(P,!0),b(null)}finally{w.current=!1}},N=()=>{const P=d?.read(t.node)??{};x.current=structuredClone(P),p.replace(P,!0),b(null)};m.useEffect(()=>{a({dirty:p.canUndo,save:z,discard:N})},[d,g,p.canUndo,p.replace,a,e,t.node]);const B=s.jsx(Da,{label:"Smart Pipe node",value:_.find(P=>P.node===t.node)?.key??"",options:y,onNavigate:(P,O)=>{const E=_.find(A=>A.key===P);E&&u(E.node,O)}});return s.jsx(xn,{open:r,activationToken:o,title:t.kind==="merge"?"Smart Pipe Merge":"Smart Pipe Editor",shortTitle:"Smart Pipe",menuVisible:v,onMenuVisible:P=>fi(t.node,P),context:B,mode:n.mode,initialGeometry:n.geometry,onModeChange:P=>i({...n,mode:P}),onGeometry:P=>i({...n,geometry:P}),minSize:{width:420,height:360},onClose:l,status:S.length?"Required inputs missing":p.canUndo?"Unsaved changes":"Saved",actions:s.jsx(Lf,{primary:s.jsx(ie,{intent:"primary",onClick:z,children:"Save"}),secondary:s.jsxs(s.Fragment,{children:[s.jsx(ie,{disabled:!p.canUndo,onClick:N,children:"Discard"}),s.jsx(cs,{label:t.kind==="merge"?"Smart Pipe Merge":"Smart Pipe",value:{schema:"bv.editor-draft",version:1,type:t.kind,data:g},onImport:P=>{if(P?.schema!=="bv.editor-draft"||P?.version!==1||P?.type!==t.kind||!P?.data)throw new Error("Draft type or version does not match this editor.");p.replace(P.data)}})]}),overflow:[{id:"undo",label:"Undo",disabled:!p.canUndo,onSelect:p.undo},{id:"redo",label:"Redo",disabled:!p.canRedo,onSelect:p.redo}]}),children:k?s.jsxs(zr,{tone:"danger",title:k==="missing"?"Node no longer exists":"Smart Pipe changed externally",children:[k==="missing"?"This draft cannot be saved because its workflow node was removed.":"An external change could not be migrated safely. Reload the editor to discard the incompatible draft.",s.jsxs("div",{className:"bv-callout-actions",children:[s.jsx(cs,{label:t.kind==="merge"?"Smart Pipe Merge":"Smart Pipe",value:{schema:"bv.editor-draft",version:1,type:t.kind,data:g},onImport:()=>{},allowImport:!1}),s.jsx(ie,{onClick:()=>{if(k==="missing")l();else{const P=d?.read(t.node)??{};x.current=structuredClone(P),p.replace(P,!0),b(null)}},children:k==="missing"?"Close window":"Reload editor"})]})]}):t.kind==="pipe"?s.jsx(Y1,{node:t.node,draft:g,update:T}):s.jsx(X1,{draft:g,update:T})})}function Y1({node:e,draft:t,update:r}){const o=jm().pipe,[n,i]=m.useState(()=>o?.predecessor(e)??{value:"Start new pipe",options:[]}),a=o?.validation?.(e,t)??[];m.useEffect(()=>{const f=()=>i(o?.predecessor(e)??{value:"Start new pipe",options:[]});qr().addEventListener("graphChanged",f);const p=window.setInterval(f,750);return()=>{qr().removeEventListener("graphChanged",f),window.clearInterval(p)}},[o,e]);const l=t.definition?.localSlots??[],c=t.projection?.inheritedSlots??[],u=[...l.map((f,p)=>({id:f.id,title:f.name||"New slot",description:"Local · input required",summary:f.type||"*",content:s.jsxs("div",{className:"bv-ui-stack",children:[s.jsx(un,{label:"Name",value:f.name??"",onValue:g=>r(x=>{x.definition.localSlots[p].name=g})}),s.jsx(un,{label:"Type",value:f.type??"*",onValue:g=>r(x=>{x.definition.localSlots[p].type=g||"*"})}),s.jsx(Qr,{label:"Expose output",checked:!!f.showOutput,onValue:g=>r(x=>{x.definition.localSlots[p].showOutput=g})})]})})),...c.map((f,p)=>({id:f.id,title:f.name||f.id,description:"Inherited override",content:s.jsxs("div",{className:"bv-ui-stack",children:[s.jsx(Qr,{label:"Expose input",checked:!!f.showInput,onValue:g=>r(x=>{x.projection.inheritedSlots[p].showInput=g})}),s.jsx(Qr,{label:"Expose output",checked:!!f.showOutput,onValue:g=>r(x=>{x.projection.inheritedSlots[p].showOutput=g})})]})}))],d=()=>r(f=>{f.definition.localSlots.push({id:crypto.randomUUID(),name:"new_slot",ordinal:f.definition.nextOrdinal++,type:"*",showInput:!0,showOutput:!1})});return s.jsxs("div",{className:"bv-ui-stack",children:[s.jsx(tt,{label:"Pipe predecessor",value:n.value,options:n.options.length?n.options:[{value:n.value,label:n.value}],onValue:f=>{o?.setPredecessor(e,f),i(o?.predecessor(e)??{value:f,options:n.options})}}),a.length>0&&s.jsx(zr,{tone:"danger",title:"Required Smart Pipe inputs are missing",children:a.map(f=>s.jsx("div",{children:f.message},f.id))}),s.jsx(ie,{onClick:d,children:"Add slot"}),u.length?s.jsx(Ws,{items:u,onReorder:f=>r(p=>{const g=new Map(p.definition.localSlots.map(x=>[x.id,x]));p.definition.localSlots=f.map(x=>g.get(x.id)).filter(Boolean)}),onRemove:f=>r(p=>{p.definition.localSlots=p.definition.localSlots.filter(g=>g.id!==f),p.projection.inheritedSlots=p.projection.inheritedSlots.filter(g=>g.id!==f)})}):s.jsx(Hs,{title:"No slots",description:"Add a local slot or connect a predecessor."})]})}function X1({draft:e,update:t}){const r=e.sources??[],[o,n]=m.useState(""),i=r.map(c=>({id:c.key,title:c.label||c.key,description:c.mode==="wired"?"Wired":"Wireless"})),a=e.candidates?.find(c=>c.address===o),l=()=>{a&&(t(c=>c.sources.push({key:`pipe_${String(c.sources.length+1).padStart(3,"0")}`,mode:"wireless",address:a.address,label:a.label})),n(""))};return s.jsxs("div",{className:"bv-ui-stack",children:[s.jsxs("div",{className:"bv-ui-inline-footer bv-smart-pipe-merge-source",children:[s.jsx(tt,{label:"Wireless source",value:o,options:(e.candidates??[]).map(c=>({value:c.address,label:c.label})),onValue:n}),s.jsx(ie,{disabled:!a,onClick:l,children:"Add"})]}),i.length?s.jsx(Ws,{items:i,onReorder:c=>t(u=>{const d=new Map(u.sources.map(f=>[f.key,f]));u.sources=c.map(f=>d.get(f.id)).filter(Boolean)}),onRemove:c=>t(u=>{u.sources=u.sources.filter(d=>d.key!==c)})}):s.jsx(Hs,{title:"No merge sources",description:"Connect a pipe or add a wireless source."})]})}const G1=`:root{--bv-primary-color: #1345b7;--bv-secondary-color: #24212b;--bv-text-color: #f2eef8;--bv-accent-color: #d35d71;--bv-bg-color: #1e1c24;--bv-border-color: rgba(231,225,247,.2);--bv-muted-text-color: #aaa2b5;--bv-layer-window:1400;--bv-layer-shelf:1410;--bv-layer-flyout:1500;--bv-layer-modal:1550;--bv-layer-toast:1600}:root.comfy-theme-light #bv-root{--bv-primary-color: #1345b7;--bv-secondary-color: #34495e;--bv-text-color: #2c3e50;--bv-accent-color: #c0392b;--bv-bg-color: #ecf0f1;--bv-border-color: #bdc3c7;--bv-muted-text-color: #7f8c8d}.bv-modal{position:fixed;inset:0;z-index:var(--bv-layer-modal);display:grid;place-items:center;padding:24px;background:#0009;font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif;color:var(--bv-text-color)}.bv-modal *{box-sizing:border-box}:root{--bv-ui-scale:1.125}:root.bv-ui-size-compact{--bv-ui-scale:1}:root.bv-ui-size-default{--bv-ui-scale:1.125}:root.bv-ui-size-large{--bv-ui-scale:1.25}.bv-ui,#bv-root,.bv-ui-portal,.bv-completion-popup{--bv-ui-bg:#121116;--bv-ui-surface:#1e1c24;--bv-ui-surface-raised:#24212b;--bv-ui-input:#17161b;--bv-ui-text:#f2eef8;--bv-ui-muted:#aaa2b5;--bv-ui-border:rgba(231,225,247,.14);--bv-ui-border-hover:rgba(231,225,247,.25);--bv-ui-accent:#1345b7;--bv-ui-accent-hover:#4c74c9;--bv-ui-accent-light:#5a7dcd;--bv-ui-accent-soft:#b2c2e6;--bv-ui-accent-rgb:19,69,183;--bv-ui-danger:#d35d71;--bv-ui-warning:#e9b65f;--bv-ui-success:#55c994;--bv-ui-control-height-comfortable:calc(42px * var(--bv-ui-scale));--bv-ui-control-height-compact:calc(30px * var(--bv-ui-scale));--bv-ui-control-height:var(--bv-ui-control-height-compact);--bv-ui-field-gap-comfortable:calc(6px * var(--bv-ui-scale));--bv-ui-field-gap-compact:calc(4px * var(--bv-ui-scale));--bv-ui-field-gap:var(--bv-ui-field-gap-compact);--bv-ui-content-padding-comfortable:calc(11px * var(--bv-ui-scale));--bv-ui-content-padding-compact:calc(8px * var(--bv-ui-scale));--bv-ui-content-padding:var(--bv-ui-content-padding-compact);--bv-ui-row-height-comfortable:calc(38px * var(--bv-ui-scale));--bv-ui-row-height-compact:calc(30px * var(--bv-ui-scale));--bv-ui-row-height:var(--bv-ui-row-height-compact);--bv-ui-textarea-height-comfortable:calc(100px * var(--bv-ui-scale));--bv-ui-textarea-height-compact:calc(76px * var(--bv-ui-scale));--bv-ui-textarea-height:var(--bv-ui-textarea-height-compact);--bv-ui-check-size-comfortable:calc(18px * var(--bv-ui-scale));--bv-ui-check-size-compact:calc(16px * var(--bv-ui-scale));--bv-ui-check-size:var(--bv-ui-check-size-compact);--bv-ui-radius-sm:calc(2px * var(--bv-ui-scale));--bv-ui-radius:calc(4px * var(--bv-ui-scale));--bv-ui-radius-lg:calc(6px * var(--bv-ui-scale));color:var(--bv-ui-text);font:calc(12px * var(--bv-ui-scale))/1.45 system-ui,-apple-system,"Segoe UI",sans-serif}.bv-density-comfortable{--bv-ui-control-height:var(--bv-ui-control-height-comfortable);--bv-ui-field-gap:var(--bv-ui-field-gap-comfortable);--bv-ui-content-padding:var(--bv-ui-content-padding-comfortable);--bv-ui-row-height:var(--bv-ui-row-height-comfortable);--bv-ui-textarea-height:var(--bv-ui-textarea-height-comfortable);--bv-ui-check-size:var(--bv-ui-check-size-comfortable)}.bv-density-compact{--bv-ui-control-height:var(--bv-ui-control-height-compact);--bv-ui-field-gap:var(--bv-ui-field-gap-compact);--bv-ui-content-padding:var(--bv-ui-content-padding-compact);--bv-ui-row-height:var(--bv-ui-row-height-compact);--bv-ui-textarea-height:var(--bv-ui-textarea-height-compact);--bv-ui-check-size:var(--bv-ui-check-size-compact)}:is(.bv-ui,#bv-root,.bv-ui-portal),:is(.bv-ui,#bv-root,.bv-ui-portal) *,:is(.bv-ui,#bv-root,.bv-ui-portal) *:before,:is(.bv-ui,#bv-root,.bv-ui-portal) *:after{box-sizing:border-box}:is(.bv-ui,#bv-root,.bv-ui-portal) :where(button,input,select,textarea){box-sizing:border-box;margin:0;font:inherit;color:inherit;letter-spacing:inherit}:is(.bv-ui,#bv-root,.bv-ui-portal) :where(button){appearance:none}.bv-ui-dialog{width:min(680px,calc(100vw - 32px));max-height:min(86vh,900px);margin:auto;padding:0;overflow:hidden;color:var(--bv-ui-text);background:var(--bv-ui-surface);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius-lg);box-shadow:0 28px 90px #000c}.bv-ui-dialog--small{width:min(480px,calc(100vw - 32px))}.bv-ui-dialog--large{width:min(1040px,calc(100vw - 32px))}.bv-ui-dialog::backdrop{background:#08070a9e}.bv-ui-overlay{position:fixed;z-index:var(--bv-layer-modal);inset:0;display:grid;place-items:center;padding:16px;background:#08070a9e}.bv-ui-overlay--modeless{pointer-events:none;place-items:start end;background:transparent}.bv-ui-overlay--modeless>.bv-ui-dialog{pointer-events:auto}.bv-ui-dialog__header{display:flex;align-items:flex-start;gap:16px;padding:calc(15px * var(--bv-ui-scale)) calc(17px * var(--bv-ui-scale));background:var(--bv-ui-surface-raised);border-bottom:1px solid var(--bv-ui-border)}.bv-ui-dialog__header>div{min-width:0;flex:1}.bv-ui-dialog__header h2,.bv-ui-dialog__header p{margin:0}.bv-ui-dialog__header h2{font-size:calc(16px * var(--bv-ui-scale));line-height:1.3}.bv-ui-dialog__header p{margin-top:4px;color:var(--bv-ui-muted);font-size:calc(11px * var(--bv-ui-scale))}.bv-ui-dialog__body{display:grid;gap:calc(13px * var(--bv-ui-scale));max-height:calc(86vh - 132px);padding:calc(17px * var(--bv-ui-scale));overflow:auto}.bv-ui-dialog__footer{display:flex;justify-content:flex-end;flex-wrap:wrap;gap:calc(8px * var(--bv-ui-scale));padding:calc(11px * var(--bv-ui-scale)) calc(17px * var(--bv-ui-scale));background:var(--bv-ui-surface-raised);border-top:1px solid var(--bv-ui-border)}.bv-ui-button{display:inline-flex;align-items:center;justify-content:center;gap:7px;min-height:var(--bv-ui-control-height);padding:0 calc(13px * var(--bv-ui-scale));color:var(--bv-ui-text);background:var(--bv-ui-surface-raised);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius);cursor:pointer;transition:background-color .12s ease,border-color .12s ease,transform .08s ease}.bv-ui-button:hover:not(:disabled){background:#302d39;border-color:var(--bv-ui-border-hover)}.bv-ui-button:active:not(:disabled){transform:translateY(1px)}.bv-ui-button:focus-visible{outline:3px solid rgba(var(--bv-ui-accent-rgb),.25);outline-offset:2px}.bv-ui-button:disabled{opacity:.43;cursor:not-allowed}.bv-ui-button--primary{background:var(--bv-ui-accent);border-color:var(--bv-ui-accent-hover)}.bv-ui-button--primary:hover:not(:disabled){background:var(--bv-ui-accent-hover)}.bv-ui-button--ghost{color:var(--bv-ui-muted);background:transparent;border-color:transparent}.bv-ui-button--ghost:hover:not(:disabled){color:var(--bv-ui-text);background:#ffffff0f}.bv-ui-button--danger{background:#d35d7121;border-color:#d35d7152;color:#f19aa8}.bv-ui-button--icon{width:var(--bv-ui-control-height);padding:0;font-size:calc(20px * var(--bv-ui-scale));line-height:1}.bv-ui-field{display:grid;gap:calc(6px * var(--bv-ui-scale));min-width:0}.bv-ui-field__label{color:var(--bv-ui-muted);font-size:calc(11px * var(--bv-ui-scale))}.bv-ui-field__description{color:var(--bv-ui-muted);font-size:calc(10px * var(--bv-ui-scale));line-height:1.4}.bv-ui .bv-ui-field input,.bv-ui .bv-ui-field select,.bv-ui .bv-ui-field textarea{width:100%;min-height:var(--bv-ui-control-height);padding:0 calc(11px * var(--bv-ui-scale));color:var(--bv-ui-text);background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius);outline:0}.bv-ui .bv-ui-field textarea{min-height:120px;padding-block:10px;resize:vertical}.bv-ui .bv-ui-field input:focus,.bv-ui .bv-ui-field select:focus,.bv-ui .bv-ui-field textarea:focus{border-color:var(--bv-ui-accent);box-shadow:0 0 0 3px rgba(var(--bv-ui-accent-rgb),.18)}.bv-ui-status{min-height:1.45em;margin:0;color:var(--bv-ui-muted);font-size:calc(10px * var(--bv-ui-scale))}.bv-ui-status--error{color:#f19aa8}.bv-ui-card-list{display:grid;gap:calc(10px * var(--bv-ui-scale))}.bv-ui-card-list>.bv-detailer-card{background:#12111675;border-color:var(--bv-ui-border);border-radius:var(--bv-ui-radius-lg)}.bv-ui-stack{display:grid;gap:calc(13px * var(--bv-ui-scale));min-width:0}.bv-ui-inline-footer{display:flex;justify-content:flex-end;flex-wrap:wrap;gap:calc(8px * var(--bv-ui-scale));padding-top:calc(12px * var(--bv-ui-scale));border-top:1px solid var(--bv-ui-border)}.bv-smart-pipe-merge-source{align-items:end;justify-content:flex-start}.bv-smart-pipe-merge-source>.bv-control-field{flex:1 1 260px;min-width:min(260px,100%)}.bv-smart-pipe-merge-source>.bv-button{flex:0 0 auto}.inspector-tabs{position:sticky;z-index:3;top:0;display:flex;align-items:stretch;gap:2px;min-height:34px;padding:0 8px;background:var(--bv-ui-surface-raised);border-bottom:1px solid var(--bv-ui-border)}.inspector-tabs button{position:relative;min-width:0;min-height:34px;padding:0 10px;overflow:hidden;color:var(--bv-ui-muted);text-overflow:ellipsis;white-space:nowrap;background:transparent!important;border:0!important;border-radius:0!important;box-shadow:none!important;cursor:pointer}.inspector-tabs button:hover:not(:disabled){color:var(--bv-ui-text);background:#ffffff09!important}.inspector-tabs button[aria-selected=true]{color:var(--bv-ui-text)}.inspector-tabs button[aria-selected=true]:after{content:"";position:absolute;right:0;bottom:-1px;left:0;height:2px;background:var(--bv-ui-accent)}.inspector-tabs button:disabled{opacity:.38;cursor:not-allowed}.inspector-tab-panel[hidden]{display:none}.inspector-tab-panel{min-width:0}:root.bv-ui-reduced-effects .bv-ui *,:root.bv-ui-reduced-effects .bv-ui *:before,:root.bv-ui-reduced-effects .bv-ui *:after,:root.bv-ui-reduced-effects #bv-root *,:root.bv-ui-reduced-effects #bv-root *:before,:root.bv-ui-reduced-effects #bv-root *:after{animation:none!important;transition:none!important;backdrop-filter:none!important;filter:none!important}.bv-regional-dock-host{display:block!important;min-width:0;min-height:0}.bv-ui-dock{position:relative;width:100%;height:100%;min-width:0;min-height:0;overflow:hidden;--flexlayout-font-family:system-ui,-apple-system,"Segoe UI",sans-serif;--flexlayout-font-size:calc(12px * var(--bv-ui-scale));--flexlayout-color-text:var(--bv-ui-text);--flexlayout-color-background:var(--bv-ui-input);--flexlayout-color-base:var(--bv-ui-input);--flexlayout-color-1:var(--bv-ui-surface);--flexlayout-color-2:var(--bv-ui-surface-raised);--flexlayout-color-3:#20283a;--flexlayout-color-4:#263655;--flexlayout-color-5:#0a2665;--flexlayout-color-6:#0d3080;--flexlayout-color-focus:var(--bv-ui-accent);--flexlayout-color-icon:var(--bv-ui-muted);--flexlayout-color-splitter:rgba(231,225,247,.08);--flexlayout-color-splitter-hover:#4c74c9;--flexlayout-color-splitter-drag:#5a7dcd;--flexlayout-color-splitter-handle:#b2c2e6;--flexlayout-color-drag1:#7d97d7;--flexlayout-color-drag2:#5a7dcd;--flexlayout-color-drag1-background:rgba(var(--bv-ui-accent-rgb),.2);--flexlayout-color-drag2-background:rgba(var(--bv-ui-accent-rgb),.18);--flexlayout-color-drag-rect-border:#5a7dcd;--flexlayout-color-drag-rect-background:var(--bv-ui-surface-raised);--flexlayout-color-drag-rect:var(--bv-ui-text);--flexlayout-color-edge-marker:rgba(var(--bv-ui-accent-rgb),.72);--flexlayout-color-edge-icon:#fff;--flexlayout-color-toolbar-button-hover:rgba(var(--bv-ui-accent-rgb),.16);--flexlayout-splitter-size:9px;--flexlayout-splitter-active-size:13px;--flexlayout-splitter-handle-visibility:visible}.bv-ui-dock .flexlayout__splitter{transition:background-color .12s ease,box-shadow .12s ease}.bv-ui-dock .flexlayout__splitter:hover{box-shadow:0 0 12px rgba(var(--bv-ui-accent-rgb),.32)}.bv-ui-dock .flexlayout__splitter_handle_horz{width:2px;height:34px;opacity:.72}.bv-ui-dock .flexlayout__splitter_handle_vert{width:34px;height:2px;opacity:.72}.bv-ui-dock .flexlayout__tabset_tabbar_outer{height:calc(37px * var(--bv-ui-scale));padding:calc(8px * var(--bv-ui-scale)) 6px 0;background:var(--bv-ui-surface-raised);border-bottom:1px solid var(--bv-ui-border)}.bv-ui-dock .flexlayout__tabset_tabbar_inner{height:calc(29px * var(--bv-ui-scale));gap:2px;align-items:stretch}.bv-ui-dock .flexlayout__tab_button{position:relative;min-height:calc(29px * var(--bv-ui-scale));padding:0 calc(10px * var(--bv-ui-scale));color:var(--bv-ui-muted);background:transparent;border:1px solid transparent;border-bottom:0;border-radius:var(--bv-ui-radius-sm) var(--bv-ui-radius-sm) 0 0}.bv-ui-dock .flexlayout__tab_button--selected{color:var(--bv-ui-text);background:#fff1;border-color:#ffffff0b}.bv-ui-dock .flexlayout__tab_button--selected:after{content:"";position:absolute;right:-1px;bottom:-1px;left:-1px;height:2px;background:var(--bv-ui-accent)}.bv-ui-dock .flexlayout__tab_toolbar_button{width:29px;height:29px;padding:6px;color:var(--bv-ui-muted);border:0;background:transparent}.bv-ui-dock .flexlayout__float_window_content .flexlayout__tab_toolbar_button-float{display:none}.bv-ui-dock .flexlayout__tab{overflow:hidden;background:var(--bv-ui-surface)}.bv-ui-dock .bv-regional-work,.bv-ui-dock aside{width:100%;height:100%;min-width:0;min-height:0}.bv-dialog{width:min(900px,92vw);max-height:84vh}.bv-rack{width:100%;max-height:84vh;overflow:auto;padding:calc(18px * var(--bv-ui-scale));border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius-lg);background:var(--bv-ui-surface);box-shadow:0 18px 60px #0009}.bv-rack header,.bv-rack footer,.bv-control-title,.bv-assignments>div{display:flex;align-items:center;gap:10px}.bv-rack header{justify-content:space-between;border-bottom:1px solid #ffffff20;margin-bottom:16px}.bv-rack h2{margin:0}.bv-rack p{margin-top:4px;color:var(--bv-muted-text-color)}.bv-force{display:flex;gap:8px;padding:10px 12px;background:#ffffff08;border-radius:var(--bv-ui-radius)}.bv-controls{display:grid;gap:12px;margin:16px 0}.bv-control-card{border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius-lg);padding:calc(12px * var(--bv-ui-scale));background:#ffffff09}.bv-control-title input{flex:1;font-weight:650}.bv-control-title span{color:var(--bv-muted-text-color)}.bv-assignments{display:grid;gap:6px;margin:10px 0}.bv-assignments>div span{flex:1}.bv-assignments>div span small{display:block;margin-top:3px;color:#ffbd66}.bv-assignments .conflict{border-left:2px solid #ffbd66;padding-left:8px}.bv-assignments .unresolved{color:#ff9f7a}.bv-rack input,.bv-rack select,.bv-rack button{min-height:var(--bv-ui-control-height);color:inherit;background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius);padding:7px 9px}.bv-rack button{cursor:pointer}.bv-rack button.primary{background:var(--bv-ui-accent);border-color:var(--bv-ui-accent-hover)}.bv-rack footer{justify-content:flex-end}.bv-regional-shell{position:fixed;z-index:var(--bv-layer-window);box-sizing:border-box;display:flex;flex-direction:column;min-width:0;min-height:0;resize:none;overflow:hidden;color:var(--bv-ui-text);background:var(--bv-ui-surface);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius-lg);box-shadow:0 20px 70px #000b;font:calc(12px * var(--bv-ui-scale))/1.4 system-ui,-apple-system,"Segoe UI",sans-serif}.bv-regional-shell.floating{resize:both;box-shadow:0 14px 48px #000c}.bv-regional-shell *{box-sizing:border-box}.bv-regional-shell header,.bv-regional-shell nav,.bv-regional-shell footer{display:flex;align-items:center;gap:8px;padding:9px 12px;border-bottom:1px solid #ffffff18}.bv-regional-shell header strong{font-size:16px}.bv-regional-shell .window-drag-handle{display:flex;flex:1;align-items:center;justify-content:center;gap:6px;min-width:150px;padding:4px 10px;border-radius:var(--bv-ui-radius-sm)}.bv-regional-shell .window-drag-handle>span{color:var(--bv-muted-text-color);font-size:18px}.bv-regional-shell.floating header,.bv-regional-shell.floating .window-drag-handle{cursor:move;user-select:none;touch-action:none}.bv-regional-shell.floating .window-drag-handle:hover{background:#ffffff0b}.bv-regional-shell nav .spacer{flex:1}.bv-brush-options{display:flex;align-items:center;gap:14px;padding:7px 12px;border-bottom:1px solid #ffffff18;background:#ffffff05}.bv-brush-options label{display:flex;align-items:center;gap:6px}.bv-brush-options input[type=range]{width:110px;padding:0}.bv-brush-options output{min-width:48px;color:var(--bv-muted-text-color)}.bv-regional-shell main{display:grid;grid-template-columns:190px minmax(300px,1fr) 290px;flex:1;min-height:0}.bv-regional-shell aside{overflow:auto;padding:10px;border-right:1px solid #ffffff18}.bv-regional-shell .inspector{display:grid;align-content:start;gap:10px;border:0;border-left:1px solid #ffffff18}.bv-regional-shell .inspector label{display:grid;gap:4px}.region-row{display:flex;align-items:center;gap:8px;margin-top:6px;padding:7px;border:1px solid transparent;border-radius:var(--bv-ui-radius-sm);cursor:pointer}.region-row.selected{border-color:var(--bv-primary-color);background:#ffffff0b}.region-row i{width:12px;height:12px;border-radius:50%}.region-row span{flex:1;overflow:hidden;text-overflow:ellipsis}.region-row button,.geometry-row button{padding:2px 4px;border:0;background:transparent}.region-group{border:1px solid transparent;border-radius:var(--bv-ui-radius);margin-top:6px}.region-group.selected{border-color:#fff2;background:#ffffff05}.geometry-layers{padding:0 5px 6px 20px}.geometry-row{display:grid;grid-template-columns:20px minmax(0,1fr) 24px 24px 20px;align-items:center;gap:3px;padding:4px;border-radius:var(--bv-ui-radius-sm);cursor:pointer;color:var(--bv-muted-text-color)}.geometry-row.selected{color:var(--bv-text-color);background:#ffffff12;outline:1px solid var(--bv-primary-color)}.geometry-row.selected:not(.primary-selection){outline-color:color-mix(in srgb,var(--bv-primary-color) 55%,transparent)}.geometry-row span:nth-child(2){overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bv-regional-work{position:relative;min-width:0;min-height:0;overflow:hidden;background:#0f1114}.artboard-viewport{position:absolute;inset:0;overflow:hidden;touch-action:none;user-select:none}.artboard-viewport.pan-ready{cursor:grab}.artboard-viewport.pan-ready:active{cursor:grabbing}.artboard-stage{position:absolute;top:0;left:0;transform-origin:0 0;will-change:transform}.bv-regional-canvas{position:relative;background-color:#24282d;background-image:linear-gradient(45deg,#2c3137 25%,transparent 25%),linear-gradient(-45deg,#2c3137 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#2c3137 75%),linear-gradient(-45deg,transparent 75%,#2c3137 75%);background-size:24px 24px;background-position:0 0,0 12px,12px -12px,-12px 0;touch-action:none;user-select:none;box-shadow:0 4px 28px #000a}.bv-background-image{position:absolute;inset:0;background-size:cover;background-repeat:no-repeat;pointer-events:none}.bv-composition,.bv-selection-overlay,.bv-tool-preview{position:absolute;inset:0;width:100%;height:100%}.bv-composition{pointer-events:none}.bv-selection-overlay,.bv-tool-preview{overflow:visible;pointer-events:none}.bv-tool-preview .tool-preview-shape{fill:color-mix(in srgb,#55e6ff 15%,transparent);stroke:#55e6ff;stroke-width:2.5;vector-effect:non-scaling-stroke;filter:drop-shadow(0 0 2px #000)}.bv-tool-preview .tool-preview-shape.subtract{fill:color-mix(in srgb,#ff5f6d 18%,transparent);stroke:#ff5f6d;stroke-dasharray:8 5}.bv-tool-preview path.tool-preview-shape{fill:none;stroke-opacity:.75}.bv-tool-preview .tool-preview-vertex{fill:#55e6ff;stroke:#071014;stroke-width:1.5;vector-effect:non-scaling-stroke}.bv-tool-preview .tool-preview-vertex.subtract{fill:#ff5f6d}.bv-selection-overlay .tool-preview-size{fill:#fff;font:600 12px sans-serif;text-anchor:end;paint-order:stroke;stroke:#101419;stroke-width:4px;stroke-linejoin:round;vector-effect:non-scaling-stroke}.bv-selection-overlay .rect-bounds{fill:none;stroke:#fff;stroke-width:2;vector-effect:non-scaling-stroke}.bv-selection-overlay .brush-bounds{fill:rgba(var(--bv-ui-accent-rgb),.035);stroke:var(--bv-ui-accent);stroke-width:2;stroke-dasharray:7 5;vector-effect:non-scaling-stroke;filter:drop-shadow(0 0 3px rgba(var(--bv-ui-accent-rgb),.45))}.bv-selection-overlay .resize-handle{pointer-events:all}.bv-selection-overlay .resize-handle-hit{fill:transparent;stroke:none}.bv-selection-overlay .resize-handle-visible{fill:var(--bv-ui-accent);stroke:#f7f3ff;stroke-width:1.5;vector-effect:non-scaling-stroke;filter:drop-shadow(0 1px 2px #000b)}.bv-selection-overlay .resize-handle-nw,.bv-selection-overlay .resize-handle-se{cursor:nwse-resize}.bv-selection-overlay .resize-handle-ne,.bv-selection-overlay .resize-handle-sw{cursor:nesw-resize}.bv-selection-overlay .resize-handle-n,.bv-selection-overlay .resize-handle-s{cursor:ns-resize}.bv-selection-overlay .resize-handle-e,.bv-selection-overlay .resize-handle-w{cursor:ew-resize}.brush-cursor{position:absolute;translate:-50% -50%;display:grid;place-items:center;border:1px solid white;outline:1px solid #0009;pointer-events:none}.brush-cursor.round{border-radius:50%}.brush-cursor i{display:block;border:1px dashed #fff9}.brush-cursor.round i{border-radius:50%}.bv-regional-canvas.tool-brush-add,.bv-regional-canvas.tool-brush-subtract{cursor:none}.bounds-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px}.bounds-grid label{min-width:0}.bounds-grid input{width:100%}.layer-actions{display:grid;grid-template-columns:1fr 1fr;gap:6px}.bv-regional-shell details{border:1px solid #ffffff18;border-radius:var(--bv-ui-radius-sm);padding:7px}.bv-regional-shell details summary{cursor:pointer}.bv-regional-shell details[open] summary{margin-bottom:8px}.bv-regional-shell footer{justify-content:space-between;border-top:1px solid #ffffff18;border-bottom:0}.bv-regional-shell footer.has-warning{color:#ffcc7a}.bv-regional-shell footer span:first-child{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bv-regional-shell .option-section label>small{color:var(--bv-muted-text-color)}.bv-panel-header{display:flex;align-items:center;gap:var(--bv-ui-content-padding);min-height:var(--bv-ui-row-height);padding:var(--bv-ui-field-gap) var(--bv-ui-content-padding);color:var(--bv-ui-text);background:var(--bv-ui-surface-raised);border-bottom:1px solid var(--bv-ui-border)}.bv-panel-header>div:not(.bv-panel-actions){display:grid;flex:1;min-width:0;gap:1px}.bv-panel-header strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bv-panel-header small{color:var(--bv-ui-muted);font-size:.84em}.bv-panel-header-icon{width:20px;height:20px;flex:none;padding:2px;color:var(--bv-ui-accent-soft);fill:none;stroke:currentColor;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}.bv-panel-actions{display:flex;align-items:center;justify-content:flex-end;gap:var(--bv-ui-field-gap);margin-left:auto}.bv-panel-header .bv-panel-actions .bv-button svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round}.bv-panel-footer{display:flex;align-items:center;justify-content:space-between;gap:var(--bv-ui-content-padding);min-height:var(--bv-ui-row-height);padding:var(--bv-ui-field-gap) var(--bv-ui-content-padding);color:var(--bv-ui-muted);background:var(--bv-ui-surface-raised);border-top:1px solid var(--bv-ui-border)}.bv-panel-status{min-width:0}.bv-panel-footer .bv-panel-actions{flex:none}.bv-quick-prompt-body{display:grid;grid-template-rows:auto auto minmax(0,1fr);gap:var(--bv-ui-content-padding);min-height:0;height:100%}.bv-prompt-editor-fields{display:grid;grid-template-rows:minmax(120px,3fr) minmax(100px,2fr);gap:var(--bv-ui-content-padding);min-width:0;min-height:0;height:100%}.bv-prompt-editor-fields>.bv-control-field{display:grid;grid-template-rows:auto minmax(0,1fr);align-self:stretch;align-content:stretch;min-height:0}.bv-prompt-editor-fields .bv-adaptive-field,.bv-prompt-editor-fields .bv-textarea-shell{min-height:0;height:100%}.bv-prompt-editor-fields textarea{min-height:0!important;max-height:none;height:100%;resize:none}.bv-regional-action{display:inline-flex!important;align-items:center;justify-content:center;width:38px;min-width:38px;height:36px;padding:0!important;color:#d8d8dc!important;background:#18191c!important;border:1px solid #ffffff1f!important;border-radius:var(--bv-ui-radius-sm)!important;box-shadow:inset 0 1px #ffffff0a;transition:background-color .12s ease,border-color .12s ease}.bv-regional-action:hover{color:#fff!important;background:#292a2f!important;border-color:#ffffff35!important}.bv-regional-action>i{display:none!important}.bv-regional-action:before{content:"";display:block;width:20px;height:20px;background-color:currentColor;mask-repeat:no-repeat;mask-position:center;mask-size:contain;-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;-webkit-mask-size:contain}.bv-regional-action-editor:before{mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='black' d='M4 3h16a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2Zm0 5v11h4V8H4Zm6 0v11h10V8H10Zm0-3v1h10V5H10ZM4 5v1h4V5H4Z'/%3E%3C/svg%3E");-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='black' d='M4 3h16a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2Zm0 5v11h4V8H4Zm6 0v11h10V8H10Zm0-3v1h10V5H10ZM4 5v1h4V5H4Z'/%3E%3C/svg%3E")}.bv-regional-action-quick:before{mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='black' d='M5 3h9v2H5v14h14v-9h2v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2Zm13.7-.7 3 3L11 16H8v-3L18.7 2.3Zm0 2.8L10 13.8V14h.2l8.7-8.9-.2-.2Z'/%3E%3C/svg%3E");-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='black' d='M5 3h9v2H5v14h14v-9h2v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2Zm13.7-.7 3 3L11 16H8v-3L18.7 2.3Zm0 2.8L10 13.8V14h.2l8.7-8.9-.2-.2Z'/%3E%3C/svg%3E")}.bv-regional-action-menu{width:18px!important;min-width:18px!important;margin-left:-3px;border-radius:0 var(--bv-ui-radius-sm) var(--bv-ui-radius-sm) 0!important}.bv-regional-action-quick{border-radius:var(--bv-ui-radius-sm) 0 0 var(--bv-ui-radius-sm)!important}.bv-regional-action-menu:before{width:10px;height:10px;mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='black' d='m6 9 6 6 6-6Z'/%3E%3C/svg%3E");-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='black' d='m6 9 6 6 6-6Z'/%3E%3C/svg%3E")}.bv-toolbar-window-launcher{position:fixed;z-index:var(--bv-layer-flyout);display:grid;grid-template-rows:minmax(0,1fr) auto;max-width:calc(100vw - 24px);max-height:min(420px,calc(100vh - 84px));overflow:hidden;color:var(--bv-ui-text);background:var(--bv-ui-surface-raised);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius);box-shadow:0 18px 48px #000c}.bv-toolbar-window-launcher__body{display:grid;grid-template-columns:repeat(var(--bv-launcher-columns),minmax(180px,210px));min-height:0;overflow:auto}.bv-toolbar-window-launcher section{display:grid;grid-template-rows:auto minmax(0,1fr);min-width:0;padding:3px}.bv-toolbar-window-launcher section+section{border-left:1px solid var(--bv-ui-border)}.bv-toolbar-window-launcher h3{margin:0;padding:4px 6px 5px;color:var(--bv-ui-muted);font-size:calc(9px * var(--bv-ui-scale));font-weight:650;letter-spacing:.04em;text-transform:uppercase}.bv-toolbar-window-launcher section>div{display:grid;align-content:start;gap:1px;min-height:0;overflow-y:auto}.bv-toolbar-launcher-row{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center}.bv-toolbar-launcher-row.is-hidden{opacity:.68}.bv-toolbar-launcher-reveal{width:26px;height:26px;padding:0;color:var(--bv-ui-muted);background:transparent;border:0;border-radius:var(--bv-ui-radius-xs);cursor:pointer}.bv-toolbar-launcher-reveal:hover{color:var(--bv-ui-text);background:var(--bv-ui-surface-hover)}.bv-toolbar-window-launcher .bv-button{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;justify-content:stretch;justify-items:start;gap:8px;min-width:0;min-height:26px;padding:2px 6px;text-align:left}.bv-toolbar-window-launcher .bv-button>span,.bv-toolbar-window-launcher .bv-button>small{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bv-toolbar-window-launcher .bv-button>small{justify-self:end;color:var(--bv-ui-muted);font-size:calc(9px * var(--bv-ui-scale))}.bv-toolbar-window-launcher .bv-button:disabled{opacity:.55}.bv-toolbar-window-launcher>footer{position:sticky;bottom:0;padding:5px 8px;background:var(--bv-ui-surface-raised);border-top:1px solid var(--bv-ui-border)}.bv-toolbar-launcher-empty{display:grid;gap:3px;padding:18px;color:var(--bv-ui-muted)}@media (max-width:760px){.bv-toolbar-window-launcher{width:min(320px,calc(100vw - 24px))}.bv-toolbar-window-launcher__body{grid-template-columns:minmax(190px,1fr)}.bv-toolbar-window-launcher section+section{border-top:1px solid var(--bv-ui-border);border-left:0}}.bv-toolbar-window-launcher{z-index:var(--bv-layer-flyout)}.bv-completion-popup{position:fixed;z-index:var(--bv-layer-flyout);max-height:calc(240px * var(--bv-ui-scale));overflow:auto;padding:4px;color:var(--bv-ui-text);background:var(--bv-ui-input);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius);box-shadow:0 10px 32px #000c;font:calc(12px * var(--bv-ui-scale))/1.4 system-ui,-apple-system,"Segoe UI",sans-serif}.bv-completion-popup button{display:grid;width:100%;gap:0;padding:5px 8px;color:var(--bv-ui-text);text-align:left;background:transparent;border:0;border-radius:var(--bv-ui-radius-sm);cursor:pointer}.bv-completion-popup .bv-button{min-height:0;justify-content:stretch;justify-items:start}.bv-completion-popup button:hover,.bv-completion-popup button.active{background:rgba(var(--bv-ui-accent-rgb),.24);color:var(--bv-ui-text)}.bv-completion-popup button:hover small,.bv-completion-popup button.active small{color:#dcefff}.bv-completion-popup small{overflow:hidden;color:var(--bv-ui-muted);font-size:calc(10px * var(--bv-ui-scale));text-overflow:ellipsis;white-space:nowrap}.completion-menu{min-width:320px}.completion-dataset-picker{display:grid;gap:6px;padding:5px 8px 8px}.completion-dataset-picker>label{display:grid;grid-template-columns:auto minmax(0,1fr) auto auto;align-items:center;gap:7px}.completion-dataset-picker>label span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.completion-dataset-picker>label small{color:var(--bv-muted-text-color)}.completion-dataset-picker .dataset-error{color:#ffaca6;white-space:normal}.bv-settings-datasets{display:grid;gap:8px;width:min(680px,100%)}.bv-settings-datasets>small{color:var(--descrip-text, #a1a1aa)}.bv-settings-datasets>div{display:grid;gap:6px}.bv-settings-datasets label{display:grid;grid-template-columns:auto minmax(0,1fr) auto auto;align-items:center;gap:9px;padding:7px 9px;border:1px solid var(--border-color, #ffffff24);border-radius:var(--bv-ui-radius)}.bv-settings-datasets label span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bv-settings-datasets label small{color:var(--descrip-text, #a1a1aa)}.bv-settings-datasets .dataset-error{color:#ffaca6}.dataset-order{display:inline-flex;gap:3px}.dataset-order button{min-width:24px;padding:1px 5px}.bv-regional-error{margin:20px;padding:15px;color:#ffaca6;border:1px solid #ff756d;border-radius:var(--bv-ui-radius)}.editor-menus{display:flex;align-items:center;gap:2px}.menu-item{position:relative}.editor-menus>.menu-item>button{padding:4px 7px;border-color:transparent;background:transparent}.menu-popover,.toolbar-popover{position:absolute;z-index:20;top:calc(100% + 5px);left:0;display:grid;min-width:230px;padding:7px;border:1px solid var(--bv-border-color);border-radius:var(--bv-ui-radius);background:var(--comfy-menu-bg, #20242a);box-shadow:0 12px 35px #000b}.menu-popover button{display:flex;justify-content:space-between;border-color:transparent;background:transparent;text-align:left}.menu-popover button:hover{background:#ffffff12}.menu-popover hr{width:100%;border:0;border-top:1px solid #ffffff18}.menu-popover kbd{color:var(--bv-muted-text-color)}.view-menu label{display:grid;grid-template-columns:1fr auto;gap:7px}.view-menu input{grid-column:1 / -1;width:100%;padding:0}.view-menu small{padding:5px 7px;color:var(--bv-muted-text-color)}.help-menu{width:min(680px,calc(100vw - 40px));grid-template-columns:repeat(2,minmax(280px,1fr));gap:18px}.help-section{min-width:0}.help-section strong{display:block;margin-bottom:8px}.help-section dl{display:grid;grid-template-columns:minmax(135px,auto) minmax(110px,1fr);gap:5px 12px;margin:0}.help-section dt{color:#8fd2ff;white-space:nowrap}.help-section dd{min-width:0;margin:0;color:var(--bv-muted-text-color)}@media (max-width: 720px){.help-menu{width:calc(100vw - 40px);grid-template-columns:1fr;max-height:calc(100vh - 90px);overflow:auto}}.help-button{width:29px;border-radius:50%!important}.toolbar-popover-anchor{position:relative}.toolbar-popover{right:0;left:auto;gap:7px}.toolbar-popover label{display:grid;grid-template-columns:65px 1fr;align-items:center}.toolbar-popover input{width:120px!important}.panel-splitter{position:relative;cursor:col-resize;background:#ffffff0b;border-left:1px solid #ffffff12;border-right:1px solid #0008}.panel-splitter:hover,.panel-splitter:active{background:var(--bv-primary-color)}.bv-regional-shell main>aside{min-width:0}.bv-regional-shell .layers{display:flex;flex-direction:column;padding:8px}.panel-toolbar{display:flex;align-items:center;gap:3px;margin-bottom:7px;padding:4px;background:#ffffff06;border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.panel-toolbar-spacer{flex:1}.panel-toolbar .panel-tool{display:flex;align-items:center;justify-content:center;gap:5px;min-width:28px;height:28px;min-height:28px;padding:0 6px;color:var(--bv-ui-muted);background:transparent;border:1px solid transparent;border-radius:var(--bv-ui-radius-sm)}.panel-toolbar .panel-tool.primary{color:var(--bv-ui-accent-soft);background:rgba(var(--bv-ui-accent-rgb),.11);border-color:rgba(var(--bv-ui-accent-rgb),.2)}.panel-toolbar .panel-tool:hover:not(:disabled){color:var(--bv-ui-text);background:#fff1;border-color:#ffffff14}.panel-toolbar .panel-tool.danger:not(:disabled){color:#e68f8a}.panel-toolbar .panel-tool:disabled{opacity:.35;cursor:default}.panel-toolbar .panel-tool .tree-control-icon{width:15px;height:15px}.panel-toolbar .panel-tool span{flex:none}.region-row{position:relative;display:grid;grid-template-columns:18px 20px 14px minmax(55px,1fr) auto auto 25px 27px 20px}.region-row .region-expand{display:grid;place-items:center;width:20px;min-width:20px;height:24px;min-height:24px;padding:0;color:var(--bv-ui-muted)}.region-row .region-usage{flex:none;color:var(--bv-muted-text-color);font-size:10px;letter-spacing:.03em}.region-row .priority{flex:none;color:var(--bv-muted-text-color);font-size:11px}.layer-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.inline-name{min-width:0;width:100%;padding:2px 4px!important}.geometry-row{position:relative;margin-bottom:3px}.geometry-tree-item{margin-bottom:4px}.geometry-row{grid-template-columns:18px 20px 22px minmax(0,1fr) 25px 27px 20px 24px;margin-bottom:0}.geometry-row .layer-expand{display:grid;place-items:center;width:20px;min-width:20px;height:24px;min-height:24px;padding:0;color:var(--bv-ui-muted)}.bv-regional-shell .tree-control-icon{display:block;width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.75;stroke-linecap:round;stroke-linejoin:round;pointer-events:none}.bv-regional-shell .tree-control-icon circle[r="1"]{fill:currentColor;stroke:none}.bv-regional-shell .tree-icon-button{display:grid;place-items:center;width:24px;min-width:24px;height:24px;min-height:24px;padding:0;color:var(--bv-ui-muted);background:transparent;border:0;border-radius:var(--bv-ui-radius-sm)}.bv-regional-shell .tree-icon-button:hover{color:var(--bv-ui-text);background:#ffffff0e}.bv-regional-shell .tree-icon-button.deviant{color:#e2b96e;background:#e2b96e13}.bv-regional-shell .tree-icon-button.deviant:hover{color:#f0cc88;background:#e2b96e21}.bv-regional-shell .tree-check{display:grid;place-items:center;align-self:center;width:16px;min-width:16px;height:16px;min-height:16px;padding:0;color:var(--bv-ui-muted);background:transparent;border:1px solid color-mix(in srgb,var(--bv-ui-muted) 72%,transparent);border-radius:var(--bv-ui-radius-sm);box-shadow:none}.bv-regional-shell .tree-check[aria-checked=true]{color:var(--bv-ui-muted);border-color:color-mix(in srgb,var(--bv-ui-muted) 72%,transparent);background:transparent}.bv-regional-shell .tree-check.deviant{color:#e2b96e;border-color:#e2b96eb8;background:#e2b96e13}.bv-regional-shell .tree-check:hover{color:var(--bv-ui-text);border-color:var(--bv-ui-text);background:#ffffff09}.bv-regional-shell .tree-check.deviant:hover{color:#f0cc88;border-color:#e2b96e;background:#e2b96e21}.bv-regional-shell .tree-check .tree-control-icon{width:13px;height:13px;stroke-width:2.2}.bv-regional-shell .layer-overflow{position:relative;margin:0;padding:0!important;border:0!important;border-radius:0}.bv-regional-shell .layer-overflow>summary{display:grid;place-items:center;width:24px;height:24px;margin:0!important;padding:0;color:var(--bv-ui-muted);border-radius:var(--bv-ui-radius-sm);cursor:pointer;list-style:none}.bv-regional-shell .layer-overflow>summary::-webkit-details-marker{display:none}.bv-regional-shell .layer-overflow>summary:hover,.bv-regional-shell .layer-overflow[open]>summary{color:var(--bv-ui-text);background:#ffffff12}.bv-regional-shell .layer-overflow>div{position:absolute;z-index:30;top:calc(100% + 4px);right:0;display:grid;gap:2px;min-width:142px;padding:4px;background:var(--bv-ui-surface-raised);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius);box-shadow:0 10px 28px #00000061}.bv-regional-shell .layer-overflow>div>button{width:100%;min-height:28px;padding:4px 8px;text-align:left;white-space:nowrap}.geometry-operations{position:relative;display:grid;gap:2px;margin:2px 0 5px 20px;padding-left:12px;border-left:1px solid rgba(var(--bv-ui-accent-rgb),.28)}.geometry-operation{position:relative;display:grid;grid-template-columns:18px minmax(0,1fr) 24px 24px;align-items:center;gap:3px;min-height:32px;padding:3px 4px;color:var(--bv-ui-muted);border:1px solid transparent;border-radius:var(--bv-ui-radius-sm)}.geometry-operation:hover{color:var(--bv-ui-text);background:#ffffff0b}.geometry-operation.selected{color:var(--bv-ui-text);background:rgba(var(--bv-ui-accent-rgb),.14);border-color:rgba(var(--bv-ui-accent-rgb),.36);box-shadow:inset 2px 0 0 var(--bv-ui-accent)}.geometry-operation-select{display:grid!important;grid-template-columns:22px minmax(0,1fr) auto;align-items:center;gap:5px;min-width:0;min-height:24px;padding:0!important;color:inherit;text-align:left;background:transparent!important;border:0!important;box-shadow:none!important}.geometry-operation-select>span:nth-child(2){overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.geometry-operation small{color:var(--bv-ui-muted);font-size:calc(9px * var(--bv-ui-scale));text-transform:capitalize}.geometry-operation>button:not(.geometry-operation-select){display:grid;place-items:center;min-width:24px;min-height:24px;padding:0;background:transparent;border:0}.operation-kind{display:grid;place-items:center;width:20px;height:20px;border-radius:var(--bv-ui-radius-sm);font-weight:800}.operation-kind.add{color:var(--bv-ui-accent-soft);background:rgba(var(--bv-ui-accent-rgb),.16)}.operation-kind.subtract{color:#f0c275;background:#e9b65f21}.bv-regional-shell .tree-drag-handle{display:grid;place-items:center;width:18px;min-width:18px;height:24px;min-height:24px;padding:0;color:var(--bv-ui-muted);background:transparent;border:0;border-radius:var(--bv-ui-radius-sm);cursor:grab;opacity:.62}.bv-regional-shell .tree-drag-handle:hover{color:var(--bv-ui-text);background:#ffffff12;opacity:1}.bv-regional-shell .tree-drag-handle:active{cursor:grabbing}.drop-target.drop-inside{background:rgba(var(--bv-ui-accent-rgb),.14)!important;outline:1px solid rgba(var(--bv-ui-accent-rgb),.7)!important}.drop-target.drop-before:before,.drop-target.drop-after:after{content:"";position:absolute;z-index:4;left:4px;right:4px;height:2px;background:var(--bv-ui-accent);border-radius:var(--bv-ui-radius-sm);box-shadow:0 0 0 2px rgba(var(--bv-ui-accent-rgb),.12)}.drop-target.drop-before:before{top:-2px}.drop-target.drop-after:after{bottom:-2px}.option-section{display:grid;gap:8px;padding:10px 0;border-bottom:1px solid #ffffff18}.option-section:first-child{padding-top:0}.option-section h3{margin:0;font-size:14px}.option-hint{padding:10px;border:1px dashed #ffffff22;border-radius:var(--bv-ui-radius-sm);color:var(--bv-muted-text-color)}.inspector details textarea{min-height:90px}.stroke-width-meta{color:var(--bv-muted-text-color);font-variant-numeric:tabular-nums}.inspector-density{width:100%;height:100%;min-height:0}.region-color-control{display:block;padding:8px;border:1px solid #ffffff18;border-radius:var(--bv-ui-radius)}.region-color-split{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:end}.region-color-split>.bv-button{width:30px;min-width:30px;margin-bottom:1px;margin-left:-1px;border-radius:0 var(--bv-ui-radius) var(--bv-ui-radius) 0}.region-color-split>.bv-control-field .bv-color-field{border-radius:var(--bv-ui-radius) 0 0 var(--bv-ui-radius)}.region-color-control>.bv-control-field{min-width:0}.region-color-control>.bv-button{align-self:center}.bv-regional-shell header{min-height:38px;padding:5px 8px;gap:7px}.bv-regional-shell header strong{font-size:13px;white-space:nowrap}.menu-popover{font-size:13px;line-height:1.25}.menu-popover button{min-height:27px;padding:5px 7px}.menu-popover small{padding:5px 7px;color:var(--bv-muted-text-color)}.artboard-menu{gap:7px}.artboard-menu label{display:grid;grid-template-columns:65px 1fr;align-items:center}.artboard-menu input{width:130px}.bv-regional-shell[hidden]{display:none!important}.bv-managed-window{position:fixed;z-index:var(--bv-layer-window);min-width:0;min-height:0;overflow:visible;color:var(--bv-ui-text);border-radius:var(--bv-ui-radius);box-shadow:0 20px 70px #000b;outline:0}.bv-managed-window-surface{display:grid;grid-template-rows:auto minmax(0,1fr) auto;width:100%;height:100%;overflow:hidden;background:var(--bv-ui-surface);border:1px solid var(--bv-ui-border-hover);border-radius:inherit}.bv-managed-window[hidden]{display:none!important}.bv-managed-window.floating{resize:none}.bv-managed-window.workspace{left:24px;top:58px;width:calc(100vw - 48px);height:calc(100vh - 82px);border-radius:var(--bv-ui-radius);resize:none}.bv-managed-window-body{min-width:0;min-height:0;padding:var(--bv-ui-content-padding);overflow:auto}.bv-managed-window.floating>.bv-ui-window-header{cursor:move;user-select:none;touch-action:none}.bv-managed-window .bv-ui-window-header button,.bv-managed-window .bv-ui-window-header select{cursor:pointer;user-select:auto}.bv-window-resize-handle{position:absolute;z-index:8;touch-action:none}.bv-window-resize-handle.n,.bv-window-resize-handle.s{right:10px;left:10px;height:5px;cursor:ns-resize}.bv-window-resize-handle.n{top:0}.bv-window-resize-handle.s{bottom:0}.bv-window-resize-handle.e,.bv-window-resize-handle.w{top:10px;bottom:10px;width:5px;cursor:ew-resize}.bv-window-resize-handle.e{right:0}.bv-window-resize-handle.w{left:0}.bv-window-resize-handle.ne,.bv-window-resize-handle.nw,.bv-window-resize-handle.se,.bv-window-resize-handle.sw{width:10px;height:10px}.bv-window-resize-handle.ne,.bv-window-resize-handle.sw{cursor:nesw-resize}.bv-window-resize-handle.nw,.bv-window-resize-handle.se{cursor:nwse-resize}.bv-window-resize-handle.n,.bv-window-resize-handle.ne,.bv-window-resize-handle.nw{top:0}.bv-window-resize-handle.s,.bv-window-resize-handle.se,.bv-window-resize-handle.sw{bottom:0}.bv-window-resize-handle.e,.bv-window-resize-handle.ne,.bv-window-resize-handle.se{right:0}.bv-window-resize-handle.w,.bv-window-resize-handle.nw,.bv-window-resize-handle.sw{left:0}.bv-ui-window-header{display:grid!important;grid-template-columns:minmax(320px,1fr) auto minmax(180px,1fr);align-items:center;gap:calc(8px * var(--bv-ui-scale));min-height:calc(34px * var(--bv-ui-scale))!important;padding:calc(2px * var(--bv-ui-scale)) calc(6px * var(--bv-ui-scale))!important;background:var(--bv-ui-surface-raised);border-bottom:1px solid var(--bv-ui-border)!important}.bv-managed-window .bv-ui-window-header{grid-template-columns:minmax(0,1fr) auto}.bv-managed-window .bv-ui-window-center:empty{display:none}.bv-managed-window .bv-ui-window-header:has(.bv-ui-window-center:not(:empty)){grid-template-columns:minmax(250px,1fr) auto minmax(78px,1fr)}.bv-regional-window-body{display:flex;flex-direction:column;min-width:0;min-height:0;padding:0;overflow:hidden}.bv-regional-window-body>.bv-regional-dock-host{flex:1;min-height:0}.bv-ui-window-identity{display:flex;align-items:center;gap:calc(7px * var(--bv-ui-scale));min-width:0;overflow:visible}.bv-ui-window-icon{display:grid;place-items:center;width:calc(25px * var(--bv-ui-scale));height:calc(25px * var(--bv-ui-scale));flex:0 0 calc(25px * var(--bv-ui-scale));color:var(--bv-ui-accent-soft);background:rgba(var(--bv-ui-accent-rgb),.13);border:1px solid rgba(var(--bv-ui-accent-rgb),.22);border-radius:var(--bv-ui-radius-sm)}.bv-ui-window-icon svg,.bv-ui-window-reset svg,.bv-ui-window-shelf-icon svg{width:calc(16px * var(--bv-ui-scale));height:calc(16px * var(--bv-ui-scale));fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}.bv-ui-window-icon .bv-brand-cyclone,.bv-ui-window-shelf-icon .bv-brand-cyclone{color:var(--bv-ui-accent-light);fill:currentColor;stroke:none}.bv-ui-window-title{flex:0 1 auto;min-width:0;overflow:hidden;font-size:calc(13px * var(--bv-ui-scale));text-overflow:ellipsis;white-space:nowrap}.bv-ui-window-title-short{display:none}@container bv-window-header (max-width:900px){.bv-ui-window-title:has(.bv-ui-window-title-short) .bv-ui-window-title-full{display:none}.bv-ui-window-title-short{display:inline}}.bv-ui-window-context{display:flex;align-items:center;gap:calc(5px * var(--bv-ui-scale));min-width:0;overflow:visible;color:var(--bv-ui-muted);font-size:calc(10px * var(--bv-ui-scale))}.bv-regional-shell .bv-ui-window-context select{width:min(240px,100%);min-width:0;height:auto;padding:0 18px 0 calc(5px * var(--bv-ui-scale));color:var(--bv-ui-muted);background-color:transparent;border:0;border-radius:0;font:inherit;text-overflow:ellipsis}.bv-regional-shell .bv-ui-window-context .bv-select-shell{width:min(240px,100%);min-height:calc(22px * var(--bv-ui-scale));overflow:visible;background:#ffffff06;border-color:var(--bv-ui-border);border-radius:var(--bv-ui-radius-sm);box-shadow:none}.bv-regional-shell .bv-ui-window-context .bv-select-shell:hover{background:#ffffff0b;border-color:var(--bv-ui-border)}.bv-regional-shell .bv-ui-window-context .bv-select-shell:focus-within{background:rgba(var(--bv-ui-accent-rgb),.07);border-color:rgba(var(--bv-ui-accent-rgb),.34);box-shadow:none}.bv-regional-shell .bv-ui-window-context .bv-select-shell:focus-within select{border-color:transparent;box-shadow:none;outline:0}.bv-regional-shell .bv-ui-window-context .bv-select-shell>.bv-chevron{right:calc(7px * var(--bv-ui-scale));color:var(--bv-ui-muted)}.bv-ui-window-center{display:flex;align-self:stretch;align-items:center;justify-content:center;min-width:0}.bv-ui-window-center .editor-menus{justify-content:center}.editor-menu-label-short{display:none}@container bv-window-header (max-width:560px){.editor-menu-label-full{display:none}.editor-menu-label-short{display:inline}.bv-ui-window-center .editor-menus .bv-button{min-width:22px;padding-inline:5px}}.bv-ui-window-controls{display:flex;align-items:center;justify-content:flex-end;gap:2px}.bv-ui-window-control{display:grid;place-items:center;width:calc(24px * var(--bv-ui-scale));height:calc(24px * var(--bv-ui-scale));min-height:0;padding:0;color:var(--bv-ui-muted);background:transparent;border:1px solid transparent;border-radius:var(--bv-ui-radius-sm);font-size:inherit}.bv-ui-window-control svg{width:calc(14px * var(--bv-ui-scale));height:calc(14px * var(--bv-ui-scale));fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}.bv-ui-window-control:hover{color:var(--bv-ui-text);background:#ffffff12;border-color:#e7e1f714}.bv-ui-window-control--close:hover{color:#ffd8df;background:#ee6f8321;border-color:#ee6f8333}.bv-regional-shell.floating .bv-ui-window-header{cursor:move;user-select:none;touch-action:none}.bv-regional-shell .bv-ui-window-header button,.bv-regional-shell .bv-ui-window-header select{cursor:pointer;user-select:auto}.bv-ui-window-footer{container:bv-window-footer / inline-size;display:grid!important;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:calc(10px * var(--bv-ui-scale));min-height:calc(38px * var(--bv-ui-scale));padding:calc(4px * var(--bv-ui-scale)) calc(7px * var(--bv-ui-scale)) calc(4px * var(--bv-ui-scale)) calc(9px * var(--bv-ui-scale))!important;background:#211f27;border-top:1px solid var(--bv-ui-border)!important;border-bottom:0!important}.bv-ui-window-status{display:flex;align-items:center;gap:var(--bv-ui-field-gap);min-width:0;overflow:hidden;color:var(--bv-ui-muted);font-size:calc(10px * var(--bv-ui-scale));white-space:nowrap;text-overflow:ellipsis}.bv-ui-window-status>span:first-child{overflow:hidden;min-width:0;text-overflow:ellipsis;white-space:nowrap}.bv-ui-window-footer.has-warning .bv-ui-window-status{color:#e9b65f}.bv-ui-window-footer-actions{display:flex;align-items:center;gap:calc(7px * var(--bv-ui-scale));margin-left:auto}.bv-ui-window-footer-actions .bv-button{white-space:nowrap}.bv-ui-window-footer-actions .bv-button>svg{width:calc(16px * var(--bv-ui-scale));height:calc(16px * var(--bv-ui-scale));flex:none;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}.bv-footer-action-set,.bv-footer-secondary-actions{display:flex;align-items:center;gap:5px}.bv-footer-action-set>.bv-menu-button{display:none}.bv-ui-window-footer.is-stacked{grid-template-columns:1fr}.bv-ui-window-footer.is-stacked .bv-ui-window-footer-actions{width:100%;margin-left:0;justify-content:flex-end}.bv-ui-window-footer.is-minimal .bv-footer-secondary-actions{display:none}.bv-ui-window-footer.is-minimal .bv-footer-action-set>.bv-menu-button{display:block}.bv-ui-window-footer.is-minimal .bv-ui-window-footer-actions>.bv-button:not(:last-child){display:none}.bv-regional-shell .bv-ui-window-reset{min-height:calc(29px * var(--bv-ui-scale));padding:0 calc(9px * var(--bv-ui-scale));font-size:calc(10px * var(--bv-ui-scale))}.bv-ui-window-shelf{position:fixed;z-index:var(--bv-layer-shelf);left:var(--bv-ui-window-shelf-left,calc(14px * var(--bv-ui-scale)));bottom:var(--bv-ui-window-shelf-bottom,calc(14px * var(--bv-ui-scale)));display:flex;align-items:flex-end;gap:calc(7px * var(--bv-ui-scale));pointer-events:none}.bv-ui-window-shelf-item{display:inline-flex;align-items:center;height:calc(36px * var(--bv-ui-scale));color:var(--bv-ui-muted);background:var(--bv-ui-surface-raised);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius);box-shadow:0 8px 24px #0006;font:calc(10px * var(--bv-ui-scale))/1.2 system-ui,-apple-system,"Segoe UI",sans-serif;pointer-events:auto;overflow:hidden}.bv-ui-window-shelf-restore,.bv-ui-window-shelf-close{align-self:stretch;display:inline-flex;align-items:center;color:inherit;background:transparent;border:0}.bv-ui-window-shelf-restore{gap:calc(7px * var(--bv-ui-scale));padding:0 calc(8px * var(--bv-ui-scale)) 0 calc(6px * var(--bv-ui-scale))}.bv-ui-window-shelf-close{padding:0 calc(7px * var(--bv-ui-scale));border-left:1px solid var(--bv-ui-border)}.bv-ui-window-shelf-close svg{width:calc(14px * var(--bv-ui-scale));fill:none;stroke:currentColor;stroke-width:1.7}.bv-ui-window-shelf-item:hover{color:var(--bv-ui-text);background:#2b2832;border-color:rgba(var(--bv-ui-accent-rgb),.3)}.bv-window-navigator{display:flex;align-items:center;gap:3px;min-width:0}.bv-window-navigator .bv-select-popover{width:clamp(112px,18vw,180px)}.bv-window-navigator .bv-select-trigger{min-height:22px;height:22px;padding:0 7px;gap:5px;color:var(--bv-ui-muted);background:#ffffff05;border-color:#e7e1f71a;border-radius:var(--bv-ui-radius-sm);font-size:10px;box-shadow:none}.bv-window-navigator .bv-select-trigger:hover:not(:disabled),.bv-window-navigator .bv-select-trigger[aria-expanded=true]{color:var(--bv-ui-text);background:#ffffff0b;border-color:#e7e1f72e;box-shadow:none}.bv-window-navigator .bv-select-trigger>span:first-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bv-window-navigator .bv-chevron{width:6px;height:6px}.bv-window-switch-mode{display:inline-flex;align-items:center;height:22px;padding:0 4px;color:var(--bv-ui-muted);background:transparent;border:1px solid transparent;border-radius:var(--bv-ui-radius-sm);font:inherit}.bv-window-switch-mode:hover{background:#ffffff0b;border-color:#e7e1f71a}.bv-window-switch-mode>span:last-child{display:none}.bv-window-switch-mode .bv-toggle-track{width:26px;height:14px;padding:1px}.bv-window-switch-mode .bv-toggle-track>span{width:10px;height:10px}.bv-window-switch-mode[aria-checked=true] .bv-toggle-track{background:rgba(var(--bv-ui-accent-rgb),.35);border-color:var(--bv-ui-accent)}.bv-window-switch-mode .bv-toggle-track>span{margin-left:0;transition:margin-left .15s}.bv-window-switch-mode[aria-checked=true] .bv-toggle-track>span{margin-left:auto;translate:0;transform:none;background:var(--bv-ui-accent-soft)}.bv-ui-window-header{container:bv-window-header / inline-size}.bv-window-navigator-overflow{position:relative}.bv-window-navigator-overflow>button{display:grid;place-items:center;width:22px;height:22px;padding:0;color:var(--bv-ui-muted);cursor:pointer;background:transparent;border:1px solid transparent;border-radius:var(--bv-ui-radius-sm)}.bv-window-navigator-overflow>button:hover,.bv-window-navigator-overflow>button[aria-expanded=true]{color:var(--bv-ui-text);background:#ffffff0b;border-color:var(--bv-ui-border)}.bv-window-navigator-menu{color:var(--bv-ui-text);background:var(--bv-ui-surface-raised);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius);box-shadow:0 14px 42px #000b}.bv-window-navigator-panel{display:grid;gap:7px;width:min(260px,calc(100vw - 24px));padding:8px}.bv-window-navigator-panel-row{display:flex;align-items:center;justify-content:space-between;gap:12px;min-width:0;color:var(--bv-ui-muted)}.bv-window-navigator-panel-row.is-node>.bv-select-popover{width:100%}.bv-ui-window-header.is-menu-overflow .bv-ui-window-title-full{display:none}.bv-ui-window-header.is-menu-overflow .bv-ui-window-title-short{display:inline}.bv-ui-window-shelf-icon{display:grid;place-items:center;width:calc(24px * var(--bv-ui-scale));height:calc(24px * var(--bv-ui-scale));color:var(--bv-ui-accent-soft);background:rgba(var(--bv-ui-accent-rgb),.14);border-radius:var(--bv-ui-radius-sm)}.artboard-tools{position:absolute;z-index:12;top:12px;left:12px;display:flex;align-items:flex-start;gap:7px;pointer-events:none}.artboard-tools .bv-toolbar{pointer-events:auto}.zoom-controls{position:absolute;z-index:12;bottom:12px;left:50%;display:flex;gap:3px;padding:4px;border:1px solid #ffffff2b;border-radius:var(--bv-ui-radius);background:color-mix(in srgb,var(--comfy-menu-bg, #20242a) 92%,transparent);box-shadow:0 8px 25px #0009;backdrop-filter:blur(8px);transform:translate(-50%)}.zoom-controls button{min-width:32px;height:28px;padding:3px 8px;border-color:transparent;background:transparent}.zoom-controls button:nth-child(2){min-width:66px}.zoom-controls button:hover{background:#ffffff15}.tool-palette,.brush-flyout{pointer-events:auto;border:1px solid #ffffff2b;border-radius:var(--bv-ui-radius);background:color-mix(in srgb,var(--comfy-menu-bg, #20242a) 92%,transparent);box-shadow:0 8px 25px #0009;backdrop-filter:blur(8px)}.tool-palette{display:grid;gap:3px;padding:4px}.tool-palette button{display:grid;place-items:center;width:34px;height:34px;padding:6px;border-color:transparent;background:transparent}.tool-palette button:hover:not(:disabled){background:#ffffff15}.tool-palette button.active{background:var(--bv-primary-color)}.tool-palette button:disabled{opacity:.3;cursor:not-allowed}.tool-palette svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.brush-flyout{display:grid;width:235px;gap:8px;padding:10px}.brush-flyout header{min-height:0;padding:0 0 5px;border-bottom:1px solid #ffffff18}.brush-flyout header button{margin-left:auto}.brush-flyout label{display:grid;grid-template-columns:1fr auto;align-items:center;gap:4px 8px}.brush-flyout output{color:var(--bv-muted-text-color)}.brush-flyout input[type=range]{grid-column:1 / -1;width:100%;padding:0}.brush-flyout select{grid-column:1 / -1}.fixed-inspector .inspector-tabs{display:none}.bv-ui-dock .flexlayout__float_window{border:1px solid rgba(var(--bv-ui-accent-rgb),.36);border-radius:var(--bv-ui-radius);background:var(--bv-ui-surface);box-shadow:0 18px 48px #00000094,0 0 0 1px #ffffff09}.bv-ui-dock .flexlayout__float_window_header{min-height:31px;padding:6px 8px;color:var(--bv-ui-text);font-family:system-ui,-apple-system,Segoe UI,sans-serif;font-size:calc(12px * var(--bv-ui-scale));line-height:1.35;background:var(--bv-ui-surface-raised);border-bottom:1px solid var(--bv-ui-border)}.bv-ui-dock .flexlayout__float_window_drag_handle{min-width:22px;min-height:22px;padding:0 5px;color:var(--bv-ui-muted);border-radius:var(--bv-ui-radius-sm)}.bv-ui-dock .flexlayout__float_window_drag_handle:hover{color:var(--bv-ui-text);background:rgba(var(--bv-ui-accent-rgb),.14)}.bv-ui-dock .flexlayout__float_window_content{margin:0;background:var(--bv-ui-surface);border-radius:0 0 var(--bv-ui-radius) var(--bv-ui-radius)}.bv-detector-card{display:grid;gap:12px}.bv-detector-card-title{display:grid;min-width:0;gap:2px;margin-right:auto}.bv-detector-card-title strong,.bv-detector-card-title small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bv-detector-card-title small,.bv-detector-impact{color:var(--bv-ui-muted)}.bv-detector-impact{display:block;padding:8px 10px;border-left:2px solid rgba(var(--bv-ui-accent-rgb),.55);background:rgba(var(--bv-ui-accent-rgb),.07)}.bv-ui-empty-state{display:grid;place-items:center;min-height:160px;padding:28px;color:var(--bv-ui-muted);text-align:center;border:1px dashed var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-ui-empty-state strong{color:var(--bv-ui-text)}.bv-ui-empty-state p{margin:4px 0 0}.bv-inspector-section{display:grid;align-content:start;gap:calc(12px * var(--bv-ui-scale));min-width:0;padding:calc(10px * var(--bv-ui-scale))}.bv-inspector-section>h3{margin:0;font-size:calc(13px * var(--bv-ui-scale))}.inspector-tab-panel>.bv-inspector-section+.bv-inspector-section{border-top:1px solid var(--bv-ui-border)}.bv-compact-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,125px),1fr));gap:calc(10px * var(--bv-ui-scale));min-width:0}.bv-inspector-section{container:bv-inspector-section / inline-size}.bv-layer-bounds-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--bv-ui-field-gap);min-width:0}@container bv-inspector-section (max-width:220px){.bv-layer-bounds-grid{grid-template-columns:1fr}}.bv-control-field,.bv-number-field{display:grid;gap:var(--bv-ui-field-gap);min-width:0;color:var(--bv-ui-muted);font-size:calc(11px * var(--bv-ui-scale))}.bv-control-label,.bv-number-field>label{color:var(--bv-ui-muted)}.bv-control-help{color:var(--bv-ui-muted);font-size:calc(10px * var(--bv-ui-scale));line-height:1.4}.bv-select-shell{position:relative;display:block;min-width:0}.bv-select-shell select{width:100%;height:var(--bv-ui-control-height);padding:0 calc(36px * var(--bv-ui-scale)) 0 calc(11px * var(--bv-ui-scale));appearance:none;color:var(--bv-ui-text);background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius);outline:0}.bv-select-shell>svg{position:absolute;top:50%;right:calc(10px * var(--bv-ui-scale));width:calc(16px * var(--bv-ui-scale));height:calc(16px * var(--bv-ui-scale));translate:0 -50%;fill:none;stroke:var(--bv-ui-muted);stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;pointer-events:none}.bv-select-shell:hover{border-color:var(--bv-ui-border-hover)}.bv-number-field{grid-template-columns:minmax(0,1fr)}.bv-number-slider{position:relative;min-width:0;padding-top:calc(9px * var(--bv-ui-scale))}.bv-number-slider output{position:absolute;z-index:2;left:var(--bubble-left,50%);bottom:calc(100% + 4px);translate:-50% 2px;padding:3px 6px;color:var(--bv-ui-text);white-space:nowrap;background:#302c3a;border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius-sm);font-size:calc(10px * var(--bv-ui-scale));opacity:0;pointer-events:none}.bv-number-slider:hover output,.bv-number-slider:focus-within output{opacity:1;translate:-50% 0}.bv-number-track{width:100%;height:18px;margin:0;padding:0!important;appearance:none;background:transparent!important;border:0!important;cursor:pointer}.bv-number-track::-webkit-slider-runnable-track{height:4px;border-radius:999px;background:linear-gradient(90deg,var(--bv-ui-accent) 0 var(--range-fill),rgba(168,161,179,.18) var(--range-fill) 100%)}.bv-number-track::-webkit-slider-thumb{width:16px;height:16px;margin-top:-6px;appearance:none;border:2px solid var(--bv-ui-surface);border-radius:50%;background:var(--bv-ui-accent);box-shadow:0 0 0 1px rgba(var(--bv-ui-accent-rgb),.38)}.bv-number-box{display:flex;min-width:0;height:var(--bv-ui-control-height);overflow:hidden;background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-number-box:focus-within{border-color:var(--bv-ui-accent);box-shadow:0 0 0 3px rgba(var(--bv-ui-accent-rgb),.18)}.bv-number-box input{min-width:0;width:100%;padding:0 calc(10px * var(--bv-ui-scale));color:var(--bv-ui-text);text-align:right;background:transparent;border:0;outline:0;font-variant-numeric:tabular-nums}.bv-number-box>span{display:grid;place-items:center;min-width:calc(34px * var(--bv-ui-scale));padding:0 7px;border-left:1px solid var(--bv-ui-border);background:#ffffff08}.bv-number-ticks{display:flex;justify-content:space-between;color:var(--bv-ui-muted);font-size:calc(9px * var(--bv-ui-scale))}.bv-textarea-shell{display:flex;min-width:0;max-width:100%;min-height:calc(100px * var(--bv-ui-scale));overflow:hidden;background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-textarea-shell:hover{border-color:var(--bv-ui-border-hover)}.bv-textarea-shell:focus-within{border-color:var(--bv-ui-accent);box-shadow:0 0 0 3px rgba(var(--bv-ui-accent-rgb),.18)}.bv-textarea-shell textarea{width:100%;min-width:0;min-height:calc(98px * var(--bv-ui-scale));max-height:360px;padding:calc(9px * var(--bv-ui-scale)) calc(10px * var(--bv-ui-scale));color:var(--bv-ui-text);background:transparent;border:0;outline:0;resize:vertical;font:inherit;line-height:1.45}.bv-control-disclosure{margin:0;padding:0!important;overflow:hidden;border:1px solid var(--bv-ui-border)!important;border-radius:var(--bv-ui-radius)!important}.bv-control-disclosure>summary{position:relative;margin:0!important;padding:calc(9px * var(--bv-ui-scale)) calc(12px * var(--bv-ui-scale));list-style:none}.bv-control-disclosure>summary::-webkit-details-marker{display:none}.bv-control-disclosure>summary:after{content:"›";position:absolute;right:12px;font-size:18px;line-height:1}.bv-control-disclosure[open]>summary:after{transform:rotate(90deg)}.bv-control-disclosure-body{display:grid;gap:calc(10px * var(--bv-ui-scale));padding:calc(10px * var(--bv-ui-scale));border-top:1px solid var(--bv-ui-border)}.bv-control-field{container:bv-control-field / inline-size;display:grid;align-self:start;gap:var(--bv-ui-field-gap);min-width:0;color:var(--bv-ui-muted)}.bv-field-grid,.bv-choice-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,var(--bv-field-grid-min,165px)),1fr));gap:calc(9px * var(--bv-ui-scale));min-width:0}.bv-choice-grid{grid-template-columns:repeat(auto-fit,minmax(min(100%,var(--bv-choice-grid-min,145px)),1fr));gap:var(--bv-ui-field-gap)}.bv-editor-dialog,.bv-card-list,.bv-editor-item-summary{display:grid;gap:calc(10px * var(--bv-ui-scale));min-width:0}.bv-editor-item-compact-summary,.bv-detector-summary{display:flex;align-items:center;gap:calc(6px * var(--bv-ui-scale));min-width:0;color:var(--bv-ui-muted);font-size:calc(10px * var(--bv-ui-scale))}.bv-editor-item-compact-summary>span,.bv-detector-summary>span{max-width:220px;overflow:hidden;padding:2px 6px;text-overflow:ellipsis;white-space:nowrap;background:#ffffff09;border:1px solid var(--bv-ui-border);border-radius:999px}.bv-detector-summary{width:100%}.bv-detector-summary>strong{min-width:90px;color:var(--bv-ui-text)}.bv-detector-summary>span:nth-last-child(1){margin-left:auto}.bv-editor-item-details,.bv-detector-details{display:grid;gap:calc(10px * var(--bv-ui-scale))}.bv-editor-item-actions{display:flex;justify-content:flex-end;gap:var(--bv-ui-field-gap)}.bv-subtle-danger:hover:not(:disabled){color:#f19aa8;background:#d35d711a;border-color:#d35d7129}.bv-editor-impact{color:var(--bv-ui-muted)}.bv-control-label{display:flex;align-items:center;gap:6px;font-size:calc(11px * var(--bv-ui-scale))}.bv-control-help,.bv-control-message{color:var(--bv-ui-muted);font-size:calc(10px * var(--bv-ui-scale));line-height:1.4}.bv-control-message.is-error,.bv-control-field.is-error{color:#f19aa8}.bv-density-compact .bv-control-field,.bv-density-compact .bv-number-field{position:relative}.bv-density-compact .bv-control-help-overlay{position:absolute;z-index:30;top:calc(100% + 4px);left:0;width:max-content;max-width:min(280px,calc(100vw - 24px));padding:5px 7px;opacity:0;color:var(--bv-ui-text);background:#0d0c12;border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius-sm);box-shadow:0 8px 20px #0009;pointer-events:none;transition:opacity .12s ease}.bv-density-compact .bv-control-field:hover>.bv-control-help-overlay,.bv-density-compact .bv-control-field:focus-within>.bv-control-help-overlay,.bv-density-compact .bv-number-field:hover>.bv-control-help-overlay,.bv-density-compact .bv-number-field:focus-within>.bv-control-help-overlay{opacity:1}.bv-input-shell,.bv-select-shell{position:relative;display:flex;align-items:stretch;min-width:0;min-height:var(--bv-ui-control-height);overflow:hidden;color:var(--bv-ui-text);background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-input-shell:focus-within,.bv-select-shell:focus-within,.bv-number-box:focus-within,.bv-textarea-shell:focus-within{border-color:var(--bv-ui-accent);box-shadow:0 0 0 3px rgba(var(--bv-ui-accent-rgb),.18)}.bv-input-shell>input,.bv-select-shell>select{width:100%;min-width:0;min-height:0;padding:0 calc(11px * var(--bv-ui-scale));color:inherit;background:transparent;border:0;outline:0}.bv-select-shell>select{appearance:none;padding-right:36px}.bv-field-icon,.bv-field-suffix,.bv-number-unit{display:grid;place-items:center;flex:0 0 auto;min-width:calc(34px * var(--bv-ui-scale));padding:0 7px;color:var(--bv-ui-muted);background:#ffffff06}.bv-input-shell>.bv-field-icon{border-right:1px solid var(--bv-ui-border)}.bv-field-suffix,.bv-number-unit{border-left:1px solid var(--bv-ui-border)}.bv-chevron{display:inline-block;width:8px;height:8px;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:rotate(45deg) translateY(-2px)}.bv-select-shell>.bv-chevron{position:absolute;top:50%;right:13px;transform:translateY(-65%) rotate(45deg);pointer-events:none}.bv-select-popover{position:relative;min-width:0}.bv-select-trigger{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:var(--bv-ui-field-gap);width:100%;min-height:var(--bv-ui-control-height);padding:0 var(--bv-ui-content-padding);color:var(--bv-ui-text);text-align:left;background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-select-trigger:hover:not(:disabled){border-color:var(--bv-ui-border-hover)}.bv-select-trigger:focus-visible,.bv-select-trigger[aria-expanded=true]{outline:0;border-color:var(--bv-ui-accent);box-shadow:0 0 0 3px rgba(var(--bv-ui-accent-rgb),.18)}.bv-select-trigger>.bv-chevron{justify-self:end}.bv-select-menu{z-index:120;display:grid;gap:2px;max-width:min(360px,calc(100vw - 24px));max-height:min(280px,50vh);padding:var(--bv-ui-field-gap);overflow:auto;color:var(--bv-ui-text);background:var(--bv-ui-surface-raised);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius);box-shadow:0 14px 42px #000b}.bv-select-menu>button{display:flex;align-items:center;gap:var(--bv-ui-field-gap);min-width:100%;min-height:var(--bv-ui-control-height);padding:0 var(--bv-ui-content-padding);color:var(--bv-ui-text);text-align:left;white-space:nowrap;background:transparent;border:1px solid transparent;border-radius:var(--bv-ui-radius)}.bv-select-menu>button:hover:not(:disabled),.bv-select-menu>button[aria-selected=true]{background:rgba(var(--bv-ui-accent-rgb),.14);border-color:rgba(var(--bv-ui-accent-rgb),.22)}.bv-select-menu>button:disabled{color:var(--bv-ui-muted);opacity:.45}.bv-input-shell>.bv-field-action{align-self:stretch;flex:0 0 auto;min-height:0;padding:0 var(--bv-ui-content-padding);color:var(--bv-ui-muted);background:#ffffff06;border:0;border-left:1px solid var(--bv-ui-border);border-radius:0}.bv-input-shell>.bv-field-action:hover:not(:disabled){color:var(--bv-ui-text);background:rgba(var(--bv-ui-accent-rgb),.12)}@container bv-control-field (max-width:220px){.bv-input-shell:has(.bv-field-action){flex-wrap:wrap;overflow:visible}.bv-input-shell:has(.bv-field-action)>input{flex-basis:100%;min-height:var(--bv-ui-control-height)}.bv-input-shell:has(.bv-field-action)>.bv-field-action{flex:1 1 auto;min-height:var(--bv-ui-control-height);border-top:1px solid var(--bv-ui-border)}.bv-input-shell:has(.bv-field-action)>.bv-field-action:first-of-type{border-left:0}.bv-keybinding{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.bv-keybinding>button:first-child{grid-column:1/-1}}.bv-number-field{container:bv-number-field / inline-size;display:grid;gap:var(--bv-ui-field-gap);min-width:0;color:var(--bv-ui-muted);font-size:calc(11px * var(--bv-ui-scale))}.bv-number-value-row{display:grid;grid-template-columns:minmax(0,1fr) minmax(calc(148px * var(--bv-ui-scale)),38%);align-items:center;gap:calc(11px * var(--bv-ui-scale));min-width:0}.bv-number-field.direct-only .bv-number-value-row{grid-template-columns:1fr}.bv-number-box{display:flex;min-width:0;height:var(--bv-ui-control-height);overflow:hidden;color:var(--bv-ui-text);background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-number-box>input{width:100%;min-width:0;min-height:0;padding:0 10px;text-align:right;background:transparent;border:0;outline:0;font-variant-numeric:tabular-nums}.bv-number-ticks{display:flex;justify-content:space-between;width:calc(62% - 6px);font-size:calc(9px * var(--bv-ui-scale))}@container bv-number-field (max-width:380px){.bv-number-field.has-slider .bv-number-value-row{grid-template-columns:1fr}.bv-number-field.has-slider .bv-number-box{grid-row:1;width:min(calc(292px * var(--bv-ui-scale)),100%);justify-self:center}.bv-number-field.has-slider .bv-number-slider{grid-row:2;width:100%}.bv-number-field.has-slider .bv-number-ticks{width:100%}}.bv-textarea-shell{display:flex;min-width:0;max-width:100%;min-height:var(--bv-ui-textarea-height);overflow:hidden;color:var(--bv-ui-text);background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-textarea-shell>textarea{width:100%;min-width:0;min-height:calc(var(--bv-ui-textarea-height) - 2px);max-height:360px;padding:9px 10px;line-height:1.45;background:transparent;border:0;outline:0;resize:vertical;scrollbar-color:rgba(170,162,181,.55) transparent;scrollbar-width:thin}.bv-textarea-shell>textarea::-webkit-scrollbar{width:10px;height:10px}.bv-textarea-shell>textarea::-webkit-scrollbar-track{background:transparent}.bv-textarea-shell>textarea::-webkit-scrollbar-thumb{background:#aaa2b57a;border:2px solid var(--bv-ui-input);border-radius:999px}.bv-textarea-shell>textarea::-webkit-scrollbar-corner{background:var(--bv-ui-input)}.bv-textarea-shell>textarea::-webkit-resizer{background-color:var(--bv-ui-input);background-image:linear-gradient(135deg,transparent 0 48%,rgba(170,162,181,.3) 49% 56%,transparent 57% 65%,rgba(170,162,181,.55) 66% 73%,transparent 74%)}.bv-textarea-shell.resize-none>textarea{resize:none}.bv-textarea-shell.resize-both{max-width:100%;overflow:auto}.bv-textarea-shell.resize-both>textarea{resize:both;max-width:100%}.bv-button{display:inline-flex;align-items:center;justify-content:center;gap:7px;min-height:var(--bv-ui-control-height);padding:0 calc(13px * var(--bv-ui-scale));color:var(--bv-ui-text);background:var(--bv-ui-surface-raised);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius);cursor:pointer}.bv-button:hover:not(:disabled){border-color:var(--bv-ui-border-hover);background:#302d39}.bv-button.primary{background:var(--bv-ui-accent);border-color:var(--bv-ui-accent-hover)}.bv-button.ghost{color:var(--bv-ui-muted);background:transparent;border-color:transparent}.bv-button.danger{color:#f19aa8;background:#d35d7121}.bv-button.warning{color:#f0c275;background:#e9b65f1f}.bv-button.success{color:#83deb6;background:#55c9941f}.bv-button.icon-only{width:var(--bv-ui-control-height);padding:0}.bv-button:disabled{opacity:.42;cursor:not-allowed}.bv-menu-button,.bv-split-button,.bv-popover-host,.bv-rich-select,.bv-search-field,.bv-image-picker{position:relative}.bv-menu,.bv-rich-select-menu,.bv-search-results,.bv-image-picker-menu,.bv-popover{position:absolute;z-index:100;top:calc(100% + 6px);right:0;min-width:220px;padding:5px;color:var(--bv-ui-text);background:var(--bv-ui-surface-raised);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius);box-shadow:0 14px 42px #000b}.bv-menu-content>button,.bv-rich-select-menu>button,.bv-search-results>button,.bv-image-picker-menu>button{display:flex;align-items:center;gap:var(--bv-ui-field-gap);width:100%;padding:var(--bv-ui-field-gap) var(--bv-ui-content-padding);text-align:left;background:transparent;border:0;border-radius:var(--bv-ui-radius)}.bv-menu-content>button:hover,.bv-rich-select-menu>button:hover,.bv-search-results>button:hover,.bv-image-picker-menu>button:hover{background:rgba(var(--bv-ui-accent-rgb),.12)}.bv-menu-content kbd{margin-left:auto}.bv-split-button{display:inline-flex}.bv-split-button>.bv-button:first-child{border-radius:var(--bv-ui-radius) 0 0 var(--bv-ui-radius)}.bv-split-button>.bv-button:nth-child(2){border-radius:0 var(--bv-ui-radius) var(--bv-ui-radius) 0;border-left-color:#fff3}.bv-toggle{display:flex;align-items:center;gap:10px;padding:0;color:var(--bv-ui-text);background:transparent;border:0}.bv-toggle-track{width:42px;height:23px;padding:3px;background:#35313f;border:1px solid var(--bv-ui-border);border-radius:999px}.bv-toggle-track>span{display:block;width:15px;height:15px;background:var(--bv-ui-muted);border-radius:50%;transition:translate .15s}.bv-toggle[aria-checked=true] .bv-toggle-track{background:rgba(var(--bv-ui-accent-rgb),.35);border-color:var(--bv-ui-accent)}.bv-toggle[aria-checked=true] .bv-toggle-track>span{translate:19px;background:var(--bv-ui-accent-soft)}.bv-checkbox-field{display:flex;align-items:flex-start;gap:9px;color:var(--bv-ui-text)}.bv-checkbox-field>input{position:absolute;opacity:0}.bv-checkbox-mark{display:grid;width:var(--bv-ui-check-size);height:var(--bv-ui-check-size);flex:none;border:1px solid var(--bv-ui-muted);border-radius:var(--bv-ui-radius-sm)}.bv-checkbox-field>input:checked+.bv-checkbox-mark{border-color:var(--bv-ui-accent)}.bv-checkbox-field>input:checked+.bv-checkbox-mark:after{content:"";width:8px;height:4px;margin:4px 3px;border-left:2px solid var(--bv-ui-accent);border-bottom:2px solid var(--bv-ui-accent);transform:rotate(-45deg)}.bv-checkbox-field small{display:block;color:var(--bv-ui-muted)}.bv-option-set{display:flex}.bv-option-set>button{min-height:var(--bv-ui-control-height);padding:0 12px;color:var(--bv-ui-muted);background:var(--bv-ui-input);border:1px solid var(--bv-ui-border)}.bv-option-set>button+button{border-left:0}.bv-option-set>button:first-child{border-radius:var(--bv-ui-radius) 0 0 var(--bv-ui-radius)}.bv-option-set>button:last-child{border-radius:0 var(--bv-ui-radius) var(--bv-ui-radius) 0}.bv-option-set>button[aria-checked=true]{z-index:1;color:var(--bv-ui-text);background:rgba(var(--bv-ui-accent-rgb),.2);border-color:var(--bv-ui-accent);box-shadow:inset 0 0 0 1px var(--bv-ui-accent)}.bv-tag-input,.bv-multi-select{padding:var(--bv-ui-field-gap);color:var(--bv-ui-text);background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-tag-values{display:flex;flex-wrap:wrap;gap:var(--bv-ui-field-gap)}.bv-tag{display:inline-flex;align-items:center;gap:4px;padding:var(--bv-ui-field-gap) var(--bv-ui-content-padding);background:rgba(var(--bv-ui-accent-rgb),.16);border:1px solid rgba(var(--bv-ui-accent-rgb),.28);border-radius:var(--bv-ui-radius)}.bv-tag>button{padding:0 2px;color:var(--bv-ui-muted);background:transparent;border:0}.bv-tag-input>input,.bv-multi-select>input{width:100%;min-height:var(--bv-ui-control-height);background:transparent;border:0;outline:0}.bv-tag-select{position:relative;min-width:0}.bv-tag-select-trigger{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:var(--bv-ui-field-gap);width:100%;min-height:var(--bv-ui-control-height);padding:3px var(--bv-ui-content-padding);color:var(--bv-ui-text);text-align:left;background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-tag-select-trigger:hover{border-color:var(--bv-ui-border-hover)}.bv-tag-select-trigger:focus-visible,.bv-tag-select-trigger[aria-expanded=true]{outline:0;border-color:var(--bv-ui-accent);box-shadow:0 0 0 3px #8d70ff2e}.bv-tag-select-trigger>.bv-tag-values{min-width:0;overflow:hidden;flex-wrap:nowrap}.bv-tag-select-trigger .bv-tag{max-width:180px;padding:2px 6px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bv-tag-select-trigger>.bv-chevron{justify-self:end}.bv-tag-select-menu>div>button{grid-template-columns:18px minmax(0,1fr)}.bv-tag-select-menu>div>button>span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bv-tag-select-check{display:grid;place-items:center;width:16px;height:16px;color:var(--bv-ui-accent-soft);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius-sm)}.bv-tag-select-menu button[aria-selected=true] .bv-tag-select-check{background:#8d70ff33;border-color:var(--bv-ui-accent)}.bv-tag-select-menu button:disabled{opacity:.7;cursor:not-allowed}.bv-color-field,.bv-keybinding{position:relative;display:flex;gap:7px}.bv-color-swatch{width:var(--bv-ui-control-height);flex:0 0 var(--bv-ui-control-height);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius)}.bv-color-field>input{flex:1;min-width:0;padding:0 10px;background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-anchored-popover{position:fixed;right:auto;bottom:auto;min-width:0;z-index:var(--bv-layer-flyout)}.bv-color-popover{padding:10px;background:var(--bv-ui-surface-raised);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius);box-shadow:0 14px 34px #0000006b}.bv-color-popover .react-colorful{width:min(240px,calc(100vw - 36px))}.bv-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:var(--bv-ui-field-gap);padding:var(--bv-ui-field-gap);background:var(--bv-ui-surface-raised);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-toolbar.vertical{width:max-content;flex-direction:column}.bv-toolbar-divider{align-self:stretch;border-left:1px solid var(--bv-ui-border)}.bv-toolbar.vertical .bv-toolbar-divider{border-left:0;border-top:1px solid var(--bv-ui-border)}.bv-toolbar .active{color:var(--bv-ui-accent-soft);background:rgba(var(--bv-ui-accent-rgb),.18)}.bv-toolbar .bv-button>svg{width:calc(18px * var(--bv-ui-scale));height:calc(18px * var(--bv-ui-scale));fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.bv-section,.bv-card{min-width:0;color:var(--bv-ui-text)}.bv-section.outlined,.bv-card{border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-section.raised{background:var(--bv-ui-surface-raised);border-radius:var(--bv-ui-radius)}.bv-section>header,.bv-card>header{display:flex;align-items:center;gap:var(--bv-ui-field-gap);padding:var(--bv-ui-content-padding)}.bv-section>header>div,.bv-card>header>div{flex:1;min-width:0}.bv-section h3,.bv-section p{margin:0}.bv-section p,.bv-card small{color:var(--bv-ui-muted)}.bv-section-body,.bv-card>div{padding:var(--bv-ui-content-padding)}.bv-card.interactive{display:block;width:100%;text-align:left;background:transparent}.bv-callout{display:flex;gap:var(--bv-ui-field-gap);padding:var(--bv-ui-content-padding);color:var(--bv-ui-text);background:#ffffff09;border:1px solid var(--bv-ui-border);border-left:3px solid var(--bv-ui-muted);border-radius:var(--bv-ui-radius-sm)}.bv-callout.info{border-left-color:#72a7ff}.bv-callout.success{border-left-color:var(--bv-ui-success)}.bv-callout.warning{border-left-color:var(--bv-ui-warning)}.bv-callout.danger{border-left-color:var(--bv-ui-danger)}.bv-callout>div{flex:1}.bv-badge{display:inline-flex;align-items:center;padding:3px 7px;color:var(--bv-ui-muted);background:#ffffff0f;border-radius:999px;font-size:.85em}.bv-badge.success{color:#83deb6}.bv-badge.warning{color:#f0c275}.bv-badge.danger{color:#f19aa8}.bv-dialog-layer{position:fixed;z-index:var(--bv-layer-modal);inset:0;display:grid;place-items:center;padding:16px}.bv-dialog-layer.modal{background:#08070a9e}.bv-dialog-layer.modeless{place-items:start end;pointer-events:none}.bv-dialog{display:grid;grid-template-rows:auto minmax(0,1fr) auto;width:min(680px,calc(100vw - 32px));max-height:86vh;overflow:hidden;color:var(--bv-ui-text);background:var(--bv-ui-surface);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius-lg);box-shadow:0 28px 90px #000c;pointer-events:auto}.bv-dialog.small{width:min(480px,calc(100vw - 32px))}.bv-dialog.large{width:min(1040px,calc(100vw - 32px))}.bv-dialog>header,.bv-dialog>footer{display:flex;align-items:flex-start;gap:var(--bv-ui-field-gap);padding:var(--bv-ui-content-padding);background:var(--bv-ui-surface-raised)}.bv-dialog>header>div{flex:1}.bv-dialog h2,.bv-dialog p{margin:0}.bv-dialog-body{min-height:0;overflow:auto;padding:var(--bv-ui-content-padding)}.bv-tree{color:var(--bv-ui-text)}.bv-tree-row{display:grid;grid-template-columns:22px auto minmax(0,1fr) auto auto;align-items:center;gap:var(--bv-ui-field-gap);min-height:var(--bv-ui-row-height);padding:var(--bv-ui-field-gap);border:1px solid transparent;border-radius:var(--bv-ui-radius)}.bv-tree [role=treeitem][aria-selected=true]>.bv-tree-row{background:rgba(var(--bv-ui-accent-rgb),.15);border-color:rgba(var(--bv-ui-accent-rgb),.42)}.bv-tree [role=group]{margin-left:17px;padding-left:8px;border-left:1px solid rgba(var(--bv-ui-accent-rgb),.25)}.bv-tree-expander{display:grid;place-items:center;padding:0;color:var(--bv-ui-muted);background:transparent;border:0}.bv-tree [aria-expanded=false]>.bv-tree-row .bv-chevron{transform:rotate(-45deg)}.bv-tree-label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bv-tree-meta{color:var(--bv-ui-muted);font-size:.85em}.bv-showcase{display:grid;grid-template-columns:240px minmax(0,1fr);min-height:100vh;color:var(--bv-ui-text);background:var(--bv-ui-bg)}.bv-showcase>aside{position:sticky;top:0;height:100vh;display:grid;align-content:start;gap:4px;padding:24px 16px;background:var(--bv-ui-surface);border-right:1px solid var(--bv-ui-border)}.bv-showcase>aside a{padding:8px 10px;color:var(--bv-ui-muted);text-decoration:none;border-radius:var(--bv-ui-radius)}.bv-showcase>aside a:hover{color:var(--bv-ui-text);background:#8d70ff1f}.bv-showcase>main{display:grid;gap:22px;width:min(1180px,100%);padding:32px}.bv-showcase>main>header{display:flex;align-items:end;justify-content:space-between;gap:18px}.bv-showcase>main>header>div{min-width:0}.bv-showcase>main>header>.bv-control-field{width:min(320px,100%)}.bv-showcase>main>header h1,.bv-showcase>main>header p{margin:0}.bv-demo-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,260px),1fr));gap:14px}.bv-showcase .bv-section-body{display:grid;gap:14px}.bv-window-contract-demo{container:bv-window-header / inline-size;display:grid;grid-template-rows:auto minmax(100px,1fr) auto;min-width:0;overflow:hidden;background:var(--bv-ui-surface);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius)}.bv-window-contract-demo>.bv-ui-window-header{position:relative}.bv-window-contract-body{display:grid;align-content:center;gap:4px;padding:var(--bv-ui-content-padding);color:var(--bv-ui-muted)}.bv-window-contract-body strong{color:var(--bv-ui-text)}.bv-demo-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.bv-panel-demo{overflow:hidden;background:var(--bv-ui-surface);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-panel-demo>div{padding:var(--bv-ui-content-padding);color:var(--bv-ui-muted)}@media (max-width:760px){.bv-showcase{grid-template-columns:1fr}.bv-showcase>aside{position:relative;display:flex;height:auto;padding:10px;overflow-x:auto}.bv-showcase>aside h2{margin:0 8px 0 0}.bv-showcase>aside a{white-space:nowrap}.bv-showcase>main{padding:12px}.bv-showcase>main>header{align-items:stretch;flex-direction:column}.bv-showcase>main>header>.bv-control-field{width:100%}.bv-toast-stack{right:12px;bottom:12px;left:12px}.bv-toast{width:100%}}.bv-density-compact .bv-toggle-track{width:36px;height:20px;padding:2px}.bv-density-compact .bv-toggle-track>span{width:14px;height:14px}.bv-density-compact .bv-toggle[aria-checked=true] .bv-toggle-track>span{translate:16px}.bv-density-compact .bv-badge{padding:2px 6px}.bv-density-compact .bv-tooltip{padding:4px 7px}.bv-density-compact .bv-menu,.bv-density-compact .bv-rich-select-menu,.bv-density-compact .bv-search-results,.bv-density-compact .bv-image-picker-menu,.bv-density-compact .bv-popover{padding:var(--bv-ui-field-gap)}.bv-card>header>div,.bv-rich-select-trigger>span,.bv-rich-select-menu button>span,.bv-search-results button>span,.bv-image-picker button>span{display:grid;gap:2px}.bv-card>header>div small,.bv-rich-select small,.bv-search-results small,.bv-image-picker small{color:var(--bv-ui-muted);font-size:.84em}.bv-rich-select-trigger,.bv-image-picker-trigger{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:var(--bv-ui-field-gap);width:100%;min-height:var(--bv-ui-control-height);padding:var(--bv-ui-field-gap) var(--bv-ui-content-padding);color:var(--bv-ui-text);text-align:left;background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-rich-select-trigger>.bv-chevron,.bv-image-picker-trigger>.bv-chevron{justify-self:end}.bv-image-picker-control{display:grid;grid-template-columns:minmax(0,1fr) auto auto;align-items:stretch;min-width:0;overflow:hidden;background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-image-picker-control:focus-within{border-color:var(--bv-ui-accent);box-shadow:0 0 0 3px #8d70ff2e}.bv-image-picker-control .bv-image-picker-trigger{min-width:0;padding:var(--bv-ui-field-gap) var(--bv-ui-content-padding);background:transparent;border:0;border-radius:0}.bv-image-preview-action,.bv-image-picker-toggle{align-self:stretch;width:28px!important;min-height:0;padding:0;color:var(--bv-ui-muted);background:transparent;border:0;border-left:1px solid transparent;border-radius:0}.bv-image-preview-action:hover:not(:disabled),.bv-image-picker-toggle:hover:not(:disabled){color:var(--bv-ui-text);background:#8d70ff21;border-left-color:var(--bv-ui-border)}.bv-image-preview-action svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}.bv-image-picker-toggle .bv-chevron{width:7px;height:7px}.bv-search-field .bv-input-shell>span:first-child{display:grid;place-items:center;width:34px;color:var(--bv-ui-muted)}.bv-search-results{left:0;right:auto;width:100%}.bv-keybinding{align-items:stretch}.bv-keybinding>button{min-height:var(--bv-ui-control-height);padding:0 10px;color:var(--bv-ui-text);background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-keybinding>button:first-child{flex:1;text-align:left}.bv-compound-field{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,calc(132px * var(--bv-ui-scale))),1fr));align-self:start;gap:var(--bv-ui-field-gap);min-width:0;margin:0;padding:0;border:0}.bv-compound-field>legend{grid-column:1/-1;margin:0 0 1px;padding:0;color:var(--bv-ui-muted);font-size:calc(11px * var(--bv-ui-scale))}.bv-json-editor{overflow:hidden;color:var(--bv-ui-text);background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-json-toolbar{display:flex;justify-content:flex-end;padding:var(--bv-ui-field-gap);background:var(--bv-ui-surface-raised);border-bottom:1px solid var(--bv-ui-border)}.bv-json-toolbar>button{min-height:28px;padding:0 9px;color:var(--bv-ui-text);background:transparent;border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-json-editor textarea,.bv-json-editor pre{outline:0!important;font:calc(11px * var(--bv-ui-scale))/1.45 var(--bv-ui-font-mono)!important}.bv-progress{display:grid;gap:var(--bv-ui-field-gap)}.bv-progress>div:first-child{display:flex;justify-content:space-between}.bv-progress [role=progressbar]{height:7px;overflow:hidden;background:var(--bv-ui-input);border-radius:999px}.bv-progress [role=progressbar]>span{display:block;height:100%;background:linear-gradient(90deg,var(--bv-ui-accent),var(--bv-ui-accent-light));border-radius:inherit}.bv-empty-state{display:grid;justify-items:center;gap:var(--bv-ui-field-gap);padding:calc(var(--bv-ui-content-padding) * 2);color:var(--bv-ui-muted);text-align:center;border:1px dashed var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-empty-state strong{color:var(--bv-ui-text)}.bv-empty-state p{margin:0}.bv-toast-stack{position:fixed;z-index:1000;right:18px;bottom:18px;display:grid;justify-items:end;gap:8px;max-width:calc(100vw - 24px)}.bv-toast{display:flex;align-items:flex-start;gap:10px;width:min(360px,calc(100vw - 24px));max-width:calc(100vw - 24px);min-width:0;padding:10px 10px 10px 12px;color:var(--bv-ui-text);background:var(--bv-ui-surface-raised);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius);box-shadow:0 12px 30px #0008}.bv-toast>div{flex:1 1 auto;min-width:0}.bv-toast strong{display:block;line-height:1.3}.bv-toast p{margin:4px 0 0;color:var(--bv-ui-muted);line-height:1.4;overflow-wrap:anywhere}.bv-toast>.bv-button{flex:0 0 auto;width:26px;min-width:26px;height:26px;padding:0;margin-top:-3px}.bv-breadcrumbs{display:flex;align-items:center;gap:var(--bv-ui-field-gap);color:var(--bv-ui-muted)}.bv-breadcrumbs button{padding:0;color:var(--bv-ui-accent-soft);background:transparent;border:0}.bv-tabs{container:bv-tabs / inline-size;min-width:0}.bv-tabs>div[role=tablist]{display:flex;align-items:end;min-height:var(--bv-ui-row-height);padding:var(--bv-ui-field-gap) var(--bv-ui-content-padding) 0;background:var(--bv-ui-surface-raised);border-bottom:1px solid var(--bv-ui-border)}.bv-tabs>div[role=tablist]>button{position:relative;min-height:var(--bv-ui-control-height);padding:0 var(--bv-ui-content-padding);color:var(--bv-ui-muted);background:transparent;border:0}.bv-tabs>div[role=tablist]>button[aria-selected=true]{color:var(--bv-ui-text)}.bv-tabs>div[role=tablist]>button[aria-selected=true]:after{content:"";position:absolute;right:0;bottom:0;left:0;height:2px;background:var(--bv-ui-accent)}.bv-tabs>[role=tabpanel]{padding:var(--bv-ui-content-padding)}.bv-tabs.vertical{display:grid;grid-template-columns:auto 1fr}.bv-tabs.vertical>div[role=tablist]{display:flex;flex-direction:column;align-items:stretch;padding:6px 0 6px 6px;border-right:1px solid var(--bv-ui-border);border-bottom:0}.bv-accordion{overflow:hidden;border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-accordion>section+section{border-top:1px solid var(--bv-ui-border)}.bv-accordion>section>button{display:flex;justify-content:space-between;align-items:center;width:100%;min-height:var(--bv-ui-row-height);padding:0 var(--bv-ui-content-padding);color:var(--bv-ui-text);text-align:left;background:var(--bv-ui-surface-raised);border:0}.bv-accordion>section>button .bv-chevron{flex:none;align-self:center;transform-origin:center}.bv-accordion>section>button[aria-expanded=true] .bv-chevron{transform:rotate(225deg)}.bv-accordion>section>div{padding:var(--bv-ui-content-padding)}.bv-pagination{display:flex;align-items:center;gap:3px}.bv-pagination button{min-width:var(--bv-ui-control-height);min-height:var(--bv-ui-control-height);padding:0 8px;color:var(--bv-ui-muted);background:transparent;border:1px solid transparent;border-radius:var(--bv-ui-radius)}.bv-pagination button[aria-current=page]{color:var(--bv-ui-text);background:var(--bv-ui-accent)}.bv-pagination button:hover{border-color:var(--bv-ui-border)}.bv-steps{display:flex;min-width:0;overflow-x:auto;counter-reset:steps;margin:0;padding:0;list-style:none}.bv-steps li{position:relative;display:grid;justify-items:center;gap:5px;flex:1;color:var(--bv-ui-muted)}.bv-steps li:not(:last-child):after{content:"";position:absolute;top:14px;left:calc(50% + 18px);width:calc(100% - 36px);border-top:1px solid var(--bv-ui-border)}.bv-steps li>span{z-index:1;display:grid;place-items:center;width:28px;height:28px;background:var(--bv-ui-surface-raised);border:1px solid var(--bv-ui-border);border-radius:50%}.bv-steps li.current,.bv-steps li.complete{color:var(--bv-ui-text)}.bv-steps li.current>span,.bv-steps li.complete>span{border-color:var(--bv-ui-accent)}.bv-tooltip-host{position:relative;display:inline-flex}.bv-tooltip-host>.bv-tooltip{position:absolute;z-index:110;bottom:calc(100% + 7px);left:50%;width:max-content;max-width:260px;padding:var(--bv-ui-field-gap) var(--bv-ui-content-padding);color:var(--bv-ui-text);background:#0d0c12;border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius-sm);box-shadow:0 8px 20px #0009;translate:-50%;opacity:0;pointer-events:none}.bv-tooltip-host:hover>.bv-tooltip,.bv-tooltip-host:focus-within>.bv-tooltip{opacity:1}.bv-divider{display:flex;align-items:center;gap:9px;color:var(--bv-ui-muted)}.bv-divider:before,.bv-divider:after{content:"";flex:1;border-top:1px solid var(--bv-ui-border)}.bv-divider.vertical{flex-direction:column;align-self:stretch}.bv-divider.vertical:before,.bv-divider.vertical:after{border-top:0;border-left:1px solid var(--bv-ui-border)}.bv-code-block{overflow:hidden;background:#100f16;border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-code-block>header{display:flex;justify-content:space-between;align-items:center;min-height:var(--bv-ui-row-height);padding:0 var(--bv-ui-content-padding);color:var(--bv-ui-muted);background:var(--bv-ui-surface-raised);border-bottom:1px solid var(--bv-ui-border)}.bv-code-block pre{margin:0;padding:var(--bv-ui-content-padding);overflow:auto;font:calc(11px * var(--bv-ui-scale))/1.55 var(--bv-ui-font-mono)}.bv-code-line{display:block;min-height:1.55em}.bv-code-block.line-numbers pre{counter-reset:line}.bv-code-block.line-numbers .bv-code-line:before{counter-increment:line;content:counter(line);display:inline-block;width:2.5em;margin-right:1em;color:#6f6a7b;text-align:right}.bv-definition-list{container:bv-definition-list / inline-size;display:grid;gap:7px;margin:0}.bv-definition-row{display:grid;grid-template-columns:max-content minmax(0,1fr);gap:18px}.bv-definition-list dt{color:var(--bv-ui-muted)}.bv-definition-list dd{margin:0}.bv-table-scroll{overflow:auto;border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-table-scroll table{width:100%;border-collapse:collapse}.bv-table-scroll th,.bv-table-scroll td{padding:var(--bv-ui-content-padding);text-align:left;border-bottom:1px solid var(--bv-ui-border)}.bv-table-scroll th{color:var(--bv-ui-muted);background:var(--bv-ui-surface-raised)}.bv-table-scroll tbody tr:last-child td{border-bottom:0}.bv-table-scroll .numeric{text-align:right}.bv-sortable-list{display:grid;gap:7px}.bv-sortable-list>article{container:bv-sortable-item / inline-size;overflow:hidden;background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-sortable-list article>header{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:5px;min-height:var(--bv-ui-row-height);padding:var(--bv-ui-field-gap)}.bv-sortable-list>article>header>div{display:grid}.bv-sortable-list>article>header small{color:var(--bv-ui-muted)}.bv-drag-handle{width:30px;height:30px;color:var(--bv-ui-muted);background:transparent;border:0;cursor:grab}.bv-segmented-actions{display:inline-flex;align-items:stretch;overflow:hidden;border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-segmented-actions>.bv-button{width:30px;min-width:30px;border:0;border-radius:0}.bv-segmented-actions>.bv-button+.bv-button{border-left:1px solid var(--bv-ui-border)}.bv-segmented-actions .bv-chevron{transition:transform .15s}.bv-segmented-actions .bv-button[aria-expanded=true] .bv-chevron{transform:rotate(225deg)}.bv-sortable-summary,.bv-sortable-content{padding:var(--bv-ui-content-padding);border-top:1px solid var(--bv-ui-border)}.bv-sortable-content{background:#ffffff05}.bv-image-picker-trigger img,.bv-image-picker-menu img{width:42px;height:32px;object-fit:cover;border-radius:var(--bv-ui-radius-sm)}.bv-image-picker-menu{left:0;right:auto;width:100%}.bv-image-preview{position:fixed;z-index:var(--bv-layer-modal);inset:0;display:grid;place-items:center;padding:24px;background:radial-gradient(circle at 50% 42%,#221e2db3,#07060af0 70%);backdrop-filter:blur(3px)}.bv-image-preview-dialog{display:grid;grid-template-rows:auto minmax(0,1fr) auto;width:min(94vw,1600px);max-height:calc(100vh - 48px);overflow:hidden;color:var(--bv-ui-text);background:var(--bv-ui-surface);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius-lg);box-shadow:0 28px 90px #000d}.bv-image-preview-dialog>header{display:flex;align-items:center;gap:var(--bv-ui-content-padding);min-height:var(--bv-ui-row-height);padding:var(--bv-ui-field-gap) var(--bv-ui-content-padding);background:var(--bv-ui-surface-raised);border-bottom:1px solid var(--bv-ui-border)}.bv-image-preview-dialog>header>div{flex:1;min-width:0}.bv-image-preview-dialog h2{margin:0;overflow:hidden;font-size:calc(13px * var(--bv-ui-scale));text-overflow:ellipsis;white-space:nowrap}.bv-image-preview-dialog header small{color:var(--bv-ui-muted)}.bv-image-preview-icon{display:grid;place-items:center;width:26px;height:26px;color:#c7baff;background:#8d70ff21;border:1px solid rgba(141,112,255,.25);border-radius:var(--bv-ui-radius)}.bv-image-preview-icon svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}.bv-image-preview-stage{display:grid;place-items:center;min-height:220px;max-height:calc(100vh - 140px);padding:18px;overflow:auto;background-color:#0d0c11;background-image:linear-gradient(45deg,rgba(255,255,255,.025) 25%,transparent 25%),linear-gradient(-45deg,rgba(255,255,255,.025) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,rgba(255,255,255,.025) 75%),linear-gradient(-45deg,transparent 75%,rgba(255,255,255,.025) 75%);background-position:0 0,0 8px,8px -8px,-8px 0;background-size:16px 16px}.bv-image-preview-stage>img{display:block;max-width:100%;max-height:calc(100vh - 176px);object-fit:contain;border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius);box-shadow:0 18px 50px #000a;transform-origin:center;user-select:none;will-change:transform}.bv-image-preview-stage.is-pannable{cursor:grab}.bv-image-preview-stage.is-dragging{cursor:grabbing}.bv-image-preview-stage:not(.is-dragging)>img{transition:transform .12s ease-out}.bv-image-preview-stage>span{color:var(--bv-ui-muted)}.bv-image-preview-dialog>footer{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:var(--bv-ui-content-padding);min-height:var(--bv-ui-row-height);padding:var(--bv-ui-field-gap) var(--bv-ui-content-padding);color:var(--bv-ui-muted);background:var(--bv-ui-surface-raised);border-top:1px solid var(--bv-ui-border);font-size:calc(10px * var(--bv-ui-scale))}.bv-image-preview-help{overflow:hidden;text-align:center;text-overflow:ellipsis;white-space:nowrap}.bv-image-preview-controls{display:flex;align-items:center;gap:2px}.bv-image-preview-controls .bv-button{min-height:24px}.bv-image-preview-controls .icon-only{width:24px}.bv-image-preview-controls output{width:48px;color:var(--bv-ui-text);text-align:center;font-variant-numeric:tabular-nums}@media (max-width:720px){.bv-image-preview-help{display:none}.bv-image-preview-dialog>footer{grid-template-columns:1fr auto}}.bv-command-palette{display:grid;gap:var(--bv-ui-field-gap)}.bv-command-input>span{display:grid;place-items:center;width:var(--bv-ui-control-height);color:var(--bv-ui-muted)}.bv-command-results{display:grid;gap:2px;max-height:min(420px,60vh);overflow:auto}.bv-command-option{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:var(--bv-ui-content-padding);width:100%;min-height:var(--bv-ui-row-height);padding:var(--bv-ui-field-gap) var(--bv-ui-content-padding);color:var(--bv-ui-text);text-align:left;background:transparent;border:1px solid transparent;border-radius:var(--bv-ui-radius)}.bv-command-option>span{display:grid;min-width:0}.bv-command-option small,.bv-command-option kbd{color:var(--bv-ui-muted)}.bv-command-option:hover,.bv-command-option[aria-selected=true]{background:rgba(var(--bv-ui-accent-rgb),.14);border-color:rgba(var(--bv-ui-accent-rgb),.25)}.bv-command-empty{margin:0;padding:calc(var(--bv-ui-content-padding) * 2);color:var(--bv-ui-muted);text-align:center}.bv-adaptive-field{container:bv-adaptive-field / inline-size;min-width:0}.bv-adaptive-inline{min-width:0}.bv-adaptive-trigger{display:none;width:100%;min-width:0;grid-template-columns:auto minmax(0,1fr) auto;text-align:left}.bv-adaptive-summary{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bv-adaptive-popover{width:min(calc(420px * var(--bv-ui-scale)),calc(100vw - 16px));padding:0;overflow:hidden;background:var(--bv-ui-surface-raised);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius);box-shadow:0 18px 48px #000c}.bv-adaptive-popover>header{display:flex;align-items:center;gap:var(--bv-ui-field-gap);min-height:var(--bv-ui-row-height);padding:var(--bv-ui-field-gap) var(--bv-ui-content-padding);border-bottom:1px solid var(--bv-ui-border)}.bv-adaptive-popover>header>strong{flex:1}.bv-adaptive-popover>div{display:grid;gap:var(--bv-ui-field-gap);padding:var(--bv-ui-content-padding)}.bv-number-popup{display:grid;gap:var(--bv-ui-field-gap)}.bv-number-popup .bv-number-ticks,.bv-number-popup .bv-number-slider{width:100%}.bv-number-popup .bv-number-box{width:min(calc(292px * var(--bv-ui-scale)),100%);justify-self:center}.bv-color-dot{width:14px;height:14px;border:1px solid var(--bv-ui-border-hover);border-radius:50%}.bv-color-expanded{display:grid;gap:var(--bv-ui-content-padding)}.bv-color-expanded>input{width:100%;min-height:var(--bv-ui-control-height);padding:0 var(--bv-ui-content-padding);color:var(--bv-ui-text);background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-color-expanded .react-colorful{width:100%}@container bv-adaptive-field (max-width:220px){.bv-adaptive-inline{display:none}.bv-adaptive-trigger{display:grid}}.bv-select-menu>div,.bv-rich-select-menu>div,.bv-search-results>div,.bv-image-picker-menu>div{display:grid;gap:2px}.bv-select-menu>div>button,.bv-rich-select-menu>div>button,.bv-search-results>div>button,.bv-image-picker-menu>div>button{display:flex;align-items:center;gap:var(--bv-ui-field-gap);width:100%;min-height:var(--bv-ui-control-height);padding:var(--bv-ui-field-gap) var(--bv-ui-content-padding);color:var(--bv-ui-text);text-align:left;background:transparent;border:1px solid transparent;border-radius:var(--bv-ui-radius)}.bv-select-menu>div>button:hover:not(:disabled),.bv-rich-select-menu>div>button:hover:not(:disabled),.bv-search-results>div>button:hover:not(:disabled),.bv-image-picker-menu>div>button:hover:not(:disabled),.bv-select-menu>div>button[aria-selected=true],.bv-rich-select-menu>div>button[aria-selected=true],.bv-image-picker-menu>div>button[aria-selected=true]{background:rgba(var(--bv-ui-accent-rgb),.14);border-color:rgba(var(--bv-ui-accent-rgb),.24)}.bv-select-menu.bv-tag-select-menu>div>button{display:grid;grid-template-columns:18px minmax(0,1fr)}@container bv-tabs (max-width:280px){.bv-tabs:not(.vertical)>div[role=tablist]{align-items:stretch;overflow-x:auto}.bv-tabs:not(.vertical)>div[role=tablist]>button{flex:0 0 auto}.bv-tabs>[role=tabpanel]{min-width:0}}.bv-steps>li{min-width:88px}@container bv-definition-list (max-width:280px){.bv-definition-row{grid-template-columns:1fr;gap:2px}.bv-definition-row+.bv-definition-row{padding-top:var(--bv-ui-field-gap);border-top:1px solid var(--bv-ui-border)}}@container bv-sortable-item (max-width:280px){.bv-sortable-list>article>header{grid-template-columns:auto minmax(0,1fr) repeat(2,auto)}.bv-sortable-list>article>header>.bv-button{grid-row:2}.bv-sortable-list>article>header>div{grid-column:2/-1}}.bv-responsive-lab{display:grid;gap:18px}.bv-resizable-demo{width:min(100%,420px);min-width:150px;max-width:100%;resize:horizontal;overflow:auto;background:#12111680;border:1px dashed var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius)}.bv-resizable-demo>header{display:flex;justify-content:space-between;gap:10px;padding:var(--bv-ui-field-gap) var(--bv-ui-content-padding);color:var(--bv-ui-muted);background:var(--bv-ui-surface-raised);border-bottom:1px solid var(--bv-ui-border)}.bv-resizable-demo>header strong{color:var(--bv-ui-text)}.bv-responsive-state:before{content:"Wide";color:var(--bv-ui-success)}@container (max-width:380px){.bv-responsive-state:before{content:"Medium";color:var(--bv-ui-warning)}}@container (max-width:220px){.bv-responsive-state:before{content:"Minimal";color:var(--bv-ui-accent-soft)}}.bv-resizable-demo>div{display:grid;gap:var(--bv-ui-content-padding);min-width:0;padding:var(--bv-ui-content-padding)}.bv-global-toast-stack{z-index:var(--bv-layer-toast);bottom:var(--bv-toast-bottom,18px)}.bv-window-header-utility{position:relative;display:inline-flex}.bv-window-visibility-menu-action{min-width:190px;padding:7px 9px;color:var(--bv-ui-text);background:transparent;border:0;text-align:left;cursor:pointer}.bv-window-visibility-menu-action:hover{background:var(--bv-ui-surface-hover)}.bv-toolbar-launcher-secondary{width:26px;height:26px;padding:0;color:var(--bv-ui-muted);background:transparent;border:0;border-radius:var(--bv-ui-radius-xs);cursor:pointer}.bv-toolbar-launcher-secondary:hover{color:var(--bv-ui-text);background:var(--bv-ui-surface-hover)}.bv-regional-action-control:before{mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='black' d='M4 6h10v2H4V6Zm14-2h2v6h-2V4ZM4 16h4v2H4v-2Zm8-2h2v6h-2v-6Zm6 2h2v2h-2v-2ZM4 11h2v2H4v-2Zm6-2h2v6h-2V9Zm6 2h4v2h-4v-2Z'/%3E%3C/svg%3E");-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='black' d='M4 6h10v2H4V6Zm14-2h2v6h-2V4ZM4 16h4v2H4v-2Zm8-2h2v6h-2v-6Zm6 2h2v2h-2v-2ZM4 11h2v2H4v-2Zm6-2h2v6h-2V9Zm6 2h4v2h-4v-2Z'/%3E%3C/svg%3E")}.bv-toolbar-no-control .bv-regional-action-control,.bv-toolbar-no-editor .bv-regional-action-editor,.bv-toolbar-no-quick .bv-regional-action-quick,.bv-toolbar-no-overview .bv-regional-action-menu{display:none!important}.bv-tag-select-trigger:focus-visible,.bv-tag-select-trigger[aria-expanded=true],.bv-image-picker-control:focus-within{box-shadow:0 0 0 3px rgba(var(--bv-ui-accent-rgb),.18)}.bv-tag-select-menu button[aria-selected=true] .bv-tag-select-check{background:rgba(var(--bv-ui-accent-rgb),.2)}.bv-showcase>aside a:hover{background:rgba(var(--bv-ui-accent-rgb),.12)}.bv-image-preview-action:hover:not(:disabled),.bv-image-picker-toggle:hover:not(:disabled){background:rgba(var(--bv-ui-accent-rgb),.13)}.bv-image-preview-icon{color:var(--bv-ui-accent-soft);background:rgba(var(--bv-ui-accent-rgb),.13);border-color:rgba(var(--bv-ui-accent-rgb),.25)}.bv-m0-picker-host{position:relative;z-index:1;padding:6px}.bv-m0-picker-panel{display:grid;gap:7px}.bv-m0-picker-panel>.bv-control-field{grid-template-columns:1fr auto;align-items:center}.bv-m0-picker-panel>.bv-control-field>.bv-toggle{justify-self:end}.bv-resource-picker{display:grid;gap:5px}.bv-resource-picker.is-unresolved .bv-select-trigger{border-color:var(--bv-ui-danger)}.bv-resource-picker .bv-field-grid{align-items:end}.bv-resource-picker .bv-select-trigger{width:100%}.lg-node:has([node-type="BV M0 Fake Resource Collector"]) [node-type="BV M0 Fake Resource Collector"]:has(input[aria-label=collector_id]),.lg-node:has([node-type="BV M0 Fake Resource Collector"]) [node-type="BV M0 Fake Resource Collector"]:has(input[aria-label=resource_a_id]),.lg-node:has([node-type="BV M0 Fake Resource Collector"]) [node-type="BV M0 Fake Resource Collector"]:has(input[aria-label=resource_b_id]),.lg-node:has([node-type="BV M0 Fake Resource Consumer"]) [node-type="BV M0 Fake Resource Consumer"]:has(input[aria-label=collector_id]),.lg-node:has([node-type="BV M0 Fake Resource Consumer"]) [node-type="BV M0 Fake Resource Consumer"]:has(input[aria-label=resource_id]){display:none}.lg-slot:has(circle[fill*=BV_RUNTIME_RESOURCE_PROVIDER_M0],[style*=BV_RUNTIME_RESOURCE_PROVIDER_M0]){display:none!important}.lg-slot:has(circle[fill*=BV_RUNTIME_RESOURCE_PROVIDER],[style*=BV_RUNTIME_RESOURCE_PROVIDER]){display:none!important}.bv-lora-v3-picker-host{position:relative;z-index:1;padding:6px}.bv-lora-v3-picker-panel{display:grid;gap:10px}.bv-lora-v3-target{display:grid;gap:8px;padding:9px;border:1px solid var(--bv-ui-border);border-radius:4px}.bv-lora-v3-target>h3{margin:0}.bv-optional-lora-scope{display:grid;gap:7px}.bv-lora-v3-enable-row{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:start;gap:12px}.bv-lora-v3-enable-row>.bv-control-field>.bv-control-label{display:none}.bv-lora-v3-enable-row>.bv-control-field{padding-top:20px}.bv-lora-v3-scope-picker{display:grid;gap:8px}.bv-lora-v3-stack-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:6px 8px;align-items:end;padding:7px;border:1px solid var(--bv-ui-border);border-radius:4px}.bv-lora-v3-stack-row>strong,.bv-lora-v3-stack-row>.bv-resource-picker{grid-column:1}.bv-lora-v3-stack-row>.bv-button{grid-column:2;grid-row:2}.bv-lora-v3-window{display:grid;gap:10px;padding:10px;overflow:auto}.lg-node:has([node-type="BV M0 Fake Multi Resource Consumer"]) [node-type="BV M0 Fake Multi Resource Consumer"]:has(input[aria-label=resource_bindings]){display:none}.bv-m0-multi-picker{max-height:520px;overflow:auto}.bv-m0-binding{display:grid;gap:5px;padding:6px;border:1px solid var(--bv-ui-border);border-radius:4px}.bv-m0-binding>header{display:flex;align-items:center;justify-content:space-between}.bv-m0-binding>header button,.bv-m0-add-binding{color:var(--bv-ui-text);background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:4px}.bv-m0-binding>header button{width:24px;height:24px}.bv-m0-add-binding{min-height:28px}`,K1='.flexlayout__theme_light .flexlayout__layout{--color-text: var(--flexlayout-color-text, black);--color-background: var(--flexlayout-color-background, white);--color-base: var(--flexlayout-color-base, white);--color-1: var(--flexlayout-color-1, rgb(97%, 97%, 97%));--color-2: var(--flexlayout-color-2, rgb(94%, 94%, 94%));--color-3: var(--flexlayout-color-3, rgb(91%, 91%, 91%));--color-4: var(--flexlayout-color-4, rgb(88%, 88%, 88%));--color-5: var(--flexlayout-color-5, rgb(85%, 85%, 85%));--color-6: var(--flexlayout-color-6, rgb(82%, 82%, 82%));--color-drag1: var(--flexlayout-color-drag1, rgb(95, 134, 196));--color-drag2: var(--flexlayout-color-drag2, rgb(119, 166, 119));--color-drag1-background: var(--flexlayout-color-drag1-background, rgba(95, 134, 196, .1));--color-drag2-background: var(--flexlayout-color-drag2-background, rgba(119, 166, 119, .075));--font-size: var(--flexlayout-font-size, medium);--font-family: var(--flexlayout-font-family, Roboto, Arial, sans-serif);--font-weight: var(--flexlayout-font-weight, normal);--splitter-size: var(--flexlayout-splitter-size, 8px);--splitter-active-size: var(--flexlayout-splitter-active-size, 8px);--splitter-handle-visibility: var(--flexlayout-splitter-handle-visibility, hidden);--color-overflow: var(--flexlayout-color-overflow, gray);--color-icon: var(--flexlayout-color-icon, gray);--color-focus: var(--flexlayout-color-focus, #3b7de7);--color-tabset-background: var(--flexlayout-color-tabset-background, var(--color-background));--color-tabset-background-selected: var(--flexlayout-color-tabset-background-selected, var(--color-1));--color-tabset-background-maximized: var(--flexlayout-color-tabset-background-maximized, var(--color-2));--color-tabset-divider-line: var(--flexlayout-color-tabset-divider-line, var(--color-4));--color-border-tab-content: var(--flexlayout-color-border-tab-content, var(--color-background));--color-border-background: var(--flexlayout-color-border-background, var(--color-background));--color-border-divider-line: var(--flexlayout-color-border-divider-line, var(--color-4));--color-tab-content: var(--flexlayout-color-tab-content, var(--color-background));--color-tab-selected: var(--flexlayout-color-tab-selected, var(--color-text));--color-tab-selected-background: var(--flexlayout-color-tab-selected-background, var(--color-4));--color-tab-unselected: var(--flexlayout-color-tab-unselected, gray);--color-tab-unselected-background: var(--flexlayout-color-tab-unselected-background, transparent);--color-tab-textbox: var(--flexlayout-color-tab-textbox, var(--color-text));--color-tab-textbox-background: var(--flexlayout-color-tab-textbox-background, var(--color-3));--color-border-tab-selected: var(--flexlayout-color-border-tab-selected, var(--color-text));--color-border-tab-selected-background: var(--flexlayout-color-border-tab-selected-background, var(--color-4));--color-border-tab-unselected: var(--flexlayout-color-border-tab-unselected, gray);--color-border-tab-unselected-background: var(--flexlayout-color-border-tab-unselected-background, var(--color-2));--color-splitter: var(--flexlayout-color-splitter, var(--color-1));--color-splitter-hover: var(--flexlayout-color-splitter-hover, var(--color-4));--color-splitter-drag: var(--flexlayout-color-splitter-drag, var(--color-4));--color-splitter-handle: var(--flexlayout-color-splitter-handle, var(--color-3));--color-drag-rect-border: var(--flexlayout-color-drag-rect-border, #ccc);--color-drag-rect-background: var(--flexlayout-color-drag-rect-background, var(--color-5));--color-drag-rect: var(--flexlayout-color-drag-rect, var(--color-text));--color-popup-border: var(--flexlayout-color-popup-border, var(--color-6));--color-popup-unselected: var(--flexlayout-color-popup-unselected, var(--color-text));--color-popup-unselected-background: var(--flexlayout-color-popup-unselected-background, var(--color-background));--color-popup-selected: var(--flexlayout-color-popup-selected, var(--color-text));--color-popup-selected-background: var(--flexlayout-color-popup-selected-background, var(--color-3));--color-edge-marker: var(--flexlayout-color-edge-marker, #aaa);--color-edge-icon: var(--flexlayout-color-edge-icon, #555);--color-mini-scroll-indicator: var(--flexlayout-color-mini-scroll-indicator, rgba(128, 128, 128, .5));--color-mini-scroll-indicator-hovered: var(--flexlayout-color-mini-scroll-indicator-hovered, rgba(128, 128, 128, .7));--size-mini-scroll-indicator: var(--flexlayout-size-mini-scroll-indicator, 3px);--color-toolbar-button-hover: var(--flexlayout-color-toolbar-button-hover, var(--color-3));--color-float-window-header-background: var(--flexlayout-color-float-window-header-background, var(--color-tabset-background))}.flexlayout__theme_dark .flexlayout__layout{--color-text: var(--flexlayout-color-text, #eeeeee);--color-background: var(--flexlayout-color-background, black);--color-base: var(--flexlayout-color-base, black);--color-1: var(--flexlayout-color-1, rgb(7%, 7%, 7%));--color-2: var(--flexlayout-color-2, rgb(10%, 10%, 10%));--color-3: var(--flexlayout-color-3, rgb(15%, 15%, 15%));--color-4: var(--flexlayout-color-4, #333333);--color-5: var(--flexlayout-color-5, rgb(25%, 25%, 25%));--color-6: var(--flexlayout-color-6, rgb(30%, 30%, 30%));--color-drag1: var(--flexlayout-color-drag1, rgb(207, 232, 255));--color-drag2: var(--flexlayout-color-drag2, rgb(183, 209, 181));--color-drag1-background: var(--flexlayout-color-drag1-background, rgba(128, 128, 128, .15));--color-drag2-background: var(--flexlayout-color-drag2-background, rgba(128, 128, 128, .15));--font-size: var(--flexlayout-font-size, medium);--font-family: var(--flexlayout-font-family, Roboto, Arial, sans-serif);--font-weight: var(--flexlayout-font-weight, normal);--splitter-size: var(--flexlayout-splitter-size, 8px);--splitter-active-size: var(--flexlayout-splitter-active-size, 8px);--splitter-handle-visibility: var(--flexlayout-splitter-handle-visibility, hidden);--color-overflow: var(--flexlayout-color-overflow, gray);--color-icon: var(--flexlayout-color-icon, gray);--color-focus: var(--flexlayout-color-focus, #93c5fd);--color-tabset-background: var(--flexlayout-color-tabset-background, var(--color-1));--color-tabset-background-selected: var(--flexlayout-color-tabset-background-selected, var(--color-1));--color-tabset-background-maximized: var(--flexlayout-color-tabset-background-maximized, var(--color-6));--color-tabset-divider-line: var(--flexlayout-color-tabset-divider-line, var(--color-4));--color-border-tab-content: var(--flexlayout-color-border-tab-content, var(--color-background));--color-border-background: var(--flexlayout-color-border-background, var(--color-1));--color-border-divider-line: var(--flexlayout-color-border-divider-line, var(--color-4));--color-tab-content: var(--flexlayout-color-tab-content, var(--color-background));--color-tab-selected: var(--flexlayout-color-tab-selected, var(--color-text));--color-tab-selected-background: var(--flexlayout-color-tab-selected-background, var(--color-4));--color-tab-unselected: var(--flexlayout-color-tab-unselected, gray);--color-tab-unselected-background: var(--flexlayout-color-tab-unselected-background, transparent);--color-tab-textbox: var(--flexlayout-color-tab-textbox, var(--color-text));--color-tab-textbox-background: var(--flexlayout-color-tab-textbox-background, var(--color-3));--color-border-tab-selected: var(--flexlayout-color-border-tab-selected, var(--color-text));--color-border-tab-selected-background: var(--flexlayout-color-border-tab-selected-background, var(--color-4));--color-border-tab-unselected: var(--flexlayout-color-border-tab-unselected, gray);--color-border-tab-unselected-background: var(--flexlayout-color-border-tab-unselected-background, var(--color-2));--color-splitter: var(--flexlayout-color-splitter, var(--color-2));--color-splitter-hover: var(--flexlayout-color-splitter-hover, var(--color-4));--color-splitter-drag: var(--flexlayout-color-splitter-drag, var(--color-5));--color-splitter-handle: var(--flexlayout-color-splitter-handle, var(--color-3));--color-drag-rect-border: var(--flexlayout-color-drag-rect-border, var(--color-4));--color-drag-rect-background: var(--flexlayout-color-drag-rect-background, var(--color-1));--color-drag-rect: var(--flexlayout-color-drag-rect, var(--color-text));--color-popup-border: var(--flexlayout-color-popup-border, var(--color-6));--color-popup-unselected: var(--flexlayout-color-popup-unselected, var(--color-text));--color-popup-unselected-background: var(--flexlayout-color-popup-unselected-background, var(--color-background));--color-popup-selected: var(--flexlayout-color-popup-selected, var(--color-text));--color-popup-selected-background: var(--flexlayout-color-popup-selected-background, var(--color-4));--color-edge-marker: var(--flexlayout-color-edge-marker, gray);--color-edge-icon: var(--flexlayout-color-edge-icon, #eee);--color-mini-scroll-indicator: var(--flexlayout-color-mini-scroll-indicator, rgba(128, 128, 128, .5));--color-mini-scroll-indicator-hovered: var(--flexlayout-color-mini-scroll-indicator-hovered, rgba(128, 128, 128, .8));--size-mini-scroll-indicator: var(--flexlayout-size-mini-scroll-indicator, 3px);--color-toolbar-button-hover: var(--flexlayout-color-toolbar-button-hover, var(--color-4));--color-float-window-header-background: var(--flexlayout-color-float-window-header-background, var(--color-tabset-background))}.flexlayout__theme_gray .flexlayout__layout{--color-text: var(--flexlayout-color-text, black);--color-background: var(--flexlayout-color-background, white);--color-base: var(--flexlayout-color-base, white);--color-1: var(--flexlayout-color-1, rgb(97%, 97%, 97%));--color-2: var(--flexlayout-color-2, rgb(90%, 90%, 90%));--color-3: var(--flexlayout-color-3, rgb(85%, 85%, 85%));--color-4: var(--flexlayout-color-4, #cccccc);--color-5: var(--flexlayout-color-5, rgb(75%, 75%, 75%));--color-6: var(--flexlayout-color-6, rgb(70%, 70%, 70%));--color-drag1: var(--flexlayout-color-drag1, rgb(95, 134, 196));--color-drag2: var(--flexlayout-color-drag2, rgb(119, 166, 119));--color-drag1-background: var(--flexlayout-color-drag1-background, rgba(95, 134, 196, .1));--color-drag2-background: var(--flexlayout-color-drag2-background, rgba(119, 166, 119, .075));--font-size: var(--flexlayout-font-size, medium);--font-family: var(--flexlayout-font-family, Roboto, Arial, sans-serif);--font-weight: var(--flexlayout-font-weight, normal);--splitter-size: var(--flexlayout-splitter-size, 8px);--splitter-active-size: var(--flexlayout-splitter-active-size, 8px);--splitter-handle-visibility: var(--flexlayout-splitter-handle-visibility, hidden);--color-overflow: var(--flexlayout-color-overflow, gray);--color-icon: var(--flexlayout-color-icon, gray);--color-focus: var(--flexlayout-color-focus, #3b7de7);--color-tabset-background: var(--flexlayout-color-tabset-background, var(--color-1));--color-tabset-background-selected: var(--flexlayout-color-tabset-background-selected, var(--color-1));--color-tabset-background-maximized: var(--flexlayout-color-tabset-background-maximized, var(--color-6));--color-tabset-divider-line: var(--flexlayout-color-tabset-divider-line, var(--color-3));--color-border-tab-content: var(--flexlayout-color-border-tab-content, var(--color-background));--color-border-background: var(--flexlayout-color-border-background, var(--color-1));--color-border-divider-line: var(--flexlayout-color-border-divider-line, var(--color-3));--color-tab-content: var(--flexlayout-color-tab-content, var(--color-background));--color-tab-selected: var(--flexlayout-color-tab-selected, var(--color-text));--color-tab-selected-background: var(--flexlayout-color-tab-selected-background, var(--color-3));--color-tab-unselected: var(--flexlayout-color-tab-unselected, gray);--color-tab-unselected-background: var(--flexlayout-color-tab-unselected-background, transparent);--color-tab-textbox: var(--flexlayout-color-tab-textbox, var(--color-text));--color-tab-textbox-background: var(--flexlayout-color-tab-textbox-background, var(--color-3));--color-border-tab-selected: var(--flexlayout-color-border-tab-selected, var(--color-text));--color-border-tab-selected-background: var(--flexlayout-color-border-tab-selected-background, var(--color-3));--color-border-tab-unselected: var(--flexlayout-color-border-tab-unselected, gray);--color-border-tab-unselected-background: var(--flexlayout-color-border-tab-unselected-background, var(--color-2));--color-splitter: var(--flexlayout-color-splitter, var(--color-2));--color-splitter-hover: var(--flexlayout-color-splitter-hover, var(--color-4));--color-splitter-drag: var(--flexlayout-color-splitter-drag, var(--color-5));--color-splitter-handle: var(--flexlayout-color-splitter-handle, var(--color-3));--color-drag-rect-border: var(--flexlayout-color-drag-rect-border, var(--color-4));--color-drag-rect-background: var(--flexlayout-color-drag-rect-background, var(--color-3));--color-drag-rect: var(--flexlayout-color-drag-rect, var(--color-text));--color-popup-border: var(--flexlayout-color-popup-border, var(--color-6));--color-popup-unselected: var(--flexlayout-color-popup-unselected, var(--color-text));--color-popup-unselected-background: var(--flexlayout-color-popup-unselected-background, var(--color-background));--color-popup-selected: var(--flexlayout-color-popup-selected, var(--color-text));--color-popup-selected-background: var(--flexlayout-color-popup-selected-background, var(--color-3));--color-edge-marker: var(--flexlayout-color-edge-marker, #aaa);--color-edge-icon: var(--flexlayout-color-edge-icon, #555);--color-mini-scroll-indicator: var(--flexlayout-color-mini-scroll-indicator, rgba(128, 128, 128, .5));--color-mini-scroll-indicator-hovered: var(--flexlayout-color-mini-scroll-indicator-hovered, rgba(128, 128, 128, .7));--size-mini-scroll-indicator: var(--flexlayout-size-mini-scroll-indicator, 3px);--color-toolbar-button-hover: var(--flexlayout-color-toolbar-button-hover, var(--color-4));--color-float-window-header-background: var(--flexlayout-color-float-window-header-background, var(--color-tabset-background))}.flexlayout__theme_underline .flexlayout__layout{--color-text: var(--flexlayout-color-text, black);--color-background: var(--flexlayout-color-background, white);--color-base: var(--flexlayout-color-base, white);--color-1: var(--flexlayout-color-1, rgb(98%, 98%, 98%));--color-2: var(--flexlayout-color-2, rgb(96%, 96%, 96%));--color-3: var(--flexlayout-color-3, rgb(93%, 93%, 93%));--color-4: var(--flexlayout-color-4, rgb(90%, 90%, 90%));--color-5: var(--flexlayout-color-5, rgb(87%, 87%, 87%));--color-6: var(--flexlayout-color-6, rgb(84%, 84%, 84%));--color-drag1: var(--flexlayout-color-drag1, rgb(95, 134, 196));--color-drag2: var(--flexlayout-color-drag2, rgb(119, 166, 119));--color-drag1-background: var(--flexlayout-color-drag1-background, rgba(95, 134, 196, .1));--color-drag2-background: var(--flexlayout-color-drag2-background, rgba(119, 166, 119, .075));--font-size: var(--flexlayout-font-size, medium);--font-family: var(--flexlayout-font-family, Roboto, Arial, sans-serif);--font-weight: var(--flexlayout-font-weight, normal);--splitter-size: var(--flexlayout-splitter-size, 8px);--splitter-active-size: var(--flexlayout-splitter-active-size, 8px);--splitter-handle-visibility: var(--flexlayout-splitter-handle-visibility, hidden);--color-overflow: var(--flexlayout-color-overflow, gray);--color-icon: var(--flexlayout-color-icon, gray);--color-focus: var(--flexlayout-color-focus, #3b7de7);--color-tabset-background: var(--flexlayout-color-tabset-background, var(--color-background));--color-tabset-background-selected: var(--flexlayout-color-tabset-background-selected, var(--color-1));--color-tabset-background-maximized: var(--flexlayout-color-tabset-background-maximized, var(--color-6));--color-tabset-divider-line: var(--flexlayout-color-tabset-divider-line, var(--color-3));--color-border-tab-content: var(--flexlayout-color-border-tab-content, var(--color-background));--color-border-background: var(--flexlayout-color-border-background, var(--color-background));--color-border-divider-line: var(--flexlayout-color-border-divider-line, var(--color-3));--color-tab-content: var(--flexlayout-color-tab-content, var(--color-background));--color-tab-selected: var(--flexlayout-color-tab-selected, var(--color-text));--color-tab-selected-background: var(--flexlayout-color-tab-selected-background, transparent);--color-tab-unselected: var(--flexlayout-color-tab-unselected, gray);--color-tab-unselected-background: var(--flexlayout-color-tab-unselected-background, transparent);--color-tab-textbox: var(--flexlayout-color-tab-textbox, var(--color-text));--color-tab-textbox-background: var(--flexlayout-color-tab-textbox-background, var(--color-3));--color-border-tab-selected: var(--flexlayout-color-border-tab-selected, var(--color-text));--color-border-tab-selected-background: var(--flexlayout-color-border-tab-selected-background, transparent);--color-border-tab-unselected: var(--flexlayout-color-border-tab-unselected, gray);--color-border-tab-unselected-background: var(--flexlayout-color-border-tab-unselected-background, transparent);--color-splitter: var(--flexlayout-color-splitter, var(--color-1));--color-splitter-hover: var(--flexlayout-color-splitter-hover, var(--color-4));--color-splitter-drag: var(--flexlayout-color-splitter-drag, var(--color-4));--color-splitter-handle: var(--flexlayout-color-splitter-handle, var(--color-3));--color-drag-rect-border: var(--flexlayout-color-drag-rect-border, var(--color-6));--color-drag-rect-background: var(--flexlayout-color-drag-rect-background, var(--color-4));--color-drag-rect: var(--flexlayout-color-drag-rect, var(--color-text));--color-popup-border: var(--flexlayout-color-popup-border, var(--color-6));--color-popup-unselected: var(--flexlayout-color-popup-unselected, var(--color-text));--color-popup-unselected-background: var(--flexlayout-color-popup-unselected-background, var(--color-background));--color-popup-selected: var(--flexlayout-color-popup-selected, var(--color-text));--color-popup-selected-background: var(--flexlayout-color-popup-selected-background, var(--color-3));--color-edge-marker: var(--flexlayout-color-edge-marker, #aaa);--color-edge-icon: var(--flexlayout-color-edge-icon, #555);--color-underline: var(--flexlayout-color-underline, rgb(65, 105, 225));--color-underline-hover: var(--flexlayout-color-underline-hover, #aaa);--underline_height: 3px;--color-mini-scroll-indicator: var(--flexlayout-color-mini-scroll-indicator, rgba(128, 128, 128, .5));--color-mini-scroll-indicator-hovered: var(--flexlayout-color-mini-scroll-indicator-hovered, rgba(128, 128, 128, .7));--size-mini-scroll-indicator: var(--flexlayout-size-mini-scroll-indicator, 4px);--color-toolbar-button-hover: var(--flexlayout-color-toolbar-button-hover, var(--color-3));--color-float-window-header-background: var(--flexlayout-color-float-window-header-background, var(--color-tabset-background))}.flexlayout__theme_rounded .flexlayout__layout{--color-text: var(--flexlayout-color-text, black);--color-background: var(--flexlayout-color-background, #e9eef6);--color-base: var(--flexlayout-color-base, #f2f6fb);--color-1: var(--flexlayout-color-1, rgb(90.3137254902%, 93.2941176471%, 97.0196078431%));--color-2: var(--flexlayout-color-2, rgb(85.7254901961%, 90.1176470588%, 95.6078431373%));--color-3: var(--flexlayout-color-3, rgb(81.137254902%, 86.9411764706%, 94.1960784314%));--color-4: var(--flexlayout-color-4, rgb(76.5490196078%, 83.7647058824%, 92.7843137255%));--color-5: var(--flexlayout-color-5, rgb(71.9607843137%, 80.5882352941%, 91.3725490196%));--color-6: var(--flexlayout-color-6, rgb(67.3725490196%, 77.4117647059%, 89.9607843137%));--color-drag1: var(--flexlayout-color-drag1, rgb(95, 134, 196));--color-drag2: var(--flexlayout-color-drag2, var(--color-drag1));--color-drag1-background: var(--flexlayout-color-drag1-background, rgba(95, 134, 196, .1));--color-drag2-background: var(--flexlayout-color-drag2-background, var(--color-drag1-background));--font-size: var(--flexlayout-font-size, medium);--font-family: var(--flexlayout-font-family, Roboto, Arial, sans-serif);--font-weight: var(--flexlayout-font-weight, normal);--splitter-size: var(--flexlayout-splitter-size, 8px);--splitter-active-size: var(--flexlayout-splitter-active-size, 8px);--splitter-handle-visibility: var(--flexlayout-splitter-handle-visibility, hidden);--color-overflow: var(--flexlayout-color-overflow, #999db2);--color-icon: var(--flexlayout-color-icon, #999db2);--color-focus: var(--flexlayout-color-focus, #3b7de7);--color-tabset-background: var(--flexlayout-color-tabset-background, white);--color-tabset-background-selected: var(--flexlayout-color-tabset-background-selected, white);--color-tabset-background-maximized: var(--flexlayout-color-tabset-background-maximized, white);--color-tabset-divider-line: var(--flexlayout-color-tabset-divider-line, white);--color-border-tab-content: var(--flexlayout-color-border-tab-content, white);--color-border-background: var(--flexlayout-color-border-background, var(--color-background));--color-border-divider-line: var(--flexlayout-color-border-divider-line, var(--color-background));--color-tab-content: var(--flexlayout-color-tab-content, white);--color-tab-selected: var(--flexlayout-color-tab-selected, var(--color-text));--color-tab-selected-background: var(--flexlayout-color-tab-selected-background, var(--color-2));--color-tab-unselected: var(--flexlayout-color-tab-unselected, gray);--color-tab-unselected-background: var(--flexlayout-color-tab-unselected-background, #d3d4e745);--color-tab-textbox: var(--flexlayout-color-tab-textbox, var(--color-text));--color-tab-textbox-background: var(--flexlayout-color-tab-textbox-background, var(--color-3));--color-border-tab-selected: var(--flexlayout-color-border-tab-selected, var(--color-text));--color-border-tab-selected-background: var(--flexlayout-color-border-tab-selected-background, var(--color-2));--color-border-tab-unselected: var(--flexlayout-color-border-tab-unselected, gray);--color-border-tab-unselected-background: var(--flexlayout-color-border-tab-unselected-background, #d3d4e745);--color-splitter: var(--flexlayout-color-splitter, var(--color-background));--color-splitter-hover: var(--flexlayout-color-splitter-hover, var(--color-2));--color-splitter-drag: var(--flexlayout-color-splitter-drag, var(--color-2));--color-splitter-handle: var(--flexlayout-color-splitter-handle, var(--color-3));--color-drag-rect-border: var(--flexlayout-color-drag-rect-border, #ccc);--color-drag-rect-background: var(--flexlayout-color-drag-rect-background, var(--color-5));--color-drag-rect: var(--flexlayout-color-drag-rect, var(--color-text));--color-popup-border: var(--flexlayout-color-popup-border, var(--color-6));--color-popup-unselected: var(--flexlayout-color-popup-unselected, var(--color-text));--color-popup-unselected-background: var(--flexlayout-color-popup-unselected-background, var(--color-background));--color-popup-selected: var(--flexlayout-color-popup-selected, var(--color-text));--color-popup-selected-background: var(--flexlayout-color-popup-selected-background, var(--color-3));--color-edge-marker: var(--flexlayout-color-edge-marker, #a6bbdf);--color-edge-icon: var(--flexlayout-color-edge-icon, #555);--color-mini-scroll-indicator: var(--flexlayout-color-mini-scroll-indicator, rgba(180, 200, 230, .5));--color-mini-scroll-indicator-hovered: var(--flexlayout-color-mini-scroll-indicator-hovered, rgba(180, 200, 230, .7));--size-mini-scroll-indicator: var(--flexlayout-size-mini-scroll-indicator, 4px);--color-toolbar-button-hover: var(--flexlayout-color-toolbar-button-hover, var(--color-2));--tab-button-radius: var(--flexlayout-tab-button-radius, 10px);--border-button-radius: var(--flexlayout-border-button-radius, 10px);--color-float-window-header-background: var(--flexlayout-color-float-window-header-background, var(--color-tabset-background))}.flexlayout__theme_alpha_light .flexlayout__layout{--color-text: var(--flexlayout-color-text, black);--color-background: var(--flexlayout-color-background, #ffffff);--color-base: var(--flexlayout-color-base, #f9fafb);--color-1: var(--flexlayout-color-1, #ededee);--color-2: var(--flexlayout-color-2, #e5e7eb);--color-3: var(--flexlayout-color-3, #d1d5db);--color-4: var(--flexlayout-color-4, #9ca3af);--color-5: var(--flexlayout-color-5, #6b7280);--color-6: var(--flexlayout-color-6, #4b5563);--color-drag1: var(--flexlayout-color-drag1, rgb(95, 134, 196));--color-drag2: var(--flexlayout-color-drag2, rgb(119, 166, 119));--color-drag1-background: var(--flexlayout-color-drag1-background, rgba(59, 130, 246, .1));--color-drag2-background: var(--flexlayout-color-drag2-background, rgba(16, 185, 129, .075));--font-size: var(--flexlayout-font-size, medium);--font-family: var(--flexlayout-font-family, system-ui, -apple-system, Arial, sans-serif);--font-weight: var(--flexlayout-font-weight, 500);--splitter-size: var(--flexlayout-splitter-size, 8px);--splitter-active-size: var(--flexlayout-splitter-active-size, 8px);--splitter-handle-visibility: var(--flexlayout-splitter-handle-visibility, hidden);--color-overflow: var(--flexlayout-color-overflow, var(--color-5));--color-icon: var(--flexlayout-color-icon, var(--color-5));--color-focus: var(--flexlayout-color-focus, #3b7de7);--color-tabset-background: var(--flexlayout-color-tabset-background, var(--color-1));--color-tabset-background-selected: var(--flexlayout-color-tabset-background-selected, var(--color-1));--color-tabset-background-maximized: var(--flexlayout-color-tabset-background-maximized, var(--color-1));--color-tabset-divider-line: var(--flexlayout-color-tabset-divider-line, var(--color-2));--color-border-tab-content: var(--flexlayout-color-border-tab-content, var(--color-1));--color-border-background: var(--flexlayout-color-border-background, var(--color-1));--color-border-divider-line: var(--flexlayout-color-border-divider-line, var(--color-2));--color-tab-content: var(--flexlayout-color-tab-content, var(--color-background));--color-tab-selected: var(--flexlayout-color-tab-selected, #3b7de7);--color-tab-selected-background: var(--flexlayout-color-tab-selected-background, var(--color-background));--color-tab-unselected: var(--flexlayout-color-tab-unselected, var(--color-5));--color-tab-unselected-background: var(--flexlayout-color-tab-unselected-background, transparent);--color-tab-textbox: var(--flexlayout-color-tab-textbox, var(--color-text));--color-tab-textbox-background: var(--flexlayout-color-tab-textbox-background, var(--color-background));--color-border-tab-selected: var(--flexlayout-color-border-tab-selected, #3b7de7);--color-border-tab-selected-background: var(--flexlayout-color-border-tab-selected-background, var(--color-background));--color-border-tab-unselected: var(--flexlayout-color-border-tab-unselected, var(--color-5));--color-border-tab-unselected-background: var(--flexlayout-color-border-tab-unselected-background, var(--color-1));--color-splitter: var(--flexlayout-color-splitter, var(--color-1));--color-splitter-hover: var(--flexlayout-color-splitter-hover, var(--color-4));--color-splitter-drag: var(--flexlayout-color-splitter-drag, var(--color-4));--color-splitter-handle: var(--flexlayout-color-splitter-handle, var(--color-3));--color-drag-rect-border: var(--flexlayout-color-drag-rect-border, var(--color-3));--color-drag-rect-background: var(--flexlayout-color-drag-rect-background, var(--color-background));--color-drag-rect: var(--flexlayout-color-drag-rect, var(--color-text));--color-popup-border: var(--flexlayout-color-popup-border, var(--color-2));--color-popup-unselected: var(--flexlayout-color-popup-unselected, var(--color-text));--color-popup-unselected-background: var(--flexlayout-color-popup-unselected-background, var(--color-background));--color-popup-selected: var(--flexlayout-color-popup-selected, var(--color-drag1));--color-popup-selected-background: var(--flexlayout-color-popup-selected-background, var(--color-1));--color-edge-marker: var(--flexlayout-color-edge-marker, var(--color-3));--color-edge-icon: var(--flexlayout-color-edge-icon, var(--color-6));--color-mini-scroll-indicator: var(--flexlayout-color-mini-scroll-indicator, rgba(0, 0, 0, .1));--color-mini-scroll-indicator-hovered: var(--flexlayout-color-mini-scroll-indicator-hovered, rgba(0, 0, 0, .3));--size-mini-scroll-indicator: var(--flexlayout-size-mini-scroll-indicator, 4px);--color-toolbar-button-hover: var(--flexlayout-color-toolbar-button-hover, var(--color-2));--tab-button-radius: var(--flexlayout-tab-button-radius, 10px);--border-button-radius: var(--flexlayout-border-button-radius, 5px);--color-float-window-header-background: var(--flexlayout-color-float-window-header-background, var(--color-tabset-background))}.flexlayout__theme_alpha_dark .flexlayout__layout{--color-text: var(--flexlayout-color-text, white);--color-background: var(--flexlayout-color-background, black);--color-base: var(--flexlayout-color-base, #121212);--color-1: var(--flexlayout-color-1, #1c1c1c);--color-2: var(--flexlayout-color-2, #383838);--color-3: var(--flexlayout-color-3, #404040);--color-4: var(--flexlayout-color-4, #525252);--color-5: var(--flexlayout-color-5, #737373);--color-6: var(--flexlayout-color-6, #a3a3a3);--color-drag1: var(--flexlayout-color-drag1, #93c5fd);--color-drag2: var(--flexlayout-color-drag2, #6ee7b7);--color-drag1-background: var(--flexlayout-color-drag1-background, rgba(147, 197, 253, .15));--color-drag2-background: var(--flexlayout-color-drag2-background, rgba(110, 231, 183, .1));--font-size: var(--flexlayout-font-size, medium);--font-family: var(--flexlayout-font-family, system-ui, -apple-system, Arial, sans-serif);--font-weight: var(--flexlayout-font-weight, 500);--splitter-size: var(--flexlayout-splitter-size, 8px);--splitter-active-size: var(--flexlayout-splitter-active-size, 8px);--splitter-handle-visibility: var(--flexlayout-splitter-handle-visibility, hidden);--color-overflow: var(--flexlayout-color-overflow, gray);--color-icon: var(--flexlayout-color-icon, gray);--color-focus: var(--flexlayout-color-focus, #93c5fd);--color-tabset-background: var(--flexlayout-color-tabset-background, var(--color-1));--color-tabset-background-selected: var(--flexlayout-color-tabset-background-selected, var(--color-1));--color-tabset-background-maximized: var(--flexlayout-color-tabset-background-maximized, var(--color-1));--color-tabset-divider-line: var(--flexlayout-color-tabset-divider-line, var(--color-2));--color-border-tab-content: var(--flexlayout-color-border-tab-content, var(--color-1));--color-border-background: var(--flexlayout-color-border-background, var(--color-1));--color-border-divider-line: var(--flexlayout-color-border-divider-line, var(--color-2));--color-tab-content: var(--flexlayout-color-tab-content, var(--color-background));--color-tab-selected: var(--flexlayout-color-tab-selected, #e5e7eb);--color-tab-selected-background: var(--flexlayout-color-tab-selected-background, var(--color-background));--color-tab-unselected: var(--flexlayout-color-tab-unselected, var(--color-5));--color-tab-unselected-background: var(--flexlayout-color-tab-unselected-background, transparent);--color-tab-textbox: var(--flexlayout-color-tab-textbox, var(--color-text));--color-tab-textbox-background: var(--flexlayout-color-tab-textbox-background, var(--color-background));--color-border-tab-selected: var(--flexlayout-color-border-tab-selected, #e5e7eb);--color-border-tab-selected-background: var(--flexlayout-color-border-tab-selected-background, var(--color-background));--color-border-tab-unselected: var(--flexlayout-color-border-tab-unselected, var(--color-5));--color-border-tab-unselected-background: var(--flexlayout-color-border-tab-unselected-background, var(--color-1));--color-splitter: var(--flexlayout-color-splitter, var(--color-1));--color-splitter-hover: var(--flexlayout-color-splitter-hover, var(--color-3));--color-splitter-drag: var(--flexlayout-color-splitter-drag, var(--color-4));--color-splitter-handle: var(--flexlayout-color-splitter-handle, var(--color-3));--color-drag-rect-border: var(--flexlayout-color-drag-rect-border, var(--color-3));--color-drag-rect-background: var(--flexlayout-color-drag-rect-background, var(--color-background));--color-drag-rect: var(--flexlayout-color-drag-rect, var(--color-text));--color-popup-border: var(--flexlayout-color-popup-border, var(--color-2));--color-popup-unselected: var(--flexlayout-color-popup-unselected, var(--color-text));--color-popup-unselected-background: var(--flexlayout-color-popup-unselected-background, var(--color-background));--color-popup-selected: var(--flexlayout-color-popup-selected, #f9fafb);--color-popup-selected-background: var(--flexlayout-color-popup-selected-background, var(--color-1));--color-edge-marker: var(--flexlayout-color-edge-marker, var(--color-3));--color-edge-icon: var(--flexlayout-color-edge-icon, gray);--color-mini-scroll-indicator: var(--flexlayout-color-mini-scroll-indicator, rgba(255, 255, 255, .1));--color-mini-scroll-indicator-hovered: var(--flexlayout-color-mini-scroll-indicator-hovered, rgba(255, 255, 255, .3));--size-mini-scroll-indicator: var(--flexlayout-size-mini-scroll-indicator, 4px);--color-toolbar-button-hover: var(--flexlayout-color-toolbar-button-hover, var(--color-2));--tab-button-radius: var(--flexlayout-tab-button-radius, 10px);--border-button-radius: var(--flexlayout-border-button-radius, 5px);--color-float-window-header-background: var(--flexlayout-color-float-window-header-background, var(--color-tabset-background))}.flexlayout__theme_alpha_rounded .flexlayout__layout{--color-text: var(--flexlayout-color-text, black);--color-background: var(--flexlayout-color-background, #e9eef6);--color-base: var(--flexlayout-color-base, #ffffff);--color-1: var(--flexlayout-color-1, #f1f5f9);--color-2: var(--flexlayout-color-2, #e2e8f0);--color-3: var(--flexlayout-color-3, #cbd5e1);--color-4: var(--flexlayout-color-4, #94a3b8);--color-5: var(--flexlayout-color-5, #64748b);--color-6: var(--flexlayout-color-6, #475569);--color-drag1: var(--flexlayout-color-drag1, rgb(95, 134, 196));--color-drag2: var(--flexlayout-color-drag2, rgb(119, 166, 119));--color-drag1-background: var(--flexlayout-color-drag1-background, rgba(59, 130, 246, .1));--color-drag2-background: var(--flexlayout-color-drag2-background, rgba(16, 185, 129, .075));--font-size: var(--flexlayout-font-size, medium);--font-family: var(--flexlayout-font-family, system-ui, -apple-system, Arial, sans-serif);--font-weight: var(--flexlayout-font-weight, 500);--splitter-size: var(--flexlayout-splitter-size, 8px);--splitter-active-size: var(--flexlayout-splitter-active-size, 8px);--splitter-handle-visibility: var(--flexlayout-splitter-handle-visibility, hidden);--color-overflow: var(--flexlayout-color-overflow, var(--color-4));--color-icon: var(--flexlayout-color-icon, var(--color-4));--color-focus: var(--flexlayout-color-focus, #3b7de7);--color-tabset-background: var(--flexlayout-color-tabset-background, white);--color-tabset-background-selected: var(--flexlayout-color-tabset-background-selected, white);--color-tabset-background-maximized: var(--flexlayout-color-tabset-background-maximized, white);--color-tabset-divider-line: var(--flexlayout-color-tabset-divider-line, white);--color-border-tab-content: var(--flexlayout-color-border-tab-content, white);--color-border-background: var(--flexlayout-color-border-background, var(--color-background));--color-border-divider-line: var(--flexlayout-color-border-divider-line, var(--color-background));--color-tab-content: var(--flexlayout-color-tab-content, white);--color-tab-selected: var(--flexlayout-color-tab-selected, #3b7de7);--color-tab-selected-background: var(--flexlayout-color-tab-selected-background, var(--color-2));--color-tab-unselected: var(--flexlayout-color-tab-unselected, var(--color-4));--color-tab-unselected-background: var(--flexlayout-color-tab-unselected-background, var(--color-1));--color-tab-textbox: var(--flexlayout-color-tab-textbox, var(--color-text));--color-tab-textbox-background: var(--flexlayout-color-tab-textbox-background, var(--color-3));--color-border-tab-selected: var(--flexlayout-color-border-tab-selected, #3b7de7);--color-border-tab-selected-background: var(--flexlayout-color-border-tab-selected-background, var(--color-2));--color-border-tab-unselected: var(--flexlayout-color-border-tab-unselected, var(--color-4));--color-border-tab-unselected-background: var(--flexlayout-color-border-tab-unselected-background, var(--color-1));--color-splitter: var(--flexlayout-color-splitter, var(--color-background));--color-splitter-hover: var(--flexlayout-color-splitter-hover, var(--color-3));--color-splitter-drag: var(--flexlayout-color-splitter-drag, var(--color-3));--color-splitter-handle: var(--flexlayout-color-splitter-handle, var(--color-3));--color-drag-rect-border: var(--flexlayout-color-drag-rect-border, var(--color-3));--color-drag-rect-background: var(--flexlayout-color-drag-rect-background, var(--color-base));--color-drag-rect: var(--flexlayout-color-drag-rect, var(--color-text));--color-popup-border: var(--flexlayout-color-popup-border, var(--color-2));--color-popup-unselected: var(--flexlayout-color-popup-unselected, var(--color-text));--color-popup-unselected-background: var(--flexlayout-color-popup-unselected-background, var(--color-base));--color-popup-selected: var(--flexlayout-color-popup-selected, var(--color-drag1));--color-popup-selected-background: var(--flexlayout-color-popup-selected-background, var(--color-1));--color-edge-marker: var(--flexlayout-color-edge-marker, var(--color-3));--color-edge-icon: var(--flexlayout-color-edge-icon, var(--color-6));--color-mini-scroll-indicator: var(--flexlayout-color-mini-scroll-indicator, rgba(0, 0, 0, .1));--color-mini-scroll-indicator-hovered: var(--flexlayout-color-mini-scroll-indicator-hovered, rgba(0, 0, 0, .2));--size-mini-scroll-indicator: var(--flexlayout-size-mini-scroll-indicator, 4px);--color-toolbar-button-hover: var(--flexlayout-color-toolbar-button-hover, var(--color-1));--tab-button-radius: var(--flexlayout-tab-button-radius, 16px);--border-button-radius: var(--flexlayout-border-button-radius, 16px);--color-float-window-header-background: var(--flexlayout-color-float-window-header-background, var(--color-tabset-background))}.flexlayout__theme_aria .flexlayout__layout{--color-text: var(--flexlayout-color-text, black);--color-background: var(--flexlayout-color-background, #ffffff);--color-base: var(--flexlayout-color-base, #f9fafb);--color-1: var(--flexlayout-color-1, #ededee);--color-2: var(--flexlayout-color-2, #e5e7eb);--color-3: var(--flexlayout-color-3, #d1d5db);--color-4: var(--flexlayout-color-4, #9ca3af);--color-5: var(--flexlayout-color-5, #6b7280);--color-6: var(--flexlayout-color-6, #4b5563);--color-drag1: var(--flexlayout-color-drag1, rgb(95, 134, 196));--color-drag2: var(--flexlayout-color-drag2, rgb(119, 166, 119));--color-drag1-background: var(--flexlayout-color-drag1-background, rgba(59, 130, 246, .1));--color-drag2-background: var(--flexlayout-color-drag2-background, rgba(16, 185, 129, .075));--font-size: var(--flexlayout-font-size, medium);--font-family: var(--flexlayout-font-family, system-ui, -apple-system, Arial, sans-serif);--font-weight: var(--flexlayout-font-weight, 500);--splitter-size: var(--flexlayout-splitter-size, 8px);--splitter-active-size: var(--flexlayout-splitter-active-size, 8px);--splitter-handle-visibility: var(--flexlayout-splitter-handle-visibility, hidden);--color-overflow: var(--flexlayout-color-overflow, var(--color-5));--color-icon: var(--flexlayout-color-icon, var(--color-5));--color-focus: var(--flexlayout-color-focus, #3b7de7);--color-tabset-background: var(--flexlayout-color-tabset-background, var(--color-1));--color-tabset-background-selected: var(--flexlayout-color-tabset-background-selected, var(--color-1));--color-tabset-background-maximized: var(--flexlayout-color-tabset-background-maximized, var(--color-1));--color-tabset-divider-line: var(--flexlayout-color-tabset-divider-line, var(--color-2));--color-border-tab-content: var(--flexlayout-color-border-tab-content, var(--color-1));--color-border-background: var(--flexlayout-color-border-background, var(--color-1));--color-border-divider-line: var(--flexlayout-color-border-divider-line, var(--color-2));--color-tab-content: var(--flexlayout-color-tab-content, var(--color-background));--color-tab-selected: var(--flexlayout-color-tab-selected, #3b7de7);--color-tab-selected-background: var(--flexlayout-color-tab-selected-background, var(--color-background));--color-tab-unselected: var(--flexlayout-color-tab-unselected, var(--color-5));--color-tab-unselected-background: var(--flexlayout-color-tab-unselected-background, transparent);--color-tab-textbox: var(--flexlayout-color-tab-textbox, var(--color-text));--color-tab-textbox-background: var(--flexlayout-color-tab-textbox-background, var(--color-background));--color-border-tab-selected: var(--flexlayout-color-border-tab-selected, #3b7de7);--color-border-tab-selected-background: var(--flexlayout-color-border-tab-selected-background, var(--color-background));--color-border-tab-unselected: var(--flexlayout-color-border-tab-unselected, var(--color-5));--color-border-tab-unselected-background: var(--flexlayout-color-border-tab-unselected-background, var(--color-1));--color-splitter: var(--flexlayout-color-splitter, var(--color-1));--color-splitter-hover: var(--flexlayout-color-splitter-hover, var(--color-4));--color-splitter-drag: var(--flexlayout-color-splitter-drag, var(--color-4));--color-splitter-handle: var(--flexlayout-color-splitter-handle, var(--color-3));--color-drag-rect-border: var(--flexlayout-color-drag-rect-border, var(--color-3));--color-drag-rect-background: var(--flexlayout-color-drag-rect-background, var(--color-background));--color-drag-rect: var(--flexlayout-color-drag-rect, var(--color-text));--color-popup-border: var(--flexlayout-color-popup-border, var(--color-2));--color-popup-unselected: var(--flexlayout-color-popup-unselected, var(--color-text));--color-popup-unselected-background: var(--flexlayout-color-popup-unselected-background, var(--color-background));--color-popup-selected: var(--flexlayout-color-popup-selected, var(--color-drag1));--color-popup-selected-background: var(--flexlayout-color-popup-selected-background, var(--color-1));--color-edge-marker: var(--flexlayout-color-edge-marker, var(--color-3));--color-edge-icon: var(--flexlayout-color-edge-icon, var(--color-6));--color-mini-scroll-indicator: var(--flexlayout-color-mini-scroll-indicator, rgba(0, 0, 0, .1));--color-mini-scroll-indicator-hovered: var(--flexlayout-color-mini-scroll-indicator-hovered, rgba(0, 0, 0, .3));--size-mini-scroll-indicator: var(--flexlayout-size-mini-scroll-indicator, 4px);--color-toolbar-button-hover: var(--flexlayout-color-toolbar-button-hover, var(--color-2));--tab-button-radius: var(--flexlayout-tab-button-radius, 10px);--border-button-radius: var(--flexlayout-border-button-radius, 5px);--color-float-window-header-background: var(--flexlayout-color-float-window-header-background, var(--color-tabset-background))}.flexlayout__theme_aria .flexlayout__layout{--color-tab-selected: var(--flexlayout-color-tab-selected, #2563eb);--color-border-tab-selected: var(--flexlayout-color-border-tab-selected, #2563eb);--color-tab-unselected: var(--flexlayout-color-tab-unselected, var(--color-6));--color-border-tab-unselected: var(--flexlayout-color-border-tab-unselected, var(--color-6))}.flexlayout__layout{inset:0;position:absolute;display:flex;background-color:var(--color-background)}.flexlayout__layout_metrics{position:absolute;top:-30000px}.flexlayout__layout_overlay{inset:0;position:absolute;z-index:1000}.flexlayout__layout_tab_stamps{position:absolute;top:-10000px;z-index:100;display:flex;flex-direction:column;align-items:flex-start}.flexlayout__layout_moveables_home{visibility:hidden;position:absolute;width:100px;height:100px;top:-20000px}.flexlayout__layout_main{display:flex;flex-basis:0px;min-width:0;min-height:0;flex-grow:1;position:relative}.flexlayout__layout_border_container{display:flex;flex-basis:0px;min-width:0;min-height:0;flex-grow:1}.flexlayout__layout_border_container_inner{display:flex;flex-basis:0px;min-width:0;min-height:0;flex-grow:1;position:relative}.flexlayout__splitter{display:flex;align-items:center;justify-content:center;background-color:var(--color-splitter);touch-action:none;z-index:10;position:relative}.flexlayout__splitter:focus-visible{outline:2px solid var(--color-focus);outline-offset:-2px}.flexlayout__splitter_horz{width:var(--splitter-size);min-width:var(--splitter-size)}.flexlayout__splitter_horz:before{content:"";position:absolute;top:0;bottom:0;left:50%;width:var(--splitter-active-size);transform:translate(-50%);z-index:1}.flexlayout__splitter_vert{height:var(--splitter-size);min-height:var(--splitter-size)}.flexlayout__splitter_vert:before{content:"";position:absolute;left:0;right:0;top:50%;height:var(--splitter-active-size);transform:translateY(-50%);z-index:1}@media (hover: hover){.flexlayout__splitter:hover{background-color:var(--color-splitter-hover);transition:background-color ease-in .1s;transition-delay:.05s;border-radius:5px}}.flexlayout__splitter_drag{position:absolute;display:flex;align-items:center;justify-content:center;z-index:1000;border-radius:5px;background-color:var(--color-splitter-drag)}.flexlayout__splitter_handle{background-color:var(--color-splitter-handle);border-radius:3px;visibility:var(--splitter-handle-visibility)}.flexlayout__splitter_handle_horz{width:3px;height:30px}.flexlayout__splitter_handle_vert{width:30px;height:3px}.flexlayout__outline_rect{position:absolute;pointer-events:none;box-sizing:border-box;border:2px solid var(--color-drag1);background:var(--color-drag1-background);border-radius:5px;z-index:1000}.flexlayout__outline_rect_edge{pointer-events:none;border:2px solid var(--color-drag2);background:var(--color-drag2-background);border-radius:5px;z-index:1000;box-sizing:border-box}.flexlayout__edge_rect{position:absolute;z-index:1000;background-color:var(--color-edge-marker);pointer-events:none;display:flex;align-items:center;justify-content:center}.flexlayout__drag_rect{color:var(--color-drag-rect);background-color:var(--color-drag-rect-background);border:2px solid var(--color-drag-rect-border);border-radius:5px;box-sizing:border-box;display:flex;justify-content:center;flex-direction:column;overflow:hidden;padding:.3em .8em;word-wrap:break-word;font-size:var(--font-size);font-family:var(--font-family)}.flexlayout__row{display:flex;flex-basis:0px;min-width:0;min-height:0;position:relative;box-sizing:border-box;overflow:hidden}.flexlayout__tabset{display:flex;flex-direction:column;position:relative;background-color:var(--color-tabset-background);box-sizing:border-box;font-family:var(--font-family);overflow:hidden;flex-grow:1}.flexlayout__tabset_container{display:flex;flex-basis:0px;min-width:0;min-height:0;flex-direction:column;overflow:hidden;flex-grow:1}.flexlayout__tabset_tab_divider{width:4px}.flexlayout__tabset_content{display:flex;flex-basis:0px;min-width:0;min-height:0;flex-grow:1;box-sizing:border-box;position:relative}.flexlayout__tabset_leading{display:flex}.flexlayout__tabset_tabbar_outer{box-sizing:border-box;background-color:var(--color-tabset-background);overflow:hidden;display:flex;align-items:center;min-height:1.5em;font-size:var(--font-size);font-weight:var(--font-weight)}.flexlayout__tabset_tabbar_outer_top{padding:0 2px;border-bottom:1px solid var(--color-tabset-divider-line)}.flexlayout__tabset_tabbar_outer_bottom{padding:0 2px;border-top:1px solid var(--color-tabset-divider-line)}.flexlayout__tabset_tabbar_inner{position:relative;box-sizing:border-box;display:flex;flex-grow:1;scrollbar-width:none}.flexlayout__tabset_tabbar_inner::-webkit-scrollbar{display:none}.flexlayout__tabset_tabbar_inner_tab_container{position:relative;display:flex;padding-left:4px;padding-right:4px;box-sizing:border-box;white-space:nowrap;align-items:center}.flexlayout__tabset_tabbar_inner_tab_container_top{border-top:2px solid transparent}.flexlayout__tabset_tabbar_inner_tab_container_bottom{border-bottom:2px solid transparent}.flexlayout__tabset-selected{background-color:var(--color-tabset-background-selected)}.flexlayout__tabset-maximized{background-color:var(--color-tabset-background-maximized)}.flexlayout__tab_button_stamp{display:inline-flex;align-items:center;gap:.3em;white-space:nowrap;box-sizing:border-box}.flexlayout__tab{overflow:hidden;box-sizing:border-box;background-color:var(--color-tab-content);color:var(--color-text);position:absolute}.flexlayout__tab_moveable{position:relative;height:100%;min-width:1px;min-height:1px;overflow:auto;box-sizing:border-box}.flexlayout__tab_overlay{z-index:20;position:absolute;inset:0;background-color:#0000003d}.flexlayout__tab_border_overlay{z-index:1000}.flexlayout__tab_overlay_raised{z-index:1001}.flexlayout__tab_layout_container{position:relative;height:100%;box-sizing:border-box}.flexlayout__tab_layout_container_user{position:relative;flex-grow:1;box-sizing:border-box}.flexlayout__tab_button{display:flex;gap:.3em;align-items:center;box-sizing:border-box;padding:3px .5em;font-weight:var(--font-weight)}.flexlayout__tab_button:focus-visible{outline:2px solid var(--color-focus);outline-offset:-2px}.flexlayout__tab_button{cursor:pointer}.flexlayout__tab_button_stretch{background-color:transparent;color:var(--color-tab-selected);width:100%;padding:3px 0;text-wrap:nowrap;display:flex;gap:.3em;align-items:center;box-sizing:border-box;cursor:pointer}@media (hover: hover){.flexlayout__tab_button_stretch:hover{color:var(--color-tab-selected)}}.flexlayout__tab_button--selected{background-color:var(--color-tab-selected-background);color:var(--color-tab-selected)}@media (hover: hover){.flexlayout__tab_button:hover{color:var(--color-tab-selected)}}.flexlayout__tab_button--unselected{background-color:var(--color-tab-unselected-background);color:var(--color-tab-unselected)}.flexlayout__tab_button_leading,.flexlayout__tab_button_pin{display:flex}.flexlayout__tab_button_content{display:flex;text-wrap:nowrap}.flexlayout__tab_button_textbox{border:none;font-family:var(--font-family);font-size:var(--font-size);font-weight:var(--font-weight);color:var(--color-tab-textbox);background-color:var(--color-tab-textbox-background);border:1px inset var(--color-1);border-radius:3px;width:10em}.flexlayout__tab_button_textbox:focus{outline:2px solid var(--color-focus);outline-offset:-1px}.flexlayout__tab_button_trailing{display:flex;visibility:hidden;border-radius:4px}.flexlayout__tab_button_trailing:hover{background-color:var(--color-toolbar-button-hover)}@media (hover: hover){.flexlayout__tab_button:hover .flexlayout__tab_button_trailing{visibility:visible}}.flexlayout__tab_button--selected .flexlayout__tab_button_trailing{visibility:visible}.flexlayout__tab_button_overflow{display:flex;align-items:center;border:none;color:var(--color-overflow);font-size:inherit;background-color:transparent;width:2em;overflow:hidden}.flexlayout__tab_toolbar{display:flex;align-items:center;gap:.3em;padding-left:.5em;padding-right:.3em}.flexlayout__tab_toolbar_icon{border:none;outline:none;font-size:inherit;margin:0;background-color:transparent;padding:1px}.flexlayout__tab_toolbar_icon:focus-visible{outline:2px solid var(--color-focus);outline-offset:-2px}.flexlayout__tab_toolbar_button{border:none;outline:none;font-size:inherit;margin:0;background-color:transparent;border-radius:4px;padding:1px}.flexlayout__tab_toolbar_button:focus-visible{outline:2px solid var(--color-focus);outline-offset:-2px}@media (hover: hover){.flexlayout__tab_toolbar_button:hover{background-color:var(--color-toolbar-button-hover)}}.flexlayout__tab_toolbar_sticky_buttons_container{display:flex;gap:.3em;padding-left:5px;align-items:center}.flexlayout__border{box-sizing:border-box;overflow:hidden;display:flex;font-family:var(--font-family);font-size:var(--font-size);font-weight:var(--font-weight);color:var(--color-border);background-color:var(--color-border-background)}.flexlayout__border_tab_contents{box-sizing:border-box;overflow:hidden;background-color:var(--color-border-tab-content)}.flexlayout__border_tab_overlay{position:absolute;z-index:100}.flexlayout__border_tab_overlay_top{top:0;left:0;right:0;flex-direction:column}.flexlayout__border_tab_overlay_bottom{bottom:0;left:0;right:0;flex-direction:column}.flexlayout__border_tab_overlay_left{left:0;top:0;bottom:0;flex-direction:row}.flexlayout__border_tab_overlay_right{right:0;top:0;bottom:0;flex-direction:row}.flexlayout__border_leading{display:flex}.flexlayout__border_top{border-bottom:1px solid var(--color-border-divider-line);align-items:center}.flexlayout__border_bottom{border-top:1px solid var(--color-border-divider-line);align-items:center}.flexlayout__border_left{border-right:1px solid var(--color-border-divider-line);align-content:center;flex-direction:column}.flexlayout__border_right{border-left:1px solid var(--color-border-divider-line);align-content:center;flex-direction:column}.flexlayout__border_inner{position:relative;box-sizing:border-box;align-items:center;display:flex;flex-grow:1;scrollbar-width:none}.flexlayout__border_inner::-webkit-scrollbar{display:none}.flexlayout__border_inner_tab_container{white-space:nowrap;display:flex;align-items:center;padding-left:2px;padding-right:2px;box-sizing:border-box;position:absolute}.flexlayout__border_inner_tab_container_right{transform-origin:top left;transform:rotate(90deg)}.flexlayout__border_inner_tab_container_left{flex-direction:row-reverse;transform-origin:top right;transform:rotate(-90deg)}.flexlayout__border_inner_tab_container_left_down{flex-direction:row;transform-origin:top left;transform:rotate(90deg)}.flexlayout__border_tab_divider{width:4px}.flexlayout__border_button{display:flex;gap:.3em;align-items:center;cursor:pointer;padding:3px .5em;margin:2px 0;box-sizing:border-box;white-space:nowrap;font-weight:var(--font-weight)}.flexlayout__border_button:focus-visible{outline:2px solid var(--color-focus);outline-offset:-2px}.flexlayout__border_button--selected{background-color:var(--color-border-tab-selected-background);color:var(--color-border-tab-selected)}@media (hover: hover){.flexlayout__border_button:hover{color:var(--color-border-tab-selected)}}.flexlayout__border_button--unselected{background-color:var(--color-border-tab-unselected-background);color:var(--color-border-tab-unselected)}.flexlayout__border_button_leading,.flexlayout__border_button_content{display:flex}.flexlayout__border_button_trailing{display:flex;border-radius:4px;visibility:hidden}@media (hover: hover){.flexlayout__border_button:hover .flexlayout__border_button_trailing{visibility:visible}}.flexlayout__border_button--selected .flexlayout__border_button_trailing{visibility:visible}.flexlayout__border_toolbar{display:flex;gap:.3em;align-items:center}.flexlayout__border_toolbar_left,.flexlayout__border_toolbar_right{flex-direction:column;padding-top:.5em;padding-bottom:.3em}.flexlayout__border_toolbar_top,.flexlayout__border_toolbar_bottom{padding-left:.5em;padding-right:.3em}.flexlayout__border_toolbar_button{border:none;outline:none;font-size:inherit;background-color:transparent;border-radius:4px;padding:1px}.flexlayout__border_toolbar_button:focus-visible{outline:2px solid var(--color-focus);outline-offset:-2px}@media (hover: hover){.flexlayout__border_toolbar_button:hover{background-color:var(--color-toolbar-button-hover)}}.flexlayout__border_toolbar_button_overflow{display:flex;align-items:center;border:none;color:var(--color-overflow);font-size:inherit;background-color:transparent;width:1.5em}.flexlayout__popup_menu{font-size:var(--font-size);font-family:var(--font-family);font-weight:var(--font-weight)}.flexlayout__popup_menu_item{padding:2px .5em;white-space:nowrap;cursor:pointer;border-radius:2px}.flexlayout__popup_menu_item:focus-visible{outline:2px solid var(--color-focus);outline-offset:-2px}.flexlayout__popup_menu_item--selected{font-weight:500;background-color:var(--color-tab-selected-background);color:var(--color-tab-selected)}.flexlayout__popup_menu_item--disabled{opacity:.4;cursor:default;pointer-events:none}@media (hover: hover){.flexlayout__popup_menu_item:hover{background-color:var(--color-6)}}.flexlayout__popup_menu_divider{height:1px;margin:4px 2px;background-color:var(--color-popup-border)}.flexlayout__popup_menu_container{box-shadow:inset 0 0 5px #00000026;border:1px solid var(--color-popup-border);color:var(--color-popup-unselected);background:var(--color-popup-unselected-background);border-radius:3px;position:absolute;z-index:3000;max-height:50%;min-width:100px;overflow:auto;padding:2px}.flexlayout__float_window{box-sizing:border-box;background-color:var(--color-tabset-background);border-radius:5px;box-shadow:0 0 10px #00000080;display:flex;flex-direction:column;overflow:hidden;z-index:2000}.flexlayout__float_window_header{display:flex;align-items:center;padding:5px;background-color:var(--color-float-window-header-background);border-bottom:1px solid var(--color-tabset-divider-line);cursor:move;user-select:none;font-family:var(--font-family);font-size:.8em;min-height:15px}.flexlayout__float_window_header_title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.flexlayout__float_window_drag_handle{display:flex;align-items:center;padding:0 4px;opacity:.7;cursor:grab}.flexlayout__float_window_drag_handle:hover{opacity:1}.flexlayout__float_window_drag_handle:active{cursor:grabbing}.flexlayout__float_window_button{display:flex;align-items:center;padding:0 4px;margin:0;border:none;background:none;opacity:.7;cursor:pointer}.flexlayout__float_window_button:hover{opacity:1}.flexlayout__float_window_content{position:relative;overflow:auto;flex-grow:1;display:flex;flex-direction:column;min-height:0;min-width:0;margin:5px}.flexlayout__floating_window _body{height:100%}.flexlayout__floating_window_content{inset:0;position:absolute}.flexlayout__error_boundary_container{inset:0;position:absolute;display:flex;justify-content:center}.flexlayout__error_boundary_content{display:flex;align-items:center}.flexlayout__border_sizer{position:absolute;padding-top:6px;padding-bottom:5px;font-size:var(--font-size);font-family:var(--font-family);font-weight:var(--font-weight)}.flexlayout__mini_scrollbar{position:absolute;background-color:var(--color-mini-scroll-indicator);border-radius:5px;width:var(--size-mini-scroll-indicator);height:var(--size-mini-scroll-indicator);visibility:hidden;opacity:0;transition:opacity .3s ease-in-out,visibility .3s ease-in-out}.flexlayout__mini_scrollbar:hover{background-color:var(--color-mini-scroll-indicator-hovered);transition:background-color .3s ease-in-out}.flexlayout__mini_scrollbar_container{position:relative;display:flex;flex-grow:1;overflow:hidden}@media (hover: hover){.flexlayout__mini_scrollbar_container:hover .flexlayout__mini_scrollbar{opacity:1;visibility:visible}}.flexlayout__theme_dark .flexlayout__tabset-selected{background-image:linear-gradient(var(--color-background),var(--color-4))}.flexlayout__theme_dark .flexlayout__tabset-maximized{background-image:linear-gradient(var(--color-6),var(--color-2))}.flexlayout__theme_dark .flexlayout__tab_top{box-shadow:inset -2px 0 5px #0000001a;border-top-left-radius:3px;border-top-right-radius:3px}.flexlayout__theme_dark .flexlayout__tab_bottom{box-shadow:inset -2px 0 5px #0000001a;border-bottom-left-radius:3px;border-bottom-right-radius:3px}.flexlayout__theme_dark .flexlayout__border_button{box-shadow:inset 0 0 5px #00000026;border-radius:3px}.flexlayout__theme_gray .flexlayout__tabset-selected{background-image:linear-gradient(var(--color-background),var(--color-4))}.flexlayout__theme_gray .flexlayout__tabset-selected{background-image:linear-gradient(var(--color-background),var(--color-3))}.flexlayout__theme_gray .flexlayout__tabset-maximized{background-image:linear-gradient(var(--color-3),var(--color-1))}.flexlayout__theme_gray .flexlayout__tab_button_top{box-shadow:inset -2px 0 5px #0000001a;border-top-left-radius:3px;border-top-right-radius:3px}.flexlayout__theme_gray .flexlayout__tab_button_bottom{box-shadow:inset -2px 0 5px #0000001a;border-bottom-left-radius:3px;border-bottom-right-radius:3px}.flexlayout__theme_gray .flexlayout__border_button{box-shadow:inset 0 0 5px #00000026;border-radius:3px}.flexlayout__theme_underline .flexlayout__tab_button{padding:2px .5em calc(4px - var(--underline_height)) .5em}.flexlayout__theme_underline .flexlayout__tab_button--selected{border-bottom:var(--underline_height) solid var(--color-underline)}.flexlayout__theme_underline .flexlayout__tab_button--unselected{border-bottom:var(--underline_height) solid transparent}.flexlayout__theme_underline .flexlayout__border_button{padding:2px .5em calc(4px - var(--underline_height)) .5em}.flexlayout__theme_underline .flexlayout__border_button--selected{border-bottom:var(--underline_height) solid var(--color-underline)}.flexlayout__theme_underline .flexlayout__border_button--unselected{border-bottom:var(--underline_height) solid transparent}.flexlayout__theme_underline .flexlayout__tabset_tab_divider,.flexlayout__theme_underline .flexlayout__border_tab_divider{width:1px;height:.8em;margin:0 6px;background-color:#ddd}.flexlayout__theme_underline .flexlayout__tab_button_textbox{border:none}.flexlayout__theme_rounded .flexlayout__tabset{padding:3px;border-radius:10px}.flexlayout__theme_rounded .flexlayout__tabset_content{padding:1px 3px 3px;border-bottom-left-radius:10px;border-bottom-right-radius:10px}.flexlayout__theme_rounded .flexlayout__tab_border{border-radius:10px;padding:5px}.flexlayout__theme_rounded .flexlayout__border_tab_contents{border-radius:10px}.flexlayout__theme_rounded .flexlayout__tab_button{border-radius:var(--tab-button-radius);padding:2px .8em}.flexlayout__theme_rounded .flexlayout__border_button{border-radius:var(--border-button-radius);padding:2px .8em}.flexlayout__theme_rounded .flexlayout__tabset_tabbar_outer_top{border-bottom:unset;padding-bottom:1px}.flexlayout__theme_rounded .flexlayout__tabset_tabbar_inner_tab_container_top{border-bottom:2px solid transparent}.flexlayout__theme_rounded .flexlayout__border_bottom{border-top:2px solid var(--color-border-divider-line)}.flexlayout__theme_rounded .flexlayout__border_sizer{padding-bottom:6px}.flexlayout__theme_rounded .flexlayout__tab_button_trailing:hover,.flexlayout__theme_rounded .flexlayout__border_button_trailing:hover{background-color:var(--color-3)}.flexlayout__theme_alpha_light .flexlayout__tab{border:5px solid var(--color-background);border-radius:5px}.flexlayout__theme_alpha_light .flexlayout__splitter_border .flexlayout__splitter_handle{visibility:visible}.flexlayout__theme_alpha_light .flexlayout__tabset_tabbar_outer_top{border-bottom:unset}.flexlayout__theme_alpha_light .flexlayout__tabset_tabbar_outer_bottom{border-top:unset}.flexlayout__theme_alpha_light .flexlayout__tab_button{border-bottom:2px solid transparent;padding:4px 12px}.flexlayout__theme_alpha_light .flexlayout__tab_button--selected:hover{background-color:var(--color-background)}.flexlayout__theme_alpha_light .flexlayout__tabset_tabbar_outer_top .flexlayout__tab_button--selected{border-top-left-radius:var(--tab-button-radius);border-top-right-radius:var(--tab-button-radius)}.flexlayout__theme_alpha_light .flexlayout__tabset_tabbar_outer_bottom .flexlayout__tab_button--selected{border-bottom-left-radius:var(--tab-button-radius);border-bottom-right-radius:var(--tab-button-radius)}.flexlayout__theme_alpha_light .flexlayout__tabset_tab_spacer{width:12px}.flexlayout__theme_alpha_light .flexlayout__tabset_tab_divider,.flexlayout__theme_alpha_light .flexlayout__border_tab_divider{width:2px;border-radius:2px;height:.8em;margin:0 5px;background-color:#ddd}.flexlayout__theme_alpha_light .flexlayout__tabset_tab_divider_selected_before,.flexlayout__theme_alpha_light .flexlayout__tabset_tab_divider_selected_after{width:12px;height:100%;margin:unset;border-radius:unset;background-color:var(--color-tab-selected-background)}.flexlayout__theme_alpha_light .flexlayout__tabset_tab_divider_inner{height:100%}.flexlayout__theme_alpha_light .flexlayout__tabset-selected{--tab-divider-bg: var(--flexlayout-tab-divider-bg, var(--color-tabset-background-selected))}.flexlayout__theme_alpha_light .flexlayout__tabset-maximized{--tab-divider-bg: var(--flexlayout-tab-divider-bg, var(--color-tabset-background-maximized))}.flexlayout__theme_alpha_light .flexlayout__tabset_tabbar_outer_top .flexlayout__tabset_tab_divider_selected_before .flexlayout__tabset_tab_divider_inner{border-bottom-right-radius:var(--tab-button-radius);background-color:var(--tab-divider-bg, var(--color-tabset-background))}.flexlayout__theme_alpha_light .flexlayout__tabset_tabbar_outer_top .flexlayout__tabset_tab_divider_selected_after .flexlayout__tabset_tab_divider_inner{border-bottom-left-radius:var(--tab-button-radius);background-color:var(--tab-divider-bg, var(--color-tabset-background))}.flexlayout__theme_alpha_light .flexlayout__tabset_tabbar_outer_bottom .flexlayout__tabset_tab_divider_selected_before .flexlayout__tabset_tab_divider_inner{border-top-right-radius:var(--tab-button-radius);background-color:var(--tab-divider-bg, var(--color-tabset-background))}.flexlayout__theme_alpha_light .flexlayout__tabset_tabbar_outer_bottom .flexlayout__tabset_tab_divider_selected_after .flexlayout__tabset_tab_divider_inner{border-top-left-radius:var(--tab-button-radius);background-color:var(--tab-divider-bg, var(--color-tabset-background))}.flexlayout__theme_alpha_light .flexlayout__border_button{border-radius:var(--border-button-radius);margin:3px;padding:3px 8px}.flexlayout__theme_alpha_light .flexlayout__border_button--selected{box-shadow:0 1px 2px #0000000d}.flexlayout__theme_alpha_light .flexlayout__border_sizer{padding-bottom:8px}.flexlayout__theme_alpha_light .flexlayout__popup_menu_container{box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f;border:1px solid var(--color-2);padding:4px}.flexlayout__theme_alpha_light .flexlayout__popup_menu_item{border-radius:4px;padding:6px 8px}.flexlayout__theme_alpha_light .flexlayout__popup_menu_item:hover{background-color:var(--color-1)}.flexlayout__theme_alpha_dark .flexlayout__tab{border:5px solid var(--color-background);border-radius:5px}.flexlayout__theme_alpha_dark .flexlayout__splitter_border .flexlayout__splitter_handle{visibility:visible}.flexlayout__theme_alpha_dark .flexlayout__tabset_tabbar_outer_top{border-bottom:unset}.flexlayout__theme_alpha_dark .flexlayout__tabset_tabbar_outer_bottom{border-top:unset}.flexlayout__theme_alpha_dark .flexlayout__tab_button{border-bottom:2px solid transparent;padding:4px 12px}.flexlayout__theme_alpha_dark .flexlayout__tab_button--selected:hover{background-color:var(--color-background)}.flexlayout__theme_alpha_dark .flexlayout__tabset_tabbar_outer_top .flexlayout__tab_button--selected{border-top-left-radius:var(--tab-button-radius);border-top-right-radius:var(--tab-button-radius)}.flexlayout__theme_alpha_dark .flexlayout__tabset_tabbar_outer_bottom .flexlayout__tab_button--selected{border-bottom-left-radius:var(--tab-button-radius);border-bottom-right-radius:var(--tab-button-radius)}.flexlayout__theme_alpha_dark .flexlayout__tabset_tab_spacer{width:12px}.flexlayout__theme_alpha_dark .flexlayout__tabset_tab_divider,.flexlayout__theme_alpha_dark .flexlayout__border_tab_divider{width:2px;border-radius:2px;height:.8em;margin:0 5px;background-color:#333}.flexlayout__theme_alpha_dark .flexlayout__tabset_tab_divider_selected_before,.flexlayout__theme_alpha_dark .flexlayout__tabset_tab_divider_selected_after{width:12px;height:100%;margin:unset;border-radius:unset;background-color:var(--color-tab-selected-background)}.flexlayout__theme_alpha_dark .flexlayout__tabset_tab_divider_inner{height:100%}.flexlayout__theme_alpha_dark .flexlayout__tabset-selected{--tab-divider-bg: var(--flexlayout-tab-divider-bg, var(--color-tabset-background-selected))}.flexlayout__theme_alpha_dark .flexlayout__tabset-maximized{--tab-divider-bg: var(--flexlayout-tab-divider-bg, var(--color-tabset-background-maximized))}.flexlayout__theme_alpha_dark .flexlayout__tabset_tabbar_outer_top .flexlayout__tabset_tab_divider_selected_before .flexlayout__tabset_tab_divider_inner{border-bottom-right-radius:var(--tab-button-radius);background-color:var(--tab-divider-bg, var(--color-tabset-background))}.flexlayout__theme_alpha_dark .flexlayout__tabset_tabbar_outer_top .flexlayout__tabset_tab_divider_selected_after .flexlayout__tabset_tab_divider_inner{border-bottom-left-radius:var(--tab-button-radius);background-color:var(--tab-divider-bg, var(--color-tabset-background))}.flexlayout__theme_alpha_dark .flexlayout__tabset_tabbar_outer_bottom .flexlayout__tabset_tab_divider_selected_before .flexlayout__tabset_tab_divider_inner{border-top-right-radius:var(--tab-button-radius);background-color:var(--tab-divider-bg, var(--color-tabset-background))}.flexlayout__theme_alpha_dark .flexlayout__tabset_tabbar_outer_bottom .flexlayout__tabset_tab_divider_selected_after .flexlayout__tabset_tab_divider_inner{border-top-left-radius:var(--tab-button-radius);background-color:var(--tab-divider-bg, var(--color-tabset-background))}.flexlayout__theme_alpha_dark .flexlayout__splitter{transition:background-color .2s}.flexlayout__theme_alpha_dark .flexlayout__splitter:hover{border-radius:0}.flexlayout__theme_alpha_dark .flexlayout__border_button{border-radius:var(--border-button-radius);margin:3px;padding:3px 8px}.flexlayout__theme_alpha_dark .flexlayout__border_button--selected{box-shadow:0 1px 2px #0003}.flexlayout__theme_alpha_dark .flexlayout__border_sizer{padding-bottom:8px}.flexlayout__theme_alpha_dark .flexlayout__popup_menu_container{box-shadow:0 10px 15px -3px #0006,0 4px 6px -2px #0003;border:1px solid var(--color-2);padding:4px}.flexlayout__theme_alpha_dark .flexlayout__popup_menu_item{border-radius:4px;padding:6px 8px}.flexlayout__theme_alpha_dark .flexlayout__popup_menu_item:hover{background-color:var(--color-1)}.flexlayout__theme_alpha_rounded .flexlayout__tabset{padding:2px;border-radius:12px}.flexlayout__theme_alpha_rounded .flexlayout__splitter_border .flexlayout__splitter_handle{visibility:visible}.flexlayout__theme_alpha_rounded .flexlayout__float_window{background-color:var(--color-2)}.flexlayout__theme_alpha_rounded .flexlayout__float_window_header{background-color:var(--color-2);border-bottom:none}.flexlayout__theme_alpha_rounded .flexlayout__tab_border{border-radius:12px}.flexlayout__theme_alpha_rounded .flexlayout__border_tab_contents{border-radius:var(--tab-button-radius)}.flexlayout__theme_alpha_rounded .flexlayout__tab_button{border-radius:var(--tab-button-radius);padding:4px 12px;margin:2px}.flexlayout__theme_alpha_rounded .flexlayout__border_button{border-radius:var(--border-button-radius);padding:4px 12px;margin:2px}.flexlayout__theme_alpha_rounded .flexlayout__border_sizer{padding-bottom:10px}.flexlayout__theme_alpha_rounded .flexlayout__popup_menu_container{border-radius:8px;box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;border:1px solid var(--color-2);padding:6px}.flexlayout__theme_alpha_rounded .flexlayout__popup_menu_item{border-radius:6px;padding:8px 12px}.flexlayout__theme_alpha_rounded .flexlayout__popup_menu_item:hover{background-color:var(--color-1)}.flexlayout__theme_aria .flexlayout__tab{border:5px solid var(--color-background);border-radius:5px}.flexlayout__theme_aria .flexlayout__splitter_border .flexlayout__splitter_handle{visibility:visible}.flexlayout__theme_aria .flexlayout__tabset_tabbar_outer_top{border-bottom:unset}.flexlayout__theme_aria .flexlayout__tabset_tabbar_outer_bottom{border-top:unset}.flexlayout__theme_aria .flexlayout__tab_button{border-bottom:2px solid transparent;padding:4px 12px}.flexlayout__theme_aria .flexlayout__tab_button--selected:hover{background-color:var(--color-background)}.flexlayout__theme_aria .flexlayout__tabset_tabbar_outer_top .flexlayout__tab_button--selected{border-top-left-radius:var(--tab-button-radius);border-top-right-radius:var(--tab-button-radius)}.flexlayout__theme_aria .flexlayout__tabset_tabbar_outer_bottom .flexlayout__tab_button--selected{border-bottom-left-radius:var(--tab-button-radius);border-bottom-right-radius:var(--tab-button-radius)}.flexlayout__theme_aria .flexlayout__tabset_tab_spacer{width:12px}.flexlayout__theme_aria .flexlayout__tabset_tab_divider,.flexlayout__theme_aria .flexlayout__border_tab_divider{width:2px;border-radius:2px;height:.8em;margin:0 5px;background-color:#ddd}.flexlayout__theme_aria .flexlayout__tabset_tab_divider_selected_before,.flexlayout__theme_aria .flexlayout__tabset_tab_divider_selected_after{width:12px;height:100%;margin:unset;border-radius:unset;background-color:var(--color-tab-selected-background)}.flexlayout__theme_aria .flexlayout__tabset_tab_divider_inner{height:100%}.flexlayout__theme_aria .flexlayout__tabset-selected{--tab-divider-bg: var(--flexlayout-tab-divider-bg, var(--color-tabset-background-selected))}.flexlayout__theme_aria .flexlayout__tabset-maximized{--tab-divider-bg: var(--flexlayout-tab-divider-bg, var(--color-tabset-background-maximized))}.flexlayout__theme_aria .flexlayout__tabset_tabbar_outer_top .flexlayout__tabset_tab_divider_selected_before .flexlayout__tabset_tab_divider_inner{border-bottom-right-radius:var(--tab-button-radius);background-color:var(--tab-divider-bg, var(--color-tabset-background))}.flexlayout__theme_aria .flexlayout__tabset_tabbar_outer_top .flexlayout__tabset_tab_divider_selected_after .flexlayout__tabset_tab_divider_inner{border-bottom-left-radius:var(--tab-button-radius);background-color:var(--tab-divider-bg, var(--color-tabset-background))}.flexlayout__theme_aria .flexlayout__tabset_tabbar_outer_bottom .flexlayout__tabset_tab_divider_selected_before .flexlayout__tabset_tab_divider_inner{border-top-right-radius:var(--tab-button-radius);background-color:var(--tab-divider-bg, var(--color-tabset-background))}.flexlayout__theme_aria .flexlayout__tabset_tabbar_outer_bottom .flexlayout__tabset_tab_divider_selected_after .flexlayout__tabset_tab_divider_inner{border-top-left-radius:var(--tab-button-radius);background-color:var(--tab-divider-bg, var(--color-tabset-background))}.flexlayout__theme_aria .flexlayout__border_button{border-radius:var(--border-button-radius);margin:3px;padding:3px 8px}.flexlayout__theme_aria .flexlayout__border_button--selected{box-shadow:0 1px 2px #0000000d}.flexlayout__theme_aria .flexlayout__border_sizer{padding-bottom:8px}.flexlayout__theme_aria .flexlayout__popup_menu_container{box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f;border:1px solid var(--color-2);padding:4px}.flexlayout__theme_aria .flexlayout__popup_menu_item{border-radius:4px;padding:6px 8px}.flexlayout__theme_aria .flexlayout__popup_menu_item:hover{background-color:var(--color-1)}';function q1(e){return!e||!e.enabled||e.authoring.locked?null:e.id}function J1(e,t,r=3){return Math.hypot(t.x-e.x,t.y-e.y)>=r}function Z1(e,t,r,o=12){return e>=3&&Math.hypot(r.x-t.x,r.y-t.y)<=o}function Q1(e){return[...e].sort((t,r)=>r.priority-t.priority)}function ek(e){e.forEach((t,r)=>{t.priority=r})}function tk(e){return e==="draw-brush"}function Ch(e){return[...e].sort((t,r)=>t.priority-r.priority)}const rk=[{id:"nw",x:0,y:0},{id:"n",x:.5,y:0},{id:"ne",x:1,y:0},{id:"e",x:1,y:.5},{id:"se",x:1,y:1},{id:"s",x:.5,y:1},{id:"sw",x:0,y:1},{id:"w",x:0,y:.5}];function ok({geometry:e,canvas:t}){const r=e.operation==="add"?"white":"black";if(e.type==="rect")return s.jsx("rect",{x:e.x*t.width,y:e.y*t.height,width:e.width*t.width,height:e.height*t.height,fill:r});if(e.type==="ellipse")return s.jsx("ellipse",{cx:(e.x+e.width/2)*t.width,cy:(e.y+e.height/2)*t.height,rx:e.width*t.width/2,ry:e.height*t.height/2,fill:r});if(e.type==="polygon")return s.jsx("polygon",{points:e.points.map(c=>`${c.x*t.width},${c.y*t.height}`).join(" "),fill:r});if(e.type==="raster_mask"){const c=`raster-${e.id}`;return s.jsxs(s.Fragment,{children:[s.jsx("defs",{children:s.jsx("mask",{id:c,maskUnits:"userSpaceOnUse",x:"0",y:"0",width:t.width,height:t.height,children:s.jsx("image",{href:e.data_url,x:e.x*t.width,y:e.y*t.height,width:e.width*t.width,height:e.height*t.height,preserveAspectRatio:"none"})})}),s.jsx("rect",{width:t.width,height:t.height,fill:r,mask:`url(#${c})`})]})}const o=e.shape==="square"?"square":"round",n=e.size*Math.min(t.width,t.height),i=`bv-brush-soft-${e.id}`,a=(1-e.hardness)*n/6,l=a>.05?`url(#${i})`:void 0;if(e.points.length===1){const c=e.points[0],u=n*c.pressure,d=e.shape==="square"?s.jsx("rect",{x:c.x*t.width-u/2,y:c.y*t.height-u/2,width:u,height:u,fill:r,fillOpacity:e.opacity,filter:l}):s.jsx("circle",{cx:c.x*t.width,cy:c.y*t.height,r:u/2,fill:r,fillOpacity:e.opacity,filter:l}),f=u*e.hardness;return s.jsxs(s.Fragment,{children:[s.jsx("defs",{children:l&&s.jsx("filter",{id:i,filterUnits:"userSpaceOnUse",x:"0",y:"0",width:t.width,height:t.height,children:s.jsx("feGaussianBlur",{stdDeviation:a})})}),d,f>0&&(e.shape==="square"?s.jsx("rect",{x:c.x*t.width-f/2,y:c.y*t.height-f/2,width:f,height:f,fill:r,fillOpacity:e.opacity}):s.jsx("circle",{cx:c.x*t.width,cy:c.y*t.height,r:f/2,fill:r,fillOpacity:e.opacity}))]})}if((e.pressure_mode??"constant")==="constant"){const c=e.points.map((u,d)=>`${d?"L":"M"}${u.x*t.width},${u.y*t.height}`).join(" ");return s.jsxs(s.Fragment,{children:[s.jsx("defs",{children:l&&s.jsx("filter",{id:i,filterUnits:"userSpaceOnUse",x:"0",y:"0",width:t.width,height:t.height,children:s.jsx("feGaussianBlur",{stdDeviation:a})})}),s.jsx("path",{d:c,fill:"none",stroke:r,strokeOpacity:e.opacity,strokeWidth:n,strokeLinecap:o,strokeLinejoin:o==="round"?"round":"miter",filter:l}),e.hardness>0&&s.jsx("path",{d:c,fill:"none",stroke:r,strokeOpacity:e.opacity,strokeWidth:n*e.hardness,strokeLinecap:o,strokeLinejoin:o==="round"?"round":"miter"})]})}return s.jsx(s.Fragment,{children:e.points.slice(1).map((c,u)=>{const d=e.points[u],f=(d.pressure+c.pressure)/2;return s.jsx("line",{x1:d.x*t.width,y1:d.y*t.height,x2:c.x*t.width,y2:c.y*t.height,stroke:r,strokeOpacity:e.opacity,strokeWidth:n*f,strokeLinecap:o},u)})})}function nk({geometry:e,canvas:t,cursor:r,activePolygon:o}){const n=`tool-preview-shape ${e.operation}`;if(e.type==="rect"||e.type==="raster_mask")return s.jsx("rect",{className:n,x:e.x*t.width,y:e.y*t.height,width:e.width*t.width,height:e.height*t.height});if(e.type==="ellipse")return s.jsx("ellipse",{className:n,cx:(e.x+e.width/2)*t.width,cy:(e.y+e.height/2)*t.height,rx:e.width*t.width/2,ry:e.height*t.height/2});if(e.type==="polygon"){const a=[...e.points,...o&&r?[r]:[]],l=o?s.jsx("polyline",{className:n,points:a.map(c=>`${c.x*t.width},${c.y*t.height}`).join(" ")}):s.jsx("polygon",{className:n,points:a.map(c=>`${c.x*t.width},${c.y*t.height}`).join(" ")});return s.jsxs(s.Fragment,{children:[l,e.points.map((c,u)=>s.jsx("circle",{className:`tool-preview-vertex ${e.operation}`,cx:c.x*t.width,cy:c.y*t.height,r:"4"},u))]})}const i=e.points.map((a,l)=>`${l?"L":"M"}${a.x*t.width},${a.y*t.height}`).join(" ");return s.jsx("path",{className:n,d:i,strokeWidth:e.size*Math.min(t.width,t.height),strokeLinecap:e.shape==="square"?"square":"round"})}function ik({region:e,geometries:t,canvas:r,opacity:o,resolved:n}){const i=N0(t).filter(u=>u.enabled&&(n||u.geometries.some((d,f)=>sr(d,f).visible))),a=`bv-feather-${e.id}`,l=Math.min(64,Math.round(e.mask.feather*Math.min(r.width,r.height))),c=l/3;return s.jsxs("g",{opacity:o,children:[n&&l>0&&s.jsx("defs",{children:s.jsx("filter",{id:a,filterUnits:"userSpaceOnUse",x:"0",y:"0",width:r.width,height:r.height,children:s.jsx("feGaussianBlur",{stdDeviation:c})})}),s.jsx("g",{filter:n&&l>0?`url(#${a})`:void 0,children:i.map(u=>{const d=`bv-mask-${e.id}-${u.id}`;return s.jsxs("g",{children:[s.jsx("defs",{children:s.jsxs("mask",{id:d,maskUnits:"userSpaceOnUse",x:"0",y:"0",width:r.width,height:r.height,children:[s.jsx("rect",{width:r.width,height:r.height,fill:"black"}),u.geometries.filter((f,p)=>f.enabled!==!1&&(n||sr(f,p).visible)).map(f=>s.jsx(ok,{geometry:f,canvas:r},f.id))]})}),s.jsx("rect",{width:r.width,height:r.height,fill:e.authoring.color,mask:`url(#${d})`})]},u.id)})})]})}function ak(e){const{document:t,selectedLayerId:r,selectedRegionId:o}=e,n=m.useRef(null),i=m.useRef(null),[a,l]=m.useState({width:1,height:1}),[c,u]=m.useState(e.initialView.zoom),[d,f]=m.useState({x:e.initialView.panX,y:e.initialView.panY}),[p,g]=m.useState(e.initialView.fit),[x,w]=m.useState(!1),k=m.useCallback((O=a)=>Math.max(.02,Math.min(1,(O.width-40)/t.canvas.width,(O.height-40)/t.canvas.height)),[t.canvas.height,t.canvas.width,a]),b=m.useCallback(()=>{u(k()),f({x:0,y:0}),g(!0)},[k]);m.useEffect(()=>{const O=n.current;if(!O)return;const E=new ResizeObserver(A=>{const C=A[0].contentRect,R={width:C.width,height:C.height};l(R),p&&(u(Math.max(.02,Math.min(1,(R.width-40)/t.canvas.width,(R.height-40)/t.canvas.height))),f({x:0,y:0}))});return E.observe(O),()=>E.disconnect()},[t.canvas.height,t.canvas.width,p]),m.useEffect(()=>e.onView({zoom:c,panX:d.x,panY:d.y,fit:p}),[p,d.x,d.y,e.onView,c]),m.useEffect(()=>{const O=A=>{const C=A.target;A.code!=="Space"||C instanceof HTMLInputElement||C instanceof HTMLTextAreaElement||C instanceof HTMLSelectElement||C?.isContentEditable||(A.preventDefault(),A.stopImmediatePropagation(),w(!0))},E=A=>{A.code==="Space"&&(A.preventDefault(),A.stopImmediatePropagation(),w(!1),i.current=null)};return window.addEventListener("keydown",O,!0),window.addEventListener("keyup",E,!0),()=>{window.removeEventListener("keydown",O,!0),window.removeEventListener("keyup",E,!0)}},[]);const h=O=>{let E=[...O.geometry];if(e.draft&&O.id===o){const A=new Set(e.draft.map(C=>C.id));E=E.map(C=>A.has(C.id)?e.draft.find(R=>R.id===C.id):C);for(const C of e.draft)E.some(R=>R.id===C.id)||E.push(C)}return!e.binaryMaskPreview&&e.isolate&&r&&(E=E.filter(A=>Bt(A)===r)),E},v=e.brush.size*Math.min(t.canvas.width,t.canvas.height)/t.canvas.width*100,_=O=>{O.preventDefault();const E=O.currentTarget.getBoundingClientRect(),A=O.clientX-E.left,C=O.clientY-E.top,R=Math.max(.02,Math.min(8,c*Math.exp(-O.deltaY*.0015))),M=R/c;f(D=>({x:A-E.width/2-(A-E.width/2-D.x)*M,y:C-E.height/2-(C-E.height/2-D.y)*M})),u(R),g(!1)},y=O=>{O.button!==1&&!(O.button===0&&x)||(O.preventDefault(),O.stopPropagation(),O.currentTarget.setPointerCapture(O.pointerId),i.current={x:O.clientX,y:O.clientY,panX:d.x,panY:d.y},g(!1))},T=O=>{i.current&&(O.preventDefault(),O.stopPropagation(),f({x:i.current.panX+O.clientX-i.current.x,y:i.current.panY+O.clientY-i.current.y}))},S=O=>{i.current&&(O.preventDefault(),O.stopPropagation(),i.current=null)},z=a.width/2-t.canvas.width*c/2+d.x,N=a.height/2-t.canvas.height*c/2+d.y,B=10/c,P=24/c;return s.jsx("section",{className:"bv-regional-work",children:s.jsxs("div",{ref:n,className:`artboard-viewport ${x?"pan-ready":""}`,onWheel:_,onPointerDownCapture:y,onPointerMoveCapture:T,onPointerUpCapture:S,onPointerCancelCapture:S,children:[s.jsx(M0,{tool:e.tool,brush:e.brush,canSubtract:e.canSubtract,canvas:t.canvas,onTool:e.onTool,onBrush:e.onBrush}),s.jsx("div",{className:"artboard-stage",style:{width:t.canvas.width,height:t.canvas.height,transform:`translate(${z}px, ${N}px) scale(${c})`},children:s.jsxs("div",{className:`bv-regional-canvas tool-${e.tool}`,style:{width:t.canvas.width,height:t.canvas.height},onPointerDown:e.binaryMaskPreview?void 0:e.onPointerDown,onPointerMove:e.binaryMaskPreview?void 0:e.onPointerMove,onPointerUp:e.binaryMaskPreview?void 0:e.onPointerUp,onPointerCancel:e.binaryMaskPreview?void 0:e.onPointerCancel,onPointerLeave:e.onPointerLeave,onDoubleClick:e.binaryMaskPreview?void 0:e.onDoubleClick,children:[e.background&&!e.binaryMaskPreview&&s.jsx("div",{className:"bv-background-image",style:{backgroundImage:`linear-gradient(#0002,#0002), url(${JSON.stringify(e.background)})`,opacity:e.backgroundOpacity}}),s.jsx("svg",{className:"bv-composition",style:e.binaryMaskPreview?{background:"black"}:void 0,viewBox:`0 0 ${t.canvas.width} ${t.canvas.height}`,preserveAspectRatio:"none",children:Q1(t.regions.filter(O=>O.enabled&&(e.binaryMaskPreview||O.authoring.visible))).map(O=>s.jsx(ik,{region:e.binaryMaskPreview?{...O,authoring:{...O.authoring,color:"#FFFFFF"}}:O,geometries:h(O),canvas:t.canvas,opacity:e.binaryMaskPreview?1:e.displayOpacity,resolved:e.binaryMaskPreview},O.id))}),!e.binaryMaskPreview&&e.draft&&s.jsx("svg",{className:"bv-tool-preview",viewBox:`0 0 ${t.canvas.width} ${t.canvas.height}`,preserveAspectRatio:"none",children:e.draft.map(O=>s.jsx(nk,{geometry:O,canvas:t.canvas,cursor:e.cursor,activePolygon:e.tool.startsWith("polygon")},O.id))}),!e.binaryMaskPreview&&e.selectionBounds&&s.jsxs("svg",{className:"bv-selection-overlay",viewBox:`0 0 ${t.canvas.width} ${t.canvas.height}`,preserveAspectRatio:"none",children:[s.jsx("rect",{className:"brush-bounds",x:e.selectionBounds.x*t.canvas.width,y:e.selectionBounds.y*t.canvas.height,width:e.selectionBounds.width*t.canvas.width,height:e.selectionBounds.height*t.canvas.height}),rk.map(O=>{const E=(e.selectionBounds.x+e.selectionBounds.width*O.x)*t.canvas.width,A=(e.selectionBounds.y+e.selectionBounds.height*O.y)*t.canvas.height;return s.jsxs("g",{"data-handle":O.id,className:`resize-handle resize-handle-${O.id}`,children:[s.jsx("rect",{className:"resize-handle-hit",x:E-P/2,y:A-P/2,width:P,height:P}),s.jsx("rect",{className:"resize-handle-visible",x:E-B/2,y:A-B/2,width:B,height:B,rx:2/c})]},O.id)}),e.draft&&s.jsxs("text",{className:"tool-preview-size",style:{fontSize:12/c},x:(e.selectionBounds.x+e.selectionBounds.width)*t.canvas.width-4/c,y:(e.selectionBounds.y+e.selectionBounds.height)*t.canvas.height-7/c,children:[Math.round(e.selectionBounds.width*t.canvas.width)," × ",Math.round(e.selectionBounds.height*t.canvas.height)," px"]})]}),!e.binaryMaskPreview&&e.cursor&&e.tool.startsWith("brush")&&s.jsx("div",{className:`brush-cursor ${e.brush.shape}`,style:{left:`${e.cursor.x*100}%`,top:`${e.cursor.y*100}%`,width:`${v}%`,aspectRatio:"1"},children:s.jsx("i",{style:{width:`${e.brush.hardness*100}%`,height:`${e.brush.hardness*100}%`}})})]})}),s.jsxs("div",{className:"zoom-controls",onWheel:O=>O.stopPropagation(),children:[s.jsx(ie,{intent:"ghost",title:"Zoom out",onClick:()=>{u(O=>Math.max(.02,O/1.25)),g(!1)},children:"−"}),s.jsxs(ie,{intent:"ghost",title:"100%",onClick:()=>{u(1),f({x:0,y:0}),g(!1)},children:[Math.round(c*100)," %"]}),s.jsx(ie,{intent:"ghost",title:"Zoom in",onClick:()=>{u(O=>Math.min(8,O*1.25)),g(!1)},children:"+"}),s.jsx(ie,{intent:"ghost",title:"Fit to view",onClick:b,children:"Fit"})]})]})})}const Pm="BV.NodePack.Completion.Enabled",Bm="BV.NodePack.Completion.Datasets",zm="BV.NodePack.Completion.Placement",Fm="bv-nodepack:completion-enabled",xa="bv-completion-enabled-changed",ya="bv-completion-placement-changed",Nf="bv-nodepack:completion-datasets",Um="bv-nodepack:completion-placement",ds="bv-completion-datasets-changed";let Vm=null,Wm=null,Hm=null;function ed(){try{return localStorage.getItem(Um)==="field"?"field":"caret"}catch{return"caret"}}function lk(e){Hm=e}function $m(e,t=!1){const r=e==="field"?"field":"caret";try{localStorage.setItem(Um,r)}catch{}t&&Hm?.(r),window.dispatchEvent(new CustomEvent(ya,{detail:{placement:r}}))}function Ym(){const[e,t]=m.useState(ed);return m.useEffect(()=>{const r=o=>t(o.detail?.placement==="field"?"field":"caret");return window.addEventListener(ya,r),()=>window.removeEventListener(ya,r)},[]),e}function Of(){try{return localStorage.getItem(Fm)!=="false"}catch{return!0}}function sk(e){Vm=e}function Xm(e,t=!1){try{localStorage.setItem(Fm,String(e))}catch{}t&&Vm?.(e),window.dispatchEvent(new CustomEvent(xa,{detail:{enabled:e}}))}function Gm(){const[e,t]=m.useState(Of);return m.useEffect(()=>{const r=o=>t(!!o.detail?.enabled);return window.addEventListener(xa,r),()=>window.removeEventListener(xa,r)},[]),e}function Km(){try{const e=localStorage.getItem(Nf);if(e==null)return null;const t=JSON.parse(e);return Array.isArray(t)?t.map(String):null}catch{return null}}function ck(e){Wm=e}function qm(e,t=!1){const r=[...new Set(e.map(String))];try{localStorage.setItem(Nf,JSON.stringify(r))}catch{}t&&Wm?.(JSON.stringify(r)),window.dispatchEvent(new CustomEvent(ds,{detail:{datasets:r}}))}function Jm(e){if(e==null||e===""){try{localStorage.removeItem(Nf)}catch{}window.dispatchEvent(new CustomEvent(ds,{detail:{datasets:null}}));return}try{const t=typeof e=="string"?JSON.parse(e):e;Array.isArray(t)&&qm(t.map(String))}catch{}}function uk(){const[e,t]=m.useState(Km);return m.useEffect(()=>{const r=o=>t(o.detail?.datasets??null);return window.addEventListener(ds,r),()=>window.removeEventListener(ds,r)},[]),e}function Zm({onSelectionChange:e}={}){const t=uk(),[r,o]=m.useState([]),[n,i]=m.useState(""),a=async()=>{try{const g=await fetch("/bv_nodepack/completion/status");if(!g.ok)throw new Error(`HTTP ${g.status}`);const x=await g.json();o(Array.isArray(x?.datasets)?x.datasets:[]),i("")}catch(g){i(g instanceof Error?g.message:String(g))}};m.useEffect(()=>{a()},[]);const l=t??r.map(g=>g.id),c=g=>{qm(g,!0),e?.(g)},u=g=>c(l.includes(g)?l.filter(x=>x!==g):[...l,g]),d=(g,x)=>{const w=l.indexOf(g),k=w+x;if(w<0||k<0||k>=l.length)return;const b=[...l];[b[w],b[k]]=[b[k],b[w]],c(b)},f=new Map(r.map(g=>[g.id,g])),p=[...l.map(g=>f.get(g)).filter(g=>!!g),...r.filter(g=>!l.includes(g.id))];return s.jsxs("div",{className:"completion-dataset-picker",children:[s.jsx("strong",{children:"Completion Data"}),s.jsx("small",{children:"Topmost enabled dataset wins when tags are duplicated."}),p.map(g=>{const x=l.indexOf(g.id),w=x>=0;return s.jsxs("div",{children:[s.jsx(Qr,{label:g.name,help:`${(g.bytes/1048576).toFixed(1)} MiB`,checked:w,onValue:()=>u(g.id)}),s.jsxs("span",{className:"dataset-order",children:[s.jsx(ie,{intent:"ghost",iconOnly:!0,disabled:!w||x===0,title:"Move up",onClick:()=>d(g.id,-1),children:"↑"}),s.jsx(ie,{intent:"ghost",iconOnly:!0,disabled:!w||x===l.length-1,title:"Move down",onClick:()=>d(g.id,1),children:"↓"})]})]},g.id)}),!r.length&&!n&&s.jsx("small",{children:"No local CSV/TSV dataset found."}),n&&s.jsxs("small",{className:"dataset-error",children:["Could not load datasets: ",n]}),s.jsx(ie,{onClick:()=>void a(),children:"Reload List"})]})}function dk(e){const t=Gm(),r=Ym(),o=e.openMenu,n=m.useRef(null),{menuOverflow:i}=Mm(),a=m.useRef(null),l=m.useRef(null);m.useEffect(()=>{const d=f=>{n.current?.contains(f.target)||e.onOpenMenu(null)};return window.addEventListener("pointerdown",d),()=>window.removeEventListener("pointerdown",d)},[e.onOpenMenu]);const c=(d,f,p)=>s.jsx(ih,{open:o===d,onOpen:g=>e.onOpenMenu(g?d:null),trigger:({toggle:g})=>s.jsxs(ie,{intent:"ghost",density:"compact","aria-label":f,title:f,"aria-expanded":o===d,onClick:g,children:[s.jsx("span",{className:"editor-menu-label-full",children:f}),s.jsx("span",{className:"editor-menu-label-short","aria-hidden":"true",children:f==="?"?f:f[0]})]}),children:p}),u=s.jsxs(s.Fragment,{children:[c("file","File",s.jsxs("div",{className:"bv-menu-stack",children:[s.jsx(ie,{intent:"ghost",onClick:()=>{e.onExportDocument(),e.onOpenMenu(null)},children:"Export Document"}),s.jsx(ie,{intent:"ghost",onClick:()=>a.current?.click(),children:"Load and Replace Document"}),s.jsx("hr",{}),s.jsx(ie,{intent:"ghost",onClick:()=>{e.onExportRegions(),e.onOpenMenu(null)},children:"Export Regions"}),s.jsx(ie,{intent:"ghost",onClick:()=>l.current?.click(),children:"Add Regions"})]})),c("edit","Edit",s.jsxs("div",{className:"bv-menu-stack",children:[s.jsxs(ie,{intent:"ghost",disabled:!e.canUndo,onClick:e.onUndo,children:["Undo ",s.jsx("kbd",{children:"Ctrl Z"})]}),s.jsxs(ie,{intent:"ghost",disabled:!e.canRedo,onClick:e.onRedo,children:["Redo ",s.jsx("kbd",{children:"Ctrl Shift Z"})]}),s.jsx(Qr,{label:"Prompt Autocomplete",help:"Optional. Disable it when using another completion extension.",checked:t,onValue:d=>Xm(d,!0)}),s.jsx(tt,{label:"Popup Position",value:r,onValue:d=>$m(d,!0),options:[{value:"caret",label:"At Caret"},{value:"field",label:"Below Text Field"}]}),s.jsx(Zm,{})]})),c("view","View",s.jsxs("div",{className:"bv-menu-stack",children:[s.jsx(Pt,{label:"Mask Display",value:e.displayOpacity,min:.05,max:1,step:.05,unit:"×",onValue:e.onDisplayOpacity}),s.jsx(Pt,{label:"Background Image",value:e.backgroundOpacity,min:0,max:1,step:.05,unit:"×",onValue:e.onBackgroundOpacity}),s.jsx(Qr,{label:"Binary Mask Preview",checked:e.binaryMaskPreview,onValue:e.onToggleBinaryMaskPreview}),s.jsx(Qr,{label:"Isolate Selection",checked:e.isolate,disabled:!e.hasSelection,onValue:e.onToggleIsolate}),s.jsx("small",{children:"Affects the editor display only."})]})),c("artboard","Artboard",s.jsxs("div",{className:"bv-menu-stack",children:[s.jsx(Pt,{label:"Width",value:e.canvas.width,min:1,max:32768,step:1,unit:"px",slider:!1,onValue:d=>e.onCanvas({...e.canvas,width:d})}),s.jsx(Pt,{label:"Height",value:e.canvas.height,min:1,max:32768,step:1,unit:"px",slider:!1,onValue:d=>e.onCanvas({...e.canvas,height:d})})]})),c("layers","Layers",s.jsxs("div",{className:"bv-menu-stack",children:[s.jsxs(ie,{intent:"ghost",disabled:!e.canMergeLayers,onClick:()=>{e.onMergeLayers(),e.onOpenMenu(null)},children:["Merge Selected Layers ",s.jsx("kbd",{children:"Ctrl E"})]}),s.jsx("small",{children:"Ctrl-click or Shift-click layers in one region to select them."})]})),c("help","?",s.jsxs("div",{className:"help-menu",children:[s.jsx(nh,{items:[{term:"Ctrl Z",description:"Undo"},{term:"Ctrl Shift Z",description:"Redo"},{term:"Ctrl E",description:"Merge selected layers"},{term:"Escape",description:"Cancel action"},{term:"Delete",description:"Delete layer"},{term:"Shift + Resize",description:"Scale proportionally"},{term:"Space + Drag",description:"Pan artboard"}]}),s.jsx(nh,{items:[{term:"Click",description:"Select layer"},{term:"Ctrl + Click",description:"Add/remove layer selection"},{term:"Shift + Click",description:"Select layer range"},{term:"Drag",description:"Draw or move"},{term:"Mouse wheel",description:"Zoom under cursor"}]})]}))]});return s.jsxs("div",{className:"editor-menus",ref:n,children:[i?s.jsx(ih,{trigger:({toggle:d})=>s.jsx(ie,{intent:"ghost",density:"compact","aria-label":"Editor menus",onClick:d,children:"•••"}),children:s.jsx("div",{className:"editor-menus-overflow-panel",children:u})}):u,s.jsx("input",{hidden:!0,ref:a,type:"file",accept:"application/json,.json",onChange:d=>{const f=d.target.files?.[0];f&&e.onImportDocument(f),d.target.value=""}}),s.jsx("input",{hidden:!0,ref:l,type:"file",accept:"application/json,.json",onChange:d=>{const f=d.target.files?.[0];f&&e.onImportRegions(f),d.target.value=""}})]})}function Qm(e,t,r,o=20){const n=Math.max(0,Math.min(e.length,t)),l=e.slice(0,n).match(/(?:^|[,\n;])\s*([^,\n;]*)$/)?.[1]??"",c=l.match(/^\s*/)?.[0].length??0,u=l.slice(c);if(u.trim().length<2)return null;const d=n-l.length+c;return{...r,text:e,caret:n,term:u,start:d,end:n,limit:o}}function ex(e,t,r){const o=e.slice(t.end).match(/^\s*[,;\n]/)?"":", ",n=`${r.insertText}${o}`;return{text:e.slice(0,t.start)+n+e.slice(t.end),caret:t.start+n.length}}async function tx(e,t,r){const o=await Promise.allSettled(t.map(i=>i.suggest(e,r)));if(r.aborted)return[];const n=new Map;return o.forEach(i=>{i.status==="fulfilled"&&i.value.forEach(a=>{n.has(a.id)||n.set(a.id,a)})}),[...n.values()].sort((i,a)=>(a.score??0)-(i.score??0)||i.label.localeCompare(a.label)).slice(0,e.limit)}const rx={id:"bv-local-tags",async suggest(e,t){const r=await fetch("/bv_nodepack/completion/search",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({term:e.term.trim(),limit:e.limit,datasets:Km()}),signal:t});if(!r.ok)return[];const o=await r.json();return(Array.isArray(o?.results)?o.results:[]).flatMap(i=>{const a=String(i?.insert_text??"").trim();return a?[{id:String(i?.id??`local:${a}`),insertText:a,label:String(i?.label??a),source:String(i?.source??"BV Local Tags"),detail:i?.detail||void 0,category:i?.category||void 0,score:Number(i?.score)||0,metadata:i?.metadata&&typeof i.metadata=="object"?i.metadata:{}}]:[]})}},fk=["fontFamily","fontSize","fontStyle","fontWeight","letterSpacing","lineHeight","textTransform","textIndent","textAlign","wordSpacing","paddingTop","paddingRight","paddingBottom","paddingLeft","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth"];function pk(e,t=e.selectionStart??e.value.length){const r=e.getBoundingClientRect(),o=window.getComputedStyle(e),n=e.offsetWidth||r.width,i=e.offsetHeight||r.height,a=r.width/n,l=r.height/i,c=document.createElement("div");c.setAttribute("aria-hidden","true"),Object.assign(c.style,{position:"fixed",visibility:"hidden",pointerEvents:"none",left:"0",top:"0",width:`${n}px`,height:`${i}px`,boxSizing:o.boxSizing,whiteSpace:"pre-wrap",overflowWrap:"break-word",overflow:"hidden"}),fk.forEach(w=>{c.style[w]=o[w]}),c.textContent=e.value.slice(0,t);const u=document.createElement("span");u.textContent=e.value.slice(t,t+1)||"​",c.append(u),document.body.append(c),c.scrollTop=e.scrollTop,c.scrollLeft=e.scrollLeft;const d=c.getBoundingClientRect(),f=u.getBoundingClientRect(),p=Number.parseFloat(o.lineHeight)||Number.parseFloat(o.fontSize)*1.2||16;c.remove();const g=r.left+(f.left-d.left)*a,x=r.top+(f.top-d.top)*l;return{left:g,top:x,bottom:x+p*l}}function fs(e,t,r=210){const i=e.getBoundingClientRect(),a=t==="caret"?pk(e):{left:i.left,top:i.top,bottom:i.bottom},l=t==="caret"?Math.min(460,Math.max(320,i.width*.8)):i.width,c=Math.max(180,Math.min(l,window.innerWidth-4*2)),u=Math.max(4,Math.min(a.left,window.innerWidth-c-4)),d=a.bottom+4,f=d+r<=window.innerHeight-4?d:Math.max(4,a.top-r-4);return{left:u,top:f,width:c}}function ox({suggestions:e,selected:t,position:r,onAccept:o,onHeight:n}){const i=m.useRef(null);return m.useLayoutEffect(()=>{i.current&&n?.(i.current.offsetHeight)}),s.jsx("div",{ref:i,className:"bv-completion-popup bv-global-completion-popup",style:r,role:"listbox",children:e.map((a,l)=>s.jsxs(ie,{density:"compact",intent:"ghost",className:l===t?"active":"",onPointerDown:c=>{c.preventDefault(),o(l)},children:[s.jsx("span",{children:a.label}),s.jsx("small",{children:[a.category,a.detail,a.source].filter(Boolean).join(" · ")})]},a.id))})}function ps({value:e,onValue:t,completionContext:r,onKeyDown:o,onBlur:n,onSelect:i,...a}){const l=Gm(),c=Ym(),u=m.useRef(null),[d,f]=m.useState([]),[p,g]=m.useState(0),[x,w]=m.useState(null),k=m.useRef(null),b=m.useRef(null),h=m.useRef(null),v=m.useRef(210),_=m.useRef(()=>{}),y=()=>{b.current?.abort(),f([]),w(null)},T=()=>{const N=u.current;N&&w(fs(N,c,v.current))},S=(N,B,P=B)=>{if(!l||B!==P)return y();h.current!=null&&window.clearTimeout(h.current),b.current?.abort();const O=Qm(N,B,r);if(k.current=O,!O)return y();const E=new AbortController;b.current=E,h.current=window.setTimeout(async()=>{const A=await tx(O,[rx],E.signal);if(E.signal.aborted)return;const C=u.current;f(A),g(0),w(A.length&&C?fs(C,c):null)},120)};_.current=S;const z=(N=p)=>{const B=k.current,P=d[N];if(!B||!P)return;const O=ex(e,B,P);t(O.text),y(),requestAnimationFrame(()=>{u.current?.focus(),u.current?.setSelectionRange(O.caret,O.caret)})};return m.useEffect(()=>{l||y()},[l]),m.useEffect(()=>{const N=()=>{const B=u.current;B&&document.activeElement===B&&_.current(B.value,B.selectionStart,B.selectionEnd)};return document.addEventListener("selectionchange",N),()=>document.removeEventListener("selectionchange",N)},[]),m.useEffect(()=>{x&&T()},[c]),m.useEffect(()=>{if(x)return window.addEventListener("scroll",T,!0),window.addEventListener("resize",T),()=>{window.removeEventListener("scroll",T,!0),window.removeEventListener("resize",T)}},[!!x,c]),m.useEffect(()=>()=>{b.current?.abort(),h.current!=null&&window.clearTimeout(h.current)},[]),s.jsxs(s.Fragment,{children:[s.jsx("span",{className:"bv-textarea-shell resize-vertical",children:s.jsx(k0,{...a,ref:u,value:e,onChange:N=>{t(N.target.value),S(N.target.value,N.target.selectionStart,N.target.selectionEnd)},onSelect:N=>{S(N.currentTarget.value,N.currentTarget.selectionStart,N.currentTarget.selectionEnd),i?.(N)},onKeyDown:N=>{if(d.length){if(N.key==="ArrowDown"||N.key==="ArrowUp"){N.preventDefault(),N.stopPropagation(),g(B=>(B+(N.key==="ArrowDown"?1:-1)+d.length)%d.length);return}if(N.key==="Enter"||N.key==="Tab"){N.preventDefault(),N.stopPropagation(),z();return}if(N.key==="Escape"){N.preventDefault(),N.stopPropagation(),y();return}}o?.(N)},onBlur:N=>{window.setTimeout(y,120),n?.(N)}})}),l&&x&&s.jsx(ox,{suggestions:d,selected:p,position:x,onAccept:z,onHeight:N=>{Math.abs(N-v.current)<1||(v.current=N,T())}})]})}function Ho({label:e,help:t,value:r,onChange:o,children:n,disabled:i,className:a=""}){const l=Re.Children.toArray(n).flatMap(c=>Re.isValidElement(c)?[{value:String(c.props.value??c.props.children??""),label:String(c.props.children??c.props.value??""),disabled:c.props.disabled}]:[]);return s.jsx("div",{className:a,children:s.jsx(tt,{label:e,help:t,value:r,onValue:o,options:l,disabled:i})})}function Tn({onChange:e,...t}){return s.jsx(Pt,{...t,onValue:e})}const Nh=({stacks:e})=>s.jsxs(s.Fragment,{children:[s.jsx("option",{value:"",children:"None"}),e.map(t=>s.jsx("option",{value:t.id,children:t.name},t.id))]}),Pc=({title:e,scope:t,value:r,open:o,onOpen:n,onChange:i})=>s.jsx(ns,{value:o?[t]:[],onValue:a=>n(a.includes(t)),items:[{id:t,title:e,content:s.jsxs("div",{className:"bv-prompt-editor-fields",children:[s.jsx(Tr,{label:"Positive",children:s.jsx(ps,{value:r.positive_source,onValue:a=>i({...r,positive_source:a}),completionContext:{scope:t,polarity:"positive"}})}),s.jsx(Tr,{label:"Negative",children:s.jsx(ps,{value:r.negative_source,onValue:a=>i({...r,negative_source:a}),completionContext:{scope:t,polarity:"negative"}})})]})}]}),hk=({region:e,automaticColor:t,onRegion:r})=>s.jsxs("section",{className:"bv-inspector-section",children:[s.jsx("h3",{children:"Mask & appearance"}),s.jsx(Tn,{label:"Feather",value:e.mask.feather,min:0,max:.5,step:.005,onChange:o=>r(n=>{n.mask.feather=o})}),s.jsx("div",{className:"region-color-control",children:s.jsxs("div",{className:"region-color-split",children:[s.jsx(S0,{label:"Display color",help:"Editor display only. It does not change masks or sampling.",value:e.authoring.color,onValue:o=>r(n=>{n.authoring.color=o.toUpperCase()})}),s.jsx(ie,{density:"compact",intent:"ghost",iconOnly:!0,"aria-label":"Reset display color to automatic",title:"Reset to automatic",disabled:!t||e.authoring.color.toUpperCase()===t,onClick:()=>r(o=>{t&&(o.authoring.color=t)}),children:"↶"})]})})]});function gk(e){const t=e.layer?.geometries.find(n=>n.type==="brush_stroke"),[r,o]=m.useState(e.mode??(e.layer?"selection":e.region?"region":"document"));return m.useEffect(()=>o(e.mode??(e.layer?"selection":e.region?"region":"document")),[e.layer?.id,e.mode,e.region?.id]),s.jsx(df,{density:"compact",className:"inspector-density",children:s.jsxs("aside",{className:`inspector bv-ui ${e.mode?"fixed-inspector":""}`,children:[s.jsxs("nav",{className:"inspector-tabs",role:"tablist","aria-label":"Inspector context",children:[s.jsx(ie,{intent:"ghost",role:"tab","aria-selected":r==="selection",disabled:!e.layer,onClick:()=>o("selection"),children:"Selection"}),s.jsx(ie,{intent:"ghost",role:"tab","aria-selected":r==="region",disabled:!e.region,onClick:()=>o("region"),children:"Region"}),s.jsx(ie,{intent:"ghost",role:"tab","aria-selected":r==="document",onClick:()=>o("document"),children:"Document"})]}),s.jsxs("div",{className:"inspector-tab-panel",role:"tabpanel",hidden:r!=="selection",children:[e.region&&s.jsx(hk,{region:e.region,automaticColor:e.automaticRegionColor,onRegion:e.onRegion}),e.layer&&e.bounds?s.jsxs("section",{className:"bv-inspector-section",children:[s.jsx("h3",{children:"Layer"}),s.jsx("div",{className:"bv-layer-bounds-grid",children:["x","y","width","height"].map(n=>{const i=n==="x"||n==="width"?e.canvas.width:e.canvas.height;return s.jsx(Tn,{label:n.toUpperCase(),value:Math.round(e.bounds[n]*i),min:0,max:i,step:1,unit:"px",onChange:a=>e.onLayerBounds({...e.bounds,[n]:a/i})},n)})}),t&&s.jsxs(s.Fragment,{children:[s.jsx(Tn,{label:"Stroke width",value:t.size,min:.001,max:1,step:.005,onChange:n=>e.onBrushSetting("size",n),unit:"×"}),s.jsxs("div",{className:"bv-compact-grid",children:[s.jsx(Tn,{label:"Hardness",value:t.hardness,min:0,max:1,step:.05,onChange:n=>e.onBrushSetting("hardness",n)}),s.jsx(Tn,{label:"Opacity",value:t.opacity,min:0,max:1,step:.05,onChange:n=>e.onBrushSetting("opacity",n)})]}),s.jsxs("div",{className:"bv-compact-grid",children:[s.jsxs(Ho,{label:"Shape",value:t.shape??"round",onChange:n=>e.onBrushSetting("shape",n),children:[s.jsx("option",{value:"round",children:"Round"}),s.jsx("option",{value:"square",children:"Square"})]}),s.jsxs(Ho,{label:"Pressure",value:t.pressure_mode??"constant",onChange:n=>e.onBrushSetting("pressure_mode",n),children:[s.jsx("option",{value:"constant",children:"Constant"}),s.jsx("option",{value:"stylus",children:"Stylus"})]})]})]})]}):s.jsx("p",{className:"option-hint",children:"Select a layer to edit its geometry."})]}),s.jsx("div",{className:"inspector-tab-panel",role:"tabpanel",hidden:r!=="region",children:e.region&&s.jsxs("section",{className:"bv-inspector-section",children:[s.jsx("h3",{children:"Region"}),s.jsxs(Ho,{label:"Usage",help:"Controls whether this region participates in the main render, Detailer output, or both.",value:e.region.usage,onChange:n=>e.onRegion(i=>{i.usage=n}),children:[s.jsx("option",{value:"generation",children:"Generation"}),s.jsx("option",{value:"detailer",children:"Detailer only"}),s.jsx("option",{value:"both",children:"Generation + Detailer"})]}),e.loraV3RegionEditor??s.jsx(Ho,{label:"Additional LoRA Stack",help:"Added to the global stack. Source activation and strengths remain unchanged.",value:e.loraBindings.regions[e.region.id]??"",onChange:n=>e.onRegionLoraStack(e.region.id,n||null),children:s.jsx(Nh,{stacks:e.loraStacks})}),s.jsx(Tn,{label:"Strength",value:e.region.strength,min:0,max:10,step:.05,onChange:n=>e.onRegion(i=>{i.strength=n})}),s.jsx(Pc,{title:"Region Prompt",scope:"region",value:e.region.prompts,open:e.promptSections.region,onOpen:n=>e.onPromptSection("region",n),onChange:n=>e.onRegion(i=>{i.prompts=n})})]})}),s.jsx("div",{className:"inspector-tab-panel",role:"tabpanel",hidden:r!=="document",children:s.jsxs("section",{className:"bv-inspector-section",children:[s.jsx("h3",{children:"Document Prompts"}),e.loraV3GlobalEditor??s.jsx(Ho,{label:"Global LoRA Stack",help:"Applied globally and inherited by every region.",value:e.loraBindings.global_stack_id??"",onChange:n=>e.onGlobalLoraStack(n||null),children:s.jsx(Nh,{stacks:e.loraStacks})}),s.jsxs(Ho,{label:"Negative Mode",value:e.negativeMode,onChange:n=>e.onNegativeMode(n),children:[s.jsx("option",{value:"auto",children:"Auto"}),s.jsx("option",{value:"prompt",children:"Prompt"}),s.jsx("option",{value:"zero_out",children:"Zero out"})]}),s.jsx(Pc,{title:"Global",scope:"global",value:e.globalPrompts,open:e.promptSections.global,onOpen:n=>e.onPromptSection("global",n),onChange:e.onGlobalPrompts}),s.jsx(Pc,{title:"Background",scope:"background",value:e.backgroundPrompts,open:e.promptSections.background,onOpen:n=>e.onPromptSection("background",n),onChange:e.onBackgroundPrompts})]})})]})})}const Qe=(e,t=0,r=1)=>Math.max(t,Math.min(r,e));function bk(e,t={width:1,height:1}){if(e.type==="rect"||e.type==="ellipse"||e.type==="raster_mask")return{x:e.x,y:e.y,width:e.width,height:e.height};const r=e.points.map(f=>f.x),o=e.points.map(f=>f.y);if(e.type==="polygon")return{x:Math.min(...r),y:Math.min(...o),width:Math.max(...r)-Math.min(...r),height:Math.max(...o)-Math.min(...o)};const n=Math.min(t.width,t.height),i=e.size*n/t.width/2,a=e.size*n/t.height/2,l=Qe(Math.min(...r)-i),c=Qe(Math.min(...o)-a),u=Qe(Math.max(...r)+i),d=Qe(Math.max(...o)+a);return{x:l,y:c,width:u-l,height:d-c}}function nx(e,t,r){const o=r.x-t.x,n=r.y-t.y;if(o===0&&n===0)return Math.hypot(e.x-t.x,e.y-t.y);const i=Qe(((e.x-t.x)*o+(e.y-t.y)*n)/(o*o+n*n));return Math.hypot(e.x-(t.x+i*o),e.y-(t.y+i*n))}function vk(e,t,r={width:1,height:1}){if(e.type==="rect"||e.type==="raster_mask")return t.x>=e.x&&t.x<=e.x+e.width&&t.y>=e.y&&t.y<=e.y+e.height;if(e.type==="ellipse"){const a=e.width/2,l=e.height/2;return((t.x-e.x-a)/a)**2+((t.y-e.y-l)/l)**2<=1}if(e.type==="polygon"){let a=!1;for(let l=0,c=e.points.length-1;lt.y!=d.y>t.y&&t.x<(d.x-u.x)*(t.y-u.y)/(d.y-u.y)+u.x&&(a=!a)}return a}const o=a=>({...a,x:a.x*r.width,y:a.y*r.height}),n=e.size*Math.min(r.width,r.height)/2,i=o(t);return e.points.length===1?Math.hypot(i.x-e.points[0].x*r.width,i.y-e.points[0].y*r.height)<=n:e.points.slice(1).some((a,l)=>nx(i,o(e.points[l]),o(a))<=n)}function Zs(e,t){const r=e.map(l=>bk(l,t)),o=Math.min(...r.map(l=>l.x)),n=Math.min(...r.map(l=>l.y)),i=Math.max(...r.map(l=>l.x+l.width)),a=Math.max(...r.map(l=>l.y+l.height));return{x:o,y:n,width:i-o,height:a-n}}function Oh(e,t,r,o){const n=Zs(e,o);return t=Qe(t,-n.x,1-n.x-n.width),r=Qe(r,-n.y,1-n.y-n.height),e.map(i=>{const a=Kt(i);return a.type==="rect"||a.type==="ellipse"||a.type==="raster_mask"?(a.x+=t,a.y+=r):a.points=a.points.map(l=>({...l,x:l.x+t,y:l.y+r})),a})}function ix(e,t,r){const o=Zs(e,r);t={x:Qe(t.x,0,.998),y:Qe(t.y,0,.998),width:Qe(t.width,.002,1),height:Qe(t.height,.002,1)},t.width=Math.min(t.width,1-t.x),t.height=Math.min(t.height,1-t.y);const n=t.width/Math.max(o.width,1e-6),i=t.height/Math.max(o.height,1e-6);return e.map(a=>{const l=Kt(a);return l.type==="rect"||l.type==="ellipse"||l.type==="raster_mask"?(l.x=t.x+(l.x-o.x)*n,l.y=t.y+(l.y-o.y)*i,l.width*=n,l.height*=i):(l.points=l.points.map(c=>({...c,x:t.x+(c.x-o.x)*n,y:t.y+(c.y-o.y)*i})),l.type==="brush_stroke"&&(l.size=Qe(l.size*Math.sqrt(n*i),.001,1))),l})}function mk(e,t,r,o,n=!1,i){const a=Zs(e,i);let l=a.x,c=a.y,u=l+a.width,d=c+a.height;if(t.includes("w")&&(l=Qe(l+r,0,u-.002)),t.includes("e")&&(u=Qe(u+r,l+.002,1)),t.includes("n")&&(c=Qe(c+o,0,d-.002)),t.includes("s")&&(d=Qe(d+o,c+.002,1)),n&&t.length===2){const f=a.width/Math.max(a.height,1e-4),p=u-l,g=d-c;if(p/g>f){const x=p/f;t.includes("n")?c=Qe(d-x):d=Qe(c+x)}else{const x=g*f;t.includes("w")?l=Qe(u-x):u=Qe(l+x)}}return ix(e,{x:l,y:c,width:u-l,height:d-c},i)}function xk(e,t,r){return nx(e,t,r)}function yk(e,t=.0015){if(e.length<=2)return e;const r=[e[0]];for(const n of e.slice(1,-1))Math.hypot(n.x-r[r.length-1].x,n.y-r[r.length-1].y)>=t&&r.push(n);r.push(e[e.length-1]);const o=n=>{if(n.length<=2)return n;let i=0,a=0;for(let l=1;li&&(i=c,a=l)}return i<=t?[n[0],n[n.length-1]]:[...o(n.slice(0,a+1)).slice(0,-1),...o(n.slice(a))]};return o(r)}const Mh=e=>e.layer_id??e.id,_k=e=>e.authoring??{name:"Layer",visible:!0,locked:!1};function wk(e,t,r,o){if(o==="replace")return{ids:[t],primary:t,anchor:t};if(o==="toggle"){const l=e.ids.includes(t)?e.ids.filter(c=>c!==t):[...e.ids,t];return{ids:l,primary:l.includes(t)?t:l[l.length-1]??null,anchor:t}}const n=e.anchor&&r.includes(e.anchor)?e.anchor:e.primary;if(!n)return{ids:[t],primary:t,anchor:t};const i=r.indexOf(n),a=r.indexOf(t);return i<0||a<0?{ids:[t],primary:t,anchor:t}:{ids:r.slice(Math.min(i,a),Math.max(i,a)+1),primary:t,anchor:n}}function kk(e,t,r){const o=new Set(t);if(o.size<2||!o.has(r))return!1;const n=e.geometry.find(l=>Mh(l)===r);if(!n)return!1;const i=_k(n);let a=!1;return e.geometry.forEach(l=>{const c=Mh(l);o.has(c)&&(l.mask_group_id??(l.mask_group_id=c),l.layer_id=r,l.authoring={...i},a||(a=c!==r))}),a}function ax(e,t){const r=new Map;e.forEach(o=>{o.mask_group_id&&(r.has(o.mask_group_id)||r.set(o.mask_group_id,t()),o.mask_group_id=r.get(o.mask_group_id))})}const Ek="bv-regional-editor-state-v1:",Ze=(e,t)=>typeof e=="number"&&Number.isFinite(e)?e:t,Tt=(e,t,r)=>Math.max(t,Math.min(r,e)),Tk=["select","rect-add","rect-subtract","ellipse-add","ellipse-subtract","polygon-add","polygon-subtract","brush-add","brush-subtract"];function lx(e){return`${Ek}${e}`}function Rk(e,t,r={width:520,height:560}){return{x:Tt(Ze(e.x,t.width-r.width-24),-r.width+52,t.width-52),y:Tt(Ze(e.y,84),72,Math.max(72,t.height-52))}}function hs(e,t){const r=Tt(Ze(e.width,520),Math.min(360,t.width),Math.max(360,t.width-32)),o=Tt(Ze(e.height,640),Math.min(320,t.height),Math.max(320,t.height-32));return{...Rk({x:Ze(e.x,t.width-r-24),y:Ze(e.y,84)},t,{width:r}),width:r,height:o}}function Ah(e,t){return e.mode==="workspace"?fn({x:24,y:58,width:t.width-48,height:t.height-82},t,"workspace"):e.windows.floating}function fn(e,t,r){const o=Math.min(780,Math.max(320,t.width-16)),n=Math.min(520,Math.max(300,t.height-16)),i=Math.max(o,t.width),a=Math.max(n,t.height),l=Tt(Ze(e.width,o),o,i),c=Tt(Ze(e.height,n),n,a),u=r==="workspace"?8:0;return{x:Tt(Ze(e.x,u),u-l+80,t.width-u-80),y:Tt(Ze(e.y,58),0,t.height-42),width:l,height:c}}function Mf(e={width:window.innerWidth,height:window.innerHeight}){const t=fn({x:24,y:58,width:e.width-48,height:e.height-82},e,"workspace"),r=Math.min(1100,e.width-32),o=Math.min(760,e.height-80),n=fn({x:Math.max(16,e.width-r-32),y:64,width:r,height:o},e,"floating");return{version:1,mode:"workspace",windows:{workspace:t,floating:n},panels:{left:290,right:340},artboard:{zoom:1,panX:0,panY:0,fit:!0},selectedRegionId:null,selectedLayerId:null,displayOpacity:.5,backgroundOpacity:1,isolate:!1,binaryMaskPreview:!1,tool:"select",brush:{size:.04,hardness:.75,opacity:1,shape:"round",pressureMode:"constant"},openMenu:null,promptSections:{region:!1,global:!1,background:!1},quickPromptTarget:"global",quickPromptWindow:hs({x:e.width-544,y:84,width:520,height:640},e)}}function Sk(e,t={width:window.innerWidth,height:window.innerHeight}){const r=Mf(t),o=e&&typeof e=="object"?e:{},n=o.mode==="floating"?"floating":"workspace",i=o.windows&&typeof o.windows=="object"?o.windows:r.windows,a=o.panels&&typeof o.panels=="object"?o.panels:r.panels,l=o.artboard&&typeof o.artboard=="object"?o.artboard:r.artboard,c=o.brush&&typeof o.brush=="object"?o.brush:r.brush;return{version:1,mode:n,windows:{workspace:fn(i.workspace??r.windows.workspace,t,"workspace"),floating:fn(i.floating??r.windows.floating,t,"floating")},panels:{left:Tt(Ze(a.left,290),210,620),right:Tt(Ze(a.right,340),210,620)},artboard:{zoom:Tt(Ze(l.zoom,1),.02,8),panX:Ze(l.panX,0),panY:Ze(l.panY,0),fit:typeof l.fit=="boolean"?l.fit:!0},selectedRegionId:typeof o.selectedRegionId=="string"?o.selectedRegionId:null,selectedLayerId:typeof o.selectedLayerId=="string"?o.selectedLayerId:null,displayOpacity:Tt(Ze(o.displayOpacity,.5),.05,1),backgroundOpacity:Tt(Ze(o.backgroundOpacity,1),0,1),isolate:o.isolate===!0,tool:o.tool==="rect"?"rect-add":Tk.includes(o.tool)?o.tool:"select",binaryMaskPreview:o.binaryMaskPreview===!0,brush:{size:Tt(Ze(c.size,.04),.001,1),hardness:Tt(Ze(c.hardness,.75),0,1),opacity:Tt(Ze(c.opacity,1),0,1),shape:c.shape==="square"?"square":"round",pressureMode:c.pressureMode==="stylus"?"stylus":"constant"},openMenu:["file","edit","view","artboard","layers","help"].includes(o.openMenu)?o.openMenu:null,promptSections:{region:o.promptSections?.region===!0,global:o.promptSections?.global===!0,background:o.promptSections?.background===!0},quickPromptTarget:typeof o.quickPromptTarget=="string"&&o.quickPromptTarget?o.quickPromptTarget:"global",quickPromptWindow:hs(o.quickPromptWindow??r.quickPromptWindow,t)}}function Nl(e,t=localStorage,r={width:window.innerWidth,height:window.innerHeight}){try{return Sk(JSON.parse(t.getItem(lx(e))||"null"),r)}catch{return Mf(r)}}function td(e,t,r=localStorage){try{return r.setItem(lx(e),JSON.stringify(t)),!0}catch{return!1}}function Lk(e,t,r,o=8){if(e.length!==t*r)throw new Error("Alpha buffer size does not match its dimensions");const n=new Int32Array(e.length),i=[];let a=0;const l=new Int32Array(e.length);for(let c=0;c=o&&(n[y]=a,l[d++]=y)}}i.push({label:a,x:f,y:p,width:g-f+1,height:x-p+1,pixels:w})}return{labels:n,areas:i}}const rd=(e,t)=>{const r=document.createElement("canvas");return r.width=e,r.height=t,r},Ck=e=>new Promise((t,r)=>{const o=new Image;o.onload=()=>t(o),o.onerror=()=>r(new Error("Raster layer image could not be decoded")),o.src=e});async function Nk(e,t,r,o){if(e.save(),e.globalCompositeOperation=t.operation==="subtract"?"destination-out":"source-over",e.fillStyle="white",e.strokeStyle="white",t.type==="rect")e.fillRect(t.x*r,t.y*o,t.width*r,t.height*o);else if(t.type==="ellipse")e.beginPath(),e.ellipse((t.x+t.width/2)*r,(t.y+t.height/2)*o,t.width*r/2,t.height*o/2,0,0,Math.PI*2),e.fill();else if(t.type==="polygon")e.beginPath(),t.points.forEach((n,i)=>i?e.lineTo(n.x*r,n.y*o):e.moveTo(n.x*r,n.y*o)),e.closePath(),e.fill();else if(t.type==="raster_mask")e.drawImage(await Ck(t.data_url),t.x*r,t.y*o,t.width*r,t.height*o);else{const n=Math.min(r,o),i=t.points,a=t.size*n,l=t.shape==="square"?"square":"round",c=(f,p,g=0)=>{const x=a*f.pressure*p;e.filter=g>0?`blur(${g}px)`:"none",e.beginPath(),t.shape==="square"?e.rect(f.x*r-x/2,f.y*o-x/2,x,x):e.arc(f.x*r,f.y*o,x/2,0,Math.PI*2),e.fill()},u=(f,p=0)=>{e.filter=p>0?`blur(${p}px)`:"none",e.lineCap=l,e.lineJoin=l==="round"?"round":"miter";for(let g=1;g0&&c(i[0],t.hardness)):(u(1,d),t.hardness>0&&u(t.hardness))}e.restore()}async function Ok(e,t,r){const o=rd(t,r),n=o.getContext("2d",{willReadFrequently:!0}),i=new Map;e.filter(a=>a.enabled!==!1).forEach(a=>{const l=Ma(a),c=i.get(l);c?c.push(a):i.set(l,[a])});for(const a of i.values()){const l=rd(t,r),c=l.getContext("2d");for(const u of a)await Nk(c,u,t,r);n.drawImage(l,0,0)}return o}async function Mk(e,t,r){const i=(await Ok(e,t.width,t.height)).getContext("2d",{willReadFrequently:!0}).getImageData(0,0,t.width,t.height),a=new Uint8ClampedArray(t.width*t.height);for(let f=0;ff.pixels>1);if(u.length<2)return[];const d={...e[0].authoring??{name:"Layer",visible:!0,locked:!1}};return u.map((f,p)=>{const g=rd(f.width,f.height),x=g.getContext("2d"),w=x.createImageData(f.width,f.height);for(let b=0;b({schema:"bv.regional.lora_bindings",version:1,document_id:e,global_stack_id:null,regions:{}});function Ak(e,t,r){if(!t)return!1;const o=r.filter(n=>n.id===t);return o.length>1&&o[0].nodeId!==e}function Af(e,t){if(e==null||e==="")return Qs(t);const r=typeof e=="string"?JSON.parse(e):structuredClone(e);if(r?.schema!=="bv.regional.lora_bindings"||r?.version!==1||typeof r?.regions!="object"||Array.isArray(r.regions))throw new Error("Not a valid BV regional LoRA bindings v1 value");if(r.document_id&&r.document_id!==t)throw new Error("LoRA bindings target a different BV Regional document");const o={};for(const[n,i]of Object.entries(r.regions))typeof i=="string"&&i&&(o[n]=i);return{schema:"bv.regional.lora_bindings",version:1,document_id:t,global_stack_id:typeof r.global_stack_id=="string"&&r.global_stack_id?r.global_stack_id:null,regions:o}}function Hn(e,t){const r=Object.fromEntries(Object.entries(e.regions).filter(([o])=>t.has(o)));return{...e,regions:r}}function Bc(e,t){const r=structuredClone(e);return{document:r,loraBindings:structuredClone(Hn(t,new Set(r.regions.map(o=>o.id))))}}function Dk(e,t,r){const o=t.find((c,u)=>t.findIndex(d=>d.id===c.id)!==u);if(o)return[`Duplicate LoRA stack ID: ${o.id}`];const n=t.find((c,u)=>t.findIndex(d=>d.name.localeCompare(c.name,void 0,{sensitivity:"accent"})===0)!==u);if(n)return[`Duplicate LoRA stack name: ${n.name}`];const i=r&&Object.keys(e.regions).find(c=>!r.has(c));if(i)return[`LoRA assignment targets a missing region: ${i}`];const a=new Set(t.map(c=>c.id)),l=[e.global_stack_id,...Object.values(e.regions)].filter(c=>!!c);return l.length?t.length?[...new Set(l.filter(c=>!a.has(c)))].map(c=>`Assigned LoRA stack is missing: ${c}`):["LoRA stacks are assigned, but no BV Named LoRA Stack sources exist in this workflow."]:[]}function Ik(e,t,r){const o=new Map(t.map(i=>[i.id,i.name])),n=[];e.global_stack_id&&n.push(`Global: ${o.get(e.global_stack_id)??"Missing stack"}`);for(const[i,a]of Object.entries(e.regions))n.push(`${r[i]??"Missing region"}: ${o.get(a)??"Missing stack"}`);return n.length?`${n.join(" · ")} · source values unchanged`:"No LoRA stacks assigned"}const gs=(e,t)=>e.regions.find(r=>r.id===t)??null,od=(e,t)=>e?Mr(e).find(r=>r.id===t)??null:null,nd=e=>e.kind==="layer"||e.kind==="geometry"?e.layerId:null;function jk(e,t){const r=gs(e,t.source.regionId),o=gs(e,t.target.regionId);if(!r||!o||r.authoring.locked||o.authoring.locked||t.source.kind!=="region"&&od(r,t.source.layerId)?.authoring.locked)return!1;const n=nd(t.target);return!(n&&od(o,n)?.authoring.locked)}function Pk(e,t,r,o){if(!r||o==="inside"){e.geometry.push(...t);return}const n=e.geometry.map((a,l)=>Bt(a)===r?l:-1).filter(a=>a>=0);if(!n.length){e.geometry.push(...t);return}const i=o==="before"?n[n.length-1]+1:n[0];e.geometry.splice(i,0,...t)}function Bk(e,t,r){if(!jk(e,t))return!1;const o=structuredClone(e.regions),n=()=>e.regions.every(f=>Bv(f.geometry))?!0:(e.regions=o,!1);if(t.source.kind==="region"){if(t.target.kind!=="region"||t.position==="inside"||t.source.regionId===t.target.regionId)return!1;const f=e.regions.findIndex(x=>x.id===t.source.regionId),[p]=e.regions.splice(f,1),g=e.regions.findIndex(x=>x.id===t.target.regionId);return e.regions.splice(t.position==="before"?g:g+1,0,p),e.regions.forEach((x,w)=>{x.priority=w}),n()}const i=gs(e,t.source.regionId),a=gs(e,t.target.regionId);if(t.source.kind==="layer"){const f=t.source;if(t.target.kind==="geometry"||f.layerId===nd(t.target))return!1;const p=i.geometry.filter(g=>Bt(g)===f.layerId);return p.length?(i.geometry=i.geometry.filter(g=>Bt(g)!==f.layerId),Pk(a,p,nd(t.target),t.position),n()):!1}const l=t.source,c=i.geometry.findIndex(f=>f.id===l.geometryId);if(c<0||t.target.kind==="region"&&t.position!=="inside")return!1;const[u]=i.geometry.splice(c,1);if(t.target.kind==="region")return u.layer_id=r(),delete u.mask_group_id,u.authoring={...sr(u)},a.geometry.push(u),n();const d=t.target.layerId;if((d!==l.layerId||a!==i)&&(u.mask_group_id??(u.mask_group_id=l.layerId),u.layer_id=d,u.authoring={...od(a,d).authoring}),t.target.kind==="layer"||t.position==="inside"){const f=a.geometry.map((p,g)=>Bt(p)===d?g:-1).filter(p=>p>=0);a.geometry.splice(f.length?f[f.length-1]+1:a.geometry.length,0,u)}else{const f=t.target,p=a.geometry.findIndex(g=>g.id===f.geometryId);a.geometry.splice(t.position==="before"?p:p+1,0,u)}return n()}const zk=e=>e.scope==="global"?"global":`region:${e.document_id}:${e.region_id}`;function sx(e,t){return e.scope===t.scope&&(t.scope==="global"||e.document_id===t.document_id&&e.region_id===t.region_id)}function cx(e,t,r){const o=e.entries.flatMap(n=>{if(r&&n.id!==r)return[n];const i=n.targets.filter(a=>!sx(a,t));return i.length?[{...n,targets:i}]:[]});return{...e,collector_id:o.some(n=>n.source.kind==="external")?e.collector_id:null,entries:o}}const ux=(e,t)=>e.entries.filter(r=>r.source.kind==="external"&&r.targets.some(o=>sx(o,t)));function dx({collectors:e,config:t,target:r,resolved:o,onCollector:n,onResource:i,onAdd:a,onRemove:l}){const c=ux(t,r);return s.jsxs("div",{className:"bv-lora-v3-scope-picker",children:[c.map((u,d)=>s.jsxs("section",{className:"bv-lora-v3-stack-row",children:[s.jsxs("strong",{children:["LoRA Stack ",d+1]}),s.jsx(mf,{collectors:e,collectorId:t.collector_id??"",resourceId:u.source.resource_id,resolved:o,onCollector:n,onResource:f=>i(u.id,f)}),s.jsx(ie,{density:"compact",intent:"ghost",onClick:()=>l(u.id,r),children:"Remove"})]},u.id)),s.jsx(ie,{intent:"secondary",disabled:!e.some(u=>u.resources.length>0),onClick:()=>a(r),children:"Add LoRA stack"})]})}function Dh(e){const t=zk(e.target),r=ux(e.config,e.target).length>0,[o,n]=m.useState(r);return m.useEffect(()=>n(r),[r,t]),s.jsx("div",{className:"bv-optional-lora-scope",children:s.jsxs("div",{className:"bv-lora-v3-enable-row",children:[s.jsx($s,{label:"",value:o,trueLabel:"LoRA enabled",falseLabel:"LoRA disabled",onValue:i=>{n(i),i&&!r&&e.onAdd(e.target),i||e.onClear(e.target)}}),o&&s.jsx(dx,{...e})]})})}function Fk({collectors:e,config:t,resolved:r,targetOptions:o=[],onCollector:n,onResource:i,onAddExternal:a,onRemove:l}){return s.jsx("div",{className:"bv-lora-v3-picker-panel",children:o.map(c=>s.jsxs("section",{className:"bv-lora-v3-target",children:[s.jsx("h3",{children:c.label}),s.jsx(dx,{collectors:e,config:t,target:c.target,resolved:r,onCollector:n,onResource:i,onAdd:a,onRemove:l})]},c.value))})}const Uk=()=>({version:1,collector_id:null,entries:[]});function Vk(e){const t=typeof e=="string"?JSON.parse(e):e;if(!t||typeof t!="object"||t.version!==1||!Array.isArray(t.entries))throw new Error("Invalid BV Regional LoRA v3 configuration");return structuredClone(t)}const Wk=e=>JSON.stringify(e),pn="BV_RUNTIME_RESOURCE_PROVIDER",ni="resource_provider",fx="BV LoRA Stack Collector",Df=(e,t)=>t==null?null:e?._links?.get?.(t)??e?.links?.get?.(t)??e?.links?.[t]??null,bs=e=>e?.findIndex(t=>t?.name===ni||t?.type===pn)??-1;function px(e){let t=bs(e.outputs);t<0&&e.addOutput&&(e.addOutput(ni,pn),t=bs(e.outputs));const r=e.outputs?.[t];return r&&(r.name=ni,r.type=pn,r.hidden=!0,r.__bvResourceSlot=!0),t}function hx(e){let t=bs(e.inputs);t<0&&e.addInput&&(e.addInput(ni,pn),t=bs(e.inputs));const r=e.inputs?.[t];return r&&(r.name=ni,r.type=pn,r.hidden=!0,r.__bvResourceSlot=!0),t}function _a(e){const t=e.inputs?.find(i=>i.name===ni||i.type===pn),r=Df(e.graph,t?.link);if(!r||String(r.target_id)!==String(e.id))return null;const o=e.graph?.getNodeById?.(r.origin_id),n=o?.outputs?.[Number(r.origin_slot)];return o?.graph===e.graph&&(o?.type===fx||n?.type===pn)?o:null}function Hk(e,t){const r=hx(e);if(r<0)return!1;if(e.inputs?.[r]?.link!=null&&e.disconnectInput?.(r),!t)return!0;if(t.graph!==e.graph)return!1;const o=px(t);return o<0?!1:(t.connect?.(o,e,r),_a(e)===t)}function $k(e){return(e.graph?._nodes??[]).filter(t=>t!==e&&t.graph===e.graph&&String(t.comfyClass??t.type)===fx)}const Yk=new Set(["BV Regional Native Conditioning","BV Regional Krea 2 Attention","BV Regional Anima Conditioning"]);function Xk(e){const t=e.graph,r=[e],o=new Set([e]),n=[];for(;r.length;){const i=r.shift();for(const a of i?.outputs??[])if(a?.type==="BV_REGIONAL")for(const l of a.links??[]){const c=Df(t,l),u=c&&t?.getNodeById?.(c.target_id);!u||u.graph!==t||o.has(u)||(o.add(u),Yk.has(u.type)&&n.push(u),(u.outputs??[]).some(d=>d.type==="BV_REGIONAL")&&r.push(u))}}return n}function gx(e,t){return[e,...Xk(e)].map(o=>Hk(o,t)).every(Boolean)}function Gk(e){const t=e.graph,r=[e],o=new Set([e]);for(;r.length;){const n=r.shift();for(const i of n?.inputs??[]){if(i?.type!=="BV_REGIONAL")continue;const a=Df(t,i.link),l=a&&t?.getNodeById?.(a.origin_id);if(!(!l||l.graph!==t||o.has(l))){if(["BV Regional LoRA","BV Regional Prompt"].includes(String(l.comfyClass??l.type)))return l;o.add(l),r.push(l)}}}return null}const Kk="BV_RUNTIME_RESOURCE_PROVIDER_M0",id="BV_RUNTIME_RESOURCE_PROVIDER",ad=e=>e===Kk||e===id;function If(e){return(e?._nodes??[]).some(t=>t.__bvM0ResourceConsumer===!0&&!!t.properties?.bvM0DebugVisible)}function qk(e,t){if(!t)return!1;const r=e.graph?.getNodeById?.(t.origin_id),o=e.graph?.getNodeById?.(t.target_id);return r?.outputs?.[t.origin_slot]?.type===id||o?.inputs?.[t.target_slot]?.type===id?!0:bx(e,t)?!If(e.graph):!!(r?.outputs?.[t.origin_slot]?.__bvM0VisualHidden||o?.inputs?.[t.target_slot]?.__bvM0VisualHidden)}function bx(e,t){if(!t)return!1;const r=e.graph?.getNodeById?.(t.origin_id),o=e.graph?.getNodeById?.(t.target_id),n=r?.outputs?.[t.origin_slot],i=o?.inputs?.[t.target_slot];return!!((n?.__bvM0ResourceSlot||ad(n?.type))&&(i?.__bvM0ResourceSlot||ad(i?.type)))}function vx(e){if(!e||e.__bvM0DebugAnimation)return;e.__bvM0DebugAnimation=!0;const t=()=>{const r=If(e.graph);if(document.documentElement.classList.toggle("bv-m0-debug-active",r),!r){e.__bvM0DebugAnimation=!1;return}e.setDirty?.(!1,!0),e.setDirtyCanvas?.(!1,!0),requestAnimationFrame(t)};requestAnimationFrame(t)}function mx(e){if(typeof document>"u")return;const t=If(e);document.documentElement.classList.toggle("bv-m0-debug-active",t)}function jf(e){if(!e||e.__bvM0VisibilityInstalled)return;e.__bvM0VisibilityInstalled=!0;const t=e.drawNode,r=e.renderLink;e.renderLink=function(...o){if(qk(this,o[3]))return;if(!bx(this,o[3]))return r.apply(this,o);const n=this.graph?.getNodeById?.(o[3]?.target_id),i=n?.inputs?.map((c,u)=>({slot:c,index:u})).filter(({slot:c})=>c.__bvM0ResourceSlot)??[],a=n?.__bvM0FanInAnchorSlot??(i.length>1?i[0].index:void 0);a!=null&&n&&((o[3]?.target_slot===a||!n.__bvM0FanInPoint)&&(n.__bvM0FanInPoint=o[2]),o[2]=n.__bvM0FanInPoint);const l=o[0];l.save();try{return l.setLineDash([7,5]),l.lineDashOffset=-((typeof performance>"u"?0:performance.now())/45%12),o[5]=typeof performance>"u"?0:performance.now()/1e3,r.apply(this,o)}finally{l.restore()}},e.drawNode=function(o,n){const i=[];for(const a of[...o.inputs??[],...o.outputs??[]])if(ad(a.type)){for(const l of["name","label","localized_name"]){const c=Object.prototype.hasOwnProperty.call(a,l),u=a[l];Object.defineProperty(a,l,{configurable:!0,writable:!0,value:""}),i.push(()=>c?Object.defineProperty(a,l,{configurable:!0,writable:!0,value:u}):delete a[l])}for(const l of["draw","drawCollapsed"]){if(typeof a[l]!="function")continue;const c=Object.prototype.hasOwnProperty.call(a,l),u=a[l];Object.defineProperty(a,l,{configurable:!0,writable:!0,value:()=>{}}),i.push(()=>c?Object.defineProperty(a,l,{configurable:!0,writable:!0,value:u}):delete a[l])}}try{return t.call(this,o,n)}finally{for(let a=i.length-1;a>=0;a--)i[a]()}}}function Pf(e,t,r){let o=0;const n=(e.__bvM0ElementMarkRevision??0)+1;e.__bvM0ElementMarkRevision=n;const i=()=>{if(e.__bvM0ElementMarkRevision!==n)return;const a=CSS.escape(String(e.id)),l=document.querySelector(`.lg-node[data-node-id="${a}"]`);if(!l){o++<40&&setTimeout(i,50);return}l.classList.add(`bv-m0-${t}`),l.classList.toggle("bv-m0-debug",r);const c=l.querySelectorAll(".lg-slot--input"),u=e.inputs?.map((f,p)=>({slot:f,index:p})).filter(({slot:f})=>f.__bvM0ResourceSlot)??[],d=u.length>1?u[0].index:void 0;c.forEach((f,p)=>f.classList.toggle("bv-m0-port-hidden",!!e.inputs?.[p]?.__bvM0PortHidden||d!=null&&p!==d)),l.classList.toggle("bv-m0-fan-in",d!=null),o++<4&&setTimeout(i,75*o)};i()}const ld="bv-open-regional-lora-editor",Rr=(e,t)=>e.widgets?.find(r=>r.name===t),Ia=e=>String(e?.comfyClass??e?.type??""),xx=(e,t)=>t==null?null:e?._links?.get?.(t)??e?.links?.get?.(t)??e?.links?.[t]??null,wa=e=>{e&&(e.type="converted-widget",e.hidden=!0,e.computeSize=()=>[0,-4],e.element&&(e.element.style.display="none"),e.serializeValue=e.serializeValue??function(){return this.value})},Jk=e=>{e&&!String(e.value??"").trim()&&(e.value=crypto.randomUUID())},yx=()=>{let e=0;const t=()=>{const r=ct().canvas;r?jf(r):e++<40&&setTimeout(t,50)};t()};function _x(e){const t=[],r=new Set,o=[e];for(;o.length;){const n=o.shift();if(!(!n||r.has(n))){r.add(n);for(const i of n.inputs??[]){if(!["lora_registry","registry"].includes(i.name))continue;const a=xx(n.graph,i.link),l=a&&n.graph?.getNodeById?.(a.origin_id);if(!(!l||l.graph!==n.graph)){if(Ia(l)==="BV Named LoRA Stack"){const c=String(Rr(l,"stack_id")?.value??"").trim(),u=String(Rr(l,"name")?.value??"").trim();c&&u&&t.push({id:c,label:u,node:l})}o.push(l)}}}}return t.reverse()}function ii(e){return $k(e).map(t=>({id:String(Rr(t,"collector_id")?.value??"").trim(),label:String(t.title||"BV LoRA Stack Collector"),resources:_x(t),node:t})).filter(t=>t.id)}function vs(e,t=Ia(e)==="BV Regional Prompt"?"lora_v3_config_json":"config_json"){try{let r=Vk(Rr(e,t)?.value),o=_a(e);const n=o?.__bvLoraCollectorIdRemap?.[String(r.collector_id??"")],i=Object.assign({},..._x(o).map(a=>a.node?.__bvLoraResourceIdRemap??{}));return n&&(r={...r,collector_id:n,entries:r.entries.map(a=>a.source.kind==="external"&&i[a.source.resource_id]?{...a,source:{...a.source,resource_id:i[a.source.resource_id]}}:a)},wx(e,r,t)),r}catch{return Uk()}}function wx(e,t,r=Ia(e)==="BV Regional Prompt"?"lora_v3_config_json":"config_json"){const o=Rr(e,r);o&&(o.value=Wk(t),o.callback?.(o.value),e.setDirtyCanvas?.(!0,!0))}function Zk(e){const t=e?.graph,r=[e],o=new Set;let n=null;for(;r.length&&!n;){const i=r.shift();if(!(!i||o.has(i))){if(o.add(i),Ia(i)==="BV Regional Prompt"){try{const a=JSON.parse(String(Rr(i,"regional_json")?.value??"{}"));n=a.version===3?a.core:a}catch{}break}for(const a of i.inputs??[]){if(a.type!=="BV_REGIONAL")continue;const l=xx(t,a.link),c=l&&t?.getNodeById?.(l.origin_id);c?.graph===t&&r.push(c)}}}return n?.document_id?[{value:"global",label:"Global",target:{scope:"global"}},...(n.regions??[]).map(i=>({value:`region:${n.document_id}:${i.id}`,label:String(i.name||i.id),target:{scope:"region",document_id:String(n.document_id),region_id:String(i.id)}}))]:[{value:"global",label:"Global",target:{scope:"global"}}]}function sd(e,t){const r=_a(e);return!!r&&String(Rr(r,"collector_id")?.value??"")===String(t.collector_id??"")}function ja(e,t){const r=ii(e).find(o=>o.id===t.collector_id);return gx(e,r?.node??null),wx(e,t),t}function kx(e,t,r){const o=ii(e).find(i=>i.id===r),n=o?.resources[0]?.id??"";return ja(e,{...t,collector_id:r||null,entries:t.entries.map(i=>i.source.kind==="external"?{...i,source:{...i.source,resource_id:n}}:i)})}function Ex(e,t,r,o){return ja(e,{...t,entries:t.entries.map(n=>n.id===r&&n.source.kind==="external"?{...n,source:{...n.source,resource_id:o}}:n)})}function Tx(e,t,r){const o=ii(e).find(i=>i.id===t.collector_id)??ii(e)[0],n=o?.resources[0];return!o||!n?t:ja(e,{...t,collector_id:o.id,entries:[...t.entries,{id:crypto.randomUUID(),source:{kind:"external",resource_id:n.id},targets:[r]}]})}function Rx(e,t,r,o){return ja(e,cx(t,o,r))}function Qk(e,t,r){return ja(e,cx(t,r))}function eE(e){yx();const t=Rr(e,"collector_id");Jk(t);const r=String(t?.value??"").trim(),o=(e.graph?._nodes??[]).find(n=>n!==e&&Ia(n)==="BV LoRA Stack Collector"&&String(Rr(n,"collector_id")?.value??"").trim()===r);if(t&&r&&o){const n=crypto.randomUUID();t.value=n,e.__bvLoraCollectorIdRemap={[r]:n}}wa(t),px(e),e.__bvRuntimeResourceProvider=!0}function ms(e){yx();const t=hx(e),r=e.inputs?.[t];if(r&&(r.hidden=!0,r.__bvM0VisualHidden=!0,r.__bvM0PortHidden=!0,r.__bvM0ResourceSlot=!0),!_a(e)){const o=Gk(e),n=o&&_a(o);n&&gx(o,n)}}function tE(e){if(ms(e),wa(Rr(e,"operation")),wa(Rr(e,"config_json")),!e.widgets?.find(t=>t.name==="open_lora_editor")){const t=e.addWidget?.("button","open_lora_editor",null,()=>window.dispatchEvent(new CustomEvent(ld,{detail:{node:e}})),{serialize:!1});t&&(t.label="Open LoRA Editor",t.serialize=!1)}e.setSize?.([Math.max(e.size?.[0]??0,220),e.computeSize?.()[1]??60])}function rE(e,t){const r=t.name==="BV LoRA Stack Collector",o=t.name==="BV Regional LoRA",n=["BV Regional Native Conditioning","BV Regional Krea 2 Attention","BV Regional Anima Conditioning"].includes(t.name);if(!r&&!o&&!n)return!1;const i=e.prototype.onNodeCreated,a=e.prototype.onConfigure,l=e.prototype.onConnectionsChange,c=function(){r&&eE(this),o&&tE(this),n&&ms(this)};return e.prototype.onNodeCreated=function(){const u=i?.apply(this,arguments);return queueMicrotask(()=>c.call(this)),u},e.prototype.onConfigure=function(){const u=a?.apply(this,arguments);return queueMicrotask(()=>c.call(this)),u},e.prototype.onConnectionsChange=function(){const u=l?.apply(this,arguments);return queueMicrotask(()=>c.call(this)),u},!0}const Bo=e=>ha(ct().rootGraph??ct().graph,e),Ih=e=>e?.widgets?.find(t=>t.name==="regional_json"),al=e=>e?.widgets?.find(t=>t.name==="lora_bindings_json"),jh=(e,t)=>e&&t?e.geometry.filter(r=>Bt(r)===t):[],zo=ek,zc=(e,t)=>{const r=e.currentTarget.getBoundingClientRect();return{x:Math.max(0,Math.min(1,(e.clientX-r.left)/r.width)),y:Math.max(0,Math.min(1,(e.clientY-r.top)/r.height)),pressure:t==="stylus"&&e.pointerType==="pen"?Math.max(.01,e.pressure):1}};function Ph(e,t){const r=URL.createObjectURL(new Blob([JSON.stringify(t,null,2)],{type:"application/json"})),o=document.createElement("a");o.href=r,o.download=e,o.click(),URL.revokeObjectURL(r)}function oE(e){const t=new Map(e.map(r=>[r.id,Ot()]));return Kt(e).map(r=>{r.id=t.get(r.id),r.parent_region_id=r.parent_region_id?t.get(r.parent_region_id)??null:null,ax(r.geometry,Ot);const o=new Map;return r.geometry.forEach(n=>{const i=Bt(n);o.has(i)||o.set(i,Ot()),n.id=Ot(),n.layer_id=o.get(i)}),r})}function nE({open:e,activationToken:t=0,nodes:r,initialNode:o,backgrounds:n,loraStacks:i,onClose:a}){const[l,c]=m.useState(o),[u,d]=m.useState(null),[f,p]=m.useState(null),[g,x]=m.useState(null),[w,k]=m.useState([]),[b,h]=m.useState(null),[v,_]=m.useState(null),[y,T]=m.useState("select"),[S,z]=m.useState({size:.04,hardness:.75,opacity:1,shape:"round",pressureMode:"constant"}),[N,B]=m.useState(.5),[P,O]=m.useState(1),[E,A]=m.useState(!1),[C,R]=m.useState([]),[M,D]=m.useState([]),[W,F]=m.useState(null),[ne,X]=m.useState(null),[q,Z]=m.useState(""),[Y,Q]=m.useState(()=>Mf()),[oe,le]=m.useState(0),[Ce,Ee]=m.useState([]),[ve,It]=m.useState(()=>Qs("")),[G,ue]=m.useState(()=>vs(o)),se=hf(),$=m.useRef(null),pe=m.useRef(!1),fe=m.useRef(t),he=m.useRef(null),ot=m.useCallback(L=>Q(j=>{const V=j.artboard;return V.zoom===L.zoom&&V.panX===L.panX&&V.panY===L.panY&&V.fit===L.fit?j:{...j,artboard:L}}),[]),nt=m.useCallback(L=>Q(j=>j.openMenu===L?j:{...j,openMenu:L}),[]);m.useEffect(()=>{const L=pe.current,j=fe.current!==t;if(pe.current=e,fe.current=t,!e||!j)return;const V=o??r[0]??null,H=Bo(l),J=Bo(V);L&&H&&J!==H&&ri()==="keep"?Ee(de=>[...new Set([...de,H])].filter(Se=>Se!==J)):J&&Ee(de=>de.filter(Se=>Se!==J)),he.current=L?{mode:Y.mode,geometry:Ah(Y,{width:window.innerWidth,height:window.innerHeight})}:null,c(V)},[t,o,r,e]),m.useEffect(()=>{h(null)},[l,e]),m.useEffect(()=>{if(!(!e||!l))try{const L=dn(Ih(l)?.value);L.regions=Ch(L.regions),zo(L.regions);const j=Af(al(l)?.value,L.document_id),V=Hn(j,new Set(L.regions.map(br=>br.id))),H=al(l);H&&JSON.stringify(j)!==JSON.stringify(V)&&(H.value=JSON.stringify(V),H.callback?.(H.value),l.graph?.setDirtyCanvas?.(!0,!0));const J=Nl(L.document_id),de=L.regions.some(br=>br.id===J.selectedRegionId)?J.selectedRegionId:L.regions[0]?.id??null,Se=he.current;he.current=null,Se&&(J.mode=Se.mode,J.windows[Se.mode]=Se.geometry);const ut=L.regions.find(br=>br.id===de),$t=ut&&Mr(ut).some(br=>br.id===J.selectedLayerId)?J.selectedLayerId:null;Q(J),d(L),It(V),ue(vs(l)),p(de),x($t),k($t?[$t]:[]),_($t),T(J.tool),z(J.brush),B(J.displayOpacity),O(J.backgroundOpacity),A(J.isolate&&!!$t),R([]),D([]),Z("")}catch(L){Z(L instanceof Error?L.message:String(L))}},[l,e]),m.useEffect(()=>{u&&td(u.document_id,{...Y,selectedRegionId:f,selectedLayerId:g,displayOpacity:N,backgroundOpacity:P,isolate:E,tool:y,brush:S})},[P,S,N,u,E,g,f,y,Y]),m.useEffect(()=>{if(!e)return;const L=()=>Q(j=>({...j,windows:{workspace:fn(j.windows.workspace,{width:window.innerWidth,height:window.innerHeight},"workspace"),floating:fn(j.windows.floating,{width:window.innerWidth,height:window.innerHeight},"floating")}}));return window.addEventListener("resize",L),()=>window.removeEventListener("resize",L)},[e]);const ye=u?.regions.find(L=>L.id===f)??null,We=jh(ye,g),me=b?We.filter(L=>L.id===b):We,we=ye&&g?Mr(ye).find(L=>L.id===g)??null:null,qe=ye?Mr(ye).filter(L=>w.includes(L.id)):[],gt=qe.length>1&&qe.every(L=>!L.authoring.locked),Sr=!!we&&!we.authoring.locked,yt=L=>{x(L),k(L?[L]:[]),_(L),h(null)},yn=(L,j,V)=>{const H=u?.regions.find($t=>$t.id===L);if(!H)return;const J=L===f,de=[...Mr(H)].reverse().map($t=>$t.id),ut=wk(J?{ids:w,primary:g,anchor:v}:{ids:[],primary:null,anchor:null},j,de,V);p(L),k(ut.ids),x(ut.primary),_(ut.anchor),A(!1),h(null)},hi=W&&g&&W.every(L=>Bt(L)===g)?$.current&&"commit"in $.current&&$.current.commit==="subtract"?[...me,...W]:W:me,rr=hi.length&&u?Zs(hi,u.canvas):null,Ht=m.useCallback((L,j=!0,V=ve)=>{if(!l)return;j&&u&&(R(Se=>[...Se.slice(-99),Bc(u,ve)]),D([]));const H=Hn(V,new Set(L.regions.map(Se=>Se.id)));d(L);const J=Ih(l);J&&(J.value=JSON.stringify(L),J.callback?.(J.value)),It(H);const de=al(l);de&&(de.value=JSON.stringify(H),de.callback?.(de.value)),l.graph?.setDirtyCanvas?.(!0,!0)},[u,ve,l]),He=m.useCallback((L,j=!0)=>{if(!u)return;const V=Kt(u);L(V),Ht(V,j)},[u,Ht]),gi=m.useCallback(L=>{if(!l)return;const j=u?Hn(L,new Set(u.regions.map(H=>H.id))):L;It(j);const V=al(l);V&&(V.value=JSON.stringify(j),V.callback?.(V.value)),l.graph?.setDirtyCanvas?.(!0,!0)},[u,l]),Ba=L=>gi({...ve,global_stack_id:L}),Wx=(L,j)=>{const V={...ve.regions};j?V[L]=j:delete V[L],gi({...ve,regions:V})},Hx=L=>He(j=>{const V=j.regions.find(H=>H.id===f);V&&L(V)}),jo=(L,j)=>He(V=>{const H=V.regions.find(J=>J.id===f);H&&j(jh(H,L),H)}),gr=m.useCallback(()=>{$.current=null,F(null)},[]),za=m.useCallback(()=>{if($.current?.mode!=="draw-polygon"||!W?.length)return;const L=W.map(j=>j.type==="polygon"?{...j,points:j.points.filter((V,H,J)=>H===0||Math.hypot(V.x-J[H-1].x,V.y-J[H-1].y)>.001)}:j);if(L.some(j=>j.type!=="polygon"||j.points.length<3))return gr();He(j=>{const V=j.regions.find(H=>H.id===f);V&&V.geometry.push(...L)}),gr()},[gr,W,He,f]),nc=m.useCallback(()=>{if(!u||!C.length)return;const L=C[C.length-1];R(C.slice(0,-1)),D([Bc(u,ve),...M]),Ht(Kt(L.document),!1,Kt(L.loraBindings))},[u,M,C,ve,Ht]),ic=m.useCallback(()=>{if(!u||!M.length)return;const L=M[0];D(M.slice(1)),R([...C,Bc(u,ve)]),Ht(Kt(L.document),!1,Kt(L.loraBindings))},[u,M,C,ve,Ht]),ac=L=>{jo(L,(j,V)=>{V.geometry=V.geometry.filter(H=>Bt(H)!==L)}),w.includes(L)&&yt(null)},$x=L=>He(j=>{const V=j.regions.find(J=>J.id===f),H=V?.geometry.find(J=>J.id===L);H&&(H.enabled=H.enabled===!1)}),Yx=L=>{const j=u?.regions.find(V=>V.id===f);if(!j||!Xu(j.geometry,L)){Ir({title:"Operation cannot be removed",message:"This operation is the additive base for later subtract operations. Delete or move those operations first.",tone:"warning",duration:5e3});return}He(V=>{const H=V.regions.find(J=>J.id===f);H&&(H.geometry=H.geometry.filter(J=>J.id!==L))}),b===L&&h(null)},Vf=()=>{if(!f||!g||!gt)return;const L=g;He(j=>{const V=j.regions.find(H=>H.id===f);V&&kk(V,w,L)}),yt(L)},Xx=async()=>{if(!(!u||!f||!g||!we||!Sr))try{const L=await Mk(we.geometries,u.canvas,Ot);if(L.length<2){Ir({title:"Layer was not split",message:"The selected layer contains fewer than two disconnected visible areas.",tone:"info",duration:4500});return}He(V=>{const H=V.regions.find(de=>de.id===f);if(!H)return;const J=H.geometry.findIndex(de=>Bt(de)===g);H.geometry=H.geometry.filter(de=>Bt(de)!==g),H.geometry.splice(Math.max(0,J),0,...L)});const j=L.map(V=>Bt(V));k(j),x(j[0]),_(j[0])}catch(L){Ir({title:"Split failed",message:String(L),tone:"danger",duration:6e3})}};m.useEffect(()=>{if(!e)return;const L=j=>{if(j.key==="Escape"&&$.current){j.preventDefault(),j.stopImmediatePropagation(),gr();return}if(j.key==="Enter"&&$.current?.mode==="draw-polygon"){j.preventDefault(),j.stopImmediatePropagation(),za();return}if((j.ctrlKey||j.metaKey)&&j.key.toLowerCase()==="e"&>){j.preventDefault(),j.stopImmediatePropagation(),Vf();return}if((j.key==="Delete"||j.key==="Backspace")&&g&&!(j.target instanceof HTMLInputElement||j.target instanceof HTMLTextAreaElement)){j.preventDefault(),j.stopImmediatePropagation(),ac(g);return}!(j.ctrlKey||j.metaKey)||j.key.toLowerCase()!=="z"||(j.preventDefault(),j.stopImmediatePropagation(),j.shiftKey?ic():nc())};return window.addEventListener("keydown",L,!0),()=>window.removeEventListener("keydown",L,!0)},[gr,gt,ac,za,e,ic,g,w,nc]);const Gx=L=>{if(!u||!ye||ye.authoring.locked)return;const j=zc(L,S.pressureMode),V=L.target.closest?.("[data-handle]")?.getAttribute("data-handle");if(y==="select"){if(L.currentTarget.setPointerCapture(L.pointerId),F(null),V&&we&&!we.authoring.locked){$.current={mode:"resize",start:j,original:Kt(me),handle:V};return}const or=[...Mr(ye)].reverse().find(Yt=>Yt.enabled&&Yt.authoring.visible&&Yt.geometries.filter(Lr=>Lr.operation==="add").some(Lr=>vk(Lr,j,u.canvas)));yt(or?.id??null),or&&!or.authoring.locked&&($.current={mode:"move",start:j,startScreen:{x:L.clientX,y:L.clientY},original:Kt(or.geometries),started:!1});return}const H=y.endsWith("subtract");if(H&&(!g||we?.authoring.locked))return;if(y.startsWith("polygon")&&$.current?.mode==="draw-polygon"){const or=W?.find(Yt=>Yt.type==="polygon")?.points.length??0;if(Z1(or,$.current.startScreen,{x:L.clientX,y:L.clientY})){za();return}F(Yt=>Yt?.map(Lr=>Lr.type==="polygon"?{...Lr,points:[...Lr.points,j]}:Lr)??null);return}const J=Ot(),de=H?null:q1(we),Se=H?g:de??J,ut=y.startsWith("rect")?"Rectangle":y.startsWith("ellipse")?"Ellipse":y.startsWith("polygon")?"Polygon":"Brush",$t=H||de?we?.authoring:{name:`${ut} ${Mr(ye).length+1}`,visible:!0,locked:!1},br=H?[...new Set(me.map(Ma))]:[void 0];if(y.startsWith("rect")||y.startsWith("ellipse")){L.currentTarget.setPointerCapture(L.pointerId);const or=y.startsWith("rect")?"rect":"ellipse";F(br.map((Yt,Lr)=>({id:Lr?Ot():J,layer_id:Se,mask_group_id:Yt,type:or,operation:H?"subtract":"add",enabled:!0,authoring:$t,x:j.x,y:j.y,width:.001,height:.001}))),$.current={mode:"draw-box",start:j,commit:H?"subtract":"add"},H||yt(Se)}else y.startsWith("polygon")?(F(br.map((or,Yt)=>({id:Yt?Ot():J,layer_id:Se,mask_group_id:or,type:"polygon",operation:H?"subtract":"add",enabled:!0,authoring:$t,points:[j]}))),$.current={mode:"draw-polygon",start:j,startScreen:{x:L.clientX,y:L.clientY},commit:H?"subtract":"add"},H||yt(Se)):(L.currentTarget.setPointerCapture(L.pointerId),F(br.map((or,Yt)=>({id:Yt?Ot():J,layer_id:Se,mask_group_id:or,type:"brush_stroke",operation:y==="brush-add"?"add":"subtract",enabled:!0,authoring:$t,size:S.size,hardness:S.hardness,opacity:S.opacity,shape:S.shape,pressure_mode:S.pressureMode,points:[j]}))),$.current={mode:"draw-brush",start:j,commit:y==="brush-add"?"add":"subtract"},y==="brush-add"&&yt(Se))},Kx=L=>{if(!u)return;const j=zc(L,S.pressureMode);X(j);const V=$.current;if(V)if(V.mode==="draw-box"&&(W?.[0]?.type==="rect"||W?.[0]?.type==="ellipse"))F(W.map(H=>H.type==="rect"||H.type==="ellipse"?{...H,x:Math.min(V.start.x,j.x),y:Math.min(V.start.y,j.y),width:Math.max(.001,Math.abs(j.x-V.start.x)),height:Math.max(.001,Math.abs(j.y-V.start.y))}:H));else if(V.mode==="draw-brush"&&W?.[0]?.type==="brush_stroke")F(W.map(H=>H.type==="brush_stroke"?{...H,points:[...H.points,j]}:H));else if(V.mode==="move"){if(!V.started&&!J1(V.startScreen,{x:L.clientX,y:L.clientY}))return;V.started=!0,F(Oh(V.original,j.x-V.start.x,j.y-V.start.y,u.canvas))}else V.mode==="resize"&&F(mk(V.original,V.handle,j.x-V.start.x,j.y-V.start.y,L.shiftKey,u.canvas))},qx=L=>{if(!u||!$.current||!W)return gr();const j=$.current,V=zc(L,S.pressureMode);if(j.mode==="draw-polygon")return;let H=tk(j.mode)?W.map(J=>J.type==="brush_stroke"?{...J,points:yk([...J.points,V])}:J):W;if(j.mode==="draw-box"&&(H[0].type==="rect"||H[0].type==="ellipse")&&(H[0].width<=.002||H[0].height<=.002))return gr();He(J=>{const de=J.regions.find(Se=>Se.id===f);if(de)if(j.mode.startsWith("draw"))de.geometry.push(...H);else{const Se=new Map(H.map(ut=>[ut.id,ut]));de.geometry=de.geometry.map(ut=>Se.get(ut.id)??ut)}}),gr()},Jx=L=>{$.current?.mode==="draw-polygon"&&(L.preventDefault(),za())},Zx=(L,j)=>He(V=>{const H=V.regions.findIndex(de=>de.id===L),J=H+j;J<0||J>=V.regions.length||([V.regions[H],V.regions[J]]=[V.regions[J],V.regions[H]],zo(V.regions))}),Qx=(L,j)=>jo(L,(V,H)=>{const J=Mr(H),de=J.findIndex(ut=>ut.id===L),Se=de+j;Se<0||Se>=J.length||([J[de],J[Se]]=[J[Se],J[de]],H.geometry=J.flatMap(ut=>ut.geometries))}),ey=L=>{let j=!1,V=null;if(He(J=>{j=Bk(J,L,()=>V=Ot()),zo(J.regions)}),!j)return;if(p(L.target.regionId),L.source.kind==="region"){yt(null);return}const H=L.source.kind==="layer"?L.source.layerId:L.target.kind==="region"?V:L.target.layerId;x(H),k(H?[H]:[]),_(H),h(L.source.kind==="geometry"?L.source.geometryId:null),A(!1)},ty=(L,j)=>jo(L,V=>{if(V.length)if(j==="enabled"){const H=!V.some(J=>J.enabled!==!1);V.forEach(J=>{J.enabled=H})}else{const H=!sr(V[0])[j];V.forEach(J=>{J.authoring={...sr(J),[j]:H}})}}),ry=L=>jo(L,(j,V)=>{const H=Ot(),J=Oh(Kt(j),.02,.02,u.canvas);ax(J,Ot),J.forEach((de,Se)=>{de.id=Ot(),de.layer_id=H,de.authoring={...sr(de),name:`${sr(de).name} Copy`,visible:!0,locked:!1},Se&&(de.authoring=J[0].authoring)}),V.geometry.push(...J),yt(H)}),oy=L=>{const j=u?.regions.find(V=>V.id===L);j&&se.confirm({title:`Delete region “${j.name}”?`,message:`This removes ${Mr(j).length} layer(s) and clears child-region parent references.`,confirmLabel:"Delete region",danger:!0,action:()=>{He(V=>{V.regions=V.regions.filter(H=>H.id!==L),V.regions.forEach(H=>{H.parent_region_id===L&&(H.parent_region_id=null)}),zo(V.regions)}),p(u?.regions.find(V=>V.id!==L)?.id??null),yt(null)}})},ny=async L=>{try{if(!u)return;const j=C0(dn(await L.text()),u.document_id);j.regions=Ch(j.regions),zo(j.regions),Ht(j),p(j.regions[0]?.id??null),yt(null)}catch(j){Ir({title:"Document import failed",message:String(j),tone:"danger",duration:6e3})}},iy=async L=>{try{const j=JSON.parse(await L.text());if(j?.schema!=="bv.regions"||![1,2].includes(j?.version)||!Array.isArray(j.regions))throw new Error("Not a BV Regions v1/v2 export");const V=j.version===1?j.regions.map(H=>({...H,usage:"generation"})):j.regions;He(H=>{H.regions.push(...oE(V)),zo(H.regions)})}catch(j){Ir({title:"Region import failed",message:String(j),tone:"danger",duration:6e3})}},ay=Aa(l);if(!e)return null;const Wf=Ah(Y,{width:window.innerWidth,height:window.innerHeight}),Hf=(L,j,V=!0)=>{const H=Bo(l);to("regional",L),L!==H&&(Ee(J=>j?J.filter(de=>de!==L):[...new Set([...J,H])].filter(de=>de&&de!==L)),V&&(he.current={mode:Y.mode,geometry:Wf}),c(r.find(J=>Bo(J)===L)??null))},ly=u?Dk(ve,i,new Set(u.regions.map(L=>L.id))):[],$f=G.entries.length&&(!l||!sd(l,G))?["V3 LoRA collector link is unresolved"]:ly,sy=G.entries.length?`${G.entries.length} V3 LoRA assignment${G.entries.length===1?"":"s"}`:u?Ik(ve,i,Object.fromEntries(u.regions.map(L=>[L.id,L.name]))):"",cy=l?ii(l).filter(L=>L.resources.length>0):[],uy=l?sd(l,G):!1,Yf={collectors:cy,config:G,resolved:uy,onCollector:L=>l&&ue(kx(l,G,L)),onResource:(L,j)=>l&&ue(Ex(l,G,L,j)),onAdd:L=>l&&ue(Tx(l,G,L)),onRemove:(L,j)=>l&&ue(Rx(l,G,L,j)),onClear:L=>l&&ue(Qk(l,G,L))},lc=L=>u?s.jsx(gk,{mode:L,region:ye,layer:we,bounds:rr,canvas:u.canvas,automaticRegionColor:ye?jv(u.regions.indexOf(ye)):null,globalPrompts:u.prompts.global,backgroundPrompts:u.prompts.background,negativeMode:u.negative_mode,promptSections:Y.promptSections,loraBindings:ve,loraStacks:i,loraV3GlobalEditor:s.jsx(Dh,{...Yf,target:{scope:"global"}}),loraV3RegionEditor:ye?s.jsx(Dh,{...Yf,target:{scope:"region",document_id:u.document_id,region_id:ye.id}}):null,onGlobalLoraStack:Ba,onRegionLoraStack:Wx,onPromptSection:(j,V)=>Q(H=>({...H,promptSections:{...H.promptSections,[j]:V}})),onNegativeMode:j=>He(V=>{V.negative_mode=j}),onGlobalPrompts:j=>He(V=>{V.prompts.global=j}),onBackgroundPrompts:j=>He(V=>{V.prompts.background=j}),onRegion:Hx,onLayerBounds:j=>g&&jo(g,(V,H)=>{const J=new Map(ix(V,j,u.canvas).map(de=>[de.id,de]));H.geometry=H.geometry.map(de=>J.get(de.id)??de)}),onBrushSetting:(j,V)=>g&&jo(g,H=>H.forEach(J=>{J.type==="brush_stroke"&&Object.assign(J,{[j]:V})}))}):null;return s.jsxs(s.Fragment,{children:[Ce.map(L=>{const j=r.find(V=>Bo(V)===L);return j?s.jsx(Js,{title:`Regional Editor · ${j.title||"BV Regional Prompt"} · #${j.id}`,onRestore:()=>Hf(L,!1,!1),onClose:()=>Ee(V=>V.filter(H=>H!==L))},L):null}),s.jsx(xn,{open:e,activationToken:t,title:"BV Regional Editor",menuVisible:ay,onMenuVisible:L=>fi(l,L),context:s.jsx(Da,{label:"Regional prompt document",value:Bo(l),onNavigate:Hf,options:r.filter(L=>mn(L)).map(L=>({value:Bo(L),label:`${L.title||"BV Regional Prompt"} · #${L.id}`}))}),center:s.jsx(dk,{openMenu:Y.openMenu,onOpenMenu:nt,displayOpacity:N,backgroundOpacity:P,isolate:E,binaryMaskPreview:Y.binaryMaskPreview,hasSelection:!!g,onDisplayOpacity:B,onBackgroundOpacity:O,onToggleIsolate:()=>A(L=>!L),onToggleBinaryMaskPreview:()=>{gr(),Q(L=>({...L,binaryMaskPreview:!L.binaryMaskPreview}))},onExportDocument:()=>u&&Ph(`${u.title||"bv-regional"}.json`,u),onExportRegions:()=>u&&Ph(`${u.title||"bv-regions"}.regions.json`,{schema:"bv.regions",version:2,canvas:u.canvas,regions:u.regions}),onImportDocument:ny,onImportRegions:iy,onUndo:nc,onRedo:ic,canUndo:!!C.length,canRedo:!!M.length,canMergeLayers:gt,onMergeLayers:Vf,canvas:u?.canvas??{width:1024,height:1024},onCanvas:L=>He(j=>{j.canvas=L})}),mode:Y.mode,initialGeometry:Wf,minSize:{width:780,height:520},className:"bv-regional-shell",bodyClassName:"bv-regional-window-body",onModeChange:L=>Q(j=>({...j,mode:L})),onGeometry:L=>Q(j=>({...j,windows:{...j.windows,floating:L}})),onClose:a,status:u?s.jsxs(s.Fragment,{children:[s.jsx("span",{children:$f[0]?`⚠ ${$f[0]}`:`✓ ${sy}`}),s.jsxs("span",{children:[u.regions.length," regions · layout adjusted for this session"]})]}):null,actions:u?s.jsx(Am,{storageId:`regional-editor:${u.document_id}`,editorType:"regional",onClick:()=>le(L=>L+1)}):null,children:q?s.jsx("div",{className:"bv-regional-error",children:q}):u&&s.jsx(s.Fragment,{children:s.jsx("main",{className:"bv-regional-dock-host",children:s.jsx(Lm,{storageId:`regional-editor:${u.document_id}`,resetSignal:oe,defaultModel:{global:{tabEnableClose:!1,tabEnablePopout:!1,tabEnablePopoutIcon:!1,tabEnablePopoutFloatIcon:!0,tabSetMinWidth:180,tabSetMinHeight:120},borders:[],layout:{type:"row",children:[{type:"row",weight:22,minWidth:220,children:[{type:"tabset",weight:55,children:[{type:"tab",id:"regions",name:"Regions",component:"regions",enablePopoutFloatIcon:!0}]},{type:"tabset",weight:45,children:[{type:"tab",id:"selection",name:"Selection",component:"selection",enablePopoutFloatIcon:!0}]}]},{type:"tabset",weight:54,minWidth:320,children:[{type:"tab",id:"canvas",name:"Canvas",component:"canvas",enablePopoutFloatIcon:!0}]},{type:"row",weight:24,minWidth:260,children:[{type:"tabset",weight:65,children:[{type:"tab",id:"global",name:"Global",component:"global",enablePopoutFloatIcon:!0}]},{type:"tabset",weight:35,children:[{type:"tab",id:"region",name:"Region",component:"region",enablePopoutFloatIcon:!0}]}]}]}},panels:[{id:"regions",title:"Regions",weight:22,minWidth:220,content:s.jsx(O0,{regions:u.regions,selectedRegionId:f,selectedLayerId:g,selectedLayerIds:w,selectedGeometryId:b,onSelectRegion:L=>{p(L),yt(null),A(!1)},onSelectLayer:yn,onSelectGeometry:(L,j,V)=>{p(L),x(j),k([j]),_(j),h(V),A(!1)},onToggleGeometry:$x,onDeleteGeometry:Yx,onAddRegion:()=>He(L=>{const j=L0(L.regions.length);L.regions.unshift(j),zo(L.regions),p(j.id),yt(null)}),onRenameRegion:(L,j)=>He(V=>{V.regions.find(H=>H.id===L).name=j}),onRenameLayer:(L,j)=>jo(L,V=>V.forEach(H=>{H.authoring={...sr(H),name:j}})),onToggleRegion:(L,j)=>He(V=>{const H=V.regions.find(J=>J.id===L);j==="enabled"?H.enabled=!H.enabled:j==="visible"?H.authoring.visible=!H.authoring.visible:H.authoring.locked=!H.authoring.locked}),onToggleLayer:ty,onMoveRegion:Zx,onMoveLayer:Qx,onTreeMove:ey,onDeleteRegion:oy,onDeleteLayer:ac,onDuplicateLayer:ry,canSplitDisconnectedAreas:Sr,onSplitDisconnectedAreas:Xx})},{id:"canvas",title:"Canvas",weight:54,minWidth:320,content:s.jsx(ak,{document:u,background:n[u.document_id],selectedRegionId:f,selectedLayerId:g,draft:W,selectionBounds:rr,cursor:ne,tool:y,brush:S,canSubtract:!!we&&!we.authoring.locked,displayOpacity:N,backgroundOpacity:P,isolate:E,binaryMaskPreview:Y.binaryMaskPreview,initialView:Y.artboard,onView:ot,onTool:L=>{T(L),gr()},onBrush:z,onPointerDown:Gx,onPointerMove:Kx,onPointerUp:qx,onPointerCancel:gr,onPointerLeave:()=>{$.current||X(null)},onDoubleClick:Jx},u.document_id)},{id:"global",title:"Global",weight:12,minWidth:240,content:lc("document")},{id:"selection",title:"Selection",weight:12,minWidth:240,content:lc("selection")},{id:"region",title:"Region",weight:12,minWidth:240,content:lc("region")}]})})})}),se.dialog]})}const Fo=e=>ha(ct().rootGraph??ct().graph,e),Bh=e=>e?.widgets?.find(t=>t.name==="regional_json"),Fc=e=>e?.widgets?.find(t=>t.name==="lora_bindings_json"),iE=(e,t)=>t==="global"||t==="background"||e.regions.some(r=>r.id===t),aE=(e,t)=>t==="global"?e.prompts.global:t==="background"?e.prompts.background:e.regions.find(r=>r.id===t)?.prompts??e.prompts.global;function lE({open:e,activationToken:t=0,nodes:r,initialNode:o,loraStacks:n,onClose:i,onOpenEditor:a}){const[l,c]=m.useState(o),[u,d]=m.useState(null),[f,p]=m.useState(()=>Qs("")),[g,x]=m.useState("global"),[w,k]=m.useState(()=>hs({x:window.innerWidth-544,y:84,width:520,height:640},{width:window.innerWidth,height:window.innerHeight})),[b,h]=m.useState(""),[v,_]=m.useState([]),y=m.useRef(null),T=m.useRef(!1),S=m.useRef(t);m.useEffect(()=>{const R=T.current,M=S.current!==t;if(T.current=e,S.current=t,!e||!M)return;const D=o??r[0]??null,W=Fo(l),F=Fo(D);R&&W&&F!==W&&ri()==="keep"?_(ne=>[...new Set([...ne,W])].filter(X=>X!==F)):F&&_(ne=>ne.filter(X=>X!==F)),y.current=R?w:null,c(D)},[t,o,r,e]),m.useEffect(()=>{if(l)try{const R=dn(Bh(l)?.value),M=Af(Fc(l)?.value,R.document_id),D=Hn(M,new Set(R.regions.map(X=>X.id))),W=Fc(l);W&&JSON.stringify(M)!==JSON.stringify(D)&&(W.value=JSON.stringify(D),W.callback?.(W.value),l.graph?.setDirtyCanvas?.(!0,!0));const F=Nl(R.document_id),ne=iE(R,F.quickPromptTarget)?F.quickPromptTarget:"global";d(R),p(D),x(ne),k(y.current??F.quickPromptWindow),y.current=null,h("")}catch(R){d(null),h(R instanceof Error?R.message:String(R))}},[l,e]);const z=m.useMemo(()=>u?aE(u,g):null,[u,g]),N=R=>{if(x(R),!u)return;const M=Nl(u.document_id);td(u.document_id,{...M,quickPromptTarget:R})},B=R=>{if(!u)return;const M=Nl(u.document_id);td(u.document_id,{...M,quickPromptWindow:R})},P=R=>{if(!u||!l)return;const M=Kt(u);if(g==="global")M.prompts.global=R;else if(g==="background")M.prompts.background=R;else{const W=M.regions.find(F=>F.id===g);if(!W)return;W.prompts=R}d(M);const D=Bh(l);D&&(D.value=JSON.stringify(M),D.callback?.(D.value)),l.graph?.setDirtyCanvas?.(!0,!0)},O=R=>{if(!u||!l)return;let M;if(g==="global"||g==="background")M={...f,global_stack_id:R};else{const W={...f.regions};R?W[g]=R:delete W[g],M={...f,regions:W}}p(M);const D=Fc(l);D&&(D.value=JSON.stringify(M),D.callback?.(D.value)),l.graph?.setDirtyCanvas?.(!0,!0)},E=g==="global"||g==="background"?f.global_stack_id??"":f.regions[g]??"",A=(R,M,D=!0)=>{const W=Fo(l);to("quick",R),R!==W&&(_(F=>M?F.filter(ne=>ne!==R):[...new Set([...F,W])].filter(ne=>ne&&ne!==R)),y.current=D?w:null,c(r.find(F=>Fo(F)===R)??null))},C=Aa(l);return s.jsxs(s.Fragment,{children:[v.map(R=>{const M=r.find(D=>Fo(D)===R);return M?s.jsx(Js,{title:`Quick Edit · ${M.title||"BV Regional Prompt"} · #${M.id}`,onRestore:()=>A(R,!1,!1),onClose:()=>_(D=>D.filter(W=>W!==R))},R):null}),s.jsx(xn,{open:e,activationToken:t,title:"Regional Quick Edit",menuVisible:C,onMenuVisible:R=>fi(l,R),context:s.jsx(Da,{label:"Regional Prompt Node",value:Fo(l),options:r.filter(R=>mn(R)).map(R=>({value:Fo(R),label:`${R.title||"BV Regional Prompt"} · #${R.id}`})),onNavigate:A}),allowWorkspace:!1,initialGeometry:w,minSize:{width:360,height:320},className:"bv-quick-prompt-window bv-density-compact",onClose:i,onGeometry:R=>{const M=hs(R,{width:window.innerWidth,height:window.innerHeight});k(M),B(M)},status:s.jsx(Ev,{tone:"success",dot:!0,children:"Autosaved"}),actions:s.jsx(ie,{intent:"primary",disabled:!l||!u,onClick:()=>l&&a(l),children:"Open Full Editor"}),children:s.jsx("div",{className:"bv-quick-prompt-body",children:b?s.jsx(zr,{tone:"danger",title:"Prompt document unavailable",children:b}):u&&z&&s.jsxs(s.Fragment,{children:[s.jsx(tt,{label:"Prompt Target",value:g,onValue:N,options:[{value:"global",label:"Global"},{value:"background",label:"Background"},...u.regions.map(R=>({value:R.id,label:R.name}))]}),s.jsx(tt,{label:g==="global"||g==="background"?"Global LoRA Stack":"Additional LoRA Stack",help:g==="global"||g==="background"?"Applied globally and inherited by every region.":"Added to the global stack for this region.",value:E,onValue:R=>O(R||null),options:[{value:"",label:"None"},...n.map(R=>({value:R.id,label:R.name}))]}),s.jsxs("div",{className:"bv-prompt-editor-fields",children:[s.jsx(Tr,{label:"Positive",children:s.jsx(ps,{autoFocus:!0,value:z.positive_source,onValue:R=>P({...z,positive_source:R}),completionContext:{scope:g==="global"||g==="background"?g:"region",polarity:"positive"}})}),s.jsx(Tr,{label:"Negative",children:s.jsx(ps,{value:z.negative_source,onValue:R=>P({...z,negative_source:R}),completionContext:{scope:g==="global"||g==="background"?g:"region",polarity:"negative"}})})]})]})})})]})}function Sx(e,t){const r=t?e.filter(n=>n.enabled!==!1&&(n.usage===t||n.usage==="both"||!n.usage&&t==="generation")):e,o=new Map;for(const n of r)o.set(n.name,(o.get(n.name)??0)+1);return r.map(n=>({...n,label:o.get(n.name)===1?n.name:`${n.name} · ${n.id.slice(0,8)}`}))}function sE(e){const t=new Map;return e.forEach(r=>t.set(r.title,(t.get(r.title)??0)+1)),e.map(r=>({...r,label:t.get(r.title)>1?`${r.title} · #${r.nodeId}`:`${r.title} · #${r.nodeId}`}))}function cE(e,t,r){const o=typeof e=="string"?e:"";return t.some(n=>n.documentId===o)?o:r?t[0]?.documentId??"":""}function uE(e,t,r){Jm(r);const o=document.createElement("div");o.className="bv-ui bv-settings-datasets";const n=ui(o),i=Zm;return n.render(m.createElement(i,{onSelectionChange:a=>t(JSON.stringify(a))})),o}const mo=new Map;let Ri=null;function dE(e){return e.disabled||e.readOnly||e.closest("#bv-root")||e.dataset.bvAutocomplete==="off"||e.closest('[data-bv-autocomplete="off"]')?!1:e.matches("textarea.comfy-multiline-input")||!!e.closest("[data-node-id]")}function zh(e){if(mo.has(e)||!dE(e))return;let t=[],r=0,o=null,n=null,i=null,a=null,l=null,c=210;const u=()=>{n?.abort(),n=null,t=[],o=null,l?.unmount(),l=null,a?.remove(),a=null},d=()=>{if(!a)return;const h=fs(e,ed(),c);f(h)},f=(h=fs(e,ed(),c))=>{a||(a=document.createElement("div"),a.className="bv-ui bv-ui-portal",document.body.append(a),l=ui(a)),l.render(m.createElement(ox,{suggestions:t,selected:r,position:h,onAccept:g,onHeight:v=>{Math.abs(v-c)<1||(c=v,d())}}))},p=()=>f(),g=(h=r)=>{const v=t[h];if(!o||!v)return;const _=ex(e.value,o,v);e.value=_.text,e.dispatchEvent(new InputEvent("input",{bubbles:!0,inputType:"insertText",data:v.insertText})),e.dispatchEvent(new Event("change",{bubbles:!0})),u(),requestAnimationFrame(()=>{e.focus(),e.setSelectionRange(_.caret,_.caret)})},x=()=>{if(!Of()||e.selectionStart!==e.selectionEnd||(i!=null&&window.clearTimeout(i),n?.abort(),o=Qm(e.value,e.selectionStart??e.value.length,{scope:"generic",polarity:"positive"}),!o))return u();const h=o;n=new AbortController;const v=n;i=window.setTimeout(async()=>{const _=await tx(h,[rx],v.signal);v.signal.aborted||document.activeElement!==e||(t=_,r=0,_.length?p():u())},120)},w=h=>{t.length&&(h.key==="ArrowDown"||h.key==="ArrowUp"?(h.preventDefault(),h.stopPropagation(),h.stopImmediatePropagation(),r=(r+(h.key==="ArrowDown"?1:-1)+t.length)%t.length,p()):h.key==="Enter"||h.key==="Tab"?(h.preventDefault(),h.stopPropagation(),h.stopImmediatePropagation(),g()):h.key==="Escape"&&(h.preventDefault(),h.stopPropagation(),h.stopImmediatePropagation(),u()))},k=()=>window.setTimeout(()=>{a?.contains(document.activeElement)||u()},120),b=()=>{document.activeElement===e&&x()};e.addEventListener("input",x),e.addEventListener("select",x),document.addEventListener("selectionchange",b),e.addEventListener("keydown",w,!0),e.addEventListener("blur",k),window.addEventListener("resize",d),window.addEventListener("scroll",d,!0),mo.set(e,{close:u,destroy:()=>{u(),e.removeEventListener("input",x),e.removeEventListener("select",x),document.removeEventListener("selectionchange",b),e.removeEventListener("keydown",w,!0),e.removeEventListener("blur",k),window.removeEventListener("resize",d),window.removeEventListener("scroll",d,!0)}})}function Fh(e){e instanceof HTMLTextAreaElement&&zh(e),e.querySelectorAll?.("textarea").forEach(t=>zh(t))}function fE(e){(e instanceof HTMLTextAreaElement?[e]:[...e.querySelectorAll?.("textarea")??[]]).forEach(r=>{mo.get(r)?.destroy(),mo.delete(r)})}function pE(){if(Ri)return Ri;Fh(document);const e=new MutationObserver(o=>o.forEach(n=>{n.addedNodes.forEach(i=>{i instanceof Element&&Fh(i)}),n.removedNodes.forEach(i=>{i instanceof Element&&fE(i)})}));e.observe(document.body,{childList:!0,subtree:!0});const t=()=>{Of()||mo.forEach(o=>o.close())},r=()=>mo.forEach(o=>o.close());return window.addEventListener(xa,t),window.addEventListener(ya,r),Ri=()=>{e.disconnect(),window.removeEventListener(xa,t),window.removeEventListener(ya,r),mo.forEach(o=>o.destroy()),mo.clear(),Ri=null},Ri}function Uh(e){return e?.extensionManager?.workflow?.activeWorkflow??e?.workflowManager?.activeWorkflow??e?.graph??null}function hE(e,t,r,o=(i,a)=>globalThis.setInterval(i,a),n=i=>globalThis.clearInterval(i)){const i=Uh(e);let a=!1;const l=()=>{a||Uh(e)===i||(a=!0,r())};t.addEventListener("graphChanged",l);const c=o(l,250);return()=>{t.removeEventListener("graphChanged",l),n(c)}}const Lx=["region","global_influence","background_influence","primary_region_influence","context_regions_json"],gE=e=>Lx.map(t=>e?.find(r=>r.name===t)?.value),bE=e=>Array.isArray(e)&&e.length===Lx.length+1&&e[3]==null&&typeof e[4]=="number"&&typeof e[5]=="string"?[...e.slice(0,3),...e.slice(4)]:e,Wr=(e,t,r,o)=>{const n=Number(e);return Number.isFinite(n)?Math.max(r,Math.min(o,n)):t},Cx=()=>({global_influence:1,background_influence:.35,primary_region_influence:1,context_region_influence:1}),Nx=()=>({roi_padding:.15,threshold:.5,dilation:0,crop_factor:1.5,drop_size:10}),Bf=e=>e.filter(t=>t.enabled!==!1&&(t.usage==="detailer"||t.usage==="both")).sort((t,r)=>(t.priority??0)-(r.priority??0)),cd=e=>({schema:"bv.detailer_plan",version:1,jobs:Bf(e).map(t=>({region_ids:[t.id],primary_region_id:t.id,mask_composition:"union",prompt_composition:"context",conditioning:Cx(),detector:Nx()}))}),Ol=(e,t)=>{const r=new Set(Bf(t).map(i=>i.id));let o;try{o=String(e??"").trim()?JSON.parse(String(e)):cd(t)}catch{o=cd(t)}return{schema:"bv.detailer_plan",version:1,jobs:Array.isArray(o?.jobs)?o.jobs.flatMap(i=>{const a=Array.isArray(i?.region_ids)?[...new Set(i.region_ids.map(String).filter(u=>r.has(u)))]:[];if(!a.length)return[];const l=i.conditioning??{},c=i.detector??{};return[{region_ids:a,primary_region_id:a.includes(String(i.primary_region_id))?String(i.primary_region_id):a[0],mask_composition:["union","intersection","subtract"].includes(i.mask_composition)?i.mask_composition:"union",prompt_composition:i.prompt_composition==="primary"?"primary":"context",...String(i.detector_id??"").trim()?{detector_id:String(i.detector_id).trim()}:{},conditioning:{global_influence:Wr(l.global_influence,1,0,2),background_influence:Wr(l.background_influence,.35,0,2),primary_region_influence:Wr(l.primary_region_influence,1,0,2),context_region_influence:Wr(l.context_region_influence,1,0,2)},detector:{roi_padding:Wr(c.roi_padding,.15,0,2),threshold:Wr(c.threshold,.5,0,1),dilation:Math.round(Wr(c.dilation,0,-512,512)),crop_factor:Wr(c.crop_factor,1.5,1,20),drop_size:Math.round(Wr(c.drop_size,10,1,8192)),...String(c.query??"").trim()?{query:String(c.query).trim()}:{},...Array.isArray(c.labels)?{labels:c.labels.map(String).map(u=>u.trim()).filter(Boolean)}:{}}}]}):[]}},Uc=e=>JSON.stringify(e),vE=e=>structuredClone(e);function mE({regions:e,detectorIds:t,stored:r,save:o,close:n,nodeId:i="",nodes:a=[],onNavigate:l=()=>{},currentNode:c}){const u=Bf(e),d=m.useMemo(()=>Ol(r,e),[e,r]),f=Ys(d),p=f.value,[g,x]=m.useState(()=>Uc(d));Xs(f);const w=Uc(p)!==g,[k,b]=m.useState(null),h=()=>{const E=Uc(p);o(E),x(E),f.clear()},v=E=>w?b(()=>E):E(),_=()=>v(n),y=Aa(c),T=m.useMemo(()=>E=>s.jsx(xn,{...E,title:`${E.title} · #${i}`,shortTitle:"Detailer Plan",menuVisible:y,onMenuVisible:A=>fi(c,A),onClose:_,context:s.jsx(Da,{label:"Detailer Plan Node",value:i,options:a.map(A=>({value:A.id,label:A.label})),onNavigate:(A,C)=>C?v(()=>l(A,!0)):l(A,!1)})}),[c,w,y,i,a,l]),[S,z]=m.useState([]),N=E=>f.commit(A=>{const C=vE(A);return E(C),C}),B=()=>N(E=>{const A=u[0];A&&E.jobs.push({region_ids:[A.id],primary_region_id:A.id,mask_composition:"union",prompt_composition:"context",conditioning:Cx(),detector:Nx()})}),P=E=>[{value:"",label:"No detector · use composed region mask"},...[...new Set([...E&&!t.includes(E)?[E]:[],...t])].map(A=>({value:A,label:t.includes(A)?A:`Missing · ${A}`}))],O=p.jobs.map((E,A)=>({id:`job-${A}`,title:`Job ${A+1}`,description:E.region_ids.map(C=>u.find(R=>R.id===C)?.name??C).join(" + ")||"No region",summary:s.jsxs("div",{className:"bv-editor-item-compact-summary",children:[s.jsxs("span",{children:[E.region_ids.length," region",E.region_ids.length===1?"":"s"]}),s.jsx("span",{children:E.detector_id||"Composed mask"}),s.jsx("span",{children:E.region_ids.length?"Ready":"Needs region"})]}),content:s.jsxs("div",{className:"bv-editor-item-details",children:[s.jsxs("div",{className:"bv-editor-item-summary",children:[s.jsx(T0,{label:"Regions",value:E.region_ids,minSelected:1,options:u.map(C=>({value:C.id,label:C.name})),onValue:C=>N(R=>{const M=R.jobs[A];M.region_ids=C,C.includes(M.primary_region_id)||(M.primary_region_id=C[0]??"")})}),s.jsxs(Ko,{children:[s.jsx(tt,{label:"Detector assignment",value:E.detector_id??"",options:P(E.detector_id),onValue:C=>N(R=>{R.jobs[A].detector_id=C||void 0})}),E.region_ids.length>1&&s.jsx(tt,{label:"Primary region",value:E.primary_region_id,options:E.region_ids.map(C=>({value:C,label:u.find(R=>R.id===C)?.name??C})),onValue:C=>N(R=>{R.jobs[A].primary_region_id=C})})]})]}),s.jsx(ns,{value:S,onValue:z,items:[{id:`composition-${A}`,title:"Mask and prompt composition",content:s.jsxs(Ko,{children:[s.jsx(tt,{label:"Mask composition",value:E.mask_composition,options:[{value:"union",label:"Union"},{value:"intersection",label:"Intersection"},{value:"subtract",label:"Subtract in listed order"}],onValue:C=>N(R=>{R.jobs[A].mask_composition=C})}),s.jsx(tt,{label:"Prompt composition",value:E.prompt_composition,options:[{value:"context",label:"Primary and context regions"},{value:"primary",label:"Primary region only"}],onValue:C=>N(R=>{R.jobs[A].prompt_composition=C})})]})},{id:`conditioning-${A}`,title:"Conditioning strengths",content:s.jsx(Ko,{minimum:150,children:[["Global influence","global_influence"],["Background influence","background_influence"],["Primary region influence","primary_region_influence"],["Context region influence","context_region_influence"]].map(([C,R])=>s.jsx(Pt,{label:C,value:E.conditioning[R],min:0,max:2,step:.05,onValue:M=>N(D=>{D.jobs[A].conditioning[R]=M})},R))})},{id:`detection-${A}`,title:"Detector and ROI settings",content:s.jsxs(Ko,{minimum:150,children:[s.jsx(Pt,{label:"ROI padding",value:E.detector.roi_padding,min:0,max:2,step:.01,onValue:C=>N(R=>{R.jobs[A].detector.roi_padding=C})}),s.jsx(Pt,{label:"Threshold",value:E.detector.threshold,min:0,max:1,step:.01,onValue:C=>N(R=>{R.jobs[A].detector.threshold=C})}),s.jsx(Pt,{label:"Dilation",value:E.detector.dilation,min:-512,max:512,step:1,slider:!1,onValue:C=>N(R=>{R.jobs[A].detector.dilation=C})}),s.jsx(Pt,{label:"Crop factor",value:E.detector.crop_factor,min:1,max:20,step:.1,onValue:C=>N(R=>{R.jobs[A].detector.crop_factor=C})}),s.jsx(Pt,{label:"Drop size",value:E.detector.drop_size,min:1,max:8192,step:1,slider:!1,onValue:C=>N(R=>{R.jobs[A].detector.drop_size=C})}),s.jsx(un,{label:"Detector query",value:E.detector.query??"",onValue:C=>N(R=>{R.jobs[A].detector.query=C.trim()||void 0})}),s.jsx(un,{label:"Accepted labels",value:(E.detector.labels??[]).join(", "),onValue:C=>N(R=>{R.jobs[A].detector.labels=C.split(",").map(M=>M.trim()).filter(Boolean)})})]})}]})]})}));return s.jsxs(s.Fragment,{children:[s.jsx(T,{open:!0,title:"Regional Detailer Plan",initialGeometry:{width:1040,height:720},minSize:{width:420,height:360},onClose:n,status:w?"Unsaved plan changes":"Plan saved",actions:s.jsx(Lf,{primary:s.jsx(ie,{intent:"primary",disabled:p.jobs.some(E=>!E.region_ids.length),onClick:h,children:"Save plan"}),secondary:s.jsxs(s.Fragment,{children:[s.jsx(ie,{onClick:B,disabled:!u.length,children:"Add job"}),s.jsx(cs,{label:"Detailer Plan",value:{schema:"bv.editor-draft",version:1,type:"detailer-plan",data:p},onImport:E=>{if(E?.schema!=="bv.editor-draft"||E?.version!==1||E?.type!=="detailer-plan"||!E?.data)throw new Error("Draft type or version does not match this editor.");f.replace(Ol(E.data,e))}})]}),overflow:[{id:"undo",label:"Undo",disabled:!f.canUndo,onSelect:f.undo},{id:"redo",label:"Redo",disabled:!f.canRedo,onSelect:f.redo},{id:"discard",label:"Discard changes",disabled:!w,onSelect:()=>f.replace(Ol(g,e),!0)},{id:"restore",label:"Restore defaults",onSelect:()=>f.commit(cd(e))}]}),children:s.jsxs(df,{density:"compact",className:"bv-editor-dialog",children:[!t.length&&p.jobs.length>0&&s.jsx(zr,{tone:"warning",title:"No registered detectors",children:"Jobs can still use their composed region masks. Add detectors in Detector Registry when object detection is required."}),u.length?s.jsx(Ws,{items:O,onReorder:E=>N(A=>{A.jobs=E.map(C=>A.jobs[Number(C.id.slice(4))])}),onRemove:E=>N(A=>{A.jobs.splice(Number(E.slice(4)),1)})}):s.jsx(Hs,{title:"No eligible regions",description:"Enable a region with Detailer or Both usage first."})]})}),s.jsx(pf,{open:!!k,editorName:"Detailer Plan",onKeep:()=>b(null),onDiscard:()=>{const E=k;b(null),E?.()},onSave:()=>{h();const E=k;b(null),E?.()}})]})}const xE=(e,t,r,o,n,i,a,l)=>{xf((c,u)=>m.createElement(mE,{regions:e,detectorIds:t,stored:r,save:o,close:c,activationToken:u,nodeId:n.split(":").slice(1).join(":"),nodes:i,onNavigate:a,currentNode:l}),{key:n})},xs=()=>({schema:"bv.detector_registry_config",version:1,detectors:[]}),Xi=e=>{try{const t=String(e??"").trim()?JSON.parse(String(e)):xs();return{schema:"bv.detector_registry_config",version:1,detectors:Array.isArray(t?.detectors)?t.detectors.flatMap(o=>{const n=String(o?.id??"").trim(),i=String(o?.model_name??"").trim();if(!n||!i)return[];const a=o.provider==="onnx"?"onnx":"ultralytics",l=String(o.sam_model_name??"").trim();return[{id:n,provider:a,model_name:i,...l?{sam_model_name:l,sam_device_mode:["Prefer GPU","CPU"].includes(o.sam_device_mode)?o.sam_device_mode:"AUTO"}:{}}]}):[]}}catch{return xs()}},Vc=e=>JSON.stringify(e);function yE({catalog:e,stored:t,save:r,close:o,nodeId:n="",nodes:i=[],onNavigate:a=()=>{},currentNode:l}){const c=m.useMemo(()=>Xi(t),[t]),u=m.useMemo(()=>new Set(c.detectors.map(R=>R.id)),[c]),d=Ys(c),f=d.value,[p,g]=m.useState(()=>Vc(c));Xs(d);const x=Vc(f)!==p,w=hf(),[k,b]=m.useState(null),h=()=>{const R=Vc(f);r(R),g(R),d.clear()},v=R=>x?b(()=>R):R(),_=()=>v(o),y=Aa(l),T=m.useMemo(()=>R=>s.jsx(xn,{...R,title:`${R.title} · #${n}`,shortTitle:"Registry",menuVisible:y,onMenuVisible:M=>fi(l,M),onClose:_,context:s.jsx(Da,{label:"Detector Registry Node",value:n,options:i.map(M=>({value:M.id,label:M.label})),onNavigate:(M,D)=>D?v(()=>a(M,!0)):a(M,!1)})}),[l,x,y,n,i,a]),[S,z]=m.useState([]),N=R=>d.commit(M=>{const D=structuredClone(M);return R(D),D}),B=()=>{let R=f.detectors.length+1,M=`detector-${R}`;for(;f.detectors.some(D=>D.id===M);)M=`detector-${++R}`;return M},P=f.detectors.map(R=>R.id.trim()),O=P.find((R,M)=>R&&P.indexOf(R)!==M),E=f.detectors.some(R=>!R.id.trim()||!R.model_name),A=()=>N(R=>{const M=e.ultralytics.length?"ultralytics":"onnx";R.detectors.push({id:B(),provider:M,model_name:e[M][0]??""})}),C=()=>{f.detectors.length?w.confirm({title:"Clear Detector Registry?",message:"Existing Detailer jobs will keep missing references until reassigned.",confirmLabel:"Clear registry",danger:!0,action:()=>d.commit(xs())}):d.commit(xs())};return s.jsxs(s.Fragment,{children:[s.jsx(T,{open:!0,title:"Detector Registry",initialGeometry:{width:1040,height:720},minSize:{width:420,height:360},onClose:o,status:x?"Unsaved registry changes":"Registry saved",actions:s.jsx(Lf,{primary:s.jsx(ie,{intent:"primary",disabled:!!(O||E),onClick:h,children:"Save registry"}),secondary:s.jsxs(s.Fragment,{children:[s.jsx(ie,{onClick:A,children:"Add detector"}),s.jsx(cs,{label:"Detector Registry",value:{schema:"bv.editor-draft",version:1,type:"detector-registry",data:f},onImport:R=>{if(R?.schema!=="bv.editor-draft"||R?.version!==1||R?.type!=="detector-registry"||!R?.data)throw new Error("Draft type or version does not match this editor.");d.replace(Xi(R.data))}})]}),overflow:[{id:"undo",label:"Undo",disabled:!d.canUndo,onSelect:d.undo},{id:"redo",label:"Redo",disabled:!d.canRedo,onSelect:d.redo},{id:"discard",label:"Discard changes",disabled:!x,onSelect:()=>d.replace(Xi(p),!0)},{id:"clear",label:"Clear registry…",onSelect:C}]}),children:s.jsxs(df,{density:"compact",className:"bv-editor-dialog",children:[O||E?s.jsx(zr,{tone:"danger",title:"Registry needs attention",children:O?`Detector ID “${O}” is used more than once.`:"Every detector needs a unique ID and a detection model."}):s.jsxs(zr,{tone:"success",title:"Registry valid",children:[f.detectors.length," detector",f.detectors.length===1?"":"s"," ready to save."]}),s.jsxs("div",{className:"bv-card-list",children:[!f.detectors.length&&s.jsx(Hs,{title:"No detectors configured",description:"Add a detector to make it selectable in Regional Detailer jobs."}),s.jsx(ns,{value:S,onValue:z,items:f.detectors.map((R,M)=>({id:`detector-${M}`,title:s.jsxs("span",{className:"bv-detector-summary",children:[s.jsx("strong",{children:R.id||"New detector"}),s.jsx("span",{children:R.provider==="onnx"?"ONNX":"Ultralytics"}),s.jsx("span",{children:R.model_name||"No model selected"}),s.jsx("span",{children:R.id.trim()&&R.model_name?"Ready":"Needs attention"})]}),content:s.jsxs("div",{className:"bv-detector-details",children:[s.jsxs("div",{className:"bv-editor-item-actions",children:[s.jsx(ie,{intent:"ghost",onClick:()=>N(D=>{D.detectors.splice(M+1,0,{...D.detectors[M],id:B()})}),children:"Duplicate"}),s.jsx(ie,{intent:"ghost",className:"bv-subtle-danger",onClick:()=>{const D=()=>N(W=>{W.detectors.splice(M,1)});u.has(R.id)?w.confirm({title:`Remove detector “${R.id}”?`,message:"Existing Detailer jobs will show it as missing until reassigned.",confirmLabel:"Remove detector",danger:!0,action:D}):D()},children:"Remove"})]}),s.jsxs(Ko,{children:[s.jsx(un,{label:"Detector ID",value:R.id,readOnly:u.has(R.id),help:u.has(R.id)?"Stable job reference. Create a new detector instead of renaming it.":"Choose once; the ID becomes immutable after saving.",onValue:D=>N(W=>{W.detectors[M].id=D.trim()})}),s.jsx(tt,{label:"Provider",value:R.provider,options:[{value:"ultralytics",label:"Ultralytics"},{value:"onnx",label:"ONNX"}],onValue:D=>N(W=>{const F=W.detectors[M];F.provider=D,F.model_name=e[F.provider][0]??""})}),s.jsx(tt,{label:"Detection model",value:R.model_name,options:e[R.provider].map(D=>({value:D,label:D})),onValue:D=>N(W=>{W.detectors[M].model_name=D})})]}),s.jsx(ns,{value:S,onValue:z,items:[{id:`sam-${M}`,title:R.sam_model_name?"SAM refinement enabled":"Optional SAM refinement",content:s.jsxs(Ko,{children:[s.jsx(tt,{label:"SAM model",value:R.sam_model_name??"",options:[{value:"",label:"No SAM refinement"},...e.sam.map(D=>({value:D,label:D}))],onValue:D=>N(W=>{const F=W.detectors[M];F.sam_model_name=D||void 0,D||delete F.sam_device_mode})}),R.sam_model_name&&s.jsx(tt,{label:"Execution device",value:R.sam_device_mode??"AUTO",options:["AUTO","Prefer GPU","CPU"].map(D=>({value:D,label:D})),onValue:D=>N(W=>{W.detectors[M].sam_device_mode=D})})]})}]})]})}))})]})]})}),w.dialog,s.jsx(pf,{open:!!k,editorName:"Detector Registry",onKeep:()=>b(null),onDiscard:()=>{const R=k;b(null),R?.()},onSave:()=>{h();const R=k;b(null),R?.()}})]})}const _E=async(e,t,r,o,n,i,a)=>{const l=await fetch(e.apiURL("/bv_nodepack/detectors/models"));if(!l.ok)throw new Error(`Detector model catalog failed: ${l.status}`);const c=await l.json();xf((u,d)=>m.createElement(yE,{catalog:c,stored:t,save:r,close:u,activationToken:d,nodeId:o.split(":").slice(1).join(":"),nodes:n,onNavigate:i,currentNode:a}),{key:o})},wE=10,kE=(e,t=wE)=>{const r=[...new Set(e.filter(i=>Number.isInteger(i)&&i>=1&&i<=t))],o=r.length?Math.max(...r):0,n=Math.min(t,o+1);return Array.from({length:Math.max(1,n)},(i,a)=>a+1)},EE=new Set(["BV Regional Detailer Mask","BV Regional Detailer Plan","BV Detailer Loop Job Resolver","BV Detector Binding","BV Detector Registry","BV Detailer Loop Detect to SEGS (Impact)","BV Detailer Loop Start","BV Detailer Loop End"]),TE={regional:"regional prompt",detailer_plan:"detailer plan",job_index:"job index",job:"detailer job",job_id:"job ID",job_name:"job name",job_count:"job count",detector_id:"detector ID",detector_count:"detector count",detector_registry:"detector registry",detector_query:"detector query",detector_labels:"detector labels",bbox_detector:"BBOX detector",segm_detector:"segmentation detector",sam_model:"SAM model",has_bbox:"has BBOX",has_segmentation:"has segmentation",has_sam:"has SAM",basic_pipe:"basic pipe",positive:"positive conditioning",negative:"negative conditioning",positive_text:"positive text",negative_text:"negative text",positive_weighted_text:"positive weighted text",negative_weighted_text:"negative weighted text",global_influence:"global influence",background_influence:"background influence",primary_region_influence:"primary region influence",context_regions_json:"context regions",roi_padding:"ROI padding",roi_x:"ROI x",roi_y:"ROI y",roi_width:"ROI width",roi_height:"ROI height",crop_factor:"crop factor",drop_size:"drop size",effective_mask:"effective mask",flow_to_loop_end:"flow to loop end",last_job_index:"last job index",final_image:"final image",current_image:"current image",processed_image:"processed image"},RE={"BV Regional Detailer Mask":{image:"source image",mask:"region mask",summary:"detailer summary"},"BV Regional Detailer Plan":{plan_summary:"plan summary"},"BV Detailer Loop Detect to SEGS (Impact)":{segs:"SEGS"}},Wc=(e,t)=>RE[e]?.[t]??TE[t]??t.split("_").join(" ");function SE({label:e,configured:t,close:r,onSave:o,onDelete:n}){const[i,a]=m.useState(""),[l,c]=m.useState(""),[u,d]=m.useState(!1),f=async p=>{d(!0),c("");try{const g=await p();g?c(g):r()}finally{d(!1)}};return s.jsxs(Na,{open:!0,title:`${e} API Key`,description:"Credentials are stored by the local BV Nodepack backend and are never written into the workflow.",size:"small",onClose:r,footer:s.jsxs(s.Fragment,{children:[s.jsx(ie,{intent:"danger",disabled:!t||u,onClick:()=>f(n),children:"Delete key"}),s.jsx(ie,{intent:"ghost",disabled:u,onClick:r,children:"Cancel"}),s.jsx(ie,{intent:"primary",loading:u,disabled:!i.trim(),onClick:()=>f(()=>o(i)),children:"Save key"})]}),children:[s.jsx(zr,{tone:t?"info":"warning",children:t?"A key is configured. Enter a new key to replace it.":"No key is configured."}),s.jsx(R0,{label:"API key",value:i,onValue:a}),l&&s.jsx(zr,{tone:"danger",children:l})]})}let Hc=null;const ud=(e,t=!1)=>((t||!Hc)&&(Hc=fetch(e.apiURL("/bv_nodepack/remote_llm/providers")).then(async r=>{if(!r.ok)throw new Error(await r.text());const o=await r.json();return Array.isArray(o.profiles)?o.profiles:[]})),Hc),Xr=(e,t)=>e.widgets?.find(r=>r.name===t),ys=(e,t,r)=>{const o=t.find(l=>l.label===String(Xr(e,"provider_profile")?.value??""));if(!o)return;const n=Xr(e,"custom_endpoint"),i=Xr(e,"model");if(n&&((!o.allow_custom_endpoint||!String(n.value??"").trim())&&(n.value=o.endpoint),n.disabled=!1,n.element&&(n.element.readOnly=!o.allow_custom_endpoint),n.label=o.allow_custom_endpoint?"custom endpoint":"endpoint (managed)",!n.__bvRemoteEndpointHooked)){n.__bvRemoteEndpointHooked=!0;const l=n.callback;n.callback=function(){const c=l?.apply(this,arguments),u=t.find(d=>d.label===String(Xr(e,"provider_profile")?.value??""));return u&&!u.allow_custom_endpoint&&(n.value=u.endpoint),c}}if(i&&r&&r!==o.label){const l=t.find(u=>u.label===r),c=String(i.value??"").trim();(!c||c===l?.default_model)&&(i.value=o.default_model)}const a=Xr(e,"configure_api_key");a&&(a.disabled=o.auth_mode==="none",a.label=o.auth_mode==="none"?"✓ No API key required":`${o.configured?"✓":"⚠"} Configure ${o.label} API Key`),e.setDirtyCanvas?.(!0,!0)},LE=(e,t,r)=>{const o=r.find(n=>n.label===String(Xr(t,"provider_profile")?.value??""))??r[0];o&&o.auth_mode!=="none"&&xf(n=>m.createElement(SE,{label:o.label,configured:o.configured,close:n,onSave:async i=>{const a=await fetch(e.apiURL("/bv_nodepack/remote_llm/api_key"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({profile_id:o.id,api_key:i})});if(!a.ok)return(await a.json().catch(()=>null))?.error??"Could not save API key.";o.configured=!0,ys(t,r),ud(e,!0)},onDelete:async()=>{if(!(await fetch(e.apiURL(`/bv_nodepack/remote_llm/api_key/${encodeURIComponent(o.id)}`),{method:"DELETE"})).ok)return"Could not delete API key.";o.configured=!1,ys(t,r),ud(e,!0)}}))},Vh=(e,t)=>{ud(t).then(r=>{let o=String(Xr(e,"provider_profile")?.value??"");const n=Xr(e,"provider_profile");if(n&&!n.__bvRemoteLLMHooked){n.__bvRemoteLLMHooked=!0;const a=n.callback;n.callback=function(l){const c=a?.apply(this,arguments);return ys(e,r,o),o=l,c}}let i=Xr(e,"configure_api_key");i||(i=e.addWidget("button","configure_api_key",null,()=>LE(t,e,r),{serialize:!1}),i.serialize=!1),ys(e,r)}).catch(r=>console.error("BV Remote LLM settings unavailable",r))};function CE({collectors:e,collectorId:t,resourceId:r,resolved:o,debugVisible:n,onCollector:i,onResource:a,onDebug:l}){return s.jsxs("div",{className:"bv-m0-picker-panel",children:[s.jsx($s,{label:"Hidden link debug",value:n,trueLabel:"Visible",falseLabel:"Hidden",onValue:l}),s.jsx(mf,{collectors:e,collectorId:t,resourceId:r,resolved:o,onCollector:i,onResource:a})]})}function NE({collectors:e,bindings:t,debugVisible:r,onBinding:o,onAdd:n,onRemove:i,onDebug:a}){return s.jsxs("div",{className:"bv-m0-picker-panel bv-m0-multi-picker",children:[s.jsx($s,{label:"Native fan-in debug",value:r,trueLabel:"Dashed links",falseLabel:"Hidden",onValue:a}),t.map((l,c)=>s.jsxs("section",{className:"bv-m0-binding",children:[s.jsxs("header",{children:[s.jsxs("strong",{children:["Binding ",c+1]}),s.jsx(ie,{type:"button",iconOnly:!0,icon:"×",onClick:()=>i(c),"aria-label":`Remove binding ${c+1}`})]}),s.jsx(mf,{collectors:e,collectorId:l.collector_id,resourceId:l.resource_id,resolved:l.resolved,onCollector:u=>{const d=e.find(f=>f.id===u)?.resources[0];o(c,u,d?.id??"")},onResource:u=>o(c,l.collector_id,u)})]},l.binding_id)),s.jsx(ie,{type:"button",className:"bv-m0-add-binding",disabled:t.length>=20,onClick:n,children:"Add collector binding"})]})}const Fr="BV_RUNTIME_RESOURCE_PROVIDER_M0",ai="resource_provider",ec=20;function _s(e){return e?.findIndex(t=>t?.name===ai||t?.type===Fr)??-1}function zf(e){let t=_s(e.outputs);t<0&&e.addOutput&&(e.addOutput(ai,Fr),t=_s(e.outputs));const r=e.outputs?.[t];return r&&(r.name=ai,r.type=Fr),t}function Ox(e){let t=_s(e.inputs);t<0&&e.addInput&&(e.addInput(ai,Fr),t=_s(e.inputs));const r=e.inputs?.[t];return r&&(r.name=ai,r.type=Fr),t}function OE(e){return`${ai}_${e}`}function tc(e,t=ec){const r=[];for(let o=1;o<=t;o++){const n=OE(o);let i=e.inputs?.findIndex(l=>l?.name===n)??-1;i<0&&e.addInput&&(e.addInput(n,Fr),i=e.inputs?.findIndex(l=>l?.name===n)??-1);const a=e.inputs?.[i];a&&(a.name=n,a.type=Fr,a.__bvM0ProviderOrdinal=o),r.push(i)}return r}const ME=(e,t)=>t==null?null:e?._links?.get?.(t)??e?.links?.get?.(t)??e?.links?.[t]??null,AE=e=>[...e?._links?.values?.()??[],...e?.links?.values?.()??Object.values(e?.links??{})],Wh=(e,t)=>{if(!t||String(t.target_id)!==String(e.id))return null;const r=e.graph?.getNodeById?.(t.origin_id),o=r?.outputs?.[Number(t.origin_slot)];return r?.graph===e.graph&&(r.__bvM0ResourceProvider===!0||t.type===Fr||o?.type===Fr)?r:null};function DE(e,t,r){const o=e.inputs?.find(a=>a.name===t),n=ME(e.graph,o?.link),i=Wh(e,n);if(i&&(!r||r(i)))return i;if(!r)return null;for(const a of AE(e.graph)){const l=Wh(e,a);if(l&&r(l))return l}return null}const IE="BV M0 Fake Resource Collector",jE="BV M0 Fake Resource Consumer",Mx="BV M0 Fake Multi Resource Consumer",Ax=Fr,PE="a1bdeceb-76ae-4e45-ae36-e5c2664819ce",BE="d97a4268-c02c-42a3-8793-8e578e12e12c",Ae=(e,t)=>e?.widgets?.find(r=>r.name===t),$c=e=>{e&&(e.type="converted-widget",e.hidden=!0,e.computeSize=()=>[0,-4],e.serializeValue=()=>e.value)},Yc=(e,t)=>(e&&!String(e.value??"").trim()&&(e.value=t??crypto.randomUUID()),String(e?.value??"")),Xc=()=>{let e=0;const t=()=>{const r=ct().canvas;r?jf(r):e++<40&&setTimeout(t,50)};t()};function zE(e){const t=Ae(e,"collector_id"),r=Ae(e,"resource_a_id"),o=Ae(e,"resource_b_id");if(!t||!r||!o||!e.graph||!(e.graph._nodes??[]).find(a=>a!==e&&a.__bvM0ResourceProvider===!0&&String(Ae(a,"collector_id")?.value??"")===String(t.value??"")))return;const i={collector:{[String(t.value)]:crypto.randomUUID()},resources:{[String(r.value)]:crypto.randomUUID(),[String(o.value)]:crypto.randomUUID()}};t.value=i.collector[String(t.value)],r.value=i.resources[String(r.value)],o.value=i.resources[String(o.value)],e.__bvM0IdRemap=i}function rc(e,t,r=""){return DE(e,t,r?o=>String(Ae(o,"collector_id")?.value??"")===r:void 0)}function hn(e){return rc(e,"resource_provider",String(Ae(e,"collector_id")?.value??""))}function Pa(e,t){const r=gn(e)[t];return rc(e,`resource_provider_${t+1}`,r?.collector_id??"")}function Hh(e){const t=hn(e),r=t?.__bvM0IdRemap;if(!r)return;const o=Ae(e,"collector_id"),n=Ae(e,"resource_id");o&&r.collector[String(o.value)]&&(o.value=r.collector[String(o.value)]),n&&r.resources[String(n.value)]&&(n.value=r.resources[String(n.value)])}function ka(e){return(e.graph?._nodes??[]).filter(t=>t.__bvM0ResourceProvider===!0&&t.graph===e.graph).map(t=>({id:String(Ae(t,"collector_id")?.value??""),label:String(t.title||`Collector #${t.id}`),resources:[{id:String(Ae(t,"resource_a_id")?.value??""),label:"Alpha"},{id:String(Ae(t,"resource_b_id")?.value??""),label:"Beta"}],node:t})).filter((t,r,o)=>t.id&&o.findIndex(n=>n.id===t.id)===r)}function xo(e){if(!e?.__bvM0ResourceProvider)return;const t=e.graph?._nodes??[],r=e.outputs?.find(n=>n.type===Ax),o=t.some(n=>!!n.properties?.bvM0DebugVisible&&(hn(n)===e||n.inputs?.some((i,a)=>Pa(n,a)===e)));r&&(r.hidden=!0,r.__bvM0VisualHidden=!o,r.__bvM0PortHidden=!0,r.__bvM0ResourceSlot=!0),Pf(e,"collector",o)}function gn(e){const t=Ae(e,"resource_bindings");if(!t)return[];try{const r=JSON.parse(String(t.value??"[]"));return Array.isArray(r)?r.slice(0,ec).map(o=>({binding_id:String(o.binding_id||crypto.randomUUID()),collector_id:String(o.collector_id||""),resource_id:String(o.resource_id||""),resolved:!1})):[]}catch{return[]}}function $n(e,t){const r=Ae(e,"resource_bindings");r&&(r.value=JSON.stringify(t.map(({binding_id:o,collector_id:n,resource_id:i})=>({binding_id:o,collector_id:n,resource_id:i}))))}function FE(e){const t=gn(e),r=new Set(t.map(n=>n.binding_id));if((e.graph?._nodes??[]).some(n=>n!==e&&n.type===Mx&&gn(n).some(i=>r.has(i.binding_id)))){for(const n of t)n.binding_id=crypto.randomUUID();$n(e,t)}}function ll(e){const t=gn(e);let r=!1;t.forEach((o,n)=>{const i=Pa(e,n)?.__bvM0IdRemap;if(!i)return;const a=i.collector[o.collector_id],l=i.resources[o.resource_id];a&&(o.collector_id=a,r=!0),l&&(o.resource_id=l,r=!0)}),r&&$n(e,t)}function Dx(e,t){return["resource_a_id","resource_b_id"].some(r=>String(Ae(e,r)?.value??"")===t)}function $h(e){const t=Ae(e,"collector_id"),r=Ae(e,"resource_id");if(!t||!r)return;const o=rc(e,"resource_provider",String(t.value??""));if(!!o&&String(t.value??"")===String(Ae(o,"collector_id")?.value??"")&&Dx(o,String(r.value??"")))return;t.value="",r.value="";const i=e.inputs?.findIndex(a=>a.name==="resource_provider")??-1;i>=0&&e.inputs?.[i]?.link!=null&&e.disconnectInput?.(i)}function Gc(e){const t=gn(e),r=tc(e);let o=!1;t.forEach((n,i)=>{const a=rc(e,`resource_provider_${i+1}`,n.collector_id);if(!!a&&Dx(a,n.resource_id))return;n.collector_id="",n.resource_id="",o=!0;const c=r[i];c>=0&&e.inputs?.[c]?.link!=null&&e.disconnectInput?.(c)}),o&&$n(e,t)}function ws(e,t,r=!0){e.properties??(e.properties={}),e.properties.bvM0DebugVisible=t;const o=(e.inputs??[]).map((n,i)=>({input:n,index:i})).filter(({input:n})=>String(n.name??"").startsWith("resource_provider_"));e.__bvM0FanInAnchorSlot=t?o[0]?.index:void 0;for(const{input:n}of o)n.hidden=!0,n.__bvM0ResourceSlot=!0,n.__bvM0VisualHidden=!t,n.__bvM0PortHidden=!0,n.label="";Pf(e,"consumer",t);for(let n=0;n=0&&e.inputs?.[n]?.link!=null&&e.disconnectInput?.(n);const a=ka(e).find(c=>c.id===r)?.node,l=a?zf(a):-1;a&&n>=0&&l>=0&&a.connect(l,e,n),ws(e,!!e.properties?.bvM0DebugVisible),xo(i)}function Ea(e,t){if(!(t.parentElement?.style.position==="fixed")){t.style.transform="",t.style.maxHeight="",t.style.overflowY="";return}const o=(e.inputs??[]).filter(n=>n.__bvM0ResourceSlot||n.type===Ax).length;t.style.transform=`translateY(-${o*20}px)`,t.style.maxHeight=`${Math.max(120,Number(e.size?.[1]??200)-40)}px`,t.style.overflowY="auto"}function Ix(e,t){[0,50,150,300].forEach(r=>setTimeout(()=>Ea(e,t),r))}function sl(e){if(!Ae(e,"resource_bindings"))return;let r=e.__bvM0PickerHost;if(!r){r=document.createElement("div"),r.className="bv-ui bv-m0-picker-host",r.style.position="relative",r.style.zIndex="1",e.__bvM0PickerHost=r;const n=e.addDOMWidget?.("bv_multi_resource_picker","div",r,{serialize:!1,getMinHeight:()=>Math.max(150,78+gn(e).length*124),onDraw:()=>Ea(e,r),afterResize:()=>Ea(e,r)});n&&(n.serialize=!1)}e.__bvM0PickerRoot??(e.__bvM0PickerRoot=qi.createRoot(r));const o=()=>{const n=ka(e),i=gn(e).map((a,l)=>{const c=Pa(e,l);return{...a,resolved:!!c&&String(Ae(c,"collector_id")?.value??"")===a.collector_id}});e.__bvM0PickerRoot.render(s.jsx(NE,{collectors:n,bindings:i,debugVisible:!!e.properties?.bvM0DebugVisible,onDebug:a=>{ws(e,a),o()},onBinding:(a,l,c)=>{i[a]={...i[a],collector_id:l,resource_id:c},$n(e,i),Yh(e,a,l),o()},onAdd:()=>{i.length>=ec||(i.push({binding_id:crypto.randomUUID(),collector_id:"",resource_id:"",resolved:!1}),$n(e,i),o())},onRemove:a=>{const l=tc(e),c=l[a];c>=0&&e.inputs?.[c]?.link!=null&&e.disconnectInput?.(c),i.splice(a,1),$n(e,i);for(let d=a;d=0&&e.inputs?.[u]?.link!=null&&e.disconnectInput?.(u),o()}}))};o(),ws(e,!!e.properties?.bvM0DebugVisible,!1),Ix(e,r)}function Kc(e,t){if(e.__bvM0DomRefresh)return;const r=()=>{setTimeout(t,0),setTimeout(t,100)};e.__bvM0DomRefresh=r,qr().addEventListener("executed",r),qr().addEventListener("graphChanged",r);const o=e.onRemoved;e.onRemoved=function(){return qr().removeEventListener("executed",r),qr().removeEventListener("graphChanged",r),o?.apply(this,arguments)}}function dd(e,t,r=!0){e.properties??(e.properties={}),e.properties.bvM0DebugVisible=t;const o=e.inputs?.find(n=>n.name==="resource_provider");o&&(o.hidden=!0,o.__bvM0VisualHidden=!t,o.__bvM0PortHidden=!0,o.__bvM0ResourceSlot=!0,o.label=""),Pf(e,"consumer",t),xo(hn(e)),mx(e.graph),t&&vx(e.graph?.list_of_graphcanvas?.[0]??ct().canvas),r&&e.setDirtyCanvas?.(!0,!0)}function UE(e,t){const r=hn(e),o=Ox(e);o>=0&&e.inputs?.[o]?.link!=null&&e.disconnectInput?.(o);const n=ka(e).find(a=>a.id===t)?.node,i=n?zf(n):-1;n&&o>=0&&i>=0&&n.connect(i,e,o),dd(e,!!e.properties?.bvM0DebugVisible),xo(r)}function cl(e){const t=Ae(e,"collector_id"),r=Ae(e,"resource_id");if(!t||!r)return;let o=e.__bvM0PickerHost;if(!o){o=document.createElement("div"),o.className="bv-ui bv-m0-picker-host",o.style.position="relative",o.style.zIndex="1",e.__bvM0PickerHost=o;const i=e.addDOMWidget?.("bv_resource_picker","div",o,{serialize:!1,getMinHeight:()=>150,onDraw:()=>Ea(e,o),afterResize:()=>Ea(e,o)});i&&(i.serialize=!1)}e.__bvM0PickerRoot??(e.__bvM0PickerRoot=qi.createRoot(o));const n=()=>{const i=hn(e),a=String(Ae(i,"collector_id")?.value??"");e.__bvM0PickerRoot.render(s.jsx(CE,{collectors:ka(e),collectorId:String(t.value??""),resourceId:String(r.value??""),resolved:!!i&&a===String(t.value??""),debugVisible:!!e.properties?.bvM0DebugVisible,onDebug:l=>{dd(e,l),n()},onCollector:l=>{t.value=l;const c=ka(e).find(u=>u.id===l)?.resources[0];r.value=c?.id??"",UE(e,l),n()},onResource:l=>{r.value=l,n()}}))};n(),dd(e,!!e.properties?.bvM0DebugVisible,!1),Ix(e,o)}function VE(e,t){if(t.name===IE){const r=e.prototype.onNodeCreated,o=e.prototype.onConfigure,n=function(){Xc(),this.__bvM0ResourceProvider=!0,zf(this),Yc(Ae(this,"collector_id")),Yc(Ae(this,"resource_a_id"),PE),Yc(Ae(this,"resource_b_id"),BE),zE(this),["collector_id","resource_a_id","resource_b_id"].forEach(i=>$c(Ae(this,i))),Kc(this,()=>xo(this)),xo(this)};return e.prototype.onNodeCreated=function(){const i=r?.apply(this,arguments);return queueMicrotask(()=>n.call(this)),i},e.prototype.onConfigure=function(){const i=o?.apply(this,arguments);return queueMicrotask(()=>n.call(this)),i},!0}if(t.name===jE){const r=e.prototype.onNodeCreated,o=e.prototype.onConfigure,n=e.prototype.onConnectionsChange,i=function(){Xc(),this.__bvM0ResourceConsumer=!0,Ox(this),Hh(this),$h(this),["collector_id","resource_id"].forEach(a=>$c(Ae(this,a))),Kc(this,()=>cl(this)),cl(this),setTimeout(()=>cl(this),0)};return e.prototype.onNodeCreated=function(){const a=r?.apply(this,arguments);return queueMicrotask(()=>i.call(this)),a},e.prototype.onConfigure=function(){const a=o?.apply(this,arguments);return queueMicrotask(()=>i.call(this)),a},e.prototype.onConnectionsChange=function(){const a=hn(this),l=n?.apply(this,arguments);return queueMicrotask(()=>{Hh(this),$h(this),cl(this),xo(a),xo(hn(this))}),l},!0}if(t.name===Mx){const r=e.prototype.onNodeCreated,o=e.prototype.onConfigure,n=e.prototype.onConnectionsChange,i=function(){Xc(),this.__bvM0ResourceConsumer=!0,tc(this),FE(this),ll(this),Gc(this),$c(Ae(this,"resource_bindings")),Kc(this,()=>{ll(this),sl(this)}),sl(this),[0,50,150].forEach(a=>setTimeout(()=>{ll(this),Gc(this),sl(this)},a))};return e.prototype.onNodeCreated=function(){const a=r?.apply(this,arguments);return queueMicrotask(()=>i.call(this)),a},e.prototype.onConfigure=function(){const a=o?.apply(this,arguments);return queueMicrotask(()=>i.call(this)),a},e.prototype.onConnectionsChange=function(){const a=n?.apply(this,arguments);return queueMicrotask(()=>{ll(this),Gc(this),ws(this,!!this.properties?.bvM0DebugVisible,!1),sl(this)}),a},!0}return!1}const Xh=(e,t)=>e?.widgets?.find(r=>r.name===t);function WE({open:e,node:t,onClose:r}){const[o,n]=m.useState(()=>vs(t));if(m.useEffect(()=>{e&&t&&n(vs(t))},[t,e]),!t)return null;const i=ii(t).filter(c=>c.resources.length>0),a=sd(t,o),l=Zk(t);return s.jsx(xn,{open:e,title:"BV Regional LoRA Editor",initialGeometry:{width:620,height:520},minSize:{width:420,height:320},onClose:r,children:s.jsxs("div",{className:"bv-ui bv-lora-v3-window",children:[s.jsxs(Ho,{label:"Operation",value:String(Xh(t,"operation")?.value??"replace"),onChange:c=>{const u=Xh(t,"operation");u&&(u.value=c,u.callback?.(c),t.setDirtyCanvas?.(!0,!0))},children:[s.jsx("option",{value:"replace",children:"Replace"}),s.jsx("option",{value:"merge",children:"Merge"}),s.jsx("option",{value:"subtract",children:"Subtract"}),s.jsx("option",{value:"clear",children:"Clear"})]}),s.jsx(Fk,{collectors:i,config:o,resolved:a,targetOptions:l,onCollector:c=>n(kx(t,o,c)),onResource:(c,u)=>n(Ex(t,o,c,u)),onAddExternal:c=>n(Tx(t,o,c)),onRemove:(c,u)=>n(Rx(t,o,c,u))})]})})}const Ff="BV Control Center",ks=0,HE=2,$E=4,Di="bvControlBaseMode",YE="bv-open-control-rack",jx=320,XE=48,Gh="bv_control_conflict_status",qc=new Set;function GE(e){return e==="activate"?{mode:ks,priority:3}:e==="mute"?{mode:HE,priority:2}:{mode:$E,priority:1}}function Kh(e){const t=new Set(os(ct()).map(r=>r.id));return{...e,controls:e.controls.map(r=>({...r,assignments:r.assignments.map(o=>({...o,unresolved:!t.has(o.groupId)}))}))}}function KE(e){return Xw(e,t=>_v(t,Ff))}function qE(e){for(const o of qc){const n=o.properties?.[Di];o.mode=e.forceActive?ks:typeof n=="number"?n:o.mode,o.properties&&delete o.properties[Di],o.setDirtyCanvas?.(!0,!0)}qc.clear();const t=new Map(os(ct()).map(o=>[o.id,o])),r=new Map;for(const o of e.controls)if(o.enabled)for(const n of o.assignments){const i=t.get(n.groupId);if(i)for(const a of KE(i)){const l=GE(n.action),c=r.get(a);(!c||l.priority>c.priority)&&r.set(a,l)}}for(const[o,n]of r)o.properties??(o.properties={}),typeof o.properties[Di]!="number"&&(o.properties[Di]=typeof o.mode=="number"?o.mode:ks),o.mode=n.mode,qc.add(o),o.setDirtyCanvas?.(!0,!0)}function JE(e,t){const r=e.inputs[t],o=e.widgets?.find(n=>n.name===r.name);o&&e.removeWidget?.(o),r.link!=null&&e.disconnectInput(t),e.removeInput(t)}function ZE(e,t){const r=wv(t),o=Gw(r);let n=e.widgets?.find(i=>i.name===Gh);n||(n=e.addCustomWidget({name:Gh,type:"custom",value:o,y:0,options:{},serialize:!1,computeSize:()=>[0,24],computeLayoutSize:()=>({minHeight:24,maxHeight:24,minWidth:jx}),mouse:()=>!1,draw(i,a,l,c,u){i.save(),i.beginPath(),i.rect(10,c,Math.max(0,l-20),u),i.clip(),i.fillStyle=this.__bvHasConflict?"#ffbd66":"#8fc9a3",i.font="12px sans-serif",i.textBaseline="middle",i.fillText(String(this.value??""),14,c+u/2),i.restore()}})),n.value=o,n.__bvHasConflict=r.length>0,n.tooltip=r.map(i=>`${i.groupPath}: ${i.winnerAction} wins`).join(` +`)}function Px(e,t){e.mode=ks,e.properties&&delete e.properties[Di];let r=e.widgets?.find(c=>c.name==="configure_control_center");r||(r=e.addWidget("button","configure_control_center",null,()=>window.dispatchEvent(new Event(YE)),{serialize:!1})),r.label="Configure Control Center",r.serialize=!1;const o=new Set(t.controls.map(c=>`bvcc_${c.id}`));for(let c=e.inputs.length-1;c>=0;c--){const u=e.inputs[c];u.name.startsWith("bvcc_")&&!o.has(u.name)&&JE(e,c)}for(const c of t.controls){const u=`bvcc_${c.id}`,d=g=>{const x=cn(),w={...x,controls:x.controls.map(k=>k.id===c.id?{...k,enabled:!!g}:k)};uf(w)};let f=e.inputs.find(g=>g.name===u);f||(f=e.addInput(u,"BOOLEAN",{label:c.name,nameLocked:!0,widget:{name:u}})),f.label=c.name;let p=e.widgets?.find(g=>g.name===u);p&&!p.__bvControlCallbackBound&&(e.removeWidget?.(p),p=null),p||(p=e.addWidget("toggle",u,c.enabled,d,{on:"ACTIVE",off:"INACTIVE"})),p.__bvControlCallbackBound=!0,p.label=c.name,p.value=c.enabled,p.serialize=!0,p.options??(p.options={}),p.options.on="ACTIVE",p.options.off="INACTIVE",p.callback=d,f.widget={name:u}}ZE(e,t);const n=e.widgets?.find(c=>c.name==="bv_control_config_json");n&&(n.value=JSON.stringify(Kh(t)),n.type="converted-widget",n.draw=()=>{},n.hidden=!0,n.options??(n.options={}),n.options.hidden=!0,n.element&&(n.element.style.display="none"),n.computeSize=()=>[0,-4],n.serializeValue=()=>JSON.stringify(Kh(cn()))),e.serialize_widgets=!0;const i=e.size??[0,0],a=e.computeSize?.()??i,l=Math.max(jx,(a[0]??0)+XE);e.setSize?.([Math.max(i[0]??0,l),a[1]??i[1]??0]),e.setDirtyCanvas?.(!0,!0)}function Bx(e=cn()){for(const{node:t}of $w(ct(),Ff))Px(t,e);qE(e)}window.addEventListener(ei,e=>Bx(e.detail));ct().registerExtension({name:"bv_nodepack.control_center",async beforeRegisterNodeDef(e,t){if(t.name!==Ff)return;const r=e.prototype.onNodeCreated;e.prototype.onNodeCreated=function(){const o=r?.apply(this,arguments);return Px(this,cn()),o}},afterConfigureGraph(){Bx()}});const rt=ct(),_r=qr();sk(e=>rt.ui?.settings?.setSettingValue?.(Pm,e));ck(e=>rt.ui?.settings?.setSettingValue?.(Bm,e));lk(e=>rt.ui?.settings?.setSettingValue?.(zm,e));z0(e=>rt.ui?.settings?.setSettingValue?.(_f,e));const fd="bv-open-control-rack",Yn="bv-open-regional-editor",Gi="bv-open-regional-quick-edit",yo="bv-regional-document-changed",qh="bv-nodepack-styles",zx="BV.DebugBridge.Enabled";let tn=!1,ul=null;const QE=()=>{const e=rt.extensionManager?.workflow?.activeWorkflow??rt.workflowManager?.activeWorkflow;return String(e?.filename??e?.path??"Current workflow")},Fx=async e=>{tn=!!e;const t=await fetch(_r.apiURL("/bv_nodepack/debug/session"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({enabled:tn})});if(!t.ok)throw new Error(`BV Debug Bridge session failed: ${t.status} ${await t.text()}`)},Ux=async()=>{if(!tn)return!1;const e=await rt.graphToPrompt(),t=await fetch(_r.apiURL("/bv_nodepack/debug/snapshot"),{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({prompt:e.output,workflow_name:QE()})});if(!t.ok)throw new Error(`BV Debug Bridge snapshot failed: ${t.status} ${await t.text()}`);return!0},Es=()=>{tn&&(ul!=null&&window.clearTimeout(ul),ul=window.setTimeout(()=>{ul=null,Ux().catch(e=>console.error(e))},600))},jr=e=>{e.type="converted-widget",e.hidden=!0,e.computeSize=()=>[0,-4],e.element&&(e.element.style.display="none")},eT=(e,t,r)=>{if(!t||!r||t===r)return;const o=e.widgets?.indexOf(t)??-1;if(o<0)return;e.widgets.splice(o,1);const n=e.widgets.indexOf(r);e.widgets.splice(n<0?e.widgets.length:n,0,t)},tT=e=>{const t=[e.widgets?.find(r=>r.name==="region_selector"),...e.__bvDetailerContextWidgets??[]].filter(Boolean);for(const r of t){const o=e.widgets?.indexOf(r)??-1;o>=0&&e.widgets.splice(o,1),r.onRemove?.()}e.__bvDetailerContextWidgets=[]},oc=e=>{const t=e.inputs?.find(a=>a.name==="regional"||a.name==="regional_prompt"),r=e.graph??rt.graph,o=t?.link==null?null:r?.links?.[t.link]??r?._links?.get?.(t.link),n=o?r?.getNodeById?.(o.origin_id):null;if(n?.type!=="BV Regional Prompt")return null;const i=n.widgets?.find(a=>a.name==="regional_json")?.value;try{return dn(i)}catch{return null}},rT=e=>{const t=e.graph??rt.graph,r=e.inputs?.find(l=>l.name==="detector_registry"),o=r?.link==null?null:t?.links?.[r.link]??t?._links?.get?.(r.link),n=o?t?.getNodeById?.(o.origin_id):null;if(n?.type!=="BV Detector Registry")return[];const i=n.widgets?.find(l=>l.name==="config_json")?.value,a=Xi(i).detectors.map(l=>l.id);for(const l of n.inputs??[]){if(!String(l.name).startsWith("external_detector_")||l.link==null)continue;const c=t?.links?.[l.link]??t?._links?.get?.(l.link),u=c?t?.getNodeById?.(c.origin_id):null,d=String(u?.widgets?.find(f=>f.name==="detector_id")?.value??"").trim();d&&a.push(d)}return[...new Set(a)].sort((l,c)=>l.localeCompare(c))},Jc=e=>{const t=/^external_detector_(\d+)$/,r=(e.inputs??[]).flatMap(n=>{const i=t.exec(String(n.name));return i&&n.link!=null?[Number(i[1])]:[]}),o=new Set(kE(r));for(let n=(e.inputs?.length??0)-1;n>=0;n--){const i=e.inputs[n],a=t.exec(String(i.name));a&&i.link==null&&!o.has(Number(a[1]))&&e.removeInput(n)}for(const n of[...o].sort((i,a)=>i-a)){const i=`external_detector_${n}`;e.inputs?.some(a=>a.name===i)||e.addInput(i,"BV_DETECTOR_BINDING",{label:`external detector ${n}`,nameLocked:!0})}e.setDirtyCanvas?.(!0,!0)},Jh=(e,t)=>{for(const r of e.inputs??[])r.label=Wc(t,String(r.name));for(const r of e.outputs??[])r.label=Wc(t,String(r.name));for(const r of e.widgets??[])String(r.name).startsWith("configure_")||(r.label=Wc(t,String(r.name)));e.setDirtyCanvas?.(!0,!0)},pd=e=>{const t=e.widgets?.find(i=>i.name==="config_json"),r=e.widgets?.find(i=>i.name==="configure_detailer_plan");if(!t||!r)return;jr(t);const o=oc(e),n=o?Ol(t.value,o.regions).jobs.length:0;r.label=o?`Configure Detailer Plan · ${n} Job${n===1?"":"s"}`:"Connect a BV Regional Prompt",r.disabled=!o,e.setDirtyCanvas?.(!0,!0)},Zh=e=>{const t=e.widgets?.find(o=>o.name==="config_json");if(!t)return;jr(t);let r=e.widgets?.find(o=>o.name==="configure_detailer_plan");r||(r=e.addWidget("button","configure_detailer_plan",null,()=>{const o=oc(e);o&&(to("detailer",je(e)),xE(o.regions,rT(e),t.value,n=>{t.value=n,pd(e),e.graph?.setDirtyCanvas?.(!0,!0)},`detailer-plan:${je(e)}`,Ft("BV Regional Detailer Plan").filter(mn).map(n=>({id:je(n),label:`${n.title||"BV Regional Detailer Plan"} · #${n.id}`})),(n,i)=>{const a=Ft("BV Regional Detailer Plan").find(c=>je(c)===n),l=a?.widgets?.find(c=>c.name==="configure_detailer_plan");l&&yf(`detailer-plan:${je(e)}`,`detailer-plan:${je(a)}`,()=>l.callback?.(),i)},e))},{serialize:!1}),r.serialize=!1),pd(e)},Qh=e=>{try{const t=JSON.parse(String(e??"[]"));return Array.isArray(t)?t.filter(r=>r&&typeof r.region_id=="string").map(r=>({region_id:r.region_id,influence:Math.max(0,Math.min(2,Number.isFinite(+r.influence)?+r.influence:1))})):[]}catch{return[]}},Uf=e=>{if(e.comfyClass!=="BV Regional Detailer Mask"&&e.type!=="BV Regional Detailer Mask")return;const t=e.widgets?.find(d=>d.name==="context_regions_json");if(!t)return;jr(t);const r=oc(e);if(!r)return;for(const d of e.__bvDetailerContextWidgets??[]){const f=e.widgets?.indexOf(d)??-1;f>=0&&e.widgets.splice(f,1),d.onRemove?.()}const o=String(e.widgets?.find(d=>d.name==="region")?.value??""),n=(r?.regions??[]).filter(d=>d.enabled!==!1&&d.id!==o),i=new Set,a=Qh(t.value).filter(d=>d.region_id!==o&&!i.has(d.region_id)&&!!i.add(d.region_id));t.value=JSON.stringify(a);const l=[],c=d=>{t.value=JSON.stringify(d),queueMicrotask(()=>Uf(e))};for(let d=0;d<=a.length;d++){const f=a[d],p=new Set(a.filter((k,b)=>b!==d).map(k=>k.region_id)),g=Sx(n.filter(k=>!p.has(k.id))),x=f&&!g.some(k=>k.id===f.region_id)?`Missing region · ${f.region_id.slice(0,8)}`:null,w=e.addWidget("combo",`context_region_${d+1}`,f?g.find(k=>k.id===f.region_id)?.label??x??"None":"None",k=>{if(k==="None")return c(a.slice(0,d));const b=g.find(v=>v.label===k);if(!b)return;const h=a.slice();h[d]={region_id:b.id,influence:f?.influence??1},c(h)},{values:["None",...x?[x]:[],...g.map(k=>k.label)],serialize:!1});if(w.label=`context region ${d+1}`,w.serialize=!1,l.push(w),f){const k=e.addWidget("number",`context_influence_${d+1}`,f.influence,b=>{const h=Qh(t.value);h[d]&&(h[d].influence=Math.max(0,Math.min(2,+b))),t.value=JSON.stringify(h)},{min:0,max:2,step:.05,precision:2,serialize:!1});k.label=`context influence ${d+1}`,k.serialize=!1,l.push(k)}}e.__bvDetailerContextWidgets=l;const u=e.computeSize?.();u&&e.setSize&&e.setSize([Math.max(e.size?.[0]??0,u[0]),u[1]]),e.setDirtyCanvas?.(!0,!0),e.graph?.setDirtyCanvas?.(!0,!0)},Ml=e=>{const t=e.widgets?.find(d=>d.name==="region"),r=e.widgets?.find(d=>d.name==="region_selector");if(!t||!r)return;const o=oc(e);if(!o){r.options??(r.options={}),r.options.values=["Connect a BV Regional Prompt"],r.value=r.options.values[0],r.disabled=!0,e.setDirtyCanvas?.(!0,!0);return}const n=e.comfyClass==="BV Regional Detailer Mask"||e.type==="BV Regional Detailer Mask"?"detailer":void 0,i=Sx(o.regions,n),a=String(t.value??""),l=i.some(d=>d.id===a)?a:a||i[0]?.id||"";t.value=l,e.__bvRegionChoices=i,r.options??(r.options={});const c=l&&!i.some(d=>d.id===l)?`Missing region · ${l.slice(0,8)}`:null;r.options.values=i.length||c?[...c?[c]:[],...i.map(d=>d.label)]:["Connect a BV Regional Prompt"],r.value=i.find(d=>d.id===l)?.label??c??r.options.values[0];const u=e.widgets?.find(d=>d.name==="scope");r.disabled=u&&u.value!=="region"||!i.length,Uf(e),e.setDirtyCanvas?.(!0,!0)},eg=e=>{const t=e.widgets?.find(n=>n.name==="region");if(!t)return;jr(t);let r=e.widgets?.find(n=>n.name==="region_selector");r||(r=e.addWidget("combo","region_selector","Connect a BV Regional Prompt",n=>{const i=e.__bvRegionChoices?.find(a=>a.label===n);i&&(t.value=i.id,Uf(e))},{values:["Connect a BV Regional Prompt"],serialize:!1}),r.label="region",r.serialize=!1),(e.comfyClass==="BV Regional Detailer Mask"||e.type==="BV Regional Detailer Mask")&&eT(e,r,e.widgets?.find(n=>n.name==="primary_region_influence"));const o=e.widgets?.find(n=>n.name==="scope");if(o&&!o.__bvRegionSelectorHooked){o.__bvRegionSelectorHooked=!0;const n=o.callback;o.callback=function(){const i=n?.apply(this,arguments);return Ml(e),i}}if(!e.__bvRegionDocumentListener){e.__bvRegionDocumentListener=()=>Ml(e),window.addEventListener(yo,e.__bvRegionDocumentListener);const n=e.onRemoved;e.onRemoved=function(){return window.removeEventListener(yo,e.__bvRegionDocumentListener),n?.apply(this,arguments)}}Ml(e)},Ft=e=>{const t=[],r=o=>{for(const n of o?._nodes??[])n.type===e&&t.push(n),n.subgraph&&r(n.subgraph)};return r(rt.graph),t},rn=()=>{const e=rt.graph,t=[],r=o=>{for(const n of o?._nodes??[])n.type==="BV Regional Prompt"&&t.push(n),n.subgraph&&r(n.subgraph)};return r(e),t},Ki=()=>{const e=Ft("BV Control Center").length>0,t=rn().length>0,r=t||["BV Regional Detailer Plan","BV Detector Registry","BV Smart Pipe","BV Smart Pipe Merge"].some(n=>Ft(n).length>0),o=r||t;document.body.classList.toggle("bv-toolbar-no-control",!e),document.body.classList.toggle("bv-toolbar-no-editor",!r),document.body.classList.toggle("bv-toolbar-no-quick",!t),document.body.classList.toggle("bv-toolbar-no-overview",!o),window.dispatchEvent(new CustomEvent("bv-toolbar-capabilities-changed",{detail:{control:e,quick:t,full:r,overview:o}}))},Vx=e=>kf(rt.rootGraph??rt.graph,t=>t===e)[0],je=e=>Vx(e)?.key??String(e.id),dl=(e,t)=>{const r=Vx(e);return{label:String(e.title||t),meta:`${r?.breadcrumb?`${r.breadcrumb} · `:""}#${e.id}`}},Ts=(e,t,r,o)=>{const n=o.widgets?.find(c=>c.name===r);if(!n||n.disabled)return;const i=je(o),a=$o(e),l=()=>n.callback?.();a&&a!==i?yf(`${t}:${a}`,`${t}:${i}`,l,ri()==="replace"):l(),to(e,i)},tg=(e,t)=>{e==="regional"?window.dispatchEvent(new CustomEvent(Yn,{detail:{node:t}})):e==="detailer"?Ts("detailer","detailer-plan","configure_detailer_plan",t):e==="detector"?Ts("detector","detector-registry","configure_detector_registry",t):window.dispatchEvent(new CustomEvent("bv-open-smart-pipe-editor",{detail:{node:t,kind:e}}))},oT=()=>{const e=[{type:"regional",nodes:rn()},{type:"detailer",nodes:Ft("BV Regional Detailer Plan")},{type:"detector",nodes:Ft("BV Detector Registry")},{type:"pipe",nodes:Ft("BV Smart Pipe")},{type:"merge",nodes:Ft("BV Smart Pipe Merge")}],t=U1(),r=t&&$o(t),o=e.find(i=>i.type===t)?.nodes.find(i=>je(i)===r);if(o){tg(t,o);return}const n=e.flatMap(i=>i.nodes.map(a=>({type:i.type,node:a}))).sort((i,a)=>(Number(i.node.id)||Number.MAX_SAFE_INTEGER)-(Number(a.node.id)||Number.MAX_SAFE_INTEGER))[0];n&&(tg(n.type,n.node),t&&Ir({title:"Previous editor unavailable",message:"Opened the first available BV editor instead.",tone:"warning",duration:4e3}))},hd=()=>{const e=rt.graph,t=[],r=o=>{for(const n of o?._nodes??[]){if(n.type==="BV Named LoRA Stack"){const i=String(n.widgets?.find(l=>l.name==="stack_id")?.value??"").trim(),a=String(n.widgets?.find(l=>l.name==="name")?.value??"").trim();i&&a&&t.push({id:i,name:a,nodeId:String(n.id)})}n.subgraph&&r(n.subgraph)}};return r(e),t.sort((o,n)=>o.name.localeCompare(n.name))},nT=()=>sE(rn().flatMap(e=>{try{const t=dn(e.widgets?.find(r=>r.name==="regional_json")?.value);return[{documentId:t.document_id,nodeId:String(e.id),title:e.title||t.title||"BV Regional Prompt"}]}catch{return[]}})),rg=(e,t=!1)=>{const r=e.widgets?.find(a=>a.name==="document_id"),o=e.widgets?.find(a=>a.name==="target_editor");if(!r||!o)return;const n=nT(),i=cE(r.value,n,t);r.value=i,e.__bvDocumentTargets=n,o.options??(o.options={}),o.options.values=n.length?n.map(a=>a.label):["No BV Regional Prompt available"],o.value=n.find(a=>a.documentId===i)?.label??(i?`Missing target · ${i.slice(0,8)}`:o.options.values[0]),o.disabled=!n.length,e.setDirtyCanvas?.(!0,!0)},og=(e,t=!1)=>{const r=e.widgets?.find(n=>n.name==="document_id");if(!r)return;jr(r);let o=e.widgets?.find(n=>n.name==="target_editor");if(o||(o=e.addWidget("combo","target_editor","No BV Regional Prompt available",n=>{const i=e.__bvDocumentTargets?.find(a=>a.label===n);i&&(r.value=i.documentId)},{values:["No BV Regional Prompt available"],serialize:!1}),o.label="target_editor",o.serialize=!1),!e.__bvDocumentTargetListener){e.__bvDocumentTargetListener=()=>rg(e,!1),window.addEventListener(yo,e.__bvDocumentTargetListener);const n=e.onRemoved;e.onRemoved=function(){return window.removeEventListener(yo,e.__bvDocumentTargetListener),n?.apply(this,arguments)}}rg(e,t)},ng=(e,t=!1)=>{const r=e.widgets?.find(o=>o.name==="regional_json");if(r)try{const o=t?gh():dn(r.value);!t&&rn().some(a=>{if(a===e)return!1;try{return dn(a.widgets?.find(l=>l.name==="regional_json")?.value).document_id===o.document_id}catch{return!1}})&&(o.document_id=crypto.randomUUID()),r.value=JSON.stringify(o);const i=e.widgets?.find(a=>a.name==="lora_bindings_json");if(i)try{const a={...Af(i.value,t?"":o.document_id),document_id:o.document_id};i.value=JSON.stringify(Hn(a,new Set(o.regions.map(l=>l.id))))}catch{i.value=JSON.stringify(Qs(o.document_id))}}catch{r.value=JSON.stringify(gh())}};function iT(){const[e,t]=m.useState(!1),[r,o]=m.useState(!1),[n,i]=m.useState(!1),[a,l]=m.useState(0),[c,u]=m.useState(!1),[d,f]=m.useState(0),[p,g]=m.useState(null),[x,w]=m.useState([]),[k,b]=m.useState({}),[h,v]=m.useState([]),[_,y]=m.useState(null),T=m.useCallback((S=!1)=>{const z=rn(),N=Ft("BV Regional Detailer Plan"),B=Ft("BV Detector Registry"),P=[...Ft("BV Smart Pipe"),...Ft("BV Smart Pipe Merge")],O=(A,C)=>{const R=!mn(A);return R&&!S?null:{...C,hidden:R,onReveal:R?()=>fi(A,!0):void 0}};return[{id:"regional",label:"Regional Prompts",items:z.map(A=>{const C=dl(A,"BV Regional Prompt"),R=$o("regional")===je(A);return O(A,{id:je(A),...C,meta:`${C.meta}${R?" · Last active":""}`,onSelect:()=>window.dispatchEvent(new CustomEvent(Yn,{detail:{node:A}})),secondary:{label:`Quick edit ${C.label}`,onSelect:()=>window.dispatchEvent(new CustomEvent(Gi,{detail:{node:A}}))}})}).filter(Boolean)},{id:"detailer",label:"Detailer Plan",items:N.map(A=>{const C=dl(A,"BV Regional Detailer Plan"),R=A.widgets?.find(D=>D.name==="configure_detailer_plan"),M=$o("detailer")===je(A);return O(A,{id:je(A),...C,disabled:!R||R.disabled,meta:`${C.meta}${R?.disabled?" · Connect Regional Prompt":M?" · Last active":""}`,onSelect:()=>Ts("detailer","detailer-plan","configure_detailer_plan",A)})}).filter(Boolean)},{id:"detector",label:"Detector Registry",items:B.map(A=>{const C=dl(A,"BV Detector Registry"),R=$o("detector")===je(A);return O(A,{id:je(A),...C,meta:`${C.meta}${R?" · Last active":""}`,onSelect:()=>Ts("detector","detector-registry","configure_detector_registry",A)})}).filter(Boolean)},{id:"smart-pipe",label:"Smart Pipes",items:P.map(A=>{const C=String(A.type??A.comfyClass)==="BV Smart Pipe Merge"?"merge":"pipe",R=dl(A,C==="merge"?"Smart Pipe Merge":"Smart Pipe");return O(A,{id:je(A),...R,meta:`${R.meta} · ${C==="merge"?"Merge":"Pipe"}`,onSelect:()=>window.dispatchEvent(new CustomEvent("bv-open-smart-pipe-editor",{detail:{node:A,kind:C}}))})}).filter(Boolean)}]},[]);return m.useEffect(()=>{if(!(!n&&!c))return hE(rt,_r,()=>{i(!1),u(!1)})},[c,n]),m.useEffect(()=>{const S=()=>t(!0);return window.addEventListener(fd,S),()=>window.removeEventListener(fd,S)},[]),m.useEffect(()=>{const S=z=>y(z.detail?.node??null);return window.addEventListener(ld,S),()=>window.removeEventListener(ld,S)},[]),m.useEffect(()=>{const S=z=>o(!!z.detail?.control);return window.addEventListener("bv-toolbar-capabilities-changed",S),Ki(),()=>window.removeEventListener("bv-toolbar-capabilities-changed",S)},[]),m.useEffect(()=>{const S=z=>{const N=z.detail?.node??null,B=rn();v(hd()),w(B);const P=N??B.find(O=>je(O)===$o("quick"))??B[0]??null;P&&to("quick",je(P)),g(P),i(!1),u(!0),f(O=>O+1)};return window.addEventListener(Gi,S),()=>window.removeEventListener(Gi,S)},[]),m.useEffect(()=>{const S=z=>{const N=z.detail?.output,B=N?.bv_regional_background?.[0]?.document_id,P=N?.images?.[N.images.length-1];if(!B||!P)return;const O=new URLSearchParams({filename:P.filename,type:P.type,subfolder:P.subfolder||""});b(E=>({...E,[B]:_r.apiURL(`/view?${O}`)}))};return _r.addEventListener("executed",S),()=>_r.removeEventListener("executed",S)},[]),m.useEffect(()=>{const S=z=>{const N=z.detail?.node??null,B=rn();v(hd()),w(B);const P=N??B.find(O=>je(O)===$o("regional"))??B[0]??null;P&&to("regional",je(P)),g(P),P&&c&&String(p?.id)===String(P.id)&&u(!1),i(!0),l(O=>O+1)};return window.addEventListener(Yn,S),()=>window.removeEventListener(Yn,S)},[c,p]),s.jsxs(s.Fragment,{children:[s.jsx(B1,{}),s.jsx(e1,{getColumns:T}),s.jsx(H1,{}),s.jsx(W1,{open:e,hasControlNodes:r,onClose:()=>t(!1)}),s.jsx(WE,{open:!!_,node:_,onClose:()=>y(null)}),s.jsx(nE,{open:n,activationToken:a,nodes:x,initialNode:p,backgrounds:k,loraStacks:h,onClose:()=>i(!1)}),s.jsx(lE,{open:c,activationToken:d,nodes:x,initialNode:p,loraStacks:h,onClose:()=>u(!1),onOpenEditor:S=>{to("regional",je(S)),g(S),u(!1),i(!0),l(z=>z+1)}})]})}const ig="bv-root";function aT(){if(!document.getElementById(qh)){const t=document.createElement("style");t.id=qh,t.textContent=`${K1} +${G1}`,document.head.appendChild(t)}let e=document.getElementById(ig);e||(e=document.createElement("div"),e.id=ig,document.body.appendChild(e),qi.createRoot(e).render(s.jsx(Re.StrictMode,{children:s.jsx(iT,{})})))}rt.registerExtension({name:"bv_nodepack.control_rack_portal",setup(){aT(),jf(rt.canvas),W0(rt.ui?.settings),pE(),tn=!!rt.ui?.settings?.getSettingValue?.(zx,!1),Fx(tn).then(()=>{tn&&Es()}).catch(e=>console.error(e)),_r.addEventListener("graphChanged",Es),_r.addEventListener("graphChanged",Ki)}});rt.registerExtension({name:"bv_nodepack.regional_editor",settings:[{id:zv,name:"BV Interface Size",type:"combo",defaultValue:"default",options:[{text:"Compact",value:"compact"},{text:"Default",value:"default"},{text:"Large",value:"large"}],category:["BV Node Pack","Appearance","Interface size"],tooltip:"Scale every BV-owned interface consistently. Default is the comfortable size; Compact matches the former standard.",onChange:e=>Vv(e)},{id:Fv,name:"Reduce BV Interface Effects",type:"boolean",defaultValue:!1,category:["BV Node Pack","Appearance","Reduced effects"],tooltip:"Disable BV animations, transitions, blur and visual filters without changing ComfyUI's canvas.",onChange:e=>Wv(e)},{id:_f,name:"BV Window Switch Mode",type:"combo",defaultValue:"keep",options:[{text:"Keep current window",value:"keep"},{text:"Replace current window",value:"replace"}],category:["BV Node Pack","Appearance","Window switching"],tooltip:"Choose whether changing the node in a BV editor minimizes or closes the current window. Hold Shift to invert the mode once.",onChange:e=>wf(e,!1)},{id:zx,name:"Enable BV Debug Bridge",type:"boolean",defaultValue:!1,category:["BV Node Pack","Developer","Enable Debug Bridge"],tooltip:"Expose the current API-format workflow as an in-memory snapshot to loopback clients only.",onChange:e=>{Fx(!!e).then(()=>{e&&Es()}).catch(t=>console.error(t))}},{id:Pm,name:"Enable BV Prompt Autocomplete",type:"boolean",defaultValue:!0,category:["BV Node Pack","Prompting","Enable autocomplete"],tooltip:"Enable BV-owned prompt completion. Disable this when another autocomplete extension should control prompt fields.",onChange:e=>Xm(!!e)},{id:zm,name:"Autocomplete Popup Position",type:"combo",defaultValue:"caret",options:[{text:"At Caret",value:"caret"},{text:"Below Text Field",value:"field"}],category:["BV Node Pack","Prompting","Popup position"],tooltip:"Open suggestions at the active caret or below the complete text field.",onChange:e=>$m(e)},{id:Bm,name:"Completion Datasets",type:uE,defaultValue:"",category:["BV Node Pack","Prompting","Completion datasets"],tooltip:"Choose one or more local CSV/TSV datasets for BV Prompt Autocomplete.",onChange:e=>Jm(e)}],commands:[{id:"bv.regional.openEditor",label:"Open BV Regional Editor",icon:"icon-[lucide--layers]",function:()=>{window.dispatchEvent(new CustomEvent(Yn))}},{id:"bv.debugBridge.publishSnapshot",label:"Refresh BV Debug Bridge Snapshot",icon:"icon-[lucide--radio-tower]",function:()=>Ux().catch(e=>console.error(e))}],actionBarButtons:[{icon:"icon-[lucide--sliders-horizontal]",class:"bv-regional-action bv-regional-action-control",tooltip:"Open BV Control Center",onClick:()=>window.dispatchEvent(new Event(fd))},{icon:"icon-[lucide--scan-search]",class:"bv-regional-action bv-regional-action-editor",tooltip:"Open last BV editor",onClick:oT},{icon:"icon-[lucide--layers]",class:"bv-regional-action bv-regional-action-quick",tooltip:"Quick edit BV Regional prompts",onClick:()=>window.dispatchEvent(new CustomEvent(Gi))},{icon:"icon-[lucide--chevron-down]",class:"bv-regional-action bv-regional-action-menu",tooltip:"Choose BV window",onClick:()=>window.dispatchEvent(new CustomEvent(as))}],beforeRegisterNodeDef(e,t){if(VE(e,t)||rE(e,t))return;if(["BV Control Center","BV Regional Prompt","BV Regional Detailer Plan","BV Detector Registry","BV Smart Pipe","BV Smart Pipe Merge"].includes(t.name)){const i=e.prototype.onNodeCreated,a=e.prototype.onRemoved;e.prototype.onNodeCreated=function(){const l=i?.apply(this,arguments);return t.name!=="BV Control Center"&&(this.properties??(this.properties={}),typeof this.properties.bvWindowMenuVisible!="boolean"&&(this.properties.bvWindowMenuVisible=!["BV Smart Pipe","BV Smart Pipe Merge"].includes(t.name))),queueMicrotask(Ki),l},e.prototype.onRemoved=function(){const l=a?.apply(this,arguments);return queueMicrotask(Ki),l}}if(EE.has(t.name)){const i=e.prototype.onNodeCreated,a=e.prototype.onConfigure;e.prototype.onNodeCreated=function(){const l=i?.apply(this,arguments);return queueMicrotask(()=>Jh(this,t.name)),l},e.prototype.onConfigure=function(l){const c=a?.call(this,l);return queueMicrotask(()=>Jh(this,t.name)),c}}if(t.name==="BV Detector Registry"){const i=u=>{const d=u.widgets?.find(g=>g.name==="config_json");if(!d)return;jr(d);let f=u.widgets?.find(g=>g.name==="configure_detector_registry");f||(f=u.addWidget("button","configure_detector_registry",null,()=>{to("detector",je(u)),_E(_r,d.value,g=>{d.value=g,i(u),u.graph?.setDirtyCanvas?.(!0,!0)},`detector-registry:${je(u)}`,Ft("BV Detector Registry").filter(mn).map(g=>({id:je(g),label:`${g.title||"BV Detector Registry"} · #${g.id}`})),(g,x)=>{const w=Ft("BV Detector Registry").find(b=>je(b)===g),k=w?.widgets?.find(b=>b.name==="configure_detector_registry");k&&yf(`detector-registry:${je(u)}`,`detector-registry:${je(w)}`,()=>k.callback?.(),x)},u).catch(g=>console.error(g))},{serialize:!1}),f.serialize=!1);const p=Xi(d.value).detectors.length;f.label=`Configure Detector Registry · ${p} Detector${p===1?"":"s"}`,u.setDirtyCanvas?.(!0,!0)},a=e.prototype.onNodeCreated,l=e.prototype.onConfigure,c=e.prototype.onConnectionsChange;e.prototype.onNodeCreated=function(){const u=a?.apply(this,arguments);return queueMicrotask(()=>{i(this),Jc(this)}),u},e.prototype.onConfigure=function(){const u=l?.apply(this,arguments);return queueMicrotask(()=>{i(this),Jc(this)}),u},e.prototype.onConnectionsChange=function(){const u=c?.apply(this,arguments);return queueMicrotask(()=>Jc(this)),u};return}if(t.name==="BV Regional Detailer Plan"){const i=e.prototype.onNodeCreated,a=e.prototype.onConfigure,l=e.prototype.onConnectionsChange;e.prototype.onNodeCreated=function(){const c=i?.apply(this,arguments);return queueMicrotask(()=>Zh(this)),c},e.prototype.onConfigure=function(){const c=a?.apply(this,arguments);return queueMicrotask(()=>Zh(this)),c},e.prototype.onConnectionsChange=function(){const c=l?.apply(this,arguments);return queueMicrotask(()=>pd(this)),c};return}if(t.name==="BV Remote LLM Provider"){const i=e.prototype.onNodeCreated,a=e.prototype.onConfigure;e.prototype.onNodeCreated=function(){const l=i?.apply(this,arguments);return queueMicrotask(()=>Vh(this,_r)),l},e.prototype.onConfigure=function(l){Array.isArray(l?.widgets_values)&&l.widgets_values.length>=6&&/^[A-Za-z_][A-Za-z0-9_]*$/.test(String(l.widgets_values[3]??""))&&(l={...l,widgets_values:[...l.widgets_values.slice(0,3),...l.widgets_values.slice(4)]});const c=a?.call(this,l);return queueMicrotask(()=>Vh(this,_r)),c};return}if(t.name==="BV Named LoRA Stack"){const i=c=>{const u=c.widgets?.find(f=>f.name==="stack_id");if(!u)return;const d=String(u.value??"").trim();if(!d||Ak(String(c.id),d,hd())){const f=crypto.randomUUID();d&&(c.__bvLoraResourceIdRemap={[d]:f}),u.value=f,c.setDirtyCanvas?.(!0,!0)}jr(u)},a=e.prototype.onNodeCreated,l=e.prototype.onConfigure;e.prototype.onNodeCreated=function(){const c=a?.apply(this,arguments);return i(this),c},e.prototype.onConfigure=function(){const c=l?.apply(this,arguments);return queueMicrotask(()=>i(this)),c};return}if(t.name==="BV Regional Image Send"||t.name==="BV Regional Image Save"){const i=e.prototype.onNodeCreated,a=e.prototype.onConfigure;e.prototype.onNodeCreated=function(){const l=i?.apply(this,arguments);return queueMicrotask(()=>og(this,!0)),l},e.prototype.onConfigure=function(){const l=a?.apply(this,arguments);return queueMicrotask(()=>og(this,!1)),l};return}if(["BV Regional Select","BV Regional Deconstructor","BV Regional Detailer Mask"].includes(t.name)){const i=e.prototype.onNodeCreated,a=e.prototype.onConfigure,l=e.prototype.onConnectionsChange;e.prototype.onNodeCreated=function(){const u=i?.apply(this,arguments);return eg(this),u};const c=e.prototype.onSerialize;e.prototype.onConfigure=function(u){t.name==="BV Regional Detailer Mask"&&(tT(this),u?.widgets_values&&(u={...u,widgets_values:bE(u.widgets_values)}));const d=a?.call(this,u);return queueMicrotask(()=>eg(this)),d},e.prototype.onSerialize=function(u){const d=c?.apply(this,arguments);return t.name==="BV Regional Detailer Mask"&&(u.widgets_values=gE(this.widgets)),d},e.prototype.onConnectionsChange=function(){const u=l?.apply(this,arguments);return queueMicrotask(()=>Ml(this)),u};return}if(t.name!=="BV Regional Prompt")return;const r=e.prototype.onNodeCreated,o=e.prototype.onConfigure;e.prototype.onNodeCreated=function(){const i=r?.apply(this,arguments);ng(this,!0);const a=this.widgets?.find(u=>u.name==="regional_json"),l=this.widgets?.find(u=>u.name==="lora_bindings_json"),c=this.widgets?.find(u=>u.name==="lora_v3_config_json");if(l&&jr(l),c&&wa(c),ms(this),a&&(jr(a),!a.__bvRegionalDocumentHooked)){a.__bvRegionalDocumentHooked=!0;const u=a.callback;a.callback=function(){const d=u?.apply(this,arguments);return window.dispatchEvent(new CustomEvent(yo)),d}}if(!this.widgets?.find(u=>u.name==="open_regional_editor")){const u=this.addWidget("button","open_regional_editor",null,()=>window.dispatchEvent(new CustomEvent(Yn,{detail:{node:this}})),{serialize:!1});u.label="Open Regional Editor",u.serialize=!1}if(!this.widgets?.find(u=>u.name==="quick_edit_regional_prompts")){const u=this.addWidget("button","quick_edit_regional_prompts",null,()=>window.dispatchEvent(new CustomEvent(Gi,{detail:{node:this}})),{serialize:!1});u.label="Quick Edit Prompts",u.serialize=!1}return this.setSize?.([Math.max(this.size?.[0]??0,220),this.computeSize?.()[1]??60]),window.dispatchEvent(new CustomEvent(yo)),i},e.prototype.onConfigure=function(){const i=o?.apply(this,arguments);ng(this,!1);const a=this.widgets?.find(c=>c.name==="lora_bindings_json"),l=this.widgets?.find(c=>c.name==="lora_v3_config_json");return a&&jr(a),l&&wa(l),ms(this),window.dispatchEvent(new CustomEvent(yo)),i};const n=e.prototype.onRemoved;e.prototype.onRemoved=function(){const i=n?.apply(this,arguments);return window.dispatchEvent(new CustomEvent(yo)),i}},afterConfigureGraph(){Es(),queueMicrotask(Ki)}}); diff --git a/tests/regional_lora_v3_picker.test.mjs b/tests/regional_lora_v3_picker.test.mjs index 6c86b8a..2dff039 100644 --- a/tests/regional_lora_v3_picker.test.mjs +++ b/tests/regional_lora_v3_picker.test.mjs @@ -3,35 +3,45 @@ import test from "node:test"; import {readFileSync} from "node:fs"; import React from "../ui/node_modules/react/index.js"; import {renderToStaticMarkup} from "../ui/node_modules/react-dom/server.node.js"; -import {LoraV3ResourcePickerPanel,OptionalLoraV3ScopePicker} from "../ui/src/regional/LoraV3ResourcePickerPanel.tsx"; +import {LoraV3ResourcePickerPanel,OptionalLoraV3ScopePicker,withoutLoraV3Target} from "../ui/src/regional/LoraV3ResourcePickerPanel.tsx"; import {emptyLoraV3Config,parseLoraV3Config,serializeLoraV3Config} from "../ui/src/regional/loraV3Config.ts"; const collectors=[{id:"collector",label:"Styles",resources:[{id:"skin",label:"Skin"}]}]; test("the production picker renders Collector / Resource from persisted ids",()=>{ const config={version:1,collector_id:"collector",entries:[{id:"entry",source:{kind:"external",resource_id:"skin"},targets:[{scope:"global"}]}]}; - const html=renderToStaticMarkup(React.createElement(LoraV3ResourcePickerPanel,{collectors,config,resolved:true,onCollector(){},onResource(){},onAddExternal(){}})); - assert.match(html,/Styles \/ Skin/);assert.match(html,/External LoRA Stack 1/); + const html=renderToStaticMarkup(React.createElement(LoraV3ResourcePickerPanel,{collectors,config,resolved:true,targetOptions:[{value:"global",label:"Global",target:{scope:"global"}}],onCollector(){},onResource(){},onAddExternal(){}})); + assert.match(html,/Global/);assert.match(html,/LoRA Stack 1/);assert.doesNotMatch(html,/Styles \/ Skin/); }); test("an unresolved production selection remains explicit",()=>{ const config={version:1,collector_id:"missing",entries:[{id:"entry",source:{kind:"external",resource_id:"skin"},targets:[{scope:"global"}]}]}; - const html=renderToStaticMarkup(React.createElement(LoraV3ResourcePickerPanel,{collectors,config,resolved:false,onCollector(){},onResource(){},onAddExternal(){}})); - assert.match(html,/Unresolved resource selection/); + const html=renderToStaticMarkup(React.createElement(LoraV3ResourcePickerPanel,{collectors,config,resolved:false,targetOptions:[{value:"global",label:"Global",target:{scope:"global"}}],onCollector(){},onResource(){},onAddExternal(){},onRemove(){}})); + assert.match(html,/is-unresolved/);assert.doesNotMatch(html,/Unresolved resource selection/); }); test("config serialization is named and deterministic outside positional visual widgets",()=>{ const value=emptyLoraV3Config();assert.deepEqual(parseLoraV3Config(serializeLoraV3Config(value)),value); }); test("external entries cannot be created without a live collector resource",()=>{ - const html=renderToStaticMarkup(React.createElement(LoraV3ResourcePickerPanel,{collectors:[],config:emptyLoraV3Config(),resolved:false,onCollector(){},onResource(){},onAddExternal(){}})); + const html=renderToStaticMarkup(React.createElement(LoraV3ResourcePickerPanel,{collectors:[],config:emptyLoraV3Config(),resolved:false,targetOptions:[{value:"global",label:"Global",target:{scope:"global"}}],onCollector(){},onResource(){},onAddExternal(){},onRemove(){}})); assert.match(html,/disabled=""/); }); -test("the advanced LoRA editor exposes assignment targets for every stack",()=>{ +test("the advanced LoRA editor groups multiple stacks below every assignment target",()=>{ const config={version:1,collector_id:"collector",entries:[{id:"entry",source:{kind:"external",resource_id:"skin"},targets:[{scope:"global"},{scope:"region",document_id:"doc",region_id:"left"}]}]}; - const html=renderToStaticMarkup(React.createElement(LoraV3ResourcePickerPanel,{collectors,config,resolved:true,targetOptions:[{value:"global",label:"Global",target:{scope:"global"}},{value:"region:doc:left",label:"Left",target:{scope:"region",document_id:"doc",region_id:"left"}}],onCollector(){},onResource(){},onTargets(){},onAddExternal(){}})); - assert.match(html,/Assignment targets/);assert.match(html,/Global/);assert.match(html,/Left/); + const html=renderToStaticMarkup(React.createElement(LoraV3ResourcePickerPanel,{collectors,config,resolved:true,targetOptions:[{value:"global",label:"Global",target:{scope:"global"}},{value:"region:doc:left",label:"Left",target:{scope:"region",document_id:"doc",region_id:"left"}}],onCollector(){},onResource(){},onAddExternal(){}})); + assert.match(html,/Global/);assert.match(html,/Left/);assert.match(html,/Add LoRA stack/);assert.doesNotMatch(html,/Assignment targets/); }); test("Regional Prompt easy mode starts with a BV toggle and hides an unassigned picker",()=>{ - const html=renderToStaticMarkup(React.createElement(OptionalLoraV3ScopePicker,{label:"Global LoRA Stack",collectors,config:emptyLoraV3Config(),target:{scope:"global"},resolved:false,onValue(){}})); - assert.match(html,/role="switch"/);assert.match(html,/Disabled/);assert.doesNotMatch(html,/No resource selected|Collector/); + const html=renderToStaticMarkup(React.createElement(OptionalLoraV3ScopePicker,{collectors,config:emptyLoraV3Config(),target:{scope:"global"},resolved:false,onCollector(){},onResource(){},onAdd(){},onRemove(){},onClear(){}})); + assert.match(html,/role="switch"/);assert.match(html,/LoRA disabled/);assert.doesNotMatch(html,/No resource selected|Collector/); +}); +test("Regional Prompt easy mode renders every stack assigned to its scope",()=>{ + const config={version:1,collector_id:"collector",entries:[{id:"first",source:{kind:"external",resource_id:"skin"},targets:[{scope:"global"}]},{id:"second",source:{kind:"external",resource_id:"skin"},targets:[{scope:"global"}]}]}; + const html=renderToStaticMarkup(React.createElement(OptionalLoraV3ScopePicker,{collectors,config,target:{scope:"global"},resolved:true,onCollector(){},onResource(){},onAdd(){},onRemove(){},onClear(){}})); + assert.match(html,/LoRA enabled/);assert.match(html,/LoRA Stack 1/);assert.match(html,/LoRA Stack 2/);assert.match(html,/Add LoRA stack/); +}); +test("removing one scope preserves shared assignments and the input config",()=>{ + const original={version:1,collector_id:"collector",entries:[{id:"shared",source:{kind:"external",resource_id:"skin"},targets:[{scope:"global"},{scope:"region",document_id:"doc",region_id:"left"}]}]}; + const next=withoutLoraV3Target(original,{scope:"global"},"shared"); + assert.deepEqual(next.entries[0].targets,[{scope:"region",document_id:"doc",region_id:"left"}]);assert.equal(original.entries[0].targets.length,2); }); test("production LoRA presentation keeps ComfyUI links authoritative",()=>{ const source=readFileSync(new URL("../ui/src/regional/loraV3Ui.tsx",import.meta.url),"utf8"); diff --git a/tests/regional_v3_m0_resource_picker.test.mjs b/tests/regional_v3_m0_resource_picker.test.mjs index b4879e6..9941fd6 100644 --- a/tests/regional_v3_m0_resource_picker.test.mjs +++ b/tests/regional_v3_m0_resource_picker.test.mjs @@ -14,13 +14,13 @@ const collectors=[{id:"collector-1",label:"Collector One",resources:[{id:"resour test("a catalog match without a real link stays visibly unresolved",()=>{ const html=renderToStaticMarkup(React.createElement(ResourcePicker,{collectors,collectorId:"collector-1",resourceId:"resource-1",resolved:false,onCollector(){},onResource(){}})); assert.match(html,/is-unresolved/); - assert.match(html,/Unresolved resource selection/); + assert.doesNotMatch(html,/Unresolved resource selection/); assert.doesNotMatch(html,/Collector One \/ Alpha/); }); -test("a linked id selection renders the closed Collector / Resource summary",()=>{ +test("a linked id selection renders both closed BV dropdown values without a duplicate summary",()=>{ const html=renderToStaticMarkup(React.createElement(ResourcePicker,{collectors,collectorId:"collector-1",resourceId:"resource-1",resolved:true,onCollector(){},onResource(){}})); - assert.match(html,/Collector One \/ Alpha/); + assert.match(html,/>Collector OneAlpha{ @@ -77,8 +77,7 @@ test("a direct same-graph link resolves its local collector",()=>{ test("the shared resource picker uses BV popover selects and treats empty as neutral",()=>{ const html=renderToStaticMarkup(React.createElement(ResourcePicker,{collectors,collectorId:"",resourceId:"",resolved:false,onCollector(){},onResource(){}})); - assert.match(html,/No resource selected/); - assert.doesNotMatch(html,/Unresolved resource selection|{ const html=renderToStaticMarkup(React.createElement(M0ResourcePickerPanel,{collectors,collectorId:"collector-1",resourceId:"resource-1",resolved:true,debugVisible:false,onCollector(){},onResource(){},onDebug(){}})); assert.match(html,/Hidden link debug/); assert.match(html,/role="switch"/); - assert.match(html,/Collector One \/ Alpha/); + assert.match(html,/>Collector OneAlpha{ diff --git a/ui/src/index.css b/ui/src/index.css index affc96a..b62b333 100644 --- a/ui/src/index.css +++ b/ui/src/index.css @@ -582,9 +582,9 @@ .bv-showcase>aside a:hover { background:rgba(var(--bv-ui-accent-rgb),.12); } .bv-image-preview-action:hover:not(:disabled),.bv-image-picker-toggle:hover:not(:disabled) { background:rgba(var(--bv-ui-accent-rgb),.13); } .bv-image-preview-icon { color:var(--bv-ui-accent-soft); background:rgba(var(--bv-ui-accent-rgb),.13); border-color:rgba(var(--bv-ui-accent-rgb),.25); } -.bv-m0-picker-host{position:relative;z-index:1;padding:6px}.bv-m0-picker-panel{display:grid;gap:7px}.bv-m0-picker-panel>.bv-control-field{grid-template-columns:1fr auto;align-items:center}.bv-m0-picker-panel>.bv-control-field>.bv-toggle{justify-self:end}.bv-resource-picker{display:grid;gap:5px}.bv-resource-picker-summary{padding:5px 7px;border:1px solid var(--bv-ui-border);border-radius:4px}.bv-resource-picker.is-unresolved .bv-resource-picker-summary{color:var(--bv-ui-danger);border-color:var(--bv-ui-danger)}.bv-resource-picker .bv-field-grid{align-items:end}.bv-resource-picker .bv-select-trigger{width:100%} +.bv-m0-picker-host{position:relative;z-index:1;padding:6px}.bv-m0-picker-panel{display:grid;gap:7px}.bv-m0-picker-panel>.bv-control-field{grid-template-columns:1fr auto;align-items:center}.bv-m0-picker-panel>.bv-control-field>.bv-toggle{justify-self:end}.bv-resource-picker{display:grid;gap:5px}.bv-resource-picker.is-unresolved .bv-select-trigger{border-color:var(--bv-ui-danger)}.bv-resource-picker .bv-field-grid{align-items:end}.bv-resource-picker .bv-select-trigger{width:100%} .lg-node:has([node-type="BV M0 Fake Resource Collector"]) [node-type="BV M0 Fake Resource Collector"]:has(input[aria-label="collector_id"]),.lg-node:has([node-type="BV M0 Fake Resource Collector"]) [node-type="BV M0 Fake Resource Collector"]:has(input[aria-label="resource_a_id"]),.lg-node:has([node-type="BV M0 Fake Resource Collector"]) [node-type="BV M0 Fake Resource Collector"]:has(input[aria-label="resource_b_id"]),.lg-node:has([node-type="BV M0 Fake Resource Consumer"]) [node-type="BV M0 Fake Resource Consumer"]:has(input[aria-label="collector_id"]),.lg-node:has([node-type="BV M0 Fake Resource Consumer"]) [node-type="BV M0 Fake Resource Consumer"]:has(input[aria-label="resource_id"]){display:none} .lg-slot:has(circle[fill*="BV_RUNTIME_RESOURCE_PROVIDER_M0"],[style*="BV_RUNTIME_RESOURCE_PROVIDER_M0"]){display:none!important} .lg-slot:has(circle[fill*="BV_RUNTIME_RESOURCE_PROVIDER"],[style*="BV_RUNTIME_RESOURCE_PROVIDER"]){display:none!important} -.bv-lora-v3-picker-host{position:relative;z-index:1;padding:6px}.bv-lora-v3-picker-panel{display:grid;gap:8px}.bv-lora-v3-picker-panel>section{display:grid;gap:7px;padding:8px;border:1px solid var(--bv-ui-border);border-radius:4px}.bv-optional-lora-scope{display:grid;gap:7px}.bv-lora-v3-scope-picker{display:grid;gap:5px}.bv-lora-v3-window{display:grid;gap:10px;padding:10px;overflow:auto} +.bv-lora-v3-picker-host{position:relative;z-index:1;padding:6px}.bv-lora-v3-picker-panel{display:grid;gap:10px}.bv-lora-v3-target{display:grid;gap:8px;padding:9px;border:1px solid var(--bv-ui-border);border-radius:4px}.bv-lora-v3-target>h3{margin:0}.bv-optional-lora-scope{display:grid;gap:7px}.bv-lora-v3-enable-row{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:start;gap:12px}.bv-lora-v3-enable-row>.bv-control-field>.bv-control-label{display:none}.bv-lora-v3-enable-row>.bv-control-field{padding-top:20px}.bv-lora-v3-scope-picker{display:grid;gap:8px}.bv-lora-v3-stack-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:6px 8px;align-items:end;padding:7px;border:1px solid var(--bv-ui-border);border-radius:4px}.bv-lora-v3-stack-row>strong,.bv-lora-v3-stack-row>.bv-resource-picker{grid-column:1}.bv-lora-v3-stack-row>.bv-button{grid-column:2;grid-row:2}.bv-lora-v3-window{display:grid;gap:10px;padding:10px;overflow:auto} .lg-node:has([node-type="BV M0 Fake Multi Resource Consumer"]) [node-type="BV M0 Fake Multi Resource Consumer"]:has(input[aria-label="resource_bindings"]){display:none}.bv-m0-multi-picker{max-height:520px;overflow:auto}.bv-m0-binding{display:grid;gap:5px;padding:6px;border:1px solid var(--bv-ui-border);border-radius:4px}.bv-m0-binding>header{display:flex;align-items:center;justify-content:space-between}.bv-m0-binding>header button,.bv-m0-add-binding{color:var(--bv-ui-text);background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:4px}.bv-m0-binding>header button{width:24px;height:24px}.bv-m0-add-binding{min-height:28px} diff --git a/ui/src/regional/LoraV3EditorWindow.tsx b/ui/src/regional/LoraV3EditorWindow.tsx index 29189cd..1fc8fb4 100644 --- a/ui/src/regional/LoraV3EditorWindow.tsx +++ b/ui/src/regional/LoraV3EditorWindow.tsx @@ -2,8 +2,7 @@ import React, { useEffect, useState } from "react"; import { BvSelect } from "../ui/controls"; import { BvManagedWindow } from "../ui/window"; import { LoraV3ResourcePickerPanel, type LoraV3Config } from "./LoraV3ResourcePickerPanel"; -import { connectLoraConsumerTree } from "./loraV3Graph"; -import { loraV3Catalog, loraV3Resolved, loraV3TargetOptions, readNodeLoraV3Config, writeNodeLoraV3Config } from "./loraV3Ui"; +import { addLoraV3TargetEntry, loraV3Catalog, loraV3Resolved, loraV3TargetOptions, readNodeLoraV3Config, removeLoraV3TargetEntry, setLoraV3Collector, setLoraV3EntryResource } from "./loraV3Ui"; const widget=(node:any,name:string)=>node?.widgets?.find((item:any)=>item.name===name); @@ -12,11 +11,10 @@ export default function LoraV3EditorWindow({open,node,onClose}:{open:boolean;nod useEffect(()=>{if(open&&node)setConfig(readNodeLoraV3Config(node));},[node,open]); if(!node)return null; const collectors=loraV3Catalog(node).filter(item=>item.resources.length>0),resolved=loraV3Resolved(node,config),targetOptions=loraV3TargetOptions(node); - const save=(next:LoraV3Config)=>{writeNodeLoraV3Config(node,next);setConfig(next);}; return
{const item=widget(node,"operation");if(item){item.value=value;item.callback?.(value);node.setDirtyCanvas?.(true,true);}}}> - {const choice=collectors.find(item=>item.id===id),first=choice?.resources[0]?.id??"";connectLoraConsumerTree(node,choice?.node??null);save({...config,collector_id:id||null,entries:config.entries.map(entry=>entry.source.kind==="external"?{...entry,source:{...entry.source,resource_id:first}}:entry)});}} onResource={(entryId,id)=>save({...config,entries:config.entries.map(entry=>entry.id===entryId&&entry.source.kind==="external"?{...entry,source:{...entry.source,resource_id:id}}:entry)})} onTargets={(entryId,targets)=>save({...config,entries:config.entries.map(entry=>entry.id===entryId?{...entry,targets}:entry)})} onAddExternal={()=>{const choice=collectors.find(item=>item.id===config.collector_id)??collectors[0],resource=choice?.resources[0];if(!choice||!resource)return;connectLoraConsumerTree(node,choice.node);save({...config,collector_id:choice.id,entries:[...config.entries,{id:crypto.randomUUID(),source:{kind:"external",resource_id:resource.id},targets:[{scope:"global"}]}]});}} onRemove={entryId=>{const entries=config.entries.filter(entry=>entry.id!==entryId),next={...config,collector_id:entries.some(entry=>entry.source.kind==="external")?config.collector_id:null,entries};if(!next.collector_id)connectLoraConsumerTree(node,null);save(next);}}/> + setConfig(setLoraV3Collector(node,config,id))} onResource={(entryId,id)=>setConfig(setLoraV3EntryResource(node,config,entryId,id))} onAddExternal={target=>setConfig(addLoraV3TargetEntry(node,config,target))} onRemove={(entryId,target)=>setConfig(removeLoraV3TargetEntry(node,config,entryId,target))}/>
; } diff --git a/ui/src/regional/LoraV3ResourcePickerPanel.tsx b/ui/src/regional/LoraV3ResourcePickerPanel.tsx index 1346941..af95efb 100644 --- a/ui/src/regional/LoraV3ResourcePickerPanel.tsx +++ b/ui/src/regional/LoraV3ResourcePickerPanel.tsx @@ -1,5 +1,5 @@ import React, { useEffect, useState } from "react"; -import { Button, FieldFrame, ResourcePicker, ResourcePickerCollector, TagSelect, ToggleField, type SelectOption } from "../ui/components"; +import { Button, ResourcePicker, ResourcePickerCollector, ToggleField, type SelectOption } from "../ui/components"; export type LoraV3Entry={id:string;source:{kind:"external";resource_id:string}|{kind:"native";lora_name:string;model_strength:number;clip_strength:number};targets:Record[]}; export type LoraV3Config={version:1;collector_id:string|null;entries:LoraV3Entry[]}; @@ -9,23 +9,23 @@ export type LoraV3TargetOption=SelectOption&{target:LoraV3Target}; export const loraV3TargetValue=(target:LoraV3Target)=>target.scope==="global"?"global":`region:${target.document_id}:${target.region_id}`; export function sameLoraTarget(left:Record,right:LoraV3Target){return left.scope===right.scope&&(right.scope==="global"||(left.document_id===right.document_id&&left.region_id===right.region_id));} +export function withoutLoraV3Target(config:LoraV3Config,target:LoraV3Target,entryId?:string){const entries=config.entries.flatMap(entry=>{if(entryId&&entry.id!==entryId)return [entry];const targets=entry.targets.filter(candidate=>!sameLoraTarget(candidate,target));return targets.length?[{...entry,targets}]:[];});return {...config,collector_id:entries.some(entry=>entry.source.kind==="external")?config.collector_id:null,entries};} -export function LoraV3ScopePicker({label,help,collectors,config,target,resolved,onValue}:{label:string;help?:string;collectors:ResourcePickerCollector[];config:LoraV3Config;target:LoraV3Target;resolved:boolean;onValue:(collectorId:string|null,resourceId:string|null)=>void}){ - const entry=config.entries.find(item=>item.source.kind==="external"&&item.targets.some(candidate=>sameLoraTarget(candidate,target))),resourceId=entry?.source.kind==="external"?entry.source.resource_id:""; - return
{const resource=collectors.find(item=>item.id===collectorId)?.resources[0]?.id??null;onValue(collectorId||null,resource)}} onResource={id=>onValue(config.collector_id,id||null)}/>{resourceId&&}
; +type ScopeCallbacks={onCollector:(id:string)=>void;onResource:(entryId:string,resourceId:string)=>void;onAdd:(target:LoraV3Target)=>void;onRemove:(entryId:string,target:LoraV3Target)=>void}; +type ScopeProps=ScopeCallbacks&{collectors:ResourcePickerCollector[];config:LoraV3Config;target:LoraV3Target;resolved:boolean}; +const externalFor=(config:LoraV3Config,target:LoraV3Target)=>config.entries.filter((entry):entry is LoraV3Entry&{source:{kind:"external";resource_id:string}}=>entry.source.kind==="external"&&entry.targets.some(candidate=>sameLoraTarget(candidate,target))); + +export function LoraV3ScopePicker({collectors,config,target,resolved,onCollector,onResource,onAdd,onRemove}:ScopeProps){ + const entries=externalFor(config,target); + return
{entries.map((entry,index)=>
LoRA Stack {index+1}onResource(entry.id,id)}/>
)}
; } -export function OptionalLoraV3ScopePicker(props:{label:string;help?:string;collectors:ResourcePickerCollector[];config:LoraV3Config;target:LoraV3Target;resolved:boolean;onValue:(collectorId:string|null,resourceId:string|null)=>void}){ - const targetKey=loraV3TargetValue(props.target),assigned=props.config.entries.some(entry=>entry.source.kind==="external"&&entry.targets.some(target=>sameLoraTarget(target,props.target))),[enabled,setEnabled]=useState(assigned); +export function OptionalLoraV3ScopePicker(props:ScopeProps&{onClear:(target:LoraV3Target)=>void}){ + const targetKey=loraV3TargetValue(props.target),assigned=externalFor(props.config,props.target).length>0,[enabled,setEnabled]=useState(assigned); useEffect(()=>setEnabled(assigned),[assigned,targetKey]); - return
{setEnabled(next);if(!next)props.onValue(props.config.collector_id,null);}}/>{enabled&&}
; + return
{setEnabled(next);if(next&&!assigned)props.onAdd(props.target);if(!next)props.onClear(props.target);}}/>{enabled&&}
; } -export function LoraV3ResourcePickerPanel({collectors,config,resolved,targetOptions=[],onCollector,onResource,onTargets,onAddExternal,onRemove}:{collectors:ResourcePickerCollector[];config:LoraV3Config;resolved:boolean;targetOptions?:LoraV3TargetOption[];onCollector:(id:string)=>void;onResource:(entryId:string,resourceId:string)=>void;onTargets?:(entryId:string,targets:LoraV3Target[])=>void;onAddExternal:()=>void;onRemove?:(entryId:string)=>void}){ - const external=config.entries.filter((entry):entry is LoraV3Entry&{source:{kind:"external";resource_id:string}}=>entry.source.kind==="external"); - return
- {external.map((entry,index)=>
External LoRA Stack {index+1}onResource(entry.id,id)}/>{onTargets&&targetOptions.length>0&&loraV3TargetValue(target as LoraV3Target))} options={targetOptions} minSelected={1} onValue={values=>onTargets(entry.id,values.flatMap(value=>{const target=targetOptions.find(option=>option.value===value)?.target;return target?[target]:[]}))}/>} {onRemove&&}
) } - {!external.length&&

No external live stack is configured.

} - -
; +export function LoraV3ResourcePickerPanel({collectors,config,resolved,targetOptions=[],onCollector,onResource,onAddExternal,onRemove}:{collectors:ResourcePickerCollector[];config:LoraV3Config;resolved:boolean;targetOptions?:LoraV3TargetOption[];onCollector:(id:string)=>void;onResource:(entryId:string,resourceId:string)=>void;onAddExternal:(target:LoraV3Target)=>void;onRemove:(entryId:string,target:LoraV3Target)=>void}){ + return
{targetOptions.map(option=>

{option.label}

)}
; } diff --git a/ui/src/regional/RegionalEditor.tsx b/ui/src/regional/RegionalEditor.tsx index 1a021bb..09d1169 100644 --- a/ui/src/regional/RegionalEditor.tsx +++ b/ui/src/regional/RegionalEditor.tsx @@ -20,8 +20,8 @@ import { canRemoveGeometry } from "./operationOrder"; import { getWindowSwitchMode } from "../ui/preferences"; import { showBvToast } from "../ui/toastStore"; import { rememberBvWindowInstance } from "../ui/windowActivity"; -import { OptionalLoraV3ScopePicker, type LoraV3Config } from "./LoraV3ResourcePickerPanel"; -import { loraV3Catalog, loraV3Resolved, readNodeLoraV3Config, setLoraV3Target } from "./loraV3Ui"; +import { OptionalLoraV3ScopePicker, type LoraV3Config, type LoraV3Target } from "./LoraV3ResourcePickerPanel"; +import { addLoraV3TargetEntry, clearLoraV3Target, loraV3Catalog, loraV3Resolved, readNodeLoraV3Config, removeLoraV3TargetEntry, setLoraV3Collector, setLoraV3EntryResource } from "./loraV3Ui"; type NodeRef = { id: number | string; title?: string; widgets?: Array<{ name: string; value: unknown; callback?: (value: unknown) => void }>; graph?: { setDirtyCanvas?: (a: boolean, b: boolean) => void } }; const keyFor=(node:NodeRef|null|undefined)=>scopedNodeKey((getApp() as any).rootGraph??(getApp() as any).graph,node); @@ -330,8 +330,8 @@ export default function RegionalEditor({ open, activationToken=0, nodes, initial const loraWarnings = loraV3Config.entries.length&&(!node||!loraV3Resolved(node,loraV3Config))?["V3 LoRA collector link is unresolved"]:legacyLoraWarnings; const loraSummary = loraV3Config.entries.length?`${loraV3Config.entries.length} V3 LoRA assignment${loraV3Config.entries.length===1?"":"s"}`:documentValue ? bindingSummary(loraBindings, loraStacks, Object.fromEntries(documentValue.regions.map(region => [region.id, region.name]))) : ""; const loraV3Collectors=node?loraV3Catalog(node).filter(item=>item.resources.length>0):[],loraV3IsResolved=node?loraV3Resolved(node,loraV3Config):false; - const setV3Target=(target:{scope:"global"}|{scope:"region";document_id:string;region_id:string},collectorId:string|null,resourceId:string|null)=>{if(node)setLoraV3Config(setLoraV3Target(node,loraV3Config,target,collectorId,resourceId));}; - const optionsPanel = (mode: "selection" | "region" | "document") => documentValue ? setV3Target({scope:"global"},collectorId,resourceId)}/>} loraV3RegionEditor={selectedRegion?setV3Target({scope:"region",document_id:documentValue.document_id,region_id:selectedRegion.id},collectorId,resourceId)}/>:null} onGlobalLoraStack={setGlobalLoraStack} onRegionLoraStack={setRegionLoraStack} onPromptSection={(section, open) => setViewState(current => ({ ...current, promptSections: { ...current.promptSections, [section]: open } }))} onNegativeMode={negativeMode => mutate(value => { value.negative_mode = negativeMode; })} onGlobalPrompts={prompts => mutate(value => { value.prompts.global = prompts; })} onBackgroundPrompts={prompts => mutate(value => { value.prompts.background = prompts; })} onRegion={updateRegion} onLayerBounds={bounds => selectedLayerId && updateLayer(selectedLayerId, (operations, region) => { const replacements = new Map(setLayerBounds(operations, bounds, documentValue.canvas).map(item => [item.id, item])); region.geometry = region.geometry.map(item => replacements.get(item.id) ?? item); })} onBrushSetting={(field, setting) => selectedLayerId && updateLayer(selectedLayerId, operations => operations.forEach(item => { if (item.type === "brush_stroke") Object.assign(item, { [field]: setting }); }))}/> : null; + const v3ScopeProps={collectors:loraV3Collectors,config:loraV3Config,resolved:loraV3IsResolved,onCollector:(id:string)=>node&&setLoraV3Config(setLoraV3Collector(node,loraV3Config,id)),onResource:(entryId:string,id:string)=>node&&setLoraV3Config(setLoraV3EntryResource(node,loraV3Config,entryId,id)),onAdd:(target:LoraV3Target)=>node&&setLoraV3Config(addLoraV3TargetEntry(node,loraV3Config,target)),onRemove:(entryId:string,target:LoraV3Target)=>node&&setLoraV3Config(removeLoraV3TargetEntry(node,loraV3Config,entryId,target)),onClear:(target:LoraV3Target)=>node&&setLoraV3Config(clearLoraV3Target(node,loraV3Config,target))}; + const optionsPanel = (mode: "selection" | "region" | "document") => documentValue ? } loraV3RegionEditor={selectedRegion?:null} onGlobalLoraStack={setGlobalLoraStack} onRegionLoraStack={setRegionLoraStack} onPromptSection={(section, open) => setViewState(current => ({ ...current, promptSections: { ...current.promptSections, [section]: open } }))} onNegativeMode={negativeMode => mutate(value => { value.negative_mode = negativeMode; })} onGlobalPrompts={prompts => mutate(value => { value.prompts.global = prompts; })} onBackgroundPrompts={prompts => mutate(value => { value.prompts.background = prompts; })} onRegion={updateRegion} onLayerBounds={bounds => selectedLayerId && updateLayer(selectedLayerId, (operations, region) => { const replacements = new Map(setLayerBounds(operations, bounds, documentValue.canvas).map(item => [item.id, item])); region.geometry = region.geometry.map(item => replacements.get(item.id) ?? item); })} onBrushSetting={(field, setting) => selectedLayerId && updateLayer(selectedLayerId, operations => operations.forEach(item => { if (item.type === "brush_stroke") Object.assign(item, { [field]: setting }); }))}/> : null; return <>{keptNodeIds.map(id=>{const kept=nodes.find(item=>keyFor(item)===id);return kept?navigateNode(id,false,false)} onClose={()=>setKeptNodeIds(ids=>ids.filter(value=>value!==id))}/>:null})}setWindowMenuVisible(node,visible)} context={windowMenuVisible(item)).map(item => ({ value:keyFor(item), label: `${item.title || "BV Regional Prompt"} · #${item.id}` }))}/>} center={ setIsolate(value => !value)} onToggleBinaryMaskPreview={() => { cancelGesture(); setViewState(current => ({ ...current, binaryMaskPreview: !current.binaryMaskPreview })); }} onExportDocument={() => documentValue && downloadJson(`${documentValue.title || "bv-regional"}.json`, documentValue)} onExportRegions={() => documentValue && downloadJson(`${documentValue.title || "bv-regions"}.regions.json`, { schema: "bv.regions", version: 2, canvas: documentValue.canvas, regions: documentValue.regions })} onImportDocument={importDocument} onImportRegions={importRegions} onUndo={undo} onRedo={redo} canUndo={!!history.length} canRedo={!!future.length} canMergeLayers={canMergeLayers} onMergeLayers={mergeLayers} canvas={documentValue?.canvas ?? { width: 1024, height: 1024 }} onCanvas={canvas => mutate(value => { value.canvas = canvas; })}/>} mode={viewState.mode} initialGeometry={windowGeometry} minSize={{width:780,height:520}} className="bv-regional-shell" bodyClassName="bv-regional-window-body" onModeChange={mode=>setViewState(current=>({...current,mode}))} onGeometry={geometry=>setViewState(current=>({...current,windows:{...current.windows,floating:geometry}}))} onClose={onClose} status={documentValue?<>{loraWarnings[0] ? `⚠ ${loraWarnings[0]}` : `✓ ${loraSummary}`}{documentValue.regions.length} regions · layout adjusted for this session:null} actions={documentValue? setDockResetSignal(value => value + 1)}/>:null}> {error ?
{error}
: documentValue && <>
diff --git a/ui/src/regional/loraV3Ui.tsx b/ui/src/regional/loraV3Ui.tsx index 7a76526..f32348c 100644 --- a/ui/src/regional/loraV3Ui.tsx +++ b/ui/src/regional/loraV3Ui.tsx @@ -1,6 +1,6 @@ import { getApp } from "../appHelper.js"; import type { ResourcePickerCollector } from "../ui/components"; -import type { LoraV3Config, LoraV3Target, LoraV3TargetOption } from "./LoraV3ResourcePickerPanel"; +import { withoutLoraV3Target, type LoraV3Config, type LoraV3Target, type LoraV3TargetOption } from "./LoraV3ResourcePickerPanel"; import { emptyLoraV3Config, parseLoraV3Config, serializeLoraV3Config } from "./loraV3Config"; import { connectLoraConsumerTree, ensureLoraCollectorOutput, ensureLoraConsumerInput, linkedLocalLoraCollector, localLoraCollectors, upstreamLoraTransformer } from "./loraV3Graph"; import { installM0CanvasVisibility } from "./m0VisualProjection"; @@ -37,14 +37,14 @@ export function loraV3TargetOptions(node:any):LoraV3TargetOption[]{ return [{value:"global",label:"Global",target:{scope:"global"}},...(document.regions??[]).map((region:any)=>({value:`region:${document.document_id}:${region.id}`,label:String(region.name||region.id),target:{scope:"region" as const,document_id:String(document.document_id),region_id:String(region.id)}}))]; } export function loraV3Resolved(node:any,config:LoraV3Config){const linked=linkedLocalLoraCollector(node);return Boolean(linked)&&String(widget(linked,"collector_id")?.value??"")===String(config.collector_id??"");} -export function setLoraV3Target(node:any,config:LoraV3Config,target:LoraV3Target,collectorId:string|null,resourceId:string|null){ - const matches=(candidate:Record)=>candidate.scope===target.scope&&(target.scope==="global"||(candidate.document_id===target.document_id&&candidate.region_id===target.region_id)); - const collectorChanged=Boolean(collectorId&&collectorId!==config.collector_id),fallbackResource=collectorChanged?loraV3Catalog(node).find(item=>item.id===collectorId)?.resources[0]?.id:null; - let entries=config.entries.filter(entry=>!entry.targets.some(matches)).map(entry=>collectorChanged&&entry.source.kind==="external"&&fallbackResource?{...entry,source:{...entry.source,resource_id:fallbackResource}}:entry); - if(resourceId)entries=[...entries,{id:crypto.randomUUID(),source:{kind:"external",resource_id:resourceId},targets:[target]}]; - const next:LoraV3Config={...config,collector_id:entries.some(entry=>entry.source.kind==="external")?collectorId:null,entries}; +function commitLoraV3Config(node:any,next:LoraV3Config){ const choice=loraV3Catalog(node).find(item=>item.id===next.collector_id);connectLoraConsumerTree(node,choice?.node??null);writeNodeLoraV3Config(node,next);return next; } +export function setLoraV3Collector(node:any,config:LoraV3Config,collectorId:string){const choice=loraV3Catalog(node).find(item=>item.id===collectorId),resourceId=choice?.resources[0]?.id??"";return commitLoraV3Config(node,{...config,collector_id:collectorId||null,entries:config.entries.map(entry=>entry.source.kind==="external"?{...entry,source:{...entry.source,resource_id:resourceId}}:entry)});} +export function setLoraV3EntryResource(node:any,config:LoraV3Config,entryId:string,resourceId:string){return commitLoraV3Config(node,{...config,entries:config.entries.map(entry=>entry.id===entryId&&entry.source.kind==="external"?{...entry,source:{...entry.source,resource_id:resourceId}}:entry)});} +export function addLoraV3TargetEntry(node:any,config:LoraV3Config,target:LoraV3Target){const choice=loraV3Catalog(node).find(item=>item.id===config.collector_id)??loraV3Catalog(node)[0],resource=choice?.resources[0];if(!choice||!resource)return config;return commitLoraV3Config(node,{...config,collector_id:choice.id,entries:[...config.entries,{id:crypto.randomUUID(),source:{kind:"external",resource_id:resource.id},targets:[target]}]});} +export function removeLoraV3TargetEntry(node:any,config:LoraV3Config,entryId:string,target:LoraV3Target){return commitLoraV3Config(node,withoutLoraV3Target(config,target,entryId));} +export function clearLoraV3Target(node:any,config:LoraV3Config,target:LoraV3Target){return commitLoraV3Config(node,withoutLoraV3Target(config,target));} function installCollector(node:any){ensureCanvasVisibility();const id=widget(node,"collector_id");ensureId(id);const current=String(id?.value??"").trim(),duplicate=(node.graph?._nodes??[]).find((item:any)=>item!==node&&nodeClass(item)==="BV LoRA Stack Collector"&&String(widget(item,"collector_id")?.value??"").trim()===current);if(id&¤t&&duplicate){const next=crypto.randomUUID();id.value=next;node.__bvLoraCollectorIdRemap={[current]:next};}hideLoraV3Widget(id);ensureLoraCollectorOutput(node);node.__bvRuntimeResourceProvider=true;} export function installLoraV3ConsumerSlot(node:any){ensureCanvasVisibility();const index=ensureLoraConsumerInput(node),input=node.inputs?.[index];if(input){input.hidden=true;input.__bvM0VisualHidden=true;input.__bvM0PortHidden=true;input.__bvM0ResourceSlot=true;}if(!linkedLocalLoraCollector(node)){const transformer=upstreamLoraTransformer(node),collector=transformer&&linkedLocalLoraCollector(transformer);if(collector)connectLoraConsumerTree(transformer,collector);}} diff --git a/ui/src/ui/components/ResourcePicker.tsx b/ui/src/ui/components/ResourcePicker.tsx index 78a1323..d149680 100644 --- a/ui/src/ui/components/ResourcePicker.tsx +++ b/ui/src/ui/components/ResourcePicker.tsx @@ -7,7 +7,6 @@ export function ResourcePicker({collectors,collectorId,resourceId,resolved=true, const collector=collectors.find(item=>item.id===collectorId),resource=collector?.resources.find(item=>item.id===resourceId); const selected=Boolean(collectorId||resourceId),unresolved=selected&&(!resolved||!collector||!resource); return
-
{unresolved?"Unresolved resource selection":collector&&resource?`${collector.label} / ${resource.label}`:"No resource selected"}
({value:item.id,label:item.label}))]} onValue={onCollector}/>({value:item.id,label:item.label}))]} onValue={onResource}/>
; }