From 28ab83f36a8214bb5faba289be3cbc2a24ebcfa4 Mon Sep 17 00:00:00 2001 From: BlackVortexAI Date: Sun, 23 Aug 2026 16:24:37 +0200 Subject: [PATCH] Add Regional v3 LoRA vertical slice --- js/bv_nodepack.core.js | 50 ++-- node_list.json | 2 + py/nodes/bv_regional.py | 84 +++++- py/util/regional/lora_v3.py | 242 ++++++++++++++++++ tests/regional_lora_v3_graph.test.mjs | 45 ++++ tests/regional_lora_v3_picker.test.mjs | 31 +++ tests/test_regional_lora_v3.py | 116 +++++++++ tests/test_regional_nodes.py | 24 +- ui/src/index.css | 2 + ui/src/index.tsx | 8 +- ui/src/regional/LoraV3ResourcePickerPanel.tsx | 14 + ui/src/regional/loraV3Config.ts | 11 + ui/src/regional/loraV3Graph.ts | 88 +++++++ ui/src/regional/loraV3Ui.tsx | 81 ++++++ ui/src/regional/m0VisualProjection.ts | 9 +- 15 files changed, 772 insertions(+), 35 deletions(-) create mode 100644 py/util/regional/lora_v3.py create mode 100644 tests/regional_lora_v3_graph.test.mjs create mode 100644 tests/regional_lora_v3_picker.test.mjs create mode 100644 tests/test_regional_lora_v3.py create mode 100644 ui/src/regional/LoraV3ResourcePickerPanel.tsx create mode 100644 ui/src/regional/loraV3Config.ts create mode 100644 ui/src/regional/loraV3Graph.ts create mode 100644 ui/src/regional/loraV3Ui.tsx diff --git a/js/bv_nodepack.core.js b/js/bv_nodepack.core.js index 909906a..5210fec 100644 --- a/js/bv_nodepack.core.js +++ b/js/bv_nodepack.core.js @@ -1,4 +1,4 @@ -var Tx=Object.defineProperty;var Rx=(e,t,r)=>t in e?Tx(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var M=(e,t,r)=>Rx(e,typeof t!="symbol"?t+"":t,r);import{app as Sx}from"../../scripts/app.js";import{api as Lx}from"../../scripts/api.js";var cr=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Cx(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Fh={exports:{}},gs={},Uh={exports:{}},me={};/** +var Vx=Object.defineProperty;var Hx=(e,t,r)=>t in e?Vx(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var M=(e,t,r)=>Hx(e,typeof t!="symbol"?t+"":t,r);import{app as $x}from"../../scripts/app.js";import{api as Yx}from"../../scripts/api.js";var cr=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Xx(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Jh={exports:{}},ys={},Zh={exports:{}},me={};/** * @license React * react.production.min.js * @@ -6,7 +6,7 @@ var Tx=Object.defineProperty;var Rx=(e,t,r)=>t in e?Tx(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 va=Symbol.for("react.element"),Nx=Symbol.for("react.portal"),Ox=Symbol.for("react.fragment"),Mx=Symbol.for("react.strict_mode"),Ax=Symbol.for("react.profiler"),Dx=Symbol.for("react.provider"),Ix=Symbol.for("react.context"),jx=Symbol.for("react.forward_ref"),Px=Symbol.for("react.suspense"),Bx=Symbol.for("react.memo"),zx=Symbol.for("react.lazy"),Cf=Symbol.iterator;function Fx(e){return e===null||typeof e!="object"?null:(e=Cf&&e[Cf]||e["@@iterator"],typeof e=="function"?e:null)}var Wh={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},Vh=Object.assign,Hh={};function ri(e,t,r){this.props=e,this.context=t,this.refs=Hh,this.updater=r||Wh}ri.prototype.isReactComponent={};ri.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")};ri.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function $h(){}$h.prototype=ri.prototype;function ed(e,t,r){this.props=e,this.context=t,this.refs=Hh,this.updater=r||Wh}var td=ed.prototype=new $h;td.constructor=ed;Vh(td,ri.prototype);td.isPureReactComponent=!0;var Nf=Array.isArray,Yh=Object.prototype.hasOwnProperty,rd={current:null},Xh={key:!0,ref:!0,__self:!0,__source:!0};function Gh(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)Yh.call(t,o)&&!Xh.hasOwnProperty(o)&&(n[o]=t[o]);var l=arguments.length-2;if(l===1)n.children=r;else if(1t in e?Tx(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 $x=m,Yx=Symbol.for("react.element"),Xx=Symbol.for("react.fragment"),Gx=Object.prototype.hasOwnProperty,Kx=$x.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,qx={key:!0,ref:!0,__self:!0,__source:!0};function qh(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)Gx.call(t,o)&&!qx.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:Yx,type:e,key:i,ref:a,props:n,_owner:Kx.current}}gs.Fragment=Xx;gs.jsx=qh;gs.jsxs=qh;Fh.exports=gs;var s=Fh.exports,Hi={},Jh={exports:{}},Zt={},Zh={exports:{}},Qh={};/** + */var cy=m,uy=Symbol.for("react.element"),dy=Symbol.for("react.fragment"),fy=Object.prototype.hasOwnProperty,py=cy.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,hy={key:!0,ref:!0,__self:!0,__source:!0};function lg(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)fy.call(t,o)&&!hy.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:uy,type:e,key:i,ref:a,props:n,_owner:py.current}}ys.Fragment=dy;ys.jsx=lg;ys.jsxs=lg;Jh.exports=ys;var s=Jh.exports,Yn={},sg={exports:{}},Zt={},cg={exports:{}},ug={};/** * @license React * scheduler.production.min.js * @@ -22,7 +22,7 @@ var Tx=Object.defineProperty;var Rx=(e,t,r)=>t in e?Tx(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,V){var F=D.length;D.push(V);e:for(;0>>1,Y=D[ne];if(0>>1;nen($,F))Qn(oe,$)?(D[ne]=oe,D[Q]=F,ne=Q):(D[ne]=$,D[Z]=F,ne=Z);else if(Qn(oe,F))D[ne]=oe,D[Q]=F,ne=Q;else break e}}return V}function n(D,V){var F=D.sortIndex-V.sortIndex;return F!==0?F:D.id-V.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=[],f=1,d=null,p=3,g=!1,x=!1,w=!1,E=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 V=r(u);V!==null;){if(V.callback===null)o(u);else if(V.startTime<=D)o(u),V.sortIndex=V.expirationTime,t(c,V);else break;V=r(u)}}function _(D){if(w=!1,v(D),!x)if(r(c)!==null)x=!0,R(y);else{var V=r(u);V!==null&&O(_,V.startTime-D)}}function y(D,V){x=!1,w&&(w=!1,b(B),B=-1),g=!0;var F=p;try{for(v(V),d=r(c);d!==null&&(!(d.expirationTime>V)||D&&!z());){var ne=d.callback;if(typeof ne=="function"){d.callback=null,p=d.priorityLevel;var Y=ne(d.expirationTime<=V);V=e.unstable_now(),typeof Y=="function"?d.callback=Y:d===r(c)&&o(c),v(V)}else o(c);d=r(c)}if(d!==null)var K=!0;else{var Z=r(u);Z!==null&&O(_,Z.startTime-V),K=!1}return K}finally{d=null,p=F,g=!1}}var T=!1,L=null,B=-1,C=5,I=-1;function z(){return!(e.unstable_now()-ID||125ne?(D.sortIndex=F,t(u,D),r(c)===null&&D===r(u)&&(w?(b(B),B=-1):w=!0,O(_,F-ne))):(D.sortIndex=Y,t(c,D),x||g||(x=!0,R(y))),D},e.unstable_shouldYield=z,e.unstable_wrapCallback=function(D){var V=p;return function(){var F=p;p=V;try{return D.apply(this,arguments)}finally{p=F}}}})(Qh);Zh.exports=Qh;var Jx=Zh.exports;/** + */(function(e){function t(D,V){var F=D.length;D.push(V);e:for(;0>>1,Y=D[ne];if(0>>1;nen($,F))Qn(oe,$)?(D[ne]=oe,D[Q]=F,ne=Q):(D[ne]=$,D[Z]=F,ne=Z);else if(Qn(oe,F))D[ne]=oe,D[Q]=F,ne=Q;else break e}}return V}function n(D,V){var F=D.sortIndex-V.sortIndex;return F!==0?F:D.id-V.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=[],f=1,d=null,p=3,g=!1,x=!1,w=!1,E=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 V=r(u);V!==null;){if(V.callback===null)o(u);else if(V.startTime<=D)o(u),V.sortIndex=V.expirationTime,t(c,V);else break;V=r(u)}}function _(D){if(w=!1,v(D),!x)if(r(c)!==null)x=!0,R(y);else{var V=r(u);V!==null&&O(_,V.startTime-D)}}function y(D,V){x=!1,w&&(w=!1,b(B),B=-1),g=!0;var F=p;try{for(v(V),d=r(c);d!==null&&(!(d.expirationTime>V)||D&&!z());){var ne=d.callback;if(typeof ne=="function"){d.callback=null,p=d.priorityLevel;var Y=ne(d.expirationTime<=V);V=e.unstable_now(),typeof Y=="function"?d.callback=Y:d===r(c)&&o(c),v(V)}else o(c);d=r(c)}if(d!==null)var K=!0;else{var Z=r(u);Z!==null&&O(_,Z.startTime-V),K=!1}return K}finally{d=null,p=F,g=!1}}var T=!1,L=null,B=-1,C=5,I=-1;function z(){return!(e.unstable_now()-ID||125ne?(D.sortIndex=F,t(u,D),r(c)===null&&D===r(u)&&(w?(b(B),B=-1):w=!0,O(_,F-ne))):(D.sortIndex=Y,t(c,D),x||g||(x=!0,R(y))),D},e.unstable_shouldYield=z,e.unstable_wrapCallback=function(D){var V=p;return function(){var F=p;p=V;try{return D.apply(this,arguments)}finally{p=F}}}})(ug);cg.exports=ug;var gy=cg.exports;/** * @license React * react-dom.production.min.js * @@ -30,18 +30,18 @@ var Tx=Object.defineProperty;var Rx=(e,t,r)=>t in e?Tx(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 Zx=m,Jt=Jx;function G(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"),Fc=Object.prototype.hasOwnProperty,Qx=/^[: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]*$/,Mf={},Af={};function ey(e){return Fc.call(Af,e)?!0:Fc.call(Mf,e)?!1:Qx.test(e)?Af[e]=!0:(Mf[e]=!0,!1)}function ty(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 ry(e,t,r,o){if(t===null||typeof t>"u"||ty(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 At(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 At(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 At(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){xt[e]=new At(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){xt[e]=new At(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 At(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){xt[e]=new At(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){xt[e]=new At(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){xt[e]=new At(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){xt[e]=new At(e,5,!1,e.toLowerCase(),null,!1,!1)});var nd=/[\-:]([a-z])/g;function id(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(nd,id);xt[t]=new At(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(nd,id);xt[t]=new At(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(nd,id);xt[t]=new At(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){xt[e]=new At(e,1,!1,e.toLowerCase(),null,!1,!1)});xt.xlinkHref=new At("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){xt[e]=new At(e,1,!1,e.toLowerCase(),null,!0,!0)});function ad(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"),Xc=Object.prototype.hasOwnProperty,vy=/^[: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]*$/,Vf={},Hf={};function my(e){return Xc.call(Hf,e)?!0:Xc.call(Vf,e)?!1:vy.test(e)?Hf[e]=!0:(Vf[e]=!0,!1)}function xy(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 yy(e,t,r,o){if(t===null||typeof t>"u"||xy(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 At(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 At(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 At(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){xt[e]=new At(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){xt[e]=new At(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 At(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){xt[e]=new At(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){xt[e]=new At(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){xt[e]=new At(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){xt[e]=new At(e,5,!1,e.toLowerCase(),null,!1,!1)});var fd=/[\-:]([a-z])/g;function pd(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(fd,pd);xt[t]=new At(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(fd,pd);xt[t]=new At(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(fd,pd);xt[t]=new At(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){xt[e]=new At(e,1,!1,e.toLowerCase(),null,!1,!1)});xt.xlinkHref=new At("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){xt[e]=new At(e,1,!1,e.toLowerCase(),null,!0,!0)});function hd(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{Zs=!1,Error.prepareStackTrace=r}return(e=e?e.displayName||e.name:"")?wi(e):""}function oy(e){switch(e.tag){case 5:return wi(e.type);case 16:return wi("Lazy");case 13:return wi("Suspense");case 19:return wi("SuspenseList");case 0:case 2:case 15:return e=Qs(e.type,!1),e;case 11:return e=Qs(e.type.render,!1),e;case 1:return e=Qs(e.type,!0),e;default:return""}}function Hc(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 kn:return"Fragment";case wn:return"Portal";case Uc:return"Profiler";case ld:return"StrictMode";case Wc:return"Suspense";case Vc:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case rg:return(e.displayName||"Context")+".Consumer";case tg:return(e._context.displayName||"Context")+".Provider";case sd:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case cd:return t=e.displayName||null,t!==null?t:Hc(e.type)||"Memo";case so:t=e._payload,e=e._init;try{return Hc(e(t))}catch{}}return null}function ny(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 Hc(t);case 8:return t===ld?"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 Lo(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function ng(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function iy(e){var t=ng(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 Da(e){e._valueTracker||(e._valueTracker=iy(e))}function ig(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var r=t.getValue(),o="";return e&&(o=ng(e)?e.checked?"true":"false":e.value),e=o,e!==r?(t.setValue(e),!0):!1}function Tl(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 $c(e,t){var r=t.checked;return Ke({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:r??e._wrapperState.initialChecked})}function If(e,t){var r=t.defaultValue==null?"":t.defaultValue,o=t.checked!=null?t.checked:t.defaultChecked;r=Lo(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 ag(e,t){t=t.checked,t!=null&&ad(e,"checked",t,!1)}function Yc(e,t){ag(e,t);var r=Lo(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")?Xc(e,t.type,r):t.hasOwnProperty("defaultValue")&&Xc(e,t.type,Lo(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function jf(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 Xc(e,t,r){(t!=="number"||Tl(e.ownerDocument)!==e)&&(r==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+r&&(e.defaultValue=""+r))}var ki=Array.isArray;function In(e,t,r,o){if(e=e.options,t){t={};for(var n=0;n"+t.valueOf().toString()+"",t=Ia.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function Yi(e,t){if(t){var r=e.firstChild;if(r&&r===e.lastChild&&r.nodeType===3){r.nodeValue=t;return}}e.textContent=t}var Ci={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},ay=["Webkit","ms","Moz","O"];Object.keys(Ci).forEach(function(e){ay.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Ci[t]=Ci[e]})});function ug(e,t,r){return t==null||typeof t=="boolean"||t===""?"":r||typeof t!="number"||t===0||Ci.hasOwnProperty(e)&&Ci[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=ug(r,t[r],o);r==="float"&&(r="cssFloat"),o?e.setProperty(r,n):e[r]=n}}var ly=Ke({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 qc(e,t){if(t){if(ly[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(G(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(G(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(G(61))}if(t.style!=null&&typeof t.style!="object")throw Error(G(62))}}function Jc(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 Zc=null;function ud(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var Qc=null,jn=null,Pn=null;function zf(e){if(e=ya(e)){if(typeof Qc!="function")throw Error(G(280));var t=e.stateNode;t&&(t=ys(t),Qc(e.stateNode,e.type,t))}}function fg(e){jn?Pn?Pn.push(e):Pn=[e]:jn=e}function pg(){if(jn){var e=jn,t=Pn;if(Pn=jn=null,zf(e),t)for(e=0;e>>=0,e===0?32:31-(my(e)/xy|0)|0}var ja=64,Pa=4194304;function Ei(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 Cl(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=Ei(l):(i&=a,i!==0&&(o=Ei(i)))}else a=r&~n,a!==0?o=Ei(a):i!==0&&(o=Ei(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 ma(e,t,r){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-xr(t),e[t]=r}function ky(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=Oi),Gf=" ",Kf=!1;function Ag(e,t){switch(e){case"keyup":return Jy.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Dg(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var En=!1;function Qy(e,t){switch(e){case"compositionend":return Dg(t);case"keypress":return t.which!==32?null:(Kf=!0,Gf);case"textInput":return e=t.data,e===Gf&&Kf?null:e;default:return null}}function e_(e,t){if(En)return e==="compositionend"||!md&&Ag(e,t)?(e=Og(),ll=gd=ho=null,En=!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=Qf(r)}}function Bg(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Bg(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function zg(){for(var e=window,t=Tl();t instanceof e.HTMLIFrameElement;){try{var r=typeof t.contentWindow.location.href=="string"}catch{r=!1}if(r)e=t.contentWindow;else break;t=Tl(e.document)}return t}function xd(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 c_(e){var t=zg(),r=e.focusedElem,o=e.selectionRange;if(t!==r&&r&&r.ownerDocument&&Bg(r.ownerDocument.documentElement,r)){if(o!==null&&xd(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=ep(r,i);var a=ep(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,Tn=null,iu=null,Ai=null,au=!1;function tp(e,t,r){var o=r.window===r?r.document:r.nodeType===9?r:r.ownerDocument;au||Tn==null||Tn!==Tl(o)||(o=Tn,"selectionStart"in o&&xd(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}),Ai&&Zi(Ai,o)||(Ai=o,o=Ml(iu,"onSelect"),0Ln||(e.current=fu[Ln],fu[Ln]=null,Ln--)}function Be(e,t){Ln++,fu[Ln]=e.current,e.current=t}var Co={},Lt=Oo(Co),Ft=Oo(!1),en=Co;function $n(e,t){var r=e.type.contextTypes;if(!r)return Co;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 Ut(e){return e=e.childContextTypes,e!=null}function Dl(){Ve(Ft),Ve(Lt)}function sp(e,t,r){if(Lt.current!==Co)throw Error(G(168));Be(Lt,t),Be(Ft,r)}function Gg(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(G(108,ny(e)||"Unknown",n));return Ke({},r,o)}function Il(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Co,en=Lt.current,Be(Lt,e),Be(Ft,Ft.current),!0}function cp(e,t,r){var o=e.stateNode;if(!o)throw Error(G(169));r?(e=Gg(e,t,en),o.__reactInternalMemoizedMergedChildContext=e,Ve(Ft),Ve(Lt),Be(Lt,e)):Ve(Ft),Be(Ft,r)}var Wr=null,_s=!1,pc=!1;function Kg(e){Wr===null?Wr=[e]:Wr.push(e)}function __(e){_s=!0,Kg(e)}function Mo(){if(!pc&&Wr!==null){pc=!0;var e=0,t=Me;try{var r=Wr;for(Me=1;e>=a,n-=a,$r=1<<32-xr(t)+n|r<B?(C=L,L=null):C=L.sibling;var I=p(b,L,v[B],_);if(I===null){L===null&&(L=C);break}e&&L&&I.alternate===null&&t(b,L),h=i(I,h,B),T===null?y=I:T.sibling=I,T=I,L=C}if(B===v.length)return r(b,L),Ye&&Fo(b,B),y;if(L===null){for(;BB?(C=L,L=null):C=L.sibling;var z=p(b,L,I.value,_);if(z===null){L===null&&(L=C);break}e&&L&&z.alternate===null&&t(b,L),h=i(z,h,B),T===null?y=z:T.sibling=z,T=z,L=C}if(I.done)return r(b,L),Ye&&Fo(b,B),y;if(L===null){for(;!I.done;B++,I=v.next())I=d(b,I.value,_),I!==null&&(h=i(I,h,B),T===null?y=I:T.sibling=I,T=I);return Ye&&Fo(b,B),y}for(L=o(b,L);!I.done;B++,I=v.next())I=g(L,b,B,I.value,_),I!==null&&(e&&I.alternate!==null&&L.delete(I.key===null?B:I.key),h=i(I,h,B),T===null?y=I:T.sibling=I,T=I);return e&&L.forEach(function(S){return t(b,S)}),Ye&&Fo(b,B),y}function E(b,h,v,_){if(typeof v=="object"&&v!==null&&v.type===kn&&v.key===null&&(v=v.props.children),typeof v=="object"&&v!==null){switch(v.$$typeof){case Aa:e:{for(var y=v.key,T=h;T!==null;){if(T.key===y){if(y=v.type,y===kn){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===so&&fp(y)===T.type){r(b,T.sibling),h=n(T,v.props),h.ref=gi(b,T,v),h.return=b,b=h;break e}r(b,T);break}else t(b,T);T=T.sibling}v.type===kn?(h=Ko(v.props.children,b.mode,_,v.key),h.return=b,b=h):(_=gl(v.type,v.key,v.props,null,b.mode,_),_.ref=gi(b,h,v),_.return=b,b=_)}return a(b);case wn: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=_c(v,b.mode,_),h.return=b,b=h}return a(b);case so:return T=v._init,E(b,h,T(v._payload),_)}if(ki(v))return x(b,h,v,_);if(ui(v))return w(b,h,v,_);Ha(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=yc(v,b.mode,_),h.return=b,b=h),a(b)):r(b,h)}return E}var Xn=Qg(!0),eb=Qg(!1),Bl=Oo(null),zl=null,On=null,kd=null;function Ed(){kd=On=zl=null}function Td(e){var t=Bl.current;Ve(Bl),e._currentValue=t}function gu(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 zn(e,t){zl=e,kd=On=null,e=e.dependencies,e!==null&&e.firstContext!==null&&(e.lanes&t&&(Bt=!0),e.firstContext=null)}function ur(e){var t=e._currentValue;if(kd!==e)if(e={context:e,memoizedValue:t,next:null},On===null){if(zl===null)throw Error(G(308));On=e,zl.dependencies={lanes:0,firstContext:e}}else On=On.next=e;return t}var $o=null;function Rd(e){$o===null?$o=[e]:$o.push(e)}function tb(e,t,r,o){var n=t.interleaved;return n===null?(r.next=r,Rd(t)):(r.next=n.next,n.next=r),t.interleaved=r,to(e,o)}function to(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 co=!1;function Sd(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function rb(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 Kr(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function ko(e,t,r){var o=e.updateQueue;if(o===null)return null;if(o=o.shared,we&2){var n=o.pending;return n===null?t.next=t:(t.next=n.next,n.next=t),o.pending=t,to(e,r)}return n=o.interleaved,n===null?(t.next=t,Rd(o)):(t.next=n.next,n.next=t),o.interleaved=t,to(e,r)}function cl(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,fd(e,r)}}function pp(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 Fl(e,t,r,o){var n=e.updateQueue;co=!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 f=e.alternate;f!==null&&(f=f.updateQueue,l=f.lastBaseUpdate,l!==a&&(l===null?f.firstBaseUpdate=u:l.next=u,f.lastBaseUpdate=c))}if(i!==null){var d=n.baseState;a=0,f=u=c=null,l=i;do{var p=l.lane,g=l.eventTime;if((o&p)===p){f!==null&&(f=f.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"){d=x.call(g,d,p);break e}d=x;break e;case 3:x.flags=x.flags&-65537|128;case 0:if(x=w.payload,p=typeof x=="function"?x.call(g,d,p):x,p==null)break e;d=Ke({},d,p);break e;case 2:co=!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},f===null?(u=f=g,c=d):f=f.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(f===null&&(c=d),n.baseState=c,n.firstBaseUpdate=u,n.lastBaseUpdate=f,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);on|=a,e.lanes=a,e.memoizedState=d}}function hp(e,t,r){if(e=t.effects,t.effects=null,e!==null)for(t=0;tr?r:4,e(!0);var o=gc.transition;gc.transition={};try{e(!1),t()}finally{Me=r,gc.transition=o}}function xb(){return dr().memoizedState}function T_(e,t,r){var o=To(e);if(r={lane:o,action:r,hasEagerState:!1,eagerState:null,next:null},yb(e))_b(t,r);else if(r=tb(e,t,r,o),r!==null){var n=Ot();yr(r,e,o,n),wb(r,t,o)}}function R_(e,t,r){var o=To(e),n={lane:o,action:r,hasEagerState:!1,eagerState:null,next:null};if(yb(e))_b(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,_r(l,a)){var c=t.interleaved;c===null?(n.next=n,Rd(t)):(n.next=c.next,c.next=n),t.interleaved=n;return}}catch{}finally{}r=tb(e,t,n,o),r!==null&&(n=Ot(),yr(r,e,o,n),wb(r,t,o))}}function yb(e){var t=e.alternate;return e===Ge||t!==null&&t===Ge}function _b(e,t){Di=Wl=!0;var r=e.pending;r===null?t.next=t:(t.next=r.next,r.next=t),e.pending=t}function wb(e,t,r){if(r&4194240){var o=t.lanes;o&=e.pendingLanes,r|=o,t.lanes=r,fd(e,r)}}var Vl={readContext:ur,useCallback:yt,useContext:yt,useEffect:yt,useImperativeHandle:yt,useInsertionEffect:yt,useLayoutEffect:yt,useMemo:yt,useReducer:yt,useRef:yt,useState:yt,useDebugValue:yt,useDeferredValue:yt,useTransition:yt,useMutableSource:yt,useSyncExternalStore:yt,useId:yt,unstable_isNewReconciler:!1},S_={readContext:ur,useCallback:function(e,t){return Sr().memoizedState=[e,t===void 0?null:t],e},useContext:ur,useEffect:bp,useImperativeHandle:function(e,t,r){return r=r!=null?r.concat([e]):null,dl(4194308,4,hb.bind(null,t,e),r)},useLayoutEffect:function(e,t){return dl(4194308,4,e,t)},useInsertionEffect:function(e,t){return dl(4,2,e,t)},useMemo:function(e,t){var r=Sr();return t=t===void 0?null:t,e=e(),r.memoizedState=[e,t],e},useReducer:function(e,t,r){var o=Sr();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=T_.bind(null,Ge,e),[o.memoizedState,e]},useRef:function(e){var t=Sr();return e={current:e},t.memoizedState=e},useState:gp,useDebugValue:Id,useDeferredValue:function(e){return Sr().memoizedState=e},useTransition:function(){var e=gp(!1),t=e[0];return e=E_.bind(null,e[1]),Sr().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,r){var o=Ge,n=Sr();if(Ye){if(r===void 0)throw Error(G(407));r=r()}else{if(r=t(),ht===null)throw Error(G(349));rn&30||ab(o,t,r)}n.memoizedState=r;var i={value:r,getSnapshot:t};return n.queue=i,bp(sb.bind(null,o,i,e),[e]),o.flags|=2048,aa(9,lb.bind(null,o,i,r,t),void 0,null),r},useId:function(){var e=Sr(),t=ht.identifierPrefix;if(Ye){var r=Yr,o=$r;r=(o&~(1<<32-xr(o)-1)).toString(32)+r,t=":"+t+"R"+r,r=na++,0")&&(c=c.replace("",e.displayName)),c}while(1<=a&&0<=l);break}}}finally{oc=!1,Error.prepareStackTrace=r}return(e=e?e.displayName||e.name:"")?Ri(e):""}function _y(e){switch(e.tag){case 5:return Ri(e.type);case 16:return Ri("Lazy");case 13:return Ri("Suspense");case 19:return Ri("SuspenseList");case 0:case 2:case 15:return e=nc(e.type,!1),e;case 11:return e=nc(e.type.render,!1),e;case 1:return e=nc(e.type,!0),e;default:return""}}function Jc(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 Tn:return"Fragment";case En:return"Portal";case Gc:return"Profiler";case gd:return"StrictMode";case Kc:return"Suspense";case qc:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case pg:return(e.displayName||"Context")+".Consumer";case fg:return(e._context.displayName||"Context")+".Provider";case bd:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case vd:return t=e.displayName||null,t!==null?t:Jc(e.type)||"Memo";case so:t=e._payload,e=e._init;try{return Jc(e(t))}catch{}}return null}function wy(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 Jc(t);case 8:return t===gd?"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 Lo(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function gg(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function ky(e){var t=gg(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 Pa(e){e._valueTracker||(e._valueTracker=ky(e))}function bg(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var r=t.getValue(),o="";return e&&(o=gg(e)?e.checked?"true":"false":e.value),e=o,e!==r?(t.setValue(e),!0):!1}function Ll(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 Zc(e,t){var r=t.checked;return Ke({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:r??e._wrapperState.initialChecked})}function Yf(e,t){var r=t.defaultValue==null?"":t.defaultValue,o=t.checked!=null?t.checked:t.defaultChecked;r=Lo(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 vg(e,t){t=t.checked,t!=null&&hd(e,"checked",t,!1)}function Qc(e,t){vg(e,t);var r=Lo(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")?eu(e,t.type,r):t.hasOwnProperty("defaultValue")&&eu(e,t.type,Lo(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function Xf(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 eu(e,t,r){(t!=="number"||Ll(e.ownerDocument)!==e)&&(r==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+r&&(e.defaultValue=""+r))}var Si=Array.isArray;function Pn(e,t,r,o){if(e=e.options,t){t={};for(var n=0;n"+t.valueOf().toString()+"",t=Ba.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function Ki(e,t){if(t){var r=e.firstChild;if(r&&r===e.lastChild&&r.nodeType===3){r.nodeValue=t;return}}e.textContent=t}var Ai={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},Ey=["Webkit","ms","Moz","O"];Object.keys(Ai).forEach(function(e){Ey.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Ai[t]=Ai[e]})});function _g(e,t,r){return t==null||typeof t=="boolean"||t===""?"":r||typeof t!="number"||t===0||Ai.hasOwnProperty(e)&&Ai[e]?(""+t).trim():t+"px"}function wg(e,t){e=e.style;for(var r in t)if(t.hasOwnProperty(r)){var o=r.indexOf("--")===0,n=_g(r,t[r],o);r==="float"&&(r="cssFloat"),o?e.setProperty(r,n):e[r]=n}}var Ty=Ke({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 ou(e,t){if(t){if(Ty[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(G(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(G(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(G(61))}if(t.style!=null&&typeof t.style!="object")throw Error(G(62))}}function nu(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 iu=null;function md(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var au=null,Bn=null,zn=null;function qf(e){if(e=ka(e)){if(typeof au!="function")throw Error(G(280));var t=e.stateNode;t&&(t=Ts(t),au(e.stateNode,e.type,t))}}function kg(e){Bn?zn?zn.push(e):zn=[e]:Bn=e}function Eg(){if(Bn){var e=Bn,t=zn;if(zn=Bn=null,qf(e),t)for(e=0;e>>=0,e===0?32:31-(jy(e)/Py|0)|0}var za=64,Fa=4194304;function Li(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 Ml(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=Li(l):(i&=a,i!==0&&(o=Li(i)))}else a=r&~n,a!==0?o=Li(a):i!==0&&(o=Li(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 _a(e,t,r){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-xr(t),e[t]=r}function Uy(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=Ii),ip=" ",ap=!1;function Hg(e,t){switch(e){case"keyup":return g_.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function $g(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Rn=!1;function v_(e,t){switch(e){case"compositionend":return $g(t);case"keypress":return t.which!==32?null:(ap=!0,ip);case"textInput":return e=t.data,e===ip&&ap?null:e;default:return null}}function m_(e,t){if(Rn)return e==="compositionend"||!Rd&&Hg(e,t)?(e=Wg(),ul=kd=ho=null,Rn=!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=up(r)}}function Kg(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Kg(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function qg(){for(var e=window,t=Ll();t instanceof e.HTMLIFrameElement;){try{var r=typeof t.contentWindow.location.href=="string"}catch{r=!1}if(r)e=t.contentWindow;else break;t=Ll(e.document)}return t}function Sd(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 S_(e){var t=qg(),r=e.focusedElem,o=e.selectionRange;if(t!==r&&r&&r.ownerDocument&&Kg(r.ownerDocument.documentElement,r)){if(o!==null&&Sd(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=dp(r,i);var a=dp(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,Sn=null,fu=null,Pi=null,pu=!1;function fp(e,t,r){var o=r.window===r?r.document:r.nodeType===9?r:r.ownerDocument;pu||Sn==null||Sn!==Ll(o)||(o=Sn,"selectionStart"in o&&Sd(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&&ta(Pi,o)||(Pi=o,o=Il(fu,"onSelect"),0Nn||(e.current=xu[Nn],xu[Nn]=null,Nn--)}function Be(e,t){Nn++,xu[Nn]=e.current,e.current=t}var Co={},Lt=Oo(Co),Ft=Oo(!1),en=Co;function Gn(e,t){var r=e.type.contextTypes;if(!r)return Co;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 Ut(e){return e=e.childContextTypes,e!=null}function Pl(){Ve(Ft),Ve(Lt)}function xp(e,t,r){if(Lt.current!==Co)throw Error(G(168));Be(Lt,t),Be(Ft,r)}function ib(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(G(108,wy(e)||"Unknown",n));return Ke({},r,o)}function Bl(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Co,en=Lt.current,Be(Lt,e),Be(Ft,Ft.current),!0}function yp(e,t,r){var o=e.stateNode;if(!o)throw Error(G(169));r?(e=ib(e,t,en),o.__reactInternalMemoizedMergedChildContext=e,Ve(Ft),Ve(Lt),Be(Lt,e)):Ve(Ft),Be(Ft,r)}var Wr=null,Rs=!1,mc=!1;function ab(e){Wr===null?Wr=[e]:Wr.push(e)}function z_(e){Rs=!0,ab(e)}function Mo(){if(!mc&&Wr!==null){mc=!0;var e=0,t=Me;try{var r=Wr;for(Me=1;e>=a,n-=a,$r=1<<32-xr(t)+n|r<B?(C=L,L=null):C=L.sibling;var I=p(b,L,v[B],_);if(I===null){L===null&&(L=C);break}e&&L&&I.alternate===null&&t(b,L),h=i(I,h,B),T===null?y=I:T.sibling=I,T=I,L=C}if(B===v.length)return r(b,L),Ye&&Fo(b,B),y;if(L===null){for(;BB?(C=L,L=null):C=L.sibling;var z=p(b,L,I.value,_);if(z===null){L===null&&(L=C);break}e&&L&&z.alternate===null&&t(b,L),h=i(z,h,B),T===null?y=z:T.sibling=z,T=z,L=C}if(I.done)return r(b,L),Ye&&Fo(b,B),y;if(L===null){for(;!I.done;B++,I=v.next())I=d(b,I.value,_),I!==null&&(h=i(I,h,B),T===null?y=I:T.sibling=I,T=I);return Ye&&Fo(b,B),y}for(L=o(b,L);!I.done;B++,I=v.next())I=g(L,b,B,I.value,_),I!==null&&(e&&I.alternate!==null&&L.delete(I.key===null?B:I.key),h=i(I,h,B),T===null?y=I:T.sibling=I,T=I);return e&&L.forEach(function(S){return t(b,S)}),Ye&&Fo(b,B),y}function E(b,h,v,_){if(typeof v=="object"&&v!==null&&v.type===Tn&&v.key===null&&(v=v.props.children),typeof v=="object"&&v!==null){switch(v.$$typeof){case ja:e:{for(var y=v.key,T=h;T!==null;){if(T.key===y){if(y=v.type,y===Tn){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===so&&kp(y)===T.type){r(b,T.sibling),h=n(T,v.props),h.ref=xi(b,T,v),h.return=b,b=h;break e}r(b,T);break}else t(b,T);T=T.sibling}v.type===Tn?(h=Ko(v.props.children,b.mode,_,v.key),h.return=b,b=h):(_=ml(v.type,v.key,v.props,null,b.mode,_),_.ref=xi(b,h,v),_.return=b,b=_)}return a(b);case En: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=Rc(v,b.mode,_),h.return=b,b=h}return a(b);case so:return T=v._init,E(b,h,T(v._payload),_)}if(Si(v))return x(b,h,v,_);if(hi(v))return w(b,h,v,_);Xa(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=Tc(v,b.mode,_),h.return=b,b=h),a(b)):r(b,h)}return E}var qn=ub(!0),db=ub(!1),Ul=Oo(null),Wl=null,An=null,Od=null;function Md(){Od=An=Wl=null}function Ad(e){var t=Ul.current;Ve(Ul),e._currentValue=t}function wu(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 Un(e,t){Wl=e,Od=An=null,e=e.dependencies,e!==null&&e.firstContext!==null&&(e.lanes&t&&(Bt=!0),e.firstContext=null)}function ur(e){var t=e._currentValue;if(Od!==e)if(e={context:e,memoizedValue:t,next:null},An===null){if(Wl===null)throw Error(G(308));An=e,Wl.dependencies={lanes:0,firstContext:e}}else An=An.next=e;return t}var $o=null;function Dd(e){$o===null?$o=[e]:$o.push(e)}function fb(e,t,r,o){var n=t.interleaved;return n===null?(r.next=r,Dd(t)):(r.next=n.next,n.next=r),t.interleaved=r,to(e,o)}function to(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 co=!1;function Id(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function pb(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 Kr(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function ko(e,t,r){var o=e.updateQueue;if(o===null)return null;if(o=o.shared,we&2){var n=o.pending;return n===null?t.next=t:(t.next=n.next,n.next=t),o.pending=t,to(e,r)}return n=o.interleaved,n===null?(t.next=t,Dd(o)):(t.next=n.next,n.next=t),o.interleaved=t,to(e,r)}function fl(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,yd(e,r)}}function Ep(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 Vl(e,t,r,o){var n=e.updateQueue;co=!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 f=e.alternate;f!==null&&(f=f.updateQueue,l=f.lastBaseUpdate,l!==a&&(l===null?f.firstBaseUpdate=u:l.next=u,f.lastBaseUpdate=c))}if(i!==null){var d=n.baseState;a=0,f=u=c=null,l=i;do{var p=l.lane,g=l.eventTime;if((o&p)===p){f!==null&&(f=f.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"){d=x.call(g,d,p);break e}d=x;break e;case 3:x.flags=x.flags&-65537|128;case 0:if(x=w.payload,p=typeof x=="function"?x.call(g,d,p):x,p==null)break e;d=Ke({},d,p);break e;case 2:co=!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},f===null?(u=f=g,c=d):f=f.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(f===null&&(c=d),n.baseState=c,n.firstBaseUpdate=u,n.lastBaseUpdate=f,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);on|=a,e.lanes=a,e.memoizedState=d}}function Tp(e,t,r){if(e=t.effects,t.effects=null,e!==null)for(t=0;tr?r:4,e(!0);var o=yc.transition;yc.transition={};try{e(!1),t()}finally{Me=r,yc.transition=o}}function Nb(){return dr().memoizedState}function V_(e,t,r){var o=To(e);if(r={lane:o,action:r,hasEagerState:!1,eagerState:null,next:null},Ob(e))Mb(t,r);else if(r=fb(e,t,r,o),r!==null){var n=Ot();yr(r,e,o,n),Ab(r,t,o)}}function H_(e,t,r){var o=To(e),n={lane:o,action:r,hasEagerState:!1,eagerState:null,next:null};if(Ob(e))Mb(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,_r(l,a)){var c=t.interleaved;c===null?(n.next=n,Dd(t)):(n.next=c.next,c.next=n),t.interleaved=n;return}}catch{}finally{}r=fb(e,t,n,o),r!==null&&(n=Ot(),yr(r,e,o,n),Ab(r,t,o))}}function Ob(e){var t=e.alternate;return e===Ge||t!==null&&t===Ge}function Mb(e,t){Bi=$l=!0;var r=e.pending;r===null?t.next=t:(t.next=r.next,r.next=t),e.pending=t}function Ab(e,t,r){if(r&4194240){var o=t.lanes;o&=e.pendingLanes,r|=o,t.lanes=r,yd(e,r)}}var Yl={readContext:ur,useCallback:yt,useContext:yt,useEffect:yt,useImperativeHandle:yt,useInsertionEffect:yt,useLayoutEffect:yt,useMemo:yt,useReducer:yt,useRef:yt,useState:yt,useDebugValue:yt,useDeferredValue:yt,useTransition:yt,useMutableSource:yt,useSyncExternalStore:yt,useId:yt,unstable_isNewReconciler:!1},$_={readContext:ur,useCallback:function(e,t){return Sr().memoizedState=[e,t===void 0?null:t],e},useContext:ur,useEffect:Sp,useImperativeHandle:function(e,t,r){return r=r!=null?r.concat([e]):null,hl(4194308,4,Tb.bind(null,t,e),r)},useLayoutEffect:function(e,t){return hl(4194308,4,e,t)},useInsertionEffect:function(e,t){return hl(4,2,e,t)},useMemo:function(e,t){var r=Sr();return t=t===void 0?null:t,e=e(),r.memoizedState=[e,t],e},useReducer:function(e,t,r){var o=Sr();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=V_.bind(null,Ge,e),[o.memoizedState,e]},useRef:function(e){var t=Sr();return e={current:e},t.memoizedState=e},useState:Rp,useDebugValue:Vd,useDeferredValue:function(e){return Sr().memoizedState=e},useTransition:function(){var e=Rp(!1),t=e[0];return e=W_.bind(null,e[1]),Sr().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,r){var o=Ge,n=Sr();if(Ye){if(r===void 0)throw Error(G(407));r=r()}else{if(r=t(),gt===null)throw Error(G(349));rn&30||vb(o,t,r)}n.memoizedState=r;var i={value:r,getSnapshot:t};return n.queue=i,Sp(xb.bind(null,o,i,e),[e]),o.flags|=2048,ca(9,mb.bind(null,o,i,r,t),void 0,null),r},useId:function(){var e=Sr(),t=gt.identifierPrefix;if(Ye){var r=Yr,o=$r;r=(o&~(1<<32-xr(o)-1)).toString(32)+r,t=":"+t+"R"+r,r=la++,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[Nr]=t,e[ta]=o,Mb(e,t,!1,!1),t.stateNode=e;e:{switch(a=Jc(r,o),r){case"dialog":We("cancel",e),We("close",e),n=o;break;case"iframe":case"object":case"embed":We("load",e),n=o;break;case"video":case"audio":for(n=0;nqn&&(t.flags|=128,o=!0,bi(i,!1),t.lanes=4194304)}else{if(!o)if(e=Ul(a),e!==null){if(t.flags|=128,o=!0,r=e.updateQueue,r!==null&&(t.updateQueue=r,t.flags|=4),bi(i,!0),i.tail===null&&i.tailMode==="hidden"&&!a.alternate&&!Ye)return _t(t),null}else 2*Qe()-i.renderingStartTime>qn&&r!==1073741824&&(t.flags|=128,o=!0,bi(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=Qe(),t.sibling=null,r=Xe.current,Be(Xe,o?r&1|2:r&1),t):(_t(t),null);case 22:case 23:return Ud(),o=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==o&&(t.flags|=8192),o&&t.mode&1?Yt&1073741824&&(_t(t),t.subtreeFlags&6&&(t.flags|=8192)):_t(t),null;case 24:return null;case 25:return null}throw Error(G(156,t.tag))}function I_(e,t){switch(_d(t),t.tag){case 1:return Ut(t.type)&&Dl(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return Gn(),Ve(Ft),Ve(Lt),Nd(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return Cd(t),null;case 13:if(Ve(Xe),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(G(340));Yn()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return Ve(Xe),null;case 4:return Gn(),null;case 10:return Td(t.type._context),null;case 22:case 23:return Ud(),null;case 24:return null;default:return null}}var Ya=!1,Rt=!1,j_=typeof WeakSet=="function"?WeakSet:Set,ie=null;function Mn(e,t){var r=e.ref;if(r!==null)if(typeof r=="function")try{r(null)}catch(o){qe(e,t,o)}else r.current=null}function Eu(e,t,r){try{r()}catch(o){qe(e,t,o)}}var Sp=!1;function P_(e,t){if(lu=Nl,e=zg(),xd(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,f=0,d=e,p=null;t:for(;;){for(var g;d!==r||n!==0&&d.nodeType!==3||(l=a+n),d!==i||o!==0&&d.nodeType!==3||(c=a+o),d.nodeType===3&&(a+=d.nodeValue.length),(g=d.firstChild)!==null;)p=d,d=g;for(;;){if(d===e)break t;if(p===r&&++u===n&&(l=a),p===i&&++f===o&&(c=a),(g=d.nextSibling)!==null)break;d=p,p=d.parentNode}d=g}r=l===-1||c===-1?null:{start:l,end:c}}else r=null}r=r||{start:0,end:0}}else r=null;for(su={focusedElem:e,selectionRange:r},Nl=!1,ie=t;ie!==null;)if(t=ie,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,ie=e;else for(;ie!==null;){t=ie;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,E=x.memoizedState,b=t.stateNode,h=b.getSnapshotBeforeUpdate(t.elementType===t.type?w:gr(t.type,w),E);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(G(163))}}catch(_){qe(t,t.return,_)}if(e=t.sibling,e!==null){e.return=t.return,ie=e;break}ie=t.return}return x=Sp,Sp=!1,x}function Ii(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&&Eu(t,r,i)}n=n.next}while(n!==o)}}function Es(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 Tu(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 Ib(e){var t=e.alternate;t!==null&&(e.alternate=null,Ib(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[Nr],delete t[ta],delete t[du],delete t[x_],delete t[y_])),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 jb(e){return e.tag===5||e.tag===3||e.tag===4}function Lp(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||jb(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 Ru(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=Al));else if(o!==4&&(e=e.child,e!==null))for(Ru(e,t,r),e=e.sibling;e!==null;)Ru(e,t,r),e=e.sibling}function Su(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(Su(e,t,r),e=e.sibling;e!==null;)Su(e,t,r),e=e.sibling}var bt=null,br=!1;function ao(e,t,r){for(r=r.child;r!==null;)Pb(e,t,r),r=r.sibling}function Pb(e,t,r){if(Ar&&typeof Ar.onCommitFiberUnmount=="function")try{Ar.onCommitFiberUnmount(bs,r)}catch{}switch(r.tag){case 5:Rt||Mn(r,t);case 6:var o=bt,n=br;bt=null,ao(e,t,r),bt=o,br=n,bt!==null&&(br?(e=bt,r=r.stateNode,e.nodeType===8?e.parentNode.removeChild(r):e.removeChild(r)):bt.removeChild(r.stateNode));break;case 18:bt!==null&&(br?(e=bt,r=r.stateNode,e.nodeType===8?fc(e.parentNode,r):e.nodeType===1&&fc(e,r),qi(e)):fc(bt,r.stateNode));break;case 4:o=bt,n=br,bt=r.stateNode.containerInfo,br=!0,ao(e,t,r),bt=o,br=n;break;case 0:case 11:case 14:case 15:if(!Rt&&(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)&&Eu(r,t,a),n=n.next}while(n!==o)}ao(e,t,r);break;case 1:if(!Rt&&(Mn(r,t),o=r.stateNode,typeof o.componentWillUnmount=="function"))try{o.props=r.memoizedProps,o.state=r.memoizedState,o.componentWillUnmount()}catch(l){qe(r,t,l)}ao(e,t,r);break;case 21:ao(e,t,r);break;case 22:r.mode&1?(Rt=(o=Rt)||r.memoizedState!==null,ao(e,t,r),Rt=o):ao(e,t,r);break;default:ao(e,t,r)}}function Cp(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var r=e.stateNode;r===null&&(r=e.stateNode=new j_),t.forEach(function(o){var n=Y_.bind(null,e,o);r.has(o)||(r.add(o),o.then(n,n))})}}function hr(e,t){var r=t.deletions;if(r!==null)for(var o=0;on&&(n=a),o&=~i}if(o=n,o=Qe()-o,o=(120>o?120:480>o?480:1080>o?1080:1920>o?1920:3e3>o?3e3:4320>o?4320:1960*z_(o/1960))-o,10e?16:e,go===null)var o=!1;else{if(e=go,go=null,Yl=0,we&6)throw Error(G(331));var n=we;for(we|=4,ie=e.current;ie!==null;){var i=ie,a=i.child;if(ie.flags&16){var l=i.deletions;if(l!==null){for(var c=0;cQe()-zd?Go(e,0):Bd|=r),Wt(e,t)}function $b(e,t){t===0&&(e.mode&1?(t=Pa,Pa<<=1,!(Pa&130023424)&&(Pa=4194304)):t=1);var r=Ot();e=to(e,t),e!==null&&(ma(e,t,r),Wt(e,r))}function $_(e){var t=e.memoizedState,r=0;t!==null&&(r=t.retryLane),$b(e,r)}function Y_(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(G(314))}o!==null&&o.delete(t),$b(e,r)}var Yb;Yb=function(e,t,r){if(e!==null)if(e.memoizedProps!==t.pendingProps||Ft.current)Bt=!0;else{if(!(e.lanes&r)&&!(t.flags&128))return Bt=!1,A_(e,t,r);Bt=!!(e.flags&131072)}else Bt=!1,Ye&&t.flags&1048576&&qg(t,Pl,t.index);switch(t.lanes=0,t.tag){case 2:var o=t.type;fl(e,t),e=t.pendingProps;var n=$n(t,Lt.current);zn(t,r),n=Md(null,t,o,e,n,r);var i=Ad();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,Ut(o)?(i=!0,Il(t)):i=!1,t.memoizedState=n.state!==null&&n.state!==void 0?n.state:null,Sd(t),n.updater=ks,t.stateNode=n,n._reactInternals=t,vu(t,o,e,r),t=yu(null,t,o,!0,i,r)):(t.tag=0,Ye&&i&&yd(t),Ct(null,t,n,r),t=t.child),t;case 16:o=t.elementType;e:{switch(fl(e,t),e=t.pendingProps,n=o._init,o=n(o._payload),t.type=o,n=t.tag=G_(o),e=gr(o,e),n){case 0:t=xu(null,t,o,e,r);break e;case 1:t=Ep(null,t,o,e,r);break e;case 11:t=wp(null,t,o,e,r);break e;case 14:t=kp(null,t,o,gr(o.type,e),r);break e}throw Error(G(306,o,""))}return t;case 0:return o=t.type,n=t.pendingProps,n=t.elementType===o?n:gr(o,n),xu(e,t,o,n,r);case 1:return o=t.type,n=t.pendingProps,n=t.elementType===o?n:gr(o,n),Ep(e,t,o,n,r);case 3:e:{if(Cb(t),e===null)throw Error(G(387));o=t.pendingProps,i=t.memoizedState,n=i.element,rb(e,t),Fl(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=Kn(Error(G(423)),t),t=Tp(e,t,o,r,n);break e}else if(o!==n){n=Kn(Error(G(424)),t),t=Tp(e,t,o,r,n);break e}else for(Kt=wo(t.stateNode.containerInfo.firstChild),qt=t,Ye=!0,vr=null,r=eb(t,null,o,r),t.child=r;r;)r.flags=r.flags&-3|4096,r=r.sibling;else{if(Yn(),o===n){t=ro(e,t,r);break e}Ct(e,t,o,r)}t=t.child}return t;case 5:return ob(t),e===null&&hu(t),o=t.type,n=t.pendingProps,i=e!==null?e.memoizedProps:null,a=n.children,cu(o,n)?a=null:i!==null&&cu(o,i)&&(t.flags|=32),Lb(e,t),Ct(e,t,a,r),t.child;case 6:return e===null&&hu(t),null;case 13:return Nb(e,t,r);case 4:return Ld(t,t.stateNode.containerInfo),o=t.pendingProps,e===null?t.child=Xn(t,null,o,r):Ct(e,t,o,r),t.child;case 11:return o=t.type,n=t.pendingProps,n=t.elementType===o?n:gr(o,n),wp(e,t,o,n,r);case 7:return Ct(e,t,t.pendingProps,r),t.child;case 8:return Ct(e,t,t.pendingProps.children,r),t.child;case 12:return Ct(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(Bl,o._currentValue),o._currentValue=a,i!==null)if(_r(i.value,a)){if(i.children===n.children&&!Ft.current){t=ro(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=Kr(-1,r&-r),c.tag=2;var u=i.updateQueue;if(u!==null){u=u.shared;var f=u.pending;f===null?c.next=c:(c.next=f.next,f.next=c),u.pending=c}}i.lanes|=r,c=i.alternate,c!==null&&(c.lanes|=r),gu(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(G(341));a.lanes|=r,l=a.alternate,l!==null&&(l.lanes|=r),gu(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}Ct(e,t,n.children,r),t=t.child}return t;case 9:return n=t.type,o=t.pendingProps.children,zn(t,r),n=ur(n),o=o(n),t.flags|=1,Ct(e,t,o,r),t.child;case 14:return o=t.type,n=gr(o,t.pendingProps),n=gr(o.type,n),kp(e,t,o,n,r);case 15:return Rb(e,t,t.type,t.pendingProps,r);case 17:return o=t.type,n=t.pendingProps,n=t.elementType===o?n:gr(o,n),fl(e,t),t.tag=1,Ut(o)?(e=!0,Il(t)):e=!1,zn(t,r),kb(t,o,n),vu(t,o,n,r),yu(null,t,o,!0,e,r);case 19:return Ob(e,t,r);case 22:return Sb(e,t,r)}throw Error(G(156,t.tag))};function Xb(e,t){return yg(e,t)}function X_(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 lr(e,t,r,o){return new X_(e,t,r,o)}function Vd(e){return e=e.prototype,!(!e||!e.isReactComponent)}function G_(e){if(typeof e=="function")return Vd(e)?1:0;if(e!=null){if(e=e.$$typeof,e===sd)return 11;if(e===cd)return 14}return 2}function Ro(e,t){var r=e.alternate;return r===null?(r=lr(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 gl(e,t,r,o,n,i){var a=2;if(o=e,typeof e=="function")Vd(e)&&(a=1);else if(typeof e=="string")a=5;else e:switch(e){case kn:return Ko(r.children,n,i,t);case ld:a=8,n|=8;break;case Uc:return e=lr(12,r,t,n|2),e.elementType=Uc,e.lanes=i,e;case Wc:return e=lr(13,r,t,n),e.elementType=Wc,e.lanes=i,e;case Vc:return e=lr(19,r,t,n),e.elementType=Vc,e.lanes=i,e;case og:return Rs(r,n,i,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case tg:a=10;break e;case rg:a=9;break e;case sd:a=11;break e;case cd:a=14;break e;case so:a=16,o=null;break e}throw Error(G(130,e==null?e:typeof e,""))}return t=lr(a,r,t,n),t.elementType=e,t.type=o,t.lanes=i,t}function Ko(e,t,r,o){return e=lr(7,e,o,t),e.lanes=r,e}function Rs(e,t,r,o){return e=lr(22,e,o,t),e.elementType=og,e.lanes=r,e.stateNode={isHidden:!1},e}function yc(e,t,r){return e=lr(6,e,null,t),e.lanes=r,e}function _c(e,t,r){return t=lr(4,e.children!==null?e.children:[],e.key,t),t.lanes=r,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function K_(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=tc(0),this.expirationTimes=tc(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=tc(0),this.identifierPrefix=o,this.onRecoverableError=n,this.mutableSourceEagerHydrationData=null}function Hd(e,t,r,o,n,i,a,l,c){return e=new K_(e,t,r,l,c),t===1?(t=1,i===!0&&(t|=8)):t=0,i=lr(3,null,null,t),e.current=i,i.stateNode=e,i.memoizedState={element:o,isDehydrated:r,cache:null,transitions:null,pendingSuspenseBoundaries:null},Sd(i),e}function q_(e,t,r){var o=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(Jb)}catch(e){console.error(e)}}Jb(),Jh.exports=Zt;var Pr=Jh.exports,ii,Pp=Pr;ii=Hi.createRoot=Pp.createRoot,Hi.hydrateRoot=Pp.hydrateRoot;function gt(){return Sx}function Xr(){return Lx}function Zb(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 Qb(e){return e._nodes??e.nodes??[]}function tw(e){return e._groups??e.groups??[]}function rw(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 ev(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 Qb(n)){const c=rw(l);c&&o.push({graph:c,path:i.concat([{node:l,graph:n,depth:i.length+1}])})}}}}function ow(){return globalThis.crypto?.randomUUID?.()??`bv-group-${Date.now()}-${Math.random().toString(16).slice(2)}`}function nw(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=ow();while(t.has(o));r.flags.bvGroupId=o}return t.add(o),o}function Kl(e){const t=Zb(e);if(!t)return[];const r=[],o=new Set;return ev(t,(n,i)=>{for(const a of tw(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:nw(a,o),pathLabel:c})}}),r}function iw(e,t){const r=Zb(e);if(!r)return[];const o=[];return ev(r,(n,i)=>{for(const a of Qb(n))tv(a,t)&&o.push({node:a,graph:n,path:i})}),o}function tv(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 Jn="bv-control-config-changed";function aw(){return{version:2,forceActive:!1,controls:[]}}function Gd(e){var r;const t=gt()?.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(Jn,{detail:e})))}function an(){const e=gt()?.rootGraph?.extra?.bv_settings?.controlConfig;return e?.version===2?e:aw()}function lw(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],[f,d]=l.size||[0,0];return c+f/2>=o&&c+f/2<=o+i&&u+d/2>=n&&u+d/2<=n+a})}const Bp={activate:3,mute:2,bypass:1},zp=e=>e.charAt(0).toUpperCase()+e.slice(1);function rv(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)=>Bp[a.action]>Bp[i]?a.action:i,o[0].action);r.push({groupId:o[0].groupId,groupPath:o[0].groupPath,winnerAction:n,entries:o})}return r}function sw(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}: ${zp(t.winnerAction)} overrides ${r.split(", ").map(zp).join(", ")}`}function ov({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()),[]),Pr.createPortal(e,t.current)}function Ao({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,E=i?Math.min(Math.max(p.width,240),window.innerWidth-x*2):void 0,b=E??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:E,visibility:"visible"})};u();const f=requestAnimationFrame(u),d=new ResizeObserver(u);return t.current&&d.observe(t.current),a.current&&d.observe(a.current),window.addEventListener("resize",u),window.addEventListener("scroll",u,!0),()=>{cancelAnimationFrame(f),d.disconnect(),window.removeEventListener("resize",u),window.removeEventListener("scroll",u,!0)}},[t,i,e]),m.useEffect(()=>{if(!e)return;const u=d=>{const p=d.target;!t.current?.contains(p)&&!a.current?.contains(p)&&o?.()},f=d=>{d.key==="Escape"&&o?.()};return document.addEventListener("pointerdown",u),document.addEventListener("keydown",f),()=>{document.removeEventListener("pointerdown",u),document.removeEventListener("keydown",f)}},[t,o,e]),e?s.jsx(ov,{children:s.jsx("div",{ref:a,className:`bv-anchored-popover ${n}`.trim(),style:l,children:r})}):null}function Kd({density:e="compact",className:t="",children:r}){return s.jsx("div",{className:`bv-density-${e} ${t}`.trim(),children:r})}function ae({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 cw({actions:e,onClose:t}){return s.jsx("div",{className:"bv-menu-content",role:"menu",children:e.map(r=>s.jsxs(Te.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 qd({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(ae,{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(Ao,{open:i,anchor:l,onClose:()=>a(!1),className:"bv-menu",children:s.jsx(cw,{actions:t,onClose:()=>a(!1)})})]})}function uw({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(Te.Fragment,{children:[a>0&&i.group!==e[a-1].group&&s.jsx("span",{className:"bv-toolbar-divider"}),s.jsx(ae,{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(qd,{label:"More",actions:o,intent:"ghost",density:n})]})}function Fp({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 Os({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(ae,{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(Ao,{open:a,anchor:c,onClose:()=>l(!1),className:"bv-adaptive-popover",children:[s.jsxs("header",{children:[s.jsx("strong",{children:e}),s.jsx(ae,{type:"button",intent:"ghost",icon:"×",iconOnly:!0,"aria-label":`Close ${e} editor`,onClick:()=>l(!1)})]}),s.jsx("div",{children:n})]})]})}function wa({open:e,title:t,description:r,children:o,footer:n,onClose:i,modal:a=!0,size:l="medium"}){return e?s.jsx(ov,{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(ae,{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 Jd({open:e,editorName:t,onSave:r,onDiscard:o,onKeep:n}){return s.jsx(wa,{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(ae,{intent:"ghost",onClick:n,children:"Keep editing"}),s.jsx(ae,{intent:"secondary",onClick:o,children:"Discard"}),s.jsx(ae,{intent:"primary",onClick:r,children:"Save"})]}),children:s.jsx("p",{children:"Save the current draft, discard it, or return to the editor."})})}function Zd(){const[e,t]=m.useState(null),r=n=>t({confirmLabel:"Continue",danger:!1,...n}),o=s.jsx(wa,{open:!!e,title:e?.title??"Confirm action",onClose:()=>t(null),size:"small",footer:s.jsxs(s.Fragment,{children:[s.jsx(ae,{intent:"ghost",onClick:()=>t(null),children:"Cancel"}),s.jsx(ae,{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 Up({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(Ao,{open:l,anchor:a,onClose:()=>c(!1),className:"bv-popover",children:t})]})}function Ms({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:f=>f.preventDefault(),onDrop:()=>{if(!l||l===u.id)return;const f=[...e],d=f.findIndex(x=>x.id===l),p=f.findIndex(x=>x.id===u.id),[g]=f.splice(d,1);f.splice(p,0,g),t(f),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(ae,{intent:"ghost",iconOnly:!0,"aria-label":`Remove ${String(u.title)}`,title:"Remove",onClick:()=>r(u.id),children:"×"}),u.content&&s.jsx(ae,{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(f=>f.includes(u.id)?f.filter(d=>d!==u.id):[...f,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 nt=Te.forwardRef(function({type:t="button",...r},o){return s.jsx("button",{...r,type:t,ref:o})}),dw=Te.forwardRef(function(t,r){return s.jsx("input",{...t,ref:r})});function Ir({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(ae,{intent:"ghost",iconOnly:!0,"aria-label":"Close",onClick:i,children:"×"})]})}function nv({children:e,tone:t="neutral",dot:r=!1}){return s.jsx("span",{className:`bv-badge ${t} ${r?"dot":""}`,children:e})}function As({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 fw({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(ae,{intent:"ghost",iconOnly:!0,"aria-label":"Dismiss",onClick:o,children:"×"})]})}function ai(){return(ai=Object.assign||function(e){for(var t=1;t=0||(n[r]=e[r]);return n}function Bi(e){var t=m.useRef(e),r=m.useRef(function(o){t.current&&t.current(o)});return t.current=e,r.current}var Zn=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(Wp(i.current,v,u.current)):(h(!1),c())},b=function(){h(!1),c()};function h(v){var _=f.current,y=Mu(i.current),T=v?y.addEventListener:y.removeEventListener;T(_?"touchmove":"mousemove",E),T(_?"touchend":"mouseup",b)}return[function(v){var _=v.nativeEvent,y=i.current;if(y&&(Vp(_),!function(L,B){return B&&!zi(L)}(_,f.current)&&y)){if(zi(_)){f.current=!0;var T=_.changedTouches||[];T.length&&(u.current=T[0].identifier)}y.focus(),a(Wp(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=d[0],g=d[1],x=d[2],w=d[3];return m.useEffect(function(){return w},[w]),Te.createElement("div",ai({},n,{onTouchStart:p,onMouseDown:p,className:"react-colorful__interactive",ref:i,onKeyDown:g,onKeyUp:x,tabIndex:0,role:"slider"}))}),ka=function(e){return e.filter(Boolean).join(" ")},tf=function(e){var t=e.color,r=e.left,o=e.top,n=o===void 0?.5:o,i=ka(["react-colorful__pointer",e.className]);return Te.createElement("div",{className:i,style:{top:100*n+"%",left:100*r+"%"}},Te.createElement("div",{className:"react-colorful__pointer-fill",style:{backgroundColor:t}}))},ft=function(e,t,r){return t===void 0&&(t=0),r===void 0&&(r=Math.pow(10,t)),Math.round(r*e)/r},iv=function(e){return gw(Au(e))},Au=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?ft(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?ft(parseInt(e.substring(6,8),16)/255,2):1}},av=function(e){return hw(pw(e))},lv=function(e){var t=e.s,r=e.v,o=e.a,n=(200-t)*r/100;return{h:ft(e.h),s:ft(n>0&&n<200?t*r/100/(n<=100?n:200-n)*100:0),l:ft(n/2),a:ft(o,2)}},Du=function(e){var t=lv(e);return"hsl("+t.h+", "+t.s+"%, "+t.l+"%)"},wc=function(e){var t=lv(e);return"hsla("+t.h+", "+t.s+"%, "+t.l+"%, "+t.a+")"},pw=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:ft(255*[o,l,a,a,c,o][u]),g:ft(255*[c,o,o,l,a,a][u]),b:ft(255*[a,a,c,o,o,l][u]),a:ft(n,2)}},Ka=function(e){var t=e.toString(16);return t.length<2?"0"+t:t},hw=function(e){var t=e.r,r=e.g,o=e.b,n=e.a,i=n<1?Ka(ft(255*n)):"";return"#"+Ka(t)+Ka(r)+Ka(o)+i},gw=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:ft(60*(l<0?l+6:l)),s:ft(i?a/i*100:0),v:ft(i/255*100),a:n}},sv=Te.memo(function(e){var t=e.hue,r=e.onChange,o=e.onChangeEnd,n=ka(["react-colorful__hue",e.className]);return Te.createElement("div",{className:n},Te.createElement(ef,{onMove:function(i){r({h:360*i.left})},onKey:function(i){r({h:Zn(t+360*i.left,0,360)})},onEnd:o,"aria-label":"Hue","aria-valuenow":ft(t),"aria-valuemax":"360","aria-valuemin":"0"},Te.createElement(tf,{className:"react-colorful__hue-pointer",left:t/360,color:Du({h:t,s:100,v:100,a:1})})))}),cv=Te.memo(function(e){var t=e.hsva,r=e.onChange,o=e.onChangeEnd,n={backgroundColor:Du({h:t.h,s:100,v:100,a:1})};return Te.createElement("div",{className:"react-colorful__saturation",style:n},Te.createElement(ef,{onMove:function(i){r({s:100*i.left,v:100-100*i.top})},onKey:function(i){r({s:Zn(t.s+100*i.left,0,100),v:Zn(t.v-100*i.top,0,100)})},onEnd:o,"aria-label":"Color","aria-valuetext":"Saturation "+ft(t.s)+"%, Brightness "+ft(t.v)+"%"},Te.createElement(tf,{className:"react-colorful__saturation-pointer",top:1-t.v/100,left:t.s/100,color:Du(t)})))}),uv=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()||uv(Au(e),Au(t))};function fv(e,t,r,o){var n=Bi(r),i=Bi(o),a=m.useState(function(){return e.toHsva(t)}),l=a[0],c=a[1],u=m.useRef({color:t,hsva:l}),f=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),f.current=!1}},[t,e]),m.useEffect(function(){var g;uv(l,u.current.hsva)||e.equal(g=e.fromHsva(l),u.current.color)||(u.current={hsva:l,color:g},n(g),f.current=!0)},[l,e,n]);var d=m.useCallback(function(g){c(function(x){return Object.assign({},x,g)})},[]),p=m.useCallback(function(){f.current&&(f.current=!1,i(u.current.color))},[i]);return[l,d,p]}var bw=typeof window<"u"?m.useLayoutEffect:m.useEffect,vw=function(){return typeof __webpack_nonce__<"u"?__webpack_nonce__:void 0},Hp=new WeakMap,pv=function(e){bw(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(!Hp.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=vw();a&&i.setAttribute("nonce",a),Hp.set(o,i),n.appendChild(i)}}},[])},mw=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=Qd(e,["className","colorModel","color","onChange","onChangeEnd"]),c=m.useRef(null);pv(c);var u=fv(r,n,i,a),f=u[0],d=u[1],p=u[2],g=ka(["react-colorful",t]);return Te.createElement("div",ai({},l,{ref:c,className:g}),Te.createElement(cv,{hsva:f,onChange:d,onChangeEnd:p}),Te.createElement(sv,{hue:f.h,onChange:d,onChangeEnd:p,className:"react-colorful__last-control"}))},xw={defaultColor:"000",toHsva:iv,fromHsva:function(e){return av({h:e.h,s:e.s,v:e.v,a:1})},equal:dv},yw=function(e){return Te.createElement(mw,ai({},e,{colorModel:xw}))},_w=function(e){var t=e.className,r=e.hsva,o=e.onChange,n=e.onChangeEnd,i={backgroundImage:"linear-gradient(90deg, "+wc(Object.assign({},r,{a:0}))+", "+wc(Object.assign({},r,{a:1}))+")"},a=ka(["react-colorful__alpha",t]),l=ft(100*r.a);return Te.createElement("div",{className:a},Te.createElement("div",{className:"react-colorful__alpha-gradient",style:i}),Te.createElement(ef,{onMove:function(c){o({a:c.left})},onKey:function(c){o({a:Zn(r.a+c.left)})},onEnd:n,"aria-label":"Alpha","aria-valuetext":l+"%","aria-valuenow":l,"aria-valuemin":"0","aria-valuemax":"100"},Te.createElement(tf,{className:"react-colorful__alpha-pointer",left:r.a,color:wc(r)})))},ww=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=Qd(e,["className","colorModel","color","onChange","onChangeEnd"]),c=m.useRef(null);pv(c);var u=fv(r,n,i,a),f=u[0],d=u[1],p=u[2],g=ka(["react-colorful",t]);return Te.createElement("div",ai({},l,{ref:c,className:g}),Te.createElement(cv,{hsva:f,onChange:d,onChangeEnd:p}),Te.createElement(sv,{hue:f.h,onChange:d,onChangeEnd:p}),Te.createElement(_w,{hsva:f,onChange:d,onChangeEnd:p,className:"react-colorful__last-control"}))},kw={defaultColor:"0001",toHsva:iv,fromHsva:av,equal:dv},Ew=function(e){return Te.createElement(ww,ai({},e,{colorModel:kw}))},hv={},ut=cr&&cr.__assign||function(){return ut=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[Nr]=t,e[na]=o,Vb(e,t,!1,!1),t.stateNode=e;e:{switch(a=nu(r,o),r){case"dialog":We("cancel",e),We("close",e),n=o;break;case"iframe":case"object":case"embed":We("load",e),n=o;break;case"video":case"audio":for(n=0;nQn&&(t.flags|=128,o=!0,yi(i,!1),t.lanes=4194304)}else{if(!o)if(e=Hl(a),e!==null){if(t.flags|=128,o=!0,r=e.updateQueue,r!==null&&(t.updateQueue=r,t.flags|=4),yi(i,!0),i.tail===null&&i.tailMode==="hidden"&&!a.alternate&&!Ye)return _t(t),null}else 2*Qe()-i.renderingStartTime>Qn&&r!==1073741824&&(t.flags|=128,o=!0,yi(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=Qe(),t.sibling=null,r=Xe.current,Be(Xe,o?r&1|2:r&1),t):(_t(t),null);case 22:case 23:return Kd(),o=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==o&&(t.flags|=8192),o&&t.mode&1?Yt&1073741824&&(_t(t),t.subtreeFlags&6&&(t.flags|=8192)):_t(t),null;case 24:return null;case 25:return null}throw Error(G(156,t.tag))}function Q_(e,t){switch(Cd(t),t.tag){case 1:return Ut(t.type)&&Pl(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return Jn(),Ve(Ft),Ve(Lt),Bd(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return Pd(t),null;case 13:if(Ve(Xe),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(G(340));Kn()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return Ve(Xe),null;case 4:return Jn(),null;case 10:return Ad(t.type._context),null;case 22:case 23:return Kd(),null;case 24:return null;default:return null}}var Ka=!1,Rt=!1,ew=typeof WeakSet=="function"?WeakSet:Set,ae=null;function Dn(e,t){var r=e.ref;if(r!==null)if(typeof r=="function")try{r(null)}catch(o){qe(e,t,o)}else r.current=null}function Ou(e,t,r){try{r()}catch(o){qe(e,t,o)}}var Bp=!1;function tw(e,t){if(hu=Al,e=qg(),Sd(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,f=0,d=e,p=null;t:for(;;){for(var g;d!==r||n!==0&&d.nodeType!==3||(l=a+n),d!==i||o!==0&&d.nodeType!==3||(c=a+o),d.nodeType===3&&(a+=d.nodeValue.length),(g=d.firstChild)!==null;)p=d,d=g;for(;;){if(d===e)break t;if(p===r&&++u===n&&(l=a),p===i&&++f===o&&(c=a),(g=d.nextSibling)!==null)break;d=p,p=d.parentNode}d=g}r=l===-1||c===-1?null:{start:l,end:c}}else r=null}r=r||{start:0,end:0}}else r=null;for(gu={focusedElem:e,selectionRange:r},Al=!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,E=x.memoizedState,b=t.stateNode,h=b.getSnapshotBeforeUpdate(t.elementType===t.type?w:gr(t.type,w),E);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(G(163))}}catch(_){qe(t,t.return,_)}if(e=t.sibling,e!==null){e.return=t.return,ae=e;break}ae=t.return}return x=Bp,Bp=!1,x}function zi(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&&Ou(t,r,i)}n=n.next}while(n!==o)}}function Cs(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 Mu(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 Yb(e){var t=e.alternate;t!==null&&(e.alternate=null,Yb(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[Nr],delete t[na],delete t[mu],delete t[P_],delete t[B_])),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 Xb(e){return e.tag===5||e.tag===3||e.tag===4}function zp(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||Xb(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 Au(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=jl));else if(o!==4&&(e=e.child,e!==null))for(Au(e,t,r),e=e.sibling;e!==null;)Au(e,t,r),e=e.sibling}function Du(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(Du(e,t,r),e=e.sibling;e!==null;)Du(e,t,r),e=e.sibling}var bt=null,br=!1;function ao(e,t,r){for(r=r.child;r!==null;)Gb(e,t,r),r=r.sibling}function Gb(e,t,r){if(Ar&&typeof Ar.onCommitFiberUnmount=="function")try{Ar.onCommitFiberUnmount(_s,r)}catch{}switch(r.tag){case 5:Rt||Dn(r,t);case 6:var o=bt,n=br;bt=null,ao(e,t,r),bt=o,br=n,bt!==null&&(br?(e=bt,r=r.stateNode,e.nodeType===8?e.parentNode.removeChild(r):e.removeChild(r)):bt.removeChild(r.stateNode));break;case 18:bt!==null&&(br?(e=bt,r=r.stateNode,e.nodeType===8?vc(e.parentNode,r):e.nodeType===1&&vc(e,r),Qi(e)):vc(bt,r.stateNode));break;case 4:o=bt,n=br,bt=r.stateNode.containerInfo,br=!0,ao(e,t,r),bt=o,br=n;break;case 0:case 11:case 14:case 15:if(!Rt&&(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)&&Ou(r,t,a),n=n.next}while(n!==o)}ao(e,t,r);break;case 1:if(!Rt&&(Dn(r,t),o=r.stateNode,typeof o.componentWillUnmount=="function"))try{o.props=r.memoizedProps,o.state=r.memoizedState,o.componentWillUnmount()}catch(l){qe(r,t,l)}ao(e,t,r);break;case 21:ao(e,t,r);break;case 22:r.mode&1?(Rt=(o=Rt)||r.memoizedState!==null,ao(e,t,r),Rt=o):ao(e,t,r);break;default:ao(e,t,r)}}function Fp(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var r=e.stateNode;r===null&&(r=e.stateNode=new ew),t.forEach(function(o){var n=uw.bind(null,e,o);r.has(o)||(r.add(o),o.then(n,n))})}}function hr(e,t){var r=t.deletions;if(r!==null)for(var o=0;on&&(n=a),o&=~i}if(o=n,o=Qe()-o,o=(120>o?120:480>o?480:1080>o?1080:1920>o?1920:3e3>o?3e3:4320>o?4320:1960*ow(o/1960))-o,10e?16:e,go===null)var o=!1;else{if(e=go,go=null,Kl=0,we&6)throw Error(G(331));var n=we;for(we|=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;cQe()-Xd?Go(e,0):Yd|=r),Wt(e,t)}function rv(e,t){t===0&&(e.mode&1?(t=Fa,Fa<<=1,!(Fa&130023424)&&(Fa=4194304)):t=1);var r=Ot();e=to(e,t),e!==null&&(_a(e,t,r),Wt(e,r))}function cw(e){var t=e.memoizedState,r=0;t!==null&&(r=t.retryLane),rv(e,r)}function uw(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(G(314))}o!==null&&o.delete(t),rv(e,r)}var ov;ov=function(e,t,r){if(e!==null)if(e.memoizedProps!==t.pendingProps||Ft.current)Bt=!0;else{if(!(e.lanes&r)&&!(t.flags&128))return Bt=!1,J_(e,t,r);Bt=!!(e.flags&131072)}else Bt=!1,Ye&&t.flags&1048576&&lb(t,Fl,t.index);switch(t.lanes=0,t.tag){case 2:var o=t.type;gl(e,t),e=t.pendingProps;var n=Gn(t,Lt.current);Un(t,r),n=Fd(null,t,o,e,n,r);var i=Ud();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,Ut(o)?(i=!0,Bl(t)):i=!1,t.memoizedState=n.state!==null&&n.state!==void 0?n.state:null,Id(t),n.updater=Ls,t.stateNode=n,n._reactInternals=t,Eu(t,o,e,r),t=Su(null,t,o,!0,i,r)):(t.tag=0,Ye&&i&&Ld(t),Ct(null,t,n,r),t=t.child),t;case 16:o=t.elementType;e:{switch(gl(e,t),e=t.pendingProps,n=o._init,o=n(o._payload),t.type=o,n=t.tag=fw(o),e=gr(o,e),n){case 0:t=Ru(null,t,o,e,r);break e;case 1:t=Ip(null,t,o,e,r);break e;case 11:t=Ap(null,t,o,e,r);break e;case 14:t=Dp(null,t,o,gr(o.type,e),r);break e}throw Error(G(306,o,""))}return t;case 0:return o=t.type,n=t.pendingProps,n=t.elementType===o?n:gr(o,n),Ru(e,t,o,n,r);case 1:return o=t.type,n=t.pendingProps,n=t.elementType===o?n:gr(o,n),Ip(e,t,o,n,r);case 3:e:{if(Fb(t),e===null)throw Error(G(387));o=t.pendingProps,i=t.memoizedState,n=i.element,pb(e,t),Vl(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(G(423)),t),t=jp(e,t,o,r,n);break e}else if(o!==n){n=Zn(Error(G(424)),t),t=jp(e,t,o,r,n);break e}else for(Kt=wo(t.stateNode.containerInfo.firstChild),qt=t,Ye=!0,vr=null,r=db(t,null,o,r),t.child=r;r;)r.flags=r.flags&-3|4096,r=r.sibling;else{if(Kn(),o===n){t=ro(e,t,r);break e}Ct(e,t,o,r)}t=t.child}return t;case 5:return hb(t),e===null&&_u(t),o=t.type,n=t.pendingProps,i=e!==null?e.memoizedProps:null,a=n.children,bu(o,n)?a=null:i!==null&&bu(o,i)&&(t.flags|=32),zb(e,t),Ct(e,t,a,r),t.child;case 6:return e===null&&_u(t),null;case 13:return Ub(e,t,r);case 4:return jd(t,t.stateNode.containerInfo),o=t.pendingProps,e===null?t.child=qn(t,null,o,r):Ct(e,t,o,r),t.child;case 11:return o=t.type,n=t.pendingProps,n=t.elementType===o?n:gr(o,n),Ap(e,t,o,n,r);case 7:return Ct(e,t,t.pendingProps,r),t.child;case 8:return Ct(e,t,t.pendingProps.children,r),t.child;case 12:return Ct(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(Ul,o._currentValue),o._currentValue=a,i!==null)if(_r(i.value,a)){if(i.children===n.children&&!Ft.current){t=ro(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=Kr(-1,r&-r),c.tag=2;var u=i.updateQueue;if(u!==null){u=u.shared;var f=u.pending;f===null?c.next=c:(c.next=f.next,f.next=c),u.pending=c}}i.lanes|=r,c=i.alternate,c!==null&&(c.lanes|=r),wu(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(G(341));a.lanes|=r,l=a.alternate,l!==null&&(l.lanes|=r),wu(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}Ct(e,t,n.children,r),t=t.child}return t;case 9:return n=t.type,o=t.pendingProps.children,Un(t,r),n=ur(n),o=o(n),t.flags|=1,Ct(e,t,o,r),t.child;case 14:return o=t.type,n=gr(o,t.pendingProps),n=gr(o.type,n),Dp(e,t,o,n,r);case 15:return Pb(e,t,t.type,t.pendingProps,r);case 17:return o=t.type,n=t.pendingProps,n=t.elementType===o?n:gr(o,n),gl(e,t),t.tag=1,Ut(o)?(e=!0,Bl(t)):e=!1,Un(t,r),Db(t,o,n),Eu(t,o,n,r),Su(null,t,o,!0,e,r);case 19:return Wb(e,t,r);case 22:return Bb(e,t,r)}throw Error(G(156,t.tag))};function nv(e,t){return Og(e,t)}function dw(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 lr(e,t,r,o){return new dw(e,t,r,o)}function Jd(e){return e=e.prototype,!(!e||!e.isReactComponent)}function fw(e){if(typeof e=="function")return Jd(e)?1:0;if(e!=null){if(e=e.$$typeof,e===bd)return 11;if(e===vd)return 14}return 2}function Ro(e,t){var r=e.alternate;return r===null?(r=lr(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 ml(e,t,r,o,n,i){var a=2;if(o=e,typeof e=="function")Jd(e)&&(a=1);else if(typeof e=="string")a=5;else e:switch(e){case Tn:return Ko(r.children,n,i,t);case gd:a=8,n|=8;break;case Gc:return e=lr(12,r,t,n|2),e.elementType=Gc,e.lanes=i,e;case Kc:return e=lr(13,r,t,n),e.elementType=Kc,e.lanes=i,e;case qc:return e=lr(19,r,t,n),e.elementType=qc,e.lanes=i,e;case hg:return Os(r,n,i,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case fg:a=10;break e;case pg:a=9;break e;case bd:a=11;break e;case vd:a=14;break e;case so:a=16,o=null;break e}throw Error(G(130,e==null?e:typeof e,""))}return t=lr(a,r,t,n),t.elementType=e,t.type=o,t.lanes=i,t}function Ko(e,t,r,o){return e=lr(7,e,o,t),e.lanes=r,e}function Os(e,t,r,o){return e=lr(22,e,o,t),e.elementType=hg,e.lanes=r,e.stateNode={isHidden:!1},e}function Tc(e,t,r){return e=lr(6,e,null,t),e.lanes=r,e}function Rc(e,t,r){return t=lr(4,e.children!==null?e.children:[],e.key,t),t.lanes=r,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function pw(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=ac(0),this.expirationTimes=ac(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=ac(0),this.identifierPrefix=o,this.onRecoverableError=n,this.mutableSourceEagerHydrationData=null}function Zd(e,t,r,o,n,i,a,l,c){return e=new pw(e,t,r,l,c),t===1?(t=1,i===!0&&(t|=8)):t=0,i=lr(3,null,null,t),e.current=i,i.stateNode=e,i.memoizedState={element:o,isDehydrated:r,cache:null,transitions:null,pendingSuspenseBoundaries:null},Id(i),e}function hw(e,t,r){var o=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(sv)}catch(e){console.error(e)}}sv(),sg.exports=Zt;var Pr=sg.exports,ci,Gp=Pr;ci=Yn.createRoot=Gp.createRoot,Yn.hydrateRoot=Gp.hydrateRoot;function ct(){return $x}function Xr(){return Yx}function cv(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 uv(e){return e._nodes??e.nodes??[]}function xw(e){return e._groups??e.groups??[]}function yw(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 dv(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 uv(n)){const c=yw(l);c&&o.push({graph:c,path:i.concat([{node:l,graph:n,depth:i.length+1}])})}}}}function _w(){return globalThis.crypto?.randomUUID?.()??`bv-group-${Date.now()}-${Math.random().toString(16).slice(2)}`}function ww(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=_w();while(t.has(o));r.flags.bvGroupId=o}return t.add(o),o}function Zl(e){const t=cv(e);if(!t)return[];const r=[],o=new Set;return dv(t,(n,i)=>{for(const a of xw(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:ww(a,o),pathLabel:c})}}),r}function kw(e,t){const r=cv(e);if(!r)return[];const o=[];return dv(r,(n,i)=>{for(const a of uv(n))fv(a,t)&&o.push({node:a,graph:n,path:i})}),o}function fv(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 Ew(){return{version:2,forceActive:!1,controls:[]}}function rf(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 an(){const e=ct()?.rootGraph?.extra?.bv_settings?.controlConfig;return e?.version===2?e:Ew()}function Tw(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],[f,d]=l.size||[0,0];return c+f/2>=o&&c+f/2<=o+i&&u+d/2>=n&&u+d/2<=n+a})}const Kp={activate:3,mute:2,bypass:1},qp=e=>e.charAt(0).toUpperCase()+e.slice(1);function pv(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)=>Kp[a.action]>Kp[i]?a.action:i,o[0].action);r.push({groupId:o[0].groupId,groupPath:o[0].groupPath,winnerAction:n,entries:o})}return r}function Rw(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}: ${qp(t.winnerAction)} overrides ${r.split(", ").map(qp).join(", ")}`}function hv({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()),[]),Pr.createPortal(e,t.current)}function Ao({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,E=i?Math.min(Math.max(p.width,240),window.innerWidth-x*2):void 0,b=E??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:E,visibility:"visible"})};u();const f=requestAnimationFrame(u),d=new ResizeObserver(u);return t.current&&d.observe(t.current),a.current&&d.observe(a.current),window.addEventListener("resize",u),window.addEventListener("scroll",u,!0),()=>{cancelAnimationFrame(f),d.disconnect(),window.removeEventListener("resize",u),window.removeEventListener("scroll",u,!0)}},[t,i,e]),m.useEffect(()=>{if(!e)return;const u=d=>{const p=d.target;!t.current?.contains(p)&&!a.current?.contains(p)&&o?.()},f=d=>{d.key==="Escape"&&o?.()};return document.addEventListener("pointerdown",u),document.addEventListener("keydown",f),()=>{document.removeEventListener("pointerdown",u),document.removeEventListener("keydown",f)}},[t,o,e]),e?s.jsx(hv,{children:s.jsx("div",{ref:a,className:`bv-anchored-popover ${n}`.trim(),style:l,children:r})}):null}function of({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 Sw({actions:e,onClose:t}){return s.jsx("div",{className:"bv-menu-content",role:"menu",children:e.map(r=>s.jsxs(Te.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 nf({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(Ao,{open:i,anchor:l,onClose:()=>a(!1),className:"bv-menu",children:s.jsx(Sw,{actions:t,onClose:()=>a(!1)})})]})}function Lw({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(Te.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(nf,{label:"More",actions:o,intent:"ghost",density:n})]})}function Jp({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 js({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(Ao,{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 Ta({open:e,title:t,description:r,children:o,footer:n,onClose:i,modal:a=!0,size:l="medium"}){return e?s.jsx(hv,{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 af({open:e,editorName:t,onSave:r,onDiscard:o,onKeep:n}){return s.jsx(Ta,{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 lf(){const[e,t]=m.useState(null),r=n=>t({confirmLabel:"Continue",danger:!1,...n}),o=s.jsx(Ta,{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 Zp({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(Ao,{open:l,anchor:a,onClose:()=>c(!1),className:"bv-popover",children:t})]})}function Ps({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:f=>f.preventDefault(),onDrop:()=>{if(!l||l===u.id)return;const f=[...e],d=f.findIndex(x=>x.id===l),p=f.findIndex(x=>x.id===u.id),[g]=f.splice(d,1);f.splice(p,0,g),t(f),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(f=>f.includes(u.id)?f.filter(d=>d!==u.id):[...f,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=Te.forwardRef(function({type:t="button",...r},o){return s.jsx("button",{...r,type:t,ref:o})}),Cw=Te.forwardRef(function(t,r){return s.jsx("input",{...t,ref:r})});function Ir({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 gv({children:e,tone:t="neutral",dot:r=!1}){return s.jsx("span",{className:`bv-badge ${t} ${r?"dot":""}`,children:e})}function Bs({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 Nw({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 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(Qp(i.current,v,u.current)):(h(!1),c())},b=function(){h(!1),c()};function h(v){var _=f.current,y=zu(i.current),T=v?y.addEventListener:y.removeEventListener;T(_?"touchmove":"mousemove",E),T(_?"touchend":"mouseup",b)}return[function(v){var _=v.nativeEvent,y=i.current;if(y&&(eh(_),!function(L,B){return B&&!Vi(L)}(_,f.current)&&y)){if(Vi(_)){f.current=!0;var T=_.changedTouches||[];T.length&&(u.current=T[0].identifier)}y.focus(),a(Qp(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=d[0],g=d[1],x=d[2],w=d[3];return m.useEffect(function(){return w},[w]),Te.createElement("div",ui({},n,{onTouchStart:p,onMouseDown:p,className:"react-colorful__interactive",ref:i,onKeyDown:g,onKeyUp:x,tabIndex:0,role:"slider"}))}),Ra=function(e){return e.filter(Boolean).join(" ")},uf=function(e){var t=e.color,r=e.left,o=e.top,n=o===void 0?.5:o,i=Ra(["react-colorful__pointer",e.className]);return Te.createElement("div",{className:i,style:{top:100*n+"%",left:100*r+"%"}},Te.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},bv=function(e){return Aw(Fu(e))},Fu=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}},vv=function(e){return Mw(Ow(e))},mv=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)}},Uu=function(e){var t=mv(e);return"hsl("+t.h+", "+t.s+"%, "+t.l+"%)"},Sc=function(e){var t=mv(e);return"hsla("+t.h+", "+t.s+"%, "+t.l+"%, "+t.a+")"},Ow=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)}},Za=function(e){var t=e.toString(16);return t.length<2?"0"+t:t},Mw=function(e){var t=e.r,r=e.g,o=e.b,n=e.a,i=n<1?Za(pt(255*n)):"";return"#"+Za(t)+Za(r)+Za(o)+i},Aw=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}},xv=Te.memo(function(e){var t=e.hue,r=e.onChange,o=e.onChangeEnd,n=Ra(["react-colorful__hue",e.className]);return Te.createElement("div",{className:n},Te.createElement(cf,{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"},Te.createElement(uf,{className:"react-colorful__hue-pointer",left:t/360,color:Uu({h:t,s:100,v:100,a:1})})))}),yv=Te.memo(function(e){var t=e.hsva,r=e.onChange,o=e.onChangeEnd,n={backgroundColor:Uu({h:t.h,s:100,v:100,a:1})};return Te.createElement("div",{className:"react-colorful__saturation",style:n},Te.createElement(cf,{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)+"%"},Te.createElement(uf,{className:"react-colorful__saturation-pointer",top:1-t.v/100,left:t.s/100,color:Uu(t)})))}),_v=function(e,t){if(e===t)return!0;for(var r in e)if(e[r]!==t[r])return!1;return!0},wv=function(e,t){return e.toLowerCase()===t.toLowerCase()||_v(Fu(e),Fu(t))};function kv(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}),f=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),f.current=!1}},[t,e]),m.useEffect(function(){var g;_v(l,u.current.hsva)||e.equal(g=e.fromHsva(l),u.current.color)||(u.current={hsva:l,color:g},n(g),f.current=!0)},[l,e,n]);var d=m.useCallback(function(g){c(function(x){return Object.assign({},x,g)})},[]),p=m.useCallback(function(){f.current&&(f.current=!1,i(u.current.color))},[i]);return[l,d,p]}var Dw=typeof window<"u"?m.useLayoutEffect:m.useEffect,Iw=function(){return typeof __webpack_nonce__<"u"?__webpack_nonce__:void 0},th=new WeakMap,Ev=function(e){Dw(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(!th.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=Iw();a&&i.setAttribute("nonce",a),th.set(o,i),n.appendChild(i)}}},[])},jw=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=sf(e,["className","colorModel","color","onChange","onChangeEnd"]),c=m.useRef(null);Ev(c);var u=kv(r,n,i,a),f=u[0],d=u[1],p=u[2],g=Ra(["react-colorful",t]);return Te.createElement("div",ui({},l,{ref:c,className:g}),Te.createElement(yv,{hsva:f,onChange:d,onChangeEnd:p}),Te.createElement(xv,{hue:f.h,onChange:d,onChangeEnd:p,className:"react-colorful__last-control"}))},Pw={defaultColor:"000",toHsva:bv,fromHsva:function(e){return vv({h:e.h,s:e.s,v:e.v,a:1})},equal:wv},Bw=function(e){return Te.createElement(jw,ui({},e,{colorModel:Pw}))},zw=function(e){var t=e.className,r=e.hsva,o=e.onChange,n=e.onChangeEnd,i={backgroundImage:"linear-gradient(90deg, "+Sc(Object.assign({},r,{a:0}))+", "+Sc(Object.assign({},r,{a:1}))+")"},a=Ra(["react-colorful__alpha",t]),l=pt(100*r.a);return Te.createElement("div",{className:a},Te.createElement("div",{className:"react-colorful__alpha-gradient",style:i}),Te.createElement(cf,{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"},Te.createElement(uf,{className:"react-colorful__alpha-pointer",left:r.a,color:Sc(r)})))},Fw=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=sf(e,["className","colorModel","color","onChange","onChangeEnd"]),c=m.useRef(null);Ev(c);var u=kv(r,n,i,a),f=u[0],d=u[1],p=u[2],g=Ra(["react-colorful",t]);return Te.createElement("div",ui({},l,{ref:c,className:g}),Te.createElement(yv,{hsva:f,onChange:d,onChangeEnd:p}),Te.createElement(xv,{hue:f.h,onChange:d,onChangeEnd:p}),Te.createElement(zw,{hsva:f,onChange:d,onChangeEnd:p,className:"react-colorful__last-control"}))},Uw={defaultColor:"0001",toHsva:bv,fromHsva:vv,equal:wv},Ww=function(e){return Te.createElement(Fw,ui({},e,{colorModel:Uw}))},Tv={},dt=cr&&cr.__assign||function(){return dt=Object.assign||function(e){for(var t,r=1,o=arguments.length;r-1){O.current.stack=ge.slice(0,Ce+1);var et=O.current.stack.length;if(et>Kp){var ze=et-Kp;O.current.stack=ge.slice(ze,et),O.current.offset=Math.max(O.current.offset-ze,0)}}var _e=Date.now();if(se){var xe=O.current.stack[O.current.offset];if(xe&&_e-xe.timestamp=Ce&&La<=et&&io.startsWith(pe)?io.substring(pe.length):io}).join(` +`),Zw=tr.forwardRef(function(t,r){var o=t.autoFocus,n=t.disabled,i=t.form,a=t.highlight,l=t.ignoreTabKey,c=l===void 0?!1:l,u=t.insertSpaces,f=u===void 0?!0:u,d=t.maxLength,p=t.minLength,g=t.name,x=t.onBlur,w=t.onClick,E=t.onFocus,b=t.onKeyDown,h=t.onKeyUp,v=t.onValueChange,_=t.padding,y=_===void 0?0:_,T=t.placeholder,L=t.preClassName,B=t.readOnly,C=t.required,I=t.style,z=t.tabSize,S=z===void 0?2:z,k=t.textareaClassName,j=t.textareaId,A=t.value,R=Yw(t,["autoFocus","disabled","form","highlight","ignoreTabKey","insertSpaces","maxLength","minLength","name","onBlur","onClick","onFocus","onKeyDown","onKeyUp","onValueChange","padding","placeholder","preClassName","readOnly","required","style","tabSize","textareaClassName","textareaId","value"]),O=tr.useRef({stack:[],offset:-1}),D=tr.useRef(null),V=tr.useState(!0),F=V[0],ne=V[1],Y={paddingTop:typeof y=="object"?y.top:y,paddingRight:typeof y=="object"?y.right:y,paddingBottom:typeof y=="object"?y.bottom:y,paddingLeft:typeof y=="object"?y.left:y},K=a(A),Z=function(J,se){return J.substring(0,se).split(` +`)},$=tr.useCallback(function(J,se){var ce,X,fe;se===void 0&&(se=!1);var pe=O.current,ge=pe.stack,Ce=pe.offset;if(ge.length&&Ce>-1){O.current.stack=ge.slice(0,Ce+1);var et=O.current.stack.length;if(et>ah){var ze=et-ah;O.current.stack=ge.slice(ze,et),O.current.offset=Math.max(O.current.offset-ze,0)}}var _e=Date.now();if(se){var xe=O.current.stack[O.current.offset];if(xe&&_e-xe.timestamp=Ce&&Oa<=et&&io.startsWith(pe)?io.substring(pe.length):io}).join(` `);if(ce!==ze){var _e=ge[Ce];le({value:ze,selectionStart:_e?.startsWith(pe)?X-pe.length:X,selectionEnd:fe-(ce.length-ze.length)})}}else if(X!==fe){var ge=Z(ce,X),xe=ge.length-1,Fe=Z(ce,fe).length-1,_e=ge[xe];le({value:ce.split(` -`).map(function(Ca,Na){return Na>=xe&&Na<=Fe?pe+Ca:Ca}).join(` -`),selectionStart:_e&&/\S/.test(_e)?X+pe.length:X,selectionEnd:fe+pe.length*(Fe-xe+1)})}else{var Ze=X+pe.length;le({value:ce.substring(0,X)+pe+ce.substring(fe),selectionStart:Ze,selectionEnd:Ze})}else if(J.key==="Backspace"){var Ue=X!==fe,Br=ce.substring(0,X);if(Br.endsWith(pe)&&!Ue){J.preventDefault();var Ze=X-pe.length;le({value:ce.substring(0,X-pe.length)+ce.substring(fe),selectionStart:Ze,selectionEnd:Ze})}}else if(J.key==="Enter"){if(X===fe){var gn=Z(ce,X).pop(),Do=gn?.match(/^\s+/);if(Do?.[0]){J.preventDefault();var kr=` -`+Do[0],Ze=X+kr.length;le({value:ce.substring(0,X)+kr+ce.substring(fe),selectionStart:Ze,selectionEnd:Ze})}}}else if(J.keyCode===$p||J.keyCode===Yp||J.keyCode===Xp||J.keyCode===Gp){var Ne=void 0;J.keyCode===$p&&J.shiftKey?Ne=["(",")"]:J.keyCode===Yp?J.shiftKey?Ne=["{","}"]:Ne=["[","]"]:J.keyCode===Xp?J.shiftKey?Ne=['"','"']:Ne=["'","'"]:J.keyCode===Gp&&!J.shiftKey&&(Ne=["`","`"]),X!==fe&&Ne&&(J.preventDefault(),le({value:ce.substring(0,X)+Ne[0]+ce.substring(X,fe)+Ne[1]+ce.substring(fe),selectionStart:X,selectionEnd:fe+2}))}else(kc?J.metaKey&&J.keyCode===qa:J.ctrlKey&&J.keyCode===qa)&&!J.shiftKey&&!J.altKey?(J.preventDefault(),Le()):(kc?J.metaKey&&J.keyCode===qa&&J.shiftKey:Mw?J.ctrlKey&&J.keyCode===Cw:J.ctrlKey&&J.keyCode===qa&&J.shiftKey)&&!J.altKey?(J.preventDefault(),ke()):J.keyCode===Nw&&J.ctrlKey&&(!kc||J.shiftKey)&&(J.preventDefault(),ne(function(io){return!io}))}},Dt=function(J){var se=J.currentTarget,ce=se.value,X=se.selectionStart,fe=se.selectionEnd;$({value:ce,selectionStart:X,selectionEnd:fe},!0),v(ce)};return tr.useEffect(function(){Q()},[Q]),tr.useImperativeHandle(r,function(){return{get session(){return{history:O.current}},set session(J){O.current=J.history}}},[]),tr.createElement("div",ut({},R,{style:ut(ut({},mi.container),I)}),tr.createElement("pre",ut({className:L,"aria-hidden":"true",style:ut(ut(ut({},mi.editor),mi.highlight),Y)},typeof K=="string"?{dangerouslySetInnerHTML:{__html:K+"
"}}:{children:K})),tr.createElement("textarea",{ref:function(J){return D.current=J},style:ut(ut(ut({},mi.editor),mi.textarea),Y),className:bl+(k?" ".concat(k):""),id:j,value:A,onChange:Dt,onKeyDown:ve,onClick:w,onKeyUp:h,onFocus:E,onBlur:x,disabled:n,form:i,maxLength:d,minLength:p,name:g,placeholder:T,readOnly:B,required:C,autoFocus:o,autoCapitalize:"off",autoComplete:"off",autoCorrect:"off",spellCheck:!1,"data-gramm":!1}),tr.createElement("style",{dangerouslySetInnerHTML:{__html:Aw}}))}),mi={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"}};hv.default=Dw;var Iw={exports:{}};(function(e){var t=typeof window<"u"?window:typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope?self:{};/** +`).map(function(Ma,Aa){return Aa>=xe&&Aa<=Fe?pe+Ma:Ma}).join(` +`),selectionStart:_e&&/\S/.test(_e)?X+pe.length:X,selectionEnd:fe+pe.length*(Fe-xe+1)})}else{var Ze=X+pe.length;le({value:ce.substring(0,X)+pe+ce.substring(fe),selectionStart:Ze,selectionEnd:Ze})}else if(J.key==="Backspace"){var Ue=X!==fe,Br=ce.substring(0,X);if(Br.endsWith(pe)&&!Ue){J.preventDefault();var Ze=X-pe.length;le({value:ce.substring(0,X-pe.length)+ce.substring(fe),selectionStart:Ze,selectionEnd:Ze})}}else if(J.key==="Enter"){if(X===fe){var vn=Z(ce,X).pop(),Do=vn?.match(/^\s+/);if(Do?.[0]){J.preventDefault();var kr=` +`+Do[0],Ze=X+kr.length;le({value:ce.substring(0,X)+kr+ce.substring(fe),selectionStart:Ze,selectionEnd:Ze})}}}else if(J.keyCode===rh||J.keyCode===oh||J.keyCode===nh||J.keyCode===ih){var Ne=void 0;J.keyCode===rh&&J.shiftKey?Ne=["(",")"]:J.keyCode===oh?J.shiftKey?Ne=["{","}"]:Ne=["[","]"]:J.keyCode===nh?J.shiftKey?Ne=['"','"']:Ne=["'","'"]:J.keyCode===ih&&!J.shiftKey&&(Ne=["`","`"]),X!==fe&&Ne&&(J.preventDefault(),le({value:ce.substring(0,X)+Ne[0]+ce.substring(X,fe)+Ne[1]+ce.substring(fe),selectionStart:X,selectionEnd:fe+2}))}else(Lc?J.metaKey&&J.keyCode===Qa:J.ctrlKey&&J.keyCode===Qa)&&!J.shiftKey&&!J.altKey?(J.preventDefault(),Le()):(Lc?J.metaKey&&J.keyCode===Qa&&J.shiftKey:qw?J.ctrlKey&&J.keyCode===Xw:J.ctrlKey&&J.keyCode===Qa&&J.shiftKey)&&!J.altKey?(J.preventDefault(),ke()):J.keyCode===Gw&&J.ctrlKey&&(!Lc||J.shiftKey)&&(J.preventDefault(),ne(function(io){return!io}))}},Dt=function(J){var se=J.currentTarget,ce=se.value,X=se.selectionStart,fe=se.selectionEnd;$({value:ce,selectionStart:X,selectionEnd:fe},!0),v(ce)};return tr.useEffect(function(){Q()},[Q]),tr.useImperativeHandle(r,function(){return{get session(){return{history:O.current}},set session(J){O.current=J.history}}},[]),tr.createElement("div",dt({},R,{style:dt(dt({},wi.container),I)}),tr.createElement("pre",dt({className:L,"aria-hidden":"true",style:dt(dt(dt({},wi.editor),wi.highlight),Y)},typeof K=="string"?{dangerouslySetInnerHTML:{__html:K+"
"}}:{children:K})),tr.createElement("textarea",{ref:function(J){return D.current=J},style:dt(dt(dt({},wi.editor),wi.textarea),Y),className:xl+(k?" ".concat(k):""),id:j,value:A,onChange:Dt,onKeyDown:ve,onClick:w,onKeyUp:h,onFocus:E,onBlur:x,disabled:n,form:i,maxLength:d,minLength:p,name:g,placeholder:T,readOnly:B,required:C,autoFocus:o,autoCapitalize:"off",autoComplete:"off",autoCorrect:"off",spellCheck:!1,"data-gramm":!1}),tr.createElement("style",{dangerouslySetInnerHTML:{__html:Jw}}))}),wi={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"}};Tv.default=Zw;var Qw={exports:{}};(function(e){var t=typeof window<"u"?window:typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope?self:{};/** * Prism: Lightweight, robust, elegant syntax highlighting * * @license MIT @@ -77,7 +77,7 @@ Error generating stack: `+i.message+` * @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],L={};for(var B in T)if(T.hasOwnProperty(B)){if(B==v)for(var C in _)_.hasOwnProperty(C)&&(L[C]=_[C]);_.hasOwnProperty(B)||(L[B]=T[B])}var I=y[h];return y[h]=L,l.languages.DFS(l.languages,function(z,S){S===I&&z!=h&&(this[z]=L)}),L},DFS:function h(v,_,y,T){T=T||{};var L=l.util.objId;for(var B in v)if(v.hasOwnProperty(B)){_.call(v,B,v[B],y||B);var C=v[B],I=l.util.type(C);I==="Object"&&!T[L(C)]?(T[L(C)]=!0,h(C,_,null,T)):I==="Array"&&!T[L(C)]&&(T[L(C)]=!0,h(C,_,B,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,L;L=y.elements[T++];)l.highlightElement(L,v===!0,y.callback)},highlightElement:function(h,v,_){var y=l.util.getLanguage(h),T=l.languages[y];l.util.setLanguage(h,y);var L=h.parentElement;L&&L.nodeName.toLowerCase()==="pre"&&l.util.setLanguage(L,y);var B=h.textContent,C={element:h,language:y,grammar:T,code:B};function I(S){C.highlightedCode=S,l.hooks.run("before-insert",C),C.element.innerHTML=C.highlightedCode,l.hooks.run("after-highlight",C),l.hooks.run("complete",C),_&&_.call(C.element)}if(l.hooks.run("before-sanity-check",C),L=C.element.parentElement,L&&L.nodeName.toLowerCase()==="pre"&&!L.hasAttribute("tabindex")&&L.setAttribute("tabindex","0"),!C.code){l.hooks.run("complete",C),_&&_.call(C.element);return}if(l.hooks.run("before-highlight",C),!C.grammar){I(l.util.encode(C.code));return}if(v&&o.Worker){var z=new Worker(l.filename);z.onmessage=function(S){I(S.data)},z.postMessage(JSON.stringify({language:C.language,code:C.code,immediateClose:!0}))}else I(l.highlight(C.code,C.grammar,C.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 d;return p(T,T.head,h),f(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(I){y+=h(I,_)}),y}var T={type:v.type,content:h(v.content,_),tag:"span",classes:["token",v.type],attributes:{},language:_},L=v.alias;L&&(Array.isArray(L)?Array.prototype.push.apply(T.classes,L):T.classes.push(L)),l.hooks.run("wrap",T);var B="";for(var C in T.attributes)B+=" "+C+'="'+(T.attributes[C]||"").replace(/"/g,""")+'"';return"<"+T.tag+' class="'+T.classes.join(" ")+'"'+B+">"+T.content+""};function u(h,v,_,y){h.lastIndex=v;var T=h.exec(_);if(T&&y&&T[1]){var L=T[1].length;T.index+=L,T[0]=T[0].slice(L)}return T}function f(h,v,_,y,T,L){for(var B in _)if(!(!_.hasOwnProperty(B)||!_[B])){var C=_[B];C=Array.isArray(C)?C:[C];for(var I=0;I=L.reach);V+=D.value.length,D=D.next){var F=D.value;if(v.length>h.length)return;if(!(F instanceof c)){var ne=1,Y;if(j){if(Y=u(O,V,h,k),!Y||Y.index>=h.length)break;var Q=Y.index,K=Y.index+Y[0].length,Z=V;for(Z+=D.value.length;Q>=Z;)D=D.next,Z+=D.value.length;if(Z-=D.value.length,V=Z,D.value instanceof c)continue;for(var $=D;$!==v.tail&&(ZL.reach&&(L.reach=ke);var ve=D.prev;le&&(ve=p(v,ve,le),V+=le.length),g(v,ve,ne);var Dt=new c(B,S?l.tokenize(oe,S):oe,A,oe);if(D=p(v,ve,Dt),Le&&p(v,D,Le),ne>1){var J={cause:B+","+I,reach:ke};f(h,v,_,D.prev,V,J),L&&J.reach>L.reach&&(L.reach=J.reach)}}}}}}function d(){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 E(){l.manual||l.highlightAll()}if(!l.manual){var b=document.readyState;b==="loading"||b==="interactive"&&w&&w.defer?document.addEventListener("DOMContentLoaded",E):window.requestAnimationFrame?window.requestAnimationFrame(E):window.setTimeout(E,16)}return l}(t);e.exports&&(e.exports=r),typeof cr<"u"&&(cr.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,E){return"✖ Error "+w+" while fetching file: "+E},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",f="failed",d="pre[data-src]:not(["+l+'="'+u+'"]):not(['+l+'="'+c+'"])';function p(w,E,b){var h=new XMLHttpRequest;h.open("GET",w,!0),h.onreadystatechange=function(){h.readyState==4&&(h.status<400&&h.responseText?E(h.responseText):h.status>=400?b(n(h.status,h.statusText)):b(i))},h.send(null)}function g(w){var E=/^\s*(\d+)\s*(?:(,)\s*(?:(\d+)\s*)?)?$/.exec(w||"");if(E){var b=Number(E[1]),h=E[2],v=E[3];return h?v?[b,Number(v)]:[b,void 0]:[b,b]}}r.hooks.add("before-highlightall",function(w){w.selector+=", "+d}),r.hooks.add("before-sanity-check",function(w){var E=w.element;if(E.matches(d)){w.code="",E.setAttribute(l,c);var b=E.appendChild(document.createElement("CODE"));b.textContent=o;var h=E.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(E,v);var y=r.plugins.autoloader;y&&y.loadLanguages(v),p(h,function(T){E.setAttribute(l,u);var L=g(E.getAttribute("data-range"));if(L){var B=T.split(/\r\n?|\n/g),C=L[0],I=L[1]==null?B.length:L[1];C<0&&(C+=B.length),C=Math.max(0,Math.min(C-1,B.length)),I<0&&(I+=B.length),I=Math.max(0,Math.min(I,B.length)),T=B.slice(C,I).join(` -`),E.hasAttribute("data-start")||E.setAttribute("data-start",String(C+1))}b.textContent=T,r.highlightElement(b)},function(T){E.setAttribute(l,f),b.textContent=T})}}),r.plugins.fileHighlight={highlight:function(E){for(var b=(E||document).querySelectorAll(d),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)}}()})(Iw);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 Dn({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 wr({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 ln({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:f=>i?.(f.target.value)}),n&&s.jsx("span",{className:"bv-field-suffix",children:n})]});return s.jsx(wr,{label:e,help:t,error:r,className:a,children:s.jsx(Os,{label:e,summary:String(l.value??l.defaultValue??l.placeholder??"Edit value"),icon:o,popover:c(!0),children:c()})})}function jw({label:e,help:t,error:r,icon:o,resize:n="vertical",onValue:i,className:a="",...l}){const c=(f=!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:f&&l.id?`${l.id}-expanded`:l.id,"aria-label":f?e:l["aria-label"],"aria-invalid":!!r,onChange:d=>i?.(d.target.value)})]}),u=String(l.value??l.defaultValue??l.placeholder??"Edit text");return s.jsx(wr,{label:e,help:t,error:r,className:`bv-textarea-field ${a}`,children:s.jsx(Os,{label:e,summary:u,icon:o,popover:c(!0),children:c()})})}const Pw=m.forwardRef(function(t,r){return s.jsx("textarea",{...t,ref:r})});function jt({label:e,value:t,min:r,max:o,step:n,unit:i,icon:a,help:l,slider:c=!0,onValue:u,className:f=""}){const d=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))},E=`${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:L=>g(L.target.value),onBlur:w,onKeyDown:L=>{L.key==="Enter"&&L.currentTarget.blur(),L.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":E},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":E},"aria-labelledby":`${d}-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(d)]}),c&&v]}),y=s.jsxs("div",{className:"bv-number-popup",children:[c&&h,b(`${d}-expanded`),c&&v]});return s.jsxs("div",{className:`bv-number-field ${c?"has-slider":"direct-only"} ${f}`.trim(),children:[s.jsx("label",{id:`${d}-label`,htmlFor:d,children:e}),s.jsx(Os,{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 gv({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(f=>f.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(f=>!f),children:[s.jsx("span",{children:u?.label??"Select…"}),s.jsx("span",{className:"bv-chevron","aria-hidden":"true"})]}),s.jsx(Ao,{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(f=>s.jsxs("button",{type:"button",role:"option","aria-selected":f.value===t,disabled:f.disabled,onClick:d=>{o(f.value,{shiftKey:d.shiftKey}),l(!1)},children:[f.icon,s.jsx("span",{children:f.label})]},f.value))})})]})}function pt({label:e,value:t,options:r,onValue:o,help:n,disabled:i}){return s.jsx(wr,{label:e,help:n,children:s.jsx(gv,{label:e,value:t,options:r,onValue:o,disabled:i})})}function Bw({label:e,value:t,options:r,onValue:o,disabled:n,className:i=""}){return s.jsx(gv,{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 rf({label:e,value:t,onValue:r,trueLabel:o="True",falseLabel:n="False",help:i}){return s.jsx(wr,{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 zw({label:e,value:t,options:r,onValue:o,minSelected:n=0,help:i}){const[a,l]=m.useState(!1),c=m.useRef(null),u=f=>{const d=t.includes(f);d&&t.length<=n||o(d?t.filter(p=>p!==f):[...t,f])};return s.jsx(wr,{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(f=>!f),children:[s.jsx("span",{className:"bv-tag-values",children:t.map(f=>s.jsx("span",{className:"bv-tag",children:r.find(d=>d.value===f)?.label??f},f))}),s.jsx("span",{className:"bv-chevron","aria-hidden":"true"})]}),s.jsx(Ao,{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(f=>{const d=t.includes(f.value),p=d&&t.length<=n;return s.jsxs("button",{type:"button",role:"option","aria-selected":d,disabled:f.disabled||p,onClick:()=>u(f.value),children:[s.jsx("span",{className:"bv-tag-select-check","aria-hidden":"true",children:d?"✓":""}),s.jsx("span",{children:f.label})]},f.value)})})})]})})}function Fw({label:e,value:t,onValue:r,onClear:o}){const[n,i]=m.useState(!1);return s.jsx(wr,{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(ae,{type:"button",intent:"ghost",className:"bv-field-action",onClick:()=>i(!n),children:n?"Hide":"Show"}),s.jsx(ae,{type:"button",intent:"ghost",className:"bv-field-action",onClick:()=>{r(""),o?.()},children:"Clear"})]})})}function Uw({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?Ew:yw,f=s.jsx("input",{value:t,"aria-label":`${e} hexadecimal value`,spellCheck:!1,onChange:p=>r(p.target.value)}),d=s.jsxs("div",{className:"bv-color-expanded",children:[f,s.jsx(u,{color:c?t:o?"#8D70FFFF":"#8D70FF",onChange:r})]});return s.jsx(wr,{label:e,help:n,error:c?void 0:"Enter a valid hexadecimal color.",children:s.jsx(Os,{label:e,summary:t,icon:s.jsx("span",{className:"bv-color-dot",style:{background:c?t:"#000"}}),popover:d,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}),f,s.jsx(Ao,{open:i,anchor:l,onClose:()=>a(!1),className:"bv-color-popover",children:d})]})})})}function ql({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 bv({collectors:e,collectorId:t,resourceId:r,resolved:o=!0,onCollector:n,onResource:i}){const a=e.find(u=>u.id===t),l=a?.resources.find(u=>u.id===r),c=!o||!a||!l;return s.jsxs("div",{className:`bv-resource-picker ${c?"is-unresolved":""}`,children:[s.jsx("div",{className:"bv-resource-picker-summary",children:!c&&a&&l?`${a.label} / ${l.label}`:"Unresolved resource selection"}),s.jsxs("label",{children:["Collector",s.jsxs("select",{"aria-label":"Collector",value:t,onChange:u=>n(u.target.value),children:[s.jsx("option",{value:"",children:"Select collector"}),e.map(u=>s.jsx("option",{value:u.id,children:u.label},u.id))]})]}),s.jsxs("label",{children:["Resource",s.jsxs("select",{"aria-label":"Resource",value:r,onChange:u=>i(u.target.value),children:[s.jsx("option",{value:"",children:"Select resource"}),a?.resources.map(u=>s.jsx("option",{value:u.id,children:u.label},u.id))]})]})]})}const qp=["#E45756","#4C78A8","#54A24B","#F2CF5B","#B279A2","#FF9DA6"],vv=e=>qp[e%qp.length],Nt=()=>crypto.randomUUID(),Jp=()=>({schema:"bv.regional",version:2,document_id:Nt(),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:[]}),Ww=e=>({id:Nt(),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:vv(e)}}),Xt=e=>structuredClone(e);function Vw(e,t){return{...e,document_id:t}}const ir=(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,Ea=e=>e.mask_group_id??Pt(e);function mv(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:ir(n[0],i),enabled:n.some(a=>a.enabled!==!1)}))}function Lr(e){return mv(e.geometry,Pt)}function Hw(e){return mv(e,Ea)}function sn(e){const t=typeof e=="string"?JSON.parse(e):Xt(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=ir(n,i)),n.type==="brush_stroke"&&(n.shape??(n.shape="round"),n.pressure_mode??(n.pressure_mode="constant"))})}return t}function xv(e){const t=new Map;for(const r of e){const o=Ea(r);t.has(o)||t.set(o,r)}return[...t.values()].every(r=>r.operation==="add")}function Iu(e,t){return xv(e.filter(r=>r.id!==t))}function Zp({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(dw,{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 $t({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 $w(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}),f=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 d=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",d(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(`${d(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(`${d(b)}:`)?` drop-target drop-${h[h.length-1]}`:""},E=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(nt,{className:"panel-tool primary",title:"Add region","aria-label":"Add region",onClick:e.onAddRegion,children:[s.jsx($t,{name:"plus"}),s.jsx("span",{children:"Region"})]}),s.jsx(nt,{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($t,{name:"split"})}),s.jsx("span",{className:"panel-toolbar-spacer"}),s.jsx(nt,{className:"panel-tool danger",title:"Delete selected region","aria-label":"Delete selected region",disabled:!E,onClick:()=>E&&e.onDeleteRegion(E.id),children:s.jsx($t,{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(nt,{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(nt,{className:"region-expand","aria-expanded":v,title:v?"Collapse region":"Expand region",onClick:y=>{y.stopPropagation(),f(b.id)},children:s.jsx($t,{name:v?"chevron-down":"chevron-right"})}),s.jsx("i",{style:{background:b.authoring.color}}),s.jsx(Zp,{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(nt,{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($t,{name:b.authoring.visible?"eye":"eye-off"})}),s.jsx(nt,{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($t,{name:b.authoring.locked?"lock":"unlock"})}),s.jsx(nt,{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($t,{name:"check"})})]}),v&&s.jsx("div",{className:"geometry-layers",children:[...Lr(b)].reverse().map(y=>{const T=e.selectedLayerIds.includes(y.id),L=y.id===e.selectedLayerId,B=new Set(y.geometries.map(k=>k.type)),C=new Set(y.geometries.map(Ea)).size,I=B.size>1||C>1?"◈":y.geometries[0].type==="rect"?"▭":y.geometries[0].type==="ellipse"?"◯":y.geometries[0].type==="polygon"?"⬠":y.geometries[0].type==="raster_mask"?"▦":"✎",z=t.has(y.id),S={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":""} ${L?"primary-selection":""}${w(S)}`,...x(S),onClick:k=>e.onSelectLayer(b.id,y.id,k.shiftKey?"range":k.ctrlKey||k.metaKey?"toggle":"replace"),children:[s.jsx(nt,{className:"tree-drag-handle",draggable:!0,"aria-label":`Move ${y.authoring.name}`,title:"Drag layer; Alt + arrow keys also move",onDragStart:k=>p(S,k),onDragEnd:()=>{a(null),c(null)},onKeyDown:k=>{k.altKey&&k.key==="ArrowUp"&&(k.preventDefault(),e.onMoveLayer(y.id,1)),k.altKey&&k.key==="ArrowDown"&&(k.preventDefault(),e.onMoveLayer(y.id,-1))},onClick:k=>k.stopPropagation(),children:"⠿"}),s.jsx(nt,{className:"layer-expand","aria-expanded":z,title:z?"Collapse operations":"Expand operations",onClick:k=>{k.stopPropagation(),u(y.id)},children:s.jsx($t,{name:z?"chevron-down":"chevron-right"})}),s.jsxs("span",{title:`${y.geometries.length} operations · ${C} mask group${C===1?"":"s"}`,children:[I,y.geometries.some(k=>k.operation==="subtract")?"−":""]}),s.jsx(Zp,{value:y.authoring.name,onCommit:k=>e.onRenameLayer(y.id,k)}),s.jsx(nt,{className:`tree-icon-button${y.authoring.visible?"":" deviant"}`,title:y.authoring.visible?"Hide in editor":"Show in editor","aria-pressed":y.authoring.visible,onClick:k=>{k.stopPropagation(),e.onToggleLayer(y.id,"visible")},children:s.jsx($t,{name:y.authoring.visible?"eye":"eye-off"})}),s.jsx(nt,{className:`tree-icon-button${y.authoring.locked?" deviant":""}`,title:y.authoring.locked?"Unlock layer":"Lock layer","aria-pressed":y.authoring.locked,onClick:k=>{k.stopPropagation(),e.onToggleLayer(y.id,"locked")},children:s.jsx($t,{name:y.authoring.locked?"lock":"unlock"})}),s.jsx(nt,{className:`tree-check${y.enabled?"":" deviant"}`,role:"checkbox","aria-checked":y.enabled,title:y.enabled?"Disable mask output":"Enable mask output",onClick:k=>{k.stopPropagation(),e.onToggleLayer(y.id,"enabled")},children:y.enabled&&s.jsx($t,{name:"check"})}),s.jsxs("details",{className:"layer-overflow",onClick:k=>k.stopPropagation(),children:[s.jsx("summary",{title:"Layer actions","aria-label":"Layer actions",children:s.jsx($t,{name:"more"})}),s.jsxs("div",{children:[s.jsx(nt,{onClick:k=>{k.currentTarget.closest("details").removeAttribute("open"),e.onDuplicateLayer(y.id)},children:"Duplicate layer"}),s.jsx(nt,{className:"danger",onClick:k=>{k.currentTarget.closest("details").removeAttribute("open"),e.onDeleteLayer(y.id)},children:"Delete layer"})]})]})]}),z&&s.jsx("div",{className:"geometry-operations",children:y.geometries.map((k,j)=>{const A={kind:"geometry",regionId:b.id,layerId:y.id,geometryId:k.id};return s.jsxs("div",{className:`geometry-operation ${e.selectedGeometryId===k.id?"selected":""}${w(A)}`,...x(A),children:[s.jsx(nt,{className:"tree-drag-handle",draggable:!0,"aria-label":`Move ${ir(k,j).name}`,title:"Drag operation",onDragStart:R=>p(A,R),onDragEnd:()=>{a(null),c(null)},children:"⠿"}),s.jsxs(nt,{className:"geometry-operation-select",onClick:()=>e.onSelectGeometry(b.id,y.id,k.id),children:[s.jsx("span",{className:`operation-kind ${k.operation}`,children:k.operation==="add"?"+":"−"}),s.jsx("span",{children:ir(k,j).name}),s.jsx("small",{children:k.type.replace("_"," ")})]}),s.jsx(nt,{className:`tree-icon-button${k.enabled!==!1?"":" deviant"}`,title:k.enabled!==!1?"Disable operation":"Enable operation","aria-pressed":k.enabled!==!1,onClick:()=>e.onToggleGeometry(k.id),children:s.jsx($t,{name:k.enabled!==!1?"eye":"eye-off"})}),s.jsx(nt,{className:"danger",disabled:!Iu(y.geometries,k.id),title:Iu(y.geometries,k.id)?"Delete operation":"Additive base: remove dependent subtract operations first",onClick:()=>e.onDeleteGeometry(k.id),children:"×"})]},k.id)})})]},y.id)})})]},b.id)})]})}const Qp=({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 Yw({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:f=>f.stopPropagation(),onPointerUp:f=>f.stopPropagation(),onWheel:f=>f.stopPropagation(),children:[s.jsx(uw,{orientation:"vertical",density:"compact",label:"Regional drawing tools",items:[...u.map(f=>({id:f.id,label:f.title,icon:s.jsx(Qp,{name:f.id}),active:e===f.id,disabled:f.id.endsWith("subtract")&&!r,onSelect:()=>{n(f.id),f.id.startsWith("brush")||l(!1)},group:f.id.split("-")[0]})),...c?[{id:"brush-settings",label:"Brush settings",icon:s.jsx(Qp,{name:"settings"}),active:a,onSelect:()=>l(f=>!f),group:"settings"}]:[]]}),c&&a&&s.jsxs("div",{className:"brush-flyout",children:[s.jsxs("header",{children:[s.jsx("strong",{children:"Brush"}),s.jsx(ae,{intent:"ghost",iconOnly:!0,"aria-label":"Close brush settings",onClick:()=>l(!1),children:"×"})]}),s.jsx(jt,{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:f=>i({...t,size:f})}),s.jsx(jt,{label:"Hardness",value:t.hardness,min:0,max:1,step:.05,unit:"×",onValue:f=>i({...t,hardness:f})}),s.jsx(jt,{label:"Opacity",value:t.opacity,min:.05,max:1,step:.05,unit:"×",onValue:f=>i({...t,opacity:f})}),s.jsx(pt,{label:"Shape",value:t.shape,onValue:f=>i({...t,shape:f}),options:[{value:"round",label:"Round"},{value:"square",label:"Square"}]}),s.jsx(pt,{label:"Pressure",value:t.pressureMode,onValue:f=>i({...t,pressureMode:f}),options:[{value:"constant",label:"Constant"},{value:"stylus",label:"Stylus"}]})]})]})}const Xw=({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(ln,{label:"Control name",value:e.name,onValue:a=>o({...e,name:a})}),s.jsxs("span",{children:[e.assignments.length," groups"]}),s.jsx(ae,{intent:"danger",onClick:()=>o(null),children:"Delete"})]}),s.jsx("div",{className:"bv-assignments",children:e.assignments.map((a,l)=>{const c=r.find(d=>d.groupId===a.groupId),u=c?.entries.filter(d=>d.action===c.winnerAction).map(d=>d.controlName).join(", "),f=c?a.action===c.winnerAction?`Overrides ${[...new Set(c.entries.filter(d=>d.action!==c.winnerAction).map(d=>n(d.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,f&&s.jsxs("small",{children:["⚠ ",f]})]}),s.jsx(pt,{label:"Action",value:a.action,options:[{value:"activate",label:"Activate"},{value:"mute",label:"Mute"},{value:"bypass",label:"Bypass"}],onValue:d=>o({...e,assignments:e.assignments.map((p,g)=>g===l?{...p,action:d}:p)})}),s.jsx(ae,{intent:"ghost",iconOnly:!0,"aria-label":"Remove assignment",onClick:()=>o({...e,assignments:e.assignments.filter((d,p)=>p!==l)}),children:"×"})]},a.groupId)})}),s.jsx(pt,{label:"Add group",value:"",onValue:i,options:[{value:"",label:"Choose group…"},...t.map(a=>({value:a.id,label:a.pathLabel}))]})]})},Gw=100;function Ds(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 E=typeof x=="function"?x(t(w)):x;return i(b=>[...b.slice(-99),t(w)]),l([]),t(E)})},[t]),f=m.useCallback((x,w=!1)=>{o(t(x)),w&&(i([]),l([]))},[t]),d=m.useCallback(()=>{i(x=>{if(!x.length)return x;const w=x[x.length-1];return l(E=>[t(c.current),...E].slice(0,Gw)),o(t(w)),x.slice(0,-1)})},[t]),p=m.useCallback(()=>{l(x=>{if(!x.length)return x;const w=x[0];return i(E=>[...E.slice(-99),t(c.current)]),o(t(w)),x.slice(1)})},[t]),g=m.useCallback(()=>{i([]),l([])},[]);return{value:r,commit:u,replace:f,undo:d,redo:p,clear:g,canUndo:n.length>0,canRedo:a.length>0}}const Kw=e=>e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement||e instanceof HTMLElement&&e.isContentEditable;function Is(e,t=!0){m.useEffect(()=>{if(!t)return;const r=a=>{if(Kw(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 qw(){return globalThis.crypto?.randomUUID?.()??`bv-control-${Date.now()}-${Math.random().toString(16).slice(2)}`}const Jw=()=>{const e=m.useMemo(()=>{const f=an(),d=new Set(Kl(gt()).map(p=>p.id));return{...f,controls:f.controls.map(p=>({...p,assignments:p.assignments.map(g=>({...g,unresolved:!d.has(g.groupId)}))}))}},[]),t=Ds(e),r=t.value,o=f=>t.commit(f);Is(t),m.useEffect(()=>{const f=d=>{const p=d.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(Jn,f),()=>window.removeEventListener(Jn,f)},[r,t.replace]);const n=m.useMemo(()=>Kl(gt()),[r]),i=m.useMemo(()=>rv(r),[r]),a=m.useRef(!1);m.useEffect(()=>{if(!a.current){a.current=!0;return}const f=window.setTimeout(()=>{const d=r.controls.map(g=>g.name.trim());if(d.some(g=>!g)||new Set(d).size!==d.length)return;const p=new Set(n.map(g=>g.id));Gd({...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(f)},[r,n]);const l=(f,d)=>{o({...r,controls:d?r.controls.map((p,g)=>g===f?d:p):r.controls.filter((p,g)=>g!==f)})},c=()=>{let f="New Control",d=2;for(;r.controls.some(p=>p.name===f);)f=`New Control ${d++}`;o({...r,controls:[...r.controls,{id:qw(),name:f,enabled:!0,assignments:[]}]})},u=r.controls.map((f,d)=>({id:f.id,title:f.name||"Unnamed control",description:`${f.assignments.length} assignment${f.assignments.length===1?"":"s"}`,content:s.jsx(Xw,{control:f,groups:n,conflicts:i,onChange:p=>l(d,p)})}));return s.jsxs("div",{className:"bv-ui-stack",children:[s.jsx(qr,{label:"Force active after releasing restrictions",checked:r.forceActive,onValue:f=>o({...r,forceActive:f})}),s.jsx("div",{className:"bv-controls",children:s.jsx(Ms,{items:u,onReorder:f=>o({...r,controls:f.map(d=>r.controls.find(p=>p.id===d.id)).filter(Boolean)}),onRemove:f=>o({...r,controls:r.controls.filter(d=>d.id!==f)})})}),s.jsxs("footer",{className:"bv-ui-inline-footer",children:[s.jsx(nv,{tone:"success",dot:!0,children:"Autosaved"}),s.jsx(ae,{intent:"ghost",disabled:!t.canUndo,onClick:t.undo,children:"Undo"}),s.jsx(ae,{intent:"ghost",disabled:!t.canRedo,onClick:t.redo,children:"Redo"}),s.jsx(ae,{onClick:c,children:"Add Control"})]})]})},Xo=new Map,Jl=new Map;function of(e,t={}){const r=t.key?Xo.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=ii(o);let i=!1,a=0,l=e;const c=()=>{i||(i=!0,t.key&&Xo.get(t.key)?.close===c&&Xo.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))},f=()=>o.querySelector(".bv-managed-window")?.dispatchEvent(new Event("bv-ui-minimize")),d=()=>{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:f,state:d,setState:p,close:c};Xo.set(t.key,g);const x=Jl.get(t.key);x&&(Jl.delete(t.key),requestAnimationFrame(()=>g.setState(x)))}return n.render(l(c,a)),c}function nf(e,t,r,o){if(e===t)return Xo.get(e)?.activate();const n=Xo.get(e),i=n?.state(),a=Xo.get(t);i&&Jl.set(t,i),a?a.activate():r(),i&&a&&(Jl.delete(t),requestAnimationFrame(()=>a.setState(i))),o?n?.close():n?.minimize()}const yv="BV.NodePack.UI.Size",_v="BV.NodePack.UI.ReducedEffects",af="BV.NodePack.UI.WindowSwitchMode";let Ri="keep",wv;const ju=new Set,Zw=e=>e==="replace"?"replace":"keep",Qn=()=>Ri,Qw=e=>{wv=e},e0=e=>(ju.add(e),()=>ju.delete(e));function lf(e,t=!0){return Ri=Zw(e),t&&wv?.(Ri),ju.forEach(r=>r(Ri)),Ri}const t0=["bv-ui-size-compact","bv-ui-size-default","bv-ui-size-large"];function r0(e){return e==="compact"||e==="large"?e:"default"}function kv(e,t=document.documentElement){const r=r0(e);return t.classList.remove(...t0),t.classList.add(`bv-ui-size-${r}`),r}function Ev(e,t=document.documentElement){return t.classList.toggle("bv-ui-reduced-effects",!!e),!!e}function o0(e){kv(e?.getSettingValue?.(yv,"default")),Ev(e?.getSettingValue?.(_v,!1)),lf(e?.getSettingValue?.(af,"keep"),!1)}function n0(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 i0(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 a0(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 eh=!1;const l0=e=>e.isConnected&&!e.hidden&&e.offsetParent!==null;function s0(e){const t=qo.filter(l0);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 c0(){eh||(eh=!0,window.addEventListener("keydown",e=>{e.key!=="Tab"||!e.ctrlKey||e.altKey||e.metaKey||(e.preventDefault(),e.stopImmediatePropagation(),s0(e.shiftKey))},!0))}function u0(e){return c0(),qo.push(e),()=>{const t=qo.indexOf(e);t>=0&&qo.splice(t,1)}}function th(e){const t=qo.indexOf(e);t>=0&&qo.splice(t,1),qo.push(e)}const Tv="bvWindowMenuVisible",ei="bv-window-menu-visibility-changed",d0=e=>!["BV Smart Pipe","BV Smart Pipe Merge"].includes(e);function hn(e){const t=e?.properties?.[Tv];return typeof t=="boolean"?t:d0(String(e?.type??e?.comfyClass??""))}function li(e,t){e&&(e.properties??(e.properties={}),e.properties[Tv]=!!t,e.graph?.setDirtyCanvas?.(!0,!0),window.dispatchEvent(new CustomEvent(ei,{detail:{node:e,visible:!!t}})))}function f0(e){return window.addEventListener(ei,e),()=>window.removeEventListener(ei,e)}let Pu=0;window.addEventListener(ei,()=>Pu++);function Ta(e){return m.useSyncExternalStore(f0,()=>Pu,()=>Pu),hn(e)}const p0=(e,t)=>String(e?.id??e?._id??e?.extra?.uuid??t);function sf(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=p0(n,i.length?i[i.length-1]:"root");for(const f of n._nodes??n.nodes??[]){const d=String(f.id),p=[...i,u];t(f)&&r.push({node:f,graph:n,path:p,key:`${p.join("/")}:${d}`,breadcrumb:a.join(" › ")});const g=f.subgraph??(()=>{try{return f.getSubgraph?.()}catch{return null}})();g&&o(g,[...p,d],[...a,String(f.title||f.type||`#${d}`)],c)}};return o(e,[],[]),r}function sa(e,t){return sf(e,r=>r===t)[0]?.key??String(t?.id??"")}const Zl="bv-toggle-toolbar-window-launcher";function h0({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(),f=m.useRef(),d=m.useRef(0),p=()=>{u.current&&window.clearTimeout(u.current),f.current&&window.clearTimeout(f.current)},g=(v,_)=>{const y=v.getBoundingClientRect(),T=Math.min(Math.max(1,_)*220,window.innerWidth-24),L=Math.min(420,window.innerHeight-84),B=Math.max(12,Math.min(y.left,window.innerWidth-T-12)),C=y.bottom+6+L<=window.innerHeight-12?y.bottom+6:Math.max(12,y.top-L-6);return{left:B,top:C}},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(L=>L.offsetParent!==null),T=_?.offsetParent?_:y[0];T&&(a(!1),r(g(T,e(!1).filter(L=>L.items.length).length)),n(!0))},v)},[e]),w=m.useCallback(()=>x(180),[x]),E=m.useCallback(()=>{u.current&&window.clearTimeout(u.current);const v=Math.max(280,d.current-Date.now());f.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 L=()=>w(),B=()=>E();T.addEventListener("pointerenter",L),T.addEventListener("pointerleave",B);const C=()=>{T.removeEventListener("pointerenter",L),T.removeEventListener("pointerleave",B)};v.set(T,C)}};_();const y=new MutationObserver(_);return y.observe(document.body,{childList:!0,subtree:!0}),()=>{y.disconnect(),v.forEach(T=>T()),p()}},[E,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(Zl,v),()=>window.removeEventListener(Zl,v)},[o,x]),m.useEffect(()=>{const v=()=>l(_=>_+1);return window.addEventListener(ei,v),()=>window.removeEventListener(ei,v)},[]);const b=v=>{p(),d.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 Pr.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:E,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(ae,{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(rf,{label:"Show hidden nodes",value:i,trueLabel:"Shown",falseLabel:"Hidden",onValue:b})})]}),document.body)}var si=class{constructor(){M(this,"attributes");M(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;ns.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:f=>i?.(f.target.value)}),n&&s.jsx("span",{className:"bv-field-suffix",children:n})]});return s.jsx(wr,{label:e,help:t,error:r,className:a,children:s.jsx(js,{label:e,summary:String(l.value??l.defaultValue??l.placeholder??"Edit value"),icon:o,popover:c(!0),children:c()})})}function e0({label:e,help:t,error:r,icon:o,resize:n="vertical",onValue:i,className:a="",...l}){const c=(f=!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:f&&l.id?`${l.id}-expanded`:l.id,"aria-label":f?e:l["aria-label"],"aria-invalid":!!r,onChange:d=>i?.(d.target.value)})]}),u=String(l.value??l.defaultValue??l.placeholder??"Edit text");return s.jsx(wr,{label:e,help:t,error:r,className:`bv-textarea-field ${a}`,children:s.jsx(js,{label:e,summary:u,icon:o,popover:c(!0),children:c()})})}const t0=m.forwardRef(function(t,r){return s.jsx("textarea",{...t,ref:r})});function jt({label:e,value:t,min:r,max:o,step:n,unit:i,icon:a,help:l,slider:c=!0,onValue:u,className:f=""}){const d=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))},E=`${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:L=>g(L.target.value),onBlur:w,onKeyDown:L=>{L.key==="Enter"&&L.currentTarget.blur(),L.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":E},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":E},"aria-labelledby":`${d}-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(d)]}),c&&v]}),y=s.jsxs("div",{className:"bv-number-popup",children:[c&&h,b(`${d}-expanded`),c&&v]});return s.jsxs("div",{className:`bv-number-field ${c?"has-slider":"direct-only"} ${f}`.trim(),children:[s.jsx("label",{id:`${d}-label`,htmlFor:d,children:e}),s.jsx(js,{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 Rv({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(f=>f.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(f=>!f),children:[s.jsx("span",{children:u?.label??"Select…"}),s.jsx("span",{className:"bv-chevron","aria-hidden":"true"})]}),s.jsx(Ao,{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(f=>s.jsxs("button",{type:"button",role:"option","aria-selected":f.value===t,disabled:f.disabled,onClick:d=>{o(f.value,{shiftKey:d.shiftKey}),l(!1)},children:[f.icon,s.jsx("span",{children:f.label})]},f.value))})})]})}function ht({label:e,value:t,options:r,onValue:o,help:n,disabled:i}){return s.jsx(wr,{label:e,help:n,children:s.jsx(Rv,{label:e,value:t,options:r,onValue:o,disabled:i})})}function r0({label:e,value:t,options:r,onValue:o,disabled:n,className:i=""}){return s.jsx(Rv,{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 df({label:e,value:t,onValue:r,trueLabel:o="True",falseLabel:n="False",help:i}){return s.jsx(wr,{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 o0({label:e,value:t,options:r,onValue:o,minSelected:n=0,help:i}){const[a,l]=m.useState(!1),c=m.useRef(null),u=f=>{const d=t.includes(f);d&&t.length<=n||o(d?t.filter(p=>p!==f):[...t,f])};return s.jsx(wr,{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(f=>!f),children:[s.jsx("span",{className:"bv-tag-values",children:t.map(f=>s.jsx("span",{className:"bv-tag",children:r.find(d=>d.value===f)?.label??f},f))}),s.jsx("span",{className:"bv-chevron","aria-hidden":"true"})]}),s.jsx(Ao,{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(f=>{const d=t.includes(f.value),p=d&&t.length<=n;return s.jsxs("button",{type:"button",role:"option","aria-selected":d,disabled:f.disabled||p,onClick:()=>u(f.value),children:[s.jsx("span",{className:"bv-tag-select-check","aria-hidden":"true",children:d?"✓":""}),s.jsx("span",{children:f.label})]},f.value)})})})]})})}function n0({label:e,value:t,onValue:r,onClear:o}){const[n,i]=m.useState(!1);return s.jsx(wr,{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 i0({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?Ww:Bw,f=s.jsx("input",{value:t,"aria-label":`${e} hexadecimal value`,spellCheck:!1,onChange:p=>r(p.target.value)}),d=s.jsxs("div",{className:"bv-color-expanded",children:[f,s.jsx(u,{color:c?t:o?"#8D70FFFF":"#8D70FF",onChange:r})]});return s.jsx(wr,{label:e,help:n,error:c?void 0:"Enter a valid hexadecimal color.",children:s.jsx(js,{label:e,summary:t,icon:s.jsx("span",{className:"bv-color-dot",style:{background:c?t:"#000"}}),popover:d,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}),f,s.jsx(Ao,{open:i,anchor:l,onClose:()=>a(!1),className:"bv-color-popover",children:d})]})})})}function Ql({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 ff({collectors:e,collectorId:t,resourceId:r,resolved:o=!0,onCollector:n,onResource:i}){const a=e.find(u=>u.id===t),l=a?.resources.find(u=>u.id===r),c=!o||!a||!l;return s.jsxs("div",{className:`bv-resource-picker ${c?"is-unresolved":""}`,children:[s.jsx("div",{className:"bv-resource-picker-summary",children:!c&&a&&l?`${a.label} / ${l.label}`:"Unresolved resource selection"}),s.jsxs("label",{children:["Collector",s.jsxs("select",{"aria-label":"Collector",value:t,onChange:u=>n(u.target.value),children:[s.jsx("option",{value:"",children:"Select collector"}),e.map(u=>s.jsx("option",{value:u.id,children:u.label},u.id))]})]}),s.jsxs("label",{children:["Resource",s.jsxs("select",{"aria-label":"Resource",value:r,onChange:u=>i(u.target.value),children:[s.jsx("option",{value:"",children:"Select resource"}),a?.resources.map(u=>s.jsx("option",{value:u.id,children:u.label},u.id))]})]})]})}const lh=["#E45756","#4C78A8","#54A24B","#F2CF5B","#B279A2","#FF9DA6"],Sv=e=>lh[e%lh.length],Nt=()=>crypto.randomUUID(),sh=()=>({schema:"bv.regional",version:2,document_id:Nt(),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:[]}),a0=e=>({id:Nt(),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:Sv(e)}}),Xt=e=>structuredClone(e);function l0(e,t){return{...e,document_id:t}}const ir=(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,Sa=e=>e.mask_group_id??Pt(e);function Lv(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:ir(n[0],i),enabled:n.some(a=>a.enabled!==!1)}))}function Lr(e){return Lv(e.geometry,Pt)}function s0(e){return Lv(e,Sa)}function sn(e){const t=typeof e=="string"?JSON.parse(e):Xt(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=ir(n,i)),n.type==="brush_stroke"&&(n.shape??(n.shape="round"),n.pressure_mode??(n.pressure_mode="constant"))})}return t}function Cv(e){const t=new Map;for(const r of e){const o=Sa(r);t.has(o)||t.set(o,r)}return[...t.values()].every(r=>r.operation==="add")}function Wu(e,t){return Cv(e.filter(r=>r.id!==t))}function ch({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(Cw,{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 $t({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 c0(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}),f=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 d=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",d(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(`${d(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(`${d(b)}:`)?` drop-target drop-${h[h.length-1]}`:""},E=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($t,{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($t,{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:!E,onClick:()=>E&&e.onDeleteRegion(E.id),children:s.jsx($t,{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(),f(b.id)},children:s.jsx($t,{name:v?"chevron-down":"chevron-right"})}),s.jsx("i",{style:{background:b.authoring.color}}),s.jsx(ch,{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($t,{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($t,{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($t,{name:"check"})})]}),v&&s.jsx("div",{className:"geometry-layers",children:[...Lr(b)].reverse().map(y=>{const T=e.selectedLayerIds.includes(y.id),L=y.id===e.selectedLayerId,B=new Set(y.geometries.map(k=>k.type)),C=new Set(y.geometries.map(Sa)).size,I=B.size>1||C>1?"◈":y.geometries[0].type==="rect"?"▭":y.geometries[0].type==="ellipse"?"◯":y.geometries[0].type==="polygon"?"⬠":y.geometries[0].type==="raster_mask"?"▦":"✎",z=t.has(y.id),S={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":""} ${L?"primary-selection":""}${w(S)}`,...x(S),onClick:k=>e.onSelectLayer(b.id,y.id,k.shiftKey?"range":k.ctrlKey||k.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:k=>p(S,k),onDragEnd:()=>{a(null),c(null)},onKeyDown:k=>{k.altKey&&k.key==="ArrowUp"&&(k.preventDefault(),e.onMoveLayer(y.id,1)),k.altKey&&k.key==="ArrowDown"&&(k.preventDefault(),e.onMoveLayer(y.id,-1))},onClick:k=>k.stopPropagation(),children:"⠿"}),s.jsx(it,{className:"layer-expand","aria-expanded":z,title:z?"Collapse operations":"Expand operations",onClick:k=>{k.stopPropagation(),u(y.id)},children:s.jsx($t,{name:z?"chevron-down":"chevron-right"})}),s.jsxs("span",{title:`${y.geometries.length} operations · ${C} mask group${C===1?"":"s"}`,children:[I,y.geometries.some(k=>k.operation==="subtract")?"−":""]}),s.jsx(ch,{value:y.authoring.name,onCommit:k=>e.onRenameLayer(y.id,k)}),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:k=>{k.stopPropagation(),e.onToggleLayer(y.id,"visible")},children:s.jsx($t,{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:k=>{k.stopPropagation(),e.onToggleLayer(y.id,"locked")},children:s.jsx($t,{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:k=>{k.stopPropagation(),e.onToggleLayer(y.id,"enabled")},children:y.enabled&&s.jsx($t,{name:"check"})}),s.jsxs("details",{className:"layer-overflow",onClick:k=>k.stopPropagation(),children:[s.jsx("summary",{title:"Layer actions","aria-label":"Layer actions",children:s.jsx($t,{name:"more"})}),s.jsxs("div",{children:[s.jsx(it,{onClick:k=>{k.currentTarget.closest("details").removeAttribute("open"),e.onDuplicateLayer(y.id)},children:"Duplicate layer"}),s.jsx(it,{className:"danger",onClick:k=>{k.currentTarget.closest("details").removeAttribute("open"),e.onDeleteLayer(y.id)},children:"Delete layer"})]})]})]}),z&&s.jsx("div",{className:"geometry-operations",children:y.geometries.map((k,j)=>{const A={kind:"geometry",regionId:b.id,layerId:y.id,geometryId:k.id};return s.jsxs("div",{className:`geometry-operation ${e.selectedGeometryId===k.id?"selected":""}${w(A)}`,...x(A),children:[s.jsx(it,{className:"tree-drag-handle",draggable:!0,"aria-label":`Move ${ir(k,j).name}`,title:"Drag operation",onDragStart:R=>p(A,R),onDragEnd:()=>{a(null),c(null)},children:"⠿"}),s.jsxs(it,{className:"geometry-operation-select",onClick:()=>e.onSelectGeometry(b.id,y.id,k.id),children:[s.jsx("span",{className:`operation-kind ${k.operation}`,children:k.operation==="add"?"+":"−"}),s.jsx("span",{children:ir(k,j).name}),s.jsx("small",{children:k.type.replace("_"," ")})]}),s.jsx(it,{className:`tree-icon-button${k.enabled!==!1?"":" deviant"}`,title:k.enabled!==!1?"Disable operation":"Enable operation","aria-pressed":k.enabled!==!1,onClick:()=>e.onToggleGeometry(k.id),children:s.jsx($t,{name:k.enabled!==!1?"eye":"eye-off"})}),s.jsx(it,{className:"danger",disabled:!Wu(y.geometries,k.id),title:Wu(y.geometries,k.id)?"Delete operation":"Additive base: remove dependent subtract operations first",onClick:()=>e.onDeleteGeometry(k.id),children:"×"})]},k.id)})})]},y.id)})})]},b.id)})]})}const uh=({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 u0({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:f=>f.stopPropagation(),onPointerUp:f=>f.stopPropagation(),onWheel:f=>f.stopPropagation(),children:[s.jsx(Lw,{orientation:"vertical",density:"compact",label:"Regional drawing tools",items:[...u.map(f=>({id:f.id,label:f.title,icon:s.jsx(uh,{name:f.id}),active:e===f.id,disabled:f.id.endsWith("subtract")&&!r,onSelect:()=>{n(f.id),f.id.startsWith("brush")||l(!1)},group:f.id.split("-")[0]})),...c?[{id:"brush-settings",label:"Brush settings",icon:s.jsx(uh,{name:"settings"}),active:a,onSelect:()=>l(f=>!f),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(jt,{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:f=>i({...t,size:f})}),s.jsx(jt,{label:"Hardness",value:t.hardness,min:0,max:1,step:.05,unit:"×",onValue:f=>i({...t,hardness:f})}),s.jsx(jt,{label:"Opacity",value:t.opacity,min:.05,max:1,step:.05,unit:"×",onValue:f=>i({...t,opacity:f})}),s.jsx(ht,{label:"Shape",value:t.shape,onValue:f=>i({...t,shape:f}),options:[{value:"round",label:"Round"},{value:"square",label:"Square"}]}),s.jsx(ht,{label:"Pressure",value:t.pressureMode,onValue:f=>i({...t,pressureMode:f}),options:[{value:"constant",label:"Constant"},{value:"stylus",label:"Stylus"}]})]})]})}const d0=({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(ln,{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(d=>d.groupId===a.groupId),u=c?.entries.filter(d=>d.action===c.winnerAction).map(d=>d.controlName).join(", "),f=c?a.action===c.winnerAction?`Overrides ${[...new Set(c.entries.filter(d=>d.action!==c.winnerAction).map(d=>n(d.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,f&&s.jsxs("small",{children:["⚠ ",f]})]}),s.jsx(ht,{label:"Action",value:a.action,options:[{value:"activate",label:"Activate"},{value:"mute",label:"Mute"},{value:"bypass",label:"Bypass"}],onValue:d=>o({...e,assignments:e.assignments.map((p,g)=>g===l?{...p,action:d}:p)})}),s.jsx(ie,{intent:"ghost",iconOnly:!0,"aria-label":"Remove assignment",onClick:()=>o({...e,assignments:e.assignments.filter((d,p)=>p!==l)}),children:"×"})]},a.groupId)})}),s.jsx(ht,{label:"Add group",value:"",onValue:i,options:[{value:"",label:"Choose group…"},...t.map(a=>({value:a.id,label:a.pathLabel}))]})]})},f0=100;function zs(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 E=typeof x=="function"?x(t(w)):x;return i(b=>[...b.slice(-99),t(w)]),l([]),t(E)})},[t]),f=m.useCallback((x,w=!1)=>{o(t(x)),w&&(i([]),l([]))},[t]),d=m.useCallback(()=>{i(x=>{if(!x.length)return x;const w=x[x.length-1];return l(E=>[t(c.current),...E].slice(0,f0)),o(t(w)),x.slice(0,-1)})},[t]),p=m.useCallback(()=>{l(x=>{if(!x.length)return x;const w=x[0];return i(E=>[...E.slice(-99),t(c.current)]),o(t(w)),x.slice(1)})},[t]),g=m.useCallback(()=>{i([]),l([])},[]);return{value:r,commit:u,replace:f,undo:d,redo:p,clear:g,canUndo:n.length>0,canRedo:a.length>0}}const p0=e=>e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement||e instanceof HTMLElement&&e.isContentEditable;function Fs(e,t=!0){m.useEffect(()=>{if(!t)return;const r=a=>{if(p0(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 h0(){return globalThis.crypto?.randomUUID?.()??`bv-control-${Date.now()}-${Math.random().toString(16).slice(2)}`}const g0=()=>{const e=m.useMemo(()=>{const f=an(),d=new Set(Zl(ct()).map(p=>p.id));return{...f,controls:f.controls.map(p=>({...p,assignments:p.assignments.map(g=>({...g,unresolved:!d.has(g.groupId)}))}))}},[]),t=zs(e),r=t.value,o=f=>t.commit(f);Fs(t),m.useEffect(()=>{const f=d=>{const p=d.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,f),()=>window.removeEventListener(ei,f)},[r,t.replace]);const n=m.useMemo(()=>Zl(ct()),[r]),i=m.useMemo(()=>pv(r),[r]),a=m.useRef(!1);m.useEffect(()=>{if(!a.current){a.current=!0;return}const f=window.setTimeout(()=>{const d=r.controls.map(g=>g.name.trim());if(d.some(g=>!g)||new Set(d).size!==d.length)return;const p=new Set(n.map(g=>g.id));rf({...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(f)},[r,n]);const l=(f,d)=>{o({...r,controls:d?r.controls.map((p,g)=>g===f?d:p):r.controls.filter((p,g)=>g!==f)})},c=()=>{let f="New Control",d=2;for(;r.controls.some(p=>p.name===f);)f=`New Control ${d++}`;o({...r,controls:[...r.controls,{id:h0(),name:f,enabled:!0,assignments:[]}]})},u=r.controls.map((f,d)=>({id:f.id,title:f.name||"Unnamed control",description:`${f.assignments.length} assignment${f.assignments.length===1?"":"s"}`,content:s.jsx(d0,{control:f,groups:n,conflicts:i,onChange:p=>l(d,p)})}));return s.jsxs("div",{className:"bv-ui-stack",children:[s.jsx(qr,{label:"Force active after releasing restrictions",checked:r.forceActive,onValue:f=>o({...r,forceActive:f})}),s.jsx("div",{className:"bv-controls",children:s.jsx(Ps,{items:u,onReorder:f=>o({...r,controls:f.map(d=>r.controls.find(p=>p.id===d.id)).filter(Boolean)}),onRemove:f=>o({...r,controls:r.controls.filter(d=>d.id!==f)})})}),s.jsxs("footer",{className:"bv-ui-inline-footer",children:[s.jsx(gv,{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"})]})]})},Xo=new Map,es=new Map;function pf(e,t={}){const r=t.key?Xo.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&&Xo.get(t.key)?.close===c&&Xo.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))},f=()=>o.querySelector(".bv-managed-window")?.dispatchEvent(new Event("bv-ui-minimize")),d=()=>{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:f,state:d,setState:p,close:c};Xo.set(t.key,g);const x=es.get(t.key);x&&(es.delete(t.key),requestAnimationFrame(()=>g.setState(x)))}return n.render(l(c,a)),c}function hf(e,t,r,o){if(e===t)return Xo.get(e)?.activate();const n=Xo.get(e),i=n?.state(),a=Xo.get(t);i&&es.set(t,i),a?a.activate():r(),i&&a&&(es.delete(t),requestAnimationFrame(()=>a.setState(i))),o?n?.close():n?.minimize()}const Nv="BV.NodePack.UI.Size",Ov="BV.NodePack.UI.ReducedEffects",gf="BV.NodePack.UI.WindowSwitchMode";let Ni="keep",Mv;const Vu=new Set,b0=e=>e==="replace"?"replace":"keep",ri=()=>Ni,v0=e=>{Mv=e},m0=e=>(Vu.add(e),()=>Vu.delete(e));function bf(e,t=!0){return Ni=b0(e),t&&Mv?.(Ni),Vu.forEach(r=>r(Ni)),Ni}const x0=["bv-ui-size-compact","bv-ui-size-default","bv-ui-size-large"];function y0(e){return e==="compact"||e==="large"?e:"default"}function Av(e,t=document.documentElement){const r=y0(e);return t.classList.remove(...x0),t.classList.add(`bv-ui-size-${r}`),r}function Dv(e,t=document.documentElement){return t.classList.toggle("bv-ui-reduced-effects",!!e),!!e}function _0(e){Av(e?.getSettingValue?.(Nv,"default")),Dv(e?.getSettingValue?.(Ov,!1)),bf(e?.getSettingValue?.(gf,"keep"),!1)}function w0(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 k0(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 E0(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 dh=!1;const T0=e=>e.isConnected&&!e.hidden&&e.offsetParent!==null;function R0(e){const t=qo.filter(T0);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 S0(){dh||(dh=!0,window.addEventListener("keydown",e=>{e.key!=="Tab"||!e.ctrlKey||e.altKey||e.metaKey||(e.preventDefault(),e.stopImmediatePropagation(),R0(e.shiftKey))},!0))}function L0(e){return S0(),qo.push(e),()=>{const t=qo.indexOf(e);t>=0&&qo.splice(t,1)}}function fh(e){const t=qo.indexOf(e);t>=0&&qo.splice(t,1),qo.push(e)}const Iv="bvWindowMenuVisible",oi="bv-window-menu-visibility-changed",C0=e=>!["BV Smart Pipe","BV Smart Pipe Merge"].includes(e);function bn(e){const t=e?.properties?.[Iv];return typeof t=="boolean"?t:C0(String(e?.type??e?.comfyClass??""))}function di(e,t){e&&(e.properties??(e.properties={}),e.properties[Iv]=!!t,e.graph?.setDirtyCanvas?.(!0,!0),window.dispatchEvent(new CustomEvent(oi,{detail:{node:e,visible:!!t}})))}function N0(e){return window.addEventListener(oi,e),()=>window.removeEventListener(oi,e)}let Hu=0;window.addEventListener(oi,()=>Hu++);function La(e){return m.useSyncExternalStore(N0,()=>Hu,()=>Hu),bn(e)}const O0=(e,t)=>String(e?.id??e?._id??e?.extra?.uuid??t);function vf(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=O0(n,i.length?i[i.length-1]:"root");for(const f of n._nodes??n.nodes??[]){const d=String(f.id),p=[...i,u];t(f)&&r.push({node:f,graph:n,path:p,key:`${p.join("/")}:${d}`,breadcrumb:a.join(" › ")});const g=f.subgraph??(()=>{try{return f.getSubgraph?.()}catch{return null}})();g&&o(g,[...p,d],[...a,String(f.title||f.type||`#${d}`)],c)}};return o(e,[],[]),r}function da(e,t){return vf(e,r=>r===t)[0]?.key??String(t?.id??"")}const ts="bv-toggle-toolbar-window-launcher";function M0({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(),f=m.useRef(),d=m.useRef(0),p=()=>{u.current&&window.clearTimeout(u.current),f.current&&window.clearTimeout(f.current)},g=(v,_)=>{const y=v.getBoundingClientRect(),T=Math.min(Math.max(1,_)*220,window.innerWidth-24),L=Math.min(420,window.innerHeight-84),B=Math.max(12,Math.min(y.left,window.innerWidth-T-12)),C=y.bottom+6+L<=window.innerHeight-12?y.bottom+6:Math.max(12,y.top-L-6);return{left:B,top:C}},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(L=>L.offsetParent!==null),T=_?.offsetParent?_:y[0];T&&(a(!1),r(g(T,e(!1).filter(L=>L.items.length).length)),n(!0))},v)},[e]),w=m.useCallback(()=>x(180),[x]),E=m.useCallback(()=>{u.current&&window.clearTimeout(u.current);const v=Math.max(280,d.current-Date.now());f.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 L=()=>w(),B=()=>E();T.addEventListener("pointerenter",L),T.addEventListener("pointerleave",B);const C=()=>{T.removeEventListener("pointerenter",L),T.removeEventListener("pointerleave",B)};v.set(T,C)}};_();const y=new MutationObserver(_);return y.observe(document.body,{childList:!0,subtree:!0}),()=>{y.disconnect(),v.forEach(T=>T()),p()}},[E,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(ts,v),()=>window.removeEventListener(ts,v)},[o,x]),m.useEffect(()=>{const v=()=>l(_=>_+1);return window.addEventListener(oi,v),()=>window.removeEventListener(oi,v)},[]);const b=v=>{p(),d.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 Pr.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:E,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(df,{label:"Show hidden nodes",value:i,trueLabel:"Shown",falseLabel:"Hidden",onValue:b})})]}),document.body)}var fi=class{constructor(){M(this,"attributes");M(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}},M(_i,"NUMBER","number"),M(_i,"STRING","string"),M(_i,"BOOLEAN","boolean"),_i),he=class Wo{constructor(t,r,o,n){M(this,"x");M(this,"y");M(this,"width");M(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 Ie.CENTER;const i=o>=r,a=o>=1-r;return i?a?Ie.BOTTOM:Ie.LEFT:a?Ie.RIGHT:Ie.TOP}getName(){return this.name}getOrientation(){return this.orientation}getDockRect(t){return this===Ie.TOP?new he(t.x,t.y,t.width,t.height/2):this===Ie.BOTTOM?new he(t.x,t.getBottom()-t.height/2,t.width,t.height/2):this===Ie.LEFT?new he(t.x,t.y,t.width/2,t.height):this===Ie.RIGHT?new he(t.getRight()-t.width/2,t.y,t.width/2,t.height):t.clone()}toString(){return"(DockLocation: name="+this.name+", orientation="+this.orientation+")"}},M(Ie,"values",new Map),M(Ie,"TOP",new Ie("top",ye.VERT,0)),M(Ie,"BOTTOM",new Ie("bottom",ye.VERT,1)),M(Ie,"LEFT",new Ie("left",ye.HORZ,0)),M(Ie,"RIGHT",new Ie("right",ye.HORZ,1)),M(Ie,"CENTER",new Ie("center",ye.VERT,0)),Ie),ue,re=(ue=class{static group(t){return new Rv(t)}static addTab(t,r,o,n,i){return new He(ue.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 He(ue.MOVE_NODE,{fromNode:t,toNode:r,location:o.getName(),index:n,select:i})}static deleteTab(t){return new He(ue.DELETE_TAB,{node:t})}static deleteTabset(t){return new He(ue.DELETE_TABSET,{node:t})}static renameTab(t,r){return new He(ue.RENAME_TAB,{node:t,text:r})}static setTabPinned(t,r){return new He(ue.SET_TAB_PINNED,{node:t,pinned:r})}static setBorderType(t,r){return new He(ue.SET_BORDER_TYPE,{node:t,borderType:r})}static selectTab(t){return new He(ue.SELECT_TAB,{tabNode:t})}static setActiveTabset(t,r){return new He(ue.SET_ACTIVE_TABSET,{tabsetNode:t,layoutId:r})}static adjustWeights(t,r){return new He(ue.ADJUST_WEIGHTS,{nodeId:t,weights:r})}static adjustBorderSplit(t,r){return new He(ue.ADJUST_BORDER_SPLIT,{node:t,size:r})}static maximizeToggle(t,r){return new He(ue.MAXIMIZE_TOGGLE,{node:t,layoutId:r})}static updateModelAttributes(t){return new He(ue.UPDATE_MODEL_ATTRIBUTES,{json:t})}static updateNodeAttributes(t,r){return new He(ue.UPDATE_NODE_ATTRIBUTES,{node:t,json:r})}static updateSubLayoutAttributes(t,r){return new He(ue.UPDATE_SUBLAYOUT_ATTRIBUTES,{layoutId:t,json:r})}static popoutTab(t,r="window"){return new He(ue.POPOUT_TAB,{node:t,type:r})}static popoutTabset(t,r="window"){return new He(ue.POPOUT_TABSET,{node:t,type:r})}static closePopout(t){return new He(ue.CLOSE_POPOUT,{layoutId:t})}static movePopoutToFront(t){return new He(ue.MOVE_POPOUT_TO_FRONT,{layoutId:t})}static moveFloat(t,r){return new He(ue.MOVE_FLOAT,{layoutId:t,rect:r})}static popoutFloat(t,r){return new He(ue.POPOUT_FLOAT,{layoutId:t,rect:r})}static dockFloatToLayout(t,r,o,n){return new He(ue.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 He(ue.CREATE_SUBLAYOUT,{layout:t,rect:r,type:o})}},M(ue,"ADD_TAB","FlexLayout_AddTab"),M(ue,"DELETE_TAB","FlexLayout_DeleteTab"),M(ue,"RENAME_TAB","FlexLayout_RenameTab"),M(ue,"SET_TAB_PINNED","FlexLayout_SetTabPinned"),M(ue,"SET_BORDER_TYPE","FlexLayout_SetBorderType"),M(ue,"SELECT_TAB","FlexLayout_SelectTab"),M(ue,"MOVE_NODE","FlexLayout_MoveNode"),M(ue,"DELETE_TABSET","FlexLayout_DeleteTabset"),M(ue,"SET_ACTIVE_TABSET","FlexLayout_SetActiveTabset"),M(ue,"ADJUST_WEIGHTS","FlexLayout_AdjustWeights"),M(ue,"ADJUST_BORDER_SPLIT","FlexLayout_AdjustBorderSplit"),M(ue,"MAXIMIZE_TOGGLE","FlexLayout_MaximizeToggle"),M(ue,"UPDATE_MODEL_ATTRIBUTES","FlexLayout_UpdateModelAttributes"),M(ue,"UPDATE_NODE_ATTRIBUTES","FlexLayout_UpdateNodeAttributes"),M(ue,"UPDATE_SUBLAYOUT_ATTRIBUTES","FlexLayout_UpdateSubLayoutAttributes"),M(ue,"POPOUT_TAB","FlexLayout_PopoutTab"),M(ue,"POPOUT_TABSET","FlexLayout_PopoutTabset"),M(ue,"CLOSE_POPOUT","FlexLayout_ClosePopout"),M(ue,"MOVE_POPOUT_TO_FRONT","FlexLayout_MoveFloatToFront"),M(ue,"MOVE_FLOAT","FlexLayout_MoveFloat"),M(ue,"DOCK_FLOAT_TO_LAYOUT","FlexLayout_DockFloatToLayout"),M(ue,"POPOUT_FLOAT","FlexLayout_PopoutFloat"),M(ue,"CREATE_SUBLAYOUT","FlexLayout_CreateSubLayout"),M(ue,"GROUP","FlexLayout_Group"),ue),He=class{constructor(e,t){M(this,"type");M(this,"data");M(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}}},Rv=class extends He{constructor(t){super(re.GROUP,t);M(this,"actions");this.actions=t}},Tt=class{constructor(e,t,r,o,n){M(this,"node");M(this,"rect");M(this,"location");M(this,"index");M(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}({}),js=class{constructor(e){M(this,"model");M(this,"attributes");M(this,"parent");M(this,"children");M(this,"rect");M(this,"path");M(this,"listeners");this.model=e,this.attributes={},this.children=[],this.rect=he.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 ca(e){return e.ctrlKey||e.shiftKey||e.altKey||e.metaKey}function b0(e){return{...g0,...e}}function So(e){return e?.replace(/\bctrl\b/i,"Control")}function Cv(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 ua(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 vl(e,t){const r=[...rh("iframe",t),...rh("webview",t)];for(const o of r)o.style.pointerEvents=e?"auto":"none"}function rh(e,t){return[...t.getElementsByTagName(e)]}var ml=!1;function Ql(e,t,r,o,n){ml=!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(),ml=!1,n()},c=()=>{a(),ml=!1,o()};e.addEventListener("pointermove",i),e.addEventListener("pointerup",c),e.addEventListener("pointercancel",l)}function Nv(e){let t;return e.getController().getModel().visitNodes(r=>{r instanceof Se&&r.getSubLayoutId()===e.getLayoutId()&&(t=r.getLayout())}),t}function Ov(e,t){const r=t.getType();if(r==="window")return e.isAllowedInWindow();if(r==="float")return!0;if(r==="tab"){const o=Nv(t);return!(o&&o.getType()==="window"&&!o.isMainLayout()&&!e.isAllowedInWindow()||Mv(e))}return!1}function Mv(e){return e instanceof Se?e.getSubLayoutId()!==void 0:e.getChildren().some(t=>Mv(t))}function oh(e,t){const r=e.getAttribute("style");return r===t.getAttribute("style")?!1:(r?t.setAttribute("style",r):t.removeAttribute("style"),!0)}function v0(){const e=navigator.userAgent;return e.includes("Safari")&&!e.includes("Chrome")&&!e.includes("Chromium")}function m0(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 je,$e=(je=class extends js{constructor(r,o){super(r);M(this,"layout");M(this,"minHeight");M(this,"minWidth");M(this,"maxHeight");M(this,"maxWidth");this.minHeight=1,this.minWidth=1,this.maxHeight=Vr,this.maxWidth=Vr,je.attributeDefinitions.fromJson(o,this.attributes),r.addNode(this)}static fromJson(r,o,n){const i=new je(o,r);if(r.children!=null){for(const a of r.children)if(a.type===Oe.TYPE){const l=Oe.fromJson(a,o,n);i.addChild(l)}else if(a.type===je.TYPE){const l=je.fromJson(a,o,n);i.addChild(l)}}return i}getWeight(){return this.attributes.weight}toJson(){const r={};je.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()===ye.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 f=0;f0&&(c[0]+=i,u[0]+=i)}for(let f=n.length-1;f>=r;f--){const d=n[f];c[1]-=(o?d.getMinWidth():d.getMinHeight())+i,u[1]-=(o?Math.max(d.getMinWidth(),d.getMaxWidth()):Math.max(d.getMinHeight(),d.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()===ye.HORZ,n=this.getChildren(),i=this.model.getSplitterSize(),a=[];let l=0;for(let f=0;fd?(g=u[r]+p-d,u[r]=d):u[r]+=p;for(let x=r-1;x>=0;x--){const w=c[x],E=l?w.getMinWidth():w.getMinHeight();if(u[x]-p>E){u[x]-=p;break}else p-=u[x]-E,u[x]=E}for(let x=r+1;xd?(g=u[r-1]+p-d,u[r-1]=d):u[r-1]+=p;for(let x=r;xE){u[x]-=p;break}else p-=u[x]-E,u[x]=E}for(let x=r-1;x>=0;x--){const w=c[x],E=l?w.getMaxWidth():w.getMaxHeight();if(u[x]+gMath.max(.1,f)*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=Vr,this.maxWidth=Vr;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()===ye.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-d&&athis.rect.getRight()-f&&a>u/2-d&&ac/2-d&&lthis.rect.getBottom()-f&&l>c/2-d&&lf+d.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 f=new je(this.model,{}),d=new je(this.model,{});d.setWeight(75),l.setWeight(25);for(const p of this.children)d.addChild(p);this.removeAll(),f.addChild(l),f.addChild(d),this.addChild(f)}else if(u&&i===ee.BOTTOM||!u&&i===ee.RIGHT){const f=new je(this.model,{}),d=new je(this.model,{});d.setWeight(75),l.setWeight(25);for(const p of this.children)d.addChild(p);this.removeAll(),f.addChild(d),f.addChild(l),this.addChild(f)}l instanceof Oe&&this.model.setActiveTabset(l,this.getLayoutId()),this.model.tidy()}isEnableDrop(){return!0}getAttributeDefinitions(){return je.attributeDefinitions}updateAttrs(r){je.attributeDefinitions.update(r,this.attributes)}static getAttributeDefinitions(){return at.ensureAttributePairing(),je.attributeDefinitions}static createAttributeDefinitions(){const r=new si;return r.add("type",je.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}},M(je,"TYPE","row"),M(je,"attributeDefinitions",je.createAttributeDefinitions()),je),vt,Oe=(vt=class extends js{constructor(r,o){super(r);M(this,"tabStripRect",he.empty());M(this,"contentRect",he.empty());M(this,"calculatedMinHeight");M(this,"calculatedMinWidth");M(this,"calculatedMaxHeight");M(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=Se.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 Tt(this,u,c,-1,U.FLEXLAYOUT__OUTLINE_RECT)}else{if(this.getLayoutId()!==at.MAIN_LAYOUT_ID&&!Ov(r,l))return;if(this.contentRect.contains(o,n)){let c=ee.CENTER;if(this.model.getMaximizedTabset(this.getLayoutId())===void 0){const f=!i&&this.isEnableDrop(),d=this.isEnableDivide();if(!f&&!d)return;f&&d?c=ee.getLocation(this.contentRect,o,n):f?c=ee.CENTER:c=ee.getLocation(this.contentRect,o,n,!0)}const u=c.getDockRect(this.rect);a=new Tt(this,u,c,-1,U.FLEXLAYOUT__OUTLINE_RECT)}else if(this.tabStripRect!=null&&this.tabStripRect.contains(o,n)){let c,u,f;if(this.children.length===0)c=this.tabStripRect.clone(),u=c.y+3,f=c.height-4,c.width=2;else{let d=this.children[0];c=d.getTabRect(),u=c.y,f=c.height;let p=this.tabStripRect.x;for(let g=0;g0){const c=this.getPinnedRunLength(),u=r instanceof Se&&r.isPinned()?Math.min(a.index,c):Math.max(a.index,c);if(u!==a.index){let f;if(u0&&n--,a===ee.CENTER){let u=n;u===-1&&(u=this.children.length);const f=this.getPinnedRunLength();if(r instanceof Se?u=r.isPinned()?Math.min(u,f):Math.max(u,f):u=Math.max(u,f),r instanceof Se)this.addChild(r,u),i||i!==!1&&this.isAutoSelectTab()?this.setSelected(u):xl(this,u);else if(r instanceof $e){const d=u;r.forEachNode((p,g)=>{p instanceof Se&&(this.addChild(p,u),u++)},0),xl(this,d,u-d)}else{const d=u;for(let p=0;p0&&this.setSelected(0)}this.model.setActiveTabset(this,this.parent.getLayoutId())}else{let u=r;if(r instanceof Se){const p=this.model.getOnCreateTabSet();u=new vt(this.model,p?p(r):{}),u.addChild(r)}else if(r instanceof $e){const p=this.getParent();if(r.getOrientation()===p.getOrientation()&&(o.getOrientation()===p.getOrientation()||o===ee.CENTER)){const g=new $e(this.model,{});g.addChild(r),u=g}}else u=r;const f=this.parent,d=f.getChildren().indexOf(this);if(f.getOrientation()===a.orientation)u.setWeight(this.getWeight()/2),this.setWeight(this.getWeight()/2),f.addChild(u,d+a.indexPlus);else{const p=new $e(this.model,{});if(p.setWeight(this.getWeight()),p.addChild(this),this.setWeight(50),r instanceof $e&&r.getChildren().length>0&&r.getOrientation()!==f.getOrientation()){const g=r.getChildren(),x=g.reduce((E,b)=>E+b.getWeight(),0);let w=a.indexPlus;for(const E of g)E.setWeight(x===0?50/g.length:50*E.getWeight()/x),p.addChild(E,w++)}else u.setWeight(50),p.addChild(u,a.indexPlus);f.removeChild(this),f.addChild(p,d)}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 at.ensureAttributePairing(),vt.attributeDefinitions}static createAttributeDefinitions(){const r=new si;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}},M(vt,"TYPE","tabset"),M(vt,"attributeDefinitions",vt.createAttributeDefinitions()),vt);function xl(e,t,r=1){const o=e.getSelected();r>0&&o!==-1&&t<=o&&e.setSelected(o+r)}function es(e,t){if(e!==void 0&&(e instanceof Oe||e instanceof Je)){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 yn(){return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,e=>(e^crypto.getRandomValues(new Uint8Array(1))[0]&15>>e/4).toString(16))}var wt,Je=(wt=class extends js{constructor(r,o,n){super(n);M(this,"contentRect",he.empty());M(this,"tabHeaderRect",he.empty());M(this,"location");this.location=r,this.attributes.id=`border_${r.getName()}`,wt.attributeDefinitions.fromJson(o,this.attributes),n.addNode(this)}static fromJson(r,o){const n=ee.getByName(r.location),i=new wt(n,r,o);return r.children&&(i.children=r.children.map(a=>{const l=Se.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===ye.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 wt.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){wt.attributeDefinitions.update(r,this.attributes)}remove(r){const o=this.removeChild(r);this.getSelected()!==-1&&es(this,o)}canDrop(r,o,n,i=!1){if(!(r instanceof Se))return;let a;const l=ee.CENTER;if(this.tabHeaderRect.contains(o,n)){if(this.location.orientation===ye.VERT)if(this.children.length>0){let c=this.children[0],u=c.getTabRect();const f=u.y,d=u.height;let p=this.tabHeaderRect.x;for(let g=0;g=p&&o0){let c=this.children[0],u=c.getTabRect();const f=u.x,d=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):xl(this,c),this.model.tidy()}getSplitterBounds(r=!1){const o=[0,0],n=this.model.getRootRow(at.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 wt.attributeDefinitions}static getAttributeDefinitions(){return at.ensureAttributePairing(),wt.attributeDefinitions}static createAttributeDefinitions(){const r=new si;return r.add("type",wt.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 +`)}},Ti,te=(Ti=class{constructor(e,t,r,o){M(this,"name");M(this,"alias");M(this,"modelName");M(this,"pairedAttr");M(this,"pairedType");M(this,"defaultValue");M(this,"alwaysWriteJson");M(this,"type");M(this,"required");M(this,"fixed");M(this,"description");M(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}},M(Ti,"NUMBER","number"),M(Ti,"STRING","string"),M(Ti,"BOOLEAN","boolean"),Ti),he=class Wo{constructor(t,r,o,n){M(this,"x");M(this,"y");M(this,"width");M(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 Ie.CENTER;const i=o>=r,a=o>=1-r;return i?a?Ie.BOTTOM:Ie.LEFT:a?Ie.RIGHT:Ie.TOP}getName(){return this.name}getOrientation(){return this.orientation}getDockRect(t){return this===Ie.TOP?new he(t.x,t.y,t.width,t.height/2):this===Ie.BOTTOM?new he(t.x,t.getBottom()-t.height/2,t.width,t.height/2):this===Ie.LEFT?new he(t.x,t.y,t.width/2,t.height):this===Ie.RIGHT?new he(t.getRight()-t.width/2,t.y,t.width/2,t.height):t.clone()}toString(){return"(DockLocation: name="+this.name+", orientation="+this.orientation+")"}},M(Ie,"values",new Map),M(Ie,"TOP",new Ie("top",ye.VERT,0)),M(Ie,"BOTTOM",new Ie("bottom",ye.VERT,1)),M(Ie,"LEFT",new Ie("left",ye.HORZ,0)),M(Ie,"RIGHT",new Ie("right",ye.HORZ,1)),M(Ie,"CENTER",new Ie("center",ye.VERT,0)),Ie),ue,re=(ue=class{static group(t){return new jv(t)}static addTab(t,r,o,n,i){return new He(ue.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 He(ue.MOVE_NODE,{fromNode:t,toNode:r,location:o.getName(),index:n,select:i})}static deleteTab(t){return new He(ue.DELETE_TAB,{node:t})}static deleteTabset(t){return new He(ue.DELETE_TABSET,{node:t})}static renameTab(t,r){return new He(ue.RENAME_TAB,{node:t,text:r})}static setTabPinned(t,r){return new He(ue.SET_TAB_PINNED,{node:t,pinned:r})}static setBorderType(t,r){return new He(ue.SET_BORDER_TYPE,{node:t,borderType:r})}static selectTab(t){return new He(ue.SELECT_TAB,{tabNode:t})}static setActiveTabset(t,r){return new He(ue.SET_ACTIVE_TABSET,{tabsetNode:t,layoutId:r})}static adjustWeights(t,r){return new He(ue.ADJUST_WEIGHTS,{nodeId:t,weights:r})}static adjustBorderSplit(t,r){return new He(ue.ADJUST_BORDER_SPLIT,{node:t,size:r})}static maximizeToggle(t,r){return new He(ue.MAXIMIZE_TOGGLE,{node:t,layoutId:r})}static updateModelAttributes(t){return new He(ue.UPDATE_MODEL_ATTRIBUTES,{json:t})}static updateNodeAttributes(t,r){return new He(ue.UPDATE_NODE_ATTRIBUTES,{node:t,json:r})}static updateSubLayoutAttributes(t,r){return new He(ue.UPDATE_SUBLAYOUT_ATTRIBUTES,{layoutId:t,json:r})}static popoutTab(t,r="window"){return new He(ue.POPOUT_TAB,{node:t,type:r})}static popoutTabset(t,r="window"){return new He(ue.POPOUT_TABSET,{node:t,type:r})}static closePopout(t){return new He(ue.CLOSE_POPOUT,{layoutId:t})}static movePopoutToFront(t){return new He(ue.MOVE_POPOUT_TO_FRONT,{layoutId:t})}static moveFloat(t,r){return new He(ue.MOVE_FLOAT,{layoutId:t,rect:r})}static popoutFloat(t,r){return new He(ue.POPOUT_FLOAT,{layoutId:t,rect:r})}static dockFloatToLayout(t,r,o,n){return new He(ue.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 He(ue.CREATE_SUBLAYOUT,{layout:t,rect:r,type:o})}},M(ue,"ADD_TAB","FlexLayout_AddTab"),M(ue,"DELETE_TAB","FlexLayout_DeleteTab"),M(ue,"RENAME_TAB","FlexLayout_RenameTab"),M(ue,"SET_TAB_PINNED","FlexLayout_SetTabPinned"),M(ue,"SET_BORDER_TYPE","FlexLayout_SetBorderType"),M(ue,"SELECT_TAB","FlexLayout_SelectTab"),M(ue,"MOVE_NODE","FlexLayout_MoveNode"),M(ue,"DELETE_TABSET","FlexLayout_DeleteTabset"),M(ue,"SET_ACTIVE_TABSET","FlexLayout_SetActiveTabset"),M(ue,"ADJUST_WEIGHTS","FlexLayout_AdjustWeights"),M(ue,"ADJUST_BORDER_SPLIT","FlexLayout_AdjustBorderSplit"),M(ue,"MAXIMIZE_TOGGLE","FlexLayout_MaximizeToggle"),M(ue,"UPDATE_MODEL_ATTRIBUTES","FlexLayout_UpdateModelAttributes"),M(ue,"UPDATE_NODE_ATTRIBUTES","FlexLayout_UpdateNodeAttributes"),M(ue,"UPDATE_SUBLAYOUT_ATTRIBUTES","FlexLayout_UpdateSubLayoutAttributes"),M(ue,"POPOUT_TAB","FlexLayout_PopoutTab"),M(ue,"POPOUT_TABSET","FlexLayout_PopoutTabset"),M(ue,"CLOSE_POPOUT","FlexLayout_ClosePopout"),M(ue,"MOVE_POPOUT_TO_FRONT","FlexLayout_MoveFloatToFront"),M(ue,"MOVE_FLOAT","FlexLayout_MoveFloat"),M(ue,"DOCK_FLOAT_TO_LAYOUT","FlexLayout_DockFloatToLayout"),M(ue,"POPOUT_FLOAT","FlexLayout_PopoutFloat"),M(ue,"CREATE_SUBLAYOUT","FlexLayout_CreateSubLayout"),M(ue,"GROUP","FlexLayout_Group"),ue),He=class{constructor(e,t){M(this,"type");M(this,"data");M(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}}},jv=class extends He{constructor(t){super(re.GROUP,t);M(this,"actions");this.actions=t}},Tt=class{constructor(e,t,r,o,n){M(this,"node");M(this,"rect");M(this,"location");M(this,"index");M(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}({}),Us=class{constructor(e){M(this,"model");M(this,"attributes");M(this,"parent");M(this,"children");M(this,"rect");M(this,"path");M(this,"listeners");this.model=e,this.attributes={},this.children=[],this.rect=he.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 fa(e){return e.ctrlKey||e.shiftKey||e.altKey||e.metaKey}function D0(e){return{...A0,...e}}function So(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 pa(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 yl(e,t){const r=[...ph("iframe",t),...ph("webview",t)];for(const o of r)o.style.pointerEvents=e?"auto":"none"}function ph(e,t){return[...t.getElementsByTagName(e)]}var _l=!1;function rs(e,t,r,o,n){_l=!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(),_l=!1,n()},c=()=>{a(),_l=!1,o()};e.addEventListener("pointermove",i),e.addEventListener("pointerup",c),e.addEventListener("pointercancel",l)}function Fv(e){let t;return e.getController().getModel().visitNodes(r=>{r instanceof Se&&r.getSubLayoutId()===e.getLayoutId()&&(t=r.getLayout())}),t}function Uv(e,t){const r=t.getType();if(r==="window")return e.isAllowedInWindow();if(r==="float")return!0;if(r==="tab"){const o=Fv(t);return!(o&&o.getType()==="window"&&!o.isMainLayout()&&!e.isAllowedInWindow()||Wv(e))}return!1}function Wv(e){return e instanceof Se?e.getSubLayoutId()!==void 0:e.getChildren().some(t=>Wv(t))}function hh(e,t){const r=e.getAttribute("style");return r===t.getAttribute("style")?!1:(r?t.setAttribute("style",r):t.removeAttribute("style"),!0)}function I0(){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 je,$e=(je=class extends Us{constructor(r,o){super(r);M(this,"layout");M(this,"minHeight");M(this,"minWidth");M(this,"maxHeight");M(this,"maxWidth");this.minHeight=1,this.minWidth=1,this.maxHeight=Vr,this.maxWidth=Vr,je.attributeDefinitions.fromJson(o,this.attributes),r.addNode(this)}static fromJson(r,o,n){const i=new je(o,r);if(r.children!=null){for(const a of r.children)if(a.type===Oe.TYPE){const l=Oe.fromJson(a,o,n);i.addChild(l)}else if(a.type===je.TYPE){const l=je.fromJson(a,o,n);i.addChild(l)}}return i}getWeight(){return this.attributes.weight}toJson(){const r={};je.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()===ye.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 f=0;f0&&(c[0]+=i,u[0]+=i)}for(let f=n.length-1;f>=r;f--){const d=n[f];c[1]-=(o?d.getMinWidth():d.getMinHeight())+i,u[1]-=(o?Math.max(d.getMinWidth(),d.getMaxWidth()):Math.max(d.getMinHeight(),d.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()===ye.HORZ,n=this.getChildren(),i=this.model.getSplitterSize(),a=[];let l=0;for(let f=0;fd?(g=u[r]+p-d,u[r]=d):u[r]+=p;for(let x=r-1;x>=0;x--){const w=c[x],E=l?w.getMinWidth():w.getMinHeight();if(u[x]-p>E){u[x]-=p;break}else p-=u[x]-E,u[x]=E}for(let x=r+1;xd?(g=u[r-1]+p-d,u[r-1]=d):u[r-1]+=p;for(let x=r;xE){u[x]-=p;break}else p-=u[x]-E,u[x]=E}for(let x=r-1;x>=0;x--){const w=c[x],E=l?w.getMaxWidth():w.getMaxHeight();if(u[x]+gMath.max(.1,f)*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=Vr,this.maxWidth=Vr;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()===ye.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-d&&athis.rect.getRight()-f&&a>u/2-d&&ac/2-d&&lthis.rect.getBottom()-f&&l>c/2-d&&lf+d.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 f=new je(this.model,{}),d=new je(this.model,{});d.setWeight(75),l.setWeight(25);for(const p of this.children)d.addChild(p);this.removeAll(),f.addChild(l),f.addChild(d),this.addChild(f)}else if(u&&i===ee.BOTTOM||!u&&i===ee.RIGHT){const f=new je(this.model,{}),d=new je(this.model,{});d.setWeight(75),l.setWeight(25);for(const p of this.children)d.addChild(p);this.removeAll(),f.addChild(d),f.addChild(l),this.addChild(f)}l instanceof Oe&&this.model.setActiveTabset(l,this.getLayoutId()),this.model.tidy()}isEnableDrop(){return!0}getAttributeDefinitions(){return je.attributeDefinitions}updateAttrs(r){je.attributeDefinitions.update(r,this.attributes)}static getAttributeDefinitions(){return lt.ensureAttributePairing(),je.attributeDefinitions}static createAttributeDefinitions(){const r=new fi;return r.add("type",je.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}},M(je,"TYPE","row"),M(je,"attributeDefinitions",je.createAttributeDefinitions()),je),vt,Oe=(vt=class extends Us{constructor(r,o){super(r);M(this,"tabStripRect",he.empty());M(this,"contentRect",he.empty());M(this,"calculatedMinHeight");M(this,"calculatedMinWidth");M(this,"calculatedMaxHeight");M(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=Se.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 Tt(this,u,c,-1,U.FLEXLAYOUT__OUTLINE_RECT)}else{if(this.getLayoutId()!==lt.MAIN_LAYOUT_ID&&!Uv(r,l))return;if(this.contentRect.contains(o,n)){let c=ee.CENTER;if(this.model.getMaximizedTabset(this.getLayoutId())===void 0){const f=!i&&this.isEnableDrop(),d=this.isEnableDivide();if(!f&&!d)return;f&&d?c=ee.getLocation(this.contentRect,o,n):f?c=ee.CENTER:c=ee.getLocation(this.contentRect,o,n,!0)}const u=c.getDockRect(this.rect);a=new Tt(this,u,c,-1,U.FLEXLAYOUT__OUTLINE_RECT)}else if(this.tabStripRect!=null&&this.tabStripRect.contains(o,n)){let c,u,f;if(this.children.length===0)c=this.tabStripRect.clone(),u=c.y+3,f=c.height-4,c.width=2;else{let d=this.children[0];c=d.getTabRect(),u=c.y,f=c.height;let p=this.tabStripRect.x;for(let g=0;g0){const c=this.getPinnedRunLength(),u=r instanceof Se&&r.isPinned()?Math.min(a.index,c):Math.max(a.index,c);if(u!==a.index){let f;if(u0&&n--,a===ee.CENTER){let u=n;u===-1&&(u=this.children.length);const f=this.getPinnedRunLength();if(r instanceof Se?u=r.isPinned()?Math.min(u,f):Math.max(u,f):u=Math.max(u,f),r instanceof Se)this.addChild(r,u),i||i!==!1&&this.isAutoSelectTab()?this.setSelected(u):wl(this,u);else if(r instanceof $e){const d=u;r.forEachNode((p,g)=>{p instanceof Se&&(this.addChild(p,u),u++)},0),wl(this,d,u-d)}else{const d=u;for(let p=0;p0&&this.setSelected(0)}this.model.setActiveTabset(this,this.parent.getLayoutId())}else{let u=r;if(r instanceof Se){const p=this.model.getOnCreateTabSet();u=new vt(this.model,p?p(r):{}),u.addChild(r)}else if(r instanceof $e){const p=this.getParent();if(r.getOrientation()===p.getOrientation()&&(o.getOrientation()===p.getOrientation()||o===ee.CENTER)){const g=new $e(this.model,{});g.addChild(r),u=g}}else u=r;const f=this.parent,d=f.getChildren().indexOf(this);if(f.getOrientation()===a.orientation)u.setWeight(this.getWeight()/2),this.setWeight(this.getWeight()/2),f.addChild(u,d+a.indexPlus);else{const p=new $e(this.model,{});if(p.setWeight(this.getWeight()),p.addChild(this),this.setWeight(50),r instanceof $e&&r.getChildren().length>0&&r.getOrientation()!==f.getOrientation()){const g=r.getChildren(),x=g.reduce((E,b)=>E+b.getWeight(),0);let w=a.indexPlus;for(const E of g)E.setWeight(x===0?50/g.length:50*E.getWeight()/x),p.addChild(E,w++)}else u.setWeight(50),p.addChild(u,a.indexPlus);f.removeChild(this),f.addChild(p,d)}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}},M(vt,"TYPE","tabset"),M(vt,"attributeDefinitions",vt.createAttributeDefinitions()),vt);function wl(e,t,r=1){const o=e.getSelected();r>0&&o!==-1&&t<=o&&e.setSelected(o+r)}function os(e,t){if(e!==void 0&&(e instanceof Oe||e instanceof Je)){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 wn(){return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,e=>(e^crypto.getRandomValues(new Uint8Array(1))[0]&15>>e/4).toString(16))}var wt,Je=(wt=class extends Us{constructor(r,o,n){super(n);M(this,"contentRect",he.empty());M(this,"tabHeaderRect",he.empty());M(this,"location");this.location=r,this.attributes.id=`border_${r.getName()}`,wt.attributeDefinitions.fromJson(o,this.attributes),n.addNode(this)}static fromJson(r,o){const n=ee.getByName(r.location),i=new wt(n,r,o);return r.children&&(i.children=r.children.map(a=>{const l=Se.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===ye.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 wt.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){wt.attributeDefinitions.update(r,this.attributes)}remove(r){const o=this.removeChild(r);this.getSelected()!==-1&&os(this,o)}canDrop(r,o,n,i=!1){if(!(r instanceof Se))return;let a;const l=ee.CENTER;if(this.tabHeaderRect.contains(o,n)){if(this.location.orientation===ye.VERT)if(this.children.length>0){let c=this.children[0],u=c.getTabRect();const f=u.y,d=u.height;let p=this.tabHeaderRect.x;for(let g=0;g=p&&o0){let c=this.children[0],u=c.getTabRect();const f=u.x,d=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):wl(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 wt.attributeDefinitions}static getAttributeDefinitions(){return lt.ensureAttributePairing(),wt.attributeDefinitions}static createAttributeDefinitions(){const r=new fi;return r.add("type",wt.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}},M(wt,"TYPE","border"),M(wt,"attributeDefinitions",wt.createAttributeDefinitions()),wt),nh=class Av{constructor(t){M(this,"borders");M(this,"borderMap");this.borders=[],this.borderMap=new Map}static fromJson(t,r){const o=new Av(r);o.borders=t.map(n=>Je.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}}},Jo=function(e){return e[e.Visible=1]="Visible",e[e.Always=2]="Always",e[e.Selected=3]="Selected",e}({}),Gt,vn=(Gt=class{constructor(t,r,o,n,i){M(this,"_layoutId");M(this,"_type");M(this,"_rect");M(this,"_path");M(this,"attributes");M(this,"_controller");M(this,"_rootRow");M(this,"_maximizedTabSet");M(this,"_activeTabSet");M(this,"_toExportRectFunction");this.attributes={},Gt.attributeDefinitions.fromJson(i??{},this.attributes),this._layoutId=t,this._type=o,this._rect=n,this._toExportRectFunction=(a,l)=>a,t===at.MAIN_LAYOUT_ID?this._path="":this._path="/sublayout"+r}getPath(){return this._path}visitNodes(t){this.getRootRow()?.forEachNode(t,0)}isMainLayout(){return this._layoutId===at.MAIN_LAYOUT_ID}getLayoutId(){return this._layoutId}getType(){return this._type}getName(){return this.getAttr("name")}getAttr(t){return this.attributes[t]}getAttributeDefinitions(){return Gt.attributeDefinitions}updateAttrs(t){Gt.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 Gt.attributeDefinitions}static createAttributeDefinitions(){const t=new si;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 he(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 Gt.attributeDefinitions.toJson(t,this.attributes),t}static fromJson(t,r,o){const n=r.getLayouts().size,i=t.rect?he.fromJson(t.rect):new he(50+50*n,50+50*n,600,400);i.snap(1);const a=o===at.MAIN_LAYOUT_ID?0:r.getNextSubLayoutId(),l=new Gt(o,a,t.type||"window",i,t);return l.setRootRow($e.fromJson(t.layout,r,l)),l}},M(Gt,"attributeDefinitions",Gt.createAttributeDefinitions()),Gt),Vr=99999,be,at=(be=class{constructor(){M(this,"attributes");M(this,"layouts");M(this,"borders");M(this,"changeListeners");M(this,"idMap");M(this,"mainLayout");M(this,"adoptedFromModel");M(this,"splitterSize");M(this,"onAllowDrop");M(this,"onCreateTabSet");M(this,"nextSubLayoutId");this.attributes={},this.layouts=new Map,this.borders=new nh(this),this.idMap=new Map,this.changeListeners=[],this.nextSubLayoutId=1,this.mainLayout=new vn(be.MAIN_LAYOUT_ID,0,"window",he.empty()),this.layouts.set(be.MAIN_LAYOUT_ID,this.mainLayout),this.splitterSize=8}static ensureAttributePairing(){be.attributePairingDone||(be.attributePairingDone=!0,be.attributeDefinitions.pairAttributes("RowNode",$e.getAttributeDefinitions()),be.attributeDefinitions.pairAttributes("TabSetNode",Oe.getAttributeDefinitions()),be.attributeDefinitions.pairAttributes("TabNode",Se.getAttributeDefinitions()),be.attributeDefinitions.pairAttributes("BorderNode",Je.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 Se(this,t.data.json,!0),n=this.idMap.get(t.data.toNode);(n instanceof Oe||n instanceof Je||n instanceof $e)&&(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 Se||o instanceof Oe||o instanceof $e){o===this.getMaximizedTabset(o.getLayoutId())&&this.layouts.get(o.getLayoutId()).setMaximizedTabSet(void 0);const n=this.idMap.get(t.data.toNode);(n instanceof Oe||n instanceof Je||n instanceof $e)&&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 Se&&o.delete();break}case re.DELETE_TABSET:{const o=this.idMap.get(t.data.node);if(o instanceof Oe){const n=[...o.getChildren()];for(let i=0;i{u instanceof Se&&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 Oe)return r;if(r instanceof $e)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=nh.fromJson(t.borders,o));const n=t.subLayouts||t.popouts;if(n)for(const i in n){const a=n[i],l=vn.fromJson(a,o,i);o.layouts.set(i,l)}return o.mainLayout.setRootRow($e.fromJson(t.layout,o,o.mainLayout)),o.tidy(),r&&(o.adoptedFromModel=r,r.adoptedFromModel=void 0,o.visitNodes(i=>{if(i instanceof Se){const a=r.getNodeById(i.getId());a instanceof Se&&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"#"+yn()}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($e.getAttributeDefinitions().toTypescriptInterface("Row",be.attributeDefinitions)),t.push(Oe.getAttributeDefinitions().toTypescriptInterface("TabSet",be.attributeDefinitions)),t.push(Se.getAttributeDefinitions().toTypescriptInterface("Tab",be.attributeDefinitions)),t.push(Je.getAttributeDefinitions().toTypescriptInterface("Border",be.attributeDefinitions)),t.push(vn.getAttributeDefinitions().toTypescriptInterface("SubLayout",void 0)),t.join(` -`)}static createAttributeDefinitions(){const t=new si;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:Jo.Visible,label:"Visible"},{value:Jo.Always,label:"Always"},{value:Jo.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",Vr).setType(te.NUMBER),t.add("tabMaxHeight",Vr).setType(te.NUMBER),t.add("tabSetMaxWidth",Vr).setType(te.NUMBER),t.add("tabSetMaxHeight",Vr).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",Vr).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}},M(be,"MAIN_LAYOUT_ID","__main_layout_id__"),M(be,"attributeDefinitions",be.createAttributeDefinitions()),M(be,"attributePairingDone",!1),be),kt,Se=(kt=class extends js{constructor(r,o,n=!0){super(r);M(this,"tabRect",he.empty());M(this,"renderedName");M(this,"extra");M(this,"visible");M(this,"rendered");M(this,"moveableElement");M(this,"tabStamp");M(this,"scrollTop");M(this,"scrollLeft");this.extra={},this.moveableElement=null,this.tabStamp=null,this.rendered=!1,this.visible=!1,kt.attributeDefinitions.fromJson(o,this.attributes),n===!0&&r.addNode(this)}static fromJson(r,o,n=!0){return new kt(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()!==at.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 kt.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 kt&&(n.deleteSubLayout(),n.fireEvent("close",{}))},0)}}updateAttrs(r){kt.attributeDefinitions.update(r,this.attributes)}getAttributeDefinitions(){return kt.attributeDefinitions}setBorderWidth(r){this.attributes.borderWidth=r}setBorderHeight(r){this.attributes.borderHeight=r}static getAttributeDefinitions(){return at.ensureAttributePairing(),kt.attributeDefinitions}static createAttributeDefinitions(){const r=new si;return r.add("type",kt.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}},M(wt,"TYPE","border"),M(wt,"attributeDefinitions",wt.createAttributeDefinitions()),wt),gh=class Vv{constructor(t){M(this,"borders");M(this,"borderMap");this.borders=[],this.borderMap=new Map}static fromJson(t,r){const o=new Vv(r);o.borders=t.map(n=>Je.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}}},Jo=function(e){return e[e.Visible=1]="Visible",e[e.Always=2]="Always",e[e.Selected=3]="Selected",e}({}),Gt,xn=(Gt=class{constructor(t,r,o,n,i){M(this,"_layoutId");M(this,"_type");M(this,"_rect");M(this,"_path");M(this,"attributes");M(this,"_controller");M(this,"_rootRow");M(this,"_maximizedTabSet");M(this,"_activeTabSet");M(this,"_toExportRectFunction");this.attributes={},Gt.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 Gt.attributeDefinitions}updateAttrs(t){Gt.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 Gt.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 he(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 Gt.attributeDefinitions.toJson(t,this.attributes),t}static fromJson(t,r,o){const n=r.getLayouts().size,i=t.rect?he.fromJson(t.rect):new he(50+50*n,50+50*n,600,400);i.snap(1);const a=o===lt.MAIN_LAYOUT_ID?0:r.getNextSubLayoutId(),l=new Gt(o,a,t.type||"window",i,t);return l.setRootRow($e.fromJson(t.layout,r,l)),l}},M(Gt,"attributeDefinitions",Gt.createAttributeDefinitions()),Gt),Vr=99999,be,lt=(be=class{constructor(){M(this,"attributes");M(this,"layouts");M(this,"borders");M(this,"changeListeners");M(this,"idMap");M(this,"mainLayout");M(this,"adoptedFromModel");M(this,"splitterSize");M(this,"onAllowDrop");M(this,"onCreateTabSet");M(this,"nextSubLayoutId");this.attributes={},this.layouts=new Map,this.borders=new gh(this),this.idMap=new Map,this.changeListeners=[],this.nextSubLayoutId=1,this.mainLayout=new xn(be.MAIN_LAYOUT_ID,0,"window",he.empty()),this.layouts.set(be.MAIN_LAYOUT_ID,this.mainLayout),this.splitterSize=8}static ensureAttributePairing(){be.attributePairingDone||(be.attributePairingDone=!0,be.attributeDefinitions.pairAttributes("RowNode",$e.getAttributeDefinitions()),be.attributeDefinitions.pairAttributes("TabSetNode",Oe.getAttributeDefinitions()),be.attributeDefinitions.pairAttributes("TabNode",Se.getAttributeDefinitions()),be.attributeDefinitions.pairAttributes("BorderNode",Je.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 Se(this,t.data.json,!0),n=this.idMap.get(t.data.toNode);(n instanceof Oe||n instanceof Je||n instanceof $e)&&(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 Se||o instanceof Oe||o instanceof $e){o===this.getMaximizedTabset(o.getLayoutId())&&this.layouts.get(o.getLayoutId()).setMaximizedTabSet(void 0);const n=this.idMap.get(t.data.toNode);(n instanceof Oe||n instanceof Je||n instanceof $e)&&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 Se&&o.delete();break}case re.DELETE_TABSET:{const o=this.idMap.get(t.data.node);if(o instanceof Oe){const n=[...o.getChildren()];for(let i=0;i{u instanceof Se&&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 Oe)return r;if(r instanceof $e)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=gh.fromJson(t.borders,o));const n=t.subLayouts||t.popouts;if(n)for(const i in n){const a=n[i],l=xn.fromJson(a,o,i);o.layouts.set(i,l)}return o.mainLayout.setRootRow($e.fromJson(t.layout,o,o.mainLayout)),o.tidy(),r&&(o.adoptedFromModel=r,r.adoptedFromModel=void 0,o.visitNodes(i=>{if(i instanceof Se){const a=r.getNodeById(i.getId());a instanceof Se&&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"#"+wn()}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($e.getAttributeDefinitions().toTypescriptInterface("Row",be.attributeDefinitions)),t.push(Oe.getAttributeDefinitions().toTypescriptInterface("TabSet",be.attributeDefinitions)),t.push(Se.getAttributeDefinitions().toTypescriptInterface("Tab",be.attributeDefinitions)),t.push(Je.getAttributeDefinitions().toTypescriptInterface("Border",be.attributeDefinitions)),t.push(xn.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:Jo.Visible,label:"Visible"},{value:Jo.Always,label:"Always"},{value:Jo.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",Vr).setType(te.NUMBER),t.add("tabMaxHeight",Vr).setType(te.NUMBER),t.add("tabSetMaxWidth",Vr).setType(te.NUMBER),t.add("tabSetMaxHeight",Vr).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",Vr).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}},M(be,"MAIN_LAYOUT_ID","__main_layout_id__"),M(be,"attributeDefinitions",be.createAttributeDefinitions()),M(be,"attributePairingDone",!1),be),kt,Se=(kt=class extends Us{constructor(r,o,n=!0){super(r);M(this,"tabRect",he.empty());M(this,"renderedName");M(this,"extra");M(this,"visible");M(this,"rendered");M(this,"moveableElement");M(this,"tabStamp");M(this,"scrollTop");M(this,"scrollLeft");this.extra={},this.moveableElement=null,this.tabStamp=null,this.rendered=!1,this.visible=!1,kt.attributeDefinitions.fromJson(o,this.attributes),n===!0&&r.addNode(this)}static fromJson(r,o,n=!0){return new kt(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 kt.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 kt&&(n.deleteSubLayout(),n.fireEvent("close",{}))},0)}}updateAttrs(r){kt.attributeDefinitions.update(r,this.attributes)}getAttributeDefinitions(){return kt.attributeDefinitions}setBorderWidth(r){this.attributes.borderWidth=r}setBorderHeight(r){this.attributes.borderHeight=r}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("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}},M(kt,"TYPE","tab"),M(kt,"attributeDefinitions",kt.createAttributeDefinitions()),kt),no={width:"1em",height:"1em",display:"flex",alignItems:"center"},yl=()=>s.jsxs("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:no,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"})]});yl.displayName="CloseIcon";var Dv=()=>s.jsxs("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:no,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"})]});Dv.displayName="PinIcon";var Iv=()=>s.jsxs("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:no,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"})]});Iv.displayName="MaximizeIcon";var jv=()=>s.jsxs("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:no,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"})]});jv.displayName="OverflowIcon";var Pv=()=>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"})});Pv.displayName="EdgeIcon";var Bu=()=>s.jsxs("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:no,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"})]});Bu.displayName="PopoutIcon";var Bv=()=>s.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 -960 960 960",style:no,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"})});Bv.displayName="PopoutFloatIcon";var zv=()=>s.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",style:no,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"})});zv.displayName="GripIcon";var Fv=()=>s.jsxs("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:no,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"})]});Fv.displayName="RestoreIcon";var Uv=()=>s.jsx("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:no,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"})});Uv.displayName="AsterickIcon";var Wv=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"}})};Wv.displayName="Overlay";var Ae=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}({}),da=e=>{const{controller:t,tabNode:r}=e,o=t.getClassName,n=o(U.FLEXLAYOUT__TAB_BUTTON_STAMP),i=cf(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]})};da.displayName="TabButtonStamp";var x0=500;function Ps(e){return typeof e.getBoundingClientRect=="function"}function Vv(e){return e.container?e.container:Ps(e.anchor)?e.anchor.ownerDocument.body:document.body}function y0(e){if(Ps(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 _0(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=Vv(e),u=m.useRef(null),f=m.useRef(null),d=m.useRef({buffer:"",timer:void 0});m.useEffect(()=>()=>{d.current.timer&&clearTimeout(d.current.timer)},[]);const p=m.useCallback(b=>{b.disabled||((b.onSelect??o)?.(b),n())},[o,n]);m.useEffect(()=>{(f.current?.querySelector('[role="menuitem"]:not([aria-disabled="true"])')??f.current)?.focus();const b=e.returnFocusTo??(Ps(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(f.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=d.current;y.timer&&clearTimeout(y.timer),y.buffer+=b.key.toLowerCase(),y.timer=setTimeout(()=>{y.buffer=""},x0);const T=[...y.buffer].every(C=>C===y.buffer[0]),L=T?y.buffer[0]:y.buffer,B=T?_+1:Math.max(_,0);for(let C=0;C({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),E=s.jsx("div",{ref:u,className:l(U.FLEXLAYOUT__POPUP_MENU_CONTAINER),style:_0(y0(t),c.getBoundingClientRect()),children:s.jsx("div",{ref:f,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 Pr.createPortal(E,c)};function w0(e){const t=Vv(e),r=Ps(e.anchor)?e.anchor.getBoundingClientRect():e.anchor,o=t.ownerDocument.createElement("div");t.appendChild(o);const n=ii(o);let i=!1;const a=()=>{i||(i=!0,n.unmount(),o.remove(),e.onClose())};return n.render(s.jsx(Hv,{...e,anchor:r,container:t,onClose:a})),a}function $v(e,t,r,o,n,i){const a=n.getClassName,l=r.map(u=>({key:u.node.getId()}));n.showOverlayOnAllWindows(!0);const c=(u,f,d)=>{const p=r[f];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"+f,onClick:x=>{d.select(),x.stopPropagation()},draggable:!0,onDragStart:x=>{x.stopPropagation(),n.getDragDropManager().setDragNode(x.nativeEvent,p.node),setTimeout(()=>d.close(),0)},onDragEnd:()=>n.getDragDropManager().onDragEnded(),title:p.node.getHelpText(),children:s.jsx(da,{tabNode:p.node,controller:n})},u.key)};return w0({anchor:e,container:n.getRootDiv()??void 0,classNameMapper:a,returnFocusTo:e,title:n.i18nName(Ae.Overflow_Menu_Tooltip),items:l,onSelect:u=>{const f=l.indexOf(u);f>=0&&o(r[f])},renderItem:c,onClose:()=>{n.showOverlayOnAllWindows(!1),i?.()}})}Hv.displayName="PopupMenu";var Yv=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,f=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=Y=>{Y.target!==a.current&&t.setEditingTab(void 0)};return F.addEventListener("pointerdown",ne),()=>F.removeEventListener("pointerdown",ne)}},[u,t]);const d=F=>{r.isEnableDrag()?(F.stopPropagation(),t.getDragDropManager().setDragNode(F.nativeEvent,r)):F.preventDefault()},p=F=>{t.getDragDropManager().onDragEnded()},g=F=>{ua(F)&&t.auxMouseClick(r,F)},x=F=>{t.showContextMenu(r,F)},w=()=>{r.isSelected()||t.doAction(re.selectTab(r.getId()))},E=F=>{const ne=i.current?.closest('[role="tablist"]');if(ne){const Y=Array.from(ne.querySelectorAll('[role="tab"]'));Y[Y.indexOf(i.current)+F]?.focus()}},b=()=>{const F=i.current.ownerDocument,ne=()=>Cv(F.getElementById(St("flexlayout-tab-",r.getId())));o?ne():(w(),requestAnimationFrame(ne))},h=F=>{u||(Jr(F,c.focusTabToggle)?(b(),F.preventDefault()):F.key==="Enter"||F.key===" "?(o?b():w(),F.preventDefault()):(F.key==="ArrowLeft"||F.key==="ArrowUp")&&!ca(F)?(E(-1),F.preventDefault()):(F.key==="ArrowRight"||F.key==="ArrowDown")&&!ca(F)?(E(1),F.preventDefault()):Jr(F,c.closeTab)&&r.isCloseable()?(E(1),t.doAction(re.deleteTab(r.getId())),F.preventDefault()):Jr(F,c.renameTab)&&r.isEnableRename()&&(_(),F.preventDefault()))},v=F=>{r.isEnableRename()&&(_(),F.stopPropagation())},_=()=>{t.setEditingTab(r)},y=()=>{const F=r.getCloseType();return!!(o||F===Jo.Always||F===Jo.Visible&&window.matchMedia&&window.matchMedia("(hover: hover) and (pointer: fine)").matches)},T=F=>{y()&&(t.doAction(re.deleteTab(r.getId())),F.stopPropagation())},L=F=>{F.stopPropagation()},B=F=>{F.stopPropagation()},C=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())},I=t.getClassName,z=r.getParent(),S=z.isEnableSingleTabStretch()&&z.getChildren().length===1,k=S?U.FLEXLAYOUT__TAB_BUTTON_STRETCH:U.FLEXLAYOUT__TAB_BUTTON;let j=I(k);j+=" "+I(k+"_"+z.getTabLocation()),S||(o?j+=" "+I(k+"--selected"):j+=" "+I(k+"--unselected")),r.isPinned()&&(j+=" "+I(k+"--pinned")),r.getClassName()!==void 0&&(j+=" "+r.getClassName());const A=cf(t,r),R=o||z.getSelectedNode()===void 0&&z.getChildren()[0]===r,O=[So(c.focusTabToggle),r.isCloseable()?So(c.closeTab):void 0,r.isEnableRename()?So(c.renameTab):void 0].filter(Boolean).join(" ")||void 0;let D=A.content?s.jsx("div",{className:I(U.FLEXLAYOUT__TAB_BUTTON_CONTENT),children:A.content}):null;const V=A.leading?s.jsx("div",{className:I(U.FLEXLAYOUT__TAB_BUTTON_LEADING),children:A.leading}):null;if(u&&(D=s.jsx("input",{ref:a,className:I(U.FLEXLAYOUT__TAB_BUTTON_TEXTBOX),"data-layout-path":n+"/textbox",type:"text","aria-label":t.i18nName(Ae.Rename_Tab),autoFocus:!0,defaultValue:r.getName(),onKeyDown:C,onPointerDown:B})),r.isPinned()){const F=t.i18nName(Ae.Pinned_Tab);A.buttons.push(s.jsx("div",{"data-layout-path":n+"/button/pin",title:F,"aria-hidden":"true",className:I(U.FLEXLAYOUT__TAB_BUTTON_PIN),children:typeof l.pin=="function"?l.pin(r):l.pin},"pin"))}if(r.isCloseable()&&!S){const F=t.i18nName(Ae.Close_Tab);A.buttons.push(s.jsx("div",{"data-layout-path":n+"/button/close",title:F,"aria-hidden":"true",className:I(U.FLEXLAYOUT__TAB_BUTTON_TRAILING),onPointerDown:L,onClick:T,children:typeof l.close=="function"?l.close(r):l.close},"close"))}return s.jsxs("div",{ref:f,id:St("flexlayout-tabbutton-",r.getId()),role:u?void 0:"tab","aria-selected":u?void 0:o,"aria-controls":u?void 0:St("flexlayout-tab-",r.getId()),"aria-label":u?void 0:r.isPinned()?A.name+" ("+t.i18nName(Ae.Pinned_Tab)+")":A.name,"aria-keyshortcuts":u?void 0:O,tabIndex:u?-1:R?0:-1,onKeyDown:h,"data-layout-path":n,className:j,onClick:w,onAuxClick:g,onContextMenu:x,title:r.getHelpText(),draggable:!0,onDragStart:d,onDragEnd:p,onDoubleClick:v,children:[V,D,A.buttons]})};Yv.displayName="TabButton";var Xv=(e,t,r,o,n,i,a)=>{const[l,c]=m.useState([]),[u,f]=m.useState(!1),[d,p]=m.useState(!1),g=m.useRef(!1),x=m.useRef(void 0),w=m.useRef([]),E=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(K=>{r===ye.HORZ?o.current.scrollLeft=K:o.current.scrollTop=K},[r,o]),v=m.useCallback(K=>r===ye.HORZ?K.scrollLeft:K.scrollTop,[r]),_=m.useCallback(K=>r===ye.HORZ?K.clientWidth:K.clientHeight,[r]),y=m.useCallback(K=>r===ye.HORZ?K.scrollWidth:K.scrollHeight,[r]),T=m.useCallback(K=>r===ye.HORZ?K.width:K.height,[r]),L=m.useCallback(K=>r===ye.HORZ?K.x:K.y,[r]),B=m.useCallback(K=>r===ye.HORZ?K.right:K.bottom,[r]),C=m.useCallback(()=>{const K=[];if(o.current){const Z=o.current,$=Z.getBoundingClientRect(),Q=L($)-1,oe=B($)+1,le=Z.firstElementChild;let Le=0;Array.from(le.children).forEach(ke=>{const ve=ke.getBoundingClientRect();ke.classList.contains(a)&&((L(ve)oe)&&K.push(Le),Le++)})}return K},[a,o,L,B]),I=m.useCallback(()=>{if(o.current&&n.current){const K=o.current,Z=n.current,$=_(K),Q=y(K),oe=v(K);if(Q>$&&Q>0){let le=$*$/Q,Le=0;le<20&&(Le=20-le,le=20);const ke=oe*($-Le)/Q;r===ye.HORZ?(Z.style.width=le+"px",Z.style.left=ke+"px"):(Z.style.height=le+"px",Z.style.top=ke+"px"),Z.style.display="block"}else Z.style.display="none";r===ye.HORZ?Z.style.bottom="0px":Z.style.right="0px"}},[r,o,n,_,y,v]),z=m.useCallback((K=!1)=>{const Z=C(),$=Z.length>0;$!==u&&f($),K?c(Z):x.current===void 0&&(x.current=setTimeout(()=>{const Q=C();k0(Q,w.current)||c(Q),x.current=void 0},100))},[C,u]),S=m.useCallback(()=>{const K=t.getSelectedNode();if(K&&o.current){const Z=e.getBoundingClientRect(o.current),$=o.current.ownerDocument.getElementById(St("flexlayout-tabbutton-",K.getId()));if(!$)return;const Q=e.getBoundingClientRect($);let oe=L(Z)-L(Q);oe>0||T(Q)>T(Z)?(h(v(o.current)-oe),b.current=!0):(oe=B(Q)-B(Z),oe>0&&(h(v(o.current)+oe),b.current=!0))}},[t,e,o,L,B,T,v,h]),k=m.useCallback(()=>{if(o.current){const K=o.current;let Z=0;for(const Q of Array.from(K.children))Z+=_(Q);const $=Z+(d?10:0)>_(o.current);$!==d&&p($)}},[o,d,_]),j=m.useCallback(()=>{b.current||(g.current=!0),b.current=!1,I(),z()},[I,z]),A=m.useCallback((K,Z)=>{if(o.current&&n.current){const $=o.current,Q=n.current,oe=_($),le=y($),Le=_(Q),ke=$.getBoundingClientRect();let ve;if(r===ye.HORZ?ve=K-ke.x-E.current:ve=Z-ke.y-E.current,ve=Math.max(0,Math.min(le-Le,ve)),oe>0){const Dt=ve*le/oe;h(Dt)}}},[o,n,r,_,y,h]),R=m.useCallback(()=>{},[]),O=m.useCallback(()=>{},[]),D=m.useCallback(K=>{K.stopPropagation(),n.current.setPointerCapture(K.pointerId);const Z=n.current.getBoundingClientRect();r===ye.HORZ?E.current=K.clientX-Z.x:E.current=K.clientY-Z.y,Ql(K.currentTarget.ownerDocument,K,A,R,O)},[n,r,A,R,O]),V=m.useCallback(K=>{if(o.current){if(t.getChildren().length===0)return;let Z;if(Math.abs(K.deltaY)>0){Z=-K.deltaY,K.deltaMode===1&&(Z*=40);const $=v(o.current)-Z,Q=y(o.current)-_(o.current);h(Math.max(0,Math.min(Q,$))),K.stopPropagation()}}},[t,o,v,y,_,h]),F=m.useCallback(K=>{K.preventDefault()},[]),ne=t.getId(),Y=t.getSelectedNode();return m.useLayoutEffect(()=>{o.current&&h(0)},[ne,o,h]),m.useLayoutEffect(()=>{g.current=!1},[Y]),m.useLayoutEffect(()=>{k(),g.current===!1&&S(),I(),z(!0),requestAnimationFrame(()=>{z()})},[k,S,I,z,r,Y]),m.useLayoutEffect(()=>{const K=o.current;if(!K)return;const Z=new K.ownerDocument.defaultView.ResizeObserver(()=>{g.current=!1,k(),S(),I(),z()});return Z.observe(K),()=>Z.disconnect()},[k,S,I,z,o]),m.useEffect(()=>{if(t instanceof Oe&&t.isEnableTabWrap())return;const K=i.current;return K?.addEventListener("wheel",F,{passive:!1}),()=>{K?.removeEventListener("wheel",F)}}),{userControlledPositionRef:g,onScroll:j,onScrollPointerDown:D,hiddenTabs:l,onMouseWheel:V,isDockStickyButtons:d,isShowHiddenTabs:u}};function k0(e,t){return e.length===t.length&&e.every((r,o)=>r===t[o])}var Gv=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),f=m.useRef(null),[d,p]=m.useState(!1),g=m.useRef(null),x=r.getIcons();m.useEffect(()=>()=>g.current?.(),[]);const{userControlledPositionRef:w,onScroll:E,onScrollPointerDown:b,hiddenTabs:h,onMouseWheel:v,isDockStickyButtons:_,isShowHiddenTabs:y}=Xv(r,t,ye.HORZ,a,i,n,r.getClassName(U.FLEXLAYOUT__TAB_BUTTON)),T=m.useCallback(X=>{o.current=X,r.registerMeasurable(t,"tabset",X)},[r,t]),L=m.useCallback(X=>{n.current=X,r.registerMeasurable(t,"tabstrip",X)},[r,t]),B=m.useCallback(X=>{l.current=X,r.registerMeasurable(t,"tabsetcontent",X)},[r,t]),C=X=>{const fe=r.getShowOverflowMenu(),pe=h.map(ge=>({index:ge,node:t.getChildren()[ge]}));if(fe!==void 0)fe(t,X,pe,I);else{const ge=u.current;p(!0),g.current=$v(ge,t,pe,I,r,()=>{p(!1),g.current=null})}X.stopPropagation()},I=X=>{r.doAction(re.selectTab(X.node.getId())),w.current=!1},z=X=>{r.getEditingTab()?X.preventDefault():t.isEnableDrag()?(X.stopPropagation(),r.getDragDropManager().setDragNode(X.nativeEvent,t)):X.preventDefault()},S=X=>{!ua(X)&&!t.isActive()&&r.doAction(re.setActiveTabset(t.getId(),r.getLayoutId()))},k=X=>{ua(X)&&r.auxMouseClick(t,X)},j=X=>{r.showContextMenu(t,X)},A=X=>{X.stopPropagation()},R=X=>{t.canMaximize()&&r.maximize(t),X.stopPropagation()},O=X=>{r.doAction(re.deleteTabset(t.getId())),X.stopPropagation()},D=X=>{r.doAction(re.deleteTab(t.getChildren()[0].getId())),X.stopPropagation()},V=X=>{K!==void 0&&r.doAction(re.popoutTab(K.getId(),"window")),X.stopPropagation()},F=X=>{K!==void 0&&r.doAction(re.popoutTab(K.getId(),"float")),X.stopPropagation()},ne=X=>{t.canMaximize()&&r.maximize(t)},Y=r.getClassName,K=t.getSelectedNode(),Z=t.getPath(),$=()=>{const X=[];let fe=!1;if(t.isEnableTabStrip()){const pe=t.isEnableSingleTabStretch()&&t.getChildren().length===1;for(let ge=0;ge{let X,fe=[],pe=[];const ge={leading:X,stickyButtons:fe,buttons:pe,overflowPosition:void 0};r.customizeTabSet(t,ge),X=ge.leading,fe=ge.stickyButtons,pe=ge.buttons;const Ce=t.isEnableSingleTabStretch()&&t.getChildren().length===1;let et=Ce&&t.getChildren()[0].isCloseable()||t.isCloseable();et=et&&t.isEnableCloseButton(),ge.overflowPosition===void 0&&(ge.overflowPosition=fe.length);let ze;if(fe.length>0&&(!t.isEnableTabWrap()&&(_||Ce)?pe=[...fe,...pe]:ze=s.jsx("div",{ref:f,onPointerDown:A,onDragStart:xe=>{xe.preventDefault()},className:Y(U.FLEXLAYOUT__TAB_TOOLBAR_STICKY_BUTTONS_CONTAINER),children:fe},"sticky_buttons_container")),!t.isEnableTabWrap()&&y){const xe=r.i18nName(Ae.Overflow_Menu_Tooltip);let Fe;if(typeof x.more=="function"){const Ze=h.map(Ue=>({index:Ue,node:t.getChildren()[Ue]}));Fe=x.more(t,Ze)}else Fe=s.jsxs(s.Fragment,{children:[x.more,s.jsx("div",{className:Y(U.FLEXLAYOUT__TAB_BUTTON_OVERFLOW_COUNT),children:h.length>0?h.length:""})]});pe.splice(Math.min(ge.overflowPosition,pe.length),0,s.jsx("button",{tabIndex:0,"data-layout-path":Z+"/button/overflow","aria-haspopup":"menu","aria-expanded":d,"aria-label":xe,ref:u,className:Y(U.FLEXLAYOUT__TAB_TOOLBAR_BUTTON)+" "+Y(U.FLEXLAYOUT__TAB_BUTTON_OVERFLOW),title:xe,onClick:C,onPointerDown:A,children:Fe},"overflowbutton"))}if(K!==void 0&&!K.isPinned()){if(K.isEnablePopoutFloatIcon()){const xe=r.i18nName(Ae.Popout_Tab_Float);pe.push(s.jsx("button",{tabIndex:0,"data-layout-path":Z+"/button/popout-float",title:xe,"aria-label":xe,className:Y(U.FLEXLAYOUT__TAB_TOOLBAR_BUTTON)+" "+Y(U.FLEXLAYOUT__TAB_TOOLBAR_BUTTON_FLOAT),onClick:F,onPointerDown:A,children:typeof x.popoutFloat=="function"?x.popoutFloat(K):x.popoutFloat},"popout-float"))}if(r.isSupportsPopout()&&K.isAllowedInWindow()&&K.isEnablePopoutIcon()){const xe=r.i18nName(Ae.Popout_Tab);pe.push(s.jsx("button",{tabIndex:0,"data-layout-path":Z+"/button/popout",title:xe,"aria-label":xe,className:Y(U.FLEXLAYOUT__TAB_TOOLBAR_BUTTON)+" "+Y(U.FLEXLAYOUT__TAB_TOOLBAR_BUTTON_FLOAT),onClick:V,onPointerDown:A,children:typeof x.popout=="function"?x.popout(K):x.popout},"popout"))}}if(t.canMaximize()){const xe=r.i18nName(Ae.Restore),Fe=r.i18nName(Ae.Maximize);pe.push(s.jsx("button",{tabIndex:0,"data-layout-path":Z+"/button/max",title:t.isMaximized()?xe:Fe,"aria-label":t.isMaximized()?xe:Fe,"aria-pressed":t.isMaximized(),className:Y(U.FLEXLAYOUT__TAB_TOOLBAR_BUTTON)+" "+Y(U.FLEXLAYOUT__TAB_TOOLBAR_BUTTON_+(t.isMaximized()?"max":"min")),onClick:R,onPointerDown:A,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()&&et){const xe=Ce?r.i18nName(Ae.Close_Tab):r.i18nName(Ae.Close_Tabset);pe.push(s.jsx("button",{tabIndex:0,"data-layout-path":Z+"/button/close",title:xe,"aria-label":xe,className:Y(U.FLEXLAYOUT__TAB_TOOLBAR_BUTTON)+" "+Y(U.FLEXLAYOUT__TAB_TOOLBAR_BUTTON_CLOSE),onClick:Ce?D:O,onPointerDown:A,children:typeof x.closeTabset=="function"?x.closeTabset(t):x.closeTabset},"close"))}if(t.isActive()&&t.isEnableActiveIcon()){const xe=r.i18nName(Ae.Active_Tabset);pe.push(s.jsx("div",{"data-layout-path":Z+"/button/active",title:xe,"aria-hidden":"true",className:Y(U.FLEXLAYOUT__TAB_TOOLBAR_ICON),children:typeof x.activeTabset=="function"?x.activeTabset(t):x.activeTabset},"active"))}const _e=s.jsx("div",{ref:c,className:Y(U.FLEXLAYOUT__TAB_TOOLBAR),onPointerDown:A,onDragStart:xe=>{xe.preventDefault()},children:pe},"buttonbar");return{leading:X,buttonbar:_e,stickyBar:ze}},oe=(X,fe,pe,ge)=>{let Ce;const et=r.getKeyMap(),ze=[So(et.focusNextTabset),So(et.focusPreviousTabset)].filter(Boolean).join(" ")||void 0,_e=r.getEditingTab()?.getParent()===t,xe=_e?void 0:"tablist";let Fe=Y(U.FLEXLAYOUT__TABSET_TABBAR_OUTER);t.getClassNameTabStrip()!==void 0&&(Fe+=" "+t.getClassNameTabStrip()),Fe+=" "+U.FLEXLAYOUT__TABSET_TABBAR_OUTER_+t.getTabLocation(),t.isActive()&&(Fe+=" "+Y(U.FLEXLAYOUT__TABSET_SELECTED)),t.isMaximized()&&(Fe+=" "+Y(U.FLEXLAYOUT__TABSET_MAXIMIZED));const Ze=t.isEnableSingleTabStretch()&&t.getChildren().length===1;if(Ze){const Br=t.getChildren()[0];Br.getTabSetClassName()!==void 0&&(Fe+=" "+Br.getTabSetClassName())}let Ue;if(fe&&(Ue=s.jsx("div",{className:Y(U.FLEXLAYOUT__TABSET_LEADING),children:fe})),t.isEnableTabWrap())t.isEnableTabStrip()&&(Ce=s.jsxs("div",{className:Fe,style:{flexWrap:"wrap",gap:"1px",marginTop:"2px"},ref:L,"data-layout-path":Z+"/tabstrip",onPointerDown:S,onDoubleClick:ne,onContextMenu:j,onClick:k,onAuxClick:k,draggable:!0,onDragStart:z,children:[Ue,s.jsx("div",{role:xe,"aria-orientation":_e?void 0:"horizontal","aria-label":_e?void 0:t.getName(),"aria-keyshortcuts":_e?void 0:ze,style:{display:"contents"},children:X}),ge,s.jsx("div",{style:{flexGrow:1,display:"flex",justifyContent:"flex-end"},children:pe})]}));else if(t.isEnableTabStrip()){let Br;t.isEnableTabScrollbar()&&(Br=s.jsx("div",{ref:i,"aria-hidden":"true",className:Y(U.FLEXLAYOUT__MINI_SCROLLBAR),onPointerDown:b})),Ce=s.jsxs("div",{className:Fe,ref:L,"data-layout-path":Z+"/tabstrip",onPointerDown:S,onDoubleClick:ne,onContextMenu:j,onClick:k,onAuxClick:k,draggable:!0,onWheel:v,onDragStart:z,children:[Ue,s.jsxs("div",{className:Y(U.FLEXLAYOUT__MINI_SCROLLBAR_CONTAINER),children:[s.jsxs("div",{ref:a,className:Y(U.FLEXLAYOUT__TABSET_TABBAR_INNER)+" "+Y(U.FLEXLAYOUT__TABSET_TABBAR_INNER_+t.getTabLocation()),style:{overflowX:"auto",overflowY:"hidden"},onScroll:E,children:[s.jsx("div",{style:{width:Ze?"100%":"none"},role:xe,"aria-orientation":_e?void 0:"horizontal","aria-label":_e?void 0:t.getName(),"aria-keyshortcuts":_e?void 0:ze,className:Y(U.FLEXLAYOUT__TABSET_TABBAR_INNER_TAB_CONTAINER)+" "+Y(U.FLEXLAYOUT__TABSET_TABBAR_INNER_TAB_CONTAINER_+t.getTabLocation()),children:X}),ge]}),Br]}),pe]})}return Ce},le=X=>{let fe;if(t.getChildren().length===0){const ge=r.getTabSetPlaceHolderCallback();ge&&(fe=ge(t))}let pe=s.jsx("div",{ref:B,className:Y(U.FLEXLAYOUT__TABSET_CONTENT),children:fe});return t.getTabLocation()==="top"?pe=s.jsxs(s.Fragment,{children:[X,pe]}):pe=s.jsxs(s.Fragment,{children:[pe,X]}),pe},Le=$(),{leading:ke,buttonbar:ve,stickyBar:Dt}=Q(),J=le(oe(Le,ke,ve,Dt)),se={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()&&(se.display="none");const ce=s.jsx("div",{ref:T,className:Y(U.FLEXLAYOUT__TABSET_CONTAINER),style:se,children:s.jsx("div",{className:Y(U.FLEXLAYOUT__TABSET),"data-layout-path":Z,children:J})});return t.isMaximized()&&r.getMainElement()?Pr.createPortal(s.jsx("div",{style:{position:"absolute",display:"flex",top:0,left:0,bottom:0,right:0},children:ce}),r.getMainElement()):ce};Gv.displayName="TabSet";var Fi=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),f=m.useRef(0),d=m.useRef(0),p=m.useRef({initialSizes:[],sum:0,startPosition:0}),g=m.useCallback(S=>{S.preventDefault(),S.stopImmediatePropagation()},[]);m.useEffect(()=>{const S=i.current,k=a.current;return S?.addEventListener("touchstart",g,{passive:!1}),k?.addEventListener("touchstart",g,{passive:!1}),()=>{S?.removeEventListener("touchstart",g),k?.removeEventListener("touchstart",g)}},[g]);const x=S=>{S.stopPropagation(),r instanceof $e&&(p.current=r.getSplitterInitials(o)),vl(!1,t.getCurrentDocument()),Ql(S.currentTarget.ownerDocument,S,b,h,E),l.current=r instanceof Je?r.getSplitterBounds(!0):r.getSplitterBounds(o);const k=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 Je?" "+t.getClassName(U.FLEXLAYOUT__SPLITTER_BORDER):""),c.current.style.cursor=r.getOrientation()===ye.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 j=i.current.getBoundingClientRect(),A=new he(j.x-t.getDomRect().x,j.y-t.getDomRect().y,j.width,j.height);f.current=S.clientX-j.x,d.current=S.clientY-j.y,A.positionElement(c.current),k&&k.appendChild(c.current)},w=S=>{if(ca(S))return;let k=0;if(n?(S.key==="ArrowLeft"&&(k=-10),S.key==="ArrowRight"&&(k=10)):(S.key==="ArrowUp"&&(k=-10),S.key==="ArrowDown"&&(k=10)),k!==0)if(S.preventDefault(),r instanceof Je){const j=r.getLocation(),A=j===ee.BOTTOM||j===ee.RIGHT?-k:k,R=Math.max(r.getMinSize(),Math.min(r.getMaxSize(),r.getSize()+A));t.doAction(re.adjustBorderSplit(r.getId(),R))}else{const j=r.getSplitterInitials(o);if(j.sum<=0)return;const A=r.getSplitterBounds(o),R=Math.max(A[0],Math.min(A[1],j.startPosition+k)),O=r.calculateSplit(o,R,j.initialSizes,j.sum,j.startPosition);t.doAction(re.adjustWeights(r.getId(),O))}},E=()=>{const S=t.getRootDiv();S&&c.current&&S.removeChild(c.current),c.current=void 0,vl(!0,t.getCurrentDocument())},b=(S,k)=>{if(c.current){const j=t.getDomRect();if(!j)return;r.getOrientation()===ye.VERT?c.current.style.top=_(k-j.y-d.current)+"px":c.current.style.left=_(S-j.x-f.current)+"px",t.isRealtimeResize()&&v(!0)}},h=()=>{if(c.current){v(!1);const S=t.getRootDiv();S&&c.current&&S.removeChild(c.current),c.current=void 0}vl(!0,t.getCurrentDocument())},v=S=>{(()=>{if(c.current){let j;if(r.getOrientation()===ye.VERT?j=c.current.offsetTop:j=c.current.offsetLeft,r instanceof Je){const A=r.calculateSplit(r,j);t.doAction(re.adjustBorderSplit(r.getId(),A).setAdjusting(S))}else{const A=p.current;if(A.sum<=0)return;const R=r.calculateSplit(o,j,A.initialSizes,A.sum,A.startPosition);t.doAction(re.adjustWeights(r.getId(),R).setAdjusting(S))}}})()},_=S=>{const k=l.current;let j=S;return Sk[1]&&(j=k[1]),j},y=t.getClassName,T={cursor:n?"ew-resize":"ns-resize",flexDirection:n?"column":"row"};let L=y(U.FLEXLAYOUT__SPLITTER)+" "+y(U.FLEXLAYOUT__SPLITTER_+r.getOrientation().getName());r instanceof Je?L+=" "+y(U.FLEXLAYOUT__SPLITTER_BORDER):r.getModel().getMaximizedTabset(t.getLayoutId())!==void 0&&(T.display="none"),Lv()||(T["--splitter-active-size"]="30px");let B,C,I,z;if(r instanceof $e){const S=r.getRect(),k=r.getChildren()[o-1],j=n?S.width:S.height;if(k&&j>0){const A=k.getRect();B=Math.round((n?A.getRight()-S.x:A.getBottom()-S.y)/j*100),C=0,I=100,z=B+"%"}}else B=Math.round(r.getSize()),C=Math.round(r.getMinSize()),I=Math.round(r.getMaxSize()),z=B+"px";return s.jsx("div",{className:L,style:T,ref:i,role:"separator","aria-label":t.i18nName(Ae.Splitter),"aria-orientation":n?"vertical":"horizontal","aria-valuenow":B,"aria-valuemin":C,"aria-valuemax":I,"aria-valuetext":z,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)})})};Fi.displayName="Splitter";var uf=e=>{const{controller:t,rowNode:r}=e,o=m.useRef(null),n=r.getOrientation()===ye.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(Fi,{controller:t,node:r,index:l,horizontal:n},"splitter"+l)),u instanceof $e?a.push(s.jsx(uf,{controller:t,rowNode:u},u.getId())):u instanceof Oe&&a.push(s.jsx(Gv,{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})};uf.displayName="Row";var Kv=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 Oe&&(g.isActive()||t.doAction(re.setActiveTabset(g.getId(),t.getLayoutId())))},[o,t]),l=o.getParent(),c=t.getKeyMap().focusTabToggle,u=g=>{if(Jr(g,c)){const x=g.currentTarget.ownerDocument.getElementById(St("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 E=()=>{o.saveScrollPosition()};g.addEventListener("scroll",E);const b=n.current;return b&&b.addEventListener("pointerdown",a),()=>{b&&b.removeEventListener("pointerdown",a),g.removeEventListener("scroll",E),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 f=t.getClassName;let d=null;if(r&&document.hidden&&o.isEnablePopoutOverlay()){const g={};l.getContentRect().styleWithPosition(g);let x=f(U.FLEXLAYOUT__TAB_OVERLAY);l instanceof Je&&l.isOverlay()&&(x+=" "+f(U.FLEXLAYOUT__TAB_OVERLAY_RAISED)),d=s.jsx("div",{style:g,className:x})}let p=f(U.FLEXLAYOUT__TAB);return l instanceof Je&&(p+=" "+f(U.FLEXLAYOUT__TAB_BORDER),p+=" "+f(U.FLEXLAYOUT__TAB_BORDER_+l.getLocation().getName()),l.isOverlay()&&(p+=" "+f(U.FLEXLAYOUT__TAB_BORDER_OVERLAY))),o.getContentClassName()!==void 0&&(p+=" "+o.getContentClassName()),s.jsxs(s.Fragment,{children:[d,s.jsx("div",{ref:n,id:St("flexlayout-tab-",o.getId()),role:"tabpanel","aria-labelledby":St("flexlayout-tabbutton-",o.getId()),"aria-keyshortcuts":So(c),tabIndex:-1,onKeyDown:c?u:void 0,className:p,"data-layout-path":o.getPath()})]})};Kv.displayName="Tab";var E0=class extends m.Component{constructor(t){super(t);M(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}},qv=m.memo(({controller:e,tabNode:t})=>{qv.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(fa,{...e.getProps(),layoutId:t.getSubLayoutId(),path:t.getPath()+o.getPath(),mainLayoutController:e.getMainController()}),";"]})}return s.jsx(E0,{message:e.i18nName(Ae.Error_rendering_component),retryText:e.i18nName(Ae.Error_rendering_component_retry),children:r})},T0);function T0(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 Ee,R0=(Ee=class{constructor(t){M(this,"_controller");M(this,"_dragEnterCount",0);M(this,"_dragging",!1);M(this,"_active",!1);M(this,"_dropInfo");M(this,"_outlineDiv");M(this,"_mainController");M(this,"setDragNode",(t,r)=>{if(Ee.dragState=new Ja(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 Oe){let o=!1,n=this._controller.i18nName(Ae.Move_Tabset);if(r.getChildren().length>0&&(n=this._controller.i18nName(Ae.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 Je&&l.getOrientation()===ye.HORZ,u=c?10:i,f=c?10:a;let d=!1;if(this._controller.getProps().onRenderDragRect){const p=s.jsx(da,{controller:this._controller,tabNode:r},r.getId()),g=this._controller.getProps().onRenderDragRect(p,r,void 0);g&&(this.setDragComponent(t,g,u,f),d=!0)}d||(v0()?this.setDragComponent(t,s.jsx(da,{tabNode:r,controller:this._controller}),u,f):t.dataTransfer.setDragImage(r.getTabStamp(),u,f))}}});M(this,"onDragEnterRaw",t=>{this._dragEnterCount++,this.updateActive(t)});M(this,"onDragLeaveRaw",t=>{this._dragEnterCount--,this.updateActive(t)});M(this,"onDragEnter",t=>{if(!Ee.dragState&&this._controller.getProps().onExternalDrag){const r=this._controller.getProps().onExternalDrag(t);if(r){const o=Se.fromJson(r.json,this._controller.getModel(),!1);Ee.dragState=new Ja(this._controller.getMainController(),"external",o,r.json,r.onDrop)}}if(this._mainController===Ee.dragState?.mainLayoutController&&!(Ee.dragState?.dockFloatToMain&&!this.isDockTarget())&&Ee.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 he(t.clientX-i.left,t.clientY-i.top,1,1).positionElement(this._outlineDiv)}});M(this,"onDragOver",t=>{if(this._mainController===Ee.dragState?.mainLayoutController&&!(Ee.dragState?.dockFloatToMain&&!this.isDockTarget())&&this._active){if(Ee.dragState?.dockFloatToMain){const i=t.target;if(i&&Ee.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)};Ee.dragState.dockFloatToMain||this._controller.checkForBorderToShow(o.x,o.y);const n=this._controller.getModel().findDropTargetNode(this._controller.getLayoutId(),Ee.dragState.dragNode,o.x,o.y,this.isExcludeCenter());if(n){if(Ee.dragState.dockFloatToMain&&(n.location===ee.CENTER||!(n.node instanceof Oe)&&!(n.node instanceof $e)))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")}}});M(this,"onDragLeave",t=>{if(this._mainController===Ee.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()}});M(this,"onDrop",t=>{if(this._mainController===Ee.dragState?.mainLayoutController&&!(Ee.dragState?.dockFloatToMain&&!this.isDockTarget())){if(this._active){t.preventDefault();const r=Ee.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(),Ee.dragState=void 0}this._dragEnterCount=0}});this._controller=t,this._mainController=t.getMainController()}isDockTarget(){return this._controller.getLayout().getLayoutId()!==Ee.dragState?.floatLayoutId}isExcludeCenter(){if(Ee.dragState?.dockFloatToMain)return!0;const t=Ee.dragState?.dragNode;return t instanceof Oe?!t.isEnableClose()||t.getPinnedRunLength()>0:!1}addTabWithDragAndDrop(t,r,o){const n=Se.fromJson(r,this._controller.getModel(),!1);Ee.dragState=new Ja(this._controller.getMainController(),"add",n,r,o)}onDragEnded(){this.clearDragMain(),Ee.dragState=void 0}moveTabWithDragAndDrop(t,r){this.setDragNode(t,r)}startDockLayoutDrag(t,r,o){const n=r.getRootRow();Ee.dragState=new Ja(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 Se&&i++},0);const a=this._controller.i18nName(Ae.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=ii(l);Pr.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=Ee.dragState?.dockFloatToMain===!0;let n,i;for(let a=r.length-1;a>=0;a--){const l=r[a];if(o&&l.getLayoutId()===Ee.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=Nv(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}},M(Ee,"dragState"),Ee),Ja=class{constructor(e,t,r,o,n,i=!1,a=void 0,l=void 0){M(this,"mainLayoutController");M(this,"dragSource");M(this,"dragNode");M(this,"dragJson");M(this,"fnNewNodeDropped");M(this,"dockFloatToMain");M(this,"floatLayoutId");M(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}},Jv=({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})};Jv.displayName="EdgeIndicators";var S0=2e3,L0=750,Zv=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),[f,d]=m.useState(void 0),[p,g]=m.useState(void 0),x=m.useMemo(()=>new Map,[]),w=m.useRef(!1),E=m.useRef(null),b=m.useRef(null),h=m.useRef(new Map);if(m.useLayoutEffect(()=>{!w.current&&c&&(w.current=!0,r.redrawLayout(),M0(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 L=l.current.document;d(l.current),g(L),L.title=t,document.documentElement.lang&&(L.documentElement.lang=document.documentElement.lang),document.documentElement.dir&&(L.documentElement.dir=document.documentElement.dir);const B=L.createElement("div");B.className=U.FLEXLAYOUT__FLOATING_WINDOW_CONTENT,L.body.appendChild(B),r.getProps().onPopoutOpen?.(o,l.current,L),O0(L,x).then(()=>{u(B)}),E.current=new MutationObserver(C=>C0(C,L,x)),E.current.observe(document.head,{childList:!0,subtree:!0,characterData:!0}),b.current=L.defaultView?.setInterval(()=>{A0(x,h.current)},L0)??null,l.current.addEventListener("beforeunload",()=>{l.current&&(r.getProps().onPopoutClose?.(o,l.current,L),i(o),l.current=null,E.current?.disconnect(),E.current=null,b.current!=null&&(L.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,E.current?.disconnect(),E.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:f??window,popoutDocument:p})),Pr.createPortal(_,c)}else return null};function C0(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)&&Qv(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=N0(o.target),i=n&&r.get(n);n&&i&&Bs(n,i)}}function N0(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 O0(e,t){const r=[],o=document.querySelectorAll('style, link[rel="stylesheet"]');for(const n of o)Qv(e,n,t,r);return Promise.all(r)}function Qv(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),S0)}))}else if(t instanceof HTMLStyleElement)try{const n=t.cloneNode(!0);e.head.appendChild(n),Bs(t,n),r.set(t,n)}catch{}}function Bs(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 M0(e){for(const[t,r]of e)t instanceof HTMLStyleElement&&Bs(t,r)}function A0(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),Bs(r,o))}}Zv.displayName="PopoutWindow";var lo=10,Rr=-4,rr=8,mn=12,ih=12,D0=150,I0=25,j0=e=>{const{controller:t,layout:r,children:o}=e,[n,i]=m.useState(r.getRect()),a=m.useRef(he.empty()),l=t.getClassName,c=m.useRef(null),u=m.useRef(null),f=m.useRef(null),d=m.useRef(null),p=m.useRef(null),g=m.useRef(null),x=m.useRef(null),w=m.useRef(null),E=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(A=>{const R=t.getCurrentWindow()??window,O=he.fromDomRect(t.getRootDiv().getBoundingClientRect());let D;if(t.getProps().constrainFloatPanels)D=new he(0,0,O.width,O.height);else{const F=m0(R),ne=Math.max(F.fullWidth,R.innerWidth),Y=Math.max(F.fullHeight,R.innerHeight);D=new he(-O.x,-O.y,ne,Y)}const V=A.clone();return V.clamp(D),V},[t]),y=m.useCallback(A=>{A.preventDefault(),A.stopImmediatePropagation()},[]);m.useEffect(()=>{const A=[u,f,d,p,g,x,w,E,b].map(R=>R.current).filter(R=>R!==null);return A.forEach(R=>R.addEventListener("touchstart",y,{passive:!1})),()=>{A.forEach(R=>R.removeEventListener("touchstart",y))}},[y]);const T=m.useRef(!1);m.useLayoutEffect(()=>{if(!T.current){T.current=!0;const A=_(n);A.equals(n)||(i(A),r.setRect(A))}},[_,n,r]),m.useEffect(()=>{const A=()=>{const V=[...t.getModel().getLayouts()],F=V[V.length-1][1];r!==F&&(h.current=!0)},R=t.getCurrentWindow()??window,O=()=>{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",A,{capture:!0}),D.addEventListener("pointerup",O)),()=>{D&&(D.removeEventListener("pointerdown",A,{capture:!0}),D.removeEventListener("pointerup",O)),v.current!==void 0&&(R.clearTimeout(v.current),v.current=void 0)}},[t,r]);const L=A=>{A.stopPropagation();const R={x:A.clientX-n.x,y:A.clientY-n.y};t.showOverlayOnAllWindows(!0),Ql(t.getCurrentDocument()??document,A,(O,D)=>{h.current&&(t.moveWindowToFront(r.getLayoutId()),h.current=!1);const V=new he(O-R.x,D-R.y,n.width,n.height),F=_(V);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)})},B=t.getIcons(),C=t.isSupportsPopout()&&r.getRootRow()?.isAllowedInWindow()===!0,I=A=>{A.stopPropagation(),r.getRootRow()?.getChildren().length?t.getDragDropManager().startDockLayoutDrag(A.nativeEvent,r,c.current??void 0):A.preventDefault()},z=A=>{t.getDragDropManager().onDragEnded()},S=A=>{A.stopPropagation()},k=A=>{A.stopPropagation();const R=t.getScreenRect(r.getRect());t.doAction(re.popoutFloat(r.getLayoutId(),R.toJson()))},j=(A,R)=>{const O=n,D={x:A.clientX,y:A.clientY};t.showOverlayOnAllWindows(!0),Ql(t.getCurrentDocument()??document,A,(V,F)=>{const ne=V-D.x,Y=F-D.y;let K=O.x,Z=O.y,$=O.width,Q=O.height;R.includes("n")&&(Z+=Y,Q-=Y),R.includes("s")&&(Q+=Y),R.includes("w")&&(K+=ne,$-=ne),R.includes("e")&&($+=ne);const oe=new he(K,Z,Math.max(D0,$),Math.max(I0,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)}),A.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:L,children:[s.jsx("div",{"data-layout-path":"/floatwindow/drag-handle",className:l(U.FLEXLAYOUT__FLOAT_WINDOW_DRAG_HANDLE),draggable:!0,title:t.i18nName(Ae.Dock_Float_To_Layout),"aria-label":t.i18nName(Ae.Dock_Float_To_Layout),onDragStart:I,onDragEnd:z,onPointerDown:S,children:B.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}})})}),C&&s.jsx("button",{type:"button","data-layout-path":"/floatwindow/button/popout",className:l(U.FLEXLAYOUT__FLOAT_WINDOW_BUTTON),title:t.i18nName(Ae.Popout_Float_To_Window),"aria-label":t.i18nName(Ae.Popout_Float_To_Window),onClick:k,onPointerDown:S,children:B.popoutFloatWindow})]}),s.jsx("div",{className:l(U.FLEXLAYOUT__FLOAT_WINDOW_CONTENT),children:o}),s.jsx("div",{ref:f,style:{position:"absolute",zIndex:lo,top:Rr,left:rr,right:rr,height:rr,cursor:"ns-resize"},onPointerDown:A=>j(A,"n")}),s.jsx("div",{ref:x,style:{position:"absolute",zIndex:lo,bottom:Rr,left:rr,right:rr,height:rr,cursor:"ns-resize"},onPointerDown:A=>j(A,"s")}),s.jsx("div",{ref:p,style:{position:"absolute",zIndex:lo,top:rr,bottom:rr,right:Rr,width:rr,cursor:"ew-resize"},onPointerDown:A=>j(A,"e")}),s.jsx("div",{ref:E,style:{position:"absolute",zIndex:lo,top:rr,bottom:rr,left:Rr,width:rr,cursor:"ew-resize"},onPointerDown:A=>j(A,"w")}),s.jsx("div",{ref:b,style:{position:"absolute",zIndex:lo,top:Rr,left:Rr,width:mn,height:mn,cursor:"nwse-resize"},onPointerDown:A=>j(A,"nw")}),s.jsx("div",{ref:d,style:{position:"absolute",zIndex:lo,top:Rr,right:Rr,width:mn,height:mn,cursor:"nesw-resize"},onPointerDown:A=>j(A,"ne")}),s.jsx("div",{ref:w,style:{position:"absolute",zIndex:lo,bottom:Rr,left:Rr,width:mn,height:mn,cursor:"nesw-resize"},onPointerDown:A=>j(A,"sw")}),s.jsx("div",{ref:g,style:{position:"absolute",zIndex:lo,bottom:0,right:0,width:ih,height:ih,cursor:"nwse-resize"},onPointerDown:A=>j(A,"se")})]})},em=({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(Zv,{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(fa,{...e.getProps(),layoutId:i,path:a.getPath(),mainLayoutController:e})})},i)),o++):a.getType()==="float"&&(t.push(s.jsx(j0,{controller:e,layout:a,zIndex:n,onCloseLayout:e.onCloseLayout,children:s.jsx(fa,{...e.getProps(),layoutId:i,path:a.getPath(),mainLayoutController:e})},i+"float")),n++));return s.jsx(s.Fragment,{children:t})};em.displayName="FloatingWindowContainer";var tm=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(),f=O=>{r.isEnableDrag()?(O.stopPropagation(),t.getDragDropManager().setDragNode(O.nativeEvent,r)):O.preventDefault()},d=O=>{O.stopPropagation(),t.getDragDropManager().onDragEnded()},p=O=>{ua(O)&&t.auxMouseClick(r,O)},g=O=>{t.showContextMenu(r,O)},x=()=>{t.doAction(re.selectTab(r.getId()))},w=O=>{const D=l.current?.closest('[role="tablist"]');if(D){const V=Array.from(D.querySelectorAll('[role="tab"]'));V[V.indexOf(l.current)+O]?.focus()}},E=()=>{const O=l.current.ownerDocument,D=()=>Cv(O.getElementById(St("flexlayout-tab-",r.getId())));o?D():(x(),requestAnimationFrame(D))},b=O=>{t.getEditingTab()!==r&&(Jr(O,u.focusTabToggle)?(E(),O.preventDefault()):O.key==="Enter"||O.key===" "?(x(),O.preventDefault()):(O.key==="ArrowLeft"||O.key==="ArrowUp")&&!ca(O)?(w(-1),O.preventDefault()):(O.key==="ArrowRight"||O.key==="ArrowDown")&&!ca(O)?(w(1),O.preventDefault()):Jr(O,u.closeTab)&&r.isCloseable()&&(w(1),t.doAction(re.deleteTab(r.getId())),O.preventDefault()))},h=()=>{const O=r.getCloseType();return!!(o||O===Jo.Always||O===Jo.Visible&&window.matchMedia&&window.matchMedia("(hover: hover) and (pointer: fine)").matches)},v=O=>{h()&&(t.doAction(re.deleteTab(r.getId())),O.stopPropagation())},_=O=>{O.stopPropagation()},y=()=>{if(o)return!0;const O=r.getParent();return O instanceof Je&&O.getSelected()===-1&&O.getChildren()[0]===r},T=t.getEditingTab()===r,L=m.useCallback(O=>{l.current=O,t.registerMeasurable(r,"tabbutton",O)},[t,r]);m.useLayoutEffect(()=>{T&&c.current.select()},[T]),m.useEffect(()=>{if(T){const O=t.getCurrentDocument().body,D=V=>{V.target!==c.current&&t.setEditingTab(void 0)};return O.addEventListener("pointerdown",D),()=>O.removeEventListener("pointerdown",D)}},[T,t]);const B=O=>{O.stopPropagation()},C=O=>{O.code==="Escape"?(t.setEditingTab(void 0),l.current?.focus()):(O.code==="Enter"||O.code==="NumpadEnter")&&(t.setEditingTab(void 0),t.doAction(re.renameTab(r.getId(),O.target.value)),l.current?.focus())},I=t.getClassName;let z=I(U.FLEXLAYOUT__BORDER_BUTTON)+" "+I(U.FLEXLAYOUT__BORDER_BUTTON_+n);o?z+=" "+I(U.FLEXLAYOUT__BORDER_BUTTON__SELECTED):z+=" "+I(U.FLEXLAYOUT__BORDER_BUTTON__UNSELECTED),r.getClassName()!==void 0&&(z+=" "+r.getClassName());let S=0;r.getModel().isEnableRotateBorderIcons()===!1&&(n==="left"?S=r.getModel().getBorderLeftTabDirection()==="down"?-90:90:n==="right"&&(S=-90));const k=cf(t,r,S);let j=k.content?s.jsx("div",{className:I(U.FLEXLAYOUT__BORDER_BUTTON_CONTENT),children:k.content}):null;const A=k.leading?s.jsx("div",{className:I(U.FLEXLAYOUT__BORDER_BUTTON_LEADING),children:k.leading}):null;if(T&&(j=s.jsx("input",{ref:c,className:I(U.FLEXLAYOUT__TAB_BUTTON_TEXTBOX),"data-layout-path":a+"/textbox",type:"text","aria-label":t.i18nName(Ae.Rename_Tab),autoFocus:!0,defaultValue:r.getName(),onKeyDown:C,onPointerDown:B})),r.isCloseable()){const O=t.i18nName(Ae.Close_Tab);k.buttons.push(s.jsx("div",{"data-layout-path":a+"/button/close",title:O,"aria-hidden":"true",className:I(U.FLEXLAYOUT__BORDER_BUTTON_TRAILING),onPointerDown:_,onClick:v,children:typeof i.close=="function"?i.close(r):i.close},"close"))}const R=[So(u.focusTabToggle),r.isCloseable()?So(u.closeTab):void 0].filter(Boolean).join(" ")||void 0;return s.jsxs("div",{ref:L,id:St("flexlayout-tabbutton-",r.getId()),role:T?void 0:"tab","aria-selected":T?void 0:o,"aria-controls":T?void 0:St("flexlayout-tab-",r.getId()),"aria-label":T?void 0:k.name,"aria-keyshortcuts":T?void 0:R,tabIndex:T?-1:y()?0:-1,onKeyDown:b,"data-layout-path":a,className:z,onClick:x,onAuxClick:p,onContextMenu:g,title:r.getHelpText(),draggable:!0,onDragStart:f,onDragEnd:d,children:[A,j,k.buttons]})};tm.displayName="BorderButton";var rm=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),[f,d]=m.useState(!1),p=m.useRef(null),g=r.getIcons();m.useEffect(()=>()=>p.current?.(),[]);const{userControlledPositionRef:x,onScroll:w,onScrollPointerDown:E,hiddenTabs:b,onMouseWheel:h,isDockStickyButtons:v,isShowHiddenTabs:_}=Xv(r,t,ye.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=>{ua(oe)&&r.auxMouseClick(t,oe)},L=oe=>{r.showContextMenu(t,oe)},B=oe=>{oe.stopPropagation()},C=oe=>{const le=r.getShowOverflowMenu(),Le=b.map(ke=>({index:ke,node:t.getChildren()[ke]}));if(le!==void 0)le(t,oe,Le,I);else{const ke=l.current;d(!0),p.current=$v(ke,t,Le,I,r,()=>{d(!1),p.current=null})}oe.stopPropagation()},I=oe=>{r.doAction(re.selectTab(oe.node.getId())),x.current=!1},z=oe=>{const le=t.getChildren()[t.getSelected()];le!==void 0&&r.doAction(re.popoutTab(le.getId(),"window")),oe.stopPropagation()},S=oe=>{const le=t.getChildren()[t.getSelected()];le!==void 0&&r.doAction(re.popoutTab(le.getId(),"float")),oe.stopPropagation()},k=r.getClassName,j=()=>{const oe=[];for(let le=0;le{let oe,le=[],Le=[],ke;const ve={leading:oe,buttons:le,stickyButtons:Le,overflowPosition:void 0};if(r.customizeTabSet(t,ve),oe=ve.leading,Le=ve.stickyButtons,le=ve.buttons,ve.overflowPosition===void 0&&(ve.overflowPosition=Le.length),Le.length>0&&(v?le=[...Le,...le]:ke=s.jsx("div",{ref:c,onPointerDown:B,onDragStart:se=>{se.preventDefault()},className:k(U.FLEXLAYOUT__TAB_TOOLBAR_STICKY_BUTTONS_CONTAINER),children:Le},"sticky_buttons_container")),_){const se=r.i18nName(Ae.Overflow_Menu_Tooltip);let ce;if(typeof g.more=="function"){const X=b.map(fe=>({index:fe,node:t.getChildren()[fe]}));ce=g.more(t,X)}else ce=s.jsxs(s.Fragment,{children:[g.more,s.jsx("div",{className:k(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":f,"aria-label":se,ref:l,className:k(U.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON)+" "+k(U.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON_OVERFLOW)+" "+k(U.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON_OVERFLOW_+t.getLocation().getName()),title:se,onClick:C,onPointerDown:B,children:ce},"overflowbutton"))}const Dt=t.getSelected();if(Dt!==-1){const se=t.getChildren()[Dt];if(se!==void 0&&r.isMainLayout()){if(se.isEnablePopoutFloatIcon()){const ce=r.i18nName(Ae.Popout_Tab_Float);le.push(s.jsx("button",{tabIndex:0,title:ce,"aria-label":ce,className:k(U.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON)+" "+k(U.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON_FLOAT),onClick:S,onPointerDown:B,children:typeof g.popoutFloat=="function"?g.popoutFloat(se):g.popoutFloat},"popout-float"))}if(r.isSupportsPopout()&&se.isEnablePopoutIcon()&&se.isAllowedInWindow()){const ce=r.i18nName(Ae.Popout_Tab);le.push(s.jsx("button",{tabIndex:0,title:ce,"aria-label":ce,className:k(U.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON)+" "+k(U.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON_FLOAT),onClick:z,onPointerDown:B,children:typeof g.popout=="function"?g.popout(se):g.popout},"popout"))}}}const J=s.jsx("div",{ref:i,className:k(U.FLEXLAYOUT__BORDER_TOOLBAR)+" "+k(U.FLEXLAYOUT__BORDER_TOOLBAR_+t.getLocation().getName()),children:le},"toolbar");return{leading:oe,toolbar:J,stickyBar:ke}},R=j(),{leading:O,toolbar:D,stickyBar:V}=A();let F=k(U.FLEXLAYOUT__BORDER)+" "+k(U.FLEXLAYOUT__BORDER_+t.getLocation().getName());t.getClassName()!==void 0&&(F+=" "+t.getClassName());let ne,Y;const K=o-1;t.getLocation()===ee.LEFT?(ne=r.getModel().getBorderLeftTabDirection()==="down"?{left:"100%",top:0}:{right:"100%",top:0},Y={width:K,overflowY:"auto"}):t.getLocation()===ee.RIGHT?(ne={left:"100%",top:0},Y={width:K,overflowY:"auto"}):(ne={left:0},Y={height:K,overflowX:"auto"});let Z;t.isEnableTabScrollbar()&&(Z=s.jsx("div",{ref:a,"aria-hidden":"true",className:k(U.FLEXLAYOUT__MINI_SCROLLBAR),onPointerDown:E}));let $;O&&($=s.jsx("div",{className:k(U.FLEXLAYOUT__BORDER_LEADING),children:O}));const Q=k(U.FLEXLAYOUT__BORDER_INNER_TAB_CONTAINER)+" "+k(U.FLEXLAYOUT__BORDER_INNER_TAB_CONTAINER_+t.getLocation().getName())+(t.getLocation()===ee.LEFT&&r.getModel().getBorderLeftTabDirection()==="down"?" "+k(U.FLEXLAYOUT__BORDER_INNER_TAB_CONTAINER_LEFT_DOWN):"");return s.jsxs("div",{ref:y,style:{display:"flex",flexDirection:t.getOrientation()===ye.VERT?"row":"column"},className:F,"data-layout-path":t.getPath(),onClick:T,onAuxClick:T,onContextMenu:L,onWheel:h,children:[$,s.jsxs("div",{className:k(U.FLEXLAYOUT__MINI_SCROLLBAR_CONTAINER),children:[s.jsxs("div",{ref:u,className:k(U.FLEXLAYOUT__BORDER_INNER)+" "+k(U.FLEXLAYOUT__BORDER_INNER_+t.getLocation().getName()),style:Y,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}),V]}),Z]}),D]})};rm.displayName="BorderTabSet";function om(e){const{controller:t,borderNode:r,show:o}=e,n=m.useRef(null),i=m.useCallback(f=>{n.current=f,t.registerMeasurable(r,"bordercontent",f)},[t,r]);let a=!0;const l={};r.getOrientation()===ye.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 f={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?f.top=x:g.getLocation()===ee.BOTTOM&&(f.bottom=x)}}const d=t.getClassName(U.FLEXLAYOUT__BORDER_TAB_OVERLAY)+" "+t.getClassName(U.FLEXLAYOUT__BORDER_TAB_OVERLAY_+r.getLocation().getName());return s.jsxs("div",{className:d,style:f,children:[u&&s.jsx("div",{ref:i,style:l,className:c}),o&&s.jsx(Fi,{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(Fi,{controller:t,node:r,index:0,horizontal:a})]}):s.jsxs(s.Fragment,{children:[o&&s.jsx(Fi,{controller:t,node:r,index:0,horizontal:a}),s.jsx("div",{ref:i,style:l,className:c})]})}om.displayName="BorderTab";var nm=({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[f,d]of ee.values){const p=o.get(d);p&&p.isShowing()&&(!p.isAutoHide()||p.isAutoHide()&&(p.getChildren().length>0||e.getState().showHiddenBorder===d))&&(i.set(d,s.jsx(rm,{controller:e,borderNode:p,size:e.getState().calculatedBorderBarSize})),a.set(d,s.jsx(om,{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})};nm.displayName="BorderContainer";var im=m.memo(e=>{im.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(da,{controller:t,tabNode:r},r.getId())})},P0);function P0(e,t){return t.dragging}var fa=m.forwardRef((e,t)=>{fa.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(I=>{o(z=>({...z,...typeof I=="function"?I(z,e):I}))},[e]),i=m.useRef(null),[a,l]=m.useState(0),c=m.useRef(null),u=m.useRef(null),f=m.useRef(null),d=m.useRef(null),p=m.useMemo(()=>new B0(e,r,n),[]);p.setProps(e),p.setStateRaw(r),p.setSetState(n),p.setLayoutRef(i),p.setMoveablesHomeRef(c),p.setFindBorderBarSizeRef(u),p.setFindSplitterSizeRef(f),p.setMainRef(d);const g=e.model.getLayouts().get(p.getLayoutId());g.setController(p),m.useImperativeHandle(t,()=>p,[p]),m.useLayoutEffect(()=>{const I=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(z=>z+1),I){const z=i.current?.ownerDocument.defaultView??window,S=z.requestAnimationFrame(()=>{p.syncLayoutMetrics(),p.positionTabPanels(),p.isReLayout()&&(p.redrawLayout(),p.setReLayout(!1))});return()=>z.cancelAnimationFrame(S)}}),m.useEffect(()=>{const I=i.current.ownerDocument,z=I.defaultView;p.setCurrentDocument(I),p.setCurrentWindow(z);const S=new z.ResizeObserver(()=>{p.updateRect(),p.syncLayoutMetrics(),p.positionTabPanels(),p.updateLayoutMetrics(),p.isReLayout()&&(p.redrawLayout(),p.setReLayout(!1))});S.observe(i.current),p.setGeometryResizeObserver(S),u.current&&S.observe(u.current),f.current&&S.observe(f.current);const k=()=>{p.updateRect()};z.addEventListener("resize",k);const j=()=>{for(const[A,R]of p.getProps().model.getLayouts()){const O=R.getController();O&&O.redrawLayout()}};return p.isMainLayout()&&(document.addEventListener("visibilitychange",j),I.addEventListener("pointerdown",p.onOverlayBorderPointerDown,!0),I.addEventListener("keydown",p.onOverlayBorderKeyDown)),(p.isMainLayout()||p.getLayout()?.getType()==="window")&&I.addEventListener("keydown",p.onTabsetNavKeyDown),()=>{p.setGeometryResizeObserver(void 0),S.disconnect(),z.removeEventListener("resize",k),document.removeEventListener("visibilitychange",j),I.removeEventListener("pointerdown",p.onOverlayBorderPointerDown,!0),I.removeEventListener("keydown",p.onOverlayBorderKeyDown),I.removeEventListener("keydown",p.onTabsetNavKeyDown)}},[p,a]),m.useEffect(()=>{let I;if(!p.isMainLayout()&&p.getLayout().getType()==="window"){const z=p.getProps().mainLayoutController?.getRootDiv();if(z){const S=z,k=i.current;oh(S,k),I=new MutationObserver(()=>{oh(S,k)&&p.redrawLayout()}),I.observe(S,{attributeFilter:["style"]})}}return()=>{I&&I.disconnect()}},[p]),m.useEffect(()=>{const I=e.model;if(g.setToExportRectFunction((z,S)=>S==="window"?p.getScreenRect(z):p.getRelativeRect(z)),p.setLayout(g),p.isMainLayout()){const z={onAfterAction:p.onModelChange};return I.addChangeListener(z),()=>{I.removeChangeListener(z)}}},[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:f,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,E=p.getLayoutId();w.getRootRow(E).calcMinMaxSize(),w.getRootRow(E).setPaths(e.path||""),p.isMainLayout()&&w.getBorderSet().setPaths();const b=s.jsx(Wv,{controller:p,show:r.showOverlay},"__overlay__"),h=p.renderLayout(),v=s.jsx(nm,{controller:p,inner:h}),_=p.renderTabContainers(),y=p.reorderComponents(_,p.getOrderedTabIds());let T=null,L=null,B=null,C=null;return p.isMainLayout()&&(T=s.jsx(em,{controller:p}),L=p.reorderComponents(p.renderTabContents(),p.getOrderedTabMoveableIds()),B=s.jsx("div",{"aria-hidden":"true",className:p.getClassName(U.FLEXLAYOUT__LAYOUT_TAB_STAMPS),children:p.renderDragTabButtons()},"__dragTabButtons__"),C=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,C,b,v,y,L,T,B]})}),Gr,B0=(Gr=class{constructor(t,r,o){M(this,"_props");M(this,"_state");M(this,"_setState");M(this,"_layoutRef");M(this,"_moveablesHomeRef");M(this,"_findBorderBarSizeRef");M(this,"_findSplitterSizeRef");M(this,"_mainRef");M(this,"_orderedTabIds");M(this,"_orderedTabMoveableIds");M(this,"_currentDocument");M(this,"_currentWindow");M(this,"_showOverlay",!1);M(this,"_supportsPopout");M(this,"_popoutURL");M(this,"_icons");M(this,"_dragDropManager");M(this,"_layoutId");M(this,"_layout");M(this,"_mainController");M(this,"_popoutWindowName");M(this,"_cachedLayoutDOMRect");M(this,"_reLayout");M(this,"_measurables",new Map);M(this,"_tabPanels",new Map);M(this,"_lastRect",he.empty());M(this,"_lastSplitterSize",8);M(this,"_geometryResizeObserver");M(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=he.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())}});M(this,"onModelChange",t=>{const r=t instanceof Rv?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)});M(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(at.MAIN_LAYOUT_ID)?.getRect();if(!(!a||!a.contains(n,i)))for(const l of r)l.getContentRect()?.contains(n,i)||this.closeOverlayBorder(l)});M(this,"onOverlayBorderKeyDown",t=>{if(!Jr(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(St("flexlayout-tab-",i.getId())),l=this._currentDocument.getElementById(St("flexlayout-tabbutton-",i.getId()));if(a&&a.contains(r)||r===l){this.closeOverlayBorder(n),t.preventDefault();break}}});M(this,"onTabsetNavKeyDown",t=>{if(t.defaultPrevented)return;const r=this.getKeyMap();let o;if(Jr(t,r.focusNextTabset))o=1;else if(Jr(t,r.focusPreviousTabset))o=-1;else return;this.focusAdjacentTabset(o)&&t.preventDefault()});M(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())}});M(this,"getClassName",t=>this._props.classNameMapper===void 0?t:this._props.classNameMapper(t));M(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:F0,this._popoutURL=t.popoutURL?t.popoutURL:"popout.html",this._icons={...z0,...t.icons},this._layoutId=t.layoutId?t.layoutId:at.MAIN_LAYOUT_ID,this._mainController=t.mainLayoutController?t.mainLayoutController:this,this._dragDropManager=new R0(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(uf,{controller:this,rowNode:this._props.model.getRootRow(this._layoutId)},"__row__"),s.jsx(Jv,{controller:this})]})}renderTabContainers(){const t=new Map;return this._props.model.visitLayoutNodes(this._layoutId,r=>{if(r instanceof Se){const o=r,n=o.isSelected(),i=o.isRendered(),a=o.isEnableRenderOnDemand();(i||n||!a)&&t.set(o.getId(),s.jsx(Kv,{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 Se){const i=n,a=i.isSelected(),l=i.isRendered(),c=i.isEnableRenderOnDemand(),u=i.getParent().getContentRect(),f=a||!c;if(l||f&&u.width>0&&u.height>0){const d=i.getMoveableElement();d.style.overflow=i.isEnableScrollbars()?"auto":"hidden";const p=o.getWindowId()||"",g=i.getId()+(i.isEnableWindowReMount()?p:"");t.set(i.getId(),Pr.createPortal(s.jsx(qv,{controller:this,tabNode:i,windowId:p,visible:f,fullRedrawRevision:this._state.fullRedrawRevision,parentRedrawRevision:this._props.parentRedrawRevision},g),d,g)),i.setRendered(!0)}}});return t}renderDragTabButtons(){const t=[];return this._props.model.visitNodes(r=>{if(r instanceof Se){const o=r;t.push(s.jsx(im,{controller:this,tabNode:o,dragging:ml},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 $e)){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(St("flexlayout-tab-",r.getId())),i=!!o&&!!n&&n.contains(o.activeElement);this.doAction(re.selectTab(r.getId())),i&&o.getElementById(St("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 Oe&&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(St("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(St("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 Oe?this._props.model.getMaximizedTabset(this._layoutId)!==void 0&&!o.isMaximized()&&(i=!1):o instanceof Je&&(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 b0(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&&!Gr.Windows.has(t)&&Gr.Windows.set(t,yn())}getWindowId(){if(this.getCurrentWindow())return Gr.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?he.getBoundingClientRect(t).relativeTo(r):he.empty()}getLayoutRef(){return this._layoutRef.current}getDomRect(){return this._cachedLayoutDOMRect!==void 0?this._cachedLayoutDOMRect:this._layoutRef.current?(this._cachedLayoutDOMRect=he.fromDomRect(this._layoutRef.current.getBoundingClientRect()),this._cachedLayoutDOMRect):he.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}),vl(!t,this._currentDocument))}showOverlayOnAllWindows(t){for(const[,r]of this._props.model.getLayouts())r.getController()&&r.getController().showOverlay(t)}},M(Gr,"Windows",new WeakMap),Gr),z0={close:s.jsx(yl,{}),pin:s.jsx(Dv,{}),closeTabset:s.jsx(yl,{}),closeFloatPopout:s.jsx(yl,{}),popout:s.jsx(Bu,{}),popoutFloat:s.jsx(Bv,{}),maximize:s.jsx(Iv,{}),restore:s.jsx(Fv,{}),more:s.jsx(jv,{}),edgeArrow:s.jsx(Pv,{}),activeTabset:s.jsx(Uv,{}),dragToDock:s.jsx(zv,{}),popoutFloatWindow:s.jsx(Bu,{})},F0=Lv(),am=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),am.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 Se&&l.isEnableRename()&&l.getLayout().getController()?.setEditingTab(l)},getRootDiv:()=>r.current.getRootDiv()}));const i={};return s.jsx(fa,{ref:r,...e,parentRedrawRevision:i},n.current)});const ah=20,U0="bv-nodepack:layout-profiles:v1:",df=new Map,zu="bv-layout-session-changed",lm=e=>`${U0}${e}`;function ff(e){try{const t=JSON.parse(localStorage.getItem(lm(e))??"");if(t?.schemaVersion===1&&Array.isArray(t.profiles))return t}catch{}return{schemaVersion:1,profiles:[]}}function sm(e,t){localStorage.setItem(lm(e),JSON.stringify(t))}const W0=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=ff(e.editorType),r=W0(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>ah)throw new Error(`A maximum of ${ah} layouts can be saved for this editor.`);return sm(e.editorType,{schemaVersion:1,profiles:a,selectedId:o}),i}function V0(e,t){const r=ff(e);sm(e,{...r,profiles:r.profiles.filter(o=>o.id!==t),selectedId:r.selectedId===t?void 0:r.selectedId})}function _l(e,t,r,o,n=!0){df.set(e,{layout:structuredClone(t),status:r,profileId:o}),n&&window.dispatchEvent(new CustomEvent(zu,{detail:{key:e}}))}function Si(e){const t=df.get(e);return t?structuredClone(t):void 0}function H0(e){df.delete(e)}function $0(e,t){return e.editorType===t.editorType&&e.editorVersion===t.editorVersion&&e.library===t.library&&e.signature===t.signature}const sh="flexlayout-react@0.10.5";function Y0(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 X0=new Set([re.MOVE_NODE,re.DELETE_TAB,re.DELETE_TABSET,re.RENAME_TAB]),G0=e=>X0.has(e.type)?"modified":"adjusted";function K0(e){H0(e)}function cm({storageId:e,panels:t,resetSignal:r=0,defaultModel:o,onStatus:n}){const i=JSON.stringify({panels:t.map(d=>`${d.id}:${d.weight}`),defaultModel:o}),a=m.useMemo(()=>o??Y0(t),[i]),[l,c]=m.useState(()=>at.fromJson(Si(e)?.layout??a)),u=m.useMemo(()=>new Map(t.map(d=>[d.id,d.content])),[t]);m.useEffect(()=>{const d=Si(e);c(at.fromJson(d?.layout??a)),n?.(d?.status??"saved")},[a,i,e]),m.useEffect(()=>{r&&(K0(e),c(at.fromJson(a)),n?.("saved"))},[a,r,e]),m.useEffect(()=>{const d=p=>{if(p.detail?.key!==e)return;const g=Si(e);g&&(c(at.fromJson(g.layout)),n?.(g.status))};return window.addEventListener(zu,d),()=>window.removeEventListener(zu,d)},[n,e]);const f=d=>d.type===re.POPOUT_TAB&&d.data.type==="float"&&l.getNodeById(d.data.node)?.getLayoutId()!==at.MAIN_LAYOUT_ID?void 0:d;return s.jsx("div",{className:"bv-ui-dock flexlayout__theme_dark",children:s.jsx(am,{model:l,factory:d=>u.get(d.getComponent()??"")??null,constrainFloatPanels:!0,onAction:f,onModelChange:(d,p)=>{c(d);const g=Si(e),x=g?.status==="modified"?"modified":G0(p);_l(e,d.toJson(),x,g?.profileId,!1),n?.(x)}})})}let po=[];const Fu=new Set,um=()=>Fu.forEach(e=>e());function Or(e){const t=e.id??`${e.title}:${e.message??""}`,r=po.findIndex(n=>n.id===t),o={...e,id:t};return po=r>=0?[...po.slice(0,r),o,...po.slice(r+1)]:[...po,o].slice(-3),um(),t}function q0(e){po=po.filter(t=>t.id!==e),um()}const J0=e=>(Fu.add(e),()=>Fu.delete(e)),ch=()=>po;function Z0(){const e=m.useSyncExternalStore(J0,ch,ch),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&&Or({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?Pr.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(fw,{tone:r.tone,title:r.title,duration:r.duration,onClose:()=>q0(r.id),children:r.message},r.id))}),document.body):null}const Cr=({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"})}),fm=m.createContext({narrow:!1,minimal:!1,menuOverflow:!1}),pm=()=>m.useContext(fm);function Q0(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 f=new ResizeObserver(d=>n(d[0]?.contentRect.width??u.clientWidth));return f.observe(u),()=>f.disconnect()},[]);const c=m.useMemo(()=>({narrow:o<760,minimal:o<620,menuOverflow:o<520}),[o]);return s.jsx(fm.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(Zl,{detail:{anchor:u.currentTarget}})),children:s.jsxs(Cr,{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(Ao,{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(Cr,{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(Cr,{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(Cr,{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(Cr,{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(Cr,{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(Cr,{children:s.jsx("path",{d:"m7 7 10 10M17 7 7 17"})})})]})]})})}const xi=(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 ci({open:e,title:t,shortTitle:r,context:o,center:n,children:i,status:a,actions:l,activationToken:c=0,allowWorkspace:u=!0,initialMode:f="floating",initialGeometry:d,minSize:p={width:360,height:240},mode:g,className:x="",bodyClassName:w="",menuVisible:E,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=()=>xi({x:Math.max(16,(window.innerWidth-(d?.width??760))/2),y:Math.max(16,(window.innerHeight-(d?.height??640))/2),width:d?.width??760,height:d?.height??640,...d},p),[L,B]=m.useState(u?f:"floating"),[C,I]=m.useState(!1),[z,S]=m.useState(T),k=g??L,j=m.useRef(null),A=m.useRef(null),R=m.useRef(z),O=m.useRef(d),D=m.useRef();m.useEffect(()=>{R.current=z},[z]),m.useEffect(()=>{e&&I(!1)},[e]),m.useEffect(()=>{const $=j.current;if(!(!e||!$))return A.current=document.activeElement instanceof HTMLElement&&!$.contains(document.activeElement)?document.activeElement:A.current,u0($)},[e]),m.useEffect(()=>{const $=j.current;if(!$)return;const Q=()=>{I(!1),requestAnimationFrame(()=>$.focus({preventScroll:!0}))},oe=()=>I(!0);return $.addEventListener("bv-ui-activate",Q),$.addEventListener("bv-ui-minimize",oe),()=>{$.removeEventListener("bv-ui-activate",Q),$.removeEventListener("bv-ui-minimize",oe)}},[]),m.useEffect(()=>{const $=j.current;if(!$)return;const Q=oe=>{const le=oe.detail;u&&le?.mode&&(B(le.mode),_?.(le.mode)),le?.mode==="floating"&&le.geometry&&S(xi(le.geometry,p))};return $.addEventListener("bv-ui-set-window-state",Q),()=>$.removeEventListener("bv-ui-set-window-state",Q)},[u,p.height,p.width,_]),m.useEffect(()=>{e&&(I(!1),requestAnimationFrame(()=>j.current?.focus({preventScroll:!0})))},[c,e]),m.useEffect(()=>{const $=O.current;O.current=d,d&&S(Q=>xi(i0(Q,$,d),p))},[d?.height,d?.width,d?.x,d?.y,p.height,p.width]),m.useEffect(()=>{if(!e)return;const $=()=>S(Q=>xi(Q,p));return window.addEventListener("resize",$),()=>window.removeEventListener("resize",$)},[p.height,p.width,e]);const V=$=>{k!=="floating"||$.button!==0||$.target.closest("button,input,select,textarea")||(D.current={pointerId:$.pointerId,startX:$.clientX,startY:$.clientY,kind:"move",x:z.x,y:z.y},$.currentTarget.setPointerCapture($.pointerId),$.preventDefault())},F=$=>Q=>{k!=="floating"||Q.button!==0||(D.current={pointerId:Q.pointerId,startX:Q.clientX,startY:Q.clientY,kind:"resize",direction:$,geometry:z},Q.currentTarget.setPointerCapture(Q.pointerId),Q.preventDefault(),Q.stopPropagation())},ne=$=>{const Q=D.current;if(!Q||Q.pointerId!==$.pointerId)return;const oe={x:$.clientX-Q.startX,y:$.clientY-Q.startY},le={...p,width:Math.min(p.width,420)};S(Le=>xi(Q.kind==="move"?{...Le,x:Q.x+oe.x,y:Q.y+oe.y}:n0(Q.geometry,oe,Q.direction,le),p))},Y=$=>{D.current?.pointerId===$.pointerId&&(D.current=void 0,requestAnimationFrame(()=>v?.(R.current)))};if(!e)return null;const K=k==="workspace"?void 0:{left:z.x,top:z.y,width:z.width,height:z.height},Z=()=>{h(),requestAnimationFrame(()=>A.current?.focus({preventScroll:!0}))};return s.jsxs(s.Fragment,{children:[C&&s.jsx(zs,{title:t,onRestore:()=>I(!1),onClose:Z}),s.jsxs("div",{ref:j,tabIndex:-1,hidden:C,className:`bv-managed-window ${k} ${x}`.trim(),role:"dialog","aria-modal":k==="workspace","aria-label":t,style:K,onPointerDownCapture:()=>j.current&&th(j.current),onFocusCapture:()=>j.current&&th(j.current),onPointerMove:ne,onPointerUp:Y,onPointerCancel:Y,onKeyDown:$=>{if($.key==="Escape"&&![...document.querySelectorAll(".bv-anchored-popover,[role='listbox'],[role='menu']")].some(oe=>oe.offsetParent!==null)){$.preventDefault(),$.stopPropagation(),Z();return}$.stopPropagation()},children:[s.jsxs("div",{className:"bv-managed-window-surface",children:[s.jsx(Q0,{title:t,shortTitle:y,context:o,center:n,mode:k,allowWorkspace:u,menuVisible:E,onMenuVisible:b,onMode:()=>{if(!u)return;const $=k==="workspace"?"floating":"workspace";B($),_?.($)},onMinimize:()=>I(!0),onClose:Z,onPointerDown:V}),s.jsx("div",{className:`bv-managed-window-body ${w}`.trim(),children:i}),(a||l)&&s.jsx(e1,{status:a??null,actions:l,stacked:k==="floating"&&z.width<700,minimal:k==="floating"&&z.width<470})]}),k==="floating"&&["n","ne","e","se","s","sw","w","nw"].map($=>s.jsx("div",{className:`bv-window-resize-handle ${$}`,"aria-hidden":"true",onPointerDown:F($)},$))]})]})}function e1({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 pf({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(qd,{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 d=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=a0(d,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(f=>{l.has(f)||(l.add(f),a.observe(f))}),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]),Pr.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(Cr,{children:s.jsx("path",{d:"m7 7 10 10M17 7 7 17"})})})]}),o)}function Ra({label:e,value:t,options:r,onNavigate:o}){const n=m.useSyncExternalStore(e0,Qn,Qn),i=n==="keep",a=pm(),[l,c]=m.useState(!1),u=m.useRef(null),f=r.filter(E=>E.value!==t);if(!f.length)return null;const d=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(Bw,{className:"bv-window-node-select",label:e,value:"",options:f,onValue:(E,b)=>o(E,b.shiftKey?i:!i)}),w=s.jsxs("button",{type:"button",role:"switch","aria-label":d,"aria-checked":i,className:"bv-window-switch-mode",title:d,onClick:()=>lf(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(E=>!E),children:"•••"}),s.jsx(Ao,{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 hm({onClick:e,storageId:t,editorType:r="regional"}){const[o,n]=m.useState(null),[i,a]=m.useState(""),[l,c]=m.useState(0),u=Zd();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(Cr,{children:s.jsx("path",{d:"M4.9 9A7.5 7.5 0 1 1 5 15M4 4v5h5"})}),s.jsx("span",{children:"Reset layout"})]});const f=ff(r),d=Si(t),p=f.profiles.find(h=>h.id===d?.profileId),g=()=>c(h=>h+1),x=()=>{if(!d)return;const h=lh({id:o==="rename"?p?.id:void 0,name:i,editorType:r,editorVersion:"1",library:sh,signature:`${r}:v1`,layout:d.layout});_l(t,d.layout,"saved",h.id),n(null),g()},w={editorType:r,editorVersion:"1",library:sh,signature:`${r}:v1`},E=(h,v)=>d?.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:()=>E("Factory",e)},...f.profiles.map(h=>{const v=$0(h,w);return{id:h.id,label:`${h.name}${v?"":" · Incompatible"}`,onSelect:()=>E(h.name,()=>{if(!v){e(),Or({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}_l(t,h.layout,"saved",h.id)})}}),{id:"save-as",label:"Save as new layout…",disabled:!d,onSelect:()=>{a(""),n("save")}},...p?[{id:"update",label:`Update ${p.name}`,onSelect:()=>{d&&(lh({...p,layout:d.layout}),_l(t,d.layout,"saved",p.id),g())}},{id:"rename",label:"Rename layout…",onSelect:()=>{a(p.name),n("rename")}},{id:"delete",label:"Delete layout",danger:!0,onSelect:()=>{V0(r,p.id),e(),g()}}]:[]];return s.jsxs(s.Fragment,{children:[s.jsx(qd,{label:`${p?.name??"Factory"}${d?.status&&d.status!=="saved"?` · ${d.status[0].toUpperCase()}${d.status.slice(1)}`:""}`,icon:s.jsx(Cr,{children:s.jsx("path",{d:"M4 5h16v14H4zM8 5v14M8 10h12"})}),actions:b}),s.jsx(wa,{open:!!o,title:o==="rename"?"Rename layout":"Save layout",onClose:()=>n(null),footer:s.jsx(ae,{intent:"primary",onClick:x,children:o==="rename"?"Rename":"Save layout"}),children:s.jsx(ln,{label:"Layout name",value:i,maxLength:40,onValue:a})}),u.dialog]})}const gm=new Map;let bm;function Zr(e,t){const r=String(t);r&&gm.set(e,r),r&&e!=="quick"&&(bm=e)}function t1(){return bm}function Vo(e){return gm.get(e)}function ts({label:e,value:t,onImport:r,allowImport:o=!0}){const[n,i]=m.useState(!1),[a,l]=m.useState(""),[c,u]=m.useState(""),f=async()=>{try{await navigator.clipboard.writeText(JSON.stringify(t,null,2)),Or({title:"Draft copied",message:`${e} draft JSON was copied to the clipboard.`,tone:"success",duration:4e3})}catch{Or({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)}},d=()=>{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(ae,{intent:"ghost",onClick:f,children:"Copy draft"}),o&&s.jsx(ae,{intent:"ghost",onClick:p,children:"Import draft"}),s.jsx(wa,{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(ae,{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(ae,{intent:"primary",onClick:d,children:"Import draft"})]}),children:s.jsx(jw,{label:"Draft JSON",value:a,rows:14,resize:"vertical",error:c,onValue:l})})]})}const zr=(e,t)=>JSON.stringify(e)===JSON.stringify(t),jo=e=>e?.id??e?.key;function Uu(e,t,r,o="draft"){if(zr(r,e))return{ok:!0,value:structuredClone(t)};if(zr(t,e))return{ok:!0,value:structuredClone(r)};if(zr(t,r))return{ok:!0,value:structuredClone(t)};if(Array.isArray(e)&&Array.isArray(t)&&Array.isArray(r)){if(![...e,...t,...r].every(w=>jo(w)!=null))return{ok:!1,reason:`Concurrent list change at ${o}`};const n=e.map(jo),i=t.map(jo),a=r.map(jo),l=!zr(n,i.filter(w=>n.includes(w))),c=!zr(n,a.filter(w=>n.includes(w)));if(l&&c&&!zr(i,a))return{ok:!1,reason:`Concurrent reorder at ${o}`};const u=new Map(e.map(w=>[jo(w),w])),f=new Map(t.map(w=>[jo(w),w])),d=new Map(r.map(w=>[jo(w),w])),p=l?i:a,g=[...p,...i,...a].filter((w,E,b)=>b.indexOf(w)===E),x=[];for(const w of g){const E=u.get(w),b=f.get(w),h=d.get(w);if(E&&b&&!h&&!zr(E,b))return{ok:!1,reason:`Edited item ${w} was removed externally`};if(E&&!b&&h&&!zr(E,h))return{ok:!1,reason:`Removed item ${w} changed externally`};if(!b&&!h)continue;if(!E){if(b&&h&&!zr(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=Uu(E,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=Uu(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 r1(){const[e,t]=m.useState(an);m.useEffect(()=>{const o=n=>t(n.detail);return window.addEventListener(Jn,o),()=>window.removeEventListener(Jn,o)},[]);const r=(o,n)=>Gd({...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(Ir,{tone:"info",title:"No controls configured",children:"Create a control in Configuration before using live workflow states."})}const o1=({open:e,onClose:t,hasControlNodes:r=!0})=>{const[o,n]=m.useState(0),i=an().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(ci,{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(hm,{storageId:"control-center",editorType:"control-center",onClick:()=>n(l=>l+1)}),children:[!r&&s.jsx(Ir,{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(cm,{storageId:"control-center",resetSignal:o+(i?0:1),defaultModel:a,panels:[{id:"controls",title:"Controls",weight:1,content:s.jsx(r1,{})},{id:"configuration",title:"Configuration",weight:1,content:s.jsx(Jw,{})}]})]})},vm=()=>globalThis.__bvSmartPipeEditorBridge??{},hf=e=>String(e?.type??e?.comfyClass??""),Ec=e=>hf(e)==="BV Smart Pipe Merge"?"merge":"pipe",rs=()=>gt().rootGraph??gt().graph,uh=()=>sf(rs(),e=>["BV Smart Pipe","BV Smart Pipe Merge"].includes(hf(e)));function n1(){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,f]=m.useState(null),d=()=>({mode:"floating",geometry:{x:Math.max(16,(window.innerWidth-860)/2),y:Math.max(16,(window.innerHeight-650)/2),width:860,height:650}}),p=E=>`${E.kind}:${sa(rs(),E.node)}`,g=(E,b)=>c.current.get(E)?.dirty?f({key:E,action:b}):b(),x=(E,b)=>{const h=p(E),v=r,_=()=>{Zr(E.kind,sa(rs(),E.node)),t(y=>{const T=b&&v&&v!==h?y.filter(L=>L.key!==v):y;return T.some(L=>L.key===h)?T:[...T,{key:h,target:E}]}),l(y=>({...y,[h]:v&&y[v]?structuredClone(y[v]):y[h]??d()})),o(h),i(y=>y+1)};b&&v&&v!==h?g(v,_):_()},w=E=>g(E,()=>{c.current.delete(E),t(b=>b.filter(h=>h.key!==E)),l(b=>{const h={...b};return delete h[E],h}),o(b=>b===E?null:b)});return m.useEffect(()=>{const E=b=>{const h=b.detail;h?.node&&x({node:h.node,kind:h.kind??Ec(h.node)},Qn()==="replace")};return window.addEventListener("bv-open-smart-pipe-editor",E),()=>window.removeEventListener("bv-open-smart-pipe-editor",E)}),s.jsxs(s.Fragment,{children:[e.map(E=>{const b=a[E.key]??d();return s.jsx(i1,{sessionKey:E.key,target:E.target,open:E.key===r,activation:n,presentation:b,onPresentation:h=>l(v=>({...v,[E.key]:h})),onActions:h=>c.current.set(E.key,h),onClose:()=>w(E.key),onRemap:h=>t(v=>v.map(_=>_.key===E.key?{..._,target:{node:h,kind:Ec(h)}}:_)),onNavigate:(h,v)=>x({node:h,kind:Ec(h)},v)},E.key)}),e.filter(E=>E.key!==r).map(E=>s.jsx(zs,{title:`${E.target.kind==="merge"?"Smart Pipe Merge":"Smart Pipe Editor"} · ${E.target.node.title||`#${E.target.node.id}`}`,onRestore:()=>x(E.target,!1),onClose:()=>w(E.key)},`shelf:${E.key}`)),s.jsx(Jd,{open:!!u,editorName:"Smart Pipe editor",onKeep:()=>f(null),onDiscard:()=>{const E=u;E&&c.current.get(E.key)?.discard(),f(null),E?.action()},onSave:()=>{const E=u;E&&c.current.get(E.key)?.save(),f(null),E?.action()}})]})}function i1({sessionKey:e,target:t,open:r,activation:o,presentation:n,onPresentation:i,onActions:a,onClose:l,onRemap:c,onNavigate:u}){const f=vm()[t.kind],d=m.useMemo(()=>f?.read(t.node)??{},[f,t.node]),p=Ds(d),g=p.value;Is(p);const x=m.useRef(structuredClone(d)),w=m.useRef(!1),[E,b]=m.useState(null),h=m.useMemo(()=>sa(rs(),t.node),[t.node]);m.useEffect(()=>{const z=()=>{const S=uh().find(A=>A.key===h);if(!S){b("missing");return}if(S.node!==t.node){c(S.node);return}if(w.current)return;const k=f?.read(t.node)??{};if(JSON.stringify(k)===JSON.stringify(x.current))return;if(!p.canUndo){x.current=structuredClone(k),p.replace(k,!0),b(null);return}const j=Uu(x.current,g,k);j.ok?(x.current=structuredClone(k),p.replace(j.value)):b(j.reason)};return Xr().addEventListener("graphChanged",z),()=>Xr().removeEventListener("graphChanged",z)},[f,g,p.canUndo,p.replace,c,t.node,h]);const v=Ta(t.node),_=uh(),y=_.filter(z=>hn(z.node)).map(z=>({value:z.key,label:`${z.breadcrumb?`${z.breadcrumb} › `:""}${z.node.title||hf(z.node)} · #${z.node.id}`})),T=z=>p.commit(S=>(z(S),S)),L=t.kind==="pipe"?f?.validation?.(t.node,g)??[]:[],B=()=>{w.current=!0;try{f?.save(t.node,g);const z=f?.read(t.node)??g;x.current=structuredClone(z),p.replace(z,!0),b(null)}finally{w.current=!1}},C=()=>{const z=f?.read(t.node)??{};x.current=structuredClone(z),p.replace(z,!0),b(null)};m.useEffect(()=>{a({dirty:p.canUndo,save:B,discard:C})},[f,g,p.canUndo,p.replace,a,e,t.node]);const I=s.jsx(Ra,{label:"Smart Pipe node",value:_.find(z=>z.node===t.node)?.key??"",options:y,onNavigate:(z,S)=>{const k=_.find(j=>j.key===z);k&&u(k.node,S)}});return s.jsx(ci,{open:r,activationToken:o,title:t.kind==="merge"?"Smart Pipe Merge":"Smart Pipe Editor",shortTitle:"Smart Pipe",menuVisible:v,onMenuVisible:z=>li(t.node,z),context:I,mode:n.mode,initialGeometry:n.geometry,onModeChange:z=>i({...n,mode:z}),onGeometry:z=>i({...n,geometry:z}),minSize:{width:420,height:360},onClose:l,status:L.length?"Required inputs missing":p.canUndo?"Unsaved changes":"Saved",actions:s.jsx(pf,{primary:s.jsx(ae,{intent:"primary",onClick:B,children:"Save"}),secondary:s.jsxs(s.Fragment,{children:[s.jsx(ae,{disabled:!p.canUndo,onClick:C,children:"Discard"}),s.jsx(ts,{label:t.kind==="merge"?"Smart Pipe Merge":"Smart Pipe",value:{schema:"bv.editor-draft",version:1,type:t.kind,data:g},onImport:z=>{if(z?.schema!=="bv.editor-draft"||z?.version!==1||z?.type!==t.kind||!z?.data)throw new Error("Draft type or version does not match this editor.");p.replace(z.data)}})]}),overflow:[{id:"undo",label:"Undo",disabled:!p.canUndo,onSelect:p.undo},{id:"redo",label:"Redo",disabled:!p.canRedo,onSelect:p.redo}]}),children:E?s.jsxs(Ir,{tone:"danger",title:E==="missing"?"Node no longer exists":"Smart Pipe changed externally",children:[E==="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(ts,{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(ae,{onClick:()=>{if(E==="missing")l();else{const z=f?.read(t.node)??{};x.current=structuredClone(z),p.replace(z,!0),b(null)}},children:E==="missing"?"Close window":"Reload editor"})]})]}):t.kind==="pipe"?s.jsx(a1,{node:t.node,draft:g,update:T}):s.jsx(l1,{draft:g,update:T})})}function a1({node:e,draft:t,update:r}){const o=vm().pipe,[n,i]=m.useState(()=>o?.predecessor(e)??{value:"Start new pipe",options:[]}),a=o?.validation?.(e,t)??[];m.useEffect(()=>{const d=()=>i(o?.predecessor(e)??{value:"Start new pipe",options:[]});Xr().addEventListener("graphChanged",d);const p=window.setInterval(d,750);return()=>{Xr().removeEventListener("graphChanged",d),window.clearInterval(p)}},[o,e]);const l=t.definition?.localSlots??[],c=t.projection?.inheritedSlots??[],u=[...l.map((d,p)=>({id:d.id,title:d.name||"New slot",description:"Local · input required",summary:d.type||"*",content:s.jsxs("div",{className:"bv-ui-stack",children:[s.jsx(ln,{label:"Name",value:d.name??"",onValue:g=>r(x=>{x.definition.localSlots[p].name=g})}),s.jsx(ln,{label:"Type",value:d.type??"*",onValue:g=>r(x=>{x.definition.localSlots[p].type=g||"*"})}),s.jsx(qr,{label:"Expose output",checked:!!d.showOutput,onValue:g=>r(x=>{x.definition.localSlots[p].showOutput=g})})]})})),...c.map((d,p)=>({id:d.id,title:d.name||d.id,description:"Inherited override",content:s.jsxs("div",{className:"bv-ui-stack",children:[s.jsx(qr,{label:"Expose input",checked:!!d.showInput,onValue:g=>r(x=>{x.projection.inheritedSlots[p].showInput=g})}),s.jsx(qr,{label:"Expose output",checked:!!d.showOutput,onValue:g=>r(x=>{x.projection.inheritedSlots[p].showOutput=g})})]})}))],f=()=>r(d=>{d.definition.localSlots.push({id:crypto.randomUUID(),name:"new_slot",ordinal:d.definition.nextOrdinal++,type:"*",showInput:!0,showOutput:!1})});return s.jsxs("div",{className:"bv-ui-stack",children:[s.jsx(pt,{label:"Pipe predecessor",value:n.value,options:n.options.length?n.options:[{value:n.value,label:n.value}],onValue:d=>{o?.setPredecessor(e,d),i(o?.predecessor(e)??{value:d,options:n.options})}}),a.length>0&&s.jsx(Ir,{tone:"danger",title:"Required Smart Pipe inputs are missing",children:a.map(d=>s.jsx("div",{children:d.message},d.id))}),s.jsx(ae,{onClick:f,children:"Add slot"}),u.length?s.jsx(Ms,{items:u,onReorder:d=>r(p=>{const g=new Map(p.definition.localSlots.map(x=>[x.id,x]));p.definition.localSlots=d.map(x=>g.get(x.id)).filter(Boolean)}),onRemove:d=>r(p=>{p.definition.localSlots=p.definition.localSlots.filter(g=>g.id!==d),p.projection.inheritedSlots=p.projection.inheritedSlots.filter(g=>g.id!==d)})}):s.jsx(As,{title:"No slots",description:"Add a local slot or connect a predecessor."})]})}function l1({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(pt,{label:"Wireless source",value:o,options:(e.candidates??[]).map(c=>({value:c.address,label:c.label})),onValue:n}),s.jsx(ae,{disabled:!a,onClick:l,children:"Add"})]}),i.length?s.jsx(Ms,{items:i,onReorder:c=>t(u=>{const f=new Map(u.sources.map(d=>[d.key,d]));u.sources=c.map(d=>f.get(d.id)).filter(Boolean)}),onRemove:c=>t(u=>{u.sources=u.sources.filter(f=>f.key!==c)})}):s.jsx(As,{title:"No merge sources",description:"Connect a pipe or add a wireless source."})]})}const s1=`: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 label{display:grid;grid-template-columns:72px 1fr;align-items:center;gap:6px}.bv-resource-picker select{min-width:0}.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-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}`,c1='.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 u1(e){return!e||!e.enabled||e.authoring.locked?null:e.id}function d1(e,t,r=3){return Math.hypot(t.x-e.x,t.y-e.y)>=r}function f1(e,t,r,o=12){return e>=3&&Math.hypot(r.x-t.x,r.y-t.y)<=o}function p1(e){return[...e].sort((t,r)=>r.priority-t.priority)}function h1(e){e.forEach((t,r)=>{t.priority=r})}function g1(e){return e==="draw-brush"}function dh(e){return[...e].sort((t,r)=>t.priority-r.priority)}const b1=[{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 v1({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,f=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}),d=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})})}),f,d>0&&(e.shape==="square"?s.jsx("rect",{x:c.x*t.width-d/2,y:c.y*t.height-d/2,width:d,height:d,fill:r,fillOpacity:e.opacity}):s.jsx("circle",{cx:c.x*t.width,cy:c.y*t.height,r:d/2,fill:r,fillOpacity:e.opacity}))]})}if((e.pressure_mode??"constant")==="constant"){const c=e.points.map((u,f)=>`${f?"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 f=e.points[u],d=(f.pressure+c.pressure)/2;return s.jsx("line",{x1:f.x*t.width,y1:f.y*t.height,x2:c.x*t.width,y2:c.y*t.height,stroke:r,strokeOpacity:e.opacity,strokeWidth:n*d,strokeLinecap:o},u)})})}function m1({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 x1({region:e,geometries:t,canvas:r,opacity:o,resolved:n}){const i=Hw(t).filter(u=>u.enabled&&(n||u.geometries.some((f,d)=>ir(f,d).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 f=`bv-mask-${e.id}-${u.id}`;return s.jsxs("g",{children:[s.jsx("defs",{children:s.jsxs("mask",{id:f,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((d,p)=>d.enabled!==!1&&(n||ir(d,p).visible)).map(d=>s.jsx(v1,{geometry:d,canvas:r},d.id))]})}),s.jsx("rect",{width:r.width,height:r.height,fill:e.authoring.color,mask:`url(#${f})`})]},u.id)})})]})}function y1(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),[f,d]=m.useState({x:e.initialView.panX,y:e.initialView.panY}),[p,g]=m.useState(e.initialView.fit),[x,w]=m.useState(!1),E=m.useCallback((S=a)=>Math.max(.02,Math.min(1,(S.width-40)/t.canvas.width,(S.height-40)/t.canvas.height)),[t.canvas.height,t.canvas.width,a]),b=m.useCallback(()=>{u(E()),d({x:0,y:0}),g(!0)},[E]);m.useEffect(()=>{const S=n.current;if(!S)return;const k=new ResizeObserver(j=>{const A=j[0].contentRect,R={width:A.width,height:A.height};l(R),p&&(u(Math.max(.02,Math.min(1,(R.width-40)/t.canvas.width,(R.height-40)/t.canvas.height))),d({x:0,y:0}))});return k.observe(S),()=>k.disconnect()},[t.canvas.height,t.canvas.width,p]),m.useEffect(()=>e.onView({zoom:c,panX:f.x,panY:f.y,fit:p}),[p,f.x,f.y,e.onView,c]),m.useEffect(()=>{const S=j=>{const A=j.target;j.code!=="Space"||A instanceof HTMLInputElement||A instanceof HTMLTextAreaElement||A instanceof HTMLSelectElement||A?.isContentEditable||(j.preventDefault(),j.stopImmediatePropagation(),w(!0))},k=j=>{j.code==="Space"&&(j.preventDefault(),j.stopImmediatePropagation(),w(!1),i.current=null)};return window.addEventListener("keydown",S,!0),window.addEventListener("keyup",k,!0),()=>{window.removeEventListener("keydown",S,!0),window.removeEventListener("keyup",k,!0)}},[]);const h=S=>{let k=[...S.geometry];if(e.draft&&S.id===o){const j=new Set(e.draft.map(A=>A.id));k=k.map(A=>j.has(A.id)?e.draft.find(R=>R.id===A.id):A);for(const A of e.draft)k.some(R=>R.id===A.id)||k.push(A)}return!e.binaryMaskPreview&&e.isolate&&r&&(k=k.filter(j=>Pt(j)===r)),k},v=e.brush.size*Math.min(t.canvas.width,t.canvas.height)/t.canvas.width*100,_=S=>{S.preventDefault();const k=S.currentTarget.getBoundingClientRect(),j=S.clientX-k.left,A=S.clientY-k.top,R=Math.max(.02,Math.min(8,c*Math.exp(-S.deltaY*.0015))),O=R/c;d(D=>({x:j-k.width/2-(j-k.width/2-D.x)*O,y:A-k.height/2-(A-k.height/2-D.y)*O})),u(R),g(!1)},y=S=>{S.button!==1&&!(S.button===0&&x)||(S.preventDefault(),S.stopPropagation(),S.currentTarget.setPointerCapture(S.pointerId),i.current={x:S.clientX,y:S.clientY,panX:f.x,panY:f.y},g(!1))},T=S=>{i.current&&(S.preventDefault(),S.stopPropagation(),d({x:i.current.panX+S.clientX-i.current.x,y:i.current.panY+S.clientY-i.current.y}))},L=S=>{i.current&&(S.preventDefault(),S.stopPropagation(),i.current=null)},B=a.width/2-t.canvas.width*c/2+f.x,C=a.height/2-t.canvas.height*c/2+f.y,I=10/c,z=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:L,onPointerCancelCapture:L,children:[s.jsx(Yw,{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(${B}px, ${C}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:p1(t.regions.filter(S=>S.enabled&&(e.binaryMaskPreview||S.authoring.visible))).map(S=>s.jsx(x1,{region:e.binaryMaskPreview?{...S,authoring:{...S.authoring,color:"#FFFFFF"}}:S,geometries:h(S),canvas:t.canvas,opacity:e.binaryMaskPreview?1:e.displayOpacity,resolved:e.binaryMaskPreview},S.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(S=>s.jsx(m1,{geometry:S,canvas:t.canvas,cursor:e.cursor,activePolygon:e.tool.startsWith("polygon")},S.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}),b1.map(S=>{const k=(e.selectionBounds.x+e.selectionBounds.width*S.x)*t.canvas.width,j=(e.selectionBounds.y+e.selectionBounds.height*S.y)*t.canvas.height;return s.jsxs("g",{"data-handle":S.id,className:`resize-handle resize-handle-${S.id}`,children:[s.jsx("rect",{className:"resize-handle-hit",x:k-z/2,y:j-z/2,width:z,height:z}),s.jsx("rect",{className:"resize-handle-visible",x:k-I/2,y:j-I/2,width:I,height:I,rx:2/c})]},S.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:S=>S.stopPropagation(),children:[s.jsx(ae,{intent:"ghost",title:"Zoom out",onClick:()=>{u(S=>Math.max(.02,S/1.25)),g(!1)},children:"−"}),s.jsxs(ae,{intent:"ghost",title:"100%",onClick:()=>{u(1),d({x:0,y:0}),g(!1)},children:[Math.round(c*100)," %"]}),s.jsx(ae,{intent:"ghost",title:"Zoom in",onClick:()=>{u(S=>Math.min(8,S*1.25)),g(!1)},children:"+"}),s.jsx(ae,{intent:"ghost",title:"Fit to view",onClick:b,children:"Fit"})]})]})})}const mm="BV.NodePack.Completion.Enabled",xm="BV.NodePack.Completion.Datasets",ym="BV.NodePack.Completion.Placement",_m="bv-nodepack:completion-enabled",pa="bv-completion-enabled-changed",ha="bv-completion-placement-changed",gf="bv-nodepack:completion-datasets",wm="bv-nodepack:completion-placement",os="bv-completion-datasets-changed";let km=null,Em=null,Tm=null;function Wu(){try{return localStorage.getItem(wm)==="field"?"field":"caret"}catch{return"caret"}}function _1(e){Tm=e}function Rm(e,t=!1){const r=e==="field"?"field":"caret";try{localStorage.setItem(wm,r)}catch{}t&&Tm?.(r),window.dispatchEvent(new CustomEvent(ha,{detail:{placement:r}}))}function Sm(){const[e,t]=m.useState(Wu);return m.useEffect(()=>{const r=o=>t(o.detail?.placement==="field"?"field":"caret");return window.addEventListener(ha,r),()=>window.removeEventListener(ha,r)},[]),e}function bf(){try{return localStorage.getItem(_m)!=="false"}catch{return!0}}function w1(e){km=e}function Lm(e,t=!1){try{localStorage.setItem(_m,String(e))}catch{}t&&km?.(e),window.dispatchEvent(new CustomEvent(pa,{detail:{enabled:e}}))}function Cm(){const[e,t]=m.useState(bf);return m.useEffect(()=>{const r=o=>t(!!o.detail?.enabled);return window.addEventListener(pa,r),()=>window.removeEventListener(pa,r)},[]),e}function Nm(){try{const e=localStorage.getItem(gf);if(e==null)return null;const t=JSON.parse(e);return Array.isArray(t)?t.map(String):null}catch{return null}}function k1(e){Em=e}function Om(e,t=!1){const r=[...new Set(e.map(String))];try{localStorage.setItem(gf,JSON.stringify(r))}catch{}t&&Em?.(JSON.stringify(r)),window.dispatchEvent(new CustomEvent(os,{detail:{datasets:r}}))}function Mm(e){if(e==null||e===""){try{localStorage.removeItem(gf)}catch{}window.dispatchEvent(new CustomEvent(os,{detail:{datasets:null}}));return}try{const t=typeof e=="string"?JSON.parse(e):e;Array.isArray(t)&&Om(t.map(String))}catch{}}function E1(){const[e,t]=m.useState(Nm);return m.useEffect(()=>{const r=o=>t(o.detail?.datasets??null);return window.addEventListener(os,r),()=>window.removeEventListener(os,r)},[]),e}function Am({onSelectionChange:e}={}){const t=E1(),[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=>{Om(g,!0),e?.(g)},u=g=>c(l.includes(g)?l.filter(x=>x!==g):[...l,g]),f=(g,x)=>{const w=l.indexOf(g),E=w+x;if(w<0||E<0||E>=l.length)return;const b=[...l];[b[w],b[E]]=[b[E],b[w]],c(b)},d=new Map(r.map(g=>[g.id,g])),p=[...l.map(g=>d.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(ae,{intent:"ghost",iconOnly:!0,disabled:!w||x===0,title:"Move up",onClick:()=>f(g.id,-1),children:"↑"}),s.jsx(ae,{intent:"ghost",iconOnly:!0,disabled:!w||x===l.length-1,title:"Move down",onClick:()=>f(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(ae,{onClick:()=>void a(),children:"Reload List"})]})}function T1(e){const t=Cm(),r=Sm(),o=e.openMenu,n=m.useRef(null),{menuOverflow:i}=pm(),a=m.useRef(null),l=m.useRef(null);m.useEffect(()=>{const f=d=>{n.current?.contains(d.target)||e.onOpenMenu(null)};return window.addEventListener("pointerdown",f),()=>window.removeEventListener("pointerdown",f)},[e.onOpenMenu]);const c=(f,d,p)=>s.jsx(Up,{open:o===f,onOpen:g=>e.onOpenMenu(g?f:null),trigger:({toggle:g})=>s.jsxs(ae,{intent:"ghost",density:"compact","aria-label":d,title:d,"aria-expanded":o===f,onClick:g,children:[s.jsx("span",{className:"editor-menu-label-full",children:d}),s.jsx("span",{className:"editor-menu-label-short","aria-hidden":"true",children:d==="?"?d:d[0]})]}),children:p}),u=s.jsxs(s.Fragment,{children:[c("file","File",s.jsxs("div",{className:"bv-menu-stack",children:[s.jsx(ae,{intent:"ghost",onClick:()=>{e.onExportDocument(),e.onOpenMenu(null)},children:"Export Document"}),s.jsx(ae,{intent:"ghost",onClick:()=>a.current?.click(),children:"Load and Replace Document"}),s.jsx("hr",{}),s.jsx(ae,{intent:"ghost",onClick:()=>{e.onExportRegions(),e.onOpenMenu(null)},children:"Export Regions"}),s.jsx(ae,{intent:"ghost",onClick:()=>l.current?.click(),children:"Add Regions"})]})),c("edit","Edit",s.jsxs("div",{className:"bv-menu-stack",children:[s.jsxs(ae,{intent:"ghost",disabled:!e.canUndo,onClick:e.onUndo,children:["Undo ",s.jsx("kbd",{children:"Ctrl Z"})]}),s.jsxs(ae,{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:f=>Lm(f,!0)}),s.jsx(pt,{label:"Popup Position",value:r,onValue:f=>Rm(f,!0),options:[{value:"caret",label:"At Caret"},{value:"field",label:"Below Text Field"}]}),s.jsx(Am,{})]})),c("view","View",s.jsxs("div",{className:"bv-menu-stack",children:[s.jsx(jt,{label:"Mask Display",value:e.displayOpacity,min:.05,max:1,step:.05,unit:"×",onValue:e.onDisplayOpacity}),s.jsx(jt,{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(jt,{label:"Width",value:e.canvas.width,min:1,max:32768,step:1,unit:"px",slider:!1,onValue:f=>e.onCanvas({...e.canvas,width:f})}),s.jsx(jt,{label:"Height",value:e.canvas.height,min:1,max:32768,step:1,unit:"px",slider:!1,onValue:f=>e.onCanvas({...e.canvas,height:f})})]})),c("layers","Layers",s.jsxs("div",{className:"bv-menu-stack",children:[s.jsxs(ae,{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(Fp,{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(Fp,{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(Up,{trigger:({toggle:f})=>s.jsx(ae,{intent:"ghost",density:"compact","aria-label":"Editor menus",onClick:f,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:f=>{const d=f.target.files?.[0];d&&e.onImportDocument(d),f.target.value=""}}),s.jsx("input",{hidden:!0,ref:l,type:"file",accept:"application/json,.json",onChange:f=>{const d=f.target.files?.[0];d&&e.onImportRegions(d),f.target.value=""}})]})}function Dm(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 f=n-l.length+c;return{...r,text:e,caret:n,term:u,start:f,end:n,limit:o}}function Im(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 jm(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 Pm={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:Nm()}),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:{}}]:[]})}},R1=["fontFamily","fontSize","fontStyle","fontWeight","letterSpacing","lineHeight","textTransform","textIndent","textAlign","wordSpacing","paddingTop","paddingRight","paddingBottom","paddingLeft","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth"];function S1(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"}),R1.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 f=c.getBoundingClientRect(),d=u.getBoundingClientRect(),p=Number.parseFloat(o.lineHeight)||Number.parseFloat(o.fontSize)*1.2||16;c.remove();const g=r.left+(d.left-f.left)*a,x=r.top+(d.top-f.top)*l;return{left:g,top:x,bottom:x+p*l}}function ns(e,t,r=210){const i=e.getBoundingClientRect(),a=t==="caret"?S1(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)),f=a.bottom+4,d=f+r<=window.innerHeight-4?f:Math.max(4,a.top-r-4);return{left:u,top:d,width:c}}function Bm({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(ae,{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 is({value:e,onValue:t,completionContext:r,onKeyDown:o,onBlur:n,onSelect:i,...a}){const l=Cm(),c=Sm(),u=m.useRef(null),[f,d]=m.useState([]),[p,g]=m.useState(0),[x,w]=m.useState(null),E=m.useRef(null),b=m.useRef(null),h=m.useRef(null),v=m.useRef(210),_=m.useRef(()=>{}),y=()=>{b.current?.abort(),d([]),w(null)},T=()=>{const C=u.current;C&&w(ns(C,c,v.current))},L=(C,I,z=I)=>{if(!l||I!==z)return y();h.current!=null&&window.clearTimeout(h.current),b.current?.abort();const S=Dm(C,I,r);if(E.current=S,!S)return y();const k=new AbortController;b.current=k,h.current=window.setTimeout(async()=>{const j=await jm(S,[Pm],k.signal);if(k.signal.aborted)return;const A=u.current;d(j),g(0),w(j.length&&A?ns(A,c):null)},120)};_.current=L;const B=(C=p)=>{const I=E.current,z=f[C];if(!I||!z)return;const S=Im(e,I,z);t(S.text),y(),requestAnimationFrame(()=>{u.current?.focus(),u.current?.setSelectionRange(S.caret,S.caret)})};return m.useEffect(()=>{l||y()},[l]),m.useEffect(()=>{const C=()=>{const I=u.current;I&&document.activeElement===I&&_.current(I.value,I.selectionStart,I.selectionEnd)};return document.addEventListener("selectionchange",C),()=>document.removeEventListener("selectionchange",C)},[]),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(Pw,{...a,ref:u,value:e,onChange:C=>{t(C.target.value),L(C.target.value,C.target.selectionStart,C.target.selectionEnd)},onSelect:C=>{L(C.currentTarget.value,C.currentTarget.selectionStart,C.currentTarget.selectionEnd),i?.(C)},onKeyDown:C=>{if(f.length){if(C.key==="ArrowDown"||C.key==="ArrowUp"){C.preventDefault(),C.stopPropagation(),g(I=>(I+(C.key==="ArrowDown"?1:-1)+f.length)%f.length);return}if(C.key==="Enter"||C.key==="Tab"){C.preventDefault(),C.stopPropagation(),B();return}if(C.key==="Escape"){C.preventDefault(),C.stopPropagation(),y();return}}o?.(C)},onBlur:C=>{window.setTimeout(y,120),n?.(C)}})}),l&&x&&s.jsx(Bm,{suggestions:f,selected:p,position:x,onAccept:B,onHeight:C=>{Math.abs(C-v.current)<1||(v.current=C,T())}})]})}function xn({label:e,help:t,value:r,onChange:o,children:n,disabled:i,className:a=""}){const l=Te.Children.toArray(n).flatMap(c=>Te.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(pt,{label:e,help:t,value:r,onValue:o,options:l,disabled:i})})}function _n({onChange:e,...t}){return s.jsx(jt,{...t,onValue:e})}const fh=({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))]}),Tc=({title:e,scope:t,value:r,open:o,onOpen:n,onChange:i})=>s.jsx(ql,{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(wr,{label:"Positive",children:s.jsx(is,{value:r.positive_source,onValue:a=>i({...r,positive_source:a}),completionContext:{scope:t,polarity:"positive"}})}),s.jsx(wr,{label:"Negative",children:s.jsx(is,{value:r.negative_source,onValue:a=>i({...r,negative_source:a}),completionContext:{scope:t,polarity:"negative"}})})]})}]}),L1=({region:e,automaticColor:t,onRegion:r})=>s.jsxs("section",{className:"bv-inspector-section",children:[s.jsx("h3",{children:"Mask & appearance"}),s.jsx(_n,{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(Uw,{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(ae,{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 C1(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(Kd,{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(ae,{intent:"ghost",role:"tab","aria-selected":r==="selection",disabled:!e.layer,onClick:()=>o("selection"),children:"Selection"}),s.jsx(ae,{intent:"ghost",role:"tab","aria-selected":r==="region",disabled:!e.region,onClick:()=>o("region"),children:"Region"}),s.jsx(ae,{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(L1,{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(_n,{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(_n,{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(_n,{label:"Hardness",value:t.hardness,min:0,max:1,step:.05,onChange:n=>e.onBrushSetting("hardness",n)}),s.jsx(_n,{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(xn,{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(xn,{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(xn,{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"})]}),s.jsx(xn,{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(fh,{stacks:e.loraStacks})}),s.jsx(_n,{label:"Strength",value:e.region.strength,min:0,max:10,step:.05,onChange:n=>e.onRegion(i=>{i.strength=n})}),s.jsx(Tc,{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"}),s.jsx(xn,{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(fh,{stacks:e.loraStacks})}),s.jsxs(xn,{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(Tc,{title:"Global",scope:"global",value:e.globalPrompts,open:e.promptSections.global,onOpen:n=>e.onPromptSection("global",n),onChange:e.onGlobalPrompts}),s.jsx(Tc,{title:"Background",scope:"background",value:e.backgroundPrompts,open:e.promptSections.background,onOpen:n=>e.onPromptSection("background",n),onChange:e.onBackgroundPrompts})]})})]})})}const rt=(e,t=0,r=1)=>Math.max(t,Math.min(r,e));function N1(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(d=>d.x),o=e.points.map(d=>d.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=rt(Math.min(...r)-i),c=rt(Math.min(...o)-a),u=rt(Math.max(...r)+i),f=rt(Math.max(...o)+a);return{x:l,y:c,width:u-l,height:f-c}}function zm(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=rt(((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 O1(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!=f.y>t.y&&t.x<(f.x-u.x)*(t.y-u.y)/(f.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)=>zm(i,o(e.points[l]),o(a))<=n)}function Fs(e,t){const r=e.map(l=>N1(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 ph(e,t,r,o){const n=Fs(e,o);return t=rt(t,-n.x,1-n.x-n.width),r=rt(r,-n.y,1-n.y-n.height),e.map(i=>{const a=Xt(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 Fm(e,t,r){const o=Fs(e,r);t={x:rt(t.x,0,.998),y:rt(t.y,0,.998),width:rt(t.width,.002,1),height:rt(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=Xt(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=rt(l.size*Math.sqrt(n*i),.001,1))),l})}function M1(e,t,r,o,n=!1,i){const a=Fs(e,i);let l=a.x,c=a.y,u=l+a.width,f=c+a.height;if(t.includes("w")&&(l=rt(l+r,0,u-.002)),t.includes("e")&&(u=rt(u+r,l+.002,1)),t.includes("n")&&(c=rt(c+o,0,f-.002)),t.includes("s")&&(f=rt(f+o,c+.002,1)),n&&t.length===2){const d=a.width/Math.max(a.height,1e-4),p=u-l,g=f-c;if(p/g>d){const x=p/d;t.includes("n")?c=rt(f-x):f=rt(c+x)}else{const x=g*d;t.includes("w")?l=rt(u-x):u=rt(l+x)}}return Fm(e,{x:l,y:c,width:u-l,height:f-c},i)}function A1(e,t,r){return zm(e,t,r)}function D1(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 hh=e=>e.layer_id??e.id,I1=e=>e.authoring??{name:"Layer",visible:!0,locked:!1};function j1(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 P1(e,t,r){const o=new Set(t);if(o.size<2||!o.has(r))return!1;const n=e.geometry.find(l=>hh(l)===r);if(!n)return!1;const i=I1(n);let a=!1;return e.geometry.forEach(l=>{const c=hh(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 Um(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 B1="bv-regional-editor-state-v1:",tt=(e,t)=>typeof e=="number"&&Number.isFinite(e)?e:t,Et=(e,t,r)=>Math.max(t,Math.min(r,e)),z1=["select","rect-add","rect-subtract","ellipse-add","ellipse-subtract","polygon-add","polygon-subtract","brush-add","brush-subtract"];function Wm(e){return`${B1}${e}`}function F1(e,t,r={width:520,height:560}){return{x:Et(tt(e.x,t.width-r.width-24),-r.width+52,t.width-52),y:Et(tt(e.y,84),72,Math.max(72,t.height-52))}}function as(e,t){const r=Et(tt(e.width,520),Math.min(360,t.width),Math.max(360,t.width-32)),o=Et(tt(e.height,640),Math.min(320,t.height),Math.max(320,t.height-32));return{...F1({x:tt(e.x,t.width-r-24),y:tt(e.y,84)},t,{width:r}),width:r,height:o}}function gh(e,t){return e.mode==="workspace"?cn({x:24,y:58,width:t.width-48,height:t.height-82},t,"workspace"):e.windows.floating}function cn(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=Et(tt(e.width,o),o,i),c=Et(tt(e.height,n),n,a),u=r==="workspace"?8:0;return{x:Et(tt(e.x,u),u-l+80,t.width-u-80),y:Et(tt(e.y,58),0,t.height-42),width:l,height:c}}function vf(e={width:window.innerWidth,height:window.innerHeight}){const t=cn({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=cn({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:as({x:e.width-544,y:84,width:520,height:640},e)}}function U1(e,t={width:window.innerWidth,height:window.innerHeight}){const r=vf(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:cn(i.workspace??r.windows.workspace,t,"workspace"),floating:cn(i.floating??r.windows.floating,t,"floating")},panels:{left:Et(tt(a.left,290),210,620),right:Et(tt(a.right,340),210,620)},artboard:{zoom:Et(tt(l.zoom,1),.02,8),panX:tt(l.panX,0),panY:tt(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:Et(tt(o.displayOpacity,.5),.05,1),backgroundOpacity:Et(tt(o.backgroundOpacity,1),0,1),isolate:o.isolate===!0,tool:o.tool==="rect"?"rect-add":z1.includes(o.tool)?o.tool:"select",binaryMaskPreview:o.binaryMaskPreview===!0,brush:{size:Et(tt(c.size,.04),.001,1),hardness:Et(tt(c.hardness,.75),0,1),opacity:Et(tt(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:as(o.quickPromptWindow??r.quickPromptWindow,t)}}function wl(e,t=localStorage,r={width:window.innerWidth,height:window.innerHeight}){try{return U1(JSON.parse(t.getItem(Wm(e))||"null"),r)}catch{return vf(r)}}function Vu(e,t,r=localStorage){try{return r.setItem(Wm(e),JSON.stringify(t)),!0}catch{return!1}}function W1(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[f++]=y)}}i.push({label:a,x:d,y:p,width:g-d+1,height:x-p+1,pixels:w})}return{labels:n,areas:i}}const Hu=(e,t)=>{const r=document.createElement("canvas");return r.width=e,r.height=t,r},V1=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 H1(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 V1(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=(d,p,g=0)=>{const x=a*d.pressure*p;e.filter=g>0?`blur(${g}px)`:"none",e.beginPath(),t.shape==="square"?e.rect(d.x*r-x/2,d.y*o-x/2,x,x):e.arc(d.x*r,d.y*o,x/2,0,Math.PI*2),e.fill()},u=(d,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,f),t.hardness>0&&u(t.hardness))}e.restore()}async function $1(e,t,r){const o=Hu(t,r),n=o.getContext("2d",{willReadFrequently:!0}),i=new Map;e.filter(a=>a.enabled!==!1).forEach(a=>{const l=Ea(a),c=i.get(l);c?c.push(a):i.set(l,[a])});for(const a of i.values()){const l=Hu(t,r),c=l.getContext("2d");for(const u of a)await H1(c,u,t,r);n.drawImage(l,0,0)}return o}async function Y1(e,t,r){const i=(await $1(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 d=0;dd.pixels>1);if(u.length<2)return[];const f={...e[0].authoring??{name:"Layer",visible:!0,locked:!1}};return u.map((d,p)=>{const g=Hu(d.width,d.height),x=g.getContext("2d"),w=x.createImageData(d.width,d.height);for(let b=0;b({schema:"bv.regional.lora_bindings",version:1,document_id:e,global_stack_id:null,regions:{}});function X1(e,t,r){if(!t)return!1;const o=r.filter(n=>n.id===t);return o.length>1&&o[0].nodeId!==e}function mf(e,t){if(e==null||e==="")return Us(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 Un(e,t){const r=Object.fromEntries(Object.entries(e.regions).filter(([o])=>t.has(o)));return{...e,regions:r}}function Rc(e,t){const r=structuredClone(e);return{document:r,loraBindings:structuredClone(Un(t,new Set(r.regions.map(o=>o.id))))}}function G1(e,t,r){const o=t.find((c,u)=>t.findIndex(f=>f.id===c.id)!==u);if(o)return[`Duplicate LoRA stack ID: ${o.id}`];const n=t.find((c,u)=>t.findIndex(f=>f.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 K1(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 ls=(e,t)=>e.regions.find(r=>r.id===t)??null,$u=(e,t)=>e?Lr(e).find(r=>r.id===t)??null:null,Yu=e=>e.kind==="layer"||e.kind==="geometry"?e.layerId:null;function q1(e,t){const r=ls(e,t.source.regionId),o=ls(e,t.target.regionId);if(!r||!o||r.authoring.locked||o.authoring.locked||t.source.kind!=="region"&&$u(r,t.source.layerId)?.authoring.locked)return!1;const n=Yu(t.target);return!(n&&$u(o,n)?.authoring.locked)}function J1(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 Z1(e,t,r){if(!q1(e,t))return!1;const o=structuredClone(e.regions),n=()=>e.regions.every(d=>xv(d.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 d=e.regions.findIndex(x=>x.id===t.source.regionId),[p]=e.regions.splice(d,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=ls(e,t.source.regionId),a=ls(e,t.target.regionId);if(t.source.kind==="layer"){const d=t.source;if(t.target.kind==="geometry"||d.layerId===Yu(t.target))return!1;const p=i.geometry.filter(g=>Pt(g)===d.layerId);return p.length?(i.geometry=i.geometry.filter(g=>Pt(g)!==d.layerId),J1(a,p,Yu(t.target),t.position),n()):!1}const l=t.source,c=i.geometry.findIndex(d=>d.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={...ir(u)},a.geometry.push(u),n();const f=t.target.layerId;if((f!==l.layerId||a!==i)&&(u.mask_group_id??(u.mask_group_id=l.layerId),u.layer_id=f,u.authoring={...$u(a,f).authoring}),t.target.kind==="layer"||t.position==="inside"){const d=a.geometry.map((p,g)=>Pt(p)===f?g:-1).filter(p=>p>=0);a.geometry.splice(d.length?d[d.length-1]+1:a.geometry.length,0,u)}else{const d=t.target,p=a.geometry.findIndex(g=>g.id===d.geometryId);a.geometry.splice(t.position==="before"?p:p+1,0,u)}return n()}const Po=e=>sa(gt().rootGraph??gt().graph,e),bh=e=>e?.widgets?.find(t=>t.name==="regional_json"),Za=e=>e?.widgets?.find(t=>t.name==="lora_bindings_json"),vh=(e,t)=>e&&t?e.geometry.filter(r=>Pt(r)===t):[],Bo=h1,Sc=(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 mh(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 Q1(e){const t=new Map(e.map(r=>[r.id,Nt()]));return Xt(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,Um(r.geometry,Nt);const o=new Map;return r.geometry.forEach(n=>{const i=Pt(n);o.has(i)||o.set(i,Nt()),n.id=Nt(),n.layer_id=o.get(i)}),r})}function ek({open:e,activationToken:t=0,nodes:r,initialNode:o,backgrounds:n,loraStacks:i,onClose:a}){const[l,c]=m.useState(o),[u,f]=m.useState(null),[d,p]=m.useState(null),[g,x]=m.useState(null),[w,E]=m.useState([]),[b,h]=m.useState(null),[v,_]=m.useState(null),[y,T]=m.useState("select"),[L,B]=m.useState({size:.04,hardness:.75,opacity:1,shape:"round",pressureMode:"constant"}),[C,I]=m.useState(.5),[z,S]=m.useState(1),[k,j]=m.useState(!1),[A,R]=m.useState([]),[O,D]=m.useState([]),[V,F]=m.useState(null),[ne,Y]=m.useState(null),[K,Z]=m.useState(""),[$,Q]=m.useState(()=>vf()),[oe,le]=m.useState(0),[Le,ke]=m.useState([]),[ve,Dt]=m.useState(()=>Us("")),J=Zd(),se=m.useRef(null),ce=m.useRef(!1),X=m.useRef(t),fe=m.useRef(null),pe=m.useCallback(N=>Q(P=>{const W=P.artboard;return W.zoom===N.zoom&&W.panX===N.panX&&W.panY===N.panY&&W.fit===N.fit?P:{...P,artboard:N}}),[]),ge=m.useCallback(N=>Q(P=>P.openMenu===N?P:{...P,openMenu:N}),[]);m.useEffect(()=>{const N=ce.current,P=X.current!==t;if(ce.current=e,X.current=t,!e||!P)return;const W=o??r[0]??null,H=Po(l),q=Po(W);N&&H&&q!==H&&Qn()==="keep"?ke(de=>[...new Set([...de,H])].filter(Re=>Re!==q)):q&&ke(de=>de.filter(Re=>Re!==q)),fe.current=N?{mode:$.mode,geometry:gh($,{width:window.innerWidth,height:window.innerHeight})}:null,c(W)},[t,o,r,e]),m.useEffect(()=>{h(null)},[l,e]),m.useEffect(()=>{if(!(!e||!l))try{const N=sn(bh(l)?.value);N.regions=dh(N.regions),Bo(N.regions);const P=mf(Za(l)?.value,N.document_id),W=Un(P,new Set(N.regions.map(pr=>pr.id))),H=Za(l);H&&JSON.stringify(P)!==JSON.stringify(W)&&(H.value=JSON.stringify(W),H.callback?.(H.value),l.graph?.setDirtyCanvas?.(!0,!0));const q=wl(N.document_id),de=N.regions.some(pr=>pr.id===q.selectedRegionId)?q.selectedRegionId:N.regions[0]?.id??null,Re=fe.current;fe.current=null,Re&&(q.mode=Re.mode,q.windows[Re.mode]=Re.geometry);const ct=N.regions.find(pr=>pr.id===de),Vt=ct&&Lr(ct).some(pr=>pr.id===q.selectedLayerId)?q.selectedLayerId:null;Q(q),f(N),Dt(W),p(de),x(Vt),E(Vt?[Vt]:[]),_(Vt),T(q.tool),B(q.brush),I(q.displayOpacity),S(q.backgroundOpacity),j(q.isolate&&!!Vt),R([]),D([]),Z("")}catch(N){Z(N instanceof Error?N.message:String(N))}},[l,e]),m.useEffect(()=>{u&&Vu(u.document_id,{...$,selectedRegionId:d,selectedLayerId:g,displayOpacity:C,backgroundOpacity:z,isolate:k,tool:y,brush:L})},[z,L,C,u,k,g,d,y,$]),m.useEffect(()=>{if(!e)return;const N=()=>Q(P=>({...P,windows:{workspace:cn(P.windows.workspace,{width:window.innerWidth,height:window.innerHeight},"workspace"),floating:cn(P.windows.floating,{width:window.innerWidth,height:window.innerHeight},"floating")}}));return window.addEventListener("resize",N),()=>window.removeEventListener("resize",N)},[e]);const Ce=u?.regions.find(N=>N.id===d)??null,et=vh(Ce,g),ze=b?et.filter(N=>N.id===b):et,_e=Ce&&g?Lr(Ce).find(N=>N.id===g)??null:null,xe=Ce?Lr(Ce).filter(N=>w.includes(N.id)):[],Fe=xe.length>1&&xe.every(N=>!N.authoring.locked),Ze=!!_e&&!_e.authoring.locked,Ue=N=>{x(N),E(N?[N]:[]),_(N),h(null)},Br=(N,P,W)=>{const H=u?.regions.find(Vt=>Vt.id===N);if(!H)return;const q=N===d,de=[...Lr(H)].reverse().map(Vt=>Vt.id),ct=j1(q?{ids:w,primary:g,anchor:v}:{ids:[],primary:null,anchor:null},P,de,W);p(N),E(ct.ids),x(ct.primary),_(ct.anchor),j(!1),h(null)},gn=V&&g&&V.every(N=>Pt(N)===g)?se.current&&"commit"in se.current&&se.current.commit==="subtract"?[...ze,...V]:V:ze,Do=gn.length&&u?Fs(gn,u.canvas):null,kr=m.useCallback((N,P=!0,W=ve)=>{if(!l)return;P&&u&&(R(Re=>[...Re.slice(-99),Rc(u,ve)]),D([]));const H=Un(W,new Set(N.regions.map(Re=>Re.id)));f(N);const q=bh(l);q&&(q.value=JSON.stringify(N),q.callback?.(q.value)),Dt(H);const de=Za(l);de&&(de.value=JSON.stringify(H),de.callback?.(de.value)),l.graph?.setDirtyCanvas?.(!0,!0)},[u,ve,l]),Ne=m.useCallback((N,P=!0)=>{if(!u)return;const W=Xt(u);N(W),kr(W,P)},[u,kr]),io=m.useCallback(N=>{if(!l)return;const P=u?Un(N,new Set(u.regions.map(H=>H.id))):N;Dt(P);const W=Za(l);W&&(W.value=JSON.stringify(P),W.callback?.(W.value)),l.graph?.setDirtyCanvas?.(!0,!0)},[u,l]),La=N=>io({...ve,global_stack_id:N}),Ca=(N,P)=>{const W={...ve.regions};P?W[N]=P:delete W[N],io({...ve,regions:W})},Na=N=>Ne(P=>{const W=P.regions.find(H=>H.id===d);W&&N(W)}),Io=(N,P)=>Ne(W=>{const H=W.regions.find(q=>q.id===d);H&&P(vh(H,N),H)}),fr=m.useCallback(()=>{se.current=null,F(null)},[]),Oa=m.useCallback(()=>{if(se.current?.mode!=="draw-polygon"||!V?.length)return;const N=V.map(P=>P.type==="polygon"?{...P,points:P.points.filter((W,H,q)=>H===0||Math.hypot(W.x-q[H-1].x,W.y-q[H-1].y)>.001)}:P);if(N.some(P=>P.type!=="polygon"||P.points.length<3))return fr();Ne(P=>{const W=P.regions.find(H=>H.id===d);W&&W.geometry.push(...N)}),fr()},[fr,V,Ne,d]),Ys=m.useCallback(()=>{if(!u||!A.length)return;const N=A[A.length-1];R(A.slice(0,-1)),D([Rc(u,ve),...O]),kr(Xt(N.document),!1,Xt(N.loraBindings))},[u,O,A,ve,kr]),Xs=m.useCallback(()=>{if(!u||!O.length)return;const N=O[0];D(O.slice(1)),R([...A,Rc(u,ve)]),kr(Xt(N.document),!1,Xt(N.loraBindings))},[u,O,A,ve,kr]),Gs=N=>{Io(N,(P,W)=>{W.geometry=W.geometry.filter(H=>Pt(H)!==N)}),w.includes(N)&&Ue(null)},sx=N=>Ne(P=>{const W=P.regions.find(q=>q.id===d),H=W?.geometry.find(q=>q.id===N);H&&(H.enabled=H.enabled===!1)}),cx=N=>{const P=u?.regions.find(W=>W.id===d);if(!P||!Iu(P.geometry,N)){Or({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}Ne(W=>{const H=W.regions.find(q=>q.id===d);H&&(H.geometry=H.geometry.filter(q=>q.id!==N))}),b===N&&h(null)},Tf=()=>{if(!d||!g||!Fe)return;const N=g;Ne(P=>{const W=P.regions.find(H=>H.id===d);W&&P1(W,w,N)}),Ue(N)},ux=async()=>{if(!(!u||!d||!g||!_e||!Ze))try{const N=await Y1(_e.geometries,u.canvas,Nt);if(N.length<2){Or({title:"Layer was not split",message:"The selected layer contains fewer than two disconnected visible areas.",tone:"info",duration:4500});return}Ne(W=>{const H=W.regions.find(de=>de.id===d);if(!H)return;const q=H.geometry.findIndex(de=>Pt(de)===g);H.geometry=H.geometry.filter(de=>Pt(de)!==g),H.geometry.splice(Math.max(0,q),0,...N)});const P=N.map(W=>Pt(W));E(P),x(P[0]),_(P[0])}catch(N){Or({title:"Split failed",message:String(N),tone:"danger",duration:6e3})}};m.useEffect(()=>{if(!e)return;const N=P=>{if(P.key==="Escape"&&se.current){P.preventDefault(),P.stopImmediatePropagation(),fr();return}if(P.key==="Enter"&&se.current?.mode==="draw-polygon"){P.preventDefault(),P.stopImmediatePropagation(),Oa();return}if((P.ctrlKey||P.metaKey)&&P.key.toLowerCase()==="e"&&Fe){P.preventDefault(),P.stopImmediatePropagation(),Tf();return}if((P.key==="Delete"||P.key==="Backspace")&&g&&!(P.target instanceof HTMLInputElement||P.target instanceof HTMLTextAreaElement)){P.preventDefault(),P.stopImmediatePropagation(),Gs(g);return}!(P.ctrlKey||P.metaKey)||P.key.toLowerCase()!=="z"||(P.preventDefault(),P.stopImmediatePropagation(),P.shiftKey?Xs():Ys())};return window.addEventListener("keydown",N,!0),()=>window.removeEventListener("keydown",N,!0)},[fr,Fe,Gs,Oa,e,Xs,g,w,Ys]);const dx=N=>{if(!u||!Ce||Ce.authoring.locked)return;const P=Sc(N,L.pressureMode),W=N.target.closest?.("[data-handle]")?.getAttribute("data-handle");if(y==="select"){if(N.currentTarget.setPointerCapture(N.pointerId),F(null),W&&_e&&!_e.authoring.locked){se.current={mode:"resize",start:P,original:Xt(ze),handle:W};return}const er=[...Lr(Ce)].reverse().find(Ht=>Ht.enabled&&Ht.authoring.visible&&Ht.geometries.filter(Er=>Er.operation==="add").some(Er=>O1(Er,P,u.canvas)));Ue(er?.id??null),er&&!er.authoring.locked&&(se.current={mode:"move",start:P,startScreen:{x:N.clientX,y:N.clientY},original:Xt(er.geometries),started:!1});return}const H=y.endsWith("subtract");if(H&&(!g||_e?.authoring.locked))return;if(y.startsWith("polygon")&&se.current?.mode==="draw-polygon"){const er=V?.find(Ht=>Ht.type==="polygon")?.points.length??0;if(f1(er,se.current.startScreen,{x:N.clientX,y:N.clientY})){Oa();return}F(Ht=>Ht?.map(Er=>Er.type==="polygon"?{...Er,points:[...Er.points,P]}:Er)??null);return}const q=Nt(),de=H?null:u1(_e),Re=H?g:de??q,ct=y.startsWith("rect")?"Rectangle":y.startsWith("ellipse")?"Ellipse":y.startsWith("polygon")?"Polygon":"Brush",Vt=H||de?_e?.authoring:{name:`${ct} ${Lr(Ce).length+1}`,visible:!0,locked:!1},pr=H?[...new Set(ze.map(Ea))]:[void 0];if(y.startsWith("rect")||y.startsWith("ellipse")){N.currentTarget.setPointerCapture(N.pointerId);const er=y.startsWith("rect")?"rect":"ellipse";F(pr.map((Ht,Er)=>({id:Er?Nt():q,layer_id:Re,mask_group_id:Ht,type:er,operation:H?"subtract":"add",enabled:!0,authoring:Vt,x:P.x,y:P.y,width:.001,height:.001}))),se.current={mode:"draw-box",start:P,commit:H?"subtract":"add"},H||Ue(Re)}else y.startsWith("polygon")?(F(pr.map((er,Ht)=>({id:Ht?Nt():q,layer_id:Re,mask_group_id:er,type:"polygon",operation:H?"subtract":"add",enabled:!0,authoring:Vt,points:[P]}))),se.current={mode:"draw-polygon",start:P,startScreen:{x:N.clientX,y:N.clientY},commit:H?"subtract":"add"},H||Ue(Re)):(N.currentTarget.setPointerCapture(N.pointerId),F(pr.map((er,Ht)=>({id:Ht?Nt():q,layer_id:Re,mask_group_id:er,type:"brush_stroke",operation:y==="brush-add"?"add":"subtract",enabled:!0,authoring:Vt,size:L.size,hardness:L.hardness,opacity:L.opacity,shape:L.shape,pressure_mode:L.pressureMode,points:[P]}))),se.current={mode:"draw-brush",start:P,commit:y==="brush-add"?"add":"subtract"},y==="brush-add"&&Ue(Re))},fx=N=>{if(!u)return;const P=Sc(N,L.pressureMode);Y(P);const W=se.current;if(W)if(W.mode==="draw-box"&&(V?.[0]?.type==="rect"||V?.[0]?.type==="ellipse"))F(V.map(H=>H.type==="rect"||H.type==="ellipse"?{...H,x:Math.min(W.start.x,P.x),y:Math.min(W.start.y,P.y),width:Math.max(.001,Math.abs(P.x-W.start.x)),height:Math.max(.001,Math.abs(P.y-W.start.y))}:H));else if(W.mode==="draw-brush"&&V?.[0]?.type==="brush_stroke")F(V.map(H=>H.type==="brush_stroke"?{...H,points:[...H.points,P]}:H));else if(W.mode==="move"){if(!W.started&&!d1(W.startScreen,{x:N.clientX,y:N.clientY}))return;W.started=!0,F(ph(W.original,P.x-W.start.x,P.y-W.start.y,u.canvas))}else W.mode==="resize"&&F(M1(W.original,W.handle,P.x-W.start.x,P.y-W.start.y,N.shiftKey,u.canvas))},px=N=>{if(!u||!se.current||!V)return fr();const P=se.current,W=Sc(N,L.pressureMode);if(P.mode==="draw-polygon")return;let H=g1(P.mode)?V.map(q=>q.type==="brush_stroke"?{...q,points:D1([...q.points,W])}:q):V;if(P.mode==="draw-box"&&(H[0].type==="rect"||H[0].type==="ellipse")&&(H[0].width<=.002||H[0].height<=.002))return fr();Ne(q=>{const de=q.regions.find(Re=>Re.id===d);if(de)if(P.mode.startsWith("draw"))de.geometry.push(...H);else{const Re=new Map(H.map(ct=>[ct.id,ct]));de.geometry=de.geometry.map(ct=>Re.get(ct.id)??ct)}}),fr()},hx=N=>{se.current?.mode==="draw-polygon"&&(N.preventDefault(),Oa())},gx=(N,P)=>Ne(W=>{const H=W.regions.findIndex(de=>de.id===N),q=H+P;q<0||q>=W.regions.length||([W.regions[H],W.regions[q]]=[W.regions[q],W.regions[H]],Bo(W.regions))}),bx=(N,P)=>Io(N,(W,H)=>{const q=Lr(H),de=q.findIndex(ct=>ct.id===N),Re=de+P;Re<0||Re>=q.length||([q[de],q[Re]]=[q[Re],q[de]],H.geometry=q.flatMap(ct=>ct.geometries))}),vx=N=>{let P=!1,W=null;if(Ne(q=>{P=Z1(q,N,()=>W=Nt()),Bo(q.regions)}),!P)return;if(p(N.target.regionId),N.source.kind==="region"){Ue(null);return}const H=N.source.kind==="layer"?N.source.layerId:N.target.kind==="region"?W:N.target.layerId;x(H),E(H?[H]:[]),_(H),h(N.source.kind==="geometry"?N.source.geometryId:null),j(!1)},mx=(N,P)=>Io(N,W=>{if(W.length)if(P==="enabled"){const H=!W.some(q=>q.enabled!==!1);W.forEach(q=>{q.enabled=H})}else{const H=!ir(W[0])[P];W.forEach(q=>{q.authoring={...ir(q),[P]:H}})}}),xx=N=>Io(N,(P,W)=>{const H=Nt(),q=ph(Xt(P),.02,.02,u.canvas);Um(q,Nt),q.forEach((de,Re)=>{de.id=Nt(),de.layer_id=H,de.authoring={...ir(de),name:`${ir(de).name} Copy`,visible:!0,locked:!1},Re&&(de.authoring=q[0].authoring)}),W.geometry.push(...q),Ue(H)}),yx=N=>{const P=u?.regions.find(W=>W.id===N);P&&J.confirm({title:`Delete region “${P.name}”?`,message:`This removes ${Lr(P).length} layer(s) and clears child-region parent references.`,confirmLabel:"Delete region",danger:!0,action:()=>{Ne(W=>{W.regions=W.regions.filter(H=>H.id!==N),W.regions.forEach(H=>{H.parent_region_id===N&&(H.parent_region_id=null)}),Bo(W.regions)}),p(u?.regions.find(W=>W.id!==N)?.id??null),Ue(null)}})},_x=async N=>{try{if(!u)return;const P=Vw(sn(await N.text()),u.document_id);P.regions=dh(P.regions),Bo(P.regions),kr(P),p(P.regions[0]?.id??null),Ue(null)}catch(P){Or({title:"Document import failed",message:String(P),tone:"danger",duration:6e3})}},wx=async N=>{try{const P=JSON.parse(await N.text());if(P?.schema!=="bv.regions"||![1,2].includes(P?.version)||!Array.isArray(P.regions))throw new Error("Not a BV Regions v1/v2 export");const W=P.version===1?P.regions.map(H=>({...H,usage:"generation"})):P.regions;Ne(H=>{H.regions.push(...Q1(W)),Bo(H.regions)})}catch(P){Or({title:"Region import failed",message:String(P),tone:"danger",duration:6e3})}},kx=Ta(l);if(!e)return null;const Rf=gh($,{width:window.innerWidth,height:window.innerHeight}),Sf=(N,P,W=!0)=>{const H=Po(l);Zr("regional",N),N!==H&&(ke(q=>P?q.filter(de=>de!==N):[...new Set([...q,H])].filter(de=>de&&de!==N)),W&&(fe.current={mode:$.mode,geometry:Rf}),c(r.find(q=>Po(q)===N)??null))},Lf=u?G1(ve,i,new Set(u.regions.map(N=>N.id))):[],Ex=u?K1(ve,i,Object.fromEntries(u.regions.map(N=>[N.id,N.name]))):"",Ks=N=>u?s.jsx(C1,{mode:N,region:Ce,layer:_e,bounds:Do,canvas:u.canvas,automaticRegionColor:Ce?vv(u.regions.indexOf(Ce)):null,globalPrompts:u.prompts.global,backgroundPrompts:u.prompts.background,negativeMode:u.negative_mode,promptSections:$.promptSections,loraBindings:ve,loraStacks:i,onGlobalLoraStack:La,onRegionLoraStack:Ca,onPromptSection:(P,W)=>Q(H=>({...H,promptSections:{...H.promptSections,[P]:W}})),onNegativeMode:P=>Ne(W=>{W.negative_mode=P}),onGlobalPrompts:P=>Ne(W=>{W.prompts.global=P}),onBackgroundPrompts:P=>Ne(W=>{W.prompts.background=P}),onRegion:Na,onLayerBounds:P=>g&&Io(g,(W,H)=>{const q=new Map(Fm(W,P,u.canvas).map(de=>[de.id,de]));H.geometry=H.geometry.map(de=>q.get(de.id)??de)}),onBrushSetting:(P,W)=>g&&Io(g,H=>H.forEach(q=>{q.type==="brush_stroke"&&Object.assign(q,{[P]:W})}))}):null;return s.jsxs(s.Fragment,{children:[Le.map(N=>{const P=r.find(W=>Po(W)===N);return P?s.jsx(zs,{title:`Regional Editor · ${P.title||"BV Regional Prompt"} · #${P.id}`,onRestore:()=>Sf(N,!1,!1),onClose:()=>ke(W=>W.filter(H=>H!==N))},N):null}),s.jsx(ci,{open:e,activationToken:t,title:"BV Regional Editor",menuVisible:kx,onMenuVisible:N=>li(l,N),context:s.jsx(Ra,{label:"Regional prompt document",value:Po(l),onNavigate:Sf,options:r.filter(N=>hn(N)).map(N=>({value:Po(N),label:`${N.title||"BV Regional Prompt"} · #${N.id}`}))}),center:s.jsx(T1,{openMenu:$.openMenu,onOpenMenu:ge,displayOpacity:C,backgroundOpacity:z,isolate:k,binaryMaskPreview:$.binaryMaskPreview,hasSelection:!!g,onDisplayOpacity:I,onBackgroundOpacity:S,onToggleIsolate:()=>j(N=>!N),onToggleBinaryMaskPreview:()=>{fr(),Q(N=>({...N,binaryMaskPreview:!N.binaryMaskPreview}))},onExportDocument:()=>u&&mh(`${u.title||"bv-regional"}.json`,u),onExportRegions:()=>u&&mh(`${u.title||"bv-regions"}.regions.json`,{schema:"bv.regions",version:2,canvas:u.canvas,regions:u.regions}),onImportDocument:_x,onImportRegions:wx,onUndo:Ys,onRedo:Xs,canUndo:!!A.length,canRedo:!!O.length,canMergeLayers:Fe,onMergeLayers:Tf,canvas:u?.canvas??{width:1024,height:1024},onCanvas:N=>Ne(P=>{P.canvas=N})}),mode:$.mode,initialGeometry:Rf,minSize:{width:780,height:520},className:"bv-regional-shell",bodyClassName:"bv-regional-window-body",onModeChange:N=>Q(P=>({...P,mode:N})),onGeometry:N=>Q(P=>({...P,windows:{...P.windows,floating:N}})),onClose:a,status:u?s.jsxs(s.Fragment,{children:[s.jsx("span",{children:Lf[0]?`⚠ ${Lf[0]}`:`✓ ${Ex}`}),s.jsxs("span",{children:[u.regions.length," regions · layout adjusted for this session"]})]}):null,actions:u?s.jsx(hm,{storageId:`regional-editor:${u.document_id}`,editorType:"regional",onClick:()=>le(N=>N+1)}):null,children:K?s.jsx("div",{className:"bv-regional-error",children:K}):u&&s.jsx(s.Fragment,{children:s.jsx("main",{className:"bv-regional-dock-host",children:s.jsx(cm,{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($w,{regions:u.regions,selectedRegionId:d,selectedLayerId:g,selectedLayerIds:w,selectedGeometryId:b,onSelectRegion:N=>{p(N),Ue(null),j(!1)},onSelectLayer:Br,onSelectGeometry:(N,P,W)=>{p(N),x(P),E([P]),_(P),h(W),j(!1)},onToggleGeometry:sx,onDeleteGeometry:cx,onAddRegion:()=>Ne(N=>{const P=Ww(N.regions.length);N.regions.unshift(P),Bo(N.regions),p(P.id),Ue(null)}),onRenameRegion:(N,P)=>Ne(W=>{W.regions.find(H=>H.id===N).name=P}),onRenameLayer:(N,P)=>Io(N,W=>W.forEach(H=>{H.authoring={...ir(H),name:P}})),onToggleRegion:(N,P)=>Ne(W=>{const H=W.regions.find(q=>q.id===N);P==="enabled"?H.enabled=!H.enabled:P==="visible"?H.authoring.visible=!H.authoring.visible:H.authoring.locked=!H.authoring.locked}),onToggleLayer:mx,onMoveRegion:gx,onMoveLayer:bx,onTreeMove:vx,onDeleteRegion:yx,onDeleteLayer:Gs,onDuplicateLayer:xx,canSplitDisconnectedAreas:Ze,onSplitDisconnectedAreas:ux})},{id:"canvas",title:"Canvas",weight:54,minWidth:320,content:s.jsx(y1,{document:u,background:n[u.document_id],selectedRegionId:d,selectedLayerId:g,draft:V,selectionBounds:Do,cursor:ne,tool:y,brush:L,canSubtract:!!_e&&!_e.authoring.locked,displayOpacity:C,backgroundOpacity:z,isolate:k,binaryMaskPreview:$.binaryMaskPreview,initialView:$.artboard,onView:pe,onTool:N=>{T(N),fr()},onBrush:B,onPointerDown:dx,onPointerMove:fx,onPointerUp:px,onPointerCancel:fr,onPointerLeave:()=>{se.current||Y(null)},onDoubleClick:hx},u.document_id)},{id:"global",title:"Global",weight:12,minWidth:240,content:Ks("document")},{id:"selection",title:"Selection",weight:12,minWidth:240,content:Ks("selection")},{id:"region",title:"Region",weight:12,minWidth:240,content:Ks("region")}]})})})}),J.dialog]})}const zo=e=>sa(gt().rootGraph??gt().graph,e),xh=e=>e?.widgets?.find(t=>t.name==="regional_json"),Lc=e=>e?.widgets?.find(t=>t.name==="lora_bindings_json"),tk=(e,t)=>t==="global"||t==="background"||e.regions.some(r=>r.id===t),rk=(e,t)=>t==="global"?e.prompts.global:t==="background"?e.prompts.background:e.regions.find(r=>r.id===t)?.prompts??e.prompts.global;function ok({open:e,activationToken:t=0,nodes:r,initialNode:o,loraStacks:n,onClose:i,onOpenEditor:a}){const[l,c]=m.useState(o),[u,f]=m.useState(null),[d,p]=m.useState(()=>Us("")),[g,x]=m.useState("global"),[w,E]=m.useState(()=>as({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),L=m.useRef(t);m.useEffect(()=>{const R=T.current,O=L.current!==t;if(T.current=e,L.current=t,!e||!O)return;const D=o??r[0]??null,V=zo(l),F=zo(D);R&&V&&F!==V&&Qn()==="keep"?_(ne=>[...new Set([...ne,V])].filter(Y=>Y!==F)):F&&_(ne=>ne.filter(Y=>Y!==F)),y.current=R?w:null,c(D)},[t,o,r,e]),m.useEffect(()=>{if(l)try{const R=sn(xh(l)?.value),O=mf(Lc(l)?.value,R.document_id),D=Un(O,new Set(R.regions.map(Y=>Y.id))),V=Lc(l);V&&JSON.stringify(O)!==JSON.stringify(D)&&(V.value=JSON.stringify(D),V.callback?.(V.value),l.graph?.setDirtyCanvas?.(!0,!0));const F=wl(R.document_id),ne=tk(R,F.quickPromptTarget)?F.quickPromptTarget:"global";f(R),p(D),x(ne),E(y.current??F.quickPromptWindow),y.current=null,h("")}catch(R){f(null),h(R instanceof Error?R.message:String(R))}},[l,e]);const B=m.useMemo(()=>u?rk(u,g):null,[u,g]),C=R=>{if(x(R),!u)return;const O=wl(u.document_id);Vu(u.document_id,{...O,quickPromptTarget:R})},I=R=>{if(!u)return;const O=wl(u.document_id);Vu(u.document_id,{...O,quickPromptWindow:R})},z=R=>{if(!u||!l)return;const O=Xt(u);if(g==="global")O.prompts.global=R;else if(g==="background")O.prompts.background=R;else{const V=O.regions.find(F=>F.id===g);if(!V)return;V.prompts=R}f(O);const D=xh(l);D&&(D.value=JSON.stringify(O),D.callback?.(D.value)),l.graph?.setDirtyCanvas?.(!0,!0)},S=R=>{if(!u||!l)return;let O;if(g==="global"||g==="background")O={...d,global_stack_id:R};else{const V={...d.regions};R?V[g]=R:delete V[g],O={...d,regions:V}}p(O);const D=Lc(l);D&&(D.value=JSON.stringify(O),D.callback?.(D.value)),l.graph?.setDirtyCanvas?.(!0,!0)},k=g==="global"||g==="background"?d.global_stack_id??"":d.regions[g]??"",j=(R,O,D=!0)=>{const V=zo(l);Zr("quick",R),R!==V&&(_(F=>O?F.filter(ne=>ne!==R):[...new Set([...F,V])].filter(ne=>ne&&ne!==R)),y.current=D?w:null,c(r.find(F=>zo(F)===R)??null))},A=Ta(l);return s.jsxs(s.Fragment,{children:[v.map(R=>{const O=r.find(D=>zo(D)===R);return O?s.jsx(zs,{title:`Quick Edit · ${O.title||"BV Regional Prompt"} · #${O.id}`,onRestore:()=>j(R,!1,!1),onClose:()=>_(D=>D.filter(V=>V!==R))},R):null}),s.jsx(ci,{open:e,activationToken:t,title:"Regional Quick Edit",menuVisible:A,onMenuVisible:R=>li(l,R),context:s.jsx(Ra,{label:"Regional Prompt Node",value:zo(l),options:r.filter(R=>hn(R)).map(R=>({value:zo(R),label:`${R.title||"BV Regional Prompt"} · #${R.id}`})),onNavigate:j}),allowWorkspace:!1,initialGeometry:w,minSize:{width:360,height:320},className:"bv-quick-prompt-window bv-density-compact",onClose:i,onGeometry:R=>{const O=as(R,{width:window.innerWidth,height:window.innerHeight});E(O),I(O)},status:s.jsx(nv,{tone:"success",dot:!0,children:"Autosaved"}),actions:s.jsx(ae,{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(Ir,{tone:"danger",title:"Prompt document unavailable",children:b}):u&&B&&s.jsxs(s.Fragment,{children:[s.jsx(pt,{label:"Prompt Target",value:g,onValue:C,options:[{value:"global",label:"Global"},{value:"background",label:"Background"},...u.regions.map(R=>({value:R.id,label:R.name}))]}),s.jsx(pt,{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:k,onValue:R=>S(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(wr,{label:"Positive",children:s.jsx(is,{autoFocus:!0,value:B.positive_source,onValue:R=>z({...B,positive_source:R}),completionContext:{scope:g==="global"||g==="background"?g:"region",polarity:"positive"}})}),s.jsx(wr,{label:"Negative",children:s.jsx(is,{value:B.negative_source,onValue:R=>z({...B,negative_source:R}),completionContext:{scope:g==="global"||g==="background"?g:"region",polarity:"negative"}})})]})]})})})]})}function Vm(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 nk(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 ik(e,t,r){const o=typeof e=="string"?e:"";return t.some(n=>n.documentId===o)?o:r?t[0]?.documentId??"":""}function ak(e,t,r){Mm(r);const o=document.createElement("div");o.className="bv-ui bv-settings-datasets";const n=ii(o),i=Am;return n.render(m.createElement(i,{onSelectionChange:a=>t(JSON.stringify(a))})),o}const bo=new Map;let yi=null;function lk(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 yh(e){if(bo.has(e)||!lk(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},f=()=>{if(!a)return;const h=ns(e,Wu(),c);d(h)},d=(h=ns(e,Wu(),c))=>{a||(a=document.createElement("div"),a.className="bv-ui bv-ui-portal",document.body.append(a),l=ii(a)),l.render(m.createElement(Bm,{suggestions:t,selected:r,position:h,onAccept:g,onHeight:v=>{Math.abs(v-c)<1||(c=v,f())}}))},p=()=>d(),g=(h=r)=>{const v=t[h];if(!o||!v)return;const _=Im(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(!bf()||e.selectionStart!==e.selectionEnd||(i!=null&&window.clearTimeout(i),n?.abort(),o=Dm(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 jm(h,[Pm],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()))},E=()=>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",E),window.addEventListener("resize",f),window.addEventListener("scroll",f,!0),bo.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",E),window.removeEventListener("resize",f),window.removeEventListener("scroll",f,!0)}})}function _h(e){e instanceof HTMLTextAreaElement&&yh(e),e.querySelectorAll?.("textarea").forEach(t=>yh(t))}function sk(e){(e instanceof HTMLTextAreaElement?[e]:[...e.querySelectorAll?.("textarea")??[]]).forEach(r=>{bo.get(r)?.destroy(),bo.delete(r)})}function ck(){if(yi)return yi;_h(document);const e=new MutationObserver(o=>o.forEach(n=>{n.addedNodes.forEach(i=>{i instanceof Element&&_h(i)}),n.removedNodes.forEach(i=>{i instanceof Element&&sk(i)})}));e.observe(document.body,{childList:!0,subtree:!0});const t=()=>{bf()||bo.forEach(o=>o.close())},r=()=>bo.forEach(o=>o.close());return window.addEventListener(pa,t),window.addEventListener(ha,r),yi=()=>{e.disconnect(),window.removeEventListener(pa,t),window.removeEventListener(ha,r),bo.forEach(o=>o.destroy()),bo.clear(),yi=null},yi}function wh(e){return e?.extensionManager?.workflow?.activeWorkflow??e?.workflowManager?.activeWorkflow??e?.graph??null}function uk(e,t,r,o=(i,a)=>globalThis.setInterval(i,a),n=i=>globalThis.clearInterval(i)){const i=wh(e);let a=!1;const l=()=>{a||wh(e)===i||(a=!0,r())};t.addEventListener("graphChanged",l);const c=o(l,250);return()=>{t.removeEventListener("graphChanged",l),n(c)}}const Hm=["region","global_influence","background_influence","primary_region_influence","context_regions_json"],dk=e=>Hm.map(t=>e?.find(r=>r.name===t)?.value),fk=e=>Array.isArray(e)&&e.length===Hm.length+1&&e[3]==null&&typeof e[4]=="number"&&typeof e[5]=="string"?[...e.slice(0,3),...e.slice(4)]:e,Fr=(e,t,r,o)=>{const n=Number(e);return Number.isFinite(n)?Math.max(r,Math.min(o,n)):t},$m=()=>({global_influence:1,background_influence:.35,primary_region_influence:1,context_region_influence:1}),Ym=()=>({roi_padding:.15,threshold:.5,dilation:0,crop_factor:1.5,drop_size:10}),xf=e=>e.filter(t=>t.enabled!==!1&&(t.usage==="detailer"||t.usage==="both")).sort((t,r)=>(t.priority??0)-(r.priority??0)),Xu=e=>({schema:"bv.detailer_plan",version:1,jobs:xf(e).map(t=>({region_ids:[t.id],primary_region_id:t.id,mask_composition:"union",prompt_composition:"context",conditioning:$m(),detector:Ym()}))}),kl=(e,t)=>{const r=new Set(xf(t).map(i=>i.id));let o;try{o=String(e??"").trim()?JSON.parse(String(e)):Xu(t)}catch{o=Xu(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:Fr(l.global_influence,1,0,2),background_influence:Fr(l.background_influence,.35,0,2),primary_region_influence:Fr(l.primary_region_influence,1,0,2),context_region_influence:Fr(l.context_region_influence,1,0,2)},detector:{roi_padding:Fr(c.roi_padding,.15,0,2),threshold:Fr(c.threshold,.5,0,1),dilation:Math.round(Fr(c.dilation,0,-512,512)),crop_factor:Fr(c.crop_factor,1.5,1,20),drop_size:Math.round(Fr(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)}:{}}}]}):[]}},Cc=e=>JSON.stringify(e),pk=e=>structuredClone(e);function hk({regions:e,detectorIds:t,stored:r,save:o,close:n,nodeId:i="",nodes:a=[],onNavigate:l=()=>{},currentNode:c}){const u=xf(e),f=m.useMemo(()=>kl(r,e),[e,r]),d=Ds(f),p=d.value,[g,x]=m.useState(()=>Cc(f));Is(d);const w=Cc(p)!==g,[E,b]=m.useState(null),h=()=>{const k=Cc(p);o(k),x(k),d.clear()},v=k=>w?b(()=>k):k(),_=()=>v(n),y=Ta(c),T=m.useMemo(()=>k=>s.jsx(ci,{...k,title:`${k.title} · #${i}`,shortTitle:"Detailer Plan",menuVisible:y,onMenuVisible:j=>li(c,j),onClose:_,context:s.jsx(Ra,{label:"Detailer Plan Node",value:i,options:a.map(j=>({value:j.id,label:j.label})),onNavigate:(j,A)=>A?v(()=>l(j,!0)):l(j,!1)})}),[c,w,y,i,a,l]),[L,B]=m.useState([]),C=k=>d.commit(j=>{const A=pk(j);return k(A),A}),I=()=>C(k=>{const j=u[0];j&&k.jobs.push({region_ids:[j.id],primary_region_id:j.id,mask_composition:"union",prompt_composition:"context",conditioning:$m(),detector:Ym()})}),z=k=>[{value:"",label:"No detector · use composed region mask"},...[...new Set([...k&&!t.includes(k)?[k]:[],...t])].map(j=>({value:j,label:t.includes(j)?j:`Missing · ${j}`}))],S=p.jobs.map((k,j)=>({id:`job-${j}`,title:`Job ${j+1}`,description:k.region_ids.map(A=>u.find(R=>R.id===A)?.name??A).join(" + ")||"No region",summary:s.jsxs("div",{className:"bv-editor-item-compact-summary",children:[s.jsxs("span",{children:[k.region_ids.length," region",k.region_ids.length===1?"":"s"]}),s.jsx("span",{children:k.detector_id||"Composed mask"}),s.jsx("span",{children:k.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(zw,{label:"Regions",value:k.region_ids,minSelected:1,options:u.map(A=>({value:A.id,label:A.name})),onValue:A=>C(R=>{const O=R.jobs[j];O.region_ids=A,A.includes(O.primary_region_id)||(O.primary_region_id=A[0]??"")})}),s.jsxs(Dn,{children:[s.jsx(pt,{label:"Detector assignment",value:k.detector_id??"",options:z(k.detector_id),onValue:A=>C(R=>{R.jobs[j].detector_id=A||void 0})}),k.region_ids.length>1&&s.jsx(pt,{label:"Primary region",value:k.primary_region_id,options:k.region_ids.map(A=>({value:A,label:u.find(R=>R.id===A)?.name??A})),onValue:A=>C(R=>{R.jobs[j].primary_region_id=A})})]})]}),s.jsx(ql,{value:L,onValue:B,items:[{id:`composition-${j}`,title:"Mask and prompt composition",content:s.jsxs(Dn,{children:[s.jsx(pt,{label:"Mask composition",value:k.mask_composition,options:[{value:"union",label:"Union"},{value:"intersection",label:"Intersection"},{value:"subtract",label:"Subtract in listed order"}],onValue:A=>C(R=>{R.jobs[j].mask_composition=A})}),s.jsx(pt,{label:"Prompt composition",value:k.prompt_composition,options:[{value:"context",label:"Primary and context regions"},{value:"primary",label:"Primary region only"}],onValue:A=>C(R=>{R.jobs[j].prompt_composition=A})})]})},{id:`conditioning-${j}`,title:"Conditioning strengths",content:s.jsx(Dn,{minimum:150,children:[["Global influence","global_influence"],["Background influence","background_influence"],["Primary region influence","primary_region_influence"],["Context region influence","context_region_influence"]].map(([A,R])=>s.jsx(jt,{label:A,value:k.conditioning[R],min:0,max:2,step:.05,onValue:O=>C(D=>{D.jobs[j].conditioning[R]=O})},R))})},{id:`detection-${j}`,title:"Detector and ROI settings",content:s.jsxs(Dn,{minimum:150,children:[s.jsx(jt,{label:"ROI padding",value:k.detector.roi_padding,min:0,max:2,step:.01,onValue:A=>C(R=>{R.jobs[j].detector.roi_padding=A})}),s.jsx(jt,{label:"Threshold",value:k.detector.threshold,min:0,max:1,step:.01,onValue:A=>C(R=>{R.jobs[j].detector.threshold=A})}),s.jsx(jt,{label:"Dilation",value:k.detector.dilation,min:-512,max:512,step:1,slider:!1,onValue:A=>C(R=>{R.jobs[j].detector.dilation=A})}),s.jsx(jt,{label:"Crop factor",value:k.detector.crop_factor,min:1,max:20,step:.1,onValue:A=>C(R=>{R.jobs[j].detector.crop_factor=A})}),s.jsx(jt,{label:"Drop size",value:k.detector.drop_size,min:1,max:8192,step:1,slider:!1,onValue:A=>C(R=>{R.jobs[j].detector.drop_size=A})}),s.jsx(ln,{label:"Detector query",value:k.detector.query??"",onValue:A=>C(R=>{R.jobs[j].detector.query=A.trim()||void 0})}),s.jsx(ln,{label:"Accepted labels",value:(k.detector.labels??[]).join(", "),onValue:A=>C(R=>{R.jobs[j].detector.labels=A.split(",").map(O=>O.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(pf,{primary:s.jsx(ae,{intent:"primary",disabled:p.jobs.some(k=>!k.region_ids.length),onClick:h,children:"Save plan"}),secondary:s.jsxs(s.Fragment,{children:[s.jsx(ae,{onClick:I,disabled:!u.length,children:"Add job"}),s.jsx(ts,{label:"Detailer Plan",value:{schema:"bv.editor-draft",version:1,type:"detailer-plan",data:p},onImport:k=>{if(k?.schema!=="bv.editor-draft"||k?.version!==1||k?.type!=="detailer-plan"||!k?.data)throw new Error("Draft type or version does not match this editor.");d.replace(kl(k.data,e))}})]}),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:!w,onSelect:()=>d.replace(kl(g,e),!0)},{id:"restore",label:"Restore defaults",onSelect:()=>d.commit(Xu(e))}]}),children:s.jsxs(Kd,{density:"compact",className:"bv-editor-dialog",children:[!t.length&&p.jobs.length>0&&s.jsx(Ir,{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(Ms,{items:S,onReorder:k=>C(j=>{j.jobs=k.map(A=>j.jobs[Number(A.id.slice(4))])}),onRemove:k=>C(j=>{j.jobs.splice(Number(k.slice(4)),1)})}):s.jsx(As,{title:"No eligible regions",description:"Enable a region with Detailer or Both usage first."})]})}),s.jsx(Jd,{open:!!E,editorName:"Detailer Plan",onKeep:()=>b(null),onDiscard:()=>{const k=E;b(null),k?.()},onSave:()=>{h();const k=E;b(null),k?.()}})]})}const gk=(e,t,r,o,n,i,a,l)=>{of((c,u)=>m.createElement(hk,{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})},ss=()=>({schema:"bv.detector_registry_config",version:1,detectors:[]}),Ui=e=>{try{const t=String(e??"").trim()?JSON.parse(String(e)):ss();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 ss()}},Nc=e=>JSON.stringify(e);function bk({catalog:e,stored:t,save:r,close:o,nodeId:n="",nodes:i=[],onNavigate:a=()=>{},currentNode:l}){const c=m.useMemo(()=>Ui(t),[t]),u=m.useMemo(()=>new Set(c.detectors.map(R=>R.id)),[c]),f=Ds(c),d=f.value,[p,g]=m.useState(()=>Nc(c));Is(f);const x=Nc(d)!==p,w=Zd(),[E,b]=m.useState(null),h=()=>{const R=Nc(d);r(R),g(R),f.clear()},v=R=>x?b(()=>R):R(),_=()=>v(o),y=Ta(l),T=m.useMemo(()=>R=>s.jsx(ci,{...R,title:`${R.title} · #${n}`,shortTitle:"Registry",menuVisible:y,onMenuVisible:O=>li(l,O),onClose:_,context:s.jsx(Ra,{label:"Detector Registry Node",value:n,options:i.map(O=>({value:O.id,label:O.label})),onNavigate:(O,D)=>D?v(()=>a(O,!0)):a(O,!1)})}),[l,x,y,n,i,a]),[L,B]=m.useState([]),C=R=>f.commit(O=>{const D=structuredClone(O);return R(D),D}),I=()=>{let R=d.detectors.length+1,O=`detector-${R}`;for(;d.detectors.some(D=>D.id===O);)O=`detector-${++R}`;return O},z=d.detectors.map(R=>R.id.trim()),S=z.find((R,O)=>R&&z.indexOf(R)!==O),k=d.detectors.some(R=>!R.id.trim()||!R.model_name),j=()=>C(R=>{const O=e.ultralytics.length?"ultralytics":"onnx";R.detectors.push({id:I(),provider:O,model_name:e[O][0]??""})}),A=()=>{d.detectors.length?w.confirm({title:"Clear Detector Registry?",message:"Existing Detailer jobs will keep missing references until reassigned.",confirmLabel:"Clear registry",danger:!0,action:()=>f.commit(ss())}):f.commit(ss())};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(pf,{primary:s.jsx(ae,{intent:"primary",disabled:!!(S||k),onClick:h,children:"Save registry"}),secondary:s.jsxs(s.Fragment,{children:[s.jsx(ae,{onClick:j,children:"Add detector"}),s.jsx(ts,{label:"Detector Registry",value:{schema:"bv.editor-draft",version:1,type:"detector-registry",data:d},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.");f.replace(Ui(R.data))}})]}),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:!x,onSelect:()=>f.replace(Ui(p),!0)},{id:"clear",label:"Clear registry…",onSelect:A}]}),children:s.jsxs(Kd,{density:"compact",className:"bv-editor-dialog",children:[S||k?s.jsx(Ir,{tone:"danger",title:"Registry needs attention",children:S?`Detector ID “${S}” is used more than once.`:"Every detector needs a unique ID and a detection model."}):s.jsxs(Ir,{tone:"success",title:"Registry valid",children:[d.detectors.length," detector",d.detectors.length===1?"":"s"," ready to save."]}),s.jsxs("div",{className:"bv-card-list",children:[!d.detectors.length&&s.jsx(As,{title:"No detectors configured",description:"Add a detector to make it selectable in Regional Detailer jobs."}),s.jsx(ql,{value:L,onValue:B,items:d.detectors.map((R,O)=>({id:`detector-${O}`,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(ae,{intent:"ghost",onClick:()=>C(D=>{D.detectors.splice(O+1,0,{...D.detectors[O],id:I()})}),children:"Duplicate"}),s.jsx(ae,{intent:"ghost",className:"bv-subtle-danger",onClick:()=>{const D=()=>C(V=>{V.detectors.splice(O,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(Dn,{children:[s.jsx(ln,{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=>C(V=>{V.detectors[O].id=D.trim()})}),s.jsx(pt,{label:"Provider",value:R.provider,options:[{value:"ultralytics",label:"Ultralytics"},{value:"onnx",label:"ONNX"}],onValue:D=>C(V=>{const F=V.detectors[O];F.provider=D,F.model_name=e[F.provider][0]??""})}),s.jsx(pt,{label:"Detection model",value:R.model_name,options:e[R.provider].map(D=>({value:D,label:D})),onValue:D=>C(V=>{V.detectors[O].model_name=D})})]}),s.jsx(ql,{value:L,onValue:B,items:[{id:`sam-${O}`,title:R.sam_model_name?"SAM refinement enabled":"Optional SAM refinement",content:s.jsxs(Dn,{children:[s.jsx(pt,{label:"SAM model",value:R.sam_model_name??"",options:[{value:"",label:"No SAM refinement"},...e.sam.map(D=>({value:D,label:D}))],onValue:D=>C(V=>{const F=V.detectors[O];F.sam_model_name=D||void 0,D||delete F.sam_device_mode})}),R.sam_model_name&&s.jsx(pt,{label:"Execution device",value:R.sam_device_mode??"AUTO",options:["AUTO","Prefer GPU","CPU"].map(D=>({value:D,label:D})),onValue:D=>C(V=>{V.detectors[O].sam_device_mode=D})})]})}]})]})}))})]})]})}),w.dialog,s.jsx(Jd,{open:!!E,editorName:"Detector Registry",onKeep:()=>b(null),onDiscard:()=>{const R=E;b(null),R?.()},onSave:()=>{h();const R=E;b(null),R?.()}})]})}const vk=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();of((u,f)=>m.createElement(bk,{catalog:c,stored:t,save:r,close:u,activationToken:f,nodeId:o.split(":").slice(1).join(":"),nodes:n,onNavigate:i,currentNode:a}),{key:o})},mk=10,xk=(e,t=mk)=>{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)},yk=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"]),_k={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"},wk={"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"}},Oc=(e,t)=>wk[e]?.[t]??_k[t]??t.split("_").join(" ");function kk({label:e,configured:t,close:r,onSave:o,onDelete:n}){const[i,a]=m.useState(""),[l,c]=m.useState(""),[u,f]=m.useState(!1),d=async p=>{f(!0),c("");try{const g=await p();g?c(g):r()}finally{f(!1)}};return s.jsxs(wa,{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(ae,{intent:"danger",disabled:!t||u,onClick:()=>d(n),children:"Delete key"}),s.jsx(ae,{intent:"ghost",disabled:u,onClick:r,children:"Cancel"}),s.jsx(ae,{intent:"primary",loading:u,disabled:!i.trim(),onClick:()=>d(()=>o(i)),children:"Save key"})]}),children:[s.jsx(Ir,{tone:t?"info":"warning",children:t?"A key is configured. Enter a new key to replace it.":"No key is configured."}),s.jsx(Fw,{label:"API key",value:i,onValue:a}),l&&s.jsx(Ir,{tone:"danger",children:l})]})}let Mc=null;const Gu=(e,t=!1)=>((t||!Mc)&&(Mc=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:[]})),Mc),Hr=(e,t)=>e.widgets?.find(r=>r.name===t),cs=(e,t,r)=>{const o=t.find(l=>l.label===String(Hr(e,"provider_profile")?.value??""));if(!o)return;const n=Hr(e,"custom_endpoint"),i=Hr(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(f=>f.label===String(Hr(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=Hr(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)},Ek=(e,t,r)=>{const o=r.find(n=>n.label===String(Hr(t,"provider_profile")?.value??""))??r[0];o&&o.auth_mode!=="none"&&of(n=>m.createElement(kk,{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,cs(t,r),Gu(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,cs(t,r),Gu(e,!0)}}))},kh=(e,t)=>{Gu(t).then(r=>{let o=String(Hr(e,"provider_profile")?.value??"");const n=Hr(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 cs(e,r,o),o=l,c}}let i=Hr(e,"configure_api_key");i||(i=e.addWidget("button","configure_api_key",null,()=>Ek(t,e,r),{serialize:!1}),i.serialize=!1),cs(e,r)}).catch(r=>console.error("BV Remote LLM settings unavailable",r))};function Tk({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(rf,{label:"Hidden link debug",value:n,trueLabel:"Visible",falseLabel:"Hidden",onValue:l}),s.jsx(bv,{collectors:e,collectorId:t,resourceId:r,resolved:o,onCollector:i,onResource:a})]})}function Rk({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(rf,{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(ae,{type:"button",iconOnly:!0,icon:"×",onClick:()=>i(c),"aria-label":`Remove binding ${c+1}`})]}),s.jsx(bv,{collectors:e,collectorId:l.collector_id,resourceId:l.resource_id,resolved:l.resolved,onCollector:u=>{const f=e.find(d=>d.id===u)?.resources[0];o(c,u,f?.id??"")},onResource:u=>o(c,l.collector_id,u)})]},l.binding_id)),s.jsx(ae,{type:"button",className:"bv-m0-add-binding",disabled:t.length>=20,onClick:n,children:"Add collector binding"})]})}const jr="BV_RUNTIME_RESOURCE_PROVIDER_M0",ti="resource_provider",Ws=20;function us(e){return e?.findIndex(t=>t?.name===ti||t?.type===jr)??-1}function yf(e){let t=us(e.outputs);t<0&&e.addOutput&&(e.addOutput(ti,jr),t=us(e.outputs));const r=e.outputs?.[t];return r&&(r.name=ti,r.type=jr),t}function Xm(e){let t=us(e.inputs);t<0&&e.addInput&&(e.addInput(ti,jr),t=us(e.inputs));const r=e.inputs?.[t];return r&&(r.name=ti,r.type=jr),t}function Sk(e){return`${ti}_${e}`}function Vs(e,t=Ws){const r=[];for(let o=1;o<=t;o++){const n=Sk(o);let i=e.inputs?.findIndex(l=>l?.name===n)??-1;i<0&&e.addInput&&(e.addInput(n,jr),i=e.inputs?.findIndex(l=>l?.name===n)??-1);const a=e.inputs?.[i];a&&(a.name=n,a.type=jr,a.__bvM0ProviderOrdinal=o),r.push(i)}return r}const Ku="BV_RUNTIME_RESOURCE_PROVIDER_M0";function _f(e){return(e?._nodes??[]).some(t=>t.__bvM0ResourceConsumer===!0&&!!t.properties?.bvM0DebugVisible)}function Lk(e,t){if(!t)return!1;if(Gm(e,t))return!_f(e.graph);const r=e.graph?.getNodeById?.(t.origin_id),o=e.graph?.getNodeById?.(t.target_id);return!!(r?.outputs?.[t.origin_slot]?.__bvM0VisualHidden||o?.inputs?.[t.target_slot]?.__bvM0VisualHidden)}function Gm(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||n?.type===Ku)&&(i?.__bvM0ResourceSlot||i?.type===Ku))}function Km(e){if(!e||e.__bvM0DebugAnimation)return;e.__bvM0DebugAnimation=!0;const t=()=>{const r=_f(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 qm(e){if(typeof document>"u")return;const t=_f(e);document.documentElement.classList.toggle("bv-m0-debug-active",t)}function Ck(e){if(!e||e.__bvM0VisibilityInstalled)return;e.__bvM0VisibilityInstalled=!0;const t=e.drawNode,r=e.renderLink;e.renderLink=function(...o){if(Lk(this,o[3]))return;if(!Gm(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(a.type===Ku){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 wf(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((d,p)=>({slot:d,index:p})).filter(({slot:d})=>d.__bvM0ResourceSlot)??[],f=u.length>1?u[0].index:void 0;c.forEach((d,p)=>d.classList.toggle("bv-m0-port-hidden",!!e.inputs?.[p]?.__bvM0PortHidden||f!=null&&p!==f)),l.classList.toggle("bv-m0-fan-in",f!=null),o++<4&&setTimeout(i,75*o)};i()}const Nk=(e,t)=>t==null?null:e?._links?.get?.(t)??e?.links?.get?.(t)??e?.links?.[t]??null,Ok=e=>[...e?._links?.values?.()??[],...e?.links?.values?.()??Object.values(e?.links??{})],Eh=(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===jr||o?.type===jr)?r:null};function Mk(e,t,r){const o=e.inputs?.find(a=>a.name===t),n=Nk(e.graph,o?.link),i=Eh(e,n);if(i&&(!r||r(i)))return i;if(!r)return null;for(const a of Ok(e.graph)){const l=Eh(e,a);if(l&&r(l))return l}return null}const Ak="BV M0 Fake Resource Collector",Dk="BV M0 Fake Resource Consumer",Jm="BV M0 Fake Multi Resource Consumer",Zm=jr,Ik="a1bdeceb-76ae-4e45-ae36-e5c2664819ce",jk="d97a4268-c02c-42a3-8793-8e578e12e12c",De=(e,t)=>e?.widgets?.find(r=>r.name===t),Ac=e=>{e&&(e.type="converted-widget",e.hidden=!0,e.computeSize=()=>[0,-4],e.serializeValue=()=>e.value)},Dc=(e,t)=>(e&&!String(e.value??"").trim()&&(e.value=t??crypto.randomUUID()),String(e?.value??"")),Ic=()=>{let e=0;const t=()=>{const r=gt().canvas;r?Ck(r):e++<40&&setTimeout(t,50)};t()};function Pk(e){const t=De(e,"collector_id"),r=De(e,"resource_a_id"),o=De(e,"resource_b_id");if(!t||!r||!o||!e.graph||!(e.graph._nodes??[]).find(a=>a!==e&&a.__bvM0ResourceProvider===!0&&String(De(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 Hs(e,t,r=""){return Mk(e,t,r?o=>String(De(o,"collector_id")?.value??"")===r:void 0)}function un(e){return Hs(e,"resource_provider",String(De(e,"collector_id")?.value??""))}function Sa(e,t){const r=dn(e)[t];return Hs(e,`resource_provider_${t+1}`,r?.collector_id??"")}function Th(e){const t=un(e),r=t?.__bvM0IdRemap;if(!r)return;const o=De(e,"collector_id"),n=De(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 ga(e){return(e.graph?._nodes??[]).filter(t=>t.__bvM0ResourceProvider===!0&&t.graph===e.graph).map(t=>({id:String(De(t,"collector_id")?.value??""),label:String(t.title||`Collector #${t.id}`),resources:[{id:String(De(t,"resource_a_id")?.value??""),label:"Alpha"},{id:String(De(t,"resource_b_id")?.value??""),label:"Beta"}],node:t})).filter((t,r,o)=>t.id&&o.findIndex(n=>n.id===t.id)===r)}function vo(e){if(!e?.__bvM0ResourceProvider)return;const t=e.graph?._nodes??[],r=e.outputs?.find(n=>n.type===Zm),o=t.some(n=>!!n.properties?.bvM0DebugVisible&&(un(n)===e||n.inputs?.some((i,a)=>Sa(n,a)===e)));r&&(r.hidden=!0,r.__bvM0VisualHidden=!o,r.__bvM0PortHidden=!0,r.__bvM0ResourceSlot=!0),wf(e,"collector",o)}function dn(e){const t=De(e,"resource_bindings");if(!t)return[];try{const r=JSON.parse(String(t.value??"[]"));return Array.isArray(r)?r.slice(0,Ws).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 Wn(e,t){const r=De(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 Bk(e){const t=dn(e),r=new Set(t.map(n=>n.binding_id));if((e.graph?._nodes??[]).some(n=>n!==e&&n.type===Jm&&dn(n).some(i=>r.has(i.binding_id)))){for(const n of t)n.binding_id=crypto.randomUUID();Wn(e,t)}}function Qa(e){const t=dn(e);let r=!1;t.forEach((o,n)=>{const i=Sa(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&&Wn(e,t)}function Qm(e,t){return["resource_a_id","resource_b_id"].some(r=>String(De(e,r)?.value??"")===t)}function Rh(e){const t=De(e,"collector_id"),r=De(e,"resource_id");if(!t||!r)return;const o=Hs(e,"resource_provider",String(t.value??""));if(!!o&&String(t.value??"")===String(De(o,"collector_id")?.value??"")&&Qm(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 jc(e){const t=dn(e),r=Vs(e);let o=!1;t.forEach((n,i)=>{const a=Hs(e,`resource_provider_${i+1}`,n.collector_id);if(!!a&&Qm(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&&Wn(e,t)}function ds(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="";wf(e,"consumer",t);for(let n=0;n=0&&e.inputs?.[n]?.link!=null&&e.disconnectInput?.(n);const a=ga(e).find(c=>c.id===r)?.node,l=a?yf(a):-1;a&&n>=0&&l>=0&&a.connect(l,e,n),ds(e,!!e.properties?.bvM0DebugVisible),vo(i)}function ba(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===Zm).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 ex(e,t){[0,50,150,300].forEach(r=>setTimeout(()=>ba(e,t),r))}function el(e){if(!De(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+dn(e).length*124),onDraw:()=>ba(e,r),afterResize:()=>ba(e,r)});n&&(n.serialize=!1)}e.__bvM0PickerRoot??(e.__bvM0PickerRoot=Hi.createRoot(r));const o=()=>{const n=ga(e),i=dn(e).map((a,l)=>{const c=Sa(e,l);return{...a,resolved:!!c&&String(De(c,"collector_id")?.value??"")===a.collector_id}});e.__bvM0PickerRoot.render(s.jsx(Rk,{collectors:n,bindings:i,debugVisible:!!e.properties?.bvM0DebugVisible,onDebug:a=>{ds(e,a),o()},onBinding:(a,l,c)=>{i[a]={...i[a],collector_id:l,resource_id:c},Wn(e,i),Sh(e,a,l),o()},onAdd:()=>{i.length>=Ws||(i.push({binding_id:crypto.randomUUID(),collector_id:"",resource_id:"",resolved:!1}),Wn(e,i),o())},onRemove:a=>{const l=Vs(e),c=l[a];c>=0&&e.inputs?.[c]?.link!=null&&e.disconnectInput?.(c),i.splice(a,1),Wn(e,i);for(let f=a;f=0&&e.inputs?.[u]?.link!=null&&e.disconnectInput?.(u),o()}}))};o(),ds(e,!!e.properties?.bvM0DebugVisible,!1),ex(e,r)}function Pc(e,t){if(e.__bvM0DomRefresh)return;const r=()=>{setTimeout(t,0),setTimeout(t,100)};e.__bvM0DomRefresh=r,Xr().addEventListener("executed",r),Xr().addEventListener("graphChanged",r);const o=e.onRemoved;e.onRemoved=function(){return Xr().removeEventListener("executed",r),Xr().removeEventListener("graphChanged",r),o?.apply(this,arguments)}}function qu(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=""),wf(e,"consumer",t),vo(un(e)),qm(e.graph),t&&Km(e.graph?.list_of_graphcanvas?.[0]??gt().canvas),r&&e.setDirtyCanvas?.(!0,!0)}function zk(e,t){const r=un(e),o=Xm(e);o>=0&&e.inputs?.[o]?.link!=null&&e.disconnectInput?.(o);const n=ga(e).find(a=>a.id===t)?.node,i=n?yf(n):-1;n&&o>=0&&i>=0&&n.connect(i,e,o),qu(e,!!e.properties?.bvM0DebugVisible),vo(r)}function tl(e){const t=De(e,"collector_id"),r=De(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:()=>ba(e,o),afterResize:()=>ba(e,o)});i&&(i.serialize=!1)}e.__bvM0PickerRoot??(e.__bvM0PickerRoot=Hi.createRoot(o));const n=()=>{const i=un(e),a=String(De(i,"collector_id")?.value??"");e.__bvM0PickerRoot.render(s.jsx(Tk,{collectors:ga(e),collectorId:String(t.value??""),resourceId:String(r.value??""),resolved:!!i&&a===String(t.value??""),debugVisible:!!e.properties?.bvM0DebugVisible,onDebug:l=>{qu(e,l),n()},onCollector:l=>{t.value=l;const c=ga(e).find(u=>u.id===l)?.resources[0];r.value=c?.id??"",zk(e,l),n()},onResource:l=>{r.value=l,n()}}))};n(),qu(e,!!e.properties?.bvM0DebugVisible,!1),ex(e,o)}function Fk(e,t){if(t.name===Ak){const r=e.prototype.onNodeCreated,o=e.prototype.onConfigure,n=function(){Ic(),this.__bvM0ResourceProvider=!0,yf(this),Dc(De(this,"collector_id")),Dc(De(this,"resource_a_id"),Ik),Dc(De(this,"resource_b_id"),jk),Pk(this),["collector_id","resource_a_id","resource_b_id"].forEach(i=>Ac(De(this,i))),Pc(this,()=>vo(this)),vo(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===Dk){const r=e.prototype.onNodeCreated,o=e.prototype.onConfigure,n=e.prototype.onConnectionsChange,i=function(){Ic(),this.__bvM0ResourceConsumer=!0,Xm(this),Th(this),Rh(this),["collector_id","resource_id"].forEach(a=>Ac(De(this,a))),Pc(this,()=>tl(this)),tl(this),setTimeout(()=>tl(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=un(this),l=n?.apply(this,arguments);return queueMicrotask(()=>{Th(this),Rh(this),tl(this),vo(a),vo(un(this))}),l},!0}if(t.name===Jm){const r=e.prototype.onNodeCreated,o=e.prototype.onConfigure,n=e.prototype.onConnectionsChange,i=function(){Ic(),this.__bvM0ResourceConsumer=!0,Vs(this),Bk(this),Qa(this),jc(this),Ac(De(this,"resource_bindings")),Pc(this,()=>{Qa(this),el(this)}),el(this),[0,50,150].forEach(a=>setTimeout(()=>{Qa(this),jc(this),el(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(()=>{Qa(this),jc(this),ds(this,!!this.properties?.bvM0DebugVisible,!1),el(this)}),a},!0}return!1}const kf="BV Control Center",fs=0,Uk=2,Wk=4,Li="bvControlBaseMode",Vk="bv-open-control-rack",tx=320,Hk=48,Lh="bv_control_conflict_status",Bc=new Set;function $k(e){return e==="activate"?{mode:fs,priority:3}:e==="mute"?{mode:Uk,priority:2}:{mode:Wk,priority:1}}function Ch(e){const t=new Set(Kl(gt()).map(r=>r.id));return{...e,controls:e.controls.map(r=>({...r,assignments:r.assignments.map(o=>({...o,unresolved:!t.has(o.groupId)}))}))}}function Yk(e){return lw(e,t=>tv(t,kf))}function Xk(e){for(const o of Bc){const n=o.properties?.[Li];o.mode=e.forceActive?fs:typeof n=="number"?n:o.mode,o.properties&&delete o.properties[Li],o.setDirtyCanvas?.(!0,!0)}Bc.clear();const t=new Map(Kl(gt()).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 Yk(i)){const l=$k(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[Li]!="number"&&(o.properties[Li]=typeof o.mode=="number"?o.mode:fs),o.mode=n.mode,Bc.add(o),o.setDirtyCanvas?.(!0,!0)}function Gk(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 Kk(e,t){const r=rv(t),o=sw(r);let n=e.widgets?.find(i=>i.name===Lh);n||(n=e.addCustomWidget({name:Lh,type:"custom",value:o,y:0,options:{},serialize:!1,computeSize:()=>[0,24],computeLayoutSize:()=>({minHeight:24,maxHeight:24,minWidth:tx}),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 rx(e,t){e.mode=fs,e.properties&&delete e.properties[Li];let r=e.widgets?.find(c=>c.name==="configure_control_center");r||(r=e.addWidget("button","configure_control_center",null,()=>window.dispatchEvent(new Event(Vk)),{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)&&Gk(e,c)}for(const c of t.controls){const u=`bvcc_${c.id}`,f=g=>{const x=an(),w={...x,controls:x.controls.map(E=>E.id===c.id?{...E,enabled:!!g}:E)};Gd(w)};let d=e.inputs.find(g=>g.name===u);d||(d=e.addInput(u,"BOOLEAN",{label:c.name,nameLocked:!0,widget:{name:u}})),d.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,f,{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=f,d.widget={name:u}}Kk(e,t);const n=e.widgets?.find(c=>c.name==="bv_control_config_json");n&&(n.value=JSON.stringify(Ch(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(Ch(an()))),e.serialize_widgets=!0;const i=e.size??[0,0],a=e.computeSize?.()??i,l=Math.max(tx,(a[0]??0)+Hk);e.setSize?.([Math.max(i[0]??0,l),a[1]??i[1]??0]),e.setDirtyCanvas?.(!0,!0)}function ox(e=an()){for(const{node:t}of iw(gt(),kf))rx(t,e);Xk(e)}window.addEventListener(Jn,e=>ox(e.detail));gt().registerExtension({name:"bv_nodepack.control_center",async beforeRegisterNodeDef(e,t){if(t.name!==kf)return;const r=e.prototype.onNodeCreated;e.prototype.onNodeCreated=function(){const o=r?.apply(this,arguments);return rx(this,an()),o}},afterConfigureGraph(){ox()}});const st=gt(),mr=Xr();w1(e=>st.ui?.settings?.setSettingValue?.(mm,e));k1(e=>st.ui?.settings?.setSettingValue?.(xm,e));_1(e=>st.ui?.settings?.setSettingValue?.(ym,e));Qw(e=>st.ui?.settings?.setSettingValue?.(af,e));const Ju="bv-open-control-rack",Vn="bv-open-regional-editor",Wi="bv-open-regional-quick-edit",mo="bv-regional-document-changed",Nh="bv-nodepack-styles",nx="BV.DebugBridge.Enabled";let Zo=!1,rl=null;const qk=()=>{const e=st.extensionManager?.workflow?.activeWorkflow??st.workflowManager?.activeWorkflow;return String(e?.filename??e?.path??"Current workflow")},ix=async e=>{Zo=!!e;const t=await fetch(mr.apiURL("/bv_nodepack/debug/session"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({enabled:Zo})});if(!t.ok)throw new Error(`BV Debug Bridge session failed: ${t.status} ${await t.text()}`)},ax=async()=>{if(!Zo)return!1;const e=await st.graphToPrompt(),t=await fetch(mr.apiURL("/bv_nodepack/debug/snapshot"),{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({prompt:e.output,workflow_name:qk()})});if(!t.ok)throw new Error(`BV Debug Bridge snapshot failed: ${t.status} ${await t.text()}`);return!0},ps=()=>{Zo&&(rl!=null&&window.clearTimeout(rl),rl=window.setTimeout(()=>{rl=null,ax().catch(e=>console.error(e))},600))},Mr=e=>{e.type="converted-widget",e.hidden=!0,e.computeSize=()=>[0,-4],e.element&&(e.element.style.display="none")},Jk=(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)},Zk=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=[]},$s=e=>{const t=e.inputs?.find(a=>a.name==="regional"||a.name==="regional_prompt"),r=e.graph??st.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 sn(i)}catch{return null}},Qk=e=>{const t=e.graph??st.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=Ui(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,f=String(u?.widgets?.find(d=>d.name==="detector_id")?.value??"").trim();f&&a.push(f)}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(xk(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)},Oh=(e,t)=>{for(const r of e.inputs??[])r.label=Oc(t,String(r.name));for(const r of e.outputs??[])r.label=Oc(t,String(r.name));for(const r of e.widgets??[])String(r.name).startsWith("configure_")||(r.label=Oc(t,String(r.name)));e.setDirtyCanvas?.(!0,!0)},Zu=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;Mr(t);const o=$s(e),n=o?kl(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)},Mh=e=>{const t=e.widgets?.find(o=>o.name==="config_json");if(!t)return;Mr(t);let r=e.widgets?.find(o=>o.name==="configure_detailer_plan");r||(r=e.addWidget("button","configure_detailer_plan",null,()=>{const o=$s(e);o&&(Zr("detailer",Pe(e)),gk(o.regions,Qk(e),t.value,n=>{t.value=n,Zu(e),e.graph?.setDirtyCanvas?.(!0,!0)},`detailer-plan:${Pe(e)}`,zt("BV Regional Detailer Plan").filter(hn).map(n=>({id:Pe(n),label:`${n.title||"BV Regional Detailer Plan"} · #${n.id}`})),(n,i)=>{const a=zt("BV Regional Detailer Plan").find(c=>Pe(c)===n),l=a?.widgets?.find(c=>c.name==="configure_detailer_plan");l&&nf(`detailer-plan:${Pe(e)}`,`detailer-plan:${Pe(a)}`,()=>l.callback?.(),i)},e))},{serialize:!1}),r.serialize=!1),Zu(e)},Ah=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[]}},Ef=e=>{if(e.comfyClass!=="BV Regional Detailer Mask"&&e.type!=="BV Regional Detailer Mask")return;const t=e.widgets?.find(f=>f.name==="context_regions_json");if(!t)return;Mr(t);const r=$s(e);if(!r)return;for(const f of e.__bvDetailerContextWidgets??[]){const d=e.widgets?.indexOf(f)??-1;d>=0&&e.widgets.splice(d,1),f.onRemove?.()}const o=String(e.widgets?.find(f=>f.name==="region")?.value??""),n=(r?.regions??[]).filter(f=>f.enabled!==!1&&f.id!==o),i=new Set,a=Ah(t.value).filter(f=>f.region_id!==o&&!i.has(f.region_id)&&!!i.add(f.region_id));t.value=JSON.stringify(a);const l=[],c=f=>{t.value=JSON.stringify(f),queueMicrotask(()=>Ef(e))};for(let f=0;f<=a.length;f++){const d=a[f],p=new Set(a.filter((E,b)=>b!==f).map(E=>E.region_id)),g=Vm(n.filter(E=>!p.has(E.id))),x=d&&!g.some(E=>E.id===d.region_id)?`Missing region · ${d.region_id.slice(0,8)}`:null,w=e.addWidget("combo",`context_region_${f+1}`,d?g.find(E=>E.id===d.region_id)?.label??x??"None":"None",E=>{if(E==="None")return c(a.slice(0,f));const b=g.find(v=>v.label===E);if(!b)return;const h=a.slice();h[f]={region_id:b.id,influence:d?.influence??1},c(h)},{values:["None",...x?[x]:[],...g.map(E=>E.label)],serialize:!1});if(w.label=`context region ${f+1}`,w.serialize=!1,l.push(w),d){const E=e.addWidget("number",`context_influence_${f+1}`,d.influence,b=>{const h=Ah(t.value);h[f]&&(h[f].influence=Math.max(0,Math.min(2,+b))),t.value=JSON.stringify(h)},{min:0,max:2,step:.05,precision:2,serialize:!1});E.label=`context influence ${f+1}`,E.serialize=!1,l.push(E)}}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)},El=e=>{const t=e.widgets?.find(f=>f.name==="region"),r=e.widgets?.find(f=>f.name==="region_selector");if(!t||!r)return;const o=$s(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=Vm(o.regions,n),a=String(t.value??""),l=i.some(f=>f.id===a)?a:a||i[0]?.id||"";t.value=l,e.__bvRegionChoices=i,r.options??(r.options={});const c=l&&!i.some(f=>f.id===l)?`Missing region · ${l.slice(0,8)}`:null;r.options.values=i.length||c?[...c?[c]:[],...i.map(f=>f.label)]:["Connect a BV Regional Prompt"],r.value=i.find(f=>f.id===l)?.label??c??r.options.values[0];const u=e.widgets?.find(f=>f.name==="scope");r.disabled=u&&u.value!=="region"||!i.length,Ef(e),e.setDirtyCanvas?.(!0,!0)},Dh=e=>{const t=e.widgets?.find(n=>n.name==="region");if(!t)return;Mr(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,Ef(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")&&Jk(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 El(e),i}}if(!e.__bvRegionDocumentListener){e.__bvRegionDocumentListener=()=>El(e),window.addEventListener(mo,e.__bvRegionDocumentListener);const n=e.onRemoved;e.onRemoved=function(){return window.removeEventListener(mo,e.__bvRegionDocumentListener),n?.apply(this,arguments)}}El(e)},zt=e=>{const t=[],r=o=>{for(const n of o?._nodes??[])n.type===e&&t.push(n),n.subgraph&&r(n.subgraph)};return r(st.graph),t},Qo=()=>{const e=st.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},Vi=()=>{const e=zt("BV Control Center").length>0,t=Qo().length>0,r=t||["BV Regional Detailer Plan","BV Detector Registry","BV Smart Pipe","BV Smart Pipe Merge"].some(n=>zt(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}}))},lx=e=>sf(st.rootGraph??st.graph,t=>t===e)[0],Pe=e=>lx(e)?.key??String(e.id),ol=(e,t)=>{const r=lx(e);return{label:String(e.title||t),meta:`${r?.breadcrumb?`${r.breadcrumb} · `:""}#${e.id}`}},hs=(e,t,r,o)=>{const n=o.widgets?.find(c=>c.name===r);if(!n||n.disabled)return;const i=Pe(o),a=Vo(e),l=()=>n.callback?.();a&&a!==i?nf(`${t}:${a}`,`${t}:${i}`,l,Qn()==="replace"):l(),Zr(e,i)},Ih=(e,t)=>{e==="regional"?window.dispatchEvent(new CustomEvent(Vn,{detail:{node:t}})):e==="detailer"?hs("detailer","detailer-plan","configure_detailer_plan",t):e==="detector"?hs("detector","detector-registry","configure_detector_registry",t):window.dispatchEvent(new CustomEvent("bv-open-smart-pipe-editor",{detail:{node:t,kind:e}}))},eE=()=>{const e=[{type:"regional",nodes:Qo()},{type:"detailer",nodes:zt("BV Regional Detailer Plan")},{type:"detector",nodes:zt("BV Detector Registry")},{type:"pipe",nodes:zt("BV Smart Pipe")},{type:"merge",nodes:zt("BV Smart Pipe Merge")}],t=t1(),r=t&&Vo(t),o=e.find(i=>i.type===t)?.nodes.find(i=>Pe(i)===r);if(o){Ih(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&&(Ih(n.type,n.node),t&&Or({title:"Previous editor unavailable",message:"Opened the first available BV editor instead.",tone:"warning",duration:4e3}))},Qu=()=>{const e=st.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))},tE=()=>nk(Qo().flatMap(e=>{try{const t=sn(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[]}})),jh=(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=tE(),i=ik(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)},Ph=(e,t=!1)=>{const r=e.widgets?.find(n=>n.name==="document_id");if(!r)return;Mr(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=()=>jh(e,!1),window.addEventListener(mo,e.__bvDocumentTargetListener);const n=e.onRemoved;e.onRemoved=function(){return window.removeEventListener(mo,e.__bvDocumentTargetListener),n?.apply(this,arguments)}}jh(e,t)},Bh=(e,t=!1)=>{const r=e.widgets?.find(o=>o.name==="regional_json");if(r)try{const o=t?Jp():sn(r.value);!t&&Qo().some(a=>{if(a===e)return!1;try{return sn(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={...mf(i.value,t?"":o.document_id),document_id:o.document_id};i.value=JSON.stringify(Un(a,new Set(o.regions.map(l=>l.id))))}catch{i.value=JSON.stringify(Us(o.document_id))}}catch{r.value=JSON.stringify(Jp())}};function rE(){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),[f,d]=m.useState(0),[p,g]=m.useState(null),[x,w]=m.useState([]),[E,b]=m.useState({}),[h,v]=m.useState([]),_=m.useCallback((y=!1)=>{const T=Qo(),L=zt("BV Regional Detailer Plan"),B=zt("BV Detector Registry"),C=[...zt("BV Smart Pipe"),...zt("BV Smart Pipe Merge")],I=(S,k)=>{const j=!hn(S);return j&&!y?null:{...k,hidden:j,onReveal:j?()=>li(S,!0):void 0}};return[{id:"regional",label:"Regional Prompts",items:T.map(S=>{const k=ol(S,"BV Regional Prompt"),j=Vo("regional")===Pe(S);return I(S,{id:Pe(S),...k,meta:`${k.meta}${j?" · Last active":""}`,onSelect:()=>window.dispatchEvent(new CustomEvent(Vn,{detail:{node:S}})),secondary:{label:`Quick edit ${k.label}`,onSelect:()=>window.dispatchEvent(new CustomEvent(Wi,{detail:{node:S}}))}})}).filter(Boolean)},{id:"detailer",label:"Detailer Plan",items:L.map(S=>{const k=ol(S,"BV Regional Detailer Plan"),j=S.widgets?.find(R=>R.name==="configure_detailer_plan"),A=Vo("detailer")===Pe(S);return I(S,{id:Pe(S),...k,disabled:!j||j.disabled,meta:`${k.meta}${j?.disabled?" · Connect Regional Prompt":A?" · Last active":""}`,onSelect:()=>hs("detailer","detailer-plan","configure_detailer_plan",S)})}).filter(Boolean)},{id:"detector",label:"Detector Registry",items:B.map(S=>{const k=ol(S,"BV Detector Registry"),j=Vo("detector")===Pe(S);return I(S,{id:Pe(S),...k,meta:`${k.meta}${j?" · Last active":""}`,onSelect:()=>hs("detector","detector-registry","configure_detector_registry",S)})}).filter(Boolean)},{id:"smart-pipe",label:"Smart Pipes",items:C.map(S=>{const k=String(S.type??S.comfyClass)==="BV Smart Pipe Merge"?"merge":"pipe",j=ol(S,k==="merge"?"Smart Pipe Merge":"Smart Pipe");return I(S,{id:Pe(S),...j,meta:`${j.meta} · ${k==="merge"?"Merge":"Pipe"}`,onSelect:()=>window.dispatchEvent(new CustomEvent("bv-open-smart-pipe-editor",{detail:{node:S,kind:k}}))})}).filter(Boolean)}]},[]);return m.useEffect(()=>{if(!(!n&&!c))return uk(st,mr,()=>{i(!1),u(!1)})},[c,n]),m.useEffect(()=>{const y=()=>t(!0);return window.addEventListener(Ju,y),()=>window.removeEventListener(Ju,y)},[]),m.useEffect(()=>{const y=T=>o(!!T.detail?.control);return window.addEventListener("bv-toolbar-capabilities-changed",y),Vi(),()=>window.removeEventListener("bv-toolbar-capabilities-changed",y)},[]),m.useEffect(()=>{const y=T=>{const L=T.detail?.node??null,B=Qo();v(Qu()),w(B);const C=L??B.find(I=>Pe(I)===Vo("quick"))??B[0]??null;C&&Zr("quick",Pe(C)),g(C),i(!1),u(!0),d(I=>I+1)};return window.addEventListener(Wi,y),()=>window.removeEventListener(Wi,y)},[]),m.useEffect(()=>{const y=T=>{const L=T.detail?.output,B=L?.bv_regional_background?.[0]?.document_id,C=L?.images?.[L.images.length-1];if(!B||!C)return;const I=new URLSearchParams({filename:C.filename,type:C.type,subfolder:C.subfolder||""});b(z=>({...z,[B]:mr.apiURL(`/view?${I}`)}))};return mr.addEventListener("executed",y),()=>mr.removeEventListener("executed",y)},[]),m.useEffect(()=>{const y=T=>{const L=T.detail?.node??null,B=Qo();v(Qu()),w(B);const C=L??B.find(I=>Pe(I)===Vo("regional"))??B[0]??null;C&&Zr("regional",Pe(C)),g(C),C&&c&&String(p?.id)===String(C.id)&&u(!1),i(!0),l(I=>I+1)};return window.addEventListener(Vn,y),()=>window.removeEventListener(Vn,y)},[c,p]),s.jsxs(s.Fragment,{children:[s.jsx(Z0,{}),s.jsx(h0,{getColumns:_}),s.jsx(n1,{}),s.jsx(o1,{open:e,hasControlNodes:r,onClose:()=>t(!1)}),s.jsx(ek,{open:n,activationToken:a,nodes:x,initialNode:p,backgrounds:E,loraStacks:h,onClose:()=>i(!1)}),s.jsx(ok,{open:c,activationToken:f,nodes:x,initialNode:p,loraStacks:h,onClose:()=>u(!1),onOpenEditor:y=>{Zr("regional",Pe(y)),g(y),u(!1),i(!0),l(T=>T+1)}})]})}const zh="bv-root";function oE(){if(!document.getElementById(Nh)){const t=document.createElement("style");t.id=Nh,t.textContent=`${c1} -${s1}`,document.head.appendChild(t)}let e=document.getElementById(zh);e||(e=document.createElement("div"),e.id=zh,document.body.appendChild(e),Hi.createRoot(e).render(s.jsx(Te.StrictMode,{children:s.jsx(rE,{})})))}st.registerExtension({name:"bv_nodepack.control_rack_portal",setup(){oE(),o0(st.ui?.settings),ck(),Zo=!!st.ui?.settings?.getSettingValue?.(nx,!1),ix(Zo).then(()=>{Zo&&ps()}).catch(e=>console.error(e)),mr.addEventListener("graphChanged",ps),mr.addEventListener("graphChanged",Vi)}});st.registerExtension({name:"bv_nodepack.regional_editor",settings:[{id:yv,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=>kv(e)},{id:_v,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=>Ev(e)},{id:af,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=>lf(e,!1)},{id:nx,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=>{ix(!!e).then(()=>{e&&ps()}).catch(t=>console.error(t))}},{id:mm,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=>Lm(!!e)},{id:ym,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=>Rm(e)},{id:xm,name:"Completion Datasets",type:ak,defaultValue:"",category:["BV Node Pack","Prompting","Completion datasets"],tooltip:"Choose one or more local CSV/TSV datasets for BV Prompt Autocomplete.",onChange:e=>Mm(e)}],commands:[{id:"bv.regional.openEditor",label:"Open BV Regional Editor",icon:"icon-[lucide--layers]",function:()=>{window.dispatchEvent(new CustomEvent(Vn))}},{id:"bv.debugBridge.publishSnapshot",label:"Refresh BV Debug Bridge Snapshot",icon:"icon-[lucide--radio-tower]",function:()=>ax().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(Ju))},{icon:"icon-[lucide--scan-search]",class:"bv-regional-action bv-regional-action-editor",tooltip:"Open last BV editor",onClick:eE},{icon:"icon-[lucide--layers]",class:"bv-regional-action bv-regional-action-quick",tooltip:"Quick edit BV Regional prompts",onClick:()=>window.dispatchEvent(new CustomEvent(Wi))},{icon:"icon-[lucide--chevron-down]",class:"bv-regional-action bv-regional-action-menu",tooltip:"Choose BV window",onClick:()=>window.dispatchEvent(new CustomEvent(Zl))}],beforeRegisterNodeDef(e,t){if(Fk(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(Vi),l},e.prototype.onRemoved=function(){const l=a?.apply(this,arguments);return queueMicrotask(Vi),l}}if(yk.has(t.name)){const i=e.prototype.onNodeCreated,a=e.prototype.onConfigure;e.prototype.onNodeCreated=function(){const l=i?.apply(this,arguments);return queueMicrotask(()=>Oh(this,t.name)),l},e.prototype.onConfigure=function(l){const c=a?.call(this,l);return queueMicrotask(()=>Oh(this,t.name)),c}}if(t.name==="BV Detector Registry"){const i=u=>{const f=u.widgets?.find(g=>g.name==="config_json");if(!f)return;Mr(f);let d=u.widgets?.find(g=>g.name==="configure_detector_registry");d||(d=u.addWidget("button","configure_detector_registry",null,()=>{Zr("detector",Pe(u)),vk(mr,f.value,g=>{f.value=g,i(u),u.graph?.setDirtyCanvas?.(!0,!0)},`detector-registry:${Pe(u)}`,zt("BV Detector Registry").filter(hn).map(g=>({id:Pe(g),label:`${g.title||"BV Detector Registry"} · #${g.id}`})),(g,x)=>{const w=zt("BV Detector Registry").find(b=>Pe(b)===g),E=w?.widgets?.find(b=>b.name==="configure_detector_registry");E&&nf(`detector-registry:${Pe(u)}`,`detector-registry:${Pe(w)}`,()=>E.callback?.(),x)},u).catch(g=>console.error(g))},{serialize:!1}),d.serialize=!1);const p=Ui(f.value).detectors.length;d.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(()=>Mh(this)),c},e.prototype.onConfigure=function(){const c=a?.apply(this,arguments);return queueMicrotask(()=>Mh(this)),c},e.prototype.onConnectionsChange=function(){const c=l?.apply(this,arguments);return queueMicrotask(()=>Zu(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(()=>kh(this,mr)),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(()=>kh(this,mr)),c};return}if(t.name==="BV Named LoRA Stack"){const i=c=>{const u=c.widgets?.find(d=>d.name==="stack_id");if(!u)return;const f=String(u.value??"").trim();(!f||X1(String(c.id),f,Qu()))&&(u.value=crypto.randomUUID(),c.setDirtyCanvas?.(!0,!0)),Mr(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(()=>Ph(this,!0)),l},e.prototype.onConfigure=function(){const l=a?.apply(this,arguments);return queueMicrotask(()=>Ph(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 Dh(this),u};const c=e.prototype.onSerialize;e.prototype.onConfigure=function(u){t.name==="BV Regional Detailer Mask"&&(Zk(this),u?.widgets_values&&(u={...u,widgets_values:fk(u.widgets_values)}));const f=a?.call(this,u);return queueMicrotask(()=>Dh(this)),f},e.prototype.onSerialize=function(u){const f=c?.apply(this,arguments);return t.name==="BV Regional Detailer Mask"&&(u.widgets_values=dk(this.widgets)),f},e.prototype.onConnectionsChange=function(){const u=l?.apply(this,arguments);return queueMicrotask(()=>El(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);Bh(this,!0);const a=this.widgets?.find(c=>c.name==="regional_json"),l=this.widgets?.find(c=>c.name==="lora_bindings_json");if(l&&Mr(l),a&&(Mr(a),!a.__bvRegionalDocumentHooked)){a.__bvRegionalDocumentHooked=!0;const c=a.callback;a.callback=function(){const u=c?.apply(this,arguments);return window.dispatchEvent(new CustomEvent(mo)),u}}if(!this.widgets?.find(c=>c.name==="open_regional_editor")){const c=this.addWidget("button","open_regional_editor",null,()=>window.dispatchEvent(new CustomEvent(Vn,{detail:{node:this}})),{serialize:!1});c.label="Open Regional Editor",c.serialize=!1}if(!this.widgets?.find(c=>c.name==="quick_edit_regional_prompts")){const c=this.addWidget("button","quick_edit_regional_prompts",null,()=>window.dispatchEvent(new CustomEvent(Wi,{detail:{node:this}})),{serialize:!1});c.label="Quick Edit Prompts",c.serialize=!1}return this.setSize?.([Math.max(this.size?.[0]??0,220),this.computeSize?.()[1]??60]),window.dispatchEvent(new CustomEvent(mo)),i},e.prototype.onConfigure=function(){const i=o?.apply(this,arguments);Bh(this,!1);const a=this.widgets?.find(l=>l.name==="lora_bindings_json");return a&&Mr(a),window.dispatchEvent(new CustomEvent(mo)),i};const n=e.prototype.onRemoved;e.prototype.onRemoved=function(){const i=n?.apply(this,arguments);return window.dispatchEvent(new CustomEvent(mo)),i}},afterConfigureGraph(){ps(),queueMicrotask(Vi)}}); + 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}},M(kt,"TYPE","tab"),M(kt,"attributeDefinitions",kt.createAttributeDefinitions()),kt),no={width:"1em",height:"1em",display:"flex",alignItems:"center"},kl=()=>s.jsxs("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:no,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"})]});kl.displayName="CloseIcon";var Hv=()=>s.jsxs("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:no,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"})]});Hv.displayName="PinIcon";var $v=()=>s.jsxs("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:no,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"})]});$v.displayName="MaximizeIcon";var Yv=()=>s.jsxs("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:no,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"})]});Yv.displayName="OverflowIcon";var Xv=()=>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"})});Xv.displayName="EdgeIcon";var $u=()=>s.jsxs("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:no,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"})]});$u.displayName="PopoutIcon";var Gv=()=>s.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 -960 960 960",style:no,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"})});Gv.displayName="PopoutFloatIcon";var Kv=()=>s.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",style:no,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"})});Kv.displayName="GripIcon";var qv=()=>s.jsxs("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:no,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"})]});qv.displayName="RestoreIcon";var Jv=()=>s.jsx("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:no,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"})});Jv.displayName="AsterickIcon";var Zv=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"}})};Zv.displayName="Overlay";var Ae=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}({}),ha=e=>{const{controller:t,tabNode:r}=e,o=t.getClassName,n=o(U.FLEXLAYOUT__TAB_BUTTON_STAMP),i=mf(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]})};ha.displayName="TabButtonStamp";var P0=500;function Ws(e){return typeof e.getBoundingClientRect=="function"}function Qv(e){return e.container?e.container:Ws(e.anchor)?e.anchor.ownerDocument.body:document.body}function B0(e){if(Ws(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 z0(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=Qv(e),u=m.useRef(null),f=m.useRef(null),d=m.useRef({buffer:"",timer:void 0});m.useEffect(()=>()=>{d.current.timer&&clearTimeout(d.current.timer)},[]);const p=m.useCallback(b=>{b.disabled||((b.onSelect??o)?.(b),n())},[o,n]);m.useEffect(()=>{(f.current?.querySelector('[role="menuitem"]:not([aria-disabled="true"])')??f.current)?.focus();const b=e.returnFocusTo??(Ws(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(f.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=d.current;y.timer&&clearTimeout(y.timer),y.buffer+=b.key.toLowerCase(),y.timer=setTimeout(()=>{y.buffer=""},P0);const T=[...y.buffer].every(C=>C===y.buffer[0]),L=T?y.buffer[0]:y.buffer,B=T?_+1:Math.max(_,0);for(let C=0;C({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),E=s.jsx("div",{ref:u,className:l(U.FLEXLAYOUT__POPUP_MENU_CONTAINER),style:z0(B0(t),c.getBoundingClientRect()),children:s.jsx("div",{ref:f,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 Pr.createPortal(E,c)};function F0(e){const t=Qv(e),r=Ws(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(em,{...e,anchor:r,container:t,onClose:a})),a}function tm(e,t,r,o,n,i){const a=n.getClassName,l=r.map(u=>({key:u.node.getId()}));n.showOverlayOnAllWindows(!0);const c=(u,f,d)=>{const p=r[f];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"+f,onClick:x=>{d.select(),x.stopPropagation()},draggable:!0,onDragStart:x=>{x.stopPropagation(),n.getDragDropManager().setDragNode(x.nativeEvent,p.node),setTimeout(()=>d.close(),0)},onDragEnd:()=>n.getDragDropManager().onDragEnded(),title:p.node.getHelpText(),children:s.jsx(ha,{tabNode:p.node,controller:n})},u.key)};return F0({anchor:e,container:n.getRootDiv()??void 0,classNameMapper:a,returnFocusTo:e,title:n.i18nName(Ae.Overflow_Menu_Tooltip),items:l,onSelect:u=>{const f=l.indexOf(u);f>=0&&o(r[f])},renderItem:c,onClose:()=>{n.showOverlayOnAllWindows(!1),i?.()}})}em.displayName="PopupMenu";var rm=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,f=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=Y=>{Y.target!==a.current&&t.setEditingTab(void 0)};return F.addEventListener("pointerdown",ne),()=>F.removeEventListener("pointerdown",ne)}},[u,t]);const d=F=>{r.isEnableDrag()?(F.stopPropagation(),t.getDragDropManager().setDragNode(F.nativeEvent,r)):F.preventDefault()},p=F=>{t.getDragDropManager().onDragEnded()},g=F=>{pa(F)&&t.auxMouseClick(r,F)},x=F=>{t.showContextMenu(r,F)},w=()=>{r.isSelected()||t.doAction(re.selectTab(r.getId()))},E=F=>{const ne=i.current?.closest('[role="tablist"]');if(ne){const Y=Array.from(ne.querySelectorAll('[role="tab"]'));Y[Y.indexOf(i.current)+F]?.focus()}},b=()=>{const F=i.current.ownerDocument,ne=()=>zv(F.getElementById(St("flexlayout-tab-",r.getId())));o?ne():(w(),requestAnimationFrame(ne))},h=F=>{u||(Jr(F,c.focusTabToggle)?(b(),F.preventDefault()):F.key==="Enter"||F.key===" "?(o?b():w(),F.preventDefault()):(F.key==="ArrowLeft"||F.key==="ArrowUp")&&!fa(F)?(E(-1),F.preventDefault()):(F.key==="ArrowRight"||F.key==="ArrowDown")&&!fa(F)?(E(1),F.preventDefault()):Jr(F,c.closeTab)&&r.isCloseable()?(E(1),t.doAction(re.deleteTab(r.getId())),F.preventDefault()):Jr(F,c.renameTab)&&r.isEnableRename()&&(_(),F.preventDefault()))},v=F=>{r.isEnableRename()&&(_(),F.stopPropagation())},_=()=>{t.setEditingTab(r)},y=()=>{const F=r.getCloseType();return!!(o||F===Jo.Always||F===Jo.Visible&&window.matchMedia&&window.matchMedia("(hover: hover) and (pointer: fine)").matches)},T=F=>{y()&&(t.doAction(re.deleteTab(r.getId())),F.stopPropagation())},L=F=>{F.stopPropagation()},B=F=>{F.stopPropagation()},C=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())},I=t.getClassName,z=r.getParent(),S=z.isEnableSingleTabStretch()&&z.getChildren().length===1,k=S?U.FLEXLAYOUT__TAB_BUTTON_STRETCH:U.FLEXLAYOUT__TAB_BUTTON;let j=I(k);j+=" "+I(k+"_"+z.getTabLocation()),S||(o?j+=" "+I(k+"--selected"):j+=" "+I(k+"--unselected")),r.isPinned()&&(j+=" "+I(k+"--pinned")),r.getClassName()!==void 0&&(j+=" "+r.getClassName());const A=mf(t,r),R=o||z.getSelectedNode()===void 0&&z.getChildren()[0]===r,O=[So(c.focusTabToggle),r.isCloseable()?So(c.closeTab):void 0,r.isEnableRename()?So(c.renameTab):void 0].filter(Boolean).join(" ")||void 0;let D=A.content?s.jsx("div",{className:I(U.FLEXLAYOUT__TAB_BUTTON_CONTENT),children:A.content}):null;const V=A.leading?s.jsx("div",{className:I(U.FLEXLAYOUT__TAB_BUTTON_LEADING),children:A.leading}):null;if(u&&(D=s.jsx("input",{ref:a,className:I(U.FLEXLAYOUT__TAB_BUTTON_TEXTBOX),"data-layout-path":n+"/textbox",type:"text","aria-label":t.i18nName(Ae.Rename_Tab),autoFocus:!0,defaultValue:r.getName(),onKeyDown:C,onPointerDown:B})),r.isPinned()){const F=t.i18nName(Ae.Pinned_Tab);A.buttons.push(s.jsx("div",{"data-layout-path":n+"/button/pin",title:F,"aria-hidden":"true",className:I(U.FLEXLAYOUT__TAB_BUTTON_PIN),children:typeof l.pin=="function"?l.pin(r):l.pin},"pin"))}if(r.isCloseable()&&!S){const F=t.i18nName(Ae.Close_Tab);A.buttons.push(s.jsx("div",{"data-layout-path":n+"/button/close",title:F,"aria-hidden":"true",className:I(U.FLEXLAYOUT__TAB_BUTTON_TRAILING),onPointerDown:L,onClick:T,children:typeof l.close=="function"?l.close(r):l.close},"close"))}return s.jsxs("div",{ref:f,id:St("flexlayout-tabbutton-",r.getId()),role:u?void 0:"tab","aria-selected":u?void 0:o,"aria-controls":u?void 0:St("flexlayout-tab-",r.getId()),"aria-label":u?void 0:r.isPinned()?A.name+" ("+t.i18nName(Ae.Pinned_Tab)+")":A.name,"aria-keyshortcuts":u?void 0:O,tabIndex:u?-1:R?0:-1,onKeyDown:h,"data-layout-path":n,className:j,onClick:w,onAuxClick:g,onContextMenu:x,title:r.getHelpText(),draggable:!0,onDragStart:d,onDragEnd:p,onDoubleClick:v,children:[V,D,A.buttons]})};rm.displayName="TabButton";var om=(e,t,r,o,n,i,a)=>{const[l,c]=m.useState([]),[u,f]=m.useState(!1),[d,p]=m.useState(!1),g=m.useRef(!1),x=m.useRef(void 0),w=m.useRef([]),E=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(K=>{r===ye.HORZ?o.current.scrollLeft=K:o.current.scrollTop=K},[r,o]),v=m.useCallback(K=>r===ye.HORZ?K.scrollLeft:K.scrollTop,[r]),_=m.useCallback(K=>r===ye.HORZ?K.clientWidth:K.clientHeight,[r]),y=m.useCallback(K=>r===ye.HORZ?K.scrollWidth:K.scrollHeight,[r]),T=m.useCallback(K=>r===ye.HORZ?K.width:K.height,[r]),L=m.useCallback(K=>r===ye.HORZ?K.x:K.y,[r]),B=m.useCallback(K=>r===ye.HORZ?K.right:K.bottom,[r]),C=m.useCallback(()=>{const K=[];if(o.current){const Z=o.current,$=Z.getBoundingClientRect(),Q=L($)-1,oe=B($)+1,le=Z.firstElementChild;let Le=0;Array.from(le.children).forEach(ke=>{const ve=ke.getBoundingClientRect();ke.classList.contains(a)&&((L(ve)oe)&&K.push(Le),Le++)})}return K},[a,o,L,B]),I=m.useCallback(()=>{if(o.current&&n.current){const K=o.current,Z=n.current,$=_(K),Q=y(K),oe=v(K);if(Q>$&&Q>0){let le=$*$/Q,Le=0;le<20&&(Le=20-le,le=20);const ke=oe*($-Le)/Q;r===ye.HORZ?(Z.style.width=le+"px",Z.style.left=ke+"px"):(Z.style.height=le+"px",Z.style.top=ke+"px"),Z.style.display="block"}else Z.style.display="none";r===ye.HORZ?Z.style.bottom="0px":Z.style.right="0px"}},[r,o,n,_,y,v]),z=m.useCallback((K=!1)=>{const Z=C(),$=Z.length>0;$!==u&&f($),K?c(Z):x.current===void 0&&(x.current=setTimeout(()=>{const Q=C();U0(Q,w.current)||c(Q),x.current=void 0},100))},[C,u]),S=m.useCallback(()=>{const K=t.getSelectedNode();if(K&&o.current){const Z=e.getBoundingClientRect(o.current),$=o.current.ownerDocument.getElementById(St("flexlayout-tabbutton-",K.getId()));if(!$)return;const Q=e.getBoundingClientRect($);let oe=L(Z)-L(Q);oe>0||T(Q)>T(Z)?(h(v(o.current)-oe),b.current=!0):(oe=B(Q)-B(Z),oe>0&&(h(v(o.current)+oe),b.current=!0))}},[t,e,o,L,B,T,v,h]),k=m.useCallback(()=>{if(o.current){const K=o.current;let Z=0;for(const Q of Array.from(K.children))Z+=_(Q);const $=Z+(d?10:0)>_(o.current);$!==d&&p($)}},[o,d,_]),j=m.useCallback(()=>{b.current||(g.current=!0),b.current=!1,I(),z()},[I,z]),A=m.useCallback((K,Z)=>{if(o.current&&n.current){const $=o.current,Q=n.current,oe=_($),le=y($),Le=_(Q),ke=$.getBoundingClientRect();let ve;if(r===ye.HORZ?ve=K-ke.x-E.current:ve=Z-ke.y-E.current,ve=Math.max(0,Math.min(le-Le,ve)),oe>0){const Dt=ve*le/oe;h(Dt)}}},[o,n,r,_,y,h]),R=m.useCallback(()=>{},[]),O=m.useCallback(()=>{},[]),D=m.useCallback(K=>{K.stopPropagation(),n.current.setPointerCapture(K.pointerId);const Z=n.current.getBoundingClientRect();r===ye.HORZ?E.current=K.clientX-Z.x:E.current=K.clientY-Z.y,rs(K.currentTarget.ownerDocument,K,A,R,O)},[n,r,A,R,O]),V=m.useCallback(K=>{if(o.current){if(t.getChildren().length===0)return;let Z;if(Math.abs(K.deltaY)>0){Z=-K.deltaY,K.deltaMode===1&&(Z*=40);const $=v(o.current)-Z,Q=y(o.current)-_(o.current);h(Math.max(0,Math.min(Q,$))),K.stopPropagation()}}},[t,o,v,y,_,h]),F=m.useCallback(K=>{K.preventDefault()},[]),ne=t.getId(),Y=t.getSelectedNode();return m.useLayoutEffect(()=>{o.current&&h(0)},[ne,o,h]),m.useLayoutEffect(()=>{g.current=!1},[Y]),m.useLayoutEffect(()=>{k(),g.current===!1&&S(),I(),z(!0),requestAnimationFrame(()=>{z()})},[k,S,I,z,r,Y]),m.useLayoutEffect(()=>{const K=o.current;if(!K)return;const Z=new K.ownerDocument.defaultView.ResizeObserver(()=>{g.current=!1,k(),S(),I(),z()});return Z.observe(K),()=>Z.disconnect()},[k,S,I,z,o]),m.useEffect(()=>{if(t instanceof Oe&&t.isEnableTabWrap())return;const K=i.current;return K?.addEventListener("wheel",F,{passive:!1}),()=>{K?.removeEventListener("wheel",F)}}),{userControlledPositionRef:g,onScroll:j,onScrollPointerDown:D,hiddenTabs:l,onMouseWheel:V,isDockStickyButtons:d,isShowHiddenTabs:u}};function U0(e,t){return e.length===t.length&&e.every((r,o)=>r===t[o])}var nm=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),f=m.useRef(null),[d,p]=m.useState(!1),g=m.useRef(null),x=r.getIcons();m.useEffect(()=>()=>g.current?.(),[]);const{userControlledPositionRef:w,onScroll:E,onScrollPointerDown:b,hiddenTabs:h,onMouseWheel:v,isDockStickyButtons:_,isShowHiddenTabs:y}=om(r,t,ye.HORZ,a,i,n,r.getClassName(U.FLEXLAYOUT__TAB_BUTTON)),T=m.useCallback(X=>{o.current=X,r.registerMeasurable(t,"tabset",X)},[r,t]),L=m.useCallback(X=>{n.current=X,r.registerMeasurable(t,"tabstrip",X)},[r,t]),B=m.useCallback(X=>{l.current=X,r.registerMeasurable(t,"tabsetcontent",X)},[r,t]),C=X=>{const fe=r.getShowOverflowMenu(),pe=h.map(ge=>({index:ge,node:t.getChildren()[ge]}));if(fe!==void 0)fe(t,X,pe,I);else{const ge=u.current;p(!0),g.current=tm(ge,t,pe,I,r,()=>{p(!1),g.current=null})}X.stopPropagation()},I=X=>{r.doAction(re.selectTab(X.node.getId())),w.current=!1},z=X=>{r.getEditingTab()?X.preventDefault():t.isEnableDrag()?(X.stopPropagation(),r.getDragDropManager().setDragNode(X.nativeEvent,t)):X.preventDefault()},S=X=>{!pa(X)&&!t.isActive()&&r.doAction(re.setActiveTabset(t.getId(),r.getLayoutId()))},k=X=>{pa(X)&&r.auxMouseClick(t,X)},j=X=>{r.showContextMenu(t,X)},A=X=>{X.stopPropagation()},R=X=>{t.canMaximize()&&r.maximize(t),X.stopPropagation()},O=X=>{r.doAction(re.deleteTabset(t.getId())),X.stopPropagation()},D=X=>{r.doAction(re.deleteTab(t.getChildren()[0].getId())),X.stopPropagation()},V=X=>{K!==void 0&&r.doAction(re.popoutTab(K.getId(),"window")),X.stopPropagation()},F=X=>{K!==void 0&&r.doAction(re.popoutTab(K.getId(),"float")),X.stopPropagation()},ne=X=>{t.canMaximize()&&r.maximize(t)},Y=r.getClassName,K=t.getSelectedNode(),Z=t.getPath(),$=()=>{const X=[];let fe=!1;if(t.isEnableTabStrip()){const pe=t.isEnableSingleTabStretch()&&t.getChildren().length===1;for(let ge=0;ge{let X,fe=[],pe=[];const ge={leading:X,stickyButtons:fe,buttons:pe,overflowPosition:void 0};r.customizeTabSet(t,ge),X=ge.leading,fe=ge.stickyButtons,pe=ge.buttons;const Ce=t.isEnableSingleTabStretch()&&t.getChildren().length===1;let et=Ce&&t.getChildren()[0].isCloseable()||t.isCloseable();et=et&&t.isEnableCloseButton(),ge.overflowPosition===void 0&&(ge.overflowPosition=fe.length);let ze;if(fe.length>0&&(!t.isEnableTabWrap()&&(_||Ce)?pe=[...fe,...pe]:ze=s.jsx("div",{ref:f,onPointerDown:A,onDragStart:xe=>{xe.preventDefault()},className:Y(U.FLEXLAYOUT__TAB_TOOLBAR_STICKY_BUTTONS_CONTAINER),children:fe},"sticky_buttons_container")),!t.isEnableTabWrap()&&y){const xe=r.i18nName(Ae.Overflow_Menu_Tooltip);let Fe;if(typeof x.more=="function"){const Ze=h.map(Ue=>({index:Ue,node:t.getChildren()[Ue]}));Fe=x.more(t,Ze)}else Fe=s.jsxs(s.Fragment,{children:[x.more,s.jsx("div",{className:Y(U.FLEXLAYOUT__TAB_BUTTON_OVERFLOW_COUNT),children:h.length>0?h.length:""})]});pe.splice(Math.min(ge.overflowPosition,pe.length),0,s.jsx("button",{tabIndex:0,"data-layout-path":Z+"/button/overflow","aria-haspopup":"menu","aria-expanded":d,"aria-label":xe,ref:u,className:Y(U.FLEXLAYOUT__TAB_TOOLBAR_BUTTON)+" "+Y(U.FLEXLAYOUT__TAB_BUTTON_OVERFLOW),title:xe,onClick:C,onPointerDown:A,children:Fe},"overflowbutton"))}if(K!==void 0&&!K.isPinned()){if(K.isEnablePopoutFloatIcon()){const xe=r.i18nName(Ae.Popout_Tab_Float);pe.push(s.jsx("button",{tabIndex:0,"data-layout-path":Z+"/button/popout-float",title:xe,"aria-label":xe,className:Y(U.FLEXLAYOUT__TAB_TOOLBAR_BUTTON)+" "+Y(U.FLEXLAYOUT__TAB_TOOLBAR_BUTTON_FLOAT),onClick:F,onPointerDown:A,children:typeof x.popoutFloat=="function"?x.popoutFloat(K):x.popoutFloat},"popout-float"))}if(r.isSupportsPopout()&&K.isAllowedInWindow()&&K.isEnablePopoutIcon()){const xe=r.i18nName(Ae.Popout_Tab);pe.push(s.jsx("button",{tabIndex:0,"data-layout-path":Z+"/button/popout",title:xe,"aria-label":xe,className:Y(U.FLEXLAYOUT__TAB_TOOLBAR_BUTTON)+" "+Y(U.FLEXLAYOUT__TAB_TOOLBAR_BUTTON_FLOAT),onClick:V,onPointerDown:A,children:typeof x.popout=="function"?x.popout(K):x.popout},"popout"))}}if(t.canMaximize()){const xe=r.i18nName(Ae.Restore),Fe=r.i18nName(Ae.Maximize);pe.push(s.jsx("button",{tabIndex:0,"data-layout-path":Z+"/button/max",title:t.isMaximized()?xe:Fe,"aria-label":t.isMaximized()?xe:Fe,"aria-pressed":t.isMaximized(),className:Y(U.FLEXLAYOUT__TAB_TOOLBAR_BUTTON)+" "+Y(U.FLEXLAYOUT__TAB_TOOLBAR_BUTTON_+(t.isMaximized()?"max":"min")),onClick:R,onPointerDown:A,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()&&et){const xe=Ce?r.i18nName(Ae.Close_Tab):r.i18nName(Ae.Close_Tabset);pe.push(s.jsx("button",{tabIndex:0,"data-layout-path":Z+"/button/close",title:xe,"aria-label":xe,className:Y(U.FLEXLAYOUT__TAB_TOOLBAR_BUTTON)+" "+Y(U.FLEXLAYOUT__TAB_TOOLBAR_BUTTON_CLOSE),onClick:Ce?D:O,onPointerDown:A,children:typeof x.closeTabset=="function"?x.closeTabset(t):x.closeTabset},"close"))}if(t.isActive()&&t.isEnableActiveIcon()){const xe=r.i18nName(Ae.Active_Tabset);pe.push(s.jsx("div",{"data-layout-path":Z+"/button/active",title:xe,"aria-hidden":"true",className:Y(U.FLEXLAYOUT__TAB_TOOLBAR_ICON),children:typeof x.activeTabset=="function"?x.activeTabset(t):x.activeTabset},"active"))}const _e=s.jsx("div",{ref:c,className:Y(U.FLEXLAYOUT__TAB_TOOLBAR),onPointerDown:A,onDragStart:xe=>{xe.preventDefault()},children:pe},"buttonbar");return{leading:X,buttonbar:_e,stickyBar:ze}},oe=(X,fe,pe,ge)=>{let Ce;const et=r.getKeyMap(),ze=[So(et.focusNextTabset),So(et.focusPreviousTabset)].filter(Boolean).join(" ")||void 0,_e=r.getEditingTab()?.getParent()===t,xe=_e?void 0:"tablist";let Fe=Y(U.FLEXLAYOUT__TABSET_TABBAR_OUTER);t.getClassNameTabStrip()!==void 0&&(Fe+=" "+t.getClassNameTabStrip()),Fe+=" "+U.FLEXLAYOUT__TABSET_TABBAR_OUTER_+t.getTabLocation(),t.isActive()&&(Fe+=" "+Y(U.FLEXLAYOUT__TABSET_SELECTED)),t.isMaximized()&&(Fe+=" "+Y(U.FLEXLAYOUT__TABSET_MAXIMIZED));const Ze=t.isEnableSingleTabStretch()&&t.getChildren().length===1;if(Ze){const Br=t.getChildren()[0];Br.getTabSetClassName()!==void 0&&(Fe+=" "+Br.getTabSetClassName())}let Ue;if(fe&&(Ue=s.jsx("div",{className:Y(U.FLEXLAYOUT__TABSET_LEADING),children:fe})),t.isEnableTabWrap())t.isEnableTabStrip()&&(Ce=s.jsxs("div",{className:Fe,style:{flexWrap:"wrap",gap:"1px",marginTop:"2px"},ref:L,"data-layout-path":Z+"/tabstrip",onPointerDown:S,onDoubleClick:ne,onContextMenu:j,onClick:k,onAuxClick:k,draggable:!0,onDragStart:z,children:[Ue,s.jsx("div",{role:xe,"aria-orientation":_e?void 0:"horizontal","aria-label":_e?void 0:t.getName(),"aria-keyshortcuts":_e?void 0:ze,style:{display:"contents"},children:X}),ge,s.jsx("div",{style:{flexGrow:1,display:"flex",justifyContent:"flex-end"},children:pe})]}));else if(t.isEnableTabStrip()){let Br;t.isEnableTabScrollbar()&&(Br=s.jsx("div",{ref:i,"aria-hidden":"true",className:Y(U.FLEXLAYOUT__MINI_SCROLLBAR),onPointerDown:b})),Ce=s.jsxs("div",{className:Fe,ref:L,"data-layout-path":Z+"/tabstrip",onPointerDown:S,onDoubleClick:ne,onContextMenu:j,onClick:k,onAuxClick:k,draggable:!0,onWheel:v,onDragStart:z,children:[Ue,s.jsxs("div",{className:Y(U.FLEXLAYOUT__MINI_SCROLLBAR_CONTAINER),children:[s.jsxs("div",{ref:a,className:Y(U.FLEXLAYOUT__TABSET_TABBAR_INNER)+" "+Y(U.FLEXLAYOUT__TABSET_TABBAR_INNER_+t.getTabLocation()),style:{overflowX:"auto",overflowY:"hidden"},onScroll:E,children:[s.jsx("div",{style:{width:Ze?"100%":"none"},role:xe,"aria-orientation":_e?void 0:"horizontal","aria-label":_e?void 0:t.getName(),"aria-keyshortcuts":_e?void 0:ze,className:Y(U.FLEXLAYOUT__TABSET_TABBAR_INNER_TAB_CONTAINER)+" "+Y(U.FLEXLAYOUT__TABSET_TABBAR_INNER_TAB_CONTAINER_+t.getTabLocation()),children:X}),ge]}),Br]}),pe]})}return Ce},le=X=>{let fe;if(t.getChildren().length===0){const ge=r.getTabSetPlaceHolderCallback();ge&&(fe=ge(t))}let pe=s.jsx("div",{ref:B,className:Y(U.FLEXLAYOUT__TABSET_CONTENT),children:fe});return t.getTabLocation()==="top"?pe=s.jsxs(s.Fragment,{children:[X,pe]}):pe=s.jsxs(s.Fragment,{children:[pe,X]}),pe},Le=$(),{leading:ke,buttonbar:ve,stickyBar:Dt}=Q(),J=le(oe(Le,ke,ve,Dt)),se={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()&&(se.display="none");const ce=s.jsx("div",{ref:T,className:Y(U.FLEXLAYOUT__TABSET_CONTAINER),style:se,children:s.jsx("div",{className:Y(U.FLEXLAYOUT__TABSET),"data-layout-path":Z,children:J})});return t.isMaximized()&&r.getMainElement()?Pr.createPortal(s.jsx("div",{style:{position:"absolute",display:"flex",top:0,left:0,bottom:0,right:0},children:ce}),r.getMainElement()):ce};nm.displayName="TabSet";var Hi=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),f=m.useRef(0),d=m.useRef(0),p=m.useRef({initialSizes:[],sum:0,startPosition:0}),g=m.useCallback(S=>{S.preventDefault(),S.stopImmediatePropagation()},[]);m.useEffect(()=>{const S=i.current,k=a.current;return S?.addEventListener("touchstart",g,{passive:!1}),k?.addEventListener("touchstart",g,{passive:!1}),()=>{S?.removeEventListener("touchstart",g),k?.removeEventListener("touchstart",g)}},[g]);const x=S=>{S.stopPropagation(),r instanceof $e&&(p.current=r.getSplitterInitials(o)),yl(!1,t.getCurrentDocument()),rs(S.currentTarget.ownerDocument,S,b,h,E),l.current=r instanceof Je?r.getSplitterBounds(!0):r.getSplitterBounds(o);const k=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 Je?" "+t.getClassName(U.FLEXLAYOUT__SPLITTER_BORDER):""),c.current.style.cursor=r.getOrientation()===ye.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 j=i.current.getBoundingClientRect(),A=new he(j.x-t.getDomRect().x,j.y-t.getDomRect().y,j.width,j.height);f.current=S.clientX-j.x,d.current=S.clientY-j.y,A.positionElement(c.current),k&&k.appendChild(c.current)},w=S=>{if(fa(S))return;let k=0;if(n?(S.key==="ArrowLeft"&&(k=-10),S.key==="ArrowRight"&&(k=10)):(S.key==="ArrowUp"&&(k=-10),S.key==="ArrowDown"&&(k=10)),k!==0)if(S.preventDefault(),r instanceof Je){const j=r.getLocation(),A=j===ee.BOTTOM||j===ee.RIGHT?-k:k,R=Math.max(r.getMinSize(),Math.min(r.getMaxSize(),r.getSize()+A));t.doAction(re.adjustBorderSplit(r.getId(),R))}else{const j=r.getSplitterInitials(o);if(j.sum<=0)return;const A=r.getSplitterBounds(o),R=Math.max(A[0],Math.min(A[1],j.startPosition+k)),O=r.calculateSplit(o,R,j.initialSizes,j.sum,j.startPosition);t.doAction(re.adjustWeights(r.getId(),O))}},E=()=>{const S=t.getRootDiv();S&&c.current&&S.removeChild(c.current),c.current=void 0,yl(!0,t.getCurrentDocument())},b=(S,k)=>{if(c.current){const j=t.getDomRect();if(!j)return;r.getOrientation()===ye.VERT?c.current.style.top=_(k-j.y-d.current)+"px":c.current.style.left=_(S-j.x-f.current)+"px",t.isRealtimeResize()&&v(!0)}},h=()=>{if(c.current){v(!1);const S=t.getRootDiv();S&&c.current&&S.removeChild(c.current),c.current=void 0}yl(!0,t.getCurrentDocument())},v=S=>{(()=>{if(c.current){let j;if(r.getOrientation()===ye.VERT?j=c.current.offsetTop:j=c.current.offsetLeft,r instanceof Je){const A=r.calculateSplit(r,j);t.doAction(re.adjustBorderSplit(r.getId(),A).setAdjusting(S))}else{const A=p.current;if(A.sum<=0)return;const R=r.calculateSplit(o,j,A.initialSizes,A.sum,A.startPosition);t.doAction(re.adjustWeights(r.getId(),R).setAdjusting(S))}}})()},_=S=>{const k=l.current;let j=S;return Sk[1]&&(j=k[1]),j},y=t.getClassName,T={cursor:n?"ew-resize":"ns-resize",flexDirection:n?"column":"row"};let L=y(U.FLEXLAYOUT__SPLITTER)+" "+y(U.FLEXLAYOUT__SPLITTER_+r.getOrientation().getName());r instanceof Je?L+=" "+y(U.FLEXLAYOUT__SPLITTER_BORDER):r.getModel().getMaximizedTabset(t.getLayoutId())!==void 0&&(T.display="none"),Bv()||(T["--splitter-active-size"]="30px");let B,C,I,z;if(r instanceof $e){const S=r.getRect(),k=r.getChildren()[o-1],j=n?S.width:S.height;if(k&&j>0){const A=k.getRect();B=Math.round((n?A.getRight()-S.x:A.getBottom()-S.y)/j*100),C=0,I=100,z=B+"%"}}else B=Math.round(r.getSize()),C=Math.round(r.getMinSize()),I=Math.round(r.getMaxSize()),z=B+"px";return s.jsx("div",{className:L,style:T,ref:i,role:"separator","aria-label":t.i18nName(Ae.Splitter),"aria-orientation":n?"vertical":"horizontal","aria-valuenow":B,"aria-valuemin":C,"aria-valuemax":I,"aria-valuetext":z,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)})})};Hi.displayName="Splitter";var xf=e=>{const{controller:t,rowNode:r}=e,o=m.useRef(null),n=r.getOrientation()===ye.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(Hi,{controller:t,node:r,index:l,horizontal:n},"splitter"+l)),u instanceof $e?a.push(s.jsx(xf,{controller:t,rowNode:u},u.getId())):u instanceof Oe&&a.push(s.jsx(nm,{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})};xf.displayName="Row";var im=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 Oe&&(g.isActive()||t.doAction(re.setActiveTabset(g.getId(),t.getLayoutId())))},[o,t]),l=o.getParent(),c=t.getKeyMap().focusTabToggle,u=g=>{if(Jr(g,c)){const x=g.currentTarget.ownerDocument.getElementById(St("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 E=()=>{o.saveScrollPosition()};g.addEventListener("scroll",E);const b=n.current;return b&&b.addEventListener("pointerdown",a),()=>{b&&b.removeEventListener("pointerdown",a),g.removeEventListener("scroll",E),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 f=t.getClassName;let d=null;if(r&&document.hidden&&o.isEnablePopoutOverlay()){const g={};l.getContentRect().styleWithPosition(g);let x=f(U.FLEXLAYOUT__TAB_OVERLAY);l instanceof Je&&l.isOverlay()&&(x+=" "+f(U.FLEXLAYOUT__TAB_OVERLAY_RAISED)),d=s.jsx("div",{style:g,className:x})}let p=f(U.FLEXLAYOUT__TAB);return l instanceof Je&&(p+=" "+f(U.FLEXLAYOUT__TAB_BORDER),p+=" "+f(U.FLEXLAYOUT__TAB_BORDER_+l.getLocation().getName()),l.isOverlay()&&(p+=" "+f(U.FLEXLAYOUT__TAB_BORDER_OVERLAY))),o.getContentClassName()!==void 0&&(p+=" "+o.getContentClassName()),s.jsxs(s.Fragment,{children:[d,s.jsx("div",{ref:n,id:St("flexlayout-tab-",o.getId()),role:"tabpanel","aria-labelledby":St("flexlayout-tabbutton-",o.getId()),"aria-keyshortcuts":So(c),tabIndex:-1,onKeyDown:c?u:void 0,className:p,"data-layout-path":o.getPath()})]})};im.displayName="Tab";var W0=class extends m.Component{constructor(t){super(t);M(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}},am=m.memo(({controller:e,tabNode:t})=>{am.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(ga,{...e.getProps(),layoutId:t.getSubLayoutId(),path:t.getPath()+o.getPath(),mainLayoutController:e.getMainController()}),";"]})}return s.jsx(W0,{message:e.i18nName(Ae.Error_rendering_component),retryText:e.i18nName(Ae.Error_rendering_component_retry),children:r})},V0);function V0(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 Ee,H0=(Ee=class{constructor(t){M(this,"_controller");M(this,"_dragEnterCount",0);M(this,"_dragging",!1);M(this,"_active",!1);M(this,"_dropInfo");M(this,"_outlineDiv");M(this,"_mainController");M(this,"setDragNode",(t,r)=>{if(Ee.dragState=new el(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 Oe){let o=!1,n=this._controller.i18nName(Ae.Move_Tabset);if(r.getChildren().length>0&&(n=this._controller.i18nName(Ae.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 Je&&l.getOrientation()===ye.HORZ,u=c?10:i,f=c?10:a;let d=!1;if(this._controller.getProps().onRenderDragRect){const p=s.jsx(ha,{controller:this._controller,tabNode:r},r.getId()),g=this._controller.getProps().onRenderDragRect(p,r,void 0);g&&(this.setDragComponent(t,g,u,f),d=!0)}d||(I0()?this.setDragComponent(t,s.jsx(ha,{tabNode:r,controller:this._controller}),u,f):t.dataTransfer.setDragImage(r.getTabStamp(),u,f))}}});M(this,"onDragEnterRaw",t=>{this._dragEnterCount++,this.updateActive(t)});M(this,"onDragLeaveRaw",t=>{this._dragEnterCount--,this.updateActive(t)});M(this,"onDragEnter",t=>{if(!Ee.dragState&&this._controller.getProps().onExternalDrag){const r=this._controller.getProps().onExternalDrag(t);if(r){const o=Se.fromJson(r.json,this._controller.getModel(),!1);Ee.dragState=new el(this._controller.getMainController(),"external",o,r.json,r.onDrop)}}if(this._mainController===Ee.dragState?.mainLayoutController&&!(Ee.dragState?.dockFloatToMain&&!this.isDockTarget())&&Ee.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 he(t.clientX-i.left,t.clientY-i.top,1,1).positionElement(this._outlineDiv)}});M(this,"onDragOver",t=>{if(this._mainController===Ee.dragState?.mainLayoutController&&!(Ee.dragState?.dockFloatToMain&&!this.isDockTarget())&&this._active){if(Ee.dragState?.dockFloatToMain){const i=t.target;if(i&&Ee.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)};Ee.dragState.dockFloatToMain||this._controller.checkForBorderToShow(o.x,o.y);const n=this._controller.getModel().findDropTargetNode(this._controller.getLayoutId(),Ee.dragState.dragNode,o.x,o.y,this.isExcludeCenter());if(n){if(Ee.dragState.dockFloatToMain&&(n.location===ee.CENTER||!(n.node instanceof Oe)&&!(n.node instanceof $e)))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")}}});M(this,"onDragLeave",t=>{if(this._mainController===Ee.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()}});M(this,"onDrop",t=>{if(this._mainController===Ee.dragState?.mainLayoutController&&!(Ee.dragState?.dockFloatToMain&&!this.isDockTarget())){if(this._active){t.preventDefault();const r=Ee.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(),Ee.dragState=void 0}this._dragEnterCount=0}});this._controller=t,this._mainController=t.getMainController()}isDockTarget(){return this._controller.getLayout().getLayoutId()!==Ee.dragState?.floatLayoutId}isExcludeCenter(){if(Ee.dragState?.dockFloatToMain)return!0;const t=Ee.dragState?.dragNode;return t instanceof Oe?!t.isEnableClose()||t.getPinnedRunLength()>0:!1}addTabWithDragAndDrop(t,r,o){const n=Se.fromJson(r,this._controller.getModel(),!1);Ee.dragState=new el(this._controller.getMainController(),"add",n,r,o)}onDragEnded(){this.clearDragMain(),Ee.dragState=void 0}moveTabWithDragAndDrop(t,r){this.setDragNode(t,r)}startDockLayoutDrag(t,r,o){const n=r.getRootRow();Ee.dragState=new el(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 Se&&i++},0);const a=this._controller.i18nName(Ae.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);Pr.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=Ee.dragState?.dockFloatToMain===!0;let n,i;for(let a=r.length-1;a>=0;a--){const l=r[a];if(o&&l.getLayoutId()===Ee.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=Fv(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}},M(Ee,"dragState"),Ee),el=class{constructor(e,t,r,o,n,i=!1,a=void 0,l=void 0){M(this,"mainLayoutController");M(this,"dragSource");M(this,"dragNode");M(this,"dragJson");M(this,"fnNewNodeDropped");M(this,"dockFloatToMain");M(this,"floatLayoutId");M(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}},lm=({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})};lm.displayName="EdgeIndicators";var $0=2e3,Y0=750,sm=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),[f,d]=m.useState(void 0),[p,g]=m.useState(void 0),x=m.useMemo(()=>new Map,[]),w=m.useRef(!1),E=m.useRef(null),b=m.useRef(null),h=m.useRef(new Map);if(m.useLayoutEffect(()=>{!w.current&&c&&(w.current=!0,r.redrawLayout(),q0(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 L=l.current.document;d(l.current),g(L),L.title=t,document.documentElement.lang&&(L.documentElement.lang=document.documentElement.lang),document.documentElement.dir&&(L.documentElement.dir=document.documentElement.dir);const B=L.createElement("div");B.className=U.FLEXLAYOUT__FLOATING_WINDOW_CONTENT,L.body.appendChild(B),r.getProps().onPopoutOpen?.(o,l.current,L),K0(L,x).then(()=>{u(B)}),E.current=new MutationObserver(C=>X0(C,L,x)),E.current.observe(document.head,{childList:!0,subtree:!0,characterData:!0}),b.current=L.defaultView?.setInterval(()=>{J0(x,h.current)},Y0)??null,l.current.addEventListener("beforeunload",()=>{l.current&&(r.getProps().onPopoutClose?.(o,l.current,L),i(o),l.current=null,E.current?.disconnect(),E.current=null,b.current!=null&&(L.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,E.current?.disconnect(),E.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:f??window,popoutDocument:p})),Pr.createPortal(_,c)}else return null};function X0(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)&&cm(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=G0(o.target),i=n&&r.get(n);n&&i&&Vs(n,i)}}function G0(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 K0(e,t){const r=[],o=document.querySelectorAll('style, link[rel="stylesheet"]');for(const n of o)cm(e,n,t,r);return Promise.all(r)}function cm(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),$0)}))}else if(t instanceof HTMLStyleElement)try{const n=t.cloneNode(!0);e.head.appendChild(n),Vs(t,n),r.set(t,n)}catch{}}function Vs(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 q0(e){for(const[t,r]of e)t instanceof HTMLStyleElement&&Vs(t,r)}function J0(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),Vs(r,o))}}sm.displayName="PopoutWindow";var lo=10,Rr=-4,rr=8,yn=12,bh=12,Z0=150,Q0=25,e1=e=>{const{controller:t,layout:r,children:o}=e,[n,i]=m.useState(r.getRect()),a=m.useRef(he.empty()),l=t.getClassName,c=m.useRef(null),u=m.useRef(null),f=m.useRef(null),d=m.useRef(null),p=m.useRef(null),g=m.useRef(null),x=m.useRef(null),w=m.useRef(null),E=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(A=>{const R=t.getCurrentWindow()??window,O=he.fromDomRect(t.getRootDiv().getBoundingClientRect());let D;if(t.getProps().constrainFloatPanels)D=new he(0,0,O.width,O.height);else{const F=j0(R),ne=Math.max(F.fullWidth,R.innerWidth),Y=Math.max(F.fullHeight,R.innerHeight);D=new he(-O.x,-O.y,ne,Y)}const V=A.clone();return V.clamp(D),V},[t]),y=m.useCallback(A=>{A.preventDefault(),A.stopImmediatePropagation()},[]);m.useEffect(()=>{const A=[u,f,d,p,g,x,w,E,b].map(R=>R.current).filter(R=>R!==null);return A.forEach(R=>R.addEventListener("touchstart",y,{passive:!1})),()=>{A.forEach(R=>R.removeEventListener("touchstart",y))}},[y]);const T=m.useRef(!1);m.useLayoutEffect(()=>{if(!T.current){T.current=!0;const A=_(n);A.equals(n)||(i(A),r.setRect(A))}},[_,n,r]),m.useEffect(()=>{const A=()=>{const V=[...t.getModel().getLayouts()],F=V[V.length-1][1];r!==F&&(h.current=!0)},R=t.getCurrentWindow()??window,O=()=>{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",A,{capture:!0}),D.addEventListener("pointerup",O)),()=>{D&&(D.removeEventListener("pointerdown",A,{capture:!0}),D.removeEventListener("pointerup",O)),v.current!==void 0&&(R.clearTimeout(v.current),v.current=void 0)}},[t,r]);const L=A=>{A.stopPropagation();const R={x:A.clientX-n.x,y:A.clientY-n.y};t.showOverlayOnAllWindows(!0),rs(t.getCurrentDocument()??document,A,(O,D)=>{h.current&&(t.moveWindowToFront(r.getLayoutId()),h.current=!1);const V=new he(O-R.x,D-R.y,n.width,n.height),F=_(V);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)})},B=t.getIcons(),C=t.isSupportsPopout()&&r.getRootRow()?.isAllowedInWindow()===!0,I=A=>{A.stopPropagation(),r.getRootRow()?.getChildren().length?t.getDragDropManager().startDockLayoutDrag(A.nativeEvent,r,c.current??void 0):A.preventDefault()},z=A=>{t.getDragDropManager().onDragEnded()},S=A=>{A.stopPropagation()},k=A=>{A.stopPropagation();const R=t.getScreenRect(r.getRect());t.doAction(re.popoutFloat(r.getLayoutId(),R.toJson()))},j=(A,R)=>{const O=n,D={x:A.clientX,y:A.clientY};t.showOverlayOnAllWindows(!0),rs(t.getCurrentDocument()??document,A,(V,F)=>{const ne=V-D.x,Y=F-D.y;let K=O.x,Z=O.y,$=O.width,Q=O.height;R.includes("n")&&(Z+=Y,Q-=Y),R.includes("s")&&(Q+=Y),R.includes("w")&&(K+=ne,$-=ne),R.includes("e")&&($+=ne);const oe=new he(K,Z,Math.max(Z0,$),Math.max(Q0,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)}),A.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:L,children:[s.jsx("div",{"data-layout-path":"/floatwindow/drag-handle",className:l(U.FLEXLAYOUT__FLOAT_WINDOW_DRAG_HANDLE),draggable:!0,title:t.i18nName(Ae.Dock_Float_To_Layout),"aria-label":t.i18nName(Ae.Dock_Float_To_Layout),onDragStart:I,onDragEnd:z,onPointerDown:S,children:B.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}})})}),C&&s.jsx("button",{type:"button","data-layout-path":"/floatwindow/button/popout",className:l(U.FLEXLAYOUT__FLOAT_WINDOW_BUTTON),title:t.i18nName(Ae.Popout_Float_To_Window),"aria-label":t.i18nName(Ae.Popout_Float_To_Window),onClick:k,onPointerDown:S,children:B.popoutFloatWindow})]}),s.jsx("div",{className:l(U.FLEXLAYOUT__FLOAT_WINDOW_CONTENT),children:o}),s.jsx("div",{ref:f,style:{position:"absolute",zIndex:lo,top:Rr,left:rr,right:rr,height:rr,cursor:"ns-resize"},onPointerDown:A=>j(A,"n")}),s.jsx("div",{ref:x,style:{position:"absolute",zIndex:lo,bottom:Rr,left:rr,right:rr,height:rr,cursor:"ns-resize"},onPointerDown:A=>j(A,"s")}),s.jsx("div",{ref:p,style:{position:"absolute",zIndex:lo,top:rr,bottom:rr,right:Rr,width:rr,cursor:"ew-resize"},onPointerDown:A=>j(A,"e")}),s.jsx("div",{ref:E,style:{position:"absolute",zIndex:lo,top:rr,bottom:rr,left:Rr,width:rr,cursor:"ew-resize"},onPointerDown:A=>j(A,"w")}),s.jsx("div",{ref:b,style:{position:"absolute",zIndex:lo,top:Rr,left:Rr,width:yn,height:yn,cursor:"nwse-resize"},onPointerDown:A=>j(A,"nw")}),s.jsx("div",{ref:d,style:{position:"absolute",zIndex:lo,top:Rr,right:Rr,width:yn,height:yn,cursor:"nesw-resize"},onPointerDown:A=>j(A,"ne")}),s.jsx("div",{ref:w,style:{position:"absolute",zIndex:lo,bottom:Rr,left:Rr,width:yn,height:yn,cursor:"nesw-resize"},onPointerDown:A=>j(A,"sw")}),s.jsx("div",{ref:g,style:{position:"absolute",zIndex:lo,bottom:0,right:0,width:bh,height:bh,cursor:"nwse-resize"},onPointerDown:A=>j(A,"se")})]})},um=({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(sm,{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(ga,{...e.getProps(),layoutId:i,path:a.getPath(),mainLayoutController:e})})},i)),o++):a.getType()==="float"&&(t.push(s.jsx(e1,{controller:e,layout:a,zIndex:n,onCloseLayout:e.onCloseLayout,children:s.jsx(ga,{...e.getProps(),layoutId:i,path:a.getPath(),mainLayoutController:e})},i+"float")),n++));return s.jsx(s.Fragment,{children:t})};um.displayName="FloatingWindowContainer";var dm=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(),f=O=>{r.isEnableDrag()?(O.stopPropagation(),t.getDragDropManager().setDragNode(O.nativeEvent,r)):O.preventDefault()},d=O=>{O.stopPropagation(),t.getDragDropManager().onDragEnded()},p=O=>{pa(O)&&t.auxMouseClick(r,O)},g=O=>{t.showContextMenu(r,O)},x=()=>{t.doAction(re.selectTab(r.getId()))},w=O=>{const D=l.current?.closest('[role="tablist"]');if(D){const V=Array.from(D.querySelectorAll('[role="tab"]'));V[V.indexOf(l.current)+O]?.focus()}},E=()=>{const O=l.current.ownerDocument,D=()=>zv(O.getElementById(St("flexlayout-tab-",r.getId())));o?D():(x(),requestAnimationFrame(D))},b=O=>{t.getEditingTab()!==r&&(Jr(O,u.focusTabToggle)?(E(),O.preventDefault()):O.key==="Enter"||O.key===" "?(x(),O.preventDefault()):(O.key==="ArrowLeft"||O.key==="ArrowUp")&&!fa(O)?(w(-1),O.preventDefault()):(O.key==="ArrowRight"||O.key==="ArrowDown")&&!fa(O)?(w(1),O.preventDefault()):Jr(O,u.closeTab)&&r.isCloseable()&&(w(1),t.doAction(re.deleteTab(r.getId())),O.preventDefault()))},h=()=>{const O=r.getCloseType();return!!(o||O===Jo.Always||O===Jo.Visible&&window.matchMedia&&window.matchMedia("(hover: hover) and (pointer: fine)").matches)},v=O=>{h()&&(t.doAction(re.deleteTab(r.getId())),O.stopPropagation())},_=O=>{O.stopPropagation()},y=()=>{if(o)return!0;const O=r.getParent();return O instanceof Je&&O.getSelected()===-1&&O.getChildren()[0]===r},T=t.getEditingTab()===r,L=m.useCallback(O=>{l.current=O,t.registerMeasurable(r,"tabbutton",O)},[t,r]);m.useLayoutEffect(()=>{T&&c.current.select()},[T]),m.useEffect(()=>{if(T){const O=t.getCurrentDocument().body,D=V=>{V.target!==c.current&&t.setEditingTab(void 0)};return O.addEventListener("pointerdown",D),()=>O.removeEventListener("pointerdown",D)}},[T,t]);const B=O=>{O.stopPropagation()},C=O=>{O.code==="Escape"?(t.setEditingTab(void 0),l.current?.focus()):(O.code==="Enter"||O.code==="NumpadEnter")&&(t.setEditingTab(void 0),t.doAction(re.renameTab(r.getId(),O.target.value)),l.current?.focus())},I=t.getClassName;let z=I(U.FLEXLAYOUT__BORDER_BUTTON)+" "+I(U.FLEXLAYOUT__BORDER_BUTTON_+n);o?z+=" "+I(U.FLEXLAYOUT__BORDER_BUTTON__SELECTED):z+=" "+I(U.FLEXLAYOUT__BORDER_BUTTON__UNSELECTED),r.getClassName()!==void 0&&(z+=" "+r.getClassName());let S=0;r.getModel().isEnableRotateBorderIcons()===!1&&(n==="left"?S=r.getModel().getBorderLeftTabDirection()==="down"?-90:90:n==="right"&&(S=-90));const k=mf(t,r,S);let j=k.content?s.jsx("div",{className:I(U.FLEXLAYOUT__BORDER_BUTTON_CONTENT),children:k.content}):null;const A=k.leading?s.jsx("div",{className:I(U.FLEXLAYOUT__BORDER_BUTTON_LEADING),children:k.leading}):null;if(T&&(j=s.jsx("input",{ref:c,className:I(U.FLEXLAYOUT__TAB_BUTTON_TEXTBOX),"data-layout-path":a+"/textbox",type:"text","aria-label":t.i18nName(Ae.Rename_Tab),autoFocus:!0,defaultValue:r.getName(),onKeyDown:C,onPointerDown:B})),r.isCloseable()){const O=t.i18nName(Ae.Close_Tab);k.buttons.push(s.jsx("div",{"data-layout-path":a+"/button/close",title:O,"aria-hidden":"true",className:I(U.FLEXLAYOUT__BORDER_BUTTON_TRAILING),onPointerDown:_,onClick:v,children:typeof i.close=="function"?i.close(r):i.close},"close"))}const R=[So(u.focusTabToggle),r.isCloseable()?So(u.closeTab):void 0].filter(Boolean).join(" ")||void 0;return s.jsxs("div",{ref:L,id:St("flexlayout-tabbutton-",r.getId()),role:T?void 0:"tab","aria-selected":T?void 0:o,"aria-controls":T?void 0:St("flexlayout-tab-",r.getId()),"aria-label":T?void 0:k.name,"aria-keyshortcuts":T?void 0:R,tabIndex:T?-1:y()?0:-1,onKeyDown:b,"data-layout-path":a,className:z,onClick:x,onAuxClick:p,onContextMenu:g,title:r.getHelpText(),draggable:!0,onDragStart:f,onDragEnd:d,children:[A,j,k.buttons]})};dm.displayName="BorderButton";var fm=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),[f,d]=m.useState(!1),p=m.useRef(null),g=r.getIcons();m.useEffect(()=>()=>p.current?.(),[]);const{userControlledPositionRef:x,onScroll:w,onScrollPointerDown:E,hiddenTabs:b,onMouseWheel:h,isDockStickyButtons:v,isShowHiddenTabs:_}=om(r,t,ye.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=>{pa(oe)&&r.auxMouseClick(t,oe)},L=oe=>{r.showContextMenu(t,oe)},B=oe=>{oe.stopPropagation()},C=oe=>{const le=r.getShowOverflowMenu(),Le=b.map(ke=>({index:ke,node:t.getChildren()[ke]}));if(le!==void 0)le(t,oe,Le,I);else{const ke=l.current;d(!0),p.current=tm(ke,t,Le,I,r,()=>{d(!1),p.current=null})}oe.stopPropagation()},I=oe=>{r.doAction(re.selectTab(oe.node.getId())),x.current=!1},z=oe=>{const le=t.getChildren()[t.getSelected()];le!==void 0&&r.doAction(re.popoutTab(le.getId(),"window")),oe.stopPropagation()},S=oe=>{const le=t.getChildren()[t.getSelected()];le!==void 0&&r.doAction(re.popoutTab(le.getId(),"float")),oe.stopPropagation()},k=r.getClassName,j=()=>{const oe=[];for(let le=0;le{let oe,le=[],Le=[],ke;const ve={leading:oe,buttons:le,stickyButtons:Le,overflowPosition:void 0};if(r.customizeTabSet(t,ve),oe=ve.leading,Le=ve.stickyButtons,le=ve.buttons,ve.overflowPosition===void 0&&(ve.overflowPosition=Le.length),Le.length>0&&(v?le=[...Le,...le]:ke=s.jsx("div",{ref:c,onPointerDown:B,onDragStart:se=>{se.preventDefault()},className:k(U.FLEXLAYOUT__TAB_TOOLBAR_STICKY_BUTTONS_CONTAINER),children:Le},"sticky_buttons_container")),_){const se=r.i18nName(Ae.Overflow_Menu_Tooltip);let ce;if(typeof g.more=="function"){const X=b.map(fe=>({index:fe,node:t.getChildren()[fe]}));ce=g.more(t,X)}else ce=s.jsxs(s.Fragment,{children:[g.more,s.jsx("div",{className:k(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":f,"aria-label":se,ref:l,className:k(U.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON)+" "+k(U.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON_OVERFLOW)+" "+k(U.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON_OVERFLOW_+t.getLocation().getName()),title:se,onClick:C,onPointerDown:B,children:ce},"overflowbutton"))}const Dt=t.getSelected();if(Dt!==-1){const se=t.getChildren()[Dt];if(se!==void 0&&r.isMainLayout()){if(se.isEnablePopoutFloatIcon()){const ce=r.i18nName(Ae.Popout_Tab_Float);le.push(s.jsx("button",{tabIndex:0,title:ce,"aria-label":ce,className:k(U.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON)+" "+k(U.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON_FLOAT),onClick:S,onPointerDown:B,children:typeof g.popoutFloat=="function"?g.popoutFloat(se):g.popoutFloat},"popout-float"))}if(r.isSupportsPopout()&&se.isEnablePopoutIcon()&&se.isAllowedInWindow()){const ce=r.i18nName(Ae.Popout_Tab);le.push(s.jsx("button",{tabIndex:0,title:ce,"aria-label":ce,className:k(U.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON)+" "+k(U.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON_FLOAT),onClick:z,onPointerDown:B,children:typeof g.popout=="function"?g.popout(se):g.popout},"popout"))}}}const J=s.jsx("div",{ref:i,className:k(U.FLEXLAYOUT__BORDER_TOOLBAR)+" "+k(U.FLEXLAYOUT__BORDER_TOOLBAR_+t.getLocation().getName()),children:le},"toolbar");return{leading:oe,toolbar:J,stickyBar:ke}},R=j(),{leading:O,toolbar:D,stickyBar:V}=A();let F=k(U.FLEXLAYOUT__BORDER)+" "+k(U.FLEXLAYOUT__BORDER_+t.getLocation().getName());t.getClassName()!==void 0&&(F+=" "+t.getClassName());let ne,Y;const K=o-1;t.getLocation()===ee.LEFT?(ne=r.getModel().getBorderLeftTabDirection()==="down"?{left:"100%",top:0}:{right:"100%",top:0},Y={width:K,overflowY:"auto"}):t.getLocation()===ee.RIGHT?(ne={left:"100%",top:0},Y={width:K,overflowY:"auto"}):(ne={left:0},Y={height:K,overflowX:"auto"});let Z;t.isEnableTabScrollbar()&&(Z=s.jsx("div",{ref:a,"aria-hidden":"true",className:k(U.FLEXLAYOUT__MINI_SCROLLBAR),onPointerDown:E}));let $;O&&($=s.jsx("div",{className:k(U.FLEXLAYOUT__BORDER_LEADING),children:O}));const Q=k(U.FLEXLAYOUT__BORDER_INNER_TAB_CONTAINER)+" "+k(U.FLEXLAYOUT__BORDER_INNER_TAB_CONTAINER_+t.getLocation().getName())+(t.getLocation()===ee.LEFT&&r.getModel().getBorderLeftTabDirection()==="down"?" "+k(U.FLEXLAYOUT__BORDER_INNER_TAB_CONTAINER_LEFT_DOWN):"");return s.jsxs("div",{ref:y,style:{display:"flex",flexDirection:t.getOrientation()===ye.VERT?"row":"column"},className:F,"data-layout-path":t.getPath(),onClick:T,onAuxClick:T,onContextMenu:L,onWheel:h,children:[$,s.jsxs("div",{className:k(U.FLEXLAYOUT__MINI_SCROLLBAR_CONTAINER),children:[s.jsxs("div",{ref:u,className:k(U.FLEXLAYOUT__BORDER_INNER)+" "+k(U.FLEXLAYOUT__BORDER_INNER_+t.getLocation().getName()),style:Y,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}),V]}),Z]}),D]})};fm.displayName="BorderTabSet";function pm(e){const{controller:t,borderNode:r,show:o}=e,n=m.useRef(null),i=m.useCallback(f=>{n.current=f,t.registerMeasurable(r,"bordercontent",f)},[t,r]);let a=!0;const l={};r.getOrientation()===ye.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 f={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?f.top=x:g.getLocation()===ee.BOTTOM&&(f.bottom=x)}}const d=t.getClassName(U.FLEXLAYOUT__BORDER_TAB_OVERLAY)+" "+t.getClassName(U.FLEXLAYOUT__BORDER_TAB_OVERLAY_+r.getLocation().getName());return s.jsxs("div",{className:d,style:f,children:[u&&s.jsx("div",{ref:i,style:l,className:c}),o&&s.jsx(Hi,{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(Hi,{controller:t,node:r,index:0,horizontal:a})]}):s.jsxs(s.Fragment,{children:[o&&s.jsx(Hi,{controller:t,node:r,index:0,horizontal:a}),s.jsx("div",{ref:i,style:l,className:c})]})}pm.displayName="BorderTab";var hm=({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[f,d]of ee.values){const p=o.get(d);p&&p.isShowing()&&(!p.isAutoHide()||p.isAutoHide()&&(p.getChildren().length>0||e.getState().showHiddenBorder===d))&&(i.set(d,s.jsx(fm,{controller:e,borderNode:p,size:e.getState().calculatedBorderBarSize})),a.set(d,s.jsx(pm,{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})};hm.displayName="BorderContainer";var gm=m.memo(e=>{gm.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(ha,{controller:t,tabNode:r},r.getId())})},t1);function t1(e,t){return t.dragging}var ga=m.forwardRef((e,t)=>{ga.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(I=>{o(z=>({...z,...typeof I=="function"?I(z,e):I}))},[e]),i=m.useRef(null),[a,l]=m.useState(0),c=m.useRef(null),u=m.useRef(null),f=m.useRef(null),d=m.useRef(null),p=m.useMemo(()=>new r1(e,r,n),[]);p.setProps(e),p.setStateRaw(r),p.setSetState(n),p.setLayoutRef(i),p.setMoveablesHomeRef(c),p.setFindBorderBarSizeRef(u),p.setFindSplitterSizeRef(f),p.setMainRef(d);const g=e.model.getLayouts().get(p.getLayoutId());g.setController(p),m.useImperativeHandle(t,()=>p,[p]),m.useLayoutEffect(()=>{const I=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(z=>z+1),I){const z=i.current?.ownerDocument.defaultView??window,S=z.requestAnimationFrame(()=>{p.syncLayoutMetrics(),p.positionTabPanels(),p.isReLayout()&&(p.redrawLayout(),p.setReLayout(!1))});return()=>z.cancelAnimationFrame(S)}}),m.useEffect(()=>{const I=i.current.ownerDocument,z=I.defaultView;p.setCurrentDocument(I),p.setCurrentWindow(z);const S=new z.ResizeObserver(()=>{p.updateRect(),p.syncLayoutMetrics(),p.positionTabPanels(),p.updateLayoutMetrics(),p.isReLayout()&&(p.redrawLayout(),p.setReLayout(!1))});S.observe(i.current),p.setGeometryResizeObserver(S),u.current&&S.observe(u.current),f.current&&S.observe(f.current);const k=()=>{p.updateRect()};z.addEventListener("resize",k);const j=()=>{for(const[A,R]of p.getProps().model.getLayouts()){const O=R.getController();O&&O.redrawLayout()}};return p.isMainLayout()&&(document.addEventListener("visibilitychange",j),I.addEventListener("pointerdown",p.onOverlayBorderPointerDown,!0),I.addEventListener("keydown",p.onOverlayBorderKeyDown)),(p.isMainLayout()||p.getLayout()?.getType()==="window")&&I.addEventListener("keydown",p.onTabsetNavKeyDown),()=>{p.setGeometryResizeObserver(void 0),S.disconnect(),z.removeEventListener("resize",k),document.removeEventListener("visibilitychange",j),I.removeEventListener("pointerdown",p.onOverlayBorderPointerDown,!0),I.removeEventListener("keydown",p.onOverlayBorderKeyDown),I.removeEventListener("keydown",p.onTabsetNavKeyDown)}},[p,a]),m.useEffect(()=>{let I;if(!p.isMainLayout()&&p.getLayout().getType()==="window"){const z=p.getProps().mainLayoutController?.getRootDiv();if(z){const S=z,k=i.current;hh(S,k),I=new MutationObserver(()=>{hh(S,k)&&p.redrawLayout()}),I.observe(S,{attributeFilter:["style"]})}}return()=>{I&&I.disconnect()}},[p]),m.useEffect(()=>{const I=e.model;if(g.setToExportRectFunction((z,S)=>S==="window"?p.getScreenRect(z):p.getRelativeRect(z)),p.setLayout(g),p.isMainLayout()){const z={onAfterAction:p.onModelChange};return I.addChangeListener(z),()=>{I.removeChangeListener(z)}}},[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:f,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,E=p.getLayoutId();w.getRootRow(E).calcMinMaxSize(),w.getRootRow(E).setPaths(e.path||""),p.isMainLayout()&&w.getBorderSet().setPaths();const b=s.jsx(Zv,{controller:p,show:r.showOverlay},"__overlay__"),h=p.renderLayout(),v=s.jsx(hm,{controller:p,inner:h}),_=p.renderTabContainers(),y=p.reorderComponents(_,p.getOrderedTabIds());let T=null,L=null,B=null,C=null;return p.isMainLayout()&&(T=s.jsx(um,{controller:p}),L=p.reorderComponents(p.renderTabContents(),p.getOrderedTabMoveableIds()),B=s.jsx("div",{"aria-hidden":"true",className:p.getClassName(U.FLEXLAYOUT__LAYOUT_TAB_STAMPS),children:p.renderDragTabButtons()},"__dragTabButtons__"),C=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,C,b,v,y,L,T,B]})}),Gr,r1=(Gr=class{constructor(t,r,o){M(this,"_props");M(this,"_state");M(this,"_setState");M(this,"_layoutRef");M(this,"_moveablesHomeRef");M(this,"_findBorderBarSizeRef");M(this,"_findSplitterSizeRef");M(this,"_mainRef");M(this,"_orderedTabIds");M(this,"_orderedTabMoveableIds");M(this,"_currentDocument");M(this,"_currentWindow");M(this,"_showOverlay",!1);M(this,"_supportsPopout");M(this,"_popoutURL");M(this,"_icons");M(this,"_dragDropManager");M(this,"_layoutId");M(this,"_layout");M(this,"_mainController");M(this,"_popoutWindowName");M(this,"_cachedLayoutDOMRect");M(this,"_reLayout");M(this,"_measurables",new Map);M(this,"_tabPanels",new Map);M(this,"_lastRect",he.empty());M(this,"_lastSplitterSize",8);M(this,"_geometryResizeObserver");M(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=he.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())}});M(this,"onModelChange",t=>{const r=t instanceof jv?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)});M(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)});M(this,"onOverlayBorderKeyDown",t=>{if(!Jr(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(St("flexlayout-tab-",i.getId())),l=this._currentDocument.getElementById(St("flexlayout-tabbutton-",i.getId()));if(a&&a.contains(r)||r===l){this.closeOverlayBorder(n),t.preventDefault();break}}});M(this,"onTabsetNavKeyDown",t=>{if(t.defaultPrevented)return;const r=this.getKeyMap();let o;if(Jr(t,r.focusNextTabset))o=1;else if(Jr(t,r.focusPreviousTabset))o=-1;else return;this.focusAdjacentTabset(o)&&t.preventDefault()});M(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())}});M(this,"getClassName",t=>this._props.classNameMapper===void 0?t:this._props.classNameMapper(t));M(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:n1,this._popoutURL=t.popoutURL?t.popoutURL:"popout.html",this._icons={...o1,...t.icons},this._layoutId=t.layoutId?t.layoutId:lt.MAIN_LAYOUT_ID,this._mainController=t.mainLayoutController?t.mainLayoutController:this,this._dragDropManager=new H0(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(xf,{controller:this,rowNode:this._props.model.getRootRow(this._layoutId)},"__row__"),s.jsx(lm,{controller:this})]})}renderTabContainers(){const t=new Map;return this._props.model.visitLayoutNodes(this._layoutId,r=>{if(r instanceof Se){const o=r,n=o.isSelected(),i=o.isRendered(),a=o.isEnableRenderOnDemand();(i||n||!a)&&t.set(o.getId(),s.jsx(im,{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 Se){const i=n,a=i.isSelected(),l=i.isRendered(),c=i.isEnableRenderOnDemand(),u=i.getParent().getContentRect(),f=a||!c;if(l||f&&u.width>0&&u.height>0){const d=i.getMoveableElement();d.style.overflow=i.isEnableScrollbars()?"auto":"hidden";const p=o.getWindowId()||"",g=i.getId()+(i.isEnableWindowReMount()?p:"");t.set(i.getId(),Pr.createPortal(s.jsx(am,{controller:this,tabNode:i,windowId:p,visible:f,fullRedrawRevision:this._state.fullRedrawRevision,parentRedrawRevision:this._props.parentRedrawRevision},g),d,g)),i.setRendered(!0)}}});return t}renderDragTabButtons(){const t=[];return this._props.model.visitNodes(r=>{if(r instanceof Se){const o=r;t.push(s.jsx(gm,{controller:this,tabNode:o,dragging:_l},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 $e)){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(St("flexlayout-tab-",r.getId())),i=!!o&&!!n&&n.contains(o.activeElement);this.doAction(re.selectTab(r.getId())),i&&o.getElementById(St("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 Oe&&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(St("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(St("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 Oe?this._props.model.getMaximizedTabset(this._layoutId)!==void 0&&!o.isMaximized()&&(i=!1):o instanceof Je&&(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 D0(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&&!Gr.Windows.has(t)&&Gr.Windows.set(t,wn())}getWindowId(){if(this.getCurrentWindow())return Gr.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?he.getBoundingClientRect(t).relativeTo(r):he.empty()}getLayoutRef(){return this._layoutRef.current}getDomRect(){return this._cachedLayoutDOMRect!==void 0?this._cachedLayoutDOMRect:this._layoutRef.current?(this._cachedLayoutDOMRect=he.fromDomRect(this._layoutRef.current.getBoundingClientRect()),this._cachedLayoutDOMRect):he.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}),yl(!t,this._currentDocument))}showOverlayOnAllWindows(t){for(const[,r]of this._props.model.getLayouts())r.getController()&&r.getController().showOverlay(t)}},M(Gr,"Windows",new WeakMap),Gr),o1={close:s.jsx(kl,{}),pin:s.jsx(Hv,{}),closeTabset:s.jsx(kl,{}),closeFloatPopout:s.jsx(kl,{}),popout:s.jsx($u,{}),popoutFloat:s.jsx(Gv,{}),maximize:s.jsx($v,{}),restore:s.jsx(qv,{}),more:s.jsx(Yv,{}),edgeArrow:s.jsx(Xv,{}),activeTabset:s.jsx(Jv,{}),dragToDock:s.jsx(Kv,{}),popoutFloatWindow:s.jsx($u,{})},n1=Bv(),bm=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),bm.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 Se&&l.isEnableRename()&&l.getLayout().getController()?.setEditingTab(l)},getRootDiv:()=>r.current.getRootDiv()}));const i={};return s.jsx(ga,{ref:r,...e,parentRedrawRevision:i},n.current)});const vh=20,i1="bv-nodepack:layout-profiles:v1:",yf=new Map,Yu="bv-layout-session-changed",vm=e=>`${i1}${e}`;function _f(e){try{const t=JSON.parse(localStorage.getItem(vm(e))??"");if(t?.schemaVersion===1&&Array.isArray(t.profiles))return t}catch{}return{schemaVersion:1,profiles:[]}}function mm(e,t){localStorage.setItem(vm(e),JSON.stringify(t))}const a1=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 mh(e){const t=_f(e.editorType),r=a1(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>vh)throw new Error(`A maximum of ${vh} layouts can be saved for this editor.`);return mm(e.editorType,{schemaVersion:1,profiles:a,selectedId:o}),i}function l1(e,t){const r=_f(e);mm(e,{...r,profiles:r.profiles.filter(o=>o.id!==t),selectedId:r.selectedId===t?void 0:r.selectedId})}function El(e,t,r,o,n=!0){yf.set(e,{layout:structuredClone(t),status:r,profileId:o}),n&&window.dispatchEvent(new CustomEvent(Yu,{detail:{key:e}}))}function Oi(e){const t=yf.get(e);return t?structuredClone(t):void 0}function s1(e){yf.delete(e)}function c1(e,t){return e.editorType===t.editorType&&e.editorVersion===t.editorVersion&&e.library===t.library&&e.signature===t.signature}const xh="flexlayout-react@0.10.5";function u1(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 d1=new Set([re.MOVE_NODE,re.DELETE_TAB,re.DELETE_TABSET,re.RENAME_TAB]),f1=e=>d1.has(e.type)?"modified":"adjusted";function p1(e){s1(e)}function xm({storageId:e,panels:t,resetSignal:r=0,defaultModel:o,onStatus:n}){const i=JSON.stringify({panels:t.map(d=>`${d.id}:${d.weight}`),defaultModel:o}),a=m.useMemo(()=>o??u1(t),[i]),[l,c]=m.useState(()=>lt.fromJson(Oi(e)?.layout??a)),u=m.useMemo(()=>new Map(t.map(d=>[d.id,d.content])),[t]);m.useEffect(()=>{const d=Oi(e);c(lt.fromJson(d?.layout??a)),n?.(d?.status??"saved")},[a,i,e]),m.useEffect(()=>{r&&(p1(e),c(lt.fromJson(a)),n?.("saved"))},[a,r,e]),m.useEffect(()=>{const d=p=>{if(p.detail?.key!==e)return;const g=Oi(e);g&&(c(lt.fromJson(g.layout)),n?.(g.status))};return window.addEventListener(Yu,d),()=>window.removeEventListener(Yu,d)},[n,e]);const f=d=>d.type===re.POPOUT_TAB&&d.data.type==="float"&&l.getNodeById(d.data.node)?.getLayoutId()!==lt.MAIN_LAYOUT_ID?void 0:d;return s.jsx("div",{className:"bv-ui-dock flexlayout__theme_dark",children:s.jsx(bm,{model:l,factory:d=>u.get(d.getComponent()??"")??null,constrainFloatPanels:!0,onAction:f,onModelChange:(d,p)=>{c(d);const g=Oi(e),x=g?.status==="modified"?"modified":f1(p);El(e,d.toJson(),x,g?.profileId,!1),n?.(x)}})})}let po=[];const Xu=new Set,ym=()=>Xu.forEach(e=>e());function Or(e){const t=e.id??`${e.title}:${e.message??""}`,r=po.findIndex(n=>n.id===t),o={...e,id:t};return po=r>=0?[...po.slice(0,r),o,...po.slice(r+1)]:[...po,o].slice(-3),ym(),t}function h1(e){po=po.filter(t=>t.id!==e),ym()}const g1=e=>(Xu.add(e),()=>Xu.delete(e)),yh=()=>po;function b1(){const e=m.useSyncExternalStore(g1,yh,yh),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&&Or({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?Pr.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(Nw,{tone:r.tone,title:r.title,duration:r.duration,onClose:()=>h1(r.id),children:r.message},r.id))}),document.body):null}const Cr=({children:e,className:t=""})=>s.jsx("svg",{className:t,viewBox:"0 0 24 24","aria-hidden":"true",children:e}),_m=()=>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"})}),wm=m.createContext({narrow:!1,minimal:!1,menuOverflow:!1}),km=()=>m.useContext(wm);function v1(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 f=new ResizeObserver(d=>n(d[0]?.contentRect.width??u.clientWidth));return f.observe(u),()=>f.disconnect()},[]);const c=m.useMemo(()=>({narrow:o<760,minimal:o<620,menuOverflow:o<520}),[o]);return s.jsx(wm.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(_m,{})}),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(ts,{detail:{anchor:u.currentTarget}})),children:s.jsxs(Cr,{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(Ao,{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(Cr,{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(Cr,{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(Cr,{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(Cr,{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(Cr,{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(Cr,{children:s.jsx("path",{d:"m7 7 10 10M17 7 7 17"})})})]})]})})}const ki=(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 pi({open:e,title:t,shortTitle:r,context:o,center:n,children:i,status:a,actions:l,activationToken:c=0,allowWorkspace:u=!0,initialMode:f="floating",initialGeometry:d,minSize:p={width:360,height:240},mode:g,className:x="",bodyClassName:w="",menuVisible:E,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=()=>ki({x:Math.max(16,(window.innerWidth-(d?.width??760))/2),y:Math.max(16,(window.innerHeight-(d?.height??640))/2),width:d?.width??760,height:d?.height??640,...d},p),[L,B]=m.useState(u?f:"floating"),[C,I]=m.useState(!1),[z,S]=m.useState(T),k=g??L,j=m.useRef(null),A=m.useRef(null),R=m.useRef(z),O=m.useRef(d),D=m.useRef();m.useEffect(()=>{R.current=z},[z]),m.useEffect(()=>{e&&I(!1)},[e]),m.useEffect(()=>{const $=j.current;if(!(!e||!$))return A.current=document.activeElement instanceof HTMLElement&&!$.contains(document.activeElement)?document.activeElement:A.current,L0($)},[e]),m.useEffect(()=>{const $=j.current;if(!$)return;const Q=()=>{I(!1),requestAnimationFrame(()=>$.focus({preventScroll:!0}))},oe=()=>I(!0);return $.addEventListener("bv-ui-activate",Q),$.addEventListener("bv-ui-minimize",oe),()=>{$.removeEventListener("bv-ui-activate",Q),$.removeEventListener("bv-ui-minimize",oe)}},[]),m.useEffect(()=>{const $=j.current;if(!$)return;const Q=oe=>{const le=oe.detail;u&&le?.mode&&(B(le.mode),_?.(le.mode)),le?.mode==="floating"&&le.geometry&&S(ki(le.geometry,p))};return $.addEventListener("bv-ui-set-window-state",Q),()=>$.removeEventListener("bv-ui-set-window-state",Q)},[u,p.height,p.width,_]),m.useEffect(()=>{e&&(I(!1),requestAnimationFrame(()=>j.current?.focus({preventScroll:!0})))},[c,e]),m.useEffect(()=>{const $=O.current;O.current=d,d&&S(Q=>ki(k0(Q,$,d),p))},[d?.height,d?.width,d?.x,d?.y,p.height,p.width]),m.useEffect(()=>{if(!e)return;const $=()=>S(Q=>ki(Q,p));return window.addEventListener("resize",$),()=>window.removeEventListener("resize",$)},[p.height,p.width,e]);const V=$=>{k!=="floating"||$.button!==0||$.target.closest("button,input,select,textarea")||(D.current={pointerId:$.pointerId,startX:$.clientX,startY:$.clientY,kind:"move",x:z.x,y:z.y},$.currentTarget.setPointerCapture($.pointerId),$.preventDefault())},F=$=>Q=>{k!=="floating"||Q.button!==0||(D.current={pointerId:Q.pointerId,startX:Q.clientX,startY:Q.clientY,kind:"resize",direction:$,geometry:z},Q.currentTarget.setPointerCapture(Q.pointerId),Q.preventDefault(),Q.stopPropagation())},ne=$=>{const Q=D.current;if(!Q||Q.pointerId!==$.pointerId)return;const oe={x:$.clientX-Q.startX,y:$.clientY-Q.startY},le={...p,width:Math.min(p.width,420)};S(Le=>ki(Q.kind==="move"?{...Le,x:Q.x+oe.x,y:Q.y+oe.y}:w0(Q.geometry,oe,Q.direction,le),p))},Y=$=>{D.current?.pointerId===$.pointerId&&(D.current=void 0,requestAnimationFrame(()=>v?.(R.current)))};if(!e)return null;const K=k==="workspace"?void 0:{left:z.x,top:z.y,width:z.width,height:z.height},Z=()=>{h(),requestAnimationFrame(()=>A.current?.focus({preventScroll:!0}))};return s.jsxs(s.Fragment,{children:[C&&s.jsx(Hs,{title:t,onRestore:()=>I(!1),onClose:Z}),s.jsxs("div",{ref:j,tabIndex:-1,hidden:C,className:`bv-managed-window ${k} ${x}`.trim(),role:"dialog","aria-modal":k==="workspace","aria-label":t,style:K,onPointerDownCapture:()=>j.current&&fh(j.current),onFocusCapture:()=>j.current&&fh(j.current),onPointerMove:ne,onPointerUp:Y,onPointerCancel:Y,onKeyDown:$=>{if($.key==="Escape"&&![...document.querySelectorAll(".bv-anchored-popover,[role='listbox'],[role='menu']")].some(oe=>oe.offsetParent!==null)){$.preventDefault(),$.stopPropagation(),Z();return}$.stopPropagation()},children:[s.jsxs("div",{className:"bv-managed-window-surface",children:[s.jsx(v1,{title:t,shortTitle:y,context:o,center:n,mode:k,allowWorkspace:u,menuVisible:E,onMenuVisible:b,onMode:()=>{if(!u)return;const $=k==="workspace"?"floating":"workspace";B($),_?.($)},onMinimize:()=>I(!0),onClose:Z,onPointerDown:V}),s.jsx("div",{className:`bv-managed-window-body ${w}`.trim(),children:i}),(a||l)&&s.jsx(m1,{status:a??null,actions:l,stacked:k==="floating"&&z.width<700,minimal:k==="floating"&&z.width<470})]}),k==="floating"&&["n","ne","e","se","s","sw","w","nw"].map($=>s.jsx("div",{className:`bv-window-resize-handle ${$}`,"aria-hidden":"true",onPointerDown:F($)},$))]})]})}function m1({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 wf({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(nf,{label:"More",actions:r,intent:"ghost",density:"compact"}),s.jsx("div",{className:"bv-footer-primary-action",children:e})]})}function Hs({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 d=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=E0(d,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(f=>{l.has(f)||(l.add(f),a.observe(f))}),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]),Pr.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(_m,{})}),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(Cr,{children:s.jsx("path",{d:"m7 7 10 10M17 7 7 17"})})})]}),o)}function Ca({label:e,value:t,options:r,onNavigate:o}){const n=m.useSyncExternalStore(m0,ri,ri),i=n==="keep",a=km(),[l,c]=m.useState(!1),u=m.useRef(null),f=r.filter(E=>E.value!==t);if(!f.length)return null;const d=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(r0,{className:"bv-window-node-select",label:e,value:"",options:f,onValue:(E,b)=>o(E,b.shiftKey?i:!i)}),w=s.jsxs("button",{type:"button",role:"switch","aria-label":d,"aria-checked":i,className:"bv-window-switch-mode",title:d,onClick:()=>bf(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(E=>!E),children:"•••"}),s.jsx(Ao,{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 Em({onClick:e,storageId:t,editorType:r="regional"}){const[o,n]=m.useState(null),[i,a]=m.useState(""),[l,c]=m.useState(0),u=lf();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(Cr,{children:s.jsx("path",{d:"M4.9 9A7.5 7.5 0 1 1 5 15M4 4v5h5"})}),s.jsx("span",{children:"Reset layout"})]});const f=_f(r),d=Oi(t),p=f.profiles.find(h=>h.id===d?.profileId),g=()=>c(h=>h+1),x=()=>{if(!d)return;const h=mh({id:o==="rename"?p?.id:void 0,name:i,editorType:r,editorVersion:"1",library:xh,signature:`${r}:v1`,layout:d.layout});El(t,d.layout,"saved",h.id),n(null),g()},w={editorType:r,editorVersion:"1",library:xh,signature:`${r}:v1`},E=(h,v)=>d?.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:()=>E("Factory",e)},...f.profiles.map(h=>{const v=c1(h,w);return{id:h.id,label:`${h.name}${v?"":" · Incompatible"}`,onSelect:()=>E(h.name,()=>{if(!v){e(),Or({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}El(t,h.layout,"saved",h.id)})}}),{id:"save-as",label:"Save as new layout…",disabled:!d,onSelect:()=>{a(""),n("save")}},...p?[{id:"update",label:`Update ${p.name}`,onSelect:()=>{d&&(mh({...p,layout:d.layout}),El(t,d.layout,"saved",p.id),g())}},{id:"rename",label:"Rename layout…",onSelect:()=>{a(p.name),n("rename")}},{id:"delete",label:"Delete layout",danger:!0,onSelect:()=>{l1(r,p.id),e(),g()}}]:[]];return s.jsxs(s.Fragment,{children:[s.jsx(nf,{label:`${p?.name??"Factory"}${d?.status&&d.status!=="saved"?` · ${d.status[0].toUpperCase()}${d.status.slice(1)}`:""}`,icon:s.jsx(Cr,{children:s.jsx("path",{d:"M4 5h16v14H4zM8 5v14M8 10h12"})}),actions:b}),s.jsx(Ta,{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(ln,{label:"Layout name",value:i,maxLength:40,onValue:a})}),u.dialog]})}const Tm=new Map;let Rm;function Zr(e,t){const r=String(t);r&&Tm.set(e,r),r&&e!=="quick"&&(Rm=e)}function x1(){return Rm}function Vo(e){return Tm.get(e)}function ns({label:e,value:t,onImport:r,allowImport:o=!0}){const[n,i]=m.useState(!1),[a,l]=m.useState(""),[c,u]=m.useState(""),f=async()=>{try{await navigator.clipboard.writeText(JSON.stringify(t,null,2)),Or({title:"Draft copied",message:`${e} draft JSON was copied to the clipboard.`,tone:"success",duration:4e3})}catch{Or({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)}},d=()=>{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:f,children:"Copy draft"}),o&&s.jsx(ie,{intent:"ghost",onClick:p,children:"Import draft"}),s.jsx(Ta,{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:d,children:"Import draft"})]}),children:s.jsx(e0,{label:"Draft JSON",value:a,rows:14,resize:"vertical",error:c,onValue:l})})]})}const zr=(e,t)=>JSON.stringify(e)===JSON.stringify(t),jo=e=>e?.id??e?.key;function Gu(e,t,r,o="draft"){if(zr(r,e))return{ok:!0,value:structuredClone(t)};if(zr(t,e))return{ok:!0,value:structuredClone(r)};if(zr(t,r))return{ok:!0,value:structuredClone(t)};if(Array.isArray(e)&&Array.isArray(t)&&Array.isArray(r)){if(![...e,...t,...r].every(w=>jo(w)!=null))return{ok:!1,reason:`Concurrent list change at ${o}`};const n=e.map(jo),i=t.map(jo),a=r.map(jo),l=!zr(n,i.filter(w=>n.includes(w))),c=!zr(n,a.filter(w=>n.includes(w)));if(l&&c&&!zr(i,a))return{ok:!1,reason:`Concurrent reorder at ${o}`};const u=new Map(e.map(w=>[jo(w),w])),f=new Map(t.map(w=>[jo(w),w])),d=new Map(r.map(w=>[jo(w),w])),p=l?i:a,g=[...p,...i,...a].filter((w,E,b)=>b.indexOf(w)===E),x=[];for(const w of g){const E=u.get(w),b=f.get(w),h=d.get(w);if(E&&b&&!h&&!zr(E,b))return{ok:!1,reason:`Edited item ${w} was removed externally`};if(E&&!b&&h&&!zr(E,h))return{ok:!1,reason:`Removed item ${w} changed externally`};if(!b&&!h)continue;if(!E){if(b&&h&&!zr(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=Gu(E,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=Gu(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 y1(){const[e,t]=m.useState(an);m.useEffect(()=>{const o=n=>t(n.detail);return window.addEventListener(ei,o),()=>window.removeEventListener(ei,o)},[]);const r=(o,n)=>rf({...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(Ir,{tone:"info",title:"No controls configured",children:"Create a control in Configuration before using live workflow states."})}const _1=({open:e,onClose:t,hasControlNodes:r=!0})=>{const[o,n]=m.useState(0),i=an().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(pi,{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(Em,{storageId:"control-center",editorType:"control-center",onClick:()=>n(l=>l+1)}),children:[!r&&s.jsx(Ir,{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(xm,{storageId:"control-center",resetSignal:o+(i?0:1),defaultModel:a,panels:[{id:"controls",title:"Controls",weight:1,content:s.jsx(y1,{})},{id:"configuration",title:"Configuration",weight:1,content:s.jsx(g0,{})}]})]})},Sm=()=>globalThis.__bvSmartPipeEditorBridge??{},kf=e=>String(e?.type??e?.comfyClass??""),Cc=e=>kf(e)==="BV Smart Pipe Merge"?"merge":"pipe",is=()=>ct().rootGraph??ct().graph,_h=()=>vf(is(),e=>["BV Smart Pipe","BV Smart Pipe Merge"].includes(kf(e)));function w1(){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,f]=m.useState(null),d=()=>({mode:"floating",geometry:{x:Math.max(16,(window.innerWidth-860)/2),y:Math.max(16,(window.innerHeight-650)/2),width:860,height:650}}),p=E=>`${E.kind}:${da(is(),E.node)}`,g=(E,b)=>c.current.get(E)?.dirty?f({key:E,action:b}):b(),x=(E,b)=>{const h=p(E),v=r,_=()=>{Zr(E.kind,da(is(),E.node)),t(y=>{const T=b&&v&&v!==h?y.filter(L=>L.key!==v):y;return T.some(L=>L.key===h)?T:[...T,{key:h,target:E}]}),l(y=>({...y,[h]:v&&y[v]?structuredClone(y[v]):y[h]??d()})),o(h),i(y=>y+1)};b&&v&&v!==h?g(v,_):_()},w=E=>g(E,()=>{c.current.delete(E),t(b=>b.filter(h=>h.key!==E)),l(b=>{const h={...b};return delete h[E],h}),o(b=>b===E?null:b)});return m.useEffect(()=>{const E=b=>{const h=b.detail;h?.node&&x({node:h.node,kind:h.kind??Cc(h.node)},ri()==="replace")};return window.addEventListener("bv-open-smart-pipe-editor",E),()=>window.removeEventListener("bv-open-smart-pipe-editor",E)}),s.jsxs(s.Fragment,{children:[e.map(E=>{const b=a[E.key]??d();return s.jsx(k1,{sessionKey:E.key,target:E.target,open:E.key===r,activation:n,presentation:b,onPresentation:h=>l(v=>({...v,[E.key]:h})),onActions:h=>c.current.set(E.key,h),onClose:()=>w(E.key),onRemap:h=>t(v=>v.map(_=>_.key===E.key?{..._,target:{node:h,kind:Cc(h)}}:_)),onNavigate:(h,v)=>x({node:h,kind:Cc(h)},v)},E.key)}),e.filter(E=>E.key!==r).map(E=>s.jsx(Hs,{title:`${E.target.kind==="merge"?"Smart Pipe Merge":"Smart Pipe Editor"} · ${E.target.node.title||`#${E.target.node.id}`}`,onRestore:()=>x(E.target,!1),onClose:()=>w(E.key)},`shelf:${E.key}`)),s.jsx(af,{open:!!u,editorName:"Smart Pipe editor",onKeep:()=>f(null),onDiscard:()=>{const E=u;E&&c.current.get(E.key)?.discard(),f(null),E?.action()},onSave:()=>{const E=u;E&&c.current.get(E.key)?.save(),f(null),E?.action()}})]})}function k1({sessionKey:e,target:t,open:r,activation:o,presentation:n,onPresentation:i,onActions:a,onClose:l,onRemap:c,onNavigate:u}){const f=Sm()[t.kind],d=m.useMemo(()=>f?.read(t.node)??{},[f,t.node]),p=zs(d),g=p.value;Fs(p);const x=m.useRef(structuredClone(d)),w=m.useRef(!1),[E,b]=m.useState(null),h=m.useMemo(()=>da(is(),t.node),[t.node]);m.useEffect(()=>{const z=()=>{const S=_h().find(A=>A.key===h);if(!S){b("missing");return}if(S.node!==t.node){c(S.node);return}if(w.current)return;const k=f?.read(t.node)??{};if(JSON.stringify(k)===JSON.stringify(x.current))return;if(!p.canUndo){x.current=structuredClone(k),p.replace(k,!0),b(null);return}const j=Gu(x.current,g,k);j.ok?(x.current=structuredClone(k),p.replace(j.value)):b(j.reason)};return Xr().addEventListener("graphChanged",z),()=>Xr().removeEventListener("graphChanged",z)},[f,g,p.canUndo,p.replace,c,t.node,h]);const v=La(t.node),_=_h(),y=_.filter(z=>bn(z.node)).map(z=>({value:z.key,label:`${z.breadcrumb?`${z.breadcrumb} › `:""}${z.node.title||kf(z.node)} · #${z.node.id}`})),T=z=>p.commit(S=>(z(S),S)),L=t.kind==="pipe"?f?.validation?.(t.node,g)??[]:[],B=()=>{w.current=!0;try{f?.save(t.node,g);const z=f?.read(t.node)??g;x.current=structuredClone(z),p.replace(z,!0),b(null)}finally{w.current=!1}},C=()=>{const z=f?.read(t.node)??{};x.current=structuredClone(z),p.replace(z,!0),b(null)};m.useEffect(()=>{a({dirty:p.canUndo,save:B,discard:C})},[f,g,p.canUndo,p.replace,a,e,t.node]);const I=s.jsx(Ca,{label:"Smart Pipe node",value:_.find(z=>z.node===t.node)?.key??"",options:y,onNavigate:(z,S)=>{const k=_.find(j=>j.key===z);k&&u(k.node,S)}});return s.jsx(pi,{open:r,activationToken:o,title:t.kind==="merge"?"Smart Pipe Merge":"Smart Pipe Editor",shortTitle:"Smart Pipe",menuVisible:v,onMenuVisible:z=>di(t.node,z),context:I,mode:n.mode,initialGeometry:n.geometry,onModeChange:z=>i({...n,mode:z}),onGeometry:z=>i({...n,geometry:z}),minSize:{width:420,height:360},onClose:l,status:L.length?"Required inputs missing":p.canUndo?"Unsaved changes":"Saved",actions:s.jsx(wf,{primary:s.jsx(ie,{intent:"primary",onClick:B,children:"Save"}),secondary:s.jsxs(s.Fragment,{children:[s.jsx(ie,{disabled:!p.canUndo,onClick:C,children:"Discard"}),s.jsx(ns,{label:t.kind==="merge"?"Smart Pipe Merge":"Smart Pipe",value:{schema:"bv.editor-draft",version:1,type:t.kind,data:g},onImport:z=>{if(z?.schema!=="bv.editor-draft"||z?.version!==1||z?.type!==t.kind||!z?.data)throw new Error("Draft type or version does not match this editor.");p.replace(z.data)}})]}),overflow:[{id:"undo",label:"Undo",disabled:!p.canUndo,onSelect:p.undo},{id:"redo",label:"Redo",disabled:!p.canRedo,onSelect:p.redo}]}),children:E?s.jsxs(Ir,{tone:"danger",title:E==="missing"?"Node no longer exists":"Smart Pipe changed externally",children:[E==="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(ns,{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(E==="missing")l();else{const z=f?.read(t.node)??{};x.current=structuredClone(z),p.replace(z,!0),b(null)}},children:E==="missing"?"Close window":"Reload editor"})]})]}):t.kind==="pipe"?s.jsx(E1,{node:t.node,draft:g,update:T}):s.jsx(T1,{draft:g,update:T})})}function E1({node:e,draft:t,update:r}){const o=Sm().pipe,[n,i]=m.useState(()=>o?.predecessor(e)??{value:"Start new pipe",options:[]}),a=o?.validation?.(e,t)??[];m.useEffect(()=>{const d=()=>i(o?.predecessor(e)??{value:"Start new pipe",options:[]});Xr().addEventListener("graphChanged",d);const p=window.setInterval(d,750);return()=>{Xr().removeEventListener("graphChanged",d),window.clearInterval(p)}},[o,e]);const l=t.definition?.localSlots??[],c=t.projection?.inheritedSlots??[],u=[...l.map((d,p)=>({id:d.id,title:d.name||"New slot",description:"Local · input required",summary:d.type||"*",content:s.jsxs("div",{className:"bv-ui-stack",children:[s.jsx(ln,{label:"Name",value:d.name??"",onValue:g=>r(x=>{x.definition.localSlots[p].name=g})}),s.jsx(ln,{label:"Type",value:d.type??"*",onValue:g=>r(x=>{x.definition.localSlots[p].type=g||"*"})}),s.jsx(qr,{label:"Expose output",checked:!!d.showOutput,onValue:g=>r(x=>{x.definition.localSlots[p].showOutput=g})})]})})),...c.map((d,p)=>({id:d.id,title:d.name||d.id,description:"Inherited override",content:s.jsxs("div",{className:"bv-ui-stack",children:[s.jsx(qr,{label:"Expose input",checked:!!d.showInput,onValue:g=>r(x=>{x.projection.inheritedSlots[p].showInput=g})}),s.jsx(qr,{label:"Expose output",checked:!!d.showOutput,onValue:g=>r(x=>{x.projection.inheritedSlots[p].showOutput=g})})]})}))],f=()=>r(d=>{d.definition.localSlots.push({id:crypto.randomUUID(),name:"new_slot",ordinal:d.definition.nextOrdinal++,type:"*",showInput:!0,showOutput:!1})});return s.jsxs("div",{className:"bv-ui-stack",children:[s.jsx(ht,{label:"Pipe predecessor",value:n.value,options:n.options.length?n.options:[{value:n.value,label:n.value}],onValue:d=>{o?.setPredecessor(e,d),i(o?.predecessor(e)??{value:d,options:n.options})}}),a.length>0&&s.jsx(Ir,{tone:"danger",title:"Required Smart Pipe inputs are missing",children:a.map(d=>s.jsx("div",{children:d.message},d.id))}),s.jsx(ie,{onClick:f,children:"Add slot"}),u.length?s.jsx(Ps,{items:u,onReorder:d=>r(p=>{const g=new Map(p.definition.localSlots.map(x=>[x.id,x]));p.definition.localSlots=d.map(x=>g.get(x.id)).filter(Boolean)}),onRemove:d=>r(p=>{p.definition.localSlots=p.definition.localSlots.filter(g=>g.id!==d),p.projection.inheritedSlots=p.projection.inheritedSlots.filter(g=>g.id!==d)})}):s.jsx(Bs,{title:"No slots",description:"Add a local slot or connect a predecessor."})]})}function T1({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(ht,{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(Ps,{items:i,onReorder:c=>t(u=>{const f=new Map(u.sources.map(d=>[d.key,d]));u.sources=c.map(d=>f.get(d.id)).filter(Boolean)}),onRemove:c=>t(u=>{u.sources=u.sources.filter(f=>f.key!==c)})}):s.jsx(Bs,{title:"No merge sources",description:"Connect a pipe or add a wireless source."})]})}const R1=`: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 label{display:grid;grid-template-columns:72px 1fr;align-items:center;gap:6px}.bv-resource-picker select{min-width:0}.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:5px;padding:6px;border:1px solid var(--bv-ui-border);border-radius:4px}.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}`,S1='.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 L1(e){return!e||!e.enabled||e.authoring.locked?null:e.id}function C1(e,t,r=3){return Math.hypot(t.x-e.x,t.y-e.y)>=r}function N1(e,t,r,o=12){return e>=3&&Math.hypot(r.x-t.x,r.y-t.y)<=o}function O1(e){return[...e].sort((t,r)=>r.priority-t.priority)}function M1(e){e.forEach((t,r)=>{t.priority=r})}function A1(e){return e==="draw-brush"}function wh(e){return[...e].sort((t,r)=>t.priority-r.priority)}const D1=[{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 I1({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,f=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}),d=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})})}),f,d>0&&(e.shape==="square"?s.jsx("rect",{x:c.x*t.width-d/2,y:c.y*t.height-d/2,width:d,height:d,fill:r,fillOpacity:e.opacity}):s.jsx("circle",{cx:c.x*t.width,cy:c.y*t.height,r:d/2,fill:r,fillOpacity:e.opacity}))]})}if((e.pressure_mode??"constant")==="constant"){const c=e.points.map((u,f)=>`${f?"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 f=e.points[u],d=(f.pressure+c.pressure)/2;return s.jsx("line",{x1:f.x*t.width,y1:f.y*t.height,x2:c.x*t.width,y2:c.y*t.height,stroke:r,strokeOpacity:e.opacity,strokeWidth:n*d,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 P1({region:e,geometries:t,canvas:r,opacity:o,resolved:n}){const i=s0(t).filter(u=>u.enabled&&(n||u.geometries.some((f,d)=>ir(f,d).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 f=`bv-mask-${e.id}-${u.id}`;return s.jsxs("g",{children:[s.jsx("defs",{children:s.jsxs("mask",{id:f,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((d,p)=>d.enabled!==!1&&(n||ir(d,p).visible)).map(d=>s.jsx(I1,{geometry:d,canvas:r},d.id))]})}),s.jsx("rect",{width:r.width,height:r.height,fill:e.authoring.color,mask:`url(#${f})`})]},u.id)})})]})}function B1(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),[f,d]=m.useState({x:e.initialView.panX,y:e.initialView.panY}),[p,g]=m.useState(e.initialView.fit),[x,w]=m.useState(!1),E=m.useCallback((S=a)=>Math.max(.02,Math.min(1,(S.width-40)/t.canvas.width,(S.height-40)/t.canvas.height)),[t.canvas.height,t.canvas.width,a]),b=m.useCallback(()=>{u(E()),d({x:0,y:0}),g(!0)},[E]);m.useEffect(()=>{const S=n.current;if(!S)return;const k=new ResizeObserver(j=>{const A=j[0].contentRect,R={width:A.width,height:A.height};l(R),p&&(u(Math.max(.02,Math.min(1,(R.width-40)/t.canvas.width,(R.height-40)/t.canvas.height))),d({x:0,y:0}))});return k.observe(S),()=>k.disconnect()},[t.canvas.height,t.canvas.width,p]),m.useEffect(()=>e.onView({zoom:c,panX:f.x,panY:f.y,fit:p}),[p,f.x,f.y,e.onView,c]),m.useEffect(()=>{const S=j=>{const A=j.target;j.code!=="Space"||A instanceof HTMLInputElement||A instanceof HTMLTextAreaElement||A instanceof HTMLSelectElement||A?.isContentEditable||(j.preventDefault(),j.stopImmediatePropagation(),w(!0))},k=j=>{j.code==="Space"&&(j.preventDefault(),j.stopImmediatePropagation(),w(!1),i.current=null)};return window.addEventListener("keydown",S,!0),window.addEventListener("keyup",k,!0),()=>{window.removeEventListener("keydown",S,!0),window.removeEventListener("keyup",k,!0)}},[]);const h=S=>{let k=[...S.geometry];if(e.draft&&S.id===o){const j=new Set(e.draft.map(A=>A.id));k=k.map(A=>j.has(A.id)?e.draft.find(R=>R.id===A.id):A);for(const A of e.draft)k.some(R=>R.id===A.id)||k.push(A)}return!e.binaryMaskPreview&&e.isolate&&r&&(k=k.filter(j=>Pt(j)===r)),k},v=e.brush.size*Math.min(t.canvas.width,t.canvas.height)/t.canvas.width*100,_=S=>{S.preventDefault();const k=S.currentTarget.getBoundingClientRect(),j=S.clientX-k.left,A=S.clientY-k.top,R=Math.max(.02,Math.min(8,c*Math.exp(-S.deltaY*.0015))),O=R/c;d(D=>({x:j-k.width/2-(j-k.width/2-D.x)*O,y:A-k.height/2-(A-k.height/2-D.y)*O})),u(R),g(!1)},y=S=>{S.button!==1&&!(S.button===0&&x)||(S.preventDefault(),S.stopPropagation(),S.currentTarget.setPointerCapture(S.pointerId),i.current={x:S.clientX,y:S.clientY,panX:f.x,panY:f.y},g(!1))},T=S=>{i.current&&(S.preventDefault(),S.stopPropagation(),d({x:i.current.panX+S.clientX-i.current.x,y:i.current.panY+S.clientY-i.current.y}))},L=S=>{i.current&&(S.preventDefault(),S.stopPropagation(),i.current=null)},B=a.width/2-t.canvas.width*c/2+f.x,C=a.height/2-t.canvas.height*c/2+f.y,I=10/c,z=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:L,onPointerCancelCapture:L,children:[s.jsx(u0,{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(${B}px, ${C}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:O1(t.regions.filter(S=>S.enabled&&(e.binaryMaskPreview||S.authoring.visible))).map(S=>s.jsx(P1,{region:e.binaryMaskPreview?{...S,authoring:{...S.authoring,color:"#FFFFFF"}}:S,geometries:h(S),canvas:t.canvas,opacity:e.binaryMaskPreview?1:e.displayOpacity,resolved:e.binaryMaskPreview},S.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(S=>s.jsx(j1,{geometry:S,canvas:t.canvas,cursor:e.cursor,activePolygon:e.tool.startsWith("polygon")},S.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}),D1.map(S=>{const k=(e.selectionBounds.x+e.selectionBounds.width*S.x)*t.canvas.width,j=(e.selectionBounds.y+e.selectionBounds.height*S.y)*t.canvas.height;return s.jsxs("g",{"data-handle":S.id,className:`resize-handle resize-handle-${S.id}`,children:[s.jsx("rect",{className:"resize-handle-hit",x:k-z/2,y:j-z/2,width:z,height:z}),s.jsx("rect",{className:"resize-handle-visible",x:k-I/2,y:j-I/2,width:I,height:I,rx:2/c})]},S.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:S=>S.stopPropagation(),children:[s.jsx(ie,{intent:"ghost",title:"Zoom out",onClick:()=>{u(S=>Math.max(.02,S/1.25)),g(!1)},children:"−"}),s.jsxs(ie,{intent:"ghost",title:"100%",onClick:()=>{u(1),d({x:0,y:0}),g(!1)},children:[Math.round(c*100)," %"]}),s.jsx(ie,{intent:"ghost",title:"Zoom in",onClick:()=>{u(S=>Math.min(8,S*1.25)),g(!1)},children:"+"}),s.jsx(ie,{intent:"ghost",title:"Fit to view",onClick:b,children:"Fit"})]})]})})}const Lm="BV.NodePack.Completion.Enabled",Cm="BV.NodePack.Completion.Datasets",Nm="BV.NodePack.Completion.Placement",Om="bv-nodepack:completion-enabled",ba="bv-completion-enabled-changed",va="bv-completion-placement-changed",Ef="bv-nodepack:completion-datasets",Mm="bv-nodepack:completion-placement",as="bv-completion-datasets-changed";let Am=null,Dm=null,Im=null;function Ku(){try{return localStorage.getItem(Mm)==="field"?"field":"caret"}catch{return"caret"}}function z1(e){Im=e}function jm(e,t=!1){const r=e==="field"?"field":"caret";try{localStorage.setItem(Mm,r)}catch{}t&&Im?.(r),window.dispatchEvent(new CustomEvent(va,{detail:{placement:r}}))}function Pm(){const[e,t]=m.useState(Ku);return m.useEffect(()=>{const r=o=>t(o.detail?.placement==="field"?"field":"caret");return window.addEventListener(va,r),()=>window.removeEventListener(va,r)},[]),e}function Tf(){try{return localStorage.getItem(Om)!=="false"}catch{return!0}}function F1(e){Am=e}function Bm(e,t=!1){try{localStorage.setItem(Om,String(e))}catch{}t&&Am?.(e),window.dispatchEvent(new CustomEvent(ba,{detail:{enabled:e}}))}function zm(){const[e,t]=m.useState(Tf);return m.useEffect(()=>{const r=o=>t(!!o.detail?.enabled);return window.addEventListener(ba,r),()=>window.removeEventListener(ba,r)},[]),e}function Fm(){try{const e=localStorage.getItem(Ef);if(e==null)return null;const t=JSON.parse(e);return Array.isArray(t)?t.map(String):null}catch{return null}}function U1(e){Dm=e}function Um(e,t=!1){const r=[...new Set(e.map(String))];try{localStorage.setItem(Ef,JSON.stringify(r))}catch{}t&&Dm?.(JSON.stringify(r)),window.dispatchEvent(new CustomEvent(as,{detail:{datasets:r}}))}function Wm(e){if(e==null||e===""){try{localStorage.removeItem(Ef)}catch{}window.dispatchEvent(new CustomEvent(as,{detail:{datasets:null}}));return}try{const t=typeof e=="string"?JSON.parse(e):e;Array.isArray(t)&&Um(t.map(String))}catch{}}function W1(){const[e,t]=m.useState(Fm);return m.useEffect(()=>{const r=o=>t(o.detail?.datasets??null);return window.addEventListener(as,r),()=>window.removeEventListener(as,r)},[]),e}function Vm({onSelectionChange:e}={}){const t=W1(),[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=>{Um(g,!0),e?.(g)},u=g=>c(l.includes(g)?l.filter(x=>x!==g):[...l,g]),f=(g,x)=>{const w=l.indexOf(g),E=w+x;if(w<0||E<0||E>=l.length)return;const b=[...l];[b[w],b[E]]=[b[E],b[w]],c(b)},d=new Map(r.map(g=>[g.id,g])),p=[...l.map(g=>d.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:()=>f(g.id,-1),children:"↑"}),s.jsx(ie,{intent:"ghost",iconOnly:!0,disabled:!w||x===l.length-1,title:"Move down",onClick:()=>f(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 V1(e){const t=zm(),r=Pm(),o=e.openMenu,n=m.useRef(null),{menuOverflow:i}=km(),a=m.useRef(null),l=m.useRef(null);m.useEffect(()=>{const f=d=>{n.current?.contains(d.target)||e.onOpenMenu(null)};return window.addEventListener("pointerdown",f),()=>window.removeEventListener("pointerdown",f)},[e.onOpenMenu]);const c=(f,d,p)=>s.jsx(Zp,{open:o===f,onOpen:g=>e.onOpenMenu(g?f:null),trigger:({toggle:g})=>s.jsxs(ie,{intent:"ghost",density:"compact","aria-label":d,title:d,"aria-expanded":o===f,onClick:g,children:[s.jsx("span",{className:"editor-menu-label-full",children:d}),s.jsx("span",{className:"editor-menu-label-short","aria-hidden":"true",children:d==="?"?d:d[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:f=>Bm(f,!0)}),s.jsx(ht,{label:"Popup Position",value:r,onValue:f=>jm(f,!0),options:[{value:"caret",label:"At Caret"},{value:"field",label:"Below Text Field"}]}),s.jsx(Vm,{})]})),c("view","View",s.jsxs("div",{className:"bv-menu-stack",children:[s.jsx(jt,{label:"Mask Display",value:e.displayOpacity,min:.05,max:1,step:.05,unit:"×",onValue:e.onDisplayOpacity}),s.jsx(jt,{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(jt,{label:"Width",value:e.canvas.width,min:1,max:32768,step:1,unit:"px",slider:!1,onValue:f=>e.onCanvas({...e.canvas,width:f})}),s.jsx(jt,{label:"Height",value:e.canvas.height,min:1,max:32768,step:1,unit:"px",slider:!1,onValue:f=>e.onCanvas({...e.canvas,height:f})})]})),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(Jp,{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(Jp,{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(Zp,{trigger:({toggle:f})=>s.jsx(ie,{intent:"ghost",density:"compact","aria-label":"Editor menus",onClick:f,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:f=>{const d=f.target.files?.[0];d&&e.onImportDocument(d),f.target.value=""}}),s.jsx("input",{hidden:!0,ref:l,type:"file",accept:"application/json,.json",onChange:f=>{const d=f.target.files?.[0];d&&e.onImportRegions(d),f.target.value=""}})]})}function Hm(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 f=n-l.length+c;return{...r,text:e,caret:n,term:u,start:f,end:n,limit:o}}function $m(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 Ym(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 Xm={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:Fm()}),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:{}}]:[]})}},H1=["fontFamily","fontSize","fontStyle","fontWeight","letterSpacing","lineHeight","textTransform","textIndent","textAlign","wordSpacing","paddingTop","paddingRight","paddingBottom","paddingLeft","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth"];function $1(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"}),H1.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 f=c.getBoundingClientRect(),d=u.getBoundingClientRect(),p=Number.parseFloat(o.lineHeight)||Number.parseFloat(o.fontSize)*1.2||16;c.remove();const g=r.left+(d.left-f.left)*a,x=r.top+(d.top-f.top)*l;return{left:g,top:x,bottom:x+p*l}}function ls(e,t,r=210){const i=e.getBoundingClientRect(),a=t==="caret"?$1(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)),f=a.bottom+4,d=f+r<=window.innerHeight-4?f:Math.max(4,a.top-r-4);return{left:u,top:d,width:c}}function Gm({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 ss({value:e,onValue:t,completionContext:r,onKeyDown:o,onBlur:n,onSelect:i,...a}){const l=zm(),c=Pm(),u=m.useRef(null),[f,d]=m.useState([]),[p,g]=m.useState(0),[x,w]=m.useState(null),E=m.useRef(null),b=m.useRef(null),h=m.useRef(null),v=m.useRef(210),_=m.useRef(()=>{}),y=()=>{b.current?.abort(),d([]),w(null)},T=()=>{const C=u.current;C&&w(ls(C,c,v.current))},L=(C,I,z=I)=>{if(!l||I!==z)return y();h.current!=null&&window.clearTimeout(h.current),b.current?.abort();const S=Hm(C,I,r);if(E.current=S,!S)return y();const k=new AbortController;b.current=k,h.current=window.setTimeout(async()=>{const j=await Ym(S,[Xm],k.signal);if(k.signal.aborted)return;const A=u.current;d(j),g(0),w(j.length&&A?ls(A,c):null)},120)};_.current=L;const B=(C=p)=>{const I=E.current,z=f[C];if(!I||!z)return;const S=$m(e,I,z);t(S.text),y(),requestAnimationFrame(()=>{u.current?.focus(),u.current?.setSelectionRange(S.caret,S.caret)})};return m.useEffect(()=>{l||y()},[l]),m.useEffect(()=>{const C=()=>{const I=u.current;I&&document.activeElement===I&&_.current(I.value,I.selectionStart,I.selectionEnd)};return document.addEventListener("selectionchange",C),()=>document.removeEventListener("selectionchange",C)},[]),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(t0,{...a,ref:u,value:e,onChange:C=>{t(C.target.value),L(C.target.value,C.target.selectionStart,C.target.selectionEnd)},onSelect:C=>{L(C.currentTarget.value,C.currentTarget.selectionStart,C.currentTarget.selectionEnd),i?.(C)},onKeyDown:C=>{if(f.length){if(C.key==="ArrowDown"||C.key==="ArrowUp"){C.preventDefault(),C.stopPropagation(),g(I=>(I+(C.key==="ArrowDown"?1:-1)+f.length)%f.length);return}if(C.key==="Enter"||C.key==="Tab"){C.preventDefault(),C.stopPropagation(),B();return}if(C.key==="Escape"){C.preventDefault(),C.stopPropagation(),y();return}}o?.(C)},onBlur:C=>{window.setTimeout(y,120),n?.(C)}})}),l&&x&&s.jsx(Gm,{suggestions:f,selected:p,position:x,onAccept:B,onHeight:C=>{Math.abs(C-v.current)<1||(v.current=C,T())}})]})}function _n({label:e,help:t,value:r,onChange:o,children:n,disabled:i,className:a=""}){const l=Te.Children.toArray(n).flatMap(c=>Te.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(ht,{label:e,help:t,value:r,onValue:o,options:l,disabled:i})})}function kn({onChange:e,...t}){return s.jsx(jt,{...t,onValue:e})}const kh=({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))]}),Nc=({title:e,scope:t,value:r,open:o,onOpen:n,onChange:i})=>s.jsx(Ql,{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(wr,{label:"Positive",children:s.jsx(ss,{value:r.positive_source,onValue:a=>i({...r,positive_source:a}),completionContext:{scope:t,polarity:"positive"}})}),s.jsx(wr,{label:"Negative",children:s.jsx(ss,{value:r.negative_source,onValue:a=>i({...r,negative_source:a}),completionContext:{scope:t,polarity:"negative"}})})]})}]}),Y1=({region:e,automaticColor:t,onRegion:r})=>s.jsxs("section",{className:"bv-inspector-section",children:[s.jsx("h3",{children:"Mask & appearance"}),s.jsx(kn,{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(i0,{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 X1(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(of,{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(Y1,{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(kn,{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(kn,{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(kn,{label:"Hardness",value:t.hardness,min:0,max:1,step:.05,onChange:n=>e.onBrushSetting("hardness",n)}),s.jsx(kn,{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(_n,{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(_n,{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(_n,{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"})]}),s.jsx(_n,{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(kh,{stacks:e.loraStacks})}),s.jsx(kn,{label:"Strength",value:e.region.strength,min:0,max:10,step:.05,onChange:n=>e.onRegion(i=>{i.strength=n})}),s.jsx(Nc,{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"}),s.jsx(_n,{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(kh,{stacks:e.loraStacks})}),s.jsxs(_n,{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(Nc,{title:"Global",scope:"global",value:e.globalPrompts,open:e.promptSections.global,onOpen:n=>e.onPromptSection("global",n),onChange:e.onGlobalPrompts}),s.jsx(Nc,{title:"Background",scope:"background",value:e.backgroundPrompts,open:e.promptSections.background,onOpen:n=>e.onPromptSection("background",n),onChange:e.onBackgroundPrompts})]})})]})})}const rt=(e,t=0,r=1)=>Math.max(t,Math.min(r,e));function G1(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(d=>d.x),o=e.points.map(d=>d.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=rt(Math.min(...r)-i),c=rt(Math.min(...o)-a),u=rt(Math.max(...r)+i),f=rt(Math.max(...o)+a);return{x:l,y:c,width:u-l,height:f-c}}function Km(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=rt(((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 K1(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!=f.y>t.y&&t.x<(f.x-u.x)*(t.y-u.y)/(f.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)=>Km(i,o(e.points[l]),o(a))<=n)}function $s(e,t){const r=e.map(l=>G1(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 Eh(e,t,r,o){const n=$s(e,o);return t=rt(t,-n.x,1-n.x-n.width),r=rt(r,-n.y,1-n.y-n.height),e.map(i=>{const a=Xt(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 qm(e,t,r){const o=$s(e,r);t={x:rt(t.x,0,.998),y:rt(t.y,0,.998),width:rt(t.width,.002,1),height:rt(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=Xt(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=rt(l.size*Math.sqrt(n*i),.001,1))),l})}function q1(e,t,r,o,n=!1,i){const a=$s(e,i);let l=a.x,c=a.y,u=l+a.width,f=c+a.height;if(t.includes("w")&&(l=rt(l+r,0,u-.002)),t.includes("e")&&(u=rt(u+r,l+.002,1)),t.includes("n")&&(c=rt(c+o,0,f-.002)),t.includes("s")&&(f=rt(f+o,c+.002,1)),n&&t.length===2){const d=a.width/Math.max(a.height,1e-4),p=u-l,g=f-c;if(p/g>d){const x=p/d;t.includes("n")?c=rt(f-x):f=rt(c+x)}else{const x=g*d;t.includes("w")?l=rt(u-x):u=rt(l+x)}}return qm(e,{x:l,y:c,width:u-l,height:f-c},i)}function J1(e,t,r){return Km(e,t,r)}function Z1(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 Th=e=>e.layer_id??e.id,Q1=e=>e.authoring??{name:"Layer",visible:!0,locked:!1};function ek(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 tk(e,t,r){const o=new Set(t);if(o.size<2||!o.has(r))return!1;const n=e.geometry.find(l=>Th(l)===r);if(!n)return!1;const i=Q1(n);let a=!1;return e.geometry.forEach(l=>{const c=Th(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 Jm(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 rk="bv-regional-editor-state-v1:",tt=(e,t)=>typeof e=="number"&&Number.isFinite(e)?e:t,Et=(e,t,r)=>Math.max(t,Math.min(r,e)),ok=["select","rect-add","rect-subtract","ellipse-add","ellipse-subtract","polygon-add","polygon-subtract","brush-add","brush-subtract"];function Zm(e){return`${rk}${e}`}function nk(e,t,r={width:520,height:560}){return{x:Et(tt(e.x,t.width-r.width-24),-r.width+52,t.width-52),y:Et(tt(e.y,84),72,Math.max(72,t.height-52))}}function cs(e,t){const r=Et(tt(e.width,520),Math.min(360,t.width),Math.max(360,t.width-32)),o=Et(tt(e.height,640),Math.min(320,t.height),Math.max(320,t.height-32));return{...nk({x:tt(e.x,t.width-r-24),y:tt(e.y,84)},t,{width:r}),width:r,height:o}}function Rh(e,t){return e.mode==="workspace"?cn({x:24,y:58,width:t.width-48,height:t.height-82},t,"workspace"):e.windows.floating}function cn(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=Et(tt(e.width,o),o,i),c=Et(tt(e.height,n),n,a),u=r==="workspace"?8:0;return{x:Et(tt(e.x,u),u-l+80,t.width-u-80),y:Et(tt(e.y,58),0,t.height-42),width:l,height:c}}function Rf(e={width:window.innerWidth,height:window.innerHeight}){const t=cn({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=cn({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:cs({x:e.width-544,y:84,width:520,height:640},e)}}function ik(e,t={width:window.innerWidth,height:window.innerHeight}){const r=Rf(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:cn(i.workspace??r.windows.workspace,t,"workspace"),floating:cn(i.floating??r.windows.floating,t,"floating")},panels:{left:Et(tt(a.left,290),210,620),right:Et(tt(a.right,340),210,620)},artboard:{zoom:Et(tt(l.zoom,1),.02,8),panX:tt(l.panX,0),panY:tt(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:Et(tt(o.displayOpacity,.5),.05,1),backgroundOpacity:Et(tt(o.backgroundOpacity,1),0,1),isolate:o.isolate===!0,tool:o.tool==="rect"?"rect-add":ok.includes(o.tool)?o.tool:"select",binaryMaskPreview:o.binaryMaskPreview===!0,brush:{size:Et(tt(c.size,.04),.001,1),hardness:Et(tt(c.hardness,.75),0,1),opacity:Et(tt(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:cs(o.quickPromptWindow??r.quickPromptWindow,t)}}function Tl(e,t=localStorage,r={width:window.innerWidth,height:window.innerHeight}){try{return ik(JSON.parse(t.getItem(Zm(e))||"null"),r)}catch{return Rf(r)}}function qu(e,t,r=localStorage){try{return r.setItem(Zm(e),JSON.stringify(t)),!0}catch{return!1}}function ak(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[f++]=y)}}i.push({label:a,x:d,y:p,width:g-d+1,height:x-p+1,pixels:w})}return{labels:n,areas:i}}const Ju=(e,t)=>{const r=document.createElement("canvas");return r.width=e,r.height=t,r},lk=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 sk(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 lk(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=(d,p,g=0)=>{const x=a*d.pressure*p;e.filter=g>0?`blur(${g}px)`:"none",e.beginPath(),t.shape==="square"?e.rect(d.x*r-x/2,d.y*o-x/2,x,x):e.arc(d.x*r,d.y*o,x/2,0,Math.PI*2),e.fill()},u=(d,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,f),t.hardness>0&&u(t.hardness))}e.restore()}async function ck(e,t,r){const o=Ju(t,r),n=o.getContext("2d",{willReadFrequently:!0}),i=new Map;e.filter(a=>a.enabled!==!1).forEach(a=>{const l=Sa(a),c=i.get(l);c?c.push(a):i.set(l,[a])});for(const a of i.values()){const l=Ju(t,r),c=l.getContext("2d");for(const u of a)await sk(c,u,t,r);n.drawImage(l,0,0)}return o}async function uk(e,t,r){const i=(await ck(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 d=0;dd.pixels>1);if(u.length<2)return[];const f={...e[0].authoring??{name:"Layer",visible:!0,locked:!1}};return u.map((d,p)=>{const g=Ju(d.width,d.height),x=g.getContext("2d"),w=x.createImageData(d.width,d.height);for(let b=0;b({schema:"bv.regional.lora_bindings",version:1,document_id:e,global_stack_id:null,regions:{}});function dk(e,t,r){if(!t)return!1;const o=r.filter(n=>n.id===t);return o.length>1&&o[0].nodeId!==e}function Sf(e,t){if(e==null||e==="")return Ys(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 Vn(e,t){const r=Object.fromEntries(Object.entries(e.regions).filter(([o])=>t.has(o)));return{...e,regions:r}}function Oc(e,t){const r=structuredClone(e);return{document:r,loraBindings:structuredClone(Vn(t,new Set(r.regions.map(o=>o.id))))}}function fk(e,t,r){const o=t.find((c,u)=>t.findIndex(f=>f.id===c.id)!==u);if(o)return[`Duplicate LoRA stack ID: ${o.id}`];const n=t.find((c,u)=>t.findIndex(f=>f.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 pk(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 us=(e,t)=>e.regions.find(r=>r.id===t)??null,Zu=(e,t)=>e?Lr(e).find(r=>r.id===t)??null:null,Qu=e=>e.kind==="layer"||e.kind==="geometry"?e.layerId:null;function hk(e,t){const r=us(e,t.source.regionId),o=us(e,t.target.regionId);if(!r||!o||r.authoring.locked||o.authoring.locked||t.source.kind!=="region"&&Zu(r,t.source.layerId)?.authoring.locked)return!1;const n=Qu(t.target);return!(n&&Zu(o,n)?.authoring.locked)}function gk(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 bk(e,t,r){if(!hk(e,t))return!1;const o=structuredClone(e.regions),n=()=>e.regions.every(d=>Cv(d.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 d=e.regions.findIndex(x=>x.id===t.source.regionId),[p]=e.regions.splice(d,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=us(e,t.source.regionId),a=us(e,t.target.regionId);if(t.source.kind==="layer"){const d=t.source;if(t.target.kind==="geometry"||d.layerId===Qu(t.target))return!1;const p=i.geometry.filter(g=>Pt(g)===d.layerId);return p.length?(i.geometry=i.geometry.filter(g=>Pt(g)!==d.layerId),gk(a,p,Qu(t.target),t.position),n()):!1}const l=t.source,c=i.geometry.findIndex(d=>d.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={...ir(u)},a.geometry.push(u),n();const f=t.target.layerId;if((f!==l.layerId||a!==i)&&(u.mask_group_id??(u.mask_group_id=l.layerId),u.layer_id=f,u.authoring={...Zu(a,f).authoring}),t.target.kind==="layer"||t.position==="inside"){const d=a.geometry.map((p,g)=>Pt(p)===f?g:-1).filter(p=>p>=0);a.geometry.splice(d.length?d[d.length-1]+1:a.geometry.length,0,u)}else{const d=t.target,p=a.geometry.findIndex(g=>g.id===d.geometryId);a.geometry.splice(t.position==="before"?p:p+1,0,u)}return n()}const Po=e=>da(ct().rootGraph??ct().graph,e),Sh=e=>e?.widgets?.find(t=>t.name==="regional_json"),tl=e=>e?.widgets?.find(t=>t.name==="lora_bindings_json"),Lh=(e,t)=>e&&t?e.geometry.filter(r=>Pt(r)===t):[],Bo=M1,Mc=(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 Ch(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 vk(e){const t=new Map(e.map(r=>[r.id,Nt()]));return Xt(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,Jm(r.geometry,Nt);const o=new Map;return r.geometry.forEach(n=>{const i=Pt(n);o.has(i)||o.set(i,Nt()),n.id=Nt(),n.layer_id=o.get(i)}),r})}function mk({open:e,activationToken:t=0,nodes:r,initialNode:o,backgrounds:n,loraStacks:i,onClose:a}){const[l,c]=m.useState(o),[u,f]=m.useState(null),[d,p]=m.useState(null),[g,x]=m.useState(null),[w,E]=m.useState([]),[b,h]=m.useState(null),[v,_]=m.useState(null),[y,T]=m.useState("select"),[L,B]=m.useState({size:.04,hardness:.75,opacity:1,shape:"round",pressureMode:"constant"}),[C,I]=m.useState(.5),[z,S]=m.useState(1),[k,j]=m.useState(!1),[A,R]=m.useState([]),[O,D]=m.useState([]),[V,F]=m.useState(null),[ne,Y]=m.useState(null),[K,Z]=m.useState(""),[$,Q]=m.useState(()=>Rf()),[oe,le]=m.useState(0),[Le,ke]=m.useState([]),[ve,Dt]=m.useState(()=>Ys("")),J=lf(),se=m.useRef(null),ce=m.useRef(!1),X=m.useRef(t),fe=m.useRef(null),pe=m.useCallback(N=>Q(P=>{const W=P.artboard;return W.zoom===N.zoom&&W.panX===N.panX&&W.panY===N.panY&&W.fit===N.fit?P:{...P,artboard:N}}),[]),ge=m.useCallback(N=>Q(P=>P.openMenu===N?P:{...P,openMenu:N}),[]);m.useEffect(()=>{const N=ce.current,P=X.current!==t;if(ce.current=e,X.current=t,!e||!P)return;const W=o??r[0]??null,H=Po(l),q=Po(W);N&&H&&q!==H&&ri()==="keep"?ke(de=>[...new Set([...de,H])].filter(Re=>Re!==q)):q&&ke(de=>de.filter(Re=>Re!==q)),fe.current=N?{mode:$.mode,geometry:Rh($,{width:window.innerWidth,height:window.innerHeight})}:null,c(W)},[t,o,r,e]),m.useEffect(()=>{h(null)},[l,e]),m.useEffect(()=>{if(!(!e||!l))try{const N=sn(Sh(l)?.value);N.regions=wh(N.regions),Bo(N.regions);const P=Sf(tl(l)?.value,N.document_id),W=Vn(P,new Set(N.regions.map(pr=>pr.id))),H=tl(l);H&&JSON.stringify(P)!==JSON.stringify(W)&&(H.value=JSON.stringify(W),H.callback?.(H.value),l.graph?.setDirtyCanvas?.(!0,!0));const q=Tl(N.document_id),de=N.regions.some(pr=>pr.id===q.selectedRegionId)?q.selectedRegionId:N.regions[0]?.id??null,Re=fe.current;fe.current=null,Re&&(q.mode=Re.mode,q.windows[Re.mode]=Re.geometry);const ut=N.regions.find(pr=>pr.id===de),Vt=ut&&Lr(ut).some(pr=>pr.id===q.selectedLayerId)?q.selectedLayerId:null;Q(q),f(N),Dt(W),p(de),x(Vt),E(Vt?[Vt]:[]),_(Vt),T(q.tool),B(q.brush),I(q.displayOpacity),S(q.backgroundOpacity),j(q.isolate&&!!Vt),R([]),D([]),Z("")}catch(N){Z(N instanceof Error?N.message:String(N))}},[l,e]),m.useEffect(()=>{u&&qu(u.document_id,{...$,selectedRegionId:d,selectedLayerId:g,displayOpacity:C,backgroundOpacity:z,isolate:k,tool:y,brush:L})},[z,L,C,u,k,g,d,y,$]),m.useEffect(()=>{if(!e)return;const N=()=>Q(P=>({...P,windows:{workspace:cn(P.windows.workspace,{width:window.innerWidth,height:window.innerHeight},"workspace"),floating:cn(P.windows.floating,{width:window.innerWidth,height:window.innerHeight},"floating")}}));return window.addEventListener("resize",N),()=>window.removeEventListener("resize",N)},[e]);const Ce=u?.regions.find(N=>N.id===d)??null,et=Lh(Ce,g),ze=b?et.filter(N=>N.id===b):et,_e=Ce&&g?Lr(Ce).find(N=>N.id===g)??null:null,xe=Ce?Lr(Ce).filter(N=>w.includes(N.id)):[],Fe=xe.length>1&&xe.every(N=>!N.authoring.locked),Ze=!!_e&&!_e.authoring.locked,Ue=N=>{x(N),E(N?[N]:[]),_(N),h(null)},Br=(N,P,W)=>{const H=u?.regions.find(Vt=>Vt.id===N);if(!H)return;const q=N===d,de=[...Lr(H)].reverse().map(Vt=>Vt.id),ut=ek(q?{ids:w,primary:g,anchor:v}:{ids:[],primary:null,anchor:null},P,de,W);p(N),E(ut.ids),x(ut.primary),_(ut.anchor),j(!1),h(null)},vn=V&&g&&V.every(N=>Pt(N)===g)?se.current&&"commit"in se.current&&se.current.commit==="subtract"?[...ze,...V]:V:ze,Do=vn.length&&u?$s(vn,u.canvas):null,kr=m.useCallback((N,P=!0,W=ve)=>{if(!l)return;P&&u&&(R(Re=>[...Re.slice(-99),Oc(u,ve)]),D([]));const H=Vn(W,new Set(N.regions.map(Re=>Re.id)));f(N);const q=Sh(l);q&&(q.value=JSON.stringify(N),q.callback?.(q.value)),Dt(H);const de=tl(l);de&&(de.value=JSON.stringify(H),de.callback?.(de.value)),l.graph?.setDirtyCanvas?.(!0,!0)},[u,ve,l]),Ne=m.useCallback((N,P=!0)=>{if(!u)return;const W=Xt(u);N(W),kr(W,P)},[u,kr]),io=m.useCallback(N=>{if(!l)return;const P=u?Vn(N,new Set(u.regions.map(H=>H.id))):N;Dt(P);const W=tl(l);W&&(W.value=JSON.stringify(P),W.callback?.(W.value)),l.graph?.setDirtyCanvas?.(!0,!0)},[u,l]),Oa=N=>io({...ve,global_stack_id:N}),Ma=(N,P)=>{const W={...ve.regions};P?W[N]=P:delete W[N],io({...ve,regions:W})},Aa=N=>Ne(P=>{const W=P.regions.find(H=>H.id===d);W&&N(W)}),Io=(N,P)=>Ne(W=>{const H=W.regions.find(q=>q.id===d);H&&P(Lh(H,N),H)}),fr=m.useCallback(()=>{se.current=null,F(null)},[]),Da=m.useCallback(()=>{if(se.current?.mode!=="draw-polygon"||!V?.length)return;const N=V.map(P=>P.type==="polygon"?{...P,points:P.points.filter((W,H,q)=>H===0||Math.hypot(W.x-q[H-1].x,W.y-q[H-1].y)>.001)}:P);if(N.some(P=>P.type!=="polygon"||P.points.length<3))return fr();Ne(P=>{const W=P.regions.find(H=>H.id===d);W&&W.geometry.push(...N)}),fr()},[fr,V,Ne,d]),Js=m.useCallback(()=>{if(!u||!A.length)return;const N=A[A.length-1];R(A.slice(0,-1)),D([Oc(u,ve),...O]),kr(Xt(N.document),!1,Xt(N.loraBindings))},[u,O,A,ve,kr]),Zs=m.useCallback(()=>{if(!u||!O.length)return;const N=O[0];D(O.slice(1)),R([...A,Oc(u,ve)]),kr(Xt(N.document),!1,Xt(N.loraBindings))},[u,O,A,ve,kr]),Qs=N=>{Io(N,(P,W)=>{W.geometry=W.geometry.filter(H=>Pt(H)!==N)}),w.includes(N)&&Ue(null)},Rx=N=>Ne(P=>{const W=P.regions.find(q=>q.id===d),H=W?.geometry.find(q=>q.id===N);H&&(H.enabled=H.enabled===!1)}),Sx=N=>{const P=u?.regions.find(W=>W.id===d);if(!P||!Wu(P.geometry,N)){Or({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}Ne(W=>{const H=W.regions.find(q=>q.id===d);H&&(H.geometry=H.geometry.filter(q=>q.id!==N))}),b===N&&h(null)},jf=()=>{if(!d||!g||!Fe)return;const N=g;Ne(P=>{const W=P.regions.find(H=>H.id===d);W&&tk(W,w,N)}),Ue(N)},Lx=async()=>{if(!(!u||!d||!g||!_e||!Ze))try{const N=await uk(_e.geometries,u.canvas,Nt);if(N.length<2){Or({title:"Layer was not split",message:"The selected layer contains fewer than two disconnected visible areas.",tone:"info",duration:4500});return}Ne(W=>{const H=W.regions.find(de=>de.id===d);if(!H)return;const q=H.geometry.findIndex(de=>Pt(de)===g);H.geometry=H.geometry.filter(de=>Pt(de)!==g),H.geometry.splice(Math.max(0,q),0,...N)});const P=N.map(W=>Pt(W));E(P),x(P[0]),_(P[0])}catch(N){Or({title:"Split failed",message:String(N),tone:"danger",duration:6e3})}};m.useEffect(()=>{if(!e)return;const N=P=>{if(P.key==="Escape"&&se.current){P.preventDefault(),P.stopImmediatePropagation(),fr();return}if(P.key==="Enter"&&se.current?.mode==="draw-polygon"){P.preventDefault(),P.stopImmediatePropagation(),Da();return}if((P.ctrlKey||P.metaKey)&&P.key.toLowerCase()==="e"&&Fe){P.preventDefault(),P.stopImmediatePropagation(),jf();return}if((P.key==="Delete"||P.key==="Backspace")&&g&&!(P.target instanceof HTMLInputElement||P.target instanceof HTMLTextAreaElement)){P.preventDefault(),P.stopImmediatePropagation(),Qs(g);return}!(P.ctrlKey||P.metaKey)||P.key.toLowerCase()!=="z"||(P.preventDefault(),P.stopImmediatePropagation(),P.shiftKey?Zs():Js())};return window.addEventListener("keydown",N,!0),()=>window.removeEventListener("keydown",N,!0)},[fr,Fe,Qs,Da,e,Zs,g,w,Js]);const Cx=N=>{if(!u||!Ce||Ce.authoring.locked)return;const P=Mc(N,L.pressureMode),W=N.target.closest?.("[data-handle]")?.getAttribute("data-handle");if(y==="select"){if(N.currentTarget.setPointerCapture(N.pointerId),F(null),W&&_e&&!_e.authoring.locked){se.current={mode:"resize",start:P,original:Xt(ze),handle:W};return}const er=[...Lr(Ce)].reverse().find(Ht=>Ht.enabled&&Ht.authoring.visible&&Ht.geometries.filter(Er=>Er.operation==="add").some(Er=>K1(Er,P,u.canvas)));Ue(er?.id??null),er&&!er.authoring.locked&&(se.current={mode:"move",start:P,startScreen:{x:N.clientX,y:N.clientY},original:Xt(er.geometries),started:!1});return}const H=y.endsWith("subtract");if(H&&(!g||_e?.authoring.locked))return;if(y.startsWith("polygon")&&se.current?.mode==="draw-polygon"){const er=V?.find(Ht=>Ht.type==="polygon")?.points.length??0;if(N1(er,se.current.startScreen,{x:N.clientX,y:N.clientY})){Da();return}F(Ht=>Ht?.map(Er=>Er.type==="polygon"?{...Er,points:[...Er.points,P]}:Er)??null);return}const q=Nt(),de=H?null:L1(_e),Re=H?g:de??q,ut=y.startsWith("rect")?"Rectangle":y.startsWith("ellipse")?"Ellipse":y.startsWith("polygon")?"Polygon":"Brush",Vt=H||de?_e?.authoring:{name:`${ut} ${Lr(Ce).length+1}`,visible:!0,locked:!1},pr=H?[...new Set(ze.map(Sa))]:[void 0];if(y.startsWith("rect")||y.startsWith("ellipse")){N.currentTarget.setPointerCapture(N.pointerId);const er=y.startsWith("rect")?"rect":"ellipse";F(pr.map((Ht,Er)=>({id:Er?Nt():q,layer_id:Re,mask_group_id:Ht,type:er,operation:H?"subtract":"add",enabled:!0,authoring:Vt,x:P.x,y:P.y,width:.001,height:.001}))),se.current={mode:"draw-box",start:P,commit:H?"subtract":"add"},H||Ue(Re)}else y.startsWith("polygon")?(F(pr.map((er,Ht)=>({id:Ht?Nt():q,layer_id:Re,mask_group_id:er,type:"polygon",operation:H?"subtract":"add",enabled:!0,authoring:Vt,points:[P]}))),se.current={mode:"draw-polygon",start:P,startScreen:{x:N.clientX,y:N.clientY},commit:H?"subtract":"add"},H||Ue(Re)):(N.currentTarget.setPointerCapture(N.pointerId),F(pr.map((er,Ht)=>({id:Ht?Nt():q,layer_id:Re,mask_group_id:er,type:"brush_stroke",operation:y==="brush-add"?"add":"subtract",enabled:!0,authoring:Vt,size:L.size,hardness:L.hardness,opacity:L.opacity,shape:L.shape,pressure_mode:L.pressureMode,points:[P]}))),se.current={mode:"draw-brush",start:P,commit:y==="brush-add"?"add":"subtract"},y==="brush-add"&&Ue(Re))},Nx=N=>{if(!u)return;const P=Mc(N,L.pressureMode);Y(P);const W=se.current;if(W)if(W.mode==="draw-box"&&(V?.[0]?.type==="rect"||V?.[0]?.type==="ellipse"))F(V.map(H=>H.type==="rect"||H.type==="ellipse"?{...H,x:Math.min(W.start.x,P.x),y:Math.min(W.start.y,P.y),width:Math.max(.001,Math.abs(P.x-W.start.x)),height:Math.max(.001,Math.abs(P.y-W.start.y))}:H));else if(W.mode==="draw-brush"&&V?.[0]?.type==="brush_stroke")F(V.map(H=>H.type==="brush_stroke"?{...H,points:[...H.points,P]}:H));else if(W.mode==="move"){if(!W.started&&!C1(W.startScreen,{x:N.clientX,y:N.clientY}))return;W.started=!0,F(Eh(W.original,P.x-W.start.x,P.y-W.start.y,u.canvas))}else W.mode==="resize"&&F(q1(W.original,W.handle,P.x-W.start.x,P.y-W.start.y,N.shiftKey,u.canvas))},Ox=N=>{if(!u||!se.current||!V)return fr();const P=se.current,W=Mc(N,L.pressureMode);if(P.mode==="draw-polygon")return;let H=A1(P.mode)?V.map(q=>q.type==="brush_stroke"?{...q,points:Z1([...q.points,W])}:q):V;if(P.mode==="draw-box"&&(H[0].type==="rect"||H[0].type==="ellipse")&&(H[0].width<=.002||H[0].height<=.002))return fr();Ne(q=>{const de=q.regions.find(Re=>Re.id===d);if(de)if(P.mode.startsWith("draw"))de.geometry.push(...H);else{const Re=new Map(H.map(ut=>[ut.id,ut]));de.geometry=de.geometry.map(ut=>Re.get(ut.id)??ut)}}),fr()},Mx=N=>{se.current?.mode==="draw-polygon"&&(N.preventDefault(),Da())},Ax=(N,P)=>Ne(W=>{const H=W.regions.findIndex(de=>de.id===N),q=H+P;q<0||q>=W.regions.length||([W.regions[H],W.regions[q]]=[W.regions[q],W.regions[H]],Bo(W.regions))}),Dx=(N,P)=>Io(N,(W,H)=>{const q=Lr(H),de=q.findIndex(ut=>ut.id===N),Re=de+P;Re<0||Re>=q.length||([q[de],q[Re]]=[q[Re],q[de]],H.geometry=q.flatMap(ut=>ut.geometries))}),Ix=N=>{let P=!1,W=null;if(Ne(q=>{P=bk(q,N,()=>W=Nt()),Bo(q.regions)}),!P)return;if(p(N.target.regionId),N.source.kind==="region"){Ue(null);return}const H=N.source.kind==="layer"?N.source.layerId:N.target.kind==="region"?W:N.target.layerId;x(H),E(H?[H]:[]),_(H),h(N.source.kind==="geometry"?N.source.geometryId:null),j(!1)},jx=(N,P)=>Io(N,W=>{if(W.length)if(P==="enabled"){const H=!W.some(q=>q.enabled!==!1);W.forEach(q=>{q.enabled=H})}else{const H=!ir(W[0])[P];W.forEach(q=>{q.authoring={...ir(q),[P]:H}})}}),Px=N=>Io(N,(P,W)=>{const H=Nt(),q=Eh(Xt(P),.02,.02,u.canvas);Jm(q,Nt),q.forEach((de,Re)=>{de.id=Nt(),de.layer_id=H,de.authoring={...ir(de),name:`${ir(de).name} Copy`,visible:!0,locked:!1},Re&&(de.authoring=q[0].authoring)}),W.geometry.push(...q),Ue(H)}),Bx=N=>{const P=u?.regions.find(W=>W.id===N);P&&J.confirm({title:`Delete region “${P.name}”?`,message:`This removes ${Lr(P).length} layer(s) and clears child-region parent references.`,confirmLabel:"Delete region",danger:!0,action:()=>{Ne(W=>{W.regions=W.regions.filter(H=>H.id!==N),W.regions.forEach(H=>{H.parent_region_id===N&&(H.parent_region_id=null)}),Bo(W.regions)}),p(u?.regions.find(W=>W.id!==N)?.id??null),Ue(null)}})},zx=async N=>{try{if(!u)return;const P=l0(sn(await N.text()),u.document_id);P.regions=wh(P.regions),Bo(P.regions),kr(P),p(P.regions[0]?.id??null),Ue(null)}catch(P){Or({title:"Document import failed",message:String(P),tone:"danger",duration:6e3})}},Fx=async N=>{try{const P=JSON.parse(await N.text());if(P?.schema!=="bv.regions"||![1,2].includes(P?.version)||!Array.isArray(P.regions))throw new Error("Not a BV Regions v1/v2 export");const W=P.version===1?P.regions.map(H=>({...H,usage:"generation"})):P.regions;Ne(H=>{H.regions.push(...vk(W)),Bo(H.regions)})}catch(P){Or({title:"Region import failed",message:String(P),tone:"danger",duration:6e3})}},Ux=La(l);if(!e)return null;const Pf=Rh($,{width:window.innerWidth,height:window.innerHeight}),Bf=(N,P,W=!0)=>{const H=Po(l);Zr("regional",N),N!==H&&(ke(q=>P?q.filter(de=>de!==N):[...new Set([...q,H])].filter(de=>de&&de!==N)),W&&(fe.current={mode:$.mode,geometry:Pf}),c(r.find(q=>Po(q)===N)??null))},zf=u?fk(ve,i,new Set(u.regions.map(N=>N.id))):[],Wx=u?pk(ve,i,Object.fromEntries(u.regions.map(N=>[N.id,N.name]))):"",ec=N=>u?s.jsx(X1,{mode:N,region:Ce,layer:_e,bounds:Do,canvas:u.canvas,automaticRegionColor:Ce?Sv(u.regions.indexOf(Ce)):null,globalPrompts:u.prompts.global,backgroundPrompts:u.prompts.background,negativeMode:u.negative_mode,promptSections:$.promptSections,loraBindings:ve,loraStacks:i,onGlobalLoraStack:Oa,onRegionLoraStack:Ma,onPromptSection:(P,W)=>Q(H=>({...H,promptSections:{...H.promptSections,[P]:W}})),onNegativeMode:P=>Ne(W=>{W.negative_mode=P}),onGlobalPrompts:P=>Ne(W=>{W.prompts.global=P}),onBackgroundPrompts:P=>Ne(W=>{W.prompts.background=P}),onRegion:Aa,onLayerBounds:P=>g&&Io(g,(W,H)=>{const q=new Map(qm(W,P,u.canvas).map(de=>[de.id,de]));H.geometry=H.geometry.map(de=>q.get(de.id)??de)}),onBrushSetting:(P,W)=>g&&Io(g,H=>H.forEach(q=>{q.type==="brush_stroke"&&Object.assign(q,{[P]:W})}))}):null;return s.jsxs(s.Fragment,{children:[Le.map(N=>{const P=r.find(W=>Po(W)===N);return P?s.jsx(Hs,{title:`Regional Editor · ${P.title||"BV Regional Prompt"} · #${P.id}`,onRestore:()=>Bf(N,!1,!1),onClose:()=>ke(W=>W.filter(H=>H!==N))},N):null}),s.jsx(pi,{open:e,activationToken:t,title:"BV Regional Editor",menuVisible:Ux,onMenuVisible:N=>di(l,N),context:s.jsx(Ca,{label:"Regional prompt document",value:Po(l),onNavigate:Bf,options:r.filter(N=>bn(N)).map(N=>({value:Po(N),label:`${N.title||"BV Regional Prompt"} · #${N.id}`}))}),center:s.jsx(V1,{openMenu:$.openMenu,onOpenMenu:ge,displayOpacity:C,backgroundOpacity:z,isolate:k,binaryMaskPreview:$.binaryMaskPreview,hasSelection:!!g,onDisplayOpacity:I,onBackgroundOpacity:S,onToggleIsolate:()=>j(N=>!N),onToggleBinaryMaskPreview:()=>{fr(),Q(N=>({...N,binaryMaskPreview:!N.binaryMaskPreview}))},onExportDocument:()=>u&&Ch(`${u.title||"bv-regional"}.json`,u),onExportRegions:()=>u&&Ch(`${u.title||"bv-regions"}.regions.json`,{schema:"bv.regions",version:2,canvas:u.canvas,regions:u.regions}),onImportDocument:zx,onImportRegions:Fx,onUndo:Js,onRedo:Zs,canUndo:!!A.length,canRedo:!!O.length,canMergeLayers:Fe,onMergeLayers:jf,canvas:u?.canvas??{width:1024,height:1024},onCanvas:N=>Ne(P=>{P.canvas=N})}),mode:$.mode,initialGeometry:Pf,minSize:{width:780,height:520},className:"bv-regional-shell",bodyClassName:"bv-regional-window-body",onModeChange:N=>Q(P=>({...P,mode:N})),onGeometry:N=>Q(P=>({...P,windows:{...P.windows,floating:N}})),onClose:a,status:u?s.jsxs(s.Fragment,{children:[s.jsx("span",{children:zf[0]?`⚠ ${zf[0]}`:`✓ ${Wx}`}),s.jsxs("span",{children:[u.regions.length," regions · layout adjusted for this session"]})]}):null,actions:u?s.jsx(Em,{storageId:`regional-editor:${u.document_id}`,editorType:"regional",onClick:()=>le(N=>N+1)}):null,children:K?s.jsx("div",{className:"bv-regional-error",children:K}):u&&s.jsx(s.Fragment,{children:s.jsx("main",{className:"bv-regional-dock-host",children:s.jsx(xm,{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(c0,{regions:u.regions,selectedRegionId:d,selectedLayerId:g,selectedLayerIds:w,selectedGeometryId:b,onSelectRegion:N=>{p(N),Ue(null),j(!1)},onSelectLayer:Br,onSelectGeometry:(N,P,W)=>{p(N),x(P),E([P]),_(P),h(W),j(!1)},onToggleGeometry:Rx,onDeleteGeometry:Sx,onAddRegion:()=>Ne(N=>{const P=a0(N.regions.length);N.regions.unshift(P),Bo(N.regions),p(P.id),Ue(null)}),onRenameRegion:(N,P)=>Ne(W=>{W.regions.find(H=>H.id===N).name=P}),onRenameLayer:(N,P)=>Io(N,W=>W.forEach(H=>{H.authoring={...ir(H),name:P}})),onToggleRegion:(N,P)=>Ne(W=>{const H=W.regions.find(q=>q.id===N);P==="enabled"?H.enabled=!H.enabled:P==="visible"?H.authoring.visible=!H.authoring.visible:H.authoring.locked=!H.authoring.locked}),onToggleLayer:jx,onMoveRegion:Ax,onMoveLayer:Dx,onTreeMove:Ix,onDeleteRegion:Bx,onDeleteLayer:Qs,onDuplicateLayer:Px,canSplitDisconnectedAreas:Ze,onSplitDisconnectedAreas:Lx})},{id:"canvas",title:"Canvas",weight:54,minWidth:320,content:s.jsx(B1,{document:u,background:n[u.document_id],selectedRegionId:d,selectedLayerId:g,draft:V,selectionBounds:Do,cursor:ne,tool:y,brush:L,canSubtract:!!_e&&!_e.authoring.locked,displayOpacity:C,backgroundOpacity:z,isolate:k,binaryMaskPreview:$.binaryMaskPreview,initialView:$.artboard,onView:pe,onTool:N=>{T(N),fr()},onBrush:B,onPointerDown:Cx,onPointerMove:Nx,onPointerUp:Ox,onPointerCancel:fr,onPointerLeave:()=>{se.current||Y(null)},onDoubleClick:Mx},u.document_id)},{id:"global",title:"Global",weight:12,minWidth:240,content:ec("document")},{id:"selection",title:"Selection",weight:12,minWidth:240,content:ec("selection")},{id:"region",title:"Region",weight:12,minWidth:240,content:ec("region")}]})})})}),J.dialog]})}const zo=e=>da(ct().rootGraph??ct().graph,e),Nh=e=>e?.widgets?.find(t=>t.name==="regional_json"),Ac=e=>e?.widgets?.find(t=>t.name==="lora_bindings_json"),xk=(e,t)=>t==="global"||t==="background"||e.regions.some(r=>r.id===t),yk=(e,t)=>t==="global"?e.prompts.global:t==="background"?e.prompts.background:e.regions.find(r=>r.id===t)?.prompts??e.prompts.global;function _k({open:e,activationToken:t=0,nodes:r,initialNode:o,loraStacks:n,onClose:i,onOpenEditor:a}){const[l,c]=m.useState(o),[u,f]=m.useState(null),[d,p]=m.useState(()=>Ys("")),[g,x]=m.useState("global"),[w,E]=m.useState(()=>cs({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),L=m.useRef(t);m.useEffect(()=>{const R=T.current,O=L.current!==t;if(T.current=e,L.current=t,!e||!O)return;const D=o??r[0]??null,V=zo(l),F=zo(D);R&&V&&F!==V&&ri()==="keep"?_(ne=>[...new Set([...ne,V])].filter(Y=>Y!==F)):F&&_(ne=>ne.filter(Y=>Y!==F)),y.current=R?w:null,c(D)},[t,o,r,e]),m.useEffect(()=>{if(l)try{const R=sn(Nh(l)?.value),O=Sf(Ac(l)?.value,R.document_id),D=Vn(O,new Set(R.regions.map(Y=>Y.id))),V=Ac(l);V&&JSON.stringify(O)!==JSON.stringify(D)&&(V.value=JSON.stringify(D),V.callback?.(V.value),l.graph?.setDirtyCanvas?.(!0,!0));const F=Tl(R.document_id),ne=xk(R,F.quickPromptTarget)?F.quickPromptTarget:"global";f(R),p(D),x(ne),E(y.current??F.quickPromptWindow),y.current=null,h("")}catch(R){f(null),h(R instanceof Error?R.message:String(R))}},[l,e]);const B=m.useMemo(()=>u?yk(u,g):null,[u,g]),C=R=>{if(x(R),!u)return;const O=Tl(u.document_id);qu(u.document_id,{...O,quickPromptTarget:R})},I=R=>{if(!u)return;const O=Tl(u.document_id);qu(u.document_id,{...O,quickPromptWindow:R})},z=R=>{if(!u||!l)return;const O=Xt(u);if(g==="global")O.prompts.global=R;else if(g==="background")O.prompts.background=R;else{const V=O.regions.find(F=>F.id===g);if(!V)return;V.prompts=R}f(O);const D=Nh(l);D&&(D.value=JSON.stringify(O),D.callback?.(D.value)),l.graph?.setDirtyCanvas?.(!0,!0)},S=R=>{if(!u||!l)return;let O;if(g==="global"||g==="background")O={...d,global_stack_id:R};else{const V={...d.regions};R?V[g]=R:delete V[g],O={...d,regions:V}}p(O);const D=Ac(l);D&&(D.value=JSON.stringify(O),D.callback?.(D.value)),l.graph?.setDirtyCanvas?.(!0,!0)},k=g==="global"||g==="background"?d.global_stack_id??"":d.regions[g]??"",j=(R,O,D=!0)=>{const V=zo(l);Zr("quick",R),R!==V&&(_(F=>O?F.filter(ne=>ne!==R):[...new Set([...F,V])].filter(ne=>ne&&ne!==R)),y.current=D?w:null,c(r.find(F=>zo(F)===R)??null))},A=La(l);return s.jsxs(s.Fragment,{children:[v.map(R=>{const O=r.find(D=>zo(D)===R);return O?s.jsx(Hs,{title:`Quick Edit · ${O.title||"BV Regional Prompt"} · #${O.id}`,onRestore:()=>j(R,!1,!1),onClose:()=>_(D=>D.filter(V=>V!==R))},R):null}),s.jsx(pi,{open:e,activationToken:t,title:"Regional Quick Edit",menuVisible:A,onMenuVisible:R=>di(l,R),context:s.jsx(Ca,{label:"Regional Prompt Node",value:zo(l),options:r.filter(R=>bn(R)).map(R=>({value:zo(R),label:`${R.title||"BV Regional Prompt"} · #${R.id}`})),onNavigate:j}),allowWorkspace:!1,initialGeometry:w,minSize:{width:360,height:320},className:"bv-quick-prompt-window bv-density-compact",onClose:i,onGeometry:R=>{const O=cs(R,{width:window.innerWidth,height:window.innerHeight});E(O),I(O)},status:s.jsx(gv,{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(Ir,{tone:"danger",title:"Prompt document unavailable",children:b}):u&&B&&s.jsxs(s.Fragment,{children:[s.jsx(ht,{label:"Prompt Target",value:g,onValue:C,options:[{value:"global",label:"Global"},{value:"background",label:"Background"},...u.regions.map(R=>({value:R.id,label:R.name}))]}),s.jsx(ht,{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:k,onValue:R=>S(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(wr,{label:"Positive",children:s.jsx(ss,{autoFocus:!0,value:B.positive_source,onValue:R=>z({...B,positive_source:R}),completionContext:{scope:g==="global"||g==="background"?g:"region",polarity:"positive"}})}),s.jsx(wr,{label:"Negative",children:s.jsx(ss,{value:B.negative_source,onValue:R=>z({...B,negative_source:R}),completionContext:{scope:g==="global"||g==="background"?g:"region",polarity:"negative"}})})]})]})})})]})}function Qm(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 wk(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 kk(e,t,r){const o=typeof e=="string"?e:"";return t.some(n=>n.documentId===o)?o:r?t[0]?.documentId??"":""}function Ek(e,t,r){Wm(r);const o=document.createElement("div");o.className="bv-ui bv-settings-datasets";const n=ci(o),i=Vm;return n.render(m.createElement(i,{onSelectionChange:a=>t(JSON.stringify(a))})),o}const bo=new Map;let Ei=null;function Tk(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 Oh(e){if(bo.has(e)||!Tk(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},f=()=>{if(!a)return;const h=ls(e,Ku(),c);d(h)},d=(h=ls(e,Ku(),c))=>{a||(a=document.createElement("div"),a.className="bv-ui bv-ui-portal",document.body.append(a),l=ci(a)),l.render(m.createElement(Gm,{suggestions:t,selected:r,position:h,onAccept:g,onHeight:v=>{Math.abs(v-c)<1||(c=v,f())}}))},p=()=>d(),g=(h=r)=>{const v=t[h];if(!o||!v)return;const _=$m(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(!Tf()||e.selectionStart!==e.selectionEnd||(i!=null&&window.clearTimeout(i),n?.abort(),o=Hm(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 Ym(h,[Xm],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()))},E=()=>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",E),window.addEventListener("resize",f),window.addEventListener("scroll",f,!0),bo.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",E),window.removeEventListener("resize",f),window.removeEventListener("scroll",f,!0)}})}function Mh(e){e instanceof HTMLTextAreaElement&&Oh(e),e.querySelectorAll?.("textarea").forEach(t=>Oh(t))}function Rk(e){(e instanceof HTMLTextAreaElement?[e]:[...e.querySelectorAll?.("textarea")??[]]).forEach(r=>{bo.get(r)?.destroy(),bo.delete(r)})}function Sk(){if(Ei)return Ei;Mh(document);const e=new MutationObserver(o=>o.forEach(n=>{n.addedNodes.forEach(i=>{i instanceof Element&&Mh(i)}),n.removedNodes.forEach(i=>{i instanceof Element&&Rk(i)})}));e.observe(document.body,{childList:!0,subtree:!0});const t=()=>{Tf()||bo.forEach(o=>o.close())},r=()=>bo.forEach(o=>o.close());return window.addEventListener(ba,t),window.addEventListener(va,r),Ei=()=>{e.disconnect(),window.removeEventListener(ba,t),window.removeEventListener(va,r),bo.forEach(o=>o.destroy()),bo.clear(),Ei=null},Ei}function Ah(e){return e?.extensionManager?.workflow?.activeWorkflow??e?.workflowManager?.activeWorkflow??e?.graph??null}function Lk(e,t,r,o=(i,a)=>globalThis.setInterval(i,a),n=i=>globalThis.clearInterval(i)){const i=Ah(e);let a=!1;const l=()=>{a||Ah(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"],Ck=e=>ex.map(t=>e?.find(r=>r.name===t)?.value),Nk=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,Fr=(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}),Lf=e=>e.filter(t=>t.enabled!==!1&&(t.usage==="detailer"||t.usage==="both")).sort((t,r)=>(t.priority??0)-(r.priority??0)),ed=e=>({schema:"bv.detailer_plan",version:1,jobs:Lf(e).map(t=>({region_ids:[t.id],primary_region_id:t.id,mask_composition:"union",prompt_composition:"context",conditioning:tx(),detector:rx()}))}),Rl=(e,t)=>{const r=new Set(Lf(t).map(i=>i.id));let o;try{o=String(e??"").trim()?JSON.parse(String(e)):ed(t)}catch{o=ed(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:Fr(l.global_influence,1,0,2),background_influence:Fr(l.background_influence,.35,0,2),primary_region_influence:Fr(l.primary_region_influence,1,0,2),context_region_influence:Fr(l.context_region_influence,1,0,2)},detector:{roi_padding:Fr(c.roi_padding,.15,0,2),threshold:Fr(c.threshold,.5,0,1),dilation:Math.round(Fr(c.dilation,0,-512,512)),crop_factor:Fr(c.crop_factor,1.5,1,20),drop_size:Math.round(Fr(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)}:{}}}]}):[]}},Dc=e=>JSON.stringify(e),Ok=e=>structuredClone(e);function Mk({regions:e,detectorIds:t,stored:r,save:o,close:n,nodeId:i="",nodes:a=[],onNavigate:l=()=>{},currentNode:c}){const u=Lf(e),f=m.useMemo(()=>Rl(r,e),[e,r]),d=zs(f),p=d.value,[g,x]=m.useState(()=>Dc(f));Fs(d);const w=Dc(p)!==g,[E,b]=m.useState(null),h=()=>{const k=Dc(p);o(k),x(k),d.clear()},v=k=>w?b(()=>k):k(),_=()=>v(n),y=La(c),T=m.useMemo(()=>k=>s.jsx(pi,{...k,title:`${k.title} · #${i}`,shortTitle:"Detailer Plan",menuVisible:y,onMenuVisible:j=>di(c,j),onClose:_,context:s.jsx(Ca,{label:"Detailer Plan Node",value:i,options:a.map(j=>({value:j.id,label:j.label})),onNavigate:(j,A)=>A?v(()=>l(j,!0)):l(j,!1)})}),[c,w,y,i,a,l]),[L,B]=m.useState([]),C=k=>d.commit(j=>{const A=Ok(j);return k(A),A}),I=()=>C(k=>{const j=u[0];j&&k.jobs.push({region_ids:[j.id],primary_region_id:j.id,mask_composition:"union",prompt_composition:"context",conditioning:tx(),detector:rx()})}),z=k=>[{value:"",label:"No detector · use composed region mask"},...[...new Set([...k&&!t.includes(k)?[k]:[],...t])].map(j=>({value:j,label:t.includes(j)?j:`Missing · ${j}`}))],S=p.jobs.map((k,j)=>({id:`job-${j}`,title:`Job ${j+1}`,description:k.region_ids.map(A=>u.find(R=>R.id===A)?.name??A).join(" + ")||"No region",summary:s.jsxs("div",{className:"bv-editor-item-compact-summary",children:[s.jsxs("span",{children:[k.region_ids.length," region",k.region_ids.length===1?"":"s"]}),s.jsx("span",{children:k.detector_id||"Composed mask"}),s.jsx("span",{children:k.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(o0,{label:"Regions",value:k.region_ids,minSelected:1,options:u.map(A=>({value:A.id,label:A.name})),onValue:A=>C(R=>{const O=R.jobs[j];O.region_ids=A,A.includes(O.primary_region_id)||(O.primary_region_id=A[0]??"")})}),s.jsxs(jn,{children:[s.jsx(ht,{label:"Detector assignment",value:k.detector_id??"",options:z(k.detector_id),onValue:A=>C(R=>{R.jobs[j].detector_id=A||void 0})}),k.region_ids.length>1&&s.jsx(ht,{label:"Primary region",value:k.primary_region_id,options:k.region_ids.map(A=>({value:A,label:u.find(R=>R.id===A)?.name??A})),onValue:A=>C(R=>{R.jobs[j].primary_region_id=A})})]})]}),s.jsx(Ql,{value:L,onValue:B,items:[{id:`composition-${j}`,title:"Mask and prompt composition",content:s.jsxs(jn,{children:[s.jsx(ht,{label:"Mask composition",value:k.mask_composition,options:[{value:"union",label:"Union"},{value:"intersection",label:"Intersection"},{value:"subtract",label:"Subtract in listed order"}],onValue:A=>C(R=>{R.jobs[j].mask_composition=A})}),s.jsx(ht,{label:"Prompt composition",value:k.prompt_composition,options:[{value:"context",label:"Primary and context regions"},{value:"primary",label:"Primary region only"}],onValue:A=>C(R=>{R.jobs[j].prompt_composition=A})})]})},{id:`conditioning-${j}`,title:"Conditioning strengths",content:s.jsx(jn,{minimum:150,children:[["Global influence","global_influence"],["Background influence","background_influence"],["Primary region influence","primary_region_influence"],["Context region influence","context_region_influence"]].map(([A,R])=>s.jsx(jt,{label:A,value:k.conditioning[R],min:0,max:2,step:.05,onValue:O=>C(D=>{D.jobs[j].conditioning[R]=O})},R))})},{id:`detection-${j}`,title:"Detector and ROI settings",content:s.jsxs(jn,{minimum:150,children:[s.jsx(jt,{label:"ROI padding",value:k.detector.roi_padding,min:0,max:2,step:.01,onValue:A=>C(R=>{R.jobs[j].detector.roi_padding=A})}),s.jsx(jt,{label:"Threshold",value:k.detector.threshold,min:0,max:1,step:.01,onValue:A=>C(R=>{R.jobs[j].detector.threshold=A})}),s.jsx(jt,{label:"Dilation",value:k.detector.dilation,min:-512,max:512,step:1,slider:!1,onValue:A=>C(R=>{R.jobs[j].detector.dilation=A})}),s.jsx(jt,{label:"Crop factor",value:k.detector.crop_factor,min:1,max:20,step:.1,onValue:A=>C(R=>{R.jobs[j].detector.crop_factor=A})}),s.jsx(jt,{label:"Drop size",value:k.detector.drop_size,min:1,max:8192,step:1,slider:!1,onValue:A=>C(R=>{R.jobs[j].detector.drop_size=A})}),s.jsx(ln,{label:"Detector query",value:k.detector.query??"",onValue:A=>C(R=>{R.jobs[j].detector.query=A.trim()||void 0})}),s.jsx(ln,{label:"Accepted labels",value:(k.detector.labels??[]).join(", "),onValue:A=>C(R=>{R.jobs[j].detector.labels=A.split(",").map(O=>O.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(wf,{primary:s.jsx(ie,{intent:"primary",disabled:p.jobs.some(k=>!k.region_ids.length),onClick:h,children:"Save plan"}),secondary:s.jsxs(s.Fragment,{children:[s.jsx(ie,{onClick:I,disabled:!u.length,children:"Add job"}),s.jsx(ns,{label:"Detailer Plan",value:{schema:"bv.editor-draft",version:1,type:"detailer-plan",data:p},onImport:k=>{if(k?.schema!=="bv.editor-draft"||k?.version!==1||k?.type!=="detailer-plan"||!k?.data)throw new Error("Draft type or version does not match this editor.");d.replace(Rl(k.data,e))}})]}),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:!w,onSelect:()=>d.replace(Rl(g,e),!0)},{id:"restore",label:"Restore defaults",onSelect:()=>d.commit(ed(e))}]}),children:s.jsxs(of,{density:"compact",className:"bv-editor-dialog",children:[!t.length&&p.jobs.length>0&&s.jsx(Ir,{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(Ps,{items:S,onReorder:k=>C(j=>{j.jobs=k.map(A=>j.jobs[Number(A.id.slice(4))])}),onRemove:k=>C(j=>{j.jobs.splice(Number(k.slice(4)),1)})}):s.jsx(Bs,{title:"No eligible regions",description:"Enable a region with Detailer or Both usage first."})]})}),s.jsx(af,{open:!!E,editorName:"Detailer Plan",onKeep:()=>b(null),onDiscard:()=>{const k=E;b(null),k?.()},onSave:()=>{h();const k=E;b(null),k?.()}})]})}const Ak=(e,t,r,o,n,i,a,l)=>{pf((c,u)=>m.createElement(Mk,{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})},ds=()=>({schema:"bv.detector_registry_config",version:1,detectors:[]}),$i=e=>{try{const t=String(e??"").trim()?JSON.parse(String(e)):ds();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 ds()}},Ic=e=>JSON.stringify(e);function Dk({catalog:e,stored:t,save:r,close:o,nodeId:n="",nodes:i=[],onNavigate:a=()=>{},currentNode:l}){const c=m.useMemo(()=>$i(t),[t]),u=m.useMemo(()=>new Set(c.detectors.map(R=>R.id)),[c]),f=zs(c),d=f.value,[p,g]=m.useState(()=>Ic(c));Fs(f);const x=Ic(d)!==p,w=lf(),[E,b]=m.useState(null),h=()=>{const R=Ic(d);r(R),g(R),f.clear()},v=R=>x?b(()=>R):R(),_=()=>v(o),y=La(l),T=m.useMemo(()=>R=>s.jsx(pi,{...R,title:`${R.title} · #${n}`,shortTitle:"Registry",menuVisible:y,onMenuVisible:O=>di(l,O),onClose:_,context:s.jsx(Ca,{label:"Detector Registry Node",value:n,options:i.map(O=>({value:O.id,label:O.label})),onNavigate:(O,D)=>D?v(()=>a(O,!0)):a(O,!1)})}),[l,x,y,n,i,a]),[L,B]=m.useState([]),C=R=>f.commit(O=>{const D=structuredClone(O);return R(D),D}),I=()=>{let R=d.detectors.length+1,O=`detector-${R}`;for(;d.detectors.some(D=>D.id===O);)O=`detector-${++R}`;return O},z=d.detectors.map(R=>R.id.trim()),S=z.find((R,O)=>R&&z.indexOf(R)!==O),k=d.detectors.some(R=>!R.id.trim()||!R.model_name),j=()=>C(R=>{const O=e.ultralytics.length?"ultralytics":"onnx";R.detectors.push({id:I(),provider:O,model_name:e[O][0]??""})}),A=()=>{d.detectors.length?w.confirm({title:"Clear Detector Registry?",message:"Existing Detailer jobs will keep missing references until reassigned.",confirmLabel:"Clear registry",danger:!0,action:()=>f.commit(ds())}):f.commit(ds())};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(wf,{primary:s.jsx(ie,{intent:"primary",disabled:!!(S||k),onClick:h,children:"Save registry"}),secondary:s.jsxs(s.Fragment,{children:[s.jsx(ie,{onClick:j,children:"Add detector"}),s.jsx(ns,{label:"Detector Registry",value:{schema:"bv.editor-draft",version:1,type:"detector-registry",data:d},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.");f.replace($i(R.data))}})]}),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:!x,onSelect:()=>f.replace($i(p),!0)},{id:"clear",label:"Clear registry…",onSelect:A}]}),children:s.jsxs(of,{density:"compact",className:"bv-editor-dialog",children:[S||k?s.jsx(Ir,{tone:"danger",title:"Registry needs attention",children:S?`Detector ID “${S}” is used more than once.`:"Every detector needs a unique ID and a detection model."}):s.jsxs(Ir,{tone:"success",title:"Registry valid",children:[d.detectors.length," detector",d.detectors.length===1?"":"s"," ready to save."]}),s.jsxs("div",{className:"bv-card-list",children:[!d.detectors.length&&s.jsx(Bs,{title:"No detectors configured",description:"Add a detector to make it selectable in Regional Detailer jobs."}),s.jsx(Ql,{value:L,onValue:B,items:d.detectors.map((R,O)=>({id:`detector-${O}`,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:()=>C(D=>{D.detectors.splice(O+1,0,{...D.detectors[O],id:I()})}),children:"Duplicate"}),s.jsx(ie,{intent:"ghost",className:"bv-subtle-danger",onClick:()=>{const D=()=>C(V=>{V.detectors.splice(O,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(jn,{children:[s.jsx(ln,{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=>C(V=>{V.detectors[O].id=D.trim()})}),s.jsx(ht,{label:"Provider",value:R.provider,options:[{value:"ultralytics",label:"Ultralytics"},{value:"onnx",label:"ONNX"}],onValue:D=>C(V=>{const F=V.detectors[O];F.provider=D,F.model_name=e[F.provider][0]??""})}),s.jsx(ht,{label:"Detection model",value:R.model_name,options:e[R.provider].map(D=>({value:D,label:D})),onValue:D=>C(V=>{V.detectors[O].model_name=D})})]}),s.jsx(Ql,{value:L,onValue:B,items:[{id:`sam-${O}`,title:R.sam_model_name?"SAM refinement enabled":"Optional SAM refinement",content:s.jsxs(jn,{children:[s.jsx(ht,{label:"SAM model",value:R.sam_model_name??"",options:[{value:"",label:"No SAM refinement"},...e.sam.map(D=>({value:D,label:D}))],onValue:D=>C(V=>{const F=V.detectors[O];F.sam_model_name=D||void 0,D||delete F.sam_device_mode})}),R.sam_model_name&&s.jsx(ht,{label:"Execution device",value:R.sam_device_mode??"AUTO",options:["AUTO","Prefer GPU","CPU"].map(D=>({value:D,label:D})),onValue:D=>C(V=>{V.detectors[O].sam_device_mode=D})})]})}]})]})}))})]})]})}),w.dialog,s.jsx(af,{open:!!E,editorName:"Detector Registry",onKeep:()=>b(null),onDiscard:()=>{const R=E;b(null),R?.()},onSave:()=>{h();const R=E;b(null),R?.()}})]})}const Ik=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();pf((u,f)=>m.createElement(Dk,{catalog:c,stored:t,save:r,close:u,activationToken:f,nodeId:o.split(":").slice(1).join(":"),nodes:n,onNavigate:i,currentNode:a}),{key:o})},jk=10,Pk=(e,t=jk)=>{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)},Bk=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"]),zk={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"},Fk={"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"}},jc=(e,t)=>Fk[e]?.[t]??zk[t]??t.split("_").join(" ");function Uk({label:e,configured:t,close:r,onSave:o,onDelete:n}){const[i,a]=m.useState(""),[l,c]=m.useState(""),[u,f]=m.useState(!1),d=async p=>{f(!0),c("");try{const g=await p();g?c(g):r()}finally{f(!1)}};return s.jsxs(Ta,{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:()=>d(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:()=>d(()=>o(i)),children:"Save key"})]}),children:[s.jsx(Ir,{tone:t?"info":"warning",children:t?"A key is configured. Enter a new key to replace it.":"No key is configured."}),s.jsx(n0,{label:"API key",value:i,onValue:a}),l&&s.jsx(Ir,{tone:"danger",children:l})]})}let Pc=null;const td=(e,t=!1)=>((t||!Pc)&&(Pc=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:[]})),Pc),Hr=(e,t)=>e.widgets?.find(r=>r.name===t),fs=(e,t,r)=>{const o=t.find(l=>l.label===String(Hr(e,"provider_profile")?.value??""));if(!o)return;const n=Hr(e,"custom_endpoint"),i=Hr(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(f=>f.label===String(Hr(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=Hr(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)},Wk=(e,t,r)=>{const o=r.find(n=>n.label===String(Hr(t,"provider_profile")?.value??""))??r[0];o&&o.auth_mode!=="none"&&pf(n=>m.createElement(Uk,{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,fs(t,r),td(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,fs(t,r),td(e,!0)}}))},Dh=(e,t)=>{td(t).then(r=>{let o=String(Hr(e,"provider_profile")?.value??"");const n=Hr(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 fs(e,r,o),o=l,c}}let i=Hr(e,"configure_api_key");i||(i=e.addWidget("button","configure_api_key",null,()=>Wk(t,e,r),{serialize:!1}),i.serialize=!1),fs(e,r)}).catch(r=>console.error("BV Remote LLM settings unavailable",r))};function Vk({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(df,{label:"Hidden link debug",value:n,trueLabel:"Visible",falseLabel:"Hidden",onValue:l}),s.jsx(ff,{collectors:e,collectorId:t,resourceId:r,resolved:o,onCollector:i,onResource:a})]})}function Hk({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(df,{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(ff,{collectors:e,collectorId:l.collector_id,resourceId:l.resource_id,resolved:l.resolved,onCollector:u=>{const f=e.find(d=>d.id===u)?.resources[0];o(c,u,f?.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 jr="BV_RUNTIME_RESOURCE_PROVIDER_M0",ni="resource_provider",Xs=20;function ps(e){return e?.findIndex(t=>t?.name===ni||t?.type===jr)??-1}function Cf(e){let t=ps(e.outputs);t<0&&e.addOutput&&(e.addOutput(ni,jr),t=ps(e.outputs));const r=e.outputs?.[t];return r&&(r.name=ni,r.type=jr),t}function ox(e){let t=ps(e.inputs);t<0&&e.addInput&&(e.addInput(ni,jr),t=ps(e.inputs));const r=e.inputs?.[t];return r&&(r.name=ni,r.type=jr),t}function $k(e){return`${ni}_${e}`}function Gs(e,t=Xs){const r=[];for(let o=1;o<=t;o++){const n=$k(o);let i=e.inputs?.findIndex(l=>l?.name===n)??-1;i<0&&e.addInput&&(e.addInput(n,jr),i=e.inputs?.findIndex(l=>l?.name===n)??-1);const a=e.inputs?.[i];a&&(a.name=n,a.type=jr,a.__bvM0ProviderOrdinal=o),r.push(i)}return r}const Yk="BV_RUNTIME_RESOURCE_PROVIDER_M0",rd="BV_RUNTIME_RESOURCE_PROVIDER",od=e=>e===Yk||e===rd;function Nf(e){return(e?._nodes??[]).some(t=>t.__bvM0ResourceConsumer===!0&&!!t.properties?.bvM0DebugVisible)}function Xk(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===rd||o?.inputs?.[t.target_slot]?.type===rd?!0:nx(e,t)?!Nf(e.graph):!!(r?.outputs?.[t.origin_slot]?.__bvM0VisualHidden||o?.inputs?.[t.target_slot]?.__bvM0VisualHidden)}function nx(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||od(n?.type))&&(i?.__bvM0ResourceSlot||od(i?.type)))}function ix(e){if(!e||e.__bvM0DebugAnimation)return;e.__bvM0DebugAnimation=!0;const t=()=>{const r=Nf(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 ax(e){if(typeof document>"u")return;const t=Nf(e);document.documentElement.classList.toggle("bv-m0-debug-active",t)}function Of(e){if(!e||e.__bvM0VisibilityInstalled)return;e.__bvM0VisibilityInstalled=!0;const t=e.drawNode,r=e.renderLink;e.renderLink=function(...o){if(Xk(this,o[3]))return;if(!nx(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(od(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 Mf(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((d,p)=>({slot:d,index:p})).filter(({slot:d})=>d.__bvM0ResourceSlot)??[],f=u.length>1?u[0].index:void 0;c.forEach((d,p)=>d.classList.toggle("bv-m0-port-hidden",!!e.inputs?.[p]?.__bvM0PortHidden||f!=null&&p!==f)),l.classList.toggle("bv-m0-fan-in",f!=null),o++<4&&setTimeout(i,75*o)};i()}const Gk=(e,t)=>t==null?null:e?._links?.get?.(t)??e?.links?.get?.(t)??e?.links?.[t]??null,Kk=e=>[...e?._links?.values?.()??[],...e?.links?.values?.()??Object.values(e?.links??{})],Ih=(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===jr||o?.type===jr)?r:null};function qk(e,t,r){const o=e.inputs?.find(a=>a.name===t),n=Gk(e.graph,o?.link),i=Ih(e,n);if(i&&(!r||r(i)))return i;if(!r)return null;for(const a of Kk(e.graph)){const l=Ih(e,a);if(l&&r(l))return l}return null}const Jk="BV M0 Fake Resource Collector",Zk="BV M0 Fake Resource Consumer",lx="BV M0 Fake Multi Resource Consumer",sx=jr,Qk="a1bdeceb-76ae-4e45-ae36-e5c2664819ce",eE="d97a4268-c02c-42a3-8793-8e578e12e12c",De=(e,t)=>e?.widgets?.find(r=>r.name===t),Bc=e=>{e&&(e.type="converted-widget",e.hidden=!0,e.computeSize=()=>[0,-4],e.serializeValue=()=>e.value)},zc=(e,t)=>(e&&!String(e.value??"").trim()&&(e.value=t??crypto.randomUUID()),String(e?.value??"")),Fc=()=>{let e=0;const t=()=>{const r=ct().canvas;r?Of(r):e++<40&&setTimeout(t,50)};t()};function tE(e){const t=De(e,"collector_id"),r=De(e,"resource_a_id"),o=De(e,"resource_b_id");if(!t||!r||!o||!e.graph||!(e.graph._nodes??[]).find(a=>a!==e&&a.__bvM0ResourceProvider===!0&&String(De(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 Ks(e,t,r=""){return qk(e,t,r?o=>String(De(o,"collector_id")?.value??"")===r:void 0)}function un(e){return Ks(e,"resource_provider",String(De(e,"collector_id")?.value??""))}function Na(e,t){const r=dn(e)[t];return Ks(e,`resource_provider_${t+1}`,r?.collector_id??"")}function jh(e){const t=un(e),r=t?.__bvM0IdRemap;if(!r)return;const o=De(e,"collector_id"),n=De(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 ma(e){return(e.graph?._nodes??[]).filter(t=>t.__bvM0ResourceProvider===!0&&t.graph===e.graph).map(t=>({id:String(De(t,"collector_id")?.value??""),label:String(t.title||`Collector #${t.id}`),resources:[{id:String(De(t,"resource_a_id")?.value??""),label:"Alpha"},{id:String(De(t,"resource_b_id")?.value??""),label:"Beta"}],node:t})).filter((t,r,o)=>t.id&&o.findIndex(n=>n.id===t.id)===r)}function vo(e){if(!e?.__bvM0ResourceProvider)return;const t=e.graph?._nodes??[],r=e.outputs?.find(n=>n.type===sx),o=t.some(n=>!!n.properties?.bvM0DebugVisible&&(un(n)===e||n.inputs?.some((i,a)=>Na(n,a)===e)));r&&(r.hidden=!0,r.__bvM0VisualHidden=!o,r.__bvM0PortHidden=!0,r.__bvM0ResourceSlot=!0),Mf(e,"collector",o)}function dn(e){const t=De(e,"resource_bindings");if(!t)return[];try{const r=JSON.parse(String(t.value??"[]"));return Array.isArray(r)?r.slice(0,Xs).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 Hn(e,t){const r=De(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 rE(e){const t=dn(e),r=new Set(t.map(n=>n.binding_id));if((e.graph?._nodes??[]).some(n=>n!==e&&n.type===lx&&dn(n).some(i=>r.has(i.binding_id)))){for(const n of t)n.binding_id=crypto.randomUUID();Hn(e,t)}}function rl(e){const t=dn(e);let r=!1;t.forEach((o,n)=>{const i=Na(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&&Hn(e,t)}function cx(e,t){return["resource_a_id","resource_b_id"].some(r=>String(De(e,r)?.value??"")===t)}function Ph(e){const t=De(e,"collector_id"),r=De(e,"resource_id");if(!t||!r)return;const o=Ks(e,"resource_provider",String(t.value??""));if(!!o&&String(t.value??"")===String(De(o,"collector_id")?.value??"")&&cx(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 Uc(e){const t=dn(e),r=Gs(e);let o=!1;t.forEach((n,i)=>{const a=Ks(e,`resource_provider_${i+1}`,n.collector_id);if(!!a&&cx(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&&Hn(e,t)}function hs(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="";Mf(e,"consumer",t);for(let n=0;n=0&&e.inputs?.[n]?.link!=null&&e.disconnectInput?.(n);const a=ma(e).find(c=>c.id===r)?.node,l=a?Cf(a):-1;a&&n>=0&&l>=0&&a.connect(l,e,n),hs(e,!!e.properties?.bvM0DebugVisible),vo(i)}function xa(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===sx).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 ux(e,t){[0,50,150,300].forEach(r=>setTimeout(()=>xa(e,t),r))}function ol(e){if(!De(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+dn(e).length*124),onDraw:()=>xa(e,r),afterResize:()=>xa(e,r)});n&&(n.serialize=!1)}e.__bvM0PickerRoot??(e.__bvM0PickerRoot=Yn.createRoot(r));const o=()=>{const n=ma(e),i=dn(e).map((a,l)=>{const c=Na(e,l);return{...a,resolved:!!c&&String(De(c,"collector_id")?.value??"")===a.collector_id}});e.__bvM0PickerRoot.render(s.jsx(Hk,{collectors:n,bindings:i,debugVisible:!!e.properties?.bvM0DebugVisible,onDebug:a=>{hs(e,a),o()},onBinding:(a,l,c)=>{i[a]={...i[a],collector_id:l,resource_id:c},Hn(e,i),Bh(e,a,l),o()},onAdd:()=>{i.length>=Xs||(i.push({binding_id:crypto.randomUUID(),collector_id:"",resource_id:"",resolved:!1}),Hn(e,i),o())},onRemove:a=>{const l=Gs(e),c=l[a];c>=0&&e.inputs?.[c]?.link!=null&&e.disconnectInput?.(c),i.splice(a,1),Hn(e,i);for(let f=a;f=0&&e.inputs?.[u]?.link!=null&&e.disconnectInput?.(u),o()}}))};o(),hs(e,!!e.properties?.bvM0DebugVisible,!1),ux(e,r)}function Wc(e,t){if(e.__bvM0DomRefresh)return;const r=()=>{setTimeout(t,0),setTimeout(t,100)};e.__bvM0DomRefresh=r,Xr().addEventListener("executed",r),Xr().addEventListener("graphChanged",r);const o=e.onRemoved;e.onRemoved=function(){return Xr().removeEventListener("executed",r),Xr().removeEventListener("graphChanged",r),o?.apply(this,arguments)}}function nd(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=""),Mf(e,"consumer",t),vo(un(e)),ax(e.graph),t&&ix(e.graph?.list_of_graphcanvas?.[0]??ct().canvas),r&&e.setDirtyCanvas?.(!0,!0)}function oE(e,t){const r=un(e),o=ox(e);o>=0&&e.inputs?.[o]?.link!=null&&e.disconnectInput?.(o);const n=ma(e).find(a=>a.id===t)?.node,i=n?Cf(n):-1;n&&o>=0&&i>=0&&n.connect(i,e,o),nd(e,!!e.properties?.bvM0DebugVisible),vo(r)}function nl(e){const t=De(e,"collector_id"),r=De(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:()=>xa(e,o),afterResize:()=>xa(e,o)});i&&(i.serialize=!1)}e.__bvM0PickerRoot??(e.__bvM0PickerRoot=Yn.createRoot(o));const n=()=>{const i=un(e),a=String(De(i,"collector_id")?.value??"");e.__bvM0PickerRoot.render(s.jsx(Vk,{collectors:ma(e),collectorId:String(t.value??""),resourceId:String(r.value??""),resolved:!!i&&a===String(t.value??""),debugVisible:!!e.properties?.bvM0DebugVisible,onDebug:l=>{nd(e,l),n()},onCollector:l=>{t.value=l;const c=ma(e).find(u=>u.id===l)?.resources[0];r.value=c?.id??"",oE(e,l),n()},onResource:l=>{r.value=l,n()}}))};n(),nd(e,!!e.properties?.bvM0DebugVisible,!1),ux(e,o)}function nE(e,t){if(t.name===Jk){const r=e.prototype.onNodeCreated,o=e.prototype.onConfigure,n=function(){Fc(),this.__bvM0ResourceProvider=!0,Cf(this),zc(De(this,"collector_id")),zc(De(this,"resource_a_id"),Qk),zc(De(this,"resource_b_id"),eE),tE(this),["collector_id","resource_a_id","resource_b_id"].forEach(i=>Bc(De(this,i))),Wc(this,()=>vo(this)),vo(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===Zk){const r=e.prototype.onNodeCreated,o=e.prototype.onConfigure,n=e.prototype.onConnectionsChange,i=function(){Fc(),this.__bvM0ResourceConsumer=!0,ox(this),jh(this),Ph(this),["collector_id","resource_id"].forEach(a=>Bc(De(this,a))),Wc(this,()=>nl(this)),nl(this),setTimeout(()=>nl(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=un(this),l=n?.apply(this,arguments);return queueMicrotask(()=>{jh(this),Ph(this),nl(this),vo(a),vo(un(this))}),l},!0}if(t.name===lx){const r=e.prototype.onNodeCreated,o=e.prototype.onConfigure,n=e.prototype.onConnectionsChange,i=function(){Fc(),this.__bvM0ResourceConsumer=!0,Gs(this),rE(this),rl(this),Uc(this),Bc(De(this,"resource_bindings")),Wc(this,()=>{rl(this),ol(this)}),ol(this),[0,50,150].forEach(a=>setTimeout(()=>{rl(this),Uc(this),ol(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(()=>{rl(this),Uc(this),hs(this,!!this.properties?.bvM0DebugVisible,!1),ol(this)}),a},!0}return!1}function iE({collectors:e,config:t,resolved:r,onCollector:o,onResource:n,onAddExternal:i}){const a=t.entries.filter(l=>l.source.kind==="external");return s.jsxs("div",{className:"bv-lora-v3-picker-panel",children:[a.map((l,c)=>s.jsxs("section",{children:[s.jsxs("strong",{children:["External LoRA Stack ",c+1]}),s.jsx(ff,{collectors:e,collectorId:t.collector_id??"",resourceId:l.source.resource_id,resolved:r,onCollector:o,onResource:u=>n(l.id,u)})]},l.id)),!a.length&&s.jsx("p",{className:"bv-field-help",children:"No external live stack is configured."}),s.jsx(ie,{intent:"secondary",disabled:!e.some(l=>l.resources.length>0),onClick:i,children:"Add external stack"})]})}function aE(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 Vc=e=>JSON.stringify(e),fn="BV_RUNTIME_RESOURCE_PROVIDER",ii="resource_provider",dx="BV LoRA Stack Collector",Af=(e,t)=>t==null?null:e?._links?.get?.(t)??e?.links?.get?.(t)??e?.links?.[t]??null,gs=e=>e?.findIndex(t=>t?.name===ii||t?.type===fn)??-1;function fx(e){let t=gs(e.outputs);t<0&&e.addOutput&&(e.addOutput(ii,fn),t=gs(e.outputs));const r=e.outputs?.[t];return r&&(r.name=ii,r.type=fn,r.hidden=!0,r.__bvResourceSlot=!0),t}function px(e){let t=gs(e.inputs);t<0&&e.addInput&&(e.addInput(ii,fn),t=gs(e.inputs));const r=e.inputs?.[t];return r&&(r.name=ii,r.type=fn,r.hidden=!0,r.__bvResourceSlot=!0),t}function bs(e){const t=e.inputs?.find(i=>i.name===ii||i.type===fn),r=Af(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===dx||n?.type===fn)?o:null}function hx(e,t){const r=px(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=fx(t);return o<0?!1:(t.connect?.(o,e,r),bs(e)===t)}function lE(e){return(e.graph?._nodes??[]).filter(t=>t!==e&&t.graph===e.graph&&t.type===dx)}const sE=new Set(["BV Regional Native Conditioning","BV Regional Krea 2 Attention","BV Regional Anima Conditioning"]);function cE(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=Af(t,l),u=c&&t?.getNodeById?.(c.target_id);!u||u.graph!==t||o.has(u)||(o.add(u),sE.has(u.type)&&n.push(u),(u.outputs??[]).some(f=>f.type==="BV_REGIONAL")&&r.push(u))}}return n}function Hc(e,t){return[e,...cE(e)].map(o=>hx(o,t)).every(Boolean)}function uE(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=Af(t,i.link),l=a&&t?.getNodeById?.(a.origin_id);if(!(!l||l.graph!==t||o.has(l))){if(l.type==="BV Regional LoRA")return l;o.add(l),r.push(l)}}}return null}const pn=(e,t)=>e.widgets?.find(r=>r.name===t),dE=(e,t)=>t==null?null:e?._links?.get?.(t)??e?.links?.get?.(t)??e?.links?.[t]??null,fE=e=>{e&&(e.type="hidden",e.computeSize=()=>[0,-4],e.serializeValue=e.serializeValue??function(){return this.value})},pE=e=>{e&&!String(e.value??"").trim()&&(e.value=crypto.randomUUID())},gx=()=>{let e=0;const t=()=>{const r=ct().canvas;r?Of(r):e++<40&&setTimeout(t,50)};t()};function bx(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=dE(n.graph,i.link),l=a&&n.graph?.getNodeById?.(a.origin_id);if(!(!l||l.graph!==n.graph)){if(l.type==="BV Named LoRA Stack"){const c=String(pn(l,"stack_id")?.value??"").trim(),u=String(pn(l,"name")?.value??"").trim();c&&u&&t.push({id:c,label:u,node:l})}o.push(l)}}}}return t.reverse()}function hE(e){return lE(e).map(t=>({id:String(pn(t,"collector_id")?.value??"").trim(),label:String(t.title||"BV LoRA Stack Collector"),resources:bx(t),node:t})).filter(t=>t.id)}function gE(e){gx();const t=pn(e,"collector_id");pE(t);const r=String(t?.value??"").trim(),o=(e.graph?._nodes??[]).find(n=>n!==e&&n.type==="BV LoRA Stack Collector"&&String(pn(n,"collector_id")?.value??"").trim()===r);if(t&&r&&o){const n=crypto.randomUUID();t.value=n,e.__bvLoraCollectorIdRemap={[r]:n}}fE(t),fx(e),e.__bvRuntimeResourceProvider=!0}function vx(e){gx();const t=px(e),r=e.inputs?.[t];if(r&&(r.hidden=!0,r.__bvM0VisualHidden=!0,r.__bvM0PortHidden=!0,r.__bvM0ResourceSlot=!0),!bs(e)){const o=uE(e),n=o&&bs(o);n&&hx(e,n)}}function mx(e){vx(e);const t=pn(e,"config_json");if(!t)return;let r;try{r=aE(t.value)}catch{return}const o=hE(e),n=bs(e),i=n?.__bvLoraCollectorIdRemap?.[String(r.collector_id??"")],a=Object.assign({},...bx(n).map(d=>d.node?.__bvLoraResourceIdRemap??{}));i&&(r={...r,collector_id:i,entries:r.entries.map(d=>d.source.kind==="external"&&a[d.source.resource_id]?{...d,source:{...d.source,resource_id:a[d.source.resource_id]}}:d)},t.value=Vc(r));const l=!!n&&String(pn(n,"collector_id")?.value??"")===String(r.collector_id??"");r.collector_id&&!l&&(r={...r,collector_id:null,entries:r.entries.map(d=>d.source.kind==="external"?{...d,source:{...d.source,resource_id:""}}:d)},t.value=Vc(r),Hc(e,null));let c=e.__bvLoraPickerHost;if(!c){c=document.createElement("div"),c.className="bv-ui bv-lora-v3-picker-host",e.__bvLoraPickerHost=c;const d=e.addDOMWidget?.("bv_lora_resource_picker","div",c,{serialize:!1,getMinHeight:()=>Math.max(140,90+r.entries.length*90)});d&&(d.serialize=!1),e.__bvLoraPickerRoot=Yn.createRoot(c)}const u=d=>{t.value=Vc(d),e.setDirtyCanvas?.(!0,!0),queueMicrotask(()=>mx(e))},f=o.filter(d=>d.resources.length>0);e.__bvLoraPickerRoot.render(s.jsx(iE,{collectors:f,config:r,resolved:l,onCollector:d=>{const p=o.find(w=>w.id===d),g=p?.resources[0]?.id??"",x={...r,collector_id:d||null,entries:r.entries.map(w=>w.source.kind==="external"?{...w,source:{...w.source,resource_id:g}}:w)};Hc(e,p?.node??null),u(x)},onResource:(d,p)=>u({...r,entries:r.entries.map(g=>g.id===d&&g.source.kind==="external"?{...g,source:{...g.source,resource_id:p}}:g)}),onAddExternal:()=>{const d=f.find(g=>g.id===r.collector_id)??f[0],p=d?.resources[0];!d||!p||(Hc(e,d.node),u({...r,collector_id:d.id,entries:[...r.entries,{id:crypto.randomUUID(),source:{kind:"external",resource_id:p.id},targets:[{scope:"global"}]}]}))}}))}function bE(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&&gE(this),o&&mx(this),n&&vx(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 Df="BV Control Center",vs=0,vE=2,mE=4,Mi="bvControlBaseMode",xE="bv-open-control-rack",xx=320,yE=48,zh="bv_control_conflict_status",$c=new Set;function _E(e){return e==="activate"?{mode:vs,priority:3}:e==="mute"?{mode:vE,priority:2}:{mode:mE,priority:1}}function Fh(e){const t=new Set(Zl(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 wE(e){return Tw(e,t=>fv(t,Df))}function kE(e){for(const o of $c){const n=o.properties?.[Mi];o.mode=e.forceActive?vs:typeof n=="number"?n:o.mode,o.properties&&delete o.properties[Mi],o.setDirtyCanvas?.(!0,!0)}$c.clear();const t=new Map(Zl(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 wE(i)){const l=_E(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[Mi]!="number"&&(o.properties[Mi]=typeof o.mode=="number"?o.mode:vs),o.mode=n.mode,$c.add(o),o.setDirtyCanvas?.(!0,!0)}function EE(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 TE(e,t){const r=pv(t),o=Rw(r);let n=e.widgets?.find(i=>i.name===zh);n||(n=e.addCustomWidget({name:zh,type:"custom",value:o,y:0,options:{},serialize:!1,computeSize:()=>[0,24],computeLayoutSize:()=>({minHeight:24,maxHeight:24,minWidth:xx}),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 yx(e,t){e.mode=vs,e.properties&&delete e.properties[Mi];let r=e.widgets?.find(c=>c.name==="configure_control_center");r||(r=e.addWidget("button","configure_control_center",null,()=>window.dispatchEvent(new Event(xE)),{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)&&EE(e,c)}for(const c of t.controls){const u=`bvcc_${c.id}`,f=g=>{const x=an(),w={...x,controls:x.controls.map(E=>E.id===c.id?{...E,enabled:!!g}:E)};rf(w)};let d=e.inputs.find(g=>g.name===u);d||(d=e.addInput(u,"BOOLEAN",{label:c.name,nameLocked:!0,widget:{name:u}})),d.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,f,{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=f,d.widget={name:u}}TE(e,t);const n=e.widgets?.find(c=>c.name==="bv_control_config_json");n&&(n.value=JSON.stringify(Fh(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(Fh(an()))),e.serialize_widgets=!0;const i=e.size??[0,0],a=e.computeSize?.()??i,l=Math.max(xx,(a[0]??0)+yE);e.setSize?.([Math.max(i[0]??0,l),a[1]??i[1]??0]),e.setDirtyCanvas?.(!0,!0)}function _x(e=an()){for(const{node:t}of kw(ct(),Df))yx(t,e);kE(e)}window.addEventListener(ei,e=>_x(e.detail));ct().registerExtension({name:"bv_nodepack.control_center",async beforeRegisterNodeDef(e,t){if(t.name!==Df)return;const r=e.prototype.onNodeCreated;e.prototype.onNodeCreated=function(){const o=r?.apply(this,arguments);return yx(this,an()),o}},afterConfigureGraph(){_x()}});const nt=ct(),mr=Xr();F1(e=>nt.ui?.settings?.setSettingValue?.(Lm,e));U1(e=>nt.ui?.settings?.setSettingValue?.(Cm,e));z1(e=>nt.ui?.settings?.setSettingValue?.(Nm,e));v0(e=>nt.ui?.settings?.setSettingValue?.(gf,e));const id="bv-open-control-rack",$n="bv-open-regional-editor",Yi="bv-open-regional-quick-edit",mo="bv-regional-document-changed",Uh="bv-nodepack-styles",wx="BV.DebugBridge.Enabled";let Zo=!1,il=null;const RE=()=>{const e=nt.extensionManager?.workflow?.activeWorkflow??nt.workflowManager?.activeWorkflow;return String(e?.filename??e?.path??"Current workflow")},kx=async e=>{Zo=!!e;const t=await fetch(mr.apiURL("/bv_nodepack/debug/session"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({enabled:Zo})});if(!t.ok)throw new Error(`BV Debug Bridge session failed: ${t.status} ${await t.text()}`)},Ex=async()=>{if(!Zo)return!1;const e=await nt.graphToPrompt(),t=await fetch(mr.apiURL("/bv_nodepack/debug/snapshot"),{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({prompt:e.output,workflow_name:RE()})});if(!t.ok)throw new Error(`BV Debug Bridge snapshot failed: ${t.status} ${await t.text()}`);return!0},ms=()=>{Zo&&(il!=null&&window.clearTimeout(il),il=window.setTimeout(()=>{il=null,Ex().catch(e=>console.error(e))},600))},Mr=e=>{e.type="converted-widget",e.hidden=!0,e.computeSize=()=>[0,-4],e.element&&(e.element.style.display="none")},SE=(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)},LE=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=[]},qs=e=>{const t=e.inputs?.find(a=>a.name==="regional"||a.name==="regional_prompt"),r=e.graph??nt.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 sn(i)}catch{return null}},CE=e=>{const t=e.graph??nt.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=$i(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,f=String(u?.widgets?.find(d=>d.name==="detector_id")?.value??"").trim();f&&a.push(f)}return[...new Set(a)].sort((l,c)=>l.localeCompare(c))},Yc=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(Pk(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)},Wh=(e,t)=>{for(const r of e.inputs??[])r.label=jc(t,String(r.name));for(const r of e.outputs??[])r.label=jc(t,String(r.name));for(const r of e.widgets??[])String(r.name).startsWith("configure_")||(r.label=jc(t,String(r.name)));e.setDirtyCanvas?.(!0,!0)},ad=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;Mr(t);const o=qs(e),n=o?Rl(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)},Vh=e=>{const t=e.widgets?.find(o=>o.name==="config_json");if(!t)return;Mr(t);let r=e.widgets?.find(o=>o.name==="configure_detailer_plan");r||(r=e.addWidget("button","configure_detailer_plan",null,()=>{const o=qs(e);o&&(Zr("detailer",Pe(e)),Ak(o.regions,CE(e),t.value,n=>{t.value=n,ad(e),e.graph?.setDirtyCanvas?.(!0,!0)},`detailer-plan:${Pe(e)}`,zt("BV Regional Detailer Plan").filter(bn).map(n=>({id:Pe(n),label:`${n.title||"BV Regional Detailer Plan"} · #${n.id}`})),(n,i)=>{const a=zt("BV Regional Detailer Plan").find(c=>Pe(c)===n),l=a?.widgets?.find(c=>c.name==="configure_detailer_plan");l&&hf(`detailer-plan:${Pe(e)}`,`detailer-plan:${Pe(a)}`,()=>l.callback?.(),i)},e))},{serialize:!1}),r.serialize=!1),ad(e)},Hh=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[]}},If=e=>{if(e.comfyClass!=="BV Regional Detailer Mask"&&e.type!=="BV Regional Detailer Mask")return;const t=e.widgets?.find(f=>f.name==="context_regions_json");if(!t)return;Mr(t);const r=qs(e);if(!r)return;for(const f of e.__bvDetailerContextWidgets??[]){const d=e.widgets?.indexOf(f)??-1;d>=0&&e.widgets.splice(d,1),f.onRemove?.()}const o=String(e.widgets?.find(f=>f.name==="region")?.value??""),n=(r?.regions??[]).filter(f=>f.enabled!==!1&&f.id!==o),i=new Set,a=Hh(t.value).filter(f=>f.region_id!==o&&!i.has(f.region_id)&&!!i.add(f.region_id));t.value=JSON.stringify(a);const l=[],c=f=>{t.value=JSON.stringify(f),queueMicrotask(()=>If(e))};for(let f=0;f<=a.length;f++){const d=a[f],p=new Set(a.filter((E,b)=>b!==f).map(E=>E.region_id)),g=Qm(n.filter(E=>!p.has(E.id))),x=d&&!g.some(E=>E.id===d.region_id)?`Missing region · ${d.region_id.slice(0,8)}`:null,w=e.addWidget("combo",`context_region_${f+1}`,d?g.find(E=>E.id===d.region_id)?.label??x??"None":"None",E=>{if(E==="None")return c(a.slice(0,f));const b=g.find(v=>v.label===E);if(!b)return;const h=a.slice();h[f]={region_id:b.id,influence:d?.influence??1},c(h)},{values:["None",...x?[x]:[],...g.map(E=>E.label)],serialize:!1});if(w.label=`context region ${f+1}`,w.serialize=!1,l.push(w),d){const E=e.addWidget("number",`context_influence_${f+1}`,d.influence,b=>{const h=Hh(t.value);h[f]&&(h[f].influence=Math.max(0,Math.min(2,+b))),t.value=JSON.stringify(h)},{min:0,max:2,step:.05,precision:2,serialize:!1});E.label=`context influence ${f+1}`,E.serialize=!1,l.push(E)}}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)},Sl=e=>{const t=e.widgets?.find(f=>f.name==="region"),r=e.widgets?.find(f=>f.name==="region_selector");if(!t||!r)return;const o=qs(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=Qm(o.regions,n),a=String(t.value??""),l=i.some(f=>f.id===a)?a:a||i[0]?.id||"";t.value=l,e.__bvRegionChoices=i,r.options??(r.options={});const c=l&&!i.some(f=>f.id===l)?`Missing region · ${l.slice(0,8)}`:null;r.options.values=i.length||c?[...c?[c]:[],...i.map(f=>f.label)]:["Connect a BV Regional Prompt"],r.value=i.find(f=>f.id===l)?.label??c??r.options.values[0];const u=e.widgets?.find(f=>f.name==="scope");r.disabled=u&&u.value!=="region"||!i.length,If(e),e.setDirtyCanvas?.(!0,!0)},$h=e=>{const t=e.widgets?.find(n=>n.name==="region");if(!t)return;Mr(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,If(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")&&SE(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 Sl(e),i}}if(!e.__bvRegionDocumentListener){e.__bvRegionDocumentListener=()=>Sl(e),window.addEventListener(mo,e.__bvRegionDocumentListener);const n=e.onRemoved;e.onRemoved=function(){return window.removeEventListener(mo,e.__bvRegionDocumentListener),n?.apply(this,arguments)}}Sl(e)},zt=e=>{const t=[],r=o=>{for(const n of o?._nodes??[])n.type===e&&t.push(n),n.subgraph&&r(n.subgraph)};return r(nt.graph),t},Qo=()=>{const e=nt.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},Xi=()=>{const e=zt("BV Control Center").length>0,t=Qo().length>0,r=t||["BV Regional Detailer Plan","BV Detector Registry","BV Smart Pipe","BV Smart Pipe Merge"].some(n=>zt(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}}))},Tx=e=>vf(nt.rootGraph??nt.graph,t=>t===e)[0],Pe=e=>Tx(e)?.key??String(e.id),al=(e,t)=>{const r=Tx(e);return{label:String(e.title||t),meta:`${r?.breadcrumb?`${r.breadcrumb} · `:""}#${e.id}`}},xs=(e,t,r,o)=>{const n=o.widgets?.find(c=>c.name===r);if(!n||n.disabled)return;const i=Pe(o),a=Vo(e),l=()=>n.callback?.();a&&a!==i?hf(`${t}:${a}`,`${t}:${i}`,l,ri()==="replace"):l(),Zr(e,i)},Yh=(e,t)=>{e==="regional"?window.dispatchEvent(new CustomEvent($n,{detail:{node:t}})):e==="detailer"?xs("detailer","detailer-plan","configure_detailer_plan",t):e==="detector"?xs("detector","detector-registry","configure_detector_registry",t):window.dispatchEvent(new CustomEvent("bv-open-smart-pipe-editor",{detail:{node:t,kind:e}}))},NE=()=>{const e=[{type:"regional",nodes:Qo()},{type:"detailer",nodes:zt("BV Regional Detailer Plan")},{type:"detector",nodes:zt("BV Detector Registry")},{type:"pipe",nodes:zt("BV Smart Pipe")},{type:"merge",nodes:zt("BV Smart Pipe Merge")}],t=x1(),r=t&&Vo(t),o=e.find(i=>i.type===t)?.nodes.find(i=>Pe(i)===r);if(o){Yh(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&&(Yh(n.type,n.node),t&&Or({title:"Previous editor unavailable",message:"Opened the first available BV editor instead.",tone:"warning",duration:4e3}))},ld=()=>{const e=nt.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))},OE=()=>wk(Qo().flatMap(e=>{try{const t=sn(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[]}})),Xh=(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=OE(),i=kk(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)},Gh=(e,t=!1)=>{const r=e.widgets?.find(n=>n.name==="document_id");if(!r)return;Mr(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=()=>Xh(e,!1),window.addEventListener(mo,e.__bvDocumentTargetListener);const n=e.onRemoved;e.onRemoved=function(){return window.removeEventListener(mo,e.__bvDocumentTargetListener),n?.apply(this,arguments)}}Xh(e,t)},Kh=(e,t=!1)=>{const r=e.widgets?.find(o=>o.name==="regional_json");if(r)try{const o=t?sh():sn(r.value);!t&&Qo().some(a=>{if(a===e)return!1;try{return sn(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={...Sf(i.value,t?"":o.document_id),document_id:o.document_id};i.value=JSON.stringify(Vn(a,new Set(o.regions.map(l=>l.id))))}catch{i.value=JSON.stringify(Ys(o.document_id))}}catch{r.value=JSON.stringify(sh())}};function ME(){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),[f,d]=m.useState(0),[p,g]=m.useState(null),[x,w]=m.useState([]),[E,b]=m.useState({}),[h,v]=m.useState([]),_=m.useCallback((y=!1)=>{const T=Qo(),L=zt("BV Regional Detailer Plan"),B=zt("BV Detector Registry"),C=[...zt("BV Smart Pipe"),...zt("BV Smart Pipe Merge")],I=(S,k)=>{const j=!bn(S);return j&&!y?null:{...k,hidden:j,onReveal:j?()=>di(S,!0):void 0}};return[{id:"regional",label:"Regional Prompts",items:T.map(S=>{const k=al(S,"BV Regional Prompt"),j=Vo("regional")===Pe(S);return I(S,{id:Pe(S),...k,meta:`${k.meta}${j?" · Last active":""}`,onSelect:()=>window.dispatchEvent(new CustomEvent($n,{detail:{node:S}})),secondary:{label:`Quick edit ${k.label}`,onSelect:()=>window.dispatchEvent(new CustomEvent(Yi,{detail:{node:S}}))}})}).filter(Boolean)},{id:"detailer",label:"Detailer Plan",items:L.map(S=>{const k=al(S,"BV Regional Detailer Plan"),j=S.widgets?.find(R=>R.name==="configure_detailer_plan"),A=Vo("detailer")===Pe(S);return I(S,{id:Pe(S),...k,disabled:!j||j.disabled,meta:`${k.meta}${j?.disabled?" · Connect Regional Prompt":A?" · Last active":""}`,onSelect:()=>xs("detailer","detailer-plan","configure_detailer_plan",S)})}).filter(Boolean)},{id:"detector",label:"Detector Registry",items:B.map(S=>{const k=al(S,"BV Detector Registry"),j=Vo("detector")===Pe(S);return I(S,{id:Pe(S),...k,meta:`${k.meta}${j?" · Last active":""}`,onSelect:()=>xs("detector","detector-registry","configure_detector_registry",S)})}).filter(Boolean)},{id:"smart-pipe",label:"Smart Pipes",items:C.map(S=>{const k=String(S.type??S.comfyClass)==="BV Smart Pipe Merge"?"merge":"pipe",j=al(S,k==="merge"?"Smart Pipe Merge":"Smart Pipe");return I(S,{id:Pe(S),...j,meta:`${j.meta} · ${k==="merge"?"Merge":"Pipe"}`,onSelect:()=>window.dispatchEvent(new CustomEvent("bv-open-smart-pipe-editor",{detail:{node:S,kind:k}}))})}).filter(Boolean)}]},[]);return m.useEffect(()=>{if(!(!n&&!c))return Lk(nt,mr,()=>{i(!1),u(!1)})},[c,n]),m.useEffect(()=>{const y=()=>t(!0);return window.addEventListener(id,y),()=>window.removeEventListener(id,y)},[]),m.useEffect(()=>{const y=T=>o(!!T.detail?.control);return window.addEventListener("bv-toolbar-capabilities-changed",y),Xi(),()=>window.removeEventListener("bv-toolbar-capabilities-changed",y)},[]),m.useEffect(()=>{const y=T=>{const L=T.detail?.node??null,B=Qo();v(ld()),w(B);const C=L??B.find(I=>Pe(I)===Vo("quick"))??B[0]??null;C&&Zr("quick",Pe(C)),g(C),i(!1),u(!0),d(I=>I+1)};return window.addEventListener(Yi,y),()=>window.removeEventListener(Yi,y)},[]),m.useEffect(()=>{const y=T=>{const L=T.detail?.output,B=L?.bv_regional_background?.[0]?.document_id,C=L?.images?.[L.images.length-1];if(!B||!C)return;const I=new URLSearchParams({filename:C.filename,type:C.type,subfolder:C.subfolder||""});b(z=>({...z,[B]:mr.apiURL(`/view?${I}`)}))};return mr.addEventListener("executed",y),()=>mr.removeEventListener("executed",y)},[]),m.useEffect(()=>{const y=T=>{const L=T.detail?.node??null,B=Qo();v(ld()),w(B);const C=L??B.find(I=>Pe(I)===Vo("regional"))??B[0]??null;C&&Zr("regional",Pe(C)),g(C),C&&c&&String(p?.id)===String(C.id)&&u(!1),i(!0),l(I=>I+1)};return window.addEventListener($n,y),()=>window.removeEventListener($n,y)},[c,p]),s.jsxs(s.Fragment,{children:[s.jsx(b1,{}),s.jsx(M0,{getColumns:_}),s.jsx(w1,{}),s.jsx(_1,{open:e,hasControlNodes:r,onClose:()=>t(!1)}),s.jsx(mk,{open:n,activationToken:a,nodes:x,initialNode:p,backgrounds:E,loraStacks:h,onClose:()=>i(!1)}),s.jsx(_k,{open:c,activationToken:f,nodes:x,initialNode:p,loraStacks:h,onClose:()=>u(!1),onOpenEditor:y=>{Zr("regional",Pe(y)),g(y),u(!1),i(!0),l(T=>T+1)}})]})}const qh="bv-root";function AE(){if(!document.getElementById(Uh)){const t=document.createElement("style");t.id=Uh,t.textContent=`${S1} +${R1}`,document.head.appendChild(t)}let e=document.getElementById(qh);e||(e=document.createElement("div"),e.id=qh,document.body.appendChild(e),Yn.createRoot(e).render(s.jsx(Te.StrictMode,{children:s.jsx(ME,{})})))}nt.registerExtension({name:"bv_nodepack.control_rack_portal",setup(){AE(),Of(nt.canvas),_0(nt.ui?.settings),Sk(),Zo=!!nt.ui?.settings?.getSettingValue?.(wx,!1),kx(Zo).then(()=>{Zo&&ms()}).catch(e=>console.error(e)),mr.addEventListener("graphChanged",ms),mr.addEventListener("graphChanged",Xi)}});nt.registerExtension({name:"bv_nodepack.regional_editor",settings:[{id:Nv,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=>Av(e)},{id:Ov,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=>Dv(e)},{id:gf,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=>bf(e,!1)},{id:wx,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=>{kx(!!e).then(()=>{e&&ms()}).catch(t=>console.error(t))}},{id:Lm,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=>Bm(!!e)},{id:Nm,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=>jm(e)},{id:Cm,name:"Completion Datasets",type:Ek,defaultValue:"",category:["BV Node Pack","Prompting","Completion datasets"],tooltip:"Choose one or more local CSV/TSV datasets for BV Prompt Autocomplete.",onChange:e=>Wm(e)}],commands:[{id:"bv.regional.openEditor",label:"Open BV Regional Editor",icon:"icon-[lucide--layers]",function:()=>{window.dispatchEvent(new CustomEvent($n))}},{id:"bv.debugBridge.publishSnapshot",label:"Refresh BV Debug Bridge Snapshot",icon:"icon-[lucide--radio-tower]",function:()=>Ex().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(id))},{icon:"icon-[lucide--scan-search]",class:"bv-regional-action bv-regional-action-editor",tooltip:"Open last BV editor",onClick:NE},{icon:"icon-[lucide--layers]",class:"bv-regional-action bv-regional-action-quick",tooltip:"Quick edit BV Regional prompts",onClick:()=>window.dispatchEvent(new CustomEvent(Yi))},{icon:"icon-[lucide--chevron-down]",class:"bv-regional-action bv-regional-action-menu",tooltip:"Choose BV window",onClick:()=>window.dispatchEvent(new CustomEvent(ts))}],beforeRegisterNodeDef(e,t){if(nE(e,t)||bE(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(Xi),l},e.prototype.onRemoved=function(){const l=a?.apply(this,arguments);return queueMicrotask(Xi),l}}if(Bk.has(t.name)){const i=e.prototype.onNodeCreated,a=e.prototype.onConfigure;e.prototype.onNodeCreated=function(){const l=i?.apply(this,arguments);return queueMicrotask(()=>Wh(this,t.name)),l},e.prototype.onConfigure=function(l){const c=a?.call(this,l);return queueMicrotask(()=>Wh(this,t.name)),c}}if(t.name==="BV Detector Registry"){const i=u=>{const f=u.widgets?.find(g=>g.name==="config_json");if(!f)return;Mr(f);let d=u.widgets?.find(g=>g.name==="configure_detector_registry");d||(d=u.addWidget("button","configure_detector_registry",null,()=>{Zr("detector",Pe(u)),Ik(mr,f.value,g=>{f.value=g,i(u),u.graph?.setDirtyCanvas?.(!0,!0)},`detector-registry:${Pe(u)}`,zt("BV Detector Registry").filter(bn).map(g=>({id:Pe(g),label:`${g.title||"BV Detector Registry"} · #${g.id}`})),(g,x)=>{const w=zt("BV Detector Registry").find(b=>Pe(b)===g),E=w?.widgets?.find(b=>b.name==="configure_detector_registry");E&&hf(`detector-registry:${Pe(u)}`,`detector-registry:${Pe(w)}`,()=>E.callback?.(),x)},u).catch(g=>console.error(g))},{serialize:!1}),d.serialize=!1);const p=$i(f.value).detectors.length;d.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),Yc(this)}),u},e.prototype.onConfigure=function(){const u=l?.apply(this,arguments);return queueMicrotask(()=>{i(this),Yc(this)}),u},e.prototype.onConnectionsChange=function(){const u=c?.apply(this,arguments);return queueMicrotask(()=>Yc(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(()=>Vh(this)),c},e.prototype.onConfigure=function(){const c=a?.apply(this,arguments);return queueMicrotask(()=>Vh(this)),c},e.prototype.onConnectionsChange=function(){const c=l?.apply(this,arguments);return queueMicrotask(()=>ad(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(()=>Dh(this,mr)),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(()=>Dh(this,mr)),c};return}if(t.name==="BV Named LoRA Stack"){const i=c=>{const u=c.widgets?.find(d=>d.name==="stack_id");if(!u)return;const f=String(u.value??"").trim();if(!f||dk(String(c.id),f,ld())){const d=crypto.randomUUID();f&&(c.__bvLoraResourceIdRemap={[f]:d}),u.value=d,c.setDirtyCanvas?.(!0,!0)}Mr(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(()=>Gh(this,!0)),l},e.prototype.onConfigure=function(){const l=a?.apply(this,arguments);return queueMicrotask(()=>Gh(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 $h(this),u};const c=e.prototype.onSerialize;e.prototype.onConfigure=function(u){t.name==="BV Regional Detailer Mask"&&(LE(this),u?.widgets_values&&(u={...u,widgets_values:Nk(u.widgets_values)}));const f=a?.call(this,u);return queueMicrotask(()=>$h(this)),f},e.prototype.onSerialize=function(u){const f=c?.apply(this,arguments);return t.name==="BV Regional Detailer Mask"&&(u.widgets_values=Ck(this.widgets)),f},e.prototype.onConnectionsChange=function(){const u=l?.apply(this,arguments);return queueMicrotask(()=>Sl(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);Kh(this,!0);const a=this.widgets?.find(c=>c.name==="regional_json"),l=this.widgets?.find(c=>c.name==="lora_bindings_json");if(l&&Mr(l),a&&(Mr(a),!a.__bvRegionalDocumentHooked)){a.__bvRegionalDocumentHooked=!0;const c=a.callback;a.callback=function(){const u=c?.apply(this,arguments);return window.dispatchEvent(new CustomEvent(mo)),u}}if(!this.widgets?.find(c=>c.name==="open_regional_editor")){const c=this.addWidget("button","open_regional_editor",null,()=>window.dispatchEvent(new CustomEvent($n,{detail:{node:this}})),{serialize:!1});c.label="Open Regional Editor",c.serialize=!1}if(!this.widgets?.find(c=>c.name==="quick_edit_regional_prompts")){const c=this.addWidget("button","quick_edit_regional_prompts",null,()=>window.dispatchEvent(new CustomEvent(Yi,{detail:{node:this}})),{serialize:!1});c.label="Quick Edit Prompts",c.serialize=!1}return this.setSize?.([Math.max(this.size?.[0]??0,220),this.computeSize?.()[1]??60]),window.dispatchEvent(new CustomEvent(mo)),i},e.prototype.onConfigure=function(){const i=o?.apply(this,arguments);Kh(this,!1);const a=this.widgets?.find(l=>l.name==="lora_bindings_json");return a&&Mr(a),window.dispatchEvent(new CustomEvent(mo)),i};const n=e.prototype.onRemoved;e.prototype.onRemoved=function(){const i=n?.apply(this,arguments);return window.dispatchEvent(new CustomEvent(mo)),i}},afterConfigureGraph(){ms(),queueMicrotask(Xi)}}); diff --git a/node_list.json b/node_list.json index 8fe86ae..afcb430 100644 --- a/node_list.json +++ b/node_list.json @@ -20,6 +20,7 @@ "BV M0 Fake Resource Consumer": "Technical BV Regional v3 feasibility consumer for validating strict resource identity and hidden-link behavior.", "BV M0 Fake Multi Resource Consumer": "Technical BV Regional v3 feasibility consumer for validating native multi-collector fan-in and hidden-link behavior.", "BV Named LoRA Stack": "Name an external LoRA stack and add it to a chainable regional stack registry.", + "BV LoRA Stack Collector": "Expose live named LoRA stacks through the typed BV Regional v3 resource-provider contract.", "BV Pipe": "Carry configurable named values through a typed workflow pipe.", "BV Pipe Config": "Define the configurable slots used by a BV Pipe.", "BV Prompt AST Debug": "Inspect a structured BV prompt AST as readable JSON.", @@ -39,6 +40,7 @@ "BV Regional Image Send": "Send a preview image to a selected Regional Editor without saving it.", "BV Detailer Loop Detect to SEGS (Impact)": "Resolve the current job's detector binding inside the region crop and return mask-gated Impact SEGS.", "BV Regional Mask Render": "Render the mask for a selected region from a BV Regional document.", + "BV Regional LoRA": "Add or replace the immutable LoRA capability in a BV Regional v3 context.", "BV Regional Native Conditioning": "Compile a BV Regional document into native ComfyUI masked conditioning.", "BV Regional SDXL Attention": "Route BV Regional prompts through SDXL cross-attention for Illustrious, Pony and compatible SDXL models.", "BV Regional Z-Image Attention": "Route BV Regional prompts through Z-Image Turbo joint attention with a standard KSampler.", diff --git a/py/nodes/bv_regional.py b/py/nodes/bv_regional.py index 6cc878a..757d5d4 100644 --- a/py/nodes/bv_regional.py +++ b/py/nodes/bv_regional.py @@ -26,10 +26,19 @@ from ..util.regional.lora_hooks import ( apply_attention_hook_passes, create_hook_groups, default_bindings, + parse_registry, reconcile_bindings, resolve_stack_paths, resolve_scope_stacks, ) +from ..util.regional.lora_v3 import ( + LORA_CAPABILITY, + LORA_CAPABILITY_REGISTRY, + RUNTIME_PROVIDER, + build_lora_provider, + resolve_lora_capability, + transform_lora_capability, +) from ..util.regional.sdxl_attention import compile_sdxl_attention, apply_sdxl_attention_patch from ..util.regional.zimage_attention import compile_zimage_attention, apply_zimage_attention_patch from ..util.regional.flux2_klein_attention import ( @@ -113,6 +122,64 @@ class BVNamedLoraStackNode: return (add_named_stack(registry, stack_id, name, lora_stack),) +class BVLoraStackCollectorNode: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "lora_registry": (REGISTRY, {}), + "collector_id": ("STRING", {"default": "", "multiline": False}), + } + } + + RETURN_TYPES = (RUNTIME_PROVIDER,) + RETURN_NAMES = ("resource_provider",) + FUNCTION = "collect" + CATEGORY = CATEGORY_CORE + DESCRIPTION = "Exposes live named LoRA stacks through the typed BV v3 runtime-resource protocol." + + def collect(self, lora_registry, collector_id): + stacks = parse_registry(lora_registry)["stacks"] + return (build_lora_provider(collector_id, stacks),) + + +class BVRegionalLoraNode: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "regional": (REGIONAL, {}), + "operation": (["replace", "merge", "subtract", "clear"], {"default": "replace"}), + "config_json": ("STRING", {"default": '{"version":1,"collector_id":null,"entries":[]}', "multiline": True}), + }, + "optional": { + "resource_provider": (RUNTIME_PROVIDER, {"forceInput": True}), + }, + } + + RETURN_TYPES = (REGIONAL,) + RETURN_NAMES = ("regional",) + FUNCTION = "transform" + CATEGORY = CATEGORY_CORE + DESCRIPTION = "Adds or replaces the immutable BV Regional v3 LoRA capability." + + def transform(self, regional, operation, config_json, resource_provider=None): + payload = json.loads(config_json) if isinstance(config_json, str) else config_json + transformed = transform_lora_capability(regional, payload, registry=LORA_CAPABILITY_REGISTRY, operation=operation) + if operation != "clear" and any(entry["source"]["kind"] == "external" for entry in payload["entries"]): + resolve_lora_capability(transformed, resource_provider, registry=LORA_CAPABILITY_REGISTRY) + return (transformed.to_dict(),) + + +def _consumer_lora_scopes(regional, document, lora_registry=None, lora_bindings=None, resource_provider=None): + if lora_registry is not None or lora_bindings is not None: + return resolve_scope_stacks(lora_registry, lora_bindings, document) + context = normalize_context(regional, registry=LORA_CAPABILITY_REGISTRY) + if LORA_CAPABILITY not in context.capabilities: + return {} + return resolve_lora_capability(context, resource_provider, registry=LORA_CAPABILITY_REGISTRY) + + class BVRegionalDebugNode: @classmethod def INPUT_TYPES(cls): @@ -374,6 +441,7 @@ class BVRegionalNativeConditioningNode: "optional": { "lora_registry": (REGISTRY, {}), "lora_bindings": (BINDINGS, {}), + "resource_provider": (RUNTIME_PROVIDER, {"forceInput": True}), }, } @@ -386,10 +454,10 @@ class BVRegionalNativeConditioningNode: "mask_bounds requires a 2D image latent and is rejected for Anima with a compatibility error." ) - def compile(self, regional, clip, region_strength_multiplier=1.0, native_composition="blend", hybrid_blend_ratio=0.35, lora_registry=None, lora_bindings=None): + def compile(self, regional, clip, region_strength_multiplier=1.0, native_composition="blend", hybrid_blend_ratio=0.35, lora_registry=None, lora_bindings=None, resource_provider=None): document = context_document(regional) scope_stacks = resolve_stack_paths( - resolve_scope_stacks(lora_registry, lora_bindings, document) + _consumer_lora_scopes(regional, document, lora_registry, lora_bindings, resource_provider) ) hook_groups = create_hook_groups(scope_stacks) return compile_native_conditioning( @@ -527,6 +595,7 @@ class BVRegionalKrea2AttentionNode: "optional": { "lora_registry": (REGISTRY, {}), "lora_bindings": (BINDINGS, {}), + "resource_provider": (RUNTIME_PROVIDER, {"forceInput": True}), }, } @@ -554,12 +623,13 @@ class BVRegionalKrea2AttentionNode: regional_lora_mode="token_gated_singlepass", lora_registry=None, lora_bindings=None, + resource_provider=None, ): if regional_lora_mode not in {"multipass_legacy", "token_gated_singlepass"}: raise ValueError("regional_lora_mode must be multipass_legacy or token_gated_singlepass") document = context_document(regional) scope_stacks = resolve_stack_paths( - resolve_scope_stacks(lora_registry, lora_bindings, document) + _consumer_lora_scopes(regional, document, lora_registry, lora_bindings, resource_provider) ) hook_groups = create_hook_groups(scope_stacks) positive, negative, slots, aspect_ratio = compile_krea2_attention( @@ -624,6 +694,7 @@ class BVRegionalAnimaConditioningNode: "optional": { "lora_registry": (REGISTRY, {}), "lora_bindings": (BINDINGS, {}), + "resource_provider": (RUNTIME_PROVIDER, {"forceInput": True}), }, } @@ -653,6 +724,7 @@ class BVRegionalAnimaConditioningNode: regional_lora_mode="multipass_legacy", lora_registry=None, lora_bindings=None, + resource_provider=None, ): if regional_lora_mode not in {"multipass_legacy", "token_gated_singlepass"}: raise ValueError("regional_lora_mode must be multipass_legacy or token_gated_singlepass") @@ -666,7 +738,7 @@ class BVRegionalAnimaConditioningNode: document = context_document(regional) scope_stacks = resolve_stack_paths( - resolve_scope_stacks(lora_registry, lora_bindings, document) + _consumer_lora_scopes(regional, document, lora_registry, lora_bindings, resource_provider) ) hook_groups = create_hook_groups(scope_stacks) positive, negative, regions, background = compile_anima_adapter(document, clip, hook_groups) @@ -829,6 +901,8 @@ class BVRegionalImageSaveNode(_BVRegionalImageTargetMixin, SaveImage): NODE_CLASS_MAPPINGS = { "BV Regional Prompt": BVRegionalPromptNode, "BV Named LoRA Stack": BVNamedLoraStackNode, + "BV LoRA Stack Collector": BVLoraStackCollectorNode, + "BV Regional LoRA": BVRegionalLoraNode, "BV Regional Debug": BVRegionalDebugNode, "BV Regional Select": BVRegionalSelectNode, "BV Regional Deconstructor": BVRegionalDeconstructorNode, @@ -851,6 +925,8 @@ NODE_CLASS_MAPPINGS = { NODE_DISPLAY_NAME_MAPPINGS = { "BV Regional Prompt": "🌀 BV Regional Prompt", "BV Named LoRA Stack": "🌀 BV Named LoRA Stack", + "BV LoRA Stack Collector": "🌀 BV LoRA Stack Collector", + "BV Regional LoRA": "🌀 BV Regional LoRA", "BV Regional Debug": "🌀 BV Regional Debug", "BV Regional Select": "🌀 BV Regional Select", "BV Regional Deconstructor": "🌀 BV Regional Deconstructor", diff --git a/py/util/regional/lora_v3.py b/py/util/regional/lora_v3.py new file mode 100644 index 0000000..b17b046 --- /dev/null +++ b/py/util/regional/lora_v3.py @@ -0,0 +1,242 @@ +from __future__ import annotations + +import math +import re +from typing import Any + +from .context import ( + CapabilityRegistration, + CapabilityRegistry, + RegionalContext, + RegionalContextError, + ResourceRegistration, + ResourceRegistry, + normalize_context, +) +from .lora_hooks import parse_registry + + +LORA_CAPABILITY = "bv-nodepack.lora" +LORA_RESOURCE_TYPE = "bv-nodepack.lora-stack" +RUNTIME_PROVIDER = "BV_RUNTIME_RESOURCE_PROVIDER" +_UUID = re.compile(r"^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$", re.IGNORECASE) + + +def _required_uuid(value: Any, path: str) -> str: + clean = str(value or "").strip() + if not _UUID.fullmatch(clean): + raise RegionalContextError(f"{path} must be a UUID") + return clean + + +def _finite_number(value: Any, path: str) -> float: + if isinstance(value, bool) or not isinstance(value, (int, float)) or not math.isfinite(float(value)): + raise RegionalContextError(f"{path} must be a finite number") + return float(value) + + +def validate_lora_resource_reference(reference: dict[str, Any]) -> None: + if set(reference) != {"provider_id", "resource_type", "resource_id"}: + raise RegionalContextError("LoRA resource reference has unknown or missing fields") + _required_uuid(reference["provider_id"], "LoRA resource provider_id") + if reference["resource_type"] != LORA_RESOURCE_TYPE: + raise RegionalContextError(f"LoRA resource_type must be {LORA_RESOURCE_TYPE!r}") + if not isinstance(reference["resource_id"], str) or not reference["resource_id"].strip(): + raise RegionalContextError("LoRA resource_id must be a non-empty string") + + +def validate_lora_capability(payload: dict[str, Any]) -> None: + if set(payload) != {"version", "collector_id", "entries"}: + raise RegionalContextError("LoRA capability has unknown or missing fields") + if payload["version"] != 1: + raise RegionalContextError("LoRA capability version must be 1") + collector_id = payload["collector_id"] + if collector_id is not None: + _required_uuid(collector_id, "LoRA collector_id") + entries = payload["entries"] + if not isinstance(entries, list): + raise RegionalContextError("LoRA capability entries must be an array") + seen: set[str] = set() + needs_collector = False + for index, entry in enumerate(entries): + path = f"LoRA entries[{index}]" + if not isinstance(entry, dict) or set(entry) != {"id", "source", "targets"}: + raise RegionalContextError(f"{path} has unknown or missing fields") + entry_id = _required_uuid(entry["id"], f"{path}.id") + if entry_id in seen: + raise RegionalContextError(f"duplicate LoRA entry id: {entry_id}") + seen.add(entry_id) + source = entry["source"] + if not isinstance(source, dict): + raise RegionalContextError(f"{path}.source must be an object") + if source.get("kind") == "external": + if set(source) != {"kind", "resource_id"} or not isinstance(source["resource_id"], str) or not source["resource_id"].strip(): + raise RegionalContextError(f"{path}.source is not a valid external LoRA reference") + needs_collector = True + elif source.get("kind") == "native": + if set(source) != {"kind", "lora_name", "model_strength", "clip_strength"}: + raise RegionalContextError(f"{path}.source is not a valid native LoRA entry") + if not isinstance(source["lora_name"], str) or not source["lora_name"].strip(): + raise RegionalContextError(f"{path}.source.lora_name must be non-empty") + _finite_number(source["model_strength"], f"{path}.source.model_strength") + _finite_number(source["clip_strength"], f"{path}.source.clip_strength") + else: + raise RegionalContextError(f"{path}.source.kind must be native or external") + targets = entry["targets"] + if not isinstance(targets, list) or not targets: + raise RegionalContextError(f"{path}.targets must be a non-empty array") + for target_index, target in enumerate(targets): + target_path = f"{path}.targets[{target_index}]" + if not isinstance(target, dict) or target.get("scope") not in {"global", "region"}: + raise RegionalContextError(f"{target_path} must target global or region scope") + if target["scope"] == "global" and set(target) != {"scope"}: + raise RegionalContextError(f"{target_path} global target has unknown fields") + if target["scope"] == "region": + if set(target) != {"scope", "document_id", "region_id"}: + raise RegionalContextError(f"{target_path} region target has unknown or missing fields") + _required_uuid(target["document_id"], f"{target_path}.document_id") + _required_uuid(target["region_id"], f"{target_path}.region_id") + if needs_collector and collector_id is None: + raise RegionalContextError("external LoRA entries require collector_id") + + +def _replace_lora(_current: dict[str, Any], configured: Any) -> dict[str, Any]: + return dict(configured) + + +def _merge_lora(current: dict[str, Any], configured: Any) -> dict[str, Any]: + incoming = dict(configured) + if current.get("collector_id") != incoming.get("collector_id"): + raise RegionalContextError("LoRA merge requires the same collector_id") + incoming_ids = {entry["id"] for entry in incoming["entries"]} + return {**incoming, "entries": [entry for entry in current["entries"] if entry["id"] not in incoming_ids] + incoming["entries"]} + + +def _subtract_lora(current: dict[str, Any], configured: Any) -> dict[str, Any]: + incoming = dict(configured) + if current.get("collector_id") != incoming.get("collector_id"): + raise RegionalContextError("LoRA subtract requires the same collector_id") + removed = {entry["id"] for entry in incoming["entries"]} + return {**current, "entries": [entry for entry in current["entries"] if entry["id"] not in removed]} + + +def register_lora_contracts() -> tuple[CapabilityRegistry, ResourceRegistry]: + capabilities = CapabilityRegistry() + resources = ResourceRegistry() + capabilities.register( + "bv-nodepack", "lora", + CapabilityRegistration( + version=1, + validator=validate_lora_capability, + operations={"replace": _replace_lora, "merge": _merge_lora, "subtract": _subtract_lora, "clear": lambda current, _configured: current}, + metadata={"display_name": "LoRA"}, + ), + source=__name__, + ) + resources.register( + "bv-nodepack", "lora-stack", + ResourceRegistration(validator=validate_lora_resource_reference, metadata={"display_name": "LoRA Stack"}), + source=__name__, + ) + return capabilities, resources + + +LORA_CAPABILITY_REGISTRY, LORA_RESOURCE_REGISTRY = register_lora_contracts() + + +def build_lora_provider(provider_id: str, stacks: Any) -> dict[str, Any]: + clean_id = _required_uuid(provider_id, "LoRA provider_id") + registry = parse_registry({"schema": "bv.lora_stack_registry", "version": 1, "stacks": stacks}) + return { + "schema": "bv.runtime_resource_provider", + "version": 1, + "provider_id": clean_id, + "resource_type": LORA_RESOURCE_TYPE, + "resources": registry["stacks"], + } + + +def transform_lora_capability(value: Any, payload: Any, *, registry: CapabilityRegistry, operation: str = "replace") -> RegionalContext: + context = normalize_context(value, registry=registry) + if operation == "clear": + return context.without_capability(LORA_CAPABILITY) + clean = dict(payload) + validate_lora_capability(clean) + document_id = context.core["document_id"] + region_ids = {region["id"] for region in context.core["regions"]} + for entry in clean["entries"]: + for target in entry["targets"]: + if target["scope"] == "region" and ( + target["document_id"] != document_id or target["region_id"] not in region_ids + ): + raise RegionalContextError( + "LoRA target references a missing region " + f"{target['document_id']} + {target['region_id']}" + ) + current = context.capabilities.get(LORA_CAPABILITY) + if current is None: + if operation not in {"replace", "merge"}: + raise RegionalContextError(f"cannot {operation} a missing LoRA capability") + result = clean + else: + registration = registry.get(LORA_CAPABILITY) + handler = registration.operations.get(operation) if registration else None + if handler is None: + raise RegionalContextError(f"unsupported LoRA operation: {operation}") + result = handler(current, clean) + validate_lora_capability(result) + return context.with_capability(LORA_CAPABILITY, result) + + +def _provider_resources(provider: Any, expected_id: str | None) -> dict[str, Any]: + if expected_id is None: + if provider is not None: + raise RegionalContextError("LoRA provider is connected but the capability has no collector_id") + return {} + if not isinstance(provider, dict): + raise RegionalContextError("LoRA collector is missing; collector and consumer must be in the same graph") + if provider.get("schema") != "bv.runtime_resource_provider" or provider.get("version") != 1: + raise RegionalContextError("LoRA runtime resource provider is invalid") + if provider.get("resource_type") != LORA_RESOURCE_TYPE: + raise RegionalContextError("LoRA runtime resource provider has the wrong resource type") + if provider.get("provider_id") != expected_id: + raise RegionalContextError( + f"LoRA collector is missing or mismatched: expected {expected_id!r}, received {provider.get('provider_id')!r}" + ) + resources = provider.get("resources") + if not isinstance(resources, dict): + raise RegionalContextError("LoRA runtime resource provider resources must be an object") + return resources + + +def resolve_lora_capability(value: Any, provider: Any = None, *, registry: CapabilityRegistry) -> dict[str, list[list[Any]]]: + context = normalize_context(value, registry=registry) + payload = context.require_capability(LORA_CAPABILITY) + resources = _provider_resources(provider, payload["collector_id"]) + direct: dict[str, list[list[Any]]] = {"global": []} + for entry in payload["entries"]: + source = entry["source"] + if source["kind"] == "native": + stack = [[source["lora_name"], float(source["model_strength"]), float(source["clip_strength"])]] + else: + resource = resources.get(source["resource_id"]) + if not isinstance(resource, dict): + raise RegionalContextError( + f"LoRA resource is unresolved: {source['resource_id']!r} in collector {payload['collector_id']!r}" + ) + stack = parse_registry({"schema": "bv.lora_stack_registry", "version": 1, "stacks": {source["resource_id"]: resource}})["stacks"][source["resource_id"]]["stack"] + for target in entry["targets"]: + key = "global" if target["scope"] == "global" else target["region_id"] + direct.setdefault(key, []).extend([list(item) for item in stack]) + global_entries = direct.pop("global") + scopes: dict[str, list[list[Any]]] = {} + if global_entries: + scopes["global"] = [list(item) for item in global_entries] + scopes["background"] = [list(item) for item in global_entries] + for region in context.core["regions"]: + combined = [list(item) for item in global_entries] + combined.extend(direct.get(region["id"], [])) + combined = [item for item in combined if item[1] != 0.0 or item[2] != 0.0] + if combined: + scopes[region["id"]] = combined + return scopes diff --git a/tests/regional_lora_v3_graph.test.mjs b/tests/regional_lora_v3_graph.test.mjs new file mode 100644 index 0000000..84c4a59 --- /dev/null +++ b/tests/regional_lora_v3_graph.test.mjs @@ -0,0 +1,45 @@ +import assert from "node:assert/strict"; +import test from "node:test"; +import {connectLocalLoraCollector,connectLoraConsumerTree,downstreamLoraConsumers,ensureLoraCollectorOutput,ensureLoraConsumerInput,linkedLocalLoraCollector,localLoraCollectors,upstreamLoraTransformer} from "../ui/src/regional/loraV3Graph.ts"; + +const graph=()=>({_nodes:[],links:new Map(),getNodeById(id){return this._nodes.find(node=>node.id===id)}}); +const node=(id,type,g)=>({id,type,graph:g,inputs:[],outputs:[],addInput(name,type){this.inputs.push({name,type,link:null})},addOutput(name,type){this.outputs.push({name,type,links:null})}}); + +test("production LoRA slots use the permanent typed provider contract",()=>{ + const g=graph(),collector=node(1,"BV LoRA Stack Collector",g),consumer=node(2,"BV Regional LoRA",g); + assert.equal(ensureLoraCollectorOutput(collector),0);assert.equal(ensureLoraConsumerInput(consumer),0); + assert.equal(collector.outputs[0].type,"BV_RUNTIME_RESOURCE_PROVIDER");assert.equal(consumer.inputs[0].hidden,true); +}); + +test("collector connections are ordinary same-graph links",()=>{ + const g=graph(),collector=node(1,"BV LoRA Stack Collector",g),consumer=node(2,"BV Regional LoRA",g);g._nodes.push(collector,consumer); + collector.connect=function(output,target,input){const id=7;g.links.set(id,{origin_id:this.id,origin_slot:output,target_id:target.id,target_slot:input});this.outputs[output].links=[id];target.inputs[input].link=id}; + assert.equal(connectLocalLoraCollector(consumer,collector),true);assert.equal(linkedLocalLoraCollector(consumer),collector); +}); + +test("cross-graph collectors are rejected without fallback",()=>{ + const local=graph(),external=graph(),collector=node(1,"BV LoRA Stack Collector",external),consumer=node(2,"BV Regional LoRA",local); + local._nodes.push(consumer);external._nodes.push(collector); + assert.equal(connectLocalLoraCollector(consumer,collector),false);assert.equal(linkedLocalLoraCollector(consumer),null); +}); + +test("picker catalog is restricted to the concrete consumer graph",()=>{ + const local=graph(),external=graph(),first=node(1,"BV LoRA Stack Collector",local),second=node(2,"BV LoRA Stack Collector",external),consumer=node(3,"BV Regional LoRA",local); + local._nodes.push(first,consumer);external._nodes.push(second); + assert.deepEqual(localLoraCollectors(consumer),[first]); +}); + +test("one picker selection materializes links to downstream LoRA executors",()=>{ + const g=graph(),collector=node(1,"BV LoRA Stack Collector",g),transformer=node(2,"BV Regional LoRA",g),consumer=node(3,"BV Regional Native Conditioning",g);g._nodes.push(collector,transformer,consumer); + transformer.outputs=[{type:"BV_REGIONAL",links:[5]}];g.links.set(5,{origin_id:2,origin_slot:0,target_id:3,target_slot:0}); + collector.connect=function(output,target,input){const id=10+target.id;g.links.set(id,{origin_id:this.id,origin_slot:output,target_id:target.id,target_slot:input});this.outputs[output].links=[...(this.outputs[output].links??[]),id];target.inputs[input].link=id}; + assert.deepEqual(downstreamLoraConsumers(transformer),[consumer]); + assert.equal(connectLoraConsumerTree(transformer,collector),true); + assert.equal(linkedLocalLoraCollector(transformer),collector);assert.equal(linkedLocalLoraCollector(consumer),collector); +}); + +test("a consumer added later discovers only its linked upstream LoRA transformer",()=>{ + const g=graph(),transformer=node(2,"BV Regional LoRA",g),consumer=node(3,"BV Regional Native Conditioning",g);g._nodes.push(transformer,consumer); + transformer.outputs=[{type:"BV_REGIONAL",links:[5]}];consumer.inputs=[{name:"regional",type:"BV_REGIONAL",link:5}];g.links.set(5,{origin_id:2,origin_slot:0,target_id:3,target_slot:0}); + assert.equal(upstreamLoraTransformer(consumer),transformer); +}); diff --git a/tests/regional_lora_v3_picker.test.mjs b/tests/regional_lora_v3_picker.test.mjs new file mode 100644 index 0000000..a352cd3 --- /dev/null +++ b/tests/regional_lora_v3_picker.test.mjs @@ -0,0 +1,31 @@ +import assert from "node:assert/strict"; +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} 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/); +}); +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/); +}); +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(){}})); + assert.match(html,/disabled=""/); +}); +test("production LoRA presentation keeps ComfyUI links authoritative",()=>{ + const source=readFileSync(new URL("../ui/src/regional/loraV3Ui.tsx",import.meta.url),"utf8"); + assert.match(source,/serialize:false/);assert.match(source,/connectLoraConsumerTree/);assert.match(source,/__bvLoraCollectorIdRemap/);assert.match(source,/__bvLoraResourceIdRemap/); + assert.doesNotMatch(source,/graphToPrompt|queuePrompt|MutationObserver/); +}); diff --git a/tests/test_regional_lora_v3.py b/tests/test_regional_lora_v3.py new file mode 100644 index 0000000..19bb676 --- /dev/null +++ b/tests/test_regional_lora_v3.py @@ -0,0 +1,116 @@ +import unittest + +from py.util.regional.context import normalize_context +from py.util.regional.lora_v3 import ( + LORA_CAPABILITY, + LORA_RESOURCE_TYPE, + build_lora_provider, + register_lora_contracts, + resolve_lora_capability, + transform_lora_capability, +) + + +DOCUMENT = { + "schema": "bv.regional", + "version": 2, + "document_id": "11111111-1111-4111-8111-111111111111", + "title": "LoRA v3", + "canvas": {"width": 64, "height": 64}, + "prompts": { + "global": {"positive_source": "", "negative_source": ""}, + "background": {"positive_source": "", "negative_source": ""}, + }, + "negative_mode": "auto", + "overlap": {"mode": "joint"}, + "regions": [], +} + + +class RegionalLoraV3Tests(unittest.TestCase): + def setUp(self): + self.capabilities, self.resources = register_lora_contracts() + self.context = normalize_context(DOCUMENT, registry=self.capabilities) + + def test_external_stack_is_resolved_live_without_entering_context(self): + provider = build_lora_provider( + "22222222-2222-4222-8222-222222222222", + {"skin": {"id": "skin", "name": "Skin", "stack": [["skin.safetensors", 0.8, 0.4]]}}, + ) + payload = { + "version": 1, + "collector_id": provider["provider_id"], + "entries": [{ + "id": "33333333-3333-4333-8333-333333333333", + "source": {"kind": "external", "resource_id": "skin"}, + "targets": [{"scope": "global"}], + }], + } + transformed = transform_lora_capability(self.context, payload, registry=self.capabilities) + self.assertNotIn("stack", transformed.require_capability(LORA_CAPABILITY)["entries"][0]["source"]) + resolved = resolve_lora_capability(transformed, provider, registry=self.capabilities) + self.assertEqual(resolved["global"], [["skin.safetensors", 0.8, 0.4]]) + changed_provider = build_lora_provider( + provider["provider_id"], + {"skin": {"id": "skin", "name": "Skin", "stack": [["skin.safetensors", 0.25, 0.1]]}}, + ) + self.assertEqual( + resolve_lora_capability(transformed, changed_provider, registry=self.capabilities)["global"], + [["skin.safetensors", 0.25, 0.1]], + ) + + def test_native_and_external_entries_preserve_semantic_order(self): + provider = build_lora_provider( + "22222222-2222-4222-8222-222222222222", + {"skin": {"id": "skin", "name": "Skin", "stack": [["external.safetensors", 0.5, 0.25]]}}, + ) + payload = { + "version": 1, + "collector_id": provider["provider_id"], + "entries": [ + {"id": "33333333-3333-4333-8333-333333333333", "source": {"kind": "native", "lora_name": "native.safetensors", "model_strength": 1.0, "clip_strength": 0.5}, "targets": [{"scope": "global"}]}, + {"id": "44444444-4444-4444-8444-444444444444", "source": {"kind": "external", "resource_id": "skin"}, "targets": [{"scope": "global"}]}, + ], + } + transformed = transform_lora_capability(self.context, payload, registry=self.capabilities) + self.assertEqual(resolve_lora_capability(transformed, provider, registry=self.capabilities)["global"], [ + ["native.safetensors", 1.0, 0.5], ["external.safetensors", 0.5, 0.25] + ]) + + def test_provider_identity_is_fail_closed(self): + provider = build_lora_provider("22222222-2222-4222-8222-222222222222", {}) + payload = {"version": 1, "collector_id": "55555555-5555-4555-8555-555555555555", "entries": []} + transformed = transform_lora_capability(self.context, payload, registry=self.capabilities) + with self.assertRaisesRegex(ValueError, "mismatched"): + resolve_lora_capability(transformed, provider, registry=self.capabilities) + + def test_transform_does_not_mutate_a_branch(self): + payload = {"version": 1, "collector_id": None, "entries": []} + transformed = transform_lora_capability(self.context, payload, registry=self.capabilities) + self.assertNotIn(LORA_CAPABILITY, self.context.capabilities) + self.assertIn(LORA_CAPABILITY, transformed.capabilities) + + def test_merge_and_subtract_require_the_same_collector(self): + first = {"version": 1, "collector_id": "22222222-2222-4222-8222-222222222222", "entries": []} + context = transform_lora_capability(self.context, first, registry=self.capabilities) + other = {"version": 1, "collector_id": "55555555-5555-4555-8555-555555555555", "entries": []} + with self.assertRaisesRegex(ValueError, "same collector_id"): + transform_lora_capability(context, other, registry=self.capabilities, operation="merge") + with self.assertRaisesRegex(ValueError, "same collector_id"): + transform_lora_capability(context, other, registry=self.capabilities, operation="subtract") + + def test_clear_removes_only_the_lora_capability(self): + payload = {"version": 1, "collector_id": None, "entries": []} + context = transform_lora_capability(self.context, payload, registry=self.capabilities) + cleared = transform_lora_capability(context, {}, registry=self.capabilities, operation="clear") + self.assertNotIn(LORA_CAPABILITY, cleared.capabilities) + self.assertEqual(cleared.core, self.context.core) + + def test_registered_resource_type_rejects_runtime_objects(self): + provider = build_lora_provider("22222222-2222-4222-8222-222222222222", {}) + reference = {"provider_id": provider["provider_id"], "resource_type": LORA_RESOURCE_TYPE, "resource_id": "skin"} + self.assertEqual(self.resources.validate(LORA_RESOURCE_TYPE, reference), reference) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/test_regional_nodes.py b/tests/test_regional_nodes.py index 118ab6b..39306ab 100644 --- a/tests/test_regional_nodes.py +++ b/tests/test_regional_nodes.py @@ -62,6 +62,8 @@ class RegionalNodeTests(unittest.TestCase): expected_categories = { "BV Regional Prompt": "🌀 BV Node Pack/regional/core", "BV Named LoRA Stack": "🌀 BV Node Pack/regional/core", + "BV LoRA Stack Collector": "🌀 BV Node Pack/regional/core", + "BV Regional LoRA": "🌀 BV Node Pack/regional/core", "BV Regional Debug": "🌀 BV Node Pack/regional/core", "BV Regional Select": "🌀 BV Node Pack/regional/core", "BV Regional Deconstructor": "🌀 BV Node Pack/regional/core", @@ -116,7 +118,7 @@ class RegionalNodeTests(unittest.TestCase): def test_old_prompt_call_and_native_compiler_inputs_remain_compatible(self): inputs = self.module.BVRegionalNativeConditioningNode.INPUT_TYPES() - self.assertEqual(set(inputs["optional"]), {"lora_registry", "lora_bindings"}) + self.assertEqual(set(inputs["optional"]), {"lora_registry", "lora_bindings", "resource_provider"}) self.assertEqual(self.module.BVRegionalPromptNode.RETURN_TYPES[0], "BV_REGIONAL") def test_named_lora_stack_node_builds_a_chainable_registry(self): @@ -154,6 +156,24 @@ class RegionalNodeTests(unittest.TestCase): self.assertIn("green eyes", extracted[1]) self.assertEqual(tuple(rendered[0].shape), (1, 100, 100)) + def test_lora_collector_keeps_live_stack_resources_outside_the_context(self): + registry = self.module.BVNamedLoraStackNode().register( + [("portrait.safetensors", 0.8, 0.6)], "Portrait", "stack-a" + )[0] + provider = self.module.BVLoraStackCollectorNode().collect( + registry, "22222222-2222-4222-8222-222222222222" + )[0] + self.assertEqual(provider["resource_type"], "bv-nodepack.lora-stack") + self.assertEqual(provider["resources"]["stack-a"]["stack"][0][0], "portrait.safetensors") + + def test_regional_lora_node_returns_a_new_v3_context(self): + source = fixture() + payload = '{"version":1,"collector_id":null,"entries":[]}' + transformed = self.module.BVRegionalLoraNode().transform(source, "replace", payload)[0] + self.assertEqual(transformed["version"], 3) + self.assertIn("bv-nodepack.lora", transformed["capabilities"]) + self.assertEqual(source["version"], 1) + def test_detailer_mask_renders_selected_region_at_image_size(self): document = fixture() document["version"] = 2 @@ -265,7 +285,7 @@ class RegionalNodeTests(unittest.TestCase): ) self.assertEqual( set(self.module.BVRegionalKrea2AttentionNode.INPUT_TYPES()["optional"]), - {"lora_registry", "lora_bindings"}, + {"lora_registry", "lora_bindings", "resource_provider"}, ) mode = self.module.BVRegionalKrea2AttentionNode.INPUT_TYPES()["required"]["regional_lora_mode"] self.assertEqual(mode[0], ["multipass_legacy", "token_gated_singlepass"]) diff --git a/ui/src/index.css b/ui/src/index.css index 563d5d5..5df7bb8 100644 --- a/ui/src/index.css +++ b/ui/src/index.css @@ -585,4 +585,6 @@ .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 label{display:grid;grid-template-columns:72px 1fr;align-items:center;gap:6px}.bv-resource-picker select{min-width:0} .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:5px;padding:6px;border:1px solid var(--bv-ui-border);border-radius:4px} .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/index.tsx b/ui/src/index.tsx index 1babf0e..1760fa9 100644 --- a/ui/src/index.tsx +++ b/ui/src/index.tsx @@ -24,6 +24,8 @@ import { visibleExternalDetectorSlots } from "./regional/detectorExternalInputs" import { DETAILER_UI_NODES, detailerUiLabel } from "./regional/detailerLoopUi"; import { upgradeRemoteLLMProvider } from "./remoteLLM"; import { installM0ResourceSpike } from "./regional/m0ResourceSpike"; +import { installLoraV3Ui } from "./regional/loraV3Ui"; +import { installM0CanvasVisibility } from "./regional/m0VisualProjection"; import { applyReducedEffects, applyUiPreferences, applyUiSize, bindWindowSwitchModePersistence, getWindowSwitchMode, setWindowSwitchMode, UI_REDUCED_EFFECTS_SETTING_ID, UI_SIZE_SETTING_ID, UI_WINDOW_SWITCH_MODE_SETTING_ID } from "./ui/preferences"; import { BvGlobalToastStack, BV_TOOLBAR_LAUNCHER_TOGGLE_EVENT, collectScopedNodes, lastBvFullWindowType, lastBvWindowInstance, rememberBvWindowInstance, setWindowMenuVisible, showBvToast, switchBvView, ToolbarWindowLauncher, ToolbarLauncherColumn, windowMenuVisible } from "./ui"; const comfyApp = getApp(); @@ -574,6 +576,7 @@ comfyApp.registerExtension({ name: "bv_nodepack.control_rack_portal", setup() { ensureMountedOnce(); + installM0CanvasVisibility((comfyApp as any).canvas); applyUiPreferences((comfyApp as any).ui?.settings); installGlobalTextareaCompletion(); debugBridgeEnabled = Boolean((comfyApp as any).ui?.settings?.getSettingValue?.(DEBUG_BRIDGE_SETTING_ID, false)); @@ -692,6 +695,7 @@ comfyApp.registerExtension({ }], beforeRegisterNodeDef(nodeType: any, nodeData: any) { if (installM0ResourceSpike(nodeType, nodeData)) return; + if (installLoraV3Ui(nodeType, nodeData)) return; if(["BV Control Center","BV Regional Prompt","BV Regional Detailer Plan","BV Detector Registry","BV Smart Pipe","BV Smart Pipe Merge"].includes(nodeData.name)){ const created=nodeType.prototype.onNodeCreated,removed=nodeType.prototype.onRemoved; nodeType.prototype.onNodeCreated=function(){const result=created?.apply(this,arguments);if(nodeData.name!=="BV Control Center"){this.properties??={};if(typeof this.properties.bvWindowMenuVisible!=="boolean")this.properties.bvWindowMenuVisible=!['BV Smart Pipe','BV Smart Pipe Merge'].includes(nodeData.name)}queueMicrotask(refreshBvToolbarCapabilities);return result}; @@ -785,7 +789,9 @@ comfyApp.registerExtension({ if (!idWidget) return; const currentId = String(idWidget.value ?? "").trim(); if (!currentId || needsFreshStackId(String(node.id), currentId, namedLoraStacks())) { - idWidget.value = crypto.randomUUID(); + const nextId = crypto.randomUUID(); + if(currentId)node.__bvLoraResourceIdRemap={[currentId]:nextId}; + idWidget.value = nextId; node.setDirtyCanvas?.(true, true); } hideRegionalWidget(idWidget); diff --git a/ui/src/regional/LoraV3ResourcePickerPanel.tsx b/ui/src/regional/LoraV3ResourcePickerPanel.tsx new file mode 100644 index 0000000..824177f --- /dev/null +++ b/ui/src/regional/LoraV3ResourcePickerPanel.tsx @@ -0,0 +1,14 @@ +import React from "react"; +import { Button, ResourcePicker, ResourcePickerCollector } 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[]}; + +export function LoraV3ResourcePickerPanel({collectors,config,resolved,onCollector,onResource,onAddExternal}:{collectors:ResourcePickerCollector[];config:LoraV3Config;resolved:boolean;onCollector:(id:string)=>void;onResource:(entryId:string,resourceId:string)=>void;onAddExternal:()=>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)}/>
) } + {!external.length&&

No external live stack is configured.

} + +
; +} diff --git a/ui/src/regional/loraV3Config.ts b/ui/src/regional/loraV3Config.ts new file mode 100644 index 0000000..fdcb2dc --- /dev/null +++ b/ui/src/regional/loraV3Config.ts @@ -0,0 +1,11 @@ +import type { LoraV3Config } from "./LoraV3ResourcePickerPanel"; + +export const emptyLoraV3Config=():LoraV3Config=>({version:1,collector_id:null,entries:[]}); + +export function parseLoraV3Config(value:unknown):LoraV3Config{ + const candidate=typeof value==="string"?JSON.parse(value):value; + if(!candidate||typeof candidate!=="object"||(candidate as any).version!==1||!Array.isArray((candidate as any).entries))throw new Error("Invalid BV Regional LoRA v3 configuration"); + return structuredClone(candidate as LoraV3Config); +} + +export const serializeLoraV3Config=(value:LoraV3Config)=>JSON.stringify(value); diff --git a/ui/src/regional/loraV3Graph.ts b/ui/src/regional/loraV3Graph.ts new file mode 100644 index 0000000..9c104a5 --- /dev/null +++ b/ui/src/regional/loraV3Graph.ts @@ -0,0 +1,88 @@ +export const LORA_PROVIDER_TYPE="BV_RUNTIME_RESOURCE_PROVIDER"; +export const LORA_PROVIDER_SLOT="resource_provider"; +export const LORA_COLLECTOR_NODE="BV LoRA Stack Collector"; + +const graphLink=(graph:any,id:any)=>id==null?null:(graph?._links?.get?.(id)??graph?.links?.get?.(id)??graph?.links?.[id]??null); + +const slotIndex=(slots:any[]|undefined)=>slots?.findIndex(slot=>slot?.name===LORA_PROVIDER_SLOT||slot?.type===LORA_PROVIDER_TYPE)??-1; + +export function ensureLoraCollectorOutput(node:any){ + let index=slotIndex(node.outputs); + if(index<0&&node.addOutput){node.addOutput(LORA_PROVIDER_SLOT,LORA_PROVIDER_TYPE);index=slotIndex(node.outputs);} + const output=node.outputs?.[index]; + if(output){output.name=LORA_PROVIDER_SLOT;output.type=LORA_PROVIDER_TYPE;output.hidden=true;output.__bvResourceSlot=true;} + return index; +} + +export function ensureLoraConsumerInput(node:any){ + let index=slotIndex(node.inputs); + if(index<0&&node.addInput){node.addInput(LORA_PROVIDER_SLOT,LORA_PROVIDER_TYPE);index=slotIndex(node.inputs);} + const input=node.inputs?.[index]; + if(input){input.name=LORA_PROVIDER_SLOT;input.type=LORA_PROVIDER_TYPE;input.hidden=true;input.__bvResourceSlot=true;} + return index; +} + +export function linkedLocalLoraCollector(node:any){ + const input=node.inputs?.find((item:any)=>item.name===LORA_PROVIDER_SLOT||item.type===LORA_PROVIDER_TYPE); + const link=graphLink(node.graph,input?.link); + if(!link||String(link.target_id)!==String(node.id))return null; + const source=node.graph?.getNodeById?.(link.origin_id); + const output=source?.outputs?.[Number(link.origin_slot)]; + return source?.graph===node.graph&&(source?.type===LORA_COLLECTOR_NODE||output?.type===LORA_PROVIDER_TYPE)?source:null; +} + +export function connectLocalLoraCollector(consumer:any,collector:any|null){ + const input=ensureLoraConsumerInput(consumer); + if(input<0)return false; + if(consumer.inputs?.[input]?.link!=null)consumer.disconnectInput?.(input); + if(!collector)return true; + if(collector.graph!==consumer.graph)return false; + const output=ensureLoraCollectorOutput(collector); + if(output<0)return false; + collector.connect?.(output,consumer,input); + return linkedLocalLoraCollector(consumer)===collector; +} + +export function localLoraCollectors(node:any){ + return (node.graph?._nodes??[]).filter((candidate:any)=>candidate!==node&&candidate.graph===node.graph&&candidate.type===LORA_COLLECTOR_NODE); +} + +const LORA_EXECUTORS=new Set(["BV Regional Native Conditioning","BV Regional Krea 2 Attention","BV Regional Anima Conditioning"]); + +export function downstreamLoraConsumers(transformer:any){ + const graph=transformer.graph,queue=[transformer],seen=new Set([transformer]),found:any[]=[]; + while(queue.length){ + const source=queue.shift(); + for(const output of source?.outputs??[]){ + if(output?.type!=="BV_REGIONAL")continue; + for(const linkId of output.links??[]){ + const link=graphLink(graph,linkId),target=link&&graph?.getNodeById?.(link.target_id); + if(!target||target.graph!==graph||seen.has(target))continue; + seen.add(target); + if(LORA_EXECUTORS.has(target.type))found.push(target); + if((target.outputs??[]).some((item:any)=>item.type==="BV_REGIONAL")){queue.push(target);} + } + } + } + return found; +} + +export function connectLoraConsumerTree(transformer:any,collector:any|null){ + const targets=[transformer,...downstreamLoraConsumers(transformer)]; + return targets.map(target=>connectLocalLoraCollector(target,collector)).every(Boolean); +} + +export function upstreamLoraTransformer(consumer:any){ + const graph=consumer.graph,queue=[consumer],seen=new Set([consumer]); + while(queue.length){ + const target=queue.shift(); + for(const input of target?.inputs??[]){ + if(input?.type!=="BV_REGIONAL")continue; + const link=graphLink(graph,input.link),source=link&&graph?.getNodeById?.(link.origin_id); + if(!source||source.graph!==graph||seen.has(source))continue; + if(source.type==="BV Regional LoRA")return source; + seen.add(source);queue.push(source); + } + } + return null; +} diff --git a/ui/src/regional/loraV3Ui.tsx b/ui/src/regional/loraV3Ui.tsx new file mode 100644 index 0000000..5036e1d --- /dev/null +++ b/ui/src/regional/loraV3Ui.tsx @@ -0,0 +1,81 @@ +import React from "react"; +import ReactDOM from "react-dom/client"; +import { getApp } from "../appHelper.js"; +import { LoraV3ResourcePickerPanel, LoraV3Config } from "./LoraV3ResourcePickerPanel"; +import { parseLoraV3Config, serializeLoraV3Config } from "./loraV3Config"; +import { connectLocalLoraCollector, connectLoraConsumerTree, ensureLoraCollectorOutput, ensureLoraConsumerInput, linkedLocalLoraCollector, localLoraCollectors, upstreamLoraTransformer } from "./loraV3Graph"; +import { installM0CanvasVisibility } from "./m0VisualProjection"; + +const widget=(node:any,name:string)=>node.widgets?.find((item:any)=>item.name===name); +const graphLink=(graph:any,id:any)=>id==null?null:(graph?._links?.get?.(id)??graph?.links?.get?.(id)??graph?.links?.[id]??null); +const hide=(item:any)=>{if(!item)return;item.type="hidden";item.computeSize=()=>[0,-4];item.serializeValue=item.serializeValue??function(this:any){return this.value};}; +const ensureId=(item:any)=>{if(item&&!String(item.value??"").trim())item.value=crypto.randomUUID();}; +const ensureCanvasVisibility=()=>{let attempts=0;const apply=()=>{const canvas=getApp().canvas;if(canvas)installM0CanvasVisibility(canvas);else if(attempts++<40)setTimeout(apply,50)};apply();}; + +function upstreamNamedStacks(collector:any){ + const found:any[]=[],seen=new Set(),queue=[collector]; + while(queue.length){ + const target=queue.shift();if(!target||seen.has(target))continue;seen.add(target); + for(const input of target.inputs??[]){ + if(!["lora_registry","registry"].includes(input.name))continue; + const link=graphLink(target.graph,input.link),source=link&&target.graph?.getNodeById?.(link.origin_id); + if(!source||source.graph!==target.graph)continue; + if(source.type==="BV Named LoRA Stack"){ + const id=String(widget(source,"stack_id")?.value??"").trim(),label=String(widget(source,"name")?.value??"").trim(); + if(id&&label)found.push({id,label,node:source}); + } + queue.push(source); + } + } + return found.reverse(); +} + +function catalog(node:any){ + return localLoraCollectors(node).map((collector:any)=>({ + id:String(widget(collector,"collector_id")?.value??"").trim(), + label:String(collector.title||"BV LoRA Stack Collector"), + resources:upstreamNamedStacks(collector),node:collector, + })).filter((item:any)=>item.id); +} + +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&&item.type==="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};} + hide(id);ensureLoraCollectorOutput(node);node.__bvRuntimeResourceProvider=true; +} + +function installConsumerSlot(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)connectLocalLoraCollector(node,collector);} +} + +function renderTransformer(node:any){ + installConsumerSlot(node); + const configWidget=widget(node,"config_json");if(!configWidget)return; + let config:LoraV3Config;try{config=parseLoraV3Config(configWidget.value)}catch{return;} + const choices=catalog(node),linked=linkedLocalLoraCollector(node),collectorRemap=linked?.__bvLoraCollectorIdRemap?.[String(config.collector_id??"")],resourceRemaps=Object.assign({},...upstreamNamedStacks(linked).map((item:any)=>item.node?.__bvLoraResourceIdRemap??{})); + if(collectorRemap){config={...config,collector_id:collectorRemap,entries:config.entries.map(entry=>entry.source.kind==="external"&&resourceRemaps[entry.source.resource_id]?{...entry,source:{...entry.source,resource_id:resourceRemaps[entry.source.resource_id]}}:entry)};configWidget.value=serializeLoraV3Config(config);} + const resolved=Boolean(linked)&&String(widget(linked,"collector_id")?.value??"")===String(config.collector_id??""); + if(config.collector_id&&!resolved){config={...config,collector_id:null,entries:config.entries.map(entry=>entry.source.kind==="external"?{...entry,source:{...entry.source,resource_id:""}}:entry)};configWidget.value=serializeLoraV3Config(config);connectLoraConsumerTree(node,null);} + let host=node.__bvLoraPickerHost as HTMLDivElement|undefined; + if(!host){host=document.createElement("div");host.className="bv-ui bv-lora-v3-picker-host";node.__bvLoraPickerHost=host;const dom=node.addDOMWidget?.("bv_lora_resource_picker","div",host,{serialize:false,getMinHeight:()=>Math.max(140,90+config.entries.length*90)});if(dom)dom.serialize=false;node.__bvLoraPickerRoot=ReactDOM.createRoot(host);} + const save=(next:LoraV3Config)=>{configWidget.value=serializeLoraV3Config(next);node.setDirtyCanvas?.(true,true);queueMicrotask(()=>renderTransformer(node));}; + const selectable=choices.filter((choice:any)=>choice.resources.length>0); + node.__bvLoraPickerRoot.render({const choice=choices.find((item:any)=>item.id===id);const first=choice?.resources[0]?.id??"";const next={...config,collector_id:id||null,entries:config.entries.map(entry=>entry.source.kind==="external"?{...entry,source:{...entry.source,resource_id:first}}:entry)};connectLoraConsumerTree(node,choice?.node??null);save(next);}} + 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)})} + onAddExternal={()=>{const choice=selectable.find((item:any)=>item.id===config.collector_id)??selectable[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"}]}]});}}/>); +} + +export function installLoraV3Ui(nodeType:any,nodeData:any){ + const collector=nodeData.name==="BV LoRA Stack Collector",transformer=nodeData.name==="BV Regional LoRA",consumer=["BV Regional Native Conditioning","BV Regional Krea 2 Attention","BV Regional Anima Conditioning"].includes(nodeData.name); + if(!collector&&!transformer&&!consumer)return false; + const created=nodeType.prototype.onNodeCreated,configured=nodeType.prototype.onConfigure,changed=nodeType.prototype.onConnectionsChange; + const upgrade=function(this:any){if(collector)installCollector(this);if(transformer)renderTransformer(this);if(consumer)installConsumerSlot(this);}; + nodeType.prototype.onNodeCreated=function(){const result=created?.apply(this,arguments);queueMicrotask(()=>upgrade.call(this));return result;}; + nodeType.prototype.onConfigure=function(){const result=configured?.apply(this,arguments);queueMicrotask(()=>upgrade.call(this));return result;}; + nodeType.prototype.onConnectionsChange=function(){const result=changed?.apply(this,arguments);queueMicrotask(()=>upgrade.call(this));return result;}; + return true; +} diff --git a/ui/src/regional/m0VisualProjection.ts b/ui/src/regional/m0VisualProjection.ts index 95592de..037324b 100644 --- a/ui/src/regional/m0VisualProjection.ts +++ b/ui/src/regional/m0VisualProjection.ts @@ -1,4 +1,6 @@ const M0_PROVIDER_TYPE="BV_RUNTIME_RESOURCE_PROVIDER_M0"; +const V3_PROVIDER_TYPE="BV_RUNTIME_RESOURCE_PROVIDER"; +const providerType=(value:unknown)=>value===M0_PROVIDER_TYPE||value===V3_PROVIDER_TYPE; type M0Slot = { name?:string; label?:string; localized_name?:string; type?:string; hidden?:boolean; __bvM0VisualHidden?: boolean; __bvM0PortHidden?:boolean; __bvM0ResourceSlot?: boolean; link?: unknown; draw?:(...args:any[])=>unknown; drawCollapsed?:(...args:any[])=>unknown }; type M0Node = { id?: string|number; inputs?: M0Slot[]; outputs?: M0Slot[]; properties?:Record; __bvM0ResourceConsumer?:boolean; __bvM0FanInAnchorSlot?:number; __bvM0FanInPoint?:Readonly<[number,number]>; __bvM0ElementMarkRevision?:number; getConnectionPos?:(input:boolean,slot:number)=>Readonly<[number,number]> }; @@ -8,9 +10,10 @@ function workflowHasM0Debug(graph:any){ function hiddenLink(canvas:any,link:any) { if (!link) return false; - if(resourceLink(canvas,link))return !workflowHasM0Debug(canvas.graph); const origin=canvas.graph?.getNodeById?.(link.origin_id) as M0Node|undefined; const target=canvas.graph?.getNodeById?.(link.target_id) as M0Node|undefined; + if(origin?.outputs?.[link.origin_slot]?.type===V3_PROVIDER_TYPE||target?.inputs?.[link.target_slot]?.type===V3_PROVIDER_TYPE)return true; + if(resourceLink(canvas,link))return !workflowHasM0Debug(canvas.graph); return Boolean(origin?.outputs?.[link.origin_slot]?.__bvM0VisualHidden||target?.inputs?.[link.target_slot]?.__bvM0VisualHidden); } @@ -19,7 +22,7 @@ function resourceLink(canvas:any,link:any) { const origin=canvas.graph?.getNodeById?.(link.origin_id) as M0Node|undefined; const target=canvas.graph?.getNodeById?.(link.target_id) as M0Node|undefined; const output=origin?.outputs?.[link.origin_slot],input=target?.inputs?.[link.target_slot]; - return Boolean((output?.__bvM0ResourceSlot||output?.type===M0_PROVIDER_TYPE)&&(input?.__bvM0ResourceSlot||input?.type===M0_PROVIDER_TYPE)); + return Boolean((output?.__bvM0ResourceSlot||providerType(output?.type))&&(input?.__bvM0ResourceSlot||providerType(input?.type))); } export function requestM0DebugAnimation(canvas:any){ @@ -68,7 +71,7 @@ export function installM0CanvasVisibility(canvas: any) { canvas.drawNode = function (node:M0Node,ctx:CanvasRenderingContext2D) { const restores:Array<()=>void>=[]; for(const slot of [...(node.inputs??[]),...(node.outputs??[])]){ - if(slot.type!==M0_PROVIDER_TYPE)continue; + if(!providerType(slot.type))continue; for(const field of ["name","label","localized_name"] as const){ const own=Object.prototype.hasOwnProperty.call(slot,field),value=slot[field]; Object.defineProperty(slot,field,{configurable:true,writable:true,value:""});